libdbi-drivers-0.9.0/000755 001750 001750 00000000000 12117473273 015276 5ustar00markusmarkus000000 000000 libdbi-drivers-0.9.0/m4/000755 001750 001750 00000000000 12117473257 015620 5ustar00markusmarkus000000 000000 libdbi-drivers-0.9.0/README000644 001750 001750 00000005331 12117466625 016163 0ustar00markusmarkus000000 000000 libdbi-drivers - drivers for libdbi, a database abstraction layer implemented in C Copyright (C) 2001-2013, Markus Hoenicka http://libdbi-drivers.sourceforge.net INTRODUCTION: ------------- libdbi (http://libdbi.sourceforge.net) implements a database-independent abstraction layer in C, similar to the DBI/DBD layer in Perl. Writing one generic set of code, programmers can leverage the power of multiple databases and multiple simultaneous database connections by using this framework. libdbi-drivers (http://libdbi-drivers.sourceforge.net) supplies the drivers that the libdbi framework utilizes to talk to the supported database servers. INSTALLATION: ------------- Make sure you have both the libdbi framework installed and the development libraries and headers of the database engine(s) that you want to build the driver(s) for. Perform the regular ./configure, make, make install. See INSTALL for the generic details of each step. It is important to understand that you have to request the driver(s) that you want to build on the configure command line. E.g. to build both the SQLite and the PostgreSQL drivers, use "./configure --with-sqlite --with-pgsql". See ./configure --help for more libdbi-drivers configuration options. If you are building the Win32 port, see README.win32. If you are building the OSX port, see README.osx. AVAILABLE DRIVERS: ------------------ * DB2 (experimental) * Firebird/Interbase (experimental) * FreeTDS (experimental) * Ingres (experimental) * mSQL (experimental) * MySQL * Oracle (experimental) * PostgreSQL * SQLite * SQLite3 SUPPORTED PLATFORMS: -------------------- libdbi-drivers has been written with cross-platform availability in mind. To date, chances are it is going to run with: Linux: Debian, RedHat, Slackware, Gentoo Windows: all versions supported by Cygwin FreeBSD: 4.3 through 9.1 SunOS: 2.8 Solaris: 7 AIX: 4.2, 4.3 and 5.1 OSX: 10.2-10.4 If you are using libdbi on a platform not listed here, please notify the mailing list! (see below) MODIFICATIONS AND REDISTRIBUTION (LGPL): ---------------------------------------- See the GNU Lesser General Public License, available in the distribution file COPYING or visit http://www.gnu.org for more details. DOCUMENTATION: -------------- All driver subdirectories contain README, AUTHORS, and CHANGELOG files with information about the particular driver. In addition, each driver provides a short manual formatted as PDF and HTML. MAILING LISTS: -------------- * libdbi-drivers users/developers: libdbi-drivers-devel@lists.sourceforge.net CONTACT INFO: ------------- http://libdbi-drivers.sourceforge.net Markus Hoenicka David Parker $Id: README,v 1.12 2013/03/11 23:49:41 mhoenicka Exp $ libdbi-drivers-0.9.0/acinclude.m4000644 001750 001750 00000041225 11530046017 017461 0ustar00markusmarkus000000 000000 ## ## originally by Christian Hammers , ## who borrowed ideas from Stephan Kulow. ## then this file was tweaked by David Parker for libdbi. ## and finally it was ripped out and modified by Markus ## Hoenicka who then used for the libdbi-drivers project ## dnl AC_SEARCH_LIBS_VAR(FUNCTION, SEARCH-LIBS [, ACTION-IF-FOUND dnl [, ACTION-IF-NOT-FOUND [, OTHER-LIBRARIES [, VAR]]]]) dnl Search for a library defining FUNC, if it's not already available. dnl If a library is needed, add it to VAR (typically prog_LDADD) but dnl not to LIBS AC_DEFUN([AC_SEARCH_LIBS_VAR], [AC_PREREQ([2.13]) AC_CACHE_CHECK([for library containing $1], [ac_cv_search_$1], [ac_func_search_save_LIBS="$LIBS" ac_cv_search_$1="no" AC_TRY_LINK_FUNC([$1], [ac_cv_search_$1="none required"]) test "$ac_cv_search_$1" = "no" && for i in $2; do LIBS="-l$i $5 $ac_func_search_save_LIBS" AC_TRY_LINK_FUNC([$1], [ac_cv_search_$1="-l$i" break]) done LIBS="$ac_func_search_save_LIBS"]) if test "$ac_cv_search_$1" != "no"; then test "$ac_cv_search_$1" = "none required" || $6="$$6 $ac_cv_search_$1" $3 else : $4 fi]) dnl try to get rid of this AC_DEFUN([AC_FIND_FILE], [ $3=no for i in $2; do for j in $1; do if test -r "$i/$j"; then $3=$i break 2 fi done done ]) ## DBI AC_DEFUN([AC_CHECK_DBI], [ AM_CONDITIONAL(HAVE_DBI, false) ac_dbi_incdir="no" # exported variables DBI_INCLUDE="" AC_MSG_CHECKING(for libdbi framework) AC_ARG_WITH(dbi-incdir, [ --with-dbi-incdir Specifies where the libdbi include files are.], [ ac_dbi_incdir="$withval" ]) if test "$ac_dbi_incdir" = "no"; then AC_CHECK_HEADERS([dbi/dbi.h]) DBI_INCLUDE="" else DBI_INCLUDE=-I$ac_dbi_incdir fi AC_SUBST(DBI_INCLUDE) ]) ## MYSQL AC_DEFUN([AC_CHECK_MYSQL], [ AM_CONDITIONAL(HAVE_MYSQL, false) ac_mysql="no" ac_mysql_incdir="no" ac_mysql_libdir="no" # exported variables MYSQL_LIBS="" MYSQL_LDFLAGS="" MYSQL_INCLUDE="" MYSQL_TEST="" AC_MSG_CHECKING(for MySQL support) AC_ARG_WITH(mysql, [ --with-mysql Include MySQL support.], [ ac_mysql="$withval" ]) AC_ARG_WITH(mysql-incdir, [ --with-mysql-incdir Specifies where the MySQL include files are.], [ ac_mysql_incdir="$withval" ]) AC_ARG_WITH(mysql-libdir, [ --with-mysql-libdir Specifies where the MySQL libraries are.], [ ac_mysql_libdir="$withval" ]) ac_mysql_threadsafe="NO" AC_ARG_ENABLE(mysql-threadsafe, [ --enable-mysql-threadsafe use threadsafe version of libmysqlclient.], [ if test "$enable_mysql_threadsafe" = "yes"; then ac_mysql_threadsafe="YES" fi]) if test "$ac_mysql" = "yes"; then AC_MSG_RESULT(yes) if test "$ac_mysql_incdir" = "no" || test "$ac_mysql_libdir" = "no"; then AC_CHECK_PROG([MYSQL_CONFIG], [mysql_config], [yes], [no]) if test "$MYSQL_CONFIG" = "no"; then AC_MSG_ERROR([cannot auto-configure MySQL without mysql_config]) fi fi if test "$ac_mysql_incdir" = "no"; then MYSQL_INCLUDE=`mysql_config --include` else MYSQL_INCLUDE=-I$ac_mysql_incdir fi if test "$ac_mysql_libdir" = "no"; then if test "$ac_mysql_threadsafe" = "YES"; then MYSQL_LIBS=`mysql_config --libs_r` else MYSQL_LIBS=`mysql_config --libs` fi else if test "$ac_mysql_threadsafe" = "YES"; then MYSQL_LIBS="-L$ac_mysql_libdir -lmysqlclient_r" else MYSQL_LIBS="-L$ac_mysql_libdir -lmysqlclient" fi fi AM_CONDITIONAL(HAVE_MYSQL, true) MYSQL_TEST="test_mysql.sh" AC_SUBST(MYSQL_LIBS) AC_SUBST(MYSQL_INCLUDE) AC_MSG_CHECKING(for MySQL includes) AC_MSG_RESULT($MYSQL_INCLUDE) AC_SUBST(MYSQL_LDFLAGS) AC_MSG_CHECKING(for MySQL libraries) AC_MSG_RESULT($MYSQL_LDFLAGS) else AC_MSG_RESULT(no) fi AC_SUBST(MYSQL_TEST) ]) ## PGSQL AC_DEFUN([AC_CHECK_PGSQL], [ AM_CONDITIONAL(HAVE_PGSQL, false) ac_pgsql="no" ac_pgsql_incdir="no" ac_pgsql_libdir="no" # exported variables PGSQL_LIBS="" PGSQL_LDFLAGS="" PGSQL_INCLUDE="" PGSQL_TEST="" AC_MSG_CHECKING(for PostgreSQL support) AC_ARG_WITH(pgsql, [ --with-pgsql Include PostgreSQL support.], [ ac_pgsql="$withval" ]) AC_ARG_WITH(pgsql-incdir, [ --with-pgsql-incdir Specifies where the PostgreSQL include files are.], [ ac_pgsql_incdir="$withval" ]) AC_ARG_WITH(pgsql-libdir, [ --with-pgsql-libdir Specifies where the PostgreSQL libraries are.], [ ac_pgsql_libdir="$withval" ]) if test "$ac_pgsql" = "yes"; then AC_MSG_RESULT([yes]) if test "$ac_pgsql_incdir" = "no" || test "$ac_pgsql_libdir" = "no"; then AC_CHECK_PROG([PG_CONFIG], [pg_config], [yes], [no]) if test "$PG_CONFIG" = "no"; then AC_MSG_ERROR([cannot auto-configure PostgreSQL without pg_config]) fi fi if test "$ac_pgsql_incdir" = "no"; then PGSQL_INCLUDE="-I"`pg_config --includedir` else PGSQL_INCLUDE=-I$ac_pgsql_incdir fi if test "$ac_pgsql_libdir" = "no"; then PGSQL_LDFLAGS=`pg_config --libdir` else PGSQL_LDFLAGS=-L$ac_pgsql_libdir fi PGSQL_LIBS=-lpq PGSQL_TEST="test_pgsql.sh" AM_CONDITIONAL(HAVE_PGSQL, true) AC_SUBST(PGSQL_LIBS) AC_SUBST(PGSQL_INCLUDE) AC_MSG_CHECKING(for PostgreSQL includes) AC_MSG_RESULT($PGSQL_INCLUDE) AC_SUBST(PGSQL_LDFLAGS) AC_MSG_CHECKING(for PostgreSQL libraries) AC_MSG_RESULT($PGSQL_LDFLAGS) else AC_MSG_RESULT(no) fi AC_SUBST(PGSQL_TEST) ]) ## SQLITE AC_DEFUN([AC_CHECK_SQLITE], [ AM_CONDITIONAL(HAVE_SQLITE, false) ac_sqlite="no" ac_sqlite_incdir="no" ac_sqlite_libdir="no" # exported variables SQLITE_LIBS="" SQLITE_LDFLAGS="" SQLITE_INCLUDE="" SQLITE_TEST="" AC_MSG_CHECKING(for SQLite support) AC_ARG_WITH(sqlite, [ --with-sqlite Include SQLite support.], [ ac_sqlite="$withval" ]) AC_ARG_WITH(sqlite-incdir, [ --with-sqlite-incdir Specifies where the SQLite include files are.], [ ac_sqlite_incdir="$withval" ]) AC_ARG_WITH(sqlite-libdir, [ --with-sqlite-libdir Specifies where the SQLite libraries are.], [ ac_sqlite_libdir="$withval" ]) if test "$ac_sqlite" = "yes"; then AC_MSG_RESULT([yes]) if test "$ac_sqlite_incdir" = "no"; then AC_CHECK_HEADER([sqlite.h]) SQLITE_INCLUDE="" else SQLITE_INCLUDE=-I$ac_sqlite_incdir fi if test "$ac_sqlite_libdir" = "no"; then AC_SEARCH_LIBS_VAR(sqlite_exec, sqlite, , , , SQLITE_LIBS) SQLITE_LDFLAGS="" else SQLITE_LIBS=-lsqlite SQLITE_LDFLAGS=-L$ac_sqlite_libdir fi SQLITE_TEST="test_sqlite.sh" AM_CONDITIONAL(HAVE_SQLITE, true) AC_SUBST(SQLITE_LIBS) AC_SUBST(SQLITE_INCLUDE) AC_SUBST(SQLITE_LDFLAGS) else AC_MSG_RESULT(no) fi AC_SUBST(SQLITE_TEST) ]) ## SQLITE3 AC_DEFUN([AC_CHECK_SQLITE3], [ AM_CONDITIONAL(HAVE_SQLITE3, false) ac_sqlite3="no" ac_sqlite3_incdir="no" ac_sqlite3_libdir="no" # exported variables SQLITE3_LIBS="" SQLITE3_LDFLAGS="" SQLITE3_INCLUDE="" SQLITE3_TEST="" AC_MSG_CHECKING(for SQLite3 support) AC_ARG_WITH(sqlite3, [ --with-sqlite3 Include SQLite3 support.], [ ac_sqlite3="$withval" ]) AC_ARG_WITH(sqlite3-incdir, [ --with-sqlite3-incdir Specifies where the SQLite3 include files are.], [ ac_sqlite3_incdir="$withval" ]) AC_ARG_WITH(sqlite3-libdir, [ --with-sqlite3-libdir Specifies where the SQLite3 libraries are.], [ ac_sqlite3_libdir="$withval" ]) if test "$ac_sqlite3" = "yes"; then AC_MSG_RESULT([yes]) if test "$ac_sqlite3_incdir" = "no"; then AC_CHECK_HEADER([sqlite3.h]) SQLITE3_INCLUDE="" else SQLITE3_INCLUDE=-I$ac_sqlite3_incdir fi if test "$ac_sqlite3_libdir" = "no"; then AC_SEARCH_LIBS_VAR([sqlite3_exec], sqlite3, , , , SQLITE3_LIBS) SQLITE3_LDFLAGS="" else SQLITE3_LIBS=-lsqlite SQLITE3_LDFLAGS=-L$ac_sqlite3_libdir fi SQLITE3_TEST="test_sqlite3.sh" AM_CONDITIONAL(HAVE_SQLITE3, true) AC_SUBST(SQLITE3_LIBS) AC_SUBST(SQLITE3_INCLUDE) AC_SUBST(SQLITE3_LDFLAGS) else AC_MSG_RESULT(no) fi AC_SUBST(SQLITE3_TEST) ]) ## mSQL AC_DEFUN([AC_CHECK_MSQL], [ AM_CONDITIONAL(HAVE_MSQL, false) ac_msql="no" ac_msql_incdir="no" ac_msql_libdir="no" # exported variables MSQL_LIBS="" MSQL_LDFLAGS="" MSQL_INCLUDE="" MSQL_TEST="" AC_MSG_CHECKING(for Msql support) AC_ARG_WITH(msql, [ --with-msql Include MiniSQL (mSQL) support.], [ ac_msql="$withval" ]) AC_ARG_WITH(msql-incdir, [ --with-msql-incdir Specifies where the mSQL include files are.], [ ac_msql_incdir="$withval" ]) AC_ARG_WITH(msql-libdir, [ --with-msql-libdir Specifies where the mSQL libraries are.], [ ac_msql_libdir="$withval" ]) if test "$ac_msql" = "yes"; then AC_MSG_RESULT([yes]) if test "$ac_msql_incdir" = "no"; then AC_CHECK_HEADER([msql.h]) MSQL_INCLUDE="" else MSQL_INCLUDE=-I$ac_msql_incdir fi if test "$ac_msql_libdir" = "no"; then AC_SEARCH_LIBS_VAR(msql_exec, msql, , , , MSQL_LIBS) MSQL_LDFLAGS="" else MSQL_LIBS=-lmsql MSQL_LDFLAGS=-L$ac_msql_libdir fi MSQL_TEST="test_msql.sh" AM_CONDITIONAL(HAVE_MSQL, true) AC_SUBST(MSQL_LIBS) AC_SUBST(MSQL_INCLUDE) AC_SUBST(MSQL_LDFLAGS) else AC_MSG_RESULT(no) fi AC_SUBST(MSQL_TEST) ]) ## Oracle AC_DEFUN([AC_CHECK_ORACLE], [ AM_CONDITIONAL(HAVE_ORACLE, false) ac_oracle="no" ac_oracle_incdir="no" ac_oracle_libdir="no" # exported variables ORACLE_LIBS="" ORACLE_LDFLAGS="" ORACLE_INCLUDE="" ORACLE_TEST="" AC_MSG_CHECKING(for Oracle support) AC_ARG_WITH(oracle, [ --with-oracle Include Oracle support.], [ ac_oracle="$withval" ]) AC_ARG_WITH(oracle-dir, [ --with-oracle-dir Specifies ORACLE_HOME.], [ ac_oracle_incdir="$withval"/rdbms/demo ac_oracle_libdir="$withval"/lib ]) AC_ARG_WITH(oracle-incdir, [ --with-oracle-incdir Specifies where the Oracle include files are.], [ ac_oracle_incdir="$withval" ]) AC_ARG_WITH(oracle-libdir, [ --with-oracle-libdir Specifies where the Oracle libraries are.], [ ac_oracle_libdir="$withval" ]) if test "$ac_oracle" = "yes"; then if test "$ac_oracle_incdir" = "no" || test "$ac_oracle_libs" = "no"; then oracle_incdirs="$ORACLE_HOME/rdbms/demo $ORACLE_HOME/rdbms/public" AC_FIND_FILE(oci.h, $oracle_incdirs, ac_oracle_incdir) oracle_libdirs="$ORACLE_HOME/lib" AC_FIND_FILE(libclntsh.so, $oracle_libdirs, ac_oracle_libdir) if test "$ac_oracle_incdir" = "no"; then AC_MSG_RESULT(no) AC_MSG_ERROR([Invalid Oracle directory - include files not found.]) fi if test "$ac_oracle_libdir" = "no"; then AC_MSG_RESULT(no) AC_MSG_ERROR([Invalid Oracle directory - libraries not found.]) fi fi AC_MSG_RESULT([yes: libs in $ac_oracle_libdir, headers in $ac_oracle_incdir]) AM_CONDITIONAL(HAVE_ORACLE, true) ORACLE_LIBS=-lclntsh ORACLE_INCLUDE="-I$ac_oracle_incdir -I$ORACLE_HOME/rdbms/public" ORACLE_LDFLAGS=-L$ac_oracle_libdir ORACLE_TEST="test_oracle.sh" AC_SUBST(ORACLE_LIBS) AC_SUBST(ORACLE_INCLUDE) AC_SUBST(ORACLE_LDFLAGS) else AC_MSG_RESULT(no) fi AC_SUBST(ORACLE_TEST) ]) ## Firebird AC_DEFUN([AC_CHECK_FIREBIRD_INTERBASE], [ AM_CONDITIONAL(HAVE_FIREBIRD_INTERBASE, false) ac_firebird="no" ac_firebird_incdir="no" ac_firebird_libdir="no" # exported variables FIREBIRD_LIBS="" FIREBIRD_LDFLAGS="" FIREBIRD_INCLUDE="" FIREBIRD_TEST="" AC_MSG_CHECKING(for Firebird/Interbase support) AC_ARG_WITH(firebird, [ --with-firebird Include Firebird/Interbase support.], [ ac_firebird="$withval" ]) AC_ARG_WITH(firebird-incdir, [ --with-firebird-incdir Specifies where the Firebird/Interbase include files are.], [ ac_firebird_incdir="$withval" ]) AC_ARG_WITH(firebird-libdir, [ --with-firebird-libdir Specifies where the Firebird/Interbase libraries are.], [ ac_firebird_libdir="$withval" ]) if test "$ac_firebird" = "yes"; then AC_MSG_RESULT([yes]) if test "$ac_firebird_incdir" = "no"; then AC_CHECK_HEADER([ibase.h]) FIREBIRD_INCLUDE="" else FIREBIRD_INCLUDE=-I$ac_firebird_incdir fi if test "$ac_firebird_libdir" = "no"; then AC_SEARCH_LIBS_VAR(isc_dsql_fetch, fbembed, , , , FIREBIRD_LIBS) FIREBIRD_LDFLAGS="" else FIREBIRD_LIBS=-lfbembed FIREBIRD_LDFLAGS=-L$ac_firebird_libdir fi AC_CHECK_PROGS(FIREBIRD_ISQL,[isql-fb isql]) if test "x$FIREBIRD_ISQL != x"; then FIREBIRD_ISQL_FLAG="-DFIREBIRD_ISQL=\\\"$FIREBIRD_ISQL\\\"" else FIREBIRD_ISQL_FLAG="" fi FIREBIRD_TEST="test_firebird.sh" AM_CONDITIONAL(HAVE_FIREBIRD_INTERBASE, true) AC_SUBST(FIREBIRD_LIBS) AC_SUBST(FIREBIRD_INCLUDE) AC_SUBST(FIREBIRD_LDFLAGS) AC_SUBST(FIREBIRD_ISQL_FLAG) else AC_MSG_RESULT(no) fi AC_SUBST(FIREBIRD_TEST) ]) ## Freetds AC_DEFUN([AC_CHECK_FREETDS], [ AM_CONDITIONAL(HAVE_FREETDS, false) ac_freetds="no" ac_freetds_incdir="no" ac_freetds_libdir="no" # exported variables FREETDS_LIBS="" FREETDS_LDFLAGS="" FREETDS_INCLUDE="" FREETDS_TEST="" AC_MSG_CHECKING(for Freetds support) AC_ARG_WITH(freetds, [ --with-freetds Include Freetds support.], [ ac_freetds="$withval" ]) AC_ARG_WITH(freetds-incdir, [ --with-freetds-incdir Specifies where the Freetds include files are.], [ ac_freetds_incdir="$withval" ]) AC_ARG_WITH(freetds-libdir, [ --with-freetds-libdir Specifies where the Freetds libraries are.], [ ac_freetds_libdir="$withval" ]) if test "$ac_freetds" = "yes"; then AC_MSG_RESULT([yes]) if test "$ac_freetds_incdir" = "no"; then AC_CHECK_HEADER([tds.h]) FREETDS_INCLUDE="" else FREETDS_INCLUDE=-I$ac_freetds_incdir fi if test "$ac_freetds_libdir" = "no"; then AC_SEARCH_LIBS_VAR(ct_command, ct, , , , FREETDS_LIBS) FREETDS_LDFLAGS="" else FREETDS_LIBS=-lct FREETDS_LDFLAGS=-L$ac_freetds_libdir fi FREETDS_TEST="test_freetds.sh" AM_CONDITIONAL(HAVE_FREETDS, true) AC_SUBST(FREETDS_LIBS) AC_SUBST(FREETDS_INCLUDE) AC_SUBST(FREETDS_LDFLAGS) else AC_MSG_RESULT(no) fi AC_SUBST(FREETDS_TEST) ]) ## Ingres AC_DEFUN([AC_CHECK_INGRES], [ AM_CONDITIONAL(HAVE_INGRES, false) ac_ingres="no" ac_ingres_incdir="no" ac_ingres_libdir="no" # exported variables INGRES_LIBS="" INGRES_LDFLAGS="" INGRES_INCLUDE="" INGRES_TEST="" AC_MSG_CHECKING(for Ingres support) AC_ARG_WITH(ingres, [ --with-ingres Include Ingres support.], [ ac_ingres="$withval" ]) AC_ARG_WITH(ingres-dir, [ --with-ingres-dir Specifies II_SYSTEM.], [ ac_ingres_incdir="$withval"/ingres/files ac_ingres_libdir="$withval"/ingres/lib ]) AC_ARG_WITH(ingres-incdir, [ --with-ingres-incdir Specifies where the Ingres include files are.], [ ac_ingres_incdir="$withval" ]) AC_ARG_WITH(ingres-libdir, [ --with-ingres-libdir Specifies where the Ingres libraries are.], [ ac_ingres_libdir="$withval" ]) if test "$ac_ingres" = "yes"; then if test "$ac_ingres_incdir" = "no" || test "$ac_ingres_libs" = "no"; then ingres_incdirs="/usr/include /usr/local/include /opt/Ingres/IngresII/ingres/files" AC_FIND_FILE(iiapi.h, $ingres_incdirs, ac_ingres_incdir) ingres_libdirs="/usr/lib /usr/local/lib /opt/Ingres/IngresII/ingres/lib" AC_FIND_FILE(libingres.a, $ingres_libdirs, ac_ingres_libdir) if test "$ac_ingres_incdir" = "no"; then AC_MSG_RESULT(no) AC_MSG_ERROR([Invalid Ingres directory - include files not found.]) fi if test "$ac_ingres_libdir" = "no"; then AC_MSG_RESULT(no) AC_MSG_ERROR([Invalid Ingres directory - libraries not found.]) fi fi AC_MSG_RESULT([yes: libs in $ac_ingres_libdir, headers in $ac_ingres_incdir]) AM_CONDITIONAL(HAVE_INGRES, true) INGRES_LIBS="-lingres -lpthread -ldl -lm -lcrypt" INGRES_INCLUDE=-I$ac_ingres_incdir INGRES_LDFLAGS=-L$ac_ingres_libdir INGRES_TEST="test_ingres.sh" AC_SUBST(INGRES_LIBS) AC_SUBST(INGRES_INCLUDE) AC_SUBST(INGRES_LDFLAGS) else AC_MSG_RESULT(no) fi AC_SUBST(INGRES_TEST) ]) ## Db2 AC_DEFUN([AC_CHECK_DB2], [ AM_CONDITIONAL(HAVE_DB2, false) ac_db2="no" ac_db2_incdir="no" ac_db2_libdir="no" # exported variables DB2_LIBS="" DB2_LDFLAGS="" DB2_INCLUDE="" DB2_TEST="" AC_MSG_CHECKING(for IBM DB2 support) AC_ARG_WITH(db2, [ --with-db2 Include IBM DB2 support.], [ ac_db2="$withval" ]) AC_ARG_WITH(db2-dir, [ --with-db2-dir Specifies DB2_HOME.], [ ac_db2_incdir="$withval"/include ac_db2_libdir="$withval"/lib ]) AC_ARG_WITH(db2-incdir, [ --with-db2-incdir Specifies where the IBM DB2 include files are.], [ ac_db2_incdir="$withval" ]) AC_ARG_WITH(db2-libdir, [ --with-db2-libdir Specifies where the IBM DB2 libraries are.], [ ac_db2_libdir="$withval" ]) if test "$ac_db2" = "yes"; then if test "$ac_db2_incdir" = "no" || test "$ac_db2_libs" = "no"; then db2_incdirs="$DB2_HOME/rdbms/demo $DB2_HOME/rdbms/public" AC_FIND_FILE(sqlcli1.h, $db2_incdirs, ac_db2_incdir) db2_libdirs="$ORACLE_HOME/lib" AC_FIND_FILE(libdb2.so, $db2_libdirs, ac_db2_libdir) if test "$ac_db2_incdir" = "no"; then AC_MSG_RESULT(no) AC_MSG_ERROR([Invalid IBM DB2 directory - include files not found.]) fi if test "$ac_db2_libdir" = "no"; then AC_MSG_RESULT(no) AC_MSG_ERROR([Invalid IBM DB2 directory - libraries not found.]) fi fi AC_MSG_RESULT([yes: libs in $ac_db2_libdir, headers in $ac_db2_incdir]) AM_CONDITIONAL(HAVE_DB2, true) DB2_LIBS=-ldb2 DB2_INCLUDE="-I$ac_db2_incdir -I$DB2_HOME/include" DB2_LDFLAGS=-L$ac_db2_libdir DB2_TEST="test_db2.sh" AC_SUBST(DB2_LIBS) AC_SUBST(DB2_INCLUDE) AC_SUBST(DB2_LDFLAGS) else AC_MSG_RESULT(no) fi AC_SUBST(DB2_TEST) ]) libdbi-drivers-0.9.0/configure.in000644 001750 001750 00000017760 12117465621 017620 0ustar00markusmarkus000000 000000 dnl Process this file with autoconf to produce a configure script. AC_INIT(drivers/sqlite/dbd_sqlite.c) AM_MAINTAINER_MODE AM_INIT_AUTOMAKE(libdbi-drivers, 0.9.0) AM_CONFIG_HEADER(config.h) AC_LIBTOOL_WIN32_DLL AC_CONFIG_MACRO_DIR([m4]) dnl library versioning currently unnecessary... dnl dnl Library versioning dnl LIB_CURRENT=0 dnl LIB_REVISION=4 dnl LIB_AGE=0 dnl AC_SUBST(LIB_CURRENT) dnl AC_SUBST(LIB_REVISION) dnl AC_SUBST(LIB_AGE) AC_CANONICAL_HOST driverdir=$libdir/dbd AC_SUBST(driverdir) dnl ==================================== dnl Fix CFLAGS to avoid the default -g option dnl CFLAGS will still be picked up from the environment dnl ==================================== : ${CFLAGS=""} dnl ==================================== dnl Check for programs dnl ==================================== AC_PROG_CC AC_PROG_LD AC_PROG_INSTALL LT_INIT dnl AM_PROG_LIBTOOL AC_PROG_CPP dnl ==================================== dnl Set some general compile options dnl ==================================== dnl the configure script < 1.0 used to set compile options here. We dnl removed these optimizations and suggest that package maintainers dnl set up things appropriately for their particular platform. In dnl order to give some ideas, these optimizations were used dnl previously: dnl if test -z "$GCC"; then dnl case $host in dnl *-*-irix*) dnl if test -z "$CC"; then dnl CC=cc dnl fi dnl DEBUG="-g -signed" dnl CFLAGS="-O2 -w -signed $CFLAGS" dnl PROFILE="-p -g3 -O2 -signed" ;; dnl sparc-sun-solaris*) dnl DEBUG="-v -g" dnl CFLAGS="-xO4 -fast -w -fsimple -native -xcg92 $CFLAGS" dnl PROFILE="-v -xpg -g -xO4 -fast -native -fsimple -xcg92 -Dsuncc" ;; dnl *-*-freebsd*) dnl DEBUG="-g" dnl CFLAGS="-O -I/usr/local/include $CFLAGS" dnl CPPFLAGS="-I/usr/local/include $CPPFLAGS" dnl LDFLAGS="-L/usr/local/lib $LDFLAGS" dnl PROFILE="-g -p" ;; dnl *) dnl DEBUG="-g" dnl CFLAGS="-O $CFLAGS" dnl PROFILE="-g -p" ;; dnl esac dnl else dnl case $host in dnl *-*-linux*) dnl DEBUG="-g -Wall -D_REENTRANT -D__NO_MATH_INLINES -fsigned-char" dnl CFLAGS="-O20 -ffast-math -D_REENTRANT -fsigned-char $CFLAGS" dnl PROFILE="-pg -g -O20 -ffast-math -D_REENTRANT -fsigned-char";; dnl sparc-sun-*) dnl DEBUG="-g -Wall -D__NO_MATH_INLINES -fsigned-char -mv8" dnl CFLAGS="-O20 -ffast-math -D__NO_MATH_INLINES -fsigned-char -mv8 $CFLAGS" dnl PROFILE="-pg -g -O20 -D__NO_MATH_INLINES -fsigned-char -mv8" ;; dnl *-*-freebsd*) dnl DEBUG="-g -Wall -D__NO_MATH_INLINES -fsigned-char" dnl CFLAGS="-O20 -D__NO_MATH_INLINES -fsigned-char -I/usr/local/include $CFLAGS" dnl CPPFLAGS="-I/usr/local/include $CPPFLAGS" dnl LDFLAGS="-L/usr/local/lib $LDFLAGS" dnl PROFILE="-O20 -g -pg -D__NO_MATH_INLINES -fsigned-char" ;; dnl *) dnl DEBUG="-g -Wall -D__NO_MATH_INLINES -fsigned-char" dnl CFLAGS="-O20 -D__NO_MATH_INLINES -fsigned-char $CFLAGS" dnl PROFILE="-O20 -g -pg -D__NO_MATH_INLINES -fsigned-char" ;; dnl esac dnl fi if [ test -z "$GCC" ]; then DEBUG="-g $CFLAGS" PROFILE="-g -p $CFLAGS" else DEBUG="-g -std=gnu99 $CFLAGS" PROFILE="-g -p -std=gnu99 $CFLAGS" CFLAGS="-std=gnu99 $CFLAGS" fi AC_SUBST(DEBUG) AC_SUBST(PROFILE) case $host in *-*-*bsd*) dlopen_flag="RTLD_LAZY" ;; *) dlopen_flag="RTLD_NOW" ;; esac AC_DEFINE_UNQUOTED(DLOPEN_FLAG, $dlopen_flag, [ Specifies the mode of dlopen behavior ]) dnl ============================== dnl Check for libraries dnl ============================== dnl framework and database engine client libraries AC_CHECK_DBI AC_CHECK_MYSQL AC_CHECK_PGSQL AC_CHECK_SQLITE AC_CHECK_SQLITE3 AC_CHECK_MSQL AC_CHECK_ORACLE AC_CHECK_FIREBIRD_INTERBASE AC_CHECK_FREETDS AC_CHECK_INGRES AC_CHECK_DB2 dnl ============================== dnl Check for functions dnl ============================== case $host in *-*-win32*) shlib_ext=.dll ;; *-*-cygwin*) shlib_ext=.dll ;; *-*-mingw32*) shlib_ext=.dll ;; *) shlib_ext=.so ;; esac AC_ARG_WITH(shlib-ext, [ --with-shlib-ext Specifies the filename extension of loadable modules (usually not necessary).], [ shlib_ext=$withval ]) AC_DEFINE_UNQUOTED(DRIVER_EXT, "$shlib_ext", [ Specifies the filename extension of loadable modules ]) AC_CHECK_FUNCS(strtoll) AC_REPLACE_FUNCS(atoll) dnl i think we'll eventually get an error here... AC_CHECK_FUNCS(vasprintf) AC_REPLACE_FUNCS(asprintf) dnl ============================== dnl See whether to build the docs dnl ============================== ac_docs="YES" AC_ARG_ENABLE(docs, [ --disable-docs do not build and install the documentation.], [ if test "$enable_docs" = "no"; then ac_docs="NO" fi]) if test "$ac_docs" = "YES"; then docs_subdirs="doc" else docs_subdirs="" fi AC_SUBST(docs_subdirs) AM_CONDITIONAL(BUILDDOCS, test "x$docs_subdirs" != "x") dnl =========================================== dnl See whether to link libdbi into the drivers dnl and set -no-undefined dnl =========================================== ac_libdbi="YES" AC_ARG_ENABLE(libdbi, [ --disable-libdbi do not link drivers against libdbi.], [ if test "$enable_libdbi" = "no"; then ac_libdbi="NO" fi ]) if test "$ac_libdbi" = "YES"; then LIBADD_LIBDBI="-no-undefined -ldbi" LIBDBI_TEST="test_libdbi.sh" AC_SUBST(LIBDBI_TEST) else LIBADD_LIBDBI="-no-undefined" fi dnl =========================================== dnl the directory for database files (for database engines that dnl allow to write database files wherever you like) dnl =========================================== AC_ARG_WITH(dbi_dbdir, [ --with-dbi-dbdir=PATH Directory for database files], [dbi_dbdir=$withval], [dbi_dbdir="\$(localstatedir)/lib/libdbi"], ]) AC_SUBST(dbi_dbdir) dnl =========================================== dnl check for the libdbi library if required dnl =========================================== ac_dbi_libdir="no" AC_ARG_WITH(dbi-libdir, [ --with-dbi-libdir Specifies where the libdbi library files are.], [ ac_dbi_libdir="$withval" ]) if test "$ac_libdbi" = "YES"; then AC_MSG_CHECKING(for libdbi library) if test "$ac_dbi_libdir" = "no"; then dbi_libdirs="/usr/lib /usr/local/lib /sw/lib" libdbi_libs="libdbi.so libdbi.a" AC_FIND_FILE($libdbi_libs, $dbi_libdirs, ac_dbi_libdir) if test "$ac_dbi_libdir" = "no"; then AC_MSG_RESULT(no) AC_MSG_ERROR([Invalid libdbi directory - include files not found.]) fi fi AC_MSG_RESULT([yes: libs in $ac_dbi_libdir]) LIBADD_LIBDBI="$LIBADD_LIBDBI -L$ac_dbi_libdir" AC_SUBST(LIBADD_LIBDBI) LIBDBI_LIBDIR="$ac_dbi_libdir" AC_SUBST(LIBDBI_LIBDIR) fi dnl ============================== dnl Checks for header files dnl ============================== AC_CHECK_HEADERS([string.h strings.h]) AC_OUTPUT([ libdbi-drivers.spec Makefile doc/Makefile doc/include/Makefile drivers/Makefile drivers/mysql/Makefile drivers/pgsql/Makefile drivers/sqlite/Makefile drivers/sqlite3/Makefile drivers/msql/Makefile drivers/oracle/Makefile drivers/firebird/Makefile drivers/freetds/Makefile drivers/ingres/Makefile drivers/db2/Makefile tests/Makefile tests/cgreen/Makefile tests/test_dbi.cfg tests/plugin_settings.sh ]) dnl doc/Makefile if test "$ac_mysql" = "NO" && test "$ac_pgsql" = "NO" && test "$ac_sqlite" = "NO" \ && test "$ac_sqlite3" = "NO" && test "$ac_msql" = "NO" && test "$ac_oracle" = "NO" \ && test "$ac_firebird" = "NO" && test "$ac_freetds" = "NO" && test "$ac_ingres" = "NO" \ && test "$ac_db2" = "NO"; then echo echo "***WARNING***" echo "You did not request any drivers to be built. This is most likely not what you want." echo "Please run ./configure --help for a list of switches and select at least one driver." fi libdbi-drivers-0.9.0/aclocal.m4000644 001750 001750 00000110652 12117467047 017145 0ustar00markusmarkus000000 000000 # generated automatically by aclocal 1.12.2 -*- Autoconf -*- # Copyright (C) 1996-2012 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, [m4_warning([this file was generated for autoconf 2.69. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) # Copyright (C) 2002-2012 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 8 # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.12' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. m4_if([$1], [1.12.2], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) # _AM_AUTOCONF_VERSION(VERSION) # ----------------------------- # aclocal traces this macro to find the Autoconf version. # This is a private macro too. Using m4_define simplifies # the logic in aclocal, which can simply ignore this definition. m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.12.2])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001-2012 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to # '$srcdir', '$srcdir/..', or '$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is '.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [dnl Rely on autoconf to set up CDPATH properly. AC_PREREQ([2.50])dnl # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997-2012 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 10 # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ([2.52])dnl m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999-2012 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 17 # There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], [$1], [CXX], [depcc="$CXX" am_compiler_list=], [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'], [$1], [UPC], [depcc="$UPC" am_compiler_list=], [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi am__universal=false m4_case([$1], [CC], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac], [CXX], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac]) for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES. AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE([dependency-tracking], [dnl AS_HELP_STRING( [--enable-dependency-tracking], [do not reject slow dependency extractors]) AS_HELP_STRING( [--disable-dependency-tracking], [speeds up one-time build])]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl AC_SUBST([am__nodep])dnl _AM_SUBST_NOTMAKE([am__nodep])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999-2012 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 6 # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Autoconf 2.62 quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named 'Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`AS_DIRNAME("$mf")` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running 'make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`AS_DIRNAME(["$file"])` AS_MKDIR_P([$dirpart/$fdir]) # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking # is enabled. FIXME. This creates each '.P' file that we will # need in order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) ]) # Copyright (C) 1996-2012 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 8 # AM_CONFIG_HEADER is obsolete. It has been replaced by AC_CONFIG_HEADERS. AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996-2012 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 19 # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.62])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [AC_DIAGNOSE([obsolete], [$0: two- and three-arguments forms are deprecated. For more info, see: http://www.gnu.org/software/automake/manual/automake.html#Modernize-AM_INIT_AUTOMAKE-invocation]) m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if( m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]), [ok:ok],, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) AM_MISSING_PROG([AUTOCONF], [autoconf]) AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) AM_MISSING_PROG([AUTOHEADER], [autoheader]) AM_MISSING_PROG([MAKEINFO], [makeinfo]) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # AC_SUBST([mkdir_p], ['$(MKDIR_P)']) # We need awk for the "check" target. The system "awk" is bad on # some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES([CC])], [m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES([CXX])], [m4_define([AC_PROG_CXX], m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES([OBJC])], [m4_define([AC_PROG_OBJC], m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl dnl Support for Objective C++ was only introduced in Autoconf 2.65, dnl but we still cater to Autoconf 2.62. m4_ifdef([AC_PROG_OBJCXX], [AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], [_AM_DEPENDENCIES([OBJCXX])], [m4_define([AC_PROG_OBJCXX], m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])])dnl ]) _AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl dnl The 'parallel-tests' driver may need to know about EXEEXT, so add the dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl ]) dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001-2012 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 8 # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi AC_SUBST([install_sh])]) # Copyright (C) 2003-2012 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering # Copyright (C) 1996-2012 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 7 # AM_MAINTAINER_MODE([DEFAULT-MODE]) # ---------------------------------- # Control maintainer-specific portions of Makefiles. # Default is to disable them, unless 'enable' is passed literally. # For symmetry, 'disable' may be passed as well. Anyway, the user # can override the default with the --enable/--disable switch. AC_DEFUN([AM_MAINTAINER_MODE], [m4_case(m4_default([$1], [disable]), [enable], [m4_define([am_maintainer_other], [disable])], [disable], [m4_define([am_maintainer_other], [enable])], [m4_define([am_maintainer_other], [enable]) m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])]) AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) dnl maintainer-mode's default is 'disable' unless 'enable' is passed AC_ARG_ENABLE([maintainer-mode], [AS_HELP_STRING([--]am_maintainer_other[-maintainer-mode], am_maintainer_other[ make rules and dependencies not useful (and sometimes confusing) to the casual installer])], [USE_MAINTAINER_MODE=$enableval], [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes])) AC_MSG_RESULT([$USE_MAINTAINER_MODE]) AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes]) MAINT=$MAINTAINER_MODE_TRUE AC_SUBST([MAINT])dnl ] ) AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001-2012 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 5 # AM_MAKE_INCLUDE() # ----------------- # Check to see how make treats includes. AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. AC_MSG_CHECKING([for style of include used by $am_make]) am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from 'make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi AC_SUBST([am__include]) AC_SUBST([am__quote]) AC_MSG_RESULT([$_am_result]) rm -f confinc confmf ]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997-2012 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 7 # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it supports --run. # If it does, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= AC_MSG_WARN(['missing' script is too old or missing]) fi ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001-2012 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 6 # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # -------------------- # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), [1])]) # _AM_SET_OPTIONS(OPTIONS) # ------------------------ # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996-2012 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 9 # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[[\\\"\#\$\&\'\`$am_lf]]*) AC_MSG_ERROR([unsafe absolute working directory name]);; esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi if test "$[2]" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT([yes]) # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi AC_CONFIG_COMMANDS_PRE( [AC_MSG_CHECKING([that generated files are newer than configure]) if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi AC_MSG_RESULT([done])]) rm -f conftest.file ]) # Copyright (C) 2001-2012 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor 'install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in "make install-strip", and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Copyright (C) 2006-2012 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 3 # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) # -------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004-2012 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 3 # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of 'v7', 'ustar', or 'pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AC_SUBST([AMTAR], ['$${TAR-tar}']) m4_if([$1], [v7], [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], [m4_case([$1], [ustar],, [pax],, [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' _am_tools=${am_cv_prog_tar_$1-$_am_tools} # Do not fold the above two line into one, because Tru64 sh and # Solaris sh will not grok spaces in the rhs of '-'. for _am_tool in $_am_tools do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR m4_include([m4/libtool.m4]) m4_include([m4/ltoptions.m4]) m4_include([m4/ltsugar.m4]) m4_include([m4/ltversion.m4]) m4_include([m4/lt~obsolete.m4]) m4_include([acinclude.m4]) libdbi-drivers-0.9.0/Makefile.am000644 001750 001750 00000000631 11557234375 017337 0ustar00markusmarkus000000 000000 ## Process this file with automake to produce Makefile.in AUTOMAKE_OPTIONS = foreign dist-zip ACLOCAL_AMFLAGS = -I m4 SUBDIRS = drivers tests @docs_subdirs@ EXTRA_DIST = AUTHORS COPYING ChangeLog INSTALL README README.win32 README.osx README.encodings TODO libdbi-drivers.spec.in config.h.in Makefile.w32 autogen.sh fixlt.sh debug: $(MAKE) all CFLAGS="@DEBUG@" profile: $(MAKE) all CFLAGS="@PROFILE@" libdbi-drivers-0.9.0/Makefile.in000644 001750 001750 00000063137 12117467052 017353 0ustar00markusmarkus000000 000000 # Makefile.in generated by automake 1.12.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2012 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = . DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(srcdir)/config.h.in \ $(srcdir)/libdbi-drivers.spec.in $(top_srcdir)/configure \ AUTHORS COPYING ChangeLog INSTALL NEWS TODO config.guess \ config.sub depcomp install-sh ltmain.sh missing ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = libdbi-drivers.spec CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ cscope distdir dist dist-all distcheck ETAGS = etags CTAGS = ctags CSCOPE = cscope DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ if test -d "$(distdir)"; then \ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -rf "$(distdir)" \ || { sleep 5 && rm -rf "$(distdir)"; }; \ else :; fi am__post_remove_distdir = $(am__remove_distdir) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" DIST_ARCHIVES = $(distdir).tar.gz $(distdir).zip GZIP_ENV = --best DIST_TARGETS = dist-gzip dist-zip distuninstallcheck_listfiles = find . -type f -print am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DB2_INCLUDE = @DB2_INCLUDE@ DB2_LDFLAGS = @DB2_LDFLAGS@ DB2_LIBS = @DB2_LIBS@ DB2_TEST = @DB2_TEST@ DBI_INCLUDE = @DBI_INCLUDE@ DEBUG = @DEBUG@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FIREBIRD_INCLUDE = @FIREBIRD_INCLUDE@ FIREBIRD_ISQL = @FIREBIRD_ISQL@ FIREBIRD_ISQL_FLAG = @FIREBIRD_ISQL_FLAG@ FIREBIRD_LDFLAGS = @FIREBIRD_LDFLAGS@ FIREBIRD_LIBS = @FIREBIRD_LIBS@ FIREBIRD_TEST = @FIREBIRD_TEST@ FREETDS_INCLUDE = @FREETDS_INCLUDE@ FREETDS_LDFLAGS = @FREETDS_LDFLAGS@ FREETDS_LIBS = @FREETDS_LIBS@ FREETDS_TEST = @FREETDS_TEST@ GREP = @GREP@ INGRES_INCLUDE = @INGRES_INCLUDE@ INGRES_LDFLAGS = @INGRES_LDFLAGS@ INGRES_LIBS = @INGRES_LIBS@ INGRES_TEST = @INGRES_TEST@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBADD_LIBDBI = @LIBADD_LIBDBI@ LIBDBI_LIBDIR = @LIBDBI_LIBDIR@ LIBDBI_TEST = @LIBDBI_TEST@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSQL_INCLUDE = @MSQL_INCLUDE@ MSQL_LDFLAGS = @MSQL_LDFLAGS@ MSQL_LIBS = @MSQL_LIBS@ MSQL_TEST = @MSQL_TEST@ MYSQL_CONFIG = @MYSQL_CONFIG@ MYSQL_INCLUDE = @MYSQL_INCLUDE@ MYSQL_LDFLAGS = @MYSQL_LDFLAGS@ MYSQL_LIBS = @MYSQL_LIBS@ MYSQL_TEST = @MYSQL_TEST@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ ORACLE_INCLUDE = @ORACLE_INCLUDE@ ORACLE_LDFLAGS = @ORACLE_LDFLAGS@ ORACLE_LIBS = @ORACLE_LIBS@ ORACLE_TEST = @ORACLE_TEST@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PGSQL_INCLUDE = @PGSQL_INCLUDE@ PGSQL_LDFLAGS = @PGSQL_LDFLAGS@ PGSQL_LIBS = @PGSQL_LIBS@ PGSQL_TEST = @PGSQL_TEST@ PG_CONFIG = @PG_CONFIG@ PROFILE = @PROFILE@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SQLITE3_INCLUDE = @SQLITE3_INCLUDE@ SQLITE3_LDFLAGS = @SQLITE3_LDFLAGS@ SQLITE3_LIBS = @SQLITE3_LIBS@ SQLITE3_TEST = @SQLITE3_TEST@ SQLITE_INCLUDE = @SQLITE_INCLUDE@ SQLITE_LDFLAGS = @SQLITE_LDFLAGS@ SQLITE_LIBS = @SQLITE_LIBS@ SQLITE_TEST = @SQLITE_TEST@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ dbi_dbdir = @dbi_dbdir@ docdir = @docdir@ docs_subdirs = @docs_subdirs@ driverdir = @driverdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = foreign dist-zip ACLOCAL_AMFLAGS = -I m4 SUBDIRS = drivers tests @docs_subdirs@ EXTRA_DIST = AUTHORS COPYING ChangeLog INSTALL README README.win32 README.osx README.encodings TODO libdbi-drivers.spec.in config.h.in Makefile.w32 autogen.sh fixlt.sh all: config.h $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: am--refresh: Makefile @: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): config.h: stamp-h1 @if test ! -f $@; then rm -f stamp-h1; else :; fi @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) stamp-h1; else :; fi stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status config.h $(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ distclean-hdr: -rm -f config.h stamp-h1 libdbi-drivers.spec: $(top_builddir)/config.status $(srcdir)/libdbi-drivers.spec.in cd $(top_builddir) && $(SHELL) ./config.status $@ mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool config.lt # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(RECURSIVE_TARGETS) $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done cscopelist-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) cscopelist); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscope: cscope.files test ! -s cscope.files \ || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) clean-cscope: -rm -f cscope.files cscope.files: clean-cscope cscopelist-recursive cscopelist cscopelist: cscopelist-recursive $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -rm -f cscope.out cscope.in.out cscope.po.out cscope.files distdir: $(DISTFILES) $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__post_remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 $(am__post_remove_distdir) dist-lzip: distdir tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz $(am__post_remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) dist-tarZ: distdir tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__post_remove_distdir) dist-shar: distdir shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__post_remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__post_remove_distdir) dist dist-all: $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' $(am__post_remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lz*) \ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir); chmod u+w $(distdir) mkdir $(distdir)/_build mkdir $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__post_remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @test -n '$(distuninstallcheck_dir)' || { \ echo 'ERROR: trying to run $@ with an empty' \ '$$(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ $(am__cd) '$(distuninstallcheck_dir)' || { \ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: check-recursive all-am: Makefile config.h installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f Makefile distclean-am: clean-am distclean-generic distclean-hdr \ distclean-libtool distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all \ cscopelist-recursive ctags-recursive install-am install-strip \ tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am am--refresh check check-am clean clean-cscope \ clean-generic clean-libtool cscope cscopelist \ cscopelist-recursive ctags ctags-recursive dist dist-all \ dist-bzip2 dist-gzip dist-lzip dist-shar dist-tarZ dist-xz \ dist-zip distcheck distclean distclean-generic distclean-hdr \ distclean-libtool distclean-tags distcleancheck distdir \ distuninstallcheck dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-recursive uninstall uninstall-am debug: $(MAKE) all CFLAGS="@DEBUG@" profile: $(MAKE) all CFLAGS="@PROFILE@" # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: libdbi-drivers-0.9.0/config.h.in000644 001750 001750 00000004137 11500004563 017311 0ustar00markusmarkus000000 000000 /* config.h.in. Generated from configure.in by autoheader. */ /* Specifies the mode of dlopen behavior */ #undef DLOPEN_FLAG /* Specifies the filename extension of loadable modules */ #undef DRIVER_EXT /* Define to 1 if you have the `asprintf' function. */ #undef HAVE_ASPRINTF /* Define to 1 if you have the `atoll' function. */ #undef HAVE_ATOLL /* Define to 1 if you have the header file. */ #undef HAVE_DBI_DBI_H /* Define to 1 if you have the header file. */ #undef HAVE_DLFCN_H /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the `strtoll' function. */ #undef HAVE_STRTOLL /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define to 1 if you have the `vasprintf' function. */ #undef HAVE_VASPRINTF /* Define to the sub-directory in which libtool stores uninstalled libraries. */ #undef LT_OBJDIR /* Name of package */ #undef PACKAGE /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Version number of package */ #undef VERSION libdbi-drivers-0.9.0/libdbi-drivers.spec.in000644 001750 001750 00000021233 11557234333 021460 0ustar00markusmarkus000000 000000 %define name libdbi-drivers %define version @VERSION@ %define release 1 %define dist %define with_mysql %{?_without_mysql: 0} %{?!_without_mysql: 1} %define with_pgsql %{?_without_pgsql: 0} %{?!_without_pgsql: 1} %define with_oracle %{?_without_oracle: 0} %{?!_without_oracle: 1} %define with_freetds %{?_without_freetds: 0} %{?!_without_freetds: 1} %define with_sqlite %{?_without_sqlite: 0} %{?!_without_sqlite: 1} %define with_sqlite3 %{?_without_sqlite3: 0} %{?!_without_sqlite3: 1} %define with_ingres %{?_without_ingres: 0} %{?!_without_ingres: 1} %define with_firebird %{?_without_firebird: 0} %{?!_without_firebird: 1} %define with_msql %{?_without_msql: 0} %{?!_without_msql: 1} Summary: Database drivers for libdbi Name: %{name} Version: %{version} Release: %{release}%{?dist} Group: Development/Libraries License: LGPL URL: http://libdbi-drivers.sourceforge.net/ Vendor: Neon Goat Productions Packager: David A. Parker Source: %{name}-%{version}.tar.gz BuildRoot: %{_tmppath}/%{name}-root BuildRequires: libdbi-devel >= %{version}, openjade Requires: libdbi >= %{version} %description libdbi implements a database-independent abstraction layer in C, similar to the DBI/DBD layer in Perl. Drivers are distributed seperately from the library itself. %package devel Summary: Static library and header files for the %{name} library Group: Development/C %description devel libdbi implements a database-independent abstraction layer in C, similar to the DBI/DBD layer in Perl. Drivers are distributed seperately from the library itself. This package contains the static libraries and header files. %package docs Summary: Documentation about libdbi-drivers Group: Development/Libraries %description docs libdbi implements a database-independent abstraction layer in C, similar to the DBI/DBD layer in Perl. Drivers are distributed seperately from the library itself. This package contains the documentation. %if %{with_oracle} %package dbd-oracle Summary: Oracle driver for libdbi Group: Development/Libraries BuildRequires: oracle-instantclient-devel %description dbd-oracle This driver provides connectivity to Oracle database servers through the libdbi database independent abstraction layer. Switching a program's driver does not require recompilation or rewriting source code. %endif %if %{with_firebird} %package dbd-firebird Summary: Firebird driver for libdbi Group: Development/Libraries BuildRequires: firebird-devel %description dbd-firebird This driver provides connectivity to Firebird database servers through the libdbi database independent abstraction layer. Switching a program's driver does not require recompilation or rewriting source code. %endif %if %{with_ingres} %package dbd-ingres Summary: Ingres driver for libdbi Group: Development/Libraries BuildRequires: ingres-devel %description dbd-ingres This driver provides connectivity to Ingres database servers through the libdbi database independent abstraction layer. Switching a program's driver does not require recompilation or rewriting source code. %endif %if %{with_msql} %package dbd-msql Summary: MSQL driver for libdbi Group: Development/Libraries Requires: msql BuildRequires: msql-devel %description dbd-msql This driver provides connectivity to MSQL database servers through the libdbi database independent abstraction layer. Switching a program's driver does not require recompilation or rewriting source code. %endif %if %{with_mysql} %package dbd-mysql Summary: MySQL driver for libdbi Group: Development/Libraries Requires: mysql-shared BuildRequires: mysql-devel %description dbd-mysql This driver provides connectivity to MySQL database servers through the libdbi database independent abstraction layer. Switching a program's driver does not require recompilation or rewriting source code. %endif %if %{with_pgsql} %package dbd-pgsql Summary: PostgreSQL driver for libdbi Group: Development/Libraries Requires: postgresql >= 7.0.3 BuildRequires: postgresql-devel %description dbd-pgsql This driver provides connectivity to PostgreSQL database servers through the libdbi database independent abstraction layer. Switching a program's driver does not require recompilation or rewriting source code. %endif %if %{with_sqlite} %package dbd-sqlite Summary: SQLite driver for libdbi Group: Development/Libraries Requires: sqlite < 3.0 BuildRequires: sqlite-devel < 3.0 %description dbd-sqlite This driver provides connectivity to SQLite database servers through the libdbi database independent abstraction layer. Switching a program's driver does not require recompilation or rewriting source code. %endif %if %{with_sqlite3} %package dbd-sqlite3 Summary: SQLite3 driver for libdbi Group: Development/Libraries Requires: sqlite >= 3.0 BuildRequires: sqlite-devel >= 3.0 %description dbd-sqlite3 This driver provides connectivity to SQLite database servers through the libdbi database independent abstraction layer. Switching a program's driver does not require recompilation or rewriting source code. %endif %if %{with_freetds} %package dbd-freetds Summary: MSSQL (FreeTDS) driver for libdbi Group: Development/Libraries Requires: freetds >= 0.62.4 BuildRequires: freetds-devel >= 0.62.4 %description dbd-freetds This driver provides connectivity to MSSQL database servers through the libdbi database independent abstraction layer. Switching a program's driver does not require recompilation or rewriting source code. %endif %prep %setup -q -n %{name}-%{version} %build CFLAGS="$RPM_OPT_FLAGS" ./configure \ %if %{with_mysql} --with-mysql --with-mysql-incdir=%{_includedir}/mysql --with-mysql-libdir=%{_libdir} \ %endif %if %{with_oracle} --with-oracle --with-oracle-incdir=%{_includedir}/oracle/client --with-oracle-libdir=%{_libdir}/oracle/client/lib \ %endif %if %{with_sqlite} --with-sqlite --with-sqlite-incdir=%{_includedir} --with-sqlite-libdir=%{_libdir} \ %endif %if %{with_sqlite3} --with-sqlite3 --with-sqlite3-incdir=%{_includedir} --with-sqlite3-libdir=%{_libdir} \ %endif %if %{with_pgsql} --with-pgsql --with-pgsql-incdir=%{_includedir} --with-pgsql-libdir=%{_libdir} \ %endif %if %{with_freetds} --with-freetds --with-freetds-incdir=%{_includedir} --with-freetds-libdir=%{_libdir} \ %endif %if %{with_ingres} --with-ingres --with-ingres-incdir=%{_includedir} --with-ingres-libdir=%{_libdir} \ %endif %if %{with_firebird} --with-firebird --with-firebird-incdir=%{_includedir} --with-firebird-libdir=%{_libdir} \ %endif %if %{with_msql} --with-msql --with-msql-incdir=%{_includedir} --with-msql-libdir=%{_libdir} \ %endif --prefix=%{_prefix} make %install [ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT make DESTDIR=$RPM_BUILD_ROOT install # Headers install -d %{buildroot}%{_includedir}/dbi for file in $(find drivers/ -type f -name \*.h) do install -m0644 ${file} %{buildroot}%{_includedir}/dbi/ done # Docs install -d %{buildroot}%{_docdir}/%{name}-%{version} for file in drivers/*/{TODO,AUTHORS,README} do driver=$(echo $file|awk -F/ '{print $2}') newfile=$(basename $file) install -m0644 $file %{buildroot}%{_docdir}/%{name}-%{version}/$newfile.$driver done for pdf in drivers/*/dbd_*.pdf do install -m0644 $pdf %{buildroot}%{_docdir}/%{name}-%{version}/ done for dir in $(find drivers/ -type d -name dbd_\*) do cp -pr $dir %{buildroot}%{_docdir}/%{name}-%{version}/ done %files docs %defattr(-,root,root) %{_docdir}/%{name}-%{version}/* %if %{with_mysql} %files dbd-mysql %defattr(-,root,root) /usr/lib/dbd/libdbdmysql.so %endif %if %{with_pgsql} %files dbd-pgsql %defattr(-,root,root) /usr/lib/dbd/libdbdpgsql.so %endif %if %{with_sqlite} %files dbd-sqlite %defattr(-,root,root) /usr/lib/dbd/libdbdsqlite.so %endif %if %{with_sqlite3} %files dbd-sqlite3 %defattr(-,root,root) /usr/lib/dbd/libdbdsqlite3.so %endif %if %{with_freetds} %files dbd-freetds %defattr(-,root,root) /usr/lib/dbd/libdbdfreetds.so %endif %if %{with_oracle} %files dbd-oracle %defattr(-,root,root) /usr/lib/dbd/libdbdoracle.so %endif %if %{with_ingres} %files dbd-ingres %defattr(-,root,root) /usr/lib/dbd/libdbdingres.so %endif %if %{with_firebird} %files dbd-firebird %defattr(-,root,root) /usr/lib/dbd/libdbdfirebird.so %endif %if %{with_msql} %files dbd-msql %defattr(-,root,root) /usr/lib/dbd/libdbdmsql.so %endif %files devel %defattr(-,root,root) %doc AUTHORS ChangeLog INSTALL README TODO /usr/lib/dbd/*.a /usr/lib/dbd/*.la %{_includedir}/dbi/*.h %clean [ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT %post /sbin/ldconfig %postun /sbin/ldconfig %changelog * Fri Apr 29 2011 Jason Beck - Incorporated support for all available drivers in specfile * Fri Mar 28 2003 David Parker - updated for libdbi-drivers split * Sat Aug 4 2001 David Parker - initial spec file created libdbi-drivers-0.9.0/configure000755 001750 001750 00001625440 12117467055 017222 0ustar00markusmarkus000000 000000 #! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69. # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do 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 as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do 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 " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1 test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, $0: including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" SHELL=${CONFIG_SHELL-/bin/sh} test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME= PACKAGE_TARNAME= PACKAGE_VERSION= PACKAGE_STRING= PACKAGE_BUGREPORT= PACKAGE_URL= ac_unique_file="drivers/sqlite/dbd_sqlite.c" # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBDBI_LIBDIR LIBADD_LIBDBI dbi_dbdir LIBDBI_TEST BUILDDOCS_FALSE BUILDDOCS_TRUE docs_subdirs LIBOBJS DB2_TEST DB2_LDFLAGS DB2_INCLUDE DB2_LIBS HAVE_DB2_FALSE HAVE_DB2_TRUE INGRES_TEST INGRES_LDFLAGS INGRES_INCLUDE INGRES_LIBS HAVE_INGRES_FALSE HAVE_INGRES_TRUE FREETDS_TEST FREETDS_LDFLAGS FREETDS_INCLUDE FREETDS_LIBS HAVE_FREETDS_FALSE HAVE_FREETDS_TRUE FIREBIRD_TEST FIREBIRD_ISQL_FLAG FIREBIRD_LDFLAGS FIREBIRD_INCLUDE FIREBIRD_LIBS FIREBIRD_ISQL HAVE_FIREBIRD_INTERBASE_FALSE HAVE_FIREBIRD_INTERBASE_TRUE ORACLE_TEST ORACLE_LDFLAGS ORACLE_INCLUDE ORACLE_LIBS HAVE_ORACLE_FALSE HAVE_ORACLE_TRUE MSQL_TEST MSQL_LDFLAGS MSQL_INCLUDE MSQL_LIBS HAVE_MSQL_FALSE HAVE_MSQL_TRUE SQLITE3_TEST SQLITE3_LDFLAGS SQLITE3_INCLUDE SQLITE3_LIBS HAVE_SQLITE3_FALSE HAVE_SQLITE3_TRUE SQLITE_TEST SQLITE_LDFLAGS SQLITE_INCLUDE SQLITE_LIBS HAVE_SQLITE_FALSE HAVE_SQLITE_TRUE PGSQL_TEST PGSQL_LDFLAGS PGSQL_INCLUDE PGSQL_LIBS PG_CONFIG HAVE_PGSQL_FALSE HAVE_PGSQL_TRUE MYSQL_TEST MYSQL_LDFLAGS MYSQL_INCLUDE MYSQL_LIBS MYSQL_CONFIG HAVE_MYSQL_FALSE HAVE_MYSQL_TRUE DBI_INCLUDE HAVE_DBI_FALSE HAVE_DBI_TRUE PROFILE DEBUG CPP OTOOL64 OTOOL LIPO NMEDIT DSYMUTIL MANIFEST_TOOL RANLIB ac_ct_AR AR LN_S NM ac_ct_DUMPBIN DUMPBIN LIBTOOL LD FGREP EGREP GREP SED am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__quote am__include DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC driverdir OBJDUMP DLLTOOL AS host_os host_vendor host_cpu host build_os build_vendor build_cpu build am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM MAINT MAINTAINER_MODE_FALSE MAINTAINER_MODE_TRUE target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking enable_maintainer_mode enable_dependency_tracking with_gnu_ld enable_shared enable_static with_pic enable_fast_install with_sysroot enable_libtool_lock with_dbi_incdir with_mysql with_mysql_incdir with_mysql_libdir enable_mysql_threadsafe with_pgsql with_pgsql_incdir with_pgsql_libdir with_sqlite with_sqlite_incdir with_sqlite_libdir with_sqlite3 with_sqlite3_incdir with_sqlite3_libdir with_msql with_msql_incdir with_msql_libdir with_oracle with_oracle_dir with_oracle_incdir with_oracle_libdir with_firebird with_firebird_incdir with_firebird_libdir with_freetds with_freetds_incdir with_freetds_libdir with_ingres with_ingres_dir with_ingres_incdir with_ingres_libdir with_db2 with_db2_dir with_db2_incdir with_db2_libdir with_shlib_ext enable_docs enable_libdbi with_dbi_dbdir with_dbi_libdir ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures this package to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-maintainer-mode enable make rules and dependencies not useful (and sometimes confusing) to the casual installer --enable-dependency-tracking do not reject slow dependency extractors --disable-dependency-tracking speeds up one-time build --enable-shared[=PKGS] build shared libraries [default=yes] --enable-static[=PKGS] build static libraries [default=yes] --enable-fast-install[=PKGS] optimize for fast installation [default=yes] --disable-libtool-lock avoid locking (might break parallel builds) --enable-mysql-threadsafe use threadsafe version of libmysqlclient. --disable-docs do not build and install the documentation. --disable-libdbi do not link drivers against libdbi. Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use both] --with-sysroot=DIR Search for dependent libraries within DIR (or the compiler's sysroot if not specified). --with-dbi-incdir Specifies where the libdbi include files are. --with-mysql Include MySQL support. --with-mysql-incdir Specifies where the MySQL include files are. --with-mysql-libdir Specifies where the MySQL libraries are. --with-pgsql Include PostgreSQL support. --with-pgsql-incdir Specifies where the PostgreSQL include files are. --with-pgsql-libdir Specifies where the PostgreSQL libraries are. --with-sqlite Include SQLite support. --with-sqlite-incdir Specifies where the SQLite include files are. --with-sqlite-libdir Specifies where the SQLite libraries are. --with-sqlite3 Include SQLite3 support. --with-sqlite3-incdir Specifies where the SQLite3 include files are. --with-sqlite3-libdir Specifies where the SQLite3 libraries are. --with-msql Include MiniSQL (mSQL) support. --with-msql-incdir Specifies where the mSQL include files are. --with-msql-libdir Specifies where the mSQL libraries are. --with-oracle Include Oracle support. --with-oracle-dir Specifies ORACLE_HOME. --with-oracle-incdir Specifies where the Oracle include files are. --with-oracle-libdir Specifies where the Oracle libraries are. --with-firebird Include Firebird/Interbase support. --with-firebird-incdir Specifies where the Firebird/Interbase include files are. --with-firebird-libdir Specifies where the Firebird/Interbase libraries are. --with-freetds Include Freetds support. --with-freetds-incdir Specifies where the Freetds include files are. --with-freetds-libdir Specifies where the Freetds libraries are. --with-ingres Include Ingres support. --with-ingres-dir Specifies II_SYSTEM. --with-ingres-incdir Specifies where the Ingres include files are. --with-ingres-libdir Specifies where the Ingres libraries are. --with-db2 Include IBM DB2 support. --with-db2-dir Specifies DB2_HOME. --with-db2-incdir Specifies where the IBM DB2 include files are. --with-db2-libdir Specifies where the IBM DB2 libraries are. --with-shlib-ext Specifies the filename extension of loadable modules (usually not necessary). --with-dbi-dbdir=PATH Directory for database files --with-dbi-libdir Specifies where the libdbi library files are. Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to the package provider. _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF configure generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_mongrel cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by $as_me, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5 $as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } # Check whether --enable-maintainer-mode was given. if test "${enable_maintainer_mode+set}" = set; then : enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval else USE_MAINTAINER_MODE=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5 $as_echo "$USE_MAINTAINER_MODE" >&6; } if test $USE_MAINTAINER_MODE = yes; then MAINTAINER_MODE_TRUE= MAINTAINER_MODE_FALSE='#' else MAINTAINER_MODE_TRUE='#' MAINTAINER_MODE_FALSE= fi MAINT=$MAINTAINER_MODE_TRUE am__api_version='1.12' ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if ${ac_cv_path_install+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in #(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 $as_echo_n "checking whether build environment is sane... " >&6; } # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". as_fn_error $? "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi if test "$2" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$2" = conftest.file ) then # Ok. : else as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi rm -f conftest.file test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 $as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;} fi if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if ${ac_cv_path_mkdir+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi test -d ./--version && rmdir ./--version if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. MKDIR_P="$ac_install_sh -d" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 $as_echo "$MKDIR_P" >&6; } for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AWK+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE=libdbi-drivers VERSION=0.9.0 cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # mkdir_p='$(MKDIR_P)' # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' ac_config_headers="$ac_config_headers config.h" # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 $as_echo_n "checking build system type... " >&6; } if ${ac_cv_build+:} false; then : $as_echo_n "(cached) " >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 $as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 $as_echo_n "checking host system type... " >&6; } if ${ac_cv_host+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 $as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac enable_win32_dll=yes case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}as", so it can be a program name with args. set dummy ${ac_tool_prefix}as; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AS+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AS"; then ac_cv_prog_AS="$AS" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AS="${ac_tool_prefix}as" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AS=$ac_cv_prog_AS if test -n "$AS"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AS" >&5 $as_echo "$AS" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_AS"; then ac_ct_AS=$AS # Extract the first word of "as", so it can be a program name with args. set dummy as; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_AS+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AS"; then ac_cv_prog_ac_ct_AS="$ac_ct_AS" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AS="as" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AS=$ac_cv_prog_ac_ct_AS if test -n "$ac_ct_AS"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AS" >&5 $as_echo "$ac_ct_AS" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_AS" = x; then AS="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AS=$ac_ct_AS fi else AS="$ac_cv_prog_AS" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. set dummy ${ac_tool_prefix}dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DLLTOOL"; then ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DLLTOOL=$ac_cv_prog_DLLTOOL if test -n "$DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 $as_echo "$DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DLLTOOL"; then ac_ct_DLLTOOL=$DLLTOOL # Extract the first word of "dlltool", so it can be a program name with args. set dummy dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DLLTOOL"; then ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DLLTOOL="dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL if test -n "$ac_ct_DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 $as_echo "$ac_ct_DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DLLTOOL" = x; then DLLTOOL="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DLLTOOL=$ac_ct_DLLTOOL fi else DLLTOOL="$ac_cv_prog_DLLTOOL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. set dummy ${ac_tool_prefix}objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 $as_echo "$OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OBJDUMP"; then ac_ct_OBJDUMP=$OBJDUMP # Extract the first word of "objdump", so it can be a program name with args. set dummy objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OBJDUMP"; then ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OBJDUMP="objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP if test -n "$ac_ct_OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 $as_echo "$ac_ct_OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OBJDUMP" = x; then OBJDUMP="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OBJDUMP=$ac_ct_OBJDUMP fi else OBJDUMP="$ac_cv_prog_OBJDUMP" fi ;; esac test -z "$AS" && AS=as test -z "$DLLTOOL" && DLLTOOL=dlltool test -z "$OBJDUMP" && OBJDUMP=objdump driverdir=$libdir/dbd : ${CFLAGS=""} ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 $as_echo_n "checking for style of include used by $am_make... " >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from 'make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 $as_echo "$_am_result" >&6; } rm -f confinc confmf # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 $as_echo_n "checking for a sed that does not truncate output... " >&6; } if ${ac_cv_path_SED+:} false; then : $as_echo_n "(cached) " >&6 else ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" done echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed { ac_script=; unset ac_script;} if test -z "$SED"; then ac_path_SED_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_SED" || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED case `"$ac_path_SED" --version 2>&1` in *GNU*) ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo '' >> "conftest.nl" "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_SED_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_SED="$ac_path_SED" ac_path_SED_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_SED_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_SED"; then as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 fi else ac_cv_path_SED=$SED fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 $as_echo "$ac_cv_path_SED" >&6; } SED="$ac_cv_path_SED" rm -f conftest.sed test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 $as_echo_n "checking for fgrep... " >&6; } if ${ac_cv_path_FGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 then ac_cv_path_FGREP="$GREP -F" else if test -z "$FGREP"; then ac_path_FGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in fgrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_FGREP" || continue # Check for GNU ac_path_FGREP and select it if it is found. # Check for GNU $ac_path_FGREP case `"$ac_path_FGREP" --version 2>&1` in *GNU*) ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'FGREP' >> "conftest.nl" "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_FGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_FGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_FGREP"; then as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_FGREP=$FGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 $as_echo "$ac_cv_path_FGREP" >&6; } FGREP="$ac_cv_path_FGREP" test -z "$GREP" && GREP=grep ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 $as_echo_n "checking how to print strings... " >&6; } # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "" } case "$ECHO" in printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 $as_echo "printf" >&6; } ;; print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 $as_echo "print -r" >&6; } ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 $as_echo "cat" >&6; } ;; esac # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then : withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 $as_echo_n "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi if ${lt_cv_path_LD+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } if ${lt_cv_prog_gnu_ld+:} false; then : $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 $as_echo "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld case `pwd` in *\ * | *\ *) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 $as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; esac macro_version='2.4.2' macro_revision='1.3337' ltmain="$ac_aux_dir/ltmain.sh" # Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\(["`$\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 $as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } if ${lt_cv_path_NM+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else lt_nm_to_check="${ac_tool_prefix}nm" if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. tmp_nm="$ac_dir/$lt_tmp_nm" if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in */dev/null* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS="$lt_save_ifs" done : ${lt_cv_path_NM=no} fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 $as_echo "$lt_cv_path_NM" >&6; } if test "$lt_cv_path_NM" != "no"; then NM="$lt_cv_path_NM" else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else if test -n "$ac_tool_prefix"; then for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DUMPBIN+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DUMPBIN"; then ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DUMPBIN=$ac_cv_prog_DUMPBIN if test -n "$DUMPBIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 $as_echo "$DUMPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$DUMPBIN" && break done fi if test -z "$DUMPBIN"; then ac_ct_DUMPBIN=$DUMPBIN for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DUMPBIN"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN if test -n "$ac_ct_DUMPBIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 $as_echo "$ac_ct_DUMPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_DUMPBIN" && break done if test "x$ac_ct_DUMPBIN" = x; then DUMPBIN=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DUMPBIN=$ac_ct_DUMPBIN fi fi case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols" ;; *) DUMPBIN=: ;; esac fi if test "$DUMPBIN" != ":"; then NM="$DUMPBIN" fi fi test -z "$NM" && NM=nm { $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 $as_echo_n "checking the name lister ($NM) interface... " >&6; } if ${lt_cv_nm_interface+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: output\"" >&5) cat conftest.out >&5 if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 $as_echo "$lt_cv_nm_interface" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 $as_echo_n "checking whether ln -s works... " >&6; } LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 $as_echo "no, using $LN_S" >&6; } fi # find the maximum length of command line arguments { $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 $as_echo_n "checking the maximum length of command line arguments... " >&6; } if ${lt_cv_sys_max_cmd_len+:} false; then : $as_echo_n "(cached) " >&6 else i=0 teststring="ABCD" case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8 ; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac fi if test -n $lt_cv_sys_max_cmd_len ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 $as_echo "$lt_cv_sys_max_cmd_len" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 $as_echo "none" >&6; } fi max_cmd_len=$lt_cv_sys_max_cmd_len : ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5 $as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } # Try some XSI features xsi_shell=no ( _lt_dummy="a/b/c" test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ = c,a/b,b/c, \ && eval 'test $(( 1 + 1 )) -eq 2 \ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ && xsi_shell=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5 $as_echo "$xsi_shell" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5 $as_echo_n "checking whether the shell understands \"+=\"... " >&6; } lt_shell_append=no ( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ >/dev/null 2>&1 \ && lt_shell_append=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5 $as_echo "$lt_shell_append" >&6; } if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 $as_echo_n "checking how to convert $build file names to $host format... " >&6; } if ${lt_cv_to_host_file_cmd+:} false; then : $as_echo_n "(cached) " >&6 else case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac fi to_host_file_cmd=$lt_cv_to_host_file_cmd { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 $as_echo "$lt_cv_to_host_file_cmd" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 $as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } if ${lt_cv_to_tool_file_cmd+:} false; then : $as_echo_n "(cached) " >&6 else #assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac fi to_tool_file_cmd=$lt_cv_to_tool_file_cmd { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 $as_echo "$lt_cv_to_tool_file_cmd" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 $as_echo_n "checking for $LD option to reload object files... " >&6; } if ${lt_cv_ld_reload_flag+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_reload_flag='-r' fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 $as_echo "$lt_cv_ld_reload_flag" >&6; } reload_flag=$lt_cv_ld_reload_flag case $reload_flag in "" | " "*) ;; *) reload_flag=" $reload_flag" ;; esac reload_cmds='$LD$reload_flag -o $output$reload_objs' case $host_os in cygwin* | mingw* | pw32* | cegcc*) if test "$GCC" != yes; then reload_cmds=false fi ;; darwin*) if test "$GCC" = yes; then reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' else reload_cmds='$LD$reload_flag -o $output$reload_objs' fi ;; esac if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. set dummy ${ac_tool_prefix}objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 $as_echo "$OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OBJDUMP"; then ac_ct_OBJDUMP=$OBJDUMP # Extract the first word of "objdump", so it can be a program name with args. set dummy objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OBJDUMP"; then ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OBJDUMP="objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP if test -n "$ac_ct_OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 $as_echo "$ac_ct_OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OBJDUMP" = x; then OBJDUMP="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OBJDUMP=$ac_ct_OBJDUMP fi else OBJDUMP="$ac_cv_prog_OBJDUMP" fi test -z "$OBJDUMP" && OBJDUMP=objdump { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 $as_echo_n "checking how to recognize dependent libraries... " >&6; } if ${lt_cv_deplibs_check_method+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. # `unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path # which responds to the $file_magic_cmd with a given extended regex. # If you have `file' or equivalent on your system and you're not sure # whether `pass_all' will *always* work, you probably want this one. case $host_os in aix[4-9]*) lt_cv_deplibs_check_method=pass_all ;; beos*) lt_cv_deplibs_check_method=pass_all ;; bsdi[45]*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' lt_cv_file_magic_cmd='/usr/bin/file -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; cygwin*) # func_win32_libid is a shell function defined in ltmain.sh lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' ;; mingw* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump', # unless we find 'file', for example because we are cross-compiling. # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin. if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; gnu*) lt_cv_deplibs_check_method=pass_all ;; haiku*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[3-9]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) lt_cv_deplibs_check_method=pass_all ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 $as_echo "$lt_cv_deplibs_check_method" >&6; } file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. set dummy ${ac_tool_prefix}dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DLLTOOL"; then ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DLLTOOL=$ac_cv_prog_DLLTOOL if test -n "$DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 $as_echo "$DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DLLTOOL"; then ac_ct_DLLTOOL=$DLLTOOL # Extract the first word of "dlltool", so it can be a program name with args. set dummy dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DLLTOOL"; then ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DLLTOOL="dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL if test -n "$ac_ct_DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 $as_echo "$ac_ct_DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DLLTOOL" = x; then DLLTOOL="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DLLTOOL=$ac_ct_DLLTOOL fi else DLLTOOL="$ac_cv_prog_DLLTOOL" fi test -z "$DLLTOOL" && DLLTOOL=dlltool { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 $as_echo_n "checking how to associate runtime and link libraries... " >&6; } if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh # decide which to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd="$ECHO" ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 $as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; } sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO if test -n "$ac_tool_prefix"; then for ac_prog in ar do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AR="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 $as_echo "$AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AR" && break done fi if test -z "$AR"; then ac_ct_AR=$AR for ac_prog in ar do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 $as_echo "$ac_ct_AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_AR" && break done if test "x$ac_ct_AR" = x; then AR="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR fi fi : ${AR=ar} : ${AR_FLAGS=cru} { $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 $as_echo_n "checking for archiver @FILE support... " >&6; } if ${lt_cv_ar_at_file+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ar_at_file=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -eq 0; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -ne 0; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 $as_echo "$lt_cv_ar_at_file" >&6; } if test "x$lt_cv_ar_at_file" = xno; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi test -z "$STRIP" && STRIP=: if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi test -z "$RANLIB" && RANLIB=: # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Check for command to grab the raw symbol name followed by C symbol from nm. { $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 $as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } if ${lt_cv_sys_global_symbol_pipe+:} false; then : $as_echo_n "(cached) " >&6 else # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[BCDEGRST]' # Regexp to match symbols that can be accessed directly from C. sympat='\([_A-Za-z][_A-Za-z0-9]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[BCDT]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[ABCDGISTW]' ;; hpux*) if test "$host_cpu" = ia64; then symcode='[ABCDEGRST]' fi ;; irix* | nonstopux*) symcode='[BCDEGRST]' ;; osf*) symcode='[BCDEGQRST]' ;; solaris*) symcode='[BDRT]' ;; sco3.2v5*) symcode='[DT]' ;; sysv4.2uw2*) symcode='[DT]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[ABDT]' ;; sysv4) symcode='[DFNSTU]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[ABCDGIRSTW]' ;; esac # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function # and D for any global variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK '"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ " {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ " s[1]~/^[@?]/{print s[1], s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Now try to grab the symbols. nlist=conftest.nm if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&5 fi else echo "cannot find nm_test_var in $nlist" >&5 fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 fi else echo "$progname: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done fi if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 $as_echo "failed" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 $as_echo "ok" >&6; } fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then nm_file_list_spec='@' fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 $as_echo_n "checking for sysroot... " >&6; } # Check whether --with-sysroot was given. if test "${with_sysroot+set}" = set; then : withval=$with_sysroot; else with_sysroot=no fi lt_sysroot= case ${with_sysroot} in #( yes) if test "$GCC" = yes; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_sysroot}" >&5 $as_echo "${with_sysroot}" >&6; } as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 $as_echo "${lt_sysroot:-no}" >&6; } # Check whether --enable-libtool-lock was given. if test "${enable_libtool_lock+set}" = set; then : enableval=$enable_libtool_lock; fi test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" ;; *ELF-64*) HPUX_IA64_MODE="64" ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out which ABI we are using. echo '#line '$LINENO' "configure"' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_i386" ;; ppc64-*linux*|powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; ppc*-*linux*|powerpc*-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 $as_echo_n "checking whether the C compiler needs -belf... " >&6; } if ${lt_cv_cc_needs_belf+:} false; then : $as_echo_n "(cached) " >&6 else ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_cc_needs_belf=yes else lt_cv_cc_needs_belf=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 $as_echo "$lt_cv_cc_needs_belf" >&6; } if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; *-*solaris*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD="${LD-ld}_sol2" fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks="$enable_libtool_lock" if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. set dummy ${ac_tool_prefix}mt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_MANIFEST_TOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$MANIFEST_TOOL"; then ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL if test -n "$MANIFEST_TOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 $as_echo "$MANIFEST_TOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_MANIFEST_TOOL"; then ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL # Extract the first word of "mt", so it can be a program name with args. set dummy mt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_MANIFEST_TOOL"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL if test -n "$ac_ct_MANIFEST_TOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 $as_echo "$ac_ct_MANIFEST_TOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_MANIFEST_TOOL" = x; then MANIFEST_TOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL fi else MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL" fi test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 $as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } if ${lt_cv_path_mainfest_tool+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&5 if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 $as_echo "$lt_cv_path_mainfest_tool" >&6; } if test "x$lt_cv_path_mainfest_tool" != xyes; then MANIFEST_TOOL=: fi case $host_os in rhapsody* | darwin*) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DSYMUTIL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DSYMUTIL"; then ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DSYMUTIL=$ac_cv_prog_DSYMUTIL if test -n "$DSYMUTIL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 $as_echo "$DSYMUTIL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DSYMUTIL"; then ac_ct_DSYMUTIL=$DSYMUTIL # Extract the first word of "dsymutil", so it can be a program name with args. set dummy dsymutil; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DSYMUTIL"; then ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL if test -n "$ac_ct_DSYMUTIL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 $as_echo "$ac_ct_DSYMUTIL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DSYMUTIL" = x; then DSYMUTIL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DSYMUTIL=$ac_ct_DSYMUTIL fi else DSYMUTIL="$ac_cv_prog_DSYMUTIL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. set dummy ${ac_tool_prefix}nmedit; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_NMEDIT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$NMEDIT"; then ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi NMEDIT=$ac_cv_prog_NMEDIT if test -n "$NMEDIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 $as_echo "$NMEDIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_NMEDIT"; then ac_ct_NMEDIT=$NMEDIT # Extract the first word of "nmedit", so it can be a program name with args. set dummy nmedit; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_NMEDIT"; then ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_NMEDIT="nmedit" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT if test -n "$ac_ct_NMEDIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 $as_echo "$ac_ct_NMEDIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_NMEDIT" = x; then NMEDIT=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac NMEDIT=$ac_ct_NMEDIT fi else NMEDIT="$ac_cv_prog_NMEDIT" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. set dummy ${ac_tool_prefix}lipo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_LIPO+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$LIPO"; then ac_cv_prog_LIPO="$LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_LIPO="${ac_tool_prefix}lipo" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi LIPO=$ac_cv_prog_LIPO if test -n "$LIPO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 $as_echo "$LIPO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_LIPO"; then ac_ct_LIPO=$LIPO # Extract the first word of "lipo", so it can be a program name with args. set dummy lipo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_LIPO+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_LIPO"; then ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_LIPO="lipo" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO if test -n "$ac_ct_LIPO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 $as_echo "$ac_ct_LIPO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_LIPO" = x; then LIPO=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac LIPO=$ac_ct_LIPO fi else LIPO="$ac_cv_prog_LIPO" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. set dummy ${ac_tool_prefix}otool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL"; then ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL="${ac_tool_prefix}otool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL=$ac_cv_prog_OTOOL if test -n "$OTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 $as_echo "$OTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL"; then ac_ct_OTOOL=$OTOOL # Extract the first word of "otool", so it can be a program name with args. set dummy otool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL"; then ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL="otool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL if test -n "$ac_ct_OTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 $as_echo "$ac_ct_OTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL" = x; then OTOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL=$ac_ct_OTOOL fi else OTOOL="$ac_cv_prog_OTOOL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. set dummy ${ac_tool_prefix}otool64; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OTOOL64+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL64"; then ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL64=$ac_cv_prog_OTOOL64 if test -n "$OTOOL64"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 $as_echo "$OTOOL64" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL64"; then ac_ct_OTOOL64=$OTOOL64 # Extract the first word of "otool64", so it can be a program name with args. set dummy otool64; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL64"; then ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL64="otool64" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 if test -n "$ac_ct_OTOOL64"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 $as_echo "$ac_ct_OTOOL64" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL64" = x; then OTOOL64=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL64=$ac_ct_OTOOL64 fi else OTOOL64="$ac_cv_prog_OTOOL64" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 $as_echo_n "checking for -single_module linker flag... " >&6; } if ${lt_cv_apple_cc_single_mod+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_apple_cc_single_mod=no if test -z "${LT_MULTI_MODULE}"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&5 $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&5 # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test $_lt_result -eq 0; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&5 fi rm -rf libconftest.dylib* rm -f conftest.* fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 $as_echo "$lt_cv_apple_cc_single_mod" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 $as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } if ${lt_cv_ld_exported_symbols_list+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_ld_exported_symbols_list=yes else lt_cv_ld_exported_symbols_list=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 $as_echo "$lt_cv_ld_exported_symbols_list" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 $as_echo_n "checking for -force_load linker flag... " >&6; } if ${lt_cv_ld_force_load+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 echo "$AR cru libconftest.a conftest.o" >&5 $AR cru libconftest.a conftest.o 2>&5 echo "$RANLIB libconftest.a" >&5 $RANLIB libconftest.a 2>&5 cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&5 elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then lt_cv_ld_force_load=yes else cat conftest.err >&5 fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 $as_echo "$lt_cv_ld_force_load" >&6; } case $host_os in rhapsody* | darwin1.[012]) _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[91]*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; 10.[012]*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test "$lt_cv_apple_cc_single_mod" = "yes"; then _lt_dar_single_mod='$single_module' fi if test "$lt_cv_ld_exported_symbols_list" = "yes"; then _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' fi if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in dlfcn.h do : ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default " if test "x$ac_cv_header_dlfcn_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_DLFCN_H 1 _ACEOF fi done # Set options enable_dlopen=no # Check whether --enable-shared was given. if test "${enable_shared+set}" = set; then : enableval=$enable_shared; p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$lt_save_ifs" ;; esac else enable_shared=yes fi # Check whether --enable-static was given. if test "${enable_static+set}" = set; then : enableval=$enable_static; p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$lt_save_ifs" ;; esac else enable_static=yes fi # Check whether --with-pic was given. if test "${with_pic+set}" = set; then : withval=$with_pic; lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for lt_pkg in $withval; do IFS="$lt_save_ifs" if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS="$lt_save_ifs" ;; esac else pic_mode=default fi test -z "$pic_mode" && pic_mode=default # Check whether --enable-fast-install was given. if test "${enable_fast_install+set}" = set; then : enableval=$enable_fast_install; p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$lt_save_ifs" ;; esac else enable_fast_install=yes fi # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ltmain" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' test -z "$LN_S" && LN_S="ln -s" if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 $as_echo_n "checking for objdir... " >&6; } if ${lt_cv_objdir+:} false; then : $as_echo_n "(cached) " >&6 else rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 $as_echo "$lt_cv_objdir" >&6; } objdir=$lt_cv_objdir cat >>confdefs.h <<_ACEOF #define LT_OBJDIR "$lt_cv_objdir/" _ACEOF case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld="$lt_cv_prog_gnu_ld" old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 $as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } if ${lt_cv_path_MAGIC_CMD+:} false; then : $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/${ac_tool_prefix}file; then lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 $as_echo_n "checking for file... " >&6; } if ${lt_cv_path_MAGIC_CMD+:} false; then : $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/file; then lt_cv_path_MAGIC_CMD="$ac_dir/file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi else MAGIC_CMD=: fi fi fi ;; esac # Use C for the default configuration in the libtool script lt_save_CC="$CC" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o objext=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then lt_prog_compiler_no_builtin_flag= if test "$GCC" = yes; then case $cc_basename in nvcc*) lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; *) lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 $as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-fno-rtti -fno-exceptions" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_rtti_exceptions=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 $as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" else : fi fi lt_prog_compiler_wl= lt_prog_compiler_pic= lt_prog_compiler_static= if test "$GCC" = yes; then lt_prog_compiler_wl='-Wl,' lt_prog_compiler_static='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. lt_prog_compiler_static= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) lt_prog_compiler_pic='-fPIC' ;; esac ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic=-Kconform_pic fi ;; *) lt_prog_compiler_pic='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 lt_prog_compiler_wl='-Xlinker ' if test -n "$lt_prog_compiler_pic"; then lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' else lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic='-DDLL_EXPORT' ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in # old Intel for x86_64 which still supported -KPIC. ecc*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; # Lahey Fortran 8.1. lf95*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='--shared' lt_prog_compiler_static='--static' ;; nagfor*) # NAG Fortran compiler lt_prog_compiler_wl='-Wl,-Wl,,' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; ccc*) lt_prog_compiler_wl='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-qpic' lt_prog_compiler_static='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='' ;; *Sun\ F* | *Sun*Fortran*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Wl,' ;; *Intel*\ [CF]*Compiler*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; *Portland\ Group*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; esac ;; esac ;; newsos6) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static='-non_shared' ;; rdos*) lt_prog_compiler_static='-non_shared' ;; solaris*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) lt_prog_compiler_wl='-Qoption ld ';; *) lt_prog_compiler_wl='-Wl,';; esac ;; sunos4*) lt_prog_compiler_wl='-Qoption ld ' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then lt_prog_compiler_pic='-Kconform_pic' lt_prog_compiler_static='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; unicos*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_can_build_shared=no ;; uts4*) lt_prog_compiler_pic='-pic' lt_prog_compiler_static='-Bstatic' ;; *) lt_prog_compiler_can_build_shared=no ;; esac fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic= ;; *) lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 $as_echo_n "checking for $compiler option to produce PIC... " >&6; } if ${lt_cv_prog_compiler_pic+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic=$lt_prog_compiler_pic fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 $as_echo "$lt_cv_prog_compiler_pic" >&6; } lt_prog_compiler_pic=$lt_cv_prog_compiler_pic # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } if ${lt_cv_prog_compiler_pic_works+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_works=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic -DPIC" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 $as_echo "$lt_cv_prog_compiler_pic_works" >&6; } if test x"$lt_cv_prog_compiler_pic_works" = xyes; then case $lt_prog_compiler_pic in "" | " "*) ;; *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; esac else lt_prog_compiler_pic= lt_prog_compiler_can_build_shared=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if ${lt_cv_prog_compiler_static_works+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_static_works=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works=yes fi else lt_cv_prog_compiler_static_works=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 $as_echo "$lt_cv_prog_compiler_static_works" >&6; } if test x"$lt_cv_prog_compiler_static_works" = xyes; then : else lt_prog_compiler_static= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } hard_links="nottested" if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 $as_echo_n "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 $as_echo "$hard_links" >&6; } if test "$hard_links" = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 $as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } runpath_var= allow_undefined_flag= always_export_symbols=no archive_cmds= archive_expsym_cmds= compiler_needs_object=no enable_shared_with_static_runtimes=no export_dynamic_flag_spec= export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' hardcode_automatic=no hardcode_direct=no hardcode_direct_absolute=no hardcode_libdir_flag_spec= hardcode_libdir_separator= hardcode_minus_L=no hardcode_shlibpath_var=unsupported inherit_rpath=no link_all_deplibs=unknown module_cmds= module_expsym_cmds= old_archive_from_new_cmds= old_archive_from_expsyms_cmds= thread_safe_flag_spec= whole_archive_flag_spec= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test "$with_gnu_ld" = yes; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; *\ \(GNU\ Binutils\)\ [3-9]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test "$lt_use_gnu_ld_interface" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' export_dynamic_flag_spec='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec= fi supports_anon_versioning=no case `$LD -v 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[3-9]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then allow_undefined_flag=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' export_dynamic_flag_spec='${wl}--export-all-symbols' allow_undefined_flag=unsupported always_export_symbols=no enable_shared_with_static_runtimes=yes export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs=no fi ;; haiku*) archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' link_all_deplibs=yes ;; interix[3-9]*) hardcode_direct=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test "$host_os" = linux-dietlibc; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test "$tmp_diet" = no then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 whole_archive_flag_spec= tmp_sharedflag='--shared' ;; xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi case $cc_basename in xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else ld_shlibs=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac ;; sunos4*) archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct=yes hardcode_shlibpath_var=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac if test "$ld_shlibs" = no; then runpath_var= hardcode_libdir_flag_spec= export_dynamic_flag_spec= whole_archive_flag_spec= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag=unsupported always_export_symbols=yes archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix[4-9]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global # defined symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds='' hardcode_direct=yes hardcode_direct_absolute=yes hardcode_libdir_separator=':' link_all_deplibs=yes file_list_spec='${wl}-f,' if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi export_dynamic_flag_spec='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag='-berok' # Determine the default libpath from the value encoded in an # empty executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath_+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag="-z nodefs" archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath_+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag=' ${wl}-bernotok' allow_undefined_flag=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. whole_archive_flag_spec='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec='$convenience' fi archive_cmds_need_lc=yes # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; bsdi[45]*) export_dynamic_flag_spec=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl*) # Native MSVC hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported always_export_symbols=yes file_list_spec='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, )='true' enable_shared_with_static_runtimes=yes exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib old_postinstall_cmds='chmod 644 $oldlib' postlink_cmds='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC wrapper hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_from_new_cmds='true' # FIXME: Should let the user specify the lib program. old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' enable_shared_with_static_runtimes=yes ;; esac ;; darwin* | rhapsody*) archive_cmds_need_lc=no hardcode_direct=no hardcode_automatic=yes hardcode_shlibpath_var=unsupported if test "$lt_cv_ld_force_load" = "yes"; then whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' else whole_archive_flag_spec='' fi link_all_deplibs=yes allow_undefined_flag="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=func_echo_all archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" else ld_shlibs=no fi ;; dgux*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; hpux9*) if test "$GCC" = yes; then archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes export_dynamic_flag_spec='${wl}-E' ;; hpux10*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes fi ;; hpux11*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 $as_echo_n "checking if $CC understands -b... " >&6; } if ${lt_cv_prog_compiler__b+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler__b=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -b" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler__b=yes fi else lt_cv_prog_compiler__b=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 $as_echo "$lt_cv_prog_compiler__b" >&6; } if test x"$lt_cv_prog_compiler__b" = xyes; then archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi ;; esac fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: case $host_cpu in hppa*64*|ia64*) hardcode_direct=no hardcode_shlibpath_var=no ;; *) hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 $as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } if ${lt_cv_irix_exported_symbol+:} false; then : $as_echo_n "(cached) " >&6 else save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int foo (void) { return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_irix_exported_symbol=yes else lt_cv_irix_exported_symbol=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 $as_echo "$lt_cv_irix_exported_symbol" >&6; } if test "$lt_cv_irix_exported_symbol" = yes; then archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' fi else archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: inherit_rpath=yes link_all_deplibs=yes ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; newsos6) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: hardcode_shlibpath_var=no ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct=yes hardcode_shlibpath_var=no hardcode_direct_absolute=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' else case $host_os in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-R$libdir' ;; *) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; esac fi else ld_shlibs=no fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi archive_cmds_need_lc='no' hardcode_libdir_separator=: ;; solaris*) no_undefined_flag=' -z defs' if test "$GCC" = yes; then wlarc='${wl}' archive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${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 $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='${wl}' archive_cmds='$CC -G${allow_undefined_flag} -h $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 -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi hardcode_libdir_flag_spec='-R$libdir' hardcode_shlibpath_var=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. GCC discards it without `$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test "$GCC" = yes; then whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' else whole_archive_flag_spec='-z allextract$convenience -z defaultextract' fi ;; esac link_all_deplibs=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; sysv4) case $host_vendor in sni) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds='$CC -r -o $output$reload_objs' hardcode_direct=no ;; motorola) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var=no ;; sysv4.3*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no export_dynamic_flag_spec='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag='${wl}-z,text' archive_cmds_need_lc=no hardcode_shlibpath_var=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag='${wl}-z,text' allow_undefined_flag='${wl}-z,nodefs' archive_cmds_need_lc=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='${wl}-R,$libdir' hardcode_libdir_separator=':' link_all_deplibs=yes export_dynamic_flag_spec='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; *) ld_shlibs=no ;; esac if test x$host_vendor = xsni; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) export_dynamic_flag_spec='${wl}-Blargedynsym' ;; esac fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 $as_echo "$ld_shlibs" >&6; } test "$ld_shlibs" = no && can_build_shared=no with_gnu_ld=$with_gnu_ld # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc" in x|xyes) # Assume -lc should be added archive_cmds_need_lc=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } if ${lt_cv_archive_cmds_need_lc+:} false; then : $as_echo_n "(cached) " >&6 else $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl pic_flag=$lt_prog_compiler_pic compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag allow_undefined_flag= if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc=no else lt_cv_archive_cmds_need_lc=yes fi allow_undefined_flag=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 $as_echo "$lt_cv_archive_cmds_need_lc" >&6; } archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc ;; esac fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 $as_echo_n "checking dynamic linker characteristics... " >&6; } if test "$GCC" = yes; then case $host_os in darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; *) lt_awk_arg="/^libraries:/" ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq="s,=\([A-Za-z]:\),\1,g" ;; *) lt_sed_strip_eq="s,=/,/,g" ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary. lt_tmp_lt_search_path_spec= lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path/$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" else test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS=" "; FS="/|\n";} { lt_foo=""; lt_count=0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo="/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[lt_foo]++; } if (lt_freq[lt_foo] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's,/\([A-Za-z]:\),\1,g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[4-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' library_names_spec='${libname}.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec="$LIB" if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[23].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=yes sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[3-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH if ${lt_cv_shlibpath_overrides_runpath+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : lt_cv_shlibpath_overrides_runpath=yes fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir fi shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 $as_echo "$dynamic_linker" >&6; } test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 $as_echo_n "checking how to hardcode library paths into programs... " >&6; } hardcode_action= if test -n "$hardcode_libdir_flag_spec" || test -n "$runpath_var" || test "X$hardcode_automatic" = "Xyes" ; then # We can hardcode non-existent directories. if test "$hardcode_direct" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no && test "$hardcode_minus_L" != no; then # Linking always hardcodes the temporary library directory. hardcode_action=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action=unsupported fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 $as_echo "$hardcode_action" >&6; } if test "$hardcode_action" = relink || test "$inherit_rpath" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes fi ;; *) ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" if test "x$ac_cv_func_shl_load" = xyes; then : lt_cv_dlopen="shl_load" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 $as_echo_n "checking for shl_load in -ldld... " >&6; } if ${ac_cv_lib_dld_shl_load+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char shl_load (); int main () { return shl_load (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_shl_load=yes else ac_cv_lib_dld_shl_load=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 $as_echo "$ac_cv_lib_dld_shl_load" >&6; } if test "x$ac_cv_lib_dld_shl_load" = xyes; then : lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" else ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" if test "x$ac_cv_func_dlopen" = xyes; then : lt_cv_dlopen="dlopen" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 $as_echo_n "checking for dlopen in -lsvld... " >&6; } if ${ac_cv_lib_svld_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_svld_dlopen=yes else ac_cv_lib_svld_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 $as_echo "$ac_cv_lib_svld_dlopen" >&6; } if test "x$ac_cv_lib_svld_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 $as_echo_n "checking for dld_link in -ldld... " >&6; } if ${ac_cv_lib_dld_dld_link+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dld_link (); int main () { return dld_link (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_dld_link=yes else ac_cv_lib_dld_dld_link=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 $as_echo "$ac_cv_lib_dld_dld_link" >&6; } if test "x$ac_cv_lib_dld_dld_link" = xyes; then : lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" fi fi fi fi fi fi ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 $as_echo_n "checking whether a program can dlopen itself... " >&6; } if ${lt_cv_dlopen_self+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; esac else : # compilation failed lt_cv_dlopen_self=no fi fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 $as_echo "$lt_cv_dlopen_self" >&6; } if test "x$lt_cv_dlopen_self" = xyes; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 $as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } if ${lt_cv_dlopen_self_static+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self_static=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; esac else : # compilation failed lt_cv_dlopen_self_static=no fi fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 $as_echo "$lt_cv_dlopen_self_static" >&6; } fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi striplib= old_striplib= { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 $as_echo_n "checking whether stripping libraries is possible... " >&6; } if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" old_striplib="$STRIP -S" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } ;; esac fi # Report which library types will actually be built { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 $as_echo_n "checking if libtool supports shared libraries... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 $as_echo "$can_build_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 $as_echo_n "checking whether to build shared libraries... " >&6; } test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[4-9]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 $as_echo "$enable_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 $as_echo_n "checking whether to build static libraries... " >&6; } # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 $as_echo "$enable_static" >&6; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CC="$lt_save_CC" ac_config_commands="$ac_config_commands libtool" # Only expand once: ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -z "$GCC" ; then DEBUG="-g $CFLAGS" PROFILE="-g -p $CFLAGS" else DEBUG="-g -std=gnu99 $CFLAGS" PROFILE="-g -p -std=gnu99 $CFLAGS" CFLAGS="-std=gnu99 $CFLAGS" fi case $host in *-*-*bsd*) dlopen_flag="RTLD_LAZY" ;; *) dlopen_flag="RTLD_NOW" ;; esac cat >>confdefs.h <<_ACEOF #define DLOPEN_FLAG $dlopen_flag _ACEOF if false; then HAVE_DBI_TRUE= HAVE_DBI_FALSE='#' else HAVE_DBI_TRUE='#' HAVE_DBI_FALSE= fi ac_dbi_incdir="no" # exported variables DBI_INCLUDE="" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libdbi framework" >&5 $as_echo_n "checking for libdbi framework... " >&6; } # Check whether --with-dbi-incdir was given. if test "${with_dbi_incdir+set}" = set; then : withval=$with_dbi_incdir; ac_dbi_incdir="$withval" fi if test "$ac_dbi_incdir" = "no"; then for ac_header in dbi/dbi.h do : ac_fn_c_check_header_mongrel "$LINENO" "dbi/dbi.h" "ac_cv_header_dbi_dbi_h" "$ac_includes_default" if test "x$ac_cv_header_dbi_dbi_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_DBI_DBI_H 1 _ACEOF fi done DBI_INCLUDE="" else DBI_INCLUDE=-I$ac_dbi_incdir fi if false; then HAVE_MYSQL_TRUE= HAVE_MYSQL_FALSE='#' else HAVE_MYSQL_TRUE='#' HAVE_MYSQL_FALSE= fi ac_mysql="no" ac_mysql_incdir="no" ac_mysql_libdir="no" # exported variables MYSQL_LIBS="" MYSQL_LDFLAGS="" MYSQL_INCLUDE="" MYSQL_TEST="" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for MySQL support" >&5 $as_echo_n "checking for MySQL support... " >&6; } # Check whether --with-mysql was given. if test "${with_mysql+set}" = set; then : withval=$with_mysql; ac_mysql="$withval" fi # Check whether --with-mysql-incdir was given. if test "${with_mysql_incdir+set}" = set; then : withval=$with_mysql_incdir; ac_mysql_incdir="$withval" fi # Check whether --with-mysql-libdir was given. if test "${with_mysql_libdir+set}" = set; then : withval=$with_mysql_libdir; ac_mysql_libdir="$withval" fi ac_mysql_threadsafe="NO" # Check whether --enable-mysql-threadsafe was given. if test "${enable_mysql_threadsafe+set}" = set; then : enableval=$enable_mysql_threadsafe; if test "$enable_mysql_threadsafe" = "yes"; then ac_mysql_threadsafe="YES" fi fi if test "$ac_mysql" = "yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } if test "$ac_mysql_incdir" = "no" || test "$ac_mysql_libdir" = "no"; then # Extract the first word of "mysql_config", so it can be a program name with args. set dummy mysql_config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_MYSQL_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$MYSQL_CONFIG"; then ac_cv_prog_MYSQL_CONFIG="$MYSQL_CONFIG" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_MYSQL_CONFIG="yes" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_MYSQL_CONFIG" && ac_cv_prog_MYSQL_CONFIG="no" fi fi MYSQL_CONFIG=$ac_cv_prog_MYSQL_CONFIG if test -n "$MYSQL_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MYSQL_CONFIG" >&5 $as_echo "$MYSQL_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "$MYSQL_CONFIG" = "no"; then as_fn_error $? "cannot auto-configure MySQL without mysql_config" "$LINENO" 5 fi fi if test "$ac_mysql_incdir" = "no"; then MYSQL_INCLUDE=`mysql_config --include` else MYSQL_INCLUDE=-I$ac_mysql_incdir fi if test "$ac_mysql_libdir" = "no"; then if test "$ac_mysql_threadsafe" = "YES"; then MYSQL_LIBS=`mysql_config --libs_r` else MYSQL_LIBS=`mysql_config --libs` fi else if test "$ac_mysql_threadsafe" = "YES"; then MYSQL_LIBS="-L$ac_mysql_libdir -lmysqlclient_r" else MYSQL_LIBS="-L$ac_mysql_libdir -lmysqlclient" fi fi if true; then HAVE_MYSQL_TRUE= HAVE_MYSQL_FALSE='#' else HAVE_MYSQL_TRUE='#' HAVE_MYSQL_FALSE= fi MYSQL_TEST="test_mysql.sh" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for MySQL includes" >&5 $as_echo_n "checking for MySQL includes... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MYSQL_INCLUDE" >&5 $as_echo "$MYSQL_INCLUDE" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for MySQL libraries" >&5 $as_echo_n "checking for MySQL libraries... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MYSQL_LDFLAGS" >&5 $as_echo "$MYSQL_LDFLAGS" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if false; then HAVE_PGSQL_TRUE= HAVE_PGSQL_FALSE='#' else HAVE_PGSQL_TRUE='#' HAVE_PGSQL_FALSE= fi ac_pgsql="no" ac_pgsql_incdir="no" ac_pgsql_libdir="no" # exported variables PGSQL_LIBS="" PGSQL_LDFLAGS="" PGSQL_INCLUDE="" PGSQL_TEST="" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PostgreSQL support" >&5 $as_echo_n "checking for PostgreSQL support... " >&6; } # Check whether --with-pgsql was given. if test "${with_pgsql+set}" = set; then : withval=$with_pgsql; ac_pgsql="$withval" fi # Check whether --with-pgsql-incdir was given. if test "${with_pgsql_incdir+set}" = set; then : withval=$with_pgsql_incdir; ac_pgsql_incdir="$withval" fi # Check whether --with-pgsql-libdir was given. if test "${with_pgsql_libdir+set}" = set; then : withval=$with_pgsql_libdir; ac_pgsql_libdir="$withval" fi if test "$ac_pgsql" = "yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } if test "$ac_pgsql_incdir" = "no" || test "$ac_pgsql_libdir" = "no"; then # Extract the first word of "pg_config", so it can be a program name with args. set dummy pg_config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_PG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$PG_CONFIG"; then ac_cv_prog_PG_CONFIG="$PG_CONFIG" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_PG_CONFIG="yes" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_PG_CONFIG" && ac_cv_prog_PG_CONFIG="no" fi fi PG_CONFIG=$ac_cv_prog_PG_CONFIG if test -n "$PG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PG_CONFIG" >&5 $as_echo "$PG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "$PG_CONFIG" = "no"; then as_fn_error $? "cannot auto-configure PostgreSQL without pg_config" "$LINENO" 5 fi fi if test "$ac_pgsql_incdir" = "no"; then PGSQL_INCLUDE="-I"`pg_config --includedir` else PGSQL_INCLUDE=-I$ac_pgsql_incdir fi if test "$ac_pgsql_libdir" = "no"; then PGSQL_LDFLAGS=`pg_config --libdir` else PGSQL_LDFLAGS=-L$ac_pgsql_libdir fi PGSQL_LIBS=-lpq PGSQL_TEST="test_pgsql.sh" if true; then HAVE_PGSQL_TRUE= HAVE_PGSQL_FALSE='#' else HAVE_PGSQL_TRUE='#' HAVE_PGSQL_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PostgreSQL includes" >&5 $as_echo_n "checking for PostgreSQL includes... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PGSQL_INCLUDE" >&5 $as_echo "$PGSQL_INCLUDE" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PostgreSQL libraries" >&5 $as_echo_n "checking for PostgreSQL libraries... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PGSQL_LDFLAGS" >&5 $as_echo "$PGSQL_LDFLAGS" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if false; then HAVE_SQLITE_TRUE= HAVE_SQLITE_FALSE='#' else HAVE_SQLITE_TRUE='#' HAVE_SQLITE_FALSE= fi ac_sqlite="no" ac_sqlite_incdir="no" ac_sqlite_libdir="no" # exported variables SQLITE_LIBS="" SQLITE_LDFLAGS="" SQLITE_INCLUDE="" SQLITE_TEST="" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SQLite support" >&5 $as_echo_n "checking for SQLite support... " >&6; } # Check whether --with-sqlite was given. if test "${with_sqlite+set}" = set; then : withval=$with_sqlite; ac_sqlite="$withval" fi # Check whether --with-sqlite-incdir was given. if test "${with_sqlite_incdir+set}" = set; then : withval=$with_sqlite_incdir; ac_sqlite_incdir="$withval" fi # Check whether --with-sqlite-libdir was given. if test "${with_sqlite_libdir+set}" = set; then : withval=$with_sqlite_libdir; ac_sqlite_libdir="$withval" fi if test "$ac_sqlite" = "yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } if test "$ac_sqlite_incdir" = "no"; then ac_fn_c_check_header_mongrel "$LINENO" "sqlite.h" "ac_cv_header_sqlite_h" "$ac_includes_default" if test "x$ac_cv_header_sqlite_h" = xyes; then : fi SQLITE_INCLUDE="" else SQLITE_INCLUDE=-I$ac_sqlite_incdir fi if test "$ac_sqlite_libdir" = "no"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing sqlite_exec" >&5 $as_echo_n "checking for library containing sqlite_exec... " >&6; } if ${ac_cv_search_sqlite_exec+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS="$LIBS" ac_cv_search_sqlite_exec="no" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char sqlite_exec (); int main () { return sqlite_exec (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_sqlite_exec="none required" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext test "$ac_cv_search_sqlite_exec" = "no" && for i in sqlite; do LIBS="-l$i $ac_func_search_save_LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char sqlite_exec (); int main () { return sqlite_exec (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_sqlite_exec="-l$i" break fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done LIBS="$ac_func_search_save_LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_sqlite_exec" >&5 $as_echo "$ac_cv_search_sqlite_exec" >&6; } if test "$ac_cv_search_sqlite_exec" != "no"; then test "$ac_cv_search_sqlite_exec" = "none required" || SQLITE_LIBS="$SQLITE_LIBS $ac_cv_search_sqlite_exec" else : fi SQLITE_LDFLAGS="" else SQLITE_LIBS=-lsqlite SQLITE_LDFLAGS=-L$ac_sqlite_libdir fi SQLITE_TEST="test_sqlite.sh" if true; then HAVE_SQLITE_TRUE= HAVE_SQLITE_FALSE='#' else HAVE_SQLITE_TRUE='#' HAVE_SQLITE_FALSE= fi else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if false; then HAVE_SQLITE3_TRUE= HAVE_SQLITE3_FALSE='#' else HAVE_SQLITE3_TRUE='#' HAVE_SQLITE3_FALSE= fi ac_sqlite3="no" ac_sqlite3_incdir="no" ac_sqlite3_libdir="no" # exported variables SQLITE3_LIBS="" SQLITE3_LDFLAGS="" SQLITE3_INCLUDE="" SQLITE3_TEST="" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SQLite3 support" >&5 $as_echo_n "checking for SQLite3 support... " >&6; } # Check whether --with-sqlite3 was given. if test "${with_sqlite3+set}" = set; then : withval=$with_sqlite3; ac_sqlite3="$withval" fi # Check whether --with-sqlite3-incdir was given. if test "${with_sqlite3_incdir+set}" = set; then : withval=$with_sqlite3_incdir; ac_sqlite3_incdir="$withval" fi # Check whether --with-sqlite3-libdir was given. if test "${with_sqlite3_libdir+set}" = set; then : withval=$with_sqlite3_libdir; ac_sqlite3_libdir="$withval" fi if test "$ac_sqlite3" = "yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } if test "$ac_sqlite3_incdir" = "no"; then ac_fn_c_check_header_mongrel "$LINENO" "sqlite3.h" "ac_cv_header_sqlite3_h" "$ac_includes_default" if test "x$ac_cv_header_sqlite3_h" = xyes; then : fi SQLITE3_INCLUDE="" else SQLITE3_INCLUDE=-I$ac_sqlite3_incdir fi if test "$ac_sqlite3_libdir" = "no"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing sqlite3_exec" >&5 $as_echo_n "checking for library containing sqlite3_exec... " >&6; } if ${ac_cv_search_sqlite3_exec+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS="$LIBS" ac_cv_search_sqlite3_exec="no" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char sqlite3_exec (); int main () { return sqlite3_exec (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_sqlite3_exec="none required" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext test "$ac_cv_search_sqlite3_exec" = "no" && for i in sqlite3; do LIBS="-l$i $ac_func_search_save_LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char sqlite3_exec (); int main () { return sqlite3_exec (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_sqlite3_exec="-l$i" break fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done LIBS="$ac_func_search_save_LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_sqlite3_exec" >&5 $as_echo "$ac_cv_search_sqlite3_exec" >&6; } if test "$ac_cv_search_sqlite3_exec" != "no"; then test "$ac_cv_search_sqlite3_exec" = "none required" || SQLITE3_LIBS="$SQLITE3_LIBS $ac_cv_search_sqlite3_exec" else : fi SQLITE3_LDFLAGS="" else SQLITE3_LIBS=-lsqlite SQLITE3_LDFLAGS=-L$ac_sqlite3_libdir fi SQLITE3_TEST="test_sqlite3.sh" if true; then HAVE_SQLITE3_TRUE= HAVE_SQLITE3_FALSE='#' else HAVE_SQLITE3_TRUE='#' HAVE_SQLITE3_FALSE= fi else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if false; then HAVE_MSQL_TRUE= HAVE_MSQL_FALSE='#' else HAVE_MSQL_TRUE='#' HAVE_MSQL_FALSE= fi ac_msql="no" ac_msql_incdir="no" ac_msql_libdir="no" # exported variables MSQL_LIBS="" MSQL_LDFLAGS="" MSQL_INCLUDE="" MSQL_TEST="" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Msql support" >&5 $as_echo_n "checking for Msql support... " >&6; } # Check whether --with-msql was given. if test "${with_msql+set}" = set; then : withval=$with_msql; ac_msql="$withval" fi # Check whether --with-msql-incdir was given. if test "${with_msql_incdir+set}" = set; then : withval=$with_msql_incdir; ac_msql_incdir="$withval" fi # Check whether --with-msql-libdir was given. if test "${with_msql_libdir+set}" = set; then : withval=$with_msql_libdir; ac_msql_libdir="$withval" fi if test "$ac_msql" = "yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } if test "$ac_msql_incdir" = "no"; then ac_fn_c_check_header_mongrel "$LINENO" "msql.h" "ac_cv_header_msql_h" "$ac_includes_default" if test "x$ac_cv_header_msql_h" = xyes; then : fi MSQL_INCLUDE="" else MSQL_INCLUDE=-I$ac_msql_incdir fi if test "$ac_msql_libdir" = "no"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing msql_exec" >&5 $as_echo_n "checking for library containing msql_exec... " >&6; } if ${ac_cv_search_msql_exec+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS="$LIBS" ac_cv_search_msql_exec="no" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char msql_exec (); int main () { return msql_exec (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_msql_exec="none required" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext test "$ac_cv_search_msql_exec" = "no" && for i in msql; do LIBS="-l$i $ac_func_search_save_LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char msql_exec (); int main () { return msql_exec (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_msql_exec="-l$i" break fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done LIBS="$ac_func_search_save_LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_msql_exec" >&5 $as_echo "$ac_cv_search_msql_exec" >&6; } if test "$ac_cv_search_msql_exec" != "no"; then test "$ac_cv_search_msql_exec" = "none required" || MSQL_LIBS="$MSQL_LIBS $ac_cv_search_msql_exec" else : fi MSQL_LDFLAGS="" else MSQL_LIBS=-lmsql MSQL_LDFLAGS=-L$ac_msql_libdir fi MSQL_TEST="test_msql.sh" if true; then HAVE_MSQL_TRUE= HAVE_MSQL_FALSE='#' else HAVE_MSQL_TRUE='#' HAVE_MSQL_FALSE= fi else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if false; then HAVE_ORACLE_TRUE= HAVE_ORACLE_FALSE='#' else HAVE_ORACLE_TRUE='#' HAVE_ORACLE_FALSE= fi ac_oracle="no" ac_oracle_incdir="no" ac_oracle_libdir="no" # exported variables ORACLE_LIBS="" ORACLE_LDFLAGS="" ORACLE_INCLUDE="" ORACLE_TEST="" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Oracle support" >&5 $as_echo_n "checking for Oracle support... " >&6; } # Check whether --with-oracle was given. if test "${with_oracle+set}" = set; then : withval=$with_oracle; ac_oracle="$withval" fi # Check whether --with-oracle-dir was given. if test "${with_oracle_dir+set}" = set; then : withval=$with_oracle_dir; ac_oracle_incdir="$withval"/rdbms/demo ac_oracle_libdir="$withval"/lib fi # Check whether --with-oracle-incdir was given. if test "${with_oracle_incdir+set}" = set; then : withval=$with_oracle_incdir; ac_oracle_incdir="$withval" fi # Check whether --with-oracle-libdir was given. if test "${with_oracle_libdir+set}" = set; then : withval=$with_oracle_libdir; ac_oracle_libdir="$withval" fi if test "$ac_oracle" = "yes"; then if test "$ac_oracle_incdir" = "no" || test "$ac_oracle_libs" = "no"; then oracle_incdirs="$ORACLE_HOME/rdbms/demo $ORACLE_HOME/rdbms/public" ac_oracle_incdir=no for i in $oracle_incdirs; do for j in oci.h; do if test -r "$i/$j"; then ac_oracle_incdir=$i break 2 fi done done oracle_libdirs="$ORACLE_HOME/lib" ac_oracle_libdir=no for i in $oracle_libdirs; do for j in libclntsh.so; do if test -r "$i/$j"; then ac_oracle_libdir=$i break 2 fi done done if test "$ac_oracle_incdir" = "no"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } as_fn_error $? "Invalid Oracle directory - include files not found." "$LINENO" 5 fi if test "$ac_oracle_libdir" = "no"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } as_fn_error $? "Invalid Oracle directory - libraries not found." "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes: libs in $ac_oracle_libdir, headers in $ac_oracle_incdir" >&5 $as_echo "yes: libs in $ac_oracle_libdir, headers in $ac_oracle_incdir" >&6; } if true; then HAVE_ORACLE_TRUE= HAVE_ORACLE_FALSE='#' else HAVE_ORACLE_TRUE='#' HAVE_ORACLE_FALSE= fi ORACLE_LIBS=-lclntsh ORACLE_INCLUDE="-I$ac_oracle_incdir -I$ORACLE_HOME/rdbms/public" ORACLE_LDFLAGS=-L$ac_oracle_libdir ORACLE_TEST="test_oracle.sh" else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if false; then HAVE_FIREBIRD_INTERBASE_TRUE= HAVE_FIREBIRD_INTERBASE_FALSE='#' else HAVE_FIREBIRD_INTERBASE_TRUE='#' HAVE_FIREBIRD_INTERBASE_FALSE= fi ac_firebird="no" ac_firebird_incdir="no" ac_firebird_libdir="no" # exported variables FIREBIRD_LIBS="" FIREBIRD_LDFLAGS="" FIREBIRD_INCLUDE="" FIREBIRD_TEST="" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Firebird/Interbase support" >&5 $as_echo_n "checking for Firebird/Interbase support... " >&6; } # Check whether --with-firebird was given. if test "${with_firebird+set}" = set; then : withval=$with_firebird; ac_firebird="$withval" fi # Check whether --with-firebird-incdir was given. if test "${with_firebird_incdir+set}" = set; then : withval=$with_firebird_incdir; ac_firebird_incdir="$withval" fi # Check whether --with-firebird-libdir was given. if test "${with_firebird_libdir+set}" = set; then : withval=$with_firebird_libdir; ac_firebird_libdir="$withval" fi if test "$ac_firebird" = "yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } if test "$ac_firebird_incdir" = "no"; then ac_fn_c_check_header_mongrel "$LINENO" "ibase.h" "ac_cv_header_ibase_h" "$ac_includes_default" if test "x$ac_cv_header_ibase_h" = xyes; then : fi FIREBIRD_INCLUDE="" else FIREBIRD_INCLUDE=-I$ac_firebird_incdir fi if test "$ac_firebird_libdir" = "no"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing isc_dsql_fetch" >&5 $as_echo_n "checking for library containing isc_dsql_fetch... " >&6; } if ${ac_cv_search_isc_dsql_fetch+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS="$LIBS" ac_cv_search_isc_dsql_fetch="no" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char isc_dsql_fetch (); int main () { return isc_dsql_fetch (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_isc_dsql_fetch="none required" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext test "$ac_cv_search_isc_dsql_fetch" = "no" && for i in fbembed; do LIBS="-l$i $ac_func_search_save_LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char isc_dsql_fetch (); int main () { return isc_dsql_fetch (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_isc_dsql_fetch="-l$i" break fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done LIBS="$ac_func_search_save_LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_isc_dsql_fetch" >&5 $as_echo "$ac_cv_search_isc_dsql_fetch" >&6; } if test "$ac_cv_search_isc_dsql_fetch" != "no"; then test "$ac_cv_search_isc_dsql_fetch" = "none required" || FIREBIRD_LIBS="$FIREBIRD_LIBS $ac_cv_search_isc_dsql_fetch" else : fi FIREBIRD_LDFLAGS="" else FIREBIRD_LIBS=-lfbembed FIREBIRD_LDFLAGS=-L$ac_firebird_libdir fi for ac_prog in isql-fb isql do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_FIREBIRD_ISQL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$FIREBIRD_ISQL"; then ac_cv_prog_FIREBIRD_ISQL="$FIREBIRD_ISQL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_FIREBIRD_ISQL="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi FIREBIRD_ISQL=$ac_cv_prog_FIREBIRD_ISQL if test -n "$FIREBIRD_ISQL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FIREBIRD_ISQL" >&5 $as_echo "$FIREBIRD_ISQL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$FIREBIRD_ISQL" && break done if test "x$FIREBIRD_ISQL != x"; then FIREBIRD_ISQL_FLAG="-DFIREBIRD_ISQL=\\\"$FIREBIRD_ISQL\\\"" else FIREBIRD_ISQL_FLAG="" fi FIREBIRD_TEST="test_firebird.sh" if true; then HAVE_FIREBIRD_INTERBASE_TRUE= HAVE_FIREBIRD_INTERBASE_FALSE='#' else HAVE_FIREBIRD_INTERBASE_TRUE='#' HAVE_FIREBIRD_INTERBASE_FALSE= fi else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if false; then HAVE_FREETDS_TRUE= HAVE_FREETDS_FALSE='#' else HAVE_FREETDS_TRUE='#' HAVE_FREETDS_FALSE= fi ac_freetds="no" ac_freetds_incdir="no" ac_freetds_libdir="no" # exported variables FREETDS_LIBS="" FREETDS_LDFLAGS="" FREETDS_INCLUDE="" FREETDS_TEST="" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Freetds support" >&5 $as_echo_n "checking for Freetds support... " >&6; } # Check whether --with-freetds was given. if test "${with_freetds+set}" = set; then : withval=$with_freetds; ac_freetds="$withval" fi # Check whether --with-freetds-incdir was given. if test "${with_freetds_incdir+set}" = set; then : withval=$with_freetds_incdir; ac_freetds_incdir="$withval" fi # Check whether --with-freetds-libdir was given. if test "${with_freetds_libdir+set}" = set; then : withval=$with_freetds_libdir; ac_freetds_libdir="$withval" fi if test "$ac_freetds" = "yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } if test "$ac_freetds_incdir" = "no"; then ac_fn_c_check_header_mongrel "$LINENO" "tds.h" "ac_cv_header_tds_h" "$ac_includes_default" if test "x$ac_cv_header_tds_h" = xyes; then : fi FREETDS_INCLUDE="" else FREETDS_INCLUDE=-I$ac_freetds_incdir fi if test "$ac_freetds_libdir" = "no"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing ct_command" >&5 $as_echo_n "checking for library containing ct_command... " >&6; } if ${ac_cv_search_ct_command+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS="$LIBS" ac_cv_search_ct_command="no" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char ct_command (); int main () { return ct_command (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_ct_command="none required" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext test "$ac_cv_search_ct_command" = "no" && for i in ct; do LIBS="-l$i $ac_func_search_save_LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char ct_command (); int main () { return ct_command (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_ct_command="-l$i" break fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done LIBS="$ac_func_search_save_LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_ct_command" >&5 $as_echo "$ac_cv_search_ct_command" >&6; } if test "$ac_cv_search_ct_command" != "no"; then test "$ac_cv_search_ct_command" = "none required" || FREETDS_LIBS="$FREETDS_LIBS $ac_cv_search_ct_command" else : fi FREETDS_LDFLAGS="" else FREETDS_LIBS=-lct FREETDS_LDFLAGS=-L$ac_freetds_libdir fi FREETDS_TEST="test_freetds.sh" if true; then HAVE_FREETDS_TRUE= HAVE_FREETDS_FALSE='#' else HAVE_FREETDS_TRUE='#' HAVE_FREETDS_FALSE= fi else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if false; then HAVE_INGRES_TRUE= HAVE_INGRES_FALSE='#' else HAVE_INGRES_TRUE='#' HAVE_INGRES_FALSE= fi ac_ingres="no" ac_ingres_incdir="no" ac_ingres_libdir="no" # exported variables INGRES_LIBS="" INGRES_LDFLAGS="" INGRES_INCLUDE="" INGRES_TEST="" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Ingres support" >&5 $as_echo_n "checking for Ingres support... " >&6; } # Check whether --with-ingres was given. if test "${with_ingres+set}" = set; then : withval=$with_ingres; ac_ingres="$withval" fi # Check whether --with-ingres-dir was given. if test "${with_ingres_dir+set}" = set; then : withval=$with_ingres_dir; ac_ingres_incdir="$withval"/ingres/files ac_ingres_libdir="$withval"/ingres/lib fi # Check whether --with-ingres-incdir was given. if test "${with_ingres_incdir+set}" = set; then : withval=$with_ingres_incdir; ac_ingres_incdir="$withval" fi # Check whether --with-ingres-libdir was given. if test "${with_ingres_libdir+set}" = set; then : withval=$with_ingres_libdir; ac_ingres_libdir="$withval" fi if test "$ac_ingres" = "yes"; then if test "$ac_ingres_incdir" = "no" || test "$ac_ingres_libs" = "no"; then ingres_incdirs="/usr/include /usr/local/include /opt/Ingres/IngresII/ingres/files" ac_ingres_incdir=no for i in $ingres_incdirs; do for j in iiapi.h; do if test -r "$i/$j"; then ac_ingres_incdir=$i break 2 fi done done ingres_libdirs="/usr/lib /usr/local/lib /opt/Ingres/IngresII/ingres/lib" ac_ingres_libdir=no for i in $ingres_libdirs; do for j in libingres.a; do if test -r "$i/$j"; then ac_ingres_libdir=$i break 2 fi done done if test "$ac_ingres_incdir" = "no"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } as_fn_error $? "Invalid Ingres directory - include files not found." "$LINENO" 5 fi if test "$ac_ingres_libdir" = "no"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } as_fn_error $? "Invalid Ingres directory - libraries not found." "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes: libs in $ac_ingres_libdir, headers in $ac_ingres_incdir" >&5 $as_echo "yes: libs in $ac_ingres_libdir, headers in $ac_ingres_incdir" >&6; } if true; then HAVE_INGRES_TRUE= HAVE_INGRES_FALSE='#' else HAVE_INGRES_TRUE='#' HAVE_INGRES_FALSE= fi INGRES_LIBS="-lingres -lpthread -ldl -lm -lcrypt" INGRES_INCLUDE=-I$ac_ingres_incdir INGRES_LDFLAGS=-L$ac_ingres_libdir INGRES_TEST="test_ingres.sh" else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if false; then HAVE_DB2_TRUE= HAVE_DB2_FALSE='#' else HAVE_DB2_TRUE='#' HAVE_DB2_FALSE= fi ac_db2="no" ac_db2_incdir="no" ac_db2_libdir="no" # exported variables DB2_LIBS="" DB2_LDFLAGS="" DB2_INCLUDE="" DB2_TEST="" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for IBM DB2 support" >&5 $as_echo_n "checking for IBM DB2 support... " >&6; } # Check whether --with-db2 was given. if test "${with_db2+set}" = set; then : withval=$with_db2; ac_db2="$withval" fi # Check whether --with-db2-dir was given. if test "${with_db2_dir+set}" = set; then : withval=$with_db2_dir; ac_db2_incdir="$withval"/include ac_db2_libdir="$withval"/lib fi # Check whether --with-db2-incdir was given. if test "${with_db2_incdir+set}" = set; then : withval=$with_db2_incdir; ac_db2_incdir="$withval" fi # Check whether --with-db2-libdir was given. if test "${with_db2_libdir+set}" = set; then : withval=$with_db2_libdir; ac_db2_libdir="$withval" fi if test "$ac_db2" = "yes"; then if test "$ac_db2_incdir" = "no" || test "$ac_db2_libs" = "no"; then db2_incdirs="$DB2_HOME/rdbms/demo $DB2_HOME/rdbms/public" ac_db2_incdir=no for i in $db2_incdirs; do for j in sqlcli1.h; do if test -r "$i/$j"; then ac_db2_incdir=$i break 2 fi done done db2_libdirs="$ORACLE_HOME/lib" ac_db2_libdir=no for i in $db2_libdirs; do for j in libdb2.so; do if test -r "$i/$j"; then ac_db2_libdir=$i break 2 fi done done if test "$ac_db2_incdir" = "no"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } as_fn_error $? "Invalid IBM DB2 directory - include files not found." "$LINENO" 5 fi if test "$ac_db2_libdir" = "no"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } as_fn_error $? "Invalid IBM DB2 directory - libraries not found." "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes: libs in $ac_db2_libdir, headers in $ac_db2_incdir" >&5 $as_echo "yes: libs in $ac_db2_libdir, headers in $ac_db2_incdir" >&6; } if true; then HAVE_DB2_TRUE= HAVE_DB2_FALSE='#' else HAVE_DB2_TRUE='#' HAVE_DB2_FALSE= fi DB2_LIBS=-ldb2 DB2_INCLUDE="-I$ac_db2_incdir -I$DB2_HOME/include" DB2_LDFLAGS=-L$ac_db2_libdir DB2_TEST="test_db2.sh" else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi case $host in *-*-win32*) shlib_ext=.dll ;; *-*-cygwin*) shlib_ext=.dll ;; *-*-mingw32*) shlib_ext=.dll ;; *) shlib_ext=.so ;; esac # Check whether --with-shlib-ext was given. if test "${with_shlib_ext+set}" = set; then : withval=$with_shlib_ext; shlib_ext=$withval fi cat >>confdefs.h <<_ACEOF #define DRIVER_EXT "$shlib_ext" _ACEOF for ac_func in strtoll do : ac_fn_c_check_func "$LINENO" "strtoll" "ac_cv_func_strtoll" if test "x$ac_cv_func_strtoll" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STRTOLL 1 _ACEOF fi done ac_fn_c_check_func "$LINENO" "atoll" "ac_cv_func_atoll" if test "x$ac_cv_func_atoll" = xyes; then : $as_echo "#define HAVE_ATOLL 1" >>confdefs.h else case " $LIBOBJS " in *" atoll.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS atoll.$ac_objext" ;; esac fi for ac_func in vasprintf do : ac_fn_c_check_func "$LINENO" "vasprintf" "ac_cv_func_vasprintf" if test "x$ac_cv_func_vasprintf" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_VASPRINTF 1 _ACEOF fi done ac_fn_c_check_func "$LINENO" "asprintf" "ac_cv_func_asprintf" if test "x$ac_cv_func_asprintf" = xyes; then : $as_echo "#define HAVE_ASPRINTF 1" >>confdefs.h else case " $LIBOBJS " in *" asprintf.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS asprintf.$ac_objext" ;; esac fi ac_docs="YES" # Check whether --enable-docs was given. if test "${enable_docs+set}" = set; then : enableval=$enable_docs; if test "$enable_docs" = "no"; then ac_docs="NO" fi fi if test "$ac_docs" = "YES"; then docs_subdirs="doc" else docs_subdirs="" fi if test "x$docs_subdirs" != "x"; then BUILDDOCS_TRUE= BUILDDOCS_FALSE='#' else BUILDDOCS_TRUE='#' BUILDDOCS_FALSE= fi ac_libdbi="YES" # Check whether --enable-libdbi was given. if test "${enable_libdbi+set}" = set; then : enableval=$enable_libdbi; if test "$enable_libdbi" = "no"; then ac_libdbi="NO" fi fi if test "$ac_libdbi" = "YES"; then LIBADD_LIBDBI="-no-undefined -ldbi" LIBDBI_TEST="test_libdbi.sh" else LIBADD_LIBDBI="-no-undefined" fi # Check whether --with-dbi_dbdir was given. if test "${with_dbi_dbdir+set}" = set; then : withval=$with_dbi_dbdir; dbi_dbdir=$withval else dbi_dbdir="\$(localstatedir)/lib/libdbi" fi ac_dbi_libdir="no" # Check whether --with-dbi-libdir was given. if test "${with_dbi_libdir+set}" = set; then : withval=$with_dbi_libdir; ac_dbi_libdir="$withval" fi if test "$ac_libdbi" = "YES"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libdbi library" >&5 $as_echo_n "checking for libdbi library... " >&6; } if test "$ac_dbi_libdir" = "no"; then dbi_libdirs="/usr/lib /usr/local/lib /sw/lib" libdbi_libs="libdbi.so libdbi.a" ac_dbi_libdir=no for i in $dbi_libdirs; do for j in $libdbi_libs; do if test -r "$i/$j"; then ac_dbi_libdir=$i break 2 fi done done if test "$ac_dbi_libdir" = "no"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } as_fn_error $? "Invalid libdbi directory - include files not found." "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes: libs in $ac_dbi_libdir" >&5 $as_echo "yes: libs in $ac_dbi_libdir" >&6; } LIBADD_LIBDBI="$LIBADD_LIBDBI -L$ac_dbi_libdir" LIBDBI_LIBDIR="$ac_dbi_libdir" fi for ac_header in string.h strings.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done ac_config_files="$ac_config_files libdbi-drivers.spec Makefile doc/Makefile doc/include/Makefile drivers/Makefile drivers/mysql/Makefile drivers/pgsql/Makefile drivers/sqlite/Makefile drivers/sqlite3/Makefile drivers/msql/Makefile drivers/oracle/Makefile drivers/firebird/Makefile drivers/freetds/Makefile drivers/ingres/Makefile drivers/db2/Makefile tests/Makefile tests/cgreen/Makefile tests/test_dbi.cfg tests/plugin_settings.sh" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 $as_echo_n "checking that generated files are newer than configure... " >&6; } if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 $as_echo "done" >&6; } if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_DBI_TRUE}" && test -z "${HAVE_DBI_FALSE}"; then as_fn_error $? "conditional \"HAVE_DBI\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_MYSQL_TRUE}" && test -z "${HAVE_MYSQL_FALSE}"; then as_fn_error $? "conditional \"HAVE_MYSQL\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_MYSQL_TRUE}" && test -z "${HAVE_MYSQL_FALSE}"; then as_fn_error $? "conditional \"HAVE_MYSQL\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_PGSQL_TRUE}" && test -z "${HAVE_PGSQL_FALSE}"; then as_fn_error $? "conditional \"HAVE_PGSQL\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_PGSQL_TRUE}" && test -z "${HAVE_PGSQL_FALSE}"; then as_fn_error $? "conditional \"HAVE_PGSQL\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_SQLITE_TRUE}" && test -z "${HAVE_SQLITE_FALSE}"; then as_fn_error $? "conditional \"HAVE_SQLITE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_SQLITE_TRUE}" && test -z "${HAVE_SQLITE_FALSE}"; then as_fn_error $? "conditional \"HAVE_SQLITE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_SQLITE3_TRUE}" && test -z "${HAVE_SQLITE3_FALSE}"; then as_fn_error $? "conditional \"HAVE_SQLITE3\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_SQLITE3_TRUE}" && test -z "${HAVE_SQLITE3_FALSE}"; then as_fn_error $? "conditional \"HAVE_SQLITE3\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_MSQL_TRUE}" && test -z "${HAVE_MSQL_FALSE}"; then as_fn_error $? "conditional \"HAVE_MSQL\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_MSQL_TRUE}" && test -z "${HAVE_MSQL_FALSE}"; then as_fn_error $? "conditional \"HAVE_MSQL\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_ORACLE_TRUE}" && test -z "${HAVE_ORACLE_FALSE}"; then as_fn_error $? "conditional \"HAVE_ORACLE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_ORACLE_TRUE}" && test -z "${HAVE_ORACLE_FALSE}"; then as_fn_error $? "conditional \"HAVE_ORACLE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_FIREBIRD_INTERBASE_TRUE}" && test -z "${HAVE_FIREBIRD_INTERBASE_FALSE}"; then as_fn_error $? "conditional \"HAVE_FIREBIRD_INTERBASE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_FIREBIRD_INTERBASE_TRUE}" && test -z "${HAVE_FIREBIRD_INTERBASE_FALSE}"; then as_fn_error $? "conditional \"HAVE_FIREBIRD_INTERBASE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_FREETDS_TRUE}" && test -z "${HAVE_FREETDS_FALSE}"; then as_fn_error $? "conditional \"HAVE_FREETDS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_FREETDS_TRUE}" && test -z "${HAVE_FREETDS_FALSE}"; then as_fn_error $? "conditional \"HAVE_FREETDS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_INGRES_TRUE}" && test -z "${HAVE_INGRES_FALSE}"; then as_fn_error $? "conditional \"HAVE_INGRES\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_INGRES_TRUE}" && test -z "${HAVE_INGRES_FALSE}"; then as_fn_error $? "conditional \"HAVE_INGRES\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_DB2_TRUE}" && test -z "${HAVE_DB2_FALSE}"; then as_fn_error $? "conditional \"HAVE_DB2\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_DB2_TRUE}" && test -z "${HAVE_DB2_FALSE}"; then as_fn_error $? "conditional \"HAVE_DB2\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${BUILDDOCS_TRUE}" && test -z "${BUILDDOCS_FALSE}"; then as_fn_error $? "conditional \"BUILDDOCS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do 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 as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by $as_me, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to the package provider." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ config.status configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" # 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 sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' AS='`$ECHO "$AS" | $SED "$delay_single_quote_subst"`' DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`' Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`' GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`' EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`' FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`' SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`' macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`' pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`' enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`' PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`' host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`' host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`' host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`' build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`' build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`' build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`' NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`' LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`' max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`' ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`' exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`' lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`' lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`' lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`' lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`' lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`' reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`' want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`' sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`' AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`' STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`' old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`' lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`' CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`' CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`' compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`' lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`' objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`' need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`' MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`' DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`' NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`' LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`' OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`' OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`' libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`' shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`' extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`' enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`' export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`' whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`' compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`' old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`' archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`' module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`' module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`' with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`' allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`' no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`' hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`' hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`' hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`' hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`' hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`' hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`' hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`' inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`' link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`' always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`' export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`' exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`' include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`' prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`' postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`' file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`' variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`' need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`' need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`' version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`' runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`' libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`' library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`' soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`' install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`' postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`' postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`' finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' sys_lib_dlsearch_path_spec='`$ECHO "$sys_lib_dlsearch_path_spec" | $SED "$delay_single_quote_subst"`' hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`' enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`' enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`' old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`' striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`' LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } # Quote evaled strings. for var in AS \ DLLTOOL \ OBJDUMP \ SED \ GREP \ EGREP \ FGREP \ SHELL \ ECHO \ LD \ PATH_SEPARATOR \ NM \ LN_S \ lt_SP2NL \ lt_NL2SP \ reload_flag \ deplibs_check_method \ file_magic_cmd \ file_magic_glob \ want_nocaseglob \ sharedlib_from_linklib_cmd \ AR \ AR_FLAGS \ archiver_list_spec \ STRIP \ RANLIB \ CC \ CFLAGS \ compiler \ lt_cv_sys_global_symbol_pipe \ lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ nm_file_list_spec \ lt_prog_compiler_no_builtin_flag \ lt_prog_compiler_pic \ lt_prog_compiler_wl \ lt_prog_compiler_static \ lt_cv_prog_compiler_c_o \ need_locks \ MANIFEST_TOOL \ DSYMUTIL \ NMEDIT \ LIPO \ OTOOL \ OTOOL64 \ shrext_cmds \ export_dynamic_flag_spec \ whole_archive_flag_spec \ compiler_needs_object \ with_gnu_ld \ allow_undefined_flag \ no_undefined_flag \ hardcode_libdir_flag_spec \ hardcode_libdir_separator \ exclude_expsyms \ include_expsyms \ file_list_spec \ variables_saved_for_relink \ libname_spec \ library_names_spec \ soname_spec \ install_override_mode \ finish_eval \ old_striplib \ striplib; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in reload_cmds \ old_postinstall_cmds \ old_postuninstall_cmds \ old_archive_cmds \ extract_expsyms_cmds \ old_archive_from_new_cmds \ old_archive_from_expsyms_cmds \ archive_cmds \ archive_expsym_cmds \ module_cmds \ module_expsym_cmds \ export_symbols_cmds \ prelink_cmds \ postlink_cmds \ postinstall_cmds \ postuninstall_cmds \ finish_cmds \ sys_lib_search_path_spec \ sys_lib_dlsearch_path_spec; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done ac_aux_dir='$ac_aux_dir' xsi_shell='$xsi_shell' lt_shell_append='$lt_shell_append' # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi PACKAGE='$PACKAGE' VERSION='$VERSION' TIMESTAMP='$TIMESTAMP' RM='$RM' ofile='$ofile' _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; "libdbi-drivers.spec") CONFIG_FILES="$CONFIG_FILES libdbi-drivers.spec" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; "doc/include/Makefile") CONFIG_FILES="$CONFIG_FILES doc/include/Makefile" ;; "drivers/Makefile") CONFIG_FILES="$CONFIG_FILES drivers/Makefile" ;; "drivers/mysql/Makefile") CONFIG_FILES="$CONFIG_FILES drivers/mysql/Makefile" ;; "drivers/pgsql/Makefile") CONFIG_FILES="$CONFIG_FILES drivers/pgsql/Makefile" ;; "drivers/sqlite/Makefile") CONFIG_FILES="$CONFIG_FILES drivers/sqlite/Makefile" ;; "drivers/sqlite3/Makefile") CONFIG_FILES="$CONFIG_FILES drivers/sqlite3/Makefile" ;; "drivers/msql/Makefile") CONFIG_FILES="$CONFIG_FILES drivers/msql/Makefile" ;; "drivers/oracle/Makefile") CONFIG_FILES="$CONFIG_FILES drivers/oracle/Makefile" ;; "drivers/firebird/Makefile") CONFIG_FILES="$CONFIG_FILES drivers/firebird/Makefile" ;; "drivers/freetds/Makefile") CONFIG_FILES="$CONFIG_FILES drivers/freetds/Makefile" ;; "drivers/ingres/Makefile") CONFIG_FILES="$CONFIG_FILES drivers/ingres/Makefile" ;; "drivers/db2/Makefile") CONFIG_FILES="$CONFIG_FILES drivers/db2/Makefile" ;; "tests/Makefile") CONFIG_FILES="$CONFIG_FILES tests/Makefile" ;; "tests/cgreen/Makefile") CONFIG_FILES="$CONFIG_FILES tests/cgreen/Makefile" ;; "tests/test_dbi.cfg") CONFIG_FILES="$CONFIG_FILES tests/test_dbi.cfg" ;; "tests/plugin_settings.sh") CONFIG_FILES="$CONFIG_FILES tests/plugin_settings.sh" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Autoconf 2.62 quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named 'Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running 'make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir=$dirpart/$fdir; as_fn_mkdir_p # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ;; "libtool":C) # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi cfgfile="${ofile}T" trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is part of GNU Libtool. # # GNU Libtool 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. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool 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 GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, or # obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # The names of the tagged configurations supported by this script. available_tags="" # ### BEGIN LIBTOOL CONFIG # Assembler program. AS=$lt_AS # DLL creation program. DLLTOOL=$lt_DLLTOOL # Object dumper program. OBJDUMP=$lt_OBJDUMP # A sed program that does not truncate output. SED=$lt_SED # Sed that helps us avoid accidentally triggering echo(1) options like -n. Xsed="\$SED -e 1s/^X//" # A grep program that handles long lines. GREP=$lt_GREP # An ERE matcher. EGREP=$lt_EGREP # A literal string matcher. FGREP=$lt_FGREP # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # An echo program that protects backslashes. ECHO=$lt_ECHO # Which release of libtool.m4 was used? macro_version=$macro_version macro_revision=$macro_revision # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # What type of objects to build. pic_mode=$pic_mode # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # The PATH separator for the build system. PATH_SEPARATOR=$lt_PATH_SEPARATOR # The host system. host_alias=$host_alias host=$host host_os=$host_os # The build system. build_alias=$build_alias build=$build build_os=$build_os # A BSD- or MS-compatible name lister. NM=$lt_NM # Whether we need soft or hard links. LN_S=$lt_LN_S # What is the maximum length of a command? max_cmd_len=$max_cmd_len # Object file suffix (normally "o"). objext=$ac_objext # Executable file suffix (normally ""). exeext=$exeext # whether the shell understands "unset". lt_unset=$lt_unset # turn spaces into newlines. SP2NL=$lt_lt_SP2NL # turn newlines into spaces. NL2SP=$lt_lt_NL2SP # convert \$build file names to \$host format. to_host_file_cmd=$lt_cv_to_host_file_cmd # convert \$build files to toolchain format. to_tool_file_cmd=$lt_cv_to_tool_file_cmd # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method = "file_magic". file_magic_cmd=$lt_file_magic_cmd # How to find potential files when deplibs_check_method = "file_magic". file_magic_glob=$lt_file_magic_glob # Find potential files using nocaseglob when deplibs_check_method = "file_magic". want_nocaseglob=$lt_want_nocaseglob # Command to associate shared and link libraries. sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd # The archiver. AR=$lt_AR # Flags to create an archive. AR_FLAGS=$lt_AR_FLAGS # How to feed a file listing to the archiver. archiver_list_spec=$lt_archiver_list_spec # A symbol stripping program. STRIP=$lt_STRIP # Commands used to install an old-style archive. RANLIB=$lt_RANLIB old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Whether to use a lock for old archive extraction. lock_old_archive_extraction=$lock_old_archive_extraction # A C compiler. LTCC=$lt_CC # LTCC compiler flags. LTCFLAGS=$lt_CFLAGS # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration. global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair. global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # Transform the output of nm in a C name address pair when lib prefix is needed. global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix # Specify filename containing input files for \$NM. nm_file_list_spec=$lt_nm_file_list_spec # The root where to search for dependent libraries,and in which our libraries should be installed. lt_sysroot=$lt_sysroot # The name of the directory that contains temporary libtool files. objdir=$objdir # Used to examine libraries when file_magic_cmd begins with "file". MAGIC_CMD=$MAGIC_CMD # Must we lock files when doing compilation? need_locks=$lt_need_locks # Manifest tool. MANIFEST_TOOL=$lt_MANIFEST_TOOL # Tool to manipulate archived DWARF debug symbol files on Mac OS X. DSYMUTIL=$lt_DSYMUTIL # Tool to change global to local symbols on Mac OS X. NMEDIT=$lt_NMEDIT # Tool to manipulate fat objects and archives on Mac OS X. LIPO=$lt_LIPO # ldd/readelf like tool for Mach-O binaries on Mac OS X. OTOOL=$lt_OTOOL # ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. OTOOL64=$lt_OTOOL64 # Old archive suffix (normally "a"). libext=$libext # Shared library suffix (normally ".so"). shrext_cmds=$lt_shrext_cmds # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Variables whose values should be saved in libtool wrapper scripts and # restored at link time. variables_saved_for_relink=$lt_variables_saved_for_relink # Do we need the "lib" prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Library versioning type. version_type=$version_type # Shared library runtime path variable. runpath_var=$runpath_var # Shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # Format of library name prefix. libname_spec=$lt_libname_spec # 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=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Permission mode override for installation of shared libraries. install_override_mode=$lt_install_override_mode # Command to use after installation of a shared archive. postinstall_cmds=$lt_postinstall_cmds # Command to use after uninstallation of a shared archive. postuninstall_cmds=$lt_postuninstall_cmds # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # As "finish_cmds", except a single script fragment to be evaled but # not shown. finish_eval=$lt_finish_eval # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Compile-time system search path for libraries. sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries. sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # The linker used to build libraries. LD=$lt_LD # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds # A language specific compiler. CC=$lt_compiler # Is the compiler the GNU compiler? with_gcc=$GCC # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds archive_expsym_cmds=$lt_archive_expsym_cmds # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds module_expsym_cmds=$lt_module_expsym_cmds # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \${shlibpath_var} if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var # 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=$hardcode_automatic # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms # Symbols that must always be exported. include_expsyms=$lt_include_expsyms # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds # Commands necessary for finishing linking programs. postlink_cmds=$lt_postlink_cmds # Specify filename containing input files. file_list_spec=$lt_file_list_spec # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action # ### END LIBTOOL CONFIG _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac ltmain="$ac_aux_dir/ltmain.sh" # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) if test x"$xsi_shell" = xyes; then sed -e '/^func_dirname ()$/,/^} # func_dirname /c\ func_dirname ()\ {\ \ case ${1} in\ \ */*) func_dirname_result="${1%/*}${2}" ;;\ \ * ) func_dirname_result="${3}" ;;\ \ esac\ } # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_basename ()$/,/^} # func_basename /c\ func_basename ()\ {\ \ func_basename_result="${1##*/}"\ } # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\ func_dirname_and_basename ()\ {\ \ case ${1} in\ \ */*) func_dirname_result="${1%/*}${2}" ;;\ \ * ) func_dirname_result="${3}" ;;\ \ esac\ \ func_basename_result="${1##*/}"\ } # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_stripname ()$/,/^} # func_stripname /c\ func_stripname ()\ {\ \ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\ \ # positional parameters, so assign one to ordinary parameter first.\ \ func_stripname_result=${3}\ \ func_stripname_result=${func_stripname_result#"${1}"}\ \ func_stripname_result=${func_stripname_result%"${2}"}\ } # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\ func_split_long_opt ()\ {\ \ func_split_long_opt_name=${1%%=*}\ \ func_split_long_opt_arg=${1#*=}\ } # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\ func_split_short_opt ()\ {\ \ func_split_short_opt_arg=${1#??}\ \ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\ } # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\ func_lo2o ()\ {\ \ case ${1} in\ \ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\ \ *) func_lo2o_result=${1} ;;\ \ esac\ } # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_xform ()$/,/^} # func_xform /c\ func_xform ()\ {\ func_xform_result=${1%.*}.lo\ } # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_arith ()$/,/^} # func_arith /c\ func_arith ()\ {\ func_arith_result=$(( $* ))\ } # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_len ()$/,/^} # func_len /c\ func_len ()\ {\ func_len_result=${#1}\ } # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$lt_shell_append" = xyes; then sed -e '/^func_append ()$/,/^} # func_append /c\ func_append ()\ {\ eval "${1}+=\\${2}"\ } # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\ func_append_quoted ()\ {\ \ func_quote_for_eval "${2}"\ \ eval "${1}+=\\\\ \\$func_quote_for_eval_result"\ } # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: # Save a `func_append' function call where possible by direct use of '+=' sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: else # Save a `func_append' function call even when '+=' is not available sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$_lt_function_replace_fail" = x":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5 $as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;} fi mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi if test "$ac_mysql" = "NO" && test "$ac_pgsql" = "NO" && test "$ac_sqlite" = "NO" \ && test "$ac_sqlite3" = "NO" && test "$ac_msql" = "NO" && test "$ac_oracle" = "NO" \ && test "$ac_firebird" = "NO" && test "$ac_freetds" = "NO" && test "$ac_ingres" = "NO" \ && test "$ac_db2" = "NO"; then echo echo "***WARNING***" echo "You did not request any drivers to be built. This is most likely not what you want." echo "Please run ./configure --help for a list of switches and select at least one driver." fi libdbi-drivers-0.9.0/AUTHORS000644 001750 001750 00000002655 11557236067 016363 0ustar00markusmarkus000000 000000 The following people have been involved in libdbi-drivers development: Project admin: * Markus Hoenicka Driver developers/maintainers: * Firebird/Interbase developed by Christian M. Stamgren * FreeTDS developed by Vadym Kononenko * mSQL developed by Christian M. Stamgren * MySQL developed by Mark Tobenkin / maintained by Markus Hoenicka * Oracle developed by Christian M. Stamgren maintained by Ashish Ranjan * PostgreSQL developed by David A. Parker maintained by Markus Hoenicka * SQLite developed by Markus Hoenicka * SQLite3 developed by Markus Hoenicka * Ingres 2006 developed by Toby Thain Those who helped one way or another: * Peter O'Gorman - configure/Makefile/libtool fixes, OSX guru * Emmanuel Courreges - improved error code handling of the pgsql driver * Clint Byrum - test scripts * Thomas Goirand - test scripts * Jason S. Beck - improved spec file $Id: AUTHORS,v 1.14 2011/05/01 10:55:51 mhoenicka Exp $ libdbi-drivers-0.9.0/COPYING000755 001750 001750 00000063644 10726112061 016336 0ustar00markusmarkus000000 000000 GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 Copyright (C) 1991, 1999 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. ^L Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. ^L GNU LESSER GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. ^L Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. ^L 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. ^L 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. ^L 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. ^L 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS ^L How to Apply These Terms to Your New Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. , 1 April 1990 Ty Coon, President of Vice That's all there is to it! libdbi-drivers-0.9.0/ChangeLog000644 001750 001750 00000021215 12117473253 017047 0ustar00markusmarkus000000 000000 2013-03-12 01:26 mhoenicka * NEWS (1.8): updated for 0.9.0 2013-03-12 00:49 mhoenicka * README (1.12), README.win32 (1.7), configure.in (1.54): final polish for 0.9.0 2013-02-28 00:16 mhoenicka * drivers/mysql/dbd_mysql.c (1.109): removed now irrelevant comment 2013-02-24 16:06 mhoenicka * tests/test_dbi.c (1.72): drop firebird tables using isql-fb instead of SQL commands 2013-02-24 00:27 mhoenicka * tests/test_dbi.c (1.71): added support for pgsql hex escaped strings; removed leftover crutch testing for Debian, this is now configured properly 2013-02-08 02:01 mhoenicka * drivers/pgsql/dbd_pgsql.c (1.69): boatload of fixes for dealing with binary data: added _unescape_hex_binary() and _digit_to_number() functions;dbd_quote_binary(): use PQescapeByteaConn() instead of PQescapeBytea(); _get_row_data(): properly decode hex-encoded binary data 2013-02-08 01:56 mhoenicka * drivers/pgsql/dbd_pgsql.c (1.68): rewrote dbd_get_engine_version() using PQserverVersion() 2013-02-08 01:54 mhoenicka * drivers/pgsql/dbd_pgsql.c (1.67): fixed SET vs. BEGIN typo in dbd_transaction_begin() 2013-01-27 02:28 mhoenicka * drivers/mysql/dbd_mysql.sgml (1.7): added comment about transactions and savepoints 2013-01-27 02:09 mhoenicka * tests/test_dbi.c (1.70): run test_dbi_conn_transaction_commit() and test_dbi_conn_transaction_rollback() only if the driver supports transactions; implemented test_dbi_conn_rollback_to_savepoint() and test_dbi_conn_release_savepoint() 2013-01-25 01:54 mhoenicka * tests/test_dbi.c (1.69): first shot at transaction tests. NB currently fails with MySQL 2013-01-09 22:30 mhoenicka * drivers/: db2/dbd_db2.c (1.3), firebird/dbd_firebird.c (1.32), freetds/dbd_freetds.c (1.9), ingres/dbd_ingres.c (1.28), msql/dbd_msql.c (1.23), oracle/dbd_oracle.c (1.29), sqlite/dbd_sqlite.c (1.55): adapted dbd_goto_row() to new prototype in libdbi 2013-01-09 00:55 mhoenicka * drivers/: mysql/dbd_mysql.c (1.108), pgsql/dbd_pgsql.c (1.66), sqlite3/dbd_sqlite3.c (1.49): updated dbd_goto_row() to include new currowidx parameter 2012-12-03 01:16 mhoenicka * drivers/: db2/dbd_db2.c (1.2), firebird/dbd_firebird.c (1.31), freetds/dbd_freetds.c (1.8), ingres/dbd_ingres.c (1.27), msql/dbd_msql.c (1.22), mysql/dbd_mysql.c (1.107), oracle/dbd_oracle.c (1.28), pgsql/dbd_pgsql.c (1.65), sqlite/dbd_sqlite.c (1.54), sqlite3/dbd_sqlite3.c (1.48): added transaction and savepoint functions 2012-07-03 18:31 ecourreges * acinclude.m4 (1.29.2.1), configure.in (1.53.2.1), drivers/Makefile.am (1.9.6.1), tests/test_cassandra.sh (1.1.2.1), tests/test_dbi.c (1.68.2.1): Initial commit for Cassandra with CQL via Thrift Unit tests OK 2011-11-15 17:51 mhoenicka * tests/test_dbi.c (1.68): defined FIREBIRD_ISQL even if no firebird is installed; fixed linuxism related to FreeBSD malloc options 2011-09-22 00:28 mhoenicka * drivers/sqlite3/dbd_sqlite3.c (1.47): find_result_field_types(): fixed two memory leaks; added freeTables() 2011-09-21 22:31 mhoenicka * drivers/mysql/dbd_mysql.c (1.106): dbd_connect(): plugged memory leak 2011-05-01 12:55 mhoenicka * AUTHORS (1.14): added Jason Beck 2011-05-01 12:46 mhoenicka * Makefile.am (1.11), configure.in (1.53), libdbi-drivers.spec.in (1.1), libdbi.spec.in (1.4): replaced libdbi.spec.in by libdbi-drivers.spec.in, using Jason's new version 2011-03-02 22:14 mhoenicka * drivers/: mysql/dbd_mysql.c (1.105), pgsql/dbd_pgsql.c (1.64): fill in default db engine ports if an app doesn't specify one 2011-02-20 14:51 mhoenicka * drivers/sqlite3/dbd_sqlite3.c (1.46): Vikram's patch for the SQL statement parser 2011-02-20 13:50 mhoenicka * drivers/sqlite3/dbd_sqlite3.c (1.45): freyther's patch making local functions static 2011-02-20 12:15 mhoenicka * configure.in (1.52), tests/Makefile.am (1.11), tests/plugin_settings.sh.in (1.1), tests/test_dbi_dlopen.c (1.1), tests/test_dbi_plugin.c (1.1), tests/test_libdbi.sh (1.1): Clint's patch for testing drivers loaded from dlopened modules 2011-02-20 00:57 mhoenicka * configure.in (1.51): removed platform-specific optimizations 2011-02-20 00:32 mhoenicka * acinclude.m4 (1.29), tests/Makefile.am (1.10), tests/test_dbi.c (1.67): find name of Firebird client via configure 2011-02-19 22:40 mhoenicka * tests/test_dbi.c (1.66): create_database(): provide collation and locale for pgsql, fixes bug #3042565 2011-02-19 21:11 mhoenicka * configure.in (1.50): quote AC_CHECK_HEADERS argument to make Solaris happy, fixes bug #3161890 2011-02-19 20:57 mhoenicka * drivers/mysql/dbd_mysql.c (1.104): include mysql.h rather than mysql/mysql.h, fixes bug #3161885 2011-02-19 13:59 mhoenicka * drivers/mysql/dbd_mysql.c (1.103): dbd_connect(): now uses string option of port in preference to the numeric option; removed commented-out debug calls 2010-12-08 23:57 mhoenicka * drivers/: sqlite/dbd_sqlite.c (1.53), sqlite3/dbd_sqlite3.c (1.44): fixed memory leak in list_tables(), see Bugs item #3131747 2010-09-29 23:22 mhoenicka * tests/cgreen/Makefile.am (1.3): added cgreen subdirs and support files to EXTRA_DIST 2010-09-26 21:55 mhoenicka * INSTALL (1.2): added hints on how to install drivers and docs separately 2010-09-26 21:55 mhoenicka * drivers/: firebird/Makefile.am (1.10), sqlite/Makefile.am (1.19), sqlite3/Makefile.am (1.12): treat data directory as exec rather than data to allow installing docs by make install-data 2010-09-26 00:21 mhoenicka * drivers/: db2/Makefile.am (1.3), firebird/Makefile.am (1.9), freetds/Makefile.am (1.7), ingres/Makefile.am (1.4), msql/Makefile.am (1.15), mysql/Makefile.am (1.18), oracle/Makefile.am (1.9), pgsql/Makefile.am (1.18), sqlite/Makefile.am (1.18), sqlite3/Makefile.am (1.11): fixed html doc install location 2010-09-21 23:12 mhoenicka * acinclude.m4 (1.28): Jans patch for linking the mysql driver properly to libmysqlclient 2010-09-21 22:56 mhoenicka * drivers/: sqlite/dbd_sqlite.c (1.52), sqlite3/dbd_sqlite3.c (1.43): Jans patch for fixing _i vs. _r typos 2010-09-20 10:23 mhoenicka * acinclude.m4 (1.27): Jans patch for fixing mysql vs. pgsql typos 2010-09-10 21:12 mhoenicka * tests/test_dbi.c (1.65): reverted name change of libdbi functions 2010-09-04 16:23 mhoenicka * acinclude.m4 (1.26), tests/Makefile.am (1.9): use build scripts to run automated tests 2010-09-04 16:22 mhoenicka * AUTHORS (1.13): added Thomas and Clint 2010-09-04 16:22 mhoenicka * tests/: test_mysql.sh (1.3), test_pgsql.sh (1.3): fixes for integrating the scripts into make check 2010-09-04 16:21 mhoenicka * tests/: test_db2.sh (1.1), test_firebird.sh (1.1), test_freetds.sh (1.1), test_ingres.sh (1.1), test_msql.sh (1.1), test_oracle.sh (1.1), test_sqlite.sh (1.1), test_sqlite3.sh (1.1): added test scripts 2010-09-04 15:49 mhoenicka * tests/test_dbi.c (1.64): usage(): fixed typo 2010-09-04 13:45 mhoenicka * tests/test_mysql.sh (1.2): portability-related fixes 2010-09-04 01:28 mhoenicka * tests/test_pgsql.sh (1.2): fixes for FreeBSD and for PostgreSQL older than 8.4 2010-09-03 23:22 mhoenicka * tests/: test_mysql.sh (1.1), test_pgsql.sh (1.1): added test scripts as provided by Thomas Goirand 2010-09-03 23:05 mhoenicka * tests/test_dbi.c (1.63): removed obsolete prototype 2010-09-03 21:04 mhoenicka * tests/test_dbi.c (1.62): fixed create database calls for PostgreSQL 8.4 and later 2010-09-03 00:00 mhoenicka * debian/: changelog (1.2), control (1.3), copyright (1.2), files (1.2), libdbd-mysql.dirs (1.2), libdbd-mysql.doc-base (1.2), libdbd-mysql.docs (1.2), libdbd-mysql.files (1.2), libdbd-mysql.postinst.debhelper (1.2), libdbd-mysql.prerm.debhelper (1.2), libdbd-mysql.substvars (1.2), libdbd-pgsql.dirs (1.2), libdbd-pgsql.doc-base (1.2), libdbd-pgsql.docs (1.2), libdbd-pgsql.files (1.2), libdbd-pgsql.postinst.debhelper (1.2), libdbd-pgsql.prerm.debhelper (1.2), libdbd-pgsql.substvars (1.2), libdbd-sqlite.dirs (1.2), libdbd-sqlite.doc-base (1.2), libdbd-sqlite.docs (1.2), libdbd-sqlite.files (1.2), libdbd-sqlite.postinst.debhelper (1.2), libdbd-sqlite.prerm.debhelper (1.2), libdbd-sqlite.substvars (1.2), rules (1.2): removed obsolete /debian directory and files therein 2010-09-02 23:46 mhoenicka * drivers/sqlite/dbd_sqlite.c (1.51), drivers/sqlite3/dbd_sqlite3.c (1.42), tests/test_dbi.c (1.61): changed instance-based function calls from _r to _i according to the new naming scheme in libdbi 0.9.0-pre2 2010-09-02 00:18 mhoenicka * acinclude.m4 (1.25): added enable-mysql-threadsafe option to link against libmysqlclient_r libdbi-drivers-0.9.0/INSTALL000644 001750 001750 00000017547 11447722516 016347 0ustar00markusmarkus000000 000000 Installation ============ In a nutshell: 1. To install everything, run: ./configure make make install 2. To install just the prebuilt documentation, run: make install-data 3. To install just the drivers, run: make install-exec These are generic installation instructions. The `configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a `Makefile' in each directory of the package. It may also create one or more `.h' files containing system-dependent definitions. Finally, it creates a shell script `config.status' that you can run in the future to recreate the current configuration, a file `config.cache' that saves the results of its tests to speed up reconfiguring, and a file `config.log' containing compiler output (useful mainly for debugging `configure'). If you need to do unusual things to compile the package, please try to figure out how `configure' could check whether to do them, and mail diffs or instructions to the address given in the `README' so they can be considered for the next release. If at some point `config.cache' contains results you don't want to keep, you may remove or edit it. The file `configure.in' is used to create `configure' by a program called `autoconf'. You only need `configure.in' if you want to change it or regenerate `configure' using a newer version of `autoconf'. The simplest way to compile this package is: 1. `cd' to the directory containing the package's source code and type `./configure' to configure the package for your system. If you're using `csh' on an old version of System V, you might need to type `sh ./configure' instead to prevent `csh' from trying to execute `configure' itself. Running `configure' takes awhile. While running, it prints some messages telling which features it is checking for. 2. Type `make' to compile the package. 3. Optionally, type `make check' to run any self-tests that come with the package. 4. Type `make install' to install the programs and any data files and documentation. 5. You can remove the program binaries and object files from the source code directory by typing `make clean'. To also remove the files that `configure' created (so you can compile the package for a different kind of computer), type `make distclean'. There is also a `make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the `configure' script does not know about. You can give `configure' initial values for variables by setting them in the environment. Using a Bourne-compatible shell, you can do that on the command line like this: CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure Or on systems that have the `env' program, you can do it like this: env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you must use a version of `make' that supports the `VPATH' variable, such as GNU `make'. `cd' to the directory where you want the object files and executables to go and run the `configure' script. `configure' automatically checks for the source code in the directory that `configure' is in and in `..'. If you have to use a `make' that does not supports the `VPATH' variable, you have to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use `make distclean' before reconfiguring for another architecture. Installation Names ================== By default, `make install' will install the package's files in `/usr/local/bin', `/usr/local/man', etc. You can specify an installation prefix other than `/usr/local' by giving `configure' the option `--prefix=PATH'. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you give `configure' the option `--exec-prefix=PATH', the package will use PATH as the prefix for installing programs and libraries. Documentation and other data files will still use the regular prefix. In addition, if you use an unusual directory layout you can give options like `--bindir=PATH' to specify different values for particular kinds of files. Run `configure --help' for a list of the directories you can set and what kinds of files go in them. If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving `configure' the option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. Optional Features ================= Some packages pay attention to `--enable-FEATURE' options to `configure', where FEATURE indicates an optional part of the package. They may also pay attention to `--with-PACKAGE' options, where PACKAGE is something like `gnu-as' or `x' (for the X Window System). The `README' should mention any `--enable-' and `--with-' options that the package recognizes. For packages that use the X Window System, `configure' can usually find the X include and library files automatically, but if it doesn't, you can use the `configure' options `--x-includes=DIR' and `--x-libraries=DIR' to specify their locations. Specifying the System Type ========================== There may be some features `configure' can not figure out automatically, but needs to determine by the type of host the package will run on. Usually `configure' can figure that out, but if it prints a message saying it can not guess the host type, give it the `--host=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name with three fields: CPU-COMPANY-SYSTEM See the file `config.sub' for the possible values of each field. If `config.sub' isn't included in this package, then this package doesn't need to know the host type. If you are building compiler tools for cross-compiling, you can also use the `--target=TYPE' option to select the type of system they will produce code for and the `--build=TYPE' option to select the type of system on which you are compiling the package. Sharing Defaults ================ If you want to set default values for `configure' scripts to share, you can create a site shell script called `config.site' that gives default values for variables like `CC', `cache_file', and `prefix'. `configure' looks for `PREFIX/share/config.site' if it exists, then `PREFIX/etc/config.site' if it exists. Or, you can set the `CONFIG_SITE' environment variable to the location of the site script. A warning: not all `configure' scripts look for a site script. Operation Controls ================== `configure' recognizes the following options to control how it operates. `--cache-file=FILE' Use and save the results of the tests in FILE instead of `./config.cache'. Set FILE to `/dev/null' to disable caching, for debugging `configure'. `--help' Print a summary of the options to `configure', and exit. `--quiet' `--silent' `-q' Do not print messages saying which checks are being made. To suppress all normal output, redirect it to `/dev/null' (any error messages will still be shown). `--srcdir=DIR' Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. `--version' Print the version of Autoconf used to generate the `configure' script, and exit. `configure' also accepts some other, not widely useful, options. libdbi-drivers-0.9.0/NEWS000644 001750 001750 00000011533 12117473035 015774 0ustar00markusmarkus000000 000000 libdbi-drivers NEWS file ======================== ______________________________________ 0.9.0 (the "Lightning Blue Eyes" release) - some of the drivers now export client library functions to the programmer via the dbi_driver_specific_function() interface - if necessary, the drivers now support libdbi instances - a segfault in the oracle driver caused by INSERT statements was fixed - the pgsql driver now supports features specific to PostgreSQL 9 and later - drivers now support transactions and savepoints if the underlying database engines do - additional libdbi hint about position in a result set allows tremendous speedup of sequential reads from MySQL result sets - various memory leaks were plugged - database specific test scripts allow tests without affecting existing database clusters - completely rewritten test kit increases coverage and improves error reporting __________________________________________ 0.8.3 (the "Shores of California" release) - major overhaul of the firebird driver. The driver is now linked to libfbembed.so instead of libfbclient.so. You can request a local connection (bypassing the server altogether) by using an empty hostname, or a local connection through the server by using "localhost" or the actual computer name as the hostname. - changed all driver code to LGPL, and all doc code to GFDL with no invariant sections as requested by several packagers - made linking drivers against libdbi the default. This behaviour can be switched off by --disable-libdbi, a reversal of the previous default - improved support for MySQL and PostgreSQL connection options - assorted fixes for MinGW compatibility - all drivers now implement the "safe_dlclose" driver capability to signal libdbi whether or not the driver can safely be unloaded from memory. _____________________________________ 0.8.2 (the "Payday in a Pub" release) - to avoid possible conflicts with database client libraries (think package names!) all driver libraries were renamed from libname.suffix to libdbdlibname.suffix. E.g. the MySQL shared library was renamed from mysql.so to libdbdmysql.so. Unless your package manager does this automatically, it is recommended to clean out old driver libraries from /usr/local/lib/dbd (or wherever they ended up). Remember that this change affects only the library names. The driver names (the ones your program uses to load particular drivers) did *not* change - assorted fixes in the oracle driver - the mysql driver now supports the BIT and NEWDECIMAL types introduced in MySQL 5.0.3 - added a new (experimental) Ingres 2006 driver - the "--disable-docs" configure switch now allows to build libdbi-drivers without having the sgml toolchain installed - plugged a few memory holes - fixed a segfault in the error message handling code of sqlite/sqlite3 - improved compatibility with older PostgreSQL versions - sqlite and sqlite3 now grok semicolons in query strings - you can now optionally link the drivers against libdbi by using the "--enable-libdbi" configure switch. This sounds weird at first, but it allows to load libdbi into a dlopen'ed module, like this: Parent => dl_open(module) => dl_open(libdbi) => dl_open(driver) Drivers compiled with this option should work ok in the regular context (your app linked against libdbi) as well. __________________________ 0.8.1 (the "Lost" release) Due to a lack of attention there was no release information added at the time of the 0.8.1 release. It is therefore entirely obscure what made us feel like wrapping up a new release, but rest assured that this code was better than before (if you really need to know, use the CVS logs or the CVS web interface). _____________________________________ 0.8.0 (the "Whatsername" release) - and then there were 7: sqlite3, firebird, and oracle were added. However, msql, oracle, and firebird are still experimental in this release and are likely to be broke. We'll do our best to ship working drivers with 0.8.1 - tons of internal fixes to work with libdbi 0.8.0 - the version numbering has changed. Starting with this release, the major and minor numbers ("0.8" in this release) denote the internal API version. Any 0.8.x libdbi-drivers release is guaranteed to work with any 0.8.x libdbi release. The patch level ("0" in the current release) denotes patches and minor changes that do not affect the internal API. _____________________________________ 0.7.0 (the "Pineapple Skunk" release) - the libdbi-drivers project now hosts 4 drivers: mysql and pgsql (formerly part of libdbi), as well as msql and sqlite. - fixed dynamic loading stuff to work properly on OSX - added/updated driver documentation - improved test program - assorted fixes in the drivers - sqlite driver now attempts to support all MySQL and PosgreSQL data types $Id: NEWS,v 1.8 2013/03/12 00:26:05 mhoenicka Exp $libdbi-drivers-0.9.0/TODO000644 001750 001750 00000000271 07646044161 015767 0ustar00markusmarkus000000 000000 $Id: TODO,v 1.3 2003/04/12 17:10:09 mhoenicka Exp $ - add and test support for more platforms - add drivers for all free database engines which are currently not yet supported libdbi-drivers-0.9.0/config.guess000555 001750 001750 00000122065 11717575636 017635 0ustar00markusmarkus000000 000000 #! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003 Free Software Foundation, Inc. timestamp='2003-07-02' # This file 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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. # Originally written by Per Bothner . # Please send patches to . Submit a context # diff and a properly formatted ChangeLog entry. # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and # exits with 0. Otherwise, it exits with 1. # # The plan is that this can be called by configure scripts if you # don't specify an explicit build system type. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 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." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit 0 ;; --version | -v ) echo "$version" ; exit 0 ;; --help | --h* | -h ) echo "$usage"; exit 0 ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d -q "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep __ELF__ >/dev/null then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit 0 ;; amiga:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; arc:OpenBSD:*:*) echo mipsel-unknown-openbsd${UNAME_RELEASE} exit 0 ;; hp300:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mac68k:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; macppc:OpenBSD:*:*) echo powerpc-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mvme68k:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mvme88k:OpenBSD:*:*) echo m88k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mvmeppc:OpenBSD:*:*) echo powerpc-unknown-openbsd${UNAME_RELEASE} exit 0 ;; pmax:OpenBSD:*:*) echo mipsel-unknown-openbsd${UNAME_RELEASE} exit 0 ;; sgi:OpenBSD:*:*) echo mipseb-unknown-openbsd${UNAME_RELEASE} exit 0 ;; sun3:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; wgrisc:OpenBSD:*:*) echo mipsel-unknown-openbsd${UNAME_RELEASE} exit 0 ;; *:OpenBSD:*:*) echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE} exit 0 ;; alpha:OSF1:*:*) if test $UNAME_RELEASE = "V4.0"; then UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` fi # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE="alpha" ;; "EV4.5 (21064)") UNAME_MACHINE="alpha" ;; "LCA4 (21066/21068)") UNAME_MACHINE="alpha" ;; "EV5 (21164)") UNAME_MACHINE="alphaev5" ;; "EV5.6 (21164A)") UNAME_MACHINE="alphaev56" ;; "EV5.6 (21164PC)") UNAME_MACHINE="alphapca56" ;; "EV5.7 (21164PC)") UNAME_MACHINE="alphapca57" ;; "EV6 (21264)") UNAME_MACHINE="alphaev6" ;; "EV6.7 (21264A)") UNAME_MACHINE="alphaev67" ;; "EV6.8CB (21264C)") UNAME_MACHINE="alphaev68" ;; "EV6.8AL (21264B)") UNAME_MACHINE="alphaev68" ;; "EV6.8CX (21264D)") UNAME_MACHINE="alphaev68" ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE="alphaev69" ;; "EV7 (21364)") UNAME_MACHINE="alphaev7" ;; "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` exit 0 ;; Alpha*:OpenVMS:*:*) echo alpha-hp-vms exit 0 ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit 0 ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit 0 ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit 0;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit 0 ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit 0 ;; *:OS/390:*:*) echo i370-ibm-openedition exit 0 ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit 0;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit 0;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit 0 ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit 0 ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit 0 ;; DRS?6000:UNIX_SV:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7 && exit 0 ;; esac ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; i86pc:SunOS:5.*:*) echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit 0 ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit 0 ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit 0 ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit 0 ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit 0 ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit 0 ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit 0 ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit 0 ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit 0 ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit 0 ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit 0 ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit 0 ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit 0 ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit 0 ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit 0 ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c \ && $dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \ && exit 0 echo mips-mips-riscos${UNAME_RELEASE} exit 0 ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit 0 ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit 0 ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit 0 ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit 0 ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit 0 ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit 0 ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit 0 ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit 0 ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit 0 ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit 0 ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit 0 ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit 0 ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit 0 ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit 0 ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit 0 ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0 echo rs6000-ibm-aix3.2.5 elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit 0 ;; *:AIX:*:[45]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit 0 ;; *:AIX:*:*) echo rs6000-ibm-aix exit 0 ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit 0 ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit 0 ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit 0 ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit 0 ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit 0 ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit 0 ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = "hppa2.0w" ] then # avoid double evaluation of $set_cc_for_build test -n "$CC_FOR_BUILD" || eval $set_cc_for_build if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E -) | grep __LP64__ >/dev/null then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit 0 ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit 0 ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0 echo unknown-hitachi-hiuxwe2 exit 0 ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit 0 ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit 0 ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit 0 ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit 0 ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit 0 ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit 0 ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit 0 ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit 0 ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit 0 ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit 0 ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit 0 ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit 0 ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; *:UNICOS/mp:*:*) echo nv1-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit 0 ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit 0 ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit 0 ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit 0 ;; *:FreeBSD:*:*|*:GNU/FreeBSD:*:*) # Determine whether the default compiler uses glibc. eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include #if __GLIBC__ >= 2 LIBC=gnu #else LIBC= #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=` # GNU/FreeBSD systems have a "k" prefix to indicate we are using # FreeBSD's kernel, but not the complete OS. case ${LIBC} in gnu) kernel_only='k' ;; esac echo ${UNAME_MACHINE}-unknown-${kernel_only}freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`${LIBC:+-$LIBC} exit 0 ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit 0 ;; i*:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit 0 ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit 0 ;; x86:Interix*:[34]*) echo i586-pc-interix${UNAME_RELEASE}|sed -e 's/\..*//' exit 0 ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit 0 ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit 0 ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit 0 ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit 0 ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; *:GNU:*:*) echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit 0 ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit 0 ;; arm*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; cris:Linux:*:*) echo cris-axis-linux-gnu exit 0 ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; mips:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips #undef mipsel #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mipsel #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0 ;; mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips64 #undef mips64el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mips64el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips64 #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0 ;; ppc:Linux:*:*) echo powerpc-unknown-linux-gnu exit 0 ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-gnu exit 0 ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} exit 0 ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-gnu ;; PA8*) echo hppa2.0-unknown-linux-gnu ;; *) echo hppa-unknown-linux-gnu ;; esac exit 0 ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-gnu exit 0 ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux exit 0 ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; x86_64:Linux:*:*) echo x86_64-unknown-linux-gnu exit 0 ;; i*86:Linux:*:*) # The BFD linker knows what the default object file format is, so # first see if it will tell us. cd to the root directory to prevent # problems with other programs or directories called `ld' in the path. # Set LC_ALL=C to ensure ld outputs messages in English. ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ | sed -ne '/supported targets:/!d s/[ ][ ]*/ /g s/.*supported targets: *// s/ .*// p'` case "$ld_supported_targets" in elf32-i386) TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" ;; a.out-i386-linux) echo "${UNAME_MACHINE}-pc-linux-gnuaout" exit 0 ;; coff-i386) echo "${UNAME_MACHINE}-pc-linux-gnucoff" exit 0 ;; "") # Either a pre-BFD a.out linker (linux-gnuoldld) or # one that does not give us useful --help. echo "${UNAME_MACHINE}-pc-linux-gnuoldld" exit 0 ;; esac # Determine whether the default compiler is a.out or elf eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include #ifdef __ELF__ # ifdef __GLIBC__ # if __GLIBC__ >= 2 LIBC=gnu # else LIBC=gnulibc1 # endif # else LIBC=gnulibc1 # endif #else #ifdef __INTEL_COMPILER LIBC=gnu #else LIBC=gnuaout #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=` test x"${LIBC}" != x && echo "${UNAME_MACHINE}-pc-linux-${LIBC}" && exit 0 test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0 ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit 0 ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit 0 ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit 0 ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit 0 ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit 0 ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit 0 ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit 0 ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit 0 ;; i*86:*:5:[78]*) case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit 0 ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit 0 ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i386. echo i386-pc-msdosdjgpp exit 0 ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit 0 ;; paragon:*:*:*) echo i860-intel-osf1 exit 0 ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit 0 ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit 0 ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit 0 ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit 0 ;; M68*:*:R3V[567]*:*) test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;; 3[34]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && echo i486-ncr-sysv4.3${OS_REL} && exit 0 /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && echo i486-ncr-sysv4 && exit 0 ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit 0 ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit 0 ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit 0 ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit 0 ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit 0 ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit 0 ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit 0 ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit 0 ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit 0 ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit 0 ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit 0 ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit 0 ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit 0 ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit 0 ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit 0 ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit 0 ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit 0 ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit 0 ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit 0 ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit 0 ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit 0 ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit 0 ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit 0 ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit 0 ;; *:Darwin:*:*) case `uname -p` in *86) UNAME_PROCESSOR=i686 ;; powerpc) UNAME_PROCESSOR=powerpc ;; esac echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit 0 ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit 0 ;; *:QNX:*:4*) echo i386-pc-qnx exit 0 ;; NSR-[DGKLNPTVW]:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit 0 ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit 0 ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit 0 ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit 0 ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit 0 ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit 0 ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit 0 ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit 0 ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit 0 ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit 0 ;; *:ITS:*:*) echo pdp10-unknown-its exit 0 ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit 0 ;; esac #echo '(No uname command or uname output not recognized.)' 1>&2 #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 eval $set_cc_for_build cat >$dummy.c < # include #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (__arm) && defined (__acorn) && defined (__unix) printf ("arm-acorn-riscix"); exit (0); #endif #if defined (hp300) && !defined (hpux) printf ("m68k-hp-bsd\n"); exit (0); #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) # if !defined (ultrix) # include # if defined (BSD) # if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); # else # if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); # else printf ("vax-dec-bsd\n"); exit (0); # endif # endif # else printf ("vax-dec-bsd\n"); exit (0); # endif # else printf ("vax-dec-ultrix\n"); exit (0); # endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && $dummy && exit 0 # Apollos put the system type in the environment. test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; } # Convex versions that predate uname can use getsysinfo(1) if [ -x /usr/convex/getsysinfo ] then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd exit 0 ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit 0 ;; c34*) echo c34-convex-bsd exit 0 ;; c38*) echo c38-convex-bsd exit 0 ;; c4*) echo c4-convex-bsd exit 0 ;; esac fi cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: libdbi-drivers-0.9.0/config.sub000555 001750 001750 00000073153 11717575636 017303 0ustar00markusmarkus000000 000000 #! /bin/sh # Configuration validation subroutine script. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003 Free Software Foundation, Inc. timestamp='2003-07-04' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software # can handle that machine. It does not imply ALL GNU software can. # # This file 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., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, 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. # Please send patches to . Submit a context # diff and a properly formatted ChangeLog entry. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 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." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit 0 ;; --version | -v ) echo "$version" ; exit 0 ;; --help | --h* | -h ) echo "$usage"; exit 0 ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit 0;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | kfreebsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis) os= basic_machine=$1 ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \ | c4x | clipper \ | d10v | d30v | dlx | dsp16xx \ | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | i370 | i860 | i960 | ia64 \ | ip2k \ | m32r | m68000 | m68k | m88k | mcore \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64vr | mips64vrel \ | mips64orion | mips64orionel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa64 | mipsisa64el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | msp430 \ | ns16k | ns32k \ | openrisc | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ | pyramid \ | sh | sh[1234] | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv9 | sparcv9b \ | strongarm \ | tahoe | thumb | tic4x | tic80 | tron \ | v850 | v850e \ | we32k \ | x86 | xscale | xstormy16 | xtensa \ | z8k) basic_machine=$basic_machine-unknown ;; m6811 | m68hc11 | m6812 | m68hc12) # Motorola 68HC11/12. basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | amd64-* | arc-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* \ | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ | clipper-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* \ | m32r-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | mcore-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64vr-* | mips64vrel-* \ | mips64orion-* | mips64orionel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipstx39-* | mipstx39el-* \ | msp430-* \ | none-* | np1-* | nv1-* | ns16k-* | ns32k-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ | pyramid-* \ | romp-* | rs6000-* \ | sh-* | sh[1234]-* | sh[23]e-* | sh[34]eb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \ | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \ | tahoe-* | thumb-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tron-* \ | v850-* | v850e-* | vax-* \ | we32k-* \ | x86-* | x86_64-* | xps100-* | xscale-* | xstormy16-* \ | xtensa-* \ | ymp-* \ | z8k-*) ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; c90) basic_machine=c90-cray os=-unicos ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; crds | unos) basic_machine=m68k-crds ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; # I'm not sure what "Sysv32" means. Should this be sysv3.2? i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; mingw32) basic_machine=i386-pc os=-mingw32 ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; mmix*) basic_machine=mmix-knuth os=-mmixware ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; msdos) basic_machine=i386-pc os=-msdos ;; mvs) basic_machine=i370-ibm os=-mvs ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; nv1) basic_machine=nv1-cray os=-unicosmp ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; or32 | or32-*) basic_machine=or32-unknown os=-coff ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc) basic_machine=powerpc-unknown ;; ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tic54x | c54x*) basic_machine=tic54x-unknown os=-coff ;; tic55x | c55x*) basic_machine=tic55x-unknown os=-coff ;; tic6x | c6x*) basic_machine=tic6x-unknown os=-coff ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xps | xps100) basic_machine=xps100-honeywell ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh3 | sh4 | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sh64) basic_machine=sh64-unknown ;; sparc | sparcv9 | sparcv9b) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -netbsd* | -openbsd* | -kfreebsd* | -freebsd* | -riscix* \ | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* \ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -kaos*) os=-kaos ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 # This also exists in the configure program, but was not the # default. # os=-sunos4 ;; m68*-cisco) os=-aout ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-ibm) os=-aix ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -ptx*) vendor=sequent ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit 0 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: libdbi-drivers-0.9.0/depcomp000555 001750 001750 00000044267 11717575636 016701 0ustar00markusmarkus000000 000000 #! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2009-04-28.21; # UTC # Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free # Software Foundation, Inc. # 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, 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, see . # 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. # Originally written by Alexandre Oliva . case $1 in '') echo "$0: No command. Try \`$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by `PROGRAMS ARGS'. object Object file output by `PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputing dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi cygpath_u="cygpath -u -f -" if test "$depmode" = msvcmsys; then # This is just like msvisualcpp but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u="sed s,\\\\\\\\,/,g" depmode=msvisualcpp fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. ## Unfortunately, FreeBSD c89 acceptance of flags depends upon ## the command line argument order; so add the flags where they ## appear in depend2.am. Note that the slowdown incurred here ## affects only configure: in makefiles, %FASTDEP% shortcuts this. for arg do case $arg in -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; *) set fnord "$@" "$arg" ;; esac shift # fnord shift # $arg done "$@" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ## The second -e expression handles DOS-style file names with drive letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the `deleted header file' problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. tr ' ' ' ' < "$tmpdepfile" | ## Some versions of gcc put a space before the `:'. On the theory ## that the space means something, we add a space to the output as ## well. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like `#:fec' to the end of the # dependency line. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ tr ' ' ' ' >> "$depfile" echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts `$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then tmpdepfile1=$dir$base.u tmpdepfile2=$base.u tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else tmpdepfile1=$dir$base.u tmpdepfile2=$dir$base.u tmpdepfile3=$dir$base.u "$@" -M fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then # Each line is of the form `foo.o: dependent.h'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" # That's a tab and a space in the []. sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; icc) # Intel's C compiler understands `-MD -MF file'. However on # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c # ICC 7.0 will fill foo.d with something like # foo.o: sub/foo.c # foo.o: sub/foo.h # which is wrong. We want: # sub/foo.o: sub/foo.c # sub/foo.o: sub/foo.h # sub/foo.c: # sub/foo.h: # ICC 7.1 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using \ : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp2) # The "hp" stanza above does not work with aCC (C++) and HP's ia64 # compilers, which have integrated preprocessors. The correct option # to use with these is +Maked; it writes dependencies to a file named # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d "$@" -Wc,+Maked else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d "$@" +Maked fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" # Add `dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in `foo.d' instead, so we check for that too. # Subdirectories are respected. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then # With Tru64 cc, shared objects can also be used to make a # static library. This mechanism is used in libtool 1.4 series to # handle both shared and static libraries in a single compilation. # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. # # With libtool 1.5 this exception was removed, and libtool now # generates 2 separate objects for the 2 libraries. These two # compilations output dependencies in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 tmpdepfile2=$dir$base.o.d # libtool 1.5 tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.o.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d tmpdepfile4=$dir$base.d "$@" -MD fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" # That's a tab and a space in the []. sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove `-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for `:' # in the target name. This is to cope with DOS-style filenames: # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. "$@" $dashmflag | sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" tr ' ' ' ' < "$tmpdepfile" | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # X makedepend shift cleared=no eat=no for arg do case $cleared in no) set ""; shift cleared=yes ;; esac if test $eat = yes; then eat=no continue fi case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -arch) eat=yes ;; -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix=`echo "$object" | sed 's/^.*\././'` touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" sed '1,2d' "$tmpdepfile" | tr ' ' ' ' | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove `-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi IFS=" " for arg do case "$arg" in -o) shift ;; $object) shift ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E 2>/dev/null | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" echo " " >> "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; msvcmsys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: libdbi-drivers-0.9.0/install-sh000555 001750 001750 00000032537 11717575636 017325 0ustar00markusmarkus000000 000000 #!/bin/sh # install - install a program, script, or datafile scriptversion=2009-04-28.21; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. nl=' ' IFS=" "" $nl" # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit=${DOITPROG-} if test -z "$doit"; then doit_exec=exec else doit_exec=$doit fi # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_glob='?' initialize_posix_glob=' test "$posix_glob" != "?" || { if (set -f) 2>/dev/null; then posix_glob= else posix_glob=: fi } ' posix_mkdir= # Desired mode of installed file. mode=0755 chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false no_target_directory= usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve the last data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *' '* | *' '* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -t) dst_arg=$2 shift;; -T) no_target_directory=true;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call `install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then trap '(exit $?); exit' 1 2 13 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names starting with `-'. case $src in -*) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # Protect names starting with `-'. case $dst in -*) dst=./$dst;; esac # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test -n "$no_target_directory"; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else # Prefer dirname, but fall back on a substitute if dirname fails. dstdir=` (dirname "$dst") 2>/dev/null || expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$dst" : 'X\(//\)[^/]' \| \ X"$dst" : 'X\(//\)$' \| \ X"$dst" : 'X\(/\)' \| . 2>/dev/null || echo X"$dst" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q' ` test -d "$dstdir" dstdir_status=$? fi fi obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # Create intermediate dirs using mode 755 as modified by the umask. # This is like FreeBSD 'install' as of 1997-10-28. umask=`umask` case $stripcmd.$umask in # Optimize common cases. *[2367][2367]) mkdir_umask=$umask;; .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; *[0-7]) mkdir_umask=`expr $umask + 22 \ - $umask % 100 % 40 + $umask % 20 \ - $umask % 10 % 4 + $umask % 2 `;; *) mkdir_umask=$umask,go-w;; esac # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false case $umask in *[123567][0-7][0-7]) # POSIX mkdir -p sets u+wx bits regardless of umask, which # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 if (umask $mkdir_umask && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writeable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. ls_ld_tmpdir=`ls -ld "$tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/d" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null fi trap '' 0;; esac;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # The umask is ridiculous, or mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; -*) prefix='./';; *) prefix='';; esac eval "$initialize_posix_glob" oIFS=$IFS IFS=/ $posix_glob set -f set fnord $dstdir shift $posix_glob set +f IFS=$oIFS prefixes= for d do test -z "$d" && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask=$mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && eval "$initialize_posix_glob" && $posix_glob set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && $posix_glob set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd -f "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: libdbi-drivers-0.9.0/ltmain.sh000444 001750 001750 00001054017 12117467037 017125 0ustar00markusmarkus000000 000000 # libtool (GNU libtool) 2.4.2 # Written by Gordon Matzigkeit , 1996 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, # 2007, 2008, 2009, 2010, 2011 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. # GNU Libtool 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. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool 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 GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, # or obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # Usage: $progname [OPTION]... [MODE-ARG]... # # Provide generalized library-building support services. # # --config show all configuration variables # --debug enable verbose shell tracing # -n, --dry-run display commands without modifying any files # --features display basic configuration information and exit # --mode=MODE use operation mode MODE # --preserve-dup-deps don't remove duplicate dependency libraries # --quiet, --silent don't print informational messages # --no-quiet, --no-silent # print informational messages (default) # --no-warn don't display warning messages # --tag=TAG use configuration variables from tag TAG # -v, --verbose print more informational messages than default # --no-verbose don't print the extra informational messages # --version print version information # -h, --help, --help-all print short, long, or detailed help message # # MODE must be one of the following: # # clean remove files from the build directory # compile compile a source file into a libtool object # execute automatically set library path, then run a program # finish complete the installation of libtool libraries # install install libraries or executables # link create a library or an executable # uninstall remove libraries from an installed directory # # MODE-ARGS vary depending on the MODE. When passed as first option, # `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that. # Try `$progname --help --mode=MODE' for a more detailed description of MODE. # # When reporting a bug, please describe a test case to reproduce it and # include the following information: # # host-triplet: $host # shell: $SHELL # compiler: $LTCC # compiler flags: $LTCFLAGS # linker: $LD (gnu? $with_gnu_ld) # $progname: (GNU libtool) 2.4.2 # automake: $automake_version # autoconf: $autoconf_version # # Report bugs to . # GNU libtool home page: . # General help using GNU software: . PROGRAM=libtool PACKAGE=libtool VERSION=2.4.2 TIMESTAMP="" package_revision=1.3337 # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' 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 # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } # NLS nuisances: We save the old values to restore during execute mode. lt_user_locale= lt_safe_locale= for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${$lt_var+set}\" = set; then save_$lt_var=\$$lt_var $lt_var=C export $lt_var lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" fi" done LC_ALL=C LANGUAGE=C export LANGUAGE LC_ALL $lt_unset CDPATH # 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" : ${CP="cp -f"} test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'} : ${MAKE="make"} : ${MKDIR="mkdir"} : ${MV="mv -f"} : ${RM="rm -f"} : ${SHELL="${CONFIG_SHELL-/bin/sh}"} : ${Xsed="$SED -e 1s/^X//"} # Global variables: EXIT_SUCCESS=0 EXIT_FAILURE=1 EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. exit_status=$EXIT_SUCCESS # Make sure IFS has a sensible default lt_nl=' ' IFS=" $lt_nl" dirname="s,/[^/]*$,," basename="s,^.*/,," # func_dirname file append nondir_replacement # Compute the dirname of FILE. If nonempty, add APPEND to the result, # otherwise set result to NONDIR_REPLACEMENT. func_dirname () { func_dirname_result=`$ECHO "${1}" | $SED "$dirname"` if test "X$func_dirname_result" = "X${1}"; then func_dirname_result="${3}" else func_dirname_result="$func_dirname_result${2}" fi } # func_dirname may be replaced by extended shell implementation # func_basename file func_basename () { func_basename_result=`$ECHO "${1}" | $SED "$basename"` } # func_basename may be replaced by extended shell implementation # func_dirname_and_basename file append nondir_replacement # perform func_basename and func_dirname in a single function # call: # dirname: Compute the dirname of FILE. If nonempty, # add APPEND to the result, otherwise set result # to NONDIR_REPLACEMENT. # value returned in "$func_dirname_result" # basename: Compute filename of FILE. # value retuned in "$func_basename_result" # Implementation must be kept synchronized with func_dirname # and func_basename. For efficiency, we do not delegate to # those functions but instead duplicate the functionality here. func_dirname_and_basename () { # Extract subdirectory from the argument. func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"` if test "X$func_dirname_result" = "X${1}"; then func_dirname_result="${3}" else func_dirname_result="$func_dirname_result${2}" fi func_basename_result=`$ECHO "${1}" | $SED -e "$basename"` } # func_dirname_and_basename may be replaced by extended shell implementation # func_stripname prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # func_strip_suffix prefix name func_stripname () { case ${2} in .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; esac } # func_stripname may be replaced by extended shell implementation # These SED scripts presuppose an absolute path with a trailing slash. pathcar='s,^/\([^/]*\).*$,\1,' pathcdr='s,^/[^/]*,,' removedotparts=':dotsl s@/\./@/@g t dotsl s,/\.$,/,' collapseslashes='s@/\{1,\}@/@g' finalslash='s,/*$,/,' # func_normal_abspath PATH # Remove doubled-up and trailing slashes, "." path components, # and cancel out any ".." path components in PATH after making # it an absolute path. # value returned in "$func_normal_abspath_result" func_normal_abspath () { # Start from root dir and reassemble the path. func_normal_abspath_result= func_normal_abspath_tpath=$1 func_normal_abspath_altnamespace= case $func_normal_abspath_tpath in "") # Empty path, that just means $cwd. func_stripname '' '/' "`pwd`" func_normal_abspath_result=$func_stripname_result return ;; # The next three entries are used to spot a run of precisely # two leading slashes without using negated character classes; # we take advantage of case's first-match behaviour. ///*) # Unusual form of absolute path, do nothing. ;; //*) # Not necessarily an ordinary path; POSIX reserves leading '//' # and for example Cygwin uses it to access remote file shares # over CIFS/SMB, so we conserve a leading double slash if found. func_normal_abspath_altnamespace=/ ;; /*) # Absolute path, do nothing. ;; *) # Relative path, prepend $cwd. func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath ;; esac # Cancel out all the simple stuff to save iterations. We also want # the path to end with a slash for ease of parsing, so make sure # there is one (and only one) here. func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"` while :; do # Processed it all yet? if test "$func_normal_abspath_tpath" = / ; then # If we ascended to the root using ".." the result may be empty now. if test -z "$func_normal_abspath_result" ; then func_normal_abspath_result=/ fi break fi func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$pathcar"` func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$pathcdr"` # Figure out what to do with it case $func_normal_abspath_tcomponent in "") # Trailing empty path component, ignore it. ;; ..) # Parent dir; strip last assembled component from result. func_dirname "$func_normal_abspath_result" func_normal_abspath_result=$func_dirname_result ;; *) # Actual path component, append it. func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent ;; esac done # Restore leading double-slash if one was found on entry. func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result } # func_relative_path SRCDIR DSTDIR # generates a relative path from SRCDIR to DSTDIR, with a trailing # slash if non-empty, suitable for immediately appending a filename # without needing to append a separator. # value returned in "$func_relative_path_result" func_relative_path () { func_relative_path_result= func_normal_abspath "$1" func_relative_path_tlibdir=$func_normal_abspath_result func_normal_abspath "$2" func_relative_path_tbindir=$func_normal_abspath_result # Ascend the tree starting from libdir while :; do # check if we have found a prefix of bindir case $func_relative_path_tbindir in $func_relative_path_tlibdir) # found an exact match func_relative_path_tcancelled= break ;; $func_relative_path_tlibdir*) # found a matching prefix func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" func_relative_path_tcancelled=$func_stripname_result if test -z "$func_relative_path_result"; then func_relative_path_result=. fi break ;; *) func_dirname $func_relative_path_tlibdir func_relative_path_tlibdir=${func_dirname_result} if test "x$func_relative_path_tlibdir" = x ; then # Have to descend all the way to the root! func_relative_path_result=../$func_relative_path_result func_relative_path_tcancelled=$func_relative_path_tbindir break fi func_relative_path_result=../$func_relative_path_result ;; esac done # Now calculate path; take care to avoid doubling-up slashes. func_stripname '' '/' "$func_relative_path_result" func_relative_path_result=$func_stripname_result func_stripname '/' '/' "$func_relative_path_tcancelled" if test "x$func_stripname_result" != x ; then func_relative_path_result=${func_relative_path_result}/${func_stripname_result} fi # Normalisation. If bindir is libdir, return empty string, # else relative path ending with a slash; either way, target # file name can be directly appended. if test ! -z "$func_relative_path_result"; then func_stripname './' '' "$func_relative_path_result/" func_relative_path_result=$func_stripname_result fi } # The name of this program: func_dirname_and_basename "$progpath" progname=$func_basename_result # Make sure we have an absolute path for reexecution: case $progpath in [\\/]*|[A-Za-z]:\\*) ;; *[\\/]*) progdir=$func_dirname_result progdir=`cd "$progdir" && pwd` progpath="$progdir/$progname" ;; *) save_IFS="$IFS" IFS=${PATH_SEPARATOR-:} for progdir in $PATH; do IFS="$save_IFS" test -x "$progdir/$progname" && break done IFS="$save_IFS" test -n "$progdir" || progdir=`pwd` progpath="$progdir/$progname" ;; esac # 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='s/\([`"$\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution that turns a string into a regex matching for the # string literally. sed_make_literal_regex='s,[].[^$\\*\/],\\&,g' # Sed substitution that converts a w32 file name or path # which contains forward slashes, into one that contains # (escaped) backslashes. A very naive implementation. lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' # Re-`\' parameter expansions in output of double_quote_subst that were # `\'-ed in input to the same. If an odd number of `\' preceded a '$' # in input to double_quote_subst, that '$' was protected from expansion. # Since each input `\' is now two `\'s, look for any number of runs of # four `\'s followed by two `\'s and then a '$'. `\' that '$'. bs='\\' bs2='\\\\' bs4='\\\\\\\\' dollar='\$' sed_double_backslash="\ s/$bs4/&\\ /g s/^$bs2$dollar/$bs&/ s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g s/\n//g" # Standard options: opt_dry_run=false opt_help=false opt_quiet=false opt_verbose=false opt_warning=: # func_echo arg... # Echo program name prefixed message, along with the current mode # name if it has been set yet. func_echo () { $ECHO "$progname: ${opt_mode+$opt_mode: }$*" } # func_verbose arg... # Echo program name prefixed message in verbose mode only. func_verbose () { $opt_verbose && func_echo ${1+"$@"} # A bug in bash halts the script if the last line of a function # fails when set -e is in force, so we need another command to # work around that: : } # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } # func_error arg... # Echo program name prefixed message to standard error. func_error () { $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2 } # func_warning arg... # Echo program name prefixed warning message to standard error. func_warning () { $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2 # bash bug again: : } # func_fatal_error arg... # Echo program name prefixed message to standard error, and exit. func_fatal_error () { func_error ${1+"$@"} exit $EXIT_FAILURE } # func_fatal_help arg... # Echo program name prefixed message to standard error, followed by # a help hint, and exit. func_fatal_help () { func_error ${1+"$@"} func_fatal_error "$help" } help="Try \`$progname --help' for more information." ## default # func_grep expression filename # Check whether EXPRESSION matches any line of FILENAME, without output. func_grep () { $GREP "$1" "$2" >/dev/null 2>&1 } # func_mkdir_p directory-path # Make sure the entire path to DIRECTORY-PATH is available. func_mkdir_p () { my_directory_path="$1" my_dir_list= if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then # Protect directory names starting with `-' case $my_directory_path in -*) my_directory_path="./$my_directory_path" ;; esac # While some portion of DIR does not yet exist... while test ! -d "$my_directory_path"; do # ...make a list in topmost first order. Use a colon delimited # list incase some portion of path contains whitespace. my_dir_list="$my_directory_path:$my_dir_list" # If the last portion added has no slash in it, the list is done case $my_directory_path in */*) ;; *) break ;; esac # ...otherwise throw away the child directory and loop my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"` done my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'` save_mkdir_p_IFS="$IFS"; IFS=':' for my_dir in $my_dir_list; do IFS="$save_mkdir_p_IFS" # mkdir can fail with a `File exist' error if two processes # try to create one of the directories concurrently. Don't # stop in that case! $MKDIR "$my_dir" 2>/dev/null || : done IFS="$save_mkdir_p_IFS" # Bail out if we (or some other process) failed to create a directory. test -d "$my_directory_path" || \ func_fatal_error "Failed to create \`$1'" fi } # 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 "$opt_dry_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" || \ func_fatal_error "cannot create temporary directory \`$my_tmpdir'" fi $ECHO "$my_tmpdir" } # func_quote_for_eval arg # Aesthetically quote ARG to be evaled later. # This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT # is double-quoted, suitable for a subsequent eval, whereas # FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters # which are still active within double quotes backslashified. func_quote_for_eval () { case $1 in *[\\\`\"\$]*) func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;; *) func_quote_for_eval_unquoted_result="$1" ;; esac case $func_quote_for_eval_unquoted_result in # Double-quote args containing shell metacharacters to delay # word splitting, command substitution and and variable # expansion for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" ;; *) func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" esac } # func_quote_for_expand arg # Aesthetically quote ARG to be evaled later; same as above, # but do not quote variable references. func_quote_for_expand () { case $1 in *[\\\`\"]*) my_arg=`$ECHO "$1" | $SED \ -e "$double_quote_subst" -e "$sed_double_backslash"` ;; *) my_arg="$1" ;; esac case $my_arg in # Double-quote args containing shell metacharacters to delay # word splitting and command substitution for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") my_arg="\"$my_arg\"" ;; esac func_quote_for_expand_result="$my_arg" } # func_show_eval cmd [fail_exp] # Unless opt_silent is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. func_show_eval () { my_cmd="$1" my_fail_exp="${2-:}" ${opt_silent-false} || { func_quote_for_expand "$my_cmd" eval "func_echo $func_quote_for_expand_result" } if ${opt_dry_run-false}; then :; else eval "$my_cmd" my_status=$? if test "$my_status" -eq 0; then :; else eval "(exit $my_status); $my_fail_exp" fi fi } # func_show_eval_locale cmd [fail_exp] # Unless opt_silent is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. Use the saved locale for evaluation. func_show_eval_locale () { my_cmd="$1" my_fail_exp="${2-:}" ${opt_silent-false} || { func_quote_for_expand "$my_cmd" eval "func_echo $func_quote_for_expand_result" } if ${opt_dry_run-false}; then :; else eval "$lt_user_locale $my_cmd" my_status=$? eval "$lt_safe_locale" if test "$my_status" -eq 0; then :; else eval "(exit $my_status); $my_fail_exp" fi fi } # func_tr_sh # Turn $1 into a string suitable for a shell variable name. # Result is stored in $func_tr_sh_result. All characters # not in the set a-zA-Z0-9_ are replaced with '_'. Further, # if $1 begins with a digit, a '_' is prepended as well. func_tr_sh () { case $1 in [0-9]* | *[!a-zA-Z0-9_]*) func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'` ;; * ) func_tr_sh_result=$1 ;; esac } # func_version # Echo version message to standard output and exit. func_version () { $opt_debug $SED -n '/(C)/!b go :more /\./!{ N s/\n# / / b more } :go /^# '$PROGRAM' (GNU /,/# warranty; / { s/^# // s/^# *$// s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ p }' < "$progpath" exit $? } # func_usage # Echo short help message to standard output and exit. func_usage () { $opt_debug $SED -n '/^# Usage:/,/^# *.*--help/ { s/^# // s/^# *$// s/\$progname/'$progname'/ p }' < "$progpath" echo $ECHO "run \`$progname --help | more' for full usage" exit $? } # func_help [NOEXIT] # Echo long help message to standard output and exit, # unless 'noexit' is passed as argument. func_help () { $opt_debug $SED -n '/^# Usage:/,/# Report bugs to/ { :print s/^# // s/^# *$// s*\$progname*'$progname'* s*\$host*'"$host"'* s*\$SHELL*'"$SHELL"'* s*\$LTCC*'"$LTCC"'* s*\$LTCFLAGS*'"$LTCFLAGS"'* s*\$LD*'"$LD"'* s/\$with_gnu_ld/'"$with_gnu_ld"'/ s/\$automake_version/'"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`"'/ s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/ p d } /^# .* home page:/b print /^# General help using/b print ' < "$progpath" ret=$? if test -z "$1"; then exit $ret fi } # func_missing_arg argname # Echo program name prefixed message to standard error and set global # exit_cmd. func_missing_arg () { $opt_debug func_error "missing argument for $1." exit_cmd=exit } # func_split_short_opt shortopt # Set func_split_short_opt_name and func_split_short_opt_arg shell # variables after splitting SHORTOPT after the 2nd character. func_split_short_opt () { my_sed_short_opt='1s/^\(..\).*$/\1/;q' my_sed_short_rest='1s/^..\(.*\)$/\1/;q' func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"` func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"` } # func_split_short_opt may be replaced by extended shell implementation # func_split_long_opt longopt # Set func_split_long_opt_name and func_split_long_opt_arg shell # variables after splitting LONGOPT at the `=' sign. func_split_long_opt () { my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q' my_sed_long_arg='1s/^--[^=]*=//' func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"` func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"` } # func_split_long_opt may be replaced by extended shell implementation exit_cmd=: magic="%%%MAGIC variable%%%" magic_exe="%%%MAGIC EXE variable%%%" # Global variables. nonopt= preserve_args= lo2o="s/\\.lo\$/.${objext}/" o2lo="s/\\.${objext}\$/.lo/" extracted_archives= extracted_serial=0 # 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= # func_append var value # Append VALUE to the end of shell variable VAR. func_append () { eval "${1}=\$${1}\${2}" } # func_append may be replaced by extended shell implementation # func_append_quoted var value # Quote VALUE and append to the end of shell variable VAR, separated # by a space. func_append_quoted () { func_quote_for_eval "${2}" eval "${1}=\$${1}\\ \$func_quote_for_eval_result" } # func_append_quoted may be replaced by extended shell implementation # func_arith arithmetic-term... func_arith () { func_arith_result=`expr "${@}"` } # func_arith may be replaced by extended shell implementation # func_len string # STRING may not start with a hyphen. func_len () { func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len` } # func_len may be replaced by extended shell implementation # func_lo2o object func_lo2o () { func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"` } # func_lo2o may be replaced by extended shell implementation # func_xform libobj-or-source func_xform () { func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'` } # func_xform may be replaced by extended shell implementation # func_fatal_configuration arg... # Echo program name prefixed message to standard error, followed by # a configuration failure hint, and exit. func_fatal_configuration () { func_error ${1+"$@"} func_error "See the $PACKAGE documentation for more information." func_fatal_error "Fatal configuration error." } # func_config # Display the configuration for all the tags in this script. func_config () { re_begincf='^# ### BEGIN LIBTOOL' re_endcf='^# ### END LIBTOOL' # Default configuration. $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" # Now print the configurations for the tags. for tagname in $taglist; do $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" done exit $? } # func_features # Display the features supported by this script. func_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 $? } # func_enable_tag tagname # Verify that TAGNAME is valid, and either flag an error and exit, or # enable the TAGNAME tag. We also add TAGNAME to the global $taglist # variable here. func_enable_tag () { # Global variable: tagname="$1" re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" sed_extractcf="/$re_begincf/,/$re_endcf/p" # Validate tagname. case $tagname in *[!-_A-Za-z0-9,/]*) func_fatal_error "invalid tag name: $tagname" ;; esac # Don't test for the "default" C tag, as we know it's # there but not specially marked. case $tagname in CC) ;; *) if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then taglist="$taglist $tagname" # Evaluate the configuration. Be careful to quote the path # and the sed script, to avoid splitting on whitespace, but # also don't use non-portable quotes within backquotes within # quotes we have to do it in 2 steps: extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` eval "$extractedcf" else func_error "ignoring unknown tag $tagname" fi ;; esac } # func_check_version_match # Ensure that we are using m4 macros, and libtool script from the same # release of libtool. func_check_version_match () { if test "$package_revision" != "$macro_revision"; then if test "$VERSION" != "$macro_version"; then if test -z "$macro_version"; then cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from an older release. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from $PACKAGE $macro_version. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF fi else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, $progname: but the definition of this LT_INIT comes from revision $macro_revision. $progname: You should recreate aclocal.m4 with macros from revision $package_revision $progname: of $PACKAGE $VERSION and run autoconf again. _LT_EOF fi exit $EXIT_MISMATCH fi } # Shorthand for --mode=foo, only valid as the first argument case $1 in clean|clea|cle|cl) shift; set dummy --mode clean ${1+"$@"}; shift ;; compile|compil|compi|comp|com|co|c) shift; set dummy --mode compile ${1+"$@"}; shift ;; execute|execut|execu|exec|exe|ex|e) shift; set dummy --mode execute ${1+"$@"}; shift ;; finish|finis|fini|fin|fi|f) shift; set dummy --mode finish ${1+"$@"}; shift ;; install|instal|insta|inst|ins|in|i) shift; set dummy --mode install ${1+"$@"}; shift ;; link|lin|li|l) shift; set dummy --mode link ${1+"$@"}; shift ;; uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) shift; set dummy --mode uninstall ${1+"$@"}; shift ;; esac # Option defaults: opt_debug=: opt_dry_run=false opt_config=false opt_preserve_dup_deps=false opt_features=false opt_finish=false opt_help=false opt_help_all=false opt_silent=: opt_warning=: opt_verbose=: opt_silent=false opt_verbose=false # Parse options once, thoroughly. This comes as soon as possible in the # script to make things like `--version' happen as quickly as we can. { # this just eases exit handling while test $# -gt 0; do opt="$1" shift case $opt in --debug|-x) opt_debug='set -x' func_echo "enabling shell trace mode" $opt_debug ;; --dry-run|--dryrun|-n) opt_dry_run=: ;; --config) opt_config=: func_config ;; --dlopen|-dlopen) optarg="$1" opt_dlopen="${opt_dlopen+$opt_dlopen }$optarg" shift ;; --preserve-dup-deps) opt_preserve_dup_deps=: ;; --features) opt_features=: func_features ;; --finish) opt_finish=: set dummy --mode finish ${1+"$@"}; shift ;; --help) opt_help=: ;; --help-all) opt_help_all=: opt_help=': help-all' ;; --mode) test $# = 0 && func_missing_arg $opt && break optarg="$1" opt_mode="$optarg" case $optarg in # Valid mode arguments: clean|compile|execute|finish|install|link|relink|uninstall) ;; # Catch anything else as an error *) func_error "invalid argument for $opt" exit_cmd=exit break ;; esac shift ;; --no-silent|--no-quiet) opt_silent=false func_append preserve_args " $opt" ;; --no-warning|--no-warn) opt_warning=false func_append preserve_args " $opt" ;; --no-verbose) opt_verbose=false func_append preserve_args " $opt" ;; --silent|--quiet) opt_silent=: func_append preserve_args " $opt" opt_verbose=false ;; --verbose|-v) opt_verbose=: func_append preserve_args " $opt" opt_silent=false ;; --tag) test $# = 0 && func_missing_arg $opt && break optarg="$1" opt_tag="$optarg" func_append preserve_args " $opt $optarg" func_enable_tag "$optarg" shift ;; -\?|-h) func_usage ;; --help) func_help ;; --version) func_version ;; # Separate optargs to long options: --*=*) func_split_long_opt "$opt" set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"} shift ;; # Separate non-argument short options: -\?*|-h*|-n*|-v*) func_split_short_opt "$opt" set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"} shift ;; --) break ;; -*) func_fatal_help "unrecognized option \`$opt'" ;; *) set dummy "$opt" ${1+"$@"}; shift; break ;; esac done # Validate options: # save first non-option argument if test "$#" -gt 0; then nonopt="$opt" shift fi # preserve --debug test "$opt_debug" = : || func_append preserve_args " --debug" case $host in *cygwin* | *mingw* | *pw32* | *cegcc*) # don't eliminate duplications in $postdeps and $predeps opt_duplicate_compiler_generated_deps=: ;; *) opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps ;; esac $opt_help || { # Sanity checks first: func_check_version_match if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then func_fatal_configuration "not configured to build any kind of library" fi # Darwin sucks eval std_shrext=\"$shrext_cmds\" # Only execute mode is allowed to have -dlopen flags. if test -n "$opt_dlopen" && test "$opt_mode" != execute; then func_error "unrecognized option \`-dlopen'" $ECHO "$help" 1>&2 exit $EXIT_FAILURE fi # Change the help message to a mode-specific one. generic_help="$help" help="Try \`$progname --help --mode=$opt_mode' for more information." } # Bail if the options were screwed $exit_cmd $EXIT_FAILURE } ## ----------- ## ## Main. ## ## ----------- ## # func_lalib_p file # True iff FILE is a libtool `.la' library or `.lo' object file. # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_lalib_p () { test -f "$1" && $SED -e 4q "$1" 2>/dev/null \ | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 } # func_lalib_unsafe_p file # True iff FILE is a libtool `.la' library or `.lo' object file. # This function implements the same check as func_lalib_p without # resorting to external programs. To this end, it redirects stdin and # closes it afterwards, without saving the original file descriptor. # As a safety measure, use it only where a negative result would be # fatal anyway. Works if `file' does not exist. func_lalib_unsafe_p () { lalib_p=no if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then for lalib_p_l in 1 2 3 4 do read lalib_p_line case "$lalib_p_line" in \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; esac done exec 0<&5 5<&- fi test "$lalib_p" = yes } # func_ltwrapper_script_p file # True iff FILE is a libtool wrapper script # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_script_p () { func_lalib_p "$1" } # func_ltwrapper_executable_p file # True iff FILE is a libtool wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_executable_p () { func_ltwrapper_exec_suffix= case $1 in *.exe) ;; *) func_ltwrapper_exec_suffix=.exe ;; esac $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 } # func_ltwrapper_scriptname file # Assumes file is an ltwrapper_executable # uses $file to determine the appropriate filename for a # temporary ltwrapper_script. func_ltwrapper_scriptname () { func_dirname_and_basename "$1" "" "." func_stripname '' '.exe' "$func_basename_result" func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" } # func_ltwrapper_p file # True iff FILE is a libtool wrapper script or wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_p () { func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" } # func_execute_cmds commands fail_cmd # Execute tilde-delimited COMMANDS. # If FAIL_CMD is given, eval that upon failure. # FAIL_CMD may read-access the current command in variable CMD! func_execute_cmds () { $opt_debug save_ifs=$IFS; IFS='~' for cmd in $1; do IFS=$save_ifs eval cmd=\"$cmd\" func_show_eval "$cmd" "${2-:}" done IFS=$save_ifs } # func_source file # Source FILE, adding directory component if necessary. # Note that it is not necessary on cygwin/mingw to append a dot to # FILE even if both FILE 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. func_source () { $opt_debug case $1 in */* | *\\*) . "$1" ;; *) . "./$1" ;; esac } # func_resolve_sysroot PATH # Replace a leading = in PATH with a sysroot. Store the result into # func_resolve_sysroot_result func_resolve_sysroot () { func_resolve_sysroot_result=$1 case $func_resolve_sysroot_result in =*) func_stripname '=' '' "$func_resolve_sysroot_result" func_resolve_sysroot_result=$lt_sysroot$func_stripname_result ;; esac } # func_replace_sysroot PATH # If PATH begins with the sysroot, replace it with = and # store the result into func_replace_sysroot_result. func_replace_sysroot () { case "$lt_sysroot:$1" in ?*:"$lt_sysroot"*) func_stripname "$lt_sysroot" '' "$1" func_replace_sysroot_result="=$func_stripname_result" ;; *) # Including no sysroot. func_replace_sysroot_result=$1 ;; esac } # 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 () { $opt_debug # FreeBSD-specific: where we install compilers with non-standard names tag_compilers_CC="*cc cc* *gcc gcc* clang" tag_compilers_CXX="*c++ c++* *g++ g++* clang++" base_compiler=`set -- "$@"; echo $1` # If $tagname isn't set, then try to infer if the default "CC" tag applies if test -z "$tagname"; then for zp in $tag_compilers_CC; do case $base_compiler in $zp) tagname="CC"; break;; esac done fi if test -n "$available_tags" && test -z "$tagname"; then CC_quoted= for arg in $CC; do func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` 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 "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; # 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. func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case "$@ " in " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) # 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 # FreeBSD-specific: try compilers based on inferred tag if test -z "$tagname"; then eval "tag_compilers=\$tag_compilers_${z}" if test -n "$tag_compilers"; then for zp in $tag_compilers; do case $base_compiler in $zp) tagname=$z; break;; esac done if test -n "$tagname"; then break fi 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 func_echo "unable to infer tagged configuration" func_fatal_error "specify a tag with \`--tag'" # else # func_verbose "using $tagname tagged configuration" fi ;; esac fi } # func_write_libtool_object output_name pic_name nonpic_name # Create a libtool object file (analogous to a ".la" file), # but don't create it if we're doing a dry run. func_write_libtool_object () { write_libobj=${1} if test "$build_libtool_libs" = yes; then write_lobj=\'${2}\' else write_lobj=none fi if test "$build_old_libs" = yes; then write_oldobj=\'${3}\' else write_oldobj=none fi $opt_dry_run || { cat >${write_libobj}T </dev/null` if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | $SED -e "$lt_sed_naive_backslashify"` else func_convert_core_file_wine_to_w32_result= fi fi } # end: func_convert_core_file_wine_to_w32 # func_convert_core_path_wine_to_w32 ARG # Helper function used by path conversion functions when $build is *nix, and # $host is mingw, cygwin, or some other w32 environment. Relies on a correctly # configured wine environment available, with the winepath program in $build's # $PATH. Assumes ARG has no leading or trailing path separator characters. # # ARG is path to be converted from $build format to win32. # Result is available in $func_convert_core_path_wine_to_w32_result. # Unconvertible file (directory) names in ARG are skipped; if no directory names # are convertible, then the result may be empty. func_convert_core_path_wine_to_w32 () { $opt_debug # unfortunately, winepath doesn't convert paths, only file names func_convert_core_path_wine_to_w32_result="" if test -n "$1"; then oldIFS=$IFS IFS=: for func_convert_core_path_wine_to_w32_f in $1; do IFS=$oldIFS func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" if test -n "$func_convert_core_file_wine_to_w32_result" ; then if test -z "$func_convert_core_path_wine_to_w32_result"; then func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result" else func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" fi fi done IFS=$oldIFS fi } # end: func_convert_core_path_wine_to_w32 # func_cygpath ARGS... # Wrapper around calling the cygpath program via LT_CYGPATH. This is used when # when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) # $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or # (2), returns the Cygwin file name or path in func_cygpath_result (input # file name or path is assumed to be in w32 format, as previously converted # from $build's *nix or MSYS format). In case (3), returns the w32 file name # or path in func_cygpath_result (input file name or path is assumed to be in # Cygwin format). Returns an empty string on error. # # ARGS are passed to cygpath, with the last one being the file name or path to # be converted. # # Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH # environment variable; do not put it in $PATH. func_cygpath () { $opt_debug if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` if test "$?" -ne 0; then # on failure, ensure result is empty func_cygpath_result= fi else func_cygpath_result= func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'" fi } #end: func_cygpath # func_convert_core_msys_to_w32 ARG # Convert file name or path ARG from MSYS format to w32 format. Return # result in func_convert_core_msys_to_w32_result. func_convert_core_msys_to_w32 () { $opt_debug # awkward: cmd appends spaces to result func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` } #end: func_convert_core_msys_to_w32 # func_convert_file_check ARG1 ARG2 # Verify that ARG1 (a file name in $build format) was converted to $host # format in ARG2. Otherwise, emit an error message, but continue (resetting # func_to_host_file_result to ARG1). func_convert_file_check () { $opt_debug if test -z "$2" && test -n "$1" ; then func_error "Could not determine host file name corresponding to" func_error " \`$1'" func_error "Continuing, but uninstalled executables may not work." # Fallback: func_to_host_file_result="$1" fi } # end func_convert_file_check # func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH # Verify that FROM_PATH (a path in $build format) was converted to $host # format in TO_PATH. Otherwise, emit an error message, but continue, resetting # func_to_host_file_result to a simplistic fallback value (see below). func_convert_path_check () { $opt_debug if test -z "$4" && test -n "$3"; then func_error "Could not determine the host path corresponding to" func_error " \`$3'" func_error "Continuing, but uninstalled executables may not work." # Fallback. This is a deliberately simplistic "conversion" and # should not be "improved". See libtool.info. if test "x$1" != "x$2"; then lt_replace_pathsep_chars="s|$1|$2|g" func_to_host_path_result=`echo "$3" | $SED -e "$lt_replace_pathsep_chars"` else func_to_host_path_result="$3" fi fi } # end func_convert_path_check # func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG # Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT # and appending REPL if ORIG matches BACKPAT. func_convert_path_front_back_pathsep () { $opt_debug case $4 in $1 ) func_to_host_path_result="$3$func_to_host_path_result" ;; esac case $4 in $2 ) func_append func_to_host_path_result "$3" ;; esac } # end func_convert_path_front_back_pathsep ################################################## # $build to $host FILE NAME CONVERSION FUNCTIONS # ################################################## # invoked via `$to_host_file_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # Result will be available in $func_to_host_file_result. # func_to_host_file ARG # Converts the file name ARG from $build format to $host format. Return result # in func_to_host_file_result. func_to_host_file () { $opt_debug $to_host_file_cmd "$1" } # end func_to_host_file # func_to_tool_file ARG LAZY # converts the file name ARG from $build format to toolchain format. Return # result in func_to_tool_file_result. If the conversion in use is listed # in (the comma separated) LAZY, no conversion takes place. func_to_tool_file () { $opt_debug case ,$2, in *,"$to_tool_file_cmd",*) func_to_tool_file_result=$1 ;; *) $to_tool_file_cmd "$1" func_to_tool_file_result=$func_to_host_file_result ;; esac } # end func_to_tool_file # func_convert_file_noop ARG # Copy ARG to func_to_host_file_result. func_convert_file_noop () { func_to_host_file_result="$1" } # end func_convert_file_noop # func_convert_file_msys_to_w32 ARG # Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_file_result. func_convert_file_msys_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_to_host_file_result="$func_convert_core_msys_to_w32_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_w32 # func_convert_file_cygwin_to_w32 ARG # Convert file name ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_file_cygwin_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then # because $build is cygwin, we call "the" cygpath in $PATH; no need to use # LT_CYGPATH in this case. func_to_host_file_result=`cygpath -m "$1"` fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_cygwin_to_w32 # func_convert_file_nix_to_w32 ARG # Convert file name ARG from *nix to w32 format. Requires a wine environment # and a working winepath. Returns result in func_to_host_file_result. func_convert_file_nix_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_file_wine_to_w32 "$1" func_to_host_file_result="$func_convert_core_file_wine_to_w32_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_w32 # func_convert_file_msys_to_cygwin ARG # Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_file_msys_to_cygwin () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_cygpath -u "$func_convert_core_msys_to_w32_result" func_to_host_file_result="$func_cygpath_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_cygwin # func_convert_file_nix_to_cygwin ARG # Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed # in a wine environment, working winepath, and LT_CYGPATH set. Returns result # in func_to_host_file_result. func_convert_file_nix_to_cygwin () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. func_convert_core_file_wine_to_w32 "$1" func_cygpath -u "$func_convert_core_file_wine_to_w32_result" func_to_host_file_result="$func_cygpath_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_cygwin ############################################# # $build to $host PATH CONVERSION FUNCTIONS # ############################################# # invoked via `$to_host_path_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # The result will be available in $func_to_host_path_result. # # Path separators are also converted from $build format to $host format. If # ARG begins or ends with a path separator character, it is preserved (but # converted to $host format) on output. # # All path conversion functions are named using the following convention: # file name conversion function : func_convert_file_X_to_Y () # path conversion function : func_convert_path_X_to_Y () # where, for any given $build/$host combination the 'X_to_Y' value is the # same. If conversion functions are added for new $build/$host combinations, # the two new functions must follow this pattern, or func_init_to_host_path_cmd # will break. # func_init_to_host_path_cmd # Ensures that function "pointer" variable $to_host_path_cmd is set to the # appropriate value, based on the value of $to_host_file_cmd. to_host_path_cmd= func_init_to_host_path_cmd () { $opt_debug if test -z "$to_host_path_cmd"; then func_stripname 'func_convert_file_' '' "$to_host_file_cmd" to_host_path_cmd="func_convert_path_${func_stripname_result}" fi } # func_to_host_path ARG # Converts the path ARG from $build format to $host format. Return result # in func_to_host_path_result. func_to_host_path () { $opt_debug func_init_to_host_path_cmd $to_host_path_cmd "$1" } # end func_to_host_path # func_convert_path_noop ARG # Copy ARG to func_to_host_path_result. func_convert_path_noop () { func_to_host_path_result="$1" } # end func_convert_path_noop # func_convert_path_msys_to_w32 ARG # Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_path_result. func_convert_path_msys_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # Remove leading and trailing path separator characters from ARG. MSYS # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; # and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result="$func_convert_core_msys_to_w32_result" func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_msys_to_w32 # func_convert_path_cygwin_to_w32 ARG # Convert path ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_path_cygwin_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_cygwin_to_w32 # func_convert_path_nix_to_w32 ARG # Convert path ARG from *nix to w32 format. Requires a wine environment and # a working winepath. Returns result in func_to_host_file_result. func_convert_path_nix_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result="$func_convert_core_path_wine_to_w32_result" func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_nix_to_w32 # func_convert_path_msys_to_cygwin ARG # Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_path_msys_to_cygwin () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_msys_to_w32_result" func_to_host_path_result="$func_cygpath_result" func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_msys_to_cygwin # func_convert_path_nix_to_cygwin ARG # Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a # a wine environment, working winepath, and LT_CYGPATH set. Returns result in # func_to_host_file_result. func_convert_path_nix_to_cygwin () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # Remove leading and trailing path separator characters from # ARG. msys behavior is inconsistent here, cygpath turns them # into '.;' and ';.', and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" func_to_host_path_result="$func_cygpath_result" func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_nix_to_cygwin # func_mode_compile arg... func_mode_compile () { $opt_debug # 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= pie_flag= 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) test -n "$libobj" && \ func_fatal_error "you cannot specify \`-o' more than once" arg_mode=target continue ;; -pie | -fpie | -fPIE) func_append pie_flag " $arg" continue ;; -shared | -static | -prefer-pic | -prefer-non-pic) func_append 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,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result lastarg= save_ifs="$IFS"; IFS=',' for arg in $args; do IFS="$save_ifs" func_append_quoted lastarg "$arg" done IFS="$save_ifs" func_stripname ' ' '' "$lastarg" lastarg=$func_stripname_result # Add the arguments to base_compile. func_append 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. func_append_quoted base_compile "$lastarg" done # for arg case $arg_mode in arg) func_fatal_error "you must specify an argument for -Xcompile" ;; target) func_fatal_error "you must specify a target with \`-o'" ;; *) # Get the name of the library object. test -z "$libobj" && { func_basename "$srcfile" libobj="$func_basename_result" } ;; esac # Recognize several different file suffixes. # If the user specifies -o file.o, it is replaced with file.lo case $libobj in *.[cCFSifmso] | \ *.ada | *.adb | *.ads | *.asm | \ *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) func_xform "$libobj" libobj=$func_xform_result ;; esac case $libobj in *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; *) func_fatal_error "cannot determine name of library object from \`$libobj'" ;; esac func_infer_tag $base_compile for arg in $later; do case $arg in -shared) test "$build_libtool_libs" != yes && \ func_fatal_configuration "can not build a shared library" build_old_libs=no continue ;; -static) build_libtool_libs=no build_old_libs=yes continue ;; -prefer-pic) pic_mode=yes continue ;; -prefer-non-pic) pic_mode=no continue ;; esac done func_quote_for_eval "$libobj" test "X$libobj" != "X$func_quote_for_eval_result" \ && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ && func_warning "libobj name \`$libobj' may not contain shell special characters." func_dirname_and_basename "$obj" "/" "" objname="$func_basename_result" xdir="$func_dirname_result" lobj=${xdir}$objdir/$objname test -z "$base_compile" && \ func_fatal_help "you must specify a compilation command" # 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 # On Cygwin there's no "real" PIC flag so we must build both object types case $host_os in cygwin* | mingw* | pw32* | os2* | cegcc*) 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 "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext} lockfile="$output_obj.lock" 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 $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "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." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi func_append removelist " $output_obj" $ECHO "$srcfile" > "$lockfile" fi $opt_dry_run || $RM $removelist func_append removelist " $lockfile" trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 srcfile=$func_to_tool_file_result func_quote_for_eval "$srcfile" qsrcfile=$func_quote_for_eval_result # Only build a PIC object if we are building libtool libraries. if test "$build_libtool_libs" = yes; then # Without this assignment, base_compile gets emptied. fbsd_hideous_sh_bug=$base_compile if test "$pic_mode" != no; then command="$base_compile $qsrcfile $pic_flag" else # Don't build PIC code command="$base_compile $qsrcfile" fi func_mkdir_p "$xdir$objdir" if test -z "$output_obj"; then # Place PIC objects in $objdir func_append command " -o $lobj" fi func_show_eval_locale "$command" \ 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' if test "$need_locks" = warn && test "X`cat $lockfile 2>/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." $opt_dry_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 func_show_eval '$MV "$output_obj" "$lobj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi # Allow error messages only from the first compilation. if test "$suppress_opt" = yes; then suppress_output=' >/dev/null 2>&1' fi fi # Only build a position-dependent object if we build old libraries. if test "$build_old_libs" = yes; then if test "$pic_mode" != yes; then # Don't build PIC code command="$base_compile $qsrcfile$pie_flag" else command="$base_compile $qsrcfile $pic_flag" fi if test "$compiler_c_o" = yes; then func_append command " -o $obj" fi # Suppress compiler output if we already did a PIC compilation. func_append command "$suppress_output" func_show_eval_locale "$command" \ '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' if test "$need_locks" = warn && test "X`cat $lockfile 2>/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." $opt_dry_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 func_show_eval '$MV "$output_obj" "$obj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi fi $opt_dry_run || { func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" # Unlock the critical section if it was locked if test "$need_locks" != no; then removelist=$lockfile $RM "$lockfile" fi } exit $EXIT_SUCCESS } $opt_help || { test "$opt_mode" = compile && func_mode_compile ${1+"$@"} } func_mode_help () { # We need to display help for each of the modes. case $opt_mode in "") # Generic help is extracted from the usage comments # at the start of this file. func_help ;; clean) $ECHO \ "Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... Remove files from the build directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, object or program, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; compile) $ECHO \ "Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE Compile a source file into a libtool library object. This mode accepts the following additional options: -o OUTPUT-FILE set the output file name to OUTPUT-FILE -no-suppress do not suppress compiler output for multiple passes -prefer-pic try to build PIC objects only -prefer-non-pic try to build non-PIC objects only -shared do not build a \`.o' file suitable for static linking -static only build a \`.o' file suitable for static linking -Wc,FLAG pass FLAG directly to the compiler COMPILE-COMMAND is a command to be used in creating a \`standard' object file from the given SOURCEFILE. The output file name is determined by removing the directory component from SOURCEFILE, then substituting the C source code suffix \`.c' with the library object suffix, \`.lo'." ;; execute) $ECHO \ "Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... Automatically set library path, then run a program. This mode accepts the following additional options: -dlopen FILE add the directory containing FILE to the library path This mode sets the library path environment variable according to \`-dlopen' flags. If any of the ARGS are libtool executable wrappers, then they are translated into their corresponding uninstalled binary, and any of their required library directories are added to the library path. Then, COMMAND is executed, with ARGS as arguments." ;; finish) $ECHO \ "Usage: $progname [OPTION]... --mode=finish [LIBDIR]... Complete the installation of libtool libraries. Each LIBDIR is a directory that contains libtool libraries. The commands that this mode executes may require superuser privileges. Use the \`--dry-run' option if you just want to see what would be executed." ;; install) $ECHO \ "Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... Install executables or libraries. INSTALL-COMMAND is the installation command. The first component should be either the \`install' or \`cp' program. The following components of INSTALL-COMMAND are treated specially: -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation The rest of the components are interpreted as arguments to that command (only BSD-compatible install options are recognized)." ;; link) $ECHO \ "Usage: $progname [OPTION]... --mode=link LINK-COMMAND... Link object files or libraries together to form another library, or to create an executable program. LINK-COMMAND is a command using the C compiler that you would use to create a program from several object files. The following components of LINK-COMMAND are treated specially: -all-static do not do any dynamic linking at all -avoid-version do not add a version suffix if possible -bindir BINDIR specify path to binaries directory (for systems where libraries must be found in the PATH setting at runtime) -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) -export-symbols SYMFILE try to export only the symbols listed in SYMFILE -export-symbols-regex REGEX try to export only the symbols matching REGEX -LLIBDIR search LIBDIR for required installed libraries -lNAME OUTPUT-FILE requires the installed library libNAME -module build a library that can dlopened -no-fast-install disable the fast-install mode -no-install link a not-installable executable -no-undefined declare that a library does not refer to external symbols -o OUTPUT-FILE create OUTPUT-FILE from the specified objects -objectlist FILE Use a list of object files found in FILE to specify objects -precious-files-regex REGEX don't remove output files matching REGEX -release RELEASE specify package release information -rpath LIBDIR the created library will eventually be installed in LIBDIR -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries -shared only do dynamic linking of libtool libraries -shrext SUFFIX override the standard shared library file extension -static do not do any dynamic linking of uninstalled libtool libraries -static-libtool-libs do not do any dynamic linking of libtool libraries -version-info CURRENT[:REVISION[:AGE]] specify library version info [each variable defaults to 0] -weak LIBNAME declare that the target provides the LIBNAME interface -Wc,FLAG -Xcompiler FLAG pass linker-specific FLAG directly to the compiler -Wl,FLAG -Xlinker FLAG pass linker-specific FLAG directly to the linker -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) All other options (arguments beginning with \`-') are ignored. Every other argument is treated as a filename. Files ending in \`.la' are treated as uninstalled libtool libraries, other files are standard or library object files. If the OUTPUT-FILE ends in \`.la', then a libtool library is created, only library objects (\`.lo' files) may be specified, and \`-rpath' is required, except when creating a convenience library. If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created using \`ar' and \`ranlib', or on Windows using \`lib'. If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file is created, otherwise an executable program is created." ;; uninstall) $ECHO \ "Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... Remove libraries from an installation directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; *) func_fatal_help "invalid operation mode \`$opt_mode'" ;; esac echo $ECHO "Try \`$progname --help' for more information about other modes." } # Now that we've collected a possible --mode arg, show help if necessary if $opt_help; then if test "$opt_help" = :; then func_mode_help else { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do func_mode_help done } | sed -n '1p; 2,$s/^Usage:/ or: /p' { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do echo func_mode_help done } | sed '1d /^When reporting/,/^Report/{ H d } $x /information about other modes/d /more detailed .*MODE/d s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' fi exit $? fi # func_mode_execute arg... func_mode_execute () { $opt_debug # The first argument is the command name. cmd="$nonopt" test -z "$cmd" && \ func_fatal_help "you must specify a COMMAND" # Handle -dlopen flags immediately. for file in $opt_dlopen; do test -f "$file" \ || func_fatal_help "\`$file' is not a file" dir= case $file in *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "\`$lib' is not a valid libtool archive" # Read the libtool library. dlname= library_names= func_source "$file" # Skip this library if it cannot be dlopened. if test -z "$dlname"; then # Warn if it was a shared library. test -n "$library_names" && \ func_warning "\`$file' was not linked with \`-export-dynamic'" continue fi func_dirname "$file" "" "." dir="$func_dirname_result" if test -f "$dir/$objdir/$dlname"; then func_append dir "/$objdir" else if test ! -f "$dir/$dlname"; then func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" fi fi ;; *.lo) # Just add the directory containing the .lo file. func_dirname "$file" "" "." dir="$func_dirname_result" ;; *) func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" 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 -* | *.la | *.lo ) ;; *) # Do a test to see if this is really a libtool program. if func_ltwrapper_script_p "$file"; then func_source "$file" # Transform arg to wrapped name. file="$progdir/$program" elif func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" func_source "$func_ltwrapper_scriptname_result" # Transform arg to wrapped name. file="$progdir/$program" fi ;; esac # Quote arguments (to preserve shell metacharacters). func_append_quoted args "$file" done if test "X$opt_dry_run" = Xfalse; 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 LANGUAGE 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 else $lt_unset $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 } test "$opt_mode" = execute && func_mode_execute ${1+"$@"} # func_mode_finish arg... func_mode_finish () { $opt_debug libs= libdirs= admincmds= for opt in "$nonopt" ${1+"$@"} do if test -d "$opt"; then func_append libdirs " $opt" elif test -f "$opt"; then if func_lalib_unsafe_p "$opt"; then func_append libs " $opt" else func_warning "\`$opt' is not a valid libtool archive" fi else func_fatal_error "invalid argument \`$opt'" fi done if test -n "$libs"; then if test -n "$lt_sysroot"; then sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" else sysroot_cmd= fi # Remove sysroot references if $opt_dry_run; then for lib in $libs; do echo "removing references to $lt_sysroot and \`=' prefixes from $lib" done else tmpdir=`func_mktempdir` for lib in $libs; do sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ > $tmpdir/tmp-la mv -f $tmpdir/tmp-la $lib done ${RM}r "$tmpdir" fi fi if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. func_execute_cmds "$finish_cmds" 'admincmds="$admincmds '"$cmd"'"' fi if test -n "$finish_eval"; then # Do the single finish_eval. eval cmds=\"$finish_eval\" $opt_dry_run || eval "$cmds" || func_append admincmds " $cmds" fi done fi # Exit here if they wanted silent mode. $opt_silent && exit $EXIT_SUCCESS if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then echo "----------------------------------------------------------------------" 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" case $host in solaris2.[6789]|solaris2.1[0-9]) echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" echo "pages." ;; *) echo "more information, such as the ld(1) and ld.so(8) manual pages." ;; esac echo "----------------------------------------------------------------------" fi exit $EXIT_SUCCESS } test "$opt_mode" = finish && func_mode_finish ${1+"$@"} # func_mode_install arg... func_mode_install () { $opt_debug # 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. case $nonopt in *shtool*) :;; *) false;; esac; then # Aesthetically quote it. func_quote_for_eval "$nonopt" install_prog="$func_quote_for_eval_result " arg=$1 shift else install_prog= arg=$nonopt fi # The real first argument should be the name of the installation program. # Aesthetically quote it. func_quote_for_eval "$arg" func_append install_prog "$func_quote_for_eval_result" install_shared_prog=$install_prog case " $install_prog " in *[\\\ /]cp\ *) install_cp=: ;; *) install_cp=false ;; esac # We need to accept at least all the BSD install flags. dest= files= opts= prev= install_type= isdir=no stripme= no_mode=: for arg do arg2= if test -n "$dest"; then func_append files " $dest" dest=$arg continue fi case $arg in -d) isdir=yes ;; -f) if $install_cp; then :; else prev=$arg fi ;; -g | -m | -o) prev=$arg ;; -s) stripme=" -s" continue ;; -*) ;; *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then if test "x$prev" = x-m && test -n "$install_override_mode"; then arg2=$install_override_mode no_mode=false fi prev= else dest=$arg continue fi ;; esac # Aesthetically quote the argument. func_quote_for_eval "$arg" func_append install_prog " $func_quote_for_eval_result" if test -n "$arg2"; then func_quote_for_eval "$arg2" fi func_append install_shared_prog " $func_quote_for_eval_result" done test -z "$install_prog" && \ func_fatal_help "you must specify an install program" test -n "$prev" && \ func_fatal_help "the \`$prev' option requires an argument" if test -n "$install_override_mode" && $no_mode; then if $install_cp; then :; else func_quote_for_eval "$install_override_mode" func_append install_shared_prog " -m $func_quote_for_eval_result" fi fi if test -z "$files"; then if test -z "$dest"; then func_fatal_help "no file or destination specified" else func_fatal_help "you must specify a destination" fi fi # Strip any trailing slash from the destination. func_stripname '' '/' "$dest" dest=$func_stripname_result # Check to see that the destination is a directory. test -d "$dest" && isdir=yes if test "$isdir" = yes; then destdir="$dest" destname= else func_dirname_and_basename "$dest" "" "." destdir="$func_dirname_result" destname="$func_basename_result" # Not a directory, so check to see that there is only one file specified. set dummy $files; shift test "$#" -gt 1 && \ func_fatal_help "\`$dest' is not a directory" fi case $destdir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) for file in $files; do case $file in *.lo) ;; *) func_fatal_help "\`$destdir' must be an absolute directory name" ;; 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. func_append staticlibs " $file" ;; *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "\`$file' is not a valid libtool archive" library_names= old_library= relink_command= func_source "$file" # Add the libdir to current_libdirs if it is the destination. if test "X$destdir" = "X$libdir"; then case "$current_libdirs " in *" $libdir "*) ;; *) func_append current_libdirs " $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; *) func_append future_libdirs " $libdir" ;; esac fi func_dirname "$file" "/" "" dir="$func_dirname_result" func_append 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 -e "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. test "$inst_prefix_dir" = "$destdir" && \ func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" if test -n "$inst_prefix_dir"; then # Stick the inst_prefix_dir data into the link command. relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` else relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` fi func_warning "relinking \`$file'" func_show_eval "$relink_command" \ 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' fi # See the names of the shared library. set dummy $library_names; shift if test -n "$1"; then realname="$1" shift srcname="$realname" test -n "$relink_command" && srcname="$realname"T # Install the shared library and build the symlinks. func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 'exit $?' tstripme="$stripme" case $host_os in cygwin* | mingw* | pw32* | cegcc*) case $realname in *.dll.a) tstripme="" ;; esac ;; esac if test -n "$tstripme" && test -n "$striplib"; then func_show_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 test "$linkname" != "$realname" \ && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" done fi # Do each command in the postinstall commands. lib="$destdir/$realname" func_execute_cmds "$postinstall_cmds" 'exit $?' fi # Install the pseudo-library for information purposes. func_basename "$file" name="$func_basename_result" instname="$dir/$name"i func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' # Maybe install the static library, too. test -n "$old_library" && func_append 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 func_basename "$file" destfile="$func_basename_result" destfile="$destdir/$destfile" fi # Deduce the name of the destination old-style object file. case $destfile in *.lo) func_lo2o "$destfile" staticdest=$func_lo2o_result ;; *.$objext) staticdest="$destfile" destfile= ;; *) func_fatal_help "cannot copy a libtool object to \`$destfile'" ;; esac # Install the libtool object if requested. test -n "$destfile" && \ func_show_eval "$install_prog $file $destfile" 'exit $?' # Install the old object if enabled. if test "$build_old_libs" = yes; then # Deduce the name of the old-style object file. func_lo2o "$file" staticobj=$func_lo2o_result func_show_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 func_basename "$file" destfile="$func_basename_result" 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 func_stripname '' '.exe' "$file" file=$func_stripname_result stripped_ext=".exe" fi ;; esac # Do a test to see if this is really a libtool program. case $host in *cygwin* | *mingw*) if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" wrapper=$func_ltwrapper_scriptname_result else func_stripname '' '.exe' "$file" wrapper=$func_stripname_result fi ;; *) wrapper=$file ;; esac if func_ltwrapper_script_p "$wrapper"; then notinst_deplibs= relink_command= func_source "$wrapper" # Check the variables that should have been set. test -z "$generated_by_libtool_version" && \ func_fatal_error "invalid libtool wrapper script \`$wrapper'" finalize=yes for lib in $notinst_deplibs; do # Check to see that each library is installed. libdir= if test -f "$lib"; then func_source "$lib" fi libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test if test -n "$libdir" && test ! -f "$libfile"; then func_warning "\`$lib' has not been installed in \`$libdir'" finalize=no fi done relink_command= func_source "$wrapper" outputname= if test "$fast_install" = no && test -n "$relink_command"; then $opt_dry_run || { if test "$finalize" = yes; then tmpdir=`func_mktempdir` func_basename "$file$stripped_ext" file="$func_basename_result" outputname="$tmpdir/$file" # Replace the output file specification. relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` $opt_silent || { func_quote_for_expand "$relink_command" eval "func_echo $func_quote_for_expand_result" } if eval "$relink_command"; then : else func_error "error: relink \`$file' with the above command before installing it" $opt_dry_run || ${RM}r "$tmpdir" continue fi file="$outputname" else func_warning "cannot relink \`$file'" fi } else # Install the binary that we compiled earlier. file=`$ECHO "$file$stripped_ext" | $SED "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) func_stripname '' '.exe' "$destfile" destfile=$func_stripname_result ;; esac ;; esac func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' $opt_dry_run || if test -n "$outputname"; then ${RM}r "$tmpdir" fi ;; esac done for file in $staticlibs; do func_basename "$file" name="$func_basename_result" # Set up the ranlib parameters. oldlib="$destdir/$name" func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result func_show_eval "$install_prog \$file \$oldlib" 'exit $?' if test -n "$stripme" && test -n "$old_striplib"; then func_show_eval "$old_striplib $tool_oldlib" 'exit $?' fi # Do each command in the postinstall commands. func_execute_cmds "$old_postinstall_cmds" 'exit $?' done test -n "$future_libdirs" && \ func_warning "remember to run \`$progname --finish$future_libdirs'" if test -n "$current_libdirs"; then # Maybe just do a dry run. $opt_dry_run && current_libdirs=" -n$current_libdirs" exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' else exit $EXIT_SUCCESS fi } test "$opt_mode" = install && func_mode_install ${1+"$@"} # func_generate_dlsyms outputname originator pic_p # Extract symbols from dlprefiles and create ${outputname}S.o with # a dlpreopen symbol table. func_generate_dlsyms () { $opt_debug my_outputname="$1" my_originator="$2" my_pic_p="${3-no}" my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` my_dlsyms= if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then if test -n "$NM" && test -n "$global_symbol_pipe"; then my_dlsyms="${my_outputname}S.c" else func_error "not configured to extract global symbols from dlpreopened files" fi fi if test -n "$my_dlsyms"; then case $my_dlsyms in "") ;; *.c) # Discover the nlist of each of the dlfiles. nlist="$output_objdir/${my_outputname}.nm" func_show_eval "$RM $nlist ${nlist}S ${nlist}T" # Parse the name list into a source file. func_verbose "creating $output_objdir/$my_dlsyms" $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ /* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ /* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ #ifdef __cplusplus extern \"C\" { #endif #if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) #pragma GCC diagnostic ignored \"-Wstrict-prototypes\" #endif /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif /* External symbol declarations for the compiler. */\ " if test "$dlself" = yes; then func_verbose "generating symbol list for \`$output'" $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" # Add our own program objects to the symbol list. progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` for progfile in $progfiles; do func_to_tool_file "$progfile" func_convert_file_msys_to_w32 func_verbose "extracting global C symbols from \`$func_to_tool_file_result'" $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" done if test -n "$exclude_expsyms"; then $opt_dry_run || { eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi if test -n "$export_symbols_regex"; then $opt_dry_run || { eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi # Prepare the list of exported symbols if test -z "$export_symbols"; then export_symbols="$output_objdir/$outputname.exp" $opt_dry_run || { $RM $export_symbols eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' ;; esac } else $opt_dry_run || { eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' ;; esac } fi fi for dlprefile in $dlprefiles; do func_verbose "extracting global C symbols from \`$dlprefile'" func_basename "$dlprefile" name="$func_basename_result" case $host in *cygwin* | *mingw* | *cegcc* ) # if an import library, we need to obtain dlname if func_win32_import_lib_p "$dlprefile"; then func_tr_sh "$dlprefile" eval "curr_lafile=\$libfile_$func_tr_sh_result" dlprefile_dlbasename="" if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then # Use subshell, to avoid clobbering current variable values dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` if test -n "$dlprefile_dlname" ; then func_basename "$dlprefile_dlname" dlprefile_dlbasename="$func_basename_result" else # no lafile. user explicitly requested -dlpreopen . $sharedlib_from_linklib_cmd "$dlprefile" dlprefile_dlbasename=$sharedlib_from_linklib_result fi fi $opt_dry_run || { if test -n "$dlprefile_dlbasename" ; then eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' else func_warning "Could not compute DLL name from $name" eval '$ECHO ": $name " >> "$nlist"' fi func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" } else # not an import lib $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } fi ;; *) $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } ;; esac done $opt_dry_run || { # 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/$my_dlsyms"' else echo '/* NONE */' >> "$output_objdir/$my_dlsyms" fi echo >> "$output_objdir/$my_dlsyms" "\ /* The mapping between symbol names and symbols. */ typedef struct { const char *name; void *address; } lt_dlsymlist; extern LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[]; LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[] = {\ { \"$my_originator\", (void *) 0 }," case $need_lib_prefix in no) eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; *) eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; esac echo >> "$output_objdir/$my_dlsyms" "\ {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt_${my_prefix}_LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif\ " } # !$opt_dry_run pic_flag_for_symtable= case "$compile_command " in *" -static "*) ;; *) 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*) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; *-*-hpux*) pic_flag_for_symtable=" $pic_flag" ;; *) if test "X$my_pic_p" != Xno; then pic_flag_for_symtable=" $pic_flag" fi ;; esac ;; esac symtab_cflags= for arg in $LTCFLAGS; do case $arg in -pie | -fpie | -fPIE) ;; *) func_append symtab_cflags " $arg" ;; esac done # Now compile the dynamic symbol file. func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' # Clean up the generated files. func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' # Transform the symbol file into the correct name. symfileobj="$output_objdir/${my_outputname}S.$objext" case $host in *cygwin* | *mingw* | *cegcc* ) if test -f "$output_objdir/$my_outputname.def"; then compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` else compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` fi ;; *) compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` ;; esac ;; *-*-freebsd*) # FreeBSD doesn't need this... ;; *) func_fatal_error "unknown suffix for \`$my_dlsyms'" ;; 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 "$compile_command" | $SED "s% @SYMFILE@%%"` finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` fi } # 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. # Despite the name, also deal with 64 bit binaries. func_win32_libid () { $opt_debug 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 # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then func_to_tool_file "$1" func_convert_file_msys_to_w32 win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | $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_cygming_dll_for_implib ARG # # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib () { $opt_debug sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` } # func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs # # The is the core of a fallback implementation of a # platform-specific function to extract the name of the # DLL associated with the specified import library LIBNAME. # # SECTION_NAME is either .idata$6 or .idata$7, depending # on the platform and compiler that created the implib. # # Echos the name of the DLL associated with the # specified import library. func_cygming_dll_for_implib_fallback_core () { $opt_debug match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` $OBJDUMP -s --section "$1" "$2" 2>/dev/null | $SED '/^Contents of section '"$match_literal"':/{ # Place marker at beginning of archive member dllname section s/.*/====MARK====/ p d } # These lines can sometimes be longer than 43 characters, but # are always uninteresting /:[ ]*file format pe[i]\{,1\}-/d /^In archive [^:]*:/d # Ensure marker is printed /^====MARK====/p # Remove all lines with less than 43 characters /^.\{43\}/!d # From remaining lines, remove first 43 characters s/^.\{43\}//' | $SED -n ' # Join marker and all lines until next marker into a single line /^====MARK====/ b para H $ b para b :para x s/\n//g # Remove the marker s/^====MARK====// # Remove trailing dots and whitespace s/[\. \t]*$// # Print /./p' | # we now have a list, one entry per line, of the stringified # contents of the appropriate section of all members of the # archive which possess that section. Heuristic: eliminate # all those which have a first or second character that is # a '.' (that is, objdump's representation of an unprintable # character.) This should work for all archives with less than # 0x302f exports -- but will fail for DLLs whose name actually # begins with a literal '.' or a single character followed by # a '.'. # # Of those that remain, print the first one. $SED -e '/^\./d;/^.\./d;q' } # func_cygming_gnu_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is a GNU/binutils-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_gnu_implib_p () { $opt_debug func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` test -n "$func_cygming_gnu_implib_tmp" } # func_cygming_ms_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is an MS-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_ms_implib_p () { $opt_debug func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` test -n "$func_cygming_ms_implib_tmp" } # func_cygming_dll_for_implib_fallback ARG # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # # This fallback implementation is for use when $DLLTOOL # does not support the --identify-strict option. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib_fallback () { $opt_debug if func_cygming_gnu_implib_p "$1" ; then # binutils import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` elif func_cygming_ms_implib_p "$1" ; then # ms-generated import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` else # unknown sharedlib_from_linklib_result="" fi } # func_extract_an_archive dir oldlib func_extract_an_archive () { $opt_debug f_ex_an_ar_dir="$1"; shift f_ex_an_ar_oldlib="$1" if test "$lock_old_archive_extraction" = yes; then lockfile=$f_ex_an_ar_oldlib.lock until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done fi func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 'stat=$?; rm -f "$lockfile"; exit $stat' if test "$lock_old_archive_extraction" = yes; then $opt_dry_run || rm -f "$lockfile" fi if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then : else func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" fi } # func_extract_archives gentop oldlib ... func_extract_archives () { $opt_debug my_gentop="$1"; shift my_oldlibs=${1+"$@"} my_oldobjs="" my_xlib="" my_xabs="" my_xdir="" 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 func_basename "$my_xlib" my_xlib="$func_basename_result" my_xlib_u=$my_xlib while :; do case " $extracted_archives " in *" $my_xlib_u "*) func_arith $extracted_serial + 1 extracted_serial=$func_arith_result 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" func_mkdir_p "$my_xdir" case $host in *-darwin*) func_verbose "Extracting $my_xabs" # Do not bother doing anything if just a dry run $opt_dry_run || { darwin_orig_dir=`pwd` cd $my_xdir || exit $? darwin_archive=$my_xabs darwin_curdir=`pwd` darwin_base_archive=`basename "$darwin_archive"` darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` if test -n "$darwin_arches"; then darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` darwin_arch= func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" for darwin_arch in $darwin_arches ; do func_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've a bunch of thin objects, gotta fatten them up :) darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` darwin_file= darwin_files= for darwin_file in $darwin_filelist; do darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` $LIPO -create -output "$darwin_file" $darwin_files done # $darwin_filelist $RM -rf unfat-$$ cd "$darwin_orig_dir" else cd $darwin_orig_dir func_extract_an_archive "$my_xdir" "$my_xabs" fi # $darwin_arches } # !$opt_dry_run ;; *) func_extract_an_archive "$my_xdir" "$my_xabs" ;; esac my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` done func_extract_archives_result="$my_oldobjs" } # func_emit_wrapper [arg=no] # # Emit a libtool wrapper script on stdout. # Don't directly open a file because we may want to # incorporate the script contents within a cygwin/mingw # wrapper executable. Must ONLY be called from within # func_mode_link because it depends on a number of variables # set therein. # # ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR # variable will take. If 'yes', then the emitted script # will assume that the directory in which it is stored is # the $objdir directory. This is a cygwin/mingw-specific # behavior. func_emit_wrapper () { func_emit_wrapper_arg1=${1-no} $ECHO "\ #! $SHELL # $output - temporary wrapper script for $objdir/$outputname # Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION # # 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. sed_quote_subst='$sed_quote_subst' # Be Bourne compatible if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' 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 variables: generated_by_libtool_version='$macro_version' 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 file=\"\$0\"" qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` $ECHO "\ # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } ECHO=\"$qECHO\" fi # Very basic option parsing. These options are (a) specific to # the libtool wrapper, (b) are identical between the wrapper # /script/ and the wrapper /executable/ which is used only on # windows platforms, and (c) all begin with the string "--lt-" # (application programs are unlikely to have options which match # this pattern). # # There are only two supported options: --lt-debug and # --lt-dump-script. There is, deliberately, no --lt-help. # # The first argument to this parsing function should be the # script's $0 value, followed by "$@". lt_option_debug= func_parse_lt_options () { lt_script_arg0=\$0 shift for lt_opt do case \"\$lt_opt\" in --lt-debug) lt_option_debug=1 ;; --lt-dump-script) lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` cat \"\$lt_dump_D/\$lt_dump_F\" exit 0 ;; --lt-*) \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 exit 1 ;; esac done # Print the debug banner immediately: if test -n \"\$lt_option_debug\"; then echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2 fi } # Used when --lt-debug. Prints its arguments to stdout # (redirection is the responsibility of the caller) func_lt_dump_args () { lt_dump_args_N=1; for lt_arg do \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\" lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` done } # Core function for launching the target application func_exec_program_core () { " case $host in # Backslashes separate directories on plain windows *-*-mingw | *-*-os2* | *-cegcc*) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} " ;; *) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir/\$program\" \${1+\"\$@\"} " ;; esac $ECHO "\ \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 exit 1 } # A function to encapsulate launching the target application # Strips options in the --lt-* namespace from \$@ and # launches target application with the remaining arguments. func_exec_program () { case \" \$* \" in *\\ --lt-*) for lt_wr_arg do case \$lt_wr_arg in --lt-*) ;; *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; esac shift done ;; esac func_exec_program_core \${1+\"\$@\"} } # Parse options func_parse_lt_options \"\$0\" \${1+\"\$@\"} # Find the directory that this script lives in. thisdir=\`\$ECHO \"\$file\" | $SED '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 \"\$file\" | $SED '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 \"\$file\" | $SED 's%^.*/%%'\` file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` done # Usually 'no', except on cygwin/mingw when embedded into # the cwrapper. WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then # special case for '.' if test \"\$thisdir\" = \".\"; then thisdir=\`pwd\` fi # remove .libs from thisdir case \"\$thisdir\" in *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; $objdir ) thisdir=. ;; esac fi # Try to get the absolute directory name. absdir=\`cd \"\$thisdir\" && pwd\` test -n \"\$absdir\" && thisdir=\"\$absdir\" " if test "$fast_install" = yes; then $ECHO "\ 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 "\ # 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 1 fi fi $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || { $RM \"\$progdir/\$program\"; $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } $RM \"\$progdir/\$file\" fi" else $ECHO "\ program='$outputname' progdir=\"\$thisdir/$objdir\" " fi $ECHO "\ if test -f \"\$progdir/\$program\"; then" # fixup the dll searchpath if we need to. # # Fix the DLL searchpath if we need to. Do this before prepending # to shlibpath, because on Windows, both are PATH and uninstalled # libraries must come first. if test -n "$dllsearchpath"; then $ECHO "\ # Add the dll search path components to the executable PATH PATH=$dllsearchpath:\$PATH " fi # Export our shlibpath_var if we have one. if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $ECHO "\ # 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 \"\$$shlibpath_var\" | $SED 's/::*\$//'\` export $shlibpath_var " fi $ECHO "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. func_exec_program \${1+\"\$@\"} 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 1 fi fi\ " } # func_emit_cwrapperexe_src # emit the source code for a wrapper executable on stdout # Must ONLY be called from within func_mode_link because # it depends on a number of variable set therein. func_emit_cwrapperexe_src () { cat < #include #ifdef _MSC_VER # include # include # include #else # include # include # ifdef __CYGWIN__ # include # endif #endif #include #include #include #include #include #include #include #include /* declarations of non-ANSI functions */ #if defined(__MINGW32__) # ifdef __STRICT_ANSI__ int _putenv (const char *); # endif #elif defined(__CYGWIN__) # ifdef __STRICT_ANSI__ char *realpath (const char *, char *); int putenv (char *); int setenv (const char *, const char *, int); # endif /* #elif defined (other platforms) ... */ #endif /* portability defines, excluding path handling macros */ #if defined(_MSC_VER) # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv # define S_IXUSR _S_IEXEC # ifndef _INTPTR_T_DEFINED # define _INTPTR_T_DEFINED # define intptr_t int # endif #elif defined(__MINGW32__) # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv #elif defined(__CYGWIN__) # define HAVE_SETENV # define FOPEN_WB "wb" /* #elif defined (other platforms) ... */ #endif #if defined(PATH_MAX) # define LT_PATHMAX PATH_MAX #elif defined(MAXPATHLEN) # define LT_PATHMAX MAXPATHLEN #else # define LT_PATHMAX 1024 #endif #ifndef S_IXOTH # define S_IXOTH 0 #endif #ifndef S_IXGRP # define S_IXGRP 0 #endif /* path handling portability macros */ #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 # define FOPEN_WB "wb" # 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 */ #ifndef FOPEN_WB # define FOPEN_WB "w" #endif #ifndef _O_BINARY # define _O_BINARY 0 #endif #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) #define XFREE(stale) do { \ if (stale) { free ((void *) stale); stale = 0; } \ } while (0) #if defined(LT_DEBUGWRAPPER) static int lt_debug = 1; #else static int lt_debug = 0; #endif const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ void *xmalloc (size_t num); char *xstrdup (const char *string); const char *base_name (const char *name); char *find_executable (const char *wrapper); char *chase_symlinks (const char *pathspec); int make_executable (const char *path); int check_executable (const char *path); char *strendzap (char *str, const char *pat); void lt_debugprintf (const char *file, int line, const char *fmt, ...); void lt_fatal (const char *file, int line, const char *message, ...); static const char *nonnull (const char *s); static const char *nonempty (const char *s); void lt_setenv (const char *name, const char *value); char *lt_extend_str (const char *orig_value, const char *add, int to_end); void lt_update_exe_path (const char *name, const char *value); void lt_update_lib_path (const char *name, const char *value); char **prepare_spawn (char **argv); void lt_dump_script (FILE *f); EOF cat <= 0) && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) return 1; else return 0; } int make_executable (const char *path) { int rval = 0; struct stat st; lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", nonempty (path)); if ((!path) || (!*path)) return 0; if (stat (path, &st) >= 0) { rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); } return rval; } /* Searches for the full path of the wrapper. Returns newly allocated full path name if found, NULL otherwise Does not chase symlinks, even on platforms that support them. */ 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; lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", nonempty (wrapper)); 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 (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); 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 (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); 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 * chase_symlinks (const char *pathspec) { #ifndef S_ISLNK return xstrdup (pathspec); #else char buf[LT_PATHMAX]; struct stat s; char *tmp_pathspec = xstrdup (pathspec); char *p; int has_symlinks = 0; while (strlen (tmp_pathspec) && !has_symlinks) { lt_debugprintf (__FILE__, __LINE__, "checking path component for symlinks: %s\n", tmp_pathspec); if (lstat (tmp_pathspec, &s) == 0) { if (S_ISLNK (s.st_mode) != 0) { has_symlinks = 1; break; } /* search backwards for last DIR_SEPARATOR */ p = tmp_pathspec + strlen (tmp_pathspec) - 1; while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) p--; if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) { /* no more DIR_SEPARATORS left */ break; } *p = '\0'; } else { lt_fatal (__FILE__, __LINE__, "error accessing file \"%s\": %s", tmp_pathspec, nonnull (strerror (errno))); } } XFREE (tmp_pathspec); if (!has_symlinks) { return xstrdup (pathspec); } tmp_pathspec = realpath (pathspec, buf); if (tmp_pathspec == 0) { lt_fatal (__FILE__, __LINE__, "could not follow symlinks for %s", pathspec); } return xstrdup (tmp_pathspec); #endif } 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; } void lt_debugprintf (const char *file, int line, const char *fmt, ...) { va_list args; if (lt_debug) { (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); va_start (args, fmt); (void) vfprintf (stderr, fmt, args); va_end (args); } } static void lt_error_core (int exit_status, const char *file, int line, const char *mode, const char *message, va_list ap) { fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); vfprintf (stderr, message, ap); fprintf (stderr, ".\n"); if (exit_status >= 0) exit (exit_status); } void lt_fatal (const char *file, int line, const char *message, ...) { va_list ap; va_start (ap, message); lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); va_end (ap); } static const char * nonnull (const char *s) { return s ? s : "(null)"; } static const char * nonempty (const char *s) { return (s && !*s) ? "(empty)" : nonnull (s); } void lt_setenv (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_setenv) setting '%s' to '%s'\n", nonnull (name), nonnull (value)); { #ifdef HAVE_SETENV /* always make a copy, for consistency with !HAVE_SETENV */ char *str = xstrdup (value); setenv (name, str, 1); #else int len = strlen (name) + 1 + strlen (value) + 1; char *str = XMALLOC (char, len); sprintf (str, "%s=%s", name, value); if (putenv (str) != EXIT_SUCCESS) { XFREE (str); } #endif } } char * lt_extend_str (const char *orig_value, const char *add, int to_end) { char *new_value; if (orig_value && *orig_value) { int orig_value_len = strlen (orig_value); int add_len = strlen (add); new_value = XMALLOC (char, add_len + orig_value_len + 1); if (to_end) { strcpy (new_value, orig_value); strcpy (new_value + orig_value_len, add); } else { strcpy (new_value, add); strcpy (new_value + add_len, orig_value); } } else { new_value = xstrdup (add); } return new_value; } void lt_update_exe_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); /* some systems can't cope with a ':'-terminated path #' */ int len = strlen (new_value); while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) { new_value[len-1] = '\0'; } lt_setenv (name, new_value); XFREE (new_value); } } void lt_update_lib_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); lt_setenv (name, new_value); XFREE (new_value); } } EOF case $host_os in mingw*) cat <<"EOF" /* Prepares an argument vector before calling spawn(). Note that spawn() does not by itself call the command interpreter (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx(&v); v.dwPlatformId == VER_PLATFORM_WIN32_NT; }) ? "cmd.exe" : "command.com"). Instead it simply concatenates the arguments, separated by ' ', and calls CreateProcess(). We must quote the arguments since Win32 CreateProcess() interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a special way: - Space and tab are interpreted as delimiters. They are not treated as delimiters if they are surrounded by double quotes: "...". - Unescaped double quotes are removed from the input. Their only effect is that within double quotes, space and tab are treated like normal characters. - Backslashes not followed by double quotes are not special. - But 2*n+1 backslashes followed by a double quote become n backslashes followed by a double quote (n >= 0): \" -> " \\\" -> \" \\\\\" -> \\" */ #define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" #define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" char ** prepare_spawn (char **argv) { size_t argc; char **new_argv; size_t i; /* Count number of arguments. */ for (argc = 0; argv[argc] != NULL; argc++) ; /* Allocate new argument vector. */ new_argv = XMALLOC (char *, argc + 1); /* Put quoted arguments into the new argument vector. */ for (i = 0; i < argc; i++) { const char *string = argv[i]; if (string[0] == '\0') new_argv[i] = xstrdup ("\"\""); else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) { int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); size_t length; unsigned int backslashes; const char *s; char *quoted_string; char *p; length = 0; backslashes = 0; if (quote_around) length++; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') length += backslashes + 1; length++; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) length += backslashes + 1; quoted_string = XMALLOC (char, length + 1); p = quoted_string; backslashes = 0; if (quote_around) *p++ = '"'; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') { unsigned int j; for (j = backslashes + 1; j > 0; j--) *p++ = '\\'; } *p++ = c; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) { unsigned int j; for (j = backslashes; j > 0; j--) *p++ = '\\'; *p++ = '"'; } *p = '\0'; new_argv[i] = quoted_string; } else new_argv[i] = (char *) string; } new_argv[argc] = NULL; return new_argv; } EOF ;; esac cat <<"EOF" void lt_dump_script (FILE* f) { EOF func_emit_wrapper yes | $SED -n -e ' s/^\(.\{79\}\)\(..*\)/\1\ \2/ h s/\([\\"]\)/\\\1/g s/$/\\n/ s/\([^\n]*\).*/ fputs ("\1", f);/p g D' cat <<"EOF" } EOF } # end: func_emit_cwrapperexe_src # func_win32_import_lib_p ARG # True if ARG is an import lib, as indicated by $file_magic_cmd func_win32_import_lib_p () { $opt_debug case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in *import*) : ;; *) false ;; esac } # func_mode_link arg... func_mode_link () { $opt_debug case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) # It is impossible to link a dll without this setting, and # we shouldn't force the makefile maintainer to figure out # which system we are compiling for in order to pass an extra # flag for every libtool invocation. # allow_undefined=no # FIXME: Unfortunately, there are problems with the above when trying # to make a dll which has undefined symbols, in which case not # even a static library is built. For now, we need to specify # -no-undefined on the libtool link line when we can be certain # that all symbols are satisfied, otherwise we get a static library. allow_undefined=yes ;; *) allow_undefined=yes ;; esac libtool_args=$nonopt base_compile="$nonopt $@" compile_command=$nonopt finalize_command=$nonopt compile_rpath= finalize_rpath= compile_shlibpath= finalize_shlibpath= convenience= old_convenience= deplibs= old_deplibs= compiler_flags= linker_flags= dllsearchpath= lib_search_path=`pwd` inst_prefix_dir= new_inherited_linker_flags= avoid_version=no bindir= dlfiles= dlprefiles= dlself=no export_dynamic=no export_symbols= export_symbols_regex= generated= libobjs= ltlibs= module=no no_install=no objs= non_pic_objects= precious_files_regex= prefer_static_libs=no preload=no prev= prevarg= release= rpath= xrpath= perm_rpath= temp_rpath= thread_safe=no vinfo= vinfo_number=no weak_libs= single_module="${wl}-single_module" func_infer_tag $base_compile # We need to know -static, to get the right output filenames. for arg do case $arg in -shared) test "$build_libtool_libs" != yes && \ func_fatal_configuration "can not build a shared library" build_old_libs=no break ;; -all-static | -static | -static-libtool-libs) case $arg in -all-static) if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then func_warning "complete static linking is impossible in this configuration" 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 func_quote_for_eval "$arg" qarg=$func_quote_for_eval_unquoted_result func_append libtool_args " $func_quote_for_eval_result" # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in output) func_append compile_command " @OUTPUT@" func_append finalize_command " @OUTPUT@" ;; esac case $prev in bindir) bindir="$arg" prev= continue ;; dlfiles|dlprefiles) if test "$preload" = no; then # Add the symbol object into the linking commands. func_append compile_command " @SYMFILE@" func_append 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 func_append dlfiles " $arg" else func_append dlprefiles " $arg" fi prev= continue ;; esac ;; expsyms) export_symbols="$arg" test -f "$arg" \ || func_fatal_error "symbol file \`$arg' does not exist" prev= continue ;; expsyms_regex) export_symbols_regex="$arg" prev= continue ;; framework) case $host in *-*-darwin*) case "$deplibs " in *" $qarg.ltframework "*) ;; *) func_append deplibs " $qarg.ltframework" # this is fixed later ;; esac ;; esac prev= continue ;; inst_prefix) inst_prefix_dir="$arg" prev= continue ;; objectlist) if test -f "$arg"; then save_arg=$arg moreargs= for fil in `cat "$save_arg"` do # func_append moreargs " $fil" arg=$fil # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test "$pic_object" = none && test "$non_pic_object" = none; then func_fatal_error "cannot find name of object for \`$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" 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 func_append 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. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append 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 func_append 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" func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "\`$arg' is not a valid libtool object" fi fi done else func_fatal_error "link input file \`$arg' does not exist" fi arg=$save_arg prev= continue ;; precious_regex) precious_files_regex="$arg" prev= continue ;; release) release="-$arg" prev= continue ;; rpath | xrpath) # We need an absolute path. case $arg in [\\/]* | [A-Za-z]:[\\/]*) ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac if test "$prev" = rpath; then case "$rpath " in *" $arg "*) ;; *) func_append rpath " $arg" ;; esac else case "$xrpath " in *" $arg "*) ;; *) func_append xrpath " $arg" ;; esac fi prev= continue ;; shrext) shrext_cmds="$arg" prev= continue ;; weak) func_append weak_libs " $arg" prev= continue ;; xcclinker) func_append linker_flags " $qarg" func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xcompiler) func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xlinker) func_append linker_flags " $qarg" func_append compiler_flags " $wl$qarg" prev= func_append compile_command " $wl$qarg" func_append finalize_command " $wl$qarg" 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 # See comment for -static flag below, for more details. func_append compile_command " $link_static_flag" func_append finalize_command " $link_static_flag" fi continue ;; -allow-undefined) # FIXME: remove this flag sometime in the future. func_fatal_error "\`-allow-undefined' must not be used because it is the default" ;; -avoid-version) avoid_version=yes continue ;; -bindir) prev=bindir 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 func_fatal_error "more than one -exported-symbols argument is not allowed" fi if test "X$arg" = "X-export-symbols"; then prev=expsyms else prev=expsyms_regex fi continue ;; -framework) prev=framework 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*) func_append compile_command " $arg" func_append finalize_command " $arg" ;; esac continue ;; -L*) func_stripname "-L" '' "$arg" if test -z "$func_stripname_result"; then if test "$#" -gt 0; then func_fatal_error "require no space between \`-L' and \`$1'" else func_fatal_error "need path for \`-L' option" fi fi func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) absdir=`cd "$dir" && pwd` test -z "$absdir" && \ func_fatal_error "cannot determine absolute directory name of \`$dir'" dir="$absdir" ;; esac case "$deplibs " in *" -L$dir "* | *" $arg "*) # Will only happen for absolute or sysroot arguments ;; *) # Preserve sysroot, but never include relative directories case $dir in [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; *) func_append deplibs " -L$dir" ;; esac func_append lib_search_path " $dir" ;; esac case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` case :$dllsearchpath: in *":$dir:"*) ;; ::) dllsearchpath=$dir;; *) func_append dllsearchpath ":$dir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac deplibs="$deplibs $arg" continue ;; -l*) if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) # 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 func_append deplibs " System.ltframework" 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 func_append deplibs " $arg" continue ;; -module) module=yes continue ;; # Tru64 UNIX uses -model [arg] to determine the layout of C++ # classes, name mangling, and exception handling. # Darwin uses the -arch flag to determine output architecture. -model|-arch|-isysroot|--sysroot) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" prev=xcompiler continue ;; -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" case "$new_inherited_linker_flags " in *" $arg "*) ;; * ) func_append new_inherited_linker_flags " $arg" ;; esac continue ;; -multi_module) single_module="${wl}-multi_module" continue ;; -no-fast-install) fast_install=no continue ;; -no-install) case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) # The PATH hackery in wrapper scripts is required on Windows # and Darwin in order for the loader to find any dlls it needs. func_warning "\`-no-install' is ignored for $host" func_warning "assuming \`-no-fast-install' instead" 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*) func_stripname '-R' '' "$arg" dir=$func_stripname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; =*) func_stripname '=' '' "$dir" dir=$lt_sysroot$func_stripname_result ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac continue ;; -shared) # The effects of -shared are defined in a previous loop. continue ;; -shrext) prev=shrext 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 ;; -weak) prev=weak continue ;; -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" func_quote_for_eval "$flag" func_append arg " $func_quote_for_eval_result" func_append compiler_flags " $func_quote_for_eval_result" done IFS="$save_ifs" func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Wl,*) func_stripname '-Wl,' '' "$arg" args=$func_stripname_result arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" func_quote_for_eval "$flag" func_append arg " $wl$func_quote_for_eval_result" func_append compiler_flags " $wl$func_quote_for_eval_result" func_append linker_flags " $func_quote_for_eval_result" done IFS="$save_ifs" func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Xcompiler) prev=xcompiler continue ;; -Xlinker) prev=xlinker continue ;; -XCClinker) prev=xcclinker continue ;; # -msg_* for osf cc -msg_*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; # Flags to be passed through unchanged, with rationale: # -64, -mips[0-9] enable 64-bit mode for the SGI compiler # -r[0-9][0-9]* specify processor for the SGI compiler # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler # +DA*, +DD* enable 64-bit mode for the HP compiler # -q* compiler args for the IBM compiler # -m*, -t[45]*, -txscale* architecture-specific flags for GCC # -F/path path to uninstalled frameworks, gcc on darwin # -p, -pg, --coverage, -fprofile-* profiling flags for GCC # @file GCC response files # -tp=* Portland pgcc target processor selection # --sysroot=* for sysroot support # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ -O*|-flto*|-fwhopr*|-fuse-linker-plugin) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" func_append compile_command " $arg" func_append finalize_command " $arg" func_append compiler_flags " $arg" continue ;; # Some other compiler flag. -* | +*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; *.$objext) # A standard object. func_append objs " $arg" ;; *.lo) # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test "$pic_object" = none && test "$non_pic_object" = none; then func_fatal_error "cannot find name of object for \`$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" 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 func_append 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. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append 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 func_append 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" func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "\`$arg' is not a valid libtool object" fi fi ;; *.$libext) # An archive. func_append deplibs " $arg" func_append old_deplibs " $arg" continue ;; *.la) # A libtool-controlled library. func_resolve_sysroot "$arg" if test "$prev" = dlfiles; then # This library was specified with -dlopen. func_append dlfiles " $func_resolve_sysroot_result" prev= elif test "$prev" = dlprefiles; then # The library was specified with -dlpreopen. func_append dlprefiles " $func_resolve_sysroot_result" prev= else func_append deplibs " $func_resolve_sysroot_result" 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. func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; esac # arg # Now actually substitute the argument into the commands. if test -n "$arg"; then func_append compile_command " $arg" func_append finalize_command " $arg" fi done # argument parsing loop test -n "$prev" && \ func_fatal_help "the \`$prevarg' option requires an argument" if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then eval arg=\"$export_dynamic_flag_spec\" func_append compile_command " $arg" func_append finalize_command " $arg" fi oldlibs= # calculate the name of the file, without its directory func_basename "$output" outputname="$func_basename_result" libobjs_save="$libobjs" if test -n "$shlibpath_var"; then # get the directories listed in $shlibpath_var eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'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\" func_dirname "$output" "/" "" output_objdir="$func_dirname_result$objdir" func_to_tool_file "$output_objdir/" tool_output_objdir=$func_to_tool_file_result # Create the object directory. func_mkdir_p "$output_objdir" # Determine the type of output case $output in "") func_fatal_help "you must specify an output file" ;; *.$libext) linkmode=oldlib ;; *.lo | *.$objext) linkmode=obj ;; *.la) linkmode=lib ;; *) linkmode=prog ;; # Anything else should be a program. 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 $opt_preserve_dup_deps ; then case "$libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append 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 $opt_duplicate_compiler_generated_deps; then for pre_post_dep in $predeps $postdeps; do case "$pre_post_deps " in *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; esac func_append 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 notinst_path= # paths that contain not-installed libtool libraries case $linkmode in lib) passes="conv dlpreopen link" for file in $dlfiles $dlprefiles; do case $file in *.la) ;; *) func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" ;; 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 # The preopen pass in lib mode reverses $deplibs; put it back here # so that -L comes before libs that need it for instance... if test "$linkmode,$pass" = "lib,link"; then ## FIXME: Find the place where the list is rebuilt in the wrong ## order, and fix it there properly tmp_deplibs= for deplib in $deplibs; do tmp_deplibs="$deplib $tmp_deplibs" done deplibs="$tmp_deplibs" fi 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 "$linkmode,$pass" = "lib,dlpreopen"; then # Collect and forward deplibs of preopened libtool libs for lib in $dlprefiles; do # Ignore non-libtool-libs dependency_libs= func_resolve_sysroot "$lib" case $lib in *.la) func_source "$func_resolve_sysroot_result" ;; esac # Collect preopened libtool deplibs, except any this library # has declared as weak libs for deplib in $dependency_libs; do func_basename "$deplib" deplib_base=$func_basename_result case " $weak_libs " in *" $deplib_base "*) ;; *) func_append deplibs " $deplib" ;; esac done done libs="$dlprefiles" 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|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append compiler_flags " $deplib" fi 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 # linkmode continue ;; -l*) if test "$linkmode" != lib && test "$linkmode" != prog; then func_warning "\`-l' is ignored for archives/objects" continue fi func_stripname '-l' '' "$deplib" name=$func_stripname_result if test "$linkmode" = lib; then searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" else searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" fi for searchdir in $searchdirs; 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 func_lalib_p "$lib"; then library_names= old_library= func_source "$lib" 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 func_dirname "$lib" "" "." ladir="$func_dirname_result" 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 *.ltframework) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" if test "$linkmode" = lib ; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -L*) case $linkmode in lib) deplibs="$deplib $deplibs" test "$pass" = conv && continue newdependency_libs="$deplib $newdependency_libs" func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; 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 func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; *) func_warning "\`-L' is ignored for archives/objects" ;; esac # linkmode continue ;; # -L -R*) if test "$pass" = link; then func_stripname '-R' '' "$deplib" func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # Make sure the xrpath contains only unique directories. case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac fi deplibs="$deplib $deplibs" continue ;; *.la) func_resolve_sysroot "$deplib" lib=$func_resolve_sysroot_result ;; *.$libext) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi case $linkmode in lib) # Linking convenience modules into shared libraries is allowed, # but linking other static libraries is non-portable. case " $dlpreconveniencelibs " in *" $deplib "*) ;; *) valid_a_lib=no case $deplibs_check_method in match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 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 use here." else echo $ECHO "*** Warning: Linking the shared library $output against the" $ECHO "*** static library $deplib is not portable!" deplibs="$deplib $deplibs" fi ;; esac 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. func_append newdlprefiles " $deplib" compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append newdlfiles " $deplib" fi fi continue ;; %DEPLIBS%) alldeplibs=yes continue ;; esac # case $deplib if test "$found" = yes || test -f "$lib"; then : else func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" fi # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$lib" \ || func_fatal_error "\`$lib' is not a valid libtool archive" func_dirname "$lib" "" "." ladir="$func_dirname_result" dlname= dlopen= dlpreopen= libdir= library_names= old_library= inherited_linker_flags= # 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 func_source "$lib" # Convert "-framework foo" to "foo.ltframework" if test -n "$inherited_linker_flags"; then tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do case " $new_inherited_linker_flags " in *" $tmp_inherited_linker_flag "*) ;; *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; esac done fi dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan" || { test "$linkmode" != prog && test "$linkmode" != lib; }; then test -n "$dlopen" && func_append dlfiles " $dlopen" test -n "$dlpreopen" && func_append 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 func_fatal_error "cannot find name of link library for \`$lib'" fi # It is a libtool convenience library, so add in its objects. func_append convenience " $ladir/$objdir/$old_library" func_append old_convenience " $ladir/$objdir/$old_library" elif test "$linkmode" != prog && test "$linkmode" != lib; then func_fatal_error "\`$lib' is not a convenience library" fi tmp_libs= for deplib in $dependency_libs; do deplibs="$deplib $deplibs" if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done continue fi # $pass = conv # Get the name of the library we link against. linklib= if test -n "$old_library" && { test "$prefer_static_libs" = yes || test "$prefer_static_libs,$installed" = "built,no"; }; then linklib=$old_library else for l in $old_library $library_names; do linklib="$l" done fi if test -z "$linklib"; then func_fatal_error "cannot find name of link library for \`$lib'" fi # This library was specified with -dlopen. if test "$pass" = dlopen; then if test -z "$libdir"; then func_fatal_error "cannot -dlopen a convenience library: \`$lib'" 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. func_append dlprefiles " $lib $dependency_libs" else func_append 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 func_warning "cannot determine absolute directory name of \`$ladir'" func_warning "passing it literally to the linker, although it might fail" abs_ladir="$ladir" fi ;; esac func_basename "$lib" laname="$func_basename_result" # Find the relevant object directory and library name. if test "X$installed" = Xyes; then if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then func_warning "library \`$lib' was moved." dir="$ladir" absdir="$abs_ladir" libdir="$abs_ladir" else dir="$lt_sysroot$libdir" absdir="$lt_sysroot$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 func_append notinst_path " $abs_ladir" else dir="$ladir/$objdir" absdir="$abs_ladir/$objdir" # Remove this search path later func_append notinst_path " $abs_ladir" fi fi # $installed = yes func_stripname 'lib' '.la' "$laname" name=$func_stripname_result # This library was specified with -dlpreopen. if test "$pass" = dlpreopen; then if test -z "$libdir" && test "$linkmode" = prog; then func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" fi case "$host" in # special handling for platforms with PE-DLLs. *cygwin* | *mingw* | *cegcc* ) # Linker will automatically link against shared library if both # static and shared are present. Therefore, ensure we extract # symbols from the import library if a shared library is present # (otherwise, the dlopen module name will be incorrect). We do # this by putting the import library name into $newdlprefiles. # We recover the dlopen module name by 'saving' the la file # name in a special purpose variable, and (later) extracting the # dlname from the la file. if test -n "$dlname"; then func_tr_sh "$dir/$linklib" eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" func_append newdlprefiles " $dir/$linklib" else func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" fi ;; * ) # Prefer using a static library (so that no silly _DYNAMIC symbols # are required to link). if test -n "$old_library"; then func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" # Otherwise, use the dlname, so that lt_dlopen finds it. elif test -n "$dlname"; then func_append newdlprefiles " $dir/$dlname" else func_append newdlprefiles " $dir/$linklib" fi ;; esac 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 func_append 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*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; 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 $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append 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 *"$absdir:"*) ;; *) func_append 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 "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append 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 case $host in *cygwin* | *mingw* | *cegcc*) # No point in relinking DLLs because paths are not encoded func_append notinst_deplibs " $lib" need_relink=no ;; *) if test "$installed" = no; then func_append notinst_deplibs " $lib" need_relink=yes fi ;; esac # This is a shared library # Warn about portability, can't link against -module's on some # systems (darwin). Don't bleat about dlopened modules though! dlopenmodule="" for dlpremoduletest in $dlprefiles; do if test "X$dlpremoduletest" = "X$lib"; then dlopenmodule="$dlpremoduletest" break fi done if test -z "$dlopenmodule" && 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 "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi if test -n "$old_archive_from_expsyms_cmds"; then # figure out the soname set dummy $library_names shift realname="$1" 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* | *cegcc*) func_arith $current - $age major=$func_arith_result versuffix="-$major" ;; esac eval soname=\"$soname_spec\" else soname="$realname" fi # Make a new name for the extract_expsyms_cmds to use soroot="$soname" func_basename "$soroot" soname="$func_basename_result" func_stripname 'lib' '.dll' "$soname" newlib=libimp-$func_stripname_result.a # If the library has no export list, then create one now if test -f "$output_objdir/$soname-def"; then : else func_verbose "extracting exported symbol list from \`$soname'" func_execute_cmds "$extract_expsyms_cmds" 'exit $?' fi # Create $newlib if test -f "$output_objdir/$newlib"; then :; else func_verbose "generating import library for \`$soname'" func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' 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 "$opt_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 (non-dlopened) module then we can not # link against it, someone is ignoring the earlier warnings if /usr/bin/file -L $add 2> /dev/null | $GREP ": [^:]* bundle" >/dev/null ; then if test "X$dlopenmodule" != "X$lib"; 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 elif test -n "$old_library"; then 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 && test "$hardcode_direct_absolute" = no; then add="$dir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$absdir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append 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 func_fatal_configuration "unsupported hardcode properties" fi if test -n "$add_shlibpath"; then case :$compile_shlibpath: in *":$add_shlibpath:"*) ;; *) func_append 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:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac fi fi fi if test "$linkmode" = prog || test "$opt_mode" = relink; then add_shlibpath= add_dir= add= # Finalize command for both is simple: just hardcode it. if test "$hardcode_direct" = yes && test "$hardcode_direct_absolute" = no; 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:"*) ;; *) func_append 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 [\\/]*) func_append 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*) func_stripname '-R' '' "$libdir" temp_xrpath=$func_stripname_result case " $xrpath " in *" $temp_xrpath "*) ;; *) func_append xrpath " $temp_xrpath";; esac;; *) func_append temp_deplibs " $libdir";; esac done dependency_libs="$temp_deplibs" fi func_append 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" case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result";; *) func_resolve_sysroot "$deplib" ;; esac if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $func_resolve_sysroot_result "*) func_append specialdeplibs " $func_resolve_sysroot_result" ;; esac fi func_append tmp_libs " $func_resolve_sysroot_result" done if test "$link_all_deplibs" != no; then # Add the search paths of all dependency libraries for deplib in $dependency_libs; do path= case $deplib in -L*) path="$deplib" ;; *.la) func_resolve_sysroot "$deplib" deplib=$func_resolve_sysroot_result func_dirname "$deplib" "" "." dir=$func_dirname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then func_warning "cannot determine absolute directory name of \`$dir'" absdir="$dir" fi ;; esac if $GREP "^installed=no" $deplib > /dev/null; then case $host in *-*-darwin*) depdepl= 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 "$absdir/$objdir/$depdepl" ; then depdepl="$absdir/$objdir/$depdepl" darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` if test -z "$darwin_install_name"; then darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` fi func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}" path= fi fi ;; *) path="-L$absdir/$objdir" ;; esac else eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` test -z "$libdir" && \ func_fatal_error "\`$deplib' is not a valid libtool archive" test "$absdir" != "$libdir" && \ func_warning "\`$deplib' seems to be moved" path="-L$absdir" fi ;; esac case " $deplibs " in *" $path "*) ;; *) deplibs="$path $deplibs" ;; esac done fi # link_all_deplibs != no fi # linkmode = lib done # for deplib in $libs if test "$pass" = link; then if test "$linkmode" = "prog"; then compile_deplibs="$new_inherited_linker_flags $compile_deplibs" finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" else compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` fi fi 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 "*) ;; *) func_append 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 "*) ;; *) func_append tmp_libs " $deplib" ;; esac ;; *) func_append 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 func_append tmp_libs " $i" fi done dependency_libs=$tmp_libs done # for pass if test "$linkmode" = prog; then dlfiles="$newdlfiles" fi if test "$linkmode" = prog || test "$linkmode" = lib; then dlprefiles="$newdlprefiles" fi case $linkmode in oldlib) if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then func_warning "\`-dlopen' is ignored for archives" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "\`-l' and \`-L' are ignored for archives" ;; esac test -n "$rpath" && \ func_warning "\`-rpath' is ignored for archives" test -n "$xrpath" && \ func_warning "\`-R' is ignored for archives" test -n "$vinfo" && \ func_warning "\`-version-info/-version-number' is ignored for archives" test -n "$release" && \ func_warning "\`-release' is ignored for archives" test -n "$export_symbols$export_symbols_regex" && \ func_warning "\`-export-symbols' is ignored for archives" # Now set the variables for building old libraries. build_libtool_libs=no oldlibs="$output" func_append objs "$old_deplibs" ;; lib) # Make sure we only generate libraries of the form `libNAME.la'. case $outputname in lib*) func_stripname 'lib' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" ;; *) test "$module" = no && \ func_fatal_help "libtool library \`$output' must begin with \`lib'" if test "$need_lib_prefix" != no; then # Add the "lib" prefix for modules if required func_stripname '' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" else func_stripname '' '.la' "$outputname" libname=$func_stripname_result fi ;; esac if test -n "$objs"; then if test "$deplibs_check_method" != pass_all; then func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" else echo $ECHO "*** Warning: Linking the shared library $output against the non-libtool" $ECHO "*** objects $objs is not portable!" func_append libobjs " $objs" fi fi test "$dlself" != no && \ func_warning "\`-dlopen self' is ignored for libtool libraries" set dummy $rpath shift test "$#" -gt 1 && \ func_warning "ignoring multiple \`-rpath's for a libtool library" install_libdir="$1" 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 test -n "$vinfo" && \ func_warning "\`-version-info/-version-number' is ignored for convenience libraries" test -n "$release" && \ func_warning "\`-release' is ignored for convenience libraries" else # Parse the version information argument. save_ifs="$IFS"; IFS=':' set dummy $vinfo 0 0 0 shift IFS="$save_ifs" test -n "$7" && \ func_fatal_help "too many parameters to \`-version-info'" # 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="$1" number_minor="$2" number_revision="$3" # # 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 # correct linux to gnu/linux during the next big refactor darwin|linux|osf|windows|none) func_arith $number_major + $number_minor current=$func_arith_result age="$number_minor" revision="$number_revision" ;; freebsd-aout|freebsd-elf|qnx|sunos) current="$number_major" revision="$number_minor" age="0" ;; irix|nonstopux) func_arith $number_major + $number_minor current=$func_arith_result age="$number_minor" revision="$number_minor" lt_irix_increment=no ;; esac ;; no) current="$1" revision="$2" age="$3" ;; 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]) ;; *) func_error "CURRENT \`$current' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; 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]) ;; *) func_error "REVISION \`$revision' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; 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]) ;; *) func_error "AGE \`$age' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac if test "$age" -gt "$current"; then func_error "AGE \`$age' is greater than the current interface number \`$current'" func_fatal_error "\`$vinfo' is not valid version information" fi # Calculate the version variables. major= versuffix= verstring= case $version_type in none) ;; darwin) # Like Linux, but with the current version available in # verstring for coding it into the library header func_arith $current - $age major=.$func_arith_result versuffix="$major.$age.$revision" # Darwin ld doesn't like 0 for these options... func_arith $current + 1 minor_current=$func_arith_result 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 func_arith $current - $age else func_arith $current - $age + 1 fi major=$func_arith_result 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 func_arith $revision - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring="$verstring_prefix$major.$iface:$verstring" done # Before this point, $major must not contain `.'. major=.$major versuffix="$major.$revision" ;; linux) # correct to gnu/linux during the next big refactor func_arith $current - $age major=.$func_arith_result versuffix="$major.$age.$revision" ;; osf) func_arith $current - $age major=.$func_arith_result 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 func_arith $current - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring="$verstring:${iface}.0" done # Make executables depend on our current version. func_append verstring ":${current}.0" ;; qnx) major=".$current" versuffix=".$current" ;; sunos) major=".$current" versuffix=".$current.$revision" ;; windows) # Use '-' rather than '.', since we only want one # extension on DOS 8.3 filesystems. func_arith $current - $age major=$func_arith_result versuffix="-$major" ;; *) func_fatal_configuration "unknown library version type \`$version_type'" ;; 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= 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 func_warning "undefined symbols not allowed in $host shared libraries" build_libtool_libs=no build_old_libs=yes fi else # Don't allow undefined symbols. allow_undefined_flag="$no_undefined_flag" fi fi func_generate_dlsyms "$libname" "$libname" "yes" func_append libobjs " $symfileobj" test "X$libobjs" = "X " && libobjs= if test "$opt_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 | *.gcno) ;; $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 func_append removelist " $p" ;; *) ;; esac done test -n "$removelist" && \ func_show_eval "${RM}r \$removelist" fi # Now set the variables for building old libraries. if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then func_append oldlibs " $output_objdir/$libname.$libext" # Transform .lo files to .o files. oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP` fi # Eliminate all temporary directories. #for path in $notinst_path; do # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` # dependency_libs=`$ECHO "$dependency_libs " | $SED "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 func_replace_sysroot "$libdir" func_append temp_xrpath " -R$func_replace_sysroot_result" case "$finalize_rpath " in *" $libdir "*) ;; *) func_append 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 "*) ;; *) func_append 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 "*) ;; *) func_append dlprefiles " $lib" ;; esac done if test "$build_libtool_libs" = yes; then if test -n "$rpath"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) # these systems don't actually have a c library (as such)! ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C library is in the System framework func_append deplibs " System.ltframework" ;; *-*-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 func_append 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. $opt_dry_run || $RM conftest.c cat > conftest.c </dev/null` $nocaseglob else potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` fi 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 "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";; esac done if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | $SED -e 10q | $EGREP "$file_magic_regex" > /dev/null; then func_append 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 ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` for a_deplib in $deplibs; do case $a_deplib in -l*) func_stripname -l '' "$a_deplib" name=$func_stripname_result if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $a_deplib "*) func_append 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 func_append 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 ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; none | unknown | *) newdeplibs="" tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; 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 " $tmp_deplibs" | $SED "s,$i,,"` done fi case $tmp_deplibs in *[!\ \ ]*) 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 ;; esac ;; 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 with the System framework newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` ;; 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 # Time to change all our "foo.ltframework" stuff back to "-framework foo" case $host in *-*-darwin*) newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; 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 " $deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append 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 # Remove ${wl} instances when linking with ld. # FIXME: should test the right _cmds variable. case $archive_cmds in *\$LD\ *) wl= ;; esac if test "$hardcode_into_libs" = yes; then # Hardcode the library paths hardcode_libdirs= dep_rpath= rpath="$finalize_rpath" test "$opt_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 func_replace_sysroot "$libdir" libdir=$func_replace_sysroot_result 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"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append dep_rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append 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 "dep_rpath=\"$hardcode_libdir_flag_spec\"" fi if test -n "$runpath_var" && test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append 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 "$opt_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 shift realname="$1" 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 func_append linknames " $link" done # Use standard objects if they are pic test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` test "X$libobjs" = "X " && libobjs= delfiles= if test -n "$export_symbols" && test -n "$include_expsyms"; then $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" export_symbols="$output_objdir/$libname.uexp" func_append delfiles " $export_symbols" fi orig_export_symbols= case $host_os in cygwin* | mingw* | cegcc*) if test -n "$export_symbols" && test -z "$export_symbols_regex"; then # exporting using user supplied symfile if test "x`$SED 1q $export_symbols`" != xEXPORTS; then # and it's NOT already a .def file. Must figure out # which of the given symbols are data symbols and tag # them as such. So, trigger use of export_symbols_cmds. # export_symbols gets reassigned inside the "prepare # the list of exported symbols" if statement, so the # include_expsyms logic still works. orig_export_symbols="$export_symbols" export_symbols= always_export_symbols=yes fi fi ;; esac # Prepare the list of exported symbols if test -z "$export_symbols"; then if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then func_verbose "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $opt_dry_run || $RM $export_symbols cmds=$export_symbols_cmds save_ifs="$IFS"; IFS='~' for cmd1 in $cmds; do IFS="$save_ifs" # Take the normal branch if the nm_file_list_spec branch # doesn't work or if tool conversion is not needed. case $nm_file_list_spec~$to_tool_file_cmd in *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) try_normal_branch=yes eval cmd=\"$cmd1\" func_len " $cmd" len=$func_len_result ;; *) try_normal_branch=no ;; esac if test "$try_normal_branch" = yes \ && { test "$len" -lt "$max_cmd_len" \ || test "$max_cmd_len" -le -1; } then func_show_eval "$cmd" 'exit $?' skipped_export=false elif test -n "$nm_file_list_spec"; then func_basename "$output" output_la=$func_basename_result save_libobjs=$libobjs save_output=$output output=${output_objdir}/${output_la}.nm func_to_tool_file "$output" libobjs=$nm_file_list_spec$func_to_tool_file_result func_append delfiles " $output" func_verbose "creating $NM input file list: $output" for obj in $save_libobjs; do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > "$output" eval cmd=\"$cmd1\" func_show_eval "$cmd" 'exit $?' output=$save_output libobjs=$save_libobjs skipped_export=false else # The command line is too long to execute in one step. func_verbose "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" && test "X$skipped_export" != "X:"; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi fi if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols="$export_symbols" test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi tmp_deplibs= for test_deplib in $deplibs; do case " $convenience " in *" $test_deplib "*) ;; *) func_append tmp_deplibs " $test_deplib" ;; esac done deplibs="$tmp_deplibs" if test -n "$convenience"; then if test -n "$whole_archive_flag_spec" && test "$compiler_needs_object" = yes && test -z "$libobjs"; then # extract the archives, so we have objects to list. # TODO: could optimize this to just extract one archive. whole_archive_flag_spec= fi if test -n "$whole_archive_flag_spec"; then save_libobjs=$libobjs eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= else gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $convenience func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi fi if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" func_append linker_flags " $flag" fi # Make a backup of the uninstalled library when relinking if test "$opt_mode" = relink; then $opt_dry_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:" && func_len " $test_cmds" && len=$func_len_result && test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then : else # The command line is too long to link in one step, link piecewise # or, if using GNU ld and skipped_export is not :, use a linker # script. # 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 func_basename "$output" output_la=$func_basename_result # Clear the reloadable object creation command queue and # initialize k to one. test_cmds= concat_cmds= objlist= last_robj= k=1 if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then output=${output_objdir}/${output_la}.lnkscript func_verbose "creating GNU ld script: $output" echo 'INPUT (' > $output for obj in $save_libobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done echo ')' >> $output func_append delfiles " $output" func_to_tool_file "$output" output=$func_to_tool_file_result elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then output=${output_objdir}/${output_la}.lnk func_verbose "creating linker input file list: $output" : > $output set x $save_libobjs shift firstobj= if test "$compiler_needs_object" = yes; then firstobj="$1 " shift fi for obj do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done func_append delfiles " $output" func_to_tool_file "$output" output=$firstobj\"$file_list_spec$func_to_tool_file_result\" else if test -n "$save_libobjs"; then func_verbose "creating reloadable object files..." output=$output_objdir/$output_la-${k}.$objext eval test_cmds=\"$reload_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 # Loop over the list of objects to be linked. for obj in $save_libobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result if test "X$objlist" = X || test "$len" -lt "$max_cmd_len"; then func_append 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. reload_objs=$objlist eval concat_cmds=\"$reload_cmds\" else # All subsequent reloadable object files will link in # the last one created. reload_objs="$objlist $last_robj" eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" fi last_robj=$output_objdir/$output_la-${k}.$objext func_arith $k + 1 k=$func_arith_result output=$output_objdir/$output_la-${k}.$objext objlist=" $obj" func_len " $last_robj" func_arith $len0 + $func_len_result len=$func_arith_result 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~ reload_objs="$objlist $last_robj" eval concat_cmds=\"\${concat_cmds}$reload_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" fi func_append delfiles " $output" else output= fi if ${skipped_export-false}; then func_verbose "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $opt_dry_run || $RM $export_symbols libobjs=$output # Append the command to create the export file. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" fi fi test -n "$save_libobjs" && func_verbose "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" $opt_silent || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$opt_mode" = relink; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS="$save_ifs" if test -n "$export_symbols_regex" && ${skipped_export-false}; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi if ${skipped_export-false}; then if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols="$export_symbols" test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi fi 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\" test "X$libobjs" = "X " && libobjs= 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 fi if test -n "$delfiles"; then # Append the command to remove temporary files to $cmds. eval cmds=\"\$cmds~\$RM $delfiles\" fi # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $opt_silent || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$opt_mode" = relink; then ( 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 "$opt_mode" = relink; then $opt_dry_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 func_show_eval '${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 func_show_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 "$dlfiles$dlprefiles" || test "$dlself" != no; then func_warning "\`-dlopen' is ignored for objects" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "\`-l' and \`-L' are ignored for objects" ;; esac test -n "$rpath" && \ func_warning "\`-rpath' is ignored for objects" test -n "$xrpath" && \ func_warning "\`-R' is ignored for objects" test -n "$vinfo" && \ func_warning "\`-version-info' is ignored for objects" test -n "$release" && \ func_warning "\`-release' is ignored for objects" case $output in *.lo) test -n "$objs$old_deplibs" && \ func_fatal_error "cannot build library object \`$output' from non-libtool objects" libobj=$output func_lo2o "$libobj" obj=$func_lo2o_result ;; *) libobj= obj="$output" ;; esac # Delete the old objects. $opt_dry_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 "$tmp_whole_archive_flags" | $SED 's|,| |g'` else gentop="$output_objdir/${obj}x" func_append generated " $gentop" func_extract_archives $gentop $convenience reload_conv_objs="$reload_objs $func_extract_archives_result" fi fi # If we're not building shared, we need to use non_pic_objs test "$build_libtool_libs" != yes && libobjs="$non_pic_objects" # Create the old-style object. reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test output="$obj" func_execute_cmds "$reload_cmds" 'exit $?' # Exit if we aren't doing a library object file. if test -z "$libobj"; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS fi if test "$build_libtool_libs" != yes; then if test -n "$gentop"; then func_show_eval '${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" # $opt_dry_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" func_execute_cmds "$reload_cmds" 'exit $?' fi if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS ;; prog) case $host in *cygwin*) func_stripname '' '.exe' "$output" output=$func_stripname_result.exe;; esac test -n "$vinfo" && \ func_warning "\`-version-info' is ignored for programs" test -n "$release" && \ func_warning "\`-release' is ignored for programs" test "$preload" = yes \ && test "$dlopen_support" = unknown \ && test "$dlopen_self" = unknown \ && test "$dlopen_self_static" = unknown && \ func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac case $host in *-*-darwin*) # Don't allow lazy linking, it breaks C++ global constructors # But is supposedly fixed on 10.4 or later (yay!). if test "$tagname" = CXX ; then case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 10.[0123]) func_append compile_command " ${wl}-bind_at_load" func_append finalize_command " ${wl}-bind_at_load" ;; esac fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; 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 "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $compile_deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done compile_deplibs="$new_libs" func_append compile_command " $compile_deplibs" func_append 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 "*) ;; *) func_append 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"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$libdir:"*) ;; ::) dllsearchpath=$libdir;; *) func_append dllsearchpath ":$libdir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append 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"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; *) func_append 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 "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` fi func_generate_dlsyms "$outputname" "@PROGRAM@" "no" # template prelinking step if test -n "$prelink_cmds"; then func_execute_cmds "$prelink_cmds" 'exit $?' fi wrappers_required=yes case $host in *cegcc* | *mingw32ce*) # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. wrappers_required=no ;; *cygwin* | *mingw* ) if test "$build_libtool_libs" != yes; then wrappers_required=no fi ;; *) if test "$need_relink" = no || test "$build_libtool_libs" != yes; then wrappers_required=no fi ;; esac if test "$wrappers_required" = no; then # Replace the output file specification. compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` link_command="$compile_command$compile_rpath" # We have no uninstalled library dependencies, so finalize right now. exit_status=0 func_show_eval "$link_command" 'exit_status=$?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Delete the generated files. if test -f "$output_objdir/${outputname}S.${objext}"; then func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' fi exit $exit_status 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 func_append 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 func_append 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 "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` # Delete the old output file. $opt_dry_run || $RM $output # Link the executable and exit func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi 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" func_warning "this platform does not like uninstalled shared libraries" func_warning "\`$output' will be relinked during installation" else if test "$fast_install" != no; then link_command="$finalize_var$compile_command$finalize_rpath" if test "$fast_install" = yes; then relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` 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 "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` # Delete the old output files. $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output_objdir/$outputname" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Now create the wrapper script. func_verbose "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}\" || $lt_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 func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done relink_command="(cd `pwd`; $relink_command)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` fi # Only actually do things if not in dry run mode. $opt_dry_run || { # win32 will think the script is a binary if it has # a .exe suffix, so we strip it off here. case $output in *.exe) func_stripname '' '.exe' "$output" output=$func_stripname_result ;; esac # test for cygwin because mv fails w/o .exe extensions case $host in *cygwin*) exeext=.exe func_stripname '' '.exe' "$outputname" outputname=$func_stripname_result ;; *) exeext= ;; esac case $host in *cygwin* | *mingw* ) func_dirname_and_basename "$output" "" "." output_name=$func_basename_result output_path=$func_dirname_result 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 func_emit_cwrapperexe_src > $cwrappersource # The wrapper executable is built using the $host compiler, # because it contains $host paths and files. If cross- # compiling, it, like the target executable, must be # executed on the $host or under an emulation environment. $opt_dry_run || { $LTCC $LTCFLAGS -o $cwrapper $cwrappersource $STRIP $cwrapper } # Now, create the wrapper script for func_source use: func_ltwrapper_scriptname $cwrapper $RM $func_ltwrapper_scriptname_result trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 $opt_dry_run || { # note: this script will not be executed, so do not chmod. if test "x$build" = "x$host" ; then $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result else func_emit_wrapper no > $func_ltwrapper_scriptname_result fi } ;; * ) $RM $output trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 func_emit_wrapper no > $output chmod +x $output ;; esac } 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 $symfileobj" 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" if test "$preload" = yes && test -f "$symfileobj"; then func_append oldobjs " $symfileobj" fi fi addlibs="$old_convenience" fi if test -n "$addlibs"; then gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $addlibs func_append 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 # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append oldobjs " $func_extract_archives_result" fi # 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 func_basename "$obj" $ECHO "$func_basename_result" done | sort | sort -uc >/dev/null 2>&1); then : else echo "copying selected object files to avoid basename conflicts..." gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_mkdir_p "$gentop" save_oldobjs=$oldobjs oldobjs= counter=1 for obj in $save_oldobjs do func_basename "$obj" objbase="$func_basename_result" case " $oldobjs " in " ") oldobjs=$obj ;; *[\ /]"$objbase "*) while :; do # Make sure we don't pick an alternate name that also # overlaps. newobj=lt$counter-$objbase func_arith $counter + 1 counter=$func_arith_result case " $oldobjs " in *[\ /]"$newobj "*) ;; *) if test ! -f "$gentop/$newobj"; then break; fi ;; esac done func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" func_append oldobjs " $gentop/$newobj" ;; *) func_append oldobjs " $obj" ;; esac done fi func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result eval cmds=\"$old_archive_cmds\" func_len " $cmds" len=$func_len_result if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then cmds=$old_archive_cmds elif test -n "$archiver_list_spec"; then func_verbose "using command file archive linking..." for obj in $oldobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > $output_objdir/$libname.libcmd func_to_tool_file "$output_objdir/$libname.libcmd" oldobjs=" $archiver_list_spec$func_to_tool_file_result" cmds=$old_archive_cmds else # the command line is too long to link in one step, link in parts func_verbose "using piecewise archive linking..." save_RANLIB=$RANLIB RANLIB=: objlist= concat_cmds= save_oldobjs=$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 eval test_cmds=\"$old_archive_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 for obj in $save_oldobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result func_append objlist " $obj" if test "$len" -lt "$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= len=$len0 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 func_execute_cmds "$cmds" 'exit $?' done test -n "$generated" && \ func_show_eval "${RM}r$generated" # Now create the libtool archive. case $output in *.la) old_library= test "$build_old_libs" = yes && old_library="$libname.$libext" func_verbose "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}\" || $lt_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 func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; 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 "$relink_command" | $SED "$sed_quote_subst"` if test "$hardcode_automatic" = yes ; then relink_command= fi # Only create the output if not a dry run. $opt_dry_run || { 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) func_basename "$deplib" name="$func_basename_result" func_resolve_sysroot "$deplib" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` test -z "$libdir" && \ func_fatal_error "\`$deplib' is not a valid libtool archive" func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" ;; -L*) func_stripname -L '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -L$func_replace_sysroot_result" ;; -R*) func_stripname -R '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -R$func_replace_sysroot_result" ;; *) func_append newdependency_libs " $deplib" ;; esac done dependency_libs="$newdependency_libs" newdlfiles= for lib in $dlfiles; do case $lib in *.la) func_basename "$lib" name="$func_basename_result" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "\`$lib' is not a valid libtool archive" func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" ;; *) func_append newdlfiles " $lib" ;; esac done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in *.la) # Only pass preopened files to the pseudo-archive (for # eventual linking with the app. that links it) if we # didn't already link the preopened objects directly into # the library: func_basename "$lib" name="$func_basename_result" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "\`$lib' is not a valid libtool archive" func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" ;; esac done dlprefiles="$newdlprefiles" else newdlfiles= for lib in $dlfiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlfiles " $abs" done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlprefiles " $abs" done dlprefiles="$newdlprefiles" fi $RM $output # place dlname in correct position for cygwin # In fact, it would be nice if we could use this code for all target # systems that can't hard-code library paths into their executables # and that have no shared library path variable independent of PATH, # but it turns out we can't easily determine that from inspecting # libtool variables, so we have to hard-code the OSs to which it # applies here; at the moment, that means platforms that use the PE # object format with DLL files. See the long comment at the top of # tests/bindir.at for full details. tdlname=$dlname case $host,$output,$installed,$module,$dlname in *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) # If a -bindir argument was supplied, place the dll there. if test "x$bindir" != x ; then func_relative_path "$install_libdir" "$bindir" tdlname=$func_relative_path_result$dlname else # Otherwise fall back on heuristic. tdlname=../bin/$dlname fi ;; esac $ECHO > $output "\ # $outputname - a libtool library file # Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION # # 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' # Linker flags that can not go in dependency_libs. inherited_linker_flags='$new_inherited_linker_flags' # Libraries that this one depends upon. dependency_libs='$dependency_libs' # Names of additional weak libraries provided by this library weak_library_names='$weak_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 } # Do a symbolic link so that the libtool archive can be found in # LD_LIBRARY_PATH before the program is installed. func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' ;; esac exit $EXIT_SUCCESS } { test "$opt_mode" = link || test "$opt_mode" = relink; } && func_mode_link ${1+"$@"} # func_mode_uninstall arg... func_mode_uninstall () { $opt_debug 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) func_append RM " $arg"; rmforce=yes ;; -*) func_append RM " $arg" ;; *) func_append files " $arg" ;; esac done test -z "$RM" && \ func_fatal_help "you must specify an RM program" rmdirs= for file in $files; do func_dirname "$file" "" "." dir="$func_dirname_result" if test "X$dir" = X.; then odir="$objdir" else odir="$dir/$objdir" fi func_basename "$file" name="$func_basename_result" test "$opt_mode" = uninstall && odir="$dir" # Remember odir for removal later, being careful to avoid duplicates if test "$opt_mode" = clean; then case " $rmdirs " in *" $odir "*) ;; *) func_append rmdirs " $odir" ;; 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 func_lalib_p "$file"; then func_source $dir/$name # Delete the libtool libraries and symlinks. for n in $library_names; do func_append rmfiles " $odir/$n" done test -n "$old_library" && func_append rmfiles " $odir/$old_library" case "$opt_mode" in clean) case " $library_names " in *" $dlname "*) ;; *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; esac test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" ;; uninstall) if test -n "$library_names"; then # Do each command in the postuninstall commands. func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' fi if test -n "$old_library"; then # Do each command in the old_postuninstall commands. func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' fi # FIXME: should reinstall the best remaining shared library. ;; esac fi ;; *.lo) # Possibly a libtool object, so verify it. if func_lalib_p "$file"; then # Read the .lo file func_source $dir/$name # Add PIC object to the list of files to remove. if test -n "$pic_object" && test "$pic_object" != none; then func_append rmfiles " $dir/$pic_object" fi # Add non-PIC object to the list of files to remove. if test -n "$non_pic_object" && test "$non_pic_object" != none; then func_append rmfiles " $dir/$non_pic_object" fi fi ;; *) if test "$opt_mode" = clean ; then noexename=$name case $file in *.exe) func_stripname '' '.exe' "$file" file=$func_stripname_result func_stripname '' '.exe' "$name" noexename=$func_stripname_result # $file with .exe has already been added to rmfiles, # add $file without .exe func_append rmfiles " $file" ;; esac # Do a test to see if this is a libtool program. if func_ltwrapper_p "$file"; then if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" relink_command= func_source $func_ltwrapper_scriptname_result func_append rmfiles " $func_ltwrapper_scriptname_result" else relink_command= func_source $dir/$noexename fi # note $name still contains .exe if it was in $file originally # as does the version of $file that was added into $rmfiles func_append rmfiles " $odir/$name $odir/${name}S.${objext}" if test "$fast_install" = yes && test -n "$relink_command"; then func_append rmfiles " $odir/lt-$name" fi if test "X$noexename" != "X$name" ; then func_append rmfiles " $odir/lt-${noexename}.c" fi fi fi ;; esac func_show_eval "$RM $rmfiles" 'exit_status=1' done # Try to remove the ${objdir}s in the directories where we deleted files for dir in $rmdirs; do if test -d "$dir"; then func_show_eval "rmdir $dir >/dev/null 2>&1" fi done exit $exit_status } { test "$opt_mode" = uninstall || test "$opt_mode" = clean; } && func_mode_uninstall ${1+"$@"} test -z "$opt_mode" && { help="$generic_help" func_fatal_help "you must specify a MODE" } test -z "$exec_cmd" && \ func_fatal_help "invalid operation mode \`$opt_mode'" if test -n "$exec_cmd"; then eval exec "$exec_cmd" exit $EXIT_FAILURE fi exit $exit_status # The TAGs below are defined such that we never get into a situation # in which we disable both kinds of libraries. Given conflicting # choices, we go for a static library, that is the most portable, # since we can't tell whether shared libraries were disabled because # the user asked for that or because the platform doesn't support # them. This is particularly important on AIX, because we don't # support having both static and shared libraries enabled at the same # time on that platform, so we default to a shared-only configuration. # If a disable-shared tag is given, we'll fallback to a static-only # configuration. But we'll never go from static-only to shared-only. # ### BEGIN LIBTOOL TAG CONFIG: disable-shared build_libtool_libs=no build_old_libs=yes # ### END LIBTOOL TAG CONFIG: disable-shared # ### BEGIN LIBTOOL TAG CONFIG: disable-static build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` # ### END LIBTOOL TAG CONFIG: disable-static # Local Variables: # mode:shell-script # sh-indentation:2 # End: # vi:sw=2 libdbi-drivers-0.9.0/missing000555 001750 001750 00000026233 11717575636 016714 0ustar00markusmarkus000000 000000 #! /bin/sh # Common stub for a few missing GNU programs while installing. scriptversion=2009-04-28.21; # UTC # Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006, # 2008, 2009 Free Software Foundation, Inc. # Originally by Fran,cois Pinard , 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, 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, see . # 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. if test $# -eq 0; then echo 1>&2 "Try \`$0 --help' for more information" exit 1 fi run=: sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p' sed_minuso='s/.* -o \([^ ]*\).*/\1/p' # In the cases where this matters, `missing' is being run in the # srcdir already. if test -f configure.ac; then configure_ac=configure.ac else configure_ac=configure.in fi msg="missing on your system" case $1 in --run) # Try to run requested program, and just exit if it succeeds. run= shift "$@" && exit 0 # Exit code 63 means version mismatch. This often happens # when the user try to use an ancient version of a tool on # a file that requires a minimum version. In this case we # we should proceed has if the program had been absent, or # if --run hadn't been passed. if test $? = 63; then run=: msg="probably too old" fi ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an error status if there is no known handling for PROGRAM. Options: -h, --help display this help and exit -v, --version output version information and exit --run try to run the given command, and emulate it if it fails Supported PROGRAM values: aclocal touch file \`aclocal.m4' autoconf touch file \`configure' autoheader touch file \`config.h.in' autom4te touch the output file, or create a stub one automake touch all \`Makefile.in' files bison create \`y.tab.[ch]', if possible, from existing .[ch] flex create \`lex.yy.c', if possible, from existing .c help2man touch the output file lex create \`lex.yy.c', if possible, from existing .c makeinfo touch the output file tar try tar, gnutar, gtar, then tar without non-portable flags yacc create \`y.tab.[ch]', if possible, from existing .[ch] Version suffixes to PROGRAM as well as the prefixes \`gnu-', \`gnu', and \`g' are ignored when checking the name. Send bug reports to ." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: Unknown \`$1' option" echo 1>&2 "Try \`$0 --help' for more information" exit 1 ;; esac # normalize program name to check for. program=`echo "$1" | sed ' s/^gnu-//; t s/^gnu//; t s/^g//; t'` # Now exit if we have it, but it failed. Also exit now if we # don't have it and --version was passed (most likely to detect # the program). This is about non-GNU programs, so use $1 not # $program. case $1 in lex*|yacc*) # Not GNU programs, they don't have --version. ;; tar*) if test -n "$run"; then echo 1>&2 "ERROR: \`tar' requires --run" exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then exit 1 fi ;; *) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then # Could not run --version or --help. This is probably someone # running `$TOOL --version' or `$TOOL --help' to check whether # $TOOL exists and not knowing $TOOL uses missing. exit 1 fi ;; esac # If it does not exist, or fails to run (possibly an outdated version), # try to emulate it. case $program in aclocal*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." touch aclocal.m4 ;; autoconf*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." touch configure ;; autoheader*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acconfig.h' or \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` test -z "$files" && files="config.h" touch_files= for f in $files; do case $f in *:*) touch_files="$touch_files "`echo "$f" | sed -e 's/^[^:]*://' -e 's/:.*//'`;; *) touch_files="$touch_files $f.in";; esac done touch $touch_files ;; automake*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." find . -type f -name Makefile.am -print | sed 's/\.am$/.in/' | while read f; do touch "$f"; done ;; autom4te*) echo 1>&2 "\ WARNING: \`$1' is needed, but is $msg. You might have modified some files without having the proper tools for further handling them. You can get \`$1' as part of \`Autoconf' from any GNU archive site." file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo "#! /bin/sh" echo "# Created by GNU Automake missing as a replacement of" echo "# $ $@" echo "exit 0" chmod +x $file exit 1 fi ;; bison*|yacc*) echo 1>&2 "\ WARNING: \`$1' $msg. You should only need it if you modified a \`.y' file. You may need the \`Bison' package in order for those modifications to take effect. You can get \`Bison' from any GNU archive site." rm -f y.tab.c y.tab.h if test $# -ne 1; then eval LASTARG="\${$#}" case $LASTARG in *.y) SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` if test -f "$SRCFILE"; then cp "$SRCFILE" y.tab.c fi SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` if test -f "$SRCFILE"; then cp "$SRCFILE" y.tab.h fi ;; esac fi if test ! -f y.tab.h; then echo >y.tab.h fi if test ! -f y.tab.c; then echo 'main() { return 0; }' >y.tab.c fi ;; lex*|flex*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.l' file. You may need the \`Flex' package in order for those modifications to take effect. You can get \`Flex' from any GNU archive site." rm -f lex.yy.c if test $# -ne 1; then eval LASTARG="\${$#}" case $LASTARG in *.l) SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` if test -f "$SRCFILE"; then cp "$SRCFILE" lex.yy.c fi ;; esac fi if test ! -f lex.yy.c; then echo 'main() { return 0; }' >lex.yy.c fi ;; help2man*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a dependency of a manual page. You may need the \`Help2man' package in order for those modifications to take effect. You can get \`Help2man' from any GNU archive site." file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo ".ab help2man is required to generate this page" exit $? fi ;; makeinfo*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.texi' or \`.texinfo' file, or any other file indirectly affecting the aspect of the manual. The spurious call might also be the consequence of using a buggy \`make' (AIX, DU, IRIX). You might want to install the \`Texinfo' package or the \`GNU make' package. Grab either from any GNU archive site." # The file to touch is that specified with -o ... file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -z "$file"; then # ... or it is the one specified with @setfilename ... infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` file=`sed -n ' /^@setfilename/{ s/.* \([^ ]*\) *$/\1/ p q }' $infile` # ... or it is derived from the source name (dir/f.texi becomes f.info) test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info fi # If the file does not exist, the user really needs makeinfo; # let's fail without touching anything. test -f $file || exit 1 touch $file ;; tar*) shift # We have already tried tar in the generic part. # Look for gnutar/gtar before invocation to avoid ugly error # messages. if (gnutar --version > /dev/null 2>&1); then gnutar "$@" && exit 0 fi if (gtar --version > /dev/null 2>&1); then gtar "$@" && exit 0 fi firstarg="$1" if shift; then case $firstarg in *o*) firstarg=`echo "$firstarg" | sed s/o//` tar "$firstarg" "$@" && exit 0 ;; esac case $firstarg in *h*) firstarg=`echo "$firstarg" | sed s/h//` tar "$firstarg" "$@" && exit 0 ;; esac fi echo 1>&2 "\ WARNING: I can't seem to be able to run \`tar' with the given arguments. You may want to install GNU tar or Free paxutils, or check the command line arguments." exit 1 ;; *) echo 1>&2 "\ WARNING: \`$1' is needed, and is $msg. You might have modified some files without having the proper tools for further handling them. Check the \`README' file, it often tells you about the needed prerequisites for installing this package. You may also peek at any GNU archive site, in case some other package would contain this missing \`$1' program." exit 1 ;; esac exit 0 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: libdbi-drivers-0.9.0/README.win32000644 001750 001750 00000004346 12117466625 017131 0ustar00markusmarkus000000 000000 libdbi-drivers - drivers for libdbi, the Database Independent Abstraction Layer for C Copyright (C) 2001-2013, Markus Hoenicka http://libdbi-drivers.sourceforge.net WINDOWS-SPECIFIC INSTALLATION INSTRUCTIONS: ------------------------------------------- libdbi-drivers can be compiled into DLL files on Win32 with the Cygwin package, available at http://www.cygwin.com/. libdbi must be properly installed before attempting to build libdbi-drivers, and you need the appropriate client libraries of the database engines. The only database engine packaged with Cygwin is PostgreSQL. However, at least SQLite, SQLite3 and MySQL build out of the box. To build a particular driver, run these commands, where: - XYZ is one of msql, mysql, pgsql, or sqlite for MiniSQL, MySQL, PostgreSQL, and SQLite, respectively - /path/to/lib is (usually) /usr/local/lib/mysql for MySQL and /usr/local/msql3/lib for MiniSQL. The LDFLAGS magic is not required for building the PostgreSQL and SQLite drivers. ./configure --with-driverXYZ make make install make libXYZ-dll -f Makefile.w32 LDFLAGS="-L/path/to/lib" make install-libXYZ -f Makefile.w32 If you want to build and install all drivers, use the following commands: ./configure --with-mysql --with-pgsql --with-msql --with-sqlite make make install make -f Makefile.w32 LDFLAGS="-L/usr/local/lib/mysql -L/usr/local/msql3/lib" make install -f Makefile.w32 The good news is that this works at all. The bad news is that the DLL magic could be integrated into the standard Makefiles with some extra effort and a better understanding of the autotools. CYGWIN DETAILS: --------------- There are unfortunately no "Cygwin" releases in a sense as there are Debian 2.2 or FreeBSD 4.5. However, libdbi-drivers should work with any Cygwin release since around Jan 2003. USAGE: ------ Once libdbi is compiled for Win32 and you have a DLL, you can use that DLL like any other. The only requirement is that the cygwin runtime DLL is available on the target machine also, since non-Windows API functions are implemented by cygwin. MODIFICATIONS AND REDISTRIBUTION (GPL): ---------------------------------------- See the file COPYING or http://www.gnu.org for more details. $Id: README.win32,v 1.7 2013/03/11 23:49:41 mhoenicka Exp $ libdbi-drivers-0.9.0/README.osx000644 001750 001750 00000003556 10615737320 016774 0ustar00markusmarkus000000 000000 libdbi-drivers - drivers for libdbi, the Database Independent Abstraction Layer for C Copyright (C) 2001-2003, Markus Hoenicka http://libdbi-drivers.sourceforge.net OS X-SPECIFIC INSTALLATION INSTRUCTIONS: ---------------------------------------- (Tested on 10.4.9/PowerPC) LIBTOOLIZE=glibtoolize ./autogen.sh ./configure --disable-docs --with-mysql --with-pgsql --with-sqlite --with-pgsql-dir=/opt/local/pgsql LDFLAGS="-L/sw/lib" make sudo make install Adjust configure options and paths according to which databases you are using, and where their headers and libraries are installed. QUICKSTART - MYSQL ------------------ If you are using the MySQL.com Community[1] or Enterprise[2] package, or a source install in the default location: sudo ln -s /usr/local/mysql/include /usr/include/mysql ./configure --with-mysql --with-mysql-dir=/usr/local/mysql --disable-docs make sudo make install [1] http://dev.mysql.com/downloads/ [2] https://enterprise.mysql.com/software/enterprise.php QUICKSTART - POSTGRESQL ----------------------- There are several options for installing PostgreSQL on OS X, including: - Marc Liyanage's package at http://www.entropy.ch/software/macosx/postgresql/ - Druware's package at http://postgresqlformac.com/ - Fink package manager, see http://developer.apple.com/internet/opensource/postgres.html If using the entropy.ch package, configure libdbi-drivers as follows: ./configure --with-pgsql --with-pgsql-dir=/usr/local/pgsql --disable-docs If using the postgresqlformac.com package, ./configure --with-pgsql --with-pgsql-dir=/Library/PostgreSQL8 --disable-docs In all cases, build and install libdbi-drivers as follows: make sudo make install MODIFICATIONS AND REDISTRIBUTION (GPL): --------------------------------------- See the file COPYING or http://www.gnu.org for more details. $Id: README.osx,v 1.2 2007/05/01 22:27:28 qu1j0t3 Exp $ libdbi-drivers-0.9.0/autogen.sh000755 001750 001750 00000001401 11351446524 017271 0ustar00markusmarkus000000 000000 #!/bin/sh # autogen.sh - generates configure using the autotools # $Id: autogen.sh,v 1.7 2010/03/21 16:46:12 mhoenicka Exp $ : ${LIBTOOLIZE=libtoolize} : ${ACLOCAL=aclocal} : ${AUTOHEADER=autoheader} : ${AUTOMAKE=automake} : ${AUTOCONF=autoconf} ${LIBTOOLIZE} --force --copy # the -I m4 hack allows aclocal to find the libtool macros ${ACLOCAL} -I m4 ${AUTOHEADER} ${AUTOMAKE} --add-missing echo echo "Using `${AUTOCONF} --version`, if you have problems" echo "while building then set the environemnt variable AUTOCONF" echo "to a different autoconf version and rerun $0" echo ${AUTOCONF} ## autoconf 2.53 will not work, at least on FreeBSD. Change the following ## line appropriately to call autoconf 2.13 instead. This one works for ## FreeBSD 4.7: #autoconf213 libdbi-drivers-0.9.0/README.encodings000644 001750 001750 00000003064 10000054015 020103 0ustar00markusmarkus000000 000000 Translation table for character encodings The first column is what dbi_get_conn_encoding() returns. This is the preferred MIME name, if available, otherwise another official name Source for preferred MIME names and other official names: http://www.iana.org/assignments/character-sets $Id: README.encodings,v 1.2 2004/01/10 19:52:45 bhazer Exp $ MIME pgsql mysql sqlite oracle msql US-ASCII SQL_ASCII ascii US7ASCII EUC-JP EUC_JP ujis JA16EUC,JA16EUCYEN EUC_CN EUC-KR EUC_KR euc_kr EUC-KR euckr EUC_TW UTF-8 UNICODE utf8 UTF-8 UTF8 UTF-16 MULE_INTERNAL ISO-8859-1 LATIN1 latin1 iso8859 ISO-8859-2 LATIN2 latin2 WE8ISO8859P9 ISO-8859-3 LATIN3 ISO-8859-4 LATIN4 ISO-8859-9 LATIN5 latin5 ISO-8859-10 LATIN6 ISO-8859-13 LATIN7 latin7 ISO-8859-14 LATIN8 ISO-8859-15 LATIN9 ISO-8859-16 LATIN10 ISO-8859-5 ISO-8859-5 ISO-8859-6 ISO-8859-6 AR8ISO8859P6 ISO-8859-7 ISO-8859-7 greek ISO-8859-8 ISO-8859-8 hebrew IW8ISO8859P8 KOI8-R KOI8 koi8_ru KOI8-R koi8r KOI8-U koi8_ukr KOI8-U koi8u windows-1251 WIN cp1251 IBM866 ALT windows-1250 win1250 windows-1250 cp1250 windows-1256 cp1256 windows-1257 win1257 windows-1257 cp1257 IBM850 cp850 IBM852 cp852 IBM857 TR8PC857 IBM865 dos IBM866 cp866 Big5 big5 GB2312 gb2312 Shift_JIS sjis ISO646-NO danish ISO646-HU hungarian GBK gbk ISO-10646-UCS-2 ucs2 DEC-MCS dec8 TIS-620 tis620 hp-roman8 hp8 czech german1 swe7 usa7 estonia win1251ukr croat armscii8 keybcs2 macce macroman binary geostd8 libdbi-drivers-0.9.0/Makefile.w32000644 001750 001750 00000010464 10732030037 017341 0ustar00markusmarkus000000 000000 # this makefile is for building Win32 DLLs with cygwin # By default, the "all" and "install" targets assume that you have all # client libraries around which may not be the case. In order to build # a particular driver, run make like this: # make libXYZ-dll # make install-libXYZ # where XYZ is one of msql, mysql, pgsql, or sqlite SHELL = /bin/sh srcdir = . top_srcdir = . prefix = /usr/local exec_prefix = ${prefix} bindir = ${exec_prefix}/bin libdir = ${exec_prefix}/lib top_builddir = . INSTALL = /usr/bin/install -c INSTALL_PROGRAM = ${INSTALL} $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = ${INSTALL} -m 644 INSTALL_SCRIPT = ${INSTALL_PROGRAM} transform = s,x,x, NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : host_alias = i686-pc-cygwin host_triplet = i686-pc-cygwin AS = @AS@ CC = gcc DEBUG = -g -Wall -D__NO_MATH_INLINES -fsigned-char MSQL_LIBS = -L /usr/local/lib -L /usr/local/msql3/lib -ldbi -lmsql -liberty -lz MYSQL_LIBS = -L /usr/local/lib -ldbi -lmysqlclient -liberty -lz PGSQL_LIBS = -L /usr/local/lib -ldbi -lpq -liberty SQLITE_LIBS = -L /usr/local/lib -ldbi -lsqlite -liberty SQLITE3_LIBS = -L /usr/local/lib -ldbi -lsqlite3 -liberty driverdir = ${exec_prefix}/lib/dbd LIBMSQL_DLL_NAME = libdbdmsql.dll LIBMYSQL_DLL_NAME = libdbdmysql.dll LIBPGSQL_DLL_NAME = libdbdpgsql.dll LIBSQLITE_DLL_NAME = libdbdsqlite.dll LIBSQLITE3_DLL_NAME = libdbdsqlite3.dll LIBMSQL_DLL_EXP_LIB = libdbdmsql.dll.a LIBMYSQL_DLL_EXP_LIB = libdbdmysql.dll.a LIBPGSQL_DLL_EXP_LIB = libdbdpgsql.dll.a LIBSQLITE_DLL_EXP_LIB = libdbdsqlite.dll.a LIBSQLITE3_DLL_EXP_LIB = libdbdsqlite3.dll.a all: libmysql-dll libpgsql-dll libsqlite-dll libsqlite3-dll libmsql-dll libmsql-dll: $(top_srcdir)/drivers/msql/dbd_msql.o $(CC) -shared -Wl,--out-implib=$(top_srcdir)/drivers/msql/.libs/$(LIBMSQL_DLL_EXP_LIB) -o $(top_srcdir)/drivers/msql/.libs/$(LIBMSQL_DLL_NAME) -L$(top_srcdir)/src/.libs $(LDFLAGS) $(top_srcdir)/drivers/msql/*.o $(MSQL_LIBS) libmysql-dll: $(top_srcdir)/drivers/mysql/dbd_mysql.o $(CC) -shared -Wl,--out-implib=$(top_srcdir)/drivers/mysql/.libs/$(LIBMYSQL_DLL_EXP_LIB) -o $(top_srcdir)/drivers/mysql/.libs/$(LIBMYSQL_DLL_NAME) -L$(top_srcdir)/src/.libs $(LDFLAGS) $(top_srcdir)/drivers/mysql/*.o $(MYSQL_LIBS) libpgsql-dll: $(top_srcdir)/drivers/pgsql/dbd_pgsql.o $(CC) -shared -Wl,--out-implib=$(top_srcdir)/drivers/pgsql/.libs/$(LIBPGSQL_DLL_EXP_LIB) -o $(top_srcdir)/drivers/pgsql/.libs/$(LIBPGSQL_DLL_NAME) -L$(top_srcdir)/src/.libs $(LDFLAGS) $(top_srcdir)/drivers/pgsql/*.o $(PGSQL_LIBS) libsqlite-dll: $(top_srcdir)/drivers/sqlite/dbd_sqlite.o $(CC) -shared -Wl,--out-implib=$(top_srcdir)/drivers/sqlite/.libs/$(LIBSQLITE_DLL_EXP_LIB) -o $(top_srcdir)/drivers/sqlite/.libs/$(LIBSQLITE_DLL_NAME) $(LDFLAGS) $(top_srcdir)/drivers/sqlite/*.o $(SQLITE_LIBS) libsqlite3-dll: $(top_srcdir)/drivers/sqlite3/dbd_sqlite3.o $(CC) -shared -Wl,--out-implib=$(top_srcdir)/drivers/sqlite3/.libs/$(LIBSQLITE3_DLL_EXP_LIB) -o $(top_srcdir)/drivers/sqlite3/.libs/$(LIBSQLITE3_DLL_NAME) $(LDFLAGS) $(top_srcdir)/drivers/sqlite3/*.o $(SQLITE3_LIBS) install: install-libmysql install-libpgsql install-libsqlite install-libsqlite3 install-libmsql install-libmsql: cp $(top_srcdir)/drivers/msql/.libs/$(LIBMSQL_DLL_NAME) $(driverdir) && \ cp $(top_srcdir)/drivers/msql/.libs/$(LIBMSQL_DLL_EXP_LIB) $(driverdir) install-libmysql: cp $(top_srcdir)/drivers/mysql/.libs/$(LIBMYSQL_DLL_NAME) $(driverdir) && \ cp $(top_srcdir)/drivers/mysql/.libs/$(LIBMYSQL_DLL_EXP_LIB) $(driverdir) install-libpgsql: cp $(top_srcdir)/drivers/pgsql/.libs/$(LIBPGSQL_DLL_NAME) $(driverdir) && \ cp $(top_srcdir)/drivers/pgsql/.libs/$(LIBPGSQL_DLL_EXP_LIB) $(driverdir) install-libsqlite: cp $(top_srcdir)/drivers/sqlite/.libs/$(LIBSQLITE_DLL_NAME) $(driverdir) && \ cp $(top_srcdir)/drivers/sqlite/.libs/$(LIBSQLITE_DLL_EXP_LIB) $(driverdir) install-libsqlite3: cp $(top_srcdir)/drivers/sqlite3/.libs/$(LIBSQLITE3_DLL_NAME) $(driverdir) && \ cp $(top_srcdir)/drivers/sqlite3/.libs/$(LIBSQLITE3_DLL_EXP_LIB) $(driverdir) .PHONY: libdbdmysql.dll libdbdpgsql.dll libdbdsqlite.dll libdbdsqlite3.dll libdbdmsql.dll install install-libmysql install-libpgsql install-libsqlite install-libsqlite3 # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: libdbi-drivers-0.9.0/fixlt.sh000755 001750 001750 00000001351 07671417714 016772 0ustar00markusmarkus000000 000000 #!/bin/sh # this is an ugly kludge to fix the libtool script generated by OSX' # libtool 1.4.x. It is not necessary on any other platform and it # should become obsolete with libtool 1.5.x sed 's%archive_cmds=\"\\$nonopt \\$(test \\\\\\"x\\$module\\\\\\" = xyes && echo -bundle || echo -dynamiclib) \\$allow_undefined_flag -o \\$lib \\$libobjs \\$deplibs\\$linker_flags -install_name \\$rpath/\\$soname \\$verstring\"%archive_cmds=\"\\$nonopt \\$(test .\\$module = .yes \&\& echo -bundle \|\| echo -dynamiclib) \\$allow_undefined_flag -o \\$lib \\$libobjs \\$deplibs\\$linker_flags \\$(test .\\$module != .yes \&\& echo -install_name \\$rpath/\\$soname \\$verstring)\"%' < libtool > libtool.new mv libtool libtool.orig mv libtool.new libtool libdbi-drivers-0.9.0/drivers/000755 001750 001750 00000000000 12117473273 016754 5ustar00markusmarkus000000 000000 libdbi-drivers-0.9.0/tests/000755 001750 001750 00000000000 12117473273 016440 5ustar00markusmarkus000000 000000 libdbi-drivers-0.9.0/doc/000755 001750 001750 00000000000 12117473273 016043 5ustar00markusmarkus000000 000000 libdbi-drivers-0.9.0/doc/Makefile.am000644 001750 001750 00000000143 10327746626 020103 0ustar00markusmarkus000000 000000 ## Process this with automake to create Makefile.in AUTOMAKE_OPTIONS = foreign SUBDIRS = include libdbi-drivers-0.9.0/doc/Makefile.in000644 001750 001750 00000045045 12117467052 020116 0ustar00markusmarkus000000 000000 # Makefile.in generated by automake 1.12.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2012 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = doc DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DB2_INCLUDE = @DB2_INCLUDE@ DB2_LDFLAGS = @DB2_LDFLAGS@ DB2_LIBS = @DB2_LIBS@ DB2_TEST = @DB2_TEST@ DBI_INCLUDE = @DBI_INCLUDE@ DEBUG = @DEBUG@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FIREBIRD_INCLUDE = @FIREBIRD_INCLUDE@ FIREBIRD_ISQL = @FIREBIRD_ISQL@ FIREBIRD_ISQL_FLAG = @FIREBIRD_ISQL_FLAG@ FIREBIRD_LDFLAGS = @FIREBIRD_LDFLAGS@ FIREBIRD_LIBS = @FIREBIRD_LIBS@ FIREBIRD_TEST = @FIREBIRD_TEST@ FREETDS_INCLUDE = @FREETDS_INCLUDE@ FREETDS_LDFLAGS = @FREETDS_LDFLAGS@ FREETDS_LIBS = @FREETDS_LIBS@ FREETDS_TEST = @FREETDS_TEST@ GREP = @GREP@ INGRES_INCLUDE = @INGRES_INCLUDE@ INGRES_LDFLAGS = @INGRES_LDFLAGS@ INGRES_LIBS = @INGRES_LIBS@ INGRES_TEST = @INGRES_TEST@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBADD_LIBDBI = @LIBADD_LIBDBI@ LIBDBI_LIBDIR = @LIBDBI_LIBDIR@ LIBDBI_TEST = @LIBDBI_TEST@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSQL_INCLUDE = @MSQL_INCLUDE@ MSQL_LDFLAGS = @MSQL_LDFLAGS@ MSQL_LIBS = @MSQL_LIBS@ MSQL_TEST = @MSQL_TEST@ MYSQL_CONFIG = @MYSQL_CONFIG@ MYSQL_INCLUDE = @MYSQL_INCLUDE@ MYSQL_LDFLAGS = @MYSQL_LDFLAGS@ MYSQL_LIBS = @MYSQL_LIBS@ MYSQL_TEST = @MYSQL_TEST@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ ORACLE_INCLUDE = @ORACLE_INCLUDE@ ORACLE_LDFLAGS = @ORACLE_LDFLAGS@ ORACLE_LIBS = @ORACLE_LIBS@ ORACLE_TEST = @ORACLE_TEST@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PGSQL_INCLUDE = @PGSQL_INCLUDE@ PGSQL_LDFLAGS = @PGSQL_LDFLAGS@ PGSQL_LIBS = @PGSQL_LIBS@ PGSQL_TEST = @PGSQL_TEST@ PG_CONFIG = @PG_CONFIG@ PROFILE = @PROFILE@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SQLITE3_INCLUDE = @SQLITE3_INCLUDE@ SQLITE3_LDFLAGS = @SQLITE3_LDFLAGS@ SQLITE3_LIBS = @SQLITE3_LIBS@ SQLITE3_TEST = @SQLITE3_TEST@ SQLITE_INCLUDE = @SQLITE_INCLUDE@ SQLITE_LDFLAGS = @SQLITE_LDFLAGS@ SQLITE_LIBS = @SQLITE_LIBS@ SQLITE_TEST = @SQLITE_TEST@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ dbi_dbdir = @dbi_dbdir@ docdir = @docdir@ docs_subdirs = @docs_subdirs@ driverdir = @driverdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = foreign SUBDIRS = include all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign doc/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign doc/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(RECURSIVE_TARGETS) $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done cscopelist-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) cscopelist); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) \ cscopelist-recursive ctags-recursive install-am install-strip \ tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ cscopelist cscopelist-recursive ctags ctags-recursive \ distclean distclean-generic distclean-libtool distclean-tags \ distdir dvi dvi-am html html-am info info-am install \ install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-recursive uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: libdbi-drivers-0.9.0/doc/include/000755 001750 001750 00000000000 12117473273 017466 5ustar00markusmarkus000000 000000 libdbi-drivers-0.9.0/doc/include/Makefile.am000644 001750 001750 00000000220 10327746670 021521 0ustar00markusmarkus000000 000000 ## Process this file with automake to produce Makefile.in AUTOMAKE_OPTIONS = foreign EXTRA_DIST = copying-fdl.sgml doc-html.dsl doc-print.dsl libdbi-drivers-0.9.0/doc/include/Makefile.in000644 001750 001750 00000027312 12117467052 021536 0ustar00markusmarkus000000 000000 # Makefile.in generated by automake 1.12.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2012 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = doc/include DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DB2_INCLUDE = @DB2_INCLUDE@ DB2_LDFLAGS = @DB2_LDFLAGS@ DB2_LIBS = @DB2_LIBS@ DB2_TEST = @DB2_TEST@ DBI_INCLUDE = @DBI_INCLUDE@ DEBUG = @DEBUG@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FIREBIRD_INCLUDE = @FIREBIRD_INCLUDE@ FIREBIRD_ISQL = @FIREBIRD_ISQL@ FIREBIRD_ISQL_FLAG = @FIREBIRD_ISQL_FLAG@ FIREBIRD_LDFLAGS = @FIREBIRD_LDFLAGS@ FIREBIRD_LIBS = @FIREBIRD_LIBS@ FIREBIRD_TEST = @FIREBIRD_TEST@ FREETDS_INCLUDE = @FREETDS_INCLUDE@ FREETDS_LDFLAGS = @FREETDS_LDFLAGS@ FREETDS_LIBS = @FREETDS_LIBS@ FREETDS_TEST = @FREETDS_TEST@ GREP = @GREP@ INGRES_INCLUDE = @INGRES_INCLUDE@ INGRES_LDFLAGS = @INGRES_LDFLAGS@ INGRES_LIBS = @INGRES_LIBS@ INGRES_TEST = @INGRES_TEST@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBADD_LIBDBI = @LIBADD_LIBDBI@ LIBDBI_LIBDIR = @LIBDBI_LIBDIR@ LIBDBI_TEST = @LIBDBI_TEST@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSQL_INCLUDE = @MSQL_INCLUDE@ MSQL_LDFLAGS = @MSQL_LDFLAGS@ MSQL_LIBS = @MSQL_LIBS@ MSQL_TEST = @MSQL_TEST@ MYSQL_CONFIG = @MYSQL_CONFIG@ MYSQL_INCLUDE = @MYSQL_INCLUDE@ MYSQL_LDFLAGS = @MYSQL_LDFLAGS@ MYSQL_LIBS = @MYSQL_LIBS@ MYSQL_TEST = @MYSQL_TEST@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ ORACLE_INCLUDE = @ORACLE_INCLUDE@ ORACLE_LDFLAGS = @ORACLE_LDFLAGS@ ORACLE_LIBS = @ORACLE_LIBS@ ORACLE_TEST = @ORACLE_TEST@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PGSQL_INCLUDE = @PGSQL_INCLUDE@ PGSQL_LDFLAGS = @PGSQL_LDFLAGS@ PGSQL_LIBS = @PGSQL_LIBS@ PGSQL_TEST = @PGSQL_TEST@ PG_CONFIG = @PG_CONFIG@ PROFILE = @PROFILE@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SQLITE3_INCLUDE = @SQLITE3_INCLUDE@ SQLITE3_LDFLAGS = @SQLITE3_LDFLAGS@ SQLITE3_LIBS = @SQLITE3_LIBS@ SQLITE3_TEST = @SQLITE3_TEST@ SQLITE_INCLUDE = @SQLITE_INCLUDE@ SQLITE_LDFLAGS = @SQLITE_LDFLAGS@ SQLITE_LIBS = @SQLITE_LIBS@ SQLITE_TEST = @SQLITE_TEST@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ dbi_dbdir = @dbi_dbdir@ docdir = @docdir@ docs_subdirs = @docs_subdirs@ driverdir = @driverdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = foreign EXTRA_DIST = copying-fdl.sgml doc-html.dsl doc-print.dsl all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign doc/include/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign doc/include/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags: TAGS TAGS: ctags: CTAGS CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ distclean distclean-generic distclean-libtool distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: libdbi-drivers-0.9.0/doc/include/copying-fdl.sgml000644 001750 001750 00000051637 07641141407 022576 0ustar00markusmarkus000000 000000 GNU Free Documentation License Version 1.1, March 2000
Copyright (C) 2000 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
0. PREAMBLE The purpose of this License is to make a manual, textbook, or other written document "free" in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others. This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software. We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference. 1. APPLICABILITY AND DEFINITIONS This License applies to any manual or other work that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you". A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language. A "Secondary Section" is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (For example, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them. The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, whose contents can be viewed and edited directly and straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup has been designed to thwart or discourage subsequent modification by readers is not Transparent. A copy that is not "Transparent" is called "Opaque". Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML designed for human modification. Opaque formats include PostScript, PDF, proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML produced by some word processors for output purposes only. The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, "Title Page" means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text. 2. VERBATIM COPYING You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3. You may also lend copies, under the same conditions stated above, and you may publicly display copies. 3. COPYING IN QUANTITY If you publish printed copies of the Document numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects. If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages. If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a publicly-accessible computer-network location containing a complete Transparent copy of the Document, free of added material, which the general network-using public has access to download anonymously at no charge using public-standard network protocols. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public. It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document. 4. MODIFICATIONS You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version: Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has less than five). State on the Title page the name of the publisher of the Modified Version, as the publisher. Preserve all the copyright notices of the Document. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice. Include an unaltered copy of this License. Preserve the section entitled "History", and its title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section entitled "History" in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the "History" section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission. In any section entitled "Acknowledgements" or "Dedications", preserve the section's title, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles. Delete any section entitled "Endorsements". Such a section may not be included in the Modified Version. Do not retitle any existing section as "Endorsements" or to conflict in title with any Invariant Section. If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles. You may add a section entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various parties--for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard. You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one. The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version. 5. COMBINING DOCUMENTS You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice. The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work. In the combination, you must combine any sections entitled "History" in the various original documents, forming one section entitled "History"; likewise combine any sections entitled "Acknowledgements", and any sections entitled "Dedications". You must delete all sections entitled "Endorsements." 6. COLLECTIONS OF DOCUMENTS You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects. You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document. 7. AGGREGATION WITH INDEPENDENT WORKS A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, does not as a whole count as a Modified Version of the Document, provided no compilation copyright is claimed for the compilation. Such a compilation is called an "aggregate", and this License does not apply to the other self-contained works thus compiled with the Document, on account of their being thus compiled, if they are not themselves derivative works of the Document. If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one quarter of the entire aggregate, the Document's Cover Texts may be placed on covers that surround only the Document within the aggregate. Otherwise they must appear on covers around the whole aggregate. 8. TRANSLATION Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License provided that you also include the original English version of this License. In case of a disagreement between the translation and the original English version of this License, the original English version will prevail. 9. TERMINATION You may not copy, modify, sublicense, or distribute the Document except as expressly provided for under this License. Any other attempt to copy, modify, sublicense or distribute the Document is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 10. FUTURE REVISIONS OF THIS LICENSE The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See http://www.gnu.org/copyleft/. Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation. How to use this License for your documents To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page:
Copyright (c) YEAR YOUR NAME. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. A copy of the license is included in the section entitled "GNU Free Documentation License".
If you have no Invariant Sections, write "with no Invariant Sections" instead of saying which ones are invariant. If you have no Front-Cover Texts, write "no Front-Cover Texts" instead of "Front-Cover Texts being LIST"; likewise for Back-Cover Texts. If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software.
libdbi-drivers-0.9.0/doc/include/doc-html.dsl000644 001750 001750 00000014552 07641141407 021705 0ustar00markusmarkus000000 000000 ]> (define %stylesheet% #f) (define %stylesheet-type% "text/css") (define %html40% #t) (define %generate-legalnotice-link% ;; put the legal notice in a separate file #f) (define %admon-graphics-path% ;; use graphics in admonitions, set their "../images/") (define %admon-graphics% #f) (define %funcsynopsis-decoration% ;; make funcsynopsis look pretty #t) (define %html-ext% ;; when producing HTML files, use this extension ".html") (define %generate-book-toc% ;; Should a Table of Contents be produced for books? #t) (define %generate-article-toc% ;; Should a Table of Contents be produced for articles? #t) (define %generate-part-toc% ;; Should a Table of Contents be produced for parts? #t) (define %generate-book-titlepage% ;; produce a title page for books #t) (define %generate-article-titlepage% ;; produce a title page for articles #t) (define (chunk-skip-first-element-list) ;; forces the Table of Contents on separate page '()) (define (list-element-list) ;; fixes bug in Table of Contents generation '()) (define %root-filename% ;; The filename of the root HTML document (e.g, "index"). "index") (define %shade-verbatim% ;; verbatim sections will be shaded if t(rue) #t) (define %use-id-as-filename% ;; Use ID attributes as name for component HTML files? #t) (define %graphic-extensions% ;; graphic extensions allowed '("gif" "png" "jpg" "jpeg" "tif" "tiff" "eps" "epsf" )) (define %graphic-default-extension% "gif") (define %section-autolabel% ;; For enumerated sections (1.1, 1.1.1, 1.2, etc.) #t) (define (toc-depth nd) ;; more depth (2 levels) to toc; instead of flat hierarchy ;; 2) 4) (element emphasis ;; make role=strong equate to bold for emphasis tag (if (equal? (attribute-string "role") "strong") (make element gi: "STRONG" (process-children)) (make element gi: "EM" (process-children)))) (define (book-titlepage-recto-elements) ;; elements on a book's titlepage ;; note: added revhistory to the default list (list (normalize "title") (normalize "subtitle") (normalize "graphic") (normalize "mediaobject") (normalize "corpauthor") (normalize "authorgroup") (normalize "author") (normalize "editor") (normalize "copyright") (normalize "revhistory") (normalize "abstract") (normalize "legalnotice"))) (define (article-titlepage-recto-elements) ;; elements on an article's titlepage ;; note: added othercredit to the default list (list (normalize "title") (normalize "subtitle") (normalize "authorgroup") (normalize "author") (normalize "othercredit") (normalize "releaseinfo") (normalize "copyright") (normalize "pubdate") (normalize "revhistory") (normalize "abstract"))) (mode article-titlepage-recto-mode (element contrib ;; print out with othercredit information; for translators, etc. (make sequence (make element gi: "SPAN" attributes: (list (list "CLASS" (gi))) (process-children)))) (element othercredit ;; print out othercredit information; for translators, etc. (let ((author-name (author-string)) (author-contrib (select-elements (children (current-node)) (normalize "contrib")))) (make element gi: "P" attributes: (list (list "CLASS" (gi))) (make element gi: "B" (literal author-name) (literal " - ")) (process-node-list author-contrib)))) ) (define (article-title nd) (let* ((artchild (children nd)) (artheader (select-elements artchild (normalize "artheader"))) (artinfo (select-elements artchild (normalize "articleinfo"))) (ahdr (if (node-list-empty? artheader) artinfo artheader)) (ahtitles (select-elements (children ahdr) (normalize "title"))) (artitles (select-elements artchild (normalize "title"))) (titles (if (node-list-empty? artitles) ahtitles artitles))) (if (node-list-empty? titles) "" (node-list-first titles)))) ;; Redefinition of $verbatim-display$ ;; Origin: dbverb.dsl ;; Different foreground and background colors for verbatim elements ;; Author: Philippe Martin (feloy@free.fr) 2001-04-07 (define ($verbatim-display$ indent line-numbers?) (let ((verbatim-element (gi)) (content (make element gi: "PRE" attributes: (list (list "CLASS" (gi))) (if (or indent line-numbers?) ($verbatim-line-by-line$ indent line-numbers?) (process-children))))) (if %shade-verbatim% (make element gi: "TABLE" attributes: (shade-verbatim-attr-element verbatim-element) (make element gi: "TR" (make element gi: "TD" (make element gi: "FONT" attributes: (list (list "COLOR" (car (shade-verbatim-element-colors verbatim-element)))) content)))) content))) ;; ;; Customize this function ;; to change the foreground and background colors ;; of the different verbatim elements ;; Return (list "foreground color" "background color") ;; (define (shade-verbatim-element-colors element) (case element (("SYNOPSIS") (list "#000000" "#6495ed")) (("PROGRAMLISTING") (list "#000000" "#E0E0E0")) ;; ... ;; Add your verbatim elements here ;; ... (else (list "#32CD32" "#000000")))) (define (shade-verbatim-attr-element element) (list (list "BORDER" "0") (list "BGCOLOR" (car (cdr (shade-verbatim-element-colors element)))) (list "WIDTH" ($table-width$)))) ;; End of $verbatim-display$ redefinition libdbi-drivers-0.9.0/doc/include/doc-print.dsl000644 001750 001750 00000003626 10303423522 022063 0ustar00markusmarkus000000 000000 ]> ;;(define %paper-type% ;; "USletter") (define %page-height% 11in) ;;(define %default-quadding% ;; 'justify) (define %top-margin% 7pi) (define %bottom-margin% 10pi) (define %footer-margin% 4pi) (define %header-margin% 3pi) (define %generate-article-toc% ;; Should a Table of Contents be produced for Articles? #t) (define (toc-depth nd) ;; used to be 2 4) (define %generate-article-titlepage-on-separate-page% ;; Should the article title page be on a separate page? #t) (define %section-autolabel% ;; Are sections enumerated? #t) (define %footnote-ulinks% ;; Generate footnotes for ULinks? #f) (define %bop-footnotes% ;; Make "bottom-of-page" footnotes? #f) (define %body-start-indent% ;; Default indent of body text 0pi) (define %para-indent-firstpara% ;; First line start-indent for the first paragraph 0pt) (define %para-indent% ;; First line start-indent for paragraphs (other than the first) 0pt) (define %block-start-indent% ;; Extra start-indent for block-elements 0pt) (define formal-object-float ;; Do formal objects float? #f) (define %hyphenation% ;; Allow automatic hyphenation? #t) (define %admon-graphics% ;; Use graphics in admonitions? #f) (define %shade-verbatim% #t) ;;(define %indent-programlisting-lines% ;; " ") ;;(define %text-width% (- %page-width% (+ %left-margin% %right-margin%))) ;;Define the body width. (Change the elements in the formula rather ;;than the formula itself) ;;(define %body-width% (- %text-width% %body-start-indent%)) libdbi-drivers-0.9.0/tests/README000644 001750 001750 00000003506 11421144135 017311 0ustar00markusmarkus000000 000000 Tests cases to libdbi framework ====================================== The tests they are in this directory are to cover the functions describe in the libdbi reference guide. Each *.c file covers specific functions and are grouped following the documentation. We are using the Cgreen unit test framework. You will need the Cgreen to execute the tests. You can get it, http://sourceforge.net/projects/cgreen, compiling and install in your system. Fortunately the libdbi test framework provide it for you. No worry about it. Steps to execute the tests ============================== - Local tests: * Install Cgreen (optional, we provide it) * cd ~/libdbi-drivers/tests * make check * answers the questions about your database engine * see the results of the tests. - How to submit the tests results to dashboard * You will need install the cmake package. It provides the ctest tool which we use to submit the tests results. You can get it from www.cmake.org or check with your distro packages. * Edit the file test_dbi.cfg (which was generated by ./configure script) and changes: type=[can be Experimental or Continuous or Nightly] tag=[tag to identify your build] dbengine strings You can change 'sitename' if you want. * Run the script ./run_test.sh. It will start dbi_test with correct options to generate a CDash reporter. * When the script finished CTest will automatically submitted the results to a dashboard. * Now you can see the results at http://my.cdash.org/index.php?project=libdbi-drivers Notes ===== Submit the tests results to a dashboard is a very useful because the developers can see what happens more quickly without the need of cut-and-paste the tests results in mail list. We can see too how many platforms the libdbi framework runs, checking build and configure, tests coverage and more others things. libdbi-drivers-0.9.0/tests/Makefile.am000644 001750 001750 00000002244 11530172363 020470 0ustar00markusmarkus000000 000000 ## Process this file with automake to produce Makefile.in AUTOMAKE_OPTIONS = foreign SUBDIRS = cgreen TESTS = @MYSQL_TEST@ @PGSQL_TEST@ @SQLITE_TEST@ @SQLITE3_TEST@ @MSQL_TEST@ @ORACLE_TEST@ @FIREBIRD_TEST@ @FREETDS_TEST@ @INGRES_TEST@ @DB2_TEST@ @LIBDBI_TEST@ check_PROGRAMS = test_dbi test_dbi_dlopen check_LTLIBRARIES = libtest_dbi_plugin.la test_dbi_SOURCES = test_dbi.c test_dbi_LDADD = $(top_srcdir)/tests/cgreen/libcgreen.a -L@libdir@ -lm -ldbi @LIBADD_LIBDBI@ test_dbi_dlopen_SOURCES = test_dbi_dlopen.c test_dbi_dlopen_LDFLAGS = @LIBADD_LIBDBI@ libtest_dbi_plugin_la_SOURCES = test_dbi_plugin.c libtest_dbi_plugin_la_LIBADD = @LIBADD_LIBDBI@ libtest_dbi_plugin_la_LDFLAGS = -module -rpath /nowhere INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/include -I$(top_srcdir)/tests/cgreen/include -I@includedir@ CFLAGS = -DDBI_DRIVER_DIR=\"@driverdir@\" @FIREBIRD_ISQL_FLAG@ -g AM_CPPFLAGS = -DDBDIR=\"@dbi_dbdir@\" @DBI_INCLUDE@ EXTRA_DIST = test_mysql.sh test_pgsql.sh test_sqlite.sh test_sqlite3.sh test_msql.sh test_oracle.sh test_firebird.sh test_freetds.sh test_ingres.sh test_db2.sh test_libdbi.sh debug: $(MAKE) all CFLAGS="@DEBUG@" profile: $(MAKE) all CFLAGS="@PROFILE@" libdbi-drivers-0.9.0/tests/Makefile.in000644 001750 001750 00000066656 12117467054 020530 0ustar00markusmarkus000000 000000 # Makefile.in generated by automake 1.12.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2012 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ check_PROGRAMS = test_dbi$(EXEEXT) test_dbi_dlopen$(EXEEXT) subdir = tests DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(srcdir)/plugin_settings.sh.in $(srcdir)/test_dbi.cfg.in \ $(top_srcdir)/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = test_dbi.cfg plugin_settings.sh CONFIG_CLEAN_VPATH_FILES = libtest_dbi_plugin_la_DEPENDENCIES = am_libtest_dbi_plugin_la_OBJECTS = test_dbi_plugin.lo libtest_dbi_plugin_la_OBJECTS = $(am_libtest_dbi_plugin_la_OBJECTS) libtest_dbi_plugin_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(libtest_dbi_plugin_la_LDFLAGS) $(LDFLAGS) -o $@ am_test_dbi_OBJECTS = test_dbi.$(OBJEXT) test_dbi_OBJECTS = $(am_test_dbi_OBJECTS) test_dbi_DEPENDENCIES = $(top_srcdir)/tests/cgreen/libcgreen.a am_test_dbi_dlopen_OBJECTS = test_dbi_dlopen.$(OBJEXT) test_dbi_dlopen_OBJECTS = $(am_test_dbi_dlopen_OBJECTS) test_dbi_dlopen_LDADD = $(LDADD) test_dbi_dlopen_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(test_dbi_dlopen_LDFLAGS) $(LDFLAGS) -o $@ DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(libtest_dbi_plugin_la_SOURCES) $(test_dbi_SOURCES) \ $(test_dbi_dlopen_SOURCES) DIST_SOURCES = $(libtest_dbi_plugin_la_SOURCES) $(test_dbi_SOURCES) \ $(test_dbi_dlopen_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = $(am__tty_colors_dummy) DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = -DDBI_DRIVER_DIR=\"@driverdir@\" @FIREBIRD_ISQL_FLAG@ -g CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DB2_INCLUDE = @DB2_INCLUDE@ DB2_LDFLAGS = @DB2_LDFLAGS@ DB2_LIBS = @DB2_LIBS@ DB2_TEST = @DB2_TEST@ DBI_INCLUDE = @DBI_INCLUDE@ DEBUG = @DEBUG@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FIREBIRD_INCLUDE = @FIREBIRD_INCLUDE@ FIREBIRD_ISQL = @FIREBIRD_ISQL@ FIREBIRD_ISQL_FLAG = @FIREBIRD_ISQL_FLAG@ FIREBIRD_LDFLAGS = @FIREBIRD_LDFLAGS@ FIREBIRD_LIBS = @FIREBIRD_LIBS@ FIREBIRD_TEST = @FIREBIRD_TEST@ FREETDS_INCLUDE = @FREETDS_INCLUDE@ FREETDS_LDFLAGS = @FREETDS_LDFLAGS@ FREETDS_LIBS = @FREETDS_LIBS@ FREETDS_TEST = @FREETDS_TEST@ GREP = @GREP@ INGRES_INCLUDE = @INGRES_INCLUDE@ INGRES_LDFLAGS = @INGRES_LDFLAGS@ INGRES_LIBS = @INGRES_LIBS@ INGRES_TEST = @INGRES_TEST@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBADD_LIBDBI = @LIBADD_LIBDBI@ LIBDBI_LIBDIR = @LIBDBI_LIBDIR@ LIBDBI_TEST = @LIBDBI_TEST@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSQL_INCLUDE = @MSQL_INCLUDE@ MSQL_LDFLAGS = @MSQL_LDFLAGS@ MSQL_LIBS = @MSQL_LIBS@ MSQL_TEST = @MSQL_TEST@ MYSQL_CONFIG = @MYSQL_CONFIG@ MYSQL_INCLUDE = @MYSQL_INCLUDE@ MYSQL_LDFLAGS = @MYSQL_LDFLAGS@ MYSQL_LIBS = @MYSQL_LIBS@ MYSQL_TEST = @MYSQL_TEST@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ ORACLE_INCLUDE = @ORACLE_INCLUDE@ ORACLE_LDFLAGS = @ORACLE_LDFLAGS@ ORACLE_LIBS = @ORACLE_LIBS@ ORACLE_TEST = @ORACLE_TEST@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PGSQL_INCLUDE = @PGSQL_INCLUDE@ PGSQL_LDFLAGS = @PGSQL_LDFLAGS@ PGSQL_LIBS = @PGSQL_LIBS@ PGSQL_TEST = @PGSQL_TEST@ PG_CONFIG = @PG_CONFIG@ PROFILE = @PROFILE@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SQLITE3_INCLUDE = @SQLITE3_INCLUDE@ SQLITE3_LDFLAGS = @SQLITE3_LDFLAGS@ SQLITE3_LIBS = @SQLITE3_LIBS@ SQLITE3_TEST = @SQLITE3_TEST@ SQLITE_INCLUDE = @SQLITE_INCLUDE@ SQLITE_LDFLAGS = @SQLITE_LDFLAGS@ SQLITE_LIBS = @SQLITE_LIBS@ SQLITE_TEST = @SQLITE_TEST@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ dbi_dbdir = @dbi_dbdir@ docdir = @docdir@ docs_subdirs = @docs_subdirs@ driverdir = @driverdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = foreign SUBDIRS = cgreen TESTS = @MYSQL_TEST@ @PGSQL_TEST@ @SQLITE_TEST@ @SQLITE3_TEST@ @MSQL_TEST@ @ORACLE_TEST@ @FIREBIRD_TEST@ @FREETDS_TEST@ @INGRES_TEST@ @DB2_TEST@ @LIBDBI_TEST@ check_LTLIBRARIES = libtest_dbi_plugin.la test_dbi_SOURCES = test_dbi.c test_dbi_LDADD = $(top_srcdir)/tests/cgreen/libcgreen.a -L@libdir@ -lm -ldbi @LIBADD_LIBDBI@ test_dbi_dlopen_SOURCES = test_dbi_dlopen.c test_dbi_dlopen_LDFLAGS = @LIBADD_LIBDBI@ libtest_dbi_plugin_la_SOURCES = test_dbi_plugin.c libtest_dbi_plugin_la_LIBADD = @LIBADD_LIBDBI@ libtest_dbi_plugin_la_LDFLAGS = -module -rpath /nowhere INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/include -I$(top_srcdir)/tests/cgreen/include -I@includedir@ AM_CPPFLAGS = -DDBDIR=\"@dbi_dbdir@\" @DBI_INCLUDE@ EXTRA_DIST = test_mysql.sh test_pgsql.sh test_sqlite.sh test_sqlite3.sh test_msql.sh test_oracle.sh test_firebird.sh test_freetds.sh test_ingres.sh test_db2.sh test_libdbi.sh all: all-recursive .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign tests/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign tests/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): test_dbi.cfg: $(top_builddir)/config.status $(srcdir)/test_dbi.cfg.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ plugin_settings.sh: $(top_builddir)/config.status $(srcdir)/plugin_settings.sh.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ clean-checkLTLIBRARIES: -test -z "$(check_LTLIBRARIES)" || rm -f $(check_LTLIBRARIES) @list='$(check_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libtest_dbi_plugin.la: $(libtest_dbi_plugin_la_OBJECTS) $(libtest_dbi_plugin_la_DEPENDENCIES) $(EXTRA_libtest_dbi_plugin_la_DEPENDENCIES) $(libtest_dbi_plugin_la_LINK) $(libtest_dbi_plugin_la_OBJECTS) $(libtest_dbi_plugin_la_LIBADD) $(LIBS) clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list test_dbi$(EXEEXT): $(test_dbi_OBJECTS) $(test_dbi_DEPENDENCIES) $(EXTRA_test_dbi_DEPENDENCIES) @rm -f test_dbi$(EXEEXT) $(LINK) $(test_dbi_OBJECTS) $(test_dbi_LDADD) $(LIBS) test_dbi_dlopen$(EXEEXT): $(test_dbi_dlopen_OBJECTS) $(test_dbi_dlopen_DEPENDENCIES) $(EXTRA_test_dbi_dlopen_DEPENDENCIES) @rm -f test_dbi_dlopen$(EXEEXT) $(test_dbi_dlopen_LINK) $(test_dbi_dlopen_OBJECTS) $(test_dbi_dlopen_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_dbi.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_dbi_dlopen.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_dbi_plugin.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(RECURSIVE_TARGETS) $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done cscopelist-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) cscopelist); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags check-TESTS: $(TESTS) @failed=0; all=0; xfail=0; xpass=0; skip=0; \ srcdir=$(srcdir); export srcdir; \ list=' $(TESTS) '; \ $(am__tty_colors); \ if test -n "$$list"; then \ for tst in $$list; do \ if test -f ./$$tst; then dir=./; \ elif test -f $$tst; then dir=; \ else dir="$(srcdir)/"; fi; \ if $(TESTS_ENVIRONMENT) $${dir}$$tst $(AM_TESTS_FD_REDIRECT); then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$tst[\ \ ]*) \ xpass=`expr $$xpass + 1`; \ failed=`expr $$failed + 1`; \ col=$$red; res=XPASS; \ ;; \ *) \ col=$$grn; res=PASS; \ ;; \ esac; \ elif test $$? -ne 77; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$tst[\ \ ]*) \ xfail=`expr $$xfail + 1`; \ col=$$lgn; res=XFAIL; \ ;; \ *) \ failed=`expr $$failed + 1`; \ col=$$red; res=FAIL; \ ;; \ esac; \ else \ skip=`expr $$skip + 1`; \ col=$$blu; res=SKIP; \ fi; \ echo "$${col}$$res$${std}: $$tst"; \ done; \ if test "$$all" -eq 1; then \ tests="test"; \ All=""; \ else \ tests="tests"; \ All="All "; \ fi; \ if test "$$failed" -eq 0; then \ if test "$$xfail" -eq 0; then \ banner="$$All$$all $$tests passed"; \ else \ if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \ fi; \ else \ if test "$$xpass" -eq 0; then \ banner="$$failed of $$all $$tests failed"; \ else \ if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ fi; \ fi; \ dashes="$$banner"; \ skipped=""; \ if test "$$skip" -ne 0; then \ if test "$$skip" -eq 1; then \ skipped="($$skip test was not run)"; \ else \ skipped="($$skip tests were not run)"; \ fi; \ test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ dashes="$$skipped"; \ fi; \ report=""; \ if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \ report="Please report to $(PACKAGE_BUGREPORT)"; \ test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \ dashes="$$report"; \ fi; \ dashes=`echo "$$dashes" | sed s/./=/g`; \ if test "$$failed" -eq 0; then \ col="$$grn"; \ else \ col="$$red"; \ fi; \ echo "$${col}$$dashes$${std}"; \ echo "$${col}$$banner$${std}"; \ test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \ test -z "$$report" || echo "$${col}$$report$${std}"; \ echo "$${col}$$dashes$${std}"; \ test "$$failed" -eq 0; \ else :; fi distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_LTLIBRARIES) $(check_PROGRAMS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-checkLTLIBRARIES clean-checkPROGRAMS clean-generic \ clean-libtool mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) check-am \ cscopelist-recursive ctags-recursive install-am install-strip \ tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-TESTS check-am clean \ clean-checkLTLIBRARIES clean-checkPROGRAMS clean-generic \ clean-libtool cscopelist cscopelist-recursive ctags \ ctags-recursive distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-recursive uninstall uninstall-am debug: $(MAKE) all CFLAGS="@DEBUG@" profile: $(MAKE) all CFLAGS="@PROFILE@" # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: libdbi-drivers-0.9.0/tests/plugin_settings.sh.in000644 001750 001750 00000000036 11530170634 022607 0ustar00markusmarkus000000 000000 LIBDBI_LIBDIR=@LIBDBI_LIBDIR@ libdbi-drivers-0.9.0/tests/test_dbi.cfg.in000644 001750 001750 00000001112 11421144143 021302 0ustar00markusmarkus000000 000000 # You can change type, tag and dbengine hostname dbi0 os_name Linux os_platform x86_64 os_release 2.6.28-15-server os_version Ubuntu 9.04 server tag joaohf type Nightly # for each dbengine setup this values # driver user password hostname mysql r:n:/usr/local/lib/dbd:mysql:root:root:localhost:libdbitest pgsql r:n:/usr/local/lib/dbd:pgsql:joaohf:joaohf:localhost:libdbitest sqlite3 r:n:/usr/local/lib/dbd:sqlite3::libdbitest sqlite r:n:/usr/local/lib/dbd:sqlite::libdbitest #firebird sysdba masterkey localhost # Don't change bellow buildname @PACKAGE@-@VERSION@ sitename @host@ libdbi-drivers-0.9.0/tests/test_dbi_plugin.c000644 001750 001750 00000001641 11530170634 021752 0ustar00markusmarkus000000 000000 /* test_dbi_plugin - lodable test library that uses drivers Copyright (C) 2010 Canonical, Ltd. All Rights Reserved Author: Clint Byrum This library is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser Public License as published by the Free Software Foundation, either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser Public License for more details. You should have received a copy of the GNU Lesser Public License along with this library. If not, see . */ #include int init_db(char *dir); int init_db(char *dir) { return dbi_initialize(dir); } libdbi-drivers-0.9.0/tests/test_dbi.c000644 001750 001750 00000622523 12112426221 020375 0ustar00markusmarkus000000 000000 /* * libdbi-drivers - database drivers for libdbi, the database * independent abstraction layer for C. * Copyright (C) 2001-2008, David Parker, Mark Tobenkin, Markus Hoenicka * http://libdbi-drivers.sourceforge.net * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * $Id: test_dbi.c,v 1.72 2013/02/24 15:06:57 mhoenicka Exp $ */ #include #include #include #include /* need this to access custom functions */ #include #include #include /* for strtol() */ #include #include #ifdef __MINGW32__ #include #define sleep(seconds) Sleep((seconds)*1000) #endif /* this is defined in configure.in, but unavailable if firebird isn't installed */ #ifndef FIREBIRD_ISQL #define FIREBIRD_ISQL "cat" #endif #define QUERY_LEN 1024 /* this is defined by the Makefile and passed via -D */ /* #define DBDIR /usr/local/var/lib/libdbi */ /* the dbi instance for the recallable interface */ dbi_inst dbi_instance = NULL; dbi_driver test_driver = NULL; dbi_conn conn = NULL; dbi_conn test_conn = NULL; /* structure definitions */ struct CONNINFO { int n_legacy; int query_log; char driverdir[256]; char drivername[64]; int numdrivers; char dbname[64]; char initial_dbname[64]; char dbdir[256]; char username[64]; char password[64]; char hostname[256]; char version[64]; char createschema[QUERY_LEN + 1]; char createsubschema[5][QUERY_LEN + 1]; char dropsubschema[5][QUERY_LEN + 1]; char query[QUERY_LEN + 1]; char encoding[20]; }; struct TABLEINFO { int have_double; int have_longlong; int have_ulonglong; int have_datetime; int have_datetime_tz; int have_time_tz; int number_rows; }; struct CONNINFO cinfo; struct TABLEINFO tinfo; /* switch for recallable (0) vs. legacy (!=0) interface */ int n_legacy = 0; /* some test data */ char string_to_quote[] = "Can \'we\' \"quote\" this properly?"; char string_to_escape[] = "Can \'we\' \"escape\" this properly?"; char numstring[] = "-54321"; unsigned char binary_to_quote[] = {'A', 'B', '\0', 'C', '\'', 'D'}; unsigned char binary_to_escape[] = {'A', 'B', '\0', 'C', '\'', 'D'}; size_t binary_to_quote_length = 6; size_t binary_to_escape_length = 6; const char default_dbdir[] = DBDIR; struct FIELDINFO { char name[32]; unsigned short type; unsigned int attrib; unsigned short length; unsigned short figures; union { long long int int_val; unsigned long long int uint_val; double double_val; char string_val[48]; } expect_val; long long expect_as_longlong; char expect_as_string[48]; }; /* these structures define the attributes, types, expected return values, return values as longlong, and return values as string for each supported column type of a particular database engine */ struct FIELDINFO firebird_fieldinfo[] = { {"the_char", 1, 4, 0, 0, .expect_val.int_val = -127, -127, "-127"}, /* DBI_INTEGER_SIZE2 */ {"the_uchar", 1, 4, 0, 0, .expect_val.uint_val = 127, 127, "127"}, /* DBI_INTEGER_SIZE2 */ {"the_short", 1, 4, 0, 0, .expect_val.int_val = -32768, -32768, "-32768"}, /* DBI_INTEGER_SIZE2 */ {"the_ushort", 1, 4, 0, 0, .expect_val.uint_val = 32767, 32767, "32767"}, /* DBI_INTEGER_SIZE2 */ {"the_long", 1,16, 0, 0, .expect_val.int_val = -2147483648, -2147483648, "-2147483648"}, /* DBI_INTEGER_SIZE4 */ {"the_ulong", 1,16, 0, 0, .expect_val.uint_val = 2147483647, 2147483647, "2147483647"}, /* DBI_INTEGER_SIZE4 */ {"the_float", 2, 2, 0, 0, .expect_val.double_val = 3.4E+37, -9223372036854775808, "3.400000e+37"}, /* DBI_DECIMAL_SIZE4 */ {"the_double", 2, 4, 0, 0, .expect_val.double_val = 1.7E+307, -9223372036854775808, "1.700000e+307"}, /* DBI_DECIMAL_SIZE8 */ {"the_conn_quoted_string", 3, 0, 31, 0, .expect_val.string_val = "Can \'we\' \"quote\" this properly?", 0, "Can \'we\' \"quote\" this properly?"}, /* string */ {"the_conn_quoted_string_copy", 3, 0, 31, 0, .expect_val.string_val = "Can \'we\' \"quote\" this properly?", 0, "Can \'we\' \"quote\" this properly?"}, /* string */ {"the_conn_escaped_string", 3, 0, 32, 0, .expect_val.string_val = "Can 'we' \"escape\" this properly?", 0, "Can 'we' \"escape\" this properly?"}, /* string */ {"the_conn_escaped_string_copy", 3, 0, 32, 0, .expect_val.string_val = "Can 'we' \"escape\" this properly?", 0, "Can 'we' \"escape\" this properly?"}, /* string */ {"the_numstring", 3, 0, 6, 0, .expect_val.string_val = "-54321", -54321, "-54321"}, /* string */ {"the_empty_string", 3, 0, 0, 0, .expect_val.string_val = "", 0, ""}, /* string */ {"the_null_string", 3, 0, 0, 0, .expect_val.string_val = "!", 0, ""}, /* string TODO: should be NULL */ {"the_binary_quoted_string", 4, 0, 6, 0, .expect_val.string_val = "", 0, ""}, /* binary string */ {"the_binary_escaped_string", 4, 0, 6, 0, .expect_val.string_val = "", 0, ""}, /* binary string */ {"the_datetime", 5, 3, 0, 0, .expect_val.uint_val = 1009843199, 1009843199, "2001-12-31 23:59:59"}, /* DBI_DATETIME_TIME|DATE */ {"the_date", 5, 1, 0, 0, .expect_val.uint_val = 1009756800, 1009756800, "2001-12-31 00:00:00"}, /* DBI_DATETIME_DATE */ {"the_time", 5, 2, 0, 0, .expect_val.uint_val = 86399, 86399, "1970-01-01 23:59:59"},/* DBI_DATETIME_TIME */ {"_escaped_string", 3, 0, 32, 0, .expect_val.string_val = "Can ''we'' \"escape\" this properly?", 0, "Can ''we'' \"escape\" this properly?"}, /* string */ {"_quoted_string", 3, 0, 31, 0, .expect_val.string_val = "'Can ''we'' \"quote\" this properly?'", 0, "'Can ''we'' \"quote\" this properly?'"}, /* string */ {"", 0, 0, 0, 0, .expect_val.int_val = 0, 0, ""} }; struct FIELDINFO freetds_fieldinfo[] = { /* name, index, type, attrib */ {"the_char", 1, 2, 0, 0, .expect_val.int_val = -127, -127, "-127"}, /* DBI_INTEGER_SIZE1 */ {"the_uchar", 1, 2, 0, 0, .expect_val.uint_val = 127, 127, "127"}, /* DBI_INTEGER_SIZE1 */ {"the_short", 1, 4, 0, 0, .expect_val.int_val = -32768, -32768, "-32768"}, /* DBI_INTEGER_SIZE2 */ {"the_ushort", 1, 4, 0, 0, .expect_val.uint_val = 32767, 32768, "32767"}, /* DBI_INTEGER_SIZE2 */ {"the_long", 1,16, 0, 0, .expect_val.int_val = -2147483648, -2147483648, "-2147483648"}, /* DBI_INTEGER_SIZE4 */ {"the_ulong", 1,16, 0, 0, .expect_val.uint_val = 2147483647, 2147483647, "2147483647"}, /* DBI_INTEGER_SIZE4 */ {"the_longlong", 1,32, 0, 0, .expect_val.int_val = -9223372036854775807, -9223372036854775807, "-9223372036854775807"}, /* DBI_INTEGER_SIZE8 */ {"the_ulonglong", 1,32, 0, 0, .expect_val.int_val = 9223372036854775807, 9223372036854775807, "9223372036854775807"}, /* DBI_INTEGER_SIZE8 */ {"the_float", 2, 2, 0, 0, .expect_val.double_val = 3.402823466E+38, 3.402823466E+38, "3.40280E+38"}, /* DBI_DECIMAL_SIZE4 */ {"the_double", 2, 4, 0, 0, .expect_val.double_val = 1.7E+307, 1.7E+307, "1.797693e+307"}, /* DBI_DECIMAL_SIZE8 */ {"the_conn_quoted_string", 3, 0, 31, 0, .expect_val.string_val = "Can \'we\' \"quote\" this properly?", 0, "Can \'we\' \"quote\" this properly?"}, /* string */ {"the_conn_quoted_string_copy", 3, 0, 32, 0, .expect_val.string_val = "Can \'we\' \"quote\" this properly?", 0, "Can \'we\' \"quote\" this properly?"}, /* string */ {"the_conn_escaped_string", 3, 0, 32, 0, .expect_val.string_val = "Can 'we' \"escape\" this properly?", 0, "Can 'we' \"escape\" this properly?"}, /* string */ {"the_conn_escaped_string_copy", 3, 0, 32, 0, .expect_val.string_val = "Can 'we' \"escape\" this properly?", 0, "Can 'we' \"escape\" this properly?"}, /* string */ {"the_numstring", 3, 0, 0, 0, .expect_val.string_val = "-54321", -54321, "-54321"}, /* string */ {"the_empty_string", 3, 0, 0, 0, .expect_val.string_val = "", 0, ""}, /* string */ {"the_null_string", 3, 0, 0, 0, .expect_val.string_val = "", 0, ""}, /* string */ {"the_binary_quoted_string", 4, 0, 0, 0, .expect_val.string_val = "", 0, ""}, /* string */ {"the_binary_escaped_string", 4, 0, 0, 0, .expect_val.string_val = "", 0, ""}, /* string */ {"the_datetime", 5, 3, 0, 0, .expect_val.uint_val = 1009843199, 1009843199, "2001-12-31 23:59:59"}, /* DBI_DATETIME_TIME|DATE */ {"the_date", 5, 1, 0, 0, .expect_val.uint_val = 1009756800, 1009756800, "2001-12-31 00:00:00"}, /* DBI_DATETIME_DATE */ {"the_time", 5, 2, 0, 0, .expect_val.uint_val = 86399, 86399, "1970-01-01 23:59:59"}, /* DBI_DATETIME_TIME */ {"", 0, 0, 0, 0, .expect_val.int_val = 0, 0, ""} }; struct FIELDINFO ingres_fieldinfo[] = { /* name, index, type,, attrib */ {"the_char", 1, 2, 0, 0, .expect_val.int_val = -127, -127, "-127"}, /* DBI_INTEGER_SIZE1 */ {"the_uchar", 1, 2, 0, 0, .expect_val.uint_val = 127, 127, "127"}, /* DBI_INTEGER_SIZE1 */ {"the_short", 1, 4, 0, 0, .expect_val.int_val = -32768, -32768, "-32768"}, /* DBI_INTEGER_SIZE2 */ {"the_ushort", 1, 4, 0, 0, .expect_val.uint_val = 32767, 32768, "32767"}, /* DBI_INTEGER_SIZE2 */ {"the_long", 1, 16, 0, 0, .expect_val.int_val = -2147483648, -2147483648, "-2147483648"}, /* DBI_INTEGER_SIZE4 */ {"the_ulong", 1, 16, 0, 0, .expect_val.uint_val = 2147483647, 2147483647, "2147483647"}, /* DBI_INTEGER_SIZE4 */ {"the_longlong", 1, 32, 0, 0, .expect_val.int_val = -9223372036854775807, -9223372036854775807, "-9223372036854775807"}, /* DBI_INTEGER_SIZE8 */ {"the_ulonglong", 1, 32, 0, 0, .expect_val.int_val = 9223372036854775807, 9223372036854775807, "9223372036854775807"}, /* DBI_INTEGER_SIZE8 */ {"the_float", 2, 2, 0, 0, .expect_val.double_val = 3.402823466E+38, 3.402823466E+38, "3.40280E+38"}, /* DBI_DECIMAL_SIZE4 */ {"the_double", 2, 4, 0, 0, .expect_val.double_val = 1.7E+307, 1.7E+307, "1.797693e+307"}, /* DBI_DECIMAL_SIZE8 */ {"the_decimal", 3, 0, 0, 0, .expect_val.double_val = 1234.5678, 1234.5678, "1234.5678"}, /* string */ {"the_money", 3, 0, 0, 0, .expect_val.double_val = 567.89, 567.89, "$567.89"}, /* string */ {"the_character", 3, 0, 0, 0, .expect_val.string_val = "char column", 0, "char column"}, /* string */ {"the_byte", 3, 0, 0, 0, .expect_val.string_val = "", 0, ""}, /* string */ /* TODO: insert useful value */ {"the_conn_quoted_string", 3, 0, 0, 0, .expect_val.string_val = "Can \'we\' \"quote\" this properly?", 0, "Can \'we\' \"quote\" this properly?"}, /* string */ {"the_conn_quoted_string_copy", 3, 0, 0, 0, .expect_val.string_val = "Can \'we\' \"quote\" this properly?", 0, "Can \'we\' \"quote\" this properly?"}, /* string */ {"the_conn_escaped_string", 3, 0, 0, 0, .expect_val.string_val = "Can 'we' \"escape\" this properly?", 0, "Can 'we' \"escape\" this properly?"}, /* string */ {"the_conn_escaped_string_copy", 3, 0, 0, 0, .expect_val.string_val = "Can 'we' \"escape\" this properly?", 0, "Can 'we' \"escape\" this properly?"}, /* string */ {"the_numstring", 3, 0, 0, 0, .expect_val.string_val = "-54321", -54321, "-54321"}, /* string */ {"the_empty_string", 3, 0, 0, 0, .expect_val.string_val = "", 0, ""}, /* string */ {"the_null_string", 3, 0, 0, 0, .expect_val.string_val = "", 0, ""}, /* string */ {"the_binary_quoted_string", 4, 0, 0, 0, .expect_val.string_val = "", 0, ""}, /* string */ {"the_binary_escaped_string", 4, 0, 0, 0, .expect_val.string_val = "", 0, ""}, /* string */ {"the_datetime", 5, 3, 0, 0, .expect_val.uint_val = 1009843199, 1009843199, "2001-12-31 23:59:59"}, /* DBI_DATETIME_TIME|DATE */ {"the_date", 5, 1, 0, 0, .expect_val.uint_val = 1009756800, 1009756800, "2001-12-31 00:00:00"}, /* DBI_DATETIME_DATE */ {"the_time", 5, 2, 0, 0, .expect_val.uint_val = 86399, 86399, "1970-01-01 23:59:59"}, /* DBI_DATETIME_TIME */ {"", 0, 0, 0, 0, .expect_val.int_val = 0, 0, ""} }; struct FIELDINFO msql_fieldinfo[] = { /* name, index, type,, attrib */ {"the_char", 1, 4, 0, 0, .expect_val.int_val = -127, -127, "-127"}, /* DBI_INTEGER_SIZE2 */ {"the_uchar", 1, 4, 0, 0, .expect_val.int_val = 127, 127, "127"}, /* DBI_INTEGER_SIZE2 */ {"the_short", 1, 4, 0, 0, .expect_val.int_val = -32768, -32768, "-32768"}, /* DBI_INTEGER_SIZE2 */ {"the_ushort", 1, 4, 0, 0, .expect_val.int_val = 32768, 32768, "32768"}, /* DBI_INTEGER_SIZE2 */ {"the_long", 1, 16, 0, 0, .expect_val.int_val = -2147483648, -2147483648, "-2147483648"}, /* DBI_INTEGER_SIZE4 */ {"the_ulong", 1, 16, 0, 0, .expect_val.int_val = 2147483647, 2147483647, "2147483647"}, /* DBI_INTEGER_SIZE4 */ {"the_longlong", 1, 32, 0, 0, .expect_val.int_val = -9223372036854775807, -9223372036854775807, "-9223372036854775807"}, /* DBI_INTEGER_SIZE8 */ {"the_ulonglong", 1, 32, 0, 0, .expect_val.int_val = 9223372036854775807, 9223372036854775807, "9223372036854775807"}, /* DBI_INTEGER_SIZE8 */ {"the_float", 2, 2, 0, 0, .expect_val.double_val = 3.402823466E+38, 3.402823466E+38, "3.40280E+38"}, /* DBI_DECIMAL_SIZE4 */ {"the_conn_quoted_string", 3, 0, 0, 0, .expect_val.string_val = "Can \'we\' \"quote\" this properly?", 0, "Can \'we\' \"quote\" this properly?"}, /* string */ {"the_conn_quoted_string_copy", 3, 0, 0, 0, .expect_val.string_val = "Can \'we\' \"quote\" this properly?", 0, "Can \'we\' \"quote\" this properly?"}, /* string */ {"the_conn_escaped_string", 3, 0, 0, 0, .expect_val.string_val = "Can 'we' \"escape\" this properly?", 0, "Can 'we' \"escape\" this properly?"}, /* string */ {"the_conn_escaped_string_copy", 3, 0, 0, 0, .expect_val.string_val = "Can 'we' \"escape\" this properly?", 0, "Can 'we' \"escape\" this properly?"}, /* string */ {"the_numstring", 3, 0, 0, 0, .expect_val.string_val = "-54321", -54321, "-54321"}, /* string */ {"the_empty_string", 3, 0, 0, 0, .expect_val.string_val = "", 0, ""}, /* string */ {"the_null_string", 3, 0, 0, 0, .expect_val.string_val = "", 0, ""}, /* string */ {"the_date", 5, 1, 0, 0, .expect_val.uint_val = 1009756800, 1009756800, "2001-12-31 00:00:00"}, /* DBI_DATETIME_DATE */ {"the_time", 5, 2, 0, 0, .expect_val.uint_val = 86399, 86399, "1970-01-01 23:59:59"}, /* DBI_DATETIME_TIME */ {"the_time_tz", 5, 2, 0, 0, .expect_val.uint_val = 122399, 122399, "1970-01-01 23:59:59"}, /* DBI_DATETIME_TIME */ {"", 0, 0, 0, 0, .expect_val.int_val = 0, 0, ""} }; struct FIELDINFO mysql_fieldinfo[] = { /* name, index, type,, attrib */ {"the_char", 1, 2, 0, 0, .expect_val.int_val = -127, -127, "-127"}, /* DBI_INTEGER_SIZE1 */ {"the_uchar", 1, 2, 0, 0, .expect_val.int_val = 127, 127, "127"}, /* DBI_INTEGER_SIZE1 */ {"the_short", 1, 4, 0, 0, .expect_val.int_val = -32768, -32768, "-32768"}, /* DBI_INTEGER_SIZE2 */ {"the_ushort", 1, 4, 0, 0, .expect_val.int_val = 32767, 32767, "32767"}, /* DBI_INTEGER_SIZE2 */ {"the_long", 1,16, 0, 0, .expect_val.int_val = -2147483648, -2147483648, "-2147483648"}, /* DBI_INTEGER_SIZE4 */ {"the_ulong", 1,16, 0, 0, .expect_val.int_val = 2147483647, 2147483647, "2147483647"}, /* DBI_INTEGER_SIZE4 */ {"the_longlong", 1,32, 0, 0, .expect_val.int_val = -9223372036854775807, -9223372036854775807, "-9223372036854775807"}, /* DBI_INTEGER_SIZE8 */ {"the_ulonglong", 1,32, 0, 0, .expect_val.int_val = 9223372036854775807, 9223372036854775807, "9223372036854775807"}, /* DBI_INTEGER_SIZE8 */ {"the_float", 2, 2, 0, 5, .expect_val.double_val = 3.402823466E+38, -9223372036854775808, "3.402820e+38"}, /* DBI_DECIMAL_SIZE4 */ {"the_double", 2, 4, 0, 7, .expect_val.double_val = 1.797693E+307, -9223372036854775808, "1.797693e+307"}, /* DBI_DECIMAL_SIZE8 */ {"the_conn_quoted_string", 3, 0, 31, 0, .expect_val.string_val = "Can \'we\' \"quote\" this properly?", 0, "Can \'we\' \"quote\" this properly?"}, /* string */ {"the_conn_quoted_string_copy", 3, 0, 31, 0, .expect_val.string_val = "Can \'we\' \"quote\" this properly?", 0, "Can \'we\' \"quote\" this properly?"}, /* string */ {"the_conn_escaped_string", 3, 0, 32, 0, .expect_val.string_val = "Can 'we' \"escape\" this properly?", 0, "Can 'we' \"escape\" this properly?"}, /* string */ {"the_conn_escaped_string_copy", 3, 0, 32, 0, .expect_val.string_val = "Can 'we' \"escape\" this properly?", 0, "Can 'we' \"escape\" this properly?"}, /* string */ {"the_numstring", 3, 0, 6, 0, .expect_val.string_val = "-54321", -54321, "-54321"}, /* string */ {"the_empty_string", 3, 0, 0, 0, .expect_val.string_val = "", 0, ""}, /* string */ {"the_null_string", 3, 0, 0, 0, .expect_val.string_val = "!", 0, ""}, /* string */ {"the_binary_quoted_string", 4, 0, 6, 0, .expect_val.string_val = "", 0, ""}, /* string */ {"the_binary_escaped_string", 4, 0, 6, 0, .expect_val.string_val = "", 0, ""}, /* string */ {"the_datetime", 5, 3, 0, 0, .expect_val.uint_val = 1009843199, 1009843199, "2001-12-31 23:59:59"}, /* DBI_DATETIME_DATE|TIME */ {"the_datetime_tz", 5, 3, 0, 0, .expect_val.uint_val = 1009843199, 1009843199, "2001-12-31 23:59:59"}, /* DBI_DATETIME_DATE|TIME */ {"the_date", 5, 1, 0, 0, .expect_val.uint_val = 1009756800, 1009756800, "2001-12-31 00:00:00"}, /* DBI_DATETIME_DATE */ {"the_time", 5, 2, 0, 0, .expect_val.uint_val = 86399, 86399, "1970-01-01 23:59:59"}, /* DBI_DATETIME_TIME */ {"the_time_tz", 5, 2, 0, 0, .expect_val.uint_val = 86399, 86399, "1970-01-01 23:59:59"}, /* DBI_DATETIME_TIME */ {"_escaped_string", 3, 0, 32, 0, .expect_val.string_val = "Can \\'we\\' \\\"escape\\\" this properly?", 0, "Can \\'we\\' \\\"escape\\\" this properly?"}, /* string */ {"_quoted_string", 3, 0, 31, 0, .expect_val.string_val = "'Can \\'we\\' \\\"quote\\\" this properly?'", 0, "'Can \\'we\\' \\\"quote\\\" this properly?'"}, /* string */ {"", 0, 0, 0, 0, .expect_val.int_val = 0, 0, ""} }; struct FIELDINFO pgsql_fieldinfo[] = { /* name, index, type,, attrib */ {"the_char", 1, 4 /* should be 2, but there is no char type */, 0, 0, .expect_val.int_val = -127, -127, "-127"}, /* DBI_INTEGER_SIZE1 */ {"the_uchar", 1, 4, 0, 0, .expect_val.uint_val = 127, 127, "127"}, /* DBI_INTEGER_SIZE1 */ {"the_short", 1, 4, 0, 0, .expect_val.int_val = -32768, -32768, "-32768"}, /* DBI_INTEGER_SIZE2 */ {"the_ushort", 1, 4, 0, 0, .expect_val.int_val = 32767, 32767, "32767"}, /* DBI_INTEGER_SIZE2 */ {"the_long", 1,16, 0, 0, .expect_val.int_val = -2147483648, -2147483648, "-2147483648"}, /* DBI_INTEGER_SIZE4 */ {"the_ulong", 1,16, 0, 0, .expect_val.int_val = 2147483647, 2147483647, "2147483647"}, /* DBI_INTEGER_SIZE4 */ {"the_longlong", 1,32, 0, 0, .expect_val.int_val = -9223372036854775807, -9223372036854775807, "-9223372036854775807"}, /* DBI_INTEGER_SIZE8 */ {"the_ulonglong", 1,32, 0, 0, .expect_val.int_val = 9223372036854775807, 9223372036854775807, "9223372036854775807"}, /* DBI_INTEGER_SIZE8 */ {"the_float", 2, 2, 0, 5, .expect_val.double_val = 3.402823466E+38, -9223372036854775808, "3.402820e+38"}, /* DBI_DECIMAL_SIZE4 */ {"the_double", 2, 4, 0, 7, .expect_val.double_val = 1.797693e+307, -9223372036854775808, " 1.797693e+307"}, /* DBI_DECIMAL_SIZE8 */ {"the_conn_quoted_string", 3, 0, 31, 0, .expect_val.string_val = "Can \'we\' \"quote\" this properly?", 0, "Can \'we\' \"quote\" this properly?"}, /* string */ {"the_conn_quoted_string_copy", 3, 0, 31, 0, .expect_val.string_val = "Can \'we\' \"quote\" this properly?", 0, "Can \'we\' \"quote\" this properly?"}, /* string */ {"the_conn_escaped_string", 3, 0, 32, 0, .expect_val.string_val = "Can 'we' \"escape\" this properly?", 0, "Can 'we' \"escape\" this properly?"}, /* string */ {"the_conn_escaped_string_copy", 3, 0, 32, 0, .expect_val.string_val = "Can 'we' \"escape\" this properly?", 0, "Can 'we' \"escape\" this properly?"}, /* string */ {"the_numstring", 3, 0, 6, 0, .expect_val.string_val = "-54321", -54321, "-54321"}, /* string */ {"the_empty_string", 3, 0, 0, 0, .expect_val.string_val = "", 0, ""}, /* string */ {"the_null_string", 3, 0, 0, 0, .expect_val.string_val = "!", 0, ""}, /* string */ {"the_binary_quoted_string", 4, 0, 6, 0, .expect_val.string_val = "", 0, ""}, /* string */ {"the_binary_escaped_string", 4, 0, 6, 0, .expect_val.string_val = "", 0, ""}, /* string */ {"the_datetime", 5, 3, 0, 0, .expect_val.uint_val = 1009843199, 1009843199, "2001-12-31 23:59:59"}, /* DBI_DATETIME_DATE|TIME */ {"the_datetime_tz", 5, 3, 0, 0, .expect_val.uint_val = 1009879199, 1009879199, "2001-12-31 23:59:59"}, /* DBI_DATETIME_DATE|TIME */ {"the_date", 5, 1, 0, 0, .expect_val.uint_val = 1009756800, 1009756800, "2001-12-31 00:00:00"}, /* DBI_DATETIME_DATE */ {"the_time", 5, 2, 0, 0, .expect_val.uint_val = 86399, 86399, "1970-01-01 23:59:59"}, /* DBI_DATETIME_TIME */ {"the_time_tz", 5, 2, 0, 0, .expect_val.uint_val = 122399, 122399, "1970-01-01 23:59:59"}, /* DBI_DATETIME_TIME */ {"_escaped_string", 3, 0, 32, 0, .expect_val.string_val = "Can ''we'' \"escape\" this properly?", 0, "Can ''we'' \"escape\" this properly?"}, /* string */ {"_quoted_string", 3, 0, 31, 0, .expect_val.string_val = "'Can ''we'' \"quote\" this properly?'", 0, "'Can ''we'' \"quote\" this properly?'"}, /* string */ {"", 0, 0, 0, 0, .expect_val.int_val = 0, 0, ""} }; struct FIELDINFO db2_fieldinfo[] = { /* name, index, type,, attrib */ {"the_char", 1, 2, 0, 0, .expect_val.int_val = -127, -127, "-127"}, /* DBI_INTEGER_SIZE1 */ {"the_uchar", 1, 2, 0, 0, .expect_val.int_val = 127, 127, "127"}, /* DBI_INTEGER_SIZE1 */ {"the_short", 1, 4, 0, 0, .expect_val.int_val = -32768, -32768, "-32768"}, /* DBI_INTEGER_SIZE2 */ {"the_ushort", 1, 4, 0, 0, .expect_val.int_val = 32768, 32768, "32768"}, /* DBI_INTEGER_SIZE2 */ {"the_long", 1,16, 0, 0, .expect_val.int_val = -2147483648, -2147483648, "-2147483648"}, /* DBI_INTEGER_SIZE4 */ {"the_ulong", 1,16, 0, 0, .expect_val.int_val = 2147483647, 2147483647, "2147483647"}, /* DBI_INTEGER_SIZE4 */ {"the_longlong", 1,32, 0, 0, .expect_val.int_val = -9223372036854775807, -9223372036854775807, "-9223372036854775807"}, /* DBI_INTEGER_SIZE8 */ {"the_ulonglong", 1,32, 0, 0, .expect_val.int_val = 9223372036854775807, 9223372036854775807, "9223372036854775807"}, /* DBI_INTEGER_SIZE8 */ {"the_float", 2, 2, 0, 7, .expect_val.double_val = 3.402823466E+38, 3.402823466E+38, "3.40280E+38"}, /* DBI_DECIMAL_SIZE4 */ {"the_double", 2, 4, 0, 7, .expect_val.double_val = 1.7E+307, 1.7E+307, "1.797693e+307"}, /* DBI_DECIMAL_SIZE8 */ {"the_conn_quoted_string", 3, 0, 0, 0, .expect_val.string_val = "Can \'we\' \"quote\" this properly?", 0, "Can \'we\' \"quote\" this properly?"}, /* string */ {"the_conn_quoted_string_copy", 3, 0, 0, 0, .expect_val.string_val = "Can \'we\' \"quote\" this properly?", 0, "Can \'we\' \"quote\" this properly?"}, /* string */ {"the_conn_escaped_string", 3, 0, 0, 0, .expect_val.string_val = "Can 'we' \"escape\" this properly?", 0, "Can 'we' \"escape\" this properly?"}, /* string */ {"the_conn_escaped_string_copy", 3, 0, 0, 0, .expect_val.string_val = "Can 'we' \"escape\" this properly?", 0, "Can 'we' \"escape\" this properly?"}, /* string */ {"the_numstring", 3, 0, 0, 0, .expect_val.string_val = "-54321", -54321, "-54321"}, /* string */ {"the_empty_string", 3, 0, 0, 0, .expect_val.string_val = "", 0, ""}, /* string */ {"the_null_string", 3, 0, 0, 0, .expect_val.string_val = "", 0, ""}, /* string */ {"the_binary_quoted_string", 4, 0, 0, 0, .expect_val.string_val = "", 0, ""}, /* string */ {"the_binary_escaped_string", 4, 0, 0, 0, .expect_val.string_val = "", 0, ""}, /* string */ {"the_datetime", 5, 3, 0, 0, .expect_val.uint_val = 1009843199, 1009843199, "2001-12-31 23:59:59"}, /* DBI_DATETIME_DATE|TIME */ {"the_datetime_tz", 5, 3, 0, 0, .expect_val.uint_val = 1009843199, 1009843199, "2001-12-31 23:59:59"}, /* DBI_DATETIME_DATE|TIME */ {"the_date", 5, 1, 0, 0, .expect_val.uint_val = 1009756800, 1009756800, "2001-12-31 00:00:00"}, /* DBI_DATETIME_DATE */ {"the_time", 5, 2, 0, 0, .expect_val.uint_val = 86399, 86399, "1970-01-01 23:59:59"}, /* DBI_DATETIME_TIME */ {"the_time_tz", 5, 2, 0, 0, .expect_val.uint_val = 122399, 122399, "1970-01-01 23:59:59"}, /* DBI_DATETIME_TIME */ {"", 0, 0, 0, 0, .expect_val.int_val = 0, 0, ""} }; struct FIELDINFO sqlite_fieldinfo[] = { /* name, index, type,, attrib */ {"the_char", 1, 2, 0, 0, .expect_val.int_val = -127, -127, "-127"}, /* DBI_INTEGER_SIZE1 */ {"the_uchar", 1, 2, 0, 0, .expect_val.int_val = 127, 127, "127"}, /* DBI_INTEGER_SIZE1 */ {"the_short", 1, 4, 0, 0, .expect_val.int_val = -32768, -32768, "-32768"}, /* DBI_INTEGER_SIZE2 */ {"the_ushort", 1, 4, 0, 0, .expect_val.int_val = 32767, 32767, "32767"}, /* DBI_INTEGER_SIZE2 */ {"the_long", 1,16, 0, 0, .expect_val.int_val = -2147483648, -2147483648, "-2147483648"}, /* DBI_INTEGER_SIZE4 */ {"the_ulong", 1,16, 0, 0, .expect_val.int_val = 2147483647, 2147483647, "2147483647"}, /* DBI_INTEGER_SIZE4 */ {"the_longlong", 1,32, 0, 0, .expect_val.int_val = -9223372036854775807, -9223372036854775807, "-9223372036854775807"}, /* DBI_INTEGER_SIZE8 */ {"the_ulonglong", 1,32, 0, 0, .expect_val.int_val = 9223372036854775807, 9223372036854775807, "9223372036854775807"}, /* DBI_INTEGER_SIZE8 */ {"the_float", 2, 2, 0, 7, .expect_val.double_val = 3.402823466E+38, -9223372036854775808, "3.402823e+38"}, /* DBI_DECIMAL_SIZE4 */ {"the_double", 2, 4, 0, 7, .expect_val.double_val = 1.797693e+307, -9223372036854775808, "1.797693e+307"}, /* DBI_DECIMAL_SIZE8 */ {"the_conn_quoted_string", 3, 0, 31, 0, .expect_val.string_val = "Can \'we\' \"quote\" this properly?", 0, "Can \'we\' \"quote\" this properly?"}, /* string */ {"the_conn_quoted_string_copy", 3, 0, 31, 0, .expect_val.string_val = "Can \'we\' \"quote\" this properly?", 0, "Can \'we\' \"quote\" this properly?"}, /* string */ {"the_conn_escaped_string", 3, 0, 32, 0, .expect_val.string_val = "Can 'we' \"escape\" this properly?", 0, "Can 'we' \"escape\" this properly?"}, /* string */ {"the_conn_escaped_string_copy", 3, 0, 32, 0, .expect_val.string_val = "Can 'we' \"escape\" this properly?", 0, "Can 'we' \"escape\" this properly?"}, /* string */ {"the_numstring", 3, 0, 6, 0, .expect_val.string_val = "-54321", -54321, "-54321"}, /* string */ {"the_empty_string", 3, 0, 0, 0, .expect_val.string_val = "", 0, ""}, /* string */ {"the_null_string", 3, 0, 0, 0, .expect_val.string_val = "!" , 0, ""}, /* string: ! is a null string */ {"the_binary_quoted_string", 4, 0, 6, 0, .expect_val.string_val = "", 0, ""}, /* string */ {"the_binary_escaped_string", 4, 0, 6, 0, .expect_val.string_val = "", 0, ""}, /* string */ {"the_datetime", 5, 3, 0, 0, .expect_val.uint_val = 1009843199, 1009843199, "2001-12-31 23:59:59"}, /* DBI_DATETIME_DATE|TIME */ {"the_datetime_tz", 5, 3, 0, 0, .expect_val.uint_val = 1009879199, 1009879199, "2001-12-31 23:59:59"}, /* DBI_DATETIME_DATE|TIME */ {"the_date", 5, 1, 0, 0, .expect_val.uint_val = 1009756800, 1009756800, "2001-12-31 00:00:00"}, /* DBI_DATETIME_DATE */ {"the_time", 5, 2, 0, 0, .expect_val.uint_val = 86399, 86399, "1970-01-01 23:59:59"}, /* DBI_DATETIME_TIME */ {"the_time_tz", 5, 2, 0, .expect_val.uint_val = 122399, 122399, "1970-01-01 23:59:59"}, /* DBI_DATETIME_TIME */ {"_escaped_string", 3, 0, 32, 0, .expect_val.string_val = "Can ''we'' \"escape\" this properly?", 0, "Can ''we'' \"escape\" this properly?"}, /* string */ {"_quoted_string", 3, 0, 31, 0, .expect_val.string_val = "'Can ''we'' \"quote\" this properly?'", 0, "'Can ''we'' \"quote\" this properly?'"}, /* string */ {"", 0, 0, 0, 0, .expect_val.int_val = 0, 0, ""} }; /* prototypes */ void init_tinfo(struct TABLEINFO* ptr_tinfo, struct CONNINFO* ptr_cinfo); static void create_schema(); static void create_schema_five_rows(); void drop_schema(); int init_schema_tables(struct CONNINFO* prt_cinfo); int ask_for_conninfo(struct CONNINFO* ptr_cinfo); int set_driver_options(struct CONNINFO* ptr_cinfo, dbi_conn conn, const char* encoding); int my_dbi_initialize(const char *driverdir, dbi_inst *Inst); void my_dbi_shutdown(dbi_inst Inst); dbi_driver my_dbi_driver_list(dbi_driver Current, dbi_inst Inst); dbi_conn my_dbi_conn_new(const char *name, dbi_inst Inst); static void usage(); static void open_database_driver(); static void close_database_driver(); static void open_test_database(); static void close_test_database(); static void create_database(); static void drop_database(); static struct FIELDINFO* get_fieldinfo(const char* drivername); static int field_index_from_name(const char* fieldname, const char* drivername); static const char* field_name_from_index(int index, const char* drivername); static unsigned int field_attrib_from_name(const char* fieldname, const char* drivername); static unsigned int field_attrib_from_index(int index, const char* drivername); static unsigned short field_type_from_name(const char* fieldname, const char* drivername); static unsigned short field_type_from_index(int index, const char* drivername); static long long expect_longlong_from_name(const char* fieldname, const char* drivername); static long long expect_longlong_from_index(int index, const char* drivername); static unsigned long long expect_ulonglong_from_name(const char* fieldname, const char* drivername); static unsigned long long expect_ulonglong_from_index(int index, const char* drivername); static double expect_double_from_name(const char* fieldname, const char* drivername); static unsigned long long expect_double_from_index(int index, const char* drivername); static const char* expect_string_from_name(const char* fieldname, const char* drivername); static const char* expect_string_from_index(int index, const char* drivername); static long long expect_as_longlong_from_name(const char* fieldname, const char* drivername); static long long expect_as_longlong_from_index(int index, const char* drivername); static const char* expect_as_string_from_name(const char* fieldname, const char* drivername); static const char* expect_as_string_from_index(int index, const char* drivername); static int driver_has_field(const char* fieldname, const char* drivername); static char* assemble_query_string(const char* drivername, int *numfields); /* The following macro is an assert to the result. * The test case can use *errmsg and errnum * to report any problem inside of they. If result is null */ #define ASSERT_RESULT \ const char *errmsg; \ int errnum; \ if(!result) { \ errnum = dbi_conn_error(conn, &errmsg); \ assert_not_equal_with_message(result, NULL, \ "Error '%d': '%s'", errnum, errmsg); \ } #define QUERY_ASSERT_RESULT(res, query) \ do { \ res = dbi_conn_query(conn, query); \ if(!res) { \ errnum = dbi_conn_error(conn, &errmsg); \ assert_not_equal_with_message(res, NULL, \ "Error '%d': '%s'", errnum, errmsg); \ } \ } while (0); /* Macro to open the database inside the test case. * It creates a test_conn handle */ #define OPEN_TEST_DATABASE \ do { \ test_conn = my_dbi_conn_new(cinfo.drivername, \ dbi_instance); \ if (!test_conn) { \ const char *errmsg; \ int errnum = dbi_conn_error(test_conn, &errmsg); \ fprintf(stderr,"Error %d dbi_conn_new_i: %s\n", \ errnum, errmsg); \ exit(1); \ } \ if (set_driver_options(&cinfo, test_conn, "")) { \ my_dbi_shutdown(dbi_instance); \ exit(1); \ } \ dbi_conn_clear_option(test_conn, "dbname"); \ dbi_conn_set_option(test_conn, "dbname", \ cinfo.dbname); \ if (dbi_conn_connect(test_conn) < 0) { \ fprintf(stderr, "Could not connect to test" \ " database\n"); \ exit(1); \ } \ } while(0); \ /* Macro to close the test database connection */ #define CLOSE_TEST_DATABASE \ dbi_conn_close(test_conn); \ test_conn = NULL; /* setup fixture */ TestSuite *connection_fixture(TestSuite *suite); /* tests cases */ TestSuite *test_libdbi(); TestSuite *test_database_infrastructure(); TestSuite *test_managing_queries(); TestSuite *test_transactions(); TestSuite *test_dbi_retrieving_fields_data_name(); TestSuite *test_dbi_retrieving_fields_data_idx(); TestSuite *test_dbi_retrieving_fields_meta_data(); TestSuite *test_dbi_retrieving_fields_as(); TestSuite *test_managing_results(); TestSuite *test_dbi_general_test_case(); TestSuite *test_dbi_misc(); int main(int argc, char **argv) { CDashInfo pinfo; int withcdashreport = 0; char *build = NULL; char *site_name = NULL; char *type = NULL; char *os_name = NULL; char *os_platform = NULL; char *os_release = NULL; char *os_version = NULL; char *hostname = NULL; int ch; int runsingletest = 0; static char *singletest = ""; const char *errmsg; #ifdef __FreeBSD__ _malloc_options="J"; /* FreeBSDs little malloc debugging helper */ #endif while ((ch = getopt(argc, argv, "N:P:R:V:H:CT:B:S:s:h?")) != -1) { switch (ch) { case 'N': os_name = optarg; break; case 'P': os_platform = optarg; break; case 'R': os_release = optarg; break; case 'V': os_version = optarg; break; case 'H': hostname = optarg; break; case 's': runsingletest = 1; singletest = optarg; break; case 'C': withcdashreport = 1; break; case 'S': site_name = optarg; break; case 'B': build = optarg; break; case 'T': type = optarg; break; case 'h': /* fall through */ case '?': /* fall through */ default: usage(); } } argc -= optind; argv += optind; if (withcdashreport) { if (build && type && site_name) { pinfo.build = build; pinfo.type = type; pinfo.name = site_name; } else { fprintf(stderr, "Please specify a build name (-B) and site name (-S)"); usage(); } /* inform to cdash about your environment, just a bit */ if (os_name && os_release && os_platform && os_version && hostname) { pinfo.hostname = hostname; pinfo.os_name = os_name; pinfo.os_platform = os_platform; pinfo.os_release = os_release; pinfo.os_version = os_version; } } if (ask_for_conninfo(&cinfo)) { exit(1); } init_tinfo(&tinfo, &cinfo); if (init_schema_tables(&cinfo)) { exit(1); } fprintf(stderr, "\nConnection information:\n--------------------\n"); fprintf(stderr, "\tLegacy mode: %d\n" "\tLog query: %d\n" "\tDriverdir: %s\n" "\tDrivername: %s\n" "\tDbdir: %s\n" "\tInitial Database: %s\n" "\tDatabase: %s\n" "\tUsername: %s\n" "\tPassword: %s\n" "\tHostname: %s\n" "\tVersion: %s\n" "\tInitial tables schema: %s\n" "\tInitial sub schema:\n" "\t 0: %s\n" "\t 1: %s\n" "\t 2: %s\n" "\t 3: %s\n" "\t 4: %s\n" "\tInitial data schema: %s\n", cinfo.n_legacy, cinfo.query_log, cinfo.driverdir, cinfo.drivername, cinfo.dbdir, cinfo.initial_dbname, cinfo.dbname, cinfo.username, cinfo.password, cinfo.hostname, cinfo.version, cinfo.createschema, cinfo.createsubschema[0], cinfo.createsubschema[1], cinfo.createsubschema[2], cinfo.createsubschema[3], cinfo.createsubschema[4], cinfo.query); fprintf(stderr, "\nBegin tests:\n--------------------\n"); /* choice the report */ if (withcdashreport && runsingletest) { return run_single_test(test_libdbi(), singletest, create_cdash_reporter(&pinfo)); } else if (withcdashreport && !runsingletest) { return run_test_suite(test_libdbi(), create_cdash_reporter(&pinfo)); } else if (runsingletest) { return run_single_test(test_libdbi(), singletest, create_text_reporter()); } else { return run_test_suite(test_libdbi(), create_text_reporter()); } } /* helper to obtain a pointer to the appropriate fieldinfo struct */ static struct FIELDINFO* get_fieldinfo(const char* drivername) { if (!strcmp(drivername, "firebird")) { return firebird_fieldinfo; } else if (!strcmp(drivername, "freetds")) { return freetds_fieldinfo; } else if (!strcmp(drivername, "ingres")) { return ingres_fieldinfo; } else if (!strcmp(drivername, "msql")) { return msql_fieldinfo; } else if (!strcmp(drivername, "mysql")) { return mysql_fieldinfo; } else if (!strcmp(drivername, "pgsql")) { return pgsql_fieldinfo; } else if (!strcmp(drivername, "db2")) { return db2_fieldinfo; } else if (!strcmp(drivername, "sqlite") ||!strcmp(drivername, "sqlite3")) { return sqlite_fieldinfo; } return NULL; } /* helper to translate field names into indexes (1-based) for the *_idx family of functions. Returns 0 if the field name or the driver name does not exist */ static int field_index_from_name(const char* fieldname, const char* drivername) { int i = 0; struct FIELDINFO* ptr_fieldinfo; if ((ptr_fieldinfo = get_fieldinfo(drivername)) == NULL) { return 0; } while(*(ptr_fieldinfo[i].name)) { if (!strcmp(ptr_fieldinfo[i].name, fieldname)) { return i+1; } i++; } return 0; } /* helper to translate field indexes (1-based) into names for the non-*_idx family of functions */ static const char* field_name_from_index(int index, const char* drivername) { struct FIELDINFO* ptr_fieldinfo; if ((ptr_fieldinfo = get_fieldinfo(drivername)) == NULL) { return NULL; } return ptr_fieldinfo[index-1].name; } /* helper to translate field names into attributes for the *_get_attrib* family of functions. Returns 0 if the field name does not exist */ static unsigned int field_attrib_from_name(const char* fieldname, const char* drivername) { int i = 0; struct FIELDINFO* ptr_fieldinfo; if ((ptr_fieldinfo = get_fieldinfo(drivername)) == NULL) { return 0; } while(*(ptr_fieldinfo[i].name)) { if (!strcmp(ptr_fieldinfo[i].name, fieldname)) { return ptr_fieldinfo[i].attrib; } i++; } return 0; } /* helper to translate field indexes (1-based) into attributes for the *_get_attrib* family of functions. */ static unsigned int field_attrib_from_index(int index, const char* drivername) { struct FIELDINFO* ptr_fieldinfo; if ((ptr_fieldinfo = get_fieldinfo(drivername)) == NULL) { return 0; } return ptr_fieldinfo[index-1].attrib; } /* helper to translate field names into types for the *_get_type* family of functions. Returns 0 if the field name does not exist */ static unsigned short field_type_from_name(const char* fieldname, const char* drivername) { int i = 0; struct FIELDINFO* ptr_fieldinfo; if ((ptr_fieldinfo = get_fieldinfo(drivername)) == NULL) { return 0; } while(*(ptr_fieldinfo[i].name)) { if (!strcmp(ptr_fieldinfo[i].name, fieldname)) { return ptr_fieldinfo[i].type; } i++; } return 0; } /* helper to translate field indexes (1-based) into types for the *_get_attrib* family of functions. */ static unsigned short field_type_from_index(int index, const char* drivername) { struct FIELDINFO* ptr_fieldinfo; if ((ptr_fieldinfo = get_fieldinfo(drivername)) == NULL) { return 0; } return ptr_fieldinfo[index-1].type; } /* helper to translate field names into types for the *_get_type* family of functions. Returns 0 if the field name does not exist */ static unsigned short field_length_from_name(const char* fieldname, const char* drivername) { int i = 0; struct FIELDINFO* ptr_fieldinfo; if ((ptr_fieldinfo = get_fieldinfo(drivername)) == NULL) { return 0; } while(*(ptr_fieldinfo[i].name)) { if (!strcmp(ptr_fieldinfo[i].name, fieldname)) { return ptr_fieldinfo[i].length; } i++; } return 0; } /* helper to translate field indexes (1-based) into types for the *_get_attrib* family of functions. */ static unsigned short field_length_from_index(int index, const char* drivername) { struct FIELDINFO* ptr_fieldinfo; if ((ptr_fieldinfo = get_fieldinfo(drivername)) == NULL) { return 0; } return ptr_fieldinfo[index-1].length; } /* helper to translate field names into expected long long values. Returns 0 if the field name does not exist */ static long long expect_longlong_from_name(const char* fieldname, const char* drivername) { int i = 0; struct FIELDINFO* ptr_fieldinfo; if ((ptr_fieldinfo = get_fieldinfo(drivername)) == NULL) { return 0; } while(*(ptr_fieldinfo[i].name)) { if (!strcmp(ptr_fieldinfo[i].name, fieldname)) { return ptr_fieldinfo[i].expect_val.int_val; } i++; } return 0; } /* helper to translate field indexes (1-based) into expected long long values */ static long long expect_longlong_from_index(int index, const char* drivername) { struct FIELDINFO* ptr_fieldinfo; if ((ptr_fieldinfo = get_fieldinfo(drivername)) == NULL) { return 0; } return ptr_fieldinfo[index-1].expect_val.int_val; } /* helper to translate field names into expected unsigned long long values. Returns 0 if the field name does not exist */ static unsigned long long expect_ulonglong_from_name(const char* fieldname, const char* drivername) { int i = 0; struct FIELDINFO* ptr_fieldinfo; if ((ptr_fieldinfo = get_fieldinfo(drivername)) == NULL) { return 0; } while(*(ptr_fieldinfo[i].name)) { if (!strcmp(ptr_fieldinfo[i].name, fieldname)) { return ptr_fieldinfo[i].expect_val.uint_val; } i++; } return 0; } /* helper to translate field indexes (1-based) into expected unsigned long long values */ static unsigned long long expect_ulonglong_from_index(int index, const char* drivername) { struct FIELDINFO* ptr_fieldinfo; if ((ptr_fieldinfo = get_fieldinfo(drivername)) == NULL) { return 0; } return ptr_fieldinfo[index-1].expect_val.uint_val; } /* helper to translate field names into expected double values. Returns 0 if the field name does not exist */ static double expect_double_from_name(const char* fieldname, const char* drivername) { int i = 0; struct FIELDINFO* ptr_fieldinfo; if ((ptr_fieldinfo = get_fieldinfo(drivername)) == NULL) { return 0; } while(*(ptr_fieldinfo[i].name)) { if (!strcmp(ptr_fieldinfo[i].name, fieldname)) { significant_figures_for_assert_double_are(ptr_fieldinfo[i].figures); return ptr_fieldinfo[i].expect_val.double_val; } i++; } return 0; } /* helper to translate field indexes (1-based) into expected double values */ static unsigned long long expect_double_from_index(int index, const char* drivername) { struct FIELDINFO* ptr_fieldinfo; if ((ptr_fieldinfo = get_fieldinfo(drivername)) == NULL) { return 0; } significant_figures_for_assert_double_are(ptr_fieldinfo[index-1].figures); return ptr_fieldinfo[index-1].expect_val.double_val; } /* helper to translate field names into expected string values. Returns 0 if the field name does not exist */ static const char* expect_string_from_name(const char* fieldname, const char* drivername) { int i = 0; struct FIELDINFO* ptr_fieldinfo; if ((ptr_fieldinfo = get_fieldinfo(drivername)) == NULL) { return 0; } while(*(ptr_fieldinfo[i].name)) { if (!strcmp(ptr_fieldinfo[i].name, fieldname)) { if (ptr_fieldinfo[i].expect_val.string_val[0] == '!') return NULL; return (const char*)ptr_fieldinfo[i].expect_val.string_val; } i++; } return 0; } /* helper to translate field indexes (1-based) into expected string values */ static const char* expect_string_from_index(int index, const char* drivername) { struct FIELDINFO* ptr_fieldinfo; if ((ptr_fieldinfo = get_fieldinfo(drivername)) == NULL) { return 0; } return ptr_fieldinfo[index-1].expect_val.string_val; } /* helper to translate field names into expected as_longlong values. Returns 0 if the field name does not exist */ static long long expect_as_longlong_from_name(const char* fieldname, const char* drivername) { int i = 0; struct FIELDINFO* ptr_fieldinfo; if ((ptr_fieldinfo = get_fieldinfo(drivername)) == NULL) { return 0; } while(*(ptr_fieldinfo[i].name)) { if (!strcmp(ptr_fieldinfo[i].name, fieldname)) { return ptr_fieldinfo[i].expect_as_longlong; } i++; } return 0; } /* helper to translate field indexes (1-based) into expected as_longlong values */ static long long expect_as_longlong_from_index(int index, const char* drivername) { struct FIELDINFO* ptr_fieldinfo; if ((ptr_fieldinfo = get_fieldinfo(drivername)) == NULL) { return 0; } return ptr_fieldinfo[index-1].expect_as_longlong; } /* helper to translate field names into expected as_string values. Returns 0 if the field name does not exist */ static const char* expect_as_string_from_name(const char* fieldname, const char* drivername) { int i = 0; struct FIELDINFO* ptr_fieldinfo; if ((ptr_fieldinfo = get_fieldinfo(drivername)) == NULL) { return 0; } while(*(ptr_fieldinfo[i].name)) { if (!strcmp(ptr_fieldinfo[i].name, fieldname)) { return (const char*)ptr_fieldinfo[i].expect_as_string; } i++; } return 0; } /* helper to translate field indexes (1-based) into expected as_string values */ static const char* expect_as_string_from_index(int index, const char* drivername) { struct FIELDINFO* ptr_fieldinfo; if ((ptr_fieldinfo = get_fieldinfo(drivername)) == NULL) { return 0; } return (const char*)ptr_fieldinfo[index-1].expect_as_string; } /* helper to assemble a query string from the table index hashes. The resulting query string retrieves all fields mentioned in the hash in the given order from test_datatypes. The returned string should be freed by the calling function */ static char* assemble_query_string(const char* drivername, int *numfields) { char* query_string = NULL; int i = 0; int j = 0; size_t query_string_len = 1024; struct FIELDINFO* ptr_fieldinfo; if ((ptr_fieldinfo = get_fieldinfo(drivername)) == NULL) { return NULL; } *numfields = 0; if ((query_string = malloc(query_string_len)) == NULL) { return NULL; } strcpy(query_string, "SELECT "); while(*(ptr_fieldinfo[i].name)) { if (ptr_fieldinfo[i].name[0] == '_') { /* special field, don't go into schema */ i++; j++; continue; } strcat(query_string, ptr_fieldinfo[i].name); strcat(query_string, ","); i++; if (i%30 == 0) { /* assume that 30 field names with 32 chars each will fit */ query_string_len += 1024; if ((query_string = realloc(query_string, query_string_len)) == NULL) { return NULL; } } } query_string[strlen(query_string)-1] = '\0'; /* remove trailing comma */ strcat(query_string, " from test_datatypes"); *numfields = i-j; /* do not count special fields */ return query_string; } /* fill tableinfo structure with values based on the hashes */ void init_tinfo(struct TABLEINFO* ptr_tinfo, struct CONNINFO* ptr_cinfo) { ptr_tinfo->have_double = driver_has_field("the_double", ptr_cinfo->drivername); ptr_tinfo->have_longlong = driver_has_field("the_longlong", ptr_cinfo->drivername); ptr_tinfo->have_ulonglong = driver_has_field("the_ulonglong", ptr_cinfo->drivername); ptr_tinfo->have_datetime = driver_has_field("the_datetime", ptr_cinfo->drivername); ptr_tinfo->have_datetime_tz = driver_has_field("the_datetime_tz", ptr_cinfo->drivername); ptr_tinfo->have_time_tz = driver_has_field("the_time_tz", ptr_cinfo->drivername); ptr_tinfo->number_rows = 1; } static int driver_has_field(const char* fieldname, const char* drivername) { int i = 0; struct FIELDINFO* ptr_fieldinfo; if ((ptr_fieldinfo = get_fieldinfo(drivername)) == NULL) { return 0; } while(*(ptr_fieldinfo[i].name)) { if (!strcmp(ptr_fieldinfo[i].name, fieldname)) { return 1; } i++; } return 0; } /* * Before begin a test, create a database and some tables to test */ static void create_schema_five_rows() { tinfo.number_rows = 5; create_schema(); } /* * This is the setup function. We can change any option using functions * like create_schema_five_rows above */ static void create_schema() { dbi_result result = NULL; const char *errmsg; int errnum; int i; /* int first_schema = 1;*/ if (!conn) { errnum = dbi_conn_error(conn, &errmsg); printf("Error %d, create_schema, conn is null: %s\n", errnum, errmsg); my_dbi_shutdown(dbi_instance); exit(1); } /* First we try to create the schema table. If this was bad * (i.e: table exists) we try drop table and create again. */ while (!result) { if ((result = dbi_conn_query(conn, cinfo.createschema)) == NULL) { dbi_conn_error(conn, &errmsg); printf("First try, can't create table! %s\n", errmsg); if ((result = dbi_conn_query(conn, "DROP TABLE test_datatypes")) == NULL) { dbi_conn_error(conn, &errmsg); printf("Can't drop table! %s\n", errmsg); my_dbi_shutdown(dbi_instance); exit(1); } /* first_schema = 0;*/ dbi_result_free(result); if ((result = dbi_conn_query(conn, cinfo.createschema)) == NULL) { dbi_conn_error(conn, &errmsg); printf("Second try, can't create table! %s\n", errmsg); my_dbi_shutdown(dbi_instance); exit(1); } } } dbi_result_free(result); /* if(first_schema) {*/ for ( i = 0; strlen(cinfo.createsubschema[i]) != 0 ; i++ ) { if ((result = dbi_conn_query(conn, cinfo.createsubschema[i])) == NULL) { errnum = dbi_conn_error(conn, &errmsg); printf("Can't create sub schema data (%d)! %s\n", i, errmsg); my_dbi_shutdown(dbi_instance); exit(1); } dbi_result_free(result); } /*}*/ for ( i = 1; i <= tinfo.number_rows; i++ ) { if ((result = dbi_conn_query(conn, cinfo.query)) == NULL) { errnum = dbi_conn_error(conn, &errmsg); printf("Can't insert data! %s\n", errmsg); my_dbi_shutdown(dbi_instance); exit(1); } } dbi_result_free(result); } /* * Always drop the table (and any other object) after any tests */ void drop_schema() { dbi_result result; const char *errmsg; int errnum; int i; if (!conn) { printf("\tError %d, drop_schema, conn is null: %s\n", dbi_conn_error(conn, &errmsg), errmsg); my_dbi_shutdown(dbi_instance); exit(1); } if (!strcmp(cinfo.drivername, "firebird")) { /* firebird does not support DROP TABLE in regular SQL but offers it as an isql extension */ char command[1024]; for ( i = 0; strlen(cinfo.dropsubschema[i]) != 0 ; i++ ) { if (!*(cinfo.hostname)) { snprintf(command, 1024, "echo \"CONNECT \'%s/%s\';%s;\"" "| %s -e -pas %s " "-u %s -sql_dialect 3", cinfo.dbdir, cinfo.dbname, cinfo.dropsubschema[i], FIREBIRD_ISQL, cinfo.password, cinfo.username); } else { /* remote */ snprintf(command, 1024, "echo \"CONNECT \'%s:%s/%s\';%s;\"" "| %s -e -pas %s " "-u %s -sql_dialect 3", cinfo.hostname, cinfo.dbdir, cinfo.dbname, cinfo.dropsubschema[i], FIREBIRD_ISQL, cinfo.password, cinfo.username); } if (system(command)) { fprintf(stderr,"\tAAH! Can't drop subschema %s<< connected to database %s! Error message: %s\n", cinfo.dropsubschema[i], cinfo.dbname, errmsg); } } /* end for */ if (!*(cinfo.hostname)) { snprintf(command, 1024, "echo \"CONNECT \'%s/%s\';DROP TABLE test_datatypes;\"" "| %s -e -pas %s " "-u %s -sql_dialect 3", cinfo.dbdir, cinfo.dbname, FIREBIRD_ISQL, cinfo.password, cinfo.username); } else { /* remote */ snprintf(command, 1024, "echo \"CONNECT \'%s:%s/%s\';DROP TABLE test_datatypes;\"" "| %s -e -pas %s " "-u %s -sql_dialect 3", cinfo.hostname, cinfo.dbdir, cinfo.dbname, FIREBIRD_ISQL, cinfo.password, cinfo.username); } if (system(command)) { fprintf(stderr,"\tAAH! Can't drop table test_datatypes<< connected to database %s! Error message: %s\n", cinfo.dbname, errmsg); } } else { /* not firebird */ for ( i = 0; strlen(cinfo.dropsubschema[i]) != 0 ; i++ ) { if ((result = dbi_conn_query(conn, cinfo.dropsubschema[i])) == NULL) { errnum = dbi_conn_error(conn, &errmsg); printf("\tCan't drop sub schema data (%d)! %s\n", i, errmsg); my_dbi_shutdown(dbi_instance); exit(1); } dbi_result_free(result); } if ((result = dbi_conn_query(conn, "DROP TABLE test_datatypes")) == NULL) { errnum = dbi_conn_error(conn, &errmsg); printf("\tCan't drop table test_datatypes Error '%d' message: %s\n", errnum, errmsg); } dbi_result_free(result); } } /* * We'll need some tables to test, used by many tests */ int init_schema_tables(struct CONNINFO* ptr_cinfo) { /* ATTENTION: when changing the table definitions below, please update the field name vs. index hashes at the top of this file accordingly */ if (!strcmp(ptr_cinfo->drivername, "firebird")) { snprintf(ptr_cinfo->createschema, QUERY_LEN, "CREATE TABLE test_datatypes ( " "the_char SMALLINT," "the_uchar SMALLINT," "the_short SMALLINT, " "the_ushort SMALLINT," "the_long INTEGER," "the_ulong INTEGER, " "the_float FLOAT," "the_double DOUBLE PRECISION, " "the_conn_quoted_string VARCHAR(255)," "the_conn_quoted_string_copy VARCHAR(255)," "the_conn_escaped_string VARCHAR(255)," "the_conn_escaped_string_copy VARCHAR(255)," "the_numstring VARCHAR(255)," "the_empty_string VARCHAR(255)," "the_null_string VARCHAR(255), " "the_binary_quoted_string BLOB," "the_binary_escaped_string BLOB," "the_datetime TIMESTAMP, " "the_date DATE," "the_time TIME," "id INTEGER NOT NULL PRIMARY KEY);"); snprintf(ptr_cinfo->createsubschema[0], QUERY_LEN, "CREATE GENERATOR gen_t1_id;"); snprintf(ptr_cinfo->createsubschema[1], QUERY_LEN, "SET GENERATOR gen_t1_id TO 0;"); snprintf(ptr_cinfo->createsubschema[2], QUERY_LEN, "CREATE TRIGGER T1_BI FOR TEST_DATATYPES ACTIVE BEFORE INSERT POSITION 0" " AS" " BEGIN" " if (NEW.ID is NULL) then NEW.ID = GEN_ID(GEN_T1_ID, 1);" " END"); snprintf(ptr_cinfo->dropsubschema[0], QUERY_LEN, "DROP TRIGGER T1_BI"); snprintf(ptr_cinfo->dropsubschema[1], QUERY_LEN, "DROP GENERATOR gen_t1_id"); snprintf(ptr_cinfo->query, QUERY_LEN, "INSERT INTO test_datatypes (" "the_char," "the_uchar," "the_short, " "the_ushort," "the_long," "the_ulong," "the_float," "the_double, " "the_conn_quoted_string," "the_conn_quoted_string_copy," "the_conn_escaped_string," "the_conn_escaped_string_copy," "the_numstring," "the_empty_string," "the_null_string," "the_binary_quoted_string, " "the_binary_escaped_string, " "the_datetime," "the_date," "the_time" ") " "VALUES (" "-127," "127," "-32768," "32767," "-2147483648," "2147483647, " "3.4e+37," "1.7e+307," "'Can ''we'' \"quote\" this properly?'," "'Can ''we'' \"quote\" this properly?'," "'Can ''we'' \"escape\" this properly?'," "'Can ''we'' \"escape\" this properly?'," "'%s'," "''," "NULL," "'\x01\x40\x41\xff\x42\x26\x43'," "'\x01\x40\x41\xff\x42\x26\x43'," "'2001-12-31 23:59:59'," "'2001-12-31'," "'23:59:59'" ");", numstring); } else if (!strcmp(ptr_cinfo->drivername, "freetds")) { snprintf(ptr_cinfo->createschema, QUERY_LEN, "CREATE TABLE test_datatypes ( " "the_char TINYINT," "the_uchar TINYINT," "the_short SMALLINT," "the_ushort SMALLINT," "the_long INT," "the_ulong INT," "the_longlong BIGINT," "the_ulonglong BIGINT," "the_float REAL," "the_double FLOAT," "the_conn_quoted_string VARCHAR(255)," "the_conn_quoted_string_copy VARCHAR(255)," "the_conn_escaped_string VARCHAR(255)," "the_conn_escaped_string_copy VARCHAR(255)," "the_numstring VARCHAR(255)," "the_empty_string VARCHAR(255)," "the_null_string VARCHAR(255)," "the_binary_quoted_string IMAGE," "the_binary_escaped_string IMAGE," "the_datetime DATETIME," "the_date DATETIME," "the_time DATETIME," "id INT IDENTITY," "CONSTRAINT tr_test_datatypes PRIMARY KEY (id))"); /* * For test one byte data type use TINYINT * this is unsigned type and by insert replace * -127 to binary equivalent 129 */ snprintf(ptr_cinfo->query, QUERY_LEN, "INSERT INTO test_datatypes (" "the_char," "the_uchar," "the_short," "the_ushort," "the_long," "the_ulong," "the_longlong," "the_ulonglong," "the_float," "the_double," "the_conn_quoted_string," "the_conn_quoted_string_copy," "the_conn_escaped_string," "the_conn_escaped_string_copy," "the_numstring," "the_empty_string," "the_null_string," "the_binary_quoted_string," "the_binary_escaped_string," "the_datetime," "the_date," "the_time) VALUES (" "-127," "127," "-32768," "32767," "-2147483648," "2147483647," "-2147483648," "2147483647, " "3.4e+37," "1.7e+307," "'Can \\'we\\' \"quote\" this properly?'," "'Can \\'we\\' \"quote\" this properly?'," "'Can \\'we\\' \"escape\" this properly?'," "'Can \\'we\\' \"escape\" this properly?'," "'%s'," "''," "NULL," "'\x01\x40\x41\xff\x42\x26\x43'," "'\x01\x40\x41\xff\x42\x26\x43'," "'2001-12-31 23:59:59'," "'2001-12-31'," "'23:59:59'," "1)", numstring); } else if (!strcmp(ptr_cinfo->drivername, "ingres")) { snprintf(ptr_cinfo->createschema, QUERY_LEN, "CREATE TABLE test_datatypes ( " "the_char TINYINT," "the_uchar TINYINT," "the_short SMALLINT," "the_ushort SMALLINT," "the_long INT," "the_ulong INT," "the_longlong BIGINT," "the_ulonglong BIGINT," "the_float FLOAT4," "the_double FLOAT," "the_decimal DECIMAL(12,4)," "the_money MONEY," "the_character CHAR(50)," "the_byte BYTE(50)," "the_conn_quoted_string VARCHAR(255)," "the_conn_quoted_string_copy VARCHAR(255)," "the_conn_escaped_string VARCHAR(255)," "the_conn_escaped_string_copy VARCHAR(255)," "the_numstring VARCHAR(255)," "the_empty_string VARCHAR(255)," "the_null_string VARCHAR(255)," "the_binary_quoted_string BLOB," "the_binary_escaped_string BLOB," "the_datetime DATE," "the_date DATE," "the_time DATE," "id INT NOT NULL CONSTRAINT id_key PRIMARY KEY)"); strcat(ptr_cinfo->createschema, "; CREATE SEQUENCE test_datatypes_id_seq"); snprintf(ptr_cinfo->query, QUERY_LEN, "INSERT INTO test_datatypes VALUES (" "-127," "127," "-32768," "32767," "-2147483648," "2147483647, " "-9223372036854775807," "9223372036854775807," "3.4e+37," "1.7e+307," "'1234.5678'," "'$567.89'," "'char column'," "X'07ff656667'," "my_string_to_quote," "quoted_string," "'my_string_to_escape'," "'escaped_string,'," "'%s'," "''," "NULL," "quoted_binary," "'escaped_binary'," "'31-dec-2001 23:59:59'," "'31-dec-2001'," "'23:59:59'," "NEXT VALUE FOR test_datatypes_id_seq)", numstring); } else if (!strcmp(ptr_cinfo->drivername, "msql")) { snprintf(ptr_cinfo->createschema, QUERY_LEN, "CREATE TABLE test_datatypes ( " "the_char INT8," "the_uchar UINT8," "the_short INT16," "the_ushort UINT16," "the_long INT," "the_ulong UINT," "the_longlong INT64," "the_ulonglong UINT64," "the_float REAL," "the_conn_quoted_string CHAR(255)," "the_conn_quoted_string_copy CHAR(255)," "the_conn_escaped_string CHAR(255)," "the_conn_escaped_string_copy CHAR(255)," "the_numstring CHAR(255)," "the_empty_string VARCHAR(255)," "the_null_string VARCHAR(255)," "the_date DATE," "the_time TIME," "the_time_tz TIME," "id INT)"); snprintf(ptr_cinfo->query, QUERY_LEN, "INSERT INTO test_datatypes VALUES (" "-127," "127," "-32767," "32767," "-2147483647," "2147483647," "-9223372036854775807," "9223372036854775807," "3.402823466E+38," "my_string_to_quote," "quoted_string," "'my_string_to_escape'," "'escaped_string'," "'%s'," "''," "NULL," "'11-jul-1977'," "'23:59:59'," "NULL)", numstring); } else if (!strcmp(ptr_cinfo->drivername, "mysql")) { snprintf(ptr_cinfo->createschema, QUERY_LEN, "CREATE TABLE test_datatypes ( " "the_char TINYINT," "the_uchar TINYINT," "the_short SMALLINT," "the_ushort SMALLINT," "the_long INT," "the_ulong INT," "the_longlong BIGINT," "the_ulonglong BIGINT," "the_float FLOAT4," "the_double FLOAT8," "the_conn_quoted_string VARCHAR(255)," "the_conn_quoted_string_copy VARCHAR(255)," "the_conn_escaped_string VARCHAR(255)," "the_conn_escaped_string_copy VARCHAR(255)," "the_numstring VARCHAR(255)," "the_empty_string VARCHAR(255)," "the_null_string VARCHAR(255)," "the_binary_quoted_string BLOB," "the_binary_escaped_string BLOB," "the_datetime DATETIME," "the_datetime_tz DATETIME," "the_date DATE," "the_time TIME," "the_time_tz TIME," "id INT AUTO_INCREMENT," "PRIMARY KEY (id)) " "ENGINE=InnoDB"); snprintf(ptr_cinfo->query, QUERY_LEN, "INSERT INTO test_datatypes (" "the_char," "the_uchar," "the_short," "the_ushort," "the_long," "the_ulong," "the_longlong," "the_ulonglong," "the_float," "the_double," "the_conn_quoted_string," "the_conn_quoted_string_copy," "the_conn_escaped_string," "the_conn_escaped_string_copy," "the_numstring," "the_empty_string," "the_null_string," "the_binary_quoted_string," "the_binary_escaped_string," "the_datetime," "the_datetime_tz," "the_date," "the_time," "the_time_tz) VALUES (" "-127," "127," "-32768," "32767," "-2147483648," "2147483647," "-9223372036854775807," "9223372036854775807," "3.402823466E+38," "1.7976931348623157E+307," "'Can ''we'' \"quote\" this properly?'," "'Can ''we'' \"quote\" this properly?'," "'Can ''we'' \"escape\" this properly?'," "'Can ''we'' \"escape\" this properly?'," "'%s'," "''," "NULL," "'AB\\0C\\\'D'," "'AB\\0C\\\'D'," "'2001-12-31 23:59:59'," "'2001-12-31 23:59:59 -10:00'," "'2001-12-31'," "'23:59:59'," "'23:59:59-10:00')", numstring); } else if (!strcmp(ptr_cinfo->drivername, "pgsql")) { /* PostgreSQL does not have a 1-byte integer, use smallint instead. This will raise a warning when retrieving the value */ snprintf(ptr_cinfo->createschema, QUERY_LEN, "CREATE TABLE test_datatypes ( " "the_char SMALLINT," "the_uchar SMALLINT," "the_short SMALLINT," "the_ushort SMALLINT," "the_long INT," "the_ulong INT," "the_longlong BIGINT," "the_ulonglong BIGINT," "the_float FLOAT4," "the_double FLOAT8," "the_conn_quoted_string VARCHAR(255)," "the_conn_quoted_string_copy VARCHAR(255)," "the_conn_escaped_string VARCHAR(255)," "the_conn_escaped_string_copy VARCHAR(255)," "the_numstring VARCHAR(255)," "the_empty_string VARCHAR(255)," "the_null_string VARCHAR(255)," "the_binary_quoted_string BYTEA," "the_binary_escaped_string BYTEA," "the_datetime TIMESTAMP," "the_datetime_tz TIMESTAMP WITH TIME ZONE," "the_date DATE," "the_time TIME," "the_time_tz TIME WITH TIME ZONE," "id SERIAL PRIMARY KEY)"); snprintf(ptr_cinfo->query, QUERY_LEN, "INSERT INTO test_datatypes (" "the_char," "the_uchar," "the_short," "the_ushort," "the_long," "the_ulong," "the_longlong," "the_ulonglong," "the_float," "the_double," "the_conn_quoted_string," "the_conn_quoted_string_copy," "the_conn_escaped_string," "the_conn_escaped_string_copy," "the_numstring," "the_empty_string," "the_null_string," "the_binary_quoted_string," "the_binary_escaped_string," "the_datetime," "the_datetime_tz," "the_date," "the_time," "the_time_tz) VALUES (" "-127," "127," "-32768," "32767," "-2147483648," "2147483647," "-9223372036854775807," "9223372036854775807," "3.402823466E+38," "1.7976931348623157E+307," "'Can '\'we\'' \"quote\" this properly?'," "'Can '\'we\'' \"quote\" this properly?'," "'Can '\'we\'' \"escape\" this properly?'," "'Can '\'we\'' \"escape\" this properly?'," "'%s'," "''," "NULL," "'AB\\\\000C''D'," "'AB\\\\000C''D'," "'2001-12-31 23:59:59'," "'2001-12-31 23:59:59 -10:00'," "'2001-12-31'," "'23:59:59'," "'23:59:59-10:00')", numstring); } else if (!strcmp(ptr_cinfo->drivername, "db2")) { snprintf(ptr_cinfo->createschema, QUERY_LEN, "CREATE TABLE test_datatypes ( " "the_char SMALLINT," "the_uchar SMALLINT," "the_short SMALLINT," "the_ushort SMALLINT," "the_long INT," "the_ulong INT," "the_longlong BIGINT," "the_ulonglong BIGINT," "the_float FLOAT," "the_double DOUBLE," "the_conn_quoted_string VARCHAR(255)," "the_conn_quoted_string_copy VARCHAR(255)," "the_conn_escaped_string VARCHAR(255)," "the_conn_escaped_string_copy VARCHAR(255)," "the_numstring VARCHAR(255)," "the_empty_string VARCHAR(255)," "the_null_string VARCHAR(255)," "the_binary_quoted_string CLOB," "the_binary_escaped_string CLOB," "the_datetime TIMESTAMP," "the_datetime_tz TIMESTAMP," "the_date DATE," "the_time TIME," "the_time_tz TIME," "id INT NOT NULL GENERATED ALWAYS AS IDENTITY" " (START WITH 1, INCREMENT BY 1, NO CACHE))"); snprintf(ptr_cinfo->query, QUERY_LEN, "INSERT INTO test_datatypes (" "the_char," "the_uchar," "the_short," "the_ushort," "the_long," "the_ulong," "the_longlong," "the_ulonglong," "the_float," "the_double," "the_conn_quoted_string," "the_conn_quoted_string_copy," "the_conn_escaped_string," "the_conn_escaped_string_copy," "the_numstring," "the_empty_string," "the_null_string," "the_binary_quoted_string," "the_binary_escaped_string," "the_datetime," "the_datetime_tz," "the_date," "the_time," "the_time_tz) VALUES (" "-127," "127," "-32768," "32767," "-2147483648," "2147483647," "-9223372036854775807," "9223372036854775807," "3.402823466E+38," "1.7976931348623157E+307," "'Can '\'we\'' \"quote\" this properly?'," "'Can '\'we\'' \"quote\" this properly?'," "'Can '\'we\'' \"escape\" this properly?'," "'Can '\'we\'' \"escape\" this properly?'," "'%s'," "''," "NULL," "'AB\\\\000C''''D'," "'AB\\\\000C''''D'," "'2001-12-31-23.59.59'," "'2001-12-31-23.59.59'," "'2001-12-31'," "'23:59:59'," "'23:59:59')", numstring); } else if (!strcmp(ptr_cinfo->drivername, "sqlite") || !strcmp(ptr_cinfo->drivername, "sqlite3")){ snprintf(ptr_cinfo->createschema, QUERY_LEN, "CREATE TABLE test_datatypes ( " "the_char CHAR," "the_uchar CHAR," "the_short SMALLINT," "the_ushort SMALLINT," "the_long INT," "the_ulong INT," "the_longlong BIGINT," "the_ulonglong BIGINT," "the_float FLOAT4," "the_double FLOAT8," "the_driver_string VARCHAR(255)," "the_conn_quoted_string VARCHAR(255)," "the_conn_quoted_string_copy VARCHAR(255)," "the_conn_escaped_string VARCHAR(255)," "the_conn_escaped_string_copy VARCHAR(255)," "the_numstring VARCHAR(255)," "the_empty_string VARCHAR(255)," "the_null_string VARCHAR(255)," "the_binary_quoted_string BLOB," "the_binary_escaped_string BLOB," "the_datetime DATETIME," "the_datetime_tz DATETIME," "the_date DATE," "the_time TIME," "the_time_tz TIME," "id INTEGER AUTO INCREMENT)"); snprintf(ptr_cinfo->query, QUERY_LEN, "INSERT INTO test_datatypes (" "the_char," "the_uchar," "the_short," "the_ushort," "the_long," "the_ulong," "the_longlong," "the_ulonglong," "the_float," "the_double," "the_conn_quoted_string," "the_conn_quoted_string_copy," "the_conn_escaped_string," "the_conn_escaped_string_copy," "the_numstring," "the_empty_string," "the_null_string," "the_binary_quoted_string," "the_binary_escaped_string," "the_datetime," "the_datetime_tz," "the_date," "the_time," "the_time_tz) VALUES (" "-127," "127," "-32768," "32767," "-2147483648," "2147483647," "-9223372036854775807," "9223372036854775807," "3.402823466E+38," "1.7976931348623157E+307," "'Can ''we'' \"quote\" this properly?'," "'Can ''we'' \"quote\" this properly?'," "'Can ''we'' \"escape\" this properly?'," "'Can ''we'' \"escape\" this properly?'," "'%s'," "''," "NULL," "'\x01\x40\x41\xff\x42\x26\x43'," "'\x01\x40\x41\xff\x42\x26\x43'," "'2001-12-31 23:59:59'," "'2001-12-31 23:59:59 -10:00'," "'2001-12-31'," "'23:59:59'," "'23:59:59-10:00')", numstring); } return 0; } /* returns 0 on success, 1 on error */ int ask_for_conninfo(struct CONNINFO* ptr_cinfo) { int numdrivers; char resp[16]; fprintf(stderr, "\nlibdbi-drivers test program: $Id: test_dbi.c,v 1.72 2013/02/24 15:06:57 mhoenicka Exp $\n\n"); fprintf(stderr, "test instance-based (i) or legacy (l) libdbi interface? [i] "); fgets(resp, 16, stdin); if (*resp == '\n' || *resp == 'i') { n_legacy = 0; ptr_cinfo->n_legacy = 0; } else { n_legacy = 1; ptr_cinfo->n_legacy = 1; } fprintf(stderr, "log query (y|n)? [n] "); fgets(resp, 16, stdin); if (*resp == '\n' || *resp == 'n') { ptr_cinfo->query_log = 0; } else { ptr_cinfo->query_log = 1; } fprintf(stderr, "libdbi driver directory? [%s] ", DBI_DRIVER_DIR); fgets(ptr_cinfo->driverdir, 256, stdin); if ((ptr_cinfo->driverdir)[0] == '\n') { strncpy(ptr_cinfo->driverdir, DBI_DRIVER_DIR, 255), (ptr_cinfo->driverdir)[255] = '\0'; } else { (ptr_cinfo->driverdir)[strlen(ptr_cinfo->driverdir)-1] = '\0'; } numdrivers = my_dbi_initialize(ptr_cinfo->driverdir, &dbi_instance); if (numdrivers < 0) { fprintf(stderr, "Unable to initialize libdbi! Make sure you specified a valid driver directory.\n"); my_dbi_shutdown(dbi_instance); return 1; } else if (numdrivers == 0) { fprintf(stderr, "Initialized libdbi, but no drivers were found!\n"); my_dbi_shutdown(dbi_instance); return 1; } test_driver = NULL; fprintf(stderr, "%d drivers available: ", numdrivers); while ((test_driver = my_dbi_driver_list(test_driver, dbi_instance)) != NULL) { fprintf(stderr, "%s ", dbi_driver_get_name(test_driver)); } test_driver = NULL; (ptr_cinfo->drivername)[0] = '\n'; while ((ptr_cinfo->drivername)[0] == '\n') { fprintf(stderr, "\ntest which driver? "); fgets(ptr_cinfo->drivername, 64, stdin); } (ptr_cinfo->drivername)[strlen(ptr_cinfo->drivername)-1] = '\0'; if (!strcmp(ptr_cinfo->drivername, "mysql") || !strcmp(ptr_cinfo->drivername, "pgsql") || !strcmp(ptr_cinfo->drivername, "firebird") || !strcmp(ptr_cinfo->drivername, "freetds") || !strcmp(ptr_cinfo->drivername, "db2")) { fprintf(stderr, "\ndatabase administrator name? "); fgets(ptr_cinfo->username, 64, stdin); if (*(ptr_cinfo->username) == '\n') { *(ptr_cinfo->username) = '\0'; } else { (ptr_cinfo->username)[strlen(ptr_cinfo->username)-1] = '\0'; } fprintf(stderr, "\ndatabase administrator password? "); fgets(ptr_cinfo->password, 64, stdin); if (*(ptr_cinfo->password) == '\n') { *(ptr_cinfo->password) = '\0'; } else { (ptr_cinfo->password)[strlen(ptr_cinfo->password)-1] = '\0'; } } if(!strcmp(ptr_cinfo->drivername, "sqlite") || !strcmp(ptr_cinfo->drivername, "sqlite3") || !strcmp(ptr_cinfo->drivername, "firebird")) { if (!strcmp(ptr_cinfo->drivername, "firebird")) { /* we use the isql client to create and drop databases. This tool is whacky in that it accepts only darn short arguments, including the path of the database. Therefore do not suggest the libdbi default, but /tmp */ fprintf(stderr, "database directory? [/tmp] "); } else { fprintf(stderr, "database directory? [DEFAULT] "); } fgets(ptr_cinfo->dbdir, 256, stdin); if ((ptr_cinfo->dbdir)[0] == '\n') { (ptr_cinfo->dbdir)[0] = '\0'; } else { (ptr_cinfo->dbdir)[strlen(ptr_cinfo->dbdir)-1] = '\0'; } if (!strcmp(ptr_cinfo->drivername, "firebird") && (ptr_cinfo->dbdir)[0] == '\0') { /* strcpy(ptr_cinfo->dbdir, default_dbdir); */ /* strcat(ptr_cinfo->dbdir, "/firebird"); */ strcpy(ptr_cinfo->dbdir, "/tmp"); } } /* else: other drivers do not use a database directory */ if (!strcmp(ptr_cinfo->drivername, "firebird") || !strcmp(ptr_cinfo->drivername, "mysql") || !strcmp(ptr_cinfo->drivername, "pgsql") || !strcmp(ptr_cinfo->drivername, "freetds") || !strcmp(ptr_cinfo->drivername, "db2")) { fprintf(stderr, "\ndatabase hostname? [(blank for local socket if possible)] "); fgets(ptr_cinfo->hostname, 256, stdin); if (*(ptr_cinfo->hostname) == '\n') { if (!strcmp(ptr_cinfo->drivername, "pgsql") || !strcmp(ptr_cinfo->drivername, "firebird") || !strcmp(ptr_cinfo->drivername, "msql")) { *(ptr_cinfo->hostname) = '\0'; } else { strcpy(ptr_cinfo->hostname, "localhost"); } } else { (ptr_cinfo->hostname)[strlen(ptr_cinfo->hostname)-1] = '\0'; if (!strcmp(ptr_cinfo->drivername, "pgsql")) { if (!strcmp(ptr_cinfo->hostname, "localhost")) { *(ptr_cinfo->hostname) = '\0'; } } } } if (!strcmp(ptr_cinfo->drivername, "freetds")) { fprintf(stderr, "database version? "); fgets(ptr_cinfo->version, 64, stdin); (ptr_cinfo->version)[strlen(ptr_cinfo->version)-1] = '\0'; } fprintf(stderr, "database name? [libdbitest] "); fgets(ptr_cinfo->dbname, 64, stdin); if ((ptr_cinfo->dbname)[0] == '\n') { strcpy(ptr_cinfo->dbname, "libdbitest"); } else { (ptr_cinfo->dbname)[strlen(ptr_cinfo->dbname)-1] = '\0'; } fprintf(stderr, "encoding? [] "); fgets(ptr_cinfo->encoding, 20, stdin); if ((ptr_cinfo->encoding)[0] == '\n') { *(ptr_cinfo->encoding) = '\0'; } else { (ptr_cinfo->encoding)[strlen(ptr_cinfo->encoding)-1] = '\0'; } if (!strcmp(ptr_cinfo->drivername, "mysql")) { strcpy(ptr_cinfo->initial_dbname, "mysql"); } else if (!strcmp(ptr_cinfo->drivername, "pgsql")) { strcpy(ptr_cinfo->initial_dbname, "template1"); } else if (!strcmp(ptr_cinfo->drivername, "sqlite") || !strcmp(ptr_cinfo->drivername, "sqlite3")) { strcpy(ptr_cinfo->initial_dbname, ptr_cinfo->dbname); } else if (!strcmp(ptr_cinfo->drivername, "ingres") || !strcmp(ptr_cinfo->drivername, "firebird")){ strcpy(ptr_cinfo->initial_dbname, ptr_cinfo->dbname); } else if (!strcmp(ptr_cinfo->drivername, "freetds")) { strcpy(ptr_cinfo->initial_dbname, "master"); } else if (!strcmp(ptr_cinfo->drivername, "db2")) { strcpy(ptr_cinfo->initial_dbname, "toolsdb"); } my_dbi_shutdown(dbi_instance); dbi_instance = NULL; return 0; } /* always returns 0 */ int set_driver_options(struct CONNINFO* ptr_cinfo, dbi_conn conn, const char* encoding) { char *versionstring[100]; if (!strcmp(ptr_cinfo->drivername, "mysql") || !strcmp(ptr_cinfo->drivername, "pgsql") || !strcmp(ptr_cinfo->drivername, "freetds") || !strcmp(ptr_cinfo->drivername, "db2") ) { dbi_conn_set_option(conn, "host", ptr_cinfo->hostname); dbi_conn_set_option(conn, "username", ptr_cinfo->username); dbi_conn_set_option(conn, "password", ptr_cinfo->password); if (!strcmp(ptr_cinfo->drivername, "freetds") && strlen(ptr_cinfo->version)){ dbi_conn_set_option(conn, "freetds_version", ptr_cinfo->version); } } else if (!strcmp(ptr_cinfo->drivername, "msql")) { if( *(ptr_cinfo->hostname)) { dbi_conn_set_option(conn, "host", ptr_cinfo->hostname); } } else if (!strcmp(ptr_cinfo->drivername, "sqlite3")) { if (*(ptr_cinfo->dbdir)) { dbi_conn_set_option(conn, "sqlite3_dbdir", ptr_cinfo->dbdir); } } else if (!strcmp(ptr_cinfo->drivername, "sqlite")){ if (*(ptr_cinfo->dbdir)) { dbi_conn_set_option(conn, "sqlite_dbdir", ptr_cinfo->dbdir); } } else if (!strcmp(ptr_cinfo->drivername, "firebird")){ if (*(ptr_cinfo->dbdir)) { dbi_conn_set_option(conn, "firebird_dbdir", ptr_cinfo->dbdir); } dbi_conn_set_option(conn, "host", ptr_cinfo->hostname); dbi_conn_set_option(conn, "username", ptr_cinfo->username); dbi_conn_set_option(conn, "password", ptr_cinfo->password); } if (!strcmp(ptr_cinfo->drivername, "mysql")) { strcpy(ptr_cinfo->initial_dbname, "mysql"); if (encoding && *encoding) { dbi_conn_set_option(conn, "encoding", encoding); } } else if (!strcmp(ptr_cinfo->drivername, "pgsql")) { strcpy(ptr_cinfo->initial_dbname, "template1"); if (encoding && *encoding) { dbi_conn_set_option(conn, "encoding", encoding); } } else if (!strcmp(ptr_cinfo->drivername, "sqlite") || !strcmp(ptr_cinfo->drivername, "sqlite3")) { strcpy(ptr_cinfo->initial_dbname, ptr_cinfo->dbname); if (encoding && *encoding) { dbi_conn_set_option(conn, "encoding", encoding); } } else if (!strcmp(ptr_cinfo->drivername, "ingres") || !strcmp(ptr_cinfo->drivername, "firebird")){ strcpy(ptr_cinfo->initial_dbname, ptr_cinfo->dbname); } else if (!strcmp(ptr_cinfo->drivername, "freetds")) { strcpy(ptr_cinfo->initial_dbname, "master"); if (encoding && *encoding) { dbi_conn_set_option(conn, "encoding", encoding); } } else if (!strcmp(ptr_cinfo->drivername, "db2")) { strcpy(ptr_cinfo->initial_dbname, "toolsdb"); if (encoding && *encoding) { dbi_conn_set_option(conn, "encoding", encoding); } } dbi_conn_set_option(conn, "dbname", ptr_cinfo->dbname); dbi_conn_set_option_numeric(conn, "LogQueries", ptr_cinfo->query_log); return 0; } /* Open the driver, set options and connect */ static void open_database_driver() { const char *errmsg; int errnum; if (!dbi_instance) cinfo.numdrivers = my_dbi_initialize(cinfo.driverdir, &dbi_instance); if (cinfo.numdrivers < 0) { fprintf(stderr, "Unable to initialize libdbi! Make sure you specified a valid driver directory.\n"); my_dbi_shutdown(dbi_instance); exit(1); } else if (cinfo.numdrivers == 0) { fprintf(stderr, "Initialized libdbi, but no drivers were found!\n"); my_dbi_shutdown(dbi_instance); exit(1); } conn = my_dbi_conn_new(cinfo.drivername, dbi_instance); if (!conn) { errnum = dbi_conn_error(conn, &errmsg); fprintf(stderr,"Error %d dbi_conn_new_i: %s\n", errnum, errmsg); my_dbi_shutdown(dbi_instance); exit(1); } if (set_driver_options(&cinfo, conn, "")) { my_dbi_shutdown(dbi_instance); exit(1); } } static void create_database() { const char *errmsg; dbi_result result; char my_enc[32]; char database_path[1024]; char command[1024]; if (!strcmp(cinfo.drivername, "firebird")) { snprintf(database_path, 1024, "%s/%s", cinfo.dbdir, cinfo.dbname); if (!*(cinfo.hostname)) { if (access(database_path, R_OK | W_OK | F_OK) == 0) { goto noop; } snprintf(command, 1024, "echo \"CREATE DATABASE \'localhost:%s/%s\';\"" "| %s -e -pas %s " "-u %s -sql_dialect 3", cinfo.dbdir, cinfo.dbname, FIREBIRD_ISQL, cinfo.password, cinfo.username); } else { /* remote */ snprintf(command, 1024, "echo \"CREATE DATABASE \'%s:%s/%s\';\"" "| %s -e -pas %s " "-u %s -sql_dialect 3", cinfo.hostname, cinfo.dbdir, cinfo.dbname, FIREBIRD_ISQL, cinfo.password, cinfo.username); } if (system(command)) { fprintf(stderr, "Could not create initial database\n"); goto error; } /* snprintf(command, 1024, "sudo chmod 666 %s/%s", ptr_cinfo->dbdir, ptr_cinfo->dbname); */ /* if (system(command)) { */ /* fprintf(stderr, "Could not set database permissions\n"); */ /* return 1; */ /* } */ goto noop; } else if (!strcmp(cinfo.drivername, "sqlite") || !strcmp(cinfo.drivername, "sqlite3") || !strcmp(cinfo.drivername, "msql") || !strcmp(cinfo.drivername, "ingres") || !strcmp(cinfo.drivername, "db2") || !strcmp(cinfo.drivername, "oracle")) { goto noop; } else { /* we need to connect to a libdbi instance */ open_database_driver(); /* change to initial database */ dbi_conn_clear_option(conn, "dbname"); dbi_conn_set_option(conn, "dbname", cinfo.initial_dbname); if (dbi_conn_connect(conn) < 0) { printf("Could not connect to create the test database\n"); my_dbi_shutdown(dbi_instance); exit(1); } /* now create a database */ if (cinfo.encoding && *(cinfo.encoding)) { if (!strcmp(cinfo.drivername, "mysql")) { result = dbi_conn_queryf(conn, "CREATE DATABASE %s CHARACTER SET %s", cinfo.dbname, (!strcmp(cinfo.encoding, "UTF-8")) ? "utf8":"latin1"); } else if (!strcmp(cinfo.drivername, "pgsql")) { /* the first SQL command used to work until PostgreSQL 8.3. Later versions need a matching locale setting along with the encoding. Most modern installations use UNICODE as default encoding, therefore creating such a database should be safe. However, creating a LATIN1 database needs extra care. Apparently PostgreSQL is not supposed to work with databases whose encodings differ from that of the cluster, as set with initdb */ unsigned int pgserver_version; pgserver_version = dbi_conn_get_engine_version(conn); if (pgserver_version < 80400) { result = dbi_conn_queryf(conn, "CREATE DATABASE %s WITH ENCODING = '%s'", cinfo.dbname, (!strcmp(cinfo.encoding, "UTF-8")) ? "UNICODE":"LATIN1"); } else { if (!strcmp(cinfo.encoding, "UTF-8")) { result = dbi_conn_queryf(conn, "CREATE DATABASE %s WITH ENCODING = '%s' LC_COLLATE='en_US.UTF8' LC_CTYPE='en_US.UTF8'", cinfo.dbname, "UTF8"); } else { result = dbi_conn_queryf(conn, "CREATE DATABASE %s WITH ENCODING = '%s' LC_COLLATE='de_DE.ISO8859-1' LC_CTYPE='de_DE.ISO8859-1' TEMPLATE template0", cinfo.dbname, "LATIN1"); } } } } else { if (!strcmp(cinfo.drivername, "mysql")) { result = dbi_conn_queryf(conn, "CREATE DATABASE %s", cinfo.dbname); } else if (!strcmp(cinfo.drivername, "pgsql")) { result = dbi_conn_queryf(conn, "CREATE DATABASE %s", cinfo.dbname); } } if (result == NULL) { dbi_conn_error(conn, &errmsg); fprintf(stderr, "\tDarn! Can't create database! Error message: %s\n", errmsg); goto error; } dbi_result_free(result); } if (conn) { dbi_conn_close(conn); conn = NULL; } noop: return; error: exit(1); } static void drop_database() { const char *errmsg; dbi_result result; if (!strcmp(cinfo.drivername, "sqlite") || !strcmp(cinfo.drivername, "sqlite3")) { char dbpath[_POSIX_PATH_MAX]; /* need this break to grant some time for db unlocking */ sleep(3); if (*(cinfo.dbdir)) { strcpy(dbpath, cinfo.dbdir); } else { if (!strcmp(cinfo.drivername, "sqlite")) { snprintf(dbpath, _POSIX_PATH_MAX, "%s/sqlite", default_dbdir); } else { snprintf(dbpath, _POSIX_PATH_MAX, "%s/sqlite3", default_dbdir); } } if (dbpath[strlen(dbpath)-1] != '/') { strcat(dbpath, "/"); } strcat(dbpath, cinfo.dbname); if (unlink(dbpath)) { fprintf(stderr, "AAH! Can't delete database file!\n"); goto error; } } else if (!strcmp(cinfo.drivername, "msql") || !strcmp(cinfo.drivername, "ingres")) { fprintf(stderr, "\tThis is a no-op with the mSQL/Ingres driver.\n"); } else if (!strcmp(cinfo.drivername, "firebird")) { /* firebird does not support DROP DATABASE in regular SQL but offers it as an isql extension. In order to get rid of the test database, connect to it and drop it by sending a string to isql */ char command[1024]; if (!*(cinfo.hostname)) { snprintf(command, 1024, "echo \"CONNECT \'%s/%s\';DROP DATABASE;\"" "| %s -e -pas %s " "-u %s -sql_dialect 3", cinfo.dbdir, cinfo.dbname, FIREBIRD_ISQL, cinfo.password, cinfo.username); } else { /* remote */ snprintf(command, 1024, "echo \"CONNECT \'%s:%s/%s\';DROP DATABASE;\"" "| %s -e -pas %s " "-u %s -sql_dialect 3", cinfo.hostname, cinfo.dbdir, cinfo.dbname, FIREBIRD_ISQL, cinfo.password, cinfo.username); } if (system(command)) { fprintf(stderr,"\tAAH! Can't drop database %s<< connected to database %s! Error message: %s\n", cinfo.dbname, cinfo.dbname, errmsg); goto error; } } else { open_database_driver(); /* change to initial database */ dbi_conn_clear_option(conn, "dbname"); dbi_conn_set_option(conn, "dbname", cinfo.initial_dbname); if (dbi_conn_connect(conn) < 0) { fprintf(stderr,"Could not connect to drop the test database\n"); my_dbi_shutdown(dbi_instance); goto error; } if ((result = dbi_conn_queryf(conn, "DROP DATABASE %s", cinfo.dbname)) == NULL) { dbi_conn_error(conn, &errmsg); fprintf(stderr,"\tAAH! Can't drop database %s<< connected to database %s! Error message: %s\n", cinfo.dbname, cinfo.initial_dbname, errmsg); goto error; } dbi_result_free(result); } /* don't forget to disconnect */ dbi_conn_close(conn); conn = NULL; /* important: this functions is the last to be called * we need to shutdown libdbi */ my_dbi_shutdown(dbi_instance); error: return; } static void open_test_database() { const char *errmsg; int errnum; open_database_driver(); /* now we can change to test database and connect */ dbi_conn_clear_option(conn, "dbname"); dbi_conn_set_option(conn, "dbname", cinfo.dbname); if (dbi_conn_connect(conn) < 0) { printf("Could not connect to test database\n"); my_dbi_shutdown(dbi_instance); exit(1); } } static void close_database_driver() { if (conn) { dbi_conn_close(conn); conn = NULL; } my_dbi_shutdown(dbi_instance); dbi_instance = NULL; test_driver = NULL; } static void close_test_database() { dbi_conn_close(conn); conn = NULL; } /* convenience wrappers for recallable vs. legacy libdbi interface */ int my_dbi_initialize(const char *driverdir, dbi_inst *Inst) { if (n_legacy) { return dbi_initialize(driverdir); } else { return dbi_initialize_r(driverdir, Inst); } } void my_dbi_shutdown(dbi_inst Inst) { if (n_legacy) { dbi_shutdown(); } else { dbi_shutdown_r(Inst); } } dbi_driver my_dbi_driver_list(dbi_driver Current, dbi_inst Inst) { if (n_legacy) { return dbi_driver_list(Current); } else { return dbi_driver_list_r(Current, Inst); } } dbi_conn my_dbi_conn_new(const char *name, dbi_inst Inst) { if (n_legacy) { return dbi_conn_new(name); } else { return dbi_conn_new_r(name, Inst); } } static void usage() { fprintf(stderr, "\nlibdbi-drivers test program: $Id: test_dbi.c,v 1.72 2013/02/24 15:06:57 mhoenicka Exp $\n\n" "Usage: test_dbi [options]\n" " -B Name of the build. Single submission to the dashboard\n" " -C Generate a XML test report to submit.\n" " for a specific project, environment and build type.\n" " -H Specify hosname in dashboard . Ex.: dbi0 \n" " -h, -? print this message\n\n" " -N Specify OS Name in dashboard. Ex.: Linux\n" " -P Specify OS Platform name in dashboard. Ex.: x86_64, i368\n" " -R Specify OS Release in dashboard Ex.: 2.6.28-15-server\n" " -s run a single test\n" " -S Name of the site submitting the build. Computer\n" " contributing builds to the dashboard. A site might\n" " belong to several projects and submit different build.\n" " -T Can be Nightly or Experimental or Continuous.\n" " -V Specify OS Version. Ex.: Ubuntu SMP\n"); exit(1); } /* returns 0 on success, 1 on error */ int test_custom_function(struct CONNINFO* ptr_cinfo, dbi_conn conn) { dbi_conn_t *myconn = conn; /* attempt to call a trivial function of the client library */ if (!strcmp(ptr_cinfo->drivername, "firebird")) { fprintf(stderr, "\tnot yet implemented for this driver\n"); return 0; } else if (!strcmp(ptr_cinfo->drivername, "freetds")) { fprintf(stderr, "\tnot yet implemented for this driver\n"); return 0; } else if (!strcmp(ptr_cinfo->drivername, "ingres")) { fprintf(stderr, "\tnot yet implemented for this driver\n"); return 0; } else if (!strcmp(ptr_cinfo->drivername, "msql")) { fprintf(stderr, "\tnot yet implemented for this driver\n"); return 0; } else if (!strcmp(ptr_cinfo->drivername, "mysql")) { int protocol; unsigned int (*custom_function)(void*); if ((custom_function = dbi_driver_specific_function(dbi_conn_get_driver(conn), "mysql_get_proto_info")) != NULL) { protocol = custom_function(myconn->connection); printf("\tmysql_get_proto_info returned: %d\n", protocol); return 0; } else { printf("\tD'uh! Cannot run custom function\n"); return 1; } } else if (!strcmp(ptr_cinfo->drivername, "oracle")) { fprintf(stderr, "not yet implemented\n"); return 0; } else if (!strcmp(ptr_cinfo->drivername, "pgsql")) { int protocol; int (*custom_function)(void*); if ((custom_function = dbi_driver_specific_function(dbi_conn_get_driver(conn), "PQprotocolVersion")) != NULL) { protocol = custom_function(myconn->connection); printf("\tPQprotocolVersion returned: %d\n", protocol); return 0; } else { printf("\tD'uh! Cannot run custom function\n"); return 1; } } else if (!strcmp(ptr_cinfo->drivername, "sqlite")) { const char* version; const char* (*custom_function)(void); if ((custom_function = dbi_driver_specific_function(dbi_conn_get_driver(conn), "sqlite_version")) != NULL) { version = custom_function(); printf("\tsqlite_version returned: %s\n", version); return 0; } else { printf("\tD'uh! Cannot run custom function\n"); return 1; } } else if (!strcmp(ptr_cinfo->drivername, "sqlite3")) { const char* version; const char* (*custom_function)(void); if ((custom_function = dbi_driver_specific_function(dbi_conn_get_driver(conn), "sqlite3_libversion")) != NULL) { version = custom_function(); printf("\tsqlite3_libversion returned: %s\n", version); return 0; } else { printf("\tD'uh! Cannot run custom function\n"); return 1; } } } /* returns 0 on success, 1 on error */ int test_custom_function_parameters(struct CONNINFO* ptr_cinfo, dbi_conn conn) { dbi_conn_t *myconn = conn; /* attempt to call a trivial function of the client library */ if (!strcmp(ptr_cinfo->drivername, "firebird")) { fprintf(stderr, "\tnot yet implemented for this driver\n"); return 0; } else if (!strcmp(ptr_cinfo->drivername, "freetds")) { fprintf(stderr, "\tnot yet implemented for this driver\n"); return 0; } else if (!strcmp(ptr_cinfo->drivername, "ingres")) { fprintf(stderr, "\tnot yet implemented for this driver\n"); return 0; } else if (!strcmp(ptr_cinfo->drivername, "msql")) { fprintf(stderr, "\tnot yet implemented for this driver\n"); return 0; } else if (!strcmp(ptr_cinfo->drivername, "mysql")) { fprintf(stderr, "\tnot yet implemented for this driver\n"); return 0; } else if (!strcmp(ptr_cinfo->drivername, "oracle")) { fprintf(stderr, "not yet implemented\n"); return 0; } else if (!strcmp(ptr_cinfo->drivername, "pgsql")) { int res; int count = 30; const char *error = NULL; const char *errmsg = NULL; int (*custom_function_copy)(void*, const char*, int) = NULL; int (*custom_function_end)(void*, const char*) = NULL; char* (*custom_function_error)(void*) = NULL; dbi_result result; const char *query = "COPY batch FROM STDIN"; const char *query_data1 = "1\t2\t\"A little job\"\n"; const char *query_data2 = "2\t3\t\"Other little job\"\n"; const char *table_batch = "CREATE TABLE batch ( id int, jobid int, jobname varchar)"; // Start copy if ((result = dbi_conn_query(conn, table_batch)) == NULL) { dbi_conn_error(conn, &errmsg); printf("\tAAH! Can't create table! Error message: %s\n", errmsg); return 1; } else { printf("\tOk.\n"); } dbi_result_free(result); if ((result = dbi_conn_query(conn, query)) == NULL) { dbi_conn_error(conn, &errmsg); printf("\tAAH! Can't query! Error message: %s\n", errmsg); return 1; } else { printf("\tOk %s.\n", query); } dbi_result_free(result); // Start copy insert // Insert data two times if ((custom_function_copy = dbi_driver_specific_function(dbi_conn_get_driver(conn), "PQputCopyData")) != NULL) { printf("\tPQputCopyData %s\n", query_data1); res = custom_function_copy(myconn->connection, query_data1, strlen(query_data1)); printf("\tPQputCopyData returned: %d\n", res); if (res <= 0) { printf("\tD'uh! PQputCopyData error\n"); return 1; } printf("\tPQputCopyData %s\n", query_data2); res = custom_function_copy(myconn->connection, query_data2, strlen(query_data2)); printf("\tPQputCopyData returned: %d\n", res); if (res <= 0) { printf("\tD'uh! PQputCopyData error\n"); return 1; } } // End data if ((custom_function_end = dbi_driver_specific_function(dbi_conn_get_driver(conn), "PQputCopyEnd")) != NULL) { do { res = custom_function_end(myconn->connection, error); } while (res == 0 && --count > 0); } if (res <= 0) { printf("\tD'uh! PQputCopyEnd error\n"); return 1; } printf("\tPQputCopyEnd returned: %d\n\tError: %d %s\n", res, dbi_conn_error(conn, &errmsg), errmsg); if ((custom_function_error = dbi_driver_specific_function(dbi_conn_get_driver(conn), "PQerrorMessage")) != NULL) { printf("\tPQerrorMessage returned %s\n", custom_function_error(myconn->connection)); } if ((result = dbi_conn_query(conn, "SELECT * from batch")) == NULL) { dbi_conn_error(conn, &errmsg); printf("\tAAH! Can't get read data! Error message: %s\n", errmsg); return 1; } printf("\tGot result, %d rows, try to access rows\n", dbi_result_get_numrows(result)); while (dbi_result_next_row(result)) { const char *errmsg = NULL; long the_long_one = 0; long the_long_two = 0; const char* the_string; dbi_error_flag errflag; /* first retrieve the values */ the_long_one = dbi_result_get_int(result, "id"); errflag = dbi_conn_error(dbi_result_get_conn(result), &errmsg); if (errflag) { printf("the_int_one errflag=%s\n", errmsg); } the_long_two = dbi_result_get_int(result, "jobid"); errflag = dbi_conn_error(dbi_result_get_conn(result), &errmsg); if (errflag) { printf("the_int_two errflag=%s\n", errmsg); } the_string = dbi_result_get_string(result, "jobname"); errflag = dbi_conn_error(dbi_result_get_conn(result), &errmsg); if (errflag) { printf("the_stringr errflag=%s\n", errmsg); } printf("\tResult: the_long_one: %d the_long_two: %d the_string: %s\n", the_long_one, the_long_two, the_string); } return 0; } else if (!strcmp(ptr_cinfo->drivername, "sqlite")) { fprintf(stderr, "\tnot yet implemented for this driver\n"); return 0; } else if (!strcmp(ptr_cinfo->drivername, "sqlite3")) { fprintf(stderr, "\tnot yet implemented for this driver\n"); return 0; } else { printf("\tD'uh! Cannot run custom function\n"); return 1; } } /*********** tests cases begin ***********/ /****** driver-specific tests ******/ Ensure test_another_encoding() { dbi_conn another_conn = NULL; dbi_result result; const char *errmsg; int status; const char *encode = NULL; #define DROP_DB_ENCODE \ do { \ dbi_conn_select_db(another_conn, cinfo.initial_dbname); \ result = dbi_conn_queryf(another_conn, "DROP DATABASE %s", "dbencode"); \ if (result == NULL) { \ dbi_conn_error(another_conn, &errmsg); \ printf("\tAAH! Can't drop database connected to database Error message: %s\n", errmsg); \ exit(1); \ } \ dbi_result_free(result); \ } while(0); /* test begin */ another_conn = my_dbi_conn_new(cinfo.drivername, dbi_instance); assert_not_equal(another_conn, NULL); set_driver_options(&cinfo, another_conn, "UTF-8"); status = dbi_conn_connect(another_conn); assert_equal(status, 0); if (!strcmp(cinfo.drivername, "mysql")) { result = dbi_conn_queryf(another_conn, "CREATE DATABASE %s CHARACTER SET %s", "dbencode", "utf8"); } else if (!strcmp(cinfo.drivername, "pgsql")) { result = dbi_conn_queryf(another_conn, "CREATE DATABASE %s WITH ENCODING = '%s'", "dbencode", "UTF-8"); } else { exit(1); } if (result == NULL) { dbi_conn_error(another_conn, &errmsg); printf("\tAAH! Can't create database connected to database Error message: %s\n", errmsg); exit(1); } dbi_conn_select_db(another_conn, "dbencode"); /* Test: get encoding of UTF-8 database */ encode = dbi_conn_get_encoding(another_conn); assert_string_equal(encode, "UTF-8"); /* drop database */ DROP_DB_ENCODE /* we're done with this connection */ dbi_conn_close(another_conn); another_conn = NULL; /* repeat test for latin1 encoding */ another_conn = my_dbi_conn_new(cinfo.drivername, dbi_instance); assert_not_equal(another_conn, NULL); set_driver_options(&cinfo, another_conn, "ISO-8859-1"); status = dbi_conn_connect(another_conn); assert_equal(status, 0); if (!strcmp(cinfo.drivername, "mysql")) { result = dbi_conn_queryf(another_conn, "CREATE DATABASE %s CHARACTER SET %s", "dbencode", "latin1"); } else if (!strcmp(cinfo.drivername, "pgsql")) { unsigned int pgserver_version; pgserver_version = dbi_conn_get_engine_version(another_conn); if (pgserver_version < 80400) { result = dbi_conn_queryf(another_conn, "CREATE DATABASE %s WITH ENCODING = '%s'", "dbencode", "LATIN1"); } else { result = dbi_conn_queryf(another_conn, "CREATE DATABASE %s WITH ENCODING = '%s' LC_COLLATE='de_DE.ISO8859-1' LC_CTYPE='de_DE.ISO8859-1' TEMPLATE template0", "dbencode", "LATIN1"); } } else { exit(1); } if (result == NULL) { dbi_conn_error(another_conn, &errmsg); printf("\tAAH! Can't create database connected to database Error message: %s\n", errmsg); exit(1); } dbi_result_free(result); dbi_conn_select_db(another_conn, "dbencode"); /* Test: get encoding of ISO-8859-1 database */ encode = dbi_conn_get_encoding(another_conn); assert_string_equal(encode, "ISO-8859-1"); /* we're done with this connection */ dbi_conn_close(another_conn); another_conn = NULL; /* now make a connection to the existing database using a different encoding */ another_conn = my_dbi_conn_new(cinfo.drivername, dbi_instance); assert_not_equal(another_conn, NULL); set_driver_options(&cinfo, another_conn, "UTF-8"); status = dbi_conn_connect(another_conn); assert_equal(status, 0); dbi_conn_select_db(another_conn, "dbencode"); /* Test: get encoding of UTF-8 database */ encode = dbi_conn_get_encoding(another_conn); assert_string_equal(encode, "UTF-8"); dbi_conn_close(another_conn); another_conn = NULL; /* now make a connection to the existing database using the "auto" encoding */ another_conn = my_dbi_conn_new(cinfo.drivername, dbi_instance); assert_not_equal(another_conn, NULL); set_driver_options(&cinfo, another_conn, "auto"); status = dbi_conn_connect(another_conn); assert_equal(status, 0); dbi_conn_select_db(another_conn, "dbencode"); /* Test: get encoding of ISO-8859-1 database */ encode = dbi_conn_get_encoding(another_conn); assert_string_equal(encode, "ISO-8859-1"); /* Test: drop ISO-8859-1 database */ DROP_DB_ENCODE dbi_conn_close(another_conn); another_conn = NULL; } Ensure test_dbi_conn_query() { const char *errmsg; int errnum; dbi_result result; if (!strcmp(cinfo.drivername, "firebird")) { QUERY_ASSERT_RESULT(result, "SELECT the_short FROM test_datatypes" " WHERE the_short = -32768"); } else { QUERY_ASSERT_RESULT(result, "SELECT the_char, the_longlong FROM test_datatypes" " WHERE the_longlong = -9223372036854775807 and the_char = -127"); } while (dbi_result_next_row(result)) { errmsg = NULL; long long the_longlong = 0; signed short the_short = 0; if(!strcmp(cinfo.drivername, "firebird")) { the_short = dbi_result_get_short(result, "the_short"); assert_equal(the_short, expect_longlong_from_name("the_short", cinfo.drivername)); } else { the_longlong = dbi_result_get_longlong(result, "the_longlong"); assert_equal(the_longlong, expect_longlong_from_name("the_longlong", cinfo.drivername)); } } dbi_result_free(result); } Ensure test_dbi_conn_queryf() { const char table_test_datatypes[] = "test_datatypes"; long long the_longlong_number = -9223372036854775807; signed char the_char_number = -127; signed short the_short_number = -32768; dbi_result result; if (!strcmp(cinfo.drivername, "firebird")) { result = dbi_conn_queryf(conn, "SELECT the_short FROM %s" " WHERE the_short = '%d'", table_test_datatypes, the_short_number); } else { result = dbi_conn_queryf(conn, "SELECT the_char, the_longlong FROM %s" " WHERE the_longlong = '%lld' and the_char = '%d'", table_test_datatypes, the_longlong_number, the_char_number); } ASSERT_RESULT while (dbi_result_next_row(result)) { errmsg = NULL; long long the_longlong = 0; signed char the_char = 0; signed short the_short = 0; if(!strcmp(cinfo.drivername, "msql")) { the_longlong = dbi_result_get_longlong(result, "the_longlong"); assert_equal(the_longlong, -9223372036854775807); } else if (!strcmp(cinfo.drivername, "firebird")) { the_short = dbi_result_get_short(result, "the_short"); assert_equal(the_short, -32768); } else { the_longlong = dbi_result_get_longlong(result, "the_longlong"); assert_equal(the_longlong, -9223372036854775807); } } dbi_result_free(result); } // TODO: test_dbi_conn_query_null() Ensure test_dbi_conn_query_null() { } // TODO: test_dbi_conn_ping() Ensure test_dbi_conn_ping() { } Ensure test_dbi_conn_sequence_last() { unsigned long long n_last_id = 0; if (!strcmp(cinfo.drivername, "pgsql") || !strcmp(cinfo.drivername, "ingres")) { n_last_id = dbi_conn_sequence_last(conn, "test_datatypes_id_seq"); } else if (!strcmp(cinfo.drivername, "firebird")) { n_last_id = dbi_conn_sequence_last(conn, "GEN_T1_ID"); } else { n_last_id = dbi_conn_sequence_last(conn, NULL); } assert_equal(n_last_id, 1); } Ensure test_dbi_conn_sequence_next() { unsigned long long n_next_id = 0; if (!strcmp(cinfo.drivername, "pgsql") || !strcmp(cinfo.drivername, "ingres")) { n_next_id = dbi_conn_sequence_next(conn, "test_datatypes_id_seq"); assert_equal(n_next_id, 2); } else if (!strcmp(cinfo.drivername, "firebird")) { n_next_id = dbi_conn_sequence_next(conn, "GEN_T1_ID"); assert_equal(n_next_id, 2); } else if (!strcmp(cinfo.drivername, "mysql")) { n_next_id = dbi_conn_sequence_next(conn, NULL); assert_equal(n_next_id, 0); } else { n_next_id = dbi_conn_sequence_next(conn, NULL); assert_equal(n_next_id, 0); } } Ensure test_dbi_conn_quote_binary_copy() { dbi_result result; unsigned char* quoted_binary = NULL; size_t quoted_binary_length; quoted_binary_length = dbi_conn_quote_binary_copy(conn, binary_to_quote, binary_to_quote_length, "ed_binary); if(!strcmp(cinfo.drivername, "mysql")) { assert_equal(39, quoted_binary[0]); assert_equal(65, quoted_binary[1]); assert_equal(66, quoted_binary[2]); assert_equal(92, quoted_binary[3]); assert_equal(48, quoted_binary[4]); assert_equal(67, quoted_binary[5]); assert_equal(92, quoted_binary[6]); assert_equal(39, quoted_binary[7]); assert_equal(68, quoted_binary[8]); assert_equal(39, quoted_binary[9]); } else if(!strcmp(cinfo.drivername, "pgsql")) { unsigned int pgserver_version; pgserver_version = dbi_conn_get_engine_version(conn); if (pgserver_version < 90000) { /* server uses old binary format by default */ assert_equal(39, quoted_binary[0]); assert_equal(65, quoted_binary[1]); assert_equal(66, quoted_binary[2]); assert_equal(92, quoted_binary[3]); assert_equal(92, quoted_binary[4]); assert_equal(48, quoted_binary[5]); assert_equal(48, quoted_binary[6]); assert_equal(48, quoted_binary[7]); assert_equal(67, quoted_binary[8]); assert_equal(39, quoted_binary[9]); assert_equal(39, quoted_binary[10]); assert_equal(68, quoted_binary[11]); assert_equal(39, quoted_binary[12]); } else { /* server uses hex format by default */ assert_equal(39, quoted_binary[0]); assert_equal(92, quoted_binary[1]); assert_equal(120, quoted_binary[2]); assert_equal(52, quoted_binary[3]); assert_equal(49, quoted_binary[4]); assert_equal(52, quoted_binary[5]); assert_equal(50, quoted_binary[6]); assert_equal(48, quoted_binary[7]); assert_equal(48, quoted_binary[8]); assert_equal(52, quoted_binary[9]); assert_equal(51, quoted_binary[10]); assert_equal(50, quoted_binary[11]); assert_equal(55, quoted_binary[12]); assert_equal(52, quoted_binary[13]); assert_equal(52, quoted_binary[14]); assert_equal(39, quoted_binary[15]); } } else if(!strcmp(cinfo.drivername, "sqlite") || !strcmp(cinfo.drivername, "sqlite3") || !strcmp(cinfo.drivername, "firebird")) { assert_equal(39, quoted_binary[0]); assert_equal(1, quoted_binary[1]); assert_equal(64, quoted_binary[2]); assert_equal(65, quoted_binary[3]); assert_equal(255, quoted_binary[4]); assert_equal(66, quoted_binary[5]); assert_equal(38, quoted_binary[6]); assert_equal(67, quoted_binary[7]); assert_equal(39, quoted_binary[8]); } } Ensure test_dbi_conn_escape_binary_copy() { dbi_result result; unsigned char* escaped_binary = NULL; size_t escaped_binary_length; escaped_binary_length = dbi_conn_escape_binary_copy(conn, binary_to_escape, binary_to_escape_length, &escaped_binary); if(!strcmp(cinfo.drivername, "mysql")) { assert_equal(65, escaped_binary[0]); assert_equal(66, escaped_binary[1]); assert_equal(92, escaped_binary[2]); assert_equal(48, escaped_binary[3]); assert_equal(67, escaped_binary[4]); assert_equal(92, escaped_binary[5]); assert_equal(39, escaped_binary[6]); assert_equal(68, escaped_binary[7]); } else if(!strcmp(cinfo.drivername, "pgsql")) { unsigned int pgserver_version; pgserver_version = dbi_conn_get_engine_version(conn); if (pgserver_version < 90000) { /* server uses old binary format by default */ assert_equal(65, escaped_binary[0]); assert_equal(66, escaped_binary[1]); assert_equal(92, escaped_binary[2]); assert_equal(92, escaped_binary[3]); assert_equal(48, escaped_binary[4]); assert_equal(48, escaped_binary[5]); assert_equal(48, escaped_binary[6]); assert_equal(67, escaped_binary[7]); assert_equal(39, escaped_binary[8]); assert_equal(39, escaped_binary[9]); assert_equal(68, escaped_binary[10]); } else { /* server uses hex format by default */ assert_equal(92, escaped_binary[0]); assert_equal(120, escaped_binary[1]); assert_equal(52, escaped_binary[2]); assert_equal(49, escaped_binary[3]); assert_equal(52, escaped_binary[4]); assert_equal(50, escaped_binary[5]); assert_equal(48, escaped_binary[6]); assert_equal(48, escaped_binary[7]); assert_equal(52, escaped_binary[8]); assert_equal(51, escaped_binary[9]); assert_equal(50, escaped_binary[10]); assert_equal(55, escaped_binary[11]); assert_equal(52, escaped_binary[12]); assert_equal(52, escaped_binary[13]); } } else if(!strcmp(cinfo.drivername, "sqlite") || !strcmp(cinfo.drivername, "sqlite3") || !strcmp(cinfo.drivername, "firebird")) { assert_equal(1, escaped_binary[0]); assert_equal(64, escaped_binary[1]); assert_equal(65, escaped_binary[2]); assert_equal(255, escaped_binary[3]); assert_equal(66, escaped_binary[4]); assert_equal(38, escaped_binary[5]); assert_equal(67, escaped_binary[6]); } } Ensure test_retrieve_zero_rows() { dbi_result result; int numfields; result = dbi_conn_query(conn, "SELECT * from test_datatypes WHERE '0'='1'"); ASSERT_RESULT numfields = dbi_result_get_numfields(result); assert_not_equal(numfields, DBI_FIELD_ERROR); if (!strcmp(cinfo.drivername, "mysql")) { assert_equal(numfields, 25); } else if (!strcmp(cinfo.drivername, "pgsql")) { assert_equal(numfields, 25); } else if (!strcmp(cinfo.drivername, "sqlite3")) { assert_equal(numfields, 26); } else if (!strcmp(cinfo.drivername, "firebird")) { assert_equal(numfields, 21); } else { /* this includes sqlite */ assert_equal(numfields, 0); } dbi_result_free(result); } Ensure test_dbi_conn_select_db() { const char *errmsg; if (!strcmp(cinfo.drivername, "firebird")) { /* TODO: firebird can't handle this? */ } else if (!strcmp(cinfo.drivername, "pgsql")) { /* TODO: connecting to initial_dbname first, then to dbname causes a SIGPIPE although both asserts succeed */ /* assert_not_equal(dbi_conn_select_db(conn, cinfo.initial_dbname), -1); */ /* printf("about to select previous db\n"); */ /* assert_not_equal(dbi_conn_select_db(conn, cinfo.dbname), -1); */ /* printf("done selecting previous db\n"); */ } else { assert_not_equal(dbi_conn_select_db(conn, cinfo.initial_dbname), -1); dbi_conn_select_db(conn, cinfo.dbname); } } /* transactions */ Ensure test_dbi_conn_transaction_commit() { const char *errmsg; dbi_result result; int int_result; int errnum; if (!dbi_conn_cap_get(conn, "transaction_support")) { /* test not applicable */ return; } /* check initial value */ QUERY_ASSERT_RESULT(result, "SELECT the_long FROM test_datatypes"); while (dbi_result_next_row(result)) { errmsg = NULL; int the_long = 0; the_long = dbi_result_get_int_idx(result, 1); assert_equal(the_long, -2147483648); } dbi_result_free(result); /* start transaction */ int_result = dbi_conn_transaction_begin(conn); assert_equal(int_result, 0); /* update value */ QUERY_ASSERT_RESULT(result, "UPDATE test_datatypes SET the_long=0"); /* commit transaction */ int_result = dbi_conn_transaction_commit(conn); assert_equal(int_result, 0); /* check value again */ QUERY_ASSERT_RESULT(result, "SELECT the_long FROM test_datatypes"); while (dbi_result_next_row(result)) { errmsg = NULL; int the_long = 0; the_long = dbi_result_get_int_idx(result, 1); assert_equal(the_long, 0); } dbi_result_free(result); } Ensure test_dbi_conn_transaction_rollback() { const char *errmsg; dbi_result result; int int_result; int errnum; if (!dbi_conn_cap_get(conn, "transaction_support")) { /* test not applicable */ return; } /* check initial value */ QUERY_ASSERT_RESULT(result, "SELECT the_long FROM test_datatypes"); while (dbi_result_next_row(result)) { errmsg = NULL; int the_long = 0; the_long = dbi_result_get_int_idx(result, 1); assert_equal(the_long, -2147483648); } dbi_result_free(result); /* start transaction */ int_result = dbi_conn_transaction_begin(conn); assert_equal(int_result, 0); /* update value */ QUERY_ASSERT_RESULT(result, "UPDATE test_datatypes SET the_long=0"); /* rollback transaction */ int_result = dbi_conn_transaction_rollback(conn); assert_equal(int_result, 0); /* check value again */ QUERY_ASSERT_RESULT(result, "SELECT the_long FROM test_datatypes"); while (dbi_result_next_row(result)) { errmsg = NULL; int the_long = 0; the_long = dbi_result_get_int_idx(result, 1); assert_equal(the_long, -2147483648); } dbi_result_free(result); } Ensure test_dbi_conn_rollback_to_savepoint() { const char *errmsg; dbi_result result; int int_result; int errnum; if (!dbi_conn_cap_get(conn, "savepoint_support")) { /* test not applicable */ return; } /* check initial value */ QUERY_ASSERT_RESULT(result, "SELECT the_long FROM test_datatypes"); while (dbi_result_next_row(result)) { errmsg = NULL; int the_long = 0; the_long = dbi_result_get_int_idx(result, 1); assert_equal(the_long, -2147483648); } dbi_result_free(result); /* start transaction */ int_result = dbi_conn_transaction_begin(conn); assert_equal(int_result, 0); /* set savepoint */ int_result = dbi_conn_savepoint(conn, "my_savepoint"); assert_equal(int_result, 0); /* update value */ QUERY_ASSERT_RESULT(result, "UPDATE test_datatypes SET the_long=0"); /* rollback to savepoint */ int_result = dbi_conn_rollback_to_savepoint(conn, "my_savepoint"); assert_equal(int_result, 0); /* commit transaction */ int_result = dbi_conn_transaction_commit(conn); assert_equal(int_result, 0); /* check value again */ QUERY_ASSERT_RESULT(result, "SELECT the_long FROM test_datatypes"); while (dbi_result_next_row(result)) { errmsg = NULL; int the_long = 0; the_long = dbi_result_get_int_idx(result, 1); assert_equal(the_long, -2147483648); } dbi_result_free(result); } Ensure test_dbi_conn_release_savepoint() { const char *errmsg; dbi_result result; int int_result; int errnum; if (!dbi_conn_cap_get(conn, "savepoint_support")) { /* test not applicable */ return; } /* start transaction */ int_result = dbi_conn_transaction_begin(conn); assert_equal(int_result, 0); /* set savepoint */ int_result = dbi_conn_savepoint(conn, "my_savepoint"); assert_equal(int_result, 0); /* release savepoint */ int_result = dbi_conn_release_savepoint(conn, "my_savepoint"); assert_equal(int_result, 0); /* rollback to savepoint */ int_result = dbi_conn_rollback_to_savepoint(conn, "my_savepoint"); assert_equal(int_result, 1); /* commit transaction */ int_result = dbi_conn_transaction_commit(conn); assert_equal(int_result, 0); } // TODO: make tests to specific functions /* Postgresql specific funtions */ Ensure test_pgsql_copy() { } /****** no driver-specific tests ******/ Ensure test_create_another_connection() { dbi_conn another_conn = NULL; dbi_result result; int status; another_conn = my_dbi_conn_new(cinfo.drivername, dbi_instance); assert_not_equal(another_conn, NULL); set_driver_options(&cinfo, another_conn, ""); status = dbi_conn_connect(another_conn); assert_equal(status, 0); result = dbi_conn_query(another_conn, "SELECT the_conn_quoted_string from test_datatypes"); ASSERT_RESULT while (dbi_result_next_row(result)) { const char* the_quoted_string; the_quoted_string = dbi_result_get_string(result, "the_conn_quoted_string"); assert_string_equal(the_quoted_string, expect_as_string_from_name("the_conn_quoted_string", cinfo.drivername)); } dbi_result_free(result); dbi_conn_close(another_conn); another_conn = NULL; } Ensure test_dbi_conn_quote_string() { dbi_result result; char *my_string_to_quote = NULL; my_string_to_quote = strdup(string_to_quote); dbi_conn_quote_string(conn, &my_string_to_quote); assert_string_equal(my_string_to_quote, expect_as_string_from_name("_quoted_string", cinfo.drivername)); free(my_string_to_quote); } Ensure test_dbi_conn_quote_string_copy() { dbi_result result; char *quoted_string = NULL; size_t quoted_string_length; quoted_string_length = dbi_conn_quote_string_copy(conn, string_to_quote, "ed_string); assert_string_equal(quoted_string, expect_as_string_from_name("_quoted_string", cinfo.drivername)); } Ensure test_dbi_conn_escape_string() { dbi_result result; char *my_string_to_escape = NULL; my_string_to_escape = strdup(string_to_escape); dbi_conn_escape_string(conn, &my_string_to_escape); assert_string_equal(my_string_to_escape, expect_as_string_from_name("_escaped_string", cinfo.drivername)); free(my_string_to_escape); } Ensure test_dbi_conn_escape_string_copy() { dbi_result result; char *escaped_string = NULL; size_t escaped_string_length; escaped_string_length = dbi_conn_escape_string_copy(conn, string_to_escape, &escaped_string); assert_string_equal(escaped_string, expect_as_string_from_name("_escaped_string", cinfo.drivername)); } Ensure test_dbi_result_get_conn() { dbi_result result; dbi_conn getcon; result = dbi_conn_query(conn, "SELECT the_char from test_datatypes"); ASSERT_RESULT getcon = dbi_result_get_conn(result); assert_not_equal_with_message(getcon, NULL, "Value: '%d' Error %d: %s", getcon, dbi_conn_error(conn, &errmsg), errmsg); dbi_result_free(result); } Ensure test_dbi_result_free() { } Ensure test_dbi_result_seek_row() { dbi_result result; int seekrow; result = dbi_conn_query(conn, "SELECT the_char from test_datatypes"); ASSERT_RESULT seekrow = dbi_result_seek_row(result, 3); dbi_conn_error(conn, &errmsg); assert_equal_with_message(seekrow, 1, "Value '%d' Error: %s", seekrow, errmsg); dbi_result_free(result); } Ensure test_dbi_result_first_row() { dbi_result result; int firstrow; result = dbi_conn_query(conn, "SELECT the_char from test_datatypes"); ASSERT_RESULT firstrow = dbi_result_first_row(result); dbi_conn_error(conn, &errmsg); assert_equal_with_message(firstrow, 1, "Value: '%d' Error: %s", firstrow, errmsg); dbi_result_free(result); } Ensure test_dbi_result_last_row() { dbi_result result; int lastrow; result = dbi_conn_query(conn, "SELECT the_char from test_datatypes"); ASSERT_RESULT lastrow = dbi_result_last_row(result); dbi_conn_error(conn, &errmsg); assert_equal_with_message(lastrow, 1, "Value: '%d' Error: %s", lastrow, errmsg); dbi_result_free(result); } Ensure test_dbi_result_prev_row() { dbi_result result; int prevrow; result = dbi_conn_query(conn, "SELECT the_char from test_datatypes"); ASSERT_RESULT dbi_result_next_row(result); dbi_result_next_row(result); prevrow = dbi_result_prev_row(result); dbi_conn_error(conn, &errmsg); assert_equal_with_message(prevrow, 1, "Value: '%d' Error: %s", prevrow, errmsg); dbi_result_free(result); } Ensure test_dbi_result_next_row() { dbi_result result; int nextrow; result = dbi_conn_query(conn, "SELECT the_char from test_datatypes"); ASSERT_RESULT nextrow = dbi_result_next_row(result); dbi_conn_error(conn, &errmsg); assert_equal_with_message(nextrow, 1, "Value: '%d' Error: %s", nextrow, errmsg); dbi_result_free(result); } Ensure test_dbi_result_get_currow() { dbi_result result; unsigned long long currow; result = dbi_conn_query(conn, "SELECT the_char from test_datatypes"); ASSERT_RESULT dbi_result_next_row(result); dbi_result_next_row(result); currow = dbi_result_get_currow(result); dbi_conn_error(conn, &errmsg); assert_equal_with_message(currow, 2, "Value: '%d' Error: %s", currow, errmsg); dbi_result_free(result); } Ensure test_dbi_result_get_numrows() { dbi_result result; unsigned long long numrows; result = dbi_conn_query(conn, "SELECT the_char from test_datatypes"); ASSERT_RESULT numrows = dbi_result_get_numrows(result); dbi_conn_error(conn, &errmsg); assert_equal_with_message(numrows, 5, "Value: '%d' Error: %s", numrows, errmsg); dbi_result_free(result); } Ensure test_dbi_result_get_numrows_affected() { dbi_result result; unsigned long long numrows; result = dbi_conn_query(conn, "UPDATE test_datatypes set the_char=-126 where the_char=-127 "); ASSERT_RESULT numrows = dbi_result_get_numrows_affected(result); dbi_conn_error(conn, &errmsg); assert_equal_with_message(numrows, 5, "Value: '%d' Error: %s", numrows, errmsg); dbi_result_free(result); } Ensure test_dummy() { dbi_result result; const char *errmsg; int numfields; char smt[1024]; int i; result = dbi_conn_query(conn, "CREATE TABLE test0 (the_char SMALLINT, the_long INTEGER)"); dbi_result_free(result); for(i = 0; i < 30; i++) { sprintf(smt, "INSERT INTO test0 VALUES (%d, %d)", i, i ); result = dbi_conn_query(conn, smt); dbi_result_free(result); } result = dbi_conn_query(conn, "SELECT the_long from test0"); assert_not_equal_with_message( result, NULL, "Value: '%p' Error %d: '%s'", result, dbi_conn_error(conn, &errmsg), errmsg); while (dbi_result_next_row(result)) { errmsg = NULL; long long the_long = 0; the_long = dbi_result_get_as_longlong(result, "the_long"); } dbi_result_free(result); result = dbi_conn_query(conn, "DROP TABLE test0"); dbi_result_free(result); } Ensure test_dbi_result_get_as_longlong() { dbi_result result; char *query_string; int numfields; query_string = assemble_query_string(cinfo.drivername, &numfields); result = dbi_conn_query(conn, query_string); ASSERT_RESULT free(query_string); while (dbi_result_next_row(result)) { const char *errmsg = NULL; long long the_char_as_ll = 0; long long the_uchar_as_ll = 0; long long the_short_as_ll = 0; long long the_ushort_as_ll = 0; long long the_long_as_ll = 0; long long the_ulong_as_ll = 0; long long the_longlong_as_ll = 0; long long the_ulonglong_as_ll = 0; long long the_float_as_ll = 0; long long the_double_as_ll = 0; long long the_string_as_ll = 0; long long the_numstring_as_ll = 0; long long the_empty_string_as_ll = 0; long long the_null_string_as_ll = 0; long long the_binary_as_ll = 0; long long the_date_as_ll = 0; long long the_time_as_ll = 0; long long the_datetime_as_ll = 0; the_char_as_ll = dbi_result_get_as_longlong(result, "the_char"); the_uchar_as_ll = dbi_result_get_as_longlong(result, "the_uchar"); the_short_as_ll = dbi_result_get_as_longlong(result, "the_short"); the_ushort_as_ll = dbi_result_get_as_longlong(result, "the_ushort"); the_long_as_ll = dbi_result_get_as_longlong(result, "the_long"); the_ulong_as_ll = dbi_result_get_as_longlong(result, "the_ulong"); if (tinfo.have_longlong) { the_longlong_as_ll = dbi_result_get_as_longlong(result, "the_longlong"); } if (tinfo.have_ulonglong) { the_ulonglong_as_ll = dbi_result_get_as_longlong(result, "the_ulonglong"); } the_float_as_ll = dbi_result_get_as_longlong(result, "the_float"); if(tinfo.have_double) { the_double_as_ll = dbi_result_get_as_longlong(result, "the_double"); } the_string_as_ll = dbi_result_get_as_longlong(result, "the_conn_quoted_string_copy"); the_numstring_as_ll = dbi_result_get_as_longlong(result, "the_numstring"); the_empty_string_as_ll = dbi_result_get_as_longlong(result, "the_empty_string"); the_null_string_as_ll = dbi_result_get_as_longlong(result, "the_null_string"); the_binary_as_ll = dbi_result_get_as_longlong(result, "the_binary_quoted_string"); if(tinfo.have_datetime) { the_datetime_as_ll = dbi_result_get_as_longlong(result, "the_datetime"); } the_date_as_ll = dbi_result_get_as_longlong(result, "the_date"); the_time_as_ll = dbi_result_get_as_longlong(result, "the_time"); assert_equal(the_char_as_ll, expect_as_longlong_from_name("the_char", cinfo.drivername)); assert_equal(the_uchar_as_ll, expect_as_longlong_from_name("the_uchar", cinfo.drivername)); assert_equal(the_short_as_ll, expect_as_longlong_from_name("the_short", cinfo.drivername)); assert_equal(the_ushort_as_ll, expect_as_longlong_from_name("the_ushort", cinfo.drivername)); assert_equal(the_long_as_ll, expect_as_longlong_from_name("the_long", cinfo.drivername)); assert_equal(the_ulong_as_ll, expect_as_longlong_from_name("the_ulong", cinfo.drivername)); assert_equal(the_longlong_as_ll, expect_as_longlong_from_name("the_longlong", cinfo.drivername)); assert_equal(the_ulonglong_as_ll, expect_as_longlong_from_name("the_ulonglong", cinfo.drivername)); assert_equal(the_float_as_ll, expect_as_longlong_from_name("the_float", cinfo.drivername)); assert_equal(the_double_as_ll, expect_as_longlong_from_name("the_double", cinfo.drivername)); assert_equal(the_string_as_ll, expect_as_longlong_from_name("the_conn_quoted_string_copy", cinfo.drivername)); assert_equal(the_numstring_as_ll, expect_as_longlong_from_name("the_numstring", cinfo.drivername)); assert_equal(the_empty_string_as_ll, expect_as_longlong_from_name("the_empty_string", cinfo.drivername)); assert_equal(the_null_string_as_ll, expect_as_longlong_from_name("the_null_string", cinfo.drivername)); assert_equal(the_datetime_as_ll, expect_as_longlong_from_name("the_datetime", cinfo.drivername)); assert_equal(the_date_as_ll, expect_as_longlong_from_name("the_date", cinfo.drivername)); assert_equal(the_time_as_ll, expect_as_longlong_from_name("the_time", cinfo.drivername)); } dbi_result_free(result); } Ensure test_dbi_result_get_as_string() { dbi_result result; char *query_string; int numfields; query_string = assemble_query_string(cinfo.drivername, &numfields); result = dbi_conn_query(conn, query_string); ASSERT_RESULT free(query_string); while (dbi_result_next_row(result)) { const char *errmsg = NULL; char* the_char_as_string = NULL; char* the_uchar_as_string = NULL; char* the_short_as_string = NULL; char* the_ushort_as_string = NULL; char* the_long_as_string = NULL; char* the_ulong_as_string = NULL; char* the_longlong_as_string = NULL; char* the_ulonglong_as_string = NULL; char* the_float_as_string = NULL; char* the_double_as_string = NULL; char* the_string_as_string = NULL; char* the_numstring_as_string = NULL; char* the_empty_string_as_string = NULL; char* the_null_string_as_string = NULL; char* the_binary_as_string = NULL; char* the_date_as_string = NULL; char* the_time_as_string = NULL; char* the_datetime_as_string = NULL; /* get data */ the_char_as_string = dbi_result_get_as_string_copy(result, "the_char"); the_uchar_as_string = dbi_result_get_as_string_copy(result, "the_uchar"); the_short_as_string = dbi_result_get_as_string_copy(result, "the_short"); the_ushort_as_string = dbi_result_get_as_string_copy(result, "the_ushort"); the_long_as_string = dbi_result_get_as_string_copy(result, "the_long"); the_ulong_as_string = dbi_result_get_as_string_copy(result, "the_ulong"); if (tinfo.have_longlong) { the_longlong_as_string = dbi_result_get_as_string_copy(result, "the_longlong"); } if (tinfo.have_ulonglong) { the_ulonglong_as_string = dbi_result_get_as_string_copy(result, "the_ulonglong"); } the_float_as_string = dbi_result_get_as_string_copy(result, "the_float"); if(tinfo.have_double) { the_double_as_string = dbi_result_get_as_string_copy(result, "the_double"); } the_string_as_string = dbi_result_get_as_string_copy(result, "the_conn_quoted_string_copy"); the_numstring_as_string = dbi_result_get_as_string_copy(result, "the_numstring"); the_empty_string_as_string = dbi_result_get_as_string_copy(result, "the_empty_string"); the_null_string_as_string = dbi_result_get_as_string_copy(result, "the_null_string"); the_binary_as_string = dbi_result_get_as_string_copy(result, "the_binary_quoted_string"); if(tinfo.have_datetime) { the_datetime_as_string = dbi_result_get_as_string_copy(result, "the_datetime"); } if(!strcmp(cinfo.drivername, "msql")) { the_date_as_string = dbi_result_get_as_string_copy(result, "the_date"); the_time_as_string = dbi_result_get_as_string_copy(result, "the_time"); } else { //not msql the_date_as_string = dbi_result_get_as_string_copy(result, "the_date"); the_time_as_string = dbi_result_get_as_string_copy(result, "the_time"); } /* do asserts */ assert_string_equal(the_char_as_string, expect_as_string_from_name("the_char", cinfo.drivername)); assert_string_equal(the_uchar_as_string, expect_as_string_from_name("the_uchar", cinfo.drivername)); assert_string_equal(the_short_as_string, expect_as_string_from_name("the_short", cinfo.drivername)); assert_string_equal(the_ushort_as_string, expect_as_string_from_name("the_ushort", cinfo.drivername)); assert_string_equal(the_long_as_string, expect_as_string_from_name("the_long", cinfo.drivername)); assert_string_equal(the_ulong_as_string, expect_as_string_from_name("the_ulong", cinfo.drivername)); assert_string_equal(the_longlong_as_string, expect_as_string_from_name("the_longlong", cinfo.drivername)); assert_string_equal(the_ulonglong_as_string, expect_as_string_from_name("the_ulonglong", cinfo.drivername)); assert_string_equal(the_float_as_string, expect_as_string_from_name("the_float", cinfo.drivername)); assert_string_equal(the_string_as_string, expect_as_string_from_name("the_conn_quoted_string_copy", cinfo.drivername)); assert_string_equal(the_numstring_as_string, expect_as_string_from_name("the_numstring", cinfo.drivername)); assert_string_equal(the_empty_string_as_string, expect_as_string_from_name("the_empty_string", cinfo.drivername)); assert_string_equal(the_null_string_as_string, expect_as_string_from_name("the_null_string", cinfo.drivername)); assert_string_equal(the_datetime_as_string, expect_as_string_from_name("the_datetime", cinfo.drivername)); assert_string_equal(the_date_as_string, expect_as_string_from_name("the_date", cinfo.drivername)); assert_string_equal(the_time_as_string, expect_as_string_from_name("the_time", cinfo.drivername)); if (the_char_as_string) { free(the_char_as_string); } if (the_uchar_as_string) { free(the_uchar_as_string); } if (the_short_as_string) { free(the_short_as_string); } if (the_ushort_as_string) { free(the_ushort_as_string); } if (the_long_as_string) { free(the_long_as_string); } if (the_ulong_as_string) { free(the_ulong_as_string); } if (the_longlong_as_string) { free(the_longlong_as_string); } if (the_ulonglong_as_string) { free(the_ulonglong_as_string); } if (the_float_as_string) { free(the_float_as_string); } if (the_double_as_string) { free(the_double_as_string); } if (the_string_as_string) { free(the_string_as_string); } if (the_numstring_as_string) { free(the_numstring_as_string); } if (the_empty_string_as_string) { free(the_empty_string_as_string); } if (the_null_string_as_string) { free(the_null_string_as_string); } if (the_binary_as_string) { free(the_binary_as_string); } if (the_date_as_string) { free(the_date_as_string); } if (the_time_as_string) { free(the_time_as_string); } if (the_datetime_as_string) { free(the_datetime_as_string); } } dbi_result_free(result); } Ensure test_dbi_result_get_char_idx() { dbi_result result; unsigned short type_expected = 0; type_expected = field_attrib_from_index(0 /* the_char */, cinfo.drivername); if (type_expected == 2) { /* skip test for db engines which do not support a true one-byte char type */ result = dbi_conn_query(conn, "SELECT the_char from test_datatypes"); ASSERT_RESULT while (dbi_result_next_row(result)) { errmsg = NULL; signed char the_char = 0; the_char = dbi_result_get_char_idx(result, 1); assert_equal(the_char, expect_longlong_from_name("the_char", cinfo.drivername)); } dbi_result_free(result); } } Ensure test_dbi_result_get_uchar_idx() { dbi_result result; unsigned short type_expected = 0; type_expected = field_attrib_from_index(0 /* the_char */, cinfo.drivername); if (type_expected == 2) { /* skip test for db engines which do not support a true one-byte char type */ result = dbi_conn_query(conn, "SELECT the_uchar from test_datatypes"); ASSERT_RESULT while (dbi_result_next_row(result)) { errmsg = NULL; unsigned char the_uchar = 0; the_uchar = dbi_result_get_uchar_idx(result, 1); assert_equal(the_uchar, expect_ulonglong_from_name("the_uchar", cinfo.drivername)); } dbi_result_free(result); } } Ensure test_dbi_result_get_short_idx() { dbi_result result; result = dbi_conn_query(conn, "SELECT the_short from test_datatypes"); ASSERT_RESULT while (dbi_result_next_row(result)) { errmsg = NULL; short the_short = 0; the_short = dbi_result_get_short_idx(result, 1); assert_equal(the_short, expect_longlong_from_name("the_short", cinfo.drivername)); } dbi_result_free(result); } Ensure test_dbi_result_get_ushort_idx() { dbi_result result; result = dbi_conn_query(conn, "SELECT the_ushort from test_datatypes"); ASSERT_RESULT while (dbi_result_next_row(result)) { errmsg = NULL; unsigned short the_ushort = 0; the_ushort = dbi_result_get_ushort_idx(result, 1); assert_equal(the_ushort, expect_ulonglong_from_name("the_ushort", cinfo.drivername)); } dbi_result_free(result); } Ensure test_dbi_result_get_int_idx() { dbi_result result; result = dbi_conn_query(conn, "SELECT the_long from test_datatypes"); ASSERT_RESULT while (dbi_result_next_row(result)) { errmsg = NULL; int the_int = 0; the_int = dbi_result_get_int_idx(result, 1); assert_equal(the_int, expect_longlong_from_name("the_long", cinfo.drivername)); } dbi_result_free(result); } Ensure test_dbi_result_get_uint_idx() { dbi_result result; result = dbi_conn_query(conn, "SELECT the_ulong from test_datatypes"); ASSERT_RESULT while (dbi_result_next_row(result)) { errmsg = NULL; unsigned int the_uint = 0; the_uint = dbi_result_get_uint_idx(result, 1); assert_equal(the_uint, expect_ulonglong_from_name("the_ulong", cinfo.drivername)); } dbi_result_free(result); } Ensure test_dbi_result_get_longlong_idx() { dbi_result result; result = dbi_conn_query(conn, "SELECT the_longlong from test_datatypes"); ASSERT_RESULT while (dbi_result_next_row(result)) { errmsg = NULL; long long the_longlong = 0; the_longlong = dbi_result_get_longlong_idx(result, 1); assert_equal(the_longlong, expect_longlong_from_name("the_longlong", cinfo.drivername)); } dbi_result_free(result); } Ensure test_dbi_result_get_ulonglong_idx() { dbi_result result; result = dbi_conn_query(conn, "SELECT the_ulonglong from test_datatypes"); ASSERT_RESULT while (dbi_result_next_row(result)) { errmsg = NULL; unsigned long long the_ulonglong = 0; the_ulonglong = dbi_result_get_ulonglong_idx(result, 1); assert_equal(the_ulonglong, expect_ulonglong_from_name("the_ulonglong", cinfo.drivername)); } dbi_result_free(result); } Ensure test_dbi_result_get_float_idx() { dbi_result result; result = dbi_conn_query(conn, "SELECT the_float from test_datatypes"); ASSERT_RESULT while (dbi_result_next_row(result)) { errmsg = NULL; float the_float = 0; the_float = dbi_result_get_float_idx(result, 1); assert_double_equal(the_float, expect_double_from_name("the_float", cinfo.drivername)); } dbi_result_free(result); } Ensure test_dbi_result_get_double_idx() { dbi_result result; result = dbi_conn_query(conn, "SELECT the_double from test_datatypes"); ASSERT_RESULT while (dbi_result_next_row(result)) { errmsg = NULL; double the_double = 0; the_double = dbi_result_get_double_idx(result, 1); assert_double_equal(the_double, expect_double_from_name("the_double", cinfo.drivername)); } dbi_result_free(result); } Ensure test_dbi_result_get_string_idx() { dbi_result result; result = dbi_conn_query(conn, "SELECT the_null_string, the_conn_escaped_string, the_empty_string," " the_conn_quoted_string from test_datatypes"); ASSERT_RESULT while (dbi_result_next_row(result)) { errmsg = NULL; const char* the_quoted_string; const char* the_escaped_string; const char* the_null_string; const char* the_empty_string; the_quoted_string = dbi_result_get_string_idx(result, 4); assert_string_equal(the_quoted_string, expect_as_string_from_name("the_conn_quoted_string", cinfo.drivername)); the_escaped_string = dbi_result_get_string_idx(result, 2); assert_string_equal(the_escaped_string, expect_as_string_from_name("the_conn_escaped_string", cinfo.drivername)); the_null_string = dbi_result_get_string_idx(result, 1); assert_string_equal(the_null_string, expect_string_from_name("the_null_string", cinfo.drivername)); the_empty_string = dbi_result_get_string_idx(result, 3); assert_string_equal(the_empty_string, expect_as_string_from_name("the_empty_string", cinfo.drivername)); } dbi_result_free(result); } Ensure test_dbi_result_get_string_copy_idx() { dbi_result result; result = dbi_conn_query(conn, "SELECT the_conn_quoted_string, the_conn_escaped_string_copy" " from test_datatypes"); ASSERT_RESULT while (dbi_result_next_row(result)) { errmsg = NULL; const char* the_quoted_string_copy; const char* the_escaped_string_copy; the_quoted_string_copy = dbi_result_get_string_copy_idx(result, 1); assert_string_equal(the_quoted_string_copy, expect_as_string_from_name("the_conn_quoted_string", cinfo.drivername)); the_escaped_string_copy = dbi_result_get_string_copy_idx(result, 2); assert_string_equal(the_escaped_string_copy, expect_as_string_from_name("the_conn_escaped_string_copy", cinfo.drivername)); } dbi_result_free(result); } Ensure test_dbi_result_get_binary_idx() { dbi_result result; result = dbi_conn_query(conn, "SELECT the_binary_quoted_string from test_datatypes"); ASSERT_RESULT while (dbi_result_next_row(result)) { errmsg = NULL; const unsigned char* the_binary; the_binary = dbi_result_get_binary_idx(result, 1); assert_equal(65, the_binary[0]); assert_equal(66, the_binary[1]); assert_equal(0, the_binary[2]); assert_equal(67, the_binary[3]); assert_equal(39, the_binary[4]); assert_equal(68, the_binary[5]); } dbi_result_free(result); } Ensure test_dbi_result_get_binary_copy_idx() { dbi_result result; result = dbi_conn_query(conn, "SELECT the_binary_escaped_string from test_datatypes"); ASSERT_RESULT while (dbi_result_next_row(result)) { errmsg = NULL; unsigned char* the_binary_copy = NULL; the_binary_copy = dbi_result_get_binary_copy_idx(result, 1); assert_equal(65, the_binary_copy[0]); assert_equal(66, the_binary_copy[1]); assert_equal(0, the_binary_copy[2]); assert_equal(67, the_binary_copy[3]); assert_equal(39, the_binary_copy[4]); assert_equal(68, the_binary_copy[5]); } dbi_result_free(result); } Ensure test_dbi_result_get_datetime_idx() { dbi_result result; result = dbi_conn_query(conn, "SELECT the_datetime, the_date, the_time from test_datatypes"); ASSERT_RESULT while (dbi_result_next_row(result)) { errmsg = NULL; time_t the_datetime = 0; time_t the_date = 0; time_t the_time = 0; the_datetime = dbi_result_get_datetime_idx(result, 1); assert_equal( the_datetime, expect_longlong_from_name("the_datetime", cinfo.drivername)); the_date = dbi_result_get_datetime_idx(result, 2); assert_equal(the_date, expect_longlong_from_name("the_date", cinfo.drivername)); the_time = dbi_result_get_datetime_idx(result, 3); assert_equal(the_time, expect_longlong_from_name("the_time", cinfo.drivername)); } dbi_result_free(result); } Ensure test_dbi_result_get_datetime_tz_idx() { dbi_result result; result = dbi_conn_query(conn, "SELECT the_datetime_tz from test_datatypes"); ASSERT_RESULT while (dbi_result_next_row(result)) { errmsg = NULL; time_t the_datetime_tz = 0; the_datetime_tz = dbi_result_get_datetime_idx(result, 1); assert_equal( the_datetime_tz, expect_longlong_from_name("the_datetime_tz", cinfo.drivername)); } dbi_result_free(result); } Ensure test_dbi_result_get_datetime_time_tz_idx() { dbi_result result; result = dbi_conn_query(conn, "SELECT the_datetime_tz, the_time_tz from test_datatypes"); ASSERT_RESULT while (dbi_result_next_row(result)) { errmsg = NULL; time_t the_datetime_tz = 0; time_t the_time_dt_tz = 0; the_datetime_tz = dbi_result_get_datetime_idx(result, 1); the_time_dt_tz = dbi_result_get_datetime_idx(result, 2); assert_equal( the_datetime_tz, expect_longlong_from_name("the_datetime_tz", cinfo.drivername)); assert_equal( the_time_dt_tz, expect_longlong_from_name("the_time_tz", cinfo.drivername)); } dbi_result_free(result); } Ensure test_dbi_result_get_char() { dbi_result result; result = dbi_conn_query(conn, "SELECT the_char from test_datatypes"); ASSERT_RESULT while (dbi_result_next_row(result)) { errmsg = NULL; signed char the_char = 0; unsigned short type_expected = 0; type_expected = field_attrib_from_index(0 /* the_char */, cinfo.drivername); if (type_expected == 2) { the_char = dbi_result_get_char(result, "the_char"); } else { /* does not support one-byte char type */ the_char = (signed char)dbi_result_get_short(result, "the_char"); } assert_equal(the_char, expect_longlong_from_name("the_char", cinfo.drivername)); } dbi_result_free(result); } Ensure test_dbi_result_get_uchar() { dbi_result result; result = dbi_conn_query(conn, "SELECT the_uchar from test_datatypes"); ASSERT_RESULT while (dbi_result_next_row(result)) { errmsg = NULL; unsigned char the_uchar = 0; unsigned short type_expected = 0; type_expected = field_attrib_from_index(1 /* the_uchar */, cinfo.drivername); if (type_expected == 2) { the_uchar = dbi_result_get_uchar(result, "the_uchar"); } else { /* does not support one-byte uchar type */ the_uchar = dbi_result_get_ushort(result, "the_uchar"); } assert_equal(the_uchar, expect_ulonglong_from_name("the_uchar", cinfo.drivername)); } dbi_result_free(result); } Ensure test_dbi_result_get_short() { dbi_result result; result = dbi_conn_query(conn, "SELECT the_short from test_datatypes"); ASSERT_RESULT while (dbi_result_next_row(result)) { errmsg = NULL; short the_short = 0; the_short = dbi_result_get_short(result, "the_short"); assert_equal(the_short, expect_longlong_from_name("the_short", cinfo.drivername)); } dbi_result_free(result); } Ensure test_dbi_result_get_ushort() { const char *errmsg; int errnum; dbi_result result; QUERY_ASSERT_RESULT(result, "SELECT the_ushort from test_datatypes"); while (dbi_result_next_row(result)) { errmsg = NULL; unsigned short the_ushort = 0; the_ushort = dbi_result_get_ushort(result, "the_ushort"); assert_equal(the_ushort, expect_longlong_from_name("the_ushort", cinfo.drivername)); } dbi_result_free(result); } Ensure test_dbi_result_get_int() { dbi_result result; const char *errmsg; int errnum; QUERY_ASSERT_RESULT(result, "SELECT the_long from test_datatypes"); while (dbi_result_next_row(result)) { errmsg = NULL; int the_int = 0; the_int = dbi_result_get_int(result, "the_long"); assert_equal(the_int, expect_longlong_from_name("the_long", cinfo.drivername)); } dbi_result_free(result); } Ensure test_dbi_result_get_uint() { dbi_result result; result = dbi_conn_query(conn, "SELECT the_ulong from test_datatypes"); ASSERT_RESULT while (dbi_result_next_row(result)) { errmsg = NULL; unsigned int the_uint = 0; the_uint = dbi_result_get_uint(result, "the_ulong"); assert_equal(the_uint, expect_ulonglong_from_name("the_ulong", cinfo.drivername)); } dbi_result_free(result); } Ensure test_dbi_result_get_longlong() { dbi_result result; result = dbi_conn_query(conn, "SELECT the_longlong from test_datatypes"); ASSERT_RESULT while (dbi_result_next_row(result)) { errmsg = NULL; long long the_longlong = 0; the_longlong = dbi_result_get_longlong(result, "the_longlong"); assert_equal(the_longlong, expect_longlong_from_name("the_longlong", cinfo.drivername)); } dbi_result_free(result); } Ensure test_dbi_result_get_ulonglong() { dbi_result result; result = dbi_conn_query(conn, "SELECT the_ulonglong from test_datatypes"); ASSERT_RESULT while (dbi_result_next_row(result)) { errmsg = NULL; unsigned long long the_ulonglong = 0; the_ulonglong = dbi_result_get_ulonglong(result, "the_ulonglong"); assert_equal(the_ulonglong, expect_ulonglong_from_name("the_ulonglong", cinfo.drivername)); } dbi_result_free(result); } Ensure test_dbi_result_get_float() { dbi_result result; result = dbi_conn_query(conn, "SELECT the_float from test_datatypes"); ASSERT_RESULT while (dbi_result_next_row(result)) { errmsg = NULL; float the_float = 0; the_float = dbi_result_get_float(result, "the_float"); assert_equal(the_float, expect_double_from_name("the_float", cinfo.drivername)); } dbi_result_free(result); } Ensure test_dbi_result_get_double() { dbi_result result; result = dbi_conn_query(conn, "SELECT the_double from test_datatypes"); ASSERT_RESULT while (dbi_result_next_row(result)) { errmsg = NULL; double the_double = 0; the_double = dbi_result_get_double(result, "the_double"); assert_equal(the_double, expect_double_from_name("the_double", cinfo.drivername)); } dbi_result_free(result); } Ensure test_dbi_result_get_string() { dbi_result result; result = dbi_conn_query(conn, "SELECT the_conn_quoted_string, the_conn_escaped_string," "the_null_string, the_empty_string from test_datatypes"); ASSERT_RESULT while (dbi_result_next_row(result)) { errmsg = NULL; const char* the_quoted_string; const char* the_escaped_string; const char* the_null_string; const char* the_empty_string; the_quoted_string = dbi_result_get_string(result, "the_conn_quoted_string"); assert_string_equal(the_quoted_string, expect_as_string_from_name("the_conn_quoted_string", cinfo.drivername)); the_escaped_string = dbi_result_get_string(result, "the_conn_escaped_string"); assert_string_equal(the_escaped_string, expect_as_string_from_name("the_conn_escaped_string", cinfo.drivername)); the_null_string = dbi_result_get_string(result, "the_null_string"); assert_string_equal(the_null_string, expect_string_from_name("the_null_string", cinfo.drivername)); the_empty_string = dbi_result_get_string(result, "the_empty_string"); assert_string_equal(the_empty_string, expect_as_string_from_name("the_empty_string", cinfo.drivername)); } dbi_result_free(result); } Ensure test_dbi_result_get_string_copy() { dbi_result result; result = dbi_conn_query(conn, "SELECT the_conn_quoted_string_copy, the_conn_escaped_string_copy" " from test_datatypes"); ASSERT_RESULT while (dbi_result_next_row(result)) { errmsg = NULL; const char* the_quoted_string_copy; const char* the_escaped_string_copy; the_quoted_string_copy = dbi_result_get_string_copy(result, "the_conn_quoted_string_copy"); assert_string_equal(the_quoted_string_copy, expect_as_string_from_name("the_conn_quoted_string_copy", cinfo.drivername)); the_escaped_string_copy = dbi_result_get_string_copy(result, "the_conn_escaped_string_copy"); assert_string_equal(the_escaped_string_copy, expect_as_string_from_name("the_conn_escaped_string_copy", cinfo.drivername)); } dbi_result_free(result); } Ensure test_dbi_result_get_binary() { dbi_result result; result = dbi_conn_query(conn, "SELECT the_binary_quoted_string from test_datatypes"); ASSERT_RESULT while (dbi_result_next_row(result)) { errmsg = NULL; const unsigned char* the_binary; the_binary = dbi_result_get_binary(result, "the_binary_quoted_string"); assert_equal(65, the_binary[0]); assert_equal(66, the_binary[1]); assert_equal(0, the_binary[2]); assert_equal(67, the_binary[3]); assert_equal(39, the_binary[4]); assert_equal(68, the_binary[5]); } dbi_result_free(result); } Ensure test_dbi_result_get_binary_copy() { dbi_result result; result = dbi_conn_query(conn, "SELECT the_binary_escaped_string from test_datatypes"); ASSERT_RESULT while (dbi_result_next_row(result)) { errmsg = NULL; unsigned char* the_binary_copy = NULL; the_binary_copy = dbi_result_get_binary_copy(result, "the_binary_escaped_string"); assert_equal(65, the_binary_copy[0]); assert_equal(66, the_binary_copy[1]); assert_equal(0, the_binary_copy[2]); assert_equal(67, the_binary_copy[3]); assert_equal(39, the_binary_copy[4]); assert_equal(68, the_binary_copy[5]); } dbi_result_free(result); } Ensure test_dbi_result_get_datetime() { dbi_result result; result = dbi_conn_query(conn, "SELECT the_datetime, the_date, the_time from test_datatypes"); ASSERT_RESULT while (dbi_result_next_row(result)) { errmsg = NULL; time_t the_datetime = 0; time_t the_date = 0; time_t the_time = 0; the_datetime = dbi_result_get_datetime(result, "the_datetime"); assert_equal( the_datetime, expect_longlong_from_name("the_datetime", cinfo.drivername)); if(!strcmp(cinfo.drivername, "msql")) { the_date = dbi_result_get_string(result, "the_date"); assert_string_equal(the_date, "11-jul-1977"); the_time = dbi_result_get_string(result, "the_time"); assert_string_equal(the_time, "23:59:59"); } else { the_date = dbi_result_get_datetime(result, "the_date"); assert_equal(the_date, expect_longlong_from_name("the_date", cinfo.drivername)); the_time = dbi_result_get_datetime(result, "the_time"); assert_equal(the_time, expect_longlong_from_name("the_time", cinfo.drivername)); } } dbi_result_free(result); } Ensure test_dbi_result_get_datetime_tz() { dbi_result result; result = dbi_conn_query(conn, "SELECT the_datetime_tz from test_datatypes"); ASSERT_RESULT while (dbi_result_next_row(result)) { errmsg = NULL; time_t the_datetime_tz = 0; the_datetime_tz = dbi_result_get_datetime(result, "the_datetime_tz"); assert_equal( the_datetime_tz, expect_longlong_from_name("the_datetime_tz", cinfo.drivername)); } dbi_result_free(result); } Ensure test_dbi_result_get_datetime_time_tz() { dbi_result result; result = dbi_conn_query(conn, "SELECT the_datetime_tz, the_time_tz from test_datatypes"); ASSERT_RESULT while (dbi_result_next_row(result)) { errmsg = NULL; time_t the_datetime_tz = 0; time_t the_time_dt_tz = 0; the_datetime_tz = dbi_result_get_datetime(result, "the_datetime_tz"); the_time_dt_tz = dbi_result_get_datetime(result, "the_time_tz"); assert_equal( the_datetime_tz, expect_longlong_from_name("the_datetime_tz", cinfo.drivername)); assert_equal( the_time_dt_tz, expect_longlong_from_name("the_time_tz", cinfo.drivername)); } dbi_result_free(result); } Ensure test_dbi_result_get_field_type_mismatch() { dbi_result result; result = dbi_conn_query(conn, "SELECT the_long from test_datatypes"); ASSERT_RESULT while (dbi_result_next_row(result)) { errmsg = NULL; dbi_error_flag errflag; dbi_result_get_string(result, "the_long"); errflag = dbi_conn_error(dbi_result_get_conn(result), &errmsg); assert_equal( errflag, DBI_ERROR_BADTYPE); } dbi_result_free(result); } Ensure test_dbi_result_get_field_bad_name() { dbi_result result; result = dbi_conn_query(conn, "SELECT the_nonexistent from test_datatypes"); ASSERT_RESULT while (dbi_result_next_row(result)) { errmsg = NULL; dbi_error_flag errflag; dbi_result_get_string(result, "the_nonexistent"); errflag = dbi_conn_error(dbi_result_get_conn(result), &errmsg); assert_equal( errflag, DBI_ERROR_BADNAME); } dbi_result_free(result); } Ensure test_dbi_result_get_fields() { dbi_result result; char *query_string = NULL; int numfields; if ((query_string = assemble_query_string(cinfo.drivername, &numfields)) == NULL) { /* todo: make noise */ return; } result = dbi_conn_query(conn, query_string); ASSERT_RESULT while (dbi_result_next_row(result)) { errmsg = NULL; unsigned int num; signed char the_char = 0; unsigned char the_uchar = 0; signed short the_short = 0; unsigned short the_ushort = 0; signed int the_long = 0; unsigned int the_ulong = 0; signed long long the_longlong = 0; unsigned long long the_ulonglong = 0; float the_float = 0; double the_double = 0; const char* the_conn_quoted_string = NULL; unsigned short type_expected = 0; type_expected = field_attrib_from_index(0 /* the_char */, cinfo.drivername); num = dbi_result_get_fields(result, "the_char.%c the_uchar.%uc " "the_short.%h the_ushort.%uh " "the_long.%l the_ulong.%ul " "the_longlong.%L the_ulonglong.%uL " "the_float.%f the_double.%d " "the_conn_quoted_string.%s", &the_char, &the_uchar, &the_short, &the_ushort, &the_long, &the_ulong, &the_longlong, &the_ulonglong, &the_float, &the_double, &the_conn_quoted_string); if (type_expected == 2) { /* skip test for db engines which do not support a true one-byte char type */ assert_equal(the_char, expect_longlong_from_name("the_char", cinfo.drivername)); assert_equal(the_uchar, expect_ulonglong_from_name("the_uchar", cinfo.drivername)); } assert_equal(the_short, expect_longlong_from_name("the_short", cinfo.drivername)); assert_equal(the_ushort, expect_ulonglong_from_name("the_ushort", cinfo.drivername)); assert_equal(the_long, expect_longlong_from_name("the_long", cinfo.drivername)); assert_equal(the_ulong, expect_ulonglong_from_name("the_ulong", cinfo.drivername)); assert_equal(the_longlong, expect_longlong_from_name("the_longlong", cinfo.drivername)); assert_equal(the_ulonglong, expect_ulonglong_from_name("the_ulonglong", cinfo.drivername)); assert_double_equal(the_float, expect_double_from_name("the_float", cinfo.drivername)); assert_double_equal(the_double, expect_double_from_name("the_double", cinfo.drivername)); assert_string_equal(the_conn_quoted_string, expect_string_from_name("the_conn_quoted_string", cinfo.drivername)); } dbi_result_free(result); } Ensure test_dbi_result_bind_char() { dbi_result result; signed char the_char; int bind; unsigned short type_expected = 0; type_expected = field_attrib_from_index(0 /* the_char */, cinfo.drivername); if (type_expected == 2) { /* skip test for db engines which do not support a true one-byte char type */ result = dbi_conn_query(conn, "SELECT the_char from test_datatypes"); ASSERT_RESULT bind = dbi_result_bind_char(result, "the_char", &the_char); assert_equal(bind, 0); while (dbi_result_next_row(result)) { errmsg = NULL; assert_equal(the_char, expect_longlong_from_name("the_char", cinfo.drivername)); } dbi_result_free(result); } } Ensure test_dbi_result_bind_uchar() { dbi_result result; unsigned char the_uchar; int bind; unsigned short type_expected = 0; type_expected = field_attrib_from_index(0 /* the_char */, cinfo.drivername); if (type_expected == 2) { /* skip test for db engines which do not support a true one-byte char type */ result = dbi_conn_query(conn, "SELECT the_uchar from test_datatypes"); ASSERT_RESULT bind = dbi_result_bind_uchar(result, "the_uchar", &the_uchar); assert_equal(bind, 0); while (dbi_result_next_row(result)) { errmsg = NULL; assert_equal(the_uchar, expect_ulonglong_from_name("the_uchar", cinfo.drivername)); } dbi_result_free(result); } } Ensure test_dbi_result_bind_short() { dbi_result result; short the_short; int bind; result = dbi_conn_query(conn, "SELECT the_short from test_datatypes"); ASSERT_RESULT bind = dbi_result_bind_short(result, "the_short", &the_short); assert_equal(bind, 0); while (dbi_result_next_row(result)) { errmsg = NULL; assert_equal(the_short, expect_longlong_from_name("the_short", cinfo.drivername)); } dbi_result_free(result); } Ensure test_dbi_result_bind_ushort() { dbi_result result; unsigned short the_ushort; int bind; result = dbi_conn_query(conn, "SELECT the_ushort from test_datatypes"); ASSERT_RESULT bind = dbi_result_bind_ushort(result, "the_ushort", &the_ushort); assert_equal(bind, 0); while (dbi_result_next_row(result)) { errmsg = NULL; assert_equal(the_ushort, expect_ulonglong_from_name("the_ushort", cinfo.drivername)); } dbi_result_free(result); } Ensure test_dbi_result_bind_int() { dbi_result result; int the_int; int bind; result = dbi_conn_query(conn, "SELECT the_long from test_datatypes"); ASSERT_RESULT bind = dbi_result_bind_int(result, "the_long", &the_int); assert_equal(bind, 0); while (dbi_result_next_row(result)) { errmsg = NULL; assert_equal(the_int, expect_longlong_from_name("the_long", cinfo.drivername)); } dbi_result_free(result); } Ensure test_dbi_result_bind_uint() { dbi_result result; unsigned int the_uint; int bind; result = dbi_conn_query(conn, "SELECT the_ulong from test_datatypes"); ASSERT_RESULT bind = dbi_result_bind_uint(result, "the_ulong", &the_uint); assert_equal(bind, 0); while (dbi_result_next_row(result)) { errmsg = NULL; assert_equal(the_uint, expect_ulonglong_from_name("the_ulong", cinfo.drivername)); } dbi_result_free(result); } Ensure test_dbi_result_bind_longlong() { dbi_result result; long long the_longlong; int bind; result = dbi_conn_query(conn, "SELECT the_longlong from test_datatypes"); ASSERT_RESULT bind = dbi_result_bind_longlong(result, "the_longlong", &the_longlong); assert_equal(bind, 0); while (dbi_result_next_row(result)) { errmsg = NULL; assert_equal(the_longlong, expect_longlong_from_name("the_longlong", cinfo.drivername)); } dbi_result_free(result); } Ensure test_dbi_result_bind_ulonglong() { dbi_result result; unsigned long long the_ulonglong; int bind; result = dbi_conn_query(conn, "SELECT the_ulonglong from test_datatypes"); ASSERT_RESULT bind = dbi_result_bind_ulonglong(result, "the_ulonglong", &the_ulonglong); assert_equal(bind, 0); while (dbi_result_next_row(result)) { errmsg = NULL; assert_equal(the_ulonglong, expect_ulonglong_from_name("the_ulonglong", cinfo.drivername)); } dbi_result_free(result); } Ensure test_dbi_result_bind_float() { dbi_result result; float the_float; int bind; result = dbi_conn_query(conn, "SELECT the_float from test_datatypes"); ASSERT_RESULT bind = dbi_result_bind_float(result, "the_float", &the_float); assert_equal(bind, 0); while (dbi_result_next_row(result)) { errmsg = NULL; assert_double_equal(the_float, expect_double_from_name("the_float", cinfo.drivername)); } dbi_result_free(result); } Ensure test_dbi_result_bind_double() { dbi_result result; double the_double; int bind; result = dbi_conn_query(conn, "SELECT the_double from test_datatypes"); ASSERT_RESULT bind = dbi_result_bind_double(result, "the_double", &the_double); assert_equal(bind, 0); while (dbi_result_next_row(result)) { errmsg = NULL; assert_double_equal(the_double, expect_double_from_name("the_double", cinfo.drivername)); } dbi_result_free(result); } Ensure test_dbi_result_bind_string() { dbi_result result; const char* the_quoted_string; const char* the_null_string; const char* the_escaped_string; const char* the_empty_string; int bind; result = dbi_conn_query(conn, "SELECT the_null_string, the_conn_escaped_string, the_empty_string," " the_conn_quoted_string from test_datatypes"); ASSERT_RESULT bind = dbi_result_bind_string(result, "the_conn_quoted_string", &the_quoted_string); assert_equal(bind, 0); bind = dbi_result_bind_string(result, "the_null_string", &the_null_string); assert_equal(bind, 0); bind = dbi_result_bind_string(result, "the_conn_escaped_string", &the_escaped_string); assert_equal(bind, 0); bind = dbi_result_bind_string(result, "the_empty_string", &the_empty_string); assert_equal(bind, 0); while (dbi_result_next_row(result)) { errmsg = NULL; assert_string_equal(the_quoted_string, expect_string_from_name("the_conn_quoted_string", cinfo.drivername)); assert_string_equal(the_null_string, expect_string_from_name("the_null_string", cinfo.drivername)); assert_string_equal(the_escaped_string, expect_string_from_name("the_conn_escaped_string", cinfo.drivername)); assert_string_equal(the_empty_string, expect_string_from_name("the_empty_string", cinfo.drivername)); } dbi_result_free(result); } Ensure test_dbi_result_bind_string_copy() { dbi_result result; char* the_quoted_string_copy; char* the_escaped_string_copy; int bind; result = dbi_conn_query(conn, "SELECT the_conn_quoted_string_copy, the_conn_escaped_string_copy" " from test_datatypes"); ASSERT_RESULT bind = dbi_result_bind_string_copy(result, "the_conn_quoted_string_copy", &the_quoted_string_copy); assert_equal(bind, 0); bind = dbi_result_bind_string_copy(result, "the_conn_escaped_string_copy", &the_escaped_string_copy); assert_equal(bind, 0); while (dbi_result_next_row(result)) { errmsg = NULL; assert_string_equal(the_quoted_string_copy, expect_string_from_name("the_conn_quoted_string_copy", cinfo.drivername)); assert_string_equal(the_escaped_string_copy, expect_string_from_name("the_conn_escaped_string_copy", cinfo.drivername)); } dbi_result_free(result); } Ensure test_dbi_result_bind_binary() { dbi_result result; const unsigned char* the_quoted_binary; int bind; result = dbi_conn_query(conn, "SELECT the_binary_quoted_string from test_datatypes"); ASSERT_RESULT bind = dbi_result_bind_binary(result, "the_binary_quoted_string", &the_quoted_binary); assert_equal(bind, 0); while (dbi_result_next_row(result)) { errmsg = NULL; assert_equal(65, the_quoted_binary[0]); assert_equal(66, the_quoted_binary[1]); assert_equal(0, the_quoted_binary[2]); assert_equal(67, the_quoted_binary[3]); assert_equal(39, the_quoted_binary[4]); assert_equal(68, the_quoted_binary[5]); } dbi_result_free(result); } Ensure test_dbi_result_bind_binary_copy() { dbi_result result; unsigned char* the_escaped_binary_copy; int bind; result = dbi_conn_query(conn, "SELECT the_binary_escaped_string from test_datatypes"); ASSERT_RESULT bind = dbi_result_bind_binary_copy(result, "the_binary_escaped_string", &the_escaped_binary_copy); assert_equal(bind, 0); while (dbi_result_next_row(result)) { errmsg = NULL; assert_equal(65, the_escaped_binary_copy[0]); assert_equal(66, the_escaped_binary_copy[1]); assert_equal(0, the_escaped_binary_copy[2]); assert_equal(67, the_escaped_binary_copy[3]); assert_equal(39, the_escaped_binary_copy[4]); assert_equal(68, the_escaped_binary_copy[5]); } dbi_result_free(result); } Ensure test_dbi_result_bind_datetime() { dbi_result result; time_t the_datetime = 0; time_t the_date_dt = 0; time_t the_time_dt = 0; const char *the_date; const char *the_time; int bind; result = dbi_conn_query(conn, "SELECT the_datetime, the_date, the_time from test_datatypes"); ASSERT_RESULT bind = dbi_result_bind_datetime(result, "the_datetime", &the_datetime); assert_equal(bind, 0); bind = dbi_result_bind_datetime(result, "the_date", &the_date_dt); assert_equal(bind, 0); bind = dbi_result_bind_datetime(result, "the_time", &the_time_dt); assert_equal(bind, 0); while (dbi_result_next_row(result)) { errmsg = NULL; assert_equal(the_datetime, expect_longlong_from_name("the_datetime", cinfo.drivername)); if(!strcmp(cinfo.drivername, "msql")) { assert_string_equal(the_date, "11-jul-1977"); assert_string_equal(the_time, "23:59:59"); } else { assert_equal(the_date_dt, expect_longlong_from_name("the_date", cinfo.drivername)); assert_equal(the_time_dt, expect_longlong_from_name("the_time", cinfo.drivername)); } } dbi_result_free(result); } Ensure test_dbi_result_bind_datetime_tz() { dbi_result result; time_t the_datetime_tz = 0; int bind; result = dbi_conn_query(conn, "SELECT the_datetime_tz from test_datatypes"); ASSERT_RESULT bind = dbi_result_bind_datetime(result, "the_datetime_tz", &the_datetime_tz); assert_equal(bind, 0); while (dbi_result_next_row(result)) { errmsg = NULL; assert_equal(the_datetime_tz, expect_longlong_from_name("the_datetime_tz", cinfo.drivername)); } dbi_result_free(result); } Ensure test_dbi_result_bind_datetime_time_tz() { dbi_result result; time_t the_datetime_tz = 0; time_t the_time_dt_tz = 0; int bind; result = dbi_conn_query(conn, "SELECT the_datetime_tz, the_time_tz from test_datatypes"); ASSERT_RESULT bind = dbi_result_bind_datetime(result, "the_datetime_tz", &the_datetime_tz); assert_equal(bind, 0); bind = dbi_result_bind_datetime(result, "the_time_tz", &the_time_dt_tz); assert_equal(bind, 0); while (dbi_result_next_row(result)) { errmsg = NULL; assert_equal(the_datetime_tz, expect_longlong_from_name("the_datetime_tz", cinfo.drivername)); assert_equal(the_time_dt_tz, expect_longlong_from_name("the_time_tz", cinfo.drivername)); } dbi_result_free(result); } Ensure test_dbi_result_bind_fields() { dbi_result result; char *query_string; int bind; int numfields; unsigned int num; signed char the_char = 0; unsigned char the_uchar = 0; signed short the_short = 0; unsigned short the_ushort = 0; signed int the_long = 0; unsigned int the_ulong = 0; signed long long the_longlong = 0; unsigned long long the_ulonglong = 0; float the_float = 0; double the_double = 0; const char* the_conn_quoted_string = NULL; query_string = assemble_query_string(cinfo.drivername, &numfields); result = dbi_conn_query(conn, query_string); ASSERT_RESULT free(query_string); bind = dbi_result_bind_fields(result, "the_char.%c the_uchar.%uc the_short.%h the_ushort.%uh the_long.%l the_ulong.%ul " "the_longlong.%L the_ulonglong.%uL the_float.%f the_double.%d the_conn_quoted_string.%s", &the_char, &the_uchar, &the_short, &the_ushort, &the_long, &the_ulong, &the_longlong, &the_ulonglong, &the_float, &the_double, &the_conn_quoted_string); assert_equal(bind, 11); while (dbi_result_next_row(result)) { unsigned short type_expected = 0; type_expected = field_attrib_from_index(0 /* the_char */, cinfo.drivername); if (type_expected == 2) { /* skip test for db engines which do not support a true one-byte char type */ assert_equal(the_char, expect_longlong_from_name("the_char", cinfo.drivername)); assert_equal(the_uchar, expect_ulonglong_from_name("the_uchar", cinfo.drivername)); } assert_equal(the_short, expect_longlong_from_name("the_short", cinfo.drivername)); assert_equal(the_long, expect_longlong_from_name("the_long", cinfo.drivername)); assert_equal(the_ulong, expect_ulonglong_from_name("the_ulong", cinfo.drivername)); assert_equal(the_longlong, expect_longlong_from_name("the_longlong", cinfo.drivername)); assert_equal(the_ulonglong, expect_ulonglong_from_name("the_ulonglong", cinfo.drivername)); assert_double_equal(the_float, expect_double_from_name("the_float", cinfo.drivername)); assert_string_equal(the_conn_quoted_string, expect_as_string_from_name("the_conn_quoted_string", cinfo.drivername)); } dbi_result_free(result); } Ensure test_dbi_result_get_field_length() { dbi_result result; char *query_string; int numfields; query_string = assemble_query_string(cinfo.drivername, &numfields); result = dbi_conn_query(conn, query_string); ASSERT_RESULT free(query_string); while (dbi_result_next_row(result)) { errmsg = NULL; unsigned int length = 0; length = dbi_result_get_field_length(result, "the_conn_quoted_string"); assert_equal(length, field_length_from_name("the_conn_quoted_string", cinfo.drivername)); length = dbi_result_get_field_length(result, "the_conn_quoted_string_copy"); assert_equal(length, field_length_from_name("the_conn_quoted_string_copy", cinfo.drivername)); length = dbi_result_get_field_length(result, "the_conn_escaped_string"); assert_equal(length, field_length_from_name("the_conn_escaped_string", cinfo.drivername)); length = dbi_result_get_field_length(result, "the_conn_escaped_string_copy"); assert_equal(length, field_length_from_name("the_conn_escaped_string_copy", cinfo.drivername)); length = dbi_result_get_field_length(result, "the_null_string"); assert_equal(length, field_length_from_name("the_null_string", cinfo.drivername)); length = dbi_result_get_field_length(result, "the_numstring"); assert_equal(length, field_length_from_name("the_numstring", cinfo.drivername)); length = dbi_result_get_field_length(result, "the_empty_string"); assert_equal(length, field_length_from_name("the_empty_string", cinfo.drivername)); length = dbi_result_get_field_length(result, "the_binary_quoted_string"); assert_equal(length, field_length_from_name("the_binary_quoted_string", cinfo.drivername)); length = dbi_result_get_field_length(result, "the_binary_escaped_string"); assert_equal(length, field_length_from_name("the_binary_escaped_string", cinfo.drivername)); } dbi_result_free(result); } Ensure test_dbi_result_get_field_length_idx() { dbi_result result; char *query_string; int numfields; query_string = assemble_query_string(cinfo.drivername, &numfields); result = dbi_conn_query(conn, query_string); ASSERT_RESULT while (dbi_result_next_row(result)) { unsigned int length = 0; length = dbi_result_get_field_length_idx(result, 1); assert_equal(length, field_length_from_index(1, cinfo.drivername)); length = dbi_result_get_field_length_idx(result, 2); assert_equal(length, field_length_from_index(2, cinfo.drivername)); length = dbi_result_get_field_length_idx(result, 3); assert_equal(length, field_length_from_index(3, cinfo.drivername)); length = dbi_result_get_field_length_idx(result, 4); assert_equal(length, field_length_from_index(4, cinfo.drivername)); length = dbi_result_get_field_length_idx(result, 5); assert_equal(length, field_length_from_index(5, cinfo.drivername)); length = dbi_result_get_field_length_idx(result, 6); assert_equal(length, field_length_from_index(6, cinfo.drivername)); length = dbi_result_get_field_length_idx(result, 7); assert_equal(length, field_length_from_index(7, cinfo.drivername)); length = dbi_result_get_field_length_idx(result, 8); assert_equal(length, field_length_from_index(8, cinfo.drivername)); length = dbi_result_get_field_length_idx(result, 9); assert_equal(length, field_length_from_index(9, cinfo.drivername)); } dbi_result_free(result); } Ensure test_dbi_result_get_field_idx() { dbi_result result; char *query_string; int numfields; query_string = assemble_query_string(cinfo.drivername, &numfields); result = dbi_conn_query(conn, query_string); ASSERT_RESULT free(query_string); while (dbi_result_next_row(result)) { errmsg = NULL; unsigned int idx = 0; idx = dbi_result_get_field_idx(result, "the_numstring"); assert_equal(idx, field_index_from_name("the_numstring", cinfo.drivername)); } dbi_result_free(result); } Ensure test_dbi_result_get_field_name() { dbi_result result; char *query_string; int numfields; query_string = assemble_query_string(cinfo.drivername, &numfields); result = dbi_conn_query(conn, query_string); ASSERT_RESULT free(query_string); while (dbi_result_next_row(result)) { errmsg = NULL; const char *name; name = dbi_result_get_field_name(result, 15); if(!strcmp(cinfo.drivername, "db2")) { assert_string_equal(name, "THE_NUMSTRING"); } else if (!strcmp(cinfo.drivername, "firebird")) { /* firebird uses fewer fields, hence field 15 is something else */ assert_string_equal(name, "THE_NULL_STRING"); } else { assert_string_equal(name, "the_numstring"); } } dbi_result_free(result); } Ensure test_dbi_result_get_numfields() { dbi_result result; result = dbi_conn_query(conn, "SELECT the_conn_quoted_string, the_conn_quoted_string_copy," " the_conn_escaped_string, the_conn_escaped_string_copy, the_numstring," " the_empty_string, the_null_string, the_binary_quoted_string, the_binary_escaped_string" " from test_datatypes"); ASSERT_RESULT while (dbi_result_next_row(result)) { errmsg = NULL; unsigned int num; num = dbi_result_get_numfields(result); assert_equal(num, 9); } dbi_result_free(result); } Ensure test_dbi_result_get_field_type() { dbi_result result; char *query_string = NULL; int i, numfields; if ((query_string = assemble_query_string(cinfo.drivername, &numfields)) == NULL) { /* todo: make noise */ return; } result = dbi_conn_query(conn, query_string); free(query_string); query_string = NULL; ASSERT_RESULT while (dbi_result_next_row(result)) { errmsg = NULL; unsigned short type_found, type_expected; for (i = 1; i <= numfields; i++) { type_found = dbi_result_get_field_type(result, field_name_from_index(i, cinfo.drivername)); type_expected = field_type_from_index(i, cinfo.drivername); assert_equal_with_message(type_found, type_expected, "[%d] should match [%d] for field name [%s]", type_found, type_expected, field_name_from_index(i, cinfo.drivername)); } } dbi_result_free(result); } Ensure test_dbi_result_get_field_type_idx() { dbi_result result; char *query_string = NULL; int i, numfields; if ((query_string = assemble_query_string(cinfo.drivername, &numfields)) == NULL) { /* todo: make noise */ return; } result = dbi_conn_query(conn, query_string); free(query_string); query_string = NULL; ASSERT_RESULT while (dbi_result_next_row(result)) { errmsg = NULL; unsigned short type_found, type_expected; for (i = 1; i <= numfields; i++) { type_found = dbi_result_get_field_type_idx(result, i); type_expected = field_type_from_index(i, cinfo.drivername); assert_equal_with_message(type_found, type_expected, "[%d] should match [%d] for field index [%d]", type_found, type_expected, i); } } dbi_result_free(result); } Ensure test_dbi_result_get_field_attrib() { dbi_result result; char *query_string = NULL; int i, numfields; if ((query_string = assemble_query_string(cinfo.drivername, &numfields)) == NULL) { /* todo: make noise */ return; } result = dbi_conn_query(conn, query_string); free(query_string); query_string = NULL; ASSERT_RESULT while (dbi_result_next_row(result)) { errmsg = NULL; unsigned int type_found, type_expected; for (i = 1; i <= numfields; i++) { type_found = dbi_result_get_field_attrib(result, field_name_from_index(i, cinfo.drivername), DBI_INTEGER_UNSIGNED, DBI_INTEGER_SIZE8); type_expected = field_attrib_from_index(i, cinfo.drivername); assert_equal_with_message(type_found, type_expected, "[%d] should match [%d] for field name [%s]", type_found, type_expected, field_name_from_index(i, cinfo.drivername)); } } dbi_result_free(result); } Ensure test_dbi_result_get_field_attrib_idx() { dbi_result result; char *query_string = NULL; int i, numfields; if ((query_string = assemble_query_string(cinfo.drivername, &numfields)) == NULL) { /* todo: make noise */ return; } result = dbi_conn_query(conn, query_string); free(query_string); query_string = NULL; ASSERT_RESULT while (dbi_result_next_row(result)) { errmsg = NULL; unsigned int type_found, type_expected; for (i = 1; i <= numfields; i++) { type_found = dbi_result_get_field_attrib_idx(result, i, DBI_INTEGER_UNSIGNED, DBI_INTEGER_SIZE8); type_expected = field_attrib_from_index(i, cinfo.drivername); assert_equal_with_message(type_found, type_expected, "[%d] should match [%d] for field index [%d]", type_found, type_expected, i); } } dbi_result_free(result); } Ensure test_dbi_result_get_field_attribs() { dbi_result result; char *query_string = NULL; int i, numfields; if ((query_string = assemble_query_string(cinfo.drivername, &numfields)) == NULL) { /* todo: make noise */ return; } result = dbi_conn_query(conn, query_string); free(query_string); query_string = NULL; ASSERT_RESULT while (dbi_result_next_row(result)) { errmsg = NULL; unsigned int type_found, type_expected; for (i = 1; i <= numfields; i++) { type_found = dbi_result_get_field_attribs(result, field_name_from_index(i, cinfo.drivername)); type_expected = field_attrib_from_index(i, cinfo.drivername); assert_equal_with_message(type_found, type_expected, "[%d] should match [%d] for field name [%s]", type_found, type_expected, field_name_from_index(i, cinfo.drivername)); } } dbi_result_free(result); } Ensure test_dbi_result_get_field_attribs_idx() { dbi_result result; char *query_string = NULL; int i, numfields; if ((query_string = assemble_query_string(cinfo.drivername, &numfields)) == NULL) { /* todo: make noise */ return; } result = dbi_conn_query(conn, query_string); free(query_string); query_string = NULL; ASSERT_RESULT while (dbi_result_next_row(result)) { errmsg = NULL; unsigned int type_found, type_expected; for (i = 1; i <= numfields; i++) { type_found = dbi_result_get_field_attribs_idx(result, i); type_expected = field_attrib_from_index(i, cinfo.drivername); assert_equal_with_message(type_found, type_expected, "[%d] should match [%d] for field index [%d]", type_found, type_expected, i); } } dbi_result_free(result); } Ensure test_dbi_result_field_is_null() { dbi_result result; result = dbi_conn_query(conn, "SELECT the_null_string from test_datatypes"); ASSERT_RESULT while (dbi_result_next_row(result)) { errmsg = NULL; int isnull = 0; isnull = dbi_result_field_is_null(result, "the_null_string"); assert_equal(isnull, 1); } dbi_result_free(result); } Ensure test_dbi_result_field_is_null_idx() { dbi_result result; result = dbi_conn_query(conn, "SELECT the_null_string from test_datatypes"); ASSERT_RESULT while (dbi_result_next_row(result)) { errmsg = NULL; int isnull = 0; isnull = dbi_result_field_is_null_idx(result, 1); assert_equal(isnull, 1); } dbi_result_free(result); } Ensure test_dbi_conn_get_table_list() { dbi_result result; result = dbi_conn_get_table_list(conn, cinfo.dbname, "test_datatypes"); ASSERT_RESULT while (dbi_result_next_row(result)) { const char *tablename = NULL; tablename = dbi_result_get_string_idx(result, 1); assert_string_equal("test_datatypes", tablename); } assert_equal(dbi_result_free(result), 0); } Ensure test_dbi_conn_get_table_list_no_pattern() { dbi_result result; result = dbi_conn_get_table_list(conn, cinfo.dbname, NULL); ASSERT_RESULT while (dbi_result_next_row(result)) { const char *tablename = NULL; tablename = dbi_result_get_string_idx(result, 1); assert_string_equal("test_datatypes", tablename); } assert_equal(dbi_result_free(result), 0); } /****** TestSuite declarations ******/ TestSuite *test_libdbi() { TestSuite *suite = create_named_test_suite(cinfo.drivername); add_suite(suite, test_dbi_general_test_case()); add_suite(suite, test_database_infrastructure()); add_suite(suite, test_managing_results()); add_suite(suite, test_transactions()); add_suite(suite, test_managing_queries()); add_suite(suite, test_dbi_retrieving_fields_meta_data()); add_suite(suite, test_dbi_retrieving_fields_data_name()); add_suite(suite, test_dbi_retrieving_fields_data_idx()); add_suite(suite, test_dbi_retrieving_fields_as()); add_suite(suite, test_dbi_misc()); /* todo: Specific tests for the databases functions */ if (!strcmp(cinfo.drivername, "firebird")) { } else if (!strcmp(cinfo.drivername, "freetds")) { } else if (!strcmp(cinfo.drivername, "ingres")) { } else if (!strcmp(cinfo.drivername, "msql")) { } else if (!strcmp(cinfo.drivername, "mysql")) { /* add_suite(suite, test_mysql_specific_functions()); */ } else if (!strcmp(cinfo.drivername, "pgsql")) { /* add_suite(suite, test_pgsql_specific_functions()); */ } else if (!strcmp(cinfo.drivername, "sqlite") || !strcmp(cinfo.drivername, "sqlite3")) { } TestSuite *database_fixture = create_named_test_suite("libdbi framework test"); add_suite(database_fixture, suite); setup(database_fixture, create_database); teardown(database_fixture, drop_database); return database_fixture; } TestSuite *test_pgsql_specific_functions() { TestSuite *suite = create_named_test_suite("Postgresql specific functions"); setup(suite, create_schema); teardown(suite, drop_schema); add_test(suite, test_pgsql_copy); connection_fixture(suite); } TestSuite *test_mysql_specific_functions() { TestSuite *suite = create_named_test_suite("Mysql specific functions"); setup(suite, create_schema); teardown(suite, drop_schema); //add_test(suite, test_dbi_conn_escape_string); connection_fixture(suite); } TestSuite *test_dbi_instance_infrastructure() { TestSuite *suite = create_named_test_suite("Instance infrastructure fields as"); setup(suite, create_schema); teardown(suite, drop_schema); add_test(suite, test_create_another_connection); return connection_fixture(suite); } TestSuite *test_dbi_general_test_case() { TestSuite *suite = create_named_test_suite("Test DBI general test cases"); setup(suite, create_schema); teardown(suite, drop_schema); add_test(suite, test_create_another_connection); if (!strcmp(cinfo.drivername, "mysql") || !strcmp(cinfo.drivername, "pgsql")) { add_test(suite, test_another_encoding); } return connection_fixture(suite); } TestSuite *test_managing_queries() { TestSuite *suite = create_named_test_suite("Managing Queries"); setup(suite, create_schema); teardown(suite, drop_schema); add_test(suite, test_dbi_conn_query); add_test(suite, test_dbi_conn_queryf); add_test(suite, test_dbi_conn_sequence_last); add_test(suite, test_dbi_conn_sequence_next); add_test(suite, test_dbi_conn_quote_string); add_test(suite, test_dbi_conn_quote_string_copy); add_test(suite, test_dbi_conn_quote_binary_copy); add_test(suite, test_dbi_conn_escape_string); add_test(suite, test_dbi_conn_escape_string_copy); add_test(suite, test_dbi_conn_escape_binary_copy); connection_fixture(suite); } TestSuite *test_transactions() { TestSuite *suite = create_named_test_suite("Managing Transactions"); setup(suite, create_schema); teardown(suite, drop_schema); add_test(suite, test_dbi_conn_transaction_commit); add_test(suite, test_dbi_conn_transaction_rollback); add_test(suite, test_dbi_conn_rollback_to_savepoint); add_test(suite, test_dbi_conn_release_savepoint); connection_fixture(suite); } TestSuite *test_managing_results() { TestSuite *suite = create_named_test_suite("Managing results"); // set the number of rows we need, 5 rows is good. // call function to setup the number of rows setup(suite, create_schema_five_rows); teardown(suite, drop_schema); add_test(suite, test_dbi_result_get_conn); add_test(suite, test_dbi_result_free); add_test(suite, test_dbi_result_seek_row); add_test(suite, test_dbi_result_first_row); add_test(suite, test_dbi_result_last_row); add_test(suite, test_dbi_result_prev_row); add_test(suite, test_dbi_result_next_row); add_test(suite, test_dbi_result_get_currow); add_test(suite, test_dbi_result_get_numrows); add_test(suite, test_dbi_result_get_numrows_affected); return connection_fixture(suite); } TestSuite *test_dbi_misc() { TestSuite *suite = create_named_test_suite("Test select cases"); setup(suite, create_schema); teardown(suite, drop_schema); add_test(suite, test_retrieve_zero_rows); add_test(suite, test_dummy); return connection_fixture(suite); } TestSuite *test_dbi_retrieving_fields_as() { TestSuite *suite = create_named_test_suite("Retrieving fields as"); setup(suite, create_schema); teardown(suite, drop_schema); // todo bug firebird add_test(suite, test_dbi_result_get_as_string); // todo bug firebird add_test(suite, test_dbi_result_get_as_longlong); return connection_fixture(suite); } TestSuite *test_dbi_retrieving_fields_data_idx() { TestSuite *suite = create_named_test_suite("Retrieving fields data by index"); setup(suite, create_schema); teardown(suite, drop_schema); add_test(suite, test_dbi_result_get_char_idx); add_test(suite, test_dbi_result_get_uchar_idx); add_test(suite, test_dbi_result_get_short_idx); add_test(suite, test_dbi_result_get_ushort_idx); add_test(suite, test_dbi_result_get_int_idx); add_test(suite, test_dbi_result_get_uint_idx); if (tinfo.have_longlong) { add_test(suite, test_dbi_result_get_longlong_idx); } if (tinfo.have_ulonglong) { add_test(suite, test_dbi_result_get_ulonglong_idx); } add_test(suite, test_dbi_result_get_float_idx); if(tinfo.have_double) { add_test(suite, test_dbi_result_get_double_idx); } add_test(suite, test_dbi_result_get_string_idx); add_test(suite, test_dbi_result_get_string_copy_idx); // todo bug firebird add_test(suite, test_dbi_result_get_binary_idx); // todo bug firebird add_test(suite, test_dbi_result_get_binary_copy_idx); if(tinfo.have_datetime) { add_test(suite, test_dbi_result_get_datetime_idx); } if(tinfo.have_datetime_tz) { add_test(suite, test_dbi_result_get_datetime_tz_idx); } if (tinfo.have_time_tz) { add_test(suite, test_dbi_result_get_datetime_time_tz_idx); } connection_fixture(suite); } TestSuite *test_dbi_retrieving_fields_data_name() { TestSuite *suite = create_named_test_suite("Retrieving fields data by name"); setup(suite, create_schema); teardown(suite, drop_schema); add_test(suite, test_dbi_result_get_char); add_test(suite, test_dbi_result_get_uchar); add_test(suite, test_dbi_result_get_short); add_test(suite, test_dbi_result_get_ushort); add_test(suite, test_dbi_result_get_int); add_test(suite, test_dbi_result_get_uint); if (tinfo.have_longlong) { add_test(suite, test_dbi_result_get_longlong); } if (tinfo.have_ulonglong) { add_test(suite, test_dbi_result_get_ulonglong); } add_test(suite, test_dbi_result_get_float); if(tinfo.have_double) { add_test(suite, test_dbi_result_get_double); } add_test(suite, test_dbi_result_get_string); add_test(suite, test_dbi_result_get_string_copy); // todo bug firebird add_test(suite, test_dbi_result_get_binary); // todo bug firebird add_test(suite, test_dbi_result_get_binary_copy); if(tinfo.have_datetime) { add_test(suite, test_dbi_result_get_datetime); } if(tinfo.have_datetime_tz) { add_test(suite, test_dbi_result_get_datetime_tz); } if (tinfo.have_time_tz) { add_test(suite, test_dbi_result_get_datetime_time_tz); } add_test(suite, test_dbi_result_get_field_type_mismatch); //add_test(suite, test_dbi_result_get_field_bad_name); // todo bug firebird add_test(suite, test_dbi_result_get_fields); add_test(suite, test_dbi_result_bind_char); add_test(suite, test_dbi_result_bind_uchar); add_test(suite, test_dbi_result_bind_short); add_test(suite, test_dbi_result_bind_ushort); add_test(suite, test_dbi_result_bind_int); add_test(suite, test_dbi_result_bind_uint); if (tinfo.have_longlong) { add_test(suite, test_dbi_result_bind_longlong); } if (tinfo.have_ulonglong) { add_test(suite, test_dbi_result_bind_ulonglong); } add_test(suite, test_dbi_result_bind_float); if(tinfo.have_double) { add_test(suite, test_dbi_result_bind_double); } add_test(suite, test_dbi_result_bind_string); // todo bug firebird add_test(suite, test_dbi_result_bind_binary); add_test(suite, test_dbi_result_bind_string_copy); // todo bug firebird add_test(suite, test_dbi_result_bind_binary_copy); if(tinfo.have_datetime) { add_test(suite, test_dbi_result_bind_datetime); } if(tinfo.have_datetime_tz) { add_test(suite, test_dbi_result_bind_datetime_tz); } if (tinfo.have_time_tz) { add_test(suite, test_dbi_result_bind_datetime_time_tz); } // todo bug firebird add_test(suite, test_dbi_result_bind_fields); connection_fixture(suite); } TestSuite *test_dbi_retrieving_fields_meta_data() { TestSuite *suite = create_named_test_suite("Retrieving fields meta-data"); setup(suite, create_schema); teardown(suite, drop_schema); add_test(suite, test_dbi_result_get_field_length); add_test(suite, test_dbi_result_get_field_length_idx); add_test(suite, test_dbi_result_get_field_idx); add_test(suite, test_dbi_result_get_field_name); add_test(suite, test_dbi_result_get_numfields); add_test(suite, test_dbi_result_get_field_type); add_test(suite, test_dbi_result_get_field_type_idx); add_test(suite, test_dbi_result_get_field_attrib); add_test(suite, test_dbi_result_get_field_attrib_idx); add_test(suite, test_dbi_result_get_field_attribs); add_test(suite, test_dbi_result_get_field_attribs_idx); add_test(suite, test_dbi_result_field_is_null); add_test(suite, test_dbi_result_field_is_null_idx); return connection_fixture(suite); } TestSuite *test_database_infrastructure() { TestSuite *suite = create_named_test_suite("Database Infrastructure"); setup(suite, create_schema); teardown(suite, drop_schema); add_test(suite, test_dbi_conn_get_table_list); // add_test(suite, test_dbi_conn_get_table_list_no_pattern); /* the test test_dbi_conn_select_db need to be called by last because * some database engines reconnect to the database. So the fixture * below close the database for us. */ add_test(suite, test_dbi_conn_select_db); connection_fixture(suite); } /* helper TestSuite */ TestSuite *connection_fixture(TestSuite *suite) { TestSuite *fixture = create_named_test_suite("libdbi connection"); add_suite(fixture, suite); setup(fixture, open_test_database); teardown(fixture, close_test_database); return fixture; } libdbi-drivers-0.9.0/tests/test_dbi_dlopen.c000644 001750 001750 00000004014 11530170634 021732 0ustar00markusmarkus000000 000000 /* test_dbi_dlopen - test program for dlopening and then loading drivers Copyright (C) 2010 Canonical, Ltd. All Rights Reserved Author: Clint Byrum This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser Public License as published by the Free Software Foundation, either version 2.1 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 Lesser Public License for more details. You should have received a copy of the GNU Lesser Public License along with this program. If not, see . */ #include #include void usage(char *prog); void usage(char *prog) { fprintf(stderr, "usage: %s G(for global)|N(for noglobal) /path/to/lib/dbd\n",prog); } int main(int argc, char **argv) { void *handle; if (argc < 3) { usage(argv[0]); return 1; } if (argv[1][0] == 'G') { handle = dlopen("./.libs/libtest_dbi_plugin.so", RTLD_NOW|RTLD_GLOBAL); } else if (argv[1][0] == 'N') { handle = dlopen("./.libs/libtest_dbi_plugin.so", RTLD_NOW); } else { usage(argv[0]); return 1; } if (!handle) { printf("Failed to load test_dbi_plugin.so"); return 1; } int (*init_db)(char *); char *error; //return test_main(argc,argv); *(void **) (&init_db) = dlsym(handle, "init_db"); if ((error = dlerror()) != NULL) { fprintf(stderr, "%s\n", error); return 1; } int ndrivers = (*init_db)(argv[2]); if (ndrivers < 1) { fprintf(stderr, "Either you have no drivers in %s , or there was a problem loading them.\n",argv[2]); return 1; } fprintf(stdout,"num drivers = %d\n", (*init_db)(argv[2])); return 0; } libdbi-drivers-0.9.0/tests/test_mysql.sh000755 001750 001750 00000005105 11440453014 021171 0ustar00markusmarkus000000 000000 #!/bin/sh # # test_mysql.sh - runs libdbi test suite for mysql driver using a temporary # mysql server environment that doesn't disturb any running MySQL server. # # Copyright (C) 2010 Clint Byrum # Copyright (C) 2010 Thomas Goirand # # This script is free software; you can redistribute it and/or modify it under # the terms of the GNU Lesser General Public License as published by the Free # Software Foundation; either version 2.1 of the License, or (at your option) # any later version. # # This script 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 Lesser General Public License for more # details. # # You should have received a copy of the GNU Lesser General Public License # along with this library; if not, write to: # The Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, # Boston, MA 02110-1301 USA set -e MYTMPDIR=`mktemp -d tmpXXXXXX` ME=`whoami` # the mysqld binary is usually not in PATH. Check the usual suspects # and pick the first one that comes up # bet this is not going to work on OS X MYMYSQLD=`find /usr/bin /usr/local/bin /usr/sbin /usr/local/sbin /usr/libexec /usr/local/libexec -name mysqld|head -1` # voodo commands to turn temp dir into absolute path D=`dirname "$MYTMPDIR"` B=`basename "$MYTMPDIR"` ABSMYTMPDIR="`cd \"$D\" 2>/dev/null && pwd || echo \"$D\"`/$B" # --force is needed because buildd's can't resolve their own hostnames to ips mysql_install_db --no-defaults --datadir=${ABSMYTMPDIR} --force --skip-name-resolve --user=${ME} $MYMYSQLD --no-defaults --skip-grant --user=${ME} --socket=${ABSMYTMPDIR}/mysql.sock --datadir=${ABSMYTMPDIR} --skip-networking & # mysqld needs some time to come up to speed. This avoids irritating error messages from the subsequent loop sleep 3 # This sets the path of the MySQL socket for any libmysql-client users, which includes # the ./tests/test_dbi client export MYSQL_UNIX_PORT=${ABSMYTMPDIR}/mysql.sock echo -n pinging mysqld. attempts=0 while ! mysqladmin --socket=${ABSMYTMPDIR}/mysql.sock ping ; do sleep 3 attempts=$((attempts+1)) if [ ${attempts} -gt 10 ] ; then echo "skipping test, mysql server could not be contacted after 30 seconds" exit 0 fi done ( echo "i"; \ echo "n"; \ echo ../drivers/mysql/.libs; \ echo mysql; \ echo root; \ echo ""; \ echo ""; \ echo "libdbitest"; \ echo ""; \ ) | ./test_dbi ecode=$? mysqladmin --socket=${ABSMYTMPDIR}/mysql.sock shutdown rm -rf ${ABSMYTMPDIR} exit ${ecode} libdbi-drivers-0.9.0/tests/test_pgsql.sh000755 001750 001750 00000005740 11530022626 021160 0ustar00markusmarkus000000 000000 #!/bin/sh # # test_mysql.sh - runs libdbi test suite for PGSQL driver using a temporary # PGSQL server environment that doesn't disturb any running PGSQL server. # # Copyright (C) 2010 Clint Byrum # Copyright (C) 2010 Thomas Goirand # # This script is free software; you can redistribute it and/or modify it under # the terms of the GNU Lesser General Public License as published by the Free # Software Foundation; either version 2.1 of the License, or (at your option) # any later version. # # This script 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 Lesser General Public License for more # details. # # You should have received a copy of the GNU Lesser General Public License # along with this library; if not, write to: # The Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, # Boston, MA 02110-1301 USA set -e MYUSER=`whoami` # initdb refuses to run as root if [ "${MYUSER}" = "root" ] ; then echo dropping root privs.. exec /bin/su postgres -- "$0" "$@" fi MYTMPDIR=`mktemp -d tmpXXXXXX` BINDIR=`pg_config --bindir` # voodo commands to turn temp dir into absolute path D=`dirname "$MYTMPDIR"` B=`basename "$MYTMPDIR"` ABSMYTMPDIR="`cd \"$D\" 2>/dev/null && pwd || echo \"$D\"`/$B" # depends on language-pack-en | language-pack-en # because initdb acquires encoding from locale export LC_ALL="en_US.UTF-8" ${BINDIR}/initdb -D ${MYTMPDIR} # the non-interactive standalone server is not available in older PGSQL versions #${BINDIR}/postgres -D ${MYTMPDIR} -h '' -k ${MYTMPDIR} & ${BINDIR}/postmaster -D ${MYTMPDIR} -h '' -k ${ABSMYTMPDIR} & attempts=0 while ! [ -e ${MYTMPDIR}/postmaster.pid ] ; do attempts=$((attempts+1)) if [ "${attempts}" -gt 10 ] ; then echo "skipping test, postgres pid file was not created after 30 seconds" exit 0 fi sleep 3 echo `date`: retrying.. done # Set the env. var so that pgsql client doesn't use networking # libpq uses this for all host params if not explicitly passed export PGHOST=${ABSMYTMPDIR} # Create a new test db in our own temp env to check that everything # is working as expected. if ! createdb -e libdbitest ; then echo "Skipping postgres test as libdbitest database creation failed" exit 0 fi dropdb -e libdbitest # Finally, run the libdbi pgsql test app createdb -e ${MYUSER} # note to self: what is this command for? it doesn't set a password psql -d ${MYUSER} -e -c "ALTER USER ${MYUSER} WITH PASSWORD 'abcdefg'" ( echo "i"; \ echo "n"; \ echo ../drivers/pgsql/.libs; \ echo pgsql; echo ${MYUSER}; \ echo ""; \ echo ${ABSMYTMPDIR}; \ echo libdbitest; \ echo ""; \ ) | ./test_dbi #/bin/sh debian/run_test_driver.sh pgsql ${MYUSER} "abcdefg" "127.0.0.2" libdbitest ecode=$? # Kill the postgress process and wait of it to shutdown $BINDIR/pg_ctl stop -D ${MYTMPDIR} wait rm -rf $MYTMPDIR exit $ecode libdbi-drivers-0.9.0/tests/test_sqlite.sh000755 001750 001750 00000002302 11440452726 021332 0ustar00markusmarkus000000 000000 #!/bin/sh # # test_sqlite.sh - runs libdbi test suite for sqlite driver # # Copyright (C) 2010 Clint Byrum # Copyright (C) 2010 Thomas Goirand # Copyright (C) 2010 Markus Hoenicka # # This script is free software; you can redistribute it and/or modify it under # the terms of the GNU Lesser General Public License as published by the Free # Software Foundation; either version 2.1 of the License, or (at your option) # any later version. # # This script 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 Lesser General Public License for more # details. # # You should have received a copy of the GNU Lesser General Public License # along with this library; if not, write to: # The Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, # Boston, MA 02110-1301 USA set -e MYTMPDIR=`mktemp -d tmpXXXXXX` ( echo "i"; \ echo "n"; \ echo ../drivers/sqlite/.libs; \ echo sqlite; \ echo ${MYTMPDIR}; \ echo "libdbitest"; \ echo ""; \ ) | ./test_dbi ecode=$? rm -rf ${MYTMPDIR} exit ${ecode} libdbi-drivers-0.9.0/tests/test_sqlite3.sh000755 001750 001750 00000002306 11440452726 021421 0ustar00markusmarkus000000 000000 #!/bin/sh # # test_sqlite3.sh - runs libdbi test suite for sqlite3 driver # # Copyright (C) 2010 Clint Byrum # Copyright (C) 2010 Thomas Goirand # Copyright (C) 2010 Markus Hoenicka # # This script is free software; you can redistribute it and/or modify it under # the terms of the GNU Lesser General Public License as published by the Free # Software Foundation; either version 2.1 of the License, or (at your option) # any later version. # # This script 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 Lesser General Public License for more # details. # # You should have received a copy of the GNU Lesser General Public License # along with this library; if not, write to: # The Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, # Boston, MA 02110-1301 USA set -e MYTMPDIR=`mktemp -d tmpXXXXXX` ( echo "i"; \ echo "n"; \ echo ../drivers/sqlite3/.libs; \ echo sqlite3; \ echo ${MYTMPDIR}; \ echo "libdbitest"; \ echo ""; \ ) | ./test_dbi ecode=$? rm -rf ${MYTMPDIR} exit ${ecode} libdbi-drivers-0.9.0/tests/test_msql.sh000755 001750 001750 00000002247 11440452726 021015 0ustar00markusmarkus000000 000000 #!/bin/sh # # test_msql.sh - runs libdbi test suite for msql driver # # Copyright (C) 2010 Clint Byrum # Copyright (C) 2010 Thomas Goirand # Copyright (C) 2010 Markus Hoenicka # # This script is free software; you can redistribute it and/or modify it under # the terms of the GNU Lesser General Public License as published by the Free # Software Foundation; either version 2.1 of the License, or (at your option) # any later version. # # This script 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 Lesser General Public License for more # details. # # You should have received a copy of the GNU Lesser General Public License # along with this library; if not, write to: # The Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, # Boston, MA 02110-1301 USA set -e MYTMPDIR=`mktemp -d tmpXXXXXX` ( echo "i"; \ echo "n"; \ echo ./drivers/msql/.libs; \ echo msql; \ echo "libdbitest"; \ echo ""; \ ) | ./tests/test_dbi ecode=$? rm -rf ${MYTMPDIR} exit ${ecode} libdbi-drivers-0.9.0/tests/test_oracle.sh000755 001750 001750 00000001775 11440452726 021313 0ustar00markusmarkus000000 000000 #!/bin/sh # # test_oracle.sh - runs libdbi test suite for oracle driver # # Copyright (C) 2010 Markus Hoenicka # # This script is free software; you can redistribute it and/or modify it under # the terms of the GNU Lesser General Public License as published by the Free # Software Foundation; either version 2.1 of the License, or (at your option) # any later version. # # This script 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 Lesser General Public License for more # details. # # You should have received a copy of the GNU Lesser General Public License # along with this library; if not, write to: # The Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, # Boston, MA 02110-1301 USA # this just redirects to our interactive test program # TODO: create temporary cluster and use that for the tests echo "Please run tests/test_dbi manually" libdbi-drivers-0.9.0/tests/test_firebird.sh000755 001750 001750 00000002000 11440452726 021612 0ustar00markusmarkus000000 000000 #!/bin/sh # # test_firebird.sh - runs libdbi test suite for firebird driver # # Copyright (C) 2010 Markus Hoenicka # # This script is free software; you can redistribute it and/or modify it under # the terms of the GNU Lesser General Public License as published by the Free # Software Foundation; either version 2.1 of the License, or (at your option) # any later version. # # This script 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 Lesser General Public License for more # details. # # You should have received a copy of the GNU Lesser General Public License # along with this library; if not, write to: # The Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, # Boston, MA 02110-1301 USA # this just redirects to our interactive test program # TODO: create temporary cluster and use that for the tests echo "Please run tests/test_dbi manually" libdbi-drivers-0.9.0/tests/test_freetds.sh000644 001750 001750 00000001777 11440452726 021501 0ustar00markusmarkus000000 000000 #!/bin/sh # # test_freetds.sh - runs libdbi test suite for freetds driver # # Copyright (C) 2010 Markus Hoenicka # # This script is free software; you can redistribute it and/or modify it under # the terms of the GNU Lesser General Public License as published by the Free # Software Foundation; either version 2.1 of the License, or (at your option) # any later version. # # This script 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 Lesser General Public License for more # details. # # You should have received a copy of the GNU Lesser General Public License # along with this library; if not, write to: # The Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, # Boston, MA 02110-1301 USA # this just redirects to our interactive test program # TODO: create temporary cluster and use that for the tests echo "Please run tests/test_dbi manually" libdbi-drivers-0.9.0/tests/test_ingres.sh000755 001750 001750 00000001774 11440452726 021334 0ustar00markusmarkus000000 000000 #!/bin/sh # # test_ingres.sh - runs libdbi test suite for ingres driver # # Copyright (C) 2010 Markus Hoenicka # # This script is free software; you can redistribute it and/or modify it under # the terms of the GNU Lesser General Public License as published by the Free # Software Foundation; either version 2.1 of the License, or (at your option) # any later version. # # This script 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 Lesser General Public License for more # details. # # You should have received a copy of the GNU Lesser General Public License # along with this library; if not, write to: # The Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, # Boston, MA 02110-1301 USA # this just redirects to our interactive test program # TODO: create temporary cluster and use that for the tests echo "Please run tests/test_dbi manually" libdbi-drivers-0.9.0/tests/test_db2.sh000755 001750 001750 00000001767 11440452726 020516 0ustar00markusmarkus000000 000000 #!/bin/sh # # test_db2.sh - runs libdbi test suite for db2 driver # # Copyright (C) 2010 Markus Hoenicka # # This script is free software; you can redistribute it and/or modify it under # the terms of the GNU Lesser General Public License as published by the Free # Software Foundation; either version 2.1 of the License, or (at your option) # any later version. # # This script 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 Lesser General Public License for more # details. # # You should have received a copy of the GNU Lesser General Public License # along with this library; if not, write to: # The Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, # Boston, MA 02110-1301 USA # this just redirects to our interactive test program # TODO: create temporary cluster and use that for the tests echo "Please run tests/test_dbi manually" libdbi-drivers-0.9.0/tests/test_libdbi.sh000755 001750 001750 00000001025 11530170634 021252 0ustar00markusmarkus000000 000000 #!/bin/sh # This script calls test_dbi_dlopen which simulates using drivers from # a plugin that is dlopened. homedir=`dirname $0` set -e rm -rf .plugins mkdir .plugins olddir=`pwd` cd .. rootdir=`pwd` for f in `find drivers -name 'libdbd*.so'` ; do ln -vs $rootdir/$f $olddir/.plugins done cd $olddir . $homedir/plugin_settings.sh export LD_LIBRARY_PATH=${LD_LIBRARY_PATH:+$LD_LIBRARY_PATH:}${LIBDBI_LIBDIR} $homedir/test_dbi_dlopen G .plugins $homedir/test_dbi_dlopen N .plugins || echo Failure is ok. rm -rf .plugins libdbi-drivers-0.9.0/tests/cgreen/000755 001750 001750 00000000000 12117473273 017703 5ustar00markusmarkus000000 000000 libdbi-drivers-0.9.0/tests/cgreen/src/000755 001750 001750 00000000000 12117473273 020472 5ustar00markusmarkus000000 000000 libdbi-drivers-0.9.0/tests/cgreen/README000644 001750 001750 00000003710 11421144144 020551 0ustar00markusmarkus000000 000000 Cgreen ====== You probably got this package from... http://cgreen.sourceforge.net/projects/cgreen/ If there is no licence agreement with this package please download a version from the location above. You must read and accept that licence to use this software. The file is titled simply LICENSE. What is it? It's a framework for unit testing, written in C. A tool for C developers writing tests of their own code. If you have used JUnit, or any of the xUnit clones, you will find the concept familiar. In particular the tool supports a range of assertions, composable test suites and setup/teardown facilities. Because of the peculiarities of C programming, each test function is normally run in it's own process. This project is very close in scope to the "Check" unit tester and was influenced by it... http://check.sourceforge.net/projects/check/ The main difference from this tool and other xUnit tools, such as "Check", is that test results are not stored. Instead they are streamed to the reporter psuedo-class, one that is easily overridden by the end user. The other main extra feature is the support for writing mock callbacks. This includes generating sequences for return values or parameter expectations. If you want to install CGreen and have a play, just run "make" from the top level directory. CGreen uses CMake and I'm afraid I am no expert with this tool. There may well be teething problems. Please read the INSTALL file for more information and alternate ways to build. Feedback and queries should be sent to the mail list at Sourceforge: cgreen-users@lists.sourceforge.net If that doesn't work for some reason (bounce policies or whatever) then feel free to contact me directly: marcus@lastcraft.com This project would not have happened without the generous financial support of the Wordtracker keyword tool... http://www.wordtracker.com/ This tool is basically a spin off from a research project at Wordtracker. yours Marcus Baker -- marcus@lastcraft.com libdbi-drivers-0.9.0/tests/cgreen/Makefile.am000644 001750 001750 00000001100 11450727032 021721 0ustar00markusmarkus000000 000000 ## Process this file with automake to produce Makefile.in AUTOMAKE_OPTIONS = foreign noinst_LIBRARIES = libcgreen.a INCLUDES = -Iinclude libcgreen_a_SOURCES = src/unit.c src/messaging.c src/breadcrumb.c src/reporter.c src/assertions.c src/vector.c src/mocks.c src/constraint.c src/parameters.c src/text_reporter.c src/cdash_reporter.c EXTRA_DIST = AUTHORS ChangeLog CMakeLists.txt ConfigureChecks.cmake COPYING CTestConfig.cmake DefineOptions.cmake INSTALL LICENSE NEWS README README.osx README.win32 TODO VERSION config.h.cmake cmake contrib doc include samples tests libdbi-drivers-0.9.0/tests/cgreen/Makefile.in000644 001750 001750 00000106606 12117467054 021761 0ustar00markusmarkus000000 000000 # Makefile.in generated by automake 1.12.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2012 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = tests/cgreen DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(top_srcdir)/depcomp AUTHORS COPYING ChangeLog INSTALL NEWS \ TODO ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) ARFLAGS = cru libcgreen_a_AR = $(AR) $(ARFLAGS) libcgreen_a_LIBADD = am_libcgreen_a_OBJECTS = unit.$(OBJEXT) messaging.$(OBJEXT) \ breadcrumb.$(OBJEXT) reporter.$(OBJEXT) assertions.$(OBJEXT) \ vector.$(OBJEXT) mocks.$(OBJEXT) constraint.$(OBJEXT) \ parameters.$(OBJEXT) text_reporter.$(OBJEXT) \ cdash_reporter.$(OBJEXT) libcgreen_a_OBJECTS = $(am_libcgreen_a_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(libcgreen_a_SOURCES) DIST_SOURCES = $(libcgreen_a_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DB2_INCLUDE = @DB2_INCLUDE@ DB2_LDFLAGS = @DB2_LDFLAGS@ DB2_LIBS = @DB2_LIBS@ DB2_TEST = @DB2_TEST@ DBI_INCLUDE = @DBI_INCLUDE@ DEBUG = @DEBUG@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FIREBIRD_INCLUDE = @FIREBIRD_INCLUDE@ FIREBIRD_ISQL = @FIREBIRD_ISQL@ FIREBIRD_ISQL_FLAG = @FIREBIRD_ISQL_FLAG@ FIREBIRD_LDFLAGS = @FIREBIRD_LDFLAGS@ FIREBIRD_LIBS = @FIREBIRD_LIBS@ FIREBIRD_TEST = @FIREBIRD_TEST@ FREETDS_INCLUDE = @FREETDS_INCLUDE@ FREETDS_LDFLAGS = @FREETDS_LDFLAGS@ FREETDS_LIBS = @FREETDS_LIBS@ FREETDS_TEST = @FREETDS_TEST@ GREP = @GREP@ INGRES_INCLUDE = @INGRES_INCLUDE@ INGRES_LDFLAGS = @INGRES_LDFLAGS@ INGRES_LIBS = @INGRES_LIBS@ INGRES_TEST = @INGRES_TEST@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBADD_LIBDBI = @LIBADD_LIBDBI@ LIBDBI_LIBDIR = @LIBDBI_LIBDIR@ LIBDBI_TEST = @LIBDBI_TEST@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSQL_INCLUDE = @MSQL_INCLUDE@ MSQL_LDFLAGS = @MSQL_LDFLAGS@ MSQL_LIBS = @MSQL_LIBS@ MSQL_TEST = @MSQL_TEST@ MYSQL_CONFIG = @MYSQL_CONFIG@ MYSQL_INCLUDE = @MYSQL_INCLUDE@ MYSQL_LDFLAGS = @MYSQL_LDFLAGS@ MYSQL_LIBS = @MYSQL_LIBS@ MYSQL_TEST = @MYSQL_TEST@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ ORACLE_INCLUDE = @ORACLE_INCLUDE@ ORACLE_LDFLAGS = @ORACLE_LDFLAGS@ ORACLE_LIBS = @ORACLE_LIBS@ ORACLE_TEST = @ORACLE_TEST@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PGSQL_INCLUDE = @PGSQL_INCLUDE@ PGSQL_LDFLAGS = @PGSQL_LDFLAGS@ PGSQL_LIBS = @PGSQL_LIBS@ PGSQL_TEST = @PGSQL_TEST@ PG_CONFIG = @PG_CONFIG@ PROFILE = @PROFILE@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SQLITE3_INCLUDE = @SQLITE3_INCLUDE@ SQLITE3_LDFLAGS = @SQLITE3_LDFLAGS@ SQLITE3_LIBS = @SQLITE3_LIBS@ SQLITE3_TEST = @SQLITE3_TEST@ SQLITE_INCLUDE = @SQLITE_INCLUDE@ SQLITE_LDFLAGS = @SQLITE_LDFLAGS@ SQLITE_LIBS = @SQLITE_LIBS@ SQLITE_TEST = @SQLITE_TEST@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ dbi_dbdir = @dbi_dbdir@ docdir = @docdir@ docs_subdirs = @docs_subdirs@ driverdir = @driverdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = foreign noinst_LIBRARIES = libcgreen.a INCLUDES = -Iinclude libcgreen_a_SOURCES = src/unit.c src/messaging.c src/breadcrumb.c src/reporter.c src/assertions.c src/vector.c src/mocks.c src/constraint.c src/parameters.c src/text_reporter.c src/cdash_reporter.c EXTRA_DIST = AUTHORS ChangeLog CMakeLists.txt ConfigureChecks.cmake COPYING CTestConfig.cmake DefineOptions.cmake INSTALL LICENSE NEWS README README.osx README.win32 TODO VERSION config.h.cmake cmake contrib doc include samples tests all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign tests/cgreen/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign tests/cgreen/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) libcgreen.a: $(libcgreen_a_OBJECTS) $(libcgreen_a_DEPENDENCIES) $(EXTRA_libcgreen_a_DEPENDENCIES) -rm -f libcgreen.a $(libcgreen_a_AR) libcgreen.a $(libcgreen_a_OBJECTS) $(libcgreen_a_LIBADD) $(RANLIB) libcgreen.a mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/assertions.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/breadcrumb.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cdash_reporter.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/constraint.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/messaging.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mocks.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parameters.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reporter.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/text_reporter.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vector.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< unit.o: src/unit.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit.o -MD -MP -MF $(DEPDIR)/unit.Tpo -c -o unit.o `test -f 'src/unit.c' || echo '$(srcdir)/'`src/unit.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/unit.Tpo $(DEPDIR)/unit.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/unit.c' object='unit.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit.o `test -f 'src/unit.c' || echo '$(srcdir)/'`src/unit.c unit.obj: src/unit.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit.obj -MD -MP -MF $(DEPDIR)/unit.Tpo -c -o unit.obj `if test -f 'src/unit.c'; then $(CYGPATH_W) 'src/unit.c'; else $(CYGPATH_W) '$(srcdir)/src/unit.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/unit.Tpo $(DEPDIR)/unit.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/unit.c' object='unit.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit.obj `if test -f 'src/unit.c'; then $(CYGPATH_W) 'src/unit.c'; else $(CYGPATH_W) '$(srcdir)/src/unit.c'; fi` messaging.o: src/messaging.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT messaging.o -MD -MP -MF $(DEPDIR)/messaging.Tpo -c -o messaging.o `test -f 'src/messaging.c' || echo '$(srcdir)/'`src/messaging.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/messaging.Tpo $(DEPDIR)/messaging.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/messaging.c' object='messaging.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o messaging.o `test -f 'src/messaging.c' || echo '$(srcdir)/'`src/messaging.c messaging.obj: src/messaging.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT messaging.obj -MD -MP -MF $(DEPDIR)/messaging.Tpo -c -o messaging.obj `if test -f 'src/messaging.c'; then $(CYGPATH_W) 'src/messaging.c'; else $(CYGPATH_W) '$(srcdir)/src/messaging.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/messaging.Tpo $(DEPDIR)/messaging.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/messaging.c' object='messaging.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o messaging.obj `if test -f 'src/messaging.c'; then $(CYGPATH_W) 'src/messaging.c'; else $(CYGPATH_W) '$(srcdir)/src/messaging.c'; fi` breadcrumb.o: src/breadcrumb.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT breadcrumb.o -MD -MP -MF $(DEPDIR)/breadcrumb.Tpo -c -o breadcrumb.o `test -f 'src/breadcrumb.c' || echo '$(srcdir)/'`src/breadcrumb.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/breadcrumb.Tpo $(DEPDIR)/breadcrumb.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/breadcrumb.c' object='breadcrumb.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o breadcrumb.o `test -f 'src/breadcrumb.c' || echo '$(srcdir)/'`src/breadcrumb.c breadcrumb.obj: src/breadcrumb.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT breadcrumb.obj -MD -MP -MF $(DEPDIR)/breadcrumb.Tpo -c -o breadcrumb.obj `if test -f 'src/breadcrumb.c'; then $(CYGPATH_W) 'src/breadcrumb.c'; else $(CYGPATH_W) '$(srcdir)/src/breadcrumb.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/breadcrumb.Tpo $(DEPDIR)/breadcrumb.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/breadcrumb.c' object='breadcrumb.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o breadcrumb.obj `if test -f 'src/breadcrumb.c'; then $(CYGPATH_W) 'src/breadcrumb.c'; else $(CYGPATH_W) '$(srcdir)/src/breadcrumb.c'; fi` reporter.o: src/reporter.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT reporter.o -MD -MP -MF $(DEPDIR)/reporter.Tpo -c -o reporter.o `test -f 'src/reporter.c' || echo '$(srcdir)/'`src/reporter.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/reporter.Tpo $(DEPDIR)/reporter.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/reporter.c' object='reporter.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o reporter.o `test -f 'src/reporter.c' || echo '$(srcdir)/'`src/reporter.c reporter.obj: src/reporter.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT reporter.obj -MD -MP -MF $(DEPDIR)/reporter.Tpo -c -o reporter.obj `if test -f 'src/reporter.c'; then $(CYGPATH_W) 'src/reporter.c'; else $(CYGPATH_W) '$(srcdir)/src/reporter.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/reporter.Tpo $(DEPDIR)/reporter.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/reporter.c' object='reporter.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o reporter.obj `if test -f 'src/reporter.c'; then $(CYGPATH_W) 'src/reporter.c'; else $(CYGPATH_W) '$(srcdir)/src/reporter.c'; fi` assertions.o: src/assertions.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT assertions.o -MD -MP -MF $(DEPDIR)/assertions.Tpo -c -o assertions.o `test -f 'src/assertions.c' || echo '$(srcdir)/'`src/assertions.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/assertions.Tpo $(DEPDIR)/assertions.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/assertions.c' object='assertions.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o assertions.o `test -f 'src/assertions.c' || echo '$(srcdir)/'`src/assertions.c assertions.obj: src/assertions.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT assertions.obj -MD -MP -MF $(DEPDIR)/assertions.Tpo -c -o assertions.obj `if test -f 'src/assertions.c'; then $(CYGPATH_W) 'src/assertions.c'; else $(CYGPATH_W) '$(srcdir)/src/assertions.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/assertions.Tpo $(DEPDIR)/assertions.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/assertions.c' object='assertions.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o assertions.obj `if test -f 'src/assertions.c'; then $(CYGPATH_W) 'src/assertions.c'; else $(CYGPATH_W) '$(srcdir)/src/assertions.c'; fi` vector.o: src/vector.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT vector.o -MD -MP -MF $(DEPDIR)/vector.Tpo -c -o vector.o `test -f 'src/vector.c' || echo '$(srcdir)/'`src/vector.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/vector.Tpo $(DEPDIR)/vector.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/vector.c' object='vector.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o vector.o `test -f 'src/vector.c' || echo '$(srcdir)/'`src/vector.c vector.obj: src/vector.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT vector.obj -MD -MP -MF $(DEPDIR)/vector.Tpo -c -o vector.obj `if test -f 'src/vector.c'; then $(CYGPATH_W) 'src/vector.c'; else $(CYGPATH_W) '$(srcdir)/src/vector.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/vector.Tpo $(DEPDIR)/vector.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/vector.c' object='vector.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o vector.obj `if test -f 'src/vector.c'; then $(CYGPATH_W) 'src/vector.c'; else $(CYGPATH_W) '$(srcdir)/src/vector.c'; fi` mocks.o: src/mocks.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mocks.o -MD -MP -MF $(DEPDIR)/mocks.Tpo -c -o mocks.o `test -f 'src/mocks.c' || echo '$(srcdir)/'`src/mocks.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/mocks.Tpo $(DEPDIR)/mocks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/mocks.c' object='mocks.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mocks.o `test -f 'src/mocks.c' || echo '$(srcdir)/'`src/mocks.c mocks.obj: src/mocks.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mocks.obj -MD -MP -MF $(DEPDIR)/mocks.Tpo -c -o mocks.obj `if test -f 'src/mocks.c'; then $(CYGPATH_W) 'src/mocks.c'; else $(CYGPATH_W) '$(srcdir)/src/mocks.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/mocks.Tpo $(DEPDIR)/mocks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/mocks.c' object='mocks.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mocks.obj `if test -f 'src/mocks.c'; then $(CYGPATH_W) 'src/mocks.c'; else $(CYGPATH_W) '$(srcdir)/src/mocks.c'; fi` constraint.o: src/constraint.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT constraint.o -MD -MP -MF $(DEPDIR)/constraint.Tpo -c -o constraint.o `test -f 'src/constraint.c' || echo '$(srcdir)/'`src/constraint.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/constraint.Tpo $(DEPDIR)/constraint.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/constraint.c' object='constraint.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o constraint.o `test -f 'src/constraint.c' || echo '$(srcdir)/'`src/constraint.c constraint.obj: src/constraint.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT constraint.obj -MD -MP -MF $(DEPDIR)/constraint.Tpo -c -o constraint.obj `if test -f 'src/constraint.c'; then $(CYGPATH_W) 'src/constraint.c'; else $(CYGPATH_W) '$(srcdir)/src/constraint.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/constraint.Tpo $(DEPDIR)/constraint.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/constraint.c' object='constraint.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o constraint.obj `if test -f 'src/constraint.c'; then $(CYGPATH_W) 'src/constraint.c'; else $(CYGPATH_W) '$(srcdir)/src/constraint.c'; fi` parameters.o: src/parameters.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT parameters.o -MD -MP -MF $(DEPDIR)/parameters.Tpo -c -o parameters.o `test -f 'src/parameters.c' || echo '$(srcdir)/'`src/parameters.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/parameters.Tpo $(DEPDIR)/parameters.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/parameters.c' object='parameters.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o parameters.o `test -f 'src/parameters.c' || echo '$(srcdir)/'`src/parameters.c parameters.obj: src/parameters.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT parameters.obj -MD -MP -MF $(DEPDIR)/parameters.Tpo -c -o parameters.obj `if test -f 'src/parameters.c'; then $(CYGPATH_W) 'src/parameters.c'; else $(CYGPATH_W) '$(srcdir)/src/parameters.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/parameters.Tpo $(DEPDIR)/parameters.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/parameters.c' object='parameters.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o parameters.obj `if test -f 'src/parameters.c'; then $(CYGPATH_W) 'src/parameters.c'; else $(CYGPATH_W) '$(srcdir)/src/parameters.c'; fi` text_reporter.o: src/text_reporter.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT text_reporter.o -MD -MP -MF $(DEPDIR)/text_reporter.Tpo -c -o text_reporter.o `test -f 'src/text_reporter.c' || echo '$(srcdir)/'`src/text_reporter.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/text_reporter.Tpo $(DEPDIR)/text_reporter.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/text_reporter.c' object='text_reporter.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o text_reporter.o `test -f 'src/text_reporter.c' || echo '$(srcdir)/'`src/text_reporter.c text_reporter.obj: src/text_reporter.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT text_reporter.obj -MD -MP -MF $(DEPDIR)/text_reporter.Tpo -c -o text_reporter.obj `if test -f 'src/text_reporter.c'; then $(CYGPATH_W) 'src/text_reporter.c'; else $(CYGPATH_W) '$(srcdir)/src/text_reporter.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/text_reporter.Tpo $(DEPDIR)/text_reporter.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/text_reporter.c' object='text_reporter.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o text_reporter.obj `if test -f 'src/text_reporter.c'; then $(CYGPATH_W) 'src/text_reporter.c'; else $(CYGPATH_W) '$(srcdir)/src/text_reporter.c'; fi` cdash_reporter.o: src/cdash_reporter.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT cdash_reporter.o -MD -MP -MF $(DEPDIR)/cdash_reporter.Tpo -c -o cdash_reporter.o `test -f 'src/cdash_reporter.c' || echo '$(srcdir)/'`src/cdash_reporter.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/cdash_reporter.Tpo $(DEPDIR)/cdash_reporter.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/cdash_reporter.c' object='cdash_reporter.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o cdash_reporter.o `test -f 'src/cdash_reporter.c' || echo '$(srcdir)/'`src/cdash_reporter.c cdash_reporter.obj: src/cdash_reporter.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT cdash_reporter.obj -MD -MP -MF $(DEPDIR)/cdash_reporter.Tpo -c -o cdash_reporter.obj `if test -f 'src/cdash_reporter.c'; then $(CYGPATH_W) 'src/cdash_reporter.c'; else $(CYGPATH_W) '$(srcdir)/src/cdash_reporter.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/cdash_reporter.Tpo $(DEPDIR)/cdash_reporter.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/cdash_reporter.c' object='cdash_reporter.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o cdash_reporter.obj `if test -f 'src/cdash_reporter.c'; then $(CYGPATH_W) 'src/cdash_reporter.c'; else $(CYGPATH_W) '$(srcdir)/src/cdash_reporter.c'; fi` mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLIBRARIES cscopelist ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: libdbi-drivers-0.9.0/tests/cgreen/AUTHORS000644 001750 001750 00000001053 11421144144 020737 0ustar00markusmarkus000000 000000 The following people have been involved in cgreen development: Main developers: * Marcus Baker - Initial version These people have also contributed to the project: (if we forgot you, please let us know!) * João Henrique F. Freitas - configure/Makefile/libtool/CMake * Daniel Ferreira de Lima - translate docs to pt_BR * Tiago Octaviano Primini - translate docs to pt_BR * Thomas Nilsson - Cute report * Matt Hargett - g++ compiling - many others patches * Chris LeBlanc - g++ linkage * Georg Lohrer - Solaris compiling * John Bito libdbi-drivers-0.9.0/tests/cgreen/COPYING000644 001750 001750 00000063471 11421144144 020736 0ustar00markusmarkus000000 000000 GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 Copyright (C) 1991, 1999 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. GNU LESSER GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. , 1 April 1990 Ty Coon, President of Vice That's all there is to it! libdbi-drivers-0.9.0/tests/cgreen/ChangeLog000644 001750 001750 00000000000 11421144144 021430 0ustar00markusmarkus000000 000000 libdbi-drivers-0.9.0/tests/cgreen/INSTALL000644 001750 001750 00000004406 11421144144 020725 0ustar00markusmarkus000000 000000 Building and Installing Cgreen ============================== This document is incomplete. ??? are placeholders. There are several ways to use Cgreen: 1) You want to write some tests for a personal project, but don't need to ship the test suite with the product, or you just want to try out CGreen. 2) You want to write some tests that will be used by other developers. This is the normal way to use Cgreen. 3) You want to ship working tests with a product and want to bundle Cgreen as the test runner. 4) You are pulling Cgreen directly from subversion on Sourceforge: https://cgreen.svn.sourceforge.net/svnroot/cgreen/trunk/cgreen We'll walk you through these in order... 1) So you want to write a test quickly. As a user wanting to write some quick tests, the quickest way is to download the latest tarball and run "make" from inside the unpacked directory. You can go "make test" to confirm that Cgreen is working correctly. You will see a cgreen.h and both a cgreen shared object or DLL, and a static library for your system. Note: currently the header is stored further into the tree at include/cgreen/cgreen.h, but we'll add a symlink soon ???. Include the header and link the library as you normally would. 2) Cgreen needs to be installed to be usable by everyone. This is the same as scenario 1, but just add a "make install" step once finished. The Cgreen header should just be available through... #include ...and adding -Icgreen should be enough to link under gcc. 3) ??? 4) You will have to carry out some additional steps if you work straight off of a Subversion checkout. We are using the CMake (www.cmake.org) build system. The following steps are called "out-of-source building", because we will build all the project files outside of the sources directory (why???). First the build directory: $ mkdir cgreen-build $ cd cgreen-build Within this new directory, we create the Makefile $ cmake ../cgreen We then get the following make targets: $make $make test $make packages To build docs, first read the file docs/README, run: $ cmake ../cgreen -DENABLE_DOCS=1 $make html To build the html website: $ cmake ../cgreen -DENABLE_WEBSITE=1 $ make bundled-html Note ???: Most of these steps do not currently work :(. libdbi-drivers-0.9.0/tests/cgreen/NEWS000644 001750 001750 00000000000 11421144144 020355 0ustar00markusmarkus000000 000000 libdbi-drivers-0.9.0/tests/cgreen/TODO000644 001750 001750 00000000663 11421144144 020365 0ustar00markusmarkus000000 000000 TODO for Cgreen =============== Unit tester ----------- Mocks ----- Sort out counting glitches, especially in expect_never(). Unfulfilled expectations should send a failure. Add expect_call_count(). Suites ------ Exceptions, as well as failures, should cause a bad exit code. Collector --------- Packages -------- Make sure only the public symbols are exported in the library. Documentation ------------- Add tests for examples. libdbi-drivers-0.9.0/tests/cgreen/CMakeLists.txt000644 001750 001750 00000002254 11421144144 022433 0ustar00markusmarkus000000 000000 project(cgreen C) # Required cmake version cmake_minimum_required(VERSION 2.6.0) # global needed variables set(APPLICATION_NAME ${PROJECT_NAME}) set(APPLICATION_VERSION "1.0.0-beta2") set(LIBRARY_VERSION "1.0.0") set(LIBRARY_SOVERSION "1") # where to look first for cmake modules, before ${CMAKE_ROOT}/Modules/ is checked set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/Modules ) # add definitions include(DefineCMakeDefaults) include(DefineCompilerFlags) include(DefineInstallationPaths) include(DefineOptions.cmake) include(DefineCPackConfig) # add macros include(MacroAddPlugin) include(MacroCopyFile) # config.h checks include(ConfigureChecks.cmake) configure_file(config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config.h) if (WIN32) set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR}/bin) set(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/bin) if (UNIX) # == cygwin! option(USE_W32API "Build using Windows API instead of *nix" OFF) endif (UNIX) endif (WIN32) # check subdirectories add_subdirectory(doc) add_subdirectory(include) add_subdirectory(src) # add_subdirectory(samples) if (WITH_UNIT_TESTS) include(MacroAddUnitTest) add_subdirectory(tests) endif (WITH_UNIT_TESTS) # libdbi-drivers-0.9.0/tests/cgreen/ConfigureChecks.cmake000644 001750 001750 00000000725 11421144144 023740 0ustar00markusmarkus000000 000000 include(CheckIncludeFile) include(CheckSymbolExists) include(CheckFunctionExists) include(CheckLibraryExists) include(CheckTypeSize) include(CheckCXXSourceCompiles) set(PACKAGE ${APPLICATION_NAME}) set(VERSION ${APPLICATION_VERSION}) set(DATADIR ${DATA_INSTALL_DIR}) set(LIBDIR ${LIB_INSTALL_DIR}) set(PLUGINDIR "${PLUGIN_INSTALL_DIR}-${LIBRARY_SOVERSION}") set(SYSCONFDIR ${SYSCONF_INSTALL_DIR}) set(BINARYDIR ${CMAKE_BINARY_DIR}) set(SOURCEDIR ${CMAKE_SOURCE_DIR}) libdbi-drivers-0.9.0/tests/cgreen/CTestConfig.cmake000644 001750 001750 00000001021 11421144144 023034 0ustar00markusmarkus000000 000000 ## This file should be placed in the root directory of your project. ## Then modify the CMakeLists.txt file in the root directory of your ## project to incorporate the testing dashboard. ## # The following are required to uses Dart and the Cdash dashboard ## ENABLE_TESTING() ## INCLUDE(CTest) set(CTEST_PROJECT_NAME "CGreen") set(CTEST_NIGHTLY_START_TIME "00:00:00 EST") set(CTEST_DROP_METHOD "http") set(CTEST_DROP_SITE "my.cdash.org") set(CTEST_DROP_LOCATION "/submit.php?project=CGreen") set(CTEST_DROP_SITE_CDASH TRUE) libdbi-drivers-0.9.0/tests/cgreen/DefineOptions.cmake000644 001750 001750 00000000236 11421144144 023441 0ustar00markusmarkus000000 000000 option(WITH_STATIC_LIBRARY "Build with a static library" OFF) option(WITH_UNIT_TESTS "Build unit tests" OFF) option(WITH_DOCS "Build with documentation" OFF) libdbi-drivers-0.9.0/tests/cgreen/LICENSE000644 001750 001750 00000063471 11421144144 020710 0ustar00markusmarkus000000 000000 GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 Copyright (C) 1991, 1999 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. GNU LESSER GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. , 1 April 1990 Ty Coon, President of Vice That's all there is to it! libdbi-drivers-0.9.0/tests/cgreen/README.osx000644 001750 001750 00000000000 11421144144 021346 0ustar00markusmarkus000000 000000 libdbi-drivers-0.9.0/tests/cgreen/README.win32000644 001750 001750 00000000000 11421144144 021477 0ustar00markusmarkus000000 000000 libdbi-drivers-0.9.0/tests/cgreen/VERSION000644 001750 001750 00000000011 11421144144 020730 0ustar00markusmarkus000000 000000 1.0beta1 libdbi-drivers-0.9.0/tests/cgreen/config.h.cmake000644 001750 001750 00000002117 11421144144 022366 0ustar00markusmarkus000000 000000 /* Name of package */ #cmakedefine PACKAGE "${APPLICATION_NAME}" /* Version number of package */ #cmakedefine VERSION "${APPLICATION_VERSION}" #cmakedefine LOCALEDIR "${LOCALE_INSTALL_DIR}" #cmakedefine DATADIR "${DATADIR}" #cmakedefine LIBDIR "${LIBDIR}" #cmakedefine PLUGINDIR "${PLUGINDIR}" #cmakedefine SYSCONFDIR "${SYSCONFDIR}" #cmakedefine BINARYDIR "${BINARYDIR}" #cmakedefine SOURCEDIR "${SOURCEDIR}" /************************** HEADER FILES *************************/ /* Define to 1 if you have the header file. */ #cmakedefine HAVE_PTY_H 1 /*************************** FUNCTIONS ***************************/ /* Define to 1 if you have the `cfmakeraw' function. */ #cmakedefine HAVE_CFMAKERAW 1 /*************************** LIBRARIES ***************************/ /* Define to 1 if you have the `z' library (-lz). */ #cmakedefine HAVE_LIBZ 1 /**************************** OPTIONS ****************************/ /* Define to 1 if you want to enable ZLIB */ #cmakedefine WITH_LIBZ 1 /* Define to 1 if you want to compile for W32API instead of *nix */ #cmakedefine USE_W32API 1 libdbi-drivers-0.9.0/tests/cgreen/cmake/000755 001750 001750 00000000000 11473577275 020776 5ustar00markusmarkus000000 000000 libdbi-drivers-0.9.0/tests/cgreen/contrib/000755 001750 001750 00000000000 11473577275 021356 5ustar00markusmarkus000000 000000 libdbi-drivers-0.9.0/tests/cgreen/doc/000755 001750 001750 00000000000 11473577276 020464 5ustar00markusmarkus000000 000000 libdbi-drivers-0.9.0/tests/cgreen/include/000755 001750 001750 00000000000 11473577276 021342 5ustar00markusmarkus000000 000000 libdbi-drivers-0.9.0/tests/cgreen/samples/000755 001750 001750 00000000000 11473577276 021363 5ustar00markusmarkus000000 000000 libdbi-drivers-0.9.0/tests/cgreen/tests/000755 001750 001750 00000000000 11473577276 021061 5ustar00markusmarkus000000 000000 libdbi-drivers-0.9.0/tests/cgreen/tests/CVS/000755 001750 001750 00000000000 11473577276 021514 5ustar00markusmarkus000000 000000 libdbi-drivers-0.9.0/tests/cgreen/tests/CMakeLists.txt000644 001750 001750 00000001345 11421144170 023574 0ustar00markusmarkus000000 000000 project(tests C) include_directories(${CGREEN_PUBLIC_INCLUDE_DIRS} ${CMAKE_BINARY_DIR}) set(test_SRCS all_tests.c assertion_tests.c breadcrumb_tests.c collector_tests.c constraint_tests.c cute_reporter_tests.c messaging_tests.c mocks_tests.c parameters_test.c slurp_test.c unit_tests.c vector_tests.c ) set(TEST_TARGET_LIBRARIES ${CGREEN_SHARED_LIBRARY} m) file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/some_file "Some stuff") if (WIN32) file(WRITE ${CMAKE_BINARY_DIR}/bin/tests/some_file "Some stuff") file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/bin/tests) endif (WIN32) macro_add_unit_test(test_cgreen "${test_SRCS}" "${TEST_TARGET_LIBRARIES}") add_test(test_cgreen_named test_cgreen integer_one_should_assert_true) libdbi-drivers-0.9.0/tests/cgreen/tests/CTestCustom.cmake000644 001750 001750 00000000163 11421144170 024250 0ustar00markusmarkus000000 000000 set(CTEST_CUSTOM_MAXIMUM_PASSED_TEST_OUTPUT_SIZE "2048") set(CTEST_CUSTOM_MAXIMUM_FAILED_TEST_OUTPUT_SIZE "2048") libdbi-drivers-0.9.0/tests/cgreen/tests/Makefile000644 001750 001750 00000044277 11421144170 022507 0ustar00markusmarkus000000 000000 # CMAKE generated file: DO NOT EDIT! # Generated by "Unix Makefiles" Generator, CMake Version 2.6 # Default target executed when no arguments are given to make. default_target: all .PHONY : default_target #============================================================================= # Special targets provided by cmake. # Disable implicit rules so canoncical targets will work. .SUFFIXES: # Remove some rules from gmake that .SUFFIXES does not remove. SUFFIXES = .SUFFIXES: .hpux_make_needs_suffix_list # Suppress display of executed commands. $(VERBOSE).SILENT: # A target that is always out of date. cmake_force: .PHONY : cmake_force #============================================================================= # Set environment variables for the build. # The shell in which to execute make rules. SHELL = /bin/sh # The CMake executable. CMAKE_COMMAND = /usr/bin/cmake # The command to remove a file. RM = /usr/bin/cmake -E remove -f # The program to use to edit the cache. CMAKE_EDIT_COMMAND = /usr/bin/ccmake # The top-level source directory on which CMake was run. CMAKE_SOURCE_DIR = /home/marcus/projects/cgreen # The top-level build directory on which CMake was run. CMAKE_BINARY_DIR = /home/marcus/projects/cgreen #============================================================================= # Targets provided globally by CMake. # Special rule for the target edit_cache edit_cache: @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake cache editor..." cd /home/marcus/projects/cgreen/tests && /usr/bin/ccmake -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) .PHONY : edit_cache # Special rule for the target edit_cache edit_cache/fast: edit_cache .PHONY : edit_cache/fast # Special rule for the target install install: preinstall @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..." cd /home/marcus/projects/cgreen/tests && /usr/bin/cmake -P cmake_install.cmake .PHONY : install # Special rule for the target install install/fast: preinstall/fast @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..." cd /home/marcus/projects/cgreen/tests && /usr/bin/cmake -P cmake_install.cmake .PHONY : install/fast # Special rule for the target install/local install/local: preinstall @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing only the local directory..." cd /home/marcus/projects/cgreen/tests && /usr/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake .PHONY : install/local # Special rule for the target install/local install/local/fast: install/local .PHONY : install/local/fast # Special rule for the target install/strip install/strip: preinstall @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing the project stripped..." cd /home/marcus/projects/cgreen/tests && /usr/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake .PHONY : install/strip # Special rule for the target install/strip install/strip/fast: install/strip .PHONY : install/strip/fast # Special rule for the target list_install_components list_install_components: @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Available install components are: \"binaries\" \"headers\" \"libraries\"" .PHONY : list_install_components # Special rule for the target list_install_components list_install_components/fast: list_install_components .PHONY : list_install_components/fast # Special rule for the target package package: preinstall @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Run CPack packaging tool..." cd /home/marcus/projects/cgreen/tests && /usr/bin/cpack --config /home/marcus/projects/cgreen/CPackConfig.cmake .PHONY : package # Special rule for the target package package/fast: package .PHONY : package/fast # Special rule for the target rebuild_cache rebuild_cache: @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake to regenerate build system..." cd /home/marcus/projects/cgreen/tests && /usr/bin/cmake -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) .PHONY : rebuild_cache # Special rule for the target rebuild_cache rebuild_cache/fast: rebuild_cache .PHONY : rebuild_cache/fast # Special rule for the target test test: @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running tests..." cd /home/marcus/projects/cgreen/tests && /usr/bin/ctest --force-new-ctest-process $(ARGS) .PHONY : test # Special rule for the target test test/fast: test .PHONY : test/fast # The main all target all: cmake_check_build_system cd /home/marcus/projects/cgreen && $(CMAKE_COMMAND) -E cmake_progress_start /home/marcus/projects/cgreen/CMakeFiles /home/marcus/projects/cgreen/tests/CMakeFiles/progress.make cd /home/marcus/projects/cgreen && $(MAKE) -f CMakeFiles/Makefile2 tests/all $(CMAKE_COMMAND) -E cmake_progress_start /home/marcus/projects/cgreen/CMakeFiles 0 .PHONY : all # The main clean target clean: cd /home/marcus/projects/cgreen && $(MAKE) -f CMakeFiles/Makefile2 tests/clean .PHONY : clean # The main clean target clean/fast: clean .PHONY : clean/fast # Prepare targets for installation. preinstall: all cd /home/marcus/projects/cgreen && $(MAKE) -f CMakeFiles/Makefile2 tests/preinstall .PHONY : preinstall # Prepare targets for installation. preinstall/fast: cd /home/marcus/projects/cgreen && $(MAKE) -f CMakeFiles/Makefile2 tests/preinstall .PHONY : preinstall/fast # clear depends depend: cd /home/marcus/projects/cgreen && $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1 .PHONY : depend # Convenience name for target. tests/CMakeFiles/test_cgreen.dir/rule: cd /home/marcus/projects/cgreen && $(MAKE) -f CMakeFiles/Makefile2 tests/CMakeFiles/test_cgreen.dir/rule .PHONY : tests/CMakeFiles/test_cgreen.dir/rule # Convenience name for target. test_cgreen: tests/CMakeFiles/test_cgreen.dir/rule .PHONY : test_cgreen # fast build rule for target. test_cgreen/fast: cd /home/marcus/projects/cgreen && $(MAKE) -f tests/CMakeFiles/test_cgreen.dir/build.make tests/CMakeFiles/test_cgreen.dir/build .PHONY : test_cgreen/fast all_tests.o: all_tests.c.o .PHONY : all_tests.o # target to build an object file all_tests.c.o: cd /home/marcus/projects/cgreen && $(MAKE) -f tests/CMakeFiles/test_cgreen.dir/build.make tests/CMakeFiles/test_cgreen.dir/all_tests.c.o .PHONY : all_tests.c.o all_tests.i: all_tests.c.i .PHONY : all_tests.i # target to preprocess a source file all_tests.c.i: cd /home/marcus/projects/cgreen && $(MAKE) -f tests/CMakeFiles/test_cgreen.dir/build.make tests/CMakeFiles/test_cgreen.dir/all_tests.c.i .PHONY : all_tests.c.i all_tests.s: all_tests.c.s .PHONY : all_tests.s # target to generate assembly for a file all_tests.c.s: cd /home/marcus/projects/cgreen && $(MAKE) -f tests/CMakeFiles/test_cgreen.dir/build.make tests/CMakeFiles/test_cgreen.dir/all_tests.c.s .PHONY : all_tests.c.s assertion_tests.o: assertion_tests.c.o .PHONY : assertion_tests.o # target to build an object file assertion_tests.c.o: cd /home/marcus/projects/cgreen && $(MAKE) -f tests/CMakeFiles/test_cgreen.dir/build.make tests/CMakeFiles/test_cgreen.dir/assertion_tests.c.o .PHONY : assertion_tests.c.o assertion_tests.i: assertion_tests.c.i .PHONY : assertion_tests.i # target to preprocess a source file assertion_tests.c.i: cd /home/marcus/projects/cgreen && $(MAKE) -f tests/CMakeFiles/test_cgreen.dir/build.make tests/CMakeFiles/test_cgreen.dir/assertion_tests.c.i .PHONY : assertion_tests.c.i assertion_tests.s: assertion_tests.c.s .PHONY : assertion_tests.s # target to generate assembly for a file assertion_tests.c.s: cd /home/marcus/projects/cgreen && $(MAKE) -f tests/CMakeFiles/test_cgreen.dir/build.make tests/CMakeFiles/test_cgreen.dir/assertion_tests.c.s .PHONY : assertion_tests.c.s breadcrumb_tests.o: breadcrumb_tests.c.o .PHONY : breadcrumb_tests.o # target to build an object file breadcrumb_tests.c.o: cd /home/marcus/projects/cgreen && $(MAKE) -f tests/CMakeFiles/test_cgreen.dir/build.make tests/CMakeFiles/test_cgreen.dir/breadcrumb_tests.c.o .PHONY : breadcrumb_tests.c.o breadcrumb_tests.i: breadcrumb_tests.c.i .PHONY : breadcrumb_tests.i # target to preprocess a source file breadcrumb_tests.c.i: cd /home/marcus/projects/cgreen && $(MAKE) -f tests/CMakeFiles/test_cgreen.dir/build.make tests/CMakeFiles/test_cgreen.dir/breadcrumb_tests.c.i .PHONY : breadcrumb_tests.c.i breadcrumb_tests.s: breadcrumb_tests.c.s .PHONY : breadcrumb_tests.s # target to generate assembly for a file breadcrumb_tests.c.s: cd /home/marcus/projects/cgreen && $(MAKE) -f tests/CMakeFiles/test_cgreen.dir/build.make tests/CMakeFiles/test_cgreen.dir/breadcrumb_tests.c.s .PHONY : breadcrumb_tests.c.s collector_tests.o: collector_tests.c.o .PHONY : collector_tests.o # target to build an object file collector_tests.c.o: cd /home/marcus/projects/cgreen && $(MAKE) -f tests/CMakeFiles/test_cgreen.dir/build.make tests/CMakeFiles/test_cgreen.dir/collector_tests.c.o .PHONY : collector_tests.c.o collector_tests.i: collector_tests.c.i .PHONY : collector_tests.i # target to preprocess a source file collector_tests.c.i: cd /home/marcus/projects/cgreen && $(MAKE) -f tests/CMakeFiles/test_cgreen.dir/build.make tests/CMakeFiles/test_cgreen.dir/collector_tests.c.i .PHONY : collector_tests.c.i collector_tests.s: collector_tests.c.s .PHONY : collector_tests.s # target to generate assembly for a file collector_tests.c.s: cd /home/marcus/projects/cgreen && $(MAKE) -f tests/CMakeFiles/test_cgreen.dir/build.make tests/CMakeFiles/test_cgreen.dir/collector_tests.c.s .PHONY : collector_tests.c.s constraint_tests.o: constraint_tests.c.o .PHONY : constraint_tests.o # target to build an object file constraint_tests.c.o: cd /home/marcus/projects/cgreen && $(MAKE) -f tests/CMakeFiles/test_cgreen.dir/build.make tests/CMakeFiles/test_cgreen.dir/constraint_tests.c.o .PHONY : constraint_tests.c.o constraint_tests.i: constraint_tests.c.i .PHONY : constraint_tests.i # target to preprocess a source file constraint_tests.c.i: cd /home/marcus/projects/cgreen && $(MAKE) -f tests/CMakeFiles/test_cgreen.dir/build.make tests/CMakeFiles/test_cgreen.dir/constraint_tests.c.i .PHONY : constraint_tests.c.i constraint_tests.s: constraint_tests.c.s .PHONY : constraint_tests.s # target to generate assembly for a file constraint_tests.c.s: cd /home/marcus/projects/cgreen && $(MAKE) -f tests/CMakeFiles/test_cgreen.dir/build.make tests/CMakeFiles/test_cgreen.dir/constraint_tests.c.s .PHONY : constraint_tests.c.s cute_reporter_tests.o: cute_reporter_tests.c.o .PHONY : cute_reporter_tests.o # target to build an object file cute_reporter_tests.c.o: cd /home/marcus/projects/cgreen && $(MAKE) -f tests/CMakeFiles/test_cgreen.dir/build.make tests/CMakeFiles/test_cgreen.dir/cute_reporter_tests.c.o .PHONY : cute_reporter_tests.c.o cute_reporter_tests.i: cute_reporter_tests.c.i .PHONY : cute_reporter_tests.i # target to preprocess a source file cute_reporter_tests.c.i: cd /home/marcus/projects/cgreen && $(MAKE) -f tests/CMakeFiles/test_cgreen.dir/build.make tests/CMakeFiles/test_cgreen.dir/cute_reporter_tests.c.i .PHONY : cute_reporter_tests.c.i cute_reporter_tests.s: cute_reporter_tests.c.s .PHONY : cute_reporter_tests.s # target to generate assembly for a file cute_reporter_tests.c.s: cd /home/marcus/projects/cgreen && $(MAKE) -f tests/CMakeFiles/test_cgreen.dir/build.make tests/CMakeFiles/test_cgreen.dir/cute_reporter_tests.c.s .PHONY : cute_reporter_tests.c.s messaging_tests.o: messaging_tests.c.o .PHONY : messaging_tests.o # target to build an object file messaging_tests.c.o: cd /home/marcus/projects/cgreen && $(MAKE) -f tests/CMakeFiles/test_cgreen.dir/build.make tests/CMakeFiles/test_cgreen.dir/messaging_tests.c.o .PHONY : messaging_tests.c.o messaging_tests.i: messaging_tests.c.i .PHONY : messaging_tests.i # target to preprocess a source file messaging_tests.c.i: cd /home/marcus/projects/cgreen && $(MAKE) -f tests/CMakeFiles/test_cgreen.dir/build.make tests/CMakeFiles/test_cgreen.dir/messaging_tests.c.i .PHONY : messaging_tests.c.i messaging_tests.s: messaging_tests.c.s .PHONY : messaging_tests.s # target to generate assembly for a file messaging_tests.c.s: cd /home/marcus/projects/cgreen && $(MAKE) -f tests/CMakeFiles/test_cgreen.dir/build.make tests/CMakeFiles/test_cgreen.dir/messaging_tests.c.s .PHONY : messaging_tests.c.s mocks_tests.o: mocks_tests.c.o .PHONY : mocks_tests.o # target to build an object file mocks_tests.c.o: cd /home/marcus/projects/cgreen && $(MAKE) -f tests/CMakeFiles/test_cgreen.dir/build.make tests/CMakeFiles/test_cgreen.dir/mocks_tests.c.o .PHONY : mocks_tests.c.o mocks_tests.i: mocks_tests.c.i .PHONY : mocks_tests.i # target to preprocess a source file mocks_tests.c.i: cd /home/marcus/projects/cgreen && $(MAKE) -f tests/CMakeFiles/test_cgreen.dir/build.make tests/CMakeFiles/test_cgreen.dir/mocks_tests.c.i .PHONY : mocks_tests.c.i mocks_tests.s: mocks_tests.c.s .PHONY : mocks_tests.s # target to generate assembly for a file mocks_tests.c.s: cd /home/marcus/projects/cgreen && $(MAKE) -f tests/CMakeFiles/test_cgreen.dir/build.make tests/CMakeFiles/test_cgreen.dir/mocks_tests.c.s .PHONY : mocks_tests.c.s parameters_test.o: parameters_test.c.o .PHONY : parameters_test.o # target to build an object file parameters_test.c.o: cd /home/marcus/projects/cgreen && $(MAKE) -f tests/CMakeFiles/test_cgreen.dir/build.make tests/CMakeFiles/test_cgreen.dir/parameters_test.c.o .PHONY : parameters_test.c.o parameters_test.i: parameters_test.c.i .PHONY : parameters_test.i # target to preprocess a source file parameters_test.c.i: cd /home/marcus/projects/cgreen && $(MAKE) -f tests/CMakeFiles/test_cgreen.dir/build.make tests/CMakeFiles/test_cgreen.dir/parameters_test.c.i .PHONY : parameters_test.c.i parameters_test.s: parameters_test.c.s .PHONY : parameters_test.s # target to generate assembly for a file parameters_test.c.s: cd /home/marcus/projects/cgreen && $(MAKE) -f tests/CMakeFiles/test_cgreen.dir/build.make tests/CMakeFiles/test_cgreen.dir/parameters_test.c.s .PHONY : parameters_test.c.s slurp_test.o: slurp_test.c.o .PHONY : slurp_test.o # target to build an object file slurp_test.c.o: cd /home/marcus/projects/cgreen && $(MAKE) -f tests/CMakeFiles/test_cgreen.dir/build.make tests/CMakeFiles/test_cgreen.dir/slurp_test.c.o .PHONY : slurp_test.c.o slurp_test.i: slurp_test.c.i .PHONY : slurp_test.i # target to preprocess a source file slurp_test.c.i: cd /home/marcus/projects/cgreen && $(MAKE) -f tests/CMakeFiles/test_cgreen.dir/build.make tests/CMakeFiles/test_cgreen.dir/slurp_test.c.i .PHONY : slurp_test.c.i slurp_test.s: slurp_test.c.s .PHONY : slurp_test.s # target to generate assembly for a file slurp_test.c.s: cd /home/marcus/projects/cgreen && $(MAKE) -f tests/CMakeFiles/test_cgreen.dir/build.make tests/CMakeFiles/test_cgreen.dir/slurp_test.c.s .PHONY : slurp_test.c.s unit_tests.o: unit_tests.c.o .PHONY : unit_tests.o # target to build an object file unit_tests.c.o: cd /home/marcus/projects/cgreen && $(MAKE) -f tests/CMakeFiles/test_cgreen.dir/build.make tests/CMakeFiles/test_cgreen.dir/unit_tests.c.o .PHONY : unit_tests.c.o unit_tests.i: unit_tests.c.i .PHONY : unit_tests.i # target to preprocess a source file unit_tests.c.i: cd /home/marcus/projects/cgreen && $(MAKE) -f tests/CMakeFiles/test_cgreen.dir/build.make tests/CMakeFiles/test_cgreen.dir/unit_tests.c.i .PHONY : unit_tests.c.i unit_tests.s: unit_tests.c.s .PHONY : unit_tests.s # target to generate assembly for a file unit_tests.c.s: cd /home/marcus/projects/cgreen && $(MAKE) -f tests/CMakeFiles/test_cgreen.dir/build.make tests/CMakeFiles/test_cgreen.dir/unit_tests.c.s .PHONY : unit_tests.c.s vector_tests.o: vector_tests.c.o .PHONY : vector_tests.o # target to build an object file vector_tests.c.o: cd /home/marcus/projects/cgreen && $(MAKE) -f tests/CMakeFiles/test_cgreen.dir/build.make tests/CMakeFiles/test_cgreen.dir/vector_tests.c.o .PHONY : vector_tests.c.o vector_tests.i: vector_tests.c.i .PHONY : vector_tests.i # target to preprocess a source file vector_tests.c.i: cd /home/marcus/projects/cgreen && $(MAKE) -f tests/CMakeFiles/test_cgreen.dir/build.make tests/CMakeFiles/test_cgreen.dir/vector_tests.c.i .PHONY : vector_tests.c.i vector_tests.s: vector_tests.c.s .PHONY : vector_tests.s # target to generate assembly for a file vector_tests.c.s: cd /home/marcus/projects/cgreen && $(MAKE) -f tests/CMakeFiles/test_cgreen.dir/build.make tests/CMakeFiles/test_cgreen.dir/vector_tests.c.s .PHONY : vector_tests.c.s # Help Target help: @echo "The following are some of the valid targets for this Makefile:" @echo "... all (the default if no target is provided)" @echo "... clean" @echo "... depend" @echo "... edit_cache" @echo "... install" @echo "... install/local" @echo "... install/strip" @echo "... list_install_components" @echo "... package" @echo "... rebuild_cache" @echo "... test" @echo "... test_cgreen" @echo "... all_tests.o" @echo "... all_tests.i" @echo "... all_tests.s" @echo "... assertion_tests.o" @echo "... assertion_tests.i" @echo "... assertion_tests.s" @echo "... breadcrumb_tests.o" @echo "... breadcrumb_tests.i" @echo "... breadcrumb_tests.s" @echo "... collector_tests.o" @echo "... collector_tests.i" @echo "... collector_tests.s" @echo "... constraint_tests.o" @echo "... constraint_tests.i" @echo "... constraint_tests.s" @echo "... cute_reporter_tests.o" @echo "... cute_reporter_tests.i" @echo "... cute_reporter_tests.s" @echo "... messaging_tests.o" @echo "... messaging_tests.i" @echo "... messaging_tests.s" @echo "... mocks_tests.o" @echo "... mocks_tests.i" @echo "... mocks_tests.s" @echo "... parameters_test.o" @echo "... parameters_test.i" @echo "... parameters_test.s" @echo "... slurp_test.o" @echo "... slurp_test.i" @echo "... slurp_test.s" @echo "... unit_tests.o" @echo "... unit_tests.i" @echo "... unit_tests.s" @echo "... vector_tests.o" @echo "... vector_tests.i" @echo "... vector_tests.s" .PHONY : help #============================================================================= # Special targets to cleanup operation of make. # Special rule to run CMake to check the build system integrity. # No rule that depends on this can have commands that come from listfiles # because they might be regenerated. cmake_check_build_system: cd /home/marcus/projects/cgreen && $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 .PHONY : cmake_check_build_system libdbi-drivers-0.9.0/tests/cgreen/tests/all_tests.c000644 001750 001750 00000002000 11421144170 023157 0ustar00markusmarkus000000 000000 #include TestSuite *messaging_tests(); TestSuite *assertion_tests(); TestSuite *vector_tests(); TestSuite *constraint_tests(); TestSuite *parameter_tests(); TestSuite *mock_tests(); TestSuite *breadcrumb_tests(); TestSuite *slurp_tests(); TestSuite *cute_reporter_tests(); TestSuite *unit_tests(); TestSuite *collector_tests(); int main(int argc, char **argv) { TestSuite *suite = create_test_suite(); add_suite(suite, messaging_tests()); add_suite(suite, assertion_tests()); add_suite(suite, vector_tests()); add_suite(suite, constraint_tests()); add_suite(suite, parameter_tests()); add_suite(suite, mock_tests()); add_suite(suite, breadcrumb_tests()); add_suite(suite, slurp_tests()); add_suite(suite, cute_reporter_tests()); add_suite(suite, collector_tests()); add_suite(suite, unit_tests()); if (argc > 1) { return run_single_test(suite, argv[1], create_text_reporter()); } return run_test_suite(suite, create_text_reporter()); } libdbi-drivers-0.9.0/tests/cgreen/tests/assertion_tests.c000644 001750 001750 00000014721 11421144170 024433 0ustar00markusmarkus000000 000000 #include #include #include Ensure integer_one_should_assert_true() { assert_true(1); } Ensure integer_zero_should_assert_false() { assert_false(0); } Ensure one_should_assert_equal_to_one() { assert_equal(1, 1); } Ensure zero_should_assert_not_equal_to_one() { assert_not_equal(0, 1); } Ensure one_should_assert_long_equal_to_one() { long x = 1; long y = 1; assert_equal(x, y); } Ensure zero_should_assert_long_not_equal_to_one() { long x = 0; long y = 1; assert_not_equal(x, y); } Ensure one_should_assert_unsigned_long_equal_to_one() { unsigned long x = 1; unsigned long y = 1; assert_equal(x, y); } Ensure zero_should_assert_unsigned_long_not_equal_to_one() { unsigned long x = 0; unsigned long y = 1; assert_not_equal(x, y); } Ensure one_should_assert_long_long_equal_to_one() { long long x = 1; long long y = 1; assert_equal(x, y); } Ensure zero_should_assert_long_long_not_equal_to_one() { long long x = 0; long long y = 1; assert_not_equal(x, y); } Ensure one_should_assert_unsigned_long_long_equal_to_one() { unsigned long long x = 1; unsigned long long y = 1; assert_equal(x, y); } Ensure zero_should_assert_unsigned_long_long_not_equal_to_one() { unsigned long long x = 0; unsigned long long y = 1; assert_not_equal(x, y); } Ensure one_should_assert_short_equal_to_one() { short x = 1; short y = 1; assert_equal(x, y); } Ensure zero_should_assert_short_not_equal_to_one() { short x = 0; short y = 1; assert_not_equal(x, y); } Ensure one_should_assert_unsigned_short_equal_to_one() { unsigned short x = 1; unsigned short y = 1; assert_equal(x, y); } Ensure zero_should_assert_unsigned_short_not_equal_to_one() { unsigned short x = 0; unsigned short y = 1; assert_not_equal(x, y); } Ensure one_should_assert_char_equal_to_one() { char x = 1; char y = 1; assert_equal(x, y); } Ensure zero_should_assert_char_not_equal_to_one() { char x = 0; char y = 1; assert_not_equal(x, y); } Ensure one_should_assert_unsigned_char_equal_to_one() { unsigned char x = 1; unsigned char y = 1; assert_equal(x, y); } Ensure zero_should_assert_unsigned_char_not_equal_to_one() { unsigned char x = 0; unsigned char y = 1; assert_not_equal(x, y); } Ensure one_should_assert_float_equal_to_one() { float x = 1; float y = 1; assert_double_equal(x, y); } Ensure zero_should_assert_float_not_equal_to_one() { float x = 0; float y = 1; assert_double_not_equal(x, y); } Ensure one_should_assert_double_equal_to_one() { assert_double_equal(1, 1); } Ensure zero_should_assert_double_not_equal_to_one() { assert_double_not_equal(0, 1); } Ensure one_should_assert_long_double_equal_to_one() { long double x = 1; long double y = 1; assert_double_equal(x, y); } Ensure zero_should_assert_long_double_not_equal_to_one() { long double x = 0; long double y = 1; assert_double_not_equal(x, y); } Ensure double_differences_do_not_matter_past_significant_figures() { significant_figures_for_assert_double_are(3); assert_double_equal(1.113, 1.115); assert_double_equal(1113, 1115); assert_double_equal(1113000, 1115000); } Ensure double_differences_matter_past_significant_figures() { significant_figures_for_assert_double_are(4); assert_double_not_equal(1.113, 1.115); assert_double_not_equal(1113, 1115); assert_double_not_equal(1113000, 1115000); } Ensure double_assertions_can_have_custom_messages() { significant_figures_for_assert_double_are(3); assert_double_equal_with_message(1.113, 1.115, "This should pass"); } Ensure identical_string_copies_should_match() { assert_string_equal("Hello", "Hello"); } Ensure case_different_strings_should_not_match() { assert_string_not_equal("Hello", "hello"); } Ensure null_string_should_only_match_another_null_string() { assert_string_equal(NULL, NULL); assert_string_equal("", ""); assert_string_not_equal(NULL, ""); assert_string_not_equal("", NULL); } Ensure null_string_should_only_match_another_null_string_even_with_messages() { assert_string_equal_with_message(NULL, NULL, "Oh dear"); assert_string_equal_with_message("", "", "Oh dear"); assert_string_not_equal_with_message(NULL, "", "Oh dear"); assert_string_not_equal_with_message("", NULL, "Oh dear"); } TestSuite *assertion_tests() { TestSuite *suite = create_test_suite(); add_test(suite, integer_one_should_assert_true); add_test(suite, integer_zero_should_assert_false); add_test(suite, one_should_assert_equal_to_one); add_test(suite, zero_should_assert_not_equal_to_one); add_test(suite, one_should_assert_long_equal_to_one); add_test(suite, zero_should_assert_long_not_equal_to_one); add_test(suite, one_should_assert_unsigned_long_equal_to_one); add_test(suite, zero_should_assert_unsigned_long_not_equal_to_one); add_test(suite, one_should_assert_long_long_equal_to_one); add_test(suite, zero_should_assert_long_long_not_equal_to_one); add_test(suite, one_should_assert_unsigned_long_long_equal_to_one); add_test(suite, zero_should_assert_unsigned_long_long_not_equal_to_one); add_test(suite, one_should_assert_short_equal_to_one); add_test(suite, zero_should_assert_short_not_equal_to_one); add_test(suite, one_should_assert_unsigned_short_equal_to_one); add_test(suite, zero_should_assert_unsigned_short_not_equal_to_one); add_test(suite, one_should_assert_char_equal_to_one); add_test(suite, zero_should_assert_char_not_equal_to_one); add_test(suite, one_should_assert_unsigned_char_equal_to_one); add_test(suite, zero_should_assert_unsigned_char_not_equal_to_one); add_test(suite, one_should_assert_float_equal_to_one); add_test(suite, zero_should_assert_float_not_equal_to_one); add_test(suite, one_should_assert_double_equal_to_one); add_test(suite, zero_should_assert_double_not_equal_to_one); add_test(suite, one_should_assert_long_double_equal_to_one); add_test(suite, zero_should_assert_long_double_not_equal_to_one); add_test(suite, double_differences_do_not_matter_past_significant_figures); add_test(suite, double_differences_matter_past_significant_figures); add_test(suite, double_assertions_can_have_custom_messages); add_test(suite, identical_string_copies_should_match); add_test(suite, case_different_strings_should_not_match); add_test(suite, null_string_should_only_match_another_null_string); add_test(suite, null_string_should_only_match_another_null_string_even_with_messages); return suite; } libdbi-drivers-0.9.0/tests/cgreen/tests/breadcrumb_tests.c000644 001750 001750 00000005630 11421144170 024531 0ustar00markusmarkus000000 000000 #include #include #include Ensure can_destroy_empty_breadcrumb() { destroy_breadcrumb(create_breadcrumb()); } Ensure last_name_pushed_is_current() { CgreenBreadcrumb *breadcrumb = create_breadcrumb(); push_breadcrumb(breadcrumb, "Hello"); assert_string_equal(get_current_from_breadcrumb(breadcrumb), "Hello"); destroy_breadcrumb(breadcrumb); } Ensure can_push_more_than_one_item() { CgreenBreadcrumb *breadcrumb = create_breadcrumb(); push_breadcrumb(breadcrumb, "Hello"); push_breadcrumb(breadcrumb, "Goodbye"); assert_string_equal(get_current_from_breadcrumb(breadcrumb), "Goodbye"); } Ensure popping_item_takes_us_back_to_the_previous_item() { CgreenBreadcrumb *breadcrumb = create_breadcrumb(); push_breadcrumb(breadcrumb, "Hello"); push_breadcrumb(breadcrumb, "Goodbye"); pop_breadcrumb(breadcrumb); assert_string_equal(get_current_from_breadcrumb(breadcrumb), "Hello"); } Ensure empty_breadcrumb_has_null_as_current() { CgreenBreadcrumb *breadcrumb = create_breadcrumb(); assert_equal(get_current_from_breadcrumb(breadcrumb), NULL); } Ensure popping_last_name_leaves_breadcrumb_empty() { CgreenBreadcrumb *breadcrumb = create_breadcrumb(); push_breadcrumb(breadcrumb, "Hello"); pop_breadcrumb(breadcrumb); assert_equal(get_current_from_breadcrumb(breadcrumb), NULL); } void mock_walker(const char *name, void *memo) { mock(name, memo); } Ensure empty_breadcrumb_does_not_trigger_walker() { expect_never(mock_walker); CgreenBreadcrumb *breadcrumb = create_breadcrumb(); walk_breadcrumb(breadcrumb, &mock_walker, NULL); } Ensure single_item_breadcrumb_does_calls_walker_only_once() { expect(mock_walker, want_string(name, "Hello")); CgreenBreadcrumb *breadcrumb = create_breadcrumb(); push_breadcrumb(breadcrumb, "Hello"); walk_breadcrumb(breadcrumb, &mock_walker, NULL); } Ensure double_item_breadcrumb_does_calls_walker_only_once() { expect(mock_walker, want_string(name, "Hello")); expect(mock_walker, want_string(name, "Goodbye")); CgreenBreadcrumb *breadcrumb = create_breadcrumb(); push_breadcrumb(breadcrumb, "Hello"); push_breadcrumb(breadcrumb, "Goodbye"); walk_breadcrumb(breadcrumb, &mock_walker, NULL); } TestSuite *breadcrumb_tests() { TestSuite *suite = create_test_suite(); add_test(suite, can_destroy_empty_breadcrumb); add_test(suite, last_name_pushed_is_current); add_test(suite, can_push_more_than_one_item); add_test(suite, popping_item_takes_us_back_to_the_previous_item); add_test(suite, empty_breadcrumb_has_null_as_current); add_test(suite, popping_last_name_leaves_breadcrumb_empty); add_test(suite, empty_breadcrumb_does_not_trigger_walker); add_test(suite, single_item_breadcrumb_does_calls_walker_only_once); add_test(suite, double_item_breadcrumb_does_calls_walker_only_once); return suite; } libdbi-drivers-0.9.0/tests/cgreen/tests/collector_tests.c000644 001750 001750 00000000661 11421144170 024410 0ustar00markusmarkus000000 000000 #include #include #include Ensure a_test_that_passes() { assert_true(1); } Ensure another_test_that_passes() { assert_true(1); } TestSuite *confuse_the_collector(TestSuite *suite, const char *ignored) { return suite; } TestSuite *collector_tests() { TestSuite *suite = create_test_suite(); add_tests(confuse_the_collector(suite, "\"(")); return suite; } libdbi-drivers-0.9.0/tests/cgreen/tests/constraint_tests.c000644 001750 001750 00000010614 11421144170 024605 0ustar00markusmarkus000000 000000 #include #include #include Ensure can_construct_and_destroy_an_want_constraint() { Constraint *any_old_want = want(label, 37); destroy_constraint(any_old_want); } Ensure parameter_name_gives_true_if_matching() { Constraint *any_old_want = want(label, 37); assert_equal(is_constraint_parameter(any_old_want, "wrong_label"), 0); assert_equal(is_constraint_parameter(any_old_want, "label"), 1); destroy_constraint(any_old_want); } Ensure equal_integers_compare_true_with_a_want_constraint() { Constraint *want_37 = want(label, 37); assert_equal(compare_constraint(want_37, 37), 1); destroy_constraint(want_37); } Ensure equal_pointers_compare_true_with_a_want_constraint() { Constraint *want_pointed_at_37 = want(label, (void *)37); assert_equal(compare_constraint(want_pointed_at_37, (void *)37), 1); assert_equal(compare_constraint(want_pointed_at_37, (void *)36), 0); destroy_constraint(want_pointed_at_37); } Ensure can_construct_and_destroy_a_want_string_constraint() { Constraint *any_old_string_want = want_string(label, "Hello"); destroy_constraint(any_old_string_want); } Ensure can_compare_strings_as_equal() { Constraint *want_hello = want_string(label, "Hello"); assert_equal(compare_constraint(want_hello, "Hello"), 1); assert_equal(compare_constraint(want_hello, "Goodbye"), 0); destroy_constraint(want_hello); } Ensure can_compare_null_strings_as_well_as_real_ones() { Constraint *want_hello = want_string(label, "Hello"); assert_equal(compare_constraint(want_hello, NULL), 0); destroy_constraint(want_hello); } Ensure can_expect_null_strings_as_well_as_real_ones() { Constraint *want_hello = want_string(label, NULL); assert_equal(compare_constraint(want_hello, NULL), 1); assert_equal(compare_constraint(want_hello, "Hello"), 0); destroy_constraint(want_hello); } Ensure equal_doubles_compare_true_with_a_want_double_constraint() { Constraint *want_37 = want_double(label, 37.0); assert_equal(compare_constraint(want_37, box_double(37.0)), 1); destroy_constraint(want_37); } Ensure unequal_doubles_compare_false_with_a_want_double_constraint() { Constraint *want_37 = want_double(label, 37.0); assert_equal(compare_constraint(want_37, box_double(36.0)), 0); destroy_constraint(want_37); } Ensure constraints_on_doubles_respect_significant_figure_setting() { significant_figures_for_assert_double_are(2); Constraint *want_337 = want_double(label, 337.0); assert_equal(compare_constraint(want_337, box_double(339.0)), 1); significant_figures_for_assert_double_are(3); assert_equal(compare_constraint(want_337, box_double(339.0)), 0); destroy_constraint(want_337); } typedef struct { char* value; unsigned int length; } String; static int is_non_empty_string(const void* other) { String* our = (String*)other; return our->length != 0; } Ensure unequal_structs_with_same_value_for_specific_field_compare_true() { String name; name.value = "bob"; name.length = 3; Constraint *string_constraint = with(name, is_non_empty_string); assert_equal(compare_constraint(string_constraint, is_non_empty_string), 1); destroy_constraint(string_constraint); name.value = "tim"; name.length = 3; string_constraint = with(name, is_non_empty_string); assert_equal(compare_constraint(string_constraint, is_non_empty_string), 1); destroy_constraint(string_constraint); } TestSuite *constraint_tests() { TestSuite *suite = create_test_suite(); add_test(suite, can_construct_and_destroy_an_want_constraint); add_test(suite, parameter_name_gives_true_if_matching); add_test(suite, equal_integers_compare_true_with_a_want_constraint); add_test(suite, equal_pointers_compare_true_with_a_want_constraint); add_test(suite, can_construct_and_destroy_a_want_string_constraint); add_test(suite, can_compare_strings_as_equal); add_test(suite, can_compare_null_strings_as_well_as_real_ones); add_test(suite, can_expect_null_strings_as_well_as_real_ones); add_test(suite, equal_doubles_compare_true_with_a_want_double_constraint); add_test(suite, unequal_doubles_compare_false_with_a_want_double_constraint); add_test(suite, constraints_on_doubles_respect_significant_figure_setting); add_test(suite, unequal_structs_with_same_value_for_specific_field_compare_true); return suite; } libdbi-drivers-0.9.0/tests/cgreen/tests/cute_reporter_tests.c000644 001750 001750 00000006674 11421144170 025316 0ustar00markusmarkus000000 000000 #include #include #include #include #include static char *output; static void clear_output() { output = (char*)malloc(1); *output = '\0'; } static char *concat(char *output, char *buffer) { output = realloc(output, strlen(output)+strlen(buffer)+1); strcat(output, buffer); return output; } static int mocked_printf(const char *format, ...) { char buffer[10000]; va_list ap; va_start(ap, format); vsprintf(buffer, format, ap); va_end(ap); output = concat(output, buffer); return strlen(output); } int strpos(char *whole, char *part) { int pos; if (strlen(whole) >= strlen(part)) for (pos = 0; pos < strlen(whole)-strlen(part); pos++) { if (strncmp(&whole[pos], part, strlen(part)) == 0) return pos; } return -1; } TestReporter *reporter; static void setup_cute_reporter_tests() { reporter = create_cute_reporter(); // We can not use setup_reporting() since we are running // inside an test suite which needs the real reporting // So we'll have to set up the messaging explicitly reporter->ipc = start_cgreen_messaging(666); clear_output(); set_cute_printer(reporter, mocked_printf); } static void assert_no_output() { assert_equal(strlen(output), 0); } static void assert_output_starts_with(char *string) { assert_equal(strpos(output, string), 0); } static void assert_output_contains(char *string) { assert_true(strpos(output, string) > 0); } Ensure will_report_beginning_of_suite() { reporter->start_suite(reporter, "suite_name", 2); assert_output_starts_with("#beginning"); assert_output_contains("suite_name"); } Ensure will_report_beginning_and_successful_finishing_of_test() { reporter->start_test(reporter, "test_name"); assert_output_starts_with("#starting"); assert_output_contains("test_name"); clear_output(); reporter->show_pass(reporter, "file", 2, "test_name", ""); assert_no_output(); // Must indicate test case completion before calling finish_test() send_reporter_completion_notification(reporter); reporter->finish_test(reporter, "test_name"); assert_output_starts_with("#success"); assert_output_contains("test_name"); } Ensure will_report_failing_of_test_only_once() { reporter->start_test(reporter, "test_name"); clear_output(); reporter->failures++; // Simulating a failed assert reporter->show_fail(reporter, "file", 2, "test_name", ""); assert_output_starts_with("#failure"); assert_output_contains("test_name"); clear_output(); reporter->failures++; // Simulating another failed assert reporter->show_fail(reporter, "file", 2, "test_name", ""); assert_no_output(); // Must indicate test case completion before calling finish_test() send_reporter_completion_notification(reporter); reporter->finish_test(reporter, "test_name"); assert_no_output(); } Ensure will_report_finishing_of_suite() { // Must indicate test suite completion before calling finish_suite() send_reporter_completion_notification(reporter); reporter->finish_suite(reporter, "suite_name"); assert_output_starts_with("#ending"); assert_output_contains("suite_name"); } TestSuite *cute_reporter_tests() { TestSuite *suite = create_test_suite(); setup(suite, setup_cute_reporter_tests); add_test(suite, will_report_beginning_of_suite); add_test(suite, will_report_beginning_and_successful_finishing_of_test); add_test(suite, will_report_failing_of_test_only_once); add_test(suite, will_report_finishing_of_suite); return suite; } libdbi-drivers-0.9.0/tests/cgreen/tests/messaging_tests.c000644 001750 001750 00000001575 11421144170 024404 0ustar00markusmarkus000000 000000 #include #include #include #include #include Ensure highly_nested_test_suite_should_still_complete() { assert_true(1); } TestSuite *highly_nested_test_suite() { TestSuite *suite = create_test_suite(); add_test(suite, highly_nested_test_suite_should_still_complete); int i; for (i = 0; i < 1000; i++) { TestSuite *nesting = create_test_suite(); add_suite(nesting, suite); suite = nesting; } return suite; } Ensure can_send_message() { int messaging = start_cgreen_messaging(33); send_cgreen_message(messaging, 99); assert_equal(receive_cgreen_message(messaging), 99); } TestSuite *messaging_tests() { TestSuite *suite = create_test_suite(); add_suite(suite, highly_nested_test_suite()); add_test(suite, can_send_message); return suite; } libdbi-drivers-0.9.0/tests/cgreen/tests/mocks_tests.c000644 001750 001750 00000013645 11421144170 023544 0ustar00markusmarkus000000 000000 #include #include #include static int integer_out() { return (int)mock(); } Ensure no_errors_thrown_when_no_presets() { integer_out(); } Ensure can_stub_an_integer_return() { will_return(integer_out, 3); assert_equal(integer_out(), 3); } Ensure repeats_return_value_when_set_to_always() { always_return(integer_out, 3); assert_equal(integer_out(), 3); assert_equal(integer_out(), 3); } Ensure can_stub_an_integer_return_sequence() { will_return(integer_out, 1); will_return(integer_out, 2); will_return(integer_out, 3); assert_equal(integer_out(), 1); assert_equal(integer_out(), 2); assert_equal(integer_out(), 3); } Ensure set_stub_just_to_be_cleared() { will_return(integer_out, 1); } Ensure confirm_stub_is_reset_between_tests() { will_return(integer_out, 2); assert_equal(integer_out(), 2); } Ensure stub_uses_the_always_value_once_hit() { will_return(integer_out, 1); will_return(integer_out, 2); always_return(integer_out, 3); will_return(integer_out, 4); assert_equal(integer_out(), 1); assert_equal(integer_out(), 2); assert_equal(integer_out(), 3); assert_equal(integer_out(), 3); assert_equal(integer_out(), 3); } static char *string_out() { return (char *)mock(); } Ensure can_stub_a_string_return() { will_return(string_out, "hello"); assert_string_equal(string_out(), "hello"); } Ensure can_stub_a_string_sequence() { will_return(string_out, "hello"); will_return(string_out, "goodbye"); assert_string_equal(string_out(), "hello"); assert_string_equal(string_out(), "goodbye"); } static void integer_in(int i) { mock(i); } Ensure expecting_once_with_any_parameters() { expect(integer_in); integer_in(3); } Ensure expecting_once_with_parameter_checks_that_parameter() { expect(integer_in, want(i, 3)); integer_in(3); } Ensure always_expect_keeps_affirming_parameter() { always_expect(integer_in, want(i, 3)); integer_in(3); integer_in(3); integer_in(3); } Ensure expect_a_sequence() { expect(integer_in, want(i, 1)); expect(integer_in, want(i, 2)); expect(integer_in, want(i, 3)); integer_in(1); integer_in(2); integer_in(3); } static void string_in(char *s) { mock(s); } Ensure string_expect_is_confirmed() { expect(string_in, want_string(s, "hello")); string_in("hello"); } Ensure string_expect_is_confirmed_even_when_null() { expect(string_in, want_string(s, NULL)); string_in(NULL); } Ensure string_expect_sequence() { expect(string_in, want_string(s, "hello")); expect(string_in, want_string(s, "goodbye")); string_in("hello"); string_in("goodbye"); } Ensure expecting_once_with_non_null_parameter_checks_that_parameter() { expect(string_in, want_non_null(s)); string_in("anything"); } static void double_in(double d) { mock(d(d)); } Ensure double_expect_is_confirmed() { expect(double_in, want_double(d, 3.14)); double_in(3.14); } Ensure double_expect_sequence() { expect(double_in, want_double(d, 1.0)); expect(double_in, want_double(d, 2.0)); double_in(1.0); double_in(2.0); } static void mixed_parameters(int i, char *s) { mock(i, s); } Ensure confirming_multiple_parameters_multiple_times() { expect(mixed_parameters, want(i, 1), want_string(s, "Hello")); expect(mixed_parameters, want(i, 2), want_string(s, "Goodbye")); mixed_parameters(1, "Hello"); mixed_parameters(2, "Goodbye"); } static int sample_mock(int i, char *s) { return (int)mock(i, s); } Ensure can_mock_full_function_call() { will_respond(sample_mock, 5, want(i, 666), want_string(s, "devil")); assert_equal(sample_mock(666, "devil"), 5); } Ensure when_called_with_always_should_not_tally_counts() { always_respond(sample_mock, 5, want(i, 666), want_string(s, "devil")); } Ensure can_mock_full_sequence() { will_respond(sample_mock, 5, want(i, 666), want_string(s, "devil")); will_respond(sample_mock, 6, want(i, 667), want_string(s, "beastie")); assert_equal(sample_mock(666, "devil"), 5); assert_equal(sample_mock(667, "beastie"), 6); } Ensure can_always_mock_full_function_call() { always_respond(sample_mock, 5, want(i, 666), want_string(s, "devil")); assert_equal(sample_mock(666, "devil"), 5); assert_equal(sample_mock(666, "devil"), 5); assert_equal(sample_mock(666, "devil"), 5); } Ensure can_declare_function_never_called() { expect_never(sample_mock); } TestSuite *mock_tests() { TestSuite *suite = create_test_suite(); add_test(suite, no_errors_thrown_when_no_presets); add_test(suite, can_stub_an_integer_return); add_test(suite, repeats_return_value_when_set_to_always); add_test(suite, can_stub_an_integer_return_sequence); add_test(suite, set_stub_just_to_be_cleared); add_test(suite, confirm_stub_is_reset_between_tests); add_test(suite, stub_uses_the_always_value_once_hit); add_test(suite, can_stub_a_string_return); add_test(suite, can_stub_a_string_sequence); add_test(suite, expecting_once_with_any_parameters); add_test(suite, expecting_once_with_parameter_checks_that_parameter); add_test(suite, always_expect_keeps_affirming_parameter); add_test(suite, expect_a_sequence); add_test(suite, string_expect_is_confirmed); add_test(suite, string_expect_is_confirmed_even_when_null); add_test(suite, string_expect_sequence); add_test(suite, expecting_once_with_non_null_parameter_checks_that_parameter); add_test(suite, double_expect_is_confirmed); add_test(suite, double_expect_sequence); add_test(suite, confirming_multiple_parameters_multiple_times); add_test(suite, can_mock_full_function_call); add_test(suite, when_called_with_always_should_not_tally_counts); add_test(suite, can_mock_full_sequence); add_test(suite, can_always_mock_full_function_call); add_test(suite, can_declare_function_never_called); return suite; } libdbi-drivers-0.9.0/tests/cgreen/tests/parameters_test.c000644 001750 001750 00000006006 11421144170 024401 0ustar00markusmarkus000000 000000 #include #include #include #include static CgreenVector *names = NULL; Ensure destroy_names() { destroy_cgreen_vector(names); names = NULL; } Ensure can_create_vector_of_no_parameters_and_destroy_it() { names = create_vector_of_names(""); assert_equal(cgreen_vector_size(names), 0); } Ensure can_read_single_parameter() { names = create_vector_of_names("a"); assert_equal(cgreen_vector_size(names), 1); assert_string_equal(cgreen_vector_get(names, 0), "a"); } Ensure can_read_two_parameters() { names = create_vector_of_names("a, b"); assert_equal(cgreen_vector_size(names), 2); assert_string_equal(cgreen_vector_get(names, 0), "a"); assert_string_equal(cgreen_vector_get(names, 1), "b"); } Ensure can_read_three_parameters() { names = create_vector_of_names("a, b, c"); assert_equal(cgreen_vector_size(names), 3); assert_string_equal(cgreen_vector_get(names, 0), "a"); assert_string_equal(cgreen_vector_get(names, 1), "b"); assert_string_equal(cgreen_vector_get(names, 2), "c"); } Ensure can_read_two_parameters_without_spaces() { names = create_vector_of_names("a,b"); assert_string_equal(cgreen_vector_get(names, 0), "a"); assert_string_equal(cgreen_vector_get(names, 1), "b"); } Ensure can_read_long_parameters() { names = create_vector_of_names("abacus, banana"); assert_string_equal(cgreen_vector_get(names, 0), "abacus"); assert_string_equal(cgreen_vector_get(names, 1), "banana"); } Ensure can_read_long_parameters_with_funky_names() { names = create_vector_of_names("a_b-c+d, +a-d_c/d"); assert_string_equal(cgreen_vector_get(names, 0), "a_b-c+d"); assert_string_equal(cgreen_vector_get(names, 1), "+a-d_c/d"); } Ensure can_read_two_parameters_with_varied_whitespace() { names = create_vector_of_names("\ra\t,\nb\t\t\t"); assert_string_equal(cgreen_vector_get(names, 0), "a"); assert_string_equal(cgreen_vector_get(names, 1), "b"); } Ensure can_strip_box_double_to_leave_original_name() { names = create_vector_of_names("box_double(a)"); assert_string_equal(cgreen_vector_get(names, 0), "a"); } Ensure can_strip_d_macro_to_leave_original_name() { names = create_vector_of_names("d(a)"); assert_string_equal(cgreen_vector_get(names, 0), "a"); } TestSuite *parameter_tests() { TestSuite *suite = create_test_suite(); teardown(suite, destroy_names); add_test(suite, can_create_vector_of_no_parameters_and_destroy_it); add_test(suite, can_read_single_parameter); add_test(suite, can_read_two_parameters); add_test(suite, can_read_three_parameters); add_test(suite, can_read_two_parameters_without_spaces); add_test(suite, can_read_long_parameters); add_test(suite, can_read_long_parameters_with_funky_names); add_test(suite, can_read_two_parameters_with_varied_whitespace); add_test(suite, can_strip_box_double_to_leave_original_name); add_test(suite, can_strip_d_macro_to_leave_original_name); return suite; } libdbi-drivers-0.9.0/tests/cgreen/tests/slurp_test.c000644 001750 001750 00000001745 11421144170 023410 0ustar00markusmarkus000000 000000 #include "config.h" #include #include #include #include #include static void assert_slurped(char *path, int gulp, const char *expected_contents); Ensure missing_file_gives_null() { assert_equal(slurp("not_there", 1024), NULL); } Ensure whole_file_can_be_read() { assert_slurped(BINARYDIR "/tests/some_file", 1024, "Some stuff"); } Ensure whole_file_can_be_read_in_multiple_small_blocks() { assert_slurped(BINARYDIR "/tests/some_file", 1, "Some stuff"); } static void assert_slurped(char *path, int gulp, const char *expected_contents) { char *buffer; buffer = slurp(path, gulp); assert_string_equal(buffer, expected_contents); free(buffer); } TestSuite *slurp_tests() { TestSuite *suite = create_test_suite(); add_test(suite, missing_file_gives_null); add_test(suite, whole_file_can_be_read); add_test(suite, whole_file_can_be_read_in_multiple_small_blocks); return suite; } libdbi-drivers-0.9.0/tests/cgreen/tests/unit_tests.c000644 001750 001750 00000002762 11421144170 023405 0ustar00markusmarkus000000 000000 #include #include #include #include Ensure count_tests_return_zero_for_empty_suite() { TestSuite *suite = create_test_suite(); assert_equal(count_tests(suite), 0); } Ensure count_tests_return_one_for_suite_with_one_testcase() { TestSuite *suite = create_test_suite(); add_test(suite, count_tests_return_one_for_suite_with_one_testcase); assert_equal(count_tests(suite), 1); } Ensure count_tests_return_four_for_four_nested_suite_with_one_testcase_each() { TestSuite *suite1 = create_test_suite(); TestSuite *suite2 = create_test_suite(); TestSuite *suite3 = create_test_suite(); TestSuite *suite4 = create_test_suite(); add_test(suite1, count_tests_return_one_for_suite_with_one_testcase); add_suite(suite1, suite2); add_test(suite2, count_tests_return_one_for_suite_with_one_testcase); add_suite(suite2, suite3); add_test(suite3, count_tests_return_one_for_suite_with_one_testcase); add_suite(suite3, suite4); add_test(suite4, count_tests_return_one_for_suite_with_one_testcase); assert_equal(count_tests(suite1), 4); } Ensure time_out_in_only_one_second() { die_in(1); sleep(10); } TestSuite *unit_tests() { TestSuite *suite = create_test_suite(); add_test(suite, count_tests_return_zero_for_empty_suite); add_test(suite, count_tests_return_one_for_suite_with_one_testcase); add_test(suite, count_tests_return_four_for_four_nested_suite_with_one_testcase_each); add_test(suite, time_out_in_only_one_second); return suite; } libdbi-drivers-0.9.0/tests/cgreen/tests/vector_tests.c000644 001750 001750 00000007577 11421144170 023741 0ustar00markusmarkus000000 000000 #include #include #include static CgreenVector *vector; static char a = 'a', b = 'b', c = 'c'; static void set_up_vector() { vector = create_cgreen_vector(NULL); } static void tear_down_vector() { destroy_cgreen_vector(vector); } Ensure new_vector_is_empty() { assert_equal(cgreen_vector_size(vector), 0); } Ensure single_item_gives_count_of_one() { cgreen_vector_add(vector, &a); assert_equal(cgreen_vector_size(vector), 1); } Ensure single_item_is_readable() { cgreen_vector_add(vector, &a); assert_equal(*(char *)cgreen_vector_get(vector, 0), 'a'); } Ensure double_item_gives_count_of_two() { cgreen_vector_add(vector, &a); cgreen_vector_add(vector, &b); assert_equal(cgreen_vector_size(vector), 2); } Ensure two_items_are_readable() { cgreen_vector_add(vector, &a); cgreen_vector_add(vector, &b); assert_equal(*(char *)cgreen_vector_get(vector, 0), 'a'); assert_equal(*(char *)cgreen_vector_get(vector, 1), 'b'); } Ensure can_extract_only_item() { cgreen_vector_add(vector, &a); assert_equal(*(char *)cgreen_vector_remove(vector, 0), 'a'); assert_equal(cgreen_vector_size(vector), 0); } Ensure can_extract_head_item() { cgreen_vector_add(vector, &a); cgreen_vector_add(vector, &b); cgreen_vector_add(vector, &c); assert_equal(*(char *)cgreen_vector_remove(vector, 0), 'a'); assert_equal(*(char *)cgreen_vector_get(vector, 0), 'b'); assert_equal(*(char *)cgreen_vector_get(vector, 1), 'c'); } Ensure can_extract_tail_item() { cgreen_vector_add(vector, &a); cgreen_vector_add(vector, &b); cgreen_vector_add(vector, &c); assert_equal(*(char *)cgreen_vector_remove(vector, 2), 'c'); assert_equal(*(char *)cgreen_vector_get(vector, 0), 'a'); assert_equal(*(char *)cgreen_vector_get(vector, 1), 'b'); } Ensure can_extract_middle_item() { cgreen_vector_add(vector, &a); cgreen_vector_add(vector, &b); cgreen_vector_add(vector, &c); assert_equal(*(char *)cgreen_vector_remove(vector, 1), 'b'); assert_equal(*(char *)cgreen_vector_get(vector, 0), 'a'); assert_equal(*(char *)cgreen_vector_get(vector, 1), 'c'); } static int times_called = 0; static void sample_destructor(void *item) { times_called++; } Ensure destructor_is_called_on_single_item() { CgreenVector *vector = create_cgreen_vector(&sample_destructor); cgreen_vector_add(vector, &a); destroy_cgreen_vector(vector); assert_equal(times_called, 1); } Ensure destructor_is_not_called_on_empty_vector() { CgreenVector *vector = create_cgreen_vector(&sample_destructor); destroy_cgreen_vector(vector); assert_equal(times_called, 0); } Ensure destructor_is_called_three_times_on_three_item_vector() { CgreenVector *vector = create_cgreen_vector(&sample_destructor); cgreen_vector_add(vector, &a); cgreen_vector_add(vector, &b); cgreen_vector_add(vector, &c); destroy_cgreen_vector(vector); assert_equal(times_called, 3); } Ensure vector_size_of_null_pointer_is_zero() { assert_equal(cgreen_vector_size(NULL), 0); } TestSuite *vector_tests() { TestSuite *suite = create_test_suite(); setup(suite, set_up_vector); teardown(suite, tear_down_vector); add_test(suite, new_vector_is_empty); add_test(suite, single_item_gives_count_of_one); add_test(suite, single_item_is_readable); add_test(suite, double_item_gives_count_of_two); add_test(suite, two_items_are_readable); add_test(suite, can_extract_only_item); add_test(suite, can_extract_head_item); add_test(suite, can_extract_tail_item); add_test(suite, can_extract_middle_item); add_test(suite, destructor_is_called_on_single_item); add_test(suite, destructor_is_not_called_on_empty_vector); add_test(suite, destructor_is_called_three_times_on_three_item_vector); add_test(suite, vector_size_of_null_pointer_is_zero); return suite; } libdbi-drivers-0.9.0/tests/cgreen/tests/CVS/Root000644 001750 001750 00000000112 11473577276 022354 0ustar00markusmarkus000000 000000 :ext:mhoenicka@libdbi-drivers.cvs.sourceforge.net:/cvsroot/libdbi-drivers libdbi-drivers-0.9.0/tests/cgreen/tests/CVS/Repository000644 001750 001750 00000000042 11473577276 023612 0ustar00markusmarkus000000 000000 libdbi-drivers/tests/cgreen/tests libdbi-drivers-0.9.0/tests/cgreen/tests/CVS/Entries000644 001750 001750 00000001323 11473577276 023047 0ustar00markusmarkus000000 000000 /CMakeLists.txt/1.2/Mon Jul 19 21:49:44 2010// /CTestCustom.cmake/1.2/Mon Jul 19 21:49:44 2010// /Makefile/1.2/Mon Jul 19 21:49:44 2010// /all_tests.c/1.2/Mon Jul 19 21:49:44 2010// /assertion_tests.c/1.2/Mon Jul 19 21:49:44 2010// /breadcrumb_tests.c/1.2/Mon Jul 19 21:49:44 2010// /collector_tests.c/1.2/Mon Jul 19 21:49:44 2010// /constraint_tests.c/1.2/Mon Jul 19 21:49:44 2010// /cute_reporter_tests.c/1.2/Mon Jul 19 21:49:44 2010// /messaging_tests.c/1.2/Mon Jul 19 21:49:44 2010// /mocks_tests.c/1.2/Mon Jul 19 21:49:44 2010// /parameters_test.c/1.2/Mon Jul 19 21:49:44 2010// /slurp_test.c/1.2/Mon Jul 19 21:49:44 2010// /unit_tests.c/1.2/Mon Jul 19 21:49:44 2010// /vector_tests.c/1.2/Mon Jul 19 21:49:44 2010// D libdbi-drivers-0.9.0/tests/cgreen/samples/CVS/000755 001750 001750 00000000000 11473577276 022016 5ustar00markusmarkus000000 000000 libdbi-drivers-0.9.0/tests/cgreen/samples/CMakeLists.txt000644 001750 001750 00000000147 11421144170 024075 0ustar00markusmarkus000000 000000 include_directories(${CGREEN_PUBLIC_INCLUDE_DIRS} ${CMAKE_BINARY_DIR}) add_executable(sample sample.c) libdbi-drivers-0.9.0/tests/cgreen/samples/Makefile000755 001750 001750 00000017272 11421144170 023007 0ustar00markusmarkus000000 000000 # CMAKE generated file: DO NOT EDIT! # Generated by "Unix Makefiles" Generator, CMake Version 2.6 # Default target executed when no arguments are given to make. default_target: all .PHONY : default_target #============================================================================= # Special targets provided by cmake. # Disable implicit rules so canoncical targets will work. .SUFFIXES: # Remove some rules from gmake that .SUFFIXES does not remove. SUFFIXES = .SUFFIXES: .hpux_make_needs_suffix_list # Suppress display of executed commands. $(VERBOSE).SILENT: # A target that is always out of date. cmake_force: .PHONY : cmake_force #============================================================================= # Set environment variables for the build. # The shell in which to execute make rules. SHELL = /bin/sh # The CMake executable. CMAKE_COMMAND = /usr/bin/cmake # The command to remove a file. RM = /usr/bin/cmake -E remove -f # The program to use to edit the cache. CMAKE_EDIT_COMMAND = /usr/bin/ccmake # The top-level source directory on which CMake was run. CMAKE_SOURCE_DIR = /home/marcus/projects/cgreen # The top-level build directory on which CMake was run. CMAKE_BINARY_DIR = /home/marcus/projects/cgreen #============================================================================= # Targets provided globally by CMake. # Special rule for the target edit_cache edit_cache: @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake cache editor..." cd /home/marcus/projects/cgreen/samples && /usr/bin/ccmake -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) .PHONY : edit_cache # Special rule for the target edit_cache edit_cache/fast: edit_cache .PHONY : edit_cache/fast # Special rule for the target install install: preinstall @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..." cd /home/marcus/projects/cgreen/samples && /usr/bin/cmake -P cmake_install.cmake .PHONY : install # Special rule for the target install install/fast: preinstall/fast @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..." cd /home/marcus/projects/cgreen/samples && /usr/bin/cmake -P cmake_install.cmake .PHONY : install/fast # Special rule for the target install/local install/local: preinstall @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing only the local directory..." cd /home/marcus/projects/cgreen/samples && /usr/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake .PHONY : install/local # Special rule for the target install/local install/local/fast: install/local .PHONY : install/local/fast # Special rule for the target install/strip install/strip: preinstall @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing the project stripped..." cd /home/marcus/projects/cgreen/samples && /usr/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake .PHONY : install/strip # Special rule for the target install/strip install/strip/fast: install/strip .PHONY : install/strip/fast # Special rule for the target list_install_components list_install_components: @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Available install components are: \"binaries\" \"headers\" \"libraries\"" .PHONY : list_install_components # Special rule for the target list_install_components list_install_components/fast: list_install_components .PHONY : list_install_components/fast # Special rule for the target package package: preinstall @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Run CPack packaging tool..." cd /home/marcus/projects/cgreen/samples && /usr/bin/cpack --config /home/marcus/projects/cgreen/CPackConfig.cmake .PHONY : package # Special rule for the target package package/fast: package .PHONY : package/fast # Special rule for the target rebuild_cache rebuild_cache: @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake to regenerate build system..." cd /home/marcus/projects/cgreen/samples && /usr/bin/cmake -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) .PHONY : rebuild_cache # Special rule for the target rebuild_cache rebuild_cache/fast: rebuild_cache .PHONY : rebuild_cache/fast # Special rule for the target test test: @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running tests..." cd /home/marcus/projects/cgreen/samples && /usr/bin/ctest --force-new-ctest-process $(ARGS) .PHONY : test # Special rule for the target test test/fast: test .PHONY : test/fast # The main all target all: cmake_check_build_system cd /home/marcus/projects/cgreen && $(CMAKE_COMMAND) -E cmake_progress_start /home/marcus/projects/cgreen/CMakeFiles /home/marcus/projects/cgreen/samples/CMakeFiles/progress.make cd /home/marcus/projects/cgreen && $(MAKE) -f CMakeFiles/Makefile2 samples/all $(CMAKE_COMMAND) -E cmake_progress_start /home/marcus/projects/cgreen/CMakeFiles 0 .PHONY : all # The main clean target clean: cd /home/marcus/projects/cgreen && $(MAKE) -f CMakeFiles/Makefile2 samples/clean .PHONY : clean # The main clean target clean/fast: clean .PHONY : clean/fast # Prepare targets for installation. preinstall: all cd /home/marcus/projects/cgreen && $(MAKE) -f CMakeFiles/Makefile2 samples/preinstall .PHONY : preinstall # Prepare targets for installation. preinstall/fast: cd /home/marcus/projects/cgreen && $(MAKE) -f CMakeFiles/Makefile2 samples/preinstall .PHONY : preinstall/fast # clear depends depend: cd /home/marcus/projects/cgreen && $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1 .PHONY : depend # Convenience name for target. samples/CMakeFiles/sample.dir/rule: cd /home/marcus/projects/cgreen && $(MAKE) -f CMakeFiles/Makefile2 samples/CMakeFiles/sample.dir/rule .PHONY : samples/CMakeFiles/sample.dir/rule # Convenience name for target. sample: samples/CMakeFiles/sample.dir/rule .PHONY : sample # fast build rule for target. sample/fast: cd /home/marcus/projects/cgreen && $(MAKE) -f samples/CMakeFiles/sample.dir/build.make samples/CMakeFiles/sample.dir/build .PHONY : sample/fast sample.o: sample.c.o .PHONY : sample.o # target to build an object file sample.c.o: cd /home/marcus/projects/cgreen && $(MAKE) -f samples/CMakeFiles/sample.dir/build.make samples/CMakeFiles/sample.dir/sample.c.o .PHONY : sample.c.o sample.i: sample.c.i .PHONY : sample.i # target to preprocess a source file sample.c.i: cd /home/marcus/projects/cgreen && $(MAKE) -f samples/CMakeFiles/sample.dir/build.make samples/CMakeFiles/sample.dir/sample.c.i .PHONY : sample.c.i sample.s: sample.c.s .PHONY : sample.s # target to generate assembly for a file sample.c.s: cd /home/marcus/projects/cgreen && $(MAKE) -f samples/CMakeFiles/sample.dir/build.make samples/CMakeFiles/sample.dir/sample.c.s .PHONY : sample.c.s # Help Target help: @echo "The following are some of the valid targets for this Makefile:" @echo "... all (the default if no target is provided)" @echo "... clean" @echo "... depend" @echo "... edit_cache" @echo "... install" @echo "... install/local" @echo "... install/strip" @echo "... list_install_components" @echo "... package" @echo "... rebuild_cache" @echo "... sample" @echo "... test" @echo "... sample.o" @echo "... sample.i" @echo "... sample.s" .PHONY : help #============================================================================= # Special targets to cleanup operation of make. # Special rule to run CMake to check the build system integrity. # No rule that depends on this can have commands that come from listfiles # because they might be regenerated. cmake_check_build_system: cd /home/marcus/projects/cgreen && $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 .PHONY : cmake_check_build_system libdbi-drivers-0.9.0/tests/cgreen/samples/sample.c000644 001750 001750 00000012262 11421144170 022763 0ustar00markusmarkus000000 000000 #include #include #include Ensure these_should_be_true() { assert_true(1); assert_false(1); } Ensure these_should_be_false() { assert_true(0); assert_false(0); } Ensure these_should_be_equal() { assert_equal(1, 1); assert_not_equal(1, 1); } Ensure these_should_not_be_equal() { assert_equal(0, 1); assert_not_equal(0, 1); } Ensure these_strings_should_match() { assert_string_equal("Hello", "Hello"); assert_string_not_equal("Hello", "Hello"); } Ensure these_strings_should_not_match() { assert_string_equal("Hello", "hello"); assert_string_not_equal("Hello", "hello"); } TestSuite *assertion_tests() { TestSuite *suite = create_test_suite(); add_test(suite, these_should_be_true); add_test(suite, these_should_be_false); add_test(suite, these_should_be_equal); add_test(suite, these_should_not_be_equal); add_test(suite, these_strings_should_match); add_test(suite, these_strings_should_not_match); return suite; } static int an_integer = 0; void set_up_an_integer() { an_integer = 1; } Ensure confirm_integer_is_set_up() { assert_equal_with_message(an_integer, 1, "Could not set up the integer"); an_integer = 2; } Ensure check_again_during_teardown() { assert_equal_with_message(an_integer, 1, "Integer was changed from 1 to %d", an_integer); } TestSuite *fixture_tests() { TestSuite *suite = create_test_suite(); setup(suite, set_up_an_integer); teardown(suite, check_again_during_teardown); add_test(suite, confirm_integer_is_set_up); return suite; } static void print_something_during_setup() { printf("\tI was called during setup\n"); } Ensure print_something_during_a_test() { printf("\tI am a test\n"); } static void print_something_during_teardown() { printf("\tI was called during teardown\n"); } TestSuite *visible_test() { TestSuite *suite = create_test_suite(); setup(suite, print_something_during_setup); add_test(suite, print_something_during_a_test); teardown(suite, print_something_during_teardown); return suite; } static void print_something_during_suite_setup() { printf("I was called during suite setup\n"); } static void print_something_during_suite_teardown() { printf("I was called during suite teardown\n"); } TestSuite *visible_fixtures() { TestSuite *suite = create_test_suite(); setup(suite, print_something_during_suite_setup); add_suite(suite, visible_test()); add_suite(suite, visible_test()); teardown(suite, print_something_during_suite_teardown); return suite; } int interference = 0; Ensure create_test_interference() { interference = 1; } Ensure prove_there_is_no_test_interference() { assert_equal(interference, 0); } Ensure seg_fault() { int *p = NULL; (*p)++; } Ensure time_out_in_only_one_second() { die_in(1); sleep(10); } TestSuite *isolation_tests() { TestSuite *suite = create_test_suite(); add_test(suite, create_test_interference); add_test(suite, prove_there_is_no_test_interference); add_test(suite, seg_fault); add_test(suite, time_out_in_only_one_second); return suite; } static void takes_integer(int i) { mock(i); } Ensure expectation_confirmed() { expect(takes_integer, want(i, 3)); takes_integer(3); } Ensure expectation_dashed() { expect(takes_integer, want(i, 3)); takes_integer(4); } static void mixed_parameters(int i, char *s) { mock(i, s); } Ensure confirming_multiple_parameters_multiple_times() { expect(mixed_parameters, want(i, 1), want_string(s, "Hello")); expect(mixed_parameters, want(i, 2), want_string(s, "Goodbye")); mixed_parameters(1, "Hello"); mixed_parameters(2, "Goodbye"); } Ensure breaking_multiple_parameters_multiple_times() { expect(mixed_parameters, want(i, 1), want_string(s, "Hello")); expect(mixed_parameters, want(i, 2), want_string(s, "Goodbye")); mixed_parameters(10, "Helloo"); mixed_parameters(20, "Gooodbye"); } Ensure uncalled_expectations_should_throw_errors() { expect(mixed_parameters, want(i, 1), want_string(s, "Hello")); } Ensure unexpected_call_should_throw_error() { expect_never(mixed_parameters); mixed_parameters(10, "Helloo"); } TestSuite *mock_tests() { TestSuite *suite = create_test_suite(); add_test(suite, expectation_confirmed); add_test(suite, expectation_dashed); add_test(suite, confirming_multiple_parameters_multiple_times); add_test(suite, breaking_multiple_parameters_multiple_times); add_test(suite, uncalled_expectations_should_throw_errors); add_test(suite, unexpected_call_should_throw_error); return suite; } Ensure take_so_long_that_ctrl_c_is_needed() { sleep(10); } int main(int argc, char **argv) { TestSuite *suite = create_test_suite(); add_suite(suite, assertion_tests()); add_suite(suite, fixture_tests()); add_suite(suite, visible_fixtures()); add_suite(suite, isolation_tests()); add_suite(suite, mock_tests()); if (argc > 1) { add_unit_test(suite, take_so_long_that_ctrl_c_is_needed); return run_single_test(suite, argv[1], create_text_reporter()); } return run_test_suite(suite, create_text_reporter()); } libdbi-drivers-0.9.0/tests/cgreen/samples/CVS/Root000644 001750 001750 00000000112 11473577276 022656 0ustar00markusmarkus000000 000000 :ext:mhoenicka@libdbi-drivers.cvs.sourceforge.net:/cvsroot/libdbi-drivers libdbi-drivers-0.9.0/tests/cgreen/samples/CVS/Repository000644 001750 001750 00000000044 11473577276 024116 0ustar00markusmarkus000000 000000 libdbi-drivers/tests/cgreen/samples libdbi-drivers-0.9.0/tests/cgreen/samples/CVS/Entries000644 001750 001750 00000000203 11473577276 023345 0ustar00markusmarkus000000 000000 /CMakeLists.txt/1.2/Mon Jul 19 21:49:44 2010// /Makefile/1.2/Mon Jul 19 21:49:44 2010// /sample.c/1.2/Mon Jul 19 21:49:44 2010// D libdbi-drivers-0.9.0/tests/cgreen/include/CVS/000755 001750 001750 00000000000 11530170575 021756 5ustar00markusmarkus000000 000000 libdbi-drivers-0.9.0/tests/cgreen/include/cgreen/000755 001750 001750 00000000000 11473577276 022605 5ustar00markusmarkus000000 000000 libdbi-drivers-0.9.0/tests/cgreen/include/CMakeLists.txt000644 001750 001750 00000000031 11421144164 024047 0ustar00markusmarkus000000 000000 add_subdirectory(cgreen) libdbi-drivers-0.9.0/tests/cgreen/include/cgreen/CVS/000755 001750 001750 00000000000 11473577276 023240 5ustar00markusmarkus000000 000000 libdbi-drivers-0.9.0/tests/cgreen/include/cgreen/CMakeLists.txt000644 001750 001750 00000000464 11421144164 025324 0ustar00markusmarkus000000 000000 project(cgreen-headers C) set(cgreen_HDRS cgreen.h unit.h reporter.h text_reporter.h cute_reporter.h cdash_reporter.h assertions.h constraint.h memory.h mocks.h ) install( FILES ${cgreen_HDRS} DESTINATION ${INCLUDE_INSTALL_DIR}/${APPLICATION_NAME} COMPONENT headers ) libdbi-drivers-0.9.0/tests/cgreen/include/cgreen/assertions.h000644 001750 001750 00000006600 11421144164 025125 0ustar00markusmarkus000000 000000 #ifndef ASSERTIONS_HEADER #define ASSERTIONS_HEADER #ifdef __cplusplus extern "C" { #endif #include #define pass() (*get_test_reporter()->assert_true)(get_test_reporter(), __FILE__, __LINE__, true, NULL) #define fail() (*get_test_reporter()->assert_true)(get_test_reporter(), __FILE__, __LINE__, false, NULL) #define assert_true(result) (*get_test_reporter()->assert_true)(get_test_reporter(), __FILE__, __LINE__, result, NULL) #define assert_false(result) (*get_test_reporter()->assert_true)(get_test_reporter(), __FILE__, __LINE__, ! result, NULL) #define assert_equal(tried, expected) assert_equal_(__FILE__, __LINE__, (intptr_t)tried, (intptr_t)expected) #define assert_not_equal(tried, expected) assert_not_equal_(__FILE__, __LINE__, (intptr_t)tried, (intptr_t)expected) #define assert_double_equal(tried, expected) assert_double_equal_(__FILE__, __LINE__, tried, expected) #define assert_double_not_equal(tried, expected) assert_double_not_equal_(__FILE__, __LINE__, tried, expected) #define assert_string_equal(tried, expected) assert_string_equal_(__FILE__, __LINE__, tried, expected) #define assert_string_not_equal(tried, expected) assert_string_not_equal_(__FILE__, __LINE__, tried, expected) #define assert_true_with_message(result, ...) (*get_test_reporter()->assert_true)(get_test_reporter(), __FILE__, __LINE__, result, __VA_ARGS__) #define assert_false_with_message(result, ...) (*get_test_reporter()->assert_true)(get_test_reporter(), __FILE__, __LINE__, ! result, __VA_ARGS__) #define assert_equal_with_message(tried, expected, ...) (*get_test_reporter()->assert_true)(get_test_reporter(), __FILE__, __LINE__, (tried == expected), __VA_ARGS__) #define assert_not_equal_with_message(tried, expected, ...) (*get_test_reporter()->assert_true)(get_test_reporter(), __FILE__, __LINE__, (tried != expected), __VA_ARGS__) #define assert_double_equal_with_message(tried, expected, ...) (*get_test_reporter()->assert_true)(get_test_reporter(), __FILE__, __LINE__, doubles_are_equal(tried, expected), __VA_ARGS__) #define assert_double_not_equal_with_message(tried, expected, ...) (*get_test_reporter()->assert_true)(get_test_reporter(), __FILE__, __LINE__, doubles_are_equal(tried, expected), __VA_ARGS__) #define assert_string_equal_with_message(tried, expected, ...) (*get_test_reporter()->assert_true)(get_test_reporter(), __FILE__, __LINE__, strings_are_equal(tried, expected), __VA_ARGS__) #define assert_string_not_equal_with_message(tried, expected, ...) (*get_test_reporter()->assert_true)(get_test_reporter(), __FILE__, __LINE__, ! strings_are_equal(tried, expected), __VA_ARGS__) void assert_equal_(const char *file, int line, intptr_t tried, intptr_t expected); void assert_not_equal_(const char *file, int line, intptr_t tried, intptr_t expected); void assert_double_equal_(const char *file, int line, double tried, double expected); void assert_double_not_equal_(const char *file, int line, double tried, double expected); void assert_string_equal_(const char *file, int line, const char *tried, const char *expected); void assert_string_not_equal_(const char *file, int line, const char *tried, const char *expected); void significant_figures_for_assert_double_are(int figures); const char *show_null_as_the_string_null(const char *string); int strings_are_equal(const char *tried, const char *expected); int doubles_are_equal(const double tried, const double expected); #ifdef __cplusplus } #endif #endif libdbi-drivers-0.9.0/tests/cgreen/include/cgreen/breadcrumb.h000644 001750 001750 00000001172 11421144164 025040 0ustar00markusmarkus000000 000000 #ifndef BREADCRUMB_HEADER #define BREADCRUMB_HEADER #ifdef __cplusplus extern "C" { #endif typedef struct CgreenBreadcrumb_ CgreenBreadcrumb; CgreenBreadcrumb *create_breadcrumb(void); void destroy_breadcrumb(CgreenBreadcrumb *breadcrumb); void push_breadcrumb(CgreenBreadcrumb *breadcrumb, const char *name); void pop_breadcrumb(CgreenBreadcrumb *breadcrumb); const char *get_current_from_breadcrumb(CgreenBreadcrumb *breadcrumb); int get_breadcrumb_depth(CgreenBreadcrumb *breadcrumb); void walk_breadcrumb(CgreenBreadcrumb *breadcrumb, void (*walker)(const char *, void *), void *memo); #ifdef __cplusplus } #endif #endif libdbi-drivers-0.9.0/tests/cgreen/include/cgreen/cdash_reporter.h000644 001750 001750 00000000670 11421144165 025741 0ustar00markusmarkus000000 000000 #ifndef CDASH_REPORTER_HEADER #define CDASH_REPORTER_HEADER #ifdef __cplusplus extern "C" { #endif #include #include typedef struct CDashInfo_ CDashInfo; struct CDashInfo_ { char *name; char *build; char *type; char *hostname; char *os_name; char *os_platform; char *os_release; char *os_version; }; TestReporter *create_cdash_reporter(CDashInfo *cdash); #ifdef __cplusplus } #endif #endif libdbi-drivers-0.9.0/tests/cgreen/include/cgreen/cgreen.h000644 001750 001750 00000000263 11421144170 024172 0ustar00markusmarkus000000 000000 #include #include #include #include #include #include libdbi-drivers-0.9.0/tests/cgreen/include/cgreen/collector_test_list.h000644 001750 001750 00000000332 11421144170 027004 0ustar00markusmarkus000000 000000 #ifndef COLLECTOR_TEST_LIST_HEADER #define COLLECTOR_TEST_LIST_HEADER void create_test_list(); void destroy_test_list(); void add_to_test_list(char *test_name); void reset_test_list(); void print_test_list(); #endif libdbi-drivers-0.9.0/tests/cgreen/include/cgreen/constraint.h000644 001750 001750 00000003137 11421144170 025116 0ustar00markusmarkus000000 000000 #ifndef CONSTRAINT_HEADER #define CONSTRAINT_HEADER #ifdef __cplusplus extern "C" { #endif #include #include #define want(parameter, x) want_(#parameter, (intptr_t)x) #define want_string(parameter, x) want_string_(#parameter, x) #define want_double(parameter, x) want_double_(#parameter, box_double(x)) #define want_non_null(parameter) want_non_null_(#parameter) #define with(parameter, matcher_function) with_(#parameter, #matcher_function, matcher_function) #define compare_constraint(c, x) (*c->compare)(c, (intptr_t)x) #define d(x) box_double(x) typedef union { double d; } BoxedDouble; typedef struct Constraint_ Constraint; struct Constraint_ { const char* name; const char *parameter; void (*destroy)(Constraint *); int (*compare)(Constraint *, intptr_t); void (*test)(Constraint *, const char *, intptr_t, const char *, int, TestReporter *); intptr_t expected; }; void destroy_constraint(void *constraint); int is_constraint_parameter(Constraint *constraint, const char *label); void test_constraint(Constraint *constraint, const char *function, intptr_t actual, const char *test_file, int test_line, TestReporter *reporter); Constraint *want_(const char *parameter, intptr_t expected); Constraint *want_non_null_(const char *parameter); Constraint *want_string_(const char *parameter, char *expected); Constraint *want_double_(const char *parameter, intptr_t expected); Constraint *with_(const char *parameter, const char* matcher_name, int (*comparison_function)(const void*)); intptr_t box_double(double d); #ifdef __cplusplus } #endif #endif libdbi-drivers-0.9.0/tests/cgreen/include/cgreen/cute_reporter.h000644 001750 001750 00000000506 11421144170 025611 0ustar00markusmarkus000000 000000 #ifndef CUTE_REPORTER_HEADER #define CUTE_REPORTER_HEADER #ifdef __cplusplus extern "C" { #endif #include typedef int Printer(const char *format, ...); TestReporter *create_cute_reporter(void); void set_cute_printer(TestReporter *reporter, Printer *printer); #ifdef __cplusplus } #endif #endif libdbi-drivers-0.9.0/tests/cgreen/include/cgreen/memory.h000644 001750 001750 00000000574 11421144170 024244 0ustar00markusmarkus000000 000000 #ifndef MEMORY_HEADER #define MEMORY_HEADER #ifdef __cplusplus extern "C" { #endif typedef struct MemoryPool_ MemoryPool; MemoryPool *create_memory_pool(); void free_memory_pool(MemoryPool *pool); void *memory_pool_allocate(MemoryPool *pool, size_t bytes); void *memory_pool_reallocate(MemoryPool *pool, void *pointer, size_t bytes); #ifdef __cplusplus } #endif #endif libdbi-drivers-0.9.0/tests/cgreen/include/cgreen/messaging.h000644 001750 001750 00000000413 11421144170 024701 0ustar00markusmarkus000000 000000 #ifndef MESSAGING_HEADER #define MESSAGING_HEADER #ifdef __cplusplus extern "C" { #endif int start_cgreen_messaging(int tag); void send_cgreen_message(int messaging, int result); int receive_cgreen_message(int messaging); #ifdef __cplusplus } #endif #endif libdbi-drivers-0.9.0/tests/cgreen/include/cgreen/mocks.h000644 001750 001750 00000002717 11421144170 024051 0ustar00markusmarkus000000 000000 #ifndef MOCKS_HEADER #define MOCKS_HEADER #ifdef __cplusplus extern "C" { #endif #include #include #include #include #define mock(...) mock_(__func__, #__VA_ARGS__, (intptr_t)__VA_ARGS__ +0) #define expect(f, ...) expect_(#f, __FILE__, __LINE__, (Constraint *)__VA_ARGS__ +0, (Constraint *)0) #define always_expect(f, ...) always_expect_(#f, __FILE__, __LINE__, (Constraint *)__VA_ARGS__ +0, (Constraint *)0) #define expect_never(f) expect_never_(#f, __FILE__, __LINE__) #define will_return(f, r) will_return_(#f, (intptr_t)r) #define always_return(f, r) always_return_(#f, (intptr_t)r) #define will_respond(f, r, ...) will_return_(#f, (intptr_t)r); expect_(#f, __FILE__, __LINE__, (Constraint *)__VA_ARGS__ +0, (Constraint *)0) #define always_respond(f, r, ...) always_return_(#f, (intptr_t)r); always_expect_(#f, __FILE__, __LINE__, (Constraint *)__VA_ARGS__ +0, (Constraint *)0) intptr_t mock_(const char *function, const char *parameters, ...); void expect_(const char *function, const char *test_file, int test_line, ...); void always_expect_(const char *function, const char *test_file, int test_line, ...); void expect_never_(const char *function, const char *test_file, int test_line); void will_return_(const char *function, intptr_t result); void always_return_(const char *function, intptr_t result); void clear_mocks(); void tally_mocks(TestReporter *reporter); #ifdef __cplusplus } #endif #endif libdbi-drivers-0.9.0/tests/cgreen/include/cgreen/parameters.h000644 001750 001750 00000000342 11421144170 025070 0ustar00markusmarkus000000 000000 #ifndef PARAMETERS_HEADER #define PARAMETERS_HEADER #ifdef __cplusplus extern "C" { #endif #include CgreenVector *create_vector_of_names(const char *parameters); #ifdef __cplusplus } #endif #endif libdbi-drivers-0.9.0/tests/cgreen/include/cgreen/reporter.h000644 001750 001750 00000002726 11421144170 024577 0ustar00markusmarkus000000 000000 #ifndef REPORTER_HEADER #define REPORTER_HEADER #ifdef __cplusplus extern "C" { #endif #include typedef struct TestContext_ TestContext; typedef struct TestReporter_ TestReporter; struct TestReporter_ { void (*destroy)(TestReporter *); void (*start_suite)(TestReporter *, const char *, const int); void (*start_test)(TestReporter *, const char *); void (*show_pass)(TestReporter *, const char *, int, const char *, va_list); void (*show_fail)(TestReporter *, const char *, int, const char *, va_list); void (*show_incomplete)(TestReporter *, const char *); void (*assert_true)(TestReporter *, const char *, int, int, const char *, ...); void (*finish_test)(TestReporter *, const char *); void (*finish_suite)(TestReporter *, const char *); int passes; int failures; int exceptions; void *breadcrumb; int ipc; void *memo; }; typedef void TestReportMemo; TestReporter *get_test_reporter(); TestReporter *create_reporter(); void setup_reporting(TestReporter *reporter); void destroy_reporter(TestReporter *reporter); void destroy_memo(TestReportMemo *memo); void reporter_start(TestReporter *reporter, const char *name); void reporter_start_suite(TestReporter *reporter, const char *name, const int count); void reporter_finish(TestReporter *reporter, const char *name); void add_reporter_result(TestReporter *reporter, int result); void send_reporter_completion_notification(TestReporter *reporter); #ifdef __cplusplus } #endif #endif libdbi-drivers-0.9.0/tests/cgreen/include/cgreen/slurp.h000644 001750 001750 00000000255 11421144170 024075 0ustar00markusmarkus000000 000000 #ifndef SLURP_HEADER #define SLURP_HEADER #ifdef __cplusplus extern "C" { #endif char *slurp(const char *file_name, int gulp); #ifdef __cplusplus } #endif #endif libdbi-drivers-0.9.0/tests/cgreen/include/cgreen/text_reporter.h000644 001750 001750 00000000327 11421144170 025636 0ustar00markusmarkus000000 000000 #ifndef TEXT_REPORTER_HEADER #define TEXT_REPORTER_HEADER #ifdef __cplusplus extern "C" { #endif #include TestReporter *create_text_reporter(void); #ifdef __cplusplus } #endif #endif libdbi-drivers-0.9.0/tests/cgreen/include/cgreen/unit.h000644 001750 001750 00000003561 11421144170 023712 0ustar00markusmarkus000000 000000 #ifndef UNIT_HEADER #define UNIT_HEADER #ifdef __cplusplus extern "C" { #endif #include #include /** * @defgroup unit_tests Unit Test Functions * * @brief Functions to create a Test Suite and adding tests. */ /** * @addtogroup unit_tests * @{ */ /** * @brief Creates a new test suite. * * @return A newly allocated test suite, NULL on error. * * @see destroy_test_suite() */ #define create_test_suite() create_named_test_suite(__func__) #define add_test(suite, test) add_test_(suite, (char *) #test, &test) #define add_tests(suite, ...) add_tests_(suite, #__VA_ARGS__, (CgreenTest *)__VA_ARGS__ +0) #define add_suite(owner, suite) add_suite_(owner, (char *) #suite, suite) #define setup(suite, function) setup_(suite, &function) #define teardown(suite, function) teardown_(suite, &function) #define Ensure static void typedef struct TestSuite_ TestSuite; typedef void CgreenTest(); /** * @brief Create a new test suite with a special name. * * @param name The name of the test suite. * * @return A newly allocated test suite, NULL on error. * * @see destroy_test_suite() */ TestSuite *create_named_test_suite(const char *name); /** * @brief Free the memory of a test suite. * * @param suite The test suite to free. */ void destroy_test_suite(TestSuite *suite); void add_test_(TestSuite *suite, char *name, CgreenTest *test); void add_tests_(TestSuite *suite, const char *names, ...); void add_suite_(TestSuite *owner, char *name, TestSuite *suite); void setup_(TestSuite *suite, void (*set_up)()); void teardown_(TestSuite *suite, void (*tear_down)()); void die_in(unsigned int seconds); int run_test_suite(TestSuite *suite, TestReporter *reporter); int run_single_test(TestSuite *suite, char *test, TestReporter *reporter); int count_tests(TestSuite *suite); /** * @} */ #ifdef __cplusplus } #endif #endif libdbi-drivers-0.9.0/tests/cgreen/include/cgreen/vector.h000644 001750 001750 00000001005 11421144170 024224 0ustar00markusmarkus000000 000000 #ifndef VECTOR_HEADER #define VECTOR_HEADER #ifdef __cplusplus extern "C" { #endif typedef struct CgreenVector_ CgreenVector; CgreenVector *create_cgreen_vector(void (*destructor)(void *)); void destroy_cgreen_vector(CgreenVector *vector); void cgreen_vector_add(CgreenVector *vector, void *item); void *cgreen_vector_remove(CgreenVector *vector, int position); void *cgreen_vector_get(CgreenVector *vector, int position); int cgreen_vector_size(CgreenVector *vector); #ifdef __cplusplus } #endif #endif libdbi-drivers-0.9.0/tests/cgreen/include/cgreen/CVS/Root000644 001750 001750 00000000112 11473577276 024100 0ustar00markusmarkus000000 000000 :ext:mhoenicka@libdbi-drivers.cvs.sourceforge.net:/cvsroot/libdbi-drivers libdbi-drivers-0.9.0/tests/cgreen/include/cgreen/CVS/Repository000644 001750 001750 00000000053 11473577276 025340 0ustar00markusmarkus000000 000000 libdbi-drivers/tests/cgreen/include/cgreen libdbi-drivers-0.9.0/tests/cgreen/include/cgreen/CVS/Entries000644 001750 001750 00000001365 11473577276 024601 0ustar00markusmarkus000000 000000 /CMakeLists.txt/1.2/Mon Jul 19 21:49:40 2010// /assertions.h/1.2/Mon Jul 19 21:49:40 2010// /breadcrumb.h/1.2/Mon Jul 19 21:49:40 2010// /cdash_reporter.h/1.2/Mon Jul 19 21:49:41 2010// /cgreen.h/1.2/Mon Jul 19 21:49:44 2010// /collector_test_list.h/1.2/Mon Jul 19 21:49:44 2010// /constraint.h/1.2/Mon Jul 19 21:49:44 2010// /cute_reporter.h/1.2/Mon Jul 19 21:49:44 2010// /memory.h/1.2/Mon Jul 19 21:49:44 2010// /messaging.h/1.2/Mon Jul 19 21:49:44 2010// /mocks.h/1.2/Mon Jul 19 21:49:44 2010// /parameters.h/1.2/Mon Jul 19 21:49:44 2010// /reporter.h/1.2/Mon Jul 19 21:49:44 2010// /slurp.h/1.2/Mon Jul 19 21:49:44 2010// /text_reporter.h/1.2/Mon Jul 19 21:49:44 2010// /unit.h/1.2/Mon Jul 19 21:49:44 2010// /vector.h/1.2/Mon Jul 19 21:49:44 2010// D libdbi-drivers-0.9.0/tests/cgreen/include/CVS/Root000644 001750 001750 00000000112 11473577276 022635 0ustar00markusmarkus000000 000000 :ext:mhoenicka@libdbi-drivers.cvs.sourceforge.net:/cvsroot/libdbi-drivers libdbi-drivers-0.9.0/tests/cgreen/include/CVS/Repository000644 001750 001750 00000000044 11473577276 024075 0ustar00markusmarkus000000 000000 libdbi-drivers/tests/cgreen/include libdbi-drivers-0.9.0/tests/cgreen/include/CVS/Entries000644 001750 001750 00000000074 11530170575 023313 0ustar00markusmarkus000000 000000 /CMakeLists.txt/1.2/Mon Jul 19 21:49:40 2010// D/cgreen//// libdbi-drivers-0.9.0/tests/cgreen/doc/CVS/000755 001750 001750 00000000000 11530170575 021100 5ustar00markusmarkus000000 000000 libdbi-drivers-0.9.0/tests/cgreen/doc/source/000755 001750 001750 00000000000 11473577276 021764 5ustar00markusmarkus000000 000000 libdbi-drivers-0.9.0/tests/cgreen/doc/tutorial_test/000755 001750 001750 00000000000 11473577276 023366 5ustar00markusmarkus000000 000000 libdbi-drivers-0.9.0/tests/cgreen/doc/cgreen-guide-en.ascii000644 001750 001750 00000275175 11421144150 024423 0ustar00markusmarkus000000 000000 Cgreen Unit Test for C language =============================== Marcus Baker João Henrique F. de Freitas :Author Initials: MB JHF Cgreen Quickstart Guide ----------------------- [[X01]] What is Cgreen? ~~~~~~~~~~~~~~~ Cgreen is a unit tester for the C software developer. This is a test automation and software quality assurance tool for development teams. The tool is completely open source published under the http://www.gnu.org/licenses/lgpl.html[LGPL] Unit testing is a development practice popularised by the agile development community. It is characterised by writing many small tests alongside the normal code. Often the tests are written before the code they are testing, in a tight test-code-refactor loop. Done this way, the practice is known as Test Driven Development. Cgreen supports this style of working. Unit tests are written in the same language as the code, in our case C. This avoids the mental overhead of constantly switching language, and also allows you to use any application code in your tests. The feature list is: - Fully composable test suites - 'setup()' and 'teardown()' for tests and test suites. - Each test runs in it's own process. - An isolated test can be run in a single process for debugging. - Ability to mock functions. - The reporting mechanism can be easily extended. This tool is for C programming, not C++. [[X06]] Installing Cgreen ~~~~~~~~~~~~~~~~~ There are two ways to install Cgreen in your system. The first is to use the RPM or DEB package provide by Cgreen Team and you cant fetch it at http://cgreen.sourceforge.net[Cgreen website project]. Do the download and install in your system using the normal procedures to your system. The second way is indicated for developers and advanced users. Basically this consist in fetch the sources of the project and compile them. For this is necessary the http://www.cmake.org[CMake] which is abuild system. It is a prerequisite. When you have the CMake tool, the steps are: ----------------------------------------- tar -zxpvf cgreen.tar.gz mkdir cgreen-build cd cgreen-build cmake ../cgreen make make test make install ----------------------------------------- This technical is called 'build out of source'. It compiling and install Cgreen outside of sources directory. These help the overall files organization. Is possible too use the +Makefile+. This file is used to compile and test Cgreen without the need of CMake tool. However it does not contain the rules to install in your system. Both methods will create within the directory +cgreen+ a unix library called +libcgreen.so+ which can be used in conjunction with the +cgreen.h+ header file to compile test code. The created library is installed in the system, by default in the +/usr/local/lib/+. We'll first write a test to confirm everything is working. Let's start with a simple test script with no tests, called +first_test.c+... [source,c] --------------------------------------- #include "cgreen/cgreen.h" int main(int argc, char **argv) { TestSuite *suite = create_test_suite(); return run_test_suite(suite, create_text_reporter()); } --------------------------------------- This is a very unexciting test. It just creates an empty test suite and runs it. It's usually easier to proceed in small steps, though, and this is the smallest one I could think of. The only complication is the +cgreen.h+ header file. Here I am assuming we have symlinked the Cgreen folder into the same location as our test script, or placed the Cgreen folder in the path. Building this test is, of course, trivial... ----------------------------- gcc -c first_test.c gcc first_test.o -lcgreen -o first_test ./first_test ----------------------------- Invoking the executable should give... ----------------------------- Running "main"... Completed "main": 0 passes, 0 failures, 0 exceptions. ----------------------------- All of the above rather assumes you are working in a Unix like environment, probably with 'gcc'. The code is pretty much standard C99, so any C compiler should work. Cgreen should compile on all systems that support the +sys/msg.h+ messaging library. This has been tested on Linux and Mac OSX so far, but not Windows, although that might work too. So far we have tested compilation, and that the test suite actually runs. Let's add a meaningless test or two so that you can see how it runs... [source,c] ----------------------------- #include "cgreen/cgreen.h" void this_test_should_pass() { assert_true(1); } void this_test_should_fail() { assert_true(0); } int main(int argc, char **argv) { TestSuite *suite = create_test_suite(); add_test(suite, this_test_should_pass); add_test(suite, this_test_should_fail); return run_test_suite(suite, create_text_reporter()); } ----------------------------- A test can be any function with a 'void (void)' signature. 'add_test()' is a macro, hence there is no '&' with the function pointer. On compiling and running, we now get the output... ----------------------------- Running "main"... Failure!: this_test_should_fail -> Problem at [first_test.c] line [8] Completed "main": 1 pass, 1 failure, 0 exceptions. ----------------------------- The 'TextReporter', created by the 'create_text_reporter()' call, is the simplest way to output the test results. It just streams the failures as text. Currently it's the only method supported. [[X07]] Five minutes doing TDD with Cgreen ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ For a more realistic example we need something to test. We'll pretend that we are writing a function to split the words of a sentence in place. It does this by replacing any spaces with string terminators and returns the number of conversions plus one. Here is an example of what we have in mind... [source,c] ------------------------------- char *sentence = strdup("Just the first test"); word_count = split_words(sentence); ------------------------------- 'sentence' should now point at "Just\0the\0first\0test". Not an obviously useful function, but we'll be using it for something more practical below. This time around we'll add a little more structure to our tests. Rather than having the test as a stand alone program, we'll separate the runner from the test cases. That way, multiple test suites of test cases can be included in the 'main()' runner file. This makes it less work to add more tests. Here is the, so far empty, test case in 'words_test.c'... [source,c] ------------------------------- #include "cgreen/cgreen.h" TestSuite *words_tests() { TestSuite *suite = create_test_suite(); return suite; } ------------------------------- Here is the 'all_tests.c' test runner... [source,c] ------------------------------- #include "cgreen/cgreen.h" TestSuite *words_tests(); int main(int argc, char **argv) { TestSuite *suite = create_test_suite(); add_suite(suite, words_tests()); if (argc > 1) { return run_single_test(suite, argv[1], create_text_reporter()); } return run_test_suite(suite, create_text_reporter()); } ------------------------------- Cgreen has two ways of running tests. The default is with each test run in it's own process. This is what happens if you invoke 'run_test_suite()'. While this makes all the tests independent, the constant 'fork()ing' can make the tests difficult to debug. To make debugging simpler, Cgreen does not fork() when only a single test is run by name with 'run_single_test()'. Building this scaffolding... ------------------------------- gcc -c words_test.c gcc -c all_tests.c gcc words_test.o all_tests.o -lcgreen -o all_tests ------------------------------- ...and executing the result gives the familiar... ------------------------------- Running "main"... Completed "main": 0 passes, 0 failures, 0 exceptions. ------------------------------- All this scaffolding is pure overhead, but from now on adding tests will be a lot easier. Here is a first test of 'split_words()'... [source,c] ------------------------------- #include "cgreen/cgreen.h"; #include "words.h"; #include ; void word_count_returned_from_split() { char *sentence = strdup("Birds of a feather"); int word_count = split_words(sentence); assert_equal(word_count, 4); free(sentence); } TestSuite *words_tests() { TestSuite *suite = create_test_suite(); add_test(suite, word_count_returned_from_split); return suite; } ------------------------------- The 'assert_equal()' macro takes in the two values to compare. With the default 'TextReporter' the message is sent to 'STDOUT'. To get this to compile we need to create the +words.h+ header file... [source,c] ------------------------------- int split_words(char *sentence); ------------------------------- ...and to get the code to link we need a stub function in 'words.c'... [source,c] ------------------------------- int split_words(char *sentence) { return 0; } ------------------------------- A full build later... ------------------------------- gcc -c all_tests.c gcc -c words_test.c gcc -c words.c gcc all_tests.o words_test.o words.o -lcgreen -o all_tests ./all_tests ------------------------------- ...and we get the more useful response... ------------------------------- Running "main"... Failure!: words_tests -> word_count_returned_from_split -> [0] should match [4] at [words_test.c] line [8] Completed "main": 0 passes, 1 failure, 0 exceptions. ------------------------------- The breadcrumb trail is the nesting of the tests. It goes from the test suites, which can nested in each other, through the test function, and finally to the message from the assertion. In the language of Cgreen, a failure is a mismatched assertion, an exception is accumulated when a test fails to complete for any reason. We could get this to pass just by returning the value 4. Doing TDD in really small steps, you would actually do this, but frankly this example is too simple. Instead we'll go straight to the refactoring... [source,c] -------------------------------- #include ; int split_words(char *sentence) { int i, count = 1; for (i = 0; i < strlen(sentence); i++) { if (sentence[i] == ' ') { count++; } } return count; } --------------------------------- There is a hidden problem here, but our tests still pass so we'll pretend we didn't notice. Time to add another test. We want to confirm that the string is broken into separate words... [source,c] --------------------------------- #include "cgreen/cgreen.h" #include "words.h" #include ; void word_count_returned_from_split() { ... } void spaces_should_be_converted_to_zeroes() { char *sentence = strdup("Birds of a feather"); split_words(sentence); int comparison = memcmp("Birds\0of\0a\0feather", sentence, strlen(sentence)); assert_equal(comparison, 0); free(sentence); } TestSuite *words_tests() { TestSuite *suite = create_test_suite(); add_test(suite, word_count_returned_from_split); add_test(suite, spaces_should_be_converted_to_zeroes); return suite; } ---------------------------------- Sure enough, we get a failure... ---------------------------------- Running "main"... Failure!: words_tests -> spaces_should_be_converted_to_zeroes -> [-32] should match [0] at [words_test.c] line [16] Completed "main": 1 pass, 1 failure, 0 exceptions. ---------------------------------- Not surprising given that we haven't written the code yet. The fix... [source,c] ---------------------------------- int split_words(char *sentence) { int i, count = 1; for (i = 0; i < strlen(sentence); i++) { if (sentence[i] == ' ') { sentence[i] = '\0'; count++; } } return count; } ---------------------------------- ...reveals our previous hack... ---------------------------------- Running "main"... Failure!: words_tests -> word_count_returned_from_split -> [2] should match [4] at [words_test.c] line [8] Completed "main": 1 pass, 1 failure, 0 exceptions. ---------------------------------- Our earlier test now fails, because we have affected the 'strlen()' call in our loop. Moving the length calculation out of the loop... [source,c] ---------------------------------- int split_words(char *sentence) { int i, count = 1, length = strlen(sentence); for (i = 0; i < length; i++) { ... } return count; } ---------------------------------- ...restores order... ---------------------------------- Running "main"... Completed "main": 2 passes, 0 failures, 0 exceptions. ---------------------------------- It's nice to keep the code under control while we are actually writing it, rather than debugging later when things are more complicated. That was pretty straight forward. Let's do something more interesting. [[X08]] What are mock functions? The next example is more realistic. Still in our +words.h+ file, we want to write a function that invokes a callback on each word in a sentence. Something like... [source,c] ---------------------------------- void act_on_word(const char *word, void *memo) { ... } words("This is a sentence", &act_on_word, &memo); ---------------------------------- Here the 'memo' pointer is just some accumulated data that the 'act_on_word()' callback is working with. Other people will write the 'act_on_word()' function and probably many other functions like it. The callback is actually a flex point, and not of interest right now. The function under test is the 'words()' function and we want to make sure it walks the sentence correctly, dispatching individual words as it goes. How to test this? Let's start with a one word sentence. In this case we would expect the callback to be invoked once with the only word, right? Here is the test for that... [source,c] --------------------------------- ... #include ... void mocked_callback(const char *word, void *memo) { mock(word, memo); } void single_word_sentence_invokes_callback_once() { expect(mocked_callback, want_string(word, "Word"), want(memo, NULL)); words("Word", &mocked_callback, NULL); } TestSuite *words_tests() { TestSuite *suite = create_test_suite(); ... add_test(suite, single_word_sentence_invokes_callback_once); return suite; } --------------------------------- What is the funny looking 'mock()' function? A mock is basically a programmable object. In C objects are limited to functions, so this is a mock function. The macro 'mock()' compares the incoming parameters with any expected values and dispatches messages to the test suite if there is a mismatch. It also returns any values that have been preprogrammed in the test. The test function is 'single_word_sentence_invokes_callback_once()'. Using the 'expect()' macro it programs the mock function to expect a single call. That call will have parameters "Word" and 'NULL'. If they don't match later, we will get a test failure. Only the test method, not the mock callback, is added to the test suite. For a successful compile and link, the +words.h+ file must now look like... [source,c] ---------------------------- int split_words(char *sentence); void words(const char *sentence, void (*walker)(const char *, void *), void *memo); ---------------------------- ...and the +words.c+ file should have the stub... [source,c] ---------------------------- void words(const char *sentence, void (*walker)(const char *, void *), void *memo) { } ---------------------------- This gives us the expected failing tests... ---------------------------- Running "main"... Failure!: words_tests -> single_word_sentence_invokes_callback_once -> Call was not made to function [mocked_callback] at [words_test.c] line [25] Completed "main": 2 passes, 1 failure, 0 exceptions. ---------------------------- Cgreen reports that the callback was never invoked. We can easily get the test to pass by filling out the implementation with... [source,c] ---------------------------- void words(const char *sentence, void (*walker)(const char *, void *), void *memo) { (*walker)(sentence, memo); } ---------------------------- That is, we just invoke it once with the whole string. This is a temporary measure to get us moving. Now everything should pass, although it's not much of a test yet. That was all pretty conventional, but let's tackle the trickier case of actually splitting the sentence. Here is the test function we will add to +words_test.c+... [source,c] ---------------------------- void phrase_invokes_callback_for_each_word() { expect(mocked_callback, want_string(word, "Birds")); expect(mocked_callback, want_string(word, "of")); expect(mocked_callback, want_string(word, "a")); expect(mocked_callback, want_string(word, "feather")); words("Birds of a feather", &mocked_callback, NULL); } ---------------------------- Each call is expected in sequence. Any failures, or left over calls, or extra calls, and we get failures. We can see all this when we run the tests... ---------------------------- Running "main"... Failure!: words_tests -> phrase_invokes_callback_for_each_word -> Wanted [Birds], but got [Birds of a feather] in function [mocked_callback] parameter [word] at [words_test.c] line [30] Failure!: words_tests -> phrase_invokes_callback_for_each_word -> Call was not made to function [mocked_callback] at [words_test.c] line [31] Failure!: words_tests -> phrase_invokes_callback_for_each_word -> Call was not made to function [mocked_callback] at [words_test.c] line [32] Failure!: words_tests -> phrase_invokes_callback_for_each_word -> Call was not made to function [mocked_callback] at [words_test.c] line [33] Completed "main": 4 passes, 4 failures, 0 exceptions. ----------------------------- The first failure tells the story. Our little 'words()' function called the mock callback with the entire sentence. This makes sense, because that was the hack to get to the next test. Although not relevant to this guide, I cannot resist getting these tests to pass. Besides, we get to use the function we created earlier... [source,c] ----------------------------- void words(const char *sentence, void (*walker)(const char *, void *), void *memo) { char *words = strdup(sentence); int word_count = split_words(words); char *word = words; while (word_count-- > 0) { (*walker)(word, memo); word = word + strlen(word) + 1; } free(words); } ------------------------------ And with some work we are rewarded with... ------------------------------ Running "main"... Completed "main": 8 passes, 0 failures, 0 exceptions. ------------------------------ More work than I like to admit as it took me three goes to get this right. I firstly forgot the '+ 1' added on to 'strlen()', then forgot to swap 'sentence' for 'word' in the '(*walker)()' call, and finally third time lucky. Of course running the tests each time made these mistakes very obvious. It's taken me far longer to write these paragraphs than it has to write the code. [[X02]] Building Cgreen test suites --------------------------- Cgreen is a tool for building unit tests in the C language. These are usually written alongside the production code by the programmer to prevent bugs. Even though the test suites are created by software developers, they are intended to be human readable C code, as part of their function is an executable specification. Used in this way, the test harness delivers constant quality assurance. In other words you'll get less bugs. [[X09]] Writing basic tests ~~~~~~~~~~~~~~~~~~~ Cgreen tests are simply C functions with no parameters and a 'void' return value. An example might be... [source,c] ----------------------------- static void strlen_of_hello_should_be_five() { assert_equal(strlen("Hello"), 5); } ----------------------------- The test function name can be anything you want. The 'assert_equal()' call is an example of an assertion. Assertions send messages to Cgreen, which in turn outputs the results. Here are the standard assertions... |========================================================= |Assertion |Description |assert_true(boolean) |Passes if boolean evaluates true |assert_false(boolean) |Fails if boolean evaluates true |assert_equal(first, second) |Passes if 'first == second' |assert_not_equal(first, second) |Passes if 'first != second' |assert_string_equal(char *, char *) |Uses 'strcmp()' and passes if the strings are equal |assert_string_not_equal(char *, char *) |Uses 'strcmp()' and fails if the strings are equal |========================================================= The boolean assertion macros accept an 'int' value. The equality assertions accept anything that can be cast to 'intptr_t' and simply perform an '==' operation. The string comparisons are slightly different in that they use the '' library function 'strcmp()'. If 'assert_equal()' is used on 'char *' pointers then the pointers have to point at the same string. Each assertion has a default message comparing the two values. If you want to substitute your own failure messages, then you must use the '*_with_message()' counterparts... |========================================================= |Assertion |assert_true_with_message(boolean, message, ...) |assert_false_with_message(boolean, message, ...) |assert_equal_with_message(first, second, message, ...) |assert_not_equal_with_message(first, second, message, ...) |assert_string_equal_with_message(char *, char *, message, ...) |assert_string_not_equal_with_message(char *, char *, message, ...) |========================================================= All these assertions have an additional 'char *' message parameter, which is the message you wished to display on failure. If this is set to 'NULL', then the default message is shown instead. The most useful assertion from this group is 'assert_true_with_message()' as you can use that to create your own assertion functions with your own messages. Actually the assertion macros have variable argument lists. The failure message acts like the template in 'printf()'. We could change the test above to be... [source,c] ----------------------------- static void strlen_of_hello_should_be_five() { const char *greeting = "Hello"; int length = strlen(greeting); assert_equal_with_message(length, 5, "[%s] should be 5, but was %d", greeting, length); } ----------------------------- A slightly more user friendly message when things go wrong. For the test above to work there needs to be a running test suite. We can create one expecially for this test like so... [source,c] ----------------------------- TestSuite *our_tests() { TestSuite *suite = create_test_suite(); add_test(suite, strlen_of_hello_should_be_five); return suite; } ----------------------------- In case you have spotted that 'strlen_of_hello_should_be_five()' should have an ampersand in front of it, 'add_test()' is a macro. The '&' is added automatically. To run the test suite, we call 'run_test_suite()' on it. This function cleans up the test suite after running it, so we can just write... [source,c] ----------------------------- run_test_suite(our_tests(), create_text_reporter()); ----------------------------- The results of assertions are ultimately delivered as passes and failures to a collection of callbacks defined in a 'TestReporter' structure. The only predefined one in Cgreen is the 'TextReporter' that delivers messages in plain text. A full test script now looks like... [source,c] ----------------------------- #include "cgreen/cgreen.h" #include static void strlen_of_hello_should_be_five() { assert_equal(strlen("Hello"), 5); } TestSuite *our_tests() { TestSuite *suite = create_test_suite(); add_test(suite, strlen_of_hello_should_be_five); return suite; } int main(int argc, char **argv) { return run_test_suite(our_tests(), create_text_reporter()); } ----------------------------- The return value of 'run_test_suite()' is a Unix exit code. Compliling and running gives... ----------------------------- gcc -c strlen_test.c gcc strlen_test.o -lcgreen -o strlen_test ./strlen_test Running "main"... Completed "main": 1 pass, 0 failures, 0 exceptions. ----------------------------- The test messages are only shown on failure. If we break our test... [source,c] ----------------------------- static void strlen_of_hello_should_be_five() { assert_equal(strlen("Hiya", 5); } ----------------------------- ...we'll get the helpful message... ----------------------------- Running "main"... Failure!: strlen_of_hello_should_be_five -> [5] shold be [4] at [strlen_test.c] line [6] Completed "main": 0 passes, 1 failure, 0 exceptions. ----------------------------- Cgreen appends the location of the test failure to our error string. Once we have a basic test scaffold up, it's pretty easy to add more tests. Adding a test of 'strlen()' with an empty string for example... [source,c] ----------------------------- ... static void strlen_of_empty_string_should_be_zero() { assert_equal(strlen("\0"), 0); } TestSuite *our_tests() { TestSuite *suite = create_test_suite(); add_test(suite, strlen_of_hello_should_be_five); add_test(suite, strlen_of_empty_string_should_be_zero); return suite; } ... ----------------------------- And so on. [[X10]] Set up and tear down ~~~~~~~~~~~~~~~~~~~~ It's common for test suites to have a lot of duplicate code, especially when setting up similar tests. Take this database code for example... [source,c] ----------------------------- #include "cgreen/cgreen.h" #include #include #include "person.h" static void create_schema() { MYSQL *connection = mysql_init(NULL); mysql_real_connect(connection, "localhost", "me", "secret", "test", 0, NULL, 0); mysql_query(connection, "create table people (name, varchar(255) unique)"); mysql_close(connection); } static void drop_schema() { MYSQL *connection = mysql_init(NULL); mysql_real_connect(connection, "localhost", "me", "secret", "test", 0, NULL, 0); mysql_query(connection, "drop table people"); mysql_close(connection); } static void can_add_person_to_database() { create_schema(); Person *person = create_person(); set_person_name(person, "Fred"); save_person(person); Person *found = find_person_by_name("Fred"); assert_string_equal(get_person_name(person), "Fred"); drop_schema(); } static void cannot_add_duplicate_person() { create_schema(); Person *person = create_person(); set_person_name(person, "Fred"); assert_true(save_person(person)); Person *duplicate = create_person(); set_person_name(duplicate, "Fred"); assert_false(save_person(duplicate)); drop_schema(); } TestSuite *person_tests() { TestSuite *suite = create_test_suite(); add_test(suite, can_add_person_to_database); add_test(suite, cannot_add_duplicate_person); return suite; } int main(int argc, char **argv) { return run_test_suite(person_tests(), create_text_reporter()); } -------------------------- We have already factored out the duplicate code into it's own functions 'create_scheme()' and 'drop_schema()', so things are not so bad. At least not yet. What happens when we get dozens of tests? For a test subject as compicated as a database http://www.martinfowler.com/eaaCatalog/activeRecord.html[ActiveRecord], having dozens f tests is very likely. We can get Cgreen to do some of the work for us by declaring these methods as 'setup()' and 'teardown()' functions in the test suite. Here is the new version... [source,c] ----------------------------- ... static void create_schema() { ... } static void drop_schema() { ... } static void can_add_person_to_database() { Person *person = create_person(); set_person_name(person, "Fred"); save_person(person); Person *found = find_person_by_name("Fred"); assert_string_equal(get_person_name(person), "Fred"); } static void cannot_add_duplicate_person() { Person *person = create_person(); set_person_name(person, "Fred"); assert_true(save_person(person)); Person *duplicate = create_person(); set_person_name(duplicate, "Fred"); assert_false(save_person(duplicate)); } TestSuite *person_tests() { TestSuite *suite = create_test_suite(); setup(suite, create_schema); teardown(suite, drop_schema); add_test(suite, can_add_person_to_database); add_test(suite, cannot_add_duplicate_person); return suite; } ... --------------------------- With this new arrangement Cgreen runs the 'create_schema()' function before each test, and the 'drop_schema()' function after each test. This saves some repetitive typing and reduces the chance of accidents. It also makes the tests more focused. The reason we try so hard to strip everything out of the test functions is that that the test suite acts as documentation. In our +person.h+ example we can easily see that 'Person' has some kind of name property, and that this value must be unique. For the tests to act like a readable specification we have to remove as much mechanical clutter as we can. A couple of details. Currently only one 'setup()' and 'teardown()' may be added to each 'TestSuite'. Also the 'teardown()' function may not be run if the test crashes, causing some test interference. This brings us nicely onto the next section... [[X11]] Each test in it's own process ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Consider this test method... [source,c] ----------------------------- void will_seg_fault() { int *p = NULL; (*p)++; } ----------------------------- Crashes are not something you would normally want to have in a test run. Not least because it will stop you receiving the very test output you need to tackle the problem. To prevent segmentation faults and other problems bringing down the test suites, Cgreen runs every test in it's own process. Just before the 'setup()' call, Cgreen 'fork()''s. The main process wait's for the test to complete normally or die. This includes the 'teardown()'. If the test process dies, an exception is reported and the main test process carries on. For example... [source,c] ----------------------------- #include "cgreen/cgreen.h" #include static void will_seg_fault() { int *p = NULL; (*p)++; } int main(int argc, char **argv) { TestSuite *suite = create_test_suite(); add_test(suite, will_seg_fault); run_test_suite(suite, create_text_reporter()); } ----------------------------- When built and run, this gives... ----------------------------- Running "main"... Exception!: will_seg_fault -> Test "will_seg_fault" failed to complete Completed "main": 0 passes, 0 failures, 1 exception. ----------------------------- The obvious thing to do now is to fire up the debugger. Unfortunately, the constant 'fork()''ing of Cgreen can be an extra complication too many when debugging. It's enough of a problem to find the bug. To get around this, and also to allow the running of one test at a time, Cgreen has the 'run_single_test()' function. The signatures of the two run methods are... - 'int run_test_suite(TestSuite *suite, TestReporter *reporter);' - 'int run_single_test(TestSuite *suite, char *test, TestReporter *reporter);' The extra parameter of 'run_single_test()', the 'test' string, is the name of the test to select. This could be any test, even in nested test suites (see below). Here is how we would use it to debug our crashing test... [source,c] ----------------------------- int main(int argc, char **argv) { TestSuite *suite = create_test_suite(); add_test(suite, will_seg_fault); run_single_test(suite, "will_seg_fault", create_text_reporter()); } ----------------------------- When run in this way, Cgreen will not 'fork()'. This deals with the segmentation fault case, but what about a process that fails to complete by getting stuck in a loop? Well, Cgreen will wait forever too. Using the C signal handlers, we can place a time limit on the process by sending it an interrupt. To save us writing this ourselves, Cgreen includes the 'die_in()' function to help us out. Here is an example of time limiting a test... [source,c] ----------------------------- ... static void will_seg_fault() { ... } static void this_would_stall() { die_in(1); while(0 == 0) { } } int main(int argc, char **argv) { TestSuite *suite = create_test_suite(); add_test(suite, will_seg_fault); add_test(suite, this_would_stall); run_test_suite(suite, create_text_reporter()); } --------------------------- When executed, the code will slow for a second, and then finish with... --------------------------- Running "main"... Exception!: will_seg_fault -> Test "will_seg_fault" failed to complete Exception!: will_stall -> Test "this_would_stall" failed to complete Completed "main": 0 passes, 0 failures, 2 exceptions. --------------------------- Note that you see the test results as they come in. Cgreen streams the results as they happen, making it easier to figure out where the test suite has problems. Of course, if you want to set a general time limit on all your tests, then you can add a 'die_in()' to a 'setup()' function. Cgreen will then apply the limit to all of them. [[X12]] Building composite test suites ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The 'TestSuite' is a composite structure. This means test suites can be added to test suites, building a tree structure that will be executed in order. Let's combine the 'strlen()' tests with the 'Person' tests above. Firstly we need to remove the 'main()' calls. E.g... [source,c] ----------------------------- #include "cgreen/cgreen.h" #include static void strlen_of_hello_should_be_five() { ... } static void strlen_of_empty_string_should_be_zero() { ... } TestSuite *our_tests() { TestSuite *suite = create_test_suite(); add_test(suite, strlen_of_hello_should_be_five); add_test(suite, strlen_of_empty_string_should_be_zero); return suite; } ---------------------------- Then we can write a small runner script with a new 'main()' function... [source,c] ----------------------------- #include "strlen_tests.c" #include "person_tests.c" TestSuite *our_tests(); TestSuite *person_tests(); int main(int argc, char **argv) { TestSuite *suite = create_test_suite(); add_suite(suite, our_tests()); add_suite(suite, person_tests()); if (argc > 1) { return run_single_test(suite, argv[1], create_text_reporter()); } return run_test_suite(suite, create_text_reporter()); } ----------------------- It's usually easier to place the 'TestSuite' prototypes in the runner scripts, rather than have lot's of header files. This is the same reasoning that let us drop the prototypes for the test functions in the actual test scripts. We can get away with this, because the tests are more about documentation than encapsulation. It's sometimes handy to be able to run just a single test from the command line, so we added a simple 'if' block to take the test name as an optional argument. The entire test suite will be searched for the named test. This trick also saves us a recomplile when we debug. We've placed each test suite in it's own file, but that is not necessary. We could build several test suites in the same file, even nesting them. We can even add mixtures of test functions and test suites to the same parent test suite. Loops will give trouble, however. If we do place several suites in the same file, then all the suites will be named the same in the breadcrumb trail in the test message. They will all be named after the function the create call sits in. If you want to get around this, or you just like to name your test suites, you can use 'create_named_test_suite()' instead of 'create_test_suite()'. This takes a single string parameter. In fact 'create_test_suite()' is just a macro that inserts the '__func__' constant into 'create_named_test_suite()'. What happens to 'setup()' and 'teardown()' in a 'TestSuite' that contains other 'TestSuite's? Well firstly, Cgreen does not 'fork()' when running a suite. It leaves it up to the child suite to 'fork()' the individual tests. This means that a 'setup()' and 'teardown()' will run in the main process. They will be run once for each child suite. We can use this to speed up our 'Person' tests above. Remember we were creating a new connection and closing it again in the fixtures. This means opening and closing a lot of connections. At the slight risk of some test interference, we could reuse the connection accross tests... [source,c] ----------------------- ... static MYSQL *connection; static void create_schema() { mysql_query(connection, "create table people (name, varchar(255) unique)"); } static void drop_schema() { mysql_query(connection, "drop table people"); } static void can_add_person_to_database() { ... } static void cannot_add_duplicate_person() { ... } void open_connection() { connection = mysql_init(NULL); mysql_real_connect(connection, "localhost", "me", "secret", "test", 0, NULL, 0); } void close_connection() { mysql_close(connection); } TestSuite *person_tests() { TestSuite *suite = create_test_suite(); setup(suite, create_schema); teardown(suite, drop_schema); add_test(suite, can_add_person_to_database); add_test(suite, cannot_add_duplicate_person); TestSuite *fixture = create_named_test_suite("Mysql fixture"); add_suite(fixture, suite); setup(fixture, open_connection); teardown(fixture, close_connection); return fixture; } ----------------------- The trick here is creating a test suite as a wrapper whose sole purpose to wrap the main test suite in the fixture. This is our 'fixture' pointer. This code is a little confusing, because we have two sets of fixtures in the same test script. We have the MySQL connection fixture. This is runs 'open_connection()' and 'close_connection()' just once at the beginning and end of the person tests. This is because the 'suite' pointer is the only member of 'fixture'. We also have the schema fixture, the 'create_schema()' and 'drop_schema()', which is run before and after every test. Those are still attached to the inner 'suite'. In the real world we would probably place the connection fixture in it's own file... [source,c] ----------------------- static MYSQL *connection; MYSQL *get_connection() { return connection; } static void open_connection() { connection = mysql_init(NULL); mysql_real_connect(connection, "localhost", "me", "secret", "test", 0, NULL, 0); } static void close_connection() { mysql_close(connection); } TestSuite *connection_fixture(TestSuite *suite) { TestSuite *fixture = create_named_test_suite("Mysql fixture"); add_suite(fixture, suite); setup(fixture, open_connection); teardown(fixture, close_connection); return fixture; } ----------------------- This allows the reuse of common fixtures across projects. [[X03]] Mocking functions with Cgreen ----------------------------- When testing you want certainty above all else. Random events destroy confidence in your test suite and force needless extra runs "to be sure". A good test places the subject under test into a tightly controlled environment. A test chamber if you like. This makes the tests fast, repeatable and reliable. To create a test chamber for testing code, we have to control any outgoing calls from the code under test. We won't believe our test failure if our code is making calls to the internet for example. The internet can fail all by itself. Not only do we not have total control, but it means we have to get dependent components working before we can test the higher level code. This makes it difficult to code top down. The solution to this dilemma is to write stub code for the components whilst the higher level code is written. This pollutes the code base with temporary code, and the test isolation disappears when the system is eventually fleshed out. The ideal is to have minimal stubs written for each individual test. Cgreen encourages this approach by making such tests easier to write. [[X13]] The problem with streams ~~~~~~~~~~~~~~~~~~~~~~~~ How do we test this code...? [source,c] ----------------------- char *read_paragraph(int (*read)(void *), void *stream) { int buffer_size = 0, length = 0; char *buffer = NULL; int ch; while ((ch = (*read)(stream)) != EOF) { if (++length > buffer_size) { buffer_size += 100; buffer = realloc(buffer, buffer_size + 1); } if ((buffer[length] = ch) == '\n') { break; } } return buffer; } ----------------------- This is a fairly generic stream filter that turns the incoming characters into C string paragraphs. Each call creates one paragraph, returning a pointer to it or returning 'NULL' if there is no paragraph. The paragraph has memory allocated to it and the stream is advanced ready for the next call. That's quite a bit of functionality, and there are plenty of nasty boundary conditions. I really want this code tested before I deploy it. The problem is the stream dependency. We could use a real stream, but that will cause all sorts of headaches. It makes the test of our paragraph formatter dependent on a working stream. It means we have to write the stream first, bottom up coding rather than top down. It means we will have to simulate stream failures - not easy. It will also mean setting up external resources. This is more work, will run slower, and could lead to spurious test failures. By contrast we could write a simulation of the stream for each test, called a "server stub". For example, when the stream is empty nothing should happen. We hopefully get 'NULL' from 'read_paragraph' when the stream is exhausted. That is, it just returns a steady stream of 'EOF's. [source,c] ----------------------- static int empty_stream(void *stream) { return EOF; } static void reading_lines_from_empty_stream_gives_null() { assert_equal(read_paragraph(&empty_stream, NULL), NULL); } TestSuite *stream_tests() { TestSuite *suite = create_test_suite(); add_test(suite, reading_lines_from_empty_stream_gives_null); return suite; } ----------------------- Our simulation is easy here, because our fake stream returns only one value. Things are harder when the function result changes from call to call as a real stream would. Simulating this would mean messing around with static variables and counters that are reset for each test. And of course, we will be writing quite a few stubs. Often a different one for each test. That's a lot of clutter. Cgreen handles this clutter for us by letting us write a single programmable function for all our tests. [[X14]] Record and playback ~~~~~~~~~~~~~~~~~~~ We can redo our example by creating a 'stub_stream()' function (any name will do)... [source,c] ----------------------- static int stub_stream(void *stream) { return (int)mock(); } ----------------------- Hardly longer that our trivial server stub above, it is just a macro to generate a return value, but we can reuse this in test after test. For our simple example above we just tell it to always return 'EOF'... [source,c] ----------------------- static int stub_stream(void *stream) { return (int)mock(); } static void reading_lines_from_empty_stream_gives_null() { always_return(stub_stream, EOF); assert_equal(read_paragraph(stub_stream, NULL), NULL); } ----------------------- The 'always_return()' macro takes as arguments the function name and the return value. We have told 'stub_stream()' to always return 'EOF' when called. Let's see if our production code actually works... ----------------------- Running "main"... Completed "main": 1 pass, 0 failures, 0 exceptions. ----------------------- So far, so good. On to the next test. If we want to test a one character line, we have to send the terminating 'EOF' or '"\n"' as well as the single character. Otherwise our code will loop forever, giving an infinite line of that character. Here is how we can do this... [source,c] ----------------------- static void one_character_stream_gives_one_character_line() { will_return(stub_stream, 'a'); will_return(stub_stream, EOF); char *line = read_paragraph(&stub_stream, NULL); assert_string_equal(line, "a"); free(line); } ----------------------- Unlike the 'always_return()' instruction, 'will_return()' sets just a single return value. It acts like a record and playback model. Successive instructions map out the return sequence that will be given back once the test proper starts. We'll add this test to the suite and run it... ----------------------- Running "main"... Failure!: stream_tests -> one_character_stream_gives_one_character_line -> [] should match [a] at [stream_test.c] line [19] Completed "main": 1 pass, 1 failure, 0 exceptions. ----------------------- Oops. Our code under test doesn't work. Already we need a fix... [source,c] ----------------------- char *read_paragraph(int (*read)(void *), void *stream) { int buffer_size = 0, length = 0; char *buffer = NULL; int ch; while ((ch = (*read)(stream)) != EOF) { if (++length > buffer_size) { buffer_size += 100; buffer = realloc(buffer, buffer_size + 1); } if ((buffer[length - 1] = ch) == '\n') { break; } } return buffer; } ----------------------- After which everything is fine... ----------------------- Running "main"... Completed "main": 2 passes, 0 failures, 0 exceptions. ----------------------- How do the Cgreen stubs work? The 'will_return()' calls build up a static list of return values which are cleared between tests. The 'mock()' macro captures the '__func__' property. It uses these to look up entries in the return list, and also to generate more helpful messages. We can crank out our tests quite quickly now... [source,c] ----------------------- static void one_word_stream_gives_one_word_line() { will_return(stub_stream, 't'); will_return(stub_stream, 'h'); will_return(stub_stream, 'e'); always_return(stub_stream, EOF); assert_string_equal(read_paragraph(&stub_stream, NULL), "the"); } ----------------------- I've been a bit naughty. As each test runs in it's own process, I haven't bothered to free the pointers to the paragraphs. I've just let the operating system do it. Purists may want to add the extra clean up code. I've also used 'always_return()' for the last instruction. Withou this, if the stub is given an instruction is does not expect, it will throw a test failure. This is overly restrictive, as our 'read_paragraph()' function could quite legitimately call the stream after it had run off of the end. OK, that would be odd behaviour, but that's not what we are testing here. If we were, it would be placed in a test of it's own. The 'always_return()' call tells Cgreen to keep going after the first three letters, allowing extra calls. As we build more tests, they start to look like a specification of the behaviour... [source,c] ----------------------- static void drops_line_ending_from_word_and_stops() { will_return(stub_stream, 't'); will_return(stub_stream, 'h'); will_return(stub_stream, 'e'); will_return(stub_stream, '\n'); assert_string_equal(read_paragraph(&stub_stream, NULL), "the"); } ----------------------- ...and just for luck... [source,c] ----------------------- static void single_line_ending_gives_empty_line() { will_return(stub_stream, '\n'); assert_string_equal(read_paragraph(&stub_stream, NULL), ""); } ----------------------- This time we musn't use 'always_return()'. We want to leave the stream where it is, ready for the next call to 'read_paragraph()'. If we call the stream beyond the line ending, we want to fail. It turns out that we are failing anyway... ----------------------- Running "main"... Failure!: stream_tests -> drops_line_ending_from_word_and_stops -> [the ] should match [the] at [stream_test.c] line [36] Failure!: stream_tests -> single_line_ending_gives_empty_line -> [ ] should match [] at [stream_test.c] line [41] Completed "main": 3 passes, 2 failures, 0 exceptions. ----------------------- Clearly we are passing through the line ending. Another fix later... [source,c] ----------------------- char *read_paragraph(int (*read)(void *), void *stream) { int buffer_size = 0, length = 0; char *buffer = NULL; int ch; while ((ch = (*read)(stream)) != EOF) { if (++length > buffer_size) { buffer_size += 100; buffer = realloc(buffer, buffer_size + 1); } if ((buffer[length - 1] = ch) == '\n') { buffer[--length] = '\0'; break; } buffer[length] = '\0'; } return buffer; } ----------------------- And we are passing again... ----------------------- Running "main"... Completed "main": 5 passes, 0 failures, 0 exceptions. ----------------------- There are no limits to the number of stubbed methods within a test, only that two stubs cannot have the same name. So this will cause problems... [source,c] ----------------------- static int stub_stream(void *stream) { return (int)mock(); } static void bad_test() { will_return(stub_stream, 'a'); do_stuff(&stub_stream, &stub_stream); } ----------------------- It will be necessary to have two stubs to make this test behave... [source,c] ----------------------- static int first_stream(void *stream) { return (int)mock(); } static int second_stream(void *stream) { return (int)mock(); } static void good_test() { will_return(first_stream, 'a'); will_return(second_stream, 'a'); do_stuff(&first_stream, &second_stream); } ----------------------- We now have a way of writing fast, clear tests with no external dependencies. The information flow is still one way though, from stub to the code under test. When our code calls complex procedures, we won't want to pick apart the effects to infer what happened. That's too much like detective work. And why should we? We just want to know that we dispatched the correct information down the line. Things get more interesting when we thing of the traffic going the other way, from code to stub. This gets us into the same territory as mock objects. [[X15]] Setting expectations on mock functions ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ To swap the traffic flow, we'll look at an outgoing example instead. Here is the prewritten production code... [source,c] ----------------------- void by_paragraph(int (*read)(void *), void *in, void (*write)(void *, char *), void *out) { while (1) { char *line = read_paragraph(read, in); if (line == NULL) { return; } (*write)(out, line); free(line); } } ----------------------- This is the start of a formatter utility. Later filters will probably break the paragaphs up into justified text, but right now that is all abstracted behind the 'void write(void *, char *)' interface. Our current interests are: does it loop through the paragraphs, and does it crash? We could test correct paragraph formation by writing a stub that collects the paragraphs into a 'struct'. We could then pick apart that 'struct' and test each piece with assertions. This approach is extremely clumsy in C. The language is just not suited to building and tearing down complex edifices, never mind navigating them with assertions. We would badly clutter our tests. Instead we'll test the output as soon as possible, right in the called function... [source,c] ----------------------- ... void expect_one_letter_paragraph(char *paragraph, void *stream) { assert_string_equal(paragraph, "a", NULL); } void one_character_is_made_into_a_one_letter_paragraph() { by_paragraph( &one_character_stream, NULL, &expect_one_letter_paragraph, NULL); } ... ----------------------- By placing the assertions into the mocked function, we keep the tests minimal. The catch with this method is that we are back to writing individual functions for each test. We have the same problem as we had with hand coded stubs. Again, Cgreen has a way to automate this. Here is the rewritten test... [source,c] ----------------------- static int reader(void *stream) { return (int)mock(stream); } static void writer(void *stream, char *paragraph) { mock(stream, paragraph); } void one_character_is_made_into_a_one_letter_paragraph() { will_return(reader, 'a'); always_return(reader, EOF); expect(writer, want_string(paragraph, "a")); by_paragraph(&reader, NULL, &writer, NULL); } ----------------------- Where are the assertions? Unlike our earlier stub, 'reader()' can now check it's parameters. In object oriented circles, an object that checks it's parameters as well as simulating behaviour is called a mock object. By analogy 'reader()' is a mock function, or mock callback. Using the 'expect' macro, we have stated that 'writer()' will be called just once. That call must have the string '"a"' for the paragraph parameter. If this parameter does not match, the mock function will issue a failure straight to the test suite. This is what saves us writing a lot of assertions. Here is the full list of instructions that can be sent to the mocks... |========================================= |Macro| Parameters |'will_return(function, result)'| Returns result once only, but successive calls will be replayed in order. Generates a failure when called too many times. |'always_return(function, result)'| Returns result repeatedly. |'expect(function, arguments...)'| Sets up an expectation on each argument. If there is a mismatch, or a call is made without an expectation, a failure is generated. |'always_expect(function, arguments...)'| Must receive exactly these arguments from now on. |'expect_never(function)'| This function must not be called or a failure is generated. |'will_respond(function, result, arguments...)'| Combines 'will_return()' and 'expect()'. |'always_respond(function, result, arguments...)'| Combines 'always_return()' and 'always_expect()' |========================================= The 'expect_never()' macro is slightly different. It's only task is to confirm that a method was never run. The 'will_respond()' macro combines the 'will_return()' and the 'expect()' calls into one call, as does 'always_respond'. Each parameter can be tested with a constraint. Two constraints are available: 'want(parameter, expected)' for integers and pointers, and 'want_string(parameter, expected)' does a string comparison. It's about time we actually ran our test... ----------------------- Running "main"... Completed "main": 6 passes, 0 failures, 0 exceptions. ----------------------- Confident that a single character works, we can further specify the behaviour. Firstly an input sequence... [source,c] ----------------------- static void no_line_endings_makes_one_paragraph() { will_return(reader, 'a'); will_return(reader, ' '); will_return(reader, 'b'); will_return(reader, ' '); will_return(reader, 'c'); always_return(reader, EOF); expect(writer, want_string(paragraph, "a b c")); by_paragraph(&reader, NULL, &writer, NULL); } ----------------------- A more intelligent programmer than me would place all these calls in a loop. Next, checking an output sequence... [source,c] ----------------------- static void line_endings_generate_separate_paragraphs() { will_return(reader, 'a'); will_return(reader, '\n'); will_return(reader, 'b'); will_return(reader, '\n'); will_return(reader, 'c'); always_return(reader, EOF); expect(writer, want_string(paragraph, "a")); expect(writer, want_string(paragraph, "b")); expect(writer, want_string(paragraph, "c")); by_paragraph(&reader, NULL, &writer, NULL); } ----------------------- Like the 'will_return()' stubs above, the 'expect()' calls follow a record and playback model. Each one tests a successive call. This sequence confirms that we get '"a"', '"b"' and '"c"' in order. Then we'll make sure the correct stream pointers are passed to the correct functions. This is a more realistic parameter check... [source,c] ----------------------- static void resources_are_paired_with_the_functions() { will_respond(reader, 'a', want(stream, 1)); always_respond(reader, EOF, want(stream, 1)); expect(writer, want(stream, 2)); by_paragraph(&reader, (void *)1, &writer, (void *)2); } ----------------------- And finally we'll specify that the writer is not called if there is no paragraph. [source,c] ----------------------- static void empty_paragraphs_are_ignored() { will_return(reader, '\n'); always_return(reader, EOF); expect_never(writer); by_paragraph(&reader, NULL, &writer, NULL); } ----------------------- This last test is our undoing... ----------------------- Running "main"... Failure!: stream_tests -> empty_paragraphs_are_ignored -> Unexpected call to function [writer] at [stream_test.c] line [96] Completed "main": 14 passes, 1 failure, 0 exceptions. ----------------------- Obviously blank lines are still being dispatched to the 'writer()'. Once this is pointed out, the fix is obvious... [source,c] ----------------------- void by_paragraph(int (*read)(void *), void *in, void (*write)(void *, char *), void *out) { while (1) { char *line = read_paragraph(read, in); if ((line == NULL) || (strlen(line) == 0)) { return; } (*write)(out, line); free(line); } } ----------------------- Tests with 'expect_never()' can be very effective at uncovering subtle bugs. ----------------------- Running "main"... Completed "main": 14 passes, 0 failures, 0 exceptions. ----------------------- All done. [[X04]] Changing Cgreen Reporting ------------------------- [[X16]] Replacing the reporter ~~~~~~~~~~~~~~~~~~~~~~ In every test suite so far, we have run the tests with this line... [source,c] ----------------------- return run_test_suite(our_tests(), create_text_reporter()); ----------------------- We can change the reporting mechanism just by changing this method. Here is the code for 'create_text_reporter()'... [source,c] ----------------------- TestReporter *create_text_reporter() { TestReporter *reporter = create_reporter(); reporter->start = &text_reporter_start; reporter->finish = &text_reporter_finish; reporter->show_fail = &show_fail; reporter->show_incomplete = &show_incomplete; return reporter; } ----------------------- The 'TestReporter' structure contains function pointers that control the reporting. When called from 'create_reporter()' constructor, these pointers are set up with functions that display nothing. The text reporter code replaces these with something more dramatic, and then returns a pointer to this new object. Thus the 'create_text_reporter()' function effectively extends the object from 'create_reporter()'. The text reporter only outputs content at the start of the first test, at the end of the test run to display the results, when a failure occours, and when a test fails to complete. A quick look at the +text_reporter.c+ file in +Cgreen+ reveals that the overrides just output a message and chain to the versions in +reporter.h+. To change the reporting mechanism ourselves, we just have to know a little about the methods in the 'TestReporter' structure. [[X17]] The TestReporter structure The Cgreen 'TestReporter' is a pseudo class that looks something like... [source,c] ----------------------- typedef struct _TestReporter TestReporter; struct _TestReporter { void (*destroy)(TestReporter *); void (*start)(TestReporter *, const char *); void (*finish)(TestReporter *, const char *); void (*show_pass)(TestReporter *, const char *, int, const char *, va_list); void (*show_fail)(TestReporter *, const char *, int, const char *, va_list); void (*show_incomplete)(TestReporter *, const char *); void (*assert_true)(TestReporter *, const char *, int, int, const char *, ...); int passes; int failures; int exceptions; void *breadcrumb; int ipc; void *memo; }; ----------------------- The first block are the methods that can be overridden. [horizontal] 'void (*destroy)(TestReporter *)':: This is the destructor for the default structure. If this is overridden, then the overriding function must call 'destroy_reporter(TestReporter *reporter)' to finish the clean up. 'void (*start)(TestReporter *, const char *)':: The first of the callbacks. At the start of each test suite Cgreen will call this method on the reporter with the name of the suite being entered. The default version keeps track of the stack of tests in the 'breadcrumb' pointer of 'TestReporter'. If you make use of the breadcrumb functions, as the defaults do, then you will need to call 'reporter_start()' to keep the book keeping in sync. 'void (*finish)(TestReporter *, const char *)':: The counterpart to the '(*start)()' call called on leaving the test suite. It needs to be chained to the 'reporter_finish()' to keep track of the breadcrumb book keeping. The text reporter uses the state of the breadcrumb to decide if it is ending teh top level test. If so, it prints the familiar summary of passes and fails. 'void (*show_pass)(TestReporter *, const char *, int, const char *, va_list)':: This method is initially empty, so there is no need to chain the call to any other function. Besides the pointer to the reporter structure, Cgreen also passes the file name of the test, the line number of failed assertion, the message to show and any additional parameters to substitute into the message. The message comes in as 'printf()' style format string, and so the variable argument list should match the substitutions. 'void (*show_fail)(TestReporter *, const char *, int, const char *, va_list)':: The partner of 'show_pass()', and the one you'll likely overload first. 'void (*show_incomplete)(TestReporter *, const char *)':: When a test fails to complete, this is the handler that is called. As it's an unexpected outcome, no message is received, but we do get the name of the test. The text reporter combines this with the breadcrumb to produce the exception report. 'void (*assert_true)(TestReporter *, const char *, int, int, const char *, ...)':: This is not normally overridden and is really internal. It is the raw entry point for the test messages from the test suite. By default it dispatches teh call to either 'show_pass()' or 'show_fail()'. The second block is simply resources and book keeping that the reporter can use to liven up the messages... [horizontal] 'passes':: The number of passes so far. 'failures':: The number of failures generated so far. 'exceptions':: The number of test functions that have failed to complete so far. 'breadcrumb':: This is a pointer to the list of test names in the stack. The 'breadcrumb' pointer is different and needs a little explanation. Basically it is a stack, analagous to the breadcrumb trail you see on websites. Everytime the 'start()' handler is invoked, the name is placed in this stack. When the 'finish()' message handler is invoked, a name is popped off. There are a bunch of utility functions in +cgreen/breadcrumb.h+ that can read the state of this stack. Most useful are 'get_current_from_breadcrumb()' which takes the breadcrumb pointer and returns the curent test name, and 'get_breadcrumb_depth()' which gives the current depth of the stack. A depth of zero means that the test run has finished. If you need to traverse all the names in the breadcrumb, then you can call 'walk_breadcrumb()'. Here is the full signature... [source,c] ----------------------- void walk_breadcrumb(Breadcrumb *breadcrumb, void (*walker)(const char *, void *), void *memo); ----------------------- The 'void (*walker)(const char *, void *)' is a callback that will be passed the name of the test suite for each level of nesting. It is also poassed the 'memo' pointer that was passed to the 'walk_breadcrumb()' call. You can use this pointer for anything you want, as all Cgreen does is pass it from call to call. This is so aggregate information can be kept track of whilst still being reentrant. The last parts of the 'TestReporter' structure are... [horizontal] 'ipc':: This is an internal structure for handling the messaging between reporter and test suite. You shouldn't touch this. 'memo':: By contrast, this is a spare pointer for your own expansion. [[X18]] An example XML reporter ~~~~~~~~~~~~~~~~~~~~~~~ Let's make things real with an example. Suppose we want to send the output from Cgreen in XML format, say for storing in a repository or for sending across the network. Suppose also that we have come up with the following format... [source,xml] ----------------------- A failure ----------------------- In other words a simple nesting of tests with only failures encoded. The absence of failure is a pass. Here is a test script, +test_in_xml.c+ that we can use to construct the above output... [source,c] ----------------------- #include "cgreen/cgreen.h" void a_test_that_passes() { assert_true(1); } void a_test_that_fails() { assert_true_with_message(0, "A failure"); } TestSuite *create_test_group() { TestSuite *suite = create_named_test_suite("A Group"); add_test(suite, a_test_that_passes); add_test(suite, a_test_that_fails); return suite; } int main(int argc, char **argv) { TestSuite *suite = create_named_test_suite("Top Level"); add_suite(suite, create_test_group()); return run_test_suite(suite, create_text_reporter()); } ----------------------- The text reporter is used just to confirm that everything is working. So far it is. ----------------------- Running "Top Level"... Failure!: A Group -> a_test_that_fails -> A failure at [test_as_xml.c] line [8] Completed "Top Level": 1 pass, 1 failure, 0 exceptions. ----------------------- Our first move is to switch the reporter from text, to our not yet written XML version... [source,c] ----------------------- #include "cgreen/cgreen.h #include "xml_reporter.h" ... int main(int argc, char **argv) { TestSuite *suite = create_named_test_suite("Top Level"); add_suite(suite, create_test_group()); return run_test_suite(suite, create_xml_reporter()); } ----------------------- We'll start the ball rolling with the +xml_reporter.h+ header file... [source,c] ----------------------- #ifndef _XML_REPORTER_HEADER_ #define _XML_REPORTER_HEADER_ #include "cgreen/reporter.h" TestReporter *create_xml_reporter(); #endif ----------------------- ...and the simplest possible reporter in +reporter.c+. [source,c] ----------------------- #include "xml_reporter.h" #include "cgreen/reporter.h" TestReporter *create_xml_reporter() { TestReporter *reporter = create_reporter(); return reporter; } ----------------------- One that outputs nothing. ----------------------- gcc -c test_as_xml.c gcc -c xml_reporter.c gcc xml_reporter.o test_as_xml.o -lcgreen -o xml ./xml ----------------------- Yep, nothing. Let's add the outer test tags first, so that we can see Cgreen navigating the test suite... ----------------------- #include "xml_reporter.h" #include "cgreen/reporter.h" #include static void xml_reporter_start(TestReporter *reporter, const char *name); static void xml_reporter_finish(TestReporter *reporter, const char *name); TestReporter *create_xml_reporter() { TestReporter *reporter = create_reporter(); reporter->start = &xml_reporter_start; reporter->finish = &xml_reporter_finish; return reporter; } static void xml_reporter_start(TestReporter *reporter, const char *name) { printf("\n", name); reporter_start(reporter, name); } static void xml_reporter_finish(TestReporter *reporter, const char *name) { reporter_finish(reporter, name); printf("\n"); } ----------------------- Although chaining to the underlying 'reporter_start()' and 'reporter_finish()' functions is optional, I want to make use of some of the facilities later. Our output meanwhile, is making it's first tentative steps... [source,xml] ----------------------- ----------------------- We don't want a passing message, so the 'show_fail()' function is all we need... [source,c] ----------------------- ... static void xml_show_fail(TestReporter *reporter, const char *file, int line, const char *message, va_list arguments); TestReporter *create_xml_reporter() { TestReporter *reporter = create_reporter(); reporter->start = &xml_reporter_start; reporter->finish = &xml_reporter_finish; reporter->show_fail = &xml_show_fail; return reporter; } ... static void xml_show_fail(TestReporter *reporter, const char *file, int line, const char *message, va_list arguments) { printf("\n"); printf("\t"); vprintf(message, arguments); printf("]]>\n"); printf("\t\n", file, line); printf("\n"); } ----------------------- We have to use 'vprintf()' to handle the variable argument list passed to us. This will probably mean including the +stdarg.h+ header as well as +stdio.h+. This gets us pretty close to what we want... [source,xml] ----------------------- A failure]]> ----------------------- For completeness we should add a tag for an incomplete test. We'll output this as a failure, athough we don't get a location this time... [source,c] ----------------------- static void xml_show_incomplete(TestReporter *reporter, const char *name) { printf("\n"); printf("\tFailed to complete]]>\n"); printf("\n"); } ----------------------- All that's left then is the XML declaration and the thorny issue of indenting. Although the indenting is not strictly necessary, it would make the output a lot more readable. The test depth is kept track of for us with the 'breadcrumb' object in the 'TestReporter' structure. We'll add an 'indent()' function that outputs the correct number of tabs... [source,c] ----------------------- static indent(TestReporter *reporter) { int depth = get_breadcrumb_depth((Breadcrumb *)reporter->breadcrumb); while (depth-- > 0) { printf("\t"); } } ----------------------- The 'get_breadcrumb_depth()' function just gives the current test depth. As that is just the number of tabs to output, the implementation is trivial. We can then use this function in the rest of the code. Here is the complete listing... [source,c] ----------------------- #include "xml_reporter.h" #include "cgreen/reporter.h" #include "cgreen/breadcrumb.h" #include #include static indent(TestReporter *reporter); static void xml_reporter_start(TestReporter *reporter, const char *name); static void xml_reporter_finish(TestReporter *reporter, const char *name); static void xml_show_fail(TestReporter *reporter, const char *file, int line, const char *message, va_list arguments); static void xml_show_incomplete(TestReporter *reporter, const char *name); TestReporter *create_xml_reporter() { TestReporter *reporter = create_reporter(); reporter->start = &xml_reporter_start; reporter->finish = &xml_reporter_finish; reporter->show_fail = &xml_show_fail; reporter->show_incomplete = &xml_show_incomplete; return reporter; } static indent(TestReporter *reporter) { int depth = get_breadcrumb_depth((Breadcrumb *)reporter->breadcrumb); while (depth-- > 0) { printf("\t"); } } static void xml_reporter_start(TestReporter *reporter, const char *name) { if (get_breadcrumb_depth((Breadcrumb *)reporter->breadcrumb) == 0) { printf("\n"); } indent(reporter); printf("\n", name); reporter_start(reporter, name); } static void xml_reporter_finish(TestReporter *reporter, const char *name) { reporter_finish(reporter, name); indent(reporter); printf("\n"); } static void xml_show_fail(TestReporter *reporter, const char *file, int line, const char *message, va_list arguments) { indent(reporter); printf("\n"); indent(reporter); printf("\t"); vprintf(message, arguments); printf("]]>\n"); indent(reporter); printf("\t\n", file, line); indent(reporter); printf("\n"); } static void xml_show_incomplete(TestReporter *reporter, const char *name) { indent(reporter); printf("\n"); indent(reporter); printf("\tFailed to complete]]>\n"); indent(reporter); printf("\n"); } ----------------------- And finally the desired output... ----------------------- A failure]]> ----------------------- Job done. Possible other extensions include reporters that write to syslog, talk to IDE plug-ins, paint pretty printed documents or just return a boolean for monitoring purposes. [[X05]] Automaticaly tests collector ---------------------------- [[X19]] The collector tool ~~~~~~~~~~~~~~~~~~ When we want to add a new test, we open the test script and create a new void function. So we add the name of the function inside of TestSuite. In summary each new test added we should added inside of TestSuite too. The collector tool change this boring behaviour. The idea is to save work of add every tests written inside of 'TestSuite'. Basically each test is to be declared with the macro Ensure in which is automatically inserted inside of 'TestSuite'. [[X20]] Example ~~~~~~~ To use the collector tool we need to modify the definition of each functions. Before we used: [source,c] ----------------------- void one_should_assert_char_equal_to_one() { char x = 1; char y = 1; assert_equal(x, y); } ----------------------- Now we need to rewrite to: [source,c] ----------------------- Ensure one_should_assert_char_equal_to_one() { char x = 1; char y = 1; assert_equal(x, y); } ----------------------- For each writen test, we must declared like Ensure type. It is a C macro and tell to collector that this test should be put inside the TestSuite. In the TestSuite we don't more need to write the testes with compound the TestSuite. Just let like: [source,c] ----------------------- TestSuite *assertion_tests() { TestSuite *suite = create_test_suite(); add_tests(); return suite; } ----------------------- Assuming that our test script is the file +assertion_tests.c+, running the 'collector' we have: ----------------------- ./collector assertion_tests.c ----------------------- The finally result in test script is: [source,c] ----------------------- Ensure one_should_assert_char_equal_to_one() { char x = 1; char y = 1; assert_equal(x, y); } TestSuite *assertion_tests() { TestSuite *suite = create_test_suite(&one_should_assert_char_equal_to_one); add_tests(); return suite; } ----------------------- The tool read all script, do the necessary substituitions and write to the original file. So just add a new test and run the collector tool to adjust automatically the TestSuite. [[X21]] GNU Free Documentation License ------------------------------ Version 1.1, March 2000 Copyright (C) 2000 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. 0. PREAMBLE The purpose of this License is to make a manual, textbook, or other written document "free" in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others. This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software. We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference. 1. APPLICABILITY AND DEFINITIONS This License applies to any manual or other work that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you". A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language. A "Secondary Section" is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (For example, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them. The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, whose contents can be viewed and edited directly and straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup has been designed to thwart or discourage subsequent modification by readers is not Transparent. A copy that is not "Transparent" is called "Opaque". Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML designed for human modification. Opaque formats include PostScript, PDF, proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML produced by some word processors for output purposes only. The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, "Title Page" means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text. 2. VERBATIM COPYING You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3. You may also lend copies, under the same conditions stated above, and you may publicly display copies. 3. COPYING IN QUANTITY If you publish printed copies of the Document numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects. If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages. If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a publicly-accessible computer-network location containing a complete Transparent copy of the Document, free of added material, which the general network-using public has access to download anonymously at no charge using public-standard network protocols. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public. It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document. 4. MODIFICATIONS You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version: Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has less than five). State on the Title page the name of the publisher of the Modified Version, as the publisher. Preserve all the copyright notices of the Document. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice. Include an unaltered copy of this License. Preserve the section entitled "History", and its title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section entitled "History" in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the "History" section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission. In any section entitled "Acknowledgements" or "Dedications", preserve the section's title, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles. Delete any section entitled "Endorsements". Such a section may not be included in the Modified Version. Do not retitle any existing section as "Endorsements" or to conflict in title with any Invariant Section. If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles. You may add a section entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various parties--for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard. You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one. The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version. 5. COMBINING DOCUMENTS You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice. The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work. In the combination, you must combine any sections entitled "History" in the various original documents, forming one section entitled "History"; likewise combine any sections entitled "Acknowledgements", and any sections entitled "Dedications". You must delete all sections entitled "Endorsements." 6. COLLECTIONS OF DOCUMENTS You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects. You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document. 7. AGGREGATION WITH INDEPENDENT WORKS A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, does not as a whole count as a Modified Version of the Document, provided no compilation copyright is claimed for the compilation. Such a compilation is called an "aggregate", and this License does not apply to the other self-contained works thus compiled with the Document, on account of their being thus compiled, if they are not themselves derivative works of the Document. If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one quarter of the entire aggregate, the Document's Cover Texts may be placed on covers that surround only the Document within the aggregate. Otherwise they must appear on covers around the whole aggregate. 8. TRANSLATION Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License provided that you also include the original English version of this License. In case of a disagreement between the translation and the original English version of this License, the original English version will prevail. 9. TERMINATION You may not copy, modify, sublicense, or distribute the Document except as expressly provided for under this License. Any other attempt to copy, modify, sublicense or distribute the Document is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 10. FUTURE REVISIONS OF THIS LICENSE The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See http://www.gnu.org/copyleft/. Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation. How to use this License for your documents To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page: Copyright (c) YEAR YOUR NAME. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. A copy of the license is included in the section entitled "GNU Free Documentation License". If you have no Invariant Sections, write "with no Invariant Sections" instead of saying which ones are invariant. If you have no Front-Cover Texts, write "no Front-Cover Texts" instead of "Front-Cover Texts being LIST"; likewise for Back-Cover Texts. If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software. libdbi-drivers-0.9.0/tests/cgreen/doc/cgreen-guide-pt_BR.ascii000644 001750 001750 00000315051 11421144154 025017 0ustar00markusmarkus000000 000000 Cgreen Unit Test for C language =============================== Marcus Baker João Henrique F. de Freitas :Author Initials: MB JHF Cgreen Quickstart Guide ----------------------- [[X01]] O que é Cgreen? ~~~~~~~~~~~~~~~ Cgreen é um testador de código unitário para desenvolvimento software na linguagem C. Ou seja é uma ferramenta de automação de teste e garantia de qualidade de software para times de desenvolvimento. A ferramenta é completamenta open source e publicada sob a http://www.gnu.org/licenses/lgpl.html[LGPL]. Testes unitários é uma prática de desenvolvimento popularizada pela comunidade de desenvolvimento ágil. É caracterizada pela escrita de muitos pequenos testes ao longo do código fonte normal. Frequentemente os testes são escritos antes do código que será testado, em um rigoroso loop de teste e refatoração de código. Feito deste modo, é uma prática conhecida como Desenvolvimento Dirigido ao Teste (Test Driven Development TDD). Cgreen suporta este estilo de trabalho. Testes de unidade são escritos na mesma linguagem que o código, no nosso caso C. Isto evita confusão pela constante troca de linguagem, e também permite utilizar qualquer parte do código nos seus testes. A lista dos recuros são: - Suite de Testes totalmente combináveis. - 'setup()' e 'teardown()' para testes e suite de teste. - Cada teste é executado por seu próprio processo. - Um teste isolado pode ser executado em um único processo para debug. - Abilidade para criar funções mock. - O mecanismo de relatório pode ser facilmente extendido. Esta ferramenta é para programação em C, não para C++. [[X02]] Instalando o Cgreen ~~~~~~~~~~~~~~~~~~~ Há dois modos de instalar o Cgreen em seu sistema. O primeiro modo é utilizar os pacotes RPM ou DEB providos pelo Cgreen Time e disponibilizados na página do projeto http://cgreen.sourceforge.net[Cgreen]. Uma vez feito o download, instale utilizando os procedimentos normais de instalação para o seu sistema. A segunda forma de instalação é indicada para desenvolvedores ou usuários avançados. Basicamente consiste em pegar os fontes do projeto e compilar. Para isso é necessário o sistema de build http://www.cmake.org[CMake] como pré-requisito. Tendo o CMake instalado o processo é o seguinte: ----------------------------------------- tar -zxpvf cgreen.tar.gz mkdir cgreen-build cd cgreen-build cmake ../cgreen make make test # opcional make install # precisa de direitos root ----------------------------------------- Esta técnica é conhecida como "build out of source". Ela compila e instala o Cgreen fora do diretório que contendo os arquivos fontes. Isso ajuda na organização geral dos arquivos do projeto. Também é possivel utilizar o arquivo +Makefile+ disponibilizado na raiz do diretório descompactado. Este Makefile é usado para compilar e testar sem a necessidade do CMake. No entando ele não contém as regras de instalação no sistema. Ambos os métodos irão criar dentro do diretório 'cgreen' uma biblioteca unix +libcgreen.so+ no qual pode ser utilizada em conjunto com o arquivo de cabeçalho +cgreen.h+ para compilar os códigos de teste. A biblioteca criada é instalada no sistema, por default em +/usr/local/lib/+. Agora vamos escrever um teste para confirmar se tudo está funcionando. Vamos começar com um simples script de teste não testado, chamado +first_test.c+ [source,c] --------------------------------------- #include "cgreen/cgreen.h" int main(int argc, char **argv) { TestSuite *suite = create_test_suite(); return run_test_suite(suite, create_text_reporter()); } ----------------------------------------- Este é um teste muito sem graça. Somente cria uma suite de teste vazia e executa. Geralmente é mais fácil avançar em pequenos passos, porém, isso é o mais pequeno eu poderia pensar. A única complicação é o arquivo de cabeçalho +cgreen.h+. Aqui estou assumindo que nós temos um link simbólico com o diretório do Cgreen no mesmo lugar dos nossos scripts de testes, ou colocando o diretório Cgreen no seu path. Fazer um build desse teste, com certeza, é algo trivial... ----------------------------------------- gcc -c first_test.c gcc first_test.o -lcgreen -o first_test ./first_test ----------------------------------------- Invocando o executável teremos... ----------------------------------------- Running "main"... Completed "main": 0 passes, 0 failures, 0 exceptions. ----------------------------------------- Tudo anteriormente assume que você está trabalhando em um ambiente tipo Unix, provavelmente com o compilador 'gcc'. O código é bastante aderente ao C99, de modo que qualquer compilador C deve funcionar. Cgreen pode ser compilador em todos os sistemas que suportam a biblioteca de mensagens +sys/msg.h+. Foi testado em Linux e Mac OSX, mas não no Windows, apesar que pode trabalhar também. Até agora, temos ensaiado a compilação, em que a suite de teste é executada. Vamos acrescentar um ou dois ensaios sem sentido, para que você possa ver como isto ocorre... [source,c] --------------------------------------- #include "cgreen/cgreen.h" void this_test_should_pass() { assert_true(1); } void this_test_should_fail() { assert_true(0); } int main(int argc, char **argv) { TestSuite *suite = create_test_suite(); add_test(suite, this_test_should_pass); add_test(suite, this_test_should_fail); return run_test_suite(suite, create_text_reporter()); } ----------------------------------------- Um teste pode ser qualquer função com a assinatura 'void (void)' 'add_test()' é uma macro, então não há '&' com o ponteiro para a função. Compilando e executando, teremos o resultado... ----------------------------------------- Running "main"... Failure!: this_test_should_fail -> Problem at [first_test.c] line [8] Completed "main": 1 pass, 1 failure, 0 exceptions. ----------------------------------------- O 'TextReporter', criado pela chamada 'create_text_reporter()', é o jeito simples para imprimir o resultado dos testes. Ele somente envia os testes com falha. Atualmente ele é o único método suportado. [[X03]] Fazendo TDD em cinco minutos com Cgreen ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Para um exemplo mais real precisamos de algo para testar. Nós pretendemos escrever uma função que separe as palavras de uma sentença. Ela faz isso substituindo quaisquer espaços com terminadores de palavras e retornando o número de conversões mais um. Aqui está um exemplo do que temos em mente... [source,c] --------------------------------------- char *sentence = strdup("Just the first test"); word_count = split_words(sentence); ----------------------------------------- 'sentence' pode agora apontar para '"Just\0the\0first\0test"'. Não é obviamente uma função muito útil, mas usaremos isso para algo mais prático em breve. Desta vez nós adicionaremos um pouco mais de estrutura em nossos testes. Em vez de termos os testes em um programa único, nós separaremos o principal dos de casos de teste. Desta forma, vários suites de teste dos casos de teste podem ser incluídos no 'main()' do arquivo principal. Isto nos dará menos trabalho para adicionar mais testes. Aqui está o, até agora vazio, caso de teste em +words_test.c+... [source,c] --------------------------------------- #include "cgreen/cgreen.h" TestSuite *words_tests() { TestSuite *suite = create_test_suite(); return suite; } ----------------------------------------- Aqui está o +all_tests.c+ teste principal... [source,c] --------------------------------------- #include "cgreen/cgreen.h" TestSuite *words_tests(); int main(int argc, char **argv) { TestSuite *suite = create_test_suite(); add_suite(suite, words_tests()); if (argc > 1) { return run_single_test(suite, argv[1], create_text_reporter()); } return run_test_suite(suite, create_text_reporter()); } ----------------------------------------- Cgreen possui dois jeitos de executar os testes. O padrão é cada teste ser executado dentro do seu próprio processo. Isto é oque acontece se você invoca 'run_test_suite()'. Enquanto isto faz todos os testes independentes, a constante 'fork()' pode complicar o debug. Para deixar o debug simples, Cgreen não faz 'fork()' quando um único teste é executado pelo nome com 'run_single_test()'. Building este suporte... ----------------------------------------- gcc -c words_test.c gcc -c all_tests.c gcc words_test.o all_tests.o -lcgreen -o all_tests ----------------------------------------- ...e executando temos o resultado... ----------------------------------------- Running "main"... Completed "main": 0 passes, 0 failures, 0 exceptions. ----------------------------------------- Todo este suporte (scaffolding) é puro adendo, mas a partir de agora adicionar novos testes irá ser muito fácil. Aqui está um primeiro teste de 'split_words()'... [source,c] --------------------------------------- #include "cgreen/cgreen.h" #include "words.h" #include void word_count_returned_from_split() { char *sentence = strdup("Birds of a feather"); int word_count = split_words(sentence); assert_equal(word_count, 4); free(sentence); } TestSuite *words_tests() { TestSuite *suite = create_test_suite(); add_test(suite, word_count_returned_from_split); return suite; } ----------------------------------------- A macro 'assert_equal()' recebe dois valores para comparar. Como padrão as mensagens são enviadas para 'STDOUT' pelo 'TextReporter'. Para compilar isso precisamos criar o arquivo de cabeçalho +words.h+... [source,c] --------------------------------------- int split_words(char *sentence); ----------------------------------------- ...e para linkar o código nós precisamos de uma pequena função em +words.c+... [source,c] --------------------------------------- int split_words(char *sentence) { return 0; } ----------------------------------------- Um build completo mais adiante... ----------------------------------------- gcc -c all_tests.c gcc -c words_test.c gcc -c words.c gcc all_tests.o words_test.o words.o -lcgreen -o all_tests ./all_tests ----------------------------------------- ...e nós temos uma resposta mais útil... ----------------------------------------- Running "main"... Failure!: words_tests -> word_count_returned_from_split -> [0] should match [4] at [words_test.c] line [8] Completed "main": 0 passes, 1 failure, 0 exceptions. ----------------------------------------- O "segredo" é o encapsulamento dos testes. Isto vem da suite de teste, no qual podem ser encapsulados um no outro, através da função de teste, e finalmente a mensagem vinda de uma afirmação (assertion). Na linguagem do Cgreen, uma falha é uma afirmação inadequada, uma excessão é acumulada quando um teste falha por alguma razão. Nós podemos fazer isto passar apenas retornando o valor 4. Fazendo TDD realmente em pequenos passos, você fazeria isso, mas francamente este exemplo é muito simples. Em vez disso nós vamos ir direto para a refatoração... [source,c] --------------------------------------- #include int split_words(char *sentence) { int i, count = 1; for (i = 0; i < strlen(sentence); i++) { if (sentence[i] == ' ') { count++; } } return count; } ----------------------------------------- Existe um problema escondido aqui, mas nossos testes passarão então fingiremos que não fomos avisados.. Hora de adicionar um novo teste. Queremos confirmar que a string está quebrada em palavras separadas... [source,c] --------------------------------------- #include "cgreen/cgreen.h" #include "words.h" #include void word_count_returned_from_split() { ... } void spaces_should_be_converted_to_zeroes() { char *sentence = strdup("Birds of a feather"); split_words(sentence); int comparison = memcmp("Birds\0of\0a\0feather", sentence, strlen(sentence)); assert_equal(comparison, 0); free(sentence); } TestSuite *words_tests() { TestSuite *suite = create_test_suite(); add_test(suite, word_count_returned_from_split); add_test(suite, spaces_should_be_converted_to_zeroes); return suite; } ----------------------------------------- Com certeza, nós temos uma falha... ----------------------------------------- Running "main"... Failure!: words_tests -> spaces_should_be_converted_to_zeroes -> [-32] should match [0] at [words_test.c] line [16] Completed "main": 1 pass, 1 failure, 0 exceptions. ----------------------------------------- Nada demais contando que ainda não escrevemos o código. A solução... [source,c] --------------------------------------- int split_words(char *sentence) { int i, count = 1; for (i = 0; i < strlen(sentence); i++) { if (sentence[i] == ' ') { sentence[i] = '\0'; count++; } } return count; } ----------------------------------------- ...revela nossa suspeita anterior... ----------------------------------------- Running "main"... Failure!: words_tests -> word_count_returned_from_split -> [2] should match [4] at [words_test.c] line [8] Completed "main": 1 pass, 1 failure, 0 exceptions. ----------------------------------------- Nosso teste anterior falhou agora, porque modificamos a chamada 'strlen()' no nosso loop. Movendo o cálculo do tamanho para fora do loop... [source,c] --------------------------------------- int split_words(char *sentence) { int i, count = 1, length = strlen(sentence); for (i = 0; i < length; i++) { ... } return count; } ----------------------------------------- ...restaurando a ordem... ----------------------------------------- Running "main"... Completed "main": 2 passes, 0 failures, 0 exceptions. ----------------------------------------- É bom manter o código sob controle enquanto estamos escrevendo efetivamente, e debugar depois quando as coisas se tornarem mais complicadas. Isso vai ser melhorado mais em frente. Vamos fazer algo mais interessante. Oque são funções mock? O próximo exemplo é mais realista. Ainda no nosso arquivo +words.h+, queremos escrever uma função que invoque uma callback em cada palavra na sentença. Algo como... [source,c] --------------------------------------- void act_on_word(const char *word, void *memo) { ... } words("This is a sentence", &act_on_word, &memo); ----------------------------------------- Aqui o ponteiro 'memo' é apenas algum dado acumulado que a callback 'act_on_word()' está trabalhando. Outras pessoas escreverão a função 'act_on_world()' e provavelmente muitas outras iguais a esta. A callback é na verdade um ponto flexível, e não é de interesse agora. A função em teste é a 'words()' e nós queremos ter certeza que ela caminhe na sentença corretamente, enviando palavras individuais como esta. Como testar isso? Vamos começar com uma palavra. Neste caso nós esperaríamos a callback ser invocada uma única vez com a única palavra, certo? Aqui está o teste para isso... [source,c] --------------------------------------- ... #include ... void mocked_callback(const char *word, void *memo) { mock(word, memo); } void single_word_sentence_invokes_callback_once() { expect(mocked_callback, want_string(word, "Word"), want(memo, NULL)); words("Word", &mocked_callback, NULL); } TestSuite *words_tests() { TestSuite *suite = create_test_suite(); ... add_test(suite, single_word_sentence_invokes_callback_once); return suite; } ----------------------------------------- Qual é a graça olhando para a função 'mock()'? Uma mock é basicamente um objeto programável. Em C objetos são limitados a funções, então isto é a função mock. A macro 'mock()' compara os parâmetros que estão chegando com os valores esperados e envia mensagens para o suite de teste se há alguma falha. Ela também retorna quaisquer valores que tenham sido pré-programados no teste. A função teste é 'single_word_sentence_invokes_callback_once()'. Usando a macro 'expect()' ela programa a função mock para esperar uma simples chamada. Esta chamada terá parâmetros 'Word' e 'NULL'. Se eles não forem iguais depois, nós teremos um teste com falha. Somente o método do teste, não a callback mock, é adicionado ao suite de teste. Para uma compilação e linkagem com sucesso, o arquivo +words.h+ deve agora parecer como... [source,c] --------------------------------------- int split_words(char *sentence); void words(const char *sentence, void (*walker)(const char *, void *), void *memo); ----------------------------------------- ...e o arquivo +words.c+ pode ter o trecho... [source,c] --------------------------------------- void words(const char *sentence, void (*walker)(const char *, void *), void *memo) { } ----------------------------------------- Isso mostra-nos as falhas esperadas nos testes.. ----------------------------------------- Running "main"... Failure!: words_tests -> single_word_sentence_invokes_callback_once -> Call was not made to function [mocked_callback] at [words_test.c] line [25] Completed "main": 2 passes, 1 failure, 0 exceptions. ----------------------------------------- CGreen avisa que a callback nunca foi utilizada. Nos podemos facilmente passar o teste preenchendo a implementação com... [source,c] --------------------------------------- void words(const char *sentence, void (*walker)(const char *, void *), void *memo) { (*walker)(sentence, memo); } ----------------------------------------- Isto é, nós somente invocamos isso uma vez com toda a string. Este é uma medição temporária que nos ajudará a continuar. Agora qualquer coisa pode passar, ainda que isto não esteja muito testado ainda. Isso foi tudo convencional, mas vamos abordar o caso de separação da sentença. Aqui a função de teste será adicionada em +words_test.c+... [source,c] --------------------------------------- void phrase_invokes_callback_for_each_word() { expect(mocked_callback, want_string(word, "Birds")); expect(mocked_callback, want_string(word, "of")); expect(mocked_callback, want_string(word, "a")); expect(mocked_callback, want_string(word, "feather")); words("Birds of a feather", &mocked_callback, NULL); } ----------------------------------------- Cada chamada é esperada em sequẽncia. Todas as falhas, ou sem chamadas, ou extra chamadas, e podemos vê-las. Podemos ver tudo isso quando rodamos os testes... ----------------------------------------- Running "main"... Failure!: words_tests -> phrase_invokes_callback_for_each_word -> Wanted [Birds], but got [Birds of a feather] in function [mocked_callback] parameter [word] at [words_test.c] line [30] Failure!: words_tests -> phrase_invokes_callback_for_each_word -> Call was not made to function [mocked_callback] at [words_test.c] line [31] Failure!: words_tests -> phrase_invokes_callback_for_each_word -> Call was not made to function [mocked_callback] at [words_test.c] line [32] Failure!: words_tests -> phrase_invokes_callback_for_each_word -> Call was not made to function [mocked_callback] at [words_test.c] line [33] Completed "main": 4 passes, 4 failures, 0 exceptions. ----------------------------------------- A primeira falha conta a história. Nossa pequena função 'words()' chamou a callback mock com toda a sequência. Isto faz sentido, porque aquela era o jeito para pegar o próximo teste. Embora não seja relevante neste guia, eu não posso resistir em pegar esses tester para passar. Além disso, nós fizemos uso da função que nós criamos anteriormente... [source,c] --------------------------------------- void words(const char *sentence, void (*walker)(const char *, void *), void *memo) { char *words = strdup(sentence); int word_count = split_words(words); char *word = words; while (word_count-- > 0) { (*walker)(word, memo); word = word + strlen(word) + 1; } free(words); } ----------------------------------------- E com esse trabalho somos recompensados com... ----------------------------------------- Running "main"... Completed "main": 8 passes, 0 failures, 0 exceptions. ----------------------------------------- Mais trabalho do que eu gostaria de admitir, mas isso me pegou três vezes para funcionar. Primeiramente esqueci-me o '+ 1' adicionado no 'strlen()', então esqueci de trocar 'sentence' para 'word' na chamada '(*walker)()', e finalmente a terceira vez foi sorte. É claro rodando os testes cada vez que eram feitos esses erros muito óbvios. Gastei mais tempo para escrever esses parágrafos do que para escrever o código. [[30]] Construindo suite de tests -------------------------- Cgreen é uma ferramenta para construir testes de unidade na linguagem C. Eles são normalmente escritos ao longo do código de produção pelos programadores para prevenir bugs. Apesar dos testes serem escritos por desenvolvedores de software, eles são descritos de forma a serem entendidos, como parte da documentação do software. Usado desta maneira, a finalidade é garantir a qualidade constante. Em outras palavras você terá menos bugs. [[X06]] Escrevendo testes básicos ~~~~~~~~~~~~~~~~~~~~~~~~~ Testes utilizando o Cgreen são funções simples em C sem parâmetros e um retorno de valor 'void'. Um exemplo poderia ser... [source,c] ----------------------------- static void strlen_of_hello_should_be_five() { assert_equal(strlen("Hello"), 5); } ----------------------------------------- O nome da função de teste pode ser qualquer coisa que você queira. A chamada 'assert_equal()' é um exemplo de assertion. Assertions enviam mensagens para o Cgreen, no qual podem ativar a saída de resultados. Aqui estão os assertions padrões... |========================================================= |Assertion|Descrição |'assert_true(boolean)'|Passa se o valor boleano é verdadeiro |'assert_false(boolean)'|Falha se o valor boleano é verdadeiro |'assert_equal(first, second)'|Passa se 'first == second' |'assert_not_equal(first, second)'|Passa se 'first != second' |'assert_string_equal(char *, char *)'|Utiliza 'strcmp()' e passa se as strings são iguais |'assert_string_not_equal(char *, char *)'|Utiliza 'strcmp()' e falha se as strings são iguais |========================================================= A macro para assertion boleano aceita valor 'int'. As assertions de igualdade aceitam qualquer tipo no qual pode ser convertido para 'intptr_t' e feita uma simples operação de '=='. A comparação de strings é ligeiramente diferente da utilizada na 'strcmp()' biblioteca de funções ''. Se 'assert_equal()' for utilizada em ponteiros 'char *' então eles devem apontar para a mesma string. Cada assertion tem uma mensagem default de comparação entre os dois valores. Se você deseja substituir pela sua própria mensagem então você deve usar as funções '*_with_message()'. |========================================================= |Assertion |'assert_true_with_message(boolean, message, ...)' |'assert_false_with_message(boolean, message, ...)' |'assert_equal_with_message(first, second, message, ...)' |'assert_not_equal_with_message(first, second, message, ...)' |'assert_string_equal_with_message(char *, char *, message, ...)' |'assert_string_not_equal_with_message(char *, char *, message, ...)' |========================================================= Todas as assertions possuem um parâmetro adicional 'char *' no qual é a mensagem que você deseja mostrar em caso de falha. Se o parâmetro for 'NULL', então a mensagem padrão é utilizada. A afirmação mais útil deste grupo é 'assert_true_with_message()' você pode usa-la para criar sua própria assertion de funções com mensagens próprias. Atualmente as macros de assertion possuem uma lista de argumentos variáveis. A mensagem de falha segue o template da função 'printf()'. Nos podemos mudar o teste acima para... [source,c] ----------------------------------------- static void strlen_of_hello_should_be_five() { const char *greeting = "Hello"; int length = strlen(greeting); assert_equal_with_message(length, 5, "[%s] should be 5, but was %d", greeting, length); } ----------------------------------------- Uma mensagem mais amigável para o usuário quando as coisas derem errado. Para o teste acima funcionar é necessário executa-lo em uma test suite. Podemos cria-la explicitamente para este teste com... [source,c] ----------------------------- TestSuite *our_tests() { TestSuite *suite = create_test_suite(); add_test(suite, strlen_of_hello_should_be_five); return suite; } ----------------------------------------- No caso você viu que 'strlen_of_hello_should_be_five()' deve ter & comercial na frente dele, 'add_test()' é uma macro. O '&' é adicionado automaticamente. Para executar o test suite, nos chamamos 'run_test_suite()'. Esta função limpa todo o teste depois de executa-lo, então podemos escrever... [source,c] ----------------------------- run_test_suite(our_tests(), create_text_reporter()); ----------------------------------------- Os resultados das assertions são passadas e as falhas são coletadas via um callback definido pela estrutura 'TestReporter'. A única definição prédefinida no Cgreen é o 'TextReporter' no qual emite as mensagens em texto plano. O script de teste agora se parece com isso... [source,c] ----------------------------- #include "cgreen/cgreen.h" #include static void strlen_of_hello_should_be_five() { assert_equal(strlen("Hello"), 5); } TestSuite *our_tests() { TestSuite *suite = create_test_suite(); add_test(suite, strlen_of_hello_should_be_five); return suite; } int main(int argc, char **argv) { return run_test_suite(our_tests(), create_text_reporter()); } ----------------------------------------- O valor de retorno do 'run_test_suite()' é um código Unix para exit. Compilando e executando temos... ----------------------------------------- gcc -c strlen_test.c gcc strlen_test.o -lcgreen -o strlen_test ./strlen_test Running "main"... Completed "main": 1 pass, 0 failures, 0 exceptions. ----------------------------------------- As mensagens do teste somente são mostradas em caso de falhas. Se você quebras seus testes... [source,c] ----------------------------- static void strlen_of_hello_should_be_five() { assert_equal(strlen("Hiya", 5); } ----------------------------------------- ...nós teremos uma mensagem... ----------------------------------------- Running "main"... Failure!: strlen_of_hello_should_be_five -> [5] shold be [4] at [strlen_test.c] line [6] Completed "main": 0 passes, 1 failure, 0 exceptions. ----------------------------------------- Cgreen apenda a localização da falha do teste na nossa string de erro. Uma vez que temos a estrutura básica para os testes, é fácil adicionar mais testes. Adicionar um teste para 'strlen()' com uma string vazia por exemplo... [source,c] ----------------------------- ... static void strlen_of_empty_string_should_be_zero() { assert_equal(strlen("\0"), 0); } TestSuite *our_tests() { TestSuite *suite = create_test_suite(); add_test(suite, strlen_of_hello_should_be_five); add_test(suite, strlen_of_empty_string_should_be_zero); return suite; } ... ----------------------------------------- E assim por diante. [[08]] Set up e tear down ~~~~~~~~~~~~~~~~~~ É comum para a suite de teste ter muito código duplicado, especialmente quando são configurador testes similares. Olha o exemplo com um banco de dados... [source,c] ----------------------------- #include "cgreen/cgreen.h" #include #include #include "person.h" static void create_schema() { MYSQL *connection = mysql_init(NULL); mysql_real_connect(connection, "localhost", "me", "secret", "test", 0, NULL, 0); mysql_query(connection, "create table people (name, varchar(255) unique)"); mysql_close(connection); } static void drop_schema() { MYSQL *connection = mysql_init(NULL); mysql_real_connect(connection, "localhost", "me", "secret", "test", 0, NULL, 0); mysql_query(connection, "drop table people"); mysql_close(connection); } static void can_add_person_to_database() { create_schema(); Person *person = create_person(); set_person_name(person, "Fred"); save_person(person); Person *found = find_person_by_name("Fred"); assert_string_equal(get_person_name(person), "Fred"); drop_schema(); } static void cannot_add_duplicate_person() { create_schema(); Person *person = create_person(); set_person_name(person, "Fred"); assert_true(save_person(person)); Person *duplicate = create_person(); set_person_name(duplicate, "Fred"); assert_false(save_person(duplicate)); drop_schema(); } TestSuite *person_tests() { TestSuite *suite = create_test_suite(); add_test(suite, can_add_person_to_database); add_test(suite, cannot_add_duplicate_person); return suite; } int main(int argc, char **argv) { return run_test_suite(person_tests(), create_text_reporter()); } ----------------------------------------- Nós já haviamos retirado o código duplicado e separado nas funções 'create_scheme()' and 'drop_schema()', então as coisas não estão tão ruins. Até o momento ainda não. Oque acontece se temos uma dúzia de testes deste tipo? Por exemplo um teste mais complicado como http://www.martinfowler.com/eaaCatalog/activeRecord.html[ActiveRecord], tendo dúzias de testes muito parecidos. Nós podemos fazer com que o Cgreen faça o trabalho para nós declarando estes métodos como funções 'setup()' e 'teardown()' na suite de testes. Aqui está a nova versão... [source,c] ----------------------------- ... static void create_schema() { ... } static void drop_schema() { ... } static void can_add_person_to_database() { Person *person = create_person(); set_person_name(person, "Fred"); save_person(person); Person *found = find_person_by_name("Fred"); assert_string_equal(get_person_name(person), "Fred"); } static void cannot_add_duplicate_person() { Person *person = create_person(); set_person_name(person, "Fred"); assert_true(save_person(person)); Person *duplicate = create_person(); set_person_name(duplicate, "Fred"); assert_false(save_person(duplicate)); } TestSuite *person_tests() { TestSuite *suite = create_test_suite(); setup(suite, create_schema); teardown(suite, drop_schema); add_test(suite, can_add_person_to_database); add_test(suite, cannot_add_duplicate_person); return suite; } ... ----------------------------------------- Com estas nova forma Cgreen executa a função 'create_schema()' antes de cada teste, e a função 'drop_schema()' depois de cada teste. Isto salva a digitação repetitiva e reduz as chances de acidentes. Isto também fazem os testes mais focados. A razão para nós tentarmos retirar fora tudo das funções de teste é que a suite de teste atua como documentação. No exemplo +person.h+ nós podemos facilmente ver que 'Person' tem algum tipo de propriedade, e o valor desta propriedate tem que ser único. Para que os testes atuem como uma especificação legível nós temos que remover toda gordura o máximo possível. Alguns detalhes. Atualmente apenas um 'setup()' e 'teardown()' podem ser adicionados em cada 'TestSuite'. Também a função 'teardown()' pode não executar se algum teste der errado (crash), causando algumas interferências nos testes. Isso nós prepara para a próxima seção... [[X011]] Cada teste dentro de seu próprio processo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Considere este teste... [source,c] ----------------------------- void will_seg_fault() { int *p = NULL; (*p)++; } ----------------------------------------- Crash não é algo que normalmente queremos quando um teste está em execução. Não menos importante, isto irá parar o recebimento da saída dos testes que você precisa para resolver o problema. Para prevenir segmentation faults e outros problemas que interrompam a suite de testes, Cgreen executa todos os testes dentro de seu próprio processo. Antes da chamada 'setup()', Cgreen faz um 'fork()'. O processo principal aguarda o teste ser completado normalmente ou não. Incluindo o 'teardown()'. Se o processo falha, uma exception é reportada e o processo de teste principal coleta. Por exemplo... [source,c] ----------------------------- #include "cgreen/cgreen.h" #include static void will_seg_fault() { int *p = NULL; (*p)++; } int main(int argc, char **argv) { TestSuite *suite = create_test_suite(); add_test(suite, will_seg_fault); run_test_suite(suite, create_text_reporter()); } ----------------------------------------- Quando compilamos e executamos, temos... ----------------------------------------- Running "main"... Exception!: will_seg_fault -> Test "will_seg_fault" failed to complete Completed "main": 0 passes, 0 failures, 1 exception. ----------------------------------------- A coisa obvia a ser feita agora é disparar o debugger. Infelizmente, o 'fork()' de processos pelo Cgreen pode ser uma complicação extra durante o debugger. Para contornar isto, e também para permir a executação de um teste por vez, Cgreen possui a função 'run_single_test()'. A assinatura dos métodos de execução são... - 'int run_test_suite(TestSuite *suite, TestReporter *reporter);' - 'int run_single_test(TestSuite *suite, char *test, TestReporter *reporter);' Os parametros extras de 'run_single_test()', a string 'test', é o nome do teste selecionado. Isto pode ser qualquer teste, até mesmo dentro das suite de testes (veja a seguir). Aqui está como nos podemos usar o debug no teste com problemas. [source,c] ----------------------------- int main(int argc, char **argv) { TestSuite *suite = create_test_suite(); add_test(suite, will_seg_fault); run_single_test(suite, "will_seg_fault", create_text_reporter()); } ----------------------------------------- Quando executamos desta maneira, Cgreen não irã fazer 'fork()'. Isto contorna o caso de segmentation fault, mas e sobre a falha no processo causando a queda no loop? Bem, Cgreen pode esperar para sempre. Usando manipuladores de sinais em C, nos podemos colocar um limite no processo enviando uma interrupeção. Para evitar a necessidade de escrever o manipulador, Cgreen inclui a função 'die_in()' para nos ajudar. Aqui está um exemplo limitando o tempo do teste... [source,c] ----------------------------- ... static void will_seg_fault() { ... } static void this_would_stall() { die_in(1); while(0 == 0) { } } int main(int argc, char **argv) { TestSuite *suite = create_test_suite(); add_test(suite, will_seg_fault); add_test(suite, this_would_stall); run_test_suite(suite, create_text_reporter()); } ----------------------------------------- Quando executado, o código irá esperar por um segundo, e finalizar com... ----------------------------------------- Running "main"... Exception!: will_seg_fault -> Test "will_seg_fault" failed to complete Exception!: will_stall -> Test "this_would_stall" failed to complete Completed "main": 0 passes, 0 failures, 2 exceptions. ----------------------------------------- Note que você vê o resultado do teste como ele é. Cgreen faz o stream do resultado tal como ele acontece, ficando fácil saber onde a suite de teste tem problema. Claro, que se você quiser configurar um limite de tempo geral em todos os seus testes, então você pode adicionar o código 'die_in()' na função 'setup()'. Cgreen irá então aplica o limite para todos. [[X12]] Construindo uma suite composta de testes ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ A 'TestSuite' é uma estrutura composta. Isto significa que as suites de testes podem ser adicionadas a suites de testes, construindo uma árvore de estruturas que pode ser executada na ordem. Vamos combinar os testes 'strlen()' com os testes 'Person' acima. Primeiramente nos precisamos remover a chamada 'main()'. Isto é... [source,c] ----------------------------- #include "cgreen/cgreen.h" #include static void strlen_of_hello_should_be_five() { ... } static void strlen_of_empty_string_should_be_zero() { ... } TestSuite *our_tests() { TestSuite *suite = create_test_suite(); add_test(suite, strlen_of_hello_should_be_five); add_test(suite, strlen_of_empty_string_should_be_zero); return suite; } ----------------------------------------- Então nos podemos escrever um pequeno chamado com a nova função 'main()'... [source,c] ----------------------------- #include "strlen_tests.c" #include "person_tests.c" TestSuite *our_tests(); TestSuite *person_tests(); int main(int argc, char **argv) { TestSuite *suite = create_test_suite(); add_suite(suite, our_tests()); add_suite(suite, person_tests()); if (argc > 1) { return run_single_test(suite, argv[1], create_text_reporter()); } return run_test_suite(suite, create_text_reporter()); } ----------------------------------------- Normalmente é facil colocar os protótipos 'TestSuite' dentro do código, ao invez de ter muitos arquivos de cabeçalho declarados. Este é o mesmo raciocínio que vamos usar para deixar os protótipos para testar as funções da suite. Nós podemos deixar como está, porque os testes são mais sobre documentação do que encapsulamento. Algumas vezes é útil ser capaz de executar um único teste a partir da linha de comando, por isso adicionamos um simples bloco 'if' para pegar o nome do teste como um argumento opcional. Toda a suite de teste será analisada em busca do teste selecionado. Este jeito também poupa a recompilação quando vamos fazer debug. Nós colocamos cada suite de teste dentro de seu próprio arquivo, mas não é necessário. Nós poderiamos ter muitas suites de teste dentro do mesmo arquivo, mesmo encadeadas. Você pode até mesmo misturar funções de teste e teste suites em uma mesma suite de teste pai. Porém vai dar trabalho. Se você colocar várias suites de teste no mesmo arquivo, então todas as suites irão ser nomeadas da mesma forma dentro do breadcrumb na mensagem de texto. Elas serão todas nomeadas depois da função criadora. Se você quiser eivtar isso, ou somente nomear seus testes, você pode 'create_named_test_suite()' ao invez de 'create_test_suite()'. Isto necessita de uma única string como parâmetro. Na realidade 'create_test_suite()' é apenas uma macro que inseri a constante '__func__' dentro de 'create_named_test_suite()'. Oque aconte com 'setup()' e 'teardown()' no 'TestSuite' que contém outro 'TestSuite's? Bem primeiramente, Cgreen não faz 'fork()' quando executa a suite. Ele deixa a suite filha fazer 'fork()' dos processos individuais. Desta maneira 'setup()' e 'teardown()' irão executar no processo principal. Eles irão ser executados uma vez para cada suite filha. Nos podemos usar isso para aumentar a velocidade do nosso teste 'Person' acima. Relembrando que nós criamos uma nova conexão e fechamos novamente dentro do fixtures. Isto significa abrir e fechar muitas conexões. Com pouco risco de algum interferência dos testes, nós podemos reusar a conexão atravez dos testes... [source,c] ----------------------------- ... static MYSQL *connection; static void create_schema() { mysql_query(connection, "create table people (name, varchar(255) unique)"); } static void drop_schema() { mysql_query(connection, "drop table people"); } static void can_add_person_to_database() { ... } static void cannot_add_duplicate_person() { ... } void open_connection() { connection = mysql_init(NULL); mysql_real_connect(connection, "localhost", "me", "secret", "test", 0, NULL, 0); } void close_connection() { mysql_close(connection); } TestSuite *person_tests() { TestSuite *suite = create_test_suite(); setup(suite, create_schema); teardown(suite, drop_schema); add_test(suite, can_add_person_to_database); add_test(suite, cannot_add_duplicate_person); TestSuite *fixture = create_named_test_suite("Mysql fixture"); add_suite(fixture, suite); setup(fixture, open_connection); teardown(fixture, close_connection); return fixture; } ----------------------------------------- O segredo aqui é criar um wrapper para a suite de teste no qual tem o propósito de fazer um wrap na suite de teste principal para o fixture. Este é o nosso ponteiro 'fixture'. Este código é um pouco confuso, porque temos dois conjuntos de fixture no mesmo script de teste. Nos temos o fixture para as conexões MySQL. Isto executa 'open_connection()' e 'close_connection()' somente uma vez no início e fim do teste person. Isto é porque o ponteiro 'suite' é o único membro do 'fixture'. Nos também temos a fixture para o schema, o 'create_schema()' e 'drop_schema()', no qual é executado antes e depois de todo teste. Estas ainda estão vinculadas dentro do 'suite'. No mundo real nós provavelmente colocariamos o fixture para a conexão dentro de seu próprio arquivo... [source,c] ----------------------------- static MYSQL *connection; MYSQL *get_connection() { return connection; } static void open_connection() { connection = mysql_init(NULL); mysql_real_connect(connection, "localhost", "me", "secret", "test", 0, NULL, 0); } static void close_connection() { mysql_close(connection); } TestSuite *connection_fixture(TestSuite *suite) { TestSuite *fixture = create_named_test_suite("Mysql fixture"); add_suite(fixture, suite); setup(fixture, open_connection); teardown(fixture, close_connection); return fixture; } ----------------------------------------- Isto permite reusar fixtures comuns entre projetos. [[X13]] Funções Mock com Cgreen ----------------------- Quando testamos você espera que eles estejam corretos. Eventos aleatórios podem destruir a confiabilidade na suite de testes e forçar execuções extras para ter certeza que estão certos. Um bom teste coloca o assunto a ser testado dentro de um ambiente isolado e controlado. Uma câmara de testes se você preferir. Isto fazem os testes rápidos, repetitivos e confiáveis. Para criar uma câmare de testes para o código de teste, nós temos que controlar todas as chamadas para fora do nosso código sob teste. Nos iremos acreditar na falha dos nossos testes se o nosso código faz uma chamada para a internet por exemplo. A Internet pode falhar por si só. Não só não temos total controle, mas pode ser necessário ter componentes funcionais antes de poder testar o código de alto nível. Isto torna difícil testar códigos em outras camadas. A solução para este dilema é escrever um código falso (stub) para o componente enquanto o código de alto nível é escrito. Isto polui a base do código com código temporário, e o isolamento do teste desaparece quando o sistema eventualmente é modificado. O ideal é ter um mínimo de stubs escrito para cada teste individual. Cgreen encoraja esta abordagem fazendo tais testes faceis de escrever. [[X14]] O problema com streams ~~~~~~~~~~~~~~~~~~~~~~ Como testar este código... ? [source,c] ----------------------------- char *read_paragraph(int (*read)(void *), void *stream) { int buffer_size = 0, length = 0; char *buffer = NULL; int ch; while ((ch = (*read)(stream)) != EOF) { if (++length > buffer_size) { buffer_size += 100; buffer = realloc(buffer, buffer_size + 1); } if ((buffer[length] = ch) == '\n') { break; } } return buffer; } ----------------------------------------- Isto é um filtro de stream genérico que troca o caractere recebido em C strings dentro de parágrafos. Cada chamada cria um parágrafo, retornando um ponteiro ou retornando 'NULL' se não há parágrafo. O parágrafo tem uma memória alocada e o stream avança lendo a próxima chamada. Tem pouca funcionalidade, e poucas condições. Eu realmente quero que este código seja testado antes de usa-lo. O problema é a dependência do stream. Nós podemos usar uma stream real, mas pode causar todos os tipos de dores de cabeça. Ele faz o teste da formatação do parágrafo dependente de um stream funcional. Ele significa que nós temos que escrever o stream primeiro, codificar de baixo para cima em vez de cima para baixo. Ele também significa configurar recursos externos. Isto é mais trabalho, execução lenta, e pode gerar resultados falsos dos testes. Em contraste nós podemos escrever um simulador de stream para cada teste, chamado "server stub". Por exemplo, quando o stream é vazio nada acontece. Nós recebemos um 'NULL' de 'read_paragraph' quando o stream é exausto. Isso é, ele somente retorna um stream steady de 'EOF's. For example, when the stream is empty nothing should happen. We hopefully get 'NULL' from 'read_paragraph' when the stream is exhausted. That is, it just returns a steady stream of 'EOF's. [source,c] ----------------------------- static int empty_stream(void *stream) { return EOF; } static void reading_lines_from_empty_stream_gives_null() { assert_equal(read_paragraph(&empty_stream, NULL), NULL); } TestSuite *stream_tests() { TestSuite *suite = create_test_suite(); add_test(suite, reading_lines_from_empty_stream_gives_null); return suite; } ----------------------------------------- Nossa simulação está facil aqui, por que nosso stream falso retorna somente um valor. As coisas são difíceis quando o resultado da função muda de chamada a chamada como um stream real pode ser. Simulando isto pode significar confusão com variáveis estáticas e contadores que são reiniciados para cada teste. E, nós vamos escrever poucos stubs. Com frequentes diferenças em cada teste. Ficando muito confuso. Cgreen manipula esta desorganização para nós deixando nós escrever uma função única para todos os nossos testes. Gravando e tocando ~~~~~~~~~~~~~~~~~~ Nós podemos refazer nosso exemplo criando a função 'stub_stream()' (qualquer nome vai fazer)... We can redo our example by creating a 'stub_stream()' function (any name will do)... [source,c] ----------------------------- static int stub_stream(void *stream) { return (int)mock(); } ----------------------------------------- Trivial nosso servidor de stub acima, ele é somente um macro para gerar um retorno do valor, mas nós podemos reusar isto depois de cada teste. Para o nosso simples exemplo acima nos apenas dizemos para ele sempre retornar 'EOF'... [source,c] ----------------------------- static int stub_stream(void *stream) { return (int)mock(); } static void reading_lines_from_empty_stream_gives_null() { always_return(stub_stream, EOF); assert_equal(read_paragraph(stub_stream, NULL), NULL); } ----------------------------------------- A macro 'always_return()' recebe como argumento o nome da função e retorna o valor. Nós tinhamos dito para 'stub_stream()' sempre retornar 'EOF' quando chamado. The 'always_return()' macro takes as arguments the function name and the return value. We have told 'stub_stream()' to always return 'EOF' when called. Vamos ver se o nosos código de produção atualmente funciona... ----------------------------------------- Running "main"... Completed "main": 1 pass, 0 failures, 0 exceptions. ----------------------------------------- Muito bom. No próximo teste. Se você quer testar uma linha com um caracter, nos temos que enviar o terminador 'EOF' ou '"\n"' bem como um único caracter. De outra maneira nosso código entrará em loop eterno, pegando uma linha infinita de caracteres. Aqui está como nós podemos fazer isto... [source,c] ----------------------------- static void one_character_stream_gives_one_character_line() { will_return(stub_stream, 'a'); will_return(stub_stream, EOF); char *line = read_paragraph(&stub_stream, NULL); assert_string_equal(line, "a"); free(line); } ----------------------------------------- Diferente da instrução 'always_return()', 'will_return()' ajusta somente um valor de retorno único. Ele atua como um modo de gravação e reprodução. Sucessivas instruções mapeiam o retorno da sequencia no qual é retornado uma vez quando o teste inicia. Nós vamos adicionar este teste na suite e executa-lo... ----------------------------------------- Running "main"... Failure!: stream_tests -> one_character_stream_gives_one_character_line -> [] should match [a] at [stream_test.c] line [19] Completed "main": 1 pass, 1 failure, 0 exceptions. ----------------------------------------- Oops. Nosso código sob teste não funciona. Antes precisamos de um conserto... [source,c] ----------------------------- char *read_paragraph(int (*read)(void *), void *stream) { int buffer_size = 0, length = 0; char *buffer = NULL; int ch; while ((ch = (*read)(stream)) != EOF) { if (++length > buffer_size) { buffer_size += 100; buffer = realloc(buffer, buffer_size + 1); } if ((buffer[length - 1] = ch) == '\n') { break; } } return buffer; } ----------------------------------------- Depois que está tudo bem... ----------------------------------------- Running "main"... Completed "main": 2 passes, 0 failures, 0 exceptions. ----------------------------------------- Como fazer o stubs Cgreen? A chamada 'will_return()' constroi uma lista estática de valores retornados no qual são limpos entre os testes. A macro 'mock()' captura a propriedade '__func__'. Ele usa isto para procurar entradas na lista retornada, e também para gerar mensagem mais claras. Nós podemos passar nossos testes um pouco mais rápido agora... [source,c] ----------------------------- static void one_word_stream_gives_one_word_line() { will_return(stub_stream, 't'); will_return(stub_stream, 'h'); will_return(stub_stream, 'e'); always_return(stub_stream, EOF); assert_string_equal(read_paragraph(&stub_stream, NULL), "the"); } ----------------------------------------- Eu tenho sido um pouco malcraido. Como cada teste executa dentro de seu próprio processo, Eu não tenho me preocupado em liberar os ponteiros para parágrafos. Eu tenho somente deixado o sistema operacional fazer isto. Puristas podem querer adiconar uma limpeza adicional no código. Eu tenho usado também 'always_return()' para a última instrução. Sem isto, se o stub recebe uma instrução no qual ele não espera, ele pode lançar uma falha no teste. Isto é muito restritivo, como nossa função 'read_paragraph()' pode legitimamente chamar o stream depois dele ter executado no final. OK, esse pode ser um comportamento estranho, mas não é oque estamos testando aqui. Se tivéssemos, isto seria colocado em um teste próprio. A chamada 'always_return()' diz para o Cgreen manter após a chamada das três letras, permitindo chamadas extras. Como nós construimos mais testes, eles iniciam procurando uma especificação do comportamento... [source,c] ----------------------------- static void drops_line_ending_from_word_and_stops() { will_return(stub_stream, 't'); will_return(stub_stream, 'h'); will_return(stub_stream, 'e'); will_return(stub_stream, '\n'); assert_string_equal(read_paragraph(&stub_stream, NULL), "the"); } ----------------------------------------- ...e com sorte... [source,c] ----------------------------- static void single_line_ending_gives_empty_line() { will_return(stub_stream, '\n'); assert_string_equal(read_paragraph(&stub_stream, NULL), ""); } ----------------------------------------- Por agora nos não temos que usar 'always_return()'. Nós queremos deixar o stream aonde ela está, pronta para a próxima chamada de 'read_paragraph()'. Se chamarmos o stream fora do final da linha, nos vamos ter falha. Acontecendo a falha mesmo assim... ----------------------------------------- Running "main"... Failure!: stream_tests -> drops_line_ending_from_word_and_stops -> [the ] should match [the] at [stream_test.c] line [36] Failure!: stream_tests -> single_line_ending_gives_empty_line -> [ ] should match [] at [stream_test.c] line [41] Completed "main": 3 passes, 2 failures, 0 exceptions. ----------------------------------------- Claramente nós passamos atravez do final da linha. Depois de outro conserto... Clearly we are passing through the line ending. Another fix later... [source,c] ----------------------------- char *read_paragraph(int (*read)(void *), void *stream) { int buffer_size = 0, length = 0; char *buffer = NULL; int ch; while ((ch = (*read)(stream)) != EOF) { if (++length > buffer_size) { buffer_size += 100; buffer = realloc(buffer, buffer_size + 1); } if ((buffer[length - 1] = ch) == '\n') { buffer[--length] = '\0'; break; } buffer[length] = '\0'; } return buffer; } ----------------------------------------- E nós passamos novamente... ----------------------------------------- Running "main"... Completed "main": 5 passes, 0 failures, 0 exceptions. ----------------------------------------- Não há limites no número de métodos stubs nos testes, somente aqueles dois stubs não podem ter o mesmo nome. Então isto pode causar problemas... [source,c] ----------------------------- static int stub_stream(void *stream) { return (int)mock(); } static void bad_test() { will_return(stub_stream, 'a'); do_stuff(&stub_stream, &stub_stream); } ----------------------------------------- Será necessário ter dois stubs para fazer o teste correto... [source,c] ----------------------------- static int first_stream(void *stream) { return (int)mock(); } static int second_stream(void *stream) { return (int)mock(); } static void good_test() { will_return(first_stream, 'a'); will_return(second_stream, 'a'); do_stuff(&first_stream, &second_stream); } ----------------------------------------- Nos agora temos um jeito de escrever testes rápidos e limpos sem nenhuma dependência externa. A informação ainda segue um caminho, do stub para o código sob teste. Quando o seu código chama um procedimento complexo, nos não queremos saber os efeitos que acontece. Isto é muito parecido com o trabalho de um detetive. E oque queremos? Nós somente queremos saber se estamos enviando as informações corretas. As coisas se tornam mais interessantes quando pensamos no tráfego vindo de outro jeito, do código para o stub. Isto nos coloca no mesmo território assim como os objetos mock. [[X15]] Configurando valores aguardados em funções mock ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Para trocar o sentido do tráfego, nós temos que olhar em um exemplo contrário. Aqui está um código de produção préescrito. [source,c] ----------------------------- void by_paragraph(int (*read)(void *), void *in, void (*write)(void *, char *), void *out) { while (1) { char *line = read_paragraph(read, in); if (line == NULL) { return; } (*write)(out, line); free(line); } } ----------------------------------------- Isto é o início do utilitário de formatação. Filtros anterirores vão provavelmente quebrar o parágrafo em texto justificado, mas agora isso é tudo abstraído atraz da interface 'void write(void *, char *)'. Nossos interesses são: fazer ele passar atravez os parágrafo, e fazer ele cair? Nos podemos testar a correta formatação do parágrafo escrevendo um stub que coleta o parágrafo dentro de uma 'struct'. Nos podemos então ficar a parte daquela 'struct' e testar cada ponto com assertions. Este jeito é extremamente desajeitado em C. A linguagem não é apropriada para construir e destruir, nunca pense em navegar-las com assertions. Nós desorganizariamos nossos testes. Em vez disso nos testamos a saída assim que possível, como na chamada da função... [source,c] ----------------------------- ... void expect_one_letter_paragraph(char *paragraph, void *stream) { assert_string_equal(paragraph, "a", NULL); } void one_character_is_made_into_a_one_letter_paragraph() { by_paragraph( &one_character_stream, NULL, &expect_one_letter_paragraph, NULL); } ... ----------------------------------------- Colocando assertions entre as funções mock, mantemos os testes mínimos. A idéia deste método é que voltamos a escrever funções individuais para cada teste. Nós temos o mesmo problema como tinhamos codificando stubs. Novamente, Cgreen tem um jeito para automatizar isto. Aqui está o teste reescrito... [source,c] ----------------------------- static int reader(void *stream) { return (int)mock(stream); } static void writer(void *stream, char *paragraph) { mock(stream, paragraph); } void one_character_is_made_into_a_one_letter_paragraph() { will_return(reader, 'a'); always_return(reader, EOF); expect(writer, want_string(paragraph, "a")); by_paragraph(&reader, NULL, &writer, NULL); } ----------------------------------------- Onde estão as assertions? Como nosso stub anterior, 'reader()' pode agora verificar seus parâmetros. Em orientação a objeto, um objeto que checa seus próprios pararâmetros bem como simula comportamento é chamado de objeto mock. Por analogia 'reader()' é uma função mock, ou um callback mock. Usando a macro 'expect', temos afirmado que 'writer()' será chamado apenas uma vez. Esta chamada deve ter a string '"a"' para o parâmetro parágrafo. Se este parâmetro não casar, a função mock vai emitir uma falha para a suite de teste. Isto é oque nós evita escrever um monte de assertions. Using the 'expect' macro, we have stated that 'writer()' will be called just once. That call must have the string '"a"' for the paragraph parameter. If this parameter does not match, the mock function will issue a failure straight to the test suite. This is what saves us writing a lot of assertions. Aqui está uma lista de instruções que podem ser enviadas para mocks... |========================================= |Macro| Parameters |'will_return(function, result)'| Returns result once only, but successive calls will be replayed in order. Generates a failure when called too many times. |'always_return(function, result)'| Returns result repeatedly. |'expect(function, arguments...)'| Sets up an expectation on each argument. If there is a mismatch, or a call is made without an expectation, a failure is generated. |'always_expect(function, arguments...)'| Must receive exactly these arguments from now on. |'expect_never(function)'| This function must not be called or a failure is generated. |'will_respond(function, result, arguments...)'| Combines 'will_return()' and 'expect()'. |'always_respond(function, result, arguments...)'| Combines 'always_return()' and 'always_expect()' |========================================= The 'expect_never()' macro is slightly different. It's only task is to confirm that a method was never run. The 'will_respond()' macro combines the 'will_return()' and the 'expect()' calls into one call, as does 'always_respond'. Each parameter can be tested with a constraint. Two constraints are available: 'want(parameter, expected)' for integers and pointers, and 'want_string(parameter, expected)' does a string comparison. Isto é uma questão de tempo, nos podemos rodar nossos testes... ----------------------------------------- Running "main"... Completed "main": 6 passes, 0 failures, 0 exceptions. ----------------------------------------- Para um caractere único funciona, nos podemos adicionalmente especificar este comportamento. Primeiramente uma sequencia de entradas... [source,c] ----------------------- static void no_line_endings_makes_one_paragraph() { will_return(reader, 'a'); will_return(reader, ' '); will_return(reader, 'b'); will_return(reader, ' '); will_return(reader, 'c'); always_return(reader, EOF); expect(writer, want_string(paragraph, "a b c")); by_paragraph(&reader, NULL, &writer, NULL); } ----------------------------------------- Um programador mais inteligente do que eu iria colocar todos estas chamadas dentro de um loop. Próximo, checando a saída da sequencia... [source,c] ----------------------- static void line_endings_generate_separate_paragraphs() { will_return(reader, 'a'); will_return(reader, '\n'); will_return(reader, 'b'); will_return(reader, '\n'); will_return(reader, 'c'); always_return(reader, EOF); expect(writer, want_string(paragraph, "a")); expect(writer, want_string(paragraph, "b")); expect(writer, want_string(paragraph, "c")); by_paragraph(&reader, NULL, &writer, NULL); } ----------------------------------------- Como o stub 'will_return()' acima, a chamada 'expect()' segue um modelo de gravação e reprodução. Cada teste é uma chamada sucessiva. Esta sequencia confirma que nos temos '"a"', '"b"' e '"c"' na ordem. Então iremos ter certeza que os ponteiros corretos são passados para a função correta. Isto é uma checagem mais realista dos parâmetros... [source,c] ----------------------- static void resources_are_paired_with_the_functions() { will_respond(reader, 'a', want(stream, 1)); always_respond(reader, EOF, want(stream, 1)); expect(writer, want(stream, 2)); by_paragraph(&reader, (void *)1, &writer, (void *)2); } ----------------------------------------- E finalmente iremos especificar que a escrita não é chamada se não há parágrafo. [source,c] ----------------------- static void empty_paragraphs_are_ignored() { will_return(reader, '\n'); always_return(reader, EOF); expect_never(writer); by_paragraph(&reader, NULL, &writer, NULL); } ----------------------------------------- Este último teste não está sendo feito... ----------------------------------------- Running "main"... Failure!: stream_tests -> empty_paragraphs_are_ignored -> Unexpected call to function [writer] at [stream_test.c] line [96] Completed "main": 14 passes, 1 failure, 0 exceptions. ----------------------------------------- Obviamente linhas em branco ainda são enviadas para 'writer()'. Uma vez que isto é apontado, o concerto é óbvio... [source,c] ----------------------- void by_paragraph(int (*read)(void *), void *in, void (*write)(void *, char *), void *out) { while (1) { char *line = read_paragraph(read, in); if ((line == NULL) || (strlen(line) == 0)) { return; } (*write)(out, line); free(line); } } ----------------------------------------- Testes com 'expect_never()' podem ser muito efetivos na descoberta sutil de bugs. ----------------------------------------- Running "main"... Completed "main": 14 passes, 0 failures, 0 exceptions. ----------------------------------------- Tudo feito. [[X19]] Mudando os relatórios do Cgreen ------------------------------- [[X20]] Trocando o relatório ~~~~~~~~~~~~~~~~~~~~ Em toda suite de teste, nos temos que executar os testes com esta linha... [source,c] ----------------------- return run_test_suite(our_tests(), create_text_reporter()); ----------------------------------------- Nos podemos mudar o mecanismo de relatório somente trocando este método. Aqui está um código para 'create_text_reporter()'... [source,c] ----------------------- TestReporter *create_text_reporter() { TestReporter *reporter = create_reporter(); reporter->start = &text_reporter_start; reporter->finish = &text_reporter_finish; reporter->show_fail = &show_fail; reporter->show_incomplete = &show_incomplete; return reporter; } ----------------------------------------- A estrutura 'TestReporter' contem ponteiros de função no qual controlam o relatório. Quando chamadas pelo construtor 'create_reporter()', estes ponteiros são configurados com funções que não mostram nada. O código do relatório de texto troca estas com alguma coisa mais dramática , e então retorna um ponteiro para o novo objeto. Desta maneira a função 'create_text_reporter()' efetivamente extende o objeto a partir de 'create_reporter()'. O relatório de texto somente mostra o conteúdo partir do início do primeiro teste, até o final dos testes, quando uma falha ocorre e quando um teste falha para completar. Uma pequena olhada no arquivo +text_reporter.c+ do Cgreen revela que sobrepõem somente a saída da mensagem e encadeia para a versão de +reporter.h+. Para mudarmos o mecanisco de relatório, basta conhecermos um pouco sobre os métodos da estrutura 'TestReporter'. [[X21]] A estrutura do TestReporter ~~~~~~~~~~~~~~~~~~~~~~~~~~~ O 'TestReporter' do Cgreen é uma pseudo classe que se parece como... [source,c] ----------------------- typedef struct _TestReporter TestReporter; struct _TestReporter { void (*destroy)(TestReporter *); void (*start)(TestReporter *, const char *); void (*finish)(TestReporter *, const char *); void (*show_pass)(TestReporter *, const char *, int, const char *, va_list); void (*show_fail)(TestReporter *, const char *, int, const char *, va_list); void (*show_incomplete)(TestReporter *, const char *); void (*assert_true)(TestReporter *, const char *, int, int, const char *, ...); int passes; int failures; int exceptions; void *breadcrumb; int ipc; void *memo; }; ----------------------------------------- O primeiro bloco são métodos que podem ser sobrepostos. [horizontal] 'void (*destroy)(TestReporter *)':: Este é o destrutor para a estrutura default. Se for sobreposto, então a função sobreposta necessita chamar 'destroy_reporter(TestReporter *reporter)' para finalizar e limpar. 'void (*start)(TestReporter *, const char *)':: A primeira das callbacks. No começo de cada suite de teste Cgreen vai chamar este método dentro do relatório com o nome da suite iniciada. A versão default mantem o registro da pilha de testes dentro do ponteiro 'breadcrumb' para 'TestReporter'. Se você faz uso das funções breadcrumb, como por default faz, então você precisa chamar 'reporter_start()' para manter os registros sincronizados. 'void (*finish)(TestReporter *, const char *)':: Do outro lado a chamada para '(*start)()' é feita quando a suite de teste é deixada. Ela precisa ser encadeiada pelo 'reporter_finish()' para manter o registro de breadcrumb. O próximo relatório usa o estado do breadcrumb para decidir se ele está no fim do teste. Se esta, ele imprime o sumário familiar de falhas e sucessos. 'void (*show_pass)(TestReporter *, const char *, int, const char *, va_list)':: Este método é inicializado vazio, então não é necessário encadear a chamada para nenhuma outra função. Além disso o ponteiro para a estrutura de relatório, Cgreen também passa o nome do arquivo do teste, o número da linha da assertion falhada, a mensagem para mostrar e qualquer parâmetro adicional para ser substituido dentro da mensagem. A mensagem vem no estilo 'printf()' de formatação de string, e então a lista de argumento variável faz as substituições. 'void (*show_fail)(TestReporter *, const char *, int, const char *, va_list)':: O parceiro do 'show_pass()', e é uma das que gostariamos de sobrepor primeiro. 'void (*show_incomplete)(TestReporter *, const char *)':: Quando um teste falha, este é o handle que é chamado. Como ele é um resultado inexperado, nenhuma mensagem é recebida, mas faz chegar o nome do teste. O relatório do teste combina isto com o breadcrumb para produzir a exceção no relatório. 'void (*assert_true)(TestReporter *, const char *, int, int, const char *, ...)':: Isto não é normalmente sobreposto e é interno. Ele é ponto de entrada para as mensagesm de teste a partir da suite de teste. Por default isto dispacha a chamada para 'show_pass()' ou 'show_fail()'. O segundo bloco é somente recursos e registro no qual o relatório pode usar para exibir as mensagens... [horizontal] 'passes':: O número de sucesso gerado até agora. 'failures':: O número de falhas geradas até agora. 'exceptions':: O números de funções testadas que falharam em completar até agora. 'breadcrumb':: Este é um ponteiro para a lista de nomes dentro da stack. O ponteiro 'breadcrumb' é diferente e necessita de uma pequena explanação. Basicamente ele é uma pilha, análogo a breadcrumb trail que você vê em websites. Todo vez que o handle 'start()' é invocado, o nome é colocado dentro da stack. Quando o handle 'finish()' é invocado, o nome é retirado da stack. Há um monte de funções uteis em +cgreen/breadcrumb.h+ no qual podem ajudar a ler o estado do stack. As mais uteis são 'get_current_from_breadcrumb()' no qual pega um ponteiro breadcrumb e retorna o nome do teste corrente, e 'get_breadcrumb_depth()' no qual retorna a atual profundidade da stack. Uma profundidade zero significa que a execução do teste acabou. Se você precisa atravessar todos os nomes dentro do breadcrumb, então você pode chamar 'walk_breadcrumb()'. Aqui está a assinatura completa... [source,c] ----------------------- void walk_breadcrumb(Breadcrumb *breadcrumb, void (*walker)(const char *, void *), void *memo); ----------------------------------------- O 'void (*walker)(const char *, void *)' é uma callback que vai ser passada o nome da suite de teste para cada nível aninhado. Ele também passa o ponteiro 'memo' que foi passado para a chamada 'walk_breadcrumb()'. Você pode usar este ponteiro para qualquer coisa que você queira, como o Cgreen faz é passar de chamada para chamada. Trata-se de um agregado de informações mantendo o registro e ainda reentrantes. As últimas partes da estrutura do 'TestReporter' são... [horizontal] 'ipc':: Isto é uma estrutura interna para manipular as mensagem entre o relatório e a suite de testes. Você não preciso mexer nisto. 'memo':: Isto é um ponteiro livre para sua própria expansão. [[X23]] Um exemplo de relatório XML ~~~~~~~~~~~~~~~~~~~~~~~~~~~ Vamos fazer coisas reais com um exemplo. Suponha que queiremos enviar a saída do Cgreen no formato XML, para armazenar em um repositório ou para enviar atravez da rede. Suponha também que ele venha com o seguinte formato... [source, xml] ----------------------------------------- A failure ]]> ----------------------------------------- Em outras palavras um simples aninhamento de testes com somente as falhas reportadas. A ausência da falha é o sucesso do teste. Aqui esta um script de teste +test_in_xml.c+ no qual nos podemos usar para construir a saída acima... [source,c] ----------------------- #include "cgreen/cgreen.h" void a_test_that_passes() { assert_true(1); } void a_test_that_fails() { assert_true_with_message(0, "A failure"); } TestSuite *create_test_group() { TestSuite *suite = create_named_test_suite("A Group"); add_test(suite, a_test_that_passes); add_test(suite, a_test_that_fails); return suite; } int main(int argc, char **argv) { TestSuite *suite = create_named_test_suite("Top Level"); add_suite(suite, create_test_group()); return run_test_suite(suite, create_text_reporter()); } ----------------------------------------- O relatório texto é usado somente para confirmar se tudo está funcionando Até agora ele esta. ----------------------------------------- Running "Top Level"... Failure!: A Group -> a_test_that_fails -> A failure at [test_as_xml.c] line [8] Completed "Top Level": 1 pass, 1 failure, 0 exceptions. ----------------------------------------- Nosso primeiro movimento é trocar o relatório de texto, para o nosso ainda não escrito na versão em XML... [source,c] ----------------------- #include "cgreen/cgreen.h #include "xml_reporter.h" ... int main(int argc, char **argv) { TestSuite *suite = create_named_test_suite("Top Level"); add_suite(suite, create_test_group()); return run_test_suite(suite, create_xml_reporter()); } ----------------------------------------- Nos iniciaremos com o arquivo de cabeçalho +xml_reporter.h+... [source,c] ----------------------- #ifndef _XML_REPORTER_HEADER_ #define _XML_REPORTER_HEADER_ #include "cgreen/reporter.h" TestReporter *create_xml_reporter(); #endif ----------------------------------------- ...e o relatório mais simplista possível em +reporter.c+. [source,c] ----------------------- #include "xml_reporter.h" #include "cgreen/reporter.h" TestReporter *create_xml_reporter() { TestReporter *reporter = create_reporter(); return reporter; } ----------------------------------------- A saída não é nada. ----------------------------------------- gcc -c test_as_xml.c gcc -c xml_reporter.c gcc xml_reporter.o test_as_xml.o -lcgreen -o xml ./xml ----------------------------------------- Ainda, nada. Vamos adicionar as tags primeiro, de modo que possamos ver o Cgreen navegar na test suite... [source,c] ----------------------- #include "xml_reporter.h" #include "cgreen/reporter.h" #include static void xml_reporter_start(TestReporter *reporter, const char *name); static void xml_reporter_finish(TestReporter *reporter, const char *name); TestReporter *create_xml_reporter() { TestReporter *reporter = create_reporter(); reporter->start = &xml_reporter_start; reporter->finish = &xml_reporter_finish; return reporter; } static void xml_reporter_start(TestReporter *reporter, const char *name) { printf(";\n", name); reporter_start(reporter, name); } static void xml_reporter_finish(TestReporter *reporter, const char *name) { reporter_finish(reporter, name); printf("\n"); } ----------------------------------------- Apesar do encadeamento subjacente as funções 'reporter_start()' e 'reporter_finish()' são opcionais, eu quero fazer uso de algumas facilidades depois. Nossa saída por enquanto, é fazer a tentativa em passos... ----------------------------------------- ]]> ----------------------------------------- Nos não queremos uma mensagem de sucesso, então a função 'show_fail()' é tudo oque precisamos... [source,c] ----------------------- ... static void xml_show_fail(TestReporter *reporter, const char *file, int line, const char *message, va_list arguments); TestReporter *create_xml_reporter() { TestReporter *reporter = create_reporter(); reporter->start = &xml_reporter_start; reporter->finish = &xml_reporter_finish; reporter->show_fail = &xml_show_fail; return reporter; } ... \n"); printf("\t"); vprintf(message, arguments); printf("]]>\n"); printf("\t\n", file, line); printf("\n"); } ]]> ----------------------------------------- Nos temos que usar 'vprintf()' para manipular a lista de argumento variável passada para nós. Isto irá provavelmente significar a inclusão do cabeçalho +stdarg.h+ bem como +stdio.h+. Isto nos aproxima do que queremos... ----------------------------------------- A failure]]> ]]> ----------------------------------------- Para completar devemos adicionar uma tag para um teste incompleto. Nos vamos visualizar isto como uma falha, entretando nos não vamos saber a localização por enquanto... [source,c] ----------------------- static void xml_show_incomplete(TestReporter *reporter, const char *name) { printf("\n"); printf("\tFailed to complete]]>\n"); printf("\n"); } ----------------------------------------- Tudo oque vem depois é a declaração XML e a identação. Entretanto a identação não é estritamente necessária, isto pode fazer a saída muito mais clara. A profundidade do teste é registrada para nos com o objeto 'breadcrumb' dentro da estrutura 'TestReporter'. Nos vamos adicionar a função 'indent()' que imprime o correto número de tabs... [source,c] ----------------------- static indent(TestReporter *reporter) { int depth = get_breadcrumb_depth((Breadcrumb *)reporter->breadcrumb); while (depth-- > 0) { printf("\t"); } } ----------------------------------------- A função 'get_breadcrumb_depth()' somente dá a profundidade atual do teste. Como é apenas o número de tabs para imprimir, a implementação é trivial. Nos podemos então usar esta função no restante do código. Aqui está a listagem completa... [source,c] ----------------------- #include "xml_reporter.h" #include "cgreen/reporter.h" #include "cgreen/breadcrumb.h" #include #include static indent(TestReporter *reporter); static void xml_reporter_start(TestReporter *reporter, const char *name); static void xml_reporter_finish(TestReporter *reporter, const char *name); static void xml_show_fail(TestReporter *reporter, const char *file, int line, const char *message, va_list arguments); static void xml_show_incomplete(TestReporter *reporter, const char *name); TestReporter *create_xml_reporter() { TestReporter *reporter = create_reporter(); reporter->start = &xml_reporter_start; reporter->finish = &xml_reporter_finish; reporter->show_fail = &xml_show_fail; reporter->show_incomplete = &xml_show_incomplete; return reporter; } static indent(TestReporter *reporter) { int depth = get_breadcrumb_depth((Breadcrumb *)reporter->breadcrumb); while (depth-- > 0) { printf("\t"); } } static void xml_reporter_start(TestReporter *reporter, const char *name) { if (get_breadcrumb_depth((Breadcrumb *)reporter->breadcrumb) == 0) { printf("\n"); } indent(reporter); printf("\n", name); reporter_start(reporter, name); } static void xml_reporter_finish(TestReporter *reporter, const char *name) { reporter_finish(reporter, name); indent(reporter); printf("\n"); } static void xml_show_fail(TestReporter *reporter, const char *file, int line, const char *message, va_list arguments) { indent(reporter); printf("\n"); indent(reporter); printf("\t"); vprintf(message, arguments); printf("]]>\n"); indent(reporter); printf("\t\n", file, line); indent(reporter); printf("\n"); } static void xml_show_incomplete(TestReporter *reporter, const char *name) { indent(reporter); printf("\n"); indent(reporter); printf("\tFailed to complete]]>\n"); indent(reporter); printf("\n"); } ----------------------------------------- E finalmente a saída desejada... [source, xml] ----------------------------------------- A failure]]> ]]> ----------------------------------------- Trabalho concluído. Possivelmente outras extensões incluem relatórios que escrevem para syslog, integração com IDE, imprimir documentos ou somente retornar um boleano para propósitos de monitoramento. [[X25]] Coleta automática de testes -------------------------- [[X27]] A ferramenta collector ~~~~~~~~~~~~~~~~~~~~~~ Quando queremos adicionar um novo teste, acrescentamos no script de testes uma função do tipo void. E então adicionamos o nome do teste dentro da TestSuite. Em resumo cada novo teste deve ser adicionado na TestSuite para ele ser encontrado durante a execução dos testes. A ferramenta collector muda este comportamento tedioso. A ideia da ferramenta é poupar o trabalho de adicionar o teste criado na 'TestSuite'. Basicamente cada teste passa a ser declarado usando a macro Ensure no qual é inserida automaticamente na 'TestSuite'. via a ferramenta collector. [[X26]] Exemplo prático ~~~~~~~~~~~~~~~ Para utilizar a ferramenta collector necessitamos modificar as definições de cada função de teste. Antes usávamos: [source,c] ----------------------- void one_should_assert_char_equal_to_one() { char x = 1; char y = 1; assert_equal(x, y); } ----------------------------------------- Agora a função deve ser reescrita assim: [source,c] ----------------------- Ensure one_should_assert_char_equal_to_one() { char x = 1; char y = 1; assert_equal(x, y); } ----------------------------------------- Para cada teste escrito, declaramos como sendo do tipo 'Ensure' que é uma macro informando para a ferramenta que este teste deve ser colocado dentro da TestSuite. Na TestSuite não precisamos mais descrever quais testes compõem a TestSuite. Podemos apenas deixar assim: [source,c] ----------------------- TestSuite *assertion_tests() { TestSuite *suite = create_test_suite(); add_tests(); return suite; } ----------------------------------------- Supondo que o nosso script de teste é +assertion_tests.c+, executando o 'collector' temos: ----------------------------------------- ./collector assertion_tests.c ----------------------------------------- O resultado final no script de teste é: [source,c] ----------------------- Ensure one_should_assert_char_equal_to_one() { char x = 1; char y = 1; assert_equal(x, y); } TestSuite *assertion_tests() { TestSuite *suite = create_test_suite(&one_should_assert_char_equal_to_one); add_tests(); return suite; } ----------------------------------------- A ferramenta lê todo o script, faz a substituição necessária e escreve novamente no arquivo. Assim apenas adicionamos um novo teste e executamos a ferramenta collector para ajustar o TestSuite automaticamente. [[X21]] GNU Free Documentation License ------------------------------ Version 1.1, March 2000 Copyright (C) 2000 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. 0. PREAMBLE The purpose of this License is to make a manual, textbook, or other written document "free" in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others. This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software. We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference. 1. APPLICABILITY AND DEFINITIONS This License applies to any manual or other work that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you". A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language. A "Secondary Section" is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (For example, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them. The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, whose contents can be viewed and edited directly and straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup has been designed to thwart or discourage subsequent modification by readers is not Transparent. A copy that is not "Transparent" is called "Opaque". Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML designed for human modification. Opaque formats include PostScript, PDF, proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML produced by some word processors for output purposes only. The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, "Title Page" means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text. 2. VERBATIM COPYING You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3. You may also lend copies, under the same conditions stated above, and you may publicly display copies. 3. COPYING IN QUANTITY If you publish printed copies of the Document numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects. If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages. If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a publicly-accessible computer-network location containing a complete Transparent copy of the Document, free of added material, which the general network-using public has access to download anonymously at no charge using public-standard network protocols. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public. It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document. 4. MODIFICATIONS You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version: Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has less than five). State on the Title page the name of the publisher of the Modified Version, as the publisher. Preserve all the copyright notices of the Document. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice. Include an unaltered copy of this License. Preserve the section entitled "History", and its title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section entitled "History" in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the "History" section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission. In any section entitled "Acknowledgements" or "Dedications", preserve the section's title, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles. Delete any section entitled "Endorsements". Such a section may not be included in the Modified Version. Do not retitle any existing section as "Endorsements" or to conflict in title with any Invariant Section. If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles. You may add a section entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various parties--for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard. You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one. The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version. 5. COMBINING DOCUMENTS You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice. The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work. In the combination, you must combine any sections entitled "History" in the various original documents, forming one section entitled "History"; likewise combine any sections entitled "Acknowledgements", and any sections entitled "Dedications". You must delete all sections entitled "Endorsements." 6. COLLECTIONS OF DOCUMENTS You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects. You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document. 7. AGGREGATION WITH INDEPENDENT WORKS A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, does not as a whole count as a Modified Version of the Document, provided no compilation copyright is claimed for the compilation. Such a compilation is called an "aggregate", and this License does not apply to the other self-contained works thus compiled with the Document, on account of their being thus compiled, if they are not themselves derivative works of the Document. If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one quarter of the entire aggregate, the Document's Cover Texts may be placed on covers that surround only the Document within the aggregate. Otherwise they must appear on covers around the whole aggregate. 8. TRANSLATION Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License provided that you also include the original English version of this License. In case of a disagreement between the translation and the original English version of this License, the original English version will prevail. 9. TERMINATION You may not copy, modify, sublicense, or distribute the Document except as expressly provided for under this License. Any other attempt to copy, modify, sublicense or distribute the Document is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 10. FUTURE REVISIONS OF THIS LICENSE The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See http://www.gnu.org/copyleft/. Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation. How to use this License for your documents To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page: Copyright (c) YEAR YOUR NAME. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. A copy of the license is included in the section entitled "GNU Free Documentation License". If you have no Invariant Sections, write "with no Invariant Sections" instead of saying which ones are invariant. If you have no Front-Cover Texts, write "no Front-Cover Texts" instead of "Front-Cover Texts being LIST"; likewise for Back-Cover Texts. If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software. libdbi-drivers-0.9.0/tests/cgreen/doc/doxy.config.in000644 001750 001750 00000176467 11421144156 023244 0ustar00markusmarkus000000 000000 # Doxyfile 1.5.8 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project # # All text after a hash (#) is considered a comment and will be ignored # The format is: # TAG = value [value, ...] # For lists items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (" ") #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- # This tag specifies the encoding used for all characters in the config file # that follow. The default is UTF-8 which is also the encoding used for all # text before the first occurrence of this tag. Doxygen uses libiconv (or the # iconv built into libc) for the transcoding. See # http://www.gnu.org/software/libiconv for the list of possible encodings. DOXYFILE_ENCODING = UTF-8 # The PROJECT_NAME tag is a single word (or a sequence of words surrounded # by quotes) that should identify the project. PROJECT_NAME = @APPLICATION_NAME@ # The PROJECT_NUMBER tag can be used to enter a project or revision number. # This could be handy for archiving the generated documentation or # if some version control system is used. PROJECT_NUMBER = @APPLICATION_VERSION@ # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. # If a relative path is entered, it will be relative to the location # where doxygen was started. If left blank the current directory will be used. OUTPUT_DIRECTORY = @CMAKE_CURRENT_BINARY_DIR@ # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create # 4096 sub-directories (in 2 levels) under the output directory of each output # format and will distribute the generated files over these directories. # Enabling this option can be useful when feeding doxygen a huge amount of # source files, where putting all generated files in the same directory would # otherwise cause performance problems for the file system. CREATE_SUBDIRS = NO # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. # The default language is English, other supported languages are: # Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, # Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, # Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), # Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, # Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, # Spanish, Swedish, and Ukrainian. OUTPUT_LANGUAGE = English # If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will # include brief member descriptions after the members that are listed in # the file and class documentation (similar to JavaDoc). # Set to NO to disable this. BRIEF_MEMBER_DESC = YES # If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend # the brief description of a member or function before the detailed description. # Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the # brief descriptions will be completely suppressed. REPEAT_BRIEF = YES # This tag implements a quasi-intelligent brief description abbreviator # that is used to form the text in various listings. Each string # in this list, if found as the leading text of the brief description, will be # stripped from the text and the result after processing the whole list, is # used as the annotated text. Otherwise, the brief description is used as-is. # If left blank, the following values are used ("$name" is automatically # replaced with the name of the entity): "The $name class" "The $name widget" # "The $name file" "is" "provides" "specifies" "contains" # "represents" "a" "an" "the" ABBREVIATE_BRIEF = "The $name class" \ "The $name widget" \ "The $name file" \ is \ provides \ specifies \ contains \ represents \ a \ an \ the # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then # Doxygen will generate a detailed section even if there is only a brief # description. ALWAYS_DETAILED_SEC = NO # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all # inherited members of a class in the documentation of that class as if those # members were ordinary class members. Constructors, destructors and assignment # operators of the base classes will not be shown. INLINE_INHERITED_MEMB = NO # If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full # path before files name in the file list and in the header files. If set # to NO the shortest path that makes the file name unique will be used. FULL_PATH_NAMES = YES # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag # can be used to strip a user-defined part of the path. Stripping is # only done if one of the specified strings matches the left-hand part of # the path. The tag can be used to show relative paths in the file list. # If left blank the directory from which doxygen is run is used as the # path to strip. STRIP_FROM_PATH = @CMAKE_SOURCE_DIR@ # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of # the path mentioned in the documentation of a class, which tells # the reader which header file to include in order to use a class. # If left blank only the name of the header file containing the class # definition is used. Otherwise one should specify the include paths that # are normally passed to the compiler using the -I flag. STRIP_FROM_INC_PATH = @CMAKE_SOURCE_DIR@ # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter # (but less readable) file names. This can be useful is your file systems # doesn't support long names like on DOS, Mac, or CD-ROM. SHORT_NAMES = NO # If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen # will interpret the first line (until the first dot) of a JavaDoc-style # comment as the brief description. If set to NO, the JavaDoc # comments will behave just like regular Qt-style comments # (thus requiring an explicit @brief command for a brief description.) JAVADOC_AUTOBRIEF = YES # If the QT_AUTOBRIEF tag is set to YES then Doxygen will # interpret the first line (until the first dot) of a Qt-style # comment as the brief description. If set to NO, the comments # will behave just like regular Qt-style comments (thus requiring # an explicit \brief command for a brief description.) QT_AUTOBRIEF = NO # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen # treat a multi-line C++ special comment block (i.e. a block of //! or /// # comments) as a brief description. This used to be the default behaviour. # The new default is to treat a multi-line C++ comment block as a detailed # description. Set this tag to YES if you prefer the old behaviour instead. MULTILINE_CPP_IS_BRIEF = NO # If the INHERIT_DOCS tag is set to YES (the default) then an undocumented # member inherits the documentation from any documented member that it # re-implements. INHERIT_DOCS = YES # If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce # a new page for each member. If set to NO, the documentation of a member will # be part of the file/class/namespace that contains it. SEPARATE_MEMBER_PAGES = NO # The TAB_SIZE tag can be used to set the number of spaces in a tab. # Doxygen uses this value to replace tabs by spaces in code fragments. TAB_SIZE = 2 # This tag can be used to specify a number of aliases that acts # as commands in the documentation. An alias has the form "name=value". # For example adding "sideeffect=\par Side Effects:\n" will allow you to # put the command \sideeffect (or @sideeffect) in the documentation, which # will result in a user-defined paragraph with heading "Side Effects:". # You can put \n's in the value part of an alias to insert newlines. ALIASES = # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C # sources only. Doxygen will then generate output that is more tailored for C. # For instance, some of the names that are used will be different. The list # of all members will be omitted, etc. OPTIMIZE_OUTPUT_FOR_C = YES # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java # sources only. Doxygen will then generate output that is more tailored for # Java. For instance, namespaces will be presented as packages, qualified # scopes will look different, etc. OPTIMIZE_OUTPUT_JAVA = NO # Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran # sources only. Doxygen will then generate output that is more tailored for # Fortran. OPTIMIZE_FOR_FORTRAN = NO # Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL # sources. Doxygen will then generate output that is tailored for # VHDL. OPTIMIZE_OUTPUT_VHDL = NO # Doxygen selects the parser to use depending on the extension of the files it parses. # With this tag you can assign which parser to use for a given extension. # Doxygen has a built-in mapping, but you can override or extend it using this tag. # The format is ext=language, where ext is a file extension, and language is one of # the parsers supported by doxygen: IDL, Java, Javascript, C#, C, C++, D, PHP, # Objective-C, Python, Fortran, VHDL, C, C++. For instance to make doxygen treat # .inc files as Fortran files (default is PHP), and .f files as C (default is Fortran), # use: inc=Fortran f=C EXTENSION_MAPPING = # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want # to include (a tag file for) the STL sources as input, then you should # set this tag to YES in order to let doxygen match functions declarations and # definitions whose arguments contain STL classes (e.g. func(std::string); v.s. # func(std::string) {}). This also make the inheritance and collaboration # diagrams that involve STL classes more complete and accurate. BUILTIN_STL_SUPPORT = NO # If you use Microsoft's C++/CLI language, you should set this option to YES to # enable parsing support. CPP_CLI_SUPPORT = NO # Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. # Doxygen will parse them like normal C++ but will assume all classes use public # instead of private inheritance when no explicit protection keyword is present. SIP_SUPPORT = NO # For Microsoft's IDL there are propget and propput attributes to indicate getter # and setter methods for a property. Setting this option to YES (the default) # will make doxygen to replace the get and set methods by a property in the # documentation. This will only work if the methods are indeed getting or # setting a simple type. If this is not the case, or you want to show the # methods anyway, you should set this option to NO. IDL_PROPERTY_SUPPORT = YES # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC # tag is set to YES, then doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. DISTRIBUTE_GROUP_DOC = NO # Set the SUBGROUPING tag to YES (the default) to allow class member groups of # the same type (for instance a group of public functions) to be put as a # subgroup of that type (e.g. under the Public Functions section). Set it to # NO to prevent subgrouping. Alternatively, this can be done per class using # the \nosubgrouping command. SUBGROUPING = YES # When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum # is documented as struct, union, or enum with the name of the typedef. So # typedef struct TypeS {} TypeT, will appear in the documentation as a struct # with name TypeT. When disabled the typedef will appear as a member of a file, # namespace, or class. And the struct will be named TypeS. This can typically # be useful for C code in case the coding convention dictates that all compound # types are typedef'ed and only the typedef is referenced, never the tag name. TYPEDEF_HIDES_STRUCT = NO # The SYMBOL_CACHE_SIZE determines the size of the internal cache use to # determine which symbols to keep in memory and which to flush to disk. # When the cache is full, less often used symbols will be written to disk. # For small to medium size projects (<1000 input files) the default value is # probably good enough. For larger projects a too small cache size can cause # doxygen to be busy swapping symbols to and from disk most of the time # causing a significant performance penality. # If the system has enough physical memory increasing the cache will improve the # performance by keeping more symbols in memory. Note that the value works on # a logarithmic scale so increasing the size by one will rougly double the # memory usage. The cache size is given by this formula: # 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, # corresponding to a cache size of 2^16 = 65536 symbols SYMBOL_CACHE_SIZE = 0 #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in # documentation are documented, even if no documentation was available. # Private class members and static file members will be hidden unless # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES EXTRACT_ALL = NO # If the EXTRACT_PRIVATE tag is set to YES all private members of a class # will be included in the documentation. EXTRACT_PRIVATE = NO # If the EXTRACT_STATIC tag is set to YES all static members of a file # will be included in the documentation. EXTRACT_STATIC = NO # If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) # defined locally in source files will be included in the documentation. # If set to NO only classes defined in header files are included. EXTRACT_LOCAL_CLASSES = NO # This flag is only useful for Objective-C code. When set to YES local # methods, which are defined in the implementation section but not in # the interface are included in the documentation. # If set to NO (the default) only methods in the interface are included. EXTRACT_LOCAL_METHODS = NO # If this flag is set to YES, the members of anonymous namespaces will be # extracted and appear in the documentation as a namespace called # 'anonymous_namespace{file}', where file will be replaced with the base # name of the file that contains the anonymous namespace. By default # anonymous namespace are hidden. EXTRACT_ANON_NSPACES = NO # If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all # undocumented members of documented classes, files or namespaces. # If set to NO (the default) these members will be included in the # various overviews, but no documentation section is generated. # This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_MEMBERS = YES # If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. # If set to NO (the default) these classes will be included in the various # overviews. This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_CLASSES = YES # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all # friend (class|struct|union) declarations. # If set to NO (the default) these declarations will be included in the # documentation. HIDE_FRIEND_COMPOUNDS = NO # If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any # documentation blocks found inside the body of a function. # If set to NO (the default) these blocks will be appended to the # function's detailed documentation block. HIDE_IN_BODY_DOCS = NO # The INTERNAL_DOCS tag determines if documentation # that is typed after a \internal command is included. If the tag is set # to NO (the default) then the documentation will be excluded. # Set it to YES to include the internal documentation. INTERNAL_DOCS = NO # If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate # file names in lower-case letters. If set to YES upper-case letters are also # allowed. This is useful if you have classes or files whose names only differ # in case and if your file system supports case sensitive file names. Windows # and Mac users are advised to set this option to NO. CASE_SENSE_NAMES = YES # If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen # will show members with their full class and namespace scopes in the # documentation. If set to YES the scope will be hidden. HIDE_SCOPE_NAMES = NO # If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen # will put a list of the files that are included by a file in the documentation # of that file. SHOW_INCLUDE_FILES = YES # If the INLINE_INFO tag is set to YES (the default) then a tag [inline] # is inserted in the documentation for inline members. INLINE_INFO = YES # If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen # will sort the (detailed) documentation of file and class members # alphabetically by member name. If set to NO the members will appear in # declaration order. SORT_MEMBER_DOCS = YES # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the # brief documentation of file, namespace and class members alphabetically # by member name. If set to NO (the default) the members will appear in # declaration order. SORT_BRIEF_DOCS = YES # If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the # hierarchy of group names into alphabetical order. If set to NO (the default) # the group names will appear in their defined order. SORT_GROUP_NAMES = NO # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be # sorted by fully-qualified names, including namespaces. If set to # NO (the default), the class list will be sorted only by class name, # not including the namespace part. # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. # Note: This option applies only to the class list, not to the # alphabetical list. SORT_BY_SCOPE_NAME = NO # The GENERATE_TODOLIST tag can be used to enable (YES) or # disable (NO) the todo list. This list is created by putting \todo # commands in the documentation. GENERATE_TODOLIST = YES # The GENERATE_TESTLIST tag can be used to enable (YES) or # disable (NO) the test list. This list is created by putting \test # commands in the documentation. GENERATE_TESTLIST = YES # The GENERATE_BUGLIST tag can be used to enable (YES) or # disable (NO) the bug list. This list is created by putting \bug # commands in the documentation. GENERATE_BUGLIST = YES # The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or # disable (NO) the deprecated list. This list is created by putting # \deprecated commands in the documentation. GENERATE_DEPRECATEDLIST= YES # The ENABLED_SECTIONS tag can be used to enable conditional # documentation sections, marked by \if sectionname ... \endif. ENABLED_SECTIONS = # The MAX_INITIALIZER_LINES tag determines the maximum number of lines # the initial value of a variable or define consists of for it to appear in # the documentation. If the initializer consists of more lines than specified # here it will be hidden. Use a value of 0 to hide initializers completely. # The appearance of the initializer of individual variables and defines in the # documentation can be controlled using \showinitializer or \hideinitializer # command in the documentation regardless of this setting. MAX_INITIALIZER_LINES = 30 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated # at the bottom of the documentation of classes and structs. If set to YES the # list will mention the files that were used to generate the documentation. SHOW_USED_FILES = YES # If the sources in your project are distributed over multiple directories # then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy # in the documentation. The default is NO. SHOW_DIRECTORIES = NO # Set the SHOW_FILES tag to NO to disable the generation of the Files page. # This will remove the Files entry from the Quick Index and from the # Folder Tree View (if specified). The default is YES. SHOW_FILES = YES # Set the SHOW_NAMESPACES tag to NO to disable the generation of the # Namespaces page. # This will remove the Namespaces entry from the Quick Index # and from the Folder Tree View (if specified). The default is YES. SHOW_NAMESPACES = YES # The FILE_VERSION_FILTER tag can be used to specify a program or script that # doxygen should invoke to get the current version for each file (typically from # the version control system). Doxygen will invoke the program by executing (via # popen()) the command , where is the value of # the FILE_VERSION_FILTER tag, and is the name of an input file # provided by doxygen. Whatever the program writes to standard output # is used as the file version. See the manual for examples. FILE_VERSION_FILTER = # The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by # doxygen. The layout file controls the global structure of the generated output files # in an output format independent way. The create the layout file that represents # doxygen's defaults, run doxygen with the -l option. You can optionally specify a # file name after the option, if omitted DoxygenLayout.xml will be used as the name # of the layout file. LAYOUT_FILE = #--------------------------------------------------------------------------- # configuration options related to warning and progress messages #--------------------------------------------------------------------------- # The QUIET tag can be used to turn on/off the messages that are generated # by doxygen. Possible values are YES and NO. If left blank NO is used. QUIET = YES # The WARNINGS tag can be used to turn on/off the warning messages that are # generated by doxygen. Possible values are YES and NO. If left blank # NO is used. WARNINGS = YES # If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings # for undocumented members. If EXTRACT_ALL is set to YES then this flag will # automatically be disabled. WARN_IF_UNDOCUMENTED = YES # If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for # potential errors in the documentation, such as not documenting some # parameters in a documented function, or documenting parameters that # don't exist or using markup commands wrongly. WARN_IF_DOC_ERROR = YES # This WARN_NO_PARAMDOC option can be abled to get warnings for # functions that are documented, but have no documentation for their parameters # or return value. If set to NO (the default) doxygen will only warn about # wrong or incomplete parameter documentation, but not about the absence of # documentation. WARN_NO_PARAMDOC = NO # The WARN_FORMAT tag determines the format of the warning messages that # doxygen can produce. The string should contain the $file, $line, and $text # tags, which will be replaced by the file and line number from which the # warning originated and the warning text. Optionally the format may contain # $version, which will be replaced by the version of the file (if it could # be obtained via FILE_VERSION_FILTER) WARN_FORMAT = "$file:$line: $text" # The WARN_LOGFILE tag can be used to specify a file to which warning # and error messages should be written. If left blank the output is written # to stderr. WARN_LOGFILE = @CMAKE_CURRENT_BINARY_DIR@/doxy.log #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- # The INPUT tag can be used to specify the files and/or directories that contain # documented source files. You may enter file names like "myfile.cpp" or # directories like "/usr/src/myproject". Separate the files or directories # with spaces. INPUT = @CMAKE_SOURCE_DIR@/include \ @CMAKE_SOURCE_DIR@/src # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is # also the default input encoding. Doxygen uses libiconv (or the iconv built # into libc) for the transcoding. See http://www.gnu.org/software/libiconv for # the list of possible encodings. INPUT_ENCODING = UTF-8 # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank the following patterns are tested: # *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx # *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90 FILE_PATTERNS = *.cpp \ *.cc \ *.c \ *.h \ *.hh \ *.hpp \ *.dox # The RECURSIVE tag can be used to turn specify whether or not subdirectories # should be searched for input files as well. Possible values are YES and NO. # If left blank NO is used. RECURSIVE = YES # The EXCLUDE tag can be used to specify files and/or directories that should # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. EXCLUDE = # The EXCLUDE_SYMLINKS tag can be used select whether or not files or # directories that are symbolic links (a Unix filesystem feature) are excluded # from the input. EXCLUDE_SYMLINKS = NO # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude # certain files from those directories. Note that the wildcards are matched # against the file with absolute path, so to exclude all test directories # for example use the pattern */test/* EXCLUDE_PATTERNS = */.git/* \ */.svn/* \ */cmake/* \ */doc/* \ */build/* # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names # (namespaces, classes, functions, etc.) that should be excluded from the # output. The symbol name can be a fully qualified name, a word, or if the # wildcard * is used, a substring. Examples: ANamespace, AClass, # AClass::ANamespace, ANamespace::*Test EXCLUDE_SYMBOLS = # The EXAMPLE_PATH tag can be used to specify one or more files or # directories that contain example code fragments that are included (see # the \include command). EXAMPLE_PATH = @CMAKE_SOURCE_DIR@/tests \ @CMAKE_SOURCE_DIR@ # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank all files are included. EXAMPLE_PATTERNS = *.cpp \ *.cc \ *.h \ *.hh \ INSTALL \ DEPENDENCIES \ CHANGELOG \ LICENSE \ LGPL # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be # searched for input files to be used with the \include or \dontinclude # commands irrespective of the value of the RECURSIVE tag. # Possible values are YES and NO. If left blank NO is used. EXAMPLE_RECURSIVE = YES # The IMAGE_PATH tag can be used to specify one or more files or # directories that contain image that are included in the documentation (see # the \image command). IMAGE_PATH = # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program # by executing (via popen()) the command , where # is the value of the INPUT_FILTER tag, and is the name of an # input file. Doxygen will then use the output that the filter program writes # to standard output. # If FILTER_PATTERNS is specified, this tag will be # ignored. INPUT_FILTER = # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern # basis. # Doxygen will compare the file name with each pattern and apply the # filter if there is a match. # The filters are a list of the form: # pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further # info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER # is applied to all files. FILTER_PATTERNS = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # INPUT_FILTER) will be used to filter the input files when producing source # files to browse (i.e. when SOURCE_BROWSER is set to YES). FILTER_SOURCE_FILES = NO #--------------------------------------------------------------------------- # configuration options related to source browsing #--------------------------------------------------------------------------- # If the SOURCE_BROWSER tag is set to YES then a list of source files will # be generated. Documented entities will be cross-referenced with these sources. # Note: To get rid of all source code in the generated output, make sure also # VERBATIM_HEADERS is set to NO. SOURCE_BROWSER = NO # Setting the INLINE_SOURCES tag to YES will include the body # of functions and classes directly in the documentation. INLINE_SOURCES = NO # Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct # doxygen to hide any special comment blocks from generated source code # fragments. Normal C and C++ comments will always remain visible. STRIP_CODE_COMMENTS = YES # If the REFERENCED_BY_RELATION tag is set to YES # then for each documented function all documented # functions referencing it will be listed. REFERENCED_BY_RELATION = YES # If the REFERENCES_RELATION tag is set to YES # then for each documented function all documented entities # called/used by that function will be listed. REFERENCES_RELATION = YES # If the REFERENCES_LINK_SOURCE tag is set to YES (the default) # and SOURCE_BROWSER tag is set to YES, then the hyperlinks from # functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will # link to the source code. # Otherwise they will link to the documentation. REFERENCES_LINK_SOURCE = YES # If the USE_HTAGS tag is set to YES then the references to source code # will point to the HTML generated by the htags(1) tool instead of doxygen # built-in source browser. The htags tool is part of GNU's global source # tagging system (see http://www.gnu.org/software/global/global.html). You # will need version 4.8.6 or higher. USE_HTAGS = NO # If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen # will generate a verbatim copy of the header file for each class for # which an include is specified. Set to NO to disable this. VERBATIM_HEADERS = YES #--------------------------------------------------------------------------- # configuration options related to the alphabetical class index #--------------------------------------------------------------------------- # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index # of all compounds will be generated. Enable this if the project # contains a lot of classes, structs, unions or interfaces. ALPHABETICAL_INDEX = YES # If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then # the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns # in which this list will be split (can be a number in the range [1..20]) COLS_IN_ALPHA_INDEX = 2 # In case all classes in a project start with a common prefix, all # classes will be put under the same header in the alphabetical index. # The IGNORE_PREFIX tag can be used to specify one or more prefixes that # should be ignored while generating the index headers. IGNORE_PREFIX = #--------------------------------------------------------------------------- # configuration options related to the HTML output #--------------------------------------------------------------------------- # If the GENERATE_HTML tag is set to YES (the default) Doxygen will # generate HTML output. GENERATE_HTML = YES # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `html' will be used as the default path. HTML_OUTPUT = html # The HTML_FILE_EXTENSION tag can be used to specify the file extension for # each generated HTML page (for example: .htm,.php,.asp). If it is left blank # doxygen will generate files with .html extension. HTML_FILE_EXTENSION = .html # The HTML_HEADER tag can be used to specify a personal HTML header for # each generated HTML page. If it is left blank doxygen will generate a # standard header. HTML_HEADER = # The HTML_FOOTER tag can be used to specify a personal HTML footer for # each generated HTML page. If it is left blank doxygen will generate a # standard footer. HTML_FOOTER = # The HTML_STYLESHEET tag can be used to specify a user-defined cascading # style sheet that is used by each HTML page. It can be used to # fine-tune the look of the HTML output. If the tag is left blank doxygen # will generate a default style sheet. Note that doxygen will try to copy # the style sheet file to the HTML output directory, so don't put your own # stylesheet in the HTML output directory as well, or it will be erased! HTML_STYLESHEET = # If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, # files or namespaces will be aligned in HTML using tables. If set to # NO a bullet list will be used. HTML_ALIGN_MEMBERS = YES # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML # documentation will contain sections that can be hidden and shown after the # page has loaded. For this to work a browser that supports # JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox # Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). HTML_DYNAMIC_SECTIONS = NO # If the GENERATE_DOCSET tag is set to YES, additional index files # will be generated that can be used as input for Apple's Xcode 3 # integrated development environment, introduced with OSX 10.5 (Leopard). # To create a documentation set, doxygen will generate a Makefile in the # HTML output directory. Running make will produce the docset in that # directory and running "make install" will install the docset in # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find # it at startup. # See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information. GENERATE_DOCSET = NO # When GENERATE_DOCSET tag is set to YES, this tag determines the name of the # feed. A documentation feed provides an umbrella under which multiple # documentation sets from a single provider (such as a company or product suite) # can be grouped. DOCSET_FEEDNAME = "Doxygen generated docs" # When GENERATE_DOCSET tag is set to YES, this tag specifies a string that # should uniquely identify the documentation set bundle. This should be a # reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen # will append .docset to the name. DOCSET_BUNDLE_ID = org.doxygen.Project # If the GENERATE_HTMLHELP tag is set to YES, additional index files # will be generated that can be used as input for tools like the # Microsoft HTML help workshop to generate a compiled HTML help file (.chm) # of the generated HTML documentation. GENERATE_HTMLHELP = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can # be used to specify the file name of the resulting .chm file. You # can add a path in front of the file if the result should not be # written to the html output directory. CHM_FILE = # If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can # be used to specify the location (absolute path including file name) of # the HTML help compiler (hhc.exe). If non-empty doxygen will try to run # the HTML help compiler on the generated index.hhp. HHC_LOCATION = # If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag # controls if a separate .chi index file is generated (YES) or that # it should be included in the master .chm file (NO). GENERATE_CHI = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING # is used to encode HtmlHelp index (hhk), content (hhc) and project file # content. CHM_INDEX_ENCODING = # If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag # controls whether a binary table of contents is generated (YES) or a # normal table of contents (NO) in the .chm file. BINARY_TOC = NO # The TOC_EXPAND flag can be set to YES to add extra items for group members # to the contents of the HTML help documentation and to the tree view. TOC_EXPAND = NO # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER # are set, an additional index file will be generated that can be used as input for # Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated # HTML documentation. GENERATE_QHP = NO # If the QHG_LOCATION tag is specified, the QCH_FILE tag can # be used to specify the file name of the resulting .qch file. # The path specified is relative to the HTML output folder. QCH_FILE = # The QHP_NAMESPACE tag specifies the namespace to use when generating # Qt Help Project output. For more information please see # http://doc.trolltech.com/qthelpproject.html#namespace QHP_NAMESPACE = # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating # Qt Help Project output. For more information please see # http://doc.trolltech.com/qthelpproject.html#virtual-folders QHP_VIRTUAL_FOLDER = doc # If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to add. # For more information please see # http://doc.trolltech.com/qthelpproject.html#custom-filters QHP_CUST_FILTER_NAME = # The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the custom filter to add.For more information please see # Qt Help Project / Custom Filters. QHP_CUST_FILTER_ATTRS = # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this project's # filter section matches. # Qt Help Project / Filter Attributes. QHP_SECT_FILTER_ATTRS = # If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can # be used to specify the location of Qt's qhelpgenerator. # If non-empty doxygen will try to run qhelpgenerator on the generated # .qhp file. QHG_LOCATION = # The DISABLE_INDEX tag can be used to turn on/off the condensed index at # top of each HTML page. The value NO (the default) enables the index and # the value YES disables it. DISABLE_INDEX = NO # This tag can be used to set the number of enum values (range [1..20]) # that doxygen will group on one line in the generated HTML documentation. ENUM_VALUES_PER_LINE = 4 # The GENERATE_TREEVIEW tag is used to specify whether a tree-like index # structure should be generated to display hierarchical information. # If the tag value is set to FRAME, a side panel will be generated # containing a tree-like index structure (just like the one that # is generated for HTML Help). For this to work a browser that supports # JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, # Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are # probably better off using the HTML help feature. Other possible values # for this tag are: HIERARCHIES, which will generate the Groups, Directories, # and Class Hierarchy pages using a tree view instead of an ordered list; # ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which # disables this behavior completely. For backwards compatibility with previous # releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE # respectively. GENERATE_TREEVIEW = NO # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be # used to set the initial width (in pixels) of the frame in which the tree # is shown. TREEVIEW_WIDTH = 250 # Use this tag to change the font size of Latex formulas included # as images in the HTML documentation. The default is 10. Note that # when you change the font size after a successful doxygen run you need # to manually remove any form_*.png images from the HTML output directory # to force them to be regenerated. FORMULA_FONTSIZE = 10 #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will # generate Latex output. GENERATE_LATEX = NO # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `latex' will be used as the default path. LATEX_OUTPUT = latex # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be # invoked. If left blank `latex' will be used as the default command name. LATEX_CMD_NAME = @LATEX_COMPILER@ # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to # generate index for LaTeX. If left blank `makeindex' will be used as the # default command name. MAKEINDEX_CMD_NAME = @MAKEINDEX_COMPILER@ # If the COMPACT_LATEX tag is set to YES Doxygen generates more compact # LaTeX documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_LATEX = NO # The PAPER_TYPE tag can be used to set the paper type that is used # by the printer. Possible values are: a4, a4wide, letter, legal and # executive. If left blank a4wide will be used. PAPER_TYPE = a4 # The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX # packages that should be included in the LaTeX output. EXTRA_PACKAGES = # The LATEX_HEADER tag can be used to specify a personal LaTeX header for # the generated latex document. The header should contain everything until # the first chapter. If it is left blank doxygen will generate a # standard header. Notice: only use this tag if you know what you are doing! LATEX_HEADER = # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated # is prepared for conversion to pdf (using ps2pdf). The pdf file will # contain links (just like the HTML output) instead of page references # This makes the output suitable for online browsing using a pdf viewer. PDF_HYPERLINKS = YES # If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of # plain latex in the generated Makefile. Set this option to YES to get a # higher quality PDF documentation. USE_PDFLATEX = YES # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. # command to the generated LaTeX files. This will instruct LaTeX to keep # running if errors occur, instead of asking the user for help. # This option is also used when generating formulas in HTML. LATEX_BATCHMODE = YES # If LATEX_HIDE_INDICES is set to YES then doxygen will not # include the index chapters (such as File Index, Compound Index, etc.) # in the output. LATEX_HIDE_INDICES = NO #--------------------------------------------------------------------------- # configuration options related to the RTF output #--------------------------------------------------------------------------- # If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output # The RTF output is optimized for Word 97 and may not look very pretty with # other RTF readers or editors. GENERATE_RTF = NO # The RTF_OUTPUT tag is used to specify where the RTF docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `rtf' will be used as the default path. RTF_OUTPUT = rtf # If the COMPACT_RTF tag is set to YES Doxygen generates more compact # RTF documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_RTF = NO # If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated # will contain hyperlink fields. The RTF file will # contain links (just like the HTML output) instead of page references. # This makes the output suitable for online browsing using WORD or other # programs which support those fields. # Note: wordpad (write) and others do not support links. RTF_HYPERLINKS = NO # Load stylesheet definitions from file. Syntax is similar to doxygen's # config file, i.e. a series of assignments. You only have to provide # replacements, missing definitions are set to their default value. RTF_STYLESHEET_FILE = # Set optional variables used in the generation of an rtf document. # Syntax is similar to doxygen's config file. RTF_EXTENSIONS_FILE = #--------------------------------------------------------------------------- # configuration options related to the man page output #--------------------------------------------------------------------------- # If the GENERATE_MAN tag is set to YES (the default) Doxygen will # generate man pages GENERATE_MAN = YES # The MAN_OUTPUT tag is used to specify where the man pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `man' will be used as the default path. MAN_OUTPUT = man # The MAN_EXTENSION tag determines the extension that is added to # the generated man pages (default is the subroutine's section .3) MAN_EXTENSION = .3 # If the MAN_LINKS tag is set to YES and Doxygen generates man output, # then it will generate one additional man file for each entity # documented in the real man page(s). These additional files # only source the real man page, but without them the man command # would be unable to find the correct page. The default is NO. MAN_LINKS = NO #--------------------------------------------------------------------------- # configuration options related to the XML output #--------------------------------------------------------------------------- # If the GENERATE_XML tag is set to YES Doxygen will # generate an XML file that captures the structure of # the code including all documentation. GENERATE_XML = NO # The XML_OUTPUT tag is used to specify where the XML pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `xml' will be used as the default path. XML_OUTPUT = xml # The XML_SCHEMA tag can be used to specify an XML schema, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_SCHEMA = # The XML_DTD tag can be used to specify an XML DTD, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_DTD = # If the XML_PROGRAMLISTING tag is set to YES Doxygen will # dump the program listings (including syntax highlighting # and cross-referencing information) to the XML output. Note that # enabling this will significantly increase the size of the XML output. XML_PROGRAMLISTING = YES #--------------------------------------------------------------------------- # configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- # If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will # generate an AutoGen Definitions (see autogen.sf.net) file # that captures the structure of the code including all # documentation. Note that this feature is still experimental # and incomplete at the moment. GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- # configuration options related to the Perl module output #--------------------------------------------------------------------------- # If the GENERATE_PERLMOD tag is set to YES Doxygen will # generate a Perl module file that captures the structure of # the code including all documentation. Note that this # feature is still experimental and incomplete at the # moment. GENERATE_PERLMOD = NO # If the PERLMOD_LATEX tag is set to YES Doxygen will generate # the necessary Makefile rules, Perl scripts and LaTeX code to be able # to generate PDF and DVI output from the Perl module output. PERLMOD_LATEX = NO # If the PERLMOD_PRETTY tag is set to YES the Perl module output will be # nicely formatted so it can be parsed by a human reader. # This is useful # if you want to understand what is going on. # On the other hand, if this # tag is set to NO the size of the Perl module output will be much smaller # and Perl will parse it just the same. PERLMOD_PRETTY = YES # The names of the make variables in the generated doxyrules.make file # are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. # This is useful so different doxyrules.make files included by the same # Makefile don't overwrite each other's variables. PERLMOD_MAKEVAR_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- # If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will # evaluate all C-preprocessor directives found in the sources and include # files. ENABLE_PREPROCESSING = YES # If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro # names in the source code. If set to NO (the default) only conditional # compilation will be performed. Macro expansion can be done in a controlled # way by setting EXPAND_ONLY_PREDEF to YES. MACRO_EXPANSION = NO # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES # then the macro expansion is limited to the macros specified with the # PREDEFINED and EXPAND_AS_DEFINED tags. EXPAND_ONLY_PREDEF = NO # If the SEARCH_INCLUDES tag is set to YES (the default) the includes files # in the INCLUDE_PATH (see below) will be search if a #include is found. SEARCH_INCLUDES = YES # The INCLUDE_PATH tag can be used to specify one or more directories that # contain include files that are not input files but should be processed by # the preprocessor. INCLUDE_PATH = # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard # patterns (like *.h and *.hpp) to filter out the header-files in the # directories. If left blank, the patterns specified with FILE_PATTERNS will # be used. INCLUDE_FILE_PATTERNS = # The PREDEFINED tag can be used to specify one or more macro names that # are defined before the preprocessor is started (similar to the -D option of # gcc). The argument of the tag is a list of macros of the form: name # or name=definition (no spaces). If the definition and the = are # omitted =1 is assumed. To prevent a macro definition from being # undefined via #undef or recursively expanded use the := operator # instead of the = operator. PREDEFINED = # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then # this tag can be used to specify a list of macro names that should be expanded. # The macro definition that is found in the sources will be used. # Use the PREDEFINED tag if you want to use a different macro definition. EXPAND_AS_DEFINED = # If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then # doxygen's preprocessor will remove all function-like macros that are alone # on a line, have an all uppercase name, and do not end with a semicolon. Such # function macros are typically used for boiler-plate code, and will confuse # the parser if not removed. SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- # Configuration::additions related to external references #--------------------------------------------------------------------------- # The TAGFILES option can be used to specify one or more tagfiles. # Optionally an initial location of the external documentation # can be added for each tagfile. The format of a tag file without # this location is as follows: # # TAGFILES = file1 file2 ... # Adding location for the tag files is done as follows: # # TAGFILES = file1=loc1 "file2 = loc2" ... # where "loc1" and "loc2" can be relative or absolute paths or # URLs. If a location is present for each tag, the installdox tool # does not have to be run to correct the links. # Note that each tag file must have a unique name # (where the name does NOT include the path) # If a tag file is not located in the directory in which doxygen # is run, you must also specify the path to the tagfile here. TAGFILES = # When a file name is specified after GENERATE_TAGFILE, doxygen will create # a tag file that is based on the input files it reads. GENERATE_TAGFILE = @CMAKE_CURRENT_BINARY_DIR@/html/@PROJECT_NAME@.TAGFILE # If the ALLEXTERNALS tag is set to YES all external classes will be listed # in the class index. If set to NO only the inherited external classes # will be listed. ALLEXTERNALS = YES # If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed # in the modules index. If set to NO, only the current project's groups will # be listed. EXTERNAL_GROUPS = YES # The PERL_PATH should be the absolute path and name of the perl script # interpreter (i.e. the result of `which perl'). PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- # If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will # generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base # or super classes. Setting the tag to NO turns the diagrams off. Note that # this option is superseded by the HAVE_DOT option below. This is only a # fallback. It is recommended to install and use dot, since it yields more # powerful graphs. CLASS_DIAGRAMS = NO # You can define message sequence charts within doxygen comments using the \msc # command. Doxygen will then run the mscgen tool (see # http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the # documentation. The MSCGEN_PATH tag allows you to specify the directory where # the mscgen tool resides. If left empty the tool is assumed to be found in the # default search path. MSCGEN_PATH = # If set to YES, the inheritance and collaboration graphs will hide # inheritance and usage relations if the target is undocumented # or is not a class. HIDE_UNDOC_RELATIONS = YES # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is # available from the path. This tool is part of Graphviz, a graph visualization # toolkit from AT&T and Lucent Bell Labs. The other options in this section # have no effect if this option is set to NO (the default) HAVE_DOT = @DOXYGEN_DOT_FOUND@ # By default doxygen will write a font called FreeSans.ttf to the output # directory and reference it in all dot files that doxygen generates. This # font does not include all possible unicode characters however, so when you need # these (or just want a differently looking font) you can specify the font name # using DOT_FONTNAME. You need need to make sure dot is able to find the font, # which can be done by putting it in a standard location or by setting the # DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory # containing the font. DOT_FONTNAME = FreeSans # The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. # The default size is 10pt. DOT_FONTSIZE = 10 # By default doxygen will tell dot to use the output directory to look for the # FreeSans.ttf font (which doxygen will put there itself). If you specify a # different font using DOT_FONTNAME you can set the path where dot # can find it using this tag. DOT_FONTPATH = # If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect inheritance relations. Setting this tag to YES will force the # the CLASS_DIAGRAMS tag to NO. CLASS_GRAPH = YES # If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect implementation dependencies (inheritance, containment, and # class references variables) of the class with other documented classes. COLLABORATION_GRAPH = YES # If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen # will generate a graph for groups, showing the direct groups dependencies GROUP_GRAPHS = YES # If the UML_LOOK tag is set to YES doxygen will generate inheritance and # collaboration diagrams in a style similar to the OMG's Unified Modeling # Language. UML_LOOK = NO # If set to YES, the inheritance and collaboration graphs will show the # relations between templates and their instances. TEMPLATE_RELATIONS = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT # tags are set to YES then doxygen will generate a graph for each documented # file showing the direct and indirect include dependencies of the file with # other documented files. INCLUDE_GRAPH = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and # HAVE_DOT tags are set to YES then doxygen will generate a graph for each # documented header file showing the documented files that directly or # indirectly include this file. INCLUDED_BY_GRAPH = YES # If the CALL_GRAPH and HAVE_DOT options are set to YES then # doxygen will generate a call dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable call graphs # for selected functions only using the \callgraph command. CALL_GRAPH = YES # If the CALLER_GRAPH and HAVE_DOT tags are set to YES then # doxygen will generate a caller dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable caller # graphs for selected functions only using the \callergraph command. CALLER_GRAPH = YES # If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen # will graphical hierarchy of all classes instead of a textual one. GRAPHICAL_HIERARCHY = YES # If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES # then doxygen will show the dependencies a directory has on other directories # in a graphical way. The dependency relations are determined by the #include # relations between the files in the directories. DIRECTORY_GRAPH = YES # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images # generated by dot. Possible values are png, jpg, or gif # If left blank png will be used. DOT_IMAGE_FORMAT = png # The tag DOT_PATH can be used to specify the path where the dot tool can be # found. If left blank, it is assumed the dot tool can be found in the path. DOT_PATH = @DOXYGEN_DOT_EXECUTABLE_PATH@ # The DOTFILE_DIRS tag can be used to specify one or more directories that # contain dot files that are included in the documentation (see the # \dotfile command). DOTFILE_DIRS = # The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of # nodes that will be shown in the graph. If the number of nodes in a graph # becomes larger than this value, doxygen will truncate the graph, which is # visualized by representing a node as a red box. Note that doxygen if the # number of direct children of the root node in a graph is already larger than # DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note # that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. DOT_GRAPH_MAX_NODES = 50 # The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the # graphs generated by dot. A depth value of 3 means that only nodes reachable # from the root by following a path via at most 3 edges will be shown. Nodes # that lay further from the root node will be omitted. Note that setting this # option to 1 or 2 may greatly reduce the computation time needed for large # code bases. Also note that the size of a graph can be further restricted by # DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. MAX_DOT_GRAPH_DEPTH = 0 # Set the DOT_TRANSPARENT tag to YES to generate images with a transparent # background. This is disabled by default, because dot on Windows does not # seem to support this out of the box. Warning: Depending on the platform used, # enabling this option may lead to badly anti-aliased labels on the edges of # a graph (i.e. they become hard to read). DOT_TRANSPARENT = NO # Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output # files in one run (i.e. multiple -o and -T options on the command line). This # makes dot run faster, but since only newer versions of dot (>1.8.10) # support this, this feature is disabled by default. DOT_MULTI_TARGETS = YES # If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will # generate a legend page explaining the meaning of the various boxes and # arrows in the dot generated graphs. GENERATE_LEGEND = YES # If the DOT_CLEANUP tag is set to YES (the default) Doxygen will # remove the intermediate dot files that are used to generate # the various graphs. DOT_CLEANUP = YES #--------------------------------------------------------------------------- # Options related to the search engine #--------------------------------------------------------------------------- # The SEARCHENGINE tag specifies whether or not a search engine should be # used. If set to NO the values of all tags below this one will be ignored. SEARCHENGINE = NO libdbi-drivers-0.9.0/tests/cgreen/doc/tutorial_test/CVS/000755 001750 001750 00000000000 11473577276 024021 5ustar00markusmarkus000000 000000 libdbi-drivers-0.9.0/tests/cgreen/doc/tutorial_test/all_tests.c000644 001750 001750 00000000510 11421144163 025472 0ustar00markusmarkus000000 000000 #include TestSuite *words_tests(); int main(int argc, char **argv) { TestSuite *suite = create_test_suite(); add_suite(suite, words_tests()); if (argc > 1) { return run_single_test(suite, argv[1], create_text_reporter()); } return run_test_suite(suite, create_text_reporter()); } libdbi-drivers-0.9.0/tests/cgreen/doc/tutorial_test/crash_test.c000644 001750 001750 00000000570 11421144163 025645 0ustar00markusmarkus000000 000000 #include #include static void will_seg_fault() { int *p = NULL; (*p)++; } static void will_stall() { die_in(1); while(1) { } } int main(int argc, char **argv) { TestSuite *suite = create_test_suite(); add_test(suite, will_seg_fault); add_test(suite, will_stall); run_test_suite(suite, create_text_reporter()); } libdbi-drivers-0.9.0/tests/cgreen/doc/tutorial_test/first_test.c000644 001750 001750 00000000552 11421144163 025674 0ustar00markusmarkus000000 000000 #include void this_test_should_pass() { assert_true(1); } void this_test_should_fail() { assert_true(0); } int main(int argc, char **argv) { TestSuite *suite = create_test_suite(); add_test(suite, this_test_should_pass); add_test(suite, this_test_should_fail); return run_test_suite(suite, create_text_reporter()); } libdbi-drivers-0.9.0/tests/cgreen/doc/tutorial_test/person.h000644 001750 001750 00000000342 11421144163 025016 0ustar00markusmarkus000000 000000 typedef struct _Person { char *name; } Person; Person *create_person(); Person *find_person_by_name(const char *); void set_person_name(Person *, const char *); char *get_person_name(Person *); int save_person(Person *); libdbi-drivers-0.9.0/tests/cgreen/doc/tutorial_test/person_test.c000644 001750 001750 00000003107 11421144163 026052 0ustar00markusmarkus000000 000000 #include #include #include #include "person.h" static MYSQL *connection; static void create_schema() { mysql_query(connection, "create table people (name, varchar(255) unique)"); } static void drop_schema() { mysql_query(connection, "drop table people"); } static void can_add_person_to_database() { Person *person = create_person(); set_person_name(person, "Fred"); save_person(person); Person *found = find_person_by_name("Fred"); assert_string_equal(get_person_name(person), "Fred", NULL); } static void cannot_add_duplicate_person() { Person *person = create_person(); set_person_name(person, "Fred"); assert_true(save_person(person), NULL); Person *duplicate = create_person(); set_person_name(duplicate, "Fred"); assert_false(save_person(duplicate), NULL); } void open_connection() { connection = mysql_init(NULL); mysql_real_connect(connection, "localhost", "me", "secret", "test", 0, NULL, 0); } void close_connection() { mysql_close(connection); } TestSuite *person_tests() { TestSuite *suite = create_test_suite(); setup(suite, create_schema); teardown(suite, drop_schema); add_test(suite, can_add_person_to_database); add_test(suite, cannot_add_duplicate_person); TestSuite *fixture = create_named_test_suite("Mysql"); add_suite(fixture, suite); setup(fixture, open_connection); teardown(fixture, close_connection); return fixture; } int main(int argc, char **argv) { return run_test_suite(person_tests(), create_text_reporter()); } libdbi-drivers-0.9.0/tests/cgreen/doc/tutorial_test/stream.c000644 001750 001750 00000001465 11421144163 025005 0ustar00markusmarkus000000 000000 #include #include char *read_paragraph(int (*read)(void *), void *stream) { int buffer_size = 0, length = 0; char *buffer = NULL; int ch; while ((ch = (*read)(stream)) != EOF) { if (++length > buffer_size) { buffer_size += 100; buffer = realloc(buffer, buffer_size + 1); } if ((buffer[length - 1] = ch) == '\n') { buffer[--length] = '\0'; break; } buffer[length] = '\0'; } return buffer; } void by_paragraph(int (*read)(void *), void *in, void (*write)(void *, char *), void *out) { while (1) { char *line = read_paragraph(read, in); if ((line == NULL) || (strlen(line) == 0)) { return; } (*write)(out, line); free(line); } } libdbi-drivers-0.9.0/tests/cgreen/doc/tutorial_test/stream_test.c000644 001750 001750 00000007324 11421144163 026044 0ustar00markusmarkus000000 000000 #include #include char *read_paragraph(int (*read)(void *), void *stream); void by_paragraph(int (*read)(void *), void *in, void (*write)(void *, char *), void *out); static int stub_stream(void *stream) { return (int)stubbed_result(); } static void reading_lines_from_empty_stream_gives_null() { always_return(stub_stream, EOF); assert_equal(read_paragraph(&stub_stream, NULL), NULL); } static void one_character_stream_gives_one_character_line() { will_return(stub_stream, 'a'); will_return(stub_stream, EOF); char *line = read_paragraph(&stub_stream, NULL); assert_string_equal(line, "a"); free(line); } static void one_word_stream_gives_one_word_line() { will_return(stub_stream, 't'); will_return(stub_stream, 'h'); will_return(stub_stream, 'e'); always_return(stub_stream, EOF); assert_string_equal(read_paragraph(&stub_stream, NULL), "the"); } static void drops_line_ending_from_word_and_stops() { will_return(stub_stream, 't'); will_return(stub_stream, 'h'); will_return(stub_stream, 'e'); will_return(stub_stream, '\n'); assert_string_equal(read_paragraph(&stub_stream, NULL), "the"); } static void single_line_ending_gives_empty_line() { will_return(stub_stream, '\n'); assert_string_equal(read_paragraph(&stub_stream, NULL), ""); } static int reader(void *stream) { checked_integer(stream); return (int)stubbed_result(); } static void writer(void *stream, char *paragraph) { checked_integer(stream); checked_string(paragraph); } static void one_character_is_made_into_a_one_letter_paragraph() { mock(reader, 'a', NULL); always_mock(reader, EOF, NULL); expect(writer, NULL, "a"); by_paragraph(&reader, NULL, &writer, NULL); } static void no_line_endings_makes_one_paragraph() { mock(reader, 'a', NULL); mock(reader, ' ', NULL); mock(reader, 'b', NULL); mock(reader, ' ', NULL); mock(reader, 'c', NULL); always_mock(reader, EOF, NULL); expect(writer, NULL, "a b c"); by_paragraph(&reader, NULL, &writer, NULL); } static void line_endings_generate_separate_paragraphs() { mock(reader, 'a', NULL); mock(reader, '\n', NULL); mock(reader, 'b', NULL); mock(reader, '\n', NULL); mock(reader, 'c', NULL); always_mock(reader, EOF, NULL); expect(writer, NULL, "a"); expect(writer, NULL, "b"); expect(writer, NULL, "c"); by_paragraph(&reader, NULL, &writer, NULL); } static void resources_are_paired_with_the_functions() { mock(reader, 'a', (void *)1); always_mock(reader, EOF, (void *)1); expect(writer, (void *)2, "a"); by_paragraph(&reader, (void *)1, &writer, (void *)2); } static void empty_paragraphs_are_ignored() { mock(reader, '\n', NULL); always_mock(reader, EOF, NULL); expect_never(writer); by_paragraph(&reader, NULL, &writer, NULL); } static TestSuite *stream_tests() { TestSuite *suite = create_test_suite(); add_test(suite, reading_lines_from_empty_stream_gives_null); add_test(suite, one_character_stream_gives_one_character_line); add_test(suite, one_word_stream_gives_one_word_line); add_test(suite, drops_line_ending_from_word_and_stops); add_test(suite, single_line_ending_gives_empty_line); add_test(suite, one_character_is_made_into_a_one_letter_paragraph); add_test(suite, no_line_endings_makes_one_paragraph); add_test(suite, line_endings_generate_separate_paragraphs); add_test(suite, resources_are_paired_with_the_functions); add_test(suite, empty_paragraphs_are_ignored); return suite; } int main(int argc, char **argv) { TestSuite *suite = create_test_suite(); add_suite(suite, stream_tests()); return run_test_suite(suite, create_text_reporter()); } libdbi-drivers-0.9.0/tests/cgreen/doc/tutorial_test/strlen_test.c000644 001750 001750 00000001215 11421144163 026051 0ustar00markusmarkus000000 000000 #include #include static void strlen_of_hello_should_be_five() { int length = strlen("Hello\0"); assert_equal(length, 5, "Should be 5, but was %d", length); } static void strlen_of_empty_string_should_be_zero() { int length = strlen("\0"); assert_equal(length, 0, "Should be 0, but was %d", length); } TestSuite *our_tests() { TestSuite *suite = create_test_suite(); add_test(suite, strlen_of_hello_should_be_five); add_test(suite, strlen_of_empty_string_should_be_zero); return suite; } int main(int argc, char **argv) { return run_test_suite(our_tests(), create_text_reporter()); } libdbi-drivers-0.9.0/tests/cgreen/doc/tutorial_test/test_as_xml.c000644 001750 001750 00000001074 11421144163 026030 0ustar00markusmarkus000000 000000 #include #include "xml_reporter.h" void a_test_that_passes() { assert_true(1); } void a_test_that_fails() { assert_true_with_message(0, "A failure"); } TestSuite *create_test_group() { TestSuite *suite = create_named_test_suite("A Group"); add_test(suite, a_test_that_passes); add_test(suite, a_test_that_fails); return suite; } int main(int argc, char **argv) { TestSuite *suite = create_named_test_suite("Top Level"); add_suite(suite, create_test_group()); return run_test_suite(suite, create_xml_reporter()); } libdbi-drivers-0.9.0/tests/cgreen/doc/tutorial_test/words.c000644 001750 001750 00000001100 11421144163 024632 0ustar00markusmarkus000000 000000 #include int split_words(char *sentence) { int i, count = 1, length = strlen(sentence); for (i = 0; i < length; i++) { if (sentence[i] == ' ') { sentence[i] = '\0'; count++; } } return count; } void words(const char *sentence, void (*walker)(const char *, void *), void *memo) { char *words = strdup(sentence); int word_count = split_words(words); char *word = words; while (word_count-- > 0) { (*walker)(word, memo); word = word + strlen(word) + 1; } free(words); } libdbi-drivers-0.9.0/tests/cgreen/doc/tutorial_test/words.h000644 001750 001750 00000000160 11421144163 024644 0ustar00markusmarkus000000 000000 int split_words(char *sentence); void words(const char *sentence, void (*walker)(const char *, void *), void *);libdbi-drivers-0.9.0/tests/cgreen/doc/tutorial_test/words_test.c000644 001750 001750 00000002625 11421144163 025706 0ustar00markusmarkus000000 000000 #include #include "words.h" #include void word_count_returned_from_split() { char *sentence = strdup("Birds of a feather"); int word_count = split_words(sentence); assert_equal(word_count, 4); free(sentence); } void spaces_should_be_converted_to_zeroes() { char *sentence = strdup("Birds of a feather"); split_words(sentence); int comparison = memcmp("Birds\0of\0a\0feather", sentence, strlen(sentence)); assert_equal(comparison, 0); free(sentence); } void mocked_callback(const char *word, void *memo) { mock(word, memo); } void single_word_sentence_invokes_callback_once() { expect(mocked_callback, want_string(word, "Word"), want(memo, NULL)); words("Word", &mocked_callback, NULL); } void phrase_invokes_callback_for_each_word() { expect(mocked_callback, want_string(word, "Birds")); expect(mocked_callback, want_string(word, "of")); expect(mocked_callback, want_string(word, "a")); expect(mocked_callback, want_string(word, "feather")); words("Birds of a feather", &mocked_callback, NULL); } TestSuite *words_tests() { TestSuite *suite = create_test_suite(); add_test(suite, word_count_returned_from_split); add_test(suite, spaces_should_be_converted_to_zeroes); add_test(suite, single_word_sentence_invokes_callback_once); add_test(suite, phrase_invokes_callback_for_each_word); return suite; } libdbi-drivers-0.9.0/tests/cgreen/doc/tutorial_test/xml_reporter.c000644 001750 001750 00000004165 11421144163 026234 0ustar00markusmarkus000000 000000 #include "xml_reporter.h" #include #include #include #include static indent(TestReporter *reporter); static void xml_reporter_start(TestReporter *reporter, const char *name); static void xml_reporter_finish(TestReporter *reporter, const char *name); static void xml_show_fail(TestReporter *reporter, const char *file, int line, const char *message, va_list arguments); static void xml_show_incomplete(TestReporter *reporter, const char *name); TestReporter *create_xml_reporter() { TestReporter *reporter = create_reporter(); reporter->start_suite = &xml_reporter_start; reporter->start_test = &xml_reporter_start; reporter->show_fail = &xml_show_fail; reporter->show_incomplete = &xml_show_incomplete; reporter->finish_test = &xml_reporter_finish; reporter->finish_suite = &xml_reporter_finish; return reporter; } static indent(TestReporter *reporter) { int depth = get_breadcrumb_depth((Breadcrumb *)reporter->breadcrumb); while (depth-- > 0) { printf("\t"); } } static void xml_reporter_start(TestReporter *reporter, const char *name) { if (get_breadcrumb_depth((Breadcrumb *)reporter->breadcrumb) == 0) { printf("\n"); } indent(reporter); printf("\n", name); reporter_start(reporter, name); } static void xml_reporter_finish(TestReporter *reporter, const char *name) { reporter_finish(reporter, name); indent(reporter); printf("\n"); } static void xml_show_fail(TestReporter *reporter, const char *file, int line, const char *message, va_list arguments) { indent(reporter); printf("\n"); indent(reporter); printf("\t\n"); indent(reporter); printf("\t\n", file, line); indent(reporter); printf("\n"); } static void xml_show_incomplete(TestReporter *reporter, const char *name) { indent(reporter); printf("\n"); indent(reporter); printf("\t\n"); indent(reporter); printf("\n"); } libdbi-drivers-0.9.0/tests/cgreen/doc/tutorial_test/xml_reporter.h000644 001750 001750 00000000210 11421144163 026224 0ustar00markusmarkus000000 000000 #ifndef _XML_REPORTER_HEADER_ #define _XML_REPORTER_HEADER_ #include TestReporter *create_xml_reporter(); #endif libdbi-drivers-0.9.0/tests/cgreen/doc/tutorial_test/CVS/Root000644 001750 001750 00000000112 11473577276 024661 0ustar00markusmarkus000000 000000 :ext:mhoenicka@libdbi-drivers.cvs.sourceforge.net:/cvsroot/libdbi-drivers libdbi-drivers-0.9.0/tests/cgreen/doc/tutorial_test/CVS/Repository000644 001750 001750 00000000056 11473577276 026124 0ustar00markusmarkus000000 000000 libdbi-drivers/tests/cgreen/doc/tutorial_test libdbi-drivers-0.9.0/tests/cgreen/doc/tutorial_test/CVS/Entries000644 001750 001750 00000001155 11473577276 025357 0ustar00markusmarkus000000 000000 /all_tests.c/1.2/Mon Jul 19 21:49:39 2010// /crash_test.c/1.2/Mon Jul 19 21:49:39 2010// /first_test.c/1.2/Mon Jul 19 21:49:39 2010// /person.h/1.2/Mon Jul 19 21:49:39 2010// /person_test.c/1.2/Mon Jul 19 21:49:39 2010// /stream.c/1.2/Mon Jul 19 21:49:39 2010// /stream_test.c/1.2/Mon Jul 19 21:49:39 2010// /strlen_test.c/1.2/Mon Jul 19 21:49:39 2010// /test_as_xml.c/1.2/Mon Jul 19 21:49:39 2010// /words.c/1.2/Mon Jul 19 21:49:39 2010// /words.h/1.2/Mon Jul 19 21:49:39 2010// /words_test.c/1.2/Mon Jul 19 21:49:39 2010// /xml_reporter.c/1.2/Mon Jul 19 21:49:39 2010// /xml_reporter.h/1.2/Mon Jul 19 21:49:39 2010// D libdbi-drivers-0.9.0/tests/cgreen/doc/source/CVS/000755 001750 001750 00000000000 11530170575 022400 5ustar00markusmarkus000000 000000 libdbi-drivers-0.9.0/tests/cgreen/doc/source/include/000755 001750 001750 00000000000 11473577276 023407 5ustar00markusmarkus000000 000000 libdbi-drivers-0.9.0/tests/cgreen/doc/source/site/000755 001750 001750 00000000000 11473577276 022730 5ustar00markusmarkus000000 000000 libdbi-drivers-0.9.0/tests/cgreen/doc/source/site/CVS/000755 001750 001750 00000000000 11473577276 023363 5ustar00markusmarkus000000 000000 libdbi-drivers-0.9.0/tests/cgreen/doc/source/site/cgreen_reporter.xml000644 001750 001750 00000054422 11421144161 026616 0ustar00markusmarkus000000 000000 Changing the reporting mechanism of Cgreen.

In every test suite so far, we have run the tests with this line... create_text_reporter()); ]]> We can change the reporting mechanism just by changing this method. Here is the code for create_text_reporter()... start = &text_reporter_start; reporter->finish = &text_reporter_finish; reporter->show_fail = &show_fail; reporter->show_incomplete = &show_incomplete; return reporter; } ]]> The TestReporter structure contains function pointers that control the reporting. When called from create_reporter() constructor, these pointers are set up with functions that display nothing. The text reporter code replaces these with something more dramatic, and then returns a pointer to this new object. Thus the create_text_reporter() function effectively extends the object from create_reporter().

The text reporter only outputs content at the start of the first test, at the end of the test run to display the results, when a failure occours, and when a test fails to complete. A quick look at the text_reporter.c file in Cgreen reveals that the overrides just output a message and chain to the versions in reporter.h.

To change the reporting mechanism ourselves, we just have to know a little about the methods in the TestReporter structure.

The Cgreen TestReporter is a pseudo class that looks something like... The first block are the methods that can be overridden.

void (*destroy)(TestReporter *)
This is the destructor for the default structure. If this is overridden, then the overriding function must call destroy_reporter(TestReporter *reporter) to finish the clean up.
void (*start)(TestReporter *, const char *)
The first of the callbacks. At the start of each test suite Cgreen will call this method on the reporter with the name of the suite being entered. The default version keeps track of the stack of tests in the breadcrumb pointer of TestReporter. If you make use of the breadcrumb functions, as the defaults do, then you will need to call reporter_start() to keep the book keeping in sync.
void (*finish)(TestReporter *, const char *)
The counterpart to the (*start)() call called on leaving the test suite. It needs to be chained to the reporter_finish() to keep track of the breadcrumb book keeping. The text reporter uses the state of the breadcrumb to decide if it is ending teh top level test. If so, it prints the familiar summary of passes and fails.
void (*show_pass)(TestReporter *, const char *, int, const char *, va_list)
This method is initially empty, so there is no need to chain the call to any other function. Besides the pointer to the reporter structure, Cgreen also passes the file name of the test, the line number of failed assertion, the message to show and any additional parameters to substitute into the message. The message comes in as printf() style format string, and so the variable argument list should match the substitutions.
void (*show_fail)(TestReporter *, const char *, int, const char *, va_list)
The partner of show_pass(), and the one you'll likely overload first.
void (*show_incomplete)(TestReporter *, const char *)
When a test fails to complete, this is the handler that is called. As it's an unexpected outcome, no message is received, but we do get the name of the test. The text reporter combines this with the breadcrumb to produce the exception report.
void (*assert_true)(TestReporter *, const char *, int, int, const char *, ...)
This is not normally overridden and is really internal. It is the raw entry point for the test messages from the test suite. By default it dispatches teh call to either show_pass() or show_fail().
The second block is simply resources and book keeping that the reporter can use to liven up the messages...
passes
The number of passes so far.
failures
The number of failures generated so far.
exceptions
The number of test functions that have failed to complete so far.
breadcrumb
This is a pointer to the list of test names in the stack.
The breadcrumb pointer is different and needs a little explanation. Basically it is a stack, analagous to the breadcrumb trail you see on websites. Everytime the start() handler is invoked, the name is placed in this stack. When the finish() message handler is invoked, a name is popped off.

There are a bunch of utility functions in cgreen/breadcrumb.h that can read the state of this stack. Most useful are get_current_from_breadcrumb() which takes the breadcrumb pointer and returns the curent test name, and get_breadcrumb_depth() which gives the current depth of the stack. A depth of zero means that the test run has finished.

If you need to traverse all the names in the breadcrumb, then you can call walk_breadcrumb(). Here is the full signature... The void (*walker)(const char *, void *) is a callback that will be passed the name of the test suite for each level of nesting. It is also poassed the memo pointer that was passed to the walk_breadcrumb() call. You can use this pointer for anything you want, as all Cgreen does is pass it from call to call. This is so aggregate information can be kept track of whilst still being reentrant.

The last parts of the TestReporter structure are...

ipc
This is an internal structure for handling the messaging between reporter and test suite. You shouldn't touch this.
memo
By contrast, this is a spare pointer for your own expansion.

Let's make things real with an example. Suppose we want to send the output from Cgreen in XML format, say for storing in a repository or for sending across the network.

Suppose also that we have come up with the following format...



    
        
        
        
            
                ]]
                
            
        
    

]]>
In other words a simple nesting of tests with only failures encoded. The absence of failure is a pass.

Here is a test script, test_in_xml.c that we can use to construct the above output... a_test_that_passes() { assert_true(1); } void a_test_that_fails() { assert_true_with_message(0, "A failure"); } TestSuite *create_test_group() { TestSuite *suite = create_named_test_suite("A Group"); add_test(suite, a_test_that_passes); add_test(suite, a_test_that_fails); return suite; } int main(int argc, char **argv) { TestSuite *suite = create_named_test_suite("Top Level"); add_suite(suite, create_test_group()); return run_test_suite(suite, create_text_reporter()); } ]]> The text reporter is used just to confirm that everything is working. So far it is. a_test_that_fails -> A failure at [test_as_xml.c] line [8] Completed "Top Level": 1 pass, 1 failure, 0 exceptions. ]]>

Our first move is to switch the reporter from text, to our not yet written XML version... #include "xml_reporter.h" ... int main(int argc, char **argv) { TestSuite *suite = create_named_test_suite("Top Level"); add_suite(suite, create_test_group()); return run_test_suite(suite, create_xml_reporter()); } ]]> We'll start the ball rolling with the xml_reporter.h header file... #include "cgreen/reporter.h" TestReporter *create_xml_reporter(); #endif ]]> ...and the simplest possible reporter in reporter.c. One that outputs nothing. Yep, nothing.

Let's add the outer test tags first, so that we can see Cgreen navigating the test suite... #include static void xml_reporter_start(TestReporter *reporter, const char *name); static void xml_reporter_finish(TestReporter *reporter, const char *name); TestReporter *create_xml_reporter() { TestReporter *reporter = create_reporter(); reporter->start = &xml_reporter_start; reporter->finish = &xml_reporter_finish; return reporter; } static void xml_reporter_start(TestReporter *reporter, const char *name) { printf("\n", name); reporter_start(reporter, name); } static void xml_reporter_finish(TestReporter *reporter, const char *name) { reporter_finish(reporter, name); printf("\n"); } ]]> Although chaining to the underlying reporter_start() and reporter_finish() functions is optional, I want to make use of some of the facilities later.

Our output meanwhile, is making it's first tentative steps... ]]> We don't want a passing message, so the show_fail() function is all we need... static void xml_show_fail(TestReporter *reporter, const char *file, int line, const char *message, va_list arguments); TestReporter *create_xml_reporter() { TestReporter *reporter = create_reporter(); reporter->start = &xml_reporter_start; reporter->finish = &xml_reporter_finish; reporter->show_fail = &xml_show_fail; return reporter; } ... static void xml_show_fail(TestReporter *reporter, const char *file, int line, const char *message, va_list arguments) { printf("\n"); printf("\t]]>\n"); printf("\t\n", file, line); printf("\n"); } ]]> We have to use vprintf() to handle the variable argument list passed to us. This will probably mean including the stdarg.h header as well as stdio.h.

This gets us pretty close to what we want... ]]> ]]> For completeness we should add a tag for an incomplete test. We'll output this as a failure, athough we don't get a location this time... static void xml_show_incomplete(TestReporter *reporter, const char *name) { printf("\n"); printf("\t]]>\n"); printf("\n"); } ]]> All that's left then is the XML declaration and the thorny issue of indenting. Although the indenting is not strictly necessary, it would make the output a lot more readable.

The test depth is kept track of for us with the breadcrumb object in the TestReporter structure. We'll add an indent() function that outputs the correct number of tabs... get_breadcrumb_depth((Breadcrumb *)reporter->breadcrumb); while (depth-- > 0) { printf("\t"); } } ]]> The get_breadcrumb_depth() function just gives the current test depth. As that is just the number of tabs to output, the implementation is trivial.

We can then use this function in the rest of the code. Here is the complete listing... #include static indent(TestReporter *reporter); static void xml_reporter_start(TestReporter *reporter, const char *name); static void xml_reporter_finish(TestReporter *reporter, const char *name); static void xml_show_fail(TestReporter *reporter, const char *file, int line, const char *message, va_list arguments); static void xml_show_incomplete(TestReporter *reporter, const char *name); TestReporter *create_xml_reporter() { TestReporter *reporter = create_reporter(); reporter->start = &xml_reporter_start; reporter->finish = &xml_reporter_finish; reporter->show_fail = &xml_show_fail; reporter->show_incomplete = &xml_show_incomplete; return reporter; } static indent(TestReporter *reporter) { int depth = get_breadcrumb_depth((Breadcrumb *)reporter->breadcrumb); while (depth-- > 0) { printf("\t"); } } static void xml_reporter_start(TestReporter *reporter, const char *name) { if (get_breadcrumb_depth((Breadcrumb *)reporter->breadcrumb) == 0) { printf("\n"); } indent(reporter); printf("\n", name); reporter_start(reporter, name); } static void xml_reporter_finish(TestReporter *reporter, const char *name) { reporter_finish(reporter, name); indent(reporter); printf("\n"); } static void xml_show_fail(TestReporter *reporter, const char *file, int line, const char *message, va_list arguments) { indent(reporter); printf("\n"); indent(reporter); printf("\t]]>\n"); indent(reporter); printf("\t\n", file, line); indent(reporter); printf("\n"); } static void xml_show_incomplete(TestReporter *reporter, const char *name) { indent(reporter); printf("\n"); indent(reporter); printf("\t]]>\n"); indent(reporter); printf("\n"); } ]]> And finally the desired output... ]]> ]]> Job done.

Possible other extensions include reporters that write to syslog, talk to IDE plug-ins, paint pretty printed documents or just return a boolean for monitoring purposes.

Replacing and extending the reporting from Cgreen. The Cgreen TestReporter pseudo class. An example of an XML Cgreen reporter. The Cgreen SourceForge page. Unit testing was popularised by eXtreme Programming. unit testing, test-first, test first, code quality, automate unit testing, automated testing, c programming, c tools, c unit tests, unit testing in c, check unit tester, test coverage, TDD, extreme programming, agile development, tdd in C, c regression testing, cunit, cppunit, c unit testing frameworks, sourceforge, open source, open source framework, lesser gnu licence, lgpl, software testing, executable specification, software requirements, quality assurance, test driven design, software decoupling, XML reports, error logging, software monitoring
libdbi-drivers-0.9.0/tests/cgreen/doc/source/site/cgreen_suites.xml000644 001750 001750 00000066172 11421144162 026276 0ustar00markusmarkus000000 000000 Tutorial: C test suites using the Cgreen unit testing framework

Cgreen is a tool for building unit tests in the C language. These are usually written alongside the production code by the programmer to prevent bugs. Even though the test suites are created by software developers, they are intended to be human readable C code, as part of their function is an executable specification. Used in this way, the test harness delivers constant quality assurance.

In other words you'll get less bugs.

Cgreen tests are simply C functions with no parameters and a void return value. An example might be... strlen_of_hello_should_be_five() { assert_equal(strlen("Hello"), 5); } ]]> The test function name can be anything you want. The assert_equal() call is an example of an assertion. Assertions send messages to Cgreen, which in turn outputs the results.

Here are the standard assertions...
AssertionDescription
assert_true(boolean)Passes if boolean evaluates true
assert_false(boolean)Fails if boolean evaluates true
assert_equal(first, second)Passes if first == second
assert_not_equal(first, second)Passes if first != second
assert_string_equal(char *, char *)Uses strcmp() and passes if the strings are equal
assert_string_not_equal(char *, char *)Uses strcmp() and fails if the strings are equal
The boolean assertion macros accept an int value. The equality assertions accept anything that can be cast to intptr_t and simply perform an == operation. The string comparisons are slightly different in that they use the ]]> library function strcmp(). If assert_equal() is used on char * pointers then the pointers have to point at the same string.

Each assertion has a default message comparing the two values. If you want to substitute your own failure messages, then you must use the *_with_message() counterparts...
Assertion
assert_true_with_message(boolean, message, ...)
assert_false_with_message(boolean, message, ...)
assert_equal_with_message(first, second, message, ...)
assert_not_equal_with_message(first, second, message, ...)
assert_string_equal_with_message(char *, char *, message, ...)
assert_string_not_equal_with_message(char *, char *, message, ...)
All these assertions have an additional char * message parameter, which is the message you wished to display on failure. If this is set to NULL, then the default message is shown instead. The most useful assertion from this group is assert_true_with_message() as you can use that to create your own assertion functions with your own messages.

Actually the assertion macros have variable argument lists. The failure message acts like the template in printf(). We could change the test above to be... "[%s] should be 5, but was %d", greeting, length); } ]]> A slightly more user friendly message when things go wrong.

For the test above to work there needs to be a running test suite. We can create one expecially for this test like so... TestSuite *our_tests() { TestSuite *suite = create_test_suite(); add_test(suite, strlen_of_hello_should_be_five); return suite; } ]]> In case you have spotted that strlen_of_hello_should_be_five() should have an ampersand in front of it, add_test() is a macro. The & is added automatically.

To run the test suite, we call run_test_suite() on it. This function cleans up the test suite after running it, so we can just write... run_test_suite(our_tests(), create_text_reporter()); ]]> The results of assertions are ultimately delivered as passes and failures to a collection of callbacks defined in a TestReporter structure. The only predefined one in Cgreen is the TextReporter that delivers messages in plain text.

A full test script now looks like... #include "cgreen/cgreen.h" #include static void strlen_of_hello_should_be_five() { assert_equal(strlen("Hello"), 5); } TestSuite *our_tests() { TestSuite *suite = create_test_suite(); add_test(suite, strlen_of_hello_should_be_five); return suite; } int main(int argc, char **argv) { return run_test_suite(our_tests(), create_text_reporter()); } ]]> The return value of run_test_suite() is a Unix exit code.

Compliling and running gives... Running "main"... Completed "main": 1 pass, 0 failures, 0 exceptions. ]]> The test messages are only shown on failure. If we break our test... "Hiya", 5); } ]]> ...we'll get the helpful message... Failure!: strlen_of_hello_should_be_five -> [5] shold be [4] at [strlen_test.c] line [6] Completed "main": 0 passes, 1 failure, 0 exceptions. ]]> Cgreen appends the location of the test failure to our error string.

Once we have a basic test scaffold up, it's pretty easy to add more tests. Adding a test of strlen() with an empty string for example... static void strlen_of_empty_string_should_be_zero() { assert_equal(strlen("\0"), 0); } TestSuite *our_tests() { TestSuite *suite = create_test_suite(); add_test(suite, strlen_of_hello_should_be_five); add_test(suite, strlen_of_empty_string_should_be_zero); return suite; } ... ]]> And so on.

It's common for test suites to have a lot of duplicate code, especially when setting up similar tests. Take this database code for example... #include #include "person.h" static void create_schema() { MYSQL *connection = mysql_init(NULL); mysql_real_connect(connection, "localhost", "me", "secret", "test", 0, NULL, 0); mysql_query(connection, "create table people (name, varchar(255) unique)"); mysql_close(connection); } static void drop_schema() { MYSQL *connection = mysql_init(NULL); mysql_real_connect(connection, "localhost", "me", "secret", "test", 0, NULL, 0); mysql_query(connection, "drop table people"); mysql_close(connection); } static void can_add_person_to_database() { create_schema(); Person *person = create_person(); set_person_name(person, "Fred"); save_person(person); Person *found = find_person_by_name("Fred"); assert_string_equal(get_person_name(person), "Fred"); drop_schema(); } static void cannot_add_duplicate_person() { create_schema(); Person *person = create_person(); set_person_name(person, "Fred"); assert_true(save_person(person)); Person *duplicate = create_person(); set_person_name(duplicate, "Fred"); assert_false(save_person(duplicate)); drop_schema(); } TestSuite *person_tests() { TestSuite *suite = create_test_suite(); add_test(suite, can_add_person_to_database); add_test(suite, cannot_add_duplicate_person); return suite; } int main(int argc, char **argv) { return run_test_suite(person_tests(), create_text_reporter()); } ]]> We have already factored out the duplicate code into it's own functions create_scheme() and drop_schema(), so things are not so bad. At least not yet. What happens when we get dozens of tests? For a test subject as compicated as a database ActiveRecord, having dozens of tests is very likely.

We can get Cgreen to do some of the work for us by declaring these methods as setup() and teardown() functions in the test suite.

Here is the new version... create_schema() { ... } static void drop_schema() { ... } static void can_add_person_to_database() { Person *person = create_person(); set_person_name(person, "Fred"); save_person(person); Person *found = find_person_by_name("Fred"); assert_string_equal(get_person_name(person), "Fred"); } static void cannot_add_duplicate_person() { Person *person = create_person(); set_person_name(person, "Fred"); assert_true(save_person(person)); Person *duplicate = create_person(); set_person_name(duplicate, "Fred"); assert_false(save_person(duplicate)); } TestSuite *person_tests() { TestSuite *suite = create_test_suite(); setup(suite, create_schema); teardown(suite, drop_schema); add_test(suite, can_add_person_to_database); add_test(suite, cannot_add_duplicate_person); return suite; } ... ]]> With this new arrangement Cgreen runs the create_schema() function before each test, and the drop_schema() function after each test. This saves some repetitive typing and reduces the chance of accidents. It also makes the tests more focused.

The reason we try so hard to strip everything out of the test functions is that that the test suite acts as documentation. In our person.h example we can easily see that Person has some kind of name property, and that this value must be unique. For the tests to act like a readable specification we have to remove as much mechanical clutter as we can.

A couple of details. Currently only one setup() and teardown() may be added to each TestSuite. Also the teardown() function may not be run if the test crashes, causing some test interference. This brings us nicely onto the next section...

Consider this test method... void will_seg_fault() { int *p = NULL; (*p)++; } ]]> Crashes are not something you would normally want to have in a test run. Not least because it will stop you receiving the very test output you need to tackle the problem.

To prevent segmentation faults and other problems bringing down the test suites, Cgreen runs every test in it's own process.

Just before the setup() call, Cgreen fork()'s. The main process wait's for the test to complete normally or die. This includes the teardown(). If the test process dies, an exception is reported and the main test process carries on.

For example... static void will_seg_fault() { int *p = NULL; (*p)++; } int main(int argc, char **argv) { TestSuite *suite = create_test_suite(); add_test(suite, will_seg_fault); run_test_suite(suite, create_text_reporter()); } ]]> When built and run, this gives... Test "will_seg_fault" failed to complete Completed "main": 0 passes, 0 failures, 1 exception. ]]> The obvious thing to do now is to fire up the debugger. Unfortunately, the constant fork()'ing of Cgreen can be an extra complication too many when debugging. It's enough of a problem to find the bug.

To get around this, and also to allow the running of one test at a time, Cgreen has the run_single_test() function. The signatures of the two run methods are...

The extra parameter of run_single_test(), the test string, is the name of the test to select. This could be any test, even in nested test suites (see below).

Here is how we would use it to debug our crashing test... run_single_test(suite, "will_seg_fault", create_text_reporter()); } ]]> When run in this way, Cgreen will not fork().

This deals with the segmentation fault case, but what about a process that fails to complete by getting stuck in a loop?

Well, Cgreen will wait forever too. Using the C signal handlers, we can place a time limit on the process by sending it an interrupt. To save us writing this ourselves, Cgreen includes the die_in() function to help us out.

Here is an example of time limiting a test... static void this_would_stall() { die_in(1); while(0 == 0) { } } int main(int argc, char **argv) { TestSuite *suite = create_test_suite(); add_test(suite, will_seg_fault); add_test(suite, this_would_stall); run_test_suite(suite, create_text_reporter()); } ]]> When executed, the code will slow for a second, and then finish with... Test "will_seg_fault" failed to complete Exception!: will_stall -> Test "this_would_stall" failed to complete Completed "main": 0 passes, 0 failures, 2 exceptions. ]]> Note that you see the test results as they come in. Cgreen streams the results as they happen, making it easier to figure out where the test suite has problems.

Of course, if you want to set a general time limit on all your tests, then you can add a die_in() to a setup() function. Cgreen will then apply the limit to all of them.

The TestSuite is a composite structure. This means test suites can be added to test suites, building a tree structure that will be executed in order.

Let's combine the strlen() tests with the Person tests above. Firstly we need to remove the main() calls. E.g... static void strlen_of_hello_should_be_five() { ... } static void strlen_of_empty_string_should_be_zero() { ... } TestSuite *our_tests() { TestSuite *suite = create_test_suite(); add_test(suite, strlen_of_hello_should_be_five); add_test(suite, strlen_of_empty_string_should_be_zero); return suite; } ]]> Then we can write a small runner script with a new main() function... TestSuite *our_tests(); TestSuite *person_tests(); int main(int argc, char **argv) { TestSuite *suite = create_test_suite(); add_suite(suite, our_tests()); add_suite(suite, person_tests()); if (argc > 1) { return run_single_test(suite, argv[1], create_text_reporter()); } return run_test_suite(suite, create_text_reporter()); } ]]> It's usually easier to place the TestSuite prototypes in the runner scripts, rather than have lot's of header files. This is the same reasoning that let us drop the prototypes for the test functions in the actual test scripts. We can get away with this, because the tests are more about documentation than encapsulation.

It's sometimes handy to be able to run just a single test from the command line, so we added a simple if block to take the test name as an optional argument. The entire test suite will be searched for the named test. This trick also saves us a recomplile when we debug.

We've placed each test suite in it's own file, but that is not necessary. We could build several test suites in the same file, even nesting them. We can even add mixtures of test functions and test suites to the same parent test suite. Loops will give trouble, however.

If we do place several suites in the same file, then all the suites will be named the same in the breadcrumb trail in the test message. They will all be named after the function the create call sits in. If you want to get around this, or you just like to name your test suites, you can use create_named_test_suite() instead of create_test_suite(). This takes a single string parameter. In fact create_test_suite() is just a macro that inserts the __func__ constant into create_named_test_suite().

What happens to setup() and teardown() in a TestSuite that contains other TestSuites?

Well firstly, Cgreen does not fork() when running a suite. It leaves it up to the child suite to fork() the individual tests. This means that a setup() and teardown() will run in the main process. They will be run once for each child suite.

We can use this to speed up our Person tests above. Remember we were creating a new connection and closing it again in the fixtures. This means opening and closing a lot of connections. At the slight risk of some test interference, we could reuse the connection accross tests... mysql_query(connection, "create table people (name, varchar(255) unique)"); } static void drop_schema() { mysql_query(connection, "drop table people"); } static void can_add_person_to_database() { ... } static void cannot_add_duplicate_person() { ... } void open_connection() { connection = mysql_init(NULL); mysql_real_connect(connection, "localhost", "me", "secret", "test", 0, NULL, 0); } void close_connection() { mysql_close(connection); } TestSuite *person_tests() { TestSuite *suite = create_test_suite(); setup(suite, create_schema); teardown(suite, drop_schema); add_test(suite, can_add_person_to_database); add_test(suite, cannot_add_duplicate_person); TestSuite *fixture = create_named_test_suite("Mysql fixture"); add_suite(fixture, suite); setup(fixture, open_connection); teardown(fixture, close_connection); return fixture; } ]]> The trick here is creating a test suite as a wrapper whose sole purpose to wrap the main test suite in the fixture. This is our fixture pointer. This code is a little confusing, because we have two sets of fixtures in the same test script.

We have the MySQL connection fixture. This is runs open_connection() and close_connection() just once at the beginning and end of the person tests. This is because the suite pointer is the only member of fixture.

We also have the schema fixture, the create_schema() and drop_schema(), which is run before and after every test. Those are still attached to the inner suite.

In the real world we would probably place the connection fixture in it's own file... TestSuite *connection_fixture(TestSuite *suite) { TestSuite *fixture = create_named_test_suite("Mysql fixture"); add_suite(fixture, suite); setup(fixture, open_connection); teardown(fixture, close_connection); return fixture; } ]]> This allows the reuse of common fixtures across projects.

Writing a Cgreen unit test. The setup() and teardown() fixtures. Each test in it's own process. Creating a composite test harness. The Cgreen SourceForge page. Unit testing was popularised by eXtreme Programming. Cgreen is heavily influenced by the Check unit tester. unit testing, test-first, test first, code quality, automate unit testing, automated testing, c programming, c tools, c unit tests, unit testing in c, check unit tester, test coverage, TDD, extreme programming, agile development, tdd in C, c regression testing, cunit, cppunit, c unit testing frameworks, sourceforge, open source, open source framework, gnu licence, lgpl, software testing, executable specification, software requirements, quality assurance, automated software testing for c development teams, software quality assurance
libdbi-drivers-0.9.0/tests/cgreen/doc/source/site/mock_callbacks.xml000644 001750 001750 00000062053 11421144162 026361 0ustar00markusmarkus000000 000000 Creating mock functions in the Cgreen unit testing framework

When testing you want certainty above all else. Random events destroy confidence in your test suite and force needless extra runs "to be sure". A good test places the subject under test into a tightly controlled environment. A test chamber if you like. This makes the tests fast, repeatable and reliable.

To create a test chamber for testing code, we have to control any outgoing calls from the code under test. We won't believe our test failure if our code is making calls to the internet for example. The internet can fail all by itself. Not only do we not have total control, but it means we have to get dependent components working before we can test the higher level code. This makes it difficult to code top down.

The solution to this dilemma is to write stub code for the components whilst the higher level code is written. This pollutes the code base with temporary code, and the test isolation disappears when the system is eventually fleshed out.

The ideal is to have minimal stubs written for each individual test. Cgreen encourages this approach by making such tests easier to write.

How do we test this code...? int (*read)(void *), void *stream) { int buffer_size = 0, length = 0; char *buffer = NULL; int ch; while ((ch = (*read)(stream)) != EOF) { if (++length > buffer_size) { buffer_size += 100; buffer = realloc(buffer, buffer_size + 1); } if ((buffer[length] = ch) == '\n') { break; } } return buffer; } ]]> This is a fairly generic stream filter that turns the incoming characters into C string paragraphs. Each call creates one paragraph, returning a pointer to it or returning NULL if there is no paragraph. The paragraph has memory allocated to it and the stream is advanced ready for the next call. That's quite a bit of functionality, and there are plenty of nasty boundary conditions. I really want this code tested before I deploy it.

The problem is the stream dependency. We could use a real stream, but that will cause all sorts of headaches. It makes the test of our paragraph formatter dependent on a working stream. It means we have to write the stream first, bottom up coding rather than top down. It means we will have to simulate stream failures - not easy. It will also mean setting up external resources. This is more work, will run slower, and could lead to spurious test failures.

By contrast we could write a simulation of the stream for each test, called a "server stub".

For example, when the stream is empty nothing should happen. We hopefully get NULL from read_paragraph when the stream is exhausted. That is, it just returns a steady stream of EOFs. int empty_stream(void *stream) { return EOF; } static void reading_lines_from_empty_stream_gives_null() { assert_equal(read_paragraph(&empty_stream, NULL), NULL); } TestSuite *stream_tests() { TestSuite *suite = create_test_suite(); add_test(suite, reading_lines_from_empty_stream_gives_null); return suite; } ]]> Our simulation is easy here, because our fake stream returns only one value. Things are harder when the function result changes from call to call as a real stream would. Simulating this would mean messing around with static variables and counters that are reset for each test. And of course, we will be writing quite a few stubs. Often a different one for each test. That's a lot of clutter.

Cgreen handles this clutter for us by letting us write a single programmable function for all our tests.

We can redo our example by creating a stub_stream() function (any name will do)... static int stub_stream(void *stream) { return (int)mock(); } ]]> Hardly longer that our trivial server stub above, it is just a macro to generate a return value, but we can reuse this in test after test.

For our simple example above we just tell it to always return EOF... always_return(stub_stream, EOF); assert_equal(read_paragraph(&stub_stream, NULL), NULL); } ]]> The always_return() macro takes as arguments the function name and the return value. We have told stub_stream() to always return EOF when called.

Let's see if our production code actually works... So far, so good. On to the next test.

If we want to test a one character line, we have to send the terminating EOF or as well as the single character. Otherwise our code will loop forever, giving an infinite line of that character.

Here is how we can do this... will_return(stub_stream, 'a'); will_return(stub_stream, EOF); char *line = read_paragraph(&stub_stream, NULL); assert_string_equal(line, "a"); free(line); } ]]> Unlike the always_return() instruction, will_return() sets just a single return value. It acts like a record and playback model. Successive instructions map out the return sequence that will be given back once the test proper starts.

We'll add this test to the suite and run it... one_character_stream_gives_one_character_line -> [] should match [a] at [stream_test.c] line [19] Completed "main": 1 pass, 1 failure, 0 exceptions. ]]> Oops. Our code under test doesn't work. Already we need a fix... buffer_size) { buffer_size += 100; buffer = realloc(buffer, buffer_size + 1); } if ((buffer[length - 1] = ch) == '\n') { break; } } return buffer; } ]]> After which everything is fine...

How do the Cgreen stubs work? The will_return() calls build up a static list of return values which are cleared between tests. The mock() macro captures the __func__ property. It uses these to look up entries in the return list, and also to generate more helpful messages.

We can crank out our tests quite quickly now... will_return(stub_stream, 't'); will_return(stub_stream, 'h'); will_return(stub_stream, 'e'); always_return(stub_stream, EOF); assert_string_equal(read_paragraph(&stub_stream, NULL), "the"); } ]]> I've been a bit naughty. As each test runs in it's own process, I haven't bothered to free the pointers to the paragraphs. I've just let the operating system do it. Purists may want to add the extra clean up code.

I've also used always_return() for the last instruction. Withou this, if the stub is given an instruction is does not expect, it will throw a test failure. This is overly restrictive, as our read_paragraph() function could quite legitimately call the stream after it had run off of the end. OK, that would be odd behaviour, but that's not what we are testing here. If we were, it would be placed in a test of it's own. The always_return() call tells Cgreen to keep going after the first three letters, allowing extra calls.

As we build more tests, they start to look like a specification of the behaviour... will_return(stub_stream, 't'); will_return(stub_stream, 'h'); will_return(stub_stream, 'e'); will_return(stub_stream, '\n'); assert_string_equal(read_paragraph(&stub_stream, NULL), "the"); } ]]> ...and just for luck... will_return(stub_stream, '\n'); assert_string_equal(read_paragraph(&stub_stream, NULL), ""); } ]]> This time we musn't use always_return(). We want to leave the stream where it is, ready for the next call to read_paragraph(). If we call the stream beyond the line ending, we want to fail.

It turns out that we are failing anyway... drops_line_ending_from_word_and_stops -> [the ] should match [the] at [stream_test.c] line [36] Failure!: stream_tests -> single_line_ending_gives_empty_line -> [ ] should match [] at [stream_test.c] line [41] Completed "main": 3 passes, 2 failures, 0 exceptions. ]]> Clearly we are passing through the line ending. Another fix later... buffer_size) { buffer_size += 100; buffer = realloc(buffer, buffer_size + 1); } if ((buffer[length - 1] = ch) == '\n') { buffer[--length] = '\0'; break; } buffer[length] = '\0'; } return buffer; } ]]> And we are passing again...

There are no limits to the number of stubbed methods within a test, only that two stubs cannot have the same name. So this will cause problems... static void bad_test() { will_return(stub_stream, 'a'); do_stuff(&stub_stream, &stub_stream); } ]]> It will be necessary to have two stubs to make this test behave... static void good_test() { will_return(first_stream, 'a'); will_return(second_stream, 'a'); do_stuff(&first_stream, &second_stream); } ]]> We now have a way of writing fast, clear tests with no external dependencies. The information flow is still one way though, from stub to the code under test. When our code calls complex procedures, we won't want to pick apart the effects to infer what happened. That's too much like detective work. And why should we? We just want to know that we dispatched the correct information down the line.

Things get more interesting when we thing of the traffic going the other way, from code to stub. This gets us into the same territory as mock objects.

To swap the traffic flow, we'll look at an outgoing example instead. Here is the prewritten production code... void (*write)(void *, char *), void *out) { while (1) { char *line = read_paragraph(read, in); if (line == NULL) { return; } (*write)(out, line); free(line); } } ]]> This is the start of a formatter utility. Later filters will probably break the paragaphs up into justified text, but right now that is all abstracted behind the void write(void *, char *) interface. Our current interests are: does it loop through the paragraphs, and does it crash?

We could test correct paragraph formation by writing a stub that collects the paragraphs into a struct. We could then pick apart that struct and test each piece with assertions. This approach is extremely clumsy in C. The language is just not suited to building and tearing down complex edifices, never mind navigating them with assertions. We would badly clutter our tests.

Instead we'll test the output as soon as possible, right in the called function... void expect_one_letter_paragraph(char *paragraph, void *stream) { assert_string_equal(paragraph, "a", NULL); } void one_character_is_made_into_a_one_letter_paragraph() { by_paragraph( &one_character_stream, NULL, &expect_one_letter_paragraph, NULL); } ... ]]> By placing the assertions into the mocked function, we keep the tests minimal. The catch with this method is that we are back to writing individual functions for each test. We have the same problem as we had with hand coded stubs.

Again, Cgreen has a way to automate this. Here is the rewritten test... stream); } static void writer(void *stream, char *paragraph) { mock(stream, paragraph); } void one_character_is_made_into_a_one_letter_paragraph() { will_return(reader, 'a'); always_return(reader, EOF); expect(writer, want_string(paragraph, "a")); by_paragraph(&reader, NULL, &writer, NULL); } ]]> Where are the assertions?

Unlike our earlier stub, reader() can now check it's parameters. In object oriented circles, an object that checks it's parameters as well as simulating behaviour is called a mock object. By analogy reader() is a mock function, or mock callback.

Using the expect macro, we have stated that writer() will be called just once. That call must have the string "a" for the paragraph parameter. If this parameter does not match, the mock function will issue a failure straight to the test suite. This is what saves us writing a lot of assertions.

Here is the full list of instructions that can be sent to the mocks...
MacroParameters
will_return(function, result)Returns result once only, but successive calls will be replayed in order. Generates a failure when called too many times.
always_return(function, result)Returns result repeatedly.
expect(function, arguments...)Sets up an expectation on each argument. If there is a mismatch, or a call is made without an expectation, a failure is generated.
always_expect(function, arguments...)Must receive exactly these arguments from now on.
expect_never(function)This function must not be called or a failure is generated.
will_respond(function, result, arguments...)Combines will_return() and expect().
always_respond(function, result, arguments...)Combines always_return() and always_expect().
The expect_never() macro is slightly different. It's only task is to confirm that a method was never run.

The will_respond() macro combines the will_return() and the expect() calls into one call, as does always_respond.

Each parameter can be tested with a constraint. Two constraints are available: want(parameter, expected) for integers and pointers, and want_string(parameter, expected) does a string comparison.

It's about time we actually ran our test... Confident that a single character works, we can further specify the behaviour. Firstly an input sequence... expect(writer, want_string(paragraph, "a b c")); by_paragraph(&reader, NULL, &writer, NULL); } ]]> A more intelligent programmer than me would place all these calls in a loop. Next, checking an output sequence... expect(writer, want_string(paragraph, "a")); expect(writer, want_string(paragraph, "b")); expect(writer, want_string(paragraph, "c")); by_paragraph(&reader, NULL, &writer, NULL); } ]]> Like the will_return() stubs above, the expect() calls follow a record and playback model. Each one tests a successive call. This sequence confirms that we get , and in order.

Then we'll make sure the correct stream pointers are passed to the correct functions. This is a more realistic parameter check... And finally we'll specify that the writer is not called if there is no paragraph. expect_never(writer); by_paragraph(&reader, NULL, &writer, NULL); } ]]> This last test is our undoing... empty_paragraphs_are_ignored -> Unexpected call to function [writer] at [stream_test.c] line [96] Completed "main": 14 passes, 1 failure, 0 exceptions. ]]> Obviously blank lines are still being dispatched to the writer(). Once this is pointed out, the fix is obvious... (line == NULL) || (strlen(line) == 0)) { return; } (*write)(out, line); free(line); } } ]]> Tests with expect_never() can be very effective at uncovering subtle bugs. All done.

The trouble with simulating iterators and streams in tests. Creating server stubs using Cgreen's record and playback approach. Expectations in mock functions for each unit test. The Cgreen Sourceforge page. Unit testing was popularised by eXtreme Programming. Mock objects come from the agile OO community. unit testing, test-first, test first, code quality, automate unit testing, automated testing, c programming, c tools, c unit tests, unit testing in c, check unit tester, test coverage, TDD, extreme programming, agile development, tdd in C, c regression testing, cunit, cppunit, c unit testing frameworks, sourceforge, open source, open source framework, gnu licence, lgpl, software testing, executable specification, software requirements, quality assurance, test driven design, software decoupling
libdbi-drivers-0.9.0/tests/cgreen/doc/source/site/quickstart.xml000644 001750 001750 00000055700 11421144163 025625 0ustar00markusmarkus000000 000000 Cgreen is a unit testing framework for the C programming language

Cgreen is a unit tester for the C software developer. This is a test automation and software quality assurance tool for development teams. The tool is completely open source published under the LGPL.

Unit testing is a development practice popularised by the agile development community. It is characterised by writing many small tests alongside the normal code. Often the tests are written before the code they are testing, in a tight test-code-refactor loop. Done this way, the practice is known as Test Driven Development. Cgreen supports this style of working.

Unit tests are written in the same language as the code, in our case C. This avoids the mental overhead of constantly switching language, and also allows you to use any application code in your tests.

The feature list is:

  • Fully composable test suites.
  • setup() and teardown() for tests and test suites.
  • Each test runs in it's own process.
  • An isolated test can be run in a single process for debugging.
  • Ability to mock functions.
  • The reporting mechanism can be easily extended.
Note that this tool is for C programming, not C++.

Installing Cgreen is as simple as running make in the unzipped cgreen folder. The makefile will create a unix library called cgreen.a which can be used in conjunction with the cgreen.h header file to compile test code.

We'll first write a test to confirm everything is working. Let's start with a simple test script with no tests, called first_test.c... #include "cgreen/cgreen.h" int main(int argc, char **argv) { TestSuite *suite = create_test_suite(); return run_test_suite(suite, create_text_reporter()); } ]]> This is a very unexciting test. It just creates an empty test suite and runs it. It's usually easier to proceed in small steps, though, and this is the smallest one I could think of. The only complication is the cgreen.h header file. Here I am assuming we have symlinked the Cgreen folder into the same location as our test script, or placed the Cgreen folder in the path.

Building this test is, of course, trivial... gcc -c first_test.c gcc first_test.o cgreen/cgreen.a -o first_test ./first_test Invoking the executable should give... Running "main"... Completed "main": 0 passes, 0 failures, 0 exceptions. All of the above rather assumes you are working in a Unix like environment, probably with gcc. The code is pretty much standard C99, so any C compiler should work. Cgreen should compile on all systems that support the sys/msg.h messaging library. This has been tested on Linux and Mac OSX so far, but not Windows, although that might work too.

So far we have tested compilation, and that the test suite actually runs. Let's add a meaningless test or two so that you can see how it runs... void this_test_should_pass() { assert_true(1); } void this_test_should_fail() { assert_true(0); } int main(int argc, char **argv) { TestSuite *suite = create_test_suite(); add_test(suite, this_test_should_pass); add_test(suite, this_test_should_fail); return run_test_suite(suite, create_text_reporter()); } ]]> A test can be any function with a void (void) signature. add_test() is a macro, hence there is no & with the function pointer.

On compiling and running, we now get the output... Problem at [first_test.c] line [8] Completed "main": 1 pass, 1 failure, 0 exceptions. ]]> The TextReporter, created by the create_text_reporter() call, is the simplest way to output the test results. It just streams the failures as text. Currently it's the only method supported.

For a more realistic example we need something to test. We'll pretend that we are writing a function to split the words of a sentence in place. It does this by replacing any spaces with string terminators and returns the number of conversions plus one. Here is an example of what we have in mind... sentence should now point at . Not an obviously useful function, but we'll be using it for something more practical below.

This time around we'll add a little more structure to our tests. Rather than having the test as a stand alone program, we'll separate the runner from the test cases. That way, multiple test suites of test cases can be included in the main() runner file. This makes it less work to add more tests.

Here is the, so far empty, test case in words_test.c... TestSuite *words_tests() { TestSuite *suite = create_test_suite(); return suite; } ]]> Here is the all_tests.c test runner... add_suite(suite, words_tests()); if (argc > 1) { return run_single_test(suite, argv[1], create_text_reporter()); } return run_test_suite(suite, create_text_reporter()); } ]]> Cgreen has two ways of running tests. The default is with each test run in it's own process. This is what happens if you invoke run_test_suite(). While this makes all the tests independent, the constant fork()'ing can make the tests difficult to debug. To make debugging simpler, Cgreen does not fork() when only a single test is run by name with run_single_test().

Building this scaffolding... gcc -c words_test.c gcc -c all_tests.c gcc words_test.o all_tests.o cgreen/cgreen.a -o all_tests ...and executing the result gives the familiar... All this scaffolding is pure overhead, but from now on adding tests will be a lot easier.

Here is a first test of split_words()... #include "words.h" #include void word_count_returned_from_split() { char *sentence = strdup("Birds of a feather"); int word_count = split_words(sentence); assert_equal(word_count, 4); free(sentence); } TestSuite *words_tests() { TestSuite *suite = create_test_suite(); add_test(suite, word_count_returned_from_split); return suite; } ]]> The assert_equal() macro takes in the two values to compare. With the default TextReporter the message is sent to STDOUT.

To get this to compile we need to create the words.h header file... int split_words(char *sentence); ...and to get the code to link we need a stub function in words.c... int split_words(char *sentence) { return 0; } A full build later... gcc -c all_tests.c gcc -c words_test.c gcc -c words.c gcc all_tests.o words_test.o words.o cgreen/cgreen.a -o all_tests ./all_tests ...and we get the more useful response... word_count_returned_from_split -> [0] should match [4] at [words_test.c] line [8] Completed "main": 0 passes, 1 failure, 0 exceptions. ]]> The breadcrumb trail is the nesting of the tests. It goes from the test suites, which can nested in each other, through the test function, and finally to the message from the assertion. In the language of Cgreen, a failure is a mismatched assertion, an exception is accumulated when a test fails to complete for any reason.

We could get this to pass just by returning the value 4. Doing TDD in really small steps, you would actually do this, but frankly this example is too simple. Instead we'll go straight to the refactoring... #include int split_words(char *sentence) { int i, count = 1; for (i = 0; i < strlen(sentence); i++) { if (sentence[i] == ' ') { count++; } } return count; } ]]> There is a hidden problem here, but our tests still pass so we'll pretend we didn't notice.

Time to add another test. We want to confirm that the string is broken into separate words... void word_count_returned_from_split() { ... } void spaces_should_be_converted_to_zeroes() { char *sentence = strdup("Birds of a feather"); split_words(sentence); int comparison = memcmp("Birds\0of\0a\0feather", sentence, strlen(sentence)); assert_equal(comparison, 0); free(sentence); } TestSuite *words_tests() { TestSuite *suite = create_test_suite(); add_test(suite, word_count_returned_from_split); add_test(suite, spaces_should_be_converted_to_zeroes); return suite; } ]]> Sure enough, we get a failure... spaces_should_be_converted_to_zeroes -> [-32] should match [0] at [words_test.c] line [16] Completed "main": 1 pass, 1 failure, 0 exceptions. ]]> Not surprising given that we haven't written the code yet.

The fix... sentence[i] = '\0'; count++; } } return count; } ]]> ...reveals our previous hack... word_count_returned_from_split -> [2] should match [4] at [words_test.c] line [8] Completed "main": 1 pass, 1 failure, 0 exceptions. ]]> Our earlier test now fails, because we have affected the strlen() call in our loop. Moving the length calculation out of the loop... length = strlen(sentence); for (i = 0; i < length; i++) { ... } return count; } ]]> ...restores order... Running "main"... Completed "main": 2 passes, 0 failures, 0 exceptions. It's nice to keep the code under control while we are actually writing it, rather than debugging later when things are more complicated.

That was pretty straight forward. Let's do something more interesting.

The next example is more realistic. Still in our words.h file, we want to write a function that invokes a callback on each word in a sentence. Something like... words("This is a sentence", &act_on_word, &memo); ]]> Here the memo pointer is just some accumulated data that the act_on_word() callback is working with. Other people will write the act_on_word() function and probably many other functions like it. The callback is actually a flex point, and not of interest right now.

The function under test is the words() function and we want to make sure it walks the sentence correctly, dispatching individual words as it goes. How to test this?

Let's start with a one word sentence. In this case we would expect the callback to be invoked once with the only word, right? Here is the test for that... ... void mocked_callback(const char *word, void *memo) { mock(word, memo); } void single_word_sentence_invokes_callback_once() { expect(mocked_callback, want_string(word, "Word"), want(memo, NULL)); words("Word", &mocked_callback, NULL); } TestSuite *words_tests() { TestSuite *suite = create_test_suite(); ... add_test(suite, single_word_sentence_invokes_callback_once); return suite; } ]]> What is the funny looking mock() function?

A mock is basically a programmable object. In C objects are limited to functions, so this is a mock function. The macro mock() compares the incoming parameters with any expected values and dispatches messages to the test suite if there is a mismatch. It also returns any values that have been preprogrammed in the test.

The test function is single_word_sentence_invokes_callback_once(). Using the expect() macro it programs the mock function to expect a single call. That call will have parameters and NULL. If they don't match later, we will get a test failure.

Only the test method, not the mock callback, is added to the test suite.

For a successful compile and link, the words.h file must now look like... void words(const char *sentence, void (*walker)(const char *, void *), void *memo); ]]> ...and the words.c file should have the stub... void words(const char *sentence, void (*walker)(const char *, void *), void *memo) { } ]]> This gives us the expected failing tests... single_word_sentence_invokes_callback_once -> Call was not made to function [mocked_callback] at [words_test.c] line [25] Completed "main": 2 passes, 1 failure, 0 exceptions. ]]> Cgreen reports that the callback was never invoked. We can easily get the test to pass by filling out the implementation with... (*walker)(sentence, memo); } ]]> That is, we just invoke it once with the whole string. This is a temporary measure to get us moving. Now everything should pass, although it's not much of a test yet.

That was all pretty conventional, but let's tackle the trickier case of actually splitting the sentence. Here is the test function we will add to words_test.c... expect(mocked_callback, want_string(word, "Birds")); expect(mocked_callback, want_string(word, "of")); expect(mocked_callback, want_string(word, "a")); expect(mocked_callback, want_string(word, "feather")); words("Birds of a feather", &mocked_callback, NULL); } ]]> Each call is expected in sequence. Any failures, or left over calls, or extra calls, and we get failures. We can see all this when we run the tests... phrase_invokes_callback_for_each_word -> Wanted [Birds], but got [Birds of a feather] in function [mocked_callback] parameter [word] at [words_test.c] line [30] Failure!: words_tests -> phrase_invokes_callback_for_each_word -> Call was not made to function [mocked_callback] at [words_test.c] line [31] Failure!: words_tests -> phrase_invokes_callback_for_each_word -> Call was not made to function [mocked_callback] at [words_test.c] line [32] Failure!: words_tests -> phrase_invokes_callback_for_each_word -> Call was not made to function [mocked_callback] at [words_test.c] line [33] Completed "main": 4 passes, 4 failures, 0 exceptions. ]]> The first failure tells the story. Our little words() function called the mock callback with the entire sentence. This makes sense, because that was the hack to get to the next test.

Although not relevant to this guide, I cannot resist getting these tests to pass. Besides, we get to use the function we created earlier... char *words = strdup(sentence); int word_count = split_words(words); char *word = words; while (word_count-- > 0) { (*walker)(word, memo); word = word + strlen(word) + 1; } free(words); } ]]> And with some work we are rewarded with... More work than I like to admit as it took me three goes to get this right. I firstly forgot the + 1 added on to strlen(), then forgot to swap sentence for word in the (*walker)() call, and finally third time lucky. Of course running the tests each time made these mistakes very obvious. It's taken me far longer to write these paragraphs than it has to write the code.

SourceForge.net Logo

What is the Cgreen unit tester? Installing Cgreen and testing the installation. Test driven development example with Cgreen in 5 minutes. Interaction testing with mock functions. The Cgreen SourceForge page. Unit testing was popularised by eXtreme Programming. Cgreen is heavily influenced by the Check unit tester. unit testing, test-first, test first, code quality, automate unit testing, automated testing, c programming, c tools, c unit tests, unit testing in c, check unit tester, mock objects, mocking functions, mocks in c, test coverage, tdd in C, c regression testing, cunit, cppunit, c unit testing frameworks, open source, open source framework, gnu licence, lgpl, free software, code quality, test harness
libdbi-drivers-0.9.0/tests/cgreen/doc/source/site/CVS/Root000644 001750 001750 00000000112 11473577276 024223 0ustar00markusmarkus000000 000000 :ext:mhoenicka@libdbi-drivers.cvs.sourceforge.net:/cvsroot/libdbi-drivers libdbi-drivers-0.9.0/tests/cgreen/doc/source/site/CVS/Repository000644 001750 001750 00000000054 11473577276 025464 0ustar00markusmarkus000000 000000 libdbi-drivers/tests/cgreen/doc/source/site libdbi-drivers-0.9.0/tests/cgreen/doc/source/site/CVS/Entries000644 001750 001750 00000000312 11473577276 024713 0ustar00markusmarkus000000 000000 /cgreen_reporter.xml/1.2/Mon Jul 19 21:49:37 2010// /cgreen_suites.xml/1.2/Mon Jul 19 21:49:38 2010// /mock_callbacks.xml/1.2/Mon Jul 19 21:49:38 2010// /quickstart.xml/1.2/Mon Jul 19 21:49:39 2010// D libdbi-drivers-0.9.0/tests/cgreen/doc/source/include/CVS/000755 001750 001750 00000000000 11473577276 024042 5ustar00markusmarkus000000 000000 libdbi-drivers-0.9.0/tests/cgreen/doc/source/include/bundled_docs.xslt000644 001750 001750 00000020565 11421144157 026735 0ustar00markusmarkus000000 000000 <xsl:value-of select="//long_title"/>
|
( pages)

This page...
References and related information...
            
                
            
        
            
                
            
        
            
                
            
        
            
        

.html
  • libdbi-drivers-0.9.0/tests/cgreen/doc/source/include/bundled_map.xml000644 001750 001750 00000000400 11421144161 026345 0ustar00markusmarkus000000 000000 libdbi-drivers-0.9.0/tests/cgreen/doc/source/include/copying-fdl.xml000755 001750 001750 00000051644 11421144161 026331 0ustar00markusmarkus000000 000000 GNU Free Documentation License Version 1.1, March 2000
    Copyright (C) 2000 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
    0. PREAMBLE The purpose of this License is to make a manual, textbook, or other written document "free" in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others. This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software. We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference. 1. APPLICABILITY AND DEFINITIONS This License applies to any manual or other work that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you". A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language. A "Secondary Section" is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (For example, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them. The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, whose contents can be viewed and edited directly and straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup has been designed to thwart or discourage subsequent modification by readers is not Transparent. A copy that is not "Transparent" is called "Opaque". Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML designed for human modification. Opaque formats include PostScript, PDF, proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML produced by some word processors for output purposes only. The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, "Title Page" means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text. 2. VERBATIM COPYING You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3. You may also lend copies, under the same conditions stated above, and you may publicly display copies. 3. COPYING IN QUANTITY If you publish printed copies of the Document numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects. If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages. If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a publicly-accessible computer-network location containing a complete Transparent copy of the Document, free of added material, which the general network-using public has access to download anonymously at no charge using public-standard network protocols. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public. It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document. 4. MODIFICATIONS You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version: Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has less than five). State on the Title page the name of the publisher of the Modified Version, as the publisher. Preserve all the copyright notices of the Document. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice. Include an unaltered copy of this License. Preserve the section entitled "History", and its title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section entitled "History" in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the "History" section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission. In any section entitled "Acknowledgements" or "Dedications", preserve the section's title, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles. Delete any section entitled "Endorsements". Such a section may not be included in the Modified Version. Do not retitle any existing section as "Endorsements" or to conflict in title with any Invariant Section. If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles. You may add a section entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various parties--for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard. You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one. The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version. 5. COMBINING DOCUMENTS You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice. The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work. In the combination, you must combine any sections entitled "History" in the various original documents, forming one section entitled "History"; likewise combine any sections entitled "Acknowledgements", and any sections entitled "Dedications". You must delete all sections entitled "Endorsements." 6. COLLECTIONS OF DOCUMENTS You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects. You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document. 7. AGGREGATION WITH INDEPENDENT WORKS A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, does not as a whole count as a Modified Version of the Document, provided no compilation copyright is claimed for the compilation. Such a compilation is called an "aggregate", and this License does not apply to the other self-contained works thus compiled with the Document, on account of their being thus compiled, if they are not themselves derivative works of the Document. If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one quarter of the entire aggregate, the Document's Cover Texts may be placed on covers that surround only the Document within the aggregate. Otherwise they must appear on covers around the whole aggregate. 8. TRANSLATION Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License provided that you also include the original English version of this License. In case of a disagreement between the translation and the original English version of this License, the original English version will prevail. 9. TERMINATION You may not copy, modify, sublicense, or distribute the Document except as expressly provided for under this License. Any other attempt to copy, modify, sublicense or distribute the Document is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 10. FUTURE REVISIONS OF THIS LICENSE The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See http://www.gnu.org/copyleft/. Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation. How to use this License for your documents To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page:
    Copyright (c) YEAR YOUR NAME. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. A copy of the license is included in the section entitled "GNU Free Documentation License".
    If you have no Invariant Sections, write "with no Invariant Sections" instead of saying which ones are invariant. If you have no Front-Cover Texts, write "no Front-Cover Texts" instead of "Front-Cover Texts being LIST"; likewise for Back-Cover Texts. If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software.
    libdbi-drivers-0.9.0/tests/cgreen/doc/source/include/customfo.xsl000644 001750 001750 00000001653 11421144161 025753 0ustar00markusmarkus000000 000000 wrap \ #E0E0E0 0.5pt solid #575757 3pt libdbi-drivers-0.9.0/tests/cgreen/doc/source/include/customhtml.xsl000644 001750 001750 00000000431 11421144161 026304 0ustar00markusmarkus000000 000000 libdbi-drivers-0.9.0/tests/cgreen/doc/source/include/docs.css000644 001750 001750 00000004077 11421144161 025031 0ustar00markusmarkus000000 000000 body { padding-left: 3%; padding-right: 3%; } h1, h2, h3 { font-family: sans-serif; } h1 { text-align: center; } pre { font-family: courier, typewriter, monospace; font-size: 90%; border: 1px solid; border-color: #999966; background-color: #ffffcc; padding: 5px; margin-left: 20px; margin-right: 40px; } .code, .new_code, pre.new_code { font-family: courier, typewriter, monospace; font-weight: bold; } div.copyright { font-size: 80%; color: gray; } div.copyright a { margin-top: 1em; color: gray; } ul.api { border: 2px outset; border-color: gray; background-color: white; margin: 5px; margin-left: 5%; margin-right: 5%; } ul.api li { margin-top: 0.2em; margin-bottom: 0.2em; list-style: none; text-indent: -3em; padding-left: 1em; } div.demo { border: 4px ridge; border-color: gray; padding: 10px; margin: 5px; margin-left: 20px; margin-right: 40px; background-color: white; } div.demo span.fail { color: red; } div.demo span.pass { color: green; } div.demo h1 { font-size: 12pt; text-align: left; font-weight: bold; } div.menu { text-align: center; } table { border: 2px outset; border-color: gray; background-color: white; margin: 5px; margin-left: 5%; margin-right: 5%; } td { font-size: 90%; } .shell { color: white; } pre.shell { border: 4px ridge; border-color: gray; padding: 10px; margin: 5px; margin-left: 20px; margin-right: 40px; background-color: #000100; color: #99ff99; font-size: 90%; } pre.file { color: black; border: 1px solid; border-color: black; padding: 10px; margin: 5px; margin-left: 20px; margin-right: 40px; background-color: white; font-size: 90%; } form.demo { background-color: lightgray; border: 4px outset; border-color: lightgray; padding: 10px; margin-right: 40%; } dl, dd { margin: 10px; margin-left: 30px; } em { font-weight: bold; font-family: courier, typewriter, monospace; } libdbi-drivers-0.9.0/tests/cgreen/doc/source/include/lastcraft.xslt000644 001750 001750 00000025623 11421144161 026266 0ustar00markusmarkus000000 000000 <xsl:value-of select="//long_title"/>

    ( pages)

    This page...
    Related...
                
                    
                
            
                
                    
                
            
                
                    
                
            
                
            

    News:

    .php
  • libdbi-drivers-0.9.0/tests/cgreen/doc/source/include/site_map.xml000644 001750 001750 00000003546 11421144161 025712 0ustar00markusmarkus000000 000000 libdbi-drivers-0.9.0/tests/cgreen/doc/source/include/CVS/Root000644 001750 001750 00000000112 11473577276 024702 0ustar00markusmarkus000000 000000 :ext:mhoenicka@libdbi-drivers.cvs.sourceforge.net:/cvsroot/libdbi-drivers libdbi-drivers-0.9.0/tests/cgreen/doc/source/include/CVS/Repository000644 001750 001750 00000000057 11473577276 026146 0ustar00markusmarkus000000 000000 libdbi-drivers/tests/cgreen/doc/source/include libdbi-drivers-0.9.0/tests/cgreen/doc/source/include/CVS/Entries000644 001750 001750 00000000576 11473577276 025406 0ustar00markusmarkus000000 000000 /bundled_docs.xslt/1.2/Mon Jul 19 21:49:35 2010/-kb/ /bundled_map.xml/1.2/Mon Jul 19 21:49:37 2010// /copying-fdl.xml/1.2/Mon Jul 19 21:49:37 2010// /customfo.xsl/1.2/Mon Jul 19 21:49:37 2010// /customhtml.xsl/1.2/Mon Jul 19 21:49:37 2010// /docs.css/1.2/Mon Jul 19 21:49:37 2010/-kb/ /lastcraft.xslt/1.2/Mon Jul 19 21:49:37 2010/-kb/ /site_map.xml/1.2/Mon Jul 19 21:49:37 2010// D libdbi-drivers-0.9.0/tests/cgreen/doc/source/CVS/Root000644 001750 001750 00000000112 11473577276 023257 0ustar00markusmarkus000000 000000 :ext:mhoenicka@libdbi-drivers.cvs.sourceforge.net:/cvsroot/libdbi-drivers libdbi-drivers-0.9.0/tests/cgreen/doc/source/CVS/Repository000644 001750 001750 00000000047 11473577276 024522 0ustar00markusmarkus000000 000000 libdbi-drivers/tests/cgreen/doc/source libdbi-drivers-0.9.0/tests/cgreen/doc/source/CVS/Entries000644 001750 001750 00000000031 11530170575 023726 0ustar00markusmarkus000000 000000 D/include//// D/site//// libdbi-drivers-0.9.0/tests/cgreen/doc/CVS/Root000644 001750 001750 00000000112 11473577275 021756 0ustar00markusmarkus000000 000000 :ext:mhoenicka@libdbi-drivers.cvs.sourceforge.net:/cvsroot/libdbi-drivers libdbi-drivers-0.9.0/tests/cgreen/doc/CVS/Repository000644 001750 001750 00000000040 11473577275 023212 0ustar00markusmarkus000000 000000 libdbi-drivers/tests/cgreen/doc libdbi-drivers-0.9.0/tests/cgreen/doc/CVS/Entries000644 001750 001750 00000000310 11530170575 022426 0ustar00markusmarkus000000 000000 /cgreen-guide-en.ascii/1.2/Mon Jul 19 21:49:28 2010/-kb/ /cgreen-guide-pt_BR.ascii/1.2/Mon Jul 19 21:49:32 2010/-kb/ /doxy.config.in/1.2/Mon Jul 19 21:49:34 2010/-kb/ D/source//// D/tutorial_test//// libdbi-drivers-0.9.0/tests/cgreen/contrib/CVS/000755 001750 001750 00000000000 11530170575 021773 5ustar00markusmarkus000000 000000 libdbi-drivers-0.9.0/tests/cgreen/contrib/SCons/000755 001750 001750 00000000000 11473577275 022403 5ustar00markusmarkus000000 000000 libdbi-drivers-0.9.0/tests/cgreen/contrib/automake/000755 001750 001750 00000000000 11473577275 023164 5ustar00markusmarkus000000 000000 libdbi-drivers-0.9.0/tests/cgreen/contrib/README.contrib000644 001750 001750 00000001056 11421144147 023654 0ustar00markusmarkus000000 000000 All files under this contrib directory are UNSUPPORTED. There were provided by users of Cgreen and were not tested by the authors of Cgreen. Use at your own risk. SCons/ by Kevin Fitch Add a sample demonstrating using cgreen with SCons http://www.scons.org/ automake/ by Nuno Paiva configure.ac - commented configure.ac Makefile.am - commented Makefile.am all_tests.sh - a script for running the tests and creating some_stuff README - explains how to proceed with these files libdbi-drivers-0.9.0/tests/cgreen/contrib/automake/CVS/000755 001750 001750 00000000000 11473577275 023617 5ustar00markusmarkus000000 000000 libdbi-drivers-0.9.0/tests/cgreen/contrib/automake/Makefile.am000644 001750 001750 00000004266 11421144150 025177 0ustar00markusmarkus000000 000000 ## Process this file with automake to produce Makefile.in #libtool libraries (provides .la, .a and .so) lib_LTLIBRARIES = libcgreen.la libcgreen_la_LIBADD = -lm #for a static lib comment _la_ stuff above and uncomment _a_ stuff below #change in check target as well #lib_LIBRARIES = libcgreen.a #public headers installation in .../include/ i.e. cgreen.h into .../include/ include_HEADERS = include/cgreen/cgreen.h #so that headers other than cgreen.h are installed under .../include/cgreen/ includesdir = $(includedir)/cgreen includes_HEADERS = include/cgreen/unit.h include/cgreen/messaging.h include/cgreen/breadcrumb.h include/cgreen/reporter.h include/cgreen/assertions.h include/cgreen/vector.h include/cgreen/mocks.h include/cgreen/constraint.h include/cgreen/parameters.h include/cgreen/text_reporter.h include/cgreen/cute_reporter.h #sources for libtool libcgreen_la_SOURCES = src/assertions.c src/collector_test_list.c src/memory.c src/parameters.c src/text_reporter.c src/breadcrumb.c src/constraint.c src/messaging.c src/reporter.c src/unit.c src/cdash_reporter.c src/cute_reporter.c src/mocks.c src/slurp.c src/vector.c libcgreen_la_CPPFLAGS = -I$(srcdir)/include libcgreen_la_LDFLAGS = -version-info 1:0:0 #sources for static lib #libcgreen_a_SOURCES = src/assertions.c src/collector_test_list.c src/memory.c src/parameters.c src/text_reporter.c src/breadcrumb.c src/constraint.c src/messaging.c src/reporter.c src/unit.c src/cdash_reporter.c src/cute_reporter.c src/mocks.c src/slurp.c src/vector.c #libcgreen_a_CPPFLAGS = -I$(srcdir)/include #check target check_PROGRAMS = all_tests all_tests_SOURCES = tests/all_tests.c tests/assertion_tests.c tests/breadcrumb_tests.c tests/collector_tests.c tests/constraint_tests.c tests/cute_reporter_tests.c tests/messaging_tests.c tests/mocks_tests.c tests/parameters_test.c tests/slurp_test.c tests/unit_tests.c tests/vector_tests.c #when static lib change .la to .a all_tests_LDADD = libcgreen.la -lm #since the some_stuff file is not provided in svn repository all_tests_CPPFLAGS = -I$(srcdir)/include -I$(srcdir) -DBINARYDIR="\"$(srcdir)\"" check_SCRIPTS = all_tests.sh #run the tests when making check TESTS = all_tests.sh EXTRA_DIST = LICENSE README VERSION libdbi-drivers-0.9.0/tests/cgreen/contrib/automake/README000755 001750 001750 00000002103 11421144150 024012 0ustar00markusmarkus000000 000000 Thanks to A. Duret-Lutz for this page http://www.lrde.epita.fr/~adl/autotools.html and tutorial. Download the autotools tutorial for knowning everything you need to make it work. It's a short reading. Obviously Autotools (Autoconf, Automake, Libtool) need to be installed. Put the Makefile.am, configure.ac and all_tests.sh in the cgreen top dir (the one with src/, include/ and test/ below) This is the command sequence (commands are the lines beginning with $, being $ the prompt) Run all the tools in the right order: $ autoreconf --install In case of problems add the --force option If you don't specify --prefix and the dir after it below, stuff will be installed under /usr/local/ libs in /usr/local/lib and includes in /usr/local/include So, use just one of the following commands: $ ./configure --prefix ~/test #for installing under ~/test/ $ ./configure #for installing under /usr/local/ Now let's go! make it $ make Check it with cgreen! $ make check Finally to install the package at the location specified above with ./configure $ make install libdbi-drivers-0.9.0/tests/cgreen/contrib/automake/all_tests.sh000755 001750 001750 00000000240 11421144150 025460 0ustar00markusmarkus000000 000000 #!/bin/sh if [ -x all_tests ] then echo -n "Some stuff" > tests/some_file ./all_tests else echo "Error: must 'make check' first" exit 1 fi libdbi-drivers-0.9.0/tests/cgreen/contrib/automake/configure.ac000755 001750 001750 00000000555 11421144150 025431 0ustar00markusmarkus000000 000000 AC_INIT([cgreen] , [1.0.beta1], [bug-report@address]) AC_CONFIG_AUX_DIR([build-aux]) AM_INIT_AUTOMAKE([-Wall -Werror foreign]) #libtool (builds .la, .a and .so) AC_PROG_LIBTOOL #static lib (comment libtool and uncomment these) #AC_PROG_RANLIB AC_PROG_CC AC_CONFIG_HEADERS([config.h]) AC_CONFIG_SRCDIR([src/unit.c]) AC_CONFIG_FILES([Makefile]) AC_OUTPUT libdbi-drivers-0.9.0/tests/cgreen/contrib/automake/CVS/Root000644 001750 001750 00000000112 11473577275 024457 0ustar00markusmarkus000000 000000 :ext:mhoenicka@libdbi-drivers.cvs.sourceforge.net:/cvsroot/libdbi-drivers libdbi-drivers-0.9.0/tests/cgreen/contrib/automake/CVS/Repository000644 001750 001750 00000000055 11473577275 025721 0ustar00markusmarkus000000 000000 libdbi-drivers/tests/cgreen/contrib/automake libdbi-drivers-0.9.0/tests/cgreen/contrib/automake/CVS/Entries000644 001750 001750 00000000273 11473577275 025155 0ustar00markusmarkus000000 000000 /Makefile.am/1.2/Mon Jul 19 21:49:28 2010/-kb/ /README/1.2/Mon Jul 19 21:49:28 2010/-kb/ /all_tests.sh/1.2/Mon Jul 19 21:49:28 2010/-kb/ /configure.ac/1.2/Mon Jul 19 21:49:28 2010/-kb/ D libdbi-drivers-0.9.0/tests/cgreen/contrib/SCons/CVS/000755 001750 001750 00000000000 11473577275 023036 5ustar00markusmarkus000000 000000 libdbi-drivers-0.9.0/tests/cgreen/contrib/SCons/SConstruct000644 001750 001750 00000002357 11421144147 024421 0ustar00markusmarkus000000 000000 env = Environment() # Add the cgreen headers to the include path env.Append(CPPPATH=['../../include', ]) # Build the cgreen library cgreendir = '../../src/' cgreenfiles = """unit.c messaging.c breadcrumb.c reporter.c assertions.c vector.c mocks.c constraint.c parameters.c text_reporter.c""".split() cgreensources = ['../../src/'+f for f in cgreenfiles] cgreenlib = env.StaticLibrary('cgreen', cgreensources) #Build our code to be tested env.Append(CPPPATH=['include']) mainlib = env.StaticLibrary('main', env.Glob('src/*.c')) for test in env.Glob('tests/*.c'): testprog = env.Program(test, LIBS=[cgreenlib, mainlib]) # This is a nasty little hack here. # We run the test twice, the first time is so we can see the output on the # console, and get the results logged. Unfortunately it will not cause the # build to stop on test failures since the result of the command is the # return value of tee, not the tests. So we run it again to catch the # possibly failed return value ... those tests better be repeatable! env.Command(testprog[0].path+'.results', testprog, '$SOURCE 2>&1 | tee $TARGET') env.Command(testprog[0].path+'.results_', testprog, '$SOURCE > $TARGET 2>&1 ') libdbi-drivers-0.9.0/tests/cgreen/contrib/SCons/CVS/Root000644 001750 001750 00000000112 11473577275 023676 0ustar00markusmarkus000000 000000 :ext:mhoenicka@libdbi-drivers.cvs.sourceforge.net:/cvsroot/libdbi-drivers libdbi-drivers-0.9.0/tests/cgreen/contrib/SCons/CVS/Repository000644 001750 001750 00000000052 11473577275 025135 0ustar00markusmarkus000000 000000 libdbi-drivers/tests/cgreen/contrib/SCons libdbi-drivers-0.9.0/tests/cgreen/contrib/SCons/CVS/Entries000644 001750 001750 00000000060 11473577275 024366 0ustar00markusmarkus000000 000000 /SConstruct/1.2/Mon Jul 19 21:49:27 2010/-kb/ D libdbi-drivers-0.9.0/tests/cgreen/contrib/CVS/Root000644 001750 001750 00000000112 11473577275 022651 0ustar00markusmarkus000000 000000 :ext:mhoenicka@libdbi-drivers.cvs.sourceforge.net:/cvsroot/libdbi-drivers libdbi-drivers-0.9.0/tests/cgreen/contrib/CVS/Repository000644 001750 001750 00000000044 11473577275 024111 0ustar00markusmarkus000000 000000 libdbi-drivers/tests/cgreen/contrib libdbi-drivers-0.9.0/tests/cgreen/contrib/CVS/Entries000644 001750 001750 00000000115 11530170575 023324 0ustar00markusmarkus000000 000000 /README.contrib/1.2/Mon Jul 19 21:49:27 2010/-kb/ D/SCons//// D/automake//// libdbi-drivers-0.9.0/tests/cgreen/cmake/CVS/000755 001750 001750 00000000000 11530170575 021413 5ustar00markusmarkus000000 000000 libdbi-drivers-0.9.0/tests/cgreen/cmake/Modules/000755 001750 001750 00000000000 11473577275 022406 5ustar00markusmarkus000000 000000 libdbi-drivers-0.9.0/tests/cgreen/cmake/Modules/CVS/000755 001750 001750 00000000000 11473577275 023041 5ustar00markusmarkus000000 000000 libdbi-drivers-0.9.0/tests/cgreen/cmake/Modules/COPYING-CMAKE-SCRIPTS000644 001750 001750 00000002457 11421144146 025370 0ustar00markusmarkus000000 000000 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 copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. libdbi-drivers-0.9.0/tests/cgreen/cmake/Modules/DefineCMakeDefaults.cmake000644 001750 001750 00000001577 11421144146 027161 0ustar00markusmarkus000000 000000 # Always include srcdir and builddir in include path # This saves typing ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY} in # about every subdir # since cmake 2.4.0 set(CMAKE_INCLUDE_CURRENT_DIR ON) # Put the include dirs which are in the source or build tree # before all other include dirs, so the headers in the sources # are prefered over the already installed ones # since cmake 2.4.1 set(CMAKE_INCLUDE_DIRECTORIES_PROJECT_BEFORE ON) # Use colored output # since cmake 2.4.0 set(CMAKE_COLOR_MAKEFILE ON) # Define the generic version of the libraries here set(GENERIC_LIB_VERSION "0.1.0") set(GENERIC_LIB_SOVERSION "0") # Set the default build type to release with debug info if (NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING "Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel." ) endif (NOT CMAKE_BUILD_TYPE) libdbi-drivers-0.9.0/tests/cgreen/cmake/Modules/DefineCPackConfig.cmake000644 001750 001750 00000003514 11421144146 026611 0ustar00markusmarkus000000 000000 include(InstallRequiredSystemLibraries) # For help take a look at: # http://www.cmake.org/Wiki/CMake:CPackConfiguration ### general settings set(CPACK_PACKAGE_NAME ${APPLICATION_NAME}) set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "The simple unit testint framework") set(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_SOURCE_DIR}/README") set(CPACK_PACKAGE_VENDOR "The CGreen Development Team") set(CPACK_PACKAGE_INSTALL_DIRECTORY ${CPACK_PACKAGE_NAME}) set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/COPYING") ### versions set(CPACK_PACKAGE_VERSION_MAJOR "1") set(CPACK_PACKAGE_VERSION_MINOR "0") set(CPACK_PACKAGE_VERSION_PATCH "0-beta2") set(CPACK_PACKAGE_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}") ### source generator set(CPACK_SOURCE_GENERATOR "TGZ") set(CPACK_SOURCE_IGNORE_FILES "~$;[.]swp$;/[.]svn/;/[.]git/;.gitignore;/build/;tags;cscope.*") set(CPACK_SOURCE_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}") ### nsis generator set(CPACK_GENERATOR "NSIS") set(CPACK_PACKAGE_INSTALL_DIRECTORY "cgreen") set(CPACK_NSIS_DISPLAY_NAME "The simple unit testing framework") set(CPACK_NSIS_COMPRESSOR "/SOLID zlib") set(CPACK_NSIS_MENU_LINKS "http://www.lastcraft.com/cgreen.php" "cgreen homepage") set(CPACK_PACKAGE_FILE_NAME ${APPLICATION_NAME}-${CPACK_PACKAGE_VERSION}) set(CPACK_COMPONENT_LIBRARIES_DISPLAY_NAME "Libraries") set(CPACK_COMPONENT_HEADERS_DISPLAY_NAME "C/C++ Headers") set(CPACK_COMPONENT_LIBRARIES_DESCRIPTION "Libraries used to build programs which use cgreen") set(CPACK_COMPONENT_HEADERS_DESCRIPTION "C/C++ header files for use with cgreen") set(CPACK_COMPONENT_HEADERS_DEPENDS libraries) #set(CPACK_COMPONENT_APPLICATIONS_GROUP "Runtime") set(CPACK_COMPONENT_LIBRARIES_GROUP "Development") set(CPACK_COMPONENT_HEADERS_GROUP "Development") include(CPack) libdbi-drivers-0.9.0/tests/cgreen/cmake/Modules/DefineCompilerFlags.cmake000644 001750 001750 00000002772 11421144146 027236 0ustar00markusmarkus000000 000000 # define system dependent compiler flags include(CheckCCompilerFlag) if (USE_W32API) add_definitions(-mno-cygwin) endif (USE_W32API) if (UNIX AND NOT WIN32) # All *nix except Cygwin if (CMAKE_COMPILER_IS_GNUCC) add_definitions(-Wall -Wextra -Wmissing-prototypes -Wdeclaration-after-statement -Wunused) # with -fPIC check_c_compiler_flag("-fPIC" WITH_FPIC) if (WITH_FPIC) add_definitions(-fPIC) endif (WITH_FPIC) if (CMAKE_SIZEOF_VOID_P MATCHES "8") # with large file support execute_process( COMMAND getconf LFS64_CFLAGS OUTPUT_VARIABLE _lfs_CFLAGS ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE ) else (CMAKE_SIZEOF_VOID_P MATCHES "8") # with large file support execute_process( COMMAND getconf LFS_CFLAGS OUTPUT_VARIABLE _lfs_CFLAGS ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE ) string(REGEX REPLACE "[\r\n]" " " "${_lfs_CFLAGS}" "${${_lfs_CFLAGS}}") add_definitions(${_lfs_CFLAGS}) endif (CMAKE_SIZEOF_VOID_P MATCHES "8") check_c_compiler_flag("-fstack-protector" WITH_STACK_PROTECTOR) if (WITH_STACK_PROTECTOR) add_definitions(-fstack-protector) endif (WITH_STACK_PROTECTOR) check_c_compiler_flag("-D_FORTIFY_SOURCE=2" WITH_FORTIFY_SOURCE) if (WITH_FORTIFY_SOURCE) add_definitions(-D_FORTIFY_SOURCE=2) endif (WITH_FORTIFY_SOURCE) endif (CMAKE_COMPILER_IS_GNUCC) endif (UNIX AND NOT WIN32) libdbi-drivers-0.9.0/tests/cgreen/cmake/Modules/DefineInstallationPaths.cmake000644 001750 001750 00000007060 11421144146 030143 0ustar00markusmarkus000000 000000 if (UNIX) IF (NOT APPLICATION_NAME) MESSAGE(STATUS "${PROJECT_NAME} is used as APPLICATION_NAME") SET(APPLICATION_NAME ${PROJECT_NAME}) ENDIF (NOT APPLICATION_NAME) # Suffix for Linux SET(LIB_SUFFIX CACHE STRING "Define suffix of directory name (32/64)" ) SET(EXEC_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}" CACHE PATH "Base directory for executables and libraries" ) SET(SHARE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}/share" CACHE PATH "Base directory for files which go to share/" ) SET(DATA_INSTALL_PREFIX "${SHARE_INSTALL_PREFIX}/${APPLICATION_NAME}" CACHE PATH "The parent directory where applications can install their data") # The following are directories where stuff will be installed to SET(BIN_INSTALL_DIR "${EXEC_INSTALL_PREFIX}/bin" CACHE PATH "The ${APPLICATION_NAME} binary install dir (default prefix/bin)" ) SET(SBIN_INSTALL_DIR "${EXEC_INSTALL_PREFIX}/sbin" CACHE PATH "The ${APPLICATION_NAME} sbin install dir (default prefix/sbin)" ) SET(LIB_INSTALL_DIR "${EXEC_INSTALL_PREFIX}/lib${LIB_SUFFIX}" CACHE PATH "The subdirectory relative to the install prefix where libraries will be installed (default is prefix/lib)" ) SET(LIBEXEC_INSTALL_DIR "${EXEC_INSTALL_PREFIX}/libexec" CACHE PATH "The subdirectory relative to the install prefix where libraries will be installed (default is prefix/libexec)" ) SET(PLUGIN_INSTALL_DIR "${LIB_INSTALL_DIR}/${APPLICATION_NAME}" CACHE PATH "The subdirectory relative to the install prefix where plugins will be installed (default is prefix/lib/${APPLICATION_NAME})" ) SET(INCLUDE_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/include" CACHE PATH "The subdirectory to the header prefix (default prefix/include)" ) SET(DATA_INSTALL_DIR "${DATA_INSTALL_PREFIX}" CACHE PATH "The parent directory where applications can install their data (default prefix/share/${APPLICATION_NAME})" ) SET(HTML_INSTALL_DIR "${DATA_INSTALL_PREFIX}/doc/HTML" CACHE PATH "The HTML install dir for documentation (default data/doc/html)" ) SET(ICON_INSTALL_DIR "${DATA_INSTALL_PREFIX}/icons" CACHE PATH "The icon install dir (default data/icons/)" ) SET(SOUND_INSTALL_DIR "${DATA_INSTALL_PREFIX}/sounds" CACHE PATH "The install dir for sound files (default data/sounds)" ) SET(LOCALE_INSTALL_DIR "${SHARE_INSTALL_PREFIX}/locale" CACHE PATH "The install dir for translations (default prefix/share/locale)" ) SET(XDG_APPS_DIR "${SHARE_INSTALL_PREFIX}/applications/" CACHE PATH "The XDG apps dir" ) SET(XDG_DIRECTORY_DIR "${SHARE_INSTALL_PREFIX}/desktop-directories" CACHE PATH "The XDG directory" ) SET(SYSCONF_INSTALL_DIR "${EXEC_INSTALL_PREFIX}/etc" CACHE PATH "The ${APPLICATION_NAME} sysconfig install dir (default prefix/etc)" ) SET(MAN_INSTALL_DIR "${SHARE_INSTALL_PREFIX}/man" CACHE PATH "The ${APPLICATION_NAME} man install dir (default prefix/man)" ) SET(INFO_INSTALL_DIR "${SHARE_INSTALL_PREFIX}/info" CACHE PATH "The ${APPLICATION_NAME} info install dir (default prefix/info)" ) endif (UNIX) if (WIN32) # Same same set(BIN_INSTALL_DIR "." CACHE PATH "-") set(SBIN_INSTALL_DIR "." CACHE PATH "-") set(LIB_INSTALL_DIR "lib" CACHE PATH "-") set(INCLUDE_INSTALL_DIR "include" CACHE PATH "-") set(PLUGIN_INSTALL_DIR "plugins" CACHE PATH "-") set(HTML_INSTALL_DIR "doc/HTML" CACHE PATH "-") set(ICON_INSTALL_DIR "." CACHE PATH "-") set(SOUND_INSTALL_DIR "." CACHE PATH "-") set(LOCALE_INSTALL_DIR "lang" CACHE PATH "-") endif (WIN32) libdbi-drivers-0.9.0/tests/cgreen/cmake/Modules/FindAsciidoc.cmake000644 001750 001750 00000001705 11421144146 025706 0ustar00markusmarkus000000 000000 # - Find Asciidoc # this module looks for asciidoc and a2x # # ASCIIDOC_EXECUTABLE - the full path to asciidoc # ASCIIDOC_FOUND - If false, don't attempt to use asciidoc. # A2X_EXECUTABLE - the full path to a2x # A2X_FOUND - If false, don't attempt to use a2x. FIND_PROGRAM(ASCIIDOC_EXECUTABLE asciidoc ) MARK_AS_ADVANCED( ASCIIDOC_EXECUTABLE ) IF (NOT ASCIIDOC_EXECUTABLE) SET(ASCIIDOC_FOUND "NO") ELSE (NOT ASCIIDOC_EXECUTABLE) SET(ASCIIDOC_FOUND "YES") ENDIF (NOT ASCIIDOC_EXECUTABLE) IF (NOT ASCIIDOC_FOUND AND Asciidoc_FIND_REQUIRED) MESSAGE(FATAL_ERROR "Could not find asciidoc") ENDIF (NOT ASCIIDOC_FOUND AND Asciidoc_FIND_REQUIRED) FIND_PROGRAM(A2X_EXECUTABLE a2x ) MARK_AS_ADVANCED( A2X_EXECUTABLE ) IF (NOT A2X_EXECUTABLE) SET(A2X_FOUND "NO") ELSE (NOT A2X_EXECUTABLE) SET(A2X_FOUND "YES") ENDIF (NOT A2X_EXECUTABLE) IF (NOT A2X_FOUND AND A2x_FIND_REQUIRED) MESSAGE(FATAL_ERROR "Could not find a2x") ENDIF (NOT A2X_FOUND AND A2x_FIND_REQUIRED) libdbi-drivers-0.9.0/tests/cgreen/cmake/Modules/FindFLEX.cmake000644 001750 001750 00000013472 11421144146 024732 0ustar00markusmarkus000000 000000 # - Find flex executable and provides a macro to generate custom build rules # The module defines the following variables: # FLEX_FOUND - true is flex executable is found # FLEX_VERSION - the version of flex # If flex is found on the system, the module provides the macro: # FLEX_TARGET(Name FlexInput FlexOutput [COMPILE_FLAGS ]) # which creates a custom command to generate the file from # the file. If COMPILE_FLAGS option is specified, the next # parameter is added to the flex command line. Name is an alias used to # get details of this custom command. Indeed the macro defines the # following variables: # FLEX_${Name}_DEFINED - true is the macro ran successfully # FLEX_${Name}_OUTPUTS - the source file generated by the custom rule, an # alias for FlexOutput # FLEX_${Name}_INPUT - the flex source file, an alias for ${FlexInput} # # Flex scanners oftenly use tokens defined by Bison: the code generated # by Flex depends of the header generated by Bison. This module also # defines a macro: # ADD_FLEX_BISON_DEPENDENCY(FlexTarget BisonTarget) # which adds the required dependency between a scanner and a parser # where and are the first parameters of # respectively FLEX_TARGET and BISON_TARGET macros. # # Example: # FIND_PACKAGE(BISON) # FIND_PACKAGE(FLEX) # BISON_TARGET(MyParser parser.y ${PROJECT_BINARY_DIR}/parser.cpp # FLEX_TARGET(MyScanner lexer.l ${PROJECT_BINARY_DIR}/lexer.cpp) # ADD_FLEX_BISON_DEPENDENCY(MyScanner MyParser) # # Copyright (c) 2006, Tristan Carel # All rights reserved. # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # * 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. # * Neither the name of the University of California, Berkeley 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 AND 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. # $Id:: FindFLEX.cmake 3 2006-11-03 02:42:02Z ken $ SET(FLEX_FOUND FALSE) FIND_PROGRAM(FLEX_EXECUTABLE flex DOC "path to the flex executable") MARK_AS_ADVANCED(FLEX_EXECUTABLE) FIND_LIBRARY(FL_LIBRARY NAMES fl PATHS /usr/lib DOC "path to the fl library") SET(FLEX_LIBRARIES ${FL_LIBRARY}) IF(FLEX_EXECUTABLE) SET(FLEX_FOUND TRUE) EXECUTE_PROCESS(COMMAND ${FLEX_EXECUTABLE} --version OUTPUT_VARIABLE FLEX_version_output ERROR_VARIABLE FLEX_version_error RESULT_VARIABLE FLEX_version_result OUTPUT_STRIP_TRAILING_WHITESPACE) IF(NOT ${FLEX_version_result} EQUAL 0) MESSAGE(SEND_ERROR "Command \"${FLEX_EXECUTABLE} --version\" failed with output:\n${FLEX_version_error}") ELSE(NOT ${FLEX_version_result} EQUAL 0) STRING(REGEX REPLACE "^flex (.*)$" "\\1" FLEX_VERSION "${FLEX_version_output}") ENDIF(NOT ${FLEX_version_result} EQUAL 0) MACRO(FLEX_TARGET Name Input Output) SET(FLEX_TARGET_usage "FLEX_TARGET( [COMPILE_FLAGS ]") IF(${ARGC} GREATER 3) IF(${ARGC} EQUAL 5) IF("${ARGV3}" STREQUAL "COMPILE_FLAGS") SET(FLEX_EXECUTABLE_opts "${ARGV4}") SEPARATE_ARGUMENTS(FLEX_EXECUTABLE_opts) ELSE("${ARGV3}" STREQUAL "COMPILE_FLAGS") MESSAGE(SEND_ERROR ${FLEX_TARGET_usage}) ENDIF("${ARGV3}" STREQUAL "COMPILE_FLAGS") ELSE(${ARGC} EQUAL 5) MESSAGE(SEND_ERROR ${FLEX_TARGET_usage}) ENDIF(${ARGC} EQUAL 5) ENDIF(${ARGC} GREATER 3) ADD_CUSTOM_COMMAND(OUTPUT ${Output} COMMAND ${FLEX_EXECUTABLE} ${FLEX_EXECUTABLE_opts} -o${Output} ${Input} DEPENDS ${Input} COMMENT "[FLEX][${Name}] Building scanner with flex ${FLEX_VERSION}" WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) SET(FLEX_${Name}_DEFINED TRUE) SET(FLEX_${Name}_OUTPUTS ${Output}) SET(FLEX_${Name}_INPUT ${Input}) SET(FLEX_${Name}_COMPILE_FLAGS ${FLEX_EXECUTABLE_opts}) ENDMACRO(FLEX_TARGET) MACRO(ADD_FLEX_BISON_DEPENDENCY FlexTarget BisonTarget) IF(NOT FLEX_${FlexTarget}_OUTPUTS) MESSAGE(SEND_ERROR "Flex target `${FlexTarget}' does not exists.") ENDIF(NOT FLEX_${FlexTarget}_OUTPUTS) IF(NOT BISON_${BisonTarget}_OUTPUT_HEADER) MESSAGE(SEND_ERROR "Bison target `${BisonTarget}' does not exists.") ENDIF(NOT BISON_${BisonTarget}_OUTPUT_HEADER) SET_SOURCE_FILES_PROPERTIES(${FLEX_${FlexTarget}_OUTPUTS} PROPERTIES OBJECT_DEPENDS ${BISON_${BisonTarget}_OUTPUT_HEADER}) ENDMACRO(ADD_FLEX_BISON_DEPENDENCY) ENDIF(FLEX_EXECUTABLE) IF(NOT FLEX_FOUND) IF(NOT FLEX_FIND_QUIETLY) MESSAGE(STATUS "FLEX was not found.") ELSE(NOT FLEX_FIND_QUIETLY) IF(FLEX_FIND_REQUIRED) MESSAGE(FATAL_ERROR "FLEX was not found.") ENDIF(FLEX_FIND_REQUIRED) ENDIF(NOT FLEX_FIND_QUIETLY) ENDIF(NOT FLEX_FOUND) # FindFLEX.cmake ends here libdbi-drivers-0.9.0/tests/cgreen/cmake/Modules/MacroAddCompileFlags.cmake000644 001750 001750 00000001167 11421144146 027331 0ustar00markusmarkus000000 000000 # - MACRO_ADD_COMPILE_FLAGS(target_name flag1 ... flagN) # Copyright (c) 2006, Oswald Buddenhagen, # Copyright (c) 2006, Andreas Schneider, # # Redistribution and use is allowed according to the terms of the BSD license. # For details see the accompanying COPYING-CMAKE-SCRIPTS file. macro (MACRO_ADD_COMPILE_FLAGS _target) get_target_property(_flags ${_target} COMPILE_FLAGS) if (_flags) set(_flags ${_flags} ${ARGN}) else (_flags) set(_flags ${ARGN}) endif (_flags) set_target_properties(${_target} PROPERTIES COMPILE_FLAGS ${_flags}) endmacro (MACRO_ADD_COMPILE_FLAGS) libdbi-drivers-0.9.0/tests/cgreen/cmake/Modules/MacroAddLinkFlags.cmake000644 001750 001750 00000001155 11421144146 026633 0ustar00markusmarkus000000 000000 # - MACRO_ADD_LINK_FLAGS(target_name flag1 ... flagN) # Copyright (c) 2006, Oswald Buddenhagen, # Copyright (c) 2006, Andreas Schneider, # # Redistribution and use is allowed according to the terms of the BSD license. # For details see the accompanying COPYING-CMAKE-SCRIPTS file. macro (MACRO_ADD_LINK_FLAGS _target) get_target_property(_flags ${_target} LINK_FLAGS) if (_flags) set(_flags "${_flags} ${ARGN}") else (_flags) set(_flags "${ARGN}") endif (_flags) set_target_properties(${_target} PROPERTIES LINK_FLAGS "${_flags}") endmacro (MACRO_ADD_LINK_FLAGS) libdbi-drivers-0.9.0/tests/cgreen/cmake/Modules/MacroAddPlugin.cmake000644 001750 001750 00000001741 11421144146 026220 0ustar00markusmarkus000000 000000 # - MACRO_ADD_PLUGIN(name [WITH_PREFIX] file1 .. fileN) # # Create a plugin from the given source files. # If WITH_PREFIX is given, the resulting plugin will have the # prefix "lib", otherwise it won't. # # Copyright (c) 2006, Alexander Neundorf, # Copyright (c) 2006, Laurent Montel, # Copyright (c) 2006, Andreas Schneider, # # Redistribution and use is allowed according to the terms of the BSD license. # For details see the accompanying COPYING-CMAKE-SCRIPTS file. macro (MACRO_ADD_PLUGIN _target_NAME _with_PREFIX) if (${_with_PREFIX} STREQUAL "WITH_PREFIX") set(_first_SRC) else (${_with_PREFIX} STREQUAL "WITH_PREFIX") set(_first_SRC ${_with_PREFIX}) endif (${_with_PREFIX} STREQUAL "WITH_PREFIX") add_library(${_target_NAME} MODULE ${_first_SRC} ${ARGN}) if (_first_SRC) set_target_properties(${_target_NAME} PROPERTIES PREFIX "") endif (_first_SRC) endmacro (MACRO_ADD_PLUGIN _name _sources) libdbi-drivers-0.9.0/tests/cgreen/cmake/Modules/MacroAddUnitTest.cmake000644 001750 001750 00000002532 11421144146 026540 0ustar00markusmarkus000000 000000 # - MACRO_ADD_UNIT_TEST(test_name test_source linklib1 ... linklibN) # Copyright (c) 2007, Daniel Gollub, # Copyright (c) 2007, Andreas Schneider, # # Redistribution and use is allowed according to the terms of the BSD license. # For details see the accompanying COPYING-CMAKE-SCRIPTS file. enable_testing() include(CTest) set(CMAKE_C_FLAGS_PROFILING "-g -O0 -Wall -W -Wshadow -Wunused-variable -Wunused-parameter -Wunused-function -Wunused -Wno-system-headers -Wwrite-strings -fprofile-arcs -ftest-coverage" CACHE STRING "Profiling Compiler Flags") set(CMAKE_SHARED_LINKER_FLAGS_PROFILING " -fprofile-arcs -ftest-coverage" CACHE STRING "Profiling Linker Flags") set(CMAKE_MODULE_LINKER_FLAGS_PROFILING " -fprofile-arcs -ftest-coverage" CACHE STRING "Profiling Linker Flags") set(CMAKE_EXEC_LINKER_FLAGS_PROFILING " -fprofile-arcs -ftest-coverage" CACHE STRING "Profiling Linker Flags") # custom options configure_file(tests/CTestCustom.cmake ${CMAKE_BINARY_DIR}/CTestCustom.cmake COPYONLY) macro (MACRO_ADD_UNIT_TEST _testName _testSource) add_executable(${_testName} ${_testSource}) target_link_libraries(${_testName} ${ARGN}) if (WIN32) add_test(${_testName} ${EXECUTABLE_OUTPUT_PATH}/${_testName}) else() add_test(${_testName} ${CMAKE_CURRENT_BINARY_DIR}/${_testName}) endif (WIN32) endmacro (MACRO_ADD_UNIT_TEST) libdbi-drivers-0.9.0/tests/cgreen/cmake/Modules/MacroCopyFile.cmake000644 001750 001750 00000002157 11421144146 026065 0ustar00markusmarkus000000 000000 # - macro_copy_file(_src _dst) # Copies a file to ${_dst} only if ${_src} is different (newer) than ${_dst} # # Example: # macro_copy_file(${CMAKE_CURRENT_SOURCE_DIR}/icon.png ${CMAKE_CURRENT_BINARY_DIR}/.) # Copies file icon.png to ${CMAKE_CURRENT_BINARY_DIR} directory # # Copyright (c) 2006-2007 Wengo # Copyright (c) 2006-2008 Andreas Schneider # # Redistribution and use is allowed according to the terms of the BSD license. # For details see the accompanying COPYING file. macro (macro_copy_file _src _dst) # Removes all path containing .svn or CVS or CMakeLists.txt during the copy if (NOT ${_src} MATCHES ".*\\.svn|CVS|CMakeLists\\.txt.*") if (CMAKE_VERBOSE_MAKEFILE) message(STATUS "Copy file from ${_src} to ${_dst}") endif (CMAKE_VERBOSE_MAKEFILE) # Creates directory if necessary get_filename_component(_path ${_dst} PATH) file(MAKE_DIRECTORY ${_path}) execute_process( COMMAND ${CMAKE_COMMAND} -E copy_if_different ${_src} ${_dst} OUTPUT_QUIET ) endif (NOT ${_src} MATCHES ".*\\.svn|CVS|CMakeLists\\.txt.*") endmacro (macro_copy_file) libdbi-drivers-0.9.0/tests/cgreen/cmake/Modules/MacroEnsureOutOfSourceBuild.cmake000644 001750 001750 00000001227 11421144146 030727 0ustar00markusmarkus000000 000000 # - MACRO_ENSURE_OUT_OF_SOURCE_BUILD() # MACRO_ENSURE_OUT_OF_SOURCE_BUILD() # Copyright (c) 2006, Alexander Neundorf, # # Redistribution and use is allowed according to the terms of the BSD license. # For details see the accompanying COPYING-CMAKE-SCRIPTS file. macro (MACRO_ENSURE_OUT_OF_SOURCE_BUILD _errorMessage) string(COMPARE EQUAL "${CMAKE_SOURCE_DIR}" "${CMAKE_BINARY_DIR}" _insource) if (_insource) message(SEND_ERROR "${_errorMessage}") message(FATAL_ERROR "Remove the file CMakeCache.txt in ${CMAKE_SOURCE_DIR} first.") endif (_insource) endmacro (MACRO_ENSURE_OUT_OF_SOURCE_BUILD) libdbi-drivers-0.9.0/tests/cgreen/cmake/Modules/UseDoxygen.cmake000644 001750 001750 00000012714 11421144146 025463 0ustar00markusmarkus000000 000000 # -helper macro to add a "doc" target with CMake build system. # and configure doxy.config.in to doxy.config # # target "doc" allows building the documentation with doxygen/dot on WIN32 and Linux # Creates .chm windows help file if MS HTML help workshop # (available from http://msdn.microsoft.com/workshop/author/htmlhelp) # is installed with its DLLs in PATH. # # # Please note, that the tools, e.g.: # doxygen, dot, latex, dvips, makeindex, gswin32, etc. # must be in path. # # Note about Visual Studio Projects: # MSVS has its own path environment which may differ from the shell. # See "Menu Tools/Options/Projects/VC++ Directories" in VS 7.1 # # author Jan Woetzel 2004-2006 # www.mip.informatik.uni-kiel.de/~jw FIND_PACKAGE(Doxygen) IF (DOXYGEN_FOUND) # click+jump in Emacs and Visual Studio (for doxy.config) (jw) IF (CMAKE_BUILD_TOOL MATCHES "(msdev|devenv)") SET(DOXY_WARN_FORMAT "\"$file($line) : $text \"") ELSE (CMAKE_BUILD_TOOL MATCHES "(msdev|devenv)") SET(DOXY_WARN_FORMAT "\"$file:$line: $text \"") ENDIF (CMAKE_BUILD_TOOL MATCHES "(msdev|devenv)") # we need latex for doxygen because of the formulas FIND_PACKAGE(LATEX) IF (NOT LATEX_COMPILER) MESSAGE(STATUS "latex command LATEX_COMPILER not found but usually required. You will probably get warnings and user inetraction on doxy run.") ENDIF (NOT LATEX_COMPILER) IF (NOT MAKEINDEX_COMPILER) MESSAGE(STATUS "makeindex command MAKEINDEX_COMPILER not found but usually required.") ENDIF (NOT MAKEINDEX_COMPILER) IF (NOT DVIPS_CONVERTER) MESSAGE(STATUS "dvips command DVIPS_CONVERTER not found but usually required.") ENDIF (NOT DVIPS_CONVERTER) FIND_PROGRAM(DOXYGEN_DOT_EXECUTABLE_PATH NAMES dot) IF (DOXYGEN_DOT_EXECUTABLE_PATH) SET(DOXYGEN_DOT_FOUND "YES") ENDIF (DOXYGEN_DOT_EXECUTABLE_PATH) IF (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/doxy.config.in") MESSAGE(STATUS "Generate ${CMAKE_CURRENT_BINARY_DIR}/doxy.config from doxy.config.in") CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/doxy.config.in ${CMAKE_CURRENT_BINARY_DIR}/doxy.config @ONLY ) # use (configured) doxy.config from (out of place) BUILD tree: SET(DOXY_CONFIG "${CMAKE_CURRENT_BINARY_DIR}/doxy.config") ELSE (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/doxy.config.in") # use static hand-edited doxy.config from SOURCE tree: SET(DOXY_CONFIG "${CMAKE_CURRENT_SOURCE_DIR}/doxy.config") IF (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/doxy.config") MESSAGE(STATUS "WARNING: using existing ${CMAKE_CURRENT_SOURCE_DIR}/doxy.config instead of configuring from doxy.config.in file.") ELSE (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/doxy.config") IF (EXISTS "${CMAKE_MODULE_PATH}/doxy.config.in") # using template doxy.config.in MESSAGE(STATUS "Generate ${CMAKE_CURRENT_BINARY_DIR}/doxy.config from doxy.config.in") CONFIGURE_FILE(${CMAKE_MODULE_PATH}/doxy.config.in ${CMAKE_CURRENT_BINARY_DIR}/doxy.config @ONLY ) SET(DOXY_CONFIG "${CMAKE_CURRENT_BINARY_DIR}/doxy.config") ELSE (EXISTS "${CMAKE_MODULE_PATH}/doxy.config.in") # failed completely... MESSAGE(SEND_ERROR "Please create ${CMAKE_CURRENT_SOURCE_DIR}/doxy.config.in (or doxy.config as fallback)") ENDIF(EXISTS "${CMAKE_MODULE_PATH}/doxy.config.in") ENDIF(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/doxy.config") ENDIF(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/doxy.config.in") ADD_CUSTOM_TARGET(doc ${DOXYGEN_EXECUTABLE} ${DOXY_CONFIG} DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/doxy.config) # create a windows help .chm file using hhc.exe # HTMLHelp DLL must be in path! # fallback: use hhw.exe interactively IF (WIN32) FIND_PACKAGE(HTMLHelp) IF (HTML_HELP_COMPILER) SET (TMP "${CMAKE_CURRENT_BINARY_DIR}\\doc\\html\\index.hhp") STRING(REGEX REPLACE "[/]" "\\\\" HHP_FILE ${TMP} ) # MESSAGE(SEND_ERROR "DBG HHP_FILE=${HHP_FILE}") ADD_CUSTOM_TARGET(winhelp ${HTML_HELP_COMPILER} ${HHP_FILE}) ADD_DEPENDENCIES (winhelp doc) IF (NOT TARGET_DOC_SKIP_INSTALL) # install windows help? # determine useful name for output file # should be project and version unique to allow installing # multiple projects into one global directory IF (EXISTS "${PROJECT_BINARY_DIR}/doc/html/index.chm") IF (PROJECT_NAME) SET(OUT "${PROJECT_NAME}") ELSE (PROJECT_NAME) SET(OUT "Documentation") # default ENDIF(PROJECT_NAME) IF (${PROJECT_NAME}_VERSION_MAJOR) SET(OUT "${OUT}-${${PROJECT_NAME}_VERSION_MAJOR}") IF (${PROJECT_NAME}_VERSION_MINOR) SET(OUT "${OUT}.${${PROJECT_NAME}_VERSION_MINOR}") IF (${PROJECT_NAME}_VERSION_PATCH) SET(OUT "${OUT}.${${PROJECT_NAME}_VERSION_PATCH}") ENDIF(${PROJECT_NAME}_VERSION_PATCH) ENDIF(${PROJECT_NAME}_VERSION_MINOR) ENDIF(${PROJECT_NAME}_VERSION_MAJOR) # keep suffix SET(OUT "${OUT}.chm") #MESSAGE("DBG ${PROJECT_BINARY_DIR}/doc/html/index.chm \n${OUT}") # create target used by install and package commands INSTALL(FILES "${PROJECT_BINARY_DIR}/doc/html/index.chm" DESTINATION "doc" RENAME "${OUT}" ) ENDIF(EXISTS "${PROJECT_BINARY_DIR}/doc/html/index.chm") ENDIF(NOT TARGET_DOC_SKIP_INSTALL) ENDIF(HTML_HELP_COMPILER) # MESSAGE(SEND_ERROR "HTML_HELP_COMPILER=${HTML_HELP_COMPILER}") ENDIF (WIN32) ENDIF(DOXYGEN_FOUND) libdbi-drivers-0.9.0/tests/cgreen/cmake/Modules/CVS/Root000644 001750 001750 00000000112 11473577275 023701 0ustar00markusmarkus000000 000000 :ext:mhoenicka@libdbi-drivers.cvs.sourceforge.net:/cvsroot/libdbi-drivers libdbi-drivers-0.9.0/tests/cgreen/cmake/Modules/CVS/Repository000644 001750 001750 00000000052 11473577275 025140 0ustar00markusmarkus000000 000000 libdbi-drivers/tests/cgreen/cmake/Modules libdbi-drivers-0.9.0/tests/cgreen/cmake/Modules/CVS/Entries000644 001750 001750 00000001456 11473577275 024403 0ustar00markusmarkus000000 000000 /COPYING-CMAKE-SCRIPTS/1.2/Mon Jul 19 21:49:26 2010/-kb/ /DefineCMakeDefaults.cmake/1.2/Mon Jul 19 21:49:26 2010/-kb/ /DefineCPackConfig.cmake/1.2/Mon Jul 19 21:49:26 2010// /DefineCompilerFlags.cmake/1.2/Mon Jul 19 21:49:26 2010/-kb/ /DefineInstallationPaths.cmake/1.2/Mon Jul 19 21:49:26 2010/-kb/ /FindAsciidoc.cmake/1.2/Mon Jul 19 21:49:26 2010// /FindFLEX.cmake/1.2/Mon Jul 19 21:49:26 2010/-kb/ /MacroAddCompileFlags.cmake/1.2/Mon Jul 19 21:49:26 2010/-kb/ /MacroAddLinkFlags.cmake/1.2/Mon Jul 19 21:49:26 2010/-kb/ /MacroAddPlugin.cmake/1.2/Mon Jul 19 21:49:26 2010/-kb/ /MacroAddUnitTest.cmake/1.2/Mon Jul 19 21:49:26 2010/-kb/ /MacroCopyFile.cmake/1.2/Mon Jul 19 21:49:26 2010/-kb/ /MacroEnsureOutOfSourceBuild.cmake/1.2/Mon Jul 19 21:49:26 2010/-kb/ /UseDoxygen.cmake/1.2/Mon Jul 19 21:49:26 2010/-kb/ D libdbi-drivers-0.9.0/tests/cgreen/cmake/CVS/Root000644 001750 001750 00000000112 11473577275 022271 0ustar00markusmarkus000000 000000 :ext:mhoenicka@libdbi-drivers.cvs.sourceforge.net:/cvsroot/libdbi-drivers libdbi-drivers-0.9.0/tests/cgreen/cmake/CVS/Repository000644 001750 001750 00000000042 11473577275 023527 0ustar00markusmarkus000000 000000 libdbi-drivers/tests/cgreen/cmake libdbi-drivers-0.9.0/tests/cgreen/cmake/CVS/Entries000644 001750 001750 00000000016 11530170575 022744 0ustar00markusmarkus000000 000000 D/Modules//// libdbi-drivers-0.9.0/tests/cgreen/src/unit.c000644 001750 001750 00000020012 11421144170 021574 0ustar00markusmarkus000000 000000 #include #include #include #include #include #include #include #include #include #include #include enum {test_function, test_suite}; typedef void (*sighandler_t)(int); typedef struct { int type; union { void (*test)(); TestSuite *suite; } sPtr; char *name; } UnitTest; struct TestSuite_ { const char *name; UnitTest *tests; void (*setup)(); void (*teardown)(); int size; }; static void clean_up_test_run(TestSuite *suite, TestReporter *reporter); static void run_every_test(TestSuite *suite, TestReporter *reporter); static void run_named_test(TestSuite *suite, char *name, TestReporter *reporter); static int has_test(TestSuite *suite, char *name); static void run_test_in_the_current_process(TestSuite *suite, UnitTest *test, TestReporter *reporter); static void run_test_in_its_own_process(TestSuite *suite, UnitTest *test, TestReporter *reporter); static int in_child_process(); static void wait_for_child_process(); static void ignore_ctrl_c(); static void allow_ctrl_c(); static void stop(); static void run_the_test_code(TestSuite *suite, UnitTest *test, TestReporter *reporter); static void tally_counter(const char *file, int line, int expected, int actual, void *abstract_reporter); static void die(const char *message, ...); static void do_nothing(); TestSuite *create_named_test_suite(const char *name) { TestSuite *suite = (TestSuite *)malloc(sizeof(TestSuite)); suite->name = name; suite->tests = NULL; suite->setup = &do_nothing; suite->teardown = &do_nothing; suite->size = 0; return suite; } void destroy_test_suite(TestSuite *suiteToDestroy) { int i; for (i = 0; i < suiteToDestroy->size; i++) { UnitTest test = suiteToDestroy->tests[i]; TestSuite* suite = test.sPtr.suite; if (test_suite == test.type && suite != NULL) { suiteToDestroy->tests[i].sPtr.suite = NULL; destroy_test_suite(suite); } } if (suiteToDestroy->tests != NULL) free(suiteToDestroy->tests); free(suiteToDestroy); } void add_test_(TestSuite *suite, char *name, CgreenTest *test) { suite->size++; suite->tests = (UnitTest *)realloc(suite->tests, sizeof(UnitTest) * suite->size); suite->tests[suite->size - 1].type = test_function; suite->tests[suite->size - 1].name = name; suite->tests[suite->size - 1].sPtr.test = test; } void add_tests_(TestSuite *suite, const char *names, ...) { CgreenVector *test_names = create_vector_of_names(names); int i; va_list tests; va_start(tests, names); for (i = 0; i < cgreen_vector_size(test_names); i++) { add_test_(suite, (char *)cgreen_vector_get(test_names, i), va_arg(tests, CgreenTest *)); } va_end(tests); destroy_cgreen_vector(test_names); } void add_suite_(TestSuite *owner, char *name, TestSuite *suite) { owner->size++; owner->tests = (UnitTest *)realloc(owner->tests, sizeof(UnitTest) * owner->size); owner->tests[owner->size - 1].type = test_suite; owner->tests[owner->size - 1].name = name; owner->tests[owner->size - 1].sPtr.suite = suite; } void setup_(TestSuite *suite, void (*setup)()) { suite->setup = setup; } void teardown_(TestSuite *suite, void (*teardown)()) { suite->teardown = teardown; } void die_in(unsigned int seconds) { signal(SIGALRM, (sighandler_t)&stop); alarm(seconds); } int count_tests(TestSuite *suite) { int count = 0; int i; for (i = 0; i < suite->size; i++) { if (suite->tests[i].type == test_function) { count++; } else { count += count_tests(suite->tests[i].sPtr.suite); } } return count; } int run_test_suite(TestSuite *suite, TestReporter *reporter) { setup_reporting(reporter); run_every_test(suite, reporter); int success = (reporter->failures == 0); clean_up_test_run(suite, reporter); return success ? EXIT_SUCCESS : EXIT_FAILURE; } int run_single_test(TestSuite *suite, char *name, TestReporter *reporter) { setup_reporting(reporter); run_named_test(suite, name, reporter); int success = (reporter->failures == 0); clean_up_test_run(suite, reporter); return success ? EXIT_SUCCESS : EXIT_FAILURE; } static void clean_up_test_run(TestSuite *suite, TestReporter *reporter) { (*reporter->destroy)(reporter); destroy_test_suite(suite); } static void run_every_test(TestSuite *suite, TestReporter *reporter) { (*reporter->start_suite)(reporter, suite->name, count_tests(suite)); int i; for (i = 0; i < suite->size; i++) { if (suite->tests[i].type == test_function) { run_test_in_its_own_process(suite, &(suite->tests[i]), reporter); } else { (*suite->setup)(); run_every_test(suite->tests[i].sPtr.suite, reporter); (*suite->teardown)(); } } send_reporter_completion_notification(reporter); (*reporter->finish_suite)(reporter, suite->name); } static void run_named_test(TestSuite *suite, char *name, TestReporter *reporter) { (*reporter->start_suite)(reporter, suite->name, count_tests(suite)); int i; for (i = 0; i < suite->size; i++) { if (suite->tests[i].type == test_function) { if (strcmp(suite->tests[i].name, name) == 0) { run_test_in_the_current_process(suite, &(suite->tests[i]), reporter); } } else if (has_test(suite->tests[i].sPtr.suite, name)) { (*suite->setup)(); run_named_test(suite->tests[i].sPtr.suite, name, reporter); (*suite->teardown)(); } } send_reporter_completion_notification(reporter); (*reporter->finish_suite)(reporter, suite->name); } static int has_test(TestSuite *suite, char *name) { int i; for (i = 0; i < suite->size; i++) { if (suite->tests[i].type == test_function) { if (strcmp(suite->tests[i].name, name) == 0) { return 1; } } else if (has_test(suite->tests[i].sPtr.suite, name)) { return 1; } } return 0; } static void run_test_in_the_current_process(TestSuite *suite, UnitTest *test, TestReporter *reporter) { (*reporter->start_test)(reporter, test->name); run_the_test_code(suite, test, reporter); send_reporter_completion_notification(reporter); (*reporter->finish_test)(reporter, test->name); } static void run_test_in_its_own_process(TestSuite *suite, UnitTest *test, TestReporter *reporter) { (*reporter->start_test)(reporter, test->name); if (in_child_process()) { run_the_test_code(suite, test, reporter); send_reporter_completion_notification(reporter); stop(); } else { wait_for_child_process(); (*reporter->finish_test)(reporter, test->name); } } static int in_child_process() { pid_t child = fork(); if (child < 0) { die("Could not fork process\n"); } return ! child; } static void wait_for_child_process() { int status; ignore_ctrl_c(); wait(&status); allow_ctrl_c(); } static void ignore_ctrl_c() { signal(SIGINT, SIG_IGN); } static void allow_ctrl_c() { signal(SIGINT, SIG_DFL); } static void stop() { exit(EXIT_SUCCESS); } static void run_the_test_code(TestSuite *suite, UnitTest *test, TestReporter *reporter) { significant_figures_for_assert_double_are(8); clear_mocks(); (*suite->setup)(); (*test->sPtr.test)(); (*suite->teardown)(); tally_mocks(reporter); } static void tally_counter(const char *file, int line, int expected, int actual, void *abstract_reporter) { TestReporter *reporter = (TestReporter *)abstract_reporter; (*reporter->assert_true)( reporter, file, line, (actual == expected), "Expected a call count of [%d], but got [%d]", expected, actual); } static void die(const char *message, ...) { va_list arguments; va_start(arguments, message); vprintf(message, arguments); va_end(arguments); exit(EXIT_FAILURE); } static void do_nothing() { } /* vim: set ts=4 sw=4 et cindent: */ libdbi-drivers-0.9.0/tests/cgreen/src/messaging.c000644 001750 001750 00000004145 11421144170 022603 0ustar00markusmarkus000000 000000 #include #include #include #include #include #include #define message_content_size(Type) (sizeof(Type) - sizeof(long)) typedef struct CgreenMessageQueue_ { int readpipe; int writepipe; pid_t owner; int tag; } CgreenMessageQueue; typedef struct CgreenMessage_ { long type; int result; } CgreenMessage; static CgreenMessageQueue *queues = NULL; static int queue_count = 0; static void clean_up_messaging(); int start_cgreen_messaging(int tag) { CgreenMessageQueue *tmp; int pipes[2]; if (queue_count == 0) { atexit(&clean_up_messaging); } tmp = realloc(queues, sizeof(CgreenMessageQueue) * ++queue_count); if (tmp == NULL) { atexit(&clean_up_messaging); return -1; } queues = tmp; pipe(pipes); queues[queue_count - 1].readpipe = pipes[0]; queues[queue_count - 1].writepipe = pipes[1]; queues[queue_count - 1].owner = getpid(); queues[queue_count - 1].tag = tag; return queue_count - 1; } void send_cgreen_message(int messaging, int result) { CgreenMessage *message = malloc(sizeof(CgreenMessage)); if (message == NULL) { return; } memset(message, 0, sizeof(*message)); message->type = queues[messaging].tag; message->result = result; write(queues[messaging].writepipe, message, sizeof(CgreenMessage)); free(message); } int receive_cgreen_message(int messaging) { CgreenMessage *message = malloc(sizeof(CgreenMessage)); if (message == NULL) { return -1; } fcntl(queues[messaging].readpipe, F_SETFL, O_NONBLOCK); ssize_t received = read(queues[messaging].readpipe, message, sizeof(CgreenMessage)); int result = (received > 0 ? message->result : 0); free(message); return result; } static void clean_up_messaging() { int i; for (i = 0; i < queue_count; i++) { if (queues[i].owner == getpid()) { close(queues[i].readpipe); close(queues[i].writepipe); } } free(queues); queues = NULL; queue_count = 0; } /* vim: set ts=4 sw=4 et cindent: */ libdbi-drivers-0.9.0/tests/cgreen/src/breadcrumb.c000644 001750 001750 00000003136 11421144170 022733 0ustar00markusmarkus000000 000000 #include #include struct CgreenBreadcrumb_ { const char **trail; int depth; int space; }; CgreenBreadcrumb *create_breadcrumb(void) { CgreenBreadcrumb *breadcrumb = malloc(sizeof(CgreenBreadcrumb)); if (breadcrumb == NULL) { return NULL; } breadcrumb->trail = NULL; breadcrumb->depth = 0; breadcrumb->space = 0; return breadcrumb; } void destroy_breadcrumb(CgreenBreadcrumb *breadcrumb) { free(breadcrumb->trail); free(breadcrumb); } void push_breadcrumb(CgreenBreadcrumb *breadcrumb, const char *name) { breadcrumb->depth++; if (breadcrumb->depth > breadcrumb->space) { const char **tmp; breadcrumb->space++; tmp = realloc(breadcrumb->trail, sizeof(const char *) * breadcrumb->space); if (tmp == NULL) { breadcrumb->space--; breadcrumb->depth--; return; } breadcrumb->trail = tmp; } breadcrumb->trail[breadcrumb->depth - 1] = name; } void pop_breadcrumb(CgreenBreadcrumb *breadcrumb) { breadcrumb->depth--; } const char *get_current_from_breadcrumb(CgreenBreadcrumb *breadcrumb) { if (get_breadcrumb_depth(breadcrumb) == 0) { return NULL; } return breadcrumb->trail[breadcrumb->depth - 1]; } int get_breadcrumb_depth(CgreenBreadcrumb *breadcrumb) { return breadcrumb->depth; } void walk_breadcrumb(CgreenBreadcrumb *breadcrumb, void (*walker)(const char *, void *), void *memo) { int i; for (i = 0; i < breadcrumb->depth; i++) { (*walker)(breadcrumb->trail[i], memo); } } /* vim: set ts=4 sw=4 et cindent: */ libdbi-drivers-0.9.0/tests/cgreen/src/reporter.c000644 001750 001750 00000007761 11421144170 022477 0ustar00markusmarkus000000 000000 #include #include #include #include #include #include enum {pass = 1, fail, completion}; struct TestContext_ { TestReporter *reporter; }; static TestContext context; static void show_pass(TestReporter *reporter, const char *file, int line, const char *message, va_list arguments); static void show_fail(TestReporter *reporter, const char *file, int line, const char *message, va_list arguments); static void show_incomplete(TestReporter *reporter, const char *name); static void assert_true(TestReporter *reporter, const char *file, int line, int result, const char *message, ...); static void read_reporter_results(TestReporter *reporter); TestReporter *get_test_reporter() { return context.reporter; } void setup_reporting(TestReporter *reporter) { reporter->ipc = start_cgreen_messaging(45); context.reporter = reporter; } TestReporter *create_reporter() { TestReporter *reporter = malloc(sizeof(TestReporter)); if (reporter == NULL) { return NULL; } CgreenBreadcrumb *breadcrumb = create_breadcrumb(); if (breadcrumb == NULL) { destroy_reporter(reporter); return NULL; } reporter->destroy = &destroy_reporter; reporter->start_suite = &reporter_start_suite; reporter->start_test = &reporter_start; reporter->show_pass = &show_pass; reporter->show_fail = &show_fail; reporter->show_incomplete = &show_incomplete; reporter->assert_true = &assert_true; reporter->finish_test = &reporter_finish; reporter->finish_suite = &reporter_finish; reporter->passes = 0; reporter->failures = 0; reporter->exceptions = 0; reporter->breadcrumb = breadcrumb; reporter->memo = NULL; return reporter; } void destroy_reporter(TestReporter *reporter) { destroy_breadcrumb((CgreenBreadcrumb *)reporter->breadcrumb); destroy_memo((TestReportMemo *)reporter->memo); free(reporter); context.reporter = NULL; } void destroy_memo(TestReportMemo *memo) { if (! memo) { free(memo); memo = NULL; } } void reporter_start(TestReporter *reporter, const char *name) { push_breadcrumb(reporter->breadcrumb, name); } void reporter_start_suite(TestReporter *reporter, const char *name, const int count) { (void) count; reporter_start(reporter, name); } void reporter_finish(TestReporter *reporter, const char *name) { read_reporter_results(reporter); pop_breadcrumb((CgreenBreadcrumb *)reporter->breadcrumb); } void add_reporter_result(TestReporter *reporter, int result) { send_cgreen_message(reporter->ipc, result ? pass : fail); } void send_reporter_completion_notification(TestReporter *reporter) { send_cgreen_message(reporter->ipc, completion); } static void show_pass(TestReporter *reporter, const char *file, int line, const char *message, va_list arguments) { } static void show_fail(TestReporter *reporter, const char *file, int line, const char *message, va_list arguments) { } static void show_incomplete(TestReporter *reporter, const char *name) { } static void assert_true(TestReporter *reporter, const char *file, int line, int result, const char *message, ...) { va_list arguments; va_start(arguments, message); if (result) { (*reporter->show_pass)(reporter, file, line, message, arguments); } else { (*reporter->show_fail)(reporter, file, line, message, arguments); } add_reporter_result(reporter, result); va_end(arguments); } static void read_reporter_results(TestReporter *reporter) { int completed = 0; int result; while ((result = receive_cgreen_message(reporter->ipc)) > 0) { if (result == pass) { reporter->passes++; } else if (result == fail) { reporter->failures++; } else if (result == completion) { completed = 1; } } if (! completed) { (*reporter->show_incomplete)(reporter, get_current_from_breadcrumb((CgreenBreadcrumb *)reporter->breadcrumb)); reporter->exceptions++; } } /* vim: set ts=4 sw=4 et cindent: */ libdbi-drivers-0.9.0/tests/cgreen/src/assertions.c000644 001750 001750 00000006067 11421144170 023025 0ustar00markusmarkus000000 000000 #include #include #include #include #include #define max(a,b) ((a) > (b) ? (a) : (b)) #define min(a,b) ((a) > (b) ? (b) : (a)) static double accuracy(int significant_figures, double largest); static int significant_figures = 8; void assert_equal_(const char *file, int line, intptr_t tried, intptr_t expected) { (*get_test_reporter()->assert_true)( get_test_reporter(), file, line, (tried == expected), "[%d] should match [%d]", tried, expected); } void assert_not_equal_(const char *file, int line, intptr_t tried, intptr_t expected) { (*get_test_reporter()->assert_true)( get_test_reporter(), file, line, (tried != expected), "[%d] should not match [%d]", tried, expected); } void assert_double_equal_(const char *file, int line, double tried, double expected) { (*get_test_reporter()->assert_true)( get_test_reporter(), file, line, doubles_are_equal(tried, expected), "[%f] should match [%f] within %d significant figures %f", tried, expected, significant_figures); } void assert_double_not_equal_(const char *file, int line, double tried, double expected) { (*get_test_reporter()->assert_true)( get_test_reporter(), file, line, ! doubles_are_equal(tried, expected), "[%f] should not match [%f] within %d significant figures", tried, expected, significant_figures); } void assert_string_equal_(const char *file, int line, const char *tried, const char *expected) { (*get_test_reporter()->assert_true)( get_test_reporter(), file, line, strings_are_equal(tried, expected), "[%s] should match [%s]", show_null_as_the_string_null(tried), show_null_as_the_string_null(expected)); } void assert_string_not_equal_(const char *file, int line, const char *tried, const char *expected) { (*get_test_reporter()->assert_true)( get_test_reporter(), file, line, ! strings_are_equal(tried, expected), "[%s] should not match [%s]", show_null_as_the_string_null(tried), show_null_as_the_string_null(expected)); } void significant_figures_for_assert_double_are(int figures) { significant_figures = figures; } const char *show_null_as_the_string_null(const char *string) { return (string == NULL ? "NULL" : string); } int strings_are_equal(const char *tried, const char *expected) { if ((tried == NULL) || (expected == NULL)) { return (tried == expected); } else { return (strcmp(tried, expected) == 0); } } int doubles_are_equal(const double tried, const double expected) { return max(tried, expected) - min(tried, expected) < accuracy(significant_figures, max(tried, expected)); } static double accuracy(int figures, double largest) { return pow(10, 1 + (int)log10(largest) - figures); } /* vim: set ts=4 sw=4 et cindent: */ libdbi-drivers-0.9.0/tests/cgreen/src/vector.c000644 001750 001750 00000003073 11421144170 022127 0ustar00markusmarkus000000 000000 #include #include struct CgreenVector_ { int size; void (*destructor)(void *); int space; void **items; }; static void increase_space(CgreenVector *vector); CgreenVector *create_cgreen_vector(void (*destructor)(void *)) { CgreenVector *vector = (CgreenVector *)malloc(sizeof(CgreenVector)); vector->size = 0; vector->destructor = destructor; vector->space = 0; vector->items = NULL; return vector; } void destroy_cgreen_vector(CgreenVector *vector) { int i; if (vector->destructor != NULL) { for (i = 0; i < vector->size; i++) { (*vector->destructor)(vector->items[i]); } } free(vector->items); free(vector); } void cgreen_vector_add(CgreenVector *vector, void *item) { if (vector->size == vector->space) { increase_space(vector); } vector->items[vector->size] = item; vector->size++; } void *cgreen_vector_remove(CgreenVector *vector, int position) { void *item = vector->items[position]; int i; for (i = position; i < vector->size; i++) { vector->items[i] = vector->items[i + 1]; } vector->size--; return item; } void *cgreen_vector_get(CgreenVector *vector, int position) { return vector->items[position]; } int cgreen_vector_size(CgreenVector *vector) { return (vector == NULL ? 0 : vector->size); } static void increase_space(CgreenVector *vector) { vector->space += 100; vector->items = (void**)realloc(vector->items, sizeof(void *) * vector->space); } /* vim: set ts=4 sw=4 et cindent: */ libdbi-drivers-0.9.0/tests/cgreen/src/mocks.c000644 001750 001750 00000021322 11421144170 021736 0ustar00markusmarkus000000 000000 #include #include #include #include #include #include #include typedef struct RecordedResult_ { const char *function; intptr_t result; int should_keep; } RecordedResult; typedef struct RecordedExpectation_ { const char *function; const char *test_file; int test_line; int should_keep; CgreenVector *constraints; } RecordedExpectation; typedef struct UnwantedCall_ { const char *test_file; int test_line; const char *function; } UnwantedCall; static CgreenVector *result_queue = NULL; static CgreenVector *expectation_queue = NULL; static CgreenVector *unwanted_calls = NULL; intptr_t stubbed_result(const char *function); static RecordedResult *create_recorded_result(const char *function, intptr_t result); static void ensure_result_queue_exists(); static RecordedExpectation *create_recorded_expectation(const char *function, const char *test_file, int test_line, va_list constraints); static void destroy_expectation(void *expectation); static void ensure_expectation_queue_exists(); static void ensure_unwanted_calls_list_exists(); RecordedResult *find_result(const char *function); static void unwanted_check(const char *function); void trigger_unfulfilled_expectations(CgreenVector *expectation_queue, TestReporter *reporter); RecordedExpectation *find_expectation(const char *function); void apply_any_constraints(RecordedExpectation *expectation, const char *parameter, intptr_t actual); intptr_t mock_(const char *function, const char *parameters, ...) { unwanted_check(function); RecordedExpectation *expectation = find_expectation(function); if (expectation != NULL) { CgreenVector *names = create_vector_of_names(parameters); int i; va_list actual; va_start(actual, parameters); for (i = 0; i < cgreen_vector_size(names); i++) { apply_any_constraints(expectation, (const char *)cgreen_vector_get(names, i), va_arg(actual, intptr_t)); } va_end(actual); destroy_cgreen_vector(names); if (! expectation->should_keep) { destroy_expectation(expectation); } } return stubbed_result(function); } void expect_(const char *function, const char *test_file, int test_line, ...) { va_list constraints; va_start(constraints, test_line); RecordedExpectation *expectation = create_recorded_expectation(function, test_file, test_line, constraints); va_end(constraints); expectation->should_keep = 0; } void always_expect_(const char *function, const char *test_file, int test_line, ...) { va_list constraints; va_start(constraints, test_line); RecordedExpectation *expectation = create_recorded_expectation(function, test_file, test_line, constraints); va_end(constraints); expectation->should_keep = 1; } void expect_never_(const char *function, const char *test_file, int test_line) { ensure_unwanted_calls_list_exists(); UnwantedCall *unwanted = (UnwantedCall *)malloc(sizeof(UnwantedCall)); unwanted->test_file = test_file; unwanted->test_line = test_line; unwanted->function = function; cgreen_vector_add(unwanted_calls, unwanted); } void will_return_(const char *function, intptr_t result) { RecordedResult *record = create_recorded_result(function, result); record->should_keep = 0; } void always_return_(const char *function, intptr_t result) { RecordedResult *record = create_recorded_result(function, result); record->should_keep = 1; } void clear_mocks() { if (result_queue != NULL) { destroy_cgreen_vector(result_queue); result_queue = NULL; } if (expectation_queue != NULL) { destroy_cgreen_vector(expectation_queue); expectation_queue = NULL; } if (unwanted_calls != NULL) { destroy_cgreen_vector(unwanted_calls); unwanted_calls = NULL; } } void tally_mocks(TestReporter *reporter) { trigger_unfulfilled_expectations(expectation_queue, reporter); clear_mocks(); } intptr_t stubbed_result(const char *function) { RecordedResult *result = find_result(function); if (result == NULL) { return 0; } intptr_t value = result->result; if (! result->should_keep) { free(result); } return value; } static RecordedResult *create_recorded_result(const char *function, intptr_t result) { ensure_result_queue_exists(); RecordedResult *record = (RecordedResult *)malloc(sizeof(RecordedResult)); record->function = function; record->result = result; cgreen_vector_add(result_queue, record); return record; } static void ensure_result_queue_exists() { if (result_queue == NULL) { result_queue = create_cgreen_vector(&free); } } static RecordedExpectation *create_recorded_expectation(const char *function, const char *test_file, int test_line, va_list constraints) { ensure_expectation_queue_exists(); RecordedExpectation *expectation = (RecordedExpectation *)malloc(sizeof(RecordedExpectation)); expectation->function = function; expectation->test_file = test_file; expectation->test_line = test_line; expectation->constraints = create_cgreen_vector(&destroy_constraint); Constraint *constraint; while ((constraint = va_arg(constraints, Constraint *)) != (Constraint *)0) { cgreen_vector_add(expectation->constraints, constraint); } cgreen_vector_add(expectation_queue, expectation); return expectation; } static void destroy_expectation(void *abstract) { RecordedExpectation *expectation = (RecordedExpectation *)abstract; destroy_cgreen_vector(expectation->constraints); free(expectation); } static void ensure_expectation_queue_exists() { if (expectation_queue == NULL) { expectation_queue = create_cgreen_vector(&destroy_expectation); } } static void ensure_unwanted_calls_list_exists() { if (unwanted_calls == NULL) { unwanted_calls = create_cgreen_vector(&free); } } RecordedResult *find_result(const char *function) { int i; for (i = 0; i < cgreen_vector_size(result_queue); i++) { RecordedResult *result = (RecordedResult *)cgreen_vector_get(result_queue, i); if (strcmp(result->function, function) == 0) { if (! result->should_keep) { return (RecordedResult *) cgreen_vector_remove(result_queue, i); } return result; } } return NULL; } static void unwanted_check(const char *function) { int i; for (i = 0; i < cgreen_vector_size(unwanted_calls); i++) { UnwantedCall *unwanted = (UnwantedCall *) cgreen_vector_get(unwanted_calls, i); if (strcmp(unwanted->function, function) == 0) { (*get_test_reporter()->assert_true)( get_test_reporter(), unwanted->test_file, unwanted->test_line, 0, "Unexpected call to function [%s]", function); } } } void trigger_unfulfilled_expectations(CgreenVector *expect_queue, TestReporter *reporter) { int i; for (i = 0; i < cgreen_vector_size(expectation_queue); i++) { RecordedExpectation *expectation = cgreen_vector_get(expect_queue, i); if (! expectation->should_keep) { (*reporter->assert_true)( reporter, expectation->test_file, expectation->test_line, 0, "Call was not made to function [%s]", expectation->function); } } } RecordedExpectation *find_expectation(const char *function) { int i; for (i = 0; i < cgreen_vector_size(expectation_queue); i++) { RecordedExpectation *expectation = (RecordedExpectation *)cgreen_vector_get(expectation_queue, i); if (strcmp(expectation->function, function) == 0) { if (! expectation->should_keep) { return (RecordedExpectation *) cgreen_vector_remove(expectation_queue, i); } return expectation; } } return NULL; } void apply_any_constraints(RecordedExpectation *expectation, const char *parameter, intptr_t actual) { int i; for (i = 0; i < cgreen_vector_size(expectation->constraints); i++) { Constraint *constraint = (Constraint *)cgreen_vector_get(expectation->constraints, i); if (is_constraint_parameter(constraint, parameter)) { test_constraint( constraint, expectation->function, actual, expectation->test_file, expectation->test_line, get_test_reporter()); } } } /* vim: set ts=4 sw=4 et cindent: */ libdbi-drivers-0.9.0/tests/cgreen/src/constraint.c000644 001750 001750 00000017343 11421144170 023016 0ustar00markusmarkus000000 000000 #include #include #include #include #include static void destroy_empty_constraint(Constraint *constraint); static int compare_want(Constraint *constraint, intptr_t actual); static void test_want(Constraint *constraint, const char *function, intptr_t actual, const char *test_file, int test_line, TestReporter *reporter); static int compare_non_null(Constraint *constraint, intptr_t actual); static void test_non_null(Constraint *constraint, const char *function, intptr_t actual, const char *test_file, int test_line, TestReporter *reporter); static int compare_want_string(Constraint *constraint, intptr_t actual); static void test_want_string(Constraint *constraint, const char *function, intptr_t actual, const char *test_file, int test_line, TestReporter *reporter); static int compare_want_double(Constraint *constraint, intptr_t actual); static void test_want_double(Constraint *constraint, const char *function, intptr_t actual, const char *test_file, int test_line, TestReporter *reporter); static Constraint *create_constraint(const char *parameter); static void destroy_double_constraint(Constraint *constraint); static double unbox_double(intptr_t box); static double as_double(intptr_t box); static int compare_using_matcher(Constraint *constraint, intptr_t actual); static void test_with_matcher(Constraint *constraint, const char *function, const char* matcher_name, intptr_t actual, const char *test_file, int test_line, TestReporter *reporter); void destroy_constraint(void *abstract) { Constraint *constraint = (Constraint *)abstract; (*constraint->destroy)(constraint); } int is_constraint_parameter(Constraint *constraint, const char *parameter) { return strcmp(constraint->parameter, parameter) == 0; } void test_constraint(Constraint *constraint, const char *function, intptr_t actual, const char *test_file, int test_line, TestReporter *reporter) { (*constraint->test)(constraint, function, actual, test_file, test_line, reporter); } Constraint *want_(const char *parameter, intptr_t expected) { Constraint *constraint = create_constraint(parameter); constraint->parameter = parameter; constraint->compare = &compare_want; constraint->test = &test_want; constraint->expected = expected; return constraint; } Constraint *want_non_null_(const char *parameter) { Constraint *constraint = create_constraint(parameter); constraint->parameter = parameter; constraint->compare = &compare_non_null; constraint->test = &test_non_null; return constraint; } Constraint *want_string_(const char *parameter, char *expected) { Constraint *constraint = create_constraint(parameter); constraint->parameter = parameter; constraint->compare = &compare_want_string; constraint->test = &test_want_string; constraint->expected = (intptr_t)expected; return constraint; } static int compare_non_null(Constraint *constraint, intptr_t actual) { return (NULL != (void*)actual); } static void test_non_null(Constraint *constraint, const char *function, intptr_t actual, const char *test_file, int test_line, TestReporter *reporter) { (*reporter->assert_true)( reporter, test_file, test_line, (*constraint->compare)(constraint, actual), "Wanted non-null, but got null in function [%s] parameter [%s]", function, constraint->parameter); } Constraint *want_double_(const char *parameter, intptr_t expected) { Constraint *constraint = (Constraint *)malloc(sizeof(Constraint)); constraint->parameter = parameter; constraint->destroy = &destroy_double_constraint; constraint->compare = &compare_want_double; constraint->test = &test_want_double; constraint->expected = expected; return constraint; } intptr_t box_double(double d) { BoxedDouble *box = (BoxedDouble *) malloc(sizeof(BoxedDouble)); box->d = d; return (intptr_t)box; } Constraint *with_(const char *parameter, const char* matcher_name, int (*matcher_function)(const void*)) { Constraint *constraint = create_constraint(parameter); constraint->parameter = parameter; constraint->compare = &compare_using_matcher; constraint->test = &test_with_matcher; constraint->name = matcher_name; constraint->expected = (intptr_t)matcher_function; return constraint; } static void destroy_empty_constraint(Constraint *constraint) { free(constraint); } static int compare_want(Constraint *constraint, intptr_t actual) { return (constraint->expected == actual); } static void test_want(Constraint *constraint, const char *function, intptr_t actual, const char *test_file, int test_line, TestReporter *reporter) { (*reporter->assert_true)( reporter, test_file, test_line, (*constraint->compare)(constraint, actual), "Wanted [%d], but got [%d] in function [%s] parameter [%s]", constraint->expected, actual, function, constraint->parameter); } static int compare_want_string(Constraint *constraint, intptr_t actual) { return strings_are_equal((const char *)constraint->expected, (const char *)actual); } static void test_want_string(Constraint *constraint, const char *function, intptr_t actual, const char *test_file, int test_line, TestReporter *reporter) { (*reporter->assert_true)( reporter, test_file, test_line, (*constraint->compare)(constraint, actual), "Wanted [%s], but got [%s] in function [%s] parameter [%s]", show_null_as_the_string_null((const char *)constraint->expected), show_null_as_the_string_null((const char *)actual), function, constraint->parameter); } static int compare_want_double(Constraint *constraint, intptr_t actual) { return doubles_are_equal(as_double(constraint->expected), as_double(actual)); } static void test_want_double(Constraint *constraint, const char *function, intptr_t actual, const char *test_file, int test_line, TestReporter *reporter) { (*reporter->assert_true)( reporter, test_file, test_line, (*constraint->compare)(constraint, actual), "Wanted [%d], but got [%d] in function [%s] parameter [%s]", as_double(constraint->expected), as_double(actual), function, constraint->parameter); unbox_double(actual); } static int compare_using_matcher(Constraint *constraint, intptr_t actual) { int (*matches)(const void*) = constraint->expected; return matches(actual); } static void test_with_matcher(Constraint *constraint, const char *function, const char* matcher_name, intptr_t matcher_function, const char *test_file, int test_line, TestReporter *reporter) { (*reporter->assert_true)( reporter, test_file, test_line, (*constraint->compare)(constraint, matcher_function), "Wanted parameter [%s] to match [%s] in function [%s]", constraint->parameter, matcher_name, function); } static Constraint *create_constraint(const char *parameter) { Constraint *constraint = (Constraint *)malloc(sizeof(Constraint)); constraint->parameter = parameter; constraint->destroy = &destroy_empty_constraint; return constraint; } static void destroy_double_constraint(Constraint *constraint) { unbox_double(constraint->expected); destroy_empty_constraint(constraint); } static double unbox_double(intptr_t box) { double d = as_double(box); free((BoxedDouble *)box); return d; } static double as_double(intptr_t box) { return ((BoxedDouble *)box)->d; } /* vim: set ts=4 sw=4 et cindent: */ libdbi-drivers-0.9.0/tests/cgreen/src/parameters.c000644 001750 001750 00000004243 11421144170 022770 0ustar00markusmarkus000000 000000 #include #include #include #include #include static char *tokenise_by_commas_and_whitespace(char *list); static char *skip_nulls_until(char *pointer, char *pointer_end); static char *end_of_token(char *token); static char *strip_box_double(char *token); static char *strip_d_macro(char *token); CgreenVector *create_vector_of_names(const char *parameters) { CgreenVector *names = create_cgreen_vector(&free); if ((parameters == NULL) || (strlen(parameters) == 0)) { return names; } char *parameters_to_tokenize = strdup(parameters); if (parameters_to_tokenize == NULL) { return names; } char *parameters_end = parameters_to_tokenize + strlen(parameters_to_tokenize); char *tokens = tokenise_by_commas_and_whitespace(parameters_to_tokenize); char *token = tokens; while (token < tokens + strlen(parameters)) { token = strip_d_macro(strip_box_double(skip_nulls_until(token, parameters_end))); cgreen_vector_add(names, strdup(token)); token = end_of_token(token); } free(tokens); return names; } static char *tokenise_by_commas_and_whitespace(char *list) { int i, length; for (i = 0, length = strlen(list); i < length; i++) { if (isspace(list[i]) || list[i] == ',') { list[i] = '\0'; } } return list; } static char *skip_nulls_until(char *pointer, char *pointer_end) { while (*pointer == '\0' && pointer < pointer_end) { pointer++; } return pointer; } static char *end_of_token(char *token) { return token + strlen(token); } static char *strip_box_double(char *token) { if ((strncmp("box_double(", token, 11) == 0) && (*(end_of_token(token) - 1) == ')')) { memmove(token, token + 11, strlen(token) - 11 + 1); *(end_of_token(token) - 1) = '\0'; } return token; } static char *strip_d_macro(char *token) { if ((strncmp("d(", token, 2) == 0) && (*(end_of_token(token) - 1) == ')')) { memmove(token, token + 2, strlen(token) - 2 + 1); *(end_of_token(token) - 1) = '\0'; } return token; } /* vim: set ts=4 sw=4 et cindent: */ libdbi-drivers-0.9.0/tests/cgreen/src/text_reporter.c000644 001750 001750 00000005603 11421144170 023534 0ustar00markusmarkus000000 000000 #include #include #include #include #include static void text_reporter_start_suite(TestReporter *reporter, const char *name, const int number_of_tests); static void text_reporter_start_test(TestReporter *reporter, const char *name); static void text_reporter_finish(TestReporter *reporter, const char *name); static void show_fail(TestReporter *reporter, const char *file, int line, const char *message, va_list arguments); static void show_incomplete(TestReporter *reporter, const char *name); static void show_breadcrumb(const char *name, void *memo); TestReporter *create_text_reporter(void) { TestReporter *reporter = create_reporter(); if (reporter == NULL) { return NULL; } reporter->start_suite = &text_reporter_start_suite; reporter->start_test = &text_reporter_start_test; reporter->show_fail = &show_fail; reporter->show_incomplete = &show_incomplete; reporter->finish_test = &text_reporter_finish; reporter->finish_suite = &text_reporter_finish; return reporter; } static void text_reporter_start_suite(TestReporter *reporter, const char *name, const int number_of_tests) { reporter_start(reporter, name); if (get_breadcrumb_depth((CgreenBreadcrumb *)reporter->breadcrumb) == 1) { printf("Running \"%s\"...\n", get_current_from_breadcrumb((CgreenBreadcrumb *)reporter->breadcrumb)); } } static void text_reporter_start_test(TestReporter *reporter, const char *name) { reporter_start(reporter, name); } static void text_reporter_finish(TestReporter *reporter, const char *name) { reporter_finish(reporter, name); if (get_breadcrumb_depth((CgreenBreadcrumb *)reporter->breadcrumb) == 0) { printf( "Completed \"%s\": %d pass%s, %d failure%s, %d exception%s.\n", name, reporter->passes, reporter->passes == 1 ? "" : "es", reporter->failures, reporter->failures == 1 ? "" : "s", reporter->exceptions, reporter->exceptions == 1 ? "" : "s"); } } static void show_fail(TestReporter *reporter, const char *file, int line, const char *message, va_list arguments) { int i = 0; printf("%s:%d: unit test failure: ", file, line); walk_breadcrumb( (CgreenBreadcrumb *)reporter->breadcrumb, &show_breadcrumb, (void *)&i); vprintf((message == NULL ? "Problem" : message), arguments); printf(" at [%s] line [%d]\n", file, line); } static void show_incomplete(TestReporter *reporter, const char *name) { int i = 0; printf("Exception!: "); walk_breadcrumb( (CgreenBreadcrumb *)reporter->breadcrumb, &show_breadcrumb, (void *)&i); printf("Test \"%s\" failed to complete\n", name); } static void show_breadcrumb(const char *name, void *memo) { if (*(int *)memo > 0) { printf("%s -> ", name); } (*(int *)memo)++; } /* vim: set ts=4 sw=4 et cindent: */ libdbi-drivers-0.9.0/tests/cgreen/src/cdash_reporter.c000644 001750 001750 00000021205 11421144170 023626 0ustar00markusmarkus000000 000000 #include #include #include #include #include #include #include #include #include #include typedef int Printer(FILE *, const char *format, ...); typedef time_t Timer(char *strtime); typedef double DiffTimer(time_t t1, time_t t2); typedef struct { CDashInfo *cdash; Printer *printer; Timer *timer; DiffTimer *difftimer; int pipe_fd[2]; time_t begin; time_t startdatetime; time_t enddatetime; time_t teststarted; time_t testfinished; FILE *f_reporter; } CdashMemo; static void cdash_destroy_reporter(TestReporter *reporter); static void cdash_reporter_suite_started(TestReporter *reporter, const char *name, const int number_of_tests); static void cdash_reporter_testcase_started(TestReporter *reporter, const char *name); static void show_failed(TestReporter *reporter, const char *file, int line, const char *message, va_list arguments); static void show_passed(TestReporter *reporter, const char *file, int line, const char *message, va_list arguments); static void show_incomplete(TestReporter *reporter, const char *name); static void cdash_reporter_testcase_finished(TestReporter *reporter, const char *name); static void cdash_reporter_suite_finished(TestReporter *reporter, const char *name); static time_t cdash_build_stamp(char *sbuildstamp, size_t sb); static time_t cdash_current_time(char *strtime); static double cdash_enlapsed_time(time_t t1, time_t t2); TestReporter *create_cdash_reporter(CDashInfo *cdash) { TestReporter *reporter; CdashMemo *memo; FILE *fd; char sbuildstamp[15]; char strstart[30]; char reporter_path[255]; int rep_dir, strsize; if (!cdash) return NULL; reporter = create_reporter(); if (!reporter) return NULL; memo = (CdashMemo *) malloc(sizeof(CdashMemo)); if (!memo) return NULL; memo->cdash = (CDashInfo *) cdash; memo->printer = fprintf; memo->timer = cdash_current_time; memo->difftimer = cdash_enlapsed_time; memo->begin = cdash_build_stamp(sbuildstamp, 15); rep_dir = mkdir("./Testing", S_IXUSR|S_IRUSR|S_IWUSR|S_IXGRP|S_IRGRP|S_IXOTH|S_IRGRP); if (rep_dir) if (errno != EEXIST) return NULL; fd = fopen("./Testing/TAG", "w+"); if (fd == NULL) return NULL; fprintf(fd,"%s\n%s\n", sbuildstamp, memo->cdash->type); fclose(fd); strsize = snprintf(reporter_path, 255, "./Testing/%s", sbuildstamp); rep_dir = mkdir(reporter_path, S_IXUSR|S_IRUSR|S_IWUSR|S_IXGRP|S_IRGRP|S_IXOTH|S_IRGRP); if (rep_dir) if (errno != EEXIST) return NULL; strsize = snprintf( (char *) (reporter_path + strsize), (255 - strsize), "/Test.xml"); fd = fopen(reporter_path, "w+"); if (fd == NULL) return NULL; /* now the Test.xml is in place */ memo->f_reporter = fd; memo->startdatetime = cdash_current_time(strstart); memo->printer(memo->f_reporter, "\n" " \n" " \n" " %s\n" " \n" " \n" " \n", memo->cdash->build, sbuildstamp, memo->cdash->type, memo->cdash->name, "Cgreen1.0.0", memo->cdash->os_name, memo->cdash->hostname, memo->cdash->os_release, memo->cdash->os_version, memo->cdash->os_platform, strstart); fflush(memo->f_reporter); reporter->destroy = &cdash_destroy_reporter; reporter->start_suite = &cdash_reporter_suite_started; reporter->start_test = &cdash_reporter_testcase_started; reporter->show_fail = &show_failed; reporter->show_pass = &show_passed; reporter->show_incomplete = &show_incomplete; reporter->finish_test = &cdash_reporter_testcase_finished; reporter->finish_suite = &cdash_reporter_suite_finished; reporter->memo = memo; return reporter; } static void cdash_destroy_reporter(TestReporter *reporter) { char endtime[30]; CdashMemo *memo = (CdashMemo *)reporter->memo; memo->enddatetime = cdash_current_time(endtime); memo->printer(memo->f_reporter, " %s\n" " %.2f\n" " \n" "\n", endtime, memo->difftimer(memo->startdatetime, memo->enddatetime)); destroy_reporter(reporter); } static void cdash_reporter_suite_started(TestReporter *reporter, const char *name, const int number_of_tests) { reporter_start(reporter, name); } static void cdash_reporter_testcase_started(TestReporter *reporter, const char *name) { CdashMemo *memo = (CdashMemo *)reporter->memo; memo->teststarted = memo->timer(NULL); reporter_start(reporter, name); } static void show_failed(TestReporter *reporter, const char *file, int line, const char *message, va_list arguments) { const char *name; char buffer[1000]; float exectime; CdashMemo *memo; memo = (CdashMemo *)reporter->memo; memo->testfinished = memo->timer(NULL); exectime = memo->difftimer(memo->teststarted, memo->testfinished); name = get_current_from_breadcrumb((CgreenBreadcrumb *)reporter->breadcrumb); memo->printer(memo->f_reporter, " \n"); memo->printer(memo->f_reporter, " %s\n" " %s\n" " %s\n" " at [%s] line [%d]\n", name, file, file, file, line); memo->printer(memo->f_reporter, " \n" " %f\n" " Completed\n" " %s\n" " \n" " ", exectime, name); vsprintf(buffer, (message == NULL ? "Problem" : message), arguments); memo->printer(memo->f_reporter, "%s", buffer); memo->printer(memo->f_reporter, "\n" " \n" " \n" " \n"); } static void show_passed(TestReporter *reporter, const char *file, int line, const char *message, va_list arguments) { float exectime; CdashMemo *memo = (CdashMemo *)reporter->memo; const char *name = get_current_from_breadcrumb((CgreenBreadcrumb *)reporter->breadcrumb); memo->testfinished = memo->timer(NULL); exectime = memo->difftimer(memo->teststarted, memo->testfinished); memo->printer(memo->f_reporter, " \n"); memo->printer(memo->f_reporter, "" " %s\n" " %s\n" " %s\n" " at [%s] line [%d]\n", name, file, file, file, line); memo->printer(memo->f_reporter, " \n" " %f\n" " Completed\n" " %s\n" " \n" " \n" " \n" " \n" " \n", exectime, name); } static void show_incomplete(TestReporter *reporter, const char *name) { } static void cdash_reporter_testcase_finished(TestReporter *reporter, const char *name) { reporter_finish(reporter, name); } static void cdash_reporter_suite_finished(TestReporter *reporter, const char *name) { reporter_finish(reporter, name); } static time_t cdash_build_stamp(char *sbuildstamp, size_t sb) { time_t t1; struct tm d1; char s[15]; t1 = time(0); gmtime_r(&t1, &d1); strftime(s, sizeof(s), "%Y%m%d-%H%M", &d1); snprintf(sbuildstamp, sb, "%s", s); return t1; } static time_t cdash_current_time(char *strtime) { time_t t1; struct tm d1; char s[20]; size_t i; t1 = time(0); gmtime_r(&t1, &d1); if(strtime == NULL) return t1; i = strftime(s, 20, "%b %d %H:%M EDT", &d1); strncpy(strtime, s, i+1); return t1; } static double cdash_enlapsed_time(time_t t1, time_t t2) { double diff; diff = difftime(t2, t1); return (diff == 0 ? 0 : (diff / 60)); } libdbi-drivers-0.9.0/drivers/Makefile.am000644 001750 001750 00000000150 11152233251 020770 0ustar00markusmarkus000000 000000 AUTOMAKE_OPTIONS = foreign SUBDIRS = mysql pgsql sqlite sqlite3 msql oracle firebird freetds ingres db2 libdbi-drivers-0.9.0/drivers/Makefile.in000644 001750 001750 00000045154 12117467052 021030 0ustar00markusmarkus000000 000000 # Makefile.in generated by automake 1.12.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2012 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = drivers DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DB2_INCLUDE = @DB2_INCLUDE@ DB2_LDFLAGS = @DB2_LDFLAGS@ DB2_LIBS = @DB2_LIBS@ DB2_TEST = @DB2_TEST@ DBI_INCLUDE = @DBI_INCLUDE@ DEBUG = @DEBUG@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FIREBIRD_INCLUDE = @FIREBIRD_INCLUDE@ FIREBIRD_ISQL = @FIREBIRD_ISQL@ FIREBIRD_ISQL_FLAG = @FIREBIRD_ISQL_FLAG@ FIREBIRD_LDFLAGS = @FIREBIRD_LDFLAGS@ FIREBIRD_LIBS = @FIREBIRD_LIBS@ FIREBIRD_TEST = @FIREBIRD_TEST@ FREETDS_INCLUDE = @FREETDS_INCLUDE@ FREETDS_LDFLAGS = @FREETDS_LDFLAGS@ FREETDS_LIBS = @FREETDS_LIBS@ FREETDS_TEST = @FREETDS_TEST@ GREP = @GREP@ INGRES_INCLUDE = @INGRES_INCLUDE@ INGRES_LDFLAGS = @INGRES_LDFLAGS@ INGRES_LIBS = @INGRES_LIBS@ INGRES_TEST = @INGRES_TEST@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBADD_LIBDBI = @LIBADD_LIBDBI@ LIBDBI_LIBDIR = @LIBDBI_LIBDIR@ LIBDBI_TEST = @LIBDBI_TEST@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSQL_INCLUDE = @MSQL_INCLUDE@ MSQL_LDFLAGS = @MSQL_LDFLAGS@ MSQL_LIBS = @MSQL_LIBS@ MSQL_TEST = @MSQL_TEST@ MYSQL_CONFIG = @MYSQL_CONFIG@ MYSQL_INCLUDE = @MYSQL_INCLUDE@ MYSQL_LDFLAGS = @MYSQL_LDFLAGS@ MYSQL_LIBS = @MYSQL_LIBS@ MYSQL_TEST = @MYSQL_TEST@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ ORACLE_INCLUDE = @ORACLE_INCLUDE@ ORACLE_LDFLAGS = @ORACLE_LDFLAGS@ ORACLE_LIBS = @ORACLE_LIBS@ ORACLE_TEST = @ORACLE_TEST@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PGSQL_INCLUDE = @PGSQL_INCLUDE@ PGSQL_LDFLAGS = @PGSQL_LDFLAGS@ PGSQL_LIBS = @PGSQL_LIBS@ PGSQL_TEST = @PGSQL_TEST@ PG_CONFIG = @PG_CONFIG@ PROFILE = @PROFILE@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SQLITE3_INCLUDE = @SQLITE3_INCLUDE@ SQLITE3_LDFLAGS = @SQLITE3_LDFLAGS@ SQLITE3_LIBS = @SQLITE3_LIBS@ SQLITE3_TEST = @SQLITE3_TEST@ SQLITE_INCLUDE = @SQLITE_INCLUDE@ SQLITE_LDFLAGS = @SQLITE_LDFLAGS@ SQLITE_LIBS = @SQLITE_LIBS@ SQLITE_TEST = @SQLITE_TEST@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ dbi_dbdir = @dbi_dbdir@ docdir = @docdir@ docs_subdirs = @docs_subdirs@ driverdir = @driverdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = foreign SUBDIRS = mysql pgsql sqlite sqlite3 msql oracle firebird freetds ingres db2 all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign drivers/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign drivers/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(RECURSIVE_TARGETS) $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done cscopelist-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) cscopelist); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) \ cscopelist-recursive ctags-recursive install-am install-strip \ tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ cscopelist cscopelist-recursive ctags ctags-recursive \ distclean distclean-generic distclean-libtool distclean-tags \ distdir dvi dvi-am html html-am info info-am install \ install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-recursive uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: libdbi-drivers-0.9.0/drivers/mysql/000755 001750 001750 00000000000 12117473272 020120 5ustar00markusmarkus000000 000000 libdbi-drivers-0.9.0/drivers/pgsql/000755 001750 001750 00000000000 12117473272 020101 5ustar00markusmarkus000000 000000 libdbi-drivers-0.9.0/drivers/sqlite/000755 001750 001750 00000000000 12117473272 020254 5ustar00markusmarkus000000 000000 libdbi-drivers-0.9.0/drivers/sqlite3/000755 001750 001750 00000000000 12117473272 020337 5ustar00markusmarkus000000 000000 libdbi-drivers-0.9.0/drivers/msql/000755 001750 001750 00000000000 12117473272 017727 5ustar00markusmarkus000000 000000 libdbi-drivers-0.9.0/drivers/oracle/000755 001750 001750 00000000000 12117473272 020220 5ustar00markusmarkus000000 000000 libdbi-drivers-0.9.0/drivers/firebird/000755 001750 001750 00000000000 12117473272 020541 5ustar00markusmarkus000000 000000 libdbi-drivers-0.9.0/drivers/freetds/000755 001750 001750 00000000000 12117473273 020410 5ustar00markusmarkus000000 000000 libdbi-drivers-0.9.0/drivers/ingres/000755 001750 001750 00000000000 12117473273 020243 5ustar00markusmarkus000000 000000 libdbi-drivers-0.9.0/drivers/db2/000755 001750 001750 00000000000 12117473273 017423 5ustar00markusmarkus000000 000000 libdbi-drivers-0.9.0/drivers/db2/dbd_db2/000755 001750 001750 00000000000 12117473273 020703 5ustar00markusmarkus000000 000000 libdbi-drivers-0.9.0/drivers/db2/README000644 001750 001750 00000001052 11151642773 020301 0ustar00markusmarkus000000 000000 libdbi-drivers - drivers for libdbi, the Database Independent Abstraction Layer for C Copyright (C) 2005, E.X. Ample http://libdbi-drivers.sourceforge.net EXAMPLE DRIVER: -------------- A driver providing connectivity to Example databases using libexampleclient (http://www.example.org) NOTES: ------ CONTACT INFO: ------------- libdbi-drivers-devel@lists.sourceforge.net http://libdbi-drivers.sourceforge.net E.X. Ample $Id: README,v 1.1 2005/07/17 00:32:12 mhoenicka Exp $ libdbi-drivers-0.9.0/drivers/db2/Makefile.am000755 001750 001750 00000003155 11447472773 021477 0ustar00markusmarkus000000 000000 AUTOMAKE_OPTIONS = foreign docdir = $(datadir)/doc/$(PACKAGE)-$(VERSION) if HAVE_DB2 if BUILDDOCS htdocdir = $(docdir)/dbd_db2 doc_DATA = dbd_db2.pdf htdoc_DATA = dbd_db2/* else htdocdir = doc_DATA = htdoc_DATA = endif db2_ltlibs = libdbddb2.la db2_ldflags = -module -avoid-version db2_sources = dbd_db2.c else htdocdir = doc_DATA = htdoc_DATA = db2_ltlibs = db2_ldflags = db2_sources = endif INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/include @DBI_INCLUDE@ @DB2_INCLUDE@ libdir = $(driverdir) lib_LTLIBRARIES = $(db2_ltlibs) libdbddb2_la_LDFLAGS = $(db2_ldflags) @DB2_LDFLAGS@ @DB2_LIBS@ @LIBADD_LIBDBI@ libdbddb2_la_SOURCES = $(db2_sources) libdbddb2_la_DEPENDENCIES = dbd_db2.h EXTRA_DIST = dbd_db2.c dbd_db2.h AUTHORS TODO README dbd_db2.sgml dbd_db2.pdf dbd_db2/* dbd_db2.pdf: dbd_db2.sgml @echo "Converting dbd_db2.sgml to PDF..."; openjade -t tex -V tex-backend -d $(top_srcdir)/doc/include/doc-print.dsl dbd_db2.sgml # run jadetex three times to get the references right pdftex "&pdfjadetex" dbd_db2.tex pdftex "&pdfjadetex" dbd_db2.tex pdftex "&pdfjadetex" dbd_db2.tex dbd_db2/*: dbd_db2.sgml @echo "Converting dbd_db2.sgml to HTML..."; mkdir -p dbd_db2 && cd dbd_db2 && openjade -t sgml -d $(top_srcdir)/../doc/include/doc-html.dsl ../dbd_db2.sgml maintainer-clean: clean rm -f dbd_db2.pdf dbd_db2/* #distclean: clean # rm -f dbd_db2.pdf dbd_db2/* # manually install the docs #install-data-local: #if HAVE_DB2 # $(top_srcdir)/mkinstalldirs $(DESTDIR)$(doc_dir) $(DESTDIR)$(doc_dir)/$(htdoc_subdir) # @for f in $(noinst_DATA); do \ # $(INSTALL_DATA) $(srcdir)/$$f $(DESTDIR)$(doc_dir)/$$f; \ # done #endif libdbi-drivers-0.9.0/drivers/db2/Makefile.in000644 001750 001750 00000055312 12117467052 021474 0ustar00markusmarkus000000 000000 # Makefile.in generated by automake 1.12.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2012 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = drivers/db2 DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(top_srcdir)/depcomp AUTHORS TODO ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(docdir)" \ "$(DESTDIR)$(htdocdir)" LTLIBRARIES = $(lib_LTLIBRARIES) libdbddb2_la_LIBADD = am__libdbddb2_la_SOURCES_DIST = dbd_db2.c @HAVE_DB2_TRUE@am__objects_1 = dbd_db2.lo am_libdbddb2_la_OBJECTS = $(am__objects_1) libdbddb2_la_OBJECTS = $(am_libdbddb2_la_OBJECTS) libdbddb2_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(libdbddb2_la_LDFLAGS) $(LDFLAGS) -o $@ @HAVE_DB2_TRUE@am_libdbddb2_la_rpath = -rpath $(libdir) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(libdbddb2_la_SOURCES) DIST_SOURCES = $(am__libdbddb2_la_SOURCES_DIST) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac DATA = $(doc_DATA) $(htdoc_DATA) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DB2_INCLUDE = @DB2_INCLUDE@ DB2_LDFLAGS = @DB2_LDFLAGS@ DB2_LIBS = @DB2_LIBS@ DB2_TEST = @DB2_TEST@ DBI_INCLUDE = @DBI_INCLUDE@ DEBUG = @DEBUG@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FIREBIRD_INCLUDE = @FIREBIRD_INCLUDE@ FIREBIRD_ISQL = @FIREBIRD_ISQL@ FIREBIRD_ISQL_FLAG = @FIREBIRD_ISQL_FLAG@ FIREBIRD_LDFLAGS = @FIREBIRD_LDFLAGS@ FIREBIRD_LIBS = @FIREBIRD_LIBS@ FIREBIRD_TEST = @FIREBIRD_TEST@ FREETDS_INCLUDE = @FREETDS_INCLUDE@ FREETDS_LDFLAGS = @FREETDS_LDFLAGS@ FREETDS_LIBS = @FREETDS_LIBS@ FREETDS_TEST = @FREETDS_TEST@ GREP = @GREP@ INGRES_INCLUDE = @INGRES_INCLUDE@ INGRES_LDFLAGS = @INGRES_LDFLAGS@ INGRES_LIBS = @INGRES_LIBS@ INGRES_TEST = @INGRES_TEST@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBADD_LIBDBI = @LIBADD_LIBDBI@ LIBDBI_LIBDIR = @LIBDBI_LIBDIR@ LIBDBI_TEST = @LIBDBI_TEST@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSQL_INCLUDE = @MSQL_INCLUDE@ MSQL_LDFLAGS = @MSQL_LDFLAGS@ MSQL_LIBS = @MSQL_LIBS@ MSQL_TEST = @MSQL_TEST@ MYSQL_CONFIG = @MYSQL_CONFIG@ MYSQL_INCLUDE = @MYSQL_INCLUDE@ MYSQL_LDFLAGS = @MYSQL_LDFLAGS@ MYSQL_LIBS = @MYSQL_LIBS@ MYSQL_TEST = @MYSQL_TEST@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ ORACLE_INCLUDE = @ORACLE_INCLUDE@ ORACLE_LDFLAGS = @ORACLE_LDFLAGS@ ORACLE_LIBS = @ORACLE_LIBS@ ORACLE_TEST = @ORACLE_TEST@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PGSQL_INCLUDE = @PGSQL_INCLUDE@ PGSQL_LDFLAGS = @PGSQL_LDFLAGS@ PGSQL_LIBS = @PGSQL_LIBS@ PGSQL_TEST = @PGSQL_TEST@ PG_CONFIG = @PG_CONFIG@ PROFILE = @PROFILE@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SQLITE3_INCLUDE = @SQLITE3_INCLUDE@ SQLITE3_LDFLAGS = @SQLITE3_LDFLAGS@ SQLITE3_LIBS = @SQLITE3_LIBS@ SQLITE3_TEST = @SQLITE3_TEST@ SQLITE_INCLUDE = @SQLITE_INCLUDE@ SQLITE_LDFLAGS = @SQLITE_LDFLAGS@ SQLITE_LIBS = @SQLITE_LIBS@ SQLITE_TEST = @SQLITE_TEST@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ dbi_dbdir = @dbi_dbdir@ docdir = $(datadir)/doc/$(PACKAGE)-$(VERSION) docs_subdirs = @docs_subdirs@ driverdir = @driverdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = $(driverdir) libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = foreign @BUILDDOCS_FALSE@@HAVE_DB2_TRUE@htdocdir = @BUILDDOCS_TRUE@@HAVE_DB2_TRUE@htdocdir = $(docdir)/dbd_db2 @HAVE_DB2_FALSE@htdocdir = @BUILDDOCS_FALSE@@HAVE_DB2_TRUE@doc_DATA = @BUILDDOCS_TRUE@@HAVE_DB2_TRUE@doc_DATA = dbd_db2.pdf @HAVE_DB2_FALSE@doc_DATA = @BUILDDOCS_FALSE@@HAVE_DB2_TRUE@htdoc_DATA = @BUILDDOCS_TRUE@@HAVE_DB2_TRUE@htdoc_DATA = dbd_db2/* @HAVE_DB2_FALSE@htdoc_DATA = @HAVE_DB2_FALSE@db2_ltlibs = @HAVE_DB2_TRUE@db2_ltlibs = libdbddb2.la @HAVE_DB2_FALSE@db2_ldflags = @HAVE_DB2_TRUE@db2_ldflags = -module -avoid-version @HAVE_DB2_FALSE@db2_sources = @HAVE_DB2_TRUE@db2_sources = dbd_db2.c INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/include @DBI_INCLUDE@ @DB2_INCLUDE@ lib_LTLIBRARIES = $(db2_ltlibs) libdbddb2_la_LDFLAGS = $(db2_ldflags) @DB2_LDFLAGS@ @DB2_LIBS@ @LIBADD_LIBDBI@ libdbddb2_la_SOURCES = $(db2_sources) libdbddb2_la_DEPENDENCIES = dbd_db2.h EXTRA_DIST = dbd_db2.c dbd_db2.h AUTHORS TODO README dbd_db2.sgml dbd_db2.pdf dbd_db2/* all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign drivers/db2/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign drivers/db2/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ } uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libdbddb2.la: $(libdbddb2_la_OBJECTS) $(libdbddb2_la_DEPENDENCIES) $(EXTRA_libdbddb2_la_DEPENDENCIES) $(libdbddb2_la_LINK) $(am_libdbddb2_la_rpath) $(libdbddb2_la_OBJECTS) $(libdbddb2_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dbd_db2.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-docDATA: $(doc_DATA) @$(NORMAL_INSTALL) @list='$(doc_DATA)'; test -n "$(docdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(docdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(docdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(docdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(docdir)" || exit $$?; \ done uninstall-docDATA: @$(NORMAL_UNINSTALL) @list='$(doc_DATA)'; test -n "$(docdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(docdir)'; $(am__uninstall_files_from_dir) install-htdocDATA: $(htdoc_DATA) @$(NORMAL_INSTALL) @list='$(htdoc_DATA)'; test -n "$(htdocdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(htdocdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(htdocdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(htdocdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(htdocdir)" || exit $$?; \ done uninstall-htdocDATA: @$(NORMAL_UNINSTALL) @list='$(htdoc_DATA)'; test -n "$(htdocdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(htdocdir)'; $(am__uninstall_files_from_dir) ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(DATA) installdirs: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(docdir)" "$(DESTDIR)$(htdocdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-docDATA install-htdocDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-libLTLIBRARIES install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-docDATA uninstall-htdocDATA \ uninstall-libLTLIBRARIES .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libLTLIBRARIES clean-libtool cscopelist ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am \ install-docDATA install-dvi install-dvi-am install-exec \ install-exec-am install-htdocDATA install-html install-html-am \ install-info install-info-am install-libLTLIBRARIES \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \ uninstall-am uninstall-docDATA uninstall-htdocDATA \ uninstall-libLTLIBRARIES dbd_db2.pdf: dbd_db2.sgml @echo "Converting dbd_db2.sgml to PDF..."; openjade -t tex -V tex-backend -d $(top_srcdir)/doc/include/doc-print.dsl dbd_db2.sgml # run jadetex three times to get the references right pdftex "&pdfjadetex" dbd_db2.tex pdftex "&pdfjadetex" dbd_db2.tex pdftex "&pdfjadetex" dbd_db2.tex dbd_db2/*: dbd_db2.sgml @echo "Converting dbd_db2.sgml to HTML..."; mkdir -p dbd_db2 && cd dbd_db2 && openjade -t sgml -d $(top_srcdir)/../doc/include/doc-html.dsl ../dbd_db2.sgml maintainer-clean: clean rm -f dbd_db2.pdf dbd_db2/* #distclean: clean # rm -f dbd_db2.pdf dbd_db2/* # manually install the docs #install-data-local: #if HAVE_DB2 # $(top_srcdir)/mkinstalldirs $(DESTDIR)$(doc_dir) $(DESTDIR)$(doc_dir)/$(htdoc_subdir) # @for f in $(noinst_DATA); do \ # $(INSTALL_DATA) $(srcdir)/$$f $(DESTDIR)$(doc_dir)/$$f; \ # done #endif # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: libdbi-drivers-0.9.0/drivers/db2/AUTHORS000644 001750 001750 00000000322 11151642773 020470 0ustar00markusmarkus000000 000000 The following people have been involved in the DB2 driver development: Main developer: * Joao Henrique F. de Freitas $Id: AUTHORS,v 1.1 2005/07/17 00:32:12 mhoenicka Exp $ libdbi-drivers-0.9.0/drivers/db2/TODO000644 001750 001750 00000000615 11152576403 020112 0ustar00markusmarkus000000 000000 $Id: TODO,v 1.1 2005/07/17 00:32:12 mhoenicka Exp $ - DB2 custom functions - dbd_finalize - dbd_connect, need a better way to get environment variables - dbd_get_enconding - dbd_encoding_to_iana - dbd_list_dbs - dbd_list_tables: only tables - dbd_quote* functions - dbd_query_null - dbd_select_db - rework in sequence functions and documentatios the behavior - documentation and know issues libdbi-drivers-0.9.0/drivers/db2/dbd_db2.c000755 001750 001750 00000071462 12073360553 021061 0ustar00markusmarkus000000 000000 /* * libdbi - database independent abstraction layer for C. * Copyright (C) 2001-2002, David Parker and Mark Tobenkin. * http://libdbi.sourceforge.net * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * dbd_db2.c: DB2 database support * Copyright (C) 2008-2009, Joao Henrique F. de Freitas * http://libdbi.sourceforge.net * * Based on works from Christian M. Stamgren, Oracle's drivers author. * * $Id: dbd_db2.c,v 1.3 2013/01/09 21:30:19 mhoenicka Exp $ */ #ifdef HAVE_CONFIG_H #include #endif #define _GNU_SOURCE /* we need asprintf */ #ifndef HAVE_ATOLL long long atoll(const char *str); #endif #ifndef HAVE_STRTOLL long long strtoll(const char *nptr, char **endptr, int base); #endif #include #include #include #include #include #include #include #include #include "dbd_db2.h" static const dbi_info_t driver_info = { "db2", "IBM DB2 database support (using DB2 Call Level Interface)", "João Henrique F. Freitas ", "http://libdbi-drivers.sourceforge.net", "dbd_db2 v" VERSION, __DATE__ }; static const char *custom_functions[] = {NULL}; // TODO static const char *reserved_words[] = DB2_RESERVED_WORDS; /* encoding strings, array is terminated by a pair of empty strings */ static const char db2_encoding_hash[][16] = { /* Example, www.iana.org */ "ascii", "US-ASCII", "utf8", "UTF-8", "latin1", "ISO-8859-1", "", "" }; #define ROWSET_SIZE 35 SQLUINTEGER rowsFetchedNb; SQLUSMALLINT row_status[ROWSET_SIZE]; /* forward declarations of local functions */ //enum enum_field_types void _translate_db2_type(int fieldtype, short int scale, unsigned short *type, unsigned int *attribs); void _get_field_info(dbi_result_t *result); void _get_row_data(dbi_result_t *result, dbi_row_t *row, unsigned long long rowidx); void _set_error_handle(dbi_conn_t *conn, SQLSMALLINT htype, SQLHANDLE hndl); /* Driver Infrastructure Functions */ void dbd_register_driver(const dbi_info_t **_driver_info, const char ***_custom_functions, const char ***_reserved_words) { /* this is the first function called after the driver module is loaded into memory */ *_driver_info = &driver_info; *_custom_functions = custom_functions; *_reserved_words = reserved_words; } int dbd_initialize(dbi_driver_t *driver) { /* perform any database-specific server initialization. * this is called right after dbd_register_driver(). * return -1 on error, 0 on success. if -1 is returned, the driver will not * be added to the list of available drivers. */ /* this indicates the driver can be safely unloaded when libdbi is shut down. Change the value to '0' (zero) if the driver, or a library it is linked against, installs exit handlers via atexit() */ _dbd_register_driver_cap(driver, "safe_dlclose", 1); /* this indicates the database engine supports transactions */ _dbd_register_driver_cap(driver, "transaction_support", 1); /* this indicates the database engine supports savepoints */ _dbd_register_driver_cap(driver, "savepoint_support", 1); return 0; } int dbd_connect(dbi_conn_t *conn) { Db2conn *Dconn = malloc ( sizeof( Db2conn )); const char *username = dbi_conn_get_option(conn, "username"); const char *password = dbi_conn_get_option(conn, "password"); const char *dbalias = dbi_conn_get_option(conn, "dbname"); SQLRETURN cliRC = SQL_SUCCESS; //TODO: get something from environment? /* allocate an environment handle */ cliRC = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, (SQLHANDLE *) &(Dconn->env)); if (cliRC != SQL_SUCCESS) { _set_error_handle(conn, SQL_HANDLE_DBC, (SQLHANDLE) Dconn->con); _verbose_handler(conn, "Unable to initialize environment handle"); return -1; } /* set options */ cliRC = SQLSetEnvAttr((SQLHANDLE) Dconn->env, SQL_ATTR_ODBC_VERSION, (void *)SQL_OV_ODBC3, 0); if (cliRC != SQL_SUCCESS) { _set_error_handle(conn, SQL_HANDLE_DBC, (SQLHANDLE) Dconn->con); _verbose_handler(conn, "Unable to set ODBC3 attribute"); return -1; } // TODO: others options need to be set here. /* create a database connection */ /* allocate a database connection handle */ cliRC = SQLAllocHandle(SQL_HANDLE_DBC, (SQLHANDLE) Dconn->env, (SQLHANDLE *) &(Dconn->con)); if (cliRC != SQL_SUCCESS) { _set_error_handle(conn, SQL_HANDLE_DBC, (SQLHANDLE) Dconn->con); _verbose_handler(conn, "Unable to initialize connection handle"); return -1; } /* connect to the database */ cliRC = SQLConnect((SQLHANDLE) Dconn->con, (SQLCHAR *)dbalias, SQL_NTS, (SQLCHAR *)username, SQL_NTS, (SQLCHAR *)password, SQL_NTS); if (cliRC != SQL_SUCCESS) { _set_error_handle(conn, SQL_HANDLE_DBC, (SQLHANDLE) Dconn->con); _verbose_handler(conn, "Unable to login to the database."); return -1; } conn->connection = (void *)Dconn; return 0; } int dbd_disconnect(dbi_conn_t *conn) { /* close connection */ Db2conn *Dconn = conn->connection; SQLRETURN cliRC = SQL_SUCCESS; if (Dconn) { SQLDisconnect((SQLHANDLE) Dconn->con); if (cliRC != SQL_SUCCESS) { _set_error_handle(conn, SQL_HANDLE_DBC, (SQLHANDLE) Dconn->con); _verbose_handler(conn, "Unable to disconnect."); } SQLFreeHandle(SQL_HANDLE_DBC, (SQLHANDLE) Dconn->con); if (cliRC != SQL_SUCCESS) { _set_error_handle(conn, SQL_HANDLE_DBC, (SQLHANDLE) Dconn->con); _verbose_handler(conn, "Unable free connection handle."); } SQLFreeHandle(SQL_HANDLE_ENV, (SQLHANDLE) Dconn->env); if (cliRC != SQL_SUCCESS) { _set_error_handle(conn, SQL_HANDLE_ENV, (SQLHANDLE) Dconn->env); _verbose_handler(conn, "Unable free environment handle."); } free(conn->connection); } conn->connection = NULL; return 0; } int dbd_geterror(dbi_conn_t *conn, int *errno, char **errstr) { char *errbuf = NULL; SQLCHAR *message = NULL; SQLCHAR sqlstate[SQL_SQLSTATE_SIZE]; SQLINTEGER sqlcode; SQLSMALLINT length, i = 1; Db2conn *Dconn = conn->connection; message = (char *) malloc(SQL_MAX_MESSAGE_LENGTH); if (!message) { *errstr = strdup("Unable to allocate memory"); _error_handler(conn, DBI_ERROR_NOMEM); return 0; } if (!conn->connection || !Dconn->errorh) { *errstr = strdup("Unable to connect to database."); return 2; } else { SQLGetDiagRec( (SQLSMALLINT) Dconn->errorhtype, (SQLHANDLE) Dconn->errorh, (SQLSMALLINT) i, (SQLCHAR *) sqlstate, (SQLINTEGER *) &sqlcode, (SQLCHAR *) message, (SQLSMALLINT) SQL_MAX_MESSAGE_LENGTH, (SQLSMALLINT *) &length ); errbuf = (char *) malloc(sizeof(char *) * (SQL_SQLSTATE_SIZE + strlen(message) + 1)); if (!errbuf) { *errstr = strdup("Unable to allocate memory"); free(message); _error_handler(conn, DBI_ERROR_NOMEM); return 0; } sprintf(errbuf, "%s: %s\n", sqlstate, message); fprintf(stderr, "dbd_geterror buf: %s", errbuf); *errstr = strdup(errbuf); *errno = sqlcode; free(message); free(errbuf); } return 3; } int dbd_get_socket(dbi_conn_t *conn){ return 0; } /* Internal Database Query Functions */ int dbd_goto_row(dbi_result_t *result, unsigned long long rowidx, unsigned long long currowidx) { /* no-op */ return 1; } int dbd_fetch_row(dbi_result_t *result, unsigned long long rowidx) { dbi_row_t *row = NULL; if (result->result_state == NOTHING_RETURNED) return 0; if (result->result_state == ROWS_RETURNED) { /* get row here */ row = _dbd_row_allocate(result->numfields); _get_row_data(result, row, rowidx); _dbd_row_finalize(result, row, rowidx); } return 1; /* 0 on error, 1 on successful fetchrow */ } int dbd_free_query(dbi_result_t *result) { SQLRETURN cliRC = SQL_SUCCESS; if (result->result_handle) { cliRC = SQLFreeHandle(SQL_HANDLE_STMT, (SQLHANDLE) result->result_handle); if (cliRC != SQL_SUCCESS) { _set_error_handle(result->conn, SQL_HANDLE_STMT, (SQLHANDLE) result->result_handle); _dbd_internal_error_handler(result->conn, "Unable free handle.", DBI_ERROR_DBD); } } result->result_handle = NULL; return 0; } /* Public Database Query Functions */ const char *dbd_get_encoding(dbi_conn_t *conn){ /* return connection encoding as an IANA name */ return "UTF-8"; } const char* dbd_encoding_to_iana(const char *db_encoding) { int i = 0; /* loop over all even entries in hash and compare to menc */ while (*db2_encoding_hash[i]) { if (!strncmp(db2_encoding_hash[i], db_encoding, strlen(db2_encoding_hash[i]))) { /* return corresponding odd entry */ return db2_encoding_hash[i+1]; } i+=2; } /* don't know how to translate, return original encoding */ return db_encoding; } const char* dbd_encoding_from_iana(const char *iana_encoding) { int i = 0; /* loop over all odd entries in hash and compare to ienc */ while (*db2_encoding_hash[i+1]) { if (!strcmp(db2_encoding_hash[i+1], iana_encoding)) { /* return corresponding even entry */ return db2_encoding_hash[i]; } i+=2; } /* don't know how to translate, return original encoding */ return iana_encoding; } char *dbd_get_engine_version(dbi_conn_t *conn, char *versionstring) { Db2conn *Dconn = conn->connection; SQLRETURN cliRC = SQL_SUCCESS; SQLCHAR verInfoBuf[255]; SQLSMALLINT outlen; *versionstring = '\0'; cliRC = SQLGetInfo((SQLHANDLE) Dconn->con, SQL_DBMS_VER, verInfoBuf, 255, &outlen); if (cliRC != SQL_SUCCESS) { _set_error_handle(conn, SQL_HANDLE_DBC, (SQLHANDLE) Dconn->con); _verbose_handler(conn, "Unable to allocate statement handle."); return versionstring; } /* SQL_DBMS_VER is mm.vv.rrrr always less than VERSIONSTRING_LENGTH */ strncpy(versionstring, verInfoBuf, outlen); versionstring[outlen+1] = '\0'; return versionstring; } dbi_result_t *dbd_list_dbs(dbi_conn_t *conn, const char *pattern) { /* return a list of available databases. If pattern is non-NULL, return only the databases that match. Return NULL if an error occurs */ return dbd_query(conn, "SELECT datname FROM pg_database");; } dbi_result_t *dbd_list_tables(dbi_conn_t *conn, const char *db, const char *pattern) { /* return a list of available tables. If pattern is non-NULL, return only the tables that match */ Db2conn *Dconn = conn->connection; SQLHANDLE hstmt; SQLRETURN cliRC = SQL_SUCCESS; dbi_result_t *result; /* * We just ignore the db param, * Oracle can't read from diffrent databases at runtime. */ cliRC = SQLAllocHandle(SQL_HANDLE_STMT, (SQLHANDLE) Dconn->con, &hstmt); if (cliRC != SQL_SUCCESS) { _set_error_handle(conn, SQL_HANDLE_STMT, (SQLHANDLE) Dconn->con); _verbose_handler(conn, "Unable to allocate statement handle."); return NULL; } if (pattern == NULL) { cliRC = SQLTables(hstmt, NULL, 0, NULL, 0, NULL, 0, NULL, 0); } else { SQLCHAR tbSchemaPattern[] = "%"; SQLCHAR *tbNamePattern = (SQLCHAR *) pattern; cliRC = SQLTables(hstmt, NULL, 0, tbSchemaPattern, SQL_NTS, tbNamePattern, SQL_NTS, NULL, 0); } if (cliRC != SQL_SUCCESS) { _set_error_handle(conn, SQL_HANDLE_DBC, (SQLHANDLE) Dconn->con); _verbose_handler(conn, "Unable to query tables."); return NULL; } /* How I can count the result set returned by SQLTables? */ result = _dbd_result_create(conn, (void *)hstmt, (unsigned long long)100, (unsigned long long)0); /* Always 5 fields: * TABLE_CAT TABLE_SCHEM TABLE_NAME TABLE_TYPE REMARKS */ _dbd_result_set_numfields(result, (unsigned int) 5); _get_field_info(result); /* TODO: return only the TABLE_NAME field * get all TABLE_NAME and put in stringarray and * use _dbd_result_create_from_stringarray to build a result * alloc stringarray * if(result && dbi_result_next_row(result)){ stringarray[x] = dbi_result_get_string_idx(result,3); x++; } if(result) dbi_result_free(result); result = _dbd_result_create_from_stringarray(conn, x, *stringarray) */ return result; } size_t dbd_quote_string(dbi_driver_t *driver, const char *orig, char *dest) { /* foo's -> 'foo\'s' */ /* driver-specific, deprecated */ return 0; } size_t dbd_conn_quote_string(dbi_conn_t *conn, const char *orig, char *dest) { /* foo's -> 'foo\'s' */ /* connection-specific. Should take character encoding of current connection into account if db engine supports this */ return 0; } // TODO: xxx //size_t dbd_quote_binary(dbi_conn_t *conn, const char* orig, size_t from_length, char **ptr_dest) { size_t dbd_quote_binary(dbi_conn_t *conn, const unsigned char *orig, size_t from_length, unsigned char **ptr_dest ) { /* *ptr_dest shall point to a zero-terminated string that can be used in SQL queries. Returns the lenght of that string in bytes, or DBI_LENGTH_ERROR in case of an error */ return DBI_LENGTH_ERROR; } dbi_result_t *dbd_query(dbi_conn_t *conn, const char *statement) { /* allocate a new dbi_result_t and fill its applicable members: * * result_handle, numrows_matched, and numrows_changed. * everything else will be filled in by DBI */ Db2conn *Dconn = conn->connection; SQLHANDLE hstmt; SQLSMALLINT numfields = 0; unsigned long long numrows = 0; SQLINTEGER affectedrows = 0; SQLSMALLINT strLenPtr; SQLRETURN cliRC = SQL_SUCCESS; dbi_result_t *result; char *countquery = NULL; cliRC = SQLAllocHandle(SQL_HANDLE_STMT, (SQLHANDLE) Dconn->con, &hstmt); if (cliRC != SQL_SUCCESS) { _set_error_handle(conn, SQL_HANDLE_DBC, (SQLHANDLE) Dconn->con); _verbose_handler(conn, "Unable to allocate statement handle."); return NULL; } /* TODO: config option to select SQLExecute or ExecuteDirect */ cliRC = SQLPrepare(hstmt, (char *) statement, SQL_NTS); if (cliRC != SQL_SUCCESS) { _set_error_handle(conn, SQL_HANDLE_STMT, (SQLHANDLE) Dconn->con); return NULL; } cliRC = SQLNumResultCols(hstmt, &numfields); if (cliRC != SQL_SUCCESS) { _set_error_handle(conn, SQL_HANDLE_STMT, (SQLHANDLE) hstmt); return NULL; } // This query is INSERT, UPDATE or DELETE? if (numfields < 1) { cliRC = SQLExecute(hstmt); if (cliRC != SQL_SUCCESS) { _set_error_handle(conn, SQL_HANDLE_STMT, (SQLHANDLE) hstmt); return NULL; } cliRC = SQLRowCount((SQLHANDLE) hstmt, &affectedrows); if (cliRC != SQL_SUCCESS) { _set_error_handle(conn, SQL_HANDLE_STMT, (SQLHANDLE) hstmt); return NULL; } } else { // Counting rows countquery = malloc(strlen(statement) + 25 +1); if (!countquery) { _error_handler(conn, DBI_ERROR_NOMEM); return NULL; } sprintf(countquery, "SELECT COUNT(*) FROM (%s)", statement); cliRC = SQLPrepare(hstmt, (char *) countquery, SQL_NTS); if (cliRC != SQL_SUCCESS) { _set_error_handle(conn, SQL_HANDLE_STMT, (SQLHANDLE) Dconn->con); return NULL; } cliRC = SQLExecute(hstmt); if (cliRC != SQL_SUCCESS) { _set_error_handle(conn, SQL_HANDLE_STMT, (SQLHANDLE) hstmt); return NULL; } // How many rows we have? cliRC = SQLFetch(hstmt); if(cliRC != SQL_SUCCESS) { _set_error_handle(conn, SQL_HANDLE_STMT, (SQLHANDLE) hstmt); return NULL; } SQLINTEGER rows; SQLINTEGER res_size = 0; cliRC = SQLGetData ((SQLHANDLE) hstmt, 1, SQL_C_LONG, &rows, sizeof(SQLINTEGER), &res_size); if(cliRC != SQL_SUCCESS) { _set_error_handle(conn, SQL_HANDLE_STMT, (SQLHANDLE) hstmt); return NULL; } numrows = (unsigned long long) rows; SQLFreeHandle(SQL_HANDLE_STMT, hstmt); cliRC = SQLAllocHandle(SQL_HANDLE_STMT, (SQLHANDLE) Dconn->con, &hstmt); if (cliRC != SQL_SUCCESS) { _set_error_handle(conn, SQL_HANDLE_DBC, (SQLHANDLE) Dconn->con); return NULL; } free(countquery); // Execute the statement cliRC = SQLPrepare(hstmt, (char *) statement, SQL_NTS); if (cliRC != SQL_SUCCESS) { _set_error_handle(conn, SQL_HANDLE_STMT, (SQLHANDLE) Dconn->con); return NULL; } cliRC = SQLExecute(hstmt); if (cliRC != SQL_SUCCESS) { _set_error_handle(conn, SQL_HANDLE_STMT, (SQLHANDLE) hstmt); return NULL; } } result = _dbd_result_create(conn, (void *)hstmt, (unsigned long long)numrows, (unsigned long long)affectedrows); _dbd_result_set_numfields(result, (unsigned int)numfields); _get_field_info(result); return result; } dbi_result_t *dbd_query_null(dbi_conn_t *conn, const unsigned char *statement, size_t st_length) { /* run query using a query string that may contain NULL bytes */ return NULL; } int dbd_transaction_begin(dbi_conn_t *conn) { /* starting a transaction (or rather a unit of work) appears to be implicit in DB2. Just do nothing and succeed */ return 0; } int dbd_transaction_commit(dbi_conn_t *conn) { if (dbd_query(conn, "COMMIT") == NULL) { return 1; } else { return 0; } } int dbd_transaction_rollback(dbi_conn_t *conn) { if (dbd_query(conn, "ROLLBACK") == NULL) { return 1; } else { return 0; } } int dbd_savepoint(dbi_conn_t *conn, const char *savepoint) { char* query; if (!savepoint) { return 1; } asprintf(&query, "SAVEPOINT %s", savepoint); if (dbd_query(conn, query) == NULL) { free(query); return 1; } else { free(query); return 0; } } int dbd_rollback_to_savepoint(dbi_conn_t *conn, const char *savepoint) { char* query; if (!savepoint) { return 1; } asprintf(&query, "ROLLBACK TO SAVEPOINT %s", savepoint); if (dbd_query(conn, query) == NULL) { free(query); return 1; } else { free(query); return 0; } } int dbd_release_savepoint(dbi_conn_t *conn, const char *savepoint) { char* query; if (!savepoint) { return 1; } asprintf(&query, "RELEASE SAVEPOINT %s", savepoint); if (dbd_query(conn, query) == NULL) { free(query); return 1; } else { free(query); return 0; } } const char *dbd_select_db(dbi_conn_t *conn, const char *db) { /* make the requested database the current database */ return NULL; } unsigned long long dbd_get_seq_last(dbi_conn_t *conn, const char *sequence) { /* return ID of last INSERT */ unsigned long long seq = 0; char *sql; dbi_result_t *res; asprintf(&sql, "SELECT PREVIOUS VALUE FOR %s", sequence); res = dbd_query(conn, sql); free(sql); if(res && dbi_result_next_row(res)) seq = dbi_result_get_int_idx(res,1); if(res) dbi_result_free(res); return seq; } unsigned long long dbd_get_seq_next(dbi_conn_t *conn, const char *sequence) { /* return ID of next INSERT */ unsigned long long seq = 0; char *sql; dbi_result_t *res; asprintf(&sql, "SELECT NEXT VALUE FOR %s", sequence); res = dbd_query(conn, sql); free(sql); if(res && dbi_result_next_row(res)) seq = dbi_result_get_int_idx(res,1); if(res) dbi_result_free(res); return seq; } int dbd_ping(dbi_conn_t *conn) { /* return 1 if connection is alive, otherwise 0 */ int test = 0; dbi_result_t *res; res = dbd_query(conn, "SELECT 1"); if(res && dbi_result_next_row(res)) test = dbi_result_get_int_idx(res,1); if(res) dbi_result_free(res); return test; } void _translate_db2_type(int fieldtype, short int scale, unsigned short *type, unsigned int *attribs) { unsigned int _type = 0; unsigned int _attribs = 0; switch (fieldtype) { case SQL_DECIMAL: case SQL_NUMERIC: case SQL_DECFLOAT: case SQL_CHAR: case SQL_LONGVARCHAR: case SQL_VARCHAR: case SQL_CLOB: _type = DBI_TYPE_STRING; break; case SQL_TINYINT: _type = DBI_TYPE_INTEGER; _attribs |= DBI_INTEGER_SIZE1; break; case SQL_INTEGER: _type = DBI_TYPE_INTEGER; _attribs |= DBI_INTEGER_SIZE4; break; case SQL_BIGINT: _type = DBI_TYPE_INTEGER; _attribs |= DBI_INTEGER_SIZE8; break; case SQL_SMALLINT: _type = DBI_TYPE_INTEGER; _attribs |= DBI_INTEGER_SIZE2; break; case SQL_FLOAT: _type = DBI_TYPE_DECIMAL; _attribs |= DBI_DECIMAL_SIZE4; break; case SQL_REAL: _type = DBI_TYPE_DECIMAL; _attribs |= DBI_DECIMAL_SIZE4; break; case SQL_DOUBLE: _type = DBI_TYPE_DECIMAL; _attribs |= DBI_DECIMAL_SIZE8; break; case SQL_TYPE_DATE: _type = DBI_TYPE_DATETIME; _attribs |= DBI_DATETIME_DATE; break; case SQL_TYPE_TIME: _type = DBI_TYPE_DATETIME; _attribs = DBI_DATETIME_TIME; break; case SQL_TYPE_TIMESTAMP: _type = DBI_TYPE_DATETIME; _attribs |= DBI_DATETIME_DATE; _attribs |= DBI_DATETIME_TIME; break; case SQL_XML: case SQL_BIT: case SQL_BLOB: case SQL_VARBINARY: case SQL_LONGVARBINARY: case SQL_BINARY: _type = DBI_TYPE_BINARY; break; case SQL_WCHAR: case SQL_WVARCHAR: case SQL_WLONGVARCHAR: case SQL_LONGVARGRAPHIC: //case SQL_WLONGVARGRAPHIC: case SQL_GRAPHIC: case SQL_CLOB_LOCATOR: case SQL_BLOB_LOCATOR: case SQL_DBCLOB: case SQL_DBCLOB_LOCATOR: case SQL_VARGRAPHIC: case SQL_UNKNOWN_TYPE: default: _type = DBI_TYPE_STRING; break; } *type = _type; *attribs = _attribs; fprintf(stderr, "DB2: type '%d' scale '%d'\n", fieldtype, scale); fprintf(stderr, "libdbi: type '%d' att '%d'\n", _type, _attribs); } void _get_field_info(dbi_result_t *result) { /* retrieve field meta info */ unsigned int idx = 0; unsigned short fieldtype; unsigned int fieldattribs; char* col_name_dbi; Db2conn *Dconn = (Db2conn *) result->conn->connection; SQLHANDLE *hstmt = (SQLHANDLE *) result->result_handle; SQLCHAR fieldname[32]; SQLSMALLINT fieldnamelen; SQLSMALLINT type; SQLUINTEGER size; SQLSMALLINT scale; SQLRETURN cliRC = SQL_SUCCESS; while (idx < result->numfields) { cliRC = SQLDescribeCol( (SQLHANDLE) hstmt, (SQLSMALLINT)(idx + 1), fieldname, sizeof(fieldname), &fieldnamelen, &type, &size, &scale, NULL); if (cliRC != SQL_SUCCESS) { _set_error_handle(result->conn, SQL_HANDLE_STMT, (SQLHANDLE) hstmt); } _verbose_handler(result->conn, "field info %s %d %d\n", fieldname, type, size); _translate_db2_type(type, scale, &fieldtype, &fieldattribs); _dbd_result_add_field(result, idx, fieldname, fieldtype, fieldattribs); idx++; } } void _get_row_data(dbi_result_t *result, dbi_row_t *row, unsigned long long rowidx) { /* get data of the current row */ SQLHANDLE *hstmt = (SQLHANDLE *) result->result_handle; Db2conn *Dconn = (Db2conn *) result->conn->connection; SQLINTEGER curfield = 0; SQLRETURN cliRC = SQL_SUCCESS; SQLPOINTER *ptr = NULL; SQLINTEGER size_raw = 0; SQLINTEGER res_size = 0; SQLINTEGER strlen_or_indptr; dbi_data_t *data; unsigned int sizeattrib = 0; unsigned int attribs = 0; size_t strsize = 0; const char *ptr_date; union { SQLDOUBLE dbl; SQLREAL real; SQLINTEGER integer; SQLSMALLINT smallint; DATE_STRUCT date; TIME_STRUCT time; TIMESTAMP_STRUCT timestamp; } ptr_value; _verbose_handler(result->conn, "numfields '%d' curfield '%d' rowidx '%d' field_type '%d'\n", result->numfields, curfield, rowidx + 1, result->field_types[curfield]); cliRC = SQLFetch((SQLHANDLE) hstmt); if(cliRC != SQL_SUCCESS) { _set_error_handle(result->conn, SQL_HANDLE_STMT, (SQLHANDLE) hstmt); return; } #define CALL_SQL_GET_DATA(ptr, type, len) \ cliRC = SQLGetData( \ (SQLHSTMT) hstmt, \ (SQLUSMALLINT) curfield + 1, \ (SQLSMALLINT) type, \ (SQLPOINTER) ptr, \ (SQLINTEGER) len, \ (SQLINTEGER*) &strlen_or_indptr \ ); #define RETVAL \ if (strlen_or_indptr == SQL_NULL_DATA) { \ _set_field_flag( row, curfield, DBI_VALUE_NULL, 1); \ break; \ } \ while (curfield < result->numfields) { data = &row->field_values[curfield]; row->field_sizes[curfield] = 0; /* will be set to strlen later on for strings */ data = &row->field_values[curfield]; row->field_sizes[curfield] = 0; /* will be set to strlen later on for strings */ switch (result->field_types[curfield]) { case DBI_TYPE_INTEGER: switch (result->field_attribs[curfield] & DBI_INTEGER_SIZEMASK) { case DBI_INTEGER_SIZE1: CALL_SQL_GET_DATA(&ptr_value, SQL_C_CHAR, sizeof(SQLCHAR)); RETVAL data->d_char = (char) ptr_value.smallint; break; case DBI_INTEGER_SIZE2: CALL_SQL_GET_DATA(&ptr_value, SQL_C_SHORT, sizeof(SQLSMALLINT)); RETVAL data->d_short = (short) ptr_value.smallint; break; case DBI_INTEGER_SIZE3: case DBI_INTEGER_SIZE4: CALL_SQL_GET_DATA(&ptr_value, SQL_C_LONG, sizeof(SQLINTEGER)); RETVAL data->d_long = (int) ptr_value.integer; break; case DBI_INTEGER_SIZE8: // SQL_BIGINT is a string! ptr = (SQLPOINTER) malloc(200); CALL_SQL_GET_DATA(ptr, SQL_C_CHAR, 200); RETVAL data->d_longlong = atoll((const char *)ptr); free((SQLPOINTER)ptr); break; default: break; } break; case DBI_TYPE_DECIMAL: switch (result->field_attribs[curfield] & DBI_DECIMAL_SIZEMASK) { case DBI_DECIMAL_SIZE4: CALL_SQL_GET_DATA(&ptr_value, SQL_C_FLOAT, sizeof(SQLREAL)); RETVAL data->d_float = (float) ptr_value.real; break; case DBI_DECIMAL_SIZE8: CALL_SQL_GET_DATA(&ptr_value, SQL_C_DOUBLE, sizeof(SQLDOUBLE)); RETVAL data->d_double = (double) ptr_value.dbl; break; default: break; } break; case DBI_TYPE_STRING: ptr = (SQLPOINTER) malloc(100); CALL_SQL_GET_DATA(ptr, SQL_C_CHAR, 100); RETVAL data->d_string = strdup((char *)ptr); free((SQLPOINTER)ptr); row->field_sizes[curfield] = 100; break; case DBI_TYPE_BINARY: ptr = (SQLPOINTER) malloc(100); CALL_SQL_GET_DATA(ptr, SQL_C_CHAR, 100); RETVAL data->d_string = strdup((char *)ptr); free((SQLPOINTER)ptr); row->field_sizes[curfield] = 100; break; case DBI_TYPE_DATETIME: ptr_date = malloc(sizeof(char *) * 20); attribs = result->field_attribs[curfield]; switch(attribs & (DBI_DATETIME_DATE|DBI_DATETIME_TIME)) { case DBI_DATETIME_DATE: CALL_SQL_GET_DATA(&ptr_value, SQL_C_TYPE_DATE, sizeof(DATE_STRUCT)); snprintf(ptr_date, 11, "%d-%d-%d", ptr_value.date.year, ptr_value.date.month, ptr_value.date.day); break; case DBI_DATETIME_TIME: CALL_SQL_GET_DATA(&ptr_value, SQL_C_TYPE_TIME, sizeof(TIME_STRUCT)); snprintf(ptr_date, 9, "%.2d:%.2d:%.2d", ptr_value.time.hour, ptr_value.time.minute, ptr_value.time.second); break; case DBI_DATETIME_DATE | DBI_DATETIME_TIME: CALL_SQL_GET_DATA(&ptr_value, SQL_C_TYPE_TIMESTAMP, sizeof(TIMESTAMP_STRUCT)); snprintf(ptr_date, 20, "%d-%-d-%d %.2d:%.2d:%.2d", ptr_value.timestamp.year, ptr_value.timestamp.month, ptr_value.timestamp.day, ptr_value.timestamp.hour, ptr_value.timestamp.minute, ptr_value.timestamp.second); break; default: break; } data->d_datetime = _dbd_parse_datetime(ptr_date, attribs); free((char *) ptr_date); break; default: break; } curfield++; } #undef CALL_SQL_GET_DATA #undef RETVAL } void _set_error_handle(dbi_conn_t *conn, SQLSMALLINT htype, SQLHANDLE hndl) { Db2conn *Dconn = conn->connection; /* We need the handle to get error messages and status code */ Dconn->errorhtype = htype; Dconn->errorh = (SQLHANDLE *) hndl; } libdbi-drivers-0.9.0/drivers/db2/dbd_db2.h000755 001750 001750 00000007517 11151642773 021071 0ustar00markusmarkus000000 000000 /* * libdbi - database independent abstraction layer for C. * Copyright (C) 2001-2002, David Parker and Mark Tobenkin. * http://libdbi.sourceforge.net * * dbd_example.c: Example database support (using libexampleclient) * Copyright (C) 2005, E.X. Ample . * http://libdbi.sourceforge.net * * $Id: dbd_db2.h,v 1.1 2009/02/27 01:46:35 joaohf Exp $ */ #ifndef __DBD_DB2_H__ #define __DBD_DB2_H__ typedef struct Db2conn_ { SQLHANDLE *env; /* environment handle */ SQLHANDLE *con; /* connection handle */ SQLHANDLE *errorh; /* active error handle */ SQLSMALLINT errorhtype; } Db2conn; #define DB2_RESERVED_WORDS { \ "ACTION", \ "ADD", \ "AGGREGATE", \ "ALL", \ "ALTER", \ "AFTER", \ "AND", \ "AS", \ "ASC", \ "AVG", \ "AVG_ROW_LENGTH", \ "AUTO_INCREMENT", \ "BETWEEN", \ "BIGINT", \ "BIT", \ "BINARY", \ "BLOB", \ "BOOL", \ "BOTH", \ "BY", \ "CASCADE", \ "CASE", \ "CHAR", \ "CHARACTER", \ "CHANGE", \ "CHECK", \ "CHECKSUM", \ "COLUMN", \ "COLUMNS", \ "COMMENT", \ "CONSTRAINT", \ "CREATE", \ "CROSS", \ "CURRENT_DATE", \ "CURRENT_TIME", \ "CURRENT_TIMESTAMP", \ "DATA", \ "DATABASE", \ "DATABASES", \ "DATE", \ "DATETIME", \ "DAY", \ "DAY_HOUR", \ "DAY_MINUTE", \ "DAY_SECOND", \ "DAYOFMONTH", \ "DAYOFWEEK", \ "DAYOFYEAR", \ "DEC", \ "DECIMAL", \ "DEFAULT", \ "DELAYED", \ "DELAY_KEY_WRITE", \ "DELETE", \ "DESC", \ "DESCRIBE", \ "DISTINCT", \ "DISTINCTROW", \ "DOUBLE", \ "DROP", \ "END", \ "ELSE", \ "ESCAPE", \ "ESCAPED", \ "ENCLOSED", \ "ENUM", \ "EXPLAIN", \ "EXISTS", \ "FIELDS", \ "FILE", \ "FIRST", \ "FLOAT", \ "FLOAT4", \ "FLOAT8", \ "FLUSH", \ "FOREIGN", \ "FROM", \ "FOR", \ "FULL", \ "FUNCTION", \ "GLOBAL", \ "GRANT", \ "GRANTS", \ "GROUP", \ "HAVING", \ "HEAP", \ "HIGH_PRIORITY", \ "HOUR", \ "HOUR_MINUTE", \ "HOUR_SECOND", \ "HOSTS", \ "IDENTIFIED", \ "IGNORE", \ "IN", \ "INDEX", \ "INFILE", \ "INNER", \ "INSERT", \ "INSERT_ID", \ "INT", \ "INTEGER", \ "INTERVAL", \ "INT1", \ "INT2", \ "INT3", \ "INT4", \ "INT8", \ "INTO", \ "IF", \ "IS", \ "ISAM", \ "JOIN", \ "KEY", \ "KEYS", \ "KILL", \ "LAST_INSERT_ID", \ "LEADING", \ "LEFT", \ "LENGTH", \ "LIKE", \ "LINES", \ "LIMIT", \ "LOAD", \ "LOCAL", \ "LOCK", \ "LOGS", \ "LONG", \ "LONGBLOB", \ "LONGTEXT", \ "LOW_PRIORITY", \ "MAX", \ "MAX_ROWS", \ "MATCH", \ "MEDIUMBLOB", \ "MEDIUMTEXT", \ "MEDIUMINT", \ "MIDDLEINT", \ "MIN_ROWS", \ "MINUTE", \ "MINUTE_SECOND", \ "MODIFY", \ "MONTH", \ "MONTHNAME", \ "MYISAM", \ "NATURAL", \ "NUMERIC", \ "NO", \ "NOT", \ "NULL", \ "ON", \ "OPTIMIZE", \ "OPTION", \ "OPTIONALLY", \ "OR", \ "ORDER", \ "OUTER", \ "OUTFILE", \ "PACK_KEYS", \ "PARTIAL", \ "PASSWORD", \ "PRECISION", \ "PRIMARY", \ "PROCEDURE", \ "PROCESS", \ "PROCESSLIST", \ "PRIVILEGES", \ "READ", \ "REAL", \ "REFERENCES", \ "RELOAD", \ "REGEXP", \ "RENAME", \ "REPLACE", \ "RESTRICT", \ "RETURNS", \ "REVOKE", \ "RLIKE", \ "ROW", \ "ROWS", \ "SECOND", \ "SELECT", \ "SET", \ "SHOW", \ "SHUTDOWN", \ "SMALLINT", \ "SONAME", \ "SQL_BIG_TABLES", \ "SQL_BIG_SELECTS", \ "SQL_LOW_PRIORITY_UPDATES", \ "SQL_LOG_OFF", \ "SQL_LOG_UPDATE", \ "SQL_SELECT_LIMIT", \ "SQL_SMALL_RESULT", \ "SQL_BIG_RESULT", \ "SQL_WARNINGS", \ "STRAIGHT_JOIN", \ "STARTING", \ "STATUS", \ "STRING", \ "TABLE", \ "TABLES", \ "TEMPORARY", \ "TERMINATED", \ "TEXT", \ "THEN", \ "TIME", \ "TIMESTAMP", \ "TINYBLOB", \ "TINYTEXT", \ "TINYINT", \ "TRAILING", \ "TO", \ "TYPE", \ "USE", \ "USING", \ "UNIQUE", \ "UNLOCK", \ "UNSIGNED", \ "UPDATE", \ "USAGE", \ "VALUES", \ "VARCHAR", \ "VARIABLES", \ "VARYING", \ "VARBINARY", \ "WITH", \ "WRITE", \ "WHEN", \ "WHERE", \ "YEAR", \ "YEAR_MONTH", \ "ZEROFILL", \ NULL } #endif /* __DBD_DB2_H__ */ libdbi-drivers-0.9.0/drivers/db2/dbd_db2.sgml000755 001750 001750 00000004300 11424120566 021561 0ustar00markusmarkus000000 000000 example driver manual A libdbi driver providing connectivity to Example databases using libexampleclient. E. X. Ample
    example@users.sourceforge.net
    0.1 2002-11-5
    Preface libdbi is a database abstraction layer written in C. It implements a framework that can utilize separate driver libraries for specific database servers. The libdbi-drivers project provides the drivers necessary to talk to the supported database servers. This manual provides information about the Example driver. The manual is intended for programmers who write applications linked against libdbi and who want their applications to work with the Example driver. Questions and comments about the Example driver should be sent to the libdbi-drivers-devel mailing list. Visit the libdbi-drivers-devel list page to subscribe and for further information. Questions and comments about the libdbi library should be sent to the appropriate libdbi mailing list. The Example driver is maintained by E.X. Ample. Introduction Installation Driver options Peculiarities you should know about
    libdbi-drivers-0.9.0/drivers/db2/dbd_db2.pdf000644 001750 001750 00000202355 12117467207 021405 0ustar00markusmarkus000000 000000 %PDF-1.4 1 0 obj << /S /GoTo /D (1.0) >> endobj 4 0 obj (example driver manual) endobj 5 0 obj << /S /GoTo /D (2.0) >> endobj 8 0 obj (Table of Contents) endobj 9 0 obj << /S /GoTo /D (3.0) >> endobj 12 0 obj (Preface) endobj 13 0 obj << /S /GoTo /D (4.0) >> endobj 16 0 obj (Chapter 1. Introduction) endobj 17 0 obj << /S /GoTo /D (5.0) >> endobj 20 0 obj (Chapter 2. Installation) endobj 21 0 obj << /S /GoTo /D (6.0) >> endobj 24 0 obj (Chapter 3. Driver options) endobj 25 0 obj << /S /GoTo /D (7.0) >> endobj 28 0 obj (Chapter 4. Peculiarities you should know about) endobj 29 0 obj << /S /GoTo /D [30 0 R /Fit ] >> endobj 32 0 obj << /Length 327 /Filter /FlateDecode >> stream xÚRËnà ¼û+8ÚoÙ5/ßšJi¥ž}«zpl!ùÅvÔþ}ÁDVú8THÀ.ìÌÎ2î2  ¿".XÓ'œüÑK‚·+B) ‰Êœæ²ÐPR,¿yª’‡gŒè’UG†šƒ)™2H)ŸlßR›¡L?êþÜÙ,'mÒöâ®ö÷}=dÈÓ¥î²÷ê5ÂqPÒȘ+š—’å‚ œVÀ],íÜ¡=¸ßçKF<Ãtu­N1ÝŒÃ`›Ù]Ýü3ó8YŽ|Óšå¤ÀHU¬$ûo×s}¨';Åp™6Tßľ&vÎ3lr<:¡Ñöž± JÒ‘ "ÔnåÛÊJ)iuAJ(t¨#‚ÅOW—Ék÷áÓ¸¬ê{\MXÓ¾UoqÂSì8’}µ=ïíý›ýû{|ùk“·endstream endobj 30 0 obj << /Type /Page /Contents 32 0 R /Resources 31 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 39 0 R >> endobj 33 0 obj << /D [30 0 R /XYZ 71.731 741.2204 null] >> endobj 34 0 obj << /D [30 0 R /XYZ 71.731 706.3512 null] >> endobj 35 0 obj << /D [30 0 R /XYZ 71.731 706.3512 null] >> endobj 2 0 obj << /D [30 0 R /XYZ 438.8825 688.2669 null] >> endobj 31 0 obj << /Font << /F24 38 0 R >> /ProcSet [ /PDF /Text ] >> endobj 42 0 obj << /Length 299 /Filter /FlateDecode >> stream xÚQËnà ¼û+8®˜ÞR)iÕcå[Õƒ4BrìÈv¢æï‹M’F}H»ì ;³Z 2 KË4Q*RíI¶zJàLQÆÔ`Âã”ët)l††ðÛ&y²Ø "VX°üã¢d¬i–i’×oÔ1Ðô³ØíÇ8ê”Ö½?º>滢e é¡hba5¤/ëÒÿæï{†’vÓuôµo·±\umëªÑýxŠ•±‹qý­Œ´.Æ¢,7Dì0\½‹OÎÞó—06Vƒš‡-ªI´ñ®ÅÄXlRy3ù~9Ût-b\Í&ÎQ +ÑÎÄWÇP‡Yßµ‘ú쇱ëOWZiÔ?d)€ñ,$(%r®§É:¿î‰ Œ½÷_v ‹bendstream endobj 41 0 obj << /Type /Page /Contents 42 0 R /Resources 40 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 39 0 R >> endobj 43 0 obj << /D [41 0 R /XYZ 71.731 741.2204 null] >> endobj 47 0 obj << /D [41 0 R /XYZ 71.731 637.9428 null] >> endobj 40 0 obj << /Font << /F24 38 0 R /F30 46 0 R >> /ProcSet [ /PDF /Text ] >> endobj 50 0 obj << /Length 8450 /Filter /FlateDecode >> stream xÚÜKÓGB…á½…–ÒÂE]ºú²å°š…w ãñ€c¾ Á¿'?«êd';ó=AƒÇÉyZU3¶$w¾Ë‡¹üÏòá¶L·­üËe™Öu¾|øá¿¿™?üGùSÿôÍr¹\¯Óº/×ò/þì·ûv›÷õúáÛç‘¿ýùÇõòa§ë~ß?|÷—“º>Ê©û|ÿðÝŸÿõãwŸîóÇïÿýÓ2üéÇOß®·ûÇ/ùú¯÷åçß~üù·_?ýÛwÿòÍ?|'ðœ¹Þ§yž——Ÿé8óíó¡?>Ѷ}xLkù´Oè<ôöþô˧åþñÇ¿|ÿÃ/ó6]·eÒót¹Ý/GµÌ—i™Wú`:÷î£MíºN×yÞ^~ øqq_íài~Ì?N#ñe™öûr ñó4áÍj¿Lóm]Sü8¸¯vðë´_×ô±Ÿ§÷Õ^ÞξÅý8¸¯¾Æ×òv.—ô±Ÿ§ oV;xy;Û%}ìçiÄ}µƒ—·³î{Ч÷Õ^ÞÎrûqq_}oåíÌ×ô±Ÿ§ oV;ø6=·ô±Ÿ§÷Õ~.÷{úØÏÓˆûj¿OÛýžâÇiÄ}õ5^~q¹>ÒÇ~ž&¼Yíàåí\çô±Ÿ§÷Õ^ÞÎ>§ý<¸¯vðòv.KüØÓˆûêk|/og[—?OÞ¬vðòvÖ5}ìçiÄ}µƒ—·³léc?O#¼ù?öã4â¾ú¿.Óö¸¤ýöó4áÍj/og™ÓÇ~žFÜW;xy;ó’>öó4â¾ÚÁïÓí‘þDæ8Œ´m¾–ÿø ž5}æçi²›Õ¾M·Û–>óó4â¾ÚÁ¯Ózí¯‡‘¶ÍŽ\ÞÌ~‰Ÿùqm_}‰—ÿNëeJ§oW;xy5éoIœ‡‘¶ÍŽ\ÞÌz½¥ôqm_íàåÕ”¿÷¤øqq_}/åÕ¤¿N9í›y›®{úºÏÓhûj¿NËý‘>óó4â¾ÚÁïÓ5~äœEøýâkv]¦å6§üöó4â¾ÚÁËÛÙæø±§÷Õ×øµ¼uIûyšðfµƒ—·³,éÏbÎÓˆûj/og^ÓÇ~žFÜW;ø}º<¶ø±§÷Õ×ømž÷-}ìçi›Õ¾M—Û%}ìçiÄ}µƒïåÿe_Rü8¸¯vðòvö=~ìÇiÄ}õ5~/oçrMûyšðfµƒ—·³ÝÒÇ~žFÜW;xy;å)¥øqq_íàåí,÷KЧ÷Õ×ø£¼ù‘>öó4áÍjߦò÷¾ô±Ÿ§÷Õ¾O÷Çœ>öó4â¾ÚÁïÓv_âÇ~œFÜW_âÛöó4áÍj/o'ýYÔyiÛìÈåÕ,{úÌÏÓhûj/¯f¾ÆÏü8¸¯¾Æ×yº=Òøq˜hßìÈÛ´Þo1}œFÛW;ø>Ýn÷-ÅÓˆûj¿Okúͳó0Ò¶ùZÞÊ›Ùã×}ž&»YíàåÕìéwŠuq_íàåÕ¤_G9#m›¹¼™-ýB±N£í«¯ñKy5ëš>óó4áÍj/¯f‰í¯‡‘¶ÍŽ\ÞÌœþ£;FÛW;ø}Z—øÇ}œFÜW_ãû<]ïé·‰ušðfµƒoÓrÛÓÇ~žFÜW;ø>]¯×ô±Ÿ§÷Õ^ÞÎÿ5ý<¸¯¾Æ¯åí\néc?OÞ¬vðòv¶ôÛÄ:¸¯vðòvÖ{úØÏÓˆûj/ogyÄý8¸¯¾Æoåí,é·‰ušðfµƒ—·3§ttq_íàû´?Òoë4â¾ÚÁËŸ½¯ñc?N#ñû<í·ô‚ŽNÞ¬vðmš¯é·‰uq_íàåíìéFÜW;xù³—ôÛÄ:¸¯¾Æåílé&¼Yíàåí¬éFÜW;xy;Kú½FÜW;øÛŸ½Åý8¸¯¾Ä/ó<]é·‰uðvµƒ¯Óãž^ÐÑiÄ}µƒïÓå–^ÐÑiÄ}µƒß¦ÇmŽûqq_}/åí\Ó/¾é4áÍj/ogO¿M¬Óˆûj/oç’^ÐÑiÄ}µƒ—·³­ñc?N#ñµ¼5ýB±NÞ¬vðòv–ôwDtq_íàåíÌéwŠuq_íà·éþØãÇ~œFÜW_ãÛüçŸû#PúåÏ¿ÿðÛç/?·å¶½üÊðí‹vODû ˯%zÏð)%7ü”5%÷ü9)¹h”’ÜW!%á5%7Æ›UHÉe¸Rr€û*¤ä2\)9À}Rr®”ྠ)¹¯)¹1Þ¬BJ.Õ’ÜW!%—áJÉî«’Ëp¥ä÷UHÉExMÉñfRr®”ྠ)¹ WJp_…”\†+%¸¯BJ.ÂkJnŒ7«’Ëp¥ä÷UHÉe¸Rr€û*¤ä2\)9À}Rr^Src¼Y…”\†+%¸¯BJ.Õ’ÜWÇ)¹Ì>Sr@Û&¤ä"º¦äÆv³ )¹ WJp_§ä2ûLÉm›’Ëh¥äÀöUHÉ%øSJnˆ·«ã”\fŸ)9 mRr­”ؾ )¹ WJp_§ä"[)¹1í›’Ëh¥äÀöUHÉe¸Rr€ûê0%—ÑGJà÷‹’‹àš’ÓÍ*¤ä2\)9À}Rr®”ྠ)¹ WJp_…”\„×”ÜoV!%—áJÉî«’Ëp¥ä÷UHÉe¸Rr€û*¤ä"¼¦äÆx³ )¹ WJp_…”\†+%¸¯BJ.Õ’ÜW!%á5%7Æ›UHÉe¸Rr€û*¤ä2\)9À}Rr®”ྠ)¹¯)¹1Þ¬BJ.Õ’ÜW!%—áJÉî«’Ëp¥ä÷UHÉExMÉñfRr®”ྠ)¹ WJp_…”\†+%¸¯BJ.ÂkJnŒ7«’Ëp¥ä÷UHÉe¸Rr€û*¤ä2\)9À}Rr^Src¼Y…”\†+%¸¯BJ.Õ’ÜW!%—áJÉî«’Kð§”ÜoW!%—áJÉî«’Ëp¥ä÷UHÉe¸Rr€û*¤ä"¼¦äÆx³:NÉeö™’Ú6!%—ÑJÉí«’Ëp¥ä÷ÕqJ.²•’Ó¾ )¹ŒVJl_…”\†+%¸¯ŽSr™}¦ä€¶MHÉEtMÉífRr®”à¾:NÉeö™’Ú6!%—ÑJÉí«’‹ðš’ãÍê8%—ÙgJhÛ„”\F+%¶¯BJ.Õ’ÜW!%á5%7Æ›UHÉe¸Rr€û*¤ä2\)9À}Rr®”ྠ)¹¯)¹1Þ¬BJ.Õ’ÜW!%—áJÉî«’Ëp¥ä÷UHÉExMÉñfRr®”ྠ)¹ WJp_…”\†+%¸¯BJ.ÂkJnŒ7«’Ëp¥ä÷UHÉe¸Rr€û*¤ä2\)9À}Rr^Src¼Y…”\†+%¸¯BJ.Õ’ÜW!%—áJÉî«’Kð§”ÜoW!%—áJÉî«’Ëp¥ä÷UHÉe¸Rr€û*¤ä"¼¦äÆx³ )¹ WJp_…”\†+%¸¯BJ.Õ’ÜW!%á5%7Æ›UHÉe¸Rr€û*¤ä2\)9À}Rr®”ྠ)¹¯)¹1Þ¬BJ.Õ’ÜW!%—áJÉî«ã”\fŸ)9 mRr]Src»Y…”\†+%¸¯Sr}¤ä~¿)¹ VJh_…”\„×”ÜoVÇ)¹Ì>Sr@Û&¤ä2Z)9°}Rr®”à¾:NÉE¶RrcÚ7!%—ÑJÉí«’Ëp¥ä÷ÕqJ.³Ï”ж )¹ˆ®)¹±Ý¬BJ.Õ’ÜW!%—áJÉî«’Ëp¥ä÷UHÉExMÉñfRr®”ྠ)¹ WJp_…”\†+%¸¯BJ.ÂkJnŒ7«’Ëp¥ä÷UHÉe¸Rr€û*¤ä2\)9À}Rr þ”’âí*¤ä2\)9À}Rr®”ྠ)¹ WJp_…”\„×”ÜoV!%—áJÉî«’Ëp¥ä÷UHÉe¸Rr€û*¤ä"¼¦äÆx³ )¹ WJp_…”\†+%¸¯BJ.Õ’ÜW!%áçi›Õ^ÞÎÜù6qm°ýñÏfz»mšgþÙÍqÎ~R¹ôvƒÔ$ì.ã„]ÙÜÞþV3L؇Þ>Öª„ݯ¿}ÿÓOß¿ÎוçòÇ÷žæý3¼Ý½Þºùº¥<ü?¾j3ü„:÷î3¾È×mÓãñöOð^| øqq_íàgb/ÃîÜW!Ü—á ÷î«î‹ðîãÍ*„û2\á>À}Â}®pྠᾠW¸p_…p_„×pßoV!Ü—á ÷î«îËp…û÷U÷e¸Â}€û*„û"¼†ûÆx³ á¾ W¸p_…p_†+ܸ¯B¸/ÃîÜW!Üá5Ü7Æ›U÷e¸Â}€û*„û2\á>À}Â}®pྠᾯá¾1Þ¬B¸/ÃîÜW!Ü—á ÷î«ãp_fŸá> mÂ}]Ã}c»Y…p_†+ܸ¯ŽÃ}™}†û€¶M÷e´Â}`û*„ûü)Ü7ÄÛÕq¸/³Ïpж ᾌV¸l_…p_†+ܸ¯ŽÃ}‘­pߘöM÷e´Â}`û*„û2\á>À}uîËè#ÜðûE÷Ep ÷éfÂ}®pྠᾠW¸p_…p_†+ܸ¯B¸/Âk¸oŒ7«îËp…û÷U÷e¸Â}€û*„û2\á>À}Â}^Ã}c¼Y…p_†+ܸ¯B¸/ÃîÜW!Ü—á ÷î«î‹ðîãÍ*„û2\á>À}Â}®pྠᾠW¸p_…p_„×pßoV!Ü—á ÷î«îËp…û÷U÷e¸Â}€û*„û"¼†ûÆx³ á¾ W¸p_…p_†+ܸ¯B¸/ÃîÜW!Üá5Ü7Æ›U÷e¸Â}€û*„û2\á>À}Â}®pྠᾯá¾1Þ¬B¸/ÃîÜW!Ü—á ÷î«îËp…û÷U÷%øS¸oˆ·«îËp…û÷U÷e¸Â}€û*„û2\á>À}Â}^Ã}c¼Y‡û2û ÷m›îËh…ûÀöU÷e¸Â}€ûê8ÜÙ ÷iß„p_F+ܶ¯B¸/ÃîÜWÇá¾Ì>Ã}@Û&„û"º†ûÆv³ á¾ W¸p_‡û2û ÷m›îËh…ûÀöU÷Ex ÷ñfuîËì3Ü´mB¸/£îÛW!Ü—á ÷î«î‹ðîãÍ*„û2\á>À}Â}®pྠᾠW¸p_…p_„×pßoV!Ü—á ÷î«îËp…û÷U÷e¸Â}€û*„û"¼†ûÆx³ á¾ W¸p_…p_†+ܸ¯B¸/ÃîÜW!Üá5Ü7Æ›U÷e¸Â}€û*„û2\á>À}Â}®pྠᾯá¾1Þ¬B¸/ÃîÜW!Ü—á ÷î«îËp…û÷U÷%øS¸oˆ·«îËp…û÷U÷e¸Â}€û*„û2\á>À}Â}^Ã}c¼Y…p_†+ܸ¯B¸/ÃîÜW!Ü—á ÷î«î‹ðîãÍ*„û2\á>À}Â}®pྠᾠW¸p_…p_„×pßoV!Ü—á ÷î«îËp…û÷Õq¸/³Ïpж ᾈ®á¾±Ý¬B¸/ÃîÜW‡á¾Œ>Â}¿_„p_+Ü´¯B¸/Âk¸oŒ7«ãp_fŸá> mÂ}­pؾ á¾ W¸p_‡û"[á¾1í›îËh…ûÀöU÷e¸Â}€ûê8Ü—Ùg¸hÛ„p_D×pߨnV!Ü—á ÷î«îËp…û÷U÷e¸Â}€û*„û"¼†ûÆx³ á¾ W¸p_…p_†+ܸ¯B¸/ÃîÜW!Üá5Ü7Æ›U÷e¸Â}€û*„û2\á>À}Â}®pྠá¾ ÷ ñvÂ}®pྠᾠW¸p_…p_†+ܸ¯B¸/Âk¸oŒ7«îËp…û÷U÷e¸Â}€û*„û2\á>À}Â}^Ã}c¼Y…p_†+ܸ¯B¸/ÃîÜW!Ü—á ÷î«î‹ðîãÍ*„ûõ¹4Üè ÷½+äõÃ}ƒÔ„ûöq¸o]¦GùuÄ8ÜwzûXÛîûû_>Zæ}û_?þòõßûò?o¿__%ÔÖùí{gOZû$o{ùE§ãW³jÃ\³jÏyU{ñFY5À}²j®¬ྠYµ¯Yµ1Þ¬BV-ÕUÜW!«–áʪî«UËpeÕ÷UȪExͪñf²j®¬ྠYµ WV p_…¬Z†+«¸¯BV-ÂkVmŒ7«UËpeÕ÷UȪe¸²j€û*dÕ2\Y5À}²j^³jc¼Y…¬Z†+«¸¯BV-ÕUÜWÇYµÌ>³j@Û&dÕ"ºfÕÆv³ Yµ WV p_gÕ2û̪m›UËheÕÀöUȪ%øSVmˆ·«ã¬ZfŸY5 m²j­¬ؾ Yµ WV p_gÕ"[Yµ1í›UËheÕÀöUȪe¸²j€ûê0«–ÑGV à÷‹U‹àšUÓÍ*dÕ2\Y5À}²j®¬ྠYµ WV p_…¬Z„׬ÚoV!«–áʪî«UËpeÕ÷UȪe¸²j€û*dÕ"¼fÕÆx³ Yµ WV p_…¬Z†+«¸¯BV-ÕUÜW!«á5«6Æ›UȪe¸²j€û*dÕ2\Y5À}²j®¬ྠYµ¯Yµ1Þ¬BV-ÕUÜW!«–áʪî«UËpeÕ÷UȪExͪñf²j®¬ྠYµ WV p_…¬Z†+«¸¯BV-ÂkVmŒ7«UËpeÕ÷UȪe¸²j€û*dÕ2\Y5À}²j^³jc¼Y…¬Z†+«¸¯BV-ÕUÜW!«–áʪî«UKð§¬ÚoW!«–áʪî«UËpeÕ÷UȪe¸²j€û*dÕ"¼fÕÆx³:Ϊeö™UÚ6!«–Ñʪí«UËpeÕ÷ÕqV-²•UÓ¾ YµŒVV l_…¬Z†+«¸¯Ž³j™}fÕ€¶MȪEtͪíf²j®¬à¾:Ϊeö™UÚ6!«–Ñʪí«U‹ðšUãÍê8«–ÙgV hÛ„¬ZF+«¶¯BV-ÕUÜW!«á5«6Æ›UȪe¸²j€û*dÕ2\Y5À}²j®¬ྠYµ¯Yµ1Þ¬BV-ÕUÜW!«–áʪî«UËpeÕ÷UȪExͪñf²j®¬ྠYµ WV p_…¬Z†+«¸¯BV-ÂkVmŒ7«UËpeÕ÷UȪe¸²j€û*dÕ2\Y5À}²j^³jc¼Y…¬Z†+«¸¯BV-ÕUÜW!«–áʪî«UKð§¬ÚoW!«–áʪî«UËpeÕ÷UȪe¸²j€û*dÕ"¼fÕÆx³ Yµ WV p_…¬Z†+«¸¯BV-ÕUÜW!«á5«6Æ›UȪe¸²j€û*dÕ2\Y5À}²j®¬ྠYµ¯Yµ1Þ¬BV-ÕUÜW!«–áʪî«ã¬ZfŸY5 m²j]³jc»Y…¬Z†+«¸¯³j}dÕ~¿Yµ VV h_…¬Z„׬ÚoVÇYµÌ>³j@Û&dÕ2ZY5°}²j®¬à¾:ΪE¶²jcÚ7!«–Ñʪí«UËpeÕ÷ÕqV-³Ï¬ж Yµˆ®Yµ±Ý¬BV-ÕUÜW!«–áʪî«UËpeÕ÷UȪExͪñf²j®¬ྠYµ WV p_…¬Z†+«¸¯BV-ÂkVmŒ7«UËpeÕ÷UȪe¸²j€û*dÕ2\Y5À}²j þ”Uâí*dÕ2\Y5À}²j®¬ྠYµ WV p_…¬Z„׬ÚoV!«–áʪî«UËpeÕ÷UȪe¸²j€û*dÕ"¼fÕÆx³ Yµ WV p_…¬Z†+«¸¯BV-ÕUÜW!«á5«6Æ›UȪ c`YV >ЙU{×/ëgըɪ]ÆYµùZþ&;oã¬Úyèíc]Ž¬ÚŸ>­óÇøý§Ïßÿòù·Ï?þúõßþ¿OëþñËï_ÿà×ÿüòûOþúÿ×Ï_Þ lÿûõ¾ÿ÷/¿ÿÖ^w}ûäíÃó‡òO¾¼Ý¡¼vøÓõÛá«^¿}þ‘ ®ß¾ø@£ë·€û*\¿ðzývŒ7«pý6Ãuýp_…뷮뷀û*\¿Íp]¿ÜWáúm„×ë·c¼Y…뷮뷀û*\¿Íp]¿ÜWáúm†ëú-ྠ×o#¼^¿ãÍ*\¿Íp]¿ÜWáúm†ëú-ྠ×o3\×o÷U¸~áõúíoVáúm†ëú-ྠ×o3\×o÷U¸~›áº~ ¸¯ÂõÛ¯×oÇx³ ×o3\×o÷U¸~›áº~ ¸¯ÂõÛ ×õ[À}®ßFx½~;Æ›U¸~›áº~ ¸¯ÂõÛ ×õ[À}®ßf¸®ßî«pý6ÁŸ®ßñv®ßf¸®ßî«pý6Ãuýp_…뷮뷀û*\¿ðzývŒ7«ãë·™}^¿Ú6áúmFëú-ؾ ×o3\×o÷ÕñõÛÈÖõÛ1í›pý6£uýl_…뷮뷀ûêøúmfŸ×o¶M¸~ÑõúíØnVáúm†ëú-à¾:¾~›Ùçõ[ m®ßf´®ß‚í«pý6ÂëõÛ1Þ¬Ž¯ßföyýhÛ„ë·­ë·`û*\¿Íp]¿ÜWáúm„×ë·c¼Y…뷮뷀û*\¿Íp]¿ÜWáúm†ëú-ྠ×o#¼^¿ãÍ*\¿Íp]¿ÜWáúm†ëú-ྠ×o3\×o÷U¸~áõúíoVáúm†ëú-ྠ×o3\×o÷U¸~›áº~ ¸¯ÂõÛ¯×oÇx³ ×o3\×o÷U¸~›áº~ ¸¯ÂõÛ ×õ[À}®ßFx½~;Æ›U¸~›áº~ ¸¯ÂõÛ ×õ[À}®ßf¸®ßî«pý6ÁŸ®ßñv®ßf¸®ßî«pý6Ãuýp_…뷮뷀û*\¿ðzývŒ7«pý6Ãuýp_…뷮뷀û*\¿Íp]¿ÜWáúm„×ë·c¼Y…뷮뷀û*\¿Íp]¿ÜWáúm†ëú-ྠ×o#¼^¿ãÍ*\¿Íp]¿ÜWáúm†ëú-à¾:¾~›Ùçõ[ m®ßFt½~;¶›U¸~›áº~ ¸¯¯ßfôqýà÷‹pý6ƒuýh_…ë·^¯ßŽñfu|ý6³Ïë·@Û&\¿Íh]¿ÛWáúm†ëú-à¾:¾~Ùº~;¦}®ßf´®ß‚í«pý6Ãuýp__¿Íìóú-ж ×o#º^¿ÛÍ*\¿Íp]¿ÜWáúm†ëú-ྠ×o3\×o÷U¸~áõúíoVáúm†ëú-ྠ×o3\×o÷U¸~›áº~ ¸¯ÂõÛ¯×oÇx³ ×o3\×o÷U¸~›áº~ ¸¯ÂõÛ ×õ[À}®ß&øÓõÛ!Þ®ÂõÛ ×õ[À}®ßf¸®ßî«pý6Ãuýp_…ë·^¯ßŽñf®ßf¸®ßî«pý6Ãuýp_…뷮뷀û*\¿ðzývŒ7«pý6Ãuýp_…뷮뷀û*\¿Íp]¿ÜWáúm„×ë·c¼Y…ë·ƒÛ éõ[ø@çõÛw÷\û×oèéúí^~)|_¶ñýÛ˽œ¹>껼{MòÓ®ËÛÏ꾞zû\Ÿ?î~²§µSüJ #Üendstream endobj 49 0 obj << /Type /Page /Contents 50 0 R /Resources 48 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 39 0 R /Annots [ 52 0 R 56 0 R 57 0 R 58 0 R 59 0 R 60 0 R 61 0 R 62 0 R 63 0 R 64 0 R ] >> endobj 52 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [70.7348 666.8844 104.6274 675.8606] /Subtype /Link /A << /S /GoTo /D (15) >> >> endobj 56 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [529.3351 666.8844 538.9788 675.8606] /Subtype /Link /A << /S /GoTo /D (15) >> >> endobj 57 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [70.7348 651.5419 136.7566 660.5181] /Subtype /Link /A << /S /GoTo /D (26) >> >> endobj 58 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [532.005 651.5419 538.9788 660.5181] /Subtype /Link /A << /S /GoTo /D (26) >> >> endobj 59 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [70.7348 636.1994 131.4065 645.1757] /Subtype /Link /A << /S /GoTo /D (29) >> >> endobj 60 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [532.005 636.1994 538.9788 645.1757] /Subtype /Link /A << /S /GoTo /D (29) >> >> endobj 61 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [70.7348 618.9541 144.1986 629.8332] /Subtype /Link /A << /S /GoTo /D (32) >> >> endobj 62 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [532.005 618.9541 538.9788 629.8332] /Subtype /Link /A << /S /GoTo /D (32) >> >> endobj 63 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [70.7348 603.6116 236.0333 614.4907] /Subtype /Link /A << /S /GoTo /D (35) >> >> endobj 64 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [532.005 603.6116 538.9788 614.4907] /Subtype /Link /A << /S /GoTo /D (35) >> >> endobj 51 0 obj << /D [49 0 R /XYZ 71.731 741.2204 null] >> endobj 6 0 obj << /D [49 0 R /XYZ 244.3315 691.2808 null] >> endobj 48 0 obj << /Font << /F24 38 0 R /F33 55 0 R /F34 67 0 R >> /ProcSet [ /PDF /Text ] >> endobj 75 0 obj << /Length 741 /Filter /FlateDecode >> stream xÚVM›0½çWp„ÄL`OÛVÙª=µª*u{0àwù’m’n}íØÂ’ýR”8Øã7ófÞûßÚúÞv#†Ð÷‚„V^¯€uKŸW¾6 £È  ‰‡…Un¶^‘åNA>¦«õ]Zð"C+Ý®¢DXÅ ¶Òâ—ýâ=ʱó;ýº¾Û+ñ’H@ k`¹A"6DðlX‘¬ÈˆãØ÷‚’óîf½VÓk{šã}K?¶Øk0F¾2'LH â(C ëÉŒqŠrNÚFMTèSõ÷D çXÏ=~òÔø…ëùº«p~éeOQÚ'ÇvKÔ4/‘Þ—£F²–<ýÀK žyöœT䟎áQÄõSA‰<:>´‡Š(Áڹ̀ÚÙáœÜäK¤¦…i6i‰  H¨{é‹]ÉûÜìjˆv´ýƒs ñ !ޤ˜ðr‘µ^mpŽCôQ·zDÕÃlf€a}×µ”ãâÅ| ± Uo¥Ò´4T£¦GÕµ I#¨×hÊÚžÏ"ÙýER2‹5…Оdê‘?B–ÅÀÅ]t²«MšNe;*/Uu]EòsÄl@ó %; £ƒmDƧÑkM1w$·¢fäLtlOñéÓ 'ÂË·&l¡bß{Ì&¾L y[O{õåQb)Û¾Òp™¡<Þr§¸«¥ÊÈf«©x{óˆÛŠ0Ξ?%iC\Œk­ýp"©-ÂߺÓD|Ž9;®DªVο²“Ö¯ñ?²2ÏúŒå” ¥1¥7m²ï© HŸ´¬ÎÆ‚t.ø¨÷ÑËBš6Š:¦ß% Ñ9´í(1ï)ðBI/ºa«Ï¯×Š{<çÄ#¾Ã)éØwÞO¦#ÐDªX‚)'·={æ•pŽsµKÍ=BßÂØ‹ý(Y¼ihwbs¾flÂɽn€·“­A’ ǹ;skYpø‰õ‚endstream endobj 74 0 obj << /Type /Page /Contents 75 0 R /Resources 73 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 39 0 R >> endobj 76 0 obj << /D [74 0 R /XYZ 71.731 741.2204 null] >> endobj 68 0 obj << /D [74 0 R /XYZ 71.731 706.3512 null] >> endobj 10 0 obj << /D [74 0 R /XYZ 146.3693 691.2808 null] >> endobj 77 0 obj << /D [74 0 R /XYZ 71.731 674.2377 null] >> endobj 78 0 obj << /D [74 0 R /XYZ 71.731 674.2377 null] >> endobj 79 0 obj << /D [74 0 R /XYZ 330.1288 648.5929 null] >> endobj 80 0 obj << /D [74 0 R /XYZ 71.731 628.5033 null] >> endobj 81 0 obj << /D [74 0 R /XYZ 71.731 597.6191 null] >> endobj 82 0 obj << /D [74 0 R /XYZ 361.8802 586.8245 null] >> endobj 83 0 obj << /D [74 0 R /XYZ 362.6958 573.8731 null] >> endobj 84 0 obj << /D [74 0 R /XYZ 71.731 540.8321 null] >> endobj 85 0 obj << /D [74 0 R /XYZ 221.8567 530.0375 null] >> endobj 73 0 obj << /Font << /F24 38 0 R /F30 46 0 R /F34 67 0 R >> /ProcSet [ /PDF /Text ] >> endobj 88 0 obj << /Length 177 /Filter /FlateDecode >> stream xÚm;Â0 „÷ü íçá$+ÌÙ*ÏUåÿ Tª<œ,Ÿî>¨<žÐ›,–Pke¡º —|Z ê-–µ#ÎËÄU:ã1Í Ç!ó$f+mA+d¤ó¯Šcv wÅâzxt§¶”Ú‡‚𫛺kK­Šæø¬º[S—û´Ë4TöA6` Ž“P½EŽ<"c!bäL›œ1¨™!éMDÿmÃ}/;SDeendstream endobj 87 0 obj << /Type /Page /Contents 88 0 R /Resources 86 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 39 0 R >> endobj 69 0 obj << /D [87 0 R /XYZ 71.731 706.3512 null] >> endobj 14 0 obj << /D [87 0 R /XYZ 298.5799 691.2808 null] >> endobj 89 0 obj << /D [87 0 R /XYZ 71.731 670.2196 null] >> endobj 86 0 obj << /Font << /F24 38 0 R /F34 67 0 R >> /ProcSet [ /PDF /Text ] >> endobj 92 0 obj << /Length 173 /Filter /FlateDecode >> stream xÚm; Â@„ûû[&Å­·{ïVQÑú:±¾!FÑü<5† a‹aÙaæ[•‡ÀzÅ2+»«Ppʧ¥ ÎbœC¶äò2r•V{ŒÈaÈ4‰É‚ °Bgƒ…tüU¹˜]AHûM1;W÷öð(%ûP0~uÕ<Ûª®«örkÊmZ‹yêëº0‹£@E<m bt™4ÃX­Q)Ò}Ò›†ÿÛúßFú^9GC¤endstream endobj 91 0 obj << /Type /Page /Contents 92 0 R /Resources 90 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 39 0 R >> endobj 70 0 obj << /D [91 0 R /XYZ 71.731 706.3512 null] >> endobj 18 0 obj << /D [91 0 R /XYZ 287.5478 691.2808 null] >> endobj 93 0 obj << /D [91 0 R /XYZ 71.731 670.2196 null] >> endobj 90 0 obj << /Font << /F24 38 0 R /F34 67 0 R >> /ProcSet [ /PDF /Text ] >> endobj 96 0 obj << /Length 176 /Filter /FlateDecode >> stream xÚm»Â0 E÷|…Çvˆ‰óp“•§Äœ 1 ž U©ø~´U…*–í«{ T*‚‚°0©YB­•…ã](¸¦ÓFP'±Ì¨q&®Ò™ƒ× rl2b¶Ö´BvÞA¼ôQ’Ê+ñ´Ë·CÝž›\êÂg}Ù”¯~WÕmY=žù>nÅ*©—õè‰Ã$W'‘#ÍÊX8'&g *Efpú@™ÿ´áʼn¼76OEKendstream endobj 95 0 obj << /Type /Page /Contents 96 0 R /Resources 94 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 98 0 R >> endobj 71 0 obj << /D [95 0 R /XYZ 71.731 706.3512 null] >> endobj 22 0 obj << /D [95 0 R /XYZ 318.5354 691.2808 null] >> endobj 97 0 obj << /D [95 0 R /XYZ 71.731 670.2196 null] >> endobj 94 0 obj << /Font << /F24 38 0 R /F34 67 0 R >> /ProcSet [ /PDF /Text ] >> endobj 101 0 obj << /Length 213 /Filter /FlateDecode >> stream xÚm?OÃ0ÅwŠí!WŸÿÅ^©‰©ƒ7Ä&D´µ‰ß¾n¢ EÎÏ÷tï~&锄¥NÅ*% ÔG&á#µžÍã*K.‰•nau‰Á+Åý‡È6OÊ€’謷ßÿ¢\H./=Äæ•o»ê{lO¢P¥çsÝ -y[O‡¾:õcßžóó¯P–Sçn˜M¾~ ‚,ÿɪÚÓ(Þâ {ŒË–s¶ñèÉ…UŽÙRÜynÚ@Àà`b°Z£”¤—IWó?mù’•¼ }HRnendstream endobj 100 0 obj << /Type /Page /Contents 101 0 R /Resources 99 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 98 0 R >> endobj 72 0 obj << /D [100 0 R /XYZ 71.731 706.3512 null] >> endobj 26 0 obj << /D [100 0 R /XYZ 535.2205 691.2808 null] >> endobj 102 0 obj << /D [100 0 R /XYZ 71.731 670.2196 null] >> endobj 99 0 obj << /Font << /F24 38 0 R /F34 67 0 R >> /ProcSet [ /PDF /Text ] >> endobj 103 0 obj << /Type /Encoding /Differences [ 0 /.notdef 1/dotaccent/fi/fl/fraction/hungarumlaut/Lslash/lslash/ogonek/ring 10/.notdef 11/breve/minus 13/.notdef 14/Zcaron/zcaron/caron/dotlessi/dotlessj/ff/ffi/ffl/notequal/infinity/lessequal/greaterequal/partialdiff/summation/product/pi/grave/quotesingle/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde 127/.notdef 128/Euro/integral/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft/OE/Omega/radical/approxequal 144/.notdef 147/quotedblleft/quotedblright/bullet/endash/emdash/tilde/trademark/scaron/guilsinglright/oe/Delta/lozenge/Ydieresis 160/.notdef 161/exclamdown/cent/sterling/currency/yen/brokenbar/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis] >> endobj 66 0 obj << /Length1 1647 /Length2 5568 /Length3 532 /Length 6407 /Filter /FlateDecode >> stream xÚíUgT“[—¤#EšH ½÷ŽôÞ{ï-@$$¤ ¨ ½#Mš¡ "] ]@Dª Hï ½ßýî¬;3æû~Íšw­¼ë=çÙûÙ{ŸgŸNVc3Aw¨+P AŠ ‰È A>®þpS¨!TV_Ðè鯃p0˜$1'§ è‚A!ê. À èPºÄÄ¢²²²Äœ5¨o äé…ðX˜Zñòó üµóËàô'‚ñ„ƒ˜øcÎ0ƒÆÀÌ€>à×°»À¿Èí¿¸ºø€ÀAÿ“óß­­€dýοÄPxb•’üc×ÝA7/€‡ sx¿÷- î@bDþ}¾'‘¿aæ^ 7oÈ/5$ÿ€€÷¿×€ÑíwÂZšªšÖüÿôýmlŒé „y/ðHVP÷.~Q©ªB!‚¢R²A1iÌeÄ\GY1‰ÿMØßD¢­ \0P ÀNDHDD€yÿùûkåð7 ˆÔýW™!\ î˜ÖûçÆ/ØÍÃ(þ{`*ÿsýû@7â™I¨ÛÝÈ{ÙÏrµ· û†Õíº:EoôEù–×›— #PзáÙ1‹²UΗ5QB #rW-AŸ¾ûþ\Ñå[è¤s¿Íîz…¿ ™ˆón.)W|„_ƒ’­EUH•~cÕÈÇÜ>ÉY,æ tvùyË6O…cî".ë—éïÅmwõôWé7ØC>Ñ]Äa½Ú©“ª®)<Ù\kÉ(#>ž Ví°¼Ïk/ièãÿÌ| ´ø r†çK“„Å^ê!á¶»H â¶—ÜAð ¿8ˆ$b$ôð¾±ü´àÜ‘E°üèÑ€5*øtwÜËŠ|¬ªæýTQÓ¸1ˆÝy»é“ Â+c)ŽÏ\jiRÑ×6f—güŒ#ô%Ô†Á_ HX®î"$É wWŸ(Æ?Ú´¹ˆ®zÔøH cÇx¦9Š×É(~pˆžˆz²–}ÑûÉu;?ŽhK±’E‡£ХąüþaÉé7YŸjÀñŠ»ïZ ¿×»Mš‹j±*c¯+HÓZÆoöÖð#r=áð­­"j˜¨¶x,²mx:öDOÞ+l&‹GURZ˜Ø÷å2sýÅ%­]â9å{zlEn‰ Ïh°J_…`7nlß7Օ↾‡¬n~ƒ×Åå-ѯáèÀÍ,t]Ñ1üåÌTçÛ C /Üà¬|×\Û®XÚ¾›¬@,V .ß!ɶð»ÐÍÌQMíç#CE^`“3p| tjFû8[2µ—Ï_=Õ©iºÉ«ªJí\¸ ’KÍ“ö•Çßh\b¤¾7—·Ó»*x…,y¡ϦY" R–ÑŸ(:BÐÜ´'”™Ä‰Mp£h§fçÎTæµ´-3ój›a°ç(êµ·eí@ŸqDç7_â´ËŒzÔ+J—²iP aÏݯR¸æ¨mÖ€'=ÍöÕh±ƒçÎ8ó A6¥Íz!…2rŠpJSƺÒì¡nOþÑüB2ðʹƒ“°ºèèG.ÞkÓ•þ· ž µ÷=nõ$«]¢a,IÞ-73kÄYè7Ÿm$–Hêd%öÜÀB[\³_…¥å&ç­*K F Ì•Šlٿ٥zvþîɧ´Ë…ñòQ‰íäË\ϸ-ŽÉ} W¼EÈTl Ë<À^9†8¢×¬U°bÉ¢¯´Ž·óGè´vÙýhX‚»åf„WzÕ.u[}û2h³úr]™W,r°r%}ŽUâ™JjÜF–5|½,Æ-ñ©GÜÒ¤)é›cÄm¤%®JÑßUwè÷Ê"?~“ÃéGùSS㽤déuVžm¹õBüƒïV_Ë˼"—G$¬ãù“ô{½ëË Kí´Èhvs#æ`«Ê& Ý£òbÖ5 Tåfä^ ôxµ§ÜÀ£ÓFË’`l= 8®„«²/jL‹¶á•6°óìm³á{Q)Ö·8É–0 ÝŒ¬¿žrŠÉèFßib7NTÓÈ]%«¶†Ï¥ Á¡9.¯\¡1ÇOL·j»vRN3/( &¨àKw£G®üdؼÊÛöû÷ß ºú°b} 4HXJ;/0Õÿòž0dC³l¡¡58|2”ï&/1}УÓ>ç×óTèý'ù©V,äòça-FC)küœI\_³SãnÔ‡—¼öè5üüÜ1´ÛÇÇý£J¦‘¸³X@Ù£Í˪£•#qü=›ý%µBä0… DaªZÁʵøõ;î†Ï ´ÁG1ú³j“ËU KÀ¿j ÿÚ¶On"0£§GŸÀ•¯qèèµÐ#…u¹"凴ëzûŒdÃ8Ëeû Õ¥kËñ[\ü%ÕV×Ãs¶u€DÔà˜‘&yÇ9÷6×*ÒZ>!؇8iK0âÒ³ÿC½×åÙC«²âîrœ/-õöIfwD”ͺ÷wHj+«Ô½î¤ç=®q¸ïdÞ”¤'YÂ2Ø’‘>·uâJþcu9ìþÔxjê²€sþ8Œ,¾f퀲IÜúØÓ¹Ã£%Òº%õ•p‚·uùvC=˜êyñäšGŠhì±.ám"vÁ9–c̬Ê4u*NÌ„Ó^+~,E‡ú¶½3qhóð,](B–¥Û/±F IÚ¢¦?’ KëEžƒ–<ÖJå49ùó”J<5OÊ3ÔûÐ|ÞWßwAàDWx4;HVÝ\ü`˜q‹úŒ TVc™¥!HÇä¸ô‘5@ºC;®ùª!×EC¹xê>hýîj`NÎYØqM=‘¾e$ÉÚÞÃYYäV–0šF²%$Gä€þZº×+¥æ¦r´íÏuŸ®ˆ’Ù{8iÜË0Ï)ÞœxàÈÙ’Í£ }’˜ ÍÝ͉zaøÂ÷SðNxNÝ ‘X²e¯BüJïü°ÉþnýjÖ‹Liü2=5Ûõ‚]»ÜY»ñÞνý1cPÜsGÆ®íËÊ7IÞKíð — žjqÍ[%œ1<Æø+}¢(\êIÿÈY¢³ÎyÕ‘‘Þ™êó[¾Ö°õ“¬ZÄmOU;Ûù½GDÇ^k4#4‰Ä´ÜFDç„`oWú½a*z[)´âݲZ†çZKù^¦ÖAñˆ;X€×ûEÊ1¡ãª‡FFZ?БR<gÏHß׋Ôkì:ãNÒˆÎ?Et@{~Ú?¶¤SŽÊòw¥q,¼§–š#@‰5\Ò^þf¯$E.=<®cSaXª,ª³ l»7À´Nô¶ý¬4úuÈ´Mêº@›»%Dl1íð±ûÓÑ(=ý#¿0ÛÉ¥î‡%êBH™±+¬Ü‡êõcM%-“S®üŒÑs)QyVùfà§IÎ ]<ïý ZÀº›n!î°š†‹—™²Fð½ÿù9F´¸#»WŠÁƒ Rº.¦n4üæ)wøHêaJÀþÛFçâ#Ú(—mãJSý˜É꼎ôD½M´ìá§+Âׯ• QaGw\î‘ )¸»¨©1ŠÆpœà çT;A±r`ѽmÊÍÎ9Úß”n“ù Mø°¶ f­É-ìiõêK>BGü©Lœƒ*æï1"û),iRfN8Òk‡Â¿_>«IiÂq’Üêbýxm8›½byÄâYŽ/'t¾mÛMLPDBŽ7dø„@8;r;¨Ü”u¼ø>à[c®‘Ø’†w´ìÍÝú®óKÅd9{AæyeùG;x•|NVÓ—'ßdö}Ò™)îŸ>‰Š;5@êŸo+Z‰šqR!ÏÙnâW¢ø*ÙÙ`œ8Y ¨ ³‘Wz•æÁ$8^p®Òy½† Jþ¼0©Ù¥Tî ·j–…~råóì9Ñ»ÙÏÃíwÉûŠ7ü©S?T¨*;à&Ø9•îL³oõ–ì0—Û˜Ô§çsRzNöÇûw6ìçïU_iÛÙŽîÒòJMÈ{áãÏ·w)ž‘æƒ~î¼J4*R¨o}¸ýyw çÉ€[{–Ä•ä­,˜Qàj®ûÅ]3Öv_s6qªÔjY´¯ÂzÑòÅÚB ¶cÄœ@Þ6¤íl8òÐgý¬ @#½ÐûŠD^…i¡ø#usáh8äeº·Çâ$ò¢"Îp{) YV)híg’!Zá`¬#nßC*㢨È!NnlÚ ¨Z1ÓÚΨ0bþ9‰Â©´-“a3â/Û¾èò–|Ë-×=¸÷óš; ›õ¸ô=41fÈA|ÿ¿ù/lºjyÚh^¢«üÅ—_#œôéÐÃϬÇù™5‹Ñ%z[«}è•ZɇÍê-ºX>Þ…Ö{£9ôg1€}öà˜—°é§Šœ/Í«ž_­¬3ÓܦD:¶w;ûãE­Éy£Íì<ªÈÌ· šÉ2„ F/MÀL—¾N&+ÔB-ï’ߤÃ?zs¯öº¾L{of>-r9! Òbû¼MýuÇÐ]žWb±& î ³Q¯÷ѧS pÛÑ,Õ{ôO6hHå˜{ÎÒ{iÅ+6evcjŽì§²Ö~/oÑ$\ËãVÿ,Ãò<³pû¤°Òx’£„&ˆ­†–a·§ˆ$kà™‰Ä{…H‰e ªœôÏt’w¬»ã8ø<Ÿ¥ìÝçFs÷ÛŒ8Fwº·°('÷§Ìˆ/ß—»'o­nõÊÒiQˆ;5h–Âb9íÿTB‘£ÚbçÌš=Ä}qM¶V»8‘Ô;ïfè:£Ç r:q dØ‚*’é,)R‘7[úŠ®sÉ+¾ýånÓHà ø âBåw¬‡Í‚ž(Ç€PsÝTa5ïØ½â¡óVïBÔ»CÙõ…ð] ~Ñ52§'¦ï« . äÏÏiÏidMÇO¦JYoNÛdæµjüØV=>ÔåD?B=òuŸ<sã€,X`?sI>+‘îK˜†IG $—ýݦO¾‡“!²B‡£ú&¡¬Ã­W½°çX¿¤4ØÂO„­ Xm†¨—¹u¤y#]©ozROy7¤9“^r•a q ¡@qXt®x²?ޝo ^¾‰!IÂ5ÔtÝ%>`57Xïc®‰|qPT÷i¶ÛüØRc‚4oRÏ Ï™f‚ú‘nù“Ž[z“í£ì¬]¬sÍ™·¤àU,ÐÐŒÛûïcççí+Þ ô<Rµ¨¾Ð?@”û B…e }[¤°ÛvÃŽ¢Õ_ŽÂŠßê§0ìèú<­ðÍp|íÛ*q“ò1‹³ ³ä”ÀPîWõ'*ž}6¢=ßÅ}Ï#UGÆnú½÷[@=lT“<¨&È9ä#©é,)n‚ã” ›Ql!Õ´ü'l_¶¹PÔŠqeçÛ Ÿ†¾±ÅøŽÓÆåˆÈËSܬ)l{vr1ñìui†pX…çÄ<²¨öTKE˜ —H°+qîúØ.úôI–ªVo~²ÞÛnOlÒòÒ©níª_‚*Uj»!ÉÜÖJù¥õç®='a|ø¹£mðÓörZŸ‹× iw½J¡2¹æ:ï*ìÛ7BÈegœXM$—ûî°$:5jýHLêzC#fÀò)¾eULq3¿tRÂoóžÛLöo@@ b„f¦¡…xÓ:: ¯y Ê6§ƒ² ·ÛÍqW¥ žÆbsù23dBúÊK“8?ÞH$›I:ót‡È¨o_Ö¸Òú¥¥âpÉyYÑž”iŽÂ•‹LKccÍEHÊ\öŒƒFñäÆp™#®nè2(ú+, ê”,¢Ü¦ý2Y:ÝÆ¸{G¶Ï‘îiÔdxÊLÖ¾¸8~Ø$£Û¶"‡æ ¥jåÍÕfÍe\O<¿âõwç/´ß ÛÓî­_h^V‘ðõh¯N-«Ê\|óaI IzÛ`6àú0ÄË0¬ád¦!’ãCßÙ9 Ú°›£âÆÄËYŽûP/A°×I<ä<¯ì A¸ ‚‚ã§1håN ÛkZñ8™Š.j ¼Ë¸ç]·?x?_쵓üÙ¸òJ€Hî^ÓýyðV4CñóÅ|oêÁµAÈgk "ó™8NJÓþH†¡¹¦@†ž@×±§üW™ì2–o¦xˆ\z³no͚ø`,|ÈæÆDßÍÀ/£¸h¤ɊѽS8™D’"=pkRÛ™§ Bõ¸34@XmÄi³,ì5Ѳ?¤'ï±ÔŒKK uþl0ñ¶Çô÷é*š Œ ‘ŧ§M‚8 )ÕÝ<ÍG'¯•a1 ·V7³S…d/ŒÞ­@~3[ô0¹æn^áªÝM”Ý(œ\ð'ä£h¨¿LtŠ'Y§º²Ñ®”aÇáµ}îäüRÊ"!;/±úÔf[«J´áq'vnô,,ôE¹áK|Ú(¶\Æ ‰*§ÖÁ)¯÷â Y>;SÚIûgK}eðÇD,™y¶*GoôwëqTç;õWD~rÞ¤4£|)jßÝç4ˆõ=…D&¤tÃdµ7§ëôÀ<á^ ÐðéÜ{¬¿y-Ÿ«÷M:E8ŠøÞ¡›`¼óÇ”dZ¸ðØÊ’g%tíÎDþŇøÿ þO¸.0ÔÇæMüèØdendstream endobj 67 0 obj << /Type /Font /Subtype /Type1 /Encoding 103 0 R /FirstChar 49 /LastChar 118 /Widths 104 0 R /BaseFont /GUFBFX+NimbusRomNo9L-ReguItal /FontDescriptor 65 0 R >> endobj 65 0 obj << /Ascent 669 /CapHeight 669 /Descent -193 /FontName /GUFBFX+NimbusRomNo9L-ReguItal /ItalicAngle -15.5 /StemV 78 /XHeight 441 /FontBBox [-169 -270 1010 924] /Flags 4 /CharSet (/one/two/three/four/i/v) /FontFile 66 0 R >> endobj 104 0 obj [500 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 278 0 0 0 0 0 0 0 0 0 0 0 0 444 ] endobj 54 0 obj << /Length1 1626 /Length2 9443 /Length3 532 /Length 10306 /Filter /FlateDecode >> stream xÚívePÜ–-à‚wwww® 4ÐH7ÆÝCðà,x€àî„àî4¸Ûï›™;uß¼?3÷׫×U]ÕgËÚkïµÏ©¦¥ÔÐf•´‚Z€ä +'‡@ ìháê¢uTƒ ª°ª‚¬À€g;/:-­´3C!2@H ²È€,\\NAAAtZ€4ÔÉÓlc 0èhé123³üÃò'`áùžçL° @÷üà äurA`ÏÿãDm³¬Á €´º†¢š<€A^M ‚€œ W °%@l ‚¸€ÖPg€Ã߀%bþÓš Û3–¤ pqY‚ŸÓ@– §?.€ÈÙìâòüvØ8!°çÀ 0ÄÒÁÕêg»5ô/BNÎÐçÇgß3˜Ôæbé v‚ž«jÈÈýÍf „ý©í~v ÖÏ‘VPK×?-ýå{†yö€`ˆ ò€ý©eX]œ€žÏµŸÁœœÁÑpuClþÁ€à ²:[9€\\žaž±ÿLç}þK÷@''Ï¿²¡Eý'0Ìä`͆ÎÉõ\Óö\Û Agÿ³+Šk(€“ão»•«ÓøÜ@Î ˆáÏÎ0>“ZA!ž+5:»ö\Àð?S™í_'ò¿@â‰Àÿyÿwâþ³Fÿåÿoïó?C˹:8¨Ÿàï7ðüÈ!€çw øóи:þ)@G°ƒçÿ-韣õ@³•‚:Xý³O|‰$ÄæY6Ž¿`9°ÈJ ³´Xžçõ—]brvC@Ϻþ5R+'Ç?ùÞÚ‚-í!àýÛ‚Xý3ýg©þ"Ï®­¥£'«Æüß<®jú©²‚dÈÇ¡»µ6¬©eZxòf´…ÛíèŠ1€ÚísÀ+šK',?Ë”êX‚VœZ8¼Ê¼½}º„«Kúž¾Þï'È]›¤ÌY±/h…Ý0é"Þe‘Šê”zÇ…s•c᛹Sìù5ì¹IN ¬µ$Uî¸~ÝE‚ÃeªP ëû"³5XkãŽ.Š·à]–R­s‡Eoc~~AÞ‡'"Ý KgW´‹w¯>„£ZrØËÚ h—x`Ÿ¿hà+RÁ!À@ä‘JŠR›M¸³@OL“PîÃÕê`gíp‹ƒûA8õ›N²±Fƒóú"IfxKÌðOåò{ºª¯¯&ùpúƒ¢5Zùµ‹þÌX¤*™Ñ‚¨V+ð\Ä1ÅâàL•L„Þ ‡…‰W‘Ay¢­¯'µ›Žñ[ôÉòÅHPrL‹Ä\7xD¤TjÃC€Ëµ,™ˆJú€ÆÞâx_óð”EÑü¡PYŸ–QУïeVgRU°VÇ"Omû§„„ Òaû×h…õä=›Þõe¯ªŸŠívÓÉrjÌt«a·èôBõq FPhAroAÄžÅ=߀€·¯É&áF¤~Ì ~Ñ=Ý7bZ\’Ó+8¥Èññõyƒà<I󺛉̹edÕǵ¬»¥+w¿pŽ[ßN鈉í>LDsntê-"ÂÙ+ŸRS¿fQŠp“bDtêpßæ~O=ÅŃéOYTû€oPç±_üNÐ2ŠÆ Õ9©ãÃ‡Ž”vj§K×Ðñ×RõÌX5zJJ)¿øÑÃÕù3¦{0„ÏÖHùlÇ(âÖ¡/¼ÁŸ&<¹û\À¹¦£× ›mábyúûÏÔÖ‘‡´~Hq\åE'ΞWܸߨ†Lçê!Œ²íU¶U}­ÔTGÓànÆê¨µñ¡N8³›ñ|1Fí·ø?ß(¨ºd)ø*úîÍ^C¼L‚f|ã)ÓǬ!ºZä¶bHâÞF‰ñÔâhô¤QÆøIƒUÚËáÄ£¡šf¦ó# Â9gôÒ¿r#œ>A›«™úOùžVúäYòÑ—;ÐäKßÈb¡ÞL½f˜0Y,ôܸݒãÉóZ+(òà36dù@o…fØçZ†Ï2F?H¨"Oyém9Å&I„ÇN°µ"H®8Ü@É„³MÁ^-¥Dä× •Ù4h‹,÷eË“³a<ýtÿÀFÙ•,ë‰ùƒÌ0¡ë›ðš°ï¼LøÜï |R€â½Õ:à gzëJþç ´œèYi µ^ÿƒϯæÇÛQmh% Ùû¸†,pšÄ͇¼˜ æ³£l}ðW‰.÷‚òC¢7¸Ö¶×å´t„×xphk/°×Õ‚áêç"NTì;¤̵IjŒ¦hʸxæ6ÄXJ$_8âz^xÕ¾Å}Õ¥§Z š»Í«IÉ“‘Ú )K½b@AMZ·tJ¬56‚Pù¬=‚Ùitbà“Ù…Í2ÚT²¸¾/ÕAôÕdŒ°xE*ÇC?÷âÚÕº×,Ùð½î¿Å]ñSAnäéŠßéM­«ðKä"9J/ÝåÈ€³5êjûß}VíJJºÌä–8Oª–; ©Q)·ˆ4ð‚mr¾8''Æ#!š˜“•ÅªUŸ@ÃA@)ú>2Á—\‡†`twCäïxô·j.½É»«Ñ{sŠ=ñn„~ùH,2™Ê¹—€ù¥[Êjf!?å °•6Î^6¿õÂ:@éäX”®¦1ˤ™$á<†´‚Ü{ºw¿Ô ÝÔt|Âô˜¤jϳ-õ(ìuç÷xÝ*É ?Zëïóð¹ hHÕîD¦uàЮêàL¢è„µ¾0ÿ~†hh÷[:¾ š+ýqzé¸r?â÷æøŽ)NØïuŠ>ôò&½Ácúr=÷ Çö¦1Îo!…;ºÉŠ´‘ÑŠäZ}r²ÄFG´µ:#v#DÓ™÷Ço†E«º$]y,#Ú¸ Y1™jgá\*Ù8¾ÚúÐÂmÌ2‹;õÄ!žvñq3ËÙ¿E Tiɬ2ã ¢|mÀO_º\Ø4üôq «.µ„ÿÒ„Õ¿äöt¹W,|š7Ï¡6µR]è!ý-—»ãÖ¯Ûë@z |U„ØÓ.¨ÈµxBgïÌÌRJTðu©”ÆÜ!‚ ‡«"ößPË(œNÅ+¹É\Kê—&BJ‰²†ë$Ä‹aì •B4’œ©® zôýJBe–uŸ°Ž™¯Ì©1öy‰Ö£BíEɹÎpÐ×°ðv,ÇÔÞ2·sñ%W*"¡ø¤æ¨#q ãÄh†âéÈ€$l›óõìµ²?=XjY¼ÀK$”,ÓšÄù;€;‘øÛ/~Ç:„d,\¸°Ï>jr½ãR‡„ß]éõ8X—Àê!ý6¤ G¨Ûö’ûÑÂù6I$U¾O´3ï’ñme^õÞ/rb;³1ŽŒ‰^ Ar UUÆÊ t6²i¯á\q#ÚæO™‹ì>Ñʘj­³ìàfNôæ+žŽêûºñ(Kšq…ªÒAn,L¦Ow¤Ì ž}ª!é¶žˆÒ'GX;êYIBñ¬em%{ åŽÎ6iÆÎe ptB6xULÖ z-ÜYœ¤þý°;@S#ì\¯îk³¥ÒVŸÁ;™iy O'/y$v]c.¹"þ¥ ÃDöø@áS˱’7XTnS•ý¿ÔŒR¯U?U¦&ݹ‹V›‘¨·!ŽÖEù­x˜—Ü]ÕѲ À¾~†3®# Â8`¼$ÚjH^:F[o,Æm+t‚Ž -3ËÕŸò¾ ¯@1ª>ö·„pˆ¿öÕ)ÔÈ=ÓEEÕm/O`OËwNr,§•þh}vîÍX“~Ëœ ‚aÝžÀ} ¡9ž ÇëídsH‡ *[û–&ër  ^ßVx @L+zôq«7<çâì¶è[ژ索›uð=”T…æ£d}ÕûtàÎ37Ê™•’µo1ª¨æÁý…<#fмdë³à €ÎyÅ­yåîŸ;“)‚t½ÌÛâ‡õ­ÚœÌNžù¹®xAÛ"U\f‰)Ï/ú=U4U¤ÖêÆD0 d3Q圯:k›…ÝȺ3¡hVhØe·ºk»Á:h>æ\°\C7‡O6†šÔ4U+%1È_Á%±âRÇR”ìªEs“÷nyc3GiÓZ3<›Ô‹­x–Ù´)úÞËùI»þžx§—í¬*´3¯—(ÈòZ–Õ¦§†.4‚QçÝAN¥ÀûT­²MjÿoÖVúvm.—Ýï‹ÄBˆøçJ²<ç_@(tg]“xDÉhZ_éü¾Ö§Š{— ´ÊJbKkÃHåF¢,|ˆšîQ» K™À¥ Ã5•}#¶kªQ¿_aÒ$ðuWK]µd°.$6ì^¡7–â¡CPéo®m¼xÙúT\³i ðG?H¹ õÉ|¬ß^cË0Aä !ÙVÈPù ÉæU¼Ûoå/Ó5ç"!ê-‘ÕJ$<ÈÙ¨²\/Æ àÑ’'Ù³Æ ¯~’Î ãmI_­‚ÔR½kèâ$÷lúu4Øa)ïà ô¬ËwÊvHQ tŸ‡ÂMPHÖGR¿+„zžàÕ÷nTSûI¬µŸáä'mìàŒØïÓ§ü*v!mG‰KÒØœY\\ŸVûDÑ[‚\ñ)^?¨9 ™¹‹ÅUKÂãä\¤!¢«?Z)ûNHwá×:€4'„_ݹ~jiEñ_"°‚Ãéå±¾ ãO¡~ý`Èþá;ófMu‰È@ Ée•¼ý®ö™H+L´Q‰&ˆ¾ÐØÀwrnVçÌVM'«6aA’|&© y@ë« \Õ†ûœ$M²,ùÂï@â4¦&Ñ‚zècù`YÇ­dzü •ɺBò÷¥vvk‹ <#*JQ1düæBGÑ¿òD†g“Ww‡1·»ßâxÅÈÌÜ*%1Ò“‡WË6{©ðHºA`/Jûi*`¦Üúó²ï§Šfd‹RGÀç±6¿u¬{Ÿ/ùkM3ão-Œ¥¬|Y tT·nÇ2šk L4\;±çÚî³Hß94[åP¡ðës¤Ÿý+Ò¾ çc9ಓM8E†UkQ£ÍS¦ `x]ê“ë¼RÃ÷YN.ÚˆAœ^i¶ÍÈž!­Çº%“‘BGUpy¢UB?/ññÛQŸ"–‘g*ŸnGûãÏvƒì´0Å„hëõùm‰?Üì„ÂJ¹Ra W™Ãñ¦Ë)§—èdÚ8Í>ÐnÃhÆ÷ƒ  …¹×¡áaO¡n°sf5°_O}%c1j¤^§ù1Ê‘4æ¼bO«YÊxû}æÀ`^}D .²j‘ÃúëãÇ»†M"Ç|—be¯" KŒÇ§Ëššádv6w4,ï @.?Á3±] ÆëO rÙlô[˜/´Ði`‡Ú‰hÄ¢ì pcËíQ |gyUV’$Û³•/¹_˜çvÇa&ôÙqTñÐ;8â”61wl•ENe¿dzDîÄèë:å;³ÖYŽ®·èeüxjXÂ2H¿(O,üÕixøûªºÂƒ‚Æ—Gž»ÉÙ^ÝP3æÊš[Oæ…4Ri¥ÂQŽ((ÉûåÛ즷„þp$ ;?é­ú4Ò-ÜÙê·ïÖ?ÆQ Šð eu=ü$&Öüö[®J$ÍÊ*¤^f¼[ÇÊ|¥f/oéø$^s¹J¸}õp•mTEšŽÝ'¬óÓj~Þð–[ö¯YÃÍäÁm¤‘içÚy—Œˆ-=²…Zn{,“°eÒò!ãLD'pwv ÊÃt—𣚠¨T m–W+jåN4t[gI¬}ûiy‘\LŸÏé’îŸÙ¯Ï|×óL^2[ˆs¼Þ…2£šïw2p²wJÅ›<óž1ä‚c_>^ÿ¸ŒH~5E×]ÑìIÖ[ô¹´ᜣLBâÑhLß»:¥¼&ÔXÒÜ1äÚRªs{¶‡g{‰+P¨‰‘~8¶Ú¨ÜZ xš€Ä:%à­ üˆqîrMã HîÀM^SüÑhy^­ûyu„ .Æã¥võŒF¼Ç ]ÁÝbuêBêû4Q䟆/7¯R³OÐ@[¼ L¸ýñ¬ý·ï_=0PãîD ߺ/TeË&ĵÐÍp]¾t1àNúy¯³ž¡ÿ\y÷”™é²—üx’säø$z¬þ )H6 `z°³–äÓð9µQJúòÎÈ7bЬ¥R>r¾~‡ÆbÈt™¨ˆœpïwjºÕÛêH §VTŠx0ìY’'ÉbY¥Àí†wÒ™½ó…ëDž…!fEá[‡Uô2SSÀ™EÌ*²Ð…Q¨•gjrAû.a?^ÊÁY3ŽÊ…I±>­³H‹=Ú¡¦£Î3r—y%¦XP[,î)Ñÿû¤iáà™åÒxÁ§¦l„>>o‰zc a0UÆI»lÆ 3âûo†Êu—2Ë“T£ Ö¯—;c˜7@gÖæV­Ì‰B9DöätgÝø‰PxAôëßj«‹ vSpL´ý>ã4r¨à`Wgwé´¬5p·ØËB»F¢üä—›ã)¿ô©õ÷;ycÒ!o2 ˆ{=.?óX&~ %Å6ÜhKÞ6Y×+d –TO-F²÷£ ÒÊé(±º‹€ Ú¤k~¸¼'*š4¥{ÒK¦±7ÇÅd&ã“X}s“|þ¥VÊ4ÓG$0Nõ²r]DßkŒ…¹µ^Eo0ë¶+vm˜ÆKô?¼ÆÈ$2¼¯:ˆ$È_v€K9 ý®õZAfÁ.ÉÄ©è\Cë´ï›*0Ë )±å Q)Ij÷ýcÌC×-Ü+R%þHŸWÉÓ­‹œ÷iÝGwK^ù\Låð¼1Ã3ª\T×ƱT\L$H·Lã.>¸'Vâ]à}ç” ÔU±Þ¾åLÊQÑLß6ÐÉŠ?ÊÇRÉÏûÔ–ÎÕâôNN­ØtßD»+½s&täŽEx`ä—W¬I7xEž^Ÿ­hblH-›¬&·×˜´Ä»ðÙŽ`ŸÿÀÓä£ðXj(Ž•)&.ŠrL£.…Þçô7è–Ÿ´4 '3‚WR.ëw¾ÖµŽÜÙ=øùypÊ¡Ö"-õ[ž¾Ã¯¤iay¤ŒËä¦^ÛVÞjF›ÄŠxyNßÝwQLPoÆ4${œï¾[é0¾¶àIõ…ÓæOâX-lSXßÜHCcY£²QS ÑÕt8ý !\†ª‡>P#6ÛerÓVòÀ%`€ŽÊTÊÓÈTó]—Äô’oÔa=]´¿RêF mÂæ£äiÄûúøü‘’  Fh…K½=+¿†ŽàÔ/T+%F{ö„,¿ÒÊ+Ø“¿ò|Ñ â¿¤ñµ±¡ î¢fšNõžWÞ >N…äÉÆõÏ¿«´{ÍE)cWó³ß-ÑÞ‰wóÆ÷¶ô|[H²ÖÇ‘ñqU+Ö7º@å³§fìH8µÃ%¤YüpÌ, ‡Ÿ¥©Í¬›ªžšoÞikìÂ5ZåÝ29=d1Ï­úy7ˆ™Þ}í3­´·=5Bñ °/Ò¹HS÷ ¤. oÜZçΘX;ø’žµ9Íò¦%P¬ÚM”ò´#Šeâù¿rùýµ·£Ÿ÷Òu:S$­LÓPZkÿîŽÎ”0ÞϾ'!ùßžð ±Mdï¹\ŒO"mc·#׳é»í¡ÑãM_«YHºdˆ¾Ž?~¼¢ ˜‡Ë×?¶u¨H_\¤˜½pB?ü䎚|µVk­‡l}‘$=áÖÅN_gõmĤ,ÞÉÒ-¤HÀìÃIkE'Ççh¢Z-ŠÍuRðŠ= ýø#Ï’K¢½û…ãø‘p».PC›Ó{³¶¦FÛ¤åm5GÏD#.µ¦z¥TÑYÒØDó iÊ6‹†7H¾’O$…~6_é~‹‹Ðåï¯ 4óœ~1ì°²£Í 5#ÆÉÙ èÆÄ7K~ DMˆ¤Üìií!(DÇ­ð¬]+o‰(K<¾ù¼ã^Êø#Z&ƒn¡o%éö¼M qâ¨:Q…&o¸y‰ÂÛp[í pÙƒÂ&*œ†Òh±¸äQW½W{ó~p/¿Ã¬Áj2û8‹¾×=¦ßœJfQ+ô£ôÂÁ 3>„9Òr°J˜!}lóš‡{W~%µ¬Ëj Ì,I¹¹ð›²ÉÏ?èq>ùa«›Âö@ 줋ÝûD›>9X.WJ«—­_4dQóÈþÌš¤rÌ/ç0÷ðæÜk6QðÒ&@ÜžîbIÍížà]èXʨ›ÉVbÝîØ˜n0×[ÅÚo=E ØE"wG–y)#(±H¦„#2R F½Þ}ÓªÒÉÂmi¸ƒ|µH²îqíøjáux#º I2­Í'´Š)íŠÕÃëÜŸá±ívÑö“D I¢Ä?f9DËHÞgz3ò|JÎL“S²0u³#­áJ ÁÄ´‰Ú·à’Hò"5r ö¾–àØÎP[iÔdCùÄ„ê¯ï –‘-%qÎ 2cšvE_ÚN÷eÄùa§ ÎÔϘFC5m“«q¾b Bˆ’á¢]÷#ßR\Ôh›µªàé¡—ÂÀËœóâ2Î ³á½ÒýW4â7Ê.e'W"hü÷ %Hr_íQs/t„6›ÞRÒê^ÒŒ<’ßÊÓåQäUý\uÉJœrœì V2|ƒã±Ø#£¶ÖXðåëB—ó's±è&!jÑAh–»\')9EîXÜBf„ù7Ÿ{ZD9%©u›v=šÞùĘlýzB’URl nî²AµŸkÞÔËŠí+:Mku£u›|¶ÿR„™0=ÁŽeük;¨¾Ø`v¢eû|À*õÙVælב4dÁh½7jFá#¶å*Y2?T®¼ 7仢5Ënydз^g´¾™"Ì ’½†´&yŒ¨|³„È$¾„ô9{‰Ö(ig‘xslxäÃo7qKY@®IêÚA;nêœJ]öU°—û§Ÿð]U,Q÷î<Øã¼£aâÄ£|ì:|RÜ_™|ëN@èÄùÄeÊúÊ¥ÚGÉcÊ\w wœb-gÍ hÑj[Âážâ‡‡³ßRRŒ d–“%d»ä}ÁµlæñAl?«Ô7>×Î^´Ž7¥ÂurR{)'Ù¦| ]Vž‡–ë,dLó±…¤!’¹unÇ™Ìk‚ føyÃgÅ—N·oVàÈ{Ó=ÜÉMýÅÆzúˆD*”1¥çΓ›60Â[¹%÷@Òá¾æHŠ"2™Ît|¡iãt¾¦^Ú¯+ÂjÊßýQÎ+NŽÏó3;òàñbÕ–¼"8÷t¾`f x).J\ íåJ’¤ø2Z°ç•à/ŸiÃõd˜žô„ßí°;ŒñÆ/o³Øª,ý¶ýÍíÉ[|í•HvÊÐä׉ÅÙ÷bÖLq¶|:…¶ $Uë'ܶ@œÝÓ€%³Ÿ õ«ú/>ûWú³*=D¥<ÀQ_WX½h­¡ý¦u8l[ á­l´½–&ûØõÕšsgÚ‡í×EAZŠä\¡Ì•~±àˆr`c´e]4½°&3‰gMÖýÄ&«Îuß„vòŠz šr×{Å»¤×-WÊ_{/¹³M0©xèžqMGdN3'k˜²}˜t§™xô)¸ÌŽŒñÃ'5ê&Ú¸lv¶/ïÇ”nTºß rŽ]Ödˤ”ÏlhÐL‚Ó{r åÎ|êJWÂ?fØvöîE°›KPî\ ©YU"×£©dÏwĘ5”å9 %ÐÌ¥›Ö›]!ÑШžø2’ êJXêøn³2» 8Hq¨“h(=•EcDÏ.ÅÕü;¾.CÙvH¬cusÂXLCø‰ê«Dgú$žÞ•ªAb)ò±dØ™ÕiÕ‰:Z‘ÇëàÛ…ji ‰ÓPÄVj˜¬Šsñ— :‘ ×ºš™ˆ‹B*€‡XÖÇéîåìM¯àp w„’çœ ¥ d¿˜Díj °Œ›°KkÊŒUÎÍïÛ×W©Âç^ÞŒÄ$ÄDFƒV~EœPd@C°°í ±ã Èúª”ê5«éêZvíÛfu峦ö4ÄÄc®—9ð. ¬‰WÕš¤€¼³áÜ/ãø8_ãšÕhðSk[2Т:)íøs[ÊÂG—Ë¿üô1§µ0’懥ð[(³–Å\qâRB¯<ãUð ê÷µ:êá’Xr&¶Ñí¼4ïàP·4Ĭ}ÏTž f,¾jOóyuª¡¼Äàær¢¼{g‘5ñi‚øzç›'\° ¯ëv>‚Î.Ï>R¯óŽ1À­‚9¦‡1«Å‚¶~g¥ëèǃƒzð{Úä(\ˆóKœGº(º êÕd?íxN\ãœÑShÅÌÚ +ª“¶Yw·<5LM©76²‡Yê4ßzÁ™-T™‚Cy8JLøcÊRÇODË7®ùÁ†(3¸2|2fÏ\a.|±p½¤¨)leȶ k½pìMPŸßÑ.Â\ZŠÚ œgUkO-ˆˆDó-ù¨Ÿ®«çÖSL óÝmk f ›Öá®EOg%½léqCÅË×¹W ´™kœo£uÞ äž†jÛói• Zò<É*_¸µg£™¢²2ºÛGõÅaN铳ßJ4¸4}÷¼±è³i@ÕSËCœ'ª^,«ÂWýé.!ÑHc¬¼î”@J{#–Ж{¾BÑèü•”¸÷y yŸ[Éúš¹ÛµfÀgùúâí¯|AK°£áî$é(Ÿž,êòåB\í e¨ë­ãÂ0\S›ù& ‰ê÷Ž:Úzoò-QŽqiN][ElAÞ&ïCéW½-÷|¼€sãøÎ¾él.nLÏí –¶ó½©æCŸ×n(ÄÉû`• `øcTƒ–«yç:å'÷¨Êº·VÑ[x½›­Ex1M£³sŒ‹;Õ,¸4‰ÉÛX SÅ*Q" Ö„ïòï dÄ{ô§–ÝÈe{ѧ¨sGIøîy!pàjË ¼þ…¬¹àä}›Dó] •Ê Âà¥J°t†è9ÒñeN­ÃEz ÀÔå o(ÿ“³Ûwǹž¹ [ªzê6¦òÀj£˜V‰žjsVJÚ‹­D”óSsõ'}¡WÔ35RàN_0C^ù(3´ëån¾Ä¶6¸¯D‚®{Ì ~Ñ ó£ }éa(ãÿXˆ!qÏ·½†6îLÌñH=õ¹ˆPÞÄõw£Àë±MT1¾a%EÃږЊ²Èl­#hXç}þ^QKo»†H,KSý·¼3âqZ‚û̸qûÚZÀù!ÛŒY†Æ\qÐÓêa/ç&ý;9Ü`_™.AcT $Ùdæ+J¿ïÙ¸Ñ+û=1£–#¿/§¬uô¡¶ÉtUá1b•šQ>G%ÏÑÅÜã™¶|&sªþ<ó ›Ã€&Ú]j¬«ÔŸÒq#Ûð<á»ìP†Vþó"¤B½ »ÍïÓ's‘>5'Œ–)¸cZÛ"™Åo¿û¶ØËØŽÎÔ­Ú@'OÃj9 ÿµòÅhÜKNþZCnÀ²Ç&zwðÀkäSö‘½xÕÃmib9¹ÜŒ¸œN8l-;¡Æx^©q¡Yu­R*ë¶2…&Ü—ÿó`׿\‡õÔöÍ?0WÖåÄûÊ—Ù°¯¸Ô0H»'zˆjöxÐá,"iTiã”Î;£” sN¶L-Fß0aÕúEßÙ­÷WÇ£Eõi¸Ñv"›ø­j÷R/Ñ^ß>:-¦ÂÇîNE/cëkHW#ËÕ—quXë$§él 2SÅÀ¿‰¸wýVò1­؈=kMYfñ*ÞÏ«xÓKN<æ2º°2èu©ÙR/ÁNÂÉõ#µ~ÎÙ|Û¥öIw¤+à-|¶zE+è€â9¶·"[yNÅåòƒ5§ä 7¡±®®ž!,$w§éÐÚЖ_…CË.ñîû,ÝR“Gòúéøî‰.ØÝÌõEÝP,ŒW^žÇØJ¿’E»’Mñºô×EIbµ·ð¿‰B*z yè¯ï¥g éyéÀ v„¯A181Ú-åGžVb©F·@ø•ëEÊâ#õÓdcz@>¶"?ìñ¼åY&‘¬;%ŠÍôXÉ1ÞXÂ* q m|· äYê¾)8(ÝãsÜõù˜ûú²d…¹»T¥³ûbŠ6ðìc8ÍÞô ‚šÞ‰rghìÂ’v×tÅöãtYõC™UÈʉòÊ<_Ò±AMn2Õ¾ŠÄ/¨å  …Ò{Î,•}KËw3ãôËFeš¼—vK¨‡É`@ºŽµ•c—¬©Iéżg‘å“ñeiNå(¹†‡EþÃh1(U—²2óÃÔhЇžpE¿)+§úì™yZ„mg…f1vÙBf²+óõÏ‚I›õ5Uºt n}òøê–?ÈÍ|\ÖZ¹T¤-×ͶUFÒÑa¨o]˜NÕ{Ñ WÞçvN×}r¿x•SŠå—Ü©S«áÂ}±Ò’„Ü{<ÊÉo]øÐâÓìúâš@ñ®£Uä —qñIÜä2›Íq»~qOî¦o>6¤Œwv ð|TÏ.+VLPãø_~Ðÿ?Àÿ–  3 êt¶Gÿ7Ò-®œendstream endobj 55 0 obj << /Type /Font /Subtype /Type1 /Encoding 103 0 R /FirstChar 46 /LastChar 121 /Widths 105 0 R /BaseFont /SRUWEN+NimbusRomNo9L-Medi /FontDescriptor 53 0 R >> endobj 53 0 obj << /Ascent 690 /CapHeight 690 /Descent -209 /FontName /SRUWEN+NimbusRomNo9L-Medi /ItalicAngle 0 /StemV 140 /XHeight 461 /FontBBox [-168 -341 1000 960] /Flags 4 /CharSet (/period/one/two/three/four/D/I/P/a/b/c/d/e/f/h/i/k/l/n/o/p/r/s/t/u/v/w/y) /FontFile 54 0 R >> endobj 105 0 obj [250 0 0 500 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 722 0 0 0 0 389 0 0 0 0 0 0 611 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 500 556 444 556 444 333 0 556 278 0 556 278 0 556 500 556 0 444 389 333 556 500 722 0 500 ] endobj 45 0 obj << /Length1 1630 /Length2 13519 /Length3 532 /Length 14384 /Filter /FlateDecode >> stream xÚízeP\í¶&wwkÜ]‚w Üii\ƒÜÝÝ!¸kðànÁƒ»¾ïÜsÏÔ™™?sﯩÙU»j¿Kž%ÏzWõ¦&WVc5™¥@ö`fv6~€’•‰‹³*ÈN ħÀ¬ ´p¼Ë¹©©Å€Æ`+½„1ÈК$€¦;"5@äàádea Ði¨jÒ322ýKò— ÀÄ㟚wOg+ {Íû‡+Ðä`´¿Cü_;ª°%`ne ˆVÖ–U’ÐI+i¤ö@'c[€²‹‰­•)@ÁÊhï ¤˜ƒœ¶ÿ8LAöfV•æÌòŽ%ê 08;M­ÞÝ€î¦@‡¿TL “•³óû7ÀÊ`ádl~ï°²7µu1û+w¹9è@ïvïºw0e3ØÙÔÉÊ xª,!õ<Á–Æà¿b;[½« ówK3©Ë_%ý­{‡yׂ­ì` ;ø¯X&@€™•³ƒ­±Ç{ìw0'«¿Ópq¶²·øWL' …±“™-ÐÙùæû¯îü«NÀÿT½±ƒƒ­ÇßÞ ¿­þ3+°3ÐÖœ‘ã=¦)ø=¶…•="ë_³"ko°³ýCnæâðO+ÐéïÑý53ôïI›ìm=f@sDV%ø=$€îÿŽe–ÿ>’ÿ(þo!ø¿…Þÿ¹ÿÎÑÿt‰ÿ«÷ùß¡¥\lm•ŒíÞà;ð¾dŒíï{ økÑØ;ý/>ÆvV¶ÿ'¯·Öþ#Ýÿ˜,Øø½-¢öïÔ°±°ýChå,eå4S¶›ZÌmß{ö·\ÃÞ èdke|çöﶘÙÙØþM§niejcÿ ÜÿPíÍþ½‚wºþΟUNSNNE‡ñ³`ÿ6T~°º‡Ã{nÿQ"Èì?Áˆ‰Ü^Ìì<¼f^ö÷û÷ž—Ïÿ&äß@ìÿ:+ƒ¬Üºïu³±ÿ]ý¼ÿ:éÿŒ¤½)Èì¯ÑQÛ›½OÛ þR›º89½“ü÷x¯úŸç¿çtš"./€L‚¬S3ÒÀµx9ƒãº}=ìPƒÁ%õê…ùþÕ n¿Ô°M¾ £çš`–† þ×Vù#‡—]9†½á\[ÚîdàY±%}o>Æ:MûGƽVƒ”´cÍH¯ó9…_Ð:J¡p|~¥H0ülWWT¯/òë$ºRØT-$DMâ{8kù@*ît#tÖ°Ðu¦øø¥k¹Ù/(Ëâû“Ëï)¢ *¬ƒ÷{EDæÓå<[PÓà5 é(bþ<»×°pÏÖÜ*äT³ƒï9¹obÉc0:ó)íÒA-Âý¹]+QÜïˆ?¿;-£Ñë×Ò‡¼7¤Ë‡OÜ©HµiN<¬ŒUò«Õ¨y³!;Ç6¬4sâÏN(ä-4ÏÖÌJÔ5ÚÍõoP~·f\ÿ^Å·ÝKmi›n€¡”4D6œ®ø#¼{¯Úò—K8#n°²ïý,©Ûí)³X¹·i(•‰N°È¯—7^缃êj‰8†ð¡Q#Î8µÓê2ß>ŒMÙŠEï0Û²žVTˆªü0º0hW+e¿ZÑ*¥é ýŽ8öwÞ*xŒq&å òÙ~’™âkU•·mcPgð8  »j¶Cˆz5Sq’âðç§ …”ö4ÒX—†Æ3Ô  .åý¼A³’€) ÙU–[§Ë„º^F)î¾z-°ƒÔ†–¡8µ#P~îQjpeuHÖÊ«‚Ù0\hET)êí&*ìqâsZ”ÝÇ¥,»<ì ýîÝŒýñ~³#f[ל;ÃþP†ÌÀøËO+fCV» pµ£,„t^§á ð×ÚcÎÔIclTû£¼Ó±úh2«¾nDëŠýUexu'|íW2nˆ<€âò)þ„™LÁˆÝ‹Äµb˜_9kcN!Þ?Õ¡µú†s<ïWæ9C/!Æ\ï}Sj v¥õ/tw˜B祫“XãËóâŸÍ(¾ÄkdÖ;Ø. ø=ôžÔ> ~yR!V‹‚ ê9´FâÞa†ç¶èGýŽ^w¢íÇÈHçÁrÄ”ÕRêÚÝYé\%ê.HÚ%æ8%î@bÅJF3>N¬¯2š5÷­y'Ô4¡‚qi"8A(»5íÁÁÖZÓ’2?‚]á‰(-¾döq+z9é±0òΠ~íq@zk›Év.UvÔø†æŠ$Z¡‘@CI‰K–¦À^¤¸–8Rz`¢¡ÙÛKÙ³Úw`S\:»gßlôŽžUÝÌÛ_KØc¸O(Lð~ÎN§´ÝcG,B {rª¾rPL° $"ŠýP³`Ž ‹sŠnÇõE §Ã[]^¦*KÄÊÿ¶úsQ€7sÛcݺ«·À³â¹¶d“q 5ÖŒÝû9Ð։ĦªÕ³ìv_¨ytü˜™D…é€ñf¨m²[o½Ñ§ß+FÞØöûöÕÂXüE¢Véáeý Ýú+`ˆdÙt©ß ?“›t%~¦ï‡w³øêÆ}Ãzt8:}Ã& Ò7Q+ÚÆt›ü"ÛÞlFoö)•‡Eÿ-ÊÒVw‡ÀGäÅ÷ƒr¥Îúïo’ª‹ƒ#A–•ÅKÇ 1¿PqÛ°v @ñؾ¼?iñðÝ<8¸X‰Qì=œtÌã—í*;¯©„áTFŸtDOÛ“ÙÑ ƱtdK“ßî/ý• >Q ¦k2t€jp-Ù'± ‡Ã2òdŠÃ’[+J{Æ'D„ž”_ûáršÈ;w‚5ãú%Àä;]†–(ZTT‡ º1—,·„뵚¢WráWR h kÐ …sÂ}Ú ZÛ§]©gìEÖÕ·– $I¨éÃò#·DU Åö¹§Ò{Óñx9f¶ ŸÎ¢I`ˆ©hÂ^ñÓ‰ý ÌéR·©lÄJ«ƒ` Ö‡$§þIâ=ˆþOÕ6‹ûAl¾ 0N 4¾ Ì:\gUB쯠Îrvši(úÔï̓×ÉÔÔA:®ž»>¾_þ¼x½áÀtaïuÿù5ˆnrê¤ÔÏWzЀh®mC)+&¢ •ÈïJTUÜßÐ:Üš{Ú+(òµw¡|®Tvmãw•Ëp̸µ,™ê³ðånĈ ÞþÜ[>:ó÷Çdâ¿Óê¾=,”ˆ-<á­UCøøŸ4Š÷Ý.ª}¾èâÉßg¦ I„}\‹æ¬³¦(v{xÍ=^Klþ4Mï  ™%|lq\i{‘ºøm(sáyÏÊ‚’ŸvÅ©êxŽÖÊ·>®KÀ5®Q͈^Mƒ§q@]ÎQ=×,Q*W8«.ûöÈlàI¨™Iß(0ÆžÓóÊœy…½ÜlÚ¯~éE3íÿK+êQÀŠN cp& šæ—Þ’"ñ‹©öñŸØãÃænu4ÂêoÀ*šÕz+‹v¶zUøÆ‹{á¥}ÂtåE+¥RGòÀAU,û²/ØäÀuÐb'ª"­ žÇóÆPfn Öœ+;[YƒÇ–ñµ¨áW÷Î÷IAN¡‚TýT%&}÷óH%:õñþ©e"³?fì0/°ˆÔ‚Þh"JÿÔ~ð2¨C³ ìH$ò»ÈâĪÖÃ_QáæÑȨ¯Èì[ðA9³×ïÓÞ¹…g·DûI¯[‡RÍÉÞ¿Ãi‡eÉg&A…Âo÷âXhË_¼Ü˜S!#.CãÁ—uT0Ðáöš+Ç¢Kÿ%„oe^üÝ–†aˆÃÙ©­|ÕåOìÛžæŸuúY\OÊwaÓRÓ-ð¿4A¥1È#²zúšÄå†ÿñÑ;ýƒ{c—U?erÑÂb7QF÷A¯ÿgUKB”ÁŠ?žD)°Š8UBDµmI!*ö]ÇÂÓÚ?®¼ç¿–seOÈCÔð¾CÖ9m_12¥j¡…Ï®îSýfá_ºñ& ²œ£‹½#;ú5°a­À¾‰â+žsÓô€æÛšn÷»-½©!vVŠ…/zƒ’  Ÿ9ŠÇ\¦lã›à{Ý['-ý,êK’O+ÑIú5ldºÕN'°Ó®ãõ+OÄ@_)Û_:"Z–˜ü«¾DÆåûºKQS1i vЈÚÌ}–ë41àx)ß—T>b—@ÎgîPNž$ìäW:™m&«#ÒÙp§Ø:*–EªŒNÀ^Å|ø¾žppªØÖwbðF s¡Fj0uéLsG·" ¢êcuÁ÷„“’—±2ŒŽwÐÔŽGD[Þô¬‡I;¢SOÚ÷<ÖnbÂ)“óúQ'S W(ZÃŽÒ'gi±Cwù ¤A~{,Áxã ý†oCSM2ÎPO§û*[r±àÍZašÁNµáC·…’ÐæÔ=×q°üž2ÙvtÇ KVгÿSP;;I“$ÏfªÜäeCÓ EPT±¨sw¸ÌSø§.ýàXׯòƒäø7 Âbf<+5ÒÅóúÞóºº>½FÎ}kuã ÛM‡x~'S.ã¯CØ­A%‘Óý çR¾þ`»)&®µµ+öTí7fË@Nq²Ä•2Q®!CLÛ—nó¿rÉ"MOó˜¬-u«ƒÑÆ}’5éã«õP‰Õ¥œV`su¡)¡óߥÓ>óÖ<¢Ö$ÚVmÞ"½ØNϤÔÏÊ3kÏ}/ð¨Æ’þ‘÷ʧÎKxgºóƒæ6«¢ÌaŒôü a£ª’ }:B;/–ß ·`‚K¸’,‹y¤ÝŽÓ7Kºè€ sìDǵAè¼ç·8š™y†¨KÖ¨‡Ç¸‚wñ@cÏ¢–nòLQñêOÐiBá*ü*gã×´€‚AîmŠH:·ø˜¼Ç¢‹ùº£“ ^j5¢õ.ãÈ¡uóÍ]JŠh`¶‡RlñÜ Í^i¬o5îrÚSèºÃGý¾•LþýéJpÕv²S1Qð}»Ô³¢¼ª‡Ë—`Ïî°v’מËîXfÓ.‹·ßÖUýdÔߨ£ŽÀ…ý˜ÜÝ’ÍÏ“šúwˆìÊî7fÝõF«Æ`9à™}uÀ3’±”M–Þ°D ÒZ0yùdMó!™Ÿ£TÑ®ñŒ‹•ÃåYä‚ýd‚M_I4æ _G´¸†à7ÏÛ‰©Ì{¼ùhâO†Ýí(½¨UìÉ(§h.î?¼d#o¬u¦(öÇ\¾®ÀP2´´®ˆqlbjtüª±#b‘Í&ÉX™eA_ñY0`6}ë}#ÌYDÿP¿ýê@ÿ6Á«ê,£©0™ ^µªÛÇðûNL•Ž~¼ôÛk®ùÏ©—±°Lˆj× áòñcÔ×¥9VÄÀ’ˆ×*?F›eY„ñhß+‚H ËÃÕàï¹Kžùk4|BÁݾ/| \·’OÆñqç½K[ƒ(7M¥^¡Ùæó>Tºca2yWÛßE(ÒÎ+°à—Ák–K48èº=ÞF¯f©eµ]†qH O4ññ¤•œF†o©CS+w§„›'û…üN9Ü4oáõAî/éØü$èj¤ý!Q”§úzrqãÛ Ê© \Ö¤( 41õSᥙcû²óɧ|"ÀŒ¡“{&ª¯«ád© pž¸ê¯†ñ& DrÓ™ø·4Η´Ô×ÝHÒÛOÀ*šõŒ¥ª¦Qžù¦jRÌa {ÏÈyä ºmñ 1P·=å_•"šoîN’=—†p!ÆAqJíŒO\ÕÅK svù£Ÿþt~:)õ6j”ð˨Qy;_¾q ày¶ô6XöõÐmTü™³Ý1—îC­X,ÄÁ›zÉ>˜WóœŽâw7ÕÇŸ„ãPéÀlûrlañ³Þûi&ëöZû+á@ušœþ:¹¦›ã.O»kþ@= IÃLäâyÙEM.+YtlM¿¬aÃX&éuÅÔÛ©õý„øâ¡@UϽê^¼êñ®™Å:W2<†û±ð|®]ý–zíÖÕ\89„‚Ö–ù©5Ò³wêôµ6ÂÈr øƒqü' ¥›æßºLöi„æ´sÄ\f¿ˆcºÞœÿBSÔƒ Êõ+ÅDx»áHm;þð0fùuZµJ/· ;JË€CMQ²b°z+siîÛçNÉö(„H6‡ô2ÏÖÆ°ú$ˆ½Æ;"ÆSYƨ¾él½î&÷/"¶#?(ÕŽê‡2Êϧ“Ù’lü{ÕUޝâ;¼k¡V>eï¤èHH V¢Aè›×K1lè¿À¼M”yIn0Äð¹¤fRVbï‚.¡ÛÝ·ûWg”ôXDUŸ)Ûê® Ü«éD’?hÉŒAë»èÂ/÷á™'Ñî`a–7Hé„Í7²ÅL5$jò;’25V#_p)[ëšJgÛBWs­O¨Ï[Ü€ ×IIr¤\of¼Iaz{ÛS•Ãç)gÕqÏB"ùsU²„ùÝ¡,ïÀ‹rN*ÇO1íµU^æ¶Êõ}7Öòû†æ¡ÅQ(?'ˆN³]^0ÛøÉ½LÀ:R»ÛI=;“wëË7‰³2²…X«á¤Œ<ÿ‚ÆÃ”+ï8¤²Màæ4¦/õëb‡ÔËÓ¡†^V…»bM“óìè?Ôp_+ÇÝi}ÔH]4©€®EËÃ*â“2„Å|€?Ë%÷ÅãxPg°\Ò“jÚʰôçù§e˜Mvc2•ëLø‡_ȧ„«wLs•¨hŸ©œv`Æ?{&³’Ž0¾ ð)Æsù¥½óCÉí €Ñt´78×H¥~:®ù¼µ£âëÛn(Ç^ó´r—w˜b©™;´‘WìZ6’ “Älìz0ÅÍ׸¯]싾òöµ—Ò3™²¦ñDž*#º‹Ø_ÚàO¿7&uÆìøè‚xHçZ¨(ß.üªâX‘¦ÎïáÒJØäEª·Åú'”5ò2ëùÞ¥µ¦—BwPcp1_³™vIì;Àà2wWòcòÇ e(ƒvGäv%­BBkþ¼õÄ|±ÌB¦€·AÕÙaÜâÚrˆ K}”‚ÕDv bÊUB@PÖ„›r«PõÒY!ãÊÙÝ<ê¶Ý1F~#¬úÂæ¿\¿3|¦ú¨oVçñáÕÝ"c²·¾^d¸FTgE1©ÃVìlª g‘nq‰»J Ãx…2À! i0ŸFÀÏÃkîñõb`Ô¸¢ #$÷:ÆŒbËw>Zð­¡$’ªòÄêÝJ"2ûÀ(¯Ãµ|2ˆÁ‡¼wÔS¾´é"ÍÄçôDïÃhØ‚ w[¼¹ŸHÝŽŒFògГL³qSž‘ɓ¹fOß…1—s']5”~¸c\á k=†!:MvŒ§ÐpQ\»?N!O³ê‘Ȧg·~*9Y­N‰8W+Lf7Û® 혭isY:ÆejZ¾Ýÿƒ¯¡RcÄd×Ä|d¢y®³7Œ—¢çY«Èãt4æ2Ìq#S¼7¼æ$øÞ2¼0¼<¥Éh»íÁýýªuäƒ'qŸËÊ‘–O>VpXʱ0Yr}ð2Ç š%M¨ ¦ÄrZµÃÁÛ›HÝèÜŠ(ªÕ1)7KÓ5åbÙ­áÆäm„Aœ“ä$”U¸ŸÌ„áÈeŠP¯"¾s ~TTþŒêåüêà CQõãÜBOí/Œv)Õln"Puæ"šÛ}í'ů4F8÷ò^÷,¿$¥Å_\W6³Å2aØ8"2-LÚÏ#ê÷HüJÁ¬·Âtšá/†sê!ÕÞd/ûª“?¬>MmVQ¼Ícwsx’-˜¬l¢4áL]ôü>S=Ñù†ØZ†J×EÊ_ilLN0zqjS—cÔŠo;s»‹jâì´Å½Ñ¯"Å]I×PÍ‹6i¶ªûê?æÊ%3]ö1²[«8@\ ¯YÂxÅf!»N£¨$o\•õ2õ-1÷rǺfʳž‘&cÌKàÚñÖ.Óˆ&˧ÂòÜß Q)m¼Fù ˜SêèT²&©õ†Ž™ìœñÄ%G3¨oâ>b)2Ü :®M°…©¦ë1¾¦6·@^=áëž(’DÆW K#ûá^“F~ò-ûÜê€Ç¨¹Oî"cL¨;ÓaÄõ°%`ºÉÿ”É bÜLÃ)–{ɹc4».ʨÜ<ãÞÐøiòd²R.WfÙ\²0 Ç¦¯dÐ.-+‡é=Ì~˜½5ºc˜áù£ ܽ¶ñŒ”¾¶G‘— m$ÀÒTBû˜ÑC¼„óÆ\ô%y[‰Ëö.Ï9#P˜óPæ€ç#rgôP!ÛBi§gjK3‘"‚a»±œp_ÓŸ§ÜFÐm$ºì¹à•G{¨ZŽ>×0c59ôRA;Œtúûg½#´œëø£.ÙUÜ×¹¦ÝÈË<=êÆ<Ð .’áx.Œn”$Ô"ÞÝ}-&ˆ…´Øõ8›ò Éøó”LÖ£´ÁWãåãkB‚Ô¯/‰?{îÛÑëãFÌz£è‹òb¼a~¢!}u|ÓôìÆYÚ<ÑmËRä9‹Æî U&#YÑY± Ù8«™;øaˆ5•¿\Ër£4;¦„呈ÚKðc#o7çw4¼DÜá¼jý~É=|½Û„¿‹w7-\n~è×ÞkW@qE6t?µOúÛ6†Î™¬²_ßgUg`Þ¨ÁoþÙviò¦™²æÎÍÓê×ÿìjGNép˜+¢k÷ÚãMY­!ç&A׿_gO-©®•’oó<Ã]ˆQ¯ªœ€Ý<›¾E$d)\šzñ‡z³¥m¿|uÞ‘dZ”/§ã5´ &²Jï+±´q\=OågÝÒ\à (BQ‘ãê¾çi×é\1ÇvU¨„°¿…‡7ò!`cµË’ðãz®É!Žb"ñ^!Þ%޳h°ÀÈœâcwS2_‹8'öe}x|–è¢ïúm˜mä»VåÁŠ‹¦<ãÆŒšKBŠD/°îsFŠÿz´_•OO- Vµ¹}+Wíuí€ËzºË©®û@²êKµ«jG7#Äå¸÷x‡MU”b~oTPË:yTgÉ5¼µ›®·Í¸üØr§Ìç Y[ùÒî%H×xi Kû¼qsÌöwì4aw¼¥áè'•=$ÄìSư\RÈÆ¸7ÙÊac=ìÜŒLW¶fâ„(ºÏϦvs7˜¶ÛÈúÙìy„$>aƒ°æ¦+>3Œ»Ù|ÔUk¬±žù³èrýœ‰¼õœìƒŒÏØÌ ~:KS­á17Hî±\tŒ:ÿø®c¦ßˆ”¤ºÒ5n†WJz‘;ÛÍ¢ï•{ÓÄþÍMô<ðmõµ¶@Õ>ŠˆKqEœK÷í(ÔdÝ©f >G€4cð! ‚¢™úHénèü8øÕ?ëUCƒ0§8«n§÷—b‡_Pý‰:úÓƒ?ÅYÍYn‘°Ž§Ë/æ=Õmòú_/Ï>ÛÆÒÎoéµ0×=­]ËãK´-YýúÖYÇíìª5Ž;J-•òÜòÜÄ=pܦårmD™œ×Ü?kOG[Áº„¤™§!`±QrKA\/Wx РH¼®®±Í¤Â“ÿÑËÀÿ‰€{Â|Âwà Ø&¶ôX%Öõ2Õ·¾`}[ÒN…4”7ç´áŽ‚>ú”/Ø^®IöÜä gž8“¨V±ÆÚëcìÚ*)C8°¸>AY¶­A?ÿ‰lOBöʦoðDLH“úÛpïÐTÒeúô²ªá‚pÇAx*HW™ÐåO-üw‡š#…ÔÂGÃÐS=g¯„ÓŠF! ¬ eeÍÂjÐ_ŠQx‘”8¿Û3Έ¶&LÇëÉøM@ 5|)³X×pÚñµ9ʺ"Ѱΰø: ’äš=Öy‰a£ºn2¡$ýþ).4?5xÐ…´îñšh^6óÌ3ƒÓJÔ}¤Þ+‚Åð3Im;3R:¡58KÈ©‡ AË+°yÚ'~¡³±v¡Þ1½j ÷Q¹Ÿ¹HÆZ1$ o/„Ô#!ŸJ°î²]Vyf¡¦ɤO@•Bäb¶ÂIÇ”õE^ã'†ôÙ¤£¯Ó§4É¿ePç?Hcõ~ùé½úM$7éC}rˆwJ Ýo 4[Œ­Zq,·K¨‚ª¨ÑÕ-U™ ¦úÔ©”ÅçÀ£‹Ä'ø<_ ÷°3@{%©Í%‹þ8fAik•vâ–Ç"-.ǯBMÕF –õX̽‹_°ß÷:uQQÁ£KHËÉšûu”ôyP+dA 9¤5Çš¶§5ñûƒÂ$£‚öäêésgâ) ÛÒRÃì»[,8)ù/PÖŽâ·%žt…"QÍÆü =]â÷V,̵’KW² ÁÚ²h‘²‚6ªfÀ†³Ÿ+Èúj=e Bó—ØvRÆÞ&v×àÜ,¼¶“NÐᤛö¹k{ÏyáûÇ ½u1G—’Ÿû.«LíµÍå? /5D5ì$yÇãì=}ú7øî †l!©’ø&“4mSùæ0X9ê…G}¥lýãŽÓM¥í(]ðVkÚýR,ÖG4´މ_ÉÖjZ dÂ:'íD¼ùQ§áŽZ¼ÇÛ²7ñ]"ÙÒ©×Ä™ çrú/L¤†KH&Zy'ü©͘Sü¤üfœÿL<'æýÉTË0¹þ ùœ¬j¯‚8êùâ8S–´Š¯ð×do¼Ô ÇÐçmøÄ8|4ä´T Mü諾ѮÚËíî]*ó #{bû&ç4OÛVTå—~c•[hž £5O‚GvLFÅЙìœV:ü¡+…}ÉE\.ì"àbs(ÎÛñ0*õ­7dƒ…øAFléäO–eó’´™2²Æ]Œj|3ìÙE†Û¦-#Ô+ا Vö6ÌÏÖåˆb»7_Xç£À 6¹oëÕùÅ›Qè›?ØYŸ/ ˆwë»ìá~E– ‡G’±Û`Ô8£rv–C¹¡Ú2Çi‰õÁ~S€®DZ‰~Tµ£¥ò@f:)ŠgË•-KWññ‘Ø·Ëé(¿ìˆC’ž$×yˆÕzÍ  CFÞø’5¬¥PHMyT˜u Wrúø¦ãºÐÊhr $ëá R@ˆý©O#'éäó :n£Ug"Ž*>mâŽRJ]Éå»Å»–”M±¡owä=ÁìHHÓŸ$TR’’´¸B•US†|Z¹˜ nÛ8Ç:˜\Û·mÑ·õýIwê7›z–˜Ö°Ö\ÏýÍowh¢ ú-øS•; 0…Ã¥I^Ð_ˇώà×Õ)vMµ‚ÐϤd«f£½oNIœ5o¾¯ÆfјɼObÕÚd{ÐùFiú¾êmç@U›ù чöA€“£ç+RÞùµ»Æ>Ae\, d;,‰±- >vôȪš.M 3’a4±5 Jeø:—{ÔÝÙüòíñ[Ɉ¬½ # Ú­ÍîPT8Lln€SS}šÎØæ¶* vC~ꙺmo©l³åW¹k_ý”îd&ktñ§Áܺ;|õ#Ú×*¬?Ù§?gds£þ²ö‹#\î©`þÂý…FÖîÞº,´“Ý"X¸”ÈrÃæÓ+Ö¸V½ß΋ÞO×òû…™‡œŽP[òûþW¯r?¬tëÆ6Ø­^LAßêI±4¿ëo_W:Œ¿%œ¾Hò*‹q,:@hÁü¨¢uŽe°ó]ÿçpªÀù’{ÌfÑM¢ˆò’ðD×OA~”öyò‰÷åÉß-!8P.Œ£é¶KŽo\·ÑÃà›ýTçÇHA·¦/´;¬Áé¥Ã&ŽVû¬/ß+G VÛãg³S¯Cô`—g-ŒgÁÇR¬býk˜76§Ò¼)ß+/r¢í©nï¶VÛÔô53çÕ&hÄ\dhéqÔÔ(/ÀýŒè#ÜÝ% YÝRJ½•õÑÊ÷ÿŽgY·y+n­M Éã.ÄþIñ_Èö´·5ä °å«“0>É=igE>Rœ‘£¤Ü~}ÓÕdõ;2tœK<ùC絊h8SÛ§:cH%þmµDF®8­•{ïŸå¡Ãø>e|†©îQ¬ÑªKÖ£Þ©G»{ËjÚeÈ”‹­E7¾†É+ÛQ²²¥n±=g÷UÖê’uŸD™x±ÃìÔ’,«Z±[·*(™¨Ú„_*‘íd¦Ÿ}µ¸Sê»ÏunÐEëA@ø £DðõWT)œ{D…c}êöÌucÅn Vž ×ÉCûÉÇkLŸÚ Zÿ_¢¼¸š9,Óª¬7º\VGc¸Þl÷²ìT/öå’ ëœžýe}÷a’´JTÁfì~ÎÝç¦ø€Öìì!õ{àat܉Äó¹Ì5Foq?*ªS ÇÖ›ãÉìÕ´AIœ c¨=mw½2fæÂf "KëúÒÛŠˆ½TÐ!|ö-BŽzL¾/¦:ƒgLÐUc(0´E=Hƒ hûXð£)È­(ieDÍʨ!—ÑŠˆ‚l·ù TÇìÍ€ð©­ñmh—‹Ö+¶†:üô©å˜WÝDî7Sa¸Mª²>ËHS¿Êóó8ÁdQäZ6<–Zo%Qðþò`wNQî/bTE97yîö=‡Ù4¶ŽjPãr‘Lxef2fÊ}¤­„Z|ïŽà¢]~;£x„%G°„ë Ö<ơʋl”´ðåDâˆ<Ë †k*¼šg£G‹y7q–EWñÞdÚ¨ñÕaì3·µ.Ý“¡*Ïz7­‹²®yayÍè~nNÙ#¯tˆŠŒG­H•ן¤ð¡=ˆ£»?¼’DŒ:Ĩä¤cŸ@hä7û{‰Á¥Šœ¡¿ˆœ£çfÅö ˜ÓIÇÚÐ(½^¥ë«¼“ ¤Ãxy%åÍÅŽæq´N]¦›©Ó¥¤uáef;,R6é.R>2„cp4myËrʇ|•f9ôܺ+ò+|¦0íÅ#¥nÜ.RXÅ©3êßþNßIÈp&}›3=tP=PwÝ/™ì½…“á|Ýλ¹ ƒSí%À€6ÅóÅ kK•µ,Á¯˜ÌŸÎ,Pýð¹På2“K2<ÖÒ†x[¹ÇxZ¯Ã”Xg†%qR_&{ârP¤:RÌ¥ÍQÞ¹$\`µB—ïImL7(Ùa6,Šjb\ˆä§ ±Þ™Ì9Y`¢+89%1Eo‰NÙâ®À_@ÀdÍŠéÑCº·pw†ªµ=V {|‘ÇÓ#´#a¢(È(pÍ”Œ\GYhÐ2"ø»ñ³o¬´+¬"[–7ê ïajý¥—³<ÈÞÀË(iUZŽÂõt–¤yö6NPý!E ^úö›Y€µÌ©ú;§å)ZzÊÈýç-¨²Ö žp ÝlŸä¥>Ì%ï64©k;=á¥.(í?x6Ê+Ü Âõ1ÎoFLØÿXË¥:…8´°çJ‘¾ 4:Ó™2u—NÀ=ŸçIMƒx"0Í}¤Ë¥ Tu¼wd)S=õºÏPè¿’¢v”7ÄLZŸ¥Î•c6‡ê€PÝܸ;ÒfŒ´Ôáƒw$q%0 ²­yáýfn´E\æÞâc<°àŒ ‚ àæ…–@‘Q–¼Ö¹a*Ž¢F±˜{`úÈ2±À”‹Þ%­“ÉZú}ùW…·¿"]Y1"a•*64–ÕĸŦžÏ4§áëÛ>œÊ\Îy­l‡Ì®i´Â¼1ii=S¥IVÉwëJÀ©‡øóùÔ¼^Xûç@¸û§\ÉäaÌ;÷桸¨Ç3 |‘óQ6!ÿzº•?Nz«i¨Ãí,qée‘²÷×ù4œ ÇOœD©‚Š­Ñédä̽ø[Ïífç~ŠiÇè0ÃÃ.ˆä9TAq›Ó,|vyúˆ¸ŒÂÊn™,¿_·ãï:t¹™¢z@síº' ò°Ö«îá0o–OÏÔDøJyC‹L~†û5$¤‚Buÿ9§Ö¾Vø¶þ)q&Žî2—p:ÐÁA…¦¸0ûq´çj§€@9%k—ƒ%Ö yò Je]Ca éü³%²]p í4Æ fPáWģ̸ìÆ&g]WĘá¯ð´‰h·\:1øyq¥éÔŒ¾”ÎòXÀjBÿ4AåkÐÓÒ3íºNj¢Ú|[E}ëob8wpkùÓ3Ù§ž5_F¶fŸ7©7Bs´m‰öýj?Û,ÕdÃ׸)8"KBu ­¤Üªƒ„„2E¦×CŸ„LØvžŸÀšÓyÀ¤w&é¨3Í5}˜å/dÕ!ý¡~ñ‹&6hb0²áD¼rÎá²£EOµè\*ý|⤿p²Kqo íÒn$EmÑ»Oý(í§–™6º†‹6­+Ž”PšQ´^Åáð"Çd5,lœt£>ºÒ§éZòbAE>µúý~YTÙ»¬”¯¹÷Sg{lnÊRÖŸ.ŒFšïË¾šŽ…«¿œ/7»© W£7„U²Ör¤D±0·”/­µ ÄØâ ³ÀÅCAm¾*}±2½«k!pt2+k=OêÆ<êlC eèphýà ¨¡ÜgŠZ|’EpÚ"³˜Àp—ì%»ºª:9e‚zqG~Ù[0â·¢RO¦u©¥®÷yqcù9—û†£!ÁdÐ8ü³ EeêÕ]`â$ThÝAÜ=€2n†³†»õö¡(*ãä''èæƒ·Göh.“œžUÖDD˜Zæ0ëùÑØ%U‘õH¶{Ì×}‹³˜âŽôää[ü-YUØê‘ÇŸrS_2Á£ãJŒ1ÇÚð}cò‚ÙóÐŒ»•9”;-°ƒù¼’xpB{k¬âœX—o/ñÍŒùÖn˜3„Æ$Ø»–dãÚþej²ëÜ’c ysx¡}É‘H’ÊÂSƒx©C»ïÚ2¼Íò›ûÂ`€áé|28àhóôc†]ðZcõÅ •öìÉ:–EW"ñ#£@,­jA%ÉIÞ2òPÃ^žûŽßº(4œÎ߬ÚN3Ý!HtE—ô«ÏaÄ'c¶·„Z+Z ‡fГ<¾|ݨ­±?/š•^žkE¼‚jM¹Œˆè-ü]ŒÿDS¢ ‹Ó¦5ýØ$È!•듃ƒÆq°³Æk _ŠøbφöÚA¨+3{ ˆÕÂG†;ãäiLüÒýC0…#Wæ»x¬àD×PÌèÒHažŽiˆ™zRžÖ*Ð~‡ªXŸô%Þ$¢b†Ži#K2ÒU<øãÌ@ÎæÏ†På»Sñ noÑ@‘¢Phuº"†-Óéøb6‰F'ðw{cŠþ6ÍÉþ¡–0Æš:¯i=Á¡©Ùãß´ç¶œ˜.m(W`!Š·-d~²õ*Ý¼Š‚bê Ê„„k)óµ.ú(/5r[²VÐ…bj2 yñϺ ·D| Mí4xéM]š¶T%µäÄ‹ñNÔT¦[Åv¦“vOÈNÀž,Üà7(”[Ç|o–i*þ a¸\>‘­u`æo%Ë×Ô3'Ì`ç2û"…,ÄÌ’–^¤Ñ£òû³dI©¸kì¼¾ÊËÂRVå£Á¤V_Å´—*˜†Ä_càY¡?-Ps¦qÏ+e§äê¢/ J¤&æy•Â.<ÎǾD™íú0¢{ÆCF_¸kZ§•úýáŸÝñ}–çR!ÎWÙ€… >@Ô2YŽþíxkà³ëAˬUõ°$ÌÀ­Yôq†[æ'©t¦|‡6itu²—¯Gnn9Ui wçª=q ¹|橬/´ŸO½R+Á½À>n癿Óz'7¡¤Ž)´c@|[v Þ¼–×}ÆwÛùÉZúË„WæyD†Šb$üÅþa¸$÷ç¶ vô{Tˆ’tFÁ/ðTMÓüøŠo)â‘ ¹ °âI/œ€ã&kTv?[Û[[pá–þ4^á­$Ö[fþ \i ˆì9p¾oÑÍâ¯bCªÂ"t¾Î×}ãqLUK{µºìå y- Ór¯ÿ¬}ü6Ħ1ñ7Œûxø¹•šÜA&÷bV‚CúÞe¿?.Eb0~ãô¡<·”}²ÍÈðä£ycœv“ê!Ë!räm%l¶à­1*Ÿ`‘ñ׊³]a êùFÌp5kºœ>^*âŠ7ïð47’LÂx6>Þá«6KrA‘½ò,9†=ŒŒêwªú‡%–ªYÔÐhä×ldׇ%t (®/ªâGf-"qÑ—‡áÁÃß:eÛƒ„‡äaø±'ppd«SŨx˜¹qŽm,ä‹ YV½ ×àØ¦›ÙZCâ'£> endobj 44 0 obj << /Ascent 678 /CapHeight 651 /Descent -216 /FontName /JWJJQZ+NimbusRomNo9L-Regu /ItalicAngle 0 /StemV 85 /XHeight 450 /FontBBox [-168 -281 1000 924] /Flags 4 /CharSet (/fi/parenleft/parenright/hyphen/period/slash/zero/one/two/five/colon/at/A/C/E/H/I/Q/R/T/V/X/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/r/s/t/u/v/w/x/y/z) /FontFile 45 0 R >> endobj 106 0 obj [556 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 333 333 0 0 0 333 250 278 500 500 500 0 0 500 0 0 0 0 278 0 0 0 0 0 921 722 0 667 0 611 0 0 722 333 0 0 0 0 0 0 0 722 667 0 611 0 722 0 722 0 0 0 0 0 0 0 0 444 500 444 500 444 333 500 500 278 278 500 278 778 500 500 500 0 333 389 278 500 500 722 500 500 444 ] endobj 37 0 obj << /Length1 1608 /Length2 8370 /Length3 532 /Length 9218 /Filter /FlateDecode >> stream xÚíweP\ݶ-ÁÝ!hhÜÝ‚»{‚ Ö4кIwãîœ$¸ ®ÁÝÝwB ‚}$ß=çÜúÞùuïùõêíª]µ×œs9æs­ªÍL¯ûœ[Îj R†BÜü<|âm°“µ ü¹D“[êhx0 c33+À@V0¢h…‰Œ@6E àÃf(@=``;{€Íà™;''׿,¿CÖÿð<ì„ƒí –‡W#ÔÙ A<@ü7>{Àì(èè«i«ØT´ * fåÐu±vš` ±l¡0€ã_  ±ÿ. Îó€%XàÎ øaÈrþíâ8ƒ`N`8üá†ì`VÄCPtt±ùMàÁn ýCÈ}ˆpzð=€éBá8vF²ê**ÿÅao…ø~p ¶‘6P Ëï’þø`¼+0@€Ü¿sYƒ6`¸³£•ÇCî0gø 8b÷/\ÈÎ fã‚Ã`°wç_uþ[õVÎÎŽvCÿDý“9Úò`ó <ä"rÛ!ؼ¿E b ðóýe·qqþ‡ÏûÓ ¶ß3Ãþ@ÂÊ qôØ€l±yµ¡ˆ‡”¶ÿ™Ê<ÿ9‘ÿÿGþÈû¿÷ïý·Cü¿=χVvqtÔ¶rz€¿.Àà h~ß1ÿW¬•ØÑãßDÿ=Ðô↰zhƒÄîA >¾¿Œ`¸2Ød£ Fí¶VŽ=úc7€Ø€`Ž`èAË?mpó ÿͧo:@~7]Dì ±ù;óyþðæU{® «¤Îù÷ÛôO”îƒê}çbÿU‡Ô柋ßòòPw€7¿¨ €[Oôá°ñ Ä„Ä|þM¾?@üÿZkY!``w€éCÑ|üJÿ¯÷_«—ƒQ‚¡6¿çä9 bó0Zÿ4üv]`°Eÿœö‡’ÿ±þ3ä ;ˆ½0J¿zŸ–‚¨|œÕ7¢hÚÕÁÒâ\X£Ÿ—ë_m÷{¾&VbySÂS;&~×è1ûÕùvKc{ ƒÜ‘µý-è(‡Æ‡‘½3—h™¥Y”s;×¼/åÀ(ÚëûŒæ*ª‰ŸáöúˆÞ3ó‚tÚ±fAæ÷ vF×\R¦sg|_à»êX²ÂZ$âÊ_X÷.ÎY{ûûzÛ unQsfÆb1K¸¢â±Dù¿Î¤–11(ñzc]ÀŸØSžÔÚiÀ&¸<ÿƒ¼nU`²‹Uó¸èuPª‡z©^›9DÎÉïp×éõ [ÌO4-Ro^¿K¶Ma Ùúi;#ãÓ¥¦~俱ì©ZJuÖx<òQw£RèýסQ‡t±¾¢“ÍLôæJ«qžnÿ»ÙC å)~¿Çh]xt‰ìÔ#ÌšMMòf(œdhxr‹¤÷ë5sÁGylX&öùßÏ\ªU‹•exüÔåE~]qËîÇ+äuNâhµ‰uCrm°0IÈýÊŠ"(¦høÁlí¥kfÃwòbe²|œ+ôp4¼+A­ó1?üuòÕ§²f}„ĈˆR눙<9-ãÑÆ\ž)ð¼~üù Ê“Áâ \«”F‡# (0ð9û“ž’LÄRÔ¯žLþ#éáùìÜ„9É›¶óäLöR ­/îá °1¡lâ"Ž•Žúz¹Í$l…H¬èñö^4ÅFÒÛ ÏµÔ €ì’–×íÆÉ?§“Ön¾˜FÔ‘d`SQsuE‹ãɽÖ+íwþêûj­ñ|ISü˜ƒÓÁ†?™7¦ÔĈ4ÆRQÈzy%sZºB :³¯#EËy»p f´è-º*à~‚ixú;6ÈIJ4¶/·ã]Qpk?5 ¹–Ë^Eš™êêX{ŠU»Ñ”ýãr„¸î±Ol%KRQÞà9]÷Wݤ¤ÄÚ4Û’MTÚG'¡æœÒFꙩî{uŸÂ_Ë4 Ñ  çV°·UD ô³ªy?OxÔ¶fã¶ÄÐx5LÓʾmãžÔ~|èVìç J—¤»;É/òâ|ÓÀ¨ƒv«`·sº[à‹odÛ;p 4RËŒ# »]fÊÑ– £ 4ÃOÍ8¶ùUTå ºµÜ òõ‰hw’~Ÿï£ó0‘aWˆ7—ÞµºÅ=#‰„¦Ïs_À0b4Ës°Ãxùsø?@n¦âo¾™ßŸ¸ Œi.šG„G°ú=2ØÕQl:¹6…§k4j½úÙ2îÊs%¨°ÐO;ÖĵAüšTiØ/¼VË ß æh±;ºm=."ìœÃþã#Á²IAi2A9|x¯Ñ‹•QAl«51›èóíÈÇ2ÝŸ×oìPò6Œ r@Wd/î ©Üuò‘ÄNÚ–vÏà Ý34†ï.%ÒO1öÉTË®ó*H›>c™ÞY1w†çËäNˆW?ñ$=>|Rʲ¥XßZ”žC÷+¼äÓÛzãŒÎ>T¢£¸‘Q2ÞÂ(hÕp”’¨G ¢ŽÑ‚¦QMxßßi×_ZËÓAEÙÄo ’{"N7Q»5 “W­#‹Ôð~ÆÅÝìX<1{¢½b‡Lœã§UÝa³à“%qðrŒ´~âPb{6”î^€ìZ}(’{mxE#›Ÿê[’âÚµ}Œ+<9œf…“]2 ³þn‡âü „jhlnä¤JU™]Óà2îš!EÆ—ï7¤s%m›x¹ÅcÎð5F¦ý\*Ó“%¡uW‚亂 Ã7EOчOP5LHtÑ1že}!'þEþy!–,TXÁæiæ±Ë»ŒŽUß½mó~œþ¤¾æ½Ü ÜnC¿$9AMù»’•¼vûÃþFνW´.&=æ ˜¿Èذ)¯ŸØáŒE_ê ?¾£) J4;8‡œ>~‘K®òÒå¨á)…£{„<šKxÍ—á$ÛÙ#§ï;h¼ìÍT±O7TNÙÖ\“Œ³'UYv©—Ø&<ư¥ñ…ƒg±f®–.M¨Ì©¥ ½Å$eƒQ´ †˜WƒÛTgž×_I}¿F¯¼Žf3ÉÕ¤ÆV5÷d›D™B#?ò{µâË s$›,õþIYºÓ8ùbÚÃ=l={÷ó¾W¦5í½’¨èË:;sý~'þËB6žøþ²êkëÑYUüwÍÊèGÉ‚º…&´E³è_îß8;l‹×i´lénágvQÐÈ#bØZ›µß½Lû„ÓÓÛeJ}KÙèòÙÎhRÞU–ÕéTæ}¢ƒŸËMüM‚ ×@X¤"§ÄCö‚êçÝ.¦-Œ#*ÖÅaN0C­tç ?ä¾3àyûuWÚs_Pî;ã‚Ö[´F’PŒï‚µsôEŘýx 9ZÉd¨ÜVo2ÒFsÖÖîªÿ^Tv»#E¸lG^=bƒ äø´àÕgºë³Á .Ç ïÈëùJo~qT$U £Ú¡éW&ÑÎaÕtØ"UUoá:Rí¹BÆÑX8D K’ álãÒ=Èg‘6Ø1|.ã§æ‰&V²`!i ¢°›!óñ]¤†/€5TAT?¡` ŸÖUF-Œ¿ž'SPáNKO[7Zz×õlZAWmc_´™›ÚÖ³è(þflÔ¡tŒ‘2ÌÀKEó†T‡±_¯‘õ}²ÀS+Q&r¡_$ä´·77Š#f¹Ør?¸µE L¨òÈkW´iÔnÅrÏÝ#-?’ÌÝ¢OhØÝø(ÄÙ0jmÝ÷~î_†lŒíe¶õ8©’¤Æ"™Vç`¤¨øPK¸ØÑŒšûýêùÉíM–:$ÜÞ¿¥¢BGMÄ}[“d<ðmþíØÛ áOL–J3­úäÊ%gžØ`ä„Õsõ`-ª,ç#öJp±×Šç 5ËwÂâô]IVó†îYÚýÏ—¹ý1›Fõ”1•®yÈIïâLgî„Ä^ÐsÕ­e -ÝæŒ ïû/y(¿Ï­÷\ÁÚ]ÏóÑLøfÕ+HéòI,ÌHÏb P¤¬Ó.7 ï®SÕÓû¹R‚°²Ì þ¬§’ö•Jk8€A¦ÏA§jþCn›N˜×d\Eã ¡º¡[5?Ì7b·;»¥H%õ˜Ùч¸íTIp°ï( ­žSÆ ÜCiìÉÙ"%Öi«)Nµ~nÅã]Jxˆè¹©8¼Œû4⌎\™Òð–‚­¹ÎÊñnÿ<ö×´ºÜW¦]¶À˜”Êõº'šJé½€Æwý%ˆB”ÐøÜ!›5ôѸd?G¨EêºOëqͺù·KßÑ–ÉíAš#×½Kϵ;W™â*¯}Ø$Í<½Ø¶~j.Ã,R‹¯2¼iIüUöa¼n§éì_¡z3¦ 4V LAÉÒ~µYmÔÜ“¾OÑç ³¤×¶*,ôDâ¬Ò}aC¢d½Î¤¢ØXŸW™0‘ó‹-5í&oYyÿô¶zЇi:2ž&ÕÌ«ñ¶ëˆ”Š©‰ZHýrS›ËéøMAï5•¿ø% Ôµ¯fÊi~’ÏËûñÌo¹4­.¥ØœŽæ¤¾x¶3oÜTâ,<Ëér³90;áJÛe¡ö#>Wœ©Vªª3ÕnôqÂ>â¥@HmXZk÷ÿ‹Ð¶OYÇÈ–H1L‚’1N³.‰f4š:ü0Jê!…aTÕƒëß'ŒJ™¢AijDK9°ÅW¨]ÑÊxÂD^xƃô̪ô!Ýë®›³íO•ËàçÁÜ”gp„OÆÌÆë–ìG»ø€$ÂP%¿ì–H‹ür1fñ¤s:@Ø’†<¨Ž 0Sþ²dЯ›¾*Êïë8ÁÖ ù Z£†¼|«*4eû<£û]öá²}s1Ðø0*€ÁÚT‚§ä„y¯nzŒ,#¸‰WÌpÛüý3o¿ª·Ú¯‘å³2®uK­Ë/©…üû27,îÏé&Ô¨=ÊùüËT‰cduã.jÓðúa9'k,­ou„ˆE¯;§je‘îä`{Ïq [c‚*°#·™zH·gÂ'”öÒ_ëywh³Rð´hUL¸oôFWHûS¹MgdÍQo÷†ÍÛ¸h¸i5Žv}Y© é‹Ã¿©Kòëý¼æ0gÐüÖ«f–DÔÚÀþ¸/ÞîÝXD5]-^âJΉ ÌRçb<“b£Ì§‰ $œäûË`‹1f ýKgxÆñ,¥kÐr‹ýÁŽêZ‡ëØ·žp…æ„î¸~\œ_ýtôn¦øgC£'o¼¸¤/Ì02uó¼–Ø­¨û^?KÒÞÙ2Âe1µ©Ê÷gp¢€Õ>î›Ò1CS‘g\Ó-Ò:L*Ô"$Ý¢ ˆï²r‡«7¹ÿFW88òžN»¹TÃüó”¡)óPXjõ¸’¿ÙéMkR\?ÐåÀ³NÌ‚FRí¯.±$sôžýãç¢ÑýåÓ»üÈ ¾Ón¥Â"û.¡±LoÆë@Lþk(Í/ò(« ¡0Hg‹z€.~xû:Bn æT¡ûkQ±€KÝ=ÞúÇJ°¥è'‰QÀ»Ü§ÏÇüàC?›sÁaoÓäØòô¾H·^Åß™û ð~0IcZ%…님bÈŠ—&›åË‹WúPkªàxŒ¤§ãUpmªø’ýæª:(؆£WòñøŠîig¹˜²’DöR‹¡v“¸Ë#|üÎ&ÑlîÑ^¶ìl‡¹ð{ceèý‰°üuŸ2·äs†;&Kë»gެV•òq-„øã{Oæ=çl;pCj¸;^9ËK˜¦Ó%mòxVVX§ç3½Ï"t YÉ…„$ >œ“9Äëô²(x–Ì—Ú‹ä0} g“ÈP–º®uÄ÷*;â{œPø]sÕ›L2¬—ös„M]¤DÈÎ+Àëû/LlÖmZ ¤H˜ø¡äsäXÇ€ò>Í—÷ƒ½––: x©uYõÏ;¿”I!<Ö•tRõÛn_…w3g†w@ã–˜¼Î•cè´­!°o¤’?—7c™"çY½Lgª¸ƒjr%Íí¨‰ : ¤=yê%…Æ+þ59j.ŒmÑ(â|j…_öý2GJŠú߯JécaöXMäŠýíö>‘VŒ§59ã¼/ïíÖ[§Ï ”tÃHŒOê÷ ¨å"ÕÊàinXj+exbe>$TâžÇfD“ÀÔn¬Æ½aEX|¼W^%à Aû"u×néöƒý2ea†—§°ß=x„ó­)‡Ì¡i¡v:04fm르W¼ë&ËNhÂ’p)ãX)ç>iì Ê”Bɰ7î$»Ëu?­‹…÷Ó8Ê· Ýn¤îÂw8ã½f;@#”µôESJÓ#j—„ Șâð&xì¸E²/×tÚ…ƒÊáᨠӦòAQ¤HKùòuê,'C«:yÀ-kŸqõ`Ù¼mzoðÌDwºŒÇ‘k},íÄ®ÀZ¨R…/š!Ž»Ø×§¤Ùy*å‚QF÷è(WÔFîë|Ö 4½xA²ô㶺ѯ@Ž­ªï¯¤çì’ë×Å‚VñOì<ç7è§±3‹jTÛ²¨Îi{"JÉÅI: Ï¢LqtÞ™sîMf_„–j^•Æô ¬Óï8®øƒÚíFɨˆD,7¿¹9¸u3âc\Rv‰V*=ÝÔ \.˜wLcá2õµ{³q¾±Õp°:Ó%AZG»×Ê 1ÿ¡tÒˆ¡ãËPu¢ëK"ÇËt“+R@J¥!à,Fdß.% D5•Ì/’`>Í6Ž[¹8ÇB–hVçé÷TÐ-Ì»Ìú—Ëí¾É \ßU’mÚi¼âÔð는m-³ÊR§R‰®¢RÇt"à²HÕtûÌÑkÛ5Ù„ƒãBÓ$çÓ-LKx–W{Ÿ òÐÕ9~:PÂê]›š¨åœÌ2`SúÌ>XNè\~š•û²®Ká ',ÐY£»<ÿTŽɲ=ДÓÒ=¿Â£ÒFÛè ×[Ó}ÒÆ4Ÿ‚Y'Z[Íqz EœŠH¤vÿqÂN½ÉxÖõ"ç–:ºª“ÅKMb²u약TûÎ 5(µ/»‹ Å×ÏV ±9õ›²)ž&K–X#ç4Î~býd?"Öž©jåÈÛ:Ü]ø×vn3Q°ÐÇÉ,¬Y¦®I¼Çœú°Dü)eƒ †û{Ìï#嬰qÎ —[9«Ìk¯e Ö ½E§DÖu?ŸˆŠêÓÔ“h·V¼›úµÌ-ùÖõ3¢$ [Ü­Ž‘vF)Ù?ö^·í<7h,ä²ÒžZ9éÔÆ‹¬6/F'Dm¸øŒôE¶õM¥Û´ 2»±œ±ã“†jÊ„ý‘&#/€éÈR"êÑûÚ2´Hµ¾i“½úàC;¯ÅqW¤î<1ÝYÍ8R7âI¹æQ©µV×Ë©ö£ËöY’ÊÛëÚ˜÷Ç%}#˜’)Û­•>!KJþ :cBIDim„÷²‡ˆ°š’7ÅÙÉ‚ÈгjdzKó‰Í@]j!à$LP“\‹šƒnÇÅóW$ùå8§ƒcz-¡´[n!æ6/êРQš#ò×÷Ì‚¢YóeCn8ΧնIôem7\CPm;ÃàÇÝÓ‚P³O㼆þìM!Š–«9q8J{ð]1æªÚ×V ð¯½gŸŸ4˜ó–˜£´cÒò|c„á äp(1ËÛæl1WbEñ(£gѸ&‰‹€ôª/Â…—”8NY“æíS*\>„‘â_'vøtAµ¡ü >’ ÆÑÞÔ­ Ññï¾\­kˆõ’XP7ïÂæÛÙCÖ’’Þo]X©nì¢O›FrÕȽµ Ì„|ôQŒ —Áôµ>;zz¥ ï³ÑE±†ÝÀâáêѯã¢à§p|‹Ôn*K.Ú+ò“-c·Zê´Iê}­|ÀÓ™g«=atÇw¿ôù‡’+ôS¬Ï~0Ú;_àOÉ…"ñÕ¢´àqï „C 5}:&&r‚àÆg2ÉøÛ™^ø¸Æ‡šÌé»ân‘ŠŠØåõ·)÷«R[Ž>•Ε&bNãyÞÓ®‰r»(¡ªl4!eba¨mwzðeƒš«ÜÇŠuŠì…RަÙÞ£N„oà–{΢+ÙìåÇj¥'s‘ñ(ÕõvžYa}Âú^S•sAu¤Ç}ù…k¯­·5½È¨‘;o²9ÒæBÝòûa$´›ŸIŸ?Ûñ`w¶’ò‹þê^5qÁµy™ý¾žËÄìôi WÐXr«OG6âíÏE]¬hSŸC âGìí‹—Ëú4©©˜23h,kmÔR)rsrÝ«÷…{Ûê)è9øv–$5Ê^f¹9:|4:2Úž»/­Â×XRDß 8Jf]áý¥ƒÔÑêjêLJ2wÑJ0räÜÔc›]׺J’›½yp`Ÿµ*É嘠ùù‡·5]Ô%9VQÍÕ¹4ìHyu8/Ü»y¶W•>KYâcXŸœ…5 M"—w®£«¸gîðbIycöin¯ÛضVßõ•2¨¿Ÿζ*¡ëè%Å=[Èžzæt¹MûJ^sË€è`QœkNõX¿¬Ä„LuÐûÉÈs°™~º;ÜÌû$­ÞVºä½o¸„¨à=+Zxäâeœò­>}ùRþX‹ä²(+7`s -çÊe£åÆA uãe?S1`!ÔÙÆ0…¯ÿËäºÔß/Õ9¼À¯±ÇÓ/ú|à¤ÁuE4˜nÒ ‰¦O1ßozýa\c)Ï©¯Ž‘È*_Ý÷Ð>ìäIÉV¡_¡îѼåèµK†>÷»‰;&ßÁ™8ýž¯4zìúKÞL?»æ^çWfPª­2¤_PæQL'3¿€Ü¢†”[¢¢8(×ÏebµË˜PÛ“B*ПmÊìïeäkò™UÝÑuq¢à'“vØøv3à 1ÙÀêE{0ôi­“Ó)1â•DXT9?ðTJô]ZZâ·'ŠÃ‚ ‰”èÀLYʤîèiÊ÷âÇ ðÏß~]²G¿–ݰaèJÇÜR~OŽ©R@%.*±úËM“®ÇHÈ¿»fÝòHÊšqí:ùp$mt¬@šlÇ¢%Ø:çÝIP±ÒÚtög~ûöj—8ÚWÆIõ¯FóOŽ&ô*5½k½øÐÍȸö$ÕÓ97ëÓÜÄŽ´.„i2ç€óq3)FÁÛ³–j?këÚ‰¶ìÐ膀†ÐÁK¶e õUÖåÝÈA@Ú°(+,XQrt"¾–ÐÒuÓIuqÿE<]<.4Û+‚ÄÉÎì%o]ªÓÜMÁ'ЩrÛa €ªš{DÞJ¦Ö¸q9¾“Ô‹Å;⛓©+Þ 5ë¬ý˜í§#94ô®(ª‹¡Í™k\ñì6§&o€/Òµƒû}äªÔ/²*Àájl‚ž­åCŸÇŽoíÏž•g¨šF]+ªÙš6RwRüÒÒâ]r4t; ko€£87Õ’³Îûn­’n‰oi¹÷še†Œe *hˆ>†Åò$®­±6Çí|?â×Ð9ŸÈ¾Û?ëµä_JY”b‹´t’oþUaißù)iõZÚ@™ßÿòÁþÿÿOAV0ÔÉ æ€ý¾)Â=endstream endobj 38 0 obj << /Type /Font /Subtype /Type1 /Encoding 103 0 R /FirstChar 45 /LastChar 121 /Widths 107 0 R /BaseFont /ISCPEJ+NimbusSanL-Bold /FontDescriptor 36 0 R >> endobj 36 0 obj << /Ascent 722 /CapHeight 722 /Descent -217 /FontName /ISCPEJ+NimbusSanL-Bold /ItalicAngle 0 /StemV 141 /XHeight 532 /FontBBox [-173 -307 1003 949] /Flags 4 /CharSet (/hyphen/period/one/two/three/four/colon/at/A/C/D/E/I/P/T/a/b/c/d/e/f/g/h/i/k/l/m/n/o/p/r/s/t/u/v/w/x/y) /FontFile 37 0 R >> endobj 107 0 obj [333 278 0 0 556 556 556 556 0 0 0 0 0 333 0 0 0 0 0 975 722 0 722 722 667 0 0 0 278 0 0 0 0 0 0 667 0 0 0 611 0 0 0 0 0 0 0 0 0 0 0 0 556 611 556 611 556 333 611 611 278 0 556 278 889 611 611 611 0 389 556 333 611 556 778 556 556 ] endobj 39 0 obj << /Type /Pages /Count 6 /Parent 108 0 R /Kids [30 0 R 41 0 R 49 0 R 74 0 R 87 0 R 91 0 R] >> endobj 98 0 obj << /Type /Pages /Count 2 /Parent 108 0 R /Kids [95 0 R 100 0 R] >> endobj 108 0 obj << /Type /Pages /Count 8 /Kids [39 0 R 98 0 R] >> endobj 109 0 obj << /Type /Outlines /First 3 0 R /Last 27 0 R /Count 7 >> endobj 27 0 obj << /Title 28 0 R /A 25 0 R /Parent 109 0 R /Prev 23 0 R >> endobj 23 0 obj << /Title 24 0 R /A 21 0 R /Parent 109 0 R /Prev 19 0 R /Next 27 0 R >> endobj 19 0 obj << /Title 20 0 R /A 17 0 R /Parent 109 0 R /Prev 15 0 R /Next 23 0 R >> endobj 15 0 obj << /Title 16 0 R /A 13 0 R /Parent 109 0 R /Prev 11 0 R /Next 19 0 R >> endobj 11 0 obj << /Title 12 0 R /A 9 0 R /Parent 109 0 R /Prev 7 0 R /Next 15 0 R >> endobj 7 0 obj << /Title 8 0 R /A 5 0 R /Parent 109 0 R /Prev 3 0 R /Next 11 0 R >> endobj 3 0 obj << /Title 4 0 R /A 1 0 R /Parent 109 0 R /Next 7 0 R >> endobj 110 0 obj << /Names [(0) 35 0 R (1.0) 2 0 R (15) 68 0 R (17) 77 0 R (18) 78 0 R (19) 79 0 R (2.0) 6 0 R (20) 80 0 R (21) 81 0 R (22) 82 0 R (23) 83 0 R (24) 84 0 R (25) 85 0 R (26) 69 0 R (28) 89 0 R (29) 70 0 R (3.0) 10 0 R (31) 93 0 R (32) 71 0 R (34) 97 0 R (35) 72 0 R (37) 102 0 R (4.0) 14 0 R (5.0) 18 0 R (6.0) 22 0 R (7.0) 26 0 R (Doc-Start) 34 0 R (page.1) 33 0 R (page.2) 43 0 R (page.3) 51 0 R (page.4) 76 0 R (table.1) 47 0 R] /Limits [(0) (table.1)] >> endobj 111 0 obj << /Kids [110 0 R] >> endobj 112 0 obj << /Dests 111 0 R >> endobj 113 0 obj << /Type /Catalog /Pages 108 0 R /Outlines 109 0 R /Names 112 0 R /PageMode /UseOutlines /OpenAction 29 0 R >> endobj 114 0 obj << /Author()/Title()/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfeTeX-1.21a)/Keywords() /CreationDate (D:20130312005343+01'00') /PTEX.Fullbanner (This is pdfeTeX, Version 3.141592-1.21a-2.2 (Web2C 7.5.4) kpathsea version 3.5.4) >> endobj xref 0 115 0000000000 65535 f 0000000009 00000 n 0000001333 00000 n 0000063323 00000 n 0000000048 00000 n 0000000087 00000 n 0000012422 00000 n 0000063239 00000 n 0000000126 00000 n 0000000161 00000 n 0000013635 00000 n 0000063153 00000 n 0000000200 00000 n 0000000226 00000 n 0000014773 00000 n 0000063065 00000 n 0000000266 00000 n 0000000308 00000 n 0000015407 00000 n 0000062977 00000 n 0000000348 00000 n 0000000390 00000 n 0000016044 00000 n 0000062889 00000 n 0000000430 00000 n 0000000474 00000 n 0000016722 00000 n 0000062814 00000 n 0000000514 00000 n 0000000579 00000 n 0000001035 00000 n 0000001394 00000 n 0000000629 00000 n 0000001153 00000 n 0000001213 00000 n 0000001273 00000 n 0000061923 00000 n 0000052416 00000 n 0000061754 00000 n 0000062480 00000 n 0000002080 00000 n 0000001842 00000 n 0000001464 00000 n 0000001960 00000 n 0000051712 00000 n 0000037036 00000 n 0000051541 00000 n 0000002020 00000 n 0000012483 00000 n 0000010691 00000 n 0000002162 00000 n 0000012362 00000 n 0000010891 00000 n 0000036528 00000 n 0000025930 00000 n 0000036356 00000 n 0000011038 00000 n 0000011186 00000 n 0000011333 00000 n 0000011480 00000 n 0000011627 00000 n 0000011774 00000 n 0000011921 00000 n 0000012068 00000 n 0000012215 00000 n 0000025520 00000 n 0000018817 00000 n 0000025344 00000 n 0000013575 00000 n 0000014713 00000 n 0000015347 00000 n 0000015984 00000 n 0000016661 00000 n 0000014245 00000 n 0000013397 00000 n 0000012577 00000 n 0000013515 00000 n 0000013697 00000 n 0000013757 00000 n 0000013817 00000 n 0000013879 00000 n 0000013939 00000 n 0000013999 00000 n 0000014061 00000 n 0000014123 00000 n 0000014183 00000 n 0000014895 00000 n 0000014595 00000 n 0000014339 00000 n 0000014835 00000 n 0000015529 00000 n 0000015229 00000 n 0000014977 00000 n 0000015469 00000 n 0000016166 00000 n 0000015866 00000 n 0000015611 00000 n 0000016106 00000 n 0000062590 00000 n 0000016847 00000 n 0000016541 00000 n 0000016248 00000 n 0000016785 00000 n 0000016929 00000 n 0000025758 00000 n 0000036808 00000 n 0000052060 00000 n 0000062230 00000 n 0000062673 00000 n 0000062740 00000 n 0000063394 00000 n 0000063867 00000 n 0000063906 00000 n 0000063944 00000 n 0000064073 00000 n trailer << /Size 115 /Root 113 0 R /Info 114 0 R /ID [<74436D046E2CA04191335E5B0A8AF394> <74436D046E2CA04191335E5B0A8AF394>] >> startxref 64336 %%EOF libdbi-drivers-0.9.0/drivers/db2/dbd_db2/c27.html000644 001750 001750 00000003462 12117467210 022163 0ustar00markusmarkus000000 000000 Introduction

    Chapter 1. Introduction

    libdbi-drivers-0.9.0/drivers/db2/dbd_db2/c30.html000644 001750 001750 00000003500 12117467210 022146 0ustar00markusmarkus000000 000000 Installation

    Chapter 2. Installation

    libdbi-drivers-0.9.0/drivers/db2/dbd_db2/c33.html000644 001750 001750 00000003556 12117467210 022164 0ustar00markusmarkus000000 000000 Driver options

    Chapter 3. Driver options

    libdbi-drivers-0.9.0/drivers/db2/dbd_db2/c36.html000644 001750 001750 00000003350 12117467210 022157 0ustar00markusmarkus000000 000000 Peculiarities you should know about

    Chapter 4. Peculiarities you should know about

    libdbi-drivers-0.9.0/drivers/db2/dbd_db2/f16.html000644 001750 001750 00000005751 12117467210 022167 0ustar00markusmarkus000000 000000 Preface

    Preface

    libdbi is a database abstraction layer written in C. It implements a framework that can utilize separate driver libraries for specific database servers. The libdbi-drivers project provides the drivers necessary to talk to the supported database servers.

    This manual provides information about the Example driver. The manual is intended for programmers who write applications linked against libdbi and who want their applications to work with the Example driver.

    Questions and comments about the Example driver should be sent to the libdbi-drivers-devel mailing list. Visit the libdbi-drivers-devel list page to subscribe and for further information. Questions and comments about the libdbi library should be sent to the appropriate libdbi mailing list.

    The Example driver is maintained by E.X. Ample.

    libdbi-drivers-0.9.0/drivers/db2/dbd_db2/index.html000644 001750 001750 00000004143 12117467210 022674 0ustar00markusmarkus000000 000000 example driver manual

    example driver manual

    A libdbi driver providing connectivity to Example databases using libexampleclient.

    E. Ample

    Revision History
    Revision 0.12002-11-5

    libdbi-drivers-0.9.0/drivers/ingres/dbd_ingres/000755 001750 001750 00000000000 12117473273 022343 5ustar00markusmarkus000000 000000 libdbi-drivers-0.9.0/drivers/ingres/README000644 001750 001750 00000001744 10771604054 021126 0ustar00markusmarkus000000 000000 libdbi-drivers - drivers for libdbi, the Database Independent Abstraction Layer for C Copyright (C) 2001-2008, Markus Hoenicka http://libdbi-drivers.sourceforge.net Ingres driver Copyright (C) 2006-2008 Toby Thain INGRES DRIVER: -------------- This driver allows libdbi-enabled applications to use Ingres(R) as a database backend. Internally, it provides a libdbi driver around the Ingres OpenAPI client library. See the included driver documentation for installation instructions, usage, and information about driver-specific peculiarities. Tested with the Ingres Community Edition releases 9.0.4 and 9.2 on Gentoo Linux/x86. For more information about the Ingres(R) open source RDBMS, see http://ingres.com/ STATUS ------ See TODO for missing/incomplete features. CONTACT INFO: ------------- libdbi-drivers-devel@lists.sourceforge.net http://libdbi-drivers.sourceforge.net $Id: README,v 1.4 2008/03/24 01:47:24 qu1j0t3 Exp $ libdbi-drivers-0.9.0/drivers/ingres/Makefile.am000644 001750 001750 00000003307 11447472773 022313 0ustar00markusmarkus000000 000000 AUTOMAKE_OPTIONS = foreign docdir = $(datadir)/doc/$(PACKAGE)-$(VERSION) if HAVE_INGRES if BUILDDOCS htdocdir = $(docdir)/dbd_ingres doc_DATA = dbd_ingres.pdf htdoc_DATA = dbd_ingres/* else htdocdir = doc_DATA = htdoc_DATA = endif ingres_ltlibs = libdbdingres.la ingres_ldflags = -module -avoid-version ingres_sources = dbd_ingres.c months.gperf.c else htdocdir = doc_DATA = htdoc_DATA = ingres_ltlibs = ingres_ldflags = ingres_sources = endif INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/include @DBI_INCLUDE@ @INGRES_INCLUDE@ @LIBADD_LIBDBI@ libdir = $(driverdir) lib_LTLIBRARIES = $(ingres_ltlibs) libdbdingres_la_LDFLAGS = $(ingres_ldflags) @INGRES_LDFLAGS@ libdbdingres_la_LIBADD = @INGRES_LIBS@ libdbdingres_la_SOURCES = $(ingres_sources) libdbdingres_la_DEPENDENCIES = dbd_ingres.h # FIXME: make complains about a circular dependency (due to implicit rules??) .INTERMEDIATE : months.gperf.c months.gperf.c : months.gperf gperf --output-file=$@ $< EXTRA_DIST = dbd_ingres.c dbd_ingres.h months.gperf AUTHORS TODO README dbd_ingres.sgml dbd_ingres.pdf dbd_ingres/* # jadetex spews out tons of useless crap. shut it up: dbd_ingres.pdf: dbd_ingres.sgml @echo "Converting dbd_ingres.sgml to PDF..."; openjade -t tex -V tex-backend -d $(top_srcdir)/doc/include/doc-print.dsl dbd_ingres.sgml # run jadetex three times to get the references right pdftex "&pdfjadetex" dbd_ingres.tex pdftex "&pdfjadetex" dbd_ingres.tex pdftex "&pdfjadetex" dbd_ingres.tex dbd_ingres/*: dbd_ingres.sgml @echo "Converting dbd_ingres.sgml to HTML..."; mkdir -p dbd_ingres && cd dbd_ingres && openjade -t sgml -d $(top_srcdir)/../doc/include/doc-html.dsl ../dbd_ingres.sgml maintainer-clean: clean rm -f dbd_ingres.pdf dbd_ingres/* libdbi-drivers-0.9.0/drivers/ingres/Makefile.in000644 001750 001750 00000055772 12117467053 022327 0ustar00markusmarkus000000 000000 # Makefile.in generated by automake 1.12.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2012 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = drivers/ingres DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(top_srcdir)/depcomp AUTHORS ChangeLog TODO ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(docdir)" \ "$(DESTDIR)$(htdocdir)" LTLIBRARIES = $(lib_LTLIBRARIES) am__libdbdingres_la_SOURCES_DIST = dbd_ingres.c months.gperf.c @HAVE_INGRES_TRUE@am__objects_1 = dbd_ingres.lo months.gperf.lo am_libdbdingres_la_OBJECTS = $(am__objects_1) libdbdingres_la_OBJECTS = $(am_libdbdingres_la_OBJECTS) libdbdingres_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(libdbdingres_la_LDFLAGS) $(LDFLAGS) -o $@ @HAVE_INGRES_TRUE@am_libdbdingres_la_rpath = -rpath $(libdir) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(libdbdingres_la_SOURCES) DIST_SOURCES = $(am__libdbdingres_la_SOURCES_DIST) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac DATA = $(doc_DATA) $(htdoc_DATA) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DB2_INCLUDE = @DB2_INCLUDE@ DB2_LDFLAGS = @DB2_LDFLAGS@ DB2_LIBS = @DB2_LIBS@ DB2_TEST = @DB2_TEST@ DBI_INCLUDE = @DBI_INCLUDE@ DEBUG = @DEBUG@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FIREBIRD_INCLUDE = @FIREBIRD_INCLUDE@ FIREBIRD_ISQL = @FIREBIRD_ISQL@ FIREBIRD_ISQL_FLAG = @FIREBIRD_ISQL_FLAG@ FIREBIRD_LDFLAGS = @FIREBIRD_LDFLAGS@ FIREBIRD_LIBS = @FIREBIRD_LIBS@ FIREBIRD_TEST = @FIREBIRD_TEST@ FREETDS_INCLUDE = @FREETDS_INCLUDE@ FREETDS_LDFLAGS = @FREETDS_LDFLAGS@ FREETDS_LIBS = @FREETDS_LIBS@ FREETDS_TEST = @FREETDS_TEST@ GREP = @GREP@ INGRES_INCLUDE = @INGRES_INCLUDE@ INGRES_LDFLAGS = @INGRES_LDFLAGS@ INGRES_LIBS = @INGRES_LIBS@ INGRES_TEST = @INGRES_TEST@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBADD_LIBDBI = @LIBADD_LIBDBI@ LIBDBI_LIBDIR = @LIBDBI_LIBDIR@ LIBDBI_TEST = @LIBDBI_TEST@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSQL_INCLUDE = @MSQL_INCLUDE@ MSQL_LDFLAGS = @MSQL_LDFLAGS@ MSQL_LIBS = @MSQL_LIBS@ MSQL_TEST = @MSQL_TEST@ MYSQL_CONFIG = @MYSQL_CONFIG@ MYSQL_INCLUDE = @MYSQL_INCLUDE@ MYSQL_LDFLAGS = @MYSQL_LDFLAGS@ MYSQL_LIBS = @MYSQL_LIBS@ MYSQL_TEST = @MYSQL_TEST@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ ORACLE_INCLUDE = @ORACLE_INCLUDE@ ORACLE_LDFLAGS = @ORACLE_LDFLAGS@ ORACLE_LIBS = @ORACLE_LIBS@ ORACLE_TEST = @ORACLE_TEST@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PGSQL_INCLUDE = @PGSQL_INCLUDE@ PGSQL_LDFLAGS = @PGSQL_LDFLAGS@ PGSQL_LIBS = @PGSQL_LIBS@ PGSQL_TEST = @PGSQL_TEST@ PG_CONFIG = @PG_CONFIG@ PROFILE = @PROFILE@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SQLITE3_INCLUDE = @SQLITE3_INCLUDE@ SQLITE3_LDFLAGS = @SQLITE3_LDFLAGS@ SQLITE3_LIBS = @SQLITE3_LIBS@ SQLITE3_TEST = @SQLITE3_TEST@ SQLITE_INCLUDE = @SQLITE_INCLUDE@ SQLITE_LDFLAGS = @SQLITE_LDFLAGS@ SQLITE_LIBS = @SQLITE_LIBS@ SQLITE_TEST = @SQLITE_TEST@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ dbi_dbdir = @dbi_dbdir@ docdir = $(datadir)/doc/$(PACKAGE)-$(VERSION) docs_subdirs = @docs_subdirs@ driverdir = @driverdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = $(driverdir) libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = foreign @BUILDDOCS_FALSE@@HAVE_INGRES_TRUE@htdocdir = @BUILDDOCS_TRUE@@HAVE_INGRES_TRUE@htdocdir = $(docdir)/dbd_ingres @HAVE_INGRES_FALSE@htdocdir = @BUILDDOCS_FALSE@@HAVE_INGRES_TRUE@doc_DATA = @BUILDDOCS_TRUE@@HAVE_INGRES_TRUE@doc_DATA = dbd_ingres.pdf @HAVE_INGRES_FALSE@doc_DATA = @BUILDDOCS_FALSE@@HAVE_INGRES_TRUE@htdoc_DATA = @BUILDDOCS_TRUE@@HAVE_INGRES_TRUE@htdoc_DATA = dbd_ingres/* @HAVE_INGRES_FALSE@htdoc_DATA = @HAVE_INGRES_FALSE@ingres_ltlibs = @HAVE_INGRES_TRUE@ingres_ltlibs = libdbdingres.la @HAVE_INGRES_FALSE@ingres_ldflags = @HAVE_INGRES_TRUE@ingres_ldflags = -module -avoid-version @HAVE_INGRES_FALSE@ingres_sources = @HAVE_INGRES_TRUE@ingres_sources = dbd_ingres.c months.gperf.c INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/include @DBI_INCLUDE@ @INGRES_INCLUDE@ @LIBADD_LIBDBI@ lib_LTLIBRARIES = $(ingres_ltlibs) libdbdingres_la_LDFLAGS = $(ingres_ldflags) @INGRES_LDFLAGS@ libdbdingres_la_LIBADD = @INGRES_LIBS@ libdbdingres_la_SOURCES = $(ingres_sources) libdbdingres_la_DEPENDENCIES = dbd_ingres.h EXTRA_DIST = dbd_ingres.c dbd_ingres.h months.gperf AUTHORS TODO README dbd_ingres.sgml dbd_ingres.pdf dbd_ingres/* all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign drivers/ingres/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign drivers/ingres/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ } uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libdbdingres.la: $(libdbdingres_la_OBJECTS) $(libdbdingres_la_DEPENDENCIES) $(EXTRA_libdbdingres_la_DEPENDENCIES) $(libdbdingres_la_LINK) $(am_libdbdingres_la_rpath) $(libdbdingres_la_OBJECTS) $(libdbdingres_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dbd_ingres.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/months.gperf.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-docDATA: $(doc_DATA) @$(NORMAL_INSTALL) @list='$(doc_DATA)'; test -n "$(docdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(docdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(docdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(docdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(docdir)" || exit $$?; \ done uninstall-docDATA: @$(NORMAL_UNINSTALL) @list='$(doc_DATA)'; test -n "$(docdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(docdir)'; $(am__uninstall_files_from_dir) install-htdocDATA: $(htdoc_DATA) @$(NORMAL_INSTALL) @list='$(htdoc_DATA)'; test -n "$(htdocdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(htdocdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(htdocdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(htdocdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(htdocdir)" || exit $$?; \ done uninstall-htdocDATA: @$(NORMAL_UNINSTALL) @list='$(htdoc_DATA)'; test -n "$(htdocdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(htdocdir)'; $(am__uninstall_files_from_dir) ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(DATA) installdirs: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(docdir)" "$(DESTDIR)$(htdocdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-docDATA install-htdocDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-libLTLIBRARIES install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-docDATA uninstall-htdocDATA \ uninstall-libLTLIBRARIES .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libLTLIBRARIES clean-libtool cscopelist ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am \ install-docDATA install-dvi install-dvi-am install-exec \ install-exec-am install-htdocDATA install-html install-html-am \ install-info install-info-am install-libLTLIBRARIES \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \ uninstall-am uninstall-docDATA uninstall-htdocDATA \ uninstall-libLTLIBRARIES # FIXME: make complains about a circular dependency (due to implicit rules??) .INTERMEDIATE : months.gperf.c months.gperf.c : months.gperf gperf --output-file=$@ $< # jadetex spews out tons of useless crap. shut it up: dbd_ingres.pdf: dbd_ingres.sgml @echo "Converting dbd_ingres.sgml to PDF..."; openjade -t tex -V tex-backend -d $(top_srcdir)/doc/include/doc-print.dsl dbd_ingres.sgml # run jadetex three times to get the references right pdftex "&pdfjadetex" dbd_ingres.tex pdftex "&pdfjadetex" dbd_ingres.tex pdftex "&pdfjadetex" dbd_ingres.tex dbd_ingres/*: dbd_ingres.sgml @echo "Converting dbd_ingres.sgml to HTML..."; mkdir -p dbd_ingres && cd dbd_ingres && openjade -t sgml -d $(top_srcdir)/../doc/include/doc-html.dsl ../dbd_ingres.sgml maintainer-clean: clean rm -f dbd_ingres.pdf dbd_ingres/* # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: libdbi-drivers-0.9.0/drivers/ingres/AUTHORS000644 001750 001750 00000000277 10436770423 021320 0ustar00markusmarkus000000 000000 The following people have been involved in the Ingres driver development: Main developer: * Toby Thain $Id: AUTHORS,v 1.1 2006/05/30 07:15:31 qu1j0t3 Exp $ libdbi-drivers-0.9.0/drivers/ingres/ChangeLog000644 001750 001750 00000000251 10771604054 022010 0ustar00markusmarkus000000 000000 30-May-2006, Toby Thain * initial version 23-Mar-2008, Toby Thain * changes to support new instance structure libdbi-drivers-0.9.0/drivers/ingres/TODO000644 001750 001750 00000000550 10442073474 020731 0ustar00markusmarkus000000 000000 8-Jun-2006 TODO: * (DONE) result set handling * (DONE) resolve date retrieval issue * (DONE) long clob/blob column types (LONG VARCHAR, LONG NVARCHAR, LONG BYTE) * (DONE) fix multi-statement transactions * documentation * (DONE) error string retrieval * encodings * support for UTF-16 column types * (DONE) quieten the debug logging * whatever else is missinglibdbi-drivers-0.9.0/drivers/ingres/dbd_ingres.c000644 001750 001750 00000115631 12073360553 022513 0ustar00markusmarkus000000 000000 /* * libdbi - database independent abstraction layer for C. * Ingres driver Copyright (C) 2006 Toby Thain * http://libdbi.sourceforge.net * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * $Id: dbd_ingres.c,v 1.28 2013/01/09 21:30:19 mhoenicka Exp $ */ #ifdef HAVE_CONFIG_H #include #endif #define _GNU_SOURCE /* we need asprintf */ #include #include #include #include #include /* for isdigit() */ #include #include #include #include "dbd_ingres.h" #include "iiapi.h" static const dbi_info_t driver_info = { "ingres", "Ingres database support", "Toby Thain ", "http://libdbi-drivers.sourceforge.net", "dbd_ingres v" VERSION, __DATE__ }; static const char *custom_functions[] = {NULL}; static const char *reserved_words[] = INGRES_RESERVED_WORDS; /* encoding strings, array is terminated by a pair of empty strings */ static const char encoding_hash[][16] = { "", "US-ASCII", "", "" }; static II_PTR envHandle = NULL; // quite arbitrary row count that we initially allocate, increasing as necessary. // needed because Ingres can't provide a row count prior to fetching data. #define INITIAL_ROWS 10 #define ROW_FACTOR 4 // multiply by this factor when we fill row array #define SYS_CATALOGS "iidbdb" // database name for system catalogs #define NO_AUTOCOMMIT "0" // mnemonic value for option #define AUTOCOMMIT_ON(conn) (((ingres_conn_t*)conn->connection)->autocommit) static dbi_inst_t_pointer dbi_instance = NULL; #define SAVE_ERROR(conn,errhdl) ingres_error(errhdl, dbi_instance->dbi_verbosity>1, \ &((ingres_conn_t*)conn->connection)->errorCode, \ &((ingres_conn_t*)conn->connection)->errorMsg) #define DEBUG_ERROR(errhdl) ingres_error(errhdl, dbi_instance->dbi_verbosity>2, NULL, NULL) #define DRIVER_ERROR(conn,msg) _dbd_internal_error_handler(conn,msg,0) #define PRINT_VERBOSE if(dbi_instance->dbi_verbosity>1) _verbose_handler #define PRINT_DEBUG if(dbi_instance->dbi_verbosity>2) _verbose_handler #define IS_BLOB(T) ( (T) == IIAPI_LVCH_TYPE || (T) == IIAPI_LBYTE_TYPE \ || (T) == IIAPI_LNVCH_TYPE || (T) == IIAPI_LTXT_TYPE ) typedef struct { II_PTR connHandle; II_PTR currTran; // current transaction, or the autocommit tranHandle II_LONG sizeAdvise; // advised buffer size for blob (long) types dbi_conn_t *sysConn; // used for querying system catalogs II_LONG errorCode; // last error code fetched by SAVE_ERROR char *errorMsg; // last error message fetched by SAVE_ERROR int autocommit; // whether autocommit is enabled for this connection } ingres_conn_t; typedef struct { II_PTR stmtHandle; // statement handle returned by associated query IIAPI_DESCRIPTOR *dataDesc; // filled by getDescriptor after query } ingres_result_t; // months.gperf.c struct month *in_word_set (register const char *str, register unsigned int len); // forward declarations static dbi_result_t *ingres_query(dbi_conn_t *conn, const char *statement); /* ---------- driver ---------- */ void dbd_register_driver(const dbi_info_t **_driver_info, const char ***_custom_functions, const char ***_reserved_words) { /* this is the first function called after the driver module is loaded into memory */ *_driver_info = &driver_info; *_custom_functions = custom_functions; *_reserved_words = reserved_words; } int dbd_initialize(dbi_driver_t *driver) { /* perform any database-specific server initialization. * this is called right after dbd_register_driver(). * return -1 on error, 0 on success. if -1 is returned, the driver will not * be added to the list of available drivers. */ /* this indicates the driver can be safely unloaded when libdbi is shut down. Change the value to '0' (zero) if the driver, or a library it is linked against, installs exit handlers via atexit() */ _dbd_register_driver_cap(driver, "safe_dlclose", 1); /* this indicates the database engine supports transactions */ _dbd_register_driver_cap(driver, "transaction_support", 1); /* this indicates the database engine supports savepoints */ _dbd_register_driver_cap(driver, "savepoint_support", 1); IIAPI_INITPARM initParm; initParm.in_version = IIAPI_VERSION_4; initParm.in_timeout = -1; IIapi_initialize( &initParm ); if(initParm.in_status < IIAPI_ST_ERROR){ envHandle = initParm.in_envHandle; dbi_instance = driver->dbi_inst; return 0; }else{ fputs("failed to initialise Ingres driver\n", stderr); return -1; } // FIXME: need to call terminate at driver shutdown. } int dbd_finalize(dbi_driver_t *driver) { /* perform any database-specific client library shutdown. * this is called right before dlclose()ing the driver. * return -1 on error, 0 on success. */ /* todo: see above FIXME */ return 0; } /* ---------- API helpers ---------- */ static IIAPI_STATUS ingres_wait(IIAPI_GENPARM *pgp){ IIAPI_WAITPARM waitParm; for( waitParm.wt_timeout = -1 ; ! pgp->gp_completed ; ) IIapi_wait(&waitParm); return pgp->gp_status; } static void ingres_error(II_PTR errorHandle, int print, int *errno, char **errmsg){ IIAPI_GETEINFOPARM eiParm; static char *typestr[] = {"0","ERROR","WARNING","MESSAGE"}; char *p, buf[0x200]; int count, n, size=0x200; if(errmsg){ if(*errmsg) free(*errmsg); *errmsg = malloc(size); } if( (eiParm.ge_errorHandle = errorHandle) ){ for(count = 0;;){ IIapi_getErrorInfo(&eiParm); if(eiParm.ge_status == IIAPI_ST_SUCCESS){ n = snprintf(buf, sizeof(buf), "%s SQLSTATE:%s Code:%06X %s\n", typestr[eiParm.ge_type], eiParm.ge_SQLSTATE, eiParm.ge_errorCode, eiParm.ge_message); /* if(eiParm.ge_serverInfoAvail) n += snprintf(buf+n, sizeof(buf)-n, "svr_id_error=%d svr_local_error=%d svr_id_server=%d svr_server_type=%d svr_severity=%d svr_parmCount=%d\n", eiParm.ge_serverInfo->svr_id_error, eiParm.ge_serverInfo->svr_local_error, eiParm.ge_serverInfo->svr_id_server, eiParm.ge_serverInfo->svr_server_type, eiParm.ge_serverInfo->svr_severity, eiParm.ge_serverInfo->svr_parmCount); */ if(print) _verbose_handler(NULL, buf); if(errno) *errno = eiParm.ge_errorCode; // store last error if(errmsg){ if(count+n >= size){ size += n + 0x200; if( (p = realloc(*errmsg, size)) ) *errmsg = p; }else p = *errmsg; if(p){ memcpy(p+count, buf, n); p[n] = 0; count += n; } } }else break; } }else{ if(errmsg) *errmsg = NULL; if(errno) *errno = 0; } } /* ---------- connections ---------- */ static int ingres_envoption_num(dbi_conn_t *conn, II_LONG id, char *name){ IIAPI_SETENVPRMPARM setEPParm; const char *opt = dbi_conn_get_option(conn, name); if(opt){ II_LONG val = atoi(opt); setEPParm.se_envHandle = envHandle; setEPParm.se_paramID = id; setEPParm.se_paramValue = &val; IIapi_setEnvParam(&setEPParm); return setEPParm.se_status == IIAPI_ST_SUCCESS; } return 1; } static int ingres_option_num(dbi_conn_t *conn, IIAPI_SETCONPRMPARM *psc, II_LONG id, char *name){ IIAPI_STATUS status; const char *opt = dbi_conn_get_option(conn, name); if(opt){ II_LONG val = atoi(opt); psc->sc_paramID = id; psc->sc_paramValue = &val; // works for Ingres 'long' and 'bool' types too, which are all int. IIapi_setConnectParam(psc); status = ingres_wait(&psc->sc_genParm); DEBUG_ERROR(psc->sc_genParm.gp_errorHandle); return status == IIAPI_ST_SUCCESS; } return 1; } static int ingres_option_str(dbi_conn_t *conn, IIAPI_SETCONPRMPARM *psc, II_LONG id, char *name){ IIAPI_STATUS status; const char *opt = dbi_conn_get_option(conn, name); if(opt){ psc->sc_paramID = id; psc->sc_paramValue = (char*)opt; // works for Ingres 'char' options too, of course IIapi_setConnectParam(psc); status = ingres_wait(&psc->sc_genParm); DEBUG_ERROR(psc->sc_genParm.gp_errorHandle); return status == IIAPI_ST_SUCCESS; } return 1; } static int ingres_connect(dbi_conn_t *conn, const char *db, const char *autocommit) { IIAPI_SETCONPRMPARM scParm = {{NULL, NULL}}; IIAPI_CONNPARM connParm = {{NULL, NULL}}; IIAPI_AUTOPARM acParm = {{NULL, NULL}}; IIAPI_STATUS status; ingres_conn_t *iconn; PRINT_DEBUG(NULL, "ingres_connect: envHandle=%#x\n",envHandle); // we need this structure whether connection succeeds or not, // at least to track errors. conn->connection = iconn = malloc(sizeof(ingres_conn_t)); iconn->connHandle = NULL; iconn->currTran = NULL; iconn->sysConn = NULL; iconn->errorCode = 0; iconn->errorMsg = NULL; iconn->autocommit = FALSE; scParm.sc_connHandle = envHandle; // set environment options (as distinct from connection options) ingres_envoption_num(conn, IIAPI_EP_MAX_SEGMENT_LEN, "ingres_blobsegment"); // size of returned BLOB segments // see OpenAPI reference for meaning of these options. Numeric codes in iiapi.h ingres_option_num(conn, &scParm, IIAPI_CP_CENTURY_BOUNDARY, "ingres_century_bdry"); // interpretation of 2-digit years ingres_option_num(conn, &scParm, IIAPI_CP_DATE_FORMAT, "ingres_date_format"); ingres_option_str(conn, &scParm, IIAPI_CP_DECIMAL_CHAR, "ingres_decimal_char"); // seems to affect input format, not output? ingres_option_num(conn, &scParm, IIAPI_CP_EXCLUSIVE_LOCK, "ingres_excl_lock"); // application-exclusive lock on db ingres_option_str(conn, &scParm, IIAPI_CP_MONEY_SIGN, "ingres_money_sign"); // does not seem to affect result format? ingres_option_num(conn, &scParm, IIAPI_CP_MONEY_PRECISION, "ingres_money_prec"); ingres_option_num(conn, &scParm, IIAPI_CP_MONEY_LORT, "ingres_money_lort"); ingres_option_str(conn, &scParm, IIAPI_CP_NATIVE_LANG, "ingres_native_lang"); // language for server messages ingres_option_num(conn, &scParm, IIAPI_CP_NATIVE_LANG_CODE, "ingres_native_lang_code"); // language for server messages ingres_option_str(conn, &scParm, IIAPI_CP_NUMERIC_TREATMENT, "ingres_num_treatment"); // treatment of decimal literals ingres_option_str(conn, &scParm, IIAPI_CP_STRING_TRUNC, "ingres_string_trunc"); // overlong string behaviour ingres_option_str(conn, &scParm, IIAPI_CP_TIMEZONE, "ingres_timezone"); connParm.co_target = db ? (II_CHAR*)db : (II_CHAR*)dbi_conn_get_option(conn, "dbname"); connParm.co_username = (II_CHAR*)dbi_conn_get_option(conn, "username"); connParm.co_password = (II_CHAR*)dbi_conn_get_option(conn, "password"); connParm.co_timeout = -1; connParm.co_connHandle = scParm.sc_connHandle; // if any options were set above, this is now a valid connHandle PRINT_DEBUG(NULL, "ingres_connect: co_connHandle=%#x\n",connParm.co_connHandle); connParm.co_tranHandle = NULL; connParm.co_type = IIAPI_CT_SQL; IIapi_connect(&connParm); status = ingres_wait(&connParm.co_genParm); SAVE_ERROR(conn, connParm.co_genParm.gp_errorHandle); iconn->connHandle = connParm.co_connHandle; if(status < IIAPI_ST_ERROR){ PRINT_VERBOSE(conn, "connected to '%s', API level=%d, BLOB sizeAdvise=%d\n", connParm.co_target, connParm.co_apiLevel, connParm.co_sizeAdvise); iconn->sizeAdvise = connParm.co_sizeAdvise; if(!autocommit || atoi(autocommit)){ // enable auto-commit by default // set autocommit mode iconn->autocommit = TRUE; acParm.ac_connHandle = connParm.co_connHandle; acParm.ac_tranHandle = NULL; IIapi_autocommit(&acParm); status = ingres_wait(&acParm.ac_genParm); DEBUG_ERROR(acParm.ac_genParm.gp_errorHandle); if(status < IIAPI_ST_ERROR){ // stash the autocommit transaction handle iconn->currTran = acParm.ac_tranHandle; PRINT_VERBOSE(conn, "...enabled autocommit, tranHandle=%#x\n", acParm.ac_tranHandle); }else PRINT_VERBOSE(conn, "...FAILED to enable autocommit\n"); } return 0; }else // API doc says must disconnect or abort on error. dbd_disconnect(conn); return -1; } int dbd_connect(dbi_conn_t *conn) { return ingres_connect(conn, NULL, dbi_conn_get_option(conn, "ingres_autocommit")); } int dbd_disconnect(dbi_conn_t *conn) { IIAPI_DISCONNPARM disconnParm = {{NULL, NULL}}; IIAPI_AUTOPARM acParm = {{NULL, NULL}}; IIAPI_STATUS status; ingres_conn_t *iconn = conn->connection; if(iconn){ if(iconn->sysConn) dbi_conn_close(iconn->sysConn); if(iconn->autocommit){ // exit autocommit mode acParm.ac_connHandle = iconn->connHandle; acParm.ac_tranHandle = iconn->currTran; IIapi_autocommit(&acParm); status = ingres_wait(&acParm.ac_genParm); DEBUG_ERROR(acParm.ac_genParm.gp_errorHandle); if(status < IIAPI_ST_ERROR){ PRINT_VERBOSE(conn, "...exited autocommit\n"); }else{ PRINT_VERBOSE(conn, "...FAILED to exit autocommit\n"); } } if(iconn->connHandle){ disconnParm.dc_connHandle = iconn->connHandle; IIapi_disconnect( &disconnParm ); ingres_wait(&disconnParm.dc_genParm); DEBUG_ERROR(disconnParm.dc_genParm.gp_errorHandle); } free(conn->connection); conn->connection = NULL; PRINT_VERBOSE(conn, "disconnected.\n"); } return 0; } /* ---------- connection state ---------- */ const char *dbd_select_db(dbi_conn_t *conn, const char *db) { /* Ingres doesn't support switching databases without reconnecting */ if (!db || !*db) return NULL; if (conn->connection) dbd_disconnect(conn); if (ingres_connect(conn, db, dbi_conn_get_option(conn, "ingres_autocommit"))) return NULL; return db; } int dbd_ping(dbi_conn_t *conn) { long test = 0; dbi_result_t *res; res = ingres_query(conn, "SELECT 1"); if(res && dbi_result_next_row(res)) test = dbi_result_get_int_idx(res,1); if(res) dbi_result_free(res); return test; } int dbd_geterror(dbi_conn_t *conn, int *err_no, char **errstr) { /* put error number into err_no, error string into errstr * return 0 if error, 1 if err_no filled, 2 if errstr filled, 3 if both err_no and errstr filled */ if(conn && conn->connection && ((ingres_conn_t*)conn->connection)->errorMsg){ *err_no = ((ingres_conn_t*)conn->connection)->errorCode; *errstr = strdup( ((ingres_conn_t*)conn->connection)->errorMsg ); return 3; } return 0; } int dbd_get_socket(dbi_conn_t *conn){ return 0; // we don't use socket } const char *dbd_get_encoding(dbi_conn_t *conn){ return NULL; // TODO } const char* dbd_encoding_to_iana(const char *db_encoding) { /* don't know how to translate, return original encoding */ return db_encoding; //TODO } const char* dbd_encoding_from_iana(const char *iana_encoding) { /* don't know how to translate, return original encoding */ return iana_encoding; //TODO } size_t dbd_quote_string(dbi_driver_t *driver, const char *orig, char *dest) { // Ingres quotes ' by doubling it char *p = dest; const char *q; *p++ = '\''; for(q = orig; *q;) if(*q == '\''){ *p++ = '\''; *p++ = '\''; ++q; }else *p++ = *q++; *p++ = '\''; *p = 0; return p-dest; } size_t dbd_conn_quote_string(dbi_conn_t *conn, const char *orig, char *dest) { return dbd_quote_string(conn->driver, orig, dest); } size_t dbd_quote_binary(dbi_conn_t *conn, const unsigned char* orig, size_t from_length, unsigned char **ptr_dest) { static char *hex = "0123456789ABCDEF"; size_t to_length = from_length*2 + 4; unsigned char *p = malloc(to_length); const unsigned char *q; if( (*ptr_dest = p) ){ *p++ = 'X'; *p++ = '\''; for(q = orig; from_length--;){ *p++ = hex[(*q) >> 4]; *p++ = hex[(*q) & 0xf]; ++q; } *p++ = '\''; *p = 0; return to_length; } return DBI_LENGTH_ERROR; } /* ---------- result handling ---------- */ static time_t ingres_date(char *raw){ struct tm unixtime; char *p = raw, *q, sep; PRINT_DEBUG(NULL,"parsing date: '%s'\n",raw); unixtime.tm_sec = unixtime.tm_min = unixtime.tm_hour = 0; unixtime.tm_isdst = -1; // parse Ingres default (US) date format: dd-mmm-yyyy [hh:mm:ss] //for(p = raw; *p && !isdigit(*p); ++p) // ; if(isdigit(*p)){ // process day unixtime.tm_mday = atoi(p); while(*p && isdigit(*p)) ++p; if(!*p){ _verbose_handler(NULL,"date ended after day??",raw); return 0; } sep = *p++; // skip separator // process month if(isdigit(*p)){ unixtime.tm_mon = atoi(p)-1; /* months are 0 through 11 */ while(*p && *p != sep) ++p; }else{ q = p; // point to start of month name while(*p && *p != sep) ++p; if(*p){ *p = 0; unixtime.tm_mon = in_word_set(q,3)->index; // should work for long month names too ++p; } } if(!*p){ _verbose_handler(NULL,"date ended after month??",raw); return 0; } // process year unixtime.tm_year = atoi(p)-1900; PRINT_DEBUG(NULL,"ingres_date: parsed date day=%d mon=%d yr=%d\n", unixtime.tm_mday, unixtime.tm_mon, unixtime.tm_year); while(isdigit(*p)) ++p; // skip space following date while(*p == ' ') ++p; // Ingres does not generate a time by itself, it's always preceded by a date. if(isdigit(*p)){ // time is present // process hours unixtime.tm_hour = atoi(p); while(isdigit(*p)) ++p; if(!*p){ _verbose_handler(NULL,"time ended after hour??",raw); return 0; } ++p; // skip separator // process minutes unixtime.tm_min = atoi(p); while(isdigit(*p)) ++p; if(!*p){ _verbose_handler(NULL,"time ended after minute??",raw); return 0; } ++p; // skip separator // process seconds unixtime.tm_sec = atoi(p); PRINT_DEBUG(NULL,"ingres_date: parsed time %02d:%02d:%02d\n", unixtime.tm_hour, unixtime.tm_min, unixtime.tm_sec); /* check for a timezone suffix */ //while(isdigit(*p) || *p == ' ') // ++p; }else if(*p) _verbose_handler(NULL,"bad time: '%s'",p); return timegm(&unixtime); }else _verbose_handler(NULL,"bad date: '%s'",raw); return 0; } void ingres_classify_field(IIAPI_DESCRIPTOR *ds, unsigned short *type, unsigned int *attribs) { *type = 0; *attribs = 0; switch(ds->ds_dataType){ //IIAPI_HNDL_TYPE // integer case IIAPI_INT_TYPE: *type = DBI_TYPE_INTEGER; // always signed switch(ds->ds_length){ case 1: *attribs = DBI_INTEGER_SIZE1; break; case 2: *attribs = DBI_INTEGER_SIZE2; break; case 4: *attribs = DBI_INTEGER_SIZE4; break; case 8: *attribs = DBI_INTEGER_SIZE8; break; } break; // float case IIAPI_FLT_TYPE: *type = DBI_TYPE_DECIMAL; switch(ds->ds_length){ case 4: *attribs = DBI_DECIMAL_SIZE4; break; case 8: *attribs = DBI_DECIMAL_SIZE8; break; } break; case IIAPI_LOGKEY_TYPE: case IIAPI_TABKEY_TYPE: // variable length binary string case IIAPI_LBYTE_TYPE: case IIAPI_VBYTE_TYPE: // fixed length binary string case IIAPI_BYTE_TYPE: *type = DBI_TYPE_BINARY; break; // variable length char string; segment length is first two bytes of datum case IIAPI_VCH_TYPE: case IIAPI_LVCH_TYPE: case IIAPI_TXT_TYPE: // deprecated // fixed length char string case IIAPI_CHR_TYPE: // deprecated case IIAPI_CHA_TYPE: case IIAPI_LTXT_TYPE: // fixed length 'national character set' UTF-16 (wide) char string (TODO) case IIAPI_NCHA_TYPE: // variable length UTF-16 string; first 2 bytes are length case IIAPI_NVCH_TYPE: case IIAPI_LNVCH_TYPE: // Ingres-native types, must be converted case IIAPI_DEC_TYPE: // packed decimal; use convertData or formatData case IIAPI_MNY_TYPE: // Ingres money; use convertData or formatData *type = DBI_TYPE_STRING; break; case IIAPI_DTE_TYPE: // Ingres date; use convertData or formatData *type = DBI_TYPE_DATETIME; break; } } static int ingres_field(dbi_result_t *result, dbi_row_t *row, dbi_data_t *data, int idx, IIAPI_DESCRIPTOR *pdesc, IIAPI_DATAVALUE *pdataval) { IIAPI_CONVERTPARM convParm; int len; char *val; switch(pdesc->ds_dataType){ //case IIAPI_HNDL_TYPE: // can't do anything with this // 'national character sets' -- UTF-16 strings case IIAPI_NCHA_TYPE: case IIAPI_NVCH_TYPE: //case IIAPI_LNVCH_TYPE: // conversion can't work for BLOB type case IIAPI_DEC_TYPE: case IIAPI_MNY_TYPE: case IIAPI_DTE_TYPE: // convert to string first convParm.cv_srcDesc = *pdesc; convParm.cv_srcValue = *pdataval; convParm.cv_dstDesc.ds_dataType = IIAPI_CHA_TYPE; convParm.cv_dstDesc.ds_nullable = FALSE; convParm.cv_dstDesc.ds_length = pdesc->ds_length + pdesc->ds_precision + 32; // include plenty of slop convParm.cv_dstDesc.ds_precision = convParm.cv_dstDesc.ds_scale = 0; convParm.cv_dstDesc.ds_columnType = IIAPI_COL_TUPLE; convParm.cv_dstValue.dv_length = convParm.cv_dstDesc.ds_length; convParm.cv_dstValue.dv_value = val = malloc(convParm.cv_dstValue.dv_length+1); IIapi_convertData(&convParm); if(convParm.cv_status > IIAPI_ST_SUCCESS){ _verbose_handler(result->conn,"could not convertData from column type %d\n",pdesc->ds_dataType); return 0; } len = convParm.cv_dstValue.dv_length; if(pdesc->ds_dataType == IIAPI_DTE_TYPE){ val[len] = 0; data->d_datetime = ingres_date(val); PRINT_DEBUG(result->conn," [%d] date string %d bytes\n", idx,len); break; }else if(pdesc->ds_dataType == IIAPI_DEC_TYPE || pdesc->ds_dataType == IIAPI_MNY_TYPE){ // strip trailing blanks from converted value while(len && val[len-1] == ' ') --len; } val[len] = 0; row->field_sizes[idx] = len; data->d_string = val; // use converted data block PRINT_DEBUG(result->conn," [%d] converted string %d bytes (desc %d bytes)\n",idx,len,pdesc->ds_length); break; //case IIAPI_LBYTE_TYPE: // these are handled in ingres_results() //case IIAPI_LVCH_TYPE: //case IIAPI_LTXT_TYPE: // variable length (first 2 bytes define length) case IIAPI_VCH_TYPE: case IIAPI_VBYTE_TYPE: case IIAPI_TXT_TYPE: // assume length (first 2 bytes of datum) is host native (short) row->field_sizes[idx] = len = *(unsigned short*)pdataval->dv_value; if((data->d_string = malloc(len+1))){ memcpy(data->d_string, (char*)pdataval->dv_value + 2, len); data->d_string[len] = 0; // NUL-terminate it, in case someone wants to pretend it's a string } PRINT_DEBUG(result->conn," [%d] variable size %d bytes (desc %d bytes)\n",idx,len,pdesc->ds_length); break; // fixed string/binary types case IIAPI_BYTE_TYPE: case IIAPI_CHR_TYPE: case IIAPI_CHA_TYPE: case IIAPI_LOGKEY_TYPE: case IIAPI_TABKEY_TYPE: row->field_sizes[idx] = len = pdataval->dv_length; data->d_string = pdataval->dv_value; // just copy pointer to the fetched block pdataval->dv_value = malloc(pdesc->ds_length+1); // replace block for future rows data->d_string[len] = 0; // NUL-terminate the string PRINT_DEBUG(result->conn," [%d] fixed size %d bytes (desc %d bytes)\n",idx,pdataval->dv_length,pdesc->ds_length); break; // these are returned in native format, all sizes case IIAPI_INT_TYPE: case IIAPI_FLT_TYPE: PRINT_DEBUG(result->conn," [%d] copying %d bytes\n",idx,pdataval->dv_length); memcpy(data, pdataval->dv_value, 8); // constant permits compile-time optimisation break; default: _verbose_handler(result->conn,"ingres_field(): can't handle column type = %d\n",pdesc->ds_dataType); return 0; } return 1; } static void ingres_close(dbi_conn_t *conn, II_PTR hdl) { IIAPI_CLOSEPARM closeParm = {{NULL, NULL}}; if(hdl){ closeParm.cl_stmtHandle = hdl; PRINT_DEBUG(conn, "closing stmtHandle %#x...\n", hdl); IIapi_close(&closeParm); ingres_wait(&closeParm.cl_genParm); DEBUG_ERROR(closeParm.cl_genParm.gp_errorHandle); } } static int ingres_results(dbi_result_t *result){ ingres_result_t *pres = result->result_handle; IIAPI_STATUS status; IIAPI_GETCOLPARM gcParm = {{NULL, NULL}}; IIAPI_DESCRIPTOR *desc = pres->dataDesc; IIAPI_DATAVALUE *databuf; dbi_row_t *row; dbi_row_t **resized; unsigned fieldidx, lastidx, i, len, isblob, cols, retval = 0; unsigned long count, limit, bloblen = 0, blobmax = 0; char *p, *blob = NULL; // no random access, we have to fetch row data sequentially using getColumns // therefore, grab all rows now. // set up a destination block for each field databuf = calloc(result->numfields, sizeof(IIAPI_DATAVALUE)); if(!databuf) return 0; for(i = 0; i < result->numfields; ++i){ databuf[i].dv_length = desc[i].ds_length; if(!(databuf[i].dv_value = malloc(desc[i].ds_length+1))) goto err; } gcParm.gc_stmtHandle = pres->stmtHandle; gcParm.gc_rowCount = 1; limit = result->numrows_matched; for(count = 0; ; ++count){ if(count == limit){ limit *= ROW_FACTOR; PRINT_DEBUG(result->conn,"reallocating to new row limit %d\n",limit); if( (resized = realloc(result->rows, limit*sizeof(dbi_row_t*))) ) result->rows = resized; else{ DRIVER_ERROR(result->conn,"can't expand row array; aborting\n"); break; } } PRINT_VERBOSE(result->conn,"fetching row %d\n",count); if((row = _dbd_row_allocate(result->numfields))){ for(fieldidx = 0; fieldidx < result->numfields; ){ // skip over non-BLOB fields for(lastidx = fieldidx; lastidx < result->numfields && !IS_BLOB(desc[lastidx].ds_dataType); ++lastidx) ; isblob = IS_BLOB(desc[fieldidx].ds_dataType); if(isblob) ++lastidx; gcParm.gc_columnCount = cols = lastidx - fieldidx; gcParm.gc_columnData = &databuf[fieldidx]; if(isblob){ bloblen = 0; blob = malloc(blobmax = desc[fieldidx].ds_length); } do{ IIapi_getColumns( &gcParm ); status = ingres_wait(&gcParm.gc_genParm); if ( status == IIAPI_ST_NO_DATA ){ // normal completion of fetch retval = 1; goto rowsdone; }else if ( status > IIAPI_ST_NO_DATA ){ SAVE_ERROR(result->conn, gcParm.gc_genParm.gp_errorHandle); _verbose_handler(result->conn,"getColumns returned status %d; aborting\n",status); goto rowsdone; } PRINT_DEBUG(result->conn,"getColumns fieldidx=%d columnCount=%d isblob=%d more=%d\n", fieldidx,gcParm.gc_columnCount,isblob,gcParm.gc_moreSegments); if(isblob){ // append returned segment to blob len = *(unsigned short*)databuf[fieldidx].dv_value; if(bloblen + len > blobmax){ // the idea here is to reduce the number of reallocs (typically memcopies). // means, e.g., a 1MB BLOB can be fetched in 9 doublings (reallocs) // otherwise, if we just added a segment size each time, we would realloc over 500 times! blobmax *= 2; if( (p = realloc(blob, blobmax)) ){ blob = p; PRINT_DEBUG(result->conn, "resized blob to %d bytes\n", blobmax); }else{ // returned data for BLOB column will be short! DRIVER_ERROR(result->conn, "could not resize blob; aborting\n"); goto rowsdone; } } memcpy(blob + bloblen, (char*)databuf[fieldidx].dv_value + 2, len); bloblen += len; PRINT_DEBUG(result->conn, " [%d] BLOB segment %d bytes\n", fieldidx, len); } }while(gcParm.gc_moreSegments); // process the column(s) we got for(i = fieldidx; i < lastidx; ++i){ row->field_sizes[i] = 0; if(databuf[i].dv_null){ _set_field_flag(row, i, DBI_VALUE_NULL, 1); PRINT_DEBUG(result->conn," [%d] is NULL\n",i); }else if(isblob){ if( (p = realloc(blob, bloblen)) ) // shrink block to actual length blob = p; row->field_values[fieldidx].d_string = blob; row->field_sizes[fieldidx] = bloblen; PRINT_DEBUG(result->conn," [%d] is BLOB of %d bytes\n",i,bloblen); }else ingres_field(result, row, &row->field_values[i], i, &desc[i], &databuf[i]); } fieldidx += cols; } _dbd_row_finalize(result, row, count); }else{ DRIVER_ERROR(result->conn, "failed to allocate row; aborting\n"); break; } } rowsdone: // Don't need this handle any more. ingres_close(result->conn, pres->stmtHandle); pres->stmtHandle = NULL; result->numrows_matched = count; // resize row array to match actual count (FIXME: work out why this crashes) //if( (resized = realloc(result->rows, count*sizeof(dbi_row_t*))) ) // result->rows = resized; err: // clean up allocations for(i = 0; i < result->numfields; ++i) if(databuf[i].dv_value) free(databuf[i].dv_value); free(databuf); return retval; } int dbd_fetch_row(dbi_result_t *result, unsigned long long rowidx) { return result->result_state == ROWS_RETURNED; /* 0 on error, 1 on successful fetchrow */ } int dbd_free_query(dbi_result_t *result) { if(result->result_handle){ ingres_close(result->conn, ((ingres_result_t*)result->result_handle)->stmtHandle); free(result->result_handle); result->result_handle = NULL; } return 0; } int dbd_goto_row(dbi_result_t *result, unsigned long long rowidx, unsigned long long currowidx) { /* no-op */ return 1; } /* ---------- query execution ---------- */ static int ingres_commit(dbi_conn_t *conn, II_PTR tranHandle){ IIAPI_COMMITPARM cmParm = {{NULL, NULL}}; IIAPI_STATUS status; PRINT_DEBUG(conn, "COMMIT tranHandle=%#x\n", tranHandle); cmParm.cm_tranHandle = tranHandle; IIapi_commit(&cmParm); status = ingres_wait(&cmParm.cm_genParm); SAVE_ERROR(conn, cmParm.cm_genParm.gp_errorHandle); return status == IIAPI_ST_SUCCESS; } static int ingres_rollback(dbi_conn_t *conn, II_PTR tranHandle){ IIAPI_ROLLBACKPARM rbParm = {{NULL, NULL}}; IIAPI_STATUS status; PRINT_DEBUG(conn, "ROLLBACK tranHandle=%#x\n", tranHandle); rbParm.rb_tranHandle = tranHandle; rbParm.rb_savePointHandle = NULL; IIapi_rollback(&rbParm); status = ingres_wait(&rbParm.rb_genParm); SAVE_ERROR(conn, rbParm.rb_genParm.gp_errorHandle); return status == IIAPI_ST_SUCCESS; } // note for non-Autocommit connections (such as system catalog access), // transaction handle is returned in tranHandle parameter, if not NULL static dbi_result_t *ingres_query(dbi_conn_t *conn, const char *statement) { IIAPI_QUERYPARM queryParm = {{NULL, NULL}}; IIAPI_GETQINFOPARM gqParm = {{NULL, NULL}}; IIAPI_GETDESCRPARM gdParm = {{NULL, NULL}}; IIAPI_DESCRIPTOR *pdesc; IIAPI_STATUS status; ingres_conn_t *iconn = conn->connection; dbi_result_t *res = NULL; ingres_result_t *pres = NULL; int i, affectedRows; if(!iconn || !iconn->connHandle){ DRIVER_ERROR(conn, "whoa, query attempted without a connection\n"); return NULL; } // special-case the transaction statements to respective API functions if(!strncasecmp(statement, "COMMIT", 6)){ if(ingres_commit(conn, iconn->currTran)){ iconn->currTran = NULL; return _dbd_result_create(conn, NULL, 0, 0); }else return NULL; }else if(!strncasecmp(statement, "ROLLBACK", 8)){ if(ingres_rollback(conn, iconn->currTran)){ iconn->currTran = NULL; return _dbd_result_create(conn, NULL, 0, 0); }else return NULL; } queryParm.qy_connHandle = iconn->connHandle; queryParm.qy_queryType = IIAPI_QT_QUERY; queryParm.qy_queryText = (II_CHAR*)statement; queryParm.qy_parameters = FALSE; queryParm.qy_tranHandle = iconn->currTran; queryParm.qy_stmtHandle = NULL; PRINT_DEBUG(conn, "query tranHandle IN=%#x\n", queryParm.qy_tranHandle); IIapi_query( &queryParm ); status = ingres_wait(&queryParm.qy_genParm); SAVE_ERROR(conn, queryParm.qy_genParm.gp_errorHandle); iconn->currTran = queryParm.qy_tranHandle; PRINT_DEBUG(conn, "query tranHandle OUT=%#x\n", queryParm.qy_tranHandle); if(status == IIAPI_ST_NO_DATA) _verbose_handler(conn,"(IIAPI_ST_NO_DATA: expected data, but none returned)\n"); if (status < IIAPI_ST_NO_DATA){ gdParm.gd_stmtHandle = queryParm.qy_stmtHandle; IIapi_getDescriptor(&gdParm); status = ingres_wait(&gdParm.gd_genParm); SAVE_ERROR(conn, gdParm.gd_genParm.gp_errorHandle); if(status < IIAPI_ST_ERROR){ // if descriptorCount is zero, no data can be expected // create result struct anyway if(!gdParm.gd_descriptorCount){ // fetch the number of affected rows gqParm.gq_stmtHandle = queryParm.qy_stmtHandle; IIapi_getQueryInfo(&gqParm); status = ingres_wait(&gqParm.gq_genParm); SAVE_ERROR(conn, gqParm.gq_genParm.gp_errorHandle); if(status < IIAPI_ST_ERROR && (gqParm.gq_mask & IIAPI_GQ_ROW_COUNT)) { affectedRows = gqParm.gq_rowCount; PRINT_VERBOSE(conn,"getQueryInfo: row count = %d\n",affectedRows); }else affectedRows = 0; res = _dbd_result_create(conn, NULL, 0, affectedRows); PRINT_VERBOSE(conn,"no descriptors\n"); ingres_close(conn, queryParm.qy_stmtHandle); }else{ PRINT_VERBOSE(conn,"new result set, stmtHandle = %#x\n",queryParm.qy_stmtHandle); pres = malloc(sizeof(ingres_result_t)); pres->stmtHandle = queryParm.qy_stmtHandle; pres->dataDesc = gdParm.gd_descriptor; res = _dbd_result_create(conn, pres, INITIAL_ROWS, 0); _dbd_result_set_numfields(res, gdParm.gd_descriptorCount); // fetch column information for(i = 0, pdesc = gdParm.gd_descriptor; i < gdParm.gd_descriptorCount; ++i, ++pdesc){ unsigned short type; unsigned int attribs; ingres_classify_field(&gdParm.gd_descriptor[i], &type, &attribs); PRINT_VERBOSE(conn,"field %d: '%s' dataType=%d nullable=%d" " length=%d precision=%d scale=%d dbiType=%d dbiAttr=%#x\n", i,pdesc->ds_columnName,pdesc->ds_dataType,pdesc->ds_nullable, pdesc->ds_length,pdesc->ds_precision,pdesc->ds_scale,type,attribs); _dbd_result_add_field(res, i, pdesc->ds_columnName, type, attribs); } // we have no choice but to fetch all result data now, because // that is the only way we can report the correct row count // as a property of the result set. ingres_results(res); } } } // must have been an error. if(!res) ingres_close(conn, queryParm.qy_stmtHandle); return res; } dbi_result_t *dbd_query(dbi_conn_t *conn, const char *statement) { return ingres_query(conn, statement); } dbi_result_t *dbd_query_null(dbi_conn_t *conn, const unsigned char *statement, size_t st_length) { DRIVER_ERROR(conn, "dbd_query_null() not implemented\n"); return NULL; } int dbd_transaction_begin(dbi_conn_t *conn) { /* transactions begin implicitly after CONNECT, COMMIT, or ROLLBACK statements */ return 0; } int dbd_transaction_commit(dbi_conn_t *conn) { if (dbd_query(conn, "COMMIT") == NULL) { return 1; } else { return 0; } } int dbd_transaction_rollback(dbi_conn_t *conn) { if (dbd_query(conn, "ROLLBACK") == NULL) { return 1; } else { return 0; } } int dbd_savepoint(dbi_conn_t *conn, const char *savepoint) { char* query; if (!savepoint) { return 1; } asprintf(&query, "SAVEPOINT %s", savepoint); if (dbd_query(conn, query) == NULL) { free(query); return 1; } else { free(query); return 0; } } int dbd_rollback_to_savepoint(dbi_conn_t *conn, const char *savepoint) { char* query; if (!savepoint) { return 1; } asprintf(&query, "ROLLBACK TO %s", savepoint); if (dbd_query(conn, query) == NULL) { free(query); return 1; } else { free(query); return 0; } } int dbd_release_savepoint(dbi_conn_t *conn, const char *savepoint) { /* this is apparently not used by Ingres */ return 0; } static dbi_result_t *ingres_sys_query(dbi_conn_t *conn, const char *sql) { dbi_inst instance; dbi_result_t *res = NULL; ingres_conn_t *iconn = conn->connection; if(!iconn->sysConn){ // note that we need to keep the system connection around, // because closing it prematurely will kill result sets // FIXME: could use _disjoin_from_conn() instead instance = dbi_driver_get_instance(dbi_conn_get_driver(conn)); iconn->sysConn = dbi_conn_new_r(driver_info.name, instance); if(ingres_connect(iconn->sysConn, SYS_CATALOGS, NO_AUTOCOMMIT) < 0){ _verbose_handler(conn,"can't connect to '%s'\n",SYS_CATALOGS); return NULL; } } res = ingres_query(iconn->sysConn, sql); if(!res) _verbose_handler(conn,"no result for '%s'??\n",sql); ingres_rollback(iconn->sysConn, ((ingres_conn_t*)iconn->sysConn->connection)->currTran); return res; } /* ---------- DBMS queries ---------- */ char *dbd_get_engine_version(dbi_conn_t *conn, char *versionstring) { char *str = "0"; dbi_result_t *res = ingres_query(conn, "SELECT dbmsinfo('_version')"); if(res && dbi_result_next_row(res)){ strncpy(versionstring, dbi_result_get_string_idx(res,1), VERSIONSTRING_LENGTH); versionstring[VERSIONSTRING_LENGTH-1] = 0; // make sure of NUL-termination str = versionstring; } if(res) dbi_result_free(res); return str; } dbi_result_t *dbd_list_dbs(dbi_conn_t *conn, const char *pattern) { static char *select = "SELECT database_name FROM iidatabase_info"; char *sql = select; dbi_result_t *res = NULL; if(!pattern || asprintf(&sql, "%s WHERE database_name LIKE '%s'",select,pattern) > 0){ res = ingres_sys_query(conn, sql); if(pattern) free(sql); } return res; } dbi_result_t *dbd_list_tables(dbi_conn_t *conn, const char *db, const char *pattern) { dbi_inst instance; static char *select = "SELECT table_name FROM iitables WHERE table_name NOT LIKE 'ii%'"; char *sql = select; dbi_result_t *res = NULL; dbi_conn_t *newconn; instance = dbi_driver_get_instance(dbi_conn_get_driver(conn)); newconn = dbi_conn_new_r(driver_info.name, instance); if(ingres_connect(newconn, db, NO_AUTOCOMMIT) < 0) _verbose_handler(conn,"dbd_list_tables: can't connect to '%s'\n",db); else{ if(!pattern || asprintf(&sql, "%s AND table_name LIKE '%s'",select,pattern) > 0){ res = ingres_query(newconn, sql); if(pattern) free(sql); } if(res) // remove result set from connection's list ;// dbi_result_disjoin(res); FIXME: this crashes us later for no discernible reason else _verbose_handler(conn,"dbd_list_tables: no result for '%s'??\n",sql); ingres_rollback(newconn, ((ingres_conn_t*)newconn->connection)->currTran); //dbi_conn_close(newconn); // FIXME: until disjoin works, don't close; leave connection around (bad) } return res; } unsigned long long dbd_get_seq_last(dbi_conn_t *conn, const char *sequence) { // This function cannot be used in autocommit mode. // in particular, it cannot tell you anything about the sequence value used // in a previous INSERT(NEXT VALUE FOR ...) statement, because other transactions // may have used the same sequence since then. // Ingres won't allow this function in an unrelated transaction. // To use sequences to identify INSERTed rows, first obtain the NEXT VALUE // using the dbi function (which will be an individual transaction), // then use that sequence value directly in a separate INSERT transaction. long seq = 0; char *sql; dbi_result_t *res; asprintf(&sql, "SELECT CURRENT VALUE FOR %s", sequence); res = ingres_query(conn, sql); free(sql); if(res && dbi_result_next_row(res)) seq = dbi_result_get_int_idx(res,1); else if(AUTOCOMMIT_ON(conn)) _verbose_handler(conn,"dbi_conn_sequence_last() can't work in autocommit mode." " See libdbd-ingres driver docs for a workaround.\n"); if(res) dbi_result_free(res); return seq; return 0; } unsigned long long dbd_get_seq_next(dbi_conn_t *conn, const char *sequence) { long seq = 0; char *sql; dbi_result_t *res; asprintf(&sql, "SELECT NEXT VALUE FOR %s", sequence); res = ingres_query(conn, sql); free(sql); if(res && dbi_result_next_row(res)) seq = dbi_result_get_int_idx(res,1); if(res) dbi_result_free(res); return seq; } /* -------------------- */ libdbi-drivers-0.9.0/drivers/ingres/months.gperf.c000644 001750 001750 00000015076 10437356322 023030 0ustar00markusmarkus000000 000000 /* ANSI-C code produced by gperf version 3.0.1 */ /* Command-line: gperf months.gperf */ /* Computed positions: -k'2-3' */ #if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \ && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \ && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \ && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \ && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \ && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \ && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \ && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \ && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \ && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \ && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \ && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \ && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \ && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \ && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \ && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \ && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \ && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \ && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \ && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \ && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \ && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \ && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126)) /* The character set is not based on ISO-646. */ #error "gperf generated tables don't work with this execution character set. Please report a bug to ." #endif #line 4 "months.gperf" #include "dbd_ingres.h" #line 7 "months.gperf" struct month; #define TOTAL_KEYWORDS 12 #define MIN_WORD_LENGTH 3 #define MAX_WORD_LENGTH 3 #define MIN_HASH_VALUE 3 #define MAX_HASH_VALUE 33 /* maximum key range = 31, duplicates = 0 */ #ifndef GPERF_DOWNCASE #define GPERF_DOWNCASE 1 static unsigned char gperf_downcase[256] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255 }; #endif #ifndef GPERF_CASE_STRCMP #define GPERF_CASE_STRCMP 1 static int gperf_case_strcmp (register const char *s1, register const char *s2) { for (;;) { unsigned char c1 = gperf_downcase[(unsigned char)*s1++]; unsigned char c2 = gperf_downcase[(unsigned char)*s2++]; if (c1 != 0 && c1 == c2) continue; return (int)c1 - (int)c2; } } #endif #ifdef __GNUC__ __inline #else #ifdef __cplusplus inline #endif #endif static unsigned int hash (register const char *str, register unsigned int len) { static unsigned char asso_values[] = { 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 0, 14, 4, 34, 10, 34, 14, 34, 34, 34, 34, 4, 34, 10, 15, 15, 34, 5, 34, 0, 5, 15, 34, 34, 0, 34, 34, 34, 34, 34, 34, 34, 0, 14, 4, 34, 10, 34, 14, 34, 34, 34, 34, 4, 34, 10, 15, 15, 34, 5, 34, 0, 5, 15, 34, 34, 0, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34 }; return len + asso_values[(unsigned char)str[2]] + asso_values[(unsigned char)str[1]]; } #ifdef __GNUC__ __inline #endif struct month * in_word_set (register const char *str, register unsigned int len) { static struct month wordlist[] = { {""}, {""}, {""}, #line 13 "months.gperf" {"may", 4}, {""}, {""}, {""}, #line 18 "months.gperf" {"oct", 9}, #line 11 "months.gperf" {"mar", 2}, {""}, {""}, {""}, #line 15 "months.gperf" {"jul", 6}, #line 9 "months.gperf" {"jan", 0}, {""}, {""}, {""}, #line 20 "months.gperf" {"dec", 11}, #line 14 "months.gperf" {"jun", 5}, {""}, {""}, {""}, #line 16 "months.gperf" {"aug", 7}, #line 12 "months.gperf" {"apr", 3}, {""}, {""}, {""}, #line 10 "months.gperf" {"feb", 1}, #line 17 "months.gperf" {"sep", 8}, {""}, {""}, {""}, {""}, #line 19 "months.gperf" {"nov", 10} }; if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH) { register int key = hash (str, len); if (key <= MAX_HASH_VALUE && key >= 0) { register const char *s = wordlist[key].name; if ((((unsigned char)*str ^ (unsigned char)*s) & ~32) == 0 && !gperf_case_strcmp (str, s)) return &wordlist[key]; } } return 0; } #line 21 "months.gperf" libdbi-drivers-0.9.0/drivers/ingres/dbd_ingres.h000644 001750 001750 00000005201 10437356322 022510 0ustar00markusmarkus000000 000000 /* * libdbi - database independent abstraction layer for C. * Copyright (C) 2001-2002, David Parker and Mark Tobenkin. * http://libdbi.sourceforge.net * * $Id: dbd_ingres.h,v 1.2 2006/05/31 18:13:38 qu1j0t3 Exp $ */ // used by gperf hash, see months.gperf struct month { char *name; int index; }; // Interactive SQL reserved words // list from Ingres(R) 2006 SQL Reference Guide, Appendix A #define INGRES_RESERVED_WORDS { \ "ABORT", \ "ADD", \ "ALL", \ "ALTER", \ "AND", \ "ANY", \ "AS", \ "ASC", \ "ASYMMETRIC", \ "AT", \ "AUTHORIZATION", \ "AVG", \ "BEGIN", \ "BETWEEN", \ "BY", \ "BYREF", \ "CACHE", \ "CALLPROC", \ "CASCADE", \ "CASE", \ "CAST", \ "CHECK", \ "CLOSE", \ "COALESCE", \ "COLLATE", \ "COLUMN", \ "COMMIT", \ "COMMITTED", \ "CONSTRAINT", \ "CONTINUE", \ "COPY", \ "COPY_FROM", \ "COPY_INTO", \ "COUNT", \ "CREATE", \ "CURRENT", \ "CURRENT_USER", \ "CURRVAL", \ "CURSOR", \ "CYCLE", \ "DECLARE", \ "DEFAULT", \ "DEFINE", \ "DELETE", \ "DESCRIBE", \ "DISTINCT", \ "DO", \ "DROP", \ "ELSE", \ "ELSEIF", \ "END", \ "ENDFOR", \ "ENDIF", \ "ENDLOOP", \ "ENDREPEAT", \ "ENDWHILE", \ "ESCAPE", \ "EXCEPT", \ "EXCLUDING", \ "EXECUTE", \ "EXISTS", \ "FETCH", \ "FIRST", \ "FOR", \ "FROM", \ "FULL", \ "GLOBAL", \ "GRANT", \ "GROUP", \ "HAVING", \ "IF", \ "IMMEDIATE", \ "IMPORT", \ "IN", \ "INCREMENT", \ "INDEX", \ "INITIAL_USER", \ "INSERT", \ "INTEGRITY", \ "INTERSECT", \ "INTO", \ "IS", \ "ISOLATION", \ "JOIN", \ "LEAVE", \ "LEVEL", \ "LIKE", \ "LOCAL", \ "MAX", \ "MAXVALUE", \ "MESSAGE", \ "MIN", \ "MINVALUE", \ "MODIFY", \ "MODULE", \ "NATURAL", \ "NEXT", \ "NEXTVAL", \ "NOCACHE", \ "NOCYCLE", \ "NOMAXVALUE", \ "NOMINVALUE", \ "NOORDER", \ "NOT", \ "NULL", \ "NULLIF", \ "OF", \ "ON", \ "ONLY", \ "OPEN", \ "OPTION", \ "OR", \ "ORDER", \ "OUTER", \ "PERMIT", \ "PREPARE", \ "PRESERVE", \ "PRIVILEGES", \ "PROCEDURE", \ "PUBLIC", \ "RAISE", \ "RAWPCT", \ "READ", \ "REFERENCES", \ "REFERENCING", \ "REGISTER", \ "RELOCATE", \ "REMOVE", \ "REPEAT", \ "REPEATABLE", \ "RESTART", \ "RESTRICT", \ "RETURN", \ "REVOKE", \ "ROLLBACK", \ "ROW", \ "ROWS", \ "SAVE", \ "SAVEPOINT", \ "SCHEMA", \ "SELECT", \ "SERIALIZABLE", \ "SESSION", \ "SESSION_USER", \ "SET", \ "SOME", \ "SQL", \ "START", \ "SUBSTRING", \ "SUM", \ "SYMMETRIC", \ "SYSTEM_MAINTAINED", \ "SYSTEM_USER", \ "TABLE", \ "TEMPORARY", \ "THEN", \ "TO", \ "UNCOMMITTED", \ "UNION", \ "UNIQUE", \ "UNTIL", \ "UPDATE", \ "USER", \ "USING", \ "VALUES", \ "VIEW", \ "WHEN", \ "WHERE", \ "WHILE", \ "WITH", \ "WORK", \ "WRITE", \ NULL } libdbi-drivers-0.9.0/drivers/ingres/months.gperf000644 001750 001750 00000000264 10437356322 022600 0ustar00markusmarkus000000 000000 %ignore-case %struct-type %language=ANSI-C %{ #include "dbd_ingres.h" %} struct month; %% jan, 0 feb, 1 mar, 2 apr, 3 may, 4 jun, 5 jul, 6 aug, 7 sep, 8 oct, 9 nov, 10 dec, 11 %% libdbi-drivers-0.9.0/drivers/ingres/dbd_ingres.sgml000644 001750 001750 00000035612 10771604054 023233 0ustar00markusmarkus000000 000000 ]> &proper-name; Driver Notes Details about the libdbi driver providing support for &proper-name; backends Toby Thain
    qu1j0t3@sourceforge.net
    Document revision: $Id: dbd_ingres.sgml,v 1.16 2008/03/24 01:47:24 qu1j0t3 Exp $ $Date: 2008/03/24 01:47:24 $ 0.3 2006-06-08 2006 Toby Thain Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is included in .
    Preface libdbi is a database abstraction layer written in C. It implements a framework that can utilize separate driver libraries for specific database servers. The libdbi-drivers project provides the drivers necessary to talk to the supported database servers. This manual provides information about the &dbd-name; driver, which provides support for &proper-name; databases. The manual is intended for programmers who write applications linked against libdbi and who want their applications to use this database backend. Questions and comments about this driver should be sent to the libdbi-drivers-devel mailing list (see the website). Questions and comments about the libdbi library should be sent to the appropriate libdbi mailing list. This driver is maintained by &author-name;. Introduction Ingres(R) is an advanced relational database management system from Ingres Corporation. Notable features include C2 security certification, clustering, partitioning, transaction journaling, query optimisation, diverse programming bindings and flexible licensing from GPL community through to 24/7 enterprise level support. More information can be found from the &proper-name; website. Installation This chapter describes the prerequisites and the procedures to build and install this driver from source code.
    Prerequisites The following packages must be installed on your system: libdbi This library implements the core database abstraction layer, which provides your application with database backend functionality when paired with this driver. More information about libdbi, including mailing lists, documentation, bug reports, and downloads, is available from the libdbi website. libpq This is the C shared library to enable user programs to communicate with the Ingres(R) Community Edition RDBMS. The current version of the dbd_ingres driver was written and tested with the 32-bit NPTL version II 9.0.4 and 9.2 for Linux/x86, running on Gentoo (see my installation notes).
    Build and install the driver First you have to unpack the libdbi-drivers archive in a suitable directory. Unpacking will create a new subdirectory with the version number, such as libdbi-drivers-0.8.0 $ tar xfvz libdbi-drivers-0.8.0.tar.gz The libdbi-drivers project consists of several drivers that use a common build system. Therefore you must explicitly tell the configuration script that you want to build the &dbd-name; driver (you can list as many drivers as you want to build): $ cd libdbi-drivers-0.8.0 $ ./configure --with-&dbd-name; Run ./configure --help to find out about additional options and other available drivers. Then build the driver with the command: $ make Please note that you may have to invoke gmake, the GNU version of make, on some systems. Then install the driver with the command (you'll need root permissions to do this): $ make install To test the operation of the newly installed driver, use the command: $ make check This command creates and runs a test program that performs a few basic input and output tests. If for some reason you need to re-create the autoconf/automake-related files, try running ./autogen.sh. In some situations, the current stable autoconf/automake/libtool versions (as found in FreeBSD 4.7 and Debian 3.0) do not cooperate well, so it may be necessary to run the older autoconf 2.13. If necessary, edit autogen.sh so that it will catch the older autoconf version on your system.
    Driver options Before you can initiate a connection, you must usually specify options that tell the database driver what to connect to. This driver supports the standard options of username, password and dbname. The latter parameter is in Ingres syntax, [node_id::]dbname[/svr_class] - see Ingres documentation for details. (When running as the Ingres admin user on the same host as the DBMS, only the dbname is normally required.) Sensible defaults will be used for all unspecified options. This driver also offers the following non-standard options, and/or redefines the meaning of the following standard options: ingres_autocommit Set this option to string value "0" to disable Ingres autocommit mode for the connection (it is enabled by default). &proper-name;-specific Peculiarities This chapter lists known peculiarities of the &dbd-name; driver. Wherever possible, nonstandard driver behavior is hidden by libdbi's abstractions, but occasionally special considerations must be taken or extra functionality may be utilized for particular drivers. Ingres environment variables must be set The driver will not be loaded at all by dbi_initialize() if the Ingres environment variables are not set (e.g. by ~/.ingIIbash). If the current user or specified user does not have appropriate Ingres privileges, the connection will fail ("User authorization check failed" or similar). When connecting, the driver uses the values of the dbname, username and password options, if set. Autocommit 'Autocommit' mode is enabled by default for the DBMS connection. In this mode, every query is committed as an individual transaction. With autocommit disabled (see ingres_autocommit connection option), a transaction is begun by the first query statement after connection, commit or rollback. The transaction remains open until the next explicit commit, rollback or disconnection (which implies commit). Commit and rollback cannot be done using an OpenAPI query, but must use separate API functions. To work around this, the Ingres driver makes a specific check for COMMIT and ROLLBACK queries and calls the appropriate API function instead of issuing the query. See Ingres OpenAPI and SQL documentation for more information. Handling of result sets In the Ingres OpenAPI, result sets must be accessed sequentially. Furthermore, Ingres does not provide the row count; this must be determined by fetching rows until no more is available. For this reason, the driver must fetch all result data into memory immediately after a query. Then libdbi functions can be used to get random access to rows as usual. A workaround, for example if your result sets are very large, would be to use SELECT for random access; for example, query once to get a set of key values, then issue SELECTs on individual rows or smaller subsets of rows. If your result set or BLOB data is likely to exhaust memory, and workarounds such as the above are not appropriate, then you will need to use OpenAPI directly to access them sequentially or by segments, instead of using libdbi and this driver. SEQUENCE functions and autocommit dbi_conn_sequence_last() is not usable in Ingres' autocommit mode (the default). To use sequences to identify INSERTed rows, first obtain the NEXT VALUE using dbi_conn_sequence_next() then use that sequence value directly in a separate INSERT transaction. DATE parsing Parsing DATE columns into timestamp values will only work correctly when returned values are in the default (US) date format; i.e. dd-mmm-yyyy [hh:mm:ss] where mmm is a partial month name. The parsing routine will accept any separators and either a numeric or named month, but the D-M-Y ordering is required. If needed, a workaround for date format incompatibility is to format into a string using a SQL function such as date_gmt(date). Version string format dbi_conn_get_engine_version_string() returns a string like II 9.0.4 (int.lnx/104)NPTL (internally this is implemented as SELECT dbmsinfo('_version'). Getting database and table lists dbi_conn_get_table_list() returns matching objects of all types - tables, views, indexes and partitions - in the iitables catalog for the named database (except those beginning with ii, which are reserved for Ingres). These names are space padded fixed width fields. Logging verbosity The driver respects dbd_set_verbosity() level in reporting messages. At verbosity 1, only errors and abnormalities are reported; at 2, more information is shown; at 3, detailed debugging information is shown. Blank handling Blanks are preserved in column values (except that DECIMAL and MONEY columns are converted to strings, and then stripped of trailing blanks). Note that names returned by dbi_conn_get_table_list() and dbi_conn_get_db_list() are padded with blanks to a fixed width. Error messages The Ingres OpenAPI may return multiple error messages for a given query/operation. The dbi_conn_error() returns the error code only for the last error message, but the message text will include all relevant messages. At verbosity level 2, errors directly relating to libdbi function calls are logged. At verbosity 3, all errors are logged including those caused by API calls made internally by the driver. Environment variables II_API_TRACE and II_API_LOG control logging by the API itself. See Chapter 6 of the Ingres OpenAPI User Guide for details. Connection options All Ingres option values are specified as strings (using dbi_conn_set_option()). ingres_blobsegment option This option specifies the size of individual segments returned for BLOB columns (by default this is approx 2000 bytes). If your BLOBs are large, increasing this value reduces the number of API calls required by the Ingres driver. &freedoc-license;
    libdbi-drivers-0.9.0/drivers/ingres/dbd_ingres.pdf000644 001750 001750 00000505475 12117467204 023053 0ustar00markusmarkus000000 000000 %PDF-1.4 1 0 obj << /S /GoTo /D (1.0) >> endobj 4 0 obj (Ingres Driver Notes) endobj 5 0 obj << /S /GoTo /D (2.0) >> endobj 8 0 obj (Table of Contents) endobj 9 0 obj << /S /GoTo /D (3.0) >> endobj 12 0 obj (Preface) endobj 13 0 obj << /S /GoTo /D (4.0) >> endobj 16 0 obj (Chapter 1. Introduction) endobj 17 0 obj << /S /GoTo /D (5.0) >> endobj 20 0 obj (Chapter 2. Installation) endobj 21 0 obj << /S /GoTo /D (5.1.1) >> endobj 24 0 obj (2.1. Prerequisites) endobj 25 0 obj << /S /GoTo /D (5.2.1) >> endobj 28 0 obj (2.2. Build and install the driver) endobj 29 0 obj << /S /GoTo /D (6.0) >> endobj 32 0 obj (Chapter 3. Driver options) endobj 33 0 obj << /S /GoTo /D (7.0) >> endobj 36 0 obj (Chapter 4. Ingresspecific Peculiarities) endobj 37 0 obj << /S /GoTo /D (8.0) >> endobj 40 0 obj (Appendix A. GNU Free Documentation License) endobj 41 0 obj << /S /GoTo /D [42 0 R /Fit ] >> endobj 44 0 obj << /Length 325 /Filter /FlateDecode >> stream xÚ’=S„0†{~EJ(²f7ŸtŽsêhaEçXÀ‘ãÐNnÆo¨WX8Ì„7Ùì³û&A&‡Ì"X~ H(¶}OkBè>Áu‹2H£ “?¢\K ¹#Ãø%ä¦H®îH1R`sVìæ4*ÉŒs@Æ„Åú9}èšÁŸ2NÖ¥›¡=ûaÑOý–_ŠÇ"Àh§#†;2'˸"ZÐŒÙø±l+§¬úi\ä¸÷‹8´U]µ‹®/ꇌDÚÇáÜÖm×ÄšLkPÆãdÀi#ç§éxìcšHWúnÎ]I—NªrCo¾«M B­¢‰\-’£T ¢›X È\ÀU1ósáû²í~¹Ö4ŸBhÌ’gN9ª9ÿcÂW1ÊëS?Í®¶þ»AÔi“q©ŸÛ‡Î‘šÜ?׸¾åÀa¸›?ƒ/î6Š­endstream endobj 42 0 obj << /Type /Page /Contents 44 0 R /Resources 43 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 51 0 R >> endobj 45 0 obj << /D [42 0 R /XYZ 71.731 741.2204 null] >> endobj 46 0 obj << /D [42 0 R /XYZ 71.731 706.3512 null] >> endobj 47 0 obj << /D [42 0 R /XYZ 71.731 706.3512 null] >> endobj 2 0 obj << /D [42 0 R /XYZ 419.1993 688.2669 null] >> endobj 43 0 obj << /Font << /F24 50 0 R >> /ProcSet [ /PDF /Text ] >> endobj 54 0 obj << /Length 807 /Filter /FlateDecode >> stream xÚUÉnÛ0½û+tèA"š‹DJî)›ÓEP4n/mQHm³±%—¢øïKŠ”"/Y#"‡33oHäAý‡<†#ú!€1Œ¼éj½¹^º çQ pŒ¨žœX cÂ@š`ê…}‹É`8Æ‘—‚”êµÉ¬Ý‰¦$‰½IñÓ¿-ç’×AˆYâ_I±åÒŽï*Å둳s•‰¥sÊòj£ìP-¸,E^äÂŽ‹ÈZú•ù·…(çÖ\oÖëʸ@ß!Í?Õ§”gS³ôÀË¢~O>Ç„ôN½aÆ(j“ïtT ýIh¸n¶ÈDi‚;ŽA qÚ¸_UÓÍŠ—ʺIàXó¬EUެéÃmáFE^ü /PÏW˳­5#€¨a“!$CÙ9D£ˆÚÙ¿ ú ±“ë§µƒwóB(½g˰ ¯›|)ê/\ÀU¦øè=~8…vY­ýó…;ô/-«¾š½&õZh "—z¬±Q„,S.W¢6¹³a¢¶ß¹ÌJÕòW•ýN‘€Æþ™K°¨•¹)öFqkËÊb؈BWU!fŽ’Z´èÅ^7eÁeëâ0”æåœ«Ùóš>ÏàzÒµ¡ P”0Â0ÄÈÉ>ë¼Â¾[Óg$ÐTû!üŒf2ts÷Ýî?âØ—a>w$[!fªËß1åe}D4J À(_'Úy Ú¯á1š!ê*ò#@ù\>×T«ÝeR6ò #™›dOfY ØwµZjźšl¹·ÞWw¾;¨ÝX¶ º¯fêÑH&“íš«tÅ›œ}´ÆG¡vT:¥Ý–AdvÖI‘µJ¹çSVŸ½7–U©ÂËÊìâx·ÍÁ ÏåIµáZ§/á\dÓ‡˜½Æ´—ð(°‘ç­r$a›^'“½žåt¹)Ú´Úîí‹C!‘'$(:ùæ„WØw;Ñ1š9Òùz­ïlñÔæBDÖ yƒBëõ…#4Cœx0BÄ"ÀmÓMcööúÖ»û-ãOú>ªä®«V (¤ägôÕž¸K44¿äðÀîíÕ›&ˆ¦ïäÿoSùöendstream endobj 53 0 obj << /Type /Page /Contents 54 0 R /Resources 52 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 51 0 R /Annots [ 59 0 R 63 0 R ] >> endobj 59 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [366.6224 605.9956 481.2157 615.1172] /Subtype /Link /A << /S /GoTo /D (COPYING-FDL) >> >> endobj 63 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [206.3371 580.0927 247.5105 589.2144] /Subtype /Link /A << /S /GoTo /D (COPYING-FDL) >> >> endobj 55 0 obj << /D [53 0 R /XYZ 71.731 741.2204 null] >> endobj 64 0 obj << /D [53 0 R /XYZ 71.731 527.3973 null] >> endobj 52 0 obj << /Font << /F24 50 0 R /F33 58 0 R /F35 62 0 R >> /ProcSet [ /PDF /Text ] >> endobj 68 0 obj << /Length 12736 /Filter /FlateDecode >> stream xÚÜͲWzáy_†Ä€éÊú¯¡%Y 9ŽÐ#Ùš–A2‰Öõ;{í:k×þÞ¨[L¯§X©n‚àùÞõÃaûë‡ÛºÜNÛÿ8¯Ëñx8øåßÿtøð¯Ûú§?­û#çëu9^Öëöo^üÑ/§Ûò¸¯~|ù»Ÿþô_þñxþp<,×Ëýòá§¿6êúØžºî~úË¿üðÓÇûᇟÿïÇõðïŸ>þx¼Ýøí¯ßÿçßÿöåë§/_ÿøø~úïúo? l3×ûr8Ö—ŸiæÇ燾}¢ÓýÃcy\·OûôÚCoèÏ¿\ï?|úëÏ¿|rx=œ–ëi=–ôa9ßîçÉWµÎËzx\éƒé¹wm?Ðu¹§—è¾?¸¯NðÇrx)¾?¸¯¾Æ×u¹Ü×kˆ·§ V'øy9ÜŽÇߟFÜW'øu¹\é×ÞžFÜW'øöv.§økߟFÜW_ãÇííœÏé×Þž&|XàÛÛ9Ó¯½=¸¯Nðíí/—ߟFÜW'øövÖküµïO#ñÓöv×ôkoO>¬NðÓòxÜÒ¯½=¸¯Nðër¾ßÓ¯½=¸¯Nðûò¸Ýï)¾?¸¯¾Æ·_Eœ¯ôkoO>¬Nðíí\é×ÞžFÜW'øöv.‡ôkoO#î«|{;ç5þÚ÷§÷Õ×øe{;§ãâíiÂ‡Õ ¾½ã1ýÚÛÓˆûêßÞÎzJ¿öö4â¾:Á··s8Ç_ûþ4â¾ú¿®ËéqN¿öö4áÃê?-÷ûåœâûÓˆûê¿.§Û5ýÚÛÓˆûê¿/÷í‘ߟFÜW_ãÛßr.·ôkoO>¬Nðííœïé×ÞžFÜW'øövN÷[ŠïO#î«|{;ÇGüµïO#ñûövއôkoO>¬Nðíí¬‡ôkoO#î«|{;‡5ýÚÛÓˆûê¿/·Gú ™ýa¤móµüí7xŽéwÞž&{Xà§åv;¥ßy{q_à×åxíï#m›y{3—süïO£í«/ñí?†Ëñ| JO>®NðíÕ¤¿%ÑFÚ6'òöfŽ×[JïO£í«|{5Û_{R|q_}¯Û«Iÿ>¥=L´oNäÓr}ÜÓ×ÝžFÛW'øuYïô;oO#î«ü¾\ã¯üÛ³¿_|Í×e½Ò/¼=Mô°:Á·÷r]Ó/¼=¸¯Nðí½\ÖGŠïO#î«|{7çcüµïO#ñÓövN§ôkoO>¬NðííOé×ÞžFÜW'øövÖsúµ·§÷Õ ¾½Ãå˜âûÓˆûêkü¼.‡Ç%ýÚÛÓ„«ü´\¶¿}LñýiÄ}u‚_—Ãí–~ííiÄ}u‚ß—ËõíûÓˆûêkü²½·8›áíiÂ‡Õ ¾½sú7(zq_àÛÛ9=Ò¯½=¸¯Nðííœñ×¾?¸¯¾Æ¯ÛÛ9®é×Þž&|XàÛÛY×ôW1íiÄ}u‚ooçpL¿öö4â¾:ÁïËùqŠ¿öýiÄ}õ5~;,û)ýÚÛÓ„«ü´œoçôkoO#î«ü²ý¹¬)¾?¸¯Nðíí\.ñ×¾?¸¯¾ÆïÛÛ9_Ó¯½=Mø°:Á··sº¥_{{q_àÛÛÙ¾¥ߟFÜW'øövÖû9Å÷§÷Õ×øc{;‡Gúµ·§ V'øiÙþÚ—~ííiÄ}u‚_–ûã~ííiÄ}u‚ß—Ó}¿öýiÄ}õ%~:–ûm JO>®Nðíí\çߟFÜW'øöv.§5Å÷§÷Õ ¾½í¿ŒR|q_}¯ÛÛ9Ó¯½=Mø°:Á··“þ*ª=Œ´mNäíÕ¬—ô;oO£í«|{5‡küïO#ñãa¹=Ò?ñýa¢}s"Ÿ–ãýÓûÓhûê¿,·Ûý”âûÓˆûê¿/Çô'ÏÚÃHÛækù´½™KüºÛÓd«|{5—ôgŠõ4â¾:Á·W“þ8J{iÛœÈÛ›9¥?P¬§ÑöÕ×øy{5Çcú·§ V'øöjÖØþþ0Ò¶9‘·7sHÿÑžFÛW'ø}YçøÏ{q_}_Ëõžþ4±ž&|Xà§e½]Ò¯½=¸¯NðËr½^Ó¯½=¸¯Nðíí\âÿNoO#ñëövηôkoO>¬NðííœÒŸ&ÖÓˆûêßÞÎñž~ííiÄ}u‚oog}Ä_ûþ4â¾ú¿mogMšXO>¬NðííÒ=¸¯NðËry¤?M¬§÷Õ ¾ýÑû1þÚ÷§÷Õ×øý°\n鎞&|Xà§åpMšXO#î«|{;—ô@GO#î«|û£çô§‰õ4â¾úloç”èèiÂ‡Õ ¾½cz £§÷Õ ¾½5ý¹=¸¯Nð·?z‹¿öýiÄ}õ%~>–ó#ýib= ø¸:ÁËãžèèiÄ}u‚_–ó-=ÐÑÓˆûê¿-Û!þÚ÷§÷Õ×øº½kúƒozšðau‚ooç’þ4±žFÜW'øövÎ鎞FÜW'øövNÇøkߟFÜW_ãÇííÓ(ÖÓ„«|{;kú;"zq_àÛÛ9¤?S¬§÷Õ ~[îKüµïO#ñÓa9ÝÓ=Mø°:ÁËý–þX±žFÜW'øe9]Ó=¸¯Nðíí¤ÿ¼¼=Œ´m¾–ÏÛ«9§×9zšìau‚o¯æ”^çèiÄ}u‚o¯æ”ÒßžEøýâ„Ý^ËñáûÓHûêkü²½—5ý=O=Mø°:Á·÷’þ–@{iۜȗåøHïrô4Ú¾:ÁoËíÿ_Z{q_}_Ë1þ/µýa¢}s"—Û5ýb=¶¯NðíÕ\Ò»=¸¯NðíÕäâßFÚ6_Ë·í͜ҟ&ÖÓd«|{5Çô.GO#î«|{5kúÓÄzq_àÛË9Üã¯}q_}ßËúHOsô4áÃê?.×{úÓÄzq_à—e½§:zq_à·åzKšXO#ñÇöv®éŽž&|XàÛÛ¹¤:zq_àÛÛ9§?M¬§÷Õ ¾½Ó)þÚ÷§÷Õ—øå°½cúÓÄzðqu‚oogMtô4â¾:Á··sHtô4â¾:ÁoËåq¿öýiÄ}õ5¾–Ã==ÐÑÓ„«ü¸\néOëiÄ}u‚_–Ã5=ÐÑÓˆûêßÞÎåíûÓˆûêkü¸½súÓÄzšðau‚ooçœèèiÄ}u‚ooç”þ4±žFÜW'øövŽküµïO#ñÓövÖÉ–ö¾æi½?¦)ÒíŸø7½õÜ»ôù­BúŸã§Úó¦epTÔ·ÿpÎÛŸD™%½¼ýeþv­³¤í¡·Ï¶.<^?üó—¯ß¥¿ýåo¿|ýüÛ—±ÜvÙþÎðí히ñ;Üþ^bö>¥äÊOÙSrÏŸ³Hɽø@UJp_…”\„÷”\«’Ëp¥ä÷UHÉe¸Rr€û*¤ä2\)9À}RrÞSr5>¬BJ.Õ’ÜW!%—áJÉî«’Ëp¥ä÷UHÉExOÉÕø° )¹ WJp_…”\†+%¸¯BJ.Õ’ÜW!%á=%WãÃ*¤ä2\)9À}Rr®”ྠ)¹ WJp_…”\„÷”\«’Ëp¥ä÷UHÉe¸Rr€ûj’Ëì–’Ú6!%Ñ=%WÛÃ*¤ä2\)9À}µNÉevKÉm›’Ëh¥äÀöUHÉ%øSJ®ÄÇÕ:%—Ù-%´mBJ.£•’ÛW!%—áJÉî«uJ.²•’«iß„”\F+%¶¯BJ.Õ’ÜWË”\Fï)9€ß/BJ.‚{J®¦‡UHÉe¸Rr€û*¤ä2\)9À}Rr®”ྠ)¹ï)¹V!%—áJÉî«’Ëp¥ä÷UHÉe¸Rr€û*¤ä"¼§äj|X…”\†+%¸¯BJ.Õ’ÜW!%—áJÉî«’‹ðž’«ñaRr®”ྠ)¹ WJp_…”\†+%¸¯BJ.Â{J®Æ‡UHÉe¸Rr€û*¤ä2\)9À}Rr®”ྠ)¹ï)¹V!%—áJÉî«’Ëp¥ä÷UHÉe¸Rr€û*¤ä"¼§äj|X…”\†+%¸¯BJ.Õ’ÜW!%—áJÉî«’‹ðž’«ñaRr®”ྠ)¹ WJp_…”\†+%¸¯BJ.ÁŸRr%>®BJ.Õ’ÜW!%—áJÉî«’Ëp¥ä÷UHÉExOÉÕø°Z§ä2»¥ä€¶MHÉe´Rr`û*¤ä2\)9À}µNÉE¶Rr5í›’Ëh¥äÀöUHÉe¸Rr€ûj’Ëì–’Ú6!%Ñ=%WÛÃ*¤ä2\)9À}µNÉevKÉm›’Ëh¥äÀöUHÉExOÉÕø°Z§ä2»¥ä€¶MHÉe´Rr`û*¤ä2\)9À}RrÞSr5>¬BJ.Õ’ÜW!%—áJÉî«’Ëp¥ä÷UHÉExOÉÕø° )¹ WJp_…”\†+%¸¯BJ.Õ’ÜW!%á=%WãÃ*¤ä2\)9À}Rr®”ྠ)¹ WJp_…”\„÷”\«’Ëp¥ä÷UHÉe¸Rr€û*¤ä2\)9À}RrÞSr5>¬BJ.Õ’ÜW!%—áJÉî«’Ëp¥ä÷UHÉ%øSJ®ÄÇUHÉe¸Rr€û*¤ä2\)9À}Rr®”ྠ)¹ï)¹V!%—áJÉî«’Ëp¥ä÷UHÉe¸Rr€û*¤ä"¼§äj|X…”\†+%¸¯BJ.Õ’ÜW!%—áJÉî«’‹ðž’«ñaRr®”ྠ)¹ WJp_­Sr™ÝRr@Û&¤ä"º§äj{X…”\†+%¸¯–)¹ŒÞSr¿_„”\+%´¯BJ.Â{J®Æ‡Õ:%—Ù-%´mBJ.£•’ÛW!%—áJÉî«uJ.²•’«iß„”\F+%¶¯BJ.Õ’ÜWë”\f·”ж )¹ˆî)¹ÚV!%—áJÉî«’Ëp¥ä÷UHÉe¸Rr€û*¤ä"¼§äj|X…”\†+%¸¯BJ.Õ’ÜW!%—áJÉî«’‹ðž’«ñaRr®”ྠ)¹ WJp_…”\†+%¸¯BJ.ÁŸRr%>®BJ.Õ’ÜW!%—áJÉî«’Ëp¥ä÷UHÉExOÉÕø° )¹ WJp_…”\†+%¸¯BJ.Õ’ÜW!%á=%WãÃ*¤ä2\)9À}Rr®”ྠ)¹ WJp_…”\„·§ V'øöv“Ÿ&î ¶oÿlfÖ±;-‡ÿêfÎ~Q¹ÎvÅvç:a·mžÞþRS&ìÚCo먄Ý_þõן_çë¶ïåÛÏ#<Íûgx»½Þ¦ùºuûò¿ý¨Mù õÜ»Ïø"_wZ·‚÷â½À÷§÷Õ Þ{®pྠᾠW¸p_…p_„÷p_«îËp…û÷U÷e¸Â}€û*„û2\á>À}Â}ÞÃ}5>¬B¸/ÃîÜW!Ü—á ÷î«îËp…û÷U÷Ex÷Õø° á¾ W¸p_…p_†+ܸ¯B¸/ÃîÜW!Üá=ÜWãÃ*„û2\á>À}Â}®pྠᾠW¸p_…p_„÷p_«îËp…û÷U÷e¸Â}€ûjîËìîÚ6!ÜÑ=ÜWÛÃ*„û2\á>À}µ÷ev ÷m›îËh…ûÀöU÷%øS¸¯ÄÇÕ:Ü—Ù-Ü´mB¸/£îÛW!Ü—á ÷î«u¸/²î«iß„p_F+ܶ¯B¸/ÃîÜWËp_Fïá>€ß/B¸/‚{¸¯¦‡U÷e¸Â}€û*„û2\á>À}Â}®pྠá¾ïá¾V!Ü—á ÷î«îËp…û÷U÷e¸Â}€û*„û"¼‡ûj|X…p_†+ܸ¯B¸/ÃîÜW!Ü—á ÷î«î‹ðî«ñaÂ}®pྠᾠW¸p_…p_†+ܸ¯B¸/Â{¸¯Æ‡U÷e¸Â}€û*„û2\á>À}Â}®pྠá¾ïá¾V!Ü—á ÷î«îËp…û÷U÷e¸Â}€û*„û"¼‡ûj|X…p_†+ܸ¯B¸/ÃîÜW!Ü—á ÷î«î‹ðî«ñaÂ}®pྠᾠW¸p_…p_†+ܸ¯B¸/ÁŸÂ}%>®B¸/ÃîÜW!Ü—á ÷î«îËp…û÷U÷Ex÷Õø°Z‡û2»…û€¶M÷e´Â}`û*„û2\á>À}µ÷E¶Â}5í›îËh…ûÀöU÷e¸Â}€ûjîËìîÚ6!ÜÑ=ÜWÛÃ*„û2\á>À}µ÷ev ÷m›îËh…ûÀöU÷Ex÷Õø°Z‡û2»…û€¶M÷e´Â}`û*„û2\á>À}Â}ÞÃ}5>¬B¸/ÃîÜW!Ü—á ÷î«îËp…û÷U÷Ex÷Õø° á¾ W¸p_…p_†+ܸ¯B¸/ÃîÜW!Üá=ÜWãÃ*„û2\á>À}Â}®pྠᾠW¸p_…p_„÷p_«îËp…û÷U÷e¸Â}€û*„û2\á>À}Â}ÞÃ}5>¬B¸/ÃîÜW!Ü—á ÷î«îËp…û÷U÷%øS¸¯ÄÇU÷e¸Â}€û*„û2\á>À}Â}®pྠá¾ïá¾V!Ü—á ÷î«îËp…û÷U÷e¸Â}€û*„û"¼‡ûj|X…p_†+ܸ¯B¸/ÃîÜW!Ü—á ÷î«î‹ðî«ñaÂ}®pྠᾠW¸p_­Ã}™ÝÂ}@Û&„û"º‡ûj{X…p_†+ܸ¯–ᾌÞÃ}¿_„p_+Ü´¯B¸/Â{¸¯Æ‡Õ:Ü—Ù-Ü´mB¸/£îÛW!Ü—á ÷î«u¸/²î«iß„p_F+ܶ¯B¸/ÃîÜWëp_f·pж ᾈîá¾ÚV!Ü—á ÷î«îËp…û÷U÷e¸Â}€û*„û"¼‡ûj|X…p_†+ܸ¯B¸/ÃîÜW!Ü—á ÷î«î‹ðî«ñaÂ}®pྠᾠW¸p_…p_†+ܸ¯B¸/ÁŸÂ}%>®B¸/ÃîÜW!Ü—á ÷î«îËp…û÷U÷Ex÷Õø° á¾ W¸p_…p_†+ܸ¯B¸/ÃîÜW!Üá=ÜWãÃ*„û2\á>À}Â}®pྠᾠW¸p_…p_„÷p_«î+êsi¸>P ÷½+äÍÃ}Åúö»A§óú=ÜwyùÔööëùÛ? 8®Ëcû‰þÉNOŸ¬=¦§¾§ûÖ=Þ÷çß?ýþéÿýíóŸ¿~úcÌ ·ÿë~û­ü'b¬÷ÝOçY¼¯gŽÊÙ3GÏŸ²È½ø¬Bæ(Õ9ÜW!s”áÊî«uæ(³[æhÛ„ÌQD÷ÌQm«9ÊpeŽ÷Õ:s”Ù-s´mBæ(£•9ÛW!s”àO™£WëÌQf·Ìж ™£ŒVæl_…ÌQ†+s¸¯Ö™£ÈV樦}2G­Ìؾ ™£ Wæp_-3G½gŽ~¿™£šV!s”áÊî«9ÊpeŽ÷UÈe¸2G€û*dŽ"¼gŽj|X…ÌQ†+s¸¯Bæ(Õ9ÜW!s”áÊî«9Šðž9ªña2G®Ìྠ™£ Wæp_…ÌQ†+s¸¯Bæ(Â{æ¨Æ‡UÈe¸2G€û*dŽ2\™#À}2G®Ìྠ™£V!s”áÊî«9ÊpeŽ÷UÈe¸2G€û*dŽ"¼gŽj|X…ÌQ†+s¸¯Bæ(Õ9ÜW!s”áÊî«9Šðž9ªña2G®Ìྠ™£ Wæp_…ÌQ†+s¸¯Bæ(Â{æ¨Æ‡UÈe¸2G€û*dŽ2\™#À}2G®Ìྠ™£Ê•ø¸ ™£ Wæp_…ÌQ†+s¸¯Bæ(Õ9ÜW!sá=sTãÃj9Êì–9Ú6!s”ÑÊí«9ÊpeŽ÷Õ:sÙÊÕ´oBæ(£•9ÛW!s”áÊî«uæ(³[æhÛ„ÌQD÷ÌQm«9ÊpeŽ÷Õ:s”Ù-s´mBæ(£•9ÛW!sá=sTãÃj9Êì–9Ú6!s”ÑÊí«9ÊpeŽ÷UÈExÏÕø° ™£ Wæp_…ÌQ†+s¸¯Bæ(Õ9ÜW!sá=sTãÃ*dŽ2\™#À}2G®Ìྠ™£ Wæp_…ÌQ„÷ÌQ«9ÊpeŽ÷UÈe¸2G€û*dŽ2\™#À}2GÞ3G5>¬Bæ(Õ9ÜW!s”áÊî«9ÊpeŽ÷UÈExÏÕø° ™£ Wæp_…ÌQ†+s¸¯Bæ(Õ9ÜW!s”àO™£W!s”áÊî«9ÊpeŽ÷UÈe¸2G€û*dŽ"¼gŽj|X…ÌQ†+s¸¯Bæ(Õ9ÜW!s”áÊî«9Šðž9ªña2G®Ìྠ™£ Wæp_…ÌQ†+s¸¯Bæ(Â{æ¨Æ‡UÈe¸2G€û*dŽ2\™#À}µÎevËm›9Šèž9ªía2G®Ìà¾ZfŽ2zÏü~2G¬Ìо ™£VëÌQf·Ìж ™£ŒVæl_…ÌQ†+s¸¯Ö™£ÈV樦}2G­Ìؾ ™£ Wæp_­3G™Ý2G@Û&dŽ"ºgŽj{X…ÌQ†+s¸¯Bæ(Õ9ÜW!s”áÊî«9Šðž9ªña2G®Ìྠ™£ Wæp_…ÌQ†+s¸¯Bæ(Â{æ¨Æ‡UÈe¸2G€û*dŽ2\™#À}2G®Ìྠ™£Ê•ø¸ ™£ Wæp_…ÌQ†+s¸¯Bæ(Õ9ÜW!sá=sTãÃ*dŽ2\™#À}2G®Ìྠ™£ Wæp_…ÌQ„÷ÌQ«9ÊpeŽ÷UÈe¸2G€û*dŽ2\™#À}2GÞ3G5>¬Bæ¨Èô¤™#ø@-sô®&4Ïè9s´ÿ>~9:<Þî´N9jO}Ï÷ÌÑßýíó¯ùþ/þ²ÿ‹Ï_þøúó¯¿~ÿ7_ÿíÓ÷ñ—ß?<^~øÏëå‡O¿—ìí{|ûQ¡§O3‘®·Ëä›~º2/ÿ|ú•ùóŸPqeþâóTWæ€û*\™g¸®Ì÷U¸2Ïp]™î«peáýʼƇU¸2Ïp]™î«pežáº2ÜWáÊ<Ãue¸¯Â•y„÷+óVáÊ<Ãue¸¯Â•y†ëÊp_…+ó ו9ྠWæÞ¯Ìk|X…+ó ו9ྠWæ®+sÀ}®Ì3\Wæ€û*\™Gx¿2¯ña®Ì3\Wæ€û*\™g¸®Ì÷U¸2Ïp]™î«peáýʼƇU¸2Ïp]™î«pežáº2ÜWáÊ<Ãue¸¯Â•y„÷+óVáÊ<Ãue¸¯Â•y†ëÊp_…+ó ו9ྠWæÞ¯Ìk|X…+ó ו9ྠWæ®+sÀ}®Ì3\Wæ€û*\™'øÓ•y‰«pežáº2ÜWáÊ<Ãue¸¯Â•y†ëÊp_…+óïWæ5>¬ÖWæ™Ý®Ì¶M¸2Ïh]™ƒí«pežáº2ÜWë+óÈÖ•yMû&\™g´®ÌÁöU¸2Ïp]™î«õ•yf·+s m®Ì#º_™×ö° Wæ®+sÀ}µ¾2Ïìve´m•yFëÊl_…+óïWæ5>¬ÖWæ™Ý®Ì¶M¸2Ïh]™ƒí«pežáº2ÜWáÊ<Âû•y«pežáº2ÜWáÊ<Ãue¸¯Â•y†ëÊp_…+óïWæ5>¬Â•y†ëÊp_…+ó ו9ྠWæ®+sÀ}®Ì#¼_™×ø° Wæ®+sÀ}®Ì3\Wæ€û*\™g¸®Ì÷U¸2ð~e^ãÃ*\™g¸®Ì÷U¸2Ïp]™î«pežáº2ÜWáÊ<Âû•y«pežáº2ÜWáÊ<Ãue¸¯Â•y†ëÊp_…+óº2/ñq®Ì3\Wæ€û*\™g¸®Ì÷U¸2Ïp]™î«peáýʼƇU¸2Ïp]™î«pežáº2ÜWáÊ<Ãue¸¯Â•y„÷+óVáÊ<Ãue¸¯Â•y†ëÊp_…+ó ו9ྠWæÞ¯Ìk|X…+ó ו9ྠWæ®+sÀ}µ¾2Ïìve´m•yD÷+óÚVáÊ<Ãue¸¯–Wæ½_™ü~®Ì3XWæ@û*\™Gx¿2¯ñaµ¾2Ïìve´m•yFëÊl_…+ó ו9à¾Z_™G¶®ÌkÚ7áÊ<£ue¶¯Â•y†ëÊp_­¯Ì3»]™m›peÑýʼ¶‡U¸2Ïp]™î«pežáº2ÜWáÊ<Ãue¸¯Â•y„÷+óVáÊ<Ãue¸¯Â•y†ëÊp_…+ó ו9ྠWæÞ¯Ìk|X…+ó ו9ྠWæ®+sÀ}®Ì3\Wæ€û*\™'øÓ•y‰«pežáº2ÜWáÊ<Ãue¸¯Â•y†ëÊp_…+óïWæ5>¬Â•y†ëÊp_…+ó ו9ྠWæ®+sÀ}®Ì#¼_™×ø° Wæ®+sÀ}®Ì3\Wæ€û*\™g¸®Ì÷U¸2ð~e^ãÃ*\™§Ïé•9| veþî˜{~e^| íoœ®Ûߌ½ý$ÚöêÓyûÓ|õÔm]no?ú|yœ¶_XÝïýƒÝŸ>Øþ”zûX§ýÂü~ÿüq=¼ÝÞîÆ¿ýï~û¯Ÿûò‡ðõ퇿ÇÓ‡gmü&o—íï(^“o ëÛo{ÔXϽûÈËø®Ëùr¸¿ü@/ðýiÄ}u‚ß—Çy½¤øþ4â¾ú¿¬Ëö º5ÄÛÓ„«|{;Çcúµ·§÷Õ ¾½õ”~ííiÄ}u‚ooçpŽ¿öýiÄ}õ5~]—Óãœ~ííiÂ‡Õ ~Zî÷Ë9Å÷§÷Õ ~]N·kúµ·§÷Õ ~_î×küµïO#ñí¿ºO—[úµ·§ V'øövÎ÷ôkoO#î«|{;§û-Å÷§÷Õ ¾½ã#þÚ÷§÷Õ×ø}{;ÇCúµ·§ V'øövÖCúµ·§÷Õ ¾½Ãš~ííiÄ}u‚ß—Ûã˜ÚßFÚ6_Ëu9ÞéwÞž&{Xà§åv;¥ßy{q_àÛ/r¯±ýýa¤ms"ooærŽ¿óýi´}õõ]éa{5çË)Ãõ4àãêß^ÍéšÚßFÚ6'òöfŽ×[JïO£í«|{5Û_{R|q_}¯Û«Iÿ>¥=L´oNäí>îéënO£í«üº¬÷Gú·§÷Õ ~_®ñWþíY„ß/Nú^{-ƒ•UzX­³j!Þ²j„ûjU ñ–U#ÜWë¬Zˆ·¬á¾ZgÕ2\Y5À‡Õ:«â-«F¸¯ÖYµoY5Â}µÎª…x˪î«uV-ÕU|X­³j!Þ²j„ûjU ñ–U#ÜWë¬Zˆ·¬á¾ZgÕ2\Y5À‡Õ:«â-«F¸¯ÖYµoY5Â}µÎª…x˪î«uV-ÕU|X­³j!Þ²j„ûjU ñ–U#ÜWë¬Zˆ·¬á¾ZgÕ2\Y5À‡Õ:«â-«F¸¯ÖYµoY5Â}µÎª…x˪î«uV-ÕU|X­³j!Þ²j„ûjU ñ–U#ÜWë¬Zˆ·¬á¾ZgÕ2\Y5À‡Õ:«â-«F¸¯ÖYµoY5Â}µÎª…x˪î«uV-Â{V­ÆÇÕ:«â-«F¸¯ÖYµoY5Â}µÎª…x˪î«uV-ÕU|X-³j¡½gÕˆ¶Í:«Ò-«F¶¯ÖYµoY5Â}µÌªev˪í›uV-¤[Vl_­³j!Þ²j„ûj™U í=«F´mÖYµŒVV ìaµÎª…x˪î«eV-´÷¬ѶYgÕBºeÕÈöÕ:«–áʪ>¬–YµÐÞ³jDÛfU é–U#ÛWë¬Zˆ·¬á¾ZgÕ2\Y5À‡Õ:«â-«F¸¯ÖYµoY5Â}µÎª…x˪î«uV-ÕU|X­³j!Þ²j„ûjU ñ–U#ÜWë¬Zˆ·¬á¾ZgÕ2\Y5À‡Õ:«â-«F¸¯ÖYµoY5Â}µÎª…x˪î«uV-ÕU|X­³j!Þ²j„ûjU ñ–U#ÜWë¬Zˆ·¬á¾ZgÕ2\Y5À‡Õ:«â-«F¸¯ÖYµoY5Â}µÎª…x˪î«uV-Â{V­ÆÇÕ:«â-«F¸¯ÖYµoY5Â}µÎª…x˪î«uV-ÕU|X­³j!Þ²j„ûjU ñ–U#ÜWë¬Zˆ·¬á¾ZgÕ2\Y5À‡Õ:«â-«F¸¯ÖYµoY5Â}µÎª…x˪î«uV-ÕU|X­³j!Þ²j„ûjU ñ–U#ÜWˬZhïY5¢m³Îªe´²j`«uV-Ä[Vp_­²j!ý=«FðûÅ:«Â-«F´¯ÖYµ WV ðaµÌª…öžU#Ú6ë¬ZH·¬Ù¾ZgÕB¼eÕ÷Õ2«–Ù-«´oÖYµnY5²}µÎª…x˪î«eV-´÷¬ѶYgÕ2ZY5°‡Õ:«â-«F¸¯ÖYµoY5Â}µÎª…x˪î«uV-ÕU|X­³j!Þ²j„ûjU ñ–U#ÜWë¬Zˆ·¬á¾ZgÕ2\Y5À‡Õ:«â-«F¸¯ÖYµoY5Â}µÎª…x˪î«uV-Â{V­ÆÇÕ:«â-«F¸¯ÖYµoY5Â}µÎª…x˪î«uV-ÕU|X­³j!Þ²j„ûjU ñ–U#ÜWë¬Zˆ·¬á¾ZgÕ2\Y5À‡Õ:«â-«F¸¯ÖYµoY5Â}µÎª…x˪î«uV-ÕU|X­³ju ,ʪÑÚ³jï>ÐyšU«>ÐU;×YµÛ}9®ç:«Öúö±ö¬Ú?ù×ß?®÷>ýñãÿñé—Ïÿûp8þòýýùãñðç_þöëçŸÿüõó§±³¶ý¥}û¥äåÃ3?~µí¼³ÎZïU”½WñüçPô*^| ªWQâãjÝ«ÈìÖ«Ú6¡W‘ÑêU€í«Ð«Èpõ*÷ÕºWÙêUÔ´oB¯"£Õ«ÛW¡W‘áêUî«e¯"£÷^Àï¡WÁ½WQÓÃ*ô*2\½ À}z®^ྠ½Š W¯p_…^E„÷^E«Ð«Èpõ*÷UèUd¸z€û*ô*2\½ À}zÞ{5>¬B¯"ÃÕ«ÜW¡W‘áêUî«Ð«Èpõ*÷UèUDxïUÔø° ½Š W¯p_…^E†«W¸¯B¯"ÃÕ«ÜW¡Wá½WQãÃ*ô*2\½ À}z®^ྠ½Š W¯p_…^E„÷^E«Ð«Èpõ*÷UèUd¸z€û*ô*2\½ À}zÞ{5>¬B¯"ÃÕ«ÜW¡W‘áêUî«Ð«Èpõ*÷UèUDxïUÔø° ½Š W¯p_…^E†«W¸¯B¯"ÃÕ«ÜW¡W‘àO½ŠW¡W‘áêUî«Ð«Èpõ*÷UèUd¸z€û*ô*"¼÷*j|X­{™Ýz@Û&ô*2Z½ °}z®^à¾Z÷*"[½ŠšöMèUd´z`û*ô*2\½ À}µîUdvëUm›Ð«ˆèÞ«¨íaz®^à¾Z÷*2»õ*€¶MèUd´z`û*ô*"¼÷*j|X­{™Ýz@Û&ô*2Z½ °}z®^ྠ½ŠjV¡W‘áêUî«Ð«Èpõ*÷UèUd¸z€û*ô*"¼÷*j|X…^E†«W¸¯B¯"ÃÕ«ÜW¡W‘áêUî«Ð«ˆðÞ«¨ñaz®^ྠ½Š W¯p_…^E†«W¸¯B¯"Â{¯¢Æ‡UèUd¸z€û*ô*2\½ À}z®^ྠ½ŠjV¡W‘áêUî«Ð«Èpõ*÷UèUd¸z€û*ô*ü©WQâã*ô*2\½ À}z®^ྠ½Š W¯p_…^E„÷^E«Ð«Èpõ*÷UèUd¸z€û*ô*2\½ À}zÞ{5>¬B¯"ÃÕ«ÜW¡W‘áêUî«Ð«Èpõ*÷UèUDxïUÔø° ½Š W¯p_…^E†«W¸¯Ö½ŠÌn½  mzÝ{µ=¬B¯"ÃÕ«ÜWË^EFï½ €ß/B¯"ƒÕ«ÚW¡Wá½WQãÃjÝ«ÈìÖ«Ú6¡W‘ÑêU€í«Ð«Èpõ*÷ÕºWÙêUÔ´oB¯"£Õ«ÛW¡W‘áêUî«u¯"³[¯hÛ„^ED÷^Em«Ð«Èpõ*÷UèUd¸z€û*ô*2\½ À}zÞ{5>¬B¯"ÃÕ«ÜW¡W‘áêUî«Ð«Èpõ*÷UèUDxïUÔø° ½Š W¯p_…^E†«W¸¯B¯"ÃÕ«ÜW¡W‘àO½ŠW¡W‘áêUî«Ð«Èpõ*÷UèUd¸z€û*ô*"¼÷*j|X…^E†«W¸¯B¯"ÃÕ«ÜW¡W‘áêUî«Ð«ˆðÞ«¨ñaz®^ྠ½Š W¯p_…^E†«W¸¯B¯"Â{¯¢Æ‡UèU”Q…¬W¨õ*ž?ÐeÞ«(>ÐЫ¸Ô½Šíï·_Î>ê^E{èícý×½WñOÿó}ÿÿø=[ñéû¿û‡ß~ùÛ¿úòõ篟ûòýõ?>ÿòéËŸÆãÖÃÛ%èíÃógðºnÿ7z»N¾ß§;ãòO£ß?ÿ‰wÆ/>Pug ¸¯Âq†ëÎp_…;ã ×1ྠwÆÞïŒk|X…;ã ×1ྠwÆ®;cÀ}îŒ3\wÆ€û*ÜGx¿3®ñaîŒ3\wÆ€û*Üg¸îŒ÷U¸3ÎpÝî«pgáýθƇU¸3ÎpÝî«pgœáº3ÜWáÎ8Ãug ¸¯Âq„÷;ãVáÎ8Ãug ¸¯Âq†ëÎp_…;ã ×1ྠwÆÞïŒk|X…;ã ×1ྠwÆ®;cÀ}îŒ3\wÆ€û*ÜGx¿3®ñaîŒ3\wÆ€û*Üg¸îŒ÷U¸3ÎpÝî«pgœàOwÆ%>®Âq†ëÎp_…;ã ×1ྠwÆ®;cÀ}îŒ#¼ß×ø°Zßgv»3Ú6áÎ8£ug ¶¯Âq†ëÎp_­ïŒ#[wÆ5í›pgœÑº3ÛWáÎ8Ãug ¸¯ÖwÆ™ÝM¸3Žè~g\ÛÃ*Üg¸îŒ÷ÕúÎ8³Û1ж wÆ­;c°}îŒ#¼ß×ø°Zßgv»3Ú6áÎ8£ug ¶¯Âq†ëÎp_…;ãïwÆ5>¬Âq†ëÎp_…;ã ×1ྠwÆ®;cÀ}îŒ#¼ß×ø° wÆ®;cÀ}îŒ3\wÆ€û*Üg¸îŒ÷U¸3Žð~g\ãÃ*Üg¸îŒ÷U¸3ÎpÝî«pgœáº3ÜWáÎ8Âûq«pgœáº3ÜWáÎ8Ãug ¸¯Âq†ëÎp_…;ãïwÆ5>¬Âq†ëÎp_…;ã ×1ྠwÆ®;cÀ}îŒüéθÄÇU¸3ÎpÝî«pgœáº3ÜWáÎ8Ãug ¸¯Âq„÷;ãVáÎ8Ãug ¸¯Âq†ëÎp_…;ã ×1ྠwÆÞïŒk|X…;ã ×1ྠwÆ®;cÀ}îŒ3\wÆ€û*ÜGx¿3®ñaîŒ3\wÆ€û*Üg¸îŒ÷ÕúÎ8³Û1ж wÆÝïŒk{X…;ã ×1à¾ZÞgô~g ðûE¸3Î`Ýí«pgáýθƇÕúÎ8³Û1ж wÆ­;c°}îŒ3\wÆ€ûj}gÙº3®iß„;ãŒÖ1ؾ wÆ®;cÀ}µ¾3Îìvg ´mÂqD÷;ãÚVáÎ8Ãug ¸¯Âq†ëÎp_…;ã ×1ྠwÆÞïŒk|X…;ã ×1ྠwÆ®;cÀ}îŒ3\wÆ€û*ÜGx¿3®ñaîŒ3\wÆ€û*Üg¸îŒ÷U¸3ÎpÝî«pgœàOwÆ%>®Âq†ëÎp_…;ã ×1ྠwÆ®;cÀ}îŒ#¼ß×ø° wÆ®;cÀ}îŒ3\wÆ€û*Üg¸îŒ÷U¸3Žð~g\ãÃ*Üg¸îŒ÷U¸3ÎpÝî«pgœáº3ÜWáÎ8Âûq«pg\ÜÁ¦wÆðÚñóºÍôtg|YÏËz»•wÆçûr_¯OŸëòî-=¶_uß~Q÷ý©·õùóçé{ZkâÿÑ…øendstream endobj 67 0 obj << /Type /Page /Contents 68 0 R /Resources 66 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 51 0 R /Annots [ 70 0 R 74 0 R 75 0 R 76 0 R 77 0 R 78 0 R 79 0 R 80 0 R 81 0 R 82 0 R 83 0 R 84 0 R 85 0 R 86 0 R 87 0 R 88 0 R ] >> endobj 70 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [70.7348 666.8844 104.6274 675.8606] /Subtype /Link /A << /S /GoTo /D (24) >> >> endobj 74 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [529.3351 666.8844 538.9788 675.8606] /Subtype /Link /A << /S /GoTo /D (24) >> >> endobj 75 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [70.7348 651.5419 136.7566 660.5181] /Subtype /Link /A << /S /GoTo /D (INTRO) >> >> endobj 76 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [532.005 651.5419 538.9788 660.5181] /Subtype /Link /A << /S /GoTo /D (INTRO) >> >> endobj 77 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [70.7348 636.1994 131.4065 645.1757] /Subtype /Link /A << /S /GoTo /D (INSTALL) >> >> endobj 78 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [532.005 636.1994 538.9788 645.1757] /Subtype /Link /A << /S /GoTo /D (INSTALL) >> >> endobj 79 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [94.6451 618.8196 165.5384 629.7236] /Subtype /Link /A << /S /GoTo /D (INSTALL-PREREQ) >> >> endobj 80 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [532.005 618.8196 538.9788 629.7236] /Subtype /Link /A << /S /GoTo /D (INSTALL-PREREQ) >> >> endobj 81 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [94.6451 607.9255 220.4919 616.7721] /Subtype /Link /A << /S /GoTo /D (INSTALL-BUILD) >> >> endobj 82 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [532.005 607.9255 538.9788 616.7721] /Subtype /Link /A << /S /GoTo /D (INSTALL-BUILD) >> >> endobj 83 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [70.7348 590.6602 144.1986 601.5393] /Subtype /Link /A << /S /GoTo /D (OPTIONS) >> >> endobj 84 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [532.005 590.6602 538.9788 601.5393] /Subtype /Link /A << /S /GoTo /D (OPTIONS) >> >> endobj 85 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [70.7348 575.3177 198.8028 586.1969] /Subtype /Link /A << /S /GoTo /D (SPECIFIC) >> >> endobj 86 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [532.005 575.3177 538.9788 586.1969] /Subtype /Link /A << /S /GoTo /D (SPECIFIC) >> >> endobj 87 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [70.7348 561.8782 231.092 570.8544] /Subtype /Link /A << /S /GoTo /D (COPYING-FDL) >> >> endobj 88 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [532.005 561.8782 538.9788 570.8544] /Subtype /Link /A << /S /GoTo /D (COPYING-FDL) >> >> endobj 69 0 obj << /D [67 0 R /XYZ 71.731 741.2204 null] >> endobj 6 0 obj << /D [67 0 R /XYZ 244.3315 691.2808 null] >> endobj 66 0 obj << /Font << /F24 50 0 R /F38 73 0 R /F33 58 0 R /F35 62 0 R >> /ProcSet [ /PDF /Text ] >> endobj 98 0 obj << /Length 713 /Filter /FlateDecode >> stream xÚUM›0½çWp©›¯ÀžªVÝj{j%nÝ=p‚wÁPÛl´ýõ5Ø&„@«®"äØÏÌ›÷Ɔ?h wäBÏ÷AhÍX'¹õuµIÇžÁXNVvÝ(8xiâÇ–;wò)ÛíïýÐòGIdeG*N¥U++Úß>¢;OÙ·ý}X©—ÆÒ•´–ë§ò@†5ÉËœ8®ûD ¢»ÛïÕ²ÇÛžøØ2&ö { i•9ájDj(‘@9âX/æ\0TÒRµP£7ÌÔß3#B`½NôøÙSãƒÐëMWãSqåÈPƒ?²ÏvË^Ô²¨>W : pBßK#Ž8{Ajò['Çq‡zV228|u`d›%~†Á:øPu²ÃyÀ/Ö@sÌ´®ÑdžÊ‚º×±øFÝ—f›<¬íXûŒ ] 9\¼’Ò Õ*j½Kq9GìM·zDõËbŸá}×µLàòŸõ0¹JU¾RiV 5ˆö¨ÞJšP ½A1¡¼íÅ"BOÌXPûƒ–^EŠj+ŒÆ² üaîWû¡Wç¿Â™0HÉ—¦N“w™ÅIJº™(8Wí¥KL3u]MŠ?7r¢/CèäD6"”‹¹Üô-—®‡£ˆ^*HØV Cxo8gW8ÕErÍ|Ž •-ÌFë=æ³(SŠEÛÌ{~N3áÛíÊ«¶¯µ‹|ßp)Úõ.sK|™Ö†WymГ9fÊ;t,ÇxáöŒs>p¶¢‚w·øði±½£føV êf{ûߺ­0.ÅÂÚŽ‘é"‡¹)ܪ ²¿²z¹dóÈψ=×ÙgN"Ÿ€iV!ó– Õíݯ>|Ü(ï˜ÕîK6=»ú1 /qºú0kwf3¾ÊA4{f£x‡$=LžÆ»àunzäWþx¥Czendstream endobj 97 0 obj << /Type /Page /Contents 98 0 R /Resources 96 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 51 0 R >> endobj 99 0 obj << /D [97 0 R /XYZ 71.731 741.2204 null] >> endobj 89 0 obj << /D [97 0 R /XYZ 71.731 706.3512 null] >> endobj 10 0 obj << /D [97 0 R /XYZ 146.3693 691.2808 null] >> endobj 100 0 obj << /D [97 0 R /XYZ 71.731 674.2377 null] >> endobj 101 0 obj << /D [97 0 R /XYZ 71.731 674.2377 null] >> endobj 102 0 obj << /D [97 0 R /XYZ 330.1288 648.5929 null] >> endobj 103 0 obj << /D [97 0 R /XYZ 71.731 628.5033 null] >> endobj 104 0 obj << /D [97 0 R /XYZ 71.731 586.725 null] >> endobj 105 0 obj << /D [97 0 R /XYZ 487.8259 573.8731 null] >> endobj 106 0 obj << /D [97 0 R /XYZ 71.731 540.8321 null] >> endobj 107 0 obj << /D [97 0 R /XYZ 186.1707 530.0375 null] >> endobj 96 0 obj << /Font << /F24 50 0 R /F33 58 0 R /F35 62 0 R >> /ProcSet [ /PDF /Text ] >> endobj 110 0 obj << /Length 553 /Filter /FlateDecode >> stream xÚmTÛŽ›0}ÏWðRclƒ¹ô±QwµU[­ª¼íV+œà 0µÍ¦û÷°!i7Š”ñŒgÎÏ`ø‘ '(O@¤QŠÓ ê688ÁÕý†x—4Ëe$åÆí–%9* šÛkOûM|GÓ€b”±‚ûãB••àUà"Ø×Oá®áƒ:ÚÒ¼ rò¡·:¢8TõXY©úèçþK|—$A‰Ê ˆ [Z\Æf˜‡þ¤…yÆ ÿ€?0 ‡“ÚX;|Œc9ߣJuñ gX?ÂážPŒ3ÔØ®½DKã$ャ_#Ê@­Dí,Z´|J·N¯¹ån„Ó:Þó“èDo§ô§„ E%#霰y3VtÎó¨•?¹lÜy§ô ôL€œå»üÖ÷ãê,ûªkµ£NQZÚ7§UB[ùŒ1­fÌÞÚŽˆ†úxÃÀÁmr˜M72·š÷†»¾Ì¿Ô¨¡ˆß£ÐžT VvÒ\3Ör*ãkDX(ôR,hÊIó®g8ȾeíA½´'b ý#×J´²½Y#/Õ¼üúïܬÀtc¿ÖÅ6Z§Æ+ÊIšÆ¹;Aÿ„´\2Ö5}ßw3Ð)‹V2؇„æ3Ù7¥ÅÒ¢£Ò¿Ô­Z&ë°´TË;/°x?gq0ÒŠwc~>Ÿ£Œ…èjܧž3Û|Þ¯;ë71-PA²òæV{—í•Ï¼Ò »ÚB–$c’¬HÓ“Éÿlëâß_`m8Jendstream endobj 109 0 obj << /Type /Page /Contents 110 0 R /Resources 108 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 51 0 R >> endobj 90 0 obj << /D [109 0 R /XYZ 71.731 706.3512 null] >> endobj 14 0 obj << /D [109 0 R /XYZ 298.5799 691.2808 null] >> endobj 111 0 obj << /D [109 0 R /XYZ 71.731 670.2196 null] >> endobj 112 0 obj << /D [109 0 R /XYZ 71.731 670.2196 null] >> endobj 113 0 obj << /D [109 0 R /XYZ 71.731 615.5519 null] >> endobj 114 0 obj << /D [109 0 R /XYZ 235.8044 604.7573 null] >> endobj 108 0 obj << /Font << /F24 50 0 R /F33 58 0 R /F35 62 0 R >> /ProcSet [ /PDF /Text ] >> endobj 117 0 obj << /Length 1585 /Filter /FlateDecode >> stream xÚ­XIÛ6¾Ï¯ð¡Ѥ$ÊRŽI“`Š$¤Î©) J¢m&Z‰šçÐßÞGqÑ2r›"Ååmß÷Þ“É Ã¬víx„ù>WYyƒWGXz{CÌ–0ŠOI“…U;”Ä~´òÆ—¼ÜßlßøáÊÇ(¢1]íVT”À®Ç«}þÇúÕ‰%o6ž¿‹×>ÒÏ»ª•¬(˜uµùsÿÛöM¬”D îÁ+ÏOઈöWìO¢…s¯3wLrÞfH¹Y“'®ç†7ü['Z!í«òg›êŒç]ãN×ú™n|¼îD‘Ï ­±½Å*”7bãÓõÆеÕëÐÔ¥µu×dF`Vçi[Áid‡|BCclHÁýaÐë#bœt?±cÙKQšøÆKFÒ¡.ŠZiõ(ª£±–e_ÙÑÚZv­4Öò‰uÜ AéŸÐßXri%/_(-z¹;'T+\ˆ4O…Z¹y½w 1P aŒìï–på£0Á»)ææO‡Á]À#;ãèÆ‚Ÿò"ƒÜ)~@׆5cty.xÉ+9PV7f”3ÉRÖšK[Ù°¬­¾Ž] è!^ßêùãId'‡/…‰‘[¯Îdçs!26Üó(äi&Ð8šø(¡$ìÍH!ˆ‚×ÜbòÐU½2¬òb5à• ¹hl<‡û¯"—Ò5Ò ïõ¢:ÔM9Ò“¥u''!ê·vcVt¹C[ÉDá&…he{»dO^gr/àvL?s´áçºQ‡§TÌ5¸«¢f¹]´V1uþA­ƒ,-øœ’.ȶÚ?Å‘¡JÓU•c§ð:ÆŠ¥lâ’0“.£Nª2¨Å¬CÕ™ èܨBÅ4kkéÈÚî ‰×Þë»Áç>„qBÌ&®}Rm‹…†‘*oÑ„Ná$yÌÀÂ) Ê/Ÿ1ö]cÓ¬ªÞý,õcx`ù¯tj­Ìëž{ðvlûX‚KÔÁB¢†u• ÌÕàLfTP­‰^gæl Kpì¢ß>R`Ò=,ºëÆš£é(J*ϽX;6 ÿAŒgùu`/QÉ!úÿ m!TâZšç©ìà÷þ q>vö›.m…¬Ž“8K2 PuÂÖóN¼8/‚^'&qd ï*öm¡ué¨Ie¹î,ë곚Ϳ k€Qó¯íã ¦ñK°9Jl»a¿5ø2O‡Æb©‘xžƒåAÅŸ’}å®ÐŽr4T×¾ù½JaLô§ö(êF$%£Í>E6lʸ/¸þ(‚"«Ú[w{Ãè¢Lïù“’m±õä4xØžªm w+õW5\Ô9ò ±EÑq0mªm ÚRß캵o?|Ò­†-sð¢OÙ½ÊF‘9m·´ui®Ñ‰·U{ÐÕNP YúSÅlñF{tó>NÕTDL {‡¾/ŒÍ?siîÿ™yÿT¦¯endstream endobj 116 0 obj << /Type /Page /Contents 117 0 R /Resources 115 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 51 0 R >> endobj 91 0 obj << /D [116 0 R /XYZ 71.731 706.3512 null] >> endobj 18 0 obj << /D [116 0 R /XYZ 287.5478 691.2808 null] >> endobj 118 0 obj << /D [116 0 R /XYZ 71.731 670.2196 null] >> endobj 92 0 obj << /D [116 0 R /XYZ 71.731 659.3875 null] >> endobj 22 0 obj << /D [116 0 R /XYZ 214.3071 616.29 null] >> endobj 119 0 obj << /D [116 0 R /XYZ 71.731 604.1188 null] >> endobj 120 0 obj << /D [116 0 R /XYZ 71.731 592.574 null] >> endobj 121 0 obj << /D [116 0 R /XYZ 71.731 577.6301 null] >> endobj 122 0 obj << /D [116 0 R /XYZ 71.731 566.7359 null] >> endobj 123 0 obj << /D [116 0 R /XYZ 91.6563 548.9027 null] >> endobj 124 0 obj << /D [116 0 R /XYZ 354.1795 522.9999 null] >> endobj 125 0 obj << /D [116 0 R /XYZ 71.731 510.8804 null] >> endobj 126 0 obj << /D [116 0 R /XYZ 71.731 497.929 null] >> endobj 127 0 obj << /D [116 0 R /XYZ 91.6563 482.153 null] >> endobj 128 0 obj << /D [116 0 R /XYZ 71.731 464.1207 null] >> endobj 129 0 obj << /D [116 0 R /XYZ 263.491 438.3174 null] >> endobj 93 0 obj << /D [116 0 R /XYZ 71.731 431.1793 null] >> endobj 26 0 obj << /D [116 0 R /XYZ 321.4372 388.0818 null] >> endobj 130 0 obj << /D [116 0 R /XYZ 71.731 379.259 null] >> endobj 131 0 obj << /D [116 0 R /XYZ 204.8308 353.5712 null] >> endobj 135 0 obj << /D [116 0 R /XYZ 71.731 342.169 null] >> endobj 136 0 obj << /D [116 0 R /XYZ 71.731 342.169 null] >> endobj 137 0 obj << /D [116 0 R /XYZ 81.4147 331.9523 null] >> endobj 141 0 obj << /D [116 0 R /XYZ 71.731 320.8962 null] >> endobj 142 0 obj << /D [116 0 R /XYZ 473.2014 309.0382 null] >> endobj 143 0 obj << /D [116 0 R /XYZ 71.731 283.9673 null] >> endobj 144 0 obj << /D [116 0 R /XYZ 71.731 283.9673 null] >> endobj 145 0 obj << /D [116 0 R /XYZ 81.4147 274.4678 null] >> endobj 146 0 obj << /D [116 0 R /XYZ 71.731 263.4441 null] >> endobj 147 0 obj << /D [116 0 R /XYZ 71.731 263.4441 null] >> endobj 148 0 obj << /D [116 0 R /XYZ 81.4147 252.8489 null] >> endobj 149 0 obj << /D [116 0 R /XYZ 71.731 241.7928 null] >> endobj 150 0 obj << /D [116 0 R /XYZ 90.8293 229.9348 null] >> endobj 151 0 obj << /D [116 0 R /XYZ 71.731 222.7967 null] >> endobj 152 0 obj << /D [116 0 R /XYZ 71.731 201.9399 null] >> endobj 153 0 obj << /D [116 0 R /XYZ 71.731 201.9399 null] >> endobj 154 0 obj << /D [116 0 R /XYZ 81.4147 190.3832 null] >> endobj 155 0 obj << /D [116 0 R /XYZ 71.731 189.3221 null] >> endobj 156 0 obj << /D [116 0 R /XYZ 71.731 169.3968 null] >> endobj 160 0 obj << /D [116 0 R /XYZ 279.598 158.8016 null] >> endobj 161 0 obj << /D [116 0 R /XYZ 71.731 48.8169 null] >> endobj 115 0 obj << /Font << /F24 50 0 R /F33 58 0 R /F47 134 0 R /F49 140 0 R /F35 62 0 R /F38 73 0 R /F51 159 0 R >> /ProcSet [ /PDF /Text ] >> endobj 164 0 obj << /Length 819 /Filter /FlateDecode >> stream xÚ­U=oÛ0Ýý+4¨D4)Šú蘦)Ò¡K½5h™¶„H¢!R5üï{IÛrœ CáÁ<ñxwïÝã‘~$È Ê)ü¥% Nƒª[à`[ßĹÄÎ'¾tº_-–”%*³$ VÛ M3T&ÌÄJQó`µù~­ù^‹!ІÃÙÿ§^iÞ¶\7²þ¬~,¾­NÉÍQY@Äw+:yݨ‰^Ôä*ÏÊ Ñ¢`SI«Zô¶ŽÆÖa ] »Ø M”°ðoDXè+?4º¾r«d×ñ~cgÌðQŽŸ#‚C°ÂíRj»Ú‹¡k”ÜÊ…“.©ôáÁÈÃËò1̓á¬Ì Ä A)Ê Ç'çR^¸”(+hžÆ¡ã/Pk†Ï@§3‚bw"NT’”X†¢‡¾ ¡ôr (lיּ½Úï…áïÐg,{2®èMqxg7F%nSü¹¨jQ½|˜ hÇvWƒà@Œ5N_‡Ñw•_s·änàÇÇÏrØÊ¡›ŸÚZú¬±æª©<ûQ_¥”£>}4ٲȒˆ(³,5ÈHiî%d’ ÙO©…#®ìÙ9a(Å$u´=™ÞæE¸($¬¡d'ì hP“ `}ŒS5œöa5 |r-kîsí|Ô²’ýviÐ%Eă€éàCˆuÃ]')ÂfMpñæÆu³—B%Í40cïÔÚƒ±DÛÞyµ¸b܉ޛ"]ëÖÂë¥Jqèäyï¤×Þ+&e»Ü7kÁ+CBB}Û¶73Œ}oÄJ{=ahž!‚3æT0‰æM½`^/Ø %É&9›3è.ÿ!‡¦uÍ­¸®ê¼P‚óœ_DYJ‹]?³îaL T¬|÷Õ¿ðyýè3 jÁ„ž"ŒôÍGýF¾ì‡+endstream endobj 163 0 obj << /Type /Page /Contents 164 0 R /Resources 162 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 176 0 R >> endobj 165 0 obj << /D [163 0 R /XYZ 71.731 706.3512 null] >> endobj 166 0 obj << /D [163 0 R /XYZ 81.4147 674.7696 null] >> endobj 167 0 obj << /D [163 0 R /XYZ 71.731 663.7458 null] >> endobj 168 0 obj << /D [163 0 R /XYZ 71.731 639.7361 null] >> endobj 169 0 obj << /D [163 0 R /XYZ 71.731 639.7361 null] >> endobj 170 0 obj << /D [163 0 R /XYZ 81.4147 630.2366 null] >> endobj 171 0 obj << /D [163 0 R /XYZ 71.731 619.2128 null] >> endobj 172 0 obj << /D [163 0 R /XYZ 71.731 605.1657 null] >> endobj 173 0 obj << /D [163 0 R /XYZ 71.731 590.2217 null] >> endobj 174 0 obj << /D [163 0 R /XYZ 469.0454 580.7223 null] >> endobj 175 0 obj << /D [163 0 R /XYZ 467.7628 557.4097 null] >> endobj 162 0 obj << /Font << /F35 62 0 R /F33 58 0 R /F47 134 0 R /F49 140 0 R /F24 50 0 R /F51 159 0 R >> /ProcSet [ /PDF /Text ] >> endobj 179 0 obj << /Length 884 /Filter /FlateDecode >> stream xÚ…VKoã6¾çW{²˜áC¤ÄÓí-ÐS ì!´EÇ$Ò¥¤ù÷J¤ly•.|¨Îã›ofL2 ?’ 9A”â<Û778{Ñ7$ªäB ʉ€Ã‚tÃYdIE¶¹4ò°½¹ûFóŒb$xɳí!¹´J\fÛêiõÛQ:Ý®7´(W ϯ­yKßÜ©3Îúõóö¯»oŒeI¾ÀÎ6T‚EÁKúàZ —8^}¸~|Ù+;¾k:£º(WQê¬Õû`ÿöê^Óûn|ë}¯êúc<ø“Þ›C<¤È†CwTñB§ë:}‹î*Õ©òéÔš5å«·5á«!Køö~¾îf±…¼C¦„"ÉI>dÚ94êlÆnÓ÷§“k;Œï”­T[-$á#Ìy‘•³È̤,‘À¡ÚÁwïukU£ê‘3„Y)¢âí‚©xBXT8)ïßı`‰#N%ŠîRX•…(¢Nµû$(F°HFµ ·ˆE­º.ÁuR-˜˜Ž Y ô§}mõ@ÃlÃA s1/‹ÿ°úw)o†‘”ŒÇ ž¬«ô‹©îïŸÇ°Ÿîü[û²¯ç…/Ç<×7±ŒZÏiàö}£!ŒPÔñ4E”éN™ÚG~`Ž¿uTj{k}Íq͘ËÔI)Q.ИúØ{ªjN ‘Möšy¡DÃÛÑ¥öúÉÙׇ¿o“ÔwAú3¬KD1ËÉB&b¦ÂZ×6çÎnõ?½iu…2~zÔÖ›]ºVÖâíëÔQï&5úNO¹WgÔ¼(t…,Øœ)*]ìí0Q~`Lõ¼!ÑÔø0\‡åÿ÷»ª½›ú„Ý^ƒ{puí‚ì}ª¶uv³8b@r—(øè«Õ׆­Î÷¿t;¹\˜o1€û$£*%efàâ‹ê;·wMc†yóûvZGqÉpÓˆ ¶´±(0ómvýœ¶[‘ÃJ#EXsg‹Ãr›q všà œ´B°: õ©pcnÓ¨ÉÊ/ 8Œ–4+|×N½©º_œ»•„¦_ð—ù"©ŒW‹/‡Å†c a,]ÍŒ©‚çMyé^JMÛà'’h÷çìBÊù¸¸è¥Ðnè“æ%$&ä⟎¨²¹Ð‹r‰åP 'içùµ·éÿË‚¿ÿXˆ\endstream endobj 178 0 obj << /Type /Page /Contents 179 0 R /Resources 177 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 176 0 R >> endobj 94 0 obj << /D [178 0 R /XYZ 71.731 706.3512 null] >> endobj 30 0 obj << /D [178 0 R /XYZ 318.5354 691.2808 null] >> endobj 180 0 obj << /D [178 0 R /XYZ 71.731 670.2196 null] >> endobj 181 0 obj << /D [178 0 R /XYZ 260.332 648.5929 null] >> endobj 182 0 obj << /D [178 0 R /XYZ 308.3519 648.5929 null] >> endobj 183 0 obj << /D [178 0 R /XYZ 370.7577 648.5929 null] >> endobj 184 0 obj << /D [178 0 R /XYZ 102.7245 635.6415 null] >> endobj 185 0 obj << /D [178 0 R /XYZ 280.9344 622.69 null] >> endobj 186 0 obj << /D [178 0 R /XYZ 71.731 602.6004 null] >> endobj 187 0 obj << /D [178 0 R /XYZ 71.731 576.6976 null] >> endobj 188 0 obj << /D [178 0 R /XYZ 71.731 561.7536 null] >> endobj 189 0 obj << /D [178 0 R /XYZ 71.731 548.8022 null] >> endobj 190 0 obj << /D [178 0 R /XYZ 91.6563 533.0263 null] >> endobj 191 0 obj << /D [178 0 R /XYZ 161.9618 533.0263 null] >> endobj 177 0 obj << /Font << /F24 50 0 R /F33 58 0 R /F47 134 0 R /F35 62 0 R >> /ProcSet [ /PDF /Text ] >> endobj 194 0 obj << /Length 2100 /Filter /FlateDecode >> stream xÚ­YÝÛ¸Ï_aÜKlÀVô-÷”Ý:­ÛMrwë´zE@KÜ5±úð‰Rr{ýÛ;9)Ó´‚ÀEÎ÷üf†,|ø,²ÀË"ø‰/ ýxQÔ¯üÅ#|úó«@m‰ÓÔ “ …Ç×MeÞ6ÓÅÆ$rsxõæ]/BßK“°Q<ù\vLÿ² ’%PO’¥'?üãD;j~’ä[ÎÙ±¢kùÚ´ ïIS’®t’׎ôDV¡¿üÂZµ‚:XYÒFXAè„Þ6 âQïã3*z,ìµK!GÞw¤è°VRõ¡WÚáð‘T•¢1ºTÊŒpŒ•´##¹V¼GQ•©ÈÓ*_)£¢ÜT¨õ;°—¯C3ÊA*Ö+^5y¶) =«Ø´t)ù€tϤëøt.+r‡™—oyxo8䌅}»¶©i£tù"H@ p×UE9íñW»ƒÎåI¾õòbÓ‘2¡oýÌN§ù¯N¯,†œ 2È3ƒâ˜]VàCR¥IM|eøÓëqõ•U†áL­ª%%U!IÔ7‚»!¶Æ¼‹³EìÓX°’ÐKàïŒ!è>³’ˆïýê'>üùšç^’f¹:Ææ©öÿx‰tt¦–ðÒø ¡Þ£ ˆMpäqp‘:õÀeI„Úýç°ß ?9tJc/I²­Ú,W˜°Ÿ«W ]§U8zãZ úbÚR¶¨®ÖR¡Äèbe‰ó¹kÏ`œÞaγ ViùH„t£}²Ìóƒ ´ÍÐÐ1mçQô Rž°j2õŸ´¼dèOmÇþ ÓÉâD‹'û(-˜Y€Õ ÒZÚ!ÊMÊò(Ûh`åj×3#»b ÉgÛd$Uƒ ö/"ôÁ&y¦Ã½!5u„BzP¹0ÖB1 0°„¯PŠ/ ·¡Ú5Ã¥©—g) u&œm»ò›ÄÚ³Y 0!iTžDiî~>¥HqêíзE[×ì*ú‰Dþö;" AñÄ]BÊד˜¯ˆ·%µË(mz”ÝdÔP”C¥ÒKW1ºyo_Û`¦7¸™¶k,ƒS8*n¿ úQ7,£Ð½†aî*¤Á–¤TÙ\Xª¡Î6œ(©\¹#à”õ' èN©?ã†UD6sJȘzQcÐÉÞè3±‚cî¨ÈÛÆYªNÌEF£Èxe.r¡Žm¨£Ä¯¡±¨Ý$´ã½Â|èGÃ<Œl3æ‡~¬§S}!ºiœ]›²«k«êHŠ'º_HßÑš0ì Ú3ÂØÐôˆ ZFõMfu®X!;…D¢ì)¤ZÛâØB‚oçVþzb…ŠVjE¢QÇn Å9X¤¹è*ʶÁ®ŽCœàyW\ƒ¼ýio&Gš,]ýêÔ“x"rAC¨kž&ƒí&G߬r0‰ªb"×Ûî ;ˆv@µD¯_èJ\Õ¥Ví/·Øg›Õýtûñýûýafç_DÚ~¼»»YEÉò­x¹ýÛd'í4½¿€Æm^ë.ƒ #!¬ðž’Ò.ˆŒóA»›…Yj—Í'¿ÞS‡!-—kéï¾Ãà)‘–F¡íT·Í`±&æmÀ0‰ìÚõ _iP1E£=T?~¥®E‰ïeÁ÷«j½ë5Mí‘ƒË Ñ¨Œ¸¾¢Ð•)†å±žSð^#Z÷J¹p\~7tÀ²¶^;ÒಅI%‰Î$îäÈíF/@Àa[œcñŒ3ÖF‘á·¤€Ë5kF¡Åú³Üù@ûâ$= «Š—oˆ­ðØ´Š°ŒXaj“j¢E/'T@O®¿ºŒÇP2à@ —a¥›ƒ‚¥Ã(£³š­tMŽ‹ãeIz"WYÓ·ò©¦ ø³Z­kZŠLçu8€% ¾©ƒF6ŽïÙ5Ã^y? W5>Êׂ¨=Òä‘À×R>¡TÉÅ­lkÅs &½Ñ¡¦áÙØ(ø†ÎÅÙ¨¼µ1Z¢óz†²,¨[ÔîcŸÛ¡{)ô¸hwdâ2!ÈAŵÉ}¨ÊÙMG;+>÷»»Ýía&œ¶N¶§ ʬ/Ķ)fÌq¾%³y‘M–#Aôy>ìLµ­™àÝÒ{”ZMÛ£zx«! ±&òá8Ùärä>RqÖŒý·Üió¾¹ûx£IæÑ0VLÚ/¸ÐŒÒê'¢ñQ¥ÙÔyè²dÇ"G±}"÷(±ÐÎÍk L5úÂG`„‹;Šø}’Ve-Y}ß\u´’Mí¨–y±Éæ²÷…YϳžÁáh£ýÓdZwšš\׫×Ëúýîgá—O»·»YÏ7ã@¾5¼yc )ß­Ì›ÇBoQXèõ.¼Eúg鈂~®ï_¸M " ãë[86/ÉÃ8Ó¡ŸÌ*þÚ=Nòà:]©Lñ1˜ µÑŒKѹ8é?”ÔŠyh ÜTpí?Üï~Y¥‚pÙYÚX³¶§;nÇž°yôa÷O…Ç_¢g¾û´3ÇÇå¨Dih\fÚnhèïÿƒ¦¼ÕVéOD ¤QzY&v† §Z»Rõ%®áÇ0¡óNÀùqîåAê¼µÙ¨-cìYCû$Š<ß"MI(”̹é¿9øýÄendstream endobj 193 0 obj << /Type /Page /Contents 194 0 R /Resources 192 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 176 0 R >> endobj 195 0 obj << /D [193 0 R /XYZ 71.731 741.2204 null] >> endobj 95 0 obj << /D [193 0 R /XYZ 71.731 706.3512 null] >> endobj 34 0 obj << /D [193 0 R /XYZ 451.1405 691.2808 null] >> endobj 196 0 obj << /D [193 0 R /XYZ 71.731 669.8994 null] >> endobj 197 0 obj << /D [193 0 R /XYZ 71.731 633.4846 null] >> endobj 198 0 obj << /D [193 0 R /XYZ 71.731 618.5407 null] >> endobj 199 0 obj << /D [193 0 R /XYZ 71.731 605.5892 null] >> endobj 200 0 obj << /D [193 0 R /XYZ 91.6563 589.8133 null] >> endobj 201 0 obj << /D [193 0 R /XYZ 244.2726 589.8133 null] >> endobj 202 0 obj << /D [193 0 R /XYZ 104.1096 576.8619 null] >> endobj 203 0 obj << /D [193 0 R /XYZ 71.731 557.1459 null] >> endobj 204 0 obj << /D [193 0 R /XYZ 294.6433 545.9777 null] >> endobj 205 0 obj << /D [193 0 R /XYZ 331.9035 545.9777 null] >> endobj 206 0 obj << /D [193 0 R /XYZ 394.3094 545.9777 null] >> endobj 207 0 obj << /D [193 0 R /XYZ 71.731 533.8582 null] >> endobj 208 0 obj << /D [193 0 R /XYZ 71.731 522.9641 null] >> endobj 209 0 obj << /D [193 0 R /XYZ 91.6563 505.1309 null] >> endobj 210 0 obj << /D [193 0 R /XYZ 71.731 487.0986 null] >> endobj 211 0 obj << /D [193 0 R /XYZ 217.991 474.2467 null] >> endobj 212 0 obj << /D [193 0 R /XYZ 71.731 402.3514 null] >> endobj 213 0 obj << /D [193 0 R /XYZ 71.731 379.4373 null] >> endobj 214 0 obj << /D [193 0 R /XYZ 71.731 366.4859 null] >> endobj 215 0 obj << /D [193 0 R /XYZ 91.6563 350.71 null] >> endobj 216 0 obj << /D [193 0 R /XYZ 71.731 306.7748 null] >> endobj 217 0 obj << /D [193 0 R /XYZ 71.731 262.9392 null] >> endobj 218 0 obj << /D [193 0 R /XYZ 71.731 212.065 null] >> endobj 219 0 obj << /D [193 0 R /XYZ 71.731 199.4871 null] >> endobj 220 0 obj << /D [193 0 R /XYZ 91.6563 183.3376 null] >> endobj 221 0 obj << /D [193 0 R /XYZ 91.6563 183.3376 null] >> endobj 222 0 obj << /D [193 0 R /XYZ 342.7925 170.3862 null] >> endobj 192 0 obj << /Font << /F24 50 0 R /F33 58 0 R /F47 134 0 R /F35 62 0 R >> /ProcSet [ /PDF /Text ] >> endobj 225 0 obj << /Length 2190 /Filter /FlateDecode >> stream xÚ­YYÛ¶~ϯð[m`̈ÚÕ>M&Ó`.&Koœ maháØ¼ÕVŠšÄýõ=-¦‡NŒ(‰:<<Ë÷Cã•ÿñ*Â(òàâc于¿Ê«WÎê¯Þ½ÂjÊVÍÙN'½Ù½zý³¬”„n¸Ú=­¼£$JB壨‰V»â·õÝ1m9a›­8kÉëC}`/Z“nÛµ$§¿;Ž›ËWŸ6±³&y_Ò”QNI·ùc÷ŸW÷;£LàE(‰ÝðºÆf–Ego¢³ÚY˜„È‹ã`PùíÆwÖ·Œñzw/µjSÖÑú°ÔEÅÈ‚ئ‰‹üLáLß-¯£}PG«íTâ¹Ò FazãºBëO¬•šƒÎ–mäMÙWu'ohÍ9â´"O«VÞ>o\TöDMüJËRŽšº<©g ·ìO-—1’sóòHj9b„÷¬&…]pʈVE)rT ò$Hû’ ›ƒu¶ØEI€ýa¯¿;óå3üÅjzÊÕ‡O «Rþ“‹Ÿ¿þÙV1˜/ô…ùâùF²Šb[UÕöÿ6ÛÐqÖ¿?VÕ]÷‡üvfzì:(öÃH} ;…=œ/á†(vWÍù6Q1 =G«AµMLÀqš*³WMÍrX§QI´ÓÆj§^gMÏi=è´‚h„µõd|þLóœ´\k@ʃ¡)o˜ÖªV.$|ÄfªÖ}EUéÛ°QÏb¢ýg×Y÷|áí·Û÷Û_õ÷Ó›ÑFa䯞2RhøxR‹RâÆ!éÞýoÀ dšìBm׎~AÚ{îË¡ßTâ€~3Shô3³ƒdtŸ7u½?¾'õR`ÿ,·³—;¦º`& èC_§«­î¢OKú§+[ÞG GüáA"J‚äˡЕõ·×Øñ…B>í-Jm]ð^€ø3è„Õi©ñ–u|škÕ–¤"0¯¸T؃øpºŸïïïvRÏ"« rŸ±ÜÚ’?\²Ÿ!xgžã Àq’y ½#œKBè¦YÚ‘ÈÀÃ’h[w¼»xž‹Ðþåânx%ìÔ¤³¨´Þ …¯…šB]b[¨AŠåGc›&û?PªzÕ(ÄK5róS«Yt;1Z§pö™Áµ_õ=­ "àý›øC– >€"#qp ÑuÆS®¶Ÿ¬¤HJ­,†€ F†Ì!Êæ°hC6™‡Œ°´ÜØHdüØè×ÙðÀ 6fý fÕÛƒRÊâ6ß9‰¦þ]ëPܺœa¤#ìy0õ„sdR€Â`žÒ¢&˜‘Ù»ÉΗÕRצ¹¡þ¢Ðkˆ"úÛtѯ´ÐeƒxGÊ¢S©‰aSPÌ3ó±9Œ™¤ö,k:ÁöüóÃ!í½—KÀ©ÄËe¯™%´6UPÁ¨y¥¸qD;$‘©¡tö dY±ï ‡Ÿõ–¯¥°ã£È‰tè–d\¶œ—³Œ´ Ñ<Ù¥Ò)/ßr›©‡GøfYoÆfŘtcì!¸Þ¢ôÉjAץ잖‘)4"…*u ãÞèRm¬È%ç›r@3Kwld©"¼]¹ó”–&[‰¬ø&‘õ}ÉׂôM™Öªé8‚ÊËM™1dtô‚Á9 ¼›j’Ñuéöt¸ÈîÌÞ*ÙNÿíýÝÃûÛǬ¿ÿøáþWKãgtê=¢ @S+èrVÖ<½¾6\mz=1½mµÍXœA8çgƒI&P÷¡Ñ5ø¸› æÍûÇìdmµ\$šLþ—”¬²k±ÊÖKhü¢E56[­È¾»Ô¼{ƒbãAMŒ5÷Iz ëuâø@T€O³Ä¹2Ç¡ ‰ãù¾½ ¬O%^N3k„u?Qä(Ç[Rß~z7Uz’#êa_rÚ–ê[¢ö,^è=Ã]¬* xœÊËaBJÒ_=a§×MKØUH>ÝY‹/t ¥2ÅŒ Šaý+á°5΂jVšˆŒÌ›‚, â¼h*ÓŽŸ}ªìpµWsÔS‰:|ymrÙk5LYʈ¦C_5¿D|D±Ð …Z5SMù° ÓÃ'P!9WçMI3p‹­ñÎAù%0B)z0§ WxZ“žÙÿŒ¦çÒæ{Öµ´0â¨ìX¹æißM`O*2„þ\å*- cÏ›Âì´ŒãÇÁU¼Å!Š#”JàãÇwqAˆÜ8Ö•;$gM9Z~䞥AŒ=)ïHù¤Üý™¨×³“ëаšëáõõ©éUv ]Ψ!e¯ !!0’vFÐÝ‘ÉÍrEŸ“eP÷U¦Fà6ÖÐçé€Q媅°.pˆ­ýŠQŒ ¯ýœ8™sþk¢8g‹w”$Ö/þhYï,è]eendstream endobj 224 0 obj << /Type /Page /Contents 225 0 R /Resources 223 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 176 0 R >> endobj 226 0 obj << /D [224 0 R /XYZ 71.731 741.2204 null] >> endobj 227 0 obj << /D [224 0 R /XYZ 71.731 706.3512 null] >> endobj 228 0 obj << /D [224 0 R /XYZ 71.731 694.2317 null] >> endobj 229 0 obj << /D [224 0 R /XYZ 91.6563 678.4558 null] >> endobj 230 0 obj << /D [224 0 R /XYZ 179.0874 665.5043 null] >> endobj 231 0 obj << /D [224 0 R /XYZ 326.7633 665.5043 null] >> endobj 232 0 obj << /D [224 0 R /XYZ 91.6563 626.65 null] >> endobj 233 0 obj << /D [224 0 R /XYZ 71.731 615.3067 null] >> endobj 234 0 obj << /D [224 0 R /XYZ 71.731 601.5791 null] >> endobj 235 0 obj << /D [224 0 R /XYZ 91.6563 585.8032 null] >> endobj 236 0 obj << /D [224 0 R /XYZ 91.6563 585.8032 null] >> endobj 237 0 obj << /D [224 0 R /XYZ 367.411 585.8032 null] >> endobj 238 0 obj << /D [224 0 R /XYZ 226.9768 572.8518 null] >> endobj 239 0 obj << /D [224 0 R /XYZ 71.731 560.7323 null] >> endobj 240 0 obj << /D [224 0 R /XYZ 71.731 547.7809 null] >> endobj 241 0 obj << /D [224 0 R /XYZ 91.6563 532.005 null] >> endobj 242 0 obj << /D [224 0 R /XYZ 91.6563 532.005 null] >> endobj 243 0 obj << /D [224 0 R /XYZ 116.5626 519.0535 null] >> endobj 244 0 obj << /D [224 0 R /XYZ 405.5466 519.0535 null] >> endobj 245 0 obj << /D [224 0 R /XYZ 71.731 493.9826 null] >> endobj 246 0 obj << /D [224 0 R /XYZ 71.731 481.0312 null] >> endobj 247 0 obj << /D [224 0 R /XYZ 91.6563 465.2553 null] >> endobj 248 0 obj << /D [224 0 R /XYZ 170.1014 465.2553 null] >> endobj 249 0 obj << /D [224 0 R /XYZ 71.731 440.1844 null] >> endobj 250 0 obj << /D [224 0 R /XYZ 71.731 427.2329 null] >> endobj 251 0 obj << /D [224 0 R /XYZ 91.6563 411.457 null] >> endobj 252 0 obj << /D [224 0 R /XYZ 354.5179 398.5056 null] >> endobj 253 0 obj << /D [224 0 R /XYZ 91.6563 385.5542 null] >> endobj 254 0 obj << /D [224 0 R /XYZ 71.731 373.4347 null] >> endobj 255 0 obj << /D [224 0 R /XYZ 71.731 360.4833 null] >> endobj 256 0 obj << /D [224 0 R /XYZ 91.6563 344.7073 null] >> endobj 257 0 obj << /D [224 0 R /XYZ 451.9055 344.7073 null] >> endobj 258 0 obj << /D [224 0 R /XYZ 71.731 298.7149 null] >> endobj 259 0 obj << /D [224 0 R /XYZ 183.9792 287.9203 null] >> endobj 260 0 obj << /D [224 0 R /XYZ 267.9043 287.9203 null] >> endobj 261 0 obj << /D [224 0 R /XYZ 71.731 262.8494 null] >> endobj 262 0 obj << /D [224 0 R /XYZ 71.731 249.898 null] >> endobj 263 0 obj << /D [224 0 R /XYZ 91.6563 234.122 null] >> endobj 264 0 obj << /D [224 0 R /XYZ 253.2684 234.122 null] >> endobj 265 0 obj << /D [224 0 R /XYZ 310.2838 234.122 null] >> endobj 266 0 obj << /D [224 0 R /XYZ 71.731 222.0026 null] >> endobj 267 0 obj << /D [224 0 R /XYZ 71.731 222.0026 null] >> endobj 268 0 obj << /D [224 0 R /XYZ 71.731 209.0511 null] >> endobj 269 0 obj << /D [224 0 R /XYZ 91.6563 193.2752 null] >> endobj 223 0 obj << /Font << /F35 62 0 R /F33 58 0 R /F47 134 0 R >> /ProcSet [ /PDF /Text ] >> endobj 272 0 obj << /Length 2200 /Filter /FlateDecode >> stream xÚÅY[oã¸~Ÿ_aø¥6k$ß½}Jf’EŠÌtÐx[Ý>Ðm³‘D”Æë¿‡â!EJŒg (D2Eò|çö*Åð—Œ6I´YÀe™Dóy¼¥Å‡xt‚G?HpÊr½Žæ«d ?Og«Å&ÚmçëÑÌò°ÿðñi¾Íãh½Ú®Fû£Yj½ƒYÛx;ÚgÿšÜW-3öÛt6ßl'÷‘¾þüõ}ó$(ÕwŸyÚ´¬IÍx©‡^XJKI§ÿÞÿåãÓb1ÚE»5lVŠG³ù[¯ÚEþ>M’dB…Ô¯®âI%wúî éYßÎã8¶Â¶ l½TÂZ±˜Dëd»k%~âÕ4‰'WÁNçZ¿ýk¼Š?Á¿ÄÖÞ¡p÷ÊõE½GŽ/®>fÐàX7…#>%f°lHŽ*Œ€ßoõó7â¯õ™âíE(#•>hú×øÎ8ÆåK³;\Qv[3;WÓ3^üdužG»U²lu6Û&R6ÆŸ©wàMvzTÏ4­Y7Ñ[éy– !ßbÆ1.¬>ûà¨n\¥à;^_Á×(k!ô4Õù#åEAEÊÀ{®¾à’—ÞÃõj‚ÞòJSa-˜½»é • ’ >?š%,x¤%DŠª9äLZÓ£Óè$sõÁ<Ñ:dÆT¡Ye‘Ņñ·Ë™™,d£ê@-š ´dÔšJVjè`^²K(3üÇó´M}Òx{†óWǯeä݃îfX!oÌ`eœzlÜ*§ÇzÜéeê@A‰ÙO}&¨#è„> ÿÈÐ LƒTFCqX4²¶ IsÏö'&l¬†"ÐF.)ÜF|6¹‘«Ê¡—½Mé:«nhIÉ1Ñ)ŸJ=d‡ õPv! ¥n*Ù©4Na} U0 ˜t eÐôÿ˜nm¢<•\[ø«½—}KÊ™‰)Ó eH ¿³qS¦hJ¬ÀðL 'H€ò6.™K‚~ò ÐI®? ‚™TBÞË3ë´Ÿ!=…àM…âw–Ùx¸fêA„tSªeœJtʇ¦»òÍX¶©&gÀ@úd¸ ªõgߌ))ý»ô]¦W¿Þ6&4zÉP´ÏOSÈ"Ë©ì¿lÿZg¶EYØò(3—3íŠxŸÂ˜DŸ™¢ëY¿¬´°(v€h»q"h[ªÊ쥈•)«ºRg‘ée¸ËÙòô8Ôѱ/+¡`7im¸‘*èªE™†ã?>=}Þ?ÿõëk˜šõ$U•[âi©Œk|íCï³,„£PkÂJß>à¿°8¢¥È{æW9;é°±8óÜf(I®’«¼:€¸ñqŸ*áºÐqÐ>¿ï,äˆ+šÃÒݱiËÆ6Û!ÁvHOkâ[HË&=¿¹Ú¸¾ ‚bý\9U­W¼°T™ŒmÉ•–eÀcd?öÆWÞŒ£Ïa_5þ‚Ǽé6¢ãwöùÙ' ñ ó½}n˜µ}aÜg‰N<Ãt¸kÒ²änCw7$Ý7¨ üÑÒMZæÄº'$3ë'NÈåÐã5äDßÅ|¹˜Œ ñV@-—Š‡×ˆ6†û @evr÷Î1•Ë¥ºÀfô~G?ð Jd hÏM3|r³†{b«ãö¶ C3Ñ_)¡¼õs3ŠékgÅAšâ©-Y?Ú™$}ûá+³âùÿo¤­ÇÄöÓÅj¢XäZEWCç‹ÿ3Ù$…Bg‚’ŒØ.+ÔeÀí _é¿yç¢0x8¡'+š:Ä)ØWÙÍM`±¼ÛË €ŸÜƒM‰ïëª2Û ºæïŒâz/«ƒDš…Š­½Q­ hŒ{æäP>h·l˜» jAÞ'8ª>Û¦•]@©s0n]ÉX»Î×r/Ù7oÉ BµöŽVn-˜ ¢Ä] :¥sô’)š0å;&tºJ«DÚïWº 2n!V“áÙ++«¦Oñ<`µCÖòxtX$o9OàmI³üÝ|÷Ñ)ŸÖ]¬ ÐËþÏön:ÆP°w'Íéézü 3ÁÐËÆäñÜÙY(x "ÞšÊQ¶‡"÷ö³)~ ]n£m²Þ?¬â”™3§ýªºX9Ÿ¬V‹y´^À½™¥pÜôW³ßhëýΪ-_endstream endobj 271 0 obj << /Type /Page /Contents 272 0 R /Resources 270 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 176 0 R >> endobj 273 0 obj << /D [271 0 R /XYZ 71.731 741.2204 null] >> endobj 65 0 obj << /D [271 0 R /XYZ 71.731 706.3512 null] >> endobj 38 0 obj << /D [271 0 R /XYZ 532.0396 691.2808 null] >> endobj 274 0 obj << /D [271 0 R /XYZ 71.731 670.2196 null] >> endobj 275 0 obj << /D [271 0 R /XYZ 71.731 660.1048 null] >> endobj 276 0 obj << /D [271 0 R /XYZ 71.731 650.1421 null] >> endobj 277 0 obj << /D [271 0 R /XYZ 71.731 621.3466 null] >> endobj 278 0 obj << /D [271 0 R /XYZ 71.731 605.2555 null] >> endobj 279 0 obj << /D [271 0 R /XYZ 71.731 546.4112 null] >> endobj 280 0 obj << /D [271 0 R /XYZ 71.731 504.6328 null] >> endobj 281 0 obj << /D [271 0 R /XYZ 71.731 434.8944 null] >> endobj 282 0 obj << /D [271 0 R /XYZ 71.731 416.9616 null] >> endobj 283 0 obj << /D [271 0 R /XYZ 71.731 371.0687 null] >> endobj 284 0 obj << /D [271 0 R /XYZ 71.731 340.1845 null] >> endobj 285 0 obj << /D [271 0 R /XYZ 71.731 257.4946 null] >> endobj 286 0 obj << /D [271 0 R /XYZ 71.731 226.6104 null] >> endobj 287 0 obj << /D [271 0 R /XYZ 71.731 195.7262 null] >> endobj 270 0 obj << /Font << /F24 50 0 R /F33 58 0 R /F35 62 0 R >> /ProcSet [ /PDF /Text ] >> endobj 290 0 obj << /Length 2323 /Filter /FlateDecode >> stream xÚµZK“Û¸¾ûWLù©JÒê9£Émì±½JÙc'Ö¦Ö•Í"! 1I0è±þ}ApföòA"¿~È‹«9ü[\Ý,f7+øX/fËå|}••¯æW'øÓ‡W »dj×LÃEoö¯~y¿Ú\ÝÎn¯—×WûãÕj½mVë œµžmç7Wûü_£»º¦UÎ~ާËÍ|t73Ÿ~3_Þ7›‘¯nF”š7÷_f’‡‹ù”äTHóÀìgÅíÎýxx‘JÖDÀqÎ;ó‘ñZ‹sAáˆêŸ.ÓÅrv»Y¬[-_G‡¾îîÊHQ â¯?×ôx=s縫å¶=çÝORÖµÛøugŠ ‹Ä‘‹’(é’Z9mƪ¬hr{F]fA»ûúv·3_™:ó&â{SOðô›ùˆŽ›ÑOV9žXãb#Ó$ÍGb6ÿ>¸©}øúáÓÇ®üŽ/ɪ“ùJ¬øÍ¡`YqÁ—ËùèÇx¹Vxœî÷÷ölRY쥂¯DäÓŒWúvw®dvóý×=\œP¤ë¿øsS’*å“Ö±Œ¹¦ëä —êk&Xx|¹?ÞÎGö©¼Œ*".‰“¼›f(ÊúPð t´2ñIs¦P'^!¤I½{Û`å"wΨ”\Èç­è{<³ìŒ‚{[9)Á…ötg$Åya52O´¢‚nÈCbÇp‚”$;³ŠNÍ™Ö'P¨¼Éð=â$yIŸ(ÂÌÅA݈šKôÚ×›Q’ö(§!¦Ði¿èز´ÄSR`‚It'`•SìÀù÷I„òÇÖŽ™’´8¢;DjB[yQp ñ£3˜ÞëŽÒ<Îg^äI)Zê9±ƒFK±¾ ¦¨`¤À×H»˜ôÚײ(O{%¼%[‰À€ŒÎE àVe†ùdi1…÷ÖÜße÷ˆNx¢ÃÃûœ‡É^œ­k‘}R?\¬(­ D¼aH`‰ÉË#¶¹!w…ÆAL<Æ@PΧ8]Ž1’*£Ý¤åv"DÑuŠ uÜF!ž|”ŸiЧ֪ʭìÝtàùeàO¨_U¦ÀZZËþóÝ?ÞhäîÆ‹Åb´ß}2¯ß~þòm÷ð!ß`¥fôÃKªŠp,5ì -Þ(S -ÚGêxCk¸œ5¥…B²¦ï+K*2æc¾âUç6zŒõÑ?˜CF¾fj½À€š˜'#:|Au;•yk¥]i·>4q±ù.ÉŸ]m.îDòB{\aʽ†G'8êµÂ¾Ô1wBEwQ„•S?M`¢½ ÍIž#ÒùÐ,P¶ëRÀp§š$MÄ‹¸æ²E™YWp²3©N4J«F|+Ëî鑊y›ˆ ÙÅv„ÒŠ7'›L«¦< €ˆW¦i™’§õy¹{×;QUI3¯ÿjö'h¯Á¨F1d:ÔT9‹$å€@P­»:… [µæÃòÒ“¤Û €  á¹t͕ȫY—ðEÌçßµ;þ¦ëîa¿ÛKáÒ³~+‡<' ¯Ðš½ˆèæã .~J.\îÀr1Ÿ–´xX˜=ýÒ`™‹g[%%<ém`Ñë •œ ú&…VÇQ[2îÑù²ðŽD{#D˜Ã²J"N³‰j1¤v¸EyN£¿ÚŠO÷M»‹øt¶b1é|ÔG%T Ëéñ†dߧω8pÏö¦®ÙèÆÂœ‰jóˆW^ˆ¶1eÎÆŽ—TÂñi3.@m¤Ä¤«Ã³ûgÔ€*SºˆòæhœWørYA"ŸÁ®n(`ƒÝ@m¥•*Ú£Ê!üÁ$À÷Ljw…FP`OÊ R†u•Nn¸)/ÎÒ“ôq”~^àë–dÒ½~Ò5|ÁÝL'p_ë¶öac”ûæôƒHéòxIø¦œÉÀEA…ã³Õêt€SË”›÷jD=°èWC¦Mg¢Ý±Wgµ¼œw»™xªÐí zÑàšoÅ9*u /pKÞDe žd©§Õ³<ó¦À‰Gǘ>G`òÊ{’t¸þ1ßÌÛ²Óò™Â7 Ì#yE@28d1$S )^H»ºÐeUC{ð: D$ÿÉœ·µãŽ'Í™® ÒÅmzøÿ*R ;p¤Îœ’¤ki34ÓÍ€Ÿ¿M¤ÃÎØ³€çJp¤)o6zÿCÜÚ:1Š3ñ'OM)g| KÉ©ndKÔ¾Y; m¯iEÎ9ßÂ_&´OVÅsl}DAÕË4;Îúõ̘°°>ÆæŽÉðTÖNQq&ä4œyß¹)_ U—NrÓ„T÷inB½îqu…ê¶Ó}:]’¹:•\[A¦8âï í¦Šg¼ìך^™Z¥\YRk›Çêt­ž›ðò&w†ö«¥$ëu«Ñô+ÁÎÉÐ9†8wC §ÂPB#ASÐT¡â!Ä \ô‘aÑ$hé~eRç¦ã>Œ†fN´ßvcª%Š®Ó@$‹¨›e’£êuŸ…Û©œ¾¤w¯žcÌrÈՙЇqê,|‹·$»H"•+ë]­ìQ@ä¸cl%j*™~iÄi²›ßE¿qêZƒêälÃM˜°"™ ŽÆZÒËâr€4êì~y&=Rô¥=º—vüß‘jX8øáJãáñJ'æ‡JNÒ²Ëág?ûÆmÁl5Â$è-ÐëÜ{8˽˜î”´äÚ²Ú§Ï÷»÷»·8Çþüð5þáßþT¿Þζ‹ëÛ'ÿÇB°¦ÿ6«Õl>_¬ÜIZŒíà3HÜ÷?3ì Ýendstream endobj 289 0 obj << /Type /Page /Contents 290 0 R /Resources 288 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 176 0 R >> endobj 291 0 obj << /D [289 0 R /XYZ 71.731 741.2204 null] >> endobj 292 0 obj << /D [289 0 R /XYZ 71.731 676.2989 null] >> endobj 293 0 obj << /D [289 0 R /XYZ 71.731 606.5605 null] >> endobj 294 0 obj << /D [289 0 R /XYZ 71.731 549.7734 null] >> endobj 295 0 obj << /D [289 0 R /XYZ 71.731 533.898 null] >> endobj 296 0 obj << /D [289 0 R /XYZ 71.731 451.208 null] >> endobj 297 0 obj << /D [289 0 R /XYZ 71.731 431.218 null] >> endobj 298 0 obj << /D [289 0 R /XYZ 71.731 413.6588 null] >> endobj 299 0 obj << /D [289 0 R /XYZ 71.731 317.6439 null] >> endobj 300 0 obj << /D [289 0 R /XYZ 71.731 286.7597 null] >> endobj 301 0 obj << /D [289 0 R /XYZ 71.731 178.1669 null] >> endobj 302 0 obj << /D [289 0 R /XYZ 71.731 147.2828 null] >> endobj 288 0 obj << /Font << /F35 62 0 R /F33 58 0 R >> /ProcSet [ /PDF /Text ] >> endobj 305 0 obj << /Length 2442 /Filter /FlateDecode >> stream xÚ¥YãDú}~E4/$RÇøLœ}˜ƒaY„Dƒ´ÚåÁ±+b;¸ìmúßïW®ÓuØn#œ8_÷]mBø/Ú£à˜À#‚8ÓMy{nžà§Oo"²ç0{è›Ç7_L²Í)8âÃæñ²IÒ<È’4\i‡ÇÍcõŸí»û5þs·³pû.`ÏO?þÂ>|ÜeÙ¶Û%Ç-BìÍû¶n¨é‹· {õ.QCÐî·Çïß|x”leÉ18å@{–w åà>Ѹç2N‡ Éóldþß»( ·íÀظ/ìCÙÞwðž+šŠ}¨0é;|ÞÅávè¹4{ü«­ðÃ0FôW@mQG¤Œí…=û«¡ömh*Ôe Š¥Z"S•ÚÛØà2áßÏí.ʶÿ£ÿCTµ ®}§,JGáïƒÀ•຿œ¡“Õ¨ ÈàlY\Mž{‡JLPý"`21ûûöŒûë«ÉÐ_ë7Oê/’vm¬ð Þœ¹zdNbžØ^’—J¿qNKÍ«-ZËâô-×ŵE»XXOè±%ÑÂó&’2‡žz®à÷<,? ¾+æX†µoáPµ’ye}Ð'Ž›WÈö3°Ç ÍOÙæŸ‚£;'q ½åkט”“d¿ÂÏN’æS² þh 7eá¡6KU»$“—ü‰Ú¸xB¡³PzUÛXAÅtG¸õðE8#}ÿ¢Inê-êŸ)¹/]{3)@$oú·D…—3Ñ0gÆ­.!ÊbTîç+.y ×v¨+C@à©ã„žå'.õîm9ø‰&½pGËßÁm÷2I¨  Šåqd× ‡Øƒ•6IqC–M 2±Ö¬²,}p–;ü„›¢æ†3ˆ~iCÉ#ll!|Â*Ùp¢wÔÝ0¡ V(ó LŽÙ&Ë3è’Ø½h¯C9¢×ÄE÷7z]$—£wž 7eá,a»2| k2DÛFZJÔ á¿ h¢*<ÿ¼ ò³°E‡È@ðYм8NåŠïßÖ%ârÓW¥rQ&Û'ÔKS•[xízU¡•wyؼw•ð]x0kUã4&̺6 1;$ŸÚË¿eÏ«0e EW†Pã’Še_˜@Wz: a¢AÍ„‰€¢ìëÉa2Ë‚…›²ð3tñh]œÜe‰“L‡¶CørØz-ˆ'Œ$¯'Éâtžæ{Êß“H(ª«÷~s9H®0×, nÊÂOIP§G¢Œ­Å`$””+„¦í¡^ GWd§,Ùdá!ˆÂ8òÀ´×¡œ0ÅEÅùàרƒä β`áͪ’m{Þa¬‚¬#ã«O#•CÞ¹s6ïØ/J™ôúÖìT6öжH—†ñ&Íó :œ·…8Ð^‡rXÈÄEÕóq—‡[¯•\d—­4φ…›²ñ¹)ë¡%ßn¨¢iqé³·O‹“v­æ« ˰¼§šŒ¦* •f—5µë¤utT®WÍß’2Hy³¢Ø=Œ[MøéM¶æT²çÆ !šj¸‰f¼fà´A÷&Ý4;qžÅóIW‡ò'] EõÉï|’+œo– ·;é*•É~ÉçEJÿƒÈÔt¬1¬c}JÛzÐs©Gd‰Ÿ'{"9¹uèwÂu¾ÕGJQ¹Ð‚Ò7 Jú„à0¼c!ÊÂW´Ú¯˜~—ˆAF ¡€f‚Q®¾óûƒMo…;ÌÑ71k™hZ3Ý 6…EÜ;+RmI¢ 9@¥OÃí¿5—rN¡Í_ QÜEZ£0î‘HŠt-R½c R9X#ô‚ŠŽ.ÿÚ –(ç'•4á ‡±”ì¢-o”áÍè-ðdôàäR¤±Y)(6žfˆSlÍ[<éé὘}öõ³"Þñ?ÀyÓ²§2|¡íL´v‚ÒN«æTc3UvHFÃ.kŒ0 ¥+,Í#Ó™´ðgM¹Ãž§TêH¢ÆrÈ5†kÚ®X!RvølK½Ü4¾©Ö¼›3{AE@pÔ8ryÒc¢h“Àx|È#OFâ@{Ê‘L\T?ß{3’‹ärFZ`ÁĽ‘Ô?ÓLÞv_xBhYOï^Üj+Ì…rëp99GèíeQ–jwÑNúÖÑíº¢!÷¢“H|•ÇÙƒúÃ5þB‘°d†Éj¥¿/úŠ=³Há#ÂßÏArå¸ñQƒÈSB±g¾×0™ù¢E¥4½Hy×ÈŒ‡›,4 :3ךlVu™™EF«dÍrØXT°$"ã|šÄcÆ$ìå]Ø"^3‘á¥f„¦w‚ê˃¥//ìÉÿ&Ö7ØðZ϶ôÇ)td,°sbº ÁÛèðð›¹Ü¦øg–Û¼iŒOiŸÒ…þS‡ò7 ŠªôŸÞ”å"¹œ²æY°p³&tšwÛ§wå—†Mqðî Qã’·ÓõÛ÷0Só@mÖ}±YÓ‡g vŸžœYi"†½Ý"Ê[S"ƒN¯6ô<ë¡BœEYžlu,cÏ¡#IäkU)-yÓÝØ>áÆ»O‹i†§Óü>M‡òïÓ$ÔxèáwMÉ®9Ë‚…{í†rÕ´»tŽiÌ\šWa±6á°928 ©ç’`ÂOÜÃíŒ:u¸ãpXÉ Ê™/PÁjÕLvj`–þGp¥˜‡î;½„ƒàÓô«,Èã ‘$AD?8ýŠíu(‡_™¸Æm•߯$WøÕ, î±YA5êÑ+ÓÞ‡¦‚Q€§;aÞA¤…Â@–pi«³L[ãà_ý…ëþeAäÛÚÊ¥€f*¢ªúÑo-›Þ cÍÑ71³¾ÒPa‡ôÓrÝx,BÇ; OkˆVgjÈiÝm1Äè?Áânn¬ƒzí˜Sgb>±nrƒSçêÃX‡_Aˆ»™n Ä…Œ¦ßߊ^.³§÷Äd¡böäŽêÿŠ_^¦Ê9Ú¦*ÄU {§èÈi´@BƒM+bÃâˆF ŒWIÜÙúÅꑵ‹jb&¿+˃†ðS#פ½çïÖ‰±vÏiª¶Âwh>5z ƪpšW¨°Ü'È’Y=<ç:µº‡ðš]ï«òË↖I6*È1éü«ûcç…G“ÒN¯V,v“3̓<:œf/´j0ö}Ö *DF‰ÄDÅ9yo¡:èýb2Úøendstream endobj 304 0 obj << /Type /Page /Contents 305 0 R /Resources 303 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 339 0 R >> endobj 306 0 obj << /D [304 0 R /XYZ 71.731 741.2204 null] >> endobj 307 0 obj << /D [304 0 R /XYZ 71.731 753.1756 null] >> endobj 308 0 obj << /D [304 0 R /XYZ 71.731 706.3512 null] >> endobj 309 0 obj << /D [304 0 R /XYZ 71.731 655.3774 null] >> endobj 310 0 obj << /D [304 0 R /XYZ 71.731 650.3961 null] >> endobj 311 0 obj << /D [304 0 R /XYZ 89.6638 629.6388 null] >> endobj 312 0 obj << /D [304 0 R /XYZ 71.731 601.5791 null] >> endobj 313 0 obj << /D [304 0 R /XYZ 89.6638 585.8032 null] >> endobj 314 0 obj << /D [304 0 R /XYZ 71.731 558.1171 null] >> endobj 315 0 obj << /D [304 0 R /XYZ 89.6638 541.9676 null] >> endobj 316 0 obj << /D [304 0 R /XYZ 71.731 539.8108 null] >> endobj 317 0 obj << /D [304 0 R /XYZ 89.6638 524.0349 null] >> endobj 318 0 obj << /D [304 0 R /XYZ 71.731 521.878 null] >> endobj 319 0 obj << /D [304 0 R /XYZ 89.6638 506.1021 null] >> endobj 320 0 obj << /D [304 0 R /XYZ 71.731 503.9453 null] >> endobj 321 0 obj << /D [304 0 R /XYZ 89.6638 488.1693 null] >> endobj 322 0 obj << /D [304 0 R /XYZ 71.731 473.7784 null] >> endobj 323 0 obj << /D [304 0 R /XYZ 89.6638 457.2852 null] >> endobj 324 0 obj << /D [304 0 R /XYZ 71.731 444.2342 null] >> endobj 325 0 obj << /D [304 0 R /XYZ 89.6638 426.401 null] >> endobj 326 0 obj << /D [304 0 R /XYZ 71.731 424.2442 null] >> endobj 327 0 obj << /D [304 0 R /XYZ 89.6638 408.4682 null] >> endobj 328 0 obj << /D [304 0 R /XYZ 71.731 367.4571 null] >> endobj 329 0 obj << /D [304 0 R /XYZ 89.6638 351.6812 null] >> endobj 330 0 obj << /D [304 0 R /XYZ 71.731 310.6701 null] >> endobj 331 0 obj << /D [304 0 R /XYZ 89.6638 294.8941 null] >> endobj 332 0 obj << /D [304 0 R /XYZ 71.731 279.7859 null] >> endobj 333 0 obj << /D [304 0 R /XYZ 89.6638 264.0099 null] >> endobj 334 0 obj << /D [304 0 R /XYZ 71.731 248.9017 null] >> endobj 335 0 obj << /D [304 0 R /XYZ 89.6638 233.1258 null] >> endobj 336 0 obj << /D [304 0 R /XYZ 71.731 230.9689 null] >> endobj 337 0 obj << /D [304 0 R /XYZ 89.6638 215.193 null] >> endobj 338 0 obj << /D [304 0 R /XYZ 71.731 208.0549 null] >> endobj 303 0 obj << /Font << /F35 62 0 R /F33 58 0 R >> /ProcSet [ /PDF /Text ] >> endobj 342 0 obj << /Length 2307 /Filter /FlateDecode >> stream xÚZ[sÛ¸~ϯðø¥ÒŒ¬)Q–fŸœÄñºMìÎFÛN· I¨yQ2Yõ×÷8¸„|éd&$A88—ï|çÈÉÅ þ%×Éôz—E2MÓÙâ"¯ÞÍ.öðêî]‚S®pΕ?éýæÝOŸæÙÅzº^¦Ë‹Íîb¾XM³ù"ƒµÓÕìúbSükts<Òº`ޝÒl6º™êëÝÃoúæÓ8ËF|<¿QªG>6yWѺ%-kj=ô™å´tüïÍ_ßÝn¬XÙüzº^ÁÞÏÊngE¤Ÿ{Òã—ëåt¾ZeJøŽ“d6j:-FENú†Þè‹ ¹DgmIqÆåm]4\Py"q9уGÞŒ“lôfkõ5oàà¬ú©nÚ«÷úa;Ng£®5›¸UõH³Ó×SÓq}÷¥)سY {€â@WI:]gÉBíp´dD¹°‚oñtßÇi6"œ5.}$¼eT\]í\šJñÿ$Õ±¤x$öЉs¤¿áT®û©Ëœ…ïÚiͺA«÷ÀáÁu·”¢¸ähÔ(ÿ3Š4‡ uìа_²íÇp¾šý×ó0³¼Ýžtí¡áLz¡[í¡_TjµfîksXbuQ„S+xà<]½Å¥ŽD²§ýõ»#JÙè«”#”îÇX.Ï Ñ?.û‰ƒƒ]}ðô†ØŒ¯YÛ‰Qáÿ!Rš½FŒ÷$ ¤ˆX+"“ÙÆÚ‰!@öMÉDÛõ±QDV yq¤žýÈA8{¬K´cSÓg´õ*õÚ·+Â"=%iˆŠ¨òÌŠÖ×¶Ôú\6̲™ JÞtûÎåœÔ{?Â+RPó1|–ظƒ-Ce(L<—ÙvZË >®RrJŠSÌ)X—]A¥‹Lù\òàü0äá;é‹¥­q,YnRÝ‘òŠ —~v¼©ÜzO÷íKt[ˆòdϳ£ÂȬ™Ê¦ý2„ïØE°i0¡yÞ¥‹&P¼ 9Hñ¢OsÔÃ~wB…,섳CUÔàO¸ªtýˆï¨cäÚÕpV?%7¹åmÿƒÄ‘ ú@ð<„F²d†8ñáñËûû‡û‡;Téã‡ß¾Ü>l¾¾!³æMµe5}Ö8?X‹8§bÀXLOÆåKJ„9AWÎíN"S,«á•èÑË£„¥Ç,¨Ù­Xõª@шjRÏâ,ùtqcQöLFÔ*õéSYž ‚ûZ"ª¡”Ä(ü«>—ˆg6D7µ¨Ö]€–@Ìö°?¾¶vBÜîj§ÒÁ 7H ËQ;NFZé»Á¼†=±=¹r«T¢| 7Cô¤Ÿ”åµF[Õ„P /ŸG)o/Ç·ž0ü)µ`Wžz¥E™óæ(¿<…æ‹»´Áª+[ì¤Y+'ålˆñ1Áa|Š y¯ ¥Ü€º¹é‹þ*YÝöÖ¯1a#ÔFrfÁvrÑP{ÅñS¥')wÔ`ÈZ²oJr”FtöÎlj®fß:ÔCEa©Â Öhfø¶ñ(AòÔHo?vç¿§6­ÚLr.'¹|îÖ3÷ŽÉðõSݨ’²žô³-Mb$C½Ô]µ…}2ë2_Œ5ÎÙ™ÿéDërÆ é §ìv®¢P(+OwopÊȪ}ÐrÆ.qèˆ&â{…Z‰ÁÞÔÇþ‰~…,5ÈÒàšx9¾pLÞA¿WO—¿€^~ºÔß±þÖIИ€?¤AHdR¬´ÏË©5}1¿#ÍÏF½è Òט vÑã<¢g­`í›Üx-ŒíûÝ!Ww¿b¹v\~¤€±š}‰Þp£Î”Æš–IüYÉý~Öô2–¡––»}þ|ûasÿøð«äOocq‹9f 0n冉ñŲ´„aXFC£Ï1A§Æƒæ>ëSŽYà<$}pë“>˜â‘>xiZReHô2¤”L¯™Ú )ât6Y]h–ϊΠ$d3FÅ éø  :w…}] 0—‰%,ÎrBc‹IÚû¬SiPí:CI!b˲1íAg7Pf§Á´gS†6r:QK !‘ùn!*ã-ú€è©] êÐaÒÐ:òÅÔyŽ4¸8‚Ä[º~Ø£àPÈŸµKÑ«T\•ì’?Z $gHOh¿ãÜ÷AC_QÞô,±¸WK¸ ’¼‰ušï‡]?§7ãFMáÙ{>õr,¹JÆ‚Ʋ¶ ›«2Wœ*röÀù¼»~̀ܘDèAõF2ƒ»»_oïnT -áU¿ùý~ó Ò‡‡·¿…ÿ6øJnýøëߢ€{cK—#+MM«º|ð\Ún—-gÀa°e!AÈo›ãD¹´‰š r PKÒÒ N¯¤òw#Û;ë¢ÛÝpSû™"˼7‡!q+¥²-Ô…üÕ¶ñî:¸<J–9Tq»jbìHEØdë·¿‡º]Ÿô\Ïä…ŽÓkX‰g9ŒgzÏY^‚,—„U´Ú>³4K¡Ã~ÂT°›]b:ê£éÙï½€k©O’¢uS4ºc&9ÚÖ^¼Ø´Ü]aéfû›‘I·úhâ5b ^s”äžxVeÑ*iK-ˆ ·žôk#¹³ã¶¶Z€÷ÑÅ©â„ç9zü³^¯'ª¬ ª¬?ÊÀPðÓŒpú­cܶÒ×Nk¿ÃÃ\_4/X+ Þ–¸“2³ÞZà%[Þ’º1¤ï}{é/q+ÃG'°g€$lÄ|ëo‡•¯÷Šíd!19£ÿ¿ÈêV¼å§¯Á/D~ƃ·”Tèçà˃îÓ §¯1lÈex\󓛌QW‡õÝ8à”ð—O@<©íÖN¥þÿ|`±š®’åúÙ¿¢ðæ ÿˆ"KWÓY²^Û•¤š’ÙÙ¿}ˆlø?® $Tendstream endobj 341 0 obj << /Type /Page /Contents 342 0 R /Resources 340 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 339 0 R >> endobj 343 0 obj << /D [341 0 R /XYZ 71.731 741.2204 null] >> endobj 344 0 obj << /D [341 0 R /XYZ 71.731 753.1756 null] >> endobj 345 0 obj << /D [341 0 R /XYZ 71.731 706.3512 null] >> endobj 346 0 obj << /D [341 0 R /XYZ 71.731 580.6576 null] >> endobj 347 0 obj << /D [341 0 R /XYZ 71.731 549.7734 null] >> endobj 348 0 obj << /D [341 0 R /XYZ 71.731 533.898 null] >> endobj 349 0 obj << /D [341 0 R /XYZ 71.731 477.1109 null] >> endobj 350 0 obj << /D [341 0 R /XYZ 71.731 407.3724 null] >> endobj 351 0 obj << /D [341 0 R /XYZ 71.731 363.5368 null] >> endobj 352 0 obj << /D [341 0 R /XYZ 71.731 345.6041 null] >> endobj 353 0 obj << /D [341 0 R /XYZ 71.731 299.7112 null] >> endobj 354 0 obj << /D [341 0 R /XYZ 71.731 255.8755 null] >> endobj 355 0 obj << /D [341 0 R /XYZ 71.731 240.0001 null] >> endobj 356 0 obj << /D [341 0 R /XYZ 71.731 168.2043 null] >> endobj 340 0 obj << /Font << /F35 62 0 R /F33 58 0 R >> /ProcSet [ /PDF /Text ] >> endobj 359 0 obj << /Length 1831 /Filter /FlateDecode >> stream xÚµYMoÛ8½çW9Ù€£Xþv{J»NëEš±S Øî–h›[}­HÅͿߑȡ$Šv”‹É9óøæÍ åvðçvf®3Áeì:Ãá`Üñ‹Ag?}¸pÕ+5æª:èÝæâúv4é,œÅt8ílvÑxîLFã Ì5væƒYgãÿÕ½Iùìgïj8toyýpÿ(ÿ¹íM&Ý´7šu)•Oþˆ½,¤‘ ‚Å‘|tÇ<qÚû{óçÅr£ÍšŒfÎbkŸµ]²X?ªX¯|œ.¦Îh>ŸÆÏ•¹›‡›ûõÝMÏuÝîfõù>·f¿raêÑP:ºéÀñ b9ãòêÅg>M©/ü`‘zïä5Œ}ö}0zÅ$}ùÇòúgjy–ÿøŒ‹”m{ÃA7 @QÁë“‹ƒ±¼Ë"°Ì!hríæÐYL\ ÎÅ©Wº9V8=Ð$ ‹öòvõƃîSo8é’”\o-_UÆ™8œ2<¥ÿf,¥êŽ'Ôc$7 È8×&ìÒ8Ô>°aOz.à–²ýA-~ˆð–÷ë¾ ßާÀf‘dþ‹(ó8Tcbe ‚W”GÄ÷Y ±ˆŠÁ)!O=wÒ¿¬›.CÇôöcÔ–~ÒÃdg± HL00’å¦qnõ†‰‰> ýuøí0,£}ÀøÁFÜ B/XçèÍ’$"h0¾Atð‘}JiI[*Ž”Ff,™¸Èoå…¹³»-ûª¼èÿÆG†ŒMRšD²„N]ùæÅ‚ TÉåçÕ}.ƒç•ò¥¢XÔ£¶7tû¥,îªx¶ j~b¬YÑ®{4wû§GuOxõ9xÎyð|Šª;\°¦žgwDÁtåS©‰c° UB¢-î¯Ãâ—¡ÀxÊÇÌïD- A2‡ÀeDíÙgyæžá‚ÈÊœB„¹4Kø}ŒsÎý ‚æz¥,KH*&†ãA¡u ¹ýr4f²r _£ /Ì‘öõÍt¢•¨ýF›˜if7í«$+µ‡¼LÀŒ~½bÌ®HWžy () ¦¼î24É‹Ã$Ñ÷¨5¤ÝÚ…ÛÇÍãÃRe÷å×Õbz-o?ߪ°ÿ¸ROîVï—÷륵:BÞݦXè­ã8æä&)þ–έÔòä,GÅŠ Z+A tŠqìlF4«Ð´EõYò²ó‚I¼(5 üU‚gPšäêX÷É¢ ›Û€†¼hP {4ÕÆ±?‘¼¹¾>‹}uöQæÀ+î¼»¿F èN\;6‚-‰÷r¤–EõÙWd"2󼀚6öéÒ¶±H”…[€º,ÎÝE1›Wú:àuíC*Ñìeùî['׳½Uéu©KÓj2‚®2ᥙ€`hc±&}C%­§lJš¥á.)ôZ£щÈÂ/`’¬‘1s³2–ä'Q3Þm޹Èey« A¥\¸ê÷Ád 3ŽFª¥d'`€«æx6 )„ʆ—´´'ý÷WÛW`¶{®yŠûç‰×?ÕVy‡8F^"à«Ö*ƒÿèViÊš?UñR–ŒÓ³A©KʲfòÕþpÛ"›Þðn773$­¶ïg‚÷‰FP<ˆ°u}ºBm£µfkT·C—› &¨| … Õ°´úzºZu Œ€[…Ñ?ÇÁ;Ñ<a"À¬JöôMnJqj4wÓé8?5*Îf«¡ëLÝù¢°î}Ó”œŠ^I·oË›l¯GPI=ª;Ù<}ZªpýbœqèT ¥. Ït ¶@¹Fž©NÂàÿÊÃ!ð|2Õ‡~­ÂRV-šÇj¤»Žk¨´ÕeC~#ÌßVN«,žë[ñl©æíÝj½Á:z¹R<ج6wËu¿q@VšGâê½ìI« ¸éͰ'Öš»Íî®±Â;âýxy –å°ïm¥­6SºãŸP‘ÚY$P+[5öòU ¼ttˆ—ÃWãUíÅLzF:£¸#ú¥ÐbqVîGË9..(1N”9yÖ;r<0¬’ã5Pž™‹”UƒEƒ[xÞŽ¦^7Á9ï/#T.ß"%䌕mã'2RúŠÀ±Ö J¥6%†b:±HWhh»ìyñPONO ³§FË $'òQkå1IÂR>Þ”ðjEŽÙ\£Ú4°¡SI"¥wP÷AÔí€RÞÐãúy_yêAø©¤óF4Ep¾§d¶„ƒ´ø¤ ç2™Y½ìNáU“óc•ú¼4ž;swº8û•­2¦ù‘m2œ;w±Ð3Ç5îÉoc–ÿ$c†»endstream endobj 358 0 obj << /Type /Page /Contents 359 0 R /Resources 357 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 339 0 R >> endobj 360 0 obj << /D [358 0 R /XYZ 71.731 741.2204 null] >> endobj 361 0 obj << /D [358 0 R /XYZ 71.731 706.3512 null] >> endobj 362 0 obj << /D [358 0 R /XYZ 71.731 606.5605 null] >> endobj 363 0 obj << /D [358 0 R /XYZ 71.731 590.5654 null] >> endobj 364 0 obj << /D [358 0 R /XYZ 71.731 531.8407 null] >> endobj 365 0 obj << /D [358 0 R /XYZ 71.731 515.9652 null] >> endobj 366 0 obj << /D [358 0 R /XYZ 179.3565 477.2104 null] >> endobj 367 0 obj << /D [358 0 R /XYZ 71.731 470.0723 null] >> endobj 368 0 obj << /D [358 0 R /XYZ 71.731 400.3338 null] >> endobj 369 0 obj << /D [358 0 R /XYZ 71.731 382.4011 null] >> endobj 370 0 obj << /D [358 0 R /XYZ 71.731 356.4982 null] >> endobj 371 0 obj << /D [358 0 R /XYZ 71.731 346.5356 null] >> endobj 372 0 obj << /D [358 0 R /XYZ 71.731 295.1448 null] >> endobj 373 0 obj << /D [358 0 R /XYZ 71.731 253.1508 null] >> endobj 357 0 obj << /Font << /F35 62 0 R /F33 58 0 R >> /ProcSet [ /PDF /Text ] >> endobj 374 0 obj << /Type /Encoding /Differences [ 0 /.notdef 1/dotaccent/fi/fl/fraction/hungarumlaut/Lslash/lslash/ogonek/ring 10/.notdef 11/breve/minus 13/.notdef 14/Zcaron/zcaron/caron/dotlessi/dotlessj/ff/ffi/ffl/notequal/infinity/lessequal/greaterequal/partialdiff/summation/product/pi/grave/quotesingle/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde 127/.notdef 128/Euro/integral/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft/OE/Omega/radical/approxequal 144/.notdef 147/quotedblleft/quotedblright/bullet/endash/emdash/tilde/trademark/scaron/guilsinglright/oe/Delta/lozenge/Ydieresis 160/.notdef 161/exclamdown/cent/sterling/currency/yen/brokenbar/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis] >> endobj 158 0 obj << /Length1 1166 /Length2 6816 /Length3 544 /Length 7627 /Filter /FlateDecode >> stream xÚíyeT[ëÖ.Z\‹C!hqÅÝ¡¸—@ $Á‹["Å[()w‡¢Å½h)k‘RÜõÒ½¿}ö=ûœûëþ»ã&?ÖûÎg®gÎù¼Ïkd„•QGŸG ³(Ã\‘<ü¼@q€ÔÅÆ¡rÕàуØ{îƒB \VV(Òòð= ‡€P˜«"y8x4Ap€ÀŠŠ ñ߯OþJ„ÁÅ:p¨ Ì ABàÎP×{HfëáqEê{¸¹9C!`=æ·… Äv÷ýgU€Ì͵w@Ø õŒ8¸¸¸ÿŽð‹‰‰l|þBŠÔÞÀv¿ð„8ÃÜ~Wº§P¸Bà÷MƒçêØ”ÀPäïqìH¤›8Ÿ›rãEØñºB|÷*¹‚`.¿ ¸¿5S„Â!¶÷CùðýS7'W˜—«ß„í ®à?F{¸ñºBÝ= Oÿ'ù>„ûwÌ‚€b@Äñ¶uàû]ÒÀÇ òÈÿ; rûû¹ÁÜv gÄj¹¿àú!@žîñ÷ûßßáòóÀP[$Àb ³ß‡!vî5AH8Ô`äùÀßß­,î suöù;] ä𩛪¨¨hsýsöeÉËÃî)yøE<¢B÷N¹gzòOÆiñ—Du@Ðÿéø7åSW;@ìÏqîuük$OqïMû6æü;¿ µ…Øÿ¶Ž9Pxïšû ÿµÔ¿áÿÕXÿ¬¡ìáìü‡*ìʸ×ÐüVÄÿt ÔÙç¿ÜðÏD#ÈŸîÿ?ð}ˆuÀƒ',R§®5ô—K2“ÁƒÎÛçzñä õ܈ö×5˜Œjí˦§uNé»Õ<Éž$-×hvÄ€kã¬&\)šìuiV Î Ûä^­uÕ‹Ö5û/´Iz{_BË6tHr;öùŒ°6al‰ÁŸ» 5 Gd:zÊž*+1o=eÊ×›áC™¢†»fíÆ]ÞkÃ*æ6‚›ÒŸŸ(±Å|çÃᯋò~!0ÒŒó ПzÁWŸ¤ÐV¼ zº `™Ûa(mɃ„àpxJ`<}ƒ…܆˓Jê7ñ&ú¥ãîAŸ¸¤Ï;JÕ8ƒ_bº:€L¶ÞO+Žl#‡xÌôI/pÉvÿð ˜PHéy’싆Ú[yªW)tã×È;)<~Ö…¢Z1'þ,ÑÜ—=½ÖÆ­Vö•´ ÙMÔOÚä¤m:·xÌÈêcT²R „–‡Më ôÕWËbŽOwшp¼*ñÅ£5u}]Œûì+Ãìf^f® ë›>tq|cjî|U¼8G8gÏ0„•©Åçy˜Ž”¼PÇ&I…›õδ„ÇÔ“Y3r÷Ê’r›ä‹¢œ°©'ñMÖeÃéš²¢ú#¯mn²_œh™uÍÑXµºAÓŸh{Ïz˜Q›ã•…°m/¿/@nV8‘´ö¾³j|³¼úý6€õÅ…Œ±´Ÿë´R@BZ%Ÿî´z6Þ{ùW?" s±­Fñ³%RäUøy¿HêóHÜ =»[–^ð7x+ÞëÿÁ‹“ÁI¾do!@ÚÛg¸6NîèåwBFÂÙ².Â9”6ªúp%œ(aô»BmGÆÊ–ˆüvzãà0ÎuϤ‰åΔò€ünÉ¥+ÉhÄ[Ãvü€Þbd@u9wÍ0ÏÇáüÕåW§™ i-û_ä3‹úmë9ä°Ã  zÞ/»t’† üFŒ¤Àª_qÚ'ª°Kv8Ë×Pq¶Õãö>þÞºyÌ“0óº-VŽY…‘.¾© ÕËö }N׺R:é´~.SÎOÊ”l/âÿ0N[£„"˜Ù™Â`™”;»ŒѲò‘º°Ì¥@|¹ï$Ïú½DžÃp©¹‡Òüt¶îãý²Tµ—}À©X(_E&÷`H   MÅ"?‹°sí”3†Çáå.FÛf²/nÇ´[ÇÏ~óé«[ÜÆìïž¹v£ô§É**Äá¯ÑÔ åòý|‚ òÔëÎ^×¼íüàVA>rÒƒþ©(߃1@b#a}ž¢+Óž:ö0ß²*ö ÙÐ ‹­›WãÉ…b–ËÌyö!„E?È—Ýñ66?=æ×íx·Q‘WU!Úi„^~óÖ)†]ɹ:wÎ…«!ú·Œà„‹»Ë艙ÐpL¿“>Ä,š/1_=Ëz%®×¯º,"ö?%Ì^eé.g†j]N˜Ï¿ûúΧ.j!±š¦ÍJŠÙ©Õöà‘Õ¨J(<Å;2–;³giŒÅåºef]VéPüpøeŒ }–€» –Ð@_'£Ýpfï/}Ó¸§ý‚ó~Æš ¥*dlxL”qÆ”ôåU'n#*,>&_™BÛÍ=Ý­Ž+9—¡m•èЦ&ìÌás"XC3öÔSy„"0DžXŸþÙðAæbˆ8ãÔNž“aµÛ*†HN\%“máºæÞšïªï,Â’á!ƒ®<‹÷®ùÌ~þ'!·Xµ³w/á’,Y,˜$øªÏ*ËÒÜé¬Ü5è3÷ù¶¿éº‹”´¾ûV7²Ïk—LÏ¥m‹µWNìˆ^PkWoþ¾¼¾c´<íå~À)"&§" z¸ÅôŒ®ÉJ1½‹qoûGÙ^á •¥¾E]-¾”h0×’öÀ”6¹5¼gsñ<µÅ¹WÞÑ# pÞ“ÓШ‹Áù^Éš¡¸LŽ*¹ôH\?øÆ¤à1ugY§{ä#£Z®~%VMœ¬wvß^óSð§äÿPc¥«QZò‹-qƒÑ¶ó½Bµ‚íÊø‘H1I¦')×?Œjý:o]’9¥¯ƒ,8:mNžbZ±–lEˆÓ>wÒpÖ/on*cpn`zÿÀCòy´‹nEp}¦rVr´óUTr Gì5Ë]Ûv÷È‘t­~£¼í䓳ðx/XCzÛˆ8:| Þìðº¦=ÍŒBãVÐdçs]¼¨î¿Ou¾ d©GͬÉPè+ž„Ù8JÔSùg¡ï^íÔé ¶Ü$}•åµÞZi6É.8NäݤÕ÷}ËW±QÙG»V*Ÿ«}HÖ_ wÌæ°¤RÅBç€ßK~¬òÐ/°!„Àòú)‘Z/ÏPØ‘À*ûf3Øùg]¹‹Ï©N”áÙØ 6·õíH·m;íׄî½Bo„Ü ×æŽÆ¨/—›'ÚhPº‡zX…Öð&du Z¨ðƒ½ãæO6ŽÎµN²òC¹¶•÷´#_8 ª„£r»_^QÔnÖptí¯ÆkŒ·8(уǜź€E×ïDð+-‚Û¢Ñ'Yrã°¢ 2½å®¯÷Í—÷À` «…ÜÁ²EB=¬pŠ’;«ÔC.—DGPÂbÚ* »˜1Ÿ‘Žê°gLãh× é5Ù|)BnÃ9uë%ewàI«·ß¹ëlXb7ÝúfÎCÛ3‹¾Öc_ÙNtEÿæ×ï"ꑺ˜©U™Kר…=± 4ÛB;bkýIvÎŽK(Ä?¦EµÉ>i=ÅU’½ñ®Üb©¢“êOŠ6Ì&0;ü2%×ïÍe0E&˜~L²K;õqþ¤Ü cx÷HyÊ/Ó×çÕDó‡Jp©eGíW^Á|éç×ïÑéÖâ|ì-Ÿµ¼yCJ¿ëü ‘À°™ª´YjãÃ¥ÒÎ\fíd‹S†òz@žìÐ.+´ñ'W5×á7Híùä±'(ȵ|£gSØa¸¤ŸPF,Lsaƒ^}˜¶YÉÒû­L¿<ÛæQ ç¼c¡Ó‘œ]ÿ®®÷B0­Ÿ7<¨>ˆÀb-6 z¦n!5<¸aH7X/ àAðë†FýªÕ½]óJZ§… ·å–T$J9ꈥ$}Go?ÜIxfÜ2Çæ³ma\¬üšÐgü2fgØáùwqôRõçjçœ ô!m‰è2;4ßžŠ &[@‰ÉÃ%sÚ Ùßàˆ ç¿g^v“Ö…œGÕK1ÆQ¾¥¾Ij-ðCûºûE 0Òò]%?Hyøg"6†Ð>­*yA–f“ÈØ\oÓK]ÛÓSËŠ7¤¹§:em9y—7ŒCÉÎÇÕÀ˜&»A2ü,‹º8)Âèù¾¨¡g/B ñm lüE³d,"µßÑ5$¼1;UD§]çãHAgVâ¶s¶.ÔrеÄ`% 53“ï•åd;trXáUò{­ œø°ÀÅ£Zkð' \uèÚÅ+ÏìƒIš¢~ÈŽçQ¶ª$©¾kì7óÀOÚ~Ⱥ½¿‘>¸´uÁ+ˆëTèF·*Q2Í€×u-≬¶! ¹]޳#`õ*méhí 6î: LÐû*äEÑÒ£‰Nš¯e´3JW¾_rä_aHeª?Fïzgý+ÀÊ‹K¨TÃãz3n©Å iGÐU~rfŠn{ÁérI䪥_O|{”TŒä&Y'–z3`Û¿>íè)žØC‘Ì›¦øùbšÂÛTã%½T$½¦>žo§ c ù¥q>ƒ\FKEuÒÇÙÙæ‡šùR‡‡D”í¡¹ž!Ï«¢VmüYhhÐ˽$>O:|Œ¶ò|3üvb˜6Þîö--òQµõ‰Ç¨„Ó˜©¡Ù÷7¾¨˜¥é!íNÔ { k#´õBý7fÉ$D«8?µ„7îuôNËIíÅ]ú‘™÷Gîî6É]NT‘7¥5‹/e6žåz+ð¬tù„Q¿ŽšÜþÚró86Ý;3Ïøq§È¿q%ȱÊËK?Eú+5ë¨G¢C&M¼(ÛÃÞd½¸,¢¡¬ALøskÔ’yîßì?€ácÄ7$+Ç©ßîÖ‚­ d¢Ha. ‰y|/ uT«+-‡å¦?$%qða|]g:£áb%V€Xk‹ñì²’à¶=aîýÓ2„9÷긘ÜÙðW´âé䀗üi…ç(×Z§ßŽä‹¾ˆA—x£¥ãkÊÒõƒ–™ H yš[L‡à]æ¼N€>ytJ×—–eC¦ß¬F—°jjM—®cÈ#º-»I€'L_Ÿ½ò0°«ºcâœú#;‡7ßÍÂ/ùf Ý(]ƒ—Êb¤Þ-pHeâPdãÀ„„,ýªÇ¾N¡`TÎ'¡ãm8f£K:ôT%› Ä’éÇÆn|[@¼IÌV­…ɬ£`¯õr8S KÔÀgïCÃIX}ʺÈcAã?£‘M¹7 žÇ–y¢¿U"&!:Ø;(xÃåÎ긧•.÷ê0 S³ø9†üŒ/醳.$#$4cè“´ldnŒMŠU‡á„uyYÊ]æô±³—QO•Ê8 ¨X5¯¹r\ª/æ³î™ÚÛm UZ¶Õ¯œ R;}Wy—ŒÀÎö§4ÆÝmôúæûxB?¬÷©^w«Û„ÁQ=B®(à‹tdÈŽÛÓÎ~,½ØW㯽›ƒ„zJÝ¿Äwv£s&Û3p›2ak]Ë~˜œòï÷pYía\óÒsUæØ:„C>¹#^‘e&³õjVõ™$.†Êd4VJ«S´_7PpÝ«±Ár œ÷§Ç‰Š);KÐë0 +ÃY³”Ç%Zi‚=2”¬ªy¯×žú4xYÌaüpS>¥òÊGÉ.]/\Ø,|ˆL[8-ëò­+õ‚fõÕ©ó1­÷é“sç*Ó;ô)FöYxEˆ|Wé›Zö½¼Û.†£À%÷¥6álmØ qïû3" ôÙÜ9¼: ; €àG¦¢Ê_; ®ÐìR}î‰g&(PÖº%{ЕÁ}J…Ouè¨. ‡Û‡ƒã3‘ÜwZ[§Í… ˜ê ˜Ü =ë'}d~:@Æû\,ŽVkæïW]ù+ ÛDô¦†ÙÜÄ‹ééyµhKœ¤ûA¹N4|¾÷äÛ»BV Ù Å„!ÐÏÓ•‘Ñ ©ú±óžEŽ£6ŽÔCU)yDj=¢Û¿|P™r_¿Úäæt°åväxH‰áOes\‘óüA6OîóÑùè7fÅ`Râž—ä(ëyGzræ?$Æø&êQ¢ýl/ÜœPžSüw!#üТÝunî&ýU@ÔßÓ´‰¥ÂãE‰™šàî6ĵ†ŽÊ˜‡-cn•ê!Æâô—áµvü8¬ª¤&¯5v¼XŠ0£õšÂ#@³Kìùêyã·ôq`cìa0¡ËÎM{"IT`ÉôÛ®1€ã#™9ñ"÷ks²AäúÂÏŒtݨÑg¡òO¦£è72¤¡iåXW-ù+VÓE¼;Ë1fŸ‘Ÿ ••¶š¹L'û1Q¯èè@ ã^Ü^!‹4C¾ƒ ;€Q˜æ—ð²‹ýE÷»ã)?Ïò¯ø¥y¤*ÛV< X™é1¼t©-y-T;È<ºTµ%î³âÑù×[¾©Ê“ìÊbù$Åž¸L®Tæ¦ü´ÿj;_EˆÿÐi#–|JÞ0' [¶BK0ç¨Q/Lzɦwž‰ŒeQPÛc0šèÛO\\5 ~ÉLp(M|iEkÎBš9e%ñ™‚¾\ÈWâý¶Í'ÖÞòDOEÉÐ7 a@aPeP±é‘8Ã]|îMÍŠ´i¼­©m1¯ñ±}É‘»Kܤ‰Œýå¶"²+êrŠUÚùä\hq܄•¸ó}bˆá–Ò„ ¾‡'Ö,oêSä繫͟õN·|»‡»û_M°RÄ4-Ð.tGe8z%/!Q×¾„~à,e´VÖ–T½‹óÎä ξtÒÙeèþ k¼Çü½µªçË=î¾§þ–²Ãŧ"z<º ¥M±}N+[ž‹Ekòг8šr¸X!«E›DjuÂgKÆßÏ œ2Nøõ´;6¤mé»%¶÷Þø¸ô±G„C]x…ƒÓ•ìø2Å'9[ÙXùbEì˜DÔ7hÊ%w·¿ìΟÓû·µÒH\à œß…éFk¨ëe8ñåY­Ûa{–j“]šgtÔùà~\}ð‹{æ?ëòeß­ÒëÒ‘=îw”»‘hæ9ÖáÅ]L¿£Ññ¡Ž¼3ç+t”y_Q+ù¢zëch¼®8ß}ê®¶»°âË&w€‰6Z–8Ë^ocïuêzÍgˆy™ RÁ|ý‰HÇ…ÙDï@•u÷ƒü¤=C§†ä2ñ'¯5}ëN¼¯Ê,ño~Õó\‚cNWäñ—#?B Óâðžà“<+.4šSBëŠt#D-žkûS§ýCuC‚*7…Ku¿…xÇó³ÓÎäƒÇŸOĦܤ0»¼×É‚£çÞ?Þç éßåž&ŒU-ß#Á3ÀïëÍè OCŸB¢Rwu’wV—ž%Óp>bÉ]Y­{/xS–?v»š©ãx(½Ì¨Ü-‹ ÚÞ²8Øüìa"”y"ë$ŒW^ªd‹ãñ^yAÀo“î<./ZŽõ¤ðd¢î‰uëêR3o >Õs¾Î¡Í üå‚×­:q…Ï Awã¼%w ýaš u‡\ùÔ·õ9¢¤»ÂætiÞzXU)D7'èÆó§Vï,»_"kæ ÑÄ^›1fåà‰´—»òb›_·3ÁÏ"/Xgü1Þ,úÆl±L«;U’Õüì(ÎØá †i¿$PMJz´¡ÅgîEN¼š#Ì•”~ÌÑð:Y]|IvQ£æÒÑ·¼6×· ”B™_'ò¹ Ú¡¯`#·‚–ßÚNø#Πfëø§:A«AõÕXH6€mz+ŠhùÆ-¬4$)lG>ʱ)3‘)éÕ»~TÙfŸêuI0{ºuˆÏ Æœ‚X„K[¶toéí½óÔ$1²¯(žÈŒ<'Ñ‚¹õ‘!b—ÊÛ2&CÚ_oñŸ†…ïÖºÝXL¥{§ä~cT=cQç>{×Rs‰ÀѧŽMg—tØ2jW‡~n F\õ–}¸Æåàx5¤èäy+:4)qÒÞÌáI„ƒÑF GWçØVâía&±=wžh–·]ßïjãUuhÙS§JäÖzÒf‚û5ñ۰󑦢”<Ñ´Š½`‹VǵÂ×Rð Ä5]}jŠ·Z)kï«L³TðŸùd¼t¦î©qcPa€ˆWn®OcÊ; S .òW1Ý.­Tµæ—¿ð «UúNˆh$2ßxˆ«N:ì[¬zÁiI¯ºÃô òŒ_ÖØHÿX͌ӷ.ËÔû´ý®Æ7úñW—'zo¶9óWëü9’.^Ĉ&ºñÈ49"êèq{8°QéT¢kXq=ÛièhJl±Ü Ò¯Ä<>¯,ä¤ëºüëRámlÞ8ø°qÓvÄ">D1ð ¨’QÓC\3·fn%•Íhj!ÉçuÂð§åD¥£Öðl™’Ê Üxüü9$ä÷r­’8Ä´:ÇÓˆ^V¯ce_0“7‡Œ'h3R©wpí  €5•®M4±Œ›%S…ë89µå«NMG\¤J£OµØ"¶8€é2Âì avµ²ùS¨¿*æ@1}$u´"ª{yWDT·Ýðà>1mvß«ÃMŸŽÒ®|C}²:.†¨ãXli¸‰Ó MŽÚqŸ’£KùTkìÓ41›À@ᤱSsæõô$ÈüŒXfHÑì—• l…-–Xb…G«|³—¯5§@[?¬Ŭ²Ñ{ŠÕpæ”û1ür2ý¸FûB ÅUüî‘—ðWp­c#Š fŠ}ÃÔí¢]l)!ƒ@`Ÿo{êL`¸ Aù[ÖÏîį+,e+¹l ”ý±*+¥¬‘~ÇŸº¾¤i©C~>}ì"GK”ž~ô¤Å—_þ0”Ú%ÅøùÁýÿÿOØ:C@p$ÌwÂõƒCHü÷?ê¸ÿ t"ºendstream endobj 159 0 obj << /Type /Font /Subtype /Type1 /Encoding 374 0 R /FirstChar 2 /LastChar 121 /Widths 375 0 R /BaseFont /KZGGGO+NimbusSanL-Regu /FontDescriptor 157 0 R >> endobj 157 0 obj << /Ascent 712 /CapHeight 712 /Descent -213 /FontName /KZGGGO+NimbusSanL-Regu /ItalicAngle 0 /StemV 85 /XHeight 523 /FontBBox [-174 -285 1001 953] /Flags 4 /CharSet (/fi/parenleft/parenright/comma/hyphen/period/slash/zero/one/two/three/four/seven/B/D/F/G/I/N/P/S/U/a/b/c/d/e/f/g/h/i/k/l/m/n/o/p/r/s/t/u/v/w/y) /FontFile 158 0 R >> endobj 375 0 obj [500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 333 333 0 0 278 333 278 278 556 556 556 556 556 0 0 556 0 0 0 0 0 0 0 0 0 0 667 0 722 0 611 778 0 278 0 0 0 0 722 0 667 0 0 667 0 722 0 0 0 0 0 0 0 0 0 0 0 556 556 500 556 556 278 556 556 222 0 500 222 833 556 556 556 0 333 500 278 556 500 722 0 500 ] endobj 139 0 obj << /Length1 1606 /Length2 9719 /Length3 532 /Length 10571 /Filter /FlateDecode >> stream xÚíveP]ݲ-ww›àîÁÝÝ„ÍFöÆÝ]‚Nð!@pwÜ î,ø#ßwÏ=·Î»¿î=¿^½UµªÖìî9ztž³-•º«„µ“%PÖ eådã¨Ú;ZºATœÀʬ’N kÀ‹‘•–VÊhµwK[@B= 5@hàâp ¢Ò¤œœ½\ímí M=Fff–Zþ„,½þáyÙ ±·è^>Ü 'gG úñ?Þ¨ v@€=RS7PP•0È©êä€` « îf ²·(Û[Á #ÀÆÉú{°r[Ûÿ) Âö‚%X Î@+û—m@O+ ó Àèêh¼|ì![W 0ô¥P'€=Ø äfý‡À‹ÝÆé/BήN/Ž/¾0u'båjï ¼dU—–ý›'ÔÎú'7ÄþÅ p²y‰´v²rûSÒ_¾˜/Ô @žÐ?¹,k{ˆ3ÈÂë%÷ ˜³«ý_4Ü ö`Û2`¸m-\­A@äæûOwþY'à¿Toáì òúk·Ó_QÿÉÁ ‚lØP9¹^rZA_rÛÚƒQÙÿ ŠØÆ ÀÉñ·ÝÚÍù>w ë_ bø33Œ/$,¬À /€5Е]Õ ú’Àð?S™íß'ò¿Aâ‹Àÿyÿwâþ«FÿåÿoÏó¿B˺@ªŽ/ð÷x¹aœÊ€?wÌÿkáhòúo¢ÿ5Pø7ÃÿDjñÒ °í‹lí!²öž@ku{¨•ÀÆôÒ£¿ì:`k +È |Ñò¯6X998þŧmgoåþÓtÞ¿]@°õ¿2‘ç/Þì†Zz²†*Ìÿz›þ¥þ¢:TÛËù…ØÔ¡âdýŸ‹?’’NžVn+¿€O€ ÀÏé÷ßdû †óŸk ¨«½'Àè¥dο ÿ÷Ÿ+“‘[9Yÿ™-¨Øúe°þÓðÇmåæêú¢ç_gý¥à¬ÿq Ðh…º0ëd%ú.=+ZC”Û?*mÔÝÉ ×æüé‹vQA`µSG@zäº`…ùÃç0¶úq¡§o^3Î[ŠLÛƒ„ úŽÀ“|r?jÆ®œº~æí`vÓO‡z±>§ÓÊkð†|ºÛ£š¦%ˆ¯Ç[¸]‘Oo©Ý ñi®1ý­ÒêZ±ëapk é’÷n®é{‡úû:κ¶È˜?& Ð »ÃcÐź|$3Ô©ð‰bšÙÉŠrØvô+\ò-ErF ¯Tô{øýÚS{­…6à¤ÑOåväàêÜ•<ÙHÚ›Ôò3¨Þ†®êWUË#¾\ò©›âù"7öž¨g^:!ºÍlMœ‚{T\NW^,µg÷:NdýÓ ¶¤üH8g(L[ði”êcvŠî¾³_åíÔ¥öyµ; ¶W{W†`å6´R<Þl‚_èÌ~x<•íNÆyi°ïÊy{ˆÙ6¯§’V9¾ëЙÖí¸+)Í =¦/ÂZæþí;¿-§4«·D`Æ:¦ôÜðôM,€'pªú«^£t½Ÿæ>ŸKàÓ°Oøƒ[YæÕ~ʉáñN¡ ƒ?†è|æ³YÚ¡Ÿ>ÛyZ¬…á¬=áþ¦'ÄFbÑØß\Déûvé)‰bUO7ÃGø¬€ÌWä;yÌæhtôÍ¥–îH"òN*´&€Æ a¹•:">ú0ö£Ž(Ê»Õò\û^Å|þµÄ2mÿ§®‘»‘Œ ¯«êþÏ¥ª‹'Ö“žÚä—VØAž„È$õ¾Gծ㢉½;óâM«Ò91é=Ë®©ßOßÙµ”"!½Ùàž° ÃÔ²ÅðÏÏú>Ùd”lpUÑ3]g³­G”öKî^‚ˆYfäã…Ó‹î«#"9ÒTæ†÷8U±2 Tꃱ;_I¦³D¾»ø.7LÂ̯ÍÃ&ÿ—ßLühÐÏß¡Y‹j(¥O!†+½Q®18(HŽë’Ùs_:àˆ¼c‰'¦º„ÖO¦Ã37Ï§Õ $6=âÔHK5Œ—®ŠIäŸ 1ß1D)N³z‹CÝ;ö8f8>ýF9ÉëSÈ®ßûC£L@Ñ£A¨¥2ÕUêíÊ“¯kÍhQyÇ·ùœ¡‡ ·u²Œ•£…àã8šª¹ç¸ âÁÒ½z¼ë'8$²“,´¹ëwßT¹Ð[‡1«¶±ß Ïh 5 ¢ÅhXkj¥¿D¸ê.^3j‹þ¬’rpóˆ…Ò›2˜ë„¶×Lü–OØ£PyC|Ëc;oCìMú()Lv™¸%Žé0MVIŸ°!qÁxÓÍÙ~s¤î¿­ë°þ‘BŒv‰û9ŒèYÿëÊ.¦ˆW¢ÄHŠß=îÛù‡9Ü…ÇÑþ}çE»×ÅÑÅú펿‚ÅHÉý¦nfµÌæêqÇV RKvðjúlký)ÐÞ.s™OCVÚ»¬q„¼h¶·&c—y©ñ‡Ï€×Ø5hZ2wGñ„Zs&<–‡²äæÙqr?kQŒ²m…ƒ )Sy‰a22GåÛYäSÄÄ]aE_Ísš5wöhcv»âiOHø¤´.jø$F‚¹á‰ÃèE¯¿êð¼#ÓÚÐ(Óš:µÈ¢x+)ˆŽX`1S[V~óª$Õjd‚ R´ñ|£>æBQIËîpoÜÞ‹sÒ†•åfR‰C7n|Cn4к¯FøA$Çù56±}1°õQÖ¨ýÂ+ÿüÉT¢í÷v¢ÛGÄa»7DAåp¯n¨ ¼{kaú‘ëWæ0ˆÝ±ªºò FbQ¢‡Añ¤)×˯µ«L ¡.N»MÁÃ˺:Ô2³ïêìñÏ0zø§û EœÞÛÔÃ@æqï ><çÑLÄ«óʉ< ¥iP-«;eÞxÖ—V*AèÞJ$Ÿ¸ØÏleŠóÂèveë~«;•|<Ñ4)z•f_°c=£»s;^mqߤޓÎï#¶PÍ‹‡¯.òü°=z&‘ÇàÑh®^ãRF¼Ñ'‚”sP¸~‹„ü®@xÌ©j%eò•-zvJ[ÔZÕWäd~î:2çïeÈ\‡ˆP—³ŒZÑû½à§7Ìü¤¦@÷-à+†¾üœµýšmÈŠFᛪFö¶ˆ”/W¤”z<;3Ú¯…Ê=·¡°qC@>Osé¤Ù'.~+cýÎü0 ×~à© *Ø×0B*†æß´´Ú›BWû  ¿_= ëÏnfbûG¿m÷·6ëþӉ™m¢/]¢ì‘uì0.Òcاv7$öåçÿ1Ép'åÍt#²(óåˆn$C¦\-ÁÂiÔ}«f®9ÖOù&P*«¥Gžñ´Þ\<íð`â`Eâ9õÀٌŽ÷^ý ?zÊDùù‰1ž§¿í&úM° œ,—¦+}„zˆS¦5Ý5,¶zßzgiõD"ÍIi8&Â6/ü‰Ö$¨7$Addù x_X‘³±à üݽЗ5IéífÏY¥,è| äßKs`¢á¤*Œè:ƒTqû/ß~}¥èÿ>çJ%gs-TÑ;ØS¯â­qx‰˜÷¯äѶòõÎÜ­ yMª{1¶¼±È0²éSZ„!öÕ\Ÿ®ˆ:s1êÇ£{Zo/aÀÛ-ÞÁms×ç(vÙãÅÁ’´cÖʽ É©µPæ{ðЃ(Íó±æ ‚ˆ9k Ê-—†'·L·¯’ln4Ädž5ûT3 …6p¼/%°ƒu··9.@‰q_jÜ&éÒ`˾«ë œ)ýLº=ú"elðêîÎCMó‚bàãw’NZÂóÍXI+Oo?´Æšè'7kïïÐ=ÌÌéÄfÀÖÑüRaô²^QhvrühFCªŸ 5&ÝWOó [Ì'[®]Õ9ófuö™×zIF ×g щK&O?Ccí # ˜8#·ó¬„wCM(ráBƒZG»´êîè¼\_]B4·ÆeÂ…ÈLc+´à±9Ñ'[àXÎVÊæz4‰“båµ5< wÃPm‚ cm”óÈ~ÇW«á¼o™X´£+Dë&ñÞ.%6¤aô‘Öj|ýBшÅyéJè@ü̱!iºíù“YEÞ²Ûlmf¿êd€‘øqiЇZ)ïªj'‰€š=ðnNg%‚ËŽ£²¾†GÓÝ+4áC€¹œÕw´BÏ4û4ÓWYÏà"ÎV§·cß›¯ÈnÇŸ«™xg`‚¦*@¢q¦2¿rêÁ$ÌÊÊÕ–hóX³ä¤a¿UÅ]ü¼”m?ÿÞòu —¿ð9Uk™U›þ’‰Ó·¡Mäm =*Á%—ÒžB:fAš?Ë÷KIâçí ¢lh{×ÈždsP¥ãXq·®õÐ\—–âv¾òíçGZ—ìxMÄ"÷ÀùqAö}ׯ³–‹ÒxÖhs¬øJ*·ß–=÷ÍhÎsì’¿l®!¿wOÜ%ho$•ů=Ù¢BΫҵT¯ø´úJÓÈüª!¤i„?`Si—Žž 3$f3U¬eBê¥x\йã8ú$L)Ê©A“5gVb¦ßðfxÃk´h¨ãןÆû÷Aw°;«Ÿtu1‚£u å§£cCð Ë?[ÿB?ý9…SAø±Õ´«cÌ›îL_Vz»1"‚֦떅p7Å…{µG5Š–Ž>ÐB]J¿!.ÿ€Bö#Q8Žñuv«N?¥ÌZ•]AÒ³tÏdÇQŽKʦV} =õlâw±³¬K\Ú™k b­QÕ*NfJ¤˜|ð™‰A‘½Ø: ”];cÃ/ÝÿÛ;:lP÷CÊo¶ïH„Wüѱ]‚sÔ8aß“¢Öøú¿-Q„ÝÁã4ö©(Âàº^-o»Q~(ù­(e„ì»É§Jœ«<-‹ÓêsLÜuGiIF®ñýà«á·±ïD´Ê¥–¬³mÉ “8ª@*‘¢ÊŠÀ_œ1‰Žñ€Ó`©,ÝV‡¸Lì3d %¼=,²¢• ½V{Fˆ> ò•P§á]ç  ~¨À2Ç£&'ÏiŠlæU„D±ÆxÂþV<ÿZ 06´ºLáþìh% sc\«§s€’D‰ ëÛ¬Z´‹ºa ñÛÝK 2zÑÛ3³ß¡LøÐNÚ ³üllüØnMs’2œi|ïaÆiëpo1BX÷.Þ$}{¦ÁÍÂÇ9Nñã{æ È„Vb=$o~‡{BŒ6%Êža¬Ovd#W%Ť NÓJÆ%ûŒåi#07LJ)ž–í±U.cF Û.O²¨“IÆÙ‰a“c K`S,™è‘tw NŠΠÉ|'®×ŠT:Œ‰‚Ž@lN ¶\QÝMòE®¡¯®> €)S±g6á †¥,i·ÍŸ/¥¯ÃÉM ʬ«„ÕX}æÀP¯£í§é™'¶Ð×Ã1'H𧏬ë"ÞqpO7õÉÅ­ßàÙðÞ×Õ02.é"ÚQˆÊuðbÐ{ݨ‰X|N„ä³]Ä2¸tlL´ Ô·8à‘½¼#ᓹÝi\çhËEzª×—SUJÖ Ø(>h]é5ew]·7è°l2dJ,ΓªG'0tNì{6>[é _{ÖI/ž0†FGñ…ˆhö jãà5R2üÜå({aãwÅð#>_¯}}r?!˜[ ¹Ã*ÖJ( ®T3 [<ðxÐø£°¡zêêjÀ€ÜׇFȼV˜‘¾ÞÐ Çrμ—ÝŽJíºV…&'Ꙭ^ÅÌÉ­ðÑJÊѲ—``Æ>©¾61¶|5,%g§46|Ñ&i‘¬×ã ¾&±…ß&kd À^d#‘ }«7dkoЯeæ Ïs{~r$4 å1½\œ†*î3FõïÝuUª.mþæ ‰ú`‹ÇÇÞ.…£\'5ì7â97ƒv~”Ÿêþ VÕ‰Íó Õ{ô1Ôæ¶Dj‰d’Èãp©7DàÞ¿gVÍñ½0<”Ïï8®  ‹žkgôùHE® §!*aiXá0X›àA43äÁÿÆ „( ÖÆ_8¨IÑ7Щ2*ÓS G/ZPÁ¡çwúf0¡Žr/ºmHMÉ÷tRtvÓ¹‰ÈÈ::Fº‘nÚ"—w¹ïfbH¿t³LbÍé§;Îæ!`îcÐm'½Í#àÁàÚdðƒê?üîãx½ˆ“U<»ÇʽËo˜Hihæ]çORÇhmE¬uþºW G–©Š¼“ƒi`.'õ­ CpµgxP^—"=…ÄÑÊô³3_!Ÿ/;W3løŒ§hŠxW?b=Z–H¸·ÐÖÑ+Å' øy‡­“HÜ@Æ=[ßä”[Œ¥º¦Cs—°u#k8q;JÖ6B¥XšÂ~ào.‹þ¢ÝÙ½úINÁ0ÎFÞ Ÿú*Ã.BLÈÓøNl‘™Kf9¬„Û"M†„Écã½è®ç«RS¢ôÒœÀ~ +¯ÐŠ©Ý• eKp¼k‹Ý¯Wá:n²((¿+Hˆ±äíÊå›Ññ]u@A12ÇÂü”%Â`Nå/ͱ´zà³WƤìLAñ3£b,(>¸Î®é›Ž°m¿5Í,û–cBÜ[þný½Ü’(š‘ÞWfGCŒ¦¨oæ»YuЖ¼„ðù‹ô F˜~É{Ò ¹šTªÚ)…ˆºéUÖFÅû¿ä"……y{©êe‡|Oe¬øYØl˜ÎÌéS†%&}=mó¼Oµ½¢õAËàLØÌ8oÈÙR^äûŠA·Û‰}“œBìzƒ´ Ý…´ŒRßùx˜µˆ¦Þ#.Ï)!å/&EÇØM&YmÕNB+¿ˆ†÷Š.¾ºÝCq~…õ }\,IIqÊqb<Ù€ eªÕŒöĨÈSú´5æEû!—$ë3ˆ¯¸15EÈùžd×§3ñK1Ê|Ò×c…©0Àv ÒÓ=LKé)Ö Q@›|es‚&7L)Ê]Ëò¬“F×IàϸdG>v»‹Õh£ê’PÑyË,ÙIˆ*’Ï^ »£Œéj·©Ø¹™ÒÇvÖ­Ú»Ù¶ÀæÛ·ïŸwTö¼’´j£ÉV‹Í:i5 4Òh HM™Çè#)$¸Qi(Ì¡*A®ø¦7µ°"›î6Ëž¼´lÞÓò¦Ž¼­o¦ò\­µ¦S<ºÚUb÷ge—¿!›õâ;¼órófÉóÜd!,wŽsù’‡hBÖÛkñ³¨õt±W·8uUÕN*ËëK¦ŸÚ\âÕª+Á:1ŸÂx1L> ±À©ËF±l°Âá¨'½ƒeAlÙÄÚ»©+äëè™G¯™ œA·b~-Àþi=ݽèÖºH¹Z8h7dç§HE®Øq]$l]vâs¯¡†FÛ©Dìë e/þU"ÍNkzéW2_2æ~:m¸Ç#, k» ÞÆ±Ê/ávžö—3/%x¹%`ŸqX?`},e r9/¶Yñyï¨OÚ‰•_<•ȳ÷šJQGr±&”‰1Bf~Fle³!³­^å»ôå„Tš’seÞÔSµàÑŰ* lÞ.#\͖ؔvÅâʱE ‡Ïðô\”!·»™C†³AŽâEôvv;.a5 ¸û|ôÚcÏU×mREÍvÄýLIÈÆ[{>dÜTú†ìSþãBæ9oßtËýœ¸0†ˆ"…œ³"ª·ù“3…‚'Æk¤z7𖝬f¢?íIJ±-“üù ¶J.TÝ”ãæh]Æ›'§ß«h5^ÈÉú]ÉìË\üäœlA ÌêŽÀ©A<4äÛG§Lep@7iË6Çâ%zÛ$6E}äcÙ]´ŠÄ7òs©Þ¦òŲŸžèe Có:qoH°b([È“§³ä–jš«n¡)_à²qmëžµá‰)0xIiIí ÖjÅÍ—°Úæd¾•ƒzçÔp5'‘pZ”œ^׺Pý„;òvºj`~]uSe1™1úL.Ép5C¯gŠUÄΚ­ošw=Ý!è:ÙoƒYÔâ«+)V“O»DZœ·†€JÒ@E9l6“êD+·XhØßÜê/”˾ï60Äh½žs2ÂaÆ`×jîJÈz0½cçávšŸ!ÅÆ<Ô7«ÒN=?iÝÁâ±+Ñ"Á3)ýßpGԖ溥m¶%0¦^þ½{x§Ú¿öÍðܘQØ¶Š§åf…¯¿à.—Ðý.À°›k~õ,¢ûøh…Îâ´ð§íw™ïSœ´1O¤½Â@ IË †IE&=¸éµNOv4[àÜ^UÀÖ h8_Ú÷ó²sK.œÅ2ñPÙmð±÷µå‰Úöê©<ôöt•NîgÔß³l¡ ß-317è3ùd~*M9#›Œ{>¶ˆ‰×.Nž ò®³Ñç—•\¹îg ÁÏ‚û:>“r¥žµb0áîýÖ6-꾕숃õEXl¥RÛU–ÚÙDK„´ESˆß9ô\KC( 6bþˆåF¹ñ“`{´<]½BÁeËp t…(‹'ÔˆwHY /óæìûâÉ4×^Ç;|&(»ùÜøÂÂ_ößWè\X賂듲ý½8âT©Þß\WãPÈfž{F:oñ_?ßPLî'Òq¸ûZ|{’ ;Q‚«¬R Ú™+u KvW{7°1xèsÌ¿8ÖŸ­ãÀ8èÒ&ÙE]t»W¦À ½x—µn?ÂÔïqZä6œÞ¶ï} }+¢ƒ±ã±ˆ¬÷N3iF"0q/íy:wC’±Z8[éNmÍýº1¾þ ³Jhë°eV};jSã}vØÔ³½Z¯™Š-W|éCq‹–Nì0ÄóÃé·öv<Í{aô'y T´Àû ¢½¬'wë$‘Û7zùÁ±BFláz¿'ƒ9âã6­Ùé½ÝüªZŒŸBN¬ª ¼È\hTPü©7"§¿*Ü"CCníñeÑÜŸ†í‰›ÑÆ“¥f)fÒJk›RçU“|Otjmß;ôXx4,¶çtŸÊÉ?ïžùYU-09šn²ÛçQ·)RMÑsñ*̦›î• ëÃìÞBÚ©ûÁ–{0º…Ö3Ôœ¦W–ƒå¡6êãiU(+,A!EH+Š~Ûbº^ã]¦k2‚éEຠZwâC®7ÖÛw.+|jÏŽÙgºŽÚj[?¨‰ {0Löž ’LuTN­yߟ¨±d­·6Ú¾û]?J¿&—Œïz¬±ðœ'r”ÂÞl¥zKÔ}ˆŽž©EÀ»/Ñ–+ò¬ª˜ykŽß)ï›Aĸ¨¡Ë6~™Ù{ìîí¡*•ç oªâŽÛzï®l’sicbh „5æ¢`qw qê˜Ãˆ ´1½8V?µ/ä-hÝòâ´ˆ4ö_ AüÒE¢ëŸ&\$³º¤9•Ò}$½GÚ¼ÄÞ*#k³¶Ûk`Åâ%$uQC‚‹ììD£´œ$îšáÎ}Æ•äoqMŒv$\ÉDâ):Yóú” ÁLu㿟¸—+Þ©Qš°ùøÉpØ!uEŠñ”§Š811„ÓŒNPß'¿»Y‘­ÎVÔñL³¿Q¡13ÊF½”`3IÒëfÑ­4 *ްïA¹æÿ^´ÇÉ͘PÛð!Sõq25X¨¹vÄpJѳЗç6D6Oê5¾ñrëö¸-2Î¥R#„rf>ýh›R³O JÃ}¬?ƒ?tãÉŒÕ{ö5,ï¬Þï™h•_´aÕÅ¢gÇž*gy_ËÚ£ òX§<ÿbʆ,N~"Y¹b%-rÚí¹Ê+5”öä`¿»$-…ã=•2¤¦}ÃgXîœ åè#Ïy—ÖÓ׳¾Ýǹ»Ê¤X섘º[Év·©Pš6_¬áyÕ¤&»=S¥…ÅQ§†‰¨­“.ô\/¬(ú/æ Ó+qŽ:œíhª»£ýãÙŽGÙÿ*Y¿ÞrÍ| e‰,‚(1PÊï „uû¸±± ›ZóEü♥Vйh ~„a€­ û%vpv¥Ìظ `ÒàÚõÉe&D¬"®(³c”×R ;s3« Ò‰Ýìú4~o˜ùÜhã¦ìÇ_’zÑ#¯$µ(4²_rf8™zTßñ¸Ï„ËXÊ÷× laE<Š“OßÍ÷îž©QÌq%ÒFvŸnjÈçOùE%h’W¾’κIlýLÓ]ˆ¥ ÏAÑô­op¬é€‹y²~§æ€p+Öÿlå [0ñCFÌÈW¹‘ë¯>£“b®7_ý'~±¡dHsˆwôñìBOïiÎ(…™J¦D¸Ö=¶q=2 ·\Ó;Š î†Îíü¸²©‰Q#rÒ\ºð¢ÑEŸ é‚å-ÇäT›÷pÓ>cÕ†“Û=€Í”ë/q`¥ý ‹y7‘Ï ™Õ•¯ÙöBµ!ŠÛ!EßA»7Auý¿b‘ýß|õÓª—7fKº,}þTi 0ÐÇ¿L´–xs4|²ÈJ]‡pmÿäR‘Ƽæ°áÖ‡•],+|e…®¸—•&®'» ˆ®±j~üvÔgt÷§_LF.l–žöÚà¦Ü`?‡L`ǰE~Ò žðîdìKküqñ†OFŒ†CNo·] àGA¤yg&ú8ÑÂ~¶ÛÇô6ÚÉqÅ"ѶÐäô›Ö\Ãø?õÖÝM+âŠ3âô¹Â=–D?•÷Mø8²Ø1¬>gLq¤¢îÍH®Šl~¡˜ÄßLzˆ¾‡Tiw cÔf9BFcü"SlŒE–?WÂEÚ¤sàtÐÏ&h½Kô¤1»Ó)ë#†ˆlÅË»»Kt)=t ÔäG_­¤0÷½Â¦öˆ;¦à\î}$¿_³áyÚO‹Mƒú[1ËÙÄó Ï®¡WQ» ‰¬E9ÞðA}>´?s½…H­¨£¬âØÙ§òÜÅ÷I¤ ‹g†»Ë~TIª§hs…Ìa)DT<2ÑÉ."´úcø‚0á)%€¬-Ü–R;ƒ#X»þ‡¿mCãEW¥ˆ°/ M'®®›À«Õ¢TÒ—roKÔhÝ®“Í–[™o/o'L¸ ¢ã# \Èõð/Ïs¾۾ш„Û5d2è+×­¿°Cû¨¶ #žð(ô¼\)/‹’3Ø7°ïÒv‚XËC”È­•Ô/箨$Îmq²ÊìιI Ï”;EEA„ãvF“EšŸz ó8þ—êÿøÀ ´p…:9Z¸: þŸ­ƒendstream endobj 140 0 obj << /Type /Font /Subtype /Type1 /Encoding 374 0 R /FirstChar 45 /LastChar 122 /Widths 376 0 R /BaseFont /ZSWFZM+NimbusMonL-Bold /FontDescriptor 138 0 R >> endobj 138 0 obj << /Ascent 624 /CapHeight 552 /Descent -126 /FontName /ZSWFZM+NimbusMonL-Bold /ItalicAngle 0 /StemV 101 /XHeight 439 /FontBBox [-43 -278 681 871] /Flags 4 /CharSet (/hyphen/period/slash/zero/eight/a/b/c/d/e/f/g/h/i/k/l/m/n/o/r/s/t/u/v/w/x/z) /FontFile 139 0 R >> endobj 376 0 obj [600 600 600 600 0 0 0 0 0 0 0 600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 600 600 600 600 600 600 600 600 600 0 600 600 600 600 600 0 0 600 600 600 600 600 600 600 0 600 ] endobj 133 0 obj << /Length1 1612 /Length2 13743 /Length3 532 /Length 14601 /Filter /FlateDecode >> stream xÚíxUp\Û’¥X²À"‹©Äd±ÅÌÌÌX’JÌh1333“Åd1ËbffF‹Ç÷¾î~oz~¦ûkb*¢"ÎÎ̽re®Ü;Nrbe:A[# ˜­=#@dmäì(kk#C§4sü1²Â““ ; @¶6"†N@.€:Ð 403˜899áɶvî 3s'•ª’:5-í×Zþ ¹ÿ»çÏNG™ €âσ ÐÊÖÎhãôâÿz£2p2LAV@€°¼‚¦¤œ8€J\N ´:Zœ¬@Æ1ÐÆH 0µuXýc0¶µ1ýUš#ý,AG€!ÀÑh ú³ èf ´ûËõ`t°9:þy€f†6Nzàd Ù[9›üEàÝÔöoBv¶"¬ÿøþ€)Ø::9;€ìœ²*ˆˆýƒ§“¹¡Ó_¹AÜ[Ó?‘&¶ÆÎ•ô·ï̯“!ÈÆàtsú+—`r´³2tÿ“û˜èoÎŽ ³2ø pš:˜XÿÀüÁþ«;ÿ¬ðŸª7´³³rÿ{·íßQÿÁää´2¥‡gbþ“ÓØéOn3 <Ã_ƒ"icj `bü‡ÝÄÙîß}.@‡¿Dõ×ÌPÿ!ahbkcå0šÂ3ÈÙ:ýI  ú¿S™þNäÿ‰ÿGþ‘÷¿'î¿jôŸñ÷<ÿ+´˜³••œ¡õŸøÇøsÃØdÝ1V†ÿ[¸¡5ÈÊý¿Øð¯êÀü?àH:þi† ÙAéÿa9ŠÜ€& 'cs€©¡ÕŸNýmWµ1:Xl€ý»™:&FÆñ©˜ƒŒ-mþj=ë?\@“%ÿG¤¿©3ˆˆŠ i)Òþëúw”ÂíTÜíþû·RdmMþcñ†­À“îÏ ¤cfa°ýIÈÁÄäõ_dû†éŸkYC'@ûOÉŒLþoÿ®tÿFÔÆØÖä¯YQv2´1ù3^ÿaøËmììàðGÕ¿OüŸ‚ÿ}ý÷ n@cøå[cî@‹ÔŒ4§Z¬œÁqíÞn&ÈÁ »’z•Â|ßjÛ.ŸÔÐ-Î ƒ×š ú† ®÷V÷ù»·=)šýánL+Ê®dàE¾)uO>ê:E;;í¾?ƒ^ RÚ©z¤çåœÌ&”£Úþö¸¢’^ñ+ ÁD;‹Üå#µ/©K¾ï²»ÏÞÆ)?b0:PÀÐj NN)Ž(ûG†º®¡{öðh³c>‘s»@!QDøÚgãñk©Vx†Qä5"â]·]¾©ÿôÔË%'Ã% ·–yV0Ë[±i“yM„NkãçIuhÙ«ÔÀ¼š™ˆàL˜àœÎùXu&uÄâiÄÿÐ{3eI0™ûƒpð⊪×1Ô³Öºšæ¹çsÎìФbGÉ×f˜=rFº¡0çÊÏÂ-vŽä:‹BÒæÀ×Ò¬P›˜¤þ‡9u#ÞöîiËšS“]‡Ú lú“¦cŒãF¶Æk‘¾_2ƒWZrc¤E§ŠîíÞ.½xdqenpLÚU©w %ªÍ2³*‰Ã?‹Z‘[Íñæ³Dɼ9CÉbI?cÍfކhœô¦»mØ ¥Vûy;÷c’ÀOÍ}/h°ÊóȬ­5 Ú)Êo›5Xj¢¹Ê’‰£jŠì_†F—?Od†òøñÆ`Fê·?#ÃëÔÛ°Òíæþž%ñq€¶|ѵ|ü éñYÄ >Ч#çÖ}4ªÁžH1<ÒDŒ;„(v1ScTàC1Õ‰¶É|à8xXZpsH˜–ÐêÎñ[A"Á;)éÕÆEBÅU­å™èµÕ$ J…îñý*hcg-2p\Ýœ—˜ =ë‹Cx%éö´>Íï«o$“5«öῈö·&3šìbfpî>Þ9Ͷª,â£z’ü>¾juJ>‰¢:Œãw€„7ÀÒ‚—fYPºÕù5~¥F@Äm̸´@§_‹fH>5•Å€a.­„ýêLÞí’lÁgÕeñ>J—|IG¯e}Yà ¶ešË¥îGD¼ž¸{™žÝǦ¤ÛÃü)O ±$t©›B%’¬êƒ[Âg×l;æª/LØÄSÜøÁÝáKv¤Ù~³šV½¦c&ys¥1ÅCó~Î`QÍuV\÷Ьí9RÚn’BŽæê}ç;w*âw'Hö%%Èúîž ë†,2á!‰ž '*7Û^69½mGÖzöE4×Ìð Åõí·%µça \H»ê@#LвŸ:–é¹ÓÇœ•µáí­Ìó¹üIžßMŽ23¥6ˆx¯†î/{)ƸûñýïáßwÄ,SñeÈ—_tঀ§”ôUž[(ÖM“)0O%Œ;cŸ¡e–™øšKË#VŸý;Óá ^õ}øž ~6¬¨ÃyÓ ÎÊ=tëÝÙŸ6Á6â²,ÏØâÈ<‰«Z˜GŽeø()/Ðz¦17Xê2o5ܧ°‘§ x Û‰Ê éf3]`¨¨+›]‰±rò¬Óù’UTüÊ!$½{Éɦ)„æ«U=¯.ìј®XŽÚþ¥â«Ý07™Ú]StŠf¤x9"²BHàŽzŠfŽ«wAü#„©F8ªLßû(vK2ÿïdr†,Îëj÷ µ^¾–¦¹×1\_Mmi š³PohëÅøs˜äÝyçBæÄµesRß`R¡Ì¼æ| 6üRPë ýdB«Q¥VQË¢(NÑ„ ²g“N,Nø„œE`ž0+rù©‰^!ö¹oE‡Fl3ìPØ 3¦ÓíÉäŸbÅÏ½Ž·„(³U‰Bx,˜v{5y‰l#>ù_z#‚јSfîãò#Ü&=aÂÜÜ²ß Nèñy1O>#ÆÍÿtô÷CÛðêes&x°óâ3Îë‹Pm–9E6± –göÁpqzجÀwdÒ=¸è¨ô]ôxÈ‚›ŸkÝæ³ýaQqöU?×Ý‘¤’.ÿý~KZ`UÔO}ŒAVºg†iewoßý•‰«=f»Ô]âX¸•ÝñKà‹=ó$¸‡×z· ŒQlëáR»¹¯›1ß0úÈ®’¸/‚µ‘ßÝBćÓÒü ªE€¾>uÃâþ«Z×ÅjµÆ7Ëþ ßCº:ûÏ`)àÆ:º®”Í b„]WÊÂÖËdØQŸ«3H+mb&ÁJ°?Ú8î^4›(*Ä:|ÁÕbt…Ù)d0J¥ øomn|Õ×vù^™×ü &R°ÝÓ©˜ßÆÖ#Á)¶±´~ÁM/ì-Q·¼éê›Ð[ü„d¾Å)!r9 Eõß®½†œèøÄùƒqAäR*–Ö¥6Œ.¬±‡ !ŽÊ:_–¨Ìj7 ¢ªM$IlÛÀ#.T¬G}Ѐ’Ólßœ­Ò"ÕpÉ®~NWgév@§6|ö0‡i`(q,Iv‹2› ÚjtÉ߆å·%£úéh•ÜoâéˆÚ5sGîÑG·²âï;Pî„&çHÍM9B5¹Ï•Yêà•Ù: •°ƒ³e ÷fŠxõOIk€-³ Ë.”ÙÇÃD=w[='=·ynÂýj{H]‡T­Ín%æM[HµºVìß´»žÝ™YÉæv5ud5-ÆûžõÙçÆhŸ“ûÇ–Ÿ_[V’„ðXˆÕâË¢7„¡ufHÇLm*ÓèQÐzƒ2ŠQ•5*ÃÌZÁa{MO¾ßûÑAò|ƒËî¹VÛµ/#ø¤ÞÜ#‰gå¹C©À—®X••_TfÈt´0ôxÔ×oV%‚á·¨b\þ¦Œ‘˜Ö2æÜ©„Þ皬©!È«ðÖžó¯4 ¿º£Ÿ•O‹fK¤6wç]!¿‚.e“ÙK48.ÖñŸ¿Ìïci€1×:Wå˜3˜]6K½oX§¡•ÜÝcÈ¢4çÄÝ•¬ÇÔYµ´"tgË©6 é‡ý¬€.iax‚ÿS+hqÀ+ø¨jÖgAAÂzô€ÀhytÌ`sÞ¥;ívfm¹6Rˆ2CJS89¾}éó‚‘áÌb˜ÌÒjÆIº¤ÍÄŒ²Œ1›>®˜Ô9³Í‹SO—r€¤žo·W>RÌ:“žQ^à¸ccÙïøŸ7a Ë8@¹™fêö»®µ¶À¯kqÈ‹ÐKŽkõhØ ŽO.e¶cë LgHù©}/‹Ÿ]¨ZUfÑÉzËìîS]ïIg¼ƒ;Õ†ˆ’ÃZ䩚xlU¢¸Øq¾…‰GÑ6oŒÇí`–Ø`f?žãÎŒ­¶9ªÅ¾ºòÝœ¡zz¦À­UXAfG EÆmØGæW_ÌG¼GÞÉ Â¦ûl\{—‹°\%} ±5•Ñ…TýÝZ}‰è8‡&§Åª-¡¤Ü-xfÄ Ï™úµvv©oQ˜¯¬ÈŒ‡±ñJ¤±¥Ó]®å™ð sfó•Bs¶H7д;f_©NoªÀLà,¹fã†ìŸš™@ù,••¶ ëÖ[]a#›’¹É}y"U’ÝT<‰w Ž@ÔJvÆÂ õbjÔ¼¡õïôvpE•m\YŠ¢ÆVà”•ÆBõ9nUþoá£9!h•87®@ÈÌ1£l …ñ"¿ùÝG”479ç[^ …â^ì…8¨N¸Íy¾Àï!E"Liãb.*'þâ(줟pȲZl2=ÑϾmŸúžh•[å¼â(¶œ†6 ÒÉô»¤yåë3êûŠggøF²=øœËS¢…×¼°ÎCÚå+áw†{~˜Ï–›?Ú•væµ4õ‘¤šÔ¾ua..B!S9ØÑI^Av'ð²S*¸C¨gæõ2¨ÁK0 Ôßx·kê}žSðÓ\¶¬8­i¬m;?[ʺ+gÒÒÇ›3щ],±å¿n™?LHÖóòjj—øvšÚ53צ°×ä²Éôþ0¡\«ÞL×> ˆ?>û¢] 1¨€ê€À⢱}m›mÊÉ|‚ª4¿iˆž¬€ê tÍò}Ö½Ú yœ#å,àÝ4 œ]ëUe¯îmd›•ô; ˜âW ÷êÐi4œRâ«ÇS•ņ"‹:ôˆÖøŸßQl>ü¿ZèˆÞÈÍl>GEÞ'¥&äEˆ³^¶VYÙ˲7³r=Ý™ŠÅÜ®°_áöÇIå ­Ý©ÐßúR*ì*ŠâÿbøiV9©ë÷énS0ÓÎã²A—f2µJFŸ$Õ&÷;¦±6ôÓfÌ!»š „N.]Œ[ÓtÆ0[¥oUÕÃh-hYå4¹®q w? îïpŠ.y¾(·'× HÅ—ùhÊŸ»M™ââ–êL|`]q>‰‰skÖá½&áW˜Œ÷™ê瑉)&€P£‚³j a, •ûúS•óZÚ²b­ÑŸ2N•A Á6(Ê/ÅZôº=?p*ñý&ìòZÀ¨ö˜“sUÂäÂ#’÷j¿ްt¦Ê©A% ¦¤S¿£2À„JÌQº¡³Ìù´~ ‰š7Ù¨Þø$B_ðcöñÑß…Ã<‡Z:hjó·•IÙ§ ßO ¿BIÒoïWÂO\6Å¡†$¨d(kØU3p¶kWããý7<®æý`/µÌ€Ãn1ýG󽈫˜‡’‚`hQðE Ño<Ìw‹‚ëBÊD«,¦NÆþ‡—¹tÃßÙB5ãN ì“p¾mê,DÝç—#eýjkŠ’ìõ:ì…O-âÑÂ,ÊN·jǪ¦ëÑ™| ”íYXGZl:Ü(ªy$¹Å¼d°éׄ›Uq"I3 1we!> üÛKŒã [ߨšï ªƒÒô"u´‡ ¿O¥‘#M„Ϫ¹—|hGQççÔýÝÌ^±/‘nŽ|jk(Y¬?̥著ƒÛWò ôêø§]cݹi¥²aŠfG³¦¾û+ˆ%_—N 鸔 ¬üJŸ×QÒ6,Çw|XûR?[Kšè’d& ÂûœÎÓaÚû JÎR/äÏÕÓVÝjÚÈ••€E™x§)¡eTýÌ8ƒÈËÅÕº‰wï Xx;@¾)YáôΧ‰.ú€Õ²jçÇB¤ Ï ¡ï’§"béFÒ„ýwp*VkW6ÑY¹wiñXº$îšSªÍ´:eˆe‚ vÍdc«-×4ˈêZ"d2DJL8V5ZÉ~P;Šè–Àqh ²xêTÊí"*⩎ýèä§Ÿ´ê¸—†qa BP(ÐÓ¯² á[?Fö»ññ͆-lÎ/ÖŸ|±HÆ ó‹V1•oT•ŽŽ¾®";¡^\o>þôˆ9Òº¥£Õæ:Ú™œ¨ï¹,|ß>²zëµØŽeŸ;óŒÚk͛ݫu »˜Ïƒ~´åÌÁX,“ÏãÕ@SEB±à€s¯N<R‰#az©¸ –£X¶IÏî·* â_ð¿OWYFaÕ¬o†ZP|ù\b~Í&ìšôàn¿ [ÏÚî•?"ŠÎÛãÃܯ¬Í՟Ѿ"Ýü´³(ŸÌeßJ|ýd§Ì“:T\ß…ßôô™Öÿçƒ$ÂÏ@Æ~C</ê‹á¬¢A ôm¿—7ý Ö¾±ãO‡Ë•^H~r[Sæu®(Eg+«:ˆ¸‡x”;›5V…{ÞKRõ†yi¹î0TRf_®˜œ$aSMæ­ [ [úkdJâ‡f&´h“Ù‚ZôãŽb%òÉÈMðx_”¶æ |‰ŠÐù†d/ß\8Yàä—k|F"¸püjï:œ «ò3È¢+ ÚKèê~X9OÜÇXEƒ.O¨s™Ì¡Ø.¶‡Þ ˜ÄÚ›¡y¥}ïòIæ}77Å݈ËâX1Ǩ~#·Ë‘à=smq‹sÞNï§¾™ h‘»µëFH¶9MPþèWõâΖŒ»U“‡{—M&ï>yXbÿB/Ñ7ú)ÇØ|“¦Šo"ËÉü¦ä<íVÔyqoSúºN¹–¢ÒÊÞoÖP«¾[& ›*ŠƒmÒH}*«1T"ÀùMÊòþî5ÿP_ãÒ®ሻ‚ ˜ãø¢ñk BÍ&¢è„$N廎üÛ ·ê”vÛáƒ$‡ŽÌzY¿±¦>K~@-@Ý©6Š/SZ?Œ‰.ÇpnR°âÀEÉ#Åýå eS¿YÜ»O£ãõ;j|Š¥xJÅ`½ÿlú4\Üi¦q-uU,©@5̇BÉ·¨Äð\dfáuI'Ó¯jûg<)6&½r´õמ³͹{3ÀÃÍõ€$zxÅ@„åDÒF+@ ª è÷iÜ;H*ÒƒˆÛç•¢Ô%lþ·ßG0(sK:ðzj!ÜS¾!vÝ/ÞÚóRþý¹Þ=³d›YK¥ˆÞè•sí7;/ïL$B§cŽz¶u£ÿ¡Œ>~?®h$bÄ"O"tppw:6?”>kÏÞHH¨õR/îL8øô†8äS.YäÕPÙi@a$j‘¢Ž‡ W[¢x¤9®sãûúX?à€§5ãûñ°·qÍ/ª×[ŸÑB/Žo5Ú _ÅöMHf›•ºj§~å_M»pÈv“Æ ÐéÛX Ž«v_ìJð弞ô­ “ÀGt³Ù碓èé±ßÒØcXÔHÜ"ýÂå RVN]=nsSàW._”MC ‡¦L÷)XX.$ÀÆqU†BôU{æ[¢ËG,Ü5RÊçˆø>˜ZÝëT0†º-Ë*M}”«5p5ƒ™‚õJ¡8Gx¿Ws껽`åcuÅüªxݯEØáÚ:B…:Ë›h¨à+ß…ÿ˜îKtœç‚/ê …˜³Ô›šõŒÌi~2Ím®(“GÐ=IÄÉa0]UOeæ*À?^r†kA¿ÈËFu·‰7 nÒ¤éÿ(ÿ"ÍT$»–8Rz÷;DÐŽ4Ø}JÅ€5â!:³öÁ7€—¶“c—™Xý Û-3#÷ ïK@p.“~,ÑR™ ¾›ö2ϘËtk­!ãÜÁï¸Åâ()?¼Â± ­¶*³ÎY®Ÿ{l©”ñ4îHç«ÎÚѪþÖ¶ZÏ%å·°@Ì“™&ô5y}·-¸YŒ}©ï»f¨’ÔYgf½Ù\tî/ü^dƒ¢Qªt ë^‰áƒoµÂ,7Ä·†6"#¢¦Û}&ŠÒǾæÙQtIÚs±%Ȫ?-¬¿”ä+µÓÛAÄpL¸xaóõ™n<—0Þ2ºHiÃ`\Í.ùŽ~̺ø2ц¯Þò?Ζû½Ú¢ûÌ,[J½"= w[`ýÛ±éü4L6ëXUq™{ÝÄ>¼îk2s0EçÃQ;BŽt4Z°°Š¼‰ãã£Ð-ñ’`äÉÑpb(ÆA…fvÞݸ¶ì YKÕtÆŸÅ©¦¢Ö5û£šë"’0ûGrt¡°2™‡Ñ´ñÌRšr3ÙÊà}|=ú[ïêN_@nsÍ@ltF…š 'œÎ³¾±Õ1$Óx• ¦C‚˜)jAI%ó¥ e£ÙÉcŒ©s&ªÊ%cJqaUw¿(O)õ¢ɼªš‡…b8±tÌÕò›Cˆ<ÞWŠö"2õ í‚6“ýhZu᥌âÊ“¡4FMu¸zò©R£îÆ:¤pµ¸¿/5,ƒ¹[ÀÂ]eàn~X\ýž°â·)‡¤kCÎÐý›=t/]«eý€A²žµÉñ)Èzƒõe¶mú·>ž¤ô,¶î‘)eˆk~ „¥z²³¶aÜ¥eZë‹á´Þ%e„4Ï ¹"™ìªô§.-õºÉÀ=6¼KZD…ÑOå«I£í‰_?!áq¼. ç|jàI²>Ñ•È.PNR殲ÐD¾?ÖøCÂ,x?þ|Šül9U¦ë᦮à¤5JµíŠMŒxLÂçÚÿuCXvì"­m|B¥þ˜@ª¯Ñ‰Ãñ¬ülYðãéKÂò¼km%þñËxiÖr;«ë­*ë‹ÙÙ¡¿ˆœd‹e-ÁÂ+hyã%šE„Â\³ç¦27 ¥êøç=„£…6,ا“{}e·<[Ÿ^Âà7€+Y9Öb42ZÏÜ“ðrS¨ô?°cƒú•)ÓBa²$ýö¸q9r×±"hžG‹Dø’¥`‡Œ¹s£ðŽú®Yï"VeNkÙã° WUd{Vp#;ŠÇ«¿êÐløÆÁ;J6@GËÍŸ¨}8ÒMä͹†ÖM¾ñšÍ_Xæ5w™8B‚çZaV}v1‹`¦ŸÐûnœî{¿Ãmù¢S<àót,üç– )Üf»†w\¬aøØ¼1ÕáÅÝy&ÀV2¯gÔ²w Ñ$ŽòŒêïÑ $‰{3ñFeêþ)È! Ÿƒ”dìm3ÖÏúØC§C*ˆSç>’-’Yw]ÀÆK¡oÕÿdyï³®taá§T€šs•5Wf—w´’ =Ío{Ç»÷­'x_Öîãžaø–BmàÜ´”¨5VIé`ìålŸ…mù48;-}-x% (ÕÊAév$’©ŸGÙèDÙœ›•W5ÑH ´zÓ阸G¾%ú¹(u›~¶÷tÅæ¥cþ8êU’ÈÛÙt’DËA¦7R:=áV­eÆ™˜Ï›eòâÝ!k¦ÍþÚ¹ûúBå •£áØ“3Y‘Þ…î¬~§à¨™úNÙ¶ãåa  æöQÓaÿáˆ;Ž5`¨5µíMTøêA\ QÅ%«“z©•m®-ÉðUÁQSBbà½{´ ܪ¨Y÷ãvȹ²«…f ‚¥=½×MÝx«¬ÓKƒ-FÅ›9 ã Nr·|ƒ=S¯ÚëÉ^•†í“q> Ж¡xµ"|ä%o¥ãˆ­¤`¨ê¯ŽþN¸Ñ-²,Ts±TÅ]•¿^$‹Õq)S…»†(?u~E&ш6Pëóh lѹ+)AŽRÑUùA¾4ŸF‘j¬ž˜%Yœ/¶„_†4àvCl—y ÞÅ?l€á gg ¹ò**ÅÈAû„hÝñc0“0p:ø= Gå w^„Æ"h[†Š„ËJbÓ%vˆ ;oߟvíœ[‚Ä{k´={a™K '‚£ù·oWká7Ð_~GÇÌÅ ˜éS[Tâp¼îlfØéÔrÎÌÁ5Zm}SJ”ºd{Г¾åõr¾!Ú_Õzäkæòd}wXb³"¥µ[j½yÑŠ_¡K¨Á8ŒpÐüZ½Ž…øë…!oèö\žhtëwWöÒUqw0šn:ÅU ïB«>®ƒ–ƒ­ªhv90 ám5Üsä'ÀTúZþ‡FŸµÒAàÌÅVæWãÉ‹34V|m˜,„H ̲žÐœ§Ý¤ƒ˜á8æTÿ|ã$g3iñnó‚kTØïŒkŸz—Š/eƒXõ4m(šœ1ûQ¡ª¤H؀蚳‰ ©Ýê I™ n/1¹$ [n#i¸×*3ß²Ønî‚“§ŽÆ;Óä6B`()XÒÐ4“¿›Ô’>©»¿-ŒùèC‚­ó¨Ør¾C “]P(Р’Š=¸Û„Ž~ts&Óô3Ÿ««¢¾ý´øðˆuvnÙ)|Ë­Y\ð>ü¦k¡EscúF Æ %[¸`My·Ïäo‘Ü"`’*1픀›ïöˆYÆ$ •™´@ç¶Wí%vËMË­l‘ñx¢„ ;âëÑ¡O#¸¼ð9šLfD…VôÁ¹’ÅÅÓ‡9<:ZÙIä|[Îîû›è~èãÕD‰½»ËK­œ«kÑOÌEÿù7ší–sþ@o"ÈX½9óƒ_µ¡95'TÁÄ=ôûƒf'àIÅD½Kud]Ê5•ᤥĵfSÉ ‘•RNö:¯.uà½$ª¾ú°N6œj`Z4!üß-<Èeú°Y:Îndðà ® µûŒÑe§&Ãò)šÙŠ+ ®°ª5jÆØö!°U‡@÷aœB9kk˜ùô¢”X+Òw´Ø÷ùå2>U«Ã»Ãðô.Ða/Š´)‚oB¥óÜ})ëÜÙ~Œã½ËÍ9LÎbF’I;kA_õó4|•¢  ²%zÈÂI£;j ð>Ûc™¢Î½8]ë+EDŸn!€?/ÚéF±rþ¬D6Mu#ýÞt‰žò¬¸‹†Ò]×)&8*žX"ޤ±ÐùìļÀ 4¾áé:§¾¬¯tVófé– ˜¢öÓç GöÄqæ°GÛômÅ,y¦fÔ }b—æ‹)Cm&úV¨˜ÿ!‡-ƲÇÛÑÑ› |”—–ÿS¬$0’àÅ=eÂæJ—ÈØZõôj©BAGXÃÌÏõ–ûù»¡‘ÖÍçfú#R‰ÙùÒÀkÁ)•ÚˆôiÜzè+E×Ç¿*V@KC¢†{m`à\¿ÂÛ×c7DzD^#YY~ìh±´¡X¯0ã¬~-İví]ª•¨“¨ÕÉÍЊÇFßå95Ðú!­‹ûÚZAxdÜA‰;·›·ß„J@8Š0$D¼Ê»ålÚ ÍùŽiöªóG´¢sï;Ë£ÓëÍqÊ"[ÅúqÊ?—¡ çÛLúÚÛüîtõ<ýJÑóå°Ì`F«ªÖ4~Üwëö}¼]¯£¦¶:ˆyÈ:†{W·µÊº«“&3»>ED=»c8q҉ʲ'Þ¨eww¢@hUx}C¤üïGdsêW{‹{Ár$'“è§Ú 57ÏkBD¹PgÔ§Ë* ¨[¨®œžêߎKR\ªå6ýBñÛP’ë%FŒ¦µÖ5Ú6³9̇gÔ|õ-­áºÂš|îëñ& ÒPâ,ƒÙpõJ4—_rô²²¼ âã°@pX‰A‡MÚ›JÒ4ˤÁê1į':t-§! a:Îçr¥½ßô9òsbFûÌäP×ONB(˜Hkª“ËßHC”>¡j›ÂΤ?Üã¾jbêv/ /5¸†u[näÚ;H²k€_µcýZåá rb±ä–=ˆ)ÙÍ"_­•Up!ŒïeÛ·h«Mµ3{ïþšºàñ ©\n^N=U]H¼„ÒUOÔŠÏ òÓõâRÑJDM‰Œ0rï ŽÔ¬ç®<2L. =ªw ƒetC4†ÖZÞñW°Ë4Ù}†L´øöYû9 ›3¥‚‚ þ˜;S8Ù I_`¾ÐÓÃâ®ÿÀSÀsCMyÙé©v`BÃõÕ×åîÔáKH¼ó=x2¤%{…Œ‘ÃTdr9ኋ³ø_ïÚ…Ø$oÏéÛÒžÕ!Uô!Hd’5)³fã.ªÊ©Bo¸2Bòø¡åüe(߸¸­ñw×) ¹V»èo¹RÖ22ó¼M·[¥§±"wjûÆé*æí\¿=4‹hæq¨3ÙÉ ®i5ÎÍY2/7¸|)|ÇÒ|ß 4=±ÿ‘lhö­ ç…j Ž,RaίOxYÀIúû˜T#PÜ[ç]èJÎ{”{$•¦ÜË¿âgp©ï.š„¬Â$Cã¬ÉÁq«Wnüw(!ÈÇŸïc›(3A’‚Àõç‹ä³øÞ‘ê•U‡XÊag¡7²Á-'J¡Ið¡³ø¸gV%l:y¢ÌÌñ8ÏîUœ.øí!6íwé9cÄì)#ºÂreÊû½+#tÅ@¹[ –1J›Y“ÒZ>eb9Kª9Ä¡5¼O±ÔåÔ_GüŸu9 ´{ªý=[>wéOhÎÆËc6ØJŒuuÖv}¡ÞÀ7ˆÏ݈?¤;VE9Ã'Fi½çóÉŸÚ>-“D^ãlµ†6–œÑ ÕZEÊzgÒ¦þ°ûÜ\³©oÝû#AÔöá~µñyÅ4¨ô[ž¸XÔ%yð ïs×Wn>wÑ4b†Ä’Õ¶í)ßtf7óxÃæAçÚ—iŒŸÞGÜHΟðœì®V#©8Z1Z=à—߯)§åÁ¢«·Æ4*·Œo< ¹l÷R›òœF¥­A“O ”HÆ-¼…9ÀÉÛ>5wîtØ«úTÒ¨!'¾²–¾ß´|ðá éîBøF:S›<ßIã!Ù›ªæ…kì¢Í}w7DN´©¾–wžp‰LÒ‹–cWßã+œúªáµ^ð5B÷ð8µZDT³hN¼•<%¤SÇÔg.à˜L°?&gœÄðÏ*gÿN­~𱯹Þî`„C^Wæu·~S„¸‡5m²ÂVÊqseÄw›ôém¨ÿÇ(0ù©oöS²½Ú‘ á¼,KÉ. ßÀ„Ée¢ 8âeÕ²;êÃÈy\YŸè¾ž š‰ÿ¨¥ÎMÅ=YÍâÚLw‰¡`‡'½5Ç•š ÚU@µIý¬7Ÿ¾·›¶Éõà§wèOm{»5f|_¹(yŠ0ÅÓ­.„2…Ûtpvá%˵¿Á@šäšnj=Rx܇rÕY7Â8ᥕ½Áu;5hXŠŽ™‡ :n¡ß=ÞbÇøJ'¼SÎj¤Ú'û*/p¥ÌFÀ=0‡MÃhÞO‹²#TI«;x*§HÛZ#Ò$úŽCžm°í ûD#êzp9‹¬Iéá8^Zæq.‡ÕL WÝQ'U|¥BƒÛÊcˆè,)Øh­áÅØ>¨ð´oà‹À²<§ô!&£WŒSXìTE͸@&7¬âÔÐ<‚ÑÓ¥ÆpÝfd$‹K€’)è Š«WÙå{È›¨íK\³©EôRÓþ”vë©3LQ<'ŸSeE‚†«>O¬D÷S1g”¸ÞCIñ_Ò›|ƒ/ÈTv±ïÇKa~±ÿW¸ØxZ¥Ì‰·³vÐ=§²2²çí|UùéÙü‚/?œÐØ]“ã­õèKºOþØBuwwF#$u [½;üÍn:µîa;!ÒM74Ï0x\|hnŸ¹zú ÇhWš5—Pc.¸êí@´³ŽÓi~…„Ûýyß\hæ!õªz‰ÅOóØ­~€\ éÉØ@¤Ž á˜ß¢D=-ófº˜þè¯ mzFšl`¼3»¼ñ#8k±ÜZ¸´,­Ç±§4›¤sÚ‹Wqø~ºÌÙ§ö¥¦êv.h­`\`±¿=—ÃÕEŒ#ÅažÃQ–õHÚâ|—¯1â®ÿV ¡m`µíi!Ž>ØÐ¥ˆlVÌÞ<ËH[ìÎ~×=¢ÍŸÇÆ|$‚ºeûà÷%ÒV‡D•Š„ž߇æFT"üÝ/$Ÿã©=zHÉž‡Ÿv,A^U„Žˆ—˜˜ƒÁè)íQdº«ý´m°÷é†,>=¡mëwxkYg)©›J>ëà™;`$¢Zý„F¨ßLÑ’¨3›|ô÷hÚZt¡_~…%bR­_ØÁzŸ¸«ó@=i¢Ž•?ß“VŠæ8%XKÝñÍïk!•¦–né}㯊ºH#Dò„-û9}®ÉûvâùÒ ^ŽZ)tY¥ËZì±®}Ÿx~º,û®_ŠõÞ[¹EæqÞóäìŠo~¥3‰ ½ÙccE¢.XG1þÍ1‘¢‰&yŸ:ïLý(µÀñ¾ªSU{ղ˓¿…¯çNÙo}‰Å±ÁF à‚¦ç3a<q¡àm;2ØT?¬_ðžBs²ˆ„NÅW¶Tm$ c#¾Å°M‡ks°®Öoc³v­&j µÖ;Qþ'‹ªÎqW½úÚ¹Eý #0ÃÓû•YùSñrWû¹8â ¥ÉHëFš‹ÑâÅÞÛ\XDÓ»ã«"N¹_7=%xnæœé¦ÐˆBBÞT£†Âð³ÜâR8Hc¢‡?•onÚ9˜# "- ™Þ ŠZîI 1×vñ[Vv™z MNê‘Éc³ù­R[cJ¬¤r~dÃw]tö©óz2™Õ õÐü~‚)É×½~| øÐ?×<Ãù`GFÝy—µÇ[¸rdAssô³÷JÒý[r ð¾ÈRQ:Bl6 S*t'!…ò‘?´»=ëå©‚Èlô¶HÙ˜«Ü –Íœqè¹F›ÞÝð~œÉjÖVì#ÇsQ•µÌÄ“(ÝÉ™IÈÄ.¯d Í´ÜþüŒN½E44ikÌä–°}ÙÔ®ÌÔ{#>·i%Ý÷øãyÖ;_êKŠpñ ŒS2÷§8äÓÅ[†Œ!s}>ЇPviÞW_Ù¡ õ¼)Î Ûù_*h¿P¿òåö|¥¦v;%ÊUsñ˜›ÿž;‘8Z,ü(—0§èª±žû9y„OÆf\Ê@Î< … ±Ú ë²Qá…Æï„G ?~v7ǞȘ`¦Ò áeIÓ¦ƒ`ô€ìëƒ>É"“)Ö`LC À¬{¾Å«A92%7¬H¬ž…h3eµÃjAã®6Ù¯–fXa‘2[[ädúA ²Z•ø€ÔÇõà½XZ¶úľ tC‘Õ‰ç½øFi‹”„ ‰’îqyºÀª²<¯];gnp¶ÜÎë&èÑNšz)hV,…™ZáÀ‰ð†"1xS©Ø^1-Ñ)G®vä£|ä ¸µ ©,}Bþ´ÊÊÄŸ–Õ`09-Þó7^÷à3â·´s\ÈÜÑÎbâõ*-Å¢Ë*ϳòÝXqDš¯Asu¥\ƒ¢orá›ëªÆ ÑMdg oI`þ·UÆ3àñI³GFB .‹³Õ'ÞDÊ'jµ¾ªEïY¿š¥†¥C Jc¸¾òi]à`‚}¹%‰%Œ¶ ÈvÑžlOAдì;ö’g³}c5Saüoþàÿ?ÀÿÆV@C'[kCKøÿ:Ó¹endstream endobj 134 0 obj << /Type /Font /Subtype /Type1 /Encoding 374 0 R /FirstChar 36 /LastChar 126 /Widths 377 0 R /BaseFont /DEEBZQ+NimbusMonL-Regu /FontDescriptor 132 0 R >> endobj 132 0 obj << /Ascent 625 /CapHeight 557 /Descent -147 /FontName /DEEBZQ+NimbusMonL-Regu /ItalicAngle 0 /StemV 41 /XHeight 426 /FontBBox [-12 -237 650 811] /Flags 4 /CharSet (/dollar/quoteright/parenleft/parenright/hyphen/period/slash/zero/one/four/eight/nine/colon/A/C/E/G/I/L/N/O/P/R/S/T/bracketleft/bracketright/underscore/a/b/c/d/e/f/g/h/i/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/asciitilde) /FontFile 133 0 R >> endobj 377 0 obj [600 0 0 600 600 600 0 0 0 600 600 600 600 600 0 0 600 0 0 0 600 600 600 0 0 0 0 0 0 600 0 600 0 600 0 600 0 600 0 0 600 0 600 600 600 0 600 600 600 0 0 0 0 0 0 600 0 600 0 600 0 600 600 600 600 600 600 600 600 600 0 0 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 0 0 0 600 ] endobj 72 0 obj << /Length1 1626 /Length2 10755 /Length3 532 /Length 11623 /Filter /FlateDecode >> stream xÚívePÜ–-®Áh\‚»[ãîn 4ÐX#KÐ@ ‚;ÁÝ‚»CN‚w{|ß™;uß¼?oæ×«×U]ÕgËÚkïµÏ©¦§ÖÐf“²†Z‚å Î06.vNa€ÄÉÒÃ] ê¤RaS[C/v> zz ƒ@e@0°0@l [¸¹\BBBô ÔÅÇ bk0éjé3¿}ËúOË_!KŸ÷¼dºCl /?<ÁŽP'°3ìâÿ:Q ÀìÀˆ#T×0TT“0É«éäÁÎ`7#@ÃÃÒbPXÝĄ́Àñ€ÔÙòWkîì/XRîÀÝlyI{[]þr±\ÀnNw÷—߈;ÀÖ ä {™ €8[9zXÿEàÅný›‹ô%ÂéÅ÷¦u‡¹[¹A\`€—ª2rÿà ³Áþªíyq 6/‘ÖP+¿ZúÛ÷óâ… ÎîØöW-K0Àâîâòy©ýæâù›†‡;ÄÙöŸ Xn`[›µ#ØÝýæû¯éü³OÀêäââèów6ôï¨ÿใmØ1¸¸_jZÁ^jÛBœ18þÚEg(€‹óvk—÷y‚ÝþÓ_;ÃüBd uvôXƒm08Ô °—’¦ÿ;•ÙÿçDþøDàÿyÿ{âþ«Fÿéÿwïó¿BËy8:ªœ^ào àå‘9^Þ€ ேÆÃéK9A}þOIÿ­þ[i¨£õ¿úa —‘H9Û¾ÈÂÉÎù#Ä]â ¶Ö€À¬ì6 Ç—yým×u¶»9BœÁ/ºþ=R'ç¿øtì VÎ À÷ØÙú_é¿Hõ7y=%mm}£·ÿÅãúw ÆËÀt|\^¸ý[+ªPëÿ8ü#- õø±qñ Øxx¹^îÞ !!~΀ÿ¢äß@\ÿ<«‚`no€ñKßœ\wÿoßžLÿFÖÙ jý×ÚhÃ@ÎÖ/›ö†¿ÜVnn/ÿ}ù_ºþ÷óß;{ƒ­0–æ¡V"aö_ÒRaU$Yý£2Æ=]\ˆýá.Eµ:ù¹AÐÎw_"×…J-*ÃÙëÆ…Ÿš}æö]·•Xv»ˆ;“Ár^Ð2wçâýdhx»ÂaV„•z ÿÑïxVe ɈŸSogcTSˬðåÍx+Úñ5s­gn!Ý• v UJÍ'¢6Ü:8üª¼ý†„Ýë+ƾ¡þï§ÈÝÛo3?¡Ó‹x"a1D¹fRHé–úÅ’Dp—c˜{Ñí6î{JÍ!l´&ƒ~WízTì!Á|b©Tzÿ~@¼Dfg¸ÎÖ C /ȯ,¥F)ö›ÑÖââ’r_Ø™øÊ¡hï,QzŒ@µâtµEÑþæsÞÈ;Q¤‚?F„‰È+ÿQm1áÞ#1UR9tO«“ƒ­Ó3nŠxîƒ ¼óÖ.ée’Ì莸Ñ!¾ÊÕ÷¯ªš”£_mÐÊÒº,LD«¾6ž"ú¸Æf YjwvJ±<Õ6ЗÞKÀü#öl…>’Û*¹Ô¢€•Jmy‰ð¸W¥QéÂÑ8ZjŸ3©cC£ • è™…¼^ev%U‡ju®ðÖu¤'$„m1QŒ:¢6Pömû5”V#?Ùï}}]k1UУ†ÓªÛ5À+C¡Ëé€É|ŠûzAÒ×3pcÒSKÃ%ñ¤ócfÅß²û…æ´9gI/…–™È;ßnzšÊ\SGWÞȼÿyíÁyЦ3µ;€‰j.Ïé "¼‘½ö/5 üðVŒ*´Øƒ6B! eÐG_qWñ0˜žIs˜zƒºŒƒþ'AoÎ8+\÷´êðË“U­ç Ðw•£º4Q{y>cÄújÒ°T8©&:¨4TÜ.Ñ„ý6c}‹s’ŸFx \Ç$î4”K>VÚ¥ý!a\BC÷–ªÿpÚºñsRJùåTw×+L¬Øžá0~;cåóM\ãwŽžtÉ=‚nµƒðx†=ì?\Ë?pócDæÒŽZEÑ"Åq—iœºù\óà}è¥1[jpÖ`–í¨>´«h뢥9ž‡ô0×|ܘé‚3¿µÌgÖŽº#˜}£ êž© °¿x ó5 Yˆ§þ:a㬧õYPži'–\!Nç£8oAaF_*uì» D¥£D6®in¶¼5¦ ’}ÎüóÁ%êdÚRÃ2xÆô|¸.8((Ïš±Ú‰&_úFõvŽ”iÚt¥ÐgënGŽ7Ïw£ È›ßĈ5ŠÑÍhÀ£Œ€u‚q˜XEžúÊÏjŽ]0šŸƒhgMˆ6Ú0t´…º)g—‚³^J( .³;lØ]À> ‘§dÇ|žõŠb§îN–õÁšzm”ÐÝ+²!bÏ·,±ô'M0Ÿ ø`½É´Àõµm-?7 -;fˆ©Öÿ®ð0—py²Õ^Êh˜cÐñ‘{Ä·YÂbÄ—…Ùpy8ë£?>ò:ÉÕ~H~ØÇ1JO/?ö«C­ /¼q}y×Hþ}dpR¹¦a{Z§„ !/€¦9儿h)(šÃ\q¬“¿}€êŒò¡ •‰ÀGÔf”Ðê`ÑÀF‹¿CPµH4ÕâÛxTGü–õÕ…ª)Tš­$ z³“5Ý(¢ÊN¯ ÷+hB˜QëÍ׳yÝHiß¶ø@)M¨o¾^âÆj†“(ÆŽ#èöá[F´Ó<5ÚÑÏ¥&ÑlÜ ­<óÌ¢p#‡’‰XÂoÜÞ‘=+D†òåâ#ݧ3702tkµîBfvLñ–<’"ÎBW,r]s9AZÞ1Õy[òõ>Þ?zež_ûzóW.–©'ŸÑzŽ¿õ±ú EæÌ`G3=XÒ¥DCcZ6(¸ŒDÌ»ù(81 ž7.~ W-yyâ½Íøõêm:ÁÎ3 ‚#”ˆ¯{ëñºßXáSä§–åâoÿ•}v K8£7cž©¯ÏˆE]P#Ò…nè·šÿ›ÒÕš‡6jðý¼À…ë[ÎD‘Òýº~’ÜjCõ´-œIL)mKŸG‹ËX® ^¿#NyÀC•I¸î&—ŒK{ õ¡OÍEËxûŸWЪ¢ƒ•êÝW»ç3Œ¦67ü$Àt8H½ÉÈîÔ‰–øÄ*Ç–N|6Kbvö²(aú´ÞÖЉú3é–Öôì¶õƒsÈfWW zµp\Smñ{éö›‘ž˜Ýzœ ËÌ0Hêýüþna±GÂzÙå˜B^µm¥êÇî²°õeX8XiÜõcv1ÏùÐg‘Ó0¹J]]³p¯IÚä/¾”u÷5Å(â¦@Ü^ ¶Ã,é+©ÔWªe=Lm!}F|ŽÌå;+™¿Ÿ/ƒ¼G¬/‚…OÓ½'Õž*%&fv5±ÆÔû]ß`>Œ¹óU3Z¢àQ಩`7¶µ´'¤§'$±DøZU%÷-Ø•™ç ˆfyª·åùênü}ÏÔÊÚÆTž¼ùÙÀF™MÙÚßýZqäwßJÄ€?›wD-ˆÙwcj+f›J “š„M£IÍ W²•É”NÖ3÷tðu.,ÁÈÀâùsºaƒôñÌþ$f\^> „?/ä =’v#Éa£BÌî ö«æ€wÙh×=c’çû®x%@V BýÚ[á7†—ÊßÊpë‘oøe(–ù-r›¤˜PbÙ«Ö:ïjº…™TkgLJ®§²ÂÙÍyªt4"“!zxV¶@-ý «Ð w§ï„~˜môðçJný·5ãüM1 l‹J%ßÅ}‡0®gõ—¨‰ó~X|e褊çJ/j¬AF<8ßé4ºôtø-évÙÊ€/­µ)ÿ#hŠsþXb6 þAåÕåôî^õdxgP•1£ÌYpRM•7Û“€“ªhÛfþëð·÷8sqĽ™¨K€#UE‘|ÛR¨×jH÷ns]Sºtïe²†úà}¶˜”n!qA¥ó®àBÀ{n èZ,³+&~X®þsçŽè‹ÎI,Êé4Á£Ÿy®^üÙQzÃZãÈîû/…³4Ì44;3Á¨³†äe}jYšâ:Ÿ¶ má¦ë­CÓb+]õ¤CßÄ«;wÕ#•sýn(cˆ‘”[|l¼9e²¡iœçðhk_¨×}êÕ ,°øÑv_Ókχždæ0‚VuÍ]2:aÔ¨Î:FHJ6Ma­èç-„þL…¡˜ ‡WMZ6 'ãQ^›ºªArR ÑDÌ–ƒI4vOÑauQÐПC@ޝª}Ð4ª^~; ýv1þÐÙÛ£ÎÍýòÇM§páYÁjôÒ¸PÑ$¿žº ƒ›ì_¶Ò°oªŸDÔ¬’éÈá™õbæ‰{£³5Ö§Ü»¤bB.e³§€iÆ7Q|÷õ§CoØî LÅlCÃ[ò/>e|tÇ Né£åb ¸à1l5!êsÚ´]ÝS¤î™Œ–f„ÚèÌqЫö‘Žp÷â+¦õ¦I5ßÔÝupôÈ ãGh’pí§¨ÄÑuþ*Y¯ "øó'”„ÁÌsßo’šPÝrˆŸÒÚ‚ß)öŽÀ9iãšÄ?S \ÖÞ#t*[ÎÿÈÝ)s㾦먺ÖêC¿ðM ^W_kbU![Ù0¤ýâ3w!9Xq vÉŸ]Uwê:Ó÷TPZ®±÷ùv°'©}]v’e´s^I¼œÝ’j^#û På GZ˜s ÝäNAø6£›žªøèáÒWCQûãï/HŽå6M-WÛ-:“<[s”tÿ/šäÁ™|–»æú˜.Z69UÊ»Üñ|9J̼甗¹ZÿSëý¸:JpÍWF„£û· <‹\`feå˜hHñ0¿<áõ„†XéO4/»C™â„¢?#NI½ÆM¹õ¦¦ *– KEžwæµ"?“2Kr^W‰à6™~}#!ù1Î|Ö6ÁL=Eh¯vóM²tœÊ/k¦VVjcÏS± a@¸/S uo-†û\S„îæ©Ú[g˜eõŠþ©¤VîPŸ•P“ÕRxƒWƒYÔOᦒ&•?.ìÝñ ¥™Ë‡ÜüüçñÞ2RTâšÜ ðÉ" ŒëšŸ]ŠwPDq†M™úÍ—m H:=š¨+Ë=¥™‡`÷È —Y€„hø+"g6Sj[®Ÿ`MƒÐk³OZëe3&– O% Ä£\h n¿ŠPÝûí›è-H(sœüƒWdMDáöÐîœõ0I³·ç=ª¡ïý{¿8ÒÐ<ÜjÓü}"5òU‹eŒ‚ÇÄ~íò¶x<䟥´$íR[ªôs®§µðR x¶˜Š/äúˆp‹¥çÖîBh«8 éW¦Ôhå„yBßÐØˆ²?Qí1…Á]yúL;¡Á'Qo».ïTÊûÖSkŠÎÃh…’V1òzÝ´•go¼Cî“ó©$ù\ÿ×ÃÅm´Y¯=”$ò+·Cò¯§TFçWø63ÑŸÐ['¨Úa*“TÑ+PùéÞâmM{½>õöípˆÓHU‡%ùÞ\XaÍìU@!.¡Õä>¯ÜÅ ô1åÚ¥*½·5gpTÜÍšÝ-ºì;Ã/hdÂu¹›¦£©&çÆSZç›ÐtšK½5OQdZç'‡3<»ëMé.ן„Mlù™ÞÄ”¤Î²R½²Q3²©ƒ,ðãœ=æ>õQe„šOë£KÎæVãÉX/b9å¾`ác¦<Ý>‘ïÑÑ­ˆ‹Ì·íäsÓ<ÛҳŽenX{§’¤tÿË:³ù ”• [FèûåõëRãV€eJ$Âêò…ì0XÒ¡áŽ+|šõìcƒù¥¶C$–½|IÙ°H‹º1—¢6=ðÉ^}M†rù±Ñ¤]wüsR…çIºà”ï—ñT{ûÀpì1adL×bä ö¨UãUì$2·?¦¥ÚJIµz„õÐXø¸GõÜìB‡¯IxÁTŒÇWA^”½{F‰wßàw“} ¯îpBÚkŒõ>[-»­àGoI‹˜vðPšbªç”„¹OêÓ%|ª‹#+™—;igAypËÒ9ìÀÐj ìÍ%Å®¼—wBß]å³RPÿ©3g>”åe³·øëÀ¬ˆÊ -†ªÅ]z†C1–›Ž¸äûÎmsÁä,uݼһúxuÔK¬[×—~ßø»ÙZDáÚ£»ð§+ =kh­èeÝiÂ[†ÅÚ¿+ç¯`äÔ«êÞ%e´×æÍeú„}'´Bj‹ûr•Z²ï4ù9÷¤JcSV÷\=ˆ¶ZoÓ̸²z1W»½Œ­hžÌ ršæu GAý”¶²ðm•{©T¯EãH~&„8 ˜'fUê:%½U/Í „¥ˆps=Uni’»7ªzhpÍAÄn¾.”÷Š…A ï¼{´¡©ÿ)ˆ'ŒRÔCÔ9a$èm7 Åž/›64á÷¶èqZáóiÌ(ÊŽ¹±Í˜’øÚ"¤Ióá˼vb:90gúfÅ.u¹ØÝ|úçÇ'´¯Øc¬ÉÕžY9lÝ­³¡Ø<(Éæ;íÎf§²gÍÖ³o¯†»Ìº?ÿp%æä·ûMX˜²>”“Wz¢o´Äg¾MØ]µO麢Fýf7KkF}‡YôŽRÜâ–£Á^h9ОdÜïbÑ·†O"djJ{—:,Ëstl.#Ç%ߢ‡R ”Æ£g¯J"¼F%ê³’%P®xá÷ß6(#DМ1~ïizÚ¡ :´>7s„Gu!Y<{΂F–Ói|ù6Qa,¯§Øõ:tx=ãÖ¢}–ú§ –A,>Íz®™ïÄÑËŸó¹`ܧò˜ÈVCDI‹ÑiÙ»GÓH¯˜¹`Öëé¼  è¤öFÕqÖ A"î55x§¾ˆÆW v7N‰Û!Ñ“ñÍÆz†§l^¥±ëZ¤Žôk°jµ#—¬´[¼%º÷%ÅÞ%(Ä™¸âŒ"C1ÿa®Ä@$•<ŒÞBFëþOk¹rsɱíyëÅw£àÑØé§ôÙqd·Åê¦æ€®EgõÓËì韓ÇI3æ¹l•|¿“rg¨Vvøó†Õð}TPÞŸ¶ù¤^á\?´hÝ@“ù}6Cbg–û0Ã×¶2Å¢ÚÔ`©L¾S¹’¸Ýs3MfÿªÚ\ñrÀ— )á—íŒqÏ]´µ+¹$tµ¼±¹ß€Wñ<~¾ól|@Ü­ÕE”Ô¶«Èë1Zjä(ÑGR+vü®ÙÐøõµÒ¡1éìÌâ˜G&<ƒD÷c¼¾M¶Tmp¥Üd¾ÌöæïáójÒ8é÷ϲa ¥(¹Ó$~´JdHèKŸövËŽŒUŸjhTmº8f97êx­Bø”Ëî*‰®Üö÷V3cšä»Š ³<Õø)%}YϱBÓÄ›ù.Ï\rÛ„= eFL2à}ÐTÅ9n=½ä¿*Ð0º rÊ uP_Ë3Š[rèµ °Íl;[3FŒ¤‰«¨L^Ë °•Ç¥(JìdÒ¸νOÕ?jYݲH«±ëôâå蕎‰p0õ~í£+)ÜRSÚ¿&‚VEýJƒwÐo§þÉoVúö§É¶3avëtÅäg;\á•\|þ{V{œ`š”÷;ƒ‹–Ë L”J÷xû»¢ ‹,1›±Šç“&×úÍÉ*k©‰S°ûŸ—DO7þÖZÿ@Þãþ\;t#(l^´¨Öå}}?Ìùݤò ¡ÂÕ*ƒy æÿ=.—Ùøáª~Žö÷>:ók^!2SéV;’œ-2?]Fâ·Ìóó¾S“jAÝP—^3椣ñ8¬Ÿ¶9©ÏG[Ò”T@,<¶¼¢\h—Q»NšÍ³#°©ôyþ‰[ÀÊÄ ÙE`îÓU€ótp롹vÕé‹ì’Í ÓëÔ6q†Îp÷â‚ïVU(¤hÕ%QYË¥ÝLw·;z3㬉’éµ¾ Ï!Bº½]{ÙÖL0TöIZkúÉu]ó•Kv’‡ f1*©ýêj±¨É{ý>÷_ºÕ¿Ñ(ÃEp ‹0ɮƃòñF=€ìN\¬ðž˜w ‹>9‡›Pˆ¦“ÝÄsÌ_&_QÊÔѲ }JŠF­¹^G¿x\Š-¥Jpü.8%çÒ¦‚÷{‹ïù(£qÂÍ÷M]¡„Õ¸àwTßÝ }þ ×^&—çÈ´œÓ^z† ¡¹·XF5ùµñ¹V'VJ­Jz—c¹òÒÂóéGŸÒFH VéçÀ7Ò œC¯Ì2÷iLX€BZ‹ÏÁ5O‚1÷@»¿Îr†¸L{|þ°ž¸5bNš‘®CK©Šj¦ ˆUŒòÑ*f3QLîꑎª÷¯'t8IÉÒ¸H*öI}l<”÷W“¡Y4tÁ‹ß\ 2s¾èûªzkuû½ç̇*ëëgf릶ôyD•ý\Ošåôš_S 1p5"J‹·ß^&hôá&àhùP<£jr“ïÀ*#B,¡ÄÎJù-éâf{~\µ[UÍIT€ìÜÛÆ‡$V³äŠ|†õAÂçœ 8E@0ÐÌÏܦxùøPÜ!¨óuG­ÉŠXµeyè3d»ò®¡o:éÊVGýOL”ÇþÕ,ôŸD)±Žn[ܤƒƒŸ³×tôVgpëÄuQæ\€YddbFÊýô³¤¢²Qhذ’mƱiØvK̪õhÄû>¸„ÎB~˜yØA†c•^Å#dJþ Y¿ÌÿnèÃ;½#ôu–býþgökvŒ]±;ßÛW*är²Ê0CÁ–Žáb3`ÿNþm<Ï,á'…Ò3$¡ÛTçÁHÜ °qÏO+-ö»(Eé†fœû†šî>{„šÆÒ¡ÀIýt%0Ä~€]±PÁ¶"µN;m¶M†O™Ñ¢EÂ( œ&tlQÿ|pàj…Ìi;d6¼õÇÁÚ%í0&:ÖÉa—Í<ÍCåÝEÙå° „-îì©ë2œð-^Ígá 9>¼C;à–áÅ•á>Äskƒ¸€? B†µs'È~¢:&Š3}³ “SHîYØjNV°Ô‰û©IJ‡ï’’šer‰¿ÆYÚBáPk“AÞWŽl5O9Q¤ÛU–ÙÕ¹XK}ÊÕ§gþYÙüø„7Dp3¯tîଣ#"E® »H쩺W»L •* ÇÉ¢ßN€Sǹº± •óMÔ5I©=fGŽçµ-Fñ–e£Ô6úB1¦} AøBêÑ‚äýß/¢É‘æÕd~ÑNs%ë|TÏÿHÞD"uçÒ†¡ÜŽ«hÔ¥c·t©~|œ¦ƒ‘Ú€f·83ÞØÓy°Šu´ѺÔZZ½þ¦f‡¡L:s§Õ}½µ›B²ôÞÿ—.e…:cõ:cO®X#yšÀAXÕ<ó»”ÇéäĬO{=Na1ð¨,K*>á±Ãúntó8pîkØ7/gõ[ÁJÏo?%^ 4Ã’Ã*?¿<Óå½#kÁ}GË©qŸRjÜ;í¼VvΊϬ?NVÛ.!¯ê:¾tÿÓúëvµYÒâ“Z»z‡M&“¥©"' núů[mYYP6u)é4Jú; £Q>‰c9ÿCUÛƒÑf¯õ —…þ_Ó÷×E­ÒbäþSkôäÉXÂ¥Yçâ°¡Ç0WÂHÌ¢®Ï…sä/tìZBã0ŸÛg‘ˆÌШG Æ01}†ÌHׂË(Ë÷u‹|‡Q$‰3pÖŒbnÚ´dˆèÄÔëOéξs Å/Ðï|(>×µÃBgEàÙóÍi»ÈâÅÛš~Ë…öjyz|ãÂ÷8ŸK(1¿óî­mÍlÞ‡›”·åøÞ—S’o-Î2"%Ÿ<ûø‡²M8¯Ä½ 2ÛÕ.X«L¥MA|B_:Ù¢^6•`— [üx,9Î%¡ÓdÔVeõ™,nõF¯OŒ‰[ž˜Uˆv³`ŒðºÎ¾!t+Ϲáǰf§¶„ºÍáàhÈþ{óxé—‚îB{‘ž¤Ù'ôähPEßáŠÜ[ªëñWS:'W·Õ3 coŽë«“ Õ  Î×Ù˜¶a|&ÐßbcZ|!ù)Ü ÊbAÞüBÎ]ÌÅÖDBä_'Ô¯¹øÄF~lª©ÿ™Ó0á³ûÖÐp"‘0ђѾ­¬ùQ`œ;[h, ¶¡4ò[— T¶RRP–êb;»þ±p’ûZªvÔ8€¶¬vFÜ´ãÔC•‚ÆÇVd •b%³6›6–¤8ªÏú7ëñaA"5%S/Ÿ¥ ѲZÒ»~Y‚nûn™±ÈÊ&óÌÉ–ùAéTy¼Ñuš1¸{‰ºD}=úöÛ¶uí½±ÚŽÖõï³Båøa="`,¿|Ó𢶠ŀG֦٨Ǵ1!­IØÂI±‘ØÙ€=nÆ&5?=ä}éqÐêîG/'OïH,íù)É´x´à‡W·I«X—ÂP¸ú†*¬.ð¦Dô‡«ø XUÇb;®;œðF"7ó:©cäÁúHÇ[}j¿¾ÀÔ5VGS“nLÚö:(ÜU„—5;ˆ²|ŠqԔ¤ػ«#AL/ß\ùŒÿž—Ûÿ éèP­EÎ`ç%ÇÉg…Îd® ^cýõwb̼_¬*JØlÄw˜à†ûJIX=KN Y“t‰Ò;Ý|܆à®lå_C>“ÆÌ(вû"´®†&/"û\Á…ð6É·\H*"þŒQÕÈDÛÁ‘~RãT‘ýÛË S»kÛÁ Tý4‘¯óv‘­™7*ÞÌ芥±- ybã«@—Ìûšõn6²’UX$ÑÄ·Ñ‹wœ*•_ïfÈҋɯè$™—£ò–HåY»¯ïž~–zª·e@ŠT"´È.yÏvë%ŽÔ‚s„»‡Êóà÷²¬«´–½ñŠ;i†)f~H_¹ÖH¯ºö@“´à“< N¹.¯à]ÏÁîôx[ò©L›mz\Þð…úøÍú+{>]§–KÖEÂÝ+´2'¥lÛ7\Ò£5Znfyˆ ¹$ýjß«âù²–É &È¡®í³»Òé›Ï¥a=©ØˆÖ’*2Ô6 ú{,ÑKJ'·MÞ‘>£íÏÜVN_:"bÊUØŠó0´Ë«†s‘Â0Uh¶’XWȾ°ô„%·?…+¯v²¶~ÙPb“^]|¾™)ÁoT ¹HÃ7¶šºNðEåÁ)xx Ò$KÑÖ¿Öí‹U¼°ªÅ²+ óp*ö‰øsc9w–]qjØ[dn¹®ûx í]âñ}†&¨êçÏ6ê›áF4¤VLKïzþ‘ÃÉ_ÜÑÝ´NÐwJK^P;‚S®C¾kõ­ ”ðIü¡:U¦V@ß<ÞóÕV`æ;â´7©R">‘ekðEa”›Ð5Ú|¬ ²'9‰@(žrw½$œpßY Óož"¸Žo1K¤fµœÓ;ÿ|ر€ºŠüØõ™€®ž|:ýß%e7z1GÉ‘r3“Šô6õš …„ÓŒåðïýö™ûñÌÎö8\ <#–ÀßVÊ%–rY‚£$/[ÄPžÞRE,sGutåŒpcÜš9}›Tt"Éx/ Sjšû˜VmKŸ,–¼.z[ˆ- ‚!ê_¼˜Å' '§LX•bÙ³„ÿY¼©^Q7ÚBHÎ_ææ«q :DŽè6m/Þê÷2ê¹eB d~×ÞÖ® ¿Jä6øêòp¼X…8‘ç/#³ØA(G=—ë˜üLꗄΔW¶•b%æ#r^ù¶Ä¦ˆÏGîKä ö_kš9K‹XÂúi˜æ˜+ '\œ¬ƒÙ·”lð"nu¼g’cþ•u•f8¿¨–Üû• ‚=Nð+ËñÑ4•¥L«ùÉšnTĤêgÁáèT…Ëš ­ZÉ]KýQ["®fjö‡佟âÃÎyúKe˜ÉIæ¾Æ? #ß–$#3˜ÛЦ„™›AÌöûŸ„eûÏ[t}’L„¨ê'²¸5J,ü-ü[uxñß½5¯ï»"öóHÓˆŠâ}t¥¾"S•þ)׈ŠöDH»ÜÞ¬4{Ó­o£EtÏê:v׮ثÿûB€õn, È–%Wm!Z¤\y \ÊÇ;ùkÁéÚb®j"°aŠûZVóªÇál¢‘Ð_T|r>Œ84ˆûÜ$ã]‹´46ë©G¶w¸™p Mç4±Û”ÓÝÞ?ª§¬"÷F\“ë½Í¼ŒG_¦]xÚUìáUB·0L¯?·c€©÷ ,ÓRŲ€›"|{4ïä©Â²(•FC‘º*òýL)¬ç~¢¢sHïómÔ[«vŠÝëñ1—bm›jœÿ«Ù³ÏÖå¼Ì»eìâð¢žàÔþ3;.B9çDÝùnÔÍ äÃh,],tºïÕRì d!ûΖªìznŒ«Y· ùëóöùnß~Éfùë%†,†7†øÅõ¡õu¡Ó4BÒ©5*~XÓòƒ•?✥fÕ ˆ”BìÃò¹1žÉ<’%ÅÞÔ3?wNß?§¿Ûù¶7Á ±ÆûÔƦ­ø>.a*ÉÁÖ”î“BX0'¦.ÝB; )§M{‚åO]·­‡}þ j¶boáö»õi«œP»Gî‰~,ÆÝ/X-ž.‰p0¡oÂüÖŸO~ÜÓÉGíé_ç*Ķ:5xL ®ß dϽñ"ÕDÔ™ôvÆ>úQg†Eö+àLJ¾~š>úLé×Z¬Úƒ>æø¶Á°³)Oíµëâ˜pºLOä¢H±±6±ÊÅeºI‹¹àr­UÔsФÂñìdâáà‘öï`G\¼%л|8·´F Àa“ØuàB~wûn˯¨ÓÇ¥~ÎBž»C^yÑ‹†&ø†g|Òó¸sƒ&4÷ôµ&d7ÜðÝ7+‚Æ„ f‡?1S÷zª/nnÓ4†îY*9 ÛÌ ß:,eç¾ÕCÜn¹‚l8·µ1Õ}Ò&X»;Ö8{¯gÉlÜ3­[739£%zÓ'54%òËö‚¨?:íà^­ôo|9¸jämP6á_º§o†ÿcCX~N±r”½Ÿ-õD{H¶ÓŠ1¿†„U™ Ísâ hY+ôµñÅ`K2ëòÚñòFusÏ•¸r_'GQ’£àÇ>¹æEëúK/À¯ý*NÄ Jº˜u½cØÅ4éúÛÆáƒŸ7í‚ö%HŸµXMèjƒáÁ\÷ž ‹ÏÒ5;µ„¨ni ¤ý#mMà9äz€fè•sÆæ§Ôp¾ 'ys N× ßÝrêöYé L€'¢)e¶'1;‚eíS°¡ÂÉ|G‚ùÕiÔ&,Ä–;­ìDX5ûö(ß•G°›ÕËà·€'bÉ5¸Š1â7ˆ˜J[ɇuã­”Ý#ù»[ýSBdåwuála`Èl÷“€ŽÆ×òZÞ0‡«ÑO¼«Kˆl“ŒÑÒ÷–±Ý"% @{݈?£Öe%:£ú %óaVu’-©&@¡²—ÈÍ…1äC€Ÿù¾ò’‡H*hˆA÷ uËíÇzüD¢ç- ôõ(Åy3!µŒÏˆð*åL?†‘™~ es¿ ÂqÃâ°¸ƒß?y0µ žuɹJÔUáO@SºAžô—±é£"¶Q~_ȺŒ[A¤Ëiÿü踘´þè ê*¬‰“bæ“»ï'ÏŒTo‹‡§¥:øŽµcȦâˆl—3e×…Né±±ÙÉnÃTÎi !6‘¶‘Ì´}%áŽè)Å:çßdÒGV1nÒ(2gߟ˜5fÊr*E¶/dŠo¤ßÆI)þÑmHX<Ó€sÕÓv8‚(¿>B ‘¹+ï\R¤‡}ôC$•™Ó8¼6BƨuVãJD2¦ù‰u¬±–ªW.´Î¶YrµWyôLêú£$|äÎáŽUx:„jÛÌ‹ÌDSÝ+[L¾,`¾N“Ñ×â¨]6~…RØÜbAÆnúdÃ5çù%Ot˜ œŸö‡jøD»}ù‚™0•ó/}é¡àábgÍÓ&åÓ!À#*öŠ-UÓ—¯M–”ÚÝßß¡.Ó¹õ÷ôiìÛÆM…õƒŠ* ¦rø˜¨íqrøË™˜™â-D6äGõÄIšT…äóÅEž˜‘*¦W.4DzF>ôIúÃ$Áý×\~–Œ§ë)~Ó-ISƉ‰ñÑ–,h> endobj 71 0 obj << /Ascent 690 /CapHeight 690 /Descent -209 /FontName /VJSSWZ+NimbusRomNo9L-Medi /ItalicAngle 0 /StemV 140 /XHeight 461 /FontBBox [-168 -341 1000 960] /Flags 4 /CharSet (/fi/hyphen/period/slash/one/two/three/four/five/seven/A/D/F/G/I/L/N/P/U/a/c/d/e/f/g/h/i/l/m/n/o/p/r/s/t/u/v) /FontFile 72 0 R >> endobj 378 0 obj [556 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 333 250 278 0 500 500 500 500 500 0 500 0 0 0 0 0 0 0 0 0 722 0 0 722 0 611 778 0 389 0 0 667 0 722 0 611 0 0 0 0 722 0 0 0 0 0 0 0 0 0 0 0 500 0 444 556 444 333 500 556 278 0 0 278 833 556 500 556 0 444 389 333 556 500 ] endobj 61 0 obj << /Length1 1647 /Length2 11546 /Length3 532 /Length 12422 /Filter /FlateDecode >> stream xÚíweTÝ’&î<øA× ÁÝ-·ƒÃAîw îî.ÁÝÝ-¸»Cðáûnwß^w¦ÿL÷¯Yó®uÞõîzªžªÚU»Ö>TdŠ* BÆ C 8ÈÌÀÂÈÌ7·6ttPY˃¸e”¦ŽR`+À;ÆDE%b4›ƒlD À@À7 1@h`e°pss#QD@¶®öæ¦f`šò7ÚÏŸéÿ)ùK`èúïÈ»¥ƒ¹© €úýà h²µÚ€ß)þ¯ U€@Ø 01·D¿KÉKh$äÕ@ ý{ŠŽ†VæFYs# `²Xýc0Ù›ÿ•šã;—Àà` 427ºmÿ‚è¶@{ks‡÷o€¹ÀÔÞÀü¾`ÀÜÆÈÊÑø¯Þå& ¿²µ½kX¿cïdŠ °ƒ‘½¹-ðîUQTüq‚Í Àùv0‡ “wMc‘ã_)ý½Ó¼£`sèþË—!`lî`keàúîûÌÖÞüï0ÌmLÿ=Àhj`oltpx§yçþkwþ™'à?eo`kkåú·5èo­ÿˆÁì´2aDba}÷i~÷mjnƒÄôW¿HÙ˜€,Ìÿ;Úþ;æ´ÿ{ƒhþêÚ÷ ŒA6V®c  “<üî@óWeÆÿ¹"ÿ”ø¤Àÿ#åýï÷_kôŸñ÷<ÿ+µ¸£••¼õ{ücÎÞ à}Öd +{À_ÇÜè35°6·rý¯ŒÿUûðQÿç¿Âÿp!dcú^!FŽˆÍÄÍ]€ÆŠæ`#3€‰Õûæý-W³1Ú[™Ûß‹ü÷þ¾13ÿ ¦jfndióW58þmŒÿ5‡÷ºý“¦¤º¬Ô·ÏÿÅ´ý[Yñ½+Àª®¶@À¿yú&2þÅ_T €; '7€•‹ùý0¾GnVvÏÿƒÛ¿‰Xþ¹–3Û›»´˜™™Yïïÿýs¥ó/4b6F ã¿úHl`cüÞzÿ!ø 6r´·¯øßÓà=ó_ÿ}€@ ÒÒ<Ȉ×ß")5\…—Ù?*ªÕÝÉÝ`[X«š—ãSêðN Þà.Õ® `¬çymr;²}Ù‘¦ÛìĵúÔ‘<Ë&ò¤ íÊÁX¥náú¼ëǤ[ˆš|ü-Üý|VvF““Y}wsTIY·àŽx¼…ÍáüžÖ‡Â)Ç›òÎÍË(±& §õCfUîÑ1uÜÁýݧޡþ¾ŽKØ®ÂÏQˆT¼N0¨Ôa>v„_5ÕJÝ#±ädëKÇgRú9–!H’Ù»’ šN!hŠtS6`ÈÖr[xedwtqÐîs_å‚!ªÏj8ËŠÜ3ïŽ÷šâ nç=F…ÛÔiµÙmêú?ÿ&¹bÜð,Y¢YodW»ˆ¹¦D85fnã™ñ\¹AÛ…âØ|µq·Q`ôuVä[dX¹Qs㛸Ô¨p»??µê#Ëù!,bùS@\±ÞõónÎCȱu’9linXÂfË s£¨9zU}Raü‹Ï‚-‚t½C±"=»úî9˜͆w7P ,;àøûSP-ФÒ€l32Eã)«ËVóE`R'h6 p/é©oÎð4=ñD „”вÐý•:çè7XÊnÙ¿6FŽØ§úSÿ›ÜŒe ÖFiüE·«¸Æ»iûÀ£ÿA:Xg¿¥(`±Ù~ã–ùTþ~*P†ÏÂk)‚F˜ƒ‹ Évs‹$€àé&®VÄæ¤À'RdvWÓ +³ Y!øóЩKÛÃв&ÜÒ鉄fOÏ,ÛÞ].lj]5Y·åK ñò@Z¹?…窒Z¹\Ú=h¬!"|mŸ»´àµž¤’…cèÐ*üŸ Ñ )'1õ~uYë«ÿiq+\}ý)UÙˆB",Œ­Ÿ¹&”‚M»å¨0Í>^Û—BÓiY궃µÖûý»“?7‘#bƒªr¯ ²9ÃaÖYåþB—& ÉEÅ)ápïMÀsÅf艆AºÏÍG»Õ<½s’ ¿¾–IîÇrìÚŸ„2÷t%Uê`¹É·.7Úhð§Iîà“0¿d~ÌY@Xÿ¢Q¢âë˜Ò›~³ºVƒ˜ãòªßF…P–ucA™Û ¼3ÐAhj.2ÖkT‹*Œ(‡`­¾úYDVÃÎÜÖ²µ¥©P§Ûî1ue$/H£*̂δñÝÂ\Uû•5 òT#™$£Û_4IøÕÕ=OÑ󭽬üFŠàÏ\ŸM“4ܼ »“‚á1æ§,Löà]ƒŸkNvtR’ÏOÁ£„±Ùb*ТmeR5‹]–qÞ\Ç]fÅ_…“ò5qG¼s¥7¿)èML;”[°Ç ÷8yÐBxª!”MQáZ,µÀ¡:zÛç¨g¿§VÞîjØ—hÞŒXÝø½ 0LÛ¦ '>ª©4\‚œ ‰¼®™0×ÁwT'~èË(mt·œÄÉ? .öjÏfM„î}؇ôÂØ¿ÝúºyA::pËh8Õš,߀—J`Ïül}R^/³<ý}Hf·ãÏÚRšp}# ‡ØW%dhÚ5Ʀa³üžHÏÃ!d¹/˜/„jZ¹ËÔk> ÜÕèhW}|P‚.ÆÞ×Ö •$[š)±”Íä\ƒ¦°ZñC|Ì&"œE~HyHzçr¸9§%Ó ¥¤ŠÛoê ³˜½ÔÈ[W@7,kY%÷q¨¹2‡ý|‡ÿH¯J‰îcõ¹~Þ¤p ø³,‚£\&D÷ÐKñÒ·a_…¬ÓçB„z‰½JUû%çÀÂŽ^ÈÊ€õƒpDñn*º{Ÿï¸ë[¼œKÕtД›X `Mlϲè§Ü>òfà³7E½ÙSJRùy:޵¯¹ï¿Î;Ë4n°õ™.>˱ nU•¹¥1¼n|Cºýý¤'Š»Ô¬ÜM©ò5½Ü¯k½<'‹s§âÕ&zÀñ-£V¦ÙŒÌ(WÐË´dÀÙÀ½|5!®ÂÐÝ \àÐpw uÅPmš¸*q¾Riï(´èÇ(fÿF1ùªŠœãÇ`•¦G[áòu‰l†ûV=O¼Ýiœ¦‚p¡Y˜8³ô¾ÊŒŸ q¨ÕcÖ–ÔÌ2mu.ÃÍdUcŸöêƒK)Žœr”’¸³cj8»ìîm–²pÝÓg.1†ç¶‹ÇfÃÙ_¤‰ Ú)î>³8mû_ )³Q»_‚ `¢õ½ªiˆú«.v%†‚u÷p>ªêtù2uÃoµuã}<²é`3ºtKtæEŸÈâ+yÕg„ó ów«#ßÞËÇË.Ї™“Íù¾çûŒÖ3­ytjFzµnsú ãe?ªE_HjWFzu–u+»µ΋ÑÝá0:¬`V”-¯|}Àkû`áowîÃÂ4*ZSwâAu´«q³ÿzô&å襛…"1,O %¢øNç8œÁ¢Z,ç±>$ëò+Þk_·)Š*ôj‰¼»Ô¿ûs…svàÖÓEQÒá ö«I¢3Ù]..@¾6ªÃ4rÈ·´[ºDŠœg"ìiûòÃs¯¹S›—üÏö˜<öøy‰ÑÊ[¦ñ²‰Œêµ<.;Ær=–]b_óÒ¦ú‰E‰ûís ˜®y˜Ï5Ïú§wÏNóQ’ä\IìùÊb‹ 'ÏE„I± CþøcPrØŽ{ù( Úñ¨ZCÂ-]ëË2@p~®u ¼c‡o¹ÚÄÈïh,I ÙþiWü"~²Õ“½ý,Çï&!ñuŽW²M=DåœêåžÇ1h,9DýG,™o^(¢AÄÙ’v_bUØÔ\¡ŽÛ 7t²léF%’OOäã&¨D‹#…öw(]Û³†ŒÌ*WÖ¯TjÞËôàNë>ΔÇdôóÓ¶(Æxéu­©&‡Ôð“0Ð,…Þ”-geøŽÃ“0útkƒéì<¿ýû Éö*zÎ#ç5Á›Ž ê’–i­Â’ÇÃ’[ì6$ô‘™‘``ߎŸ×[Ë–©ŒÜ{¶Ù›/²k‰ÔœPü#wVY.ŸøuXc~;Å–N¾dß1’qiEòX6*ëŒ-tÕW=hµ)N[…·ÓúlA1?l,ý\r±3«ÜÈßü’”÷ÌvÞkûg‰ËÀB\ýÒRöQR$øÐK#›º*Q¸ÁŽñWüY sæÐЄÜ(;Ó7µŽokœòèfÛ#4RñšHͺ•Ð1ˆ¾ÖãòéTªí\Ý„~Ì¢GÛÌŽ5K ®n£„qê9‘Z»7[»i‘tyH×›Oço!uY8mœCŸÕ¸WÃK¼ .ÂorûJqúä7¹ú¶ÉP!xq€îñ%Ò[~…_·‚ f jv >÷Ì›bjßhA¿ŠÊØz›MKF+ 1jÆÈC÷Q2à9Œ0Ì”.Jv ˜¥D=«$œ ^¥^‘{쨗2ÓÌɨ<×I£¥æu‹uŸÚ¶œ‰Õ-zS?vÿÓÈçHšdÝÆÁ)èâÛqâ"}ßy,<'~r+â{é»l|±Õ­M–D•Îî•RÞ%»Êîñࢇlñ_Ïù¨7"¼È¡§F‰ù7íã+cc²¶’ÆIMŒ„¿ãŒ•í?­e>HÜ+RYm® ­LPWèn¿ÔC¦æï¤âí÷[DÔSzD¸…ëfÍòÄ7½Oˆ©Åšq«:kðã‰ÃwÐÁ÷ß¿ûf­RP, [ö'å}Qô3Nj¾$åuyªìLôûf{$%³…à ûÛqÝb ´Ÿ3|S`ÂÆªë¯Öpm,œïÕfÖ‘×e͈a—ÿ,ШG¢DR§ÙÂ:¯ð´-¡Ù U»ÖÐÇ?¬»óMø¨Hh="…0Úãa ñº—$€Õ¾ib@´Pòaª`÷•^Љ,KM¾ |úˆ"I B¨‡ÑfoáM2C´97u×Ê–"^nêuFô¼ãyøŽ½Â˜¬AÙ7´tK¢oŠá鉔Gj«Zêb·ð¨‚l¢ËíXRz9ýÁÎåqtkr'qÝFÌ‹A‹\NþƒÂd} 0.’{·2X÷82q_À#E†²S*³Ú E ¹6 m÷T<¶w‡î˜ŠèûT—“ãÝ;›¾ÇÔéB·„¢þ)ªõ³ Pã¸"‚gg5Ù KHM4йjËÑG¦y`o®(ùâ• 2ÓŽÄTUfΚµ%°8Ó¯0 äC£Û1¶é‘µÕkç?ýH€_‡‡û ¿þEuòd_Ø-ÂO¨÷ÔRÞ _EKwj—ZíMÀ`?üŒº}£l[”Ùf¦~¯=.ŽÛÏ1…SÞůOgõ¨õÒ‚z¬ë+í9hä1žÒ»È¾Z¯¤”×i¤–<“u=¹fêi@?£ï 7ÎTïçíëÔŠ¤fçËgê{ŽŽÇÑ¢DŒÝ›ý:gâ¶'ª+7B°¸ž–` áY°¸úauè{~zœ~¤I#Žë²ŒZOk¦ž@¸ò5lØÇEñîýtž Q_˜®.ŽØ+"f¾>3¥Š!ÎÈAïZ‚ª {»jL…}[8¤ˆ9lœíœ ~‰ž¦8^¾° <Þ`xå/XÊÞ; b“R+0ñÈ£oqÒóçz7‘BgêkËg õƈ㺸SPMðÍÈ(µD¨œì[;¹_CSô3}#—tšàÈŠ»‚×Q£ÏZö›?Uyöò‚¹éˆ§Ög¾Hâ< òÍôdª‘Œnî~fhÃuÔ;ÞÇ,@·”Ç “j2gèé]Qɧ¬Ì{þá)J¹)ñÒ%{ €ôÅѬ6º'Î`%èq²³JIlŸíá4ëf9gÉ›s„„}m¸BkÊ:ÙCÀH;x“0|Û€ð6á)¦$=§ç«ÿp³åûÅ쩆ÿˆº˜e2\+!{âDáíNËT¿TëǼ[@èÎ.ãQ1‘ËGÓIÜ{Èœ¦yaœ+»ÒlíàqÏÀ('slDÖó_;B„.—kÑ „0ò“i¹†AÎÀ„i¿2 |¢;›N¢¨tûbñqVùw¾¸‹ƒ ›}OR=¥IG.õìöåoíUÞKºÜ3hÝF®/LÚó, ï7 ÎM;Ô€ìð Ÿ™}ªûç¡êi¨;‚Ñžç\k$ `Ý„ÿ/SòûúäCǶá®e6[í —«µ¶©RT×úðë)o ¯¼A!’T¦ˆ3µÄíYpÚ‹-Ü‚'!ŸO¯©ØÖŸÏ¯„~Ó<íÝ[ E}¿á“ü ·6(.c†Ã9O'BÖ¿"îW_ˆ,É/Ú‚¿ôÇ~ðQ;Zd`ð|ø>ÄF®n"Mvǯde-nè3Ú`Ì)öàRµH«Q[æÊE‹åwwêm–ºÔãYd:$¥R¼¤”1ôå¨Á‘‚–Ѱ²›ù~„b<ŠÚ*n…ëž¼Vó|Ì’-~‰l;0<0u¦˜“, €,ÒÄ‹Mj;âú6Dîj†Åm¦Uë{‘¿£çÈCMÓ§îÄ9èÈ8ÖˆMÓ)ó8nÚ^ã ³(þt³çÓÀ(qöAGoéݽà"uÉ×Xo¹äâÅ¿;Û2ÄMµžö õ ä7RhŠw¡4gmïPfŠ’¥6Òïì‡t"E}6·1î‡Ï#vGÐ;çLµÜþf‚¡Å ³b™ÏWØ\w©áªäÕ¿ýÞœ¢e(1S×™³¼ià2f‘“²Õ·¤?pwôÑ"%ò.;:è™á3?:r?7mù6\Ø¡S œ (ëF–c³³d*‹oÿÒjYæX—(( ’Ìãþ=žêôf¸hó£»2@"¯-Ü„Ýû»p”Ҿ²P܈²  +#€'SËÔoù@rGak }Fía@þÊöx 7i«GÃö´.]ŒÜþDþôЧ·tÈvê©nìXÇðëGÎ]PuUá”F¡À­DJê#fÉó(îmóŽÑG‰§0±>õ?ìi”ñÆ3:œ' ™i2ÈÅõ^ßcR§`µP¾[föJ8q3•—jôv*¯Å°ªz\Ö£“0ÁcÅÎ ÒýjÕ$ÎÓsÛ©Ú±£éIOP §*L-êp­i—ÀõäK|å”Zâ.š¥õÉë-I˜¸§é|¦CX4Þû0Y¦Œ`ê!äfª*í:©ªOkåÖ<{Œ=²+§;¸ )Ë8Öqˆ–†@ ÄïáÏÿF`&!äRÇ·²ª8T'æÑeÇ[Êeµd‹¿‰ìëE-Ì`–¥ ÏØýiêžBÒ`¦¢?WÝÃR³]ߺÞQì¹ÁjqµoXhBS›¹ÒucW€±6 Ý§ÖX{M«Ê ŠswÞ0#ªS°eÓüRªÝÓnúz\¶h¾—^BP¹È×wÿˆªçÆ,S×¶D»ÛýØDß´4$'Òž‰‚ÂD¦~íƒ|키¾¹;•¶½?Ƕç0 |«cË)ñ-Í"©óAþýþ•|Œ6HåÀ¡Nœ¦‘þÎE êigQÉ¿Ú<ÓÒ/uADWsÕfß_‹ù‹N¹= J@„ghÊòCÞÇbŽì© T/Ê/mÉaøö…s(­Pk:ß]£È⪅šÂ‡‘†„€í¦5;J´‡wœÄ%‹©A®Ê32Še9=Ô üFw ¸¦AÃr}QÐSáxÚÔ”¯¾êëE&Šü¬¶áN=^’–T„òÜzé.µN:ÂD1:à94ªˆHƒ_U9O¸w×ÄÉ&’嚥&öÊðuO>0˜·zÃÒÕrYïNÕ*k°PçÕÀ±¢Ü?åü«ñebèF+*7ííý§È® ²˜™°ŒŽíK0ëw\f-9…_€*ö5/:phÓÕJo7¡LË<®%6ŒÏB°cWIøª À¸Ó?¯(PÝ =½ މC_žÕÈu?´ʜ= à€‰¢=S…kUåa” 8—Äf q"ˆD¬ {È™'(üó‘4;®=ºG>2¢T˜Mr·¹Šž“o——F”‹:Þ×û×lA!à7Ö»ö·7úÜÊEßÅÍ“ý)–[àµqæ&§Ö !ÕÑÝÒöb4féͤüyûÜÅÖ+H—½&öœèOžêG?èò]%P‚{¹ÅËA„£ß“3²F^{ˆv¶Rÿ(º°\u²I4‰æ¿F„l5zÍhL2÷`ÅîK*>x)s¶AJ»çÍcþ{<¤/O·®#dDšU™½ðχæ/Ŧnš%qÜ1­¶³×*ksU÷DÕz)ÖßÛvR÷bXCÆ÷\ÃdN{üŠÊ ~epÜ W' sL#Oûð¯õidIÅô?æ °a¿xÆ•¥Õ³k´­+êÞ|ã°t•…!ÔÄ.º~úâs˜m‹ÞòéFŽ]ñ§c„¸OY¬`.¢<ñØà÷Î-::¼“}hrriï%\„Íu³ˆkfåG€„¹Œ„ÿ$åVû›Æò*Ì¥(%´x¬q`èÃK".^Ã’ÿQ"ÓAþäj}ŽÜ91†Ý¤‚ì*…¼ ìâ²¼Ïbû؈ÃE½¥¢ðh¥Ÿä’ ’¦ü<îÝ÷K’ûobu·Ü‡d½!f4AU{^_™Kþ_ýÌ4£” ß%ÇC.ºž \¨L¯æÇÜNa~tŽ™_m=£°®…Á¾äÁou Sè ·³ÕZÐáØëYiù ÝYв+ßù’%PÀVužsض–Diu’å#^‘; ô¥.n«Ô¤œ1B€ÕF°*<šCs¯ØÜþh[÷c(ï"TªV}…^T†ÁgU3FˈÑÖoŸ±ÅØ\Æ¡ã–GCsŽ/bÑi¬ÖÅ"&³V}”úç¹ó»–ès¤/õ£ÍM©öÀ<¢Ü†'ñ³2º~+&‡öû1D&çW¸ÓÞMÓÈàç+E˜ý–Û))¿%ðº]Ÿ<‘µ™aÌ·¼67t©•a*^M‰ ÑoÐHîy¸§1ŽsC1)J 4ç>/u>ÎÐF:9·Òü'R±=ZX?ÏdÆåP'¼l4 ÃÜ8" CÛp\½›_¥r¶\ýÖ[…•CB8%bIϪ±ÚëÇo>îÈѤÄ&±Óéø½Ã31æ•; —´_Ä«±tõÊ/m P?ÃDë÷åÞ!°ùÔI¥÷{UÌ1½˜›àäçßM;=ØÓ &\»$ˆ #®„ƒÄÝæJ)jd4½1 Ƀë†D’°Q0ªf>îÒÙ,\ø&IVZD Ç9Nðó^n´¤ü§@àsê´Ã†(K=ë˜M~mÐpÿ0¸p"ÒÇ÷$ͦƎFGi˜Â[µ¸€ÈŠÈföÔ-7WPþƒG¦à´ç½}½†ÜÇAl8, Å>º%,ë¥MJY5ˆág™~EoW&ñH–#–:9 û±ô›€uµƒv‚Í”:€³ðf’çtž®ýí¦Z^È:Áf€=wg¤K×8ÔDˆ÷T'8c›'#ΙKîtñ»w̵”¶± °kP¢‹¸Ú‰ Ú“«+§§D!koYM)È(ú"šfŸ±|¹£AÊ…«l{ˆbïÙ´£jŠª´ðǧ6¶Œ™.Vƒ{°GvÑ>Œ[™¼ë°ìÏÎ^”b(qç êâ§-]ÇiwL0päéwG 0ëM§4H½~ç“QôXD졎èuîÄÝŒ3-0„ÎslY¨KãT XšŽÏ]Cô=¢q­1º“ª¤9£”(+4¯&œË‘–»šŽ§M›øæ¤È"7 å Æ:f$ ÌWe¨‰èÕuÒӰ㮊©-ôuM¤–¤g4ðÉäï Ë[_o—×ÊÝ‹Êd1ð0p÷]‡¥B8<:%9)þ§ýÖšQweü,zKÐõe´45£^ÚìåTt-ÉÍŽ qˆ¤•õó…½\•v,“?£´ebäy÷t…–le2ƒ›#h.ðI@ÿÃ^µE<1‘É”8º†ôãJ[/Ž›j»K‘Û ‹hîâd¶W³.˜†©¸VX–žÿ[ðøH¿½ŒÒ®žšáu”Œ]”÷}¥Áƒ[,ì¦HþÜ@C:kŠ¿|I¨¶Ù+Ì~æØ±¥áÇÖGoª0¨áÁf0§goG+ fQ편xJVêÍ‹ºxtWó~!x8>ò˜NN)âöõí†9¿®Õ‡Clø·¿”Ž2•ð7¥ì¥­"QL™ŸdŒ[¦Í†Š§ÛÂÌ W£ë5¹Í"}>j¸JÎr ƒ+¹êw¾7vòX3*ö[X›ˆÓ䛦yêa {Ñ+ï[;¥{x'ûD»‘XÕ%´Û|¾˜Û…Í}Z€âxºîšû¬<Šh¡ì*ûb=¾¢ð~R?¡ÉìwúˆU +þ¨_Sô 'ó-d¡Ôéi‘³Ùt* I'cvqîTËŒ5½ ×ìi•_ —ì 1Jˆ—Ÿ¿Q v¾Z%¹çÝ~zªO$Eô‰GÝ#T€Go Ý%¸ˆÇBS®^]ãÙ»ePp¡ŠôšœA翪›"?% ¥‹­pglXœÒíxVw€,¾æKKyÁ$žöâFz–!L2¹°282„¢µ y½fwaç^ýyÞ‚å2 ‚ÏÖ Ìñ¥nN-¶B^+ÂÓ “çD±4^hŸ¬‘'uwm…Ð{õAÙáXÊŸ¶–]²x|¥×€× q– ±r˜ÛËk¥b…MÉMS3Œ#Áå9üÚÑÑw§î¿ôZË6b4.Ôƒ–›Š5ßÚÝX`é{ÆÅQ:ƒš(Á‰!² |÷Ýi=‹|#o/;‡5v"÷néa™OxD»uˆ)*ü…Å'Üa%\ @˜ehvˆUCÞ cèP\צòû®\mö\§¢ó ‚Ó°©ÙT\9DÔ'ö”‘Œ3;XF‡5F{°Žóa}/QxÆ´“5S¶/·V›Cú_9®”evªÈ4®ðW½›9ï#m® H¿¡AÄ/j¿«®s背!ßï(kÁ»+Ïþ±wˆ+C¿Æ›Ú‹'iŒ2ƒ%³ 7ÉL×?ÃÁ 3jF(<Ý#<›Ëð‹ ÖœµÍq ì¿O qK(²r™¡=ð§86B:D»sxrYxzZýteǶ®œ<‡£`Õ¨>£ª(ˆÓ]éæu&<ï^¤ð´ý ÷5¸ÔšëÃ.>ˆ9$ò^"/´¯"«ê‚·’ùÑÄçKø9ª¶mqƒÓySŸ?މ)ƒfßO0ß~~ìMòï&ÆÙŽÈX£}Çc¦åŸå¯•nƒ‰4W³yÞHªwóÉÈ[ìÄÎ_  ÔåÖ‚ª?¨¤å:É^Ã÷¿RGDšxˆ d?’þTÕdüßMÁ à¸rH±ñ½üG’ƒ€OÁ©@TÕÎa’IRU/è¡_²I]4Ö)ÉL“ˆ,{n?sÍНë 9¥ÀD j>ÏÈ×€M M¦J¾؃ïqŠÛîã XŸXæy¦©Ãý®”ø>DÿâÈå.¥¼½i¸õ¢ùØÞ«`¦.úä·×âßVÞvïäjŽÇØŠ]åûí)¿•ý† ø Qmú²/c;Ô<¾Ün+]=Uæƒ-bµ‘mBák&ŠP?d½½ª<¸…´8(’o+R©i¹웂 +öGËÔzÇ‘5Oå+ÌÊð¢yC;17srÔ·âÚ¿åÑÎìïépu6$•úÎû´;½œ»²´–3Iƒ’9Ss~ŒÁ•Û×å6[A²C=+ƒóá ÈTÐݤ¢J¹½Ê[%òÆŒ9MjÇp{” ‰¢vöò{êvÇ3û®³)™.¯_Ûñ4AO寲h•ù‡TÏôóäʬ> ŒåZ,O²;škPÇ K~vB™N5@ªÒÚ¾|€e ‚HTÒ‚¹µ±]óáɃcç¥EŸúŒ‚O®°2!»ËQߨ¼;úÂ'Ï!ŸìQUëé5f¼­}$ËŽËpÅã]<ÓDêç~Úåy‡=ÐÉ€©œiÉmzƳ½˜.rétaŒ”ËšHÇ`Ø[-&Žä—beÏÎ&¿QÁÜYi²7Ô‹Ñá îòͨ-ù>;K t…ŠòT7ºúâqš@)=ºÍ¹Ð./‰&i©n•¬HÉÉÐÌ}­Žã]àÇÀ_[¢¨()H?¾ ·~ýæ5¼|ËA„ã¦!MR!Ÿ•­€àòi¸ˆ¥“5‚›áMY9<”è4ía-'?é·Gºñ[[zIŸBêCÏF¤“s•–¬mg\âí—H~¾—wô½&mdMX³³IGÄŠê¬1£f vt"ØŽÑ$ûëÒ[ZDfý=vÛvÝÛ^$÷ø\–ŒF¾,Å­³>-\Î'Ñ­\}$ i¬¸óH8ëöD“ªÖ0ËV|»ˆ|"0E.Ïy?35Ð8Ëú’vêõ¨òYÈF™rü†}Ô9²³°ZB›É¥™ÉʇžØô¨c,làþ\WWq¦òó\Rùb,Æ¢¬h¤1´æ¯×v‰JìSw?sÓ±ë·{*AÁJm‡Ö®)úìFFrÝ ©G^ÏÀ•p±•wlz›™5ÓÕåx°Gõ{•ÏcC–ªhY–ÏZ3A¿Ì·¿É×!Yb°(¿_ï9î±êªSÇ̦}æ ­Y”'6›O ÍßF-ÁÄãE\ævYaM,#ÉO5&ß`*7¿¤Q•»¡ü=’œ)^”E¡£)ÆÐ‘£ªÓphVòRÝ*he*é ePEë ˆŽ·Ùÿ:BVTèá”TÏ*†cíXò­ ø–—4¾|ù²±é™ /ô#žˆPª£õwÖø§:„Ì´¼G$‡XƒÀ™ÙË1Ùbœ£!1qå`j¢£Jÿly!]ðÕº.=ÕÀ÷ZŠo²h/y–—×Z¦É'$ƒó®&ñº?BJA2];}ú )‰2Àf‘IQ%}fÈD×ì3£Ÿ·Ÿß8Ì wëM)8VYþru"½«â † îÛ ¤ƒ~µ„ýÁI¯ñ€%J7&/ ØUë#ö]ýDºL¿{ƒAν]ÞžÆz,:žHoø6gkÄÅÄðŠº¯6b†<¼8<šUfÓWîÐÛ¡c•[I„ŽqÕ¹3=Ê**5RŸbŠ7Q.ø‘n÷%°*Ìܹå"~H“Q5åE=%À×Î{Fo)5ì68I:=XÐw¾_·Qñ~¯?…ù-ÛÏþF¿ÄÄÇ…vG]ž">Thû©ÈÄikEÖK(÷çÊòn÷èÓŸd/È5Ï~AíøÃì_µ!Å2¡ºõWx«*1´ðNZéß]¾XžâK-»mb˜šÚõdiϦWs±ö9iåä@î¡/'µ®î ð‡–BéÌœ8¦Q ºmýQc»>}î!XÜhL½ÝãCýD¨”Ôq ÐÓQƒÏqˆy’ßv³1/¨¤EÄñú·óãàg%¾³7†Œy.#•„^× +õ‚XtEb 3®Ðä3pZª˺©´ÚD¶ìa™ôü¢¸M6$_û-…î:£·¹¤¦‘eVê„ Âa;îõù{ª!¦Csê²~"êÍ‘ø*Í<ÁŸ2µüMàñ7’õ|ƒ½E7v/Ëôe×™•ÊØO¸3úµàÃë”-ÙÏ»žr•í×#²)¬aèÖ=.ølëJZ‰l8¢¤®¾¢sB—‹¬‘S— öÌêGgÑk$ æQ«ÈÑ­Î>F¡ý·ÜÝØ…Ô7Éš’à "‚¯{Y ´ÂЧò§øSvòШ”NNcéËŽ ëþ¸msvM¦ëÐqºcÀP!§¿ýf³¼‡”É–^êksú?3Û52ã^ï£UáþçWR³>*4$mû¹ÝŒ¶·5ÉM®ß‚¼àåTñ,ÿ'Éà• e¨SëØL…ÆÂÈrÍiäÝWƒáW5Ò!RTÃ¥™f8äTsü§‹Xlp úO1Û%2[Ûj ¡9¤nÚï²#I_oÏM¦“?F´Lé;FV˜Çªõ>Dµ‚ç“›TiùŠ€v1]Á#¦£µjæ»þl„ÕL¹#lOÒ+žÍcˆ%¥Ø±’t{@qwêáï§AXFšÁó… ˜;k¼àÓˆQnf ¡g¯¶K¶*“_‰.†ªFä ®µ­‚ÖvLUÏz7¥…%‡[ƒÑ"çš`·?UѩǸI~1g!V¥!Ô·E@ò\Ä sö¸Dƒ†6úË=Åe‘ƒçúXyÈ{ò}êÆòf÷|èH†ºÔ^n…<9!X“Ɋׄù®1ÌùÆRPv&3ŒdÜË÷sÍßA-ùH#ÛYþ{¥xy®gÇek¡m ü=™<ß«fHG’>®ð,j[|ƒ5ô5e­4$ˆ§sðy ‚¤æ®¡g¶‡!Öû½f›rð!ëߤ(¶`:Œ‚Tö¬Õѱh’Ìà¡ ˜ÿ›Òÿ'ø‚ÀÈ h`YØ["ý/i­eendstream endobj 62 0 obj << /Type /Font /Subtype /Type1 /Encoding 374 0 R /FirstChar 2 /LastChar 120 /Widths 379 0 R /BaseFont /ZHVLIW+NimbusRomNo9L-ReguItal /FontDescriptor 60 0 R >> endobj 60 0 obj << /Ascent 668 /CapHeight 668 /Descent -193 /FontName /ZHVLIW+NimbusRomNo9L-ReguItal /ItalicAngle -15.5 /StemV 78 /XHeight 441 /FontBBox [-169 -270 1010 924] /Flags 4 /CharSet (/fi/hyphen/period/zero/one/two/three/four/five/six/seven/eight/nine/A/C/D/F/G/I/L/N/P/U/a/c/d/e/g/h/i/l/m/n/o/p/r/s/t/u/v/x) /FontFile 61 0 R >> endobj 379 0 obj [500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 333 250 0 500 500 500 500 500 500 500 500 500 500 0 0 0 0 0 0 0 611 0 667 722 0 611 722 0 333 0 0 556 0 667 0 611 0 0 0 0 722 0 0 0 0 0 0 0 0 0 0 0 500 0 444 500 444 0 500 500 278 0 0 278 722 500 500 500 0 389 389 278 500 444 0 444 ] endobj 57 0 obj << /Length1 1630 /Length2 18452 /Length3 532 /Length 19357 /Filter /FlateDecode >> stream xÚ¬¹eP]í¶&Š»»³p‡@pww—à,`áîÁÝÝ!¸»ÜÁÝ‚»Ü|{ŸîÓun÷ŸîócVÍwÈ3äï¨Y5©È”Õ˜DÌìM€’öv.L¬Ì_xŠ [WgU{[E{y&U …+௜ŠJÌ hì²·7vò´€fq )€ ÀÊÃÃ@³wðtYXºh5TµèÿSò ÀÄóhþz:ƒ,ìÔ_Ü€6ö¶@;—¿ÿ׎j@ ÀÅ0ÙbJÊ:2ŠRZ)E €ÐèdlPv5±™äA¦@;g ÀÜÞ `óïÀÔÞÎ ôOiÎ̱DœÆg )è¯ÐÃèðŠàt²9;ÿ}€œNÆv.{àbÙ™Ú¸šý“À_¹¹ý¿rp²ÿkaûW÷LÙÞÙÅÙÔ äàøUY\òßyºX»üÛôW °7ÿkifoêúOIÿÒý…ù«u1Ù9\€.ÿÄ2Ì@Î6Æžcÿspý+ WgÅfÀpZ;™ÙÿÂüÅþ§;ÿY'à©ÞØÁÁÆó_Þöÿ²úŸ9€\œ6æÌ¬lcšºüm²C`ùgVdìÌí¬_þ-7suø:7 Ó¿DûÏÌÐýMÂØÌÞÎÆ`4G`Q´wù@ûÇ2óÉÿ ÿ·üßBïÿ¹ÿ•£ÿåÿ¿Þçÿ -éjc£hlûwþ½c—Œ±àïžÈþY46ÆNÿ?c[çÿÉë¿ZkÿîÿLÆÅøo[Dì,þRó…ùË¿… gIÐLäbj 07¶ùÛ³É5ìÌ€N6 ;à_nÿÕVë—/ÿE§n 2µ¶û‡Ž«€vfÿµ‚¿tý+EMEUM†ÿÍ‚ý—¡òßApQ÷tø›ÛT£`oö?ÿÀˆŠÚ{¼™X9¹Llܬïßß„xØØ¿ÿoBþ ˆõ?Ï Æ.N €Þߺ¿°þ«úÿxþó¤ÿ_`$ìLíÍþ5c;³¿Óö?ÿ¨M]œþ’ü¯ð·êÿqþ×Ü@S„•E{S¾`«ô¬ —:ÜÓâzý½¬Ã!¥êEþ5ö=~éáÛ<•Foµ!ÌMÓ¼íž §ïû²ô£½864=©ÀË|¢ït}èÔ\ ,¥ÈgZÑÞæå· t9¿hìLª¨”¼ÁOw|u‚ûóHçOáVàEùà€âkšÖ‡Ý‰Ö†QWxzFtüø@3862<Ôs Ý·OÈOÅç…Låï˜K(¤«Qé‹M/|/’(s³?`¬ót §Fi¹†JzÔµ>«¼£enõH²Ì+¯Ûá«~Q~À ’.6®Ža¦!ûóTì0ñUÁE/Ñ&< ª7M­)®n÷’D0ëL–ö¡·m·Ìe÷ÿ¡I|/>ZXŽ}ŽËù™Š”ª&Ï“­jPŠZ°½82(§!X…í²`àéࢠ•øùº~ø*ìê¤v0ç®®lŸ]µÖDtWÓîk‚VFÐÄ̵ލy´F$"‚ĸ u]Áýy¤Â¬x…åM¼ƒshýå»QµƒÅtQ0ÖÇ~ŠÈv83¼ÖP8€ßkmŸ8ý„ã.;s­…FÎ+¦ëúì‰G0ÒTšõ‚è 7ªµý3¿ÛGei“i€®˜2B:š©2ÑsPå?óˆÃ® œ3X=ôy“×ëõ’^ ªZKØ6”ÌFŠÀ_âՇ͟¬wÞCq³D˜€‡(BDO0Nï]Ø…EU1!ëàžäz7ÒˆRVœÄïk§Ö(€ÒZŽ;ˆ’aNp@! siÇUov3LäÕÁ k›æà®IÀO¬êß‚Tk ò3ä'ü¯WòƒÈ{¬$ñ®sôÍ—(ÁYì`ʇƒ¸Ãf¥¿4d֘ﮓêû$9úµ]$7µ Ũbpóϒëk#2 ïJ&ÃÁmdŘÏH ˜³dMsäýç½åÛ|¬+ýÍžý¬ÃÉki³S&·†aôÙA‰×ü«f# ¶ýEجºqfZï‹y¸[ qg*ø” ð/”‡ãÜQ³ñú]¨›Òk¾î„ Õå¸õç<7Ò’9|²'IÞ¤¹l¨ý«Áäõè­ëN¡>SêPÚý£?¼W¾†]ƒM¸=ú¦ÕîKë_éí1†-H-Õ¤°$Vä'Ê#¼™‘k&–hd7:Ø,¢žû=õ œ×=!h¾ª©Å€Ÿ'ST~¥£þ0ši1jtØjçÓ²wŸ_eÍ‚‰{52ª¸CižRwqö„Ü´8r5ç iìÞBøM° Æá¤ƒÎƒwp“ÍoN ¶¯wÈ „| «ƒÄý$(F÷ÚáÒï äö Ü}ŽŽv.¨@H\+£ªÛÿ-•§HÕ N³Ì” ÈD¤PÅ`Æó3@Z«ö±=ÿà„2˜!8ˆ?)E¨ñî+Àc»®3¼*Ð^gZ:$=âGøDa¡™ÝÏ¡àíô™{% ×ñóç\®s™²£F$ª¢H¥FF 5i†Ü9îXNOÆgï¾ð ÷O׉üd¼O}—éh5 §3ãOçdÖÿŒ±´‘çÞÃÿ.üî a:´Ãœž£v&»Úº6\¥&CÁ¸UHp­®¨+/ÕŒpÜ¢-´à±ªŠk4uMH)œ$_y D{iÓØï*)”#\·î¾ yî2–ÛÌ䟫p›ÚÀÁ.wI„ƒÂ¥¥À§`¨Âq²ªWº‰ÒØS˜C¥0>/µ4g~BŸšQ<1T1Ò7Œê|8É*yBÒ šÅ—LßÙCj¿ršú¡Œ¶¥ÄíV¶Õ[ß~ÆA¬Çð.Á<ÛÀ“‘è¾~¯„UD©ÄøºtQ¥@#6±NT&¢Á6h*®©Ü4ÐØ¨ÐÿŢɧz Þªže^:r5\oqnÖÙ D `¢mÀ(]qЉ¹Úpvç#MHƒŽ«·bWÒüõè%ƒk9 ÛÎ)ý›âY¹ÖÌ’KºO¾‡ÞNÎhØ~ûÄ`h»¤A9G,>›”Íòé!ø'áºW –½Ïרá…l\Aý4äµ³âÇqeO ÿ ªFÿ¹­¯r2à_zlQ>²[â”qh_ÜœC Ƕž[‹™ÔÎ÷væfªœâl‚|¤Kõ¢¢xµÄ9–ôåA ñÊß§!æMdÖÕ‹Ûª%c¶ ¼Ü0öK†Œœ§ÈQÛDË¡|c¼í6ÌÎL ‚µ÷”ŠAQe•:¦U’ç„Æ´Wv\wYÉŸÝ„J °æ(ÎdZèb¬7NŸ®^xŒÛ>!ÄÇœqüŠe®UÜDB2+2;.ig…]—Ê 6Aø¡MprÄõxO—„íB'$3ƒ$6&©(Au–{y [²>ÚïY”nˆ ÞÝ%S›´RL¤·´ñ;^÷Ã¥S?‘Ÿ¦~}É„%eãÒîÄš®­š¥5¼X’¿˜tÓ¿w12#õ‹‚£Fø<¶%ig’ M8úÍÕ¦¶)àëS²GL¯ÓÄ}{üÍþ›RP»Š¯]öGéˆôµï¬b’Ú#|DWfÔ\6Æ`7_ª}„i}‡è´ÚP‹Õ‰ÚÕ‡?õ÷Ĭäk‚PÙ «‚ÁY£çU¡ë­ ìTᇔÚ!”Q™>˜v¢±öBÝÈoÖ3@.‰¹*¼Î³¦Ý’dþ¬Y`ƒÒÌB–çDbkÅOصp²b\ËÝ\˜,a «sëÄŸO‹WáF$ˆ“À„è]·7V+4¼ôÙ’„åsúóuå`ÉóÝžJµÏx¿7&]͸Hwb÷ž¦ÚZ‚Ñ7ÆQ§f‚Ÿ#¦dOµ­ƒ,IYó"‰M¯¯¤t‡ŠÑ¦VˆZ æYÈ>ƒá•X–ëÁ¨Ü_NÂ×/“6¦î»þp¸Vû¿Æ™—µø’î`þvlb& à„9Bó’â½Æõ:•×:…þÀJ£a@ðÚË7«V%ׯÎýzU ½±(’ò™•¨Ñß÷˜øæãÉæQ…VN”nò"M e‹oý5´%žç,¨¥ëÂm{ÖAY¼Í»A2À~øÈà©$d¦ŒñOý—xÆ0zXßÒÏíä'œÊ|1'´Í„<7-Xäí¸AEW RÏS±ÎZÚÜÔ4Ý£ÖÓ]¼ëó°B¨A»òüuÑ8&®¤·Ñ Cu¥ha:7úqaTÑLjb`Õ8l-l­r„3š‘ ì ,ˆÅ 1¤Döˆ‡¸ÉèýQÕL9uõàJÁa×òz¾QÅÊgÒ%¶nÎVÕË 3—6íinpý{‘ª@ŸÔå™§†!SzŽZâ„)®»(È|=P;qB˜@Э©ŽÓ:3®v~m¢×dŽT#‡Xoœéeðùý;[Î «¬Š§—õü¬nV"å'–!n"É­ç¡ð¯y.ôÇÀ•Q)‡?¸šüŽezÂ:EŸ¤N•eæ©¥&.þ¢ç˜#fcÉCƒÝ®¯õZo;EÙ]šz¯ò‡iØõ2„f^[¨Å¹R»SøÐ8Fñ]lJãÕÜoòÌ^¼âm¡g¡H4Oº?2xS*ºâÎf¯9¾ñ-Ža„ÂÙÀëaðËæ‘ÐñáϱE{œççPÒ Ë™to—CWªSï´Þ¿mÛT{ª¼Þ.5½ÇîeŽN'–þÔôTæÃßAâý’´Ù³‡&²J™uŸ¯Ö±^½~ ó& `4«.o(ØÇüx·–Þ lIùžFÕÜßžSŸ’ítÇRtºS [2ø1Š‚–ߨ®=šO÷î2¾Ð)±¶|s›¼Q ©dÓüúa @u9ôÓ± –hÔ²2û•ÂŒ'8²Ã0@;@F9aÐAŒÆ¡L1TçüÃõêzNyÚùCйX s§Sc•0RÎQ'•–CÅ,ÑŽN}Œ§4ÇÓÃü} ÷b¢ÏpN[ü._]i+”ë'G‡]2ëÍõG•9d”ËCQ{‹S™ó¥aÌb÷Ÿrz\·“ØÈ˜-ˆ‰i|‡je¨'Í@-ΞqÌkÈ Ëo ^γs!DÌyÀ— aQœj•úeûáh®ãÀCÖ;¸¹âÀ¢[ç4ªÜÅ™y4ä"wÖDq̱b«4¸,Ü»ó.,ÿ,îŽ|rYÚûiµü»Ê{_2TëÒˆ3lÐÄŒLáGÚãašHX–’Á-AA ­í”ßCéïÄØj£¦M\—’C)†ïÚÁÄ„©{9]èæÊRð[³§Tüâ›Þ³qH sR¿Ìš†#þdýÌîQjU…ÆV¾? EZ,í”?TNµÂ5Nc™xVTæ5ÒP/ã„õ$äø½“|ÿž_¸ ³fŒÕ,¿Ò”±¹v2ðè†Is’Õ$;²ð$Ï0Ó¾ ‰°âžM ý¼ñ;U£ççõÒﺯüÍÔ{ɪ¨séüÅß £ÁÒîMFJ|ì¼p{„^ß%T„8+m½•a=¨Í ¾_õ ’_ÍÑqòAËqÅ2à!õ’pò8Ó!¹õò æ’Ÿ¨t¹ø§›£|ŠÉO­§Ê5]È›s|Ø/ÿB¾ã;r6ž^…œâ{%LD'™¸"£»Œ—âÜ û¼ž¿ÖbbOÚGñmÙúax`žÛûQqšHCì=МKt1Ä7 ;3.–ø¼Òn@Î1nò°ˆ‹ž†¾)l5Ø›‘kUÀa‚•u+…‚]ûuž÷èã ¾Æwø¤Ókõ¶wîê€õ'á9ß!P¢Ù|\(êpVϽeU½u`êW ‡d·]»ïG@CºÉ­XuTúŸ&RæB/ÉÅDxe—Ï_\ÛúߊiŠ9O„Œww*¨2FáµCµ^tƒ{À¯ºpûÏâ5w4œyˆj™„(]›‹£D1­ÍJ pZéû:ÍÏÖð«F`5y‡+?™ÇP7õýIw"*½\¿äŒ‘=°¼¹“§³~ˆ]¾“Ê#ûŽ»;þ¤6BÊ^b6uUõ‹XÞ¶yAáÝÛݘ,ØÈxèÞóXøø^óŽ ;þI­D-CC¤o;ˆàßù°à»€ì&ah«Ý1 >£å#–a¾XëëS,¨ø fñ‡CEz?qzÀáœhKÕ¯ì7N*©ˆ*~ù ˜RM—Ú:}™ìÈ|²ò‹Õcñ~öÇìþþ®ïN÷5,›jrú­8…²‡’8e·Ø,ÕñidÀtJ’_ƒm¡¸(÷d»j½ÑÐúëF û­X™#‡›W/|ZI½œAºêØ¡¨¾R‰ž³Ê‚hÁmgº(Ê%hÊ,ßö‘ôž%Ü€ìnêZ ¬éw~Äz„®ÈÔ“ï7¼¦¦& ÈíOkKœ¡:V†v„÷ž–½‡ÂѬºF6õüÍÁO ùƒ‚G—ûpÞ+ñd,Ž·.ج¶CuB™Žç3%ùƒÄT ÖÝ…0ܹ$‹*Μ¨ 3Wí†îZfKŸ ¥Û6OÂ<)Ï’h˜z¤$ÿn8Vœà2¤[Á’WÇŒ®ã\+€¥¸y¦.Ñžê*ÞÇ4¡Ù½™Ûw„#¿¥¶†;Ò.¯É“ˆ».»j”m˜´6û|y9:P󔈞A•اrcËð¯yÔrÏã=ô¬Hm^‚ïY‡ñwéÊ¿“ŒÖ=²©Q3-¹²!‰„øO™¯„’×Ɉ&’ \)‹úU¬L¾ÆqÅ;ãW°S!‹BnÃdºàIê¾&øââOHõèó•YÆЬUÙ·ûôîEò„SÂävÒ/t»Þ-8 8Û­$ ‰ÎWïòÚt4‡w*G€=þ2ɡ͵°-ÄÔNn+äþí~m˜awSŽÈŸËüv°õâfYGƒî©wH5à7ö7¥>€2<ŸÞ´ËúJKצ‹f6¶p{étYã…ô…o¦´ÚL§“X8½Q¯ù¸†Å<£ççãÎ*Yƽ®·×^c­Wž1Ë-ΚHˆV;î'cCÐÄN… +§ÞM§ÏŽÐS·eÇPŠ{äÑ„5¨;Ô­:­ 7WŒK•ÙskXP°v(Õ»3Yö4îû+K†PB¼¥â*ŸLÖ°ã@¼l˜­«ÖšDÑ$5#w°pr°ÒÍg^kjU’¢Öý’uSj‘\”Ì(†C(C-4‘E ‚²ÁO™aímòÅÐì¼Ðnut°h­rW½x‘Q°9¨H©D÷µeûOëLw’Ÿä¸;£JE?Àçê3„£Vz¼¡¿¥;ŽB²¡l‰2íÕMk¢Ux˜{üñ’ßÚúä#O?,½6"$?ÈëÅÑÊ™*–¯©àQ$ÝCJd%öƒjñ7@†WTˆciI’¤Ö4;]}†W­§:XëjL;¯ç¨3K˜}¤!…—-®ryÜ€vM%nP†Î4bH†±†»éT>¯Í…è[ÀçÖÆ«Iôó¸[Ó}iÀŽh`:#Á,»g n -Q…:é,ÒÜ 3ZœÑl`€ˆ\»æ }Ý7Ú–U@.¤/ÍSõÍ*cky›‘Øæ•šuOIÚ>Öåq wgì°™&KõÜŸ†Í±Öîäe¸#VVj ÌX¨bÄó7, ¨9$}¨^© ï*£œõò†ŸÔÜÈ’„ -pÓDV¶‚ù¯âr‰}˜ys¾ì:ÞÄ}gXL‘}I¸2JȬ¨æPÉÏNů²¡ógK÷ò¶ØÎ™ÁÀê:4µ‹ÖaA_Oqh-kFŒÿ¹ÇÌÖ­T¤MrCŒ¢xµ¬é˜µýïfÔ2g7Ã*õ¤Ò°Ÿaô¨pèæ]ŸËùàr^¨bà‡˜;)B< •«ÍºIofÍVVÔÌ*HñÔÖ¹wÚuõ…À¾ÐËÄ|öV7J¾’ܽ’ =Ÿ$ù<šÞ59˃& b‚Atom«z?L+‰Ü¯Ô*ÒŽ3…@ÝÛ ‰a¨-IÛEŽïìQÈÉ!H'TGjr¤þ·˜GÕ1±‡ù L¤S\¡¹æ5™_g° ÏÒ*•¨t®L½¾tÒ€1¸™,Ýs«Oî·D[/±ïHëJاENÚD.ë¼”½g¦Ûõ2Ò Ô# 3üCjÇù~/zþä Ö£¼È‰vT¬8¦‡ª7 âbñ>ñ[šQq*ŠelæŒÚÐ`½Zßr’Ùè™mí?¬wyÐ,X{b¼<ÚÕ£Æ,SŠP<µ)Џ’˜»l¶UUU)ïkŒ·îÉ)fÐÚµTŒÈè§{ôÆÒÝ×hý«´´²Hì]xî(2gcN­ž§3-ŒñØä6פ±‚0È#Þ1ŠÖùyzáhè+Szó£r¶±‹§PÀú–5¤´+*‚Û×kíUÏòâÞž®)㇒ëI}à,IÎ^5ÓÎ}”yà}#ƒUåÇç/•e×¥$ހΠºSìjÚì! fÅ Ý8¦Ü°:@.ÃÒ«‚HÂËâ\ÂPaêD{i-; î2]Μ[<·²Â|c¸yæPnc‹ð¸Ih+€¾ï²d¶U_è°®7S=œH"[™Ï˜îŒ``~Hw›šƒÇûÞ†:¦*â¿ï¬”STo«ñE€ŽHå!z Ä ‹»eÝ¢ÜO¦„׬}›;vµ¶Î(~xgZÐ:Ùb6Õ1²ùsÕE¹LDèt:0™^î|Zÿš3!dÿ[ßã3Ì7õ&ëê¨ô›ò}Ù\Dqájƒ¶`l¦m•KÎL«.ä†Gh}©`šÆžWBýz”{žXûò”í&çFNå‚°*Ú+åë\=L ™Çcš¡¢/ q*?¾&Æ7*†ð«å–Ë­ÀÅ$"_F»ÖP~c îÝH0žð¼øÏ:ÝÜ¢%sºí²êÂI vÀ‚«Û<8!ŒNGú4ÓV ¿Ý˜OO}M~ŽѲà©È^ïûóeŠÄ°Û‘Óž…fû‰ÇÏ5ÿ´§’÷c÷ëG”j‰?i0*ŽØ^ÍÑVŽ“?-éïš#Z:Ê­Üú#sP*.†ÙçØ4ŽØ‡ñÖP(`Z°e$~çp[^-Ÿà 5)r…j~sè¡›íjcRËf{9•¸é©k»}é å|jå& à]~Óƒ‘º=‹=?:Ne”ÜC¥°»myû[øa} —Õ–ZgÎIz¯Ì2¹ç›a¿ Œê•àyù@Ú`ƒç®V§¯‹°,ýç²ùIÃp™XgC §Åà=b~mx «Òˆ¬ÖžÏ |¢™»íB¼/égÈà,¯(åÒ5ß²è¥ÁÀXlåÊ`¹AK8»w·¯>ÎKð8C]ûÍ®Æ{¢`ÑÑÒèɬÑ(p©9Êût齿«ÇÍVI/l ïñb.Ç*ÿK›ÌâO¥&Gw^òq–ªZSϲ:JW,1õuCSÚ(" £Ï°Ø³ŽRò‰óÉ·¥@ õí±gçåS1ImÛr¼špÿ”/“CH-ž·“,³Yì¹Ç^¥p7LE=ýÐò¶D ôÉ4OÿŠP bG}µÆ—7Lhre<‘¢Ç?xÂo¢C‚ºôyû˜y91‡¼õ˜^€8g\<>FêÃÂë>võ#”¶²Å‡±×½zÊ·°Žð¥ŸÄÞ•ÕJ¢v:òm‰`<[£#åjÃè8:Ã?.šqžØ¨J©¢îy0½Ô‡GŠ‘ÐklRsê•0Í(\ÞÕã2Ú±ÑãšêÆa¦¥l;INð«3ÜÜéíG ¾ýdÜ\… ée™ûu{ÊX“iÐgi"£„pßñž„+o…ÑÆ-c–â`é>oO%^Ðx)²?½ó8ô ãI§cª‹b{J𾯸Œiãu:ª¡ßîÀ®[Èr?è ! ÿ´Ö3^Žl+ ¡.CdÂ5ÉrškðÿPÅ?Ó)æ7ì!-Åü³ˆšÛÊÏlåLG÷ènªP|U€ÁÍÙ;‹¶VY OöADùøΠÒâ£lTŒ$Í:Î7ñý{®õ~ï^© œË­¤\Go±Z61.°nÓ, #bÉÂà ;¶‚éüL¹<`Âûdúø³=ìCíkÖ’›îügŒK¶Õhð?~Iì(ÌŽðÌO¦?àh(o-¡‰µ"|—ã¥Ì‘(Ľ&J‰AI‹Â¤š*BøíÞ³ŸÑûU(®~9 )Ù¸?;Â'äN4Êá'~–LCi§šýÓÀWš#Âà^J}T2?’{šèoý¢Ôêcе)[›1D𠢊=è“ÍA~Ŷa^Ïâ€A¥M¶R¬é>‹'“uOöAR;Óh{]b;„^«X#“"Š¡J¦ç'X><ÉyƒV¸Eߢ@C§ƹ1q³Üÿ—íH…PŽÎ¨êÅm³Ð+Ün¿«"ø6áßl‘Hö›ìØÌÂÉçwVTÍ4A•¶À>.Ôê„Æ>Ñ úÆœÆjº#´yÒrûCaò8ü>F6¸öÏ$Ù œò+cZYÞ2‡:üGÆÞ³Zcñ_PágºB¤4·Ähïý‡ ç¶c’¾ÐÕN[ÿðmþ­Û¾aYZê¦ Žˆžš¨"AâluŽ>—¶Tü©ñ+ó ¾Â[äBáÒID¯O¸®@µg‹/&1®ïJ YɳÓ;' ¥«rÛ‘P—YÙü! …‚¤ÄOËâRøê¹dŠ\:QSZŽ"ÄŠú~®ÑP•KP(gœ£Ø¬ðøòµŸoÜ­}C‚Kž8w:‡1è/û~Eÿ“ÀG%ï`íý‡òÏ_€¢ìñœÙÖ×)Å>ìñïÌ^ȃ—¥9ŒpB¿Ô ±rá1'³óã.ÞR„³üR Z¶sjgr¹âj½9ÐY?0™×»ÅCàí«Êj?ØuÓBœnçbƒš*tºä ÿà ÕÏ"6Á RÕß ,æ.¬¾s{馄ã†ÄSˆHº·¼°TP’’ÿvcqrJH cU~³‹ŒE`’oŸ"ºDíž¶=>"zÿ:—çXRšÈkº×ÐLZ­_ªŽvíûÑ^ŠÇY¿v\@h±-¡Z•(/4§˜m÷ÈbS~鸄S $÷viè×p¡Jå+á(F¶É‘0yD]Jœ7÷;oPw-O’k{å¸ù‚ôNË×¥ˆæê Œ¼U K+Ï ²}»Uþƒ¥ÎÝÝl%°›WÀÍø BQ‹Âõ–’bwvÀ)ßq®üj¡ÜÓT3*O•&±Á/ª‚AYQMržÂ-WIBxöSJFÆáž Õ¸oü¼ÄΔõç Âmžöc¦IŠ|2“™é´yϸ·n(«ÏKØ)&Ç´¦½à XÔâ$2%ÖMÞ#,ß+õwö[?¹o}g>¿Ï~Ž‘þÌ1I Ði°ÔT”½½µUÃKìà­­Á ü€L›éLBq žÃÙWuaó— Àg¼9’\‚V[öçÆª•mžåaœöà4 z÷dó°ï¬7®DˆB»†7®MSp@Yékae5x<~ LJ¿a~ªËyÐrÊxy†¨Ùªâ-˜ÑÞbfItÃuÚúÜhD•ßEôâ\=ƒ«yu áêí*¨ (±Z Hi" ´”!që@6Éä ^×™ØóÙOm㜻zÁ øÑ^¤l£^b‚Ö,<­ùpÔ¹!¢JU¬Ž0©ˆÚx‡>e×Ë”tx¿faqìf7ÉmB6»w¹9°i+’ãÎ=?·N]^ Úv±S+šAvq"¦¨R‡ñc€hʲ¼?=Dèl¿ö:g…>É>äãKlìî°¦©õö¯Uò­8Ž•¡A ¼m$H,.¨…õ ^`mø¢ À†Ð¢šl0r‚,¹~L1$×ÿNc‘£ãýĸð¾½Ãˆ¸‹^ÂtºÁšìr>‚oe@ÔFpÆ.WzŶ`Æ|r ôf°å{PL“æÏ·²p¿c/6“><ö;0}2Q¹ªc¿x>¹4péáø‘·F5©}“HzOáÛÃÆ½îáY½ÅH³ÔªÐB?­E«…}Ð="$,;¸uÿEè „®ù–Gp¶ºy¢Ôµ‰–òŠQÒ™XÈ,ö"s“Obiëÿ}’;šhhKiHSyCo#.Åhj¥•Rø¾‚o‹;f"3¤DóJªÞLzå‡L<ʾ–ûôGRE·õ`nœ1Ö$=œœ9!U¥ö‰Œ’2Ÿ|3„œsß—Ò^O3R&²`/ʈ†èK zê£ÖаÙAFñ.a‡¸X´ ¡§ºµ}óø0?´ê5Œgœ¥•8ìP1k"îÜ+s%Å »wƒ?ßö“áh¡=‘–Ou*†ÐµQëC~ÀéBS3÷³ íö®€}öûY³x΢^Õ$ÏØíÿ~óSòpJRX©Ol‚_‚¯¢~qÕ€p`•÷”BçÊ0Ë~‹mÿØîM^ãïZ)@†ê foÙ«7 o书ïhÎáV'c=ʯX[2Ä"i)¤‚׿t1?YF ¨ÝЗÊÀ‚ä)c@éëF÷±D¢p°^ËzBæÕ]I/%¤â¯—ļK!Q“•úL(QTXLö{dÆÌ2D¶ÖE$…¾?fy 2ä ¨»/é“I(·h»újJŒ *”õÙ¬¯‹»æU޲ր9ùÍñÃ5'®rÍ¿Žÿ4ù:;#vÉäáJÞ™~Wf!qnƒÈµ‚+(>n¶ŒM–û¢ïÓÓêÇó¥Å@äÉ%!·[Qˆ y DÙ¬›áAPÒ¸Ê%©ïÂeC„ád™|ß멎\‚µNý¡%^$¿˜sæáwG½ÈÖÃãP÷7X!-Crm3"v¢ñcûZ‘[ãÁñ+g_½ƒŸ=¥…@e«=Ÿ/{@µUçCw÷‚ rOY—dB*{D„ÀÊ"­\º°Õè–û¸#ÝáÙÎåîuC…;ÿIZ€‘G0Ædšzá¥ÍÿhhaÖЦ¦NŸ¬ß¶¨8ž&rX¸b0÷Ž…CÿU,ô›soKJ¢ßE"º©ž¦~aþ×6»Æ*1ç.ñtxÛüÆ0ùä"‰‚)-H5ÏukF£ÆOÔýXŸÐ‚³½§#Dââ2¯oKzÅ…ìXðX‡·¥ßñôÅŸàD^¢Öð7Ó¯óEs=Ý–rí‡B ‚L‚ºÝYU‡ÆëÇ÷äþ§Šhjy’5õÈ‘/µÊå³Û!™ XSÏp#MVpÙß»·¾×?GcòÓ˜†(9L§¬YàK+¼‡aES¨/͹;÷¯‹'£…=D¶òÊ↠sÂųf ƈs|Ÿñxᘋ­hübÌ«çx†;¥;¢§'ŸHm䊑²&阪Ow=q/ûÚ\Hɾ¿qüÀ>¸Ú`FaŠzCÊHM ì ‘'¿5û÷0µó+Ýhä…Áz`7Ô £ŒZbWoöb ×ùTû±®¾¢ 9ÇI]A«l‚‹ÔðD©¤T€Fc}>ß‹ë±ðã¢Ý7[Äî£M§¤ŸßQ2‡?~éu¦8‹ö 7åX×Q†¤^¿af(¦»³ÿИÍ—žo·5Ó+³RRã´ï®º ) ö¢+€ùã)f53”ëå–H‹cmp&µO΂oÚ3-Ž$³pýù}á-b*M8Ž )zÔJŽ×¿”H¹»vIÇ4ÉS݃SªSoj'×Y=<èlß„{fè:Èg3á)å yi1c ÌäcÙ[8\§9[5&RyΘu(¢_U‹ê?]]¤<ˆ¡¢ÜõM›¸[ aKA7ïÀ-&}UŸbjÜ#%dVð;r*Ñ©_˜ó¨ãèZKº…àÖ­«8­ÆÂ,,Zj2t•Æ™&ØÃ^„ ?Ä×}k§y.÷9 \ÎL˜rG}Å4Ó•ô¹–…‘ 6ü€y¡Ýì¨:@`(m{.íþÕ@òŠRÿ²ýÔÿýËCqä†Ëñ$I‰:ºc~@’röG“ýb©k-Ft!³Ä&lù§-‘|cóma&]öp–Ü›5ª¨W±v:ôxs«ýHÙ>hµ·YËðê° ß«'ŽÈ_»íIÆ2ßX?ߢïƒ#žýyKÁ£¨›V%”ªie!èÁÊž»½T§_Kþ¸(üÊík1RjððêÚüã×4Áôà‰c7§‹kâůAm¢X6*Ȩ”EZ÷ ¼Hny#*IQWúóY]àßÊø„…¸sèΕIFïÐ:«îù¢ð‹`Ø#p‹­§³ÐÉ{ªÅLG×ÒjwŠ”<ÿÌ  çI)~ÜZ«±_œ Ї‹÷Å¢¥ûEÙõŽ ‘5X=U ËÂm÷êØÑêøq}§yP vL}ýÈ/RàiÕº¨ŒLþ]•~;F­‰cg˽U<FÁMò9Gé¤ëƘLÜÿÆþs.–VmC Oß­j{*ƒèLþeaâl¯¡ZKºÆèÕS =z‡ ˆ2JôdË ì?~­q¬hÒ¼¶qŒ¾Ã}‚W°)\غú§T»"/'íÁLk‰1£`NÚ~JïÆžŒK@t"±nŸo€Òve-ÎÎa›õ‰Xá^„ =`{ÏÙÄ~©<“Ê0;Bè0£±æõ«§/®ÄKdl“•ä˜,‘’<ܼ»•tp¹X_ø]d™:S©\éÌtHµ3½+á4Š0# ng”u9i4#}_’s`cá½™œ§¸ áŸÀóúúÚ‚!mP9¦°-=Ä_—î¶á©î8z0€_L¤ ÐSÑði_ý,@?ÛïçY¿Cdøq‰|Íb\½bëî(¾(µ;mÉ_7*šÕZBʨµwî©®§>ÏÚþùA¿Š©DÄiÜ&÷NC®¹Á”I€#½ˆA†’{åÌëÑϽœ€pÇ]¤¯B³-);³Õ½tÇÔ)*co>$â A2ûÊýl‹¨ñmKÝAÑêÄbÏ‘¦ÔR¢ Úåûëá­lÈT-LþâF@$«Û×vÙ+v¦¨âoc>硾q:hHF›êÛ ¨"-XƒBƒ_a Ð@ãÑ‹göjoi$Ä ùATüõ0Î2%>ÄÙ×.Ùw-+}./•”e×q¿„.^UÔSÞfü‚±éA®¥ÞãâgŽd)]&Ñ=³›_úRóE£‡€°¿Ñ5wÒ?ëEû¦ú9át4K„;"EÈõËì]gòÄy÷‹ï{R‹Ý‘£$³E…&è¹ð?a$ÔÓ•UŽp¹9™ÑJ%zù™y$Üv£“ÆÖÈtÛÏ1fTLÎã Ò¢!Íô eª5ŽtYmzT©hº 8#ÄšÚ§à$WÃzUfÂúK*KSãë‹mÐŹú0½í1 I´$–±QØ ¤Ê÷¾æBO„U»##Gkp‚ìÙÉQ%_ø¶*d‡î~+â‹Äìh{æçU@©k ¢"CÑ»;¦¿¯½ ¼ûȉÔíýZŒUî($žœ·ÉÔ›$©Š~åïD뮢ÊùdÆ0KèbÌ»Š“~Lä'*°)©Æ~xaáù é‘À‚ñýÐÜþÑž‚ØñÛ£åJ¢–@ÂÀ}¡3,–a1Q¿PÅ—$º‹qïG‹VƒdÕôë×IÁPðÐ~y?s+¯Ku “†™~˜—qôÐu)úÁL¬žÖ|m0ÏW3±@RÝÓ^[äѦlˆç›~&Ö(ïïó÷LrǼÍÔ kZ¾óȪ§£‰^pÁªñ*+}a«(9ÄèR×#`õ¾»9x Ÿ¿E>úzHÉâ/z¶T×k ÂIÇÈœ\“Ì>6àÛeâ0²í3 Xãªil›—œ>ñi¦¬Çâ½+¾+èl‹ŠÛ®?Lwÿ މte²pbºd]¦E [ÆNŠ_8v…T¥þé£?²¦ªp”rx:xäèœb,S$´®:uºB_ãõ ̦õ¨ùkÇ®¼3n"¦ÃEòµ%P ô$c`„ ŠÄ…WΫ¬ŠÇˆxStÝ41ûi: A¬YO¿Íc‘q¿h 0¢¬#¢™^ó^Õg™Ýrg{Í=GÀéÀyZ“—ÖÀ…DÓP¶9ŠPC(üœô“óù£lmس @%YàÒZû¹I*[5#ȯáÿ!¢óË®Ö-1¤g®$ÊôN¿,±,xöijô9ÆHÄýhY­d;¾iãx´µ/úÊUŸyÓ>7wª‹L N%ÓÞãRæÒÌhæ¾`7+­zÓþ½ùD§š¸M¥x@ßNûKWŠÓkoëä§Û]0UüÆl×,Ì&Ríýöß©ä"!$C) *ú,gœàL€|×hZväªL…I0ë9¬á äqÐJG¯Ize£{\UÉEwúðˆ££¸Mtk襤¡©\fä„ü³–ã@¦+þHáuåï§T‚ù¾M$€ŸOã’ §å¢¥C›…·và¨Âû áÒêÃv²jEoÍ`D ?óWÄwÈÀ—™šæ ð†¶TD6'Ó‘èléªdùYÓdÈjØ91¾…Á7EÄ›ª³¹ZHͧ#AŸJLQ}PâÖ£I`z}³0̱ùìæ*lw¢=ŠœdRÛÚ. š¶‰RLÙ›žˆw…þ• ^þðd­aì¹ÝÞë¶ _oê‰è¸•õ_agvûúð硨/!óþ` ¡xe°Ýƒò¶)j­ŸÓëµ~꘺Ef¸Õª…/« %;^îS˜ BåÅ3é×Ãü‡Yš&AÎßx¡2^úÎ\Ù#¼×RsN«ùLwð: »Hæ®ü…ßè¨Ér‰Áƒ¤ú·ÐÔ Êõ6—biþíû¢kÔÅÖ‹V½T†ëÓˆ€8"Ÿûv²Ú@’im¡‚ó}a,lªxeÕ“¶$Ž‘ë]¼'ˆÃeLê-³*ðå|¥ê¨MqÏ›y‚Áí‡@ûx¬þÐèùÐaÈ4è+§f*õ”êC¯jõñ"j‹ö0:/·bÊ|ÄUDˆo F×.Ê\ä¬&¼å³™LÑ%ß–÷ǧå´q_óß´|U›µHéÉëÂ-Jž çÀ÷c:_%”)}IåÄvØ~|žš-9ãní$!Ùñ=U´ª å»ÎI=0šBg.–îãB”?¡«ZX쎨zâFžh(Â`«¯›¡Ì~SÃË ÌJ®ôuK¢«ÁíwéQ¬+i³³Ek\ê£&™È+í‰ËâpüöÛ!ðG²Œ"HG»QFw"E ç?'›ijÔ‹Å2åÞOújGJrȨ8#ü—œØkƒb¿¯wòäJÂpô Ft¬SÔ1Äa!\¯6UŒ#ø\¦ ýiPà"ea•§ª–¨"`%Ñù³É¿"ÀÏâæ¾4¦Gk–₳ù•Ü$b¦h-vì`Òõ!·ûõ¤Í™[ºRšÑhý$æ˜ b}’ nüZ ÀÙѱjˆ¦8cÏ{Ü0a¤–ø¸"3ËQñµ$:˜'HšfOàqi*ô¬Á~§îòÚXú½‚)~³bÃp»ƒGñä h`tÛeu³e Mð™—dÖ‘ëI‡•/¿ICbx Á{db?ŽUŸUayè ëšL'Ï¢ÓK+Kã¢C$ê$9V*2§\Ý.í²Ôôòo„Gù‰ô¿*¥/E€7\þÁyt,ñõ6Ìw²Ñ¥ÏQ§ŠHM!äß8%y!ï°ÿ^¶ïç+/Mò3¬¾L¶†ô}¤$0mœSõÎ~¨]´Z‰¢k'7½¯!é%J¿I˜D!|¯€åœZ[cGéHijƦÛèÍAÃß>b3ÜóT22¥ç.Qœ?ÖÛß|¦‰š÷EÔÔ^á=ÔcKÈsÝ¢eb|3C­š§Eôõmt X7¥ “PÄuZX–×4U0ÝÍÍû³—™"\ÃîÁEê·£°ø˜æ*´Þµú‰‚f‰h Ï_QÞó ié'PuºI< ·%–Zõì&áPi5iÑëÞ}ä=畲»U=°~³íŸÓ´aøY2ljV ÒlIœŸäÏ*øjh‹4ó‡u} ´7È\¨p} #†EÕDågÇH7›‰÷ ô9©Ìž5Ã2”>¡é6‰l ã\×í_ê3Û¤ø`ñV÷,ÄYåsØ®A1€ÅÕZ‰õèOT¢†Þ— g ÉHAž¦çï,Ú k4ÐM6ÎJwâýxþå83Í+¡Ä°ùÖQù\âÖœ`†ÏLûç”—¬rÍ-¥YÖh÷[R­–a8fîò!¥Ó¯1·+Þ‡,-·srh\ì²]ªÈüÆîr9Ÿ‡ZÅås*z1nI9DÕCXoÜÌD3 »û íÉ(nÒá2äPËŠ#/<Ìu¹ºÔMzf Ü 4ÜmG°ª(œIs~+ëPÒ£þBû¤Àt>܃Fp¸";´g7¹‚^Øçx“€ª¦œ`âÒGŒ`¹¶‰¯,ÛÅwöJ«MDýA>dªäв –!¸Xv8C¬ (,Ö&`­€7tklÃj6’É÷ojt8¸+05 ŠO„ÒOªSóo¬7¡BñàlâëŒ=QΦdiy·%ãÁ14ÀÙzÌ˽×Ù¿ŸO¥™„Îìb²*¢•‘Ìð ùÛ iiÙvæã}wùU ·—ìi™¿zN?‡Kî㽨…2Q™ôÊúfá(¾ÛFVKÒ¹–B96î0pøùd â—þô”•«æ/×U˜•´…™¿¥šîåöס̶oLDö0rÊà»!.çáò8ZÊÅQú5UdiØlê:ƒëÿˆÓ ,æ¾ðŒdna=Rtó'AIE4üöÁ﫹‘)\¤Kr,ú‰8€þN‡«p±RX7‰%˜o¯×¼ç‘s²,Ê$Fþÿµ3ßÿP8 €É*:›3N¶Êˆdg9gquœ-г•M¾Qçl23;û’•½E—uäÐYq²ù½Cïñþö~ÞçxäWN .½…„~Ж۳«ä_`*¡®Å ¯Ü+.Ù™|h0“žÙœç®æ°˜^êZºf¿Î|èM®ŸÁ @ž„Z=òÄ„¾;Q~5_Á´ü(kç5’Š ËäØ2][eé?g ÙPˆ6'¤Dá0‡Þ3ìB¬ôu‚ú´´€º0„/ô3°þ½7Q*ý \ˆ;—îa7‹ŠûƒN"¥ĸw1ÅÆ½iPÚâ•qPåoøm£íÆF×hƒ±•"7q Ö§¨Z9ÔÞ+£|â)Éî˜\.çìŸàñz_­>a/j;±@סƒD¢0K?*6I»º›*3—Ú»¥úQ=CÕäË@òéÊÖ=ˆú’ˆ]8-šåÑD7•† ýàOV‹:€:ÕŠûWô¦>Èp~-¶îÐìJ~§3/|>³F-úÿœƒ·Ò#GlÜXôÙ6ÅGIpåU‰rYÊPØI£Ó,TXã…ôü*6­b+ß>•ÍLðçà Ã,p뉹]ç¶ê ÔÏذѨ’  ‰g0t¾LÞ ·£Sç¿ ƒu”.ÚAGÌjŠ­þΠÔ÷é ;PŒ6‚aO.ýäOÇŠú®Õ[elÏÜÏD@t*u–U×Á[ ^lt‰:EÛ½ˆ›rðÖ•úQøqá`B™Ñæ“cÎ($k”*nûó`'?{™RìÍ!2Cæ©—°S¿úÍÉMz|’¯^õ§^„p ƒŠ¸©ÚïªVÛ߬ø…¸¹ø¦€ô†zø¬ÚïFKÀOæÑš¶R<ëyFM÷#¯ãÅ"¨@…–¤–£$Ü‹¡Ò~¨DaÕÞù “Ü,Þ ’+ÆÛŒÒŸ¿Ã5óÝ‹h*š¢í¯Îï›ÔõQ"¦CùÎ2 Ù̃¯µÛ#³Óóé/[¨h¬êŸ†x’·îŒ1’Ç„ô7÷NÛìl‘Qd×äÝm+Ê-¡”·îšµæÏ¨kIs\Y›Ó¦°içÙ¢±JLsýÕDà}/8ê ‡Í,Ò¨"ü0–¦m¸ßÉíéq»Œx„! S÷50êŽÍ¿ÜU?U©>=ãO«…iÑÏ郂j¹¤eB¦áÎM»÷OKÒׂöD´cô§·Ñ]+Ü*å³÷˜§›‚0ä>|ޝDZJvÖSæDx…ýݱ™(æwÞå'ÝŒ6´¬¥ò²Ô õzù¶ÒTËäÎ~„ ¡q¡…I§}/(¥óMºÒ³ù%xQIÍe¶zØéµ4ÖLïã'³¦Â5LQÙßêuÅl¡1"á®ÈjoçÚiþx‡¸X„ žcKãÇ"àrÍýÁ¨ Ö¼‡1= 5ƒ`ýÀØFŠ,I‡md!ÛCá¸ìòŠóåXe‡!ý6Ÿ•áÛ1,³Á%òÞŠ‡&8Ê¥‰þ¬*²bã\,ÐÞ@!å¡Í}¢Çg}ÿË'u"UÍh§±ë ôdË×3QìnDc¿Ð.ó[®à;¼¨i¥<%ïO­—D_7˜ž.|Ì·>½m¸©b²kùR}˜`<¬˜ëé°;!y`Þ2 ;ۤ¥Åžýe…¼ä™$:½,ó]Ñ5­5XöóÌ+Ù ÷÷‡:Æ>K;+ÑY3ý eìøÜfFO·–ù ©ËUîeádóíÜÂß«êÆLkWˆ·åP6 f 6˜Æ5:TˆÔ6Š\õ³ÂrŠìßMQÒR`£…T@í™?œÃ¼mEFEÿ;2Ó”UŽåŸlB:±¡B-ÃÙ{jˈ}æ8]ãR.ˆV3Vëaâ@hEc_†¿Œ"æ<è=¾ëÜ 5U£TÐhÝ<Ÿ—Õ÷€£„<í¥‘øÉl+ö©Ú„H¡Êù ’~¹šÂ¤„½aqGågÓ¼§O]9ÝèBY5šé5ºÆq1r â61š‹ eÀ‡Š¯ù²ÅM§l’Ù('õžå¢º¸ÎÈ7»·Éóî¡W¯±l:Üqæàd“Ý`ØÓCË8ö?m5kVö­U’¶vCó££ t"»bÃàÍÁG™™ÐÞùÖ[W|,§ª‘>–¡³¶ÏXh÷“Í ëî±nÀn}»¤IáÙLæžžuøáw;xûág»øæ%añ­d³¢öMPŪ]!Û|#É£îw\öÎfwÚ0ƥΟ¼Ý]gK¾€¦‡º~-¦GÙD/^Ï®#ÄÁP]‹ìE ã¹·F„Ù‘¤ «@øVã~ ç 0.»ÄŽóR«4ƒStë3Bn|%r±ÂïÐaŒ•­NV³Ô·÷[×ÓË¿¥¦º™<_ºñ»ÆY…>Qû <ŸƒÞžÖ[`wÙå#+ý]\m`áùë£Pú_˜Á‰E¶ÿI±ðû‘ä~B®4ìS×Èe¸¡xÄU‘b—ë›50÷y2¦Î{]Æî ÜMFVŸ?ž_’NnkŒøX .ÊyJ+þ—XÿüON^.Ž(ÿ—ÞŽ¨ç¬ÿKHo_endstream endobj 58 0 obj << /Type /Font /Subtype /Type1 /Encoding 374 0 R /FirstChar 2 /LastChar 169 /Widths 380 0 R /BaseFont /NVNRYV+NimbusRomNo9L-Regu /FontDescriptor 56 0 R >> endobj 56 0 obj << /Ascent 678 /CapHeight 651 /Descent -216 /FontName /NVNRYV+NimbusRomNo9L-Regu /ItalicAngle 0 /StemV 85 /XHeight 450 /FontBBox [-168 -281 1000 924] /Flags 4 /CharSet (/fi/fl/quotedbl/dollar/quoteright/parenleft/parenright/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/underscore/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/asciitilde/copyright) /FontFile 57 0 R >> endobj 380 0 obj [556 556 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 408 0 500 0 0 333 333 333 0 0 250 333 250 278 500 500 500 500 500 500 500 500 500 500 278 278 0 0 0 0 921 722 667 667 722 611 556 722 722 333 389 722 611 889 722 722 556 722 667 556 611 722 722 944 722 722 0 0 0 0 0 500 0 444 500 444 500 444 333 500 500 278 278 500 278 778 500 500 500 500 333 389 278 500 500 722 500 500 444 0 0 0 541 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 760 ] endobj 49 0 obj << /Length1 1608 /Length2 9441 /Length3 532 /Length 10293 /Filter /FlateDecode >> stream xÚíwePœQ“.Á!!Á]ww×àî 0Áapw'IàÜwÁÝà>Ø%ùv÷ÛúîþÚÝ_·î[õV½§»ÏÓO÷ÓçL 5¹ª³¸…ƒHÚÁÂÌÎÂ&PÛ™¹ºhí™%l-/FnTjjIgv°—B@@ dàà°óóó£R$=ÁVÖ–º=##Ó?-BfžÿîyÙé¶²м|¸lí@öˆÿöF ±,Á¶ €¤Šªžœ² €NFY ²9mª®f¶`s€"Ødï¢X:8lÿ±˜;Ø[€ÿ”æÂò‚%î\Aæà—m sãÀälvqyù€]VÎ@{ÈK °½¹­«Å/vK‡¿„^"ì^|/`ª.sg°#ð’UUJú¤žŒäÒšŽÄ¾$— Iâ»›­5Zž`÷ÇCèB#K¤'¦Vlj’0„cÄA@_À~^ÿ>rœO‡¢ÿjŸ=eêV®†¿<ÃóR•Ö©òþ ½?+—÷ýW,÷ ‹î0n &ú Y#´pœ¢`ü†3j3ÿhUCë8¶sÝ•_cLaG#] rEÈxì.NÉÐåÍšÁÒ15nrz.Ò«y ª /šŸ®dHŠãÌÑ\”ÊœÉ^sHqôÏfÿP{/yç݇Ì~,24—›0#ôùšî:9“¾LPiÑ£0B0Áy”+³ˆa¥£¾^|3 U2 %f¬½AªQ¥ì1Ãk-mÜ€sKÂêþ`ÏÒIb5WLÌk‹Õ¿)¥¸º¢Ä@:N.þNéƒò—ù}¹ÖOlIìÈ“!ÚgèÔrü 6c:ip8½¬B9-]aï:³ï£x+X»Þ¼›R"7éªtñçLGBÓܱ€ÅC"¶4ÚÂCƒâ3+ói‡Þ‹çÎéFTcg¦¹ÙÖ^ Ôn4åÆœÝcv"áù³|¬¢É‚)ʸ&ë>Pm€IJL I@°,ÝÔ‡'yufÌ(¢#Ÿ™æ±gS÷#ÂI´†ž;·’¾­2š[¯ð'­ì F«¶5 ÷%ŠFèq+ý¶…+ûuRûé‘û·áW!²§ÓЂ"oÆØJ$°{M ½•ÝÓ<ã)BG#š‘`š|~n‡2áãma]˜©mgB¸Lô£M4¹Á÷ :îó7þþ©›¯ï³,‹Š‚E}%ðĨKæù5®R÷J \˜MÍõº– ‘ßz†QP š›šÀ Ü+GßYhÈ¢+¤AŠW”¿x†÷êX‚[Ì„ãíš3U¹6Žc ÐØPÁÎc+m–1Jh®21‰ç¢çõW]†álr–b=ÒÃ(ìùªñ?Y_qŒ7˜„e9^Ó=e·w³•t5a"mõ¼²QŶÇó]hÐ3LÒBµÉÚÿ½°¼áåIA״ǵNzã2kÀéN iwø‰ ÝlÑSðt Ö%Ïq ú«ºajüºù‘ÉÉMzì(1"ó‡ç\F/’yÐ=r!ÒD¤JÿÌ®÷NÛ—äýæ>kŽüú5×ųµYŽG{ÞÁi¿už¬ÌQg§¸» à ±ÄãaIÝ3îˆÝÉcX=Û]2nž,3ª ÊɆCYìüm­#õî SZ¦¿ã;¶çQ¤¤–yrÓBúªð𾙉kEé=ñz LÙ+Böœ#Îo{ZÖØœiü¢Ú¾€K¢” ¢QÛE'üé(-™Š@SìD”£›¼2‹ˆfâ’°÷ç¼ÝIš}~¯®ÃyΡXÏ[ŸZÕâ“áDt†~õÄ\]g¤8ÅŠ\IÔpVöö<‡þ‡‰O¿õÍSÎ]ûGŒ##"iý_im‚êð7íÜš"¾*4*}¸lscrJÎÿ$mbÚÀtÂ~?äQ«|«w¼ÐÓ¶~Í`]òгü§ŒŽ§4h&æÙ2œN˜ñÂ97d¢›[oZ!;9x‡íø X³XÀ/HcwRŸµÉÚe‘L‘bH›D¬»uõú3,u‚±î¡y)àý¶­ §€Fëö°”N Ñe¦vOmé%ß·ŠUò±8Š€¶£\äñìq˜f=vlg¯È~ݵg¨ÿ7ªÛƒÕ¯Ó¼Vjhª‰“˘”ƒWƒ"Wd˨<6D”&LÌUgÊ?#î«Ã„?sózJVGpU˜fSJR!4”NŠÿ–H\ÅIãG›ª0Éô5édªe† &`¿ÅëØzG,¡9ó\PY“¼å (t|OÕÚ kÌ?œ2äì6÷Ï um‘”›°È æ1eC¤K–Š\fb‘²Ç40û¸í·c®‹Ú¬‰!=“­²,Vq8Ÿ†vA­ŽZx»ò4³ÀÝä^ƒ@¸‚G2];‚úØÏs³(à$4:1O GÑ·»=ÚieԯШÕq†e¬˜¾ KÑÙàÃTY¢_ÏŽ;µ3H1ºÿˆ¯²pÌXÇáÎÇNê¼á-ŒÛ:vzC‘ýÍßÍr"íÏcp5Ë.äÁRíÓLÐßz46↠‡ývλ%ö;ã‡h)ð«Ò¹§h{Š˜¹°mb†ì]­?½Úÿ8¿°?‹d/Z@^—D$Ï$í9?–KgÓË»2q$ß.e#ðœ‰ÍÙ£7¯zÕùsuÆüÐæUøfVTÃâ¹Éø¼iþ ýa¹0XÑ{-<âðÍ¢>?üL!#ÍÀ„ù ìC[¶?œÐ9Õã3{¾»4`QVê¼{ÊR™}­•µCEí¦!ujÁ‰Š™Ún,¨îX5›%ØÉCÞ‹à²+!$Xpi=o‚dã2¢‰ó]Ð3ùwjÏnôÒkz§q#±(ï$4ÛÓ‘ò ì/ìê3QnYw¹!±å=Î1Ýè»Ê*¯¸¿ úIÔ¯( »›áT ¬P¯%ŒO|O•Ä–OÆ0ð«b‚‰¥8ðÝËo¾Ëà";Ά§!îô >Ø$³xêòO-œ opÏ?}è¬öÉe”§³}{. êÊåÊ)?ÿz®ñ˜ŠXùÅä±ÛßTué¾µWÎqSâ3=T!N=npÁF.±(4ãªR€Cg‹¡ˆg®ˆ™9&âl¾º·i»Ãôn­¦Þ ‘-vÑnCMê{r-àÕìŸÔz9fgv‡C×õÙ7ν\E œrÛÎñ±Ë°ðy×!-Ù¾VŸÏ¾ýb±ésU2»AkÕ¸é.ñÝVšo,±fÙž¨ü·äýº¿³®´é‡Xõ†÷8{ý®¨“aÚ:dþ¢¦AJX7ŸÕ« ޵ÞÂi&üRêîý©OaÛ Ñ‹ØñenÏ!;§ñ§qX[Á“‡æ{ÉPnq]«o6¸Ö¡Ã©DÀ²úrâù.ÝJ¼ ÎÜÛÞ"›ŠÄv6ÓýÁmEû½áqåÐyæ'¶æ«|¤Š½{#Åß°´G®,ÄÒÕê‚Ô-ñèÃ*‚ÐOÇ}Ÿt(ç>Ú †ú0þû1Á’æ‚cü6Axvÿ·™¾½XÖ¶ßÅÁ€Ô¼Ó‡Æ²Â„C”ÕªFíZøŸÒ:?Ü7y`d̦ÜÞ7|à £Ä RÞòÍp=n/Ìf„C^‹E!÷8gñ-ÞæÏûñþö%æ½ r0zÐ6}" œ–/!èô#Š¿bÉ·Äô oXf[ên¤i-nŒÙ¹‘Â[Þp–—·ìWIC¦¬„c…ÌÅPG$wUˆRc%)õ¹ÃvEÌä“wÒT(1;3hu 8­SÁåK:ÌÊ0¯Î•êB „Ôxu1µRµ•HbK­clfJ–ßèð2€"¹›Ö#„¥ªˆ÷üS6–p$DÚš(am\˜?+Wÿò,D‘,KļiiJÂvFʪÁ(†UžÁÛðý.£lo&¡Tô+¸oÈàËaÇ·Ú„T‘'öæoèW{{cJ‹ç‘Ä8ÊK0]Ÿ8=žÑ™ -7•8¦é8Ev âyô·ä‘~ ~ýpص÷›–ŸévWiÖ.ðÛ ß"È‹xle‹’¬à.k2/uÔP†Dlœš‰Ô¦K>Ö°ñÛ—k9÷U#ðm“A.ú©5¿ *㨗$¹°lõ᤼¹¾IÃßKÊNÆK-Î).aÖ2Àïå§y5*²5à3…F{‚3_XÉïjÑñ[r>gû&›¬ºGÍât(h í+ŒôÃÔL{ÄU¼©À_é<ã¼,;YµVS¢'†iô`i£wu÷•¢¦’™%Æq«ê%iññªfºmø6KL„nß[_òVÀRéÜC@)yj?®ƒpጠ¾Ñ >ç÷–µØÆá݃¤³Ø‹YoNt'äa‘õÝd]ßoÅ‚n¯[Y[’`È×%˜w’^gâ‡ÄeÒw_5U…eOW2ãlŠ8¤y›µ©qÝUò)f1E0>­*ž ‰2/ÌÌYJá—ϸ(WïÅó/:0Œª?'GUQ©5ÐnHÒ¥é D{NÙ%b>ºke"Þè_-6~ØýY—0ƒ0+´ÅõÒPz+í@Vw’Ô“v?¶ËŠEÝOÃs(_ Èśݵ+æ¬\êgíúíŽãqFë´žà/¾©b©®%ìµbr¿ŠŸ–é~r2õìPК3׉ªX{»>ž„+lá°?Ïö ¸Ä³ú"æv<žjboëPh—©HÑËÉ‘³.ó F¦6mæî[bö³ºÖÐ÷;Å‹±ïÏö‡ÞòËö_»kæž¡.ôuTVóùÑÄÞ˜­Àa)Oõmì'+3F}`ôÊžUs¯é<©£ðGÖäÖ·6=Ò’HäãÚi7-Õ«Ñ!D¾fP¯Ø¯²Õ}„M¥ÀUpEÔÖÄëò¯Ã¿¹Pv´ÃKé¬e„×MOæ1>¾Qá:°3ã'W¼GOž†Z5£ 6D~_ N°‚,K›‰=wŽªÁ#4.}=’t¬Éóä̶[©¨åpKƒ3ÉS®ïÚ_S8ÙNƒtÞì½k?h@bXáÇèx¢åøÚYô–rGUe:±þºéEQD ©bÙ'ö–|…‡·Áú·Çã© é·wû3#Slµâ«mØžj¨z•ß)¨Æ¨Ã <ók(¤Ûα~jÇKØãiàîli±,9öˆH¶&®ÖÌÒ† ß²ÑT§I’*ûü²3œ›v n¸lP›mÙc¥›2ÐG-ÄãÆz?ré}S­B&ÜÙàqÞ÷Šš}⿉±ù­®f D’H „–¥‡è D™¢ÊFC¿êFwÁ”À)æöóÛE­|ýÍ„ó*ïáS%Ãéû¹+ã¥/ÕRÖá:J;€_‘b¾¤ˆÄñoy½=Þ§Óû^þˆG6Êz… 8Yä¼ê~Æßñ.‚qûe4•ðÑÒ¡çù®þËíð(gü.æjœsACç Û«‡é¦Š(yI¿ J«æ÷©“ö>N PÚ§åöa:÷k´°BNå7–zC8jÏa¥Ùo Þ>\8ý4«4ÐU¯ÂD+¸žØ;œ¡fCjè*tí‹EJ˜\RéÜ@ ^­à'’ŸÞ‚aÈ{:·šÖ{êþfªïdø¾–ÿ5ecävwfp¿EŽ1KyýÜ\PÇ—õäa^Û•¢‚|-¥ÁŠ™hˆ…÷ØCÎk‘ êßÎõZ뜉c°J ¥jMêjÄ™Ø6¶õRïþ‰î°ŠîXC‰¸—&”¬V&{˯XŽþíߟ|W¤õ<”]ñä¶ÔÿésWu¸³aÂÒôÍ7»œò넆{ëžw¿¬C "/_ˬÔWOXÁxãÅ–R6õ¸69ŽÔh)õ‰OuTòÐØ/W#€ XädÂýª/ 65)¿Ã»7Ô½šºªÓ}îvNôoedcÁ@¬8%% ²&þÍ¥8X&~öCöñ© ¯¥`Bëk(ž»GWIƴ̦oL£è£¿Ñ¦ïC,"fRåÇqmXäÊ‘k€Ô°ÃhhÞÔ1~¦ˆ[MŬõS{Ò°#4Iô®øjoÚÉšûÌgóaæÁצ•‹ÅÓá<ôy/Ш3ð¦åûZ÷5 Lÿ'SÒ¸ñò”ý½’}ÆvÄ÷—£Î­Í¢ÂOÒ~¿êèI‡®«Ë¼¨;`WöÚ úpºZQr:C,âèN¯i)‚™è'Ìh’ÕŽ æøFÅ[õÅ®tׂQØÁAÚWæ{Dº¯Ø©kíT«³JhØ,¾ûÓmÜ%œò±ßE‡L® Ú% ‰,xßí§ÁÐŒëuMš¥} U|lÆîz`±¼DI4ü6n™›ÁÉQ-ÌœŠ'­a¶¼Â ˆ0,Ê(º¡åüqQ«"»J°Ž]Ô: ,††°%F3Gk謩WÌjS7ÀWloUqÚŸß~eØj×QQ›bVŠ„)­| ÞÔñ†"Ü÷• ™î‰ulÆ !ÁÂX?©q–®êלŽwød ›!_Îo~ Ý–vnªhÆKÄÅ2E-ã{·7AïsʳT#ðߟ<[²!”r )h/ÏL ÄUJ10—æb[!öHj[uhŽ}„:D —Òxê‘®òξmvI$|^ô£¿Gº·ŽÊ¶]èXÞÿ˜â¬ ¶žT6ølEHç[4Bܾ'äm,KM¤×!'xË]½7HªK¡ß <Ln&~ Z?ÂE“³.ì®JôÎÕmN¤ÁfvÔvJ®”©w$¿5rÊÄn±ƒaò%][J:°ËƒíV \9ìý®­‡”a|çíYbNTúSm´Þ›$@±|Ü{ŽÞvyœƒ‚#vw¬±ªB‰ ÂG¾ZfteËž•T/²+dsB¾¥'Zm”JN‘%Ö-Ýß:Žt„)ê G(4Y¼*‡«ŸAØŒK€){7¼G\£n’ˆøÃN„Œýfà§"óžÕPéÞÁûÆ•±àÙ´{ÄÕF@‰ ÀnÁ_ĺ9ÿ³xEÇíŽâÜäâc³ÎΟ›g1!n+ «jä2idz÷Dbi pGúÈ6¨íƒšØ‡)ÝŸÛ»]Çv Ò§æãõœá5ôÙ³=LYw)©Kc|9S˳ãÅ)Ú:Ü}y–Y}ƒ—pËÆâKœ$“IŸ2‰=ˆ…Ú,¶TàÒzw›J~Ü¿¯;þ03«ŽÍ²ºÚåþ‘$nfò#kŠU}ë8*>eJøù{Œ8“)²å$[ àÚ;üX.Ó̹è45Åèsü²×r¿mú>aï?ñîè¶Ú¥×£~jÊ {cÀP&vêaã¼^ÓÌ]£?Õ¸FÿY^žÌ¶{*ú‘¼ì 5z‚Ÿ‚© Mìpt4²ö°ãDü¤:v?+@ûc ¹èFÄ;©Ç5=Cüý'i{*þ†Þléi”¯¢ õôGïRvb*;ãD(a8ÌÄ%[ê„òo…¶Ök'ÀÅ¿ 6T_+ºP{÷¬9‰µ¹yÞÌ Ö/†Ûͱ«#î7ÎêaÂZB…ánõß!l-ˆ²1;’Õ% ·AyQÁA†oÛ+C&I›¶ÚG'{G° b»µÜ¹Þ^:ƒÔ“Úмnòë¨dé]xxI¢‚çæ°bsH̪‹2‰ˆ’Ô[d3—Y¿*8ì»>,ÙÅõ°VÚ3¿.{äÔ¤W4V‘Ï4Z{S¬ÈOZsž‹– « -Ô ¬7& h•Æx=“Âl€(¯õÀ´Ã×ê0uò0: ÆEŵÔÁxŸçX2óiü•xp̧9u®½m¢gõ—UX±xï™ |=ÛÙtÙÃֳĦ¥ø1 _ÒEó~þ£OÞÁ Kæßf‹]ÎO¬L?Þ%µ`¹ø#xËÀŽÓ¹™>«M¡yÑ$)ÂäpÇzëÿfV‡ƒÃnÝ sx1U]þòÁvž7ª¬Ø¾“x¼År5TrÜ´oÍóÅ@¬šy&>ò§ü?ÅÆûjæ„ ÎìÆ¬Î¬ç. ¡÷§mFI=÷,5sG™4›ûRQá1Öòù Y^ûYivçÀG=&­§ñ>¡ŽXêG;ßñ³ ù/»ì: iE³ìøš¬yµ²·Øžn÷¤Nn[‰®§ÂªèÍ”(â‘U‚+4pþ´)ÑÐñîèÒ•S¡ÙØ—ï ·pX”‘ÑSiSKž&ã§BVþ2{R)”~°^0­7fDz4w ¼8 ¡V5M¾Î5†ý-Ò> ¯vË¿ê æŸ3²ð.Ïa³²‡}®Ê¸=«+‡—þmý³v¥*2všG`ž*›…G\<ßfÓQ?t¾PÔ2ˆ¤¸¶…!ßÅÊ,y+ '„0RlýÚràu5.Ã5ìÂZ!Ú)õÙšçáÔ­²T -y*)©%ðßB9`Û÷Íz¬z˜êÚa³$ˈ"ŠQcù饇,0wP‡°mÁœ<$Ûo'ååÿìRÊ1ÄÖeÙ/ˆÆ!Ò}Š-žS;.V˜,)u1ãXû%¸x¥úú0op×yóލß̦bœ¢a4(ã懲¬5Ðk°ð•ðEeߣVŒIÈ@+£§’Õ-à“Õ¡†üBüvòÐÁƽ–ÉøûWc)°ïõK°W1.ɘš1Æ%*Š–K”Jf³jue°ަ6» Ë5lèö”¶ªqƒAf]5Q±rMoyî§â~8…Áw»ù~9'áqÓ¼ð0,”èïN…,VJPnéŸVÝa«f•#·Ã' o’¼¬£µ•ÞøÄ ÷“Ï Ñ5#\÷«ŠÞ uO$íã$†{Ú’fû6PôFÉó3½!§ÑåivÀzÓðåÑPÇ\l–Ø•ûÝù âË̽Ÿ‘Å-þc:£ýx]A¨ê}§ èØàí¯5¦ÕœÛµ¹Mò2j¼§moж Ýç…¿œõÊ>]@ÃhGLïtƒ¤ÃmSZÆ• 6ðEÆÆW3j·­ì˰¶£9I°#ý)ÔSè.iò¶0Å`hTšøÓÍXV%FÒµ©a›ylZ‰§{DÜuèôð"¢j¥Û<5 ’â6þRdJÙ[-\9Öd$2š®`]ÄÙª°‹zÇ<\ÝVGάÕ"òžâe³}«côÙeâ íÍç:’™ZÛÕ:‰ |j²v°xuVmÆåHÉý2ÂÎ^÷ÕŒ´¼\Z€™¸¨f,–géA‰Ùþ~¾±è( N¢yÆx^Óà]‹N§Á§e|¶WBÂÓBqN „à·’oGàçLQˆêßk#¬jç™~]ž-ÄVöíÚ»¼lÈŠÿ-ÌQêœBÁa4t{ä eiTˆP½Oäìž"UÍÄžðóÁv!nQ”´”Œß‡Ü8ªÐBõï8JFl¸>ÅB{{ÊÐý¥ÝäÐߤýìó×µ!¢[•X(µW±Ä`Q™›ì6Ñ‘oœyiì±Vöδ´~û(àî¨t] Н³(ÄðrY‡ÓÙ,õ]¿8¢÷n­9”¡Tä}îÆåù(¥÷¦g5¬™ycã‚ ¾JŽØî×6K;õ~ºªÀ·P©B— U´†ªÚÅk¬4‚´~ÓzåÌκ#ÿK‹|ñ˜û¼A8¬rpkˆ„…ET‡gvL¬×ÎÞ=l›Gk.&VsöG.ãÜVž#C>\Se˜ÛFËè⫯‘:×…ˆj‰S'ŒöH¾ý†¯ yDÇ3—-I”ûºÁžÐ1ÉñH×,…‰QïÓ5¢K‡ê Üø-È8 9ÿp /;#ºS™5»³ôm;‡›¸jp™I wÍh¬<‹ªq÷°KÙ¡ÉÏSž$naÍËLmª\§»!ÉScÀe³9Tjïñx@=‹¬2 ‰ó=4ì°#Åœ³NQþ€œÕ,TÄ *Àßä-Ý,³#tÔNU_ýÔ…±­MÓyRÛýÃïÎ×»ìùH˜lÑ÷¡4åÓ nm¤­ † Ÿ›Â="bo†5Å€Ù$Tí%¢ƒÞäs?ÛÕcDÛ>~,5Ÿx¬;‹ñ>Ðð.çë©'Y3:Š êºÀ^Q‡”€ôÌO¨'ëLs~yµuæä#ñÒÙ÷¤€ > ˜SÍå(/E#®…íóì°Êº>ùû§È³0DçwköÛÝ@!A›iﯯ„êoK:Ã3y—ÅT®D[…ûÄÚÒdý¿Of„ ¬8÷~þ2ˆžf(Á¡;TÏ R0¯}ŸF"Õ˜uuôŸß·ùaÎz±lëÒ«Oš:˜ÞÒ'9íž©wóa%nŸöHþr…@r±ê[rPDä,¦@!5g1ýÇ&&„aãüÈMäôáÇü¼Ü'vøÕ€ãÇ}§¦íÀ/Õì}…º¬sÏXö¸kü*1Š?M)[ãšÛÉ`¬ª4óL- Àç°zêI¾ëÕZp'þÅTT×ÕAõÙLãŸÄZù ÌþÚŸS!èZœãÙY$†"æ½%—ê£zØúÛŸ“®ÝÀà["¾ ßê ‹áÕÄ­xgŒ»C*®0‚±8'+¬~àuYÏ+Dª² ycjo¢†qIÑ­ã)Ò1áôÓÄB¸š –"‘®sÏм?vЃ›‰á¡ˆ·Z:Íì…â–ïíháèœr”Ä›5¬øx+³vô™g—µò7Ž6 ;}S’*iÅÌ^1ÛNÃz —_¾¯XwHp‚£ß.ÕHo(’þüý¶ ‚ù3Æ å{ì2{4ÙašùàÐ|NwÔ½+´3JêH¶×ï#D³ò¡œÊ2Â"üü鹿5PpjQîÈB<…èGá ^|*'.=ÁW~>n{—§Û`ÂnŒ;·ÑÖ A+‹P¶ÿáƒúÿþŸ0·!v@gÔÿ kãÉendstream endobj 50 0 obj << /Type /Font /Subtype /Type1 /Encoding 374 0 R /FirstChar 2 /LastChar 121 /Widths 381 0 R /BaseFont /VMXPYW+NimbusSanL-Bold /FontDescriptor 48 0 R >> endobj 48 0 obj << /Ascent 722 /CapHeight 722 /Descent -217 /FontName /VMXPYW+NimbusSanL-Bold /ItalicAngle 0 /StemV 141 /XHeight 532 /FontBBox [-173 -307 1003 949] /Flags 4 /CharSet (/fi/hyphen/period/slash/zero/one/two/three/four/colon/at/A/B/C/D/F/G/I/L/N/P/T/U/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/x/y) /FontFile 49 0 R >> endobj 381 0 obj [611 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 333 278 278 556 556 556 556 556 0 0 0 0 0 333 0 0 0 0 0 975 722 722 722 722 0 611 778 0 278 0 0 611 0 722 0 667 0 0 0 611 722 0 0 0 0 0 0 0 0 0 0 0 556 611 556 611 556 333 611 611 278 278 556 278 889 611 611 611 611 389 556 333 611 556 0 556 556 ] endobj 51 0 obj << /Type /Pages /Count 6 /Parent 382 0 R /Kids [42 0 R 53 0 R 67 0 R 97 0 R 109 0 R 116 0 R] >> endobj 176 0 obj << /Type /Pages /Count 6 /Parent 382 0 R /Kids [163 0 R 178 0 R 193 0 R 224 0 R 271 0 R 289 0 R] >> endobj 339 0 obj << /Type /Pages /Count 3 /Parent 382 0 R /Kids [304 0 R 341 0 R 358 0 R] >> endobj 382 0 obj << /Type /Pages /Count 15 /Kids [51 0 R 176 0 R 339 0 R] >> endobj 383 0 obj << /Type /Outlines /First 3 0 R /Last 39 0 R /Count 8 >> endobj 39 0 obj << /Title 40 0 R /A 37 0 R /Parent 383 0 R /Prev 35 0 R >> endobj 35 0 obj << /Title 36 0 R /A 33 0 R /Parent 383 0 R /Prev 31 0 R /Next 39 0 R >> endobj 31 0 obj << /Title 32 0 R /A 29 0 R /Parent 383 0 R /Prev 19 0 R /Next 35 0 R >> endobj 27 0 obj << /Title 28 0 R /A 25 0 R /Parent 19 0 R /Prev 23 0 R >> endobj 23 0 obj << /Title 24 0 R /A 21 0 R /Parent 19 0 R /Next 27 0 R >> endobj 19 0 obj << /Title 20 0 R /A 17 0 R /Parent 383 0 R /Prev 15 0 R /Next 31 0 R /First 23 0 R /Last 27 0 R /Count -2 >> endobj 15 0 obj << /Title 16 0 R /A 13 0 R /Parent 383 0 R /Prev 11 0 R /Next 19 0 R >> endobj 11 0 obj << /Title 12 0 R /A 9 0 R /Parent 383 0 R /Prev 7 0 R /Next 15 0 R >> endobj 7 0 obj << /Title 8 0 R /A 5 0 R /Parent 383 0 R /Prev 3 0 R /Next 11 0 R >> endobj 3 0 obj << /Title 4 0 R /A 1 0 R /Parent 383 0 R /Next 7 0 R >> endobj 384 0 obj << /Names [(1.0) 2 0 R (100) 183 0 R (101) 184 0 R (102) 185 0 R (103) 186 0 R (104) 187 0 R (106) 188 0 R (107) 189 0 R (108) 190 0 R (109) 191 0 R (112) 196 0 R (113) 197 0 R (115) 198 0 R (116) 199 0 R (117) 200 0 R (118) 201 0 R (119) 202 0 R (120) 203 0 R (121) 204 0 R (122) 205 0 R (123) 206 0 R (125) 207 0 R (126) 208 0 R (127) 209 0 R (128) 210 0 R (129) 211 0 R (130) 212 0 R (132) 213 0 R (133) 214 0 R (134) 215 0 R (135) 216 0 R (136) 217 0 R (138) 218 0 R (139) 219 0 R (140) 220 0 R (141) 221 0 R (142) 222 0 R (144) 227 0 R (145) 228 0 R (146) 229 0 R (147) 230 0 R (148) 231 0 R (149) 232 0 R (151) 233 0 R (152) 234 0 R (153) 235 0 R (154) 236 0 R (155) 237 0 R (156) 238 0 R (158) 239 0 R (159) 240 0 R (160) 241 0 R (161) 242 0 R (162) 243 0 R (163) 244 0 R (165) 245 0 R (166) 246 0 R (167) 247 0 R (168) 248 0 R (170) 249 0 R (171) 250 0 R (172) 251 0 R (173) 252 0 R (174) 253 0 R (176) 254 0 R (177) 255 0 R (178) 256 0 R (179) 257 0 R (180) 258 0 R (181) 259 0 R (182) 260 0 R (184) 261 0 R (185) 262 0 R (186) 263 0 R (187) 264 0 R (188) 265 0 R (190) 266 0 R (191) 267 0 R (192) 268 0 R (193) 269 0 R (196) 274 0 R (197) 275 0 R (198) 276 0 R (199) 277 0 R (2.0) 6 0 R (200) 278 0 R (201) 279 0 R (202) 280 0 R (203) 281 0 R (204) 282 0 R (205) 283 0 R (206) 284 0 R (207) 285 0 R (208) 286 0 R (209) 287 0 R (210) 292 0 R (211) 293 0 R (212) 294 0 R (213) 295 0 R (214) 296 0 R (215) 297 0 R (216) 298 0 R (217) 299 0 R (218) 300 0 R (219) 301 0 R (220) 302 0 R (221) 308 0 R (222) 309 0 R (223) 310 0 R (224) 311 0 R (225) 312 0 R (226) 313 0 R (227) 314 0 R (228) 315 0 R (229) 316 0 R (230) 317 0 R (231) 318 0 R (232) 319 0 R (233) 320 0 R (234) 321 0 R (235) 322 0 R (236) 323 0 R (237) 324 0 R (238) 325 0 R (239) 326 0 R (24) 89 0 R (240) 327 0 R (241) 328 0 R (242) 329 0 R (243) 330 0 R (244) 331 0 R (245) 332 0 R (246) 333 0 R (247) 334 0 R (248) 335 0 R (249) 336 0 R (250) 337 0 R (251) 338 0 R (252) 345 0 R (253) 307 0 R (254) 346 0 R (255) 347 0 R (256) 348 0 R (257) 349 0 R (258) 350 0 R (259) 351 0 R (26) 100 0 R (260) 352 0 R (261) 353 0 R (262) 354 0 R (263) 355 0 R (264) 356 0 R (265) 361 0 R (266) 344 0 R (267) 362 0 R (268) 363 0 R (269) 364 0 R (27) 101 0 R (270) 365 0 R (271) 366 0 R (272) 367 0 R (273) 368 0 R (274) 369 0 R (275) 370 0 R (276) 371 0 R (277) 372 0 R (278) 373 0 R (28) 102 0 R (29) 103 0 R (3.0) 10 0 R (30) 104 0 R (31) 105 0 R (32) 106 0 R (33) 107 0 R (36) 111 0 R (37) 112 0 R (38) 113 0 R (39) 114 0 R (4.0) 14 0 R (42) 118 0 R (45) 119 0 R (46) 120 0 R (48) 121 0 R (49) 122 0 R (5.0) 18 0 R (5.1.1) 22 0 R (5.2.1) 26 0 R (50) 123 0 R (51) 124 0 R (53) 125 0 R (54) 126 0 R (55) 127 0 R (56) 128 0 R (57) 129 0 R (6.0) 30 0 R (60) 130 0 R (61) 131 0 R (62) 135 0 R (63) 136 0 R (64) 137 0 R (65) 141 0 R (66) 142 0 R (67) 143 0 R (68) 144 0 R (69) 145 0 R (7.0) 34 0 R (70) 146 0 R (71) 147 0 R (72) 148 0 R (73) 149 0 R (74) 150 0 R (75) 151 0 R (76) 152 0 R (77) 153 0 R (78) 154 0 R (79) 155 0 R (8.0) 38 0 R (80) 156 0 R (81) 160 0 R (82) 165 0 R (83) 161 0 R (85) 166 0 R (86) 167 0 R (87) 168 0 R (88) 169 0 R (89) 170 0 R (90) 171 0 R (91) 172 0 R (92) 173 0 R (93) 174 0 R (94) 175 0 R (97) 180 0 R (98) 181 0 R (99) 182 0 R (COPYING-FDL) 65 0 R (DBD-INGRES) 47 0 R (Doc-Start) 46 0 R (INSTALL) 91 0 R (INSTALL-BUILD) 93 0 R (INSTALL-PREREQ) 92 0 R (INTRO) 90 0 R (OPTIONS) 94 0 R (SPECIFIC) 95 0 R (page.1) 45 0 R (page.10) 343 0 R (page.11) 360 0 R (page.2) 55 0 R (page.3) 69 0 R (page.4) 99 0 R (page.5) 195 0 R (page.6) 226 0 R (page.7) 273 0 R (page.8) 291 0 R (page.9) 306 0 R (table.1) 64 0 R] /Limits [(1.0) (table.1)] >> endobj 385 0 obj << /Kids [384 0 R] >> endobj 386 0 obj << /Dests 385 0 R >> endobj 387 0 obj << /Type /Catalog /Pages 382 0 R /Outlines 383 0 R /Names 386 0 R /PageMode /UseOutlines /OpenAction 41 0 R >> endobj 388 0 obj << /Author()/Title()/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfeTeX-1.21a)/Keywords() /CreationDate (D:20130312005340+01'00') /PTEX.Fullbanner (This is pdfeTeX, Version 3.141592-1.21a-2.2 (Web2C 7.5.4) kpathsea version 3.5.4) >> endobj xref 0 389 0000000000 65535 f 0000000009 00000 n 0000001596 00000 n 0000154596 00000 n 0000000048 00000 n 0000000085 00000 n 0000018856 00000 n 0000154512 00000 n 0000000124 00000 n 0000000159 00000 n 0000020053 00000 n 0000154426 00000 n 0000000198 00000 n 0000000224 00000 n 0000021517 00000 n 0000154338 00000 n 0000000264 00000 n 0000000306 00000 n 0000023772 00000 n 0000154213 00000 n 0000000346 00000 n 0000000388 00000 n 0000023958 00000 n 0000154139 00000 n 0000000430 00000 n 0000000467 00000 n 0000024764 00000 n 0000154065 00000 n 0000000509 00000 n 0000000561 00000 n 0000029395 00000 n 0000153977 00000 n 0000000601 00000 n 0000000645 00000 n 0000032745 00000 n 0000153889 00000 n 0000000685 00000 n 0000000743 00000 n 0000042374 00000 n 0000153814 00000 n 0000000783 00000 n 0000000844 00000 n 0000001298 00000 n 0000001657 00000 n 0000000894 00000 n 0000001416 00000 n 0000001476 00000 n 0000001536 00000 n 0000152654 00000 n 0000142073 00000 n 0000152486 00000 n 0000153341 00000 n 0000003191 00000 n 0000002613 00000 n 0000001727 00000 n 0000003071 00000 n 0000141071 00000 n 0000121422 00000 n 0000140900 00000 n 0000002757 00000 n 0000120744 00000 n 0000108026 00000 n 0000120569 00000 n 0000002914 00000 n 0000003131 00000 n 0000042313 00000 n 0000018917 00000 n 0000016100 00000 n 0000003285 00000 n 0000018796 00000 n 0000016342 00000 n 0000107383 00000 n 0000095468 00000 n 0000107212 00000 n 0000016489 00000 n 0000016637 00000 n 0000016787 00000 n 0000016937 00000 n 0000017089 00000 n 0000017241 00000 n 0000017400 00000 n 0000017559 00000 n 0000017717 00000 n 0000017875 00000 n 0000018027 00000 n 0000018179 00000 n 0000018332 00000 n 0000018485 00000 n 0000018640 00000 n 0000019993 00000 n 0000021456 00000 n 0000023711 00000 n 0000023897 00000 n 0000024703 00000 n 0000029334 00000 n 0000032684 00000 n 0000020608 00000 n 0000019815 00000 n 0000019023 00000 n 0000019933 00000 n 0000020115 00000 n 0000020176 00000 n 0000020237 00000 n 0000020300 00000 n 0000020361 00000 n 0000020421 00000 n 0000020484 00000 n 0000020545 00000 n 0000021830 00000 n 0000021335 00000 n 0000020702 00000 n 0000021580 00000 n 0000021642 00000 n 0000021704 00000 n 0000021766 00000 n 0000026259 00000 n 0000023590 00000 n 0000021925 00000 n 0000023835 00000 n 0000024019 00000 n 0000024081 00000 n 0000024142 00000 n 0000024204 00000 n 0000024266 00000 n 0000024329 00000 n 0000024393 00000 n 0000024455 00000 n 0000024516 00000 n 0000024578 00000 n 0000024640 00000 n 0000024827 00000 n 0000024888 00000 n 0000094747 00000 n 0000079853 00000 n 0000094576 00000 n 0000024952 00000 n 0000025013 00000 n 0000025074 00000 n 0000079343 00000 n 0000068480 00000 n 0000079172 00000 n 0000025137 00000 n 0000025199 00000 n 0000025263 00000 n 0000025325 00000 n 0000025387 00000 n 0000025450 00000 n 0000025512 00000 n 0000025574 00000 n 0000025637 00000 n 0000025699 00000 n 0000025762 00000 n 0000025824 00000 n 0000025886 00000 n 0000025948 00000 n 0000026011 00000 n 0000026073 00000 n 0000067784 00000 n 0000059866 00000 n 0000067614 00000 n 0000026135 00000 n 0000026198 00000 n 0000028114 00000 n 0000027304 00000 n 0000026405 00000 n 0000027426 00000 n 0000027488 00000 n 0000027551 00000 n 0000027613 00000 n 0000027675 00000 n 0000027737 00000 n 0000027800 00000 n 0000027862 00000 n 0000027924 00000 n 0000027986 00000 n 0000028050 00000 n 0000153453 00000 n 0000030212 00000 n 0000029212 00000 n 0000028248 00000 n 0000029458 00000 n 0000029520 00000 n 0000029583 00000 n 0000029647 00000 n 0000029711 00000 n 0000029775 00000 n 0000029837 00000 n 0000029899 00000 n 0000029961 00000 n 0000030023 00000 n 0000030085 00000 n 0000030148 00000 n 0000034497 00000 n 0000032500 00000 n 0000030320 00000 n 0000032622 00000 n 0000032808 00000 n 0000032870 00000 n 0000032932 00000 n 0000032994 00000 n 0000033056 00000 n 0000033119 00000 n 0000033183 00000 n 0000033247 00000 n 0000033309 00000 n 0000033373 00000 n 0000033437 00000 n 0000033501 00000 n 0000033563 00000 n 0000033625 00000 n 0000033688 00000 n 0000033750 00000 n 0000033813 00000 n 0000033875 00000 n 0000033937 00000 n 0000033999 00000 n 0000034060 00000 n 0000034122 00000 n 0000034184 00000 n 0000034245 00000 n 0000034307 00000 n 0000034370 00000 n 0000034433 00000 n 0000039753 00000 n 0000036875 00000 n 0000034605 00000 n 0000036997 00000 n 0000037059 00000 n 0000037121 00000 n 0000037183 00000 n 0000037246 00000 n 0000037310 00000 n 0000037374 00000 n 0000037435 00000 n 0000037497 00000 n 0000037559 00000 n 0000037622 00000 n 0000037685 00000 n 0000037748 00000 n 0000037812 00000 n 0000037874 00000 n 0000037936 00000 n 0000037998 00000 n 0000038060 00000 n 0000038124 00000 n 0000038188 00000 n 0000038250 00000 n 0000038312 00000 n 0000038375 00000 n 0000038439 00000 n 0000038501 00000 n 0000038563 00000 n 0000038625 00000 n 0000038689 00000 n 0000038752 00000 n 0000038814 00000 n 0000038876 00000 n 0000038939 00000 n 0000039003 00000 n 0000039065 00000 n 0000039129 00000 n 0000039193 00000 n 0000039255 00000 n 0000039316 00000 n 0000039378 00000 n 0000039441 00000 n 0000039504 00000 n 0000039566 00000 n 0000039628 00000 n 0000039690 00000 n 0000043305 00000 n 0000042129 00000 n 0000039849 00000 n 0000042251 00000 n 0000042437 00000 n 0000042499 00000 n 0000042561 00000 n 0000042623 00000 n 0000042685 00000 n 0000042747 00000 n 0000042809 00000 n 0000042871 00000 n 0000042933 00000 n 0000042995 00000 n 0000043057 00000 n 0000043119 00000 n 0000043181 00000 n 0000043243 00000 n 0000046666 00000 n 0000045803 00000 n 0000043400 00000 n 0000045925 00000 n 0000045987 00000 n 0000046049 00000 n 0000046111 00000 n 0000046173 00000 n 0000046234 00000 n 0000046295 00000 n 0000046356 00000 n 0000046418 00000 n 0000046480 00000 n 0000046542 00000 n 0000046604 00000 n 0000051450 00000 n 0000049271 00000 n 0000046749 00000 n 0000049393 00000 n 0000049455 00000 n 0000049517 00000 n 0000049579 00000 n 0000049641 00000 n 0000049703 00000 n 0000049766 00000 n 0000049828 00000 n 0000049891 00000 n 0000049953 00000 n 0000050016 00000 n 0000050078 00000 n 0000050141 00000 n 0000050202 00000 n 0000050265 00000 n 0000050327 00000 n 0000050390 00000 n 0000050452 00000 n 0000050515 00000 n 0000050577 00000 n 0000050639 00000 n 0000050701 00000 n 0000050764 00000 n 0000050826 00000 n 0000050889 00000 n 0000050951 00000 n 0000051014 00000 n 0000051076 00000 n 0000051139 00000 n 0000051201 00000 n 0000051264 00000 n 0000051326 00000 n 0000051388 00000 n 0000153570 00000 n 0000054909 00000 n 0000053920 00000 n 0000051533 00000 n 0000054042 00000 n 0000054104 00000 n 0000054166 00000 n 0000054228 00000 n 0000054290 00000 n 0000054352 00000 n 0000054413 00000 n 0000054475 00000 n 0000054537 00000 n 0000054599 00000 n 0000054661 00000 n 0000054723 00000 n 0000054785 00000 n 0000054847 00000 n 0000057895 00000 n 0000056903 00000 n 0000054992 00000 n 0000057025 00000 n 0000057087 00000 n 0000057149 00000 n 0000057211 00000 n 0000057273 00000 n 0000057335 00000 n 0000057397 00000 n 0000057461 00000 n 0000057523 00000 n 0000057585 00000 n 0000057647 00000 n 0000057709 00000 n 0000057771 00000 n 0000057833 00000 n 0000057978 00000 n 0000068132 00000 n 0000079623 00000 n 0000095160 00000 n 0000107698 00000 n 0000121082 00000 n 0000141561 00000 n 0000152987 00000 n 0000153663 00000 n 0000153740 00000 n 0000154667 00000 n 0000158306 00000 n 0000158345 00000 n 0000158383 00000 n 0000158512 00000 n trailer << /Size 389 /Root 387 0 R /Info 388 0 R /ID [ ] >> startxref 158775 %%EOF libdbi-drivers-0.9.0/drivers/ingres/dbd_ingres/copying-fdl.html000644 001750 001750 00000052225 12117467205 025450 0ustar00markusmarkus000000 000000 GNU Free Documentation License

    Appendix A. GNU Free Documentation License

    Version 1.1, March 2000

    Copyright (C) 2000 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.

    0. PREAMBLE

    The purpose of this License is to make a manual, textbook, or other written document "free" in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others.

    This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software.

    We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference.

    1. APPLICABILITY AND DEFINITIONS

    This License applies to any manual or other work that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you".

    A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language.

    A "Secondary Section" is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (For example, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them.

    The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License.

    The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License.

    A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, whose contents can be viewed and edited directly and straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup has been designed to thwart or discourage subsequent modification by readers is not Transparent. A copy that is not "Transparent" is called "Opaque".

    Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML designed for human modification. Opaque formats include PostScript, PDF, proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML produced by some word processors for output purposes only.

    The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, "Title Page" means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text.

    2. VERBATIM COPYING

    You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3.

    You may also lend copies, under the same conditions stated above, and you may publicly display copies.

    3. COPYING IN QUANTITY

    If you publish printed copies of the Document numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects.

    If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages.

    If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a publicly-accessible computer-network location containing a complete Transparent copy of the Document, free of added material, which the general network-using public has access to download anonymously at no charge using public-standard network protocols. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public.

    It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document.

    4. MODIFICATIONS

    You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version:

    1. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission.

    2. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has less than five).

    3. State on the Title page the name of the publisher of the Modified Version, as the publisher.

    4. Preserve all the copyright notices of the Document.

    5. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices.

    6. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below.

    7. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice.

    8. Include an unaltered copy of this License.

    9. Preserve the section entitled "History", and its title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section entitled "History" in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence.

    10. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the "History" section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission.

    11. In any section entitled "Acknowledgements" or "Dedications", preserve the section's title, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein.

    12. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles.

    13. Delete any section entitled "Endorsements". Such a section may not be included in the Modified Version.

    14. Do not retitle any existing section as "Endorsements" or to conflict in title with any Invariant Section.

    If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles.

    You may add a section entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various parties--for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard.

    You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one.

    The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version.

    5. COMBINING DOCUMENTS

    You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice.

    The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work.

    In the combination, you must combine any sections entitled "History" in the various original documents, forming one section entitled "History"; likewise combine any sections entitled "Acknowledgements", and any sections entitled "Dedications". You must delete all sections entitled "Endorsements."

    6. COLLECTIONS OF DOCUMENTS

    You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects.

    You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document.

    7. AGGREGATION WITH INDEPENDENT WORKS

    A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, does not as a whole count as a Modified Version of the Document, provided no compilation copyright is claimed for the compilation. Such a compilation is called an "aggregate", and this License does not apply to the other self-contained works thus compiled with the Document, on account of their being thus compiled, if they are not themselves derivative works of the Document.

    If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one quarter of the entire aggregate, the Document's Cover Texts may be placed on covers that surround only the Document within the aggregate. Otherwise they must appear on covers around the whole aggregate.

    8. TRANSLATION

    Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License provided that you also include the original English version of this License. In case of a disagreement between the translation and the original English version of this License, the original English version will prevail.

    9. TERMINATION

    You may not copy, modify, sublicense, or distribute the Document except as expressly provided for under this License. Any other attempt to copy, modify, sublicense or distribute the Document is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.

    10. FUTURE REVISIONS OF THIS LICENSE

    The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See http://www.gnu.org/copyleft/.

    Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation.

    How to use this License for your documents

    To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page:

    Copyright (c) YEAR YOUR NAME. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. A copy of the license is included in the section entitled "GNU Free Documentation License".

    If you have no Invariant Sections, write "with no Invariant Sections" instead of saying which ones are invariant. If you have no Front-Cover Texts, write "no Front-Cover Texts" instead of "Front-Cover Texts being LIST"; likewise for Back-Cover Texts.

    If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software.

    libdbi-drivers-0.9.0/drivers/ingres/dbd_ingres/f25.html000644 001750 001750 00000005542 12117467205 023631 0ustar00markusmarkus000000 000000 Preface

    Preface

    libdbi is a database abstraction layer written in C. It implements a framework that can utilize separate driver libraries for specific database servers. The libdbi-drivers project provides the drivers necessary to talk to the supported database servers.

    This manual provides information about the ingres driver, which provides support for Ingres databases. The manual is intended for programmers who write applications linked against libdbi and who want their applications to use this database backend.

    Questions and comments about this driver should be sent to the libdbi-drivers-devel mailing list (see the website). Questions and comments about the libdbi library should be sent to the appropriate libdbi mailing list.

    This driver is maintained by Toby Thain.

    libdbi-drivers-0.9.0/drivers/ingres/dbd_ingres/index.html000644 001750 001750 00000005633 12117467205 024345 0ustar00markusmarkus000000 000000 Ingres Driver Notes

    Ingres Driver Notes

    Details about the libdbi driver providing support for Ingres backends

    Toby Thain

    Revision History
    Revision 0.32006-06-08

    Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is included in Appendix A.


    libdbi-drivers-0.9.0/drivers/ingres/dbd_ingres/install-build.html000644 001750 001750 00000012021 12117467205 025766 0ustar00markusmarkus000000 000000 Build and install the driver

    2.2. Build and install the driver

    First you have to unpack the libdbi-drivers archive in a suitable directory. Unpacking will create a new subdirectory with the version number, such as libdbi-drivers-0.8.0

    $ tar xfvz libdbi-drivers-0.8.0.tar.gz

    The libdbi-drivers project consists of several drivers that use a common build system. Therefore you must explicitly tell the configuration script that you want to build the ingres driver (you can list as many drivers as you want to build):

    $ cd libdbi-drivers-0.8.0
    $ ./configure --with-ingres

    Run ./configure --help to find out about additional options and other available drivers.

    Then build the driver with the command:

    $ make

    Note: Please note that you may have to invoke gmake, the GNU version of make, on some systems.

    Then install the driver with the command (you'll need root permissions to do this):

    $ make install

    To test the operation of the newly installed driver, use the command:

    $ make check

    This command creates and runs a test program that performs a few basic input and output tests.

    Note: If for some reason you need to re-create the autoconf/automake-related files, try running ./autogen.sh. In some situations, the current stable autoconf/automake/libtool versions (as found in FreeBSD 4.7 and Debian 3.0) do not cooperate well, so it may be necessary to run the older autoconf 2.13. If necessary, edit autogen.sh so that it will catch the older autoconf version on your system.

    libdbi-drivers-0.9.0/drivers/ingres/dbd_ingres/install-prereq.html000644 001750 001750 00000005764 12117467205 026205 0ustar00markusmarkus000000 000000 Prerequisites

    2.1. Prerequisites

    The following packages must be installed on your system:

    libdbi

    This library implements the core database abstraction layer, which provides your application with database backend functionality when paired with this driver. More information about libdbi, including mailing lists, documentation, bug reports, and downloads, is available from the libdbi website.

    libpq

    This is the C shared library to enable user programs to communicate with the Ingres(R) Community Edition RDBMS.

    The current version of the dbd_ingres driver was written and tested with the 32-bit NPTL version II 9.0.4 and 9.2 for Linux/x86, running on Gentoo (see my installation notes).

    libdbi-drivers-0.9.0/drivers/ingres/dbd_ingres/install.html000644 001750 001750 00000004242 12117467205 024677 0ustar00markusmarkus000000 000000 Installation

    Chapter 2. Installation

    This chapter describes the prerequisites and the procedures to build and install this driver from source code.

    libdbi-drivers-0.9.0/drivers/ingres/dbd_ingres/intro.html000644 001750 001750 00000004507 12117467205 024370 0ustar00markusmarkus000000 000000 Introduction

    Chapter 1. Introduction

    Ingres(R) is an advanced relational database management system from Ingres Corporation. Notable features include C2 security certification, clustering, partitioning, transaction journaling, query optimisation, diverse programming bindings and flexible licensing from GPL community through to 24/7 enterprise level support.

    More information can be found from the Ingres website.

    libdbi-drivers-0.9.0/drivers/ingres/dbd_ingres/options.html000644 001750 001750 00000005651 12117467205 024731 0ustar00markusmarkus000000 000000 Driver options

    Chapter 3. Driver options

    Before you can initiate a connection, you must usually specify options that tell the database driver what to connect to. This driver supports the standard options of username, password and dbname. The latter parameter is in Ingres syntax, [node_id::]dbname[/svr_class] - see Ingres documentation for details. (When running as the Ingres admin user on the same host as the DBMS, only the dbname is normally required.) Sensible defaults will be used for all unspecified options.

    This driver also offers the following non-standard options, and/or redefines the meaning of the following standard options:

    ingres_autocommit

    Set this option to string value "0" to disable Ingres autocommit mode for the connection (it is enabled by default).

    libdbi-drivers-0.9.0/drivers/ingres/dbd_ingres/specific.html000644 001750 001750 00000020044 12117467205 025014 0ustar00markusmarkus000000 000000 Ingres-specific Peculiarities

    Chapter 4. Ingres-specific Peculiarities

    This chapter lists known peculiarities of the ingres driver. Wherever possible, nonstandard driver behavior is hidden by libdbi's abstractions, but occasionally special considerations must be taken or extra functionality may be utilized for particular drivers.

    Ingres environment variables must be set

    The driver will not be loaded at all by dbi_initialize() if the Ingres environment variables are not set (e.g. by ~/.ingIIbash). If the current user or specified user does not have appropriate Ingres privileges, the connection will fail ("User authorization check failed" or similar).

    When connecting, the driver uses the values of the dbname, username and password options, if set.

    Autocommit

    'Autocommit' mode is enabled by default for the DBMS connection. In this mode, every query is committed as an individual transaction.

    With autocommit disabled (see ingres_autocommit connection option), a transaction is begun by the first query statement after connection, commit or rollback. The transaction remains open until the next explicit commit, rollback or disconnection (which implies commit). Commit and rollback cannot be done using an OpenAPI query, but must use separate API functions. To work around this, the Ingres driver makes a specific check for COMMIT and ROLLBACK queries and calls the appropriate API function instead of issuing the query.

    See Ingres OpenAPI and SQL documentation for more information.

    Handling of result sets

    In the Ingres OpenAPI, result sets must be accessed sequentially. Furthermore, Ingres does not provide the row count; this must be determined by fetching rows until no more is available. For this reason, the driver must fetch all result data into memory immediately after a query. Then libdbi functions can be used to get random access to rows as usual.

    A workaround, for example if your result sets are very large, would be to use SELECT for random access; for example, query once to get a set of key values, then issue SELECTs on individual rows or smaller subsets of rows.

    If your result set or BLOB data is likely to exhaust memory, and workarounds such as the above are not appropriate, then you will need to use OpenAPI directly to access them sequentially or by segments, instead of using libdbi and this driver.

    SEQUENCE functions and autocommit

    dbi_conn_sequence_last() is not usable in Ingres' autocommit mode (the default). To use sequences to identify INSERTed rows, first obtain the NEXT VALUE using dbi_conn_sequence_next() then use that sequence value directly in a separate INSERT transaction.

    DATE parsing

    Parsing DATE columns into timestamp values will only work correctly when returned values are in the default (US) date format; i.e. dd-mmm-yyyy [hh:mm:ss] where mmm is a partial month name. The parsing routine will accept any separators and either a numeric or named month, but the D-M-Y ordering is required. If needed, a workaround for date format incompatibility is to format into a string using a SQL function such as date_gmt(date).

    Version string format

    dbi_conn_get_engine_version_string() returns a string like II 9.0.4 (int.lnx/104)NPTL (internally this is implemented as SELECT dbmsinfo('_version').

    Getting database and table lists

    dbi_conn_get_table_list() returns matching objects of all types - tables, views, indexes and partitions - in the iitables catalog for the named database (except those beginning with ii, which are reserved for Ingres). These names are space padded fixed width fields.

    Logging verbosity

    The driver respects dbd_set_verbosity() level in reporting messages. At verbosity 1, only errors and abnormalities are reported; at 2, more information is shown; at 3, detailed debugging information is shown.

    Blank handling

    Blanks are preserved in column values (except that DECIMAL and MONEY columns are converted to strings, and then stripped of trailing blanks). Note that names returned by dbi_conn_get_table_list() and dbi_conn_get_db_list() are padded with blanks to a fixed width.

    Error messages

    The Ingres OpenAPI may return multiple error messages for a given query/operation. The dbi_conn_error() returns the error code only for the last error message, but the message text will include all relevant messages. At verbosity level 2, errors directly relating to libdbi function calls are logged. At verbosity 3, all errors are logged including those caused by API calls made internally by the driver.

    Environment variables II_API_TRACE and II_API_LOG control logging by the API itself. See Chapter 6 of the Ingres OpenAPI User Guide for details.

    Connection options

    All Ingres option values are specified as strings (using dbi_conn_set_option()).

    ingres_blobsegment option

    This option specifies the size of individual segments returned for BLOB columns (by default this is approx 2000 bytes). If your BLOBs are large, increasing this value reduces the number of API calls required by the Ingres driver.

    libdbi-drivers-0.9.0/drivers/freetds/README000644 001750 001750 00000001344 10314333532 021260 0ustar00markusmarkus000000 000000 FreeTDS DRIVER: --------------- This driver allows libdbi-enabled applications to use MS SQL Server or Sybase as a database backend. Some hints how to use this driver: In /etc/locales.conf should be set date format to %Y-%m-%d %H:%M:%S It's need for date format converting. As "hostname" we can use 1) "IP"; 2) "domaine name" or 3) "name of database section in /etc/freetds.conf" See the included driver documentation for installation instructions, usage, and information about driver-specific peculiarities - once that documentation has been written, that is. CONTACT INFO: ------------- libdbi-drivers-devel@lists.sourceforge.net http://libdbi-drivers.sourceforge.net Vadym Kononenko libdbi-drivers-0.9.0/drivers/freetds/Makefile.am000644 001750 001750 00000003173 11447472773 022461 0ustar00markusmarkus000000 000000 AUTOMAKE_OPTIONS = foreign docdir = $(datadir)/doc/$(PACKAGE)-$(VERSION) if HAVE_FREETDS if BUILDDOCS # don't use docdir, doc_DATA. This way we keep the HTML in separate subdirs # for each driver htdocdir = $(docdir)dbd_freetds #doc_DATA = dbd_freetds.pdf #htdoc_DATA = dbd_freetds/* else htdocdir = endif freetds_ltlibs = libdbdfreetds.la freetds_ldflags = -module -avoid-version freetds_sources = dbd_freetds.c else htdocdir = doc_DATA = htdoc_DATA = freetds_ltlibs = freetds_ldflags = freetds_sources = endif INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/include @DBI_INCLUDE@ @FREETDS_INCLUDE@ libdir = $(driverdir) lib_LTLIBRARIES = $(freetds_ltlibs) libdbdfreetds_la_LDFLAGS = $(freetds_ldflags) @FREETDS_LDFLAGS@ @FREETDS_LIBS@ @LIBADD_LIBDBI@ libdbdfreetds_la_SOURCES = $(freetds_sources) libdbdfreetds_la_DEPENDENCIES = dbd_freetds.h #EXTRA_DIST = dbd_freetds.c dbd_freetds.h AUTHORS TODO README dbd_freetds.pdf $(htdoc_DATA) EXTRA_DIST = dbd_freetds.c dbd_freetds.h # jadetex spews out tons of useless crap. shut it up: #dbd_freetds.pdf: dbd_freetds.sgml # @echo "Converting dbd_freetds.sgml to PDF..."; # openjade -t tex -V tex-backend -d $(top_srcdir)/doc/include/doc-print.dsl dbd_freetds.sgml # run jadetex three times to get the references right # pdftex "&pdfjadetex" dbd_freetds.tex # pdftex "&pdfjadetex" dbd_freetds.tex # pdftex "&pdfjadetex" dbd_freetds.tex #dbd_freetds/*: dbd_freetds.sgml # @echo "Converting dbd_freetds.sgml to HTML..."; # mkdir -p dbd_mysql && cd dbd_freetds && openjade -t sgml -d $(top_srcdir)/../doc/include/doc-html.dsl ../dbd_freetds.sgml maintainer-clean: clean # rm -f dbd_mysql.pdf dbd_mysql/* libdbi-drivers-0.9.0/drivers/freetds/Makefile.in000644 001750 001750 00000055335 12117467052 022466 0ustar00markusmarkus000000 000000 # Makefile.in generated by automake 1.12.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2012 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = drivers/freetds DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(top_srcdir)/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(docdir)" \ "$(DESTDIR)$(htdocdir)" LTLIBRARIES = $(lib_LTLIBRARIES) libdbdfreetds_la_LIBADD = am__libdbdfreetds_la_SOURCES_DIST = dbd_freetds.c @HAVE_FREETDS_TRUE@am__objects_1 = dbd_freetds.lo am_libdbdfreetds_la_OBJECTS = $(am__objects_1) libdbdfreetds_la_OBJECTS = $(am_libdbdfreetds_la_OBJECTS) libdbdfreetds_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(libdbdfreetds_la_LDFLAGS) $(LDFLAGS) -o $@ @HAVE_FREETDS_TRUE@am_libdbdfreetds_la_rpath = -rpath $(libdir) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(libdbdfreetds_la_SOURCES) DIST_SOURCES = $(am__libdbdfreetds_la_SOURCES_DIST) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac DATA = $(doc_DATA) $(htdoc_DATA) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DB2_INCLUDE = @DB2_INCLUDE@ DB2_LDFLAGS = @DB2_LDFLAGS@ DB2_LIBS = @DB2_LIBS@ DB2_TEST = @DB2_TEST@ DBI_INCLUDE = @DBI_INCLUDE@ DEBUG = @DEBUG@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FIREBIRD_INCLUDE = @FIREBIRD_INCLUDE@ FIREBIRD_ISQL = @FIREBIRD_ISQL@ FIREBIRD_ISQL_FLAG = @FIREBIRD_ISQL_FLAG@ FIREBIRD_LDFLAGS = @FIREBIRD_LDFLAGS@ FIREBIRD_LIBS = @FIREBIRD_LIBS@ FIREBIRD_TEST = @FIREBIRD_TEST@ FREETDS_INCLUDE = @FREETDS_INCLUDE@ FREETDS_LDFLAGS = @FREETDS_LDFLAGS@ FREETDS_LIBS = @FREETDS_LIBS@ FREETDS_TEST = @FREETDS_TEST@ GREP = @GREP@ INGRES_INCLUDE = @INGRES_INCLUDE@ INGRES_LDFLAGS = @INGRES_LDFLAGS@ INGRES_LIBS = @INGRES_LIBS@ INGRES_TEST = @INGRES_TEST@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBADD_LIBDBI = @LIBADD_LIBDBI@ LIBDBI_LIBDIR = @LIBDBI_LIBDIR@ LIBDBI_TEST = @LIBDBI_TEST@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSQL_INCLUDE = @MSQL_INCLUDE@ MSQL_LDFLAGS = @MSQL_LDFLAGS@ MSQL_LIBS = @MSQL_LIBS@ MSQL_TEST = @MSQL_TEST@ MYSQL_CONFIG = @MYSQL_CONFIG@ MYSQL_INCLUDE = @MYSQL_INCLUDE@ MYSQL_LDFLAGS = @MYSQL_LDFLAGS@ MYSQL_LIBS = @MYSQL_LIBS@ MYSQL_TEST = @MYSQL_TEST@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ ORACLE_INCLUDE = @ORACLE_INCLUDE@ ORACLE_LDFLAGS = @ORACLE_LDFLAGS@ ORACLE_LIBS = @ORACLE_LIBS@ ORACLE_TEST = @ORACLE_TEST@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PGSQL_INCLUDE = @PGSQL_INCLUDE@ PGSQL_LDFLAGS = @PGSQL_LDFLAGS@ PGSQL_LIBS = @PGSQL_LIBS@ PGSQL_TEST = @PGSQL_TEST@ PG_CONFIG = @PG_CONFIG@ PROFILE = @PROFILE@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SQLITE3_INCLUDE = @SQLITE3_INCLUDE@ SQLITE3_LDFLAGS = @SQLITE3_LDFLAGS@ SQLITE3_LIBS = @SQLITE3_LIBS@ SQLITE3_TEST = @SQLITE3_TEST@ SQLITE_INCLUDE = @SQLITE_INCLUDE@ SQLITE_LDFLAGS = @SQLITE_LDFLAGS@ SQLITE_LIBS = @SQLITE_LIBS@ SQLITE_TEST = @SQLITE_TEST@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ dbi_dbdir = @dbi_dbdir@ docdir = $(datadir)/doc/$(PACKAGE)-$(VERSION) docs_subdirs = @docs_subdirs@ driverdir = @driverdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = $(driverdir) libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = foreign #doc_DATA = dbd_freetds.pdf #htdoc_DATA = dbd_freetds/* @BUILDDOCS_FALSE@@HAVE_FREETDS_TRUE@htdocdir = # don't use docdir, doc_DATA. This way we keep the HTML in separate subdirs # for each driver @BUILDDOCS_TRUE@@HAVE_FREETDS_TRUE@htdocdir = $(docdir)dbd_freetds @HAVE_FREETDS_FALSE@htdocdir = @HAVE_FREETDS_FALSE@freetds_ltlibs = @HAVE_FREETDS_TRUE@freetds_ltlibs = libdbdfreetds.la @HAVE_FREETDS_FALSE@freetds_ldflags = @HAVE_FREETDS_TRUE@freetds_ldflags = -module -avoid-version @HAVE_FREETDS_FALSE@freetds_sources = @HAVE_FREETDS_TRUE@freetds_sources = dbd_freetds.c @HAVE_FREETDS_FALSE@doc_DATA = @HAVE_FREETDS_FALSE@htdoc_DATA = INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/include @DBI_INCLUDE@ @FREETDS_INCLUDE@ lib_LTLIBRARIES = $(freetds_ltlibs) libdbdfreetds_la_LDFLAGS = $(freetds_ldflags) @FREETDS_LDFLAGS@ @FREETDS_LIBS@ @LIBADD_LIBDBI@ libdbdfreetds_la_SOURCES = $(freetds_sources) libdbdfreetds_la_DEPENDENCIES = dbd_freetds.h #EXTRA_DIST = dbd_freetds.c dbd_freetds.h AUTHORS TODO README dbd_freetds.pdf $(htdoc_DATA) EXTRA_DIST = dbd_freetds.c dbd_freetds.h all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign drivers/freetds/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign drivers/freetds/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ } uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libdbdfreetds.la: $(libdbdfreetds_la_OBJECTS) $(libdbdfreetds_la_DEPENDENCIES) $(EXTRA_libdbdfreetds_la_DEPENDENCIES) $(libdbdfreetds_la_LINK) $(am_libdbdfreetds_la_rpath) $(libdbdfreetds_la_OBJECTS) $(libdbdfreetds_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dbd_freetds.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-docDATA: $(doc_DATA) @$(NORMAL_INSTALL) @list='$(doc_DATA)'; test -n "$(docdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(docdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(docdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(docdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(docdir)" || exit $$?; \ done uninstall-docDATA: @$(NORMAL_UNINSTALL) @list='$(doc_DATA)'; test -n "$(docdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(docdir)'; $(am__uninstall_files_from_dir) install-htdocDATA: $(htdoc_DATA) @$(NORMAL_INSTALL) @list='$(htdoc_DATA)'; test -n "$(htdocdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(htdocdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(htdocdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(htdocdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(htdocdir)" || exit $$?; \ done uninstall-htdocDATA: @$(NORMAL_UNINSTALL) @list='$(htdoc_DATA)'; test -n "$(htdocdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(htdocdir)'; $(am__uninstall_files_from_dir) ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(DATA) installdirs: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(docdir)" "$(DESTDIR)$(htdocdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-docDATA install-htdocDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-libLTLIBRARIES install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-docDATA uninstall-htdocDATA \ uninstall-libLTLIBRARIES .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libLTLIBRARIES clean-libtool cscopelist ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am \ install-docDATA install-dvi install-dvi-am install-exec \ install-exec-am install-htdocDATA install-html install-html-am \ install-info install-info-am install-libLTLIBRARIES \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \ uninstall-am uninstall-docDATA uninstall-htdocDATA \ uninstall-libLTLIBRARIES # jadetex spews out tons of useless crap. shut it up: #dbd_freetds.pdf: dbd_freetds.sgml # @echo "Converting dbd_freetds.sgml to PDF..."; # openjade -t tex -V tex-backend -d $(top_srcdir)/doc/include/doc-print.dsl dbd_freetds.sgml # run jadetex three times to get the references right # pdftex "&pdfjadetex" dbd_freetds.tex # pdftex "&pdfjadetex" dbd_freetds.tex # pdftex "&pdfjadetex" dbd_freetds.tex #dbd_freetds/*: dbd_freetds.sgml # @echo "Converting dbd_freetds.sgml to HTML..."; # mkdir -p dbd_mysql && cd dbd_freetds && openjade -t sgml -d $(top_srcdir)/../doc/include/doc-html.dsl ../dbd_freetds.sgml maintainer-clean: clean # rm -f dbd_mysql.pdf dbd_mysql/* # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: libdbi-drivers-0.9.0/drivers/freetds/dbd_freetds.c000644 001750 001750 00000071466 12073357507 023041 0ustar00markusmarkus000000 000000 /* * libdbi - database independent abstraction layer for C. * Copyright (C) 2001-2002, David Parker and Mark Tobenkin. * http://libdbi.sourceforge.net * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * dbd_freetds.c: MS SQL database support (using libct of FreeTDS library) * Copyright (C) Vadym Kononenko . * http://libdbi.sourceforge.net * * */ #ifdef HAVE_CONFIG_H #include #endif #define _GNU_SOURCE /* we need asprintf */ #ifndef HAVE_ATOLL long long atoll(const char *str); #endif #ifndef HAVE_STRTOLL long long strtoll(const char *nptr, char **endptr, int base); #endif #include #include #include #include #include #include #include #include #include "dbd_freetds.h" #include typedef struct freedts_type { CS_CONTEXT *ctx; CS_CONNECTION *conn; CS_COMMAND *cmd; } FREETDSCON; static FREETDSCON freetds; static const dbi_info_t driver_info = { "freetds", "MS SQL and Sybase databases support (using libct)", "Vadym Kononenko ", "http://libdbi.sourceforge.net", "dbd_freetds v" VERSION, __DATE__ }; static const char APP_NAME[] = "libdbi-freetds-driver"; static const char *custom_functions[] = { NULL }; static const char *reserved_words[] = TDS_RESERVED_WORDS; static const char freetds_encoding_hash[][16] = { /* Sybase , www.iana.org *//* INTERNAL FREETDS NUMBER */ /* Information from internal freetds header 'encodings.h' */ "iso_1", "ISO-8859-1", /* 0 */ "ascii_8", "ISO-8859-1", /* 0 */ "utf8", "UTF-8", /* 1 */ "big5", "BIG-5", /* 5 */ "cp1250", "CP1250", /* 15 */ "cp1251", "CP1251", /* 15 */ "cp1252", "CP1252", /* 15 */ "cp1253", "CP1253", /* 16 */ "cp1254", "CP1254", /* 17 */ "cp1255", "CP1255", /* 18 */ "cp1256", "CP1256", /* 19 */ "cp1257", "CP1257", /* 20 */ "cp1258", "CP1258", /* 21 */ "cp437", "CP437", /* 23 */ "cp850", "CP850", /* 24 */ "cp862", "CP862", /* 25 */ "cp866", "CP866", /* 26 */ "cp874", "CP874", /* 27 */ "cp932", "CP932", /* 28 */ "cp936", "CP936", /* 29 */ "cp949", "CP949", /* 30 */ "cp950", "CP950", /* 31 */ "iso10", "ISO-8859-10", /* 45 */ "iso13", "ISO-8859-13", /* 46 */ "iso14", "ISO-8859-14", /* 47 */ "iso15", "ISO-8859-15", /* 48 */ "iso88592", "ISO-8859-2", /* 50 */ "iso88595", "ISO-8859-5", /* 53 */ "iso88596", "ISO-8859-6", /* 54 */ "iso88597", "ISO-8859-7", /* 55 */ "greek8", "ISO-8859-7", /* 55 */ "iso88598", "ISO-8859-8", /* 56 */ "iso88599", "ISO-8859-9", /* 57 */ "tis620", "ISO-IR-166", /* 61 */ "koi8", "KOI8-R", /* 65 */ "mac", "MAC", /* 69 */ "mac_cyr", "MACCYRILLIC", /* 73 */ "macgreek", "MACGREEK", /* 74 */ "macthai", "MACTHAI", /* 78 */ "macturk", "MACTURKISH", /* 79 */ "roman8", "ROMAN8", /* 83 */ "sjis", "SJIS", /* 84 */ "iso646", "US-ASCII", /* 94 */ "", "" }; void _dbd_free_row(dbi_result_t * result, dbi_row_t * row); void _translate_freetds_type(CS_DATAFMT * datafmt, unsigned short *type, unsigned int *attribs); size_t _dbd_freetds_escape_chars(char *dest, const char *orig, size_t orig_size, const char *toescape); dbi_row_t *_dbd_freetds_buffers_binding(dbi_conn_t * conn, dbi_result_t * result, CS_DATAFMT ** datafmt, CS_INT * datalength, CS_SMALLINT * ind, CS_RETCODE * ret); void dbd_register_driver(const dbi_info_t ** _driver_info, const char ***_custom_functions, const char ***_reserved_words) { /* this is the first function called after the driver module is loaded into memory */ *_driver_info = &driver_info; *_custom_functions = custom_functions; *_reserved_words = reserved_words; } int dbd_initialize(dbi_driver_t * driver) { /* perform any database-specific server initialization. * this is called right after dbd_register_driver(). * return -1 on error, 0 on success. if -1 is returned, the driver will not * be added to the list of available drivers. */ /* this indicates the driver can be safely unloaded when libdbi is shut down. Change the value to '0' (zero) if the driver, or a library it is linked against, installs exit handlers via atexit() */ _dbd_register_driver_cap(driver, "safe_dlclose", 1); /* this indicates the database engine supports transactions */ _dbd_register_driver_cap(driver, "transaction_support", 1); /* this indicates the database engine supports savepoints */ _dbd_register_driver_cap(driver, "savepoint_support", 1); return 0; } int dbd_finalize(dbi_driver_t *driver) { /* perform any database-specific client library shutdown. * this is called right before dlclose()ing the driver. * return -1 on error, 0 on success. */ return 0; } int dbd_connect(dbi_conn_t * conn) { FREETDSCON *tdscon = &freetds; CS_RETCODE ret; char *str; unsigned int num; /* * Allocate memory for structs */ if (cs_ctx_alloc(CS_VERSION_100, &tdscon->ctx) == CS_SUCCEED) { if (ct_init(tdscon->ctx, CS_VERSION_100) == CS_SUCCEED) { if (ct_con_alloc(tdscon->ctx, &tdscon->conn) == CS_SUCCEED) { if (ct_cmd_alloc(tdscon->conn, &tdscon->cmd) == CS_SUCCEED) { goto success_allocate; } /* Deallocate "conn" struct */ ct_con_drop(tdscon->conn); } /* Go out from client library */ ct_exit(tdscon->ctx, CS_UNUSED); } /* Deallocate "ctx" struct */ cs_ctx_drop(tdscon->ctx); } return -1; success_allocate: conn->connection = tdscon; /* Set parameters for login */ /* USERNAME */ ret = ct_con_props(tdscon->conn, CS_SET, CS_USERNAME, (str = (char *) dbi_conn_get_option(conn, "username")) ? str : "", CS_NULLTERM, NULL); if (ret != CS_SUCCEED) { // fprintf(stderr, "ct_con_props() SET USERNAME failed!\n"); return -1; } /* PASSWORD */ ret = ct_con_props(tdscon->conn, CS_SET, CS_PASSWORD, (str = (char *) dbi_conn_get_option(conn, "password")) ? str : "", CS_NULLTERM, NULL); if (ret != CS_SUCCEED) { // fprintf(stderr, "ct_con_props() SET PASSWORD failed!\n"); return -1; } /* CHARSET or locale? */ /* Describe all locales and charsets in locales.conf file */ /* ret = ct_con_props(tdscon->conn, CS_SET, CS_LOC_PROP, (str = (char *) dbi_conn_get_encoding(conn)) ? str : "", CS_NULLTERM, NULL); if (ret != CS_SUCCEED) { // fprintf(stderr, "ct_con_props() SET LOCALE failed!\n"); return -1; } */ if ((str = (char *) dbi_conn_get_option(conn, "freetds_version"))) { /* Last VERSION supported by ctlib is 7.0 */ // Format = X.XX.XX switch (str[0]) { // We can use it if "CS_TDS_80" will be add to ct_con_props() by CS_SET action case '8': num = CS_TDS_80; break; case '7': num = CS_TDS_70; break; case '5': num = CS_TDS_50; break; case '4': { switch (str[2]) { case '6': num = CS_TDS_46; break; case '9': num = CS_TDS_495; break; case '0': case '2': default: num = CS_TDS_40; } } break; default: num = CS_TDS_40; } ret = ct_con_props(tdscon->conn, CS_SET, CS_TDS_VERSION, &num, CS_NULLTERM, NULL); if (ret != CS_SUCCEED) { // fprintf(stderr, "ct_con_props() SET VERSION failed!\n"); return -1; } } /* Connect to CLI */ ret = ct_connect(tdscon->conn, (str = (char *) dbi_conn_get_option(conn, "host")) ? str : "", CS_NULLTERM); if (ret != CS_SUCCEED) { // fprintf(stderr, "ct_connect() failed!\n"); return -1; } return 0; } int dbd_disconnect(dbi_conn_t * conn) { FREETDSCON *tdscon = (FREETDSCON *) conn->connection; if (ct_cancel(tdscon->conn, NULL, CS_CANCEL_ALL) != CS_SUCCEED) { return 1; } ct_cmd_drop(tdscon->cmd); ct_close(tdscon->conn, CS_UNUSED); ct_con_drop(tdscon->conn); ct_exit(tdscon->ctx, CS_UNUSED); cs_ctx_drop(tdscon->ctx); return 0; } int dbd_fetch_row(dbi_result_t * result, unsigned long long rownum) { if (result->result_state == NOTHING_RETURNED) return -1; if (result->result_state == ROWS_RETURNED) /* We have already all rows writed to result */ return 1; return 0; /* 0 on error, 1 on successful fetchrow */ } int dbd_free_query(dbi_result_t * result) { /* We don't use any additional memory buffers */ return 0; } int dbd_goto_row(dbi_result_t * result, unsigned long long rowidx, unsigned long long currowidx) { /* no-op */ return 1; } int dbd_get_socket(dbi_conn_t * conn) { /* FREETDSCON *tdscon = (FREETDSCON *) conn->connection; if (!(tdscon || tdscon->conn || tdscon->conn->tds_socket)) return -1; return (int) tdscon->conn->tds_socket->s; */ /* * ctlib not allowed to do it and we can't use internal * header ctlib.h for direct acceess to tds structs */ return 0; } const char *dbd_get_encoding(dbi_conn_t * conn) { FREETDSCON *tdscon = (FREETDSCON *) conn->connection; const char *tds_enc = NULL; CS_RETCODE ret; /* if (!(tdscon || tdscon->conn || tdscon->conn->tds_login)) return NULL; */ /* Freetds library use iconv for converting * different charsets between client and server * (if compiled with HAVE_ICONV_ALWAYS and clien_charset is set) * server_charset setted as current clients locale... */ /* if ((((tds_enc = (const char *) tdscon->conn->tds_login->client_charset)) && strlen(tds_enc)) && ((tds_enc = (const char *) tdscon->conn->tds_login->server_charset)) && strlen(tds_enc)) return dbd_encoding_to_iana(tds_enc); */ /* in ct_con_props(..., CS_VOID* buffer, ...) allocated the mistake */ /* case CS_LOC_PROP: buffer = (CS_VOID *) con->locale; break; */ /* I think there should be "*buffer = (CS_VOID *) con->locale;" */ ret = ct_con_props(tdscon->conn, CS_GET, CS_LOC_PROP, &tds_enc, CS_NULLTERM, NULL); if (ret != CS_SUCCEED) { // fprintf(stderr, "ct_con_props() SET LOCALE failed!\n"); return NULL; } return tds_enc ? dbd_encoding_to_iana(tds_enc) : NULL; } const char *dbd_encoding_to_iana(const char *db_encoding) { int i = 0; /* loop over all even entries in hash and compare to menc */ while (*freetds_encoding_hash[i]) { if (!strncmp(freetds_encoding_hash[i], db_encoding, strlen(freetds_encoding_hash[i]))) { /* return corresponding odd entry */ return freetds_encoding_hash[i + 1]; } i += 2; } /* don't know how to translate, return original encoding */ return db_encoding; } const char *dbd_encoding_from_iana(const char *iana_encoding) { int i = 0; /* loop over all odd entries in hash and compare to ienc */ while (*freetds_encoding_hash[i + 1]) { if (!strcmp(freetds_encoding_hash[i + 1], iana_encoding)) { /* return corresponding even entry */ return freetds_encoding_hash[i]; } i += 2; } /* don't know how to translate, return original encoding */ return iana_encoding; } char *dbd_get_engine_version(dbi_conn_t * conn, char *versionstring) { dbi_result_t *dbi_result; const char *versioninfo = NULL; /* initialize return string */ *versionstring = '\0'; dbi_result = dbd_query(conn, "select @@version"); if (dbi_result) { if (dbi_result_next_row(dbi_result)) { char *start = NULL; char *stop = NULL; int len = 0; versioninfo = dbi_result_get_string_idx(dbi_result, 1); /* try to locate the version number. Look for the first dot, go back where the number before the dot starts, then walk forward to the last dot or number */ start = strchr(versioninfo, (int) '.'); if (start) { while (--start > versioninfo && isdigit((int) (*start))); stop = ++start; while (*stop && (isdigit((int) (*stop)) || *stop == '.')) { stop++; } len = stop - start; /* Last digit not copied to versionstring */ if (len && --len < VERSIONSTRING_LENGTH) { strncpy(versionstring, start, len); versionstring[len] = '\0'; } } } dbi_result_free(dbi_result); } return versionstring; } dbi_result_t *dbd_list_dbs(dbi_conn_t * conn, const char *pattern) { dbi_result_t *res; char *sql_cmd; if (pattern == NULL) { return dbd_query(conn, "exec sp_databases"); } else { /* Only this way - nothing another */ asprintf(&sql_cmd, " create table #t (\n" " DATABASE_NAME sysname NOT NULL,\n" " DATABASE_SIZE int NOT NULL,\n" " REMARKS varchar(254)\n" " )\n" " Insert Into #t exec sp_databases\n" " Select * From #t Where DATABASE_NAME Like '%%%s%%'\n" " Drop table #t", pattern); res = dbd_query(conn, sql_cmd); free(sql_cmd); return res; } } dbi_result_t *dbd_list_tables(dbi_conn_t * conn, const char *db, const char *pattern) { dbi_result_t *res; char *sql_cmd; if (db == NULL || db[0] == '\0') { /* Use current database */ res = dbd_query(conn, "EXEC sp_tables"); return res; } char *current_db = NULL; if (conn->current_db) /* Reserved current DB name */ current_db = strdup(conn->current_db); /* MS SQL can show tables only from current DB */ dbd_select_db(conn, db); if (pattern == NULL) { asprintf(&sql_cmd, "create table #t (\n" " TABLE_QUALIFIER sysname,\n" " TABLE_OWNER sysname,\n" " TABLE_NAME sysname NOT NULL,\n" " TABLE_TYPE sysname,\n" " REMARKS varchar(254)\n" " )\n" "Insert Into #t exec sp_tables\n" "Select TABLE_NAME From #t Where TABLE_TYPE='TABLE'\n" "Drop table #t\n"); res = dbd_query(conn, sql_cmd); free(sql_cmd); } else { asprintf(&sql_cmd, "create table #t (\n" " TABLE_QUALIFIER sysname,\n" " TABLE_OWNER sysname,\n" " TABLE_NAME sysname NOT NULL,\n" " TABLE_TYPE sysname,\n" " REMARKS varchar(254)\n" " )\n" "Insert Into #t exec sp_tables\n" "Select TABLE_NAME From #t Where TABLE_TYPE='TABLE' And TABLE_NAME Like '%%%s%%'\n" "Drop table #t\n", pattern); res = dbd_query(conn, sql_cmd); free(sql_cmd); } if (current_db) { /* Restore previous DB */ dbd_select_db(conn, current_db); free(current_db); } return res; } size_t dbd_quote_string(dbi_driver_t * driver, const char *orig, char *dest) { /* foo's -> 'foo''s' */ size_t len; strcpy(dest, "\'"); const char *escaped = "\'"; len = _dbd_freetds_escape_chars(dest + 1, orig, strlen(orig), escaped); strcat(dest, "'"); return len + 2; } size_t dbd_conn_quote_string(dbi_conn_t * conn, const char *orig, char *dest) { return dbd_quote_string(conn->driver, orig, dest); } size_t dbd_quote_binary(dbi_conn_t * conn, const unsigned char *orig, size_t from_length, unsigned char **ptr_dest) { unsigned char *temp; size_t len; if ((temp = malloc(from_length * 2)) == NULL) { return 0; } strcpy((char *) temp, "\'"); if (from_length) { len = _dbd_encode_binary(orig, from_length, temp + 1); } else { len = 0; } strcat((char *) temp, "'"); *ptr_dest = temp; return len + 2; } /* * Here is a roblem - freetds return only one row and we should step * by step get all rows and save it separately */ dbi_result_t *dbd_query(dbi_conn_t * conn, const char *statement) { /* allocate a new dbi_result_t and fill its applicable members: * * result_handle, numrows_matched, and numrows_changed. * everything else will be filled in by DBI */ unsigned int idx = 0; dbi_result_t *result = NULL; dbi_row_t *row = NULL; FREETDSCON *tdscon = (FREETDSCON *) conn->connection; CS_RETCODE ret, results_ret; CS_INT result_type, num_cols; CS_DATAFMT **datafmt = NULL; CS_INT datalength = 0; CS_SMALLINT ind = 0; CS_INT count, row_count = 0; ret = ct_command(tdscon->cmd, CS_LANG_CMD, statement, CS_NULLTERM, CS_UNUSED); if (ret != CS_SUCCEED) { // fprintf(stderr, "ct_command() failed\n"); return NULL; } ret = ct_send(tdscon->cmd); if (ret != CS_SUCCEED) { // fprintf(stderr, "ct_send() failed\n"); return NULL; } while ((results_ret = ct_results(tdscon->cmd, &result_type)) == CS_SUCCEED) { switch ((int) result_type) { case CS_ROWFMT_RESULT: /* here we should allocate memory for received data */ break; case CS_CMD_SUCCEED: if (!result) { if (!((result = _dbd_result_create(conn, NULL, 0 /* Unknown num rows */ , 0 /*numrows_affected */ )))) /* Out of memory */ return NULL; result->result_state = NOTHING_RETURNED; } break; case CS_CMD_DONE: break; case CS_CMD_FAIL: /* ? */ return NULL; break; case CS_ROW_RESULT: ret = ct_res_info(tdscon->cmd, CS_NUMDATA, &num_cols, CS_UNUSED, NULL); if (ret != CS_SUCCEED) { // fprintf(stderr, "ct_res_info() failed"); return NULL; } if (!(result = _dbd_result_create(conn, NULL, 0 /* Unknown num rows */ , 0 /*numrows_affected */ ))) /* Out of memory */ return NULL; result->result_state = ROWS_RETURNED; _dbd_result_set_numfields(result, num_cols); /* Fill columns type */ for (idx = 0; idx < result->numfields; ++idx) { /* Get information about current column */ datafmt = realloc(datafmt, sizeof(CS_DATAFMT *) * (idx + 1)); datafmt[idx] = malloc(sizeof(CS_DATAFMT)); ret = ct_describe(tdscon->cmd, idx + 1, datafmt[idx]); if (ret != CS_SUCCEED) { // fprintf(stderr, "ct_describe() failed"); return NULL; } unsigned short type = 0; unsigned int attribs = 0; _translate_freetds_type(datafmt[idx], &type, &attribs); /* Fill fields value in result */ _dbd_result_add_field(result, idx, datafmt[idx]->name, type, attribs); } /* Bind all column buffers for current row */ if (!(row = _dbd_freetds_buffers_binding(conn, result, datafmt, &datalength, &ind, &ret))) return NULL; while (((ret = ct_fetch(tdscon->cmd, CS_UNUSED, CS_UNUSED, CS_UNUSED, &count)) == CS_SUCCEED) || (ret == CS_ROW_FAIL)) { row_count += count; if (ret == CS_ROW_FAIL) { // fprintf(stderr, "ct_fetch() CS_ROW_FAIL on row %d.\n", row_count); return NULL; } else if (ret == CS_SUCCEED) { /* Save row */ if (!(result->rows = realloc(result->rows, (result->numrows_matched + 2) * sizeof(dbi_row_t *)))) /* Out of memory */ return NULL; _dbd_row_finalize(result, row, result->numrows_matched++); /* Prepare buffer for next row */ if (!(row = _dbd_freetds_buffers_binding(conn, result, datafmt, &datalength, &ind, &ret))) return NULL; } else { break; } } /* Last return */ switch ((int) ret) { case CS_END_DATA: /* Last row is reserved - free it */ _dbd_free_row(result, row); for (idx = 0; idx < result->numfields; ++idx) free(datafmt[idx]); free(datafmt); break; case CS_FAIL: // fprintf(stderr, "ct_fetch() returned CS_FAIL.\n"); return NULL; default: // fprintf(stderr, "ct_fetch() unexpected return.\n"); return NULL; } break; case CS_COMPUTE_RESULT: // fprintf(stderr, "ct_results() unexpected CS_COMPUTE_RESULT.\n"); return NULL; case CS_STATUS_RESULT: break; default: // fprintf(stderr, "ct_results() unexpected result_type.\n"); return NULL; } } switch ((int) results_ret) { case CS_END_RESULTS: break; case CS_FAIL: return NULL; break; default: return NULL; } // ++(result->numrows_affected); // result->result_handle = tdscon->tds_socket /*->res_info*/ ; return result; } dbi_result_t *dbd_query_null(dbi_conn_t * conn, const unsigned char *statement, size_t st_length) { return NULL; } int dbd_transaction_begin(dbi_conn_t *conn) { if (dbd_query(conn, "BEGIN TRANSACTION") == NULL) { return 1; } else { return 0; } } int dbd_transaction_commit(dbi_conn_t *conn) { if (dbd_query(conn, "COMMIT TRANSACTION") == NULL) { return 1; } else { return 0; } } int dbd_transaction_rollback(dbi_conn_t *conn) { if (dbd_query(conn, "ROLLBACK TRANSACTION") == NULL) { return 1; } else { return 0; } } int dbd_savepoint(dbi_conn_t *conn, const char *savepoint) { char* query; if (!savepoint) { return 1; } asprintf(&query, "SAVE TRANSACTION %s", savepoint); if (dbd_query(conn, query) == NULL) { free(query); return 1; } else { free(query); return 0; } } int dbd_rollback_to_savepoint(dbi_conn_t *conn, const char *savepoint) { char* query; if (!savepoint) { return 1; } asprintf(&query, "ROLLBACK TRANSACTION %s", savepoint); if (dbd_query(conn, query) == NULL) { free(query); return 1; } else { free(query); return 0; } } int dbd_release_savepoint(dbi_conn_t *conn, const char *savepoint) { /* this is apparently not used by SYBASE/SQL Server */ return 0; } const char *dbd_select_db(dbi_conn_t * conn, const char *db) { dbi_result_t *res; char *sql_cmd; asprintf(&sql_cmd, "USE %s ", db); res = dbd_query(conn, sql_cmd); free(sql_cmd); if (!res) { return NULL; } dbi_result_free(res); return (char *) db; } int dbd_geterror(dbi_conn_t * conn, int *err_no, char **errstr) { /* put error number into errno, error string into errstr * return 0 if error, 1 if err_no filled, 2 if errstr filled, 3 if both err_no and errstr filled */ /* We havn't functions for read error types in freetds */ return -1; } unsigned long long dbd_get_seq_last(dbi_conn_t * conn, const char *sequence) { // FREETDSCON *tdscon = (FREETDSCON *) conn->connection; /* int len = 0; if (sequence) len = strlen(sequence); return tds_quote_id(tdscon->tds_socket, NULL, sequence, len) ; */ return 0; } unsigned long long dbd_get_seq_next(dbi_conn_t * conn, const char *sequence) { return 0; } int dbd_ping(dbi_conn_t * conn) { int res; /* Freetds haven't ping function - use simple query */ /* Maybe get another simple query? */ res = dbd_query(conn, "SELECT 1") ? 1 : 0; if (!res) { // server is alive and kicking dbd_disconnect(conn); res = dbd_connect(conn); return (res ? 0 : res); } return res; } void _translate_freetds_type(CS_DATAFMT * datafmt, unsigned short *type, unsigned int *attribs) { unsigned int _type = 0; unsigned int _attribs = 0; datafmt->format = CS_FMT_UNUSED; switch (datafmt->datatype /* field type */ ) { case CS_LONG_TYPE: /* 8 */ _type = DBI_TYPE_INTEGER; _attribs |= DBI_INTEGER_SIZE8; break; case CS_INT_TYPE: /* 4 */ _type = DBI_TYPE_INTEGER; _attribs |= DBI_INTEGER_SIZE4; break; case CS_SMALLINT_TYPE: /* 2 */ _type = DBI_TYPE_INTEGER; _attribs |= DBI_INTEGER_SIZE2; break; case CS_BIT_TYPE: /* 1 */ case CS_TINYINT_TYPE: _type = DBI_TYPE_INTEGER; _attribs |= DBI_INTEGER_SIZE1; break; case CS_DATETIME_TYPE: /* 8 */ _type = DBI_TYPE_DATETIME; _attribs |= DBI_DATETIME_DATE; _attribs |= DBI_DATETIME_TIME; break; case CS_DATETIME4_TYPE: /* 4 */ _type = DBI_TYPE_DATETIME; _attribs |= DBI_DATETIME_DATE; _attribs |= DBI_DATETIME_TIME; break; case CS_REAL_TYPE: /* 4 */ _type = DBI_TYPE_DECIMAL; _attribs |= DBI_DECIMAL_SIZE4; break; case CS_FLOAT_TYPE: /* 8 */ _type = DBI_TYPE_DECIMAL; _attribs |= DBI_DECIMAL_SIZE8; break; case CS_CHAR_TYPE: case CS_TEXT_TYPE: case CS_VARCHAR_TYPE: _type = DBI_TYPE_STRING; datafmt->format = CS_FMT_NULLTERM; ++datafmt->maxlength; /* 1 extra byte for \0 */ break; case CS_MONEY_TYPE: /* 8 */ case CS_MONEY4_TYPE: /* 4 */ case CS_NUMERIC_TYPE: case CS_DECIMAL_TYPE: case CS_UNIQUE_TYPE: case CS_IMAGE_TYPE: case CS_BINARY_TYPE: case CS_VARBINARY_TYPE: case CS_UNICHAR_TYPE: default: _type = DBI_TYPE_BINARY; } *type = _type; *attribs = _attribs; } size_t _dbd_freetds_escape_chars(char *dest, const char *orig, size_t orig_size, const char *toescape) { char *curdest = dest; const char *curorig = orig; const char *curescaped; size_t len = 0; while (curorig && curorig < orig + orig_size) { curescaped = toescape; while (curescaped && *curescaped) { if (*curorig == *curescaped) { *(curdest++) = '\''; len++; break; } curescaped++; } /* Copy char to destination */ *curdest = *curorig; curorig++; curdest++; len++; } /* append a NULL byte. This is required if orig was a zero-terminated string. It does not hurt if orig was a binary string as the calling function is not supposed to read past len bytes */ *curdest = '\0'; return len; } dbi_row_t *_dbd_freetds_buffers_binding(dbi_conn_t * conn, dbi_result_t * result, CS_DATAFMT ** datafmt, CS_INT * datalength, CS_SMALLINT * ind, CS_RETCODE * ret) { dbi_row_t *row = NULL; unsigned int idx = 0; void *addr = NULL; FREETDSCON *tdscon = (FREETDSCON *) conn->connection; /* Allocate memory for current row */ if (!(row = _dbd_row_allocate(result->numfields))) /* Out of memory */ return NULL; for (idx = 0; idx < result->numfields; ++idx) { /* Processing data from previous row */ if (result->numrows_matched > 0) { /* * We should convert data from previous row * to libdbi datatypes. We converted types here * because we should know CS_ data types. */ switch (datafmt[idx]->datatype) { case CS_MONEY_TYPE: /* 8 */ case CS_MONEY4_TYPE: /* 4 */ { CS_DATAFMT dstfmt; dstfmt.datatype = CS_NUMERIC_TYPE; dstfmt.maxlength = sizeof(CS_NUMERIC_TYPE); dstfmt.locale = NULL; dstfmt.format = CS_FMT_UNUSED; addr = malloc(sizeof(CS_NUMERIC_TYPE)); char **orig = &(result->rows[result->numrows_matched]->field_values[idx].d_string); if (cs_convert(tdscon->ctx, datafmt[idx], *orig, &dstfmt, addr, NULL) != CS_SUCCEED) { // fprintf(stderr, "cs_convert() succeeded when failure was expected\n"); } free(*orig); *orig = addr; } break; case CS_DATETIME_TYPE: /* 8 */ case CS_DATETIME4_TYPE: /* 4 */ { char datastring[20]; CS_DATAFMT dstfmt; dstfmt.datatype = CS_TEXT_TYPE; dstfmt.maxlength = 20; dstfmt.locale = NULL; dstfmt.format = CS_FMT_NULLTERM; addr = &(result->rows[result->numrows_matched]->field_values[idx]); if (cs_convert(tdscon->ctx, datafmt[idx], addr, &dstfmt, datastring, NULL) != CS_SUCCEED) { // fprintf(stderr, "cs_convert() succeeded when failure was expected\n"); } ((dbi_data_t *) addr)->d_datetime = _dbd_parse_datetime(datastring, DBI_DATETIME_TIME | DBI_DATETIME_DATE); } break; /* decode binary string */ case CS_UNIQUE_TYPE: case CS_IMAGE_TYPE: case CS_BINARY_TYPE: case CS_VARBINARY_TYPE: case CS_UNICHAR_TYPE: addr = result->rows[result->numrows_matched]; ((dbi_row_t *) addr)->field_sizes[idx] = _dbd_decode_binary(((dbi_row_t *) addr)->field_values[idx].d_string, ((dbi_row_t *) addr)->field_values[idx].d_string); break; case CS_CHAR_TYPE: case CS_TEXT_TYPE: case CS_VARCHAR_TYPE: addr = result->rows[result->numrows_matched]; ((dbi_row_t *) addr)->field_sizes[idx] = strlen(((dbi_row_t *) addr)->field_values[idx].d_string); break; } } /* Bind all columns buffer for current row */ row->field_sizes[idx] = datafmt[idx]->maxlength; switch (result->field_types[idx]) { case DBI_TYPE_BINARY: case DBI_TYPE_STRING: /* * Result is more that 8 bytes - * allocate additional memory * 1 extra byte for \0 */ addr = row->field_values[idx].d_string = (char *) malloc(row->field_sizes[idx] + 1); break; default: /* Prepare union to data copy */ bzero((addr = &row->field_values[idx]), sizeof(dbi_data_t)); } *ret = ct_bind(tdscon->cmd, idx + 1, datafmt[idx], addr, datalength, ind); if (*ret != CS_SUCCEED) { // fprintf(stderr, "ct_bind() failed\n"); return NULL; } } /* All columns buffer binded */ return row; } void _dbd_free_row(dbi_result_t * result, dbi_row_t * row) { unsigned int idx = 0; for (idx = 0; idx < result->numfields; ++idx) { if (result->field_types[idx] == DBI_TYPE_BINARY || result->field_types[idx] == DBI_TYPE_STRING) { free(row->field_values[idx].d_string); } } free(row->field_values); free(row->field_sizes); free(row->field_flags); free(row); } libdbi-drivers-0.9.0/drivers/freetds/dbd_freetds.h000644 001750 001750 00000005304 10310112431 023003 0ustar00markusmarkus000000 000000 /* * libdbi - database independent abstraction layer for C. * Copyright (C) Vadym Kononenko * http://libdbi.sourceforge.net * * dbd_freetds.c: MS SQL database support (using libct of FreeTDS library) * Copyright (C) Vadym Kononenko . * http://libdbi.sourceforge.net * */ #define TDS_RESERVED_WORDS { \ "ADD", \ "ALL", \ "ALTER", \ "AND", \ "ANY", \ "AS", \ "ASC", \ "AUTHORIZATION", \ "AVG", \ "BACKUP", \ "BEGIN", \ "BETWEEN", \ "BREAK", \ "BROWSE", \ "BULK", \ "BY", \ "CASCADE", \ "CASE", \ "CHECK", \ "CHECKPOINT", \ "CLOSE", \ "CLUSTERED", \ "COALESCE", \ "COLUMN", \ "COMMIT", \ "COMMITED", \ "COMPUTE", \ "CONFIRM", \ "CONSTRAINT", \ "CONTINUE", \ "CONTROLROW", \ "CONVERT", \ "COUNT", \ "CREATE", \ "CROSS", \ "CURRENT", \ "CURRENT_DATE", \ "CURRENT_TIMESTAMP", \ "CURRENT_USER", \ "CURSOR", \ "DATABASE", \ "DBCC", \ "DEALLOCATE", \ "DECLARE", \ "DEFAULT", \ "DELETE", \ "DESC", \ "DISK", \ "DISTINCT", \ "DISTRIBUTED", \ "DOUBLE", \ "DROP", \ "DUMMY", \ "DUMP", \ "ELSE", \ "END", \ "ERRLVL", \ "ERROREXIT", \ "ESCAPE", \ "EXCEPT", \ "EXECUTE", \ "EXIT", \ "FETCH", \ "FILE", \ "FILLFACTOR", \ "FLOPPY", \ "FOR", \ "FOREIGN", \ "FROM", \ "FULL", \ "GOTO", \ "GRANT", \ "GROUP", \ "HAVING", \ "HOLDLOCK", \ "IDENTITY", \ "IDENTITY_INSERT", \ "IDENTITYCOL", \ "IF", \ "IN", \ "INDEX", \ "INNER", \ "INSERT", \ "INSERTSECT", \ "INTO", \ "IS", \ "ISOLATION", \ "JOIN", \ "KEY", \ "KILL", \ "LEFT", \ "LEVEL", \ "LIKE", \ "LINENO", \ "MAX", \ "MIN", \ "MIRROREXIT", \ "NOCHECK", \ "NONCLUSTERED", \ "NOT", \ "NULL", \ "NULLIF", \ "OF", \ "OFF", \ "OFFSETS", \ "ON", \ "ONCE", \ "ONLY", \ "OPEN", \ "OPENQUERY", \ "OPENROWSET", \ "OPTION", \ "OR", \ "ORDER", \ "OUTER", \ "OVER", \ "PERCENT", \ "PERMANENT", \ "PIPE", \ "PLAN", \ "PRECISION", \ "PREPARE", \ "PRINT", \ "PRIVILEGES", \ "PROCEDURE", \ "PROCESSEXIT", \ "PUBLIC", \ "RAISERROR", \ "READ", \ "READTEXT", \ "RECONFIGURE", \ "REFERENCES", \ "REPEATABLE", \ "REPLICATION", \ "RESTRICT", \ "RETURN", \ "REVOKE", \ "RIGTH", \ "ROLLBACK", \ "ROWCOUNT", \ "ROWGUIDCOL", \ "RULE", \ "SAVE", \ "SCHEMA", \ "SELECT", \ "SERIALIZABLE", \ "SESSION_USER", \ "SET", \ "SETUSER", \ "SHUTDOWN", \ "STATISTICS", \ "SUM", \ "SYSTEM_USER", \ "TABLE", \ "TAPE", \ "TEMPORARY", \ "TEXTSIZE", \ "THEN", \ "TO", \ "TOP", \ "TRANSACTION", \ "TRIGGER", \ "TRUNCATE", \ "TSEQUAL", \ "UNCOMMITED", \ "UNION", \ "UNIQUE", \ "UPDATE", \ "UPDATETEXT", \ "USE", \ "USER", \ "VALUES", \ "VARYING", \ "VIEW", \ "WAITFOR", \ "WHEN", \ "WHERE", \ "WHILE", \ "WITH", \ "WORK", \ "WRITETEXT", \ NULL } libdbi-drivers-0.9.0/drivers/firebird/README000644 001750 001750 00000003634 10314355157 021425 0ustar00markusmarkus000000 000000 FIREBIRD/INTERBASE DRIVER: -------------------------- This driver allows libdbi-enabled applications to use Firebird or Interbase as a database backend. Eventually there will be a documentation worth its name, so we'll be able to proudly say: "See the included driver documentation for installation instructions, usage, and information about driver-specific peculiarities." For the time being, this README will have to do. Driver status ============= The firebird driver still has some rough edges: - On Linux only the superserver was found to cooperate well with libdbi. The classic architecture was less encouraging. - On FreeBSD there is no superserver. The classic server dumps core when libdbi tries to connect to a database. Common pitfalls =============== - In order to work with the firebird driver at all, you'll need an existing database to connect to. Virtually anything will do. Either create a database with the isql command-line tool (which is called isql-fb on Debian to make things a little more challenging), or use the database which is created when running "make check" - The permission stuff is quite tricky to get used to. First of all you need a database user which is allowed to use firebird at all. Use the gsec command-line tool to add or manage users. Next you need to make sure the firebird process has sufficient permissions to create or change database files. It is recommended anyway to put all firebird databases managed by libdbi into a single directory. Make sure this directory is owned by and has write and traverse access for the account that runs the firebird server. On most systems firebird runs in the "firebird" user account. chown the database directory to firebird:firebird and set the permissions to 744 CONTACT INFO: ------------- libdbi-drivers-devel@lists.sourceforge.net http://libdbi-drivers.sourceforge.net Christian Stamgren libdbi-drivers-0.9.0/drivers/firebird/Makefile.am000644 001750 001750 00000003622 11447722451 022601 0ustar00markusmarkus000000 000000 ## Process this with automake to create Makefile.in AUTOMAKE_OPTIONS = foreign docdir = $(datadir)/doc/$(PACKAGE)-$(VERSION) if HAVE_FIREBIRD_INTERBASE if BUILDDOCS # don't use docdir, doc_DATA. This way we keep the HTML in separate subdirs # for each driver htdocdir = $(docdir)/dbd_firebird doc_DATA = dbd_firebird.pdf htdoc_DATA = dbd_firebird/* else htdocdir = doc_DATA = htdoc_DATA = endif firebird_ltlibs = libdbdfirebird.la firebird_ldflags = -module -avoid-version firebird_sources = dbd_firebird.c utility.c else firebird_ltlibs = firebird_ldflags = firebird_sources = endif INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/include @DBI_INCLUDE@ @FIREBIRD_INCLUDE@ libdir = $(driverdir) lib_LTLIBRARIES = $(firebird_ltlibs) libdbdfirebird_la_LDFLAGS = $(firebird_ldflags) @FIREBIRD_LDFLAGS@ @FIREBIRD_LIBS@ @LIBADD_LIBDBI@ libdbdfirebird_la_SOURCES = $(firebird_sources) libdbdfirebird_la_DEPENDENCIES = dbd_firebird.h utility.h firebird_charsets.h AM_CPPFLAGS=-DDBDIR=\"@dbi_dbdir@/firebird\" EXTRA_DIST = dbd_firebird.c utility.c dbd_firebird.h utility.h firebird_charsets.h dbd_firebird.sgml dbd_firebird.pdf $(htdoc_data) # jadetex spews out tons of useless crap. shut it up: dbd_firebird.pdf: dbd_firebird.sgml @echo "Converting dbd_firebird.sgml to PDF..."; openjade -t tex -V tex-backend -d $(top_srcdir)/doc/include/doc-print.dsl dbd_firebird.sgml # run jadetex three times to get the references right pdftex "&pdfjadetex" dbd_firebird.tex pdftex "&pdfjadetex" dbd_firebird.tex pdftex "&pdfjadetex" dbd_firebird.tex dbd_firebird/*: dbd_firebird.sgml @echo "Converting dbd_firebird.sgml to HTML..."; mkdir -p dbd_firebird && cd dbd_firebird && openjade -t sgml -d $(top_srcdir)/../doc/include/doc-html.dsl ../dbd_firebird.sgml maintainer-clean: clean rm -f dbd_firebird.pdf dbd_firebird/* install-exec-local: $(mkinstalldirs) $(DESTDIR)@dbi_dbdir@/firebird chmod 1777 $(DESTDIR)@dbi_dbdir@/firebird libdbi-drivers-0.9.0/drivers/firebird/Makefile.in000644 001750 001750 00000056614 12117467052 022621 0ustar00markusmarkus000000 000000 # Makefile.in generated by automake 1.12.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2012 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = drivers/firebird DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(top_srcdir)/depcomp AUTHORS TODO ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(docdir)" \ "$(DESTDIR)$(htdocdir)" LTLIBRARIES = $(lib_LTLIBRARIES) libdbdfirebird_la_LIBADD = am__libdbdfirebird_la_SOURCES_DIST = dbd_firebird.c utility.c @HAVE_FIREBIRD_INTERBASE_TRUE@am__objects_1 = dbd_firebird.lo \ @HAVE_FIREBIRD_INTERBASE_TRUE@ utility.lo am_libdbdfirebird_la_OBJECTS = $(am__objects_1) libdbdfirebird_la_OBJECTS = $(am_libdbdfirebird_la_OBJECTS) libdbdfirebird_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(libdbdfirebird_la_LDFLAGS) $(LDFLAGS) -o $@ @HAVE_FIREBIRD_INTERBASE_TRUE@am_libdbdfirebird_la_rpath = -rpath \ @HAVE_FIREBIRD_INTERBASE_TRUE@ $(libdir) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(libdbdfirebird_la_SOURCES) DIST_SOURCES = $(am__libdbdfirebird_la_SOURCES_DIST) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac DATA = $(doc_DATA) $(htdoc_DATA) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DB2_INCLUDE = @DB2_INCLUDE@ DB2_LDFLAGS = @DB2_LDFLAGS@ DB2_LIBS = @DB2_LIBS@ DB2_TEST = @DB2_TEST@ DBI_INCLUDE = @DBI_INCLUDE@ DEBUG = @DEBUG@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FIREBIRD_INCLUDE = @FIREBIRD_INCLUDE@ FIREBIRD_ISQL = @FIREBIRD_ISQL@ FIREBIRD_ISQL_FLAG = @FIREBIRD_ISQL_FLAG@ FIREBIRD_LDFLAGS = @FIREBIRD_LDFLAGS@ FIREBIRD_LIBS = @FIREBIRD_LIBS@ FIREBIRD_TEST = @FIREBIRD_TEST@ FREETDS_INCLUDE = @FREETDS_INCLUDE@ FREETDS_LDFLAGS = @FREETDS_LDFLAGS@ FREETDS_LIBS = @FREETDS_LIBS@ FREETDS_TEST = @FREETDS_TEST@ GREP = @GREP@ INGRES_INCLUDE = @INGRES_INCLUDE@ INGRES_LDFLAGS = @INGRES_LDFLAGS@ INGRES_LIBS = @INGRES_LIBS@ INGRES_TEST = @INGRES_TEST@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBADD_LIBDBI = @LIBADD_LIBDBI@ LIBDBI_LIBDIR = @LIBDBI_LIBDIR@ LIBDBI_TEST = @LIBDBI_TEST@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSQL_INCLUDE = @MSQL_INCLUDE@ MSQL_LDFLAGS = @MSQL_LDFLAGS@ MSQL_LIBS = @MSQL_LIBS@ MSQL_TEST = @MSQL_TEST@ MYSQL_CONFIG = @MYSQL_CONFIG@ MYSQL_INCLUDE = @MYSQL_INCLUDE@ MYSQL_LDFLAGS = @MYSQL_LDFLAGS@ MYSQL_LIBS = @MYSQL_LIBS@ MYSQL_TEST = @MYSQL_TEST@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ ORACLE_INCLUDE = @ORACLE_INCLUDE@ ORACLE_LDFLAGS = @ORACLE_LDFLAGS@ ORACLE_LIBS = @ORACLE_LIBS@ ORACLE_TEST = @ORACLE_TEST@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PGSQL_INCLUDE = @PGSQL_INCLUDE@ PGSQL_LDFLAGS = @PGSQL_LDFLAGS@ PGSQL_LIBS = @PGSQL_LIBS@ PGSQL_TEST = @PGSQL_TEST@ PG_CONFIG = @PG_CONFIG@ PROFILE = @PROFILE@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SQLITE3_INCLUDE = @SQLITE3_INCLUDE@ SQLITE3_LDFLAGS = @SQLITE3_LDFLAGS@ SQLITE3_LIBS = @SQLITE3_LIBS@ SQLITE3_TEST = @SQLITE3_TEST@ SQLITE_INCLUDE = @SQLITE_INCLUDE@ SQLITE_LDFLAGS = @SQLITE_LDFLAGS@ SQLITE_LIBS = @SQLITE_LIBS@ SQLITE_TEST = @SQLITE_TEST@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ dbi_dbdir = @dbi_dbdir@ docdir = $(datadir)/doc/$(PACKAGE)-$(VERSION) docs_subdirs = @docs_subdirs@ driverdir = @driverdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = $(driverdir) libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = foreign @BUILDDOCS_FALSE@@HAVE_FIREBIRD_INTERBASE_TRUE@htdocdir = # don't use docdir, doc_DATA. This way we keep the HTML in separate subdirs # for each driver @BUILDDOCS_TRUE@@HAVE_FIREBIRD_INTERBASE_TRUE@htdocdir = $(docdir)/dbd_firebird @BUILDDOCS_FALSE@@HAVE_FIREBIRD_INTERBASE_TRUE@doc_DATA = @BUILDDOCS_TRUE@@HAVE_FIREBIRD_INTERBASE_TRUE@doc_DATA = dbd_firebird.pdf @BUILDDOCS_FALSE@@HAVE_FIREBIRD_INTERBASE_TRUE@htdoc_DATA = @BUILDDOCS_TRUE@@HAVE_FIREBIRD_INTERBASE_TRUE@htdoc_DATA = dbd_firebird/* @HAVE_FIREBIRD_INTERBASE_FALSE@firebird_ltlibs = @HAVE_FIREBIRD_INTERBASE_TRUE@firebird_ltlibs = libdbdfirebird.la @HAVE_FIREBIRD_INTERBASE_FALSE@firebird_ldflags = @HAVE_FIREBIRD_INTERBASE_TRUE@firebird_ldflags = -module -avoid-version @HAVE_FIREBIRD_INTERBASE_FALSE@firebird_sources = @HAVE_FIREBIRD_INTERBASE_TRUE@firebird_sources = dbd_firebird.c utility.c INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/include @DBI_INCLUDE@ @FIREBIRD_INCLUDE@ lib_LTLIBRARIES = $(firebird_ltlibs) libdbdfirebird_la_LDFLAGS = $(firebird_ldflags) @FIREBIRD_LDFLAGS@ @FIREBIRD_LIBS@ @LIBADD_LIBDBI@ libdbdfirebird_la_SOURCES = $(firebird_sources) libdbdfirebird_la_DEPENDENCIES = dbd_firebird.h utility.h firebird_charsets.h AM_CPPFLAGS = -DDBDIR=\"@dbi_dbdir@/firebird\" EXTRA_DIST = dbd_firebird.c utility.c dbd_firebird.h utility.h firebird_charsets.h dbd_firebird.sgml dbd_firebird.pdf $(htdoc_data) all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign drivers/firebird/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign drivers/firebird/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ } uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libdbdfirebird.la: $(libdbdfirebird_la_OBJECTS) $(libdbdfirebird_la_DEPENDENCIES) $(EXTRA_libdbdfirebird_la_DEPENDENCIES) $(libdbdfirebird_la_LINK) $(am_libdbdfirebird_la_rpath) $(libdbdfirebird_la_OBJECTS) $(libdbdfirebird_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dbd_firebird.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/utility.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-docDATA: $(doc_DATA) @$(NORMAL_INSTALL) @list='$(doc_DATA)'; test -n "$(docdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(docdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(docdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(docdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(docdir)" || exit $$?; \ done uninstall-docDATA: @$(NORMAL_UNINSTALL) @list='$(doc_DATA)'; test -n "$(docdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(docdir)'; $(am__uninstall_files_from_dir) install-htdocDATA: $(htdoc_DATA) @$(NORMAL_INSTALL) @list='$(htdoc_DATA)'; test -n "$(htdocdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(htdocdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(htdocdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(htdocdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(htdocdir)" || exit $$?; \ done uninstall-htdocDATA: @$(NORMAL_UNINSTALL) @list='$(htdoc_DATA)'; test -n "$(htdocdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(htdocdir)'; $(am__uninstall_files_from_dir) ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(DATA) installdirs: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(docdir)" "$(DESTDIR)$(htdocdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-docDATA install-htdocDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-exec-local install-libLTLIBRARIES install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-docDATA uninstall-htdocDATA \ uninstall-libLTLIBRARIES .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libLTLIBRARIES clean-libtool cscopelist ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am \ install-docDATA install-dvi install-dvi-am install-exec \ install-exec-am install-exec-local install-htdocDATA \ install-html install-html-am install-info install-info-am \ install-libLTLIBRARIES install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am uninstall-docDATA \ uninstall-htdocDATA uninstall-libLTLIBRARIES # jadetex spews out tons of useless crap. shut it up: dbd_firebird.pdf: dbd_firebird.sgml @echo "Converting dbd_firebird.sgml to PDF..."; openjade -t tex -V tex-backend -d $(top_srcdir)/doc/include/doc-print.dsl dbd_firebird.sgml # run jadetex three times to get the references right pdftex "&pdfjadetex" dbd_firebird.tex pdftex "&pdfjadetex" dbd_firebird.tex pdftex "&pdfjadetex" dbd_firebird.tex dbd_firebird/*: dbd_firebird.sgml @echo "Converting dbd_firebird.sgml to HTML..."; mkdir -p dbd_firebird && cd dbd_firebird && openjade -t sgml -d $(top_srcdir)/../doc/include/doc-html.dsl ../dbd_firebird.sgml maintainer-clean: clean rm -f dbd_firebird.pdf dbd_firebird/* install-exec-local: $(mkinstalldirs) $(DESTDIR)@dbi_dbdir@/firebird chmod 1777 $(DESTDIR)@dbi_dbdir@/firebird # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: libdbi-drivers-0.9.0/drivers/firebird/AUTHORS000644 001750 001750 00000000232 10100133433 021564 0ustar00markusmarkus000000 000000 The following people have been involved in the Firebird/Interbase driver development: Main developer: * Christian M. Stamgren libdbi-drivers-0.9.0/drivers/firebird/TODO000644 001750 001750 00000000130 10100777627 021224 0ustar00markusmarkus000000 000000 This is the firebird/Interbase drivers TODO list. * inplement get_charset() function libdbi-drivers-0.9.0/drivers/firebird/dbd_firebird.c000755 001750 001750 00000043202 12073357407 023312 0ustar00markusmarkus000000 000000 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ /* * libdbi - database independent abstraction layer for C. * Copyright (C) 2001-2004, David Parker and Mark Tobenkin. * http://libdbi.sourceforge.net * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * dbd_firebird.c: Firebird/Interbase database support * Copyright (C) 2004-2005, Christian M. Stamgren * http://libdbi-drivers.sourceforge.net * */ /** * Warning!! Warning!! Warning!! * This driver has a big gotha, You can't use dbi_result_numrows() * This is because I don't know of a way to fetch the number of rows in a result set from firebird. * The only way to do it is to fetch all rows and count them..... */ #ifdef HAVE_CONFIG_H # include #endif #define _GNU_SOURCE /* we need asprintf */ #include #include #include #include #include #include "dbd_firebird.h" #include "firebird_charsets.h" #include "utility.h" /* is this correct? Firebird 1.5 used this instead: #define FB_ALIGN(n,b) ((n+b-1)&~(b-1)) */ #ifndef FB_ALIGN # define FB_ALIGN(n,b) ((n+1) & ~1) /* #define FB_ALIGN(n,b) ((n+b-1)&~(b-1)) */ #endif /* firebird versions prior to 2.0 do not typedef ISC_SCHAR but use TEXT instead. ISC_SCHAR's presence is checked for by the configure script */ #ifndef HAVE_ISC_SCHAR #define ISC_SCHAR TEXT #endif static const dbi_info_t driver_info = { "firebird", "Firebird/Interbase database support", "Christian M. Stamgren ", "http://libdbi-drivers.sourceforge.net", "dbd_firebird v" VERSION, __DATE__ }; static const char *custom_functions[] = FIREBIRD_CUSTOM_FUNCTIONS; static const char *reserved_words[] = FIREBIRD_RESERVED_WORDS; static const char firebird_encoding_NONE[] = "NONE"; /* the encoding strings */ extern char version[]; //this is dirty void dbd_register_driver(const dbi_info_t **_driver_info, const char ***_custom_functions, const char ***_reserved_words) { *_driver_info = &driver_info; *_custom_functions = custom_functions; *_reserved_words = reserved_words; } int dbd_initialize(dbi_driver_t *driver) { /* this indicates the driver cannot be safely unloaded when libdbi is shut down. Change the value to '1' if the driver, or a library it is linked against, is finally fixed to not install exit handlers via atexit() */ _dbd_register_driver_cap(driver, "safe_dlclose", 0); /* this indicates the database engine supports transactions */ _dbd_register_driver_cap(driver, "transaction_support", 1); /* this indicates the database engine supports savepoints */ _dbd_register_driver_cap(driver, "savepoint_support", 1); return 0; } int dbd_finalize(dbi_driver_t *driver) { /* perform any database-specific client library shutdown. * this is called right before dlclose()ing the driver. * return -1 on error, 0 on success. */ return 0; } int dbd_connect(dbi_conn_t *conn) { return _dbd_real_connect(conn, NULL); } int dbd_disconnect(dbi_conn_t *conn) { ibase_conn_t *iconn = conn->connection; if(iconn != NULL) { isc_commit_transaction(iconn->status_vector, &(iconn->trans)); isc_detach_database(iconn->status_vector, &(iconn->db)); dealocate_iconn(iconn); } return 0; } int dbd_fetch_row(dbi_result_t *result, unsigned long long rowidx) { dbi_row_t *row = NULL; if (result->result_state == NOTHING_RETURNED) return -1; if (result->result_state == ROWS_RETURNED) { row = _dbd_row_allocate(result->numfields); if( _get_row_data(result, row, rowidx) == 0 ) return 0; _dbd_row_finalize(result, row, rowidx); } return 1; } int dbd_free_query(dbi_result_t *result) { dbi_conn_t *conn = dbi_result_get_conn(result); ibase_conn_t *iconn = conn->connection; ibase_stmt_t *istmt = result->result_handle; if(istmt != NULL) { isc_dsql_free_statement(iconn->status_vector, &(istmt->stmt), DSQL_drop); free(istmt->osqlda); free(istmt); } istmt = NULL; return 0; } int dbd_goto_row(dbi_result_t *result, unsigned long long rowidx, unsigned long long currowidx) { /* no-op */ return 1; } int dbd_get_socket(dbi_conn_t *conn) { return 0; } /* This implemetation is not the best, * but i cant find a coprrect way of doing this */ const char *dbd_get_encoding(dbi_conn_t *conn) { ibase_conn_t *iconn = conn->connection; if( iconn != NULL) return dbd_encoding_to_iana( iconn->charset ); return firebird_encoding_NONE; } const char* dbd_encoding_to_iana(const char *db_encoding) { register int i = 0; /* loop over all even entries in hash and compare to menc */ while (*firebird_encoding_hash[i]) { if (!strncmp(firebird_encoding_hash[i], db_encoding, strlen(firebird_encoding_hash[i]))) { /* return corresponding odd entry */ return firebird_encoding_hash[i+1]; } i+=2; } /* don't know how to translate, return original encoding */ return db_encoding; } const char* dbd_encoding_from_iana(const char *iana_encoding) { register int i = 0; /* loop over all odd entries in hash and compare to ienc */ while (*firebird_encoding_hash[i+1]) { if (!strcmp(firebird_encoding_hash[i+1], iana_encoding)) { /* return corresponding even entry */ return firebird_encoding_hash[i]; } i+=2; } /* don't know how to translate, return original encoding */ return iana_encoding; } char *dbd_get_engine_version(dbi_conn_t *conn, char *versionstring) { ibase_conn_t *iconn = conn->connection; char *dot; char *start; char *stop; /* Firebird make some easy things hard ... this is one of them ... */ isc_version(&(iconn->db), (isc_callback)_get_firebird_version, NULL); /* version now contains something like: Firebird/linux Intel (access method), version "LI-V1.5.1.4500 Firebird 1.5" */ /* try to locate the version number. Look for the first dot, go back where the number before the dot starts, then walk forward to the last dot or number */ dot = strchr(version, (int)'.'); if (dot) { start = dot-1; while (start>version && isdigit((int)(*(start-1)))) { start--; } stop = start; while (*(stop+1) && (isdigit((int)(*(stop+1))) || *(stop+1)=='.')) { stop++; } if (stop-start < VERSIONSTRING_LENGTH) { /* BAD BAD BAD hack: we chop off the last two digits of the version string as the numeric form can't handle 3+digit sub-versions */ strncpy(versionstring, start, stop-start-1); versionstring[stop-start-1] = '\0'; } } return versionstring; } dbi_result_t *dbd_list_dbs(dbi_conn_t *conn, const char *pattern) { return NULL; } dbi_result_t *dbd_list_tables(dbi_conn_t *conn, const char *db, const char *pattern) { if (pattern == NULL) { return dbd_query(conn, "SELECT RDB$RELATION_NAME FROM RDB$RELATIONS WHERE RDB$SYSTEM_FLAG = 0"); } else { dbi_result_t *res; char *sql_cmd; asprintf(&sql_cmd, "SELECT RDB$RELATION_NAME FROM RDB$RELATIONS WHERE RDB$SYSTEM_FLAG = 0 " " AND RDB$RELATION_NAME LIKE '%s'", pattern); res = dbd_query(conn, sql_cmd); free(sql_cmd); return res; } } size_t dbd_quote_string(dbi_driver_t *driver, const char *orig, char *dest) { const char *worker = orig; register int i = 0, j = 1; size_t length = strlen(orig); strcpy(dest, "'"); for(i = 0; i <= length; i++) { switch(worker[i]) { case '\'': dest[j++] = '\''; break; } dest[j++] = worker[i]; } strcat(dest, "'"); return j; } size_t dbd_conn_quote_string(dbi_conn_t *conn, const char *orig, char *dest) { return dbd_quote_string(conn->driver, orig, dest); } size_t dbd_quote_binary(dbi_conn_t *conn, const unsigned char *orig, size_t from_length, unsigned char **ptr_dest) { unsigned char *temp; size_t len; /* todo: this uses the libdbi builtin encoding routine. firebird may have its own version */ if ((temp = malloc(from_length*2)) == NULL) { return 0; } strcpy((char *)temp, "\'"); if (from_length) { len = _dbd_encode_binary(orig, from_length, temp+1); } else { len = 0; } strcat((char *)temp, "'"); *ptr_dest = temp; return len+2; } dbi_result_t *dbd_query_null(dbi_conn_t *conn, const char unsigned *statement, size_t st_length) { return NULL; } dbi_result_t *dbd_query(dbi_conn_t *conn, const char *statement) { XSQLVAR *var; XSQLDA *sqlda; /* output SQLDA */ isc_stmt_handle stmt = NULL; /* statement handle */ ibase_stmt_t *res; dbi_result_t *result; static char stmt_info[] = { isc_info_sql_stmt_type }; char info_buffer[20]; short l; long statement_type; short num_cols, i; short length, alignment, type, offset; /* long buffer[MAXLEN*8]; */ void* buffer = NULL; unsigned long long numrows = 0, affectedrows = 0; ibase_conn_t *iconn = conn->connection; if (isc_dsql_allocate_statement(iconn->status_vector, &(iconn->db), &stmt)) { if (iconn->status_vector[0] == 1 && iconn->status_vector[1]) { char msg[512]; long* pvector = iconn->status_vector; isc_interprete(msg, &pvector); _dbd_internal_error_handler(conn, msg, DBI_ERROR_CLIENT); } return NULL; } sqlda = (XSQLDA *) malloc(XSQLDA_LENGTH(1)); sqlda->sqln = 1; sqlda->version = 1; if (isc_dsql_prepare(iconn->status_vector, &(iconn->trans), &stmt, 0, (char *)statement, 3, sqlda)) { if (iconn->status_vector[0] == 1 && iconn->status_vector[1]) { char msg[512]; long* pvector = iconn->status_vector; isc_interprete(msg, &pvector); _dbd_internal_error_handler(conn, msg, DBI_ERROR_CLIENT); } free(sqlda); isc_dsql_free_statement(iconn->status_vector, &stmt, DSQL_drop); return NULL; } if (!isc_dsql_sql_info(iconn->status_vector, &stmt, sizeof(stmt_info), stmt_info, sizeof(info_buffer), info_buffer)) { l = (short) isc_vax_integer((char *) info_buffer + 1, 2); statement_type = isc_vax_integer((char *) info_buffer + 3, l); } /* Execute a non-select statement.*/ if (!sqlda->sqld) { if (isc_dsql_execute(iconn->status_vector, &(iconn->trans), &stmt , SQL_DIALECT_V6, NULL)) { if (iconn->status_vector[0] == 1 && iconn->status_vector[1]) { char msg[512]; long* pvector = iconn->status_vector; isc_interprete(msg, &pvector); _dbd_internal_error_handler(conn, msg, DBI_ERROR_CLIENT); } free(sqlda); isc_dsql_free_statement(iconn->status_vector, &stmt, DSQL_drop); return NULL; } /* Commit DDL statements if that is what sql_info says */ if (iconn->trans && (statement_type == isc_info_sql_stmt_ddl)) { if (isc_commit_transaction(iconn->status_vector, &(iconn->trans))) { if (iconn->status_vector[0] == 1 && iconn->status_vector[1]) { char msg[512]; long* pvector = iconn->status_vector; isc_interprete(msg, &pvector); _dbd_internal_error_handler(conn, msg, DBI_ERROR_CLIENT); } free(sqlda); isc_dsql_free_statement(iconn->status_vector, &stmt, DSQL_drop); return NULL; } isc_start_transaction(iconn->status_vector, &(iconn->trans), 1, &(iconn->db), 0, NULL); } /* Process select statements. */ } else { num_cols = sqlda->sqld; numrows = 1; /* Firebird can't say how many rows there is, in this early stage. We need to fetch all rows and count them :( */ /* HACK HACK HACK MH:2008-01-02 */ /* I don't really know how much needs to be allocated here. The Firebird example code and the docs won't tell me. I just know that the previously used hard limit (4096) is not enough to run the test program successfully. I'm assuming here that in the worst case num_cols columns contain strings of the maximum allowed length, and that this is just about sufficient. I may be wasting memory here, or the code just so happens to work for the tests applied. If crashes or strange results are reported, revisit this issue */ buffer = malloc(32768*num_cols); /* Need more room. */ if (sqlda->sqln < num_cols) { sqlda = (XSQLDA *) realloc(sqlda, XSQLDA_LENGTH(num_cols)); sqlda->sqln = num_cols; sqlda->version = 1; if (isc_dsql_describe(iconn->status_vector, &stmt, SQL_DIALECT_V6, sqlda)) { if (iconn->status_vector[0] == 1 && iconn->status_vector[1]) { char msg[512]; long* pvector = iconn->status_vector; isc_interprete(msg, &pvector); _dbd_internal_error_handler(conn, msg, DBI_ERROR_CLIENT); } free(sqlda); isc_dsql_free_statement(iconn->status_vector, &stmt, DSQL_drop); return NULL; } } for (var = sqlda->sqlvar, offset = 0, i = 0; i < num_cols; var++, i++) { length = alignment = var->sqllen; type = var->sqltype & ~1; if (type == SQL_TEXT) alignment = 1; else if (type == SQL_VARYING) { length += sizeof (short) + 1; alignment = sizeof (short); } offset = FB_ALIGN(offset, alignment); var->sqldata = (char *) buffer + offset; offset += length; offset = FB_ALIGN(offset, sizeof (short)); var->sqlind = (short*) ((char *) buffer + offset); offset += sizeof (short); } if (isc_dsql_execute(iconn->status_vector, &(iconn->trans), &stmt, SQL_DIALECT_V6, NULL)) { free(sqlda); if (iconn->status_vector[0] == 1 && iconn->status_vector[1]) { char msg[512]; long* pvector = iconn->status_vector; isc_interprete(msg, &pvector); _dbd_internal_error_handler(conn, msg, DBI_ERROR_CLIENT); } isc_dsql_free_statement(iconn->status_vector, &stmt, DSQL_drop); return NULL; } } res = (ibase_stmt_t *)malloc(sizeof(ibase_stmt_t)); res->stmt = stmt; res->osqlda = sqlda; res->rowcount = 1; result = _dbd_result_create(conn, (void *)res, numrows , affectedrows); _dbd_result_set_numfields(result, res->osqlda->sqld); _get_field_info(result); /* obviously we're not supposed to free this buffer here, but who else is going to do this? */ /* if (buffer) { */ /* free(buffer); */ /* } */ return result; } int dbd_transaction_begin(dbi_conn_t *conn) { if (dbd_query(conn, "SET TRANSACTION") == NULL) { return 1; } else { return 0; } } int dbd_transaction_commit(dbi_conn_t *conn) { if (dbd_query(conn, "COMMIT") == NULL) { return 1; } else { return 0; } } int dbd_transaction_rollback(dbi_conn_t *conn) { if (dbd_query(conn, "ROLLBACK") == NULL) { return 1; } else { return 0; } } int dbd_savepoint(dbi_conn_t *conn, const char *savepoint) { char* query; if (!savepoint) { return 1; } asprintf(&query, "SAVEPOINT %s", savepoint); if (dbd_query(conn, query) == NULL) { free(query); return 1; } else { free(query); return 0; } } int dbd_rollback_to_savepoint(dbi_conn_t *conn, const char *savepoint) { char* query; if (!savepoint) { return 1; } asprintf(&query, "ROLLBACK TO SAVEPOINT %s", savepoint); if (dbd_query(conn, query) == NULL) { free(query); return 1; } else { free(query); return 0; } } int dbd_release_savepoint(dbi_conn_t *conn, const char *savepoint) { char* query; if (!savepoint) { return 1; } asprintf(&query, "RELEASE SAVEPOINT %s", savepoint); if (dbd_query(conn, query) == NULL) { free(query); return 1; } else { free(query); return 0; } } const char *dbd_select_db(dbi_conn_t *conn, const char *db) { ibase_conn_t *iconn = conn->connection; if (!db || !*db) { return NULL; } if (iconn) { isc_commit_transaction(iconn->status_vector, &(iconn->trans)); isc_detach_database(iconn->status_vector, &(iconn->db)); if(conn->current_db) free(conn->current_db); free(iconn); iconn = NULL; } dbi_conn_set_option(conn, "dbname", db); if (dbd_connect(conn)) { return NULL; } return db; } int dbd_geterror(dbi_conn_t *conn, int *err_no, char **errstr) { /* error_message and error_number were already set by calls to _dbd_internal_error_handler */ *err_no = conn->error_number; *errstr = (conn->error_message) ? strdup(conn->error_message):NULL; return 1; } unsigned long long dbd_get_seq_last(dbi_conn_t *conn, const char *sequence) { return return_generator_value(conn, sequence, 0); //0 is currval } unsigned long long dbd_get_seq_next(dbi_conn_t *conn, const char *sequence) { return return_generator_value(conn, sequence, 1); //1 is nextval } int dbd_ping(dbi_conn_t *conn) { char buf[100]; ibase_conn_t *iconn = conn->connection; if (isc_database_info(iconn->status_vector, &(iconn->db), 0, NULL, sizeof(buf), buf)) { free(iconn); if (conn->current_db ) free(conn->current_db); if(! dbd_connect(conn)) return 0; } return 1; } libdbi-drivers-0.9.0/drivers/firebird/utility.c000644 001750 001750 00000026327 11421131252 022404 0ustar00markusmarkus000000 000000 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ /* * dbd_firebird: Firebird/Interbase database support * Copyright (C) 2004-2005, Christian M. Stamgren * http://libdbi-drivers.sourceforge.net * */ #include #include #include #include #include #include /* #include */ #include "dbd_firebird.h" #include "utility.h" /* this is defined by the Makefile and passed via -D */ /* #define DBDIR /usr/local/var/lib/libdbi/firebird */ static const char default_dbdir[] = DBDIR; char version[MAXLEN]; int _dbd_real_connect(dbi_conn_t *conn, char *enc) { char dpb_buffer[256], *dpb, *p, *fb_encoding; char dbase[256]; short dpb_length; char db_fullpath[PATH_MAX]; isc_db_handle db = 0L; /* database handle */ isc_tr_handle trans = 0L; /* transaction handle */ ibase_conn_t *iconn = (ibase_conn_t * ) malloc(sizeof(ibase_conn_t)); ISC_STATUS status_vector[ISC_STATUS_LENGTH]; const char *dbname = dbi_conn_get_option(conn, "dbname"); const char *host = dbi_conn_get_option(conn, "host"); const char *username = dbi_conn_get_option(conn, "username"); const char *password = dbi_conn_get_option(conn, "password"); const char *encoding = dbi_conn_get_option(conn, "encoding"); if(encoding == NULL || *encoding == '\0') encoding = "NONE"; dpb = dpb_buffer; *dpb++ = isc_dpb_version1; *dpb++ = isc_dpb_num_buffers; *dpb++ = 1; *dpb++ = 90; *dpb++ = isc_dpb_user_name; *dpb++ = strlen(username); for (p = (char*)username; *p; *dpb++ = *p++); *dpb++ = isc_dpb_password; *dpb++ = strlen(password); for (p = (char*)password; *p; *dpb++ = *p++); *dpb++ = isc_dpb_lc_ctype; fb_encoding = (char*)dbd_encoding_from_iana(encoding); *dpb++ = strlen(fb_encoding); for (p = fb_encoding; *p; *dpb++ = *p++); dpb_length = dpb - dpb_buffer; dpb = dpb_buffer; /* could be used here, but is tagged deprecated */ /* isc_expand_dpb(&dpb, &dpb_length, */ /* isc_dpb_user_name, username, */ /* isc_dpb_password, password, */ /* isc_dpb_lc_ctype, dbd_encoding_from_iana(encoding), */ /* NULL); */ if (!dbname) { _dbd_internal_error_handler(conn, "no database specified", DBI_ERROR_DBD); return -1; } _firebird_populate_db_string( conn, dbname, db_fullpath ); if (host == NULL || !*host) { snprintf(dbase, 256, "%s", db_fullpath); } else { snprintf(dbase, 256, "%s:%s", host, db_fullpath); } /* printf("dbase went to: %s<<; host: %s, username: %s, passwd: %s, encoding: %s; dbp:%s<<\n", dbase, host, username, password, encoding, dpb); */ /* fflush(stdout); */ isc_attach_database(status_vector, strlen(dbase), dbase, &db, dpb_length, dpb); if (status_vector[0] == 1 && status_vector[1]) { char msg[512]; long* pvector = status_vector; dealocate_iconn( iconn ); isc_interprete(msg, &pvector); _dbd_internal_error_handler(conn, msg, DBI_ERROR_DBD); return -1; } else { isc_start_transaction(status_vector, &trans, 1, &db, 0, NULL); } iconn->trans = trans; iconn->db = db; iconn->charset = strdup(encoding); conn->connection = (void *)iconn; if (dbase) conn->current_db = strdup(dbase); return 0; } char *_firebird_populate_db_string( dbi_conn_t *conn, const char *dbname, char *db_fullpath ) { /* ToDo: make OS-independent */ const char dirsep[] = "/"; const char *dbdir = dbi_conn_get_option(conn, "firebird_dbdir"); if (!dbdir || !*dbdir) { /* use default directory instead */ dbdir = default_dbdir; } bzero(db_fullpath, PATH_MAX); if (dbdir && *dbdir) { strcpy(db_fullpath, dbdir); } if (db_fullpath[strlen(db_fullpath)-1] != *dirsep && db_fullpath[0] != '\0') strcat(db_fullpath, dirsep); strcat(db_fullpath, dbname); return db_fullpath; } void _get_firebird_version( void *ptr, char *vrs ) { static int counter; if( counter == 0 ) { strncpy(version,vrs, MAXLEN-1); ++counter; } return; } /* CORE FIREBIRD DATA FETCHING STUFF */ void _translate_firebird_type(int fieldtype, unsigned short *type, unsigned int *attribs) { unsigned int _type = 0; unsigned int _attribs = 0; switch (fieldtype) { case SQL_TEXT: _type = DBI_TYPE_STRING; _attribs |= DBI_STRING_FIXEDSIZE; case SQL_VARYING: _type = DBI_TYPE_STRING; break; case SQL_SHORT: _type = DBI_TYPE_INTEGER; _attribs |= DBI_INTEGER_SIZE2; break; case SQL_LONG: _type = DBI_TYPE_INTEGER; _attribs |= DBI_INTEGER_SIZE4; break; case SQL_INT64: _type = DBI_TYPE_INTEGER; _attribs |= DBI_INTEGER_SIZE8; break; case SQL_FLOAT: _type = DBI_TYPE_DECIMAL; _attribs |= DBI_DECIMAL_SIZE4; break; case SQL_DOUBLE: _type = DBI_TYPE_DECIMAL; _attribs |= DBI_DECIMAL_SIZE8; break; case SQL_TIMESTAMP: _type = DBI_TYPE_DATETIME; _attribs |= DBI_DATETIME_TIME; _attribs |= DBI_DATETIME_DATE; break; case SQL_TYPE_TIME: _type = DBI_TYPE_DATETIME; _attribs |= DBI_DATETIME_TIME; break; case SQL_TYPE_DATE: _type = DBI_TYPE_DATETIME; _attribs |= DBI_DATETIME_DATE; break; case SQL_BLOB: case SQL_ARRAY: _type = DBI_TYPE_BINARY; break; } *type = _type; *attribs = _attribs; } void _get_field_info(dbi_result_t *result) { unsigned int idx = 0; unsigned short fieldtype; unsigned int fieldattribs; ibase_stmt_t *istmt = result->result_handle; while (idx < result->numfields) { _translate_firebird_type((istmt->osqlda->sqlvar[idx].sqltype & ~1), &fieldtype, &fieldattribs); _dbd_result_add_field(result, idx, istmt->osqlda->sqlvar[idx].sqlname, fieldtype, fieldattribs); idx++; } } int _get_row_data(dbi_result_t *result, dbi_row_t *row, unsigned long long rowidx) { unsigned int curfield = 0; XSQLVAR var; long fetch_stat = 0, blob_stat = 0; ISC_QUAD bid; isc_blob_handle blob_handle = NULL; /* Blob handle. */ char blob_segment[80]; unsigned short actual_seg_len; struct tm times; char date_s[25]; unsigned int sizeattrib; dbi_data_t *data = NULL; ibase_stmt_t *istmt = (ibase_stmt_t *)result->result_handle; ibase_conn_t *iconn = (ibase_conn_t *)result->conn->connection; fetch_stat = isc_dsql_fetch(iconn->status_vector, &(istmt->stmt), SQL_DIALECT_V6, istmt->osqlda); if (fetch_stat != 0) { result->numrows_matched--; return 0; } while (curfield < result->numfields) { var = istmt->osqlda->sqlvar[curfield]; data = &row->field_values[curfield]; /** * If the column holds a NULL value mark it as NULL */ if ( (var.sqltype & 1) && ( *var.sqlind < 0)) { _set_field_flag( row, curfield, DBI_VALUE_NULL, 1); curfield++; continue; } switch ( result->field_types[curfield] ) { case DBI_TYPE_STRING: if(result->field_attribs[curfield] & DBI_STRING_FIXEDSIZE) { data->d_string = strdup(var.sqldata); data->d_string[var.sqllen] = '\0'; /* hack */ row->field_sizes[curfield] = (unsigned long long) var.sqllen; } else { vary_t *vary = NULL; vary = (vary_t *) var.sqldata; data->d_string = malloc(vary->vary_length+1); memcpy(data->d_string, vary->vary_string, vary->vary_length); data->d_string[vary->vary_length] = '\0'; row->field_sizes[curfield] = (unsigned long long) vary->vary_length; } break; case DBI_TYPE_INTEGER: sizeattrib = _isolate_attrib(result->field_attribs[curfield], DBI_INTEGER_SIZE1, DBI_INTEGER_SIZE8); switch (sizeattrib) { case DBI_INTEGER_SIZE1: case DBI_INTEGER_SIZE2: data->d_short = *(short *) var.sqldata; break; case DBI_INTEGER_SIZE3: case DBI_INTEGER_SIZE4: data->d_long = *(int *) var.sqldata; break; case DBI_INTEGER_SIZE8: data->d_longlong = *(ISC_INT64 *) var.sqldata; break; default: break; } break; case DBI_TYPE_DECIMAL: sizeattrib = _isolate_attrib(result->field_attribs[curfield], DBI_DECIMAL_SIZE4, DBI_DECIMAL_SIZE8); switch (sizeattrib) { case DBI_DECIMAL_SIZE4: data->d_float = *(float *) (var.sqldata); break; case DBI_DECIMAL_SIZE8: data->d_double = *(double *) (var.sqldata); break; default: break; } break; case DBI_TYPE_DATETIME: sizeattrib = _isolate_attrib(result->field_attribs[curfield], DBI_DATETIME_DATE, DBI_DATETIME_TIME); if (sizeattrib&DBI_DATETIME_TIME && sizeattrib&DBI_DATETIME_DATE) { isc_decode_timestamp((ISC_TIMESTAMP *)var.sqldata, ×); sprintf(date_s, "%04d-%02d-%02d %02d:%02d:%02d", times.tm_year + 1900, times.tm_mon+1, times.tm_mday, times.tm_hour, times.tm_min, times.tm_sec); } else if (sizeattrib&DBI_DATETIME_TIME) { isc_decode_sql_time((ISC_TIME *)var.sqldata, ×); sprintf(date_s, "%02d:%02d:%02d", times.tm_hour, times.tm_min, times.tm_sec); } else { isc_decode_sql_date((ISC_DATE *)var.sqldata, ×); sprintf(date_s, "%04d-%02d-%02d", times.tm_year + 1900, times.tm_mon+1, times.tm_mday); } data->d_datetime = _dbd_parse_datetime(date_s, sizeattrib); break; case DBI_TYPE_BINARY: bid = *(ISC_QUAD *) var.sqldata; isc_open_blob2( iconn->status_vector, &(iconn->db), &(iconn->trans), &blob_handle, &bid, 0, NULL ); blob_stat = isc_get_segment( iconn->status_vector, &blob_handle, &actual_seg_len, sizeof(blob_segment), blob_segment ); data->d_string = malloc((size_t)actual_seg_len); memcpy(data->d_string, blob_segment, actual_seg_len); row->field_sizes[curfield] = actual_seg_len; while (blob_stat == 0 || iconn->status_vector[1] == isc_segment) { blob_stat = isc_get_segment(iconn->status_vector, &blob_handle, &actual_seg_len, sizeof(blob_segment), blob_segment); if (!actual_seg_len) { break; } data->d_string = realloc(data->d_string, row->field_sizes[curfield] + actual_seg_len); memcpy(data->d_string+row->field_sizes[curfield], blob_segment, actual_seg_len); row->field_sizes[curfield] += actual_seg_len; } isc_close_blob(iconn->status_vector, &blob_handle); /* terminate encoded blob string */ data->d_string = realloc(data->d_string, (row->field_sizes[curfield])+1); data->d_string[row->field_sizes[curfield]] = '\0'; row->field_sizes[curfield] = _dbd_decode_binary(data->d_string, data->d_string); break; default: break; } curfield++; } if( fetch_stat != 100L ) { result->rows = realloc(result->rows, (sizeof(dbi_row_t *) * (result->numrows_matched+1))); result->numrows_matched++; } return result->numrows_matched; } unsigned long long return_generator_value(dbi_conn_t *conn, const char *sequence, int type) { unsigned long long retval = 0; char *sql_cmd = NULL; dbi_result_t *result; ibase_stmt_t *istmt = NULL; ibase_conn_t *iconn = conn->connection; asprintf(&sql_cmd, "SELECT GEN_ID( %s ,%d ) FROM RDB$DATABASE",sequence, type ); result = dbd_query(conn, sql_cmd); istmt = result->result_handle; if(! isc_dsql_fetch(iconn->status_vector, &(istmt->stmt), SQL_DIALECT_V6, istmt->osqlda) ) { retval = *(long *) istmt->osqlda->sqlvar[0].sqldata; } dbi_result_free(result); free(sql_cmd); return retval; } void dealocate_iconn( ibase_conn_t *iconn ) { if( iconn != NULL) { if(iconn->charset) free ( (void *)iconn->charset ); free(iconn); iconn = NULL; } return; } libdbi-drivers-0.9.0/drivers/firebird/dbd_firebird.h000644 001750 001750 00000016761 10764325317 023326 0ustar00markusmarkus000000 000000 #ifndef __DBD_FIREBIRD_H #define __DBD_FIREBIRD_H typedef struct ibase_conn_s { isc_db_handle db; /* database handle */ isc_tr_handle trans; /* transaction handle */ ISC_STATUS status_vector[ISC_STATUS_LENGTH]; const char *charset; } ibase_conn_t; typedef struct ibase_stmt_s { XSQLDA *osqlda; /* output SQLDA */ isc_stmt_handle stmt; /* statement handle */ unsigned long long rowcount; } ibase_stmt_t; typedef struct vary_s { short vary_length; char vary_string[1]; } vary_t; #define MAXLEN 1024 #ifndef ISC_INT64_FORMAT # define ISC_INT64_FORMAT "ll" #endif #define FIREBIRD_RESERVED_WORDS \ { \ "ACTION", \ "ACTIVE", \ "ADD", \ "ADMIN", \ "AFTER", \ "ALL", \ "ALTER", \ "AND", \ "ANY", \ "ARE", \ "AS", \ "ASC", \ "ASCENDING", \ "AT", \ "AUTO", \ "AUTODDL", \ "AVG", \ "BASED", \ "BASENAME", \ "BASE_NAME", \ "BEFORE", \ "BEGIN", \ "BETWEEN", \ "BLOB", \ "BLOBEDIT", \ "BUFFER", \ "BY", \ "CACHE", \ "CASCADE", \ "CAST", \ "CHAR", \ "CHARACTER", \ "CHAR_LENGTH", \ "CHARACTER_LENGTH", \ "CHECK", \ "CHECK_POINT_LEN", \ "CHECK_POINT_LENGTH", \ "CLOSE", \ "COLLATE", \ "COLLATION", \ "COLUMN", \ "COMMIT", \ "COMMITTED", \ "COMPILETIME", \ "COMPUTED", \ "CONDITIONAL", \ "CONNECT", \ "CONSTRAINT", \ "CONTAINING", \ "CONTINUE", \ "COUNT", \ "CREATE", \ "CSTRING", \ "CURRENT", \ "CURRENT_DATE", \ "CURRENT_TIME", \ "CURRENT_TIMESTAMP", \ "DATABASE", \ "DATE", \ "DAY", \ "DB_KEY", \ "DEBUG", \ "DEC", \ "DECIMAL", \ "DECLARE", \ "DEFAULT", \ "DELETE", \ "DESCENDING", \ "DESCRIBE", \ "DESCRIPTOR", \ "DISCONNECT", \ "DISPLAY", \ "DISTINCT", \ "DO", \ "DOMAIN", \ "DOUBLE",\ "DROP",\ "ECHO", \ "EDIT", \ "ELSE", \ "END", \ "ENTRY_POINT", \ "ESCAPE", \ "EVENT", \ "EXCEPTION", \ "EXEC", \ "EXECUTE", \ "EXISTS", \ "EXIT", \ "EXTERN", \ "EXTERNAL", \ "EXTRACT", \ "FETCH", \ "FILE", \ "FILTER", \ "FLOAT", \ "FOR", \ "FOREIGN", \ "FOUND", \ "FREE_IT", \ "FROM", \ "FULL", \ "FUNCTION", \ "GDSCODE", \ "GENERATOR", \ "GEN_ID", \ "GLOBAL", \ "GOTO", \ "GRANT", \ "GROUP", \ "GROUP_COMMIT_WAIT", \ "GROUP_COMMIT_WAIT_TIME", \ "HAVING", \ "HELP", \ "HOUR", \ "IF", \ "IMMEDIATE", \ "IN", \ "INACTIVE", \ "INDEX", \ "INDICATOR", \ "INNER", \ "INPUT", \ "INPUT_TYPE", \ "INSERT", \ "INT", \ "INTEGER", \ "INTO", \ "IS", \ "ISOLATION", \ "ISQL", \ "JOIN", \ "KEY", \ "LC_MESSAGES",\ "LC_TYPE", \ "LEFT", \ "LENGTH", \ "LEV", \ "LEVEL", \ "LIKE", \ "LOGFILE", \ "LOG_BUF_SIZE", \ "LONG", \ "MANUAL", \ "MAX", \ "MAXIMUM", \ "MAXIMUM_SEGMENT", \ "MAX_SEGMENT", \ "MERGE", \ "MESSAGE", \ "MIN", \ "MINIMUM", \ "MINUTE", \ "MODULE_NAME", \ "MONTH", \ "NAMES", \ "NATIONAL", \ "NATURAL", \ "NCHAR", \ "NO", \ "NOAUTO", \ "NOT", \ "NULL", \ "NUM_LOG_BUFS", \ "NUM_LOG_BUFFERS", \ "NUMERIC", \ "OCTET_LENGTH", \ "OF", \ "ON", \ "ONLY", \ "OPEN", \ "OPTION", \ "OR", \ "ORDER", \ "OUTER", \ "OUTPUT", \ "OUTPUT_TYPE", \ "OVERFLOW", \ "PAGE", \ "PAGELENGTH", \ "PAGES", \ "PAGE_SIZE", \ "PARAMETER", \ "PASSWORD", \ "PLAN", \ "POSITION", \ "POST_EVENT", \ "PRECISION", \ "PREPARE", \ "PRIMARY", \ "PRIVILEGES", \ "PROCEDURE", \ "PUBLIC", \ "QUIT", \ "RAW_PARTITIONS", \ "RDB$DB_KEY", \ "READ", \ "REAL", \ "RECORD_VERSION", \ "REFERENCES", \ "RELEASE", \ "RESERV", \ "RESERVING", \ "RESTRICT", \ "RETAIN", \ "RETURN", \ "RETURNING_VALUES", \ "RETURNS", \ "REVOKE", \ "RIGHT", \ "ROLE", \ "ROLLBACK", \ "RUNTIME", \ "SCHEMA", \ "SECOND", \ "SELECT", \ "SET", \ "SHADOW", \ "SHARED", \ "SHELL", \ "SHOW", \ "SINGULAR", \ "SIZE", \ "SMALLINT", \ "SNAPSHOT", \ "SOME", \ "SORT", \ "SQL", \ "SQLCODE", \ "SQLERROR", \ "SQLWARNING", \ "STABILITY", \ "STARTING", \ "STARTS", \ "STATEMENT", \ "STATIC", \ "STATISTICS", \ "SUB_TYPE", \ "SUM", \ "SUSPEND", \ "TABLE", \ "TERMINATOR", \ "THEN", \ "TIME", \ "TIMESTAMP", \ "TO", \ "TRANSACTION", \ "TRANSLATE", \ "TRANSLATION", \ "TRIGGER", \ "TRIM", \ "TRUE", \ "TYPE", \ "UNCOMMITTED", \ "UNION", \ "UNIQUE", \ "UPDATE", \ "UPPER", \ "USER", \ "USING", \ "VALUE", \ "VALUES", \ "VARCHAR", \ "VARIABLE", \ "VARYING", \ "VERSION", \ "VIEW", \ "WAIT", \ "WEEKDAY", \ "WHEN", \ "WHENEVER", \ "WHERE", \ "WHILE", \ "WITH", \ "WORK", \ "WRITE", \ "YEAR", \ "YEARDAY", \ NULL \ } #define FIREBIRD_CUSTOM_FUNCTIONS { \ "isc_add_user", \ "isc_array_get_slice", \ "isc_array_lookup_bounds", \ "isc_array_lookup_desc", \ "isc_array_put_slice", \ "isc_array_set_desc", \ "isc_attach_database", \ "isc_blob_default_desc", \ "isc_blob_gen_bpb", \ "isc_blob_info", \ "isc_blob_lookup_desc", \ "isc_blob_set_desc", \ "isc_cancel_blob", \ "isc_cancel_events", \ "isc_close_blob", \ "isc_commit_retaining", \ "isc_commit_transaction", \ "isc_create_blob2", \ "isc_create_database", \ "isc_database_info", \ "isc_decode_sql_data", \ "isc_decode_sql_time", \ "isc_decode_timestamp", \ "isc_delete_user", \ "isc_detach_database", \ "isc_drop_database", \ "isc_dsql_allocate_statement", \ "isc_dsql_alloc_statement2", \ "isc_dsql_describe", \ "isc_dsql_describe_bind", \ "isc_dsql_execute", \ "isc_dsql_execute2", \ "isc_dsql_execute_immediate", \ "isc_dsql_exec_immed2", \ "isc_dsql_fetch", \ "isc_dsql_free_statement", \ "isc_dsql_prepare", \ "isc_dsql_set_cursor_name", \ "isc_dsql_sql_info", \ "isc_encode_sql_date", \ "isc_encode_sql_time", \ "isc_encode_timestamp", \ "isc_event_block", \ "isc_event_counts", \ "isc_expand_dpb", \ "isc_get_segment", \ "isc_interprete", \ "isc_modify_user", \ "isc_open_blob2", \ "isc_prepare_transaction", \ "isc_prepare_transaction2", \ "isc_print_sqlerror", \ "isc_print_status", \ "isc_put_segment", \ "isc_que_events", \ "isc_rollback_retaining", \ "isc_rollback_transaction", \ "isc_service_attach", \ "isc_service_detach", \ "isc_service_query", \ "isc_service_start", \ "isc_sqlcode", \ "isc_sql_interprete", \ "isc_start_multiple", \ "isc_start_transaction", \ "isc_transaction_info", \ "isc_vax_integer", \ "isc_version", \ "isc_wait_for_event", \ NULL} #endif /* __DBD_FIREBIRD_H */ libdbi-drivers-0.9.0/drivers/firebird/utility.h000644 001750 001750 00000001273 10301121700 022373 0ustar00markusmarkus000000 000000 #ifndef __UTILITY_H #define __UTILITY_H #include #include #include void _get_firebird_version( void *ptr, char *version ); int _dbd_real_connect(dbi_conn_t *conn, char *enc); char *_firebird_populate_db_string( dbi_conn_t *conn, const char *dbname, char *db_fullpath ); void _translate_firebird_type(int field_type, unsigned short *type, unsigned int *attribs); void _get_field_info(dbi_result_t *result); int _get_row_data(dbi_result_t *result, dbi_row_t *row, unsigned long long rowidx); unsigned long long return_generator_value(dbi_conn_t *conn, const char *sequence, int type); void dealocate_iconn( ibase_conn_t *iconn ); #endif /* __UTILITY_H */ libdbi-drivers-0.9.0/drivers/firebird/firebird_charsets.h000644 001750 001750 00000005740 10301135273 024367 0ustar00markusmarkus000000 000000 #ifndef __FIREBIRD_CHARSET_H #define __FIREBIRD_CHARSET_H static const char firebird_encoding_hash[][20] = { /* from , to */ "NONE","US-ASCII", "ASCII","US-ASCII", "ASCII7", "US-ASCII", "USASCII", "US-ASCII", "DOS437", "US-ASCII", "DOS_437", "", "BIG_5", "Big5", "BIG5, , ", "Big5", "WIN_950", "Big5", "DOS_950", "Big5", "DOS737", "latin-greek", "DOS_737", "latin-greek", "DOS775", "ISO-8859-7", "DOS850", "ISO-8859-1", "LATIN1", "ISO-8859-1", "DOS_850", "ISO-8859-1", "DOS852", "ISO-8859-2", "LATIN2", "ISO-8859-2", "DOS_852", "ISO-8859-2", "DOS857", "IBM857", "DOS_857", "IBM857", "DOS858", "", //Latin1 + euro "DOS_858", "", //Latin1 + euro "DOS860", "PT", "DOS_860", "PT", "DOS861", "ISO-8859-1", //Icelandic ? "DOS_861", "ISO-8859-1", //Icelandic ? "DOS862", "ISO-8859-8", "DOS_862", "ISO-8859-8", "DOS863", "ISO646-FR", "DOS_863", "ISO646-FR", "DOS864", "ISO-8859-6", "DOS_864", "ISO-8859-6", "DOS865", "ISO_8859-1", "DOS_865", "ISO_8859-1", "DOS866", "", // Russian "DOS_866", "", // Russian "DOS869", "ISO-8859-7", "DOS_869", "ISO-8859-7", "EUCJ_0208", "", "EUCJ", "ISO-10646-J-1", "GB_2312", "", //simplified Chinese (Hong Kong, PRC) "DOS_936", "", //simplified Chinese (Hong Kong, PRC) "WIN_936", "", //simplified Chinese (Hong Kong, PRC) "GB2312", "", //simplified Chinese (Hong Kong, PRC) "ISO8859_1", "ISO-8859-1", "ISO8859_2", "ISO-8859-2", "ISO-8859-2", "ISO-8859-2", "LATIN2", "ISO-8859-2", "ISO88592", "ISO-8859-2", "ISO8859_3", "ISO-8859-3", "ISO-8859-3", "ISO-8859-3", "LATIN3", "ISO-8859-3", "ISO88593", "ISO-8859-3", "ISO8859_4", "ISO-8859-4", "ISO-8859-4", "ISO-8859-4", "LATIN4", "ISO-8859-4", "ISO88594", "ISO-8859-4", "ISO8859_6", "ISO-8859-6", "ISO-8859-6", "ISO-8859-6", "ISO8859_7", "ISO-8859-7", "ISO-8859-7", "ISO-8859-7", "ISO88597", "ISO-8859-7", "ISO8859_8", "ISO-8859-8", "ISO-8859-8", "ISO-8859-8", "ISO88598", "ISO-8859-8", "ISO8859_9", "ISO-8859-9", "ISO-8859-9", "ISO-8859-9", "LATIN5", "ISO-8859-9", "ISO88599", "ISO-8859-9", "ISO8859_13", "ISO-8859-13", "ISO-8859-13", "ISO-8859-13", "LATIN7", "ISO-8859-13", "ISO885913", "ISO-8859-13", "KSC_5601", "iso-ir-149", "OS_949", "iso-ir-149", "WIN_949", "iso-ir-149", "KSC5601", "iso-ir-149", "OCTETS", "", "BINARY", "", "SJIS_0208", "Shift_JIS", "SJIS", "Shift_JIS", "UNICODE_FSS", "UTF-8", "SQL_TEXT", "UTF-8", "UTF_FSS", "UTF-8", "UTF-8", "UTF-8", "UTF8", "UTF-8", "WIN1250", "windows-1250", "WIN_1250", "windows-1250", "WIN1251", "windows-1251", "WIN_1251", "windows-1251", "WIN1252", "windows-1252", "WIN_1252", "windows-1252", "WIN1253", "windows-1253", "WIN_1253", "windows-1253", "WIN1254", "windows-1254", "WIN_1254", "windows-1254", "WIN1255", "windows-1255", "WIN_1255", "windows-1255", "WIN1256", "windows-1256", "WIN_1256", "windows-1256", "WIN1257", "windows-1257", "WIN_1257", "windows-1257", "", "" }; #endif /* __FIREBIRD_CHARSET_H */ libdbi-drivers-0.9.0/drivers/firebird/dbd_firebird.sgml000644 001750 001750 00000026421 10763200403 024016 0ustar00markusmarkus000000 000000 ]> firebird driver manual A libdbi driver providing connectivity to Firebird and Interbase databases. Christian Stamgren
    christian@stamgren.com
    Markus Hoenicka
    mhoenicka@users.sourceforge.net
    Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is included in . 0.1 2008-01-02
    Preface libdbi is a database abstraction layer written in C. It implements a framework that can utilize separate driver libraries for specific database servers. The libdbi-drivers project provides the drivers necessary to talk to the supported database servers. This manual provides information about the Firebird/Interbase driver. The manual is intended for programmers who write applications linked against libdbi and who want their applications to work with Firebird or Interbase database engines. Questions and comments about the Firebird/Interbase driver should be sent to the libdbi-drivers-devel mailing list. Visit the libdbi-drivers-devel list page to subscribe and for further information. Questions and comments about the libdbi library should be sent to the appropriate libdbi mailing list. The Firebird/Interbase driver was developed by Christian Stamgren. Introduction Firebird is the free cousin of the InterBase SQL database engine, which has a long and winding history related to the repeated reinventions of the Borland, then Inprise, then Borland/Inprise, then again Borland company. Although the internal name of the driver is "firebird", it is supposed to work with the InterBase products as well. Installation This chapter describes the prerequisites and the procedures to build and install the firebird driver from the sources. Prerequisites The following packages have to be installed on your system: libdbi This library provides the framework of the database abstraction layer which can utilize the firebird driver to perform database operations. The download page as well as the mailing lists with bug reports and patches are accessible at sourceforge.net/projects/libdbi. The current version of the firebird driver requires libdbi version 0.8.x. libfbembed This library implements the client API for Firebird/InterBase databases which provides access both locally and through the network. Find the most recent release at www.firebirdsql.org. The current version of the firebird driver was tested with Firebird versions 1.5.3 and 2.0.3 and should work with all recent releases. Build and install the firebird driver First you have to unpack the libdbi-drivers archive in a suitable directory. Unpacking will create a new subdirectory libdbi-drivers-X.Y where "X.Y" denotes the version: $ tar -xzf libdbi-drivers-X.Y.tar.gz The libdbi-drivers project consists of several drivers that use a common build system. Therefore you must tell configure explicitly that you want to build the firebird driver (you can list as many drivers as you want to build): $ cd libdbi-drivers $ ./configure --with-firebird Run ./configure --help to find out about additional options. Then build the driver with the command: $ make If the command results in error messages about the Makefile syntax, you may have to explicitly invoke gmake, the GNU version of make, on your system. Then install the driver with the command (you'll need root permissions to do this): $ make install To test the operation of the newly installed driver, use the command: $ make check This command creates and runs a test program that performs a few basic input and output tests. The program will ask for an administrator username and password. Default Firebird installations usually call the database superuser "sysdba" so this user is always a good start. Be sure to provide the name of a database which does not already exist (avoid 'test' which is used on many systems). To keep file permission problems out of this test (more on this below), you may prefer to keep the hostname empty and to specify a directory with write access. If for some reason you need to re-create the autoconf/automake-related files, try running ./autogen.sh. Driver options Your application has to initialize libdbi drivers by setting some driver options with the dbi_conn_set_option() and the dbi_conn_set_option_numeric() library functions. The firebird driver supports the following general options: host The hostname or IP address of the Firebird database server. Use "localhost" or the real hostname of your local computer to connect to a Firebird server running on the local machine through the network (this is the only way to connect to a local super-server). Do not set the host option if you want to work with a local database, without going through a server. username The name of the user accessing the database. password The password of the user accessing the database. dbname The name of the database used for the initial connection. If your program must be able to connect to a fresh Firebird installation, use the test database libdbitest created by make check. encoding The IANA name of a character encoding which is to be used as the connection encoding. Input and output data will be silently converted from and to this character encoding, respectively. If you set this option to "auto", the connection encoding will be the same as the default encoding of the database. In addition, the following firebird-specific options are supported: firebird_dbdir This is the directory that holds the Firebird database files. Depending on the settings of the option, this may refer to a directory on a local or on a remote machine. The ownership and the permissions must match the mode of access. If you create or access a file locally (i.e. with not set), the account you're logged in needs write and execute permissions. If you set the , the account your server runs in must have write and execute permissions. This is true even if you connect to your own machine via localhost. Default server installations use the "firebird" account. The database directory should then be owned by firebird:firebird with write and execute permissions for both the user and the group. It should then be sufficient to add yourself to the firebird group to gain access to the database directory. If this option is not specified, a compile-time default directory will be used. Needless to say, this is going to work only if you work on localhost. By default, this directory (usually /usr/local/var/lib/libdbi/firebird) has read and write permissions for everyone with the sticky bit set. If this is not suitable for your application, use a custom directory with your preferred permissions instead. Peculiarities you should know about This chapter lists known peculiarities of the firebird driver. This includes Firebird features that differ from what you know from the other database servers supported by libdbi, and it includes features and misfeatures introduced by the firebird driver. It is the intention of the libdbi developers to reduce the number of misfeatures in future releases if possible. Firebird (mis)features To determine the number of matches, all results have to be retrieved first. This is very inefficient and may provide a bottleneck for large applications. DATETIME and TIME do not appear to support timezones char, unsigned char, long long, and unsigned long long types are not supported. &freedoc-license;
    libdbi-drivers-0.9.0/drivers/firebird/dbd_firebird.pdf000644 001750 001750 00000472241 11530035750 023636 0ustar00markusmarkus000000 000000 %PDF-1.4 1 0 obj << /S /GoTo /D (1.0) >> endobj 4 0 obj (firebird driver manual) endobj 5 0 obj << /S /GoTo /D (2.0) >> endobj 8 0 obj (Table of Contents) endobj 9 0 obj << /S /GoTo /D (3.0) >> endobj 12 0 obj (Preface) endobj 13 0 obj << /S /GoTo /D (4.0) >> endobj 16 0 obj (Chapter 1. Introduction) endobj 17 0 obj << /S /GoTo /D (5.0) >> endobj 20 0 obj (Chapter 2. Installation) endobj 21 0 obj << /S /GoTo /D (5.1.1) >> endobj 24 0 obj (2.1. Prerequisites) endobj 25 0 obj << /S /GoTo /D (5.2.1) >> endobj 28 0 obj (2.2. Build and install the firebird driver) endobj 29 0 obj << /S /GoTo /D (6.0) >> endobj 32 0 obj (Chapter 3. Driver options) endobj 33 0 obj << /S /GoTo /D (7.0) >> endobj 36 0 obj (Chapter 4. Peculiarities you should know about) endobj 37 0 obj << /S /GoTo /D (7.3.1) >> endobj 40 0 obj (4.1. Firebird \(mis\)features) endobj 41 0 obj << /S /GoTo /D (8.0) >> endobj 44 0 obj (Appendix A. GNU Free Documentation License) endobj 45 0 obj << /S /GoTo /D [46 0 R /Fit ] >> endobj 48 0 obj << /Length 389 /Filter /FlateDecode >> stream xÚRKoÔ0¾ï¯ð1{Èà¿’[Q'ö¼‰»µÚ8(ɮĿg줥ÀP¤d<Î÷˜ É ‡à4‘Ô¢vRœøêý·_´µ@-®ÜÖF9h²¢~Iòæ°{uKZ׊Ã@ç8r(lÓYËÉþkõMJšÂ1N{’U¿¯É5U?ÅK˜Öxði²:ûÇý÷ç•Q‚5Éœµu`1¢ÖÊH*œ¯Wèc<öÇø/å¢5æ×%ö1Öt7¦º%^âòsÍ,cÖJ¶$j²Ð«ŠÄmüÛ´O[ð1-a:ú9lÊ~ñù4Ãsè€Ðè\@cµeÿ¤W¥šÂþö~Šó¹ôBñeñÃi é7Bk eÇžœc> endobj 49 0 obj << /D [46 0 R /XYZ 71.731 741.2204 null] >> endobj 50 0 obj << /D [46 0 R /XYZ 71.731 706.3512 null] >> endobj 51 0 obj << /D [46 0 R /XYZ 71.731 706.3512 null] >> endobj 2 0 obj << /D [46 0 R /XYZ 431.9165 688.2669 null] >> endobj 47 0 obj << /Font << /F24 54 0 R >> /ProcSet [ /PDF /Text ] >> endobj 58 0 obj << /Length 719 /Filter /FlateDecode >> stream xÚUKsÛ ¾ûWè(ÍDR{JÒ:I§ít·—¶=°ÍÄÂNüï ÉŽä4̲,ß¾¾•PÍš˜%Ec˜õzƒ…9º o’p†ˆÙœ9³„‚"Ç$ˆOA®g“Ë)NƒÄœÍæ'RäyÌš_áo±bW†aŘæa£øŽ)'¯K!nËÕ;§¸rËŠWMÅÇö›´;Þp±pêZ ÁjÍw\ïFK·NùÐ})¼p/4SUÙ2ï¦Ô¥Ýµ ú3ût9MðIn0ˆE†ÒCZ•õ’Áðf©x«¹Iâ°}Ðåz¡˜ß9GFøRªÇmëä;ɯËÞ‡©-…ÈûÈÈaF>¾1µæmË¥‡ãa¡J¸‡>¤iÖZnl÷É §jLdŠW6ó­f}H—R9y->÷yèe‡ÞÈz»fB»ÝV4Lu&Ãmíåüxfò™|œõ¬Iå4 æ9K¼¸·ŠOÍÔJÒ“Ò$¤0vÑl…n¿þpþ§Q–…*JhÈ||¥îë÷™×L´£@ÓŒŠìßöVg=íáÍê;ò3B…L{Šò•T6.ãæ µÃã鿦ÈIú^­JÝõdgÕ§x›mµâí²cGµônªº=ȹ~²”)UwfÁ¤éø¡fïò‰ë¥“„gÚ½ˆRëgæªa¾gʃ?)Ú‹×îM•:¾‘Ö‹ÛÌ" Cf5Ϻ»ÞÎ纬0¶rƒ} ÜÍ«Á¨Œ(ìÊëiòb渨WÛ¦++CaHA’ʘŠMÿΑ¨·ŠOÍÆ$£Ù”®6&þÜ%3 !%ÀdŸ¼BgõV#4¹7cŒh hž$vH¥L¿3Ë?róμ¤Ú÷ÝÊ$}ÅÚÁÈ€!Ìcˆbˆ‡ ûÏqš#Rüÿwí/ʺ÷endstream endobj 57 0 obj << /Type /Page /Contents 58 0 R /Resources 56 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 55 0 R /Annots [ 63 0 R 67 0 R ] >> endobj 63 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [366.6224 628.9096 481.2157 638.0313] /Subtype /Link /A << /S /GoTo /D (COPYING-FDL) >> >> endobj 67 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [206.3371 603.0068 247.5105 612.1284] /Subtype /Link /A << /S /GoTo /D (COPYING-FDL) >> >> endobj 59 0 obj << /D [57 0 R /XYZ 71.731 741.2204 null] >> endobj 68 0 obj << /D [57 0 R /XYZ 71.731 550.3114 null] >> endobj 56 0 obj << /Font << /F24 54 0 R /F32 62 0 R /F34 66 0 R >> /ProcSet [ /PDF /Text ] >> endobj 72 0 obj << /Length 13926 /Filter /FlateDecode >> stream xڕͲGz]çý–ÏÿÏв,…Gè‘ä›DK³åðÛ».nåÎswžüÖVhÐÍfj­Be³ €g¯³·[ÿoÿîº_®Çõ_NûåpØÞýú·?íÞýËú§þñOûíÈérYçýeýƒ'ö§óñºÜo‡Ë»Ÿ!÷óŸþÃ?Nï»år¾ßýüצºÜ×S·ÝíÝÏ¿ýÓûŸ?Üvïùˇýîýï?üt¸ÞÞùëë¿þ§/Ÿ¿üüýÛ‡ÿùóýÓþY†¹Ü–Ýn·úLÛ™Ÿýx¢ãõÝ}¹_Ö§}x vèåþüõÃþöþã_ùõ£‹÷»ãr9î¥z·œ®·ÓäUíw§e¿»_èÁtîÍ£-ã]–Ënw|ú@OäÛi”;u"¿/»ûîžÊ·Ó(wêsù~¿œoûK(o§I>P'òÓ²»©|;r§Nä—å|9¤¯½F¹S'òõvÎÇøµo§QîÔçòÃz;§SúÚÛi’Ô‰|½ã)}íí4Ê:‘¯·s8ŸSùvåNÈ×ÛÙ_â×¾F¹SŸËëíì.éko§I>P'òãr¿_Ó×ÞN£Ü©ùe9Ýnéko§QîÔ‰ü¶Ü¯·[*ßN£Ü©ÏåëÏ"N—{úÚÛi’Ô‰|½Ë.}íí4Ê:‘¯·sÞ¥¯½F¹S'òõvNûøµo§QîÔçòóz;ÇÃ>”·Ó$¨ùz;‡CúÚÛi”;u"_ogL_{;r§NäëíìNñkßN£Ü©Ïå—ýr¼ŸÒ×ÞN“| NäÇåv;ŸRùvåNÈ/ËñzI_{;r§Nä·å¶IåÛi”;õ¹|ý%×ñ|M_{;Mò:‘¯·sº¥¯½F¹S'òõvŽ·k*ßN£Ü©ùz;‡{üÚ·Ó(wêsùm½Ã.}íí4ÉêD¾ÞÎ~—¾övåNÈ×ÛÙíÓ×ÞN£Ü©ùm¹ÞÓŸÈl‡QmÌçæ¿ÁsHßy;Mî:‘—ëõ˜¾óvåNÈ/Ëá»_£Ú˜óz3çSüηÓèvêSùú—ár8Ã߇ÒiÔ‰|½šô·$ÚaTsb^oæp¹¦êí4º:‘¯W³þ½'•o§QîÔçòýz5é¯SÚaR;sb>.—û-½îvÝNÈ/ËþvOßy;r§Nä·å¿ògQü–ø\{Ø/ûë.}áí4©êD¾ÞËeŸ¾ðvåNÈ×{9ïï©|;r§NäëÝœñkßN£Ü©ÏåÇõvŽÇôµ·Ó$¨ùz;‡cúÚÛi”;u"_ogJ_{;r§Näëíì·T¾F¹SŸËOûew?§¯½&ù@ÈËyýåc*ßN£Ü©ùeÙ]¯éko§QîÔ‰ü¶œ/×øµo§QîÔçòóz;/ÿp6“·Ó$¨ùz;§ô(:r§Näëíïéko§QîÔ‰|½ã.~íÛi”;õ¹ü²ÞÎaŸ¾övšäu"_og¿OÓN£Ü©ùz;»CúÚÛi”;u"¿-§û1~íÛi”;õ¹üº[î·cúÚÛi’Ô‰ü¸œ®§ôµ·Ó(wêD~^ÿ_ÎûT¾F¹S'òõvÎçøµo§QîÔçòÛz;§KúÚÛi’Ô‰|½ã5}íí4Ê:‘¯·³¾¥T¾F¹S'òõvö·S*ßN£Ü©Ïå÷õvv÷ôµ·Ó$¨ùqYÿÞ—¾övåNÈÏËí¾K_{;r§Nä·åxÛǯ};r§>•w»åv݇¿ ¥Ó ©ùz;—Ã)•o§QîÔ‰|½óqŸÊ·Ó(wêD¾ÞÎú?F©|;r§>—ï×Û9žÒ×ÞN“| Näëí¤?‹j‡Qm̉y½šý9}çí4º:‘¯W³»Äï|;r§>—vËõžþÀ·Ã¤væÄ|\·k¬ÞN£Û©ùy¹^oÇT¾F¹S'òÛrH?yÖ£Ú˜ÏÍÇõfÎñu·Óä¨ùz5çô3Å:r§NäëÕ¤Gi‡Qm̉y½™cúbF·SŸËOëÕé;o§I>P'òõjö±ûõ0ª91¯7³KÿÑN£Û©ùmÙßOñ{;r§>—ŸwËå–~šX§I>P'ò㲿žÓ×ÞN£Ü©ùy¹\.éko§QîÔ‰|½sü¿éí4Êú\~YoçtM_{;Mò:‘¯·sL?M¬Ó(wêD¾ÞÎá–¾övåNÈ×ÛÙßã×¾F¹SŸË¯ëíìÓOë4ÉêD¾ÞÎ.èè4Ê:‘Ÿ—ó=ý4±N£Ü©ùúgo‡øµo§QîÔçòÛn9_ÓŽN“| NäÇewI?M¬Ó(wêD¾ÞÎ9èè4Ê:‘¯ö”~šX§QîÔçòûz;Çt £Ó$¨ùz;‡t £Ó(wêD¾ÞÎ>ý\ŠN£Ü©ùËŸ½Æ¯};r§>•Ÿv»åtO?M¬Ó ©ùa¹ßÒŽN£Ü©ùy9]ÓŽN£Ü©ùu¹_wñkßN£Ü©Ïåûõv.éßtšäu"_oçœ~šX§QîÔ‰|½S:ÐÑi”;u"_oçxˆ_ûvåN}.?¬·sH?P¬Ó$¨ùz;ûôwDtåNÈ×ÛÙ¥Ÿ)Öi”;u"¿.·û9~íÛi”;õ¹ü¸[Ž·t £Ó$¨ùa¹]Óë4Ê:‘Ÿ—ã%èè4Ê:‘¯·“þóòvÕÆ|n>­WsJ×9:Mî:‘¯WsL×9:r§NäëÕSõ³(~Kœh×k9ìâ¾FµSŸËÏë½ìÓßóÔi’Ô‰|½—ô·ÚaTsb>/‡{ºËÑit;u"¿.×[üß´våN}.¿ì–Cü?jÛaR;sb>,×KúbF·S'òõjÎé.G§QîÔ‰|½šüþzÕÆ|n¾®7sL?M¬Óä¨ùz5‡t—£Ó(wêD¾^Í>ý4±N£Ü©ùz9»[üÚ·Ó(wêsùm·ìïé4G§I>P'òÃr¹¥Ÿ&Öi”;u"?/û[:ÐÑi”;u"¿.—kúibF¹SŸËïëí\ÒŽN“| NäëíœÓŽN£Ü©ùz;§ôÓÄ:r§NäëíñkßN£Ü©OåçÝz;‡ôÓÄ: ò‘:‘¯·³O::r§NäëíìÒŽN£Ü©ùu9ß/ñkßN£Ü©Ïåûݲ»¥&ù@ÈËùš~šX§QîÔ‰ü¼ì.é@G§QîÔ‰|½ó=~íÛi”;õ¹ü°ÞÎ)ý4±N“| NäëíœÒŽN£Ü©ùz;ÇôÓÄ:r§NäëíöñkßN£Ü©ÏåÇõvö“–ö¾æq»OS¤ëŸ>òozëÜ›úôR!ý·ñ©¶¼iU#õ§õ/®ãiýA”YÒóËßæ¯—:KÚ½<Û~ùðÓá¼{ÿ_>ÿ(ýòÛ¿~ÿôåóXn;¯¿2|ù Ýƒb|‡ë¯%fïð!%W>eOÉ=>g‘’{ò@UJäN…”\$ï)¹Z>P!%—É•’¹S!%—É•’¹S!%—É•’¹S!%É{J®–THÉer¥ä@îTHÉer¥ä@îTHÉer¥ä@îTHÉEòž’«åRr™\)9;Rr™\)9;Rr™\)9;Rr‘¼§äjù@…”\&WJäN…”\&WJäN…”\&WJäN…”\$ï)¹Z>P!%—É•’¹S!%—É•’¹Së”\æn)9PRr‘º§äj÷@…”\&WJäN­Sr™»¥ä@mLHÉej¥äÀíTHÉ%ò‡”\)©uJ.s·”¨ )¹L­”¸ )¹L®”ÈZ§ä"·RrµÚ™’ËÔJÉÛ©’ËäJÉÜ©eJ.So)9¿%BJ.÷”\­¨’ËäJÉÜ©’ËäJÉÜ©’ËäJÉÜ©’‹ä=%WË*¤ä2¹Rr w*¤ä2¹Rr w*¤ä2¹Rr w*¤ä"yOÉÕò )¹L®”È )¹L®”È )¹L®”È )¹HÞSrµ| BJ.“+%r§BJ.“+%r§BJ.“+%r§BJ.’÷”\-¨’ËäJÉÜ©’ËäJÉÜ©’ËäJÉÜ©’‹ä=%WË*¤ä2¹Rr w*¤ä2¹Rr w*¤ä2¹Rr w*¤ä"yOÉÕò )¹L®”È )¹L®”È )¹L®”È )¹HÞSrµ| BJ.“+%r§BJ.“+%r§BJ.“+%r§BJ.‘?¤äJùH…”\&WJäN…”\&WJäN…”\&WJäN…”\$ï)¹Z>Pë”\æn)9PRr™Z)9p;Rr™\)9;µNÉEn¥äjµ3!%—©•’·S!%—É•’¹Së”\æn)9PRr‘º§äj÷@…”\&WJäN­Sr™»¥ä@mLHÉej¥äÀíTHÉEòž’«åµNÉeî–’µ1!%—©•’·S!%—É•’¹S!%É{J®–THÉer¥ä@îTHÉer¥ä@îTHÉer¥ä@îTHÉEòž’«åRr™\)9;Rr™\)9;Rr™\)9;Rr‘¼§äjù@…”\&WJäN…”\&WJäN…”\&WJäN…”\$ï)¹Z>P!%—É•’¹S!%—É•’¹S!%—É•’¹S!%É{J®–THÉer¥ä@îTHÉer¥ä@îTHÉer¥ä@îTHÉ%ò‡”\)©’ËäJÉÜ©’ËäJÉÜ©’ËäJÉÜ©’‹ä=%WË*¤ä2¹Rr w*¤ä2¹Rr w*¤ä2¹Rr w*¤ä"yOÉÕò )¹L®”È )¹L®”È )¹L®”È )¹HÞSrµ| BJ.“+%r§BJ.“+%r§Ö)¹ÌÝRr 6&¤ä"uOÉÕî )¹L®”ÈZ¦ä2õ–’ñ["¤ä2±Rr v*¤ä"yOÉÕòZ§ä2wKÉÚ˜’ËÔJÉÛ©’ËäJÉÜ©uJ.r+%W« )¹L­”¸ )¹L®”ÈZ§ä2wKÉÚ˜’‹Ô=%W»*¤ä2¹Rr w*¤ä2¹Rr w*¤ä2¹Rr w*¤ä"yOÉÕò )¹L®”È )¹L®”È )¹L®”È )¹HÞSrµ| BJ.“+%r§BJ.“+%r§BJ.“+%r§BJ.‘?¤äJùH…”\&WJäN…”\&WJäN…”\&WJäN…”\$ï)¹Z>P!%—É•’¹S!%—É•’¹S!%—É•’¹S!%É{J®–THÉer¥ä@îTHÉer¥ä@îTHÉer¥ä@îTHÉEòvšäu"_og7ù4qo°ýøg3³ŽÝqÙíøg7Û9ûIå~ž°+hHØê„ÝÊ<¾ü­¦LصC/uPÂîÛ÷_~ÿý—çùºõ½üø<ÂÞŸáez¹Nóuûõåÿø¨Mù„:÷æŸäëŽËýþòOðž<ÐùvåNÈ[b/“+Ür§B¸/“+Ür§B¸/’÷p_-¨îËä ÷Ü©îËä ÷Ü©îËä ÷Ü©î‹ä=ÜWË*„û2¹Â} w*„û2¹Â} w*„û2¹Â} w*„û"y÷Õò á¾L®pÈ á¾L®pÈ á¾L®pÈ á¾HÞÃ}µ| B¸/“+Ür§B¸/“+Ür§B¸/“+Ür§B¸/’÷p_-¨îËä ÷Ü©îËä ÷Ü©u¸/s·p¨ á¾HÝÃ}µ{ B¸/“+Ür§Öá¾ÌÝÂ} 6&„û2µÂ}àv*„ûùC¸¯”Ô:Ü—¹[¸ÔÆ„p_¦V¸ÜN…p_&W¸äN­Ã}‘[á¾ZíL÷ej…ûÀíT÷er…û@îÔ2Ü—©·pˆß!܉{¸¯VT÷er…û@îT÷er…û@îT÷er…û@îT÷Eòî«åÂ}™\á>;Â}™\á>;Â}™\á>;Â}‘¼‡ûjù@…p_&W¸äN…p_&W¸äN…p_&W¸äN…p_$ïá¾Z>P!Ü—Éî¹S!Ü—Éî¹S!Ü—Éî¹S!ÜÉ{¸¯–T÷er…û@îT÷er…û@îT÷er…û@îT÷Eòî«åÂ}™\á>;Â}™\á>;Â}™\á>;Â}‘¼‡ûjù@…p_&W¸äN…p_&W¸äN…p_&W¸äN…p_$ïá¾Z>P!Ü—Éî¹S!Ü—Éî¹S!Ü—Éî¹S!Ü—ÈÂ}¥|¤B¸/“+Ür§B¸/“+Ür§B¸/“+Ür§B¸/’÷p_-¨u¸/s·p¨ á¾L­p¸ á¾L®pÈZ‡û"·Â}µÚ™îËÔ ÷Û©îËä ÷Ü©u¸/s·p¨ á¾HÝÃ}µ{ B¸/“+Ür§Öá¾ÌÝÂ} 6&„û2µÂ}àv*„û"y÷ÕòZ‡û2w ÷Ú˜îËÔ ÷Û©îËä ÷Ü©î‹ä=ÜWË*„û2¹Â} w*„û2¹Â} w*„û2¹Â} w*„û"y÷Õò á¾L®pÈ á¾L®pÈ á¾L®pÈ á¾HÞÃ}µ| B¸/“+Ür§B¸/“+Ür§B¸/“+Ür§B¸/’÷p_-¨îËä ÷Ü©îËä ÷Ü©îËä ÷Ü©î‹ä=ÜWË*„û2¹Â} w*„û2¹Â} w*„û2¹Â} w*„ûùC¸¯”T÷er…û@îT÷er…û@îT÷er…û@îT÷Eòî«åÂ}™\á>;Â}™\á>;Â}™\á>;Â}‘¼‡ûjù@…p_&W¸äN…p_&W¸äN…p_&W¸äN…p_$ïá¾Z>P!Ü—Éî¹S!Ü—Éî¹Sëp_æná>PÂ}‘º‡ûj÷@…p_&W¸äN-Ã}™z ÷ø-Â}™Xá>P;Â}‘¼‡ûjù@­Ã}™»…û@mL÷ej…ûÀíT÷er…û@îÔ:ܹî«Õ΄p_¦V¸ÜN…p_&W¸äN­Ã}™»…û@mL÷Eêî«ÝÂ}™\á>;Â}™\á>;Â}™\á>;Â}‘¼‡ûjù@…p_&W¸äN…p_&W¸äN…p_&W¸äN…p_$ïá¾Z>P!Ü—Éî¹S!Ü—Éî¹S!Ü—Éî¹S!Ü—ÈÂ}¥|¤B¸/“+Ür§B¸/“+Ür§B¸/“+Ür§B¸/’÷p_-¨îËä ÷Ü©îËä ÷Ü©îËä ÷Ü©î‹ä=ÜWË*„û2¹Â} w*„û2¹Â} w*„û2¹Â} w*„û"y÷Õò á¾¢>—†ûàZ¸ïM!oî+èÇïO/Ò×pßùé©õoì—ÓpØ/÷õýÉOÖŽéÔkºo¿Åûþüõã×ÿçOß>}ÿømÌ Öÿv¿üVþƒb¬÷ÝŽ§Y¼¯gŽÊ‡ì™£Ç§,2GOž§ÊÜ©9Šä=sTË*dŽ2¹2G w*dŽ2¹2G w*dŽ2¹2G w*dŽ"yÏÕò ™£L®ÌÈ ™£L®ÌÈZgŽ2wËÚ˜9ŠÔ=sT»*dŽ2¹2G wj9ÊÜ-sjcBæ(S+sn§Bæ(‘?dŽJùH­3G™»eŽ@mLÈejeŽÀíTÈereŽ@îÔ:s¹•9ªÕ΄ÌQ¦VæÜN…ÌQ&WæäN-3G™zËø-2G‘¸gŽjõ@…ÌQ&WæäN…ÌQ&WæäN…ÌQ&WæäN…ÌQ$Z>P!s”É•9¹S!s”É•9¹S!s”É•9¹S!sÉ{樖TÈereŽ@îTÈereŽ@îTÈereŽ@îTÈEòž9ªå2G™\™#;2G™\™#;2G™\™#;2G‘¼gŽjù@…ÌQ&WæäN…ÌQ&WæäN…ÌQ&WæäN…ÌQ$Z>P!s”É•9¹S!s”É•9¹S!s”É•9¹S!sÉ{樖TÈereŽ@îTÈereŽ@îTÈereŽ@îTÈEòž9ªå2G™\™#;2G™\™#;2G™\™#;2G‰ü!sTÊG*dŽ2¹2G w*dŽ2¹2G w*dŽ2¹2G w*dŽ"yÏÕòZgŽ2wËÚ˜9ÊÔÊÛ©9ÊäÊÜ©uæ(r+sT« ™£L­Ì¸ ™£L®ÌÈZgŽ2wËÚ˜9ŠÔ=sT»*dŽ2¹2G wj9ÊÜ-sjcBæ(S+sn§Bæ(’÷ÌQ-¨uæ(s·Ì¨ ™£L­Ì¸ ™£L®ÌÈ ™£HÞ3Gµ| Bæ(“+sr§Bæ(“+sr§Bæ(“+sr§Bæ(’÷ÌQ-¨9ÊäÊÜ©9ÊäÊÜ©9ÊäÊÜ©9Šä=sTË*dŽ2¹2G w*dŽ2¹2G w*dŽ2¹2G w*dŽ"yÏÕò ™£L®ÌÈ ™£L®ÌÈ ™£L®ÌÈ ™£HÞ3Gµ| Bæ(“+sr§Bæ(“+sr§Bæ(“+sr§Bæ(‘?dŽJùH…ÌQ&WæäN…ÌQ&WæäN…ÌQ&WæäN…ÌQ$Z>P!s”É•9¹S!s”É•9¹S!s”É•9¹S!sÉ{樖TÈereŽ@îTÈereŽ@îTÈereŽ@îTÈEòž9ªå2G™\™#;2G™\™#;µÎeî–9µ1!s©{æ¨vTÈereŽ@îÔ2s”©·Ìˆß!s”‰•9µS!sÉ{樖Ô:s”¹[æÔÆ„ÌQ¦VæÜN…ÌQ&WæäN­3G‘[™£ZíLÈejeŽÀíTÈereŽ@îÔ:s”¹[æÔÆ„ÌQ¤î™£Ú=P!s”É•9¹S!s”É•9¹S!s”É•9¹S!sÉ{樖TÈereŽ@îTÈereŽ@îTÈereŽ@îTÈEòž9ªå2G™\™#;2G™\™#;2G™\™#;2G‰ü!sTÊG*dŽ2¹2G w*dŽ2¹2G w*dŽ2¹2G w*dŽ"yÏÕò ™£L®ÌÈ ™£L®ÌÈ ™£L®ÌÈ ™£HÞ3Gµ| Bæ(“+sr§Bæ(“+sr§Bæ(“+sr§Bæ(’÷ÌQ-¨9*2=iæ¨eŽÞԄ晣â3GÛïã×™£Ýýe§u„ÌQ;õš9:l™£¿ûãÓ�þÛ_>oÿæÓçoßùý÷×?øþ¯_ÿÍ?ïv‡¯ÿòéëvê·¯Ÿ>ÎïÿíÃþüþã×g3Ä’{x8ÿ!¬Oq\Ÿõù›–?¾>|üãÀ'TAîTfrAîTFò>¬åÆ™\ã@;Æ™\ã@;Æ™\ã@;Æ‘¼kù@…q`&×8äN…q`&×8äN…q`&×8äN…q`$ïãÀZ>Pa˜É5¹Sa˜É5¹Sa˜É5¹SaÉû8°–TfrAîTfrAîTfrAîT&ò‡q`)©0Ìä‚Ü©0Ìä‚Ü©0Ìä‚Ü©0Œä}XËj=ÌÜmjcÂ80Skn§Â80“kr§ÖãÀÈ­q`­v&Œ3µÆàv*Œ3¹Æ wj=ÌÜmjcÂ80R÷q`í¨0Ìä‚Ü©õ80s·q ¨ ãÀL­q ¸ ãÀHÞǵ| ÖãÀÌÝÆ 6&Œ3µÆàv*Œ3¹Æ w*Œ#yÖò ãÀL®q È ãÀL®q È ãÀL®q È ãÀHÞǵ| Â80“kr§Â80“kr§Â80“kr§Â80’÷q`-¨0Ìä‚Ü©0Ìä‚Ü©0Ìä‚Ü©0Œä}XË*Œ3¹Æ w*Œ3¹Æ w*Œ3¹Æ w*Œ#yÖò ãÀL®q È ãÀL®q È ãÀL®q È ãÀDþ0,å#Æ™\ã@;Æ™\ã@;Æ™\ã@;Æ‘¼kù@…q`&×8äN…q`&×8äN…q`&×8äN…q`$ïãÀZ>Pa˜É5¹Sa˜É5¹Sa˜É5¹SaÉû8°–TfrAîTfrAîÔz˜¹Û8ÔÆ„q`¤îãÀÚ=Pa˜É5¹SËq`¦ÞÆ ~K„q`&Ö8ÔN…q`$ïãÀZ>Pëq`ænã@PÆ™Zã@p;Æ™\ã@;µFnkµ3a˜©5·Sa˜É5¹Sëq`ænã@PÆ‘ºk÷@…q`&×8äN…q`&×8äN…q`&×8äN…q`$ïãÀZ>Pa˜É5¹Sa˜É5¹Sa˜É5¹SaÉû8°–TfrAîTfrAîTfrAîT&ò‡q`)©0Ìä‚Ü©0Ìä‚Ü©0Ìä‚Ü©0Œä}XË*Œ3¹Æ w*Œ3¹Æ w*Œ3¹Æ w*Œ#yÖò ãÀL®q È ãÀL®q È ãÀL®q È ãÀHÞǵ| Â8°˜¨¥ã@x 6|³Á›‹ZátY1öòI´õ/êãiýa>;uÝ/×—>ŸïÇõ'V·[°ëÃm§tè屎Û0ðï¿~ú°ß½Ìûv/ó¾ÿÙ—ÿýýÓ—Ï߆ï©~ùð×îp|÷hßäõ¼þŠâù›|!Ü//¿íQ?°Î½yäñ‹³O—åtÞÝž>ÐùvåNÈoËý´?§òí4Êú\~Þ/ëOèö¡¼&ù@È×Û9Ò×ÞN£Ü©ùz;ûcúÚÛi”;u"_ogwŠ_ûvåN}.¿ì—ãý”¾övšäu"?.·Ûù”Ê·Ó(wêD~YŽ×KúÚÛi”;u"¿-·Ë%~íÛi”;õ¹|ýŸîãùš¾övšäu"_oçtK_{;r§Näëío×T¾F¹S'òõv÷øµo§QîÔçòÛz;‡]úÚÛi’Ô‰|½ý.}íí4Ê:‘¯·³Û§¯½F¹S'òÛr½R÷ëaTó¹ù¾_·CúÎÛirÔ‰ü¸\¯Çô·Ó(wêD¾þ$÷»_£Ú˜óz3çSüηÓèvêó]én½šÓù˜Éuä#u"_¯æxIݯ‡Qm̉y½™Ã嚪·ÓèvêD¾^Íú÷žT¾F¹SŸË÷ëÕ¤¿Ni‡Ií̉yý³÷[zÝí4º:‘_–ýíž¾óvåNÈoË%~å?΢ø-ñ¹ö°_ö×]úÂÛiRÔ‰|ý³—}úÂÛi”;u"_ï弿§òí4Ê:‘¯ws:į};r§>—×Û9Ó×ÞN“| NäëŸ=Ó×ÞN£Ü©ùz;ûSúÚÛi”;u"_ogw>¤òí4Êú\~Ú/»û9}íí4ÉêD~\Îë/SùvåNÈ/ËîzM_{;r§Nä·å|¹Æ¯};r§Nú^ëíœoáï=é4ÉêD¾ÐBy˪‘Ü©uV-”·¬ÉZgÕBy˪‘Ü©uV-“+«òZgÕBy˪‘Ü©uV-”·¬ÉZgÕBy˪‘Ü©uV-“+«òZgÕBy˪‘Ü©uV-”·¬ÉZgÕBy˪‘Ü©uV-“+«òZgÕBy˪‘Ü©uV-”·¬ÉZgÕBy˪‘Ü©uV-“+«òZgÕBy˪‘Ü©uV-”·¬ÉZgÕBy˪‘Ü©uV-’÷¬Z-©uV-”·¬ÉZgÕBy˪‘Ü©uV-”·¬ÉZgÕ2¹²j ¨eV-toY5R³Îª…ê–U#·Së¬Z(oY5’;µÌªeî–Uµ3ë¬Z¨nY5r;µÎª…ò–U#¹SˬZèÞ²j¤6fUËÔʪ{ ÖYµPÞ²j$wj™U Ý[VÔÆ¬³j¡ºeÕÈíÔ:«–É•Uù@-³j¡{˪‘Ú˜uV-T·¬¹ZgÕBy˪‘Ü©uV-“+«òZgÕBy˪‘Ü©uV-”·¬ÉZgÕBy˪‘Ü©uV-“+«òZgÕBy˪‘Ü©uV-”·¬ÉZgÕBy˪‘Ü©uV-“+«òZgÕBy˪‘Ü©uV-”·¬ÉZgÕBy˪‘Ü©uV-“+«òZgÕBy˪‘Ü©uV-”·¬ÉZgÕBy˪‘Ü©uV-“+«òZgÕBy˪‘Ü©uV-”·¬ÉZgÕBy˪‘Ü©uV-’÷¬Z-©uV-”·¬ÉZgÕBy˪‘Ü©uV-”·¬ÉZgÕ2¹²j ¨uV-”·¬ÉZgÕBy˪‘Ü©uV-”·¬ÉZgÕ2¹²j ¨uV-”·¬ÉZgÕBy˪‘Ü©uV-”·¬ÉZgÕ2¹²j ¨uV-”·¬ÉZgÕBy˪‘Ü©eV-toY5R³ÎªejeÕÀ=Pë¬Z(oY5’;µÊª…ê׬‰ßë¬Z(nY5R;µÎªereÕ@>PˬZèÞ²j¤6fU Õ-«Fn§ÖYµPÞ²j$wj™UËÜ-«jgÖYµPݲjävjU å-«Fr§–YµÐ½eÕHmÌ:«–©•U÷@­³j¡¼eÕHîÔ:«Ê[VäN­³j¡¼eÕHîÔ:«–É•Uù@­³j¡¼eÕHîÔ:«Ê[VäN­³j¡¼eÕHîÔ:«–É•Uù@­³j¡¼eÕHîÔ:«Ê[VäN­³j¡¼eÕHîÔ:«É{V­–Ô:«Ê[VäN­³j¡¼eÕHîÔ:«Ê[VäN­³j™\Y5Ô:«Ê[VäN­³j¡¼eÕHîÔ:«Ê[VäN­³j™\Y5Ô:«Ê[VäN­³j¡¼eÕHîÔ:«Ê[VäN­³j™\Y5Ô:«VÇÀ¢¬=ЖU{ó@§iV­z !«vª³j×Ûr<^NuV­úñX[VíÏ»÷ýã÷O¿|ýôýÓÇo¯ÿñÿûp8¿ÿòÇë|û×/üþÛë¿ÿ_Ÿ¿¼Øþïëýò—/|ç®/ÿ•¼¾{|(òýˆò2yáóÛòÇÕç·?²b~ûäªù-È óÛHÞç·µ| Âü6“k~ r§Âü6“k~ r§Âü6“k~ r§Âü6’÷ùm-¨0¿Íäšß‚Ü©0¿Íäšß‚Ü©0¿Íäšß‚Ü©0¿ä}~[Ë*Ìo3¹æ· w*Ìo3¹æ· w*Ìo3¹æ· w*Ìo#yŸßÖò óÛL®ù-È óÛL®ù-È óÛL®ù-È óÛHÞç·µ| Âü6“k~ r§Âü6“k~ r§Âü6“k~ r§Âü6’÷ùm-¨0¿Íäšß‚Ü©0¿Íäšß‚Ü©0¿Íäšß‚Ü©0¿MäóÛR>Ra~›É5¿¹Sa~›É5¿¹Sa~›É5¿¹Sa~Éûü¶–Ôz~›¹ÛüÔÆ„ùm¦ÖüÜN…ùm&×üäN­ç·‘[óÛZíL˜ßfjÍoÁíT˜ßfrÍoAîÔz~›¹ÛüÔÆ„ùm¤îóÛÚ=Pa~›É5¿¹Sëùmænó[Pæ·™Zó[p;æ·‘¼Ïokù@­ç·™»ÍoAmL˜ßfjÍoÁíT˜ßfrÍoAîT˜ßFò>¿­åæ·™\ó[;æ·™\ó[;æ·™\ó[;æ·‘¼Ïokù@…ùm&×üäN…ùm&×üäN…ùm&×üäN…ùm$ïóÛZ>Pa~›É5¿¹Sa~›É5¿¹Sa~›É5¿¹Sa~Éûü¶–T˜ßfrÍoAîT˜ßfrÍoAîT˜ßfrÍoAîT˜ßFò>¿­åæ·™\ó[;æ·™\ó[;æ·™\ó[;æ·‰üa~[ÊG*Ìo3¹æ· w*Ìo3¹æ· w*Ìo3¹æ· w*Ìo#yŸßÖò óÛL®ù-È óÛL®ù-È óÛL®ù-È óÛHÞç·µ| Âü6“k~ r§Âü6“k~ r§Âü6“k~ r§Âü6’÷ùm-¨0¿Íäšß‚Ü©0¿Íäšß‚Ü©õü6s·ù-¨ óÛHÝç·µ{ Âü6“k~ r§–óÛL½ÍoAü–óÛL¬ù-¨ óÛHÞç·µ| ÖóÛÌÝæ· 6&Ìo3µæ·àv*Ìo3¹æ· wj=¿ÜšßÖjgÂü6Sk~ n§Âü6“k~ r§ÖóÛÌÝæ· 6&Ìo#uŸßÖî óÛL®ù-È óÛL®ù-È óÛL®ù-È óÛHÞç·µ| Âü6“k~ r§Âü6“k~ r§Âü6“k~ r§Âü6’÷ùm-¨0¿Íäšß‚Ü©0¿Íäšß‚Ü©0¿Íäšß‚Ü©0¿MäóÛR>Ra~›É5¿¹Sa~›É5¿¹Sa~›É5¿¹Sa~Éûü¶–T˜ßfrÍoAîT˜ßfrÍoAîT˜ßfrÍoAîT˜ßFò>¿­åæ·™\ó[;æ·™\ó[;æ·™\ó[;æ·‘¼Ïokù@…ùm±Mç·ð@m~ûø@çùü¶x ¿t<½H_ç·ç§§Ö¿±_N?þYÀú Çõç³÷þd‡‡'kÇtêu€»ß&¸ÿðéëÇ¿|úº lÿywÞýíÓ·õ_öýøË÷?¾~ü6~EøúK¦›‰í“…íþzž-lûWµ—OÞ¿ªýñÑç_ÕþäyНjµ1á«Ú3µ¾ªÜN…¯jÏäúªv;µþªöÈ­¯j¯Õ΄¯jÏÔúªvp;¾ª=“ë«ÚAîÔò«Ú3õöUí ~K„¯jÄý«Úkõ@…¯jÏäúªv;¾ª=“ë«ÚAîTøªöL®¯j¹Sá«Ú#yÿªöZ>Pá«Ú3¹¾ªäN…¯jÏäjE€Ü©ÐŠÈäjE€Ü©ÐŠˆä½QË*´"2¹Z w*´"2¹Z w*´"2¹Z w*´""yoEÔò ­ˆL®VÈ ­ˆL®VÈ ­ˆL®VÈ ­ˆHÞ[µ| B+"“«r§B+"“«r§B+"“«r§B+"’÷VD-¨ÐŠÈäjE€Ü©ÐŠÈäjE€Ü©ÐŠÈäjE€Ü©ÐŠˆä½QË*´"2¹Z w*´"2¹Z w*´"2¹Z w*´""yoEÔò ­ˆL®VÈ ­ˆL®VÈ ­ˆL®VÈ ­ˆDþЊ(å#Z™\­;Z™\­;Z™\­;Z‘¼·"jù@­[™»µ"@mLhEdjµ"ÀíThEdrµ"@îÔº¹ÕЍÕ΄VD¦V+ÜN…VD&W+äN­[™»µ"@mLhEDêÞŠ¨ÝZ™\­;µnEdîÖŠµ1¡‘©ÕŠ·S¡É{+¢–Ôº‘¹[+ÔÆ„VD¦V+ÜN…VD&W+äN…VD$ï­ˆZ>P¡‘ÉÕŠ¹S¡‘ÉÕŠ¹S¡‘ÉÕŠ¹S¡É{+¢–ThEdrµ"@îThEdrµ"@îThEdrµ"@îThEDòÞŠ¨åZ™\­;Z™\­;Z™\­;Z‘¼·"jù@…VD&W+äN…VD&W+äN…VD&W+äN…VD$ï­ˆZ>P¡‘ÉÕŠ¹S¡‘ÉÕŠ¹S¡‘ÉÕŠ¹S¡‘ÈZ¥|¤B+"“«r§B+"“«r§B+"“«r§B+"’÷VD-¨ÐŠÈäjE€Ü©ÐŠÈäjE€Ü©ÐŠÈäjE€Ü©ÐŠˆä½QË*´"2¹Z w*´"2¹Z w*´"2¹Z w*´""yoEÔò ­ˆL®VÈ ­ˆL®VÈZ·"2wkE€Ú˜ÐŠˆÔ½Q»*´"2¹Z wjÙŠÈÔ[+Äo‰ÐŠÈÄjE€Ú©ÐŠˆä½QËjÝŠÈÜ­jcB+"S«n§B+"“«r§Ö­ˆÈ­VD­v&´"2µZàv*´"2¹Z wjÝŠÈÜ­jcB+"R÷VDí¨ÐŠÈäjE€Ü©ÐŠÈäjE€Ü©ÐŠÈäjE€Ü©ÐŠˆä½QË*´"2¹Z w*´"2¹Z w*´"2¹Z w*´""yoEÔò ­ˆL®VÈ ­ˆL®VÈ ­ˆL®VÈ ­ˆDþЊ(å#Z™\­;Z™\­;Z™\­;Z‘¼·"jù@…VD&W+äN…VD&W+äN…VD&W+äN…VD$ï­ˆZ>P¡‘ÉÕŠ¹S¡‘ÉÕŠ¹S¡‘ÉÕŠ¹S¡É{+¢–ThE]ƒ´ÔZT´"Šú÷~Uûiý›ìú—ýUííÐËcýÇ­ñÿýlÁˆ¯ö·÷?¾þÑßùõ¿}üüý—|~ýþÛ§_?~þöq·î^– ×wÏð¤q,¾™];ãò‡ÑwÆ?bgüäª1È ;ãL®1È ;ãL®1È ;ãHÞwƵ| ÂÎ8“kg r§ÂÎ8“kg r§ÂÎ8“kg r§ÂÎ8’÷q-¨°3Îäڃܩ°3Îäڃܩ°3Îäڃܩ°3Žä}g\Ë*ìŒ3¹vÆ w*ìŒ3¹vÆ w*ìŒ3¹vÆ w*ìŒ#yß×ò ;ãL®1È ;ãL®1È ;ãL®1È ;ãHÞwƵ| ÂÎ8“kg r§ÂÎ8“kg r§ÂÎ8“kg r§ÂÎ8’÷q-¨°3Îäڃܩ°3Îäڃܩ°3Îäڃܩ°3Nä;ãR>RagœÉµ3¹SagœÉµ3¹SagœÉµ3¹SagÉûθ–Ôzgœ¹ÛÎÔÆ„q¦ÖÎÜN…q&×ÎäN­wÆ‘[;ãZíLØgjíŒÁíTØgríŒAîÔzgœ¹ÛÎÔÆ„q¤î;ãÚ=PagœÉµ3¹Sëqæn;cPvÆ™Z;cp;vÆ‘¼ïŒkù@­wÆ™»íŒAmLØgjíŒÁíTØgríŒAîTØGò¾3®åvÆ™\;c;vÆ™\;c;vÆ™\;c;vÆ‘¼ïŒkù@…q&×ÎäN…q&×ÎäN…q&×ÎäN…q$ï;ãZ>PagœÉµ3¹SagœÉµ3¹SagœÉµ3¹SagÉûθ–TØgríŒAîTØgríŒAîTØgríŒAîTØGò¾3®åvÆ™\;c;vÆ™\;c;vÆ™\;c;vƉüag\ÊG*ìŒ3¹vÆ w*ìŒ3¹vÆ w*ìŒ3¹vÆ w*ìŒ#yß×ò ;ãL®1È ;ãL®1È ;ãL®1È ;ãHÞwƵ| ÂÎ8“kg r§ÂÎ8“kg r§ÂÎ8“kg r§ÂÎ8’÷q-¨°3Îäڃܩ°3ÎäڃܩõÎ8s·1¨ ;ãHÝwƵ{ ÂÎ8“kg r§–;ãL½íŒAü–;ãL¬1¨ ;ãHÞwƵ| Ö;ãÌÝvÆ 6&ìŒ3µvÆàv*ìŒ3¹vÆ wj½3ŽÜÚ×jgÂÎ8Skg n§ÂÎ8“kg r§Ö;ãÌÝvÆ 6&ìŒ#uß×î ;ãL®1È ;ãL®1È ;ãL®1È ;ãHÞwƵ| ÂÎ8“kg r§ÂÎ8“kg r§ÂÎ8“kg r§ÂÎ8’÷q-¨°3Îäڃܩ°3Îäڃܩ°3Îäڃܩ°3Nä;ãR>RagœÉµ3¹SagœÉµ3¹SagœÉµ3¹SagÉûθ–TØgríŒAîTØgríŒAîTØgríŒAîTØGò¾3®åvÆ™\;c;vÆ™\;c;vÆ™\;c;vÆ‘¼ïŒkù@…q±ƒMwÆð@mgüø@—ùθx ‡ñúd/ß½”CãÓzfy@ŸÞ\Ó}ýi×éågu¯§^žëÓ§OÓ'{ 5ãÿá*…ãendstream endobj 71 0 obj << /Type /Page /Contents 72 0 R /Resources 70 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 55 0 R /Annots [ 74 0 R 78 0 R 79 0 R 80 0 R 81 0 R 82 0 R 83 0 R 84 0 R 85 0 R 86 0 R 87 0 R 88 0 R 89 0 R 90 0 R 91 0 R 92 0 R 93 0 R 94 0 R ] >> endobj 74 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [70.7348 666.8844 104.6274 675.8606] /Subtype /Link /A << /S /GoTo /D (26) >> >> endobj 78 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [529.3351 666.8844 538.9788 675.8606] /Subtype /Link /A << /S /GoTo /D (26) >> >> endobj 79 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [70.7348 651.5419 136.7566 660.5181] /Subtype /Link /A << /S /GoTo /D (37) >> >> endobj 80 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [532.005 651.5419 538.9788 660.5181] /Subtype /Link /A << /S /GoTo /D (37) >> >> endobj 81 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [70.7348 636.1994 131.4065 645.1757] /Subtype /Link /A << /S /GoTo /D (42) >> >> endobj 82 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [532.005 636.1994 538.9788 645.1757] /Subtype /Link /A << /S /GoTo /D (42) >> >> endobj 83 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [94.6451 618.8196 165.5384 629.7236] /Subtype /Link /A << /S /GoTo /D (45) >> >> endobj 84 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [532.005 618.8196 538.9788 629.7236] /Subtype /Link /A << /S /GoTo /D (45) >> >> endobj 85 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [94.6451 607.9255 252.3123 616.7721] /Subtype /Link /A << /S /GoTo /D (59) >> >> endobj 86 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [532.005 607.9255 538.9788 616.7721] /Subtype /Link /A << /S /GoTo /D (59) >> >> endobj 87 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [70.7348 590.6602 144.1986 601.5393] /Subtype /Link /A << /S /GoTo /D (96) >> >> endobj 88 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [532.005 590.6602 538.9788 601.5393] /Subtype /Link /A << /S /GoTo /D (96) >> >> endobj 89 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [70.7348 575.3177 236.0333 586.1969] /Subtype /Link /A << /S /GoTo /D (136) >> >> endobj 90 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [532.005 575.3177 538.9788 586.1969] /Subtype /Link /A << /S /GoTo /D (136) >> >> endobj 91 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [94.6451 560.2144 201.2241 570.7448] /Subtype /Link /A << /S /GoTo /D (139) >> >> endobj 92 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [532.005 560.2144 538.9788 570.7448] /Subtype /Link /A << /S /GoTo /D (139) >> >> endobj 93 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [70.7348 546.5357 231.092 555.5119] /Subtype /Link /A << /S /GoTo /D (COPYING-FDL) >> >> endobj 94 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [532.005 546.5357 538.9788 555.5119] /Subtype /Link /A << /S /GoTo /D (COPYING-FDL) >> >> endobj 73 0 obj << /D [71 0 R /XYZ 71.731 741.2204 null] >> endobj 6 0 obj << /D [71 0 R /XYZ 244.3315 691.2808 null] >> endobj 70 0 obj << /Font << /F24 54 0 R /F37 77 0 R /F32 62 0 R /F34 66 0 R >> /ProcSet [ /PDF /Text ] >> endobj 105 0 obj << /Length 770 /Filter /FlateDecode >> stream xÚVM›0½çWp„ØÓª«nÕžZ5ê¥ÛƒÜƒl³Ñö×ׯ!Ô鮢HqlgæÍ{ã8rBþ‰œ}ìw|H¢ ŽÃÄ©úMè4|ëÓ&R&I–qe|bÙõÓÝ>(ò8sü¥“‡Íö1Nœ8 ²4OÃQ‡Ê n•‡¹s¨º_ <‚ z¿_¶»Ø)‚"㮸uèøqÁdélØ¡².‘çÇiè>…iØ26Þm·r9 ÃD*xˆån 7Ф9¢rr¨% P-–”P14`¹ÐWHäÏAŒAµŽÔøÈñ3SëýØÁbvåH@½8uO^ºy–ˬê\°@-pFqP¤Q2ãœêЕ…# €©YMpøâE©«Säø ªà¢òä+ô†qeM!Q^¨Bsh¡qÈ ê_Æ¢Wê¾6»ÊƒèH†ß°RÅàáâÕ k­¨Õ.†¤We<¨tÏ«í†Nã8ë7ë¡såªÞÅR¥‡Vk¨xݵ¤æÐ{p(‡‰­2yD–ˆÔÛϘArNbEošºkn–Á‘ ÉZkX†ž[ÃØ›ŠÚÁÆ‚¸î„qìP5'Oµð³P¯ö/u”-µ¢öp}$ˆ£Ÿá#r-[1½rB¬½,™œiŒëúiJ/`ÊÛâa¸&w?ï}› ]äb€TC¿lëÛ™”k‡©SžK#;Sµ\íýå×ð<íl|ŠíêØp÷÷¢Œþÿúînt^”)Yþð2!CÄnIÝ8Sr•·‹çJ¦rgþý·}Oü3:]y:•´"HScT`:ê8‘üÓèªYèy[SËž’—ûëMâMF†‘ óï±tl¡ÔzëÝ sÙõ àE͇Qß#¥‚ôÐAP—åwú†èÿÛ…’+mwO•IÀ )8œóÞ|<˜×ˆzc$yGYa}¯(a3?VvÉâõ‘îÂ`Ÿ{ãI½¬Ã™·%à_Æ9šûendstream endobj 104 0 obj << /Type /Page /Contents 105 0 R /Resources 103 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 55 0 R >> endobj 106 0 obj << /D [104 0 R /XYZ 71.731 741.2204 null] >> endobj 95 0 obj << /D [104 0 R /XYZ 71.731 706.3512 null] >> endobj 10 0 obj << /D [104 0 R /XYZ 146.3693 691.2808 null] >> endobj 107 0 obj << /D [104 0 R /XYZ 71.731 674.2377 null] >> endobj 108 0 obj << /D [104 0 R /XYZ 71.731 674.2377 null] >> endobj 109 0 obj << /D [104 0 R /XYZ 330.1288 648.5929 null] >> endobj 110 0 obj << /D [104 0 R /XYZ 71.731 628.5033 null] >> endobj 111 0 obj << /D [104 0 R /XYZ 71.731 584.6677 null] >> endobj 112 0 obj << /D [104 0 R /XYZ 397.8446 573.8731 null] >> endobj 113 0 obj << /D [104 0 R /XYZ 362.6958 560.9217 null] >> endobj 114 0 obj << /D [104 0 R /XYZ 71.731 527.8806 null] >> endobj 115 0 obj << /D [104 0 R /XYZ 262.8427 517.086 null] >> endobj 103 0 obj << /Font << /F24 54 0 R /F32 62 0 R /F34 66 0 R >> /ProcSet [ /PDF /Text ] >> endobj 118 0 obj << /Length 491 /Filter /FlateDecode >> stream xÚ}TÁŽ›0½ç+¬=´1¶Ázkª¦jÕKUn»=xÁ«Ä¦Æ)Ú¿¯Á&!©8ÌxæyfÞŒ ý0Øa¸‹­H0$% > endobj 96 0 obj << /D [117 0 R /XYZ 71.731 706.3512 null] >> endobj 14 0 obj << /D [117 0 R /XYZ 298.5799 691.2808 null] >> endobj 119 0 obj << /D [117 0 R /XYZ 71.731 670.2196 null] >> endobj 120 0 obj << /D [117 0 R /XYZ 71.731 670.2196 null] >> endobj 121 0 obj << /D [117 0 R /XYZ 314.9563 661.5443 null] >> endobj 116 0 obj << /Font << /F24 54 0 R /F32 62 0 R /F34 66 0 R >> /ProcSet [ /PDF /Text ] >> endobj 124 0 obj << /Length 1559 /Filter /FlateDecode >> stream xÚ­XKÛ6¾ï¯0‚l ¢IJÔ#·¦h‚-Ð (6@‹¶Y¢-u%Ë¡¤x½¿¾Cq¨—•S>èÁ!gæ›o2[Qø±UÀHàÂÅc„sê­’òŽ®°ôˆçû„ æÃê#Ü€D!÷WÎø7wÛ·Ü[qJ|ŠÕÃÞªò# i¸zHÿZÿœÅ§FªÃƒp͉¹Þë&.Š¸É«ãæŸ‡_·o]¾ŠHäƒ8‡®ÁQ¾èŽxÈòö ºNúÃà!•u¢òĵ&“ææ¤¤’ŸÚ¼Î»Ó+¡*‘i«úÝ•¹î6œ®Û¼Hgscñ씿)åJîr…R©Ê7\¬?o˜X[3÷ª*gÛêªU‰¬‰q0dáLxè»' žÛùÎ CÌ>LÜZ!"Ž ¡²}U•¶êœè|œ<ÆëzkŸÍ30äÄy‰^B̺ëÜ@‡.u#Ë×ڪΎ€„‘0ù.Ýåzåî—‡žSÈá…$¢7¡êrÆÑõÜÙÛ¶qc~üÞÚOÓ`$ õœF¡;Ö…ÄÐ=ãè8™,N Š` Yè[ÒUCØmSªZÇÝp›¦¹ÎmrU'Õ;ÂF.ØìGÀWøJwûoy|™k‹Í·ï{ÃD™ é;„½Œeß"‡òÌ /z0î9.4¬‹÷PYQ¥`#a.d·Íìûý¬G¢±æå¶èŠU×SÍU*Uá%Ìqø¬»/ÂÇÕ|¬šÄ¥}ì~‹5°RÇ®@õõåØÄO fû00 Ïñ£‘¾èý]æicâK»d…Ûš¹i¦Ú¤ Í×Rãªc\³Ò•±ie‡G‚0lpÚڔÔ)Î!à,ØÔàæwï?šc¢ùàEµ·î %@.ÜmEÐme!3Õý ß !¤ P{éO)qF2æ£bÜ „ëJ|UPây!þ¥2×Öÿ¿µ ï?1†îendstream endobj 123 0 obj << /Type /Page /Contents 124 0 R /Resources 122 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 55 0 R >> endobj 97 0 obj << /D [123 0 R /XYZ 71.731 706.3512 null] >> endobj 18 0 obj << /D [123 0 R /XYZ 287.5478 691.2808 null] >> endobj 125 0 obj << /D [123 0 R /XYZ 71.731 670.2196 null] >> endobj 98 0 obj << /D [123 0 R /XYZ 71.731 659.3875 null] >> endobj 22 0 obj << /D [123 0 R /XYZ 214.3071 616.29 null] >> endobj 126 0 obj << /D [123 0 R /XYZ 71.731 604.1188 null] >> endobj 127 0 obj << /D [123 0 R /XYZ 71.731 592.574 null] >> endobj 128 0 obj << /D [123 0 R /XYZ 71.731 577.6301 null] >> endobj 129 0 obj << /D [123 0 R /XYZ 71.731 566.7359 null] >> endobj 130 0 obj << /D [123 0 R /XYZ 91.6563 548.9027 null] >> endobj 131 0 obj << /D [123 0 R /XYZ 144.2183 522.9999 null] >> endobj 132 0 obj << /D [123 0 R /XYZ 71.731 497.929 null] >> endobj 133 0 obj << /D [123 0 R /XYZ 71.731 487.0348 null] >> endobj 134 0 obj << /D [123 0 R /XYZ 91.6563 469.2016 null] >> endobj 135 0 obj << /D [123 0 R /XYZ 301.288 456.2502 null] >> endobj 99 0 obj << /D [123 0 R /XYZ 71.731 425.2664 null] >> endobj 26 0 obj << /D [123 0 R /XYZ 385.1852 380.1117 null] >> endobj 136 0 obj << /D [123 0 R /XYZ 71.731 371.2889 null] >> endobj 137 0 obj << /D [123 0 R /XYZ 71.731 345.6011 null] >> endobj 141 0 obj << /D [123 0 R /XYZ 71.731 335.4995 null] >> endobj 142 0 obj << /D [123 0 R /XYZ 71.731 335.4995 null] >> endobj 143 0 obj << /D [123 0 R /XYZ 81.4147 323.9822 null] >> endobj 147 0 obj << /D [123 0 R /XYZ 71.731 312.9261 null] >> endobj 148 0 obj << /D [123 0 R /XYZ 473.2014 301.0681 null] >> endobj 149 0 obj << /D [123 0 R /XYZ 71.731 275.9972 null] >> endobj 150 0 obj << /D [123 0 R /XYZ 71.731 275.9972 null] >> endobj 151 0 obj << /D [123 0 R /XYZ 81.4147 266.4977 null] >> endobj 152 0 obj << /D [123 0 R /XYZ 71.731 255.474 null] >> endobj 153 0 obj << /D [123 0 R /XYZ 71.731 255.474 null] >> endobj 154 0 obj << /D [123 0 R /XYZ 81.4147 244.8788 null] >> endobj 155 0 obj << /D [123 0 R /XYZ 71.731 233.8227 null] >> endobj 156 0 obj << /D [123 0 R /XYZ 90.8293 221.9647 null] >> endobj 157 0 obj << /D [123 0 R /XYZ 71.731 214.8266 null] >> endobj 158 0 obj << /D [123 0 R /XYZ 71.731 193.9698 null] >> endobj 159 0 obj << /D [123 0 R /XYZ 71.731 193.9698 null] >> endobj 160 0 obj << /D [123 0 R /XYZ 81.4147 182.4131 null] >> endobj 161 0 obj << /D [123 0 R /XYZ 71.731 181.3519 null] >> endobj 162 0 obj << /D [123 0 R /XYZ 71.731 161.4267 null] >> endobj 166 0 obj << /D [123 0 R /XYZ 324.3663 150.8315 null] >> endobj 170 0 obj << /D [123 0 R /XYZ 91.6563 139.1752 null] >> endobj 171 0 obj << /D [123 0 R /XYZ 71.731 48.8169 null] >> endobj 122 0 obj << /Font << /F24 54 0 R /F32 62 0 R /F47 140 0 R /F49 146 0 R /F34 66 0 R /F37 77 0 R /F51 165 0 R /F52 169 0 R >> /ProcSet [ /PDF /Text ] >> endobj 174 0 obj << /Length 927 /Filter /FlateDecode >> stream xÚ­VKœ8¾Ï¯@ÑJið˜7ì1»;Qö°§¾íæàÓX¸e›ôòïS~õƒ(‡¨¥¦l—«¾úêI€á—U‚ª y‚ÒçA;=áàGŸ§;ø^éÃáéå5˃5eZ‡>Èó5i¡m卯Upèþ ÿÈYQÅiÃÙç§Y*2ŽD1>GŸ?ýu¸:+² 55Xü!¢«Ö¦ô“C^6%Êêº0-fqØ…¨:Á¢´¿DIz䦆Z˧‰Ì]ü‡ ¼òå}”àМ)u§‚se¥3“â–ÎwN¹7Ï$K~×¼¼¼æUP#\6•qš 2©ÇoN¥¹SiPYghj…‰¼Öß5ŠÝ8MQ“ä‰e(ªqèQ©6‘sˆÂæÎ.ûÍùL5—q}`Ù“±¡7Çá³=X$ݧø×rÑ´}ûi& €%/ïÒ­‚ F/Šðº+–Ù)ûpÜtü$Èd/¨øm*z.¦Ç[½¥Ï.ŽD²ÖŠl>/jã’/ÊmZoYù`(Ü:¾0S›Ú•4h·Hr.€±Ì—[ÒMlfRA¾ý¤IÌd¢^Ñ¥õL¤¼èòç¢smþ'íõYFWA¯LÐ#ÝC]˜J’Þö;®nÚÖ$Š#n%àOÃÙ å\ew$ïœê]{ÝÂp8Ü5ZYýž}œ8w ²P.¾W‚>v3°®Ëû ë¶%}cη Ù í2°vð“:0³Ÿ"d„úëMT{úrôÈ‚uz.‘(ÅÐnðÇ™‹æTmêåý7îîøqʾϡüµ+çèUt2³ÊÑq?5Þ4‹”žýtÄéH·ðJÕq¤“óʵ*Ðmé &î9÷†nšG:rÓBÜó^qÀ¨ö1­í}A¨Ý ®)¸T·4Òé¬ÖM/xòL[Ö¯y†h¡™Öí‹å"˜òMÕ¶TB+›!•æ0Óš²ÌõJýŠÍ`H•†Yf¢ù‡+êf$¼}oÊir Û øI3ZÕaeºIíBrHPQÒP òjŠe± ÷É„eTc;Ýöà²(Þò¹Ñ \m…Æ‚B‹{¶¤®£gw[#iLUiÓQ GË<³ù´~ÅÖÔ•êÈx:Áp4#9ìP@Úqâ/l¿6Ü÷A^£:)›~üÜé|ûíSdÂ8É®–´·ì»ß6;þ¾1yåendstream endobj 173 0 obj << /Type /Page /Contents 174 0 R /Resources 172 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 185 0 R >> endobj 175 0 obj << /D [173 0 R /XYZ 71.731 706.3512 null] >> endobj 176 0 obj << /D [173 0 R /XYZ 81.4147 674.7696 null] >> endobj 177 0 obj << /D [173 0 R /XYZ 71.731 663.7458 null] >> endobj 178 0 obj << /D [173 0 R /XYZ 71.731 639.7361 null] >> endobj 179 0 obj << /D [173 0 R /XYZ 71.731 639.7361 null] >> endobj 180 0 obj << /D [173 0 R /XYZ 81.4147 630.2366 null] >> endobj 181 0 obj << /D [173 0 R /XYZ 71.731 619.2128 null] >> endobj 182 0 obj << /D [173 0 R /XYZ 71.731 553.36 null] >> endobj 183 0 obj << /D [173 0 R /XYZ 71.731 538.416 null] >> endobj 184 0 obj << /D [173 0 R /XYZ 469.0454 528.9166 null] >> endobj 172 0 obj << /Font << /F34 66 0 R /F32 62 0 R /F47 140 0 R /F49 146 0 R /F24 54 0 R /F51 165 0 R >> /ProcSet [ /PDF /Text ] >> endobj 188 0 obj << /Length 1895 /Filter /FlateDecode >> stream xÚµYKoã6¾çW¹ÔbEÔ[{Ûív‹ôPôŠnÐm+K†D%M}‡âC$%¹Y Ý`!K¦†3ßÌ|3C£h“"/ á!/ühSœoüÍ ¾úùÉ%Q’xAŒ¸Yøv‡©—gA²Ù›B>=ÞÜ ¢Mà{IœÅ›Ç£Ú*ÉaUæg›ÇòÏí¾0ÒíöAšmCO\?wôY=k/Œ¶M¿ûëñ—û/a°É½<½@œ¿Ù9HLâQÒ;„üm;ð÷b‹/—š˜¿,T¸X+®´¡ŒâšþCÄ}MåŠÏeGwA¼}Þ¡xK:ùâáU\{ÂmNò¦=“¥wÄ3¥ýxóBY%U¨ˆ0(J7”DÜ 0Š=  ,ã2OEÛ4O°ß“ôÕ}øÐØë·÷(ðòE£Ü”W·D^¡x}ǧf8“ŽWvFqæÅ~I!c‡; ÕqhŠOÜ?V¬¯¾tä@»r¼~¸\ÚŽõ“Bf[×-_ü¢p" épÍ•ósßó£$·žø0®á¡“zY‹ïª¶güùÍO:¬e°ÆYîe( —"?ð¢ÜOí¬p¯:KÒR¥.†Ä1I,0!7’8 §}¹~5®hƒUÀµ§‡ßdÈ—eGz W{t`ûB-¼1ÃÜÑB>Ž·ÒW¿«ooë¶À5ßûÖÞXË¤¡TâU§å(JùÀôOÑž/S®W9Ê£‘Ì~ˆ— 2L* M£ãCq€VX¨1~<㢢LŽ02|$ŸC•¬êvQ sªi a/m÷m!7²ÐóQª$ð$b•¢n`·M-ÓæeT†_E<‡Iü ôkáõ„ +!—™Àßî' x>K_–/6-Óçh7&‰AjÒˆÉæê£Ðø”Cäá\Q˜wÓÒv`vÄÂ?µÚ¿àšÉ-x9¦%7xy‡þ Eh4ÀÒ1fW(ùBAðŽ`H¼Bj•EóäÒâvHŠˆÀ€‡Øà^Cã‚û^º«\AÈÕ ’8z?DL‰ëˆèU"–Âÿ'2åáJ”DAæE÷ÃÄxµê­Qb3? Sª²ê²ºl,žÄ—”ñ0ãöKמ:|–´:(º8HqøP“·³ûJYµT(lÚ§MÏp]}Þ6É1„¥‹6~Þ ¡$õ"?Ϧ6Ú¡ñÍ9­ÇÐg™ZZ@ùc ÆÃ«\Ÿë£ÐKý8•ëÏøW©\Q‘b©tD9晴|GÆe½vˆxt˜Iš¢-yL/‡f!•þ;ö0¦ÄõÐÔ«¬Ð|øøë.Œ·×+Xp‡ ÝhEU¨hQ9U´µ£m lìÖÙ)”mÙ*°hD䫪{†¤òZ ÌZ×¶=­IÃTQ‡mw‘¯Z\0Ç®=;»)[¦^a;Õ~õnÐÔAÞ‰näÜmwµYÓÕö·x`íí5?¸Ex KU½]H´zíø™Jr›ˆ¡fKBWÍånsi¤£žî‘©Á׆ŠiDÙsx)¿/Æ:Ük^!åâ1‰{*%íV’5È"@7yÇ:bJ\OV½J$ëj“ šƒ¿[5à± 3ÕÖeÿ3Ç£&j0üL.¤)×v9s/ 7 C-4ÌaªTMwŽáAäù~žËE£wFZ¾Í€oáŸégüªïèN,x&eϼßUU×YÑ‘sˈ5¡¸#´W|ûŠ^\ÑÍéέS]>cVT+É-ílK—œÇöiWD!´íoX¶ ÏH(†äóõ”¡ã”0÷nK‚<ýïšc ŸzÜì%ÛAÍ,`λÑJÅÓ‰èvCM|¤”!@â†ažØ¼øÒQ…„v áÔü÷ÈÏÅÀæz]/6.iîeS×A^ŒòP.ú/ºÕ¡º·˜Â©Â|¼Ë¥߀€Ð# ?+úæÈ,ÐR7%X¿µÑt±ÝœŒ•ùdŸ Œ7ÏÔÌ[°f-§R¹€™íi?µ§ ¹¦]q;Š[Ë9nþÛtêNSs=‘AcWaE¥}°9íüÁ=Ÿ›Fö·zÕifD¤çC˪õymÆh'õ/*UØ[¬í‡#·w¬ß”¸GÐL‘Гúèö`+'–£zí‚GO»x‹Už˜48½æÉD[øª™‡æÇkí›z6‘žê^Hyg÷Øíù-êžÑóZëå„Õ¼¡ã}¶ôƯ@ŠõÌʆܹ*««yŒ³ˆ£}v4’-= —söÓëÌÔ™nŽÕ¼. ý0ª9ÿ:êÞ}w?nzÿŒá=Ü‹Yòþ¨º¡…3ôŒsa>"çW (­¥“F&®g—Á‹Ýk«Íþ)Bø‰Q˜Ca4†_ÙO+ݬ|†¢äÔ«¹k§(›Æ­ÛëÒ¯5î¯b ”fA©Œ1Ï"xkÖ)†›áÉõÖNs2/CI¾ø{—\²7Öˆ¶Ú<;ŽÃjI³ÈÝMÿt¶°ß¿Öþ/Rendstream endobj 187 0 obj << /Type /Page /Contents 188 0 R /Resources 186 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 185 0 R >> endobj 100 0 obj << /D [187 0 R /XYZ 71.731 706.3512 null] >> endobj 30 0 obj << /D [187 0 R /XYZ 318.5354 691.2808 null] >> endobj 189 0 obj << /D [187 0 R /XYZ 71.731 670.2196 null] >> endobj 190 0 obj << /D [187 0 R /XYZ 416.8528 661.5443 null] >> endobj 191 0 obj << /D [187 0 R /XYZ 103.2725 648.5929 null] >> endobj 192 0 obj << /D [187 0 R /XYZ 71.731 633.4846 null] >> endobj 193 0 obj << /D [187 0 R /XYZ 71.731 618.5407 null] >> endobj 194 0 obj << /D [187 0 R /XYZ 71.731 607.6465 null] >> endobj 195 0 obj << /D [187 0 R /XYZ 91.6563 589.8133 null] >> endobj 196 0 obj << /D [187 0 R /XYZ 372.6201 576.8619 null] >> endobj 197 0 obj << /D [187 0 R /XYZ 71.731 538.8396 null] >> endobj 198 0 obj << /D [187 0 R /XYZ 71.731 527.9454 null] >> endobj 199 0 obj << /D [187 0 R /XYZ 91.6563 510.1122 null] >> endobj 200 0 obj << /D [187 0 R /XYZ 71.731 497.9927 null] >> endobj 201 0 obj << /D [187 0 R /XYZ 71.731 485.0413 null] >> endobj 202 0 obj << /D [187 0 R /XYZ 91.6563 469.2654 null] >> endobj 203 0 obj << /D [187 0 R /XYZ 71.731 457.1459 null] >> endobj 204 0 obj << /D [187 0 R /XYZ 71.731 446.2518 null] >> endobj 205 0 obj << /D [187 0 R /XYZ 91.6563 428.4185 null] >> endobj 206 0 obj << /D [187 0 R /XYZ 259.0661 415.4671 null] >> endobj 207 0 obj << /D [187 0 R /XYZ 359.0606 415.4671 null] >> endobj 208 0 obj << /D [187 0 R /XYZ 71.731 403.3476 null] >> endobj 209 0 obj << /D [187 0 R /XYZ 71.731 390.3962 null] >> endobj 210 0 obj << /D [187 0 R /XYZ 91.6563 374.6203 null] >> endobj 211 0 obj << /D [187 0 R /XYZ 71.731 341.5793 null] >> endobj 212 0 obj << /D [187 0 R /XYZ 71.731 328.6278 null] >> endobj 213 0 obj << /D [187 0 R /XYZ 71.731 313.6839 null] >> endobj 214 0 obj << /D [187 0 R /XYZ 71.731 301.7087 null] >> endobj 215 0 obj << /D [187 0 R /XYZ 91.6563 284.9565 null] >> endobj 216 0 obj << /D [187 0 R /XYZ 454.9797 284.9565 null] >> endobj 217 0 obj << /D [187 0 R /XYZ 338.986 259.0537 null] >> endobj 218 0 obj << /D [187 0 R /XYZ 271.4801 246.1022 null] >> endobj 219 0 obj << /D [187 0 R /XYZ 71.731 187.1584 null] >> endobj 220 0 obj << /D [187 0 R /XYZ 91.6563 150.4609 null] >> endobj 186 0 obj << /Font << /F24 54 0 R /F32 62 0 R /F47 140 0 R /F34 66 0 R /F37 77 0 R >> /ProcSet [ /PDF /Text ] >> endobj 223 0 obj << /Length 819 /Filter /FlateDecode >> stream xÚVK›0¾çWp©ñÚó8ö±[µR¥¸u{0à$ÖŒŒÙUúëkb›!›U~Ìxæ›oyPÿ— „z‰ÀF^yÜ@o¯Eß7ȪDq 0A±>¬H·$L@–âØÛN|É7O8ò01I‰—8ÓZ)L½¼úã=ÐV1lq’ú0ëï „>+ûšSÉg¹>˜ø¢7‡î úº2û—FˆøoæD Ñ«àoþóá)Ä^²XcÓî¡·Å™F“³çüÀ»úåˆAjÞ){?˜Õßslˆô•Ø™U˜Ù> endobj 224 0 obj << /D [222 0 R /XYZ 71.731 741.2204 null] >> endobj 101 0 obj << /D [222 0 R /XYZ 71.731 706.3512 null] >> endobj 34 0 obj << /D [222 0 R /XYZ 535.2205 691.2808 null] >> endobj 225 0 obj << /D [222 0 R /XYZ 71.731 670.2196 null] >> endobj 102 0 obj << /D [222 0 R /XYZ 71.731 620.5332 null] >> endobj 38 0 obj << /D [222 0 R /XYZ 281.6875 577.4357 null] >> endobj 226 0 obj << /D [222 0 R /XYZ 71.731 573.8722 null] >> endobj 227 0 obj << /D [222 0 R /XYZ 71.731 565.2645 null] >> endobj 228 0 obj << /D [222 0 R /XYZ 81.6937 538.6611 null] >> endobj 229 0 obj << /D [222 0 R /XYZ 71.731 523.5529 null] >> endobj 230 0 obj << /D [222 0 R /XYZ 81.6937 507.7769 null] >> endobj 231 0 obj << /D [222 0 R /XYZ 71.731 505.6201 null] >> endobj 232 0 obj << /D [222 0 R /XYZ 81.6937 489.8442 null] >> endobj 221 0 obj << /Font << /F24 54 0 R /F32 62 0 R /F34 66 0 R >> /ProcSet [ /PDF /Text ] >> endobj 235 0 obj << /Length 2199 /Filter /FlateDecode >> stream xÚÅY[oã¸~Ÿ_aø¥6h$ù¾}Jf’EŠÌtÐx[Ý>Ðm³‘D”&뿇â!EJŒg (D2Eò|çö*™Äð—L6I´YÀe™Di/'Yù!žœàÑÏœ²\¯£t•¬áGàéíj±‰vÛt=¹u…Üï?||L—“4ŽÖ«íj²?š¥Ö;˜µ·“}þ¯Ù]]Ó*g¿ÍoÓÍvvéëÏ_Ñ7‚R}÷™gmI«†4ŒWzè™e´’tþïý_>>.ÒÉ.Ú­a°R<¹Mw°ØzÕ-ò÷y’$3*¤~uÏ’(¹Ñw_ˆÈÎú6ãØ Û‚°õR ëÄn@b­“í®“ø‰×ó$ž];ýö¯ñ*þÿGXw‡:ÀÝ ?6oê="päqž¬f¼­òN-ÜÒS•EúnµÓ×ý|ÏhYøÚ·‚dg¿´¬ÁáÅ"ÆÁ{.+ï˾Æ)Àp›,âþýË >xø®¶AÅ…W(‰I„Â1­WëE§uMEÉš†æzRÃõ5C0ô/RáãœÉF°Ã3)ÐÄZ ºª…’QÌ™T'VpûU£»VHQðyºš½Ñ< øÍ­±u.½Hµ‹ÆhŒo{¸ûrÿü`‘éælº9û3î±nEÍ͆Çú<»ú˜AƒcI^Žø”˜Áª%ª 0~¿5Î_qˆ ¼6gŠ·oB©òAÓ¿¦GpÆ)._™Ýኲߚٹšžóò'«síVɲÓÙl›HÙ¦ Ü‘7ÙèQ=?Ò¬aýDo¥?äY‚†|‹ÇxcÍÙGpã*%ÏÙñâø ¾FY¡§©Î/K*2ÞsñW¼ò®W3ô–šqkÁôèÍUO¨•Th8ðùÑ,aÁ#-(!PÔí¡`ÒšF'™‹æ‰6!3f Íf¼(Ž,.Œ¿½™ÉB6ªÔ¢ JK–SA­©d­†æ%»„2ïqœf]ê“ÆÛsœw¸8~-#?è¶tWà ±xe+ãÔSãV=6Ó^/SJJÌ~š3AA'ôYøGÆþk`¥2ŠÃ²•PJZx¶?81ac56rIéÆ0ºà“É\Uµ¸lJ×YuC+*H‰NùTæ!;i€² i(uSÉN•q 낍S(ƒ¦ÿÇ|k器4àÚÂ_í½ì[™PÎMô˜Hiíœa\èl,Cjhø›2E3b†gb8A”×qÉ]ô“g€^r-øI̤ò^‘[? Ã é)o*¿³ÜÆsÀÅ0S"¤Ÿ:R-çT¢SÞ·MØ•¯Æ²M52$ ãQ­?ûfÌHåØeè’0 ¸øõ¶5¡1H†¢{~šCFyAå øe{øÔ:³%(Ê–@™y;Ó¾ˆ)ŒIô¹)ºžõkÁ* ‹bˆ¶'‚v¥ªÊPŠX•±º/u™A†{;[žã‘‡::öeì6k,7R=Bµ¨²pœ'¨ÇÝ·oÏOŸîŸöÿÄ¡¯ŸõÍç‡Ç§¯Oû§¿~} S³ ž¤® K<-•q¯}è}–…p Ã*`CXåÛüG´yÏý*gc'7g^Ø %ÉeDr•W7>îS%\::äà¥üqEsXº;5mÙÔf;$ØééL| iÙfç÷17@WÀ7TÒò`ClX€k§ª Š–*“±-¹²ÓòxŒÆÞôÂÛiò9쫦_ã˜7ÝFtúÎ>?ûD¡ç"d¾÷¡Ï³¶/Œû,±æÂ‰Çc˜÷MZ‚ÜmènƤû Õ”?Zº)@Ë‚X÷„dfýÄ ¹z¼–œè»˜/³©!Þ ¨åRñðц§EáJôà ŠZŽ#ýAüê6ˆþyð­Íà0"©Ée0«Ã5ì0àÀÞ ¼Ë©®µ0EW–¬h¥C%»œ ó:nA å™Õ×ü]ur`ü®ÈûŒFÿ4_­fFFÇ´@Ù”>u4«ÓÀØ[#+»Ó“€“Ù€ôs«r Çåûlϱ#fO9ƒؘº¦0î[`óò5e¢^}n#LÓ«LIÉÆ`×a5yÅ,_aÎ'‚ÜÈéú}³nÐ>€'dòÆ m7ôÏ>ÒKÓZR¥åC]2ÔA»HÔŸoÙ0vELJáaFAFPp.XfЍQ¹›ï“JO7]W'Ÿ£ ÏNpñ¢§sæÄ¥ïîq †þ—K—ÌŽmëwæv5/XÓOºÄz¥<é&ñ2ºzØ4}ªæË[RÁˆñ/4·ÄcYqFEcmv‘1¹kXSžÔú®ÃR¸Þø5Ñ9 hΣƒ°ñ~P™Ü¼sLår©>p½ß‘„Ã<ƒ¤D#ÚsÕ ŸÜ¬ážØê¸½nèÐLô×DJ(oÃÜŒb†ÚYqæÇ†xìJÖvæÇÁ=É^øJÀ,xþÿië1±ý|±š)–¹VÑÕÐùâAÅL6É „Ð[AINì —ê2àrŽß¼sQ<œÐ“5Íâì«ìŽRX¬è÷2*à'÷ GSâ›ÑºªÌö§E£®ù;£x†>àËê ‘æ¡bk§@/BTkcÇž»9”º-æîƒZ ŽªÏ¶ieePêŒ[W2Ö®óuÜKöÅÍ[²†Pm¼£•k æ‚(qoÒ9zÉÍ ˜ò:]¥U"ö+}P·-kÈøì•Uu;¤x°Ú!›y<:,’wœÀ'ð¶¤Yþn¾ûè”O›>Öèeÿg{7c(Øû“f‡ôô=þ3Á0ÈÆäqêì,¼%¯mmŽ(»C‘{ûÙ?†.·Ñ6Yï‚VqÊ­3§ûªºX:Ÿ¬V‹4ÚìÒ^’Âq=\Í~£ ¬÷;yŽ-\endstream endobj 234 0 obj << /Type /Page /Contents 235 0 R /Resources 233 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 185 0 R >> endobj 236 0 obj << /D [234 0 R /XYZ 71.731 741.2204 null] >> endobj 69 0 obj << /D [234 0 R /XYZ 71.731 706.3512 null] >> endobj 42 0 obj << /D [234 0 R /XYZ 532.0396 691.2808 null] >> endobj 237 0 obj << /D [234 0 R /XYZ 71.731 670.2196 null] >> endobj 238 0 obj << /D [234 0 R /XYZ 71.731 660.1048 null] >> endobj 239 0 obj << /D [234 0 R /XYZ 71.731 650.1421 null] >> endobj 240 0 obj << /D [234 0 R /XYZ 71.731 621.3466 null] >> endobj 241 0 obj << /D [234 0 R /XYZ 71.731 605.2555 null] >> endobj 242 0 obj << /D [234 0 R /XYZ 71.731 546.4112 null] >> endobj 243 0 obj << /D [234 0 R /XYZ 71.731 504.6328 null] >> endobj 244 0 obj << /D [234 0 R /XYZ 71.731 434.8944 null] >> endobj 245 0 obj << /D [234 0 R /XYZ 71.731 416.9616 null] >> endobj 246 0 obj << /D [234 0 R /XYZ 71.731 371.0687 null] >> endobj 247 0 obj << /D [234 0 R /XYZ 71.731 340.1845 null] >> endobj 248 0 obj << /D [234 0 R /XYZ 71.731 257.4946 null] >> endobj 249 0 obj << /D [234 0 R /XYZ 71.731 226.6104 null] >> endobj 250 0 obj << /D [234 0 R /XYZ 71.731 195.7262 null] >> endobj 233 0 obj << /Font << /F24 54 0 R /F32 62 0 R /F34 66 0 R >> /ProcSet [ /PDF /Text ] >> endobj 253 0 obj << /Length 2323 /Filter /FlateDecode >> stream xÚµZKsÛ8¾çW¸rY©JÒèiË{sâ$£­ÄÉn4[“ÚÙDB6$ÁÀ8ú÷Û Ð‚¶ç°åƒH º¿îþú!/®æð·¸ºYÌnVð±^Ì–Ëùú*+_ͯNðÕ‡W »dj×LÃEoö¯~y¿Z_ÝÎn¯—×WûãÕj½mVë 쵞mç7Wûü_£»º¦UÎ~ާËÍ|t73Ÿ~3ïÇ›ÍHŒW7#JÍ“{ž5%­QŒWæÑG–ÑJÒñ¿÷{õnïÄÚ¬nf·[8ûIÙݪ„ôË@z«ãõíõlµÝnZá”Zr*Ù©¢¹¹SÜ~žÇ‹ùˆeî¹°«™Ìx#ÈÉê$›ƒ¤ÿm@+s_òœý1Ÿ/³@ÉÃÅ| Jr*¤¹aö³âöÍýxx‘JÖDÀvÎ;ó‘ñZ‹sAáˆêï.ÓÅrv»Y¬[-_G›¾î¾•‘¢@Å_® èñzæöpWËm»Ï»Ÿ¤¬ j_ãGÔ)r(,G.J¢¤»Ijå´a¸«²¢ÉíuA˜íîëÛÝÎ\>2uæ LÄ÷¦žàî7ó/6£Ÿ¬:rܱÆÅF¦I šÄ¼üûàKíÍן>v=àw|ÐHVÌ%±â7‡‚eÅ.ç£ãåfDXáqºßßÛ½Ie±— .‰È§¯ôén_É4ìæú×=œP¤ë¿øsS’*å“Ö±Œ¹¦ëä —êk&Xx|¹?ÞÎGö®¼Œ*".‰¼›f(ÊúPð t´2ñIs¦P'^!¤I½sÛ`å"w_gTJ.äóVt€=žYvFÁ½­œ”¿àB»»3’â¼°ƒ?'ZQA7ä!±c8AJ’YE§f‡Lë(TÞdøq’¼¤Oaæâ nDÍ¥ zm„ëÍ(É{”ÓSè´_tlYZâ))0Á$:ƒG°Ê)vàüû$Â@ùmkÇ¿LIZÑ‹F"5¡-¼(¸†øÑL¿ëŽÒ<Îg^äI)Zê9±ƒFK±¾ ¦¨`¤ÀÇH»˜ôÚDz(O{$<%[‰À€ŒöE à™Ve†ùdi1…çÖÜßew‹Nx¢ÃÃóœ‡Éœ­k–}Rß\¬(­ D¼aH`‰ÉË#¶¹!w…ÆAL<Æ@PΧ8]Ž1’*£Ý¤åÞDˆþ¢ë ë¸B<ù(?ÓO¬ T•[Ù;éÀóËÀW¨_U¦ÀZZËþóÝ?ÞhäîÆ‹Åb´ß}2ß~þòm÷ð!ß`¥fôÃKªŠp,5ì -Þ(S -ÚGêxCk¸œ5¥…B²¦Ï+K*2æc¾âUçK=ÆŒzë̇¡N# _³µ^`@MÌ.P]ÁNgeƒÃZiWÂW š¸Ø\Kr1nW›ƒ;‘¼ÐW˜²F¯áÑÎŽz­°uÌPÑÁ]aåÔO˜h/hs’爴E>4 ”íºpDœÀ©&Iñ"®…¹ìEQDfÖUϹtŽŸ+h*¨€ dÓåD}öÜ´É¢‚”Q‚‘×êú¤]zlD‚qŽá° «Ô‹Wé»~öº‚ ‚,¿š´ÓÁuíJ'½cÂâ2’e´võr ­– Z t CÙ™T'¥U#¾•ewŒôHżMÄìb; iÅ›“M¦US@Ä+ Sƒ´L ÉSŠú¼Üƒ½ë¨ª¤™×5û´×Š`T£2@jªœÆ‰E’r@ ¨Ö]B†­ZóÆayéIÒmÀÐð\ºæJäÕ¬KøÆ¢æóïÚÓŽu÷°ßí¿¥péY¿•Cž…WhÍ^Dtsq?%.w`¹¿˜ÏKZÜ,Ì¿ž~ i°Ìų­’žô60èõ…JN}“B«ã¨-÷è|YxF¢½"ÌaY¥G§ÙDµR;œ¢<§Ñ_mÅ'€û¦ÝÅ |:¯b1é|Ô[%T Ëéñ†dߧω8pÎÞM³Ñ…ÙÕ0毼mcÊœ/©„ãÓf\€ÚH‰I/0V‡g÷Ï©U¦tåÍÑ8¯ð岃D>ƒ]ÝPÀoCµ•Vªh*g„ð“ß3©ÝA4>)'HÖU:¹áZ¤¼8K{LÒsÄQúy¯[’=J÷øI×ðw3À|­ÛÚK„Q ìg˜Ó~ ¥Ëã%áS˜r&ŽÏBVT«Óv-SnÞ«yõÀv _ ™6‰vÇ^ÕòrÞífâ©B·'èEƒk¾ç¨Ô%¼hÀ-y•z’¥žbTÌòÌ›'MczaÈ+ïIÒáúÇ|3GlËNËCd ß@40äÉ`“Å@ L5¤x!íêB—U íYÀ뀑ü?$sÞÖŽ;ž4gº.H·ýéáÿ«dH%ìÀ‘:sJ’®¥ÍÐL7~þ:4‘;cÏžo(Á‘R¤¼yÑûâÖÖ‰Qœ‰?¹kJ9ãkXJNu£ [¢öÍØIh{M+ªpÎüþ2¡}а*žcë- ª^Ø ÙqÖ'¨gÆ„¥€õ1æ0wL†§²vŠŠ3!§á4˜ÈxìüÎMùZ¨ºt’›&¤*¸ŸHsê%p«+T·†ìÓé’ÌÑ©äÚ 2ÅOh7õP<ãÅ`¿ÖôÊÔ‚(åÊ’ZÛt8nT§kõÜ„‡7¹3,°_-øø#Y¯[¦_ ¦pN†Î1Äø6(Àp* %44M@*B¼ÀEM‚–îW&un:¾áÃhhæDûM`7¦P¢è: ¨A¢±ˆºY&9ª^÷Y¸ •Ó—ôîÕs,¢“Y¹:Sñ0N…oñá”dI¤re½«€= (¢‚wŒ­DM%Ó/Í‚8Mvó»è7N]kPœ­sX¢ V$“ÁÑXKzY\FÝï!Ϥ±Gоt G—ÃàÐŽÿ;R ?\I`<<^‰âáÄüPÉIZv9üìgßøZ0[0 z tã:÷ŽÅr/¦{%-¹¶¬öéóýîýî-α??|ø·?Õ¯·³íâúöÉÿXÖôÿaa³ZήWp«´7ƒÿf8ïôú åendstream endobj 252 0 obj << /Type /Page /Contents 253 0 R /Resources 251 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 185 0 R >> endobj 254 0 obj << /D [252 0 R /XYZ 71.731 741.2204 null] >> endobj 255 0 obj << /D [252 0 R /XYZ 71.731 676.2989 null] >> endobj 256 0 obj << /D [252 0 R /XYZ 71.731 606.5605 null] >> endobj 257 0 obj << /D [252 0 R /XYZ 71.731 549.7734 null] >> endobj 258 0 obj << /D [252 0 R /XYZ 71.731 533.898 null] >> endobj 259 0 obj << /D [252 0 R /XYZ 71.731 451.208 null] >> endobj 260 0 obj << /D [252 0 R /XYZ 71.731 431.218 null] >> endobj 261 0 obj << /D [252 0 R /XYZ 71.731 413.6588 null] >> endobj 262 0 obj << /D [252 0 R /XYZ 71.731 317.6439 null] >> endobj 263 0 obj << /D [252 0 R /XYZ 71.731 286.7597 null] >> endobj 264 0 obj << /D [252 0 R /XYZ 71.731 178.1669 null] >> endobj 265 0 obj << /D [252 0 R /XYZ 71.731 147.2828 null] >> endobj 251 0 obj << /Font << /F34 66 0 R /F32 62 0 R >> /ProcSet [ /PDF /Text ] >> endobj 268 0 obj << /Length 2442 /Filter /FlateDecode >> stream xÚ¥YãDú}~E4/$RÇøLœ}˜ƒaY„Dƒ´ÚåÁ±+b;¸ìmúßïW®ÓuØn#œ8_÷]mBø/Ú£à˜À#‚8ÓMy{nžà§Oo"²ç0{è›Ç7_LÒÍ)8âÃæñ²IÒ<È’4\i‡ÇÍcõŸí»û5þs·³pû.`ÏO?þÂ>|ÜeÙ¶Û%Ç-BìÍû¶n¨é‹· {õ.QCÐî·Çïß|x”leÉ18å@{–w åà>Ö¸ç2N‡ Éóldþß»( ·íÀظ/ìCÙÞwðž+šŠ}¨0é;|ÞÅávè¹4{ü«­ðÃ0FôW@mQG¤Œí…=û«¡ömh*Ôe Š¥Z"S•ÚÛØà2áßÏí.ʶÿ£ÿCTµ ®}§,JGáïƒÀ•຿œ¡“Õ¨ ÈàlY\Mž{‡JLPý"`21ûûöŒûë«ÉÐ_ë7Oê/’vm¬ð Þœ¹zdNbžØ^’—J¿qNKÍ«-ZËâô-×ŵE»XXOè±%ÑÂó&’2‡žz®à÷<,? ¾+æX†µoáPµ’ye}Ð'Ž›WÈö3°Ç ÍOÙæŸ‚£;'q ½åkט”“d¿ÂÏN’æS² þh 7eá¡6KU»$“—ü‰Ú¸xB¡³PzUÛXAÅtG¸õðE8#}ÿ¢Inê-êŸ)¹/]{3)@$oú·D…—3Ñ0gÆ­.!ÊbTîç+.y ×v¨+C@à©ã„žå'.õîm9ø‰&½pGËßÁm÷2I¨  Šåqd× ‡Øƒ•6IqC–M 2±Ö¬²,}p–;ü„›¢æ†3ˆ~iCÉ#ll!|Â*Ùp¢wÔÝ0¡ V(ó LŽÙ&Ë3è œÑËö:”#zM\Tqßx£×Er9zçY°pS~À"¶+Ã÷Á°æa!C´m¤¥D½þ Š&ªÂóŸÁÛ ? [tˆÜŸÍ‹€ãT®øîñÝi]".7}U*e²}B½ô0U¹…‡Ñž¡WZy—‡Í{Y ß…s±V5Nc¬k³à±Cò©°ü[ö¼ SÖPte5.©Xfð… t¥§Ãñ°&ÔL˜(Êþ·þ0q\&³,X¸) ?CÖÅÉ]–8 ÑÈth;„/‡­÷Ñ‚xqÂHøz’,NA×éi¾'Ñ¡ü=‰„¢ºzï7—ƒä sͲ`á¦,ü™uz$ÊÈÑZ ÖABI¹òHhÚšá¥pt@vÊ’M‚(Œ#_Œ@{ÊS\Tœ~:H®Ðè, î±Ñ¬*Ù†°çÆ*È:2.¼ú4R9ôà;góŽý÷¢”I¯oÍ@ec¿m tioÒ<¢Ã)q[ˆíu(‡…L\T=wy¸õZÉEvÙJólX¸)Ÿ›²*Q¢ñí†*j 1‘—Þ1{û´ø0i×j¾º° Ë{ªÉhªÒPivYS»NZGGåzÕü-)ƒ”7+ŠÝøÕ€ŸÞdkN%{n<¨©†›hÆkNtoÒM³cçY<Ÿtu(Ò•PTQŸüÎç ¹ÂùfY°p»“®R™ì—|^¤ô?ˆLMÇÊ0Ö§´­=zD–øy²'’“[‡þp'\ç[}¤•û-(}ó§ ¤OÃ;6¢,|E«-ñŠéw‰ø¤a´à hÆ!8åê;¿?ØôV¸Ã}³–‰¦5c€Ñ bSXĽñ"Õ–$ ’Tú4̃ô»ƒIíu(ï&®‘y¿ò$Whož·;˜Ôp­ñãU ¾åÓþ[s‰!ç„ÚüµÅ]¤e1ÃቤH×Ù"Õ;¦ •ƒ5B/¨èhàò¯ b‰r~RIÎ |KÉ.ÚòFÞŒÞOF>L*E›•‚b#ìi†8ÅÖL°Å“žÞ‹Ù7`_?+âÿÌ‘7-{*#ÁÚÎD[a'x!í´jN56Se‡´a9ì²ÆÓ™PºÂÒ<2I Ö”;áyJ¥Ž$j,€\c¸¦íŠ"e‡Ï¶ÔËMƒà›jÍ»9³TG#—ç!=&Š6 ŒÇ‡<òd$´×¡éÀÄEõó½7#¹H.g¤LÜ ©Aý3Íäm÷…'„–õôîÅ­¶Â\(·—“s„Þ^e©ví¤oÝ®+r/:‰ÄWyœ=¨o1\ã/ Kf˜¬V ùû¢¯Ø3‹>ò üý\$Wî+Õ1ˆ<%{æ{ “™/ZTJÓ‹”wÌx¸ÉB³ 3s¨É&aU—9‘Yd´JÖ,‡EK" 2ΧIMB‡~×t\áš³,X¸×n(WM»Kç˜ÆÌ¥yk>›#ƒ’z. &lðÄ=ÜΨS‡;‡• Ò©œù¬VÍd§féWŠy(á¾ÓÛI8>M¿Ê‚<ÎÀIDôƒÓ¯8Ð^‡rø•‰kÜVùýÊAr…_Ͳ`á›T£½2í}h*xºæDZ(d —¶:Ë´5þÕ_¸>á¯QQD¾­­,Q h¦Bq ªªýÖ²é­0Ö}3ë+ vH?-×Ç"t¼Óðä°†hu¦†œÖ-ÑCLþ,îFàÆ:¨×Ž9u&æÓë&÷Ñ18%q®>Œuøõ„¸‘éÆ@\Èhúý­èå2{zOL*vaOè¨þð¡¨ñåeª<£mªB\•°wŠŽœF d!4Ø´"6€1,ŽxaÔÀÈq•Ä­_¬Y»¨&fò»²> endobj 269 0 obj << /D [267 0 R /XYZ 71.731 741.2204 null] >> endobj 270 0 obj << /D [267 0 R /XYZ 71.731 753.1756 null] >> endobj 271 0 obj << /D [267 0 R /XYZ 71.731 706.3512 null] >> endobj 272 0 obj << /D [267 0 R /XYZ 71.731 655.3774 null] >> endobj 273 0 obj << /D [267 0 R /XYZ 71.731 650.3961 null] >> endobj 274 0 obj << /D [267 0 R /XYZ 89.6638 629.6388 null] >> endobj 275 0 obj << /D [267 0 R /XYZ 71.731 601.5791 null] >> endobj 276 0 obj << /D [267 0 R /XYZ 89.6638 585.8032 null] >> endobj 277 0 obj << /D [267 0 R /XYZ 71.731 558.1171 null] >> endobj 278 0 obj << /D [267 0 R /XYZ 89.6638 541.9676 null] >> endobj 279 0 obj << /D [267 0 R /XYZ 71.731 539.8108 null] >> endobj 280 0 obj << /D [267 0 R /XYZ 89.6638 524.0349 null] >> endobj 281 0 obj << /D [267 0 R /XYZ 71.731 521.878 null] >> endobj 282 0 obj << /D [267 0 R /XYZ 89.6638 506.1021 null] >> endobj 283 0 obj << /D [267 0 R /XYZ 71.731 503.9453 null] >> endobj 284 0 obj << /D [267 0 R /XYZ 89.6638 488.1693 null] >> endobj 285 0 obj << /D [267 0 R /XYZ 71.731 473.7784 null] >> endobj 286 0 obj << /D [267 0 R /XYZ 89.6638 457.2852 null] >> endobj 287 0 obj << /D [267 0 R /XYZ 71.731 444.2342 null] >> endobj 288 0 obj << /D [267 0 R /XYZ 89.6638 426.401 null] >> endobj 289 0 obj << /D [267 0 R /XYZ 71.731 424.2442 null] >> endobj 290 0 obj << /D [267 0 R /XYZ 89.6638 408.4682 null] >> endobj 291 0 obj << /D [267 0 R /XYZ 71.731 367.4571 null] >> endobj 292 0 obj << /D [267 0 R /XYZ 89.6638 351.6812 null] >> endobj 293 0 obj << /D [267 0 R /XYZ 71.731 310.6701 null] >> endobj 294 0 obj << /D [267 0 R /XYZ 89.6638 294.8941 null] >> endobj 295 0 obj << /D [267 0 R /XYZ 71.731 279.7859 null] >> endobj 296 0 obj << /D [267 0 R /XYZ 89.6638 264.0099 null] >> endobj 297 0 obj << /D [267 0 R /XYZ 71.731 248.9017 null] >> endobj 298 0 obj << /D [267 0 R /XYZ 89.6638 233.1258 null] >> endobj 299 0 obj << /D [267 0 R /XYZ 71.731 230.9689 null] >> endobj 300 0 obj << /D [267 0 R /XYZ 89.6638 215.193 null] >> endobj 301 0 obj << /D [267 0 R /XYZ 71.731 208.0549 null] >> endobj 266 0 obj << /Font << /F34 66 0 R /F32 62 0 R >> /ProcSet [ /PDF /Text ] >> endobj 304 0 obj << /Length 2307 /Filter /FlateDecode >> stream xÚZ[sÛ¸~ϯðø¥ÒŒ¬)Q¶fŸœÄñºMìÎFÛN· I¨yQ2Yõ×÷8¸„d»“™Aàà\¾ó#'3ø—\\'Óë9\É4Mg‹‹¼z7»ØÁ«ûw N¹Â9Wþ¤÷ëw?}š/.VÓÕ2]^¬·óÅÍ4›/2Xk1½™]_¬‹nZìÏñUšÍF·S}½üMß|gÙˆç×#JõÈÇ&ï*Z·¤eM­‡>³œÖ‚Žÿ½þë»»µ+›_OW7°÷YÙí¬ˆô©'=žq¹ZNç77™þŸã$™šN‹Q‘£¾!E7ú"hî„ÑY[RœqyW TžH\Nôà7ã$}g…™ÆZ}Í88«…~ª›vÏê~ØŒÓÙ¨kÍ&nU=ÒlõõØt\ß}i öÇl– 8PÆU’NWY²PGû-Q.¬à<Ý÷qšgM‡KoWWÛ—¦Rü?Iu()I€½bâ(Åo8•ë~gêògá»vOZs‡nÐê=pxOpÝ ¥(.95ÊÿŒ"Í!H;4ì—ÜŒvc8_Íþëy˜YÞnOºvßp&½P‰­öЯ *µZ3÷µ9,±º¨ ‹©KlÜÁ–¡2&ÇËl„ {­ePW)9%Å1æ¬ÎË® RˆE¦ü .yp~òðž4rÉaµ!ÜRÑØÇ‹Ùh¢Ç±•yå~¨2¸ÝàÐQÅ2ܘ-Ì Oez5æM‰Hƒªê/M8é‚@Ú1éÁ¢8Ý“rkœ‡ÐH–Ì'><}yÿðøðx*}úðÛ—»Çõ×7dÖ¼©6¬¦g󃵈s*ŒÅôa\¾¤D˜tuáÜ.0à$2Ų^‰° 0JXzÌršÝx€X¯ ¨&õ,N’O76ÐeOdD­RŸ>•å‰ x¨%¢JIŒÂ¿ês‰xfCtS‹J`Ýh Älûãkk'Äí®vZÀ!¼pƒ¤`±µãd´§•~°[Ì+1±aØÛ“ )·J%Ê×p3ä@ÏúIiQ^[ad±UMuðòNt5ûÖÑ * KµÖ€D3÷¿@ ’ï© Fzû±;ÿ ø½8µiÕf’S9Éås·ž‘¸wL†¯ŸëF•”õ¤Ÿ¥hi#ê¥îª ì“Y—ùb¬qÊΤøO'Z—3¥HO8e·S…B¡Xyº}ƒSFVõèƒFv‰CG4?(ÔJ ö¦>öOô+d© D–×Ä˹ð…cðFxšø½xºüôÒðã¥þŽõ·N‚Æ øy ò@"“b¥}^N­é‹ù5èÜi~6êE‘¾Æ°‹ç=kkßæÆkal×ﹺûËE°ãò#-ŒÕìKôî€u¦4.€Ô´4Hâg%÷ûYÓËX†ZZîöùó݇õÃÓãW¬’?½Å-æ˜%À¸• O&ÆËÒ†` >Çšû¬O9fóôÁ­Oú`ŠGúà¥atjI•!aÐËR2½fj+¤ˆÓÙ8du¡Y>+:ƒ’Í/¤ã0èÜöui4À\&z”°8É -&Qhï³N¥Aµè $…ˆ-ËÆ´Ý@™ÓžMÚÈéD-†Dæ»8¨Œ·è¢{¤v)L¨C‡ICw`èhÈSç9Òàâ oéúa‚C!Ò.E¯RqU²Kþdh>œ!=¡ýŽsß Y|EyÓ³hÄâ^-á*Hò&Öi¾výœÞŒC5…gïùÔ˱ä*WËÚ>6l®zÈ\qªÈÙçóNìú5rcNu kÕ[É îï½»¿U5´„Wýæ÷‡õ/H?Þýýþ{\ã+¹õÓ¯‹î­-]¬45]¬êòÁsi»]¶œ‡Á–…!¿mŽ}äÒ&j2È5@-IKƒ: ¼’Êßl﬈nwÃ]LígŠ,óކĭ”ʶPòWÛÆo¸ëàòH(YæPAÆíª‰±#a“­ßþþ±oêvu|Ò¹žÉ §× °ÏrÏôž³½ÚY / «h´|fi–B‡ý:„©`7»4ÄuÔGÓ ²Ûy×RŸ$Eë¦htÇLr°=¬¼x±/h¹½ÂÒ9$Ìö7#“nõцEkÄ@½æ(É=7ð¬Ê¢UÒ†Zn=é×FrgÇ!m lµï+8¢‹SÅ Orôø'½0^O(TYTY ~”¡à§ áô[Ǹm¥¯œV‡‡¹¾h^°R¼)q'ef½µÀ!K¶¼%ucHßûöÒ_âV,<†ŽN`-"ÎI؈ùÖÞ+_ïÛÉBbrBÿ‘Õ­xËO_ƒ_ˆüŒo)1¨Ð;ÎÁ—ݧAO_+b؆Ëð¸æ'7£®ë;º+pÀ (á/Ÿ€xRÛ­=œJü1þùÀâfz“,WgÿŠÂ›3ü#Šl>ŸÎfÉÜ®$Õ´:ù§‘ýþDi$endstream endobj 303 0 obj << /Type /Page /Contents 304 0 R /Resources 302 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 319 0 R >> endobj 305 0 obj << /D [303 0 R /XYZ 71.731 741.2204 null] >> endobj 306 0 obj << /D [303 0 R /XYZ 71.731 753.1756 null] >> endobj 307 0 obj << /D [303 0 R /XYZ 71.731 706.3512 null] >> endobj 308 0 obj << /D [303 0 R /XYZ 71.731 580.6576 null] >> endobj 309 0 obj << /D [303 0 R /XYZ 71.731 549.7734 null] >> endobj 310 0 obj << /D [303 0 R /XYZ 71.731 533.898 null] >> endobj 311 0 obj << /D [303 0 R /XYZ 71.731 477.1109 null] >> endobj 312 0 obj << /D [303 0 R /XYZ 71.731 407.3724 null] >> endobj 313 0 obj << /D [303 0 R /XYZ 71.731 363.5368 null] >> endobj 314 0 obj << /D [303 0 R /XYZ 71.731 345.6041 null] >> endobj 315 0 obj << /D [303 0 R /XYZ 71.731 299.7112 null] >> endobj 316 0 obj << /D [303 0 R /XYZ 71.731 255.8755 null] >> endobj 317 0 obj << /D [303 0 R /XYZ 71.731 240.0001 null] >> endobj 318 0 obj << /D [303 0 R /XYZ 71.731 168.2043 null] >> endobj 302 0 obj << /Font << /F34 66 0 R /F32 62 0 R >> /ProcSet [ /PDF /Text ] >> endobj 322 0 obj << /Length 1830 /Filter /FlateDecode >> stream xÚµYMoÛ8½çW9Ù€£Xþv{J»NëEš±S Øî–h›[}­HÅͿߑȡ$Šv”‹É9óøæÍ åvðçvf®3Áeì:Ãá`Üñ‹Ag?}¸pÕ+5æª:èÝæâúv4î,œÅt8ílvÑxîLFã Ì5væƒYgãÿÕ½Iùìgïj8toyýpÿ(ÿ¹íM&Ý´7šu)•Oþˆ½,¤‘ ‚Å‘|tÇ<qÚû{óçÅr£ÍšŒfÎbkŸµ]²X?¬X¯|œ.¦Îh>ŸÆÏ•¹›‡›ûõÝMÏuÝîfõù>·f¿raêÑP:ºéÀñ b9ãòêÅg>M©/ü`‘zïä5Œ}ö}0zÅ$}ùÇòúgjy–ÿøŒ‹”m{ÃA7 @QÁë“‹ƒ±¼Ë"°Ì!hríæÐYL\ ÎÅ©Wº9V8=Ð$ ‹öòvõƃîSo8é’”\o-_UÆ™8œ2<¥ÿf,¥êŽ'Ôc$7 È8×&ìÒ8Ô>°aOz.à–²ýA-~ˆð–÷ë¾ ßާÀf‘dþ‹(ó8Tcbe ‚W”GÄ÷Y ±ˆŠÁ)!O=wÒ¿¬›.CÇôöcÔ–~ÒÃdg± HL00’å¦qnõ†‰‰> ýuøí0,£}ÀøÁFÜ B/XçèÍ’$"h0¾Atð‘}JiI[*Ž”Ff,™¸Èoå…¹³»-ûª¼èÿÆG†ŒMRšD²„N]ùæÅ‚ TÉåçÕ}.ƒç•ò¥¢XÔ£¶7tû¥,îªx¶ j~b¬YÑ®{4wû§GuOxõ9xÎyð|Šª;\°¦žgwDÁtåS©‰c° UB¢-î¯Ãâ—¡ÀxÊÇÌïD- A2‡ÀeDíÙgyæžá‚ÈÊœB„¹4Kø}ŒsÎý ‚æz¥,KH*&†ãA¡u ¹ýr4f²r _£ /Ì‘öõÍt¢•¨ýF›˜if7í«$+µ‡¼LÀŒ~½bÌ®HWžy () ¦¼î24É‹Ã$Ñ÷¨5¤ÝÚ…ÛÇÍãÃRe÷å×Õbz-o?ߪ°ÿ¸ROîVï—÷륵:BÞݦXè­ã8æä&)þ–έÔòä,GÅŠ Z+A tŠqìlF4«Ð´EõYò²ó‚I¼(5 üU‚gPšäêX÷É¢ ›Û€†¼hP {4ÕÆ±?‘¼¹¾>‹}uöQæÀ+î¼»¿F èN\;6‚-‰÷r¤–EõÙWd"2󼀚6öéÒ¶±H”…[€º,ÎÝE1›Wú:àuíC*Ñìeùî['׳½Uéu©KÓj2‚®2ᥙ€`hc±&}C%­§lJš¥á.)ôZ£щÈÂ/`’¬‘1s³2–ä'Q3Þm޹Èey« A¥\¸ê÷Ád 3ŽFª¥d'`€«æx6 )„ʆ—´´'ý÷WÛW`¶{®yŠûç‰×?ÕVy‡8F^"à«Ö*ƒÿèViÊš?UñR–ŒÓ³A©KʲfòÕþpÛ"›Þðn773$­¶ïg‚÷‰FP<ˆ°u}ºBm£µfkT·C—› &¨| … Õ°´úzºZu Œ€[…Ñ?ÇÁ;Ñ<a"À¬JöôMnJqj4wÓé8?5*Îf«¡ëLÝù¢°î}Ó”œŠ^I·oË›l¯GPI=ª;Ù<}ZªpýbœqèT ¥. Ït ¶@¹Fž©NÂàÿÊÃ!ð|2Õ‡~­ÂRV-šÇj¤»Žk¨´ÕeC~#ÌßVN«,žë[ñl©æíÝj½Á:z¹R<ج6wËu¿q@VšGâê½ìI« ¸éͰ'Öš»Íî®±Â;âýxy –å°ïm¥­6SºãŸP‘ÚY$P+[5öòU ¼ttˆ—ÃWãUíÅLzF:£¸#ú¥ÐbqVîGË9..(1N”9yÖ;r<0¬’ã5Pž™‹”UƒEƒ[xÞŽ¦^7Á9ï/#T.ß"%䌕mã'2RúŠÀ±Ö J¥6%†b:±HWhh»ìyñPONO ³§FË $'òQkå1IÂR>Þ”ðjEŽÙ\£Ú4°¡SI"¥wP÷AÔí€RÞÐãúy_yêAø©¤óF4Ep¾§d¶„ƒ´ø¤ ç2™Y½ìNáU“óc•ú¼4ž;swº8û•­2¦ù‘m2œ;w±Ð3Éãš“ßÆ, þß‘†µendstream endobj 321 0 obj << /Type /Page /Contents 322 0 R /Resources 320 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 319 0 R >> endobj 323 0 obj << /D [321 0 R /XYZ 71.731 741.2204 null] >> endobj 324 0 obj << /D [321 0 R /XYZ 71.731 706.3512 null] >> endobj 325 0 obj << /D [321 0 R /XYZ 71.731 606.5605 null] >> endobj 326 0 obj << /D [321 0 R /XYZ 71.731 590.5654 null] >> endobj 327 0 obj << /D [321 0 R /XYZ 71.731 531.8407 null] >> endobj 328 0 obj << /D [321 0 R /XYZ 71.731 515.9652 null] >> endobj 329 0 obj << /D [321 0 R /XYZ 179.3565 477.2104 null] >> endobj 330 0 obj << /D [321 0 R /XYZ 71.731 470.0723 null] >> endobj 331 0 obj << /D [321 0 R /XYZ 71.731 400.3338 null] >> endobj 332 0 obj << /D [321 0 R /XYZ 71.731 382.4011 null] >> endobj 333 0 obj << /D [321 0 R /XYZ 71.731 356.4982 null] >> endobj 334 0 obj << /D [321 0 R /XYZ 71.731 346.5356 null] >> endobj 335 0 obj << /D [321 0 R /XYZ 71.731 295.1448 null] >> endobj 336 0 obj << /D [321 0 R /XYZ 71.731 253.1508 null] >> endobj 320 0 obj << /Font << /F34 66 0 R /F32 62 0 R >> /ProcSet [ /PDF /Text ] >> endobj 337 0 obj << /Type /Encoding /Differences [ 0 /.notdef 1/dotaccent/fi/fl/fraction/hungarumlaut/Lslash/lslash/ogonek/ring 10/.notdef 11/breve/minus 13/.notdef 14/Zcaron/zcaron/caron/dotlessi/dotlessj/ff/ffi/ffl/notequal/infinity/lessequal/greaterequal/partialdiff/summation/product/pi/grave/quotesingle/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde 127/.notdef 128/Euro/integral/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft/OE/Omega/radical/approxequal 144/.notdef 147/quotedblleft/quotedblright/bullet/endash/emdash/tilde/trademark/scaron/guilsinglright/oe/Delta/lozenge/Ydieresis 160/.notdef 161/exclamdown/cent/sterling/currency/yen/brokenbar/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis] >> endobj 168 0 obj << /Length1 1199 /Length2 3428 /Length3 544 /Length 4229 /Filter /FlateDecode >> stream xÚíXy<”í×§¢Œ%ûc CÑx,3cß÷=Ëe¥eýWZ|³"Øj…ý¤4Äað`Åï-Q´üÑ–/@ Rf ù6Ú¢àÿä7Å“°( ù9F0Ye‚(øoÇë?ðßÙ¯9ôÈžžß”|—LÑ„6ªâI¹8‡Ê`Qÿ# é…õ øMܯŽ6À÷ ñݯðwvMœ«'–€K}7b‰zXÀ’Pnßgç‡Üèo@à‰ØÃ+N ‘…ÿ‚YºaQ8€H¤Ê7À¡Iª‹CáÑXœ+Ø‚DQ$ý¯áF‘ ŠNßNŠûcÁRJÅ£”Ãܫ·îkòúI¼&Ý.gõù€, Šõ¤~'y¤Í”Ë£ˆW&{S!9CÑë¦V~þ¨ÉQêðx^ÝXy?E­&Éã¬l×XDò,KV«˜*1¬€<_‡µó$Äp¥d.ht¬ –|¶VÓîgµÇsñmÙÏÍû˜Ñòò—ä–љ͊*rî„®˜xþ¥D;ÒÓ¬s½žBoÔR7¸}ÖÈž¾nù [Y«ó‹Ñ-FÙ ‘p}©jÍ…×®H^©¹¿EjÇ­¸³s¿Ç;WÖHú‚÷¤ø@µ $v5´YK,•ý>yn™ëªmH‰P[ޕ⼕ÖÂ×Ùýµ¢Âð÷"ü/w[¯·2²Ž7µÒpPTá`[˜Ê–˰=|K늎¬ŠæŽVФ”EJE¾C>×þO)™´>üî‚}zÝqÝgˆ­õX wWx"Ô;ÄÓ‡Þ.Ùò™0oÒµØY°/ áõ·h×Õ á/@¥b(^¦k½ÆÏZ"õM\å’&ª¯ÓF2¢…z«jR[»Ó.þÍÕ¶OÏ6¹d+c,q ·ú|ÕºíÚÇ—çU@û¼ñÔ6.3ÈÝLŽ Rãœd Õ¯œ·(YÎu£—.˰»mB5¿ðE†gw´ è嵸Þ_^ʱV_3gò¿Uì¥qm"´ú6úÒwþ躡vwH'ZNO¤Ä**%Ñíþºá…„iaÝLÂ\Èæk︅Úñô6ç€x±õÅ0‡ÎåâÄ@ĸµoF}cŸÀeêJ–?¤TömelÔÜÊÓ˜…qu Ìë­w¥?=Æù¡F¯´Ÿ&¯ ôf8iW!º’ÎðÒŠh| ’66Euöo9ê>á¥Ü/3¹žm–Óýbß@Ÿ3úôº^Ö6À5”Yô›iÅ9óÒNŸ÷P?Û^ þÌa9iòf”=à”ÔGr£„§Ÿ8ÓÀîs÷ãÙB<‹»1=Ì¢í*?ûõï½½žª);Dâ}õ¹FGÒÒ¤ÀmÒA[´«”4k{ÖþS +Èæàü DnÅPª-f85c³û%¾¦Š¥†Í´0§¤Wcý”åÇzjôÞ=A“ }@{º~~¬¯!ÓYg°!º81lØåòe¸Š¸Ï3t\Ò `öOÊ3fÇ­|ºz)Ôž‰ŠÉæ‹›©°ò¡éª¸û똒‹iŽ“…pΞq¶[ܳÇ+¤ÓyôãEüX~”ž§ ¬×>îÚÕdGP•…óí`­ëtƒ½ËeóPÿä® m„ |Ö’ç·Ò“†‘è™n3V‹èËÈ1æ¶{:Ëþn·´b¿¶¨]§.¶x·®aþIL}Ë!§Ò¹aõÝ ñ–®JsÇÎbãnɯ0DŠC><øsÍ#–ÇAU73ÔX oÑÉàR¡¬ÎWfìo²ýäž[œ =æó4×hX oi^8Ú=.vOÒöØàÀ L=6ÖX¯½!LÃà‹?%®6—jZsD³è^sEÞ_fl[ÜÊLÂ9¶w/lî¼l÷/Uš:rzÂÓ’€’9ÂÆÝó"×ìxLã1ºàÄí$ww§²Dž²¼¼§O؃íó]ìN)b}©¸Ÿ˜¾¡Š­jÛ¶…þ%¾&Þ‡‘Q½ú4Yb½óšï®>]RÉ­³3䯰×¼ûÜ‚Ûä–õšÔ©|ã ùñ+BY¦¡)›Îò3Ž¢ÆŒmuºý'«Ž£Ò éÓï³Ê9ÃÛ  „Hƒ¸$¡hê³dÒ‘yX­åMwåø'n#¡£Rý¢‹Oɨ[ØÈîBYç§ÒqkkÝ\:‰_=_©š >Ü{I+Z=Í2ïŸgtN鄾ôΔ’%~þ椲îSf¿*÷.ÜSÇÔ­ÎJYóów]q¢ã¬eà¬Ë9<š±V+²TËiÛÄ»òûzj‰YznfhÐqÌèÉx×"õÈ!ï$÷>ÓJi¨Ü¢P_SSm<»;r¤¢o§Ž®e·#S5)ýä‰U%86¤²/¹omP0|#f_õô­ÜÊ\ê‚u'?lÏ ˆ}/ÁšZØ#ë$Çnu4y3‡¯™¥;]Ti´÷ ‡¶ªÊÞꇙʳv/}Ôüßšy¤œe‚-Á4þð œ3;])Ï€-o£ÊPØ+ïHvðMxðçˆVÓÄ`l’›É„J3'èþûy>¥ê6KœÅøðT$¾êân„ÍY¦LÁü*åV:»KoòæøI7¦“j¢Þrº ¿ãq«r/4dûÓÝÆ¯iq9˜Ç6­5Ÿ úOñó•Ï ÊB噽sV~ŸÚËW£øÂŽMKJ\KŒÎ]ƒ×)¨ñùƒB £8ý;["·O$ŠØh%2 ±øŽdñ(yÕ̮ޖø H˜müÄšVûð:'3,ÔS!Çmáõ’þÓ“„½?V£"ž!9„wYT­ésíÙ|_vüX¯þ¡)Õ|›UË ‰!ÿ)*hÑ]e¢ïgßu#©wÅ ìš§ ‚ò[<÷ÞD0Ï=tÃâzÖ#&Å«%œ´–ÜêÀGWMÇÌ¥ð¿ðCOZpcš;k˜ ŒØ1õ3T'›5P ÏC‹{æC£"AfYÏúå4j{N ;ãÛ ;möºæ9بVÒ°Ã@¯–)*Àåy›¼—¨Ë½š*u|y\=cçU~Jc؈9¦9˜™R[è~T1ðµöÞÐPìSGÍýžÑ;pÓÇ€'M'IrYÂÄÁÙgJOÆþ䯬É+®N‚S3¢ŽÚ\;7t]ø¹%´‚ɼíþñì›|)1ý>¿ò¿ëbØ®{¡5}-ÖÅ7½Dâî\œ)Ú2Ì¦ÇØ¯¤w;Ç÷J7U" â¹….6Ç¿lóDi.‘¦Bÿ|J%žß±+I5ä¼¹lurIYvxº´U>¨ÒùvŸûÆþýuì—Z¬ê¼Û~Hk läS12δoÑu¤)Z]­—V½‘4c9t e|/6Z—ž¿m Báû¦ÏÄ‚Â++¿2å´’õ6ª[ËÄ]`”³ãź3ýÀF ©ŠüSz>Õ-sñõÐæ¼-ºª¼*ô—µÌo¤ ˆì²YF}­qsË@ÄpûZ扺òl< :äžÀ ægµѺ332F!LMÓÞYï¿ÞfŸ˜¦Þ7>Þ¸B;ýɨéÚå‘™isü‹~`ײýÒ„ÆkhEà”ÁŽó¾½k§êFðůsl1ââ,}öm¹ïtóøzczv#Me»bœ´•®C¾SY¤@“É‚¦áΠ—ø“e‚Ð3CýÞORê+XK²x^· ðŸJmqOßx©QX 3e²¡á>(£NØùج¾ó6?kà1}u½ÃÜZ[3ÝŠNgý´Ùõ ; ¯® ÿõ¢ÆÓ'‡Ãog³&­8UJT=I/`P½"ïÑÛ]K¿¤÷œf+#P!&ŒL.9[cqÑŽ}!Öª£W_=×Áì¦ðŽjDŸàã’s/™ö„jëä…Ò·Í•© ¸wQW4”6ÒcÞN&K6”]¶.H–}ÅÀœ"Ýû!a¢¸=}_Â`ï'vEê«Ø„ÞÕ1\R¢Ÿë± SÓÝ¿V`d¥ïá[ívÆøXn%æãýçÜú÷ê`æ—rs—t´ª_©%H}ðȈÇB.aÐb˱ÍZÑh#ÑQMMYØÿòý?Áÿ ”'€$ð^H‚è ’ð„Ã_D ÿòâ”)endstream endobj 169 0 obj << /Type /Font /Subtype /Type1 /Encoding 337 0 R /FirstChar 2 /LastChar 121 /Widths 338 0 R /BaseFont /YFTQPI+NimbusSanL-ReguItal /FontDescriptor 167 0 R >> endobj 167 0 obj << /Ascent 712 /CapHeight 712 /Descent -213 /FontName /YFTQPI+NimbusSanL-ReguItal /ItalicAngle -12 /StemV 88 /XHeight 523 /FontBBox [-178 -284 1108 953] /Flags 4 /CharSet (/fi/M/a/e/k/l/n/s/t/x/y) /FontFile 168 0 R >> endobj 338 0 obj [500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 833 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 556 0 0 0 556 0 0 0 0 0 500 222 0 556 0 0 0 0 500 278 0 0 0 500 500 ] endobj 164 0 obj << /Length1 1166 /Length2 5393 /Length3 544 /Length 6192 /Filter /FlateDecode >> stream xÚíyW\Sëö-Ò›¡HS‚ôš„N@zïUªÔ%ÁP¥KÛ€ô¢R¤7¤÷Ž Ò{DDštñ{Ÿ½÷ÿìsîÓ}»¿»ÖÃú¾9æsÎñõ´8Xõ äa(;¸ ‰€‚¡@„›ÖÃЩ%`wįƒ¢¶¤FŒ+ü?àk@ ·Å PH%[Ì5nä„jÛ¢B`  K@E!×k°ðŸ‰(4¨‡F¸¡|zp íŠ@^CJ({¬‰1ĺ»»"à0¸ ‹¶‡{@×ýgU "ÊÝpt¹ LxøøøÿŽ@$%%v>"@%¸Â ä¼^xÂ]Qî¿*]S¨Â‘pôuÓ°_¹z¶Ê0æ×¸@n' Æ ¹;ØÂ¯c‚‚H8Äsݨ2¦ˆrûEàAúK3%n=”蟺¹ Q^H¿ÿ; °ßG‚aÝAÆHÄ#,\]é_É×!Ò¿cŽp P,– á€po{'Я’F>îðßAȯ°-æïçŽr:غzÀýð멟‡­'ˆAcáþ~ÿø÷)„!ì1@;¸ãõ1üÍ~†;ü±×¶Å Þ@ °  ‚Ý­^( …tõù;]ÇÖ jëëªñýsö¿²P×”q €„èµS®%E…ÿÉø—êð{TÏñ¯>ÁSª#P@É?ƹÖñÏ‘<áhko¹·1ðßùuP„=Èý·u,Á¢àk×\? ÿÕRÿ†ÿWcý³† ÖÕõwU¸ÿx­‡P øKW[ô¤Ûº!\}þË ÿL4ÿáþÿ:ÆÖa/ttýK&„‡ ÂÓC`ìþ°ËŸ*Ã~ÿáz(į/(…ü3rBØ» á×gñ;GÂþQRi‚!Ž@C̵+mѰ¿¿`{,}-ÏïtýîŸ{Äuƒp¸7Üžtv e/õÄùÍ“æÓ×òL^ÃÂ]bÆÇ?±,"¤±®7Öq;uè]J˜Dr¾K¤d*é :ÉTXàiãÝgRŽ÷r‘Th$P‡pÕ¢w«¥u ä{ÄÜ#ûà.Æ„ú´ìÏŠ>½jßXËŽÍ8dß ÃQ´wNÍ7·é2Ý-Ë+'Ñݚ⑤;ÙÕUs ЇN ´*C"ÒÈ4ÚjGϸ4ÌÉjwN¨Ë[6“SÝ 7E'ÂUI1oöì˜ÌJÄ¡­ïÛ„ÎJ›Î_¸ç‰j?tŸçïÉF×N;m¾™mæs  "Lê)Žu"CÇÏR×êú+¤ÙhÐA§m3½dòÆî·öÖµî™Ô8–ONêßíÒð¤NZ©Ö6n†Õ<µfEÒ58ê3®‰Ô·˜È'¬u-D#Þ6úÏ·H{{Ÿ#Ê7õ¨rÛ÷@&D[¨B¡QÎÄàñNx5‹Ô!žŠ§jåjt¦§lÅz#z0CÂØi×¢ÍÔ¨Ó{mHÕÒNdKf\X™3zDyœ»i¢/òÔ/Àp"T›¤ØRº v¼dŸÙayÕ”!áïi,…¯^@B„ÙF+¤ ëo &ú¥/ó‰uãžßÍ~"y˜ª=púœ¼Ìüã8Ùf/­4¢…Žê“™ç“k§ýä%"0ª˜Ò-œì‹{£÷õ±ÁkÑ~õ‚cb#'8j•3Љ–¾Üé5vî5r 2ª4?¢~2fß[&sK?8€9|LÊV Eqóˆ™`_C,¶¸t7­pç‹2_2&sä³RÒ ,Ó[yÝúªÏûð ä¦ üÅ *A’C’“ñøb* ÐY6§Ce/–Æb':b4“92æs¿Ý±-OÊmP(‰r!f#7[— cnȊ긴û‘ù]Ç¢Ãd†ÑºÙ‘ìaêåšÆZ0X’•‡pn¯b¶*]¨š{3?X×gF¯|ܸ àˆ<“5•Ñ!'•âp_ƒô'5³É >E忳&Ï–JQP…ÎI ÜÿcðÁÏ)±y£L¼^ÿb/^/í’ãC!@glŸñÚ­³—ßw*Þ¦uqÞÁ´éP5êÕ°[ñÊ5í/V?‹+l§×¿"¹ì3³Ú™PPØ-Ä¥:÷o¦Ï4n#è-ż©à¯h0"ÿ¸’ $%vl”1ŸÖt¶7§QÒo_Ë#Oft³°ûyé<¸+^ iÐÈï½É}˜ÚI[àÁhqÙoÅ:áMzÞ–jJÒ^®þЭ#ø©gý¸±òlª Væ¸&ŒvÀý^ίx3úþˆÕWc.ë§²À½ä`G±ꧺZetÁl®tF+Èv q9…GÓj+CQ¹[!t¥ï{žMTµÓP<À«<;™­ÏµWžªQè¶<– Ufð¿ i§6©ä¢7¡'áÈySôS²ÜÅßì3¸Wж£Ûl⦗}úÞ.nôwM]ºßögÌ*)'@‘¯1¾Í|Æytå ­kÿè(v¯¤ùÞ×S’e ÚLõ°9MÑ—m{:û„:ߪ*v?ÙØ‹ˆ³ŽXPKøL)Ëmê4ûÎnäËí|›Ÿýõj¤Ë¤Ä+Ⱥ÷8Ü ¿ñó1 ¾ÿÛ²S!<þœ3¤1 Þò‹àø³Ÿç¿N…†ø}¯3yLã*@Àl#QÔžTZÌx8`²¬}sïÏŠQ=©f©–TJ}§Ÿ9qFK¸Ê:B $8î~ü rÕç%©èk gU«¬Ç÷Ì( ¡óaø^OüôE–þJFXOóxÔröå‚°u÷Û¨ùÄ7Œ-ÖôÜl.Íöûw¬‡UCÑ)Þ±üÝKØÝ.›¦Öå” C1Ñvw³„Ù‰ôu0³: ¥§þP–>¬d#ªJ8ɰDÝ öW³ã°ÙXªm©ÕSíZú9mü¼m4MDð_}fõl€qéˆ×ÿpÔ¡aèKÚÛÝøÆê»wú~;†ÚÇœ—Ló ‘ù=ã=Þ{oL1?çÕoçÏâÙ|"rõ¢’ŠÑõ¢ö‹HøUuèø}Yõ<÷8hÎ’(îâUB©…‹üŠ&žø´; € =‚Á±%ùNLçùstläRiÔØÙdñå&Ôí³3Cï‘u“”‹ÇÖÍ0k«¶ã‚æ5ËÁX÷Ï»1­À—´¦?§ü¹v“¿Ã÷ÄÞÜØÄ˜ñwãÅ"¶y†Ê«m5v'H‡’ "4cl[ýF¢†¢zÄiô‹üI­sÍ«Æ9uêAÝ .…ÔŽ¶Õ¤œ-—(]€Øó^ö•UŽ,ߙ˃+ê† lÐ-Nh›’TvgŸÖ1蛩¦ §u\8µ3@ÒïeÄTÖ¶¦''Bÿî˜l‚Û#t›6Jžˆ ò© {ƒàªv¯37ípV—RO3ýŸ3ÞÅxÞ°ºR„ˆ ‚B<Ë +“šÇUÛ]Rb4zñÍçY[3NL7V²sÙØÑ{_š±¤]¡¬þÝz†›fù³8Ï«C)+…ƒ³€Ø4ÉÝ—ži|QÁŸHÅ¿IIœaf# ù2À¦÷„jüªÌßÊ“ å¼U_Íf›ûôÕ=È}ê¾+¹j= ç5_ v¬R»ø¡²¨S­È`‹åU†éò ÊeåP MDÒ.O%£¥{»Ôꥠ{RŒì)‚y®vszüžvkÕNų¿ŒLYg¿o½.3ùt_üLõ%iˆ» îð„?ÝÑ"1Èfâ6}TEï v’þL:ß/åB¿¹^zŠ¿ê£ù©Qµö’ª/ÔájP#(b¡ÌÊJ•ÎA$Ñ*´TMDÉåe¨µ¢«[I]*ÁçoÛtržPòz'òü´EX„Ç{665Üúxœ¼–Ëþ»<\QPj”~#%¸'¼/i.À>4Ò6«±¡—ÿ-K[ÏOe×ëf¦3)ÒøvÙJîM‰‘“É­Qs 3›Sö–ÛÅÊÖ†¾É~iœïëê럎ØKn›L¦oùVQ²ú0Üš]#é4+lkF6Y§í©³o ‚Ëü²ãêª+©ÚO£Žñ¥oò`¸{œŠd°'ÃÆ'¼Ú ¼¤¹y°Ö·gøçî!ß4Ø£wnsþ6B7†ããñƒ¯*ýFÏÛ¢ì/XªX•øÜߘŽ/U—rµÔëpÕ¡°½ø[ùmd…ßÛ=cbâu òžy˜‡¿Ì«Ý!sO¸ÂxCÖt=ã8ô§Ž\Ûùä‰oÊP'£]ÉtfUÚc’ž„k Ÿ›3(”ðæ}‚pÙÊ%­…Ý×SP|2넇‘íß¶‚ò’fk²|L°™ü„ka,ýåþ‡Ä8ßÖJ&7so!ûšÛT]†û†ŽŠ¢§µáLQÐÝÅJ—åߨ½/'þ8*Z: 8ÝQQäÕöøjÆbÁ•¥áå˜ò“¢ÛdšÎ‡ânH9wgãíïÔš¦_Žex¤?¦xýè*e9ÎÀaq›¤x <Ó[Ü€ Úƒ7"ÇsÌÏY‹¸#§åú6’ɇ¼?)ðŽ‘Éÿ¤Ä,~’„ÕEúoĆ•¦;aHÛl:ƒkL½Ã‰Ï¤nÀ@¯|MÛ¾ ¬ÔSʦ7SÓ~aÍ ˆ‘ª  ­žºÁf¡Ùì¿eÌy–ò@ç`¢º{Uì©8†°uŠà¿J«¿ ××[©Ættqcv‚ºì$~E6öÉñüg ΫzÌÂ|Èy šünÉ{‰_¬šDfzBŸšZ„w˜M„{³÷âav»Ý"ÉR9ÚôufrîׯçÛá¼DNýk¹¬W¬ƒ”)®·q°3ÂÆ2<þMΆA„‰øƒSÐ&8C•Zq÷рμpË[ä"ÞcI–L–„pĶšóîÅ-‹‡á‹±Jq¬§J´†Hï&v(ñŒi*çô”âyï™ÿ3½Û4ƒ‹%ߨÈZò8nÜÃJì1Ù8§M5ïî±U;r=Þ?ŠÖ)ýi*1 œUOfœ(Éž‚ªy¦³ÔdSï' ]BŸÅ\°·XH*ØŒR$!ºòR¤½S{'b4^´GG»ÚLd ?ìV0ËÔÀ;ÐâÆ~p¶«¸sðºdêÖp²W×¾å« ºË{5wog~ëe‹ ­¬Ã–·ë†¹Vì}i„à+§c«s¤Ú“k¤¬ðˆëÛú€Š±â¼P¨e–°}ènÝ.Tù^®r]£ÿžrOiïlÖxßçãrrl¹[)o«6—AÚJWNÛ¥ŸKCßôóx^E“T:‘óÞS4¼ÕE"pÞðJ·%ó"¿Xö踀±ÚVsËïD!‚À=‘îÒ Ægöĺ‡ÜgVåp&ì «H‘ºa‘‡›2}’|ˆ]H~+‘†‘FÓ°*^Œ6`än»ãíâ0'q…¨ŒÏ"7¾n:÷ Ý$òz…½Œþæ[o?ÿìØ$Üè@6tjfé*1½°þ COcž-æò|6䈘°ljð๯êÀ“Løãéß© Õä4U’@ €ÿ%Þ4Xîæ$É·]퀆;‰a™0 '¹¥`œCekK¢›Òé_?òè¾ÃI}3J¨ÔƒX^W.yéË«nH¶{À¶÷èyq§BbU=¹£Æ2s¥ƒŠkoæ÷ß2rHsÞzôÒäTÉ-Î"ç³ú:©èœÒ`AÚÏ Ú„C•\Ø÷äÝC+”/˜^Uüìt¥%P"1E;VŠÈm^MËñùÊNLÉ™‹#g•̳:a!IÄ/âY¤ÃBðpWSõž>þ*cùbb4HÎ ‰C“\<½-,š#ÝÜs—€o:^aû¥tn bëü±óòÝl¹¡½—d¡ønj`àÏB¥Œ±/nÙ#úµ6•—ýxƒ"¬fݧ6 è+­á¾w»£/så úQfmoØ|®¨1µcyi$¡—±×V¹¿êŸÅ¿:¹?ÅJyUù*ƒ;“ÃgÈe+êxAöž7Šœ3l¤{]Ç8qÔq®7¥i­ð;w»¡_“Z|Њøù ¡ñtüàPKÝ:lãní’úIC't©ŸM3¼ðFÅÊñ¾ü"lÖnuíaÊ£Tʨow’À±~¬y*ú1=ïÎ<®¿ЊÐÔ•}Ÿ•g¿Pºs7Àìòû3'¦›ÅôŠK˜ûwçK$ ÷f}ñç¿zy¥Oô,0´m&~L¼0‹Ç˜Ë;œ³À 8"B3nZÍq3©Ç+™ýÌòÎO×tîH=Œ€^ŠzºNQáƒÇ_×ÒN¾hž¹wªœß £yÔFøœ­æ»dH«iÞ ©Šåê4/Ëþqè—ôf‰cº{1ÈD0Xº‡ÀÖáÙ³‚ü ¡‡Ý úWzß„š;ﺶA”ö´iŸ˜Ù¼€&.5á…LæÛ+L•&”âéd‰† WÛ­ÇVãûíòé̓FϾžFø¾¤m·½˜ów“c@zyÞå-Ž[æÍ°Ø£ zЇ¿ táÕ,žÕ‚Q±>N"&1øÔ(^5øâŒŒ)=æÍ¨>³C‡Ä„w)£aG·Äkg¯ÔýúßÁÓù®õ¯‚-èO·D¸w_ñ½£/häJH.¯§¤À/â,ß%G¾ p Éx˜6èâóåñ,U êÜ]ªÅÖÀ¥ ::›ˆê)zÅÉïYéñÙƒuÛÑ:ǵã§;$v¸êk,À.³yò<»D‘û*êÉŽ7A§ÜƬ‘BŒÛ}й ²¨+vÕ VñäÛ!ùâaš$ëm&xW?›ëÈí¢ŒžnÛ¾kÀVŽHS6 áó<×!?«äÉ]B'+8‚;Ð1Üv)¯UkómxUÿCOÓô‚»ŽHe™”%W9MWi/ƒVÊã#£ˆäÈ«Ä7ÕÛ¨OjÞœZö2}ÏqZ9ÈDyÄD¬Ø6—±©Œ´¶çëIÖ‡Íi¾Z_烺DYÅkTF„ºz´iJÜ«a5àEû¢ýà=¢ãÒ10>¨äÍâLÝs–'‡—4¯ ûû?ü£X2ª©{tWÄà¶ÄªqœR M ¿ûÕZÙgÄK³Zú% >ž3¨R¨28G?óÖÄ9VÆtûˆ¹ÙÊж—Âl›8.ÍJùjCÎ_›cœ{^O3Ù@ W·ìy‰;Yå%ãÃ*ãWüŠïé=uê!Ë€Wñm?(Ÿ©S9.I}©¯âšÜþXMÿ½i±¯=óÞ–Îlg}ií䵎uÑÃ×ùyº€¨î¾ á°fŒRü‡fõýÇöX¾¢˜ê½89«>ªž]KnÎû¦õ½+ô)±D gáÃË/|çPeð.[l*ÝbH9xøW#++tÜ»Zç‘*רŽg« ÞÇŠB½cÕ1:•WµÄ–‡²„‹…Ö×/+}Dhöö¦˜»=襦RÿÔì=Þ7÷°±;'Ð|«Dgbú†Z£ˆ¯“Lý=m‹ôˆh³O ˆm=¶³† ð±÷g¼g¨üƒLºJìì,‘¼™‹¡p² =»Ø8®g–ï´Ž>×§”˜iR ‚’º˜–§rÝ‹š !HŒ¨ô>Éט /h/ÁG_“kz¹ž‚¿¯ )ÛKÂ|nP8}{¹Í{,TN:)ÿÆ|˜QAWÚôŠÓ²üy‘þ‚ÿ'ì]á¶h ÊÍíBꇆ{`Pè_¿pHÿÌY@endstream endobj 165 0 obj << /Type /Font /Subtype /Type1 /Encoding 337 0 R /FirstChar 2 /LastChar 121 /Widths 339 0 R /BaseFont /SMNUOH+NimbusSanL-Regu /FontDescriptor 163 0 R >> endobj 163 0 obj << /Ascent 712 /CapHeight 712 /Descent -213 /FontName /SMNUOH+NimbusSanL-Regu /ItalicAngle 0 /StemV 85 /XHeight 523 /FontBBox [-174 -285 1001 953] /Flags 4 /CharSet (/fi/comma/hyphen/period/slash/G/I/N/U/a/b/c/d/e/f/g/h/i/k/l/m/n/o/p/r/s/t/u/v/x/y) /FontFile 164 0 R >> endobj 339 0 obj [500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 278 333 278 278 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 778 0 278 0 0 0 0 722 0 0 0 0 0 0 722 0 0 0 0 0 0 0 0 0 0 0 556 556 500 556 556 278 556 556 222 0 500 222 833 556 556 556 0 333 500 278 556 500 0 500 500 ] endobj 145 0 obj << /Length1 1606 /Length2 9209 /Length3 532 /Length 10061 /Filter /FlateDecode >> stream xÚíueT\ݲ-Á=8[p ‚» šn¤‘Æ5¸w·àI`Á‚‚·@° úÈ÷ÝsÏçÝ_÷ž_o¼=Æc¯ªZ³fÕ¬µ6 ƒ¶·¬-̤ƒÂ¹ùyøÄš`gkw T[±<…±YXäÝ@@8UÂAâ#-@dð‹‰‰a³äa.7°½Àn kÄÁÅõ쟖?!kÄ?<;ÝÁöPëã‡'sqAáÿãz îØ! €¼–¶‰Š¦2€]YÓ  ‚‚Ü€€¶‡5lPÛ€ î €Ì ù{°AmÁJsçyÄ’uî. ðã6· ÈåëÀäæ vwü€Ýön@(ü±p µxØþ!ðh·ƒýEÈÅ öáüè{Ó†¹ÃÝmÜÀ.pÀcVm¥¿y€ð?¹ÝÁnÌî1Òfãñ§¤¿|0^8 uÀAÞð?¹¬A[°» ˆxÌýæâþ‹†‡;jÿOÏn { ›-äîþóˆý§;ÿ¬ð_ªº¸@í†ýõŸÀpwÄŽ›_à1§ ü1·=ŠÍûgPT v0?ßßv[—øûîA•çgä"K‘ü‘ËÕƒ^þGO}×¢ÕÂé 2x8¹ù„ô¦LõQõ'wm7Û±¾gøUÓuGªœr졺oI³(Hø]Ê» ƒ×n®~0NÅ3*.·· Žýq÷"Nr­|ý ¡ÜËÑ×üaHïCŽ£4ïrÞî¹°CH5^ÜN[ëþ¬õd&D|èÍ{›ÆƒSA"œCVïŸÝ{Ï`¿O”9MSâ·üóC¨+õ â¾ì²×ÀEX¨â»í¸syÝ`#Î& =«€;WÖ_†tk·$‘Æ»§‡<ÍHŒ_AG¨šÆd+ˆ1Öþr€•o]Z:á‘hÈ»góZÊÒ$ÂÓØмPƒ:{É¥I¶/'ë¡÷‹ Hü G‚Fâ<”À¶ÁÎz¿»˜÷¯1éVŒ ð|%NЍý$ÏSÆíÆÆÏôTˆGq°vRáõÌ6èßÞ1E±EÿˆÍ3zâøFs¨*(¬Z(ºšX©pß;:ë0š™‰8¯¬«Ð\<"³òÖ§9³! ö&Ǻ{ž&gô9ªaxGÚñ!œ^c yd>6Û’Sß¼—±³k-OIu¹÷\pÒ>T_Ï/ :çwo—Y¶l"PÃÆy’óÍ7“›Gó=ë’(ù€Xy„‰/¥êZÿ¡4AµNzo e;ãì!öã3 þФËbg¼Yçg/'>R–ѺY)ñso"¢Bõ ÛFÃq¨‡1‹XÕ§å»›w ~¢KНx±ôø ôN>~xùÔÿ§¸tɱº¬rÖ÷ÉqLÕ›L{ŠÞ\2S믵!û[ÃlVoÊ:%¶8ð¢bš¶Ðƪ’îKö‹H‹¤!¦Ñµ¡ªè ‰(jâ¶Â‡¨“œçì“Ë #wJýóº¾z@îô½ð9ã‚ß+Q,ãa©1'[zU“’§*­·žHúë&ΉW)•Øgoö!çÎzJ­­½‹´óóÔ‘A¾FÙ­Ã9 ”›D­5{¨Í.gkÅËÚdƒò̺hqã¤ÁšÊ+g¥’æe×yIóE±®ù)/µsðŸÎ \JúðA,=¯¿ÜdúX­™Ì|I ‹bÚ!ð³¿v¬À`yó“±$V¿Ê-Ã$9ZêÖ̓sd^% ± ê\òu†*ßiç§Ò—ÊoÞg”×mŸv†4döA9ÌO‚"?9—³Ü¢¼¢ÿ:tEuá<†§KÃZÓw÷PæôôK´²nšŠž·-&⮆p*m3òà `)Zz(rV—ïÉéMY=zo㣢‚Xö#ÄD~€ß=Õ˺Ѵ€Á,†tßýpä ÙìŸ7M•B3cùÝ»bYÔo¨;Â¥"7'Bû={Úý‚Š)“'(ùç>…* [ÁçÎU3¨,¥¿‹yLÔÉå:ÙXán Oïm!T§['—¹a£ÈÛ‹J'‡E ‡ûJ¤ƒ¨ëóÃ)ƒñÌÈÆ@šfŸ¼íu/=oøZ‡]üóxÌ’¦›k7 ÎóKa7”e9ÆaœgRF—˜* ó>™ûmrRUFÂãÂa´ÂIj…殜¬ùò“»·ŒÞª¸oû¦ðX“Ö_W¾|þÉpÙ±™B³cˆNa«Bðr|ÄòjFõ&SÛ%Á¸–ÞHß­-Ö;—ݱ˜?Ä«±Ò—oU‰ë‰ÔÌ Unvj-(ǯÉ~'ÂjåøNh5‘Xsz¿gd%d½¡[”ˆ’%?=D²É’ûôU, S>ä8ƒ>ôž¾ °D6«%y­Ç%ð}nhåJ¶™€Ÿaw67|hÔt§T ulÈêXÌJ™dŸŽ¿mFZí»Ô$Ó¥eÙL–Æ?ļk¸¹pÆÕ@>¾y{^Ðú5@Iµ•¼Dí• 6ó9L¯Eí¹Cϲ—(ޏº/ùÀÃG?|Ø:¾Å†ì·^®ü¯ÍvaTç[ ÝÂÜÓ•×V¯Ø!ËÒÕ ó³®Ô‘NÍ—ŠßЊ»"¯]K\ag2K½^„Q9é¼ÌÔá•Ì$ h "£˜¯‰ù›•qLQÕ;‘tÛÉ7Õz±ìø½àWáKjñmÖï‹Æy-L­]œUORWÜ…6ébjÏùñKÁ/÷w$xX÷œ`è†_2™æøÝûA_Y_|×xž# ¦Ëc¾2ñZvÜ gømKÖì ¨²°Þ.Ö–aצIa:|[§ÿ²­· Å}ƒeá\Ad,ôù ]Sù*ùƒ¼%=£¢: sæGUfxCݧ&cžyJW0B?µQõw»gžŒf´NÇÌ¢2WŽu~Å+°¶xVŠKmCô<ÓzÜšÐÃñ|ÍÉ>¾¹\ÆRÍMýüÊ Ó¤³\R6‚š°Òöæì0ó »ß©£2zÖ…ø¦ûë×RèºµÑ øFK“ùzC ERër~¸µ‹mgMF&Ñ<*}Zø7C¹â]33Câ¤-”Óyèåxš½¿–•ž¤êQWÁsœO\Ò´Ì'3,򾆦™2F,_q²¬#¢xÖ,J>å(Àó/T©Ý8Q¨80 ¦ÖÖGº,1ŽMO‡d°.^ÍuÜseà•uECž@ŸNyPöXÎ$/ËÜ;3j[ õ®´Ç–~ ¹Òs¯pΟ0Щ÷,aÏñ¹ˆ nÃSǰñÿ–ò;?ë©yèg—÷‰Sù[þ£š¯áòšÒ¸ý`!yx8 ˆB­»C¬~0$ÁˆŸ Ö2m¤áÉ.Z€é"Ê…Ro™ÎŸMÔéª\:¦n7¢ÁÍÝå~9]úçê^ŒÆá«-/)r±Lýw8ý¾Ó]“n#‘ÞiõjçGýf¦ÿ$@{ÌåY†é(t2ùÀÃÞJ¬k¿À1³ lë&üÑ¥]ggÅø¡‘ñ…츎ñ1;D‚œJLÃÕvV}¦¥v%·ªHá\ ]wýÚúyóí×5ª…¯ç£Ç\¿œPßœÎòí’ÆšçêD AÌ…?:.[ó\óËKþ¡RÂ0É>û¼šì•E]Ɔù¶ÔÝ8ñ"ƒ@x^Gâ‹ûkáwú€®KÒFhVñ¥æÌž7=£kÜR‰Am=…Ç@Ž´ aêÃÌÕÀûúÚÓš8'÷Cà›ô¤~Z•n¥b·ßI­°÷!µr´8Æ’N3BA†PýWÕÔõr’B–‘5Ì!Œ‡- œÇ*’ºO¬¼_Ô×êB•—IDˆX»c¢– ؇î×sE³ÍÈZ}AáYX, òZ™Å’¦L±WgݱËÝ/YüzWšm ó…:¡º ê©i3²÷OŒ—¡ìÊ„¼©ŸFSØêq½÷$i(mž|oÔB÷C,»ª',Ú$‰ËÌCk;2C~H²Šú)Ýh¤D÷zËy¼.˜à¶‚RQýbc›ÙLLLÖBôIÃj5Éžt0·Í¬3œFV@±sଃÁA×Ai.b “¤ )½s°Fuze¨î—ù≟ک‹Î[ÊÀoNb F|º¯'´0‚ïùs?€y{wžÊœë½r¼ž‰®ÁßQð®)Ñ€CÂØ[0?ãÒ¨áK颸2Á«Wp½\ÀÖÕ™¸éåINvㆋ¯@}—GÇf†ô®Ž•eànî³T¢´·Ûô!xÝ>§ØÊQ6 êòãe4Ìrå0¢­­èx†*Ø)z‡,›ŠÁù=2žÇ }¦&w «{u†êv9ŒxôèË.计ݨ8Wg"æHpoÕ®X;^2ncµ=‹%cÝ´gr\麼“;pVËvhªŠ_O^À÷ r¤tÇM?סúÖñ „ÉzýrJ&¢©°Ð)ÿÑw¯ƒõhðbTÖë¨!üË~íNÏgg‹˜Ò7Á¥_YÛÉÉÖÑ.'`‡¦ƒ”]\ïä&£¾ã¾ù ºëô,Ü~m q‰KÝoøÂ`MÙ:õ 94ù±ç!«¾Ýi]†ÜŸ*Fj¡Î»ä 5PJ°Ö§‰8ñ÷T—¸íQŸñ#…#+|×NäH&¬È×`‡ž{&ŸË^ûügKÿMN⪋ŀÜ0ºsfzkÎS‹ÜûÕ“ØÁ¦&|ìÙ‰ƒÖѶ˜ÎœŽ9äém¼Æûé¡„Ÿiۘߥå›à $zâõ¼0\ºÁ0 î¶Á–/#Ú½Ge–·Û“o}cbmЩ¢û0/ž»°„~%ŒAWin —Ù›<\J’BüÑÔX›7á®]ÎJ·œ” R·„#Ú§ βۇAßÎDYóâ:–w<Ï/·%'ÓS®ÆPÕ›Q²N¸m/Ú|Î$Ç¥¤õK¿³.¥PW;±>°|É¥•Ä%„†tËê7:HŽ8çäÌ(=³-0¶šLÁóXþ~(Š]™8-ˆÃ(·S¨iµtup^:î_exj†€s‹UºŒ‘?ÝÞTk]È,°v‚*JZµBŸE‘Möl–©õ¼HèL40Û)Gÿ¾}s5òYø©Ñˆê“Á^Yé©î×ÁÀ26dáŽm{ì·5ýÕhOX5ÆZÚ½t×EÕÞ,E¤bZöªBF6 =ïs4H‚ÉâK½ê‰—öhíLø:nƒc<—mviíµfùâ„©`-$½Gzyn÷Êö ±ìÂøç³•}A#•Ôf7ºÒ@‰eׯe­™‡×“=¬qz‚kbi8”·ùÜ=ÍB=ø¤¢JPé›UœÐ¾Z1ýÒˆ¿å©’á"ޱò%U_jÍRîÑÑö?CQ%­ÿÂ;nªïн`Ž;7+76bÅ]`˜Ñ\Lµÿ‚Ã*El¯q0B'JÛË}t\l_¢Ì NÀýæsy}p¥òÑ„Vµªt‹±›‡;%• 9ºÁWA̽"¡næÅ¼rS¢|Æú;íùï ¾’C*¨zòC6;že¦ ‘OeJ}AÇ}r³ —I*¿†I,¶ëäá§þ4Íý| bÒÉöÙ¥k^šÒ¯9Ä0­'fEST{Ÿò|]•A®®ó`Âq¾käË%82Ë‹Š!©ß`bj**àÄ9üž­ñ3úN±„Á¥O°àxz•ƒˆóÏ8H;ßIN,ð6 C®$ʰ~Cc;Å¡±Z….ÆA„ö+Ÿ¡±r~?¯†M-„žÐ´&)ù ‡!¸ž³˜fÍü°ø¦A>Fõ‡Û²HÐøíR´o$°×ÂÍ|àWLÝÔžú8G­ËZ¤ÕÓ“b;š'´ÜÒ?…}œH†#ñO¬†úO] rc~0[^—§êjŸÄ'˜|hìi<²’^n »i1†üÚŠ"_’•c‡‹?Ã{Ú¶‘ªµ"¹/Hz7à]7+ø ?.ü÷â­å¼ÜÙSV}¶µ‹dßÓÏFcÛÚŽ>Ÿ˜¾Yðá°2ÅSàYìøE.®q*Õ4*MQžÑ%ÝaZµ\p@j`òc4F²ÎŸ¸_†ú™Ï ólù?ze¬/ÉÙä ›yz¨‹†)r ÛHßê\¡Ö'ŠIMÒØj/M®ÐÒZÉ‹ÛA¿â<±ÝâÐýÈÛ1ó AûI ÉlŸUîÆ-v°_ÔM¬:ˆÙ%–¼ ûØŒTR‰ÐlܤgsN!È©ÕF߀,Ù¥y×SÐ5øjØ•ÐÚ.¶¶`d§tèI§Œ:¹0EÂÈI˜JZúžêëÁ.™"Ýé«›°ËQvC¾ËÌSù”:½×ë¦ùåçä"ý[+õåñw,ûȬˆêݳ±Í>øx>UY)@&‹þYvL‡#[õž¾£Üöôðš--§OÜåz!Ç ?‹ýÈÐ)†‡‚A§sÖWÇÃ_Ås­7…)¢ßÇ$ËTäXå ×Éx 1ñú4äM³éþÀÄö+rTÛýŒ' S?¼·ÌßYýüR#\š²zÊ®zZÝM{—§ÕïX®îpšO¦@4uP‚>¬09-býƒxí,$ˆzápâD'HÇ\­Yñþ¾‹n‡ô©¯öIŠv6Çm¡­”ÎiKåžé¤9›È¶M7KR‘w¹*Ê’þîZ¢-7§œ…#ÂI/ õ̞ƃBIß '"Õ µ>µ³ex/;ÿCqNDɧ¸ãܲ8r[ýNÐójMÏñ§ídÁÏÈ‘1íO+GÄx׿¨ég‰cC‚ôîšãÃcc¡t˜<‚êc¢‰—KII'2L:g?‹ª¶±oJq6Â35‰ùVF¬ç òìúJEl7Gø¿UwySÆ ÿj7ÇúFgë”#ôJ‰3ïg 8Çpz 7Ÿ-ELK‰hÂiR~B½ñ+‘i…½P–µ²­c -ômâï!þµuÂv®òÜCçCZ¶i鯩‚®tÞÚ¥j¥±4­Ö}oÅîø{¤$/Zy³s®†`Ü FøoJt°ÿÁzñâwŸdt›‘‚ȳ‘$û}‹\ ¼Ùu;¦Ï¿,†¨ÃP)¡!©¼° –Î…r‰$dúŠðoÂQkÝùZç_² –7P™¯Y²Gl¡¸~ëF>oô—îÚs BÃëŒzpiç_9П¨¦-r¤W\ ˜l€k=3P5L3»،çö,Ÿ~`V7`Á)€Ê‰±úèKÖÜt©•6ÊrsÄ£Oiï–SD»2öŠÔõ‡¶Þ|ªíkõʾ¨Ü?_â4šÞÿåqS’o/é÷5µí–˜£7ñAéJI‰7 ‹[@úcÈ6­–êœ? м¤Äu<Â5ްZÿN›¦;^›Fëðý©â"à|.Á°gÿúMŒÏ_áÖtÎŒ5 ;§î3å>UN®ÜÏØzÅâJø\ofÒwsz¥µé!¤?¼™coÞÍ|èÔ€«Œì´H–²Òx °ƒÒf XÔÆ§q³å–‡ˆ™±éBé•cR… G;Ñsár,¬±Y|€<ú ÔÖ™ÿ™r.Ó©M+zŒøˆ&jñçØëý† VÃDHÂ3‹§ Ùú‹œ=æ„o [«bý¿}”uÿÆÌøªèFâ}ù™#•Wº–úLù ÈÑrO1£}qS 6þ»‡é™Â?g:DÈ”{¹bÞ†´²CuZMòÿ ‘$þÀےψ“²Çâ û¡¢J?9*qÛ3õ4SyžûRaþ* Ã~bËQ·ÍŒ6¦†[ÖåÞuH¡FëðÆk=ºœGS ¾–ó·iÑPl[1¶;`œ îi7bH&ðRõß œnT H³º½]á7Ý4ÅÅøt{‹Ø·b\‘p-ó6pBñó,«±³@i‹É>1ö¼8Ù©þyF‰÷^þ˶t§%œJ}š‡{6~æ[…W$ëE¡ÉuøÇU(¿u“«ðï ð–v¹7Q•çpX†qE× [Y˜O™^\E&RãŒwÿjb”ð.¥îZ…e¹¡©˜µ.?þ:½Èóz^ÆýGªê'°#uÓØHqÍF^U»NÅ2\ GHlèÇR÷ú¼11Jµ€™âðçÙ›AÑþ$ˆ6êÍl£±¯ÓWJíœR«.Uârä¨vî>£Æ!‡KX©3‰€Ó`ܼC«xÙvýî¦ó*¶)|ÁFR¤M7ãùÂX'ãÓ÷àÎØ3±÷ÿ¸÷?È~ÀÒP&œWÄ…‹Óµt8ßæë˜2q˜‡»ÅµZÐv5Ù{Àæ°Ü ,ÜÚàáVÆtëën㎖ mRK`V3þªÕ·éÙÛ·äjΤkI"Á,F*ZÀ íñ~P<ÞdûK囸¡;¬cPq©ç<à=`Ñstm©ñËA—rZ©–uZC…Vðò‡,r,³†ýQ]e¦@äC½P‹Fi–°˜À]åŒ6ÖA»¸É7èúŠýšùÆÓ>v=Mðw™ÉS§ žÅÒ¬sfˆÎ‡,x¥Þ¤ ôDî(ùÏl‹5žóÞÕ ÅíÌë†dß<£„°cçŸc­Íîÿøå ˆùyÔx¼jïKZ­qÙÙ‹÷hô¨%ø“ïqÜCH£^!D]y*(h"ÙËõ¥)s­RãÞ•4?ÇN½?÷r®ð9îæŒ‰žìå;´“+âÓ½P¥ËÝêå^ž¡æÍVvalÅϦlØ[è¨àC'”bÆö°A¦ÃÊÊ-q‚¸øDq.Þéa૽WɤwÞ›ó%g å0|M`ǤŸŒ§u*w\ùࡤβ¤ã˜Ÿ4ºm ²4”7äÁGÞN‹æÐWì|µó}»aœ”ÜÅæ§Âòº©˱|)9UV?²e>ÒŒ^œ3 ÔÅzgdy„n¯|²¶OLJ¢L®éqˆÝ–t6› ËDûî…ˆ'Z>|4SSì]ÑÜ1¯§+»Ô©ªì“2Q*ŸÕ¢îô>‹¤úºH¶c 934a(Þ5^žÙ»Â(+~‘,ò–Ùç²`• a+¾KR£º¶ªÀÑIϲ%kž6¡lmU8Ú0åF[ë‹´~Ymµ„â8Ñ]Ú¤®¥îÂÝN8`V+½ÓDZKdic¦a|ÖªP39»{ΑöÈ¥x¨‡gÆÌú6ü{“^ð2Ó(&(Å8Úox»c8¶b%RTR€ZÔðïW¾Ú}?#ù ÔîOažöú-¨M'ÍK~ž¾ØÂ¢ÖgáÌd@&«áÕGÁí­p+’J¶_x!D+ºÝg†¦9ë“ ¼¯i:³¶÷Ü2þ"Cþ©!¨6e žQ½\éÚÈ‘¿Ì¹eÐä-gJ"_Yý˜¥ò@òsÚEå°µ}¨?š a@ë×”ðG7dÂð ö ~Ò7 )#TBº~|“ô[/1ºj-·, Ÿ÷ZHZÄ ZuGo'‘W_S¶øàrš6q|Œ«´¯‡¡ÖâGÈ®a}Î~_!ýþ!)õÆxS/°o85]1H””Æý†©N}¢mø·AÀ·nSAòܬ¦ÆRŒ· ÀüæËX[Ú¹7Ñžá9Ù­ès¥0îT’ÙŠübã‹ÜëÃÕ®KZìLìñ£¯ÆhÞKujB$Ÿøþ—öÿøÀºÁaÎ@7'ìÿ  Uñendstream endobj 146 0 obj << /Type /Font /Subtype /Type1 /Encoding 337 0 R /FirstChar 45 /LastChar 122 /Widths 340 0 R /BaseFont /LEPFIM+NimbusMonL-Bold /FontDescriptor 144 0 R >> endobj 144 0 obj << /Ascent 624 /CapHeight 552 /Descent -126 /FontName /LEPFIM+NimbusMonL-Bold /ItalicAngle 0 /StemV 101 /XHeight 439 /FontBBox [-43 -278 681 871] /Flags 4 /CharSet (/hyphen/period/slash/X/Y/a/b/c/d/e/f/g/h/i/k/l/m/n/o/r/s/t/u/v/w/x/z) /FontFile 145 0 R >> endobj 340 0 obj [600 600 600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 600 600 0 0 0 0 0 0 0 600 600 600 600 600 600 600 600 600 0 600 600 600 600 600 0 0 600 600 600 600 600 600 600 0 600 ] endobj 139 0 obj << /Length1 1612 /Length2 9842 /Length3 532 /Length 10701 /Filter /FlateDecode >> stream xÚíueT]Ý’-Ü‚»ÜÝ=¸wM°äçàî$¸»wwnA‚K ¸,Hàñ}·»oûúýyÝ¿Þx{Œ=Æ^UµfͪYkm:*u-6IKGs œ#Ø…‹S  r0w…ª8‚•Ù4Ö®€W#*4hær˘¹…z@K€ ÐÀÍ àB¥H;:yB@Ö6.FM=&ÖZþ ˜{þ»çu'd п~¸í€`—WˆÿëZ@ ÀŰÙÒjꊪòFyU€< „˜ÙÔ]ÍíAe 2¬!û,Ž`KÐ_¥AÙ_±$¡3Ô hzÝô°:ýåb8! (ôõ‚¬!f`—׸8@` {WË¿¼Ú­ÿ&äq|pxõ½‚©;B] “ à5«ºŒÜ?xºØ˜¹ü• zu­^#--\ÿ*éoß+Ì«×Å †\€.å2,AP'{3Ï×ܯ`NÐß4\¡ °õ?° @k3ˆ¥= }…yÅþ«;ÿ¬ðŸª7sr²÷ü{·ãßQÿÁäÚ[±£rq¿æ´pyÍm £rü5(Š`+Gç?ì–®NÿîsBþnã_3ÃôJÂÌÒlï °Z¡r¨:º¼¦0þß©Ìþ?'òÿ€Äÿ#ÿÈûß÷_5úO‡ø¿{žÿZÎÕÞ^ÕÌáuþqÁ^oG€2à¯;ÆÞ ò¿…›9€ì=ÿ‹ ÿ¨üÉÿŽ¢‹Ùk3$ÁÖ¯‚p²sþÂÊ<€–ê  €•™ýk§þ¶ë€-{øªèßͰqqrþ‹OÛdaþ«õ|ÿpÁ–ÿJþU¤¿©sÈH+ÉIª°üëúw”ú«ö.ÚžN¯Äþ­GËÿXü…!%åèðf{=lÜ<þׄ‚\\¾ÿE¶¿a¸þ¹V1s€<F¯%srý]ø¿½ÿ\™ü Œ,ØÂÑò¯YÑr1[¾Ž×þr[¸B ¯ªþ}â_ þ÷õ߃z-P—-DBlÓ2Ó]j s‡&dŒú{¹Þ …:•6hT;öø§Eüª0}ª eoœ~nóü~äôgG‰yw¤—Àž¡'x–OæKÃÔW€½Nß!À²Äñ¡#ýX/Úû|^yÞŸSwwkBCóCÉ"ùTùüŽ)€Æ­ öÖ ÓÏ"µ>¿«§¶ðè˜>ñàî–áëèðÐ`Ï%Bß)KN, ˆ<}T€s©„¡N…÷'&Äô&tÒËöógJ½nïyt´$´‘ÊêÖù+àvå§$„ôv ÑDˆBëN¥>ÁÅìT”¨dâ”ÐLî˪+,”P´‰l2¸ÿ×7;ÚàéL¤zŠ¡¸ Æ~h„w­C5óCfîÜð´Fgi½{ â'Ûð'×JLéV'(—ñ¢Ô{àÓ—ìplò×Ûy=s±ŽÞ»šceË\Hm&‘:ûQsø!þa¡Yã¥ÌÀ¤òPpÓ…¡ê¸Mñ±†g‡ßY”[?)m|™ò-W”¾ZUÚ5Gc©Ng‹òœö]ÒHwqÛÛ6Òï!Ù²´~B‰è´q4˜æsYcáF/Gû`œ´ŠÃ@¯Ã0ׯÔ¨ßæ gÌ„åù´ö’úEƒôåWÍwú<5Ÿ…ËR¨bjŠ‡Ç–1§²"DÅb ¢?„u<¼E5nó±íŒåýž£ö‡ "Ø=ÙÝa¾ñ”±FíÌ ¾ò‹i@s¦ÔˆŒvQ‘ £ËÍÖ˜úÓD}ëÂYxýÚi8.üµO‘žØæ)ø[]!Ñ/9–lé l…¥ mƧۊõ@y‹Ýf™ŒL¯Ív÷|º1D¼2¡g#Fň›‰,d ÙšùÈüû‚—zºfÕ9r’r÷Çtf³Sì,ñõ˳õ*Û„˜¾äÀVÃ.E³{YlÈY'Mzƒ&=liŽ{¡WOB2 d®)óÜ—}í3Gʱ• >"wáX%«+Uä×K·[qûë¨ç1¶”s6vC‡½è‰¾´|.8nFsÂÞ1Í»î**¡©G\d×Í©Üé8}0CÂ{þçü{¨2ò3ZVv˜´/ŠC¿Øa¨µè+ÑõG¶„é#K/ ò—Ó„¹ßµæp/1“ (]my ^¿ŒBMXvŒ;T›, z k¥B©ˆ4G%¡mñ÷Ó ¡a >´=,-ë ÖñzAÕ,Áûü¿ÒŢ჻šªäÜæÓΉ™LÝÙ.äDïÞQ2À›3µ§ðzƒd\„]‰°aJ—R‡#d3…ÞP T3ØY´Ìôbá ¿´¿løN‘-ÜüÈ‘Œ² ÙVå}WGlW'²±nÊt šÏ=E¨r‡PØm1æ³ÛÃSæ†Gà–í5è€<¾Hf<_i6cÚø ¥4…y¦¹ÜÊ{Bq³ð,…ÛÄ:lìL~ÛXÂÉ”7ûòéYqð8#»›o—^‘âb;c[ÔõS?®_°*Œ¤ÙŸz=vòù3Y•Êk¢æJ YÀ¶n@ ±y¹â"däǯBNÁäQz„*÷<ÑÓC^~d  Ù¨Uc“Ñ¿¯UOh5µ+û˜e,ò¦BŠüà _8]5ÿ‡Ò"Y­Þ<y?3ßßúB•Ä ® ÝÒ›»(~š.î +·?9ÕÖŸ>pÊa4µ›~c)5cÂ0êŸð¬šÙ¢Ã6\ñêò¢œ+.öeàokû|™èçûp°#7"ѪE ±a!ðL éRòO~ ÇÌSüÉվĨ#êÈþ;°ÄrHÅF°‘qúLŸr3†ñ~‘rP‰ÜCä’.væ±eù:Ò6šgÒguí†Ë\GÅ_S³ wdö{§ãw‚¶î”DÈ™˜£¹bÚªt¹ð¬ïýŽòÛez\€ˆ~UúóâØ¯: ÚŠZSKìD>X¾üBûIV0>ÞÕ³³W/ylÊ •OôËïÞC‰„Óçf$E‡·SâãçïÌŸØ ¬ÅÎu…OÆz Ê(SÇúCB…2=8b¥1 ø_ý×¥›=‡í²¡ùá]ÕJ4m«*Ä€ù+ºù¶ôÍïª.Ü ´½35;A§j3‚,[ß |1ÙƒæBƒ1k„v–F,Ú}²>šÏ„^hœ|(}¸ÎöÎpN(`Þ ,[W‰ Ÿn,—€AF=‘@ÍW›5HŠ* ô=ØUs~ ‘rÔ¢T’ÈRò<ýÃß,œƒ°tÝ…ËM d®59žÊ÷¡­Ë½êt{Æ ó²à‹î¢XÁ’à^fÖÝFëRš3cMtu†%{»‰ ØÀ¯Žåeë¥þG¶²™î«=MÛ?ú<":äÄH8à·WKOU2hn÷Ïh¡ƒ™¬ ®N¤y"Þð,Š+OߺºOht?Ö<ØG•²Ïï|Å{ï"¦Wë;PÙçÓ\Ìh@q½Ùšù‰›JŽ1ëjým8†¦c—kª¿û5ö})2oRozÚ#aX8tFB`Þë.ÜJmšVó͈*JhrK·Éžö)¾IûND‹žËºç\¥Ý0g"ÿ¯J_×úä|o{6fØKLymb¯{Ï•vúw(ß;'™HÀHCª~¼/3RªêCÕ=}9 ô¦4RùpÕ2ÿ[@S__»/:œ  z&•2‘/ fX*D}´Ü#´-ŽßÅPŒP¡ÿ·ç‹ …ä˸ISipëËŠîš CZ{°©Vaóx;:‘áúEîo¬<Õ[ õ¼C ïcÀ™Û/=NÂÄrÆä¦äóAÐmPzxïcø°äÞ~{8üÏ„ØBÆ=fΞfŒ•¯­D Ø áKœtÊ "|é9§—ŠoßBÜ¢ýu“™Â±PŸ0¿¢pե͌Ÿé¤|>몈O®’+-9]G̈ –ó¨ÔbŸºd·sI¶ÊÎa¦¯&¤…›ïéq-N¸ú×ÇÆÎ%â´{0…Ųö_ëÜPéfŸ'L>—72 |µ¾ÉSÁY;RM2õ&Éynз=ÿ¨†¨±”"Ø›ÝzÔΩ­M¸+÷á;-èp0_˜‘â_Š73d²lH†'k´mþY’ª?¡6NÖ.ÞuÅìHÒêu¬½Pç.~°~ë›<²õý]F6ژLJ]ª¦ï¢ ô“±«Bí>) ¶¥nþ¥•„éµtÆ%s-–@>Z†{¸ä£LÙ£~£‚ÿú‚ó¼þ»ßIœgöËŠ!S-IÇ·“8z/ÁÿdÓÍ•~•§úm¹¬~&k­õö¾¹7VX¨f Úc‘+ÌMë5Î;$t—Ƹ™2J2ÅÜøñ¡Gdt½}Wˆâ,»ƒéB½k¨çËzÞ¸Qü¹ÉõÝuWHó{,Úu¨Û'M#¯}õÀùD[H¸ýÖô– œƒ°Ä'xWÏ?ŒÆ:F–P ƒÛmè󯝔).w&1žP¾Iw,꙽ð£¸¬ŠŒñðº~…%À¾Øê]™5ôÃóѧ¡Ï|(/ÉqIìxÂôC.–{³S~4ƒÙ¬ûÍÑ=ÙwÃP)O ‹Òæú¤)úÕ6Âì*øû7øVK˜HwÇ-Ι饙êg•Ö mÒÚ+åL¿ìáïÇÜ=oÐdôV¥È¥üÇ̤oEÒb$gòñ85èŽó:}[,sBŒH¨uÕ,ÄÉybbGÊÉPÙ5“á‚Y¸3):u3ÅbéÙDLD«Ö¬.À~þ™°O\õ Òè7êzµsž†ß%H&·,D(ÅBËMSÍ?8Ãý†PâÅ #Ðl¸ˆ †‡ù>~}TW3·UÚ6F¼YÑ [Êÿôx*=í®ø8]Éa}øì%–•¨sþítù·‘±ì~a4¾ÛèYܳ}é>Ý÷ŽÙ¨"–R"Ù’Ñ2ȉ‹'åk-X¢Òì+'D… îÈRð7n]i~ ü˜£–zaùiŸ@ºËbK:€œOsÄUOuG~6é3O©ÁÏeRq´õ#ÝH' wYìø´q3“SÂ]w*Yå…h·F‚XgëÇß“ƒ·æW%ËðH+ø–ÐqäqŸ îúѰ'1OET#œ»S¾È-#çÛ©*FúâxŒ\Õ|HvN^mË6¯Ç‡EÓ:%¯b=°L>,ÙCŸYWôD\cÔ\?šGË…º)ý$袞¬†G6n4¾ØD”©ßm$qïi¬©!yb4‘ý.ŽðóŽÔ²§Î™Í“»T )!ê¤B¤ Å‚m¦µ±ÛqØ/_Iûw×8J˜‡¸ÇÚ_˜{7+í_.ËpÕN<…^_÷#‚÷UHüÆr%ƒAaÝD,Æ^èp—˜ ®WûÊ”¾e´Kðã"dž*ìRö}£«Á&sŒ 0ŠÅöŠîY‹Óè†Q4¿‡Í’È3÷aß.Æ‹ ýAâÙjû^¿Í‘êö‰3¢.ƺN(VZp ³¥Œõì`nµpN!öÜ3.Fþ~õ[^«·U(™D|K÷IEÅ™:Bý¶<’¸›‹Q“ÞC6AÎ ³æ9*íäØl Do·4³²q-ðúØ Šàƒ¿Zò­º*?Íý¡¯ÝÆYøÙùí—7Ð,Pö òã´Ž-{ú°Ý/hþcéÎh\mó-à~›Ý¯{Êm`µÜoƒm‡WùjvófÖs—³Š!ÓƒXСYËŠø*™l$X$AÚ>‡ƒs±árd/A¯ähy¬Ká-72DI%Z\¶’~|“þÚ’!†ˆc„ê(úŠ?Κâ†È¢âS(uãWß)»ÚGN„¿ØZßëÜ.Úï0x g,XûCÄ¿ËófclßÒú ½=iÒ>9°Ý³¬Í°Ãw¨&it€ˆö1%ènÍìœ2dw¤'!r–Í=fp‘YÕ³Ôf®0íNP?r• û”ã«NMÞ0{(è’š™òî¶ (ÓžRµVÑÇGæuŒ8óɸ„0›˜f#Àš©ç›÷±‘d¬5q(˜ :q¶×‰g†ž[=¼¼g-«8Ô®ÍÙ½³LòVåÐùÚ,6§Ep¨²Ðñ(zÅçíM*n±–¸&T™â wš8‰î‹·}WUuT½€’Œà}ÛõüJ'Z]÷7¾u©b½å¯'«²bbú¤ â%ÿÆ\ÿSd_,ïçjÿ 8‘)ÐzŠT‚7ì-zÒÚ,ôØþƒËHÝåFº3RË(MÈ$ ¶û{‚óL‘vÀ0s¸bŒ¨ág †Íˆ³U¾¦ÔBdº™ GIÒÌHÀ»}–uöú¥ÙûóŸFÛqý02~Ü#æ4V·Šf7£L“÷2¾Áyõ_EÛÍÝS«·éÕåWGé9ËvVð¼ôPÒ'ò 3©ÙÓ27 ô¤§…î`ÜRÆAsñ7ò퓃Cë!çmN´Å·ï”‹XƒÍîǪ{éЙ¥üè#({aŸ#;½èÇOßEþ¾:ÒD£Š5Š5kÇIÛ>¼3燢#:ï T8ïþÜD3(ýIiIÿ”uâÕ²SˆQˆ'x·3d×€#ïÜ#e¬ÿŽiàyY-Èö~Ÿqã‹z›@R­„™S·á€ï£ZãµØ”¾©Ô¾“,€Â÷½#zUƒp¨œ Yœ˜§‡;y´¦¡$V³³ù¶à° H<µŒbkü*]lsÙ1ËÚç?†í¸K»~•R†Ûw1Ëtöð¦á¦3Ø×rË$(E«[—dôù1xÆ€u[À¥Ž$Ýõ§\¦¡JDo›8 ÒF¬•mŸ'ÜmE¢¯Þíößo—¶gªAŠU j¢që§J”¨áfVlNFOZd~Q´§Ç‘ÑgKÅR»ïœ4ü9qßè3IüÙÒBO£osIé”U쬗×OLÔÿýá‹Gš.æÒÛXß[å優}&ÅKnˆ»Œ¡ðh­Þ~cv9xýkQ™ ˆì7:Õ´f Ps°÷2ÌVÒlç`ž>cP¤†²™ø%°z3áE2±Éîöò…†žâ…Ò.~—uq\[¯@ÅZ©ª{¥ÓG^‹å½‰¸úm6`ÌD¸¢´å×Äk¾Àé•Äex¦Z,‘R®_f¬ÑªJƒˆiÓ1µ]<6ùénÄbØ©t¯Ê½^þýR»F0l§ä–ãÓõàéàŸLìõéxB»ácd'‹ŒÚ]yÌ‘¾ººYý™?ÿÝ l3•4nOUß"Á‚ 1Íú·X´Œq®?¡MöðòߥõPûnqàÁXú\Ê`ÕpMHËPrq Üžo°ÀëÇh[(·|{jNPCl¸|Tª30%—F~äÙ¡Kúd_-øUyªY“hÔ]ƒÙr£}ÖGo–CÑá¼@ qIªý´Íó…-û”^EòÀ7þúÁCGDÙ mo3¨ÿ¤xl25æDALerP0i¬ JägÔÖ«aü‘In7¬VÙkûâq1ËeÀv%Å^nNz±2KÍþ»9‰¢j‰p7YîÞZ‹ëï„ß6A¢ƒ& ½ñ š¹íz… µªÊ¸N¶ò炯O¥ Ép}¯ õyÐ8ŽÜŒlvsL žMnÉÅtûê­•}eHJØAZ‹ç _ÏëZ~ýæ/ý憯¡C¥Dgm3"§ã•&ê*7¡OÊ×îGj'v:ÃMÌ_«Ò¾¬OT[Þÿ8… {gy¢ºzYº‡9¥=.XJGáB„ÈåUù/ËÉž‹z’"¨k„.Â`ú.I‘çü´SCu/ïÆ€9kwÔþDÊ §ˆŽØ:yˆÐg²ý‹¹¶P*¢(«@äKèÌ€?mÆyäFÖX{š‚g„›| §;ÿo£ÔG… Cœ™OJ–’WÂ:©‹¬A;]¡Û0r|EÑG—Þ0ÑT±Ø6Sy¥ªÜ@)¶I4æOžjß+Ë“^@¿Ï“˜ Øzñ…â¯>GÂR®N%0Œ{(XŠ!$Á ¤K-&n‡÷ˆVùEWSd6Ý0PR5Ÿa.~ÈÇY!3ýcàðišè|¿&á—uÀ{§dÁŸføj@sÎFŒ>†¡Qu 4u€_>cy7v°býã&ÖÇ“˜Úpÿ€l¡(#[[öm߇ܙ)/dŒ‘Y¿K¾BÃÏX[¾¶HÌ/˜ò]ÖÑè„ ª „ó½Ò¸âŒA^‰þu‘ÎmïõJ)²ßB/á˜8Sͧ1T制¿¼ðÆlr÷ó¬ÃøÓùÏϤÄõ× aFéFCš‚Ñåâø+×Ç"·"Þ,Ôôk¢E±‰^ÜSám÷°“ WžÕÊß*;‘P ÷¼áìz§$ƒÂôqEœ®u¸äÓOåè‚d·ÎnõÕùŽ7¬ëeþ‹Ò­õ%‹™‰gz„'Ó ýaßÞDrXÄuI,ÇÏ=óŠ+á—ÌWRÀã°Qºéµ‹Ýw[Å·dí¥@N±z?Ê¿!·­€ù…}Â_¢Pê£Lû°œ½ž¦¿)¼O@7Ö†ÿç$·H˜;$K-‰z£«B¦8È–£å4l°ð9+ô›»Œeªuþõt;®ÞÒN.r߬Ûc»îþýZ;žËÛoép™T¯VoWúÊØ(²¥úîÔyw,~Δ‚üIs_N¾êOý/Êmdg«ÚÇÈ‚­ c­È¬Sü³«ïŒ)9 ôsLî–2†ÆØ9Nîôž}¯kðè½7&tCÐEJyðcÁÒšªºWÊ©£(Póé‚÷õWó”¨3 ¬“ ñÆ.T:& d4þýÍ!ÒÈ(ü™dÔŽïÚ ‰C9Nó¥E W8€G¶?Å5˜òȯÕý01ž¾ò¤Þú…²5<ðŸ‰Y\Ø#ó¢ÐQ‡þYPÝ]@*mûBUíSéÕú·Èõ‰®6º(ÖpopmSî]›$N͞þ ÛIEqÖ5ß•QB‚ÇÆ\¶Òq4j²W§FÔÞ=.‹u|žƒ%We'!jx¤z2¡v˜Ù¹5/g±ôzA€°Gìq£J±:Ñ-Úßn0‘N—÷wŸ8 û<ì–sO1ógÿÂKågíåŠN<–éù7¦\¹ÊX‡*“?é/üÌÀò›Šïö³üØ·øA+k¥-W!ÕY((ÍvXt£¡ÑÍWØå¤B—Ðt/| Çb Ÿt‹Á·ËQÿŠÌ„ÉêPR ïGM2Ìý‚|‘à¿l8B‡![7Oç†?Ç^{|¡-/›ux%†˜_UfãõØb û“k.6‘0._F@j©¡sÿZ·ƒ±¼|ùë|ÝŒ€+Ó4š¿h%eÎ㛸˜¾Ü ÷>û঎0X$˜[üñ.²ÇýñòW÷‘ã÷•j©ÚCs_’÷d’8 _gŽò˜aÌhIHë÷”µŠô-8·Ï–Ñ_hÇ‘Sm=Fië¬:`‚®dÇkŠn{Êt”Ìß¾P£$E$äK}ƒû¦Mñ1Âí³I¨oØÅüY*»âܦÞù|9îÛŒÂHÌ•)æî³ËãXž¡|£|}¯þQsN‰ávÐÃü”:d"~ƒˆ[ËU/@^>àÀí¹zŒb­Íâ!ä"â±~×ÑÊ m8FçÊê(í-g9Çò¾ sÇï)? ›·£ê(Ñ/U?ß"WÍ"±&b±{©o®(‹c¹L Œ”´vÛQ sv¶São9–:Èg"µŠ…gñ~,ûR¢røSÇsœ5½‰L窒‹3Å ³î`ñJˆ@ÑRăZ‘{Pð_³ú‰‹áÅC,kh>†ú/Ý›OÙTøŸpmLÒ4; Gü#ÛNÛW4x´œJß5ÄrŠL†~?þ0ô7J7@R°šŠ‹ÿi–ñ¹Â£®Ç†[p›\R²álŠîkÙê§—ü8V€è#1¶xöâ­k[ª@-OžG9+òûžüçÇ0„§ÎuÅk‚uâ½³“µá®£MŽô‘ˆÎ¤ä ˧¹æÀÖPÎÆâ¢-sïòôý7¦)¹àŸdR?/Gý)ë73w?Ä}Óv‹Póú2èïY¦\m÷Ÿæ*+lJ„äçÒdCú9׎\ø:ï<ÞY)câÍX7¤·Ê-|X/n´*höà3¤äͦ֯ü'Ѐ~ÀgUƒŸ£|ê!ôV¹:™5ýžX± ©<¦:L”Eã›Kàa®#èÆCQfð¤…ÞŸ¾Œ•"F»YÃCÎØ%*Zs±Hð«x$;|B²‡ õó{{Â>ÏsÛãiz4G#P¬Ó»‘ä„]S5¬‚ª÷FU6õ={L‘R|…ÜwTcŠª·þöŒ %ÕÈ)Dç8wü¾Ò‰ŠžÑcÆœ;Û®ª©ÚOÎNÒ÷>Hä¹ëk“¯w¨œúc[üSW OqÒ•"êXû?Lµ3›Ùa|¬Ä(ýåܹqé,œåj£žoh,šÙpÞeÔ¤æ—çG@I¬Nªôõ ¾5—’%dÛBQØûSè2Ou$›þIØðNp1„µÄnÆi²wö|«A…»ø9^©\)xêpè7¿/Â[ÝBì.sû:ÕBP€3I©áŽË'YQU“û¡D»qqû»¤óìðÌúÝÍâ°É@ÑhýÛ¨³C°´ÚbŒ‰2:·‡¾¾Vl[@qÿG^¢T2”LwAý5fûø„o|—ͪªz¿‚ò7Šè“t‹’J"׈ÀÀä´ï ž5rÆ~ƒ%c”Ý3Fs}d»+>bA1“3Š2égel DÉÍÒƒi©¦éWª!kç•oñ‡áä¦]xÓ¼aZ4ÕÓÆr™Ž¶:뤟ýæ¼kÛ_™ìÆ Å¥)‹þSÓǧ²ý<îrhtŽ÷Éw±,¿I‹7‘¤´Âz”º ´FèÙƒˆ¿•Gw`›­ýõí[ØF›P-¶Çº·ðZ…iU¤,ﬖ%½Mù¸+m”3…2÷¼p%2±\ƃѶ{²V µ6¤‡û£Åþ½˜¥Û– ’÷~ï¤ÝÖ.iŠ›;FÊg‘•ˆ–EO:Ÿ§ÿ â@³ÆzèRð9ÿ†`¹&ĮۇæÒ'Më,Ì‘#Ï¢×é©7é%o|LD5÷/UŠWû,ÂSßôK’Œ•h¾ã P!Žbéñ·ôpZTßt¡øÂJª©®œy2çé«‹KtGc0 û'ý›AÁþ“¦Õ9aá2Æš‰dmù=û'þˆM“vé Œò7ÒæH2)ò5ðY­i¤†B×7–&îL•Y­ŽuÆÚL]Ÿè/¹¬ÞöÐÅ¥­WlÊÎCq1õˆv=Ñða‘ÉdëÏ8à ¢n¾C/– ·ïµùâÇ…§<ËvsŒuú8¨\~K‹¯6•m3Km ëFº¦Ó“ À ¢>7…1âoÌ\¤e[+(ñ.èì=i,s'·…Vá˾´ïA£Tˆºeí:Y| ž ]$3GþWªâiû×%•gSð6à÷Ý4SõJ=üÖŠgsEÎ7AúÉC/aʺÏÉicÒÝÈ‹j$A¶ Vä°è€‘£O :Ÿçgp’}ªîç"÷ÓõÑP¨¼ª'[îô¼‡€N‡ï›¿û§Æ3K&#z½,œëa²+Z Ͷa\Šy“·¼ŒB j/sÓ£×Ö,ß«OÈ£ k;劢=pϯö’ïãÁâ­Ðö@˜½1¶ˆ{c´ÝÚí¾díÀöÜ$ˆà3£õš2e9á隈½$WF÷»×Ê›ŸIƒA¡"™¯/S½Ö}óÛ:±ë„_À’?K§1ǬþNo%³â„-rˆ9y*“ìöm)î![Rñ\!žÉR%.\ôäpÁ8¢3MïÛ*;¶IÉ)—T‰Jµ=—Ï&‡Ã“Kó½©íþ"é%?<Úà1;ææo‰~Ù°#½_ZRuIàÉQÄ&/΀¹ô–*û¡ôo ÍPkšË0g=,3$Dw~Õx ÎÿæƒúÿþŸ°°šA\Ì v¨ÿ &T±ðendstream endobj 140 0 obj << /Type /Font /Subtype /Type1 /Encoding 337 0 R /FirstChar 36 /LastChar 118 /Widths 341 0 R /BaseFont /DCJFAM+NimbusMonL-Regu /FontDescriptor 138 0 R >> endobj 138 0 obj << /Ascent 625 /CapHeight 557 /Descent -147 /FontName /DCJFAM+NimbusMonL-Regu /ItalicAngle 0 /StemV 41 /XHeight 426 /FontBBox [-12 -237 650 811] /Flags 4 /CharSet (/dollar/parenleft/parenright/hyphen/period/slash/X/Y/underscore/a/b/c/d/e/f/h/i/l/m/n/o/p/r/s/t/u/v) /FontFile 139 0 R >> endobj 341 0 obj [600 0 0 0 600 600 0 0 0 600 600 600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 600 600 0 0 0 0 0 600 0 600 600 600 600 600 600 0 600 600 0 0 600 600 600 600 600 0 600 600 600 600 600 ] endobj 76 0 obj << /Length1 1626 /Length2 11487 /Length3 532 /Length 12357 /Filter /FlateDecode >> stream xÚívePÜ–-îîNãÜÝ=¸»7 ‘ÆÝÁÁ‚»»[Ðàî‚[p}|ß™;uß¼?oæ×«×U]ÕgËÚkïµÏ©¦¡PÕ`·™e@Ž`fv6€²­ƒ¹›«:ÈAįȬ´´¼Û¹‘hh$]€f`[£”(ÐZ¤€;??? @ääåbkmÐk©ë0|øÀôOË_!s¯÷¼gºÚZ;h߸íAN@Gð;Äÿu¢ÛV¶ö@€¤Šªž¼²,€^VY tº˜ÙTÝÌím-ж@GW À ä°ÿÇ`r´´ý«5W–w,qW€ÀÕ haûžô´:ýåb8]l]]ßl]Ö.fŽà÷€A[G {7Ë¿¼Û­@rr½G8¼ûÞÁTA®`W ['0ཪª”Ì?x‚mÌÀÕvµ}w@Vï‘– ·¿ZúÛ÷óî›Ù:ºÀ@Oð_µÌK[W'{3¯÷Úï`N.¶Ópsµu´þ'&€ ÐÚÌÅÒèêúóŽý×tþÙ'à?uoæädïõw6èï¨ÿà` vÚ[± ±s¼×´¿×¶¶uDbýkWä­@v¶Ø-ÝœþÝçtù{@ôí Ã; 3K£½Àh…Ī ¿—Ðÿß©Ìò?'òÿ€Äÿ#ÿÈûß÷_5úO—ø¿{ŸÿZÆÍÞ^ÙÌá}þñÆÞ3GÀû;Püõи9üo)f¶ö^ÿ§¤Öþƒ­ÈÞò_}ò`³÷‘ˆ;Z¿ËÂÆÂö£­«Œ­'ÐRÕla°2³Ÿ×ßv-GK ‹½­#ð]׿G `fgcûŸ¦­Å'Ç¿àþ‡ èhù¯ôߥú›<«ºº”‚ÆÇÿÅãúw êû€5½œÞ¹ý[+J Ëÿ8ü#!òø0³óð˜9¹ØßïÞ;!~6¿ÿ¢äß@ìÿ<+™]l=ï}³±ÿÝý¿}ÿy2úiG å_k£6s´|ß´ÿ0üå¶psqyøïËÿÞõ¿ŸÿÞy Ðh´¼² µûžž ®ÁÏ“2èíf‡s*®×,È ¬u|Øä/7}®ci˜xmõš?rzÙU`ÜêÆ³§ëJžå’øQ1ôäaþ¢mçý°Ìj\Œšz¬ís>§¸£Ïæ½·5¦¦n\ô G:ÑÎé‚p~ÇH垈C}ë„æo‘R÷÷FVMþÑ1mÂÁÝ-]ßðà@×%lÏ.ñ‡¬¯ˆ4‚î0¨´QÎYÄ¢úZå>±øá•hØ&”¸GþÍGî⳸P[íÉf¿kܪa °¿2V+|þ<(R&µ7Ò`í$ŒuèS‘R§û„Fgmz}C6ˆ%$ù3™Æ*oï$Ú`öoÁöIÚN£Ôý±™k²XkšK")>Zy)áÉ)1UìcÈ ¦z+s—{Ä4Þü­"¤ãÎ5ÁM’ÔØžˆþ –âmš’ŸŸÙXÚ‹¼Bå/*WÝÅÉ(%ƒiÜè fKÛåG‡ó“?J$Bt&¶qh¨XÕé—º:‡©áÈgÂoˆãÁɱíb˽¶ã’p@…rk.\LŽuñDxê°Öv‡çú—·,ò¡˜ÄÈ¢º4 üžƒ(YÝIµ!ê]k\  ¡;ôÄcŸŠšÈúv}š*pjaߊOíÓHrêM§ {•ÑÛµ@º˜…ãp4@M ¡WIßO3€&É,ĸÄôòH™n<ÁÂà¸qIiÎÿ¼F"Û4Áu3ÿ =Qׇmw#©kЍÚo[YO¿î<üÃÙýºÄãF6Ç`!µå‰yMh(Ré;ßrcÿ/„ÉÃJì¡‘¨ÂåüÚ†¼tääO$3²(Ó¤ð+èˆg Úó1¨aZ—5'ßé-êÝg%1ÖYkË5VV 3G-o§ôÊ’ê¢%Ua†K:D[Ð>dnî°MñP ,èE†ó°!ÃÆË»5úi&DUµÔ•|GÒ7 Þ’R*o¦û8ºQQc{GByl >þÙÆ0øòh?ÞìÎKžÜ{ÍçRß5‰©×˲ê,_ù…ƒ)"jÌ"ê”Æ&.£²XõÒÅëŽóËOÊQãå&GUéÎÚ›ÚÁÝT”ç ¶½ uÑ[S£Ý&ÖS|" ‘Øs¤rJ®Yr~ò~GK·f¡ÞFÁ‹~ñi“VŽÚêßødé÷b‰äâ4£E¸°‹ UûR)b&%m;+!Í'ÂÔLŒWvÆåsþÐIþÎýây1 j«cºây;Ùäâ“e*@ZïB-'•Fƒ˜' Ÿ1Z+òÚyÜ“áÊ÷Þ*,öä1ÔgФ³DÐt«Àfš¤ÁS”¥¸õ±˜gá‹ÂÇbÅÝÛàÇ5 ŸîÀ/fñCؤ o–S@ój…IŒèuDUú±ŒÙÊ’± ¿ÍyD²Pô$K{¡N“è'ôüÜ´ã^‘ _>Kç+ È?[nÓ/²§ýØ(ÈKGȉY’DV(:ÉÃY™ê„·¢×a²á5Çh5õfdÐ[ÉŽ¶ñÅ‚ÝÄ¿= .'s÷ða¹=ñR¯òÀôÑ‘uŽà9‚µ¢&Uòc#ëu¤w‰òáp([S.(O—£XMäÇ»x:ÉQÀdÏ-ðôØ^BVc8.äÇKºVê<|JÅB©¦¥‘ñ;6’ðgä×Jªè æ²$Û›˜½ì™fA%"H9™ýÀI:mTÒ´«­U˜ôÒn³”xÒ´ŒXµ0|ùØ (­¡>,óðÊ×fJ¢ùÔ$Ê-Þ{„µ7Î98ØBAsÈ­‡GÂ7ùˆî<,˜§ †&:ZìõöÛÙ=#Ìe·¤ð«5Ó<'ÿ<63uϘZìüÙF/ÏÕŸRo$AÞž<ÕK*ÉWTî€óÒ>&ŸáˆÜY´(Iº,7Æ q¡˜¶-bv}ÁO&=ÜÄÇlH¡…o[׿j–=q†Ý1?dî£|ÈÀÞ{£„²ÑJbEÅk=x„“ XKVyû(g;ùÚ¡a¥±Ìm ŠJÎjÏšdEèèСeSÖ v#êù¬ü&s¶ä¤Šú¼Àpb/Í,öyÚÔI’Yoª±†ðÁ)§jësks¯ÓRİG¯ô{®1ÆÓÚf—rêð·<ñª»n›è8»w6[—ÿd¡ô˜fóv…Ô2ʬIʃ/™aÛh8z0}¡.2y Ϻ£_¨Ë˜˜“³"„“1£½3|¡òF°£>3·kùì¼ÝÝ‚X+×R_òY¢ãþ^°7æ ÑŠqvÄLüóÂÑAQ‰[ÂfÅ"Ù¸\~0…o}µRtOEèæ 8 ¨0áSBÈùgø›àe¨Lµ––q˜ÇUòwo²†§º¸#IŒŸ’â´s(â©(J½ô?‚ûô¹í'*÷Ö²ö‡Þn=G-¯ƒ.S&К‘THLÌÖënaŠiô¹»G;yw宥3‡Ãú.ÇnUÅb`mn‡CCƒƒoê•VS#S"Ù•ïb|­š°æLs5 E<4²øDám DRB º¹ÿÕÄL–CÖ>ÐC"?ú»o-|ЗÙ3¼ÞŒÁ{kz'fˆk—„­™’„Fî£FÁQ¶“EŸAØ;ÿzœ6š ¯kmëþk¦i‹à…Têh 9.¿€ÓЖ'?˜”F£ÿ¤Y.æà ¥Õ/ á®w\ìÏ’3f™$“¤\ãÆÍè°{½›¥°÷È?h ÿ(¸ <ÔMð´ÄÐ2/M*”•ú‹x#Ý Íé,Sà寚¦1…w‘dzg7W ÂBÿÙëÒ¿qÿô[4Âå¦KB}7Bv5pšmá\tίñYåÑ‚ìôø¤t1²7¤D—Yá(¸¨%ÏŽíM@O•·þa²òÛs‚¡$üÉXÈÉÏž¼¸XöÇrˆÇzpÏFkC$}†D!×M²ªÊÐSް¸V^aµãߢßê1%h£ œÕ“N3"sLØÐø­kOhžQó"îrûÅÇ$O;þê4£i£yôàóž‡ÜU:r:‚±._äUSòŠŽ/…4å1^ƒ×UÚa¬F›íÃ3ÂkÝ×Ãýr"µ]{Ð*ó|îÉbð`>¶yYyÊC³Iå€ÒÙþ@º!l|§ØôjT)4EåA8@)¡–¬ÿ½r‘UðETÓ=C‹ã€T‡­4g.&Ö2º¦“¿âò+ g¬/V3eÞÌ ›ŒIvsZbä¬ Z|ÎMEá2˜%QÚ ½F…>7D‚B~ K²¦±*õÒÉòØHÒì–` _}(:íÚ>ª|Ùv˜ã«ÕD, Jòùå®%7´Íò}'í¾öUPÙ"™š’A;fïgTŽêæ´ËP·xLðtδdºÁ}x$÷Sãå0)ó¶‘°uHX[Áõ×ÌhWä ”>*vZâkN½vCÜNa‡më³'âÔC#€þò,ÿjtØš#˜S èÃøªí鵨 ¬ø½Ò˜%ájøìG)Šq§Ô]ûe5Øg_8“Í’8Ÿ SSüjÛN°RÚÛ°z²„°“¶îð}³xäíÜB¦sd|O]²¶žêºOk Áí^4‹¥â1tÔ'×¥¡r>ê7 ^ã("Ê/ƒŸ#x2ÑjCœgû^ Ë+U¿= Õ£'ulJO1ŽuAÊÑ‹T²˜“/¨æJòA1^¡K° f>Ê ßx«ÊkDŸríÛæšïRÖ³çS3? ÒË2·FÊ€±Î¸ÄޝT!³]?!oŽk!ä H¦Š{VÚÿ™€6é½äb¨Õ9aSÿ<¡T÷ÊžÙiËÚóÛ ’QÂ?«ºz\(¸d„GçnRU8P†à‚‡Í‰TIBñÙ¨CÒOƒ¿¼F#£&EóÅåb÷G“zÁ_IYe¹$5‚-Fi¤¢bÑq&sÖ~PÆ*)ü‡]àûR±ò rŸìÙzUp¹MŒ $gÕ®--ÔÍD…Rˆk{ Ä·ºbDw¥ŸõqzÙ(4¯eõ2':L8jLæ[\ª B>r÷Õ”© %$¶íp$9¯}ÌÇFh]CÈu¨ÚŸ¥¥BfüYD_<"êêD‹v‡æÅ)Fð[=ÝŸàõ¼Ÿ>ûÄ„äcÔá*3­›® ¾$hTþˆÇ„ýUN…¯Û!Þ¹ó¥F'÷nF3¥“v‡¾äZ¦£Db~ã1˜ª†Í_fm¦I™JF€3„”ÒJˆå•ü!0røÖÝkÆ2‰b×ele¯ŠOÏ»‘BMhâB=„蛢ѰIKàN¾Ýù¢Wîײä?šXûÏ× VíŽfüˆ4ŽOÉ‹hÌÞr)Íý°]ܳ8òI*½x1ŠjpˆìÌÏ’]5;í>•E–Ý0[‡S3%MÆä'¹ c¿" ‹©#.™ëG| Ù7è”;§šŒŸí¹Cëf%=L9=B+Þ³ìñ|ú†ì7‰@jÊZ"L…MîI5‡ùÔ“yúM"½«ÇŸ)=•:SàÉ£û˜²Ô9&r+Ae};3 ƒ)Vœ£Ûü×>òÌ“D±¹¼ZL)ËÅ×- z{DŽmdŽ$Ç?»=¿~›ŒšO».¹È.w/d{5µªâÆ# ¬»¸]Ô.€Ö4Ìqc MŠI  ÷-³Z¯Ì²“Á+P}ûû7ªüT#\A&§ï„'AbŸšÙÃf˜®NX·ÞkŠ@µ“-«lS1`—÷@£‘|µSÙ"[yi6ìКø–Tå~‘Á7ÍÏõýd|ÞÎÎ? m\ŽÙ¹öš%rÝ`-‰Ðą̊\C!©~K§ ÷¢’—SDû)- 3(“œ®ðü6Лì硾­h@)äA²7Îí#zpGýþèøÏ7‹—5¬¨ A£NN2“!d•ܲP×)ê¤ã¯ q„e 2ŒpÏiêO{`„çÁz]»s1á[Ï•½€Û&Š/¢*¥šó&ÃÙV‡KûÇÆÅä.1äm®³¬ò±Ôxeý{­…Ss ñ*ð7¨Ñ;w7>ý¡=ÌmBQƒ‰ÝX3ÕzîuŸ¨,hi¤])ÃýÛF„ý:ú?¬!å6*i=&evÔçÏgx…öãXÀ4 G  ¾M-;„t˜ú–wÑD®Š´-­õG%ªV{ÛØ ºv)O££‚¹xÐÅö2Ý゘â5}m±t–cy`L»M éTv6/R2_Ø¢Üy(Rb§Q‚VUêþnºÒÜ01v=nLéD÷Ž—Åd“?…–‘VóOÏXSKÖk g(™›cÂhà‡@!<(’±@:}xÒçCñË /Ô9òë¸~¤ Có2¼;Óà1äçï ‰DÌ’¹3÷k6©+}’=­—g«_ÒÐ:Ç™’kݳs™{ÚçxCÐ^8á’Mö:X/¥¯Z-ç>ÜÒIê0hý:cOÌ-èð™45bz®,•Ux¥i6ÇbxH8X·Ké~â§€/µ™£2¦xD. 1}`m‚²ã_ñ·ÃŸð¹^2Ũã žžÖ8À-Isžž›H Ë°Ë¶iÃ*¤sjÛ)á là€pû,dc±?Ö<°š>B…S^Ñõ÷¶¼î“ŸXþ1¶‡„wÂ_ºzËETR«~/¬2Õ–ï& EÌ|0íc™£øe…ª‹E¹™ÇKè=yúþ§Ä$\&ãµ2&¢]ZÌ4WhFúñÅ(Â#f>ˆén&ÑÔWÒì¢þ^É~ÎJ4î>5h ½±˜Ì]¨ü8A†Ñ)Ú“Yje¹EÉY± ØÜ}'Ø@¤TkÏ.-áoŽèy… CF|xcìˆWuEœ)ŸéÛ4_¦+˜OJc*%Ç~yÖ^ù±µìÜú¨ý¸_?hì ZÆ% 6ç?É„¦™IFŸ¦=’„ÎJ1„·«°¨`‚?lD¸BM\â f]…÷û¯ôZTk æxŠ·Í"Òø•ؾ,$·{ä^>†1^9q„%¢*F&€î%G•Ë›œ™_SçI³&yÌÕÜ¿“òf)Ööxò‡_”i±¼á>_þðJ½E¿{nSÒ%óxmÇήô!‡m@íd »?°Äòx߯¸§¾…Z*<y9ïËîÂ'ôS:6š¤-~î§h5ùÖ£8gêé¢ßަ®õ×yþ×+î;HɱCôì™{ó’ok¢âfëç¿=vûAøfU'ö&­+‰ncÚÅ¢aFø¦öÝd¦pÒ¿>¬Â= fQNºpxÄo¤éyé6w°ÃnñŒÞ —izŠ·©—DËý(•LpËHä6(z!.h4Þ°afÌÔ$؇[ŸÚ+™M UàPé#bóÖJ™5°®<_²â÷=P\à};c\ó–¬mÊ®ýqœÍï­ž¶ åFÝüÏßݛĞa áeõвÚtæ~¹ò¸4ò¿ë¶T÷Óª?5']]™žsJ…eâóbDÇëXåˆRUËLHínÿùSK'ñùM:t±.o¿Ó‡JñzùëáAÅ©Òk¥’UÏ1ëÛV—E0÷óÇŠÇjÜ[—£ÃõLè˜Ùîâ¢l?7ye2±ýj˜³ý² e-hc è$]®g5%ôóöËžÛ ^U£È;ÿ@‡üO*Ù¼ÂúqËö¼?-$y™gw-éÂ'ÓE§îd±™+ãRäE÷²(qæ?gĪñ_Ô‹-˜/$F”Y4bæjJ*œã¢#kï!*È=PÙ‘à‚j¢ô÷Ó!?ùétPüb„4.ÿŒ >k±îʧ۹\3üÕQt+ßtäZ¨ÞÇ—.î {ÏaÖòZ±;Vþ¸ÎE­ i¢c“¬ŠÆ×¸ùÇÐ(ÍÞdNžQ¥óõ" niŒ¨3%+W4-â,Fúe :§­µeC¹ÀG¶¦“y8¦¶’ˆ,£5ä©0? @lìS4XПÙí|¿/H9š‡u.“íŸ(žáöáZÕ *abt -çW5öÍûCüu¦rC‡ × nvÑÞ\¬Áü—£ùÐV`Ð"¬xI¹Ûó8êk„­ß°úªÊwÝ"“aìÛ‘Ç`ð|Û8Oõû‘„‹ŸÐÈWbÕbOŒm°Mê—Óhüމ}A~?:È~™„.÷euŒ/‡F*n?do»:yAm{úõh¥^¡:¼'Ô+ž¢/³R~lÇE¼ãø˜KêXV6÷ž‚g Yw\Ž¢ÜÕ—/‚™ –¸ª‘­úàQ‡1)m“¶ì¬âßÜ ŒDÀ’í®ÕµGŒœÊ#æûß¶ãâ"Ù§êFV±üÁïz{4ÊÞf ½p ‰Ë^%.³ H¼gDxH,4‰A¼üe¶ÀØ ¿y}ôÜÙ|:@Õ›Ôç¥!fDÀ+[YUÉ@Nj֠É¡‹ŒÙñÛVø¶ðÊÁka¨›ìÄ;ñõÖÏq&¨ýÄD£æòŠQzÙjÈáyõ6õ‡mWØ'×’Â~‹8„Ú²Èì•òúLJ=íÙ ¦D±ŒzoÚ·`~­ŸU݇9–ô`x–)Z*Kš©M-“Áµ9tüç@arñ£ÚZáÈ©'>×}­ÚßrdaBƒ8ÅÈ„·Xƒcn’,¬Ñ N˜oP zÅ_à ‰…2ïãYn’ïôÉp¤ý¨¾&EÁ×Ým"^¿,Ç–“'Ø÷óMË8ýPÄü}€ÊývšÙ<éâMÚPÄkËdPø;²ûqÈ®àÙO)ÂûÑ¢ÍîdFe‘RU·žŠë!Ê´ã‚gˆŸ©©CÓ­# ´*Y§)EQ©Õ+ä ü#ö•–Q5"äëøŸj2m±B®²„ÒÛÀÊ—ßLÎààµÑ·ß=ƒYˆ•ex*òé°…ûL§,¹fÖH;EìõS.¹¢ƒí¾«b¥•ÜíáIŸ…LCpÊ?‹‡¢à^]!©ÿ$`„=Š×=R³aDÈq¸ÕøD+S#ŒÍ¤kÓÁñûóC+Ha|õ\‘/kø=1œ ³ÙŒ ©Â0Kö9aEÊñ»•ƌ˦÷QíÕÔp×)ú°ÿ±‡¿óºÌÛd;ÁÕ05 ÌìãÙ¼¹@È÷Ë[ÈY¬$2ÙK-졼92òÆï‘¿‰£ël1òÑÚ! ž”|JOɽù°ÏdµY~_òìòÓp]xTg±ÈÎLR}Zñµ$#ø>ådf˜Ò~¾ÄMÁ™ƒÄC­ýü-i™öaØ‹ õn¼µ0Ld;ñª}½@ u:ªoμ$Á¢ªaÒ”Tÿ ÑÜ  bÚJê…ðäJfŠØL'A`®üCÁn.¶í+®CÓô’x©{é–ñ«ìïþ%³c&.¿)½]Tù9Æb¬â"Íóçx‡Œ¯X»¬Ä¹eɲáEp\Ï0?¦Ñ¶¿Äzx\Š…N\¿&ý0šÔÿT|ñ­o±âb¡¥^Ü­êó’*nµ n…¶íWÓ´—™TÚ™ˆL@øQfaìÁ”v§m÷ç (ƒ9̲pëÞQêÔ«&åX(̨ø|õNV9ÿ£•Ñ <À}q*D@¯@ ¶´¾xY>£¢‘ȽX«EF-²§êª'…‡ [¯Îk¯Bë¶zw‰àÏúˆo‡Œ‚Ú‘Ž˜½ë÷\Sº9Yñ¨—ìJ$(ûQ^4™•R3ó(ïj61°V ðve0î¢Í¤öôÔ>¿'ü]àac–xh7—¦z`GAý·T>õÛ'Æ âÔ›rž¬âF¹§¼zSÚ;×(¼~nnvúVçlOIÆ0\þ\ÝIh4°˜í´ŸXÖ.R‚P±´½½’ËÛ2PJßàd”´‘_Ȥš®r%ÓªSêîPAéù¼¡c-2g—¯žc¬ª¨ÂÇ ¬~JR(„wVv*w^Gý3€Å¾+r²¡­Yz”}¬6»°IN¤ªkŽðK¶Üèè*åVa1²ÁÈl*Zê Ð×E¸ sŸ>4®P¹.pS³¢ft³Ÿš˜Þ §ø£9]~eçDÌ=(²Ë¬çž ¸"á݃cQˆ•!|3I`?×^óçÀÆŒSÆW,¿s‡©Ü G40Ê:0»%…ˆc#@覡åZ«×‚UÁãY*|¡œ¿ûÇ’-H,G)C×ìN‰]ŸÆ¾Þeœ“6÷+3Íér¸÷|1@¡Wí€ S’0­—¨?>SŒªÁ?L¸œ¤rHŸ9yÉvãñmåjN8õðØâ[¨CN ñqŠŽc¹òa;-Ví ¥ðÀPAO ^Ð+Šë—¶J'EN+“¸m%n]Òb?hû:Ôì´<ôo—ªäÙ ÷ÙW@j@/ôâLNŽZaæT|‰Ç:f«Ü áÃ’¼,±P+4èÊwÈ“Þcýî¢ÇQžÉé7S¾ÑBç ü•teþˆNÔß{%0²?çDÚ*û±¸+CdéßB=í⮸Ò_4²|2éŒk¨°ì;ääÞrÛå YÔ* ^ƒ¢:ãŽËäÉ¢îqJådK´üœsš"D üE”}f¡4p÷Î'¡”ªMå´îÐMüî³T¨I²Š×·œœçé¿È€Ãa"™4~èIÊ„Y®d±¹c­ê_xKÁH$­ËU+NP,¨ú±ªå]åë!>Zxª_è5%ÊZó2qÛ­4$ ¢½úÉΞ Ç©ó QKú:3õºCocÖ;fº¶1çøzJœªq0% ²}oŠL ‘µ%þ¾ß0L†Ø}a$·Int_Eè™Y#oÏL„_HïüJ²8e­­{%{•3±þîGžâÛˆò`×µ¥SÆðZL¥¢P9ëH=MóË«[®é\’´šÆ–M ëz8ØRDÕ°¨­8¨]…-ü[º€—”“6Á2ä‡P¾ò'#ÑÇqÚ‚ÆÅïˆ3ZC&í¼‡¨ÁúfMÎJ:šŒÕû+½d¿$ÆU™‚âþtûL k äƒ 9|w7È´Ò*!õ9üvóô&>¡¥»£W˜_mòLm†DsØ“P[ædcƒÖ$:ÿ+}?‰Vߪ·ŒÃÞmÚlã§/3Õ´Û4Âùdà/ÜÊ×wè°­C9Óà Õ%šÏqQÒžM(u>îZ(ËNÚ6¹0³—´Ýêe³Oº€–0¡ä a@RÍŒ×sãÑÑ ‡;¿:׫ñ„å,ÍÌ‘ AÉŠp Q]¡bžl2±ª3e}2X}Å%éÜX­ä;Hûä \â2˜õKæ¼Æ£®¼¦û¢Ûsb+{»#»«„ù‰‰[N½t§r¯Ó× ¹vÏxvixtd¾Ùè™Ë–Ão½ü· »Ï]Ò©X3Öâ'þj+‡üd©Œâå_G?2„÷¼Üµ]Áôݤ@@ àÍr#¥aË4ã†Ä‹å³×È«A–ÙRkt*ÓŽøG6ø™î{;Æ"äb²¾®Gi‚Æj¥¼[ÉnFôëÊ•W"Ü›àÕ>|¢*“¥µø "ø«@Sqc¸¤ã;p>Ä.©‚nó¾kMyˆ ’lÖª½´é1‹8Lo¿$Åp2lµ =ðÏ^žåc•yE2tŒ*½ÄVÌXÂmÉPm¾C¹z3 IÓA»©¤šµ^Áª¨v>mqÑó(摦<ŸnhSÁmÓÁéC±Æ„Ͼ'Bò’UĆüg†NCÃò€Y*=P¿RfzxÕ$Võ•‘Z§ùê® 4ì¦ü6Ê:8°ŒÎĆ—FТö|mm-ŠNÙI…Hëf Àb>2„Éó=ëìù`S|ÜãɰæÆÁ pFÂìvùÔ€f«† "›”ÏU¡FW‰þö ‡ð„gQOC*‹rcì{éÞ¸?ñŽc¬Qš†ãòòtÑfíÅî&”p›óÊ~Ra˜óVó¶ õo> öù„–ìŸAÄíØäªSø½T…þih³ßd[w<ðÛãÏ.Q…ëÑô¶¢Ã¢›¨ÅΫcû'’äËeuu-]­`VlA”ô5Y—j«-!ƒÙJ{ÏqãÊ%ƒï,‘Âí—'+¹÷Éßí5 ™®N¿bW 7ü(sþ>;®)d호0Õù"ú'}6À„!GoÙüÚÒ(ÂðËuà¯æ^1'DöuPç¤§Ãøû<Ò<µ.$î°_%S-u[Ûü%Ý&”-TZë6ó ‹z¹aÇ¡[UL½WËm7/­%פ$ÙÍì©Ö˰_¦9¸ü~ì\„X¥+ ”XÝWö­0Þž=~ÀÍé¥Wm~:ŒÜ…Bi{XõÏ"Õ€&ýÓ ²q}ÎŒ$Á#xg€øãÙNÂÏkW»×ú)¿@,…¹&˜ªèÅrÈö7\y§/ ó Ù†L± “Î[S0Í«J‡zam  * ’|DãׯµvŠ“Lm]ú\z ¬+¾…Mz¾òºs¥{È69/i¿ë›”O¯|VºÕ†SÖ(ΰU < °(~iÆçM‘$]ÂÒ|“Å¡;<õN°y†ÃA¸F¡„Ï¡ smlÞÑ…ìV»‰˜µé6ÒÏ)‚ò¾¾÷,å÷ñ D”´ÆK NÕš;4œåsè‰ô"Œ>Y™ŸYØ×bÇÓZcõ'κS*0œ±v“ÐÄÇËÑÌªÌ iÐW]'â´#U «–ZP¬L«Jÿ”I»àˆ.fr_(AðqhGSW'vŒ‹b—Þmx X&¯vZ”@¤öÏã\ÔÕË ‚Öƒ‘çEý”71<âûrGR³Òl¢¢»Õ‰Lw¸S¨všRwn„qä^xB¿“ë*%Ú“ºÍnèGTãÅ+r/+[¹eXCmù°R!« ªZÿ£ËÈK›yÐÑ(ʪrpÓØ\ulŰÊöŸY¾(7„ÊnÅûaj$Í1vo¹ø(þ{è¼H~AÕZµ\a½©áóKfÌ¥û¨{cVol.Ȫ(/ ;ÁÉK,¥ó‹ÃQ÷•&­ž¹`¿Ôªi¹ Æ“úè™”‰‚»fôÏŒ¢¥ÔGrsdb%a¬ìuãRsÚH"AîNË9®¨û5Š*CÈF&F®r׿ägÉ3r´³Dºœ_Ⲙä8µB.ÉØÓ(K‹0UÙ¨ ¬‹;µòEªðI˜#‚©¨ÄF|Uq%t/DŠrhí×C5õáɺ‰‹ ovôõÂæy·7«÷ký/? XäÁƒâ±Ilù&@®ëú“>Cåq¤tW %ëD3»6C£N¾yű´J‹ v©þR–¯ó¸vW ¾b®×Ç$ÚƒÃÓ(0ê¸?¹Ê'®«²\Žú¬€Krå½"á·N¥|Òññ-¸R5çõ(pÒ eáèêöæ’ÏŠ†Ó® ñؤP;¡ªº{Řfö޹¾˜ƒið vž½£q ¿yõžþæÿçÞÂßÝl[þê–Ë&ÚO¡÷q‡]³LræÚBwì'"e‘Ò³&bQr#ˆes"Žû™ÚDÌé»­û£0H‡ÛF"Ÿ›¢7!7Mçw}Ks¢oÖ³qʯøçãc=l:J(é¦èvWäg%Þ„µ»Sîý?NÅÞsO> COˆ,ÂZüÚ0EÛ 4îŠØêð<¹Õ]1Q4XáÔ£|·qZΘyI"»zËlx¬ié•ତ直C k}§-e*[G•°}SEU(•â·_p> 'µns0°Tç I ïëq†2ÊfÉ}Bí‚ÅÓü˜[„¢0ÛpPÓ2ùñ¢Ña(Ê|É"§´‹Tx÷ù"®0FùJ‚F'õØ]ÌgVÈ29P’¾éœß.¹ƒFvóý0Ù:à1øDíkàkä\Ò庙”?71ÔÊ${>‚ž=m¦†’!/´Ç!ôÓ>9½…bˆ… ß^/{vŒÈ"8â÷¢DQ±ð!<ŽË~ÿ2ÜÇÏ@q*½‡Oåsϯl_°—}Äe Ý4Ôœ–Üðy¤5UìRÉöŸon.u¿Ê[[¥n pæÕ?’H'êf¼®ŒÀšêDàGgQ*õ]_Ç„¬k7)Haºq§þ\„T{ ›‚ÚX’èͱdýÌ2ûìÍÌï»?‚ vBÜ?^¹ê P¬Î+~ïžÐ»³Æà\AÜÆ/‹üþª}H0ÞûY–¬U.@QG™î£-j¤•r±Ê<ý‚[ŠKRðÕ1´ R(Å[»„Ê ü`ž>îeáj~-‘Úy\JeŒUŸýA¹žÊ’%K‘ê)™™|›`Æ­€Ü £x0€_{=¹˜:4fsE¤šÖ¦ƒHƒ!Ò]ÈŸµ ý´dÓÍHþP mÐÙãþ3cj|û¾R2Ë“ž=½‰SJ Ò¢Ï?0B7îŽ×ÒÇ-`lŸa»?—QÌd—ì­Ÿ e nai÷ÃWÚ ¹¥ÝÈ>U4µCŠv.4_¨°•îy Ⱥ7¨…’gA‰©×~¡¸SZEï§rzë¨ýL<¸Ïz\m kˬRr’~L&@¿ªî[žqùÙÓ¯”ôÀùRÛêuÙ™­‡KV(ÝL‘ò]gî‡ÏuÒµíù³Dº®ƒ41BùÎ5‘°lèã–þXÄ:>×°³¦9dðȬÅWUÿnãó£,#ã'ßþS4†è®RÉ.e©Y6žWZš%)øÕ…| Ç×mЭriû—L.0=£Ø›JOi‘_…ø²J7 ÁZ ß—7ø³ój+ ¦Î^áû¿GF1%ÃÆ˜41#Äf§ž‚Žt¾K]™8ë!´‘tO®3«W9·ä¯qÄÕ˜_fî ÝÅØem9BVp4;;w"\ŠpÚæü\½×Å‹Y¶®GqöЛRäÚÆªÔ€süæ ?}=WˆŸßatqš®¢Z5K{×…sJü Þ]«¿a‚T×@‰—,…°¡…y‡Y+hËQ,º˜a ¼ã¦ ¤‡Ý·+$¥†D4–V±âz°õá `uû·ƒí½º° ?0±ý¶Õ>Õ”œáQE¡‡³:Á9bH!Ó¿`sž"5LÐø°Œ™QKi œ“Ôñ9ÍõÎ(5ÝvB'Žïz¤PŠÅyŸM¢ÿìm›­µA(å¶ø7ÓÁ·æé­ñøÄ°´;Á0ðUµÀFàràqëZŒ\¥l-•¨^I¥Æ÷ˆˆ)áîü2ÕoGclQ> endobj 75 0 obj << /Ascent 690 /CapHeight 690 /Descent -209 /FontName /RRDJSK+NimbusRomNo9L-Medi /ItalicAngle 0 /StemV 140 /XHeight 461 /FontBBox [-168 -341 1000 960] /Flags 4 /CharSet (/fi/hyphen/period/slash/one/two/three/four/five/six/A/D/F/G/I/L/N/P/U/a/b/c/d/e/f/g/h/i/k/l/m/n/o/p/r/s/t/u/v/w/y) /FontFile 76 0 R >> endobj 342 0 obj [556 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 333 250 278 0 500 500 500 500 500 500 0 0 0 0 0 0 0 0 0 0 722 0 0 722 0 611 778 0 389 0 0 667 0 722 0 611 0 0 0 0 722 0 0 0 0 0 0 0 0 0 0 0 500 556 444 556 444 333 500 556 278 0 556 278 833 556 500 556 0 444 389 333 556 500 722 0 500 ] endobj 65 0 obj << /Length1 1647 /Length2 11406 /Length3 532 /Length 12287 /Filter /FlateDecode >> stream xÚíveT\í’.î\w—àÁÝ-!¸4.MwãN€`!H@pÜÝÝ58ÁÝÝ/ßwfæÌ:÷Ο;óë®Ûkí^û­§ê©ª·dmzj mvIKgs œ³”›ƒK fëhî ÑrvTsRa×Z»*Bͯ?=½4hµuv’1ƒ…ï– €‡À-$$„Fvy‚m­m &]­÷̬¬lÿ”ü¥0÷üwäÕbkí`x}q:8ƒNÐWŠÿkCm µ¬l€iu }E5y“¼š.@è¿&¡ájî`kP±µ:A€Ì+g0Àစ³“¥í_©A8^¹$!3´°}5zXAAlìh ¼¾l!k°™ôõ Î[' WË¿x•[9ÿìüªáøŠ½’i8C  °- xõª!#÷8¡6fп|Cl_a€³Õ«¦¥³…ë_)ý½Ò¼¢P3[' ô€þå˰´…€Ì<_}¿’À¶‡á ±u²þgl0ÐÚ lé„@^i^¹ÿºæ øOÙ›@ž[;ÿ­õ1ØB!@+4nžWŸÐWßÖ¶Nhœõ‹¢“•3€›ërKWпcn@ðßÄôWÏ0¿aféìäà °Z¡qª9C_]˜þïªÌñ?Wäÿÿø¤¼ÿ½âþkþÓÿwçù_©å\ÔÌ_à{ðºhÌœ¯» økÙ8˜-[‹ÿÍÔÌÑÖÁó¿2þWí÷ÀDýoœÿ ÿÃ…¤“õk…عù9øÿ!¶…ÈÙz-5l¡6+3‡×Ëû[®ëd ;Ø:_‹ü÷ý¾qqý ¦cckaïôW5øÿ,ÿ5‡×ºý§æÇÊ:º¬ÿŶý[Yãµ+ :ž àß<½Wu¶üÃ_TRRÎovn!;Ï[®×a|G!>ßÿƒÛ¿‰¸ÿyV5ƒ‚m=\\\Ü€×ÿþy2úY' gË¿úHjædùÚzÿ!ø ¶pƒ_+þ÷6xÍüßÏè´@›Ÿu¶ ¶KNý-'Êè–1èlç†ï åWéäf”:·ù'‡ý*6}, á¨~nðœÙ=m*±lõ·:0¶%³È}i™;²q—šÞ²nqçc~?xå}2­²ŠðQ€KokmXSËøç#Åh/åä†9€Ö-;Ÿî„åg‘Tù• §¯«†¡ÂTW ü*ðθ>ØnøöíjÖgXªEÏÙÏ©º—u‰òœãoÑ<ÓjŸîiìÊ‘%W”ÈFøÜ Þ%‚Àé“·“:G »†èû⥮—èØeÿ‡R¯›“#‡êìORÒö âr5ž¬»ÆÙwáŽÉ¶ˆ?©r"ךú¹êdl °Ëk’ó¿=L €P”>ƒ!…l|z['P~,'‘­PñȬý‡ÏU@«2ºÓTø“¯Zœ1o¥ ø¸ÑçéÐí䇞ó£´ÔCñ"2*.8º2@ç;†ìý%¨½ËBpU¬*E@cï‹CÆ>ÉŒmcíjÄ·s4êgZ˜H&)¯‘“ñôw3p$²£ü–üP¤èšÒv¹¼R‰šíñlÚBò+óÒŽ.±Vk³¯ÌÚVz¤Û¢ S UõMˆ£Þ2«´Ê[7lsSC Ú¸Õgúë¹…š“Ž76ç};6Žá3OHÙчï”éÁ2ÉRÏžÞ¹¾/­¿J.Iogzœ”f­Þ𹩛à1fâñ…m™%¬¸¹°(*”>>„ “ÅeÉjÃË´üR´«œë°÷{ÐaSø®_*9ï*áŽêÚ{u“± h›Vþhþ6ÿõ”0V¸pŒf¨5&R“½T6ÂÈdãóxiobwñ庒o>„éÅâŽÇ{WÌîźeÒ|<„XW»öÌÙ=ŸÜOü‚·vM„Ãö‹ÎÉxÝMކQb®ûCØtæXÄ6άîNÔÕú»µSªá¾+¡$ó‰æïjßj‰RIÁ\އ%5Ê “O1{Ô.›ÁÓÁÓT6`ØË3é^VËÖH˜Ïq<Š Tµ¾jʹ»¦Fñ©l]ejIU?°¾•el9½o4Ÿ®§JR7Lñ˜&hÙy—O—ŠÙùFŠcŠêWÁDÞ³W~º%?f¼M@¬cÔÈÙ‰¼ÞÒID¼ïÔÆkqæ•äÎ9Ù Q!Ñô«IëÔC¿ºSû¦2'iK=µøL‘0\ùâÓ–ÿa/&߯)tc°P HŠ(ë^÷ëÉ©‚aYŒ¹ï@û¯N-¯V²YY–kŽ=È2)^鯅•wwD-8_‚]N¸9‡e*«oPœ…1]]*½Àïö_]ý4²Óp”æ%Éä´}õß°Y\Ó¹u U}V=ê¿™¿&1nøâ@q 7OÓYìIÒÉZêžzýæá´ yo ÿÙ*Éúú!!@­êk›uô@aq§R‘3z®•”/èé“9Þvc»¡ÍíÆˆþèI‘ÅâK†å‚•²Î9ƒ42)+Ö~5ŽO~çã™Sü·¦Ð k”¥qPÔ3×1Á¿k³q?Ya¦(îdW{®ÉJ@ø˜ö‹U¡2{Þè}¥ä÷ÈMï’aJ¬ƒaÝÚÄf\R—æ§€ÄìLó:tÓ…Ä~¹C(ÙÕR%¶•qKæôÛx³/_ëqvÐe"JÒ'†l¿ïN¥l0e3:gÛ>Î#ßÃõ>ÅQæF š}9^A3ìI*œ˜É'ð:‚ÿ®’Hõ§ - +ú~ϹȀ?…y)‚¥åñƒ²òòÛÌú!ŸT‘³´°ö`Ǿ”ûïØ'‰FG-_9¾)­L4@R£#§iˆ&œ@eQ›)ìÉæZëéY1I¶¾CÊeZìì{ Ò#eÌyëHg¬R{ {!Ù«ðˆ{.Ò¾2ç/ÿéFÑèŽy*[2¹'Ü,Âi-Õ<ŠçÁ³)Öˆ,ÈE;®q°b¨ó‹ *_3y#–õ>/7¤± j‹´;÷³käEޤ(̵g–XÛžQ‰ƒfý6Š‚ X<ú~Ç×ÌÏgí'GC÷ü”p³ÊsQ¥j]8ê¿qe Ì`­h,¾àÇá¦V‹®Òí_nøDDk\ë:Öa’¹~fg«ò9{8Rl9ѳb±ë2CùÞL“êé9iâùŽÀ¤VmOW­Ù%Ÿí±tç±Û)žåOZf³eÖmWŠP,@ H¼ÞÑ=õ‡Ã.G¼¬±—JœîbûFû«"/Š©–Ò#ô•OO çûÓNìXü6-§Ã…³tÜàÁ2P6 EÍ%‡›²ð1¾WyŒ$‹´fùª2BÁ]¤—YE¬]£!4²ß-›aãfQ’㦎ÛTù¼Î3MÂ*EãñŠY3Ûab-‚eún\×?_xõg”â·:¹iàì"71 Š¥ë,Ùåõ5î$íöÎÅb‘y—>ºÎѰ‚»,v¹úÇ<ÌKiôˆ#;‹¶$Ÿ¼ËÖÑÅô‘‘;‚erÙR¼Åž˜q%ãÎLþFƒÞamÕRrqŒ®ïnRLýRêíZ¥ŽÌ0¤ ¬6Í•&5~ñðùãwÕ,²ŽlÜ£&:ÇÛØ7;˜6ýx/­2Hþ%ù$@krƒÁUÈÈÎíÇéÆýåyÁa£d:— ŠhÆÖ›Tcz°S¨ªß½Ñ&ÃüðéÒÂ@®,ÚµÕ‹:¢®†œ¢xwo_A!W¶ž(ý¬¹“5»°®ÁçîºX¢4å`uœäorLÇᢳ+ÀSÄ6r«R‘vL’žä—–*YÜP¤óv¹¹8¤$µNw ØtrŸpçθÂ">מ`5dnCaH• þ”ìïÿÀø[ ÒQ°‰Öà\® Ú ¸_ëJËÌa^V/„~3D;ú•Á!~ñí MÕÇ“{ÞoóÔ¡Q¡)˜S…Ô?èÒ "øT !Ï—O›7B6U¾q§y›&>‘¡Â L=zný®#uøLµ°Ê÷£Ö­Õ¾sJiÇ«H]b(¨òÇ8 Læ±½ž¦þA ´4Y(:}‘t†áÛ‡[cI`Ö0cžš…/¡E¤øç+ T}ÈHÑ´7„C[ʺK#×0åõyºcrÙ‡ß<ᬠ¶‘ˆØ-ü:-›Aúxz‡ÿö:5J‡¦b)èÅ-F™/ue+ÓŸ )}=Ì’*Ÿo ¦)íN¨­‡-IdÁbbCÂuï*tGÓ°X{â‚QHßwˆ¡e]‚ÏÇ¡%§ß*Ølÿ˵:IBÆY!W¨>f4ÕíÅ"tÎéSgYˆ|nK”Ÿ¿¾ÔW ´õÉD¤!-'@Gn^Ÿp†uЮ ì¦úú<ö”î=JŸÚ¹+âÁ;âuTGì#=»Ü¼+#KëX…@|ÊÙG^o—b@Гjå.¨r e!›8 ]ÛËð©S\R'2 !–·Ÿðƒš‹¾´S硞Ó@0z-FRç6tͪÑÜq#Ø»?+Æ,µa…? +.«±£G“TĬ¤ÌM–ƒpíð?Lá$’ŸJXÆø,-g½4(º#!(kxŒŸ¶PÂl‹¹Þ`› û|³þöD"ñ†ÌåÏ4ÌlvŒÏ›[™<1WØ”ż¿`¶v„Èfs­p§IC:Yúi߸sÚ#þˆQµPÆÉñ‡Ý+Qy&«=)— ú’G{¾µ^Ö¥T‘UÝKXç ÝÑb&AS ¿ðe^,⬜oT’; ±‚Ȱ‰_ƒò˜-ˆ‚ÙŠ¿pVíõÆ3’lmÐaJ]n¥éù£/÷x8‰•XÈš'nжࠤ{Õž®á rK“alìÃrSU0TŒåô›'ÞØì(^Eè• 3üÌKÒ4¼:k7À{Û7suD*¶À¼¸è^èn«ÇTà©8‚©šQÿt¿†•jîÛÈþû‚,:t–T'³t+flEÔ¬ñçÅÖg˜1õåÈ™z„Á¶&îu:ý4=²ÝC÷OÚÊ: 쥯#ÄÛäew-)#7NåzÂ=U­ÛœMוը–¡?ÙO²Ê¢2Ô¦ "44ð_âiÕGKL’y½!Z®oëï?Ü:Ãòd«još:¤g¢ªa“e]¥#™½Éç2׌µ…ëy;©g÷ÓíºV(àÇaöÇ¡àå§GÞúç!þíÔuA¸øº0R…Ïú¬(?‚Ô:®Á—è˜;5xu¶"¤½JhTµóNvnÖ᩵©y‘îåÖ VYàíƒPg¥ZºüâªÌwè%_ËSîQœ%fŒ$çuñé–ÞÃ3E–œù1 €ýÖóŒª&ã©t58v%6Ø?½‰áyI“*’”¨šçÖ±{Ìc¦n?Rrçú%OóýÛç+ÏåX?rêúƒb_¼ªš³²bÀÁîü\8ð ’¸§/ó ;;9K" Æh¾È‰Ùd¸J‘Òï¦òóÏrX¦»‘á/³ï ð¦â~ñ:ؾï÷änN\‰Ü'@Œšºáwঞwé3Løc0q] _°5»«H%›ß|rêQ­Bý"Š«I­ÂQÔƒô‹e¸ÈÂjû\ÉT¸k½æ{·ïÞ°2yB™¥Ìõ ð0¾•,I'|ÆüôQÄáñA9EèÛýÝ—§:~Gjz¿/ÓÖì ΀šgh8ÓL5Å¿˜µÉ¨­¹BHxÉ%Ç®ý…Ä&¢’m›‡"C •uw´ï·L$w”Îgý>,†þéMÖ<íF¤‹9áuºòMS z\³Ê¹%Kô¯tß¹í ßKÇßè$ÔŽó‚õÄŠù Y>UÛøó³7øQù»iæsHºM4<³¨¼QÙõäÊõ”Ó–*èÿ±‘ÛøÑÛ%ñ–÷º9Ìì £ŽÌ{M³Í‡£ÅÐÃ/ŸšL­îÝ.K‰‘Z!; sÒÞq#Å]RÔ“*¿®Š™œåëìü7?ÕDú2à„S&ÒóT ?½È·Çx93®û±X—P¿z O³ÞÊŽ‰ »Œ½‡•x–ÇZ ÈYâ{V )*ðDÔ%Ê64º›íwŒ©õ¨2_ Û!êKHù‘„$¤‹d¶ÕpÀr´ kúŸÓèiáw‘ÆÕ ýJ¬D¦}02ç[ب”0ÉùnöUØïÉQn Q#c¢$²À¢nÛý7u›Øî7×l‹éº4ŽM܈•…hôà y˜?°æÍ·fíª"“ÂðJ0cýÁ¤eª©ð¹y%—íEðâ(j· |Åue³¹ì{“ú RuôW²VÉ0S&aXtŠ2wJH‰ñìAÌ‹0Qµê2‹¨“ÊÅj`¸²»Ðå nÞ?XF[— £ô¨ØÎÎr/€ Q&MCïeM©í"ÄÁ.EÙï|BØêÔ)­[0ƒ¡%ó}«FZ˜‹"Ôôz ’O* Ü@DÔ7fêÑ Ó•˜½ {†›?à–õ#]ų¢îœbÄØPðly–Ù2ÂGÑU.5”HÕ»«mï¥iϡ߷ªòwƆ-e»ÂshðÄLC·ŒM¸èY˜ù=‚ÀéQìJ…Ì8í„z‰~“ȵ€(Ùv¹Æ­éÊøYU ¾ªA×»—¥Î¹‘\R»Í±Ä÷<:»7Æß¿A€VM§2ó<Ÿô•ß/=†n|žùC  ÷0–¦Ÿ•\“…:˜b·G7e‘·¯@pûÜ!x«Š©¯˜ß³u×7>  %¸$`¦*¦y=çê<Þ(tjóÝS²F9àg¥àÞLÑ+çͦ ¨åØ’X¼¯$ŽXÎÀÓööß$9öNÉ1ˆ˜¤B ºéXñ85uw·»=vuôÒö l7Á]F7V=×DZî¾ë‚µ>iÂJ'ªO×þ\wU¦¸™­Ê^äÌÓ|úêÄàlN>Íóæ‘f–Ji\w7Þ§Óq{ô?8ûéˆ#¼Þ,IIg²Å'58*âoe{íAsôN옹- Œ7r8Hõ6*’¤ø;ׯÞ=1¿?ŽPmf¢&2¹'ŠZz_:ëE+}bÐSAelä%™³\ììMƒÂìÉ*:ƒ¿ J/™z‘Ígˆ7Á#¹¬\Ç·ÐÄpÆ]IƒÀ™÷‘Î$ݳÒ’…rB`r©9Øø$·øŒOˆÆÖç2dâžÉö-&„V;­/Üîhã-ÞôGÎxoÚN߯¸RY/¦¿Ûn¤§Ù|óÊV£~ be9AD¶®M$pŽ b79ÕìôÚõl"}WÍ3šÅqU”Ö ºë\Œ©a¸Â­†éU^¬¡ÔÓ=°äã0©Õ¿Wá î.I£ùX3”8.½ÔK0ýp4,ÎÛ¢aê7Y•7Òkÿ9£WHW¯2š÷ê–~ÔoªYø-‚½ùcþ¸÷[­æØUG"rüpóñÛÃ"%l®4w!/gH¡åDN¨@ç’羕գï&_ˆŸ ³@‚’]vO~UÙÀ1>2yªŒC"9“yi›|«¹;ÝËé{còŠ¢ƒ]%Jæó Ý‹„—Kx½Öp½[¤zÚ⟫]´ü%÷ކF¨5ÇMìË׊º£yb/X·J¹9°„uð|(QYYÚ¹< MÄs Oã¦dÌ\kö“ÌÚ/å°Ÿ5„õl—q¯ÝP4žî‰n[”ÑóÂ{Ý6R‘z@‰ç‚ü<\$¹ƒbj|Ñ%êiûszŸs˜ËíÙ B;(vvLÑœÁŒ¤…m'•Œ«•¾ØV±à5#Ù^rúþál¾–>£ÜÁ®¯ž†í”‰¡L47‰{…êTMø$¸Èž:ÁU‹|µ“â“Ã",°1ÛGT¢ùu¢-Š–hz¨Üè±àÉϽßY4“k1>ôg†^wÆWtd•©S)sfÄò25qœ¹èá´â4”=wY„½dó¥ØTÅ›%×ÝÄ7ý˜´óÌÜÛÍ2®Ú~Ä4pÊ(x»ýÕ°?ÓÏŽšKù>elâðæ}Å€ö’•ÚïÐøøíÛÕ^öíE‰‹]ºJ÷•…ôÂ1í@|)¥Òó¡‚vc@…äùší¤gQÝõ@¹ciíV<·OÁA!^Ë¥ ¹ÓÝXìŶǑ>ýÚÞu†ŠŠ7Â|–‘2>í+É£Ú¼+6Ú%•G·È™…UöÍ7y»âßôm|ÏôimA áÑ å0¿D 9YˆvÌâ‘WA”½%âA•jÂ!Óo…§0Ã.:<§1èsžŠ€^¥Û ‡k9Žg‹ňT¥Ó›"7–Þ\)fS´o¦†39"vwÚ~ÛJÎßÍŠæ+¨óŸwo Šçš×‚½Ë¿·ºgL¢|÷H•¶ãÁÿqƒ ~Xr)–ayM±A²³Ý€ÑòQ®OXM_:‚wPá`ðSÇ)òH¸ ŽÚþmêÖ×MXÅ󨨱¦1mˆYJ¨XGù’n¥‡ä"¯º¥‰_º^a,Ïn71rJ#g· ¦¶FÜUŒÑBŽó`? ou@Û*“GŸ‰k¹?ޤY()dú×—óQ ÆnœW£&ò3´ÓÈìBa­º´S¶[-½|Ê'„M›ÀTƒóZn·Þ ˆrøÃ¾19´5A´Z°]N¾Ã·'ˆ¯çu…¯j¿¹w½zCX ,Yí”mØØQk3$4y­zæ8‰Â=|+¯q¯;” IÎrtJI ×:8)îÚ1db´5vj¶=Îi’N0rÍb±d"4(m|_»Íœ1.¸‡%« ‚ä¢S½BН4R"+ fÛÞt½¼#…ö¥RÂEч€Ú?e˜18ˆÓœRES7X5ð(3cŒ³Án,ºŠË‘$³ïê秪'p{†É>Ö&À„‰U¹Ãß6ew™t<3<¡'åè ߬D7·@ÞÉ—‘°Æ{§¼ÌyÙ…ÛfÏ4Èu‡’ýJ„JH…3–•R¦ëÝõŽØší‰DÒH„`³ q¥Óž¸ÃP/XâŸùD«ªðÝÍ?m^õ×)Ân9ó™üz(°~¿ˆˆcËwÉU¿}þB¿)X ÿÑFÀ¿Ìä„{=7ŸŠ¸ŸèAiå°â úÐ94¿øµù+ÂÇꊇ.g»õÉ0Ò( î‚%¬ŽT¦Õù:Âê¢sª½Âö†Œ ´ŸÁhZƬ.¹HAA>ó:Üž{jˈ›J>?n®n>ÀâìÛ; ¶ÇÁ£Ø7 ã=W—ØFTÐú7¡Œ?èåÅúWhŠÌ]xoNÁ|4«ý±ù¥ìbõ@¨b)Ü¢‡9! ¶=I‡ï©Æ¥dUtû²T:&ZÜŽW©"Bæ´dÆEެ¸WÝè—¡c…ôÙÇE䰹Η «KL<ÆYRغ‡s¼÷ôFî¡…t ÅÎÚ4àÜðŠ¿ÓJ[ ƒP¶˜9af¢‰ÆVÄO6–8Vゲ¾¤u«åß4"*ʼn?’÷õX؉ûýV% ·}È¢øÐ“ ¤€t°Áµ^F8ðU‘žGæît8¿M¹¤~ÙLüî%¡Í˜·Ï’õZ‰%X‰?»£4Öù€Š©Q#DnË8 ~{u¤ͭŒH¦~KY§úG üÙð&‰YÒgÕPåõ”™‡äõ²Þ.ìB¨a’ðH´a!¢–W½ñî¢ÔÖâ* Œpžöó·µ¥·Ø]FhçmLröó| ?×OPC޾_|Y&;þú5Ä.µ³ÝHòa,¥Šdà¢9s¯Œ)1YÝPA˜\ذìñmö»±)<>‰â„q홄?yö $È«¾ꪈŠççT} ×l4?@°îA ƒ‡2ûWí1·v[9 ££­×§,ó­òÂ]?y$Ÿ[uX*gV¸àÅú¶ðbO› …èÙ¯ï,{:>3^u*wµ…)øXó5J?¸Âh f±]¾yÚqÐéªædƒë»u³`“JPÒ°hóPrdžlúMIˆ>³}èŒÑ ‰«3Am"<ÆÁ‡”È;àp¬³T9+ØÄñ$ ¶‚ŸÂ3~¿_£ ž/j=Í }Ä;éJ"už8:~eûìC“„FÁ 9CzùªEšœ 'îÇþ›²Å•íÔ¦ôX AÒ·ÂÏ•ý8˜ë¿ùCûÿÿOX8ÍÀPgG3°=ÚÿísÀcendstream endobj 66 0 obj << /Type /Font /Subtype /Type1 /Encoding 337 0 R /FirstChar 46 /LastChar 120 /Widths 343 0 R /BaseFont /QZXKTU+NimbusRomNo9L-ReguItal /FontDescriptor 64 0 R >> endobj 64 0 obj << /Ascent 668 /CapHeight 668 /Descent -193 /FontName /QZXKTU+NimbusRomNo9L-ReguItal /ItalicAngle -15.5 /StemV 78 /XHeight 441 /FontBBox [-169 -270 1010 924] /Flags 4 /CharSet (/period/zero/one/two/three/four/five/six/seven/eight/nine/A/C/D/F/G/I/L/N/U/a/c/d/e/g/h/i/k/l/m/n/o/p/r/s/t/u/v/w/x) /FontFile 65 0 R >> endobj 343 0 obj [250 0 500 500 500 500 500 500 500 500 500 500 0 0 0 0 0 0 0 611 0 667 722 0 611 722 0 333 0 0 556 0 667 0 0 0 0 0 0 722 0 0 0 0 0 0 0 0 0 0 0 500 0 444 500 444 0 500 500 278 0 444 278 722 500 500 500 0 389 389 278 500 444 667 444 ] endobj 61 0 obj << /Length1 1630 /Length2 18000 /Length3 532 /Length 18913 /Filter /FlateDecode >> stream xÚ¬¹eP\m·&Œ»»Ó¸;·àîîÒ@ãîÜÝ ÜÝ!¸;w nÁ]¾<ï{fÎÔùfþÌœ»jßK®%׺WwÕ¦"SVc5w0J:Ø»2±1³òAv¦n.ªvмòLª@K7À_9•˜3ÐÄä`/nâ ähÍâ@3;;€—— æàèå ²´rÐj¨jÑ100þ§ä€©×ÿÐüõtYÚ¨ÿ¾¸mí€ö®!þ¯Õ€@€«`²Ä””ud¥´RŠ) =ÐÙÄ ìfj 2ȃ̀ö.@:€…ƒ3Àö߀™ƒ½9èŸÒ\˜ÿb‰ºL.Ž@3Ð_7 §Ðñ#Àèlrqùû¹,Mì]ÿöÀÕ²7³u3ÿ'¿r ‡%äèìð×Âî¯î/˜²ƒ‹«‹™3ÈÑð7ª²¸ä¿ótµ2qý'¶ è¯à`ñ×ÒÜÁÌퟒþ¥û óWëj²w¸=]ÿ‰e ˜ƒ\mM¼þÆþ æè úWn. {ËÿÌ€à ´4q6·º¸ü…ù‹ýOwþ³NÀÿR½‰££­×¿¼þeõ?s¹ºm-˜ØØÿÆ4sýÛdÀòÏ¬ÈØ[8ØXÿ-7wsü:w ó¿DûÏÌÐýMÂÄÜÁÞÖ `´@`Qtpý@ûÇ2óÉÿ ÿ·üßBïÿ¹ÿ•£ÿåÿ¿Þçÿ -éfk«hb÷wþ½c—Œ‰=àïžÈþY4¶&Îÿ?;­×ÿÉë¿ZkÿîÿLÆÕäo[Dí-ÿRÃÊÌúo!ÈEä 4W¹šY,Llÿöì_r {s ³-Èø—ÛµÀÄÆÊú_têV 3ûHàú· hoþ_+øK׿ògQü*%©¦Ãð¿Y°ÿ2Tþ;®ê^ŽsûjÌÿçᘯ_<>Ll_xLìÈ“”ìÊ¢£kRáD¢8Ï㪄-5BBT”aþ's VO$bÎwRˆ—MKÝ— ϚݓH­ßBÐ}È^ÝÆx. ±< •Ñٯ׋¬!-w‚·_¤IÆ Ù|F…{wÖÁµ:úÿ!óO)}Ecº Y9®ƒüc×N˜xýrÔe‡Ö¸ñ}ÄwëXªBaôÜ“’DGúÜÛd¢RP£Fµüåäx×ÄH+7éòœ\ÎRërüT]£ÃÂàŽEþ¨=ëöhÉ!þ-óy9ÿÓ;Çè±JŒ×Òëš( ,†£JPº…0¢Ž ªþ«¼¥žFv+#É12ƒKvï;Eés/I$³Îdi¿1zÛNË\vîMÒ{ñÑâJÜs|ÎÏ4¤45yÞlõ0ÃÊ0Ô‚¥‘A9 ¡*l×EC/GW©¤Ï×ÃW1`W'°ƒùÇÚêÎÙU `]Tw5(ý¾&xuMÌBëHú˜WkD"2XŒR× <€Wê!ÑñÀšODÞtÑ'$‡6@¾U;DLcc짨l‡ Ãk …#ø½ÖVñ‰óO8žÂ‘±3· Yhä¼bº®ÏžôcM¥Yoˆ¾ãZ›°? {}TV¶ß ÑSGHG¿œ EöTAÌ<âpªçÄ ×}ߤÁõzã¼¥—‚«ÖwŒ$³‘"ñ—ù `ó'ë]~£¸[!LÀC!¡'šdt® ì#8P•ALÈ:¸'?¼ÁiD…(+NâŠBöµÓk@é-ÇD)0'8‹ Ð †¹ôãª7û&òÀê¯msHWè$à'Võ|§Õz"†< ù „Àë•ü òo¶L’·9úæK”,N0åÃAÜaóÒ _2ëÌ÷Î×Éõ} ’\ýÚ®Ž’[ÚFbTN@1¸…gÉáµõO%“Q¤Ð²¨bìg ÌYЦ òþóï•»|¬+ƒ­žý¬ÃÉióS&[÷Ü£púìà¤k5óûþlVÝ83­ÏE¤<ܭ΄¸ |ê8«!åá8Oôl‚Aê–ôº¿á¦Â@u9ný9oÇ´Â@É>Ù“$_ò\¶`ôþÕ`ÊF ôvîÆ„s˜ï”:”vÿh®÷ãÚ"Gø5Ø„û£zmá¾ä°Á•ÞoÆðE©åšT–¤Šü$y„7srͤìFGÛ%ÔóoO½‚çuOš¯*Dj±àç)•tÔÆs¢-ÆŽÛí|`Z klY0ñ¯ÆÆw(Í"Sêà®.^[–Gnü¡ÝÛó+`\Î0è¼x7Ù´`ûz÷‡Ì@È·ð:hñ(ÜO‚btï=QnƒÎ O½ç˜—BÁ „ôÁÁõ2ªºýy©3ÏJ`¯#âçϹ.eÊNQ¨îˆ¢•™AÔ8¤™òlÅ )ceǦZ=y}½ëýÇ6EÀµ‘sØG¶Ž߸yÕüÃäúÇä¢dß·ß')lò!#F¼:×BÝ8*$[RƈBÇ/Y`ÀàAa_ ÙqN!+bwúªËIWçȃîk.0Æøy²÷¼6­¡ºû ½ÀÞ:ˆ`Úl²Î 'Z±ú”‚m‰ý «‹Q¼Ëï…š˜Æ'ϘˆUîF~Îôèo6û øÄË™ØcÝX~#{¯S|zß<î0… Œ¯z9\ôÁ ææ¥žCŠ]x$â^Ä/xpݱœžŒÏÞ±ò‹ôO׉þd¼O{—éh5Š 3ÈøÂlðke+ÏóßOäÝÂlh—1$#GíLv­u}¸C޳°u½ÒM´Æo…9T “sðR+ æ'ô©Å#eQc£è·“¬’'$Ýà‰0|ÉŒÝßHíWÎS¹ÊxáÛJ<îeÛ qõ­g\Äzlï̳ ì0™IwðJX•Á”JŒ¯«Á÷AU ¤ 7bDe¢샖aâšÊM ý¬–Mö8ÕëÜðÖõ,›ðÒQkzK£p³.†%jSmCFéŠSL̵†³;_iBt¤8½Uc¸’fŽ£—Lî•tl{ç }ųr­'˜e× ß|O½ÝœÑðýö‰Á°vIÃrv®8|*v)Û•Ó\aø'‘ºW –ߟ¯ PËÙ0¸BéÈëgűN¡ãÊ^‰TsÛr2à™A?=·)9­pʸ´/î@.¡cÛÏ­IÅLjç¿÷çfªœãmƒ}¥–Jõ¢£ù´Ä¹– äA Ê~Ó ¦2êÅmÕ’q?aÛ_nûL$CGÎSå¨m#MäPô/¿veg&ÁÚŠû JÅ ¨²JÒ+ÉsÂbÛ+;®»¬åÏnÂ$PØrg¾[êbl4NŸ®]xŽÛ=!$Ä žqýŠc®UÜBB2/2;.igƒýº!•bŠðJ›èì„ëùž! Û…NHfIlB ZQ‚ê"1öò¾ d{tømYº):xw—BmÚJ1˜ÑBÒ&àtÝ—AEüDr|"”Æñò–” J»g¶¾fžÞðbEþbÚMÿÞÅÈŒÔÿ5Ò÷Á¨-YûûP!ÉЄӷ¹Ú´6|JÎÈé šxýÇyÎyJ!í*þvÙÜÒékCÿYÅdc´G&øÈ®ïéPsÙƒÝhüi‘fõE\_§Õ†Z¾Q¨]}Pû%E`%_…‹È^Ø Ï½® Ýne`§BA¹Rj‡PÆe`ÚI&Ú‹u#ó:­g€$ªðÂ:ÏšöË’ù³æA J3‹Yö_&’Z+~ÊÀ®çÂÉjˆqW¬tsc²„7¬Ím>-]E“ NWböÜߨ­Ñð2fK:V-èCÏCÕ•C%Ï÷z*Õ>¾½1éjÆGy{ô4ÕÖŒ¾1Ž:7ü1#{ªmdIΪXMjr|}$¥;TŒ1³FÔb°ÈBöŒ¨Ä²Úù@åá`8‰Ø¸LÞœºïúÃExàVðoQÜâOº‹9ï()ÔÄL Ä w‚æ#Å{ïu.¯uËÅJ§a@ø6ô;ß¼Z•Ü úè׫JØe‘”ï¬DÁ¾ç„¾¯»gZ9Q†é‹65DT´¾u Ïöh„#Nò¶xž‹–®+ÝYeñ>4ó‰rÇ(jò³‹ìœ{Œ¨…Ê«¦=•çé¡çël“ܲZʈLžLá[âØ'#Æœcµ¢«ƒìîx¼ª/AmH {ß³6ê ·Y¶ÿ;/ßé¨1ÆŽ+b¤.NÀ1üð‘áSIèLã3žú/ñÌaôð¾¤9ÞÛÈO8•…â/ж¿! äyhÁú£nDZ ,»jzžŠuÖÓ禦鵯˜îÜ&˜‡ ە®ŽÄ1ñpÕ }ŒOª+¿fð ÷FÍt &UÖцÓ*Gºð2 «ÀÞÀ‚X “‚HJdx‰›ŒßQÍ•ÓÖ®÷¬®U¬}']ãêæìT½Ý1Ц?Í n¼`/Qº>óÖ0|—ž£ƒ–8aŠï.Š2_ÔNœætkªãôÁ€ÎLª]^›è5™£ÔÈ!6gz|çç³åœ±Êªx{ÙÎïÁêf%Rb â&q‘ÜzŠüXàF Z•rüƒ«)éT¦'¢SôIê\Yf‘VjêðõsÄ|,eh°Ûíµ^ëMc·(»KSïU¾ã0»^†ÐÜ{µø‡TäÞ>4ŽqBW`»Òxµ%Ï›<³7Ÿx[ØYÍ“nn&_j¥qWüÙì5—>ÿÒFœ-¼†€l ?þ{ô±çy~%ˆœi÷N9$pµ:íNë]ǶÚKåõv¹!ø=î÷÷1ÀéÄòŸšžÊ|¸ñ;H¼_’¶¿ ‰¬SDg=ªµGlÖn§Ã}HFƒÍ«Ë[" öq¹ï6òÛ”-©ÃÓ¨šû;sêS²XJBη`*ሹS hhùÍÚ£Iñ Ÿ.“ bQ«g1÷ÉÅÐJvMŽªëá7û±‰!Maks}¨Tf<¡‘]†ÚúpÊ…HûÀb¼p¦HeÊÈ¡:—\·«ë9å5h—)æb%ÌÝNý5Â(9'Aœ4ZB.ó0D{68õ1ÞÒ+L#.‹÷Y,HÜ‹‰>£9mñ»|u¥í0¬Ÿ\ö)lW4×UMP®Eí-Îe.”†1‹=~ÊéqßNb#c¶ &¥óª•¡ž4?µ¾ôŒc^CnZé/z»ÌÎ…1ç_‚E¾âTã¨Ô¯8„Çp²ÝÁÍEõع¤SýXšY@C ò`+@Ç+¶N7„˽;ï ÈâéÈ'—¥½ŸVË´¯¼ü%Cµ!8“ÉMÌÈq¤=þ ‰T€ee(‚Ð\¡ÐÚNéF'Æ^=mê¶œF1|×&&BÝûÅ•n®,¿5{jQå[BÓ;b6 $pNê—yÓp䟬ŸÙ=Jm£ªÐØ!ª_BîO–ÊÃ:¥Á•3¬q¿š¤³L<+*ók¨F”}õ:fJ@A* l™Ç™lUÒtËœí¤Ý:úû§Q{€¨cóuð¾<ÄEod Vä£ç‹îíËÂоM¥‰tœj‚øÒrA?X¿.íú.XºAÁÁ¬aú—ËЃÅÀaºýƒ††GñçãöÎCîèíìÕ+IAxÏì*ñøºû‰g‘ q1þ–Õð=jF"R%´l®P»S¯/±ªÔ»¡Æ†ÆÏÙäÒׇĜoï$~~ù…‹2ë†!XÍò«M™[ë'`˜4·¡YM²#‹Oò S0틚«ÙÒÏ›óiå88?ïl®æë8›¨§pI¨¢ÎeXBBpë BÆ€¥ß›Ž”øÚ{ãö*¿¾K¨©´óQ†õ¤¶(ð»ê"¿š£ûÂ-ǰÿnÆ€‡ÔKò…×…ɽ—õù‰J—k@†ʧ˜üÔFš¼qÓ…¼ׇÃÊ/ä;þ#“é5È)þWÂ$t’‰+2ºËXp©/›dóÈù{áí Æ!Îä}ÿ–í\£‹½§I4Ä>Í?ˆ®!ƃùGagÆåÑ’žWÛ É¹ÆM–pÑÓÑ·D¬{3Xp™"BeÝJ¡`×r,ð}œÁ×ãŸtz¯ ÞöÎ]°ý$<ç?ÄJ4[Œ GÎêy´¬©·Lý â’ì£k÷ÿlÈ0½«ŽÎø3À„@ʼHè-¹”¯£ìúù‹{Ç@¿˜6è ˜óDÈxw§ò€*cQ;TëM7øÈ¡ ·ÿ,QCqGó%Qí;¡` J׿ÖÒ(Qdlk³’œVƾNó³ üš1XMÞáêOæ1Ô-'“ÒÝÈJo7Ö¼‘1²–w OÊtV®Øå;©<²ÿø¸‡ÓOjc¤ìef37Õo‘+ÀÛ6oˆ"á[ûÓE[OÝ{^K_ÿk¾d§?iUB(°ehèƒômcñ»–üÝ$ mõ£û¡†Ä§C`´áÄ2Ìë}}Š`–¸T¤÷“¦ω¶U¿•Í㤑‘Š¢â—‚™#Õt©mÐÑ—ÉŽ,4!+¿X?ïgÌîŸáïiðív_ò«¦dÜŠS({Z"‰Sv‹ÍR=›EN§&k°+ÿÊ3Ù®Zo<´±È¶Äy+VæÄåîÝ Ÿ^R/g˜¡:vøÕ@©ÄÏEeákÁmgÆW”KДy&¾Ý#é=K„!ÙÝÔµX9Ò|~äF¤®èÔ“¿>^SS“äΧÎPC{Â{OËïÇ‘¯Yuìêù[ƒŸ–ò†®÷$|Wâ)X\o]°Ym‡ê®„2Ïg®JòIi@­»ÜÅ0ܹd˪/95P›ænÚ ¡<¡´2ÌV,¾™J·7ì^„y R^%10õ:ÉÉÝpl8!»eH·B%¯N™]Ç3¸Ö+q‹ïºD¿U¯Pñ>†  Íï´ÈÜý޾-· 4Ü‘vyGJž DÞuÙW :¢ìÀ¤·9äÈËÑš§DõtªÄ>•[†- –{ÿFÏŠÒæ#ðË:L¸Ë@PžO6Þð̦FýnÅ I$,pÊ|%œ²AFÔ0‘RàFYÔ¯bhÊÏà‚_aÈIñÜfãБˆènƒÌy­"‘|›ÖP`›•Ò©A\îYˆà@i«¡³'Šà¼ªÛ‹¯oŸËX›¯¦1ÏâîMcPô¥»_ƒ2 f9½Zpci‰*ÔIg±æH˜1êàŒö`ÃCDäÚuGéë¾Ñ¶¬*pai†Ø*}ë̬•FbÛWj¶ßJ‚Ðq®?vÇÛ˜iò¸UÏhØjíOø9Q†;âdu ÆÁÀL„K F¼æaY@Í¡Cuð"HmxW™ål—7¤ÆV$dhA[¦²²Ìoß*.—9‡™·Ê®L=v‡5Á9—E*£…Í‹j•¾Ù«|«lèÃüÙRų²#¶{f8°¶M­ÁÄ¢uXÐ×SVË–°Iî93u+e›Ò«(^-k6fã0ߌZæânT¥ž\þ3œuÎÝ¢ës%\ÎU üps7U˜¤i½U7éÃì¨Ùʆú½ R<­uî6Q]}1¨/ì2)Ÿ³Õ’ÿ£äÇ€^I¦žï’| ž MﺜÕÁ“-1Á º¶uý7ÏïÖ$?8¨U¤f º·ÃPÛ’vK\~œÑÈ)¡H'TGjr¤·˜'Õ1±‡…ML¤S\á¹æuÁ™_g°A ÏÒ*•¨tnL½þtÒ€1¸™,ÝsëX/ž·$;o1¿L$Ç %ìÓ"çm"× >ʃ^ˆ3³z™Miê†!µƒãüo/zä 6£|ÈIöTl8\f‡ª7 âb ¾ ÛšÑñ*ŠeìŒÚÐ`½Zú9)ìôL„Šv6{¼h–l=±ÞžíêÑcV©ˆE(^ÚEÜÉÌ]¶;ªªª”÷5&Û÷ä3híZ*&dôSA=zcŽ´UZZY$®¼wßgcO­Ÿ§¿[šà±Ëm­Kc=c'E¾c„mðöÂÑÐW¦ö,åGçì¸`O¡€õ­hHiWT(„´oÔ:¨žåÅ¿=]S& ¥Ô“ú'ÂY‘4œ½=j¦Ÿû*óÍàé“Áª à ”ÊrêRoBgÝÆ+ƒ ö4m# e%ß8¥Þ°¹ @®ÀÒ«‚H"Êâ]ÃQaê¾öÒZuÜ}w=sFtiñÚÎ ÷åáC¹+Âã!¡­ú¿Ë6’Ù=T±Òa]o¥.y8“Dµ2Ÿ1ÝÃÀÌû f¸O-„Ããùµ¡Ž©Šì»+„ÇåÕÆ›ÄÆjü #Óx‰ñ#éÂoÙv(A&#÷“©5kCúsÇn66™e"ïL«C'¿‡˜Íțlÿ\u@®:ŸLf”»œÖ¿æL;|ÆÕ÷øóO}†Ëº9)ÍS¾¯Xˆ*.^mҌʹ­`É™kÕ…Þð o,LÓ8ðI¨_ò,k_ž²2ÂäÜ(Щ\öãOÅx§¾c«‡k!óZ`lP3Tô%#Nå'ÔÄúGÇrX-b¹Þ ^L"òg¶k å7–PáÞDÏ‹ÿüF§›[²bΰ[Q]< "Ã\Tcs¿€'„Ñ©ó̘fÚN°óí©¯ÉÏ#Z: ýÝûþ|™*1ì~äëü[”B³ýÄóçºk@úSÉ{¤‰Çõ#JµÄŸt'lïæk§ÉŸVôw̓‘-ež©‚]ÌMFGìq.¼õ‚æôIî3~ OËѪzT¦‰cðH­‰¿Û^Ømæ.ŽþðûÐ_=vLŸVný‘9(ÃìsjGìÃxk(4+Ø6¿s¼-/‘Ot”š½Bµ¸9ô†ÐÍv³5­e ·»œNÚòÒµÛ¹tr9µvTð)¿éÁHÛ™Å^§2Né¡RØÛ±º›yØXÇe³£Ö™s–Þà/³JéÑ7$ì7…Q½:/°ˆ¦B»*`ðÚÓêôw–eü\±8i.ëlˆ„ùb9x˜_[#žÊ¦ô†"«u ÆsŸhæi»ïK>Ç2<Ë+J½tË·*zi04[=€2\iÐIÃîÝë«Ï ó:ÎT×~³¯ñ™(Xr²2~2oô ZnNò9]~¯yç®Åq·SÒ È{¼˜ËÀ±Îg­Óàg—Yú £ÔÄàäÁG>.ÃRUkfêUVGé†%¦¾adFMdô{ÖQJ9q9Ñ_²Tß{viQ>“Ô¶+Ç«‰HÍs£ådOÚõ̪S'f˜NŠâ÷6Ý5‚t5Õâ};É2ŸÅî»qêUŠpÇTÔ3¨­ìHÄ’AŸLóöçV„i;¨5¾¼aB“+ã‰=þÁyûJ0$ô'¼Ë€¯™ï æÓ °猛××xB}XdcÓ×¾~„ÒN¶øâ0îz¢÷A¯SùÖ ¾ô“ا² Z髽Ž|£a[ïöèH¹Ú0:ŽÎpîEÓÎ;U)Uô=/¦·úðHx1zmZN½¦9…ë»z|f» 6z|SÝ8Ì´”]'É ~u¦»Ý ýÒˆ¡þ¯AÆ­5’^–¹_·§Œ5ß û¬Le”î;Þ“qå­1ÚxdÌS­<† ¨Ä ï!E·¦wd¼ètÌtQìN Þ÷W0m½OG5 ÚxÃu‹Y§Ý‚4D‚äŸ6z&KÃQmE¡ÔeBL¸¦YÎs ªøg:ÅF=¤¥˜–P´ 0[»ÐÑð/y˜)_`ð|éE[¯¬…'û ¢|œ‡†3¬´ø(#I·‰÷Oz÷ûa³ß{‡WjÈB†GçºK+©×Ñ[¬–MŒ ¬Û2OÈ\¶ô4‡ÀŽ« B:?S.܃ð9™>þlÿP;Åšµâ¡;ÿëšm}üO» ³#¼ S„©ä8ÊÛËhb­~r|”9’¸·1D©±2éјT“@Eˆo{A7äœgôGŠk¬ÇB¡%›÷gGø„!IÆ9ÄÏ’é(íT³øKsDFv¸öÏdÙ] œò+ZY¾2Ç:üG_ÆÞ³Zñ_Pgº¤4·Ähïý‡ çvc’þÐÕÎC;–€ˆ]míÛ¾aYZê¦Í ®Èžšè"!âlu®>×¶UTü©ñ+‹ þÂ[äB‘ÒIDïO¸® µgSKVÓØ·w%…¬ÈÙéÝËÅÒ5¹((ÏˬlІB!Râ§ñ)|õdŠÜ:ÑSZN¢Ä™Š~®ÓP•KP(gž£Ø®òúó·ŸoÞ­ë#Á¥ÌNœ;ŸÃö—‰ùÝ_Ñ¿ð&òSÉ;Úøüá‡ü3À¨({Š_ÐÙ>0™7ºÅCáªÊj?8uÓÃŒoçâ‚›*t»ä ÿà ÕÏ"6Á RÕߢ,ýX\{ç>÷ÖMÀ M %‘ôhya© $%ŸwgqvNLgS~³OŠC`’oŸ"ºDíž¶;>"z瘀Ës*)Mâ3ûÝÐBZmPªŽvíûÑ^Š÷¥~ý¸€ÐrG&Rµ*I^.xÎ1Ûþ‘ŶüÒi§@,8XîíÒЯáJ•Æ_ÂPŒ|BªäÓà$€ewYYjg Kϵ„´¥ãÙª5Y6Øö5Íñz]©óeャ––ÓjŸ·6@ÛâJœ‚<¢®?%Λ›ÏÔ]Ï“äÞY=n¾„ ýƒÓ±Ù\‰‘·¦aeíµI¶o¿æ*p°ÜY¢»—­vó ¸T(j‘B¸ÞVRìNÄ<å?þ!¿V(÷4ÕߌÊ[¥Ilø‹ª`Pö«&9oá¶$!<ç)%#ãpÏ„ê œ~‡± eýù¢H›—ØY²"¿§Ìä÷ Ú¼gÜ[w”µg„e ìÎTÓcZ³‡^p,jq™›&Ÿýû«æJƒ½ýÖOžÛGÿÆ™OVòÙÏ1Ò?A9¦©: VzƒŠ²··vjxI|µ58Aé3É@(n¡s8[âª.l´@øÌ7G!’KpÂj«þqje[g9dç…ý¸ ƒ>=Ù¼œ»«‘_¡Ý"×§©¹ ¡¬öÃÖ ´°²<YÅ£"ðáo˜Ÿê²C´œ3_žá#k¶«ø f´·™Ù¢E“„Üq·„…?7QeÄ÷}€8WÏàjÞݸz{ ê"#Jl–(Rš-eH<:M29¨×u¦üS;8çnžÁp‚ßh/Ò€‰vÑ/±Áë–^6Bü8ê<Ñ¥*ÖGTDm|CŸ²eJ: |YX\{ÙMr[Í]î.œDÚŠä¸sÏÏ­—ƒ£EœÅÔŠæGÁ_SU©ÃMà81@4åY>IŸžH¢ôÆv½.YaO²ùø›{»léj½ýë•ü«N#deh‚o›‰OÝúoLÚæ—ëQW3BãÛÏÙwÚ8_Ÿ—îØµ‰˜™¾Q‹uó-£uö\Zë´7†ugóË Œ)®Ù¶ò?rmqyâ´¥{}³p¾{¥¬ùLSV#ÙÈÝ€©a>,-ª…÷ ]`mú£ À†Ò¢šn2~YqçN1¦Ôϧ³ÈÇÓñ}â ^øÜÞaDÞÅB/c:ß`Ov¹Á·²  j#¿Ä­Tzŵ`Æ|r‹ôf²å{PÌ“η³põM°ˆ—›Iû™Îô…MUî£ë8/žO. %\{¸rãש&µo’Hï)p{Øy6<½ª·i–[Zè§µhµ°ºGäƒe·¿½’Ð5úygëa['*Á][øg©¯X%ýI…Ìb/2÷á0© $Vv~“<1DCÛJCšÊ›z›ña(ÆS«­ "÷üÛüرßCK4¯¤êÍ¥WsePhðµ<¦?’+ºmÔ¡Á™`ÝAÒÃ)ÀYRUjŸÈ()óË7Cȹô±–†òy™›’2‘…x;RF6Ä<ÐXÑÓµ††Í2‹÷ú ;ÄÅb\ ½ÔmšÇ‡ Us×q0žq–Wã±Ã¸Älˆx~\Y()Û¿þÑßO£…öŒ@Z9Õ©B×F­Í…Ó…¦fîçÞë]ûìÿf]Ìâ5‹zxETC’øÌƒÚ·ßÌdƒW¨.õp }Ï™„ŸßL5BC¢è}6ÃÒ¦N\"Â`¼Œ}–b'¥MÆC¶ÿÜø‚¡Y¸ûGh•ªK›Ø—SVuh]îñ5S„Œòº`1cR²—ii~!BõBÎsÚGña·8«N¨d…j+­¬¸âA±¢ßòÊk°±ÿÉw›ÁLwÑó-޵r©½ÐE”/.¼œÁ¤ÏŒli{€)КPÌVßÓÍ3’aÑ9;y1Ýj¹ÞzA4ìQ…iBŠZWØ¢$Ù \÷åZO“0ñŽ;*f½Æ)mÀ³b#´ÕÑš½Æ`.€»!|Ÿ®6íDR8G&ÄCMz6‚\.síC@ 2®Š‚Æ«¡;r´Qül&4÷&à®äñÙÀ7-ð˜>ÏÜë÷;Èù)y8%)¢Ô'6Á‚/Až— §±ñÝ\ÀJبda*^]ÅW×¼å˜ }Å=d‹õÞy˜ê”i6´¹áÀ¡\PaWž¶¢ãgj¥4FòØîýßìpNX‡k&pWæïµU73ãW*žÚýQ”o"!ô–éÒ-&f’RN´5àᛄêy TBRž•õ'Xµ5ò†BS©ú›Ößgk 逡oÖ#ôG¥…"5¯“Q0#Ô7«‰iú ~OÁk˜÷‚¹ k.Uw$üŒŽ¥øZsªò†rÙ’¾«$ñé+Û¼üu¸–NCÆó¥èLÈáÐ z¨‚Õ"£ÙÛm£H ß/, çû4Ç;Ð00·äÖQxä;&¼`.­a]¨ž+(#§‹×Ÿ@¹ G²•…n ÚÑ5†¿Û¼*"‚7’ñ&%Î5%§?í;§ˆJåÓ‰E„îÈû5ñ#=X¾ó{3Õ*âß-gÏ« šµ¦ÒëEÕîék,øâ‹Lî¨S^l-kÛã»6ÏÖ¹ËäªéDX+"À.<Þ¤ãàá4ìÈî+ù?¯¢q×€pa•÷”Bÿa—ÕkÿØ éMYèZ+@†é fo;¨7‹læ¹eìhÎáÖ&c<˯ØZ2Å£h)¥B6X»˜Ÿ¬bÕnèKe`Aò”± Œ ãû8"Á¯p°Þ+zÂÕ]É/%™¤â¯—Ä|ˡѓ•L(ÑTXL¿7ÉL˜eˆÌ !gåS¼xÜù|³+}<ßc¿5Ÿè1IÃß÷eîSس—Ù¼&ÚÙÅ#ÐÂ%tŒYG?š&RdÊ‚Gí-B¢—‰Æ²ÖL?ÀÙ„¹@)ïÌp—¡§ré›÷8 µôœE‡PB6œd’,©F’’¼ìP5dRü%ê8:‹×Ù]ò"ÞyNrãA.‚D<&¿Œí'g¿úIEÄ닌 ÊãIEkN/! ÷”‰UO@–uÆ4>N 'TÓEkKt2ökƒ»|!‰d!ø·gËz®þ§)03ò¡¥“u*uúmßsÖz;(™hA Ãf$ K𬻉ƒl U”µ˜í+W‡£ãs¯ª¢•ògJˆ¸e¯¬£=Ìmc&có‰Áiã€ßÐë§ÞóÈŒ¨'–ŸŽÁtÌ!‹ãQ)åÁW)u·—zœx®)ÜÿÞ]®*Äý=©¢•.Ûã#sÁ è;cæ³trÀ¾MÔS™ ‚}ßþ|èéï/|Bp@hú(€Špò‚àÅ즸õ>sÉ"HFö˜¿—–ÛL1ÎD3¢ëP Ùíl5q ñ›Z›ºgÁð̓°L ¦NŽMҊЃ=™ˆN^C¯æËJ4Z)ÓÄ/´Ã\¤2×iþ965žtð¥õÄ¢þ¼(H g飅å`è¼t² vô¯]ÙSßJãÜ!n:™F-µaA1/;†§l«!±âArãghíùN‰¿t>„¸Å¡ÀñSJé«óúš3¹æ[Ë1˜¹ÏYP¬PqØþ±rp¾àF [ÍiEŒ[dç5š'Ýø‚¼%¢La «˜Cœ–•S:mÖt.»Â MÑZœ®ª¿“Ú§Îk iµ:‡Œ|ô:à]•,%ñ€0%¬øbUéÊ!4ïi²Îæì†µLS<†Â®7ÿN %ñ¼’<°;]µn£ð¥³À¬´œŠt½…±«pQ+VbŒ’¨µ’Q=ž]ä3‹Y™éõÕ-WÍ«7JapYH5¢»²Ó„GW«Bb:˜^6Ôçr‘»}q§†Ä«58=¿Pvˆqßœ3„RNTU’•¬Ííè~°ìÒ)+|sÚ S¢[O¹»…û¢èI&6^yœ_ÊŸ“eÎ…7qŸ•Æðm†Šÿû†ôÀœôÎ㇆È|ÝÞ†ÛWSÜe!H?í†*ªÞôñ<¬0Þ¯{>Çjö5b+C¾3¡­þÍ'¯½“GGh‚º!Â?nÝ5ɯ(ÿT¬i²ŸYTç8;9ë%drÌ)1­gïV³ÒxêðÑjAÃýròµ¹Fw¯Ÿ½¢í<®‹ÆIjrºÉb<د”ñ²£íÓ6®¥-;ä/d1;7årreæÛKC/Bëxë°.q®áÄWwe[ ´€#¸yû`õ€+HN}¡wui‡¾þ`­±D~L1Èð]ã÷Cõÿ­gäl¢–+Ë”»yV8bã2`¬ÐI½%)!—…JÓé5øõ=ÎDoòý3vVàú~`öP7.ÚË JƒKì›÷¦RÞ–è2ÚTXÓPxℹàÄœ§T±lQAVSNÜçþ—àŒ¨ÒœqO‘M¶ÖþÛ;Ìo‘dv™à‘ô%—!¨Úëý¶œUm…ô¨Ý‰Ü«á"‚Sm?ü¡Õ^ÍK"¢,q{…ìКÀ)i¤hžŠÿ@ñ­í~ÒF%kfú [¥Ñ¸ü½·¦¢vëT|åUg׎“Kþ$lÇ?od†FHÅÎ)/EÑÈFMµ6±²aˆä^û*{FŽÔáœ2‡?yWÝ4Û©kN3Xˆqfå²dž‰î—ñ¹jTè¿;/sàÇ'¬foŽ®+‰þ’’XIÂ…ÛÒÞp{Õ™`oHS“¼öÕ¦¼œð&.e$ïC•ÂùøQ&k¨%†?õ¹§(=w’î¦ s1q¨ÉÎÈ­üÝ¿¦`¨A© §óyâÏfºã ZGY ÙÀ­P”˜æÏ7¤[j0mà[ >í个RN%®—ËxG½kå’ }è§î¸¬ýU ý#–”¦ú÷êf ƒPÂsSzvß4KØI¸á’.Ê`j·Vë&Þ`”nL•Nô¿fÈ Û­ìRÒìî2fãñòCÜz¿TèI/‹K#ÐêÄj ½;èûÊq7ƒ—/H±lZÔ4ŸÌúÐ ÝÁ×F2ØÔ×IûÑïò’9»!äoиUrŸ³ á|†Cw²Rií¦. aHV3PW¹¿‹·à°æˆå|àkáÃ[ôÎKÉG‘OîŸÊ¢ Pbh¶«©üš‰ºâ…[îÿl;¶7(Ç(ªwê³Î)à)«<3eWË‹Ÿ†ÙBÍhí2dÞä0%ަÝgñ´`<ÅûRz‹/÷£b®MyŒê^ÝBŠíù©à–g^½´Ê¡ü[E›çÁzÃ7%dûV}vߥRèrKwßQ¢¾>}e]Pt€)¢æOŸçŽ6™Ÿ‘75Ú+âPõ!Kv&û-3ÒJHa\ËO"9M„¥¬'ù¿/­£ŸÏN{wI<æ~??½ÁÓ¿J¬` Šä[Sß·íVÔ®¨åmHŸz]”Â÷ÖõÍÒ¨¿uŸl"ç¡þ"·<}ˆh ŠYž<ÜàkÉ?VÅHŒG†žSG€ÃÝ-sˆYâ=ÎtÁÍ÷˜ýI¡o¹¡<ôûJ³TU¯ó#§«9¨·; ßg±).Z™„m¤?L” Ôt]ìI5–pŽsÓŸqÇÙYõ«·sÑïPÔ‘µ tw/žMbÓ¦ô%ŒÇžîºE2§8·)ã_»Ñ]hÕ¬µÛ/­[;@ªætm£ÑGïÞ!`£±}X¥ßóïÔãvëW¾-&­þ¦`Ÿä×’#-‰t…‘›þPíkmdð­ë¶¤;©4R¸…š ?©x€Þ{öjüÍ+Å£uDs †[è.@=HàDœ;Xñ×êFL¬8tDöÄŠ¡t•ìeì¤Y v D#À}ÇwøµÌ‹<`/oºmÕF hGì@+vªD¡ÒßUÙÂÊ£•?v%q¾£â0Îý2õÚ}Ê]9ý³"H ÝZ»Òü­ ¨‡Ûv­ƒçZSP¾–¶˜ Z˜ OO­¾T —Qv-cªÆ‚Ø £n]Ø ²=_ô zùJtAÒ5û2MB&6 SFAPŒßÕAb‰‘0ñðw òä!7¸$$ˆé^Š|p#„À¥ í¶½„±äîÄVQ…u,}ùÊÄÞ5O*LïΕ“ä{¦æÔ¥7w´Ÿ`”SšÐðÈOá‹ÏäÒN§ò4ë½$³ß5uúåÎÞÊ“ÙÁV +°uÛRSôý¸W‚·¼Î¾8]vŸ³òåí@Щ%ADÓér1A*Å…ÅŽ£–eM“›O øQWÌF…)jìš6Byâ5›®õNS·R¦K[ü¿Aê¼Ý‚ßg÷þˈW§Ë¯8ù«pC;.ÉÚ§Èrò­ÈüÐë™Ó¨TÒ±Š&ô›øÐÜØ¢k :µ\UÜgúâšÂú5D<”C´Áå~Ó0ã Â Ò Ãèùuó]Úú¹^¸ÁP›M$}¼®ÔTœSįRůåŽK‚Ãã Eu·í[ʺ÷LÔ/¥ê<­Éþçþøï«CñŒ¶¡nQÝ*2Gøh{’êµ”MuQ¹ßs»¤JêQ¾Ûåû:ñ}ÙQ,JÌÿfÀÍ È.?‡ðëžõDæKRçŠöxúl¶ý¾ï‡¼£w-x’ ,ª`±}Ìú…½ª'áÔ<ñy³P9Ú!͸TfŸXl­ô2Jþ14m.=m1³9x“ÎC\sGØÞdßWÒ*¼—<;=P‹¤®H µO%7¢’>¬-3Wòð bƒ ‚¼}µ2²+¯“ȵ+) Üò,¤zÙ´€kÜ¿Ÿ–ž¶ôÜ óUmŸÎUNb²a 妱pÌkr`ƒŸxûYx»X¢ytwdçÎɹ_· ÇÌ­E¾‘˜¢TnloºJø›èGI—>ƒ^ê¬5[rhÓ…èÒ}ÒP`–Õ8mòÕÉduß,¶=CÅ–Wcê0Ï|³ÌÐé9n—T:lÔàƒ B;²dšxø¥ifÐ8›ÝꪗŒ`“¸”ôkÌ“ØF…LJº×l@ozc^xwÿƒk)=º¡ù\Ps<@ûò1íêõ#ES2[P3Ö>*©S‰¡T ù×&el” gd¿²Æg_óæ± áv¤p[ ?|t7$‡vvÒæð•íãû¢”ñ÷_á×R`CGœÌŸ7wSË]iˆ“±ú17eîÔ÷ìN¬Èb!iÜþn¹¤¢ÁiŠ)~{ïƒÔõ¾™¦Œ‹¨'Ù{; RÄØ*%UÔ»ZÁ)áón1n ›¸¬`rfNú)¸¼â²Ñš^sܧ’4„MÙya>`aIUÊ8©'õAjû’9Ê+õØ8 mmȬs°M•gÛ7ùçݯZêç}xçËö™¼…‹ÕL’µ`Ôsdºö„Vt“_ŽBÖ ,+먒„ßKÎK™f¾´%–½˜À.@Ì>Uc@)e’}aQjÙf »»ë;ø¥µƒ—]äßXöQhß­ôªˆr, ÀfYÕ&uï|m˜‰8ÍH‹ŒËððŸ¬Ö¢ZU/µ]¡®•ß’q#GÚ=âbµžAèÅÏÄ¿IÖ~Þ# ”, ÛG‚9‹ÙÁP}G‹a~™¥Ú'±×#n;`-JR£éùzà‹ ³ˆÀ¾z ZÍg·¡*1:OZ”ŒõÖ+fä—üaX«ÎVš%w{d„*kYÁÖW2á@xBŠbVòº;æ.P¥­#`vÚRöŸ+îoå¹$ÎRÅåT½†Ó§Gôì)«ÇŸJÁJ%’›¨m\µïñŒÙÚ°î#LŒôÉK6RØ »~™3˜»ñ|yûìlåõk.ï>dí ‡€'8‘á‰T½n„¿ìÃöó'ŒÑ~:@V}î”Þ:Ÿ'œþÃL»Ž8¯ÍvJo›iý³IÙ¬Ïos|Wk1+TÙa•Ÿg1ÊWUþ 4¿êϦv¼ gËþœgE4ºÑ¢*T·óòÃÏòþÞÑRÿ:Ôè–­{MeX¡•vº–'„·°bD›(V¦kÏ­®]@Îá7Ø’¥{VÞ|ãe%júå’†S^ÞJÛ ¡XEìÄçÞ,:ûF.ÏwbiÁ ŠÅ»ÉÖ;¨â¼J!ßî~ío ¯£<%ÅÐÇ-â%«_Âj›°Îë–Òyß÷ö)+‘žTãU¤²!O—×€˜]œúÆvìÌÉâoú+½VpCë~¤:bœBѳoqª]°s»z­óÍâÕ¨M2Ezn•·f(Ÿ2êž\¦\*¢µ%ŠF+ŒˆEV£®Ç’|¬ú 4«5Èÿ¯Ý:ÿgÂa8n(Ç1&$×2Ísu0ä–aä¶Êr¤rßW®I“ð•£ÍÜWn¹r Qns”d(ÇÜ|Ÿÿáùíy=Ÿ?àýóGðYX‘T‘?áA·B²K»¸9&{C¶³Þî@õ¥)  Ôã•ÿ2º_1zúõ‚¾RÓÛ¼BqZóz¼ÿ"Ù]¡ú F^RUœ.<¢¤áš­káqž2É¡Ëîf>”WxDkUãU ?¬Ræ¯'FÞª³èéÔãÖœ ˆGœ>lù6ŸåQÇ÷CLJÏÏ+)‰errhADµÀÛ„¾ðš¹=9öð($²­>º¥„eU'AG½"NÁݚǞÑ=ãràÝÓ~qªª¤²joeKà[>ÈnÈ|ÇÙ¥†5*5»žôô °Ï*¤Áã™”n‹¢u>ÒˆÈ4œ¶AìgÅ~¨S"ÿž·Ož•훚ÏS#·»jèÓ4ŒÁ­úìbeX²|Á²K—COCmô¥y†<(e37mßu·û- £1t5›ÿØ·tZTtV‘9ƒJBhC´ˆÒSÓJî~+§[[zÚï@„ñÔ¹ÏÞt™³qñ³üó‹¸á¦F¿ÌÑ_²ß½ªCedÎ}¢]ð «:^tù@W%ÂB1mãîÅKÉœ§I¢MΗåmfµ»÷4„K›|Ù=Ë#9_= ¸AVIB­…ë‹nL óµ¶U<ïż9‰pRÉ¢´¶ |ßè1°°¡tdz;ä'š¼æ6É¡NÛ“€C‹ lSz9åBü½üÖ^§ÌùÆnüô.= z\ÎÎ’•#ÍJÑ‚DyžŒ³ô‡ä]“)‰G·Ë‚ŒÙ¿2—jÍÞ¯gNr1VmL¯GŘ‚d˜R~i»qY~bÙf¯l²¢ûF .;'v|øŠ @cvÔº·2ðÊÍ•9ÖÌ&_"Ýk–X4ó>`x‹öm°¤†1רoî0Êô¨Î ö§¨”Éé#G'óCè²±O£WÇyÌñ™) ‹&Ûlþ6^:«ä Ëî£%„ð\5€q¦èGqÎö÷¨Ú%æ]Š"Í-)Ë×yÄÌâ·äuÛŽq0Ånÿ!¼xÃ^i}…²îÙ—oAÕœT=ú‹¼ß©•Xf¢(Ù^¨ÙV]e©z XèÄäõ3sëôäV†¶D]bÔ˜Š)å?ð²Ʋ|9Jœ¬6¬ÎíŠ`+Cr3§’>}KL_]E_äA¿ÿ8 ;ÿL]™ØœY.Pö’hÏv©n‚+°¿‚†Ñq» •ò žV×ÍÂñÁwÕëÖ†S¢ šÂô8a ÕJ7Ôè'ñY¨ÀìÍ_‰8*úÜ(³³õh³ñáÓ¦=W ^ˆðq¢cËmXËfJÉ/ æ9> ,êÓã!{è蘋´0(Ûà;È`%–Ÿh/•ú]ç =ªÅè ·DZeÀ–½yÃïõeù›Ô§U úò`¨¤Y„‰#L:ݱÓSù¸êmCUs•ûLÁC$°ö £þˆ7gÖ(aæðS° <~¦±yfïù›s“ŒC…>RQ0×Á[Í%jñ¼:)«ÑkÆý;8”½8“ó·:¢uœD¼ÇÄf(^a)äÃy¹fSìæ  ‡”Ý ·§É D‡QõÇËz%ÀK¿‰úø¢¢‘’'Yì"Ó'gfÊ‘2xì<àæzkK–͆[¿@ß®6[Š7Ô½å=àƒ¼VñÄ …©`5fÐÍ”ÏOøü,`fv‚È{1šcVÐDC“‡‘êµ §ëŽ^ ë7ûùgtj ?¯]ŸÀªŠ æÕÜ€ÚÂÏ¥÷5Û»éøo-™¶]úì”-’`•-.øO‹ÒD<ñíü:Yï#D&”p|Í͈t­êŸ+x ¹–§ÁÝ­1 ”ÿyù½¥éñ&·¡´p§iä¬<7 Žݳö;Wìsmsü”_§S–¨}· µFŠH¦8ÇViž!º|(÷¸æÙ0ëÝàÉ*æ"½m¿^"H¿­Y…´d’;qêPO±P³çwÔ¶íz•§P¸#V L$ÁW^HÄ/Á£oéŽ.;~ü€Jì®’|x™Nq0åó¦íKÏ/Hà|ØR÷ÖYwÅŽiŒžîßE¼Ñ®Ý«¥-±Ž*î"£:AæZcÙë,1"¥Š>¿”9ßsîºÞrehÜ"ÇÔ[Ž‚$™R,«Ô/³~TªÜK1TáBÁI‰ü)£/_á6‚=Z-ä™K¬~¼GìKT†Õp7E‰ì8ô¦ïûi¥Óη6à ^cÁhÂŒ)`×ÚÄR^~W–J„£zóäTŠYz³ÄÒaíϱ;dWæÚˆ3yï:51[Ñ*µø^‹F úûSÇ¥MªA¨oc@(ø™îÖî]…†édS㔎ø0rvŒí),Ô9,] m®ùn³ž›)pçs*ø¸ï¶øªk[ÆÎŽyÖ$£OÖïä¸OVu9‹qñõd46ìï]`è‚Õ†ü_¼é¤B^¬õ>‹¤ÛøŠ|ÿnƒ¨ÙWÏdW|3# H96ÉW’mäÍ–:ꆤS¸!C£)MLÒ–Î]׈Ì|oy¼Ûc7©Ó·ÏV¥ ×ZéRÓ&D]cu.ßó³Q¾j² Q¹Uùn´á“;<+õ±5šÝù2^ª¥áýs-gºÙÊN›pèKñ”ﳿ—.h‘åtèÓÆÕé²ïâ$«)•”Fî“wÒÍãâ#û¨´†:dBmÕ¸&fæ^æuìO*SȨx˜Û¶ýæ—ù„ê/RUaG›ëG#¨hþ‹¿@J‹¯Çx×nTz;u=fuÞÍäÓ¸aFÍþ†³÷ª<¨ç´ØûÚ!í[@…åß{6£è~Ö‰×`ž€¾1wþ5q!/Û¨V-!â<‚¼ø¼Mh;vANá±[‘¹ÿ2Öÿÿ€óc¬Ï3/¬Žõ_jð¦Dendstream endobj 62 0 obj << /Type /Font /Subtype /Type1 /Encoding 337 0 R /FirstChar 2 /LastChar 149 /Widths 344 0 R /BaseFont /NBGFSY+NimbusRomNo9L-Regu /FontDescriptor 60 0 R >> endobj 60 0 obj << /Ascent 678 /CapHeight 651 /Descent -216 /FontName /NBGFSY+NimbusRomNo9L-Regu /ItalicAngle 0 /StemV 85 /XHeight 450 /FontBBox [-168 -281 1000 924] /Flags 4 /CharSet (/fi/fl/quotedbl/quoteright/parenleft/parenright/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/underscore/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/bullet) /FontFile 61 0 R >> endobj 344 0 obj [556 556 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 408 0 0 0 0 333 333 333 0 0 250 333 250 278 500 500 500 500 500 500 500 500 500 500 278 278 0 0 0 0 921 722 667 667 722 611 556 722 722 333 389 722 611 889 722 722 556 722 667 556 611 722 722 944 722 722 0 0 0 0 0 500 0 444 500 444 500 444 333 500 500 278 278 500 278 778 500 500 500 500 333 389 278 500 500 722 500 500 444 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 350 ] endobj 53 0 obj << /Length1 1608 /Length2 9741 /Length3 532 /Length 10596 /Filter /FlateDecode >> stream xÚítePœÝ–.nA‚;4î.Á]‚—ïnºq‚;w ‚Cp‚»{ @pw NÐË÷™9Sçί™ùuëvUW½Kö³žµžµ7†6‡4bV€8ºpðpr‹Ôm,\aÚæŽª2{àÅ)€ÁÀ ›»Ø@åÌ]À"}0 xy< Yˆ“'ÔÆÊÚÀ¬«¥ÏÂÆÆþOÏ_) ϼœ„ÙX9_>ÜÀö'°£Ë Äû 6 p±,mìÁÙw†JêŠfEu]€"Ø 5·h¸ZØÛª6@°# ̰„@öÿ0@ˆ#Èæ¯Ö`œ/XÒ0€9æÚ¼{ÁN…ØN`¨ƒ öò °¬ æŽ./3plö® ¿¼ø-!r‚B^2^b/`˜ µqr¼TÕSøOks—¿jÃl^ˆåK&tý«¥¿c/0/QsGÀìáòW- 0ds²7÷|©ýæµù›†+ÌÆÑêŸ ØP°•9d†Á^`^°ÿšÎ?ûü§îÍœì=ÿ> ù;ë?8ظÀÀö–œ<¼/5./µ­l1¸þZ%GK€‡û~«Ó¿ÇÜÀпÄü×ΰ¼0Aí= °%—:Äå¥$€ù¿§2çÿžÈÿ ÿ¯ü¿"ïÿLÜÕè?]âÿé}þWhW{{us‡—øÇxya`UÀ_oÌÿ•kî`cïù_dÿk¢>ø ÿ+%ó—1H;Z½HÁÍÉý§ LÁÆ Ò°qZ,Íí_fô·_׆ÚÛ8‚_´ü{Œ‰éXÛíÿº ðß!°#è_™¿Èó7o®w JoõØþõ5ý;KãEuO§bÿÖ‡ôÆ_22€7Ï>÷›—ËÆÍæöù/êý ÄóO[ÍÜjãøðÒ47Ïß­ÿÛÿŸ–ñ¿ÀÈ;! ¿öDÛÅÜô²Zÿáø+ t…B_ýû¶¿´üïößK{€ó³ h°mZfºKñ—þQ¹Ý<ˆý!NEµ:ùyþ¿´ð5á2³‡Êκq‘§&Ï™§Ç-eÖíÁN"{¦ŽðI.…KWî2c˶í@.“"¬ôCýOÞ§Óª«Hï¹õ¶×G5µL P(Ç[ø h§7,þtnyþô×NؾÀÔšXÂÖ×upxU_÷n®™z‡úû:λ¶ÈÙ²cÑDݰ£ü³É%ßë–yG[ò$öV$u†vé2ó-ÏÕ¯òÞï¢×–¼«Áß¡ÞoïMr :=Þõùð‡-$šÈ7ïS“-Óéy)¶.-Çb$}cº•”Oü7–½Þ†’]5ý-UæÚ¨âO;³Ëî/>ßÌFi©2ŸàìñÿÊy÷£!.U¥~T¼=A‘@/fá¾Â ÉT¶ŸˆpkW7•øÕ/ØÒ×Oüikb²Ð­ú©¢ž–ë «Ä×¥fìð†á~؉07<‚"òÝç¹B™Þêàê–‹ ·ÂÙMª³AµUáÀ]Ùÿ´K¦Ø§hèx5JcAéf…T 55®®5YÖß­+óP‚uˆD`¶ŸèpD+Ö–‰Ê³¤” Cé³›£; ^žâñ#FîÆ¢Nd!ePmn–1Bd%DÆ’^ x^¯ >ÉgF¿Ï“6}«T#üí³ç¥‚så=&‹¿÷}¾{ Šu‡sk4}Ÿðeì€ ‘OÒ†¤ñŒÁÂ/JÃÈ:†ûÜ`e²b‚=ôx,¼;A©˜æœ|×ð­EÇEtŒKªvÂ@”œ™‡ ¿1“¡L•щ¿R¤*‰bÁÔÊI¡Ô¯xåxå4hÊKFÜÀE}õîAã9‘™ËÉK˜{ˆxÅ|œÍR.ª¶èQ.šçÏÁ+f]éüþ]z3 C6ýÓDG²\Ó»òÇÏ^k?€Â[J.÷ÿ|Î.J«¹Š7öøƒ›rª«+j¬T?h¤qÔlÕSý•÷•Ú⹓¦xІ~ë½fؘRÆU±›ÐÏ@$ìãËmíÅéÊiº|SÁÕ‰3­FcÚ] óûÁ—‰Š¥³BÀ“B¥°4Þ"ƺ#áPÒ ¹—Λ3¯&ÈÎp³¯»@¯ÛhÎûtv;Š×…LMìÇ[Åø®8蚺ç@£.)12Ù²ló=%üy¨ ›„¾rv†Çž]}C¸³d#’@^%K{e”€aáÓÛáÚ ðík ÷%Ú¦»Š6–m+ÏuRÇïc÷¢`¿.dYbÔO¿C Š½Ù¢éޡڸװX9<ͳýFÎåÍeÃ2ÍPÎÏëT'{¼-¬µ3³ïJSŒz´‹¢#­MÓf8·½¹ðóKß|uÿŲ¸8HÒG†XŠ¡t^X{è*}¯ôŒÃ (jؽd„†íHK‹43…>¬<×r2RGU(€U¯è&G÷ê9ƒZ-Äã€ìU®M?ð‡íhÅNŒfÅ Ô¶À˸¥ŒWÙlxÃsQóïWa£ˆv¹KÑ™¡´ŽBU‹"$ñ ñëT§8cÜŸœ'k¿yÝ1·’®¦L¬žW6*#¹÷kņ=Ce!´ÍÖ~òâÊF—;”ÝBw½Äõ —_†œÿH¡îŽ>q¿¶Xôý= Ë%v𾛬nœþqÝòÈîì¦0qœžÝà9÷¹ìÁË>è» $× Azæ1ÄÑó¡”ßÜçÊU^¿æ¿x¶ö¥Î•ãíh$^`'ý=hýõ­܈ñ`W—ôG+8Öa ™G[qYƒF ðÝŸ'.,Ü’‰j ½80´éÑO7 åÑó·uN »7BìÙ~N8ܶç‘TT–_•fÄÞk éød'®göÆ6â²ç¬ˆ9òA±{[Q׸¡Œ¾‘í©6eH5#Ö(ŒÉ)?f:KvÔbdð49ÝøæÁÅE é!Y„ûó7=I:ý¾ð×a‚gaw.Ñž·*ë4JzMGY_Û}`ÔJÌ3€¢Æ¨VäÉÚa„qñäò|… >LÅ?½¦»Ž«.˜D„G0ùÁën‚ëI6ܚóTšÔl/['Ü8ïødç(Ç›Ù7ðœ äGüÂëÔ̱ucNz>µ¯ÇE„]³Z—Âó}›äS” ÔåSÏ~z¶ cg»€úOõÈϨä$'˜ÿArš4¯Ù(¾et8ýþe“«”L›fÄ”Da°uõ*!ÁÄàXß¶WôðÂéÞ–1¢à£Àfëöˆ5§P8ó}ª¸T\bK"I™:¿I<ž=Ž2®GOlî;®»öŽ a¸=XMþŽ}c¥ùˆ¥‘(òsnøjX"våm9½Ç†„Ú”)Pu6¥>~_*ž"ðÆS¶:œ¿Â,‡N&€¹±ì§ô‘Lâ*a†0Öt…i¶i{\)Ï-qç…ŒÎìcPAeMòDUìäž¾­ñ­‰ðhÚÔmî9ŽãεUVi ”$hÆÂœ,±ÌÎ)çˆ÷Á"vÛwh€Ñ¢ƒ«0ûù®Ê²lôä|æ®ËøÎê¸õM÷W/6=4¯asÄ‚GjÒïÑ)æ~á¢Û$yd0Ky‚ìœ$±w{õ2Êà_3hŽ*Z±§¢É1Û‘ÀUžh}‘¨”yêì_çûu•¦ÌÖÀè?“Zï¯üñ»‘¬~Þňaï|nB¶kÓV nËŒv±'ËìWD~µŒÍAN‚’á&7ÌÛäþÑ¢ÿÈ[ë<îê>S¦ü› Žiã6çÐx :ß—+~cÆ%7®­Nö(<e4²ßYD;¯×b„–NµH †CPC y$áÝꌧ±½ºou”´Çç8I>/ØÛ&ñ,oâ…‚N ü€AÂS™”o_gqÓ†ªôK£Oœ ~k.áqUºáä–w-n¿îÝ;W‡pà@|â Å÷Ã?¶ýнrŸIµK ìµ&E—òá•´î㉹ꥲ¥~:|±ð½!8xÊætÑwþ?Í7À¡Õ¥^©!ÙFÏÃ…§Ï½GðúŠÑ0“ž‚žmUwQKÈ.l°‹ªÐøs˜ôkø²ßWF‘åÒìÁ…˜ê}òÜD…×ö9‹w "+ØUæÍ¥ÿL(j>ÄVïŠÅáܽ…ÍA»^GÑH)Ç6ž§R‡k§%Ègxø“ 1‚ÃCØucaöEk‹Ù.Ýûêá”Î×&EªU%9&ØÖÚÅÉo..æ2ìÌQã­É‘>‘a¼wÿªBƒû¬Oå*%ŽKaòT¦­9U˸q€j¿–ð›Ž6Ê‚“›€ýàzAÇTûã§×¥äcKú,6¡o_5­¼žÊ‰—·ðFÌZ5Œ+IË®¡øpýAk³ ÏÇ›Âýz2ogÚ :èÑwô˜ºŽ(ïFA(xÞÓ“½Áèuœ¥wE¥_>º[f$IŠ÷9ÓmÝ)G•Þ(Zú#&ß¡NC^=Ó š0þ«ø½ÊB¤žƒPF2ßl¹*±>¸K6Ûý¯²_`[žôyJ$ÅGk‹E¨E¶XÉìçŒ_ËbµS"Ž‹™p6î ©eÄuSÜ~yA_ÆI>̋ˊeécw›!’ñãªóÈPkI»ÄµN'ˆ“%êóØ8åù½OcFÀÒ†kæÃYÓÑLTŽt-j»ûJ÷Ú-Ø–£['a-²ºŒæ€ó:{é{ý=F´OŽ?ÑÌo•|þ(y„ø^&”‘ ¿„Gvh§Íà!ÕÖ,c!/ÈuÅyæçÆžÕÈÀޏ_Z êÔ}á…òÓÚï.ëÝUQÙ‡º¡UbATù@>ô LiÆ¥f¹µ?¯¡"Â˜éz‚f57F{*JäUͤª5‘õJPɮӰ;q=¨ö†õäŒQ’<Ñ~ݱib´Äõžé¨Rl°¥½±©f(¹0üiL…¥õ›¨'†¡‡‹P“ž%k>g(»™#—çh·½qý1É‘x™òöm²£LÓS[1jXÎï\Óëir±UÔŒqÊ¥Â+Êþû€ï¦?ù–m)%ÅÎ-xª©¸‘/Îï'opÔÅ…Ë÷¨¬mÐÞÑ[ÍÛæÁ"Þ7ÐL‡ÉyÕ—u¦ô‹[ëA·ë—e]~•,…•ÙÆ—{DZF²Õ*òË]*ó#ãƒa†³ã\Kd”vJGnö3ö:ÒŽ rN”¬³fKSÎþ-Þ6%–;ÿ6Hs¤¹@p¸w˜%r~Ñ Œ)÷Ãvç÷~À÷S¨¿²4jýâRXC‰ôS<ÚÚj“ùìVýÃâ»Òɉ‹ŽƒbjcÜe·æå9ŠôÜîÐH¯h†ÚÑ`DþcÓ]ÿ³Dì%ÕÜ›GÆÞWUšw¡¹o”gOÒÌY,Íqú–ßjNé&R«çÖ¨5û˜îüÓªVÃVÃ%³²¿ýÀ./ÍygÀ¤Ÿ{šÅw=§é'ò…íÅbr(ZÕxHíršÒß¿:ÂäcA Z-¿gõ´€O¨|ŸYV`NÄí¨û÷ÍZ;VÜ ëUGœÍˆ*("´Tàœë 8jQp F1M-š’¥wصHL¥Ð¹ Ë×ò÷§Õ$—_4ÙO¿ƒ5©Â•w>ß:6Ù£2åíûÄ¿R%ÿ*}{ 0~uòå2¼{º7ÙO†‹v·üù½åEØ÷ë¤)éuÕµUÆ BÌÑݤ%bg gÔüž F=´Kâè&±ò•ê4£’ñ1µä€röÂMcHƒöà˜³Ñ.MrZÅ4¡ÓìP†J‹ßˆ‘@¤úcÌ+Æ~—YæÇB,„Xû2XÞyù±Ö„2–ë 48ÕÅZGŒF>.ŒœCc ´ƒí7-j(̦kNÏ…s)eoÔ˜TÒøÛMÒ%7Û…ºÓ¶’òèT®û%°W|n"éÛÑÜKÑœW\áu‡b I êûZ¡.DÍOaDêØJ ÏY‹c •'k¿ÕPZËÅÝ*ì!W7®÷ÈÇðáƒìCùÎêiË—‹AF˜hI¿öއtm r›¯ÍPèÅ,ô¸q\›•Sy–$S–[âgq›&¿I7µˆ±¢Ä-ZødÑC”±W+9”šJ–1Î"Ù™?p¢7…Ê4ºUEÔ%܇ëÖsHÒÕ Î |Š­%\~&ç–ü@ÔzÞ#VR Eé“-ö#³úNonõ‹ŽÑÈœÁñëÝZµ’ä9¯²êµ¡úë„V¾OÃu¨ÚBî’°÷>Sup‚‚ÑC$[ìm<§bw9“Ê9B™C”sB"-t;Ò»×!Ÿô4ÈúI¶n°;´Σ %ö´¯Õýz…x_SY˯ô;Ÿt`Jø“;Ûh\ “F´d¨zΉ˜óh–ÃÝ+X‚dIÆÃÏÐ. J/ü´ùFÉ”8wU=Xñ˜«4-€UŸê«ã; ÑG% !+¬sÔÚG3?ñZ•»ëVc¿ûcєʡÔú¹¤e|VCjd£븒TÜgv É+sö%Ê_-ò¦r)»y_rj*/L8D_­jÒ«CPÐo`uß””݆ójüBá¾v6Ù®@hš×kÈížé!5§Ã±´ÉI\Âboiì›ûÆ yý±TâãZ²ÚrnûS•aiS:ˆ¡Ë=F(‘8¦µÂoe‰Ðúå|ìþ^ùñÒÓœËgC{¼D(Ô»µ¾ºÙe6Ñ2œ»wj¤øSBBC6Ìsœ÷ ]Ñç/qIÝ8^e÷ÎYç˜%ân¢3y’ŽZ¿eþ‚Ž úD7>žlÛ@¬Sl‡óƒÿ¸ó`øqe7G<±Ï°\Öi^ììäÿ ¼1=§ÚR¾Tùå$Á$ß–þÆ'M«F6JÜgþþå”=Z>yÔÑ­ò î·ÌîùxÊÕô±_!ã5ù“÷ SGŠB#tÄ ?yMŒ G‡IÅ=!„â¢×~‚c-oqšxÃ;„š\âëÕˆIþˆoL Æ|à»}|£bWg0"ã̇²¨4×IÏÃ^ •܈¨G®¿`ÜÃIOp/‡üE+øFÆœ—¾÷ÚÜud"B–ú²zûRfîÛ‘üµÌrd¸ƒ¬4¸›`ÑÈ«Pc}¶jù©)aD~ý;«núÎÊSC|‡ØãÌÓˆžÁE[Fw¾“u£ãT%ñÀÝO¾ZG9+à  öºp,rNìBZªö˦mT»Ö¶aÿýÆÝ€;ãB¬­}f=Ÿˆ0µCmen‡ ®ïÈWSŸ²¢lôÙgºeœ[ô9˜XQÑqQ$¶…”~•gØ5þ,¹7®¯‡×c&$1š8W7a³YžƒÃžîþÓµf‘ç'ƒ ^//6hš¾0 J|ÄL%G(sv©ò*f»]bÑØr¾Ì¸ÞÙn:ˆîgj·Nã®~³JE´„-ùïêïâ{˜ílOhÌJ½D4?÷¾2†–KÈ“îøàmr|Ki^ñ«ä*=±dÃBÃÆ¸ïRž f‡Á°Â›e+§Æ@ƒÇþ"k½Á®Ÿ¦_ȤPº~GKÖŒµ4µºÊ»Í"½ãàaÿÐ?ÜJ”h^ÇðkOd1W àÒe,…ß^+wây’@úñ`,Í.7FùóÕúVýz¤^ÖÛ.~>âÄ]AæôL>8i}FÜó™…Þù‘=†ÃK©ij²&X‚&óžO(¥]{kd|ÈùǨä¡N›í‘À_ÂÚá(‘PZx.X 5Kþ0T%ms|(Sß:Ýï„{¢Å(€«Ÿzf÷SÇn!g®™"HºªÏÞéãU”˜) ùZÓ åRH´È®BPênÕ/]_«eç¯þRSÂ18F˜;2zý ÐvŒJƒM¥ä;‘…ÝCÏÄÆÃ»rÀnze)/C<ØŒœ_ ¿Ç¯kõ®é+ Ô¬¥‘Z17Ö6¼R#j>ò;ýö¬½fUcòY‚­·Í¨øºaü¬`uêt•{V¸£½_Q#Ñ#7ÀÆò­q™AÃí„ÒÅ.Þ_5åŸ }ÙÈCÂ,¤~C‡sgk­Îž»ï’CÛ×™aÈzq ¯"9313[÷ÛOzvꯊ?‰aɇIBRq3ä?*³Ç"]yè·tB©D‡âˆÈ÷ÑQ߯r!Õ–ëo|\¼£Eõê¡(Ü5\hÝÏÁȨÒІJoË©T‡¢Ñ¿?…EJ_d3üV-ëwÊ ë_ÚJW¬Áâـ풮|56•Øô0Jd6Ív]ïüÿ|gÓ~ìH…ýu,Š2¾F¾w¹ô7UqVÎÑ8”Ç4,ðJ¸7,[uáð+èŽ~Ö¢;~@Ô²5&º™H ª^eXÊ;môŘ †8õE­O ùQµrÌáCEýt÷Ùk®á2³½/B)…_·˜ h=R¢Ü q¯ Ü“Ê ;ï(î;^‹9òÎC‚ ¬]÷®"Ò."DB¿hª7Mß±©Ú¦Àñ9f{N¿H˜N7‹#bˆmäö´#vá" WËëÖÓˆnz6¤_ÎaÁí» ‡^ÛVƒ×eüqtÓz™UJ63šàO%[åM·÷êùŠ/‡ŽÒÉa´|&–lÁíU×^«ˆðí·…v}̼Së’¼|XàTQ­­ Ö ôÇ™ÓRqä@øðÈë½»¶ÑOçIÄù¡A”í9^ ip²´eŽÃºf†IIcÒšü. E<¿IJ¤Þ/U’Rüâ‹:?¾.x3J9WKÃË=òñ5ÇÁ¥}ö‡`õ1‡ÑééùÎÄÄ2 ë(_¿ÅUáÍÝKÍtÙJgº#¿b× ¾]ÙÝ‚¨³Hs±æ¼[_6âóâ+öпz ÄªÈIÔ½,üŒ•Ƕ5(£@â%VøêΣE z®x)T»®ŠN»+öÜ.ÿ­:’NVº$å7ê·ÉXqé]Ý!ŒK=ò×W}|8aQ‚’ÕÝ2%©aUH11¢NBr4I¥„Íüç[Ål¡wâÉ* v,ó–8² ”·'\ð_ËÃðÞ›Ña ¦ àÒ‹,Þ“…DJ}1ïïïp–sywõeAlÚ&FèŒÕ×þ¡Û†*à³ òéûdCj‘tev!"çÖ½U‹á 0÷´ëîÖ&Êk—ãüœÇ&w”¦ŸX'8!|Tâ…¿Äß–>áÝ@ʆPz%Þ*óç[Yø1¶QÎÑT¶Ok¬cBU·¢Ã¬ó ­¢Žp)} €<ðGŸ½@°<†žá;ôéo5áo3a‹^¼á(™ú~áôdZ÷¶&´Ê&ÕJéDÒµo;»Ûo1ššž)<áa,I¿îÚ=c¾î8 hÛ‰š[ þÔÂÃû”v{_”¼B5oü…à.·—½„”‹ð}_;‚ááµ WãWê÷~îøÞ„¥ ¤ôm¬òÎ-ý[\.šš±oi:Pä½ÐeW&·]97âïÃ%—lˆÇ/üm… 0ÉÙ}ÐDEƒÚÒ—›.g@uQõ O…kd‹fœ©-Æö†.Éï3ÒÈw°s%‰ño²Ùªo•B÷,äÓ”„´£±B%ÆË¢›úŠÓ ¶*©ôÅO½åœg´ ½Õ)cú°Ûï8¯5Uf¸´‚ãã vt°4&®ÁÀnú(ÝËŽø¡ÃMëÓbMü ¹8_…×pÖn„º4_‰BŸÒ–êU0÷ØMTÌÂwÌ#‹‘(71ü¬‹ìnq´Ïïàx·¿<øŸ¹v¢B ½¾gôÖví€TÙ %¡øÌãÜ¢“®ë]S3ty¢*5ŽC•TÛ¢wöÊû[Û\]E&¯ ú”ÑØãMÚ`^MÖ(QZçÎ.ºœòÐ[zË"”×ë& ZÒZ7©æ¨ï‹4ðÒA¬¾#ÊH‘ò&$¿º J!½8×çGáGvƒIŸ…y¡*çYn 8ÆSVÞì„i¿–ßë"»(?!Ä;?œm „¾ YÒtvÇ4Ky‡]6c”’ Gxå3â뚬ÿ&rûóG•Ã…ó÷ŒäšÍ$aýœ´ÃN!ÏÝñô¬â/¬Õ*óÃËsã^ýéAËvÛ²îš>ô(­q3q. l—îmyi½ÎˆÐ6ož’ÚESýÏÛJ¾ôÖðÜR•.Nµä‘¦-±t%YÞ\¥\C¢5Ö<ì2J¤Ç‹/ȱ&áþ˜a㜙b ä”u(ä:‘㵟Ÿ1I‚Út?×ÖÜâc¦y8a4ncß³—U1)é¶³ „ˆŠ²ŸE}8uÑ9ËÙÖ]¤¥28!mÇf§±ë,$ÐxMâÌwöÚãÕ‘?þÄɔΠæQlì1˜RÏ€gðŠßíÀåf¡¢o‚ÿƪ–µüNêäÈIOzÜ¡íî•j…n•@5ˆ;È„”ãm5—aëÌÒZc¯p/€˜½Åxp½µZXÄÅ‚x¼‰öÈã=Ì5}×K‰&>¦*Iüâá¤àÕ~Ü {œW6Ã~%Œˆ$ع—%ܦ’CÚ çÀ  Ã2ü°jÓb'¬%_µñ]4b «£‰/ļnû¾gœ†@)Ïê±¢A¯§™Û|Êy#wÅ‹®WewR ¸ãó‹F9O«’TÂ$“Þ¨—¸'Ä¡BæYQ—måKŒÿ±´J zhXÝH&ˆûˆ—þnÓ´-¢^&äÉ5e"âj AäS›}€SŒy¦&QnÈ…>»²¡`©-øn¯Ç¾G†DâÊò aI¬rXR¬G›žÑÞ§8f¢ Pر>ŠBÚ ª· Ìÿû/…:Â"ìÓ.‹’ ð.<Ùƒô4v:¤«[C…aÞF&áÄ"¸x‹½¾Jß…†$´K‡fXpÎİû]‚JrÝŸÿ×LУçû©GäKþý¯½±?BË=ïƒQ†¶/㦘ƒZ4¯S¨äÔð 8mÓ {»>у̯L?zÅ‰à æ{´}›áŸ>TìðIÄê­ðÆ•4~·^éͧBÓ ',#—Ö”¿<¶¥¤Ü¡°…Á×aH:0•ÕŸW;BÏú6à•÷ÉWšL†ã+_¡ké|¨Æ{ýÔŽ<øÒ j|òGëŸW`“|m9ã\ž–„_–XŠŒ3ºók— cMË&Ÿ‰äíGø3În‰{8íìbÖÆã6p’€5%€Io—v‚³'_c2$àU¯IÚaà]xàµÙHNŠê±›¬Ë—õšûÃ˶ ÉÏ—^ ÿêI Ò9¼ÿAÑÃ^,²žgLAíQM2˜pŒ£=?×3…}DÏ.Hê½ÎÑè!1´ÆCm©ôTfϾ…Í›…1mA  ÙOJI%« `.dR»µÞkn¸2[xšYišH%Fàþþ0þ?Àÿ@{°9Ôâ`µÃø?(”=Ðendstream endobj 54 0 obj << /Type /Font /Subtype /Type1 /Encoding 337 0 R /FirstChar 2 /LastChar 121 /Widths 345 0 R /BaseFont /OFIHGV+NimbusSanL-Bold /FontDescriptor 52 0 R >> endobj 52 0 obj << /Ascent 722 /CapHeight 722 /Descent -217 /FontName /OFIHGV+NimbusSanL-Bold /ItalicAngle 0 /StemV 141 /XHeight 532 /FontBBox [-173 -307 1003 949] /Flags 4 /CharSet (/fi/parenleft/parenright/period/slash/one/two/three/four/colon/at/A/B/C/D/F/G/H/I/L/M/N/P/S/T/U/a/b/c/d/e/f/g/h/i/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y) /FontFile 53 0 R >> endobj 345 0 obj [611 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 333 333 0 0 0 0 278 278 0 556 556 556 556 0 0 0 0 0 333 0 0 0 0 0 975 722 722 722 722 0 611 778 722 278 0 0 611 833 722 0 667 0 0 667 611 722 0 0 0 0 0 0 0 0 0 0 0 556 611 556 611 556 333 611 611 278 0 556 278 889 611 611 611 611 389 556 333 611 556 778 556 556 ] endobj 55 0 obj << /Type /Pages /Count 6 /Parent 346 0 R /Kids [46 0 R 57 0 R 71 0 R 104 0 R 117 0 R 123 0 R] >> endobj 185 0 obj << /Type /Pages /Count 6 /Parent 346 0 R /Kids [173 0 R 187 0 R 222 0 R 234 0 R 252 0 R 267 0 R] >> endobj 319 0 obj << /Type /Pages /Count 2 /Parent 346 0 R /Kids [303 0 R 321 0 R] >> endobj 346 0 obj << /Type /Pages /Count 14 /Kids [55 0 R 185 0 R 319 0 R] >> endobj 347 0 obj << /Type /Outlines /First 3 0 R /Last 43 0 R /Count 8 >> endobj 43 0 obj << /Title 44 0 R /A 41 0 R /Parent 347 0 R /Prev 35 0 R >> endobj 39 0 obj << /Title 40 0 R /A 37 0 R /Parent 35 0 R >> endobj 35 0 obj << /Title 36 0 R /A 33 0 R /Parent 347 0 R /Prev 31 0 R /Next 43 0 R /First 39 0 R /Last 39 0 R /Count -1 >> endobj 31 0 obj << /Title 32 0 R /A 29 0 R /Parent 347 0 R /Prev 19 0 R /Next 35 0 R >> endobj 27 0 obj << /Title 28 0 R /A 25 0 R /Parent 19 0 R /Prev 23 0 R >> endobj 23 0 obj << /Title 24 0 R /A 21 0 R /Parent 19 0 R /Next 27 0 R >> endobj 19 0 obj << /Title 20 0 R /A 17 0 R /Parent 347 0 R /Prev 15 0 R /Next 31 0 R /First 23 0 R /Last 27 0 R /Count -2 >> endobj 15 0 obj << /Title 16 0 R /A 13 0 R /Parent 347 0 R /Prev 11 0 R /Next 19 0 R >> endobj 11 0 obj << /Title 12 0 R /A 9 0 R /Parent 347 0 R /Prev 7 0 R /Next 15 0 R >> endobj 7 0 obj << /Title 8 0 R /A 5 0 R /Parent 347 0 R /Prev 3 0 R /Next 11 0 R >> endobj 3 0 obj << /Title 4 0 R /A 1 0 R /Parent 347 0 R /Next 7 0 R >> endobj 348 0 obj << /Names [(0) 51 0 R (1.0) 2 0 R (100) 191 0 R (101) 192 0 R (103) 193 0 R (104) 194 0 R (105) 195 0 R (106) 196 0 R (108) 197 0 R (109) 198 0 R (110) 199 0 R (112) 200 0 R (113) 201 0 R (114) 202 0 R (116) 203 0 R (117) 204 0 R (118) 205 0 R (119) 206 0 R (120) 207 0 R (122) 208 0 R (123) 209 0 R (124) 210 0 R (125) 211 0 R (126) 212 0 R (128) 213 0 R (129) 214 0 R (130) 215 0 R (131) 216 0 R (132) 217 0 R (133) 218 0 R (134) 219 0 R (135) 220 0 R (136) 101 0 R (138) 225 0 R (139) 102 0 R (141) 226 0 R (142) 227 0 R (143) 228 0 R (144) 229 0 R (145) 230 0 R (146) 231 0 R (147) 232 0 R (150) 237 0 R (151) 238 0 R (152) 239 0 R (153) 240 0 R (154) 241 0 R (155) 242 0 R (156) 243 0 R (157) 244 0 R (158) 245 0 R (159) 246 0 R (160) 247 0 R (161) 248 0 R (162) 249 0 R (163) 250 0 R (164) 255 0 R (165) 256 0 R (166) 257 0 R (167) 258 0 R (168) 259 0 R (169) 260 0 R (170) 261 0 R (171) 262 0 R (172) 263 0 R (173) 264 0 R (174) 265 0 R (175) 271 0 R (176) 272 0 R (177) 273 0 R (178) 274 0 R (179) 275 0 R (180) 276 0 R (181) 277 0 R (182) 278 0 R (183) 279 0 R (184) 280 0 R (185) 281 0 R (186) 282 0 R (187) 283 0 R (188) 284 0 R (189) 285 0 R (190) 286 0 R (191) 287 0 R (192) 288 0 R (193) 289 0 R (194) 290 0 R (195) 291 0 R (196) 292 0 R (197) 293 0 R (198) 294 0 R (199) 295 0 R (2.0) 6 0 R (200) 296 0 R (201) 297 0 R (202) 298 0 R (203) 299 0 R (204) 300 0 R (205) 301 0 R (206) 307 0 R (207) 270 0 R (208) 308 0 R (209) 309 0 R (210) 310 0 R (211) 311 0 R (212) 312 0 R (213) 313 0 R (214) 314 0 R (215) 315 0 R (216) 316 0 R (217) 317 0 R (218) 318 0 R (219) 324 0 R (220) 306 0 R (221) 325 0 R (222) 326 0 R (223) 327 0 R (224) 328 0 R (225) 329 0 R (226) 330 0 R (227) 331 0 R (228) 332 0 R (229) 333 0 R (230) 334 0 R (231) 335 0 R (232) 336 0 R (26) 95 0 R (28) 107 0 R (29) 108 0 R (3.0) 10 0 R (30) 109 0 R (31) 110 0 R (32) 111 0 R (33) 112 0 R (34) 113 0 R (35) 114 0 R (36) 115 0 R (37) 96 0 R (39) 119 0 R (4.0) 14 0 R (40) 120 0 R (41) 121 0 R (42) 97 0 R (44) 125 0 R (45) 98 0 R (47) 126 0 R (48) 127 0 R (5.0) 18 0 R (5.1.1) 22 0 R (5.2.1) 26 0 R (50) 128 0 R (51) 129 0 R (52) 130 0 R (53) 131 0 R (55) 132 0 R (56) 133 0 R (57) 134 0 R (58) 135 0 R (59) 99 0 R (6.0) 30 0 R (61) 136 0 R (62) 137 0 R (63) 141 0 R (64) 142 0 R (65) 143 0 R (66) 147 0 R (67) 148 0 R (68) 149 0 R (69) 150 0 R (7.0) 34 0 R (7.3.1) 38 0 R (70) 151 0 R (71) 152 0 R (72) 153 0 R (73) 154 0 R (74) 155 0 R (75) 156 0 R (76) 157 0 R (77) 158 0 R (78) 159 0 R (79) 160 0 R (8.0) 42 0 R (80) 161 0 R (81) 162 0 R (82) 166 0 R (83) 170 0 R (84) 175 0 R (85) 171 0 R (87) 176 0 R (88) 177 0 R (89) 178 0 R (90) 179 0 R (91) 180 0 R (92) 181 0 R (93) 182 0 R (94) 183 0 R (95) 184 0 R (96) 100 0 R (98) 189 0 R (99) 190 0 R (COPYING-FDL) 69 0 R (Doc-Start) 50 0 R (page.1) 49 0 R (page.10) 323 0 R (page.2) 59 0 R (page.3) 73 0 R (page.4) 106 0 R (page.5) 224 0 R (page.6) 236 0 R (page.7) 254 0 R (page.8) 269 0 R (page.9) 305 0 R (table.1) 68 0 R] /Limits [(0) (table.1)] >> endobj 349 0 obj << /Kids [348 0 R] >> endobj 350 0 obj << /Dests 349 0 R >> endobj 351 0 obj << /Type /Catalog /Pages 346 0 R /Outlines 347 0 R /Names 350 0 R /PageMode /UseOutlines /OpenAction 45 0 R >> endobj 352 0 obj << /Author()/Title()/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfeTeX-1.21a)/Keywords() /CreationDate (D:20110219225344+01'00') /PTEX.Fullbanner (This is pdfeTeX, Version 3.141592-1.21a-2.2 (Web2C 7.5.4) kpathsea version 3.5.4) >> endobj xref 0 353 0000000000 65535 f 0000000009 00000 n 0000001769 00000 n 0000150166 00000 n 0000000048 00000 n 0000000088 00000 n 0000020359 00000 n 0000150082 00000 n 0000000127 00000 n 0000000162 00000 n 0000021620 00000 n 0000149996 00000 n 0000000201 00000 n 0000000227 00000 n 0000023096 00000 n 0000149908 00000 n 0000000267 00000 n 0000000309 00000 n 0000025263 00000 n 0000149783 00000 n 0000000349 00000 n 0000000391 00000 n 0000025449 00000 n 0000149709 00000 n 0000000433 00000 n 0000000470 00000 n 0000026194 00000 n 0000149635 00000 n 0000000512 00000 n 0000000573 00000 n 0000031954 00000 n 0000149547 00000 n 0000000613 00000 n 0000000657 00000 n 0000035288 00000 n 0000149422 00000 n 0000000697 00000 n 0000000762 00000 n 0000035475 00000 n 0000149361 00000 n 0000000804 00000 n 0000000852 00000 n 0000038594 00000 n 0000149286 00000 n 0000000892 00000 n 0000000953 00000 n 0000001471 00000 n 0000001830 00000 n 0000001003 00000 n 0000001589 00000 n 0000001649 00000 n 0000001709 00000 n 0000148112 00000 n 0000137228 00000 n 0000147944 00000 n 0000148820 00000 n 0000003276 00000 n 0000002698 00000 n 0000001900 00000 n 0000003156 00000 n 0000136291 00000 n 0000117086 00000 n 0000136120 00000 n 0000002842 00000 n 0000116506 00000 n 0000103922 00000 n 0000116330 00000 n 0000002999 00000 n 0000003216 00000 n 0000038533 00000 n 0000020420 00000 n 0000017375 00000 n 0000003370 00000 n 0000020299 00000 n 0000017631 00000 n 0000103259 00000 n 0000090610 00000 n 0000103088 00000 n 0000017778 00000 n 0000017926 00000 n 0000018073 00000 n 0000018220 00000 n 0000018367 00000 n 0000018514 00000 n 0000018661 00000 n 0000018808 00000 n 0000018955 00000 n 0000019102 00000 n 0000019249 00000 n 0000019396 00000 n 0000019544 00000 n 0000019692 00000 n 0000019840 00000 n 0000019988 00000 n 0000020143 00000 n 0000021559 00000 n 0000023035 00000 n 0000025202 00000 n 0000025388 00000 n 0000026133 00000 n 0000031892 00000 n 0000035226 00000 n 0000035413 00000 n 0000022248 00000 n 0000021376 00000 n 0000020526 00000 n 0000021497 00000 n 0000021683 00000 n 0000021745 00000 n 0000021807 00000 n 0000021871 00000 n 0000021933 00000 n 0000021995 00000 n 0000022059 00000 n 0000022123 00000 n 0000022185 00000 n 0000023347 00000 n 0000022914 00000 n 0000022343 00000 n 0000023159 00000 n 0000023221 00000 n 0000023283 00000 n 0000027752 00000 n 0000025081 00000 n 0000023442 00000 n 0000025326 00000 n 0000025510 00000 n 0000025572 00000 n 0000025633 00000 n 0000025695 00000 n 0000025757 00000 n 0000025820 00000 n 0000025884 00000 n 0000025945 00000 n 0000026007 00000 n 0000026070 00000 n 0000026257 00000 n 0000026319 00000 n 0000090067 00000 n 0000079074 00000 n 0000089896 00000 n 0000026381 00000 n 0000026443 00000 n 0000026505 00000 n 0000078571 00000 n 0000068218 00000 n 0000078400 00000 n 0000026568 00000 n 0000026630 00000 n 0000026694 00000 n 0000026756 00000 n 0000026818 00000 n 0000026881 00000 n 0000026942 00000 n 0000027003 00000 n 0000027066 00000 n 0000027128 00000 n 0000027191 00000 n 0000027253 00000 n 0000027315 00000 n 0000027377 00000 n 0000027440 00000 n 0000027502 00000 n 0000067609 00000 n 0000061126 00000 n 0000067439 00000 n 0000027564 00000 n 0000060609 00000 n 0000056085 00000 n 0000060435 00000 n 0000027628 00000 n 0000027691 00000 n 0000029661 00000 n 0000028918 00000 n 0000027911 00000 n 0000029040 00000 n 0000029102 00000 n 0000029165 00000 n 0000029227 00000 n 0000029289 00000 n 0000029351 00000 n 0000029414 00000 n 0000029476 00000 n 0000029536 00000 n 0000029597 00000 n 0000148933 00000 n 0000034023 00000 n 0000031770 00000 n 0000029795 00000 n 0000032017 00000 n 0000032079 00000 n 0000032143 00000 n 0000032207 00000 n 0000032269 00000 n 0000032331 00000 n 0000032393 00000 n 0000032456 00000 n 0000032520 00000 n 0000032582 00000 n 0000032644 00000 n 0000032707 00000 n 0000032769 00000 n 0000032831 00000 n 0000032894 00000 n 0000032956 00000 n 0000033018 00000 n 0000033081 00000 n 0000033145 00000 n 0000033209 00000 n 0000033271 00000 n 0000033333 00000 n 0000033396 00000 n 0000033458 00000 n 0000033520 00000 n 0000033582 00000 n 0000033644 00000 n 0000033707 00000 n 0000033771 00000 n 0000033834 00000 n 0000033898 00000 n 0000033960 00000 n 0000035975 00000 n 0000035042 00000 n 0000034143 00000 n 0000035164 00000 n 0000035351 00000 n 0000035538 00000 n 0000035600 00000 n 0000035662 00000 n 0000035725 00000 n 0000035787 00000 n 0000035850 00000 n 0000035912 00000 n 0000039525 00000 n 0000038349 00000 n 0000036070 00000 n 0000038471 00000 n 0000038657 00000 n 0000038719 00000 n 0000038781 00000 n 0000038843 00000 n 0000038905 00000 n 0000038967 00000 n 0000039029 00000 n 0000039091 00000 n 0000039153 00000 n 0000039215 00000 n 0000039277 00000 n 0000039339 00000 n 0000039401 00000 n 0000039463 00000 n 0000042886 00000 n 0000042023 00000 n 0000039620 00000 n 0000042145 00000 n 0000042207 00000 n 0000042269 00000 n 0000042331 00000 n 0000042393 00000 n 0000042454 00000 n 0000042515 00000 n 0000042576 00000 n 0000042638 00000 n 0000042700 00000 n 0000042762 00000 n 0000042824 00000 n 0000047670 00000 n 0000045491 00000 n 0000042969 00000 n 0000045613 00000 n 0000045675 00000 n 0000045737 00000 n 0000045799 00000 n 0000045861 00000 n 0000045923 00000 n 0000045986 00000 n 0000046048 00000 n 0000046111 00000 n 0000046173 00000 n 0000046236 00000 n 0000046298 00000 n 0000046361 00000 n 0000046422 00000 n 0000046485 00000 n 0000046547 00000 n 0000046610 00000 n 0000046672 00000 n 0000046735 00000 n 0000046797 00000 n 0000046859 00000 n 0000046921 00000 n 0000046984 00000 n 0000047046 00000 n 0000047109 00000 n 0000047171 00000 n 0000047234 00000 n 0000047296 00000 n 0000047359 00000 n 0000047421 00000 n 0000047484 00000 n 0000047546 00000 n 0000047608 00000 n 0000051129 00000 n 0000050140 00000 n 0000047753 00000 n 0000050262 00000 n 0000050324 00000 n 0000050386 00000 n 0000050448 00000 n 0000050510 00000 n 0000050572 00000 n 0000050633 00000 n 0000050695 00000 n 0000050757 00000 n 0000050819 00000 n 0000050881 00000 n 0000050943 00000 n 0000051005 00000 n 0000051067 00000 n 0000149050 00000 n 0000054114 00000 n 0000053122 00000 n 0000051212 00000 n 0000053244 00000 n 0000053306 00000 n 0000053368 00000 n 0000053430 00000 n 0000053492 00000 n 0000053554 00000 n 0000053616 00000 n 0000053680 00000 n 0000053742 00000 n 0000053804 00000 n 0000053866 00000 n 0000053928 00000 n 0000053990 00000 n 0000054052 00000 n 0000054197 00000 n 0000060844 00000 n 0000067896 00000 n 0000078844 00000 n 0000090370 00000 n 0000103580 00000 n 0000116836 00000 n 0000136760 00000 n 0000148460 00000 n 0000149135 00000 n 0000149212 00000 n 0000150237 00000 n 0000153238 00000 n 0000153277 00000 n 0000153315 00000 n 0000153444 00000 n trailer << /Size 353 /Root 351 0 R /Info 352 0 R /ID [ ] >> startxref 153707 %%EOF libdbi-drivers-0.9.0/drivers/oracle/dbd_oracle/000755 001750 001750 00000000000 12117473272 022276 5ustar00markusmarkus000000 000000 libdbi-drivers-0.9.0/drivers/oracle/README000644 001750 001750 00000000777 10302425671 021105 0ustar00markusmarkus000000 000000 ORACLE DRIVER: ------------------ This driver allows libdbi-enabled applications to use Oracle as a database backend. The driver is build using the Oracle Call Interface. See the included driver documentation for installation instructions, usage, and information about driver-specific peculiarities. CONTACT INFO: ------------- libdbi-drivers-devel@lists.sourceforge.net http://libdbi-drivers.sourceforge.net Ashish Ranjan # $Id: README,v 1.2 2005/08/22 19:47:05 mhoenicka Exp $ libdbi-drivers-0.9.0/drivers/oracle/Makefile.am000644 001750 001750 00000003062 11447472773 022267 0ustar00markusmarkus000000 000000 ## Process this with automake to create Makefile.in AUTOMAKE_OPTIONS = foreign docdir = $(datadir)/doc/$(PACKAGE)-$(VERSION) if HAVE_ORACLE if BUILDDOCS htdocdir = $(docdir)/dbd_oracle doc_DATA = dbd_oracle.pdf htdoc_DATA = dbd_oracle/* else htdocdir = doc_DATA = htdoc_DATA = endif oracle_ltlibs = libdbdoracle.la oracle_ldflags = -module -avoid-version oracle_sources = dbd_oracle.c else htdocdir = doc_DATA = htdoc_DATA = oracle_ltlibs = oracle_ldflags = oracle_sources = endif INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/include @DBI_INCLUDE@ @ORACLE_INCLUDE@ libdir = $(driverdir) lib_LTLIBRARIES = $(oracle_ltlibs) libdbdoracle_la_LDFLAGS = $(oracle_ldflags) @ORACLE_LDFLAGS@ @ORACLE_LIBS@ @LIBADD_LIBDBI@ libdbdoracle_la_SOURCES = $(oracle_sources) libdbdoracle_la_DEPENDENCIES = dbd_oracle.h EXTRA_DIST = dbd_oracle.c dbd_oracle.h oracle_charsets.h AUTHORS TODO README dbd_oracle.sgml dbd_oracle.pdf dbd_oracle/* # jadetex spews out tons of useless crap. shut it up: dbd_oracle.pdf: dbd_oracle.sgml @echo "Converting dbd_oracle.sgml to PDF..."; openjade -t tex -V tex-backend -d $(top_srcdir)/doc/include/doc-print.dsl dbd_oracle.sgml # run jadetex three times to get the references right pdftex "&pdfjadetex" dbd_oracle.tex pdftex "&pdfjadetex" dbd_oracle.tex pdftex "&pdfjadetex" dbd_oracle.tex dbd_oracle/*: dbd_oracle.sgml @echo "Converting dbd_oracle.sgml to HTML..."; mkdir -p dbd_oracle && cd dbd_oracle && openjade -t sgml -d $(top_srcdir)/../doc/include/doc-html.dsl ../dbd_oracle.sgml maintainer-clean: clean rm -f dbd_oracle.pdf dbd_oracle/* libdbi-drivers-0.9.0/drivers/oracle/Makefile.in000644 001750 001750 00000055323 12117467053 022275 0ustar00markusmarkus000000 000000 # Makefile.in generated by automake 1.12.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2012 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = drivers/oracle DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(top_srcdir)/depcomp AUTHORS TODO ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(docdir)" \ "$(DESTDIR)$(htdocdir)" LTLIBRARIES = $(lib_LTLIBRARIES) libdbdoracle_la_LIBADD = am__libdbdoracle_la_SOURCES_DIST = dbd_oracle.c @HAVE_ORACLE_TRUE@am__objects_1 = dbd_oracle.lo am_libdbdoracle_la_OBJECTS = $(am__objects_1) libdbdoracle_la_OBJECTS = $(am_libdbdoracle_la_OBJECTS) libdbdoracle_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(libdbdoracle_la_LDFLAGS) $(LDFLAGS) -o $@ @HAVE_ORACLE_TRUE@am_libdbdoracle_la_rpath = -rpath $(libdir) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(libdbdoracle_la_SOURCES) DIST_SOURCES = $(am__libdbdoracle_la_SOURCES_DIST) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac DATA = $(doc_DATA) $(htdoc_DATA) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DB2_INCLUDE = @DB2_INCLUDE@ DB2_LDFLAGS = @DB2_LDFLAGS@ DB2_LIBS = @DB2_LIBS@ DB2_TEST = @DB2_TEST@ DBI_INCLUDE = @DBI_INCLUDE@ DEBUG = @DEBUG@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FIREBIRD_INCLUDE = @FIREBIRD_INCLUDE@ FIREBIRD_ISQL = @FIREBIRD_ISQL@ FIREBIRD_ISQL_FLAG = @FIREBIRD_ISQL_FLAG@ FIREBIRD_LDFLAGS = @FIREBIRD_LDFLAGS@ FIREBIRD_LIBS = @FIREBIRD_LIBS@ FIREBIRD_TEST = @FIREBIRD_TEST@ FREETDS_INCLUDE = @FREETDS_INCLUDE@ FREETDS_LDFLAGS = @FREETDS_LDFLAGS@ FREETDS_LIBS = @FREETDS_LIBS@ FREETDS_TEST = @FREETDS_TEST@ GREP = @GREP@ INGRES_INCLUDE = @INGRES_INCLUDE@ INGRES_LDFLAGS = @INGRES_LDFLAGS@ INGRES_LIBS = @INGRES_LIBS@ INGRES_TEST = @INGRES_TEST@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBADD_LIBDBI = @LIBADD_LIBDBI@ LIBDBI_LIBDIR = @LIBDBI_LIBDIR@ LIBDBI_TEST = @LIBDBI_TEST@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSQL_INCLUDE = @MSQL_INCLUDE@ MSQL_LDFLAGS = @MSQL_LDFLAGS@ MSQL_LIBS = @MSQL_LIBS@ MSQL_TEST = @MSQL_TEST@ MYSQL_CONFIG = @MYSQL_CONFIG@ MYSQL_INCLUDE = @MYSQL_INCLUDE@ MYSQL_LDFLAGS = @MYSQL_LDFLAGS@ MYSQL_LIBS = @MYSQL_LIBS@ MYSQL_TEST = @MYSQL_TEST@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ ORACLE_INCLUDE = @ORACLE_INCLUDE@ ORACLE_LDFLAGS = @ORACLE_LDFLAGS@ ORACLE_LIBS = @ORACLE_LIBS@ ORACLE_TEST = @ORACLE_TEST@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PGSQL_INCLUDE = @PGSQL_INCLUDE@ PGSQL_LDFLAGS = @PGSQL_LDFLAGS@ PGSQL_LIBS = @PGSQL_LIBS@ PGSQL_TEST = @PGSQL_TEST@ PG_CONFIG = @PG_CONFIG@ PROFILE = @PROFILE@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SQLITE3_INCLUDE = @SQLITE3_INCLUDE@ SQLITE3_LDFLAGS = @SQLITE3_LDFLAGS@ SQLITE3_LIBS = @SQLITE3_LIBS@ SQLITE3_TEST = @SQLITE3_TEST@ SQLITE_INCLUDE = @SQLITE_INCLUDE@ SQLITE_LDFLAGS = @SQLITE_LDFLAGS@ SQLITE_LIBS = @SQLITE_LIBS@ SQLITE_TEST = @SQLITE_TEST@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ dbi_dbdir = @dbi_dbdir@ docdir = $(datadir)/doc/$(PACKAGE)-$(VERSION) docs_subdirs = @docs_subdirs@ driverdir = @driverdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = $(driverdir) libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = foreign @BUILDDOCS_FALSE@@HAVE_ORACLE_TRUE@htdocdir = @BUILDDOCS_TRUE@@HAVE_ORACLE_TRUE@htdocdir = $(docdir)/dbd_oracle @HAVE_ORACLE_FALSE@htdocdir = @BUILDDOCS_FALSE@@HAVE_ORACLE_TRUE@doc_DATA = @BUILDDOCS_TRUE@@HAVE_ORACLE_TRUE@doc_DATA = dbd_oracle.pdf @HAVE_ORACLE_FALSE@doc_DATA = @BUILDDOCS_FALSE@@HAVE_ORACLE_TRUE@htdoc_DATA = @BUILDDOCS_TRUE@@HAVE_ORACLE_TRUE@htdoc_DATA = dbd_oracle/* @HAVE_ORACLE_FALSE@htdoc_DATA = @HAVE_ORACLE_FALSE@oracle_ltlibs = @HAVE_ORACLE_TRUE@oracle_ltlibs = libdbdoracle.la @HAVE_ORACLE_FALSE@oracle_ldflags = @HAVE_ORACLE_TRUE@oracle_ldflags = -module -avoid-version @HAVE_ORACLE_FALSE@oracle_sources = @HAVE_ORACLE_TRUE@oracle_sources = dbd_oracle.c INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/include @DBI_INCLUDE@ @ORACLE_INCLUDE@ lib_LTLIBRARIES = $(oracle_ltlibs) libdbdoracle_la_LDFLAGS = $(oracle_ldflags) @ORACLE_LDFLAGS@ @ORACLE_LIBS@ @LIBADD_LIBDBI@ libdbdoracle_la_SOURCES = $(oracle_sources) libdbdoracle_la_DEPENDENCIES = dbd_oracle.h EXTRA_DIST = dbd_oracle.c dbd_oracle.h oracle_charsets.h AUTHORS TODO README dbd_oracle.sgml dbd_oracle.pdf dbd_oracle/* all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign drivers/oracle/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign drivers/oracle/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ } uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libdbdoracle.la: $(libdbdoracle_la_OBJECTS) $(libdbdoracle_la_DEPENDENCIES) $(EXTRA_libdbdoracle_la_DEPENDENCIES) $(libdbdoracle_la_LINK) $(am_libdbdoracle_la_rpath) $(libdbdoracle_la_OBJECTS) $(libdbdoracle_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dbd_oracle.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-docDATA: $(doc_DATA) @$(NORMAL_INSTALL) @list='$(doc_DATA)'; test -n "$(docdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(docdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(docdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(docdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(docdir)" || exit $$?; \ done uninstall-docDATA: @$(NORMAL_UNINSTALL) @list='$(doc_DATA)'; test -n "$(docdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(docdir)'; $(am__uninstall_files_from_dir) install-htdocDATA: $(htdoc_DATA) @$(NORMAL_INSTALL) @list='$(htdoc_DATA)'; test -n "$(htdocdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(htdocdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(htdocdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(htdocdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(htdocdir)" || exit $$?; \ done uninstall-htdocDATA: @$(NORMAL_UNINSTALL) @list='$(htdoc_DATA)'; test -n "$(htdocdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(htdocdir)'; $(am__uninstall_files_from_dir) ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(DATA) installdirs: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(docdir)" "$(DESTDIR)$(htdocdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-docDATA install-htdocDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-libLTLIBRARIES install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-docDATA uninstall-htdocDATA \ uninstall-libLTLIBRARIES .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libLTLIBRARIES clean-libtool cscopelist ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am \ install-docDATA install-dvi install-dvi-am install-exec \ install-exec-am install-htdocDATA install-html install-html-am \ install-info install-info-am install-libLTLIBRARIES \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \ uninstall-am uninstall-docDATA uninstall-htdocDATA \ uninstall-libLTLIBRARIES # jadetex spews out tons of useless crap. shut it up: dbd_oracle.pdf: dbd_oracle.sgml @echo "Converting dbd_oracle.sgml to PDF..."; openjade -t tex -V tex-backend -d $(top_srcdir)/doc/include/doc-print.dsl dbd_oracle.sgml # run jadetex three times to get the references right pdftex "&pdfjadetex" dbd_oracle.tex pdftex "&pdfjadetex" dbd_oracle.tex pdftex "&pdfjadetex" dbd_oracle.tex dbd_oracle/*: dbd_oracle.sgml @echo "Converting dbd_oracle.sgml to HTML..."; mkdir -p dbd_oracle && cd dbd_oracle && openjade -t sgml -d $(top_srcdir)/../doc/include/doc-html.dsl ../dbd_oracle.sgml maintainer-clean: clean rm -f dbd_oracle.pdf dbd_oracle/* # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: libdbi-drivers-0.9.0/drivers/oracle/AUTHORS000644 001750 001750 00000000516 10763200403 021257 0ustar00markusmarkus000000 000000 The following people have been involved in the Oracle driver development: Main developers: * Christian M. Stamgren * Ashish Ranjan These people have also contributed to this driver: * Stefano Rosso - date type * Balazs Scheidler - bugfixeslibdbi-drivers-0.9.0/drivers/oracle/TODO000644 001750 001750 00000001604 10302425671 020703 0ustar00markusmarkus000000 000000 # $Id: TODO,v 1.5 2005/08/22 19:47:05 mhoenicka Exp $ - write documentation. - Update the test program to work with oracle - Mingw+MSys portability - Oracle 8i portability - Investigate further about Integers/Float types. Oracle stores all numeric types as SQLT_NUM (number) internaly. The only diffence with numeric columns is the set of contraints that teels if there need to be a float or an interger or whatever. This makes it very hard to map numbers against libdbi's type system becouse everything that you get from Oracle is an SQLT_NUM type internaly. SQLT_NUM has to be atleast an unsigned char[21] as external datatype. We need to fetch OCI_ATTR_SCALE using OCIAttrGet() to find out if the column is a float column. - Continue the work with Charsets mappings (Oracle to IANA). - Implement other oracle types (Dates,refs ..). - define driver capabilities. libdbi-drivers-0.9.0/drivers/oracle/dbd_oracle.c000755 001750 001750 00000062104 12073360264 022445 0ustar00markusmarkus000000 000000 /* * libdbi - database independent abstraction layer for C. * Copyright (C) 2001-2004, David Parker and Mark Tobenkin. * http://libdbi.sourceforge.net * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * dbd_oracle.c: Oracle database support * Copyright (C) 2003-2004, Christian M. Stamgren * http://libdbi-drivers.sourceforge.net * */ #ifdef HAVE_CONFIG_H #include #endif #define _GNU_SOURCE /* we need asprintf */ #include #include #include #include #include #include #include #include #include "dbd_oracle.h" #include "oracle_charsets.h" /* declarations of optional external functions */ #ifndef HAVE_ASPRINTF int asprintf(char **result, const char *format, ...); #endif static const dbi_info_t driver_info = { "Oracle", "Oracle database support (using Oracle Call Interface)", "Ashish Ranjan ", "http://libdbi-drivers.sourceforge.net", "dbd_Oracle v" VERSION, __DATE__ }; static const char *custom_functions[] = {NULL}; static const char *reserved_words[] = ORACLE_RESERVED_WORDS; void _translate_oracle_type(int fieldtype, ub1 scale, unsigned short *type, unsigned int *attribs); void _get_field_info(dbi_result_t *result); void _get_row_data(dbi_result_t *result, dbi_row_t *row, unsigned long long rowidx); unsigned long long _oracle_query_to_longlong(dbi_conn_t *conn, const char *sql_cmd); void _checkerr(OCIError * errhp, sword status); static size_t oracle_escape_string(char *to, const char *from, size_t length); time_t _oradate_to_time_t (char *obuff); void dbd_register_driver(const dbi_info_t **_driver_info, const char ***_custom_functions, const char ***_reserved_words) { *_driver_info = &driver_info; *_custom_functions = custom_functions; *_reserved_words = reserved_words; } int dbd_initialize(dbi_driver_t *driver) { /* this indicates the driver can be safely unloaded when libdbi is shut down. Change the value to '0' (zero) if the driver, or a library it is linked against, installs exit handlers via atexit() */ _dbd_register_driver_cap(driver, "safe_dlclose", 1); /* this indicates the database engine supports transactions */ _dbd_register_driver_cap(driver, "transaction_support", 1); /* this indicates the database engine supports savepoints */ _dbd_register_driver_cap(driver, "savepoint_support", 1); return OCIInitialize((ub4) OCI_DEFAULT, (dvoid *)0, (dvoid * (*)(dvoid *, size_t)) 0, (dvoid * (*)(dvoid *, dvoid *, size_t))0, (void (*)(dvoid *, dvoid *)) 0 ); } int dbd_finalize(dbi_driver_t *driver) { /* perform any database-specific client library shutdown. * this is called right before dlclose()ing the driver. * return -1 on error, 0 on success. */ return 0; } int dbd_connect(dbi_conn_t *conn) { Oraconn *Oconn = malloc( sizeof( Oraconn )); const char *username = dbi_conn_get_option(conn, "username"); const char *password = dbi_conn_get_option(conn, "password"); const char *sid = dbi_conn_get_option(conn, "dbname"); sword status; if(! sid ) sid = getenv("ORACLE_SID"); /* OCI Environment Allocation */ if(OCIEnvCreate ((OCIEnv **) &(Oconn->env), OCI_DEFAULT, (dvoid *)0, 0, 0, 0, (size_t)0, (dvoid **)0)) { _dbd_internal_error_handler(conn, "Connect::Unable to initialize environment", 0); return -2; } /* OCI ERROR HANDLE */ if( (OCIHandleAlloc( (dvoid *) Oconn->env, (dvoid **) &(Oconn->err), OCI_HTYPE_ERROR, (size_t) 0, (dvoid **) 0))) { _dbd_internal_error_handler(conn, "Connect::Unable to allocate ERROR handlers.", 0); return -2; } /* OCI SERVICE HANDLE */ if( (OCIHandleAlloc( (dvoid *) Oconn->env, (dvoid **) &(Oconn->svc), OCI_HTYPE_SVCCTX, (size_t) 0, (dvoid **) 0))) { _dbd_internal_error_handler(conn, "Connect::Unable to allocate SERVICE handlers.", 0); return -2; } if( (status = OCILogon(Oconn->env, Oconn->err, &(Oconn->svc), (CONST OraText*) username, strlen(username),(CONST OraText*) password, strlen(password), sid, strlen(sid)))) { _checkerr(Oconn->err, status); _dbd_internal_error_handler(conn, "Connect::Unable to login to the database.", 0); return -2; } conn->connection = (void *)Oconn; if (sid) conn->current_db = strdup(sid); return 0; } int dbd_disconnect(dbi_conn_t *conn) { Oraconn *Oconn = conn->connection; if (Oconn) { OCILogoff(Oconn->svc, Oconn->err); OCIHandleFree((dvoid *) Oconn->svc, OCI_HTYPE_SVCCTX); OCIHandleFree((dvoid *) Oconn->err, OCI_HTYPE_ERROR); free(conn->connection); } conn->connection = NULL; return 0; } int dbd_fetch_row(dbi_result_t *result, unsigned long long rowidx) { dbi_row_t *row = NULL; if (result->result_state == NOTHING_RETURNED) return -1; if (result->result_state == ROWS_RETURNED) { row = _dbd_row_allocate(result->numfields); _get_row_data(result, row, rowidx); _dbd_row_finalize(result, row, rowidx); } return 1; } int dbd_free_query(dbi_result_t *result) { if (result->result_handle) OCIHandleFree((dvoid *)result->result_handle, OCI_HTYPE_STMT); result->result_handle = NULL; return 0; } int dbd_goto_row(dbi_result_t *result, unsigned long long rowidx, unsigned long long currowidx) { /* no-op */ return 1; } int dbd_get_socket(dbi_conn_t *conn) { return 0; /* Oracle can't do that.. */ } /* * Use this function with care... It might bite you. * There can be N-type columns in queries that have a diffrent Charset, * a session might be altered to use another charset as output or * there might be values converted using the Oracle convert() function in the query. */ const char *dbd_get_encoding(dbi_conn_t *conn){ OraText buf[OCI_NLS_MAXBUFSZ]; sword ret; int i = 0; Oraconn *Oconn = conn->connection; if( (ret = OCINlsGetInfo(Oconn->env, Oconn->err, buf, OCI_NLS_MAXBUFSZ, OCI_NLS_CHARACTER_SET)) != OCI_SUCCESS) { _checkerr(Oconn->err, ret); } if (!buf) return NULL; else { while (*oracle_encoding_hash[i]) { if (!strcmp(oracle_encoding_hash[i], buf)) { return oracle_encoding_hash[i+1]; } i += 2; } } return "UTF-16"; } char *dbd_get_engine_version(dbi_conn_t *conn, char *versionstring) { /* todo: query db engine for version "select version from v$instance" should do the trick */ *versionstring = '\0'; return versionstring; } dbi_result_t *dbd_list_dbs(dbi_conn_t *conn, const char *pattern) { return NULL; /* Oracle can't do that */ } dbi_result_t *dbd_list_tables(dbi_conn_t *conn, const char *db, const char *pattern) { dbi_result_t *res; char *sql_cmd; /* * We just ignore the db param, * Oracle can't read from diffrent databases at runtime. */ if (pattern == NULL) { asprintf(&sql_cmd, "SELECT table_name FROM user_tables"); res = dbd_query(conn, sql_cmd); free(sql_cmd); return res; } else { asprintf(&sql_cmd, "SELECT table_name FROM user_tables WHERE table_name LIKE '%s'",pattern); res = dbd_query(conn, sql_cmd); free(sql_cmd); return res; } } size_t dbd_quote_string(dbi_driver_t *driver, const char *orig, char *dest) { size_t len; const char *escaped = "\'\"\\"; strcpy(dest, "'"); len = oracle_escape_string(dest+1, orig, strlen(orig)); strcat(dest, "'"); return len+2; } dbi_result_t *dbd_query_null(dbi_conn_t *conn, const char unsigned *statement, size_t st_length) { OCIStmt *stmt; OCIDefine *defnp; ub2 stmttype = 0; ub4 numfields = 0; dbi_result_t *result; ub4 numrows = 0, affectedrows = 0; Oraconn *Oconn = conn->connection; sword status; ub4 cache_rows = 0; char *notused; unsigned int idx = 0; unsigned short fieldtype; unsigned int fieldattribs; OCIParam *param; ub4 otype; text *col_name; sb1 scale; ub4 col_name_len; char* col_name_dbi; OCIHandleAlloc( (dvoid *) Oconn->env, (dvoid **) &stmt, OCI_HTYPE_STMT, (size_t) 0, (dvoid **) 0); if( OCIStmtPrepare(stmt, Oconn->err, (char *) statement, (ub4) st_length, (ub4) OCI_NTV_SYNTAX, (ub4) OCI_DEFAULT)) { OCIHandleFree(stmt, OCI_HTYPE_STMT); return NULL; } OCIAttrGet(stmt, OCI_HTYPE_STMT, (dvoid *) &stmttype, (ub4 *) 0, (ub4) OCI_ATTR_STMT_TYPE, Oconn->err); status = OCIStmtExecute(Oconn->svc, stmt, Oconn->err, (ub4) (stmttype == OCI_STMT_SELECT ? 0 : 1), (ub4) 0, (CONST OCISnapshot *) NULL, (OCISnapshot *) NULL, stmttype == OCI_STMT_SELECT ? MY_OCI_STMT_SCROLLABLE_READONLY : OCI_COMMIT_ON_SUCCESS); if( status != OCI_SUCCESS) { OCIHandleFree(stmt, OCI_HTYPE_STMT); return NULL; } if( stmttype == OCI_STMT_SELECT) { OCIAttrGet (stmt, OCI_HTYPE_STMT, (dvoid *) &numfields, (ub4 *) 0, (ub4) OCI_ATTR_PARAM_COUNT, Oconn->err); /* * To find out how many rows there is in a result set we need to call * OCIStmtFetch2() with OCI_FETCH_LAST and then use OCIAttrGet() * with MY_OCI_ATTR_CURRENT_POSITION, This is really not that great * because it might be very very very slow..... But It's the only way I know. * It would be really great if libdbi didn't have to know how large a result set is * at this early point. */ /* dummy define .. * We need to have atleast one define before fetching. Duh!!! */ OCIDefineByPos(stmt, &defnp, Oconn->err, 1, (dvoid *) ¬used, (sword) sizeof(sword), SQLT_CHR, (dvoid *) 0, (ub2 *)0, (ub2 *)0, OCI_DEFAULT); status = OCIStmtFetch2(stmt, Oconn->err, (ub4)1, OCI_FETCH_LAST, 0, OCI_DEFAULT); status = OCIAttrGet (stmt, OCI_HTYPE_STMT, (dvoid *) &numrows, (ub4 *) 0, (ub4) MY_OCI_ATTR_CURRENT_POSITION, Oconn->err); _checkerr(Oconn->err, status); /* cache should be about 20% of all rows. */ if(dbi_conn_get_option_numeric(conn, "oracle_prefetch_rows")) { cache_rows = (ub4)numrows/5; OCIAttrSet(stmt, OCI_HTYPE_STMT, &cache_rows, sizeof(cache_rows), OCI_ATTR_PREFETCH_ROWS, Oconn->err); } /* howto handle affectedrows? */ } result = _dbd_result_create(conn, (void *)stmt, numrows , affectedrows); _dbd_result_set_numfields(result, numfields); while (idx < result->numfields) { scale = 0; OCIParamGet(stmt, OCI_HTYPE_STMT, Oconn->err, (dvoid **)¶m, (ub4) idx+1); OCIAttrGet(param, (ub4) OCI_DTYPE_PARAM, &otype,(ub4 *) 0, (ub4) OCI_ATTR_DATA_TYPE, (OCIError *) Oconn->err ); OCIAttrGet((dvoid*) param, (ub4) OCI_DTYPE_PARAM, (dvoid**) &col_name,(ub4 *) &col_name_len, (ub4) OCI_ATTR_NAME, (OCIError *) Oconn->err ); if(otype == 2) { /* we got SQLT_NUM */ OCIAttrGet((dvoid*) param, (ub4) OCI_DTYPE_PARAM, (dvoid**) &scale,(ub4 *) 0, (ub4) OCI_ATTR_SCALE, (OCIError *) Oconn->err ); } /*bug fixing , it is necessary to copy it to earlier as in many cases it is not giving a properly terminated string, which gives malformed col name */ col_name_dbi = calloc(col_name_len + 1,sizeof(char) ); strncpy( col_name_dbi, (char *) col_name, col_name_len); _translate_oracle_type(otype, scale, &fieldtype, &fieldattribs); _dbd_result_add_field(result, idx, col_name_dbi, fieldtype, fieldattribs); free(col_name_dbi); idx++; } //end-code block1 return result; } dbi_result_t *dbd_query(dbi_conn_t *conn, const char *statement) { return dbd_query_null(conn, statement, strlen(statement)); } int dbd_transaction_begin(dbi_conn_t *conn) { if (dbd_query(conn, "SET TRANSACTION") == NULL) { return 1; } else { return 0; } } int dbd_transaction_commit(dbi_conn_t *conn) { if (dbd_query(conn, "COMMIT") == NULL) { return 1; } else { return 0; } } int dbd_transaction_rollback(dbi_conn_t *conn) { if (dbd_query(conn, "ROLLBACK") == NULL) { return 1; } else { return 0; } } int dbd_savepoint(dbi_conn_t *conn, const char *savepoint) { char* query; if (!savepoint) { return 1; } asprintf(&query, "SAVEPOINT %s", savepoint); if (dbd_query(conn, query) == NULL) { free(query); return 1; } else { free(query); return 0; } } int dbd_rollback_to_savepoint(dbi_conn_t *conn, const char *savepoint) { char* query; if (!savepoint) { return 1; } asprintf(&query, "ROLLBACK TO SAVEPOINT %s", savepoint); if (dbd_query(conn, query) == NULL) { free(query); return 1; } else { free(query); return 0; } } int dbd_release_savepoint(dbi_conn_t *conn, const char *savepoint) { /* apparently not used by Oracle */ return 0; } const char *dbd_select_db(dbi_conn_t *conn, const char *db) { /* todo: PostgreSQL can't do it either, but there's a workaround */ return NULL; /* Oracle can't do that .... */ } int dbd_geterror(dbi_conn_t *conn, int *err_no, char **errstr) { char errbuf[1024]; int errcode = 0; Oraconn *Oconn = conn->connection; *err_no = 0; if (!conn->connection) { *errstr = strdup("Unable to connect to database."); return 2; } else { OCIErrorGet((dvoid *)Oconn->err, (ub4) 1, (text *) NULL, &errcode, errbuf, (ub4) sizeof(errbuf), OCI_HTYPE_ERROR); *errstr = strdup(errbuf); *err_no = errcode; } return 3; } unsigned long long dbd_get_seq_last(dbi_conn_t *conn, const char *sequence) { unsigned long long retval = 0; char *sql_cmd = NULL; if( ! sequence) return 0; asprintf(&sql_cmd, "SELECT %s.currval FROM dual", sequence); retval = _oracle_query_to_longlong(conn, sql_cmd); if(sql_cmd) free(sql_cmd); return retval; } unsigned long long dbd_get_seq_next(dbi_conn_t *conn, const char *sequence) { unsigned long long retval = 0; char *sql_cmd = NULL; if( ! sequence) return 0; asprintf(&sql_cmd, "SELECT %s.nextval FROM dual", sequence); retval = _oracle_query_to_longlong(conn, sql_cmd); if(sql_cmd) free(sql_cmd); return retval; } int dbd_ping(dbi_conn_t *conn) { unsigned long long retval = 0; char *sql_cmd = NULL; /* Oraconn *Oconn = conn->connection; */ asprintf(&sql_cmd, "SELECT 1 from dual"); retval = _oracle_query_to_longlong(conn, sql_cmd); if(sql_cmd) free(sql_cmd); if(!retval) { /* We need to reconnect! */ dbd_disconnect(conn); retval = dbd_connect(conn); return (retval ? 0 : retval); } return retval; } /* CORE ORACLE DATA FETCHING STUFF */ void _translate_oracle_type(int fieldtype, ub1 scale, unsigned short *type, unsigned int *attribs) { unsigned int _type = 0; unsigned int _attribs = 0; switch (fieldtype) { case SQLT_INT: case SQLT_LNG: _type = DBI_TYPE_INTEGER; _attribs |= DBI_INTEGER_SIZE8; break; case SQLT_FLT: _type = DBI_TYPE_DECIMAL; _attribs |= DBI_DECIMAL_SIZE8; break; case SQLT_NUM: /* * We use size8 becouse we don't know if it * can be smaller :( */ if(scale > 0) { _type = DBI_TYPE_DECIMAL; _attribs |= DBI_DECIMAL_SIZE8; } else { _type = DBI_TYPE_INTEGER; _attribs |= DBI_INTEGER_SIZE8; } break; case SQLT_BIN: case SQLT_LBI: _type = DBI_TYPE_BINARY; break; case SQLT_DAT: _type = DBI_TYPE_DATETIME; break; case SQLT_AFC: case SQLT_STR: case SQLT_CHR: case SQLT_VNU: case SQLT_VCS: default: _type = DBI_TYPE_STRING; break; } *type = _type; *attribs = _attribs; } void _get_field_info(dbi_result_t *result) { unsigned int idx = 0; unsigned short fieldtype; unsigned int fieldattribs; OCIParam *param = NULL; ub4 otype; text *col_name; sb1 scale; ub4 col_name_len; char* col_name_dbi; Oraconn *Oconn = (Oraconn *)result->conn->connection; OCIStmt *stmt = (OCIStmt *) result->result_handle; while (idx < result->numfields) { scale = 0; OCIParamGet((dvoid *)stmt, OCI_HTYPE_STMT, Oconn->err, (dvoid **)¶m, (ub4) idx+1); OCIAttrGet((dvoid*) param, (ub4) OCI_DTYPE_PARAM, (dvoid*) &otype,(ub4 *) 0, (ub4) OCI_ATTR_DATA_TYPE, (OCIError *) Oconn->err ); OCIAttrGet((dvoid*) param, (ub4) OCI_DTYPE_PARAM, (dvoid**) &col_name,(ub4 *) &col_name_len, (ub4) OCI_ATTR_NAME, (OCIError *) Oconn->err ); if(otype == 2) { /* we got SQLT_NUM */ OCIAttrGet((dvoid*) param, (ub4) OCI_DTYPE_PARAM, (dvoid**) &scale,(ub4 *) 0, (ub4) OCI_ATTR_SCALE, (OCIError *) Oconn->err ); } /*bug fixing , it is necessary to copy it to earlier as in many cases it is not giving a properly terminated string, which gives malformed col name */ col_name_dbi = calloc(col_name_len + 1,sizeof(char) ); strncpy( col_name_dbi, (char *) col_name, col_name_len); _translate_oracle_type(otype, scale, &fieldtype, &fieldattribs); _dbd_result_add_field(result, idx, col_name_dbi, fieldtype, fieldattribs); free(col_name_dbi); idx++; } } void _get_row_data(dbi_result_t *result, dbi_row_t *row, unsigned long long rowidx) { OCIStmt *stmt = result->result_handle; OCIDefine *defnp = (OCIDefine *) 0; OCIParam *param; Oraconn *Oconn = result->conn->connection; unsigned int curfield = 0; size_t length = 0; size_t slen; unsigned int sizeattrib; dbi_data_t *data; char *ptr, *cols[result->numfields]; sword status; /* * Prefetch all cols as char *'s * This might not be all that good ... lets revisit * this when some Oracle guru starts sending in patches. */ while(curfield < result->numfields) { length = 0; OCIParamGet(stmt, OCI_HTYPE_STMT, Oconn->err, (dvoid **)¶m, (ub4) curfield+1); OCIAttrGet((dvoid*) param, (ub4) OCI_DTYPE_PARAM, (dvoid*) &length,(ub4 *) 0, (ub4) OCI_ATTR_DATA_SIZE, (OCIError *) Oconn->err ); cols[curfield] = (char *)malloc(length+1); if (result->field_types[curfield] == DBI_TYPE_DATETIME){ OCIDefineByPos(stmt, &defnp, Oconn->err, curfield+1, cols[curfield], (sword) length+1, SQLT_DAT, (dvoid *) 0, (ub2 *)0 , (ub2 *)0, OCI_DEFAULT); } else { OCIDefineByPos(stmt, &defnp, Oconn->err, curfield+1, cols[curfield], (sword) length+1, SQLT_STR, (dvoid *) 0, (ub2 *)0, (ub2 *)0, OCI_DEFAULT); } if(length < 0 ) _set_field_flag( row, curfield, DBI_VALUE_NULL, 1); switch (result->field_types[curfield]) { case DBI_TYPE_BINARY: case DBI_TYPE_STRING: row->field_sizes[curfield] = length; break; default: row->field_sizes[curfield] = 0; break; } curfield++; } status = OCIStmtFetch2(stmt, Oconn->err, 1, OCI_FETCH_ABSOLUTE, rowidx+1, OCI_DEFAULT); curfield = 0; while (curfield < result->numfields) { data = &row->field_values[curfield]; switch (result->field_types[curfield]) { case DBI_TYPE_INTEGER: sizeattrib = _isolate_attrib(result->field_attribs[curfield], DBI_INTEGER_SIZE1, DBI_INTEGER_SIZE8); switch (sizeattrib) { case DBI_INTEGER_SIZE1: case DBI_INTEGER_SIZE2: case DBI_INTEGER_SIZE3: case DBI_INTEGER_SIZE4: case DBI_INTEGER_SIZE8: default: data->d_longlong = (long long) atoll(cols[curfield]); break; } break; case DBI_TYPE_DECIMAL: sizeattrib = _isolate_attrib(result->field_attribs[curfield], DBI_DECIMAL_SIZE4, DBI_DECIMAL_SIZE8); switch (sizeattrib) { case DBI_DECIMAL_SIZE4: case DBI_DECIMAL_SIZE8: default: data->d_double = (double) strtod(cols[curfield], NULL); //fprintf(stderr, "Double: %s:%f\n", cols[curfield], data->d_double); break; } break; case DBI_TYPE_STRING: slen = row->field_sizes[curfield]; data->d_string = malloc(row->field_sizes[curfield]+1); memcpy(data->d_string, cols[curfield],row->field_sizes[curfield]); data->d_string[slen] = '\0'; if (dbi_conn_get_option_numeric(result->conn, "oracle_chop_blanks") == 1) { ptr = data->d_string; if(ptr != NULL && *ptr != '\0') while(slen && ptr[slen - 1] == ' ') --slen; ptr[slen] = '\0'; /* Chop blanks */ row->field_sizes[curfield] = slen; /* alter field length */ } break; case DBI_TYPE_BINARY: data->d_string = malloc(row->field_sizes[curfield]); memcpy(data->d_string, cols[curfield],row->field_sizes[curfield]); break; case DBI_TYPE_DATETIME: data->d_datetime = _oradate_to_time_t (cols[curfield]); break; } if (cols[curfield]) free(cols[curfield]); curfield++; } } unsigned long long _oracle_query_to_longlong(dbi_conn_t *conn, const char *query) { OCIStmt *stmt = NULL; sword val = 0; OCIDefine *defnp = NULL; Oraconn *Oconn = conn->connection; OCIHandleAlloc( (dvoid *) Oconn->env, (dvoid **) &stmt, OCI_HTYPE_STMT, (size_t) 0, (dvoid **) 0); OCIStmtPrepare(stmt, Oconn->err, (char *) query, (ub4) strlen(query), (ub4) OCI_NTV_SYNTAX, (ub4) OCI_DEFAULT); OCIDefineByPos(stmt, &defnp, Oconn->err, 1, (dvoid *) &val, (sword) sizeof(sword), SQLT_INT, (dvoid *) 0, (ub2 *)0, (ub2 *)0, OCI_DEFAULT); OCIStmtExecute(Oconn->svc, stmt, Oconn->err, (ub4) 1, (ub4) 0, (CONST OCISnapshot *) NULL, (OCISnapshot *) NULL, OCI_DEFAULT); OCIStmtFetch(stmt, Oconn->err, (ub4) 1, (ub4) OCI_FETCH_NEXT, (ub4) OCI_DEFAULT); (void) OCIHandleFree((dvoid *) stmt, OCI_HTYPE_STMT); return (unsigned long long) (val ? val : 0); } void _checkerr(OCIError * errhp, sword status) { text errbuf[512]; /* ub4 buflen; */ ub4 errcode; switch (status) { case OCI_SUCCESS: break; case OCI_SUCCESS_WITH_INFO: (void) fprintf(stderr,"Error - OCI_SUCCESS_WITH_INFO\n"); break; case OCI_NEED_DATA: (void) fprintf(stderr, "Error - OCI_NEED_DATA\n"); break; case OCI_NO_DATA: (void) fprintf(stderr,"Error - OCI_NODATA\n"); break; case OCI_ERROR: (void) OCIErrorGet (errhp, (ub4) 1, (text *) NULL, &errcode, errbuf, (ub4) sizeof(errbuf), OCI_HTYPE_ERROR); (void) fprintf(stderr,"Error - %s Code: %d\n", errbuf, errcode); break; case OCI_INVALID_HANDLE: (void) fprintf(stderr,"Error - OCI_INVALID_HANDLE\n"); break; case OCI_STILL_EXECUTING: (void) fprintf(stderr,"Error - OCI_STILL_EXECUTE\n"); break; default: break; } } const char *dbd_encoding_from_iana(const char * iana_encoding ) { return iana_encoding; } const char *dbd_encoding_to_iana(const char * iana_encoding ) { return iana_encoding; } /* taken from sqlite3 driver */ size_t dbd_quote_binary (dbi_conn_t *conn, const unsigned char *orig, size_t from_length, unsigned char **ptr_dest ) { unsigned char *temp; size_t len; if ((temp = (unsigned char*)malloc(from_length*2)) == NULL) { return 0; } strcpy(temp, "\'"); if (from_length) { len = _dbd_encode_binary(orig, from_length, temp+1); } else { len = 0; } strcat(temp, "'"); *ptr_dest = temp; return len+2; } size_t dbd_conn_quote_string (dbi_conn_t *conn, const char *orig, char *dest ) { return dbd_quote_string(conn->driver, orig, dest); } /* This function is stolen from MySQL,Sqlite3. The quoting was changed to the SQL standard, i.e. single and double quotes are escaped by doubling, not by a backslash. Newlines and carriage returns are left alone */ static size_t oracle_escape_string(char *to, const char *from, size_t length) { const char *to_start=to; const char *end; for (end=from+length; from != end ; from++) { switch (*from) { case 0: /* Must be escaped for 'mysql' */ *to++= '\\'; *to++= '0'; break; case '\'': *to++= '\''; /* double single quote */ *to++= '\''; break; case '\032': /* This gives problems on Win32 */ *to++= '\\'; *to++= 'Z'; break; default: *to++= *from; } } *to=0; return (size_t) (to-to_start); } time_t _oradate_to_time_t (char *obuff) { struct tm tmt; /* char stime[101], *cp = NULL; */ time_t loct = 0L; /* memset(stime, 0, sizeof(stime)); */ /* sprintf(stime, "%04d%02d%02d%02d%02d%02d", */ /* // | YYYY | */ /* (obuff[0]-100)*100 + (obuff[1]-100), */ /* // | month | day | */ /* obuff[2], obuff[3], */ /* // | HH | MM | SS | */ /* obuff[4]-1, obuff[5]-1, obuff[6]-1); */ /* cp = strptime(stime, "%Y%m%d%H%M%S", &tmt); */ memset(&tmt, 0, sizeof(tmt)); tmt.tm_sec = obuff[6]-1; tmt.tm_min = obuff[5]-1; tmt.tm_hour = obuff[4]-1; tmt.tm_mday = obuff[3]; tmt.tm_mon = obuff[2]; tmt.tm_year = (obuff[0]-100)*100 + (obuff[1]-100); loct = mktime(&tmt); return(loct); } libdbi-drivers-0.9.0/drivers/oracle/dbd_oracle.h000755 001750 001750 00000011373 10303423574 022452 0ustar00markusmarkus000000 000000 /* * libdbi - database independent abstraction layer for C. * Copyright (C) 2001-2004, David Parker and Mark Tobenkin. * http://libdbi.sourceforge.net * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * dbd_oracle.h: Oracle database support * Copyright (C) 2003-2004, Christian M. Stamgren * http://libdbi-drivers.sourceforge.net * */ #ifndef __DBD_ORACLE_H__ #define __DBD_ORACLE_H__ typedef struct Oraconn_ { OCIEnv *env; OCIError *err; OCISvcCtx *svc; } Oraconn; #define ORACLE_RESERVED_WORDS { \ "ALL", \ "ALTER", \ "AND", \ "ANY", \ "ARRAY", \ "AS", \ "ASC", \ "AT", \ "AUTHID", \ "AVG", \ "BEGIN", \ "BETWEEN", \ "BINARY_INTEGER", \ "BODY", \ "BOOLEAN", \ "BULK", \ "BY", \ "CASE", \ "CHAR", \ "CHAR_BASE", \ "CHECK", \ "CLOSE", \ "CLUSTER", \ "COALESCE", \ "COLLECT", \ "COMMENT", \ "COMMIT", \ "COMPRESS", \ "CONNECT", \ "CONSTANT", \ "CREATE", \ "CURRENT", \ "CURRVAL", \ "CURSOR", \ "DATE", \ "DAY", \ "DECLARE", \ "DECIMAL", \ "DEFAULT", \ "DELETE", \ "DESC", \ "DISTINCT", \ "DO", \ "DROP", \ "ELSE", \ "ELSIF", \ "END", \ "EXCEPTION", \ "EXCLUSIVE", \ "EXECUTE", \ "EXISTS", \ "EXIT", \ "EXTENDS", \ "EXTRACT", \ "FALSE", \ "FETCH", \ "FLOAT", \ "FOR", \ "FORALL", \ "FROM", \ "FUNCTION", \ "GOTO", \ "GROUP", \ "HAVING", \ "HEAP", \ "HOUR", \ "IF", \ "IMMEDIATE", \ "IN", \ "INDEX", \ "INDICATOR", \ "INSERT", \ "INTEGER", \ "INTERFACE", \ "INTERSECT", \ "INTERVAL", \ "INTO", \ "IS", \ "ISOLATION", \ "JAVA", \ "LEVEL", \ "LIKE", \ "LIMITED", \ "LOCK", \ "LONG", \ "LOOP", \ "MAX", \ "MIN", \ "MINUS", \ "MINUTE", \ "MLSLABEL", \ "MOD", \ "MODE", \ "MONTH", \ "NATURAL", \ "NATURALN", \ "NEW", \ "NEXTVAL", \ "NOCOPY", \ "NOT", \ "NOWAIT", \ "NULL", \ "NULLIF", \ "NUMBER", \ "NUMBER_BASE", \ "OCIROWID", \ "OF", \ "ON", \ "OPAQUE", \ "OPEN", \ "OPERATOR", \ "OPTION", \ "OR", \ "ORDER", \ "ORGANIZATION", \ "OTHERS", \ "OUT", \ "PACKAGE", \ "PARTITION", \ "PLS_INTEGER", \ "POSITIVE", \ "POSITIVEN", \ "PRAGMA", \ "PRIOR", \ "PRIVATE", \ "PROCEDURE", \ "PUBLIC", \ "RAISE", \ "RANGE", \ "RAW", \ "REAL", \ "RECORD", \ "REF", \ "RELEASE", \ "RETURN", \ "REVERSE", \ "ROLLBACK", \ "ROW", \ "ROWNUM", \ "ROWTYPE", \ "SAVEPOINT", \ "SECOND", \ "SELECT", \ "SEPARATE", \ "SET", \ "SHARE", \ "SMALLINT", \ "SPACE", \ "SQL", \ "SQLCODE", \ "SQLERRM", \ "START", \ "STDDEV", \ "SUBTYPE", \ "SUCCESSFUL", \ "SUM", \ "SYNONYM", \ "SYSDATE", \ "TABLE", \ "THEN", \ "TIME", \ "TIMESTAMP", \ "TIMEZONE_REGION", \ "TIMEZONE_ABBR", \ "TIMEZONE_MINUTE", \ "TIMEZONE_HOUR", \ "TO", \ "TRIGGER", \ "TRUE", \ "TYPE", \ "UI", \ "AS", \ "ASC", \ "AUDIT", \ "AUTHORIZATION", \ "AVG", \ "BETWEEN", \ "ACCESS", \ "BY", \ "ADD", \ "ALL", \ "ALTER", \ "CHAR", \ "ANY", \ "CHECK", \ "DATE", \ "CLUSTER", \ "COLUMN", \ "COMMENT", \ "DECIMAL", \ "DEFAULT", \ "COMPRESS", \ "DELETE", \ "CONNECT", \ "DESC", \ "DISTINCT", \ "DROP", \ "CREATE", \ "CURRENT", \ "ELSE", \ "CURSOR", \ "ESTIMATE", \ "GRANT", \ "GROUP", \ "EXCLUSIVE", \ "EXISTS", \ "HAVING", \ "IDENTIFIED", \ "IMMEDIATE", \ "NOCOMPRESS", \ "MAXEXTENTS", \ "NOT", \ "NOTFOUND", \ "NOWAIT", \ "NULL", \ "NUMBER", \ "PCTFREE", \ "REVOKE", \ "SMALLINT", \ "ROW", \ "ROWID", \ "ROWLABEL", \ "ROWNUM", \ "SQLBUF", \ "ROWS", \ "START", \ "STATEMENT_ID", \ NULL } #ifndef OCI_ATTR_CURRENT_POSITION #define MY_OCI_ATTR_CURRENT_POSITION 164 #define MY_OCI_STMT_SCROLLABLE_READONLY 0x08 #define OCIStmtFetch2(stmt,err,h,orientation,i,j) OCIStmtFetch(stmt,err,i,orientation,j) #else #define MY_OCI_ATTR_CURRENT_POSITION OCI_ATTR_CURRENT_POSITION #define MY_OCI_STMT_SCROLLABLE_READONLY OCI_STMT_SCROLLABLE_READONLY #endif #endif /* __DBD_ORACLE_H__ */ libdbi-drivers-0.9.0/drivers/oracle/oracle_charsets.h000644 001750 001750 00000031146 10000054016 023513 0ustar00markusmarkus000000 000000 /* * libdbi - database independent abstraction layer for C. * Copyright (C) 2001-2004, David Parker and Mark Tobenkin. * http://libdbi.sourceforge.net * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * oracle_charsets.h * Copyright (C) 2003-2004, Christian M. Stamgren * http://libdbi-drivers.sourceforge.net * */ /** * Oracle native to IANA Charsetnames translation table. */ //This table needs ALOT more work, please help me!! static const char oracle_encoding_hash[][20] = { /* from , to */ "EL8DEC","EL8DEC", //DEC 8-bit Latin/Greek "EL8GCOS7","EL8GCOS7", //Bull EBCDIC GCOS7 8-bit Greek "RU8BESTA","RU8BESTA", //BESTA 8-bit Latin/Cyrillic "SF7ASCII","SF7ASCII", //ASCII 7-bit Finnish "TR7DEC","TR7DEC", //DEC VT100 7-bit Turkish "TR8DEC", "TR8DEC", //DEC 8-bit Turkish "TR8EBCDIC1026","TR8EBCDIC1026", //EBCDIC Code Page 1026 8-bit Turkish "TR8EBCDIC1026S","TR8EBCDIC1026", //EBCDIC Code Page 1026 Server 8-bit Turkish "TR8MACTURKISH","TR8EBCDIC1026", //MAC Client 8-bit Turkish "TR8PC857","IBM857", //IBM-PC Code Page 857 8-bit Turkish "US7ASCII","US-ASCII", //ASCII 7-bit American "WE8GCOS7","WE8GCOS7", //Bull EBCDIC GCOS7 8-bit West European "YUG7ASCII","YUG7ASCII", //ASCII 7-bit Yugoslavian "AL16UTF16","AL16UTF16", "AL32UTF8" ,"AL32UTF8" , "AR8ADOS710","AR8ADOS710", //Arabic MS-DOS 710 Server 8-bit Latin/Arabic "AR8ADOS710T","AR8ADOS710T", //Arabic MS-DOS 710 8-bit Latin/Arabic "AR8ADOS720","AR8ADOS720", //Arabic MS-DOS 720 Server 8-bit Latin/Arabic "AR8ADOS720T","AR8ADOS720T", //Arabic MS-DOS 720 8-bit Latin/Arabic "AR8APTEC715", "AR8APTEC715", //APTEC 715 Server 8-bit Latin/Arabic "AR8APTEC715T","AR8APTEC715T", //APTEC 715 8-bit Latin/Arabic "AR8ARABICMAC","AR8ARABICMAC", //Mac Client 8-bit Latin/Arabic "AR8ARABICMACS","AR8ARABICMACS", //Mac Server 8-bit Latin/Arabic "AR8ARABICMACT","AR8ARABICMACT", //Mac 8-bit Latin/Arabic "AR8ASMO708PLUS","AR8ASMO708PLUS", //ASMO 708 Plus 8-bit Latin/Arabic "AR8ASMO8X","AR8ASMO8X", //ASMO Extended 708 8-bit Latin/Arabic "AR8EBCDIC420S","AR8EBCDIC420S", //EBCDIC Code Page 420 Server 8-bit Latin/Arabic "AR8EBCDICX", "AR8EBCDICX", //EBCDIC XBASIC Server 8-bit Latin/Arabic "AR8HPARABIC8T","AR8HPARABIC8T", //HP 8-bit Latin/Arabic "AR8ISO8859P6","ISO-8859-6", //ISO 8859-6 Latin/Arabic "AR8MSWIN1256","AR8MSWIN1256", //MS Windows Code Page 1256 8-Bit Latin/Arabic "AR8MUSSAD768","AR8MUSSAD768", //Mussa'd Alarabi/2 768 Server 8-bit Latin/Arabic "AR8MUSSAD768T","AR8MUSSAD768T", //Mussa'd Alarabi/2 768 8-bit Latin/Arabic "AR8NAFITHA711","AR8NAFITHA711", //Nafitha Enhanced 711 Server 8-bit Latin/Arabic "AR8NAFITHA711T","AR8NAFITHA711T", //Nafitha International 721 Server 8-bit Latin/Arabic "AR8NAFITHA721T","AR8NAFITHA721T", //Nafitha International 721 8-bit Latin/Arabic "AR8SAKHR706","AR8SAKHR706", //SAKHR 706 Server 8-bit Latin/Arabic "AR8SAKHR707","AR8SAKHR707", //SAKHR 707 Server 8-bit Latin/Arabic "AR8SAKHR707T","AR8SAKHR707T", //SAKHR 707 8-bit Latin/Arabic "AR8XBASIC","AR8XBASIC", //XBASIC 8-bit Latin/Arabic "BLT8EBCDIC1112","BLT8EBCDIC1112", //EBCDIC Code Page 1112 8-bit Baltic Multilingual "BLT8EBCDIC1112S","BLT8EBCDIC1112S", //EBCDIC Code Page 1112 8-bit Server Baltic Multilingual "BLT8MSWIN1257","BLT8MSWIN1257", //MS Windows Code Page 1257 8-bit Baltic "BN8BSCII","BN8BSCII", //Bangladesh National Code 8-bit BSCII "CH7DEC","CH7DEC", //DEC VT100 7-bit Swiss (German/French) "CL8EBCDIC1025","CL8EBCDIC1025", //EBCDIC Code Page 1025 8-bit Cyrillic "CL8EBCDIC1025C","CL8EBCDIC1025C", //EBCDIC Code Page 1025 Client 8-bit Cyrillic "CL8EBCDIC1025R","CL8EBCDIC1025R", //EBCDIC Code Page 1025 Server 8-bit Cyrillic "CL8EBCDIC1025S","CL8EBCDIC1025S", //EBCDIC Code Page 1025 Server 8-bit Cyrillic "CL8EBCDIC1025X","CL8EBCDIC1025X", // EBCDIC Code Page 1025 (Modified) 8-bit Cyrillic "CL8ISOIR111","CL8ISOIR111", //ISOIR111 Cyrillic "CL8KOI8R","CL8KOI8R", //RELCOM Internet Standard 8-bit Latin/Cyrillic "CL8KOI8U","CL8KOI8U", //KOI8 Ukrainian Cyrillic "CL8MSWIN1251","CL8MSWIN1251", //MS Windows Code Page 1251 8-bit Latin/Cyrillic "D7DEC","D7DEC", //DEC VT100 7-bit German "D7SIEMENS9780X","D7SIEMENS9780X", //Siemens 97801/97808 7-bit German "D8BS2000","D8BS2000", //Siemens 9750-62 EBCDIC 8-bit German "D8EBCDIC1141","D8EBCDIC1141", //EBCDIC Code Page 1141 8-bit Austrian German "D8EBCDIC273","D8EBCDIC273", //EBCDIC Code Page 273/1 8-bit Austrian German "DK7SIEMENS9780X","DK7SIEMENS9780X", //Siemens 97801/97808 7-bit Danish "DK8BS2000","DK8BS2000", //Siemens 9750-62 EBCDIC 8-bit Danish "DK8EBCDIC1142","DK8EBCDIC1142", //EBCDIC Code Page 1142 8-bit Danish "DK8EBCDIC277","DK8EBCDIC277", //EBCDIC Code Page 277/1 8-bit Danish "E7DEC","E7DEC", //DEC VT100 7-bit Spanish "E7SIEMENS9780X","E7SIEMENS9780X", //Siemens 97801/97808 7-bit Spanish "E8BS2000","E8BS2000", //Siemens 9750-62 EBCDIC 8-bit Spanish "EE8EBCDIC870","EE8EBCDIC870", //EBCDIC Code Page 870 8-bit East European "EE8EBCDIC870C","EE8EBCDIC870C", //EBCDIC Code Page 870 Client 8-bit East European "EE8EBCDIC870S","EE8EBCDIC870S", //EBCDIC Code Page 870 Server 8-bit East European "EEC8EUROASCI","EEC8EUROASCI", //EEC Targon 35 ASCI West European/Greek "EEC8EUROPA3","EEC8EUROPA3", //EEC EUROPA3 8-bit West European/Greek "EL8EBCDIC875","EL8EBCDIC875", //EBCDIC Code Page 875 8-bit Greek "EL8EBCDIC875R","EL8EBCDIC875R", //EBCDIC Code Page 875 Server 8-bit Greek "EL8MSWIN1253","EL8MSWIN1253", //MS Windows Code Page 1253 8-bit Latin/Greek "F7DEC","F7DEC", //DEC VT100 7-bit French "F7SIEMENS9780X","F7SIEMENS9780X", //Siemens 97801/97808 7-bit French "F8BS2000","F8BS2000", //Siemens 9750-62 EBCDIC 8-bit French "F8EBCDIC1147","F8EBCDIC1147", //EBCDIC Code Page 1147 8-bit French "F8EBCDIC297","F8EBCDIC297", //EBCDIC Code Page 297 8-bit French "I7DEC","I7DEC", //DEC VT100 7-bit Italian "I8EBCDIC1144","I8EBCDIC1144", //EBCDIC Code Page 1144 8-bit Italian "I8EBCDIC280","I8EBCDIC280", //EBCDIC Code Page 280/1 8-bit Italian "IN8ISCII","IN8ISCII", //Multiple-Script Indian Standard 8-bit Latin/Indian Languages "IW7IS960","IW7IS960", //Israeli Standard 960 7-bit Latin/Hebrew "IW8EBCDIC1086","IW8EBCDIC1086", //EBCDIC Code Page 1086 8-bit Hebrew "IW8EBCDIC424","IW8EBCDIC424", //EBCDIC Code Page 424 8-bit Latin/Hebrew "IW8EBCDIC424S","IW8EBCDIC424S", //EBCDIC Code Page 424 Server 8-bit Latin/Hebrew "IW8ISO8859P8","ISO-8859-8", //ISO 8859-8 Latin/Hebrew "IW8MACHEBREW","IW8MACHEBREW", //Mac Client 8-bit Hebrew "IW8MACHEBREWS","IW8MACHEBREWS", //Mac Server 8-bit Hebrew "IW8MSWIN1255","IW8MSWIN1255", //MS Windows Code Page 1255 8-bit Latin/Hebrew "IW8PC1507","IW8PC1507", //IBM-PC Code Page 1507/862 8-bit Latin/Hebrew "JA16DBCS","JA16DBCS", //IBM EBCDIC 16-bit Japanese "JA16EBCDIC930","JA16EBCDIC930", //IBM DBCS Code Page 290 16-bit Japanese "JA16EUC","EUC-JP", //EUC 24-bit Japanese "JA16EUCYEN","EUC-JP", //EUC 24-bit Japanese with '\' mapped to the Japanese yen character "JA16MACSJIS","JA16MACSJIS", //Mac client Shift-JIS 16-bit Japanese "JA16SJIS","JA16SJIS", //Shift-JIS 16-bit Japanese "JA16SJISYEN","JA16SJISYEN", //Shift-JIS 16-bit Japanese with '\' mapped to the Japanese yen characters "JA16VMS","JA16VMS", //JVMS 16-bit Japanese "KO16DBCS","KO16DBCS", //IBM EBCDIC 16-bit Korean "KO16KSC5601","KO16KSC5601", //KSC5601 16-bit Korean "KO16KSCCS","KO16KSCCS", //KSCCS 16-bit Korean "KO16MSWIN949","KO16MSWIN949", //MS Windows Code Page 949 Korean "LA8ISO6937","LA8ISO6937", //ISO 6937 8-bit Coded Character Set for Text Communication "LA8PASSPORT","LA8PASSPORT", //German Government Printer 8-bit All-European Latin "LV8PC8LR","LV8PC8LR", //Latvian Version IBM-PC Code Page 866 8-bit Latin/Cyrillic "NDK7DEC","NDK7DEC", //DEC VT100 7-bit Norwegian/Danish "NL7DEC","NL7DEC", //DEC VT100 7-bit Dutch "S7DEC","S7DEC", //DEC VT100 7-bit Swedish "S7SIEMENS9780X","S7SIEMENS9780X", //Siemens 97801/97808 7-bit Swedish "S8BS2000","S8BS2000", //Siemens 9750-62 EBCDIC 8-bit Swedish "S8EBCDIC1143","S8EBCDIC1143", //EBCDIC Code Page 1143 8-bit Swedish "S8EBCDIC278","S8EBCDIC278", //EBCDIC Code Page 278/1 8-bit Swedish "SF7DEC","SF7DEC", //DEC VT100 7-bit Finnish "TH8MACTHAI","TH8MACTHAI", //Mac Client 8-bit Latin/Thai "TH8MACTHAIS","TH8MACTHAIS", //Mac Server 8-bit Latin/Thai "TH8TISASCII","TH8TISASCII", //Thai Industrial Standard 620-2533 - ASCII 8-bit "TH8TISEBCDIC","TH8TISEBCDIC", //Thai Industrial Standard 620-2533 - EBCDIC 8-bit "TH8TISEBCDICS","TH8TISEBCDICS", //Thai Industrial Standard 620-2533-EBCDIC Server 8-bit "TR7DEC","TR7DEC", //DEC VT100 7-bit Turkish "TR8DEC","TR8DEC", //DEC 8-bit Turkish "TR8EBCDIC1026","TR8EBCDIC1026", //EBCDIC Code Page 1026 8-bit Turkish "TR8EBCDIC1026S","TR8EBCDIC1026S", //EBCDIC Code Page 1026 Server 8-bit Turkish "TR8MACTURKISH","TR8MACTURKISH", //Mac Client 8-bit Turkish "TR8MACTURKISHS","TR8MACTURKISHS", //MAC Server 8-bit Turkish "TR8MSWIN1254","TR8MSWIN1254", //MS Windows Code Page 1254 8-bit Turkish "TR8PC857","TR8PC857", //IBM-PC Code Page 857 8-bit Turkish "US8BS2000","US8BS2000", //Siemens 9750-62 EBCDIC 8-bit American "US8PC437","US8PC437", //IBM-PC Code Page 437 8-bit American "UTF8","UTF-8", "UTFE","UTFE", "VN8MSWIN1258","VN8MSWIN1258", //MS Windows Code Page 1258 8-bit Vietnamese "VN8VN3VN3","VN8VN3VN3", //8-bit Vietnamese "WE8BS2000L5","WE8BS2000L5", //Siemens EBCDIC.DF.L5 8-bit West European/Turkish "WE8DEC","WE8DEC", //DEC 8-bit West European "WE8DG","WE8DG", //DG 8-bit West European "WE8EBCDIC1047","WE8EBCDIC1047", //EBCDIC Code Page 1047 8-bit West European "WE8EBCDIC1047E","WE8EBCDIC1047E", //Latin 1/Open Systems 1047 "WE8EBCDIC1140","WE8EBCDIC1140", //EBCDIC Code Page 1140 8-bit West European "WE8EBCDIC1140C","WE8EBCDIC1140C", //EBCDIC Code Page 1140 Client 8-bit West European "WE8EBCDIC1145","WE8EBCDIC1145", //EBCDIC Code Page 1145 8-bit West European "WE8EBCDIC1146","WE8EBCDIC1146", //EBCDIC Code Page 1146 8-bit West European "WE8EBCDIC1148","WE8EBCDIC1148", //EBCDIC Code Page 1148 8-bit West European "WE8EBCDIC1148C","WE8EBCDIC1148C", //EBCDIC Code Page 1148 Client 8-bit West European "WE8EBCDIC284","WE8EBCDIC284", //EBCDIC Code Page 284 8-bit Latin American/Spanish "WE8EBCDIC285","WE8EBCDIC285", //EBCDIC Code Page 285 8-bit West European "WE8EBCDIC37","WE8EBCDIC37", //EBCDIC Code Page 37 8-bit West European "WE8EBCDIC37C","WE8EBCDIC37C", //EBCDIC Code Page 37 8-bit Oracle/c "WE8EBCDIC500","WE8EBCDIC500", //EBCDIC Code Page 500 8-bit West European "WE8EBCDIC500C","WE8EBCDIC500C", //EBCDIC Code Page 500 8-bit Oracle/c "WE8EBCDIC871","WE8EBCDIC871", //EBCDIC Code Page 871 8-bit Icelandic "WE8EBCDIC924","WE8EBCDIC924", //Latin 9 EBCDIC 924 "WE8HP","WE8HP", //HP LaserJet 8-bit West European "WE8ISO8859P9","ISO-8859-9", //ISO 8859-9 West European & Turkish "WE8MSWIN1252","WE8MSWIN1252", //MS Windows Code Page 1252 8-bit West European "WE8NCR4970","WE8NCR4970", //NCR 4970 8-bit West European "WE8NEXTSTEP","WE8NEXTSTEP", //NeXTSTEP PostScript 8-bit West European "WE8ROMAN8","WE8ROMAN8", //HP Roman8 8-bit West European "ZHS16CGB231280","ZHS16CGB231280", //CGB2312-80 16-bit Simplified Chinese "ZHS16DBCS","ZHS16DBCS", //IBM EBCDIC 16-bit Simplified Chinese "ZHS16GBK", "ZHS16GBK", //GBK 16-bit Simplified Chinese "ZHS16MACCGB231280","ZHS16MACCGB231280", //Mac client CGB2312-80 16-bit Simplified Chinese "ZHS32GB18030","ZHS32GB18030", //GB18030-2000 "ZHT16BIG5","ZHT16BIG5", //BIG5 16-bit Traditional Chinese "ZHT16CCDC","ZHT16CCDC", //HP CCDC 16-bit Traditional Chinese "ZHT16DBCS","ZHT16DBCS", //IBM EBCDIC 16-bit Traditional Chinese "ZHT16DBT","ZHT16DBT", //Taiwan Taxation 16-bit Traditional Chinese "ZHT16HKSCS","ZHT16HKSCS", //MS Windows Code Page 950 with Hong Kong Supplementary Character Set "ZHT16MSWIN950","ZHT16MSWIN950", //MS Windows Code Page 950 Traditional Chinese "ZHT32EUC","ZHT32EUC", //EUC 32-bit Traditional Chinese "ZHT32SOPS","ZHT32SOPS", // SOPS 32-bit Traditional Chinese "ZHT32TRIS","ZHT32TRIS", //TRIS 32-bit Traditional Chinese "" }; libdbi-drivers-0.9.0/drivers/oracle/dbd_oracle.sgml000644 001750 001750 00000004556 10302425625 023165 0ustar00markusmarkus000000 000000 Oracle driver manual A libdbi driver using the Oracle Ashish Ranjan
    ashishwave@yahoo.com
    0.0.1 2005-08-21
    Preface libdbi is a database abstraction layer written in C. It implements a framework that can utilize separate driver libraries for specific database servers. The libdbi-drivers project provides the drivers necessary to talk to the supported database servers. This manual provides information about the oracle driver. The manual is intended for programmers who write applications linked against libdbi and who want their applications to work with the oracle driver. Questions and comments about the Oracle driver should be sent to the libdbi-drivers-devel mailing list. Visit the libdbi-drivers-devel list page to subscribe and for further information. Questions and comments about the libdbi library should be sent to the appropriate libdbi mailing list. The Oracle driver is maintained by Ashish Ranjan. Introduction TODO Installation TODO Prerequisites The following packages have to be installed on your system: Build and install the oracle driver TODO Driver options TODO Peculiarities you should know about TODO
    libdbi-drivers-0.9.0/drivers/oracle/dbd_oracle.pdf000644 001750 001750 00000216255 12117467200 022776 0ustar00markusmarkus000000 000000 %PDF-1.4 1 0 obj << /S /GoTo /D (1.0) >> endobj 4 0 obj (Oracle driver manual) endobj 5 0 obj << /S /GoTo /D (2.0) >> endobj 8 0 obj (Table of Contents) endobj 9 0 obj << /S /GoTo /D (3.0) >> endobj 12 0 obj (Preface) endobj 13 0 obj << /S /GoTo /D (4.0) >> endobj 16 0 obj (Chapter 1. Introduction) endobj 17 0 obj << /S /GoTo /D (5.0) >> endobj 20 0 obj (Chapter 2. Installation) endobj 21 0 obj << /S /GoTo /D (5.1.1) >> endobj 24 0 obj (2.1. Prerequisites) endobj 25 0 obj << /S /GoTo /D (5.2.1) >> endobj 28 0 obj (2.2. Build and install the oracle driver) endobj 29 0 obj << /S /GoTo /D (6.0) >> endobj 32 0 obj (Chapter 3. Driver options) endobj 33 0 obj << /S /GoTo /D (7.0) >> endobj 36 0 obj (Chapter 4. Peculiarities you should know about) endobj 37 0 obj << /S /GoTo /D [38 0 R /Fit ] >> endobj 40 0 obj << /Length 271 /Filter /FlateDecode >> stream xÚQ;OÄ0 Þû+26CLì<» ± ¡nˆ!×–kQRËâß“kÊé$P†8v¾‡md2dÁ©xi"©Y5d’ícé!Ãí‹¶È ?ªÂ(…'ËÄ%Ém™]Ý“f¤Á¬|cè Œë=µ1Y¿äOs¨8ɼo¸ çózîŽÍœâ!Œe~=-›k¼9ñ %‘ š@I+ßM‚öÝ®Þu¿)K7îSøÑn’~dСÑ'™BE³^1Jƒ.È%™¥í–6áŸÃøž±±Mchµˆ¼Wž ¢Ø»ÆVìgàhòcsýÅ•ÌC;MPMÉ%»+ÏÃݶ£=xŒû÷r¾}oBendstream endobj 38 0 obj << /Type /Page /Contents 40 0 R /Resources 39 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 47 0 R >> endobj 41 0 obj << /D [38 0 R /XYZ 71.731 741.2204 null] >> endobj 42 0 obj << /D [38 0 R /XYZ 71.731 706.3512 null] >> endobj 43 0 obj << /D [38 0 R /XYZ 71.731 706.3512 null] >> endobj 2 0 obj << /D [38 0 R /XYZ 427.8012 688.2669 null] >> endobj 39 0 obj << /Font << /F24 46 0 R >> /ProcSet [ /PDF /Text ] >> endobj 50 0 obj << /Length 260 /Filter /FlateDecode >> stream xÚ‘ÁjÃ0 †ïy ƒ]I±{·Ö]%·±CÒ¤GšBÒúösët¶ÁðA¿¬ï—…Œ ÂA–£Ì³J"Pl³O€íBé9Á QÆHÒhBòKUè,—Î’abÞä±H+RÌIgB­ØÞ_2ÎÈÌZÍŠú¿ å&%à]“ Ê-¯n†¨÷eŸ"ðSÙ=Ä‹e ¯êÊÿäO£ïwQ۩߬ÿGñºXe0˜@’N£ºÍR]‚G_Ž­Û¨×eÿÆÞ+MZ: w£×MJšŸýè}d_üx< —;ŒZ0Ù0H˜ $hV^­ÉSñ½ÚicÊJ‹Æýÿk¾poCendstream endobj 49 0 obj << /Type /Page /Contents 50 0 R /Resources 48 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 47 0 R >> endobj 51 0 obj << /D [49 0 R /XYZ 71.731 741.2204 null] >> endobj 55 0 obj << /D [49 0 R /XYZ 71.731 650.8942 null] >> endobj 48 0 obj << /Font << /F24 46 0 R /F30 54 0 R >> /ProcSet [ /PDF /Text ] >> endobj 58 0 obj << /Length 11326 /Filter /FlateDecode >> stream xÚͲÇuuçz ËõÓÕ]=•ÿÂiÀ™Ãˆ„,„aÂ&A9üö΋[y²ïÎγv|SŽ×jTI"ö^^ÞÍåÿ-ïnËtÛÊÿ¸,ӺΗw?ý׿wÿQ~èŸÿ°œ'—ëuZ÷åZþÅ“ýaßnÓýX¯ï~x„üñÇ?üÝ?­—wë<]÷c÷ã_ªêz/WÇ|¼ûñç{ÿã‡c~ÿñÏ–ùý—O~XoÇû¯yýŸÿõ—oŸ~ùöÛ‡ÿñ_ÿð?†°b®Ç4Ïóòô37?<}ÿDÛöî>ݯåÓ>| zôòþôë‡åxÿé/ú¤âeަ붬©zž.·ã2xTË|™–ù~¥wo>ÚÔ ëtçíéz"?¯Q®Ôü>Í÷ùîÊÏk”+õ¹|Y¦ýX®¦¼^“¼£ä—i¾­«+?¯Q®Ôü:í×Õ}ìõåJÈËÛÙ7û±Ÿ×(WêsùZÞÎåâ>özMòŽ:—·³]ÜÇ^¯Q®Ô¼¼uß]ùyr¥äåí,Wû±Ÿ×(WêsùVÞÎ|u{½&yGÈ·é~¿¹½^£\©ùuº‡ûØë5Ê•:Óýv®ü¼F¹RŸË˯".×»ûØë5É;ê@^ÞÎuv{½F¹RòòvöÙ}ìõåJÈËÛ¹,öc?¯Q®Ôçò½¼m]Ly½&yGÈËÛYW÷±×k”+u /ogÙÜÇ^¯Q®Ô¼¼ùb?öóåJ}.¿.Óv¿¸½^“¼£äÛtûÅ•Ÿ×(Wê@~¶ÛÕ}ìõåJÈé('®ü¼F¹RŸËËo¹¶ýæ>özMòŽ:—·s9ÜÇ^¯Q®Ô¼¼í¸¹òóåJÈËÛYïöc?¯Q®Ôçò£¼uv{½&yGÈËÛYf÷±×k”+u /og^ÜÇ^¯Q®Ôü˜nw÷2ç1ª…ùÜüýxV÷™×krwÔ|›n·Í}æõåJȯÓzµÝ¯Ç¨æÀ\ÞÌ~±Ÿùyn¥>•—ÿNëe7ÿ*®AÞSòòjÜ?’¨Ç¨æÀ\ÞÌz½¹êóÝJÈË«)ïqåç5Ê•ú\¾”Wãþ>¥“Z™ó6]ï‡ûºë5º•:_§å¸»Ï¼^£\©ù1]íGþýÅo‰Ïµë2-·Ù}àõšÔu /ï庸¼^£\©yy/ûrwåç5Ê•:—wsYíÇ~^£\©Ïå[y;Ûæ>özMòŽ:—·³nîc¯×(Wê@^ÞÎrq{½F¹Ròòvæ}uåç5Ê•ú\~Y¦ù¾»½^“¼£äÛ´—ß>ºòóåJȯÓ|»¹½^£\©ù1í×›ýØÏk”+õ¹|/oçåÎzòzMòŽ:—·sqƒ×(Wê@^ÞÎvw{½F¹Ròòv¶Ù~ìç5Ê•ú\~-og]ÜÇ^¯IÞQòòv–ÅýUL½F¹RòòvæÕ}ìõåJÈérßìÇ~^£\©Ïå·yº›ûØë5É;ê@¾M—ÛÅ}ìõåJÈ÷ò¿²/®ü¼F¹RòòvöÝ~ìç5Ê•ú\~”·s¹º½^“¼£äåíl7÷±×k”+u /o§<%W~^£\©yy;Ëqqåç5Ê•ú\~/og¾»½^“¼£äÛTþÞç>özr¥äûtÜg÷±×k”+u ?¦íXìÇ~^£\©OåÛ—¯ót»»?ñó˜Ôʘ·i=n¶ú¼F·Rò}ºÝŽÍ•Ÿ×(Wê@~L«ûͳzŒja>7oåÍìöë®×äî¨yy5»ûâ¸F¹Ròòjܯ£ÔcT s`.ofs¿P×èVêsù¥¼šuuŸy½&yGÈË«Yl÷ë1ª…90—73»ÿè.®Ñ­Ôü˜–ûÅþyŸ×(Wêsù>O×Ãý6q\“¼£äÛ´Üv÷±×k”+u ß§ëõê>özr¥äåíìö§×k”+õ¹üZÞÎåæ>özMòŽ:—·³¹ß&Žk”+u /og=ÜÇ^¯Q®Ô¼¼ån?öóåJ}.¿•·³¸ß&Žk’wÔ¼¼ÙèÄ5Ê•:ïÓ~w¿M×(Wê@^~ôXíÇ~^£\©ÏåÇ<í7w ×$ï¨ù6ÍW÷ÛÄqr¥äåíìî@'®Q®Ô¼üèÅý6q\£\©Ïå÷òv6w ×$ï¨yy;«;Љk”+u /ogq¿—×(Wê@þò£7û±Ÿ×(WêSùež§ËÝý6q\ƒ¼§äët?ÜN\£\©ù>]nî@'®Q®Ôü6Ýo³ýØÏk”+õ¹|)oçê~ñ-®IÞQòòvv÷ÛÄqr¥äåí\ÜN\£\©yy;Ûj?öóåJ}._ËÛYÝ/Ç5É;ê@^ÞÎâþ‰H\£\©yy;³ûâ¸F¹RòÛtÜwû±Ÿ×(Wêsù6OÛátâšäu _§ãæ~­8®Q®Ô|Ÿ¶«;Љk”+u /oÇýçåõÕÂ|n¾”Wsq×9qMîŽ:—W³¹ëœ¸F¹Ròòj6WýýÅo‰my-ël?ðóÕJ}.ßË{YÜ?óŒk’wÔ¼¼÷ê1ª…90ïÓzww9qn¥ä·évØÿN«×(WêsùužVû¿ÔÎcR+s`^§ÛÕýBq\£[©yy5»»Ë‰k”+u /¯Æÿ‰¿£Z˜ÏÍ·òf6÷ÛÄqMîŽ:—W³º»œ¸F¹Ròòj÷ÛÄqr¥äåå̇ýØÏk”+õ¹ü˜§åîNsâšäu _§ëá~›8®Q®Ô|Ÿ–ÃèÄ5Ê•:ߦëÍý6q\£\©Ïå÷òv®î@'®IÞQòòvvw ×(Wê@^ÞÎÅý6q\£\©yy;Ûf?öóåJ}*ßçòvV÷ÛÄq òž:—·³¸¸F¹Ròòvfw ×(Wê@~›öûÕ~ìç5Ê•ú\¾ÌÓ|¸¸&yGÈ×i¿¹ß&Žk”+u ß§ùêtâåJÈËÛÙïöc?¯Q®Ôçòµ¼‹ûmâ¸&yGÈËÛ¹¸¸F¹Ròòv6÷ÛÄqr¥äåí¬‹ýØÏk”+õ¹|+og|µ´õ5·å¸S¤å‡7þCï¸{ó>¿THÿÖª3ošG£‘úCù×v)?‰4Kº¿ümþvͳ¤õèå³-Ó‡Ö}~ÿ/¿|û(ýúóï?}ûüõ—¾Ü¶—ß¾|ÑîAÑ?Ãò{‰Ñ3|HÉ¥Ÿ²¥ä?g’’{ò²”È• )9KÞRr¹¼£BJΓGJäJ…”œ'”È• )9O)9+Rr–¼¥äryG…”œ'”È• )9O)9+RržSr ~K„”œ'Ž”¨• )9KÞRr¹¼£æ)9Ï]Sr &¤äOá>+Â}–¼…ûryG…pŸ'pÈ• á>Oá>+Â}ž<Â} W*„û,y ÷åòŽ á>Oá>+Â}ž<Â} W*„ûP Â}–º…ûrwG…pŸ'pÈ•š‡ûÏ]Ã} &„ûKÞÂ}¹¼£B¸Ï“G¸äJ…pŸ'pÈ• á>Oá>+Â}–¼…ûryG…pŸ'pÈ• á>Oá>+Â}ž<Â} W*„û,y ÷åòŽ á>Oá>+Â}ž<Â} W*„ûOá>+Â}–¼…ûryGÍÃ}ž»†û@-L÷yê÷[©îóäî¹RópŸåŽp_®V&„ûKÝÂ}¹»£B¸Ï“G¸äJÍÃ}ž»†û@-L÷yê÷[©î³ä-Ü—Ë;jîóÜ5ÜjaB¸ÏSG¸ÜJ…pŸ'pÈ• á>KÞÂ}¹¼£B¸Ï“G¸äJ…pŸ'pÈ• á>Oá>+Â}–¼…ûryG…pŸ'pÈ• á>Oá>+Â}ž<Â} W*„û,y ÷åòŽ á>Oá>+Â}ž<Â} W*„ûOá>+Â}–¼…ûryG…pŸ'pÈ• á>Oá>+Â}ž<Â} W*„û,y ÷åòŽ á>Oá>+Â}ž<Â} W*„ûO}†û@ü–á>Oá>P+Â}–¼…ûryGÍÃ}ž»†û@-L÷yê÷[©îóäî¹RópŸåŽp_®V&„ûKÝÂ}¹»£B¸Ï“G¸äJ…pŸ'pÈ• á>Oá>+Â}–¼…ûryG…pŸ'pÈ• á>Oá>+Â}ž<Â} W*„û,y ÷åòŽ á>Oá>+Â}ž<Â} W*„ûKÞÂ}¹¼£B¸Ï“G¸äJ…pŸ'pÈ• á>Oá>+Â}–¼…ûryG…p_RŸsÃ}ðj¸ïM!oîK>Ð÷? Ú./Ò×pßþôªüýzùþÏÖeº—ßH´O6?|²zW¯é¾åŒ÷ýé×O¿~úŸß?ÿöùÛ§ßú¬Ð¥ü»ûåò}½ïØ.£x_Ë¥²eŽ?e’9zòy²ÌÈ• ™#KÞ2G¹¼£BæÈ“GæäJ…Ì‘'ÌÈ• ™#O™#+2G–¼eŽryG…Ì‘'ÌÈ• ™#O™#+5Ïyîš9µ0!sd©[æ(wwTÈyòÈ\©yæÈs×̨… ™#O™#p+2GŽü!s”Ê{jž9òÜ5sjaBæÈSGæÜJ…Ì‘'ÌÈ•šgŽ,wdŽrµ2!sä©#sn¥BæÈ“GæäJM3GžúÌø-2G–¸eŽruG…Ì‘'ÌÈ• ™#O™#+2Gž<2G W*dŽ,yËåòŽ ™#O™#+2Gž<2G W*dŽù@Ù&2—wTØDzòØD‚\©°‰ô䱉¹RaéÉc r¥Â&Ò’·Md.侮‰ô䱉¹RaéÉc r¥Â&Ò“Ç&äJ…M¤%o›È\ÞQaéÉc r¥Â&Ò“Ç&äJ…M¤'M$È• ›HKÞ6‘¹¼£Â&Ò“Ç&äJ…M¤'M$È• ›HO›H+6‘–¼m"syG…M¤'M$È• ›HO›H+6‘ž<6‘ W*l"ùÃ&2•÷TØDzòØD‚\©°‰ô䱉¹RaéÉc r¥Â&Ò’·Md.ï¨ù&Òs×M$¨… ›HO›Hp+6‘ž<6‘ Wj¾‰´Ü±‰ÌÕÊ„M¤§ŽM$¸• ›HO›H+5ßDzµ0ai©Û&2wwTØDzòØD‚\©ù&Òs×M$¨… ›HO›Hp+6‘–¼m"syGÍ7‘ž»n"A-LØDzêØD‚[©°‰ô䱉¹RaiÉÛ&2—wTØDzòØD‚\©°‰ô䱉¹RaéÉc r¥Â&Ò’·Md.侮‰ô䱉¹RaéÉc r¥Â&Ò“Ç&äJ…M¤%o›È\ÞQaéÉc r¥Â&Ò“Ç&äJ…M¤'M$È• ›HKÞ6‘¹¼£Â&Ò“Ç&äJ…M¤'M$È• ›HO›H+6‘–¼m"syG…M¤'M$È• ›HO›H+6‘ž<6‘ W*l"ùÃ&2•÷TØDzòØD‚\©°‰ô䱉¹RaéÉc r¥Â&Ò’·Md.侮‰ô䱉¹RaéÉc r¥Â&Ò“Ç&äJ…M¤%o›È\ÞQaéÉc r¥Â&Ò“Ç&äJ…M¤'M$È• ›HKÞ6‘¹¼£Â&Ò“Ç&äJ…M¤'M$È•šo"=wÝD‚Z˜°‰´Ôm™»;*l"=yl"A®Ôté©ÏM$ˆßaé‰c j¥Â&Ò’·Md.ï¨ù&Òs×M$¨… ›HO›Hp+6‘ž<6‘ Wj¾‰´Ü±‰ÌÕÊ„M¤§ŽM$¸• ›HO›H+5ßDzµ0ai©Û&2wwTØDzòØD‚\©°‰ô䱉¹RaéÉc r¥Â&Ò’·Md.侮‰ô䱉¹RaéÉc r¥Â&Ò“Ç&äJ…M¤%o›È\ÞQaéÉc r¥Â&Ò“Ç&äJ…M¤'M$È• ›HGþ°‰Lå=6‘ž<6‘ W*l"=yl"A®TØDzòØD‚\©°‰´äm™Ë;*l"=yl"A®TØDzòØD‚\©°‰ô䱉¹RaiÉÛ&2—wTØDzòØD‚\©°‰ô䱉¹RaéÉc r¥Â&Ò’·Md.侮‰LÆyî&>PÝD¾™Ž7‘É*¿qº–ߌ½|­ü‡z»”Ÿæ³«Û2Ý^¾ú¼ß·ò «ãhl{ø`çU½|¬íÜCþïŸ?,ó˲q~Y6¾.ÿûÛ篿üÖýŸç~ùò×¼nïmý“¼íåwÏŸä á~}ùcüÇÝ›Üÿß ¿\§Ë>O?Ðùyr¥äÇt¿,»+?¯Q®Ôçò}™Ê/èS^¯IÞQòòvÖÕ}ìõåJÈËÛY6÷±×k”+u /og¾Øý¼F¹RŸË¯Ë´Ý/îc¯×$ï¨ù6Ç~qåç5Ê•:_§ívu{½F¹Ròc:®Wû±Ÿ×(Wêsyù¯îm¿¹½^“¼£äåí\÷±×k”+u /og;n®ü¼F¹RòòvÖ»ýØÏk”+õ¹ü(ogÝÇ^¯IÞQòòv–Ù}ìõåJÈËÛ™÷±×k”+u ?¦Û}uݯǨæsó}™ÖcuŸy½&wGÈ·évÛÜg^¯Q®Ô¼ü"÷j»_Q-̹¼™ýb?óóÝJ}¾+Ë«¹ì›'k÷Ô¼¼šíêº_Q-̹¼™õzsÕç5º•:—WSþÞãÊÏk”+õ¹|)¯Æý}J=&µ2æò£÷Ã}ÝõÝJȯÓrÜÝg^¯Q®Ôü˜®ö#ÿ~‹â·ÄçÚu™–Ûì>ðzMêŽ:—½.î¯×(Wê@^Þ˾Ü]ùyr¥äåÝ\Vû±Ÿ×(WêsùVÞζ¹½^“¼£äåG×Í}ìõåJÈËÛY.îc¯×(Wê@^Þμ¯®ü¼F¹RŸË/Ë4ßw÷±×k’wÔ|›öòÛGW~^£\©ùušo7÷±×k”+u ?h¦¼fÕH®Ô<«æÉ#«òŽšgÕLyͪ‘\©yV͔׬É•šgÕLyͪ‘\©yVÍ“GV ä5Ϫ™òšU#¹Ró¬š)¯Y5’+5Ϫ™òšU#¹Ró¬š'¬È;jžU3å5«Fr¥æY5S^³j$WjžU3å5«Fr¥æY5OY5wÔ<«fÊkVäJͳj¦¼fÕH®Ô<«fÊkVäJͳjž<²j ï¨yV͔׬É•šgÕLyͪ‘\©yV͔׬É•šgÕ,y˪åòžšgÕLyͪ‘\©yV͔׬É•šgÕLyͪ‘\©yVÍ“GV ä5ͪ™î3«FjaæY5S]³jäVjžU3å5«Fr¥¦Y5Ï]³j VfžU3Õ5«Fn¥æY5S^³j$WjšU3ÝgVÔÂ̳jž:²jàî¨yV͔׬É•šfÕL÷™U#µ0󬚩®Y5r+5ϪyòȪ¼£¦Y5Ó}fÕH-Ì<«fªkVÜJͳj¦¼fÕH®Ô<«æÉ#«òŽšgÕLyͪ‘\©yV͔׬É•šgÕLyͪ‘\©yVÍ“GV ä5Ϫ™òšU#¹Ró¬š)¯Y5’+5Ϫ™òšU#¹Ró¬š'¬È;jžU3å5«Fr¥æY5S^³j$WjžU3å5«Fr¥æY5OY5wÔ<«fÊkVäJͳj¦¼fÕH®Ô<«fÊkVäJͳjž<²j ï¨yV͔׬É•šgÕLyͪ‘\©yV͔׬É•šgÕ,y˪åòžšgÕLyͪ‘\©yV͔׬É•šgÕLyͪ‘\©yVÍ“GV ä5Ϫ™òšU#¹Ró¬š)¯Y5’+5Ϫ™òšU#¹Ró¬š'¬È;jžU3å5«Fr¥æY5S^³j$WjžU3å5«Fr¥æY5OY5wÔ<«fÊkVäJͳj¦¼fÕH®Ô4«fºÏ¬©…™gÕЙU{Û/fÕ²ÔeÕ.yVívLÛv½äYµzôò±.gVíOÖùý§Ÿ~ÿòù㯟¿}þôÛëÿ÷ÿ}X÷÷_ý¿ýõëï_~~ýëÿüåëKí_ÿÕÇ?ýý[?w}ù·äíÝã‡ÒO¾¼l(¯ƒþ0¿M^m~ûø3Kæ·O>P6¿¹Ra~kÉÛü6—wT˜ßzò˜ß‚\©0¿õä1¿¹Ra~ëÉc~ r¥ÂüÖ’·ùm.ï¨0¿õä1¿¹Ra~ëÉc~ r¥ÂüÖ“ÇüäJ…ù­%oóÛ\ÞQa~ëÉc~ r¥ÂüÖ“ÇüäJ…ù­'ù-È• ó[KÞæ·¹¼£ÂüÖ“ÇüäJ…ù­'ù-È• ó[Oó[+æ·–¼ÍosyG…ù­'ù-È• ó[Oó[+æ·ž<æ· W*Ìo-y›ßæòŽ ó[Oó[+æ·ž<æ· W*Ìo=yÌoA®T˜ß:ò‡ùm*ï©0¿õä1¿¹Ra~ëÉc~ r¥ÂüÖ“ÇüäJ…ù­%oóÛ\ÞQóù­ç®ó[P æ·ž:æ·àV*Ìo=yÌoA®Ô|~k¹c~›«• ó[Oó[p+æ·ž<æ· Wj>¿õÜu~ jaÂüÖR·ùmîî¨0¿õä1¿¹Róù­ç®ó[P æ·ž:æ·àV*Ìo-y›ßæòŽšÏo=wß‚Z˜0¿õÔ1¿·Ra~ëÉc~ r¥ÂüÖ’·ùm.ï¨0¿õä1¿¹Ra~ëÉc~ r¥ÂüÖ“ÇüäJ…ù­%oóÛ\ÞQa~ëÉc~ r¥ÂüÖ“ÇüäJ…ù­'ù-È• ó[KÞæ·¹¼£ÂüÖ“ÇüäJ…ù­'ù-È• ó[Oó[+æ·–¼ÍosyG…ù­'ù-È• ó[Oó[+æ·ž<æ· W*Ìo-y›ßæòŽ ó[Oó[+æ·ž<æ· W*Ìo=yÌoA®T˜ß:ò‡ùm*ï©0¿õä1¿¹Ra~ëÉc~ r¥ÂüÖ“ÇüäJ…ù­%oóÛ\ÞQa~ëÉc~ r¥ÂüÖ“ÇüäJ…ù­'ù-È• ó[KÞæ·¹¼£ÂüÖ“ÇüäJ…ù­'ù-È• ó[Oó[+æ·–¼ÍosyG…ù­'ù-È• ó[Oó[+5Ÿßzî:¿µ0a~k©Ûü6wwT˜ßzò˜ß‚\©éüÖSŸó[¿%ÂüÖÇüÔJ…ù­%oóÛ\ÞQóù­ç®ó[P æ·ž:æ·àV*Ìo=yÌoA®Ô|~k¹c~›«• ó[Oó[p+æ·ž<æ· Wj>¿õÜu~ jaÂüÖR·ùmîî¨0¿õä1¿¹Ra~ëÉc~ r¥ÂüÖ“ÇüäJ…ù­%oóÛ\ÞQa~ëÉc~ r¥ÂüÖ“ÇüäJ…ù­'ù-È• ó[KÞæ·¹¼£ÂüÖ“ÇüäJ…ù­'ù-È• ó[Oó[+æ·Žüa~›Ê{*Ìo=yÌoA®T˜ßzò˜ß‚\©0¿õä1¿¹Ra~kÉÛü6—wT˜ßzò˜ß‚\©0¿õä1¿¹Ra~ëÉc~ r¥ÂüÖ’·ùm.ï¨0¿õä1¿¹Ra~ëÉc~ r¥ÂüÖ“ÇüäJ…ù­%oóÛ\ÞQa~›¬AÝù-| :¿}³sÏo“ô0¿Ý×û´/÷=Ýß^ŽéX®÷öÁ.o^Ó½ü²ëòò«º×«—Ïõùóçá'{ Uãÿà¾?•endstream endobj 57 0 obj << /Type /Page /Contents 58 0 R /Resources 56 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 47 0 R /Annots [ 60 0 R 64 0 R 65 0 R 66 0 R 67 0 R 68 0 R 69 0 R 70 0 R 71 0 R 72 0 R 73 0 R 74 0 R 75 0 R 76 0 R ] >> endobj 60 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [70.7348 666.8844 104.6274 675.8606] /Subtype /Link /A << /S /GoTo /D (14) >> >> endobj 64 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [529.3351 666.8844 538.9788 675.8606] /Subtype /Link /A << /S /GoTo /D (14) >> >> endobj 65 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [70.7348 651.5419 136.7566 660.5181] /Subtype /Link /A << /S /GoTo /D (25) >> >> endobj 66 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [532.005 651.5419 538.9788 660.5181] /Subtype /Link /A << /S /GoTo /D (25) >> >> endobj 67 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [70.7348 636.1994 131.4065 645.1757] /Subtype /Link /A << /S /GoTo /D (28) >> >> endobj 68 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [532.005 636.1994 538.9788 645.1757] /Subtype /Link /A << /S /GoTo /D (28) >> >> endobj 69 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [94.6451 618.8196 165.5384 629.7236] /Subtype /Link /A << /S /GoTo /D (31) >> >> endobj 70 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [532.005 618.8196 538.9788 629.7236] /Subtype /Link /A << /S /GoTo /D (31) >> >> endobj 71 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [94.6451 607.9255 247.321 616.7721] /Subtype /Link /A << /S /GoTo /D (34) >> >> endobj 72 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [532.005 607.9255 538.9788 616.7721] /Subtype /Link /A << /S /GoTo /D (34) >> >> endobj 73 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [70.7348 590.6602 144.1986 601.5393] /Subtype /Link /A << /S /GoTo /D (37) >> >> endobj 74 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [532.005 590.6602 538.9788 601.5393] /Subtype /Link /A << /S /GoTo /D (37) >> >> endobj 75 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [70.7348 575.3177 236.0333 586.1969] /Subtype /Link /A << /S /GoTo /D (40) >> >> endobj 76 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [532.005 575.3177 538.9788 586.1969] /Subtype /Link /A << /S /GoTo /D (40) >> >> endobj 59 0 obj << /D [57 0 R /XYZ 71.731 741.2204 null] >> endobj 6 0 obj << /D [57 0 R /XYZ 244.3315 691.2808 null] >> endobj 56 0 obj << /Font << /F24 46 0 R /F33 63 0 R /F30 54 0 R /F34 79 0 R >> /ProcSet [ /PDF /Text ] >> endobj 89 0 obj << /Length 753 /Filter /FlateDecode >> stream xÚVMs›0½ûWp„X`„!§´¦Ó^ú1L.Md£#‰xÒ__„À'iÆcË’V»ûvß®ä[@~|kï{ûBß Zy½ÖQn}ÙøZ$Œ"/€~$'+».Üí½$"Ë+ù˜n¶7AhÀ‹` ­ô0šŠ)ƒØJ‹ßö†(ÇΟôÛöf¬ÄK"©JJË y ‚ƒ`E²"#Ž@`ßJ!Ú«íV-{œv,ÇÊ?¶Øk°B¾'\H (CëÅŒ †rAh£*ô„™ú{bD¬×‰?yjü*ôzÝV¸Æ8·r`¨ÆNí“㛲µ,J¤Ïå¨éQ÷8ýÀK 8;A*òW;Çq‹zV0Ò+|t|h.Jü 1‚µñ>êd‹sr@¯æ˜i-\£IKlÊ€ºç¶ø…¸/Å.æahËè=Îu0ä¤WñHЉ(WQëÝç˜sÄž´0Õ#ª+£Þµ-e¯ÆcôU²z(–¦åÈ¡5ª.9M ½F™PF;±ð„JºUë)…Ð^æcn3’•ÅÅä\ús”¬«M”N%ˆŒ×’€Ú¶"ùà0óß<ôŒµ££mD.æüÐ{M±4ÔEÍ™hßžó#¦>ND”ÿ¯•|ýì0Ÿ™2~æ´žWêJr¾_6¦˜RÒ®ÒÚ2Ãxɺõ2q äqiμ_V þ?a„ëendstream endobj 88 0 obj << /Type /Page /Contents 89 0 R /Resources 87 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 47 0 R >> endobj 90 0 obj << /D [88 0 R /XYZ 71.731 741.2204 null] >> endobj 80 0 obj << /D [88 0 R /XYZ 71.731 706.3512 null] >> endobj 10 0 obj << /D [88 0 R /XYZ 146.3693 691.2808 null] >> endobj 91 0 obj << /D [88 0 R /XYZ 71.731 674.2377 null] >> endobj 92 0 obj << /D [88 0 R /XYZ 71.731 674.2377 null] >> endobj 93 0 obj << /D [88 0 R /XYZ 330.1288 648.5929 null] >> endobj 94 0 obj << /D [88 0 R /XYZ 71.731 628.5033 null] >> endobj 95 0 obj << /D [88 0 R /XYZ 71.731 597.6191 null] >> endobj 96 0 obj << /D [88 0 R /XYZ 353.0134 586.8245 null] >> endobj 97 0 obj << /D [88 0 R /XYZ 362.6958 573.8731 null] >> endobj 98 0 obj << /D [88 0 R /XYZ 71.731 540.8321 null] >> endobj 99 0 obj << /D [88 0 R /XYZ 212.9899 530.0375 null] >> endobj 87 0 obj << /Font << /F24 46 0 R /F30 54 0 R /F34 79 0 R >> /ProcSet [ /PDF /Text ] >> endobj 102 0 obj << /Length 200 /Filter /FlateDecode >> stream xÚm=¯Â0 E÷þ íc;‰›¬|Š·°dC Þ>„Êÿ'@_U¡*ƒùêœ+3P~ 5cmópŒ"ä`w.yµ(¸8UÏš?[ãm1ˆ‚éCÆ©ÍŪÒß¿JcN öërrÜÞšß{e¤%ãg./ͽ*¯ûÇ®9]/Õ&ýŒæ– bÔ,Ê,#1ãÔ¿1©âP®¦«W²˜¥®\«tk¬ßFL/óîn]Oç­E"¶é%åo[w‰ßërMïendstream endobj 101 0 obj << /Type /Page /Contents 102 0 R /Resources 100 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 47 0 R >> endobj 81 0 obj << /D [101 0 R /XYZ 71.731 706.3512 null] >> endobj 14 0 obj << /D [101 0 R /XYZ 298.5799 691.2808 null] >> endobj 103 0 obj << /D [101 0 R /XYZ 71.731 670.2196 null] >> endobj 100 0 obj << /Font << /F24 46 0 R /F30 54 0 R /F34 79 0 R >> /ProcSet [ /PDF /Text ] >> endobj 106 0 obj << /Length 345 /Filter /FlateDecode >> stream xÚ}RMSÂ0½ó+rlÙ$›¦Qqô‚‡Þ‘èXZl ÿÞµ £àô°ûš—÷²À}ÀRà©¢ K)4[l&‚­èèq¢áÁ¸pš Jyf¥aɹÈ4ŸṲ̈fRpƒY¾³C¥¸ NJc¿ÝNËvÁï *ª5endstream endobj 105 0 obj << /Type /Page /Contents 106 0 R /Resources 104 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 47 0 R >> endobj 82 0 obj << /D [105 0 R /XYZ 71.731 706.3512 null] >> endobj 18 0 obj << /D [105 0 R /XYZ 287.5478 691.2808 null] >> endobj 107 0 obj << /D [105 0 R /XYZ 71.731 670.2196 null] >> endobj 83 0 obj << /D [105 0 R /XYZ 71.731 661.4448 null] >> endobj 22 0 obj << /D [105 0 R /XYZ 214.3071 616.29 null] >> endobj 108 0 obj << /D [105 0 R /XYZ 71.731 604.1188 null] >> endobj 84 0 obj << /D [105 0 R /XYZ 71.731 587.5927 null] >> endobj 26 0 obj << /D [105 0 R /XYZ 376.5947 544.4952 null] >> endobj 109 0 obj << /D [105 0 R /XYZ 71.731 535.6724 null] >> endobj 104 0 obj << /Font << /F24 46 0 R /F30 54 0 R /F34 79 0 R >> /ProcSet [ /PDF /Text ] >> endobj 112 0 obj << /Length 201 /Filter /FlateDecode >> stream xÚm±ŽÂ0 †÷>…Çvˆ±ãÄMV( ±tÉvºátÇÝ1 ‚x~´Uuª2X±}Ÿʇ¡f¬%Çh-9øü+~òh[pqªh=k¾ÌL—c° f Y¦b±±,¡úà!}*9(@úz+W¿ç뾫Œ­C)øªMw¸ ½Óùz8/Õ{Ú-6B1jve±1Õ?I©âP¶MûHë4î×[]ÀÀg_ÐGÌ$ó\_ÜDçEˆe$=¤òß6~ÆŒï åNÕendstream endobj 111 0 obj << /Type /Page /Contents 112 0 R /Resources 110 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 114 0 R >> endobj 85 0 obj << /D [111 0 R /XYZ 71.731 706.3512 null] >> endobj 30 0 obj << /D [111 0 R /XYZ 318.5354 691.2808 null] >> endobj 113 0 obj << /D [111 0 R /XYZ 71.731 670.2196 null] >> endobj 110 0 obj << /Font << /F24 46 0 R /F30 54 0 R /F34 79 0 R >> /ProcSet [ /PDF /Text ] >> endobj 117 0 obj << /Length 234 /Filter /FlateDecode >> stream xÚm=oÂ0†÷üŠíÁæÎ_±×~€ÄBoU‡B‰J‰Pÿ} N£¨Š<œÏ÷êž÷5¦CP’,u*†¤Rh`ûU |¤Ñª Abœ“Ê’KÍÌTX]Êà•1]ò‹ÅRP(õâþåBRyôw¯ìñPºúÌ…*=32×®‘ÕÛþØTç¦kêK~þáʲ¶ÏÍåÐöÇ]¾~·œ,»æ®zoûŽ¿Åõb©‚ .yKx¡Bràì9y¶yÚÜ”Åsó .—ž\˜M> endobj 86 0 obj << /D [116 0 R /XYZ 71.731 706.3512 null] >> endobj 34 0 obj << /D [116 0 R /XYZ 535.2205 691.2808 null] >> endobj 118 0 obj << /D [116 0 R /XYZ 71.731 670.2196 null] >> endobj 115 0 obj << /Font << /F24 46 0 R /F30 54 0 R /F34 79 0 R >> /ProcSet [ /PDF /Text ] >> endobj 119 0 obj << /Type /Encoding /Differences [ 0 /.notdef 1/dotaccent/fi/fl/fraction/hungarumlaut/Lslash/lslash/ogonek/ring 10/.notdef 11/breve/minus 13/.notdef 14/Zcaron/zcaron/caron/dotlessi/dotlessj/ff/ffi/ffl/notequal/infinity/lessequal/greaterequal/partialdiff/summation/product/pi/grave/quotesingle/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde 127/.notdef 128/Euro/integral/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft/OE/Omega/radical/approxequal 144/.notdef 147/quotedblleft/quotedblright/bullet/endash/emdash/tilde/trademark/scaron/guilsinglright/oe/Delta/lozenge/Ydieresis 160/.notdef 161/exclamdown/cent/sterling/currency/yen/brokenbar/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis] >> endobj 78 0 obj << /Length1 1647 /Length2 5568 /Length3 532 /Length 6408 /Filter /FlateDecode >> stream xÚíUgT“[—¤#EšH ½÷ŽiÒ{ï5@$$! HPAzGš4C0 Eºº€ ˆTA@@ÞA&z¿ûÝYwfþÌ÷ýš5ïZy×{γ÷³÷>Ï>;ÜìÆfªîPWà](),."¦0ù¸ú!L¡>†Py}aS §ŸÒ ÀbÒ¤ÜÜêp  …h¸ + ;@èˆËËË“rÔ¡°@8ÈÓ à³0µâúkç— À5ðOë‰yB<Ø  óBXŠÿµ£@z 0 ndl£c¨àÓ2´h!@8¶c?W0È  rB@~€ÿ±¸A!î _¥!D°\ª€ º°nÀ7 ì$€á> û !žp{H(qû¹ÿJ»ïý ÅZø`1,™1D¸ÁA0$ÕXãîy"½\¿b#@XõÀZºCÝü~•ôÃÒ`Q¤ ‚ È_±\wv ÄÆÆ’Áà ßiø!@Ï¿2Àž.pw0ÀÒ`¹Î_uþSõ.08ð·7ô·Õ?s!@°‡©¸6¦Û!ýÕ/:(@\ì}w?ØŸ˜?þû€ø~õ ?6 w(pzŠB‘ؾÿÊ"ÿ>‘ÿ ÿ[þ·Èû¯‰ûwþÓ%þWïóß©ïúÁ†.>ØøcΰƒÆÀ΀>à×°»À¿Èí¿¸ºø€Àÿ“óß­­€dýοÄP…xb—‘þc„¸ ºƒn^0öð~ï[@Üp0ÄŠüû|±NbbÃ̽@nÞ_jHÿ!Ûï Duôõ´­¬ÿ‡iûÛØÛHó@ðHVP÷.~Q©©AÁÂâ2òa Y1ìeÄ^Gy ©ÿMØßDâ­ \pPÀNLDLL€}ÿùûkåð7MˆÔýW™!] îØÖûçÆ/ØÍÇ*þ{`+ÿsýû@7Òé ¨Ûíˆ{Yϲ‘57 z‡4ì:;įõFÂÊêÌ‹QáhèÛ°¬èùJç‹êH‘úa…ËæÀOßa?—uVú;èÁ¼o3€ÛÏ™pòcP7æxZeW‰:–‘goXÅïŒëÁ·•³\Y21u,½ dn•„ïœð‡sú£Âi¹Ža¡n™µItmTõ8Ô5Eß7xÒÖNŽy»ßõõö¼Ý#À,3 æ'‘pßöÇ'ç‰ ÷ÍgR±µ¨ N¤1Ðo¨þ˜Ó+=ƒÃš-…É*;kÞÂá+wÌYÀgÿ2õ½¨õ¶žþ² ígð'’KƒhœWÛµ2UåÁÇ«Í饤G!Cjí–÷ùí¥ õ½‚ŸY÷ETLó}i”²ØM9à"ÞrkFÞôRغæKQCŒDÞ7Vœž=´R9ì·Fìl{ØQÕÔ½Ÿ*ß5n\sDÅlødJÙŠâ2[ûÅ5@t”5 Yeé?ÃG‰aĺQpÄ c!)Ë•¤4äöÊå¸ç‘6çQu@j_äcÌ(ßÃTGÉZ9åQã‘OV³Î{>¹nåÅ’l*W0±‰áqU:UxPß?#-¹}g"êR XÂ_ñö^iöá{·Ê àÐ,T¦ïvÞµ–óƒ¿5üˆXËC:|k-"i/‰mžŒ>ÑSôÄ ŽÆáS“–%…½£^bd tÄ9.%×j§&Œ³%ËikPÙÜåSêÆë¬1jj´Îóª9´|©_)ñüŒÆ¤†ëzrð;¼+ƒ–)’æ{lš¤ü#ä™ýH¢Â…ÍM»CXÉœ8„× ·«·oMf\ÉÚ²²î¢·˜º#/Ћ±›ÖŒyᇠ¾sÅN;¬èG=1â YÁùRö¼}ª«ŽÚfõ²S_öÚùn±eQÛ¬PÝAMOÞ•³®0{è—Ów87_K‚ ¸tnç&®*<¼Ç•CðÚt¹ï-“'Hý}·[ÙJ§x(W¢wóõŒjI6Æõ…gë ÅÒ:™ Ý×p0Wœ—¡©9I¹+*E2ÂQB³%bëöoÖGhž½{cò)õb~¬lDjëåÒ×S^‹#JXÁ²·˜…ªíOQ¹¸ËGG̪µ*NtEÔ¥ÖÑÖAÞ0ƒÖ§/[P—ÂÃô° ¯ÃÅ.«o_lV^®Ýá—ˆ¨CËfá{¦·Rd]-IðJ}ê–´4iL|Åá~%Aï†AöuÖø¾²È‹ÛàrúQöÔÔx71ÉDvMŽoKa­€pÿ»ÕײR¯pâ¥a)ë8Á¤CýÇ^ïzsFCSÚ,rÆ›ÜÜH¹8*³ÈBvi¼XuMü‰Õx™ƒ<^íÞ©çÓi¥g‹7¶žU Ô84§Ä[ Jš ØDùv·8½h”ëšä‹YD®GTŽ]M¹%†u£nµqÆ«èG¯H’ÔZÂf“1àl—W®Ðh¡£'¦›5ÛóÉ'çÔùHtÐ…‹»ªÑ#WÁu \Qþ;[ö{÷ß »ú°ã| 0ˆ_Lɺ/4Ù÷òž(dýné|}KPØDˆÀu~RÆÀG'½Î¯ç4i0{ÅNŠ“-8šIeÏC›“W¹y¾f¥Ä^« +~íÑcøù¹rp§W€÷G¥\p{!Ÿº[›Ÿ]G+[êè{çKZ¥ˆ!*aˆÒd•’•k»qËwüuŸ~6hR€jägå=Ž«:Ž_å$á•+|3Ž:ÌDhZO1ž%2OóÀÐc¡GïtE)j×öôõ)ɇr—É÷2kKV—â6y‹«¬®†fmk èQ£»”‰\g¼[<+(kÅø <ÒÄMáð Ï"Âu*|—g­â)ŠºÊ¸ð¾4×Ù'š… ݻӿ`Öµ·MVSQ©áu+-÷qµÃ}'óÆø@=éb¶æô´ÙÍcWÊ+K¡÷ '‰$SR–„œóÆàq „p³(´MÂæÇîNÈ->-±–M™¯Äãü½è‹·ëA4(‹&V=êÑ$£U ñ‰o’p ϲagU†©SþPBôˆÎðJùc &ÖúÎÄ¡Õód¾Ušf¿È9(m‹žRþH!2:&«qZôX-QüÑèä7ÄW"õxDÜvcüU)’;Z¦î1´Ö]#ÐÔ1„'}Ò³\•F÷O£WnçK*½«N€á¦Ùç¥E"“ÕöcÊü„2jì`Ž02>Rõó µXìzXÜÿ¨®?˜œ·ÜÊ}°.A?ÆTÚ2)ùÒ×s>›™k•gþq’èÌÔÉ÷Þ¢%Ä—øE50ÂÌðç}‡Ö3<‘.Q5È2á={‘Û§ÍIìf¾<åÞV%ÿpD´a¯ºQnp©Bâv›r†PÝÆªúS>¼«ñò»Y@˜d©){¸ÀûŸŸ£Å‹Ú³zd˜<8 %kFCßèžò† §$ûo¾ýØat&9¬vÙ2®0Õž¨ÊmO{@ÒÓHÏv¢¹,zõZzxË幈’»‹º:³x4×1Á>fV­£ß-Ö¦Þ¸ýMå&…¯È¸{³zÆšÒž^¯®ø#tØ6ÞÄ9°|î (¢×‘zß’.yú˜+­f0ìûųêäF<éÍNöW†3YË–‡lže„ "g[¶]¤Dud”ƒ†O8‰D³"¶ËLÙÇŠî¾5äX‘H,jzGÉ_ßy¡ßï:'µXD‘½¾¾[hž[šw¸MP!àDä`5uqüMnÏ'•êþiÀ“ÈØ̧¾¹ÖÂåÈi'UÊì­FAª¯ÒõÆ s5€rE•W©,ÂcùgªW«¸ ¤Ï븺ÝáarÅŽhËÝâÂO®žÝÇz×ûøx}/¸à_ †>uㆈTfù_;§0œÞ-'X¹á?Èá5&÷éþœ˜–õñ>Ò]¨÷ù{5åWZgv¶#;ôü2ãŠ^„„smʧäy ŸÛ¯Œ •êZ.F}ÞÙå!àÃûF6(äÖ–i#u)}#îKd°’ã>I5ÎЄ³ÕÛ”Eš"³RSZ+\:_'Ãu ŸÊÝ‚´žEø¬æçk¦x_’)ª²l#•¤lÌ¿LóöX˜@—§!˜n.¦R J+„­}MÒÅËl‚t$í»Éå\”ïpIR›Ö+«•O·´1+Í›¿†úgL ñ*lKå8ÌK7†Î;½¥ßò*t ìþ¼"Æõïb?A,~IˆtÜûoþ /›Ÿ6˜ëÞùÔ #:øð3ûQ^FõBT±ÞæJ/f¹Fú!W“”F³.ŽÏgõîH6ãi4`3(ú%|ê©2÷KóÊgg—Ëk¬t¢ù7©QŽm]Î~‘+ć Þ3;J óMƒ&Št¨‡‘ÐK0ËÌÉd™V¤ù]Ò›4ÄGoÞ•×—‡ÌdøŸâ]Å…©ˆè2™Óy3dY¹ù,¥JÇ«j†Ü]®,~JY¶Òš’¢gÄoØ&Ëx‘"¯ÙÐú$Þ‘Ä‹A©ïÍÌG£Ä.Æ…ÄšmŸ·j¼n¼Í÷J"Æ$ÉÝd¯„'îõ>êdf[/ž©vñÉ:¹k÷i*j7µhÙ¦TÈnTÝ‘óDÞÚ÷å ºø‹"EüªŸ¥¸@¾gþnŸ”–{޳U0D1UÐÒ@ܶd±$M3±8¯`‰,aÕã¾éÊö5w<_ÿç3Ô={¼Þ>›aǨ÷f6¢;I}ÉÓ’K÷î)ZkX½²tZáM œ!°YNù=•Rbæj£µØ>µæ v_X•¯Ñ.J ÷ν²Æìq’A’ :¯†b9MŒPæÏ’½dèXôŠk{¹Ó8\ÿq´@ìÎ;öƒ&aO´£ˆ¹n œ¸Štß^ùÀy³g>òÝüÚ|ØŽ¦ ø*…ÓÓ÷UÌDçŠggôgtò¦cÇ“%ì×§l2r[4l©íèrcÆ¡ÂÜ'ÎFݸ ó¸Ï\’öÁ*ä{R¦¡²‘`é%?·©ãï!CÈÌ¡È^€IûPËÇ/ÜYö/Éõ¶ˆcQkv›AÚ%^Y¾Ç(WÚ놞´G“Þõ©Îä<¥8ƒ¼¢h"P,ƒ+ü£«kÈ—o¢Éñ ïºîî³›¬Ìõ²VG¼Ø/¬ý4Óe~d©9Nž;¡gëL7NûH·ìI?× ½‰¶NöNöÙ¦Œ2ˆJ6hHúͽ÷1s³Âöåozû)Z4_ Ë|Ð!¢r°æz9ü¦ÝP¸£xÕ—ÃТ·úÉLÛzÄ~ùOË=…FÒÝ_ÛC÷‹á¼dĬ’¢lÙÅp´ûeÁ±ªg¯”x@÷wIØY„Úðèuß÷¾óè‡ êÒûUDÙdÕÅEð ¼Ò!3ªM”º6Pð˜ÃÿËïª ž¬<ÌSÀà7ŽhØ}l¶˜¢ÅÕõê‚ÖgÇçãÏ^‡’§‹Æ‚UùŽÍ# kN´TE9ðI„;æ™`ÑÎmâOŸdªi•óç%érìtÇô¢,/œjWߨùƫѤ´’Ín.—]XîÜ%sç#†ž;Ú=m+£÷9ÍÔ‘zÛ¨"—³n®ó®Ü¾m=˜R~Ú‰ÝDz©÷[‚SƒÖ„D‘Î7t’`&!Ÿ¢VET×óJ&¤|7Ž1ÍÀ$¿z$”(º^dæÈeR@0¥#¥ÿj€ß tc*0Ëp«ÍEêi,1ûP #].¸·¬$‘ûCÁµŠéÄSOwˆœÆéEµ+½oj ‚—ýqéݱ°beqt´©EÙ¾ß ™Ô&wÈÓ]F}…‡B’ÄîtƒEé¿L”Lµ2ï\‚$Qm³äÛ‡šÕéžr5/Î6ŠDë¶.+`BhêCøób´™A³éWãÏ/¹ÅýÜ ,Á7ðÂDÄt·y«Å˜—–Ç¿D?Ú­UϬ4—ÜxXœL–Ë1¤" ú9 ó2 ­F:™iŠeû0vtLÖífŸ¸±ðs—á?Ô‹îq’ >Ë-}B悤âúi Z¾ÕÌñš^2V®|½“Ö‚à"öy'×ÍÞÏzì¤6,¿"Q¸××xÎ0´ÃÇTô|áƒÀ›:pM êÙ*¨Ð|:–›Ú´/‚ip¶1€©;ÀutÚ)ïU§œå›I>—žÌ››3æpž}8›ª©!A ¶ðeƒ’"[6ºw‚ jDQ¥lNh;sðuBhw„ø‹ªÛ¢l–D½Æ›÷õÄâ<›ðé‰dΞ $Üô˜ú>UÉE@ìñ“‰HeÞÂ2* Þ2jgST™Xþs(è ¡Õ²ÒÃCm]î6bhª«¥É² ¾Ü6÷k÷D~¸¯oV%}ÜNÁ@o¾R¸wN诊lù`ÞBMz:)ˆóe½;S•bR_7EN"ÞŸ%^rÉÃ$­–â0 µT5’²‰ÒgÍÜ®ëG}3[t³¸æl\â«ßIßë/˜Xí÷# ª¯»HpŠ#[£¹´Ñ®ãÄã·}îäüRÆ">+7¡êÄfK§R¼oþqnNÔ <äE™áKBúHŽælM©J§–I¯÷’ñ™>Û“Ú‰{§‹½¥ˆÇ$l¹¶ª‡oôwjñÔæ:ô—Å~r_§6£~)nßÕë4€ó=™L.¸dÝd¥'»ódß<þA4Ððéì{œhß}E.-ŸË÷:…xÊ„Þþ!`‚³ÇÔˆäšy8J“f¤tíNÅþŇôÿ þO¸.p$ÔÇîMúØDd"endstream endobj 79 0 obj << /Type /Font /Subtype /Type1 /Encoding 119 0 R /FirstChar 49 /LastChar 118 /Widths 120 0 R /BaseFont /ILKHWW+NimbusRomNo9L-ReguItal /FontDescriptor 77 0 R >> endobj 77 0 obj << /Ascent 669 /CapHeight 669 /Descent -193 /FontName /ILKHWW+NimbusRomNo9L-ReguItal /ItalicAngle -15.5 /StemV 78 /XHeight 441 /FontBBox [-169 -270 1010 924] /Flags 4 /CharSet (/one/two/three/four/i/v) /FontFile 78 0 R >> endobj 120 0 obj [500 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 278 0 0 0 0 0 0 0 0 0 0 0 0 444 ] endobj 62 0 obj << /Length1 1626 /Length2 9443 /Length3 532 /Length 10307 /Filter /FlateDecode >> stream xÚívePÜ–-Á%@@ãîîîÜ¡é&и{‚\‚C!¸; î6äûfæNÝ7ïÏÌýõêuUWõÙ²öÚ{ísªé¨4µÙ¤¬¡– y(ÆÆÅÎ) P;Yº¹jAÔ¡Bªlj k0àÙ·NG'ãÂÀPˆ,胬² +77€KHH uörÛÚÁŒºZúL,,¬ÿ°ü Xzý‡ç9Ól Ð?ÿp9B@Ø3Äÿ8QÀì@°# £¡i¨¤®`TP×(€  #@ÓÍÒlP[ ® &€ Ôàø÷`…Xƒÿ´æÊþŒ%å \AVàç4§Èù‹à rq»º>ÿ€]¶.@ìy0( ±rt³þCàÙný‹³ ô9ÂéÙ÷ ¦ u…¹Z¹€a€çªš²òó„Ùaj»‚ŸÝ¨Ís¤5ÔÊíOKùžaž½0 â €wË_bü³3LÏ$€ÖPˆ£ÀdƒÎ¡…=—0þÏTfÿ׉ü/ø_"ð¿DÞÿ¸ÿ¬Ñ¹ÄÿÛûüÏÐònŽŽê@§çøû;°•ä|»@ë¦ÿ,Õ_ä9ô5¤t•Yþ›Çõ¯@Íç%€éx9?sû÷VÔ Öÿyø#- õø°qñ Øxx¹žïÞ3!!~N¿ÿ¦ä_@\ÿ8«a.`O€ñsßœ\uÿïßœLÿ Fbµþ³6Ú0 ÄúyÓþÓðÇmåæâò,ð_—ÿ¹ëÿ8ÿµó 'È }nj%jŸ–™«"Îé–5îîäBì s.®Õ)øøÚönU¨Ìâ¾2Œ½nTøñ«×Ôžóæ2óV'‘#CG èw¹ S×'¼%ú–­`³b¬ô}ýhŸ£IÕ$#~N½­µá7ZfE÷(¯G[x\ÐŽ®˜iÜ?¾¤½tÆö·J­‰#lÅ­ƒÃ¯ÊßÛ§OܹºdèèëýÞq‚ܵIÆ’÷‚NÄ ‹>*ðm6™„‘n™O,qw6¹5ážãž»Ô!ÂZK ðWÕŽÛ—]$8‚8æJåðð>ñϲ[ƒu¶èbø»>å©5ʱwØ ¶ç}ø¢2­Ð˜Jö .AuÀ‡T+N9[íROœó¼?ŠUñG1y¥“¢Õgï,Ñ“Ò%UBúð´:8Ø:Üãá~Mý¦W…‡l¬Ñ⾺H–Þ7:ÀW½üž¡æç÷†b8ãAÉ­b‰ÆÕ`æG”¹ñOÂè6kð\Ä)ÕòàL\”Á…_™Iu¢m /½›ñ[ìÉêÅHpJl‹ä\7xD¤\fËKˆÇ½,•„Jö€ÆÑât_ûð”MÙ“ò¾HÅ€ŽIȳ3»3¹:D«c‘·®ýcbbè#Ù°Ã+´¢ŠžMŸ†ò—ÕÈOŇö»ä¹µ? »ÕqZt{¡x…#(t y‰WIÏ7 @çù܈ôϹÁÏ ¯¦ûFÌJJs{…¦´“8'_7 Í3’v°¬»›ÊžSEUX˾[ºòðà¼õ둘ÚíÃDßÌNé "¼–»ò-3ód£Œ0-qDD§‰Pôkî÷ÒWÚQ:H”ù˜M½øùuçÅïD½)ã¬0Ý“ªƒ´>F«Z÷ î2GuY’öü<|Öõå˜a™prMT’Œ&Ò@I›D6KÖêç?µð¨ŽQÜ©?ð|ØHY§öwúÄQ MÝ-5ßÁÌUã§äÔŠ‹Ÿ=ܘX±Ýƒ¡üvÆ*gë¸Æ‘·Ž}î´)Ýç‚.µýðx†Ýì o•*"¹ùÑß}¢¶Š:¤óGŠä®(Ö°«îkí¤¡>šw3ÕD¯ uÂ™ßØŽŠ3i¿¿%˜|­¨æš­è§ä·7{ õ6 žñK ÊøaÑÓú ¨À¸Kª¯-Î[GPT¨Ù“NðC¬Ú^$ {cn6¿1¢(’{Æ ó+/Òùýñ´¹†¹ÿ”éé`U°_Pµ}¹M¡ìµ6êÍÔ+ÆqÓÅ"¯Û-yÞ|ïµÂbO~#Ö÷ ÖhF}nå¬?‰T¨.}¬¦Ø£ˆñ9·V„ˆ`à ‡¨3ÙBpv©8«eTˆºa²;ƒ†mQ~ìÃ` vŒ§I÷ìT])r^X?É»¾‰¬‰ØóÍËFÌýÎ, (Ý[¯3Îpe´®|ÊDË™•ÁPï (:øôr~¬ÕNÊh£ßñ{È÷«„Å73“áü`N´/>ò*ñå^pAhôà7ãÚö:¢¼–®0â/.]ÝvàºF(BãàRÌ…Šs§™|ƒµ6Aƒñ5†*>¥ 1Ž ÉŽä€!€^­oq_mé©ÈŠfÉÍaû2PJ*Ðt¤nhÆÚ ØCX›Þ-“gƒƒ \1ë€`¾E“ôÙtögQ³¬6µžßE¦ˆ¡¦œ – ÄIítèïQR·ZÿŠ•2¾×ã·„KÈ"Cé;ƒ™M5AR©|gYÐ¥‡<9p¶ÖRC}ÿ»ïª}iiw ¹ü×Iõr‡ *Õ±&~ˆmîg—$“¤$DS òò8õšh(ÍÐG.„É}hF÷€0FýžG_Àu¯áÖ¿Q”º»½· Ü“èFèWˆÂ&—­šÃÌ/½(ÜRQ7ý¤`ˆ¬â¼q†Ù¬ã}€Òɹ(SCkžE;AÊu iyôtï~®ƒ¹«ëúD,è3K×çXé#P:èÍïñy,TQ=} ²¤0ØçåwД®Û‰JïÀ¥[ ÒÅ@Ñ o}añý ÑÈþ·LB94OæÃôX¢l Š²žcÂqå~Äÿõñs>½ˆÿ«L^™åMÃÇŒå~žÎíMÜߊwô•é#£•)uäIMžhkõÆƈf3ïŽ_= »ˆUwI¹ñZE¶q±a1×͹V±s~±ó¥ƒÛ˜/b‘pî‰?C<í8âça‘· y'†@¥4Ò’UmÎLõ:ÆP€¡l#(¤èëðÓ‡ìú´RKS¶€ÒÛÓå^ñˆi¾|Ǻ´* ᇠn§­_·×A –j¾q§]PÑk_‰ÄÎÞ™™¥Ôèë2i͹5"SN7C%œ9xˆü¦+v˜Çyâ ý)uýEuEŽ ùÓRb6i%Þ%ÅÖt§ø¤ã>¯ÿPË(œnåKù‰<+LSaå$9£uR’ÅpŽÄ*aÚ)®47Pú~‘ ëºoxÇÌ–´÷Bû|LÄëÑaMöJbäAÜgxèkØø;V?4uXÚ¹ùSª”ŠQ|Ór5ˆ9Ñqcß„áëÊ‚$í~‡Xð÷ìµr<=XiY¾À O"’*ךÀý7€7žôÛ?aÇ&”d"R´°Ï1jz½ãZ‰DÐ]åý8XŸÈæ)ó>¤(O¤׆Ésˆh áÒIMSè«Èž ay ìHxC æB{—•)°¨SÕ_k³…ÿ‹‚ÄÞ|àgæx¯¦…¥šSUð:;ù´¬÷pžæ˜1]óǬECß,õÖYp3zó¡+oGÍ}ýÀX´•'í˜buÙŽ-¶`óÇ̦;2–D¯>µÐ ;/ÄJ™Ç“#lÍìdá¶ò¶Ò½… 'Ût—òNP,¸º@)²*.g ŽÄA½é,IÖø~ØøF3ü\¿þK³•òVŸá[WNÙiÁ /goEN}S8…Á¥)ãxÎØ@"ÑSËÏ¥¯±©Ý§ªú©§]3©9}¬JK¾ó«1'ÕhC­ö_!ô´(½»ª§cE€}úgROHŒqÀtI1´Õ˜²tŒ ¶ÙXŒßVìYeU¨>å'YbTèo 唸~í§[¤™w§‡Šª×^‘È‘^à’ìTA'óÁæìÜ=š¹&¢Ã’‚a ÛÇÓÐÏF`€õ÷ s8eB‡ŒTlˆ*>‘w9Ò…¬o+>ÐÂ? ¦?úº×ssu[ö-mÌsYÓϺøJ©A вߋé<ð¸™ãJŒÎÍÞ·U R÷äùL‘;EQºõÉð@ï²bé^‚¼r÷‚߃٠A¦AV§äa}+’.w@«“w~®+ÁSÈ®X E²TÚë³eÏC5m5™† 1 —Ù\L%÷‹îÚfQ7²ÞLØÁš5Nù­ÞÚîdˆn š¯7,ÏÈÝñ£í€Ñ›÷êoÔª¤0(^Â%±áÑÄÑ–îªÇp…Pônùâ²FéÒ[3½¾j”Xó.#²kSö;¾“÷ –qû=#øV?ÇEMx+v^?I– å•›mO-}X$“îÛÃÜb*ÁwiZå›4?_¯­ôíÚ^.ºxÜ‹‡ Ì•f{Í¿€Pêͺ%óБӶ¾Ôý}m@7%ÿ69Px•Ô>ŽÎ4–‰ÚTEä5=³n–:/ˆG+Žg&÷Z|%ÎL³a¿Òô«à—A<- µÒmÀº°ø°G¥þTO]Ââ¨Sm“ÅËþ°§’ÚMCÅï¸Á*Õ¨O?ú„8·ŒE?‘o…U¬€‘l_&¸ÿ&Tù<]{.ªÑU£LÊ‹œƒ*÷áÁíbŒ-e‚(Ûñäå$ÙÜ0þ–ÌÕ*H=íЧ–>1^j϶_WS‘ž:îù.ÜÐÀئbç |G zAÿi(Â…t}$íK‰b˜×‰ ~CïFÍØ¿äZûnAòÆîˆÃ>CÚÀ¯W²p´„­í™õÉÅõio¤0ƒ,ؘêý“†Ëˆ…Û ±DB­4â1^ÞU"¶ú³µ‰ªï„l~í H{Bô™Éƒ{RK+Zà Áð+Ÿm3\ •æÕ$Àˆãýw–3 ¬ÚšlRÑXÒ ªj‡]í3ÑV˜X'¢m0C‘‰¡ßÄÜ ¬Þ…½†^N}Ü’4åLJ- ò€ÖW´ª ÷)Y†t!Dê…ÿäil!L²õ4ÀöŶ‰ƒ[ÉòüI'›}… Fã.âÞtF\œªjÄôÍ•ž²剜àÎ6¿þc nw¿Å3芉1…¥UZr¤'5¾4Ž}öRñ‘:lƒ$ÐAŒ(îãTàL…ͧe¿•ÍÈ–eN€q®cq›8>?rŠWoÌM¾µ0•±ñg3ÒSß:º˾Ycd¦åÞ‰;×ö˜EúÞÄù¦U ¿>Gö) 2£ñ3z ¶#ùT¡s4hX­5Æ"u †×“¥9¹Î/3:0ÒÉ.tvÕ¾@ ÆàòN·ólFö m=Ö+ˆ>ª†Ë«œ¼ÄG$hG}Š\Fž©zºíO8Û ´'Ô¦si0°#y³w(óùJ•‘Buׇ>·‚A²“yã4ç@» £™ ‚6îQ†3…ºÁÁ•ÝÈq=õ…œÕh¨‰f \’îÏ$Oúõ4÷%GzíR¦Î÷™ÃyaôÁúx|ªêEN›/6î7‰ ]KT¼‹þ¬±ž/kk‡S8Ø=а}‚ƒ¸ý…ÎÅw%U™®?2Êç°3la½ÐB§…j'¡‘ˆqx.Àýxè\nÿ€ÒD¤è7˧ʸ’,Õž£rÉó¢Ð"¯;+±Ïž³š—ÁÑ ·ì+ËXÇfñ²¡˜ÑqâLæGdqàN¬î¡s [½Õèz‹~æÏ§ÆUQalÃŒ‹Š¤¢__£Œƒ_ÕTzRÒúñ*ð|uqÐð Òʽ²áÑ—}!ƒTVO¥x”+JöÁÔÉùªCÔGº°3É`ݧ™aéÁÞ´ý¸x·þ!žQ”-»ëa’„äÍ·ßòÕ¢±hÖÖ¡ ²cݺÖ+µ{ùKÇ' o–«EÚWWÙGUeè9|Ã;?®¡öäo¹÷àüš5ÚLŒÕF™v©›̇¶òPnþ˜‡ÿò+?ª,ظæ÷RYÄ¡_È(¹¤,÷CªG/î†)†0è+/¿ëFæ{Ä–9Ï"-wÎ=Ö Ø2YÅI¢3¸;'åaºKäQ]TD&˜>Kƒ§½r'¶­»$Þ¾}„´¼H!nÀÏï|Iÿ–ßüÏw¾ke&?…=Ô%AÿB…IÝï;98Å'µòu¾EÏäÂc?~¾€øÌ(u%·]±œ ¶[ôùôŸ\£ÌÂ1hÌß»:¥½ÇÕYÓÝ•0äÛSk’òz¶‡šf{I*QhH~:µÚªÞY z™‚Ä;%á­!ˆñ’ò_Ç‘.<€›š½f£1 |Z÷óŠÜLÇKµ™MøãzB»%º4E4÷ébÈ“F˜›×i9'h ­÷>…¦<ø6Û÷/ÏŽiðv"‡oÝHªsäˆàŒ[èg¸/1] y’'ïu×3 €+oŸ²²\÷ROCsœžÄŽ "ÞH‘OŘìm¤~húžÚ*'~kì1CÖR­9_¿Cc5b¾LRBN¼÷?5Ûêmu"ƒÓ /.C<ö*Í—buÀªVäqÇ¿@éÌÙùÌý¢ÀÊ»¢ø­Ã:f™Ðùkà™!EÜ:ªÈ•I¸•wjbAˆç.q?AÚÑåM<µ+³RCzg±GŒcmG}ÀfÔ*ËJl‰¶xýSRÀ÷ ³¢Á3«¥±Â_súø}$L€F!Ô™'írå',ˆï¾A«Ö\Ë­MÓŒ3Ù¾\îüÀºzº°…6·jeÉ#r¤dºè%Œ‡Á ¡_ÿæÔ¬T_]d´Ÿ‚3d¦ËÐì÷£•G‡¸¹xÈ¥g¯»Å1‹ì›ˆ R0E6ÇRÐìwòÅf@tœ³ Iz=/?ñZ%½§#Ã1ÚhKÞ6]×/b ‘ÒH+Aqô£ ÒÉ몳yH¼‡ Ùf¼yyO\=aFÿ¤ŸBë`(‡ÅBÎ/¹úú&åüs´Y–¯hP"œÚeÕº,ˆ¡×kk½šÁpÖ}WüÚ:(8ŒŸpx•=Hd|W})EX°ì—z@ö]ë•&‚ÁÌ‚}Á’©sñ¹0†Öiß1uP¶;RRË¢r²ô:ß»ÇØ‡®]:¸—dÊQ¾/S¦;[¹îÓ»;Žî–¼ ¸™+àùb‡gÔ2¹©¯%M⨸™I‘n™Ç\ß¿÷HªÂ¿ÀÿÎ%/d§j³}Ë•œ«ú&cÛP7;á¨H­0ï[W6W‡Û_41µbÛ}ã¡üÖql˜È‰'áa€I@A©6Ã\ð%EFCŽ’ˆé„Hè!î²1Ü– ƒ' ™4Ë9V7Z¸‘ŽÈÐzþ+ý|¸JcŠúy|åRÕ%+Ã1ET5rið„HñêS3ú°YŒ\Šºü^S^ðßÂ'{Â}ƒ,Ó"?zPÃp­Í°ðPTb›ô)ñ?e¼F·ú¨¥Y4‘²’zٰ󙬾%häÎþ $ðËßç€Kµi©ßêô-Am ë«`"ɱDÍ»ÐÞ<þªCE§wI;òHqS¤À`œO™_=¹êš4å4Ñ¢lô×s±GV}­©ðó—#^O„.—â1?MCÕÇc‚Ѭv¹ORs‹=°y„͉ n2?õ´ˆqIÑè}Ýõl^xëkºõë INY©‘¤¹?Ú2Õa®yS?;®¯øP,½ÕÎ}â]øþCh1Vâôl$¶É¯íà†ÃÙñ–íó[¨ô';ÙG°}Gò%KÍÞ¨9¥¯ø–›Té@Áhhp…ÊV þߊÖ,‡Õ‘aßz½ñú~Tª£hÎÒšÔ1NÊÍ"³ÄÒ§œ%X“$¤œMêùáY@?¶ý•GÚrMZßÚq×àRîr¨†aîŸ~$pSµBÝxðâŒñ6…KŒòsè¾÷Mõxizð­;YP²÷#·ÛK×_=$Ï) ½xc”k¹k%ËV»RNT|Üuø–Òd ‹¼û%ß N¨U3¯/bûY•ɹv΢M‚5ž³³:¦¼T›Áñ`NyE>Zž‹° í‡fÒÆ(2äÖ¹WdrWì!<šÑ§ ß G£½H Iª‹!uë*’4µÂœùŽXóÆò‚Ï'a„oòè§õgWH55kÆ?$Jb‡¹•9½Ý¬Ê©ÄRjÆ&ÉLeÓ3pHs7ëà$ÔgªØ ‰w¬nŽ›ˆkŠ Žà~‰oV§%H«jÉDtŒî¤r²Èk)]n:®øR20ékAgi,#K°Ta+½â£„]y&%¨6ìku4À%³æŽoÿ¢ßÁ´èàÔ°…4Æ®}ÏR™ a*¹jK÷}yª¥ºÄàáv¦º{k™=þqœäzç›4=\ˆ1)ŸÛv‚î.ï>R¯ËŽ À½’9¶‡)»Å’®ag¥ëè烣FÈ;º”h<ˆ &î#ý ”]ˆõj¢Ÿn,7¾iÎøŽ9¬Þr fcŽÝ€E׬·[‘®n°ÔÕÃ"}šK`³à¦BIŒ!ˆ<-.ò!u©cÑêµ[AdˆÊ €œ€œÅ+O„›@(ïUÝÇÖS"&}£C1ê¯çæuã‹ý[ÊrwÛZŠä®u¸«H™ÏÛYÅ WvÜX‰ù*ï*‘.kK'F÷5BÞi˜¶¿V…ʅ{{š*“‡Ct_<Ö”Þ0Ç­d£ë×ï^7–}¶¨ÚáêùˆóÄ5‹åÕj“Ž’’M´&*ëΉdt7â‰myç+”M.OÁP)É{_L˜è»¼*¶W,Ýnµ „¾Ë×:¿ „¬ÀšLF[x@¤£òèKÌ…r¸ºª0·[§…a¸ræ6‹,@2õ7ž ´õÞ”[âL\“²¯¸õm•q…ùï™}}e^öB¶< ðÏM:Kù§sL¹y°¼¶ÇYÛÎ÷6¦š}_¹£¤ìƒUƒ=ÑZnëT=¢«êu¬c¶ð{7[‹ñc¿ŽÎÎ1-îÔ°âÑ&¥|hc-rJ¯B‰„ؽ-ø½/˜âiØŸVa|#ŸãͪÁ-yà·çlȉ¤­0@.øj2X/zÁŧ“LûÝ` •ÚÂè­F¸t†è5ÒñyN½ÃUf ÀÜåh`¤0ÉÕí·ãRJÏÒŠƒ-U?u›P{b·QN«ÆLµ¹('ïÅU!Êû«»½0€ƒ+î™) ô K(G¥¨z”Úuö°XâÛ^U¡C×=çN?¼ ÷§ Ãô4’ x,¼çß^Cs!á|¤™úTL¤`êö»IðÕMTqþaGe|.Ä–TÛž•û`Õ$Ëï(N WÑ{•Æ‚"Ûyù¯N;œ’óO÷DI'´(±4³Û·øN«ÞFÌö5þF –-~dL¢}W_àItˆoÇ‹.=QöÎ>!UÓÆŽÈšªØ|­#xX÷}þ^IK»–X<[Kã·‚ .âqz"‚Ç̘IûÚZàù!ûŒy¦æ\IðÓêa/×&­4Ã[y¼W`_¹&aSt,$Åtæ J¿9ßù˜ñK‡=qã–#ÿoçìuô¡¶‰ 5‘$ªµ£¤üžNÊ^£‹yÇ3mÌÔýù㶇_évi°¯Òr};ÈÆŒí"òEîrÂ[Î_ˆ’ ÷6î6¿Ë˜ÈCúØœ8Z*¬(èec‡dž°ýöwøb/S;:s·Z#½-›Õ(ü—ª£ñ˜\…tF<¶€rFdÏMôî6à÷ÈÇœ!c‰ê‡Û²DÄ ù yÝØZNb­ÉƒrÓB³ÁêZ•tö9le %\¤¯`ò`7 \ýÔö- (OÎåÄçÊŨ¿¤Ì(X»'fˆzöxÐñ,2yTyã­´î[ãÔq .ö,-&¿pµ†E¿¹­wWǣŠéx1ö¢›­ê÷Ò˜h¯îÓàãOw§Î¢C–q 4ejCäʹJºlõ’ÈÓôv„YiâàßÄ<»þ+XÖì$^µ‹f¬Œ³ø•ïæU}¤ÆŸó˜\Ù ‚»Ôíhƒa'QÚ“€3Dv¿vé}²™JxK¿£­^±Jz D®Ý­èV¾sI…Â`íÃ)EâMXœ››W(+%éÝi´.,”õWÑÀªK¢û>[ï½ô„ç‘‚A¤GÒûKgw ±AwBK“Ì3àñö²/ä1näS|®ýõÑRØí-¯£‘Šhß!xë[Az0y²ÀNðµ(†‡#ÆÛ£eÈÓʬ5è–¿ò¼ÉxYu¥'M7¦â* bÁž¿ÁÛÙ^å’)x³1hÑb8Ìo…\“%ì2±P·°¦·«@Þ¥î›Â3€ò=± çýßx¯n!KÖX»KÕº»/©é‚Î>DÐîMÏ X£éŸøÒ«t†Å-,iwMAWì>ÜA—ÕÞ—[‡Ž£A¡\(/- ¤œ ‘Ôå'ÒªIý3ˆ[RÒ(½ç,Ò9·tü7Sa±Î¿lõQ¦)zé¶„{˜ dêÙZ9wÉ¿~U~qïUlµÁlrY–[5J¡éiYpÆ8ÚEJÓ£ªÊÂz?5šjÌ©/RY(`ÆÆ·!â¥1{¦O‘i—ÌUù¦§|!+Ååz²pÂöCC­cµ}¢{ŸB$A‡†ÕO s$?×µVnU+Äuó‡mÕ‘ tªŽ+ ã©F/äJÒçÜÞùºOþŸq„Jj‰Â’MZ \„vz²°G£gÅmУ+?ZBº}_üWP‚Ûh5…ãÅe|B2…ìfsü®?Bü“‡Ùë©c]¼4rÊK”Õ9ÿ—ôÿðÿ€•#èƒ:]Ðÿ <{®…endstream endobj 63 0 obj << /Type /Font /Subtype /Type1 /Encoding 119 0 R /FirstChar 46 /LastChar 121 /Widths 121 0 R /BaseFont /WOATHJ+NimbusRomNo9L-Medi /FontDescriptor 61 0 R >> endobj 61 0 obj << /Ascent 690 /CapHeight 690 /Descent -209 /FontName /WOATHJ+NimbusRomNo9L-Medi /ItalicAngle 0 /StemV 140 /XHeight 461 /FontBBox [-168 -341 1000 960] /Flags 4 /CharSet (/period/one/two/three/four/D/I/P/a/b/c/d/e/f/h/i/k/l/n/o/p/r/s/t/u/v/w/y) /FontFile 62 0 R >> endobj 121 0 obj [250 0 0 500 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 722 0 0 0 0 389 0 0 0 0 0 0 611 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 500 556 444 556 444 333 0 556 278 0 556 278 0 556 500 556 0 444 389 333 556 500 722 0 500 ] endobj 53 0 obj << /Length1 1630 /Length2 14188 /Length3 532 /Length 15047 /Filter /FlateDecode >> stream xÚíyePœë¶&îÜ;8Á!8A‚wwh¬ nÁÝÝÝÝÝÝ‚»»; Á†½Ï=÷L™ù3÷þšš®êª~— íG ÇJÝìõjþÞ—V¦4ßóÅ]«›îóŽ_0FóS7{öÅ™gÎ Öl”Xî±ý$ +"˜h>^þ.°ýÉ.Žä kӤܻU=š°f½ß<@éÈàg@ê™e¿i çp¥µÄ‹k]ÒrÃ|Ò!M LD7´³ÅF~`éý°¿~ÌŽ™cŠéà¶cŒÂ]:Ö§ªÕ–¬ªæs-kÑ]Q Î×À$ù„ÍÞ-bäù(ŽÊ&ÿJ§/o]S™P'‡ úù,²\ØX) @Eèy<mþ›TÄîVù¢~¡óBöQ­s ¥ÉË?Ó¼öÉq„ûIÜÎ][–þt=Ïâßxûå§$é(Rî<«û°`÷öÜ*äT“­çåGÏø¢Ç Æsš¥£jćK뢘ð?‡æ‘uk©CG¥²Ãg.”¤š_¨ÏÜ @†Š¹•ÊT‹œÇ™?7@êY±gäÒfêk&E*ªm¦º·ŸÐd[Ò~.€£žÃ±sÞÜ2ôÊExÌ\¯‰Ó ÂÙsa¾H6W³ÂÔ|ÕG4ÓVMÏga€ =B¥·Oï~Á è’'{ì& aÒ+ê5ÀlÞjœIïÍ¢‰})8œ_Š|ŒÊhMDIT–áIW Ô+ DÏÝZê—V(Çq˜×sµu•ˆ}{Z;xv´ÓÛ˜2W–·N¯«ÂZ˾Iw•~ËC"¦ê‡²ÔG<êCb!~"\ÐZŽÞ<÷Áȶû¼B2Fóîþ´Þ2èþ"ZhÖFZ…¿µÙÓ?URØBÞ©oÛµ"pç œ:–~ƒEÍ. ëxëŠÆì3P“Ÿvƒê 6¨² ¼œÛé¡2·JÕÔK"NÕ=éÚ/‡ñž|Àý¬œÑ[9ðx–„ÔîŽt“\ð+_ÙÒOG !XäÕ…Ï«±ßEs2Gú‰•$€c˜ÜºÎµ fGW1¢jâgºAÖÑ P–Gæûïi$TÊ‚’Úî‰ãáŽqçA?ég’ŽÊŸm&É}*üA–V þc€VìŠÙvªÕ˜2H“äÇPüOW2ý¨»¬)¤ÑŽ3Ÿ.ÐüÓ>C(ôã šùN©J­2ÝÙ]ÇÕôЋsôÖi8ØŠohè‹P}Š Ì=Š®¬IÜËõC¶P…å"ÞB? ÁÆ«™Ò î=î.eXç`_éntí¥ŒõYJšœ0Z9eÝë÷}J÷‹½æ_1±í-À§U2ÒºŸ‡È üÒü)jO…˜ð’Eò`”;l:Z·}CrÕÓ™h]¶¯¢¯æŒ§íFÒ‰P8Cðñ·8oÜLú—°½«þøµBØÍ¬µŸvã*0½ÃYn+óìA×?<“ªòöÄu¯´w‚æ%+˜cKsbežMÈÕb UÓël­Ðϼ~w9«þ¤ö¤H¬yOQÆNGýj0#ÜhPg»Ù ¡vž[aMƒ‹z20(½EkWt°w…Þ0;t4å ¨ëÜDš%\‚à°S…ÃäÁß¿Iç7¥…ØÓ¾;`B?Uʆâ½`ºísé¶ûr»í<†‡Ûç})EJêï_-¦ªÞ›•È–£ê„¤YbŒ‘ãð#–-§7áaÇò‘T¯zhÉ9Ø¡õ§ôŒI©¾xÃá‹°^Ó\ùÒRm\4 9à„@ô›ÂL-½—CÖÝN‡‰ž{ͧÛù­u&Ó¾Xá»j(º²p™jŠ/5.YŠ kìZüHñ‘‘ªzWvE÷jï‘e>peè þu«-Ü#rVi+ç`-nÿÓC\~œÇsfê…Õ.<+Rrð“]Ì­lœQ¸0TAÔ‚é8|œs ëÏã¨r8í*Ò’2$ ï»Êó£H|Üé;®ë0=yn}ÏmÄp-`Ë´SèŸMØ=ò~Vv$?`+ ÐÜJîêGÇNIŽèo‡Z'»tÖ~ô¹GIZaß½šy‹¼ˆVËý~Y?j3‚ñ ‘,»‚¯u{ú³²ΠE.tcðΣ_9n™OŽG§oYø„z'ª…[î_¤ÚšôƒéLø“9™tß"Ì­d¸w ~½xBl3ø'g(Ÿ~[iZ, S–¢ áôÝÌ#¼V‘Ó’‘èõGò9jÔœwYQÂ3¿&¢ô“)ûÄøÓ¬º×Q˜'M´fÙ3xðØaø b#•¦Ôi|§Ä!–‚€‚¾×NТFþ&LuWvÂð ²ÈÜ”é7æø¤Ü±¾‚°®~XûýqZáo-¿ŸâÉÛ»(-WvãY øA›òÜNÅ›µ‘5MÁ§$Ú¬>/bLÓµlp)±Îk·ˆòØe~”ò OË~w¾På²dÑ7"?׈‹…UÙúÍEÕêûêêd{YÌêmp+V¹-j˜×%CW‚µ†¦íõ •Fz ’¥'XX+µ§·’D4˜(‘ÚË… ì‡2Ì›.%L¤9üÉ.e=áî«iñý{)(=€RʱRAåÉi‚ó¹ósqþ!èf,Šá¨â¯ÉóÃÕ=îaemÍ aU¼bò¦Ä7lϺ§Ò>°âš{bùGO2E#æ"›–İÆ"Ù_Š`‡.ƒþüøœÕaËv‡wÔiÎh蹋Q”¯Híï Zؼ˜òÖuxØKŬ½Á,”k n˜«å·á¹`38y!Nã«ÁtŸ n‰1“²r’ÌËÏʸ‚½–ÆüJe<Ò·>ó‚¼Ïº±ä`"ÿHŽ)µ=ѯJÆ%â’‘ÙÂòÈ$KŸŒ8Ò`§ ¶¶Eãì¸Ö¹²Ö|q‡‰¯¬ÆÔÅ>ô °mo\QŽŸçšîX¼|žsæC UñwÀ’à\ó¾Tm#Ñ"q±7 ly]ÒÚKT†ï4W»–¡ö ® Ò·á¦Ý4ˆpÏÜ͘Ý&y± ã2€[w9äïKœÒ!’Csfp˜ë€aëuÁÙ”sŒ¿Ó#dí¿!cDÍtÖÒ‰ëEfÑ@ÉœIôÇ0Ô3¼ÉÇ Må}Þßú+`7r¥zÙ]EûWpiTÍMp YŒ#ÈÉÃ0€®iÒ,¡¡Šè7bCußÔ·âWÕÚÿ5‰ypv¥"ˆg@xFØ•ßÌÒ-n¢ãÜ‚g-¾WEó™Èâ}¯toƒ*Ïyvi96ã ªw{8¥•Õ7DËbã_¼Ñ\2­“‰Œ&1œ¾š ÉÒ§¯`8aˆq“õø’WÌ眙HÉOìtZZÊõÛËYÇ(&QfïÿpA{ÚC¥ê!7ϧ@[ïÏëÕz:¯ëW“ÉTiÁ8'žÆe6×ùHT- ^L.Âê &”dë0¿ ä´ðl·ˆ»h"µ‘¯™gçºlQû·ÀOü2_÷³Þ&žf4E'i¦çÑ^3ÜlÊK#¢ønP‡_2NjϨãlKlß\ OÇDD3¬W‰ŒÊg£¸'åš.ÉPQÁ3ê|Ãøq§·sÎݳòwì x#í2{à€/a´h°Õ,Õ}>Àdî²5K Á~4–Æ:¿>Jˆ…Z}®Ú°½¬‹0 ?LÛÄÍÆ¬Æ¸f¼Xœ°·î{y:ÉY‹6^ØvÎɆ¾,ÞN"ó K’QóÎgzI–¢¶IÝ«]tŒtàÔÏ{tè0K3k‚¥28F 7GМ/ùót yZȈC{&j¯ñd^Ä\)4ËÕ£ÎlÔ∀0õ[¤Pî7[Ø¢zRñ¼ó耘4Ë™[Uc·†\Z,ß“ü&|£ Ô€låíøXþct°Ëã³ì4鳊ºÇ¦¢l9=ÏÃTêLü¯á—§/ßÒ&ê7~üz xÊÑ"Á°}-¶]‘O‚µØá®4ç´Ðlpx¦R¦s¶äÒWª®1_y3iŸñ÷Ôv²Üúµx/U´gÒuÿ]$S ŽOåiQÍ¢a,~nër‚Sv ŠIúj—$BÈý!r;fµ·—*o¶Š4&ÒcýéÒ5%!yßÁäˆ_æÁò`Lšº}¶ÒØÜHš½ëû9eÞ+½ÞÏ4–B,•ôeòb÷×Çü¤Œ©\ w¨£K¸ó…(ŠOdÜÎÄ4T„úŽêhrø5‰ÇÕý6ññs‰ÖwSñJ(ÈÆj-® ,RÉøÎ²X‘bhæëøw#‰_ ~ª/¿.\s„ å'"'Ã"…+i×Î2qQÐSm~×â…ùýiø{­»ZHìLzµùï§# W©¥fµ:Ãyë{®}¸)+ÞÛ*‹ãê’Kë±=x1˜€æ1cŠëkò^y#Ò ´Ë¢ƒ{2öÖVËj̺.tDbC8Fs•+/ãÁû…ÍĈW ¼oûJŒzcV~ëÛ&ÖRTìÀkå(ÆÀlÆD²þŒVSû!øþk? eñ%UägŒ‚³•U†U¼òËМFÌWù_ßnû }neµ¶J+¢BOõçaûì+à8ÈÞ`I oÏ$ÏÄn”Ä:“³×`­þ”«ä'|i¿QÄàÃÜÊ\8p¤€Û tNð5–"¨¸™—Ç©.ð+;ð|õ w·@ˆŠ„cg–‚ÈPHõÛæMH±¹¦.,‡7­!a×ÇrÓuíïO@ã@ÏQWeìöø„ê˜$¦ý,HµlèÌ>ØŸž&ù´íPÈÅXU¥ä2‚8È6‡¸²)öB `s÷[ŠÈ ÌöJgé¶Â»ö&µâª–Æ%MÚvyZ\õ”3Ð9kýè,Ö}¹Z¤¯³I”ºì­Nž°øòHH-ML+ä ½.ÍŸP.ú:$÷¹ Gë*´¼pöM…›0)¦ï>\¼¶@M_\YSÂEbF²Blg”éô×n•Dy`›‚ÐïŠw¢kê™K¥½òOUý<y» Ú!ÿœ×t}³>Šk²W‚ëÛš¿Ä‡öMP‘_[Æú”h??çŸöään”Åxx¯é‡ÒõœƒßÑM :W>T :Û <£ SBˆÅ}žouΉu"Ä4“¼Ä½iêb-ãÇ€ôÚ{ìíÔV]jº; r…áâ8ä¦ÏléÒ³ }0µV@•%ãlÍ#H©¥ ÃD©V_¨y…Zú£ei½:Ǹ•iMÈâƒeçFE¿¹éN1”|}ìr(þ1:l O÷÷°åâ’’¨[7è§U¾gÄsFÁ3[ã\CóùºäÝQÀ&¿+&ò¢ë¾òiAÌ$h>»o̱ dw{´¤jÉÅ÷§mQRÁd ÁˆØðJ›ζùhïè^*ù0S±ìZTÒí¾N€þE[¸Ly¶UD|"øaÇ»)=íÄ£÷#»Á©ƒÁeTñ¯ÒÙ²\á%ÑÏ`EX^„Er´8nºÞ£&SÕ‰•åge?uÒ?íþ¦Ë"‰ !VjÞÝ>¬Ï¤ù¯½”<þDª'Û'—`¤JýÀE‹9ìëd‡O¾&›ãN–7ö«nì»i§ÝDˆI.Cvà²çy¤ò$+’ö]ÄYîX”!ªNð0µÆÌ3ü—âc¯.5Ëž¸û%WdŸ°1/ LR›°”?,È :O³HcŠ|ut¦TC’¥¹çF \+¸Ç<ïTH¾FxSíºÛ;KÙ,¿lÏÉ ¿ÛlÂêOªnhÁAµ¾n™¼ú)ì÷R§oÂkMSлz«h{o÷ q¥åO_Éó©Þ*sJkhúA [¼Ö:¬qó?oã&ÅOª PbÅ\ñC³Bö£x?ëܸy‰öУÀ¥¬ÏX‹%JUÁ•«uÕð/liNœÉb tj€£ÌÍ/7XúÈžŸyg¤·r³£5c¾ÆL`Ìa˜Àü²üB¤éÀ`ª²æ.íb£šjô†Ÿ«wà'¹{t›jtî,ˆ"þþýƒå¯S±Ý_ZL{¿IØô¡<›OZh.q/UnÖr‚š‹`–èռ°äs–Ò:× „œÖæ31üÓœú­:Ý?Žc ´)íÛ„§=HƪˆQ‰á:ɇU”“¿‹Y"ó…ÆÍ0 v9Õâ>³o¨º’÷¢†“H÷üýyþ5„r6àÆ|ËW¯š]*¡GõŒ:è·.ÊmB¬Z(nÄàôÉ»“oeiPÖ•§!—¨›H"6UŽ·bvw.Ëm]£÷qè8,œÃ‚¨Æu±tq`X÷ Qü+ž@kùÚüDýR|Èå¸ä÷Eì’:µÏú¢·Ü’Xe}äÃoâÈ\±XXâø% £–ˆ­"*U¿µn®U;Ïï]jz³ÐÌCöŒ!ÞL¥1©ºjŠë?E·©·ª:ÍçF阓ö›SM¹›» YCRþ¬gê+M™Œì¿õÑtvŽ|Òü$\ö¹SS¸jÚ}$›à\B 1Qð9î`Õ)½‡ˆr´©žô\õ·«€ÇÏß@*°­*èxk:B¸M9àl@§îàÀ|Í Uåµû”_ʜᎋ.Ì ¥k½~¤™8'!*ÑóÃRc·Wà(}’tà-gÄY`®`³s%ªÑ"ÎBýsßkK(á„€þÇCa0C˜•‰ “z‘íÅ^“}_‚±â0‰•ú̈9~Z«²cEâw+fð¥ëAÊNT†˜Iñð»Àd7±$™'Qù»ßã¨~ë' DDj¡ÞäÎ¥R‰yèiƒ4:÷RW•R ãm÷°i‰ØjQÆ´ƒxÈ»ØÜÔp®wÃ&Y¢× 0C’äFÜ>ö6~¬ò­„ñ}o!橱Ä:> €ª¹¶Š>ã]†Ð_w{ËýŠ"ÿ:Áq#ÈžÍ ý²<ߥÙo'ØÊÜ󱻘8£&üÇ€*k$¨k§2âž³.œÈz‹dâ#Û­j„ºVäùy:„Šø¤gLÊzçH,MàÝâëKa&a®EäÊÁ¶A ×€ò:Ÿ¢à—Ö%$rC~X–ØtÀ¦¬*@^¥»xÿ. r¾õîÉ%HÂM›(ÿ°9¼Àïòº. =rÇ<ÿºŸo7éS¿ºžæ¢ÂnÚ’Rªh]¸ÿö6ž2*9“àW­*CRW±U(8ЬiÉR@uœ/µ!ÍGV^—¸¨MVúTz}Hn0><ˆ#/¯&²G †u`Sö³%¨eFåQ¯Í åùì¨Ô|’Û2ÉT£C³ÀÞJ¼8/[¶>Ð8Œ¶k¥`uíéUõ­rVÞþä Âÿž_áÓgUÿEŸG¾‹?Ö–Ví5Hœ#2±í©ç'Î9}¯“åãE¼\ ·r„\?¬à((ª:jb2m‘¿.X:t?+¯’£/Àä3k­&ÁVh²cØ0Ež>r¸³Æ…³ wêýÅDúÜ[¨/6i’Sߎ¹ïª0v눒ûl´JqÞâÞ ÎN¥Ä >羺½‡Ór]ÕbsÍ¥a6ÎüîMÆw˜×*šêÒÞò ½›´¶­…Ô'¥E‰‰îA/wåaœ«>ßn'©Ç-–éjÛÜo± x›Âsª³Ö£÷¢wWž?~Í´‹ÚYê䮊•è$ÙvtÙ°Îô¬Ÿ»QARF ·$SŸF;ЭMûž#:yû<éñ[øÙ´Gtfm}åâM»*E¯éMº(–³Ép½ÝrTÕÀ”$°u|_ZÙ^?Üå 2›}Á)î,ÌÑZÛÑû¥<|½;ô$wÚl¾â¶i¬:H-+ÂBä °DÄY°{baXqXEÉý¾q³ZÞb]Âò”êô4µ¦Ž“åºBÕf%Mó…sñ;n_ßüi4¸›äO‡æTÿÁ’ä²oÄû±1 t#uÏO‚—#µ  ©8+Ó¡ÕÖ–==‚ŒŠ,Ó/§üå»ÉÉI‘½aFß«ä6¯oÇ×êzd‘NÂw¡=Ñ꜕ß8Q »›g‘ŒDO>hQоõ.øí/vaÃkHaÅ+Þ Œ³­`u)›‚$Ï­ÿ(^á0Ù¥~ë\ÒI“YS¿=Eit„-°á“RDwéñ*ë¨U à÷ èµÎ¼p—8KWöâ§P«‹ØÚ‹9ý¹;Ð â:¿§Ñe¤ÖÉSbz|?ƒ »uÅÉ› âolÇ–o£uah¦!;94D %1‘ï¢ò Õÿ}#úËð0ĬעvºŽ=ag™ò‰úÙ‹Ð"?¢ús³zœŽÏ¤ÇàƒIzòç Ôõƒ,fƒ¥“f÷ YÉ^lÔ³_;qMøô«Ýâwìlë ›`ƒ‘ó  +óê îp4ò_BÉ„åÆ&›^ ÚàØaäå[|cÁ”‡¦Ï¦[¸iª“ÂxoæðªH"$O{u\â¿qT=íËëÎ…DH4ž†líYÆÄûnüʼÁ*$™éŽÒÚJ…Ï„ÌDÖ·oZìÉçòdÁ‰¾è#“½N^ÃïÅ…ûãLÃg¢Ë³¯›&9‹(Œ÷ßb6*œãu•*#Ï´1HÆÅ”ݘ«;ï”?îc6¢¾Þ.Ž!cÀIÂAkqwÇÓ#‰¦x¿ü0\þ@ÐÃzQ „ŠCñ§§ì2eo‡ŒIà ÓX_%°µC™g„í›’è÷’h›Jæô\ üB”æ/pU`øLçE9ºÄ¾F[^ºÉ… ü7OÖ‡A¾þ†Hbâ[ˆ{þ‚öü¥½ „¾Á”<Ãß šÈ%´  ü,T—uyL¬µšÔÝÁ»59Á ŸIÁÀáÉl +r–­Eà×q›öšs£SèÀØ ”ÌW”X6S}½þ1ßgŠ%˜.±Ц€}ÜküI§ÎÞ‹_>îB‘æl¸TþüEêË„¾/A"m›¹gI²æî—ngdݸ´©tg½ã𾢉öŸžDkÛCƒV±7‡Œ¤;ЉòuÙ¯I=”gzŸ8î¦wž°£xí\ÇÙ,ñª€6¿I+v‡¤=ê··¸$2Ä-¼éª×;æÆ˜•î2Œü)³pâ\¯/Hsb¥ÒÇîÚ³âVæIp*âÀÏb#² Jn9¸“¬-ßGïVïõƦȮ¤\>sïÀ }MÓ„@ÎþPYÝÏO³Jó½tãõÕþH¥´ÎÉ5Àå8ä1ôÞØû!xMõ«ûý¯èrïx{Q&±…}ë04oy{ÝÄ%´ÃéLš“ ©”œ'Aî–ÓP¶ˆÏu¦1/Æ È`óV\yÒ®‹ÿr–B@Faâ™xå;¶`‚ÌØ; ãË=gÈ…ÄÀ2AÅ4ø¶Ü—nÁ?Æêµ,sBƒ»éæXm£¿Kˆï_JZ£¿éNβ,T,«Kô|V2ÅfCpO«Òø˜…`ÚÈÍoÖÍtYöæü]‘õæS/”þ™èâ$S^né³>œYöXÀ!æÇò`AH)pl°v^ìÝÒvÿ€Ëe½ËAž•ŒÓ¦»tv@ÌØû%}¨¼ó Òã{5s¡ ë6ñ¥»­ËŒÈ†ù ±%ë¦Ý/ˆðÓæoY¼ÙÏ\kèï?®‡)ý Ñ>Xº9,»PÅ¥ _>Å„%g?ºdc€1r︅ÉF6évoÕãnWw}ÀélMèó¢þÄ•_aEiYý„\¤[9{2^–´Î5˵ SŒ%î_¡Þ±î/p&Nì¶ch1ád&í±HEzò>q|ë]“Ï>ÔúDý{<0 `× rlh’èüV ùÒ5JYÝõ2…rÏ7õ(Ïý|%h}¹Uàœ³Úú»¨ž-lÁ¯ó–BkÀ–OB´¾…uÿ ûÇÐQí ü;I¿©MV¿vvÒ-“´ätœ8a¸õG‘½ñèu£(ÆGëE)‘ÓdC ô1² ¢oÒ*ü’Óìt\sô§l}¶ºAAó„'zjµFE!ÃÔs#VA®Ö:aáGÆÇž¶dÓ|—ªuñSo&Ôʱíïžhk,~u§5×gnªÄÕÚL“çvO¹Ãh‰ÐüËO+?RQ—ò4jf§ âž:/S4‰çìl“)<]úw†z³˜A„ýqnέ;1ƒÐ‚¿ ,Á¦ûCz‰œXQJÇЀªôÀÎD Ú†Ïxì\ǬeˆÌû„õoþ$[¼æçßK‡]ÎBí xÛ„zd…xô¥?¼¶NëÆPASÿA™M°¬:h_9<Œ;óPC¸KÞDEÅ` ào]dãT_M—”'÷ÂKn}­]Š™‚“d*xäc:UÑBÚrNßFµ ‰ñ$H4ìPŽÎRø9P•Õ ß–èõmiŒ·.ê«ÙÉcÆYWý1—¤Uð^yèÄó"üû SæOœb¿Hˆâ¯)Îçðóí@ì{®T™ƒì:ã«%Ëû–ÖjŸ¹•oÝé<ìNJ—ã]˜ Ìȉx>QñˆÑáß&{ÙA¯OÄy›%QH³&Ï©nˆ]´ødn»º$ó>×™øn·MÍ‘rôÇ´+eÐ;Zý ó/è¾²é;þ °‰J>Þ†î[ÔÏñ‚²nˆW’öû ŽAô0âÓîMu¼ô7p!,¤ xš,¼ìÓu… hÞS ˜ª(_Š2¨Ž—É}%°bʦ· qŒv~Œd8C1ùFm#騒ƒñ*eÔ†B”Ð-žýJÍšý˜0âóFÅ@á2·B-á¬|ùБ"Ž %!·,Ã'ƒpíéwÅ´Ë~tyn1ûÛ¡ŒBX¯Ë¤0hj¸ Ôgú²/¦Y´Bu+ùþØú¬4MŽÎ\Ùqý÷ •ÃòÈ—à‡~±ù ] BÙíœMZbïŸîÊàv°F:9>"#~ÿºÈÊyÔ\?öõ‹¾ C@¬!Dú«ü‚2¯þ¤çj5²ÁŽUEó­¿kÖÀÚ®ƒ7t+5ì|H ³Ëˆ/› ò%1“ó9ùlçìùÙ^ÈŽÿ†ÀWsÍàìÓêÚS¢l.;<¼¼mTn³Ú=U^z “ã*;¦¿åfÅôËÖöÇ–ø±`aßtþM¸Db = RŸÝóEœ#ý;7C^?Äßî·ù½|{캙  Ü®‹îcÞ=4&ñBÌwå«´L>ÿÖ¥_n.ªœzË;Càɧ6ü]§çZ_lYCí5d_E,Ûpo ’ï°òÔ%¬R™p·„LñÅã}´«ôai·+/‹÷m>Èž9gL Îkÿp§­uR;תfÜ]JF~ùº^Õ|AÒˆéïÅ8Ü ¢©“E}Võ‹NšåR1ýe×h¿þúüÕpà‹Fx ,ÿk™„m–bó½ ì–p—c¸]k•W­Eìr˜ë‰²"7–O¶¢®ŸúîG-ŸûõaBÞF9'Åj¸¤]Tª–u(O·í\W•ý– ~èMAøŒ‰Õc!=Í‚¶3AÊïïk|¬º²¦9«¹Y­¹vz £K0Z’µ ¸"#˜ÈÎИ™´FT¹Fã4Nò §)ÒG4’°HÖ³T½¹_#ŠËçcÐáï1ëQÇ^m{&̧å£ù¾K¬~¶ŒˆRDîbä>ª b%p0‰Ù‡W”ëáñß‚ u¦º³\âê4Å‘OmhJ0Ý÷[Öæk#²¾À]×е Òí)Ý;t,‘—ª¹|8¬3§ùLIdc¹Øˆ—R¡u?:Ϫoº²üTÜùqµlöæû¶IPæù•ñ¦¦¶n-¡MÈÉ7ÉVn[i¯3m»Ø/æ—̾†¸ðrdíœÏÀÉD=\ÜíÁ,zT–í§x êvù‚šI Ž£uWH-™¥»L}O_tQÆýÁ>óÚí­ùÝãë^út¨¡ú5`Xˆ§Z¹Ž@„Â^y‚UŒðäàXH!®º‘ ÏbÒ’I»¥sª?uµ|©eÛ!_c)‡ï¢Æ÷éíèa$_{¹Ï‰HøKÛcãÔ¨ã^oòˆ¾L ¬ÉìÍD!¦—³Có¯îNô$EÕl4«:Û&Ø´?JL×¾ŒôÀ¯Ù’–»ñ"™ ˆcF‰5?íáÃEðÀ:Ð^úŠÖº¸¿7£1òý¦¶Ò>NÉL+ð™·#øFO«sÍ÷jÒr-í+Þ!‘ß °6ÜŒA¼ÍرÚììð»>ùöâ Kû2ö88/Ò[ñJ¼ì6¿GÎdüXZc¥ö…Uý‚³V÷3WÙñäNÇ yÍõI3ö}Àà2æÜ­½|¢jÜ9¿éÒ£¼Ë9Í>ÎëÔÌx†5Lv[†ˆØè¸‡‚r6¿ÂÆEQº·Z_,ßÈ$1åMÈfn³QNË …inåÎLH‚¢£gùÖý7O¶vš!‰ÅÁêÊ"£h4 K„˜’Æ.¡®¡ÍQJ6³›LÝ·Slaâ’ÖrƒßÞ’”]ð¼»$ÞówÏ3®}<°$Æltm_H¥4ioºy4”¢ì˜Ë¦N˜ËƒûþͳÀ2«Õ‘Ø/¯ªÕªq¢:•s¬[P%µ„[Wœ\&„!Ï¡ÊÌ*Ñôoü Gݬ½‡&ibm 9¹¥×§p×%â}ªØ=Ù&£›“.®ˆ ùÿÐ,â_¼_¡g~¥å8·u^nÝÅólzÄìN S|:®}4ÅØ,óá$Oa·rW6é!ÄŒ iþH5AR†øçæ<ê¹Ýë5ŭ2ÜP?s¾t^]Ž5CøÀCëýÓzñn€([nûé(»ú4SÌô‹DмtFIÛ tÀص[ÑÜ%PK¶^p=ç¾ro\c\%Qœ.•±óÆ•ï]“SsÖV´Ò\«£‰ùVÏ,Õ+%èÂA_ºô45^3ÆJÿ©Ù qKÂNTY£Á6K{Ëf=oòt“ògq¡ÒéáÅN{Ð ˜INЃkѰ©ÍMFq<(ê¹Ò O ¿Ï½ïöÔ”£3!NDÞ49AÈX`îªÔ‘fÞŰó\S)¥âÈqt; ê ·æµ¬>@ìÝ÷ÊøØ•˜ôõë¸ Ël_Xaº +ŒóÉЦŒPVGqêKW¿r’‡hiòˆM †Œ& ö#cì#tø‡“\òG·ü?Ö^ÕŠqó×ó'€~”=àì.çe„¸Úý6Ê¤Ž´Á.[… œV¯ŽúYûr)·6ɧs ;دm¹ÛÔÖ+'¶k¼oP·‚‹îч”çtØIØÒ˜´“öÓ§ˆúŽÕ‰¥.S)ç,õnY˜Ëð!k¿ÎÝ)°Æé,Úéy•}\§®^ãaEañNC#I?ÖÀZ›e15*ù݉%ÔPïU®&&2Ô+ÙM+¤.bÆ”B¹>WaCJ0ÒSŠÂê*Q³°g~"MðRîÁÎñŽu±4ó%ÀxáÆ}4’æ“ÜÇ­hL×T±›jp|ñq¡™Û Wb…/¾/„ç Ù÷ä8(Õ ´½BñpS"·™Ú ך¯U«³×œÛ|‘¥¥S×àŒ(ì…¡í9Èà=¤Š+íŸ5ÕàÿãÀz苟N¨àæ¼IL…ø8¹…ïA] äØ¿Žˆ|^Èyá¡B‰T”qZž¿\ÝôM\äʨÎ:ðöŠÀŠ‘±Äç§ëWôGlM¡¾>òSÏÉà†êLÅTp5Ô–C­œÈªü¸¬ï‹:¢Ìõ«…5ü[‡ 2“D‰2þZÀ~ì;nq´@¡ÑSêP±ì×ñ) ®&¿cåp²OÏk Éx%RGQìÜŸØ*ƒt°ÑVœ‹ý/N@$,ÿÅÒÿøÀØ hhç¶6´³DúuÅ0Oendstream endobj 54 0 obj << /Type /Font /Subtype /Type1 /Encoding 119 0 R /FirstChar 2 /LastChar 122 /Widths 122 0 R /BaseFont /IZGQZM+NimbusRomNo9L-Regu /FontDescriptor 52 0 R >> endobj 52 0 obj << /Ascent 678 /CapHeight 651 /Descent -216 /FontName /IZGQZM+NimbusRomNo9L-Regu /ItalicAngle 0 /StemV 85 /XHeight 450 /FontBBox [-168 -281 1000 924] /Flags 4 /CharSet (/fi/parenleft/parenright/hyphen/period/slash/zero/one/two/five/eight/colon/at/A/B/C/D/H/I/O/P/Q/R/T/V/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/y/z) /FontFile 53 0 R >> endobj 122 0 obj [556 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 333 333 0 0 0 333 250 278 500 500 500 0 0 500 0 0 500 0 278 0 0 0 0 0 921 722 667 667 722 0 0 0 722 333 0 0 0 0 0 722 556 722 667 0 611 0 722 0 0 0 0 0 0 0 0 0 0 444 500 444 500 444 333 500 500 278 278 500 278 778 500 500 500 500 333 389 278 500 500 722 0 500 444 ] endobj 45 0 obj << /Length1 1608 /Length2 8889 /Length3 532 /Length 9734 /Filter /FlateDecode >> stream xÚíveP\ݶ-N° Aƒ5$8Á]ƒ»wh Ý4Á]ƒ‚»ww‚;!8Á<ò{î¹õ½ûëÞóëÕÛU»j¯9çsÌ9æZµéhÔ5ßHXBÍA²P{§7œlBUÈ{sgGM ½òI¨%àÉÈ‹IG' P{i H  ²Hƒ,\\NAAAL:€æ‡XY;µ5t™XXXÿeù0wÿ§çi§#ÄÊ@ÿôᲃÂÞƒìž þÇ5A €“5†ØRjêú ªrF9Um€ÈÚÔÍí eˆÈÞÄCá»,P{KÈŸÒÙž°$@€# dyÚr³Áþ¸X0ü=ÄÑñéqXÁöNO=p‚ övΖ<ÙÁпÁàЧˆ÷O¾'0u¨£“£s‘ÿ ÿ[þ·Èû¿÷ïý—Cü¿=χ–u¶³S¾€\0€§Æ  øsÇü_±À÷;÷ÿ&úﺠ0üï@œ€Om°·z’‚ƒãFˆ£,Ä d©q²°€vO=úË®mo ‚ÛAìAOZþÕFÀN^Þ¿ù´¬!¶öšÎ'ø— doùwæOòüÅ›]Ú@RW_‹åï·é_QêOª;i¹ÃžˆýG*PËÿ\üÁ”„º<ßpòsÞpsð?6n€  ×“ï/ έU€NpˆÀð©hοJÿ÷_+ã¿ÁÈØ[@-ÿ̉¦ÐÞòi´þÓðÇmá ‡?)ú×i*ùŸë¿†rY`.ÌA-„m’S?;U’döHvwr"÷Á k´òr|Ë¡>É¡k‚¥f÷AlµcBMî³{°‡-EæÄv Ÿ@GÙ^¯˜ºrð—é[øY~ø³›â|Þ×ô<žQ^E1àãÐù±>òNäàr¬…þìøŠÉ÷•KŽ/áëKØso‹¤êD­xµ•¹{ûôñ;W— ½ƒ_ûû:NP»¶ÈY2>bÐ » àÐGø:d‹h—zF™pÆ÷–'twi3r/ϟ׭r ~bÔ”X,zîWêá~þžòw&ß‘²ó;ÝÔú¼xBóÍ‹ä›wI‰àϯ¹(¶ÎÁ£ÑâÞÑÝ ŠG¾ËòÁ//š~”(²oTò$ï Ú¦ önf µTÇÙz|sÙn'b’”êFD+0âäu>9š»®ðø‰3”îÆ#]ÛÖNÅçú‚½}D·Æw' \òá‘åu´ì8ÅÞNÕ£ûWtwC0¢ìÐ0Šp~ÛôùÉÞªÀª–³3—‚¹Mª“^•U_ÁaÀmé0ÏŒSªHd>V…Ö˜_²Yþ¶˜šš_ÛúeÚ ÷µ3ã` ’u­˜†ð¼Å°F"ºc[*:ç’Bœ¥×Ï,í!Ðò§ j7u<ùrs³¤2‹0*ŽÄ"áïõš¹À£Æ“EPļÒY_/±™€)Ž9Þч*ݤöå!Ýc-eÂ@tMÉîzÿÞ7­‹Òj¾˜‚ßîÅÀ¦´òêŠ 3Õ®Šj’¯â®B[,GÂç³Áé@<º)A|%ÛqÝd¢>v‘ìÖî`Ü®¬¦»pþrönlÜÓî GŸ îTt­mK$‚·è`ã-œ[Ò7ª:Aw9óz¡U„).vµgµÍ9‘'×#]¨Ô$>l+é3Šò/©{öÔâã(ãPÁ¥›(”ˆ§Á&,bºŠ)n;¶u ¡â(¼9Lí¼ú_ä‡>hÆ!¶¯Yº.Ñ6ÝS´1ý°tæ¼LèøuèZèóÁéešõ㯠ü"O–¨ÆWjè×j?&«÷ ,¿P³¹²YpŒ…Sór:U_>\ÔÛšÙuÅ…ÈE<ØFЈÕ$k2òžÚ\ùø|Þĺˈ{I’¼¥+YÔ¼ø¼SbèøÆÌBX¿{ÉèÙs7¿@ZZL 3S€Àwåþ°†ž:¢\¤|ñj’od§Ž- Õ\4Æþ«k¥sÓÄ‹Az[Z”#£9QB•-Ð2~ ýE ÁÅ|Ä‚Áªã²möR”[j0­½@åw¡ÒXKÑË$XŒ1þ4ÛÑšÞ/N{Wì­„‹)SY«ß+á;|5"CîÁRPZõfkQE£ómÊüî Û^7Ì:ÙóÌA‡›·è?G9ðÌ¿» ÿŒrÌ&ÍÜNV5ÎL\¶<°:¸ÈŽƇf4¸Ï§÷œ {=£gbþäê4(¿9õqu¼(e6wÙ³×/yÎ~[{SgKsu4’,²’ý°Î•wA6èê’øÀi…À׎>Zì‰l_ ¹d¶.Aä.›ä–#Òæ–ÍEþ‡0вœÁ}‰§zx%If•²ã€7°I`õ†_¾àuŒ0ýûãúÌMönËDÚd#† ½­ ¬OHtq&zû¥™vJ€Þ|.íëýRFÊØ&cg¤…âÔ܇s'(âÑ𰎯÷(\Qo±,ôÜóš˜{ˆ3@ÃГz¹Úgg¤Ø¶°cøÖÜ]úS‡²:¡tb_å¡:…Í|ÕYeÕ ië²G‹J—ƒš^ÂüfaæirWZ™ßäy’ш@ëÂC}Eo DmÉ:r?…ż²F1œVy_‹£ÛmlcÏ¥„M‘…‰x¼Ÿ>Š~¥ÇÑ!ïËG+Jóœ==ßEã´ø„:ªO«¤5;Ù.‘ç©yÂí¹ÇLM¹îU5ÎIµ|·><;‹±=Ú’à¬"g!Ü– ¨ É¶ÿ'ðýÚZMyWH![ÌGb€Ø¦Ü—T“¸ú‹ïÀA)?ž’½:¬ž± Î3{2ÿøp'oZ‚Wœ¬ÌÐCü½æŒa®¶5sŠÝÎÖ4Pê¥;ó>#gÌäþ.Á–ÇýôÏ…µi.”ÅÓ°f{ý\^¾ÑÊÚæ|‰)¿ûÑ,I2÷'[«n/qðÈöÛ¯¿4øÙv§”®³ß•Ë!N&­qÆ$bYåÝtør0'„ã›LVfh?/¿Ñ÷Ê®ŒÎGOàzy|ÎUzf¡.ƾ…‡1ÆX\y®‘iâÁš|ÖÅsG~á¬=ð›‹3ReL¢š§ˆâûP‹§ã»•UèÑ™(o r\Ô‘c$&FQñÚ£IÆ£…è˜òõnÂNkÏ-QÃC Â+›v±¸DN×DºxY¶¥ÂËÒ4q¡$A‘ V>´áþ¥ ùj‹W.Ö î…§÷ |¢ZþJäÓú„Çö-ìqä¯ãxTý¿7+yéå©ïg"‰3< rÍžGrü4ÈÚgù©ÊÏåÝÎûGä±ð3w711Óæ[–`ŒG¾;ØHþ!n•š7%”—º£?ÝJC§bM\†{ê‹ñŒ¥=…_•§@åœDIÆ-«Å‡xŒûêíîÁW²Ô³È¤ã¹™ÛBÒJ‡–‰Œ[‚*Zï÷øN#^¢º5{]â!cýièÎWf½Gx~ñ¡nÌŒQ÷Y=’»¦•šÃ‹tÉÑçÊÅûr)ÀêùëôWÞÚz?·ÆŠs±æõHÔE{lÞì«K?¼|V{£t'É£àuŸ!Cƒ¥ô¾s%"ùç¾íiœ·ÅćùÙÏ O;NY”˜1µ}çnÌ{$©¾´ÈΫ)l#(¶#Ùäëx «&•Æ{S©Z¯ ®„ßß4& üÁ´ÎòRÄ94ÑðJ\ Þ›zÙB7c³DQÖë—â‹î'í°EzzŸ,aÖq‚ˆ¸>@µ¿m(Ž\É—!áf5CNWÜï™ãMrÚ’–á*w ¢û>ófVl]=AËÝ\‘Ÿùl²Í”‰©úSÍRIï×{ñùµ§?b%¦—0ïÌUIá$¿oäÅ7ØÖs/( mN7âe§SéH¶ú!7ª/ýC@ïÁ.)>¿8<«,ç9PyÃËž]xV×SSžM§u©ISÜnzd6 ì{›“Õ¬ïÓËÝ/@üxôeú¥€¾žäÇ/s°3n=‘X-%hwŽçÁ¦`}BU:à–‹R7ØŠ".YÜ—’Õú›Ù2Ÿ7±žN;g£V/KÒA§–­ñ&g¯ìŽ2œ=ù¼#Ö-ƒErÁ-ÏÓ–´EüÝ¡Z3íää.„´G=4:m/%OÁ3¬tí+˜DÑåG™?!Ã((P€¦ÂÅMôœÞ´í¬•N9à|)߆½ïÏqg“²¢žλ;•°[w˜uiØnûâDUzäݳ™¹&@£* ¶Å@xÓõ³mDy%5®ßÆ™˜·),¸Rq¥†M3m.¦–Ü"ƒ¦Nîþ2¹Á“R1ð )Þ0·.͹ރ©!:¬PÚF£Í³<‰“ À5õbW{J“Šöõ2{;tÄ@3²6?(&wÒÀãž+c¬>¸-ŽBþý½ømnŒ¬ô}e™Xq"|4}‰rh"C^S{éáÉ9…:§óƒMP_—çŽûÕ(MÏ;¤ñ*ÎoçÕ¢½ÈÁàLN³ƒ·‡È¿fÆmëÉíÞѾIv㎅Ï"ê­ËÂԚÁúU4¸µ€…ïC4)÷j4»­s…L#bøjçozpŽ^§°~½r똀Ø@"”œì^礓‘ó÷%TIE(î×ù|Gï·½:­ò Nä; .%*¾[wš‡ä× æ+@L:¼6%c‘FÎiq嫽²}™úãfú˜Ãi„$<@’{—íœÓœz¯ÚÞqèÐÞÄh…ÃÀ¶›Ý9¿~U×."7±å¾ÉNqÙѪ šÚ@d£xGßÁn iÞ+³_Öü úO?ª­rÅŸ‚?«f ·D&pMW§‘ågZ·FJ'pm8›ü±=*>¸V°‰ÑtU»öºbb÷£~®^Y7𢠳 «ïšä­ßéï½²s•#¹JiÚ®2ý¤ô2 ö9n`ž*û¶õ÷Å÷J.…_èÉ?)º‡ºQåyë?‹g°ˆÌ€/ÿÊq2®ðžøúÊkX !rbÍÛ‚Á-o÷ÞºAFÐÇÙ¡”êBú;ï,ùyPå‚¿jå&“G/- m_éšZ¶¡Àæ[µ®°_ènß„‚vÑr iål½ÕÂ^;cªn¹üÑ~’¢Ú§S"Ž1h÷6H<`(µ¼±ì8èÕ/ßÕë€"`†cÕ¥yµ»ö‡S9]?ÄçE’òÖ¶^p Öjçg€ßWé < îuSa}ûg/·šW¯­Š*ÀzÈÒ‡£7ýñ}?[ýÈ7¨µ\~@mƒà±­‹©V¨¿*Í £ïA.+ÇX”o3ŠOìN¾•7ðLêh¼8ñW4 ô™”˼Ÿ¥ŠÇõú”{5¬øØlƒù'ÿ³6eo)˜çöѵ· Žh18'~TýÞ·>"º»2:hÌæï¶m*ö`Ö¦·6’G‰_-Û ²^– ÒÐqã°måË d#ÿtÏ‘“Öú¦J´Š}«n#‰Y¥ÙVÄõxz”kZ S~W`ÁÎW  ebî2GË'X>{¯–6O¯‘wíS ÆœJT2zM‹³¾P÷Œ IÂÞ8Í0 .v¢úgzà6±{ sNµD 0Ï•j)O$°µ>Lµ©Hìãq<Þ=viyð@é©éÑ÷a¿–ÆÕ®â>E;L…ˆ"ØíØHÛ}­ Í7u¼û$_oÝØÙ.ˆ.Œ¡*+kšõQ%ýXê#v –^V¦¯ð€[·´»2òèvœŒò¹jqþý;,˜»þ„}Ä€d±ÎM¨¢äã~6PBË-É„nr—±/ØCÁ4TÇ0ëMi9ÚÔ¶Päï$Ïþ‡©¶2®ÓéœV‡ïè¨  6ZtµS:òw¬²«Šø_òU&ç¶¹R·½ý‰sõ@•ºW&éÙ& ‡âØÈËú\µ×®Ïç8¯C|­‹iUš<}sñ¬³êD’ÑDz€2}¦ÂsÞBåáƒAcõ,“¾$ë,mäȵØÝ¶„<á/?Œ©ÐЊÀ‘šo©zæo.=û{¤çpjå§YNwtT[ª @A#Ê¢üBõ¬ û'áÊ«—.ƒÞuŽÉ QÒ«éu¢º×_½»þ¶Ò¦Ü–ô#žnÕñ”ÿNy4üžkŒ|(gKQ|C­Weˆ‡ÎÏ/a%¹ÁM€èÜ€ZCšlf°´¾ÃììË6µ ö+ü“Ùô¦¤×²‰éY×ð†$L¡-‹ öí3È]‘.ßË©µu*Cl¤€ÑzíX´Ç½CÙ H?n^;¸’QÏØ+¦ÍZ¡ofõz§´÷Ÿ™dKÑø3"š9¼çD_åâ@ ed„¿|@qþtêºymŠ‚ŒãY–™Y™d»ädÄ]Ȧ­Hl¯mw¦…³ºÛÃ^"U»°k\7»ùä¾Ù0‚òyNdC*«‰ꋤìb¨[ÏC±…aý‘hÿœš•­‡98… ÓtɆ?hI‚áA²7:¹ ÄÿÚÆÑPaš¹˜¨%…í϶"ôjìV88W‰V¢þ ¤Ó~ÔÞ” x96¦·ÊÆ!'æsgÅÀYùgä¡A$8¯Õ“dKX’ˆçéÛý`Ý}o¯á$’^•Èo½x‚òºÉ2%ÚEîdømKôö,Ò¬¡¨ÁT·ÅŒ$s¢»¸ßÈÐÑY¹ë±Åúm(72g¿‘-Kê³OŠÿ–ir’~›J†yHRÒq›¶€ i¿m—üÀ;//«½ý9b#ŒëVÂI¼èÁúÒÆàž¥÷ùLf£ä~ ¬¸ˆÝ2'íÃO[^E£êó¹ZŠæQ}tæfÒ·>çÒ+®;‰kz‰Ï¡R™ìס#þùÆW‰B9òñ^ú®Ê†h± ÀG.­Ýw5t©lûj›Ž‰7(q…«ñ/–ÖÔã0_ùæÖu3kwDL‚™µ¢vÓ½r0#¯ü 3Âík*›ÛûhPF[“Rè ¹whÛ™—Ï*Òsíj]*@¢K~¿ÇšÄaãxéñä#7ÂX¤©kÂè<#zn2.)¦#[è, òÛyÔc”"¤m$@1bY²™ÝëhiÍùý²®Ìîe¨„YÞ–&Úš¥µÅÐñú2úqES'mªúóÏUYì_hûåƒÿœ%*á¬D3ã|#«¾Ëc ”ŒÜY7Ýü.|Néý|+Õ‹ûB<ó£ëÜ…?âZ°÷RmÖšuÇ.¯Úa4wCªî¶Ö}¡ <#Yo‰½ÆjÞ;Ï5¼eÖC;ï»}Ä$ØÚYݱþ™­lµ ]U:ðñmA÷ %Šdã€ú¬¥i»d¥>Ô5(‡Ä+¶…°âɈv)³VÞ$©îpuD赎K_›n`3¬·õ¤9ðæãs¾©sDÃôvDxÙì²™ø-¬*M3M=ôúå)—ºHð4Éú.™Ò1¯XçÖ}îáJˆ1’Êž‚+) 4ü„\åeg\¡ $È(Èþ𒔇‡a¿CPáBÆ  çz(²üHæqÿ=N5¥ŒÏkLÑEòleÊßrtV‚p²åP–â°í1 BjÄCB›à•q\°±ŽÇÅo6|ÍmO©9 Õ$E!z.ß/V©õYépq_í'f±ï¶¾¢úq¯÷0Ó³vŽéᱯ–+{„Ô!9DÞ)‡ïm’rWV.ýI9IíÙ<=ªê÷DvVm'/3< Ó—Ìä—Û%²|úXc”’¸äï^‹Øð—ÍÆ§´Z<,_˜ò‚& ‘Õ{ >5¼Hmz˜;ÎÜÓã—ŽÐU|Ï=t“Œ(d¬5&Ë“˜—žê`ú%$n@1tkª¶äG@ð·‚™Y% K‹õ³z÷&Wæc5²;ÓBây¥gðťؘIA'iÓo‘‰‘œƒ;„›_Éå ’þ‰Ê^3%ÇoÆz-ŒßO§ãÝ!½çŸÇô=”ޤ¶§Wן¤vô9œÓä¿õË´×›¼¶ ê SQõp#׋ì«;Z×OoóØyÆÔ5#ÂèJÜŽ^‡R˜Fe#MKÈ뱸H2(ø¾³ä„Ø“+^ è.’G¬6¥›°*®’é18¿òÎkjö›sünÃ$”Moô¸REÆü”Ü|AƒÌOó”íôñ›ºENöw›ò:?Q!Šâù Es8GLZ#3+l‘`]º<ž êòßÚÈŒ éq&Í ]“jOÙ{¸-¸d 1UlÐ仆øÝ»Yn%x½*•ѸÁ_ QálééëGݬÛûÍ$—ý•-™C+aSK+HJßG‰¹ðõ°·hDcX™rˆçN­òø¥F¾z$ nøX½Ó¯äPµ`þJÛ®àÄ1s@¥ÆÍ¾¾y¬L:¾_Z˜vïˆì·Èr‚õº1fÎâ*e§D­`ïa7“PÒBV^ùù‡^‚ל±e(˜N§‡óíe5vw…²áŠEy°r2iùþJýΊjÈÖ¹î½gô‚øøeÆÐ\™É+Bäor•¸»“K"#•G8"ºþ·Ñ rÛ¬²Â¿ºO×èÊ‚Ýäo%õ.$rϺóΠ‘Œ;Í’­=~XŽúÕÏqD.ºHkº6Òh;\”PÞy5à¬0â"FwZšöô1þ4 Ühhü Ypnu8pŸQzƒM T¥ëOv&Ü Õ(ûÛì,p—vbZG7‰N Ò$:hÿˆ Z#cˆ—õ†ªNk /`’ó‰Ýš‹cÅ8µùŒgé68Ãåºñ Q1HMß¶P_‘>ÚÊç ªí|0>Þøˆ1,è¬m–÷¬¬‹¦ÔTGÛ[ÞXŒ ‘µKî¥z„ü}Iø”è‚ý­Ä6+‹ 5[ÿ¬ºL,"nVÅÇ~dì$*f=‡FƒÌ†/fhTm5š8>/I]{ÞÀ5\È2îJ”Õ2Uò?TÍm¿šì¸µ2îL¬¹l£~Höêî”l‹Â±c‘ ÌÜ ÂȰ˜€|¶»‡wÊ…’þN‚4},ŠZ¯©Á#Ù–Ýýä¨|…¯¸\&šÃG¥(æ QG5ç¹Æ¸–2<6¼6®É†¬«é|XrÂñ©¿k¡‰¢ÙhÕÅ@—-«äY/; }³^$ˆ¯Íy[µî¥y¯~¸3®3™§-K}uð NS>=SäúrÙ7FhLã¹Ñ‡u¦¸¨®eniµ´ÖØ¢_¨œ”iŠ ÐŽl Æ³àQæ/5µ'š¯Ö»˜÷¦÷¡Ãm;°öUˆÝgε¦m³éÄdž½‘ñK#åOŸ&K6;AEô–R¦ß2x†§Û6m¾\·8až0·¸÷ÚŸúÊà;ÈE²³à„­zÄs)šù£å‡è(Ÿ±&ôº.z³*/:d©ù0}²|o³gUí³éëný y×étÆ…Køižßþô]¸ `el—Lh{ã÷¡Ï*š°/ÓGw…båBŠŽVòHÊ9¿b?+ñ±Êä"Z}‘,G`cøå^¯dÀá ¬pÁÏÛ^—YîL/"3ˆv¦9ž3Êhb~C㸒gÉY;uñj§¹ïé*Û› 6éaS1ŠÁ,Ö»¡í_p}¹;Uï@ƒ]ñ®V@‡´Z‰ºÛª—²·Ûù;&zŸ«iÆ×"Ó_?:‰¨—âŸ`—Ëe2’+i—™5­Ê2Î/Q!úZ_;%b»ÄÓƒ& ÀW±‚0í"íª¡šö2ÿ¡Ø>û‰šÏV[Ó%dæuwcA2»Î^¹¼òòzU2/ê.k•ËÄÉMŠwÑ*ë)„•Ö߆µé`(˜“óÊ Æ¦KÙÛΛ]ÞZêQ7ÛNá'·ÏI$8!c/ŠQ#íêI–9&¥vòEÞ9}fË´ëÓ)Ì-䃱ƒ°€['´fii-ó%ûF#pwï]yçl‰]€Žöà7š sD]on¢_ áÈ]ša³8PʸSs_=ªÒ¥PÂ}†‰Œ`Ûç=áá{)ÎÌñ­|ÆAá7¡¹¹ /ß’Sq‹êëXb݉òŒÙ"ô›÷¬Ö%P àR‘ûNF˜uo8ãú ½6±½Õî­Òb‘Iî亊Ki+Åi¨RªE›,Üø6zeÓÓ¿ÿýFå®~v˜…sƒ¥ž­)<Òü-‚(Z ˜˜šúÛ|é4¡=ýÃhÉ‘joÔå‹mž ©¬(o+¹îjâOnw}yõŸ`‘s•@Tê4ý¾ÉÑKÄ‚!‚ÐD“Ê r!¯Z@Le› C§gÖ‰^¥³´®ï)¹ìd!ÏvΟßÂ*—éƒýž)2Uï€ ò^–„#i[d0à•ËRœ{1* UˆÂÕŽÄÖg¶TÏñe‚줽c¸kÉWeõÈZj6JQýÏÛÂ߇a˜Ð«§unµ¡p–ÿD^mF9A‚={Ÿ×+²Òd•˜ÈÁ˜!ãÒ·ª½ïªLîÁ}ç´leYô¨q}8“Êm|œ?Ùåˆ%^ Ѱ7p8ù=çz–Úç¡eiÐálÆ#4`°5ˆ´AÛ¹X(ë×ÎÑ»½”@i¤P›:[þK 5]®ýõþå-²£ï6$-nÀh’]RqÈÊÁû¬è3|];Ã!ïLWZ&þÓPïçOg&£-…½äH„~®[tÁ­ bÏÇßî‹ç+a2¥xLv'6 Ûªù}‘]Ù¿Š©ù…¿5ƒSà†˜m€*>Ci%ÄänátY†ƒÞüƒDëãYy¶¦Y‹q0e¼Z0ús–_Í.c9ƒ_–æÓúfŠ›©[R×x‡Åœ:`EÂ|9õþÊ”÷Í —nf_ª”ºmÄÛëÍŽ#'5¬¬gßžaë/N×®#ÞÄû$r Û|hÕ=( “Äê´~MeùèŽ.#l­OyžÚ^ZЉRaØÌ° sá\Ï·™Ã¬,q‹ø676£›úùNJÀÛÓÐãøF@»¹_xBâ7Ú€Iê¢dAÕ2qòÎÔR‘Ê~DW€=iÐu~»+‚Æ.f}vÖêë8ߦ™ÉRêö¾ËˆuîØ„9¼Œ³«\¾ ]‚2ÒÇw+E•¼å{Ô."œ™O¨»ÿËóÿü?`a ïp[Ìÿ‘CÅéendstream endobj 46 0 obj << /Type /Font /Subtype /Type1 /Encoding 119 0 R /FirstChar 46 /LastChar 121 /Widths 123 0 R /BaseFont /DZBWYT+NimbusSanL-Bold /FontDescriptor 44 0 R >> endobj 44 0 obj << /Ascent 722 /CapHeight 722 /Descent -217 /FontName /DZBWYT+NimbusSanL-Bold /ItalicAngle 0 /StemV 141 /XHeight 532 /FontBBox [-173 -307 1003 949] /Flags 4 /CharSet (/period/one/two/three/four/colon/at/A/B/C/D/I/O/P/R/T/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/y) /FontFile 45 0 R >> endobj 123 0 obj [278 0 0 556 556 556 556 0 0 0 0 0 333 0 0 0 0 0 975 722 722 722 722 0 0 0 0 278 0 0 0 0 0 778 667 0 722 0 611 0 0 0 0 0 0 0 0 0 0 0 0 556 611 556 611 556 333 611 611 278 278 556 278 889 611 611 611 611 389 556 333 611 556 778 0 556 ] endobj 47 0 obj << /Type /Pages /Count 6 /Parent 124 0 R /Kids [38 0 R 49 0 R 57 0 R 88 0 R 101 0 R 105 0 R] >> endobj 114 0 obj << /Type /Pages /Count 2 /Parent 124 0 R /Kids [111 0 R 116 0 R] >> endobj 124 0 obj << /Type /Pages /Count 8 /Kids [47 0 R 114 0 R] >> endobj 125 0 obj << /Type /Outlines /First 3 0 R /Last 35 0 R /Count 7 >> endobj 35 0 obj << /Title 36 0 R /A 33 0 R /Parent 125 0 R /Prev 31 0 R >> endobj 31 0 obj << /Title 32 0 R /A 29 0 R /Parent 125 0 R /Prev 19 0 R /Next 35 0 R >> endobj 27 0 obj << /Title 28 0 R /A 25 0 R /Parent 19 0 R /Prev 23 0 R >> endobj 23 0 obj << /Title 24 0 R /A 21 0 R /Parent 19 0 R /Next 27 0 R >> endobj 19 0 obj << /Title 20 0 R /A 17 0 R /Parent 125 0 R /Prev 15 0 R /Next 31 0 R /First 23 0 R /Last 27 0 R /Count -2 >> endobj 15 0 obj << /Title 16 0 R /A 13 0 R /Parent 125 0 R /Prev 11 0 R /Next 19 0 R >> endobj 11 0 obj << /Title 12 0 R /A 9 0 R /Parent 125 0 R /Prev 7 0 R /Next 15 0 R >> endobj 7 0 obj << /Title 8 0 R /A 5 0 R /Parent 125 0 R /Prev 3 0 R /Next 11 0 R >> endobj 3 0 obj << /Title 4 0 R /A 1 0 R /Parent 125 0 R /Next 7 0 R >> endobj 126 0 obj << /Names [(0) 43 0 R (1.0) 2 0 R (14) 80 0 R (16) 91 0 R (17) 92 0 R (18) 93 0 R (19) 94 0 R (2.0) 6 0 R (20) 95 0 R (21) 96 0 R (22) 97 0 R (23) 98 0 R (24) 99 0 R (25) 81 0 R (27) 103 0 R (28) 82 0 R (3.0) 10 0 R (30) 107 0 R (31) 83 0 R (33) 108 0 R (34) 84 0 R (36) 109 0 R (37) 85 0 R (39) 113 0 R (4.0) 14 0 R (40) 86 0 R (42) 118 0 R (5.0) 18 0 R (5.1.1) 22 0 R (5.2.1) 26 0 R (6.0) 30 0 R (7.0) 34 0 R (Doc-Start) 42 0 R (page.1) 41 0 R (page.2) 51 0 R (page.3) 59 0 R (page.4) 90 0 R (table.1) 55 0 R] /Limits [(0) (table.1)] >> endobj 127 0 obj << /Kids [126 0 R] >> endobj 128 0 obj << /Dests 127 0 R >> endobj 129 0 obj << /Type /Catalog /Pages 124 0 R /Outlines 125 0 R /Names 128 0 R /PageMode /UseOutlines /OpenAction 37 0 R >> endobj 130 0 obj << /Author()/Title()/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfeTeX-1.21a)/Keywords() /CreationDate (D:20130312005336+01'00') /PTEX.Fullbanner (This is pdfeTeX, Version 3.141592-1.21a-2.2 (Web2C 7.5.4) kpathsea version 3.5.4) >> endobj xref 0 131 0000000000 65535 f 0000000009 00000 n 0000001456 00000 n 0000069000 00000 n 0000000048 00000 n 0000000086 00000 n 0000015997 00000 n 0000068916 00000 n 0000000125 00000 n 0000000160 00000 n 0000017234 00000 n 0000068830 00000 n 0000000199 00000 n 0000000225 00000 n 0000018400 00000 n 0000068742 00000 n 0000000265 00000 n 0000000307 00000 n 0000019227 00000 n 0000068617 00000 n 0000000347 00000 n 0000000389 00000 n 0000019413 00000 n 0000068543 00000 n 0000000431 00000 n 0000000468 00000 n 0000019597 00000 n 0000068469 00000 n 0000000510 00000 n 0000000569 00000 n 0000020281 00000 n 0000068381 00000 n 0000000609 00000 n 0000000653 00000 n 0000020998 00000 n 0000068306 00000 n 0000000693 00000 n 0000000758 00000 n 0000001158 00000 n 0000001517 00000 n 0000000808 00000 n 0000001276 00000 n 0000001336 00000 n 0000001396 00000 n 0000067409 00000 n 0000057386 00000 n 0000067240 00000 n 0000067967 00000 n 0000002164 00000 n 0000001926 00000 n 0000001587 00000 n 0000002044 00000 n 0000056666 00000 n 0000041327 00000 n 0000056495 00000 n 0000002104 00000 n 0000016058 00000 n 0000013651 00000 n 0000002246 00000 n 0000015937 00000 n 0000013879 00000 n 0000040819 00000 n 0000030220 00000 n 0000040647 00000 n 0000014026 00000 n 0000014174 00000 n 0000014321 00000 n 0000014468 00000 n 0000014615 00000 n 0000014762 00000 n 0000014909 00000 n 0000015056 00000 n 0000015202 00000 n 0000015349 00000 n 0000015496 00000 n 0000015643 00000 n 0000015790 00000 n 0000029810 00000 n 0000023106 00000 n 0000029634 00000 n 0000017174 00000 n 0000018339 00000 n 0000019166 00000 n 0000019352 00000 n 0000019536 00000 n 0000020220 00000 n 0000020937 00000 n 0000017844 00000 n 0000016996 00000 n 0000016164 00000 n 0000017114 00000 n 0000017296 00000 n 0000017356 00000 n 0000017416 00000 n 0000017478 00000 n 0000017538 00000 n 0000017598 00000 n 0000017660 00000 n 0000017722 00000 n 0000017782 00000 n 0000018525 00000 n 0000018218 00000 n 0000017938 00000 n 0000018463 00000 n 0000019722 00000 n 0000019045 00000 n 0000018620 00000 n 0000019290 00000 n 0000019474 00000 n 0000019660 00000 n 0000020406 00000 n 0000020098 00000 n 0000019817 00000 n 0000020344 00000 n 0000068079 00000 n 0000021123 00000 n 0000020815 00000 n 0000020501 00000 n 0000021061 00000 n 0000021218 00000 n 0000030048 00000 n 0000041099 00000 n 0000057024 00000 n 0000067715 00000 n 0000068164 00000 n 0000068232 00000 n 0000069071 00000 n 0000069627 00000 n 0000069666 00000 n 0000069704 00000 n 0000069833 00000 n trailer << /Size 131 /Root 129 0 R /Info 130 0 R /ID [<17CE741A6B296FEE70F61A17B6706C18> <17CE741A6B296FEE70F61A17B6706C18>] >> startxref 70096 %%EOF libdbi-drivers-0.9.0/drivers/oracle/dbd_oracle/c26.html000644 001750 001750 00000003401 12117467201 023547 0ustar00markusmarkus000000 000000 Introduction

    Chapter 1. Introduction

    TODO

    libdbi-drivers-0.9.0/drivers/oracle/dbd_oracle/c29.html000644 001750 001750 00000003730 12117467201 023557 0ustar00markusmarkus000000 000000 Installation

    Chapter 2. Installation

    TODO

    libdbi-drivers-0.9.0/drivers/oracle/dbd_oracle/c38.html000644 001750 001750 00000003553 12117467201 023562 0ustar00markusmarkus000000 000000 Driver options

    Chapter 3. Driver options

    TODO

    libdbi-drivers-0.9.0/drivers/oracle/dbd_oracle/c41.html000644 001750 001750 00000003267 12117467201 023556 0ustar00markusmarkus000000 000000 Peculiarities you should know about

    Chapter 4. Peculiarities you should know about

    TODO

    libdbi-drivers-0.9.0/drivers/oracle/dbd_oracle/f15.html000644 001750 001750 00000005664 12117467201 023565 0ustar00markusmarkus000000 000000 Preface

    Preface

    libdbi is a database abstraction layer written in C. It implements a framework that can utilize separate driver libraries for specific database servers. The libdbi-drivers project provides the drivers necessary to talk to the supported database servers.

    This manual provides information about the oracle driver. The manual is intended for programmers who write applications linked against libdbi and who want their applications to work with the oracle driver.

    Questions and comments about the Oracle driver should be sent to the libdbi-drivers-devel mailing list. Visit the libdbi-drivers-devel list page to subscribe and for further information. Questions and comments about the libdbi library should be sent to the appropriate libdbi mailing list.

    The Oracle driver is maintained by Ashish Ranjan.

    libdbi-drivers-0.9.0/drivers/oracle/dbd_oracle/index.html000644 001750 001750 00000004274 12117467201 024275 0ustar00markusmarkus000000 000000 Oracle driver manual

    Oracle driver manual

    A libdbi driver using the Oracle

    Ashish Ranjan

    Revision History
    Revision 0.0.12005-08-21

    libdbi-drivers-0.9.0/drivers/oracle/dbd_oracle/x32.html000644 001750 001750 00000003744 12117467201 023603 0ustar00markusmarkus000000 000000 Prerequisites

    2.1. Prerequisites

    The following packages have to be installed on your system:

    libdbi-drivers-0.9.0/drivers/oracle/dbd_oracle/x35.html000644 001750 001750 00000003661 12117467201 023604 0ustar00markusmarkus000000 000000 Build and install the oracle driverlibdbi-drivers-0.9.0/drivers/msql/dbd_msql/000755 001750 001750 00000000000 12117473272 021514 5ustar00markusmarkus000000 000000 libdbi-drivers-0.9.0/drivers/msql/Makefile.am000644 001750 001750 00000002602 11447472773 021775 0ustar00markusmarkus000000 000000 ## Process this with automake to create Makefile.in AUTOMAKE_OPTIONS = foreign docdir = $(datadir)/doc/$(PACKAGE)-$(VERSION) if HAVE_MSQL if BUILDDOCS htdocdir = $(docdir)/dbd_msql doc_data = dbd_msql.pdf htdoc_DATA = dbd_msql/* else htdocdir = doc_DATA = htdoc_DATA = endif msql_ltlibs = libdbdmsql.la msql_ldflags = -module -avoid-version msql_sources = dbd_msql.c else htdocdir = doc_DATA = htdoc_DATA = msql_ltlibs = msql_ldflags = msql_sources = endif INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/include @DBI_INCLUDE@ @MSQL_INCLUDE@ libdir = $(driverdir) lib_LTLIBRARIES = $(msql_ltlibs) libdbdmsql_la_LDFLAGS = $(msql_ldflags) @MSQL_LDFLAGS@ @MSQL_LIBS@ @LIBADD_LIBDBI@ libdbdmsql_la_SOURCES = $(msql_sources) libdbdmsql_la_DEPENDENCIES = dbd_msql.h EXTRA_DIST = dbd_msql.c dbd_msql.h dbd_msql.sgml dbd_msql.pdf dbd_msql/* dbd_msql.pdf: dbd_msql.sgml @echo "Converting dbd_msql.sgml to PDF..."; openjade -t tex -V tex-backend -d $(top_srcdir)/doc/include/doc-print.dsl dbd_msql.sgml # run jadetex three times to get the references right pdftex "&pdfjadetex" dbd_msql.tex pdftex "&pdfjadetex" dbd_msql.tex pdftex "&pdfjadetex" dbd_msql.tex dbd_msql/*: dbd_msql.sgml @echo "Converting dbd_msql.sgml to HTML..."; mkdir -p dbd_msql && cd dbd_msql && openjade -t sgml -d $(top_srcdir)/../doc/include/doc-html.dsl ../dbd_msql.sgml maintainer-clean: clean rm -f dbd_msql.pdf dbd_msql/* libdbi-drivers-0.9.0/drivers/msql/Makefile.in000644 001750 001750 00000054707 12117467053 022011 0ustar00markusmarkus000000 000000 # Makefile.in generated by automake 1.12.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2012 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = drivers/msql DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(top_srcdir)/depcomp AUTHORS ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(docdir)" \ "$(DESTDIR)$(htdocdir)" LTLIBRARIES = $(lib_LTLIBRARIES) libdbdmsql_la_LIBADD = am__libdbdmsql_la_SOURCES_DIST = dbd_msql.c @HAVE_MSQL_TRUE@am__objects_1 = dbd_msql.lo am_libdbdmsql_la_OBJECTS = $(am__objects_1) libdbdmsql_la_OBJECTS = $(am_libdbdmsql_la_OBJECTS) libdbdmsql_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(libdbdmsql_la_LDFLAGS) $(LDFLAGS) -o $@ @HAVE_MSQL_TRUE@am_libdbdmsql_la_rpath = -rpath $(libdir) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(libdbdmsql_la_SOURCES) DIST_SOURCES = $(am__libdbdmsql_la_SOURCES_DIST) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac DATA = $(doc_DATA) $(htdoc_DATA) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DB2_INCLUDE = @DB2_INCLUDE@ DB2_LDFLAGS = @DB2_LDFLAGS@ DB2_LIBS = @DB2_LIBS@ DB2_TEST = @DB2_TEST@ DBI_INCLUDE = @DBI_INCLUDE@ DEBUG = @DEBUG@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FIREBIRD_INCLUDE = @FIREBIRD_INCLUDE@ FIREBIRD_ISQL = @FIREBIRD_ISQL@ FIREBIRD_ISQL_FLAG = @FIREBIRD_ISQL_FLAG@ FIREBIRD_LDFLAGS = @FIREBIRD_LDFLAGS@ FIREBIRD_LIBS = @FIREBIRD_LIBS@ FIREBIRD_TEST = @FIREBIRD_TEST@ FREETDS_INCLUDE = @FREETDS_INCLUDE@ FREETDS_LDFLAGS = @FREETDS_LDFLAGS@ FREETDS_LIBS = @FREETDS_LIBS@ FREETDS_TEST = @FREETDS_TEST@ GREP = @GREP@ INGRES_INCLUDE = @INGRES_INCLUDE@ INGRES_LDFLAGS = @INGRES_LDFLAGS@ INGRES_LIBS = @INGRES_LIBS@ INGRES_TEST = @INGRES_TEST@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBADD_LIBDBI = @LIBADD_LIBDBI@ LIBDBI_LIBDIR = @LIBDBI_LIBDIR@ LIBDBI_TEST = @LIBDBI_TEST@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSQL_INCLUDE = @MSQL_INCLUDE@ MSQL_LDFLAGS = @MSQL_LDFLAGS@ MSQL_LIBS = @MSQL_LIBS@ MSQL_TEST = @MSQL_TEST@ MYSQL_CONFIG = @MYSQL_CONFIG@ MYSQL_INCLUDE = @MYSQL_INCLUDE@ MYSQL_LDFLAGS = @MYSQL_LDFLAGS@ MYSQL_LIBS = @MYSQL_LIBS@ MYSQL_TEST = @MYSQL_TEST@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ ORACLE_INCLUDE = @ORACLE_INCLUDE@ ORACLE_LDFLAGS = @ORACLE_LDFLAGS@ ORACLE_LIBS = @ORACLE_LIBS@ ORACLE_TEST = @ORACLE_TEST@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PGSQL_INCLUDE = @PGSQL_INCLUDE@ PGSQL_LDFLAGS = @PGSQL_LDFLAGS@ PGSQL_LIBS = @PGSQL_LIBS@ PGSQL_TEST = @PGSQL_TEST@ PG_CONFIG = @PG_CONFIG@ PROFILE = @PROFILE@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SQLITE3_INCLUDE = @SQLITE3_INCLUDE@ SQLITE3_LDFLAGS = @SQLITE3_LDFLAGS@ SQLITE3_LIBS = @SQLITE3_LIBS@ SQLITE3_TEST = @SQLITE3_TEST@ SQLITE_INCLUDE = @SQLITE_INCLUDE@ SQLITE_LDFLAGS = @SQLITE_LDFLAGS@ SQLITE_LIBS = @SQLITE_LIBS@ SQLITE_TEST = @SQLITE_TEST@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ dbi_dbdir = @dbi_dbdir@ docdir = $(datadir)/doc/$(PACKAGE)-$(VERSION) docs_subdirs = @docs_subdirs@ driverdir = @driverdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = $(driverdir) libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = foreign @BUILDDOCS_FALSE@@HAVE_MSQL_TRUE@htdocdir = @BUILDDOCS_TRUE@@HAVE_MSQL_TRUE@htdocdir = $(docdir)/dbd_msql @HAVE_MSQL_FALSE@htdocdir = @BUILDDOCS_TRUE@@HAVE_MSQL_TRUE@doc_data = dbd_msql.pdf @BUILDDOCS_FALSE@@HAVE_MSQL_TRUE@htdoc_DATA = @BUILDDOCS_TRUE@@HAVE_MSQL_TRUE@htdoc_DATA = dbd_msql/* @HAVE_MSQL_FALSE@htdoc_DATA = @BUILDDOCS_FALSE@@HAVE_MSQL_TRUE@doc_DATA = @HAVE_MSQL_FALSE@doc_DATA = @HAVE_MSQL_FALSE@msql_ltlibs = @HAVE_MSQL_TRUE@msql_ltlibs = libdbdmsql.la @HAVE_MSQL_FALSE@msql_ldflags = @HAVE_MSQL_TRUE@msql_ldflags = -module -avoid-version @HAVE_MSQL_FALSE@msql_sources = @HAVE_MSQL_TRUE@msql_sources = dbd_msql.c INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/include @DBI_INCLUDE@ @MSQL_INCLUDE@ lib_LTLIBRARIES = $(msql_ltlibs) libdbdmsql_la_LDFLAGS = $(msql_ldflags) @MSQL_LDFLAGS@ @MSQL_LIBS@ @LIBADD_LIBDBI@ libdbdmsql_la_SOURCES = $(msql_sources) libdbdmsql_la_DEPENDENCIES = dbd_msql.h EXTRA_DIST = dbd_msql.c dbd_msql.h dbd_msql.sgml dbd_msql.pdf dbd_msql/* all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign drivers/msql/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign drivers/msql/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ } uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libdbdmsql.la: $(libdbdmsql_la_OBJECTS) $(libdbdmsql_la_DEPENDENCIES) $(EXTRA_libdbdmsql_la_DEPENDENCIES) $(libdbdmsql_la_LINK) $(am_libdbdmsql_la_rpath) $(libdbdmsql_la_OBJECTS) $(libdbdmsql_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dbd_msql.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-docDATA: $(doc_DATA) @$(NORMAL_INSTALL) @list='$(doc_DATA)'; test -n "$(docdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(docdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(docdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(docdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(docdir)" || exit $$?; \ done uninstall-docDATA: @$(NORMAL_UNINSTALL) @list='$(doc_DATA)'; test -n "$(docdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(docdir)'; $(am__uninstall_files_from_dir) install-htdocDATA: $(htdoc_DATA) @$(NORMAL_INSTALL) @list='$(htdoc_DATA)'; test -n "$(htdocdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(htdocdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(htdocdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(htdocdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(htdocdir)" || exit $$?; \ done uninstall-htdocDATA: @$(NORMAL_UNINSTALL) @list='$(htdoc_DATA)'; test -n "$(htdocdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(htdocdir)'; $(am__uninstall_files_from_dir) ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(DATA) installdirs: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(docdir)" "$(DESTDIR)$(htdocdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-docDATA install-htdocDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-libLTLIBRARIES install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-docDATA uninstall-htdocDATA \ uninstall-libLTLIBRARIES .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libLTLIBRARIES clean-libtool cscopelist ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am \ install-docDATA install-dvi install-dvi-am install-exec \ install-exec-am install-htdocDATA install-html install-html-am \ install-info install-info-am install-libLTLIBRARIES \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \ uninstall-am uninstall-docDATA uninstall-htdocDATA \ uninstall-libLTLIBRARIES dbd_msql.pdf: dbd_msql.sgml @echo "Converting dbd_msql.sgml to PDF..."; openjade -t tex -V tex-backend -d $(top_srcdir)/doc/include/doc-print.dsl dbd_msql.sgml # run jadetex three times to get the references right pdftex "&pdfjadetex" dbd_msql.tex pdftex "&pdfjadetex" dbd_msql.tex pdftex "&pdfjadetex" dbd_msql.tex dbd_msql/*: dbd_msql.sgml @echo "Converting dbd_msql.sgml to HTML..."; mkdir -p dbd_msql && cd dbd_msql && openjade -t sgml -d $(top_srcdir)/../doc/include/doc-html.dsl ../dbd_msql.sgml maintainer-clean: clean rm -f dbd_msql.pdf dbd_msql/* # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: libdbi-drivers-0.9.0/drivers/msql/AUTHORS000644 001750 001750 00000000220 07671604020 020765 0ustar00markusmarkus000000 000000 The following people have been involved in the mSQL driver development: Main developer: * Christian M. Stamgren libdbi-drivers-0.9.0/drivers/msql/dbd_msql.c000644 001750 001750 00000030731 12073360174 021661 0ustar00markusmarkus000000 000000 /* * libdbi - database independent abstraction layer for C. * Copyright (C) 2001-2002, David Parker and Mark Tobenkin. * http://libdbi.sourceforge.net * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * dbd_msql.c: mSQL database support * Copyright (C) 2003, Christian M. Stamgren * http://libdbi-drivers.sourceforge.net * */ #ifdef HAVE_CONFIG_H #include #endif #define _GNU_SOURCE /* we need asprintf */ #ifndef HAVE_ATOLL long long atoll(const char *str); #endif #ifndef HAVE_STRTOLL long long strtoll(const char *nptr, char **endptr, int base); #endif #include #include #include #include #include #include #include #include "dbd_msql.h" static const dbi_info_t driver_info = { "msql", "Mini SQL (mSQL) database support", "Christian M. Stamgren ", "libdbi-drivers.sourceforge.net", "dbd_msql v" VERSION, __DATE__ }; static const char *custom_functions[] = {NULL}; static const char *reserved_words[] = MSQL_RESERVED_WORDS; static const char msql_encoding[] = "ISO-8859-1"; void _translate_msql_type(int fieldtype, unsigned short *type, unsigned int *attribs); void _get_field_info(dbi_result_t *result); void _get_row_data(dbi_result_t *result, dbi_row_t *row, unsigned long long rowidx); void dbd_register_driver(const dbi_info_t **_driver_info, const char ***_custom_functions, const char ***_reserved_words) { *_driver_info = &driver_info; *_custom_functions = custom_functions; *_reserved_words = reserved_words; } int dbd_initialize(dbi_driver_t *driver) { /* this indicates the driver can be safely unloaded when libdbi is shut down. Change the value to '0' (zero) if the driver, or a library it is linked against, installs exit handlers via atexit() */ _dbd_register_driver_cap(driver, "safe_dlclose", 1); /* this indicates the database engine does not support transactions */ _dbd_register_driver_cap(driver, "transaction_support", 0); /* this indicates the database engine does not support savepoints */ _dbd_register_driver_cap(driver, "savepoint_support", 0); return 0; } int dbd_finalize(dbi_driver_t *driver) { /* perform any database-specific client library shutdown. * this is called right before dlclose()ing the driver. * return -1 on error, 0 on success. */ return 0; } int dbd_connect(dbi_conn_t *conn) { int connection; const char *host = dbi_conn_get_option(conn, "host"); const char *dbname = dbi_conn_get_option(conn, "dbname"); if(( connection = msqlConnect( (char *)host )) > 0){ conn->connection = (void *)connection; if( dbname ) { msqlSelectDB(connection, (char *)dbname); conn->current_db = strdup(dbname); } return 0; } return -1; } int dbd_disconnect(dbi_conn_t *conn) { if (conn->connection) msqlClose((int)conn->connection); return 0; } int dbd_fetch_row(dbi_result_t *result, unsigned long long rowidx) { dbi_row_t *row = NULL; if (result->result_state == NOTHING_RETURNED) return 0; if (result->result_state == ROWS_RETURNED) { row = _dbd_row_allocate(result->numfields); _get_row_data(result, row, rowidx); _dbd_row_finalize(result, row, rowidx); } return 1; } int dbd_free_query(dbi_result_t *result) { if (result->result_handle) msqlFreeResult((m_result *)result->result_handle); return 0; } int dbd_goto_row(dbi_result_t *result, unsigned long long rowidx, unsigned long long currowidx) { if (rowidx != currowidx+1) { msqlDataSeek((m_result *)result->result_handle, rowidx); } /* else: nothing to do, next fetch will fetch the desired row */ return 1; } int dbd_get_socket(dbi_conn_t *conn) { if(! conn->connection) return -1; /* todo: does this make sense? */ return (int)conn->connection; } const char *dbd_get_encoding(dbi_conn_t *conn){ /* ToDo: can mSQL do better than this? */ return msql_encoding; } const char* dbd_encoding_to_iana(const char *db_encoding) { /* nothing to translate, return original encoding */ return db_encoding; } const char* dbd_encoding_from_iana(const char *iana_encoding) { /* nothing to translate, return original encoding */ return iana_encoding; } char *dbd_get_engine_version(dbi_conn_t *conn, char *versionstring) { /* todo: query db engine for version */ *versionstring = '\0'; return versionstring; } dbi_result_t *dbd_list_dbs(dbi_conn_t *conn, const char *pattern) { dbi_result_t *result = NULL; m_result *dbs; dbs = msqlListDBs((int)conn->connection); if( dbs != NULL ) { result = _dbd_result_create(conn, dbs, (dbs ? msqlNumRows(dbs) : 0), 0); _dbd_result_set_numfields(result, msqlNumFields(((m_result *)result->result_handle))); _get_field_info(result); } return result; } /* This function needs some work, to function like the other drivers */ dbi_result_t *dbd_list_tables(dbi_conn_t *conn, const char *db, const char *pattern) { dbi_result_t *result = NULL; m_result *tables; tables = msqlListTables((int)conn->connection); if( tables != NULL ) { result = _dbd_result_create(conn, (void *)tables, (tables ? msqlNumRows(tables) : 0), 0); _dbd_result_set_numfields(result, msqlNumFields(((m_result *)result->result_handle))); _get_field_info(result); } return result; } size_t dbd_quote_string(dbi_driver_t *driver, const char *orig, char *dest) { size_t len; const char *escaped = "\'\"\\"; strcpy(dest, "'"); len = _dbd_escape_chars(dest, orig, strlen(orig), escaped); strcat(dest, "'"); return len+2; } int dbd_conn_quote_string(dbi_conn_t *conn, const char *orig, char *dest) { return dbd_quote_string(conn->driver, orig, dest); } size_t dbd_quote_binary(dbi_conn_t *conn, const unsigned char *orig, size_t from_length, unsigned char **ptr_dest) { unsigned char *temp; size_t len; if ((temp = malloc(from_length*2)) == NULL) { return 0; } strcpy((char *)temp, "\'"); if (from_length) { len = _dbd_encode_binary(orig, from_length, temp+1); } else { len = 0; } strcat((char *)temp, "'"); *ptr_dest = temp; return len+2; } dbi_result_t *dbd_query_null(dbi_conn_t *conn, const unsigned char *statement, size_t st_length) { return NULL; } dbi_result_t *dbd_query(dbi_conn_t *conn, const char *statement) { dbi_result_t *result = NULL; int rows = 0; m_result *res; if ((rows = msqlQuery((int)conn->connection, (char *)statement)) < 0 ) { return NULL; } res = msqlStoreResult(); result = _dbd_result_create(conn, (void *)res, (rows > 0 ? rows : 0), 0); if(strncasecmp(statement, "select", 6) == 0) { //This is a dirty hack and I know it... _dbd_result_set_numfields(result, msqlNumFields(((m_result *)result->result_handle))); _get_field_info(result); } return result; } int dbd_transaction_begin(dbi_conn_t *conn) { /* not supported */ return 0; } int dbd_transaction_commit(dbi_conn_t *conn) { /* not supported */ return 0; } int dbd_transaction_rollback(dbi_conn_t *conn) { /* not supported */ return 0; } int dbd_savepoint(dbi_conn_t *conn, const char *savepoint) { /* SAVEPOINT */ return 0; } int dbd_rollback_to_savepoint(dbi_conn_t *conn, const char *savepoint) { /* ROLLBACK TO SAVEPOINT */ return 0; } int dbd_release_savepoint(dbi_conn_t *conn, const char *savepoint) { /* RELEASE SAVEPOINT */ return 0; } const char *dbd_select_db(dbi_conn_t *conn, const char *db) { if (msqlSelectDB((int)conn->connection, (char *)db) < 0) { _dbd_internal_error_handler(conn, NULL, DBI_ERROR_DBD); return ""; } return db; } int dbd_geterror(dbi_conn_t *conn, int *err_no, char **errstr) { if(!msqlErrMsg) return -1; *err_no = 0; *errstr = strdup(msqlErrMsg); return 2; } unsigned long long dbd_get_seq_last(dbi_conn_t *conn, const char *sequence) { _dbd_internal_error_handler(conn, NULL, DBI_ERROR_UNSUPPORTED); return 0; } unsigned long long dbd_get_seq_next(dbi_conn_t *conn, const char *sequence) { _dbd_internal_error_handler(conn, NULL, DBI_ERROR_UNSUPPORTED); return 0; } int dbd_ping(dbi_conn_t *conn) { /* assume the server is still alive */ return 1; } /* CORE MSQL DATA FETCHING STUFF */ void _translate_msql_type(int fieldtype, unsigned short *type, unsigned int *attribs) { unsigned int _type = 0; unsigned int _attribs = 0; switch (fieldtype) { case UINT_TYPE: _attribs |= DBI_INTEGER_UNSIGNED; /* fall trough */ case INT_TYPE: _type = DBI_TYPE_INTEGER; _attribs |= DBI_INTEGER_SIZE3; break; case UINT64_TYPE: _attribs |= DBI_INTEGER_UNSIGNED; /* fall trough */ case INT64_TYPE: _type = DBI_TYPE_INTEGER; _attribs |= DBI_INTEGER_SIZE8; break; case UINT8_TYPE: _attribs |= DBI_INTEGER_UNSIGNED; /* fall trough */ case INT8_TYPE: _type = DBI_TYPE_INTEGER; _attribs |= DBI_INTEGER_SIZE1; break; case UINT16_TYPE: _attribs |= DBI_INTEGER_UNSIGNED; /* fall trough */ case INT16_TYPE: _type = DBI_TYPE_INTEGER; _attribs |= DBI_INTEGER_SIZE2; break; case BYTE_TYPE: _type = DBI_TYPE_INTEGER; _attribs |= DBI_INTEGER_SIZE1; break; case MONEY_TYPE: case IPV4_TYPE: case CIDR4_TYPE: case CIDR6_TYPE: case TEXT_TYPE: case CHAR_TYPE: _type = DBI_TYPE_STRING; break; case DATE_TYPE: _type = DBI_TYPE_DATETIME; _attribs |= DBI_DATETIME_DATE; break; case TIME_TYPE: _type = DBI_TYPE_DATETIME; _attribs |= DBI_DATETIME_TIME; break; case REAL_TYPE: _type = DBI_TYPE_DECIMAL; _attribs |= DBI_DECIMAL_SIZE4; break; case IDENT_TYPE: case NULL_TYPE: default: _type = DBI_TYPE_STRING; break; } *type = _type; *attribs = _attribs; } void _get_field_info(dbi_result_t *result) { unsigned int idx = 0; m_field *field; unsigned short fieldtype; unsigned int fieldattribs; while ((field = msqlFetchField((m_result *)result->result_handle)) != NULL) { _translate_msql_type(field->type, &fieldtype, &fieldattribs); _dbd_result_add_field(result, idx, field->name, fieldtype, fieldattribs); idx++; } } void _get_row_data(dbi_result_t *result, dbi_row_t *row, unsigned long long rowidx) { m_result *_res = result->result_handle; m_row _row; unsigned int curfield = 0; char *raw = NULL; unsigned int sizeattrib; dbi_data_t *data; msqlDataSeek(_res, rowidx); _row = msqlFetchRow(_res); while ( curfield < result->numfields ) { raw = _row[curfield]; data = &row->field_values[curfield]; row->field_sizes[curfield] = 0; if( raw == NULL) _set_field_flag( row, curfield, DBI_VALUE_NULL, 1); switch (result->field_types[curfield]) { case DBI_TYPE_INTEGER: sizeattrib = _isolate_attrib(result->field_attribs[curfield], DBI_INTEGER_SIZE1, DBI_INTEGER_SIZE8); switch (sizeattrib) { case DBI_INTEGER_SIZE1: data->d_char = (char) atol(raw); break; case DBI_INTEGER_SIZE2: data->d_short = (short) atol(raw); break; case DBI_INTEGER_SIZE3: case DBI_INTEGER_SIZE4: data->d_long = (int) atol(raw); break; case DBI_INTEGER_SIZE8: data->d_longlong = (long long) atoll(raw); break; default: break; } break; case DBI_TYPE_DECIMAL: sizeattrib = _isolate_attrib(result->field_attribs[curfield], DBI_DECIMAL_SIZE4, DBI_DECIMAL_SIZE8); switch (sizeattrib) { case DBI_DECIMAL_SIZE4: data->d_float = (float) strtod(raw, NULL); break; case DBI_DECIMAL_SIZE8: data->d_double = (double) strtod(raw, NULL); break; default: break; } break; case DBI_TYPE_STRING: data->d_string = strdup(raw); row->field_sizes[curfield] = strlen( raw ); break; case DBI_TYPE_DATETIME: sizeattrib = _isolate_attrib(result->field_attribs[curfield], DBI_DATETIME_DATE\ , DBI_DATETIME_TIME); data->d_datetime = _dbd_parse_datetime(raw, sizeattrib); break; default: data->d_string = strdup(raw); row->field_sizes[curfield] = strlen( raw ); break; } curfield++; } } libdbi-drivers-0.9.0/drivers/msql/dbd_msql.h000644 001750 001750 00000000062 07644123630 021662 0ustar00markusmarkus000000 000000 #define MSQL_RESERVED_WORDS { \ NULL } libdbi-drivers-0.9.0/drivers/msql/dbd_msql.sgml000644 001750 001750 00000014446 07646336254 022422 0ustar00markusmarkus000000 000000 Mini SQL driver manual A libdbi driver for the Mini SQL (mSQL) database Christian Stamgren
    christian@centiongroup.com
    0.1 2003-04-14
    Preface libdbi is a database abstraction layer written in C. It implements a framework that can utilize separate driver libraries for specific database servers. The libdbi-drivers project provides the drivers necessary to talk to the supported database servers. This manual provides information about the Mini SQL driver. The manual is intended for programmers who write applications linked against libdbi and who want their applications to work with the Mini SQL driver. Questions and comments about the Mini SQL driver should be sent to the libdbi-drivers-devel mailing list. Visit the libdbi-drivers-devel list page to subscribe and for further information. Questions and comments about the libdbi library should be sent to the appropriate libdbi mailing list. The Mini SQL driver is maintained by Christian Stamgren. Introduction Mini SQL is a light-weight SQL Database engine. It has a very small footprint and is well suited for embedded projects when you need the facility of a full blown database engine but have to be really carefull spending resources. Installation This chapter describes the prerequisites and the procedures to build and install the Mini SQL driver from the sources. Prerequisites The following packages have to be installed on your system: libdbi This library provides the framework of the database abstraction layer which can utilize the sqlite driver to perform database operations. The download page as well as the mailing lists with bug reports and patches are accessible at sourceforge.net/projects/libdbi. The current version of the sqlite driver requires at least libdbi version 0.6.7. Mini SQL Yes, you'll need the acctual database installed. Funny isn't it? http://www.hugnes.com.au/producs/msql/ Build and install the Mini SQL driver First you have to unpack the libdbi-drivers archive in a suitable directory. Unpacking will create a new subdirectory libdbi-drivers-X.Y where "X.Y" denotes the version: $ tar -xzf libdbi-drivers-x.y.tar.gz The libdbi-drivers project consists of several drivers that use a common build system. Therefore you must tell configure explicitly that you want to build the Mini SQL driver (you can list as many drivers as you want to build): $ cd libdbi-drivers $ ./configure --with-msql Run ./configure --help to find out about additional options. Then build the driver with the command: $ make Please note that you may have to invoke gmake, the GNU version of make, on some systems. Then install the driver with the command (you'll need root permissions to do this): $ make install To test the operation of the newly installed driver, use the command: $ make check This command creates and runs a test program that performs a few basic input and output tests. The program will ask for a database name and a host name. If you havn't configured Mini SQL to use TCP just press enter at the hostname selection to pass NULL to Mini SQL's connect() function indicating that you want to use a local socket. Driver options Your application has to initialize libdbi drivers by setting some driver options with the dbi_conn_set_option() and the dbi_conn_set_option_numeric() library functions. Mini SQL uses the following options:: dbname The name of the database you want to connect to. dbname can be any existing database in the Mini SQL installation created with msqladmin create dbname. host This is the name or ip-address of the host where the Mini SQL database is located. If you want to connect to a database on localhost don't use this option. Specifying localhost will force TCP usage instedd of UNIX Domain socket usage (if the server is configured for TCP) Mini SQL is much faster using a UNIX domain socket.
    libdbi-drivers-0.9.0/drivers/msql/dbd_msql.pdf000644 001750 001750 00000336231 12117467175 022224 0ustar00markusmarkus000000 000000 %PDF-1.4 1 0 obj << /S /GoTo /D (1.0) >> endobj 4 0 obj (Mini SQL driver manual) endobj 5 0 obj << /S /GoTo /D (2.0) >> endobj 8 0 obj (Table of Contents) endobj 9 0 obj << /S /GoTo /D (3.0) >> endobj 12 0 obj (Preface) endobj 13 0 obj << /S /GoTo /D (4.0) >> endobj 16 0 obj (Chapter 1. Introduction) endobj 17 0 obj << /S /GoTo /D (5.0) >> endobj 20 0 obj (Chapter 2. Installation) endobj 21 0 obj << /S /GoTo /D (5.1.1) >> endobj 24 0 obj (2.1. Prerequisites) endobj 25 0 obj << /S /GoTo /D (5.2.1) >> endobj 28 0 obj (2.2. Build and install the Mini SQL driver) endobj 29 0 obj << /S /GoTo /D (6.0) >> endobj 32 0 obj (Chapter 3. Driver options) endobj 33 0 obj << /S /GoTo /D [34 0 R /Fit ] >> endobj 36 0 obj << /Length 302 /Filter /FlateDecode >> stream xÚ‘MOÃ0 †ïý9¶‡šØùì‚¢7àЯm‘Öu¿·‰P¶“¼ÏëÄ($/Á)HjÑô‰k>ºOðxE[ dÐrqæ47ÊAáÉŠü7äºL.îH Òà Q®2Å(©„õÈZÞl_Ó§0„,'çÓ—çǘ´cøìƘ÷Õ¡LÕ6{/"P‚5ÞÌH¶ææ‰\(#iA^Eé6Ômþ"WÉtw,¦M“3}¼I#{®8âì.P; ONädÁ«»¶šªºÚw§‘o¡ÑKƒJƒÅ‚È™.X;Kn6cØOß§ª_ÝðC@(Œ¡H%½fK‚õ"oæ/ùF\6Ý0…ݰ—w> Ùõ3)¹-O3:Y{ðÈÿï}Å‚Dendstream endobj 34 0 obj << /Type /Page /Contents 36 0 R /Resources 35 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 43 0 R >> endobj 37 0 obj << /D [34 0 R /XYZ 71.731 741.2204 null] >> endobj 38 0 obj << /D [34 0 R /XYZ 71.731 706.3512 null] >> endobj 39 0 obj << /D [34 0 R /XYZ 71.731 706.3512 null] >> endobj 2 0 obj << /D [34 0 R /XYZ 443.1833 688.2669 null] >> endobj 35 0 obj << /Font << /F24 42 0 R >> /ProcSet [ /PDF /Text ] >> endobj 46 0 obj << /Length 276 /Filter /FlateDecode >> stream xÚQËNÃ0¼ç+|tvwýŠÍ !8@sI[KM"%¡Rÿ§IQ%Š„|ØïÌîÈFñ Ég2…\Pä³N€lbë>ÁY¢ŒáB£‰äB—i™qg…!ì|ÈMž,–Blj½|}ÚdœáÒZMòò>‡&¤Ld–®^ž&Pva_u®}“"Ð/¿»š.®§² EY„ßúu*€¶3¶Õ.,y ud±â<ƾð}•~ä‹¥„³à@ î4ªcæâèí¶ ýbÄ#] ¾ÞtU3-BsÂ-¯U*4݇>´³ú!ZÛîp£æŒüC <†´É@1T£1¹Ë~a~\e¹Eãþÿ‹ß¶zºendstream endobj 45 0 obj << /Type /Page /Contents 46 0 R /Resources 44 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 43 0 R >> endobj 47 0 obj << /D [45 0 R /XYZ 71.731 741.2204 null] >> endobj 51 0 obj << /D [45 0 R /XYZ 71.731 650.8942 null] >> endobj 44 0 obj << /Font << /F24 42 0 R /F30 50 0 R >> /ProcSet [ /PDF /Text ] >> endobj 54 0 obj << /Length 10037 /Filter /FlateDecode >> stream xÚÝͲGZ…ṯBCkà¢þwíiógÓVƒ"Œ ¶º¯Ÿ<:•_³²ò{W0h7JÖ³]EÛ’¼óíéÃXþgúð˜†ÇRþe†y×üŸïÆÿU~èï¿›Î#ë¾ó6íåßÜüèÛòžÇ¼øáíÈ~üî¯þn^?Ìã°oÇöáÇ?Uj–SÇx|øñçÿþÇÇøýOÿùq¿ÿåÓÇæÇñý¯zý׿þõË×O_¾þþñ?~üÇïþöÇëÌ~ ã8N·Ÿé<óÃÛCß>Ѳ|xϽ|Ú7¨zù@ÿòÛÇéøþÓŸ~úã'…§qöešSzÖDZvÕ4®Ã4>wú`qîÝGÚ´û8.·è?O#®«ü9ŒÏñéâçiÄuõŸ¦a;¦ÝÄëi›Õ¾ãcž]ü<¸®vð}ØöÙ}ìõ4âºÚÁËÛÙû±Ÿ§×Õ{|.og]ÝÇ^OÞ¬vðòv–Õ}ìõ4âºÚÁËÛ™·ÍÅÏÓˆëj/ogÚíÇ~žF\Wïñ¥¼qw{=Mx³ÚÁ—áù|¸½žF\W;ø>¬Çá>özq]íàÇð|‡‹Ÿ§×Õ{¼ü,bÝŸîc¯§ oV;xy;ûè>özq]íàåíl£ûØëiÄuµƒ—·³Nöc?O#®«÷øVÞÎ2O&^OÞ¬vðòvæÙ}ìõ4âºÚÁËÛ™÷±×Óˆëj/og\íÇ~žF\Wïñ}–çê>özšðfµƒ/Ãql«‹Ÿ§×Õ¾Ëcw{=¸®vðc8Ê?O#®«÷xù%ײ=ÜÇ^OÞ¬vðòvÖÃ}ìõ4âºÚÁËÛYއ‹Ÿ§×Õ^ÞÎü´ûyq]½ÇòvæÑ}ìõ4áÍj/ogÝÇ^O#®«¼¼qr{=¸®vðcx<ÝŸÈœ‡‘–Í{ùÛoðÌî3¯§ÉnV;ø2<‹ûÌëiÄuµƒïüÛöëa¤e³#—7³­ö3?O£­«·xùá0¯›ùûPqðvµƒ—Wãþ–D=Œ´lväòfæýáÒçi´uµƒ—WSþÞãâçiÄuõŸÊ«qR­›yöçá¾îzm]íàû0O÷™×Óˆëj?†Ý~äßÎ"ü~ñž§azŒî¯§‰nV;xy/ûä>ðzq]íàå½lÓÓÅÏÓˆëj/ïfíÇ~žF\Wïñ¥¼eq{=Mx³ÚÁËÛ™÷±×Óˆëj/ogZÝÇ^O#®«¼¼q›]ü<¸®Þãë4ŒÏÍ}ìõ4áÍj_†­üòÑÅÏÓˆëj߇ññp{=¸®vðcØö‡ýØÏÓˆëê=¾•·óòg=¼ž&¼Yíàåí¬î/Pâ4âºÚÁËÛYžîc¯§×Õ^ÞÎ2Úý<¸®Þã{y;óä>özšðfµƒ—·3MîÏbêiÄuµƒ—·3Îîc¯§×Õ~ ës±ûyq]½Çãð<÷±×Ó„7«|ÖÇê>özq]íà[ù?Ù&?O#®«¼¼m³ûyq]½ÇòvÖÝ}ìõ4áÍj/ogy¸½žF\W;xy;å)¹øyq]íàåíLÇêâçiÄuõ–·3>ÝÇ^OÞ¬vðe(ïs{=¸®vðm8ž£ûØëiÄuµƒÃrLöc?O#®«·ø2ŽÃñ˜Ìß„ŠÓ€·«¼¼}^]ü<¸®vðòv¶erñó4âºÚÁËÛ)1rñó4âºzOåí,«ûØëi›Õ^ÞŽû³¨ziÙìÈåÕL›ûÌëi´uµƒ—W3îö3?O#®«÷ø<§û'~&Z7;ò2ÌÇæÏÓhëj߆ÇãX\ü<¸®vðc˜ÝožÕÃHËæ½¼”7³Ù¯»ž&»YíàåÕlîwŠã4âºÚÁË«q¿ŽR#-›¹¼™ÅýBqœF[Wïñµ¼šyvŸy=Mx³ÚÁË«™lûõ0Ò²Ù‘Ë›Ýt§ÑÖÕ~ Ósµÿ¼ÏÓˆëê=¾Ã~¸ß&ŽÓ„7«|¦Çæ>özq]íàÛ°ï»ûØëiÄuµƒ—·³ÙM¯§×Õ{|/og}¸½ž&¼Yíàåí,î·‰ã4âºÚÁËÛ™÷±×Óˆëj/ogzÚý<¸®Þãòv&÷ÛÄqšðfµƒ—·3ºtâ4âºÚÁ·a{ºß&ŽÓˆëj/?zÌöc?O#®«÷ø1Ûý § oV;ø2Œ»ûmâ8¸®vðòv6÷‚NœF\W;xùÑÕý6qœF\Wïñgy;‹{A'NÞ¬vðòvf÷‚NœF\W;xy;“û½”8¸®vð—}Øý<¸®Þâë8ëÓý6qœ¼]íàóð<Ü :qq]íàÛ°>Ü :qq]íàáùíÇ~žF\Wïñ©¼Ýýâ[œ&¼Yíàåílî·‰ã4âºÚÁËÛYÝ :qq]íàåí,³ýØÏÓˆëê=>—·3»_(ŽÓ„7«¼¼Éý‘8¸®vðòvF÷;Åqq]íàáxnöc?O#®«÷ø2Ëá^Љӄ7«|އûµâ8¸®vðmXv÷‚NœF\W;xy;î?/¯‡‘–Í{y-¯fuoçÄi²›Õ^^ÍâÞΉӈëj/¯fqéog~¿ØaËk™GûŸ§‘ÖÕ{|+ïerÏ3NÞ¬vðò^Üߨ‡‘–ÍŽ¼ óÓ½—§ÑÖÕþ‡ýÿiõ4âºzïã0ÛQ;­›y»û…â8¶®vðòj6÷^NœF\W;xy5þŸøëa¤eó^~”7³¸ß&ŽÓd7«¼¼šÙ½—§×Õ^^Íä~›8N#®«¼¼œñ°ûyq]½Çq˜žîÕœ8Mx³ÚÁça?ÜoÇiÄuµƒoÃt¸tâ4âºÚÁÃþp¿M§×Õ{üYÞÎî^Љӄ7«¼¼Í½ §×Õ^ÞÎê~›8N#®«¼¼e±ûyq]½Å·±¼Ùý6qœ¼]íàåíLî8¸®vðòvF÷‚NœF\W;øcØž»ýØÏÓˆëê=>Ãx¸tâ4áÍjŸ‡íá~›8N#®«|ÆÝ½ §×Õ^ÞÎö´ûyq]½ÇçòvV÷ÛÄqšðfµƒ—·³ºtâ4âºÚÁËÛYÜoÇiÄuµƒ—·3Oöc?O#®«÷øRÞÎÔùjéÕ×\¦ãÙM‘–^ø7½ãÜ»ôù¥Bú—öSyÓ48Ôʸ–µüI¤YÒíåoó=Ï’ÖC/Ÿm>þ0oã÷ÿðåë·@é¯?ÿù_?ÿú¥-·måW†/_´{C´Ï°üZ¢÷ ߤäÒOy¥äÞ~Î$%wó²”ຠ)9 ¿Rr9Þ¬BJÎÃ#%¸®BJÎÃ#%¸®BJÎÃ#%¸®BJί”\Ž7«’óðHÉ®«’óðHÉ®«’óðHÉ®«’³ð+%—ãÍ*¤ä<pຠá>pຠá>pຠá> ¿Â}9Þ¬B¸ÏÃ#ܸ®B¸ÏÃ#ܸ®B¸ÏÃ#ܸ®B¸Ï¯p_Ž7«îóð÷®«îóð÷®«îóð÷®«î³ð+Ü—ãÍ*„û<<Â}€ë*„û<<Â}€ëjîóìîZ6!ÜgÑW¸/·›U÷yx„û×Õ<ÜçÙ5Ü´lB¸Ï£#ܶ®B¸ÏÁß„ûR¼]ÍÃ}ž]Ã}@Ë&„û<:Â}`ë*„û<<Â}€ëjî³ì÷å´nB¸Ï£#ܶ®B¸ÏÃ#ܸ®¦á>>Ã}¿_„pŸ_ᾜnV!Üçáî\W!Üçáî\W!Üçáî\W!ÜgáW¸/Ç›U÷yx„û×U÷yx„û×U÷yx„û×U÷YøîËñfÂ}á>ÀuÂ}á>ÀuÂ}á>ÀuÂ}~…ûr¼Y…pŸ‡G¸p]…pŸ‡G¸p]…pŸ‡G¸p]…pŸ…_á¾oV!Üçáî\W!Üçáî\W!Üçáî\W!ÜgáW¸/Ç›U÷yx„û×U÷yx„û×U÷yx„û×U÷YøîËñfÂ}á>ÀuÂ}á>ÀuÂ}á>ÀuÂ}~…ûr¼Y…pŸ‡G¸p]…pŸ‡G¸p]…pŸ‡G¸p]…pŸƒ¿ ÷¥x» á>pຠá>pຠá>pຠá> ¿Â}9Þ¬æá>Ï®á> eÂ}á>°uÂ}á>Àu5÷Yv„ûrZ7!ÜçÑî[W!Üçáî\WópŸg×pв á>‹¾Â}¹Ý¬B¸ÏÃ#ܸ®æá>Ï®á> eÂ}á>°uÂ}~…ûr¼YÍÃ}ž]Ã}@Ë&„û<:Â}`ë*„û<<Â}€ë*„û,ü ÷åx³ á>pຠá>pຠá>pຠá> ¿Â}9Þ¬B¸ÏÃ#ܸ®B¸ÏÃ#ܸ®B¸ÏÃ#ܸ®B¸Ï¯p_Ž7«îóð÷®«îóð÷®«îóð÷®«î³ð+Ü—ãÍ*„û<<Â}€ë*„û<<Â}€ë*„û<<Â}€ë*„û,ü ÷åx³ á>pຠá>pຠá>pຠá>îKñvÂ}á>ÀuÂ}á>ÀuÂ}á>ÀuÂ}~…ûr¼Y…pŸ‡G¸p]…pŸ‡G¸p]…pŸ‡G¸p]…pŸ…_á¾oV!Üçáî\W!Üçáî\W!Üçáî\W!ÜgáW¸/Ç›U÷yx„û×U÷yx„û×Õ<ÜçÙ5Ü´lB¸Ï¢¯p_n7«îóð÷®«i¸Ï£ÏpÀï!ÜçÁîZW!ÜgáW¸/Ç›Õ<ÜçÙ5Ü´lB¸Ï£#ܶ®B¸ÏÃ#ܸ®æá>ËŽp_Në&„û<:Â}`ë*„û<<Â}€ëjîóìîZ6!ÜgÑW¸/·›U÷yx„û×U÷yx„û×U÷yx„û×U÷YøîËñfÂ}á>ÀuÂ}á>ÀuÂ}á>ÀuÂ}~…ûr¼Y…pŸ‡G¸p]…pŸ‡G¸p]…pŸ‡G¸p]…pŸƒ¿ ÷¥x» á>pຠá>pຠá>pຠá> ¿Â}9Þ¬B¸ÏÃ#ܸ®B¸ÏÃ#ܸ®B¸ÏÃ#ܸ®B¸Ï¯p_Ž7«îóð÷®«îóð÷®«îóð÷®«î³ð+Ü—ãÍ*„û’úœîƒTÃ}ï yýp_ò¾ýnв¾ ¯á¾íöTùû¾~ûgó4<Ë/$®O6¾ùdõXœzM÷Mg¼ï_~ûôÛ§ÿûóçß?ýô{›ZËÿw¿üVþ¢­÷ËÚ‹÷]™£ôC^™£·Ÿ2ÉÝ|ž,s¸®BæÈ¯ÌQŽ7«9òðÈ®«9òðÈ®«9òðÈ®«9²ð+s”ãÍ*dŽ<<2G€ë*dŽ<<2G€ëjž9òìš9Z6!sdÑWæ(·›UÈyxdŽ×Õ3G¿_„Ì‘_™£œnV!säá‘9\W!säá‘9\W!säá‘9\W!sdáWæ(Ç›UÈyxdŽ×UÈyxdŽ×UÈyxdŽ×UÈYø•9Êñf2G™#Àu2G™#Àu2G™#Àu2G~eŽr¼Y…Ì‘‡Gæp]…Ì‘‡Gæp]…Ì‘‡Gæp]…Ì‘…_™£oV!säá‘9\W!säá‘9\W!säá‘9\W!sdáWæ(Ç›UÈyxdŽ×UÈyxdŽ×UÈyxdŽ×UÈYø•9Êñf2G™#Àu2G™#Àu2G™#Àu2G~eŽr¼Y…Ì‘‡Gæp]…Ì‘‡Gæp]…Ì‘‡Gæp]…Ì‘ƒ¿É¥x» ™#Ìຠ™#Ìຠ™#Ìຠ™# ¿2G9Þ¬æ™#Ï®™# e2G™#°u2G™#Àu5ÏYvdŽrZ7!säÑ‘9[W!säá‘9\WóÌ‘g×Ìв ™#‹¾2G¹Ý¬BæÈÃ#s¸®æ™#Ï®™# e2G™#°u2G~eŽr¼YÍ3Gž]3G@Ë&dŽ<:2G`ë*dŽ<<2G€ë*dŽ,üÊåx³ ™#Ìຠ™#Ìຠ™#Ìຠ™# ¿2G9Þ¬BæÈÃ#s¸®BæÈÃ#s¸®BæÈÃ#s¸®BæÈ¯ÌQŽ7«9òðÈ®«9òðÈ®«9òðÈ®«9²ð+s”ãÍ*dŽ<<2G€ë*dŽ<<2G€ë*dŽ<<2G€ë*dŽ,üÊåx³ ™#Ìຠ™#Ìຠ™#Ìຠ™#“9Jñv2G™#Àu2G™#Àu2G™#Àu2G~eŽr¼Y…Ì‘‡Gæp]…Ì‘‡Gæp]…Ì‘‡Gæp]…Ì‘…_™£oV!säá‘9\W!säá‘9\W!säá‘9\W!sdáWæ(Ç›UÈyxdŽ×UÈyxdŽ×Õ/‹ü~.‹yp\ZWᲘ…_—År¼YÍ/‹yv½,´lÂe1ŽËb`ë*\óð¸,¸®æ—Å,;.‹å´nÂe1ŽËb`ë*\óð¸,¸®æ—Å<»^Z6ᲘE_—År»Y…Ëb—Å×U¸,æáqY p]…Ëb—Å×U¸,fá×e±oVᲘ‡Çe1Àu.‹yx\\WᲘ‡Çe1Àu.‹YøuY,Ç›U¸,æáqY p]…Ëb—Å×U¸,æáqY p]…Ëbþæ²XŠ·«pYÌÃã²ຠ—Å<<.‹®«pYÌÃã²ຠ—Å,üº,–ãÍ*\óð¸,¸®Âe1Ëb€ë*\óð¸,¸®Âe1 ¿.‹åx³ —Å<<.‹®«pYÌÃã²ຠ—Å<<.‹®«pY̯Ëb9Þ¬Âe±ôº’wY >P½,öîNVÿ²XòÊ/œöò‹±—o¢•ÿP/kùÓ¼;õ˜†ÇËWŸ·çR~bu×[Þ|°óTzùXËyQìo~ûüq_îz/w½¾ýï~ý߯Ÿýò{óß[üòå¯q^>¼ÕÚ'ùØÊ¯(îŸäËÂsùmüǹw¹ý/R^÷aÝÆãöÝàçiÄuµƒÃs6?O#®«÷ø6 å't“‰×Ó„7«¼¼yv{=¸®vðòv¦Å}ìõ4âºÚÁËÛWû±Ÿ§×Õ{|Ÿ†å¹º½ž&¼YíàËpÛêâçiÄuµƒïÃòØÝÇ^O#®«üŽ}·ûyq]½ÇË_º—íá>özšðfµƒ—·³îc¯§×Õ^ÞÎr<\ü<¸®vðòvæ§ýØÏÓˆëê=~”·3îc¯§ oV;xy;Óè>özq]íàå팓ûØëiÄuµƒÃã9»öëa¤eó^~NÃ|Ìî3¯§ÉnV;ø2<‹ûÌëiÄuµƒ—Ÿäî¶ýziÙìÈåÍl«ýÌÏÓhëêý½Ò±¼šu[<ózq]íàǰÛüÛY„ß/Þ³ó4LÑ}àõ4ÑÍj/?ºO×Õ^ÞË6=]ü<¸®vðònÖÙ~ìçiÄuõ_ÊÛY÷±×Ó„7«¼ü輸½žF\W;xy;Óê>özq]íàåíŒÛìâçiÄuõ_§a|nîc¯§ oV;ø2lå—.~žF\W;ø>Œ‡ûØëiÄuµƒö?ìÇ~žF\Wïñ­¼í0ï)NÞ¬vðòvV÷(qq]íàåí,O÷±×Óˆëj/ogíÇ~žF\W;}¯éå7éÝÇ^OÞ¬vðo4÷g1õ4⺚gÕL¼fÕ×Õ<«fâ5«F¸®æY5¬àÍjžU3ñšU#\W󬚉׬ẚgÕL¼fÕ×Õ<«æá‘U¼Yͳj&^³j„ëjžU3ñšU#\W󬚉׬ẚgÕ<<²j€7«yVÍÄkVp]ͳj&^³j„ëjžU3ñšU#\W󬚅_YµoW󬚉׬ẚgÕL¼fÕ×Õ<«fâ5«F¸®æY5¬àÍjšU3í3«F´læY5“®Y5²u5Ϫ™xͪ®«iVͳkV hÝ̳j&]³jdëjžU3ñšU#\WÓ¬šiŸY5¢e3ϪytdÕÀnV󬚉׬ẚfÕLû̪-›yVͤkVl]ͳjY5À›Õ4«fÚgVhÙ̳j&]³jdëjžU3ñšU#\W󬚇GV ðf5Ϫ™xͪ®«yVÍÄkVp]ͳj&^³j„ëjžUóðȪÞ¬æY5¯Y5Âu5Ϫ™xͪ®«yVÍÄkVp]ͳjY5À›Õ<«fâ5«F¸®æY5¯Y5Âu5Ϫ™xͪ®«yVÍÃ#«x³šgÕL¼fÕ×Õ<«fâ5«F¸®æY5¯Y5Âu5ϪyxdÕoV󬚉׬ẚgÕL¼fÕ×Õ<«fâ5«F¸®æY5 ¿²j9Þ®æY5¯Y5Âu5Ϫ™xͪ®«yVÍÄkVp]ͳjY5À›Õ<«fâ5«F¸®æY5¯Y5Âu5Ϫ™xͪ®«yVÍÃ#«x³šgÕL¼fÕ×Õ<«fâ5«F¸®æY5¯Y5Âu5ϪyxdÕoV󬚉׬ẚgÕL¼fÕ×Õ4«fÚgVhÙ̳jY5°›Õ<«fâ5«F¸®fY5“~ͪü~1Ϫ™pͪ­«yVÍÃ#«x³šfÕLû̪-›yVͤkVl]ͳj&^³j„ëjšUóìšUZ7ó¬šI׬ÙºšgÕL¼fÕ×Õ4«fÚgVhÙ̳jY5°›Õ<«fâ5«F¸®æY5¯Y5Âu5Ϫ™xͪ®«yVÍÃ#«x³šgÕL¼fÕ×Õ<«fâ5«F¸®æY5¯Y5Âu5ϪyxdÕoV󬚉׬ẚgÕL¼fÕ×Õ<«fâ5«F¸®æY5 ¿²j9Þ®æY5¯Y5Âu5Ϫ™xͪ®«yVÍÄkVp]ͳjY5À›Õ<«fâ5«F¸®æY5¯Y5Âu5Ϫ™xͪ®«yVÍÃ#«x³šgÕL¼fÕ×Õ<«fâ5«F¸®æY5¯Y5Âu5ϪyxdÕoVó¬Z³²jôάڻ´v³jÙz“UÛÖu8^~Þ’uÕÖc8¦ýy}°õÝkzh}ùYÝë©—Ïõùóçî'{³VÅÿ\»›endstream endobj 53 0 obj << /Type /Page /Contents 54 0 R /Resources 52 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 43 0 R /Annots [ 56 0 R 60 0 R 61 0 R 62 0 R 63 0 R 64 0 R 65 0 R 66 0 R 67 0 R 68 0 R 69 0 R 70 0 R ] >> endobj 56 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [70.7348 666.8844 104.6274 675.8606] /Subtype /Link /A << /S /GoTo /D (14) >> >> endobj 60 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [529.3351 666.8844 538.9788 675.8606] /Subtype /Link /A << /S /GoTo /D (14) >> >> endobj 61 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [70.7348 651.5419 136.7566 660.5181] /Subtype /Link /A << /S /GoTo /D (25) >> >> endobj 62 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [532.005 651.5419 538.9788 660.5181] /Subtype /Link /A << /S /GoTo /D (25) >> >> endobj 63 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [70.7348 636.1994 131.4065 645.1757] /Subtype /Link /A << /S /GoTo /D (29) >> >> endobj 64 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [532.005 636.1994 538.9788 645.1757] /Subtype /Link /A << /S /GoTo /D (29) >> >> endobj 65 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [94.6451 618.8196 165.5384 629.7236] /Subtype /Link /A << /S /GoTo /D (32) >> >> endobj 66 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [532.005 618.8196 538.9788 629.7236] /Subtype /Link /A << /S /GoTo /D (32) >> >> endobj 67 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [94.6451 606.2418 263.6695 616.7721] /Subtype /Link /A << /S /GoTo /D (46) >> >> endobj 68 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [532.005 606.2418 538.9788 616.7721] /Subtype /Link /A << /S /GoTo /D (46) >> >> endobj 69 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [70.7348 590.6602 144.1986 601.5393] /Subtype /Link /A << /S /GoTo /D (80) >> >> endobj 70 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [532.005 590.6602 538.9788 601.5393] /Subtype /Link /A << /S /GoTo /D (80) >> >> endobj 55 0 obj << /D [53 0 R /XYZ 71.731 741.2204 null] >> endobj 6 0 obj << /D [53 0 R /XYZ 244.3315 691.2808 null] >> endobj 52 0 obj << /Font << /F24 42 0 R /F33 59 0 R /F30 50 0 R /F34 73 0 R >> /ProcSet [ /PDF /Text ] >> endobj 82 0 obj << /Length 759 /Filter /FlateDecode >> stream xÚVK›0¾çWp„&°§UWݪU+uµ¨—npÃK¶ÙhûëkÇ–t·Q”8¶Ç3óÍ|3v`ùüXÛÀÛnø^ú‘U´+ߪøÖ§U D¢8öBÄ|²°ë‚ÍÖK“0¶Ü©’Ùj}FVè{1H€•í´©8åR‰ŸXYùÓþNÐÈù•}Yßo|+õÒ˜«âÒ¾å†)?ƒ£`ƒó2ÇŽß~ò_36ܬ×rÙ£ýH ´ë‰$v…¼1.HqLååPBsH‘ZÌ)#°`¸ïäB_‘3†Ô:Vã'ÇÏL­·CƒZÔ±s+;[ä„À>8o÷d/—Y Õ¹vµÀ„^ ‚èˆsd¸Á”s @¦f%ÁBá³[»ÈñH0RÆEäÉøÉ÷Ãb 4EDi¡ MV#£Ô=·E/Ä}.v1 @ÒÿF… ŸϸÔHX½ˆZív¨@”Bò¢„{5Âf?[Ñjè8 =a¨|3ÚWÎêM(YšÕšC-ìFØ\rwz Od‚y?²™'ßp§xüøðu1³Øó´Líbc“³ÔˆLê¹['_k‚u¨ûŸÑR.à04¸8úM5 º½ ®Ö+Øw”Mi¢öºrnH…Ý 9V¾½6ĦGL™0«¯ ÛBöFD'»EßNëöªTIúÔýØ(¥¹¡”?§ârí¸%:M›¥,‰òk!nXó· ¦Œþ»5 u¸«´_”)ÞýpbÁ3Ì®qÝ(S|„ºÇt“ žÊ㯨­õ{ìŸÐéÈÓ1§Á:5†¦dv#áÉ«"VÑX ÐyC½M§iÑÈÆýrx‘~ ØÜ SÅ )=«‰­êhÿGñSÿã]‡u_È‚»šˆAÕ÷l+¢¯Î q -w[p|<¦éÇÁã±i;ººú˜™Ç…z2D‰—qºøüP"îDæøöØD“ÇØøÞ6I·F“ˆ~ž›3O™ƒÎd†”endstream endobj 81 0 obj << /Type /Page /Contents 82 0 R /Resources 80 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 43 0 R >> endobj 83 0 obj << /D [81 0 R /XYZ 71.731 741.2204 null] >> endobj 74 0 obj << /D [81 0 R /XYZ 71.731 706.3512 null] >> endobj 10 0 obj << /D [81 0 R /XYZ 146.3693 691.2808 null] >> endobj 84 0 obj << /D [81 0 R /XYZ 71.731 674.2377 null] >> endobj 85 0 obj << /D [81 0 R /XYZ 71.731 674.2377 null] >> endobj 86 0 obj << /D [81 0 R /XYZ 330.1288 648.5929 null] >> endobj 87 0 obj << /D [81 0 R /XYZ 71.731 628.5033 null] >> endobj 88 0 obj << /D [81 0 R /XYZ 71.731 597.6191 null] >> endobj 89 0 obj << /D [81 0 R /XYZ 367.1503 586.8245 null] >> endobj 90 0 obj << /D [81 0 R /XYZ 362.6958 573.8731 null] >> endobj 91 0 obj << /D [81 0 R /XYZ 71.731 540.8321 null] >> endobj 92 0 obj << /D [81 0 R /XYZ 227.1268 530.0375 null] >> endobj 80 0 obj << /Font << /F24 42 0 R /F30 50 0 R /F34 73 0 R >> /ProcSet [ /PDF /Text ] >> endobj 95 0 obj << /Length 432 /Filter /FlateDecode >> stream xÚmSM“œ ½Ï¯à¨PÍ1›ÚTrHÅÛ&FQH)ÅXûïƒNf¶,MÛ¯ßë‡-È=œ1> endobj 75 0 obj << /D [94 0 R /XYZ 71.731 706.3512 null] >> endobj 14 0 obj << /D [94 0 R /XYZ 298.5799 691.2808 null] >> endobj 96 0 obj << /D [94 0 R /XYZ 71.731 670.2196 null] >> endobj 97 0 obj << /D [94 0 R /XYZ 71.731 670.2196 null] >> endobj 93 0 obj << /Font << /F24 42 0 R /F30 50 0 R /F34 73 0 R >> /ProcSet [ /PDF /Text ] >> endobj 100 0 obj << /Length 1525 /Filter /FlateDecode >> stream xÚ­XÛŽÛ6}߯0‚±ˆ¦(Q—})¢´h‚´u€Mh‰¶ÙÕÅ¥8Î×wxµäh“Mìƒ(qȹ33Þpá/\¤!J#xÄ!"Ç‹¢¾Á‹=l½¸ ­Hœ$ˆÐ0—™Ý€F)Ê3’,‚ñ%Ï77ë;/F Íèb³sª’¤2œ-6åßËŸìØón4[dž¿4²gUÅzÑ6«6¿®ï"¼ÈQž€¸/’ÃU ÕWlB¹8]þ²8[–\Ør»×¸Y;Þñ÷ƒ¢w{¬)Í™‘P[ðrèüéÖlW/Q•“ƒéR‹'ª²åKÑóéÏß3‹²+B—V!]:Kw][_)Û¡+¸DÆ{c˜"ÒØºSHHi÷ mØ^O<›[ˆ(͉›RFñr×VU«¬:‰fo>YqÏöÚ{x;0å¶±Ù|Ññ€çÖ¾[ÿyi^!múy7ÌJžeÏë[e•¶#EYN•Ø–[¡vn~ÞxXY°Ð8C9&éòŠsœNQyýô(Mc€f˜\G7jNbØLh]ôŽn€­ëÎ6H]«BòA”.P½iÇj®Cº !ݽËîJ®d=Û2iߨVö+4ì:væ6€§ƒ(fY0»=ô¢ŸøÕò}°÷_ÃÍäÎf!$(§a¬}<òn×võœY-ìi.Jd>xä”6MÕ²Òg19qÍ‹ÑoiÍÀ~¹JÈÞ½uÕðÍJtüØvNÆPOk싃Këøœs¬2I±­œm½ •¦ø½ ³åž£†÷kÈ꿼èåÚâR ¾Ãúþx»^?â H‡×¡*†®ãÕkó!}¢ÇÀ˜ØoJÜ×Rªißù X-g²÷¸õ¾|¦*4Ju©­@Ä ¨ãP«·u DU›'jœäˆ`hߨã&ª—R†¾¶á%—Ï|ùyªøçØpW <ýÀª9ØûšfSy74 e¿ÍSaÑÿ¸ (h·09N«„.ÑaØ7PÈ‹¶FlP@)‡B®kÈèz©# =â´¹qI#ňD4µÂ5Øç¶…ÁÒð—–ºF˜ú+ÓÂ`üÀûB1¨¹ƒ$âkdhTϹʎm0…¼§zq}v9³›–߃€Œ:Ö—@‘¢o¡|«°šoo´Z_„NÂa¥è8s”c>¦¢Û«·—ût,€,Ð3’Ä5éqZ/Ž@èdðz;¿~Ú™Õ•ÑÚšñ&°—M*Éæ1™µÕÔæÚÎ¥3¸:)ù蘧ïÜeýÁ•ÃANÓ „ª] Ïu~Z¹”ðNÕ{~Á²ñ6yãÅ)vÉ«€þç1ðÇYº«Î¨«n¬bDs: ¸þc²œj®<ûx¬D!úê|íŸ'™ž9˜ë5~T›ºè±3-î¶U˜¼?¨¦=mî5ÉyæÊo3XU¹9Xc‹çì‘€.Ê9ÏòÅA÷[®GkHØN˜tiÞj T¥~,?þÜžh$ ÕçY4Öc¡ÍcxuœQ 5 ³Ä®uùÄÄPíà’¸½,ËR¨™Ï‘«=Ú P6Àæ$¼Âo¿ˆdŽÜÍ—±6¬Ë°çÅ3¡/}œ×ìžûy)Ï!´Å†† ‚†•ÙéáTV§“Ž„ E@oGí×j¬²ÝQÕb×05 auV¾kdÃKÍVÖd€×üˆiWêTëz¯ßiïÕrÖæ„ cƒýŵ©µXK‰•zvÕÏ_¼zcÆ 7Â]ZµÉÖÈ‘=íDd[ÛkL”JÍa›D ")!PÚ0Êâä —aãÿÃcR—˜óº¶µx†ß0µÊ]9-3eë®ÒWš¹7äçþbE‚‘Œ™XÇ-‚FÂ8„‘£8Îì¯÷kmþ¿)3úþü•Zendstream endobj 99 0 obj << /Type /Page /Contents 100 0 R /Resources 98 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 43 0 R >> endobj 76 0 obj << /D [99 0 R /XYZ 71.731 706.3512 null] >> endobj 18 0 obj << /D [99 0 R /XYZ 287.5478 691.2808 null] >> endobj 101 0 obj << /D [99 0 R /XYZ 71.731 670.2196 null] >> endobj 77 0 obj << /D [99 0 R /XYZ 71.731 659.3875 null] >> endobj 22 0 obj << /D [99 0 R /XYZ 214.3071 616.29 null] >> endobj 102 0 obj << /D [99 0 R /XYZ 71.731 604.1188 null] >> endobj 103 0 obj << /D [99 0 R /XYZ 71.731 592.574 null] >> endobj 104 0 obj << /D [99 0 R /XYZ 71.731 577.6301 null] >> endobj 105 0 obj << /D [99 0 R /XYZ 71.731 566.7359 null] >> endobj 106 0 obj << /D [99 0 R /XYZ 91.6563 548.9027 null] >> endobj 107 0 obj << /D [99 0 R /XYZ 144.2183 522.9999 null] >> endobj 108 0 obj << /D [99 0 R /XYZ 71.731 497.929 null] >> endobj 109 0 obj << /D [99 0 R /XYZ 71.731 485.3511 null] >> endobj 110 0 obj << /D [99 0 R /XYZ 91.6563 469.2016 null] >> endobj 111 0 obj << /D [99 0 R /XYZ 339.8129 469.2016 null] >> endobj 78 0 obj << /D [99 0 R /XYZ 71.731 449.112 null] >> endobj 26 0 obj << /D [99 0 R /XYZ 400.8337 406.0145 null] >> endobj 112 0 obj << /D [99 0 R /XYZ 71.731 396.5118 null] >> endobj 113 0 obj << /D [99 0 R /XYZ 71.731 371.504 null] >> endobj 117 0 obj << /D [99 0 R /XYZ 71.731 361.4024 null] >> endobj 118 0 obj << /D [99 0 R /XYZ 71.731 361.4024 null] >> endobj 119 0 obj << /D [99 0 R /XYZ 81.4147 349.885 null] >> endobj 123 0 obj << /D [99 0 R /XYZ 71.731 338.829 null] >> endobj 124 0 obj << /D [99 0 R /XYZ 473.2014 326.971 null] >> endobj 125 0 obj << /D [99 0 R /XYZ 71.731 301.9001 null] >> endobj 126 0 obj << /D [99 0 R /XYZ 71.731 301.9001 null] >> endobj 127 0 obj << /D [99 0 R /XYZ 81.4147 292.4006 null] >> endobj 128 0 obj << /D [99 0 R /XYZ 71.731 281.3768 null] >> endobj 129 0 obj << /D [99 0 R /XYZ 71.731 281.3768 null] >> endobj 130 0 obj << /D [99 0 R /XYZ 81.4147 270.7817 null] >> endobj 131 0 obj << /D [99 0 R /XYZ 71.731 259.7256 null] >> endobj 132 0 obj << /D [99 0 R /XYZ 90.8293 247.8676 null] >> endobj 133 0 obj << /D [99 0 R /XYZ 71.731 240.7295 null] >> endobj 134 0 obj << /D [99 0 R /XYZ 71.731 219.8727 null] >> endobj 135 0 obj << /D [99 0 R /XYZ 71.731 219.8727 null] >> endobj 136 0 obj << /D [99 0 R /XYZ 81.4147 208.3159 null] >> endobj 137 0 obj << /D [99 0 R /XYZ 71.731 207.2548 null] >> endobj 138 0 obj << /D [99 0 R /XYZ 71.731 187.3295 null] >> endobj 142 0 obj << /D [99 0 R /XYZ 279.598 176.7344 null] >> endobj 143 0 obj << /D [99 0 R /XYZ 71.731 148.839 null] >> endobj 144 0 obj << /D [99 0 R /XYZ 71.731 48.8169 null] >> endobj 98 0 obj << /Font << /F24 42 0 R /F30 50 0 R /F41 116 0 R /F43 122 0 R /F34 73 0 R /F33 59 0 R /F45 141 0 R >> /ProcSet [ /PDF /Text ] >> endobj 147 0 obj << /Length 607 /Filter /FlateDecode >> stream xÚ•TMoÔ0½ï¯È©‰DŒíÄNÌ‘ ¨ "‰r0Yï&4qVùèªÿ{ÇNÓt[V«Œí7~ožÇ&6?de‰ù¤QŠÓ l78Ø›¥â ±ÃÄKлbóæC’ NyPì‚4åHPf÷JQ޳ Øþ /+yUÅ”á"ø~ÒÃ(›FŽu§£_ÅçÍûb&cI†Dnv|QÑŒzª)%AŽ0™Õä”sÁQ’çì$é•¥4¸dˆçIfö¶€VÞª(æ‡5…„/Š]FL)ÄpÚÄ"ÊqØA£FU ‚î z¨†»ÕºVeá±¹‡¡#W[nûÚ.ßE„…ÆÐ‡¯aaÔj£²k[©·o]¡KC°QL'¹ø_/ÊJ•·ÿìDUFKʽ7è•4ÆØ çÙ~Ò,áã¼3Ñ¡ïö½l!a¬¤ŸVý®ëÛÇY;°¿åP—Öú0+ÊnÝ$° ââdášøX›ªádµ‘˜rIOå1à¼tg%Giøs•­‹€ÿWu¾I,Æß×÷ÝäP2¢8¼ÓÉÃѱ¾Á˜î§Þ÷Ç—Z×}ÿvå¢[uHqy ÁŸÉz5 *=ßT¹î]«ôTÇ™êÕ¨ò¡¯=ëAú¿þ¸Z)z,VÐð"b, +8Om{Ææ¡~4ukCvƒ6r¦G47í øÝ¤Òj½­KsõÞ—ç Í>FÄžÓøŒƒîàš®” „Cg®…ÉQ#Z¿eîõIs”.^|Z˜§/+K„1Iæleɳ/羿’¢zwendstream endobj 146 0 obj << /Type /Page /Contents 147 0 R /Resources 145 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 156 0 R >> endobj 148 0 obj << /D [146 0 R /XYZ 71.731 706.3512 null] >> endobj 149 0 obj << /D [146 0 R /XYZ 71.731 706.3512 null] >> endobj 150 0 obj << /D [146 0 R /XYZ 81.4147 696.3885 null] >> endobj 151 0 obj << /D [146 0 R /XYZ 71.731 661.355 null] >> endobj 152 0 obj << /D [146 0 R /XYZ 71.731 661.355 null] >> endobj 153 0 obj << /D [146 0 R /XYZ 81.4147 651.8555 null] >> endobj 154 0 obj << /D [146 0 R /XYZ 71.731 640.8318 null] >> endobj 155 0 obj << /D [146 0 R /XYZ 227.7244 603.0386 null] >> endobj 145 0 obj << /Font << /F34 73 0 R /F41 116 0 R /F43 122 0 R /F30 50 0 R >> /ProcSet [ /PDF /Text ] >> endobj 159 0 obj << /Length 908 /Filter /FlateDecode >> stream xÚ­VMoÜ6½ûWè–ÕA I‘”äcÒ¦HÑ)¼Z4Á•¸^¢Zi«»î¯ïÉÚÖ§ÀX“”È™÷fÞpÄ" ,ÊÉR#œS•Ç=À«ŸnnJ.™‚ÅÊÛD¦)r®¢diäÝöæí."N‰’¹Œ¶ûÉ•*`WNóh[ýµyЧÁtq³|“’0þÐÙÇéY{lÛôñ×íÏo?¤4*H¡À˜£Q °¨¤·ôgÌÝ´£;'éFŸNµ-µ;t&CFÛØÁêÚþgº¶»jgüêlÌåæ1frc:<¸{co†Á6¸hfíLx6¡÷‹';ÂÁB‚E9RÂJ…$Œ³˜9Bæ¾l›æüÝC_¨¤ðc+ÑHæÓ ã¤Lx#º©^uɈL^÷xߌGÓÙòÏLæDR)Є±Ó†j?6¥ ë_!èav÷Û/a2ö¦NµuݺX>ÍaÆ@ÞÞ:@± „ U€2’R þF=Í›·³@'ÙQN2%²5 s" šëûrœõž 9Ë¢diÑËý,, r%Uúâ×!ÜN=ÐÀlÁ¾ÒƒÞéWÏíˆê‰AÞºÎEìÒeÊù!YÉ1+Tš«9ÉS.§pÓ¶RcÝì¬AؘWãæÿÚþ¥ÎQÛæ‚Ôyâ}¹sHs~.XÛôƒ®ëEá–у©5´Â‘¦D1„~ìÿ©uut·ùUòŒ§ 9ÕAˆ"#> endobj 79 0 obj << /D [158 0 R /XYZ 71.731 706.3512 null] >> endobj 30 0 obj << /D [158 0 R /XYZ 318.5354 691.2808 null] >> endobj 160 0 obj << /D [158 0 R /XYZ 71.731 670.2196 null] >> endobj 161 0 obj << /D [158 0 R /XYZ 416.8528 661.5443 null] >> endobj 162 0 obj << /D [158 0 R /XYZ 103.2725 648.5929 null] >> endobj 163 0 obj << /D [158 0 R /XYZ 71.731 646.4361 null] >> endobj 164 0 obj << /D [158 0 R /XYZ 71.731 631.4921 null] >> endobj 165 0 obj << /D [158 0 R /XYZ 71.731 620.598 null] >> endobj 166 0 obj << /D [158 0 R /XYZ 91.6563 602.7647 null] >> endobj 167 0 obj << /D [158 0 R /XYZ 291.5949 602.7647 null] >> endobj 168 0 obj << /D [158 0 R /XYZ 189.8864 589.8133 null] >> endobj 169 0 obj << /D [158 0 R /XYZ 71.731 578.4699 null] >> endobj 170 0 obj << /D [158 0 R /XYZ 71.731 566.7997 null] >> endobj 171 0 obj << /D [158 0 R /XYZ 91.6563 548.9665 null] >> endobj 172 0 obj << /D [158 0 R /XYZ 71.731 546.8097 null] >> endobj 173 0 obj << /D [158 0 R /XYZ 71.731 531.8657 null] >> endobj 157 0 obj << /Font << /F24 42 0 R /F30 50 0 R /F41 116 0 R /F45 141 0 R /F34 73 0 R >> /ProcSet [ /PDF /Text ] >> endobj 174 0 obj << /Type /Encoding /Differences [ 0 /.notdef 1/dotaccent/fi/fl/fraction/hungarumlaut/Lslash/lslash/ogonek/ring 10/.notdef 11/breve/minus 13/.notdef 14/Zcaron/zcaron/caron/dotlessi/dotlessj/ff/ffi/ffl/notequal/infinity/lessequal/greaterequal/partialdiff/summation/product/pi/grave/quotesingle/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde 127/.notdef 128/Euro/integral/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft/OE/Omega/radical/approxequal 144/.notdef 147/quotedblleft/quotedblright/bullet/endash/emdash/tilde/trademark/scaron/guilsinglright/oe/Delta/lozenge/Ydieresis 160/.notdef 161/exclamdown/cent/sterling/currency/yen/brokenbar/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis] >> endobj 140 0 obj << /Length1 1166 /Length2 6421 /Length3 544 /Length 7229 /Filter /FlateDecode >> stream xÚíyU\[ëö-î…"…P\¼+.ÅÝŠÒ  +^ÜiqZ EŠ»·@qmq/Š;—îýßg߳ϹO÷íþîZëûƘkÌ9Ç7W^ÂÆ¬­Ç'kçfQrƒ!ùøA`€&ÔÕå®g SçÓ…8 w ˆ5›>éùúŽG@¬‘P7˜‚5òŽ×wD4¬A@=‹Ü­ABº!ÀmÔÕÍ  AB.PØ¥àf‹r…Àz(8Ü ±Ó…¸»¡¶w0Àþ®²ÿÌ wƒ{# ŽH§®ï߈€¸¸8ÀÆû/ q‡:Àìw ˆ‹üw¦; e ‚¸+Úîw¬¶½µ¢ù»]§# p{kÈÆïnσ \w…*ÂìäÝ\ ¸üöLŠ€ØÞ5å ü§oÎ07O˜ïÀöP˜Ý-Ù¡à@ô ¢ªð?ÁwÁߘ  ‚ÄA‚È3ÄËÖø;¥¾7ò)ð¶†ÙùùÂÝà{kwˆÔr÷ ðu·ö€ÄÏ÷'þ}G °ƒÚ"6‡»cø[ý†Øÿ¹×°F" ^3?$ý¾ÿµzzw vn0ï¿Ã5­]! º¬–¦&Ï?{ÿW”œœÛ$Ÿ€˜0€Oð‘ÈݤÜ)Š‹ýSñ_^üåè¶5ôêý-© ³wˆÿÙεäA¸ßÍ&€ó1æü»¾¦j pþ=:æ ÐÝÔÜ=þëHýÿ_ëŸ9”P..¸Âù§€;?Üê€ßޏX#þ#ÜÚêâý_^øg äÏéÿ?è¨"­] ¶²0—ÙuW‚zAì´¡H[Ç?Çå/—íþø!ÚnîÐß_2€O@Dàœ¾#ÔÖqw¿;‹?(Ìî)a¶nvP˜@y7•Ö»¿i[qgÏt÷î_{{è]ˆÄ–`fÒÍVâ¥Så˦³²ôž|kCB¢'·(&a‚hô~ŒÍûÎ%ôÂoŽ%e)hq”.7ÃÔÀD£WŒót—kæÇ¥  ¡ÀP‰ ÛᯒÔíãqÿuÒÅGÝOÉÙ’÷îQÙc~wbÂ&-?H¡êv/àÁ™éÆæ3-zÆwyeøZ›“\âÔA»Z*.þ:`œñþSPX ¡Zë§‘s5SÂO;§”eÍV“]rÄ"ã¡ÊÈÊ}z“1pË`«à…ci£ýŇ~xžˆšÐSøow òÓ”ãFMÔL³?9NBwq´#!"nŽ‚6y¥¶¯\’… ñâ¬uº‡PÖ@Nº¿ªþШڡlbBû„±S̓J(a±Jà-Ò®:Æ’iF]ï C·¤/\{jÐ|`$¿ÒùM7ZÓà7×,éåu-ÛÐ&Û¶4ÂÝt+a8Ö©b’8¤ÒÖUòP®XŠÌò)_m@|É|dà¸kÖj¬ßáõke@ÙÜFxSzLH‘=r ˆ/P âŸ%6ÒŽñõ×~Jo.ÝôW9Ù°Nï0½õáózH`©àã"·r’zu¤ü¯}SxD»0G.s^Š&kôŸ¥½3]îÇ%Zí§”†5߃ &{¥çx·Ý[÷÷‘OêJôÁ@ïùp¢ûAäÚ·ŽTtø´M¥bløÚ܇3µÚ^ý8^Z™ê:ê+mrÜ<ñ¶ô«=ˆÍÛèÝR¡F= 䣧–Í›êªêtù·Þ–VJ`øij3/³KG™-½LdLË[ üȈj‡%ªD žácq©Áë/†·‹¢s~úYr˜=~ÅžÜ@wî{óO):¢{ V†ï9yúS‘s7®ŠqI™ V¡\ !Z“¯nËXÚ“ÛN­û<€Õ5jb±3®Ô/·[ˆA~á×D>šeÐJäßSŠô¯,ç­àkéí×'Z^ Š”=ÑÏœKi<ߟ•Ë,é³ýÄ%‹¢O\Ø•^:êŒÓéOø¢ï;h$e§ò ¿5à`ä#Þ»îòUâûÜÍUd=k}Á›G|q“i}Ѳ,Ê@f†ØF¤†¿TûOÌi?èÒûQçÕ3™rЇ‰¢A~”1Zêï¨Y\¨õ)¶ðÊHÜ—Zh‹Ê\ Á‹½ÇyVUºŽqæ(Å™‰Žý²dµB×}À‰x0°"“÷sP9 ÁšL$B > µ‡µË#bß~e›É¹X´Ùj;µàÝ[ó}»¯sò NãG—]R†íF´BW#òxúCùÂC·3o`UãúQ{1¼âÞTÐqfwI>ŠÙ_b#ÙÝê,IG¦5#x"ú%e¾ÅÇè_‰ž¸ìµxüêBç Ù®“g9V½>œN7Ñù©‘?o†;J<_Xaœ„êæ7làcùÕ¼;Ää}s3ÀÇ\ÈŒ;¿½x52‚í{\ktŸÂ ± óE¸Sz«3`¢³™ pß–gDt'›$›“+ôžm±£ 7”p¼k.xÄÆ¸üUé¦×S\ÞGWÛâ“¢6Oš¾|ÇÓÐýËlÅÌî¦yЈùLî7!Ë®šˆ¹×•tÍ–j÷9Yœ›l=°RF$y…EófvÍeu½jœ\}¬x>ˆŠ´aÌ|fƒ+ÒßÛÎÀl?š|­(yXÁ‚û1þ4ÓÜ —Ø?ÐWÅŠÆbe1z¦²©RH¾kî]ä¸vK£?…‹Oá·Übö¨·ãЫ6¸vP¦¢íMØß]ÛcöÙ?ÜŽ¢ô6å&|rÍ:ÎÄô¢EÆâñÒ®/í\lõ‹åð?.¯—¬±ýƒÜTIɨæÁcÁoæE0¾ßÄ—š9Ë.>€¼Žéò/Àn £uhN|Õq‘Žè´¾R1p2úž»vÝr"¡í9²l”pvß$±´h=)hÚQѼú ßÚjäÞ3¾ôãØM<½€ì‹V¢o Mx»0£¡öÛ\窱ÕvÇ „©FY6ûôEôD´ñRîÄ›Ð2Ûôüã»V|©uÉ!@"±£a1ñØõ‡µ¿hzëâ[¶O”ôÕÁ e}9ê);8ŒEA"§£Wý¸gOðĈÝ26”Ò‰·ˆBÜ77l2{û‰ -L ‹qT&Þõ¢UÃM»"Fš"…Ž}ói¿ãmÊጙö“ÔŒ1'Ì˱¼ U…0ai(‰X‡ J:9ãSWI‰þÈåžwZkZTJ¼cÁ ÐÞ-%IWÒ&÷®îó bš“jaKŒëý!€™ÄÞÛ‰Ot Ÿ1×#…'"p@lOâÑ9r&¼°šÏ& hÄQ øêûÑ´F–PðMêRËìúOø øä)dW|#Ø|ÊmºüÒ¾DYìì‹p̹VÂ#_”FË* Qçß•¥=&ìrUЙ«³¶I »åòâdΠ ³Ÿ6¦Æj´|Ü)_cðå•–."ìèó©Ób úþ%v®œKç×÷£>úΆ´§¹Q@Òó5qÿ\2ë—fÒ¥NSäØ pò¾—$èVíãvH.yo°ý͵aßÞYX(SÛ çC[ç«pÉxQÜ´ŸÌ©k“çK°ØÆZ7ÆàªèüÐD.ÁD×&SÁ¹ñh¸Ûh'^|sÄÔÌÄꌵ™¦XÑRÏ'Ñ7…}°¶®.fØV| ot$Ðh"uÓç#³7-éÌ P³I{ûIx£eʾ*ëf?À¿À+£;¦ª¼˜¬Aq‚%IÌ…äì1<ÎdM´÷lÓõ”ääBYÒLóÎ>„UÖÛ"vhØ_ S¢y»_ó|LEï®YÄÍù"VŠ{ûŠþäJyþ-¿ºj-†*Øn?Ž4¿•°ð¸Í#**NS@Ö0ÍÝ447ôÓ!<þé%°¢å˦3yäÒÆ#‹G0Ä£r±™ùQø½•§Î†B#þí£³e’"Š:Èâûxq\¢@ü0—/jj5,œt`Ô:|ÄöØ+˜6o–ypòÈVuø(­,…=R¾Ù”tÿ³0,øóWÇîò¬RåÒÍ:5Á¶ ƾSñÖ—¬³bX7fsóÍJmìz—Jšý÷äèÃ÷tõÙo» œõª‹tñd}_¢Nšüé9>o^èªÖîµØÍ’GñG3öõl`:¾|Ó4ûÙB®{ñù5½ú“ÎüåÒ1øÞÅeoFíºQÌŠÝ‘@28™­¬,ãžBÚ¥;¥q“€K‰'ù`3¥&k.²Š½ÑÝ0T?þ›°Âå‚1\üˆ¦Ë7¼ÆH žCTýìÍ8ϧÅG;fÓÄC”)~gÄsñ"OE£ó׬ä5kluo¯ÈR4CLü|>83äˆPÌ.:IID8–h:·vbÒÕ)k´ 4O½ï·¦Jó| oò߉B‘¡ðÝo_EjÏ=ÚŠr’1Ý듬À‘ùdä–s á“Õ†o†r˃"oßžtÔʯ4ʺR…žk¬©múÒ~Ü­è‹ÏK÷mò3Ô9wŽQ…xUHµ£OK}pu)Lôš Û´žÐL›ÙúUÞã2Û($Wõ]ëõX\'“·{BX`üp⪣ ýËúã³Ò˱·=é¬õÞvXK§Ølõt—¨N.ÛÕc1õþô#ú„#x_ „ÈÐ^J¤%-A×Õòp(š3N›¬†Ê5:Wßw” F^ŽU)Î=æ‹íBh×Ý3NPÓŽReÄä„ËÔÈÆ2'xSЏoÊm’èï¬ì=*ì&/¢¿¼÷)Sð!?9Ƚ?DØ.õ3‹9’1{b W”Wr±ßB¢ÅŸågÐ#9aK¿­Ò'“Ò3‡ý k—ûLC±×Õ+V¥™ø5=£q’4]¥ª£ ·ÌùC£BFR6­,ˆê‚ç{NwÉ’C®Êc¾u“Ž(v•“VïÿúV7µîd·æH‹âÅÁð4AEZ”bÒóÉá{½Yé­6ÙiÞ;`° ,ÂB•’èŽ\jÚ8`^­C¢$³=šÉXd˜Qßp^ç#)§;æõHJn ©mQÚ{@0¦£^ZH)¯FM/ÐÇNy*DŒí>Sv,î#bN±kÍ­´ÎÖ~k¶:#¥Ù¼jßÛ¶äñºoRþ È¢ÜÁh?SEµ®hÈûqB§UèÃ_Ϫ¢'Ç™1SÕæiD›Y¢>lw+“4.KU›“Úžé>LÛ>f)Ý.áGIaÖ¬™äîŒbaZ)?£"ïðüQi{r¶Í0o6Jé=ˆùÌ*í0ÆÃ%SÀþ‰M¶Í»?3éKޤ܈Æ)D¼ Q*‰ó™8ˆ –!mîºbsÑQB;#[.×DOÉz݉/¦8`,½CY¤ŸR'ê“«¢¨¼¤A²aÎÀ"ñË*º´'ñ«/Às Luêþñ\d½Ö)Ž_2°:á²Âð3’[çét;Y£7ŽÙ ÷H>Kt,Ý&VÁŒœà}É ÊíãÚ†B÷ "Îõ|~͆)bÿ%ÖÆ€¯Ø@C:9¡!1~Ý ÍEÊ#ÃÀ’ÏCÖ€™@ËÁþ„õÖþUò…ÆUÜþ1ÔE„‚óí®FÔ:-ÅÈ7+”¯ßèN˜TܰIÐY±Òzo,•ÇæÈkÞz´ Gâmï¡×M3h{íyf÷(ò ¸4s§Ä“•8/ °›Ðr@Ž¢olÃI,e,Î'öq?Å,±¿'ÓˆìÙX˜T. 6¯•­:øsNã`‘þ$£ÚÖ¶Ö£‰˜m«9c\ïuy©Gͱ>Ÿc*u6ñ‡#eùªÁC¬‘º÷Ť@ì^O/Š]¼×~‡]ÝhQ¼s¶Ð,UN`òP÷Zz)·}jú]«*C]ëFI*Rÿdf¸*„ê}oéIÿŠðóÆ}æ+ݳñ[1‘¸b¾%XŨ˜k!Ç'ž u»âÃ~l•Í)%šcïéT=Þ\oFX:£¤LJ*VJ´ãec£ÙÑœôÑQ…È™Ø@0îñÅÇfy2[<  iš.›“ ÉVx„šœQŒHµVµž?*#ôýy0µÑžç†Àb|¸ÂøáüqÞË8¬‡CÒ ·.ãŒåùgâÃËjÑô”G£­õD//¦lN{íÞE>ľ‡¼è¢wî¦Edtu¼‚½tÇ–ò¨b*ø‰G¹TýªãTÚW)+0©úÍŽò–sQ}‚µ$ëá«ççÀ2¦DŒì/V4Ø‚5L)!Îóo\Ú§ÆP8«ÜÓ´%Ç-á¸å>€‹õ˜#8Aøjˆ†Ùšº›õ$ý[y6Ë{Ö>"Ù½ŒÖ†øçzÑÚ7·Ëò®äß/_v_§ì¼Î#:u>¤³×žwŒèŸgÑt½–,€õ,0\~&Ÿ«›c‰øÕ3³Aã÷OüáìÁ‹,ºDÖ_¹ÅÐg£a¹—ÆM‰YUöÔ Zew<÷wîk×-©G{£ùTJ‹íLËu»å„µ@IÍ“gIPS•ÄÛ‘y¾Wb©f «øêSúxöÞ8¥é›–c¼/šüOöÔÂÚzùW}F Ñ7¦ÿâ[³bfß«¨ÕتtÙ¨dþìjLÙH°|mλtîÚíÂúæEoEæñ¢2òƒLýxO@öE¦÷»§rKøN¾—Y~aBéFl™Êë&f­2>½<ç¸B½ÄÔ®¬ó [yËÆóÆî]³R÷>]P×ãDE^% WÎe¡³’BŠ(œËl"Y-¹g2Y¯úg][Ö b¾EŠmá4îuHcçûˆ,µÌͼ¥cÉNœ˜ÁŽ+ìà1ü…~Ф%@k›±ÙÔ`e`j{`“ÚÌ8 v™2 ÉWéå²|UU-PìÀ4G[!£õõ%@À}ŸE‚0~=^ÄyÌ Ç£i£ûÕþS&ÿëMÍÕ@BLBc­¸¬æ`QɲN=>ä±D4†¦ñ¥tøÓ+yFEÖ®+ ÐÖÇÍ€'1=÷*$ñë¶žÇ<ßÔjÇ¥.auÿJ|½ÁÎÂÆ1‚®r\œ;õD´J|üGtG|KD¿lCêpXᇇ!¼î©Ü'£ø» ÙŸËŽ=zzX–ËÆ‡ÎõÒÕ4*Ë’§‡È¾òbZܤôi@5Cx§Õ’þuéf0À=¿®’BذHDZ±ŽLù¢}—Wÿôæ+)ó-|h¥`ˆS"©lrwvÜG÷ŽH@—mþ±çj³›K/Ä;»žÈwI<ÇF\KKNÁÈݶƒÇÒ¹µxEk·§žZ$/+.r?Ýa Ìø x‚jÇâç=Œyÿ;*zûf[M×à‚å•„k!µlb]ÜoFBÚ5[“ά~cä³ßNYíü’`•5C~ÊÚ¸ôËF~B&7<ß%Ý‹v«Ô^»@¢DdБ^î bwÌmwU¢›ªÜlœVŸ’sЇÍ]Ô¯y¦Ä'xn½‘ bkæÀŠ ¨Ø¥)w_…³¦“}d¶•™îçgªÑ¾ÊK»3›šËô‰×0®¿>P¯öK ׌ bùðÝ2RQo ±©'l3åà ?\ýˆs»w[¶§";ÈŸlx{ee¡ªËTKF`Ù²N‚®q2[¿  ᮤíh¦¬ÿÄ c<‹+pïÉ(+u4ª-pá‰A†0q%îeQÕ†¿ÍÀ3ÑécšsH:­˜r÷‚ øZ…•¨M8A-Þ!ÆT¯b«zöŸ¬¼³MI÷”®„ÄšˆAýMóEÂÒ‰qP¤Íª¼!ž·qM˜?âj9sÐgɰÊïâ÷NIJGh¾å®ìžó·*õ#¡œ½ÊYÊa!¦ß… ª—h [°½´‹òBtV”ÔÌžöñhCôkbÓâÛVÇq\q¤C62²×Ãe¾Q2?µZt<›Ò×d ¿?˜Å æÆG{¾€Ñÿ°Ð`¡<‘3È E<ÁµvpLˆB—aázµ½uÂ+mˆTl’ö]âXø¾bº ó6ÿùæDIrïÏ_V%1n²‡AÌŃ3=ŸüÔ>á1(x4€Æü|Ör=-ª\›ÑØ’R®mÃs̓à2Û¯T½Ëø|ú¾Ä¿o1æ­Ìjç£jI{Dêd1ÓÄóe$:\ÿÖ‡×ã[£¨˜¾‘¤™ÞÓ^>À˜¤¥wA×óËýaÖ€éh¾–PpF½‘h÷‹U°¡ aðšöÜ©‘6 r$ùѲN¬D»žé<²*3w¡—›-3{îiØó}ȘèlbHôyüÿ'l] Ö¤›«5™ÀqGº!~ÿKð¿É ]endstream endobj 141 0 obj << /Type /Font /Subtype /Type1 /Encoding 174 0 R /FirstChar 2 /LastChar 121 /Widths 175 0 R /BaseFont /LUAONN+NimbusSanL-Regu /FontDescriptor 139 0 R >> endobj 139 0 obj << /Ascent 712 /CapHeight 712 /Descent -213 /FontName /LUAONN+NimbusSanL-Regu /ItalicAngle 0 /StemV 85 /XHeight 523 /FontBBox [-174 -285 1001 953] /Flags 4 /CharSet (/fi/quoteright/parenleft/parenright/comma/period/C/D/G/I/L/M/N/P/Q/S/T/U/X/a/b/c/d/e/f/g/h/i/k/l/m/n/o/p/r/s/t/u/v/w/y) /FontFile 140 0 R >> endobj 175 0 obj [500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 222 333 333 0 0 278 0 278 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 722 722 0 0 778 0 278 0 0 556 833 722 0 667 778 0 667 611 722 0 0 667 0 0 0 0 0 0 0 0 556 556 500 556 556 278 556 556 222 0 500 222 833 556 556 556 0 333 500 278 556 500 722 0 500 ] endobj 121 0 obj << /Length1 1606 /Length2 9197 /Length3 532 /Length 10048 /Filter /FlateDecode >> stream xÚítePœÝ².Á]‚Ü=¸Cpw:Àƒ 68ÁÝ5¸;wKp'¸» ‚Í%ßwöÙ§ö=¿ÎÙ¿nÝ©šªwu÷zúé~z5-¥š&«„…ƒHÆeåd㨀íÍ\]” J¬’v€#*-­”3;@Þ¡ A€.Èðdàâp  Ò¤=ÁVÖPƒ¶†.#33Ë?-Bfžÿð¼Üt[At/n ;G{úñ?¾¨  Ö €%ØRUÓ—W‘0ȪhdA3Рæjf6(ÍA#ÀÒÁ`÷÷`î±ÿ)Í…íK¸8‚ÌÁ/×@æ Ç?.€#ÈÙìâòò »¬œèK 0ÄÜÎÕ⻥Ã_„^"ì_|/`j.Psg°#ð’UíÌß<¡Ö@èŸÜ.à7ÀÁò%ÒÂÁÜõOIù^`^¼P  < r™`G; çKî0Ggð_4\]À«2`8ƒ¬€Îv —˜ì?Ýùg€ÿR=ÐÑÑÎó¯ÛEý'0ÔdgɆÊÉõ’Óú’Û Aeÿ3(òK'Çßv WÇøÜ@Î5ˆáÏÌ0¾Z8@ì< KTvèKJÃÿLe¶ŸÈÿ‰ÿ-ÿ[äý߉û¯ý—Gü¿}Ïÿ -ãjg§´€¿ àeÃ8”vÌÿ ´Ûyþ7Ñÿ¨ ú›á"¾´Abõ"ÇßF°‹ Ød¡†š[,v/=úË® ±9Û! -ÿj#€•“ƒã_|ZÖ`s[ÈŸ¦óüíA,þ•ù‹<ñf×ÓÖ–VTfþ×múW”Ú‹êP-OÇbÿQ‡²ƒÅþ`HJ:x¼YßrX¹øø¼üœ~>ÎÿM¶¿`8ÿyVBÁƒ—’98ÿ*ü?þÿ<ý Œ4ÄÜÁâÏ”hB‹—ÁúO÷¹«³ó‹ž½õ—‚ÿqþkÄA 9êò‚ƒ¹P°MZf:´–0wpüAo7'Ü`ˆciƒVQµÃ¿´ð-JÓÇš¶Æ¯‚ÏmžóÇŽO{ LûÃÝvô_>‚~ä“~ fì)ÀY§ëàcÞd7.ÅH?Ñö>›SÚ„ÏË¡³¿=®®a\òˆHöµƒÛùì–ÑŸÚ­ÀæÆÓ×<µ>¿»æumáñ ]Òáí }ÿÈÐàÀ— „ž=æœ8Z!7x º(§±÷Ú•ÞLó£ãvâ'V_åù¯xWÃ9Ã…Ö+Ý?ü üy¨J¦‰6ä >HéúÝÖÙ+°'iºÛÿMbÇN@£%]åϪŽ'<Ù¤3W…cÒnìC¼4tË…ÚÁy·ˆ˜ìž¼˜WPÔ¾o71Â[¥Û(Ø’rc¡œÁ0]g*OYÉ:GŽÚ vxÊ¢3fêØÕn4ØžŸ{Ò>}dC+ÃåɯõÎ…ÆRZã¤Ï–ú¬_|Ò¥#™eó|.é”Õv¸ ’îܹ–ÒÐe:hÒ4õý|ðËlnH£zOfâˌޛ®žôNEÃsœ®¿`ê]SŸŠýƒ/°“eIuGV —gU’¤]Ãk%¼z L?w¾ô¼RÃY÷ƒ»MWØ2Ø^Dá#ú é9‰|CW'Ã[è¼€ÄGø ;iÂòûø8Õ•¦üë±x4äƒh­9ÂZ'u˜?}äIt޶ŠM²ÊPE.ØG!Ÿo3¾\Ë÷¹glÞz,=Ýóºz°¦Leå¾Å´‡é•9v€òÿGIÝɈºá­×hb6çž<©UÚÂ? ÇçûϳjÒ¾™I¿¹=âçž² ÃÔ´ÂðM‡,ø<[¦—ìèsUÑ3]f±mErÌ&E'ÆfÜâ$~-;JÍ‘Tq¯õ»8N¡Fìhv?íêwt‹2gPÂm¡=F”„ý¬½»-íXMà<ï5¿N¾ÒWOúʳ W=ZŠB¬Òo»¾Oï|øV¥Ø‘59µ5/ú>ËZc>¡æã­ÚT–ôOÍ{£œEUÌ™§[õdã¿7[¬<Þ¦7H.iöÝcĈˆj؃¯Hx.:.À³,³{Y¤€¶«ø9f/dˆ$ÁfÙ~Á*±”+?ü ØG:§cÑÕîIË“)& K†h™ sY‘&ÑĽ EöÇæYó¹ðMÐ×ë×›Ä2 óÇv×öXš2ÍÍ=+dKK\$áþÞº™ÍyÃ7YËÄ»8ÍUGpŽW[…ëjøƒR4ß¿ÃÇLà¨Èn\ –Üç$,D;å&É©ea.pýƒZw`úùh»C×|Ò½L·ôgç’‚#¨°|¬îmÊi“/¨Š¢µ*|àÓô#E]™F§ v–~„öE‹³orm.dæÊ×<®ˆï[F†”ÅAY4(þ០l¯KiŸu`(&ƒA§NpŽLgÐT1‡æÔé#ØM­"ÕŒ‡†þ–•xôÍ@&Y EL®^–C’ª&¬¤émy¼¾ kÏclD„?íq˜ï ¸“P3ãAÅ‚så`<¤Ñ5Xp2`øۿô>:Eä-¼í]kô†IAK¬ŽÆ(ó»@É^²ÃÌ)H}¤èÎÕt6¿WÇD ð°ôy“í› jbSNGèˆóÛmüñüo~lÝìùõVTõlšº÷7Jl‰hh´ªh¬òáÖ¶ VäÉqÊKJ½ÙÑå*½R÷ý=ì![m–±ü±HE mæ}[”öÚK«ÁÄ%YzÁLW"º·HDòqKÆ^éÇ-’"º<<Ád< ž$ï;²2Ds¥¦¾=Ry( êÆ KØ-—û-vAyÛ¶›Dz ãD_áÉ9¬Ã؇ìÞç¯ø ñ^,`'õ[u¡æµÄñìÄ)2X‘Žü¬t¯BP“·j– ¾|·]uY6vKâ¹™ñÛôk|Õåó‘®é[³‚xØ ©™!Ü]Ú4tB£h@ºTàYEÐ3E^~‘DFSâV·càpahã—D#'¶§ÔÞ@аWhêw½Š ±BM]ÎXDÛJFÒÃLìc Ìfï­ ¾ín¢æ)ÒSÝÃ=ºò«³‡O×yÍ(p¾2 ­pEŠFúv³“Áš•°ŠüÖÝëî|h‚JÞ¿û|0Õ¶1w$ÖúÜ8C ¾ƒß\ï¾åg_n„¶¹š1Ø­‹UÆ-Í;‘„Û6ÞJ¯Áv„ÛÖß;99\‰¯~íqÇŽÐÎJe§! é“1Ö&Ë  ¹ÍÙ(‹öN©Æ“|?ñA¹R3š³l²ªÛbÖU0¾Ânü~ÅÌÑ^áÉp´;ýphwA?ËôˆØïð.ƒë²\‹˜¡& :ŠèìBú†¹Q‘œˆŸüWC¾Zr‘û'ý6yŽÉ˜¶‡ßÀ£ò¡è™_øæ]l¯õfº¿ú˜³7å=I,¾ET ctaV+ïCý õS©#7nÈå>æiÈÊl)"]ÓȘçÛ¦ÆÏ jÞFKoLüÖ¤Lc‰s¼m“ÕA^ÝÎÂ§Ž´E‡[O²¤S×Õ5Ýu&Ç ª; ýqކÜÖú9,YoD­&ÕšmµŽEc /DOé|„.]+’Ü›N¢c¢]§e±bQEùÙ+ÎÐJÁr£|áF  ‘ûhvýãñøÙr¤å RÔ¹ìèÇÕ$žâ$ `ÒAÌ:TT˜®Ýó€¹/]»›oçÞAN×/•;ŽÃà—1”着¼$vúz¿æýÄä}[eAùŒˆ©ÿ­ê›o•X»Éíš,ÍnÆ®ÏN¿G@ü%¦F#ŒÒ’of1xÁªÒ©öíØó…Áb£íÃÁd^%cÓ{úo|ËüAèJ<+&Ñ_è4…t™Œ–kžo¤Ü"Ä,f”70L±‘$»G:âPµ¯“™:Å´¨¾òéµúŽ©´êö±¼±Øž¬Ê¢±ctÏwz±Z ²µ»þ ¿‹oŸ›@—aˆÉâÞC‡MåÀ<*þ¢’èßßû¸Ù¼¡Es÷u!꫆á9áG¥ˆ ,9›âêL¢ÃQ~X×e±8KÇmr*B‚Kbö‘J‡ÁiÔK>Q’°â=³*/'Ùßœ×kü{t$‡6t±Í‹XX i&¤…î†$¼Àh,Ú{dX 4Ôe§õŠàÀ…ö_ÍαxËñ3a¶:º–$ÓÔ>’éÖËÖG L@‹¡®LÌ»#z ¾îx1>W(gym—# ïz¸`é ¸FxKDÆu9bûîäºyJCçÔ­,%§HŽB0#@ óà:ϵ~• µÞš “AE3€"-lÓ«®dlN2TvˆWuÁŽ|,:–©çy:—U£ç3v• (‹IÁ­1O5—YcªvË’ØÝº‘™lqËUþrj?ð• /6ß“³ûJG•d³Ø¥e„ЉšSI¢[…£†žb}Ö±™>ÿl@a-A€¥ëG¨Ø³&|ÈS|5f’»{¦Ïê[YetEeɇŽC°üÖ&¯üøÙ}c9›ýæÌEí vÌÙÅŒœÀ(´ÀÙÓÎVðÛHô½º|õrÝàdûŽÚ“H‘Óû‡¢‡¾çCںկȢF³jØ­>IÕON0á :t.¿CLö2I&bôC„C\t©PÛÎkD¼¶ ›£†,>Ë®mhýrè+Y¿)±Ú¬(rðQvñìGµzŒ´<¬·tâÃ{‚8æ‡>@òFTËaXª¶˜³›È­ ÍÔ_“¬ª!ìÖñ~¨Ý땺x²#­$ÄBTzÛ(wîI2ûðà —Ç‰\3” ²a‘ØÍ.5Š©³h©|¸EЉ0«·2  ªˆ¨É™±„`V½“n¡ºê>U¨'é„Ðþ¶:]ƒÐu©ðÏÒËÙщùâظ£(²ýÔŽêZ§è…5Ï£qZýüÞn,P3£y¾’RÜ_H|R£¸­Sü!Ay8ÄPùÓgK •œÐÛ὆öÍ»€_Ý¡¡é;ø›:ÕEöFδ Ìât%—&!ì2-­ ßªÑùTa¨{çÏp؆yæYqV½e®–¤çÎ:„©4×ÅÝŸ ç=çÅ8o4(ó€X¯ºnë aÝeN98 rÎwoI]ëcý¢ºN‘ò~U+à?+âÁhÙÖÚø*sQŸ2ߢ,¯Q™]ËʄР‰){ÞÉß ÊD}–"öd¡P.ªU–¡±îãçvúæ'‘¯°ïZX­0ðSq—|¾0!»ŒŽô88Ï8ÝÆ`õ±¨É.í¶O÷˜9Ù½µ5eJÝXÊíãWäûÉE+¬Þv°ã+͈Ï, N' d0éº0zž¬-p&ùòˆœ7`ÚvíyÓŠçÞ‡}…iÇø*§¼ 0«†Cñ€zì£Ó]{ÇPüåL÷µòºH CcnH¯j€t<²˜ù¼Í6zëáj…áá‚~†÷›¤QNq=E¸cZ”훣·ÿ4FšÃ«hwW6´%‰Ô#Ö¬ò’‰ÖŸã½¸ÓÜêÑìF¥-îŠXÖ4Ò!€ïJyl^¾‘Áh¼f¸½ÕÀ¾k¾îšê‹¾af9¡O(3lÊm~kiýo¬Òxqˆ[I ;^¾'ý…CÁÛŸŒFzmï~§ÊúES’²J8?¤ëFù'é…@TÒëcqcY›BF û‚çýÈJ8ž+|5h4k.Ø^©Gý:d²¶ým &ÅJšl¨§°Žæ@’’þ”dnëĸâ¿`~œºžð~mz¾ÌÎßÏ"Œ-Ry²å¼#-ƒß’†%«Ó|ý^›r6cé!ñUG¦^ãè…à’R¦o󢋱òêt^Rá˜ÆêØdª‡6~i”g‰Ï[xÂÏcÓ¹ÆO°³×uëíò{Râ#w)õú^¯ü²10=T‡…súe{ìV „RIàf¯•+<ã#X{÷5©ÿ𮽄b,Ç2M§³3{e ‹õAćæk+LÊOÈ{„cz±ìlSºGƒ"/7ÂSRاg%ð󇍯Þ[ £’¨U½.FùüzjÀã‚àØƒ¹÷”¯*®OÃ4IK'÷jV¸Ñ#(J‡kFS³XŽº0|D?\Êœ%ˆ.]å,jo˜ˆÉÄ}š1dÈ–OCú³lîp£õgõ÷ñ]Üel¾ÊðYÖ9'3úŒ¡Á*Š…pî$²NCõå=ö¥ Ö-B}IA¡µL â³¼"å4ºœñ,áNæ6‹îœhœI Ýô+8« ¡Ï€ƒ#D}‰Ô‘¾êK…©Ú÷¹¸+ýÑ7¸T&…QM—ka/›Ó¯c½6òCÉ÷(óSâ ·úJ°p™ˆ;×Ò~IWòz.=U¨ì××ÅLÏ|iL1ψtïÛbyZ¿;2N×ìF´•_FKó¢†Í#«:êÎáLÙ'¯1$|Hí5ÙÆú~³µµÅö…&Înãƒ`º½=âàØÙ01îèE&æ¹­Ý%‰~S¿jæÂ] “þ™˜ÙŠvóÞ«­o@2¶ßth¦:Ë#R˜Êλ¥ÕXd6—¿õ 2·C‰/˜ŠìiùçW:–Ö±rgüV„ðQQÒ“š Ø ¬ñ¢[oÙçß‚¬$lÏ'iÙ½?²¡_–^Ù×!>ÑÝé+â¶¾ú4‚:éé“÷w°‰Øün·t5øÙÍ Øj¨}dq¨cØÊpßÁM·±ªæpI«?î;gÃc-).Ñ{¾m;z˜{îî̉+Ðç¬WLVF‹>{ÂÊs#l¦T›ßšz¨W–¼Ít2Ú@üR¬[7R®$ Áãf3dÆ-W]KÚùßœ—çÈ´q¥Æ½ØeɰÃôY3d¿äg$nílÇÓv þàÒÓO™×Ë"j½(×,’œÆ~·•í¬€Ì¥2ýÕ£ÁôÛqiñP[{z¤à­G§/y±vaáÙ1ÃÆ÷v‹®@uÜ\'_‘äè5Ÿ¤ÚˆNñ-IüQZ4kN×íQÖxò­_›~]oÞŽÊŽ¾IêUÔÑËX~õq]3ò„ú’ýã2oL¹ù뤽°Óú¬ô[Ž‚üðNw$ö6‰Ü×Hîs˜cá IxµY~ÐþÑ5j2GTpôÎ]gG¡Í+QOŒŸpä/Uwý3üMÜ¿™i}­äI9"a×û ^6‘÷ £³Lãâf:Ú¯ì(΀nJÀÓ$HeþÂYø„½¸úS0ù™¿¥¿Év{=£¿‘ÈÙT,~Õü|ÏìÈ2@²‹Æ¦¥KöÆœ;-nK¶è(ˆµÍ øå]=ÑÞ7›&M˜›îì™`§©O²ç ì=Üü5Õ3ïl';˜L×-8SzÔ[3 8UæSqzÌjËZ7åVA¹±TÉàHô• [ˆX,ÑÚNh² ú‰Óþ:ãZn?Ò½kT›“‹þ¼ (DHI»8]é3õ»…ãl°ì»_ä›eõq鈛ËüÕRöÄó¶kk_‚Ý»ºoæ~Ó:׸öÄÙñfÌ¿=\íž,#xÇùñŽ­ý4]ž\¢;ø#wt¯Ú]ÅžžÙ¢yu­¾j?#s g(•EúšŠý¶—Ô¬HÃçÿ´êž[#dò’lTÿ1ò=D\$b&ÁDëÒÛŒ ÄÇ»K a‘baúyhOŒ'Æ]ãØ=àLlhþ Ú Ès3Ùøa÷ä–ú;Ë&­ûN…VŒj‚1ÐnB|JôÖR¾äSbö„عmî³N/mŽwv6½‚¶z¯¥àÎ…wÓPöëœÞZ„ckxÁæ(P'uzˆRlö-놤ÃãAÛ 'öêT¾$(ÕÅûñî‡ò)‘Ä-Ÿqct«Àf^÷íÄtwµr”\Á\˜‚ºH溭Às'bùÒGÔ 6CßÀÕJóQ!Br›Œ#Ê! wòZµ’TíÈAD¦‰,tr3—_¥K4TŸ+bÝdMüŒß¸Xš.W3Â2ýÄ’äÊ2¼—¼Ëî¡¥(;}¼B~ÿ ÒY‰Tv—ç× m@zdóÓ[ ¸=h½ÐØë3Û$S8(‰õ”ìkiBÕÀ]×ðôëê-’ëlFÊ:Ûÿ¼“yâˆFZâ°©Ä qîøRÈl€Ÿ6–_ÞÊV jd³_C(eO2«hM®*\¯i¼ÿv]SýI(ˆõ‘³h™Íg•"cOÜ—~v=Am•Ìÿ³ÖMA)Šï„ì*ô6iV)¨§Øt’S¢@FŠäsáÇ߸ã“qu pHµ7JßÞÄí©ûèÅÑßù'Ì™£Èð\=uÝ5>ÔîÎÀב0¹)ò»óîj†¨HÍ©eÞÌ')„S¾æ¤“[¸\z÷ž»fbŽ{p±È‡/^_ÙÍ!ÃiqZXHTZOväoG ÷QÏÝgôI},Þ[¸~áZ>÷'‚â–ƒG7Æ3(ONkŒ–$'ã€ö—¸rû÷Ù¦3kYMàÕÔÌ}tIËæ±hMšùÃñìMH1]bÃîϸÒ-°<Ë'¶Jly$š9˜l%bç°$7™d#;…d£NæüjžeºòBti¶ïœf4XKê÷n‡Àtáè‹ë6å˜_Ô謼q²o”,ûÞ@ö&Ú4ÉHžq!ïa*õ6ú/t·ö¿Ói¥å ÌÄdF|  ˆ Åù­hð«+UžøN`ì —oçÄPVü€|åfšÝ«Ê+¶«YBeç§z~¾bùº~ÿùó“7&è<â“5EÒNÊÝ&k<}ƒ[Nü=Ý6õŽªÉ€@r.þË9H®¸Þh&ä´òA|9¬³³Çô†˜î1È+°3Û†û3t¡m<%7aϰË>;Çoð}n>Ü’°Uݸ™†æº ÄÚ<û“T<,__×ñöÌVsîî[Aþ;ŒdŽ¢]KÝ:FB&étÏ |ÖÄa]ºóÙ™PDíÀ`lÔ|óåªÆôa{Å ØëM›îvmð©Vt/Uy¤kŸð+ÐfØ÷¹Ñ)AS{àpDY¢>QM³V´`¨~`¬(ÅáëAëæ¯—÷)Näœ}ö¯ÃY¹š=BÔ¿ }Cð)Oá=ôdo‚5£Þ 2ºV´È;/”áyÿlh4ybÇ2R©‡áqÁwÕ^ÍQâÈv—[8_žç‹_E™°Ð$„(ªÀ‹ÚsHŒÂwÙ¤ç=r»pßh’S6ú+øÉƒT™³ÌL}N}*K¢ŸŒzµŸ·ºNlÇMnõ R+ÆVËHvÕï8º±‘ôØjON•o…Ðëô|“ýí5øà9§&=r•AãšR¤ýpR*º_¬úØ_TG_ÙH ó!â(~Pʤ¤ÜÐ?ðPOúB5øú®{´„>ކöjØ·Râ»wƒþ Y± ´LÒB|¸'¯œüèé ¤mòwï+G¹·qÈ2]Aˆ›¬ÑÖž8òÓãÝÅr)ø#»öRõ>**)ÕH¿’¦§h‘wa¦³¬ˆË—²µö!ÈK›a±ä‘8ô·(’®-Uø÷/žÑ­óæàdWŸ¯ÄÏß1‡`îe|ñ²â©sšD€kÇ.•½¾3 qÎ˵²8êæè´ N¤0M/ì —XnιvopOÇÃ1îî¤eƽÇÒù¥ÕScånÉ!®ÃŒ@pñ®'(/l^é÷À ÖÒÁýa¯,ó«éäeÞ‚ëÐ(¤ J'æQ-Ùˆ5äÖÌj;ƒy¶c½ÇSç§j¨7­O¡çÿ3¬ß0Ä4jèÈË¥ª%þÄ€CëävÆîk»ìÌ ¶ú¸­á¯v2Ú‚ÔO'™h·D¾‹5ñ™’óòV`3ßÑôbSŒU4MÈVjOõíÄ@N%;ÎRJl½õ¢$¼Ã’ÞS0Žy*«½Sý¢¾F_`x©÷M©1\©g¥4¼,8Í;‰J"÷ •-ÒáT‰Óˆu4ä  Å`«­¨ÔQ#N£SƒU„_»{—Ð+þ]&¼{ØN`¶~²¨IÛWl›µØùiÛ”!ï©r¬–ë ׮БÁÏBüÛ9\V)¦«aJ=Eƒ±Å‘`Y-MC>bWù¾÷'ŒÜÆ(ÒÚGÖ6OT–v§®†ê×WÕo1ÓŸ&Ø:èbŽô-ª>ލB%9¯!‘›¡j( ‡à+–/Ú›¸WìYØOp&yÞç\ž3ØÈ»Gy„ãç‘Òy°Ìú-zˆ³§7d|\|ú'˜~~ŠêŠ 8×Ô¤ž©n& ÷½]Ÿ•j‹<£•i3y+œ>ò¦dÖEGþÐàÛï)U9r«ðÃ2L»í^º*ǪPkÂ`»¼s=±Lè<Û_™ãË¿1òë§dkû­›ul%N‡é´Æoåž±Õu‡~|*}´7ºá#{¾Ê“œ͈ÀtpѲuda\°-Ö˜§ëUê7ž™¦ÀF£ã_0²Ñp5øu¤yDÂÉݔӿêÐ%| à\eo« ª¢TGÚç/ÌîŽ\Ä™Y$¾øÕ#:P-ü]%%vögoN³dÝ•]ÊyqÏ®mâXSèás^ö}ú3ey Ú†éܦ©)5[@4"‡wEè“S¿ßv3nÉýZÖÉ›½Hò$£Ì”i¹òœæ÷†h\9µ,ìáÝh1xy M Ç%u‘^}iDyËj(D {5±ßÃ쥔‹hMÚ/|CKD\ç04zI÷咽‹ß`×ïq·nä7îE¥œŠ_åq§î!d±W8Ï9øzZˆ¬™£ïje¨“³xï|×bêV¤Ù/”;óFMsJ#]Yû„ïˆÙA Þíë•;r%Ác¥‹õ÷ښNJ’#ì—¾ß'`í™!§^Ú ËWXü*nj­xNNµŠ›ûÌ–manLuGôã­¥¹÷‚*fmZEú؃ґ‘õîß[—hZ/»¸_ب¹‡D{ø[ß°ào¢/?T¿5¼©²sã/,i»Ów).[È¢·wn·Ñ)¤GŲ—Ú ZF’±“žò·Â{P꼚@6¥ UO‹Ðã%¥Q ±¤I,—kq¼µî¸¬ŒÞL}7Ç"¢XȪÞÜ@žk£l=Ÿ3=VDL|÷4?5$2i¨ê£‰N®Åë|ëŠË ×T1O´XŸÇt¼¦ÉÏlÔZÆA@Šæ¹t A{‹z£y7™÷‰çµ¼~‘Kµ÷%}Øî/À»+E~›Üž†¼£_Œ¹üŒÖ\íkºõša&̦S¬Mü^Á$ƒãç¯EÑ4 vÖ*OÃb²fY¶äU-#uI6 Î@0piŽ8á*•`ÇrÍuLíüÝ)1åv‹<Ý0’u~»!+v mFžãùCýÿÿO˜Û€ÎP{ ³-êÿ«¶oendstream endobj 122 0 obj << /Type /Font /Subtype /Type1 /Encoding 174 0 R /FirstChar 45 /LastChar 122 /Widths 176 0 R /BaseFont /XUUEKM+NimbusMonL-Bold /FontDescriptor 120 0 R >> endobj 120 0 obj << /Ascent 624 /CapHeight 552 /Descent -126 /FontName /XUUEKM+NimbusMonL-Bold /ItalicAngle 0 /StemV 101 /XHeight 439 /FontBBox [-43 -278 681 871] /Flags 4 /CharSet (/hyphen/period/slash/a/b/c/d/e/f/g/h/i/k/l/m/n/o/q/r/s/t/u/v/w/x/y/z) /FontFile 121 0 R >> endobj 176 0 obj [600 600 600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 600 600 600 600 600 600 600 600 600 0 600 600 600 600 600 0 600 600 600 600 600 600 600 600 600 600 ] endobj 115 0 obj << /Length1 1612 /Length2 9732 /Length3 532 /Length 10587 /Filter /FlateDecode >> stream xÚíweP\]—.àîmÜÝ=Hpî Ý8tãî<¸[‚kî4h°w $0ä}gæ›úîÜ?3߯[÷Tª³×ZûYÏZÏÚ»êÐSk¼e—9Y€åœ 0vn.€š­£…TÕ ¢Â®¶v<ùÑèée\Á@˜­D‹ôÀ €,ØÀÃàF£È89{¹ÚZÛÀL:Zz̬¬lÿ°ü Xxý‡çy'ÔÖ`xþp;89;‚!°gˆÿñÆ·`0fXÙ:€2êŠjò&y5€<v:4Ü,l-*¶–`Ì °rr8ü½X:A@¶Jƒrw°ë_ bú33ÌÏ$€ 'ˆƒ¶BãTs‚=§0ýÏTæø×‰ü/ø_"ð¿DÞÿ¸ÿ¬Ñ9ÄÿÛóüÏÐrnj@Ççøû‚<ß0NÀŸ;Æèú„m¼þ› ÿ¨þ›äÿG|n†ÄúY.®¿¶P9[O0HÃfi°:ì<¼‚ç„BÜÜ~ÿM¶¿`¸ÿ±VÂ\m=FÏ%sqÿUø¿¿ÿX™ü̈¥èϬ¼…! çñúO÷¥›«ë³ªøç‚ÿcý× ƒÁž`K´oóN–¢¡véY°Zâ¼Á1Y£ÞnîƒaÎe ÚÅ…ÕN]é‘?„+ÌjÂ8'D[¼æœo)±lw90v½ŸûÑ2÷â®2´ ²nsš–afêÅúœÎª|i(À¥»½>¦©eZú€D1ÑÆëŠrzÃHë^H@wíŒåo™VOØŽÓ‡W[tpȼwsÍØ?248ÐuŽØ³EÆšJ/êþ“!&Ð%—LÒP§Â'Š)£ ƒì¼õô‘J¯ÓÇ4ŸžŽ”.ÚQåNú` Òªò‚˜Ñ*)–¬êªðy«RŸèìëDŒ˜Tò„ðtÞÓ²ý(±XùxHïÏ){ºÉ,äzÊÁ+„3¦^h¤O­c5Ë]VÞÌФf{Y½G3Ò=ûP”[%–Ìgg(½·ñ‚´² øáCN$$>µÿzVÏB¼­{Ú¾æP”gâZ›E¢Áqð)bŸp¿I Øx.Û7®2Òtf¨öE¶äPÓ«Íÿ$ƽ—Œ.ñ£'Ê5wŒ¾zUú%gc™N{³ÊŒöMÊpgI v‹ Ù\hÎ:ádŒHºZ,"‹™ìÑ£§ƒ¾ÝLÏ5^zÅ~÷~¸[? ÚÔL8ð„“…¸¼€ÎAÊQ¿x€³¡üâÓ>oÍ;‘ï©ãjJ\î‡F¿aMdGЉÇÅš†·Ýa£7@øÙ·FóÍи ÚßÚßb½ðÆ’µF‹kÏ|uá5×€îB¥ëfKM:„!wòµÆ¢(€6fªoþÏtp7´á°èç.eFr‹´Ð/ …dÿÔxòÅˆŽ‚6_÷3ÎÕ5n (…ü¥6ûÍãYØÚà«•ØÐ1=qj&ü×è"FÚõi3–_g|4“5Ë.ÑãTÛ?&³>9Ç}uùô(lý£Ê.)®'5è‰Í°Cxû×uŒ¼Ý]f.#|q†w¾[OR< ƒt¦)ëÔŸcåçûC+UB$ž¢ÑJd67êèþs÷÷v]Ö1£ìïOÙ9 wbk${Ò ¸x˜,Lˆ»Gµš‰ì;C©©…'Úœð9QܾOäM&èC“” n¡*(è¡89á2~¨Ž½zÇÁn´â~’K3ö¤É7åÃqÒ̯Z „§¸qÛ]myM>ÿÌ"-xÌa{4Z›lJ"Ik¥"éH´’{¥a-‰·“óaá ¾t]¬Í«óœÖ‰zgÁÕ¬k!»?3Äc_†$w6UɹÏf(ö¾Jf0wæÀ(H^#¿¦b|iÁRÜúžÏÇvOÖ @Ü‘ nù»l1ma(òM–pà êÁ£jF{ËÏÓÝ8„"O­Ok~äóW?r¥blC7ÔfÂlç4ÕÉìlße;‹,f"ÕxB)í×™ˆ 8À­à¡ Ã=HóÆ ´OžP4+‘¿,‡)ýË• ¥E–…Ü’2±0"[áºA©7KÀ.€x4áÃñí…ÌW 8È&w¿½bÅ…V¦–˜Ëæ|ÿ58)àïz=ŠÙϯª•—$Ÿ*)ß6tƒŒ-Êõ\‡ü,âJa@¬òÈ;Þç@‘G„­r™šŒúü¬ºÂ ihÜp8FAñ(ßÞËß=ñGÓW ˜–¿yÛÏ)ï´å7õ«/RM>³áÖ-»º‰ íàY³rÿ[meÊ%K‚ÙÔjR4ÅZdÆ4ëñ.†‹0à.øtùPOz2 ×D´ý‰>ŒuJp†›îmÉõÙ’¾­Eµa}Õç•Ú#¬zÇ€U ®¸ÉÝºÈ Ø!iËú ß·ÌzDÍN´–yüÂðþjSyj@‰ÂSôœ>~ú¾ùÛe´],ï¸ïòÊ·…Žj€–Vaþð×¹v§9<"S;*×鸃™ºª$G ¹Ðˆì­¹Þ 'ùzÜ€È^5†Ó’ø~mÅ·‹$¾8~»)Vp¾>Õ_¿^<å³KªØ¾WbøöZJ"’138/%6´ñ>1qfàvÞâÃÀZüTWäh´ËUuâPP¸ˆH¶ O¼,nž°ŸÉaUæ“×}´ ¢£Z‰¶eYõ`6ÔŠ~¶%#NkN Æ“D×=]ƒ¸|¬ÞÖ>­)ĺ>Gä‡Å<‚U#œ´µ8lÙê›Ý`f1v¦ydZö(x™ã“é’TȲôqU5&b²±\BíH­@ý«AJLQßÞ¶ºËÝ@¨´Ó[*%Él%¯ãߟDr/;ð¹c‰„-ÞŽÉ ã7méð¨:Þ˜6È:/ü »`/^¸(´“•}FÿÉz˜ŒöÄX ÃQÃÄÑÄa"$޷Ƨc:ÿ|®oÆþ±P¶óbGËî·>¯¨Å+d<öÅâC•,º¤ûí#ºcØf›‚›3Y¾¨ÏKVÅ¥‡9£ŽÎ#Z$³šÇ=‡˜2ŽÙ­~Üpe˜¸>A­O^_eï§&ÊË¢x¨å˜²/V±#0µœ:ÜÒ|<.qoËPøRº3Òï‰ëÄ# Óp’‚³Þ7Vê“tZ/†åÐPÃR›;Mv´ MZM¹,»Îëó”¶Ã]Hú9•úWzä|…®»Ö¦9JÍyïmâ/»O•¶z·¨”]RL$ád\«~(4RªêAÓ=~:ò¡2RýxÑ<ûKPK__»'6‚¨0v:*™” 0nH:Tc¤Ü3¬%Af(N¬ÐûËk†5à# ™ôÓ¦²pðú‡%ÝÆôtŽ9²·EŸÖ!cp¸±Édxˆ—Q”y{~ñòÔØšš«ùû–>‡€÷Þz\ÄÉåL©M©§¶×ÁÝ÷{þD"R;»­Dò›IñEL;,\]Ÿ0“Tû?[’$áÚãeP-Y’ÊÌ8?ULM͇&¹Çèì§2Gà =`õ£rצO9Ñyÿ"1µrP®h¤ôPBl)3.DÎ/²Rocâ:šÃ–j~3MŽ•±œ”a±£oĽ`8æP?“Œ×êUÈÏÔ{©sE­›sú*$iü±¼qŸqH°ßú*_oå@-Å܇4÷a¨AßîÔL0Hsñ½PwÎçƒVhmmò m¹‡H¿>ÀHa›£Åü´´À¼p"ÐÔú’¼ÑîSÈfdPºþˆÆ8U»$0dË5¸#nK¦d€N¿¼mõ{Lƒ§äÎÛ/ux}îufú¨§é6uÓœØ<Ãxü²p«ïû$»2÷€²JâŒZzãÒ™f˜ŸŽñ¡ å KðÍA¯QaC@}ái~o©ý¯®Â‡oŠ¡Í)‡×ãxzO!C?ߤ3Y(ý,Oó_‡-¿#ÿ\ëÓmí~q ”Q˜¯f Þa›–/ÊK…è5Î:&u–Ź›3I1'\ùócDfv`¿.Bõy³…£Ù6Ôóc;m\+y×äöú²#ô#˺U¨{”–‘÷®àjÐl²‰k„Ãúäº-)‚£ˆdÔK7¯ßLmw–Æ:F (˜Ñý:ìqíçû nfÏQÞ0þqšéˆ\£„ìŠÌ/u½ ‹€]ñå›ÖPÓǃ¨Áwü¨O© )" ƒ0ÐÎ× ILÚ¶ÝO±]97CPi/K˲Oõ) Ë-Ä9ÃÔ/o_Z-b!ß6{ å¹´ge”eiœTZKηÈh/•3ÿtxy;êáu….«·,M!íÏ4 ”¹M“š. r&âÒ¤?Ìo÷k冑Òèª[JPðÆÅ—“£qh¥"„°òdQ¶ë d"î‹Ç3°‹šˆ&W­4X5œAü³àÏ ¸ëe0®4ôjg¼ ç$IÇ×-E©ÄCQßš&>ýàŠðošGL”(ŠD·á&)*â73}s¯¡na§´aŒtµ¤I¿Xu,3é¡x?YÃ…i½ÿè-ž¬s:uüí—‘±Í›Ý¢XB÷‘“„GG†²wüºÊN9h¢ iÑ©XY”ä…£ò•f1Ž¥#’¢$é—Wœ–g¿¯Ýh7Ì0ÄJ?±n:$‘}‹gµ#ëC) =à®§¾¡8÷¥Òà6©8Xÿ‘a¤ÿMüð…Œñ'f礛Î4nòÊ3±6Í$ñöϳÄÍÜ :jÙY)¶5õÜ{³]£¡ÜžQ´Ÿe¶ÇGtcàÖ¥ÐJò¾ô®>Z×A]Žø:[kñ&+¢­RrûimV£TÌê_SBýpGÎ¾Ø Š¶w¯·›ì¾=ˆu’XÉ6T/.£œºŸÕ´Vs¬…\ÿ¬uËûaaõñii]˜?üt­qÒf?‹ë[Eâ´ðõ´ˆð W;=ŒæK9¶"ÏÖ+Áøöð¸OË)C€Í=¹6gªzE?Y?%ð÷H‚Àp\¬L*ÍuMÂÃÆ­Úž<'BI—JÿÆÄÀ¥cP=…Pšv%¡nä/îÚ‹êGÓˆçJ,,Þ[¨{¥w/Zí÷.Õ£À6á£Íûß?ã~qÖ,Íœ¶b #æeàgÇnÛ3/ÿ*•s27„‡–hÐ~°b¡Kµ„k†êtYà d×ÄD³•þˆÖ"ÌÊ.o4²QED‡Û>ËC3iß!ȶ]—gD÷¡Ì¹À_|z¡‰ŠÓ‡¹aÃ6öMe¯es'Ë—pd˜èsâÙ§Í«Î/ ôâš›ÜÌõ£ÜÚ/”[ôwL¶¨Æ£ÌÉ*0½C+e‹t„þ…á¼£•®ÓÊŠ—²ì˜Fû¼«'ŒæË°„„*-­¡SÂ]!ñ7£/­y¾¨‘gz¦N%µ8æGÞæ÷¨yy2®¾{{’æ¯P9)¸9Ík9Ƹ¦ÙÀê½|Ó;Þ" ØŽˆTE‹ë¿54Ò¸èÓ<íç¥7ÙbiÝ«E•ÙÔv—ãá¾Ì æ‹ ß™~?´ˆ¬-ì ´jbe?ê´w7o4â(/V¡×LjâY6”¥ÓAÜó8VuæCHA5 #‹¿ áÒ FlÎОNrL<} ¬M~©óêØ<%¡³-³êòîŠö§1•åoL'؃–‘ê˜]In.™^ͱʯŒíM3wëy@”\ÄL¢-HmÛûY¾Ó’^ò|þˆx×vôJ¡¢L™&^{Á -Dгde€>F éqdÛŸ–£$…e"²ñÔƒêIîÛ®ÉáJÁ{5Åè€}<ÏዃÓT—Ôå–‹zBxŒð·'ÁÔeœ;Öñ»E(Ò#Û’ž¨[œº›™E¬\˜»Ò&Q—0Íxm´ÈKãFã³ïH²õÛ¤]55¤ÃlîMä¿J"}Â}¢ß:ÐäNŒä¿?W -%n§F¢ÃÿDgc¿å¸[¾ôÁ,á8¡ñKq>J$Ò[oQnüÍ,¼L@ùÆKœÖWõu?"9ýêÑ„å ¿\–2VMÄã„÷¿á¿"GèÖ¾0ghéÅ2[à\Sƒ_̹môg3øÎ'$‚j¹±¤{’Àê<²f+ài@»(úȳ߳ù¤Ê°—|²ÜºÓks ¶q䂤‹y£¡†“ÒÌ’µþ:W-’[„‡;óˆY0FXÍg…]…šE¿x›R\’¥#ÜkÇ+…ÿ}!fܧbÐ&Ø…ñ«E®j+.» öʺVv^耠‡£Ð øeH?ˆÙMåaæ7CíÚÞ¼itûÔÏ€N00èÍ ”߯émë áÛÐG3\Öй[f› !½6Ûý;*-"Gõ¼©–ý‹uûY õÌùWÅÐÉh¡ðWPEb•l2¼ ²/]ãÞ©¯øP9Š·wj¬<ιȺ;9’”~{i/¡Iomé cä!bõZ CÅo- C1‰  ÔŠº/sT­#ÎG"ì¬ou®¶=‡2çA%®sÅàòü¯qvØt¾ÈØGMÚG{ö#[£ ÚL{BÇjÒÏBŽ®b=ÌIºëÓ[ÇŒ9mIäH\gî3¹É­êYk³–˜·Çhî¹KQ|Ë Õ&FǯX<tÉ€æ|ÛÍ}Š!tÇÔŸ«£óÛ‰†]øea¡,&æ9ˆð@‹vÒÌ•&Ns!g®–/uYa§VwOÊì#b+öµksmí‚•GA)>jœ:ýŸÄgtbˆöUçÛÌÀbü>>d–+éA+•ï}Žs‚Æ 1ü6nªª.ÀjgPÒa‚©m¯~z±ÐÕãkXÛµ@=y•3s”Š-ÅKqâ¦è®xþærï $™9Èz‚L’/#eå+ôÐÁ6\w¾–á‚Ü{)÷µxyýœœ¡ ΓÀ°j8ב¢¿ŒÊc¬Dò±I°$ÛjÄYÚð}ÀßP$é÷iu˜»þv·1]íb«h¦jP‹_ï4Qª‘Dƒ0½ds4rÔ,û“²5#œ!G:žÆcë¨á÷‘KÄZñpÚÀfs3Q"œ¾Í9•_pv‰‹^~ï+’Þ¹»žéºX‹Øñ~fëååÄj=&%‹îHÛLa/Ñ?û´ùÚçô®ÄdÍ#q\éTÓ“ Ÿopë)_Ûòõ™‚»¤4U€Â§ êïIORɽ‹ö×çO´ ”OTö‰Ûl;L_´õ U­õ«:—Ú}åß²*›Hh\çãFMD*ÊšŽÍ°_HžGd©Ç“(åùguÀ-«6ˆš7ÒØ'âRoG.„ÿ–Îð®üÑíÐ+½}oÇ~Lúb0Y™ Ù45qЧç ë|÷f¼Øˆ±Õ×¹ß fDbõ{öôWW04¨Å\ʸ5McÇŒì]Ÿg}kŒwùnKB}¼‹Oà&½‡ˆ&``“ä{.‹SÃ=&#KÅ͉x³ºÆúRï0NÛºO¥yêáS’:RÃù½RE 9… Ê=ï¥\J”C´ðgå±VM’uJg Vó•öIg>0—²ÍežHóœLûaƒ÷{Î1ÝKU©=¿¼——wž:¢*Þè;߃{JFÇÓâŽÄUÇW‰…RF›Ñ¡$þF-ÝšÆf¯å¶ÃkU¼7Îî²a}vKïä–d*³Õæ,HÕJExÈóvVšÝ~%ý² 0Q0èNTÐÊkÕ+J"ªU RÁw¶û]0rt,]DŽäwI¬ÏÄ‹Îyànd³kRøhrM!®ÛSou¯â'KZÊ®Hlû–rá´¡_è´®ùç/²)wBMj%zk›a9ït17É„1}2þV2{ñãižWµª­ßôIjË"zï'°ào@GjËçe;XÚ_„Êè)aD`@¨Üh~UÀ7¹“7§b^dˆDša pX~ß ‹¥)r7íÕÑ<Ê;1áNš$œ´£ÈØ11>_!ö˜lü†Ça©-’Ž,Î.ý6ݧ @—y½–=Úš®àé.äåÏ!ðË(í^!ÓÄoúǃHêBD'm-x«#3lNŽ¿8–óàœÈ.–:ž×f"¿¢L­‘,Í>ŽÎå¥>'¸PQ’òdûë4…Ù€½›P8ñâ]4<ÕòD ÑO8b ü¾`ú¡ÌèBòFD—X•l5eVÓ#õ§¬ýÓ¼%róß1ŽQ»Ðd—£ÄIÿ¼˜=¾% $”p’±ß€ö2ƒýÆ0;¦fÕžðÄaù,èftoÉúÇŽÙQ\]D@`ŽpŒ‘džß]Þôž7+ æðWÿsþ"Ãw8ë~vÈ,OXòÖc±ÄIjŒÄ³Ý2’øLÁÞÉuÑ.-Êze”9Ø€°sf®4 Ó$¦šÉƇ'¾¸ï<½¼{«ðD $¾Æ³Óïzk±bô‹b]›B0ä*WG…Œ¢×#_Ì×ôjí£Ç°‹ÝRltq VžÔîË_+:“R‹t½àêx­,‹Êl¶$A_Ž6Tµ©[˜êÞÞ©±<Ûö‚ílõcÀ‚ÌçúÒ…¬ä=â£É†Þð©Ñœ– í$’ßgù$Kg« ‚¨‡_â±S¹ëµŠßvZ%6gï¼w=Æé6“AaW×÷÷ˆõe©B™¯ Ý&*q9G=moSD n¼Àæ8h¸»k¶zŠÀäZG…lI°góžíÁü»ì°)YPšuÁåd+¾ÞâVJÏWiöûVo"ÝÝÛ•VØû/™<Ù4^YïÏ´>n •ñ1ä‹õi³´8\ï Æ-ˆü¸Pù«£zŸTZÈO–µQ„>Ï~Fa›øºüÚ˜Ò‰«P?×ävþn±Ï1sp”ƒóèFïÑﲆ€ÁÇhmL7C´Œ¯0Â)£¥¦{¡’6B„ µ˜,T®¿˜¥B›V`WH4†5"žQë˜Ì“Óô~ •ADÈ"§qzÝJüÊ8Œ«/ð¸@F¬h‰|`·)¡ÉœOq©á…ùÐÏ›víÆÞp'p"nyqä€Â‡JOö{^m{¹¬åuµo%,§«ÁÇø§S¬pö¤³Sº+(ûi¶î¿&gÌX-¢'`ôfµ¡ÜÑÜÜqÃ}­Æ$¢·]h±—Šqò{Y}õ¡Öוè[þ<­vŠt¶ilÁ”wf¬¯7áÍu ‹ôf¤ØdSAú·¯=¦¯ÙgKÈŒ!Í&émF‰?˜HÞ|bÌŸAøþ ¬µOK>`VÞYÊ•UÒH†mÕH™œ¼ÕJ§š›)À-G/7;îñ¸ … 4&™b4u¼kN܈mR›d“{]Lcùs8•k9eŠœ`J/½!]žì¦ÛýLY=‹{jÐ ‰ÙÓrú!Ï8·IjGŒºªfÚ*Ñ'¬"•~ß[ãëé̓xz‘œ»} –` !-–ÄòÛpä˜TßÈÙøÔÔ‰A×î½Ð²(và­ ›Õ¢©F q¤UóWbú•gŒ—³¹Ö†æÇgÙiHø¬”ÛnøN¿3 +:3ý ¼êU-¨ºíå¸Ãž¬fÐý Õ©WD.ÛO±Ù9¹>fxîfn-%ÌæÒÂïŽ>÷N#DZ(Sž˜1N»µÔQ ñÊsg¨Œ7O½<†}Rê8¼ú¿#ò÷Ÿp»Xótp ä~=‚>æ…kÕr4l;ðúÞ1vꜼêñ ~¿*"±‚öµ¢e1gÅVèF›ç¦ó<¦LÊÉ«’¿Èø,*"‘4#±lÔÍÀ|}¬Œ¢ì8|丿ÓrfGã•ðhñ6Ó ‚L³æéñµ¶Å«øx_NTgi)E”J»º¡ôAA{\›¾Ü.ÐO'ÝÌySa¦¡k‘]hï`'J¼ÔRÓ-Þ»«”åÂ9.æ¹€C±WÌŽN‘í*­"D}‹í×a™Réª:æÁŽØöŠ k€„GßÞÝë ¤X\wÔ>ü¸M Î@¿álrs)ÀœUs òÙœmn¢·KÛ§Õˆ_sï‘iûE.KÑQöÁyaI®ñv/ùÃhscá­û¯n#='úÖJ²×ñB—òÇÖ ž×þqí%ä°|ò˜NM6å„ L}{UHŒKŸYX¾aN6ëâܽjÆ/Q‰‡²Íüb ½]ýý6©%]ÿLe A[¯°û›<¿æþOCÎú"Ó€±i!¸XΣ,·Êÿu¸Rü4o{Nǃ’ÂlÉR0rpMdMÖ%ž8•s÷K_ñ†ZC dð;c>j«k¥–_rS!öý»æc•Ó6L)©±)ö/=è)ï%Ö!mY* YE Ùßù$VÓ:Ž²ÌœWBçš8¾¥Ä•EÚ;­«)™C…v¶ÓP1¿Œxx1¦,)¾ªø®;ο¥ŠúÂ1G¸Õ9µ u¹BÔ"¨“"ã…Æ«('ðC‘‘„>FVÀh1ìKG¼/5®7ö¶§À2ÕçS^¹ Lw ßýŒ«Ëùº‹{m‹ž_ZÞU>š“!o5*&Ž ·È Ú"°"Œ4YÑ5Wû9†éHDÖ’‡r-ëôA’§¸ß"‹àöFᓨ––aq Ó÷»’‘7‡`ËwsºÛ«z§š„žÎÉ+6¡†š¨?2°YÒ-…ܹP¿ºaOùE4ßìNŽ-†«_>×à쿤Î`XôRÚuÔ›š'']šSÆg=Ê':*›L}ž[¾ã$'iÝg«§àÞ#]²Ã~£d<­ëq•ÏýA›×Aõµ¾ÃŸÿy¢õ=‚ïfä ¼¤ðh_Idï¶*ï¥T1ù±‘ø„èG=„Æ’Å9Ì.Ù‘2£)4.«m£eípcô·Þ{&ôD7úOƶ£¹Å%8WHû"wå¨?ÙßMÎá<9{ŒG?Z³~« ³êwÕ¾¯uHqÁ4ÒããRwámµ y§„Ü•Ç1?ZŠÝqÕÔ`€!Ïüyð¦ÕÜK¹ìz{ ã¸ÐMÏÉ·YýF‰ÁÁ°´YtN¹™¾Ä"#4ç[™VO§.šµbr˜Å%úì ŠREKˆ3s•FŒ½)žG×Ã{g¹1»OWÿº b:Z+R¨Ñz=ìøŠKâ2N…:ÄR­3=Q@öO6SœÓ¿<…gö™ãì:hÿàÿ K0ÐæätµGû7Ìýt¢endstream endobj 116 0 obj << /Type /Font /Subtype /Type1 /Encoding 174 0 R /FirstChar 36 /LastChar 118 /Widths 177 0 R /BaseFont /CIAXCI+NimbusMonL-Regu /FontDescriptor 114 0 R >> endobj 114 0 obj << /Ascent 625 /CapHeight 557 /Descent -147 /FontName /CIAXCI+NimbusMonL-Regu /ItalicAngle 0 /StemV 41 /XHeight 426 /FontBBox [-12 -237 650 811] /Flags 4 /CharSet (/dollar/parenleft/parenright/hyphen/period/X/Y/underscore/a/b/c/d/e/i/l/m/n/o/p/q/r/s/t/u/v) /FontFile 115 0 R >> endobj 177 0 obj [600 0 0 0 600 600 0 0 0 600 600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 600 600 0 0 0 0 0 600 0 600 600 600 600 600 0 0 0 600 0 0 600 600 600 600 600 600 600 600 600 600 600 ] endobj 72 0 obj << /Length1 1647 /Length2 8079 /Length3 532 /Length 8948 /Filter /FlateDecode >> stream xÚíveT\ݲ-Np‡ÆÝ-Áƒ»k 4tº‘Æ]îÜ!¸»k!àî.Á!.ÉwÏ9w|ïÝ?÷ž_o¼c÷ØkͪYUkÖª±iÕµ8%­` 9ÎÉËÅ# P¿±pqÖ„½Q…‰(sj‚l\à@àÄ`d”vá`T‰ô@V%€À+""‚Á†9x8mláM=VvvŽíü6XxüyôtÛ@L/® Ìá  ¤ø;j@¸-` †€Òjê ªòyU€< rz,BÝŶ(ƒ-APg+Àæ€üµX Vàߥ9s=rI:€g%øÑ än rø q@NoÀÎÎï°3ÀÆ …?žC-!.V¿xÜ·†ýIÈÁ öhñæ{$S‡9Ã-ÀpÀcTu¹¿ò„Ûá¿c;ƒaÌúÑÒ féò»¤?Ø#Í# ‚¡Î8Èþ;–`vv€=c?’98ÿ¤áâ †Úü+€Èèd9;?ÒÕ ø/Õ ¼a¬þ™î ‚Xsaðò=Æ´„?ƶC1¸÷‹ÔàåùkßÊÅá˜+ÈéϱüîÖÇ$€V0(Ä`²ÆàV…ÁCXþg*sýûDþ7Hüoøß"ïÿNÜ¿kô_.ñÿö>ÿZÎQ¾yl€¿æ àqС€ÇYPü6 à÷À[þ®À7`ˆÇçüwk=Ð_Yÿ'çßá¿BHBmâääükì,vY©ƒá–¶k äñðþìë@­@N0ô(òŸó}tâáù¦m ¶´‡þVCð/µú{ ºý©€[ES[_Sý¿™¶ŒÕ»®íáüg$=˜Õ?¿©¤¤`î/N^!'Ÿ0Ïãe|¼Ž"|>ÿ—°ˆxÿµVÂÀî#.^Àãÿ?ž­LþF# µ„Yýî#-8jõØzÿÜø [º89=*þg¤Â«H²>Ëõtñ"¼u(ªÕÎÏõ¯€uú¥„®ˆ|4¿«|ËU÷EôW³ÇäžÃý†"ÛæP1„¹3 t”CéCÏÚ‹·ÈÔ*̾ÈmZ„º¯áuü]yù‰¡îæêg MÓÂ;Tª/­üNhÇW¬þô®¹þ„ —8¾–É5ÑDmÏêð«òöö™âw®.™û†ú; toP°gF£3¾p}‚Íîï˜I!a¨óÑ+Š@E¹þã—oi‚sÔ©Ý)E7͇,Ŧi+Oh—göòZ_()o˜â‘é½&IÑ©„¢#TÕ•{e]îo5'b\Ly–j×uc5€Ö °/PŸr­ø”β,7 èœÄž1 Zñ4ÃIlEO=‘È P/¨W€›ºØ çü¹Ž§ØØù~…çÕñ!¤Ÿ67HJÚ>Q\N½Þƒ}Ç4÷æýþ›0J!M^xÒjëO£ ˜·ª>¥(áÞÍM1ÄɹDC@wó.ˆ}±ùN<<çí¾ÁÏZu¥#úíý8‹jœ)Ísñ¯&!ßß¾ÛJùÙ?iq˜†~ ^JAÃÄP è‘`ÊÝ[€ë2:ÎׯªPùW3<È£>±ofC Xù˜pÒã!§ÿÜq©S p¼“7Ùn-~û½Åiå‚çPõjü’˜ ‚ïl(‹” 07†Ã0þõ[òŸ×øÄF‘7ø£äˆâÌ4˜6!Û eɧÇaã?b-ž!+[‹(f$SØþ¼Ãã]÷ëvßOî®É¾p.ŸîêLP±:«\k¿6Ê6îÅÉä{/í,Ö.ÈÞm„:dôS1)U*v §"ø'".ÃW|³¦î7æºT×­žE‹¿*±¨ßKIšg-I¦²Ä­ã"¹¨M|©íOc{ÒeÿÑs'z©Å IÀ5X„Ò=ÄŸS[³Ï›ÓŒŽs7û¨òˆl:éAØšú¤ââSßùÛ»ŠÕ°}ò ÿsRÇÅ|³cêŠÀþ÷¼¤)^û*™ÆÌƒ’Y[¦¯µêP„gèÖÕ~¬´³MP_>MÁ7ØÉzö*wmZî¹~©V€KZ_ÆùâR z®û/óvF´²ìs;†4”ÍÁN °ôhŸe-æf¯/ C”}3VR%? ùîʇÝÈ|A…äÈ>d„nú_¾qiÑé›yBœ!ó<»Æ»cn†;4&ãî–&ŠÆ‘q×¾Z\3ë\à:dmØó˜àHÞs?÷Aܸ€švoéK"„ºã„ü’¿8<ËøB*LïHDãÙ+àWj[¥ºÚ«·½üÉ`³|ç+_ð§Ò‰ ᔄ|›XlõVœäÏk|Ì“}üºQÕt¦þ$¹|øO,+¸àƒ=5gŽÕ:áû f·E‰šê'QÑÂ;ÏiYEw²PO÷ôÖ‹ mýÑÖ¾至GŸ+Ù¤ûƶ»ë¤}o²´Ä` û˜‚é}B`K­¨áŠ&ÅLÉî¹ân]}òªŽE¡•˜&B]pQê,E¿";ÃÛŠRФBÃÍrrH‡jK ^Ûl&’OÅ…üqâaÄÈ'úE1„¬„Xÿ½ŒHlü=ZªÅo>¦â ¬¶€…r\¼Ó<¨ê9ZйJú‰Ÿ רð¼ZIªZ°ïâ šp³¾:4þÑåÖÉiñ†aÒ]%b56Åcz°ÜŽº+W¸T×âé7å͆ŊAîx5`^sÚ¦»Ë½¤• [M:†Ë‘RÆXÊò4~~#C)Á] ;¸~R£‹18O$ˆWPÉ©ˆ·R«Þ*ņNuÆã=ÌÕFBaQh> ±¢˜–“袆öP"YÁ“û4D×^Ú+¸ûêžwdèˆévqÐŒúùÕæY^íÄ¥JDš;Ö¶1)éf¥d¸Ý"/eæJM`éÔ~Qæ[H©ŽlЧ3+?ɯ;8rûjAh¦ýŠÇÅ¢ôÙ²Ý÷¶׸¼¡̵•LyàÑ…;ÄUz¨c÷`" ŠÙ𲜣í$q€Q3dÈ­I½ÇʦLMv¨ùEû9©/"ëÝ¢ÑÍ‘õÉE9y_Hº3Evï͵î]‘3|‰MßaËïæ ôKæ–ƒÔrzOñÇ÷e_3AvO¥–{Î}ã Ø+­N CºËÆSXï<¬õG‚½¿ Û‰tž&Q v÷2Ñ"ñÝj|_1Áá‡aú‡ÔêOtŒr½Çã¬ÔlO߯ž‰I §Ö3H~)ä †“h)ª{ÕmTßðtÄw-p­KÀ"ÕDÏkgM-çÄ8&Ð1¾„´WöIS¸óš@펤,Ÿ \Ø*ã:[ÂBo­û2 cG^Ngý@Ú—)^ ™cκšTzu£¼úDÛæÎ$Owù4åd­3SndKAµC ‹Œ$ÿÚïê̲ʛÑH×¶­€ŒÞVèÈ“€ÒŒÿy@7sœ¼ ƒÂƒ´3”≃1Ù3¦’cû´ìñÝ£p‘ì)TLõ ¯F2º¶ø×ÇæÃH„-§•À¤ç%âlH Ž O#fJD†Í«$üfQRzÃ)¹°ÒÒ/ŽÑQ±yz¥ öì‰ß×ööNMÓ(啺 ÑÐ; %#oe\Ï´T¼b"õxÆ^†&àZżXÍeÂú°g§²åk\õ®“,þc]„Š“ÙH°æ¼žÖj]ýëìÃì²C !ëܼˆbHûä*éäp ÔÏE&ž‚JƒÙ¦#}‡Ž4ÉØ»ö²ü»q¼•ùºöÆH 97”êæüÞ£"7ì#.t. f¼=ÖÉE‡D4ã\S5ã /˜R´[%˜i8gìÊ¡íì]ø´WÛŒ"6øX´£ü±W˜_G}!aX›ñÏØz’»‡ l†’K:5—ådy~™ÒUu=£Uø1’ï×29ÞÓ—6‰ë¡£Ûbèï¹ÄAû,}xmV6}ÚD¦OTüÕ;½uˆ5â˜D6Ÿzd>ç\µ§òÔ¼Øaý’–QÂ}äs-⇮ʪi#ÔCŠ ™&ùD+mYï¸3øüÚP.o9­‰PsÁ÷gª§ùŠé 8oø²”é0éùËÒ½ÒbðñW{X>>5õôÏ ‰(±UÞÍÄœ&fê0î¥%G©Þ½·—Ö”Ùý<ñøÆÜOQW{rPõÇiB› ±gJ®½½íÏéÞ#òÄ<˜7îm%¿ÓRʺÙIÒ¹óÜo;GènmdBáôšjšˆ<ÌÀ“íÀiµò_xç!©C‰½UêÍÉ$»îªØÄ—×ûý‹˜Á(ï¿; ÒöçÊØYÜT´ši×'æ 3 õt™çq±×Iñ÷{„‹Õm0¤Ò|ËhWZËgdÊ4î¦}I'”5¾›0Å/e„$’_ÓŸåÿü)™è 9Ÿ‡ÕSŠÆ™Õ³¶… FÈæ †XÚTФ‰Ÿ÷Lv#ö’´¦V¬ê£Ë˯b#8HO?§Ð´]¦üdµÇÞtëÛÀQj{š‡|¸@K›%Â9¿gNõfa»ØÊ@ 0Äi÷ª¯Ä°Ð~÷½ÍÛ[“*…hü–¤Ñ'ÉtËÁÖ²XºÛ/©~;IîNÈUž–J¥œãmB4_è’Æ%J ï 9s*Ñ—£m)ÝSlŠºóKB™:tw¾‡Y|»¶w1 ŠKLOA¥tºM°ëBÉU4C™ÔüJÎlÛ7¹1œ®‡)š`]ÿ¢Mr(&I ¥.^#H&.nj[cq¨)®@æã–•.=3áÔøn1ïË|MãÞ­bq_[Ä“M)>Æ…îÚÓ3ˆw²ÃÞU/ ýê*>f Ù‚\M¸},(ÝÓ)õ@xÿ={»m棈ӗ‹6uÎæðô€kÞÎs÷÷˜‘;B7Uõ…Û)‚ªþãg›MKû;_ítŒ¬8m!U'‹bùdmœ"sµTm®cÈ"ØT…î¶_ü£{|ieb uî hë(á_3©ûN”%÷9çÕ³ýß^‘äpFHPÝcÆ”K‡Ñ]ÀOÜV0§€Ðì|bŠž1–™æú›•þLãÚx£¯?C^úâHî]âÅ^—1íY¬¿A&ѱJ5c{*§3Ý+‹‹&bï'}Ò/â™RÖã&§’ÖI ±¶XÍâÐ{`¥Í›Ÿ–—žÝÒ¨r~‡¡€YjÄØ1F6c5iá³3KVÛòùH³>½´_LÚ?x·çÙã#ŒVŽ}jýŒÂ§è¤€ÝÌ+û×àÀ${l™:>C†¨ÿÐm‡ï=ÅQø¤Ð5›­%…’$ý²¡™)•oq­GóÂ.…áGg V®ˆ<ÑÈ…Õ\\ê©Ñ%ë‡Fb™®)‹`3ó€zü³`nŽx IUäÞ#¯»‰™â2=HŽ’GUˆMgMG8žæ‹kI†þÅ2<Ûcëyò–çXÅ~:Ž0go:QÍBÝêŸðù—^Z>9 DŒ¡€ô¯4ÖÓpq1ʆ¯KŠr"$‚­:N¯Öß`S4ÏpB" É;ëõ-Q‚¹ZmòwãiXRh„å(¾™O|Ë“Ï/¨ÕÊ4,t.ê˜Z¸¤ÓGA>VÏÉ«$ª_”¼3)¢h[{Ÿ›86©ïæ°yUÏsD/›7M‚"…µÇ`ì{z/z1øj¼ì•â1ÞB@o‡jlÒlÜLíZV9‹ÓèLʤêñ©ô§û_Z›Fq) b‡¢æÃ‚õm/nBNñ;ïôpŠâ¥ L7JÈþñ-ü!(¥CoP7¸e d38·ƒØnñ0,°³ì)A´ Ø ‰ï’çªÌOaoÿW+™µ(ÖxŨmþÙ&ÜÙz­Ô°iB W~çãÃgÐ5ñ€øÒ3Áé–ùÙ©AÓZ8sú©±Ç˜ÛJoéFàX›Hs}Ô)u³Ê 4–B)Ù~þÌKœHR…ñpbŘþÊÛnLSrâx”'£ªXzý¼¤¸tÆ¿x’ØfS‚ø1En5»Ù~ßË;ÔmÞÔÐAŠv“…ʳ«¨JÃ¥‰§.Ô·‚1±Öä+9·Ã°2BG}Ív‡ôJbž?Nå¤È/G† Éß³kè«I3q2G[c“Žt¬¢¬hq¡…‚~º!]¤1=ßL>m5–ÔUÐ2¦ã.&ÒõÂÆýÚÚŠúõ|¾|D7ÔIwMmúµ6㤬î[œ=&ÁJOßĺ“ùNÊÒs”H>±\P“X™`CÜ=PePÀo\*Š—oö4—OZANy΋.\‹JÑ`±Ä?IŽìH>ê¬c äoN+›ÕpMÀÖãX+0€“u'!hÕ°+±Ì‚(­¤Oý€a Õ”:܋ظ; óåh‡¨@{4ŸF¿Ae| ¢\Ùp˜دùQ³Ý°–GÀš+yÏ`â„“+Óm›—¢=RŽ«Ç§1ëÒ. Ûæ‘ŒòÆ_Z5lð–w¦ Nc2TudåC=(ç5i£<×µÐòß«bóiä$ù%6ùß8Ex'á…u!± –@Žt¨’."6•pGMˆO@~ÀÝg‡hM×I-^ëQâ`àËã}ZëÀ£9l?¢äÖtwT>º=¼ãÅEððN”ÙswZoIÞ@3¦wF¿MZ|ݯeÄÞa£×\†ž-sà¤Ü²Ó/Ê![,/¾îFÿnbTe=YhTÑ]¿¹þ.­V­a :“̸;bå!ô $þepj½õržy/h6ˆ·ú\PþyxF¾è@¼ÂS×É=’—© 5+å®Ò’ÇÔ VÛC§Iœ?Ã]êE#D;÷¼¨LÉ'ž8>›_%½‰ýÖÎ[ÕX‰‚ªy½NtˆmXMSCÆ«ÝÊŸºÁg/1» ™»‡éÉT̶ؽZºåÕ°š¶þv?¹( õ /bHɱÀ»!ZKò+ávŒæ¥îËå­s£IŸjð½ íЊÌ;“mž¨÷¬Ç*b}™uÆxžbõ“ªÖèvo›K±Þô ÷L ܦ,›Ról£ôEHB Y‡ÀJÀM½¤_Ø ÁíÂ(ÃñZ¢™n4Œ9ÞÚŸ_ÁѶŒW7Ó~N9þ ÚùñæSÄCI~VåZŠÈs€çYÑÀ·Ÿ_C,}-x°¦uðð2XôÃWÛsZ9­y¾eéEC«fW·/eöQcoWlšî¿5€Ë¯»;=q@X¥Û¿êð€L¤T¯%>¯»1áœØ \ µZn÷HFí[6®“*°A/d~¡Ü›¯,}Äeû$ý¤wþ+,ïäÒ»"ú½çcï;GîÌ–ÓåÈLØ9Ç¡®ÂÏö.üÛ³ñ^zá+6µ^Û…3îÞeøSŠê,¦Ol%…ï&ºf³u]hïœWÆÃL¨ÊÞ:½2:¼Èt-©ÅÁ½ÇIÏ×#3lÏu¸‰ß„Ýësz+I…'¶EÀÂm±›üôüã‚LŽÏôtÈ2 ÎçO%%lÖ}ÌÓ›÷#];*㯒8[FÆmŠÜ¸MÅé%ÌuŒ×ÒZt¯ØÙæR?mžL„ŠL‰ä0N-J ¾ê¤D IŒA ¿SÌ~N±CP§ ¢(W¢´s!1׎‡xt±4sbþ¨bqÝdl¯&•ÅÍJ'¨d"ô„%XÚŠŒ=sa1'×ï§Vù±F|@ÿv‰ým¤¼f÷áAž¡¸uU„{ÆD½E„"#¹T AËw4ìì*–d„TA^4¹{1I¯”2R¯ù§ÙVB/TºÚ¿Kî™Öçü|+y›FÂå-’ (_M¢6.÷†ŒMÀËB•¹±øyÉÜV¸ÞKíy'ŸÆKÓüñ·ÚÊiV-k"sáûävI»Fî/Èf¥ÂW$œC’I,ÍÞ¡Ÿ—-ô û•õ‚ÌÔŽo$Z× ã\Ö«QX{¤f‹Ùˆ”˜ß|˜D(r—ûnnåGk„»P2Z/2ÓÛñ³Lÿ€rsÅé%€¿’«ÄRa{Íá=i7¶8¬<×Ìôây´WV'ñ`d³û§ÔÆQ÷³%j-ªD½4ÏØ|_Ú·íì²¶>ìn0†•7lç8ȼg‘8k™4GêIJ”PÖØ¼>ñ«oÀñ7¼† wÔ1Cœæv5mÓã‹= ómœÇ–ò‘¼èäÛ/H2B™?ÉYÝÀ§¿¶šçD‘†´|] Cª¥¢êKÏ8­òê°Y;Rà¿ûxayP_™Pá5šX»•ãÞqQ¯Â¹ &hø $uÎÖ5ï–Ó@Öï«^ßi9š{aJ¹—÷Cy›Ðòá>„ÿE4²/lìK¿;9˜áÙpÁxÃ’qÓ†|ƒ\ËÖ%Ki›A´ˆ”dµ0õ£u üžÒÓ+_âµsîŒ'‘ï¼-6ÆÍ´ƒùø>ü´‹˜ÆWÆKFݹ|ŠwФ«`ø¬£P=æG¢î¦…àQŠŠËTW(ÿK£–= ëèÈ0 ¡…V-Mܲ©Ýc¬w½gŽd†®ñGOH•äÄü -ëkˆrö–»O²È®û³¶¼pšd×Öĉý«\Ò‰Š3 vbsº^Qž¤ÂüÈù[’–N ¢Ñ½»ÅJÚÀfîló›O…¿HW®ðÇ4il¥ —\¶˜) Ügó¯/J×­½“1Õĉ¦7™î™¦BüÌèAНÏt‹s¨|Šl™¯Ëí'üNºQœ‚öiãC‹MF&6jë»¶¢ÍûçpÕôÙ¢D7}\½Ô!Æv¥äwòâ€ËëO E6Æš¢ÒóÛñNi×<ÜMõ wœ´¼ù/—ŒªÙ÷qnfè Üj‰ª€Ç‘ÂV%é}Ì •Dàd笈y×S®·J¨§VÒ$–ÅZX΂Ý̦¬ÀeŠTóÔ].÷`@uj‰P›aòÖ·åá«òAŠ-7­ºž¡«Áƒ<Áùt­Ïn ~+ÙV3ô!D|®O5ÞÔòž]Yr=1ÛbQ A][Û…ª/š º¼W;LEôž7s+þ’ø·Ê{ ÑlŠ4Õ‰"7ˆú•¹*2$¬;“œn¸n¼Œ ªi§=n{r¦„ã«b=]¬û‰FO>Ç+ÆEn^«$ù˯v~„ï«ævVÌÅ„Éd›9~Ö–áÐÜYÑý²24n÷Ê^ÅbN_ÀDüz⬞ã|ý»3 i(î1õêèWgÃZRÌ&äJQEéî勷ÞP‚ ø•¾‹ú Ú@fœùfnðº?4ª¿ëõGàܬ<ŒªÈŽ—ç;²0¾7«µý”Ç/NÉÕšŸØMó& È5u™!™‘ 7„zOÜ«j†W)?„;ùkZù°èvÐ1sUÄÔ§¼xîÏ¥¿Óæâ&èVºíìGìoC-’ƒˆø¹WäF¼É}Í4‹ßNM:û)ÀßÕãfz°×$¯‘ãP°äµ?ñBÐÓÜcÍ­E Uͯ(F»Ûm3Þ-û+:m_ ÇŒ×ã¢-Üu9O̵ؽ}Ÿþhƒ3F¤ ŸÉµ'Xri¸<µ=Ö Öz rAõ¦+,ž'åWúk‘+p!޶¿2•Á(gr¯(F1ç{Éwd1u„¦îK¤Xƒ1m¬ÿ¹.|4%8Ó¶[ªìÙ$r‡ëêÅVÌ Jðfv ¼Ì½Ñ1±’C¯µNz¸‚´ —Š ),®y“ñ ¹ï’7f# ~àŽ5™×JƒlR›DÄ„fÄréAÞ…tq*ëLöfW:Wÿ~t%m;)žÏT”tFQe¯98ª²$‡”]¡¥qréÖÉtü&MSZˆÙçH)ˆ~{OƒØ~ .@+x÷WÛlŠq¸‘bÈ)!Bº;>¯øÃ¨^a*aùË-±úd¸fݨtqòVH2çFÁ ”$’É<¿¦,J·•ã‡.7R#§½+ à}ÌØD_u¾¶¤Î㑽6 hæö3èÑÌAÔ–G˜ zY}ñj¯ ójôŠž·-Ôf\=ñôŠVà+® ±t~Ê“ö9Pï”`˜°j7*JÛ“]»âôøv%Ý©¦•‘P´ˆú!çÜmÇIúæšÃöMÔ¹¶‚ÁØIBœËæ—1âBϹNÉ#¡}ŸE/D@€Ǿ¾pºú‡mÌ…}ƒWħê¶,—Í÷#}ï²Ì[a~6Õ¹ŸKÏVÍÕ; ×+é¦ï†tÂá=€ ¶Å7^[Q–wQ®î$ƒÞûg6p.+G²'ÅpyÂÁT—‡v$ßÚ®í­Ìs¦¢o­øÔh8 ± %~j†aïÝz}(itÜý5ÁU‘B…tÆÁ‹²äèŽÌxJäÔ„ã_2n–]©ä¾Jxl^W©…½ŽÇåõ´ûð¶{'A- ݈NSþ6‘þŽêfåµßt˧6Gõ¡[ j‡a[ŠÅeô–M’Ó\w,èJÞ–½q®õç81]L´ìS„5 ð"½läÜ ±-ôƒBg…€ÂBxЈÁ²-ëŒÎeèúv©„ѧ G‰ŽBJ j!õ‹á»RÁÝI—›þ(¡xÕŠgžiá˜í²–õ„˜D“•UÂ’ ç ’dC‘Ý[§K^´…G2ºê¢·¢ÅémH³mÑ¹ÚŸŽ´û} /&ÖÑ{§±ì¥ÄéÑQJüH·Ò<ÜajöM‡&¶Ð@0ošO™à‰¨8MŸ(’¯© ðx(ùZéÈ“¤#-ÒÕëz;«èf¨–…ÿòºds:Ü1u¶aU­°áÆzHOß­$ßlJ¼­~|\·kã¢Éþ=ÁÝìú Ðÿ¢VMÖ÷çñaè AøÚ½I©#.dg‹ú—ݾç5ùIhÆÞïy­'`ê I²žÿ|¹<…MòÂí’\4>z’+Ü™¶UU¡dKII7Ç,§³¸¯v2¦„ãˆyÖ²{Þù‰Ç½kÖB3. ïõ.Yýä®Ñ&›,'R´ÚÔROvSË€wÝ$N®˜jœÆ‡óQmÌ(ã¹¹µä‰v{ ¶Y•|V8”–N7”1\^©Z&˜wcxµÊQ®Íó¿üaü‚ÿ',!  öèdñ¨9XÇendstream endobj 73 0 obj << /Type /Font /Subtype /Type1 /Encoding 174 0 R /FirstChar 46 /LastChar 118 /Widths 178 0 R /BaseFont /MRTXRP+NimbusRomNo9L-ReguItal /FontDescriptor 71 0 R >> endobj 71 0 obj << /Ascent 669 /CapHeight 669 /Descent -193 /FontName /MRTXRP+NimbusRomNo9L-ReguItal /ItalicAngle -15.5 /StemV 78 /XHeight 441 /FontBBox [-169 -270 1010 924] /Flags 4 /CharSet (/period/one/two/three/four/C/I/a/e/h/i/l/m/n/o/p/r/s/t/u/v) /FontFile 72 0 R >> endobj 178 0 obj [250 0 0 500 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 667 0 0 0 0 0 333 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 500 0 0 0 444 0 0 500 278 0 0 278 722 500 500 500 0 389 389 278 500 444 ] endobj 58 0 obj << /Length1 1626 /Length2 9445 /Length3 532 /Length 10305 /Filter /FlateDecode >> stream xÚíwePܶ%ÜÝw'¸»»{ 4Ò@Ó¸{Ü .Á= Á]‚'8 $¸ ù¾wß}uçÍŸy÷×ÔtUWõÙ²öÚ{ísªš‘V[SÆÎͤèqòrñˆ4Á®6^žºn®šn"êœ ;0àÙþ‘Q ÂÀny $ 0ÙäA¶>>¯ˆˆ:#@ÎÍÝ vp„X tXÙÙ9þiù°ñû‡ç9Óì0=ÿ𹸹»‚ °gˆÿëD=sìÁ. €œ–¶‰Š¦€EIÓ ‚€ @€¶— Ø ¶Aÿ¥{ »»‹ß_ÙnEý'0ÌäbÏ…ÎË÷\Óö\Û Açþ³+*{7/Ïßv;/÷ø¼AпÄòggXŸIíÜ .~;=:·¦ì¹$€åÿNe®ŸÈÿ‰ÿ-ÿ[äýŸ‰û¯ý—Kü?½Ïÿ ­èå⢠t}^€¿ßÀó#„žß€:àÏCãåú¿¥]Á.~ÿ§¤6ýÍVÖÍÅî_}*0àóHd ϲðpñüm{*‚}AvÚ`˜­#Àèò<¯¿ì;Ô =ëú×Hœ¼<<ÿâÓwÛ:Cþðòob÷¯ôŸ¥ú‹<·ªšºŽ©&ûó¸þ¨ý¼0}?÷gnÿÑŠ†›ÝþÀÈʺù8y…œü¼Ïw OÐSò/ Þž5€0(Ø`öÜ7ï_ÝÿÇ÷Ÿ'‹Q€ØºÙýY=b÷¼iÿiøã¶õ‚BŸþëò?wýó_;ù‚lÑ—æÝlÅ"2²3au$ùcòf½Ý¼ˆQîeúÅ…¡5n]!¯ÖEª¬ïk£¸š&DÛýæöݶUÙv†º‰]˜»Ò@Çï)ƒèY{ ñ¾3u±ï„s[–aeÅüúª¾†d*Èc¸³1¦£kYzÿ‚j¢ƒŠúëŠ5”Þ»0”áÒ;Ø6½!¨· ¿®hÿ€)y÷ê’¹oxp ¿ë¹g›‚=/QÌ ‹)6Ô#BÊÔ * ž$†¯›ÀʇŽh?¸uß[f–a£# ø³n׫f Ž ­V5:zP²R~g¤ÉÁ]/4àCzƒjü6³ƒõï êA|q¹N··“YÜ*NIÐ0©&àC Š-³‚à ½ _œßh­“eêøãDˆ²©Iqš‹Éw6è)™Òjƒxº]Üœ]Þ‰pÓÄsÇLêð­ \Ò‹Tù±IÓC|õËþ,  걬{ÔêïôžÆ “±”fÓDqkœvà¥O×t›Ãs Jqf+p"6~m6í©ž±‘ì^f Ʊē-ÚxxZ|‡ôR/x\îHµÊA€oU&…!ê•»Ãõ¾ñá)fèmJÄ›R5cFVßA̼îÔúÝ®oMŸs’“#·X(ÆœIQK[¨û¶Z>Ö#?•9íeQ4ZO—ôjât ¸㕌¿`)êƒÈüÊû¾ú¤”³pã²ÓK#•ÆI¤óƒã–å"sz)<_I·Š,³w±oz[Èÿ6£­·‘w÷ýÊ'8†ç6¨D1náx×Yš˜ÓGD R¸ ¬² ~Í.AcQN£ôqÈÏHeWå0Y.'î0M…²Œƒvœl8gö+Êà´î0cŶÑ{V‚»Ê]_•¢·¼ Ÿ;jw9eR%šÚ›"§4\þIª ›=w}‹gJNt ÔÄ"é:ZH5^Õ­×Ï”o¸h{Òü°¦)M“{¾ˆmˆ9½\–Y:Î.¦¨ÜÛm²,ðfu®f£¼]”ÃÐ)=,$\žúŒâˆÀ(c:Â=äòÀ7jƒÛ.e=êÏÆj²<’爼Nr¹^7²ÅDzñcQQ×@qC—±é; pÝ £õ€–ñ¢àÜi§Þ`mÌÒc´¿¥MLbÿ„˜@‹GvÈò^cðÛÆ÷§& ª ·a¨ŒL¨ÅxÓÐ’£E%´¨1³W.=ÁA´zÑÁj‡âmJX¥ÅâtéGy=:¼ ‹.L-sC %+,I…‡Îõ(ا¼i½™”ƒ&~ÀçXÊ‹šò¦ÎRég¶´¯'H©PŒå© »ôQ¤.6Úhiô®;UTô†Z)~ç=­_í2¥G¡Ý!ÑÆp(¨„¦˜§$!!ZXS~HÐl8u‹e™)E0ùŽLÁè>–Øãxô\ï>£e™»«‰{kš}©^„!¥XlJùº%LÀòw´’5M«Èé0%ld5÷­sÌúþ؇/ºy¾É50Xå2Ì’óž@:A>}½{•MpÀRoMƒÀØ#6Ù¦ßù¶F4ΆËû/}Vê¨EJsÂl¨½‡µe›vc3»p7 pg_Dw¢Y÷Ÿ#š:Ë%}p{/÷n~*Y¾PGS†Ï=닸v?LurÇVÄ$LšýÂX@nu›Ùä1kµEÿ”çǶ9òÓlmæøDmZ“15eJ›ï#êF³·¢å«ªÑd¨D}Œ—€íëO|¦œXlM‹pžu\<5ŽŒp[Ë¥ìRî}‰çˆg]'£‚ü슯$hUÆ;rë­xÃi©Þš1Wm…E”¶=½ÎkΨº´à ©¸=[Œ™YäÒ”Q§%ú¥Ïçãºóóö:ŒÙ†@#!á¬ÇMü:P*¹{`aá{z\Äu•¬öÒ1‚—‰ Î[ÃtÆO×|Q_oOùô=9޼ï’zg¾˜Gò«Ë@ðhÇœA-¡âìð{[zL QÕÓMr²oÑÜÉu¢ Ã2¼^ ôƒ:b5ŽÍÀè®…öŒ7"/YI6ã¢ÚœT$(ÃøÎñZÑ7°ñwm'‘´„õÙ?ó ¦Õ© ”½Ì(ÐB"áAÇ׉Â7I;GX öíwr?=ØêÚ áD§Ë|ÐÅíOÆ›I9NÚµ$™‹•®pOX\ïzÖâ#ôÖù?Ž”&&súÊ=dŽ*+$|Âä?B´€ðê§Šg( JTçÍE°?†v%é0€yQ_å] }Ó¯ëÂo´ßÁÿIMæd5<É“=3 -Bm£¡ÁZ>ŒÎE9/ï?ö^{ÊŒñcNî7n“À·jXš‹Üà¼è¯ˆ<º§âl}¦”ë«vEø°…sÙr²Ûî(Ø“ý5"³ýkåOakïj奊&q~øT±¿Rí uÈ4‡~èŃKØÜVh"Ö%ìÀ¯qP®ÅºËSµúzCu´£5×|´UÝ4ñð䑟W¾ðs÷QÇâ4·EãQ«\Z°ÌäO '?uLOVPaÓyÏÕ ýÔ4˸fÕpÍ©ËH½ó‘h°"×ú„8ѼFäk]qwÕÌÈë+„3o&"Á8d½¤ÝiMû~‚¶ßú–øC¹<|Rj›[­yôTÔO,¶æ†Qÿn¨#’Gªÿ:È Tûý)œ! ŠáçêdîÌbhªk5£Ü;ûó_àÞ‰ì ¹}ö|Ü8KÔ<}ÃÉb Øhß$ŸG.rÔTÍ>„¸º²Ç…1bó‡òübfÙc wó”éo>Þ^›Áï[˼vL‹žÃAG2nÅè‡yo$Œr}„n–Æ¢b“ãŠ"ól&TÂ4}ù+©³ãç¨+v ÍpT&èšw9òÚš ›%‚\‹¼~ùÃæÎkÆ‚ay¬n奞$_Ç2 Ø{So—‡aS7š:u2Ô„p©¿8ñèè‰*ö4ßòFPì€_&äN0fvfûµk•Û ¬"réÑ ¹¼R —ó:^ö0ʇjˆîÄ/¥È³¾ UàtèkdŠzÍjàqcRPF+ü*C÷Ã6}È4ÕÆÚàžÃåêÔç¾L2’Dh©"Ïo Bc¸è•* AÉÐIhp|mÌ8'šè‘*ºÎIî”ÀhÏJçM®&v„’ãÛ´K_ÆcƳT ’\K°Ôn9¨µh®ÁÓÕÒ¨øØ•ó©5šL÷5 *‹ ±àÖ3ÿv9õTÞ¸m¢Ük®Vòd=9ä,³cš,^IL¹9Z½Fr Lò>&R«œoü-©ÕÛ J.€œ¢ðîÁëbŠ5m–‹8ÏeBø•bi Gîj¤™qÐÈ”œ(³ï0d ­Ì ˆNŸñ}mblf_½{øaW˜â…ÛSáhŒÅ òÍñŒšrå(¿Saü–­†©)ú`éÏç¸Å©[»¸ãÎÌÃ?Ë=):ÀqR2 çv§×g ¯E™maá^Àtÿiz^Sv>WÄr)Š˜ÇDEO9ˆÄútgíà)ÅüÆaᔸ’Շ﫮nœÐ%'8†ùgçf´P:=éW€)÷›~ös ¬Æ†”>‹/I‚Ü|±±íàÖr}§åó®BB$è½Å¼?%„“”¥«›²~ñd¢Z{¢$¸s(j¾Ã˜ƒÛ;èð »beIcï+BI¬HàZ¼T~¤‹Ú" u– NÈ™ ]¨¶/\ Ê©ýˆlSå ˜á=‘IJO𠢤&Õ±2ÿÒÁZÅ)˜ÇÂDwëâ}"¯³ÁÂÆÀ·›ð[Ïg©¿G§SÅ ~s‰¢0¤6«µ½ØÛ›r®Ä=4¦Ñ„òÖ:}†7”§?½.ª2=4ÕÏ+q÷Ô»@ ÇàõÏtôýˆìÙybX1+ú«®H¢^Tøë%>"Ág”§×«È uO·CIç{¡NDºX’¢ŒÐc!G²77»QpGr•Wê,ÔêK¸LÕÌÒÝl[gù‡zŸ0>„DCPG£}šQñqæP¶¸yóZ¹¯çj(9LGÛ迃Ë3ƒYÉÛÏ ¹3¿gë÷/š,‹¢ 7'âÓÖ㱯y|·u׺MâZ¬ìY®æ_ æˆ÷͹llKãæòAÅã 9W–Ü“Vg½ÎaQÌçbÞÁBÓEg€饠’Ipû®ÀM>t¯~~÷¢X9hñ¥:ËZªÌç|µK~´ë÷½‰XɃN<õÌ.®¸UíìS]Ûe“U£o'fHò1Ù‘%»ñÆGîÅPÎfۉͣìé§ÖuqQl“¬‹ê”ÒŸí±faGÇW µ¾4 AJüíPg-bC¬ø+{~#y49¤ªfZå_ ÔLýüv}âî8ò•ݯÌvƒÚY6>\-)?¿Ým¾K¤A@ÍëyøJF¦óåX±^<ÕÎ.²E~ª×ÀÎz­q¿èûÉi’Îj½Øçõ£u® u9&îÀèîœ ”A‚¢±ï>œŸ‹¦Ûi#ñzHãóЦeá"·N~êp¢¢Éeø¬¢Øª ³†#ÜKU1çA|ÓÔòª‚wé>¸û¢ vAÏ­ì7ˆ} ¾¥ºÞ<û³°UŠêQó\Dwpo~ú‹‡ù±GMyP)…pæ"=žnÜÚDԃüBZýF-i,(è~Éäe»C÷íG‰7Ë·%uƒ…O¿hŸÓ@€e‚¢ö^ #’*ñöPß·›/D£ñ/_L™è¯6x ËB×’˜«¥“ßÒ«5¬&••í¾ÉÖÇ–UêÆÖÝôU|·‡p\"òns¹ÜY ).¼³Ù€Q¦4…¦Ì$Ó7lVÚ·æw¨w‡{(rº“| ¨ÆŽó‰‡ëE t4Ú"‡JbYôÚm‚.7m´1ÐÄ÷¥‡—éò,´Äê=ˆU#?VöE“v!}ñ:†1ÌúÞ÷|Æy9ô£N)6£ÑÃÈÁ4uRwi±ƒ3§øÝt„z%À¤zùÔâÅv‚¦»‚?ÒçÅVI üˆUSßRí[ׯ¹^’·Te ÐÛšX”;ÄúÅÄe!ù›§~ "±{ËÆÕ¦ùÉAV˜4V(žÐD"à»ZäÛY½·–׳ƒf‰ö5^<ÅT".dRÆÎr/¹ý*“z=¶B™X•Îw–Þ´bÐNŸT¾èûÞ^ØÇ à [æK9L!ÙÎ6}JG^)Ê<Äã¦Á1·ê)¾’ %É«÷cL¥_VjPFÎzÁ=¹9r¼kp»vŒLË*X°ÛóZ1‚¶Ÿn""í(QúÅŸ`$·4Â=5"Š bEà$Z†ÈK»‚E¢Á-ýV±ÐíÊ—¯ PÜÛ<+Å‚c0ÓÍR…kôË“¬êÖŠovd+òòØÅXŒ‰Ióñz0Ïwä1„ÖŽïô^Œ:“!b8©O+JƈÖÊÎö[½¨¦ï›-±ŒZÝkŽÏÜÜpŽøï<"ìƒpø)NÒ„cX -l?éÜWa0J¾†°¨ö*è‡*¡“œUúQ˜0?䣡†è²¬ ~ëþ<”Ÿ‹5gž;6Æ;R(ŠÜÕ”T ª×øÊ¦ïʼn€·‘Ö7*eÖÂÓ†³»®´Ñ.”¥©cldÂDŠx¤•|-{ÞÊ*^áÁ[øÖëÔb%„; Ýš¸rw§Ž×¸7‘RǨŸ¦ƒ”¤ª«AÓ9™§ìÿpdå ¼‹í7-q+•ϯ"ªd{µ+C¸4«×Áù\³¤÷kë_Zâý Iõ§9ŽÓ\[’NË*ª-ëO`÷ëOðæ,}¿*ñ5ÐdŒÕ¡˜„ :4uý„Ýüí‚›†” á­ð­Ä\»÷…_*âæñÏé"wæÄŸî–âª^ó>ÜåwV¹È§£t¢žÎ×"ÿ\èIg¬¡$JþÆÿø =^'æÕìáßÓ¡z´èÿkúF/ìfÌœBî ~E-žìC¯…êË¥$[¤Eõ˜~Ôe…´†ÊckFI§ø G¼žyäÛXzP9KaIAGÞ’úÑÁkêcF‚¿g¤°›ux¯ ×)¾ƒÃžV_c²ù/×6\|cSÝ›tIÿAœo6er4¸khÅ:DÉ‚kˆˆçÇJ#ºÕ®e!?kå}U­wød“ý¯Æ&48ñ:žÍY¶ÖuŒ©yGÊ@‚(ÅWí‘ÄEW‡˜ù½/1%ÏÒȞίá>b‰u¾ZÊ-ñ!öÉ×§êà)õÈüèä{ů¡FQUÎþ°>ÉÕÅöD³^’LÌÃÜmì2Þó8ñ1_ú.2ɾ5èè¤ý^3y+N²>c¢Ö¾ÒX*ÆPIÔð•¸+¼ ë#™†¾«ÿo­Z/‰k»×”H~ãΰ”:"‚¯„7 5WÄýEïD>®OÙïóö_ªZ§êÌ.dÇå&9pºãÃá§ÚÍS¸Î±L­‘œZ]%L4Œ]u]ô° l­kQ“M–Œ-íD0W >X!Äúæ¢}´%]ûšZTd~ñBË-‡²žì&±_ _E®B5È^0Øiš]é‹×úýsÃyšZæ&lµO ?† 2|e€Q–âl¤8cü2 ±>qóœáиNiÎ]2É{VIRmÛþBXªO/WÜþ%6BP×6(÷ȉ·ðŒ½LŸCÚ‡†ðÂÌk^yÉúGKR$b,D¢Ø|ao k‘mLž¥Œœˆ‘Vm'¡k­t4ìãîÌ æ.0À±IV/²Ñ2õŽkzU@êx}qïѤÅ\íÀ]‹MŒwòû‰õ«Ä–,|¼Ãe=ñát.º£“–Æâ÷¦ÈKÆÏÍÁ,ÒðšIì¡M‰“Žß–’3zÀ¯æXkµ¦ùë©*´Ïk‚^P~,G~G¥YßÊ6t- .© ¥µùqž+ãÌg„­/.´Æ ß‚·ÄªZ¯°íñæIK”H¥tàavâŠ]í>½+ŠèÒ˜ jåþ·—8†’³Ê§QAºŸ{•"„kÐõB„m‹Ç¹ý@¶z2ÜÀÔˆÏ%”‡ÏÇÆgö‹¸þÆlôJògªÿ{á³sð•‡]J—`ÉÚWƒú§Gt'~O—’‚²2múOÙSÃr4?: ¬Ï*n˜J¢,äáïhlÆ]r*ö´ vEQsâ}[" [¨ÀŸt‘\í¿#’Ç[Çâ ¾šÙµnÿÔ9‡u¼°[A&*’M>Ÿez\ÙJØ\Ƀ§M zÐdÝ Œ’CÝ_"HY99ay’ÆèZ°T‹Öþ¤›JhHsÚ“›H¸Ï%?HÿxaQ(ÆÝTîØd úmþZ)UÙÛ9ªÑ_q§ ‰ÅZ'¯yàN뫈c@ X¾ËÔÔœ§âg^”N–œ[IjòÍ/Ì("Æ6Mý7¬ÊÌ‚Ù/²p:j ­”=Ï=ó…püÊF˜L|eûÇôð"×韷ÓD¸=]¼‹¨¾F{P-©Ë×ݵ[{o —´ã½Ž7¿¼”p‰ÕŒ¼o»åápœpÔM,Y_cºxëƒÏÚ[Tœ¤ Ï¤-ƒîî;xÒ]šš¶H‚bGŠ'ŸŠÔ^ûºZbˆ•sO¡ -4ØÁëÇ÷Šm—îÝ×͘§r≶q#/)î@´—v÷§Kö­ÛàÁ©• à•{ ¢—d;Ýé=: ªgcm-\­«`P“ö•­ÍC%ëF‘œ[Îçí M¸õè–V6U¯fjÍì{§¥¬93æöíxÅ1]¶7:©ƒ‹]#Š£Bb¡¸YŸurnÄuI>1*ùLü:kŠ;{:H™qÕŸáè–݈ììU1T ¹lˆÆxEœe(ÂG7RÑÔé¸pñäÜ Åxÿ¹ºÝãªN¼Oª3N ŽÂÉÍeWgѶu@üQø~óºZà•‚ñB®ß @‹àÖE…£¯üNï´{Í—ðc柜E9ëû3Þ£òaŸ·AIŸÒU½E‹;_Ñ]T]—Öï:öYk¨A• Xœ‰˜)/ZI¹È]æ¿f•U¿Ú ô6ŸÝcË‘a ¨çŽ®l™.È l+[(<èJÀ94S,õ’ûÂUîtx^y1™ÒEªH·Ítòý¦Ã›!¼_n+*pBȤ‘ô>ºœa˜uýÒ!j›ç¬fdþ LÖ©Ã{ŒmãÁÛniqÜVü…‘±_ÛGwÃTäÈ~²?žûÚô‘y; %«m`6úƒF3% µß+¬Ó¡Ø²ƒÛŸ/œðVŽËñ…F_SÔ„îo.:j¹ækšE|5‰„+"˜ÄláM:ÿ²ò«dNiã´¨3>ýn$ƒù鉌Cäþ¶›—A{ né’2ׯ©L„&¦g^½yþǸ+*~©æúœÉ'Z"énÖ)‰W^ æzj]åus3,6÷•À< hãjל; ZgM€Ï¥Î‚Ø€*y AÁh$~>wÚ;›×y3˜ï^nò!r¤«O$ÅÕöÄãH<𣇅õx„¤U*Õ(ŸÇcz|eàÍϲru •Kxxû;F›ã8œû‚ -e8²œ†™oI°kK³±^œ¤lxŽèlºps™¿ÀË o‘3][Kß(÷…ʘÛçUuk©™+0¬K'Ü|)ÐòËÆßJVBèœNüoOTt}£N-Ù^X¸FÛ Èž¼ˆ}ûVk{_iÒÔS° Jö½daiÑHù!–“ÕJ‰]@ؘ…˜]ÖÞÆ<ÿŽ”R™Å|ɽ²óFyh5ž¿"F‹Ä üªÀϳ‹Ï¥EpàMwH¼ó„ÚâðÅÍýÕââ#“˜æ@÷]ƒv ÞÔ"»‘‹èݨvñ×`]†m§”ÃeaùŠs]ZùoÜðl¥ì¥dH¹j?¯Å—ºO¨Ðm Šg¨•ùNdŠÊ*@‡ì{ƒ­°]‚Ls>½²9‚}<], ªÄïo1ìßïUn_3 Œ0¡ZÆÐªQâ‘-¾9tL¿òÔIZšÝg;œÐÔ¸HýB°Ì¾ûÍ´aV†43q9tº ^÷žÿî«9 -ñÔ±©`Vs|€YLñ Úå–øXCпÿ Dk³Ýv÷%Ú/ˆ ýA!¯¼.†›#qåë´Ó4ú/ ùdÄ)ªi¸ÍˇºÞIrçØÆú8JµÃ«¨£1 NÔ{«‘ÒºÉ ·%†°/æ='oN?”ótç g£dÞoŸE8É“´_: ®ÞËݳR…ÄÌö¤š7È·:¥óùww7©Û`t¨2|§HÌ,T—£¦/ØL+g\õ«Î¡RÄ£<øíµ3F½€Î¶ðy¼Yû }¨'%°«€ê.¦%‘¿àgDùŠÁ)ÙpÕX>¶&áì, ×0Åìd@p†'å!?p¦4ñàýtZRãå̵IÃZ >+)ÍãðoÈh(ú†2f|E êMþë ž™™„@ûhX²úÙ ¥å/ªö¦Ï´Uβ¯§M„êáχ~dyðzkѤAºÌ‚lv’1¢àêð5"±FîçpöYþÚꊼ»ÇaˆþÒJ›OÎ ×|#˜#3ƒ¢G_ ÕI—mŠsÄ&”€öˆÁ`ÀrUÿ}âÔBª|Å=\cÔHј6¯ÊŽŽZRvå“ñ>ÎMSƒ‡<Ü«kTõ½DÐ3TjËiâƒêÖÉiLê©·–Ú ßÐå¶KT5omVh½·,zĪ—”„eÇÞ¤¼ê<ŠE™_À}aî_ß>¦c{í×±ÙÌ4´p*¾‰¼­FŽÄ‰ÚànS5EÉ3e€fÙ³ÖHªLV`Ãî@ê þMTþ_ÇXSö´Bƒ†i‡jü*ÀrT¿!°;AÉonÎbÅMp)Xð!A©ï¹–ù~öÆqo÷êr 1R˜ïé0„ÌîÂï4x˜L^³K¤ŸMðœF`}êDq(à—=®›lm˜r6qdd5zQš=Õ¦8Ù)$ßC§V’y¾R=P{½O©ºK±ÌHe2fEÛ:eÖq”ýÆqϘDو¤šéÿâ:†W®³ÐŽoŽœ>‡¿v%(F½šÎv|oZÖDÿ¤póˡ˫團 IA$ÓBµVx½M‡O cvy¬²#ÿ”Õ °0Uo ¬%|÷g'¯9ć 7D6|Ús ©•똣…‚['Þ}¥BVßܲ€~ÿåœNçÊ&Ãv<(•Uài€e)GéŽ i£¿­¤Ñe{ø#æ•Øí Y;¿˜lêüBΊsI… …¹ö™L>÷%Gû@”¬y9¡ÆÙðÃåÙ÷Ú{ž‘CËÉßWZ TnT—oqÖzÜ¿ÁçŸOõŠFA “èÓ‹Dj1²8[ÃöaLà› }£#âNõó$F6 “„ÿŠÿØ>ýÍCKTk;ä !b`0Á9Ä+U\£™Ê,÷!iÊúXÖvÞm¬7…y¾Í®uÐÜ6®¼™¤šymgY¸8ÜúPÇ1«ãœá®¡±ÛïšdL×&÷Œ=üXPŸR­’ÞG<×ó õóBü”È ZmÜGkÝžAë Xûµ‚WñÛå°H\ÔoK»¼FÞv ka-X‡9ž,7‘»Ç©Âê1çc¿(eE¯¥_¿ÈuN·±a¢ádí¹3JÙÁï²f}1laª”…þõÒÃÚ„¥ ø]zøQ»/);')ß·šA>Vb•©à¡u8 :ãôÅS©@òº£©ý±Í+8—5[dlnßÕ8ÉVLo¾uwj8.žÿáýÿü?`ëBan®@¨3úÿ³ªêendstream endobj 59 0 obj << /Type /Font /Subtype /Type1 /Encoding 174 0 R /FirstChar 2 /LastChar 118 /Widths 179 0 R /BaseFont /JKLQZN+NimbusRomNo9L-Medi /FontDescriptor 57 0 R >> endobj 57 0 obj << /Ascent 690 /CapHeight 690 /Descent -209 /FontName /JKLQZN+NimbusRomNo9L-Medi /ItalicAngle 0 /StemV 140 /XHeight 461 /FontBBox [-168 -341 1000 960] /Flags 4 /CharSet (/fi/hyphen/period/slash/one/two/three/four/D/I/P/a/c/d/e/f/g/h/i/l/n/o/p/r/s/t/u/v) /FontFile 58 0 R >> endobj 179 0 obj [556 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 333 250 278 0 500 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 722 0 0 0 0 389 0 0 0 0 0 0 611 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 500 0 444 556 444 333 500 556 278 0 0 278 0 556 500 556 0 444 389 333 556 500 ] endobj 49 0 obj << /Length1 1630 /Length2 16026 /Length3 532 /Length 16900 /Filter /FlateDecode >> stream xÚ¬ºctem·&Ûvvl£’TlÛ¶mÛ¶m[ÛvEÛIÅøò¼oŸ>=Î×ý§ûüØc¬{⚸æ=×ú±Éˆä•èŒí MDílé˜è¹²6†.NŠv6²vœÒtŠ&f.€o9 ™£‰³…­°³ @ÍÄ lb`f0qrr„ìì=-ÌÌ”*ŠjT44´ÿ)ùÇ`èñšoO' 3[ù÷ƒ«‰µ½‰­ó7Äÿµ£’‰ ÀÙÜ`jam’“×PŠÉªÄLlM ¬ò.†ÖFi #['*€©#Àú߀‘­±Å?¥9Ñc 8 Nö&Fßn&îF&öÿ¨hö&Ž6NNßÏ '€™£­ówœí¶FÖ.Æÿ$ð-7µûWBöŽvß6ߺo0y;'g'#G {gÀwTyaÑçélnàüOl'‹o5ÀÎôÛÒØÎÈ埒þ¥û†ùÖ:XØ:œMÜÿ‰eh0¶p²·6ðøŽý fïhñ¯4\œ,lÍþ3Z€£‰™£±µ‰“Ó7Ì7ö?ÝùÏ:ÿKõööÖÿò¶û—ÕÿÌÁÂÙÉÄÚ”†‰ù;¦‘ówl3 [†fEÂÖÔÀÄøo¹±‹ýè\MÿÕ Êf†ê; c;[k€±‰) ƒ¬ówHåÿËôÿ}$ÿ7PüßBð ½ÿoäþWŽþ—KüÿzŸÿ+´¨‹µµ¬Í÷ü{Ǿ—Œ-à{Ϥÿ,kÇÿŸ…µÇÿÉë¿Z«™ü;Ýÿ˜„³Áw[l;©a¤gü·ÐÂIÔÂÝÄXÞÂÙÈ`j`ýݳÉUlM­-lM¾¹ýW[tLŒŒÿE§lnadeû lÿV™Øÿ× ¾éúWþ Br bR4ÿ›û/CùïApVö°ÿÎíT#cgü?ÿÀ Ú¹¼è˜Ø9tÌLß÷ï;!NfVŸÿMÈ1ýçYÆÀÙÑ õ]7#Ó¿ªÿ¿ÿ<éü[#;ãFGÉÙÀÖø{Úþ§àµ‘‹£ã7ÉÿZßUÿÇù_sobânbó{ÅÎèg°ezV†s=fÞÈ”°Ö@èHˆ}Y“rq¡­]¯_zøg•þ{]}ó ×ç/å3ûIêñ> kŠÞT“«<ªþBä-òÎ4‡ ºeðçjÑ^×KÒÀ4ÙUw§uKß!ðg:Y¡®Ÿ¨üI\ ýÑHí|ÒãлšPê‹ÎÎÉ“Nž)†ÆGG†{oÁûpirã É~º‚Á“Gù;äâòiªTyÅ¢SóÆ $JÜ h<J)‘šï[˜…ŠºãÔ·=(| Mgþé?eX¸0ß´ÅVd”D /1¨‰¡§ º~.±Ÿd…qÖJ´OëKSX«ŸHÙ´9l&u¡ Ò'ðÍsúc á|£¹Æ…aSÑqÇpÖ-En’Šh×ÒÅœ‹Â8€r¸’}Ë‚\à‰ìì¹g„d±vªGÖ¨%5RWÿÓ£ê—κB”@q²:2>5KŸ¡ï‹(<³Ü'q’žœMyTTBmJ“,$ëEl5ŸIk-//i¨ïéB¼ù3ãƒìUóJϕ̋jÏ\›_p<²qã›Ë8Ç%Œ. &¼‹£±**ûív™1¸õçž]œ`¦p™ÉkŒ¯owix®ÍÞ÷šÈ7¹ì%‰î’bí¤úéÚænÂqÔëq·y,RÓfæ¨÷ö‰X¥ÌØ…;)ù…§¾…Ba­Ù*ûi.p÷ä¶…Z^âÕ±”™ÚÕ¦q™²J§©Î5‚ôñ¯¬û㻸÷hÔ—Õ‚/Ͻ§j!N3[¼, h–B0ñVÜðz&°A=h3-•ìbFZ ‚x§ì¾$’^9—>‚z©²}äöÖ…ì¼QŠÄ’ã嵨—¸œŽT¸T%iÎlåPݪPÄ•Ñ!)Þjtçe]{g±Ä¯·Í£7!“î.*“NúÜõß;ç7­€ Íßikƒ~" ™ªËŸpªŠD ýÕtöç{ ‡µ?´äâ—6\ö Ρô—îATÒD@Ùïìt¢y«%±þ«¶]rêØÅQ4:~îR) Ÿ_BÕýÕ<¨¯*7ï Ò®_gz½´×Ofn©‹,›2J8–©s:Ñ{X æ?û„Áªh² ¤»~äý.¬Õë)¾T½‘°£'š ½Ê¥Y0Õà´àj3 R Ëœ`Þmq[h΂(oA¯yšë ÜD!ÀKZy[| žvT+c‘ÖzÒùˆ— qбl2I³vRýn;KGPlaåmÝÜ2è@«Yìâ%ÛH@‘†™%>á~»‘‚ßgÊ ˆwY n¹BÎb’?Â1. œS‘Ø ÿëx›ÔÐO#Ê6Фîl/º­®'Dæ`"µô":²¾1*aáUE§Á»/ ó‰‚qž¬jJ𲿖cS€v£³Ý{u45h%n|Fgíš÷¨7F”x˽n•Ääùù¥ëÅç _'sûT¨±ã"áõ•ª¯‰V´ó–oËE]ûþAi¤ÇÒ}^ß‹@$B†’¥PØç7)l"ÇÉN"ž} Mä¸å¡)ç ¤ªâ‚êÏ€+9ÕaÅBJ^ :0î×FŠvæ×תÞcžbýõVðú¶Ù¤C¦¿Š'ûAìJ‚¦ï b1Ðú{4}5çè2“hdC)*ÔÃÚçämÚ¡å³·ë¹Äbv¿ß¨)‘ˆ Ãd%ENè-ÓbÚ<]W8=‚`-¯\ÞŽ<<¢æ#ÏA‡Ÿ®WˆªqÑM*ë‚`«ÃK×/=^œZþ:X^ÐÈ.¾µø‡ vzXˆH™A½Üã럨PŽt†Ûs?D=Qø:]›îÓ[y×…õ\ób…9HÎv¯k€ì•Ïaò¼á@6òÝf6'ÆÔ;¡üË[úÏðøc¡t±£ÂKÛj——Ÿè1Ÿ7ÛrtÐ$çžLǘŒ+D\ìÛCèzCå„×6Kt$;׊Ã>À=X¼ÛÕkëÓQ <¡ ‚f¤9Ãß6jÐBDd>\)^{Êź>`ú;®ŸŽ¾WÌý•‹:™hsu¤øñÎcR}Œõ;¿M[©bÞ–3pM)"ýõAg(³HEùQæòó%v=2õ”ðÍÁìfWH ê4¡9†TÌÊ^Ðr¢~•DÌ_M4þïõþꔺ¨@÷_¥š±ÎÑ!Å=üÁ?}wádz:0̼¬0"ÛFªiV°â^!Õ5Ùéˆ#wV]}`ÊÐRjLÚT70’?zKŒ4sÍAñsX,Úkvbc@0HŒ…AÂCÃÀi°`7°ï/ô7»¹üÛ2è8Ñ«~ç †Ì9»-»ùµ±FŽMÙåˆ3´u'pHÈíœÜa#-Ðv=‚jÈ›³{^ZÆ€ Ê÷åUÞæ ûc'˜ÂÓ­´†ªj5£²Â!ÃûE@3òõ?Ý\øÔªáëWGйZS×;özw²ÄÝ{™n¬‚™: þÉ q6œ}#ÔGIð ¿þA’¹{°°‹ñKÛ-Ń`¼ŽffË'Îܬã9ü©¾²mȶ5`”[¾#S„N ˜!¬ƒS¹1|Å…“26—lާTädŽ×hÛÁ ’Éi ð!ÛIÕ˜¯Q$mË­ ÷½mG4®By.ËЇÙî}÷ÄU=‡.-&±¹[brU[|ZWTþ¸È§:–޹ÙÒ…ˆ“(ã#.ÒÔžYÝj Å"i¡3›;UX€¿-óÛ.À`÷y‡ÆÔE:¾¨ÜîŽÍ&8- î*¤÷îlRY­þãшá˜Ûº¶@¢–=f2*÷qBWp*ÒLŒOó¢N=Ü ¢8)ÛõÌóIá–å—>:«1̇<Ý=òþãá°rIÂÀ¼]*\¤¾ÜË¡q¨L=¼¬ÖyO ÆŠ±÷‹Ñ(Ra4JÖÇcJìQó[ÈCúkÆ:ñâÄi]ò!дយ„ý+ΉjœP%¢ƒ  Æ_[ký6V¯Ç–Ò<”,M’àȨ(—E›äˆ/ÄøjãŽp!å¼Ì,fZ‡R wm\ÈB?“ ÷pâ ÛÆ¥è•ºá¯'^ºÁ”” 1°wÕ°"Q ñ¹Àm,vY&™Âôèêì 2k®ebÝ;UÊh¤¿Rç®°äC.kÖv6Õû‰×á¹a!0´qzRïVâpÓ‡}›m²“^? MÃ*Þ`ïÒ&~\C<ñ«_ÿÊ‹ ?€K¥"ˆO ±ÔbÌ 3Ãô¨(q‡(È=tÿQØßM×f qBª°EâÏÈ¡üކJ^rf-ÚRöÆ-~$Èbµ9%úWÔÄè ”‡ÖeDìK¼)+h´êà:÷¢%²À6$%»Áüô›Pé !7º]èéï^»B•XúøÞ¾}¡N á 0Ô +Éuꯜ–ùQMCìùzC»VÅ™×ìʬÊ XRè÷bTÍ (§•÷]yȾ4ªÒü°ÁÏØèÝ]Ò‹¨óé«$X@—c;'„âqb1|×U(Š ŽÍÆsv/aóÌÁùœŠ¯ÁÐ4©aP3,šN n¥ Ôb<¯eEíøõõiµyXJftÈöYþthþìPõyöʼ’™í¿ S€Û9 —AˆŠçŒLÔB6uEûM¥cëð¦߯çˆ=‰„•?Y´Ÿ)xl[úšæ*Rwàl¥qÀÑäb EáÊù•¸®y5ð¸<”œH5U½,/†ØýõƒÐ Ÿz}”·¾.[Å€"¬ŒØ© +rÁŽvôf¡ÅÑß¹î÷&ï WõT6O³`먽Öx"É—â/¼rèÁ]”ß:»4·â:ä‡à_6ïfï ”ÓCͽ)]ö*ÆËÃè“\<8^Ñ”ž¬ô“=Á\•É­É èø2^U/mÊÐ5SŒŠš€ò~œ¨îîgnY¶IIX#”™Þо™ùlfÈOÐ êàN±üb³3müsºôã¯æ W3A"S+# YÄÈ#~BY6hTYasŠC|¥Oµ¥¦t=¸kÄ1Ýîê²""<Ê‚ iÄIV‘áaѯGvÜï ¯Êöïý0»µí'ˆ[Ëö`žlcWž !åO)}Ѐ¿ûœ§aÈ—­Ó#vž@¼M‚9J#Aø,fc,Årc½¨EèœåÍ`ìÖ¯Êg{_93Áœô*'m™<“§çàÂA•Ö¾%uv@™øûÃÀËíNͦÍc]Þëµr”:ã^aÔq«¬…Æ“µRy€ A“’l$ð}d±`'xXùƒéÍ¡x€w?Qm»­ŒãT’v ý†´AUt‹a»„¤Â\_rìË~™UÆ{q‘uõÁ}´.tT‰º9»urÎ3µCI W¸šwõ0°z룬»Hù¬HæŒsØ"çŽLE³\‹,§’Þ9Âd&G…|‚s8çŠq"Ü‘¤‚ÙÉ)FNDh¢õiDÊ×gBðþÉÙ‘$eLÏ[ãH?í/õ9‡9J‹IÍ ™eCŒL£š;Èåý˜¸J;Æg\Ç.Žd/¯ËŽB$,î§¢èa¿J„}¼°ÜaöG?ríÊ)VaBnEĺB±Ë76+Ín¿ßëÛùg˃=Ç`¢ìO‹spë¤F5Æopn=ä9û}C¶aÙìhü# Ùë±C (0.ÏoGõ+2І,ÆGwxâD–W‹(ÐÝžs Þ:ho2JçFV;ˆ•¥‚ðe›duù’K¤’fÔ·«*º¾föÆ·ýT„°îð?>IƧ‘N.K†,eÈüIQãH h²€mdŒ7/˜õ.ãÁúáx|j†êØ¢×X NªD¾öY•¾l÷È({lŸ½½Ê¾Z<ȵ²p½³øZ²Ïõ¸Òœƒ>‡V…¦ôD¬²N£âýä´3áH¬õÅ$°\tw¼çrM’ÇÈ ‹³Vr}ÍØ ºí+¨´ø…¥gà Â:ÊyÝa[ðkS’µ°…•ôÇ @ãÀEe2¢’`Æ%ƒ˜¹Æ„ ÁºÒvå´[yÒ¿Äáèƒ9e}wÍí 󯌭Íju'¯Aß{ÞÐã;qŽyæàŒ—ºz¯,5~5­Ô„O´9-®ÿè‹7+ÕÒ>$pÂ^ ð$*!µó¶\vç„=÷vIJ•ú)"źJTYéƒög¯Ìò!õ•²ht±Í‘wëÚ01&8¬ j­+§ŽªàÓÇj:äIÂXuÈ~ØÐyΩR=Ì÷¡vRËþ ;lÅ)ȈÖc›CÇPadqÅoÎS‹nòΧùØ“™8в6OÌLŒV©öGôô… ׌zE®gEýÆžÙà!ÑÍrús1»ÍãÎ’U±±ÒUj€à,+õæÛÔ¤š…OÀ‹:ïbs1jH ;,÷»ÉÚmÑ÷%s§î½è³¼å(Ó)ÃÝpA½‘]¨í·)hÿ‘s€åÝKƒ TèN‰}]QwÕñ”$ËNÃÙ_= Wk`âä•M­CN"9Å|á¼Az¯…G¿È¤ÛõÃ\ ‰;%Xé óxʦŒ/Z¬ùù&+![L;³—âCo0èðưóŽòµ:ЧD?2¿ŽÊýBâ¦èÏ4Œ «ÀýP¼“¯$UXPü­$Ê܇î€{yõ„Ía‚ÿ™¾m´8Q²sÛ,;¾œßä7(‚ïÍ×’ú›Lút¾p8Ò¹-7Áã™›Unk/ìñí6£9—é¢'Š•{0ÓOµÁ±ÒÎ(Ñ™N*â„cø9_æXÈh#[Íð;ªMÚÿC+‹áCk~ê&pã~K\–uGЉè6ñt±âZVmðhà b궈Ŕ‘©âUÏô yâûfo`B›†M,kµ+s“¥“!N³ÆÉš#çØñÚ(e6^×Û¼¦¤l;y­EÝñZÌ“†W¥œn¹†s)w)-âMî“ò‘Ý"ã S{?a£VÌ€£¡tµ¥ðRê­ï‚ý|<àÐð˜ÒàöãÍêœL3¹ƒ·ŒOö)„²„€þBÎðÈœ˜¤,àÅ7“FëÄC˶eÝj_-±âýá·°­E|Þ£2pnGKuæPÀ2¡oò¦«Ði¦ÈD‰“èH 4Ž˜€íÁÔ&ØVzÚɲ®뢴´.+s9wC_G‚5C~©»+Ý;RÓ 4?‚æˆÌiC٠䜽åd\ D¡XÔÖ¹·¼—§]¹Ø^{²4Šàã;‰›&E»BªhXÖ“™]kÞ=;’ÝVã+º}ED$ÛNõ&÷$Õ‚)|Äu93sŠ,|>öoQ°IÑüÂW{¤[©I“ùúíMTÂ:F·Ónì,`¤Ã+°®l¦ÚŽ˜5¦eyi¦5XšõŽ¿Ïc)F7Íè¬gßP³Q<Û’KÈ+ߺ,,0`‡Ù&øÀq Õ ðT\eT^1}G˜Ý[>/]òùãÀF‘(}¹•òQ]5ÿP‡Ï_ŸAË×-eêF’X¯"‹’Ypy™˜aêsú'A»66X>‚; ÂG¯î_ð®Ay% ÑêñfxÜà¤ONãp’;‹`¯'h¸zž ý±ÜÆ>—4N댔Í.ÐØ­Ã^Ú>Nk3à$¦oÆ*³Z„^vlˆ›‹è,OcùÛ[_±t‡N×냅k#Ʋ8…i\ÄF–D£ž3VP4±ƒká@è Ý?¤ÆÕHXJXE“q¢žÐsE^&‹Ðu7OS.î̳Nç]:¢þ¶ë€î/×Ö{qI.¶,­TÄê§]ÊdæÈ*§!á½\2)`T¡´& ¤$ô¨yÆ<€{YT›æ": ’Hþ„!yæ%›Šï\Ov,$Nï sL'ÁÔ\”W."u™ã ©Ã¬k¹G#ób‘2ŽE4É"]{õ—QÄ9“PÅWL¯¾@å; »÷ÂaYŒéè¶l¶£¬s/ÊÀoè-0“ƒƒBŠ[èiÃ9Òbzˆb“³tËbé1Rƒxâ«„€òô¼üQpÑ=|0ZôXÁ™çm+)V,›h16±ßùn¢Æ „šZ^)!&—ò¤‹òzߣM¯‚¼"7^쓞JÇÜÏëõÐ2#*\vXÆs¨É•;O6 “‘å-™eAIÉÍDp«ÓÇï;3àù¡Z§¢¦¯¡ãå2‡`q#k®æºü¹‡'¹-Ø;g©ÛˆåW#ºœJ…;»¥A€–P~L[Ék9;#7eC^˜·ÓQÍé«9pƒ^…Dµ‹ÝüØruÛÂzö=j‘3S/Èo«¼DÆùëbG½8ðµðHñÇJ”ìÑù ìŒÌ}Lé'²Kó¨rzÎâûQpUò•¶nÇ8š¡Ñ¢á]çhñ; £WÞØÄ^ëGOª ZHLŒÛŽšŒÆÖE.ñ›[(5Ìñ½<'®^.s¤{6IŒl s‘p?°iqÀÿ^ÖòžRb€Š¥2ó5þÔõ±äçWwèTZJÇ0:þ‘†¥"Û¢\Úö ×eD‡I•‹Ê™%TMî<Ý©S¨ÁvÌid‡¼Ùi¶ùk3™‘ HºQÙU„$´=vŸ×!¨7ó^e¸k²ý²¨R¾à5/fÞÎÿ˜Ü« Ç;nSã¨q±/!ª)C¾ÓÍßé×xg±‰¬¿"ýFsq`åϨ͖Þ2“é/àä›iØ©“‡ScdðDhÞ&Ñ}J":¿âèWf'©2ðÝäcŒeU÷zÂ2°Ûñfž½C@n*G2¥ûIÙ&÷|äÑ¢°f+cFÇZ¶| ]ñÜ»“Xsóû‰ ®tÒj$;´†!ùl Ié8‹9“‚)n£«ñ…0»ïÇåUD*…átJsO4±Z‹ˆÂ8Å»ì^ƒ0ÈTõÏf™éÄP™Ç¨ KböG7nš¥eרr £SY þ#`ù#Ü(–)Ðî–”·íÃa}@4i¬ƒ1ZFêKäªç£ô§)$Á§òlõîpwt›‚„î9¶77†K…WçÕ@ÙOÃ|Ißòu]„¬Íó-Ûr¸~%ñ_O¬‹]m_hhu•¡,LÃ`ù‹™E‡ÎÎò±Ù“¢d*rIïDæäˆÇö"5ˆ õàúâÇmt“å,GË^¬ Ôø>ƒ£ (íÀ?ÛùhxÖäuàÐ/™*äûò½Ã­imâ¶màž÷+Å)'‘~d,—£à~h§Ë)d]üÆP—»;B½àz¹šþÛSî눤7Æäïˆfài3²`*”á\Èz=­e‹¢füÊ*#JÎÊDŠ&A—x’dD6KDcÛ^û«ˆ¢›×»fÁd–Gð¸ù!ʧÊOµ-êœW¸-ZžÉÚ õS\ú0ðܯ9Ø7Ù`=bÖ.¯·º¨Œí;_w“÷+|ðÞ€hZ­iôë’Ar½!b5Q´ÓhÈ0õS‰–ƒárlØl˜Ÿ·æG"7œR†¡E¸­»õGhH­„Pk16–þ•â²›4¥DG;ªã$´Ð&Èò¸Ù°ndÚ9xÓ_4¢2Ó¼®ã,˜D1 °Õ¹b¯ëFöãCT! àGJ4]¡n¯¤* ÅŽâ•Ô6ƒ#§úÉÄô–«¨:-õ!lŠé Ð úÙzªco=6HXYzò‚¦ 9šÁ·°æK”W §:Ýã-E~ù€Àt!—BÿìáË bq¾Ÿ6²|ãˆt/[£HÐÛ¢ëœfɛև¦LsÓ¢§tLèuë/“¨»³SEØ)8ƒ,Ô·’pCH3Ñ'xyá¸{-à×éÐ:ó^ò…ov·Õ6Á€"5/¿ØÒ¢Ã_.¡Æþ|b¥~ï0”¦ƒÊ‰g&Ó¼=SƒMLCâÓEòeË‚m]¯a²éÈ…9ª‚pm³¬\!õPgã#©ž,›ÕÛ¥Jå9x-„UH¿Ìñ}ÞÄþ‰Êj1UÀq.äàãy+xÝ1€Ä7–ë%óNÔ{¾¾78Ž0ëüÉY ßà6è"ú…øžˆÀVÔ.2Ér·Ê–Nèù>»í>ô[¾ZNc_V6FÇÑ„'ÓðÚuIžâØdÖGÕ_KGZ¹ˆlúeTXÎ8M{÷'QaõèNh¡®8S±àãO›P àôá'nOZKÐ?ÕÄb=Ð’áJŠ£°x7°¯I€~ÔaþMXZ7›¦b ÐÉÒ6Éè¡‹á$«°^ -é/Š–qˆÏ}ž¥$ˆ#,­Gª¬x2 á¾Ã`=ý€ŽbғǑÕ7ú:2ë3ë’Æõ¨y(Q…ažN»ÛßœÏÚ$&£e3åÕ9{N?ÓUå/;Ê0Ì﹑X‹¢¶„ü½(Ó%C×ÕÍ|U០Çò‡¸¿'RVÆÇ¦2¥5×í£÷þUt‚tÛÜ섲Õüݹû—çlÍ6“b”à>ÐH?ä4ÝÌ.à©… ›§ý³¹ŽÇéãPj7Åê¥üòà€¥©ÓÞs󰸜/ñ5@FQ2ñCÊ´†c ¿c½è7ý2T‰²·Tm-²´—ÂM9Yeå]~Äoi2îÍÃD ê®Û&±©U^k}óÁt™c,—1\b•9Š;èö?LxóVüçRÇ4û¨’ŸUÖY:ý´§ŒWT¨waMS…æ¥TÝÐ ƒÏî PX¢ìÈdIóõEº1÷F½h:63’½úf?\®¬Ä7M¸"Îq¹aÆÐ`Cäè½¹':jy¨ýƒ¼žžÇ‰F5üz„,ÞK …(®÷ØwA齱♔•Öü“ÄE¤è`+Ö°T)ƒL¡ìŠÚ[ŠI6ÿÞæ {´#¥Ü¼¹ÏK3âp7 çBÿ4©OàÜ÷B&ÝÃåžo/è|ÌŽÿÒÎ}jSIï³ÄZÜ4ßeã"câ^‰qß Öy{°œcøZlÄÿôîˆÅVÛmdb"ç –Â:Kø¥ ò`2_#[?îÛ“ׯ…¼DXÀJ¡ilŒ¾W»HÀÍÂ0ð´:Ùd TéhέܬàÑ+X±(½ìÒ¨=,"ë†Zº Ò->þwKä'>‡îR>fÖÖ‘¢¬ZÞI‡Ù\«þ)e¦`ÈY[²ª·]‚+zG‹|ùν ð¿úªQïLs¡pÜÈ•‘ljލ8kÖ34,lð2f„YHaÌ¢û—#Utñ,¦Búmê,õâ 3l‘§0¦ëh‰ãÂûm¸C§j6]Kûk7ëúÎÿKh§¡N]–î T26Rjî?¡ô_¢ç>ÇV;‹ vØ…·ƒüE›6™} ƒ® ;W‡êõ£mUu;l–L2Ö¶ì9¦˜0èìXË¥rº™p. 'mrfý¸X*{â².=½­ ›[ë?¬ûõ cO)GyìhYe iØXñÜ—?äÁg•))Þ$¯¡·`GÊ2éÞG5”ñ*Œ9û™çW>XµõHà+ ¼à ܯž`àÔÊ×|_ß#.Ô|¤$»mZËJ`!;xº07–¥¯iãGC¼l`‘Õöb‰­u òE°‰»ˆÁÙ\Mßu{añð"®A`=MW(»/@*i @×¼š#ˆ𲓑®Îhò{–è/Ængöà„nÌZè)àçþtoâ—â_êŠýýq§îñš>Àx|©#+ÏyRŒ ²f—]Û·<8)Ä” —ÜÙ:‚j.r)ékz«ÿ1ËB"ƒý@P®‹é|„J¥Ï˜ßÀ,^ FßI¾Ã¶$y8ÊÈßUCu³ê åÎÔˆÜrgÛ.VžhÖTR7—0ÄSžÛééôPÿ³ gg4&ïuEp@á÷k;YPHIsW.zUÅú½HäìÍo@c^ýçÞ´htˆðÍj6Xízî\äºoy#Ç®Ý(ª)>´jFá{jDmù‡??ÍàüÝ HȆ"sx½:ûî¾¥ôŽó°™©kÆÒðD2mÕElÞ>»‘à· ‡³ƒÄ¬[\©Î©ñK;L›úwÉN…w–ð,=‰þl9ªw™• `çDmy'ôpN€þq8܇,à°¡i÷\ßÞy«n„ú )¸fË‹›~­gQþ•å| £½ AôŽmÇ? ç9†G~zj/i % £p %èg¼ɇSª—wô‘º‹y è~ÿÎÀÜÏjf¤/lÕ;?Rëëiì%.Fy÷»]ŽÖ“¯Šj+«ý~¬Ûñm* é…¶5uûÅé/lqŒH¬¤5ƒ¶Ÿ#rµ/ÃÝ >ynvúŽ™üÝ-Ô@²-––±†ÅE’}¿¬H(BrCŒgÕfxÐ…ÆO0Âü ¯Õñ¦+¥«eŶUhÞÊç4•+%ÓU¦¼Äò¹ô5)TíNÚÛKß-„'cÆúèp…BîÉMƒ À}„~Ê­o}§ ì ô"Pp„‚ÚÛD è„0Á ŽÚ—YmèÎV6G#WÞÅBd½q&™zBÔ4€‚î5-=.y“P;S›[?W¿GþPG¯-Ë©­z'kX«´H  ·=Þ»qëó°§eÖÙ’ ÅËêô½Ç¹è¬¢²}J%(ZÛu{œÙE´b‹¶ÝËb¿µogЇò%/V¸¥FHíÝŽG‚2DF­½6̺þPäÔ+æ×B>à^C…µþm¨]gHr)´ üi܃.í»‰‘ã¿i%ýr¿¶òh@ò[ÿ‚‹‡ƒ^bÃív{ï~¾ØØ­¬.ÜaÔ<%§\ÜÞ4¸Ïæ‘¢¡c#vmüÄéÙ˜î.ôå~[œ†(uwš/gE‹¬K]¤Á)͹îü”Ós•²J"ÍÖmùn›cHi2L‘ï¸ßGñC¼vy¸S–õ°b9ºñîuÂ’ÿ~ùgs’ZYÍàá㤱{* |þêãix‚fܸ|¸¢³×);¤_8QÅQ«Ëv|&ùßÑpA±Hלv­Ü~Tê$ Ú!A{„Ë®ª)x°J¥õ”}éH4•U?éœr_ÃÈÚ6vlc‘å—Z¦ð±ìþ¸°kPî>Æz-ûbùרtÆ­ò3'm7œÝ%˜­K49´™Â+©$Ì5”ï±Øô—E·+Œz3= GPzXg!WK,€ÅùûµBÃGÅ£}lXù³7ÚÃÏ÷÷nwÆY}DNç“üŸ¿rå+(ý(FÙ&Ñ Yªt÷ê¬=Ö1Ù• ÙÖ Æ …¹,î¿l>«Wß\æqzͣʹ˜¥`åd—;"îéméÌÁ]"Þþ6Ï2çÝŽ¬µÄYý&ªš G™e«ëžyÏ„aKEò>€å©c¾ŠBÎîPie‹›à‘¸{:Ý”9ÃdRnŸ¤Å*/…’)?~²&úCÁXá”)nΟøpf™@#jK€eBNhM´å—è¥þx•@/²jÎÓ¬ã"=£kWL9öbíСæWƒïöwÑM©œ„ÊŽEèÏûc:”BR%@Ú]à=URÞh3>¿,OØ‚Þÿ1w}âï;d––#PŽOáëS7f¸ñj )ó8 0¼ãôûÇ _W/„¯õ ®”^$ÒhÏAݰ•u"lj»é€byb–™¤ fq²S Û×@눓ÁÁ˜¸aSM™³ñùH$5‚µl󜄢à™íîÌž C œ«˜°^ªãn‰C7sàϳ¡Yw ×7€,†j™îá»W´P©À¨™Ë‘-²LzKæédÈçí¡äkýõ1šÆ% ö"”F*Ö>`xo6³Ùyí$aðºL.c´|7dáÈ&(Ÿ¿SxRÛ–áÜ%ަ›ö²ô`xz:w¨A À M¦¸|ŽŸƒ¸ê£®fiÕyãǦ^'>Y4I»¤¿C´‡>eôÚÉÚËŠÓ®;מ}x<²ñÛ5FÙ±µÚð…(Ψ |eW˜9=éøŽ`k ¼`§Ñœ„)Ÿâ ¸rÁÂå,ÞEŧT:ˆ#k‘å^t}'Ľ”ªˆ¼œ]è*6AùîI(5ü3²Â(HÜûçšgñ=a&>‚8Z’¹èì*Òp—$Bis‡‡`÷¶wÁFòÖÈ.}ê¯úš¡ù&«Þh„q|œ¯™nr¦JC„Yf{]>FUÑN\ËÐjðuµõÄÜ4ÇPøtÅ ­8%•ž÷ˆ¶’fîæ)Ø0#÷zcóÈ}fÎÚé uÕ5FÝÆ=&©(­S¼ûc0s¶²‰‡öš·g®Ÿ`A7þH<›ã=qwOðÖx»FOÍ·'Ž’…´|žwžÐ9í:4µ£$±›‡FV+F¾»Wõ–ºº÷Ô«s`Ê© ƺìç?>'“#×F3i¥ÁUÒŸM,xgâè­ÍÂdžË_eÓDÙp\IúVdÖѬêAÏè ‚>l8ƒ5ÿЂrQä W‹É!|ÊóÏý nRÐ(ìÛêýgÍF‰ø¯Ê ¬2ÊÎQ â(‘zëRâ-™u¿±w KRÛ$Ô¾D1bá6zú&¦€ïËÄiC䪉é/çÜ7ÑϤGοLIÈPà¹1Žø þ"n-–·crMùH+Ç?µN,ï‰ò°øvwœ;%¥œ‡Q¢ÙzÔ+­T#iš¹8({ÿ8·e;Âe„¿UYwŒÉè/²=Óe&:(ç=8Texºäñ ¹%ø(²â‚º#|­†äœ¼¡‹£¹Ÿ9°¶tÙ8DX)6ÇØLºCùË Æ¸½Ñkf(º€jô µ™Ãû J̯ º>0ºZ€õ¡Ð/Øfö# >©Æóz9ùÝOµ öÂb£æþD¬û1•QD8#ǬÔ¯vºT¥LÊD;r·ðk}åäÇ–·+óÃŽÝ‚ ÙÒ¦%“©Xí£#x¬FÝÜŠ+€Ù`qx1ã“­ës0v–x¦ÃAƒЉ“iD°x¯âýP ãXEõÚE÷i7÷ëµñJ±8/BCª{ð-¿Ÿt"N)& œ9“‡|ضS b[Þʃi£TŠ?*Ï’eö$ÕA¹ý2/÷ô|Ì£µ¦”öcžO‚huð©vñ¹³¼Jö øb~{||–î¸êû{‘d A8‚(x†ü†„ÜTæÝÈTÆëœ6uÜ[΂ucHæÜì\<ÙK]¹%4Kò{¾BN8âb¼¨ÈOË[UºÊ¸Bck¥¬7„½¬¨½ÆE­‘‘‚„Œä1¿·{`kÞòMzÌnn6tžŒÉaÓ¼:¿ÝørD vŸ»{ß30¿$K¸×"{Wã_t¹¹‡Ìä¹Wí˜võ~]S?ãS±tRW¨Lô SqhUÔl^® иX…×øªn©èügñþ¨F^õv[ûÇB¸1ø—Ê›·)®J¢W†-,H›m’eî® eŽ•²ØHwþ©L‚§X´NÂ0tî)Ã,“»Œ›2–‘§R/¯B³á™n ”p#ÛÃBK¾ «œ{úR7ZÂÐÖvû Ùúí……¼u#þqÀŒ•jÄÐj}»£â!Ð÷º°sèÅ ãKê³âV¹ñ¢!¸:¼M °@£‹h³ˆ¿˜PœZþUˆ.£Øë mw*ÇT!Û™hkæ{ÙOååsAk¬Ý¡Gwô”55åYPBµ³eçE6x"?ߢ>ûÇw0‡ÑïD°#íŒT’‘”…µyk”¾’D8ÎOpn_ýÀK"ë/ãWI_-‡×åo—ÔJNúµ³‚‹ a îk,ÕJ|kgß<¡²GT«¬F7p:cÖpì`¤^ÈGeXcPÌ7Cñ /ù4üÚÝsô0’JuõL ³À×lq ‘î 3:a¯8Þ’0MÃvk•õJ”Žü]Û°àgW|1™¤>mÈöû°ÔŸ%qäĢ̒]¿®ÒË ¯M³Z/Â,£¾r¾|ÊßBÐÿjUw¨äâîÛy;€&X™pv±Sd.d ,T³ünV.0q^2oN¨šW; Þ.;IȦm’Sß|œ“<¹àqëa†×º€3÷cß‹ôÅ"W¾%Bú~çoÃmˆñó³pqðRÕQBŽñ¾”Gòô»T–ÙÌØ„þÒ·é€løÒwÍj)º­U¼ÆÌ•ÑQ¥9‰¨>$I0äÞ5qð(ÑËZá@؃‡§7»Ec45!|Ò¶ŽA©yÏ}ÕGÿùòµXÕ·»bw¯¦ÃQºÞwÓëÒ']ŒKiâ õá?«Á˜˜|ê›§ãÃMeáËÊSj–Óþ»9lÓ<øa•b½ :€LÏð%³5Ïþ>šÆÜó¨s•6®*-ÑJž/À¶ÂÎé× _·mqè¥-h$×(w(ƒ˜¯îxØ Vâp‹¯#³Ï÷D¹W·&]s »y™Im#È ¡«ú«ï¯ cµ­W«yÇ¡lGNuäÒêM>gÉ–/<þN`Q:Cáñ§–ˆÎö0jÑG(ºÇþÖê×a€FPeÂ¥s37òõx -ì¶ýžÖ9"áð¡;Î]à¶vúä5F§H.ä5—‚Ô·"ù ¯ÊÈšnÍÍ»³(çòé;ÑG¥Ã‚Z¶æ‚§Ý€³Hð™2l³.á´ Îø€cD‡ÐÆ4´æ“PÊÇ04~oX6Ò ¡—r²’n“_:e/µ8+\°þq†Ù’U¼ªLy_Tš«Û"¨ãâIµÞ¥1Ã?3¬^ÕËü>qÃèö @£ŒÝÇëFºô‹·BK)ÒÝÚ}ÝжŸÕ°|ØØ«9aL)VÅÌaw0¦ ˆñ$|¼Åª˜;~ŽEÞ³mN³xÁîI¬¬œÈ‚ã$–ï…lì<º/¡û8hmå ™ø*‹Eò¤ôpÌ6 6âKÓ¿±ú­lxŸÑ²:„B©Y}dBœX³é€¹äº¨ýð"tΙ@AÒ‹0…dŠÀ~w3iBÙdS¢ÁX\º[C9 —3Ò<O¦•K0\ºC>ÇÚÌ»0"·/+½'$·¨ÐH/ôS²"ˆ©Õl âë)Vz¦ Ôbxåcß·15‚òwAq/Lש¹}C ©Ïî™÷#ì™”"yO±Ãô° ?Q ®ã8dhxŽ~ÿÜ'¿vC:…~ =:cÌ]-ÿH?Nï…ë%xƒÑ>;Ò{m¯8Dh±¥®™‹–—$àön¦šÍFd©(?! %Oûü«£Â×î%À'Ý'”~lH©tîÈÿk §Ù,õ—ÜI€>ý«éµÉÉÖøª‰üÆ]ì/KüÃâQ,1ØZ†WEWëUBÝgP¦€°¢"ý `oúÈj¤#="¿üZßw'PO =cµÎ‹Ï;ÈŠr£Ê$mRËi>4!QJÁZûoUª(»Ì”¢¹ 節@¿ 'ÙCniõÇ Cb¡Žçä‚\…AdÕNÅüå¼uTk4EŒ ÖÕ€úqê­kÖÊcÝ«f–°µº©8f$触øQ” ÑˬŽæ|2‘FhÚê©~#Eðê©ó”ô\-ÞOö ZƒëþCŸ¥Ær»Ûö7A•—’d–X]ÑC]Ô-Ë>°XYÖŸ"Ñ›ÆâÜ&ž¤jPòàzM⩜)ø!CX[I}¿‘ €šBx®“œ5jÜtØÓ„mã #û{3ͪÆIOÜ|HkBš(Mµ†ˆÍÌ]VèTwp±{Ñ?-±Öxú ª 3ÜB0×ãCTYô{&ð:Uøbx8 ÍùCL…½DJýúõZU+k¸Q¢Šâe¬6KgåzCcYž¦ezºZnöµÀ,Ó.š·JX_|8Wjñ7 ™ýâeÞGlÛì}&4ÃZ/»/¬Ýª†·{¤šH]}î‚paÀKí­Ô=ECª°xc²NR@ý¬ £}žræ²Æ`¾/U h[/5ÑQ^ðj¾t‰˜éæ„Ã;/Vìc¦L(ÕEÒ¹. Íìbaמ˜Vœ&ÂaG©]5…ÁirñkË-ìØãD0ªñ9Ý¿3 \_³qäñ×0¦ãÏ*2ˤ›âÖ…¹r©¿–Ÿ9¬*¶ Ô­ºa¬*¥ü ”Åöˆó­ð@j¬ÇàŸÒM;7 a¯Ú\cW_n­7q\Nô!¾Š›¢“-‘ÛºËÿJ¢JÝ£§¼ËÑÓ’ˆÎX‡òë„ ¤ ;>ŸG†Äq•RÎÄ4\ÃÞhŸ8YÛ#$ª;DSE9ˆ˜*m*.'1®zësšÐò‰±w|šë‹Fëv÷fNÁ2¹ýE³qÁ’#Tgkol+ñ±•Z¹R*žÂðg¼e¾0 Àâ~öŽÅ0Ëáxü†æ4ëzÕÇH¾ ž„?}GkÕcü pCAX͆yKœEÑSÑÍVcìRq•žxN ú‘áòó´E þY ©“&¿CÖwPÝT[kêZå±.oÅÏ.™k4’$R 3ÚIØ‹ŽHCßµ•ŠlwËöC2âij^7Mãá×pK+#“²ébã]Îß^¯‰Ï9öË{†‘šjd{@bù«0ci—øà+Û9³“‡þêã]¶!Î~t‡ëÖ:ªéj<“s¹Z.¿hBRÛh¿Ü%\jÄÈHã]p~IL©µU1"RÈO˜ËŒ:-6mIà÷œÃ¨‡Fó¤ü` ùÿÇœýõ…àåoïÈ7Zlm^¤âCÍÎЉª(d¥ª®®ý]WÌ"m±Ž²§ ÷åä¢Ý.U˜=Ç7êåÈ.¸ v–¨óžš®8?…ÔQf‘+ÅÆ2`œÝAr“…[š¡¬S+ØQfhtï½KèT±5pþ€̽ï‹äN¦½ÔÄÔæÕA0o£Æ¸éƒÎºZ~`±%ÖÓ3-àÎT·öÖM.wEµÀë^3<aiZÍ¿ŠYvÀ‘ ÕÆekžœ‡vŽà)FUا>‰T8ÿ15ΟvËA¹/8„G\Áó $åá°:w<¬:9å IÏ¿\nLXç:¾4r5,¸IšcF¤u{xá.·¬U€òåç0IÞÜÏ+"~1ÇÆËŒ¸7<¬8[‚ I­oðtY0OrVjDºÐCëöô>:ZJ0t8¤ÛØ`6¤$Ù%¬8¤Ô™ãž§%ª»>¥8«e78w¤ŒäþEvµÍñÅð+s<3F‡`šíÍ¥a‹,ܸ‚Ë<»Jç SV/žù@!Q^õ%ÞICúaá5*ÿ:ÈßøÚWùÄ[%^ñ)¦!PŸS~PÀHd›é´Ú¿Âbxä‹ÅD.;'·réô’ݱ] (\£ ’sR‹Jòs‹²¹I˜žtendstream endobj 50 0 obj << /Type /Font /Subtype /Type1 /Encoding 174 0 R /FirstChar 2 /LastChar 122 /Widths 180 0 R /BaseFont /CIOQGK+NimbusRomNo9L-Regu /FontDescriptor 48 0 R >> endobj 48 0 obj << /Ascent 678 /CapHeight 651 /Descent -216 /FontName /CIOQGK+NimbusRomNo9L-Regu /ItalicAngle 0 /StemV 85 /XHeight 450 /FontBBox [-168 -281 1000 924] /Flags 4 /CharSet (/fi/quotedbl/quoteright/parenleft/parenright/comma/hyphen/period/slash/zero/one/two/three/four/six/seven/colon/question/at/B/C/D/F/H/I/L/M/N/P/Q/R/S/T/U/V/X/Y/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z) /FontFile 49 0 R >> endobj 180 0 obj [556 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 408 0 0 0 0 333 333 333 0 0 250 333 250 278 500 500 500 500 500 0 500 500 0 0 278 0 0 0 0 444 921 0 667 667 722 0 556 0 722 333 0 0 611 889 722 0 556 722 667 556 611 722 722 0 722 722 0 0 0 0 0 0 0 444 500 444 500 444 333 500 500 278 278 500 278 778 500 500 500 500 333 389 278 500 500 722 500 500 444 ] endobj 41 0 obj << /Length1 1608 /Length2 8928 /Length3 532 /Length 9778 /Filter /FlateDecode >> stream xÚíteTœÑ’-‚»m ¸»»»»¥F‚7»»wwBðàÜÝ îÜ„<’;3wÖ}ókf~½õz­^ë;Uuvíª]§¨ÈU5˜ÄÌLAÒö&6fV~€²µ©‹³Ð^‘IÜÁÖðjäB¢¢’ƒ€k{I ÄЙ$Afvv@ÂÁÑlmiÐj©ëÐ100þÓò'`êñïž×›ÎÖ–öê×W­ƒ£Èò ñß¾¨ V €…µ- ¡¢ª'§, •QÖÈ€ìA` -@ÕÅÔÖÚ  hm²wÑ,ÀÛföæÖJsf~ÅsÎŽ 3ë×k w3ã#À¶³vv~ýX;,Á@{Èk k{3[ó?^í 9‚^#ì^}¯`ªÎg3°µ#ðšUURúWøoƒhÿÌ Ý+  ¹ƒ½­ÀdÄ¢ìyM  ýï©Ìü¿'òÿ‚Äÿ+ÿ¯Èû?÷_5úOøúžÿZÚÅÖVh÷:ÿX0€× ã PüÙ1ÿW,ÐÎÚÖ㿈þ×@Ð?þW ràkÄì-_¥`efý‡ÑÚYÚÚd®j 1³Xm_{ô×®eoÛZÛƒ^µüÛF׿ø4­¬Ílìÿ4›ï¯ doþ¯Ì_åùË›EOFFAM‹á_·éß(ÕWÕ!šޝÄþ­%óÿ8üÁwpx1±ñp˜8Xy^+€“Ïç¿È÷ˆíŸg% lí0x-š•íoéÿöÿçÉè_`¤ìÍÌÿ̉hoþ:Zÿaøã6sƒ_ýûÚ_Kþ÷óß!ÜAfHË fÁÓ2Ó!5ø¹c’=ߨ`BKë5‹ ü¿8tù¥…oòU~x®an˜àiñ˜?vüµ+O¿7ô Ï–¦+t–OìCI×]€¹FÝÆÃ°Èb\ŠšþC'Úë|Nqã>7«öÞÖ˜šºqÉó[’‰60Âù=?¥k?Îû;G4_³Ôº8ÜvŒ(¬šÂãÔ‰‡÷w4}Ãý]—pÝ»D 9qˆT®oP©£ürˆDôµ*½bLKØû¾$} íÖ¢åX[ºÄkÜàè ÖW˜­xý¨}zÉ>?…É/þæ®ÒïöRœ h]!ÚyJM¶HÏN¼{c1+âÛ#'濽æ)[JxÛr1V!ϲ]Ùv<2n“Å7Pvµ“ó¶­8ÉÜë_Èü8ÕŸªÐ8&T˜ ƒ£âlê¶Î BSy”ó`Ó0“Xèláë'ô²;y4]âZ ŽþÒHÁr‹Zî ©ÿqOõ4∛AÉc“½T"ÞW\Ûv}íZ²°Cz9Ä¥´áÏ7 x¬圃d FÇXƒ'jß6Wì|-'#cÀÔ²"Ìæxp¡Î`€±jàÌñX2UO†wîÈ„g[•KÐ$ñ9ÈӭͰùáÃõ ’%ÒQ)¶¶ŠÂ2àÂ¡Š­àüÞª_>+¢EÔ‡>bK›{«ã«Êö¸Qeqª~B¡ócáôzÊÂv 4w0sƒrm6ÑOÈ?¦å±&h¾¤2õ‹R5´Še½Ò]Ÿþ2Éz:Þ“ W†€Ïæì”üØTÕ¦ Xa¾S:£ÂKÎ,€‡Þ^v˜*®ùénX†t¸<Ö ÕYéó;02»$ûÐb^“š”HÄ=TT¡W_,Û™ðèR^A‚às2í]rÝg¥ïî%á à Î<¬2úõo_¿Ší$!ID"FOvõÃI¶¨|þ•í¹™1eÀ} aq{¶ó/bî&±\*'æ±ÅÚ‘TÜXW¢'"CWú¨œê/$×ñ‰5i† ax6Xûƒj{FŽSÁfR'·ŸE0¿½'½;¯å)’ç K úœ¹IOµ³ßG&<ªæ¾9 –(<±…Ñ.>ê#“2¯vÈ“XÁ’nx-NN†«mÃ5bÃvkAôåÃV7¾s\ u.TYÑðYï±j3TRbIœEåŽþè«Pcaùœ ÷C›Æ¦p'‘f(â7\ÕtÕQ\z%ƒ4²#Þ Лæn«-£Ät{æ.lwI]§n¥Á~ÞÂ,A²—‹â2/†˜fJxk·º:K»—e† ¸|ö|T# ù¢‚oÊ„¿JCm>Øv'„ÉDý²‰"|WŸ¦AËuõñþÚÏ/}ù)×¢¬,HÄG_”ªb™Ocø6ý°ÂÀ™éƒ™€^Ϫ!š{@p ’Ù(€!À€kýù´ž™š,ê‹4Hñ–rš{ì°‘9¨ÝT(Þ~ÐŒ±Æ¥e {˜Ú†Bð͙ႎÒ.h ³‚ú6‡k„x)jYÃy Ö&5Æ=3”ž·æ;ÿ/‚OæBw©ŽñF˜³0Ìg›ºlön(»I·3&Ò–¿×·«#Y¹ëGÇ,?48RÜó2fäø9¢³~¼ÚŽ$%µ(”›ÔW}£é““¸Y–ٯ׌ɘ·.hÏ1Fëk‡ßdSûFv¦ZW:D*ÒG!u‰ÌøÑRZ0—ÁæØˆ('vŽyd¾¿5–€yºâéMÒð…¾ ã¾ {„Äx<(x7¨–÷™Œ%ÒcØÐ©'è‚ác¿HØ …±°å³: =Ï|z>Ñ7K»ršP\1Ž ñƒÖÚ5ìØ¹¶†g)´(}¼iŸte~äX$™heÜÆr‘õ oP¢iÅž­ôFwnÅG„ÝÑ[U@sTMsÈãjqHƒ¢[„Ñ 1\ƒýñ‚gz¹Äñçò’€?£§uÛÅ|ñÔvç_swXzÌ“)Ò i’ˆuwo‘S`¨Œu˜U¤öl}ÅìPZ?*iI>µ¹€¬Ûˆ¯LýØC¢^ N¹ûÎ"å¡uWªÂo¼ðPFØ‚Ô ¼ÈÖêüÇÊmJ»FM=$SºxaUq$“CĸkNU‰?.Õ^×Ô^´ï½{1«q=©ïÃ)>¤ Ÿ%r£úMT$N ´*=Õ“÷•RWOÖo$ [ʰÖ2”ýù‹È»Y;c¬µ”úÆÐ€'¶©©ˆË‚ ãÌTâ¡ØðÓÉÃ#³¿«äbjñ îYbåê‡b޲§êø—a-´,òv§,Ô‰ˆ§:ªæSתj¥-K:þ¶/ïTÊ>t™æT>ŸWÆÐ6à| ±ð%ûÉû™‡£ÞT¦ÛöY¤Ã[å¶â»‘ ?Z×D¤ÿ¥á)qoȩȋÖ[G­¹o¥ùMË¡—ÂwágNäd] üF6h(ÄiÞ¾µÇí^#PÇñÈï©ÄÀUúòJhѧåW£Üé¢T®£(Ò›)é?Ø?Ýøååéÿ¤K sðÀ“«T<•ŽÀÖÀ&ß»O„¯·ûÔ“dg»´>™I§³é®¼wÇÀqázK1Q!"è³L‹Ê½ælT¹ƒŽHÕŠ³Ð³I#x+ûIòÅ¢æ=Æ> \µ;Àv†ë£ ÇGnû ¦„` +sZÛȱ‡† c…NË\,Ý…vQ¸ æ‹w5CSnоÊK‡Óžë~œ5p4æ$Ÿ?¡ ãSäöîIÐi×ËðYE±ÓI§îÉýgV ‰›Þu4ƒªE¸àuè¸/a«~ØÒw,î†__%«ûôCa,GîA.üjtš¥L &n¦7>©ioá¡ ëçRá`|žåJçîÖ‚(´Ý`K£•ˆ(‹7§Sk̘Hi©òÃ\ÊÚâd+X䢋-îDa3]µ­•¼s—,(» ”oâ R©±i½Z6ì˽îõ²aº”—N? ĸÙôÂ6’´ºDRîáÝn$s5w19 ìvU<¨÷µß¥ý.ÀåõäÚP—vÕGîˆ>–_Z!ë¾s,DŒ'¶¬lþºªšgÆwÞ¿üzד–¿;C¶gÚ`Ù—îÛÍv’þ–*{qéº~ᆣqÁìs“»êƒn>Cª:VfÕÃ@fÿ Læh¡”þU‚Ç$ôJæqé²"Ša½¿ïc×êÏîi `ñú<Å ½ñ†h†ð. ¯[i©÷,ã†MÁî,TùÁ÷Øü¤]sœèž.4{â;—K;p;¡Nc_qqK°L?‰„\8~¯ó Á×ϤR€ýê3¾SHã.ÚÙÑïYªŠT__Î)Ì(Kq´BɈ7!+[í²_‡€¨u¥t–ÅϨl †A0XmaöàÖ7vk×GRý„ÞvP¥Øßbz¢¦LN!.åŠÇÝB„¦s­À1§Æí0çýù£¡'´0o Jž-wòÀÝBƸ&ßq’690Ñ8v£I˜ÀÅìÊn:ýIÐC³qÑÙAQ' a"ýGCGm†ÕªÃ@ú'úÇÄE+F+Ø•juÖSwrØ{ÚŒó!ó/áq2œUSƳ¼AÇ$ ¿¥„‘0xré~\“û å¹ÑoŽš¤¥9íC‰ï~aúÎù$¥B6u_û]îçLJ”Ÿ59Vê8ªÂÉ­N„ކšt)ð}|ù[6i\UÙvØ“»å¥iÌO²‘jÂdD•OáH*¡¡½Æî·ÌJTG‡|[¦{¾÷uãNÚ‰Û ²WemÁbŽíd~hˆ>oVM Q(l}‘âÈmÖ}jêP¥qI~¶gö<èHS踹¨ûï둦šô™çÃ1‘n¦–éõ\¨v,ð&Í »6‘ˆÿ†vTó|¯½è–¿˜?–ŸÂE~îëAzÜþ9ç+›‚hUÝH+¿HŽêyKÔLW;Ã>µ/ÅøäøZ«µW©m¡´NVL¤3žuªT%N¹Ð±U"dÔzDƒòá²°£xXiÐ`cç%WEÄAŸÖ‘-!ö1› -ß>}Þnr³ŸºÄP•‰ß(‘Ó)ˆ×á¡E]k;›,<\É€çthýêx<‹/¤5cd ç¤ÈQ>¦Óœm-qdGðêù¾Ë[9U_þÙ7Òâ‹$ö%L¼˜3£1£\¨Pd¦ÇÓá~öŠÆŒ ƒ[içÃ^ÿ$l®`”‘Àý´WÄ&r%6ýæ³Hëã}•}÷$Œ6`ÉRìC#²\êZ¯ÝÛ¦Äé­{…é!±ËÒ²Šëd]ôËÁR%qRÇRߢà‰Þòå¡Nhú–â \ õÎ+ÿ^øx«OBÑB™|ˆävjê»vuêïäœzkZ°ª¾]Jà~E=…^âü5âݤgå³T.PDr* ŸºyÔÎgŽró3_¸”³wU£ ýÃéÇžÜ «Ì(Y s*É”Rmc73 E“æŸôÚÏl• ¼*82!¸xYf'Ÿoü~D®b ¯-@Lt´.Þí\¦Á¨x/X]°32uWÄœ†FÐMs!Çdƒ©á´ä¥i°‡Å`‚FÔXÔýNâó\}0)ÆYGª¥x|ßqB¿S;À ´Æbnss¼cÒë:]·ælˆgLÅë'­UÕû F»Ét$*²tÉB¼ö© hÖ« °QoñM¡Žîcõ-ulâpâój·<QÇtWåf0=•©–:ׯà^çLz3–Õu^Ó¥zùñ¸1*ù¸ÍžÉËlfw0«Æâb J ÌÐS²åàæ3SÉ©ÌYÐ÷‡ä•æØ€/I|,ŽT¾©ùrÖA*öÞÄ]¡’«Aåi®aù‰M­o5Á,ãlVp'jtš;¢ˆÅÌ ¤pËì?í³Lzâ‚~æ¨ñë›Äñµ•©®ž# y­b ¹*Í%Êž]¡$lë‡äA¿ ¹ í·cfÓÙ» ÅÜÖŽòâœiq8 käà7[Ôzï{ÐñjêÏ—4Ñîë‡#C~@*•V±‘éú6E2½`H¢º¤´ÙÉ’a¥¯¨Ä[_Ì “¿ü [é;4Ë.Êê«ò…»ºoÿÁœïg›±¨E–rÇ‹ä7÷rõHcØF¹“}µï8eBœ:Ì™’_¥"Ï׋ˆâO1{ÃÀú ÇbÒ]ǹMçbÎáäEÙ22¹þƒ„­ê”KÛ¤ÕbfÄmÎE¿'%’n•8¸V+º5ò¡öjÓ˜Û/ýdÜÑ»^­ÿŠ_) h\|yÊBfðc Ó u+­ú=[XùqF§[^YËN«…”U=6\>Ø÷üs ,2ú¸ùFb|O ~#d²µ(ZV§åž3?T*¨eƒR\âÄ‹psd• YA”áž’pSW£äyiäEúIõD£4xÞlïR8Z˜Ë­g¿‡³µÒZd'n€Qr]™7Š[UbŽNš‚C!½iƒÁ^{=Ƈ4cíM­:Ø0”Þº,%ÁT²nþì·K´ªUã=„½y:„ñ© 8ŒÚWÝ,aZ¢7“8 Ú8ßL—Rg—Ò“^\©¦[ö%Áÿ6Fe0 É’*õ_#2Ü—dÿm.¾¦ÞÀ÷ûn g'¼ôéH ù˜²,·-ÄÖ‹V¯Ôš«ÎM=ǽÜtPÐÄÖ½ qÚÝÍžÜr"½àÂÄìÔÊ]8ŸÎƒ®7”s'Љù„Û~›!³¿Ÿó¿Ý5’RÒøÑ}ä`¬ž7ÏÑÃLó·…-:‰y<|2œÍJúnÒòªÔ‚ÚŽ„ªxDv0S[U(J½Dž¬Vapü¶õ†ôA¤#»ßÛæšº÷vgªÇYñÐø •~i¸rLçvÊúiwNÌèJ#ÅÖMµŠ3 °ã­¸WøÜXYzò-öY€üͯñ u‘æËew>õŸnW¾Ë.°ëïFKIîæ:½ÞÇ.;g+øÔO¾ˆ²³Cð‹/RlG:½¬Sí<ô:X]½Ÿÿe/öY·¸Ã,ÿ \ï°ßêæ·R‘Ê‚*èx8ãìãJ"ÈYS ¢18ÞÉ…ŠžšÓ Öû…ÀD‚_¿ á _ œT˜«÷À£g]£%ÛBçöXk´s£Ãdt(”o*ä¶{Ðû•a[qâ÷(DÚˆ°cü?Ó$ÖitU^P0׌Wü8`ÖªÄ(JC— ~Xã"\B«7¤}g+՛ȜàXidrÅØžH…¶¡µ3ý8·«MzDºÌþã*çðùŠ’aDøº\)Ú\y¡Ã‚Œ@•ãqÖÛ©2ñCãÌRrα!û{ˆ?žü³¸” çuŵo¨vµ¬gó¾Î&ßøh€©¢uqUÎ|`Ñ««Å‚3Sæ bÀz^@Î’©½%Ì{݃ï¸';|_“j³iŒë&³`òÐ<‚Bð Ð×U–öV}Èô(1üÙdƒ¾ë[Z.¾7îçÌàñ0¥Š Ω¼ )á” ÉÛ•ÇLüøqñþjê­rWBßY¨ÖÓˆ²E{szo膖xŸmÒÃÔg”MÜ]lÝr¬ÕËfKAÛÍœgeŠli.ÙJÉp±Usf¬Ïd1!Ò^jÒM,s¾ßzÛ9ªe“8ËH'õ)²R*Y.?Å.~‡þºŸƒ…!»Áo/3©œÕ#öÓ[{ü™V—9:¡‰îâ.:;)ò¾É1áò"Hw.É5ʦ/<­ô²±Û’/»ü]]ù:¢ö—r³ø|dwîæ‘Õ¥Æ*pýØÙÚóÕyøœ¢è÷îV¾öÚ–/cXYUàúV3"¬é¬V"·êItÂÎ8žåµIŠE#öåHXp_ЄÑ9÷L›Õsò‰ —tT[H¨³ Oex–Öª©(Sf©í¡…~sQvY]Ÿ?\ m›ÿLDÙ{cïvTqùCÊ EmµÛ'~vK6ݹsQ­›RØN骵6Çé¢bMÁgEÊðK6‰~Voa¢R ƒ}8áìÝ< ˆ-wn¸-•µO##Nxöׄœz O› L*9V[´[“TkRCZ½ì>#"ó€%mš÷IõLéIè"f Uð¦DØ4) ¾&Õ¸™\ˆ$—jc€ë1õs˜4Q³^)|\JÙ¹V3|Ä|=¿ v0Ç÷cÃéRIÌÔ›cDhøöÅþJG;®ÞY®ŽS#5´F¤+oš¦q;y‰_ö·+ÀB³0 õaO–{ ˜®Zº¦o^ª¶3ù2ÁOŒk'½•¦"Èò¦øîæ•ÚVØ×ŸWU ×,l»}V¢5ñÈI˜^ê ̸iJÚ’9Ǩ Øköy­nfÂSÛLyêÕʹݨu´4Ïè%åZM§ÕñÖëß1Z:’åÄAÄgÍÙwk±…e¦:ý7¶y߯٧h¥ä¶ñ #9¨.f—N´éÔ;˜jÞÿ,Ú¢¼‘WB[­$žÝ­™è¼â‡oƒ9Ëg9åiÀÐ?Ô¢³ÂÌDt‰ë5 <€Óó…Þ2js~·H'o´@–̬IJ9w¦–,]¼Š¥´ÏÓJùøÀÅ=ÚôN'ˆÿësc–ºÉòêàî¨OÐg¢gi)õ¦çb„¼ÑC]è³qáD9Ò5Ê䈵3mòyBß<‰²VÉ)IoÕ>¡yNñp…-4¼¹þ¬Sæ±ÖZN‰"Àˆeò¹–~C Jåmˆ8$Œ¦èD^[Yí±²¼8[»ÕÁ0Ýë*=!AyQ-û¬°¹øÉ1|±ðV¹Y§9µž§hÂú4*õË6Bæ%wjy½7†ùfàB@³¶YßàKg—8»4ágÓÓ,#}ö¸_#¼aQEô]ì&l ²\ýw±—uܾ¡ÒE*ØæåÁ6lĘ‘ƒ–[9*2‘~æÔÇÝ:€HA Ü~ÀßcœqqׯõwÊ©+@zX²éó7¤ømC0ÞrP«Jצ'ΔJÌi ²ˆØÛ Ð$1» Ä:ŠåUw¸ž˜"‡ž&½`æ~&¼PÛ™›%¾ú‰RÊrî%¶ü´ZH¿QÖwGÞû ²ïµGð2ýa‰(ÐF}á7 ­¢¥:•º# Bõª?j7‹4(ÿ=F>´šÒž:×÷÷¢Yòà#;ŽSblÚ€ˆtVî†ê»ã 9ùV8j-tlâ̵‹z¯TS¼V}µ*yö,›ÖŒÞÀ÷åª;µÊ"³‹Œê`ƒr£æý  ÉÔçã‡Ì\±‚Žy)1vç¼z¥b"[‚°*Jv/.:<ÐL›ñ!ÿx6[ÊÆòAôU->+½À˜ " ‰ éö…À68>íý'³ɦïBŠeÞ>u5EMqu«u|Ÿ’ƒÖ2!(qåÌî?Y´4C)7ì°ŠúUd²þ¼5ÑÓ _`BVŸhöuÇåéhe•Kø–qlbȇ©Ùéê<–`ˆsã^{TxUQLM&˜l·&›˜ß<æ ×IëN­pyÖÂ݈zŠç肼J¼ÎçM*Ÿ!L&tʧ°u¨>ð¦Æœ €1è#ŸîÜÜå¨àœcûœ‰Ú’˜Q§_FÞÃÑ)«M-ñÇe:ãþ¸'xX¿ ]í¶'nÙU’É—:²Z‰&¸0ÇÄÏbµaÞ.¤¶¹eôm£cÎEµXÕEkˆ³ðE;‡êž@ôV8AÉöøØ °ˆÆïÏA;3Ì®nº ¬{f&—Ú‡Œ÷]ýoTÚU >h²øù)¶·k÷-Õ›¼ÁwX¼ùHà¸u¥_aõñ­ –ö,Ž'ÜB)XCAnÞâ¹&x{™€S@NNF€Å–ãz×À…Ó–9EÕÃ(ëë\Ê™¼ñð>¾µtLn”ï¾58z•“y¬±ˆAÖw¦Z®Lthm½õF »Jö¿Ä:=­ XöÆ<)ë5¬`ˆ‚£Î-¾Â¢^ÅW¢fQ 4ŠN`<{ ‹†Rˆý›$ž}‘}\°¢Yx9*ñÓ„}am,‘ð1›,Ik”è/“‰)Tîz‡#êö5úÞrÑž„lv¦u.;}˜P¬mGÑúBQaÉÓ?‡"‚ˆ3ºåÉú9Îo½bjaÏß·EÝ©Ÿ@«à#­ +å¾–ˆtp(˜Øì(YÝÈ—œD~eþæƒðB"Mð®{ƒÕânÝ͹.¥ç¼zíTÄSXOà‡–(¯;æF¦õBÂc¯³ÙG?<ôâs™4Ú¬BŽÈÈ×"bˆû–©„6 ZÈ#NAGW¾æá¥…Küª¡#5ÖÛn³¡Ç…)»2 ”:ÇÌr}^! X-vŒ;¬Yn÷†OÌi4Ï3±)ñ⾜MCM±š¼÷›Ñ€¼Ë`¡¹'ŸÚªä7G²0´“TPŠ !›í›‹ œÄbÞFEÄrjNßÙJÇ!h¹ÁNg¬7Q ê]mš’>ܽŽc°ØóŸ‰—¯¹ÇçHXò W¯ÝÓ 8‡hÓDù𓋲ЯóÆÅâî¦$µv…´–*÷ ºú\Ðä«Å¨#lí@gþº,] 5á)®ãŒÞrç`6ÍÉQnºË*ž§ Y·žÚľÃÜí»z #¿ÑÓEœÎÃÓ©“Un‚í©s—Ý–c([ŒÓ× ˆ§ã·„Jy‡ñÝÓðD'–Ì™ÂÚ[Rw"Hçñ¾GgÊ¡åB¥¯ Èvœ¯ËØz}nr»$_uÁîüíÃü”ÞÑ2úÛ'å^é>éé÷ï/ÚTSÂj`rw·:Ztšq÷„Ø ûRüµ<Å:gB*c–½qõôªýêäõ»o—ôö'¾F»ZÓü²P›¼ÉvAœ™™Ì(k¾N`Ï`kxkÿþ;¹lœZOQÌQ"ìT9 ¾_âQr7{iô`õޱ™‡êý{`øæ¿§)ysñd÷âøhkøVˆh·;À2(´ÏÄz´y´}²¹ºéÅãkLzÅ ï¯'óɬąÅ>ìõN4Ls<•‘i}KÞ(çAº]ö[Þ³ØÖ£l°x›1çóz+Ò 2Ô¶ãï×Lj ôçEw+ÃMÎvsðOåͧ{ý*'J©r'6Ìñ~b¤'⸣½+Õb`>¢ëñ05[’¤©ÿâ¹ÎâOÚ˜Ó*Xpü¹„wDÕXìHj ÛÂ_û)—xG³Æ·°M€ †ÉY—5¹™<Ð6P„8®5<¥­¼o2/ ›| .gwϧzÒÌ5…s`#wßK°Ä`ãe µW¨3·fÙÌL^r-mQh«ËÉ4ÏqF?¬u¼êßeAèû== Y(ªõÑ*ÚNìì§1é 69¾¨x≈NçÚj‹$ Û] Æ —×[¿m:CÍÙzžß›Ž6kYF™ÿD)(E*˱¡ê˜g¢•Mx›’*³Í]‡ gÉw ÔÒ(ŠluÄð/R­—¤l÷w«ï(5Ƴ±ÙHhï¼êÏ0F$kDQVcMKÉ·§Ãï ã x9Ð|.*Ψ6¢³§n¯â¥u ¡¿àÔµ òþ¬J’¶X+ež'c¢žã·oržb³4 š"g˜ È£ÚÍù®ñƒ=¶T6†s)*é_¿­g DZøÃÚ„H¶i>|eX¤e úûâ „A5%áê}VÉ»3/.7ÁêØQíj}­$ÍtCeÈ ŽÔ7¿@éˆA»/tÔõèî¼ ñé©àöñ÷ÄÁŸÌ‡GõoÂ+¤÷Ñä‰QPVQ¹6ÝÁ_-$Í4gØh‹ Ðo“EÖ[%‹+Nbnu*$4ß^t©°¡• 6›f–6¾¡måÞJPi–{áT70…>,†_ÄÇoôK?IÒ†º$ÛðšHýú>Ðÿú%ŸœÞ4[áìš¡ýƒÊr6‚†*¦YS𠇦aƒjBc¡¾+3ò$€bö0œis™ôŽìð‚ ¬>(4*ͦpXýòy'|·Ø¶Šíx‚Zgÿ«°$Û3½ŸŽûnކ¨I[&vE¿ ¢Ë¤Ž…Žú£Ö¾ã¡Úh¤šû‹Âø?s· Û€#àó놧'²s㽿I«ao…kO;Yq½<>aÂ"—mѳ+_ðYm'ŠÏ/è1ËÓ,æ­±þHÿàÿ 3[ q°‚mþ óçÉendstream endobj 42 0 obj << /Type /Font /Subtype /Type1 /Encoding 174 0 R /FirstChar 40 /LastChar 118 /Widths 181 0 R /BaseFont /YGGKQU+NimbusSanL-Bold /FontDescriptor 40 0 R >> endobj 40 0 obj << /Ascent 722 /CapHeight 722 /Descent -217 /FontName /YGGKQU+NimbusSanL-Bold /ItalicAngle 0 /StemV 141 /XHeight 532 /FontBBox [-173 -307 1003 949] /Flags 4 /CharSet (/parenleft/parenright/period/one/two/three/colon/at/A/B/C/D/I/L/M/N/P/Q/S/T/a/b/c/d/e/f/g/h/i/k/l/m/n/o/p/q/r/s/t/u/v) /FontFile 41 0 R >> endobj 181 0 obj [333 333 0 0 0 0 278 0 0 556 556 556 0 0 0 0 0 0 333 0 0 0 0 0 975 722 722 722 722 0 0 0 0 278 0 0 611 833 722 0 667 778 0 667 611 0 0 0 0 0 0 0 0 0 0 0 0 556 611 556 611 556 333 611 611 278 0 556 278 889 611 611 611 611 389 556 333 611 556 ] endobj 43 0 obj << /Type /Pages /Count 6 /Parent 182 0 R /Kids [34 0 R 45 0 R 53 0 R 81 0 R 94 0 R 99 0 R] >> endobj 156 0 obj << /Type /Pages /Count 2 /Parent 182 0 R /Kids [146 0 R 158 0 R] >> endobj 182 0 obj << /Type /Pages /Count 8 /Kids [43 0 R 156 0 R] >> endobj 183 0 obj << /Type /Outlines /First 3 0 R /Last 31 0 R /Count 6 >> endobj 31 0 obj << /Title 32 0 R /A 29 0 R /Parent 183 0 R /Prev 19 0 R >> endobj 27 0 obj << /Title 28 0 R /A 25 0 R /Parent 19 0 R /Prev 23 0 R >> endobj 23 0 obj << /Title 24 0 R /A 21 0 R /Parent 19 0 R /Next 27 0 R >> endobj 19 0 obj << /Title 20 0 R /A 17 0 R /Parent 183 0 R /Prev 15 0 R /Next 31 0 R /First 23 0 R /Last 27 0 R /Count -2 >> endobj 15 0 obj << /Title 16 0 R /A 13 0 R /Parent 183 0 R /Prev 11 0 R /Next 19 0 R >> endobj 11 0 obj << /Title 12 0 R /A 9 0 R /Parent 183 0 R /Prev 7 0 R /Next 15 0 R >> endobj 7 0 obj << /Title 8 0 R /A 5 0 R /Parent 183 0 R /Prev 3 0 R /Next 11 0 R >> endobj 3 0 obj << /Title 4 0 R /A 1 0 R /Parent 183 0 R /Next 7 0 R >> endobj 184 0 obj << /Names [(0) 39 0 R (1.0) 2 0 R (14) 74 0 R (16) 84 0 R (17) 85 0 R (18) 86 0 R (19) 87 0 R (2.0) 6 0 R (20) 88 0 R (21) 89 0 R (22) 90 0 R (23) 91 0 R (24) 92 0 R (25) 75 0 R (27) 96 0 R (28) 97 0 R (29) 76 0 R (3.0) 10 0 R (31) 101 0 R (32) 77 0 R (34) 102 0 R (35) 103 0 R (37) 104 0 R (38) 105 0 R (39) 106 0 R (4.0) 14 0 R (40) 107 0 R (42) 108 0 R (43) 109 0 R (44) 110 0 R (45) 111 0 R (46) 78 0 R (48) 112 0 R (49) 113 0 R (5.0) 18 0 R (5.1.1) 22 0 R (5.2.1) 26 0 R (50) 117 0 R (51) 118 0 R (52) 119 0 R (53) 123 0 R (54) 124 0 R (55) 125 0 R (56) 126 0 R (57) 127 0 R (58) 128 0 R (59) 129 0 R (6.0) 30 0 R (60) 130 0 R (61) 131 0 R (62) 132 0 R (63) 133 0 R (64) 134 0 R (65) 135 0 R (66) 136 0 R (67) 137 0 R (68) 138 0 R (69) 142 0 R (70) 143 0 R (71) 148 0 R (72) 149 0 R (73) 150 0 R (74) 144 0 R (75) 151 0 R (76) 152 0 R (77) 153 0 R (78) 154 0 R (79) 155 0 R (80) 79 0 R (82) 160 0 R (83) 161 0 R (84) 162 0 R (85) 163 0 R (87) 164 0 R (88) 165 0 R (89) 166 0 R (90) 167 0 R (91) 168 0 R (93) 169 0 R (94) 170 0 R (95) 171 0 R (96) 172 0 R (97) 173 0 R (Doc-Start) 38 0 R (page.1) 37 0 R (page.2) 47 0 R (page.3) 55 0 R (page.4) 83 0 R (table.1) 51 0 R] /Limits [(0) (table.1)] >> endobj 185 0 obj << /Kids [184 0 R] >> endobj 186 0 obj << /Dests 185 0 R >> endobj 187 0 obj << /Type /Catalog /Pages 182 0 R /Outlines 183 0 R /Names 186 0 R /PageMode /UseOutlines /OpenAction 33 0 R >> endobj 188 0 obj << /Author()/Title()/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfeTeX-1.21a)/Keywords() /CreationDate (D:20130312005333+01'00') /PTEX.Fullbanner (This is pdfeTeX, Version 3.141592-1.21a-2.2 (Web2C 7.5.4) kpathsea version 3.5.4) >> endobj xref 0 189 0000000000 65535 f 0000000009 00000 n 0000001386 00000 n 0000108117 00000 n 0000000048 00000 n 0000000088 00000 n 0000014347 00000 n 0000108033 00000 n 0000000127 00000 n 0000000162 00000 n 0000015590 00000 n 0000107947 00000 n 0000000201 00000 n 0000000227 00000 n 0000016983 00000 n 0000107859 00000 n 0000000267 00000 n 0000000309 00000 n 0000019043 00000 n 0000107734 00000 n 0000000349 00000 n 0000000391 00000 n 0000019226 00000 n 0000107660 00000 n 0000000433 00000 n 0000000470 00000 n 0000019959 00000 n 0000107586 00000 n 0000000512 00000 n 0000000573 00000 n 0000024219 00000 n 0000107511 00000 n 0000000613 00000 n 0000000657 00000 n 0000001088 00000 n 0000001447 00000 n 0000000707 00000 n 0000001206 00000 n 0000001266 00000 n 0000001326 00000 n 0000106592 00000 n 0000096525 00000 n 0000106423 00000 n 0000107174 00000 n 0000002110 00000 n 0000001872 00000 n 0000001517 00000 n 0000001990 00000 n 0000095720 00000 n 0000078528 00000 n 0000095549 00000 n 0000002050 00000 n 0000014408 00000 n 0000012308 00000 n 0000002192 00000 n 0000014287 00000 n 0000012522 00000 n 0000077928 00000 n 0000067332 00000 n 0000077757 00000 n 0000012669 00000 n 0000012817 00000 n 0000012964 00000 n 0000013111 00000 n 0000013258 00000 n 0000013405 00000 n 0000013552 00000 n 0000013699 00000 n 0000013846 00000 n 0000013993 00000 n 0000014140 00000 n 0000066851 00000 n 0000057607 00000 n 0000066675 00000 n 0000015530 00000 n 0000016923 00000 n 0000018983 00000 n 0000019166 00000 n 0000019900 00000 n 0000024158 00000 n 0000016200 00000 n 0000015352 00000 n 0000014514 00000 n 0000015470 00000 n 0000015652 00000 n 0000015712 00000 n 0000015772 00000 n 0000015834 00000 n 0000015894 00000 n 0000015954 00000 n 0000016016 00000 n 0000016078 00000 n 0000016138 00000 n 0000017165 00000 n 0000016805 00000 n 0000016294 00000 n 0000017045 00000 n 0000017105 00000 n 0000021487 00000 n 0000018864 00000 n 0000017259 00000 n 0000019105 00000 n 0000019286 00000 n 0000019347 00000 n 0000019407 00000 n 0000019468 00000 n 0000019529 00000 n 0000019591 00000 n 0000019654 00000 n 0000019714 00000 n 0000019775 00000 n 0000019837 00000 n 0000020021 00000 n 0000020082 00000 n 0000057076 00000 n 0000046197 00000 n 0000056905 00000 n 0000020142 00000 n 0000020203 00000 n 0000020264 00000 n 0000045694 00000 n 0000035354 00000 n 0000045523 00000 n 0000020325 00000 n 0000020385 00000 n 0000020447 00000 n 0000020508 00000 n 0000020569 00000 n 0000020631 00000 n 0000020692 00000 n 0000020753 00000 n 0000020815 00000 n 0000020876 00000 n 0000020938 00000 n 0000020999 00000 n 0000021060 00000 n 0000021121 00000 n 0000021183 00000 n 0000021244 00000 n 0000034688 00000 n 0000027168 00000 n 0000034518 00000 n 0000021305 00000 n 0000021367 00000 n 0000021427 00000 n 0000022939 00000 n 0000022319 00000 n 0000021632 00000 n 0000022441 00000 n 0000022503 00000 n 0000022565 00000 n 0000022628 00000 n 0000022689 00000 n 0000022750 00000 n 0000022813 00000 n 0000022875 00000 n 0000107284 00000 n 0000025159 00000 n 0000024036 00000 n 0000023048 00000 n 0000024282 00000 n 0000024344 00000 n 0000024408 00000 n 0000024472 00000 n 0000024534 00000 n 0000024596 00000 n 0000024657 00000 n 0000024720 00000 n 0000024784 00000 n 0000024848 00000 n 0000024910 00000 n 0000024972 00000 n 0000025035 00000 n 0000025097 00000 n 0000025280 00000 n 0000035012 00000 n 0000045967 00000 n 0000057371 00000 n 0000067124 00000 n 0000078218 00000 n 0000096137 00000 n 0000106914 00000 n 0000107369 00000 n 0000107437 00000 n 0000108188 00000 n 0000109406 00000 n 0000109445 00000 n 0000109483 00000 n 0000109612 00000 n trailer << /Size 189 /Root 187 0 R /Info 188 0 R /ID [<87A24E38270A0CCC34B93C8BF6A61000> <87A24E38270A0CCC34B93C8BF6A61000>] >> startxref 109875 %%EOF libdbi-drivers-0.9.0/drivers/msql/dbd_msql/c26.html000644 001750 001750 00000004075 12117467176 023010 0ustar00markusmarkus000000 000000 Introduction

    Chapter 1. Introduction

    Mini SQL is a light-weight SQL Database engine. It has a very small footprint and is well suited for embedded projects when you need the facility of a full blown database engine but have to be really carefull spending resources.

    libdbi-drivers-0.9.0/drivers/msql/dbd_msql/c30.html000644 001750 001750 00000004141 12117467176 022775 0ustar00markusmarkus000000 000000 Installation

    Chapter 2. Installation

    This chapter describes the prerequisites and the procedures to build and install the Mini SQL driver from the sources.

    libdbi-drivers-0.9.0/drivers/msql/dbd_msql/c81.html000644 001750 001750 00000005335 12117467176 023011 0ustar00markusmarkus000000 000000 Driver options

    Chapter 3. Driver options

    Your application has to initialize libdbi drivers by setting some driver options with the dbi_conn_set_option() and the dbi_conn_set_option_numeric() library functions. Mini SQL uses the following options::

    dbname

    The name of the database you want to connect to. dbname can be any existing database in the Mini SQL installation created with msqladmin create dbname.

    host

    This is the name or ip-address of the host where the Mini SQL database is located.

    Note: If you want to connect to a database on localhost don't use this option. Specifying localhost will force TCP usage instedd of UNIX Domain socket usage (if the server is configured for TCP) Mini SQL is much faster using a UNIX domain socket.

    libdbi-drivers-0.9.0/drivers/msql/dbd_msql/f15.html000644 001750 001750 00000005724 12117467176 023013 0ustar00markusmarkus000000 000000 Preface

    Preface

    libdbi is a database abstraction layer written in C. It implements a framework that can utilize separate driver libraries for specific database servers. The libdbi-drivers project provides the drivers necessary to talk to the supported database servers.

    This manual provides information about the Mini SQL driver. The manual is intended for programmers who write applications linked against libdbi and who want their applications to work with the Mini SQL driver.

    Questions and comments about the Mini SQL driver should be sent to the libdbi-drivers-devel mailing list. Visit the libdbi-drivers-devel list page to subscribe and for further information. Questions and comments about the libdbi library should be sent to the appropriate libdbi mailing list.

    The Mini SQL driver is maintained by Christian Stamgren.

    libdbi-drivers-0.9.0/drivers/msql/dbd_msql/index.html000644 001750 001750 00000004227 12117467176 023524 0ustar00markusmarkus000000 000000 Mini SQL driver manual

    Mini SQL driver manual

    A libdbi driver for the Mini SQL (mSQL) database

    Christian Stamgren

    Revision History
    Revision 0.12003-04-14

    libdbi-drivers-0.9.0/drivers/msql/dbd_msql/x33.html000644 001750 001750 00000005326 12117467176 023033 0ustar00markusmarkus000000 000000 Prerequisites

    2.1. Prerequisites

    The following packages have to be installed on your system:

    libdbi

    This library provides the framework of the database abstraction layer which can utilize the sqlite driver to perform database operations. The download page as well as the mailing lists with bug reports and patches are accessible at sourceforge.net/projects/libdbi. The current version of the sqlite driver requires at least libdbi version 0.6.7.

    Mini SQL

    Yes, you'll need the acctual database installed. Funny isn't it? http://www.hugnes.com.au/producs/msql/

    libdbi-drivers-0.9.0/drivers/msql/dbd_msql/x47.html000644 001750 001750 00000011043 12117467176 023031 0ustar00markusmarkus000000 000000 Build and install the Mini SQL driver

    2.2. Build and install the Mini SQL driver

    First you have to unpack the libdbi-drivers archive in a suitable directory. Unpacking will create a new subdirectory libdbi-drivers-X.Y where "X.Y" denotes the version:

    $ tar -xzf libdbi-drivers-x.y.tar.gz

    The libdbi-drivers project consists of several drivers that use a common build system. Therefore you must tell configure explicitly that you want to build the Mini SQL driver (you can list as many drivers as you want to build):

    $ cd libdbi-drivers
    $ ./configure --with-msql

    Run ./configure --help to find out about additional options.

    Then build the driver with the command:

    $ make

    Note: Please note that you may have to invoke gmake, the GNU version of make, on some systems.

    Then install the driver with the command (you'll need root permissions to do this):

    $ make install

    To test the operation of the newly installed driver, use the command:

    $ make check

    This command creates and runs a test program that performs a few basic input and output tests. The program will ask for a database name and a host name. If you havn't configured Mini SQL to use TCP just press enter at the hostname selection to pass NULL to Mini SQL's connect() function indicating that you want to use a local socket.

    libdbi-drivers-0.9.0/drivers/sqlite3/dbd_sqlite3/000755 001750 001750 00000000000 12117473272 022534 5ustar00markusmarkus000000 000000 libdbi-drivers-0.9.0/drivers/sqlite3/README000644 001750 001750 00000004412 10244163310 021204 0ustar00markusmarkus000000 000000 libdbi-drivers - drivers for libdbi, the Database Independent Abstraction Layer for C Copyright (C) 2001-2002, Markus Hoenicka http://libdbi-drivers.sourceforge.net SQLITE3 DRIVER: -------------- A driver implementing an embedded SQL engine using libsqlite3 (http://www.sqlite.org) NOTES: ------ The sqlite3 driver ignores the host, port, username, and password options completely as the sqlite3 access control works entirely over the filesystem. If you're allowed to run an application linked against libdbi and if the sqlite3 driver can be loaded from your account, you have access to the "database server". If the file containing the sqlite3 database is read/writable from your account, you have read/write access to that database. The sqlite3 driver uses two driver-specific options: - In order to make the operation as a libdbi driver feasible, you have to assign one directory of your filesystem as the sqlite3 data directory by setting the "sqlite3_dbdir" option appropriately. The driver will look for existing databases in this directory and it will create new databases in the very same directory. - SQLite3 can be operated in UTF-8 or UTF-16 mode. This distinction is a little confusing as it doesn't mean that your data have to be either UTF-8 or UTF-16. Rather think of UTF-8 as "everything but UTF-16". UTF-16 means that you have to provide the filename of the database as an UTF-16 string, and that the data have to be supplied and will be stored as UTF-16 if you use this option when first opening a database. If you use UTF-8 instead (the default), you can use just about any character encoding that you like, including e.g. ISO-8859-1 and of course UTF-8, as long as it is *NOT* UTF-16. In UTF-8 mode, collation will be as if the data were UTF-8, and libdbi currently does not allow to specify custom collations. To select either encoding, set "sqlite3_encoding" to "UTF-8" or "UTF-16". If all this sounds too confusing to you, don't use this option and provide your data as UTF-8. It is going to work. CONTACT INFO: ------------- libdbi-drivers-devel@lists.sourceforge.net http://libdbi-drivers.sourceforge.net Markus Hoenicka $Id: README,v 1.2 2005/05/22 20:08:40 mhoenicka Exp $ libdbi-drivers-0.9.0/drivers/sqlite3/Makefile.am000644 001750 001750 00000003353 11447722452 022401 0ustar00markusmarkus000000 000000 ## Process this file with automake to produce Makefile.in AUTOMAKE_OPTIONS = foreign docdir = $(datadir)/doc/$(PACKAGE)-$(VERSION) if HAVE_SQLITE3 if BUILDDOCS htdocdir = $(docdir)/dbd_sqlite3 doc_DATA = dbd_sqlite3.pdf htdoc_DATA = dbd_sqlite3/* else htdocdir = doc_DATA = htdoc_DATA = endif sqlite3_ltlibs = libdbdsqlite3.la sqlite3_ldflags = -module -avoid-version sqlite3_sources = dbd_sqlite3.c else htdocdir = doc_DATA = htdoc_DATA = sqlite3_ltlibs = sqlite3_ldflags = sqlite3_sources = endif INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/include @DBI_INCLUDE@ @SQLITE3_INCLUDE@ libdir = $(driverdir) lib_LTLIBRARIES = $(sqlite3_ltlibs) libdbdsqlite3_la_LDFLAGS = $(sqlite3_ldflags) @SQLITE3_LDFLAGS@ @SQLITE3_LIBS@ @LIBADD_LIBDBI@ libdbdsqlite3_la_SOURCES = $(sqlite3_sources) libdbdsqlite3_la_DEPENDENCIES = dbd_sqlite3.h AM_CPPFLAGS=-DDBDIR=\"@dbi_dbdir@/sqlite3\" EXTRA_DIST = dbd_sqlite3.c dbd_sqlite3.h AUTHORS TODO README dbd_sqlite3.sgml dbd_sqlite3.pdf dbd_sqlite3/* # jadetex spews out tons of useless crap. shut it up: dbd_sqlite3.pdf: dbd_sqlite3.sgml @echo "Converting dbd_sqlite3.sgml to PDF..."; openjade -t tex -V tex-backend -d $(top_srcdir)/doc/include/doc-print.dsl dbd_sqlite3.sgml # run jadetex three times to get the references right pdftex "&pdfjadetex" dbd_sqlite3.tex pdftex "&pdfjadetex" dbd_sqlite3.tex pdftex "&pdfjadetex" dbd_sqlite3.tex dbd_sqlite3/*: dbd_sqlite3.sgml @echo "Converting dbd_sqlite3.sgml to HTML..."; mkdir -p dbd_sqlite3 && cd dbd_sqlite3 && openjade -t sgml -d $(top_srcdir)/../doc/include/doc-html.dsl ../dbd_sqlite3.sgml maintainer-clean: clean rm -f dbd_sqlite3.pdf dbd_sqlite3/* install-exec-local: $(mkinstalldirs) $(DESTDIR)@dbi_dbdir@/sqlite3 chmod 1777 $(DESTDIR)@dbi_dbdir@/sqlite3 libdbi-drivers-0.9.0/drivers/sqlite3/Makefile.in000644 001750 001750 00000055726 12117467053 022423 0ustar00markusmarkus000000 000000 # Makefile.in generated by automake 1.12.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2012 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = drivers/sqlite3 DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(top_srcdir)/depcomp AUTHORS TODO ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(docdir)" \ "$(DESTDIR)$(htdocdir)" LTLIBRARIES = $(lib_LTLIBRARIES) libdbdsqlite3_la_LIBADD = am__libdbdsqlite3_la_SOURCES_DIST = dbd_sqlite3.c @HAVE_SQLITE3_TRUE@am__objects_1 = dbd_sqlite3.lo am_libdbdsqlite3_la_OBJECTS = $(am__objects_1) libdbdsqlite3_la_OBJECTS = $(am_libdbdsqlite3_la_OBJECTS) libdbdsqlite3_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(libdbdsqlite3_la_LDFLAGS) $(LDFLAGS) -o $@ @HAVE_SQLITE3_TRUE@am_libdbdsqlite3_la_rpath = -rpath $(libdir) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(libdbdsqlite3_la_SOURCES) DIST_SOURCES = $(am__libdbdsqlite3_la_SOURCES_DIST) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac DATA = $(doc_DATA) $(htdoc_DATA) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DB2_INCLUDE = @DB2_INCLUDE@ DB2_LDFLAGS = @DB2_LDFLAGS@ DB2_LIBS = @DB2_LIBS@ DB2_TEST = @DB2_TEST@ DBI_INCLUDE = @DBI_INCLUDE@ DEBUG = @DEBUG@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FIREBIRD_INCLUDE = @FIREBIRD_INCLUDE@ FIREBIRD_ISQL = @FIREBIRD_ISQL@ FIREBIRD_ISQL_FLAG = @FIREBIRD_ISQL_FLAG@ FIREBIRD_LDFLAGS = @FIREBIRD_LDFLAGS@ FIREBIRD_LIBS = @FIREBIRD_LIBS@ FIREBIRD_TEST = @FIREBIRD_TEST@ FREETDS_INCLUDE = @FREETDS_INCLUDE@ FREETDS_LDFLAGS = @FREETDS_LDFLAGS@ FREETDS_LIBS = @FREETDS_LIBS@ FREETDS_TEST = @FREETDS_TEST@ GREP = @GREP@ INGRES_INCLUDE = @INGRES_INCLUDE@ INGRES_LDFLAGS = @INGRES_LDFLAGS@ INGRES_LIBS = @INGRES_LIBS@ INGRES_TEST = @INGRES_TEST@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBADD_LIBDBI = @LIBADD_LIBDBI@ LIBDBI_LIBDIR = @LIBDBI_LIBDIR@ LIBDBI_TEST = @LIBDBI_TEST@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSQL_INCLUDE = @MSQL_INCLUDE@ MSQL_LDFLAGS = @MSQL_LDFLAGS@ MSQL_LIBS = @MSQL_LIBS@ MSQL_TEST = @MSQL_TEST@ MYSQL_CONFIG = @MYSQL_CONFIG@ MYSQL_INCLUDE = @MYSQL_INCLUDE@ MYSQL_LDFLAGS = @MYSQL_LDFLAGS@ MYSQL_LIBS = @MYSQL_LIBS@ MYSQL_TEST = @MYSQL_TEST@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ ORACLE_INCLUDE = @ORACLE_INCLUDE@ ORACLE_LDFLAGS = @ORACLE_LDFLAGS@ ORACLE_LIBS = @ORACLE_LIBS@ ORACLE_TEST = @ORACLE_TEST@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PGSQL_INCLUDE = @PGSQL_INCLUDE@ PGSQL_LDFLAGS = @PGSQL_LDFLAGS@ PGSQL_LIBS = @PGSQL_LIBS@ PGSQL_TEST = @PGSQL_TEST@ PG_CONFIG = @PG_CONFIG@ PROFILE = @PROFILE@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SQLITE3_INCLUDE = @SQLITE3_INCLUDE@ SQLITE3_LDFLAGS = @SQLITE3_LDFLAGS@ SQLITE3_LIBS = @SQLITE3_LIBS@ SQLITE3_TEST = @SQLITE3_TEST@ SQLITE_INCLUDE = @SQLITE_INCLUDE@ SQLITE_LDFLAGS = @SQLITE_LDFLAGS@ SQLITE_LIBS = @SQLITE_LIBS@ SQLITE_TEST = @SQLITE_TEST@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ dbi_dbdir = @dbi_dbdir@ docdir = $(datadir)/doc/$(PACKAGE)-$(VERSION) docs_subdirs = @docs_subdirs@ driverdir = @driverdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = $(driverdir) libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = foreign @BUILDDOCS_FALSE@@HAVE_SQLITE3_TRUE@htdocdir = @BUILDDOCS_TRUE@@HAVE_SQLITE3_TRUE@htdocdir = $(docdir)/dbd_sqlite3 @HAVE_SQLITE3_FALSE@htdocdir = @BUILDDOCS_FALSE@@HAVE_SQLITE3_TRUE@doc_DATA = @BUILDDOCS_TRUE@@HAVE_SQLITE3_TRUE@doc_DATA = dbd_sqlite3.pdf @HAVE_SQLITE3_FALSE@doc_DATA = @BUILDDOCS_FALSE@@HAVE_SQLITE3_TRUE@htdoc_DATA = @BUILDDOCS_TRUE@@HAVE_SQLITE3_TRUE@htdoc_DATA = dbd_sqlite3/* @HAVE_SQLITE3_FALSE@htdoc_DATA = @HAVE_SQLITE3_FALSE@sqlite3_ltlibs = @HAVE_SQLITE3_TRUE@sqlite3_ltlibs = libdbdsqlite3.la @HAVE_SQLITE3_FALSE@sqlite3_ldflags = @HAVE_SQLITE3_TRUE@sqlite3_ldflags = -module -avoid-version @HAVE_SQLITE3_FALSE@sqlite3_sources = @HAVE_SQLITE3_TRUE@sqlite3_sources = dbd_sqlite3.c INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/include @DBI_INCLUDE@ @SQLITE3_INCLUDE@ lib_LTLIBRARIES = $(sqlite3_ltlibs) libdbdsqlite3_la_LDFLAGS = $(sqlite3_ldflags) @SQLITE3_LDFLAGS@ @SQLITE3_LIBS@ @LIBADD_LIBDBI@ libdbdsqlite3_la_SOURCES = $(sqlite3_sources) libdbdsqlite3_la_DEPENDENCIES = dbd_sqlite3.h AM_CPPFLAGS = -DDBDIR=\"@dbi_dbdir@/sqlite3\" EXTRA_DIST = dbd_sqlite3.c dbd_sqlite3.h AUTHORS TODO README dbd_sqlite3.sgml dbd_sqlite3.pdf dbd_sqlite3/* all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign drivers/sqlite3/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign drivers/sqlite3/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ } uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libdbdsqlite3.la: $(libdbdsqlite3_la_OBJECTS) $(libdbdsqlite3_la_DEPENDENCIES) $(EXTRA_libdbdsqlite3_la_DEPENDENCIES) $(libdbdsqlite3_la_LINK) $(am_libdbdsqlite3_la_rpath) $(libdbdsqlite3_la_OBJECTS) $(libdbdsqlite3_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dbd_sqlite3.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-docDATA: $(doc_DATA) @$(NORMAL_INSTALL) @list='$(doc_DATA)'; test -n "$(docdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(docdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(docdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(docdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(docdir)" || exit $$?; \ done uninstall-docDATA: @$(NORMAL_UNINSTALL) @list='$(doc_DATA)'; test -n "$(docdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(docdir)'; $(am__uninstall_files_from_dir) install-htdocDATA: $(htdoc_DATA) @$(NORMAL_INSTALL) @list='$(htdoc_DATA)'; test -n "$(htdocdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(htdocdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(htdocdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(htdocdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(htdocdir)" || exit $$?; \ done uninstall-htdocDATA: @$(NORMAL_UNINSTALL) @list='$(htdoc_DATA)'; test -n "$(htdocdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(htdocdir)'; $(am__uninstall_files_from_dir) ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(DATA) installdirs: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(docdir)" "$(DESTDIR)$(htdocdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-docDATA install-htdocDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-exec-local install-libLTLIBRARIES install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-docDATA uninstall-htdocDATA \ uninstall-libLTLIBRARIES .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libLTLIBRARIES clean-libtool cscopelist ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am \ install-docDATA install-dvi install-dvi-am install-exec \ install-exec-am install-exec-local install-htdocDATA \ install-html install-html-am install-info install-info-am \ install-libLTLIBRARIES install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am uninstall-docDATA \ uninstall-htdocDATA uninstall-libLTLIBRARIES # jadetex spews out tons of useless crap. shut it up: dbd_sqlite3.pdf: dbd_sqlite3.sgml @echo "Converting dbd_sqlite3.sgml to PDF..."; openjade -t tex -V tex-backend -d $(top_srcdir)/doc/include/doc-print.dsl dbd_sqlite3.sgml # run jadetex three times to get the references right pdftex "&pdfjadetex" dbd_sqlite3.tex pdftex "&pdfjadetex" dbd_sqlite3.tex pdftex "&pdfjadetex" dbd_sqlite3.tex dbd_sqlite3/*: dbd_sqlite3.sgml @echo "Converting dbd_sqlite3.sgml to HTML..."; mkdir -p dbd_sqlite3 && cd dbd_sqlite3 && openjade -t sgml -d $(top_srcdir)/../doc/include/doc-html.dsl ../dbd_sqlite3.sgml maintainer-clean: clean rm -f dbd_sqlite3.pdf dbd_sqlite3/* install-exec-local: $(mkinstalldirs) $(DESTDIR)@dbi_dbdir@/sqlite3 chmod 1777 $(DESTDIR)@dbi_dbdir@/sqlite3 # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: libdbi-drivers-0.9.0/drivers/sqlite3/AUTHORS000644 001750 001750 00000000301 10234516077 021400 0ustar00markusmarkus000000 000000 The following people have been involved in the SQLite3 driver development: Main developer: * Markus Hoenicka $Id: AUTHORS,v 1.1 2005/04/29 20:42:39 mhoenicka Exp $ libdbi-drivers-0.9.0/drivers/sqlite3/TODO000644 001750 001750 00000000233 10234516077 021024 0ustar00markusmarkus000000 000000 $Id: TODO,v 1.1 2005/04/29 20:42:39 mhoenicka Exp $ - improve the data type guessing code to support all SQL functions - define driver capabilities libdbi-drivers-0.9.0/drivers/sqlite3/dbd_sqlite3.c000644 001750 001750 00000153536 12077620311 022706 0ustar00markusmarkus000000 000000 /* * libdbi-drivers - database drivers for libdbi, a database independent * abstraction layer for C. * Copyright (C) 2002-2007, Markus Hoenicka * http://libdbi-drivers.sourceforge.net * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * dbd_sqlite3.c: SQLite3 database support (using libsqlite3) * Copyright (C) 2005-2007, Markus Hoenicka * http://libdbi-drivers.sourceforge.net * * $Id: dbd_sqlite3.c,v 1.49 2013/01/08 23:55:54 mhoenicka Exp $ */ #ifdef HAVE_CONFIG_H #include #endif #define _GNU_SOURCE /* we need asprintf */ /* this is defined by the Makefile and passed via -D */ /* #define DBDIR /usr/local/var/lib/libdbi/sqlite3 */ #ifndef HAVE_ATOLL long long atoll(const char *str); #endif #ifndef HAVE_STRTOLL long long strtoll(const char *nptr, char **endptr, int base); #endif #include #include #include #include #include /* defines _POSIX_PATH_MAX */ #include /* directory listings */ #include /* stat */ #include /* S_ISXX macros */ #include /* directory listings */ #include /* toupper, etc */ #include #include #include #include #include "dbd_sqlite3.h" static const dbi_info_t driver_info = { "sqlite3", "SQLite3 database support (using libsqlite3)", "Markus Hoenicka ", "http://libdbi-drivers.sourceforge.net", "dbd_sqlite3 v" VERSION, __DATE__ }; static const char *custom_functions[] = SQLITE3_CUSTOM_FUNCTIONS; static const char *reserved_words[] = SQLITE3_RESERVED_WORDS; static const char default_dbdir[] = DBDIR; /* the encoding strings */ static const char sqlite3_encoding_UTF8[] = "UTF-8"; static const char sqlite3_encoding_UTF16[] = "UTF-16"; /* pointers to sqlite3 functions - avoids tons of if/elses */ /* int (*my_sqlite3_open)(const char *,sqlite3 **); */ /* forward declarations */ static int _real_dbd_connect(dbi_conn_t *conn, const char* database); static void _translate_sqlite3_type(enum enum_field_types fieldtype, unsigned short *type, unsigned int *attribs); static void _get_row_data(dbi_result_t *result, dbi_row_t *row, unsigned long long rowidx); static int find_result_field_types(char* field, dbi_conn_t *conn, const char* statement); static int getTables(char** tables, int index, const char* statement, char* curr_table); static void freeTables(char** tables, int table_count); static char* get_field_type(char*** ptr_result_table, const char* curr_field_name, int numrows); static size_t sqlite3_escape_string(char *to, const char *from, size_t length); static int wild_case_compare(const char *str,const char *str_end, const char *wildstr,const char *wildend, char escape); static const char* _conn_get_dbdir(dbi_conn_t *conn); /* the real functions */ void dbd_register_driver(const dbi_info_t **_driver_info, const char ***_custom_functions, const char ***_reserved_words) { /* this is the first function called after the driver module is loaded into memory */ *_driver_info = &driver_info; *_custom_functions = custom_functions; *_reserved_words = reserved_words; } int dbd_initialize(dbi_driver_t *driver) { /* perform any database-specific server initialization. * this is called right after dbd_register_driver(). * return -1 on error, 0 on success. if -1 is returned, the driver will not * be added to the list of available drivers. */ /* this indicates the driver can be safely unloaded when libdbi is shut down. Change the value to '0' (zero) if the driver, or a library it is linked against, installs exit handlers via atexit() */ _dbd_register_driver_cap(driver, "safe_dlclose", 1); /* this indicates the database engine supports transactions */ _dbd_register_driver_cap(driver, "transaction_support", 1); /* this indicates the database engine supports savepoints */ _dbd_register_driver_cap(driver, "savepoint_support", 1); return 0; } int dbd_finalize(dbi_driver_t *driver) { /* perform any database-specific client library shutdown. * this is called right before dlclose()ing the driver. * return -1 on error, 0 on success. */ return 0; } int dbd_connect(dbi_conn_t *conn) { /* connect using the database set with the "dbname" option */ return _real_dbd_connect(conn, ""); } static int _real_dbd_connect(dbi_conn_t *conn, const char* database) { /* connect using the database passed as an argument. If passed NULL or an empty string, this function tries to use the database set with the "dbname" option */ sqlite3 *sqcon; int sqlite3_errcode; char* sq_errmsg = NULL; char* db_fullpath = NULL; /* ToDo: make OS-independent */ const char dirsep[] = "/"; const char *dbname; const char *dbdir; const char *encoding; int timeout; dbi_result dbi_result; /* initialize error stuff */ conn->error_number = 0; conn->error_message = NULL; /* sqlite3 does not use hostname, username, password, port */ if (database && *database) { dbname = database; } else { dbname = dbi_conn_get_option(conn, "dbname"); } if (!dbname) { _dbd_internal_error_handler(conn, "no database specified", DBI_ERROR_CLIENT); return -1; } encoding = dbi_conn_get_option(conn, "encoding"); if (!encoding) { /* use UTF-8 as default */ encoding = sqlite3_encoding_UTF8; } dbdir = _conn_get_dbdir(conn); if (!dbdir) { _dbd_internal_error_handler(conn, "no database directory specified", DBI_ERROR_CLIENT); return -1; } /* the requested database is a file in the given directory. Assemble full path of database */ db_fullpath = malloc(strlen(dbname)+strlen(dbdir)+2); /* leave room for \0 and / */ if (db_fullpath == NULL) { _dbd_internal_error_handler(conn, NULL, DBI_ERROR_NOMEM); return -1; } /* start with an empty string */ db_fullpath[0] = '\0'; if (strcmp(dbname, ":memory:")) { if (dbdir && *dbdir) { strcpy(db_fullpath, dbdir); } if (db_fullpath[strlen(db_fullpath)-1] != *dirsep) { /* db_fullpath length was checked above */ strcat(db_fullpath, dirsep); } } /* else: open an in-memory database which does not require the path prefix */ if (dbname && *dbname) { /* db_fullpath length was checked above */ strcat(db_fullpath, dbname); } /* fprintf(stderr, "try to open %s<<\n", db_fullpath); */ if (!strcmp(encoding, sqlite3_encoding_UTF8)) { sqlite3_errcode = sqlite3_open(db_fullpath, &sqcon); } else { sqlite3_errcode = sqlite3_open16(db_fullpath, &sqcon); } free(db_fullpath); if (sqlite3_errcode) { /* todo: check the return code */ /* sqlite3 creates a database the first time we try to access it. If this function fails, there's usually a problem with access rights or an existing database is corrupted or created with an incompatible version */ if (sq_errmsg) { _dbd_internal_error_handler(conn, sq_errmsg, (const int) sqlite3_errcode); free(sq_errmsg); } else { _dbd_internal_error_handler(conn, "could not open database", (const int) sqlite3_errcode); } return -1; } else { conn->connection = (void *)sqcon; if (dbname) { conn->current_db = strdup(dbname); } } /* set the SQLite timeout to timeout milliseconds. The older SQLite3-specific setting takes precedence over the generic timeout option for backwards compatibility */ timeout = dbi_conn_get_option_numeric(conn, "sqlite3_timeout"); if (timeout == -1) { /* generic timeout is specified in seconds, not milliseconds */ timeout = 1000*dbi_conn_get_option_numeric(conn, "timeout"); if (timeout == -1) { timeout = 0; } } sqlite3_busy_timeout(sqcon, timeout); /* this is required to make SQLite work like other database engines in that it returns the column information even if there are no rows in a result set */ dbi_result = dbd_query(conn, "PRAGMA empty_result_callbacks=1"); if (dbi_result) { dbi_result_free(dbi_result); } return 0; } int dbd_disconnect(dbi_conn_t *conn) { if (conn->connection) { sqlite3_close((sqlite3 *)conn->connection); if (conn->error_number) { conn->error_number = 0; } if (conn->error_message) { free(conn->error_message); conn->error_message = NULL; } } return 0; } int dbd_fetch_row(dbi_result_t *result, unsigned long long rowidx) { dbi_row_t *row = NULL; if (result->result_state == NOTHING_RETURNED) { return 0; } if (result->result_state == ROWS_RETURNED) { /* get row here */ row = _dbd_row_allocate(result->numfields); _get_row_data(result, row, rowidx); _dbd_row_finalize(result, row, rowidx); } return 1; /* 0 on error, 1 on successful fetchrow */ } int dbd_free_query(dbi_result_t *result) { if (result->result_handle) { sqlite3_free_table((char **)result->result_handle); } return 0; } int dbd_goto_row(dbi_result_t *result, unsigned long long rowidx, unsigned long long currowidx) { result->currowidx = rowidx; return 1; } int dbd_get_socket(dbi_conn_t *conn){ /* sqlite3 does not use sockets, so we'll always return 0 */ return (int)0; } const char *dbd_get_encoding(dbi_conn_t *conn){ const char* encoding; /* encoding is a compile-time option with the sqlite3 library. Instead of using the sqlite3-provided string, we use the iana.org names */ encoding = dbi_conn_get_option(conn, "encoding"); if (!encoding) { /* use UTF-8 as default */ encoding = sqlite3_encoding_UTF8; } /* todo: implement utf8 vs utf16 distinction */ return encoding; } const char* dbd_encoding_to_iana(const char *db_encoding) { /* nothing to translate, return original encoding */ return db_encoding; } const char* dbd_encoding_from_iana(const char *iana_encoding) { /* nothing to translate, return original encoding */ return iana_encoding; } char *dbd_get_engine_version(dbi_conn_t *conn, char *versionstring) { dbi_result_t *dbi_result; const char *versioninfo = NULL; /* initialize return string */ *versionstring = '\0'; dbi_result = dbd_query(conn, "SELECT sqlite_version()"); if (dbi_result) { if (dbi_result_next_row(dbi_result)) { versioninfo = dbi_result_get_string_idx(dbi_result, 1); strncpy(versionstring, versioninfo, VERSIONSTRING_LENGTH-1); versionstring[VERSIONSTRING_LENGTH-1] = '\0'; } dbi_result_free(dbi_result); } return versionstring; } dbi_result_t *dbd_list_dbs(dbi_conn_t *conn, const char *pattern) { char *sq_errmsg = NULL; char old_cwd[_POSIX_PATH_MAX] = ""; char sql_command[_POSIX_PATH_MAX+64]; int retval; size_t entry_size; DIR *dp; struct dirent *entry; struct dirent *result; struct stat statbuf; dbi_result rs; /* sqlite3 has no builtin function to list databases. Databases are just files in the data directory. We search for matching files and fill a temporary table with what we've found. Then we query this table and pretend sqlite3 has done all the work */ const char *sq_datadir = _conn_get_dbdir(conn); /* this is not nice but we have to drop the table even if it does not exist (sqlite3 has no way to list *temporary* tables so we can't check for it's existence). Then we start over with a fresh table lest we want duplicates. Update: Now apparently there is a system table that lists temporary tables, but the DROP TABLE error doesn't hurt and is most likely faster than checking for the existence of the table */ rs = dbd_query(conn, "DROP TABLE libdbi_databases"); dbi_result_free(rs); rs = dbd_query(conn, "CREATE TEMPORARY TABLE libdbi_databases (dbname VARCHAR(255))"); dbi_result_free(rs); if (sq_datadir && (dp = opendir(sq_datadir)) == NULL) { _dbd_internal_error_handler(conn, "could not open data directory", DBI_ERROR_CLIENT); return NULL; } /* allocate memory for readdir_r(3) */ entry_size = _dirent_buf_size(dp); if (entry_size == 0) { return NULL; } entry = (struct dirent *) malloc (entry_size); if (entry == NULL) { return NULL; } memset (entry, 0, entry_size); getcwd(old_cwd, _POSIX_PATH_MAX); chdir(sq_datadir); while (1) { result = NULL; retval = readdir_r(dp, entry, &result); if (retval != 0 || result == NULL) { break; } stat(entry->d_name, &statbuf); if (S_ISREG(statbuf.st_mode)) { /* todo: check this string */ /* we do a magic number check here to make sure we get only databases, not random files in the current directory. SQLite3 databases start with the string: SQLite format 3 */ FILE* fp; if ((fp = fopen(entry->d_name, "r")) != NULL) { char magic_text[16] = ""; if (fread(magic_text, 1, 15, fp) < 15) { /* either we can't read at all, or the file is too small for a sqlite3 database anyway */ fclose(fp); continue; } /* terminate magic text */ magic_text[15] = '\0'; if (strcmp(magic_text, "SQLite format 3")) { /* this file is not meant for us */ fclose(fp); continue; } /* close file again, we're done reading */ fclose(fp); /* match filename to a pattern, or use all found files */ if (pattern) { if (wild_case_compare(entry->d_name, &entry->d_name[strlen(entry->d_name)], pattern, &pattern[strlen(pattern)], '\\') == 0) { snprintf(sql_command, _POSIX_PATH_MAX+64, "INSERT INTO libdbi_databases VALUES ('%s')", entry->d_name); retval = sqlite3_exec((sqlite3*)(conn->connection), sql_command, NULL, NULL, &sq_errmsg); } } else { snprintf(sql_command, _POSIX_PATH_MAX+64, "INSERT INTO libdbi_databases VALUES ('%s')", entry->d_name); retval = sqlite3_exec((sqlite3*)(conn->connection), sql_command, NULL, NULL, &sq_errmsg); } if (sq_errmsg) { _dbd_internal_error_handler(conn, sq_errmsg, (const int) retval); free(sq_errmsg); break; } } /* else: we can't read it, so forget about it */ } } /* end while */ free(entry); closedir(dp); chdir(old_cwd); /* now query our temporary table */ return dbd_query(conn, "SELECT dbname FROM libdbi_databases"); } dbi_result_t *dbd_list_tables(dbi_conn_t *conn, const char *db, const char *pattern) { /* list tables in a database. The current implementation lists permanent tables only, as most applications know about the temporary tables they created anyway. */ dbi_result_t *dbi_result; dbi_conn_t* tempconn; dbi_inst instance; int retval; char* sq_errmsg = NULL; char* sql_cmd; dbi_result_t *rs; /* this function tries to query a specific database, so we need a separate connection to that other database, retrieve the table names, and feed them to a temporary table in our main connection */ instance = dbi_driver_get_instance(dbi_conn_get_driver(conn)); tempconn = dbi_conn_new_r("sqlite3", instance); /* we explicitly cast to (char*) as we discard the "const" thing here */ dbi_conn_set_option(tempconn, "dbname", (char*)db); dbi_conn_set_option(tempconn, "sqlite3_dbdir", (char*)_conn_get_dbdir(conn)); if (dbi_conn_connect(tempconn) < 0) { _dbd_internal_error_handler(conn, NULL, DBI_ERROR_NOCONN); dbi_conn_close(tempconn); return NULL; } /* create temporary table for table names. The DROP command won't hurt if the table doesn't exist yet */ rs = dbd_query(conn, "DROP TABLE libdbi_tablenames"); dbi_result_free(rs); rs = dbd_query(conn, "CREATE TEMPORARY TABLE libdbi_tablenames (tablename VARCHAR(255))"); dbi_result_free(rs); /* fprintf(stderr, "created temporary table\n"); */ /* sqlite3 does not support the SHOW command, so we have to extract the information from the accessory sqlite3_master table */ if (pattern == NULL) { asprintf(&sql_cmd, "SELECT name FROM sqlite_master WHERE type='table' ORDER BY name"); } else { asprintf(&sql_cmd, "SELECT name FROM sqlite_master WHERE type='table' AND name LIKE '%s' ORDER BY name", pattern); } dbi_result = dbd_query(tempconn, sql_cmd); free(sql_cmd); /* fprintf(stderr, "select from sqlite3_master has run\n"); */ if (dbi_result) { while (dbi_result_next_row(dbi_result)) { asprintf(&sql_cmd, "INSERT INTO libdbi_tablenames VALUES ('%s')", dbi_result_get_string(dbi_result, "name")); retval = sqlite3_exec((sqlite3*)(conn->connection), sql_cmd, NULL, NULL, &sq_errmsg); free(sql_cmd); sqlite3_free(sq_errmsg); } dbi_result_free(dbi_result); } else { dbi_conn_error(tempconn, (const char**)&sq_errmsg); } // sqlite3_close((sqlite3*)(tempconn->connection)); dbi_conn_close(tempconn); return dbd_query(conn, "SELECT tablename FROM libdbi_tablenames ORDER BY tablename"); } size_t dbd_quote_string(dbi_driver_t *driver, const char *orig, char *dest) { /* foo's -> 'foo\'s' */ size_t len; strcpy(dest, "'"); len = sqlite3_escape_string(dest+1, orig, strlen(orig)); strcat(dest, "'"); return len+2; } size_t dbd_conn_quote_string(dbi_conn_t *conn, const char *orig, char *dest) { return dbd_quote_string(conn->driver, orig, dest); } size_t dbd_quote_binary(dbi_conn_t *conn, const unsigned char *orig, size_t from_length, unsigned char **ptr_dest) { unsigned char *temp; size_t len; if ((temp = malloc(from_length*2)) == NULL) { return 0; } strcpy((char *)temp, "\'"); if (from_length) { len = _dbd_encode_binary(orig, from_length, temp+1); } else { len = 0; } strcat((char *)temp, "'"); *ptr_dest = temp; return len+2; } dbi_result_t *dbd_query(dbi_conn_t *conn, const char *statement) { /* allocate a new dbi_result_t and fill its applicable members: * * result_handle, numrows_matched, and numrows_changed. * everything else will be filled in by DBI */ dbi_result_t *result; int query_res; int numrows; int numcols; char** result_table; char* errmsg; int idx = 0; unsigned short fieldtype; unsigned int fieldattribs; dbi_error_flag errflag = 0; query_res = sqlite3_get_table((sqlite3*)conn->connection, statement, &result_table, &numrows, &numcols, &errmsg); if (query_res) { return NULL; } result = _dbd_result_create(conn, (void *)result_table, numrows, (unsigned long long)sqlite3_changes((sqlite3*)conn->connection)); /* printf("numrows:%d, numcols:%d<<\n", numrows, numcols); */ _dbd_result_set_numfields(result, numcols); /* assign types to result */ while (idx < numcols) { int type; char *item; type = find_result_field_types(result_table[idx], conn, statement); /* printf("type: %d<<\n", type); */ _translate_sqlite3_type(type, &fieldtype, &fieldattribs); /* we need the field name without the table name here */ item = strchr(result_table[idx], (int)'.'); if (!item) { item = result_table[idx]; } else { item++; } _dbd_result_add_field(result, idx, item, fieldtype, fieldattribs); idx++; } return result; } dbi_result_t *dbd_query_old(dbi_conn_t *conn, const char *statement) { /* allocate a new dbi_result_t and fill its applicable members: * * result_handle, numrows_matched, and numrows_changed. * everything else will be filled in by DBI */ dbi_result_t *result; int query_res; int numrows; int numcols; char** result_table; char* errmsg; int idx = 0; unsigned short fieldtype; unsigned int fieldattribs; dbi_error_flag errflag = 0; query_res = sqlite3_get_table((sqlite3*)conn->connection, statement, &result_table, &numrows, &numcols, &errmsg); if (query_res) { if(result_table != NULL) { sqlite3_free_table(result_table); } return NULL; } result = _dbd_result_create(conn, (void *)result_table, numrows, (unsigned long long)sqlite3_changes((sqlite3*)conn->connection)); /* printf("numrows:%d, numcols:%d<<\n", numrows, numcols); */ _dbd_result_set_numfields(result, numcols); /* assign types to result */ while (idx < numcols) { int type; char *item; type = find_result_field_types(result_table[idx], conn, statement); /* printf("type: %d<<\n", type); */ _translate_sqlite3_type(type, &fieldtype, &fieldattribs); /* we need the field name without the table name here */ item = strchr(result_table[idx], (int)'.'); if (!item) { item = result_table[idx]; } else { item++; } _dbd_result_add_field(result, idx, item, fieldtype, fieldattribs); idx++; } return result; } dbi_result_t *dbd_query_null(dbi_conn_t *conn, const unsigned char *statement, size_t st_length) { /* todo: implement using sqlite3_prepare and friends */ return NULL; } int dbd_transaction_begin(dbi_conn_t *conn) { if (dbd_query(conn, "BEGIN") == NULL) { return 1; } else { return 0; } } int dbd_transaction_commit(dbi_conn_t *conn) { if (dbd_query(conn, "COMMIT") == NULL) { return 1; } else { return 0; } } int dbd_transaction_rollback(dbi_conn_t *conn) { if (dbd_query(conn, "ROLLBACK") == NULL) { return 1; } else { return 0; } } int dbd_savepoint(dbi_conn_t *conn, const char *savepoint) { char* query; if (!savepoint) { return 1; } asprintf(&query, "SAVEPOINT %s", savepoint); if (dbd_query(conn, query) == NULL) { free(query); return 1; } else { free(query); return 0; } } int dbd_rollback_to_savepoint(dbi_conn_t *conn, const char *savepoint) { char* query; if (!savepoint) { return 1; } asprintf(&query, "ROLLBACK TO SAVEPOINT %s", savepoint); if (dbd_query(conn, query) == NULL) { free(query); return 1; } else { free(query); return 0; } } int dbd_release_savepoint(dbi_conn_t *conn, const char *savepoint) { char* query; if (!savepoint) { return 1; } asprintf(&query, "RELEASE SAVEPOINT %s", savepoint); if (dbd_query(conn, query) == NULL) { free(query); return 1; } else { free(query); return 0; } } static int find_result_field_types(char* field, dbi_conn_t *conn, const char* statement) { /* field is the name of the field which we want to know the type of conn is the connection statement is the query string returns the type as a FIELD_TYPE_XXX value sqlite3 uses a type system insufficient for libdbi. You don't even have to declare the column types if you don't want to. However, sqlite3 stores the types as used in the CREATE TABLE commands and makes them available through the table_info pragma. It is a VERY GOOD idea to declare the types if we want the following to work The code assumes that table and field names do not exceed a given length limit. PostgreSQL uses 32 which is a bit low. Sqlite3 does not seem to have fixed limits. We use a default limit of 128 here which can be increased in dbd_sqlite3.h if need arises. */ int curr_table_index; char* statement_copy = strdup(statement); char* item; char curr_field[MAX_IDENT_LENGTH]; char curr_field_lower[MAX_IDENT_LENGTH]; char curr_table[MAX_IDENT_LENGTH]; char* tables[MAX_TABLES_IN_QUERY]; int table_count = 0; int type; int counter; item = strchr(field, (int)'.'); if ( !item ) { strcpy(curr_field, field); strcpy(curr_table, ""); } else { strcpy(curr_field, item+1); strncpy(curr_table, field, item-field); curr_table[item-field] = '\0'; } //printf("table = %s\ncolumn = %s\n",curr_table,curr_field); /* If curr_table is empty, this means we have to get the select tables from the statement (it is possible there is more than one), otherwise we have the table for this field. It would seem that even if the table is aliased in the statement, we still have the original table name. sqlite3_get_table returns the tablename and not the alias when returning table.column. It probably isn't a good idea to rely on this, but we will. I knew it wasn't a good idea :( Select using distinct breaks the above assumptions. now we have to resolve the table name as well (if it is given). */ /* We have to assume that curr_table is an alias. This call will resolve the curr_table if given */ //printf("curr_table before getTables = %s\n",curr_table); table_count = getTables(tables,0,statement_copy,curr_table); //printf("curr_table after getTables = %s\n",curr_table); //printf("%s\n",statement_copy); //printf("*********TABLELIST************\n"); //for ( counter = 0 ; counter < table_count ; counter++) { // printf("[%i] %s\n",counter,tables[counter]); //} // resolve our curr_field to a real column char* token; char* saveptr; char* itemstore; int as_flag = 0; int function_flag = 0; int expression_flag = 0; int from_flag = 0; token = strtok_r(statement_copy, " ,;", &saveptr); while( token != NULL ) { //printf("checking %s\n",token); // check to see if there is a tablename on this field item = strchr(token, (int)'.'); if ( item != NULL ) { // discard the tablename token = item+1; //printf("checking %s\n",token); } /* if the from flag is set, we're not interested in any tokens * until we hit another select. */ if ( from_flag == 1 ) { if( strcmp(token,"(select") == 0 || strcmp(token,"(SELECT" ) == 0 || strcmp(token,"select") == 0 || strcmp(token,"SELECT" ) == 0 ) { from_flag = 0; } } else { if ( as_flag == 0 ) { if( strcmp(token,"as") == 0 || strcmp(token,"AS" ) == 0 ) { as_flag = 1; } else { // reset function and expression flags function_flag = 0; expression_flag = 0; itemstore = token; // check if this is a function item = strchr(itemstore,'('); if ( item != NULL ) { if ( item == itemstore ) { /* I started to try to parse for this scenario, and realized that I was descending into a pit of parsing that would never end. if it turns out that our curr_field aliases something that comes after this case it will more than likely be wrong and the end result is the field type will resolve to string. so we have to create a rule for creating sql statements with this case and document it so users know how to form their statements and know how to receive their results The rule here is that if you want to enclose your result field in brackets, you must have an alias for it, and the 'as' must be spaced from the closing bracket. e.g. () as The result will be obtainable as string, period. if this is the case then this field is enclosed in brackets check for the closing bracket in this token */ expression_flag = 1; int opens = 1; while ( opens > 0 && *item != '\0' ) { item++; if ( *item == '(' ) opens++; if ( *item == ')' ) opens--; } if ( opens > 0 ) { // this token doesn't have the complete field // get the next token etc... int field_complete = 0; while ( field_complete == 0 ) { token = strtok_r(NULL, " ,;", &saveptr); item = token; while ( opens > 0 && *item != '\0' ) { if ( *item == '(' ) opens++; if ( *item == ')' ) opens--; item++; } if ( opens == 0 ) { field_complete = 1; } } } } // if item == itemstore else { // we have a function here /* * As for expressions we need a documented rule for * having a function as a result column. The opening * bracket should be attached to the function name, e.g * count(, not count ( the function must be aliased and * the 'as' must be spaced from the closing bracket. e.g * ( ) as */ function_flag = 1; int opens = 1; while ( opens > 0 && *item != '\0' ) { item++; if ( *item == '(' ) opens++; if ( *item == ')' ) opens--; } if ( opens > 0 ) { // this token doesn't have the complete function // get the next token etc... int function_complete = 0; while ( function_complete == 0 ) { token = strtok_r(NULL, " ,;", &saveptr); item = token; while ( opens > 0 && *item != '\0' ) { if ( *item == '(' ) opens++; if ( *item == ')' ) opens--; item++; } if ( opens == 0 ) { function_complete = 1; } } } } } if ( strcmp(token, "from") == 0 || strcmp(token, "FROM") == 0 ) { from_flag = 1; } } } else { if ( strcmp(token,curr_field) == 0 ) { // our curr_field is an alias for the field in itemstore // if the expresion flag is set we know that the field type is string if ( expression_flag == 1 ) { free(statement_copy); return FIELD_TYPE_STRING; } if ( function_flag == 1 ) { // itemstore has at least the functionname( in it strcpy(curr_field,itemstore); strcpy(curr_field_lower, curr_field); item = curr_field_lower; while (*item) { *item = (char)tolower((int)*item); item++; } //printf("Field is a function - %s\n",curr_field_lower); free(statement_copy); if ( strstr(curr_field_lower,"avg(") || strstr(curr_field_lower,"sum(") || strstr(curr_field_lower,"total(") || strstr(curr_field_lower,"abs(") || strstr(curr_field_lower,"round(") ) { return FIELD_TYPE_FLOAT; } if ( strstr(curr_field_lower,"julianday(") || strstr(curr_field_lower,"count(") || strstr(curr_field_lower,"max(") || strstr(curr_field_lower,"min(") || strstr(curr_field_lower,"last_insert_rowid(") || strstr(curr_field_lower,"length(") ) { return FIELD_TYPE_LONG; } if ( strstr(curr_field_lower,"random(") ) { return FIELD_TYPE_LONGLONG; } if ( strstr(curr_field_lower,"randomblob(") || strstr(curr_field_lower,"zeroblob(") || strstr(curr_field_lower,"total(") || strstr(curr_field_lower,"abs(") || strstr(curr_field_lower,"round(") ) { return FIELD_TYPE_BLOB; } if ( strstr(curr_field_lower,"date(") || strstr(curr_field_lower,"time(") || strstr(curr_field_lower,"datetime(") || strstr(curr_field_lower,"strftime(") || strstr(curr_field_lower,"group_concat(") || strstr(curr_field_lower,"coalesce(") || strstr(curr_field_lower,"glob(") || strstr(curr_field_lower,"ifnull(") || strstr(curr_field_lower,"hex(") || strstr(curr_field_lower,"like(") || strstr(curr_field_lower,"lower(") || strstr(curr_field_lower,"ltrim(") || strstr(curr_field_lower,"nullif(") || strstr(curr_field_lower,"quote(") || strstr(curr_field_lower,"replace(") || strstr(curr_field_lower,"rtrim(") || strstr(curr_field_lower,"sqlite_version(") || strstr(curr_field_lower,"substr(") || strstr(curr_field_lower,"trim(") || strstr(curr_field_lower,"typeof(") || strstr(curr_field_lower,"upper(") ) { return FIELD_TYPE_STRING; } // if we get here we have a function we don't know free(statement_copy); return FIELD_TYPE_STRING; } item = strchr(itemstore,'.'); if ( item != NULL ) { strcpy(curr_field,item+1); } else { strcpy(curr_field,itemstore); } } as_flag = 0; } } token = strtok_r(NULL, " ,;", &saveptr); } //printf("table = %s\ncolumn = %s\n",curr_table,curr_field); free(statement_copy); /* now we have to look for the field type in the curr_table * If curr_table is empty, we have to search through the table list */ char sql_command[MAX_IDENT_LENGTH+80]; char **table_result_table; char *curr_type = NULL; char* errmsg; int query_res; int table_numrows = 0; int table_numcols = 0; dbi_error_flag errflag = 0; if ( strlen(curr_table) > 0 ) { snprintf(sql_command, MAX_IDENT_LENGTH+80, "PRAGMA table_info(%s)", curr_table); query_res = sqlite3_get_table((sqlite3*)conn->connection, sql_command, &table_result_table, &table_numrows, &table_numcols, &errmsg); if (query_res || !table_numrows) { /* The table we have doesn't seem to exist in the database! * fallback to to string */ //printf("singletable unknown !\n"); return FIELD_TYPE_STRING; } curr_type = get_field_type(&table_result_table, curr_field, table_numrows); sqlite3_free_table(table_result_table); if (!curr_type) { /* the field was not found in the table! * fallback to string */ //printf("field not in singletable !\n"); return FIELD_TYPE_STRING; } } else { /* process the table list * It should be noted here that we stop searching the tables on the * first match of the curr_field from the list of tables * The reasoning here is that fields with the same name will * probably be the same type. Obviously, this is a hole. */ if ( table_count > 0 ) { for ( counter = 0 ; counter < table_count ; counter++ ) { /* printf("searching table %s\n",tables[counter]); */ snprintf(sql_command, MAX_IDENT_LENGTH+80, "PRAGMA table_info(%s)", tables[counter]); query_res = sqlite3_get_table((sqlite3*)conn->connection, sql_command, &table_result_table, &table_numrows, &table_numcols, &errmsg); if (query_res || !table_numrows) { /* This table doesn't seem to exist in the database! * fallback to to string */ /* printf("table not found\n"); */ // continue processing } else { curr_type = get_field_type(&table_result_table, curr_field, table_numrows); sqlite3_free_table(table_result_table); if (!curr_type) { /* the field was not found in this table! * fallback to string */ // continue processing } } if ( curr_type ) break; } if (!curr_type) { /* the field was not found in any of the tables! * fallback to string */ /* printf("field not in any table !\n"); */ return FIELD_TYPE_STRING; } } else { /* no tables in the statement ?! * fallback to string */ printf("no tables in statement !\n"); return FIELD_TYPE_STRING; } } freeTables(tables, table_count); /* convert type to uppercase, reuse item */ item = curr_type; while (*item) { *item = (char)toupper((int)*item); item++; } /* the following code tries to support as many of the SQL types as possible, including those extensions supported by MySQL and PostgreSQL. Some conflicts remain, like the REAL type which is a different thing in MySQL and PostgreSQL */ /* printf("field type before type assignment: %s<<\n", curr_type); */ if (strstr(curr_type, "CHAR(") /* note the opening bracket */ || strstr(curr_type, "CLOB") || strstr(curr_type, "TEXT") /* also catches TINYTEXT */ || strstr(curr_type, "VARCHAR") || strstr(curr_type, "ENUM") || strstr(curr_type, "SET") || strstr(curr_type, "YEAR")) { /* MySQL 2 or 4 digit year (string) */ type = FIELD_TYPE_STRING; } else if (strstr(curr_type, "BLOB") || strstr(curr_type, "BYTEA")) { type = FIELD_TYPE_BLOB; } else if (strstr(curr_type, "CHAR") /* this is a 1-byte value */ || strstr(curr_type, "TINYINT") || strstr(curr_type, "INT1")) { type = FIELD_TYPE_TINY; } else if (strstr(curr_type, "SMALLINT") || strstr(curr_type, "INT2")) { type = FIELD_TYPE_SHORT; } else if (strstr(curr_type, "MEDIUMINT")) { type = FIELD_TYPE_INT24; } else if (strstr(curr_type, "BIGINT") || strstr(curr_type, "INTEGER PRIMARY KEY") /* BAD BAD HACK */ || strstr(curr_type, "INT8")) { type = FIELD_TYPE_LONGLONG; } else if (strstr(curr_type, "INTEGER") || strstr(curr_type, "INT") || strstr(curr_type, "INT4")) { type = FIELD_TYPE_LONG; } else if (strstr(curr_type, "DECIMAL") || strstr(curr_type, "NUMERIC")) { type = FIELD_TYPE_DECIMAL; } else if (strstr(curr_type, "TIMESTAMP") || strstr(curr_type, "DATETIME")) { type = FIELD_TYPE_TIMESTAMP; } else if (strstr(curr_type, "DATE")) { type = FIELD_TYPE_DATE; } else if (strstr(curr_type, "TIME")) { type = FIELD_TYPE_TIME; } else if (strstr(curr_type, "DOUBLE") /* also catches "double precision" */ || strstr(curr_type, "FLOAT8")) { type = FIELD_TYPE_DOUBLE; } else if (strstr(curr_type, "REAL") /* this is PostgreSQL "real", not MySQL "real" which is a synonym of "double" */ || strstr(curr_type, "FLOAT") || strstr(curr_type, "FLOAT4")) { type = FIELD_TYPE_FLOAT; } else { type = FIELD_TYPE_STRING; /* most reasonable default */ } free(curr_type); /* printf("GET FIELD TYPE RETURNS %d !\n",type); */ return type; } /* Similar to C99 strstr() except ensures that there is * white space around needle. */ char *strstr_ws(const char *haystack, const char *needle){ const char *c = NULL; int len; len = strlen(needle); c = haystack; while( (c = strstr(c,needle)) != NULL){ if(c == haystack) return NULL; if( ( *(c-1) == ' ' || *(c-1) == '\t' || *(c-1) == '\n') && ( c[len] == ' ' || c[len] == '\t' || c[len] == '\n')) return (char*) c; } return NULL; } static int getTables(char** tables, int index, const char* statement, char* curr_table) { //printf("getTables\n"); /* printf("processing %s\n",statement); */ char* item; char* start; int join_flag = 0; int as_flag = 0; int not_word_flag = 0; // the table list will start after 'from' and finish at the last occurrence of // 'where' | 'group' | 'having' | 'union' | 'intersect' | 'except' | 'order' | 'limit' char* endwords[] = {"where","group","having","union","intersect","except","order","limit"}; char* nottables[] = {"natural","left","right","full","outer","inner","cross","join","as","on"}; if ( !(item = strstr_ws(statement, "from")) ) { if ( !(item = strstr_ws(statement, "FROM")) ) /* printf("no from clause\n"); */ return index; } item += strlen("from"); while ( *item != '\0' ) { /* printf("begin parsing at %s\n", item); */ if ( *item == ' '|| *item == '\t' || *item == ',' ) { item++; } else { /* printf("word start at %s\n", item); */ start = item; // mark the start of the word if ( *item == '(' ) { //printf("sub select\n"); int opens = 1; while ( opens > 0 ) { item++; if ( *item == '(' ) opens++; if ( *item == ')' ) opens--; } char substatement[item-start]; strncpy(substatement,start+1,item-(start+1)); substatement[item-(start+1)] = '\0'; index = getTables(tables,index,substatement,curr_table); //printf("index is at %d\n",index); item ++; } else { /* printf("actual word starting here: %s\n", item); */ while ( *item && *item != ',' && *item != ' ' && *item != '\t' && *item != ')' && *item != ';' ) { item++; } char word[item-start+1]; char word_lower[item-start+1]; strncpy(word,start,item-start); word[item-start] = '\0'; strncpy(word_lower,start,item-start); word_lower[item-start] = '\0'; int i = 0; while (word_lower[i]) { word_lower[i] = tolower(word_lower[i]); i++; } // if word is an end word we can return for ( i = 0 ; i < (sizeof(endwords)/sizeof *(endwords)) ; i++ ) { if ( strcmp(endwords[i],word_lower) == 0 ) { /* printf("end word!\n"); */ return index; } } // if word is not a table we ignore it and continue for ( i = 0 ; i < (sizeof(nottables)/sizeof *(nottables)) ; i++ ) { if ( strcmp(nottables[i],word_lower) == 0 ) { /* printf("not a table: %s\n", word_lower); */ // if we encounter join or as we set // a flag because we know what to do next if ( strcmp("join",word_lower) == 0 ) { //printf("join found\n"); join_flag = 1; } if ( strcmp("as",word_lower) == 0 ) { //printf("as found\n"); as_flag = 1; } not_word_flag = 1; break; } } if ( not_word_flag == 1) { /* printf("skipping word\n"); */ not_word_flag = 0; } else { if ( as_flag == 1) { // if this word matches what is currently in curr_table // then curr_table is an alias for the last found table //printf("++++ AS FLAG ++++ curr_table = %s , word = %s\n",curr_table,word); if ( strcmp(curr_table,word) == 0 ) { /* printf("Setting curr_table\n",curr_table,word); */ strcpy(curr_table,tables[index - 1]); } as_flag = 0; //printf("++++ AS FLAG ++++ curr_table set to %s\n",curr_table); } else { /* printf("found table!\n"); */ // if we get here the word is a table name tables[index] = strdup(word); /* printf("table index %d = %s\n",index,tables[index]); */ index++; if ( join_flag == 1) { //printf("skipping after joined table\n"); // we can ignore everything until the next ',' or 'join' join_flag = 0; int skip_flag = 1; while ( skip_flag == 1 ) { if ( *item == ' '|| *item == '\t' ) { item++; } else { start = item; // mark the start of the word // this will skip over the using (id-list) if ( *item == '(' ) { //printf("skip over the using (id-list)\n"); int opens = 1; while ( opens > 0 ) { item++; if ( *item == '(' ) opens++; if ( *item == ')' ) opens--; } } while ( *item && *item != ',' && *item != ' ' && *item != '\t' && *item != '(') { item++; } if ( *item == '\0' ) { /* printf("returning %d, *item went to NULL1\n",index); */ return index; } if ( *item == ',') { //printf("stop skip after comma\n"); // we have come to a comma, so we can stop skipping skip_flag = 0; break; } word_lower[item-start+1]; strncpy(word_lower,start,item-start); word_lower[item-start] = '\0'; int i = 0; while (word_lower[i]) { word_lower[i] = tolower(word_lower[i]); i++; } if ( strcmp("join",word_lower) == 0 ) { //printf("stop skip after join found\n"); // we have found the next join, stop skipping join_flag = 1; skip_flag = 0; break; } for ( i = 0 ; i < (sizeof(endwords)/sizeof *(endwords)) ; i++ ) { if ( strcmp(endwords[i],word_lower) == 0 ) { /* printf("end word!\n"); */ return index; } } } } } // if join_flag } // if as_flag else } // if not_word_flag else if ( *item == '\0' ) { /* printf("returning %d",index); */ return index; } item++; } // if *item == '(' else } // if *item == ' '|| *item == '\t' || *item == ',' else } // while /* printf("returning %d\n",index); */ return index; } static void freeTables(char** tables, int table_count) { int counter; for ( counter = 0 ; counter < table_count ; counter++ ) { if (*(tables[counter])) { free(tables[counter]); } } } static char* get_field_type(char*** ptr_result_table, const char* curr_field_name, int numrows) { /* ptr_table is a ptr to a string array as returned by the sqlite3_get_table() function called with the table_info pragma. The array is 6 cols wide and contains one row for each field in the table. The first row contains the column names, but it is not included in numrows, so the real data start at [6]. The columns are: Number|column_name|type|may_be_null|default_value|pk? Thus, the column names are in [6+6*i], and the corresponding type of the result is in [7+6*i]. pk is set to 1 if the column is part of a primary key. An autoincrementing column is identified by type INTEGER and by being the only column with pk set to 1 in this table curr_field_name is a ptr to a string holding the field name numrows is the number of rows in the string array returns the field type as an allocated string or NULL if an error occurred */ char* curr_type = NULL; int i; int pk_count = 0; for (i=6;i<=numrows*6;i+=6) { if (!strcmp((*ptr_result_table)[i+1], curr_field_name)) { curr_type = strdup((*ptr_result_table)[i+2]); } if (strcmp((*ptr_result_table)[i+5], "1") == 0) { pk_count++; } } /* printf("curr_type of %s went to %s<<\n", curr_field_name, curr_type); */ /* sqlite has the bad habit to turn INTEGER PRIMARY KEY columns into INTEGER columns when using the table_info pragma. If a column is an INTEGER and the only column with pk set to "1", turn it back to INTEGER PRIMARY KEY */ if (curr_type) { if (pk_count == 1 && (strcmp(curr_type, "INTEGER") == 0 || strcmp(curr_type, "integer") == 0)) { free(curr_type); curr_type = strdup("INTEGER PRIMARY KEY"); } } return curr_type; } const char *dbd_select_db(dbi_conn_t *conn, const char *db) { /* sqlite3 does not separate connecting to a database server and using or opening a database. If we want to switch to a different database, we have to drop the current connection and create a new one instead, using the new database. */ if (!db || !*db) { return NULL; } if (conn->connection) { sqlite3_close((sqlite3 *)conn->connection); } if (_real_dbd_connect(conn, db)) { return NULL; } return db; } int dbd_geterror(dbi_conn_t *conn, int *err_no, char **errstr) { /* put error number into err_no, error string into errstr * return 0 if error, 1 if err_no filled, 2 if errstr filled, 3 if both err_no and errstr filled */ *err_no = sqlite3_errcode((sqlite3 *)conn->connection); *errstr = strdup((char*)sqlite3_errmsg((sqlite3 *)conn->connection)); return 3; } unsigned long long dbd_get_seq_last(dbi_conn_t *conn, const char *sequence) { return (unsigned long long)sqlite3_last_insert_rowid((sqlite3*)conn->connection); } unsigned long long dbd_get_seq_next(dbi_conn_t *conn, const char *sequence) { _dbd_internal_error_handler(conn, NULL, DBI_ERROR_UNSUPPORTED); return 0; } int dbd_ping(dbi_conn_t *conn) { if (dbd_query(conn, "SELECT 1") == NULL) { return 0; } else { return 1; } } /* CORE SQLITE3 DATA FETCHING STUFF */ static void _translate_sqlite3_type(enum enum_field_types fieldtype, unsigned short *type, unsigned int *attribs) { unsigned int _type = 0; unsigned int _attribs = 0; /* printf("fieldtype:%d<<\n", fieldtype); */ switch (fieldtype) { case FIELD_TYPE_TINY: _type = DBI_TYPE_INTEGER; _attribs |= DBI_INTEGER_SIZE1; break; case FIELD_TYPE_YEAR: _attribs |= DBI_INTEGER_UNSIGNED; case FIELD_TYPE_SHORT: _type = DBI_TYPE_INTEGER; _attribs |= DBI_INTEGER_SIZE2; break; case FIELD_TYPE_INT24: _type = DBI_TYPE_INTEGER; _attribs |= DBI_INTEGER_SIZE3; break; case FIELD_TYPE_LONG: _type = DBI_TYPE_INTEGER; _attribs |= DBI_INTEGER_SIZE4; break; case FIELD_TYPE_LONGLONG: _type = DBI_TYPE_INTEGER; _attribs |= DBI_INTEGER_SIZE8; break; case FIELD_TYPE_FLOAT: _type = DBI_TYPE_DECIMAL; _attribs |= DBI_DECIMAL_SIZE4; break; case FIELD_TYPE_DOUBLE: _type = DBI_TYPE_DECIMAL; _attribs |= DBI_DECIMAL_SIZE8; break; case FIELD_TYPE_DATE: /* TODO parse n stuph to native DBI unixtime type. for now, string */ _type = DBI_TYPE_DATETIME; _attribs |= DBI_DATETIME_DATE; break; case FIELD_TYPE_TIME: _type = DBI_TYPE_DATETIME; _attribs |= DBI_DATETIME_TIME; break; case FIELD_TYPE_DATETIME: case FIELD_TYPE_TIMESTAMP: _type = DBI_TYPE_DATETIME; _attribs |= DBI_DATETIME_DATE; _attribs |= DBI_DATETIME_TIME; break; case FIELD_TYPE_DECIMAL: /* decimal is actually a string, has arbitrary precision, no floating point rounding */ case FIELD_TYPE_ENUM: case FIELD_TYPE_SET: case FIELD_TYPE_VAR_STRING: case FIELD_TYPE_STRING: _type = DBI_TYPE_STRING; break; case FIELD_TYPE_TINY_BLOB: case FIELD_TYPE_MEDIUM_BLOB: case FIELD_TYPE_LONG_BLOB: case FIELD_TYPE_BLOB: _type = DBI_TYPE_BINARY; break; default: _type = DBI_TYPE_STRING; break; } *type = _type; *attribs = _attribs; } static void _get_row_data(dbi_result_t *result, dbi_row_t *row, unsigned long long rowidx) { char **result_table = result->result_handle; unsigned int curfield = 0; char *raw = NULL; unsigned int sizeattrib; dbi_data_t *data; while (curfield < result->numfields) { /* rowidx appears to be 0-based, but the first row always contains the column names */ raw = result_table[curfield + ((rowidx+1)*result->numfields)]; data = &row->field_values[curfield]; row->field_sizes[curfield] = 0; /* this will be set to the string size later on if the field is indeed a string */ if (raw == NULL) { /* no data available */ _set_field_flag( row, curfield, DBI_VALUE_NULL, 1); curfield++; continue; } switch (result->field_types[curfield]) { case DBI_TYPE_INTEGER: sizeattrib = _isolate_attrib(result->field_attribs[curfield], DBI_INTEGER_SIZE1, DBI_INTEGER_SIZE8); switch (sizeattrib) { case DBI_INTEGER_SIZE1: data->d_char = (char) atol(raw); break; case DBI_INTEGER_SIZE2: data->d_short = (short) atol(raw); break; case DBI_INTEGER_SIZE3: case DBI_INTEGER_SIZE4: /* printf("returning a long via data->d_long\n"); */ data->d_long = (int) atol(raw); break; case DBI_INTEGER_SIZE8: /* printf("returning a long long via data->d_longlong\n"); */ data->d_longlong = (long long) atoll(raw); break; /* hah, wonder if that'll work */ default: break; } break; case DBI_TYPE_DECIMAL: sizeattrib = _isolate_attrib(result->field_attribs[curfield], DBI_DECIMAL_SIZE4, DBI_DECIMAL_SIZE8); switch (sizeattrib) { case DBI_DECIMAL_SIZE4: data->d_float = (float) strtod(raw, NULL); break; case DBI_DECIMAL_SIZE8: data->d_double = (double) strtod(raw, NULL); break; default: break; } break; case DBI_TYPE_STRING: data->d_string = strdup(raw); row->field_sizes[curfield] = strlen(raw); break; case DBI_TYPE_BINARY: data->d_string = strdup(raw); row->field_sizes[curfield] = _dbd_decode_binary(data->d_string, data->d_string); break; case DBI_TYPE_DATETIME: sizeattrib = _isolate_attrib(result->field_attribs[curfield], DBI_DATETIME_DATE, DBI_DATETIME_TIME); data->d_datetime = _dbd_parse_datetime(raw, sizeattrib); break; default: data->d_string = strdup(raw); row->field_sizes[curfield] = strlen(raw); break; } curfield++; } } /* this function is stolen from MySQL and somewhat simplified for our needs */ /* it appears to return 0 on a match, 1 if no match is found, and -1 in some odd cases */ #define wild_many (char)'%' #define wild_one (char)'_' #define INC_PTR(A,B) A++ static int wild_case_compare(const char *str,const char *str_end, const char *wildstr,const char *wildend, char escape) { int result= -1; // Not found, using wildcards unsigned char cmp; while (wildstr != wildend) { while (*wildstr != wild_many && *wildstr != wild_one) { if (*wildstr == escape && wildstr+1 != wildend) { wildstr++; } if (str == str_end || *wildstr++ != *str++) { return(1); // No match } if (wildstr == wildend) { return (str != str_end); // Match if both are at end } result=1; // Found an anchor char } if (*wildstr == wild_one) { do { if (str == str_end) { // Skip one char if possible return (result); } INC_PTR(str,str_end); } while (++wildstr < wildend && *wildstr == wild_one); if (wildstr == wildend) { break; } } if (*wildstr == wild_many) { // Found wild_many wildstr++; /* Remove any '%' and '_' from the wild search string */ for ( ; wildstr != wildend ; wildstr++) { if (*wildstr == wild_many) { continue; } if (*wildstr == wild_one) { if (str == str_end) { return (-1); } INC_PTR(str,str_end); continue; } break; // Not a wild character } if (wildstr == wildend) { return(0); // Ok if wild_many is last } if (str == str_end) { return -1; } if ((cmp= *wildstr) == escape && wildstr+1 != wildend) { cmp= *++wildstr; } INC_PTR(wildstr,wildend); // This is compared trough cmp /* cmp=likeconv(cmp); */ do { while (str != str_end && *str != cmp) { str++; } if (str++ == str_end) { return (-1); } { int tmp=wild_case_compare(str,str_end,wildstr,wildend,escape); if (tmp <= 0) { return (tmp); } } } while (str != str_end && wildstr[0] != wild_many); return(-1); } } return (str != str_end ? 1 : 0); } /* this function is stolen from MySQL. The quoting was changed to the SQL standard, i.e. single and double quotes are escaped by doubling, not by a backslash. Newlines and carriage returns are left alone */ static size_t sqlite3_escape_string(char *to, const char *from, size_t length) { const char *to_start=to; const char *end; for (end=from+length; from != end ; from++) { switch (*from) { case 0: /* Must be escaped for 'mysql' */ *to++= '\\'; *to++= '0'; break; case '\'': *to++= '\''; /* double single quote */ *to++= '\''; break; case '\032': /* This gives problems on Win32 */ *to++= '\\'; *to++= 'Z'; break; default: *to++= *from; } } *to=0; return (size_t) (to-to_start); } /* this is a convenience function to retrieve the database directory */ static const char* _conn_get_dbdir(dbi_conn_t *conn) { const char* dbdir; dbdir = dbi_conn_get_option(conn, "sqlite3_dbdir"); if (!dbdir) { /* use default directory instead */ dbdir = default_dbdir; } return dbdir; } libdbi-drivers-0.9.0/drivers/sqlite3/dbd_sqlite3.h000644 001750 001750 00000020214 11033750141 022671 0ustar00markusmarkus000000 000000 /* * libdbi - database independent abstraction layer for C. * Copyright (C) 2001, David Parker and Mark Tobenkin. * http://libdbi.sourceforge.net * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * dbd_sqlite3.c: SQLite3 database support (using libsqlite3) header file * Copyright (C) 2005-2007, Markus Hoenicka * http://libdbi.sourceforge.net * * $Id: dbd_sqlite3.h,v 1.4 2008/07/05 19:49:53 mhoenicka Exp $ */ enum enum_field_types { FIELD_TYPE_DECIMAL, FIELD_TYPE_TINY, FIELD_TYPE_SHORT, FIELD_TYPE_LONG, FIELD_TYPE_FLOAT, FIELD_TYPE_DOUBLE, FIELD_TYPE_NULL, FIELD_TYPE_TIMESTAMP, FIELD_TYPE_LONGLONG,FIELD_TYPE_INT24, FIELD_TYPE_DATE, FIELD_TYPE_TIME, FIELD_TYPE_DATETIME, FIELD_TYPE_YEAR, FIELD_TYPE_NEWDATE, FIELD_TYPE_ENUM=247, FIELD_TYPE_SET=248, FIELD_TYPE_TINY_BLOB=249, FIELD_TYPE_MEDIUM_BLOB=250, FIELD_TYPE_LONG_BLOB=251, FIELD_TYPE_BLOB=252, FIELD_TYPE_VAR_STRING=253, FIELD_TYPE_STRING=254 }; /* this is the maximum length of identifiers like table names and column names. SQLite does not seem to have any limit like this, but other systems use limits like 32 (PostgreSQL) and 64 (MySQL) */ #define MAX_IDENT_LENGTH 128 #define MAX_TABLES_IN_QUERY 50 /* this is the maximum length of a path that the system is guaranteed to handle. This is usually defined in limits.h but appears to be missing e.g. from MinGW's version of this file */ #ifndef _POSIX_PATH_MAX #define _POSIX_PATH_MAX 256 #endif #define SQLITE3_RESERVED_WORDS { \ "ACTION", \ "ADD", \ "AGGREGATE", \ "ALL", \ "ALTER", \ "AFTER", \ "AND", \ "AS", \ "ASC", \ "AVG", \ "AVG_ROW_LENGTH", \ "AUTO_INCREMENT", \ "BETWEEN", \ "BIGINT", \ "BIT", \ "BINARY", \ "BLOB", \ "BOOL", \ "BOTH", \ "BY", \ "CASCADE", \ "CASE", \ "CHAR", \ "CHARACTER", \ "CHANGE", \ "CHECK", \ "CHECKSUM", \ "COLUMN", \ "COLUMNS", \ "COMMENT", \ "CONSTRAINT", \ "CREATE", \ "CROSS", \ "CURRENT_DATE", \ "CURRENT_TIME", \ "CURRENT_TIMESTAMP", \ "DATA", \ "DATABASE", \ "DATABASES", \ "DATE", \ "DATETIME", \ "DAY", \ "DAY_HOUR", \ "DAY_MINUTE", \ "DAY_SECOND", \ "DAYOFMONTH", \ "DAYOFWEEK", \ "DAYOFYEAR", \ "DEC", \ "DECIMAL", \ "DEFAULT", \ "DELAYED", \ "DELAY_KEY_WRITE", \ "DELETE", \ "DESC", \ "DESCRIBE", \ "DISTINCT", \ "DISTINCTROW", \ "DOUBLE", \ "DROP", \ "END", \ "ELSE", \ "ESCAPE", \ "ESCAPED", \ "ENCLOSED", \ "ENUM", \ "EXPLAIN", \ "EXISTS", \ "FIELDS", \ "FILE", \ "FIRST", \ "FLOAT", \ "FLOAT4", \ "FLOAT8", \ "FLUSH", \ "FOREIGN", \ "FROM", \ "FOR", \ "FULL", \ "FUNCTION", \ "GLOBAL", \ "GRANT", \ "GRANTS", \ "GROUP", \ "HAVING", \ "HEAP", \ "HIGH_PRIORITY", \ "HOUR", \ "HOUR_MINUTE", \ "HOUR_SECOND", \ "HOSTS", \ "IDENTIFIED", \ "IGNORE", \ "IN", \ "INDEX", \ "INFILE", \ "INNER", \ "INSERT", \ "INSERT_ID", \ "INT", \ "INTEGER", \ "INTERVAL", \ "INT1", \ "INT2", \ "INT3", \ "INT4", \ "INT8", \ "INTO", \ "IF", \ "IS", \ "ISAM", \ "JOIN", \ "KEY", \ "KEYS", \ "KILL", \ "LAST_INSERT_ID", \ "LEADING", \ "LEFT", \ "LENGTH", \ "LIKE", \ "LINES", \ "LIMIT", \ "LOAD", \ "LOCAL", \ "LOCK", \ "LOGS", \ "LONG", \ "LONGBLOB", \ "LONGTEXT", \ "LOW_PRIORITY", \ "MAX", \ "MAX_ROWS", \ "MATCH", \ "MEDIUMBLOB", \ "MEDIUMTEXT", \ "MEDIUMINT", \ "MIDDLEINT", \ "MIN_ROWS", \ "MINUTE", \ "MINUTE_SECOND", \ "MODIFY", \ "MONTH", \ "MONTHNAME", \ "MYISAM", \ "NATURAL", \ "NUMERIC", \ "NO", \ "NOT", \ "NULL", \ "ON", \ "OPTIMIZE", \ "OPTION", \ "OPTIONALLY", \ "OR", \ "ORDER", \ "OUTER", \ "OUTFILE", \ "PACK_KEYS", \ "PARTIAL", \ "PASSWORD", \ "PRECISION", \ "PRIMARY", \ "PROCEDURE", \ "PROCESS", \ "PROCESSLIST", \ "PRIVILEGES", \ "READ", \ "REAL", \ "REFERENCES", \ "RELOAD", \ "REGEXP", \ "RENAME", \ "REPLACE", \ "RESTRICT", \ "RETURNS", \ "REVOKE", \ "RLIKE", \ "ROW", \ "ROWS", \ "SECOND", \ "SELECT", \ "SET", \ "SHOW", \ "SHUTDOWN", \ "SMALLINT", \ "SONAME", \ "SQL_BIG_TABLES", \ "SQL_BIG_SELECTS", \ "SQL_LOW_PRIORITY_UPDATES", \ "SQL_LOG_OFF", \ "SQL_LOG_UPDATE", \ "SQL_SELECT_LIMIT", \ "SQL_SMALL_RESULT", \ "SQL_BIG_RESULT", \ "SQL_WARNINGS", \ "STRAIGHT_JOIN", \ "STARTING", \ "STATUS", \ "STRING", \ "TABLE", \ "TABLES", \ "TEMPORARY", \ "TERMINATED", \ "TEXT", \ "THEN", \ "TIME", \ "TIMESTAMP", \ "TINYBLOB", \ "TINYTEXT", \ "TINYINT", \ "TRAILING", \ "TO", \ "TYPE", \ "USE", \ "USING", \ "UNIQUE", \ "UNLOCK", \ "UNSIGNED", \ "UPDATE", \ "USAGE", \ "VALUES", \ "VARCHAR", \ "VARIABLES", \ "VARYING", \ "VARBINARY", \ "WITH", \ "WRITE", \ "WHEN", \ "WHERE", \ "YEAR", \ "YEAR_MONTH", \ "ZEROFILL", \ NULL } #define SQLITE3_CUSTOM_FUNCTIONS { \ "sqlite3_aggregate_context", \ "sqlite3_aggregate_count", \ "sqlite3_bind_blob", \ "sqlite3_bind_double", \ "sqlite3_bind_int", \ "sqlite3_bind_int64", \ "sqlite3_bind_null", \ "sqlite3_bind_parameter_count", \ "sqlite3_bind_parameter_index", \ "sqlite3_bind_parameter_name", \ "sqlite3_bind_text", \ "sqlite3_bind_text16", \ "sqlite3_busy_handler", \ "sqlite3_busy_timeout", \ "sqlite3_changes", \ "sqlite3_close", \ "sqlite3_collation_needed", \ "sqlite3_collation_needed16", \ "sqlite3_column_blob", \ "sqlite3_column_bytes", \ "sqlite3_column_bytes16", \ "sqlite3_column_count", \ "sqlite3_column_decltype", \ "sqlite3_column_double", \ "sqlite3_column_int", \ "sqlite3_column_int64", \ "sqlite3_column_name", \ "sqlite3_column_name16", \ "sqlite3_column_text", \ "sqlite3_column_text16", \ "sqlite3_column_type", \ "sqlite3_commit_hook", \ "sqlite3_complete", \ "sqlite3_complete16", \ "sqlite3_create_collation", \ "sqlite3_create_collation16", \ "sqlite3_create_function", \ "sqlite3_create_function16", \ "sqlite3_data_count", \ "sqlite3_errcode", \ "sqlite3_errmsg", \ "sqlite3_errmsg16", \ "sqlite3_exec", \ "sqlite3_finalize", \ "sqlite3_free", \ "sqlite3_free_table", \ "sqlite3_get_table", \ "sqlite3_interrupt", \ "sqlite3_last_insert_rowid", \ "sqlite3_libversion", \ "sqlite3_mprintf", \ "sqlite3_open", \ "sqlite3_open16", \ "sqlite3_prepare", \ "sqlite3_prepare16", \ "sqlite3_progress_handler", \ "sqlite3_reset", \ "sqlite3_result_blob", \ "sqlite3_result_double", \ "sqlite3_result_error", \ "sqlite3_result_error16", \ "sqlite3_result_int", \ "sqlite3_result_int64", \ "sqlite3_result_null", \ "sqlite3_result_text", \ "sqlite3_result_text16", \ "sqlite3_result_text16be", \ "sqlite3_result_text16le", \ "sqlite3_result_value", \ "sqlite3_set_authorizer", \ "sqlite3_step", \ "sqlite3_total_changes", \ "sqlite3_trace", \ "sqlite3_user_data", \ "sqlite3_value_blob", \ "sqlite3_value_bytes", \ "sqlite3_value_bytes16", \ "sqlite3_value_double", \ "sqlite3_value_int", \ "sqlite3_value_int64", \ "sqlite3_value_text", \ "sqlite3_value_text16", \ "sqlite3_value_text16be", \ "sqlite3_value_text16le", \ "sqlite3_value_type", \ "sqlite3_vmprintf", \ NULL} libdbi-drivers-0.9.0/drivers/sqlite3/dbd_sqlite3.sgml000644 001750 001750 00000050066 11043432445 023421 0ustar00markusmarkus000000 000000 ]> sqlite3 driver manual A libdbi driver using the SQLite3 embedded database engine Markus Hoenicka
    mhoenicka@users.sourceforge.net
    2005-2008 Markus Hoenicka Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is included in . $Revision: 1.9 $ $Date: 2008/07/28 21:07:49 $
    Preface libdbi is a database abstraction layer written in C. It implements a framework that can utilize separate driver libraries for specific database servers. The libdbi-drivers project provides the drivers necessary to talk to the supported database servers. This manual provides information about the sqlite3 driver. The manual is intended for programmers who write applications linked against libdbi and who want their applications to work with the sqlite3 driver. Questions and comments about the sqlite3 driver should be sent to the libdbi-drivers-devel mailing list. Visit the libdbi-drivers-devel list page to subscribe and for further information. Questions and comments about the libdbi library should be sent to the appropriate libdbi mailing list. The sqlite3 driver is maintained by Markus Hoenicka. Introduction SQLite is a smart library that implements an embeddable SQL database engine. No need for an external database server - an application linked against libsqlite can do it all by itself. Of course there are a few limitations of this approach compared to "real" SQL database servers, mostly for massively parallel high-throughput database applications, but on the other hand, installation and administration are a breeze. SQLite3 is a redesign of SQLite which is incompatible with the older 2.x versions. As the API functions and the library itself were renamed, SQLite3 also requires a slightly modified libdbi driver. You can have both the sqlite and the sqlite3 driver installed on your system, but you have to make sure that you access your databases with the driver that matches the database version. The easiest way to accomplish this is to use different database directories for each version. Your application should support the sqlite3 driver if one of the following applies: You want to support potential users of your application who don't have the skills to administer a database server. You want to offer the simplest possible installation of your application. You want to let users test-drive your application without the need to fiddle with their production database servers. Installation This chapter describes the prerequisites and the procedures to build and install the sqlite3 driver from the sources. Prerequisites The following packages have to be installed on your system: libdbi This library provides the framework of the database abstraction layer which can utilize the sqlite3 driver to perform database operations. The download page as well as the mailing lists with bug reports and patches are accessible at sourceforge.net/projects/libdbi. sqlite3 This library implements the embedded database engine. Find the most recent release at www.sqlite.org. The current version of the sqlite driver was tested with SQLite3 version 3.0.8 and should work ok with later releases. Build and install the sqlite3 driver First you have to unpack the libdbi-drivers archive in a suitable directory. Unpacking will create a new subdirectory libdbi-drivers-X.Y where "X.Y" denotes the version: $ tar -xzf libdbi-drivers-0.7.2.tar.gz The libdbi-drivers project consists of several drivers that use a common build system. Therefore you must tell configure explicitly that you want to build the sqlite3 driver (you can list as many drivers as you want to build): $ cd libdbi-drivers $ ./configure --with-sqlite3 Run ./configure --help to find out about additional options. Then build the driver with the command: $ make Please note that you may have to invoke gmake, the GNU version of make, on some systems. Then install the driver with the command (you'll need root permissions to do this): $ make install To test the operation of the newly installed driver, use the command: $ make check This command creates and runs a test program that performs a few basic input and output tests. The program will ask for a database name. This can be any name that is a valid filename on your system. It will also ask for a data directory. This is the directory that is used to create the test database. Needless to say that you need write access to that directory. If you accept the default ".", the database will be created in the tests subdirectory. Driver options Your application has to initialize libdbi drivers by setting some driver options with the dbi_conn_set_option() and the dbi_conn_set_option_numeric() library functions. The sqlite driver supports the following options: dbname The name of the database you want to work with. As a SQLite database corresponds to one file in your filesystem, dbname can be any legal filename. If the database/file doesn't exist when you first try to access it, SQLite will create it on the fly. It is important to understand that the full path of the database is composed of sqlite3_dbdir and dbname. Therefore dbname should not contain the full path of a file, but just the name. sqlite3_dbdir This is the directory that contains all sqlite databases. Use the full path please. If this option is not specified, a compile-time default directory will be used. By default, this directory (usually /usr/local/var/lib/libdbi/sqlite3) has read and write permissions for everyone with the sticky bit set. If this is not suitable for your application, use a custom directory with your preferred permissions instead. It is necessary to keep all sqlite databases in one directory to make it possible to list all existing databases through the libdbi API. However, you are free to open more than one connection simultaneously, each one using a different setting of sqlite3_dbdir. timeout (numeric) The connection timeout in seconds. sqlite3_timeout (numeric) The design of SQLite3 does not allow fully concurrent access by two clients. However, if the timeout is larger than zero, the second client will wait for the given amount of time for the first client to release its lock, if necessary. If the timeout is set to zero, the second client will return immediately, indicating a busy status. The numerical value of this option specifies the timeout in milliseconds. This option is deprecated. Use the generic option instead. In the current implementation, overrides if both are set. Please be aware that these options use different time scales. Peculiarities you should know about This chapter lists known peculiarities of the sqlite3 driver. This includes SQLite3 features that differ from what you know from the other database servers supported by libdbi, and it includes features and misfeatures introduced by the sqlite3 driver. It is the intention of the driver author to reduce the number of misfeatures in future releases if possible. SQLite3 (mis)features As the SQLite3 package is constantly being improved, you should refer to the original documentation about the SQL features it supports and about the SQL features it doesn't support. One noticeable difference between SQLite3 and other SQL database engines is that the former uses something called "manifest typing". The practical difference to the typeless nature of SQLite 2.x is negligible as it still does not support the rich typing used by most other SQL database engines. In order to satisfy the needs of the strongly typed retrieval functions of libdbi, the only way out is to declare the column types in a CREATE TABLE statement just as you would with any other SQL database engine. As an example, the following statement is perfectly fine with SQLite3, but not with the sqlite3 driver: CREATE TABLE foo (a,b,c) However, the following statement is fine with SQLite3, the sqlite3 driver, and just about any other SQL database engine out there: CREATE TABLE foo (a INTEGER,b TEXT,c VARCHAR(64)) The following table lists the column types which are positively recognized by the sqlite driver. Essentially all column types supported by MySQL and PostgreSQL are supported by this driver as well, making it reasonably easy to write portable SQL code. All other column types are treated as strings. SQL column types supported by the sqlite driver type description TINYBLOB, BLOB, MEDIUMBLOB, LONGBLOB, BYTEA String types of unlimited length. Binary data must be safely encoded, see text. CHAR(), VARCHAR(), TINYTEXT, TEXT, MEDIUMTEXT, LONGTEXT String types of unlimited length. There is no chopping or padding performed by the database engine. ENUM String type of unlimited length. In contrast to MySQL, choosing ENUM over VARCHAR does not save any storage space. SET String type of unlimited length. In contrast to MySQL, the input is not checked against the list of allowed values. YEAR String type of unlimited length. MySQL stores 2 or 4 digit years as a 1 byte value, whereas the SQLite drivers stores the string as provided. TINYINT, INT1, CHAR A 1 byte type used to store one character, a signed integer between -128 and 127, or an unsigned integer between 0 and 255. SMALLINT, INT2 2 byte (short) integer type used to store a signed integer between -32768 and 32767 or an unsigned integer between 0 and 65535. MEDIUMINT 3 byte integer type used to store a signed integer between -8388608 and 8388607 or an unsigned integer between 0 and 16777215. INT, INTEGER, INT4 4 byte (long) integer type used to store a signed integer between -2147483648 and 2147483647 or an unsigned integer between 0 and 4294967295. BIGINT, INT8, INTEGER PRIMARY KEY 8 byte (long long) integer type used to store a signed integer between -9223372036854775808 and 9223372036854775807 or an unsigned integer between 0 and 18446744073709551615. See below for a discussion of INTEGER PRIMARY KEY. DECIMAL, NUMERIC A string type of unlimited length used to store floating-point numbers of arbitrary precision. TIMESTAMP, DATETIME A string type of unlimited length used to store date/time combinations. The required format is 'YYYY-MM-DD HH:MM:SS', anything following this pattern is ignored. DATE A string type of unlimited length used to store a date. The required format is 'YYYY-MM-DD', anything following this pattern is ignored. TIME A string type of unlimited length used to store a time. The required format is 'HH:MM:SS', anything following this pattern is ignored. FLOAT, FLOAT4, REAL A 4 byte floating-point number. The range is -3.402823466E+38 to -1.175494351E-38, 0, and 1.175494351E-38 to 3.402823466E+38. Please note that MySQL treats REAL as an 8 byte instead of a 4 byte float like PostgreSQL. DOUBLE, DOUBLE PRECISION, FLOAT8 An 8 byte floating-point number. The range is -1.7976931348623157E+308 to -2.2250738585072014E-308, 0, and 2.2250738585072014E-308 to 1.7976931348623157E+308.
    Another difference is the lack of access control on the database engine level. Most SQL database servers implement some mechanisms to restrict who is allowed to fiddle with the databases and who is not. As SQLite3 uses regular files to store its databases, all available access control is on the filesystem level. There is no SQL interface to this kind of access control, but chmod and chown are your friends.
    sqlite driver misfeatures And now we have to discuss how successful the sqlite driver is in squeezing the SQLite idea of a database engine into the libdbi framework which was shaped after MySQL and PostgreSQL. Keep in mind that the limitations mentioned here are not intrinsic (except maybe the first one which is beyond our control), that is a sufficient amount of coding might fix these problems eventually. SQLite3 handles auto-increment columns in a fairly non-intuitive way. Only the type INTEGER PRIMARY KEY auto-increments. As a user of other database engine you might expect the row IDs to be 4-byte integers (they were in 2.x), but nope: they are in fact 8-byte integers, and therefore equivalent to INT8 or BIGINT of other engines. This leaves us with the odd "feature" of the sqlite3 driver that INTEGER is a 4-byte integer, whereas INTEGER PRIMARY KEY is a 8-bit integer type. If this were not the case, auto-incrementing columns would be artificially limited to the range of 4-byte integers. On the other hand this means that you cannot declare a real 4-byte integer auto-incrementing column. Do not forget to use dbi_result_get_longlong() or dbi_result_get_ulonglong to retrieve values from columns declared as INTEGER PRIMARY KEY. The (essentially) typeless nature of SQLite has some nasty consequences. The sqlite driver takes great care to reconstruct the type of a field that you request in a query, but this isn't always successful. To help the driver get things right, please stick to the following rules: When using a function as a result column [e.g. count(*)], the opening bracket must hug the function name as shown. The function call must also be aliased. When using an expression as a result column [e.g. (count(*) + 6)], the entire expression must be enclosed in brackets as shown and must also be aliased. The sqlite driver currently assumes that the directory separator of your filesystem is a slash (/). This may be wrong on your particular system. It is not a problem for Windows systems as long as the sqlite driver is built with the Cygwin tools (see README.win32). Listing tables with the dbi_conn_get_table_list() libdbi function currently returns only permanent tables. Temporary tables are ignored. The sqlite driver assumes that table and field names do not exceed 128 characters in length, including the trailing \0. I don't know whether SQLite internally has such a limit or not (both MySQL and PostgreSQL have a lower limit). The limit can be increased by changing a single #define in the dbd_sqlite.h header file. In a few cases, the sqlite driver expects you to type SQL keywords in all lowercase or all uppercase, but not mixed. This holds true for the 'from' in a SELECT statement. Type it either as 'from' or as 'FROM', but refrain from using 'fRoM' or other funny mixtures of uppercase and lowercase. Most other database engines treat the keywords as case-insensitive and would accept all variants.
    &freedoc-license;
    libdbi-drivers-0.9.0/drivers/sqlite3/dbd_sqlite3.pdf000644 001750 001750 00000562632 11500004667 023236 0ustar00markusmarkus000000 000000 %PDF-1.4 1 0 obj << /S /GoTo /D (1.0) >> endobj 4 0 obj (sqlite3 driver manual) endobj 5 0 obj << /S /GoTo /D (2.0) >> endobj 8 0 obj (Table of Contents) endobj 9 0 obj << /S /GoTo /D (3.0) >> endobj 12 0 obj (List of Tables) endobj 13 0 obj << /S /GoTo /D (4.0) >> endobj 16 0 obj (Preface) endobj 17 0 obj << /S /GoTo /D (5.0) >> endobj 20 0 obj (Chapter 1. Introduction) endobj 21 0 obj << /S /GoTo /D (6.0) >> endobj 24 0 obj (Chapter 2. Installation) endobj 25 0 obj << /S /GoTo /D (6.1.1) >> endobj 28 0 obj (2.1. Prerequisites) endobj 29 0 obj << /S /GoTo /D (6.2.1) >> endobj 32 0 obj (2.2. Build and install the sqlite3 driver) endobj 33 0 obj << /S /GoTo /D (7.0) >> endobj 36 0 obj (Chapter 3. Driver options) endobj 37 0 obj << /S /GoTo /D (8.0) >> endobj 40 0 obj (Chapter 4. Peculiarities you should know about) endobj 41 0 obj << /S /GoTo /D (8.3.1) >> endobj 44 0 obj (4.1. SQLite3 \(mis\)features) endobj 45 0 obj << /S /GoTo /D (8.4.1) >> endobj 48 0 obj (4.2. sqlite driver misfeatures) endobj 49 0 obj << /S /GoTo /D (9.0) >> endobj 52 0 obj (Appendix A. GNU Free Documentation License) endobj 53 0 obj << /S /GoTo /D [54 0 R /Fit ] >> endobj 56 0 obj << /Length 323 /Filter /FlateDecode >> stream xÚQ»nÃ0 ÜýíÁ¬H=,om>P´CQoE;V#±ƒúÑï/-I€v4"uw<…äƒ"CÈ@$µXµ‘n=Ex|¢­2hùòO75*ƒÜ‘é%É}Ý<’¤!ËE±èäüÌ ëµ\¬?ãá{ߌ^%)e.®ûæÇ÷KÞ–]‚2žÊ}òU¼,T¬qf&KsÎsE"ÕÊH dw tßTuÕü¥œ†¦Û,é¸õKòñþzÖ÷måëYµæÀª•K<Jœ±*ÈÔåXVåpdðݦéüiHÌ€ÐèàX‚BÅÿ‚JƒÎ) è·²ßMÂ}>ø®Y%$ã]yf@È¡`“Ër-%‚u h·¨Ûi`{hâ†ÃÔÏÅ•_ÏáÊì—ýÌ£Ê:?Î*ÑCqÚÞqýšuWrõö2‰¿endstream endobj 54 0 obj << /Type /Page /Contents 56 0 R /Resources 55 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 63 0 R >> endobj 57 0 obj << /D [54 0 R /XYZ 71.731 741.2204 null] >> endobj 58 0 obj << /D [54 0 R /XYZ 71.731 706.3512 null] >> endobj 59 0 obj << /D [54 0 R /XYZ 71.731 706.3512 null] >> endobj 2 0 obj << /D [54 0 R /XYZ 428.7309 688.2669 null] >> endobj 55 0 obj << /Font << /F24 62 0 R >> /ProcSet [ /PDF /Text ] >> endobj 66 0 obj << /Length 743 /Filter /FlateDecode >> stream xÚUKsÚ0¾ó+|èÁž‰…^–lzÊ£$í¤¶¡½´=ø!@©-’ðï+! I‡$Vß®¾ÝýV š 8œ˜…"€1¤A¹À`fŽ®ÈC(c'ˆ™'Nã„p¥˜q?ÈÅd0cd cæl2ínb$M“`Rý Û¿ ©‰bÌÓ°jäƒhÜ~™«Áp/FÎpî–…,ªBã×­T3·Õsá6wßn÷ÁŲ• Y™Å¹ç:/òÖƒ…šI%¢?“OÃ1!=Ú0ˆY‚è–q±1ø†Ÿóæ~ݺýM-”,ïsëmñ8ÄÙY¯ì­›FÎæÚÁ›bº†0‰ÍWúzÌ-#Sd‘g„ #DÑö†¯¢Yʶ•µržÒG˜5¹ÒÛdÍ]»µôt"–„gÎTÉV7²ˆ°)·Ζ«jX7n¿¬+9õYëy½ªËõR(ŸÒZU¢é >†6¼<¸žîÏL>ƒ“|〡”ŒPÀ0Ä'5¶CÅ}ØVc$镆°ÌàÞG³ºþòÃÝ?Ž’$l"ÂCáI^ù4r½«ß­,…jˆÒŒ²äu¢;Ô ¢ýG³D}G~F¡P4ûž"àcšbES˜j§È‹Ó“š$ô½ZäºëɃ5÷ã­ÖÅB¶óNÅæ wã¦+Ð]=ÕV2yÓÙ`µéø¶fïñQê¹Û)¯´*¢öfœW™wJ¹¥ukÏ^ò7µÒñemoñ¼ÝÁ$â0Öò¤;w£Ó—â\äåýA?žýq~8ÏóƒQ9’°+¯—ɳ™“ª\¬«®¬RŠC!4`¦qrRD;T܇‹è8šMé|µª’O]2‡(&{ò…õ…£h–8ñŽÆˆSÀSc3C8çîõú.¬Bä^›7æ=ª›Í®[ `ÑÀïú¦Q7,™?ŒâÔ.WfF»7B>ÄþÉÅhùˆîŠåÿ³ á±ìÿÿÿ¬lÇüendstream endobj 65 0 obj << /Type /Page /Contents 66 0 R /Resources 64 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 63 0 R /Annots [ 71 0 R 75 0 R ] >> endobj 71 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [366.6224 631.8984 481.2157 641.0201] /Subtype /Link /A << /S /GoTo /D (COPYING-FDL) >> >> endobj 75 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [206.3371 605.9956 247.5105 615.1172] /Subtype /Link /A << /S /GoTo /D (COPYING-FDL) >> >> endobj 67 0 obj << /D [65 0 R /XYZ 71.731 741.2204 null] >> endobj 76 0 obj << /D [65 0 R /XYZ 71.731 553.3002 null] >> endobj 64 0 obj << /Font << /F24 62 0 R /F33 70 0 R /F35 74 0 R >> /ProcSet [ /PDF /Text ] >> endobj 80 0 obj << /Length 15296 /Filter /FlateDecode >> stream xÚK³Wz]çý+0$LWUÖshY–Â…CS#ÛŠD[³I7¶ÃÿÞyqóìS¹Oå·vhÐ$q´V"xÔ^÷øá°üßñÃí8ÝæåÎÇét:œ?üô—?>ü¯å›þñOÇõÈùzN—ãuù“ßúýe¾MûéúáûgÈßýð§÷§ó‡Óaº^î—?ü¹©®åÔýpÿðÃÏÿý»>Þßýø¯‡ï~ùôñûÓíþÝo~ÿßÿðÛ¯_?ýúõËÇÿùÃþÓüA†¹Þ§Ãáp|ùLë™ïŸ}{¢ùþá1=®ËÓ>=P;ôö@ÿüûÇãý»Oþñ§O.>æé:O¥ú0o÷óΫ:ÎÓñð¸ÒƒéÜæÑ¦ñ®Óõp˜_>Ð ùzåNÝ‘?¦ÃãðHåëi”;õµüxœ.÷ã5”·Ó$¨;òót¸N©|=r§îȯÓåzJ_{;r§îÈ—Û¹Ìñk_O£Ü©¯å§åvÎçôµ·Ó$¨;òåvæsúÚÛi”;uG¾ÜÎérIåëi”;uG¾ÜÎñ¿öõ4ÊúZ>/·s¸¦¯½&ù@Ý‘ÏÓãqK_{;r§îȯÓù~O_{;r§îÈïÓãv¿§òõ4ÊúZ¾ü(â|}¤¯½&ù@Ý‘/·s=¤¯½F¹SwäËí\éko§QîÔùr;çcüÚ×Ó(wêkùe¹ùt åí4ÉêŽ|¹Ó)}íí4ʺ#_nç8§¯½F¹SwäËíÎñk_O£Ü©¯å×ã4?Îéko§I>Pwäót¿_Ω|=r§îȯÓ|»¦¯½F¹Swä÷é¾Iåëi”;õµ|ù)×|¹¥¯½&ù@Ý‘/·s¾§¯½F¹SwäËíÌ÷[*_O£Ü©;òåvNøµ¯§QîÔ×òûr;§CúÚÛi’Ôùr;ÇCúÚÛi”;uG¾ÜÎᘾövåNݑߧÛ#ýÌzÕÆ|mþö <§ô·Óä¨;òyºÝæô·Ó(wêŽü:®±ûý0ª¹c^nærŽßùzÝN})_þ1œNçKøëP: ò‘º#_®&ý%‰vÕÆÜ1/7sºÞRõzÝNÝ‘/W³ü·'•¯§QîÔ×òãr5éÏSÚaR;sÇO—å§©|=r§îȯÓávK_{;r§îÈïÓåz‹_ûzåN}-¿,·óö›³™¼&ù@Ý‘/·sN‚¢Ó(wêŽ|¹ù‘¾övåNÝ‘/·3â×¾žF¹S_˯Ë휎éko§I>PwäËíébÚi”;uG¾ÜÎᔾövåNݑߧócŽ_ûzåN}-¿¦Ç}N_{;Mòº#Ÿ§ó휾övåNÝ‘_–ÿ—Ë1•¯§QîÔùr;—KüÚ×Ó(wêkù}¹ó5}íí4ÉêŽ|¹ù–¾övåNÝ‘/·³¼¥T¾žF¹SwäËíïçT¾žF¹S_ËËíéko§I>Pwäó´ü·/}íí4ʺ#¿L÷Ç!}íí4ʺ#¿Oóý¿öõ4ÊúR>Óýv J§A>RwäËí\OçT¾žF¹SwäËí\æc*_O£Ü©;òåv–¥òõ4ÊúZ~\ng>§¯½&ù@Ý‘/·“þ(ªFµ1wÌËÕ/é;o§ÑíÔùr5‡küÎ×Ó(wêkùé0Ýéw|=Ljgî˜çét¿Åêõ4ºº#¿L·Û}Nåëi”;uG~ŸNé'ÏÚaTóµy^næ_w;Mîº#_®æ’~¦X§QîÔùr5éÇQÚaTsǼÜÌœ~ X§ÑíÔ×òór5§SúÎÛi’Ôùr5ÇØý~ÕÆÜ1/7sHëN§ÑíÔù}:>Îñ÷{=r§¾–_Óõž~šX§I>Pwäót¼]Ò×ÞN£Ü©;òËt½^Ó×ÞN£Ü©;òåv.ñ¿ÓÛi”;õµüºÜÎù–¾övšäuG¾ÜΜ~šX§QîÔùr;§{úÚÛi”;uG¾ÜÎñ¿öõ4ÊúZ~[nç˜~šX§I>PwäËíÒŽN£Ü©;òËty¤Ÿ&Öi”;uG¾|ëý¿öõ4ÊúZ~?L—[:ÐÑi’Ôù<®é§‰uåNÝ‘/·sI::r§îÈ—o=§Ÿ&Öi”;õµü±ÜΜttšäuG¾ÜÎ)èè4ʺ#_nç˜~.E§QîÔùÛ·Þâ×¾žF¹S_ÊχÃt~¤Ÿ&ÖiÔùizÜÓŽN£Ü©;òËt¾¥F¹Swä·éq;į}=r§¾–—Û¹¦|Ói’Ôùr;—ôÓÄ:r§îÈ—Û9§F¹SwäËí̧øµ¯§QîÔ×òÓr;§ôÅ:Mòº#_nç˜þŠˆN£Ü©;òåvégŠuåNݑߦûã¿öõ4ÊúZ>¦ùžttšäuG~šî·ôcÅ:r§îÈ/Ó|M::r§îÈ—ÛI¿¼Fµ1_›ÏËÕœÓuŽN“{ îÈ—«™ÓuŽN£Ü©;òåjæTýí,Š·Äír-§CüÂ×Ó¨vêkùe¹—cúkž:Mòº#_î%ý%vÕÆÜ1_¦Ó#Ýåè4ºº#¿M·{üwZ;r§¾–_Ó)þ—Úz˜ÔÎÜ1Ÿ¦Û5ý@±N£Û©;òåj.é.G§QîÔùr5ùwüý0ªùÚ|[nfN?M¬Óä¨;òåjNé.G§QîÔùr5ÇôÓÄ:r§îÈ—Ë9Üã×¾žF¹S_Ëï‡éøH§9:Mòº#?M×{úibF¹Swä—éxO::r§îÈoÓõ–~šX§QîÔ×òÇr;×t £Ó$¨;òåv.é@G§QîÔùr;çôÓÄ:r§îÈ—Û™çøµ¯§QîÔ—òËa¹SúibùHÝ‘/·sL::r§îÈ—Û9¤F¹Swä·éò¸Æ¯}=r§¾–ÓážttšäuG~š.·ôÓÄ:r§îÈ/ÓášttåNÝ‘/·syį}=r§¾–Ÿ–Û9§Ÿ&Öi’Ôùr;çt £Ó(wêŽ|¹9ý4±N£Ü©;òåvNÇøµ¯§QîÔ×òy¹cúÑR&ù@Ý‘/·s€®èú{3{Ôyùäݬçì•hͪ–¡SµY¿_þ¡žÏËw³Ì¡^Þ~xq»Ö9Ôvèí±ŽÓÇïO—Ãwÿéׯߨ¿ýüÇO_?ÿöëXŒ»,?#}û€ß“b|}ËÏa{mÔž°+Ÿ²'잟³Hؽx *ar§BÂ.’÷„]-¨°ËäJØÜ©°ËäJØÜ©°ËäJØÜ©°‹ä=aWË*$ì2¹v w*$ì2¹v w*$ì2¹v w*$ì"yOØÕò »L®„È »L®„È »L®„È »HÞvµ| BÂ.“+ar§BÂ.“+ar§BÂ.“+ar§BÂ.’÷„]-¨°ËäJØÜ©°ËäJØÜ©uÂ.s·„¨ »HÝvµ{ BÂ.“+ar§Ö »ÌÝv 6&$ì2µvàv*$ìùS®”Ô:a—¹[ÂÔÆ„„]¦VÂÜN…„]&WÂäN­v‘[ »ZíLHØej%ìÀíTHØer%ì@îÔ2a—©×„ˆ·DHØEâž°«Õv™\ ;;v™\ ;;v™\ ;;v‘¼'ìjù@…„]&WÂäN…„]&WÂäN…„]&WÂäN…„]$ï »Z>P!a—É•°¹S!a—É•°¹S!a—É•°¹S!aÉ{®–THØer%ì@îTHØer%ì@îTHØer%ì@îTHØEòž°«åv™\ ;;v™\ ;;v™\ ;;v‘¼'ìjù@…„]&WÂäN…„]&WÂäN…„]&WÂäN…„]$ï »Z>P!a—É•°¹S!a—É•°¹S!a—É•°¹S!aÉ{®–THØer%ì@îTHØer%ì@îTHØer%ì@îTHØ%ò§„])©°ËäJØÜ©°ËäJØÜ©°ËäJØÜ©°‹ä=aWËj°ËÜ-ajcBÂ.S+an§BÂ.“+ar§Ö »È­„]­v&$ì2µvàv*$ì2¹v wj°ËÜ-ajcBÂ.R÷„]í¨°ËäJØÜ©uÂ.s·„¨ »L­„¸ »HÞvµ| Ö »ÌÝv 6&$ì2µvàv*$ì2¹v w*$ì"yOØÕò »L®„È »L®„È »L®„È »HÞvµ| BÂ.“+ar§BÂ.“+ar§BÂ.“+ar§BÂ.’÷„]-¨°ËäJØÜ©°ËäJØÜ©°ËäJØÜ©°‹ä=aWË*$ì2¹v w*$ì2¹v w*$ì2¹v w*$ì"yOØÕò »L®„È »L®„È »L®„È »Dþ”°+å#v™\ ;;v™\ ;;v™\ ;;v‘¼'ìjù@…„]&WÂäN…„]&WÂäN…„]&WÂäN…„]$ï »Z>P!a—É•°¹S!a—É•°¹S!a—É•°¹S!aÉ{®–THØer%ì@îTHØer%ì@îÔ:a—¹[ÂÔÆ„„]¤î »Ú=P!a—É•°¹SË„]¦^v Þ!a—‰•°µS!aÉ{®–Ô:a—¹[ÂÔÆ„„]¦VÂÜN…„]&WÂäN­v‘[ »ZíLHØej%ìÀíTHØer%ì@îÔ:a—¹[ÂÔÆ„„]¤î »Ú=P!a—É•°¹S!a—É•°¹S!a—É•°¹S!aÉ{®–THØer%ì@îTHØer%ì@îTHØer%ì@îTHØEòž°«åv™\ ;;v™\ ;;v™\ ;;v‰ü)aWÊG*$ì2¹v w*$ì2¹v w*$ì2¹v w*$ì"yOØÕò »L®„È »L®„È »L®„È »HÞvµ| BÂ.“+ar§BÂ.“+ar§BÂ.“+ar§BÂ.’÷„]-¨°+lY¨%ì6­¸ý„]ñ@CÂî\'ìæüöŸš2a×½=ÖI »/_üå—_çë–÷òíóOx†·èõ¶›¯;./ÿÛGmÊ'Ô¹Í3¾È×ÍÓãñö;x/è…|=r§îÈ[b/“+Ür§B¸/“+Ür§B¸/’÷p_-¨îËä ÷Ü©îËä ÷Ü©îËä ÷Ü©î‹ä=ÜWË*„û2¹Â} w*„û2¹Â} w*„û2¹Â} w*„û"y÷Õò á¾L®pÈ á¾L®pÈ á¾L®pÈ á¾HÞÃ}µ| B¸/“+Ür§B¸/“+Ür§B¸/“+Ür§B¸/’÷p_-¨îËä ÷Ü©îËä ÷Ü©u¸/s·p¨ á¾HÝÃ}µ{ B¸/“+Ür§Öá¾ÌÝÂ} 6&„û2µÂ}àv*„ûùS¸¯”Ô:Ü—¹[¸ÔÆ„p_¦V¸ÜN…p_&W¸äN­Ã}‘[á¾ZíL÷ej…ûÀíT÷er…û@îÔ2Ü—©×pˆ·D÷Eâî«ÕÂ}™\á>;Â}™\á>;Â}™\á>;Â}‘¼‡ûjù@…p_&W¸äN…p_&W¸äN…p_&W¸äN…p_$ïá¾Z>P!Ü—Éî¹S!Ü—Éî¹S!Ü—Éî¹S!ÜÉ{¸¯–T÷er…û@îT÷er…û@îT÷er…û@îT÷Eòî«åÂ}™\á>;Â}™\á>;Â}™\á>;Â}‘¼‡ûjù@…p_&W¸äN…p_&W¸äN…p_&W¸äN…p_$ïá¾Z>P!Ü—Éî¹S!Ü—Éî¹S!Ü—Éî¹S!ÜÉ{¸¯–T÷er…û@îT÷er…û@îT÷er…û@îT÷%ò§p_)©îËä ÷Ü©îËä ÷Ü©îËä ÷Ü©î‹ä=ÜWËjîËÜ-ÜjcB¸/S+Ün§B¸/“+Ür§Öá¾È­p_­v&„û2µÂ}àv*„û2¹Â} wjîËÜ-ÜjcB¸/R÷p_í¨îËä ÷Ü©u¸/s·p¨ á¾L­p¸ á¾HÞÃ}µ| Öá¾ÌÝÂ} 6&„û2µÂ}àv*„û2¹Â} w*„û"y÷Õò á¾L®pÈ á¾L®pÈ á¾L®pÈ á¾HÞÃ}µ| B¸/“+Ür§B¸/“+Ür§B¸/“+Ür§B¸/’÷p_-¨îËä ÷Ü©îËä ÷Ü©îËä ÷Ü©î‹ä=ÜWË*„û2¹Â} w*„û2¹Â} w*„û2¹Â} w*„û"y÷Õò á¾L®pÈ á¾L®pÈ á¾L®pÈ á¾Dþî+å#Â}™\á>;Â}™\á>;Â}™\á>;Â}‘¼‡ûjù@…p_&W¸äN…p_&W¸äN…p_&W¸äN…p_$ïá¾Z>P!Ü—Éî¹S!Ü—Éî¹S!Ü—Éî¹S!ÜÉ{¸¯–T÷er…û@îT÷er…û@îÔ:Ü—¹[¸ÔÆ„p_¤îá¾Ú=P!Ü—Éî¹SËp_¦^Ã} Þ!Ü—‰îµS!ÜÉ{¸¯–Ô:Ü—¹[¸ÔÆ„p_¦V¸ÜN…p_&W¸äN­Ã}‘[á¾ZíL÷ej…ûÀíT÷er…û@îÔ:Ü—¹[¸ÔÆ„p_¤îá¾Ú=P!Ü—Éî¹S!Ü—Éî¹S!Ü—Éî¹S!ÜÉ{¸¯–T÷er…û@îT÷er…û@îT÷er…û@îT÷Eòî«åÂ}™\á>;Â}™\á>;Â}™\á>;Â}‰ü)ÜWÊG*„û2¹Â} w*„û2¹Â} w*„û2¹Â} w*„û"y÷Õò á¾L®pÈ á¾L®pÈ á¾L®pÈ á¾HÞÃ}µ| B¸/“+Ür§B¸/“+Ür§B¸/“+Ür§B¸/’÷p_-¨î+êsi¸¨…û6…¼ýp_ñ@ß~5h>¿IßÃ}——§–ÿ°_Ïß~/àtœËO$ú“ÍOOÖŽéÔ{ºï¸Æûþù÷O¿ú럿|þúé˘:/w¿ýRþ“b¬÷Ýçó^¼¯gŽÊ‡ì™£ç§,2G/ž§ÊÜ©9Šä=sTË*dŽ2¹2G w*dŽ2¹2G w*dŽ2¹2G w*dŽ"yÏÕò ™£L®ÌÈ ™£L®ÌÈZgŽ2wËÚ˜9ŠÔ=sT»*dŽ2¹2G wj9ÊÜ-sjcBæ(S+sn§Bæ(‘?eŽJùH­3G™»eŽ@mLÈejeŽÀíTÈereŽ@îÔ:s¹•9ªÕ΄ÌQ¦VæÜN…ÌQ&WæäN-3G™zÍxK„ÌQ$Z=P!s”É•9¹S!s”É•9¹S!s”É•9¹S!sÉ{樖TÈereŽ@îTÈereŽ@îTÈereŽ@îTÈEòž9ªå2G™\™#;2G™\™#;2G™\™#;2G‘¼gŽjù@…ÌQ&WæäN…ÌQ&WæäN…ÌQ&WæäN…ÌQ$Z>P!s”É•9¹S!s”É•9¹S!s”É•9¹S!sÉ{樖TÈereŽ@îTÈereŽ@îTÈereŽ@îTÈEòž9ªå2G™\™#;2G™\™#;2G™\™#;2G‘¼gŽjù@…ÌQ&WæäN…ÌQ&WæäN…ÌQ&WæäN…ÌQ"Ê•ò‘ ™£L®ÌÈ ™£L®ÌÈ ™£L®ÌÈ ™£HÞ3Gµ| Ö™£ÌÝ2G 6&dŽ2µ2Gàv*dŽ2¹2G wj9ŠÜÊÕjgBæ(S+sn§Bæ(“+sr§Ö™£ÌÝ2G 6&dŽ"uÏÕî ™£L®ÌÈZgŽ2wËÚ˜9ÊÔÊÛ©9Šä=sTËj9ÊÜ-sjcBæ(S+sn§Bæ(“+sr§Bæ(’÷ÌQ-¨9ÊäÊÜ©9ÊäÊÜ©9ÊäÊÜ©9Šä=sTË*dŽ2¹2G w*dŽ2¹2G w*dŽ2¹2G w*dŽ"yÏÕò ™£L®ÌÈ ™£L®ÌÈ ™£L®ÌÈ ™£HÞ3Gµ| Bæ(“+sr§Bæ(“+sr§Bæ(“+sr§Bæ(’÷ÌQ-¨9ÊäÊÜ©9ÊäÊÜ©9ÊäÊÜ©9JäO™£R>R!s”É•9¹S!s”É•9¹S!s”É•9¹S!sÉ{樖TÈereŽ@îTÈereŽ@îTÈereŽ@îTÈEòž9ªå2G™\™#;2G™\™#;2G™\™#;2G‘¼gŽjù@…ÌQ&WæäN…ÌQ&WæäN­3G™»eŽ@mLÈEêž9ªÝ2G™\™#;µÌeê5sâ-2G™X™#P;2G‘¼gŽjù@­3G™»eŽ@mLÈejeŽÀíTÈereŽ@îÔ:s¹•9ªÕ΄ÌQ¦VæÜN…ÌQ&WæäN­3G™»eŽ@mLÈEêž9ªÝ2G™\™#;2G™\™#;2G™\™#;2G‘¼gŽjù@…ÌQ&WæäN…ÌQ&WæäN…ÌQ&WæäN…ÌQ$Z>P!s”É•9¹S!s”É•9¹S!s”É•9¹S!s”ÈŸ2G¥|¤Bæ(“+sr§Bæ(“+sr§Bæ(“+sr§Bæ(’÷ÌQ-¨9ÊäÊÜ©9ÊäÊÜ©9ÊäÊÜ©9Šä=sTË*dŽ2¹2G w*dŽ2¹2G w*dŽ2¹2G w*dŽ"yÏÕò ™£"Ó“fŽàZæhSÚÏôœ9Z¿Îo;­2GíÔ{æè´fŽþîÏ¿üüþ‡?þºþÁç_¿|ýñ—_Þÿäë¿}zÿƒ/ýåó×OóûŸüüûç§Ëwûx¼|÷é÷—ÈËÛï3>=ÚøÞÇãmç½?"Ëï]E>÷ŠQ䋪F‘µ| Â(2“k r§Â(2“k r§Â(2“k r§Â(2’÷Qd-¨0ŠÌäE‚Ü©0ŠÌäE‚Ü©0ŠÌäE‚Ü©0ŠŒä}YË*Œ"3¹F‘ w*Œ"3¹F‘ w*Œ"3¹F‘ w*Œ"#yEÖò £ÈL®Q$È £ÈL®Q$È £ÈL®Q$È £ÈHÞG‘µ| Â(2“k r§Â(2“k r§Â(2“k r§Â(2‘?"KùH…Qd&×(äN…Qd&×(äN…Qd&×(äN…Qd$ï£ÈZ>PëQdæn£HPF‘™Z£Hp;F‘™\£H;µEFn"kµ3a™©5Š·Sa™É5йSëQdæn£HPF‘‘º"k÷@…Qd&×(äN­G‘™»"AmLEfj"ÁíTEFò>ЬåµEfî6е1a™©5Š·Sa™É5йSaÉû(²–TEfr"AîTEfr"AîTEfr"AîTEFò>ЬåF‘™\£H;F‘™\£H;F‘™\£H;F‘‘¼"kù@…Qd&×(äN…Qd&×(äN…Qd&×(äN…Qd$ï£ÈZ>Pa™É5йSa™É5йSa™É5йSaÉû(²–TEfr"AîTEfr"AîTEfr"AîTE&ò§Qd)©0ŠÌäE‚Ü©0ŠÌäE‚Ü©0ŠÌäE‚Ü©0ŠŒä}YË*Œ"3¹F‘ w*Œ"3¹F‘ w*Œ"3¹F‘ w*Œ"#yEÖò £ÈL®Q$È £ÈL®Q$È £ÈL®Q$È £ÈHÞG‘µ| Â(2“k r§Â(2“k r§Ö£ÈÌÝF‘ 6&Œ"#uEÖî £ÈL®Q$ÈZŽ"3õ:Šñ–£ÈL¬Q$¨ £ÈHÞG‘µ| Ö£ÈÌÝF‘ 6&Œ"3µF‘àv*Œ"3¹F‘ wj=ŠŒÜEÖjgÂ(2Sk n§Â(2“k r§Ö£ÈÌÝF‘ 6&Œ"#uEÖî £ÈL®Q$È £ÈL®Q$È £ÈL®Q$È £ÈHÞG‘µ| Â(2“k r§Â(2“k r§Â(2“k r§Â(2’÷Qd-¨0ŠÌäE‚Ü©0ŠÌäE‚Ü©0ŠÌäE‚Ü©0ŠLäO£ÈR>Ra™É5йSa™É5йSa™É5йSaÉû(²–TEfr"AîTEfr"AîTEfr"AîTEFò>ЬåF‘™\£H;F‘™\£H;F‘™\£H;F‘‘¼"kù@…Qd9ÎËF‘ð@m¹Ùî"‹Z~ât]~2ööI´åêù¼|7_º§ÛÛGŸ/yùÕýÞìþô`ë)z{¬yDþýïŸ?oËÆÃÛ²ñÛ_ûíÿ|ýüÛ¯_†¯Ïýöá¯Ãiþðlßäí²üŒâõ›|#<®o¿ìQ?°Îmyü‚áçët¾î/è…|=r§îÈïÓã|¼¤òõ4ÊúZ~9NË莡¼&ù@Ý‘/·s:¥¯½F¹SwäËíçôµ·Ó(wêŽ|¹Ã9~íëi”;õµüzœæÇ9}íí4ÉêŽ|žî÷Ë9•¯§QîÔùušo×ôµ·Ó(wêŽü>Ý¯×øµ¯§QîÔ×òå_Ýóå–¾övšäuG¾ÜÎùž¾övåNÝ‘/·3ßo©|=r§îÈ—Û9=â×¾žF¹S_ËïËíœéko§I>PwäËíéko§QîÔùr;‡cúÚÛi”;uG~ŸnSê~?Œjc¾6?ŽÓé~Jßy;Mîº#Ÿ§ÛmNßy;r§îÈ—ä^c÷ûaTsǼÜÌå¿óõ4ºúzWzX®æ|™3¹Nƒ|¤îÈ—«™¯©ûý0ª¹c^næt½¥êõ4ºº#_®fùoO*_O£Ü©¯åÇåjÒŸ§´Ã¤væŽyùÖÇ=½îvÝNÝ‘_§ãý‘¾óvåNݑߧküÊ¿Eñ–øZ{:NÇÛ!}áí4©êŽ|ùÖë1}áí4ʺ#_îår|¤òõ4ʺ#_îæ|Š_ûzåN}-Ÿ—Û™çôµ·Ó$¨;òå[OsúÚÛi”;uG¾ÜÎñœ¾övåNÝ‘/·s¸œRùzåN}-?§Ãã’¾övšäuG>O—å§©|=r§îȯÓávK_{;r§îÈ×Z(oY5’;µÎªereÕ@>Pë¬Z(oY5’;µÎª…ò–U#¹Së¬Z(oY5’;µÎªereÕ@>Pë¬Z(oY5’;µÎª…ò–U#¹Së¬Z(oY5’;µÎªereÕ@>Pë¬Z(oY5’;µÎª…ò–U#¹Së¬Z(oY5’;µÎªereÕ@>Pë¬Z(oY5’;µÎª…ò–U#¹Së¬Z(oY5’;µÎªereÕ@>Pë¬Z(oY5’;µÎª…ò–U#¹Së¬Z(oY5’;µÎªEòžU«å#µÎª…ò–U#¹Së¬Z(oY5’;µÎª…ò–U#¹Së¬Z&WV äµÌª…î5«FjcÖYµPݲjävjU å-«Fr§–YµÌݲj vfU Õ-«Fn§ÖYµPÞ²j$wj™U ÝkVÔÆ¬³j™ZY5pÔ:«Ê[VäN-³j¡{ͪ‘Ú˜uV-T·¬¹ZgÕ2¹²j ¨eV-t¯Y5R³Îª…ê–U#·Së¬Z(oY5’;µÎªereÕ@>Pë¬Z(oY5’;µÎª…ò–U#¹Së¬Z(oY5’;µÎªereÕ@>Pë¬Z(oY5’;µÎª…ò–U#¹Së¬Z(oY5’;µÎªereÕ@>Pë¬Z(oY5’;µÎª…ò–U#¹Së¬Z(oY5’;µÎªereÕ@>Pë¬Z(oY5’;µÎª…ò–U#¹Së¬Z(oY5’;µÎªereÕ@>Pë¬Z(oY5’;µÎª…ò–U#¹Së¬Z(oY5’;µÎªEòžU«å#µÎª…ò–U#¹Së¬Z(oY5’;µÎª…ò–U#¹Së¬Z&WV äµÎª…ò–U#¹Së¬Z(oY5’;µÎª…ò–U#¹Së¬Z&WV äµÎª…ò–U#¹Së¬Z(oY5’;µÎª…ò–U#¹Së¬Z&WV äµÎª…ò–U#¹Së¬Z(oY5’;µÌª…î5«FjcÖYµL­¬¸jU å-«Fr§VYµPýžU#ñ–XgÕBq˪‘Ú©uV-“+«òZfÕB÷šU#µ1ë¬Z¨nY5r;µÎª…ò–U#¹SˬZænY5P;³Îª…ê–U#·Së¬Z(oY5’;µÌª…î5«FjcÖYµL­¬¸jU å-«Fr§ÖYµPÞ²j$wjU å-«Fr§ÖYµL®¬ÈjU å-«Fr§ÖYµPÞ²j$wjU å-«Fr§ÖYµL®¬ÈjU å-«Fr§ÖYµPÞ²j$wjU å-«Fr§ÖYµHÞ³jµ|¤ÖYµPÞ²j$wjU å-«Fr§ÖYµPÞ²j$wjUËäʪ| ÖYµPÞ²j$wjU å-«Fr§ÖYµPÞ²j$wjUËäʪ| ÖYµPÞ²j$wjU å-«Fr§ÖYµPÞ²j$wjUËäʪ| ÖYµ:eÕèÖ¬ÚæÎ»Yµê†¬Ú¹ÎªÝîÓ<_ÏuV­úöXkVíŸ?žß}úé_>ÿøû篟?}yÿËÿïãéòÝo¼ÿÉ—ûí_~~ÿãÿýëoo¶ÿûþg?þëo|ç®oKÞ>Ra~›É5¿¹Sa~›É5¿¹Sa~›É5¿¹Sa~Éûü¶–Ôz~›¹ÛüÔÆ„ùm¦ÖüÜN…ùm&×üäN­ç·‘[óÛZíL˜ßfjÍoÁíT˜ßfrÍoAîÔz~›¹ÛüÔÆ„ùm¤îóÛÚ=Pa~›É5¿¹Sëùmænó[Pæ·™Zó[p;æ·‘¼Ïokù@­ç·™»ÍoAmL˜ßfjÍoÁíT˜ßfrÍoAîT˜ßFò>¿­åæ·™\ó[;æ·™\ó[;æ·™\ó[;æ·‘¼Ïokù@…ùm&×üäN…ùm&×üäN…ùm&×üäN…ùm$ïóÛZ>Pa~›É5¿¹Sa~›É5¿¹Sa~›É5¿¹Sa~Éûü¶–T˜ßfrÍoAîT˜ßfrÍoAîT˜ßfrÍoAîT˜ßFò>¿­åæ·™\ó[;æ·™\ó[;æ·™\ó[;æ·‰üi~[ÊG*Ìo3¹æ· w*Ìo3¹æ· w*Ìo3¹æ· w*Ìo#yŸßÖò óÛL®ù-È óÛL®ù-È óÛL®ù-È óÛHÞç·µ| Âü6“k~ r§Âü6“k~ r§Âü6“k~ r§Âü6’÷ùm-¨0¿Íäšß‚Ü©0¿Íäšß‚Ü©õü6s·ù-¨ óÛHÝç·µ{ Âü6“k~ r§–óÛL½ÎoA¼%Âü6k~ j§Âü6’÷ùm-¨õü6s·ù-¨ óÛL­ù-¸ óÛL®ù-ÈZÏo#·æ·µÚ™0¿ÍԚ߂۩0¿Íäšß‚Ü©õü6s·ù-¨ óÛHÝç·µ{ Âü6“k~ r§Âü6“k~ r§Âü6“k~ r§Âü6’÷ùm-¨0¿Íäšß‚Ü©0¿Íäšß‚Ü©0¿Íäšß‚Ü©0¿ä}~[Ë*Ìo3¹æ· w*Ìo3¹æ· w*Ìo3¹æ· w*ÌoùÓü¶”T˜ßfrÍoAîT˜ßfrÍoAîT˜ßfrÍoAîT˜ßFò>¿­åæ·™\ó[;æ·™\ó[;æ·™\ó[;æ·‘¼Ïokù@…ùm&×üäN…ùm&×üäN…ùm&×üäN…ùm$ïóÛZ>Pa~[¬AÓù-?Ðe~[<з_ šÏoÒ÷ùíåå©å?ì×ó·ß X~â¸üxöÑŸl~z²vL§Þ¸Çu‚ûßþë?}þúi~ÿ“ÿq¸þòùËò?Ç?úñë¿úòꫲßoŸ~{²ŽÛûù|ÞØê«¥—Ï­¯–þüÜÅWKñ8ÕWK·Sá«¥gr}µt;µþjé‘[_-½V;¾Zz¦ÖWK·Sá«¥gr}µt;µüjé™zýjé Þá«¥GâþÕÒkõ@…¯–žÉõÕÒAîTøjé™\_-äN…¯–žÉõÕÒAîTøj鑼µôZ>Pá«¥gr}µt;¾Zz&W®äN…\C&W®äN…\C$﹆Z>P!×É•k¹S!×É•k¹S!×É•k¹S!×É{®¡–TÈ5drå@îTÈ5drå@îTÈ5drå@îTÈ5Dòžk¨år ™\¹;r ™\¹;r ™\¹;r ‘¼çjù@…\C&W®äN…\C&W®äN…\C&W®äN…\C$﹆Z>P!×É•k¹S!×É•k¹S!×É•k¹S!×É{®¡–TÈ5drå@îTÈ5drå@îTÈ5drå@îTÈ5$ò§\C)©kÈäÊ5€Ü©kÈäÊ5€Ü©kÈäÊ5€Ü©kˆä=×PËjkÈÜ-×jcB®!S+×n§B®!“+×r§Ö¹†È­\C­v&ä2µr àv*ä2¹r wjkÈÜ-×jcB®!R÷\Cí¨kÈäÊ5€Ü©u®!s·\¨ ¹†L­\¸ ¹†HÞs µ| Ö¹†ÌÝr  6&ä2µr àv*ä2¹r w*ä"yÏ5Ôò ¹†L®\È ¹†L®\È ¹†L®\È ¹†HÞs µ| B®!“+×r§B®!“+×r§B®!“+×r§B®!’÷\C-¨kÈäÊ5€Ü©kÈäÊ5€Ü©kÈäÊ5€Ü©kˆä=×PË*ä2¹r w*ä2¹r w*ä2¹r w*ä"yÏ5Ôò ¹†L®\È ¹†L®\È ¹†L®\È ¹†Dþ”k(å#r ™\¹;r ™\¹;r ™\¹;r ‘¼çjù@…\C&W®äN…\C&W®äN…\C&W®äN…\C$﹆Z>P!×É•k¹S!×É•k¹S!×É•k¹S!×É{®¡–TÈ5drå@îTÈ5drå@îÔ:×¹[®ÔÆ„\C¤î¹†Ú=P!×É•k¹SË\C¦^s Þ!׉•kµS!×É{®¡–Ô:×¹[®ÔÆ„\C¦V®ÜN…\C&W®äN­s ‘[¹†ZíLÈ5djåÀíTÈ5drå@îÔ:×¹[®ÔÆ„\C¤î¹†Ú=P!×É•k¹S!×É•k¹S!×É•k¹S!×É{®¡–TÈ5drå@îTÈ5drå@îTÈ5drå@îTÈ5Dòžk¨år ™\¹;r ™\¹;r ™\¹;r ‰ü)×PÊG*ä2¹r w*ä2¹r w*ä2¹r w*ä"yÏ5Ôò ¹†L®\È ¹†L®\È ¹†L®\È ¹†HÞs µ| B®!“+×r§B®!“+×r§B®!“+×r§B®!’÷\C-¨k(Úi®¨åž¨È5ôœkX¿Î5\Þþx:¹†vê=×pZs _þúË篟Þÿøçß?¿}¡ô¿}<^¾ûôûû_ûËç/ûå†ûbyûhÒÓøcž¦ÓyÞ{»½"P~Txþ.SUÀíT¨drU@îÔ²"©×Šˆ·D¨Dâ^¨Õ*™\;*™\;*™\;*‘¼Wjù@…Š@&WEäN…Š@&WEäN…Š@&WEäN…Š@$ïZ>P¡"ÉU¹S¡"ÉU¹S¡"ÉU¹S¡"É{E –T¨drU@îT¨drU@îT¨drU@îT¨Dò^¨å*™\;*™\;*™\;*‘¼Wjù@…Š@&WEäN…Š@&WEäN…Š@&WEäN…Š@$ïZ>P¡"ÉU¹S¡"ÉU¹S¡"ÉU¹S¡"É{E –T¨drU@îT¨drU@îT¨drU@îT¨$ò§Š@)©PÈ䪀ܩPÈ䪀ܩPÈ䪀ܩPˆä½"PËj]ÈÜ­"jcBE S«"n§BE “«"r§ÖÈ­Š@­v&T2µ*àv*T2¹* wj]ÈÜ­"jcBE R÷Š@í¨PÈ䪀ܩuE s·Š¨ L­Š¸ HÞ+µ| ÖÌÝ* 6&T2µ*àv*T2¹* w*T"y¯Ôò L®ŠÈ L®ŠÈ L®ŠÈ HÞ+µ| BE “«"r§BE “«"r§BE “«"r§BE ’÷Š@-¨PÈ䪀ܩPÈ䪀ܩPÈ䪀ܩPˆä½"PË*T2¹* w*T2¹* w*T2¹* w*T"y¯Ôò L®ŠÈ L®ŠÈ L®ŠÈ DþT(å#*™\;*™\;*™\;*‘¼Wjù@…Š@&WEäN…Š@&WEäN…Š@&WEäN…Š@$ïZ>P¡"ÉU¹S¡"ÉU¹S¡"ÉU¹S¡"É{E –T¨drU@îT¨drU@îÔº"¹[EÔÆ„Š@¤îÚ=P¡"ÉU¹SËŠ@¦^+ Þ¡"‰UµS¡"É{E –Ôº"¹[EÔÆ„Š@¦VEÜN…Š@&WEäN­+‘[ZíL¨djUÀíT¨drU@îÔº"¹[EÔÆ„Š@¤îÚ=P¡"ÉU¹S¡"ÉU¹S¡"ÉU¹S¡"É{E –T¨drU@îT¨drU@îT¨drU@îT¨Dò^¨å*™\;*™\;*™\;*‰ü©"PÊG*T2¹* w*T2¹* w*T2¹* w*T"y¯Ôò L®ŠÈ L®ŠÈ L®ŠÈ HÞ+µ| BE “«"r§BE “«"r§BE “«"r§BE ’÷Š@-¨P(vîiE¨Užè¶_(hù‰ÓuùÉØÛ'Ñ–¨ç½S·ãtûöÑçù<ÝúSÝŸžj=ò~âíþýÚøÇÿò/ïð¿<Þ¿û´fþþ·ŸþøË§_¿þøõóo¿¾ÿ¥úüÓ§_¿|g­‡· èíƒìþ|ÇåoÍÛu/ÐçÅûOß·ÅzþbXìÏQ­Š+ç†{âÀ©1qåÜð`F8µ!®œ¬‡ÙÙ§Ã…s˃ÑpàÔb¸rnx°œ WÎ &ÂSûàʹáÁ2˜}\8·<N­+ç†;àÀ©påÜð`þ8µý­œ¬~ÙÙ'¿…s˃±oàÔÒ·rnx°ñ œøVÎ ¦½S»ÞʹáÁ¢—}Î[8·<òN­x+ç†ûÝÀ©ñnåÜð`¶8µÙ­œ¬uÙÙ§º…s˃‘nàÔB·rnx°Í œæVÎ &¹S{ÜʹáÁ—}†[8·<àN­o+熻ÛÀ©ÑmåÜð`n8µµ­œ¬lÑù4±ÝwƵSËÚʹáÁ¦6pjP[97<˜ÒNíh+ç† ZvöùláÜòêál l«ÙÊøLƒ½l`ÔX¶Rnx0“ œÚÈVÎ ¯^DzRÓØÂ¸¡Á(60j[)7<ØÂN a+ç†WO`eÛ¿VÆg,_ÙØg¯…r˃ÁkàÔÚµrnxõÎ5P¶‘ke|¦Á¼50jÛZ)75pjœZ97<˜¥NmR+ç†kTvö)jáÜò`„8µ@­œlO§†§•sÃÉiàÔÞ´rnx°4egŸ™Î-¦SëÒʹáÁ®4pjTZ97<˜“NmI+ç†+Rvö iáÜò`<8µ­œlF§£•séhàÔN´rnx°egŸ‡Î-†¡S«ÐʹáÁ4pj Z97<˜Nm@+ç†ëOt>M?÷ƃÑgàÔâ³rnx°õ œzVÎ &žSûÎʹáÁ²“}ÖY8·<tN­9+ç†;ÎÀ©gåÜð`¾8µÝ¬œ¬6ÙÙ'›…s˃±fàÔR³rnx°Ñ œhVÎ ¦™S»ÌʹáÁ"“}ŽY8·<bN­0+ç†ûËÀ©ñeåÜðêÙe l›ËÊøLƒµ%ûÔ²Pny0² œZXVÎ ¯ÜVÆuXYùžX0© |ÚSVÆ –”ìì3ʹåÕÊ@ÙÖ“•ñ™»ÉÀ¨Ñd¥Üð`.8µ•¬œ^½’d¥&’…qCƒqd`Ô2²Rnx°‰ œDVÎ ¯žBʶƒ¬ŒÏ4X@²±Ï å–ÃÇÀ©ÕcåÜð`ï85v¬œÌ§6Ž•sÃu#;û´±pny0j œZ4VÎ ¶ŒSCÆÊ¹áÁ„1pj¿X977,œ[ §V†•sÃ}aàÔ¸°rnx0+ œÚVÎ Ö„ììS¹åÁˆ0pjAX97<ØN +熓ÁÀ©½`åÜð`)ÈÎ>,œ[ ÷flé:°zŽ6 Ôs<öw{Ïñ4 |ûÐý¾> endobj 82 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [70.7348 666.8844 104.6274 675.8606] /Subtype /Link /A << /S /GoTo /D (22) >> >> endobj 86 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [532.005 666.8844 538.9788 675.8606] /Subtype /Link /A << /S /GoTo /D (22) >> >> endobj 87 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [70.7348 651.5419 136.7566 660.5181] /Subtype /Link /A << /S /GoTo /D (33) >> >> endobj 88 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [532.005 651.5419 538.9788 660.5181] /Subtype /Link /A << /S /GoTo /D (33) >> >> endobj 89 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [70.7348 636.1994 131.4065 645.1757] /Subtype /Link /A << /S /GoTo /D (46) >> >> endobj 90 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [532.005 636.1994 538.9788 645.1757] /Subtype /Link /A << /S /GoTo /D (46) >> >> endobj 91 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [94.6451 618.8196 165.5384 629.7236] /Subtype /Link /A << /S /GoTo /D (49) >> >> endobj 92 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [532.005 618.8196 538.9788 629.7236] /Subtype /Link /A << /S /GoTo /D (49) >> >> endobj 93 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [94.6451 605.8682 249.5524 616.7721] /Subtype /Link /A << /S /GoTo /D (63) >> >> endobj 94 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [532.005 605.8682 538.9788 616.7721] /Subtype /Link /A << /S /GoTo /D (63) >> >> endobj 95 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [70.7348 590.6602 144.1986 601.5393] /Subtype /Link /A << /S /GoTo /D (97) >> >> endobj 96 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [532.005 590.6602 538.9788 601.5393] /Subtype /Link /A << /S /GoTo /D (97) >> >> endobj 97 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [70.7348 575.3177 236.0333 586.1969] /Subtype /Link /A << /S /GoTo /D (133) >> >> endobj 98 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [532.005 575.3177 538.9788 586.1969] /Subtype /Link /A << /S /GoTo /D (133) >> >> endobj 99 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [94.6451 560.2144 202.8879 570.7448] /Subtype /Link /A << /S /GoTo /D (136) >> >> endobj 100 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [532.005 560.2144 538.9788 570.7448] /Subtype /Link /A << /S /GoTo /D (136) >> >> endobj 101 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [94.6451 546.8894 209.9612 557.7933] /Subtype /Link /A << /S /GoTo /D (208) >> >> endobj 102 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [532.005 546.8894 538.9788 557.7933] /Subtype /Link /A << /S /GoTo /D (208) >> >> endobj 103 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [70.7348 533.5843 231.092 542.5605] /Subtype /Link /A << /S /GoTo /D (COPYING-FDL) >> >> endobj 104 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [532.005 533.5843 538.9788 542.5605] /Subtype /Link /A << /S /GoTo /D (COPYING-FDL) >> >> endobj 81 0 obj << /D [79 0 R /XYZ 71.731 741.2204 null] >> endobj 6 0 obj << /D [79 0 R /XYZ 244.3315 691.2808 null] >> endobj 78 0 obj << /Font << /F24 62 0 R /F38 85 0 R /F33 70 0 R /F35 74 0 R >> /ProcSet [ /PDF /Text ] >> endobj 116 0 obj << /Length 1510 /Filter /FlateDecode >> stream xÚÛ;o[Gà^¿‚%Uh³ïG ¸ ¢.H[²#@Ž[6àŸ‘¸Ãȳ;:¢ÀãóÝ;c“—”žþ„C ®%ú’ƒ‹ÑçÛ÷þðŽîúå"ÌH®ÕÅ*}³¹÷ª¤æFõpõ¼äÇë‹~Žù½«¥—Ãõ[¦ê T÷ýp}óÇñÕÝç‡Ë«ØúñÃÛÓ×ëËî½¾ þxûùòÏë_/~º>kÜQ»óÞ‡íÍÌÕóÐÓá¤tnT:ÔgGáǣÉWÁÑQüý·W§o>ÜyÿÏéö÷tDO7?ùøñç‡Û›Ó·¯¿ÍÄß·óþïïæí›Ow—±¿^†r¼ý$Ï(öäJËýÅsŠ.•¤Ì?öâMð9÷Ý)»õxºË¡çíñl𙆸lÝãûáG0âœFøÒªàÉ¥1ºŸiˆËV/®o;§!.[¼»Ôƒyì3 qٺœ÷®·Ðlø9 ðµUÁi;5f+>Ó—­ NÛ))Xñ™†¸lUpÚNNæ±Ï4Äeë´”­cç4—V§íÄbµOaH‹NE¦Õ„b9§¡-[œVã«yæ3 qÙºÇé:  ë‰Ï0¢e§"'ºÜhfz¦¡-[¼¸Öz²â3 qÙªàÝÅ:¬ö) iѹ—m¦˜×Íid/­ N«)Þ:sNC\¶*8­&[ÑgÒ¢S‘i3‰®ÒôLC[¶îñL«‰Ñ:sN#|iUpZM0Û§0¤E§"Óf|²ÎœÓЖ­ Þ]Ù|Þ3 qÙºÇ ½®ëÙúàÂi„/­ ž\hÅ:vNC\¶*xqµVëØ9 qÙªà´b~Lç4Äe믴ܬcç4—V§í¤­øLC\¶*8m'vëØ9 qÙªà´0ÌcŸiˆËÖ=Þh;Á[ÇÎi„/­ NÛñÞ:vNC\¶*xqeëËNC\¶*8ÝÛ£yì3 qٺǻw¥EëØ9ð¥UÁ“ó5YÇÎiˆËV§í”l;§!.[œî͹[ñ™†¸lÝヶCOBFœÓ_Zœ¶«u윆¸lUpÚN¨Ö±sâ²UÁïmæ±Ï4ÄeëÏÞ»<ºñÅÊ9 ðµUÁ£½w+>Ó—­ ^\n£Xñ™†¸lUðæFóæ±Ï4Äeë´ê­cç4—V§í”­øLC\¶*8m'GëØ9 qÙªà´ÍcŸiˆËÖ=i;1YÇÎi„/­ NÛ ÖwDÎiˆËV§íøÜ¬øLC\¶*xs}óØgâ²u'ïR¯Ö±sáK«‚G×[µŽÓ—­ ^\ªÍ:vNC\¶*8m§Xÿ›Ï0¤Eç^δšÜ­3ç4²—V§Õ¤a9§!.[œV“¬ôSÂß7*,­%zóÀgÒ²uÚK°¾çyN#|iUpÚ‹õ-CZt*rqqDëÌ9 mÙªà͵nþ—ÆiˆËÖ=^½‹æµF´ìTäèZÍÕJÏ4´e«‚ÓjJ±ÎœÓ—­ N«±Ÿø) iѹ—m&U+Íid/­ N«‰Í:sNC\¶*8­&´aÅgâ²UÁi9¾›Ç>Ó—­{¼{ưŽÓ_Z<ºÚ‡u윆¸lUðâB÷Ö±sâ²UÁ›«-XŸÍ8 qÙºÇm§ëØ9ð¥UÁi;%ZÇÎiˆËV§íнŸiˆËV§í¤dûLC\¶nñâi;1ß{:§¾¶*8m'”hÅgâ²UÁi;¾ +>Ó—­ Þ\Õ<ö™†¸lÝãÁ;ß›uìœFøÒªàѕֺŸiˆËV/Î×n;§!.[œ¶S†yì3 qÙºÇ#m'[›øœFøÒªà´ì­cç4Äe«‚Óv’õ·‰ÏiˆËV§íÄ`ûLC\¶îñDÛ Ö_-=§¾´*8mǃGÌŸÍhŸäHôñÕÍ̉‹Ê²Ðü`È‹ŸÖ8ºäŠ.Y芞½_úPG:þ?°"&ÕúhN=×ÝWõÀž•1øÓÜ3endstream endobj 115 0 obj << /Type /Page /Contents 116 0 R /Resources 114 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 63 0 R /Annots [ 118 0 R 119 0 R ] >> endobj 118 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [70.7348 664.847 284.571 675.751] /Subtype /Link /A << /S /GoTo /D (149) >> >> endobj 119 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [532.005 664.847 538.9788 675.751] /Subtype /Link /A << /S /GoTo /D (149) >> >> endobj 117 0 obj << /D [115 0 R /XYZ 71.731 741.2204 null] >> endobj 10 0 obj << /D [115 0 R /XYZ 203.0351 691.2808 null] >> endobj 114 0 obj << /Font << /F24 62 0 R /F33 70 0 R /F35 74 0 R >> /ProcSet [ /PDF /Text ] >> endobj 123 0 obj << /Length 745 /Filter /FlateDecode >> stream xÚVK›0¾çWp„„GL`O«VÝ>¤J­õÒíÁ€ܦ¶ÙhûëkâÁ–tŠÇöxf¾™oÆ,_}kxÛH ›À CcåõÊ·jëã*‘M{! b5YØuQ´õÒ$Œ-wªäÝnµ¾ 7Vè{1JµÛ¦âTI%~b튟ö7Nö8'ίݗõ]Y©—ÆJ•’ö-7LÕ+šuÜùö½üRÊöf½ÖËž`ÏÉžq'Hìñ"•P Å©Ð#ÖC%ΰ °˜ Éq.)kôB… ×OœJI`ÂøÞÓãg ëu[‘š4òÒÊžãš8!²ONàÛŒõ²,1œËqÓ£îq¡—¢`sÆÙIZÑ¿àœ -æX¬à´WøàÈ\Tø9攀ñ>údKrzïûa¾ZZ Ù•Ä(Tu/m‰+qŸ‹]ÍÃЖ³ß$‡`¨I¯âY.¢†Ý†äDÌA˜Áˆ«ãleP#º¶e\’âÙx ¾*VG¡fé®8Tã¦ÃÕ5§i£ ×x$ÎX'çžü©¨$ÑbN²ç ™Z¤ÆŽ¢e1`1IWíj¦SÉF&“¥,à¶­h~öX hŽ=eíøà ÓFÈ)A`¯)æ†ú£¸1Sðí©!9=b äDeùÚ€-dì{GÄÄ–q4gõ´V_™-P²®u™!<'Þr¥¸§ÕRfúb«1­$»y‰ŠÛŠ )þß{u´9 ~ \ûáÄ=·¨|‹ëFpÈ58¦w\ñTïœûJZ¿Äþˆnˆ¼è2‘s:¤Æ¤Þ”ɾã "R²ê\àÑ÷ÑóDšŠnÓo"ªÎZNÍ=0U¼Ò‹jØBÿz)¹Ç>§zŒú] ß¿b~ì@æ# Íx¼€¯u ;·øÏ­pvuõagžð@Ø$^ÄéâcD܉Ìù¥¡ÉÓE‘‡PM} æÖÌ»eÁÞ?ç+„6endstream endobj 122 0 obj << /Type /Page /Contents 123 0 R /Resources 121 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 63 0 R >> endobj 124 0 obj << /D [122 0 R /XYZ 71.731 741.2204 null] >> endobj 105 0 obj << /D [122 0 R /XYZ 71.731 706.3512 null] >> endobj 14 0 obj << /D [122 0 R /XYZ 146.3693 691.2808 null] >> endobj 125 0 obj << /D [122 0 R /XYZ 71.731 674.2377 null] >> endobj 126 0 obj << /D [122 0 R /XYZ 71.731 674.2377 null] >> endobj 127 0 obj << /D [122 0 R /XYZ 330.1288 648.5929 null] >> endobj 128 0 obj << /D [122 0 R /XYZ 71.731 628.5033 null] >> endobj 129 0 obj << /D [122 0 R /XYZ 71.731 597.6191 null] >> endobj 130 0 obj << /D [122 0 R /XYZ 353.0332 586.8245 null] >> endobj 131 0 obj << /D [122 0 R /XYZ 362.6958 573.8731 null] >> endobj 132 0 obj << /D [122 0 R /XYZ 71.731 540.8321 null] >> endobj 133 0 obj << /D [122 0 R /XYZ 213.0097 530.0375 null] >> endobj 121 0 obj << /Font << /F24 62 0 R /F33 70 0 R /F35 74 0 R >> /ProcSet [ /PDF /Text ] >> endobj 136 0 obj << /Length 1123 /Filter /FlateDecode >> stream xÚ•WM“£6½Ï¯ öS3 Ø{Û¤²©M¥òQñ%•ÉA6²Q­@¬$âu~}KËãIù @ºû½×M›1üHP¨HaY‘(IâU°¯Ÿâà[?>g²Êó(ÉH7žÝe–ÑfäÁr|ÈwÛ§çÉ*Hâ(ÏÖY°= «|VëxlË¿ßW´5L…ˤX/Hd×OQa/dÙí —Mø÷ö§çil¢MŽà¬8X&8.Ï.ÇüñûÏÜ0x;‹/qWƴO§S˜g‹H°I’õâÄšrmWj]Seì¥à;EÕÙÞ˜ŠºÇ¼n«YcðÅÆ®¬Þ±²¤;áb€xìEI ÝQí³æÈÙ›_¤]ÆJ{u€!Õ>9’D›Œ¬.É NB’-¾Z ¾Ó5Sÿô&8á~9‘¶­à{zÔåØ| œëÜÓc˜-(oô œ½ÝãA¥ œ;;*\8»3nh&.Í_îuÙ)ŒÔTL¹K:\8 X˜d‹“Ákn.ñ;ôåˆl[%é¾B—u ç»ôŒ ûbT¼{•§+’ú[û¤–Úˆó•&ûjÍûp­1îƒO€„9P*~¬–¦R²;Vmg¦‰YõNxB﻾:7Ò º=œÎmJ÷NÏ#„1âöÜEYó†k£Æ›3vбAª.Ôxš£bK½%h3ÍÍ” qyž*Žü໼¹0eøP?'nªy–¢Ä,“諽@’z¨œÜ>èÙ{~ûähëšýH<½¥‡”I°Šv± ÚU¬¡5CÀ'°P¡%}é¸b³N#@ƒ jYò—8NP©àºÜq'L5R˜ 3èfvãÏ@íÊnVœíµbÍ“òËqY÷8xŠmf›z£ ƒGA¡ÞÝ gmXí“òÿ«µ¦¶G¹£:Åæ=y8„î÷Lë¹w,.}WY³¤¼` ³šš}Åæ›ðH•Ž«-2ª9Ãþzê£çi¾Ԃບ÷6\ѲC%?ôñ@—ñT‚þöF*ŽŒõ½Ò#þI ž€âSw>-º’(‘³¶•ø]ý²: žØ¼Û3ÌByùZðæ8 „é÷}ÌO?l‡!ÅY\D$I½SÎÒÙ,ÇF—)H½ˆÉhˆŒz4^’$»ñ¸Š²$ν.çë5÷’7†ëð³&Q¾I‹iÓ~`µ…r@ÉL¨h¥½pœ%@Njö]=ß'øTIšoú©ÊÜ-äñÏ\ˆ™†ñK„¤ÓsÍ¥ýù¹]­7ÙÄū܎îr;=âÖçò1·¾n¹ñn%69ì—™U¤ÃÈ2|fog„W©¿ =¬IVl^‡~dtz4z½Çå ÷Äà~Ä[ ÌÜÔÈ—“¾ö¸¦àÓ$»y£¼þ=@wý¨P–ÞQ‰»³a ÆÿN¯·÷«)Z“ü£W f63KÓ(ŽI:œÔƒIæÞ†ÿŽÿ¼Ãendstream endobj 135 0 obj << /Type /Page /Contents 136 0 R /Resources 134 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 63 0 R >> endobj 106 0 obj << /D [135 0 R /XYZ 71.731 706.3512 null] >> endobj 18 0 obj << /D [135 0 R /XYZ 298.5799 691.2808 null] >> endobj 137 0 obj << /D [135 0 R /XYZ 71.731 670.2196 null] >> endobj 138 0 obj << /D [135 0 R /XYZ 71.731 670.2196 null] >> endobj 139 0 obj << /D [135 0 R /XYZ 71.731 615.5519 null] >> endobj 140 0 obj << /D [135 0 R /XYZ 71.731 547.8707 null] >> endobj 141 0 obj << /D [135 0 R /XYZ 71.731 532.862 null] >> endobj 142 0 obj << /D [135 0 R /XYZ 71.731 527.8806 null] >> endobj 143 0 obj << /D [135 0 R /XYZ 81.6937 507.1234 null] >> endobj 144 0 obj << /D [135 0 R /XYZ 71.731 504.9666 null] >> endobj 145 0 obj << /D [135 0 R /XYZ 81.6937 489.1907 null] >> endobj 146 0 obj << /D [135 0 R /XYZ 71.731 487.0338 null] >> endobj 147 0 obj << /D [135 0 R /XYZ 81.6937 471.2579 null] >> endobj 134 0 obj << /Font << /F24 62 0 R /F33 70 0 R /F35 74 0 R >> /ProcSet [ /PDF /Text ] >> endobj 150 0 obj << /Length 1476 /Filter /FlateDecode >> stream xÚ­XYÛ6~ß_ajMR¢Ž<¦è-Š m EÓY¢mvu8:â8¿¾C‘£ËÚí.ìƒ)q8œã›ùFËVþØ*`$páÇc„sê­’üޮްõöŽYÏ÷ ̇‡…]G¸‰B±’7»»í=÷Vœ_„bµ;àU~R! W»ôïõ§øÜÈjãð \sb~.ê&β¸Qe±ùg÷ËöÞuW‰|¸ôЕÃ#På‹NÅî¤j8'è:é•ÁC*ë¤R{i÷š“4‹s%+ù©Uµjp/.Ò¡2‘i[õ§Kó»ßpºnU–Î*cñLKý)ƒK\kO¥6\¬?o˜X£‡ªÌçgʶJdMŒß@΄g÷¤Âs;Ç9a6`ï'>-GŒ!"n#f/;”YVj«.ª8ZÏãä!>¢ß§X;llžEBN<—6°î÷ nX‡®u#ó×ڪΎ€„‘0djŸî•Þ¹ûi×ÊÂDx!‰(–0ljÑ`ŠÇùoÏÀP²€:ÒØÁs#@¥/|w¸wŠ-°µŠ«k’Ï*½×¡ŠsÙ…tà ÕƒËa&—ÆM¼kûï릊“ðæºøŠ ¹œTr²ívÛ¨L}•/Å$Ϧq æuNžeu(«|É®öº2¬‰yÑC'5¸)²2N9GôÆå"±$ây˜ò@ÌeªnðˆjNãR³•<—U3/×sÜ$§¾ˆ+¹ä\œ@5ÕjŸ¡m͸ÎÀï ×GI Ùl!­ÿʤ©·˜àG*è©iί·ÛgœiÖÕ.XØâ€t‡ƒ9Ìc9˜¢eÌ{!Ô4ùf)|ñ(ôàU~Îd.‹fžG™ïešbõOÁ#‹£*¤νºi²yY7˜Þtã:“C]Ø——Ëeã‹51á#6Kù¥kùÉÐÌI[U½¶bê¾oj×(|¼ÌºÒï!/¡ÿ¥stÿñÛ¯C©ÞÜèJÂì nÖ§²Ešuš‡ù]@¤h™ î2½ ˆ”pW–e–ßX⃥)AX Ä&@°<@„>ÃýO°’){U!€=þÚB3Õ,1¦iNúþœF¯‘½ì¦Ml«ÀØ*R¸lJ¨"óîCwmß¹. ;\RÉ1aµ–¬êý ¯‹…¬€i|©}œÞÁ]íüIþZˆ_—œÕG.'˜Ì]¯@þNAEÙÜÔp¯GÆP? :  fŸEþï¬`4Œˆº5 ‰d>¥kçË׃YÍÜ ÀF@Ž¿.øãXu“†¹{Nnm¶™¶‹·–£cq¶T¼}”°ë´õ4¡I™çX¢³IÐL9C_©4MÈÍÆ[1òÖ£ŒxÅôå-€ÿ6&/Œ†XjG.žŽ‘ˆÄ6àúGJù±Å«¥öìË9S‰j²ëÜ¿¾ÌLÃÂøÈ°ûü1C÷à^w?³h–ŸN9lÁ±ëÉ@Ñ皪»û¤©ÅrøL0'é‚kAûõd ©:(“¨®fݯÑxðœâø½Åï£p$ mœF¡;¾Ê¢B M¢ãœdv^¸f‡…>"®Ä”RŽ^¶˜Çý°LS¥çD¬¬òl§Æ­‘ 6û€>]beOm‘[{ZëÅtY!}‹´çñƒì©qèÎ øÐƒ`Ǿ a¡eßAcµw 6æ‚@mc]¿Çi˜P·bdÊ®auÕ¾wà†‡<Þ¸´«x@îㆭô©I·ß¶çºÌlö9Eצֆ`­àVꇑ¿}÷Á,Œ8¢À‹®¯v&[ Gö4ŠÔeŽó@×k-C–°Í]Ÿð€sèk0øxþ ËŸ×/ƒÇ¤5}¯»*,$ÎgUYZ<ÃwO®jíîì?i‰êUÝ7›ÅQÊ ¿ô+âŒdÌt>æáÂHŒç”x^h?ùç·õÿ|Y¸ï?Ö}£Qendstream endobj 149 0 obj << /Type /Page /Contents 150 0 R /Resources 148 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 195 0 R >> endobj 107 0 obj << /D [149 0 R /XYZ 71.731 706.3512 null] >> endobj 22 0 obj << /D [149 0 R /XYZ 287.5478 691.2808 null] >> endobj 151 0 obj << /D [149 0 R /XYZ 71.731 670.2196 null] >> endobj 108 0 obj << /D [149 0 R /XYZ 71.731 659.3875 null] >> endobj 26 0 obj << /D [149 0 R /XYZ 214.3071 616.29 null] >> endobj 152 0 obj << /D [149 0 R /XYZ 71.731 604.1188 null] >> endobj 153 0 obj << /D [149 0 R /XYZ 71.731 592.574 null] >> endobj 154 0 obj << /D [149 0 R /XYZ 71.731 577.6301 null] >> endobj 155 0 obj << /D [149 0 R /XYZ 71.731 566.7359 null] >> endobj 156 0 obj << /D [149 0 R /XYZ 91.6563 548.9027 null] >> endobj 157 0 obj << /D [149 0 R /XYZ 144.2183 522.9999 null] >> endobj 158 0 obj << /D [149 0 R /XYZ 71.731 510.8804 null] >> endobj 159 0 obj << /D [149 0 R /XYZ 71.731 497.929 null] >> endobj 160 0 obj << /D [149 0 R /XYZ 91.6563 482.153 null] >> endobj 161 0 obj << /D [149 0 R /XYZ 440.2848 482.153 null] >> endobj 109 0 obj << /D [149 0 R /XYZ 71.731 451.1693 null] >> endobj 30 0 obj << /D [149 0 R /XYZ 380.7607 406.0145 null] >> endobj 162 0 obj << /D [149 0 R /XYZ 71.731 393.8433 null] >> endobj 163 0 obj << /D [149 0 R /XYZ 71.731 371.504 null] >> endobj 167 0 obj << /D [149 0 R /XYZ 71.731 361.4024 null] >> endobj 168 0 obj << /D [149 0 R /XYZ 71.731 361.4024 null] >> endobj 169 0 obj << /D [149 0 R /XYZ 81.4147 349.885 null] >> endobj 173 0 obj << /D [149 0 R /XYZ 71.731 338.829 null] >> endobj 174 0 obj << /D [149 0 R /XYZ 473.2014 326.971 null] >> endobj 175 0 obj << /D [149 0 R /XYZ 71.731 301.9001 null] >> endobj 176 0 obj << /D [149 0 R /XYZ 71.731 301.9001 null] >> endobj 177 0 obj << /D [149 0 R /XYZ 81.4147 292.4006 null] >> endobj 178 0 obj << /D [149 0 R /XYZ 71.731 281.3768 null] >> endobj 179 0 obj << /D [149 0 R /XYZ 71.731 281.3768 null] >> endobj 180 0 obj << /D [149 0 R /XYZ 81.4147 270.7817 null] >> endobj 181 0 obj << /D [149 0 R /XYZ 71.731 259.7256 null] >> endobj 182 0 obj << /D [149 0 R /XYZ 90.8293 247.8676 null] >> endobj 183 0 obj << /D [149 0 R /XYZ 71.731 240.7295 null] >> endobj 184 0 obj << /D [149 0 R /XYZ 71.731 219.8727 null] >> endobj 185 0 obj << /D [149 0 R /XYZ 71.731 219.8727 null] >> endobj 186 0 obj << /D [149 0 R /XYZ 81.4147 208.3159 null] >> endobj 187 0 obj << /D [149 0 R /XYZ 71.731 207.2548 null] >> endobj 188 0 obj << /D [149 0 R /XYZ 71.731 187.3295 null] >> endobj 192 0 obj << /D [149 0 R /XYZ 279.598 176.7344 null] >> endobj 193 0 obj << /D [149 0 R /XYZ 71.731 148.839 null] >> endobj 194 0 obj << /D [149 0 R /XYZ 71.731 48.8169 null] >> endobj 148 0 obj << /Font << /F24 62 0 R /F33 70 0 R /F47 166 0 R /F49 172 0 R /F35 74 0 R /F38 85 0 R /F51 191 0 R >> /ProcSet [ /PDF /Text ] >> endobj 198 0 obj << /Length 635 /Filter /FlateDecode >> stream xÚ•UM›0½çW U -® Æà[µÕöз¶Ì-†òïkãq $»jÅÁ6ž™7ïy<&ÖñR‚ÒX” (ÂÔ+ÚöžõÖ÷“lµÑç|÷ñ[œxq1/¯»Ø UvZwÇiÜ@öÓ?-šBvžÏnOµ® ¥f ŒŒDÓMéêd¬òÎJŒBgàÎU´*t1g$  ö`¥×údÏ‹‹;Tuä<ãÕ°M åñ㨑‹Ÿ«²s?Anê¬FÙº+Aš Û((]CržÜ£u~Y²ûá°Ä¿aêÆKy.æo0Ô ¬FHÉÎ&ÎrŜހýSʲ‘J]ÇPâP‹ã®žC< µE±rEܶ’%Ò= žª Š xÜv…RVÑ{S;èáqksUOË™¹Ú±ò”®o,ÞKàŒQs]c‚N(\ï¹öï\êˆë~É]PÓ~ÃoÓ´¡ÍÒ e„ñwß•Íí’Ä1˜ėH=~󉸃÷çl»eendstream endobj 197 0 obj << /Type /Page /Contents 198 0 R /Resources 196 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 195 0 R >> endobj 199 0 obj << /D [197 0 R /XYZ 71.731 706.3512 null] >> endobj 200 0 obj << /D [197 0 R /XYZ 71.731 706.3512 null] >> endobj 201 0 obj << /D [197 0 R /XYZ 81.4147 696.3885 null] >> endobj 202 0 obj << /D [197 0 R /XYZ 71.731 661.355 null] >> endobj 203 0 obj << /D [197 0 R /XYZ 71.731 661.355 null] >> endobj 204 0 obj << /D [197 0 R /XYZ 81.4147 651.8555 null] >> endobj 205 0 obj << /D [197 0 R /XYZ 71.731 640.8318 null] >> endobj 206 0 obj << /D [197 0 R /XYZ 381.785 590.0872 null] >> endobj 196 0 obj << /Font << /F35 74 0 R /F47 166 0 R /F49 172 0 R /F33 70 0 R >> /ProcSet [ /PDF /Text ] >> endobj 209 0 obj << /Length 1882 /Filter /FlateDecode >> stream xÚ­XYoã6~ϯð[m ¦EQç¾í¶ÝnŠ¢Ø¢éCÑ-Ybb6’èêHêýõ’Cê°œ=°&‡3ß\߈®<ø£«˜’˜Á% Ä÷½`•WWÞê~úéŠâ’ ŠˆÒ~݆,&iâG«íXț۫Ý[?Xù‰Â$\ÝÞÛ£¢V%^²º-þZÈŽo6[?NÖŒ˜ëx²ïä±²n7ßþ¼{ËØ*%ig8oµõS…ZÒŸJ½µìÕ¾Ð[gÇc)òLm6/Ykn:i®¢ÈJñ‘›çR싽0÷E#6~¸~ÚÐpÍܸ?™kË»NÔø +¾´Ç¼³Úë‡gÑP…7ñ*ƒ¢@Ä‚PŸ&`™2”¹Ëe]ßÁywFÐ/ôàŸ. ±u»·Ô'iH-$«‹¤$ hxùÄ»º¯x#òN¦aBB/ PÀØd Buß×¹F€˜çÛ‚Õþ[ŠîàÚþx”M×Êy²,¥Zü쀿Rší©G¼ J!6b’¤a€†ÕY¥í¿úñÖE®GÏ'q°,·O‚Ô‹§?¿ºDˆˆ~¯¶c‰:&xAøGaĆs•†­¨1ì~f|‘uÙ>kñé${ « Ä}VwÓèÖoeó8„ºà5bš™Ëï¿ý28br@.›†·GY³Ä‘5®øày~Ém69µí oˆfm{j;^]/D"D/KRê"Ñ:l ³4Âey†§îQ x† ÂàÕàáa®³r¬°`Ü\Âx7¶­¼­¿ÛÐd kÁÿ‰Ÿ¼ž9EmoìïM‹`–ç¼ETEwmB7ñ¤R<…mìžgQ¢yÃ3ûVtÖ+3S@vÚDáš8@¡f¾)¼7¸MX5*•ogaÔ×Ô¿nTF²nž“½Uë˜Ù÷‰Øµ‡æNmyá6-T(ª‹ŸÚeê»+ö…hâ#†Œõ†«•Úç"iD’8Š?j>”â2â6`à%Ê‚©— {~/›¥ =1ŽØg¶3ó ûa©egѪ»LÔ_6ûkL•nE‘ÿôíÜ&;´±iD‚0Vµl¥]öÀBI…v@(óÒoWRÇ/—T·Ê8ÅÅö¼€æ<ï¤KKÔ±-‘ÙI·ÂH¶-íÔ/zäXrØsVu¬f¦‰Mµu~o<ʇ¼¸¶~]¨°*™DÉ·pŒ„ßëÞЗݢÝCA±õ³‡dD%ߜ΄\ÏÕžÉS$¡o{€í´N]Ã×v}ÛìJ™gåî)ƒ;±ß¶Ã[¢qLBf™†æ#Snu±°ožçº#o*Ѷ#ƒ”µ} '×ߦ„Íø¢ùã¨Çì¡üâªM\<ê¢ËÏÝÜ ˆ¬’ÏT;-QÚkç®I¢çβºàkkË ðE‹C“/.À‰Ð ÄxÈü¨†‚SüAiˆHF›û«ìø+³8¤£Å~HZ·éÎÌ^ך«f˜NÌÓ°Â;Ý~àú¨ŠçGódòn\>½ËG”ZãÜPÛ߇%ñUfÀ­¨´¤Vè2Yòñú¸mÛÍT᫨€"¤:¬µ[ŠUI×ý©–Ý¡‘ýÃÁ>à1nû×ïopz'U¼i>§{R± <tmVœ”®šy(Í”vßp>5W9¢SI» jŸElC×45ðk’\Tê|¨YÍeßB‚SOoëÐÈTžå‡™úÖÐu¥žõÊý½2úfc•ÚŠ\B,!^”Æ:èhq_æ“°‹ñYŒø|hòƒ˜°ÈSœAÿÅΡ*¨´-Rµa¢:ƒþÅývo,ñrÇs«&CÄÄ}ªêŒ ² ¢å¹âöÄN6¡zýWâ§Œ$>èüÍK¼ ˆ[5¤à­x¨§äÈPk6PüY=Îì¨9tõ“ƒ7ïŒÜ· :3€á†RÀbËޱ㞳 L2+÷Ì©óÔyxL õ摾8laRú¼‘×ó¦?ÖlNÌHi' ׊œ„‡ÑÀŽe•ì­ Çþ91ÆZØÉ£áš2Ù!ÇÚ-óǨ‰é†VØn‚“Ïò”·)ÔŸ©_‡]û¾±T®ªx!`T+µ:VñºÐmÜ~ÁÈÆÄ¼µ™º¬ëÇŸMÜŒYh§[ݲ²?û~°Ä2RÙ¾.¯À>1®/óÿ øòt÷­oÊ ,Ð2¼^¾=n›¼VŸ E>4pP×AÒXÕ{´5õ\E–„vsDHK¿©g Å@)^ׯà‰Ú¹h },fÓ¾9/¶çJÅê `k”Ò´Éšená<–ÂP'Ÿi³ÅF×!°g/»ÃŒY ­…»÷6GÕBn;¼¯+H8lÀË`f×ßF5Cà‰.#¦I…‰6ãV-dNñKÇB3 ’ÐhqÝâ’íhé.ᨻ„ŒÏ£ÌIRçóÓÜ—ð…óþjoÕendstream endobj 208 0 obj << /Type /Page /Contents 209 0 R /Resources 207 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 195 0 R >> endobj 110 0 obj << /D [208 0 R /XYZ 71.731 706.3512 null] >> endobj 34 0 obj << /D [208 0 R /XYZ 318.5354 691.2808 null] >> endobj 210 0 obj << /D [208 0 R /XYZ 71.731 670.2196 null] >> endobj 211 0 obj << /D [208 0 R /XYZ 416.8528 661.5443 null] >> endobj 212 0 obj << /D [208 0 R /XYZ 103.2725 648.5929 null] >> endobj 213 0 obj << /D [208 0 R /XYZ 71.731 646.4361 null] >> endobj 214 0 obj << /D [208 0 R /XYZ 71.731 631.4921 null] >> endobj 215 0 obj << /D [208 0 R /XYZ 71.731 620.598 null] >> endobj 216 0 obj << /D [208 0 R /XYZ 91.6563 602.7647 null] >> endobj 217 0 obj << /D [208 0 R /XYZ 137.0454 589.8133 null] >> endobj 218 0 obj << /D [208 0 R /XYZ 71.731 569.7237 null] >> endobj 219 0 obj << /D [208 0 R /XYZ 400.1858 558.9291 null] >> endobj 220 0 obj << /D [208 0 R /XYZ 489.4908 558.9291 null] >> endobj 221 0 obj << /D [208 0 R /XYZ 133.4194 545.9777 null] >> endobj 222 0 obj << /D [208 0 R /XYZ 71.731 533.8582 null] >> endobj 223 0 obj << /D [208 0 R /XYZ 71.731 520.9068 null] >> endobj 224 0 obj << /D [208 0 R /XYZ 91.6563 505.1309 null] >> endobj 225 0 obj << /D [208 0 R /XYZ 91.6563 479.228 null] >> endobj 226 0 obj << /D [208 0 R /XYZ 71.731 464.1197 null] >> endobj 227 0 obj << /D [208 0 R /XYZ 71.731 449.1758 null] >> endobj 228 0 obj << /D [208 0 R /XYZ 255.8573 416.3638 null] >> endobj 232 0 obj << /D [208 0 R /XYZ 71.731 365.5543 null] >> endobj 233 0 obj << /D [208 0 R /XYZ 71.731 350.8196 null] >> endobj 234 0 obj << /D [208 0 R /XYZ 91.6563 334.6701 null] >> endobj 235 0 obj << /D [208 0 R /XYZ 71.731 324.6079 null] >> endobj 236 0 obj << /D [208 0 R /XYZ 71.731 309.5992 null] >> endobj 237 0 obj << /D [208 0 R /XYZ 91.6563 293.8233 null] >> endobj 238 0 obj << /D [208 0 R /XYZ 71.731 252.8122 null] >> endobj 239 0 obj << /D [208 0 R /XYZ 71.731 237.8682 null] >> endobj 240 0 obj << /D [208 0 R /XYZ 334.4734 228.3687 null] >> endobj 241 0 obj << /D [208 0 R /XYZ 111.5816 216.7125 null] >> endobj 242 0 obj << /D [208 0 R /XYZ 225.8396 216.7125 null] >> endobj 207 0 obj << /Font << /F24 62 0 R /F33 70 0 R /F47 166 0 R /F51 191 0 R /F53 231 0 R /F35 74 0 R >> /ProcSet [ /PDF /Text ] >> endobj 245 0 obj << /Length 2059 /Filter /FlateDecode >> stream xÚÍYY“Û6~ׯ`åe¥ª ï#o3YÅ™”ÄVR›Jò‘Ä50$Eûë·A¾þºq,þ9Vä ÈƒßA®kûVz\ØÖ^½Z8ê? ‘8!L&ÞÞ^„’Ø ­Û¾‡Íâî[×·\…AX›Þ*Là«ØŽ­Möëò›.9©V·n/}$Xyö’¤M‘ã*ç9©åãóÊ –¬‘“úÀš"“ã”­œ`y’3¼e _ý¾ùþî[ϳ”„ lo[·n„A»óæ ¹½L0)òš«çB,ìx¢rZŽ4‚Gl'ùÈAýG‘sâÉIVåbýŸB7K$_t[ç4-šL‹ûðãënõŽ`ÞTú?`®¤æ;!u§ÞUì(G'óͼ&;.JÇoMÖõŒ”Ø s¼Åµ¶‹TÊ ¥OÝ”%«8Éät{ÖÞÛfÛüFN0Uos>eíÐ@óñ1¯‡orÊ+–5éx/¡õ„‘]üh&ðâ‘Ëß6~¬\ PN(Ï•Ó6ÂðkÞ$¶ÏpìR‚˜|V¡òh1mŽ[½HKÚ rµõ®µ´‚@0j¥£ZZ²ºÎ·AímN„\'ðÜýòÖ—nñ‘£²«CL~³4€g·r ë”&Óéã  HœVÞ}=Âμ%N?â½zcòŒÑšcÊ À-Éé^}r,«6‡¥_³›Çn:Ûa\ƒýÖÙWù>§¸Pfis„hbO³–.4ŸÒ…||õT¸ïÀyùõÝÝétZ…€/‰?xpâåþ®ÀtüX >§ÌDzèí3Fjú!z¨ÏÐÉpÏ+ÇŽ9‡6ú!#(Ýs£VÌ;ªT£Œç)Á¸1šS~"„N@ÂXÝ#cìm… Ë/ÐøjǪ£ÕÔzAÍŽ„ ´R\@þêˆi¾#µ{.aÑW†£Õ&e…S°Û`jÂè ‚(HØZ)D±Jä^Å®‘cý54Y°/ËÆÙxŒCžE‡ ¡) hŒ •¬òôÐ·ÜøqijG¦=ôâÈ)>R•Ù8ckÈÉzw©D ÉfK+Tº×Ü!<<ÔŠð*'’¢á?¶]CSÁ#éƒzÕ±ÕÛœ'b51Éj ©ŒÉHZ`a#%eEs¤º¦œ©€*Ž{ëÃºŽ 6µ½Ñûõý* –›µ‚ä*±—÷¯×ìÅÈ®W+f9Ì'þ»ÑÄ-³[·^’ Ð‹ü¡ï ݶfwŒ{ÊùA'±@æùÓà Ðpo*½z)Dý…eAn.»(d«bp92I‡ $ÕŽ¤¦¤üfÛ®¦«Vë‰lP¬¤öÜ®\=ïògdñKZ»¯e@üÄŠ‘&QW.C'NL,ECâØÆ°î“ÁÕøf{“¶ebºú‚ Ž/«ïwÒ;¤ßŠøöòïûñÂq}¿ù„.·ÓÂ~~]Á{9’&’\âj”•B¹V(äðñífýjýþf«¾^ÿks“ÊñÏ÷ï¿ùîþ½ø8ôEÐ^8YV Ë‡F´Žª´ÂPŸBú©áñPñ OÉã0”h á”Ò…¥Mx^‘”íiþŸ–âa¾=öˆUdåx¶w^×µh‘¡®ªå¸­D0P*ND¬G€3G‡7gzƒœ ôì+Ò½Ð$;#ƒ›ƒÕE›Þ+¡'R £Gü±ëA¹î/qÍ(ÄB …éyÈ÷§J8i‚Z„N]dÔNYfHPíäg EWQ@#cª6Ê!h^£‰*" ¡8 ¤ë¡l¸ËN+ÿÖAúM*0ëä tþ†šñg{†¨„R‹õÆÜ¨“¿›¸ÈöBq=ðÇâ×ßm+[ØÖ÷ yIX'˜ØÈI×:.ü0B¾9úI±ø°øño®ÒZˆ`È A“Y ä:d©¡^1u«,G‡(ŽÜ¤åѫʰ؉=ˇNdRaì ÏGµ@|ÙÉû< Ègtôì…>ŒJÂ)=­ò²=8t ¼EQ^QW7ÛCëV­ýÿ!Ä!d~ð 6ésñcäIçýaߦúȳmU$ßþòðú݃"©ÞðÍúŸ?½é=xýîí+9 ݇_6ÐAÎB­§Øç™ÚƒÚ“ÆvPë[û¡e² öÑ-zC‹Ž©š… ¨ýü ìÎúչ멛~c;}C„wÄ;ä¬ïj¢)W6§̓ÿjÞûâÀ^üpŠÆÏ€ß PKâÑM•h§TT~^9^°ìú­Þ+‘)¢+[E¾n;»éDèeþŒVˆjÍfJÏŠ«eÊ“žé2¥çšÏH”èG— Lß~³²;þ³jÊm%Î2ó‰8r‰‹—¹¶`ú8›GWóí”G¾‡OI#µ`&‹8Ý{±ë=“Ev„ÜHlýö§7³pî‹û,ý:4?­a‡æžŠc4¿ÌúZ)e”WØ\ß±Þ9b2ùép.Ò{¶.’{vÏÕ%ãLݱ©+,qu × Ï´SWpœUæB¼.qúDJ\->_ZFÉõR áP=ÓU9a€b;Q÷>ëy†ï‹»VJ<©¡I‰¡Šÿóœ0¬Ór|½ižHú±=ÙéCè~,qNëñ²¸·*õ5Çôu­º¤mHýD>\+8ס²ãE¶Lþi\£zÅØ {PzP<A/ìYú+á—àÒê¯ì=Yz¿ÿèÑÐendstream endobj 244 0 obj << /Type /Page /Contents 245 0 R /Resources 243 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 195 0 R >> endobj 111 0 obj << /D [244 0 R /XYZ 71.731 706.3512 null] >> endobj 38 0 obj << /D [244 0 R /XYZ 535.2205 691.2808 null] >> endobj 246 0 obj << /D [244 0 R /XYZ 71.731 670.2196 null] >> endobj 112 0 obj << /D [244 0 R /XYZ 71.731 633.4846 null] >> endobj 42 0 obj << /D [244 0 R /XYZ 282.9959 590.3872 null] >> endobj 247 0 obj << /D [244 0 R /XYZ 71.731 578.2159 null] >> endobj 248 0 obj << /D [244 0 R /XYZ 113.7826 555.8766 null] >> endobj 249 0 obj << /D [244 0 R /XYZ 403.7919 555.8766 null] >> endobj 250 0 obj << /D [244 0 R /XYZ 71.731 535.787 null] >> endobj 251 0 obj << /D [244 0 R /XYZ 392.943 486.1381 null] >> endobj 252 0 obj << /D [244 0 R /XYZ 71.731 448.1158 null] >> endobj 253 0 obj << /D [244 0 R /XYZ 71.731 448.1158 null] >> endobj 254 0 obj << /D [244 0 R /XYZ 71.731 427.7943 null] >> endobj 255 0 obj << /D [244 0 R /XYZ 71.731 390.6313 null] >> endobj 256 0 obj << /D [244 0 R /XYZ 71.731 390.6313 null] >> endobj 257 0 obj << /D [244 0 R /XYZ 71.731 370.3099 null] >> endobj 120 0 obj << /D [244 0 R /XYZ 71.731 330.1581 null] >> endobj 258 0 obj << /D [244 0 R /XYZ 71.731 292.4345 null] >> endobj 259 0 obj << /D [244 0 R /XYZ 71.731 292.4345 null] >> endobj 243 0 obj << /Font << /F24 62 0 R /F33 70 0 R /F38 85 0 R /F49 172 0 R /F35 74 0 R >> /ProcSet [ /PDF /Text ] >> endobj 262 0 obj << /Length 1787 /Filter /FlateDecode >> stream xÚÝš[sÓ:€ßó+òF2‡Ý/¼…6@Ïi ´á¡<¸­›xHíâ8túïÏ:–9±B]è”ãK$íJ»ß®µ6ébø#]EbpàQŠy÷ò¦ƒ»Søé]‡Ø&Ûfà6z3é¼zËD× #©ìN®»Œ+d¨JÇâHcÕ\}é̼ÛÄû*p£ìø±¯qÏ¿\Î/’À_d·ï£ev²˜EËùUvþ=Œî²3ï"Z&ýo“;£I¡›` TƒàR"*ˆì˜@T*•¶úÑùò w¯ õ¿Œ˜Ñ¢{ch÷¦Ã¥BœÃ|ìyç¬óé7{åšàî€D$¬f­Y? cÙÓ¼Gy¨Â*Ò`¤´‘…U(w¬¢ 3Ѭ+ CJi¾²Jrëo®$ð4B¤-×ã=LÃbÈ:2¬‘äp^RòÊ_\ÆÁmDá¶Õ5´3²E]S»a®%\ý¶o8VoÄrµl‡:sƒeëõc¬ÊÆ Ö‘ºZ¾óÑð´ÞÆÎxRÐ1q£Šk»:ž%qN3¼W>¹:‹®³ã2œ7AâÛH0÷Ãi2³!d|öéØF‹$ŠóBíyÀI`EFëWÁ4HlÄñ½Øöôòcv Ùáâ>±JýìSÑóæKÿev}7óc?ï”Ìl+P*È{\ÅAÚçgŸˆžb*TqU/ÆX8‹’ ¸£t˜ŸÁ•…êih˪ Ûõï…˶A?¤Â AV!ë•‘&G'çG'“¾â=k{¸"öôà}eް¶(kÔM™;aK¯‰[.rÈ’ÈÊÂÚ“Ë™{—i6ç8_ ‹Ë"˜†0DÉÅÅJx‚8pÝiþpá'w¾fÐTÛB«¡êe™b/Ì㳺r®@«$oÈ€µl ¨-«=_Š:#v™Š’&LÚ2×SÃD˜Ö8áš!-…ÚÁ XE •Eì­3z7:]_ñZ|\Y-áÓ¬þŸLÿ̇yUÆ™GáôÏ&œ PÂLIòM¦ŠvaUÁlóâ&Vœn¤¢¦¬Ö ù„À‚”j¤Ö{L)ïQG‘ˆÍ›É•5Ô¬,õæèÝ\ºÌ™­ïa[$Eï<»ñßè¼;G‘‡MÍá®qrw¥Ùé:îlõáÜ›†¡”1E1“Zp¥„vÓ[¿Ûí÷N|%-*4ÞJ|šƒ7sŽSØAdš³êˆïçÃÍ£´6b+»×…6ÕõšÅår±HË€¥òÐn—#ÔôÂDkŽ÷„âÕî^ÞYQ'˜N ìUsœÀ `oe°ÃÑãØF†“ÏãÑéÑA-ÿ®€‡©¼æ¿Yé5ÿ®ÖÃíêÛ/–$›¹¯ð诳ÈK@Îà6Ö²æáòæÂÏË‘¹@/¾’Ø‹ïó: ¤(Ô»u{ëù|·_ŒK$(ÖÍNÍà„*lp<:›ô ë Çû„< ¦Õ°áêÎd”¶ª÷tGjK˜Í)½4“Çrô¬èí%þ«$¸©ôûËèæ"½ôΦ„I^õŽýË ÎG†ŒpãY.‹Ä‹sø·ZçÁx<8<¬Êwïß¿_Ÿ½xY¤7Hc÷ɬ˜êu4·¹g=ûY.âÖK?Ër!/ÂôÊî­ÙõoäR—ÅBîxÜd 2ÏÊ%®ê™rÆm‹©FU×L9º>*RÞš,TEժĤBÄc@Ó–ážo–¢’!aˆif60(Ý{Yª–w¼–XiV±`¥¤ãŸ€%Í@¨*AìKc2ù3”´f²ç\Ê F"Jw½¢†²2ÕÛã}&òôâ”4Ê?p{÷t4<®ÅÊßV£yJk®Ü9 óo¶êõ»¾½­'1/œú…ŸVøù€!Ž©¦ðÜ#Gÿ0]†q@Q‚ÎÁNÌ.!~ÙX¨ØèTrC^þÙÜ÷VÑ0*^jϼ¤Ji烑$ö½dáX¶üˆeTo¿ÆX$¾wµ±?Û^ôú ŸeÁ÷>Á=;êÇh‘Lc”«íyØ“ ¦Å0ÛX-mðIa_U~øüæx”oäVy9itptvôá¤2,èúXàèÐZ,hœW ìIJÏ.‡uNÜ~0€Õ7JFøeD(`¯ ®êCÁVL Š èñ/†ŠšÎMktl ®5;>!â”O!ºñ_ó&ÒTá+……¤¤›·J×VÖ~’댕ËûÍ´Ûâendstream endobj 261 0 obj << /Type /Page /Contents 262 0 R /Resources 260 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 195 0 R >> endobj 263 0 obj << /D [261 0 R /XYZ 71.731 741.2204 null] >> endobj 260 0 obj << /Font << /F35 74 0 R /F24 62 0 R /F33 70 0 R >> /ProcSet [ /PDF /Text ] >> endobj 266 0 obj << /Length 2457 /Filter /FlateDecode >> stream xÚµZmã¶þ~¿ÂÈ—®Û5£÷—|»ä¶‡Ksmz] 8¤Á–h›8‰rH){î¯ïP|‘(SÞ=EpXYg†Ï<3C'Üð_¸ÉC”Çð' Qɦj_›#|õöU¨EvZf7úþñÕ·ÓM‰Ê,Ê6‡Mœä¨Œr©+AEoë_ï~8ásOøv¥Á]‚Ôߟ·EpGª¡¡˜Óž¡^_ºA=ˆS74µzþ̺'õ„÷ÝÐo{üñÕãµ-aÓ ¸é€•ò¸Ï\ÐŽfe†â¢HG^³®?jzØFéÝpÂ*¢ÞQm>H©‡WŸÕSwЦWZ¬êXÏ»F °ÅÚ÷x…þDØ‘2£•Èÿ؆éit ßw¢WOÿúçO>‚pµ‚ëÝi{nHKØHÎ.ŒP™†ÉèªèZ½®%Õ 3*Zã[§þr"zN+½éÓ©sC€›¦“V>‘Ú]÷ï ˆêºÑÚŸhZñÛ(bõÊpÚù׺N{«ƒUÁ‰tü84˜û|•5dážè;nNµ Ëî­úapà.¦ ÞçVÏÚxpuæÚ”‹èI»~ÖB²ŒÅâð)ƒ\;lCiq]ëO°Ê‰ƒ‚÷gjB}¬Úõ½ôXå $N1Kœ0ÈQ˜æh—J«SÛÕZlž_1$_¥ZJ²GU†Š<Ë­¦NºóÄ|ÚXAl‚,¢“õÀ)aµ@ji”lÂEašÈµ»°HQœÇ C€¢8ÍF- Šd¸óâNüÞªÔsÍé#ÀsKÅ`‚û²Ác8 Qš–‘æÚž–L kmíI£Hž´{`5Õ`Îá4_+†ñ„C³’µY.çtÂwqC™‘ùeÇ…•QZ¶&xLåI4Àd·$Hº¯÷Ôn‰r¢ÚñÏ&ïi¥9bü SðÙ >ØÊòþbsÀRÇÏ@ŽGNà A“ÛrvƒÐÚèO¸¿²´¥=îiÇ„Ï7I¤ð1hÊP‹F +›šœ2A+“ói0Ô—ŠœµH‹/{âánH¾3µ`s¦ûQÛ¥³Ùl²@§0lÞ/ý´¼m€5V7¹gEeP_¶Ý°¬Š; "ª®¶ jéñÔO¶±þ¤œy\i ËŒèX?·^¶Yz‡–e^æ4, Ž—ÅÍ.e.dJ<”ÿ<g%Þ µ ŠÒ«”FAæÝrùw2A/òÚ01D¢¬Œs×§ŒAñ­muÂCßí(«¸*Ü:äÍвE>ëcT€rˆ¥Æ ƒåý­Öíyné˜oþÁÌ2‹ÁþrÖOïþþøðöáƒÎ¯ïÞ¿þ —~Ôùõðч×|±¨ÞØÖmîÒ̼ëZmŠlË8ƒJ«3©–ÉÌç$úîÍ¢ö›ÔKvû‹%?¨§caû'™·R¡Ì5Ãä|…÷Ô÷ú2Ë=SBõÁœÉw“‘“NKF‰®éz]±bâý‚eÉÁ¶4ä÷A@ö,Å’‰œn¡c¯ÿý»·ðrõ\ÔI¨»tÿñdÈ¥!³'Ìq¯v‚]­­ÿæ jì7îþ‹j¯—»‰çÜ.Hoå¼·IpwoØÂh Qåº7!|[ÂùÑþzG›l:EÞf­Û„5·®ØpT ÷>°Ôìp†*·vÌÚÛÂÕSÅÿ#{v,‰Ëþ~Ê1ÌŽÄ=°µ„²„³À°Ó Ê&-ÁL,Øò@…™ MMªÆf6SnnŸ»Çå›ñ¼ªUa£4ΊMASœA8–Ž`“€Î$…J¢²„.˜“ÍÁ®‚-¨Aq-eÞ:Ò;»É.Ρ«ÍòЖÙè&(N²H5É!ŠÓ"Ü$A•/VPýEÂs&};Ø4Ü@-Ê2Ýç* 5†^<‹sÕ¿éT¬Â ‡m,™âHôç^ •+I:ƒ¬ÌÇš@ ŽKÝ­Cû÷ ºç¡é?ÁúOMÇŽòŸdWI–›”Ã…i÷;îÙ# P’Å©ÁlâS…†þB¯4žpÒ”H_GÞÔ#æÐAMp qŒ²<†AmO³xÔsà]«Ä§Ô“ã„Âe­>aývâ(ø ©@öQ½T™¡ë p’§›9ž…O2†*øh±—@ºTiÞ¦(+ÂÛmX—f Ûm˜z® ›k{yæ³áº sŒxœ:oèÐ… /©p„¥eèÆNÈl¬Q.ãÍç§“\ìå â¿Øæ\@Y–—Ibšó_6Íõøó8ˆjý0ê6¬,ë’=|ƉܷçÃU‹4µz‹iOÖÒÔ«¼Ë¥¢÷ö£ð [L_4;ìOÛxÄܳŒƒ¿jPÅrò5Á’7‰™¾šóòVÉ6ÉWžâ v°£¹:’ͤ6ö 틽M멹ٻ*|‡ÎÜ}ÙúÀ€ÉwKDÔEeŠryeâK"#´›KMYÊÜ™!ØJ­¥Q‘ (H"嶺idy˜Ò¨ÔŒçñˉ0ÓêÙ€˜ùd`•›õK±(Ð’±çV=ÿJЙ×0Êôü³LÊßî—ýÙ0»åžËËX™&æÚʹ²,ÊÐTŒv½çB' QRZè4,¯K\6yŽmmˆP\H>r.[õ[潫®’÷×–‡PÖ£²Œ¿Ær܈Ŭƒ à®Ñ*F³PÕnCtºP-ô,@¯w|>¯-ðÀsfÌ™ˆâ©Ä§ Tõþ/êOæ…®,6vZsÍð€Ê1´—å×@`o7ªšN˜.ž2 Thû²´tq:Ë áÃ"x;¯­„ð§Aþpª»ˆúÔ Í›ýÈ\hµ±BÏõ#¾-ŸïG|6\÷#Ž/nªsÀ¹½ÁB -«7›5­ê;~1?1Ç}·¸„™.Ó¯¤X^6Xœ&ì+n©Íoøâžì×ù²G1™7Yp–³i5þž£6m1³rõ3‘c¾u4µZ«Ç Êj…c1×»Àú888o¾úÖ]µ=Ôð†{õáéH~¸ŸL'Õw]3»d>b™)`–$:‡><¼~óþ‚8ò$pašæfÞQGåÏ-9 FQÞÌ­¹ÐjnY¡çrË·åó¹å³á:·#~¢bšæ{ùžX9›E¤Ôâ(‹fƒ&4Ôl3G5ŸÐ쳎5aœ¡²°¬èüâV7©a 8³¿#š×gÂ[̦û¼Ñu+·‹¢Å0<»ØzÜæ@èí¹ãØ0ÀÜÿéþñÈ:¾N¼I (A7±1“¹þRh2¥Õ$ËWä÷ì÷_Þ‹EOendstream endobj 265 0 obj << /Type /Page /Contents 266 0 R /Resources 264 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 195 0 R >> endobj 267 0 obj << /D [265 0 R /XYZ 71.731 741.2204 null] >> endobj 268 0 obj << /D [265 0 R /XYZ 71.731 706.3512 null] >> endobj 269 0 obj << /D [265 0 R /XYZ 178.8882 657.5342 null] >> endobj 270 0 obj << /D [265 0 R /XYZ 227.0374 657.5342 null] >> endobj 113 0 obj << /D [265 0 R /XYZ 71.731 650.3961 null] >> endobj 46 0 obj << /D [265 0 R /XYZ 304.0669 607.2986 null] >> endobj 271 0 obj << /D [265 0 R /XYZ 71.731 595.1274 null] >> endobj 272 0 obj << /D [265 0 R /XYZ 71.731 544.7283 null] >> endobj 273 0 obj << /D [265 0 R /XYZ 71.731 539.747 null] >> endobj 274 0 obj << /D [265 0 R /XYZ 81.6937 518.9898 null] >> endobj 275 0 obj << /D [265 0 R /XYZ 71.731 439.1243 null] >> endobj 276 0 obj << /D [265 0 R /XYZ 128.5181 400.5603 null] >> endobj 277 0 obj << /D [265 0 R /XYZ 209.492 392.0959 null] >> endobj 278 0 obj << /D [265 0 R /XYZ 343.4942 392.0959 null] >> endobj 279 0 obj << /D [265 0 R /XYZ 76.7123 357.5256 null] >> endobj 280 0 obj << /D [265 0 R /XYZ 81.6937 339.5928 null] >> endobj 281 0 obj << /D [265 0 R /XYZ 71.731 311.5331 null] >> endobj 282 0 obj << /D [265 0 R /XYZ 71.731 311.5331 null] >> endobj 283 0 obj << /D [265 0 R /XYZ 91.6563 295.7572 null] >> endobj 284 0 obj << /D [265 0 R /XYZ 402.5478 295.7572 null] >> endobj 285 0 obj << /D [265 0 R /XYZ 192.9556 282.8058 null] >> endobj 286 0 obj << /D [265 0 R /XYZ 71.731 282.6863 null] >> endobj 287 0 obj << /D [265 0 R /XYZ 91.6563 264.873 null] >> endobj 288 0 obj << /D [265 0 R /XYZ 442.8262 264.873 null] >> endobj 289 0 obj << /D [265 0 R /XYZ 183.1624 251.9216 null] >> endobj 290 0 obj << /D [265 0 R /XYZ 76.7123 233.9888 null] >> endobj 291 0 obj << /D [265 0 R /XYZ 81.6937 216.0561 null] >> endobj 292 0 obj << /D [265 0 R /XYZ 156.1337 190.1532 null] >> endobj 293 0 obj << /D [265 0 R /XYZ 71.731 187.9964 null] >> endobj 294 0 obj << /D [265 0 R /XYZ 81.6937 172.2205 null] >> endobj 295 0 obj << /D [265 0 R /XYZ 173.0199 172.2205 null] >> endobj 296 0 obj << /D [265 0 R /XYZ 71.731 157.1122 null] >> endobj 264 0 obj << /Font << /F35 74 0 R /F33 70 0 R /F38 85 0 R /F24 62 0 R /F51 191 0 R /F47 166 0 R >> /ProcSet [ /PDF /Text ] >> endobj 299 0 obj << /Length 903 /Filter /FlateDecode >> stream xÚVßÛ6 ~¿¿ÂÀb*Ù–í¼®¸:ô°®ÍÛn[‰:RfË»æ¿/QÊó]‡<ˆ–Hñ#ù‘‹(üXT2Rf°äŒ¤)Í£zG£ývÇPe‰:ËK¥_×wï2­ÈªH‹h½²¼$«´´w夢e´nþŠ?´â`ä,SN㜸õsRÑXÖS߉¡3ÝöQON[=õ“¿)ýì$±Ñ“Iþ^ÿ~w¿ØxN+ðfyQ”³$€–±Õ›a«‚dUÅÏafx))³a¢VP²Q>¥)¿EVæ„§´ˆ.oó.o×34šÅpNuÅH±ÊÊkëVbúþí;ƒr3tIÊãÿÆc_1ŽÓÞ'ݴ $6=Z …Ù¢4•¾J«Fã–Fci|¯¥D]–VN¨[1ˆ(€–rk/ÕδïüfÝOM§vâ0ƒèz» ¹…-YJVœå.ç,Ë)ê£G¥ «b¨ccGú<·îÅ|ýóSHQ§}tß­@¨ãT·˜ÄÜí;¼[7 x¢œn´AƒÇ#x¸Éåg=šÝ ÃA+’”be®Ý8Ø€u&ìpÆ0ôPõ pµÀ$oBˆõ Å苳9†Ú¨]È:zaÃóà—FZ(y];[€öþ!/£ HYä–”iYfaÒÐfÓüã˜HZ§}Eá¢$4æ:åVЯׯzì%yÑOØw<%œ§?éà ¥×;Ø+ý´ƒg\þžÁ0ÓÁ— >Úüæù©°l¥§/|ÔP¾ñ“]€:ä{®+²6£Ûp#Ö^¡q=ÐÞñ„o Ã~>>[Q Zw‹ûÞɬ ÛÒè]xéppçˆc‰?÷á:„}÷ý„½!s¼_·¶e«ûƯaBjn}C†Ù±Øz¿¸&.Rüëý§ûk¤»Fî¥2¾Ÿì“KŠ5ôã­;Ï?.èÛ³‡/INã?8áÎ!ÃÇ ·0Ø“½å:`7ΧÑufÎÁÓý¸¸L.5²<™”:•Ë@Í4H¬™ÞºÝP÷é¦Òmýˆ;|„I…ÖÞ ¡ÆÒçƒCäéOÄŠžš³,š©«Ï˜u¿ìÔ(ÕO‚3“o†¨»+¼D]ËfÕÑÛ‘ Öð²ÊŒ¯‘¼"+Þž":/_;<Ë¥, 7Ù`ªWŸ'3þ~áXßendstream endobj 298 0 obj << /Type /Page /Contents 299 0 R /Resources 297 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 305 0 R >> endobj 300 0 obj << /D [298 0 R /XYZ 71.731 741.2204 null] >> endobj 301 0 obj << /D [298 0 R /XYZ 81.6937 696.3885 null] >> endobj 302 0 obj << /D [298 0 R /XYZ 357.8451 670.4857 null] >> endobj 303 0 obj << /D [298 0 R /XYZ 71.731 668.3288 null] >> endobj 304 0 obj << /D [298 0 R /XYZ 81.6937 652.5529 null] >> endobj 297 0 obj << /Font << /F35 74 0 R /F33 70 0 R /F47 166 0 R >> /ProcSet [ /PDF /Text ] >> endobj 308 0 obj << /Length 2200 /Filter /FlateDecode >> stream xÚÅY[oã¸~Ÿ_aø¥6k$ßboŸ’™dá"34ÞE·´DÛl$Q ¥ñúßï¡xH‘ãÙŠ‘LQ‡<ß¹}‡JF1ü%£û$º_Àe™Dóy¼¥Å‡xt‚G?HpÊr½Žæ«d ?Og«Å}´ÝÌ×£™+äqÿáãó|9šÇÑzµYöG³Ôz ³6ñf´Ïþ5y¨*Zfì·él~¿™pþ†C\àµ>S¼½e¤ÒMÿÁǸ|iv‡+ÊnkfçjzÆ‹Ÿ¬Îóh»J–­ÎfÛDÊÆø3Uà¼É®@êù‘¦5ë&z+ý!Ï4ä[Ì8Æ…Õg5«˜'Z‡Ì˜*4ëá¢L8²¸0þv93“…lT¨E”–,£‚ZSÉJ ÌKv e†_ãxž¶©OoÏpÞáêøµŒü Û`ÐÝ +Ä⬌S[åôX;½L((1û©ÏuÐgáú¯iÊh(‹FÖvB!iîÙþàÄ„ÕPÚÈ%…Ãè‚;“¹ªjqÙÛ”®³ê†–Tò©ÔCvReÒPꦒJãÖZŠI§PMÿéÆ&Ê3QiÀµ…¿Ú{Ù·4¡œ™è1‘ÒØ9ý¸ÐÙX†ÔÐð;7eŠ¦Ä ÏÄp‚(oã’¹$è'ÏäJð“ ˜I%ä½<³~@ûÒSÞT(~g™ç€‹a¦DH7u ZÆ©D§|lê°+ߌe›jr ¤O@† ¢Zö͘’Ò0°Kß%a @põëmcB£— Eûü4…Œ ²œÊ^ðËæð¨ufKP”…-2s9Ó®ˆ÷)ŒIô™)ºžõ+ÁJ ‹bˆ¶'‚¶¥ªÌ~PŠX™²ª+u™^†»œ-ÏñHCû² v“Ö–©‚¡Z”i8ÎÔãáÛ·—ݧ‡ÇÝËnÿOúúYß|~zÞ}Ýíwýú¦fA=IUå–xZ*ã_ûÐû, áè‡TÀš°Ò·ø/,Žh)òžùUÎÆN:l,Î<·J’ë€ä*¯ n|ܧJ¸.t´Ï/À; ùâŠæ°twlÚ²±ÍvH°ÒÓšøÒ²IÏïcn€6®€o¨ ÅÁ†X¿WNUë/,U&c[re§eðÙ½ñ•7ã(äsØW¿ Ç1oºèø}~ö‰BÇE<È|ïCŸfm_÷YbÅ…Ç0îš´,¹ÛÐÝ I÷ ª(´tS€–9±î ÉÌú‰r9ôx 9Ñw1_.&cC¼PË¥âá5¢ O[‹Â•è‡%µ GºƒøÕn &ýó(à™Íà0"©Ée0«Å5ì0àÀ޼˨®µ0EW–4o¤C%Ûœ ó:nAså™U·ü]u²gü¶ÈûŒÿ4]­&FFË´@Ù”>u4Â{«ÕÀØ[#+ÛÓ“€“Ù€ôs«r Çå»lϱ%fOƒX›º¦0îZ`óò-e¢N}n#LÓ«LIÉÆ`·a5yÅ,_aÎ'‚ÜÈéú}³nÐ>€'¤òÎ m7ôÏ.Ò ÓZR¥åC]2êÕA»HÔoÙ0tELJþaFAFPpj.XjЍQº›ï’JG7]W&Ÿ£õÏNpñ¼£sæÄ¥ëîq ‚þ—K—ÔŽmëvævÏYÝMºÄ:¥<é&ñ"ºyØ4Þ•ÓeŒ-©`Äøš[b‰±¬8¥¢¶6»ÈÜլΠOê}Ûa)\ïüšèÔçÁAØp¿¨ÌNîÞ9¦r¹T¸ÀŒÞïHÂážA‰ R¢í¹i†OnÖpOluÜÞ¶th&ú+"%”·~nF1}í¬8HóCC<·%ëG;óãà‘¤o?|%`–@<ÿÿ´ñ˜Ø~ºXMË€\«èjè|ñ¿ b&›¤PBèLP’{Âe…º ¸=á+‚ã7ï\'ôdES‡8û*»£¹ ,–w{ð“{У)ñÝ`]Uf»Ó¢A×üQ:åÓº‹µzÙÿÙÞMÇ öî¤Ù!=]a&z™Ã˜<ž;; oAÄ[S™#ÊöPäÃÓÞ~6Å¡ËM´IÖÛà‡Uœ2sæ´_U+ç“Õj±ˆâ8YXI Çm5û6°ÞïÌ,-Uendstream endobj 307 0 obj << /Type /Page /Contents 308 0 R /Resources 306 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 305 0 R >> endobj 309 0 obj << /D [307 0 R /XYZ 71.731 741.2204 null] >> endobj 77 0 obj << /D [307 0 R /XYZ 71.731 706.3512 null] >> endobj 50 0 obj << /D [307 0 R /XYZ 532.0396 691.2808 null] >> endobj 310 0 obj << /D [307 0 R /XYZ 71.731 670.2196 null] >> endobj 311 0 obj << /D [307 0 R /XYZ 71.731 660.1048 null] >> endobj 312 0 obj << /D [307 0 R /XYZ 71.731 650.1421 null] >> endobj 313 0 obj << /D [307 0 R /XYZ 71.731 621.3466 null] >> endobj 314 0 obj << /D [307 0 R /XYZ 71.731 605.2555 null] >> endobj 315 0 obj << /D [307 0 R /XYZ 71.731 546.4112 null] >> endobj 316 0 obj << /D [307 0 R /XYZ 71.731 504.6328 null] >> endobj 317 0 obj << /D [307 0 R /XYZ 71.731 434.8944 null] >> endobj 318 0 obj << /D [307 0 R /XYZ 71.731 416.9616 null] >> endobj 319 0 obj << /D [307 0 R /XYZ 71.731 371.0687 null] >> endobj 320 0 obj << /D [307 0 R /XYZ 71.731 340.1845 null] >> endobj 321 0 obj << /D [307 0 R /XYZ 71.731 257.4946 null] >> endobj 322 0 obj << /D [307 0 R /XYZ 71.731 226.6104 null] >> endobj 323 0 obj << /D [307 0 R /XYZ 71.731 195.7262 null] >> endobj 306 0 obj << /Font << /F24 62 0 R /F33 70 0 R /F35 74 0 R >> /ProcSet [ /PDF /Text ] >> endobj 326 0 obj << /Length 2324 /Filter /FlateDecode >> stream xÚµZK“Û¸¾ûWLù©JÒê9£Émì±½JÙc'Ö¦Ö•Í"! 1I0è±þ}ApföòA"¿~È‹«9ü[\Ý,f7+øX/fËå|}••¯æW'øÓ‡W »dj×LÃEoö¯~y¿Ú\ÝÎn¯—×WûãÕj½mVë œµžmç7Wûü_£»º¦UÎ~ާËÍ|t73Ÿ~3_Þ7›‘¯nF”š7÷_f’‡‹ù”äTHóÀìgÅíÎýxx‘JÖDÀqÎ;ó‘ñZ‹sAáˆêŸ.ÓÅrv»Y¬[-_G‡¾îîÊHQ â¯?×ôx=s縫å¶=çÝORÖµÛøugŠ ‹Ä‘‹’(é’Z9mƪ¬hr{F]fA»ûúv·3_™:ó&â{SOðô›ùˆŽ›ÑOV9žXãb#Ó$ÍGb6ÿ>¸©}øúáÓÇ®üŽ/ɪ“ùJ¬øÍ¡`YqÁ—ËùèÇx¹Vxœî÷÷ölRY쥂¯DäÓŒWúvw®dvóý×=\œP¤ë¿øsS’*å“Ö±Œ¹¦ëä —êk&Xx|¹?ÞÎGö©¼Œ*".‰“¼›f(ÊúPð t´2ñIs¦P'^!¤I½{Û`å"wΨ”\Èç­è{<³ìŒ‚{[9)Á…ötg$Åya52O´¢‚nÈCbÇp‚”$;³ŠNÍ™Ö'P¨¼Éð=â$yIŸ(ÂÌÅA݈šKôÚ×›Q’ö(§!¦Ði¿èز´ÄSR`‚It'`•SìÀù÷I„òÇÖŽ™’´8¢;DjB[yQp ñ£3˜ÞëŽÒ<Îg^äI)Zê9±ƒFK±¾ ¦¨`¤À×H»˜ôÚײ(O{%¼%[‰À€ŒÎE àVe†ùdi1…÷ÖÜße÷ˆNx¢ÃÃûœ‡É^œ­k‘}R?\¬(­ D¼aH`‰ÉË#¶¹!w…ÆAL<Æ@PΧ8]Ž1’*£Ý¤åv"DÑuŠ uÜF!ž|”ŸiЧ֪ʭìÝtàùeàO¨_U¦ÀZZËþóÝ?ÞhäîÆ‹Åb´ß}2¯ß~þòm÷ð!ß`¥fôÃKªŠp,5ì -Þ(S -ÚGêxCk¸œ5¥…B²¦ï+K*2æc¾âUç6zŒõÑ?˜CF¾fj½À€š˜'#:|Au;•yk¥]i·>4q±ù.ÉŸ]m.îDòB{\aʽ†G'8êµÂ¾Ô1wBEwQ„•S?M`¢½ ÍIž#ÒùÐ,P¶ëRÀp§š$MÄ‹¸æ²E™YWp²3©N4J«F|+Ëî鑊y›ˆ ÙÅv„ÒŠ7'›L«¦< €ˆW¦i™’§õy¹{×;QUI3¯ÿjö'h¯Á¨F1d:ÔT9‹$å€@P­»:… [µæÃòÒ“¤Û €  á¹t͕ȫY—ðEÌçßµ;þ¦ëîa¿ÛKáÒ³~+‡<' ¯Ðš½ˆèæã .~J.\îÀr1Ÿ–´xX˜=ýÒ`™‹g[%%<ém`Ñë •œ ú&…VÇQ[2îÑù²ðŽD{#D˜Ã²J"N³‰j1¤v¸EyN£¿ÚŠO÷M»‹øt¶b1é|ÔG%T Ëéñ†dߧω8pÏö¦®ÙèÆÂœ‰jóˆW^ˆ¶1eÎÆŽ—TÂñi3.@m¤Ä¤«Ã³ûgÔ€*SºˆòæhœWørYA"ŸÁ®n(`ƒÝ@m¥•*Ú£Ê!üÁ$À÷Ljw…FP`OÊ R†u•Nn¸)/ÎÒ“ôq”~^àë–dÒ½~Ò5|ÁÝL'p_ë¶öac”ûæôƒHéòxIø¦œÉÀEA…ã³Õêt€SË”›÷jD=°èWC¦Mg¢Ý±Wgµ¼œw»™xªÐí zÑàšoÅ9*u /pKÞDe žd©§Õ³<ó¦À‰Gǘ>G`òÊ{’t¸þ1ßÌÛ²Óò™Â7 Ì#yE@28d1$S )^H»ºÐeUC{ð: D$ÿÉœ·µãŽ'Í™® ÒÅmzøÿ*R ;p¤Îœ’¤ki34ÓÍ€Ÿ¿M¤ÃÎØ³€çJp¤)o6zÿCÜÚ:1Š3ñ'OM)g| KÉ©ndKÔ¾Y; m¯iEÎ9ßÂ_&´OVÅsl}DAÕË4;Îúõ̘°°>ÆæŽÉðTÖNQq&ä4œyß¹)_ U—NrÓ„T÷inB½îqu…ê¶Ó}:]’¹:•\[A¦8âï í¦Šg¼ìך^™Z¥\YRk›Çêt­ž›ðò&w†ö«¥$ëu«Ñô+ÁÎÉÐ9†8wC §ÂPB#ASÐT¡â!Ä \ô‘aÑ$hé~eRç¦ã>Œ†fN´ßvcª%Š®Ó@$‹¨›e’£êuŸ…Û©œ¾¤w¯žcÌrÈՙЇqê,|‹·$»H"•+ë]­ìQ@ä¸cl%j*™~iÄi²›ßE¿qêZƒêälÃM˜°"™ ŽÆZÒËâr€4êì~y&=Rô¥=º—vüß‘jX8øáJãáñJ'æ‡JNÒ²Ëág?ûÆmÁl5Â$è-ÐëÜ{8˽˜î”´äÚ²Ú§Ï÷»÷»·8Çþüð5þáßþT¿Þζ‹ëÛ'ÿÇB°¦ÿ6Ëíl¾¸½u'i1óÁÿg¸ðAË endstream endobj 325 0 obj << /Type /Page /Contents 326 0 R /Resources 324 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 305 0 R >> endobj 327 0 obj << /D [325 0 R /XYZ 71.731 741.2204 null] >> endobj 328 0 obj << /D [325 0 R /XYZ 71.731 676.2989 null] >> endobj 329 0 obj << /D [325 0 R /XYZ 71.731 606.5605 null] >> endobj 330 0 obj << /D [325 0 R /XYZ 71.731 549.7734 null] >> endobj 331 0 obj << /D [325 0 R /XYZ 71.731 533.898 null] >> endobj 332 0 obj << /D [325 0 R /XYZ 71.731 451.208 null] >> endobj 333 0 obj << /D [325 0 R /XYZ 71.731 431.218 null] >> endobj 334 0 obj << /D [325 0 R /XYZ 71.731 413.6588 null] >> endobj 335 0 obj << /D [325 0 R /XYZ 71.731 317.6439 null] >> endobj 336 0 obj << /D [325 0 R /XYZ 71.731 286.7597 null] >> endobj 337 0 obj << /D [325 0 R /XYZ 71.731 178.1669 null] >> endobj 338 0 obj << /D [325 0 R /XYZ 71.731 147.2828 null] >> endobj 324 0 obj << /Font << /F35 74 0 R /F33 70 0 R >> /ProcSet [ /PDF /Text ] >> endobj 341 0 obj << /Length 2443 /Filter /FlateDecode >> stream xÚ¥YãDú}~E4/$RÇøLœ}˜ƒaY„Dƒ´ÚåÁ±+b;¸ìmúßïW®ÓuØn#œ8_÷]mBø/Ú£à˜À#‚8ÓMy{nžà§Oo"²ç0{è›Ç7_L²Í)8âÃæñ²IÒ<È’4\i‡ÇÍcõŸí»û5þs·³pû.`ÏO?þÂ>|ÜeÙ¶Û%Ç-BìÍû¶n¨é‹· {õ.QCÐî·Çïß|x”leÉ18å@{–w åà>Ѹç2N‡ Éóldþß»( ·íÀظ/ìCÙÞwðž+šŠ}¨0é;|ÞÅávè¹4{ü«­ðÃ0FôW@mQG¤Œí…=û«¡ömh*Ôe Š¥Z"S•ÚÛØà2áßÏí.ʶÿ£ÿCTµ ®}§,JGáïƒÀ•຿œ¡“Õ¨ ÈàlY\Mž{‡JLPý"`21ûûöŒûë«ÉÐ_ë7Oê/’vm¬ð Þœ¹zdNbžØ^’—J¿qNKÍ«-ZËâô-×ŵE»XXOè±%ÑÂó&’2‡žz®à÷<,? ¾+æX†µoáPµ’ye}Ð'Ž›WÈö3°Ç ÍOÙæŸ‚£;'q ½åkט”“d¿ÂÏN’æS² þh 7eá¡6KU»$“—ü‰Ú¸xB¡³PzUÛXAÅtG¸õðE8#}ÿ¢Inê-êŸ)¹/]{3)@$oú·D…—3Ñ0gÆ­.!ÊbTîç+.y ×v¨+C@à©ã„žå'.õîm9ø‰&½pGËßÁm÷2I¨  Šåqd× ‡Øƒ•6IqC–M 2±Ö¬²,}p–;ü„›¢æ†3ˆ~iCÉ#ll!|Â*Ùp¢wÔÝ0¡ V(ó LŽÙ&Ë3è’Ø½h¯C9¢×ÄE÷7z]$—£wž 7eá,a»2| k2DÛFZJÔ á¿ h¢*<ÿ¼ ò³°E‡È@ðYм8NåŠïßÖ%ârÓW¥rQ&Û'ÔKS•[xízU¡•wyؼw•ð]x0kUã4&̺6 1;$ŸÚË¿eÏ«0e EW†Pã’Še_˜@Wz: a¢AÍ„‰€¢ìëÉa2Ë‚…›²ð3tñh]œÜe‰“L‡¶CørØz-ˆ'Œ$¯'Éâtžæ{Êß“H(ª«÷~s9H®0×, nÊÂOIP§G¢Œ­Å`$””+„¦í¡^ GWd§,Ùdá!ˆÂ8òÀ´×¡œ0ÅEÅùàרƒä β`áͪ’m{Þa¬‚¬#ã«O#•CÞ¹s6ïØ/J™ôúÖìT6öжH—†ñ&Íó :œ·…8Ð^‡rXÈÄEÕóq—‡[¯•\d—­4φ…›²ñ¹)ë¡%ßn¨¢iqé³·O‹“v­æ« ˰¼§šŒ¦* •f—5µë¤utT®WÍß’2Hy³¢Ø=Œ[MøéM¶æT²çÆ !šj¸‰f¼fà´A÷&Ý4;qžÅóIW‡ò'] EõÉï|’+œo– ·;é*•É~ÉçEJÿƒÈÔt¬1¬c}JÛzÐs©Gd‰Ÿ'{"9¹uèwÂu¾ÕGJQ¹Ð‚Ò7 Jú„à0¼c!ÊÂW´Ú¯˜~—ˆAF ¡€f‚Q®¾óûƒMo…;ÌÑ71k™hZ3Ý 6…EÜ;+RmI¢ 9@¥OÃí¿5—rN¡Í_ QÜEZ£0î‘HŠt-R½c R9X#ô‚ŠŽ.ÿÚ –(ç'•4á ‡±”ì¢-o”áÍè-ðdôàäR¤±Y)(6žfˆSlÍ[<éé὘}öõ³"Þñ?ÀyÓ²§2|¡íL´v‚ÒN«æTc3UvHFÃ.kŒ0 ¥+,Í#Ó™´ðgM¹Ãž§TêH¢ÆrÈ5†kÚ®X!RvølK½Ü4¾©Ö¼›3{AE@pÔ8ryÒc¢h“Àx|È#OFâ@{Ê‘L\T?ß{3’‹ärFZ`ÁĽ‘Ô?ÓLÞv_xBhYOï^Üj+Ì…rëp99GèíeQ–jwÑNúÖÑíº¢!÷¢“H|•ÇÙƒúÃ5þB‘°d†Éj¥¿/úŠ=³Há#ÂßÏArå¸ñQƒÈSB±g¾×0™ù¢E¥4½Hy×ÈŒ‡›,4 :3ךlVu™™EF«dÍrØXT°$"ã|šÄcÆ$ìå]Ø"^3‘á¥f„¦w‚ê˃¥//ìÉÿ&Ö7ØðZ϶ôÇ)td,°sbº ÁÛèðð›¹Ü¦øg–Û¼iŒOiŸÒ…þS‡ò7 ŠªôŸÞ”å"¹œ²æY°p³&tšwÛ§wå—†Mqðî Qã’·ÓõÛ÷0Só@mÖ}±YÓ‡g vŸžœYi"†½Ý"Ê[S"ƒN¯6ô<ë¡BœEYžlu,cÏ¡#IäkU)-yÓÝØ>áÆ»O‹i†§Óü>M‡òïÓ$ÔxèáwMÉ®9Ë‚…{í†rÕ´»tŽiÌ\šWa±6á°928 ©ç’`ÂOÜÃíŒ:u¸ãpXÉ Ê™/PÁjÕLvj`–þGp¥˜‡î;½„ƒàÓô«,Èã ‘$AD?8ýŠíu(‡_™¸Æm•߯$WøÕ, î±YA5êÑ+ÓÞ‡¦‚Q€§;aÞA¤…Â@–pi«³L[ãà_ý…ëþeAäÛÚÊ¥€f*¢ªúÑo-›Þ cÍÑ71³¾ÒPa‡ôÓrÝx,BÇ; OkˆVgjÈiÝm1Äè?Áânn¬ƒzí˜Sgb>±nrƒSçêÃX‡_Aˆ»™n Ä…Œ¦ßߊ^.³§÷Äd¡böäŽêÿŠ_^¦Ê9Ú¦*ÄU {§èÈi´@BƒM+bÃâˆF ŒWIÜÙúÅꑵ‹jb&¿+˃†ðS#פ½çïÖ‰±vÏiª¶Âwh>5z ƪpšW¨°Ü'È’Y=<ç:µº‡ðš]ï«òË↖I6*È1éü«ûcç…G“ÒN¯V,v“3̓<:œf/´j0ö}Ö,΃0‚ÎC@Qq¢È{ ÕAðÿ@:Û4endstream endobj 340 0 obj << /Type /Page /Contents 341 0 R /Resources 339 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 305 0 R >> endobj 342 0 obj << /D [340 0 R /XYZ 71.731 741.2204 null] >> endobj 343 0 obj << /D [340 0 R /XYZ 71.731 753.1756 null] >> endobj 344 0 obj << /D [340 0 R /XYZ 71.731 706.3512 null] >> endobj 345 0 obj << /D [340 0 R /XYZ 71.731 655.3774 null] >> endobj 346 0 obj << /D [340 0 R /XYZ 71.731 650.3961 null] >> endobj 347 0 obj << /D [340 0 R /XYZ 89.6638 629.6388 null] >> endobj 348 0 obj << /D [340 0 R /XYZ 71.731 601.5791 null] >> endobj 349 0 obj << /D [340 0 R /XYZ 89.6638 585.8032 null] >> endobj 350 0 obj << /D [340 0 R /XYZ 71.731 558.1171 null] >> endobj 351 0 obj << /D [340 0 R /XYZ 89.6638 541.9676 null] >> endobj 352 0 obj << /D [340 0 R /XYZ 71.731 539.8108 null] >> endobj 353 0 obj << /D [340 0 R /XYZ 89.6638 524.0349 null] >> endobj 354 0 obj << /D [340 0 R /XYZ 71.731 521.878 null] >> endobj 355 0 obj << /D [340 0 R /XYZ 89.6638 506.1021 null] >> endobj 356 0 obj << /D [340 0 R /XYZ 71.731 503.9453 null] >> endobj 357 0 obj << /D [340 0 R /XYZ 89.6638 488.1693 null] >> endobj 358 0 obj << /D [340 0 R /XYZ 71.731 473.7784 null] >> endobj 359 0 obj << /D [340 0 R /XYZ 89.6638 457.2852 null] >> endobj 360 0 obj << /D [340 0 R /XYZ 71.731 444.2342 null] >> endobj 361 0 obj << /D [340 0 R /XYZ 89.6638 426.401 null] >> endobj 362 0 obj << /D [340 0 R /XYZ 71.731 424.2442 null] >> endobj 363 0 obj << /D [340 0 R /XYZ 89.6638 408.4682 null] >> endobj 364 0 obj << /D [340 0 R /XYZ 71.731 367.4571 null] >> endobj 365 0 obj << /D [340 0 R /XYZ 89.6638 351.6812 null] >> endobj 366 0 obj << /D [340 0 R /XYZ 71.731 310.6701 null] >> endobj 367 0 obj << /D [340 0 R /XYZ 89.6638 294.8941 null] >> endobj 368 0 obj << /D [340 0 R /XYZ 71.731 279.7859 null] >> endobj 369 0 obj << /D [340 0 R /XYZ 89.6638 264.0099 null] >> endobj 370 0 obj << /D [340 0 R /XYZ 71.731 248.9017 null] >> endobj 371 0 obj << /D [340 0 R /XYZ 89.6638 233.1258 null] >> endobj 372 0 obj << /D [340 0 R /XYZ 71.731 230.9689 null] >> endobj 373 0 obj << /D [340 0 R /XYZ 89.6638 215.193 null] >> endobj 374 0 obj << /D [340 0 R /XYZ 71.731 208.0549 null] >> endobj 339 0 obj << /Font << /F35 74 0 R /F33 70 0 R >> /ProcSet [ /PDF /Text ] >> endobj 377 0 obj << /Length 2307 /Filter /FlateDecode >> stream xÚZ[sÛ¸~ϯðø¥ÒŒ¬)Q–fŸœÄñºMìÎFÛN· I¨yQ2Yõ×÷8¸„|éd&$A88—ï|çÈÉÅ þ%×Éôz—E2MÓÙâ"¯ÞÍ.öðêî]‚S®pΕ?éýæÝOŸæÙÅzº^¦Ë‹Íîb¾XM³ù"ƒµÓÕìúbSükts<Òº`ޝÒl6º™êëÝÃoúæÓ8ËF|<¿QªG>6yWѺ%-kj=ô™å´tüïÍ_ßÝn¬XÙüzº^ÁÞÏÊngE¤Ÿ{Òã—ëåt¾ZeJøŽ“d6j:-FENú†Þè‹ ¹DgmIqÆåm]4\Py"q9уGÞŒ“lôfkõ5oàà¬ú©nÚ«÷úa;Ng£®5›¸UõH³Ó×SÓq}÷¥)سY {€â@WI:]gÉBíp´dD¹°‚oñtßÇi6"œ5.}$¼eT\]í\šJñÿ$Õ±¤x$öЉs¤¿áT®û©Ëœ…ïÚiͺA«÷ÀáÁu·”¢¸ähÔ(ÿ3Š4‡ uìа_²íÇp¾šý×ó0³¼Ýžtí¡áLz¡[í¡_TjµfîksXbuQ„S+xà<]½Å¥ŽD²§ýõ»#JÙè«”#”îÇX.Ï Ñ?.û‰ƒƒ]}ðô†ØŒ¯YÛ‰Qáÿ!Rš½FŒ÷$ ¤ˆX+"“ÙÆÚ‰!@öMÉDÛõ±QDV yq¤žýÈA8{¬K´cSÓg´õ*õÚ·+Â"=%iˆŠ¨òÌŠÖ×¶Ôú\6̲™ JÞtûÎåœÔ{?Â+RPó1|–ظƒ-Ce(L<—ÙvZË >®RrJŠSÌ)X—]A¥‹Lù\òàü0äá;é‹¥­q,YnRÝ‘òŠ —~v¼©ÜzO÷íKt[ˆòdϳ£ÂȬ™Ê¦ý2„ïØE°i0¡yÞ¥‹&P¼ 9Hñ¢OsÔÃ~wB…,섳CUÔàO¸ªtýˆï¨cäÚÕpV?%7¹åmÿƒÄ‘ ú@ð<„F²d†8ñáñËûû‡û‡;Téã‡ß¾Ü>l¾¾!³æMµe5}Ö8?X‹8§bÀXLOÆåKJ„9AWÎíN"S,«á•èÑË£„¥Ç,¨Ù­Xõª@шjRÏâ,ùtqcQöLFÔ*õéSYž ‚ûZ"ª¡”Ä(ü«>—ˆg6D7µ¨Ö]€–@Ìö°?¾¶vBÜîj§ÒÁ 7H ËQ;NFZé»Á¼†=±=¹r«T¢| 7Cô¤Ÿ”åµF[Õ„P /ŸG)o/Ç·ž0ü)µ`Wžz¥E™óæ(¿<…æ‹»´Áª+[ì¤Y+'ålˆñ1Áa|Š y¯ ¥Ü€º¹é‹þ*YÝöÖ¯1a#ÔFrfÁvrÑP{ÅñS¥')wÔ`ÈZ²oJr”FtöÎlj®fß:ÔCEa©Â Öhfø¶ñ(AòÔHo?vç¿§6­ÚLr.'¹|îÖ3÷ŽÉðõSݨ’²žô³-Mb$C½Ô]µ…}2ë2_Œ5ÎÙ™ÿéDërÆ é §ìv®¢P(+OwopÊȪ}ÐrÆ.qèˆ&â{…Z‰ÁÞÔÇþ‰~…,5ÈÒàšx9¾pLÞA¿WO—¿€^~ºÔß±þÖIИ€?¤AHdR¬´ÏË©5}1¿#ÍÏF½è Òט vÑã<¢g­`í›Üx-ŒíûÝ!Ww¿b¹v\~¤€±š}‰Þp£Î”Æš–IüYÉý~Öô2–¡––»}þ|ûasÿøð«äOocq‹9f 0n冉ñŲ´„aXFC£Ï1A§Æƒæ>ëSŽYà<$}pë“>˜â‘>xiZReHô2¤”L¯™Ú )ât6Y]h–ϊΠ$d3FÅ éø  :w…}] 0—‰%,ÎrBc‹IÚû¬SiPí:CI!b˲1íAg7Pf§Á´gS†6r:QK !‘ùn!*ã-ú€è©] êÐaÒÐ:òÅÔyŽ4¸8‚Ä[º~Ø£àPÈŸµKÑ«T\•ì’?Z $gHOh¿ãÜ÷AC_QÞô,±¸WK¸ ’¼‰ušï‡]?§7ãFMáÙ{>õr,¹JÆ‚Ʋ¶ ›«2Wœ*röÀù¼»~̀ܘDèAõF2ƒ»»_oïnT -áU¿ùý~ó Ò‡‡·¿…ÿ6øJnýøëߢ€{cK—#+MM«º|ð\Ún—-gÀa°e!AÈo›ãD¹´‰š r PKÒÒ N¯¤òw#Û;ë¢ÛÝpSû™"˼7‡!q+¥²-Ô…üÕ¶ñî:¸<J–9Tq»jbìHEØdë·¿‡º]Ÿô\Ïä…ŽÓkX‰g9ŒgzÏY^‚,—„U´Ú>³4K¡Ã~ÂT°›]b:ê£éÙï½€k©O’¢uS4ºc&9ÚÖ^¼Ø´Ü]aéfû›‘I·úhâ5b ^s”äžxVeÑ*iK-ˆ ·žôk#¹³ã¶¶Z€÷ÑÅ©â„ç9zü³^¯'ª¬ ª¬?ÊÀPðÓŒpú­cܶÒ×Nk¿ÃÃ\_4/X+ Þ–¸“2³ÞZà%[Þ’º1¤ï}{é/q+ÃG'°g€$lÄ|ëo‡•¯÷Šíd!19£ÿ¿ÈêV¼å§¯Á/D~ƃ·”Tèçà˃îÓ §¯1lÈex\󓛌QW‡õÝ8à”ð—O@<©íÖN¥þÿ|`±š®’åúÙ¿¢ðæ ÿˆ"KWÓY²^Û•¤š’ôìß>D6ü®f$Vendstream endobj 376 0 obj << /Type /Page /Contents 377 0 R /Resources 375 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 305 0 R >> endobj 378 0 obj << /D [376 0 R /XYZ 71.731 741.2204 null] >> endobj 379 0 obj << /D [376 0 R /XYZ 71.731 753.1756 null] >> endobj 380 0 obj << /D [376 0 R /XYZ 71.731 706.3512 null] >> endobj 381 0 obj << /D [376 0 R /XYZ 71.731 580.6576 null] >> endobj 382 0 obj << /D [376 0 R /XYZ 71.731 549.7734 null] >> endobj 383 0 obj << /D [376 0 R /XYZ 71.731 533.898 null] >> endobj 384 0 obj << /D [376 0 R /XYZ 71.731 477.1109 null] >> endobj 385 0 obj << /D [376 0 R /XYZ 71.731 407.3724 null] >> endobj 386 0 obj << /D [376 0 R /XYZ 71.731 363.5368 null] >> endobj 387 0 obj << /D [376 0 R /XYZ 71.731 345.6041 null] >> endobj 388 0 obj << /D [376 0 R /XYZ 71.731 299.7112 null] >> endobj 389 0 obj << /D [376 0 R /XYZ 71.731 255.8755 null] >> endobj 390 0 obj << /D [376 0 R /XYZ 71.731 240.0001 null] >> endobj 391 0 obj << /D [376 0 R /XYZ 71.731 168.2043 null] >> endobj 375 0 obj << /Font << /F35 74 0 R /F33 70 0 R >> /ProcSet [ /PDF /Text ] >> endobj 394 0 obj << /Length 1831 /Filter /FlateDecode >> stream xÚµYMoÛ8½çW9Ù€£Xþv{J»NëEš±S Øî–h›[}­HÅͿߑȡ$Šv”‹É9óøæÍ åvðçvf®3Áeì:Ãá`Üñ‹Ag?}¸pÕ+5æª:èÝæâúv4é,œÅt8ílvÑxîLFã Ì5væƒYgãÿÕ½Iùìgïj8toyýpÿ(ÿ¹íM&Ý´7šu)•Oþˆ½,¤‘ ‚Å‘|tÇ<qÚû{óçÅr£ÍšŒfÎbkŸµ]²X?ªX¯|œ.¦Îh>ŸÆÏ•¹›‡›ûõÝMÏuÝîfõù>·f¿raêÑP:ºéÀñ b9ãòêÅg>M©/ü`‘zïä5Œ}ö}0zÅ$}ùÇòúgjy–ÿøŒ‹”m{ÃA7 @QÁë“‹ƒ±¼Ë"°Ì!hríæÐYL\ ÎÅ©Wº9V8=Ð$ ‹öòvõƃîSo8é’”\o-_UÆ™8œ2<¥ÿf,¥êŽ'Ôc$7 È8×&ìÒ8Ô>°aOz.à–²ýA-~ˆð–÷ë¾ ßާÀf‘dþ‹(ó8Tcbe ‚W”GÄ÷Y ±ˆŠÁ)!O=wÒ¿¬›.CÇôöcÔ–~ÒÃdg± HL00’å¦qnõ†‰‰> ýuøí0,£}ÀøÁFÜ B/XçèÍ’$"h0¾Atð‘}JiI[*Ž”Ff,™¸Èoå…¹³»-ûª¼èÿÆG†ŒMRšD²„N]ùæÅ‚ TÉåçÕ}.ƒç•ò¥¢XÔ£¶7tû¥,îªx¶ j~b¬YÑ®{4wû§GuOxõ9xÎyð|Šª;\°¦žgwDÁtåS©‰c° UB¢-î¯Ãâ—¡ÀxÊÇÌïD- A2‡ÀeDíÙgyæžá‚ÈÊœB„¹4Kø}ŒsÎý ‚æz¥,KH*&†ãA¡u ¹ýr4f²r _£ /Ì‘öõÍt¢•¨ýF›˜if7í«$+µ‡¼LÀŒ~½bÌ®HWžy () ¦¼î24É‹Ã$Ñ÷¨5¤ÝÚ…ÛÇÍãÃRe÷å×Õbz-o?ߪ°ÿ¸ROîVï—÷륵:BÞݦXè­ã8æä&)þ–έÔòä,GÅŠ Z+A tŠqìlF4«Ð´EõYò²ó‚I¼(5 üU‚gPšäêX÷É¢ ›Û€†¼hP {4ÕÆ±?‘¼¹¾>‹}uöQæÀ+î¼»¿F èN\;6‚-‰÷r¤–EõÙWd"2󼀚6öéÒ¶±H”…[€º,ÎÝE1›Wú:àuíC*Ñìeùî['׳½Uéu©KÓj2‚®2ᥙ€`hc±&}C%­§lJš¥á.)ôZ£щÈÂ/`’¬‘1s³2–ä'Q3Þm޹Èey« A¥\¸ê÷Ád 3ŽFª¥d'`€«æx6 )„ʆ—´´'ý÷WÛW`¶{®yŠûç‰×?ÕVy‡8F^"à«Ö*ƒÿèViÊš?UñR–ŒÓ³A©KʲfòÕþpÛ"›Þðn773$­¶ïg‚÷‰FP<ˆ°u}ºBm£µfkT·C—› &¨| … Õ°´úzºZu Œ€[…Ñ?ÇÁ;Ñ<a"À¬JöôMnJqj4wÓé8?5*Îf«¡ëLÝù¢°î}Ó”œŠ^I·oË›l¯GPI=ª;Ù<}ZªpýbœqèT ¥. Ït ¶@¹Fž©NÂàÿÊÃ!ð|2Õ‡~­ÂRV-šÇj¤»Žk¨´ÕeC~#ÌßVN«,žë[ñl©æíÝj½Á:z¹R<ج6wËu¿q@VšGâê½ìI« ¸éͰ'Öš»Íî®±Â;âýxy –å°ïm¥­6SºãŸP‘ÚY$P+[5öòU ¼ttˆ—ÃWãUíÅLzF:£¸#ú¥ÐbqVîGË9..(1N”9yÖ;r<0¬’ã5Pž™‹”UƒEƒ[xÞŽ¦^7Á9ï/#T.ß"%䌕mã'2RúŠÀ±Ö J¥6%†b:±HWhh»ìyñPONO ³§FË $'òQkå1IÂR>Þ”ðjEŽÙ\£Ú4°¡SI"¥wP÷AÔí€RÞÐãúy_yêAø©¤óF4Ep¾§d¶„ƒ´ø¤ ç2™Y½ìNáU“óc•ú¼4ž;swº8û•­2¦ù‘m2œ;w±Ð3Ç5£“߯, þ$½†½endstream endobj 393 0 obj << /Type /Page /Contents 394 0 R /Resources 392 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 305 0 R >> endobj 395 0 obj << /D [393 0 R /XYZ 71.731 741.2204 null] >> endobj 396 0 obj << /D [393 0 R /XYZ 71.731 706.3512 null] >> endobj 397 0 obj << /D [393 0 R /XYZ 71.731 606.5605 null] >> endobj 398 0 obj << /D [393 0 R /XYZ 71.731 590.5654 null] >> endobj 399 0 obj << /D [393 0 R /XYZ 71.731 531.8407 null] >> endobj 400 0 obj << /D [393 0 R /XYZ 71.731 515.9652 null] >> endobj 401 0 obj << /D [393 0 R /XYZ 179.3565 477.2104 null] >> endobj 402 0 obj << /D [393 0 R /XYZ 71.731 470.0723 null] >> endobj 403 0 obj << /D [393 0 R /XYZ 71.731 400.3338 null] >> endobj 404 0 obj << /D [393 0 R /XYZ 71.731 382.4011 null] >> endobj 405 0 obj << /D [393 0 R /XYZ 71.731 356.4982 null] >> endobj 406 0 obj << /D [393 0 R /XYZ 71.731 346.5356 null] >> endobj 407 0 obj << /D [393 0 R /XYZ 71.731 295.1448 null] >> endobj 408 0 obj << /D [393 0 R /XYZ 71.731 253.1508 null] >> endobj 392 0 obj << /Font << /F35 74 0 R /F33 70 0 R >> /ProcSet [ /PDF /Text ] >> endobj 409 0 obj << /Type /Encoding /Differences [ 0 /.notdef 1/dotaccent/fi/fl/fraction/hungarumlaut/Lslash/lslash/ogonek/ring 10/.notdef 11/breve/minus 13/.notdef 14/Zcaron/zcaron/caron/dotlessi/dotlessj/ff/ffi/ffl/notequal/infinity/lessequal/greaterequal/partialdiff/summation/product/pi/grave/quotesingle/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde 127/.notdef 128/Euro/integral/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft/OE/Omega/radical/approxequal 144/.notdef 147/quotedblleft/quotedblright/bullet/endash/emdash/tilde/trademark/scaron/guilsinglright/oe/Delta/lozenge/Ydieresis 160/.notdef 161/exclamdown/cent/sterling/currency/yen/brokenbar/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis] >> endobj 230 0 obj << /Length1 1630 /Length2 5830 /Length3 532 /Length 6688 /Filter /FlateDecode >> stream xÚíTeT”íÖ¦c¤C‰GºKºÁ¤»s€fBB$‘)éiîT@”nDºùFßsÎ{Öû_çœ_ßúf­gÖsïkïkï}_ûÙlwt øvP„›'Ÿ¿   sµóòÐB¸iòéC¼tìà0 ˆ‚ØØî¡ O ñ„J&P µ„…!IIIpôEÁœœ=N#}.Þ?-¿\;ß¿#èH˜“ÀŽ~ñ†ÂHW¨›'šâß4€BOg(àƒC{:ºfjÚª§ª¶  uƒ¢ p@× ÝŠ=  ³‡ºy@¹G €ÿqìn°_­yð£¹=à„ÚÃÐaP{(òÄ ¡(W˜‡ú€yN(ˆ›'ú<ÌÍîåð«´Ýñ» $ öpEch2]„‡§‡= †ôÐYuÁ*Ôéé ñü•Û††„#ÚÓaïõ«¥ßšzB`n€'ÔÇóW.;(àó@Â!¾èÜh2$ ö» /˜›ÓŸð(¨å‡zx iÐÜ¿nçÏ>ê‚DÂ}G#~{ý£˜§îÈFç´÷Dçv‚¹~ ‹š›#üÃîà…ü;æ Eý¾ Î_3Ã….â€pƒûPG€6Âàü÷Tæÿï‰ü_ø¿"ðEÞÿLÜ¿jôOñú=ÿ•ZÅ ׆¸¢à% · Ð~í8üÚ5î^Ðÿq…Á}ÿEà_M û7¾¿Âjžô¥(º9¡…áæüà óPù@tažö΀#޾³ßv#7( sƒ¢µý}­è AÁ¿`†Î0ûn¿Dý‚º9üµ|´\¿‹ÐWQÓÔÒæùWö·§.z< }‘PàoiL´ÿ8üâQRBøþ|bBŸð]q@\\ øÓýyÖ‚x¢`>€… ¿  €þÿûóçÉê/4Ênö‡_“cà qs@Û? ¿`{/ ­ñïïÝôßÏ¿Ç õÚƒ¾L"ì¥C]RÒ^y¾¥yÝ5¶hû(„݆,¬2ÌË *G´Vc¿ÍÝØd±v|ÄÑÑÛÝÕÙò·ué6Of,!›´71{T{æmys£ÿHžE¬Êe¦˜Ö„×brǕӗ¡ÔƒÁ)ão²ô\ ÷Ä?d>J×Ç.xÙ¤¿JP`}˜áBÕ˜F«¸ÿ¬Â¯c-ËŸÞ…r·.¾Æ£°Îb#Ó,6´Â+ÔðÚxvž„rzT /UEŒdâû¶äY ¡`†ÇpÙ€ Ê€áÅ!ÜóâN£]w*MR¡˜ò¦±ðÌÏþw¬§Å^r°×´3°ÔÜà¹û4e%FD’‘M)®ŠTýéùC¿¾I“o³­/2àÙÌçÀ±Ê,gNE¤PÙtfô–³Ïr%6&¯‡³^y£””f—²áVùƒc²\¿Ìœ ï³iÂày¥')¼·>‰øÖÒDsÒ¿1dš$.ÎY¥»Íýúe "@Òc¥Ž½nRòìÎÄ ÖÇæ¦†«’T±6…@:V2KFUë§Š·®“'ÅE”¦/sØž Hy‘$O´–LŠN?¾¢©¹FJ°˜½²&!ö0ÏŠ)í¥HÒv±8ï ø° ª-ÿš_žtC"—Æ6êÎlÕîpçȨ¼^4îÖðÓîC(nðraI´ÂÎêÙ—&Wg$]áAüjÛÅúQ±OY7¦+7øÖ¦§âšÔjÈçÏewÛŠ¬ê”ÒÚ”rügVŽfOsÛ‡&CyEMÍ4í·ßóÜÃzâ>k$Ÿ3µà 4* ÔçŽëjl>C&T‡ôæí>S«2žákðùR gdð¼îr×0‹‹y0*Lë.9í-2@˜j6 Ç~jSlÒ>Älyó‹jÇœŠM§œîÏW…2·µ»\…ÔSÕOV-.dB¯Ït-µô´ =ò(_-…U,\Ý]U£óYÈß0©¥OÊãhÈä°àª«˜"x§%ÒŠWôA¢Ó`ý^]sNÊÕŠXc%—¨«`ÃÎu¢5ˆD=5eeð]LI—w!¡;­~Ðp!$Ï~ÛªED¨¾ugèmJ­Æ¢á>“³øíŸÈ N¶Œä’›]"ã{§R¿aäÐÿ=@­‡,zßBôð·}^¯ëÊ‘±®–ÇÞRžƒUÅÓc¨ c¨LÁCEV\fPµî ZÁw§ÓyÖe Ï̳8)|}cäCÚÍÁ–Ÿ£‰+ônXŸÈÒДÒ@ììµÂ·:=ÒL-àÆÕ¡Ù´ñmvB‹c|¯¨á!rt†éÍo#¶|?æNvÿðóŸýºWü¼ŽlÎÁß½£¤©È«äR`/6`lqÄ:Æ.°ÎÜÂÑ8†'6¿[Ô&‰¦b♡gY`Œ½Áu$H)iýí8îú\‹”ßãs^—u, qêô(LÕJÜZ5ëæ<ª´"=Kæ ÝãÀ„ eH–Nÿš`ºÈ¢§P‹S¿‹»½€½$~þ •¥P(í0éxï~wQYÓ<Ýâ£ÝŽO:1:YîLKD=Å,`{ ƒ†þÎàÜJìÝ8ªØ[ŠvšÎ7®3)Öñ⊈(÷´3$IŽÃ×ÔYz3a¦{+ô ×]}úµq?Á¤g¹õë—÷G&Ÿ÷íLèÛD‹$q\k´O:JÄ)ܰhÏ^•™¥‚q÷ì„›ÛsWõ}æ$¬»ãC©­¦@³â¹´xTÁw2¤ÄüÑyíœÔ0ìE·Õ§'ÂE©*KÄŠ!YF<?©êgCaŒE cÊ)®IuÙ;mó ÷ÄÞé¨7SŠX¹H±É$ùO«Y=tج"sÌy$"Ûg¾”!Æh$þý•Ý|x³$”‘ëa²ÿøØíO_nš¹ª…0?“ÖAmUÌÈ»ë@k^“³d»’Ïò÷MǸÕÝ÷JγýåI\ 3¹R´t‡y½t~,ðIeÊå)Š©O1\i’­¨A!Ú±ÄéÁ–Ezžíó0 rEn4bšÎg¥wr÷“§AgÚ, %ÌþM‹¡ 3Œ‘ÐøooÃV²åVzyð“ñe>6î\ŸëDwI~MGZö!’11±¨>³™¬4À#Sô½Ú[àN¢¼óbø5³^Ò–ÁtÉløÃ¹àÀ|…Ù8¸mpAÍ ÉhÛ'ºÿª]YAôFº"î‰ÓÂyÒö)ì¬Wm“Ð@VžÍÄéðÁZÉðŒ†Z𥞩l¦‰3饾dï¡xË]Ñg%Ñ –¥aÒ–¸ëOwʦr“X oùIOÝ bÀÚ¶¯áͪ·cÞk¸ߪ×lèø:½HnôBΔŽ2ÓÆ `ªý™68ÛEï¼õ¦€ÆÈ¦§×bRu©ƒ\÷N»}v¥žƒ)s£ƒò©ƒÔAŽ”›>WXmÝõ'ýŠÌwùÑÙDfã^[äÊLþ¥YÂ_¿µ^\0Ú ätªðóV£ç®†cf8¯_g¥×ˆ˜Þjú¦;‘HojýÜâ ›ë ûaøe¾|ß@C¢Š£êKªóS«¤˜¨ç!Ðo«‘ŽÁí.º}Ù]bïNŸŽÏ›?wÓ÷?†ó/ñ›uue)eišðäªe…-ÛžIQ\O’7û|ÅÆãtÈH9`7:ñÅ›)•ñºzʶ:»Ûþú5ߊ‹#ù{•?z2î1L\cÅíq€ žÿ…ªM© =‡±-ˆ¤˜ÿ1m õ”è[6YHñaɃ·à“¨„´'²–>c9â¡Zã²áù’½íbÍÉ฽¶ìíŸÆÎÄžbÚÐMßÄ÷qºÉš”³ýl̉³âò÷Þ›ÓEó!CEy²ß—_I¼Ùž’IZàðð†XÒdëRø^ÎT sLƒÜÅ;¶ßÇÍØÂlß‚òÇ6Þ¬ ö‰ix3s-tüXÖØ•íˆÄÚKñ Íè²h– •ù¤CÌ?8ïè€âGë€F^sú¤G”"'ŽŠ{súîìb2©RÛütÌOV¦*ø/keçUæK ùun6–4ñÕcN;p >Ð:wHîvsÿóEÙ}è"~ä›Úfv*2̺Ûç ¸ wL ô'‹.,Ö°ÖÜ{î(žñðWºÆŒÐÇ„™µ•·jç?§—ƒ”¼=wH,C‡Ù#—âd{ŽHö#mþj2¥$»%k %nŽM?w2“rü“ß]ø(àÀObòìqL÷H†ÂÌúlµeá|e.ˆÓ:h†7}ùÛ+=¤4‚Üxmÿì!‡hÇG‡>ÔmV÷JÕêluÉ'«1^±­š¹m|xˆSrW 5°dr‰­ÎP™Ò8õ’øMn";H$©£ÝÚ¦|{%÷›€~ýzŠ`û—^ÕÕM´|¢¢=;{ËÀ«;wÚ£Xczu¥L]_ôA{¨÷Éâ9|*¸óDw}î3{©<ß®ü \¤¸)$Yâ_vܽ H:`õŸÝ¼í‘{õ-µŽÚ*ùѼfTó®hDÄðenø&¡Ý^þ¥èìØ…Â–Ùô»;}‚Ö‰…4 ‚O†”UíÀ³Î˜cE@"âã‹Æ¥~N?ìáÄá¬n`­vÎæ¤"”$%вe j­3ü~«Ì*Ê¡¾AÇà “ÿ`—O«©±k·esŸk‘ÛM*ÔÑqOßêf¶BØÆ­p6ñwºøZ×\Ô»%ŠÕ\ý5>S›ø—ï銄H•{ßRŠ6¾#B­ÄOvÝÒùâù0¼”5—m°"ãã}/æô¦7Î.cV»-y à‹IËÞçë”\iy­%Ýd@Aù G>yjY…ù+~kaž²Ï.L´ ‚96äÕ&$µ|ß½Õ3è닚Ùgñ¶L03ã J³-Ä´[¹ *‘|R&|ãQ»’Ùöj†ÄfÍ‚B ͘ÊÚØ,5¼û>­Kjaòŵ†~ÝÓqOi„†Ú’áñ*aV7ü”ç…W§75WËÃw§Ÿ¥ RnHå0º°A¬SdØ@Â7Õ‚§½>î#õ;¥u†øÂ“40ÞvãŠ(ÎãÊm•rRÕÐN¤­)æ­/ŽÀs—F&xæ&ðûèYŠÃÛtkÕÉî‡Ýc¹Â&ÙLä.È›×uüx·±õâÊQn̶¡Žœ%ãâˆõÃôÓoAk_2Ðp) ~Q:îs\d›"gŸ(kið¿áîÛVM¾Ïõj}ö6Ú@3>2VŒˆcÒиïdD0à3ÞŽÞ'Í2“j‹ˆµÉо;#aÏpõJdõîëu¿%&1-k}WwÁ^á3eöXî¦ÃOº›Ì*3‰I½,BæýÕr/½EþBþ$«øæù×c÷®©±¸s±l\ù`¢¡<ñô ÍÉõEÀÉg&#MykÎ0ûâ¸Ée…)Ÿü+¸…wMùìÖ'|?D<ýö5Þ~’ëqþ›­Â¬k•oGrû–kÊôBT×ÁÏ<ööýÎãè=i‡ÞçL•»[¶]Õ‹£§Ø“}bH®Û°øJô)ˆ³ôqprfß!¥ÝOv4:åúÚË`#œY•÷B‹±{öÂJýOßf¯eluÎpÄU_ñw÷;¼žàJ#Çñ²7y¸G]É&ácK#sÔ¿ûEí§8Æs3ö•×±–~PÝL§[•“]Ç9ù°‚ %“x,QqV³¤’ÊE}í¤EäÓ4ƒ@…«k–ò{lþXõ}×Ümç>Î…•2Þ *5¤WoL’²¡èà± 2Ÿ ÿœï—é“'cræ÷~Œ«©f‘Œ±K'½jÆ5œ i·bša ²uOäyQm²Ÿ Gp5%81Úží÷“Óâ=—ºø¾Zʵ<ÞŠ›Õ'cz™§A° û|èŒë¿.½ñ€åŒØŒû½t–Ï¡Mç×ÉÙÖ;JºÒ•;Týø'‰ó¬I+‹7ñ—%Út• Ë †’Þ5_é{£ó0‰(´°Hä²D.1µ¢ž”>Ï•!è8_GmÕ›0’é[¡.رk¿æk‹©/):t]’±N )}”gL+‰_…cŒ%ã –'ªI¼½†ú?O)ûFëôL¹I¾Du¼%캀ee¬zø`P¾ÿ>–>$þ}nƒvewω,¿"¸Ÿ5Ú®÷“å&_•h ]°¾ãrTZiLi‹wÂÃÃñ§!ìµ¥•,ª¾x•*Žyr»æùHŸ‚^Î×-%q1á‘J­L62]ú˜YŸcãS¬QX÷žèp¨i ø|Æf—ZbŸ5ÙjòòÉKÍ1MŒ´Õ=]; #â"´jCW[ÍŠÊÂLwÕÂ%0-}®g…0ƒ×my¨Fê#â¤2¶ò3rúü…Oçû.ã`bHÇçWo‘²Œœ-4át¿3RXCªù±Ø](¶4hôz a3[á3«Z®4}4 DØ— |S¼oÜV—¶‰¡2\ª%º=\Ó½¾z3Ši“a":ÐP2æ bÚ\A›Nc@²¹lëd4Žé,AÈä\Ùš<º§1ÅR^«õ‹ÒýŸî¡ÊAÜӦўîçqÏ“¾÷Xu1cÒŸ•i ž%p²µËÅnEùl8Ïð¥Å…>Œ ¦¾;ŸØÀ ‹û1‹´º‰åÓJ×ÇÞS)(X7Òì‚…Ïù)¨m¼U^JyD}»>àrg>9µZaZ c8oHÜ#(Ú¨(ë«ôÛe)Ï#œÑ¬O9<Ã# ’¤þç²IµGŸ.^ŒMÕãcν¦¶õ¦žÆ êc¼È ]Ù’oäÚ>ê'Œj,x>°Žo.¥R”u8ÁurE›Dt±p.ãÑü¼½sË€ÎùDªÉ/ßi%Æûð²öb& 6ÉæäGê›G‡žÓÓøm¿1H܆ü¥ÿàBè /ûågÕLFz¢%ïðj«CÀئÎz–+|! Æ0.é¶hƒK”6£qœî “T¹ö}IßÉ ¶ýRœÝt¹ìŽ]ðͤÒð¼ßî š^ö³I<`{Ï,*øE•’㟪ÏI‡²[I_¼»®ë6Ïhøãª"Va3JW)ùò' Y â+*–ç‡7!t[v+쉘nvõ Ød¯ Jq‰–j뜤ǾádK^3m”è÷ÁH4y@Ë!Á†q¾ÏÛîrÿä&œq")~•B¦$^Záá„ZjÚTzfúϱ¦Uzìüx9CŽŠ®¬ƒwóÒ›g |†Ø4;†pÖ×ö-ªˆl¥†s¢ùДáI^ÚCGUnž&ղǢ…>GÃ_éù7¹úgjý— ©5âû‹ÄäÀC)½ Š4!“Óé¼$”n•pËF_à US”¿B^WI|K'xDm}»@w…9>ÃêàöBüC´H%†¥ÚÅÛ¤õòƒÌE‹g"+ÝjãΈA©3× ЄaÄÇ ? 7Ž 3YÖ`¦¥Ùn7-?êÆÈQwwVõë±>ÏòºÖÃR—Š%=•ޤPƒ ŸÂ'Û¬ÿÃèÿ þOØÃ¡”'‚zú™Ú»endstream endobj 231 0 obj << /Type /Font /Subtype /Type1 /Encoding 409 0 R /FirstChar 51 /LastChar 116 /Widths 410 0 R /BaseFont /RFILMN+NimbusMonL-ReguObli /FontDescriptor 229 0 R >> endobj 229 0 obj << /Ascent 625 /CapHeight 557 /Descent -147 /FontName /RFILMN+NimbusMonL-ReguObli /ItalicAngle -12 /StemV 43 /XHeight 426 /FontBBox [-61 -237 774 811] /Flags 4 /CharSet (/three/underscore/b/d/e/i/l/q/r/s/t) /FontFile 230 0 R >> endobj 410 0 obj [600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 600 0 0 600 0 600 600 0 0 0 600 0 0 600 0 0 0 0 600 600 600 600 ] endobj 190 0 obj << /Length1 1166 /Length2 5990 /Length3 544 /Length 6798 /Filter /FlateDecode >> stream xÚíyg<\kû.CtÑ ‚Aô2£·èè½3f†Q3£‡DDï%ˆ–„=D ÑK”è(!¢×H”¨GöþïwŸw¿ïùt¾ßYëÃzžûº×uß÷õ\ëÓâ`Õ7P„z@`jHŒ€ X¨‹p‡x£ aNÞÀ› ˜‡1ãûøPFÁ0¤Šæ7vöê8 €Â` X,)-&t³‹ü•è’ê£î@}†rC o Gowcäíé醀A aho”# - „ßtöŸUÊžþ(„“3ÈmbhÆÃÇÇÿwDHJJ ñÿ ªÀÐ'$ófásóðü]é†B†„¡nš†þÎÕ‡;¨B˜ßã¹1OiÈ ¢á‚HÄsÓ¨*ªìáþ›Mô[3 æx3”?蟺¹"=|‘ÿ†#Ð?F‚z{‚L/o˜¦Êÿ$ß„ˆþŽ9Á0@1°0X , „ya~ŽÎ ß%ý=a€B¿ÃHhP §‡'îà††!à°›Q ÚÁÄ ¼aAÿ;ðï;"!! áˆB`N7Çð7ûMÿs¯ã€A!ü€V`A0Xþ}ÿkess P¤›ÿßéºî0 H[MSUUÿ+KIÉã†R@HB( ,)vã”F)1‘2þK‹¿tø#ªï€øŸ>ÁSj"á@©?ǹÑñ¯‘|`(ô7Üؘøïüº„# Èý·u¬Ábà×Ü<„þ«¥þ ÿ¯Æúg 5o7·?TáþSàhààoEÜPÿ‘îàŽpóÿ//ü3Ñ ö§ûÿ<š7„£"ÒÉí_2!Ðj?TqtþÓ.© ýã;„é{ ¿¿d €˜Ð?0cg„£+†FߜŠýGIU¤£tan\适þ+ðvôF¡näùã€nÞýkGÜ4ƒùÁ‰f§<ežº¼{ÚtZ©Èè+°:$Ò)nr|íÍ"J熽"èнãZÌ(úêHòYŽŠ~¿³\…Žvx"£jœ„¯«”R³ >%U%@#ŠaG°ú¾®4É÷Èwp'CRìô›ÊþÝû¬¥Çrʃ”Fá4˜N-×7¼ôð™KóË õ6¦x¤hÏžìéi¸HãMôµ¨€]žD¤kµÖþâÒ²$®Û9¡*o¦´ŸœêR"{4®N„ywa´(–nl>s.i„ŸUöyæ‹i‰ØxÎñÌÆÔM;¯×ÆÎ6ñ¹Sà¥|,Šs&F%ÎQÒ§­¼ï­¸ÏNz|Ú:ÓM¬hbèIvðí›YSùä¤þ1s§–µHÊRµŽI[ ´&ÞŽeIÛàdÀ°l,úþĤùÐL1i¥sÞ0Qû!h®ù¾Ÿß¢|]Ÿ"¯íd†¿áQ(<Ê™2Þ«f‘ùA­o¨æ£þv9&ÇG¾âÛT¶¤‰óžU«¹q‡ß÷•ukˆè†Ü¸ˆ*gÌ*ˆP¨6,ø™ÔÌ@4>0Øh"T—¢Ü\²¬q¼¼7³ÃRÖ˜{BÈ?èc"ƒ«Y@ˆÙB)QÞ7ª'LÌøÂ'Þ…3zÆüâ©Ô4¾ÓL’R˯}øàTûƒô’ˆf˜÷TÜŸBÍš¯¨Tð¨ò³.‘Ôvwå±a¥Øe`½à˜øÈI–ÆÛiÓdëgB’œ:õe"PÎâ¨y2¯dæð7+].ä0"ÁFZ¹ì îÂ]ÎKˆ-‘ÏKˆLçY¦7ò³» Ô92{p¤IÌéù‹@U‚„?OLqÅÕè¥gبú²`QŠ0<ÑÖNåÈžËÛgr(OÉkP*Žr% #±ø¦v·!7ª7âr™û(òHתÝl†Á®É‘üÈØÍ5ímEoM\þ„£ðÇÖRA!fã­+ESwΰ]}NÌÒ×Õ«`ŽÈ_òærº ä¤jpb d0©ý‚¸@)i-âç›<‚OvC$/dž)© ~¾o$ ;xÙoz½$#>dœ£„ÓTäË BóÒ,:ÙSvÄõ˜¬ŒÐ¸øQSð6~“àíOŸÕ Z#KZU®iËZÞ”PÚʨÿ4@xÑ5fa»3¡Ö§´W 8 j¢ Ï1i% î.Á¿«à¯héï3&ùºô$IXFüØ8{.½ñ×Ág¥ìâ^Ç:E‚0cÒ®̒9pg¢A_J¿qà ™,Tcž°õÑáhAéoÅ7<Ò;¼ÍÕäDÝ\«½¡?§ž÷âÙÕA¬w1:Á²Ýœ»83Aˆå²1×o§òB”l©!NâO‚¨âõ”Ò†°»Ñ/Q m="(¿n\n¡Sî^(½Ôs”o_ Smè™Eò²îPg{jª^ª™Æ;é·)Ãnëð¸æRè¯-Ÿõ}©5FÇb#Öó šéðÞ‚Ü*ÉVCFÀ~Õg“oûŽw5VÞ)3þ²(t÷"ºF¯nF¾OÎÚŸûT,?ˆ/Ê\ áõ¶;²ƒÐÈN½ÌUã[ó];Òÿ%ÅÊ“ý¼ò½às"¦§¡”âçÈ¢;Æ]ÏrÂúúq©Ïivm±Ñz^l.Ïø  kÑ*¢Ú]k!dåY—bÂÅ4e6®v1–Ô€Ž®ylF\0|ð ¼KЏ~•DÙçéÓúK_9®3T^hÓJ‚µ]œo^uJR*m"ʬõ¾ýM‹|yS±`´t/,ƒ6—|sE°²ÎwL5h-«)CTÏš„íûUœð¯\!Õmmð(n¥ˆ«]1êsö,ïë-\C6øhûW&°KΔ#¸ÉÓÔΕwˆ«ªªd£GÎͺ|ÁÜÚä@˜ädø§ë/–o“ŽH3]_1ԱɻÐKnP~ZòFÒ>ª}kÊA{ªúFRX‡º+w}zYzþèUóë÷éUÐFrÖ³7×àh¡»Í ¸^ÜԞܶ.¨†ŠöùF·ÉõÞv¡°,.R’¾Ul¾es]î·–¶·ÛGº9C¶•\Ì}R§¤šZ!~ã“%€[±dÆïX:MSbÒ>D2™¸d9…té/P90Gôû¸ +L½5B[ªÚ£>¶¹lXÝv-dñ|P"ó‚&ŸaN¤àäEt­É†&ûÎÙMUá:o£îßu?,ú‰ÞöxWÆÕÒm¤É=à,«VZùYõ<[ ¡1êé†ÑðÞ®§2rð–8O²ãä\é¼HI‹l'£éÊ”Ì}»ÿè©F›sÈW.…°R]Ô»®Ôîãk.jÛ€²<_Ùꦓc!Ó–ôWO9Ï÷ûÊ úšÅêßEž ’À˜bùV¢V88àŒå[¾Êëf£¨OGŸeÕM·à_},7âû— ªX¥QÔ]T^ßOb^¦Ö8m´ÀßeÒ@¤Ü„¤?v_“ø©àoêåF7ÝóA7Gý.ÎÔKIªQÉŽ^n—3I|Íøm íë‹VÅ‘óº$c¤ªÝˆxàëFÆŒ"Ým³#ãX=ß7ð¢ dëæN‰'£P¹Í5n¯NbYaï%ì`äAžÛ®Á÷ê<-(G]”®¶Í«X—Þ[ gGª^YnŒ\xój'§sÆ*> ,œ©Ê— Rp.“ŽãÝ&Ò½Ó¥œ–D–ïlŠÅ§]ß±Y”#æúYé`€7È[ªtÔ2Lªse´Öwðõüç#oÝ#>k»XóÚÇ" Á)*ÊÐV•CÎÆ³Û|¬c[l ¥:¾]^׃¹¶Û±óŽCßÎf·¯E m™éjøÅ2 ž3uI °äAYÄ%ìáóå/r§d•œƒ;U¶¯·:/›Ä–À®oâV¯0?‚r ®:2%mžSqÓïk™=~WÒÊ`Fµ,j›$ORú&$#æ5ÚÞÌ0|¯êl`92T¤MÌ꺯£ü9$<âjbñVøÔA°¹Ž38Ó”ühOSF½Ø·yp,¦IÔãk¯‘˜Ùߥqež x¿ßŽ¤Ô¤¼Á^o”™°ÚË0ß^éoß)^Íiñû äg·ˆ«âÇDÀ*, > $¹Ÿž²òu°‰|@Ö0Ý%ºÅýCÒ•˜@¢ªÚÌuŒ ï<¹õì6¼r?cU ëUÙdXû«½ùºŠó,€;̤"tê-¬/-)>ïÒBÅYê$ï™Øìr«©ŒÍƒOiœdîvnØ9Ÿñ€OØX,úâmi ,”eéå‹»%d–›×·Ê M1•Šë4'è¾îR! _߆õ`ðõù½ä­¾&Y‡b÷ ÅKDz£„²4u§¿Ö Á’¤q> >‚óîù•*Ý¡ö¤lg ËNSìÒCmá/Áô÷©ˆÆÓ%ò¬ë± ’.Ì'¯€•-£K%Oõ~ö¿àís—f^é¦Aª oÁsèRqçÈJüÎÒ– ñoò‹ ¤ü$ ©N!L8-½¾õOYg> Ú4˜OZ£:):‚›<ÎN–­GC>bn<7ýîT` G«»W Y cå ¬ @0èÔ¼—!ì†qJ^ rké&p>ß}Ýo§´¸âôí?£+ƒdD`Ü}ïÔN§ Ün¯x=!¡ÄÐ>n!ý¨kbwJʸšþùþÈÕe©îZÔ#4Þ€ñ"p^¹õ¨¹CK2Éö<5êø04Öé›èSï_úÇŽ]#õ«•Ÿ¯¦ñòÇSÕ>‹å€}ôÓ‰}ˆU4¼Up¥ðÉšš] \Q  ÿ©{ï4w“ªÉÚÆn†´Ï>ÛyðWE¹ÜgÇ·Ö¡ü׳!ô[¡¼íGê<óáú™¸×†¬»„Hà.Zõ~ ]%ß—¶‚AEwÜU;5A7Ò/Ó$ð9²Ñá!PdѺ°U¾ëVÕóØ[xé±xÏŸfà‹†Ã6^Ny¬ ÒÈ&âîÕm×&”?ï³”Céé‹kÙ3¡Ë ¥–bh—7‚](éÒä”:áîSÔ¢qå@“ T:½9jáWsEfÔ¤lVì§øå#9rh!·ºX©‡K—ßÌɾðwÓúܬÞi¥zá<çá;x8Õ îP}¢ûœç¤0bWÝÒ}}ŒÞtsÆ@¸ÚFQ*9‰Ü;=—œd"{½ËØpmD¡É ÷Ö’V¥:EOLg,G.<̾™ÃÕ'o¾ŠOhÒÇk6)s»°*> –Ž›6,Ia3†½ZA¤Üsršg%géUi”–xyò>‚Í4—ÿë¼Yü7d-SÝcõ ¼9Ý–ö„Á͹fsr51ZîkSQìâ™;æòe½_z%:çŽE¤ÅdT¥é†R>–If_+æ¨d©/¼}¸±0©Y6ñóìWR¨cRiô§V:­ªO>Å=V.1ês¸úèaj]‹¨O§ü²vM÷[ÈÐläi\ó{5Ìø»83QøÑU+?æ¥Ç¹¡-!ѺðŒäõ“9j‹°ÙœZŸÖOk*n\°à/"Vy óÖÛãw?—ª;uFA 3ÀlÖ@&Ïð©2YsûË×ÈCh¤bˆw¼*\î®þºGV-ΛÔÝý4QB.ÒiIÐt}k(W®“¢ó<¢¸Çè"4Doÿª0¯g–Tz¬ý ­¼1ÕÁxÕ2"ë†&tSø4r+áÆGV5•NOý4’}ì"’óÍÙ½ñéÐëZZ¬÷Wµb*Dc= TŠ9*¢å| §¢-iPtvR´·þ£ÍL«'-1WX¼D×+ ±=…U}ÞЀ—Ðå;úæ%þ; ­1ó¿VsIv|IïTý4([¤Ô†€G»¾ Ø ‡.O’ö:Ëš¨¾¥÷Ø:VBÚp1+•ÎìIwßîþ§‘ôR‹š¬úA“ͬsh\3.é§Nˆ9(ŒíQ¦Maeaã¶ÿ"p²nŽh)Lå”È­ºb6ûǬ[MÎÓ4#åãƒLd=7º3ƒ§ÂHõca¦RSˆ2ùð¢áì'ŒÂ öd8ê–?Õ//"œuG±3ߘcóéäCô—´6eì63ÏÃ/÷çGÈÍ’ÃOGÞ¬nú´Ë.™úèI»§ygø ºñZ(ѺeŸºñÚVÕ•¢7Ér$[A8ï_~·x9é¨OÜ?Ç0V¥[ß 0[§È^“Œ³™„/Ý­ gQÅç­g3‘›¬Å_îYŽÃ¼Põ=€+qéðjüݽ–1æm}`ãgÿ%XoÍÐQÜ‚6æS99Ÿ 5æT²£¤J²“o¶…SyGR\ÑJð\ÝxÒ‰ ·%óò­§Â,©v*"F+|µËŽËá KÇW“G„ÚwWŸ£µ¢7Æ‹šâRHú9’gÓ‰º³®Ë>÷|gqkÛù˜âºýZ©'2èÛ8`&¹Ò7[Ø? ³ø¦­8YPˆˆõ{UÛ†Äö‡|ä„zÕ.3åj'&&+ôQò´0!7º]‘Ú²Z˦/_õ–"Ñóè`>Ç2â?ϨÁFÕp?ס8“°ì‘Itº—Ïy»ƒ‰Zÿ$>Ááî]‰ 3¨±ÞÎC¡p=S¡>½Û§ø¥;wt>V_r!%è•?ÿxF΢ŸÚL«ÜLÞùqù˾«žu-Ö²å4–%¹ZŠa9ÇRæ…R¿XÏ/Ê„®ÜįÌçgb?ÍqßÍ9*VnÜ[S9È­‘£b{÷­!áñþ»@F‚.¶õ¼7iIé-¦U¬)=¦×†q¶wïéGzå„=È#‹KJW‘=B}ž¸f—°ȸ¯S7ã«9žyÂÚš×Ø¡Uº‚Ëòsç0GªìcKw´M¸×së4"È3ˆ[tvð#g/_¸rVÊ\ö€x{ÿ+.ˆ‰‹©kƒS®hœè ÿÃúk,ìštO9Éý VÛ  Ã ËÁ8"Ál ±Ý@cùŽ­låkéÒOŠÛï…®¯)N¨n/rsé'¸µ)ÄQdf”ñOV¡=q`‡¦ÎŒÚë9þiVpcÁ¯Fsø·SAþ_è >Gô% ­¢<ûB^ßÎ\->HyAŠú9Ã:2Ÿ9'ÀÅ ,[xÊ{„®3%þé²FLÐf`dÇzýÊXÂÎÎq륛·dlLßkÚ)'Lqä-ç[>¿b'HǼäX„8†_ãiz‰QË :ÚóˆÄoòd‹XM¦!gùM³kÒg |ÙŒÜl\ óŠ<ÀIÙÕú ‚Ñ·áVøÄê†g_ŠÌÛ&é# e³ý?^'zç ‘ {È’ïÒd¾)!Iè¿È0¾ÒLM‰"HÜ~.ÝÔìíül8E·g½Vfg”WŠléÁ­Uš"¨iÄ;WØ¥ÜÎ¥m—‘räã4êÍoÂÜÀ¼-^\'ùà·+,eɆ`/Øñ‚ïªPβó3æõ㟵 öªÇ’߯°&jçk>£îçWï™nˆpíVåU‘0c‘`IQªÉM—Êû0]p‘ ¼Ïi3Ô¸ ´cpM·-@•*?³óJ‚žÄdÓ&Q¹¤\µîhÚ6è Z®¾ XX^k4Ç™qAГàÖîÃ.­ÐÍZ3ætI{º.x=®gWÒÙI-÷š…C.m(‡ð®dE€ ,-5¸©MÿR[¤"h-%#þµ/ ^ÏœЧ®\c ÂI‡ÇÑ“ÚÖŒxL⇻È}ˆƒ†ÏhÏ—¨#í—åÞüRJJd8T£öÊÓÔ*~%ÀÑQ¿ø…â®.Xµl-Ç|}»ÐoúÅ­L÷*²n±yêŨEpÖÎVÿ*œªb'xâàQU?dfØðYOOíÍp½­Ḭ̂è ýø²—™½ÂqJÝ y²À&‰»ýî¤_ʰÀùA«±ë ýXHðj‹)žW Ü;lÿPKYÍo,³©¢—{;òàNÚ¹A°Ë7^j°A'yrœIyB·y¶þ ‘û‘†ŽaÐ8uü 3 ‡ÝN*ü0CPyBÞUQÆ8²¥{ºŸºž©—òŒ¯bt^“Åñ:)bТ·VûV !4 Ë–l`Œ!§Èy—Óý$+ðøi0aU5˜­à‘i!Úk=> endobj 189 0 obj << /Ascent 712 /CapHeight 712 /Descent -213 /FontName /KFIEEF+NimbusSanL-Regu /ItalicAngle 0 /StemV 85 /XHeight 523 /FontBBox [-174 -285 1001 953] /Flags 4 /CharSet (/comma/period/A/D/E/G/H/I/K/M/N/P/R/T/U/Y/a/b/c/d/e/f/g/h/i/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y) /FontFile 190 0 R >> endobj 411 0 obj [278 0 278 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 667 0 0 722 667 0 778 722 278 0 667 0 833 722 0 667 0 722 0 611 722 0 0 0 667 0 0 0 0 0 0 0 556 556 500 556 556 278 556 556 222 0 500 222 833 556 556 556 556 333 500 278 556 500 722 500 500 ] endobj 171 0 obj << /Length1 1606 /Length2 13564 /Length3 532 /Length 14418 /Filter /FlateDecode >> stream xÚíwUpÛ’­Èb²ØÂ3333Ë‹¡E-f‹,Ùbfffff&K33>sgæNÜ7_3óõâuDGÔÎ̽re®¬]UäÄJªôÂ& #S ­=3@hcäì(²•£Y›>Œìðä䢦†N@­˜¡“)@ÓÔ fj `a0sssÓDAvî@s '•ºŠ&5--Ý?-…ŒÜÿÝó±Óhn  ø¸p1µÙÙ˜Ú:}@ü·7ªššœ,Lf@kS€¨¢ÒWiI•¤‚:@ÒÔÖÔÁРäld 4ÈMmM©f €õ?c­ ð¯Ò>°„†G;ScàÇ6S7cS»¿\t;S £ãÇ5è0w0´uúè´5¶v6ù‹À‡Ý ô7!;ÐG„͇ïL äèähì´s|dU“øO' C§¿r;?ÜÙG¤ ÈØù¯’þö}À|x ¶Ž'S7§¿r™L€ŽvÖ†î¹?Àì€ÓpvÚšÿ“ÀÁÔÜÐÁÄÚÔÑñæû¯îü³NÀªÞÐÎÎÚýïÝ ¿£þƒÐÉÑÔÚŒž™å#§±ÓGns -<ã_ƒ"mk03ýÃnâl÷ï>S‡¿Dõ×ÌP04ÙZ»LLÍà@N)Tÿ=•þ÷Dþ_øEàÿyÿgâþ«Fÿé&þŸÞÏÿ -álm­`hó1ÿ8`'  øëŒù¿b m€ÖîÿEô¿jšþƒá"ídøÑa[ó)˜˜þa:JÝLM”€NÆ3CëýmW·51u°Úš~hùwôÌLLÿâS³[ÙþÕtö¸LmMþ•ù‡<óf”—•U£ý×Óôï(¥ÕÔÜí>ˆý[ò “ÿXü…!"rxÒ³±èY8¹\Ì.Nfïÿ"Ûß0Ìÿ\Ë:9Ý:%31ÿ]ø¿ýÿ¹Òûq[cÉ_S¢êdhkò1XÿaøËmììàð¡çß÷úGÁÿ¾þ{ÄMMÝLá—@ƼA–I©ÉNUØ™cb:=]ÌÁv…µjy9~ NߤÐMîRƒ—Ê`†º ž·f÷ù#»×šÝ¡.,kÊÎÓ³l|oRêîœÏë­œ´»Œß ‘’5xžÏÉm@is0iìþSVùVðM0ÑÊê{~OíGê’ã‡Avg‡ìcœXó³ µ ­*÷è˜"öàþ޲oxp ¿óòS÷mÆO8r^($Š?û þ +ê¿[V¢ÙBÕ@¤´KXdzwV$¸|ïþ]$ßfá8T©ÑïÌA`íça ¯iq‡vêTÖò/3Fʨ—.d¨îÝÉÜe Eèìi˜U^Nó‡ß£ˆÍ>'Ïàx­_vjRàÍ2¸¿´Iª»öߊ·íFÞŠªøkÒìÕòªøtì=Í ªTìðwÎh ºè kéšžA*haþv£è+xV@%¢žq´Ñ-)nI ¢³ÏÀóÚfªWr˜ó­îñQÎ]ü |[©c®>cmÖäaøbØ8Ð’Gä%°óö†ð·¦F’'ïEžß jì¸ÙÉØɪ4Úè/ؽx§*_2ãOkm¤!~”áÇ?2Ôùá,ãK2¾ì2Ùœ¿ŠÕ|ÞºGç-F““Ýo+*‹VÎ0M¦ÝÔðoŒQýݰ`_¹D4'ê‡6Ñ-/ÜÙËÕùÎtÇæû.Òªê“ööD¿àÞr±N™ "«š#ù$Û.x½™%lûe)§¤¹ HcØ )Ÿ„ƒÑà f\BÐL‡®ãZfº¿'ËýÔ·ú¦ÄnùK}¸cíÏùy! þó!Me™Ž+a\›»)J‘Ñÿ| n½U–@íœÍì½D«ðØ^³ÐÄÔÂʆ)ïFa‡oø’å j`ªÉÓ`Íæ­ø³X;dƈ©È°Áo\».»‘mv›‘}cÂÄ<ê; ÇQ5.,šë<ô•§ØßUÚñ,r+­ä-ÊÛý1Ïî¾ÐX]‘¼Õü„fÈ—bð”lPþ'4Ú®-“Fâ6"$ØÍŽP¾ƒiïÒq½â^÷ÈÀyžÛæyjcĽQ*~(ÂA¹òù¶”.\ûrÔ¦ÂcŸ Ž wˆ±ÏÈenßry§m,D.;šªåkN’lËË÷WúD/˜jírw·ø7œ\%|ÖJŒëé;ž%‹@òƒñÉ.ÎoŒœ@ÆW€p«#M—5‘gõ"ß²¦ÔéWì¶îs=ÇBìÊr-°Š1ÉÉ1Ch‹w,…ç«§Z,)SæŒHÞ*ƒ+íòô^a /’[ç¶UÔ5-o,×WèCgbζ£~_¯‚Ç ]iÏDft¢2r0«p7•ê—OÒ¬ŠFÂö ÉÔM †iÒCMžþ_FM(i"²²Øùf¸‹›Tºìv„´(ÆvÛxWiˆ™¤P,*à1W½ 4çv®MO:hVM¾×ÊÚ«—á”ÛŒ]Ý›Ï;XO„“ñ©þŸ5Ï:­óÀ!̾Ó]g¶jÜ{˜Ä±µÙ§àj0bøo9¦#b iW<TEâX:ºˆ¼Ë䟠[1e5èš„VÖð€­E>k)³¤®—-ƒWÐ*H 4üšcÜ•N³¼&ÈÆºÓO{j4s¤y] I¿pnÔæ+Gv.>E]ÚÖÁ‡S•{OJÝS÷Ù+æð}i ‘hŽ‹ùŒo©§Ð Nˆž2ÒW¹4•ê^ O’¬†¨ cœÔU¥] ÛM©±$Q×oc#„Å@¡n³n žÙ^áp³y}èüËJªgŽbŸŸëáä[ѼĚߡY„—»ò>ƒ»^ U äU»Å”< ‡D 5𔀷aHÁ'ÄÚÛªÔA«ç-j tŠŸ'WØœ߫ߎú½X\äU yu—¦Ýž?ª4H!n•o^²Äñœ©?F´ö®1¸,ìhWUèožLuuAÛÁðùöÄc=ÇXMZ—0w7-ÿzKwÆó”a ^ ´ª) ì` ›>'ske¿áù¾¨Û¡_8ª­ª«£YªÅi`°§n¯jqÓ“ÿ¥VNđмž[™šô¶ú²Ä™ÎÝÃJìç1•ŽªÆ§ã.È៤)‚7›s© ms\ö0†*ÊõN­²\«©?Øž˜KxÚØ ÉmëLX'Y:¡1¯yïHñS*Cï/G1¡ÀøûJ‚Éæ^ÛVgùð0¨±ãEia´î•Hµý°½¼¥èM{ò#çɩʂ&›ñ^¹H£Ì>áH~Ê«Çeém~îz¢N#¢mÜýù)då¢9ôž¹Ë"ÐÍm¶ýè‚Ó;Ëé¾"Ä5ùá-„Ôƒ/µ NÇ„PTÛíK‚¶u22„ãÆªù`á©× g´¸\èò¤_Ë»ŸQ’_Å«ŽóÃÎ@³bÂÚ°áMJn7àØ·Áó‹W/¡ÒÏË-¬u–³[³cN¼çåþF T´ìÙL×5.Ð[ÊÛîVI%¤¼Ò´/ uçUÑíp|Æ ø¸ž#·Kˆô ÷C~ñâ!’zã/ óT7! œ }#&åzH‡YÎç~«N°è¼4¾Q8ÁVuvyEZe—9ñýÀóKÿÀ'&‰mñ{Ò&¯^¬ÉÃåKä0WJ~¹GEQF ²™µ8X5÷]ÔÁŽHjÕó²¬ ¶ôöæ‹ÌsSªðþ2»G½ôü»h⣜²RM·›‚óϨÖ2Œ bzb]ñNÅVOkí`›y#Ñ ±†Øä œe¬\äAx†»ñ§­ÒäÒ‚Ÿå‡°I‹7á§Ø«‡“jèÚnâ¡•«ÐøC_*©Á©„öËèàÂN(²¼]>G]턞¼JðéüOÝ¡£ggm8«%ðFeê9`F±%Kšiu¡*ûW`›m»Êí.¶mãã#ñ–òrqÕóH<8)°4íÃ9`©C•ç™zÔBè½Ù¬o±]kÒÝîg#–œ Â“~á§kŸäoŠVîöÙ»”Ñ<Y¡k0¨–&VX)`$ŽÑÜ®f”F,Ëwu®X僯…BPU5±W?WecEüJ¾ŽÄf³£$MOîÒÓ¤#ÊÅAÝâŠ{2ë¿qŒkæE—±°¦¤/L¶ê7 ¶¶ÑºÄfVå!¯ËðH t”T?ÏoÕ0âòÓ5C°Y×úæ˜-ÎEï·Ý´)oL(z 8yFÑ·¯û/ž4õTùGax•U)ë!ô4®˜„.£WÞŠ<Î8;G‡pRÔ4yYaäèÍÛVï,Ö½…æõeàÜ–÷KËN—ü ±“w Ä·RP™#YèüKô†=MÀ’i{™ó¾¤$ùlaT¼Xoe/ïøÚür¬Šê…Îíë\~ª€¡ø¢Y> „ÄgiÇKv— ¼93RÍ¥ÖMP~â¹ÞB%«>˜ç}'§VúMè²íbƒÅOÔ˜Ž€SÛ{âóÆWUgÞŠKÃ!ì@L—˜iÒ„rv_ÄÖT8êÍJ]Óm'SH”(°ìþØð·mþ“‘Iú² ÎÅ)\óÃTþÛ¯/^réR”a{ínLÝj_ Ýþl\ÓË n¯rÆ™ååO&mœq£º.$²WîDò¬­%ʪÛ4¹é·¦FT „¼dd9ˆEoQ‡å(LÜ´.EÖ¹PZŸ‡çÈ$ëÒE¯‹þ Ÿzì¸/‚¥çm%ÂôLbÔ˜V6çÂcfH›î+©¶Oí£‰±âýAÿaØ’›Š¤áµóGŒwdh‰Ûk««¿¯‚o¸Ï8lOtí²¼á~lîkÃ;ÕówfÎLÜKþü¾–Å]·¼Ñkmu¿à Jql›Šg¨…ˆp”ðû™AFKž~¦Ë±æi‡Úc‰»§äŒ@ }ü+L§¼ûëÒšÈB:ìÒ8š•¼õ:mö¹HÆ ^ÁWA…Àü“¤‘z0Hkr¡GÏê9n¼ÒÔ Gó½ YŠä|vhceš†vË?¼ÒØÂ)Y‘j‡ÎWÆ~K\# ~ñ±ÖANÛF Lq$Æv€2.9‰oಠäϜԜ#–ñå;eÞ“lŠïNðÑHóýÈN:ÊÓW“é-í9.;LjFl×õ_¸VešÌ8º*z¢1«³Á6ãðT}’ãhù »P£¯ÆcK6oØËúö^^ñÒ¤<ê 17Ï?¿uÝœÇA-Öä4Kv×ý¦Øf8†1`"Ì¢]‘³a*ØÐ|îqzK9ÓSs]|• ˆƼŠP_’µíƒúemnß7ãÆ ê>¼äuÉàœî7%&.T=ìy‚W†[—Àm"3”¼ï‹«€Äœ]©«ZOÛ[3™bÊUÄ\gš®yÅh”ù±ÿIˆ7p/)¬y@¿×(CÓšøä3WËu,ô~»æ«,›µ¾úLËÚô)+òÞŒ½\£ÅJ'Z7ÿÌRÑʃIlÂu˹¯d0úÎÂ;Ï/>C1P \(2>ú‘È’†ä'0Br;¤åe¯"õÌ×´qè&[C‹ ÿì‹MúH¾Ÿ%'÷é–´¶opJ{öÎCGJA;oSÆÞî/?Ý{1ƒKé°oP2ŸXú\á´Ä'TüUØ ÓÏ*ap`»«4Èž ò·éb}µoj4ó­•¥f|™­nÚöS á¾®=V5÷F”Y¯3K襢@þæº låü_̯~íÒ”ntd§ØÏ ºqºüJJn¦ŽÊ¿¢Â~2=LJ²˜¹Ëù}3+Zª¾€ä+HîiÔQs¶úê)ÐqéëÒ®D¹5øUàÖ4<-; iþrOˆS;­DE‹Ô³áŽ#³8=~œ%D¨zaÅb%E¥44FøÖ¸}¨2¢zš(¯<? ©w-%ﶆ„3Jå™j´xϯ SEg ‹s©0ÇõâEG“cwÍûÂMÊq´‰WèUàå÷p)Ô¬¥ÀUÃÁô¬ñÛ¬ñéK¡ج£†zíÌnü>H0ðúN‘H1«tkˆØhCvÜà0p«ØŽ ƒž ‰ÆÛa•bÉïÏgl–šnI¸\‹pv´e‹]r-T‡äÅ¿òÎòìI:ü3¬(KJEµ~Šœ4{Iˆ¦\ VÆÒIE\}Oû=gø=¾8ôüM|@úFÜ/HÁ Í5vMþ ò«N§f§•äµaœHœ`¡uÓ;sçð¨Kqt,=Qò¼¸ f`ýîæc¹k›®õóìÛŒEüȆ«âÝbÄç=üñµ6Í®ê)PJõó‘m‰í^Þ€ŠåîµÍÉëH¢m‚Ï)ÝV7P€q檸zc¡U{—`×H£'‡?¿dÈÛAE;™O ¦»ðº‡Ø—êâ=ÛiUdÝk¼o©p˜4ºÙ¿TdÍ|4GÃÉuð€ŒØìí›{ß3.t}oÿ¹D ó™0¥[†¨Ÿõü¶Eßi‡l· *_úX“¶Jö6÷P÷ä(Èêf¸ðæ`¥ù÷èQ/p‘ÐE̳‹¬¾ƒÚ«_¬!šRÑ3¨¯pC((hùþ6ÍQ2é¯Rš­XüÖVÅÐ^6¼°ð{oŠgË 8¡Å¶Þ#o) Y ðË'Ê JÌ‘Zh®Ä¯‹¢Q$7:Ót´ê">·×»\õ]´7§3?ºå­Ü ¡\ùÒFw9ð”×'6ئ`3î}>ÿÇSŠþ4‹DqW~w6Ò\=´?°×õtÝuª ŸŽ/¥lü*»ý«YIjê*5S°ÆÌ—¯P©‘CCò“3 ·˜ÜtÚc×öPWmF®a§ùW”óö_²f‰¢5*å]ö{b?_YG{d˜¡M>å/òù0º¿a‘(ww2Õ•Ø[³ùQÔ%®àc&70ÚÀÔÈB (k ÷Àܬ7Î’JÀ>óaŒZó™.÷U™#/eÞö$³´tÝtÉj÷#2ÊõH{\·â£–üÔ9´tßžˆî¢<ë‹Õ5ŸÆ½aŸç„ÇÒAL¦<Ãx/õ>ù!C}4 ª0ү̤»[⸺’…eÿš>PMÒbÅ|OVÿÆf,«rÑÔ$p®;¢\c§¯x -ä1µž½é[±ŸYS¨)}]¥¢pÅÀz”u›G¼%à„£ /0p=%—2±Ã!0JØ>ÝìÈ-ªAzçÞÇò9ÝÜ÷÷§ó?ÆÓr’º0Öf•ú·ð‡NÄ‹D¾È¹ZuÍeß—v¥NÍg5ÞVãt&f,'_àí¾M¨l`˜…#=© Dü½»¡’ÄÁ]XÞ•º(¾åàOMª/` _IEÒ2P¤ß`Î#ánÙÌþ•íO˜6C^†6GÏg­Ï í5טI&ZëÒÖ'y{mPiäI :mŸ'ðº @ƒr°Ã5;8ʦglB¥€ÁÌÛÁøNsâÌNRR“MLÂ)ôÄt S|téŒ"¿Žå‰Þ{¬Ì…m6ÉÅÐò@v‹z|³Ç#ÚÞWg~?McÔÓú ë¥Ïà,jÉHÉ(Ê­×D¡ÇnîÓ÷6:"5›ß CÖ¶Nï,ÎùI…ò+àX{³òóo)†Šl7‰|ÊMÐÜœy]¹a²“ï}%,räM_ µ·&·ÃÌ"£À†ÖïñÞ}¯°ms§"qO´ëôªð}ºþV6AeêOÃ¥o葃;hn¯•oó_·hŠÚùÔ^»¡‰šqø•Ì:Mý¨ ¿Ò Ò™Úx Bøܲ;ñþ€N˜B"v€ºúa•ß÷…ÙƒPƒIÉÙN¾oÉLA£B~ÂŽÝM%AâY?ðy—Œ<ËYþí¯`7Æ!i©z g Ã…û> 4†¬W2½º»ù,í.;Ö­Þu¢Îø«ÜB¡m‚Ä‚Wõú–r ™uQò2u,ÍËç7¾×(ÂÍœ#Ç1€xâø­ßÇ)…—'~uꂈ«OãV’øÍHñÚTcïmøTò vOFêí®.&Þûúà £ªhOÅ-Bœ<$Í­å¹[A*9ľ¶[(o9%%èÉÏ~òƒm{VÆ)w\Úð˜ú|JõßйíP=@c;&R 4ïLTÖCð‡¶væ®Sµ< ¡çj˜¯}‚’tjâÈÜt½Ú›ã’MØZÚ¬1¬ûTòÿ w¥*;õ¥”‹À&r869GÔá—cóØÃºð41ÔS„™˜0ʧ°PI!^;t9ß×ï›Ð7~ÕpŸK{P'mîU楇]~@ùˆ!RœjIsÒÇXÄ.ÿ`bRAr‹~RŸevÖr¹“Þi0¡$1d]¬´ì4lú$Æ|¿ Hn·ÅÈbú›,—=Txƾ† ƒ­Þ*j»›W¡ þ l/5̸ëò -$ÎÌäëB; .=…J,¿"³•ûUŠÓ„S¤OÀZ<צÔÄ4ªè’Åz_òÄ6ÁTQ·ç•ÑÖH’Z ’ ä¹Ú\6A¢±˜é‚àíYr޳Ϭñ;Ä !Ö.5NPcj2ª°ÆÖ D¹í m.HQº±Zš»õÞ¶[ÍÀãÁ´èel¹‚LË༸’âèO,ì(o®6 rcô>2áA:Rå•Ïò@ì[·‹Cž»Ki´?58TõkŸ(%Äæì‡¸Y“úB0ø¤"e!¦ŸÏ´/» g,´ÎÆ%ë Dצ–|Å h54%z ˱Ž"ýS_ß&qx ç/)–Y0êá`Zàh>_†â‹øŠÝ†ÂîîWUÉU[}aE}>ýàô¨Æð籈w92ʉ‡¿=Ê,ixg¿•Ý °¨ŠÓlfæÝñ=uSºØ«Ç¨{U¿ @úÎF»Ò^O&uÒ_«ŽVwÎàá“ÿѯÏî­>N_ð"+¼„™_AnPEÄ@Ù~|Y,¸QSjÁ4²É?¡ÔPÏr1·Ù¢ÉŽo0ÅêÞ–À>[‘Á Š/«#f !ßxa»ìù3-¸ë‚q>Òl¼wˆr˜”šÉÐöíþW¤ášY4z€äsÛ`Çû|˜0¼³{;Ãz´ßÎâr¾ÿïäëŲŸØ4!-­et’öè&*LJåÝVÁÀéNÍÂ'Ì8SwY³M›?»éºWBíÛA+0=Åýv+㉛®Áÿ¦& Íd,aÛ•'sÁp¿{Ñ¡ ÷õ¢hàUàN·ÍêœX¯¾ùœs#zÒ¼T )é°çZ ÙIA!ËA!D «—tzti>µ$¦&j$ †.ÔJ¾]„ƒF7¹â^ž&§x“”_~žuRÙÛ›!$DCÀ£­- u­l‰ÚKÆ•-‘Ž„cÃ,´ï¤ƒÚZ9ꪓ­uV>—Õ [Øä÷(¹0$1¨7°›'„)ýžoî!®ª^uÍéò5(è^þ¹°­ -†» øã·aÅY4¢L*?‚/`¸Ç0w>XIدŸåã<ðó«Ä)1œÀN³ ‡ŸŽŽ@ób\|±Ðpp.MûòðÃôDÃW9“÷6#Ùnlg\C«£„´ÜûÐÍ!ħޕ»êæýiD´9qæiQP]ƒ•#-:¶Â¤_ Æo†î¸}2S“s56‹ZEµÇmwAë{å«èxbÔ>÷i}¥ÅG¸\õÁÂe7?0ÅêøbÜ`‡Ëý ÕgØŸŽ‰,ûG¶WÕS†Ý¡;«Ç tV€;˜KìõóIDg‘ÐQQ}ò=“9¤·³e]â÷–ð‡®‚ýÒ¢tá?ck¬}¬‹MàýÐ\ÚÙ I¿ŸìwêbÎL÷zÏ„<%l/ØBù>ó1xD^”¦¥²ïã!üÉ-ü$},í:þÝVýòS‘—*sBÔžÝ~ Ï'RûÙã§…ª•T¢ô`) g\á³16T°8`& ‘N“CTÿ²‚Ú …ayº“ñÆa{Õà[Ž*Œñ“p„gÊkàQ¡÷ÚÔwæû”‘¹¥ÏЩrI¨í×o1mÖÔXíø þ¢»®NgD´³µßÉ¡~¦e!½®d‰/ML›F³ºišÂ¶a?sFø‚áˆÎœ«Gš¡ ˜¨×ˆ5w¦ ! Ad ã½/ÿŒZ@æ¹op'ñçî´).”–êU’ǃ&Ý]Y¼?Ë0ã?›Ÿˆs”¥Qâ!;äJmkû±zRM·pÏ5î ;u´²:·¡öÌ“Ÿ®:_¹3/ÆÁþ \2KSz úZ™Eí‰'òBöƒ"È´‹OÂÍ- Ô®÷¶Nñ*+ééÐ)ƒ­ú%± Ç¢v”DÖ…˜AޏH1ôfµ×cÓjßN#íQftÕ«r•œ-ûlÏ=Ò*éysÏÑ@ž¸ˆZàÜöÙ¶ÿ-{û$’¨€ð|†òU)©®aKMcu.‘ª”SŠAe¾³ei¼‡¼B]Œ0Z½×Æçfù'jb%•c³mú¹@ÅÀ|s–ø#’{Y¬r,ÀÒ$KÓ£`j{˜‘y+‰ÈþmÙ˜W¿“qý£p–FÜ4[¡.aƒŸdCV»éOÕ3Ñ¢· 1r ß1ô^Ô7ÊË’úc«V­ËYî~‡©æQƒ{l½m<äY*8çß®œƒ/‚# ;ÈR_øÕYêàO¼Üúùòá\)Y-ÛVbA¸iCþ¿ßdž¾®FŽkÜFè (&~ –6¤Faêjƒ^Îmîsá5P1ÿ®u9âÄâ[ x’³Y²Œý$œ`´¬­™Ò¡a摊ã<„óËqgo¹„÷È?ZÇ¿ßzþ“îâ- €ôK¾|!—~ʃíÝö-1^éd¶Wqß•áïQ|Y…3µâiùaxîÚí®ò`sÈß´ÅØÛTòjwh]ôsËVÀ¶v&aÛḜ¾ImLƒw;%é͸(Õ1Æ&É”(•ˆÌo«âßÕ0ãÊswC~\»kÂx6wN“uòº¤ÉÄLCކj Ÿìm÷v@öòÕËkXÊ™ðCnü~¤ã)÷ÅLë±Î|iê6U'îã cŒ‹ttñ4¾¨É#ã žâS0 UAÓwõÝ¢Hª×ªÝ™®ÄXŽS îñ`½%ÉÏ¿ß>ðÏ¢®¹[|’¯viýNGíôËuUv”Y@7Ô¼¯Ýöß_ò&¼qzÍ~?²_„© ï‰è)xà<>¡£éE@zMëÈëa4Þ Ú­ÝIôΆà/¥b‚ëM™çÊ/WÜuQ ‚Bb³¬Ynhk;ó¢Ž]ˆxN³_¢ê[”hR§l(‹¬",œ¶™kE8Ál9¾W·7Gç Og‡´…À59ÊÀ¤¥Ý;æÜ¼4Ä¥«ªô/+™'”‡‘ŒÝh¨j‡Ž˜H¢ŒyVFK(‘öÃüýƶߎ3`ÿT uš?–Ñ×6-4“±Ðµ,L¹Pÿ`Êž6O±áÙa4 8×b`ùç´dõ'”a)©^dæëð)è*î;ކù&ò¤‡EßN¶h«Cä”}L[*zƒ¾|•{j«Öƒä)˜ ‡kg¹`´Íœç[æ—»Û”hÏÓ;‡Û§Ëâoš¡éw ÂMõ™h*…ŽùV™zO|¢#Ë`7ph^¥¹÷Æ`–JŒ]¾o»fQ‡rbü$× cÇ6ÚAãE»s¶:y ý‡ˆIDƒå²GœO'Y-sY*¨5©aæÄç3ˆ‡[)½hÅ)Bu6pd?b޳ƒú„æ>sÁÒ{„gñjêÔ2@Å´2Ó[® Z3 pqÈTe•ËÔñªÞ¥æ"¶8æœLù²…-ÎøéAOùnôp^f¼›A¥:Cäsd`f’{æX÷Ä{Œ4ÓÌ<´Tѽ¥üíyùÍÒW‘¯÷DªÁð]¿œKŒ&%®‘GÂW˜©‘¥´7ÒFcÞžQkP—yžµ‚¥íILÎî—‰ô%â~$‰½ÞÅEÔÞÌ@&^/„RÞI&ÊáØbYvˆ{¹Ax«!ÔJtN‘,:Öƒü'!^ ö©iÈ¥Ã@P*¦Ø2£˜ºÛÞwâvë_ž°K×PN%1‚å9V‘Õ Zõ¹\a·tƒ†Pœi,h±Nü¥³– ýõ1 ê¿ì¨u{V­¤Ø¯_Ü& ‚nºE0µ5«Fâ üÒIuëÛ¼§n8/1ò­Ía«|éœh Á3L{‹íh}¬ˆº§±~³ÖÖ¥©M¯gf-–Ócåg¤[µµ9Î@¹O—Èž¼äs’ž~dhct÷òßòKD%ó”¿ ¥ÏXÏpq{GY5”$JE÷”àïµBî•MIߺa(¿ƒÝ—• «½:®nc¸ÚïàϤ¬e›Â5òÙΠvêM*Ú6F׆cWõìÊ‘ ºh3’¤ÄSÊ S™•Ky´ÂºçÕ{¶¼,K¬œÊ“¹&6L¼Bpû(¯~Êò}qÙk’©èE‚V‰ YZxÝ«Þ.vßèÏr8Ø$"秼Üêû‡õÓùÊÛ£……|¶ þ x XDˆ‚0)Ò‚lUùÊcõ‡‡iö$ƒ-ž&§Ö×Kr±´âÕp$g‚–¿ð]="ÿ›Öm§üë· 3¾¼!¡O­‚ŽF„Î]N/äA¦ù8J‡VxãºM¦^?rb+YÃϽNÖŽ«º!ZjJJo7%Hë%½'yH$Œÿì^¶zë¨Ôe¯T·:ÀÎÏlûRçw»¤ ƒfƒZ¦UKyÄ+~é«ù¶.l”ž•þcr¥¢¯9>tº¶¬¦eÙAÊ„°HÒJMÔ~$—~¾;—gSþ¤Ë/ø}v§p•nq½ö@½ ÌÃ6L]t¡“šO¸ÔƒK?)ˆÕÓ;Sè°=Oc€ëÒ»ØI¡ÄߨûÄ a¬º-ΚçjÙ8yzð‚Þfr÷êb2ðCßôã“SLJò]I·)3IãÅâÛ†f¼Š3( AjL oSX>½•j·¸§¬ aój2”ƒÜˆî¶ûÞT® ÒˆGˆtr|§»¸Þ¶îþ7S{ŸMI[2J²)ÍŠ=$Aè³ìŒõi™}oL08õ«y'ßCK²ºamѯ¨{7‹˜M9¡³­$* í>¡‡ròÊ>ÞJDæp «3Ñ‚JAéU1úòeÐð{¨äkù@ÍY+1gf|k•–Dc'7îૃðæ°êýï»ð‹Q*]Ä?f+åc|BËÁ0»‚Êô^Þ”é͵‘¼%7Ÿ={Ù~8+ô™£´g¢È~ÍÖá”À;H¡õ, p4Û®šÓÀÜö 奈hoÙi5gc3d|Cbv\ãÞÖ¾äwº:¸A yÌe!燥#I¢÷¨}^j]*5!ùé ŸõM·9#áàåW*M,E€Ÿ€$ƒä–ŽîE]йJhjög¡rÿ|¥²1 MzÚ[¹â<¦m–O‘2)›ì³E)E«‘!Þˆ°®öRTç…fÍ[ö„ 3F ·Xs휇zתP3ökæ°`AÙ1oM7XgñrX©Cm½£kÐEÔJ7‹±ú[Ôz3ÕO1£BϘéÖ~´²í *q$ð^z ¬¥H•sï³)ÿ(ýÓ¨!ÃçÕDHñð ¤L¦C ¯V<äµj¢"ªÉF[0ÿ240·‡EꥣŸvC´ß«iOÜÅ*°PÁ¬Ê¾ù„óÄT£ÔˆÀM™DyòÌ‹«RËq  e/Ž:ò<Åmž‡>mˆWÞôµÚ”z‡©ƒ3Ì8Býc¢—ŽYר¶1ÞüˆSl@Й±KÄÛMX«XnÖQ—w†2å;kґܬ­9šËó ô ‹Ö(oT¶ 3 䈬n?.ÞV̾Œ247’úÜ6%‡`ÔíÄbÙ;5Jm뙸ÂಠìÄPn‘¥¬§ƒï3ˆG´Øšâ7¦g\PyO ëiœ7MGZSÒGlàÙ§E׬Mܲd¡ÌY§4Xœ¾ú÷˜kD½{¿œ½ sX&ë€ä"ž$)üØ·¥´#ߥÌQÃÈÖñ4c_ UK4¸gp ¬ÝhH[ÕWh”c úV1˜ô¦Wó)üvFÕÝã gXFg½NO9Üå÷ ‹<÷„Ù]857¼èßsÆyUØ "Š^uÓ ± à6wÆ0p|Ÿ‰(ä9 k¾ZmÑB<]VŒH2cÚú¿,sõ6j¨¾ÿálªîQó ×ÓRˆcqºúúzkZ;ed¼µS9__ú fÆ Q~äŠÂtµe¿õv“a׿á6¼„¶ùJä­åsŽ–fÁÓ'±+Y ߨΉö³{ÃßÒcÏýºôËžLKçòbÁ¦Í*àNÉí—Dæçî4äX¿ÊTd!¸w'Á“Û¥Î¼éŒ Ñˆ×}{öÊ ”eAx‰µJorSÛn1â¯*¨Ï’0å)8WÕ¢Þå!¿ÐzØUz;‚¾ èKÆVÅ·~¿Ï;€£År̽=–äöö ­Â›D{³*ªqòõªÿT•wØk®TiuoBûiÐ Z,ZsMÉÑA› ˆÿ«HÊsñ%­j賺Bᆫº¡–ÊWïªüdÕá×_ÄjÕÈBÖ›ú¡!%âOUн äU 2%òñ|y›§G`yÅ}ÝÐ@×Á>]榱½ÄF›Ähz6þ>àÕÊypubê·šnxêêa!‹i!?úií®a޹N¯µ2vE_¢öR¾O†<' î—– ¤„Ÿ=Ç6ß–¿GoØ5Ã|+ó¾c¯ù˜úwãÒùøäï^N;¡õ2qGQåµ1„½È>×>™÷NvÏÃBS?sO?&·3ü{p9Å:uW8óW é/÷7¼¨Kðä³u-[ás4¨w¿£Ù!‘Z*jî¢^é'õÀœW†¬öË9¤-¤µRºÇŽ€~Ú;GEõ‚§Äç™\ä–kh˜I‰ì«Õ"7ÛÍþS&Ñx›„°Ä\ýÝ)Ê<¯ÈÝ7ʉÆÊEØùã9þÍ/ƒÁþÎ{œjŽª·ròÁ¥ïžá¹ßA5’‡î :Ì…v¿{œ)ÂÍ `°‚~ûÈÈC\³k}ÑB”ÄqÄ*1áÃÜýÜ ¿¾Wß9ª1æuWWÑÈ !atÊä^9p ï"H¿gen5Àx>ÌÅPÃÉJ´‡ðÖÄh+v>Y:rß•MÿUùæz‡¨<—îêK¿±lÌ©Vx±¿(Š/&rûf©ÈP~>jºó\ B(J³ ÅF˜•zGI¸P®í0i»\¥‚+ð@ Œ¼uè±,ÀÖ,XÖfÉ$Ók7Ù‰Œ,µõ޹tÛøÞ ñØÍl”Ãæt·%Ëä±$+¯½w°Ìó,©’¬N˜¶ ¦ø”ÙzF˜KïC½„éŠsö.”Hhcºi¨H.(+GrѬ}ì]´âôt¦1мËVÎh´ÝÜ«²ÌÔ‚>;3;+B%B:ÛD}¾½Kef"Wа…·X>CaçÚŒ))ýeàÔ"ò ©ð+,0Jºü˜6Îb)˜‘¶aÎûÎ SȲË´ï>j>.ôj]ÈÔ²dŒ×G©Ê<ý¡¶åï¡e(ʘbg$û&eA¾ÁÊe Í<±bþú0Lþœ]í’5{±Ñ袛³0ƒ…eÙ«Ÿ§–3Ưª!Í5‘¦)¸©ž,/ë4ÖzúÊÇÚCªðǤ쳕!Ür˜Øû]*˜D·)’c¬`¾€ó”Š\6{'f²œ™4êée^.þºGùµaÈã Ub÷è!S±ìÕØŒ/n@Ѿà*7ž$8èÏ•ë›s‹5?9ß6÷Kê LÉBµ;BPÿ×^¬‡ççƒÂ‘Ÿ¤UÍ 05¡Îâ‹2´ˆ *:À…ý3‹¹±4ÈêU9 ×÷ áîªçâ]pù› DŸOpÙjpMâìSµÓL£¢» ¥H~Û£—­×?Y>íÈpÜqÅO0?I‘.Ñá®%1¡~Fùl~yÙžu´º1ö'‡ö”î䇒éUí£ÿïê°tŠà°_$Ÿk¼¯ ±YxÔ‡z>mù÷[mþ‘ÑæÁŪÁðoþxLnb7ùÉ}aB‘Ô¯¦=‘È™,å/ƒJŒ‰ÍJN9ãJs›o$#|¾8TgߨEMoD¢ö‹È“•®S7€Å·\þž†y£³íQxrp86#Am’KÞa¢hj`Tfèa|v›®ˆ„Kš“Öo‘& TbŠÄ´]Ò$G^ãwE÷ÅшH§<½e†æ·óH– É§Po‘d"q ••sÛ~Í¡†Ôcx-ŸÞ.±Êü?{µÌPñ¬ù‹bfÌAuŸÜ™»•Üõ«áÑá¹%OzÑÝܼyOôOÀqE‘ïY_ÛŠûù%b¼«ðk¨ÃšÆ3ãø « øqÒÏ8æÑHo÷Pó"n×Ó–VÀÒ ç¦Ý–€¦Ygdbç{й߷ÝY …© æ“q eùaë…ÌwA3BÀÛèךÁ‡‰¥ãú¸è‡¹ÒËxÔˆ>w”­Õò5Þœ¯‰.4¥Õ—P3Ã롦:Uf¨CLUeÈW*L#¯!Ö,bñã«ÈmIx†/ŠUV@y8Ô½Z£© §Ê»â̈m¤§ü÷vâ´Bûœ–"”òª»†ß'9y9}([“™hx[3°•ŒkGõžñE*u+1ÿÁûY´”ú&â绣-ÐTuÞt6wõ¯¡€–ô ò†î‘ÂÑà蘂V' £f3p’„b2õÁþú­y‹Ä2ïP¡@”kyäjЇ«o²ó@—“ *Fž €Dȧ1$CŒ´6AíOG\é%”3F ƸXÅÙæ ¶?^±»Ðùµ¢®ÔȲ9f|6P)@¬Y×[+â 5%ÅÂzäŠòåÀÝ#+¡·¯Ú`ªÊçh5a°™(`sl&ç? Ær¸ˆøî‘_€ƒøkHà&÷~bLÿÃüÿøÀØÚÔÐÁ dcè`ÿgä5õendstream endobj 172 0 obj << /Type /Font /Subtype /Type1 /Encoding 409 0 R /FirstChar 40 /LastChar 122 /Widths 412 0 R /BaseFont /KBEKKT+NimbusMonL-Bold /FontDescriptor 170 0 R >> endobj 170 0 obj << /Ascent 624 /CapHeight 552 /Descent -126 /FontName /KBEKKT+NimbusMonL-Bold /ItalicAngle 0 /StemV 101 /XHeight 439 /FontBBox [-43 -278 681 871] /Flags 4 /CharSet (/parenleft/parenright/comma/hyphen/period/slash/zero/two/three/four/six/seven/A/B/C/E/G/H/I/L/N/R/T/V/X/a/b/c/d/e/f/g/h/i/k/l/m/n/o/q/r/s/t/u/v/w/x/z) /FontFile 171 0 R >> endobj 412 0 obj [600 600 0 0 600 600 600 600 600 0 600 600 600 0 600 600 0 0 0 0 0 0 0 0 0 600 600 600 0 600 0 600 600 600 0 0 600 0 600 0 0 0 600 0 600 0 600 0 600 0 0 0 0 0 0 0 0 600 600 600 600 600 600 600 600 600 0 600 600 600 600 600 0 600 600 600 600 600 600 600 600 0 600 ] endobj 165 0 obj << /Length1 1612 /Length2 11470 /Length3 532 /Length 12324 /Filter /FlateDecode >> stream xÚíxeT]Ý’-îîàÜÝ-xÐà$p€ƒÃîîwww —Ü‚ îîþø¾ÛÝ·Ç}ýþ¼î_o¼=Æc¯ªZ³fÕ¬µ~lJuqS°1HlçÄÂÁÊ.P¶´5v†(íYÔ@æÎ€7# ¤#èd ¶“:Ú S€ÈÀÉ à@¡H‚íÝ-Í-œôšjÚ LLÌÿ´ü0vÿwÏÛNˆ¥¹€öíÃd¶·Ù9½Aü_oTN €™¥  ùI峜²,€^VY ²9m*ÎÆ6–&EKÄ0;lþ±˜€íL-ÿ* Âú†%{‰åÛ6› Èþ/3Àähk ¼},!sG Ó[œÀK;gÓ¿¼ÙÍÀ²w¿EؾùÞÀTÀ'ˆ‰£¥½à-«Š”Ì?x:YþÊ ±|sÀfo‘¦`ç¿JúÛ÷óæuZÚAN 7§¿rƒ¦–{ û[î70{GË¿i8C,íÌÿÉ€à2:šÚ€ 7˜7쿺óÏ:ÿ©z ½½ûß»ÁGýK'ÈÆŒ…ƒó-§‰Ó[nsK;¶¿EÎÎ à`ÿ‡ÝÔÙþß}. Ç¿Dÿ×Ì0¼‘š‚ílܦ 36e°Ó[Jýÿʬÿs"ÿHü?"ðÿˆ¼ÿ=qÿU£ÿtˆÿ»çù_¡eœml”¶oð ðvÀŠ€¿î ãÿ´µ´qÿ/6ük 6è$ÿ8rNÀ·fˆÛ™¿ ÂÎÊþ£%DÆÒ dªbédb0Ú¼uêo»¦)ÈÑÆÒô¦èßͰp°³ÿ‹OÃÂÒÄÚî¯Öóüò3ýWòo"ýMMê³´”šÓ¿Þ©G©¼iï¤ánÿFìßJQ›þÇâ/ °À“åí²prñxßòspxÿÙþ†áøçZ èähéÐ{+™ãïÂÿíýçÊà_`¤íLÀ¦ÍŠºÐÎôm¼þÃð—ÛÄÙÑñMÕ¿Oü[Áÿ¾þ{ÐA 7 Êï9°‰PUjFšS-aÎÀ¨”^o7ì@°}IƒFa¾_5¸Ë75ì@…ÑSM0kã¸àK«ûìýó–<ãö`7 ]W2è$ï7CO>ö mÓvÛ—ô´Cí(ÏÓÅ58]^v­íõQUµ/ÅOdãm\ŽH§· ~T.ù~xÔ7ö>&)õ1øíXP8µ‡´ {·7týC?~tÃ÷l‘2eÇ Ó¹À¡ÓFú9d“ŠéjVx†3 ¤5¡‘ž?}¡Ðîôü’KCMBa«ø bž·h÷]ñ)>í»˜p‚’ãÇ–­J‚³éñHañ„q©œ×%gi¡pÓ»±ÀÞ‹IkêÀ‰ Äzòk˜3ú^H˜g­m5ãCFίŸªí%õ®ß¶hØY~†;WbH¶ØCh<ôç%,@O¥Yav1Iý73ÚÆ"mÝSÖ5‡Š¦9޵D*¬Í¡ûøûM¼ÀÆs©¾1ÅÀ¦3]å‘TE‡ªîm>'‘.½¤ÔqenH7‘:z¨U©Wl%šíßiÜ&vµb¶ZÎeISû$ …QÇRaÿÊÕ{=èÛMw[µÃI­Ø÷÷Øqî'x2ù«äwÂÆHXžGm#n«Søƒ­¶ü²ùV‡«æ«`Y2etM‘ÃãÏáßã™aÂþ"1Q_BÚ0QôìxX¶†sï~½÷uüoý¨7l}?€ë!eŽ-ÜžN|é>Ý€ê@¡ålIIòMædºÆ¸À—*r²g–s2°ÔpXp±Kž–ÐêÁ§ò1Á')æÝ“ÖG V ÖÅ v«iÒ;8 –Û—³àÕâ娠Qm JzÜ,<Lj:ªõ)CÆ»3î÷5KcÛ&2šíc¦‰¯^_ÌÿTYÅG÷$ù¿2ëvÈ辰Gßµ[¢J®²A¥…,üâžëÖÓKÇ@E#ùÕ”qj…˺ü•-ùÐL ³`¸‘Ù™2¢ÿÜ%ÙJÔ¦Ë<òe˜%ù”…U×v'ªF(. êY® ¶?u0åJâæizv ¯šA'ržZIØB7­Fu²%¾ÐG[âMóõX„³¾pISOY“wÇ[BuÄ¡okÕLÚ5íÓ9˜k‹M)Ÿ¯gÜÉæ5q\Éìš7Šà@3¬Ÿ«:­Éï‡`­Û¯‘à°¨Î<[~lÀÿâ°Âô=Ê……pšÒ±5…î!”ë+32~Úæ°ý ó0£R­ù¼Í5jÐÒÀiÚ–çëøjYÏbÿó¼.±XBÊx!kãg޽(•vQ!—¼ó}«ÿmNu7áˆ!AÈ×,ºÓ’þü‹ %¾ãÚ=†Ï¦Ò U‚ÒËäHu0x/öEþsí/€Ì¿àH8 ¡9,C{ºéÛ”ªšg„¼ 2eŸ>³¯´ëæVQCå Ž¨±¦™lí…ÇêÖTre]H«Šû[[shÝ<+X ÃEÿ ‹|ÜÔßïŽF]æþ”0Hr¾ŽTî<òM|WQö®^6?×7¯Y.æËšn¹…@„ýKCí÷£õÅßžqfä8ॊ’˜ž5Vð…¯œfè-ž6ù»{–r'X¨QZ<ìôIpuîå‚iA”ób&6õÂl ·ÏÒfðÎÞ Vf£fÑy1ñäSK7}!ëZîï® ýͯ\ᢟO°-9l~¿ì]Pbê“®àÊŠ³áx’Ë" .‰ xOMe髃&­÷+Cv·.sˆ™™õÌÁžüÛU³ y»YT­Br¨4ç.ßôÍ>O1µ³¦–­Þ+ÙámŠ[éМ]f7êðúæ¶oô×ùŸD…H©ç¦«êü›Cž]gØBº<Í“t#”òug} Ï_¾iÌZÒÈ}Mν¢ Ü ž“2¬I¡Ÿ¬í’ç´÷>ù»ýyWûXØq•â”pƈÃEK²xêæp…¸u‰ ”4o‡Q ¸ïJ#!Q¼óQ_Âz4¿ N§¬©:Yª¨,¢©ŸÒŽ0ñüüý7Ãææ6@&ðÞ3É—¥‰“­CïÌ3¤Êµ5­föñ|{ù\¡ÖC3z»¨í‡í'óŸô<®Ï(fG0HúD¯®ˆ·^ÆòRº'ݬ¯X3>:(+GŸ’úªl%ôtWΰ¯-vðÇñ£³QhSÚ YúÆK# ÇSìä$%¯|A×/£.„sßéw‡È§£´äœW\ámKÓHÔ­ÌÙdF´J,–L0¦ǃ‚/a¥:Sà±Æ”â•BôùÛd ‡- :Ó=c|Ì5£ø>j{£¤^cL%÷ÆZ­›vs7´ÝÒfçÅpê|òìñ4Þ—L+-wªþ‡èÔYfI€é¾:¬â&¯ýyzäqÿ^S,½;Ö íÍjíl0ês›ŒŽ,ØÍ]ŠjÇ(ï sú‡ë–˜U³Pj @.Ø»+U&Ïc¶Ðt]$ »=;Ë=J¾1Ñ*ÃŒ÷·2L±5ö×P*nëÙ²¸IÔê‹RVé™Ï´J}Q¸[F÷Ò„Ê5øž;à€ áá‡ãe!iC°"Ûü Öç%YSx·<¢ó {I-°¬¸ˆ­ŽpÓ_XyYx`Ø}q×D È¢‡)ÄÍCœta7ÏvœŸ¼÷‚|ÕûcI6„2ÑÑ/’Z†lüó˜%ê){8¾¿f¼ûš÷ɼýØš ?˜5óÃ-=K3•ºn¨×aH¦cÊã4 0–ò¨-©n~ís}Yê¢jŽÛÞ‡éôúyßtµm˜|ü?§b†ˆh.3¹ƒ&B¶1ˆKh´¾ žèð•ê4Öz»c¢ÜíûÊžÔþ€·i`ã„WóƳÞar€cfjý)FÊQ¢PPw|éøòß|J8Aœ°¤r¥ê"W’îÛ ±oõÅ^ùŒ8V1ë AhÛ¯ÿ=ëD\νßn³ÄÃÔèñú¾ø¢p y°ðwyï¢5fG¤|Žê/ɶ_ƒ—ô˜Sà}RU)Ö}>€»½ÆíÈÅéV¨É±ªZko“Fmù|‘ó|ëû®ôXSû|z^~6ï54÷9ÕÙˆ»÷_ ½Ô©YÓQ‡ÁñLíÂãܘ?»ƒê¹Šä×I°»‰ Î0JªA ŸÓ;0Ø~¹zN+òY„ Ìl*éðüz¿âÛô£LxV©üz%…Ü¿‚ˆë©TSÑ"¢º®JÃ.`Ï{Ú•õcA°¾imíû˜h²Ñ‡Ñ›¡­Ÿ‹ñ\­Ÿ°œni[«8$…KÛèÇØå7û˜ŸÇt<-ÝŸK¡iÉìóÓ6Mœýºýôó¼!£?A<èŽXdRbIbŠ?Á_ä^Øá»‘“ÊnÆ|uͬêÀ$ôiüžN<Ÿ?úŠª­ò6%(êìºôð‡aøŠTý,¸>*?"#¯pÉQGFSD¨Û„èUQaRÂÛ|¢:‘xºÐCy³D^U´”‹jӺ͙³àª_„ö°Cu®@=ûfñ"c¶1å’L¶²ç‚9”†ç]b cg´‡÷ˆÔ‡@’ÖoeŽÉm°ækÿƒ7ŸºŠþ;*\á÷ 'ÍWJü‹¥Û;–ÅÎcÚö0^°éÄó! )ŽÓ9Å}Îŵ6’È1D=èS]ªQj’óî­Sâðg>Ÿ$™Ñ³a-DnP²?%²±„RFwì"ÍÄj¡qNƒÐ–“ǹlÚ¤çÜ·dõCu®ÕàߌK'”ôúgÊ»»taÆïyk\‡§4W6ýî)ËÈ{º¼vjÛöYçÓ¯e¶ºã¦Š[›ZHž$÷  &î©Y›- ·sJ;.ZÚ[žŸŽ˜jYÉàx•¼®ë‹½°¢7=d âa$ýÈ\&dȪˆ V¢÷¼¬ TÊØ÷žTw2\ôRøç«Ó&¥¡¤&ð7¯¬ì;¢[?‹H)Õ9à¥V-&¯fP,Âl С¤ð ÄG,ø„´v°FÔèu„¿dçæ+N1‹ôQ"娶ÃÈpÅÅLwŸÿ‘ëäÃp¶MGÉÞWjô´ˆì œC²Œ€» ƒ­xŽ[Iùè)5_wÍNoV$9Øâ•6U˜öÉê×sBþá/þÞ¨å¶‚Ž˜Û&FjÚÚ®SI~d+é&úÔGß>Ϊ.¾æ”º~d˜üºz8ØŽò)¢*¤ë=Õà¶òµƒñšIÛnkDÔÞÇßÔjëx‘âc66ì@/)<ÕËÀ˜öXRŒ¢¡"c!ÄÁÞUŠLZ¢hŽc ºj×°•h5 Èô›_Ö{!x¢Î"†ƒ+3ÖòþV>ø!ø0°<&!ìÇVÍc ñ…¡¸9qJØÌÉ…°f’Ó/¦ð¬™Œ‘¸Ä^MHÄ‘M†gÜãÅpcO ók_¨ìJDÏxiGßÝ㻫›êÖXÆ¡‹3P¬u¨7²AÓ­´d³L†éo(Ç”~c¶û€çaðÌXV„:µ¨;[º{9T>ÒH×Uõ2¯Ô¯ç5uºH[ÛM}Ä9 òú§ÜJ¦ŠÉŽŸ½Q– ï¦'fP>~<ý–.7%S60Íw(Ë`LrÛ;.\–lJ¬ªÅ ¶ÒÒE@àhp5Z;¬LX¯âÐ =Ûg ­DHÎõx£&‘úÞ ·Îçþ}¸äämgÀ¸ÅFÄÙ“º¼&'Žì2̆DŽ.Ú—™¤ûòçó{’ñ²ÔB ¬äkͬ¢%ÑQˈô‡cë•eœK³ŽüÍ æ…|è-,k½ZŠñëc§¯W#´(¢E®ˆÎlÔSçš C~‹j[çY»¡=ààdfúc/ $YOîìf¶äÓÑx·Ÿûº“çžÁ—ïÍ rgo#¥pË!C((z,sΪ“¬bô0Tdžвä/iÞ°|0M¶2?ù’© £kEËdœ%¶W)wØqtÿ «–‡&ãö³ãë1Ødé§Ðk½—Œ±ÊûŽ_¥Œ›)QþB7ÅOñÍò´Ðò¾6¬„ÍcîÃGRy9õüÍ _<ÐÈÌ"7ØqM,¸·ü,kÞ¾ §_6öõ~† תä¶46å[íÁFäÁ†¨µÜƒ|«_»äÁÝ€xN¹ýím Ѽê¦5©¾Ìïµ:c°|­;c!ÄÁÕ£þf¦Ps'–²³½-¸=±Ñ…F"yv1ºÄ’ÓŸaãÑûàòÕˆÅÈpws/Õg+\eÁUm&y°yžbBeÇEkÙñjTÖr&Sx#ü(ÔV”ì {õ>;^ .eöe€šHcÈ.üöÞÕ nF´è©4ÑTrv¼C°I\žzc-Ô²~Ó˜ZûuÃíÄâr’Ò ß%A]Æ0‡åˆ›=©0é¨D»uC©OÍ#1¨Î@µY µìµ†»!+#¾«>e-Lb@U=(Ú1Ë&›¿böȈ0r.ôÑE–ÿ |d³/²#¦è›y4{‘=9HÈF¾Fcîó`t•,,²= Yñê¨~ýîâx‡nüeaÂ#’iKæyƒìƒ òy‡ÅÇôJ ùÇUQÃÞfGÁDOcÙ†¡$!ùØäèÚ èT^ÂØ2à ;0†{¦Ñ¢{áz—™hGØT­ÿ´‚ÚbOˆÁH6ëÉ£J9"2]ZÉ› lcú‹ðkR„ÝÝ¿ýIA7g`°jo¤"p:ÇÉ[Çpƒ_¾âŸðõ;+,7TYýÐtÞ!\I_¬¸Ö9YzÈ [3ȸ®ü…RÇÖ­«« ³BñN?ž†ËÆÐftŠþíQ±ïAâÑEâœ3ŒôwøÁõÞ†‹ŸÕ Ô+_†ä0ÜQº›ÒO)ò¼ÔaãîOPÊ:ÐY©ÓHQ-_A“)³’qÑÉ7Õ{!”yŠË—âê%ëßìDœÛhÚ,ï yêájî¸qô†ÅÖóæ/c„ò•Œ;Ç…/…|Ê*ú\öŽäå£\Ž eÝ42"·ØGr:j‚LQ×4[1ƒ´Yá„ôh¨@™g]æ)UWµHš`KdšÍG­ùGá ×}v¥¨¼÷¢sF¦ížGeĦ@kkW—j´^Å Œ!5Š?öhrY±N¨ñœ +ŸæiÉ^²w—ßsëÏâOt­~áðVÊ!ö÷ÍI0¼©»ÚÙ²­iö >ìü¼^¬îÀ\ß¡ÍGk*»WªÀü4{k‹õ+#ßDMÀKä‡.æXˆÐ-R».!&¶€Yܹ¹«ÞF¹šnž²ø‡ŒŸ/Õ§ÞMqÉéžÙÃ'X²¬r„ªNß"£Åùžè¹¼pvy=½ß\“HyÄaî¿.½à%²¯ .] ·¡ç8 ~ðsmîæî4&EÖýÚ{Ï組²‚cÈŸ[W¾ÞÙôÒ¥¡‘qÕëÍœãÎÄiÕ6˜‡Væ×[YÍèº>{ÐãS äóJ/2Ç}:³ø'ÿ6¿QrËÌ=ë„׫žÜLY›ÒTO%1Äü´Øj öÛlHˆ[ÔA¶`´’z\¶Ekt«±4Šy¾>Š÷²sOaœBWO?¨?Û&Mc¤˜Ç •„wl8ØŸ>nÔWK–ëωÕ}R‡šGÀ5¶C{_­"o#äd盜 ùõö5]æÌ  ã,ó\d×È…(;åf¤ÿ… ߦ¹©mm7æù«‡·ÓªQŒ ™|BMÉ2` :š³x åúÎSõ!†ók H~Hš[GäÙ&Ÿ(oö©Uú‰šÏJúb’Ï/4Üòy™Ä.‘vywá~Il6š„N%¼$jOòmrüÙô³½;‚–ÏTÞ¾jDÕæ¥ÇK—4·¦çûÂxSBòíMWnØ&“rœëë‹„ ™)êNÌÓ—b%‚“=Ž»:îÊgBé‡ M$%)Òcû/Sži>¯ݵ¨I$ÎöâK70ãKB\!µÝwy†òJ—¸ ú²²~Š›,üŸ!œ=O:‘æùÀs8é+&‰3…j1¾Ëî»ÁÆá ý_ðµÏ–iôîsõ±ß¹³*Ú».X·Kß’¤g®ö½ð"Ť¹’ _—¶†x>|&c_&áÐlõ;©È¬x &S›ù=5(×;¼,ÑÄ ×•F§Ç‡å¬kâmˆþ<œâe8Óöb¸j§qtëe]ÿtfDIAÞZ•ÑŠ,‰É–²óºTŠï…Üùí#~NGJïÅî­윥>æ(È÷®æÚŠÄ6ËøÕyCVØ&Úx RrU„êýJäÌŒä+n -öpÖâÉØ~.t |‡SÄXmzX*gcåuÄÑ ˆLJív˜ö#Û ¦z\ÿ ˆÊá¾îŠ'ñ…cÂì 'ŸöÍûq¨¤FÕpœM[´rOòrÇ2OÈÿ’d8/S÷á–—WôÞl" 'Œu~ä9ÿIû«r·û×ñöì^îjfÉ`ޝ|»S¯Ã1Qf-©ˆÃ C2~û„v¤q·O&¢À‡“×lÉ K-þ½3óƒB.£Gv‡¸V(ŽbHL¾Á Ü€? þ‚B›aP;+Œ¶Ÿ¡ïü¹)A|c³÷`ªdwAAï®q;QtïŽâ”è6ͦ“CjóŒªUJ<ôóûÓ®ú‚Ê?Ÿ-¡dõŒ¼ã?%qÖ§‰<–3¬ºpazÇÜÛì Þ£«T)„‹a›SÅ U­Þ;MÅOŒã£ ur7×ý$jïóѳqmÅåñ$líû^"d»^|­€ôµøñdÛœÔqÅ꣞Ï+%”WyÌ™_‡º5Z‘ìyŸ&{b BÏÕï.|…Ñpî`hPÉ{»èmæ4 ù¡´ï-Pî`»šìþ|t¿ö™gf~1ÍÀÚð}…ÍZ©| J“Ú~ˆŽQ¦žX>x§¸—'wGöœ'éÍGóQÝ´ÎÏ1@]”ïÈú'6d³öëÑ®ƒÐd­>Cbõ¬CB"¡Ác6vþ¶°fŸç“á<»I3,—ªò)Þ­ /*ÑlË}ÐVü¢s- Ê6Â]ìÓúT‚L‘³üædwîÑoù>˜’@µ±÷»Î‰Ù:XÇ ŒÐ♽Ò0áK—ÝŸËJ8`徫µuâ|R˜>9ôoJ Ñ­Röа>‘ܶÏÈ]tÅw"®CsD• –íÍãÕåÍu…ÏŒ³9ÇÀi=ã«Ò§)9 OS0ø‰Ç³¥Œ¸;ÂȘ ]¶«6©Q®šÙá={¹˜EoUxw¯yêòSÜ­÷˜ k(§oò_¼Ü¶]aÅÆjé çŒ n1 <”Zè©9h6Ód'„q˜¹ª¹“ÐzYšàP9©äÚšî™ P¾kVC¾Ed9:êJ‹–CÒ ¬3’JÄ¡ûÑáØáŸãzÖä+-ƒGzKÄAš!¼õäDÀ­’aÝß|vÐè.à!ŸcâÔà~㬱Q7i²~ sš__DcÉ8kRŽc=<<–oRŒC~z>ÓÚLò¥` µvRŠ´° OgyÃÉö_–f²pËo–VeÏúæ={šSQjNœÄ&4¯/óe$DË63Žq¬ÑƒÂŠ,dd_‚Ǧ©£3ú[S4ù¾¼Pë6yÍ/²`רû‡fùÓQ ]Új昒1înD»;EŒpϯe"Ý£Ã8žKaED›«þŠ!£ðáY«49.)[i€GgG}N$“W`·ØF:»˜ÛǰO ŠŸâ&kOt`ÆÃ9åHìí^•º\(‘0Övݨ»¦º4 `)δß}Üò&£7Œ%ŒHú§—Éy&5Nÿtyø'ië÷ˆa2o˜þtÃóDà´¼›WsÛÒãS÷žýÊÞÏ+ÞÏ ÉǤßEÒy¯Ñç%^-»Ø|Î݇ýÜfP׬÷LïÃÙ£û£Ý˜ú˜ƒÉ¨»jÊ7Ro8§Rlᯨöò«!ÑOG#zJýª柉mq^_ÔÜF%Ì1³§ç]Ä¢11¯?Áe|(_õ}Ÿ×^*ßýn]£;¶úª¼¾Ú¹æÎ¦ŸCÎøÐüî£t%vp# W¡ÿ˜Õ{!Jÿ?Y ¹åɨ:«&t<ƒŒR¹ïð|l÷ãê8ícŒÆð:´'<‘&%±Ú:­bfoŠLÎΣ_n¼ãc_¬ÙÏ’ˆ i4# WBÞyìI+YÌ-ùëþÜ©¶OãF—Ã~N×òß3scAºælš @¸zz±‡†!Õ<¨=ÂAï Ì6’Cˆ*æ Ü8Äö®‚‡8Û‰ÏÜ®]ÁFüÚnñÏi ”„eŽ•Wª’€" [æÐEŸ®Üÿâ–‹/õÜ ÇEÈnîÆzK?oõ£’è»(ðÀvTRPæ`V7Ö#k•Öl'{ö‹O1ííLö’$Dþð˜òJÈhy/쌒·6;'¬ @¸©«@­ñÔ ’$ÂÄŠñˆ©±æ& MÂW¨Ún‰ôw= µ2éò7àdåŸÙ×ý”Éåüö”Û“ÐYN—-™?= ±wåÌ) åZcbrÕlQG5 ÒÄ"aöû¢äÂ+h…Ï9›±)àŸœà¡ãqâu3ÁâÁ·—f'_UÛ«õ(¡þX]››FA!ô¥(®/d€Ab§‰ ‰ý² ½©í‘;8$OmÊvG^9¸î{!óÅ3³ ÈE :3d^öYV¼÷j ¥vÆH©O¶Gñþ4æ(ãgTJŸT¡‚p3xâ”Ç‘MÈ*±¬Wmœ=,夽# w~æÚi(F†‘F¤+p£ÊåwÖñ¥¢Y=µ9vè‹q@8ý$ ΞKâ=w{¹Ì±<}7×:öëáh#Ú"[%Õ i±¸1)é†Çcd`qˆÏ¿Œ¦T[2µ9¡ 0®~9)WK=Û*qVÃdô¡h±ù—Œe¿‚5²éÒ¯ k=ò5?ýz'µD½>Ö9§~ËÌÆe>M˜FXü³LÒ•6&ÒÚAŽ‹++ÅOÁâÝ.a6ï(«9~Üçñ6 5ï"^ec‹’:¢¾L#5Ea$4’FñÛ-@»†ßQP§ú#|ºå®‹ êâÇ` j§SÛ‘ÒBŸH¥?ðýÔ&­$üÄÐ%=õÉ”½&Á›SÝŬËrg¤ä³d :dI‡l?Qt^B{~[øíˆÂ«5å1·à¨¿°?ãW,Àצí´D9ù»¢×Š»ŽÝ91éU†Ú.E¸ã•ÒKcß0Œ•^øB-ÙŒBÑ-m§>ÿãK #9Ïs·"¦h`‡¿áëÞ˸‡"`+HÍ-]‚¦ôÓÝUõE³û{$ÌU*«2ëím…]Ð}ýºcÁÇpzôÈÒël~K«zÏcr²ö¼ÉÓŬþ—|Y|±÷8ù/ÒOriÂl!£&)„eŠ`_ó|µ¢*ýΪí¬É¨@§c» %å‡4>޶F‹’¡ëðlÍ; yS:Çâ³·ZôÊš¥êü² 6{äüÞ=?÷J+pN¤Üì½HQÒŽII[TNL¾ #ÝeÂ…uÿXaÁ…Eܽà0ÝO~$YKl ÚL†¢D(V–¥¬¾ >ºÇ¦È±x|ŽIj)ñœRa"RþÞ$i6æ¿ôÒËÅ}Þšöɾ¯9º6MsŽ¿¸G¬ägŰqö%°úå’–‰”S…ƒœ¸ý:aÅ ú³Ñ«3¢·™±RÒÙ¬OZrØ¥ûÊÍE%ûõ=oæš5+ÿ]ÀAŽ}iò¡ƒóÏRM¹‘¡) Ýè&ý­e3U/u½l|dlu­ ¸GéÜÌ!3ƃï’>Ò«¡ mQªÉJ¤³]b„Rt¸ÁäÁæ¡9<í'ýpVwe±ÉÏ€íö§ÊôˆgìFËo½å ;¤¸™GÉ3‘º¨”šCÚ:ÚvßRG‹òÀ‡ÞÚtnµÇ-RNìÙF¤¨«Û#¾Þzj¡xîO'fkJt­}†8Cñ®Ý²1ö÷+‰Ú-î0 ÌÈ›TnГš©ÿ¼.¡NzqQ´h®«¸íö­ˆžŒá–˜ÃlÁ*×Äžµ»òp1®É±LçäÓV±—(ë˜wTWgmµ”ÚYÆl/Åé² QÏWÕ5¯µ3çãji¤"¹\€§4ü " 5™tcêv&&»™#³Æ£<‚æš:\dÎÁá 6Ð"„#!UŸ‚eÝìGöG9畽Pòß¡Õmà€ÙiìLg`o ƒ:óé§„CÃA<œš:ï…YÈ÷æúEû“la3Š*¥fÄü”br1CõóRk}±¯R/Ì›¦%© ³i‘r¹RrÁ½02bCF¾ì~çiPnQ˜ÝҞ涔ŷT¦º¦v:™”®J)YÖnè?ó´“ï ‘;@W·Vp˜ZÓ'›{~\ˆD‰Ì†… ™iË<‹ ©.NBÔÅÈþ}ž»Ç‡Öl÷d_¥¡æs€½©}ª—ÃÎH!3³*0t ‹W‘Ùî:¤ùt^Ìújé[sùV˜®‚ƒû‰þ·/õöË,þ«=wJb¸`¢f+~ AÚ¯aÔõj]·Ò.{ñÀ¡Fn=èàùMƒ 1‡þGò*ŒQ1}Öàš ß,Œ´0"` k¿dÃTS6Wg Þ¨Ô×ËœXò‘æáËTÿŸEøË~9è3uDu­“>™ó1@¤Ð/ÜÊÍ"š‘¾ß´°ÝÛÊLÐnîå‘[3Â~•Iþ;é …ÊBÄêÞ ²gb¯Nïwª˜+1ù<Öeù (FòAñŠ<˜8_Hã±|Í×Þˆn¶«]Q‘ñágT# 0S5çÆ…0Eóe¶´‰Y=çíqOm°'ÁnÛç:TŽn%)ß*½GÞv.¸?Ÿ«æ¶z´àÞÚpæN[&¹ã‡$¢ší@’9*ÎL·D¾Û;»Tzbiɧ£²Ñ¢/u—CW2I´)°RðÞV¨5̾Cz% §‹¼%‰€lp꣕RR<Ý„W#œõ>–IS¨cº¡7Nðò†?‡“uU]«¸MV䣊vîÇÀr\“½Ê#uqi½m¡jÂÝN, F4ljá  ô!~ª`Öê¬o°oÎy\4* ýà,h®¬èèµ Ÿ ›£R¯@•ý¥ÔìÆ¾ÌuíÞ2ê¡$›…”ÇTþ­îàóàNElŠHHÚŸ7þ;ÒꃣTÿÏÉN-N`r?Ùãx//Э¸Òåqz&âè‰xì,÷"N¤w„ÇžÞ“Ä(.îÇZÉ;©›¾wï¿«.@_;dÒÆÂ°%`±²Õ ãVâ¿ghYÆÌ¾E§T-2Ö÷ÀPD ™Ç½ Æáqô÷Zy~Œ£ƒS zªU%nHÙq9Q>çBñ7©>‘þå±…F÷¢-æ(ÐG<=ôO¸5=ôÜãJí¨ÊÀ$EE;Oõh-â@ͽ‹é¯‹RÊljaØ-¨S÷åôóIé‰ÐHyX±ÐòÌ\h¼7vÜxÝx Q6)Å h¾ùG⫱¡e'()Mxne±nàÍá7è—¶³BÕT=ŸíTÜ´83~óé5Ü‹'(':‘_"ac ƒTZ_çîǪP¦ ±FÅ2XžJ:†ì–a/` ¢å¢¡YP ƒ°AÃRHÃ.e?å‚{+8…\)höhžØ^­·}è¶ì™TÔ«4Ötg$Eë\k)ë£FÞÝ·ÜB’ ŸkCõ¾×jŸúÞ¥L¿·ÚîõCMd}ßþÖ<ÅqË%4+ub’!‹ä™©ÐËž8n4ÿj'æGªºÁ9Zò¸‡¶2£S=k)!AÐ gê}^aä÷×kÌ/s~ZáÍURœfuÜ O³ánÁCÊ™¢àÛAA6sGÊê醴޹3ÎY¼¾„çêøðˆš°Û˜‰{œšã#€«¶Œ°3·Bü!õßÁjƒ‡¨%¨å4ñªÀ_k³ÀtmÌ&%¼Ü©­ä!c4ùã[á1p-M7ÙÓš€ùô+C&æí,fyÝwEöÿîƒòÿþŸ0±À¶@Gk”ÿ€˜Ñ3endstream endobj 166 0 obj << /Type /Font /Subtype /Type1 /Encoding 409 0 R /FirstChar 36 /LastChar 119 /Widths 413 0 R /BaseFont /DYEDRI+NimbusMonL-Regu /FontDescriptor 164 0 R >> endobj 164 0 obj << /Ascent 625 /CapHeight 557 /Descent -147 /FontName /DYEDRI+NimbusMonL-Regu /ItalicAngle 0 /StemV 41 /XHeight 426 /FontBBox [-12 -237 650 811] /Flags 4 /CharSet (/dollar/parenleft/parenright/hyphen/period/slash/two/three/A/D/E/M/R/X/Y/underscore/a/b/c/d/e/g/h/i/l/m/n/o/p/q/r/s/t/u/v/w) /FontFile 165 0 R >> endobj 413 0 obj [600 0 0 0 600 600 0 0 0 600 600 600 0 0 600 600 0 0 0 0 0 0 0 0 0 0 0 0 0 600 0 0 600 600 0 0 0 0 0 0 0 600 0 0 0 0 600 0 0 0 0 0 600 600 0 0 0 0 0 600 0 600 600 600 600 600 0 600 600 600 0 0 600 600 600 600 600 600 600 600 600 600 600 600 ] endobj 84 0 obj << /Length1 1626 /Length2 12938 /Length3 532 /Length 13810 /Filter /FlateDecode >> stream xÚívePeÝ’%î.…ÃÅÝ¥p÷Â] çw)Ü www—*Ü] (ÜÝÝ¥¾ïu÷ëxÓógºM̉8ggî\¹2Wî}/%©’*£ˆ©1PÒÎÖ™‘•‰… ²1vqR±³Q°ã‘c”š‚vNJJ1G ‘3ÈÎVÜÈÈ ÐšÄ&66+%@ÌÎÞÃdná  QWѤ¥§gø§å¯-c÷|D:ÌmT®@k;{ ­óÄÿu *p¶Ì@Ö@€˜¢’¶Œ‚€FJA ´:Y”\Œ­A&9 ÐÖ H 0³sXÿc0±³5ýUšÓ–ˆÀàd4}„ÝM€ö¹ö@G“ÓÇ7ä0w4²uþè³dkbíbú»™Ýß„ìí>vØ|ø>À”윜LAö΀¬Jâ’ÿàélaäüWn'Ї`gö±ÓÔÎÄ寒þö}À|x@¶Ng »ó_¹ŒS“½µ‘ÇGî0{GÐß4\œ@¶æÿdÀpš9šZœ>`>°ÿêÎ?ëü§êìí­=þ޶û{×p9;­Í˜XÙ>rš8ä6Ù"0ÿ5+2¶fvV–ØM]ìÿÝç tü»A4Í í #S;[k€)Ð YÁÎù#%€æÿNe¦ÿ9‘ÿ$þøDÞÿž¸ÿªÑ:ÄÿÝóü¯Ð’.ÖÖ F6ð;ðqÉÙ>î€ோÆÅæ 1²Y{üŸ‚þu·&ðlEí¬MÿÕ'ãlôÑ[óYX˜Xþa9I‚ܦJ g €™‘õG¿þ¶«Ûš­A¶À]ÿn)€‘•…å_|j +Û¿àü‡ hkú¯ô?¤ú›<ó1%I úÿârý{£ÒÇ8«yØpû·RäíLÿcñŒ¨¨;À“‘•‹ÀÈÎÁúqö>ñp±xÿ)ÿbýçZÞÈÙäÐý¨›…õïêÿíýçJï_`$lMìLÿUg#[ÓIûÃ_nGÇÿ>üUÿûúï™Ý&Kóv&|A–©iε89ƒã⺽ݬƒÁö% j…ù~Õv]¾©ß7y* _k‚™'yÿ´xü>¶Û•¥ÛîþdMÝ• <Ï#ô&§íÉG_£jûL¿À¬_‚œv¢éy1'·¥ÃÅ¢±·5®¬¢_ü C4ÙÆîwñ@ëGîšï‡Eqoâc’RƒÝŽÖ†Q[p|B•pøpOÝ?248ÐuݳK@ŸOÉç …LáçM ¤£^áÊV…‚iàF†}ìóãØUdb«-Ùè öÐ¥ú 3†®F6$dH°\|o´ÑÜ AãÈϳ2¥^6ú…ÚÜðöŽxƒ_¬Ý.j*YÆ2ÎÑ_¨Ñè-Ö„ÅJÂFµÌõþÇT‰Æ6"$‡hR\¤Âb‹1Bbšð—À!t•.fÆ.×X°_Ÿ~ŸSÉÛîlQ áÞ%‰ï êœbÈݤË{{+§¿É˜ÁU­‘;i-LEÈêþÂŽÜ`4-uØÚ¤ŸÞÈòS€bQ1j2H¯Tµ4EÒBÏÞMà'’£Û„—zAb0@Ù slt¶u‘DXŠà78æ6›×†·÷l’á¨ÄÀðâ/Z”´<îCHÙÝIu*]«™ A;4ãV¸pÅÍÄý»žÍ•XuÐï%g–G鄹 †¿ŠzPÛÔí´Ð‹&`(’j@<Òþ>#€.á,؄该Ñr­8Üù¡ ýÒ²ÜAžßª‰,s¸·?x–ið»è·]õÄouI#êâ·²_ÖÜ|BYž½»z'ÎüÊK“¿Õ !ˆ$¼*ô}ÂèHBõJ­!ÈC¥½[‡=4eeNÄ2³ÉN¿ˆ`—QáÏ4~ëF!«_Õž¦ј4¸ÎŠÙ¢­3×U$ª./ƒg™ÞOkWð&ÕG$Š)A”výD¡ÏÚÜa™æ"ã]6ÒÚ ûåc‚OTt«P%L )©ûªÈ{flê¾'¥TÝýêgëFBDŽî â²Ðýr³¦öl=úÃõ3Ehrï-·cC×08ºv/ÓŠƒLUÂ÷|òq“ˆ3J¨X?¶ª¥+Gvô°>²1ý¥f[%Z‰ÎºS‹º¡önr²‹yP/m}äÖôX7˜Á“ùt!· ­jø3æ‘´¼S¶´·Œ÷ñâ½QÐ7½€ï8Òô)3[ •xn)š½h|éXµHAŽFÌâ"¥þ4Òhß)1\g¸Þd°²þò΄4_î µØA^˜}øå˜]k=Ýð5Ôûé&÷0·C!ÂzœT‘ ìÓo\š½Õbç=IŽ‚o[E%î\_u©Mát†\*1¦¨G?ÉI‘Þ{šüfâŽÀÁ`ÆÞÛàùä<ÞçÎDÚ“,áü‹P'¡§o‹Ï’sY?­¾³ÏÁ°Aâñƒo==ã½Ë}äÌÇ€zɤm¦¦ÂìQi;Íîé¡/¹$…^®æÛû䳩¸GÕaìH5y¸¯ô‰¿úsçªY¬TL¾&w\”õ3xŽ|Ï›E‰£Îv¢ËáŒjÝ"`Õá³2èá$8aA*zߺ=à­]rÇqE§ÏÚG¢ÏÄÜ{'ƒ°¶£ȈSr %4«ö(ñTȱ÷²DÁHgšÛ@›Õ˜5Èþ®©I’CZTÏ× ¯í¹^x@ì`ÊN>2ϰg-Ë›*ñ„zÙÔL’\o®›1óĉª oíwiµŸ¨W—C´èK_¸€œ gz'å!º/9c¸k®¿õp~9´È0ÅÆ[K….ZXZÔ”~‹XFÛïÝ ’Öß'{œíA*Ãw‡€5qgãÓËÃ‰ŠŸZ8}ÐO‰x¸l(æ¹QVUÄ3Ó½Ì,> Ú<¸°•ç}^JÖ‰ñ¢èn÷VÿeÙ·È“«ÞgUøžmlœ¤š3¬}üM–e8Dx3Ü!ñ '¦j]&ÛË›d÷6Æ}yRG­Ûž˜[YXÜ«! Ò7*ehR8aûªgàg"0Î[½WF;ö‚­7v,#~¦ÞÐp0LÐÄZÿå“RÈžãX¹R\åþ6´®=.‡ÑÊê§ÎYÀ€ ú×YFÍéJL‘K6…à£=ò½µnmAóýªœÃ²€º?s²"k—û¶!Rq–©²%¦QXrŠNž>µ#£ïÕÅËœ³z±-cÑÆutÑ­~nÃ/áý®9Ü•=mÄö“â A›”ñ¾p´ÍŸGÈv÷“\)š"À÷ç¢'·„J*Ÿ†«Íóà=Ö'iò–jÚÓ+Ï$ÊXÃÌ¥œ2ó_¡Ð!…D.µ ÔC~•â9sýJð÷—w}¾pKÔ[/u€o)©ùõÅ‘á ô–ŸV銷Z¬6ü׆‘Pºâµ²†[pèB´ÚÌ\›ÓuëE”1S`îB’2”º?µËE·™ÇG"£šÖyÝM5‰I~Gá 2ê/¢ìK:ýi¿º˜|,+rÃÕ`—fÑ4•CË ª6{0Ÿ/ä\ö%{RXM[WGV ±®‹£(ÛõUÔ 7§;Ê›œGйw©6ÎÖ\Ì"ïàÌ|àBާG¿¯½Ï”39ß#O^°ÔKán„‹»)¿0@ýÀØQ¿5A§®ñ5}2çøv®¯ûãv0\Ä<× aOjWhHyž´#ÉÎ{*tj ×ôµûé3äþ$<é*­Ÿ+Ö^¬OÛêH§˜×"SÒ-ÉÏEœðÕŽ ÊLsLËÉFMß÷i –eyØ!ï'Ö»îØdýÅÍÀ¨´ÀÇŸÔ{vó[õ£äÚo‡üß-ûf¶w¥õÖ4{£F/˜Kò ÷‘]÷ìcJ!ÍHhÀ X§JMz“ëê6oçæÚßÓñ4QÞ55&IŒoMÙ=ø'<Ü8Ø ’ÌÁ8šm5·Ðw¹EÙ}÷?y¿J­M¶:Å L—v¿Ó <1’œó^<'p™ÖKˆG/Öp¢î ^¤D&„F~sÔ#kü©ÀEðܰ%æ™Ì`?YyíÑ –›ó•‘aÂ’šev”!$ÕùŒ:/ ã)61ã‹%[Ê𚣰]·Ϥ-Ѱ<õ1Z¥ÍŸ /ó{LîèÆøk`Ÿoßpãµv”pÁ8‚úNl*É7h±ïÁ$nu©'!Á€Ói«ð ¡W¸ k†îCmº¤º“9?gXµ´~\,ƒ(¾¯*÷è›RzëÇðþfE±ã€ßø"£‰¢O/¨)›us±kY°*õÛÞ@!™¼Ëv´âôÄÕôŸîY~ -‘¿ ë¤#wWQ ÖÂØdoXÚ9\ÀÉŠ¼Ã¬=e+Óçô>¾…w&0GŸ^%îZ°vDí†be)ŧ¶B¨ÒhC¬G˜F’â‘­ì. çÑihÖ&½;v›¨À2ý¶yNOUÿ\¶ƒm@ÔZi²Æ²Å²' ˆè×4Xå–w¸³æ2±á˯6\‡gøÒœkWÈRð4}×>¶UÈ“¤'òå©_ ÿlÝæ#9hM¢•È¿D ÞÇM°P°ˆöî2&RÀ!×½ä&|3´!…#‰¨œa]«cÒf½è[ž3_÷Iå6KÖ_^L“ý˜ÈM3ZY†Fi¸_H†Eó¬ZÌ9${+؉ä3³Œ7ÙVŽE¬*¢RThÎvö6‘½ª3‰í¨tù'uð¬u“jÙx#žú®O~ÆþÈê!§òߢâ=~Kp‚g'O…¿£ÝiÎcäBV¨y‹ô¯„ ºìfçªêÚÑX›oÐsðg8Lg.=ª„Hƒ ¸9$ˆ"ï¿ÛÚz’p>YÙ¥IèIý S ¡nGo@7«ý>ªï;̸¢q– ?üDÓ8?TÏ:_kÌ)6%JI­O~¥UÀÏN¥”\p$¿ Iü^ôd%qRg±$’È+z0²˜¯°kî¹<å Ö7‡—lû9”õjO€ˆ‚©Ø•YñçxTZ‚»B¤&˜bs‘ø] “mÒ×ÜÉ/×5 “Ãip[¤ÊÁSž éű ÀÓƒµ¹ô] m5±©¸v®Šks'”u|HÉ“ ÔÆÄìú*Sä`Mx¸æÉ£?4N]Ò0Òu¦^VžºÜ±a¾€×¢è9 Ë’äš@ì*Ù ¨U:Dé‡Zy!Cfæ¯bê~¶‰^7hœ¶ayÔŽ¬Œƒ©ó¼d^…iéÀ(Å&¸ôe½ÛMs–’‹“¸ñ/Â~ªž‘ö(|†iÙU? ÷¥è¹‘©xõÒ;ÞzÝS]-I¼Çó¾Ã¬`êKµj¢“Ö*Í€³šo‡2jƒËQx¸eapÈÁSâ>1¨/4¨¦KòƒØ®LÃEtθ,%ïªü=–¾€»Z蕵»U(Èÿ¦nDôéåvÒú¡”Öªe%%ƒþ“8Í3 LµZtQ­\lµP¿´Dâ qÆ Ãç¿{d’0è^àMJÍS•!o–ûŒ®z¤›`¿™Ò9Ê2A´Ò“:ÌˉÏpœ®k‡~á‰SÅשõ]Jn>ËÀj Kd~ÀÚOy.MŠ­B0ïnQ3³|sì ¢œrwú}m•»QPæ·½Xž€Î—AJï9„ &3cô-ž¸=msèšBÙäª#•!oñ~Ò ³ø4úh;äGš3®>QÒR£º§/˜BüQ‹Ùk$PêÙ¶›uT™ÃîÄô1ˆº`±Ÿ<÷DuO^÷„`ú8–m¥Lt( &Ö'Í"3?~}•vâ=#MíòÏqUXiÇM´¼‡¢O8È(¯›Ó¶?›@¢0£…4x7—oï®Õ¾á›Ÿ¶s]LCeúˆ¥² SדUÇ8h²VD—œtWbÍŠOz;|9ÆÀÅ¿ãß¼\HÇ62*‹ª AÿÆž}¬dÎòÐ,“” ™dòý¡ã“4LIjEþÝ%©çåSvóirå0R&4…T[YXa@H2;BÐà‘ïtaïç‰|¼N“ø œ`þ>>¶¥ tÌîq¼± ¾VѦGW*CÅ Îl:ªɰÆso8`_÷оzì{ů¼‰ÄR@ßwoxEÔ€%–ªâD¢…1–ý±~¨™xѶFosÜ‘|üw­Ê; §ƒ´w—>š[`>÷mµàã×%»T÷Z”²—Š;A³˜ _ù)6z¹|HAñ´ò>Qd´°#Éb`¹©­'…ñ‹".Pâ!›>ËÐ̉¯4ÈÓ“œÌ€Æì{¢÷ $ƒ¥ßÍÌžßVÙKO1k0UüÑtZ¶k”¬6³»Æ\g[Z »?»` ЇeOÉÈ9¸bÑÂ] +¾ÍgÇ÷ƒ$oŠz_úîÿ‹DÇôØ1j³*’eºœß¨2H’˜ËùÙœo öžÈã!t0æut‚­-ס”_Y ®ðmKÙ7>5ZùbfÍÇnÀ¯Ÿx«ñdšqáýÐ"¥DÔˆ—KNxø¡çÔÞJ¬*,SžÀÈ/O% ðýfÖÊaåU÷ ó–Và4 úE¾DÁâ…%ø¼W[›6‚ïCŸÐýD€R]˜ ª+í3ã r²´ˆ:ߨMö* ®Ó”¾3Á¯n#ͰÒèm ®ú*šëïŽ[Ø‚ŽcéäDuË\»èÑÝ´iëÞÖóÞšÏò™º_UÓo_Чð†=»â’Y»·„ÍL%\lÄFËG8ΤçÚÕgÂ3›:Þ«}†ÁË;áóx¹¢2o)I:á^"¿L su[ºÐÃÚÉÇ¢¤+Å ~ÂáØ¯²¢Gü~Ù½('oB%$wQFNEwpXßðSN=÷N6%©‘H·ŽõuÙs}xQø¹¬F0aÛQÐyëâ°Ò¼Ç˜ôt¼i./Ó@Ÿ˜Ð@žA2Ëî“å(UË*XÙà·¦Ô£oóðKYiOçì“@3dÚ5YÕ6‘Åw)­f Öl|è·Þ´¯˜²ìó| ReçR^l‰Lu7X*¯æ½˜3 ‡PŠÎó·õ"çp´ ’®}iP•é@[¨øƒˆOØÙª¨Ý„/xÑÉ–™+Ï‹%´Ò´ÑY» Í Eg‡hÉZs%=›mÙs¥¥dóê7$)&?ò2š =qªÛ¶4b¥TPÄñdÜXÊx¤ÒH.ñå„é©8—ÏÛÙyXºQc/Ót ÿ¸•¿ŸáMIËdâÒSS,þ6@’¤/vÌúO˜!‘•ȉ££™ž/ÎO+9Ûˆ°îÍëζ( ¼"ô©zÇš¹ÊÉÏ ÔóàÙt²ÐœÚ“ü„˜4ÿúf¯Û3ó5»Ùf#`=}œydêU–eFÌŠ$Ks*÷ëãòÈ÷T½qò a»üåcåöA¬^ÖÓv§t üùœ/R¨€X!jFî®aˆÊñÚŸJY?9mÀ¢Œ×õ%Ùsyãµ{]D¾U+$)¤Ua‚:O‚w ˆqäËØ¡âΙªöÛ³/ p+6îYV\_9‡ÀqwI«ÌfË bäÀy‰iÀÎÑ™ÛÚ¶†U×(×Ñ#K¯¯úUYûQáøë Ãô1ܪháÙ{r¸~«ûD®g„´!»ÃÔòÊ·ïÕÂ}nñ³Î) ¿(Ñàë€Ñ](œûQÚГçK†±}::Œ„ëήùhÃñ~9”ü¬ƒ•Äf!l.µ÷Œüh¨´Ï'ˆ˜ÿþö¨Afø‡|k#¸<Õì¢ãF湎öZ0d¤Ãø™ïQì3¢q‹÷’sÌЃÃËØ ›Ë·6¸Ž$ñò„QÐYì=ÃËãmñÎÈøF¾2L¨¶}ëjk‘ñ5lcRPq¥ûÞ¤$Šà“~MTîfŸ‰ØÊ&%×®k+=büÙ7YAŒê1ŸQ—Ð4ËË7Ø”þA'ãïoôØ~bÍÅИY`Í8qjƹ&Ä2ezÝá@X’­s”ý»Å…8ˆýИ¾StÒþJg¿¨7Q0ëèB̯0&Æ›Ww‰ö"d¶ohs–Ç„0¾mœH¿²NZ±„6 ƒúaÖòF+ÕÚ ø¢ï¤¨¿Ëº?áý÷Gý’He»˜›¬§× ô@6y•H= †è¯CÕ2. ·_Ø_zbéxùñ8'ÍúÁ|ÖAÀVÑŇ©ë¶kŸÂÞXü/žZ²¾{‘‹óUîW3ç5Ÿ:Y%ƒóšG{;Ð}àÃýÿÈQðXMsø·ÑÔ ÙƒY„!zÐwÇå{`¸šÊ¾½ë<®õ­nÌÂæVœµ‚lî:Å‚6¿ ÛW!q}°i, \ðZ¡Ï—.0û½=/M†l/x±ßùF5Øw½âO4_‚:8+ÝùÝjhÂònÐ,Zk߯FÛ°:ÚKÏ–èÈ©"JÜêlû‰Œ¨ ã³$%Fl+ÃF0j6>Û í µ&>|£¼ŒºXùHŽLzù'ïVšóÁŠT%9¨€ŸàHƒûDT=´‚ÂËÚ\qÛOÙ[Œegm0²LÁT²cr3¶¯–/‘7·™7¬¾î[é]±E¬ „;‚’~XËÄe‰¢ðU({ô-®Y kZÀÌ$¸—úuŸ”ÎÐ÷¬àyêFo˜ÀœecšæTî°øCÂ5¤dÃe&Ãd-*— L^FfoH±a  \9ü‚W¬~v©‹‡G7ÈLtâá—xS{fò˜2•‡Ö¸ÔÏ‚×k¤à¯$Þò›g¯å·ˆ Ø+ ©D1íE‚dG¼$89$= úÓy&6ÓL*̓…¯ù -‰À pËÖÈ¿“kÛ´1eÞé;YD ™ý¸£O¾z£9qˆcÝ›S+ÿ’Çg:™À&—ó£{¾Ó[yz1,ëkß#—Añò[ÜnÂaÆ ovDÌâ×®2¤¥XKò7á0õɧ†¸Æžæb 4$i¿ê4õ|Ŭ#-RÃX1œ*¦ÖÀOÞë….”ë·wÒÍÍÒ‘=sr±g$ñeÔÍÑÂ!j;}`Ç»W˜OV¹áˆL•mS§ÀUžÄkHê°‘H—ÙÔ²tâÛ¿ïúj¬¸›þd,»472 àxX½jÄ0`Éj83¤—ª¸(A- ®uIS–z¨A ¥²ªJØàR#[Á'IlØÜÙÜ‘Cc½9‚cù–<Á6¯nòã–ÕƒD£Ϧåk¤ÙáF—¬=µ´Üú눕zÅ7'©`¸CáÊ×Adz‹*òédáE´Ÿs€û ¬CFòiòYÀP£´rÖ1L5°ñ[c§|gp"Øs,?lGÁ˜äŽ|ŠAz†bLaw¾Dh s41QùõB®>~‡ý~6£ëF£€Ä¯¢…HmÜ?ͱê4š<Ü4^£ zf'iB8Ž˜npÚBØ$AÒz_ ‹âg;Keþ)ó_ûñ=¢½={C)†§Ùæj†|wÙ´Ê$Ùþ/ö[ƒ_pÇušWqE0®üÄãyk‰ϖ9–r¹î}_ƒ'¸e©fwKÍ~ÈŠ\%Ò%czXmêÍ«ý).Þä`k–g™P-‘ Ç¢?Äç¼¢„Uvç2bµX=f¿”Z~UÃ5Í&¶M0ÎoGJà W’=Ù%sáŠD§©K'ýÎ:ˆhSæGH 3(dHäÙñî œÂôæê«òQ–0½àœ–©ðì¾ V‚²Rg謞ØÏÈ¢8aÞço)í¿9Gޏã¬ãöêx=3ð{-\¾úÿž ÚUx¸>)*G~Kv¢î_f_ú/5²™‘x!—P´DÊuzãòF–õ ½ãqT·A<º[|ÙT„ èÇ‹L'Œ×GúãŠ_6“:O0܃ÀgÌÊI×´Ê¿5¶³Ü)ÎìhÏDô /_75žç\£À,?c¯â€Þ`H“ÛäwžÞ>’.%áÌ ˜ÙG¾ž$M'MÇèRxŸcl*wÔ«„rY&ƒ¯wàðL”G‚ƒÀ©>½V7l;Õ UÍÿm!¡Ç3ÑÕ&Í­Û”@Äœ8À¶Ta?ãÇ£ UvìHô“ÂòÆÕ·4Ĭ¾ÓØßÙ]#ÎÆÂaîÛ-m0¦ÊÃE°–ø…[»TÀÍ×Åñõés–wJÈõ¤2–(jjuî—õ¸òβ&b³¥fU9öî “¶uQoDÕòûs+¾óD˜]ì7Á~ã>d°{Ä1¯Ôõ² Qß|1‘Y×éqöþ}œ&ö Â\¹]ª,ȹΎ¤ç* R±â¼5H•ªÂ|ÎÝ š!κ 7<µ»ášZÄwÏTf ¶ß-LÌ/,<Ñš–dŠ^>È¿¯Y8æowØ¡{œA^?o$¬éŠL(q¥é²Œt5Ú×N¢-ðœjÒV£ð‰a’jØ® í®|È/2M°/C’g¶Ñ9-2Ùî,rX&Ã|và‰ŒnÜÅïÚ}k¼!Ö3> /}²ª™\ÌÀ3ÐÈM¢ã%_* h:‘m÷ËT4a>pà;L>®}¡ua  ü‘|óͲKP5àÛœX£5"/ÛvO ?=,¾²ÿÉCÀå¼ z¿d¸}¡SËì>õq–“eÒZØKO ô\^RjêÙß¡Vo^3½R L!–ƒ©³/Mû‚é׳‹–m’°°o ô’¼¤—?öm©±.O¡—àYš~›ÜðÓ\Ü,>àpndµª„̦\\Í•l ‡á6ywˆÑròˆUÙ|ÓåVOŸQ;/ULã9mr¨ÊÙsÏa²¼W7ózž m¶­áº‚¾¼B°z}鑞nÈåúÃLøÃ¬³a$m.iÃmDMó³³ÿâXÏ®-±ÉJ¼L Øv «sík°döšg ꣣ð ùŠ,‡¼¶ïØÚž6ìÑÕgÙ¡,ãloz“VOÕÖ„¾Yš;Ó0Ü®7Õ[áÊru¥÷S¸b’Ä3g¶AÉÙ‡Ö²}:BòH£š¡Üd•ZY³ÂóD¿ ;ò^ŽÂyTæ}€º÷N­âÖk È·kHQs=jjß°_”uC"…z`=–¤+'ú¹Fm±5ÛÔa:ôñ"MµƒÞTwÃCö]v¬ C‹,Øð&uNû0·ÎD ÔX+@ßëé“uFe¡? ÊIZl¨¿GlÃa†^/ò(ágy½´.ð(f +Ðõ£þ¤¦Yûê H}4DºÏõF6CV²·ÄdùÝL”‡!ŒÜ$å"sA²9¦ýPÃ*³ÇÀ µÓõM$ª¸Ž~qvܿ҅łàtb[ÃR'Ë.÷C©sùSà jœšøãˆ%×kÛ¤8m2 ©$lq<ÝxU©µY'a£ñe3âOwü¤¬¬(µ:6§h3ÇHSY⛪nTK ïYÒkõÆw©‘H2ùK´g ®üÉ­yÄ øøä†<â8BG¸¹Â:ŠEMþdNCÌS8=BÊÑnø Óú• kZùÚ°–Vç¶©¬¨{_ÒZ|É1(šD0 û‰ܹ!êäì{EpÆJý•æøÓjãp;±ØLhðt›†…b‘7ù/ ž]³V%:3PY_ÏHóz#N°è$Ì,ð—ÀÏÃE¡¾TUcóúF6–Oé‘»úyÜ¿£çÜxÜߺ·>š3žÕÚiñ©ÁOäBIôÔ¯ÐJÛÎkõáPðèѶ£^Da^l›QéQõ=ìã¡~M±/ÌP±a˜´ƒê¡ý“t÷ôbÄ£3¯ýÙ‚åg¹½”2Ÿ»™%ó’št²q–Ú¹"8·”€Ù¤¬ŽVi”ìY`-E›}aíTãÐoL"è£Ùâ©­_v¿I{˜ :Œ÷¢ãT„Šù­ôå;‚ŸZVœúdD7ò³ÝžD²R¯îþD£Ô`ÿP„'FWÁH¡¡þºÒ]RŠI˜‹s;Ò€¹EûÌ 3åŸÊ|^Õåÿ@yJxOdq „Eª¤\Tw̶¡ Ç96®±ªC¢iлÁ–N /^€Åžb !rsô”yÄAdÄ> mê}/pâö“rõ~ ƒøº%¬3}Aï³A<Á¡ÖžºNXcbÞÙŠ;jð¦2½›Ã£{›“›þiðÙÔƒ“¦Òû«)Ú«)³,¼ZR@Dß'ëbµK奎þOÙÅrÆä’ÔÒŠ,Š”ñ}ýH40±×^ìŸsrÓµ»è%x§¤týÚ+/3hÀÙM¦ØMËùcP`Dx)ú|pðõØñ—JÜÕ" §PæØ^çá½.ž†8öäW¤këtS' ”…ÕÆ‹T è”þ*cu1Ú‡A!ÏÒÐÕÔmuÀ²Öî%Ǧ·eÓ` ¡EEÉ®fná‚ÉMsubu©Àn#}o‹”ƒÿ‹/y)=áÖH´]6^N¹È¥@Î’K‡J~ož~Ã9SÃ&ªìÂÕûˆ?J(wAJc÷kŸŒ(D“øsŒÃ¶7"©EžZ}êúňzÂ<¾*Ž&W¦û, £‚QOžR=ÿp»wjŽH®üŠ˜›Ú€ï˜C ‡.…½P’cã~T›b¬tÞeRÉþ¾ú ìQ©z ;om$e¸A¤FZ`P¶Çñ÷P‚bYq|bM×ÍI~DªC(_Œ¼0a ¶Ë!銇´Î'õÎ,ÁËóAøÿÿO˜XílŒ­þœÍ\¨endstream endobj 85 0 obj << /Type /Font /Subtype /Type1 /Encoding 409 0 R /FirstChar 2 /LastChar 121 /Widths 414 0 R /BaseFont /KCPFIE+NimbusRomNo9L-Medi /FontDescriptor 83 0 R >> endobj 83 0 obj << /Ascent 690 /CapHeight 690 /Descent -209 /FontName /KCPFIE+NimbusRomNo9L-Medi /ItalicAngle 0 /StemV 140 /XHeight 461 /FontBBox [-168 -341 1000 960] /Flags 4 /CharSet (/fi/hyphen/period/slash/one/two/three/four/five/nine/A/B/C/D/E/F/G/I/L/N/P/Q/R/S/T/U/a/b/c/d/e/f/g/h/i/k/l/m/n/o/p/q/r/s/t/u/v/w/y) /FontFile 84 0 R >> endobj 414 0 obj [556 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 333 250 278 0 500 500 500 500 500 0 0 0 500 0 0 0 0 0 0 0 722 667 722 722 667 611 778 0 389 0 0 667 0 722 0 611 778 722 556 667 722 0 0 0 0 0 0 0 0 0 0 0 500 556 444 556 444 333 500 556 278 0 556 278 833 556 500 556 556 444 389 333 556 500 722 0 500 ] endobj 73 0 obj << /Length1 1647 /Length2 11589 /Length3 532 /Length 12471 /Filter /FlateDecode >> stream xÚíveTœ]“-î ¸5\‚»»wo qèÆàÜ]‚;Á-Ü]ƒ[p‡.ïûÍÌ7ë»wþÜ™_wÝg­~ÖsήÚUuvZMC¡ªÎ,fáh”vt€0³³°ñ”Aöf®`5G{eG>Ef5 •«ÄÔð†q¡ÐÐH¸M! GIS  ´HÍv>>>€„£“§ ÈÊø ©¦MÏÈÈôÏ¿Lfžÿ޼y‚AVÚ·7 £“=ÐòFñí¨ Ö@€%ÈPQÕ•S–|QÖÈ€.oE¨ºšÙÌŠ s H°ttØýc0wt°ýU˜åK 0€€æ 77 ‡9Ðé/ˆ àt±Áoß`åbêy;ˆ#ä`nçjñWoû–Ž'ääâøfaÿ†½‘©:‚!`sðUURúyB¬M!ŃÞ`€£å›¥…£¹ë_%ý½Ñ¼¡Sz@þŠeX€ÀNv¦žo±ßÈœ\@§á 9Xý3&€ ÐÊÔÅ¿Ѽqÿu:ÿ¬ðŸª7ur²óüÛÛño«ÿÈí,YPØ9ÞbšCÞb[PXÿê9KG;Û?ö-\þsºü}@þêú·$L-ì<@KVeGÈ[HÀ‡ÿ;•YþçDþøDàÿyÿ{âþ«Fÿéÿwïó¿RK»ÚÙ)›Ú¿5À?æ àmИ:Þf @ð×°±3uü5p@æÿ›«©=ÈÎó¿rþWkmà?²þ7Î…ÿBÌÁêM!fv.®lƒÀÒ  …*bn °4µ{;¼¿÷5,€.v à›ÈŸï›Û¿`Ö s[‡¿Ôàút°ø×Þtû»VM%=m=ÆÿbÚþm¬úÖ O' àß"i+9ZüÇâ/*qqG€73;7€™ƒ‡íí2¾]G>NßÿCØ¿‰Øÿ¹V2…¸€<úl,ll쀷÷¿ÿþ¹2ü)sG‹¿úHbê`ñÖzÿ±ñlîêâò¦øßÓà­ò_ÿ} €@ 9Êò‚£¹@°MZf:¤?w`LR¿÷;;ì@ˆSIƒFQA@µc·Zø&_…ÉŸš–oü/­žóGNÏ»ò {CßñìèºS€gù$¾Tô=Xk´í<Œ{A¬F%èéÇÚÑÞçsŠpzÜlZ{[cŸÔŒŠÿ N´tA:¿§ r+xO}ç„ágžZ‹ÛñîvmáÑ1mâ¯û;º¾áÁþîKøž]bÆœXd78tÚ¨çb=Í ï/8Jг\+Pdéœ=i%­§PJ26á(6–Ž Ûw ‰°TÞóÈ/JáÈPugõÜ•¥Þ¹wÇû­IÅ(· >câZîôœß’]±lú–/ØhæÔ¼ˆ¿¦F:µ`k…à[ó_yÁ:Gâ:ˆ8x;¨°º« .1¯Þhz NÞ éT{ÝŸŸÚõS|—°M–VmôdüeTðqlŸ‚/&/ŒJÙjbk–ábÖ6¦•$=L#9!ɇ¹€ËT™8µöÎ!\{¡ÂQù!ǺOa @ËgªÃlÄô_å£õ¼ÂS†as!¡ûiOýóf§Ù‘È'ÂåÄäl0Ô5€^Ú‚£Ÿ-ç•à†x%Ò€:ºW„A8Ûv(œÍФ‹^Oi^ç—nÀcð¯lˆáA{iÈr›Ëæ-Û©òýt¨‚ ”ßr8Ôq.V§aìm²¢§ßØxú1ØãDÐÂt䨜žVavÖÕŠbˆç‘Ó—Nñfï`-ùä³S‰­Ÿþ`±ïø÷x§öÔçÝ‚«–¿w')éÁJ¿KÎ5dõ y ~`äpDH€;¹{ô†ôŸäSÒÅã0ªƒŸ 1‰©§°[zìM´H·{•¬½$ËÕ4£‘Eˆ‹¿7É]Ëxÿ!aÆUe†s¢¡?ƒî»m…×.Fìz?¼n §[0‰+rX³†ZŸª1%óaÞYÍábÊ+ÙEõ)ñHßMÈŸê­ÈC¢ì€çµ"ãs²ê þv‚4ïc¥NºA±Ü}#Yõoð«{5.†ÊZõgéq‡¯“ÑähÊÃjÃò³„ƒ¸—#mí¹nhåŽxV`Ã¥Ðüåf*„b†ñÛZ%‚á¶šÌóEÂ]¡#ãZel‚ºs“¢)ñv£"’«R.TïðsÙ²öH JÞi·{ R£Ì~†Ë²{hIwt uÈÆ¯hdCé^u†û]¼mîå:Xj‚V"xK§³<¦i/fBÎÖØWjYš`s_×ñ®u‹ƒ—wÓæÍýVK‡9E·Jk+½²˜_6EQn>Kâ-·©õR«¿ãÈ® "Çï™ô®*ÈãÞ­~qˆt}ÍiPhCµ¦0/õ³*â2e3õ®ZKI¬6óvƒƒBînaNBBa˜ë¬R×dÎ#j\\•6XeœŸ1¨¦^4P <¢™í²Œé«}"D–)fùnµŠ¤»Ü&>T -¶‰“æVÜ×Zs~Dîð™ ž#·vÎZ›Ïñ²\ÓÙ"¤¿zçQ«¤ûIÚÝ53šSqï6OMüÛ#óŸÎ‹Ç6³¹òTƒ ï€9ÜΑêüPôÞçp"¸8d¿º$ý‡µ{2ÃáFû¸†=¬½ˆÛ½øGÝÍ/½RÝ!cEqç‡!Š„Ÿüs¢ùG„zµPoï•“—¤£@³G/¤_ÆY×}ºKtãJüÚCwFʸƒÄñó5cÏ/d jâÌ|‡¿Wöªyu/H1Üᲂ׈°«+WÖCDð;ß™Ç;Ÿ°³ŽIÖ»GräGwu®÷r9z•sõûšƒ!3«J‹$¡lIÂdpÉa×(SòÙ–ƒ÷hI2Ã#4j±£‰¼Æ‚Y¦ì­ð$ìe¬vϽÃyº(M;œ}ÿb™êNqW‰‡Pnˆí¶ú2€WÑ+_îHŽZd)îëôüÙìö~ÛwÊß;ãÊøï'ÎËÍW_s-V,4®h%ùñ¶ œ2z—?`ŸØ?ñ½2¶CÚF=‹ì“ýì¶¥ÉΗ'œÿR_j·äæ?£Š±,S`þ:ñX/–µë]5F†q<¦Ù”òJEäÜñ¼]˜ï؆ì:Ú®µ²ð%"ºZÈ2|î¢ÛÓ¢¼Hšêðåì:+ºIAJýL[à—îPÍU3¯q¹ïsì8ž¡õ9"°(Ù4ælÅ ?µ6jz¾D×ë„6]1…|³%àÇ—Ç]lÇr}® úŸ‘ tÖxòZF}2i.³Ã¿Û÷sf<¦cž§žvƲ$ÉoèO·‚3£O¢ç¨ ñ§œ¸k¢wÁOâ˜3MVs BbLëœ'd;kT˜ÜÓ´D¯† èËúVQބն¤¸>¶|R·‘l,DƒÎÄ„þúN¬•”þsmþ‚_z–ÉAÄÒÏXùxsjJ_I_Ftv2¬àTË\ …—WecóÎ>F®j…­µf3 ¨ |·?bVý5ž}.»ô=¯Ê<tI.pæ´à·“\\Êà1¸˜Ø¸¼œ”örè'•O[[„,ÞäÌÒ’tVΖ;<´¤4yŸ€˜ùMp{‚úèfÇ'ò‹ê5‰¦}3:±k3SƒÏåÓ©\ç¹–%Ó¸Í'Α––Ã'¬Sßq¨Ì†ý¹†-›´ËC†¾¯ Á6r—%3LyÍûõ¤+RÂV/ªÓ§ ¡èµÈ×-æjÑ‹_˜>¼_ü•W…Tðªiàkç¦ Ïü©¦ÌMj©±`,ìw80ôôCB‘‹H`fÍ}ŒeCþDGY1Ä*.#‘²—kå•GS ª7ªòõ AçZ»™Wº©`µ×¿lsÌÒ:U ¢pxÅm™$Ð2–CH7jš†-»Ýœ ]T!1 \ÀÁwB£´#½—¿Ë'”ZÛÞbOUÿÞ»Z!°ì®ìù&Âe;Û÷v$vMWaÊ-•• ¤XŠøwüs½s~ÉLZ«½b•×€OBì›î¼;Ù6Ãâ¹D\ñï[;2ïÓ®UuÀݜ©Ž¿UéufGž”úS”{%,ûzÈYC6[M¦óòÎpÉ3L‹c{Ÿ¼4¹á{œd  FÑ·Mž¯ëj&VW—{o‰´ò‘^@òÑ^ä_¿ 8 JØMê¤Ô‰¥E¿š8å{ˆ»#zúa„Ã7¦¯\‡üŽBV|üž8S­Ù~•Z›ïð0‰®>Ùúñ)¶tõcŸ®æñMvĕø}NupNä­†^&2«dÀàDÅ(d,.b6\Õ~pÆïX•'°·¥’ò;•©ÆPq<ï^5ˆÑñ—ÔaŸ êïr¹u¦89"ÙõXçG ê±‹7l÷äpL?Ý·‚ÿ¾Iø¯{l‰L[ÚdIýäâYHH몌#"'˘å~TšpŠãd³”§Sø—,Ÿ÷[«Ÿñ«P¹YGRHê³gm28ÜÙWXÅÊÍ‘q]X;L¨Z tŸS7~"nðj,@Ÿˆ{ʼnõÚ*ûªëMïÑj¾ {DŸÑvmV½—d3ƒ›mÜoÂLLaà rÍàV¶D ê7\;긴„ï¡?w}L¢ö/u©3.¯pm Ìå˜ÂLo„[Ãy0 Á™$ù#L°6ùûu h:ûÀ³"Xžcâsµ"}?p›ÿ2žèáup'i¤4J…´´‘•bªãó¥xiíÝÚ°î×ìD“/–Å®¸ž+ š=ü)[ÆÂÑj×ðQ¿]—¤{w²Uø«%ázz¸®HØûÁÖŸªÛùùŸ¿ û7ÕnºßÕa«8! ÄÌ¿ÇÝ,˜’ùÑš( µiƒ/Ž¨Æ‹£æ¿»(5%· —„:öš(,¿pn|óEìL+d}匹ÑyÂo¦± ­¤›s{·P$2Ã$7ð˲aÛÏA\EiOÈz¬êYûAÛ#]­oŸ€„tzc–W÷aHpöG®&ÙØÖ#s'ž«ññv1¦­2ƒ\«%$wÐØøŠF9<{puÁ÷7iÆM¹ŸÅt ®^µ¼ù=iÑ7g»ŒÔ®¹ÜÖ½ìçìEó®Ðð/Míy'{S("y°?³ö&”¿%5ù9“`ã»›í@^ë§z¡#ZØ2ö©hý”üÉ•{Œ;}+“ Qœ\PÃ{a±;çœGÕTž\l7ió÷Ãö,Í/…Š«Méö`Ÿ{f@Y4i¨”k3ªqðú2l•R»Áx¨(”yò(\û5j6\ו)ÓÐÃÙLU·¯ ÁœÚÏDBi°åG—iÔ&i€¢1JD|ßôB}áXLe’*FÖd´$„ƒÔ–óõ­Ð„"åo½._ôðññw™&›˜˜ ×…àÕGêa—gko\ATø?öئæŒYW­Uú¿æüh7V9aˆýpNÏÅëÇñn’ˆÚ—vU'ÙK:>¦ªO•Šª¾$¾T8wì(\Ý·È%$\JÀáí{(¿ê4ѸÎö^¯ÿ…®ÓH»/SáÉ=î‡#4œ-¾ŒA ÓÎïžÎ5*-ý­ôL~~n;›ìéÖ͇M§±áËó‰l·©ÂgNÕ°~[LOaÿçÑ<‡Üò}5Åèð¯ ÄŽŽ80zGûnèh\©S`°\À¼šBö çï§éCrL"õÖXAû!ó±7,-<4‹°áÉÝÉ™{Nh8V «eó²›>YÝDGz:ã¿R«€ðBŠè0V0›§¸ôlÕ¢ ÁtLWf/Ŕđp4€’9@_‰öì×oÉÔQjKO·“Lœ‚ϦülZÁAštõö¹“.eH¿™Ð–5C›øªÇ&ö§V«"ÈêZæ{«Ž^^°P%Ò9¬¬•;y|HÄp´µ¹¡!FŒSÒCKdâ¥"lfTC^s}ñ.‹¹„ÎPþJ2¥I^]85ßfš±Ä~øRƒòu”ñ?kO±P°¾@våÝ_Ê~ˆÛÑõ|s¢ˆn%âk–{¥®_ùƒó(&MOì(JòûLÌ‘8CÐæf àn¯ÉJ’:¢t®qiûèŒ×ޏ0ø[û[—q¿—”w ÇÙXöÄ„P¶ŸÙ—Ý)$?uxnhÏâ•™~TP(}¶Ú>±MøZ¬}¦'§ŸéJ­ª>„j¬ãdVt=påÍ|û±–-9˜kOF0½ó\,$d˜G,Ç¢¶8SnšÉËßaš`¨[°9=°+êäa䪌mGwû¦ßëyÙZÿÞ!ζJ’ÒÅ9?žIŽ÷Y×pmhfÝîUs]]ZºÅ k¨’GBw‰€ô!Nk6•æeå!ê}¦ršœoß)å붯=Å>+%÷bNÛ3"yÓÃô]/ÚtÖHË/ë¡ñÑ8ø’yÃÚçŠÐ.N]G½»L89”g麕"µ÷±½jϵn¿s,X#ñxɤódãè²ô{xGŒ 8^„gkÞ"Ë y¿Üísúûu¤P¡í/©8e¤mÑ”Ré°Nx|ÄhdüE;°LŸ{}Õë×_` î3ûé9ç¹ÆU4Çš ¼òçUˆib‘U^¿ ®c—W}b_ð"¢Í4èWuQw»}±¹8Âo¬1+·µö¦?²×¸@E)¿­',)6µ,î@.v¥{N¹rYXɆFš vÜô†d¿4,mß[#Ç6â_|h`Üùý%Ç®]öÈVMMUògøAŽ“CÁ/ºøß^·åÓB(ECìªüïÜË0LOÑÐX”É+ŽíÅL•`]fÄ]aíù(Û0œ$Íè-c‡éÕGÑ÷Ñ;¾¥r N”Ø; aMx„inkê–±;Ø™`¸±¨¼™šÊžW#1ä­šT'Eh±KÐú¾oNyçK"rS¬ÅÂЇü»ØÊDê§®É5){ÎCiÉÁ4âáó.ü"QeíyeæVÂЪÀü\,ëHÉhHfƒÕFJÏÍû&í&Åz_)-­ÇðtMrÁá]B*pY¯¯Ì Ï·‘>2¢Æ¢½{÷ð¤{ÉòOØä<º!.j¢ yƒ=á—Èå¯vó…OaÏ´V#¼Ð–ŠQW8ð)PÝñ ð˜_Ý?«œYÈÚiœM<NÎç—Üþd"fç€Êz‡:´}E¾$rƒ]´zDé©rñ O5Zh>î‚Û#=^ÃÔÅ‘œ·¼ˆ“SåR*Ú¿`ºí¿7ÙÀ¢žµ÷ØßÅñ#|ü½1‰¶Ÿn}!L ôhñ¡ü§Q¶×Mµí¬ä»ýÙé‹íçqÞÙ·ÌAkïk‡‰WgQÖò, Zð~Ot«‘DÆ3!4žgdüšº(ü$ýc¬žE\W*ÜÚÈÇFñ3ùSöáj˜i¼[tW©-I üè¹´§ÏÒm¼Ú±±F~z8$ëÑî=†»A¨õÑ‘ctw·‡p_®\Œp™ÎõÇ 7è¨û͸š£ÂA§Ë„níè×.ëâeC¹é=·+‡D^Y‰•›ˆyr†ðgj ”E"döóÂ*gŽëzÅŽ[rÅ0ùuÚ#_ÇÒŽ-g‡…™b;š¼¢šÍЉE} 7 ÄC4¡¶·?ë‚üÞ°6 ¼r¶ÃØ),5é‚®Âúàççvæi !CÏé3ƒ4oHwÁøêŠ|ü¼ß×'Nëzg™ý%`8‡+;ò)ï‡ÝI¢å/•ÊbVËÂØ$Ä ´°LVçÕ<þÒ)ì³bS[rÍMR…ÀJÍ$åñ†Ö)†ëˆÔsâÐa“¿ýĔӈ»Ÿ»þ®;1út…Ñ/_ñ×¥õ‡¸È¬ŸŽ½Ø˜BƒiZ[Ýg—aꨙpÂ,õÛßqÆX?4zYk4/Õ²ÎØbL3ƒ×–¤‘o³ITÎx( îÏfÏð’!œ;ÓúHé‹YöuDÄ–>1¼2iÚÉy»VO/0tÙ͸"ÄÜÌv–ì³dCÇOê§L°-‚¤òÆiâ.Cå':9û¶b<·ÇưûÆö;™/X¤q6󌙺(ø¼{ì ž« Ñf‡qÇ/ÒJEjž5ÃBöµÉù쑤,ãú2.Ev‘YZߌšŒªZ¨K1Â=Äñï+š\£e$Áƒ+¹ÂŠßݹâALŸzöâH¿ôÊ8‘ÖoøÒ?Y"p/ ž.égw)ùÐñyÖ]!•ÿ„lÝz÷å³r &)±ß’ž˜ZâYð9Çwã¶ÚÉ4éq^!^íK’ ÿׄb+8+2­k’Û$tó/‘ö»)~ŽŽ~0š:óô¥m² `ŲMë6a %·O¢ÌFz"/´"kp¹k„ÙO´›?C›ãêE4ãˆaH\õØÅd?÷fYÿ …çúlPÉ£ÛêF•#«+þÕ`7l³>é–þ׫æœWÈæ§ÜÚ¦þγödY)™@¦„\>ŽJZ•+úRâ„VZéãÌr±6FÝX1¦ËÍ%$TvG÷Ì™ÍF7ƒ1þm4¾÷•p¼F¬øÀèØÑ/öIW9­€*­¾±uï` º÷’¬_Ù1}XS †4ñ˜ Íóg…#¼ŸáU.D0-|ÛvcÙÞ(»R%¸ßß."2¡dOò¹#"S,õ3î§)Æ7 ìÞ³ ]r#>²]ém®Ë^ÅÉ:ì ûWÈ­#ç»ÍQ_„8•ûÁ'å Äãëÿ°¨ sÍ*ø8eD<ÆŒŒ™ë<¯â` Ê ¢ˆ ýO¢Ý(ü²7èÌŸF©[)”¦¯kâ¸ó`¯‚^fðaEŠÑy­n:“ ž\Ñóûûî# Be{ÂöÄ‹ –7°± ×²=KÅWÆsÇüâ+ñærÏC"ºbXkø ÕÒÆÇk)‘¥“ÞíÆ¿‚„|Y>ƒjðCæÕ­WöõééwšD}Aˆf½šî]tKÏ]ÔgI#z¤PLÆ—!%¬Q ²vsD'ðdaFåÑbX¾`~táp€F«A¹ÕÒ¬;‡w#,Nú= ˜båPŽÊ!x†l%Å©€½Ú(ÅþKðÀñª>S*¼_Ú'|QOØèÇ;±tØh(Û§*S./×Ý ¬oCŸû¹Äã4òXšk¬[X$_Ð9‹Æ’ƒýŒ°wa*!å…¨¸\;¿GU8+Uó°ç¢‡¿¹"PÚ*$’ÃU‚yÏÔ}ø‘¯¤q˜@Šàí¬!Å0‹šLlA^Â9\‡e·­~¦PªOŠó#¶ƒ!¹ÉG¯¶¾Ñê’|*–ñ·ç˜ŠÜ{2áœ\‘ú5ÎtTPá´:@”v—¹Øfr¥ó[Ö„…©°$²VŸ83Á²Òâ¬;:Ú+ñ*L‚Ë:½FÄh]{x#úœ‹¤€ #iŠ<×ÖFbޥѦž¦sÇ´,RŒWyÏ1qJfxÛCÞvŒG?¡ÿ"ujNºFØï)ðT ½™ÍXYi;yOÍ1ÒC–ðÅ?æ÷…áúaÑþ÷™5JQÄAdFfìÂ|TëúðGe72´0²ÉQÂkŸdÏó°OÙE‚è9ù`M"&2á«ÑÙ—uîˆWO©ˆÐÜ\ñjië¯Â]Ûæ›ýj Òü½N<õÇ@fï¯ *ÇËÞõl?yTŸQJ)Âjí›pù¥HÏ^+)&$J,O¹p‚>váÈÚû']®¦ÆYxÎq"ÖjÊó}ðLEMËZŒJ=á2FtŒ-'l÷K%u;óæ@9®/ h2ž¸ÇëvUô¥p½‚0ÒZøØÀiéà]…,¨,ˆž öÛº¹ËÛ–I«‚ömžI7û§ø|½…hŠ8I¬1÷ók|§ýŒ3 Yƒ-Õ¢OÔ÷j†ÀÒï_*Z’¿‘ú½g@%w»Ÿ"L2Ê2œöÕò}$‰Ö{²Pˆùô.Ô>p÷2†1äo¼N֮Ћ™/\ÄõÑ‹ÏADFò›¨ âîZF²«SÅNêO£™WŸöF ÓRÆDâô66^±dS­ùí=Í]þ§™S]e›ÙݬSÉO@°÷ËKœ×Íšža܇Tb­Û\¯¬Ú~uéh-‰!7Ú?º¤BôÀ’$Õ £Ù‹¥Yˆ§»j#ní40­Y ²Yë a=ÔK“¡$‡“ÈBÒ–W÷*÷ácÏ×µ›w»9ºîÜ…•ÍÀYÑLŽˆwá8PY¥Ê ò¥ÞÙn†Í¨†½çºäþ?«$‹Ÿ -ÓP{.üFRíÑšÊÉäAf§e_ v’оù~‡Œª© ·;ñ£MK3y]nÝØ÷¯zOñQ€\E•ÏgHš{P[®ž½¦¦2Ò&ÉJÄ•RY’ëI&vBs—âL£-fEá€tÉsMÙƒ6Š]6þ¶SS‰º ‘¯”4?‰­)‡KÎ̸dTqÀFüjl8øJC1BÝÁ›ÇP;áLm§Ã¯Ü¡¡I‰¯h«¡ú –ßÔŒ=…_³‹ÿy®Œ þ°_F[á2xÍ2ÔúÔr©*%剱¬âåSN$'ù`„ðÜi͆Ò{ŒÙÜAe ŠÓæ>ñ¡v*_cR9—PòA>ïÔu0‡>•àÔ$!U6l#q[Ó&t–Ûb{â Ãl2g‡¹ÆŽ6;}|wî¯vÍÇã$}X)¤š{t(¸ r_4Ö­S‚[µÄo]d‚g1Ÿ«3»Sô£MˆjîM~I£õÿn3Ö´5óæõš ËS Ÿ°I[³í}ûý%Ñ-e(ñ°"—-:– óÿÔÛ,k,Éd+¨“sødåBðpÅ­r‚œ¿L2N!½ûø×]5X:1NyÍ«³¿†‘<Ïå`x§©ä{©¾(§8‚ÚÄ©à1£ýðÉPîj ¼ylî&¼£S iP'ŒÎ)*l—ißâÛæÕëmbj¸c$¯^ºýý$=W‚r4Äű|¾Ò„d‚Fy;/B² x»îU†5¸¬¼"¦ G†Ñj«áç0/ 2E ýùç‡Ìhdø®oíuºØÔ>O‘$›i%-Žìšœ|£>hÌ.oØÍ-fŽ•üE’Ó%8mÉ×; xM|Õ‚Òt ‰'ü’]etcD¸ŒˆµÄbÌtb°`ðA¹gÅ^¤£€ƒ ÂyžI2˜EŠÝe«c¯„['psbäb„[ߔɷÞOÝ4ˆæ("Šz&à¬nÿ,j¶¤Êo±ðªb ¿•þ܃º¤ºådÂTŽäâln¥&Ä?¡â9Wv$s:øî€!³4­,&âb¥•]±hÞfL#ôõÙ­àV¤¥3Ç Og:$ú¦™Mm´E‘{Mƒ¦m€+Zµ—T¸N(ÞÚì¤'±"‡ÛŠ@y¹…çÈañ÷vùÏŸNf·>rÕ «-àm‘zï³b#L¥:oµ5èÍ¥Mv1ŠßÃßІ´â&¥øðTèé"©_yL-¤Ðr€qÒ—ÐMh7­YËè9)ì`"‡.#8qˆ“fäìB¾F\R— s.žÖ{$™xäGžS­Jq˜ÚÀôá§-„f‚Û& pÞáÈëò·¸ÍJ ànRh€¤/ºîrS)÷ƒÃ»Œ““Ø1Y“âTÎràÇù è)œ,ͰÓ{ ’®§à–ñavã!+Øã•«a'³Ý |ÿ@4ÞwßßN?÷±Y\cv…QâMx­~£æÀ=çZtÕÏK3tàï(Í=’zy“2JýGU¿oî;eÓxÇ•fÆšàôk¼Ï&=ãmçG²DËÍ™˜˜ž‰u;7êg²T`;ÆÀGàœ»ž3­áÅ ä÷_^ûðD3~»ËKó¬¨WSm¨Ë3Y'ëŒwÐÔi²Ò ³ÍÏlû¡rJßjçR¿èQC?7.y)Î/Ÿ¸9£Ùy,w€yd÷Œ/÷!X>ïuE°'“úþ½Ù¾®\`·þê"cí»ÏùŒå’êþËÁb›öòum¢É ræ§ž”úé ëéDç»î<áÑO¥—?Ãß.->£†».ÌctC“A¾^ByÓfrÿ¡päu††É¸àOÖÉÕê¹0 UÔÕ·€422zàF àHxn[‹±GÑ7­ª^zŸ!Ƶ&È.H`?™BT[j:ÂjQÚyù¼v bªäŒ«r嬅ކ cΛÝ^«wì z!Ù*“}Å*…–Ž”øé6Âå‘d(ƒ€pÕ:ªïtFV5Á^w…LøóþX÷eŠjÍÑ&KoüÃYR°MJ+ ûšú®%ù¡TÊ#iåÓŠýf€jîàá,'#!ÈÛpØLöËmHÌær_dº=‚(Ôuk,õ’ºÑBA³ËÕzDr¬b}¨wèMû<b‰É)Ð ¯6:ä•bw¬Ã„ŠüȶYÂÅæ}}íäสp&”u„ûºN¬QŠFõq†çö‡åmÊb%;õr«£*~dSm+vÙÈ‹¢Düœ<šJ…V‡qéÌWzjÁ’ŒËǹ­E[Ç‹R³¬ôfÏô5ÜãMp,8ž,²[­E]¡¬Ô‘“úÎþnj¶¨4D^Øä±ghÛ_Få°| qó”ðÇÝ`2¿¾¹‚­¤Â`_<ò@» ª]<:b±Ë*!‚sVø3»Ÿ0»ãlѵÌ¥HãÓ¸*òðÔ)缎: G '½ C8ÓLЊ{Ç{6Àïɉ]½†KH*¶È‹ÃL¼…‹ö½š IþF©É~ºì¯tﲂ§¼%œÜésU@ç3ƒe%Oô'm‘×j,V,:"Xþä¶ã+ÖuÀ¢3\ŒxôEz2ÑâN´€¼(>§Žñt¡5Âo°Áà‡þÊz‚u'‚©q;¹€–ÀÊ£J ¹"ùªü׎Ôuó8ÆýÕ¤¦›ÊÓØâÛÉcúÇ Jím<ã×µpk‘IR$¶éOK«bÛ®Š‹Ã'ê„ô\Eê¨6> d1GM®2OV¤&Û¿4 w{)6:Wåž~Ñ\-lЯì%-þ†bŠDàn×c~þ±×ŒËºp‚¤¢ˆ™zÉÑbNõûåë‘Ñ‚¼ ßyGۼЙ Ð)>™»KR”ÍðO¥lÁ¦\^o’¯f37f ÌZ»ìJÉà…¯§š±«|ï¡YÊóÁp³Cs€Å‚oTƒ"IõJWCÞÇ«ìmmA‡ ÜÆy[å{ï9&Ú ­UŠ£&·¨u2Wþ»%Òý›AQŠÞ ÚL@Ê=C$^Cg4?íì…:Õ)lÛw†2ßcRÍëÏLða¼ƒ¾¬úsè)lMžs®7¿¹Bûé©ìµffœEgnüJ¨Ï­þüÊ1✣©ÓSùieÀœ©Éé³Dá¡]q.À»w'!ÏŽ¥«ïS€‡•;½¡%ñž.þŽ%¢Qj,ú. VO%ÁŸ¯Lzå¤ãS« ‹ïØÙÙS_$ã\ðXpÄ×ÿäµÉ"°µ…D$4Èû‹t$ÆòºÖL\Z "­ƒðr¥©»žÔLk÷{?u”·Ÿ¼ò¢bñ)¥*µ2{ÍÂa"Ü[üàÕýU‚ÿ£b{ÔÊTÀPG.u Óx o¹FEØÄc³Bï‹áf1«Ç—æiÖrË3766dx?²eó®Ž÷NŽ…8`çh©:ší3¤q%Óëí©û¨T½ê×# ¨…€XBÐA]ÛoÔ”VµZ«gªä†\Fú)à%/UÑtKUÄdÌŸ.3¡5hqO‘YqPGyñǰ@ZZ°ª.¸ÆÐyª´NìôE™n7ÕY‚LˆÝ˜ÝÃÙõú‘:‡ØÅ®¨h·‹ÝnVG\Qtª"¥¤gË:ž1M][((=%üŽuUc9§|ŒÌ¨UÕSjkNÉQ¹¿úh4ÙÏ7pÞ+q¹»÷tuBŠ43Š<˜g´ƒ–kXŠZ$F9Hv¶þt'ÃãnPo'êUMØ©ÃÝí®Ç½Ì>¼çjÕc¼6È‚|tß/ªæÒ{]»a­ê@²av[ÇC[ÚxÙ_šÌ;~¬ýìÐøp2|i€+ —ù¨ZÞ½L< ·…×s÷<ù@¹æe"(Ukuoé0ÜT_.7Kبj;.É}ý}~‚)Ú|ÊšÀ î’ö’s.ÎÕÛ Ý%á™-\[k|™²:BÍüÌœx­GËv§]–‹¿•Ï’vM6w_€ç~Dó7;Ük9úÙR«ó }¯^YóKã*iJ´Á·ÂV»—wÊ™Wä,ï× ¯îý qéЧÇr\xú2MYíHïÌ£ꀜr•ók5±«ä°/Ÿh¹°¸Ç¿€B+c ÞÝæ_3ÌøteXºEh,Tz”5jòÓcO >=Ž”Ë^LµR,ÈÃ8u[ˆ2â>> endobj 72 0 obj << /Ascent 668 /CapHeight 668 /Descent -193 /FontName /UMXZWZ+NimbusRomNo9L-ReguItal /ItalicAngle -15.5 /StemV 78 /XHeight 441 /FontBBox [-169 -270 1010 924] /Flags 4 /CharSet (/period/zero/one/two/three/four/five/six/seven/eight/nine/A/C/D/F/G/I/L/N/P/U/a/b/c/d/e/h/i/k/l/m/n/o/p/r/s/t/u/v/w/x/y) /FontFile 73 0 R >> endobj 415 0 obj [250 0 500 500 500 500 500 500 500 500 500 500 0 0 0 0 0 0 0 611 0 667 722 0 611 722 0 333 0 0 556 0 667 0 611 0 0 0 0 722 0 0 0 0 0 0 0 0 0 0 0 500 500 444 500 444 0 0 500 278 0 444 278 722 500 500 500 0 389 389 278 500 444 667 444 444 ] endobj 69 0 obj << /Length1 1630 /Length2 19107 /Length3 532 /Length 20022 /Filter /FlateDecode >> stream xÚ¬¹ctem·&Ûvvì¤ÂŠmc'Ù±]©•¤bÛ¶*¶m³bÛøêyßÓ}zœ¯ûO÷ù±ÆX÷Ä5qÍ{Ž½Ç¢"SVc1³7JÚÛ¹0±2á(‚lM\Uímíyä™T®€¿rN**1' ± ÈÞNÜØÈ ÐšĦ66+@ÌÞÁÓ daé ÕPÕ¢c``üOÉ?&Ïÿ¡ùëé ²°Pÿ}qÚØ;Øí\þBü_;ªK Àdˆ))ëÈ(Jh¥5R@; “± @ÙÕÄd ™íœts{'€Í¿S{;3Ð?¥93ÿÅqœ€¦ ¿n@S Ã?*F€ÐÉäìü÷rX8Û¹üí‹=dgjãjöOåæöÿJÈÁÉþ¯…í_Ý_0e{ggS'ƒ àoTeqÉçébiìòOlgÐ_5ÀÞü¯¥™½©ë?%ýK÷æ¯ÖÅdç pz¸üË09;Ø{þýÌÁ ô¯4\Avÿ™#À haìdftvþ óûŸîüg€ÿ¥zcÏyÛÿËêærqÚ˜3#°²ýiêò7¶ÈåŸY‘±3·°~ù·ÜÌÕáèÜ€Nÿjí?3C÷7 c3{;O€ÐEÑÞåoHíÿËÌÿ}$ÿ7PüßBð ½ÿoäþWŽþ—KüÿzŸÿ+´¤«¢±íßø÷Žü]2Æv€¿{ øgÑØ;ýÿ|ŒmA6žÿ'¯ÿj­üwºÿ0ã¿m±³øKÍæ/ÿ‚œ%A@3e‹©%ÀÜØæoÏþ%×°3:ـ쀹ýW[L¬_¾üº%ÈÔÚî8ÿ­Ú™ý× þÒõ¯üYäÔ¥$åäþ7 ö_†ÊÁEÝÓáonÿQ‚½Ùÿ<ü#*jïðfbåâ0±q³þ½âaãøþ¿ ù/ Öÿ<+»8<ºëþÂú¯êÿãùÏ“þ‘°3µ7ûgtÔ\ŒíÌþNÛÿü£6uurúKò¿ÀߪÿÇù_szMVíMù‚¬RÒS]jp³ÇÅu{»Y!ƒŠëÕ òüªì»~¤„mó”½U37Lò~´x.œ8¼ïÉÒïwãØÐt%/r‰¾SÐõä¡oP·}eØ`1(FN=ÕŠô¾œ—ß‚úÆõEsg\EÕ è †x²Ý îò‘ÎÂ-Ï‹òÁÅ×4¹.»­ £&ÿä”:þèñ¦dhp ëºg!+žŠÏ ™:ÂÏ1‹Pè›F¹÷/lzáý‘8™›½>c§}95JË? `~ˆ¤AMóCþ‘Ê;ÚhAÚVϾ$Ëì™±òº¾êå¬@éBãÊ(f²Ë§B‡1vIÝ8›°x¨îdµÞ¥èšÑÄuÛýß”®ŒF$¾ÙÎ[æ0.Wß–yqlK;ÃoXN:ä¨I¨öílq¿0¾ôbì/f\ ²£ç:ÿDwñÚ5Eá,RÕéÊ V×ðy–·è¯ªDˆ$h£Óc±w‹™ø>K"³)}Ç*Ù–DDÄV%Ö+ ÿä8ûU!lª¤¢ ñ=ž±|"sº“B¼hXì¼PxÖìGjþƒîM^÷ê:Â}Ž`ˆ kç®+Èx½^øÔt'pË%M2Š·Àê=,Ô½3¿>Ýìà{Iæ›PüŒÆtN³|TÿxiÛB{ñrØaù ­~=mÈgóHªLaøÌƒ’DG€úÌËd¬’W¥FµÄuœÞ1¶ ÒÊŽ»8#—³ÐºX7+V×h3׿£G‘?lI¿=\´~‹Ä|^ÊýôÊ4|¬ã±ð¼&J‹dσn" «a…ª5„·ÐÕÈ(øÂFr„ÌàœÑýŽFÑ¥DúÜMά3^Ük„þ{»i6£7{ˆ&î½ðpaù×stfkR’š#M¥/ˆž0£jëËùÝ*K›4tÅÄ!Òá4ýãð®ý (¿©GUଘÁêÏ›4¸n÷//éÅÀеØmCÉ ¤pü%^}ØÜñZç?(n–cð‚è±Æ) ë<»0vTe²îq–x=ˆ eÙñ¯‚ =íäƒ*PrÓQÛQÌ1Î(xŒa6ù¨âÍnŠ‰Ü¿2dícÓÔ<hŪœk¤Z‹ÅG˜"?†à½’ïGþÚJã:Kßx”Φ|Ð;hV0­!³Æ|ït_Ûà ÉÙ[¯íâ ¹©m(F僛–\]’y—3† n#‹(F}þÄ@9MÐ4§AÞ{þ³œi›‹u¥¿Ùµ—~0Þg-mvÂdã–ý`ØJŸwÍ¿j6bÛ[„M¯e& õ>—‡»Õw¦‚Oÿb@y0Ê1£ßº)½æëN¸¡ÐWYŠ[{ÆÓv#íŽÀ(šÅ'{’äŸÍˆØ»êOX/‚ÞÊ^s ñ™P‡ÒîÎöz\]`½s{ôM®ÎߓԿÒýú µT•ÈW–'ðfF®W¤‘Qï`³ˆzöã©[à¬æ AóU…H- ü,¢œŽúÃhV¤É¨Þa«…LËÞ}~•5&úÕȨì¥QxBÜÅÙrÓâÐÕœ/¸¾s aŽ`ŒÓIoÿ&ƒßœlO÷þ€ùZ-þ÷“ ÝkWä«~{·áîsd¤s¾@BrÿZ UÍÞœTŽ"U'8Í2S¬"g ‘Bƒ;¦¿´VõcKîÀ ¥?U°\ŠPãÝV€/Êv]gpU ¥Æ´x@z Ø Žð‰ÂB3£—SÁÛI™{Å¿Ûñ³u6˹DÙQã'ª¢H¹Fj5iªýc|A¼Ï[VÚ8…ÍXV„BİW§j¨…x BÂHˆÂèEs <(ìs4[Ž dEìvu9éÊLybß}Õ9Æ(wÆ®ç†TgO¾WØ[L‹½uú)äX3VR ñwèÊB¯ÒûÁ¦ÑñS&bÆ#†»¡Ö©.½Æï}ÞÑrÆ6GX÷?ˆÄÞÅkŸÞ7ŽÚL üCÄ+žö×ú=pýÙ9‰gbúçÑKîœw,'Ç£3w_ø„{'kDZï“ÞeÚš ÃèÌøS¸˜õ?£,mä¹ÿà~÷…0Øa JÉT;•]m^,P“¡ ç ØÊ'¸VWü&/Õ„àÔ¤-´à±ªŠk4qMH)/_~ D{ù­±×Q”/G¸nÝ3xüÜa, ¶™Æ?[æ6±ƒ]ê…KKOÁPã$dU«t¡ñGa•Âø ¼ØÒœù }bJñØPYÄHß0¢ýá8½è é[àX¾dÊΤ–+§‰le¼Ð-%n·’­º_µÍa§œÄº¬þïÌ3ul0©qîëwðJXå”JŒ¯+÷ ¤17bcëD%"lý!âšÊ }õõ ½_,ìp*×¾Â[Õ²lÀKÿ\ Ó]†›q6(R˜h0J—`b®ÖÞùHÒ #ýÒ]1‚+jd?|IýºœŒm產§xZªõ³ä’â“ë¡»“9º×2ÖÒ"iPÊÆù ŸŠMÊfù$›DþI¸æƒ°éÏçkÔàB ® ~2òÚia”c𨲧„_,U½ßìV;‚œ xj{«Çå#‡%N §öùÈ9rdë¹9®IíìÏîÂìT…S´M Ôb±nD¯–˜"gÝ’¾!ÄD œrNÿb®VÜDB2+0;*ja…]—Ê 2Aø¦urÄõxO‘„í@'$3ƒ$6&)+Bu–yy ]²>Úÿ±(Þé¿»K 6i¦óOi"ùÍïxÝ —BEüDrt,˜Äþ’KÊ€G¥Ýùeº¶j–\÷bIþbÒIÿÞÁÈŒÔ+ Žîó`ø;^;m Ÿd`ÌñÇluÒo|}JŽðÉušh½Ç9Ž9JAí ¾Ùìâ!ékßÅx#´G&øðŽ´d¨Ù ŒþN4¾$ûpÓÚNÑIµ¦TÇjW~Ôßã°’¯±Bd/¬ §õžWy„®·2°Á „l)µ(£}0í8cí…š¡9æS@‰¹*¼Î³¦Ý’dîŒY@ÒÔBº×X\sY« ìZ6œ¬†Ø×²åί˜,¡u«³ëÄŸO‹WaF$ˆãÀ„È]·7V+4¼”™¢6„åsúà³`uå ɳݮrµÏ˜oLß4£º»w5TW ¿1;5´™’=U7÷³Ä§—Í‹Ä58¼¾†“Ò(FšZ!j1˜§#ûô‡•cY®} r³3‡­_ÄoLÜw\rî»Vú½F›6ù’î`Î9H 6°cpB¡yIñ^£»J«B²±’i~ üÉ5«T%ׯÌM¿ª„ÜXHùÌHTéïyŒéùx²yT •¥˜¼H`SCüŒ°Å·ŠáÞsÀ‰ßÏqÔúæÂm{ÚFY¸ÍÒ,Ïíä'œÊ|!´ÍynZ°ÞŸ·£NXyUH]O…:kɳ“tZ#Lw1®c̃ !-Êó×u‡â˜x¸jÞFÇ •å¢ù)ÜèG½ùSm¨q£°%´°¡´ÊáÎ< hF*°7° ƒ¸’"ÙCâ£÷GET3å¤Õý+‡]Ëëùz+Ÿq—_5³¶ª^n˜Y´ÉO³ýë/Ø‹Tyú¤.Ïh"åaYH!4–)4·P~¡¿c«Ž˜4q]J¡¼k¦îær¡›-IÄoΘXPùÓðŽ˜C œ•š6k ¿LoÍèRú=¬ ¤*:t‚´XÒ. ~ œb…+jœÌ2ö¬¨Ìk¤¡îVÂëyă‚Tìß4‡3Þ¬¤éš:ÓÕO»yø÷G£vQÛÆ ê8à}i<€“ÞP_¬À[×ÝË"Š…¡e‹Jé(ÑÁÿ¥Å¼^ ^MÒõ] t‚½iÝä´óÀƒyßA²Ýƒ††{áçãÖ9Î*CÞ·áÛ™«±/$y=à]3+Ä£knÇÆÄ…ø›–ƒ÷¨)yŠHåвق-ŽÝ>ĪRïÞë­ ²]Èů±™?ÞI¾ÏÍ_Y3Âj”_iHÝ\;î{ôä¹ NoZx’g˜€iYÐDXqÏ ~Þ˜KÒ(ÅÁi½³¾Bš«aç÷oܧþ“À)¡Š:›b ÁÏY¨' –|o2Täcç…Û­ ôú.¡"ÄUnë­ ëAmž÷ýªGüj–Ž‹ZîkÌÞ¸)R7 3’[7jù±J‡‹_Š9ʧ˜üÄz’¼Qù¼9ç‡ýò4òß¡³ñä*äß+a:ÉØÝE¸×Ùòzînh ˆq€#~Å·i+Ûpß<«û£ì$Ž†Ø»¯1‹èÚb4ovjT-îy¥Å€œsÔäa=}Sت¿;5Ë*Ó*ýV »š}ž÷ðã¾Êwð¸Ýkõ¶{öjŸµ•ðŒï(Ñh>*q0£ëÞ´ªÞÜ71À)Ù)F×âûá_—br+V‘rÙÇ„@ʼ@è%¹¯£ìò9ýu[_¯6à ˜ùDÈxw§ò€*cV=PíE×ÿÈþ nïY¢Šâކ+Q-PÀ¥ccsq˜(<ª¹QIN+eO§ñÙ~Õ¬*ç`¥•yuÓQߨt'¼ÜËõKÎÐÙË;;a2=[ìâTÙwôÜݱ•Ú)c‰ÙÔUõGø2ðö·DŽÐ­±ÝÉ‚ŒÇ·{ ßkÞ!dÇˤ AØ4ô~úß#ûÑ}ü;|ç$ ¿k‡÷‚ ˆOÀhùC‰e˜Ï×zzóÊØÁ,.9U¤÷â&ûΈ¶T”Ìá$‘‘Š â—öƒ™!Uu¨­ÓÑ—ÈÍ7 +¿X=îe|Ììâïjðît^ò©&¤ÜŠS({X ‰SvŠÍP=™þôŸLŒÿQg›/.Ê=Þ¢Zk4°¾ÀºÀq+VâÈéæÕ Ÿ\T+g¢:r ª¯Tä…ç¬2† ÚF0FÛž"Šrš0KÅ·}$½g 3 »›¸V+EšË _ÿ&r õ䫇×ÐÐ ¹ýim‰3PÃÊÐâ‡ðÞÕô§Î!H4½¦žM=w³ÿÓBþà ïÑå>Œ„÷J<‹ó­6ý÷º ¡LÛó©‹’ü~\Pë.{á w6Þ¢‚+³ jÃÌU».˜;˜V†Ù’Å'Uéö†Í“0GAʳ(¦V'>Þ¯Ž'h§éV°èÕ1µãh × `)nžöèê*ÞÇ4¡Ù½™Ûw„ÃK¿ûêîH;¼Â%ûÂï:ì*P¶a’ÛçúÉËÑ'Dtu*Ä>•ë›§çQK=þ §ÿÔæ%øž~s—‚ <o´î)Ašfù5’Hˆÿ„ùJ(aŒ¨n,!Ï•² WÅÊß„=úkŒ3~™Ås{ˆµ}[,¢›52ǵŠDümR]žMzB»A|©G‘?‚=¥„ή‚ÓŠòH)rå{ûÏôÈ ‘c>Ç ç0U÷ÛÊÍøl(UNêý¬Éb‘CáM¹hõ­ï»ý¹ä®÷Ôeû•ÿžÆÊa?¾G3½ÓI°º õkÔhðärçÑ*vNh»>!‹BnÝxŠà9Iêž&øâb+¤zäÙÊ chÆ ‰ªDï>¥sQ€<ö„0¡…ô Ý®wN,Îv3‰‚GœóØÕ»¼6ÍÁ¿Ê!à‰äÀæZèbR;·ro“v¯6Ì »)çÏDŸ‹Ü°õÂFYGƒÎ‰wH5 Ç›R@žOwÚe}¥)‡ÎkÓE3[¸¥x²¤þÜŒ@úÜÀ7MZmªÝI,ŒÞ¨[|TÃŽbžÑóóqg •,õþ›·×Ÿúj¯c–[œ5‘`­ÜO2ƺÀ±2…V.ÝÝW›vŸ¡§N˶<*÷Ÿ‡cZԠηÊä tÜL\±¯ªÌž[{ƒúý‚ÕIÞí ú3'Ñß_YR…bc,WùdÒûbdëÀl]µÖì Æ©¹ƒ„‚”n>sš“*‘-°î—¬’ ä"d†1B‚i¡‰,” Zeµ·ÉC2rB6:ÕÑÁ"µ>J]ucDÚDÁf¡~ªHʝ-ÛZ§¹“´’ãîÔ+dƒÏÖ¦ö G¬tyCæ¤ÛƒÓ¡m‰ÒìÕM«"Ux˜»üðÞê÷Èÿ<îÿ°ôîÛ—ü ¯AFG+e*[¾¦‚G‘t.’•Ø ¬Æß^Q!Ž$ÇK’BXÓ@ìÝ¢T]Ÿ$ù"<šî59Ëý& b‚~tom«ÚiV$YìÔ*ÒŽSùÀo·çƒP[’¶‹œß9"öƒ‘Ž©ÕäHýn1Žª#bó˜H'¸B³ÇÌkSÓ§° ÏÒ*å¨t®LݾtÒ€¸©ôogVQ8*žÜoq¶^bßS‘Ö•°O œú´‰\Öy)÷»!NM·ke6¤¨‡¦øÔör¼èú‘×Yïó"ÇõÙQ±âpš¨¶ßÔ‰‹Åø@ÄliFøG«(–°™3jCƒukée&°Ñ3*ÚÚXïò Y°vEyy´Ô«GŒX&"> xjS|'`îð·ÙVUU}¤¼¯2Þº'§˜BkÑR1î#£ŸèÒIq_w õ«ÐÒJ'!°wá¹£H›‰:±zžL³0Æc“Û\“ÆzÄ Ç-Xçç醣¡/OìZÌÈÜvÆ.œ@!ëYÖÒ.+SjY¯¶W=͉~{º¦ŒH¨%õ…³$©;} xÔóQæÂÓ#ƒUåÇç/–åøFI¼Jt­ 4ÊÛÕ´ùƒ,˜#tã˜xÃêܹ K¯ " +‰v E…©í¦µlË»Ks9uBtnòÜJõâæ™E¹ýU€ÇMB[ô}—­'³}¨øB‡u½™¸èÑçDò³™ù”éÎfî»@ŠÛÄ|(<Þ÷ߨ#ª"~{.À2¡Ñ~9EµÑ±‘*_èð$¢Büpº˜Ð[Ö J€ñPÞýxbXÕê€Þì‘«µuj‰ðÃ;ÓJŸÆÀñŸfSÓ ›Ë«Èe"B§“¾ñ”Rç“Ú×Ì1!ûÏ_µ]>ƒ|Ÿ¡²®ŽJs”ïËæ"Š W´y#S¿W °äÌ´j‚ox„Ö—ò&iìy%Ô¯‡¹ç‰µ/NØa2oèTÎ {ñ'"½ß±ÎÔCµyÌ1Ö©Êzâ'rcª¢|#¢Ù-°\nÎÇùR[´r단pï†Â1„g…—Ðéf-™Sl—UŽȰýÔXÝÎáÁ atjoú«Ç¶É“òK™ýbq1ÌdžQÄŒ·º|Ó¼-#ñ;‡ÛÒâHùX©q‘+Tó›/ˆo®6&ÕŒ¡¶3q›žßl·/œ¡œO¬Ü¼Koº0’¶g°ç‡G©Œº¨v·-oÍ ?¬¯á²ÚRëÌ:I¯ó•X&téöšÀ¨^ žå™÷EP¡Ýæ1xîjµûºˆKRZ—ÍëKÄÚëÂa¸,úïs««ÄY•Þ@dÕöÔxnàcÜ¿ÏÅ{âÏp Ns /\s- ^ê ŒÅVö¡ –ë´„“°»w{jSè¼RÕµß쪼Çò-žÌê݉– ¼O–Þ«Þ¿Vã¸Ù*é†öå<žÏ¦àXå~©Ñàc“Yl…Qj`ptç%•a©¨65ñ,©¡tÅS_74¥ 2ú Š=ë(%;ë-X¨o<;7)ŸˆIjÛ–âU…ù%æ¸Òs°Åíx¤V†¨³ôMÆýäó2Ù1„t1Ñây;N7›Án“»qìV sÃTÔÕ¯-oKD‘AOòôf—…h;ê«Õ¿¼aB“+ã‰<^â ¿‰ ^†vèóö0óraxë2½ÛqN¿òø© ¯oøØÕQÚÊžüºë>GÐmW¾…u„/þ$ö.Ï«TµÓ‘¯7øƳ58Zˆ„^e“”Y«„iFáò®ÚâŒÝP3 3)eÛNrŒ_™êæN×o·8d 7Ýϸ¹ AÒÍ2;}{ÂX•fÐci"£„pßö+o…ñ›[Æ,ÑÁÒ}:ÆžJ<¯þRd3frçqéAÆ“NÇôŠí Áûžâ2¦×ɰ†~‹o°f!Ýýd¬S€†H€üÓZ×xqðçï‚`êA&\“t§Ù:¿UüSB~Ã.ÒbÌËEÔ¬f~f+g:¾EwS…«< n®î´µòjx²"ÊÇ9h8ƒrkˆ’a1’dëh߸÷ïYÖ{ÝwxÅ,dxp.;´’jpmÝ…jĸÀšM³x0Œð% 3ì_eDHg§Ê¥þ»ÞÇ“GŸ-¡j'X3–Ütg­Q.V‡ þÿø$±£03Ä3?A˜Hþ€£¡¼µ„&ÖŒð]Ž—2S"O÷6’(1 A&9“j¨ñc7à†œã”Þï°LqõË‘`pÑÆýé!>!PœQ&?ñ³d2J ÕÌe_q¦ƒ{1õaÑüPÖIR€Ÿõ‹R³AǦluêÁƒŠ*v¿wTl$'ùÛ†y-‹•6ÙJ푦û žLú=ÙwIí4£íu‰í`x­B4І ™®V°\x’³:!­0‹¾Eºv'Œ3câF¹¿/Û?B8Û#*·ÍÚtB®p;\ÀÿÎóÍùÉq³“±;„™?¾ïÜåΊª™,¨ò; ç+jel}h }}f}%Ý!Ú<i©ý0y4~#\Ëg¼ìŽNé•1­,o‰C þ£Žc÷iµ±ø4TØé·z!HRš[b´óö÷Þ…3ÛI_èJ'€-‹_ØŽ6ÿÖmÏ ,-uÃÆ‹†gxWUD q†: gËïTü‰Ñ+ó: ¾ü[ä|áâqD¯O¸Žµg‹/&Qy®ïJ é 3“;Ç Å«rÛ?¡<.Ò3øƒëòI‰Ÿ–ÅÛ¤ðճȿêDLh9Š´§*ê_¶®ÑP•JP(§ž¡Ø¬ðøòµœžmÜ­ê!Á%ÌŒ9Áô–ˆ}¿¿¢á‰å£’w°ö¾äƒ¼ìãóW”=š5Ûbo“RìáÄýÎŒá…ÜQ‰À(a÷ 4­‰íŸå 9ž‘}þ–(œþ#ªi;³z*«ÿk4Aµ·"—:ë&óz§x0\½}EIõ‡N}rˆ‘Óíì¯À†2Ð9ÈK¼ÚĘ~ªÚ;”Ŭ…Õ÷¯g^ßÃpƒc(DH$Ý›^XÊ(IÉçÜXœœbãCY•ßìb!0É·L] vNÚC½³Áå8Çñšþ©ëL ­Ô/VG»vƒýh)Æãª];Ê#´Ø– W­ˆ“— œÕG̰{d±)½p\ÂÉ ”{»0ôj¸P%ñqßÊy58`Ùœ—[XB’³- mè¸7«—ô·|L2}~¾.×ø°òBQKËi5ŒÎYé£lrÆN@RמçÌÎåô[Ë‘üº½rÔxAz‰ÓľÞX™Š‘³ªaiå¹A¶g·ê¿¿Ô^ôm7C ìæp3Ú¯PÐ$…p½¥¤Ø‹íÂw”%¿š/÷4ÑÛˆÊS¡Il0M•×/+ª‰ƒ@Γ¿åJ#IÏq‚CÉÈ8Ø5¦ú§×ÆÏKìLY{¶ üÛÓ~Ä4^‘‚ÏCf<-…6ç÷Ö eõa »=ÑäˆÖô¡œ‹ZœD¦ÈºÁ{ˆEïþª±\·o¯ù“ûöÑ·~êó ùÌçée_@¦I¢¿N¿¥n¿¢ìí­­^\ouNÀdòT{<ê«àœ qE6š?|ꛃ É8a¥eoÖ/µ’ÍÓL2Œ³üÞ}\‚º~ï® Žõú•pQh×°úµI*N(˽5}-¬ô:Ç/â?Ãðáo˜Ÿj2‚´œR_žáë¶*xó¦´·˜Y#DâÝp6…„>7êQeÄw½8WÏàj^B¸º» êÂCJ¬(Rš}M%HÜ: 2™¨×5&ö|öÛ8g®p?hÏ“€±¶/QkžÖ‚|8êÜÅ*V‡aTD¿y>e×K”txÙÓ±8w3ä6!Ý;Üœý9ˆ´ÉqgŸŸ›Ç„.Îûí‡Û 8 ©Í Û¹U©Cá80@4¥ûéÞqŸH"ôF¶ìÝÎé!O²¹ø»;¬Éjݽkå|+ŽCd%ho±OzoLÚfk?¯ö§ÂG·ž3î´)pDŸïØ´‰ú˜™~P‹uò.¡µw]Xé´Ô‡tfðÉô(®Ø4ó=rnrzàü.Höüaît÷JYõ™4¢¬G²–»SÃ|X\P í<ÇÚðEA€ ¦E5Ù`ìçY~Íž`öO¨Kf‘¦ãýÄ8÷¾½Ã¿‹‚^ÂtºÁïp>„of@T‡sýZ.÷$$úÕ„=ôùUx¿;•(ß…bZÿ?¶•Ž«gŒE¼ØßHúðØëÀtª'd¢rQÃqþ||a áÒÅ™½F5®}GzOá‡ÛÅÆ½îáY¹ÅH³Ô¬ÐD?©E«…½ß9$$ï/Ù¿uŸ&ôHBWé圮…l«vlâŸ&¾bAõBÆå3‹½È܇Â$ÆXÚú}çŽ$ØRÐTÞÐ݈A1šXif€¾/ãÛâÃŽK .Ò¼’ª5“^É–‰AYè£QÀ×rŸüˆ/ë´îϪAƒ3ƺƒ¤‡S€3'¤*×>–QRæ“o„sîùRÌëifBÊDäå@^ù@c DOzÔ4ÛO-ÜåïÍo‹t!ôT·¶oä‡VÍ^ÃÁxÆYZ‰Æá³&âκ2WR ´{7¸ÔÛK€£…öCZ>Ñ)@×F­ ΆûMÍÜË!´Û½öÙûêÅsõàŠ¨Š$ö™µg¯3žÈ )®PYìnOúž9?&¾‘kˆ†0EÑý¬/†¥M»H„Á<xù,õÇŽK†li]çÂÐÌß¹\¡êÐ&öáUXÓ€{|M&£¼Î[H—ìfZœ›S=—ó˜ôV¼CØ)L¯,Z¦ÚL*),{P,+·¸òì¯ï}òÙÃf0ý¶àñöëKùbK¾³ï¯ÐrãS²Å­I&sL!kmW'÷PŠyûÌøùd³EøZó9<Ñ 'D¦ )jM~S’d'p͇s-IÂØ+Lvä°ðË5Nqž%+¡ŽÖÌ­s)ø¯>¸Â÷ÉJ“v$…“hdb<Ô¸×ACÈ¥—"ÃÁŠŸÐxUt‡ÖŠŸ„f^_˹½7øñMòÜ'ÏRw{¿ïg¶JLH +õˆ±àKçÄÃi¬§9€K¾Ö+™›ˆWV°ÀÕ4n:$úI_}°Ázo?ˆ… µË4Xß°ãP®ñ«°)OZÒñ15S!¹ouÿov8‡¬ý5¸ sZuÅÍÔ蕊‡vïOÊ7á z‹dé&3I1ZVøº~è;¡z• ”Gyí1Vu•¼àD¢Þ†UÚLµ¾0øÍjˆþ°8_¸êõaü'ÌõÍJl’ž»9¨ǃ¿ÿæ=o¶Ì=ÓŠSÕ ?¥m1ºÂŒª´®T¶¨Š·Í2NüFúÊ&'w ®©Ý€ñl1"r08A‚*o{¥Àpæv}HÛ0\‡‹ô|ŸäpädfÝ: ¥aÂ{ d³³ÒÔ뺀R2;x| ”‘p$›Yè& \"ù:Í*Âüy)xÂo~¹$dö&¥Ñx«”g™Œ- t†ß¯ŠêÂðžeíNUªˆÿ@6G|œz<í¯ÐoÔšH®Q·¿§¯²àç.0¾£NdTx±±¨n‰îØ8s\ ýZ"WI'ü¥, ìÜýMú<œ†-Ù}™?ŸÿçUÄô×*°}N¬Ò®bè,¦QY½_õâÛAÝ küí@+ÈÝþŒ-{õFá×”½ƒ}ÍÜêx”£GéÁkSª˜ÃOZŠ© õ/ÌO–‘j7ôÅ2° yÊ(PʺÑý/"Q8X¯e]¡}óÊŽø—ö¢TRñ× bÞ¥àˆñr}&”*,&û?dÆÌ2˜4r·…þ^n' û³îƒ@š×é€všf¶Y(½þ&ÜEÜþeF•]S-™L{±ìsð©á^}¥ºÞ\Ô­n_Z徂ºß|ϧrÕp µ›D#|rÔÙÑݰÂp6§øi¥ÙÏÊdí½¯Ö¾PE ûpÇÖü"oOŠå‘}=¸“Êä¾t†ï ù$Iߊr‰襾ÀS^=†£2žh -?—Î^sÓÛ±–b½ú´z«*4OPàÍœ¨)Á“„·ŽÁÓÛ ¾A²¹4Ñó\tþ”âsÒDCƒ•ˆ±©ýꀀ’»}Æçá×ÜMhÔ˜ {÷IJÎ1R¬S8wè?à›…Ïñ÷öH蚦UÔö÷MÄþ€J<Úq1 Úá Qýqü>ˆË3Á[æ„ÍÔ²ô2\xªÆâºt°ùBpz…‹·wÓTÂÅõLC±¸³ÙWB{w=@åÊ!©xiÔÇRòœèL:’ófDz=ô¹4kKøBÛOˆzè[ðiuXk÷áKþŸ9|i£UÔÌéAš×yôv¼²º6Ws”Ñr]½lª–Öm4%¦-eÜײz•T¨ó*Ý•E‡ в‹:š¯ÆÜkgp w+‡ô4‰“M$j¦’¹u/*Ô5#›h:uzÅj ¸Îj [-;{ÒûÝ¥ã+bÁ&Ü#›%I-¹ú¾møé›YKQKƼÞ&óhìC¦Ù©]ñ\‹Fªlº&ÞýlÊ•Ðú.h‘eßù43%5ÓŸúŽ^‚D%1pàß­}ûȲ’Ô·”œài7yáõ!hj­ºãaФ•c'¶YW1¦#»o ¶©X`²˜#Î\~Q*í[X}ÜÖ¶0"ÚÜ'(é¢Ð•¤Sðm<¾tRS™@£;¤­¥Þùwí­_ Näï7`õÙÚ$\ä^û^(Jø,ÔN­æC@yê앪  ¯¥kk£1Ãáù[ÉÂoå¢Kî”VÔÈËd”$˜0~çÚÇ?-_Çù.–麙¥˜’Œ‰@ å)&ûqgî•ñO¾¡ÏÄü.kO7®R²@ñ.4G7¿ ¨@¢†½ÞõªþÃL1Œáë¦-ÿVÃ?,¿â Ͱ¼û‰¹Úõñ¤ŽÀ‰TÜ6WÔ6ä‹ÕžR~™žPù¢ÖŽ Ð³5ê‡Ïa‚ìò:'R¹È’Ú¥8»vDÿ¥Ž7ƒ=ç˜Æ~ò…¿Ö÷E¡ÎÁ©ðdüï_ÍZ;ßMßO†üq,‰e[oÄY· E\ýØ,fÁy”'ì ·±S”/2¬oÎÞƒÁƒÇ¾£-CA…ÝÚá`¹„´r„¾}… àû­=Ssþ…Lì3›×ƒÈ›JÝ!mdåNr -Ÿp'™Ë_ç5¾X)W–(®ô ÇîbBD×¥qÄîØ#Õ¢Ëhßz I˜ßîþÀÅ”½ŸÁÇ—ˆ0Ú«Ù"®ø #*໤áA—4M\^¿³B3,‹Fc܈LA¡ëB’Â㯠¼qéSüC×FÃ6Ž™òKV(™=D¾?ÃÙŠ“Õíz z ŠmRRÀÖf0ÛÁ2·ÉI(ð­œéViI±ÍçEy©¸'íTv5¾$–®U6|¤;CËJ JÜq úÀ^]ÎŽ£–èÙ{åixð¤,0Ü'ÓN2Šû]…Ÿ3Úëà䬲±ÜT9’Zµï:½upI‡:ÔÚN<ØÝÌîµ6ö]4íçDÕTÑaÛ3Qåå{=ù¡8 ð8]#ÞR³ÑÞÌîšïÍQ-…áV·>*dÇ4ÆŽ«õ8ŠÝ^ˆ/Ýöt#1´øÛÛu(5½xÊmâ9š6Î Žã¦“ø·N2Ó®g¹›^‹Œz÷”°ƒ&7‘Vcã‚eDž2 §¯Š5&¼BÑ#uHX¿ÅÈ ª ³¦êC fc •2‰&ItA]e*G†s9~Z´H’LJýýÚs?Ç?œG3·ª,éh„\µ,omƒlùþç=bÈ-5µ…eË÷]ïYÔzzSV–=O4l€fœËNèÌʯ«Ì·U±öK§¿À–A‘t\.¬ªÏ¡\cÈh-¢"¹áÒf;$ÓOZ\“ãKõ؇÷Zˆàf“g)¢ÅŸå©s*BZ6õ|Ø "áéÍ‚±IÙww¤ã ÂP×9¿ôz²×Þ9åHƒŸ4Mc‘Å›÷‰%.9Öª P¤¼ ÄXÙÃkêžÛ¨z©&n^:„uvþü©,•sÙÁ»â, M 㯿‹œ0¹â˜-å v½·åâ °©¤XÓ¦p›9 D‰¨ªŸh1Âö±FˆA½ÕX¨æò<ëCÁM— DS õ¾Ü²—AélûJ UÜßÓ+wäø(ŒäÖº½!µdŸø›.s£ù:¦c¸ŒvOžëqŽZT«Ã.s g_^?SŠvV¸¶jK…2¥ìYó6Zûûž¡ˆØ5Å_o¿dËñŒN¤“·¡qm§ißYÆ ü‹à˜§èå¡Â›fòK“b¹ë%n1oûÝÓu6[ M­H1ÃcîÁB­rã·ÃFÍ3cê;‚ç¦þ–ðCßãR‰&’ý_k5 ®RmTÕf-²…b Ød»Ji~Ë‹¥dÕÕí-›æ?û¿mâºäDñfË%& öì…6+дr‚OH‚¢)úüâ4¸+í´ìßK¢Øv{âø¨iʤO¦÷¬²a4MÝg7 I~îyWKl'ÄÑÓ|G/Ó»Zcü1gé”®t¡Æ¹ÑUú^«t¼Åíî`£(£Ç!òå@Éãæá©Ì“ÊèìôÙ‚Á¶|,eèÎ6)¯;VÇ¥ [õSNS™cŸ¾×†•ªaäI¥<¾/Öéû›õpjAú™ ƒ¦ ’ÓÄò7_‘͈øÀuÞ±¸lQç0Ï‚¹ü½ô©Gõl2ái«Fß?ìY¦ãÑØ¢_LËïÊ(iH…¥BÅÃøåŠ/ŽÌQWù5¯Ö¹S¼™ä6Q¡ @cwu°yÝzf[Õ,z4ëczG™ÇI?³IÆÝÆø|ùqÚÁgA›Œ«YŸÌƒ%Ô!Íöú÷˜\ûnp­ %;*2Üo˘yð\º¬Ž+20„ÈJ8×LND+K-QÇ|ýM¤ûŵcô¿:T·”MÆó¹$©}"Ÿñ8â¤ODÆn®WïÍ¡—ZÛvór¨Qt nKfZ†¤~ïÿ¶D‰X!ëV«f6ÿV¢+‘,÷ÕlWñ;4®Ð;ø˜}GÈ éêÚ0HÛ©ß4‰~â»¶?Öú²ç@ œ›î߃¼ï‚ûÁ†ˆfßÌ£¶×”Cš¿qÇ4û̇Xj eHðÖá©8âuR4¾*”’˜âøìô;1ûôΜ¬"V«jýíÔ6—^DÀýÛV¾W£ ÙëIÅ¥¹“/|£}v¤À›‚ýˆ5¢‡MS£èQYŸ¸ Ökú ’»41²‹FBR2ŸPÎÂg­azÔ“¿bnì#B¥^äõu¥O-D,ò†œ÷y3ñÓO°¨¸’ÂØëã Úl‡}ã<'ãs¡¤é6lNºäN䈚͎–aöü‰™Ù»¾ãô×ÇI¤ã3ü;rŒÕ40mí¥áA8äleïßÿH7/sA$sl™od 숩ô”ÝÍyÕ×¥ª~Oá 4·©åª¾LÆÁhzÚ¾,’ ÈÌȪ͞á2±Èl oÁGŒ÷óÐCw»ù%TÍ­ðB‹C òi´?ÁCM1÷¶M4‰ çi•Úƒê§×Íe]ïÅaÆ2ÉÁð z^:á”ß.O|ÓN}c Š«ŽÚ×"Ùž'ÒÊX+ö&פ‚Q¤Þ˜œÄó2ª sW!OLNýŒÞzÂßɬ†J /·Ù'ˆû2¢®A¼Õý÷S$T㳸á‰ùÁ¼D9ÔÓ¸Àã4{¸SL£ÙÉ(º„zð˜¨Ïý²O6EËldb5á è7ȽKt?XåœU^TF´_Ö’8Ï’„û Ï$øÐIÄÒcØûD$quPÙ:KuxÊ`?Œ0žúÂyùyœëËØkF/Yî—׬Ö/•­±œ¾&üRÔ|ùú]ŒîÑþÚð/Þ2®Ü…>î7¶“æ§(‚¦’®<ų»3OLmjª‰ã0ß½S Å{.ÓƒÓ¦TD¡5ŸÁÝ@±)‘ñŠilÕ£ó>üf•ñS¹6ºOü¸ξo÷™ÊI²Ç5€T$Hû¾rD6Ò\Ö³ˆ¸æ£nu¿aó‹‘…š™3’ÞÑ;Å»ûxh¤±Š»£’T©‘×ûœ¹í;Ò–·QJm1bÛ0&«ä!ñ „®nøHø#>9¶Àövâ#Fæàò»×B(q&n€ œËιŸä%~›ãû^Ãu^% c›âÓ™ÈÂ%¶Ù‰¯Üδ1_VîÞoYȬ7ˆTû•gïGZ2É„ÂÔißÄ‚²p¹`ïÒÃz#Z®°ˆMîì=®ž¤pÚ ½»ÔAç|•Øž?r°ò:èd:ÒÝNóf‹0äÜÒ¥ÅsVIOùù?U…%†ä1VÌÖ1ã§Y;Ìë[”¯òo²„p³ÙJ;XY9¹M?gï™*T?·@(ÙÿL8e­:sÏê£:÷¼¤Y…Ñý€Eæ QÿÔêvQ÷Æ? E½Œ> î v‹8Åòùjs|M§tÇyT]ÂKOm@þšÐޞ‣‡ñu]f³ÿ ì4ïg1ž1 æ—H'Á ÿÈBkиyOêÁÜæ½N®7_Šïi¾÷‰tÈùœùnDO~·×:XÈÁô̾>„¤ð¨Û8œ •Ó÷"2§ºÛuƒi½D¡Ý‹6ªüE§™k.‚i´GÁ ~$a …Ô`ïõj\],–yWnFð’°Œ%H;'Iš‘צi0<ܬFÅÐöªC²Qò[dÁXGÙJ@¢áî×Iír_¦¯eŽè ÔÉiGÎîPžù¼Ì‡4ŶQžžX©ŠÒµeä‚d}N:Í×Bf³¯–’ˆF„<›|ß]¨c×s}:½Í>ϵëÏ\¢Ú{ˆQª4x·mÚ{  ")ù{q¡„Y²õ;\z±€f†p“avÆžP‰·^qn✀VŽ×²m_Ȫi’À¿Q±Y¶1½|x¤çÚÃ?³È›ìáœ/ÑÃ`ÒØí%$¥) {¯Ä|RòµÁªÜ¤ï!„°e~îJªz©Œd2ÌèâVÂ}'ס‚…ò¶~/(kä4ór¾#ï„x¡4¥6ÔUòˈ1ž§Øëœ#`W1’‚üÎé|¹$Õ¾•³|xkP“$Ý+œü±ŠÑ 2°`åž(ËŸ—ƒ$W‘)2~¹‹îS\¹¶=èPÑÕh™:™LµïWMÈZ„m÷gê|²Ì•z¶Ì’ðo½ ,÷ë Ö¼R|ʹ“84ξø ŸÐè:A­‘ª=Ô¡ žÌ°ô¨Pf–¡dg(E¦EÎýT½•¡8̈–.þZÿ(‘.[~þÑz`ý¦fç'>A×&‡µ‘½‹ow—½*C*2.ô°x´ì°4ô$ZëFÿ):l„L ó•ELmÒÛ½b*BpŽØÊºà±ª#ѳZS³òeÂö7ËtJAáw½Æœ˘ÅYÎõ‡CQºöÝ‘Tj-Uô@XíÆŸòݨÁ À¥Ö_¥KYÔ5ó!ô/Ç™‡Oç@š»…ƒršùÐg«xÛ©áì 'ïŒ1Ã'æOð¸¢Ô»,0˜ß0n*´>X3É ÇÄÉö¾Gw­NQ‚aßž”Uõ*wþôûÁà—+—·2®+?ÍSæÜ¸«Åa­‡‚!¥blntvOE Ôž\—›/ Œ¨“‘©½¬›ÌÉ Dv`Ç{‰'q¹]ó¾N'óÍßw N壦˜B=/ûÌ•ù¢ù¥¸¤ŠŠÁU$GkSx¿¨‚¢á4ydq†5šŸ—X'6 ñe–š:8jM\òU‹ðZák„´„:>ÿ¿öËû ‡Àœ¬sŽ“;.ë(dœq¹uFNDFvöÈÊ:ÊNNq2Î ]V²}eÙ##ÑYÙYgó~ÿ‡÷·÷ó>ÀóÓóËÓÊz øIC¾"9צx‘Õ±S‰ªì öïÿA9¹¼ßëü²SM]‚úaÃ@rEkàëæ¨æÇ£Ñb”¾3bü;I´•üm‚cþT4aƒaÃ0¥Û@€H|ûJÛ:^%O‚¾ + Ñ»Ÿˆ¥°Áøó·;‚ª¬oñóL“lܯÊ_š¿”ÇÞ›¹Žƒ1e2’¥˜ŒIbdà^&1ŸzB{}6f¥6óÒ¨MðØ5ÊpïKM†@ø€H©¾ ÄÂ%‚æãˆqP¨¼2°òK‡þ¦„Gä;Ýž pÁ೨ðw}§øôÄ š¸!–ǹýŒBîS½É%Ùt¾Y_"×mü˜³\¼d¿o†žRÔ~\ŸljQBØ·ïvä/ê‚pQƒüF_žÑZ‰ .ñ¦ðêFǜƚïÄǹðrØ)•Z)kssGdR²Q?‘=È8š„o]%o/„þÃ+ k?©õmá&UM˜>ÚL¢Y˜iQ7Y÷Ÿyõ}Zrwe‚ V¶Û7lY¿»§‰ÊÑeïPðO]p¦“‘¯“äð²òT‹§fa»L\p¥˜‘í/üràš“üŒ8ÕdêßDŸ– ÃKHá j´¸òóct¹Lô·ß“70bÖ휡BÅK–Ðë @ÔÊœÈNÊÁ;=žzo\¡¸í—nL]B'^ ¶Ó e…†æ¸ÑõÏyÜoo %á ‡¨ºZÃBd1˜í3}«Ž˜ó ûˆÀ) ñ¯¥HÑGF‘ê‹åE…öXUÉç„éÃ!}¥]ö¡P}“ß#rÌ+× ëv½­Æñ¤Ç$™™ ›/ÂqC«r™ÎÇÒµÆ3ˆ=\.©«þ'z_ã +¡paËm?¾Õçîý{è{ʼn€ÿlZ Ùpó¾> XTõ>²E®mì-ÂÈt»‡ËYã¢Oü­4àoöƒ ï¯6†íTØ•¿~HH‹SæÖx_[ÐoO•Ôª¹Ëda]Ï2Ô_ûT™®;|R=’O%&‡”v=Æ¥Xc´”k²*;+-=x±*.üâ¹€µÌ“D?`¶}†(zŸâ;°…w“«ä·83ŠÎù=>àxgS®ç~ÅûmùrRF }ó Ò¹,ÆÄ«qjÝñóbõØRÁa,¢KPF¸ÒÁüÞÖrP]¯3Öÿnà“¤~`¤U˜Ô]:–ŠdíZ·kö^çLâIì(ðîÁl¯ºÀG ^Õz´ãÎþDG”²Rþ©ÐâåÔ²nbkfòÉÁ6\…q ®9?¾Ÿö +µùa1 ôûÍ–5K‰±t¤1±;„߉ކ¨9 «ùÂD8Z*µ16ý™æç¹°²£ï^3‘+CòØB/YÖ!¾ù'¾Ò-Á%H5i¥n17¨m¥Í<2’Kœ…}U߉{¡<ÙéBG¿ÒsÅšå(æÎ.º¤ +—q™6a~J•5†œ·z2vöKܯù抚\Ùî™yPŒÓÞí²2¡Óxγ2µÕŸÇy(;ƒðj:Aivv´ŸüX9P×Á[·#uxéîŒþ~NƒA8‡ÐßH!Ÿ­Ÿ–"tO34s˜¼vyQ$û=¡¼éȬ©Õ(R(,Çb0E©yÎTW¢ܶ`‡‡vŸ¯\è¸Þ+Ÿ£Õe(ËqÕdß>nÈ_Y±o¹$ÔK…b9e*ÓÆ¬&eö¤va?ì€Ä/ €²j_G`ÇwLô÷*¼oÂÊêÄ6v‹”¢òÞ  2yÊìÉE8%žöÚô™Ióå]}¼çÍãA@`"*GäÝ%Ñž9ÙÄkÛî`Y͵hž`j®AÅÜÐöU‡Ò—Ídä»{¾üú÷_[+ÑÁÒüj^_Z›uœ^´gÝ’ à™²\[£dÚW[õ¼v,FKkŒà¡vÖ¯|<¡bšZËMfïØY½dhrÍå#4’/F½AK]sÝÆéƒ ¨¨;«ø­ÒîóÌ¿9µ>WΈQì‡u%Ÿñ]¸T‚:ßÏ–E£ig˜ÓþB:³Øó`eã½e›¦ÁLW­F§ª¾Ñ ¿yÂ~‡•¯Ô©«ž;ï!ƒÂ†ÒÇ›sÈxœú€ÿ2uƒÙ=dX¶U²TþÃOÞ#ÄW ©Ì ˵2v›ì,mÇ>/>~KdcxJ}²+ÐêÖtÃÓßpgl5¥O×ãHÊv ¼ÐèM¥Aí|¥ŒÜË‚dÙ=¼õ¨ýûTº×e¨4LpôI@±ãA-—À'W«{â»ß… B‡£ÞúrçaÄIåpηJº†‹õf?ø‡–Œ0e ž½®µ ?^Ê”gjn.^<((+Q™ˆ”ã'"—7®^2æ)”iv¥–Õ:sbZ_zÿRä¼ÿq=Ywëè%íÖcñ0³ô_á§^h)gýEÑ‹{&œ¤zô®¸7à¯èÃp#nº3ÜByHÚB`žpßÚ/Ž u=SCtTê((œ_&¿þP]ý™¢y£ý'ñÏ~ÏGWOгbÌh-êŸt¯±;³ÔùûëW$;Y/ä ¿ZôÔÎmœŒg Òe÷%7ÿ ^q]L¹re±lypGØmË9uÑ_P§þÞfAÑS`¸»)eÙ½'žÂ A!˜ç×eªnЇÜ6µ†—%“t.Ãà“Ž7Ÿ½m£Ðò eÚ Ž`ëý<ŒÈ¥kc»™ö`Ý&]?Üm]ņÙ+°¼HK¦Ù´ôÜcnÙ¥Žî&ñ Bg»÷ãBè÷ @‰Ôk=Bc¢—Ñ” ¹tYB2L?+1{$µ{–ˆ62kñy<ºß `ÝN]ÜâŒõi4OïÖÖ±Eš÷ƒ]£Ð?MÈãŠQX jé¥h‰.š§ëõyú¸˜>/WÊwÝæãfïHŒwA¤…¡ÖÏÉawr± Ÿ}¿<4Do<ɸUŒ­]„Î?±{ZgAÓT<¿m6µÆ;(¾y~tZ0Õ©ÃQGvûJ:¨løúç+ZHÆ{ÚžG¾ógé™VgpÖö-@Œ úè ¬ÚÏl`M‰À‡J>:^š(%Cí¢ó#ÇLš~Äåž›?º0ߨV@R^ž`Ÿ‘¥Ãî¯íö–¬ˆ{·&Ÿþ<ßH4ZƒBb'ò³£ÍI¤U<<"1€³Oß´…´¨wÍ ÄË\K6éùV(d_+Tu²Ÿ-.QU‰U±’0Òî +ݾkª(~Hð™å·Ëʬ€WãiŸ¯$µŽB f[Cmb´Â òJÙ—þYN½÷!ßÓÕ4Ì»y™Œ 6—Æf焪گ^¢œñ¨º®·L–G†ÃKý7ÕŒô‹”.óx¦0X,om¨šî‰e4Ç<§‰»ûЬúQxPÓ¡¨ˆ,Ì`šãw¼Ã½‰—x=•LÜÿLIÑ}K6Š”ê\á³k¼³{ôë¦á$0i7nÎÔ¹w¥¿÷UU¶¢ ÏÎßÐ/!8@½U›<Ê̆o—Ìå¹YÖºõ=3ß­oÛh/„u²À" …n›54&¢XŠ Îb¶9©¶¨‘I(©£M~qÆÕITÖ¯$f4p+§v‹Õïù*.JÈuTNèïu\Ьӗvf|‚¾L¦›]#€d®þójí'QY~éQ ªç{¿Î×Í™œq{—x¿Àí}~”­gYŽ0)uë†j¦k¦8Gµsp(?ý±ÝFµ5|c…:7`'Ñ¿í‰ßãÑT>nû'ß:8Dbôýmdj âê¤HûS‰§É)‚¸ô¾W†³,´ðò±{jàU a+)7tpÆØ+ã}Ä-1ÿÌBàd÷ÌÊ$Àj&f{V·ù ƒg¹úÈwÃr+ôïyý³ìÌåèTµ}ÍfôÈD%JÓµ\øœÓxôéJ‚‚–\˜ª`[^<>ØÈ‹ðÂð¿Wg‘`ŒDhÓiQ´>ÁŽ^Bdr¹O¯4Ê~žöòQñƒÒø]ê=¾äµt •­.ÏzßVë{Ù!.­œ˜Z<:©pû±ñöD%S5šTo·k£¨Á O[¸ G±zeóÃXÏ\«ŠÀ§í 1¡?åŠö¯;̺$øø«Ÿ5÷¶jïË|ôìònZµk™ÝŽ8öÌ…Ã„È 4Dñ!Ö4oiçÃî¨âmNÅþ€ËqÀV2žÑË 7$°dÒõž£—ù/þ_ð?!pxâd‡óóò°Ã¹ÿ¹Ûendstream endobj 70 0 obj << /Type /Font /Subtype /Type1 /Encoding 409 0 R /FirstChar 2 /LastChar 169 /Widths 416 0 R /BaseFont /KTGFKL+NimbusRomNo9L-Regu /FontDescriptor 68 0 R >> endobj 68 0 obj << /Ascent 678 /CapHeight 651 /Descent -216 /FontName /KTGFKL+NimbusRomNo9L-Regu /ItalicAngle 0 /StemV 85 /XHeight 450 /FontBBox [-168 -281 1000 924] /Flags 4 /CharSet (/fi/fl/quotedbl/numbersign/dollar/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/bracketleft/backslash/bracketright/underscore/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/bullet/copyright) /FontFile 69 0 R >> endobj 416 0 obj [556 556 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 408 500 500 0 0 333 333 333 500 564 250 333 250 278 500 500 500 500 500 500 500 500 500 500 278 278 0 0 0 0 921 722 667 667 722 611 556 722 722 333 389 722 611 889 722 722 556 722 667 556 611 722 722 944 722 722 0 333 278 333 0 500 0 444 500 444 500 444 333 500 500 278 278 500 278 778 500 500 500 500 333 389 278 500 500 722 500 500 444 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 350 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 760 ] endobj 61 0 obj << /Length1 1608 /Length2 9780 /Length3 532 /Length 10631 /Filter /FlateDecode >> stream xÚítePœÝ–.nÁÝéàîÜàîMC7i î‚· ÁÝ%hàÜáò}gfÎÔ¹ókf~ݺ]ÕUï’ý¬g­gíÍðZS‡CÚÆÕ¤àêåàáä~Ð;[{Bt¬\Ô8d\l/N Yìê"g½€lr €—À#""‚ÁuuóõÛÙCÌzÚ,llìÿôü•°öý÷ÈËIØÎÀøòárrus¹@_ þÛu@ Ô°;²o5”5ÌŠzE ÈÃÊ  éiíÔÀ@ İuõ8ýÃ]]lÀµá|Á’†¬7ür ä¹ýb¸<œÁÈË7 ØyX¹@_fu€]€Nž6xñÛºþMÈÍÃõ%Ãù%ö¦é B€`7(४¦œÂ?xBí­ Õ†€_ÂWÛ—LW ç_-ý{y‰B­À.äý«–5`†¸9Yù¾Ô~sóÿMÃv±û'v€ÈÎÊÃÆ ¼À¼`ÿ5ö øOÝ[¹¹9ùþ}Úõï¬ÿà†B@N¶œ<¼/5ЗÚv` ®¿EÙÅÖÀÃý¿§Û¿Ç¼@ˆù¯ay!aeãêâä °Ùbpi¸B_J˜ÿ{*sþï‰ü¿ ñÿŠÀÿ+òþÏÄýWþÓ%þŸÞç…VðtrÒ°r~Y€<0€—PüõÆü_¹VÎ`'ßÿ"û_ @ÿ`ø_(C­^Æ íb÷"7'÷?œ`ˆØd£ †í¶VN/3úÛ¯çbòp»€^´ü{Œ‰éÚƒŽ. ]PäïÈÅæ_™¿Èó7o. Ei-=¶}MÿÎÒ|QªëëöBìßúPwµùã/ W€?€ƒ[èå²qóDøEÿ‹zñüÓV·‚z€}&/MsóüÝú¿ýÿi™ý Œ¼ ÐÕæ¯=ÑZ¹Ø¼¬Ö8þ ==<^ýû¶¿´üïößKù€€‹s®@Ñ陟 Õ$¹}#r&Ý<ˆ}ݾÔêUºvÀÒÃ×EÊ,ª>rÖ½yjöÝw{ÜRaÝè$vbêHçSÒ±tà­0¶ ±ms™Áút`í2£¶†d,È­¿ýkDKÛ¼ø…j¬•Ïíäš%ˆÎ« ˆþÊ û0í[Qn~õçýƤÝë+¦žÁþ¾ÞŽSä®- ¶œ8tQ/$,ƨ ÷ Ic½2ÿëbž¤žÊäÎÐ.=f¾•…Sâú5>€ñzíWàOÿƒPƒÇû`¥{ó¥#„ü¢NŸ·½üa?‹R-?)6ïÓRl?ÑóRn]ØŽÆJ¾‹íVV9ÚXñS*%¿lþ3òU…k£š?}hÔ1K¤¯äl3¥µÚjœóGÐgλ‰Æø4Õúñ*ôDEBýTˆµ÷*ÿ{I¦²½$„Ǻ©¤Ï°¶ï`âO[ã{“Å^EÑ•õ´\—X¥ï ßF®î‡ÜˆòÃ#(#…³Šezj>Ô´žŸ{ÏmRŸ¨¯‰ îʆùg ™bÑ1`±”¦¢¯›•R¥44lxzöäYƒ|7žÌƒlöuo$‚s`¢ ÀaíTH{&*ϲr¢.UàNžÞheŠF‚ÜE“ÄB1 ÖÒ"cŠÈ&J„Œ%ý“ðùWí܇ãBftcø=žô™åo"Ù¾š\îU÷˜,0.~ÿû,ï`W›8o8¯& ãÄÜÑ}&D>I0iÓ)ƒ5,JÓÔ>–ûÌpu²rœ=ôh4¼;Q¹„âžr×XѪ á‘©3§d Âo,BdèƒÓdt®©KcXõr2šW¼r¼óyZò’×pQŸý{bÑxŽ%†ò çÄ"^1_¥ä°”‹ª/ù‡‹&zŒñçá—°®v64Ho&cÈF¢Gwô"Ë5¿-Ìö[Ϙˆn¨¸¼œƒ 9»¨ìJ)…œ6åÔÖVÕY©'^Kã¨;h¤©ì)·'p'Oñ  NÐ?ÅeؘRÁSu7È@$êåËoëÅéÊk¾ªäêÆÄ™QmÑ]Mðe¢béþ¶AÀ—B¥´5Û"Áº#åÐÖÿx/]°`^C˜“áåTwŽ^·ÑR}z3‚ß…LC㌫fÌ…+)¼¢ù±¯Ù—œ”H•ˆl[¶iŒDjÎ&a ’“á³ëXßî.ÙG‰$PPÅò½*JÀ¨¸ŸIi(@'þûº÷2móÝ0e;˶'ÏUrÇŸ#ï/`Pò,1š§?‹JüÙbšèÞ¢‚½¿½g±s~ZdûƒœÏ›Ï†e&š¡RXЩAþxS\êhéÔ•¦õèõZŒ¬6]‡YàÌáúû´ùê>×¶¤$D2P†DŠá뢈Îàå§Ý¯&K ¨Q÷²)¶ÏûÁ´´@K 8€)ÀD`õᨖ“‘&ªR¤vI7)8²[ÏÒf-ïÒd¯ölž dt¤C:6'Tß­à}e¼Ìaâ\ˆZ4^ƒŒ :æ/Çød†ÒºW/½y$M°¿Js‹7ÛFà<^7üÃã⹕|9e¡`÷¼ºQɽ+X+6ä*ëJ«Ùb“W1½øMUÔ½!|×ãC‚Q¯°q‘;è~+…º3òÄk½ä+úg0’Oâ6s7YÓ43qÕúÈîî¥0~”žÓè»Ý ‚ºâçìÿ=—¦Ð|ôÌc„£H%¿¹Ç•¯òëŠÿüÙþM¾oGÉOv²?öŸ•¼à†Íºº¤xìàX‡(eÄe ›¬Âw¦ ,Ü·)Äߌü80tèÑO6\ËcoêÜv®…Ù3r`n8Üg‘ÔÔ¶Ÿ•gÅŒ5‘ts’ÖK2{âšðØóVÅ\øF=°{ÚP×¹=ßE~O—¹Fª›²FatHNÁ˜élÙQKA3<tc›ûBŠK(ÖÒƒ²÷gB?’uûÞÁ_… ž†ÝAc|oTê4K{,F’XqMX´“ =PcÕ* d1¸xòy>»7#;¶ë(hÏŒ:‘Âô)"cm}Àæ  ÿˆ’ “ŒïÿÀÛì`ÝIpKlã¯}yŸ)S^!ˆcÑ´Í98VŠÎÁ—{ÉoÆ¡9aVzíÙææ„Âs^öZ¶E´ój=VxùD›Œpè#ªËÇbÞFI@x·ãIQ\ž’®²ÎØ'iÉO''À$¾íu‚ˆ[ȉ³! "2•I¥„›ÅiFªÚW‘.FŸ4N¢d%ásùuÃÍ«àJÜé—ÏB¾3ÉeÂGg(®ø‰ ¸ïÞU{Lj]R~ëRt©&û¨duÇVj¦È¶úŸàKDî@¦À'Kï Òß½w.F…Ö+7¦€õ} <½Þ?¯.2é)ùè‰ÑÖôy—´…Íà"A†;¨ MÓCdûXC}.x2Š,–¯È ÏÅÔî¿©,Œ'ðæUµ'Ã2¾Šm,ý,ï¶£\D½Fçv©»ü¶ M=m„+ä_éÏýÍ^Xë•_‚® ŽªtE”÷üçqZ~ ncCuñ“²:[¿Ž@B7!O Åye$ò4G /©¹‚‘R ƒt€¶qì”1£ ýŒ_Ø&Y=— ŸÅÓàc‚i)bÚåü žÊóãŸÜf-6½´•%ð2G”, ôf#~¤Ý}¬öx<Þú /*ð)¤òx[Iäþþýäƒhž]ñN±ñŽ{bŒª~$+¬°àõø£ÒÙ¤VO¶}å2õaÈÄáÁë¹Öw)!°cx·Ó øÚRN3%²–Ë™.ÃȲE„ü6k™RÎEʳ]qÇt r6$I>âqòô­-ì협U ÛèWD›9ûÄ}p•’NI]¹ÍŽR8´¶Ìk’Š]wk§[úó7éü~*µÈëPÔšãóêWY=¸U žÁ¦m·/L K ûŽvìbH} ’æ¾G¯””{H\ž,+-,ÞJd[F3í8¥k «m­0)ãh‘Óô6Iõ¨Û3ãTò„×| ƒ€w¦ø>1%k£_G¿tPgOd¦®fØìµ–ìm H6½2…Ëp>i¯ÏaÃhèÌš¤C`ûæA˜ÊvÆö¼’¡¿U‹Wµï¹Àz|˜—ü”f7ßÔ:9‹\å{Â/‡JWyÏëÏ;ã÷)!°Ú­àG*Mí’V'RlO;c¹5§äD¡·—‚¡åãSx}pß¡»xײ‚cUáà"Pjàv\Që!®fG,–çN ²àÑ…õZJ%®é, >\ó(=Q>Ãφ?¥ãCxðGv½8ˆÓ—u¥h÷žFø8•û•ùµêR ë*èW#ýØe$—#W-Ö wÁæ°÷Y6²åK_ LZr¸¾ôõ‹V ûãç²XAÔˆ£A&œ;´2’º)nXAHɢ葬X–v·%"9?žL¹!åmih|Û8E¢8y’ØýKÌ8K®…g]W+I%ÒÍfIÇûtãO‡rtûd¬%VèH¨ ³‡¾'ÈgXçø(š¶q«4;@òÑX&”‘ ”Gvðw»áCšƒeÆÏ<üÏU÷Ùé|»áþA]qXú7Ô©ûâs•§õ?]ö;k¢²uƒk$‚¨òÁ¤|蕘Ò>ŒyÊ-rëÓWoDœ•‰™é~„ÌimŒô(T–Ê«YJÕh!ì—¢’_¥cwâùP7îéË™¡$û¢Íß±ia´Æ÷œêªQm°¥ 9ÄV 1”žM¸B4§ÂÒ¾ô™k$…¡‡‹Ó¦h=g¨xY!—çé´ yNŒDr$]¤*)¥¸È4?µ— †åý)³(µŸÑ-›pUCÍ£Z.¾¤ê»ß`1Í·â@õ()v¦hÍSCÍ|~v'8y£!.R¾KmF{Ko·èP‰0n|=&çW_ÖYœÚ3$n¯ï±]¿‚( /]+sH(÷gd«Uä—»Š.ƒ‘óA0C‹>°ã\ Id|픎Üì9bìq¡è/ù,ìž$YgÏ–®’óG>¼}J,Q)DkÌFkå=áÁîAÖ›³óN`l¹8 Û›ßÿ¦Pik<ø}T4Zü iZ<ÆÞn“ùôFÃdéí×ÉñóŽý3¼¯–•|V•Š›&W8f'°yΫþ{Î79jU>¡9…‚b4Ù5¬E_O?¹d6ØÑü*¦üE}ÕÆ_™¸G-ñÙõÃ_ŸœÞ‹ÒtÎçK<Õ f°»žÙG=¼·½§‚XñTsî çs)!m‚·2àÀ>ìMËàbÙ™ã©~е£Ñ”bbÓ[?["î‚zAè§ cÏ«j­»Ð|!Àé“4sKK¼mÅ·ú}„ñ´š…_4Z½LwAéÕkaká’9‡9 Ä·Øå_óÞÚ½g2È?Éâ»ô8{ÝGü²×ðŠÅü,X´ºé€z’ÚAз6ÌhMc³ö…àžÕ×>Íf_µaÆÆ¶s<~÷X#¨wІرêMT¯ÖO4ìnI\Iiª­ ç^oÈQ;Àˆ‚ãaÛܪ%ùõ»‰é«ÇBÈ®üýI éE®ûIH‹:\ùàwö{¶ù.µo\o4ÿjµü«OÛ먀±ËãÜ‹ÐÎÉîd)ÚÝJ¶±íyXÃÕ)Ò”ô/µõ5Æq"Ì‘äeUwJwÔÂçŒúh$1Íbå«5馥c£ê)ïËÙ‹7Í\å°FÝMw^§„ U²QÎ¹Í f¨¶Âߘ Dj<ƾbìƒÎ1?c!Ä9•A ÎÊ´'ÊX®BÐàÔ–j]ðEØkU°EÞà¶ ¯ô(X'åf3 Þ0šÍ¯â¦üè¼kqiúNË›¨ Gé Ÿ!¸ìG/nÑË7! eÝûΠò ëK`R¤ÍšÊLòÀíb®þ½àb{ºbeä]ìhP§u’úx‰!p1É…˜ÏŠ>)P¿qg@ëâ3uãX #&Ý™¤Û}œû«mNBœÉŒ`GfÖ ŽïY†:Q­è î>K(ÿÝÕSY7£U$Òþ¤¾Å"`í>¨ÇŒVÖ„»P9ýãh²"€iáõ)ÃJ¦l*²§œÆ;a¸ð£×7•00§õ‚FhspIJ7>DXb¤0r4Ùöî7}ʳv0Na)7Yl}fˆUŠé÷ý å0ò^k¦„où]Š­ ÁÅúò‚ˆÖô¼Ò%ň»¡…´¡©!T£y¼;Óxâz•>Ìp:Šo‚ùMš3½ Ò5-ç¸ù0šø¸0òbÌ0Ðö·…ZÕQ˜-0ÖÝž‹R˔ՙTÓÛÍÒ¥Á×ÛÅz3’òèÔž{¥W|^o>!lÇôs/Çp^r…׈ÙHjÒÜ× w!jE‡ßÖ±•º>g-*T¯ÿQG}h+÷ªtr½¼ö¼G>‚o`,t/ÒÔH_¹X 1ÅDKžß=Ô¹õç·\Y) Ð‹Yësãx·¨¤¹ð,K¥2¬´&Ìá5OVH7·Š±¢Ä/YfÑ»ª`¯Uq(7—®`œF²3#šp¢7‡È4yUGÔ%Þ‡ëÕsHÐÕÌ"DÇÕýæz¤ä—N j?ï’(«†Çˆ¢ôÊ–ÀÈíè­ìæéM­\>ß­×(Kžñª¨]ià&¶ñEo Õ¡ê÷{;KBŒ§êà(c}H·ØÛÇyNÄîò&Uò …3©„ß´Òý–Þ¹ú­¯IžØGºuÝ¡í|e$±«s•¤‘ëæyÄ¥¶—_ßïs?îÀ”¢pk^ŠE´f¨ù,¼±ªði‘ÃÛ-ZvÍ’L€Ÿ¥ý‰(ýs\AÅ”´pY3Pù˜¯<#€UŸöNײO4l€Jö‘¼¸ÎE{ÍêØoMî®[ýîÖº9C¹-»ô ÊØœ¦Ô¦ XÒq)©¸Çìö± ÌÝG”¸pí‹?5´ìÚ¸ôÞ¦¹¼8ñ}­ºY¿©_Á ‘Õ{SRvί)—Ò{ýtò»‘EA·w¦Ô‚.ÇVÈ&»kÒ2{kSØB¯+nÀW‰€C´”@j´•ü^ö§j£<²æO6$ø]Þ±ÂI$±m•°Õe"«,åÞŽULÂù™;±òlÒ³Fœ<Ì"UZâ®M‹ksÝ»‘þP]ªË2Òpì‘IÌr»ëg/Î2lk-Àâ°bhŸÎòJ²eÿ4Hí¤ØB¯Pé¶<þÈßZmfûÄåç+C¬õ®¬ì"0S8o~k‹ŸýqŠÝÁg2ôt6,Úö–ñ8bëœrÍ£! zt–ÍkghÍJ4Ä| AœIJ?tïUq±Ê÷H`Xíð“hƒHMæ%•?R'厎Jùõ¤-´cØ#.Ôhxê;°¨Ìk¾3ÊЦ‘Æ4ê;ÊVÛÔö5¹_X—eÙë´‘'§àŸŸ;c#×)¬"Ð5NÝþ‰ Ñã{/¯"åÊ«O{(}m´OmZ„’O4÷/}†t`ž± Ñ ýb1no·üÈ„ì$ïâÙÈ ? !ÈÃû­¾¦:—dÎݳàaª8-!¡)æ;ÆŒ—K÷EÈ=7>¹ÛǯìÞ=ë ³´HÜË$F0“Ç9ù°­"sÞcHøÐ+ºp¼ vµOu*üpë̓aøˆ7ŸuÔuüÄ>ËrQ§|þûwáѵUÜõoa¡ Õy7 &ùöOBéÚ5ò’^+ã ª)'´BЍßÄ7*×xãÜRÇ·c©—wÒG°bÆ+Š'ÿU¦BŽTK„&a7‚Häu&%>&5W̸0 Tÿû1޽¼õIÒ5ï AhJé;¿&LŠG3Zæ—ص裪5v|á°Œ;Ê’òB'={‘vJ ¢¹þœqçS¢w¹ëôZш@9sÁ§]\« µáñYš‹š5tî ™…ŠCù+™•ÈpgYiP#6!Àº7˜Wá›ýéšmSsâ°ü¯VC¼O¿M¨b-ŒœãŽ2O"~¤ ö/90zóÿ2ýiö1MY<Ø„°ûéöaÞ*¨Ò™’ý]8'v-õ÷‹æmTǶF¶!ç ½¦÷wfÅX[{Ìú¾7øÞ?ÏÊGS™  gÛ§Xí Ÿù#XMl[(Õ9Œ'ÂIùëª`ÊÍÇ™—*ZF)<È UGºÐ¨*ÈvNÂTÝïoäÅÊwþ)«ÆŠ_†â¥Ó—3l+‘K,â‡.lsÌtƒhÑó¶Z! >ˆQû!,ÜìfÊ /j¦7ÄlÈ´÷ ‰,›Š¦^?Èuö¹K¨¥Ó¯ÝÂ佞ë¸"W7±Fîüݺƃ¦¾Ô¥ò&¬… ÝÕ…°ðHFe ©°·À½²™áFþ?ÿö·÷¯§#»^kÁjÅ^MÇk ÀŒÁ–Mx®Ã1…LnB›þZ)̸Bëû¬'±ª©áÇ32•É/¿G„R_zTÄÙ(õ¡'tÚlã™gçö#ãõuÙ¶,s ¾Ö¦‚¿Ãï°@Zϲ‘E]H¦z¶«œ~ssóºF_áóµÁ´¦€ÐT}ÀÉF¨Qø,¤í)ú§ïð/¦Lö -:³7ì£jâmxȰÑK a™q‰]ÔOYãÈ’¥v¼ÅÃ*Vͯ“× ´¨öî|(€#`–Hs(|óþ Ý™®¼Õ¤^hl.Ó²ÏV…wÎÄA‰%†î’W욌œ£õ4¬;Èļ Ï’À(m¬X½ÿôÆ©;o2ФéËý …)6‰yÿwÞ]~¹6:VÚO] eŒ){-³ÕEÞO»rz«±F]ùŠdo+G`+rÈ,G ¤{á³KÆÆÌlöIBq|$~Òûê¢pJÙʃ­¤Æaª_k~³R@ÃZ„ŸP4@ÌëŸ×‰Ý޽]M”´—Ï‹]˱:×Q®ì ~!Ôõ];Dé8ˆÁc©Ž˜Q•WÝÉ“;Üt­¶…•Dä>ÕäÅô)d§‡3î0G¿Áóª ölòç"T¹‚éÏ'œ­=ˆJ´û7hÓ”ðyW±nA#ý é×?yß¶9L­öå@Ê¢©1ªJ«0ò"#º³H,Úá;èÞöP¹OV•å­róȽa+Á¸íÍ‘ ž(i¶ „œµzSÿFhs»ïLÉBY®®ÿb-•H‹ñaÄ,:+²&”ñ$€ÙQ« Qtú&Öwf\¥Õ0ü®´¾jÙêJ"‡Ï|mþ§4ýoìzéà£#Ê'.ÖË+šãÕ÷¿µ«ù¸Ë­U5­¨vs,fý/R‘+IÛ1.¦/>Ɗ„ý ;œÄ~Püa…¼^þ17aV¦èf; ©>´s–GŠºà¼öþ¸úÔI.Çn”fYµÙäpŠmü,'dS0‰r3dªgÏ­ö-@ ®ÙЖKR‰ú£Ë«y!ggµ.IÛ‰,U\ÃÚX*òYmHläëVÁçyQË:vV`Z¬fÿáˆ3Wù{ >ïÖÓ´ÊÉW# Ýyj0Ó»Ü9ü~¯6a>-6‡¾Žµ7¹{¢yi#a¬J—^ßeîAÓ9nFZL^U™kA½±ç¸ŸXp Æ„•é8µ„`˜·j:÷à Ã |ì¾0Éö³¢ØÔ5í32ÖÑÒ;G©¯¼i`âg(:ŸkZ¥9з’1wr½åirŸh.“Ér"=W›´EÚ–~t±&A'-ª´ÃëB ö#n±.,<¨4~50+°iü㲕ݞëtwSÈKñK÷˜†í翎xÙ«XÙ|L }ÆB¸ÂÆñS<í ñ±¸÷éÀ·èÚÁ|ð/(’qœ­¦ñt~cLHP„„ Ü@”æœÌøL›SË4¯ý¿E=…3_<˜«}AÍÊßüá”Ý+iÌŠÑjÑGÏWm ¾|Ð(c‰çô Fƒ0h&ø!VNÅqªrD‡I‹ððªùúÑxî͹\XC¢îˆlÕ~½'bñ8yž"Ë LC’š8ó.ìv¡YÓüÊÅB¦,̸^»ÚãfFàbì-îO#þ½4x~ôÜk£-ð¦Ý‚þM?ãG Œ3e9wî¯j´5‰5]æÛ¶ehŽK…A7½îÐ æS P)~kälkä%Š€Ëê·ó@ÐMJ[“ÙŒ”™xýá‹9 bU³sã÷n¬eVýô4³¼GDP¸ž“W~úU¥v„Ûa*àœ-ZyMŻ寮 ã}èŽæƒ6ßvÏcðb‰Ý«:›²Æ$‚Ï{Sét(Úï­†»-¨jnBOÃA£!„·ï=·0óšw‰j¡¹j˜úKN'°LÓ\‰IžáÁ°•«½ÌÅd{¶¸+3I#S•?ØœÚ`Òè’7@%§ ˜ˆ\BËpôÛ/ úBØü*"Y8”&F¹3 ˽ÜLÀD Z#æküò¸uJqJͧç\}FxÄ6[ßúö&Èüòn™êùMY‡ÈüEõBÐOp¡2f¨á*³›#·„GùÉ(¶Øþ¬jf䟨0&uG 8BZw#¤qjtF|¾½5œU˜à²„¨ó„¼/É!Q´Žj[8Q'ñüQð9æT¶ˆ·”iõz¥]Àç­-ÓS úÑå¹eP·QzÊ"2cˆ"ž–F}q)w\ÝûÄ,eÔ-Ÿ£cƒÃ(ïæÙùûÑù -ÕNozT‡Šï³ÇÊÇo½ƒy‚ë/+ŠÛ´´ÌO7Éè¥@F{þ´]PºLÿZð¼6,^/ÿ­¾>ÝÓ0  çÑ$y“«Iû"|xØè樔+δn¦óâmK^­7àøávÖxî§³uv⎀3õs&îñÁ/6'5<¹E‰JÖu6.Çc@¯ûJ 2– ¿ÞaCèc@G5þÖ¸§XIš’_ ó˜_}@o­X£‡ve ‚qÈz=ÍÄq:Å`ô,r‹ô=Áì³Z‘áÄÏ#Íl±çÁ®ƒÜ*¢©‘|1sbÔi9±9ë8CÔ0,Æùù¾4Û,)þ‚ÑÄèÜqC¡=@¤¢ZJÚú|ýÜ ÕËDoƒÆÉE­LN‘bPDŒ]2xLàÐJE£ÔÚ%Þå `µî¼Tß+ª•ŽØî-?ôw¦·~µ_…” þÈ.ó€쨋\@¿~XSò®Ö€YO5µii(A] ¯­3¹JŽÔœñµé‰Bkrþn<Ÿò¡±à[x¾ho^ÕÕ]DüO ëÛµ¬:öjµ.R`kòu0ì€u [Ñ—p ÉUñ”Ÿ¦yreÜ4­¤ýM FƒªYðûç?åqÍ5ñ?t âxIß_ i%O}¬å.‰v©®:µ2 38àkð¯ñÉíG§¤ü}Ó·úÓVÛ$þ¡z¾ûhÏ×À®¿6J™Ç ’ð¶“ã ˜<ßÔç s”õÉg„Z샼¿[ÿX~Ü®| F0®AÝì»ßð²•k³j™5è2‰ßfÔ<ƺb¿ ÝÞ…7p—˜^k=Çêm ëw¨ý}ßú® ½á ê/6»NrÛø@æŸßõK?²]-Ñ‘—¨C¿8á—ûŒ‚»ÊÕ4Òmu[«Îâ÷3°Mº…nõBg4:„òv1þ…Si}jæÕÀQ“f—q( r[%…Äë„/¿b µøB±,•¼ öè©‘Õ‰•ÁÆ Ò@ gAc5%Ç4)P«àÚBZõcJã^ï~C^p›ØgÞƒäó„K÷tÿ½‰SºúÂ;Ü.TgÓŸ%4„©”4tÆçÁBJSu;XvlgüÜÿÃÆÿøè²ò€º:[y8büàiendstream endobj 62 0 obj << /Type /Font /Subtype /Type1 /Encoding 409 0 R /FirstChar 40 /LastChar 121 /Widths 417 0 R /BaseFont /NGAJQU+NimbusSanL-Bold /FontDescriptor 60 0 R >> endobj 60 0 obj << /Ascent 722 /CapHeight 722 /Descent -217 /FontName /NGAJQU+NimbusSanL-Bold /ItalicAngle 0 /StemV 141 /XHeight 532 /FontBBox [-173 -307 1003 949] /Flags 4 /CharSet (/parenleft/parenright/period/one/two/three/four/colon/at/A/B/C/D/F/G/H/I/L/M/N/P/Q/S/T/U/W/a/b/c/d/e/f/g/h/i/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y) /FontFile 61 0 R >> endobj 417 0 obj [333 333 0 0 0 0 278 0 0 556 556 556 556 0 0 0 0 0 333 0 0 0 0 0 975 722 722 722 722 0 611 778 722 278 0 0 611 833 722 0 667 778 0 667 611 722 0 944 0 0 0 0 0 0 0 0 0 556 611 556 611 556 333 611 611 278 0 556 278 889 611 611 611 611 389 556 333 611 556 778 556 556 ] endobj 63 0 obj << /Type /Pages /Count 6 /Parent 418 0 R /Kids [54 0 R 65 0 R 79 0 R 115 0 R 122 0 R 135 0 R] >> endobj 195 0 obj << /Type /Pages /Count 6 /Parent 418 0 R /Kids [149 0 R 197 0 R 208 0 R 244 0 R 261 0 R 265 0 R] >> endobj 305 0 obj << /Type /Pages /Count 6 /Parent 418 0 R /Kids [298 0 R 307 0 R 325 0 R 340 0 R 376 0 R 393 0 R] >> endobj 418 0 obj << /Type /Pages /Count 18 /Kids [63 0 R 195 0 R 305 0 R] >> endobj 419 0 obj << /Type /Outlines /First 3 0 R /Last 51 0 R /Count 9 >> endobj 51 0 obj << /Title 52 0 R /A 49 0 R /Parent 419 0 R /Prev 39 0 R >> endobj 47 0 obj << /Title 48 0 R /A 45 0 R /Parent 39 0 R /Prev 43 0 R >> endobj 43 0 obj << /Title 44 0 R /A 41 0 R /Parent 39 0 R /Next 47 0 R >> endobj 39 0 obj << /Title 40 0 R /A 37 0 R /Parent 419 0 R /Prev 35 0 R /Next 51 0 R /First 43 0 R /Last 47 0 R /Count -2 >> endobj 35 0 obj << /Title 36 0 R /A 33 0 R /Parent 419 0 R /Prev 23 0 R /Next 39 0 R >> endobj 31 0 obj << /Title 32 0 R /A 29 0 R /Parent 23 0 R /Prev 27 0 R >> endobj 27 0 obj << /Title 28 0 R /A 25 0 R /Parent 23 0 R /Next 31 0 R >> endobj 23 0 obj << /Title 24 0 R /A 21 0 R /Parent 419 0 R /Prev 19 0 R /Next 35 0 R /First 27 0 R /Last 31 0 R /Count -2 >> endobj 19 0 obj << /Title 20 0 R /A 17 0 R /Parent 419 0 R /Prev 15 0 R /Next 23 0 R >> endobj 15 0 obj << /Title 16 0 R /A 13 0 R /Parent 419 0 R /Prev 11 0 R /Next 19 0 R >> endobj 11 0 obj << /Title 12 0 R /A 9 0 R /Parent 419 0 R /Prev 7 0 R /Next 15 0 R >> endobj 7 0 obj << /Title 8 0 R /A 5 0 R /Parent 419 0 R /Prev 3 0 R /Next 11 0 R >> endobj 3 0 obj << /Title 4 0 R /A 1 0 R /Parent 419 0 R /Next 7 0 R >> endobj 420 0 obj << /Names [(0) 59 0 R (1.0) 2 0 R (100) 211 0 R (101) 212 0 R (102) 213 0 R (104) 214 0 R (105) 215 0 R (106) 216 0 R (107) 217 0 R (108) 218 0 R (109) 219 0 R (110) 220 0 R (111) 221 0 R (113) 222 0 R (114) 223 0 R (115) 224 0 R (116) 225 0 R (117) 226 0 R (118) 227 0 R (119) 228 0 R (121) 232 0 R (122) 233 0 R (123) 234 0 R (125) 235 0 R (126) 236 0 R (127) 237 0 R (128) 238 0 R (129) 239 0 R (130) 240 0 R (131) 241 0 R (132) 242 0 R (133) 111 0 R (135) 246 0 R (136) 112 0 R (138) 247 0 R (139) 248 0 R (140) 249 0 R (141) 250 0 R (142) 251 0 R (143) 252 0 R (144) 253 0 R (145) 254 0 R (146) 255 0 R (147) 256 0 R (148) 257 0 R (149) 120 0 R (151) 258 0 R (2.0) 6 0 R (205) 268 0 R (206) 269 0 R (207) 270 0 R (208) 113 0 R (210) 271 0 R (211) 272 0 R (212) 273 0 R (213) 274 0 R (214) 275 0 R (215) 276 0 R (216) 277 0 R (217) 278 0 R (218) 279 0 R (219) 280 0 R (22) 105 0 R (220) 281 0 R (221) 282 0 R (222) 283 0 R (223) 284 0 R (224) 285 0 R (225) 286 0 R (226) 287 0 R (227) 288 0 R (228) 289 0 R (229) 290 0 R (230) 291 0 R (231) 292 0 R (232) 293 0 R (233) 294 0 R (234) 295 0 R (235) 296 0 R (236) 301 0 R (237) 302 0 R (238) 303 0 R (239) 304 0 R (24) 125 0 R (242) 310 0 R (243) 311 0 R (244) 312 0 R (245) 313 0 R (246) 314 0 R (247) 315 0 R (248) 316 0 R (249) 317 0 R (25) 126 0 R (250) 318 0 R (251) 319 0 R (252) 320 0 R (253) 321 0 R (254) 322 0 R (255) 323 0 R (256) 328 0 R (257) 329 0 R (258) 330 0 R (259) 331 0 R (26) 127 0 R (260) 332 0 R (261) 333 0 R (262) 334 0 R (263) 335 0 R (264) 336 0 R (265) 337 0 R (266) 338 0 R (267) 344 0 R (268) 345 0 R (269) 346 0 R (27) 128 0 R (270) 347 0 R (271) 348 0 R (272) 349 0 R (273) 350 0 R (274) 351 0 R (275) 352 0 R (276) 353 0 R (277) 354 0 R (278) 355 0 R (279) 356 0 R (28) 129 0 R (280) 357 0 R (281) 358 0 R (282) 359 0 R (283) 360 0 R (284) 361 0 R (285) 362 0 R (286) 363 0 R (287) 364 0 R (288) 365 0 R (289) 366 0 R (29) 130 0 R (290) 367 0 R (291) 368 0 R (292) 369 0 R (293) 370 0 R (294) 371 0 R (295) 372 0 R (296) 373 0 R (297) 374 0 R (298) 380 0 R (299) 343 0 R (3.0) 10 0 R (30) 131 0 R (300) 381 0 R (301) 382 0 R (302) 383 0 R (303) 384 0 R (304) 385 0 R (305) 386 0 R (306) 387 0 R (307) 388 0 R (308) 389 0 R (309) 390 0 R (31) 132 0 R (310) 391 0 R (311) 396 0 R (312) 379 0 R (313) 397 0 R (314) 398 0 R (315) 399 0 R (316) 400 0 R (317) 401 0 R (318) 402 0 R (319) 403 0 R (32) 133 0 R (320) 404 0 R (321) 405 0 R (322) 406 0 R (323) 407 0 R (324) 408 0 R (33) 106 0 R (35) 137 0 R (36) 138 0 R (37) 139 0 R (38) 140 0 R (39) 141 0 R (4.0) 14 0 R (40) 142 0 R (41) 143 0 R (42) 144 0 R (43) 145 0 R (44) 146 0 R (45) 147 0 R (46) 107 0 R (48) 151 0 R (49) 108 0 R (5.0) 18 0 R (51) 152 0 R (52) 153 0 R (54) 154 0 R (55) 155 0 R (56) 156 0 R (57) 157 0 R (59) 158 0 R (6.0) 22 0 R (6.1.1) 26 0 R (6.2.1) 30 0 R (60) 159 0 R (61) 160 0 R (62) 161 0 R (63) 109 0 R (65) 162 0 R (66) 163 0 R (67) 167 0 R (68) 168 0 R (69) 169 0 R (7.0) 34 0 R (70) 173 0 R (71) 174 0 R (72) 175 0 R (73) 176 0 R (74) 177 0 R (75) 178 0 R (76) 179 0 R (77) 180 0 R (78) 181 0 R (79) 182 0 R (8.0) 38 0 R (8.3.1) 42 0 R (8.4.1) 46 0 R (80) 183 0 R (81) 184 0 R (82) 185 0 R (83) 186 0 R (84) 187 0 R (85) 188 0 R (86) 192 0 R (87) 193 0 R (88) 199 0 R (89) 200 0 R (9.0) 50 0 R (90) 201 0 R (91) 194 0 R (92) 202 0 R (93) 203 0 R (94) 204 0 R (95) 205 0 R (96) 206 0 R (97) 110 0 R (99) 210 0 R (COPYING-FDL) 77 0 R (Doc-Start) 58 0 R (page.1) 57 0 R (page.10) 327 0 R (page.11) 342 0 R (page.12) 378 0 R (page.13) 395 0 R (page.2) 67 0 R (page.3) 81 0 R (page.4) 117 0 R (page.5) 124 0 R (page.6) 263 0 R (page.7) 267 0 R (page.8) 300 0 R (page.9) 309 0 R (table.1) 76 0 R (table.2) 259 0 R] /Limits [(0) (table.2)] >> endobj 421 0 obj << /Kids [420 0 R] >> endobj 422 0 obj << /Dests 421 0 R >> endobj 423 0 obj << /Type /Catalog /Pages 418 0 R /Outlines 419 0 R /Names 422 0 R /PageMode /UseOutlines /OpenAction 53 0 R >> endobj 424 0 obj << /Author()/Title()/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfeTeX-1.21a)/Keywords() /CreationDate (D:20101208234159+01'00') /PTEX.Fullbanner (This is pdfeTeX, Version 3.141592-1.21a-2.2 (Web2C 7.5.4) kpathsea version 3.5.4) >> endobj xref 0 425 0000000000 65535 f 0000000009 00000 n 0000001864 00000 n 0000176931 00000 n 0000000048 00000 n 0000000087 00000 n 0000022167 00000 n 0000176847 00000 n 0000000126 00000 n 0000000161 00000 n 0000024428 00000 n 0000176761 00000 n 0000000200 00000 n 0000000233 00000 n 0000025656 00000 n 0000176673 00000 n 0000000273 00000 n 0000000299 00000 n 0000027766 00000 n 0000176585 00000 n 0000000339 00000 n 0000000381 00000 n 0000030348 00000 n 0000176460 00000 n 0000000421 00000 n 0000000463 00000 n 0000030535 00000 n 0000176386 00000 n 0000000505 00000 n 0000000542 00000 n 0000031280 00000 n 0000176312 00000 n 0000000584 00000 n 0000000644 00000 n 0000036568 00000 n 0000176224 00000 n 0000000684 00000 n 0000000728 00000 n 0000040971 00000 n 0000176099 00000 n 0000000768 00000 n 0000000833 00000 n 0000041158 00000 n 0000176025 00000 n 0000000875 00000 n 0000000922 00000 n 0000047332 00000 n 0000175951 00000 n 0000000964 00000 n 0000001013 00000 n 0000053202 00000 n 0000175876 00000 n 0000001053 00000 n 0000001114 00000 n 0000001566 00000 n 0000001925 00000 n 0000001164 00000 n 0000001684 00000 n 0000001744 00000 n 0000001804 00000 n 0000174751 00000 n 0000163831 00000 n 0000174582 00000 n 0000175378 00000 n 0000003395 00000 n 0000002817 00000 n 0000001995 00000 n 0000003275 00000 n 0000162761 00000 n 0000142447 00000 n 0000162590 00000 n 0000002961 00000 n 0000141857 00000 n 0000129089 00000 n 0000141681 00000 n 0000003118 00000 n 0000003335 00000 n 0000053141 00000 n 0000022228 00000 n 0000018864 00000 n 0000003489 00000 n 0000022107 00000 n 0000019139 00000 n 0000128393 00000 n 0000114291 00000 n 0000128222 00000 n 0000019286 00000 n 0000019433 00000 n 0000019580 00000 n 0000019727 00000 n 0000019874 00000 n 0000020021 00000 n 0000020168 00000 n 0000020315 00000 n 0000020462 00000 n 0000020609 00000 n 0000020756 00000 n 0000020903 00000 n 0000021051 00000 n 0000021199 00000 n 0000021347 00000 n 0000021496 00000 n 0000021645 00000 n 0000021794 00000 n 0000021950 00000 n 0000025594 00000 n 0000027704 00000 n 0000030286 00000 n 0000030473 00000 n 0000031218 00000 n 0000036506 00000 n 0000040909 00000 n 0000041096 00000 n 0000047270 00000 n 0000024491 00000 n 0000023924 00000 n 0000022334 00000 n 0000024366 00000 n 0000024073 00000 n 0000024219 00000 n 0000041907 00000 n 0000026285 00000 n 0000025411 00000 n 0000024586 00000 n 0000025532 00000 n 0000025719 00000 n 0000025781 00000 n 0000025843 00000 n 0000025907 00000 n 0000025969 00000 n 0000026031 00000 n 0000026095 00000 n 0000026159 00000 n 0000026221 00000 n 0000028513 00000 n 0000027583 00000 n 0000026380 00000 n 0000027829 00000 n 0000027891 00000 n 0000027953 00000 n 0000028015 00000 n 0000028077 00000 n 0000028138 00000 n 0000028200 00000 n 0000028263 00000 n 0000028325 00000 n 0000028388 00000 n 0000028450 00000 n 0000032833 00000 n 0000030164 00000 n 0000028608 00000 n 0000030411 00000 n 0000030596 00000 n 0000030658 00000 n 0000030719 00000 n 0000030781 00000 n 0000030843 00000 n 0000030906 00000 n 0000030970 00000 n 0000031032 00000 n 0000031093 00000 n 0000031155 00000 n 0000031343 00000 n 0000031405 00000 n 0000113704 00000 n 0000101087 00000 n 0000113533 00000 n 0000031466 00000 n 0000031528 00000 n 0000031590 00000 n 0000100451 00000 n 0000085740 00000 n 0000100280 00000 n 0000031652 00000 n 0000031713 00000 n 0000031776 00000 n 0000031838 00000 n 0000031900 00000 n 0000031963 00000 n 0000032025 00000 n 0000032087 00000 n 0000032150 00000 n 0000032212 00000 n 0000032275 00000 n 0000032337 00000 n 0000032399 00000 n 0000032461 00000 n 0000032524 00000 n 0000032586 00000 n 0000085189 00000 n 0000078099 00000 n 0000085018 00000 n 0000032648 00000 n 0000032711 00000 n 0000032772 00000 n 0000175491 00000 n 0000034313 00000 n 0000033694 00000 n 0000032979 00000 n 0000033816 00000 n 0000033878 00000 n 0000033940 00000 n 0000034003 00000 n 0000034064 00000 n 0000034125 00000 n 0000034188 00000 n 0000034250 00000 n 0000038514 00000 n 0000036384 00000 n 0000034422 00000 n 0000036631 00000 n 0000036693 00000 n 0000036757 00000 n 0000036821 00000 n 0000036883 00000 n 0000036945 00000 n 0000037006 00000 n 0000037069 00000 n 0000037133 00000 n 0000037195 00000 n 0000037259 00000 n 0000037323 00000 n 0000037387 00000 n 0000037449 00000 n 0000037511 00000 n 0000037574 00000 n 0000037636 00000 n 0000037698 00000 n 0000037760 00000 n 0000077680 00000 n 0000070696 00000 n 0000077505 00000 n 0000037824 00000 n 0000037886 00000 n 0000037948 00000 n 0000038011 00000 n 0000038073 00000 n 0000038135 00000 n 0000038198 00000 n 0000038260 00000 n 0000038322 00000 n 0000038386 00000 n 0000038450 00000 n 0000042093 00000 n 0000040787 00000 n 0000038648 00000 n 0000041034 00000 n 0000041221 00000 n 0000041283 00000 n 0000041347 00000 n 0000041411 00000 n 0000041472 00000 n 0000041535 00000 n 0000041597 00000 n 0000041659 00000 n 0000041721 00000 n 0000041783 00000 n 0000041845 00000 n 0000041969 00000 n 0000042031 00000 n 0000044264 00000 n 0000044080 00000 n 0000042213 00000 n 0000044202 00000 n 0000049029 00000 n 0000046896 00000 n 0000044359 00000 n 0000047018 00000 n 0000047080 00000 n 0000047142 00000 n 0000047206 00000 n 0000047395 00000 n 0000047457 00000 n 0000047519 00000 n 0000047580 00000 n 0000047643 00000 n 0000047705 00000 n 0000047769 00000 n 0000047832 00000 n 0000047896 00000 n 0000047959 00000 n 0000048022 00000 n 0000048084 00000 n 0000048146 00000 n 0000048209 00000 n 0000048273 00000 n 0000048337 00000 n 0000048399 00000 n 0000048461 00000 n 0000048524 00000 n 0000048588 00000 n 0000048651 00000 n 0000048714 00000 n 0000048778 00000 n 0000048840 00000 n 0000048903 00000 n 0000048967 00000 n 0000050581 00000 n 0000050145 00000 n 0000049162 00000 n 0000050267 00000 n 0000050329 00000 n 0000050392 00000 n 0000050456 00000 n 0000050518 00000 n 0000175608 00000 n 0000054133 00000 n 0000052957 00000 n 0000050677 00000 n 0000053079 00000 n 0000053265 00000 n 0000053327 00000 n 0000053389 00000 n 0000053451 00000 n 0000053513 00000 n 0000053575 00000 n 0000053637 00000 n 0000053699 00000 n 0000053761 00000 n 0000053823 00000 n 0000053885 00000 n 0000053947 00000 n 0000054009 00000 n 0000054071 00000 n 0000057495 00000 n 0000056632 00000 n 0000054228 00000 n 0000056754 00000 n 0000056816 00000 n 0000056878 00000 n 0000056940 00000 n 0000057002 00000 n 0000057063 00000 n 0000057124 00000 n 0000057185 00000 n 0000057247 00000 n 0000057309 00000 n 0000057371 00000 n 0000057433 00000 n 0000062280 00000 n 0000060101 00000 n 0000057578 00000 n 0000060223 00000 n 0000060285 00000 n 0000060347 00000 n 0000060409 00000 n 0000060471 00000 n 0000060533 00000 n 0000060596 00000 n 0000060658 00000 n 0000060721 00000 n 0000060783 00000 n 0000060846 00000 n 0000060908 00000 n 0000060971 00000 n 0000061032 00000 n 0000061095 00000 n 0000061157 00000 n 0000061220 00000 n 0000061282 00000 n 0000061345 00000 n 0000061407 00000 n 0000061469 00000 n 0000061531 00000 n 0000061594 00000 n 0000061656 00000 n 0000061719 00000 n 0000061781 00000 n 0000061844 00000 n 0000061906 00000 n 0000061969 00000 n 0000062031 00000 n 0000062094 00000 n 0000062156 00000 n 0000062218 00000 n 0000065739 00000 n 0000064750 00000 n 0000062363 00000 n 0000064872 00000 n 0000064934 00000 n 0000064996 00000 n 0000065058 00000 n 0000065120 00000 n 0000065182 00000 n 0000065243 00000 n 0000065305 00000 n 0000065367 00000 n 0000065429 00000 n 0000065491 00000 n 0000065553 00000 n 0000065615 00000 n 0000065677 00000 n 0000068725 00000 n 0000067733 00000 n 0000065822 00000 n 0000067855 00000 n 0000067917 00000 n 0000067979 00000 n 0000068041 00000 n 0000068103 00000 n 0000068165 00000 n 0000068227 00000 n 0000068291 00000 n 0000068353 00000 n 0000068415 00000 n 0000068477 00000 n 0000068539 00000 n 0000068601 00000 n 0000068663 00000 n 0000068808 00000 n 0000077925 00000 n 0000085484 00000 n 0000100805 00000 n 0000114031 00000 n 0000128731 00000 n 0000142191 00000 n 0000163307 00000 n 0000175094 00000 n 0000175725 00000 n 0000175802 00000 n 0000177002 00000 n 0000180719 00000 n 0000180758 00000 n 0000180796 00000 n 0000180925 00000 n trailer << /Size 425 /Root 423 0 R /Info 424 0 R /ID [ ] >> startxref 181188 %%EOF libdbi-drivers-0.9.0/drivers/sqlite3/dbd_sqlite3/c134.html000644 001750 001750 00000004636 11500004670 024070 0ustar00markusmarkus000000 000000 Peculiarities you should know about

    Chapter 4. Peculiarities you should know about

    This chapter lists known peculiarities of the sqlite3 driver. This includes SQLite3 features that differ from what you know from the other database servers supported by libdbi, and it includes features and misfeatures introduced by the sqlite3 driver. It is the intention of the driver author to reduce the number of misfeatures in future releases if possible.

    libdbi-drivers-0.9.0/drivers/sqlite3/dbd_sqlite3/c34.html000644 001750 001750 00000006257 11500004670 024010 0ustar00markusmarkus000000 000000 Introduction

    Chapter 1. Introduction

    SQLite is a smart library that implements an embeddable SQL database engine. No need for an external database server - an application linked against libsqlite can do it all by itself. Of course there are a few limitations of this approach compared to "real" SQL database servers, mostly for massively parallel high-throughput database applications, but on the other hand, installation and administration are a breeze.

    SQLite3 is a redesign of SQLite which is incompatible with the older 2.x versions. As the API functions and the library itself were renamed, SQLite3 also requires a slightly modified libdbi driver. You can have both the sqlite and the sqlite3 driver installed on your system, but you have to make sure that you access your databases with the driver that matches the database version. The easiest way to accomplish this is to use different database directories for each version.

    Your application should support the sqlite3 driver if one of the following applies:

    • You want to support potential users of your application who don't have the skills to administer a database server.

    • You want to offer the simplest possible installation of your application.

    • You want to let users test-drive your application without the need to fiddle with their production database servers.

    libdbi-drivers-0.9.0/drivers/sqlite3/dbd_sqlite3/c47.html000644 001750 001750 00000004146 11500004670 024007 0ustar00markusmarkus000000 000000 Installation

    Chapter 2. Installation

    This chapter describes the prerequisites and the procedures to build and install the sqlite3 driver from the sources.

    libdbi-drivers-0.9.0/drivers/sqlite3/dbd_sqlite3/c98.html000644 001750 001750 00000011077 11500004670 024016 0ustar00markusmarkus000000 000000 Driver options

    Chapter 3. Driver options

    Your application has to initialize libdbi drivers by setting some driver options with the dbi_conn_set_option() and the dbi_conn_set_option_numeric() library functions. The sqlite driver supports the following options:

    dbname

    The name of the database you want to work with. As a SQLite database corresponds to one file in your filesystem, dbname can be any legal filename. If the database/file doesn't exist when you first try to access it, SQLite will create it on the fly.

    It is important to understand that the full path of the database is composed of sqlite3_dbdir and dbname. Therefore dbname should not contain the full path of a file, but just the name.

    sqlite3_dbdir

    This is the directory that contains all sqlite databases. Use the full path please. If this option is not specified, a compile-time default directory will be used. By default, this directory (usually /usr/local/var/lib/libdbi/sqlite3) has read and write permissions for everyone with the sticky bit set. If this is not suitable for your application, use a custom directory with your preferred permissions instead.

    Note: It is necessary to keep all sqlite databases in one directory to make it possible to list all existing databases through the libdbi API. However, you are free to open more than one connection simultaneously, each one using a different setting of sqlite3_dbdir.

    timeout (numeric)

    The connection timeout in seconds.

    sqlite3_timeout (numeric)

    The design of SQLite3 does not allow fully concurrent access by two clients. However, if the timeout is larger than zero, the second client will wait for the given amount of time for the first client to release its lock, if necessary. If the timeout is set to zero, the second client will return immediately, indicating a busy status. The numerical value of this option specifies the timeout in milliseconds.

    Note: This option is deprecated. Use the generic option timeout instead. In the current implementation, sqlite3_timeout overrides timeout if both are set. Please be aware that these options use different time scales.

    libdbi-drivers-0.9.0/drivers/sqlite3/dbd_sqlite3/copying-fdl.html000644 001750 001750 00000052172 11500004670 025627 0ustar00markusmarkus000000 000000 GNU Free Documentation License

    Appendix A. GNU Free Documentation License

    Version 1.1, March 2000

    Copyright (C) 2000 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.

    0. PREAMBLE

    The purpose of this License is to make a manual, textbook, or other written document "free" in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others.

    This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software.

    We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference.

    1. APPLICABILITY AND DEFINITIONS

    This License applies to any manual or other work that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you".

    A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language.

    A "Secondary Section" is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (For example, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them.

    The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License.

    The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License.

    A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, whose contents can be viewed and edited directly and straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup has been designed to thwart or discourage subsequent modification by readers is not Transparent. A copy that is not "Transparent" is called "Opaque".

    Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML designed for human modification. Opaque formats include PostScript, PDF, proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML produced by some word processors for output purposes only.

    The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, "Title Page" means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text.

    2. VERBATIM COPYING

    You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3.

    You may also lend copies, under the same conditions stated above, and you may publicly display copies.

    3. COPYING IN QUANTITY

    If you publish printed copies of the Document numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects.

    If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages.

    If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a publicly-accessible computer-network location containing a complete Transparent copy of the Document, free of added material, which the general network-using public has access to download anonymously at no charge using public-standard network protocols. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public.

    It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document.

    4. MODIFICATIONS

    You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version:

    1. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission.

    2. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has less than five).

    3. State on the Title page the name of the publisher of the Modified Version, as the publisher.

    4. Preserve all the copyright notices of the Document.

    5. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices.

    6. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below.

    7. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice.

    8. Include an unaltered copy of this License.

    9. Preserve the section entitled "History", and its title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section entitled "History" in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence.

    10. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the "History" section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission.

    11. In any section entitled "Acknowledgements" or "Dedications", preserve the section's title, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein.

    12. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles.

    13. Delete any section entitled "Endorsements". Such a section may not be included in the Modified Version.

    14. Do not retitle any existing section as "Endorsements" or to conflict in title with any Invariant Section.

    If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles.

    You may add a section entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various parties--for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard.

    You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one.

    The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version.

    5. COMBINING DOCUMENTS

    You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice.

    The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work.

    In the combination, you must combine any sections entitled "History" in the various original documents, forming one section entitled "History"; likewise combine any sections entitled "Acknowledgements", and any sections entitled "Dedications". You must delete all sections entitled "Endorsements."

    6. COLLECTIONS OF DOCUMENTS

    You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects.

    You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document.

    7. AGGREGATION WITH INDEPENDENT WORKS

    A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, does not as a whole count as a Modified Version of the Document, provided no compilation copyright is claimed for the compilation. Such a compilation is called an "aggregate", and this License does not apply to the other self-contained works thus compiled with the Document, on account of their being thus compiled, if they are not themselves derivative works of the Document.

    If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one quarter of the entire aggregate, the Document's Cover Texts may be placed on covers that surround only the Document within the aggregate. Otherwise they must appear on covers around the whole aggregate.

    8. TRANSLATION

    Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License provided that you also include the original English version of this License. In case of a disagreement between the translation and the original English version of this License, the original English version will prevail.

    9. TERMINATION

    You may not copy, modify, sublicense, or distribute the Document except as expressly provided for under this License. Any other attempt to copy, modify, sublicense or distribute the Document is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.

    10. FUTURE REVISIONS OF THIS LICENSE

    The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See http://www.gnu.org/copyleft/.

    Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation.

    How to use this License for your documents

    To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page:

    Copyright (c) YEAR YOUR NAME. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. A copy of the license is included in the section entitled "GNU Free Documentation License".

    If you have no Invariant Sections, write "with no Invariant Sections" instead of saying which ones are invariant. If you have no Front-Cover Texts, write "no Front-Cover Texts" instead of "Front-Cover Texts being LIST"; likewise for Back-Cover Texts.

    If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software.

    libdbi-drivers-0.9.0/drivers/sqlite3/dbd_sqlite3/f23.html000644 001750 001750 00000005727 11500004670 024012 0ustar00markusmarkus000000 000000 Preface

    Preface

    libdbi is a database abstraction layer written in C. It implements a framework that can utilize separate driver libraries for specific database servers. The libdbi-drivers project provides the drivers necessary to talk to the supported database servers.

    This manual provides information about the sqlite3 driver. The manual is intended for programmers who write applications linked against libdbi and who want their applications to work with the sqlite3 driver.

    Questions and comments about the sqlite3 driver should be sent to the libdbi-drivers-devel mailing list. Visit the libdbi-drivers-devel list page to subscribe and for further information. Questions and comments about the libdbi library should be sent to the appropriate libdbi mailing list.

    The sqlite3 driver is maintained by Markus Hoenicka.

    libdbi-drivers-0.9.0/drivers/sqlite3/dbd_sqlite3/index.html000644 001750 001750 00000006371 11500004670 024523 0ustar00markusmarkus000000 000000 sqlite3 driver manual

    sqlite3 driver manual

    A libdbi driver using the SQLite3 embedded database engine

    Markus Hoenicka

    Revision History
    Revision $Revision: 1.9 $$Date: 2008/07/28 21:07:49 $

    Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is included in Appendix A.


    libdbi-drivers-0.9.0/drivers/sqlite3/dbd_sqlite3/x137.html000644 001750 001750 00000016735 11500004670 024123 0ustar00markusmarkus000000 000000 SQLite3 (mis)features

    4.1. SQLite3 (mis)features

    As the SQLite3 package is constantly being improved, you should refer to the original documentation about the SQL features it supports and about the SQL features it doesn't support.

    One noticeable difference between SQLite3 and other SQL database engines is that the former uses something called "manifest typing". The practical difference to the typeless nature of SQLite 2.x is negligible as it still does not support the rich typing used by most other SQL database engines. In order to satisfy the needs of the strongly typed retrieval functions of libdbi, the only way out is to declare the column types in a CREATE TABLE statement just as you would with any other SQL database engine. As an example, the following statement is perfectly fine with SQLite3, but not with the sqlite3 driver:

    CREATE TABLE foo (a,b,c)

    However, the following statement is fine with SQLite3, the sqlite3 driver, and just about any other SQL database engine out there:

    CREATE TABLE foo (a INTEGER,b TEXT,c VARCHAR(64))

    The following table lists the column types which are positively recognized by the sqlite driver. Essentially all column types supported by MySQL and PostgreSQL are supported by this driver as well, making it reasonably easy to write portable SQL code. All other column types are treated as strings.

    Table 4-1. SQL column types supported by the sqlite driver

    typedescription
    TINYBLOB, BLOB, MEDIUMBLOB, LONGBLOB, BYTEAString types of unlimited length. Binary data must be safely encoded, see text.
    CHAR(), VARCHAR(), TINYTEXT, TEXT, MEDIUMTEXT, LONGTEXTString types of unlimited length. There is no chopping or padding performed by the database engine.
    ENUMString type of unlimited length. In contrast to MySQL, choosing ENUM over VARCHAR does not save any storage space.
    SETString type of unlimited length. In contrast to MySQL, the input is not checked against the list of allowed values.
    YEARString type of unlimited length. MySQL stores 2 or 4 digit years as a 1 byte value, whereas the SQLite drivers stores the string as provided.
    TINYINT, INT1, CHARA 1 byte type used to store one character, a signed integer between -128 and 127, or an unsigned integer between 0 and 255.
    SMALLINT, INT22 byte (short) integer type used to store a signed integer between -32768 and 32767 or an unsigned integer between 0 and 65535.
    MEDIUMINT3 byte integer type used to store a signed integer between -8388608 and 8388607 or an unsigned integer between 0 and 16777215.
    INT, INTEGER, INT44 byte (long) integer type used to store a signed integer between -2147483648 and 2147483647 or an unsigned integer between 0 and 4294967295.
    BIGINT, INT8, INTEGER PRIMARY KEY8 byte (long long) integer type used to store a signed integer between -9223372036854775808 and 9223372036854775807 or an unsigned integer between 0 and 18446744073709551615. See below for a discussion of INTEGER PRIMARY KEY.
    DECIMAL, NUMERICA string type of unlimited length used to store floating-point numbers of arbitrary precision.
    TIMESTAMP, DATETIMEA string type of unlimited length used to store date/time combinations. The required format is 'YYYY-MM-DD HH:MM:SS', anything following this pattern is ignored.
    DATEA string type of unlimited length used to store a date. The required format is 'YYYY-MM-DD', anything following this pattern is ignored.
    TIMEA string type of unlimited length used to store a time. The required format is 'HH:MM:SS', anything following this pattern is ignored.
    FLOAT, FLOAT4, REALA 4 byte floating-point number. The range is -3.402823466E+38 to -1.175494351E-38, 0, and 1.175494351E-38 to 3.402823466E+38. Please note that MySQL treats REAL as an 8 byte instead of a 4 byte float like PostgreSQL.
    DOUBLE, DOUBLE PRECISION, FLOAT8An 8 byte floating-point number. The range is -1.7976931348623157E+308 to -2.2250738585072014E-308, 0, and 2.2250738585072014E-308 to 1.7976931348623157E+308.

    Another difference is the lack of access control on the database engine level. Most SQL database servers implement some mechanisms to restrict who is allowed to fiddle with the databases and who is not. As SQLite3 uses regular files to store its databases, all available access control is on the filesystem level. There is no SQL interface to this kind of access control, but chmod and chown are your friends.

    libdbi-drivers-0.9.0/drivers/sqlite3/dbd_sqlite3/x209.html000644 001750 001750 00000012732 11500004670 024114 0ustar00markusmarkus000000 000000 sqlite driver misfeatures

    4.2. sqlite driver misfeatures

    And now we have to discuss how successful the sqlite driver is in squeezing the SQLite idea of a database engine into the libdbi framework which was shaped after MySQL and PostgreSQL. Keep in mind that the limitations mentioned here are not intrinsic (except maybe the first one which is beyond our control), that is a sufficient amount of coding might fix these problems eventually.

    • SQLite3 handles auto-increment columns in a fairly non-intuitive way. Only the type INTEGER PRIMARY KEY auto-increments. As a user of other database engine you might expect the row IDs to be 4-byte integers (they were in 2.x), but nope: they are in fact 8-byte integers, and therefore equivalent to INT8 or BIGINT of other engines. This leaves us with the odd "feature" of the sqlite3 driver that INTEGER is a 4-byte integer, whereas INTEGER PRIMARY KEY is a 8-bit integer type. If this were not the case, auto-incrementing columns would be artificially limited to the range of 4-byte integers. On the other hand this means that you cannot declare a real 4-byte integer auto-incrementing column.

      Warning

      Do not forget to use dbi_result_get_longlong() or dbi_result_get_ulonglong to retrieve values from columns declared as INTEGER PRIMARY KEY.

    • The (essentially) typeless nature of SQLite has some nasty consequences. The sqlite driver takes great care to reconstruct the type of a field that you request in a query, but this isn't always successful. To help the driver get things right, please stick to the following rules:

      • When using a function as a result column [e.g. count(*)], the opening bracket must hug the function name as shown. The function call must also be aliased.

      • When using an expression as a result column [e.g. (count(*) + 6)], the entire expression must be enclosed in brackets as shown and must also be aliased.

    • The sqlite driver currently assumes that the directory separator of your filesystem is a slash (/). This may be wrong on your particular system. It is not a problem for Windows systems as long as the sqlite driver is built with the Cygwin tools (see README.win32).

    • Listing tables with the dbi_conn_get_table_list() libdbi function currently returns only permanent tables. Temporary tables are ignored.

    • The sqlite driver assumes that table and field names do not exceed 128 characters in length, including the trailing \0. I don't know whether SQLite internally has such a limit or not (both MySQL and PostgreSQL have a lower limit). The limit can be increased by changing a single #define in the dbd_sqlite.h header file.

    • In a few cases, the sqlite driver expects you to type SQL keywords in all lowercase or all uppercase, but not mixed. This holds true for the 'from' in a SELECT statement. Type it either as 'from' or as 'FROM', but refrain from using 'fRoM' or other funny mixtures of uppercase and lowercase. Most other database engines treat the keywords as case-insensitive and would accept all variants.

    libdbi-drivers-0.9.0/drivers/sqlite3/dbd_sqlite3/x50.html000644 001750 001750 00000005341 11500004670 024024 0ustar00markusmarkus000000 000000 Prerequisites

    2.1. Prerequisites

    The following packages have to be installed on your system:

    libdbi

    This library provides the framework of the database abstraction layer which can utilize the sqlite3 driver to perform database operations. The download page as well as the mailing lists with bug reports and patches are accessible at sourceforge.net/projects/libdbi.

    sqlite3

    This library implements the embedded database engine. Find the most recent release at www.sqlite.org. The current version of the sqlite driver was tested with SQLite3 version 3.0.8 and should work ok with later releases.

    libdbi-drivers-0.9.0/drivers/sqlite3/dbd_sqlite3/x64.html000644 001750 001750 00000011233 11500004670 024026 0ustar00markusmarkus000000 000000 Build and install the sqlite3 driver

    2.2. Build and install the sqlite3 driver

    First you have to unpack the libdbi-drivers archive in a suitable directory. Unpacking will create a new subdirectory libdbi-drivers-X.Y where "X.Y" denotes the version:

    $ tar -xzf libdbi-drivers-0.7.2.tar.gz

    The libdbi-drivers project consists of several drivers that use a common build system. Therefore you must tell configure explicitly that you want to build the sqlite3 driver (you can list as many drivers as you want to build):

    $ cd libdbi-drivers
    $ ./configure --with-sqlite3

    Run ./configure --help to find out about additional options.

    Then build the driver with the command:

    $ make

    Note: Please note that you may have to invoke gmake, the GNU version of make, on some systems.

    Then install the driver with the command (you'll need root permissions to do this):

    $ make install

    To test the operation of the newly installed driver, use the command:

    $ make check

    This command creates and runs a test program that performs a few basic input and output tests. The program will ask for a database name. This can be any name that is a valid filename on your system. It will also ask for a data directory. This is the directory that is used to create the test database. Needless to say that you need write access to that directory. If you accept the default ".", the database will be created in the tests subdirectory.

    libdbi-drivers-0.9.0/drivers/sqlite/dbd_sqlite/000755 001750 001750 00000000000 12117473272 022366 5ustar00markusmarkus000000 000000 libdbi-drivers-0.9.0/drivers/sqlite/README000644 001750 001750 00000002511 07646043602 021134 0ustar00markusmarkus000000 000000 libdbi-drivers - drivers for libdbi, the Database Independent Abstraction Layer for C Copyright (C) 2001-2002, Markus Hoenicka http://libdbi-drivers.sourceforge.net SQLITE DRIVER: -------------- A driver implementing an embedded SQL engine using libsqlite (http://www.sqlite.org) NOTES: ------ The sqlite driver ignores the host, port, username, and password options completely as the sqlite access control works entirely over the filesystem. If you're allowed to run an application linked against libdbi and if the sqlite driver can be loaded from your account, you have access to the "database server". If the file containing the sqlite database is read/writable from your account, you have read/write access to that database. The sqlite driver uses one driver-specific option. In order to make the operation as a libdbi driver feasible, you have to assign one directory of your filesystem as the sqlite data directory by setting the "sqlite_dbdir" option appropriately. The driver will look for existing databases in this directory and it will create new databases in the very same directory. CONTACT INFO: ------------- libdbi-drivers-devel@lists.sourceforge.net http://libdbi-drivers.sourceforge.net Markus Hoenicka $Id: README,v 1.1 2003/04/12 17:06:10 mhoenicka Exp $ libdbi-drivers-0.9.0/drivers/sqlite/Makefile.am000644 001750 001750 00000003277 11447722452 022323 0ustar00markusmarkus000000 000000 ## Process this file with automake to produce Makefile.in AUTOMAKE_OPTIONS = foreign docdir = $(datadir)/doc/$(PACKAGE)-$(VERSION) if HAVE_SQLITE if BUILDDOCS htdocdir = $(docdir)/dbd_sqlite doc_DATA = dbd_sqlite.pdf htdoc_DATA = dbd_sqlite/* else htdocdir = doc_DATA = htdoc_DATA = endif sqlite_ltlibs = libdbdsqlite.la sqlite_ldflags = -module -avoid-version sqlite_sources = dbd_sqlite.c else htdocdir = doc_DATA = htdoc_DATA = sqlite_ltlibs = sqlite_ldflags = sqlite_sources = endif INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/include @DBI_INCLUDE@ @SQLITE_INCLUDE@ libdir = $(driverdir) lib_LTLIBRARIES = $(sqlite_ltlibs) libdbdsqlite_la_LDFLAGS = $(sqlite_ldflags) @SQLITE_LDFLAGS@ @SQLITE_LIBS@ @LIBADD_LIBDBI@ libdbdsqlite_la_SOURCES = $(sqlite_sources) libdbdsqlite_la_DEPENDENCIES = dbd_sqlite.h AM_CPPFLAGS=-DDBDIR=\"@dbi_dbdir@/sqlite\" EXTRA_DIST = dbd_sqlite.c dbd_sqlite.h AUTHORS TODO README dbd_sqlite.sgml dbd_sqlite.pdf dbd_sqlite/* # jadetex spews out tons of useless crap. shut it up: dbd_sqlite.pdf: dbd_sqlite.sgml @echo "Converting dbd_sqlite.sgml to PDF..."; openjade -t tex -V tex-backend -d $(top_srcdir)/doc/include/doc-print.dsl dbd_sqlite.sgml # run jadetex three times to get the references right pdftex "&pdfjadetex" dbd_sqlite.tex pdftex "&pdfjadetex" dbd_sqlite.tex pdftex "&pdfjadetex" dbd_sqlite.tex dbd_sqlite/*: dbd_sqlite.sgml @echo "Converting dbd_sqlite.sgml to HTML..."; mkdir -p dbd_sqlite && cd dbd_sqlite && openjade -t sgml -d $(top_srcdir)/../doc/include/doc-html.dsl ../dbd_sqlite.sgml maintainer-clean: clean rm -f dbd_sqlite.pdf dbd_sqlite/* install-exec-local: $(mkinstalldirs) $(DESTDIR)@dbi_dbdir@/sqlite chmod 1777 $(DESTDIR)@dbi_dbdir@/sqlite libdbi-drivers-0.9.0/drivers/sqlite/Makefile.in000644 001750 001750 00000055602 12117467053 022331 0ustar00markusmarkus000000 000000 # Makefile.in generated by automake 1.12.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2012 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = drivers/sqlite DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(top_srcdir)/depcomp AUTHORS TODO ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(docdir)" \ "$(DESTDIR)$(htdocdir)" LTLIBRARIES = $(lib_LTLIBRARIES) libdbdsqlite_la_LIBADD = am__libdbdsqlite_la_SOURCES_DIST = dbd_sqlite.c @HAVE_SQLITE_TRUE@am__objects_1 = dbd_sqlite.lo am_libdbdsqlite_la_OBJECTS = $(am__objects_1) libdbdsqlite_la_OBJECTS = $(am_libdbdsqlite_la_OBJECTS) libdbdsqlite_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(libdbdsqlite_la_LDFLAGS) $(LDFLAGS) -o $@ @HAVE_SQLITE_TRUE@am_libdbdsqlite_la_rpath = -rpath $(libdir) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(libdbdsqlite_la_SOURCES) DIST_SOURCES = $(am__libdbdsqlite_la_SOURCES_DIST) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac DATA = $(doc_DATA) $(htdoc_DATA) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DB2_INCLUDE = @DB2_INCLUDE@ DB2_LDFLAGS = @DB2_LDFLAGS@ DB2_LIBS = @DB2_LIBS@ DB2_TEST = @DB2_TEST@ DBI_INCLUDE = @DBI_INCLUDE@ DEBUG = @DEBUG@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FIREBIRD_INCLUDE = @FIREBIRD_INCLUDE@ FIREBIRD_ISQL = @FIREBIRD_ISQL@ FIREBIRD_ISQL_FLAG = @FIREBIRD_ISQL_FLAG@ FIREBIRD_LDFLAGS = @FIREBIRD_LDFLAGS@ FIREBIRD_LIBS = @FIREBIRD_LIBS@ FIREBIRD_TEST = @FIREBIRD_TEST@ FREETDS_INCLUDE = @FREETDS_INCLUDE@ FREETDS_LDFLAGS = @FREETDS_LDFLAGS@ FREETDS_LIBS = @FREETDS_LIBS@ FREETDS_TEST = @FREETDS_TEST@ GREP = @GREP@ INGRES_INCLUDE = @INGRES_INCLUDE@ INGRES_LDFLAGS = @INGRES_LDFLAGS@ INGRES_LIBS = @INGRES_LIBS@ INGRES_TEST = @INGRES_TEST@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBADD_LIBDBI = @LIBADD_LIBDBI@ LIBDBI_LIBDIR = @LIBDBI_LIBDIR@ LIBDBI_TEST = @LIBDBI_TEST@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSQL_INCLUDE = @MSQL_INCLUDE@ MSQL_LDFLAGS = @MSQL_LDFLAGS@ MSQL_LIBS = @MSQL_LIBS@ MSQL_TEST = @MSQL_TEST@ MYSQL_CONFIG = @MYSQL_CONFIG@ MYSQL_INCLUDE = @MYSQL_INCLUDE@ MYSQL_LDFLAGS = @MYSQL_LDFLAGS@ MYSQL_LIBS = @MYSQL_LIBS@ MYSQL_TEST = @MYSQL_TEST@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ ORACLE_INCLUDE = @ORACLE_INCLUDE@ ORACLE_LDFLAGS = @ORACLE_LDFLAGS@ ORACLE_LIBS = @ORACLE_LIBS@ ORACLE_TEST = @ORACLE_TEST@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PGSQL_INCLUDE = @PGSQL_INCLUDE@ PGSQL_LDFLAGS = @PGSQL_LDFLAGS@ PGSQL_LIBS = @PGSQL_LIBS@ PGSQL_TEST = @PGSQL_TEST@ PG_CONFIG = @PG_CONFIG@ PROFILE = @PROFILE@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SQLITE3_INCLUDE = @SQLITE3_INCLUDE@ SQLITE3_LDFLAGS = @SQLITE3_LDFLAGS@ SQLITE3_LIBS = @SQLITE3_LIBS@ SQLITE3_TEST = @SQLITE3_TEST@ SQLITE_INCLUDE = @SQLITE_INCLUDE@ SQLITE_LDFLAGS = @SQLITE_LDFLAGS@ SQLITE_LIBS = @SQLITE_LIBS@ SQLITE_TEST = @SQLITE_TEST@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ dbi_dbdir = @dbi_dbdir@ docdir = $(datadir)/doc/$(PACKAGE)-$(VERSION) docs_subdirs = @docs_subdirs@ driverdir = @driverdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = $(driverdir) libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = foreign @BUILDDOCS_FALSE@@HAVE_SQLITE_TRUE@htdocdir = @BUILDDOCS_TRUE@@HAVE_SQLITE_TRUE@htdocdir = $(docdir)/dbd_sqlite @HAVE_SQLITE_FALSE@htdocdir = @BUILDDOCS_FALSE@@HAVE_SQLITE_TRUE@doc_DATA = @BUILDDOCS_TRUE@@HAVE_SQLITE_TRUE@doc_DATA = dbd_sqlite.pdf @HAVE_SQLITE_FALSE@doc_DATA = @BUILDDOCS_FALSE@@HAVE_SQLITE_TRUE@htdoc_DATA = @BUILDDOCS_TRUE@@HAVE_SQLITE_TRUE@htdoc_DATA = dbd_sqlite/* @HAVE_SQLITE_FALSE@htdoc_DATA = @HAVE_SQLITE_FALSE@sqlite_ltlibs = @HAVE_SQLITE_TRUE@sqlite_ltlibs = libdbdsqlite.la @HAVE_SQLITE_FALSE@sqlite_ldflags = @HAVE_SQLITE_TRUE@sqlite_ldflags = -module -avoid-version @HAVE_SQLITE_FALSE@sqlite_sources = @HAVE_SQLITE_TRUE@sqlite_sources = dbd_sqlite.c INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/include @DBI_INCLUDE@ @SQLITE_INCLUDE@ lib_LTLIBRARIES = $(sqlite_ltlibs) libdbdsqlite_la_LDFLAGS = $(sqlite_ldflags) @SQLITE_LDFLAGS@ @SQLITE_LIBS@ @LIBADD_LIBDBI@ libdbdsqlite_la_SOURCES = $(sqlite_sources) libdbdsqlite_la_DEPENDENCIES = dbd_sqlite.h AM_CPPFLAGS = -DDBDIR=\"@dbi_dbdir@/sqlite\" EXTRA_DIST = dbd_sqlite.c dbd_sqlite.h AUTHORS TODO README dbd_sqlite.sgml dbd_sqlite.pdf dbd_sqlite/* all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign drivers/sqlite/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign drivers/sqlite/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ } uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libdbdsqlite.la: $(libdbdsqlite_la_OBJECTS) $(libdbdsqlite_la_DEPENDENCIES) $(EXTRA_libdbdsqlite_la_DEPENDENCIES) $(libdbdsqlite_la_LINK) $(am_libdbdsqlite_la_rpath) $(libdbdsqlite_la_OBJECTS) $(libdbdsqlite_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dbd_sqlite.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-docDATA: $(doc_DATA) @$(NORMAL_INSTALL) @list='$(doc_DATA)'; test -n "$(docdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(docdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(docdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(docdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(docdir)" || exit $$?; \ done uninstall-docDATA: @$(NORMAL_UNINSTALL) @list='$(doc_DATA)'; test -n "$(docdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(docdir)'; $(am__uninstall_files_from_dir) install-htdocDATA: $(htdoc_DATA) @$(NORMAL_INSTALL) @list='$(htdoc_DATA)'; test -n "$(htdocdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(htdocdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(htdocdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(htdocdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(htdocdir)" || exit $$?; \ done uninstall-htdocDATA: @$(NORMAL_UNINSTALL) @list='$(htdoc_DATA)'; test -n "$(htdocdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(htdocdir)'; $(am__uninstall_files_from_dir) ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(DATA) installdirs: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(docdir)" "$(DESTDIR)$(htdocdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-docDATA install-htdocDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-exec-local install-libLTLIBRARIES install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-docDATA uninstall-htdocDATA \ uninstall-libLTLIBRARIES .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libLTLIBRARIES clean-libtool cscopelist ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am \ install-docDATA install-dvi install-dvi-am install-exec \ install-exec-am install-exec-local install-htdocDATA \ install-html install-html-am install-info install-info-am \ install-libLTLIBRARIES install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am uninstall-docDATA \ uninstall-htdocDATA uninstall-libLTLIBRARIES # jadetex spews out tons of useless crap. shut it up: dbd_sqlite.pdf: dbd_sqlite.sgml @echo "Converting dbd_sqlite.sgml to PDF..."; openjade -t tex -V tex-backend -d $(top_srcdir)/doc/include/doc-print.dsl dbd_sqlite.sgml # run jadetex three times to get the references right pdftex "&pdfjadetex" dbd_sqlite.tex pdftex "&pdfjadetex" dbd_sqlite.tex pdftex "&pdfjadetex" dbd_sqlite.tex dbd_sqlite/*: dbd_sqlite.sgml @echo "Converting dbd_sqlite.sgml to HTML..."; mkdir -p dbd_sqlite && cd dbd_sqlite && openjade -t sgml -d $(top_srcdir)/../doc/include/doc-html.dsl ../dbd_sqlite.sgml maintainer-clean: clean rm -f dbd_sqlite.pdf dbd_sqlite/* install-exec-local: $(mkinstalldirs) $(DESTDIR)@dbi_dbdir@/sqlite chmod 1777 $(DESTDIR)@dbi_dbdir@/sqlite # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: libdbi-drivers-0.9.0/drivers/sqlite/AUTHORS000644 001750 001750 00000000300 07646043602 021316 0ustar00markusmarkus000000 000000 The following people have been involved in the SQLite driver development: Main developer: * Markus Hoenicka $Id: AUTHORS,v 1.1 2003/04/12 17:06:10 mhoenicka Exp $ libdbi-drivers-0.9.0/drivers/sqlite/TODO000644 001750 001750 00000000233 07646043602 020743 0ustar00markusmarkus000000 000000 $Id: TODO,v 1.1 2003/04/12 17:06:10 mhoenicka Exp $ - improve the data type guessing code to support all SQL functions - define driver capabilities libdbi-drivers-0.9.0/drivers/sqlite/dbd_sqlite.c000644 001750 001750 00000120003 12073360554 022525 0ustar00markusmarkus000000 000000 /* * libdbi-drivers - 3rd-party drivers for libdbi, a database independent * abstraction layer for C. * Copyright (C) 2002-2007, Markus Hoenicka * http://libdbi-drivers.sourceforge.net * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * dbd_sqlite.c: SQLite database support (using libsqlite) * Copyright (C) 2002-2007, Markus Hoenicka * http://libdbi-drivers.sourceforge.net * * $Id: dbd_sqlite.c,v 1.55 2013/01/09 21:30:20 mhoenicka Exp $ */ #ifdef HAVE_CONFIG_H #include #endif #define _GNU_SOURCE /* we need asprintf */ /* this is defined by the Makefile and passed via -D */ /* #define DBDIR /usr/local/var/lib/libdbi/sqlite */ #ifndef HAVE_ATOLL long long atoll(const char *str); #endif #ifndef HAVE_STRTOLL long long strtoll(const char *nptr, char **endptr, int base); #endif #include #include #include #include #include /* defines _POSIX_PATH_MAX */ #include /* directory listings */ #include /* stat */ #include /* S_ISXX macros */ #include /* directory listings */ #include /* toupper, etc */ #include #include #include #include #include "dbd_sqlite.h" static const dbi_info_t driver_info = { "sqlite", "SQLite database support (using libsqlite)", "Markus Hoenicka ", "http://libdbi-drivers.sourceforge.net", "dbd_sqlite v" VERSION, __DATE__ }; static const char *custom_functions[] = SQLITE_CUSTOM_FUNCTIONS; static const char *reserved_words[] = SQLITE_RESERVED_WORDS; static const char default_dbdir[] = DBDIR; /* the encoding strings */ static const char sqlite_encoding_UTF8[] = "UTF-8"; /* the following is an assumption that is most likely correct */ static const char sqlite_encoding_ISO8859[] = "ISO-8859-1"; /* forward declarations */ int _real_dbd_connect(dbi_conn_t *conn, const char* database); void _translate_sqlite_type(enum enum_field_types fieldtype, unsigned short *type, unsigned int *attribs); void _get_row_data(dbi_result_t *result, dbi_row_t *row, unsigned int rowidx); int find_result_field_types(char* field, dbi_conn_t *conn, const char* statement); char* get_field_type(const char* statement, const char* curr_field_name); static size_t sqlite_escape_string(char *to, const char *from, size_t length); int wild_case_compare(const char *str,const char *str_end, const char *wildstr,const char *wildend, char escape); static const char* _conn_get_dbdir(dbi_conn_t *conn); /* the real functions */ void dbd_register_driver(const dbi_info_t **_driver_info, const char ***_custom_functions, const char ***_reserved_words) { /* this is the first function called after the driver module is loaded into memory */ *_driver_info = &driver_info; *_custom_functions = custom_functions; *_reserved_words = reserved_words; } int dbd_initialize(dbi_driver_t *driver) { /* perform any database-specific server initialization. * this is called right after dbd_register_driver(). * return -1 on error, 0 on success. if -1 is returned, the driver will not * be added to the list of available drivers. */ /* this indicates the driver can be safely unloaded when libdbi is shut down. Change the value to '0' (zero) if the driver, or a library it is linked against, installs exit handlers via atexit() */ _dbd_register_driver_cap(driver, "safe_dlclose", 1); /* this indicates the database engine supports transactions */ _dbd_register_driver_cap(driver, "transaction_support", 1); /* this indicates the database engine supports savepoints */ _dbd_register_driver_cap(driver, "savepoint_support", 1); return 0; } int dbd_finalize(dbi_driver_t *driver) { /* perform any database-specific client library shutdown. * this is called right before dlclose()ing the driver. * return -1 on error, 0 on success. */ return 0; } int dbd_connect(dbi_conn_t *conn) { /* connect using the database set with the "dbname" option */ return _real_dbd_connect(conn, ""); } int _real_dbd_connect(dbi_conn_t *conn, const char* database) { /* connect using the database passed as an argument. If passed NULL or an empty string, this function tries to use the database set with the "dbname" option */ sqlite *sqcon; char* sq_errmsg = NULL; char* db_fullpath = NULL; /* ToDo: make OS-independent */ const char dirsep[] = "/"; const char *dbname; const char *dbdir; int timeout; /* initialize error stuff */ conn->error_number = 0; conn->error_message = NULL; /* sqlite does not use hostname, username, password, port */ if (database && *database) { dbname = database; } else { dbname = dbi_conn_get_option(conn, "dbname"); } if (!dbname) { _dbd_internal_error_handler(conn, "no database specified", DBI_ERROR_CLIENT); return -1; } /* sqlite specific options */ dbdir = _conn_get_dbdir(conn); if (!dbdir) { _dbd_internal_error_handler(conn, "no database directory specified", DBI_ERROR_CLIENT); return -1; } /* the requested database is a file in the given directory. Assemble full path of database */ db_fullpath = malloc(strlen(dbname)+strlen(dbdir)+2); /* leave room for \0 and / */ if (db_fullpath == NULL) { _dbd_internal_error_handler(conn, NULL, DBI_ERROR_NOMEM); return -1; } /* start with an empty string */ db_fullpath[0] = '\0'; if (dbdir && *dbdir) { strcpy(db_fullpath, dbdir); } if (db_fullpath[strlen(db_fullpath)-1] != *dirsep) { strcat(db_fullpath, dirsep); } if (dbname && *dbname) { strcat(db_fullpath, dbname); } /* fprintf(stderr, "try to open %s<<\n", db_fullpath); */ sqcon = sqlite_open(db_fullpath, 0 /* param not used */, &sq_errmsg); free(db_fullpath); if (!sqcon) { /* sqlite creates a database the first time we try to access it. If this function fails, there's usually a problem with access rights or an existing database is corrupted or created with an incompatible version */ if (sq_errmsg) { _dbd_internal_error_handler(conn, sq_errmsg, DBI_ERROR_CLIENT); free(sq_errmsg); } else { _dbd_internal_error_handler(conn, "could not open database", 0); } return -1; } else { conn->connection = (void *)sqcon; if (dbname) { conn->current_db = strdup(dbname); } } /* set the SQLite timeout to timeout milliseconds. The older SQLite-specific setting takes precedence over the generic timeout option for backwards compatibility */ timeout = dbi_conn_get_option_numeric(conn, "sqlite_timeout"); if (timeout == -1) { /* generic timeout is specified in seconds, not milliseconds */ timeout = 1000*dbi_conn_get_option_numeric(conn, "timeout"); if (timeout == -1) { timeout = 0; } } sqlite_busy_timeout(sqcon, timeout); return 0; } int dbd_disconnect(dbi_conn_t *conn) { if (conn->connection) { sqlite_close((sqlite *)conn->connection); if (conn->error_number) { conn->error_number = 0; } if (conn->error_message) { free(conn->error_message); conn->error_message = NULL; } } return 0; } int dbd_fetch_row(dbi_result_t *result, unsigned long long rowidx) { dbi_row_t *row = NULL; if (result->result_state == NOTHING_RETURNED) return 0; if (result->result_state == ROWS_RETURNED) { /* get row here */ row = _dbd_row_allocate(result->numfields); _get_row_data(result, row, rowidx); _dbd_row_finalize(result, row, rowidx); } return 1; /* 0 on error, 1 on successful fetchrow */ } int dbd_free_query(dbi_result_t *result) { if (result->result_handle) { sqlite_free_table((char **)result->result_handle); } return 0; } int dbd_goto_row(dbi_result_t *result, unsigned long long rowidx, unsigned long long currowidx) { result->currowidx = rowidx; return 1; } int dbd_get_socket(dbi_conn_t *conn){ /* sqlite does not use sockets, so we'll always return 0 */ return (int)0; } const char *dbd_get_encoding(dbi_conn_t *conn){ /* encoding is a compile-time option with the sqlite library. Instead of using the sqlite-provided string, we use the iana.org names */ if (!strcmp(sqlite_encoding, "UTF-8")) { return sqlite_encoding_UTF8; } else { return sqlite_encoding_ISO8859; } } const char* dbd_encoding_to_iana(const char *db_encoding) { /* nothing to translate, return original encoding */ return db_encoding; } const char* dbd_encoding_from_iana(const char *iana_encoding) { /* nothing to translate, return original encoding */ return iana_encoding; } char *dbd_get_engine_version(dbi_conn_t *conn, char *versionstring) { dbi_result_t *dbi_result; const char *versioninfo = NULL; /* initialize return string */ *versionstring = '\0'; dbi_result = dbd_query(conn, "SELECT sqlite_version()"); if (dbi_result) { if (dbi_result_next_row(dbi_result)) { versioninfo = dbi_result_get_string_idx(dbi_result, 1); strncpy(versionstring, versioninfo, VERSIONSTRING_LENGTH-1); versionstring[VERSIONSTRING_LENGTH-1] = '\0'; } dbi_result_free(dbi_result); } return versionstring; } dbi_result_t *dbd_list_dbs(dbi_conn_t *conn, const char *pattern) { char *sq_errmsg = NULL; char old_cwd[_POSIX_PATH_MAX] = ""; int retval; size_t entry_size; DIR *dp; struct dirent *entry; struct dirent *result; struct stat statbuf; dbi_result rs; /* sqlite has no builtin function to list databases. Databases are just files in the data directory. We search for matching files and fill a temporary table with what we've found. Then we query this table and pretend sqlite has done all the work */ const char *sq_datadir = _conn_get_dbdir(conn); /* this is not nice but we have to drop the table even if it does not exist (sqlite has no way to list *temporary* tables so we can't check for it's existence). Then we start over with a fresh table lest we want duplicates. Update: Now apparently there is a system table that lists temporary tables, but the DROP TABLE error doesn't hurt and is most likely faster than checking for the existence of the table */ rs = dbd_query(conn, "DROP TABLE libdbi_databases"); dbi_result_free(rs); rs = dbd_query(conn, "CREATE TEMPORARY TABLE libdbi_databases (dbname VARCHAR(255))"); dbi_result_free(rs); if (sq_datadir && (dp = opendir(sq_datadir)) == NULL) { _dbd_internal_error_handler(conn, "could not open data directory", DBI_ERROR_CLIENT); return NULL; } /* allocate memory for readdir_r(3) */ entry_size = _dirent_buf_size(dp); if (entry_size == 0) { return NULL; } entry = (struct dirent *) malloc (entry_size); if (entry == NULL) { return NULL; } memset (entry, 0, entry_size); getcwd(old_cwd, _POSIX_PATH_MAX); chdir(sq_datadir); while (1) { result = NULL; retval = readdir_r(dp, entry, &result); if (retval != 0 || result == NULL) { break; } stat(entry->d_name, &statbuf); if (S_ISREG(statbuf.st_mode)) { /* we do a magic number check here to make sure we get only databases, not random files in the current directory. SQLite databases start with the string: ** This file contains an SQLite 2.1 database ** */ FILE* fp; if ((fp = fopen(entry->d_name, "r")) != NULL) { char magic_text[48] = ""; if (fread(magic_text, 1, 47, fp) < 47) { /* either we can't read at all, or the file is too small for a sqlite database anyway */ fclose(fp); continue; } /* terminate magic text */ magic_text[47] = '\0'; if (strcmp(magic_text, "** This file contains an SQLite 2.1 database **")) { /* this file is not meant for us */ fclose(fp); continue; } /* close file again, we're done reading */ fclose(fp); /* match filename to a pattern, or use all found files */ if (pattern) { if (wild_case_compare(entry->d_name, &entry->d_name[strlen(entry->d_name)], pattern, &pattern[strlen(pattern)], '\\') == 0) { retval = sqlite_exec_printf((sqlite*)(conn->connection), "INSERT INTO libdbi_databases VALUES ('%s')", NULL, NULL, &sq_errmsg, entry->d_name); if (sq_errmsg) { _dbd_internal_error_handler(conn, sq_errmsg, retval); free(sq_errmsg); break; } } } else { retval = sqlite_exec_printf((sqlite*)(conn->connection), "INSERT INTO libdbi_databases VALUES ('%s')", NULL, NULL, &sq_errmsg, entry->d_name); if (sq_errmsg) { _dbd_internal_error_handler(conn, sq_errmsg, retval); free(sq_errmsg); break; } } } /* else: we can't read it, so forget about it */ } } /* end while */ free(entry); closedir(dp); chdir(old_cwd); /* now query our temporary table */ return dbd_query(conn, "SELECT dbname FROM libdbi_databases"); } dbi_result_t *dbd_list_tables(dbi_conn_t *conn, const char *db, const char *pattern) { /* list tables in a database. The current implementation lists permanent tables only, as most applications know about the temporary tables they created anyway. */ dbi_result_t *dbi_result; dbi_conn_t* tempconn; dbi_inst instance; int retval; char* sq_errmsg = NULL; char* sql_cmd; dbi_result_t *rs; /* this function tries to query a specific database, so we need a separate connection to that other database, retrieve the table names, and feed them to a temporary table in our main connection */ instance = dbi_driver_get_instance(dbi_conn_get_driver(conn)); tempconn = dbi_conn_new_r("sqlite", instance); /* we explicitly cast to (char*) as we discard the "const" thing here */ dbi_conn_set_option(tempconn, "dbname", (char*)db); dbi_conn_set_option(tempconn, "sqlite_dbdir", (char*)_conn_get_dbdir(conn)); if (dbi_conn_connect(tempconn) < 0) { _dbd_internal_error_handler(conn, NULL, DBI_ERROR_NOCONN); dbi_conn_close(tempconn); return NULL; } /* create temporary table for table names. The DROP command won't hurt if the table doesn't exist yet */ rs = dbd_query(conn, "DROP TABLE libdbi_tablenames"); dbi_result_free(rs); rs = dbd_query(conn, "CREATE TEMPORARY TABLE libdbi_tablenames (tablename VARCHAR(255))"); dbi_result_free(rs); /* fprintf(stderr, "created temporary table\n"); */ /* sqlite does not support the SHOW command, so we have to extract the information from the accessory sqlite_master table */ if (pattern == NULL) { asprintf(&sql_cmd, "SELECT name FROM sqlite_master WHERE type='table' ORDER BY name"); } else { asprintf(&sql_cmd, "SELECT name FROM sqlite_master WHERE type='table' AND name LIKE '%s' ORDER BY name", pattern); } dbi_result = dbd_query(tempconn, sql_cmd); free(sql_cmd); /* fprintf(stderr, "select from sqlite_master has run\n"); */ if (dbi_result) { while (dbi_result_next_row(dbi_result)) { retval = sqlite_exec_printf((sqlite*)(conn->connection), "INSERT INTO libdbi_tablenames VALUES ('%s')", NULL, NULL, NULL /* no error messages please */, dbi_result_get_string(dbi_result, "name")); } dbi_result_free(dbi_result); } else { dbi_conn_error(tempconn, (const char**)&sq_errmsg); } /* sqlite_close((sqlite*)(tempconn->connection)); */ dbi_conn_close(tempconn); return dbd_query(conn, "SELECT tablename FROM libdbi_tablenames ORDER BY tablename"); } dbi_result_t *dbd_query_null(dbi_conn_t *conn, const unsigned char *statement, size_t st_length) { return NULL; } size_t dbd_quote_string(dbi_driver_t *driver, const char *orig, char *dest) { /* foo's -> 'foo\'s' */ size_t len; strcpy(dest, "'"); len = sqlite_escape_string(dest+1, orig, strlen(orig)); strcat(dest, "'"); return len+2; } size_t dbd_conn_quote_string(dbi_conn_t *conn, const char *orig, char *dest) { return dbd_quote_string(conn->driver, orig, dest); } size_t dbd_quote_binary(dbi_conn_t *conn, const unsigned char *orig, size_t from_length, unsigned char **ptr_dest) { unsigned char *temp; size_t len; if ((temp = malloc(from_length*2)) == NULL) { return 0; } strcpy((char *)temp, "\'"); if (from_length) { len = _dbd_encode_binary(orig, from_length, temp+1); } else { len = 0; } strcat((char *)temp, "'"); *ptr_dest = temp; return len+2; } dbi_result_t *dbd_query(dbi_conn_t *conn, const char *statement) { /* allocate a new dbi_result_t and fill its applicable members: * * result_handle, numrows_matched, and numrows_changed. * everything else will be filled in by DBI */ dbi_result_t *result; int query_res; int numrows; int numcols; char** result_table; char* errmsg; int idx = 0; unsigned short fieldtype; unsigned int fieldattribs; dbi_error_flag errflag = 0; query_res = sqlite_get_table((sqlite*)conn->connection, statement, &result_table, &numrows, &numcols, &errmsg); if (query_res) { _dbd_internal_error_handler(conn, errmsg, query_res); if (result_table != NULL) { sqlite_free_table(result_table); } return NULL; } result = _dbd_result_create(conn, (void *)result_table, numrows, (unsigned long long)sqlite_changes((sqlite*)conn->connection)); /* printf("numrows:%d, numcols:%d<<\n", numrows, numcols); */ _dbd_result_set_numfields(result, numcols); /* assign types to result */ while (idx < numcols) { /* printf("idx: %d<< numcols:%d\n", idx, numcols); */ int type; char *item; type = find_result_field_types(result_table[idx], conn, statement); /* printf("type: %d<<\n", type); */ _translate_sqlite_type(type, &fieldtype, &fieldattribs); /* we need the field name without the table name here */ item = strchr(result_table[idx], (int)'.'); if (!item) { item = result_table[idx]; } else { item++; } _dbd_result_add_field(result, idx, item, fieldtype, fieldattribs); idx++; } return result; } int dbd_transaction_begin(dbi_conn_t *conn) { if (dbd_query(conn, "BEGIN") == NULL) { return 1; } else { return 0; } } int dbd_transaction_commit(dbi_conn_t *conn) { if (dbd_query(conn, "COMMIT") == NULL) { return 1; } else { return 0; } } int dbd_transaction_rollback(dbi_conn_t *conn) { if (dbd_query(conn, "ROLLBACK") == NULL) { return 1; } else { return 0; } } int dbd_savepoint(dbi_conn_t *conn, const char *savepoint) { char* query; if (!savepoint) { return 1; } asprintf(&query, "SAVEPOINT %s", savepoint); if (dbd_query(conn, query) == NULL) { free(query); return 1; } else { free(query); return 0; } } int dbd_rollback_to_savepoint(dbi_conn_t *conn, const char *savepoint) { char* query; if (!savepoint) { return 1; } asprintf(&query, "ROLLBACK TO SAVEPOINT %s", savepoint); if (dbd_query(conn, query) == NULL) { free(query); return 1; } else { free(query); return 0; } } int dbd_release_savepoint(dbi_conn_t *conn, const char *savepoint) { char* query; if (!savepoint) { return 1; } asprintf(&query, "RELEASE SAVEPOINT %s", savepoint); if (dbd_query(conn, query) == NULL) { free(query); return 1; } else { free(query); return 0; } } int find_result_field_types(char* field, dbi_conn_t *conn, const char* statement) { /* field is the name of the field which we want to know the type of conn is the connection statement is the query string returns the type as a FIELD_TYPE_XXX value sqlite is typeless (with one exception) on purpose. You can declare types with the CREATE TABLE statement, but they serve descriptive purposes only. Therefore libsqlite does not provide any helper function to find out about the type of a given field. However, sqlite stores the CREATE TABLE commands as a string in an internal table, so we can try to look up the types in these strings. It is a VERY GOOD idea to declare the types if we want the following to work The code assumes that table and field names do not exceed a given length limit. PostgreSQL uses 32 which is a bit low. SQLite does not seem to have fixed limits. We use a default limit of 128 here which can be increased in dbd_sqlite.h if need arises. */ char* item; char* table; char* my_statement = NULL; char curr_table[MAX_IDENT_LENGTH] = ""; char curr_field_name[MAX_IDENT_LENGTH]; char curr_field_name_up[MAX_IDENT_LENGTH]; char **table_result_table; char *curr_type; char* errmsg; int query_res; int table_numrows = 0; /* int seems ok as sqlite does not use longlongs */ int table_numcols = 0; int type; dbi_error_flag errflag = 0; /* check whether field contains the table info. It does if the notation "table.field" is used */ item = strchr(field, (int)'.'); if (!item) { /* the field does not contain the table info. However, the latter may be available in the original statement, so let's look there first*/ my_statement = strdup(statement); if (!my_statement) { return 0; } if (!(table = strstr(my_statement, " from "))) { table = strstr(my_statement, " FROM "); } if (!table) { /* fprintf(stderr, "no from keyword found\n"); */ return 0; } *table = '\0'; /* terminate string, leaves only field names */ if ((table = strstr(my_statement, field)) != NULL && table != my_statement && *(table-1) == '.') { /* the field name is there, isolate preceding table */ *(table-1) = '\0'; while (table > my_statement && *table != ' ' && *table != ',') { table--; } if (*table == ' ' || *table == ',') { table++; } /* table should now point to the table name */ strcpy(curr_table, table); } else { /* as a last resort assume that all fields are from the same table which we have to extract from the statement that created the result */ /* To get started, we use the first item after 'from' or 'FROM' as the table name (we currently ignore pathologic cases like 'FroM' or 'froM'. We could uppercase a copy but we need the table name as is, so it is going to get complex) */ if (!(table = strstr(statement, " from "))) { table = strstr(statement, " FROM "); } if (!table) { /* fprintf(stderr, "no from keyword found\n"); */ return 0; } /* set ptr to possible start of item after 'from' */ table += 6; /* skip spaces */ while (*table == ' ') { table++; } /* table now points to the table name; find the end of table */ item = table; while (*item && *item != ' ' && *item != ',' && *item != ';') { item++; } strncpy(curr_table, table, item-table); curr_table[item-table] = '\0'; /* terminate just in case */ /* for obvious reasons, the internal tables do not contain the commands how they were created themselves. We have to use known values for the field types */ if (!strcmp(curr_table, "sqlite_master") || !strcmp(curr_table, "sqlite_temp_master")) { if (!strcmp(field, "rootpage")) { return FIELD_TYPE_LONG; } else { return FIELD_TYPE_STRING; } } } free(my_statement); strcpy(curr_field_name, field); } else { /* each field contains table info */ strncpy(curr_table, field, item-field); curr_table[item-field] = '\0'; strcpy(curr_field_name, item+1); } /* printf("curr_table went to %s<<\ncurr_field_name went to %s<<\n", curr_table, curr_field_name); */ /* check for known functions which may appear here instead of field names. There is some overlap, i.e. some function work both on strings and numbers. These cases would have to be analyzed by checking the arguments */ /* ToDo: find the matching closing bracket and submit this function call to the builtin typeof() SQL function. This should return a distinction between text and numeric types. However, the size and subtype of a numeric column can't be deduced as easily */ strcpy(curr_field_name_up, curr_field_name); /* uppercase string, reuse item */ item = curr_field_name_up; while (*item) { *item = (char)toupper((int)*item); item++; } if (strstr(curr_field_name_up, "ABS(") || strstr(curr_field_name_up, "LAST_INSERT_ROWID(") || strstr(curr_field_name_up, "LENGTH(") || strstr(curr_field_name_up, "MAX(") || strstr(curr_field_name_up, "MIN(") || strstr(curr_field_name_up, "RANDOM(*)") || strstr(curr_field_name_up, "ROUND(") || strstr(curr_field_name_up, "AVG(") || strstr(curr_field_name_up, "COUNT(") || strstr(curr_field_name_up, "SUM(")) { return FIELD_TYPE_LONG; } else if (strstr(curr_field_name_up, "COALESCE(") || strstr(curr_field_name_up, "GLOB(") || strstr(curr_field_name_up, "LIKE(") || strstr(curr_field_name_up, "LOWER(") || strstr(curr_field_name_up, "SUBSTR(") || strstr(curr_field_name_up, "UPPER(")) { return FIELD_TYPE_STRING; } /* curr_table now contains the name of the table that the field belongs to. curr_field_name contains the name of the field. Look up the field type in the sqlite_master table */ /* first try in the table containing permanent tables */ query_res = sqlite_get_table_printf((sqlite*)conn->connection, "SELECT tbl_name, sql FROM sqlite_master where tbl_name='%s'", &table_result_table, &table_numrows, &table_numcols, &errmsg, curr_table); if (query_res || !table_numrows) { if(table_result_table != NULL) { sqlite_free_table(table_result_table); } /* now try in the table ocntaining temporary tables */ query_res = sqlite_get_table_printf((sqlite*)conn->connection, "SELECT tbl_name, sql FROM sqlite_temp_master where tbl_name='%s'", &table_result_table, &table_numrows, &table_numcols, &errmsg, curr_table); if (query_res || !table_numrows) { _dbd_internal_error_handler(conn, errmsg, query_res); if (table_result_table != NULL) { sqlite_free_table(table_result_table); } /* printf("field not found\n"); */ return 0; } } /* table_result_table[3] now contains the sql statement that created the table containing the current field */ /* parse the sql statement to find the type of the current field */ /* printf("table_result_table[3]=%s<<\ncurr_field_name=%s<<\n", table_result_table[3], curr_field_name); */ /* curr_type will point to an allocated string */ curr_type = get_field_type(table_result_table[3], curr_field_name); /* free memory */ sqlite_free_table(table_result_table); if (!curr_type) { /* printf("out of memory\n"); */ return 0; } /* convert type to uppercase, reuse item */ item = curr_type; while (*item) { *item = (char)toupper((int)*item); item++; } /* the following code tries to support as many of the SQL types as possible, including those extensions supported by MySQL and PostgreSQL. Some conflicts remain, like the REAL type which is a different thing in MySQL and PostgreSQL */ /* printf("field type: %s<<\n", curr_type); */ if (strstr(curr_type, "BLOB") || strstr(curr_type, "BYTEA")) { type = FIELD_TYPE_BLOB; } else if (strstr(curr_type, "CHAR(") /* note the opening bracket */ || strstr(curr_type, "CLOB") || strstr(curr_type, "TEXT") /* also catches TINYTEXT */ || strstr(curr_type, "VARCHAR") || strstr(curr_type, "ENUM") || strstr(curr_type, "SET") || strstr(curr_type, "YEAR")) { /* MySQL 2 or 4 digit year (string) */ type = FIELD_TYPE_STRING; } else if (strstr(curr_type, "CHAR") /* this is a 1-byte value */ || strstr(curr_type, "TINYINT") || strstr(curr_type, "INT1")) { type = FIELD_TYPE_TINY; } else if (strstr(curr_type, "SMALLINT") || strstr(curr_type, "INT2")) { type = FIELD_TYPE_SHORT; } else if (strstr(curr_type, "MEDIUMINT")) { type = FIELD_TYPE_INT24; } else if (strstr(curr_type, "BIGINT") || strstr(curr_type, "INT8")) { type = FIELD_TYPE_LONGLONG; } else if (strstr(curr_type, "INTEGER") || strstr(curr_type, "INT") || strstr(curr_type, "INT4")) { type = FIELD_TYPE_LONG; } else if (strstr(curr_type, "DECIMAL") || strstr(curr_type, "NUMERIC")) { type = FIELD_TYPE_DECIMAL; } else if (strstr(curr_type, "TIMESTAMP") || strstr(curr_type, "DATETIME")) { type = FIELD_TYPE_TIMESTAMP; } else if (strstr(curr_type, "DATE")) { type = FIELD_TYPE_DATE; } else if (strstr(curr_type, "TIME")) { type = FIELD_TYPE_TIME; } else if (strstr(curr_type, "DOUBLE") /* also catches "double precision" */ || strstr(curr_type, "FLOAT8")) { type = FIELD_TYPE_DOUBLE; } else if (strstr(curr_type, "REAL") /* this is PostgreSQL "real", not MySQL "real" which is a synonym of "double" */ || strstr(curr_type, "FLOAT") || strstr(curr_type, "FLOAT4")) { type = FIELD_TYPE_FLOAT; } else { type = FIELD_TYPE_STRING; /* most reasonable default */ } free(curr_type); /* printf("type went to %d<<\n", type); */ return type; } char* get_field_type(const char* statement, const char* curr_field_name) { /* statement is a ptr to a string with the "create table" statement curr_field_name is a ptr to a string containing the name of the field we need the type of. returns the field type as an allocated string or NULL if an error occurred */ char *item; char* saveptr; char *my_statement; char *field_name; char *end_field_name; char *type; char *curr_type = NULL; /* make a copy that we may modify */ if ((my_statement = strdup(statement)) == NULL) { return NULL; } /* the field list of the "create table" statement starts after the first opening bracket */ item = strchr(my_statement, '('); if (!item) { free(my_statement); return NULL; } /* make item point to the first item in the comma-separated list */ item++; /* now tokenize the field list */ for (item = strtok_r(item, ",", &saveptr); item; item = strtok_r(NULL, ",", &saveptr)) { /* printf("item:%s<<\n", item); */ /* skip leading whitespace */ field_name = item; while ((*field_name == ' ') || (*field_name == '\n')) { field_name++; } /* terminate field name */ end_field_name = field_name+1; while (*end_field_name != ' ') { end_field_name++; } *end_field_name = '\0'; /* printf("field_name:%s<<\n", field_name); */ /* analyze type if the field name is the one we want to check */ if (!strcmp(field_name, curr_field_name)) { /* skip leading whitespace */ type = end_field_name + 1; while (*type == ' ') { type++; } curr_type = strdup(type); /* printf("curr_type:%s<<\n"); */ break; } } free(my_statement); return curr_type; } const char *dbd_select_db(dbi_conn_t *conn, const char *db) { /* sqlite does not separate connecting to a database server and using or opening a database. If we want to switch to a different database, we have to drop the current connection and create a new one instead, using the new database. */ if (!db || !*db) { return NULL; } if (conn->connection) { sqlite_close((sqlite *)conn->connection); } if (_real_dbd_connect(conn, db)) { return NULL; } return db; } int dbd_geterror(dbi_conn_t *conn, int *err_no, char **errstr) { /* put error number into err_no, error string into errstr * return 0 if error, 1 if err_no filled, 2 if errstr filled, 3 if both err_no and errstr filled */ int result = 0; if (conn->error_number) { *err_no = conn->error_number; result++; } if (conn->error_message) { *errstr = strdup(conn->error_message); result += 2; } return result; } unsigned long long dbd_get_seq_last(dbi_conn_t *conn, const char *sequence) { return (unsigned long long)sqlite_last_insert_rowid((sqlite*)conn->connection); } unsigned long long dbd_get_seq_next(dbi_conn_t *conn, const char *sequence) { _dbd_internal_error_handler(conn, NULL, DBI_ERROR_UNSUPPORTED); return 0; } int dbd_ping(dbi_conn_t *conn) { if (dbd_query(conn, "SELECT 1") == NULL) { return 0; } else { return 1; } } /* CORE SQLITE DATA FETCHING STUFF */ void _translate_sqlite_type(enum enum_field_types fieldtype, unsigned short *type, unsigned int *attribs) { unsigned int _type = 0; unsigned int _attribs = 0; /* printf("fieldtype:%d<<\n", fieldtype); */ switch (fieldtype) { case FIELD_TYPE_TINY: _type = DBI_TYPE_INTEGER; _attribs |= DBI_INTEGER_SIZE1; break; case FIELD_TYPE_YEAR: _attribs |= DBI_INTEGER_UNSIGNED; case FIELD_TYPE_SHORT: _type = DBI_TYPE_INTEGER; _attribs |= DBI_INTEGER_SIZE2; break; case FIELD_TYPE_INT24: _type = DBI_TYPE_INTEGER; _attribs |= DBI_INTEGER_SIZE3; break; case FIELD_TYPE_LONG: _type = DBI_TYPE_INTEGER; _attribs |= DBI_INTEGER_SIZE4; break; case FIELD_TYPE_LONGLONG: _type = DBI_TYPE_INTEGER; _attribs |= DBI_INTEGER_SIZE8; break; case FIELD_TYPE_FLOAT: _type = DBI_TYPE_DECIMAL; _attribs |= DBI_DECIMAL_SIZE4; break; case FIELD_TYPE_DOUBLE: _type = DBI_TYPE_DECIMAL; _attribs |= DBI_DECIMAL_SIZE8; break; case FIELD_TYPE_DATE: /* TODO parse n stuph to native DBI unixtime type. for now, string */ _type = DBI_TYPE_DATETIME; _attribs |= DBI_DATETIME_DATE; break; case FIELD_TYPE_TIME: _type = DBI_TYPE_DATETIME; _attribs |= DBI_DATETIME_TIME; break; case FIELD_TYPE_DATETIME: case FIELD_TYPE_TIMESTAMP: _type = DBI_TYPE_DATETIME; _attribs |= DBI_DATETIME_DATE; _attribs |= DBI_DATETIME_TIME; break; case FIELD_TYPE_DECIMAL: /* decimal is actually a string, has arbitrary precision, no floating point rounding */ case FIELD_TYPE_ENUM: case FIELD_TYPE_SET: case FIELD_TYPE_VAR_STRING: case FIELD_TYPE_STRING: _type = DBI_TYPE_STRING; break; case FIELD_TYPE_TINY_BLOB: case FIELD_TYPE_MEDIUM_BLOB: case FIELD_TYPE_LONG_BLOB: case FIELD_TYPE_BLOB: _type = DBI_TYPE_BINARY; break; default: _type = DBI_TYPE_STRING; break; } *type = _type; *attribs = _attribs; } void _get_row_data(dbi_result_t *result, dbi_row_t *row, unsigned int rowidx) { char **result_table = result->result_handle; unsigned int curfield = 0; char *raw = NULL; unsigned int sizeattrib; dbi_data_t *data; while (curfield < result->numfields) { /* rowidx appears to be 0-based, but the first row always contains the column names */ raw = result_table[curfield + ((rowidx+1)*result->numfields)]; data = &row->field_values[curfield]; row->field_sizes[curfield] = 0; /* this will be set to the string size later on if the field is indeed a string */ if (raw == NULL) { /* no data available */ _set_field_flag( row, curfield, DBI_VALUE_NULL, 1); curfield++; continue; } switch (result->field_types[curfield]) { case DBI_TYPE_INTEGER: sizeattrib = _isolate_attrib(result->field_attribs[curfield], DBI_INTEGER_SIZE1, DBI_INTEGER_SIZE8); switch (sizeattrib) { case DBI_INTEGER_SIZE1: data->d_char = (char) atol(raw); break; case DBI_INTEGER_SIZE2: data->d_short = (short) atol(raw); break; case DBI_INTEGER_SIZE3: case DBI_INTEGER_SIZE4: data->d_long = (int) atol(raw); break; case DBI_INTEGER_SIZE8: data->d_longlong = (long long) atoll(raw); break; /* hah, wonder if that'll work */ default: break; } break; case DBI_TYPE_DECIMAL: sizeattrib = _isolate_attrib(result->field_attribs[curfield], DBI_DECIMAL_SIZE4, DBI_DECIMAL_SIZE8); switch (sizeattrib) { case DBI_DECIMAL_SIZE4: data->d_float = (float) strtod(raw, NULL); break; case DBI_DECIMAL_SIZE8: data->d_double = (double) strtod(raw, NULL); break; default: break; } break; case DBI_TYPE_STRING: data->d_string = strdup(raw); row->field_sizes[curfield] = strlen(raw); break; case DBI_TYPE_BINARY: data->d_string = strdup(raw); row->field_sizes[curfield] = _dbd_decode_binary(data->d_string, data->d_string); break; case DBI_TYPE_DATETIME: sizeattrib = _isolate_attrib(result->field_attribs[curfield], DBI_DATETIME_DATE, DBI_DATETIME_TIME); data->d_datetime = _dbd_parse_datetime(raw, sizeattrib); break; default: data->d_string = strdup(raw); row->field_sizes[curfield] = strlen(raw); break; } curfield++; } } /* this function is stolen from MySQL and somewhat simplified for our needs */ /* it appears to return 0 on a match, 1 if no match is found, and -1 in some odd cases */ #define wild_many (char)'%' #define wild_one (char)'_' #define INC_PTR(A,B) A++ int wild_case_compare(const char *str,const char *str_end, const char *wildstr,const char *wildend, char escape) { int result= -1; // Not found, using wildcards unsigned char cmp; while (wildstr != wildend) { while (*wildstr != wild_many && *wildstr != wild_one) { if (*wildstr == escape && wildstr+1 != wildend) { wildstr++; } if (str == str_end || *wildstr++ != *str++) { return(1); // No match } if (wildstr == wildend) { return (str != str_end); // Match if both are at end } result=1; // Found an anchor char } if (*wildstr == wild_one) { do { if (str == str_end) { // Skip one char if possible return (result); } INC_PTR(str,str_end); } while (++wildstr < wildend && *wildstr == wild_one); if (wildstr == wildend) { break; } } if (*wildstr == wild_many) { // Found wild_many wildstr++; /* Remove any '%' and '_' from the wild search string */ for ( ; wildstr != wildend ; wildstr++) { if (*wildstr == wild_many) { continue; } if (*wildstr == wild_one) { if (str == str_end) { return (-1); } INC_PTR(str,str_end); continue; } break; // Not a wild character } if (wildstr == wildend) { return(0); // Ok if wild_many is last } if (str == str_end) { return -1; } if ((cmp= *wildstr) == escape && wildstr+1 != wildend) { cmp= *++wildstr; } INC_PTR(wildstr,wildend); // This is compared trough cmp /* cmp=likeconv(cmp); */ do { while (str != str_end && *str != cmp) { str++; } if (str++ == str_end) { return (-1); } { int tmp=wild_case_compare(str,str_end,wildstr,wildend,escape); if (tmp <= 0) { return (tmp); } } } while (str != str_end && wildstr[0] != wild_many); return(-1); } } return (str != str_end ? 1 : 0); } /* this function is stolen from MySQL. The quoting was changed to the SQL standard, i.e. single and double quotes are escaped by doubling, not by a backslash. Newlines and carriage returns are left alone */ static size_t sqlite_escape_string(char *to, const char *from, size_t length) { const char *to_start=to; const char *end; for (end=from+length; from != end ; from++) { switch (*from) { case 0: /* Must be escaped for 'mysql' */ *to++= '\\'; *to++= '0'; break; case '\'': *to++= '\''; /* double single quote */ *to++= '\''; break; case '\032': /* This gives problems on Win32 */ *to++= '\\'; *to++= 'Z'; break; default: *to++= *from; } } *to=0; return (size_t) (to-to_start); } /* this is a convenience function to retrieve the database directory */ static const char* _conn_get_dbdir(dbi_conn_t *conn) { const char* dbdir; dbdir = dbi_conn_get_option(conn, "sqlite_dbdir"); if (!dbdir) { /* use default directory instead */ dbdir = default_dbdir; } return dbdir; } libdbi-drivers-0.9.0/drivers/sqlite/dbd_sqlite.h000644 001750 001750 00000013252 11024053443 022530 0ustar00markusmarkus000000 000000 /* * libdbi - database independent abstraction layer for C. * Copyright (C) 2001, David Parker and Mark Tobenkin. * http://libdbi.sourceforge.net * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * dbd_sqlite.h: SQLite database support (using libsqlite) header file * Copyright (C) 2002-2007, Markus Hoenicka * http://libdbi.sourceforge.net * * $Id: dbd_sqlite.h,v 1.5 2008/06/11 22:52:19 mhoenicka Exp $ */ enum enum_field_types { FIELD_TYPE_DECIMAL, FIELD_TYPE_TINY, FIELD_TYPE_SHORT, FIELD_TYPE_LONG, FIELD_TYPE_FLOAT, FIELD_TYPE_DOUBLE, FIELD_TYPE_NULL, FIELD_TYPE_TIMESTAMP, FIELD_TYPE_LONGLONG,FIELD_TYPE_INT24, FIELD_TYPE_DATE, FIELD_TYPE_TIME, FIELD_TYPE_DATETIME, FIELD_TYPE_YEAR, FIELD_TYPE_NEWDATE, FIELD_TYPE_ENUM=247, FIELD_TYPE_SET=248, FIELD_TYPE_TINY_BLOB=249, FIELD_TYPE_MEDIUM_BLOB=250, FIELD_TYPE_LONG_BLOB=251, FIELD_TYPE_BLOB=252, FIELD_TYPE_VAR_STRING=253, FIELD_TYPE_STRING=254 }; /* this is the maximum length of identifiers like table names and column names. SQLite does not seem to have any limit like this, but other systems use limits like 32 (PostgreSQL) and 64 (MySQL) */ #define MAX_IDENT_LENGTH 128 #define SQLITE_RESERVED_WORDS { \ "ACTION", \ "ADD", \ "AGGREGATE", \ "ALL", \ "ALTER", \ "AFTER", \ "AND", \ "AS", \ "ASC", \ "AVG", \ "AVG_ROW_LENGTH", \ "AUTO_INCREMENT", \ "BETWEEN", \ "BIGINT", \ "BIT", \ "BINARY", \ "BLOB", \ "BOOL", \ "BOTH", \ "BY", \ "CASCADE", \ "CASE", \ "CHAR", \ "CHARACTER", \ "CHANGE", \ "CHECK", \ "CHECKSUM", \ "COLUMN", \ "COLUMNS", \ "COMMENT", \ "CONSTRAINT", \ "CREATE", \ "CROSS", \ "CURRENT_DATE", \ "CURRENT_TIME", \ "CURRENT_TIMESTAMP", \ "DATA", \ "DATABASE", \ "DATABASES", \ "DATE", \ "DATETIME", \ "DAY", \ "DAY_HOUR", \ "DAY_MINUTE", \ "DAY_SECOND", \ "DAYOFMONTH", \ "DAYOFWEEK", \ "DAYOFYEAR", \ "DEC", \ "DECIMAL", \ "DEFAULT", \ "DELAYED", \ "DELAY_KEY_WRITE", \ "DELETE", \ "DESC", \ "DESCRIBE", \ "DISTINCT", \ "DISTINCTROW", \ "DOUBLE", \ "DROP", \ "END", \ "ELSE", \ "ESCAPE", \ "ESCAPED", \ "ENCLOSED", \ "ENUM", \ "EXPLAIN", \ "EXISTS", \ "FIELDS", \ "FILE", \ "FIRST", \ "FLOAT", \ "FLOAT4", \ "FLOAT8", \ "FLUSH", \ "FOREIGN", \ "FROM", \ "FOR", \ "FULL", \ "FUNCTION", \ "GLOBAL", \ "GRANT", \ "GRANTS", \ "GROUP", \ "HAVING", \ "HEAP", \ "HIGH_PRIORITY", \ "HOUR", \ "HOUR_MINUTE", \ "HOUR_SECOND", \ "HOSTS", \ "IDENTIFIED", \ "IGNORE", \ "IN", \ "INDEX", \ "INFILE", \ "INNER", \ "INSERT", \ "INSERT_ID", \ "INT", \ "INTEGER", \ "INTERVAL", \ "INT1", \ "INT2", \ "INT3", \ "INT4", \ "INT8", \ "INTO", \ "IF", \ "IS", \ "ISAM", \ "JOIN", \ "KEY", \ "KEYS", \ "KILL", \ "LAST_INSERT_ID", \ "LEADING", \ "LEFT", \ "LENGTH", \ "LIKE", \ "LINES", \ "LIMIT", \ "LOAD", \ "LOCAL", \ "LOCK", \ "LOGS", \ "LONG", \ "LONGBLOB", \ "LONGTEXT", \ "LOW_PRIORITY", \ "MAX", \ "MAX_ROWS", \ "MATCH", \ "MEDIUMBLOB", \ "MEDIUMTEXT", \ "MEDIUMINT", \ "MIDDLEINT", \ "MIN_ROWS", \ "MINUTE", \ "MINUTE_SECOND", \ "MODIFY", \ "MONTH", \ "MONTHNAME", \ "MYISAM", \ "NATURAL", \ "NUMERIC", \ "NO", \ "NOT", \ "NULL", \ "ON", \ "OPTIMIZE", \ "OPTION", \ "OPTIONALLY", \ "OR", \ "ORDER", \ "OUTER", \ "OUTFILE", \ "PACK_KEYS", \ "PARTIAL", \ "PASSWORD", \ "PRECISION", \ "PRIMARY", \ "PROCEDURE", \ "PROCESS", \ "PROCESSLIST", \ "PRIVILEGES", \ "READ", \ "REAL", \ "REFERENCES", \ "RELOAD", \ "REGEXP", \ "RENAME", \ "REPLACE", \ "RESTRICT", \ "RETURNS", \ "REVOKE", \ "RLIKE", \ "ROW", \ "ROWS", \ "SECOND", \ "SELECT", \ "SET", \ "SHOW", \ "SHUTDOWN", \ "SMALLINT", \ "SONAME", \ "SQL_BIG_TABLES", \ "SQL_BIG_SELECTS", \ "SQL_LOW_PRIORITY_UPDATES", \ "SQL_LOG_OFF", \ "SQL_LOG_UPDATE", \ "SQL_SELECT_LIMIT", \ "SQL_SMALL_RESULT", \ "SQL_BIG_RESULT", \ "SQL_WARNINGS", \ "STRAIGHT_JOIN", \ "STARTING", \ "STATUS", \ "STRING", \ "TABLE", \ "TABLES", \ "TEMPORARY", \ "TERMINATED", \ "TEXT", \ "THEN", \ "TIME", \ "TIMESTAMP", \ "TINYBLOB", \ "TINYTEXT", \ "TINYINT", \ "TRAILING", \ "TO", \ "TYPE", \ "USE", \ "USING", \ "UNIQUE", \ "UNLOCK", \ "UNSIGNED", \ "UPDATE", \ "USAGE", \ "VALUES", \ "VARCHAR", \ "VARIABLES", \ "VARYING", \ "VARBINARY", \ "WITH", \ "WRITE", \ "WHEN", \ "WHERE", \ "YEAR", \ "YEAR_MONTH", \ "ZEROFILL", \ NULL } #define SQLITE_CUSTOM_FUNCTIONS { \ "sqlite_open", \ "sqlite_close", \ "sqlite_exec", \ "sqlite_last_insert_rowid", \ "sqlite_changes", \ "sqlite_get_table", \ "sqlite_free_table", \ "sqlite_interrupt", \ "sqlite_complete", \ "sqlite_busy_handler", \ "sqlite_busy_timeout", \ "sqlite_libversion", \ "sqlite_encoding", \ "sqlite_exec_printf", \ "sqlite_exec_vprintf", \ "sqlite_get_table_printf", \ "sqlite_get_table_vprintf", \ "sqlite_mprintf", \ "sqlite_vmprintf", \ "sqlite_freemem", \ NULL} libdbi-drivers-0.9.0/drivers/sqlite/dbd_sqlite.sgml000644 001750 001750 00000047233 11013321667 023255 0ustar00markusmarkus000000 000000 ]> sqlite driver manual A libdbi driver using the SQLite embedded database engine Markus Hoenicka
    mhoenicka@users.sourceforge.net
    2005-2007 Markus Hoenicka Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is included in . $Revision: 1.11 $ $Date: 2008/05/16 15:09:43 $
    Preface libdbi is a database abstraction layer written in C. It implements a framework that can utilize separate driver libraries for specific database servers. The libdbi-drivers project provides the drivers necessary to talk to the supported database servers. This manual provides information about the sqlite driver. The manual is intended for programmers who write applications linked against libdbi and who want their applications to work with the sqlite driver. Questions and comments about the sqlite driver should be sent to the libdbi-drivers-devel mailing list. Visit the libdbi-drivers-devel list page to subscribe and for further information. Questions and comments about the libdbi library should be sent to the appropriate libdbi mailing list. The sqlite driver is maintained by Markus Hoenicka. Introduction SQLite is a smart library that implements an embeddable SQL database engine. No need for an external database server - an application linked against libsqlite can do it all by itself. Of course there are a few limitations of this approach compared to "real" SQL database servers, mostly for massively parallel high-throughput database applications, but on the other hand, installation and administration are a breeze. Your application should support the sqlite driver if one of the following applies: You want to support potential users of your application who don't have the skills to administer a database server. You want to offer the simplest possible installation of your application. You want to let users test-drive your application without the need to fiddle with their production database servers. Installation This chapter describes the prerequisites and the procedures to build and install the sqlite driver from the sources. Prerequisites The following packages have to be installed on your system: libdbi This library provides the framework of the database abstraction layer which can utilize the sqlite driver to perform database operations. The download page as well as the mailing lists with bug reports and patches are accessible at sourceforge.net/projects/libdbi. sqlite This library implements the embeddable database engine. Find the most recent release at www.sqlite.org. The current version of the sqlite driver was tested with SQLite version 2.7.6. and should work ok with later releases. Build and install the sqlite driver First you have to unpack the libdbi-drivers archive in a suitable directory. Unpacking will create a new subdirectory libdbi-drivers-X.Y where "X.Y" denotes the version: $ tar -xzf libdbi-drivers-0.3.tar.gz The libdbi-drivers project consists of several drivers that use a common build system. Therefore you must tell configure explicitly that you want to build the sqlite driver (you can list as many drivers as you want to build): $ cd libdbi-drivers $ ./configure --with-sqlite Run ./configure --help to find out about additional options. Then build the driver with the command: $ make Please note that you may have to invoke gmake, the GNU version of make, on some systems. Then install the driver with the command (you'll need root permissions to do this): $ make install To test the operation of the newly installed driver, use the command: $ make check This command creates and runs a test program that performs a few basic input and output tests. The program will ask for a database name. This can be any name that is a valid filename on your system. It will also ask for a data directory. This is the directory that is used to create the test database. Needless to say that you need write access to that directory. If you accept the default ".", the database will be created in the tests subdirectory. If for some reason you need to re-create the autoconf/automake-related files, try running ./autogen.sh. I've found out that the current stable autoconf/automake/libtool versions (as found in FreeBSD 4.7 and Debian 3.0) do not cooperate well, so I found it necessary to run the older autoconf 2.13. If necessary, edit autogen.sh so that it will catch the older autoconf version on your system. Driver options Your application has to initialize libdbi drivers by setting some driver options with the dbi_conn_set_option() and the dbi_conn_set_option_numeric() library functions. The sqlite driver supports the following options: dbname The name of the database you want to work with. As a SQLite database corresponds to one file in your filesystem, dbname can be any legal filename. If the database/file doesn't exist when you first try to access it, SQLite will create it on the fly. It is important to understand that the full path of the database is composed of sqlite_dbdir and dbname. Therefore dbname should not contain the full path of a file, but just the name. sqlite_dbdir This is the directory that contains all sqlite databases. Use the full path please. If this option is not specified, a compile-time default directory will be used. By default, this directory (usually /usr/local/var/lib/libdbi/sqlite) has read and write permissions for everyone with the sticky bit set. If this is not suitable for your application, use a custom directory with your preferred permissions instead. It is necessary to keep all sqlite databases in one directory to make it possible to list all existing databases through the libdbi API. However, you are free to open more than one connection simultaneously, each one using a different setting of sqlite_dbdir. timeout (numeric) The connection timeout in seconds. sqlite_timeout (numeric) The design of SQLite does not allow concurrent access by two clients. However, if the timeout is larger than zero, the second client will wait for the given amount of time for the first client to release its lock. If the timeout is set to zero, the second client will return immediately, indicating a busy status. The numerical value of this option specifies the timeout in milliseconds. This option is deprecated. Use the generic option instead. In the current implementation, overrides if both are set. Please be aware that these options use different time scales. Peculiarities you should know about This chapter lists known peculiarities of the sqlite driver. This includes SQLite features that differ from what you know from the other database servers supported by libdbi, and it includes features and misfeatures introduced by the sqlite driver. It is the intention of the driver author to reduce the number of misfeatures in future releases if possible. SQLite (mis)features As the SQLite package is constantly being improved, you should refer to the original documentation about the SQL features it supports and about the SQL features it doesn't support. One noticeable difference between SQLite and other SQL database engines is that the former is typeless. All data are stored as strings, and you can insert any type of data into any column. While the SQLite author has good reasons for this feature, it is an obstacle to using the strongly typed retrieval functions of libdbi. The only way out is to declare the column types in a CREATE TABLE statement just as you would with any other SQL database engine. As an example, the following statement is perfectly fine with SQLite, but not with the sqlite driver: CREATE TABLE foo (a,b,c) However, the following statement is fine with SQLite, the sqlite driver, and just about any other SQL database server: CREATE TABLE foo (a INTEGER,b TEXT,c VARCHAR(64)) The following table lists the column types which are positively recognized by the sqlite driver. Essentially all column types supported by MySQL and PostgreSQL are supported by this driver as well, making it reasonably easy to write portable SQL code. All other column types are treated as strings. SQL column types supported by the sqlite driver type description TINYBLOB, BLOB, MEDIUMBLOB, LONGBLOB, BYTEA String types of unlimited length. Binary data must be safely encoded, see text. CHAR(), VARCHAR(), TINYTEXT, TEXT, MEDIUMTEXT, LONGTEXT String types of unlimited length. There is no chopping or padding performed by the database engine. ENUM String type of unlimited length. In contrast to MySQL, choosing ENUM over VARCHAR does not save any storage space. SET String type of unlimited length. In contrast to MySQL, the input is not checked against the list of allowed values. YEAR String type of unlimited length. MySQL stores 2 or 4 digit years as a 1 byte value, whereas the SQLite drivers stores the string as provided. TINYINT, INT1, CHAR A 1 byte type used to store one character, a signed integer between -128 and 127, or an unsigned integer between 0 and 255. SMALLINT, INT2 2 byte (short) integer type used to store a signed integer between -32768 and 32767 or an unsigned integer between 0 and 65535. MEDIUMINT 3 byte integer type used to store a signed integer between -8388608 and 8388607 or an unsigned integer between 0 and 16777215. INT, INTEGER, INT4 4 byte (long) integer type used to store a signed integer between -2147483648 and 2147483647 or an unsigned integer between 0 and 4294967295. BIGINT, INT8 8 byte (long long) integer type used to store a signed integer between -9223372036854775808 and 9223372036854775807 or an unsigned integer between 0 and 18446744073709551615. DECIMAL, NUMERIC A string type of unlimited length used to store floating-point numbers of arbitrary precision. TIMESTAMP, DATETIME A string type of unlimited length used to store date/time combinations. The required format is 'YYYY-MM-DD HH:MM:SS', anything following this pattern is ignored. DATE A string type of unlimited length used to store a date. The required format is 'YYYY-MM-DD', anything following this pattern is ignored. TIME A string type of unlimited length used to store a time. The required format is 'HH:MM:SS', anything following this pattern is ignored. FLOAT, FLOAT4, REAL A 4 byte floating-point number. The range is -3.402823466E+38 to -1.175494351E-38, 0, and 1.175494351E-38 to 3.402823466E+38. Please note that MySQL treats REAL as an 8 byte instead of a 4 byte float like PostgreSQL. DOUBLE, DOUBLE PRECISION, FLOAT8 An 8 byte floating-point number. The range is -1.7976931348623157E+308 to -2.2250738585072014E-308, 0, and 2.2250738585072014E-308 to 1.7976931348623157E+308.
    Another difference is the lack of access control on the database engine level. Most SQL database servers implement some mechanisms to restrict who is allowed to fiddle with the databases and who is not. As SQLite uses regular files to store its databases, all available access control is on the filesystem level. There is no SQL interface to this kind of access control, but chmod and chown are your friends. SQLite appears to implement row and column counters as C long int values. This limits the maximum number of rows somewhat compared to other SQL database engines. SQLite does not have specific support for binary data. If you want to store binary data (e.g. character sequences containing NULL bytes) in a fashion that is portable across all database servers supported by libdbi, use the libdbi function _dbd_encode_binary. SQLite currently supports different character encodings only as compile-time options. There is no way to change the encoding at runtime or per database.
    sqlite driver misfeatures And now we have to discuss how successful the sqlite driver is in squeezing the SQLite idea of a database engine into the libdbi framework which was shaped after MySQL and PostgreSQL. Keep in mind that the limitations mentioned here are not intrinsic, that is a sufficient amount of coding might fix these problems eventually. The sqlite driver has not been tested for memory leaks yet. It may leak memory like hell. The typeless nature of SQLite has some nasty consequences. The sqlite driver takes great care to reconstruct the type of a field that you request in a query, but this isn't always successful. Some of the functions that SQLite supports work both on numeric and text data. The sqlite driver currently cannot deduce the field type correctly as it would have to check all arguments of each function. Instead the sqlite driver makes a few assumptions that may be right or wrong in a given case. The affected functions are coalesce(X,Y,...), max(X), min(X), and count(X). The sqlite driver currently assumes that the directory separator of your filesystem is a slash (/). This may be wrong on your particular system. It is not a problem for Windows systems as long as the sqlite driver is built with the Cygwin tools (see README.win32). Building the sqlite driver on Windows/Cygwin has not been tested yet, but it uses the same procedure as the other libdbi drivers. Chances are that it works. Listing tables with the dbi_conn_get_table_list() libdbi function currently returns only permanent tables. Temporary tables are ignored. The sqlite driver assumes that table and field names do not exceed 128 characters in length, including the trailing \0. I don't know whether SQLite internally has such a limit or not (both MySQL and PostgreSQL have a lower limit). The limit can be increased by changing a single #define in the dbd_sqlite.h header file. In a few cases, the sqlite driver expects you to type SQL keywords in all lowercase or all uppercase, but not mixed. This holds true for the 'from' in a SELECT statement. Type it either as 'from' or as 'FROM', but refrain from using 'fRoM' or other funny mixtures of uppercase and lowercase. Most other database engines treat the keywords as case-insensitive and would accept all variants.
    &freedoc-license;
    libdbi-drivers-0.9.0/drivers/sqlite/dbd_sqlite.pdf000644 001750 001750 00000562534 12117467171 023101 0ustar00markusmarkus000000 000000 %PDF-1.4 1 0 obj << /S /GoTo /D (1.0) >> endobj 4 0 obj (sqlite driver manual) endobj 5 0 obj << /S /GoTo /D (2.0) >> endobj 8 0 obj (Table of Contents) endobj 9 0 obj << /S /GoTo /D (3.0) >> endobj 12 0 obj (List of Tables) endobj 13 0 obj << /S /GoTo /D (4.0) >> endobj 16 0 obj (Preface) endobj 17 0 obj << /S /GoTo /D (5.0) >> endobj 20 0 obj (Chapter 1. Introduction) endobj 21 0 obj << /S /GoTo /D (6.0) >> endobj 24 0 obj (Chapter 2. Installation) endobj 25 0 obj << /S /GoTo /D (6.1.1) >> endobj 28 0 obj (2.1. Prerequisites) endobj 29 0 obj << /S /GoTo /D (6.2.1) >> endobj 32 0 obj (2.2. Build and install the sqlite driver) endobj 33 0 obj << /S /GoTo /D (7.0) >> endobj 36 0 obj (Chapter 3. Driver options) endobj 37 0 obj << /S /GoTo /D (8.0) >> endobj 40 0 obj (Chapter 4. Peculiarities you should know about) endobj 41 0 obj << /S /GoTo /D (8.3.1) >> endobj 44 0 obj (4.1. SQLite \(mis\)features) endobj 45 0 obj << /S /GoTo /D (8.4.1) >> endobj 48 0 obj (4.2. sqlite driver misfeatures) endobj 49 0 obj << /S /GoTo /D (9.0) >> endobj 52 0 obj (Appendix A. GNU Free Documentation License) endobj 53 0 obj << /S /GoTo /D [54 0 R /Fit ] >> endobj 56 0 obj << /Length 321 /Filter /FlateDecode >> stream xÚQËNÃ@ ¼ç+ö˜bÖÞgn€ÄCˆÜ‡¤Ù¶Q›TäÁ÷ã$¥T¢´{íÏ…äƒÂ!8ÅA#I-VM$ņ[Ÿhk Z¾\è¦F9È4e¨&ÑŠ‹ $žØëL¤dÁ«f•ªвè@í¦nÃiFt@hôìW‚BÅ¿‚JƒÎÈÍè—¢Ûý‚}<„¶^%$ã]ñË€C³Kò,˵”2Ô3A³=C]=»C÷ÐÆn*®Âz ‡¹ÌvÙÏ4ªŒ¡ äÝå§Ý—¯Yy!ÿÞý7P¼‰dendstream endobj 54 0 obj << /Type /Page /Contents 56 0 R /Resources 55 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 63 0 R >> endobj 57 0 obj << /D [54 0 R /XYZ 71.731 741.2204 null] >> endobj 58 0 obj << /D [54 0 R /XYZ 71.731 706.3512 null] >> endobj 59 0 obj << /D [54 0 R /XYZ 71.731 706.3512 null] >> endobj 2 0 obj << /D [54 0 R /XYZ 421.8393 688.2669 null] >> endobj 55 0 obj << /Font << /F24 62 0 R >> /ProcSet [ /PDF /Text ] >> endobj 66 0 obj << /Length 743 /Filter /FlateDecode >> stream xÚUËr›0Ýû+Xd3AÖIà®ò¨“vÒN۸ݴ]ðmMláN⿯„&¶“v¨ 2'cªCeÚ9å^ä&¬>-nZ•ª ¯JsŠÓm7f‡¾0+ÏM®}úÏeš?иö¶ó R`#/ZåÈÂ6½Î&/zNª|µ-º´Juh" 9 „DÓõ㈓“&êQávl¢c6s¥‹ÍF¨B>w—9”1 oOþ!¡CýK›‘N¼GCÄ#Àc½¦›pÎíÛë›0y”{oÞê÷QYíújQÀ ‹^Ÿ —&}³¸n9 ÂØ ׺&ý+7C:FÌé&“ˆtÙrŸ,­8F,ùÿoã_nÛǸendstream endobj 65 0 obj << /Type /Page /Contents 66 0 R /Resources 64 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 63 0 R /Annots [ 71 0 R 75 0 R ] >> endobj 71 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [366.6224 631.8984 481.2157 641.0201] /Subtype /Link /A << /S /GoTo /D (COPYING-FDL) >> >> endobj 75 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [206.3371 605.9956 247.5105 615.1172] /Subtype /Link /A << /S /GoTo /D (COPYING-FDL) >> >> endobj 67 0 obj << /D [65 0 R /XYZ 71.731 741.2204 null] >> endobj 76 0 obj << /D [65 0 R /XYZ 71.731 553.3002 null] >> endobj 64 0 obj << /Font << /F24 62 0 R /F33 70 0 R /F35 74 0 R >> /ProcSet [ /PDF /Text ] >> endobj 80 0 obj << /Length 15324 /Filter /FlateDecode >> stream xÚMÓGz]÷ó+°$,wõw/-ËRØ¡pÈaje{A‘ aé!Àqøß»^¼•7»nv=ç†Ã¦Î)T‡Ø÷ôüá°üßüá6O·Óò/çy:ç?ýåO‡ÿkùSÿø§y=r¾^§ãe¾.ÿæÅŸýþrºMûñúáûgÈßýð§÷Çó‡ãaº^î—?ü¹©®åÔýpÿðÃÏÿý»>Þßýø¯çÃw¿|úøýñvÿî·?¿ÿëøíׯŸ~ýúåãÿüá?ÿé?þ aÃ\ïÓáp˜_>ÓzæûçCßžètÿð˜×åiŸ¨z{ þýã|ÿîÓŸüé“‹çÃiºžæc©>LçÛý¼óªæÃyš+=˜Îmmè:]‡ÓËz!_O£Ü©;òÇtx©|=r§¾–Ïót¹Ï×PÞN“| îÈÏÓáv<¦òõ4ʺ#¿N—ë1}íí4ʺ#_nçrŠ_ûzåN}-?.·s>§¯½&ù@Ý‘/·s:§¯½F¹SwäËí/—T¾žF¹SwäËíÌ×øµ¯§QîÔ×òÓr;‡kúÚÛi’ÔùizM×Ç=½îvÝNÝ‘_§ùþHßy;r§îÈïÓ5~åß΢xK|­=ÎÓ|;¤/¼&õ@Ý‘/÷rÓÞN£Ü©;òå^.ó#•¯§QîÔùr7çcüÚ×Ó(wêkùi¹Ó)}íí4ÉêŽ|¹ã)}íí4ʺ#_ng>§¯½F¹SwäËí.ÇT¾žF¹S_ËÏótx\Ò×ÞN“| îÈOÓeùåc*_O£Ü©;òët¸ÝÒ×ÞN£Ü©;òût¹Þâ×¾žF¹S_Ë/Ëí¼ýÃÙLÞN“| îÈ—Û9§¿@Ñi”;uG¾ÜÎ鑾övåNÝ‘/·s:į}=r§¾–_—Û9Îéko§I>PwäËíÌsú³˜våNÝ‘/·s8¦¯½F¹Swä÷éü8ů}=r§¾–ßÓã~J_{;Mòº#?MçÛ9}íí4ʺ#¿,ÿ/—9•¯§QîÔùr;—KüÚ×Ó(wêkù}¹ó5}íí4ÉêŽ|¹Ó-}íí4ʺ#_ngyK©|=r§îÈ—Û™ïçT¾žF¹S_ËËíéko§I>Pwä§iù{_úÚÛi”;uG~™îCúÚÛi”;uG~ŸN÷9~íëi”;õ¥üt8L÷Ûþ&”Nƒ|¤îȗ۹ϩ|=r§îÈ—Û¹œæT¾žF¹SwäËí,ÿc”Ê×Ó(wêkù¼ÜÎ霾övšäuG¾ÜNú³¨vÕÆÜ1/W3_ÒwÞN£Û©;òåj×ø¯§QîÔ×òãaº=Òøz˜ÔÎÜ1Ÿ¦ãý«×ÓèvêŽü2Ýn÷S*_O£Ü©;òûtL?yÖ£Ú˜¯Í§åf.ñu·Óä¨;òåj.égŠuåNÝ‘/W“~¥Fµ1wÌËÍœÒë4ºúZ~^®æxLßy;Mòº#_®fŽÝï‡QmÌór3‡ôÝé4ºº#¿Oóãÿ¸×Ó(wêkùå0]ï駉ušäuG~šæÛ%}íí4ʺ#¿L×ë5}íí4ʺ#_nçÿoz;r§¾–_—Û9ßÒ×ÞN“| îÈ—Û9¥Ÿ&Öi”;uG¾ÜÎñž¾övåNÝ‘/·3?â×¾žF¹S_ËoËíÌ駉ušäuG¾ÜÎ!èè4ʺ#¿L—GúibF¹SwäËŸ½ã×¾žF¹S_Ëï‡érK::Mòº#?M‡kúibF¹SwäËí\ÒŽN£Ü©;òåÏžÓOë4ÊúZþXnç”ttšäuG¾ÜÎ1èè4ʺ#_ngN?—¢Ó(wêŽüíÏÞâ×¾žF¹S_ÊχÃt~¤Ÿ&ÖiÔùqzÜÓŽN£Ü©;òËt¾¥F¹Swä·éq;į}=r§¾–ÏËí\Ó¾é4ÉêŽ|¹KúibF¹SwäËíœÓŽN£Ü©;òåvNÇøµ¯§QîÔ×òãr;ÇôÅ:Mòº#_ngNGD§QîÔùr;‡ô3Å:r§îÈoÓýq‰_ûzåN}-?¦Ó=èè4ÉêŽü8ÝoéÇŠuåNÝ‘_¦Ó5èè4ʺ#_n'ýçåí0ªùÚ|^®æœ®stšÜuG¾\Í)]çè4ʺ#_®æ”ª¿Eñ–¸£]®åxˆ_øzÕN}-¿,÷2§¿ç©Ó$¨;òå^Òßh‡QmÌóe:>Ò]ŽN£Û©;òÛt»ÇÿMk§QîÔ×òëa:Æÿ£¶&µ3wÌÇévM?P¬ÓèvêŽ|¹šKºËÑi”;uG¾\Mþ?Œjc¾6ß–›9¥Ÿ&ÖirÔùr5Çt—£Ó(wêŽ|¹š9ý4±N£Ü©;òår÷øµ¯§QîÔ×òûašé4G§I>PwäÇézO?M¬Ó(wêŽü2Í÷t £Ó(wêŽü6]o駉uåN}-,·sM::Mòº#_nç’ttåNÝ‘/·sN?M¬Ó(wêŽ|¹Ó)~íëi”;õ¥ürXnç˜~šX§A>RwäËíÌé@G§QîÔùr;‡t £Ó(wêŽü6]×øµ¯§QîÔ×òù0îé@G§I>PwäÇérK?M¬Ó(wêŽü2®é@G§QîÔùr;—GüÚ×Ó(wêkùq¹súib&ù@Ý‘/·sN::r§îÈ—Û9¥Ÿ&Öi”;uG¾ÜÎqŽ_ûzåN}-?-·3§-Õi’Ôùr;芮ÿlf¯ƒzZþùg7ë9ûIå߯Z³ªeèTmÖï—¿¨Oçå‡YæP/o?½¸]ëj;ôöXóôñûãåðÝúõë·0êo?ÿñÓ×Ï¿ý:ã.˯Hß>à÷¤_ßòk˜Ç^µ'ìÊ§ì »çç,v/¨JØÜ©°‹ä=aWË*$ì2¹v w*$ì2¹v w*$ì2¹v w*$ì"yOØÕò »L®„È »L®„È »L®„È »HÞvµ| BÂ.“+ar§BÂ.“+ar§BÂ.“+ar§BÂ.’÷„]-¨°ËäJØÜ©°ËäJØÜ©°ËäJØÜ©°‹ä=aWË*$ì2¹v w*$ì2¹v wj°ËÜ-ajcBÂ.R÷„]í¨°ËäJØÜ©uÂ.s·„¨ »L­„¸ »Dþ”°+å#µNØeî–°µ1!a—©•°·S!a—É•°¹Së„]äV®V;v™Z ;p;v™\ ;;µLØeê5aâ-v‘¸'ìjõ@…„]&WÂäN…„]&WÂäN…„]&WÂäN…„]$ï »Z>P!a—É•°¹S!a—É•°¹S!a—É•°¹S!aÉ{®–THØer%ì@îTHØer%ì@îTHØer%ì@îTHØEòž°«åv™\ ;;v™\ ;;v™\ ;;v‘¼'ìjù@…„]&WÂäN…„]&WÂäN…„]&WÂäN…„]$ï »Z>P!a—É•°¹S!a—É•°¹S!a—É•°¹S!aÉ{®–THØer%ì@îTHØer%ì@îTHØer%ì@îTHØEòž°«åv™\ ;;v™\ ;;v™\ ;;v‰ü)aWÊG*$ì2¹v w*$ì2¹v w*$ì2¹v w*$ì"yOØÕòZ'ì2wKØÚ˜°ËÔJØÛ©°ËäJØÜ©uÂ.r+aW« »L­„¸ »L®„ÈZ'ì2wKØÚ˜°‹Ô=aW»*$ì2¹v wj°ËÜ-ajcBÂ.S+an§BÂ.’÷„]-¨uÂ.s·„¨ »L­„¸ »L®„È »HÞvµ| BÂ.“+ar§BÂ.“+ar§BÂ.“+ar§BÂ.’÷„]-¨°ËäJØÜ©°ËäJØÜ©°ËäJØÜ©°‹ä=aWË*$ì2¹v w*$ì2¹v w*$ì2¹v w*$ì"yOØÕò »L®„È »L®„È »L®„È »HÞvµ| BÂ.“+ar§BÂ.“+ar§BÂ.“+ar§BÂ.‘?%ìJùH…„]&WÂäN…„]&WÂäN…„]&WÂäN…„]$ï »Z>P!a—É•°¹S!a—É•°¹S!a—É•°¹S!aÉ{®–THØer%ì@îTHØer%ì@îTHØer%ì@îTHØEòž°«åv™\ ;;v™\ ;;µNØeî–°µ1!a©{®vTHØer%ì@îÔ2a—©×„ˆ·DHØeb%ì@íTHØEòž°«åµNØeî–°µ1!a—©•°·S!a—É•°¹Së„]äV®V;v™Z ;p;v™\ ;;µNØeî–°µ1!a©{®vTHØer%ì@îTHØer%ì@îTHØer%ì@îTHØEòž°«åv™\ ;;v™\ ;;v™\ ;;v‘¼'ìjù@…„]&WÂäN…„]&WÂäN…„]&WÂäN…„]"JØ•ò‘ »L®„È »L®„È »L®„È »HÞvµ| BÂ.“+ar§BÂ.“+ar§BÂ.“+ar§BÂ.’÷„]-¨°ËäJØÜ©°ËäJØÜ©°ËäJØÜ©°‹ä=aWË*$ìÊ[–°ƒj »M+n?aW<а;× »…yzû[M™°k‡Þ먄ݗ¯?þò˯óuË{ùöy„'¼?ÃÛôzÛÍ×ÍËËÿöQ›ò unóŒ/òu§éñxû'x/è…|=r§îÈ[b/“+Ür§B¸/“+Ür§B¸/’÷p_-¨îËä ÷Ü©îËä ÷Ü©îËä ÷Ü©î‹ä=ÜWË*„û2¹Â} w*„û2¹Â} w*„û2¹Â} w*„û"y÷Õò á¾L®pÈ á¾L®pÈ á¾L®pÈ á¾HÞÃ}µ| B¸/“+Ür§B¸/“+Ür§B¸/“+Ür§B¸/’÷p_-¨îËä ÷Ü©îËä ÷Ü©u¸/s·p¨ á¾HÝÃ}µ{ B¸/“+Ür§Öá¾ÌÝÂ} 6&„û2µÂ}àv*„ûùS¸¯”Ô:Ü—¹[¸ÔÆ„p_¦V¸ÜN…p_&W¸äN­Ã}‘[á¾ZíL÷ej…ûÀíT÷er…û@îÔ2Ü—©×pˆ·D÷Eâî«ÕÂ}™\á>;Â}™\á>;Â}™\á>;Â}‘¼‡ûjù@…p_&W¸äN…p_&W¸äN…p_&W¸äN…p_$ïá¾Z>P!Ü—Éî¹S!Ü—Éî¹S!Ü—Éî¹S!ÜÉ{¸¯–T÷er…û@îT÷er…û@îT÷er…û@îT÷Eòî«åÂ}™\á>;Â}™\á>;Â}™\á>;Â}‘¼‡ûjù@…p_&W¸äN…p_&W¸äN…p_&W¸äN…p_$ïá¾Z>P!Ü—Éî¹S!Ü—Éî¹S!Ü—Éî¹S!ÜÉ{¸¯–T÷er…û@îT÷er…û@îT÷er…û@îT÷%ò§p_)©îËä ÷Ü©îËä ÷Ü©îËä ÷Ü©î‹ä=ÜWËjîËÜ-ÜjcB¸/S+Ün§B¸/“+Ür§Öá¾È­p_­v&„û2µÂ}àv*„û2¹Â} wjîËÜ-ÜjcB¸/R÷p_í¨îËä ÷Ü©u¸/s·p¨ á¾L­p¸ á¾HÞÃ}µ| Öá¾ÌÝÂ} 6&„û2µÂ}àv*„û2¹Â} w*„û"y÷Õò á¾L®pÈ á¾L®pÈ á¾L®pÈ á¾HÞÃ}µ| B¸/“+Ür§B¸/“+Ür§B¸/“+Ür§B¸/’÷p_-¨îËä ÷Ü©îËä ÷Ü©îËä ÷Ü©î‹ä=ÜWË*„û2¹Â} w*„û2¹Â} w*„û2¹Â} w*„û"y÷Õò á¾L®pÈ á¾L®pÈ á¾L®pÈ á¾Dþî+å#Â}™\á>;Â}™\á>;Â}™\á>;Â}‘¼‡ûjù@…p_&W¸äN…p_&W¸äN…p_&W¸äN…p_$ïá¾Z>P!Ü—Éî¹S!Ü—Éî¹S!Ü—Éî¹S!ÜÉ{¸¯–T÷er…û@îT÷er…û@îÔ:Ü—¹[¸ÔÆ„p_¤îá¾Ú=P!Ü—Éî¹SËp_¦^Ã} Þ!Ü—‰îµS!ÜÉ{¸¯–Ô:Ü—¹[¸ÔÆ„p_¦V¸ÜN…p_&W¸äN­Ã}‘[á¾ZíL÷ej…ûÀíT÷er…û@îÔ:Ü—¹[¸ÔÆ„p_¤îá¾Ú=P!Ü—Éî¹S!Ü—Éî¹S!Ü—Éî¹S!ÜÉ{¸¯–T÷er…û@îT÷er…û@îT÷er…û@îT÷Eòî«åÂ}™\á>;Â}™\á>;Â}™\á>;Â}‰ü)ÜWÊG*„û2¹Â} w*„û2¹Â} w*„û2¹Â} w*„û"y÷Õò á¾L®pÈ á¾L®pÈ á¾L®pÈ á¾HÞÃ}µ| B¸/“+Ür§B¸/“+Ür§B¸/“+Ür§B¸/’÷p_-¨î+êsi¸¨…û6…¼ýp_ñ@ß~7èt~“¾‡û./O-c¿ž¿ý³€ã<=–_Hô';==Y;¦Sïé¾y÷ýóïŸ~ÿô×?>ùüõÓ—1+t^þÛýö[ùOбÞw?÷â}=sT>dÏ=?e‘9zñP!s”É•9¹S!s”É•9¹S!s”É•9¹S!sÉ{樖TÈereŽ@îTÈereŽ@îÔ:s”¹[æÔÆ„ÌQ¤î™£Ú=P!s”É•9¹SëÌQæn™#P2G™Z™#p;2G‰ü)sTÊGj9ÊÜ-sjcBæ(S+sn§Bæ(“+sr§Ö™£È­ÌQ­v&dŽ2µ2Gàv*dŽ2¹2G wj™9ÊÔkæÄ["dŽ"qÏÕê ™£L®ÌÈ ™£L®ÌÈ ™£L®ÌÈ ™£HÞ3Gµ| Bæ(“+sr§Bæ(“+sr§Bæ(“+sr§Bæ(’÷ÌQ-¨9ÊäÊÜ©9ÊäÊÜ©9ÊäÊÜ©9Šä=sTË*dŽ2¹2G w*dŽ2¹2G w*dŽ2¹2G w*dŽ"yÏÕò ™£L®ÌÈ ™£L®ÌÈ ™£L®ÌÈ ™£HÞ3Gµ| Bæ(“+sr§Bæ(“+sr§Bæ(“+sr§Bæ(’÷ÌQ-¨9ÊäÊÜ©9ÊäÊÜ©9ÊäÊÜ©9Šä=sTË*dŽ2¹2G w*dŽ2¹2G w*dŽ2¹2G w*dŽùS樔TÈereŽ@îTÈereŽ@îTÈereŽ@îTÈEòž9ªåµÎeî–9µ1!s”©•9·S!s”É•9¹SëÌQäVæ¨V;2G™Z™#p;2G™\™#;µÎeî–9µ1!s©{æ¨vTÈereŽ@îÔ:s”¹[æÔÆ„ÌQ¦VæÜN…ÌQ$Z>PëÌQæn™#P2G™Z™#p;2G™\™#;2G‘¼gŽjù@…ÌQ&WæäN…ÌQ&WæäN…ÌQ&WæäN…ÌQ$Z>P!s”É•9¹S!s”É•9¹S!s”É•9¹S!sÉ{樖TÈereŽ@îTÈereŽ@îTÈereŽ@îTÈEòž9ªå2G™\™#;2G™\™#;2G™\™#;2G‘¼gŽjù@…ÌQ&WæäN…ÌQ&WæäN…ÌQ&WæäN…ÌQ"Ê•ò‘ ™£L®ÌÈ ™£L®ÌÈ ™£L®ÌÈ ™£HÞ3Gµ| Bæ(“+sr§Bæ(“+sr§Bæ(“+sr§Bæ(’÷ÌQ-¨9ÊäÊÜ©9ÊäÊÜ©9ÊäÊÜ©9Šä=sTË*dŽ2¹2G w*dŽ2¹2G wj9ÊÜ-sjcBæ(R÷ÌQí¨9ÊäÊÜ©eæ(S¯™#o‰9ÊÄÊÚ©9Šä=sTËj9ÊÜ-sjcBæ(S+sn§Bæ(“+sr§Ö™£È­ÌQ­v&dŽ2µ2Gàv*dŽ2¹2G wj9ÊÜ-sjcBæ(R÷ÌQí¨9ÊäÊÜ©9ÊäÊÜ©9ÊäÊÜ©9Šä=sTË*dŽ2¹2G w*dŽ2¹2G w*dŽ2¹2G w*dŽ"yÏÕò ™£L®ÌÈ ™£L®ÌÈ ™£L®ÌÈ ™£Dþ”9*å#2G™\™#;2G™\™#;2G™\™#;2G‘¼gŽjù@…ÌQ&WæäN…ÌQ&WæäN…ÌQ&WæäN…ÌQ$Z>P!s”É•9¹S!s”É•9¹S!s”É•9¹S!sÉ{樖TÈ™ž4sÔ2G›šÐ~æ¨x çÌÑúûøuæèðxÛi sÔN½gŽŽkæèïþøüËÏïøã¯ë|þõË×ùåýß|ý·Oïð寿|þºþñÏ¿þx¼|÷·óå»O¿¿\~ÞÞþëÓ“¯ýð6ïzýڟ֠宯AŸtÅôÅUkP;Ö ™\kP;Ö ‘¼¯Akù@…5h&×äN…5h&×äN…5h&×äN…5h$ïkÐZ>Pa šÉµ¹Sa šÉµ¹Sa šÉµ¹Sa Éû´–TXƒfr­AAîTXƒfr­AAîTXƒfr­AAîTXƒFò¾­åÖ ™\kP;Ö ™\kP;Ö ™\kP;Ö ‘¼¯Akù@…5h&×äN…5h&×äN…5h&×äN…5h"Zƒ–ò‘ kÐL®5(È kÐL®5(È kÐL®5(È kÐHÞ× µ| ÖkÐÌÝÖ  6&¬A3µÖ àv*¬A3¹Ö  wj½ÜZƒÖjgÂ4Sk n§Â4“k r§ÖkÐÌÝÖ  6&¬A#u_ƒÖî kÐL®5(ÈZ¯A3w[ƒ‚Ú˜°ÍÔZƒ‚Û©°ä} ZËj½ÍÜm jcÂ4Sk n§Â4“k r§Â4’÷5h-¨°ÍäZƒ‚Ü©°ÍäZƒ‚Ü©°ÍäZƒ‚Ü©°ä} ZË*¬A3¹Ö  w*¬A3¹Ö  w*¬A3¹Ö  w*¬A#y_ƒÖò kÐL®5(È kÐL®5(È kÐL®5(È kÐHÞ× µ| Â4“k r§Â4“k r§Â4“k r§Â4’÷5h-¨°ÍäZƒ‚Ü©°ÍäZƒ‚Ü©°ÍäZƒ‚Ü©°MäOkÐR>Ra šÉµ¹Sa šÉµ¹Sa šÉµ¹Sa Éû´–TXƒfr­AAîTXƒfr­AAîTXƒfr­AAîTXƒFò¾­åÖ ™\kP;Ö ™\kP;Ö ™\kP;Ö ‘¼¯Akù@…5h&×äN…5h&×äN­× ™»­AAmLXƒFê¾­ÝÖ ™\kP;µ\ƒfêu â-Ö ™XkPP;Ö ‘¼¯Akù@­× ™»­AAmLXƒfj­AÁíTXƒfr­AAîÔz ¹µ­Õ΄5h¦ÖÜN…5h&×äN­× ™»­AAmLXƒFê¾­ÝÖ ™\kP;Ö ™\kP;Ö ™\kP;Ö ‘¼¯Akù@…5h&×äN…5h&×äN…5h&×äN…5h$ïkÐZ>Pa šÉµ¹Sa šÉµ¹Sa šÉµ¹Sa šÈŸÖ ¥|¤Â4“k r§Â4“k r§Â4“k r§Â4’÷5h-¨°ÍäZƒ‚Ü©°ÍäZƒ‚Ü©°ÍäZƒ‚Ü©°ä} ZË*¬A3¹Ö  w*¬A3¹Ö  w*¬A3¹Ö  w*¬A#y_ƒÖò kÐr–˜­AáÚt3ºÜ_ƒ´üÂéºübìí“hË_Ô§óòÃ|uê6O··>_§å'V÷{°ûÓƒ­§tèí±Nëôïÿüq>¼m:o›ÎoÿÙoÿçëçß~ý2|1ùÛ‡¿ÇÓ‡gÛø&o—åW¯ßäáq}ûmúunóÈã7¥Ÿ¯Óùr¸¿| òõ4ʺ#¿Oó|Iåëi”;õµü2OËOèæPÞN“| îÈ—Û9Ó×ÞN£Ü©;òåvæSúÚÛi”;uG¾ÜÎá¿öõ4ÊúZ~§Ó㜾övšäuG~šî÷Ë9•¯§QîÔùu:Ý®éko§QîÔù}º_¯ñk_O£Ü©¯åËÿtŸ.·ôµ·Ó$¨;òåvÎ÷ôµ·Ó(wêŽ|¹Óý–Ê×Ó(wêŽ|¹ã#~íëi”;õµü¾ÜÎñ¾övšäuG¾ÜÎ|H_{;r§îÈ—Û9Ìéko§QîÔù}º=Ž©ûý0ªùÚü˜§ãý˜¾óvšÜuG~šn·SúÎÛi”;uG¾ü$÷»ß£Ú˜;æåf.çø¯§ÑíÔ×»ÒÃr5çË)“ë4ÈGêŽ|¹šÓ5u¿Fµ1wÌËͯ·T½žF·SwäËÕ,ïIåëi”;õµ|^®&ýuJ;Ljg?û¸§×ÝN£Û©;òë4ßé;o§QîÔù}ºÆ¯üÛYo‰¯µÇyšo‡ô…·Ó¤¨;òåÏ^çô…·Ó(wêŽ|¹—ËüHåëi”;uG¾ÜÍù¿öõ4ÊúZ~ZnçtJ_{;Mòº#_þìñ”¾övåNÝ‘/·3ŸÓ×ÞN£Ü©;òåv—c*_O£Ü©;}¯y:<.éko§I>Pwäk-”·¬ÉZgÕBy˪‘Ü©uV-”·¬ÉZgÕ2¹²j ¨uV-”·¬ÉZgÕBy˪‘Ü©uV-”·¬ÉZgÕ2¹²j ¨uV-”·¬ÉZgÕBy˪‘Ü©uV-”·¬ÉZgÕ2¹²j ¨uV-”·¬ÉZgÕBy˪‘Ü©uV-”·¬ÉZgÕ2¹²j ¨uV-”·¬ÉZgÕBy˪‘Ü©uV-”·¬ÉZgÕ2¹²j ¨uV-”·¬ÉZgÕBy˪‘Ü©uV-”·¬ÉZgÕ"yϪÕò‘ZgÕBy˪‘Ü©uV-”·¬ÉZgÕBy˪‘Ü©uV-“+«òZfÕB÷šU#µ1ë¬Z¨nY5r;µÎª…ò–U#¹SˬZænY5P;³Îª…ê–U#·Së¬Z(oY5’;µÌª…î5«FjcÖYµL­¬¸jU å-«Fr§–YµÐ½fÕHmÌ:«ª[VÜN­³j™\Y5Ô2«º×¬©YgÕBu˪‘Û©uV-”·¬ÉZgÕ2¹²j ¨uV-”·¬ÉZgÕBy˪‘Ü©uV-”·¬ÉZgÕ2¹²j ¨uV-”·¬ÉZgÕBy˪‘Ü©uV-”·¬ÉZgÕ2¹²j ¨uV-”·¬ÉZgÕBy˪‘Ü©uV-”·¬ÉZgÕ2¹²j ¨uV-”·¬ÉZgÕBy˪‘Ü©uV-”·¬ÉZgÕ2¹²j ¨uV-”·¬ÉZgÕBy˪‘Ü©uV-”·¬ÉZgÕ"yϪÕò‘ZgÕBy˪‘Ü©uV-”·¬ÉZgÕBy˪‘Ü©uV-“+«òZgÕBy˪‘Ü©uV-”·¬ÉZgÕBy˪‘Ü©uV-“+«òZgÕBy˪‘Ü©uV-”·¬ÉZgÕBy˪‘Ü©uV-“+«òZgÕBy˪‘Ü©uV-”·¬ÉZfÕB÷šU#µ1ë¬Z¦VV ܵΪ…ò–U#¹S«¬Z¨~Ϫ‘xK¬³j¡¸eÕHíÔ:«–É•Uù@-³j¡{ͪ‘Ú˜uV-T·¬¹ZgÕBy˪‘Ü©eV-s·¬¨YgÕBu˪‘Û©uV-”·¬ÉZfÕB÷šU#µ1ë¬Z¦VV ܵΪ…ò–U#¹Së¬Z(oY5’;µÎª…ò–U#¹Së¬Z&WV äµÎª…ò–U#¹Së¬Z(oY5’;µÎª…ò–U#¹Së¬Z&WV äµÎª…ò–U#¹Së¬Z(oY5’;µÎª…ò–U#¹Së¬Z$ïYµZ>Rë¬Z(oY5’;µÎª…ò–U#¹Së¬Z(oY5’;µÎªereÕ@>Pë¬Z(oY5’;µÎª…ò–U#¹Së¬Z(oY5’;µÎªereÕ@>Pë¬Z(oY5’;µÎª…ò–U#¹Së¬Z(oY5’;µÎªereÕ@>Pë¬Z‹²jô@kVmó@çݬZõ@CVí\gÕn÷étºžë¬Z;ôí±Ö¬Ú?<¾ûôÓ¿|þñ÷Ï_?úòþÿ¿ÇËw¿ýñþo¾üÛoüòóûÿï_{+°ýß÷÷ã¿þöÇ×qîúö_ÉÛ‡ç‡ò'Ÿß6”×þ4¿-\}~ûü#+æ·/¨šß‚Ü©0¿ä}~[Ë*Ìo3¹æ· w*Ìo3¹æ· w*Ìo3¹æ· w*Ìo#yŸßÖò óÛL®ù-È óÛL®ù-È óÛL®ù-È óÛHÞç·µ| Âü6“k~ r§Âü6“k~ r§Âü6“k~ r§Âü6’÷ùm-¨0¿Íäšß‚Ü©0¿Íäšß‚Ü©0¿Íäšß‚Ü©0¿ä}~[Ë*Ìo3¹æ· w*Ìo3¹æ· w*Ìo3¹æ· w*Ìo#yŸßÖò óÛL®ù-È óÛL®ù-È óÛL®ù-È óÛDþ4¿-å#æ·™\ó[;æ·™\ó[;æ·™\ó[;æ·‘¼Ïokù@­ç·™»ÍoAmL˜ßfjÍoÁíT˜ßfrÍoAîÔz~¹5¿­Õ΄ùm¦ÖüÜN…ùm&×üäN­ç·™»ÍoAmL˜ßFê>¿­Ýæ·™\ó[;µžßfî6¿µ1a~›©5¿·Sa~Éûü¶–Ôz~›¹ÛüÔÆ„ùm¦ÖüÜN…ùm&×üäN…ùm$ïóÛZ>Pa~›É5¿¹Sa~›É5¿¹Sa~›É5¿¹Sa~Éûü¶–T˜ßfrÍoAîT˜ßfrÍoAîT˜ßfrÍoAîT˜ßFò>¿­åæ·™\ó[;æ·™\ó[;æ·™\ó[;æ·‘¼Ïokù@…ùm&×üäN…ùm&×üäN…ùm&×üäN…ùm$ïóÛZ>Pa~›É5¿¹Sa~›É5¿¹Sa~›É5¿¹Sa~›ÈŸæ·¥|¤Âü6“k~ r§Âü6“k~ r§Âü6“k~ r§Âü6’÷ùm-¨0¿Íäšß‚Ü©0¿Íäšß‚Ü©0¿Íäšß‚Ü©0¿ä}~[Ë*Ìo3¹æ· w*Ìo3¹æ· w*Ìo3¹æ· w*Ìo#yŸßÖò óÛL®ù-È óÛL®ù-ÈZÏo3w›ß‚Ú˜0¿Ô}~[»*Ìo3¹æ· wj9¿ÍÔëüÄ["Ìo3±æ· v*Ìo#yŸßÖòZÏo3w›ß‚Ú˜0¿ÍԚ߂۩0¿Íäšß‚Ü©õü6rk~[« óÛL­ù-¸ óÛL®ù-ÈZÏo3w›ß‚Ú˜0¿Ô}~[»*Ìo3¹æ· w*Ìo3¹æ· w*Ìo3¹æ· w*Ìo#yŸßÖò óÛL®ù-È óÛL®ù-È óÛL®ù-È óÛHÞç·µ| Âü6“k~ r§Âü6“k~ r§Âü6“k~ r§Âü6‘?ÍoKùH…ùm&×üäN…ùm&×üäN…ùm&×üäN…ùm$ïóÛZ>Pa~›É5¿¹Sa~›É5¿¹Sa~›É5¿¹Sa~Éûü¶–T˜ßfrÍoAîT˜ßfrÍoAîT˜ßfrÍoAîT˜ßFò>¿­åæ·Å4ßµùíó]öç·Å}ûÝ ÓùMú>¿½¼<µüýzþöÏ–_8.?Ÿ}ô';==Y;¦SïÜyàþ·ÿúOŸ¿~zÿãÿq¸þòùËò/óŸ?ýøõß?}yõ]ôùí3OÒq_{?ŸÏ;oôé[âËçîßÿüàÅ·Ä¿x ê[âKùH­¿%>s·o‰µ1á[â3µ¾%ÜN…o‰Ïäú–x;µþ–øÈ­o‰¯Õ΄o‰ÏÔú–xp;¾%>“ë[âAîÔò[â3õú-ñ Þá[â#qÿ–øZ=Pá[â3¹¾%äN…o‰Ïäú–x;¾%>“ë[âAîTø–øHÞ¿%¾–Tø–øL®o‰¹Sá[â3¹2 w*d*2¹2 w*d*"yÏTÔò ™ŠL®LÈ ™ŠL®LÈ ™ŠL®LÈ ™ŠHÞ3µ| B¦"“+Sr§B¦"“+Sr§B¦"“+Sr§B¦"’÷LE-¨©ÈäÊT€Ü©©ÈäÊT€Ü©©ÈäÊT€Ü©©ˆä=SQË*d*2¹2 w*d*2¹2 w*d*2¹2 w*d*"yÏTÔò ™ŠL®LÈ ™ŠL®LÈ ™ŠL®LÈ ™ŠHÞ3µ| B¦"“+Sr§B¦"“+Sr§B¦"“+Sr§B¦"‘?e*JùH…LE&W¦äN…LE&W¦äN…LE&W¦äN…LE$Z>PëLEæn™ P2™Z™ p;2™\™ ;µÎTDne*jµ3!S‘©•©·S!S‘É•©¹SëLEæn™ P2‘ºg*j÷@…LE&W¦äN­3™»e*@mLÈTdje*ÀíTÈTDòž©¨åµÎTdî–©µ1!S‘©•©·S!S‘É•©¹S!SÉ{¦¢–TÈTdre*@îTÈTdre*@îTÈTdre*@îTÈTDòž©¨å2™\™ ;2™\™ ;2™\™ ;2‘¼g*jù@…LE&W¦äN…LE&W¦äN…LE&W¦äN…LE$Z>P!S‘É•©¹S!S‘É•©¹S!S‘É•©¹S!SÉ{¦¢–TÈTdre*@îTÈTdre*@îTÈTdre*@îTÈT$ò§LE)©©ÈäÊT€Ü©©ÈäÊT€Ü©©ÈäÊT€Ü©©ˆä=SQË*d*2¹2 w*d*2¹2 w*d*2¹2 w*d*"yÏTÔò ™ŠL®LÈ ™ŠL®LÈ ™ŠL®LÈ ™ŠHÞ3µ| B¦"“+Sr§B¦"“+Sr§Ö™ŠÌÝ2 6&d*"uÏTÔî ™ŠL®LÈZf*2õš©ñ–™ŠL¬L¨ ™ŠHÞ3µ| Ö™ŠÌÝ2 6&d*2µ2àv*d*2¹2 wj©ˆÜÊTÔjgB¦"S+Sn§B¦"“+Sr§Ö™ŠÌÝ2 6&d*"uÏTÔî ™ŠL®LÈ ™ŠL®LÈ ™ŠL®LÈ ™ŠHÞ3µ| B¦"“+Sr§B¦"“+Sr§B¦"“+Sr§B¦"’÷LE-¨©ÈäÊT€Ü©©ÈäÊT€Ü©©ÈäÊT€Ü©©HäO™ŠR>R!S‘É•©¹S!S‘É•©¹S!S‘É•©¹S!SÉ{¦¢–TÈTdre*@îTÈTdre*@îTÈTdre*@îTÈTDòž©¨å2™\™ ;2™\™ ;2™\™ ;2‘¼g*jù@…LEUH3ð@-Sñü@E¦¢x çLÅúûøu¦âòöÀ{Ì¢ÈT´S㚩øò×_”©øù÷Ïo_ÿ·óå»O¿¿ÿgùüe/YñÖx\ß>šôôþ˜Çéx>í½Ý^(ª<ÿŠŠÀ‹Ç©*àv*T2¹* wjYÈÔkEÄ["T"q¯Ôê L®ŠÈ L®ŠÈ L®ŠÈ HÞ+µ| BE “«"r§BE “«"r§BE “«"r§BE ’÷Š@-¨PÈ䪀ܩPÈ䪀ܩPÈ䪀ܩPˆä½"PË*T2¹* w*T2¹* w*T2¹* w*T"y¯Ôò L®ŠÈ L®ŠÈ L®ŠÈ HÞ+µ| BE “«"r§BE “«"r§BE “«"r§BE ’÷Š@-¨PÈ䪀ܩPÈ䪀ܩPÈ䪀ܩPˆä½"PË*T2¹* w*T2¹* w*T2¹* w*TùSE ”T¨drU@îT¨drU@îT¨drU@îT¨Dò^¨åµ®dîVµ1¡"©U·S¡"ÉU¹SëŠ@äVE V;*™Zp;*™\;µ®dîVµ1¡"©{E vT¨drU@îÔº"¹[EÔÆ„Š@¦VEÜN…Š@$ïZ>PëŠ@ænP*™Zp;*™\;*‘¼Wjù@…Š@&WEäN…Š@&WEäN…Š@&WEäN…Š@$ïZ>P¡"ÉU¹S¡"ÉU¹S¡"ÉU¹S¡"É{E –T¨drU@îT¨drU@îT¨drU@îT¨Dò^¨å*™\;*™\;*™\;*‘¼Wjù@…Š@&WEäN…Š@&WEäN…Š@&WEäN…Š@"ª”ò‘ L®ŠÈ L®ŠÈ L®ŠÈ HÞ+µ| BE “«"r§BE “«"r§BE “«"r§BE ’÷Š@-¨PÈ䪀ܩPÈ䪀ܩPÈ䪀ܩPˆä½"PË*T2¹* w*T2¹* wj]ÈÜ­"jcBE R÷Š@í¨PÈ䪀ܩeE S¯o‰PÈĪ€Ú©Pˆä½"PËj]ÈÜ­"jcBE S«"n§BE “«"r§ÖÈ­Š@­v&T2µ*àv*T2¹* wj]ÈÜ­"jcBE R÷Š@í¨PÈ䪀ܩPÈ䪀ܩPÈ䪀ܩPˆä½"PË*T2¹* w*T2¹* w*T2¹* w*T"y¯Ôò L®ŠÈ L®ŠÈ L®ŠÈ DþT(å#*™\;*™\;*™\;*‘¼Wjù@…Š@&WEäN…Š@&WEäN…Š@&WEäN…Š@$ïZ>P¡"ÉU¹S¡"ÉU¹S¡"ÉU¹S¡"É{E –T¨;÷´"Ô*ÏtÛ¯´üÂéºübìí“hË_Ô§½S·yº}ûèóé<ÝúSÝŸžj=ò~âíþýÚøÇÿò/ïð¿œïß}Z3ÿÛOüåÓ¯_üúù·_ßÿ£úüÓ§_¿|g­‡· èíƒìþ|óò_ÍÛu/ÐçÅûOß·ÅzþbXìÏQ­Š+ç†{âÀ©1qåÜð`F8µ!®œ¬‡ÙÙ§Ã…s˃ÑpàÔb¸rnx°œ WÎ &ÂSûàʹáÁ2˜}\8·<N­+ç†;àÀ©påÜð`þ8µý­œ¬~ÙÙ'¿…s˃±oàÔÒ·rnx°ñ œøVÎ ¦½S»ÞʹáÁ¢—}Î[8·<òN­x+ç†ûÝÀ©ñnåÜð`¶8µÙ­œ¬uÙÙ§º…s˃‘nàÔB·rnx°Í œæVÎ &¹S{ÜʹáÁ—}†[8·<àN­o+熻ÛÀ©ÑmåÜð`n8µµ­œ¬lÑù4±ÝwƵSËÚʹáÁ¦6pjP[97<˜ÒNíh+ç† ZvöùláÜòêál l«ÙÊøLƒ½l`ÔX¶Rnx0“ œÚÈVÎ ¯^DzRÓØÂ¸¡Á(60j[)7<ØÂN a+ç†WO`eÛ¿VÆg,_ÙØg¯…r˃ÁkàÔÚµrnxõÎ5P¶‘ke|¦Á¼50jÛZ)75pjœZ97<˜¥NmR+ç†kTvö)jáÜò`„8µ@­œlO§†§•sÃÉiàÔÞ´rnx°4egŸ™Î-¦SëÒʹáÁ®4pjTZ97<˜“NmI+ç†+Rvö iáÜò`<8µ­œlF§£•séhàÔN´rnx°egŸ‡Î-†¡S«ÐʹáÁ4pj Z97<˜Nm@+ç†ëOt>M?÷ƃÑgàÔâ³rnx°õ œzVÎ &žSûÎʹáÁ²“}ÖY8·<tN­9+ç†;ÎÀ©gåÜð`¾8µÝ¬œ¬6ÙÙ'›…s˃±fàÔR³rnx°Ñ œhVÎ ¦™S»ÌʹáÁ"“}ŽY8·<bN­0+ç†ûËÀ©ñeåÜðêÙe l›ËÊøLƒµ%ûÔ²Pny0² œZXVÎ ¯ÜVÆuXYùžX0© |ÚSVÆ –”ìì3ʹåÕÊ@ÙÖ“•ñ™»ÉÀ¨Ñd¥Üð`.8µ•¬œ^½’d¥&’…qCƒqd`Ô2²Rnx°‰ œDVÎ ¯žBʶƒ¬ŒÏ4X@²±Ï å–ÃÇÀ©ÕcåÜð`ï85v¬œÌ§6Ž•sÃu#;û´±pny0j œZ4VÎ ¶ŒSCÆÊ¹áÁ„1pj¿X977,œ[ §V†•sÃ}aàÔ¸°rnx0+ œÚVÎ Ö„ììS¹åÁˆ0pjAX97<ØN +熓ÁÀ©½`åÜð`)ÈÎ>,œ[ ÷flé:°zŽ6 ÔsÜ÷w{Ïñ4 |û Ðý¾> endobj 82 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [70.7348 666.8844 104.6274 675.8606] /Subtype /Link /A << /S /GoTo /D (22) >> >> endobj 86 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [532.005 666.8844 538.9788 675.8606] /Subtype /Link /A << /S /GoTo /D (22) >> >> endobj 87 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [70.7348 651.5419 136.7566 660.5181] /Subtype /Link /A << /S /GoTo /D (33) >> >> endobj 88 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [532.005 651.5419 538.9788 660.5181] /Subtype /Link /A << /S /GoTo /D (33) >> >> endobj 89 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [70.7348 636.1994 131.4065 645.1757] /Subtype /Link /A << /S /GoTo /D (44) >> >> endobj 90 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [532.005 636.1994 538.9788 645.1757] /Subtype /Link /A << /S /GoTo /D (44) >> >> endobj 91 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [94.6451 618.8196 165.5384 629.7236] /Subtype /Link /A << /S /GoTo /D (47) >> >> endobj 92 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [532.005 618.8196 538.9788 629.7236] /Subtype /Link /A << /S /GoTo /D (47) >> >> endobj 93 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [94.6451 605.8682 244.5711 616.7721] /Subtype /Link /A << /S /GoTo /D (61) >> >> endobj 94 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [532.005 605.8682 538.9788 616.7721] /Subtype /Link /A << /S /GoTo /D (61) >> >> endobj 95 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [70.7348 590.6602 144.1986 601.5393] /Subtype /Link /A << /S /GoTo /D (99) >> >> endobj 96 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [532.005 590.6602 538.9788 601.5393] /Subtype /Link /A << /S /GoTo /D (99) >> >> endobj 97 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [70.7348 575.3177 236.0333 586.1969] /Subtype /Link /A << /S /GoTo /D (135) >> >> endobj 98 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [532.005 575.3177 538.9788 586.1969] /Subtype /Link /A << /S /GoTo /D (135) >> >> endobj 99 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [94.6451 560.2144 197.9066 570.7448] /Subtype /Link /A << /S /GoTo /D (138) >> >> endobj 100 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [532.005 560.2144 538.9788 570.7448] /Subtype /Link /A << /S /GoTo /D (138) >> >> endobj 101 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [94.6451 546.8894 209.9612 557.7933] /Subtype /Link /A << /S /GoTo /D (214) >> >> endobj 102 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [532.005 546.8894 538.9788 557.7933] /Subtype /Link /A << /S /GoTo /D (214) >> >> endobj 103 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [70.7348 533.5843 231.092 542.5605] /Subtype /Link /A << /S /GoTo /D (COPYING-FDL) >> >> endobj 104 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [532.005 533.5843 538.9788 542.5605] /Subtype /Link /A << /S /GoTo /D (COPYING-FDL) >> >> endobj 81 0 obj << /D [79 0 R /XYZ 71.731 741.2204 null] >> endobj 6 0 obj << /D [79 0 R /XYZ 244.3315 691.2808 null] >> endobj 78 0 obj << /Font << /F24 62 0 R /F38 85 0 R /F33 70 0 R /F35 74 0 R >> /ProcSet [ /PDF /Text ] >> endobj 116 0 obj << /Length 1510 /Filter /FlateDecode >> stream xÚÛ;o[Gà^¿‚%Uh³ïG ¸ ¢.H[²#@Ž[6àŸ‘¸Ãȳ;:¢ÀãóÝ;c“—”žþ„C ®%ú’ƒ‹ÑçÛ÷þðŽîúå"ÌH®ÕÅ*}³¹÷ª¤æFõpõ¼äÇë‹~Žù½«¥—Ãõ[¦ê T÷ýp}óÇñÕÝç‡Ë«ØúñÃÛÓ×ëËî½¾ þxûùòÏë_/~º>kÜQ»óÞ‡íÍÌÕóÐÓá¤tnT:ÔgGáǣÉWÁÑQüý·W§o>ÜyÿÏéö÷tDO7?ùøñç‡Û›Ó·¯¿ÍÄß·óþïïæí›Ow—±¿^†r¼ý$Ï(öäJËýÅsŠ.•¤Ì?öâMð9÷Ý)»õxºË¡çíñl𙆸lÝãûáG0âœFøÒªàÉ¥1ºŸiˆËV/®o;§!.[¼»Ôƒyì3 qٺœ÷®·Ðlø9 ðµUÁi;5f+>Ó—­ NÛ))Xñ™†¸lUpÚNNæ±Ï4Äeë´”­cç4—V§íÄbµOaH‹NE¦Õ„b9§¡-[œVã«yæ3 qÙºÇé:  ë‰Ï0¢e§"'ºÜhfz¦¡-[¼¸Öz²â3 qÙªàÝÅ:¬ö) iѹ—m¦˜×Íid/­ N«)Þ:sNC\¶*8­&[ÑgÒ¢S‘i3‰®ÒôLC[¶îñL«‰Ñ:sN#|iUpZM0Û§0¤E§"Óf|²ÎœÓЖ­ Þ]Ù|Þ3 qÙºÇ ½®ëÙúàÂi„/­ ž\hÅ:vNC\¶*xqµVëØ9 qÙªà´b~Lç4Äe믴ܬcç4—V§í¤­øLC\¶*8m'vëØ9 qÙªà´0ÌcŸiˆËÖ=Þh;Á[ÇÎi„/­ NÛñÞ:vNC\¶*xqeëËNC\¶*8ÝÛ£yì3 qٺǻw¥EëØ9ð¥UÁ“ó5YÇÎiˆËV§í”l;§!.[œî͹[ñ™†¸lÝヶCOBFœÓ_Zœ¶«u윆¸lUpÚN¨Ö±sâ²UÁïmæ±Ï4ÄeëÏÞ»<ºñÅÊ9 ðµUÁ£½w+>Ó—­ ^\n£Xñ™†¸lUðæFóæ±Ï4Äeë´ê­cç4—V§í”­øLC\¶*8m'GëØ9 qÙªà´ÍcŸiˆËÖ=i;1YÇÎi„/­ NÛ ÖwDÎiˆËV§íøÜ¬øLC\¶*xs}óØgâ²u'ïR¯Ö±sáK«‚G×[µŽÓ—­ ^\ªÍ:vNC\¶*8m§Xÿ›Ï0¤Eç^δšÜ­3ç4²—V§Õ¤a9§!.[œV“¬ôSÂß7*,­%zóÀgÒ²uÚK°¾çyN#|iUpÚ‹õ-CZt*rqqDëÌ9 mÙªà͵nþ—ÆiˆËÖ=^½‹æµF´ìTäèZÍÕJÏ4´e«‚ÓjJ±ÎœÓ—­ N«±Ÿø) iѹ—m&U+Íid/­ N«‰Í:sNC\¶*8­&´aÅgâ²UÁi9¾›Ç>Ó—­{¼{ưŽÓ_Z<ºÚ‡u윆¸lUðâB÷Ö±sâ²UÁ›«-XŸÍ8 qÙºÇm§ëØ9ð¥UÁi;%ZÇÎiˆËV§íнŸiˆËV§í¤dûLC\¶nñâi;1ß{:§¾¶*8m'”hÅgâ²UÁi;¾ +>Ó—­ Þ\Õ<ö™†¸lÝãÁ;ß›uìœFøÒªàѕֺŸiˆËV/Î×n;§!.[œ¶S†yì3 qÙºÇ#m'[›øœFøÒªà´ì­cç4Äe«‚Óv’õ·‰ÏiˆËV§íÄ`ûLC\¶îñDÛ Ö_-=§¾´*8mǃGÌŸÍhŸäHôñÕÍ̉‹Ê²Ðü`È‹ŸÖ8ºäŠ.Y芞½_úPG:þ?°"&ÕúhN=×ÝWõÀž•1øÓÜ3endstream endobj 115 0 obj << /Type /Page /Contents 116 0 R /Resources 114 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 63 0 R /Annots [ 118 0 R 119 0 R ] >> endobj 118 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [70.7348 664.847 284.571 675.751] /Subtype /Link /A << /S /GoTo /D (151) >> >> endobj 119 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [532.005 664.847 538.9788 675.751] /Subtype /Link /A << /S /GoTo /D (151) >> >> endobj 117 0 obj << /D [115 0 R /XYZ 71.731 741.2204 null] >> endobj 10 0 obj << /D [115 0 R /XYZ 203.0351 691.2808 null] >> endobj 114 0 obj << /Font << /F24 62 0 R /F33 70 0 R /F35 74 0 R >> /ProcSet [ /PDF /Text ] >> endobj 123 0 obj << /Length 743 /Filter /FlateDecode >> stream xÚVK›0¾çWp„„GL`O«VÝ>¤J­õÒíÁ€ܦ¶ÙhûëkâÁ–tŠÇžñÌ|3ߨ,_}kxÛH ›À CcåõÊ·Jôq€Ê&޽±š,H]m½4 cËy·[­ïÂú^Œdíöƒ«8UZ‰ŸX»â§ý“=Ήók÷e}EVꥱ2¥´}Ë Sµ!FgÅŠfEF7D¾}ï#¿”²½Y¯õ²'XÇs²gÜ û@¼†H¥hu*ôˆõP`‰3,,fBrœKʽPáGÂõß§RX§0¾÷ôøYÂzÝV¤&¼ô²ç¸&Nˆì“ø6ãG½,K ûrÜô¨{œAè¥(Øœqv’Vô/'H‹9–0+8í >8²‡~Ž9%à¼Ï€ÞÙ’œÞû~˜/„ƒhv%1UBÝK_âJÞçjWë°´åì7É!jÒ›x Å€D–‹¨AÚœù#(3quœ­ fD×¶ŒKR<›!VÅê(Ô,Ý•‡jÜt¸º4môdÂëä<’?½RR„ìy=¦©q£XY PLÍU<źÚdéT²‘Èd©¸m+šŸCý›cÏØÁ:>8ÈÆ´rÊ5ÅÜQ¿7#d ±=u$§[Lœ¨,_™¯…z}¸2q欞vê늣å%ë*°–öÀsÖ-·‰[qZ-Õ¥ï´ÓJ²›—˜¸­¨âÿ§`oŽ6‡!.!i?œ¸g•o Ýâ¹ÇW"Õ’óoßFë—øÑ ™]&rN‡Ò˜Ê›&Ùw\AäOú²±Àœ <ú2zžGÓ6Ñgô㛤ú†³–Ss L /”ô¢¶px½Ûã§õŽ€ BÿŠù±OŒ44?âñbºÖ%Hn;ñŸáéêÃÎ<#àq°I¼$ˆÓҨ¸ó+#B“gŠ"¡44–ú<̽™7Ë‚¿oƒjendstream endobj 122 0 obj << /Type /Page /Contents 123 0 R /Resources 121 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 63 0 R >> endobj 124 0 obj << /D [122 0 R /XYZ 71.731 741.2204 null] >> endobj 105 0 obj << /D [122 0 R /XYZ 71.731 706.3512 null] >> endobj 14 0 obj << /D [122 0 R /XYZ 146.3693 691.2808 null] >> endobj 125 0 obj << /D [122 0 R /XYZ 71.731 674.2377 null] >> endobj 126 0 obj << /D [122 0 R /XYZ 71.731 674.2377 null] >> endobj 127 0 obj << /D [122 0 R /XYZ 330.1288 648.5929 null] >> endobj 128 0 obj << /D [122 0 R /XYZ 71.731 628.5033 null] >> endobj 129 0 obj << /D [122 0 R /XYZ 71.731 597.6191 null] >> endobj 130 0 obj << /D [122 0 R /XYZ 348.0519 586.8245 null] >> endobj 131 0 obj << /D [122 0 R /XYZ 362.6958 573.8731 null] >> endobj 132 0 obj << /D [122 0 R /XYZ 71.731 540.8321 null] >> endobj 133 0 obj << /D [122 0 R /XYZ 208.0284 530.0375 null] >> endobj 121 0 obj << /Font << /F24 62 0 R /F33 70 0 R /F35 74 0 R >> /ProcSet [ /PDF /Text ] >> endobj 136 0 obj << /Length 856 /Filter /FlateDecode >> stream xÚVË®Ó0Ý÷+"6$Ií$Îã.A\B D7ˆËÂmÜÆºÎƒØ¥”¯gRÛiÚ›>Ô…_ã™3çŒ'Å‚vR¤ 1ÂÅΪš!gGfؘÄI„'°˜8õI”y&Ž?vòv1›?†±¢ !qk*ÉÁ*C™³(~ºïJÚ*Öy~˜f.ôø±V"·)¶+Å›Úûµø4Œ"'ò/äøaîrpóýÛg®Ü&È}B•Jµóùn·óâò·€ã é<œ¹0ÀÚ”K=R=ÈŠvJO_v´Ûë…*©ÙæU+XÅje/ÖzdÕ’] ƒðèIA]Ri¶Y½á5 ôâK£Çš±BÏÖRí“Ãa’‚x˜¸­šŠ)ï’uz“°öO1Ò¶|E„šëgƒ_žn<âR^Ë#š8½\YG…ÎÎro$k“æ×µ¹Þl;‹T•¬3S:L Ì ‰»›âAðŠ«~Ã~³¶î!Û¶k誴!«ü›ô”ýªcT¼ºªÓ‘IùFïTTb”IoR)yWÛsˆ ”0CJÉ7¥¯Ê®ÙnÊv«NÓÕ{|¤“¾ì_ÃÖÐmåÍFO§ FëÂÜéu#½áÌLŠŠ×\ªn|x¦Ã²cìŸ-Õ†:/T’,›­(¦4“Û¶mì£˪èFš|mSeçJ3«Í¡Rx½¡bò¡‡1{¿”i;$ÃAGád36þØèÐÁ é@wK5°Á¨Oð) É‹ˆq@B”L†<Ì¥I ÇÆ‡I¥§ ¬>šˆ]ÿ¨i­NËþD‰¶QÐĸí#[(ø³7µ¿¬ö®ll#¨_÷UÙâëËT y.ø3Bž²UhE§7zF~IÛ$ rŒÈumGF—µµF7µy‡¶&´ƒ¸G[ žÂÚ2y¤ýð½’ƒèЮ†OÔËþpUú‹ÔÇ8LÓëÔŒ.SonR?òê'0LP?qõ‚©oHåþI_»ý¦¸‚zÞ' l¸'„¢°ö·†+Üø†/ ýßtýÓvIÒ8 2œäWÙh2ɈLEB8<õdâóhÃÿƉxÿ½ÝªTendstream endobj 135 0 obj << /Type /Page /Contents 136 0 R /Resources 134 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 63 0 R >> endobj 106 0 obj << /D [135 0 R /XYZ 71.731 706.3512 null] >> endobj 18 0 obj << /D [135 0 R /XYZ 298.5799 691.2808 null] >> endobj 137 0 obj << /D [135 0 R /XYZ 71.731 670.2196 null] >> endobj 138 0 obj << /D [135 0 R /XYZ 71.731 670.2196 null] >> endobj 139 0 obj << /D [135 0 R /XYZ 71.731 607.5818 null] >> endobj 140 0 obj << /D [135 0 R /XYZ 71.731 602.6004 null] >> endobj 141 0 obj << /D [135 0 R /XYZ 81.6937 581.8432 null] >> endobj 142 0 obj << /D [135 0 R /XYZ 71.731 579.6864 null] >> endobj 143 0 obj << /D [135 0 R /XYZ 81.6937 563.9105 null] >> endobj 144 0 obj << /D [135 0 R /XYZ 71.731 561.7536 null] >> endobj 145 0 obj << /D [135 0 R /XYZ 81.6937 545.9777 null] >> endobj 134 0 obj << /Font << /F24 62 0 R /F33 70 0 R /F35 74 0 R >> /ProcSet [ /PDF /Text ] >> endobj 148 0 obj << /Length 1492 /Filter /FlateDecode >> stream xÚ­XYÛ6~ß_ajMQ¢Ž}LÑ ZAÚ:@‹¦´DÛìêp$*Žóë;¼tYÙîÁ>˜‡Ã9¾™o´þ ß¿Š}ðúˆ®²ò¯Ž°õæÎ·"a!Býv=Ä(MH´òÆJ^ïî¶$\Œ"šÐÕîஊRJp²Úå¯<±³äÍÆ#q²&Èüþ\µ’“¢®6ÿì~Ù>Á*Ei—€¼òH ª"ªUìN¢…s¯³^<ä¼Í±çvOž¸YœÞðh…t{¬Êo„êŒç]ÓŸ®Íï~CðºE>;(ŒÅ3-íÇ.±æ4bCèúÓÆ§kgâ¡©Ëù‘ºk2Þ"ã6ÄÏñihý)d" ´ßù6^ï&.-ÌG”¦ÄÌ^v¨‹¢VV]Du´Ž³ì‘Û'¦ü56ÏÁ'ŽsÈ—þ½‚Ö¡k+yy¯¬ÒvÄ(I©q û|/ÔÎÝO»O%4LPŠI¼9‚ÂÇS8Î{xÆ!`Ò§#“(#ýSh­ k®=:TH>‰ü]‡†•\‡tãC8šG—ÃL.g’íYkŸØ¾• Ë4ÞÍuìê@r9‰ìdñÍìv'E!¾ð rg³à”R?Ô>žys¨›rɬöt¶È¼è‘“ØTEÍrœ£sÆÆäÂ]A°y”Jö;È¢•q¡Y‰†ŸëF΋õÌdvêK¸áKα Š©ûÂÙ&Çe~oüd}ä¨âr Yý—g²ÝZ\jÁ˜â“”çûíög@Ú×¥ V´Ý#`ŽúÚ›¡eć T4œøf€)ü:ÞÐpå¹à%¯ä<¼Üó‹0^ÑD‘cöqFG t­÷'úk!~iЇpVƒà#€¹ëÈ¿r3PUËŽî~d ŽÒXãÀiVù‰üTëÿÎ ¦#ÁEI[$ŒE¯½Ï_f5s£:~YðƳÊ&ír÷œÌÚló\5ЉcÝ–Ž±b‰!û¹–ÓµÓtfuY:vžMfÄ(²Q$Á,oéÈÛû(Œ±K^Ùôocá“ÔwVtª©%T1¢)‚\ÿ€19vîj®<û|.D&dqû×™éV®ý~eÐ}öŒ¡úo¯ºŸWÅOG¶àØõ‰\8ÑçZª:ûž±ròL$gù| Åaö%êÑ2u&Oº`<Õ«½a6xNiüÞ¹/£d$ §I0¾ÉbBqŸM›çxq^¸‡ÄO"‡·ÚeÇÝuçÒ¸–y.ÔŒèêª>Û‰Qc5 Àæ(¨ÂGb@W×ÕÓ0[‚ÖÀh½˜*Jà¢o‘õ’=òž‡Îì†ðéëÀU ,”ì[hªöNê„ EPÙ®ªß¹AXPµaG’ºauU¾klÃCÉ6ÖåŽ÷ˆa*uªv|ÛïÑUä 6GÑ;צÖ&`-%Vꇇ¿yûÞ,Œn<º«j“­#{Ú‰´uéFÝ[%ƒ–°M‚‘˜èj%a4Èò‡õËà1éLß«&âVÜ}¸6umñ ß<¥h•»³oÿ¼vêEÛ÷šÅ9Ê ¿ô¿+âdÌh>fcfsŒÂ0±_ûóÛú»,Ü÷¼Å¢Ðendstream endobj 147 0 obj << /Type /Page /Contents 148 0 R /Resources 146 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 193 0 R >> endobj 107 0 obj << /D [147 0 R /XYZ 71.731 706.3512 null] >> endobj 22 0 obj << /D [147 0 R /XYZ 287.5478 691.2808 null] >> endobj 149 0 obj << /D [147 0 R /XYZ 71.731 670.2196 null] >> endobj 108 0 obj << /D [147 0 R /XYZ 71.731 659.3875 null] >> endobj 26 0 obj << /D [147 0 R /XYZ 214.3071 616.29 null] >> endobj 150 0 obj << /D [147 0 R /XYZ 71.731 604.1188 null] >> endobj 151 0 obj << /D [147 0 R /XYZ 71.731 592.574 null] >> endobj 152 0 obj << /D [147 0 R /XYZ 71.731 577.6301 null] >> endobj 153 0 obj << /D [147 0 R /XYZ 71.731 566.7359 null] >> endobj 154 0 obj << /D [147 0 R /XYZ 91.6563 548.9027 null] >> endobj 155 0 obj << /D [147 0 R /XYZ 144.2183 522.9999 null] >> endobj 156 0 obj << /D [147 0 R /XYZ 71.731 510.8804 null] >> endobj 157 0 obj << /D [147 0 R /XYZ 71.731 497.929 null] >> endobj 158 0 obj << /D [147 0 R /XYZ 91.6563 482.153 null] >> endobj 159 0 obj << /D [147 0 R /XYZ 447.4777 482.153 null] >> endobj 109 0 obj << /D [147 0 R /XYZ 71.731 451.1693 null] >> endobj 30 0 obj << /D [147 0 R /XYZ 371.189 406.0145 null] >> endobj 160 0 obj << /D [147 0 R /XYZ 71.731 393.8433 null] >> endobj 161 0 obj << /D [147 0 R /XYZ 71.731 371.504 null] >> endobj 165 0 obj << /D [147 0 R /XYZ 71.731 361.4024 null] >> endobj 166 0 obj << /D [147 0 R /XYZ 71.731 361.4024 null] >> endobj 167 0 obj << /D [147 0 R /XYZ 81.4147 349.885 null] >> endobj 171 0 obj << /D [147 0 R /XYZ 71.731 338.829 null] >> endobj 172 0 obj << /D [147 0 R /XYZ 473.2014 326.971 null] >> endobj 173 0 obj << /D [147 0 R /XYZ 71.731 301.9001 null] >> endobj 174 0 obj << /D [147 0 R /XYZ 71.731 301.9001 null] >> endobj 175 0 obj << /D [147 0 R /XYZ 81.4147 292.4006 null] >> endobj 176 0 obj << /D [147 0 R /XYZ 71.731 281.3768 null] >> endobj 177 0 obj << /D [147 0 R /XYZ 71.731 281.3768 null] >> endobj 178 0 obj << /D [147 0 R /XYZ 81.4147 270.7817 null] >> endobj 179 0 obj << /D [147 0 R /XYZ 71.731 259.7256 null] >> endobj 180 0 obj << /D [147 0 R /XYZ 90.8293 247.8676 null] >> endobj 181 0 obj << /D [147 0 R /XYZ 71.731 240.7295 null] >> endobj 182 0 obj << /D [147 0 R /XYZ 71.731 219.8727 null] >> endobj 183 0 obj << /D [147 0 R /XYZ 71.731 219.8727 null] >> endobj 184 0 obj << /D [147 0 R /XYZ 81.4147 208.3159 null] >> endobj 185 0 obj << /D [147 0 R /XYZ 71.731 207.2548 null] >> endobj 186 0 obj << /D [147 0 R /XYZ 71.731 187.3295 null] >> endobj 190 0 obj << /D [147 0 R /XYZ 279.598 176.7344 null] >> endobj 191 0 obj << /D [147 0 R /XYZ 71.731 148.839 null] >> endobj 192 0 obj << /D [147 0 R /XYZ 71.731 48.8169 null] >> endobj 146 0 obj << /Font << /F24 62 0 R /F33 70 0 R /F47 164 0 R /F49 170 0 R /F35 74 0 R /F38 85 0 R /F51 189 0 R >> /ProcSet [ /PDF /Text ] >> endobj 196 0 obj << /Length 1005 /Filter /FlateDecode >> stream xÚ•VKÛ6¾ï¯0‚•€—Ô[9¦iŠí!—úÖä@KÔZˆ,¤”…ÿ}‡äP’eæcžß|3ÛQø±]ÁH‘À_ÊHÓtWŸèî®þ|`(¡L´ú¼xúšd»ŠTyœïöí.MsRÅ™±•’’»}óOðû‘ŸG¡Â(Îh÷ÿ<è‘÷=;9„?ö=ü±ŸeIAª,¾Ñ,uSZìJBóª01aäy•“¤,3ÒGã䪕\Eò2)À¶8ñŸ"ŒrJƒÎê’d•l„Q“Š¥Ì*îÃ’Òå8 =âê(ÜBž…r9»m»¹DgÁkq[t.·mTg®…, ДîbÒbc¨–§šO˜è 3’³²ú¿XÔGQÿüÏH; ±¤¹7JpÆl²`>UÓ€ÂÜý!v°:+ù¢øÉ)ŒGî…j¥:]kµ>·9pÝÕnÙ çiܸ”Óˆ‡Î›&n½·n¿vÀçJ[ Œ ÒÍXjÓ…`òkÅGøºò“@æ#.¦Fip@)ØCe/‹Š/*GyMôñËdËûéñÒ¸‹žgÙEN›¾èQœ| ¢QL͘í5R×$i÷Òº—~Ó)QR]Â< n2õÿ3=ñ72FcV#†äˆ³±³´˜Ç}¢é…Ö×64¿qàøÖó_Uçñº^¹JÜ’ÅÒ=žÛcð¼ hCwS7ȇǭÌŸ–šyî8x?7íeTyžšvM%4K±½-÷ï4u\Á¼¬üÐÓa“ŸÕˆÓ•Ý(aÉX™Â È ŒØª~“£À9/Ã"g$¥Ì‡a‘*Ê  `®r--—aÙiËgX_ÂD&·Á²ÁÊÙŠF3WÌñ|e-‡öÉ,`¨+"R¢GÜ@Äu6]øˆÚ&’Êö¤1Fp5 C7¼Ü ÉXú¼Åœh¾ÂÎç¾Áç‹3à ÈÇúønj«¼VåGÉë6ô­ŠOËæ[¿¾Ò’”,¯Þý´\ÉÜ~Yf ‚²d¶dyòæ—ãÿèÎeendstream endobj 195 0 obj << /Type /Page /Contents 196 0 R /Resources 194 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 193 0 R >> endobj 197 0 obj << /D [195 0 R /XYZ 71.731 706.3512 null] >> endobj 198 0 obj << /D [195 0 R /XYZ 71.731 706.3512 null] >> endobj 199 0 obj << /D [195 0 R /XYZ 81.4147 696.3885 null] >> endobj 200 0 obj << /D [195 0 R /XYZ 71.731 661.355 null] >> endobj 201 0 obj << /D [195 0 R /XYZ 71.731 661.355 null] >> endobj 202 0 obj << /D [195 0 R /XYZ 81.4147 651.8555 null] >> endobj 203 0 obj << /D [195 0 R /XYZ 71.731 640.8318 null] >> endobj 204 0 obj << /D [195 0 R /XYZ 381.785 590.0872 null] >> endobj 205 0 obj << /D [195 0 R /XYZ 71.731 587.9303 null] >> endobj 206 0 obj << /D [195 0 R /XYZ 71.731 572.9864 null] >> endobj 207 0 obj << /D [195 0 R /XYZ 469.0454 563.4869 null] >> endobj 208 0 obj << /D [195 0 R /XYZ 483.7224 540.1743 null] >> endobj 194 0 obj << /Font << /F35 74 0 R /F47 164 0 R /F49 170 0 R /F33 70 0 R /F24 62 0 R /F51 189 0 R >> /ProcSet [ /PDF /Text ] >> endobj 211 0 obj << /Length 1870 /Filter /FlateDecode >> stream xÚ­XÛŽÛ6}ÏWø­6`Ó¢$ê’·¤mÚ-Š"E·ES,h‰¶Ù•DW¢vë|}‡WK²¼i‚`±ÐÅäpæÌíŒð"€?¼H1J#¸Ä…a/ŠúU°8ÀO?¼ÂvIœ$($8‡™_7$JQž…Éb3òöþÕö]/Â%$#‹û½;*ÉaUd‹ûòÏå·Gz’¬]mÂ4[FÈ\¿kù“{'N’‹¦[ýuÿÓö]-r”'pˆ ›0‰ Ñ’þXa,E¯ö‘`IO§ŠTm6/Ž´37R˜+o¸ä´â™y®ø®Üqs_¶|’åÓ “%kíÆÝÙ\;&%oöAÔlnyç´×Ï\­ Gf ŠÓE%±2(Š Â!ÎÀ2e(óPˆ¦y€óŒ  àÏ ±ñ»78D9Á±B›òÅ#1"1&·O|húšµ¼xádL2D[!cK[ Õ¾o 2Ï÷G V÷OÅå Àuýé$ZÙ]”7òDU µøÙ;ÀBüZi¶ç â$‡ØHQ–“ØÖÐZÛÿêû{¹.ƒ¥ À2Ü!Šó þôê!!úqºØ %ê<ááŸ$ºœ«4ôÀhEaû‰ñ%•tG;ût½ «Ä=mä8ºõ[Ñ>^BϺàÅ”šËo¿þ|qÄè€B´-ëN¢)'‰#»âC„sÙäÕjµ+‚q šµÝ¹“¬^ÏD"Do”åØG¢sؼ(ÌòÄ.+¨=ugµ€g"| <VdI«¡ÂJ´ãîÆÛ¡m¥`]óÍ gK ²ü/ïìãó‘5§¨í­û]ºtpÒ¢`E•˵ Ý,@Jé¶¡{žyeí(ZFÝ[.W&¦€ Ñy•%òþ€B…¦ðÞÙmÜ©Q«|» £¾)¡þÉA¡rš“½SëD]ûDìºC §v¬ô›f*TÕ%Ì]‰2uã¡Ü•¼ $…ìÏÜb¥õµDœ ,MÒOFZˆ ÿäv™Áp‡Q”ŒÉÛ²½hç*,´Ä4‰þg\{+¢¯,*¬FRÞ|útõk›)«¼jEþÝwSošäÐÆæ ŠIªJ)ØŠc<뀙‚ Íá(È¿^AJ¼]Pý*ãÙÓ&š³B Ÿ”>¤-®@:`G½ÊƱkh¿»~Ñ!§ŠÁž«šã43-l¬­w{wbW.dåÚ¹u¦¾ªTâÛHîùÛëÎÐWrÖîK9qÕ³‡T´J¾=_ YOÕžÈS¡ïz€í<“^]ÃÖ¶}×n+QÐjûDáŽï¶†m-Ú3<# ¡@Æ¡ÍÍFÆÌªbéú€½yn½ëN¬­y×]ød¬+çúqöÝmL׌/$/fçŠ/&›4^Ë‘w®}~íçžChUl¢ÛyŽÑ®½¿F‰^@:‹ú†³1'(Z z|yÈ ˆ"ã àòƒ n I¥!A ômä/B²×f1ÁƒÅ!Aq€?Ôˆ½® S½‚NQ q…wºûÀõQ+ÆNæÉ$$Üø„„{ŸVjcdžÆýnq˜_Ss€ÝjƒŽÔq]&+6\ŸµíäD¶±Š (>ªÀY»Á¶,éº?ÖR[ÑŽîÁã¸óþÎC? pšÎéÞT°M­ÍгÒU¥Yk¥í[ÆÆæŠ³èÔ­‚âç[á¥M ¬°EIÎku>Ú0Ñwá8Pç»B40•Ñâ8ñAß¶®Ôs^Ùï•1Ð7 éeªR[-€ËP䩺úAJÒ›T`u0•Dy˜ û÷td ã =~“DÐ~mçPT¸©ŠÚeÂ7:^í;Iüõ:ÞPâíŽçWFˆ‘÷TÑäDÇ Åì]Õòù|Ýê¿0P‚Ê_ ¡ÄÛxøU#> endobj 110 0 obj << /D [210 0 R /XYZ 71.731 706.3512 null] >> endobj 34 0 obj << /D [210 0 R /XYZ 318.5354 691.2808 null] >> endobj 212 0 obj << /D [210 0 R /XYZ 71.731 670.2196 null] >> endobj 213 0 obj << /D [210 0 R /XYZ 416.8528 661.5443 null] >> endobj 214 0 obj << /D [210 0 R /XYZ 103.2725 648.5929 null] >> endobj 215 0 obj << /D [210 0 R /XYZ 71.731 646.4361 null] >> endobj 216 0 obj << /D [210 0 R /XYZ 71.731 631.4921 null] >> endobj 217 0 obj << /D [210 0 R /XYZ 71.731 620.598 null] >> endobj 218 0 obj << /D [210 0 R /XYZ 91.6563 602.7647 null] >> endobj 219 0 obj << /D [210 0 R /XYZ 137.0454 589.8133 null] >> endobj 220 0 obj << /D [210 0 R /XYZ 71.731 569.7237 null] >> endobj 221 0 obj << /D [210 0 R /XYZ 400.1858 558.9291 null] >> endobj 222 0 obj << /D [210 0 R /XYZ 484.111 558.9291 null] >> endobj 223 0 obj << /D [210 0 R /XYZ 133.4194 545.9777 null] >> endobj 224 0 obj << /D [210 0 R /XYZ 71.731 533.8582 null] >> endobj 225 0 obj << /D [210 0 R /XYZ 71.731 520.9068 null] >> endobj 226 0 obj << /D [210 0 R /XYZ 91.6563 505.1309 null] >> endobj 227 0 obj << /D [210 0 R /XYZ 91.6563 479.228 null] >> endobj 228 0 obj << /D [210 0 R /XYZ 71.731 464.1197 null] >> endobj 229 0 obj << /D [210 0 R /XYZ 71.731 449.1758 null] >> endobj 230 0 obj << /D [210 0 R /XYZ 255.8573 416.3638 null] >> endobj 234 0 obj << /D [210 0 R /XYZ 71.731 365.5543 null] >> endobj 235 0 obj << /D [210 0 R /XYZ 71.731 350.8196 null] >> endobj 236 0 obj << /D [210 0 R /XYZ 91.6563 334.6701 null] >> endobj 237 0 obj << /D [210 0 R /XYZ 71.731 324.6079 null] >> endobj 238 0 obj << /D [210 0 R /XYZ 71.731 309.5992 null] >> endobj 239 0 obj << /D [210 0 R /XYZ 91.6563 293.8233 null] >> endobj 240 0 obj << /D [210 0 R /XYZ 71.731 252.8122 null] >> endobj 241 0 obj << /D [210 0 R /XYZ 71.731 237.8682 null] >> endobj 242 0 obj << /D [210 0 R /XYZ 334.4734 228.3687 null] >> endobj 243 0 obj << /D [210 0 R /XYZ 111.5816 216.7125 null] >> endobj 244 0 obj << /D [210 0 R /XYZ 220.9977 216.7125 null] >> endobj 209 0 obj << /Font << /F24 62 0 R /F33 70 0 R /F47 164 0 R /F51 189 0 R /F53 233 0 R /F35 74 0 R >> /ProcSet [ /PDF /Text ] >> endobj 247 0 obj << /Length 2174 /Filter /FlateDecode >> stream xÚÝZY“ã4~ϯÈIՌƲ%¼Í@X†Úvñ<(Ž’˜uì`Ë„ðëiY‡Ø™]6[ÔVmt¶úüº%ž:ðOŒ~F®ëi¼Ÿ8Ó-L=›`½„ø>r)ö¡30{K½E¡ëOoÛD–“»¯\2uäÓN—s”ÁªÐ §Ëõϳ/vì x1¿uƒpFúývî93WiŠD$¼Tç¹Kgy¥:å.¯Òµj¿Ëò9¦³£ê±U^‰ù¯Ëoî¾ò¼i„"xƒãé­>­O^îI—:³Øò4)…—dáÄc¦º‡G0”oÔ¯ØqÕ(O¡Ûë"‘Ûÿ¬uJgHM4''YœVkCíÍwÏíæ g¢*ÌŒØ1¡‰&ItcØÝù^µŽvÍ tâK±‹"ŠI-°§¿Ñ2ŸCK“]3ÁV¬4RñBK¡ù)«Ã!/_«îêdt·Z¯’Õa™žMİ]íâ}Rvg’LùºŠûgI®„|/<ŽÊžà0ž‰$ÏFÌÛ£¨X¯Ä.×m‘«ß‚KŽ{›³j¿2› åqµz*9h¨¥laVè­‡¼,“UÊ‘ru5 S¢}PZ¢´BÖ¡e} Ú¿8Ôàoæ"N32:QášÜ}_omÏ=°øÛò®†ã<+ËDª­·âI¶ÕKö‡¢_¥ÕõMãÄÊ×L ×š°ŽoTÝxo‘l“Œ¥ÚRy\íÁ–¬±¦Â…3Ƈ¼¨gÑñz=*µ·âðùÝÝñxœûà]ÊùxgÛ»”e[´ûTj¸ççcÌ Ä†9~ó2ûL’îòÓ@ÛÓÌåûD@[þ%hî¹AMæU&Y#Ñ,ËEsî&ûa †xë5+.Žœgjõ˜PBCÃŒšWc-¤ÏÀ†µà°¦vÔè#JU0´É‹½"ée0y:@ ”%RÃ÷iÚœ V°b3D^xaáDZö±ÌzeÌ2°€ŽÂ,“.l Øé»fDáL>°%ÎÓjŸiúq—¤üBœµqggØÞæ¹ VBÐi‡‚…^"l"ÒwÓCl‹ÎZql¹Ò"T¥å&hgÛ´¥ Ë(–+…ÿL¸nª,–‘ÚË«*¡Ø´iô™ÂG [Lwl@YX× ®yœŽ˜Þ2¬Tß°Ûƒc¦A1lb Àu\ Y2¯÷óˆÎ– Íí®YÍ]p0M@¨¿ø= ¯Ï•H4 ‘ãGA“Ï|YÓI³ù˜­6YÝÜä¹jH0e7«›¸ÆñáìªÂDeǯ•2x»R ÎLJD¨0z¦6j« l´Ñ¡Fth5zjSµz€ý½j¥áA25¾&‡t>ªg3AÇB65M:M[Åá%M‡ jÕ||¹\<[¼¾YéÕ‹Ÿ–7±jÿpÿú‹¯ï_ËÅ>‘Fy?Ã(NÒÆÓ.Ëj=­-ì›ÈÎÀÇ”ßU–&pM4 ”BÝ(vÀà®]œú›½-^WÃW-¶áÛ3‰Íæ¾_rƒ¸ªÔhÔõ¯§¼OÎõý+º>D!P…]v}ª³0ÒÕ™.ªd9¥ÍòÃ{tÖÔ[­))²*›df†lwÀö*~z;d ÕC£‘Òãj‘rQ5M¤´uó¡ugÑ{Ëróôœ–nÿ–® ¶^Û%ò %ß>Æê‚á‹Þh$]M¹ŸP$ · $½a,Ž@›ºOÄ‘ç!øÊW/¿1îÐ-zÅ`ËŸ/²Øøs›Ç¾?¿¿;?föMWÌཀྵÏë«Ä`üƒ¯çÍSQ­#ufóø[œƒNóöÙ{(™|Pûº¯ /]ò‰Ï>J—_ ŠkèÿØwQè:OäÁrì*ë¿YŒc|›Ü•Bâ2‡6$º,þë!Ñúðtè¿^ZGw<~WßíÌ5t;§3–deÿ‚|¹è2ÍÌCì ý[ñr<®fœO-ht½xp1ò¨ï=*o(ü}»l ˆ½kÄE›€hóøÏ¢õ T]Ñ>íÚ:G=‡ ÅÄ:Ùš× g拳yzÑ÷ lÊób=ùÆ| çò-éÂ÷“î+U9úa¨<ÿ´a•b0_0¸Ï\ˆ¤kYõz‘ÔŠ‰ÀE˜8ÑàŸx?'! ±5>D[>D¡¼pìMÍ*©Bz® ý×"-Z漿¼Œiþendstream endobj 246 0 obj << /Type /Page /Contents 247 0 R /Resources 245 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 193 0 R >> endobj 111 0 obj << /D [246 0 R /XYZ 71.731 706.3512 null] >> endobj 38 0 obj << /D [246 0 R /XYZ 535.2205 691.2808 null] >> endobj 248 0 obj << /D [246 0 R /XYZ 71.731 670.2196 null] >> endobj 112 0 obj << /D [246 0 R /XYZ 71.731 633.4846 null] >> endobj 42 0 obj << /D [246 0 R /XYZ 273.4242 590.3872 null] >> endobj 249 0 obj << /D [246 0 R /XYZ 71.731 578.2159 null] >> endobj 250 0 obj << /D [246 0 R /XYZ 113.7826 555.8766 null] >> endobj 251 0 obj << /D [246 0 R /XYZ 403.7919 555.8766 null] >> endobj 252 0 obj << /D [246 0 R /XYZ 71.731 535.787 null] >> endobj 253 0 obj << /D [246 0 R /XYZ 159.4512 486.1381 null] >> endobj 254 0 obj << /D [246 0 R /XYZ 71.731 461.0672 null] >> endobj 255 0 obj << /D [246 0 R /XYZ 71.731 461.0672 null] >> endobj 256 0 obj << /D [246 0 R /XYZ 71.731 440.7457 null] >> endobj 257 0 obj << /D [246 0 R /XYZ 71.731 416.5342 null] >> endobj 258 0 obj << /D [246 0 R /XYZ 71.731 416.5342 null] >> endobj 259 0 obj << /D [246 0 R /XYZ 71.731 396.2127 null] >> endobj 120 0 obj << /D [246 0 R /XYZ 71.731 356.061 null] >> endobj 260 0 obj << /D [246 0 R /XYZ 71.731 318.3374 null] >> endobj 261 0 obj << /D [246 0 R /XYZ 71.731 318.3374 null] >> endobj 245 0 obj << /Font << /F24 62 0 R /F33 70 0 R /F38 85 0 R /F49 170 0 R /F35 74 0 R >> /ProcSet [ /PDF /Text ] >> endobj 264 0 obj << /Length 1941 /Filter /FlateDecode >> stream xÚÝšKs£F€ïúºEª¬È¼gÈÍk+»NYû°µ‡T’’Ƶ@qùß§3¼(ŽñƵöAÌ£{º¿î™/$Ûhlòò×0zÈKÞ*Ú§Ó?—¿ŽæËB6NaPô*À„pÇb<£Ü!BʬÖ_£ßÿDã Ôþu„ê*>~€ ä`×%ã݈ é0ú˜;Áèfôù?¶²’ ñ s ˜ÍN òvú2EÛ¢ÞUaá"G*WV!¬b ±¢cáRGJÅVIïus&)‚©á<«Yö÷< ‹.OÈH‘rƒrMÈNÖ±ŸúQxluõ\1 ¬™ÝS®þ³oT¬ ÞˆÄSÄ2 ºlÌ\GZÎ¥m6–0˜“Ãô-/?üvùa9•lò&®°)ž¿?»îv€Ê`Ï’¾bÿ^ùKûW8ËEÅùÏê1Õyé༇Ò>Ñ&J¤‘‰i›‡Qh ë­{ë,1d§Â3Õý»º€‰8I—ãÜùü†Ã|rgc×J§Z‡ùTU¦£ÐH€‰4}G±}d¤ Í0‡«jÇ-ãÖ†A1`.n†²ZAÂÌ4ýÿbåПîâAJÁ©ƒ=ngWWG‘nv*C ÅN¯Ô%;U±Iš?GVã øØŸV~§æÇN=£DŠ&=Ù=ùÒø˜Î>€†2Ý÷ ‡u”tÙ‰4Ä]î%èÁ"‹ùÅå—EFP2ÕNB¦_Î™š ´‰Ì·à£ÅkgŠ*¾ØpÞüîóá§Á°8–÷`2˜¹¾cLw(E'ò ç v,8ØG)fþn~]^±nz*c EO¯ø%=UùY[ ¢ðîÛæ›6žf’)*X©âÁ)ªZ ê_6©bÄe®Äíãj(C¾"®ÀC–ì *Ùd1‰3r‚,°”ä2ëo/ßÁ¥:qªð<‘Kžú….yªJ­ºxʯ^‚¬§ï‚\B(•Q¡8“’«jÖjæ¸þ“óYMЉò™bौ!I%r9Ç¢/· gýW!Q@ãOÐɶ肇!|BÆ•C™1ËÅüüvR†À_óëËón+³Äľ¯$+ºµ¾ø;?µÎèð.ÝöÃ×â· D#/…qf÷8|^=ÜïV:NêzñÊOc/~Ì/ïc½ö? {Üz°ùü~×l úTÈNM\Gs@¹¼\Ìo–S—NΟ¦c›a.²“¦³Ãå<«Õíé•QZ½õ+R:zU“—rôCqã¥ú§Ôßµúý:Ú­üÐËyóv`¹5 cý×ÞmÏ·Q¼ó ¾Aâ‡ßàï0ϳÅbvqÑ–tÞ¿ÿy±øùææ‡7EŽ\ò˜n Uo£ ˆ¦„OJí·vˆ{/MuÖÇ…äêmzˆÊ®ß/p”»“äD]¯Cuó,R媓©jÇ1Õ/kÁTMØeÊ+ÑrÚ°zC­œ´põÔ f¹×F w‡Ã+!©N`Ä£\·ÌSÝ´TúŠ–^KZª2~ Z²ôlZzÓIKß/ÉP&{E˜¢ž¢’mÑÁ Ì$¸â'8§e4h¿\}œRnóKåÀ þ€™»×ó³«Nªª£?OŸ«~J¬**ªZçºwSÎ'G+1/¼Ó…—¶xùŒÂƒ(L‹ùTÕQœaKÎ\ ÏgT™DozO ê]6Ƴ–ÚKŒ aT¼0Þzi›Ð‹Ç›ÏW¦J¬½4©6,©K¨ãWIª½Mcv<éÝ>Éü¯SŒ&¦×OQ’ÞÅ„ëŽÃ9Ø« îpAwˆ¤'â L*Ê> :¬1?~y{5·¹Ã…±Êõüüòæòã‡Ö¨Ð}¢X•a¨PЯW Œb"]N<|0€Ùw¥p)¦àW„b.QTÜÖ†8žJª¸‚‚0èÑ¿ ûì±›¸áìøZˆ«`B%;_ëæµ°€Ùc.5Î¥[{»ño³έŽu¸ÖõÅLj½&ðÖ_qr½Ö‰©¶ŽÂ4ŽûåN£-ls¼UØaÕçÛo{üw¶ÓqÔ„ϼT„÷z‰ŽóödÍßÝz§ÃÖ,‘D;Ón§×[/ô“]RÏE±Î–­k3èÃ6ªOg€Í*€G6›ÀôþàÛµì‘ÞIãPûh°†Qþ,)T÷Óò@b%=œ£ï/.Et+Å-ëhߦÈB°7…Š6÷æm=?ðVV·NS[ŽLn{„üºë65ĤX7§¢aûìíA|›¥WÏ:§U­\ˆõÃ2‹·˜Œê«Lãü»TàFU¹Ù‡†Ù…‡ƒ®í.Ú˜Zµ`!ªnj™øÖè ÃFIв§(Óæ!lë eÛÞìä> endobj 265 0 obj << /D [263 0 R /XYZ 71.731 741.2204 null] >> endobj 266 0 obj << /D [263 0 R /XYZ 71.731 172.912 null] >> endobj 267 0 obj << /D [263 0 R /XYZ 147.8946 124.0951 null] >> endobj 268 0 obj << /D [263 0 R /XYZ 196.0437 124.0951 null] >> endobj 262 0 obj << /Font << /F35 74 0 R /F24 62 0 R /F33 70 0 R /F38 85 0 R >> /ProcSet [ /PDF /Text ] >> endobj 271 0 obj << /Length 2507 /Filter /FlateDecode >> stream xÚÛŽÛ¸õ=_1@2fÝ-÷m7ÍÛ&Ûm2ŶhŠ-Ñ61’詸_ßÃË¡(™Ï~%žûMNnbø%7ë$ZgpÉ“(Mãü¦îÞÄ7{xõç7‰¹·0÷>Ð÷oÞý7›hS¦åÍÃî&Ë×Ñ&]+\yTÅ뛇æß·ïä(é°ºO‹ø6ÌõçUßÒzl˜dT˜Ç'>š…8ð±mÌú©çÏfE¶|”«ÿ<üå͇G[‘Á¡ð"*ÀBæ±`-7e”UU¡9øò÷LRKÂñHÉ`É•Ü\YwliG{in¾J‹[¤¹·lÔ¼»×c2±hˆ½¾7—–÷{‹1þ¦’v¤ÂÊïáÀ즖uL"=KeG¾±nìÌM?v[”?ß)ñHî“4ÚI®´[,‚wT߈Dr»#h3çšÃq-HÈ,"É–Kí÷¬W4ã™ ƒ,­Î„Úp4€žÛ#d•*¾“âÖ‰#­Ù×8Nk{?|°à;n)Ù²ž §‰+¯w {^%J7rÎ’| aDfõ5.bí-Öú@R;ãôבö5ðqÍ{IXÏP·?ý㣕Ùö$©Ä *ÝZ…åL*Œ÷¨dT š€Ù¶h¡õÀZVÛ†ô"è`$‹he‰ޞж¶Í–Ý™›w;+3¯CÌîÆ¾–Šbx÷î‡|}Sƒ•¹ŽETnŠ v(ÀÇfÛ<‚ÌxC­Äõ–™O‚/VY‰[Œ5Ý'Y™rèKVUÃ>ÙžfTœW±åˆõ¿›+–ÎÑÞgÐqÄ¥î-<ÿÔMûKGäYgUá÷),•UиÄIùb–ò.f)t-K…޼ž¥B4œg©¯Î‹ÞL» ëІ©`âJAЪI>ÌÝÒÁ0å °Ùxy®2[h©§–þÒèÙhÅ÷XÏ!΋½ùD(Y=¶gš–EåÖ%™«‹‚ê—U®A3Öh¼‹AÒ4A"âÿì‘L–d­%ì™ÉÃ…ÔmœãýiÿŒAJrÞŠI¸‚†‚ ˜YŽ®ûùÃwúô!Yð«,²XcÿoT…½¬çµI²‰âµòÚ´ŒJ° þ—ô¼Hü WDyœ ³~¬Únš\#­³.xu‚bz‡í°V<\ÑzI”^Þ9QÀsSÁ¨¶jV§`Õ ë“7•wÆ•(pÃìu\%`øbI!éì Œ¦†m":ÈÀòb‰Ê¢4Õ>YnÇ,]WzΫPœÙÁÀûÑ#.}c*=,ȵõ‹Æód„bZl¢B©ú¥€è] ˆèZ@ y= †h8ˆ3">2!§ƒÒ‰ µpH¥YZb Ŭ۱9ɰ–…“ä×$ËcÌ€HÕ¬ézšÏtö…ašÉ©o'½žÚ,šÜë}âͯæEµ€rÛV] ]êKðC6Ð`[Ó0«/èqÐeÍ+ /4Ôb9×#âiþk¹†hh¨²€žÎuŽ1麌’ÂÐjo,1:„²ð:ŠsWÝ }¢³jë’'UUyZ½èÁ>ÐEv@×<8täuÑpîÁ3"~ìmÿm.S+¨:`PŸ¸›u˹×}çÁîÛxåŠ]a˜‡BÁíÕµØÆ.aaçc°ód³ncw3G_r«ûeX;c­Íôq{:A˜ñx4ï-ýSA7vCÇõMÓÞD!»Ÿêèo ^ÃHe­‹owïÞûÝ/>~xÿ€ßèˆÔ[ÑŸÔ§d78B¢lŠüøòÝŸUyý·OoCc¢î °õ8²ç]ˆáQÏÌ 8é3ÿôÖnáJ-e'cßku™7 Gó1ÅÀïÌS§skG< ýEæå'.¬NÜ)…ÿ…BY–ùk^I;­SK4Í *}÷ù Pß³^Ð^0éYò"ˆ.f;¤®éQ.F8æóöÀH/Åå!|T%åæÊ ÞÁœÿ9¡ÈÒ¨T J1³¾øo‚ÀyÿÍ{}endstream endobj 270 0 obj << /Type /Page /Contents 271 0 R /Resources 269 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 193 0 R >> endobj 272 0 obj << /D [270 0 R /XYZ 71.731 741.2204 null] >> endobj 273 0 obj << /D [270 0 R /XYZ 71.731 706.3512 null] >> endobj 274 0 obj << /D [270 0 R /XYZ 71.731 676.2989 null] >> endobj 275 0 obj << /D [270 0 R /XYZ 107.4268 639.6015 null] >> endobj 276 0 obj << /D [270 0 R /XYZ 71.731 633.2394 null] >> endobj 113 0 obj << /D [270 0 R /XYZ 71.731 601.5791 null] >> endobj 46 0 obj << /D [270 0 R /XYZ 304.0669 558.4817 null] >> endobj 277 0 obj << /D [270 0 R /XYZ 71.731 546.3105 null] >> endobj 278 0 obj << /D [270 0 R /XYZ 71.731 508.8628 null] >> endobj 279 0 obj << /D [270 0 R /XYZ 71.731 503.8815 null] >> endobj 280 0 obj << /D [270 0 R /XYZ 81.6937 483.1243 null] >> endobj 281 0 obj << /D [270 0 R /XYZ 71.731 480.9674 null] >> endobj 282 0 obj << /D [270 0 R /XYZ 81.6937 465.1915 null] >> endobj 283 0 obj << /D [270 0 R /XYZ 311.7789 413.3858 null] >> endobj 284 0 obj << /D [270 0 R /XYZ 408.2171 413.3858 null] >> endobj 285 0 obj << /D [270 0 R /XYZ 445.4773 413.3858 null] >> endobj 286 0 obj << /D [270 0 R /XYZ 81.6937 400.4343 null] >> endobj 287 0 obj << /D [270 0 R /XYZ 71.731 399.4481 null] >> endobj 288 0 obj << /D [270 0 R /XYZ 81.6937 382.5016 null] >> endobj 289 0 obj << /D [270 0 R /XYZ 156.1337 356.5987 null] >> endobj 290 0 obj << /D [270 0 R /XYZ 71.731 354.4419 null] >> endobj 291 0 obj << /D [270 0 R /XYZ 71.731 339.4979 null] >> endobj 292 0 obj << /D [270 0 R /XYZ 76.7123 277.4954 null] >> endobj 293 0 obj << /D [270 0 R /XYZ 81.6937 259.5626 null] >> endobj 294 0 obj << /D [270 0 R /XYZ 173.0199 259.5626 null] >> endobj 295 0 obj << /D [270 0 R /XYZ 71.731 244.4544 null] >> endobj 296 0 obj << /D [270 0 R /XYZ 81.6937 228.6784 null] >> endobj 297 0 obj << /D [270 0 R /XYZ 357.8451 202.7756 null] >> endobj 298 0 obj << /D [270 0 R /XYZ 71.731 200.6187 null] >> endobj 299 0 obj << /D [270 0 R /XYZ 81.6937 184.8428 null] >> endobj 269 0 obj << /Font << /F35 74 0 R /F33 70 0 R /F47 164 0 R /F24 62 0 R /F51 189 0 R >> /ProcSet [ /PDF /Text ] >> endobj 302 0 obj << /Length 2200 /Filter /FlateDecode >> stream xÚÅY[oã¸~Ÿ_aø¥6k$ßboŸ’™dá"34ÞE·´DÛl$Q ¥ñúßï¡xH‘ãÙŠ‘LQ‡<ß¹}‡JF1ü%£û$º_Àe™Dóy¼¥Å‡xt‚G?HpÊr½Žæ«d ?Og«Å}´ÝÌ×£™+äqÿáãó|9šÇÑzµYöG³Ôz ³6ñf´Ïþ5y¨*Zfì·él~¿™pþ†C\àµ>S¼½e¤ÒMÿÁǸ|iv‡+ÊnkfçjzÆ‹Ÿ¬Îóh»J–­ÎfÛDÊÆø3Uà¼É®@êù‘¦5ë&z+ý!Ï4ä[Ì8Æ…Õg5«˜'Z‡Ì˜*4ëá¢L8²¸0þv93“…lT¨E”–,£‚ZSÉJ ÌKv e†_ãxž¶©OoÏpÞáêøµŒü Û`ÐÝ +Ä⬌S[åôX;½L((1û©ÏuÐgáú¯iÊh(‹FÖvB!iîÙþàÄ„ÕPÚÈ%…Ãè‚;“¹ªjqÙÛ”®³ê†–Tò©ÔCvReÒPꦒJãÖZŠI§PMÿéÆ&Ê3QiÀµ…¿Ú{Ù·4¡œ™è1‘ÒØ9ý¸ÐÙX†ÔÐð;7eŠ¦Ä ÏÄp‚(oã’¹$è'ÏäJð“ ˜I%ä½<³~@ûÒSÞT(~g™ç€‹a¦DH7u ZÆ©D§|lê°+ߌe›jr ¤O@† ¢Zö͘’Ò0°Kß%a @põëmcB£— Eûü4…Œ ²œÊ^ðËæð¨ufKP”…-2s9Ó®ˆ÷)ŒIô™)ºžõ+ÁJ ‹bˆ¶'‚¶¥ªÌ~PŠX™²ª+u™^†»œ-ÏñHCû² v“Ö–©‚¡Z”i8ÎÔãáÛ·—ݧ‡ÇÝËnÿOúúYß|~zÞ}Ýíwýú¦fA=IUå–xZ*ã_ûÐû, áè‡TÀš°Ò·ø/,Žh)òžùUÎÆN:l,Î<·J’ë€ä*¯ n|ܧJ¸.t´Ï/À; ùâŠæ°twlÚ²±ÍvH°ÒÓšøÒ²IÏïcn€6®€o¨ ÅÁ†X¿WNUë/,U&c[re§eðÙ½ñ•7ã(äsØW¿ Ç1oºèø}~ö‰BÇE<È|ïCŸfm_÷YbÅ…Ç0îš´,¹ÛÐÝ I÷ ª(´tS€–9±î ÉÌú‰r9ôx 9Ñw1_.&cC¼PË¥âá5¢ O[‹Â•è‡%µ GºƒøÕn &ýó(à™Íà0"©Ée0«Å5ì0àÀ޼˨®µ0EW–4o¤C%Ûœ ó:nAså™U·ü]u²gü¶ÈûŒÿ4]­&FFË´@Ù”>u4Â{«ÕÀØ[#+ÛÓ“€“Ù€ôs«r Çå»lϱ%fOƒX›º¦0îZ`óò-e¢N}n#LÓ«LIÉÆ`·a5yÅ,_aÎ'‚ÜÈéú}³nÐ>€'¤òÎ m7ôÏ.Ò ÓZR¥åC]2êÕA»HÔoÙ0tELJþaFAFPpj.XjЍQº›ï’JG7]W&Ÿ£õÏNpñ¼£sæÄ¥ëîq ‚þ—K—ÔŽmëvævÏYÝMºÄ:¥<é&ñ"ºyØ4Þ•ÓeŒ-©`Äøš[b‰±¬8¥¢¶6»ÈÜլΠOê}Ûa)\ïüšèÔçÁAØp¿¨ÌNîÞ9¦r¹T¸ÀŒÞïHÂážA‰ R¢í¹i†OnÖpOluÜÞ¶th&ú+"%”·~nF1}í¬8HóCC<·%ëG;óãà‘¤o?|%`–@<ÿÿ´ñ˜Ø~ºXMË€\«èjè|ñ¿ b&›¤PBèLP’{Âe…º ¸=á+‚ã7ï\'ôdES‡8û*»£¹ ,–w{ð“{У)ñÝ`]Uf»Ó¢A×üQ:åÓº‹µzÙÿÙÞMÇ öî¤Ù!=]a&z™Ã˜<ž;; oAÄ[S™#ÊöPäÃÓÞ~6Å¡ËM´IÖÛà‡Uœ2sæ´_U+ç“Õj±ˆâ8YXI ÇM5û6°ÞïËÿ-Tendstream endobj 301 0 obj << /Type /Page /Contents 302 0 R /Resources 300 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 318 0 R >> endobj 303 0 obj << /D [301 0 R /XYZ 71.731 741.2204 null] >> endobj 77 0 obj << /D [301 0 R /XYZ 71.731 706.3512 null] >> endobj 50 0 obj << /D [301 0 R /XYZ 532.0396 691.2808 null] >> endobj 304 0 obj << /D [301 0 R /XYZ 71.731 670.2196 null] >> endobj 305 0 obj << /D [301 0 R /XYZ 71.731 660.1048 null] >> endobj 306 0 obj << /D [301 0 R /XYZ 71.731 650.1421 null] >> endobj 307 0 obj << /D [301 0 R /XYZ 71.731 621.3466 null] >> endobj 308 0 obj << /D [301 0 R /XYZ 71.731 605.2555 null] >> endobj 309 0 obj << /D [301 0 R /XYZ 71.731 546.4112 null] >> endobj 310 0 obj << /D [301 0 R /XYZ 71.731 504.6328 null] >> endobj 311 0 obj << /D [301 0 R /XYZ 71.731 434.8944 null] >> endobj 312 0 obj << /D [301 0 R /XYZ 71.731 416.9616 null] >> endobj 313 0 obj << /D [301 0 R /XYZ 71.731 371.0687 null] >> endobj 314 0 obj << /D [301 0 R /XYZ 71.731 340.1845 null] >> endobj 315 0 obj << /D [301 0 R /XYZ 71.731 257.4946 null] >> endobj 316 0 obj << /D [301 0 R /XYZ 71.731 226.6104 null] >> endobj 317 0 obj << /D [301 0 R /XYZ 71.731 195.7262 null] >> endobj 300 0 obj << /Font << /F24 62 0 R /F33 70 0 R /F35 74 0 R >> /ProcSet [ /PDF /Text ] >> endobj 321 0 obj << /Length 2323 /Filter /FlateDecode >> stream xÚµZK“Û¸¾ûWLù©JÒê9£Émì±½JÙc'Ö¦Ö•Í"! 1I0è±þ}ApföòA"¿~È‹«9ü[\Ý,f7+øX/fËå|}••¯æW'øÓ‡W »dj×LÃEoö¯~y¿Ú\ÝÎn¯—×WûãÕj½mVë œµžmç7Wûü_£»º¦UÎ~ާËÍ|t73Ÿ~3_Þ7›‘¯nF”š7÷_f’‡‹ù”äTHóÀìgÅíÎýxx‘JÖDÀqÎ;ó‘ñZ‹sAáˆêŸ.ÓÅrv»Y¬[-_G‡¾îîÊHQ â¯?×ôx=s縫å¶=çÝORÖµÛøugŠ ‹Ä‘‹’(é’Z9mƪ¬hr{F]fA»ûúv·3_™:ó&â{SOðô›ùˆŽ›ÑOV9žXãb#Ó$ÍGb6ÿ>¸©}øúáÓÇ®üŽ/ɪ“ùJ¬øÍ¡`YqÁ—ËùèÇx¹Vxœî÷÷ölRY쥂¯DäÓŒWúvw®dvóý×=\œP¤ë¿øsS’*å“Ö±Œ¹¦ëä —êk&Xx|¹?ÞÎGö©¼Œ*".‰“¼›f(ÊúPð t´2ñIs¦P'^!¤I½{Û`å"wΨ”\Èç­è{<³ìŒ‚{[9)Á…ötg$Åya52O´¢‚nÈCbÇp‚”$;³ŠNÍ™Ö'P¨¼Éð=â$yIŸ(ÂÌÅA݈šKôÚ×›Q’ö(§!¦Ði¿èز´ÄSR`‚It'`•SìÀù÷I„òÇÖŽ™’´8¢;DjB[yQp ñ£3˜ÞëŽÒ<Îg^äI)Zê9±ƒFK±¾ ¦¨`¤À×H»˜ôÚײ(O{%¼%[‰À€ŒÎE àVe†ùdi1…÷ÖÜße÷ˆNx¢ÃÃûœ‡É^œ­k‘}R?\¬(­ D¼aH`‰ÉË#¶¹!w…ÆAL<Æ@PΧ8]Ž1’*£Ý¤åv"DÑuŠ uÜF!ž|”ŸiЧ֪ʭìÝtàùeàO¨_U¦ÀZZËþóÝ?ÞhäîÆ‹Åb´ß}2¯ß~þòm÷ð!ß`¥fôÃKªŠp,5ì -Þ(S -ÚGêxCk¸œ5¥…B²¦ï+K*2æc¾âUç6zŒõÑ?˜CF¾fj½À€š˜'#:|Au;•yk¥]i·>4q±ù.ÉŸ]m.îDòB{\aʽ†G'8êµÂ¾Ô1wBEwQ„•S?M`¢½ ÍIž#ÒùÐ,P¶ëRÀp§š$MÄ‹¸æ²E™YWp²3©N4J«F|+Ëî鑊y›ˆ ÙÅv„ÒŠ7'›L«¦< €ˆW¦i™’§õy¹{×;QUI3¯ÿjö'h¯Á¨F1d:ÔT9‹$å€@P­»:… [µæÃòÒ“¤Û €  á¹t͕ȫY—ðEÌçßµ;þ¦ëîa¿ÛKáÒ³~+‡<' ¯Ðš½ˆèæã .~J.\îÀr1Ÿ–´xX˜=ýÒ`™‹g[%%<ém`Ñë •œ ú&…VÇQ[2îÑù²ðŽD{#D˜Ã²J"N³‰j1¤v¸EyN£¿ÚŠO÷M»‹øt¶b1é|ÔG%T Ëéñ†dߧω8pÏö¦®ÙèÆÂœ‰jóˆW^ˆ¶1eÎÆŽ—TÂñi3.@m¤Ä¤«Ã³ûgÔ€*SºˆòæhœWørYA"ŸÁ®n(`ƒÝ@m¥•*Ú£Ê!üÁ$À÷Ljw…FP`OÊ R†u•Nn¸)/ÎÒ“ôq”~^àë–dÒ½~Ò5|ÁÝL'p_ë¶öac”ûæôƒHéòxIø¦œÉÀEA…ã³Õêt€SË”›÷jD=°èWC¦Mg¢Ý±Wgµ¼œw»™xªÐí zÑàšoÅ9*u /pKÞDe žd©§Õ³<ó¦À‰Gǘ>G`òÊ{’t¸þ1ßÌÛ²Óò™Â7 Ì#yE@28d1$S )^H»ºÐeUC{ð: D$ÿÉœ·µãŽ'Í™® ÒÅmzøÿ*R ;p¤Îœ’¤ki34ÓÍ€Ÿ¿M¤ÃÎØ³€çJp¤)o6zÿCÜÚ:1Š3ñ'OM)g| KÉ©ndKÔ¾Y; m¯iEÎ9ßÂ_&´OVÅsl}DAÕË4;Îúõ̘°°>ÆæŽÉðTÖNQq&ä4œyß¹)_ U—NrÓ„T÷inB½îqu…ê¶Ó}:]’¹:•\[A¦8âï í¦Šg¼ìך^™Z¥\YRk›Çêt­ž›ðò&w†ö«¥$ëu«Ñô+ÁÎÉÐ9†8wC §ÂPB#ASÐT¡â!Ä \ô‘aÑ$hé~eRç¦ã>Œ†fN´ßvcª%Š®Ó@$‹¨›e’£êuŸ…Û©œ¾¤w¯žcÌrÈՙЇqê,|‹·$»H"•+ë]­ìQ@ä¸cl%j*™~iÄi²›ßE¿qêZƒêälÃM˜°"™ ŽÆZÒËâr€4êì~y&=Rô¥=º—vüß‘jX8øáJãáñJ'æ‡JNÒ²Ëág?ûÆmÁl5Â$è-ÐëÜ{8˽˜î”´äÚ²Ú§Ï÷»÷»·8Çþüð5þáßþT¿Þζ‹ëÛ'ÿÇB°¦ÿ6«Õl>_¬ÜIZŒÛÁÿf¸ï4 Þendstream endobj 320 0 obj << /Type /Page /Contents 321 0 R /Resources 319 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 318 0 R >> endobj 322 0 obj << /D [320 0 R /XYZ 71.731 741.2204 null] >> endobj 323 0 obj << /D [320 0 R /XYZ 71.731 676.2989 null] >> endobj 324 0 obj << /D [320 0 R /XYZ 71.731 606.5605 null] >> endobj 325 0 obj << /D [320 0 R /XYZ 71.731 549.7734 null] >> endobj 326 0 obj << /D [320 0 R /XYZ 71.731 533.898 null] >> endobj 327 0 obj << /D [320 0 R /XYZ 71.731 451.208 null] >> endobj 328 0 obj << /D [320 0 R /XYZ 71.731 431.218 null] >> endobj 329 0 obj << /D [320 0 R /XYZ 71.731 413.6588 null] >> endobj 330 0 obj << /D [320 0 R /XYZ 71.731 317.6439 null] >> endobj 331 0 obj << /D [320 0 R /XYZ 71.731 286.7597 null] >> endobj 332 0 obj << /D [320 0 R /XYZ 71.731 178.1669 null] >> endobj 333 0 obj << /D [320 0 R /XYZ 71.731 147.2828 null] >> endobj 319 0 obj << /Font << /F35 74 0 R /F33 70 0 R >> /ProcSet [ /PDF /Text ] >> endobj 336 0 obj << /Length 2443 /Filter /FlateDecode >> stream xÚ¥YãDú}~E4/$RÇøLœ}˜ƒaY„Dƒ´ÚåÁ±+b;¸ìmúßïW®ÓuØn#œ8_÷]mBø/Ú£à˜À#‚8ÓMy{nžà§Oo"²ç0{è›Ç7_L²Í)8âÃæñ²IÒ<È’4\i‡ÇÍcõŸí»û5þs·³pû.`ÏO?þÂ>|ÜeÙ¶Û%Ç-BìÍû¶n¨é‹· {õ.QCÐî·Çïß|x”leÉ18å@{–w åà>Ѹç2N‡ Éóldþß»( ·íÀظ/ìCÙÞwðž+šŠ}¨0é;|ÞÅávè¹4{ü«­ðÃ0FôW@mQG¤Œí…=û«¡ömh*Ôe Š¥Z"S•ÚÛØà2áßÏí.ʶÿ£ÿCTµ ®}§,JGáïƒÀ•຿œ¡“Õ¨ ÈàlY\Mž{‡JLPý"`21ûûöŒûë«ÉÐ_ë7Oê/’vm¬ð Þœ¹zdNbžØ^’—J¿qNKÍ«-ZËâô-×ŵE»XXOè±%ÑÂó&’2‡žz®à÷<,? ¾+æX†µoáPµ’ye}Ð'Ž›WÈö3°Ç ÍOÙæŸ‚£;'q ½åkט”“d¿ÂÏN’æS² þh 7eá¡6KU»$“—ü‰Ú¸xB¡³PzUÛXAÅtG¸õðE8#}ÿ¢Inê-êŸ)¹/]{3)@$oú·D…—3Ñ0gÆ­.!ÊbTîç+.y ×v¨+C@à©ã„žå'.õîm9ø‰&½pGËßÁm÷2I¨  Šåqd× ‡Øƒ•6IqC–M 2±Ö¬²,}p–;ü„›¢æ†3ˆ~iCÉ#ll!|Â*Ùp¢wÔÝ0¡ V(ó LŽÙ&Ë3è’Ø½h¯C9¢×ÄE÷7z]$—£wž 7eá,a»2| k2DÛFZJÔ á¿ h¢*<ÿ¼ ò³°E‡È@ðYм8NåŠïßÖ%ârÓW¥rQ&Û'ÔKS•[xízU¡•wyؼw•ð]x0kUã4&̺6 1;$ŸÚË¿eÏ«0e EW†Pã’Še_˜@Wz: a¢AÍ„‰€¢ìëÉa2Ë‚…›²ð3tñh]œÜe‰“L‡¶CørØz-ˆ'Œ$¯'Éâtžæ{Êß“H(ª«÷~s9H®0×, nÊÂOIP§G¢Œ­Å`$””+„¦í¡^ GWd§,Ùdá!ˆÂ8òÀ´×¡œ0ÅEÅùàרƒä β`áͪ’m{Þa¬‚¬#ã«O#•CÞ¹s6ïØ/J™ôúÖìT6öжH—†ñ&Íó :œ·…8Ð^‡rXÈÄEÕóq—‡[¯•\d—­4φ…›²ñ¹)ë¡%ßn¨¢iqé³·O‹“v­æ« ˰¼§šŒ¦* •f—5µë¤utT®WÍß’2Hy³¢Ø=Œ[MøéM¶æT²çÆ !šj¸‰f¼fà´A÷&Ý4;qžÅóIW‡ò'] EõÉï|’+œo– ·;é*•É~ÉçEJÿƒÈÔt¬1¬c}JÛzÐs©Gd‰Ÿ'{"9¹uèwÂu¾ÕGJQ¹Ð‚Ò7 Jú„à0¼c!ÊÂW´Ú¯˜~—ˆAF ¡€f‚Q®¾óûƒMo…;ÌÑ71k™hZ3Ý 6…EÜ;+RmI¢ 9@¥OÃí¿5—rN¡Í_ QÜEZ£0î‘HŠt-R½c R9X#ô‚ŠŽ.ÿÚ –(ç'•4á ‡±”ì¢-o”áÍè-ðdôàäR¤±Y)(6žfˆSlÍ[<éé὘}öõ³"Þñ?ÀyÓ²§2|¡íL´v‚ÒN«æTc3UvHFÃ.kŒ0 ¥+,Í#Ó™´ðgM¹Ãž§TêH¢ÆrÈ5†kÚ®X!RvølK½Ü4¾©Ö¼›3{AE@pÔ8ryÒc¢h“Àx|È#OFâ@{Ê‘L\T?ß{3’‹ärFZ`ÁĽ‘Ô?ÓLÞv_xBhYOï^Üj+Ì…rëp99GèíeQ–jwÑNúÖÑíº¢!÷¢“H|•ÇÙƒúÃ5þB‘°d†Éj¥¿/úŠ=³Há#ÂßÏArå¸ñQƒÈSB±g¾×0™ù¢E¥4½Hy×ÈŒ‡›,4 :3ךlVu™™EF«dÍrØXT°$"ã|šÄcÆ$ìå]Ø"^3‘á¥f„¦w‚ê˃¥//ìÉÿ&Ö7ØðZ϶ôÇ)td,°sbº ÁÛèðð›¹Ü¦øg–Û¼iŒOiŸÒ…þS‡ò7 ŠªôŸÞ”å"¹œ²æY°p³&tšwÛ§wå—†Mqðî Qã’·ÓõÛ÷0Só@mÖ}±YÓ‡g vŸžœYi"†½Ý"Ê[S"ƒN¯6ô<ë¡BœEYžlu,cÏ¡#IäkU)-yÓÝØ>áÆ»O‹i†§Óü>M‡òïÓ$ÔxèáwMÉ®9Ë‚…{í†rÕ´»tŽiÌ\šWa±6á°928 ©ç’`ÂOÜÃíŒ:u¸ãpXÉ Ê™/PÁjÕLvj`–þGp¥˜‡î;½„ƒàÓô«,Èã ‘$AD?8ýŠíu(‡_™¸Æm•߯$WøÕ, î±YA5êÑ+ÓÞ‡¦‚Q€§;aÞA¤…Â@–pi«³L[ãà_ý…ëþeAäÛÚÊ¥€f*¢ªúÑo-›Þ cÍÑ71³¾ÒPa‡ôÓrÝx,BÇ; OkˆVgjÈiÝm1Äè?Áânn¬ƒzí˜Sgb>±nrƒSçêÃX‡_Aˆ»™n Ä…Œ¦ßߊ^.³§÷Äd¡böäŽêÿŠ_^¦Ê9Ú¦*ÄU {§èÈi´@BƒM+bÃâˆF ŒWIÜÙúÅꑵ‹jb&¿+˃†ðS#פ½çïÖ‰±vÏiª¶Âwh>5z ƪpšW¨°Ü'È’Y=<ç:µº‡ðš]ï«òË↖I6*È1éü«ûcç…G“ÒN¯V,v“3̓<:œf/´j0ö}Ö,΃0‚ÎC@Qq¢Ð{ ÕAðÿ@ Û3endstream endobj 335 0 obj << /Type /Page /Contents 336 0 R /Resources 334 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 318 0 R >> endobj 337 0 obj << /D [335 0 R /XYZ 71.731 741.2204 null] >> endobj 338 0 obj << /D [335 0 R /XYZ 71.731 753.1756 null] >> endobj 339 0 obj << /D [335 0 R /XYZ 71.731 706.3512 null] >> endobj 340 0 obj << /D [335 0 R /XYZ 71.731 655.3774 null] >> endobj 341 0 obj << /D [335 0 R /XYZ 71.731 650.3961 null] >> endobj 342 0 obj << /D [335 0 R /XYZ 89.6638 629.6388 null] >> endobj 343 0 obj << /D [335 0 R /XYZ 71.731 601.5791 null] >> endobj 344 0 obj << /D [335 0 R /XYZ 89.6638 585.8032 null] >> endobj 345 0 obj << /D [335 0 R /XYZ 71.731 558.1171 null] >> endobj 346 0 obj << /D [335 0 R /XYZ 89.6638 541.9676 null] >> endobj 347 0 obj << /D [335 0 R /XYZ 71.731 539.8108 null] >> endobj 348 0 obj << /D [335 0 R /XYZ 89.6638 524.0349 null] >> endobj 349 0 obj << /D [335 0 R /XYZ 71.731 521.878 null] >> endobj 350 0 obj << /D [335 0 R /XYZ 89.6638 506.1021 null] >> endobj 351 0 obj << /D [335 0 R /XYZ 71.731 503.9453 null] >> endobj 352 0 obj << /D [335 0 R /XYZ 89.6638 488.1693 null] >> endobj 353 0 obj << /D [335 0 R /XYZ 71.731 473.7784 null] >> endobj 354 0 obj << /D [335 0 R /XYZ 89.6638 457.2852 null] >> endobj 355 0 obj << /D [335 0 R /XYZ 71.731 444.2342 null] >> endobj 356 0 obj << /D [335 0 R /XYZ 89.6638 426.401 null] >> endobj 357 0 obj << /D [335 0 R /XYZ 71.731 424.2442 null] >> endobj 358 0 obj << /D [335 0 R /XYZ 89.6638 408.4682 null] >> endobj 359 0 obj << /D [335 0 R /XYZ 71.731 367.4571 null] >> endobj 360 0 obj << /D [335 0 R /XYZ 89.6638 351.6812 null] >> endobj 361 0 obj << /D [335 0 R /XYZ 71.731 310.6701 null] >> endobj 362 0 obj << /D [335 0 R /XYZ 89.6638 294.8941 null] >> endobj 363 0 obj << /D [335 0 R /XYZ 71.731 279.7859 null] >> endobj 364 0 obj << /D [335 0 R /XYZ 89.6638 264.0099 null] >> endobj 365 0 obj << /D [335 0 R /XYZ 71.731 248.9017 null] >> endobj 366 0 obj << /D [335 0 R /XYZ 89.6638 233.1258 null] >> endobj 367 0 obj << /D [335 0 R /XYZ 71.731 230.9689 null] >> endobj 368 0 obj << /D [335 0 R /XYZ 89.6638 215.193 null] >> endobj 369 0 obj << /D [335 0 R /XYZ 71.731 208.0549 null] >> endobj 334 0 obj << /Font << /F35 74 0 R /F33 70 0 R >> /ProcSet [ /PDF /Text ] >> endobj 372 0 obj << /Length 2307 /Filter /FlateDecode >> stream xÚZ[sÛ¸~ϯðø¥ÒŒ¬)Q–fŸœÄñºMìÎFÛN· I¨yQ2Yõ×÷8¸„|éd&$A88—ï|çÈÉÅ þ%×Éôz—E2MÓÙâ"¯ÞÍ.öðêî]‚S®pΕ?éýæÝOŸæÙÅzº^¦Ë‹Íîb¾XM³ù"ƒµÓÕìúbSükts<Òº`ޝÒl6º™êëÝÃoúæÓ8ËF|<¿QªG>6yWѺ%-kj=ô™å´tüïÍ_ßÝn¬XÙüzº^ÁÞÏÊngE¤Ÿ{Òã—ëåt¾ZeJøŽ“d6j:-FENú†Þè‹ ¹DgmIqÆåm]4\Py"q9уGÞŒ“lôfkõ5oàà¬ú©nÚ«÷úa;Ng£®5›¸UõH³Ó×SÓq}÷¥)سY {€â@WI:]gÉBíp´dD¹°‚oñtßÇi6"œ5.}$¼eT\]í\šJñÿ$Õ±¤x$öЉs¤¿áT®û©Ëœ…ïÚiͺA«÷ÀáÁu·”¢¸ähÔ(ÿ3Š4‡ uìа_²íÇp¾šý×ó0³¼Ýžtí¡áLz¡[í¡_TjµfîksXbuQ„S+xà<]½Å¥ŽD²§ýõ»#JÙè«”#”îÇX.Ï Ñ?.û‰ƒƒ]}ðô†ØŒ¯YÛ‰Qáÿ!Rš½FŒ÷$ ¤ˆX+"“ÙÆÚ‰!@öMÉDÛõ±QDV yq¤žýÈA8{¬K´cSÓg´õ*õÚ·+Â"=%iˆŠ¨òÌŠÖ×¶Ôú\6̲™ JÞtûÎåœÔ{?Â+RPó1|–ظƒ-Ce(L<—ÙvZË >®RrJŠSÌ)X—]A¥‹Lù\òàü0äá;é‹¥­q,YnRÝ‘òŠ —~v¼©ÜzO÷íKt[ˆòdϳ£ÂȬ™Ê¦ý2„ïØE°i0¡yÞ¥‹&P¼ 9Hñ¢OsÔÃ~wB…,섳CUÔàO¸ªtýˆï¨cäÚÕpV?%7¹åmÿƒÄ‘ ú@ð<„F²d†8ñáñËûû‡û‡;Téã‡ß¾Ü>l¾¾!³æMµe5}Ö8?X‹8§bÀXLOÆåKJ„9AWÎíN"S,«á•èÑË£„¥Ç,¨Ù­Xõª@шjRÏâ,ùtqcQöLFÔ*õéSYž ‚ûZ"ª¡”Ä(ü«>—ˆg6D7µ¨Ö]€–@Ìö°?¾¶vBÜîj§ÒÁ 7H ËQ;NFZé»Á¼†=±=¹r«T¢| 7Cô¤Ÿ”åµF[Õ„P /ŸG)o/Ç·ž0ü)µ`Wžz¥E™óæ(¿<…æ‹»´Áª+[ì¤Y+'ålˆñ1Áa|Š y¯ ¥Ü€º¹é‹þ*YÝöÖ¯1a#ÔFrfÁvrÑP{ÅñS¥')wÔ`ÈZ²oJr”FtöÎlj®fß:ÔCEa©Â Öhfø¶ñ(AòÔHo?vç¿§6­ÚLr.'¹|îÖ3÷ŽÉðõSݨ’²žô³-Mb$C½Ô]µ…}2ë2_Œ5ÎÙ™ÿéDërÆ é §ìv®¢P(+OwopÊȪ}ÐrÆ.qèˆ&â{…Z‰ÁÞÔÇþ‰~…,5ÈÒàšx9¾pLÞA¿WO—¿€^~ºÔß±þÖIИ€?¤AHdR¬´ÏË©5}1¿#ÍÏF½è Òט vÑã<¢g­`í›Üx-ŒíûÝ!Ww¿b¹v\~¤€±š}‰Þp£Î”Æš–IüYÉý~Öô2–¡––»}þ|ûasÿøð«äOocq‹9f 0n冉ñŲ´„aXFC£Ï1A§Æƒæ>ëSŽYà<$}pë“>˜â‘>xiZReHô2¤”L¯™Ú )ât6Y]h–ϊΠ$d3FÅ éø  :w…}] 0—‰%,ÎrBc‹IÚû¬SiPí:CI!b˲1íAg7Pf§Á´gS†6r:QK !‘ùn!*ã-ú€è©] êÐaÒÐ:òÅÔyŽ4¸8‚Ä[º~Ø£àPÈŸµKÑ«T\•ì’?Z $gHOh¿ãÜ÷AC_QÞô,±¸WK¸ ’¼‰ušï‡]?§7ãFMáÙ{>õr,¹JÆ‚Ʋ¶ ›«2Wœ*röÀù¼»~̀ܘDèAõF2ƒ»»_oïnT -áU¿ùý~ó Ò‡‡·¿…ÿ6øJnýøëߢ€{cK—#+MM«º|ð\Ún—-gÀa°e!AÈo›ãD¹´‰š r PKÒÒ N¯¤òw#Û;ë¢ÛÝpSû™"˼7‡!q+¥²-Ô…üÕ¶ñî:¸<J–9Tq»jbìHEØdë·¿‡º]Ÿô\Ïä…ŽÓkX‰g9ŒgzÏY^‚,—„U´Ú>³4K¡Ã~ÂT°›]b:ê£éÙï½€k©O’¢uS4ºc&9ÚÖ^¼Ø´Ü]aéfû›‘I·úhâ5b ^s”äžxVeÑ*iK-ˆ ·žôk#¹³ã¶¶Z€÷ÑÅ©â„ç9zü³^¯'ª¬ ª¬?ÊÀPðÓŒpú­cܶÒ×Nk¿ÃÃ\_4/X+ Þ–¸“2³ÞZà%[Þ’º1¤ï}{é/q+ÃG'°g€$lÄ|ëo‡•¯÷Šíd!19£ÿ¿ÈêV¼å§¯Á/D~ƃ·”Tèçà˃îÓ §¯1lÈex\󓛌QW‡õÝ8à”ð—O@<©íÖN¥þÿ|`±š®’åúÙ¿¢ðæ ÿˆ"KWÓY²^Û•¤š’äìß>D6ü®9$Uendstream endobj 371 0 obj << /Type /Page /Contents 372 0 R /Resources 370 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 318 0 R >> endobj 373 0 obj << /D [371 0 R /XYZ 71.731 741.2204 null] >> endobj 374 0 obj << /D [371 0 R /XYZ 71.731 753.1756 null] >> endobj 375 0 obj << /D [371 0 R /XYZ 71.731 706.3512 null] >> endobj 376 0 obj << /D [371 0 R /XYZ 71.731 580.6576 null] >> endobj 377 0 obj << /D [371 0 R /XYZ 71.731 549.7734 null] >> endobj 378 0 obj << /D [371 0 R /XYZ 71.731 533.898 null] >> endobj 379 0 obj << /D [371 0 R /XYZ 71.731 477.1109 null] >> endobj 380 0 obj << /D [371 0 R /XYZ 71.731 407.3724 null] >> endobj 381 0 obj << /D [371 0 R /XYZ 71.731 363.5368 null] >> endobj 382 0 obj << /D [371 0 R /XYZ 71.731 345.6041 null] >> endobj 383 0 obj << /D [371 0 R /XYZ 71.731 299.7112 null] >> endobj 384 0 obj << /D [371 0 R /XYZ 71.731 255.8755 null] >> endobj 385 0 obj << /D [371 0 R /XYZ 71.731 240.0001 null] >> endobj 386 0 obj << /D [371 0 R /XYZ 71.731 168.2043 null] >> endobj 370 0 obj << /Font << /F35 74 0 R /F33 70 0 R >> /ProcSet [ /PDF /Text ] >> endobj 389 0 obj << /Length 1831 /Filter /FlateDecode >> stream xÚµYMoÛ8½çW9Ù€£Xþv{J»NëEš±S Øî–h›[}­HÅͿߑȡ$Šv”‹É9óøæÍ åvðçvf®3Áeì:Ãá`Üñ‹Ag?}¸pÕ+5æª:èÝæâúv4é,œÅt8ílvÑxîLFã Ì5væƒYgãÿÕ½Iùìgïj8toyýpÿ(ÿ¹íM&Ý´7šu)•Oþˆ½,¤‘ ‚Å‘|tÇ<qÚû{óçÅr£ÍšŒfÎbkŸµ]²X?ªX¯|œ.¦Îh>ŸÆÏ•¹›‡›ûõÝMÏuÝîfõù>·f¿raêÑP:ºéÀñ b9ãòêÅg>M©/ü`‘zïä5Œ}ö}0zÅ$}ùÇòúgjy–ÿøŒ‹”m{ÃA7 @QÁë“‹ƒ±¼Ë"°Ì!hríæÐYL\ ÎÅ©Wº9V8=Ð$ ‹öòvõƃîSo8é’”\o-_UÆ™8œ2<¥ÿf,¥êŽ'Ôc$7 È8×&ìÒ8Ô>°aOz.à–²ýA-~ˆð–÷ë¾ ßާÀf‘dþ‹(ó8Tcbe ‚W”GÄ÷Y ±ˆŠÁ)!O=wÒ¿¬›.CÇôöcÔ–~ÒÃdg± HL00’å¦qnõ†‰‰> ýuøí0,£}ÀøÁFÜ B/XçèÍ’$"h0¾Atð‘}JiI[*Ž”Ff,™¸Èoå…¹³»-ûª¼èÿÆG†ŒMRšD²„N]ùæÅ‚ TÉåçÕ}.ƒç•ò¥¢XÔ£¶7tû¥,îªx¶ j~b¬YÑ®{4wû§GuOxõ9xÎyð|Šª;\°¦žgwDÁtåS©‰c° UB¢-î¯Ãâ—¡ÀxÊÇÌïD- A2‡ÀeDíÙgyæžá‚ÈÊœB„¹4Kø}ŒsÎý ‚æz¥,KH*&†ãA¡u ¹ýr4f²r _£ /Ì‘öõÍt¢•¨ýF›˜if7í«$+µ‡¼LÀŒ~½bÌ®HWžy () ¦¼î24É‹Ã$Ñ÷¨5¤ÝÚ…ÛÇÍãÃRe÷å×Õbz-o?ߪ°ÿ¸ROîVï—÷륵:BÞݦXè­ã8æä&)þ–έÔòä,GÅŠ Z+A tŠqìlF4«Ð´EõYò²ó‚I¼(5 üU‚gPšäêX÷É¢ ›Û€†¼hP {4ÕÆ±?‘¼¹¾>‹}uöQæÀ+î¼»¿F èN\;6‚-‰÷r¤–EõÙWd"2󼀚6öéÒ¶±H”…[€º,ÎÝE1›Wú:àuíC*Ñìeùî['׳½Uéu©KÓj2‚®2ᥙ€`hc±&}C%­§lJš¥á.)ôZ£щÈÂ/`’¬‘1s³2–ä'Q3Þm޹Èey« A¥\¸ê÷Ád 3ŽFª¥d'`€«æx6 )„ʆ—´´'ý÷WÛW`¶{®yŠûç‰×?ÕVy‡8F^"à«Ö*ƒÿèViÊš?UñR–ŒÓ³A©KʲfòÕþpÛ"›Þðn773$­¶ïg‚÷‰FP<ˆ°u}ºBm£µfkT·C—› &¨| … Õ°´úzºZu Œ€[…Ñ?ÇÁ;Ñ<a"À¬JöôMnJqj4wÓé8?5*Îf«¡ëLÝù¢°î}Ó”œŠ^I·oË›l¯GPI=ª;Ù<}ZªpýbœqèT ¥. Ït ¶@¹Fž©NÂàÿÊÃ!ð|2Õ‡~­ÂRV-šÇj¤»Žk¨´ÕeC~#ÌßVN«,žë[ñl©æíÝj½Á:z¹R<ج6wËu¿q@VšGâê½ìI« ¸éͰ'Öš»Íî®±Â;âýxy –å°ïm¥­6SºãŸP‘ÚY$P+[5öòU ¼ttˆ—ÃWãUíÅLzF:£¸#ú¥ÐbqVîGË9..(1N”9yÖ;r<0¬’ã5Pž™‹”UƒEƒ[xÞŽ¦^7Á9ï/#T.ß"%䌕mã'2RúŠÀ±Ö J¥6%†b:±HWhh»ìyñPONO ³§FË $'òQkå1IÂR>Þ”ðjEŽÙ\£Ú4°¡SI"¥wP÷AÔí€RÞÐãúy_yêAø©¤óF4Ep¾§d¶„ƒ´ø¤ ç2™Y½ìNáU“óc•ú¼4ž;swº8û•­2¦ù‘m2œ;w±Ð3Ç5Ã“ßÆ, þ$†¼endstream endobj 388 0 obj << /Type /Page /Contents 389 0 R /Resources 387 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 318 0 R >> endobj 390 0 obj << /D [388 0 R /XYZ 71.731 741.2204 null] >> endobj 391 0 obj << /D [388 0 R /XYZ 71.731 706.3512 null] >> endobj 392 0 obj << /D [388 0 R /XYZ 71.731 606.5605 null] >> endobj 393 0 obj << /D [388 0 R /XYZ 71.731 590.5654 null] >> endobj 394 0 obj << /D [388 0 R /XYZ 71.731 531.8407 null] >> endobj 395 0 obj << /D [388 0 R /XYZ 71.731 515.9652 null] >> endobj 396 0 obj << /D [388 0 R /XYZ 179.3565 477.2104 null] >> endobj 397 0 obj << /D [388 0 R /XYZ 71.731 470.0723 null] >> endobj 398 0 obj << /D [388 0 R /XYZ 71.731 400.3338 null] >> endobj 399 0 obj << /D [388 0 R /XYZ 71.731 382.4011 null] >> endobj 400 0 obj << /D [388 0 R /XYZ 71.731 356.4982 null] >> endobj 401 0 obj << /D [388 0 R /XYZ 71.731 346.5356 null] >> endobj 402 0 obj << /D [388 0 R /XYZ 71.731 295.1448 null] >> endobj 403 0 obj << /D [388 0 R /XYZ 71.731 253.1508 null] >> endobj 387 0 obj << /Font << /F35 74 0 R /F33 70 0 R >> /ProcSet [ /PDF /Text ] >> endobj 404 0 obj << /Type /Encoding /Differences [ 0 /.notdef 1/dotaccent/fi/fl/fraction/hungarumlaut/Lslash/lslash/ogonek/ring 10/.notdef 11/breve/minus 13/.notdef 14/Zcaron/zcaron/caron/dotlessi/dotlessj/ff/ffi/ffl/notequal/infinity/lessequal/greaterequal/partialdiff/summation/product/pi/grave/quotesingle/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde 127/.notdef 128/Euro/integral/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft/OE/Omega/radical/approxequal 144/.notdef 147/quotedblleft/quotedblright/bullet/endash/emdash/tilde/trademark/scaron/guilsinglright/oe/Delta/lozenge/Ydieresis 160/.notdef 161/exclamdown/cent/sterling/currency/yen/brokenbar/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis] >> endobj 232 0 obj << /Length1 1630 /Length2 5412 /Length3 532 /Length 6261 /Filter /FlateDecode >> stream xÚíTeT”íÖ¦%¤¤”A¤»C@Rº`€af˜JR )Aº¤»DZºD:$”FZnøFßsÎ{Öû_çœ_ßúf­gÖsïkïkï}_ûÙ,L:ú]M ®µa{ê 'eà þ–ÆXfûÃ/yy˜À‹GTÀ#($ˆ øü‹Œ¿iþÌíÙäs¬b\«/ù, ˆ“GxíŽk,à˜‰ò­.èêYæ_â1 5 !ðwO9ü™Ý²ý)žÀI|m+£¨šÈª1î¼ÏÙüÁûýô„íco÷§®Ö}Üö:®ô(–Gn8Ĭáþ.étÍ K¼B¹–±*V#Ûc2DwìvžœÇR¾H/ÎÔu648õmJ÷~«.†߬·ŽŸoyœæHÕ˜zWî0¬üùÇ%–L/zGʽZˆØw.ÙÕ¡"M¥¢+üÇ"Ø>‰7ÚKÓ4Çi5XÇW©WöŨ®Æåp‹è»ËŠE±þ?ièÔu]‡ÄÖAõÂb©ûK,l]·z¿›Åv;| ¬w˜g;êØüx?| ¶6oìù^ ?(RPg8°+±î×èGÈ|¥x™×Ätò:­Ô>\«qø®ÂŸÙùè F?@Í1yßZ2“&eC©~þ¹âCÙÆ¢4 žo¶oá{‘!–¢ÇÊã3Vfî£V,ââGU%½w(Èäˆl‚¢ÕÞ>üê¶§÷²q>€.´¢ÕSè1}Òª|²_R•1Ó ÇŠ]û›†Î=QäWò–8šÎ3„ú‚r‡Ó_(¸eiR"ñGO×6| µ1pç|–)g Ž®h÷\ŸùHÇ[>Ì®6Þû:J€{ØI@1,ºMÌÆx²à}vöïI€@ÿ­ú´ÓÁ›:zGk8>¹D/ŽK¹™È‡ƒèÈ4³U“fp¹ê-Ù®—ìÈjÁ•ª‘ô[ž­¹–°Á)DÚg‚Ò›á…Ë̘Ó®êäà7Ûé ušΟ‚˜f{¨fÚîæÝyš/eso¾"*-¾¬t%uÍ,¸äˆ/o‘ûÜ9/”¸ºs1|þžŠuê+-ênL6§ÑlG0ήä -„.“"«-æ§x¢³Ƴ¥Z…a¸6MsûÅk§×Ú¹¹K%<Ì3rSOEâýqeX0â‚;Ýó *˜`йj:c+˜ ¾Ü}n›O?~X•ü¼Ñ¾IØ„µ œ!%‰£¨ÁÞÍ2Tõ_|$vÝ)}Xù¸»u;g£]"™éöøW°6òÀÙžÓk ƒ_³Á笇<‰p²ƒ!³\˜‰E›5äê>vePyçdA]ÀÞ”ÎôèávàýŽm!8 MÉDãî™cRwؽÜJš!ðõMüYæØƒÞ˕ߞqãR¬0ù²,ß;•r»ø¼;LrV #\{|•§¦“—o¯ 2)}{%žr±úíܯ·&Üñ™>å™A–c'&Cá¨[6j9™øÀ"Ï{hxæÚõ˜ 8Pnbžë:©ÁîT;¸w¨Rô˜h¹ÑO¦ÖûóᛎQø‹þÒ9xÚr›íÎ/¤nDJ¦x)Êά j9¯´Ég§ü&–÷‹¬ç7¡çlKL¸¤bZ¯%š€oXñiiõÍ«®æm8T(•‰OÒ·>Ô¸O’Úmö)»Ѥ_Øô`3èX€gjŽËž¼‡|OçÞeøÆïجWcj.$‰×³¥&ÿi0)‹þˆi¾ß•«äÜ•‘šD3×.U›­êà„ˆ8 ëÐUμ޺5‘h®E4l¸UWìé£D*ûø&‰}óòò΢ÈÉ h*—Ö¦j÷µ»˜äþ,ÅWÆÏŸhã\§‰Hæl‚âÔÓ“!­¦^—qwsU©z¥-ä^?ص(§âéŸè/{žâ•AØ¢ÙèÎc›%]³Oàwx•bOS(ïZQ û—FîYZûÊÔa.rObó¼;ße•SÇ•,S]x1.¿¹CÓrKw6 «ÛI"GtÈ_ö,O¼Ì)ˆ1±lȉï<K¨¬~xqBF®üÏ‚¿0àŠ2ö±:ù9ϺæéFƒ19³(5ßåÁauŸïf,;ww-ipÛ¼ °åL8]#¡¢¤ž¦Í{ ÏB€7’HÖ£Ô?ÃßûZý´¯‚3ö¾«Õ@v 'áçbˉÒajAûìÐ>joii¼Íbê#Kgü¦*ãËŸÏæV&eH²v²ie9>×–S¥§?$!œYH/`3npŠ“Ëà…Ómå^„ëY¦›®×YŠk·oùxÔ0ÚÞ.eGÞ¤PAÛw~ÒѯcŠ>,¼˜Bµ^4G>˜ñ=«YÎŽ Ø•Rë%Ì´47üV?"?Ÿ©©r‹l œƒ<¨R¤|M¯X*c“´ˆËÀŒìÚqŒ\eWò¦¬)W-K8°QÍì­ÐÔ8¸=†»l.ñPYäÑ ÉÔaKÜ-σûÒ¶#*CÂFD­˜K¹޺̑ž¹c ÅÐkп"DÕð¿!Á«¸ÝoÓ˜‹H+üö{•Ed…U~fe¸¯˜ÕÜ^Щ?µ"´o`R©ƒÏq‰E-Ò…\D8"7q%ú¯oˆ@)´¸yÓÕ‘F ªV:j©Ô*D9ÆàÐ#=šTLfcl€ÞB±¢¦ KMŒ¶>|£ý1¡]c/­öÉ~bõùé‹F¾ *þ‘­ñsp »CUôx·©÷3ºÙ3%ëS“Ö–2ÉÚ„Ð9ä³¢Ž ÄÕƒ¶ƒ•»«Þý…]²•ßtíZ¿RÈQÖ©¸Ñ5yŠq}gª3ÔpΗá0½2Ùg(®ÿj“£æIGñ`H¯?ò°ù ‘­õœ'…‘PŽcôÙ+c"éBÝàî>ÛÚWʘéÎ.}0ݾ†rin5*Ê‹çQ ó‘‰v+±}i%÷Dq;ïPŽ‚¾I Uæ-úá—/Š0=Õª€¬YÉ™~R6w›‚Çvê¸[åe*”ÏÍ͆wÉ\¬ø[£Íž¶±µëc$ZºRŒPA?¯ùœÝÉ¡hx- ð‹n.í ð˜95¤ýøò–u‡¡{ ÛäU‹íø¾·R¤X¸½ä´¦ v>/QÁ…ÅzþÓš~»*%-£U[[ð–ù8y©}Z)íç8\—Wú†ç°Í§Y´í›#¸:Kl µBµP;yÚhÂrÛ4¾Ð¤Õ½`‡3ç]èã Fp/ %åŽÂ*Ïs͸ ÙŠYPcн[Š.©«÷sç'Ÿ«ã½³Îv§aÛÞ|yætÈôd#jgtÿ9[ƒpBx|xŽçù3š:ìÃco*±€ÛQdåøö½ù™ÉžƒXQŠÂÞÓ·yÕ>K5ÛžšQ732«·ð—À!ÕœR¹oFçÙEI"®;jQÕPH|æ‰÷| jv¨À˜Ù`Ào… ýÀ<¡8ã´¥qhCY‰}YµÐ\Mîµ”m ©>”7h`±zvThh“EKo;LŸ}ÊðÐ}}Ÿ´wêaåG)3sÇ·ÿD¨1Ž´cN½!(’ö^p€úQSÇ*±ÇV™šò™ä©}ÞÈÉý¶P9ä”Й¤µ‡‘Ž\¼÷8•ó‚!*OÈ4ê‹§’çëµ_ôýA¾J°/†=D[æEÅ‘ªŽXµi&®JTeFÄ«[QçORQÉiP©.´=!BgÏí¸•Zƒ—W>5Õ•›£iRlbiþ9{Ô/IÿÉœ^} yêú0b¹UOýÞ7am6N&ûm¬É¹qÚÎ!>gîP7á+qSƒTdyU8ò‘ äñªKݧ÷H®’VÕ]ð\}L¼?9ʦ'z»t—,ó8‡| sŽKGˆâDˆë…róÌÁGÈoª>À\”š/Ôôâö[\œ<Æ QNínžH•F/éϼ:b¥T$¿O_E ç)Fac °”-¾¡‘'NomáSRó ¦¶-5@2e¾m®–¦(¼{§‡Î¬þ¦Ž-ÜŸaÚÈ|ŸbÎhJqÊ=ÉHùÕ;PßÚsl™W %Ò}åô¥_Ol¿+~ÞÒ Îô‘|‚á„¥w7Ü+ ‹ËCP×ÿ8ÒòÞÓ‚¹­ƒ°QYºòÇ{›{ªj *ózÝËmK“†îBGС&ÕVÉWÑO|4oðùæ.\ê‚z bmªZÏ-Ò.;Ï„ø4¹ÇOêÄqˆŠçMZª©Í߿ܗ“J ˆ»ÙP¥ó¤züúTÚ-ð[Ûã0èg¿šü†jvѸW¬p]~âÜ´óϰ½J9¸G®T±Á*n™’ƒœ¢´v&£Ó"÷¶9XÏÇc›•íO©x&šº\¦¦{ÛÈ$Òün¾«1“ßÈW³8FËU_¡ªfä[ƒ Í(íáµzmTš¿c­Šû.ƒp˜K¢œN;YØØÒ}×ë–e í7? ¿„ j'‡ÎxòÁ¥Í-šÃG _LJÔBHw)\ôÀýZº m4®âBï6‰¦,ŒÚdüGÊÅ»i)§Þ#tC· GÞôE¹¡'æ×¨,iRø–Lôx®çÃü»ð‚å‚¥Àd ¨ëÎH&Aäeøœ¾*µ•ú¹±”·/ÅTÀ¦0Ÿ£/a¹ kÈÛÖÝ„ çkq±ËN›á{nî8å;|Ä `¼d½²~~ÊT…í(VÅ/¾¦Ä ÓKæ° ½ŸÂZc1lÆk÷²è®èzÞ·+¹Ú¯¶(ò*…«¯Š)Û )®4ø—ˆìž$IÜo.Hê½{7!…>˜òšÚ:p/aÑ4A ×¥Üæc†¯fU;´Ñ@é=ê, e"›—±}Ïk$Øû‰ê…a?3U~®H|`§T¾=ÆM.t¶h ozÓq®©¾YjiW´Aåø´(?µ:.€@R¬=LG™`š&p”z8Ù†®±™Ú%®Ãsw+¤Ã“Ù©¡º8‹‡éó™ît>ÕWûùGåèe·/;ŒÒ¸Œ=²îO'XÀáÉÃb¶ôn•’ç¬q»ŠšIúü˜+U4™slt´VbSdôyC'}×ÊÒï)ŠRx$#{Ý+·&ïÜvª ë®ùDKRuB^!‰1¤™ Œ:€<&>2àE¬ÛªÔq–°”ÕÖV–ûqhålO BiÓˆ+ž3ÄÜÂ+áâ$yÇ{@v>|%.Éxæ3æUŸŒ™VR“‘÷YŒZüc¸=Š“2Ë«4÷hï„ìh!¢±ÙMO]6pbf1ö »^è«íŒŽ±©š,`.ï¼^*¶hpûaJÄtû¾KǬwÝä¦6&Ñ`ØxoL?˜9î¾ázÅn5KUæù¶‰^÷ƒÌRÜÐMì€g@˜Òý®\¦µŃ2\GˆšyÒ÷¥•küŸ1ðŪšáÓ|!ËBâ¬.©‹Ócnæ±/î·ÇÄÙ#ïÇ¡„¸¡iš ¹´Ú߃ ÏÕVÈ ·ÛÆ›_ûÅâyhI2PÚ-þrãºa)W\é׫N›ª)Qc{7§”ín¢bÚb£v"Hëã+W•9ŠÏ? À¸–‹8%ˆãm™~`Ll\0uÃ"\ÝË ô"›Ì¢y£/׿u¹#(T·×®ú ™öí.÷̬^$ÖÒ Ããï˜ü}ìQœ™8 •!ƒ1‚gÁBEBD²;kFŒ:¿K³Ðä”Ã3Ǧ_{º·ÜØ“3Ók•ƒù¡*2O©Ginb¸—ö°.åÅ»â{Ü—¥<(¹½u l‰#ä&©Ô¸sõe½],ó+oÿ›ïd{n#·È:±ªW¿—É~éæz%§è¸ÁÁâæzë=EôOàqÚµïëšGÔiéyn¶ ÈɆ›Ó|™™* ©nR¯œÀ¬ E.%è‹þˆ{Ä™ §qQÎùYÁܯ°Üô”îÚ$C>H‚{i#ÕËýhP@ùsŠÌÓl色˜ 2NA=r§Ò!AT’ì¾Izf~5]جƒÃ5”À¾@à'8í\˜î”‡D@û‘æxg 6NÁS/ü¦ÿg|™¹Þ*–n´Óå`—÷#(·ø´ð&@Ø+ì$lŽ®jOQ ¦{ùã«ê`9ˆ¯³àæFuü–O‹¶oI;±ÓNì뽌Ój¯|œ‰ãˆ—°<;¯ÕQ+Ü0 éW'¹‹ºï—ãßœŒ~K<­\ôs@ɳrˆÃæÄÌ· &tã ²ÎYÈRIXn¦dÍ v ‹Nne~t3œ«W”Ñ*‹ã×2Çü# O‰YÝ-Õ©§éiûO€‹ê't•ÐRƒÓHÍaŸ§€Ø¦ü±©…ۛͧÖ-ÝcZî8vÕûð$7í”ö¿|…uò}3'ÿ"ËÛ\â({óeŸPTܲ¢Ã²-ZÖ²pQ flõý96– žðþVÒáƒ2<ÑfÌ&•­2¿•36Ö(¶ÛïÁómA” ÞÄXZí‡z£.R½Gcó1 嫉¯ã޶ù|}Àm—Å‚0DÇœõ‡8†³‹ùŠ/†B´¶f±ÝÍÔ 3Oº™Pï/ìÚJf㎘r×i¿@bª/SŽäÍ<)#/Tº©´T¿Ô{!ok¦rˆ T•JlêÏã ្·È0Í]\Ú‰'RmÙ™0嬉_Z5Yμœvªg4»Hy£9¸c´é¥'£—É~é7sÁ&@>ÑÙy˜Ç=Æã¸å…eþ JÛµÔ ˆþéb¬xÅ{­=¼?^h_¨å˜üà} +áÓ%Ù,J¹xûK,Š—7¸âu÷ð*+ù^¥•0ï¥À„Ì:ƒ›‹ƒ1Ì¢œY?>~Gz•”ÉpzÏV\7XXª¦bv6aó…râe{¾¾Ä ² ùi.Ö¤JÀ’-ÐÚ5PÁR+*#ª=ÐÉÆCg™Œ1“_ˆŸ§…yW´^¬Œ‰FK“”¬ëÁç]¹[†³ñi9n‰¼þÎû”8?« LLÞòÿ‡?Âÿ'ø?A`(˜3áDø?ús Oendstream endobj 233 0 obj << /Type /Font /Subtype /Type1 /Encoding 404 0 R /FirstChar 95 /LastChar 116 /Widths 405 0 R /BaseFont /CCQPML+NimbusMonL-ReguObli /FontDescriptor 231 0 R >> endobj 231 0 obj << /Ascent 625 /CapHeight 557 /Descent -147 /FontName /CCQPML+NimbusMonL-ReguObli /ItalicAngle -12 /StemV 43 /XHeight 426 /FontBBox [-61 -237 774 811] /Flags 4 /CharSet (/underscore/b/d/e/i/l/q/r/s/t) /FontFile 232 0 R >> endobj 405 0 obj [600 0 0 600 0 600 600 0 0 0 600 0 0 600 0 0 0 0 600 600 600 600 ] endobj 188 0 obj << /Length1 1166 /Length2 7525 /Length3 544 /Length 8336 /Filter /FlateDecode >> stream xÚízU\ëö%n$hð4îÜÝÝÝèÝÐ܃»î4w ÜBp‡„!çüÏ=sϽó4o󛪇ú¾½v­½÷úV½–.‡´-R€BÜ8x8¹E`g ;\עơ²w<ù­qôÀnN ÿ€YÈÚ …ÈY»=àzîukà7€‡[„[H„ŸçaÍÍûW"&Ђ¡Þ-æ†<@rPwgÄM×ÝÅÅ ²ÕÁ¡î0\`÷ÐÙVÈB]¼``{7³¾Ž! ûßaaaÐë/ ‚ƒí!Ƈ…È êò»Ò…"‚=4mû;WËÎZÞìö{\³ƒ››‹—‹5è!Æ ·ã„€Ü¸X•‡ØÊBÀq~k&†l†òâú§nލ'Äç?Âv`ˆí#Ùº»péCÀ®î e¹ÿI~áü³¹ø¹_p s¿€\ W6\¿Kêy¹€þy~‡­!¶¾>.P€µä ¶=Prðò8^ñ?8åQ˜Ÿ÷ŸŒÿÒâ/þˆjYƒÿ§Oî¿)•!vP€ðŸã<èø×H üÁ›æ?lÌøw~ ¨Ø`þÛ:fÜüÜ®yxðüWKýþ_õÏ îNN¨Âü§€=à5ÀoEœ¬aÿ‘ní vòú//ü3Ñô§ûÿ<ÊnÖN`iˆ½Ó¿dÃÀ¯@¶Z`7‡?íò—ʶ|‡ -(üûKpððóüÓsÛ8B@pøÃYü ¶ÿ()±Ú‚!ö]·WZÃlÿø Û¸Ã`òüq@ïþµ·?4½ÙàÌÏ@mDƒ_Ö¼ª‘¦ðäØáíп¸w·ㄼΉҥAêøž‚ïݹPr¶œÖ ƒD•)ª:*rh…|Œ §£°L;'&aŠRù>g½˜†îóØ1w7y|4ijWŸÒ!Mù…1ƒ„ì0n(”ØŸêÊd{ÇUƒ‚º¼ [sg†E˜ä&ð@SÉÉO[cêK‡÷ËÀ°ÔG*ˆ¦ñk&“GMû—„•íVÓ3=2xüþS¡Š8nuG@ ã÷‚"È7emv75_\ øUxÍ]Ø{ QM³ÛÑóÙýð1{KcÁâÈRÖ›û«Äèˆ`Wˆ¹¾GÒú:.OŽ6Ôh ì+§§µ.¨»U<ˆxWêÕõ?EÙ6ÄZ>‡´Úk“¯êñ5_ê·ŸJǯw/êD?ø.´‹½zu®ÜÖÂÏÿtÄeˆ¹-~1Θðf² Tÿ\ô”HKGÁC±z5*ÛC²jãl0KHßáÀa¤×õêx}HÑ È·#1É+ϵɅÍÓø–›ó+ž¡6_¬ŸîT8WS¢l{ÙŽŸÒÅ€~nÿyE[(›}ØC_M¹Óm&C ¦Ûò„3Á'í›@êø un°ðiŠú—« Ür“µ/˜ÜIVG©eaíÄ ÷™Ï lRŸˆ·<ù„ýÆe“{x“¼Qûj.tjøú´pNŒ]v!)Uω$˜y3§5]¤â%‰~F€}$ŒÏÛ§óËFí¸¼ ËW‹ùQ °( ÜÞº*9toÓœÕB_Þ–{?¢0¤—á,>ŸÝ)ÈêÑVdÈøŒ*‚kDÆ^ÊUˉ}Š}i‡& @&2ÏAçp*ïùyt‚@àƒÎ¥†À¨jCÖBþ!•ueb~«ÌûG,² \ã ©ÊÖœˆþ°;àÏÿðs ÓNÃ9rË.à4@/EÓ¬»)™Ù£Ê@†âÓ½•¢b·jGü}Ù£–-ÙQ+k›¿ü¯%$4¸ Óò~q­(5\ÚÓª¹Šdâ·ÂÎJò±,GpsE“ey8¿Šérˆÿ4¸_XðÕË–Aíó-õd傳/Û›¿ èŠù¬¿>FüÒÓ真µmCu0u6H‰p5äIÜȦlçÌÕ]A™½´–!컞 c‹ý)…/2Å(ø7¾ñGB³õ¸~}en~uUìõC_¾èá®­Æ¿¸ÐËZHm»>ú*“õ¾ß¦‰E+D¯¸'£l»;NûK⠞ϰ¡¸­Ò"6Âÿd¼«|Ÿµj”µ½þ)NÓfÐÎGÜLz?JŒ4" åÛ67u?ñ>ƨsÚ¾àÕŠ Ç+É*Ú¤7ö¾„±šjå$oèœHôVxöü±*ÃÛV;ÈJ*‹EV>ŸX‰Öë8 Ř¹ËÏOçj3U¦¨;.„ƒ¸ª³Ø?á>Ø‚SpùñD.Cí ÒF°ØGùK‘6YÌ+%{Q«·³ß¼>7.í¡÷wÏܹ<ó%Ïy_‰Å]'oäÏçºüÎëà¡Ó]0´¡þS¨³Ô¥šx6ð¼µ÷}¡;Ÿèv Üê*Y[‘4LXhQsœ¤ï‰É،ũÆ{-—ã‚îsÞlÌŸE‘á!ã¦㈀zà«Q¢"q?Ê96áa½¯ÊŒèM1N1×û|µËˆ4öá=SygP‘õڨ¯Ϟ²Þ:ZMòZléz~ñ]æ¡G½q³·9Ú+Y!½—¹ÇÍæóy-{#êÈÛ-UH™é?ÚSYŽ(Á’_…Űgõ,Ò;ßµÍlHÉŸˆœ EG©s^¸1ù¿|±Êêû¡k«ÜÏ7_ìc¤þ¼B‘ˆñí³X£gÔU„Jã?ýC«Í;’nMA3W+dzÖp{ *¸µ+kèê ´¹€kJÙX.‡Æ(óT—Ú`è8k)P„fj¿ÀQ¿Îe Mð]lÜ3Z›’ aôÃKïkdïY¸ÅsÂçÚ2Ïé_˜Íöò»Ä¨\æEÃÄèsèÑñq” j*S])-]©šµžÒ}öFdt݇‰YÝk^Ëi—ð†šMÓ&c¯ð)fzA¡úasecßððÍ´§ë1}d– ø[[bÒÇ„»´”­–r¹ 2ìsOÚ6÷ïÕpyÅI­g&¯º0/yšWÛ¶ŒwÞÞ¤R—+|ü¦üñ§_m¹ú¾ï :.“‘‚ÆEÈ9úBî%è•á´€*•iŽâ*"a’ã[b3%ÃòÁ÷B þì•bô¤s–{ƒ¬”všæÁe¦c ‘‹™!Õº£»]„$~qy0–N_ÚÖÚLãøgŸkòF¼+‘þÃ%K_aô_O ³ÕŒ¤øiˆÕé+µ%Ê(G°÷\L0ò›°2Lгuubümu ®'îH7ɽ0¶®ß$”B~ÁœtŸD|w¹ðcåNšöš«sžáÙ™ Û€ÌÒèc.HŒ1›IÊÓ”vxD1Öœ!qe0h8®înû—_S)î@ÛÙ>90ßx¢Ñì ^Ü­äªí'ËZ«÷xQG?»¦Hæ àR{èÈ^Š-øˆÜe/Ìà&nmü{òq•‘{ @8MÏü³ü ÿ“\Ú "¶ºÍØìùCŒý+)n›• / ñ]J"žü«ây¢fÚÉ MhÎl«s°ÀÞt$8Šk‚íh 69â•J,™ÝLÞ$´ßû–åëŽMz6‘å¹Jl´'kÁ/Ð XïÇù!ÙK4×>]³î„çÑÙØcî*z,æ‘¡‘âø5Ás3sì’Wœè~á+*~;š>Ü@S^îdb‡«Èý$øÐ>ìÀB¹z*YéIR¤ƒžvxÇ5’2lf´/™vدzÕ«k[Om…“ª”.>ޤßò¨2¸´È  œÇQÊé1&í¨¬€àðWw#•¥@±Åžã£÷·Éë*Làégda·³|Þæ.êò^ ëÊ$±v\}· ^³ƒö´ç¶»Ð²C´P:…Øç¤†ø ×cþ³1¤Eùa[ônÂZxnynÇ•Ž€G³VNI% þêùAìê2ͧsmÉQ`)ò=­NâxÁtú£'£(쎳#FdÀ/Ë;¬Qj#&´ýËlá͘ ÐÆQ—PPø7KFÝ>¬ƒî9ùZ.a÷Þ½ÛÄE]hâ+7Ss¼ºO ¨3Ko3?^®ìw̶‡òˆ³õž‰¥y÷%Ó}’<¨>´FtqF’yÑñÄDû]ùŽŒw*ƒ(Ç顦ɫöû}͆F;ñE‘gÔJÆšÈa@‰;]Wô¶× *BW&¯ø—$¸ó ÐÉÏü¹Å±Îû¨{\\¥G“³;4 ÏynóFŸ¢I«ÜLLO–^šmPÒ BîŸͯ Çx Æ[9„KŽÕÝøˆ®ØV§ØdQëiwéùcKέWrnOïeÉMØÙ™àÍýJ rŒ©mýá…%dÊqþk•ŸÕNRO5f$…,UAíâuq–³êEÙTª~ ÑN“"Ž É¢ëä1v¢jR±^‹vY½^Ùb8-£é%h)›ÁîF¼çã¨r±(ÞbŸ…ki†çVvò êù"£ur¼”‡EÃ"°ÆÇ¤Ãéy:šÅ² ÅéœÆ==èQVí'éZùÕhœÍ´ urKU꯬âwƒä.™±$-DZyC\/vý(‘Îñ Ï(òP²H)¶p_Ê­z=BÖÌtèôFì‰8žR,¨[ƒ¾àµzÞ\²tzØs`%h·¥wL³•zÆöF}œGØ \/Ïð(ÕOS ¤cr°&}YÏ“’m™ý®iž&úKvt#”0ÿ@­“^»´:¿àR®Æè<·Ÿ\+¥YM“ñ* B‘#e%øèôø„v!*'}×í/Úfäl˜¤¶@tÂ/¿Ô˜Æ©6°Ý ;˜ö×(J¨yGàô­hî_Õ©ù÷üZèNƒî~v´HóÑ3‚0}¿:X¦Î a0tËSœéþêe¥inRzÆÄ]=ÂoÖÈ;ÞUeézÇÍx ¤X ÚÛ~‘®ÞlÈ’Úi%tæò:yõ=žº%ÇdòõÔÜ]‚¸¯a5ïS˜)óÙªê_‹¼ ¥f΄N!2ž Ä_ZxñumK4ÃE®í y¹·D4SN&ÍíÉÛKZ¸¬Æ+3—Ü{?×SøŒˆB€û’õñè²há3 ?³#”ÑÀy¸ýË»†ƒ¢ýžX£‚z”Û<Ç„û”skz?ÊÀC–&£|v½¥íóšSéµNN>n9_YÆÛèÔkë¾ô-Öƒæ°ZÝ\!¾C…õ4ƒ`sÖ˜DôÃLôDœû±1TZ¾`ÅœEÊ<:–WæØvˆl›§¬ó‹¾pÉcJ­JnåB‘M6A‘ÊK Õ>Ð^Wî[|Ú›‹WiöïUàÞáíñ2|MašÖloÛ#Åòl+L¦YEVkž¨,/°¬žŒQ}[˜öÜ>³Ÿ=öy¹#bËcÈP@µh‰)Wó­Ž{$o³ Ï ºÃÜ¢ Ç·ÊÐÍÞawŽ"AÁš'<1é{q ÊŸ--«j…æîg­¥†X o¥ûŽš¤ 0oÛ+ªMÄ6¹á½ ¹QÆÎÁ‰™ÊçÞŸ½ JYT²ªœ ¦ÈÇzÞÝyz·9îÁÊ燖qh$~"“Ýl½v·³Ìõo¥Ê nË(F¬>Ä4Y_ت>ÞØæLëÎ"ão}‘„ ¢ Zè ¬äò|¿ ¤XÜ¿iµ°ÄfæLq»Ú‡q‘âÈÉ…ù¨«‹‰Œ瓤.:}…QF+[¼¹Þĵ×&–E1Ê]ST×e¼1/º oz[ôÁ8ZÓ#­¼Bc0hÝ.IÿL?É츟ÚnÖÂà U—Xx¹ ˜F‘{" ¦¶‘ÞÖ"t.”ßÈŸÇÒó•_ÑôŽ\ W‘–Ï 7¤GÃYéª)jôKE’^·P‰sÓLÔ§^´@¬óˆ[ï¼ó¤êM³‹¼“ñ›Ð[úÅ+ÂllµÕbŸÄðŒÂÚŽÀ¯ªõ}ñøð0FŒörƒÈÅù%¬—L‡•3kKÛ{8ñ¡ÉUª¯”Ÿ¼>y»Àéïá-$æµ²Ä=Ûf²·:_>]‘ɬ^_Ýb»ÆÇH/`3 0¼ý`âô…+ÉÓ–ñPˆÎÓbý6&ï*B!¦¬GÜ`hm÷‘|j*°Ù6#¶“vDl,õTko}±ÏÆ•Û|ðÇã¯hxgßF+8€"°‰Äø¼l~¬ Ö¾¤‡u!ŽP…ÒÛ©E“ïš³e/ ˜ rÏüCûÊ£³ÕÙŸ[% œåØ-䉡œ3®Ç¬£—”LÉæ~·ém¡p[æÜ•i‰Ü òöšð0ëØ-;ÃH§v€Û-æ%æñ[’U /jç;÷-ÓÕ0Ýd²ÀWì"öŠW¥“-FwÑw#íÈôø†I5BжŒÚÓf>DGL•¸óPÜUÝÍ´ã@Ób/4K²®a„ç¥×YŸû´f5»n¥qþÏÞœw¢ÞoÉí×ïQG†Ÿû«ÌWýÂ(É9‘©^c/¤8ù¶ÐIå W¨"3º Ru,’”*˜:žtß°<ê «" Çîy”ÝÑ''ÊÕèr£û@u*çé·£ÚÑv®œ®ÞݶW:€æco Œ%ì!PÄzÑ«Ãx£aÕ4¶#YÄ*  †è×ä jó¿¼Ýù†’ŒîaiœÏë=ñMÜeHQ5’+*Â*ƒo?iÄcÈRF¢ó;j^y¤UÊ¥n®>¬×Å–3x™ˆLÍ:Òá%kùLçÐàõÊT5ËÉÓ>¥!Ãþ[ §Êºoú ýV¢È†×(3…LÏ"©çËõ^»…ùBNZœ ÂËÅPbÓ¤Šà·ÒÂ_dÆG#T÷&¶¾Úe†Åì X8ßIã}B¢ï´ø¶½ãOU5ÉÊÀ›£}ùq“Ø(XýŠ†Ì±¶¼ê º-ŸS(ËêmMîb­é&Ó Ùn~`“-)ÙxÌìÚ=[Üd¥×ÒHôõÅgedÑ-: n­A¶ ¿îÛþênDÜ÷Ûó ÿÑùŠPº©§q ”ÂÒZ.AµÓË'µl/O¯Ð4+«ï†8E‚1Þ³Š¯wtô¼Ôðd¥xÃÇæa”"¯²È'èv$T€àer^®Pƒë²»j ñëL/"g2}ºz pÂmƒœÏmWLä‚FÂcä¡PÙâºå=\…4ãEœ9AbTQé?aAvýƒ‘zʹú:×Zºö'œóy$8ŠØ›N×flÐ<Äל°7Ig­c-øóæÝ‹½œ]n›rMP¿<²8Áé‘+ÚÕ¤1¬\-ج£ÂU'Žˆxc7Üp  Ü&óòh¼ŠÃ€œawþ8Ö•°©\2ëHÎÉŽÐ=2œTÆôDÃñµ- bQ Xÿ`š/šNVúíº7É5½4´ŠA'Å.ŒNÑ$ÜÁá²±NõäúizêJ›7 ^zÞ@Ÿ´û,Ò‹§Õ|Yªi©íL¸¾Ç8Ÿ¬Ô˜ •^,F$Ÿ;é·›Õ5ž£µ’M¸¶>³—,/Ël!,µœ¿®¹Åù.ŒŽP¯ƒi¼Ïf]†{b\›Š½?K@ŽöÑÔrÅ5‡jS³Ì´Î-6¼sàkìeÁöQ¾ñvåR¨â§f"½š8®'³±í Ÿ9^méÅY>á)ˆŸ¶RÚl@lÌ¡ÆøíòµdªYxÜdÒ¤P©¨uYê¤o­EãÌ}á|ިɹüÉ-F…µäsëάâmÈul”©^–éE•±·\ óëõrÞÅöìn[•EÇ©Áì,ïm¼L˜0ž38åëA„¹¦s,œ½VM;iªu5(e9#´«wm.P·‹èL¢=œv½‹._×â¯_z×ô’L÷€&†hYv£Ÿmæ”ùW¥†ÏQì‡}æ±çËòù̉ºj'sþlÄx¢TL«%Tå.¬lq’Ñ_˜Óž(ÈFvLxž$úÅÿÜÌÓ·!&ËÎHÅÛ+»É¿f¬Ì‹¤•Ž®¼Ó 1Rß&fଥ Ï`—Ò®V¬RЩÌê¸{ÔbšG´é×fsQ5¨ÒD*EŠ”æwÎí¦”yò޵f6âªôKå·ËõW3E ¢*Ý‘¨'°Ü´~nL.Ûì^4¿1ãøfËÅ´»†×õl<m Ì¿nôLS½ë:Ô"í·v¿GèRŒ¨«ãNÂ7HòüBÆõœK‹Æ¬I—ŒZ±L¥î")Ñ?âÆ+ö¾Ž ¤?ËRŠºùs‘Ÿµº'ˆÃЏó3n¬lê\¤߆Ә¸ÆÒìêÄŒ CŸ%ä*Ho‹0ì†ÀÝÓé3Ïîožßuµû8QaKrwù E'ªçÔ›È^ôÈŽcŠc»ºæ¿_+üñ!>ÌÛ‘ «7äëÓ“„“XH‘ÉŠà¬9­Š¿*å !æ# Üì û&‰)’+£0V«™fuãÐ÷¶¯¯>¾×nºÉÂ’&Ê| –”¾?ÃT‰(ÚTÙ¹îí鯧ŠÿNþÚï˜rê‹2XÍÉÄKî3ÁEa²öY>S¨ÃlÍú$2¼ÿMIw>f&#=‚_¸{¬Ì“fwwºÖ`2pöé‡ù Ò ý§…ÝC¥¯W+u þGÜjÕj*÷K¹{ç}ö*¶ƒS-í†ï)Lò¤½€&LÈœ,z­E®ˆ™@~ƒñØŽÈiãwfª§‚¡®ƒí•5÷(Îwçú ð?§“з/Ë…üëÞ÷ŠgÔn&.@²¦TMU6i û,ÄäîDwfá0aqþ®ŸÛÉü¾¶mdr|½Üa:k”<ñ†h9jÄòyòÍäûºëü)B É ¬ðj]kT*6 8˜Ø:‚„zl±µS0Õué‚FwµÝ=kxKâúKfÒ ëµ©%Ñ£WYfàçO3.µ‚z©ó6%Ï÷8wàÙeÇÃÖx¬ri¹±ï *ÎÕïoU'úÊ>´k¤,ÉW#R«ñwðãûf%`¦¥âô¬uM¡ "y“âu ±ðÂ÷JFzx§‚qq‰¯z5>oV_kpwk^ùç‰×L§‚_ŠÝ™$)­Øk{úŽîð³&Ì/Ê?CÈ£gÇÇrº7ƒ¾k¯)’XÐK/££‚¼íg\0zU«øc7FõŽoæšr8Ÿïrÿ_^8ÿŸàÿ '5Ì êl sÄñànPØïßBpþ«ª¼endstream endobj 189 0 obj << /Type /Font /Subtype /Type1 /Encoding 404 0 R /FirstChar 2 /LastChar 121 /Widths 406 0 R /BaseFont /IFSRDL+NimbusSanL-Regu /FontDescriptor 187 0 R >> endobj 187 0 obj << /Ascent 712 /CapHeight 712 /Descent -213 /FontName /IFSRDL+NimbusSanL-Regu /ItalicAngle 0 /StemV 85 /XHeight 523 /FontBBox [-174 -285 1001 953] /Flags 4 /CharSet (/fi/quoteright/parenleft/parenright/comma/hyphen/period/slash/zero/one/two/three/four/seven/A/B/C/D/F/G/H/I/N/P/S/T/U/W/a/b/c/d/e/f/g/h/i/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y) /FontFile 188 0 R >> endobj 406 0 obj [500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 222 333 333 0 0 278 333 278 278 556 556 556 556 556 0 0 556 0 0 0 0 0 0 0 0 0 667 667 722 722 0 611 778 722 278 0 0 0 0 722 0 667 0 0 667 611 722 0 944 0 0 0 0 0 0 0 0 0 556 556 500 556 556 278 556 556 222 0 500 222 833 556 556 556 556 333 500 278 556 500 722 500 500 ] endobj 169 0 obj << /Length1 1606 /Length2 13319 /Length3 532 /Length 14172 /Filter /FlateDecode >> stream xÚíveP^]“-îÜîÜÝ]ƒÛƒ;Np‚www îîÜ݃ôò¾ßÌ|Sß_3óëÖ=U§êìîÞ«W÷ê½ëP(©2›Ú%ìí@ ,ŒÌ<K[cgy{;9{SÀ‡‘‚BÔ h²´·3yš@S€ÐÀÊ `áææF ˆÚ;x8Yš[€Ôê*š4ttôÿ´ü0öøwÏÇNgKs;åLJ+ÐÆÞÁhú€øooT ÀÌÒUTú*­  –TPHí€NF6%cK€œ¥ ÐÎH0³wØüc0±·3µü«4gÆ,ag€ÀÙhbù± èntøËEp:ÙZ:;|,æNFv €ì–v&6.¦ø°›ÙÿMÈÁÉþ#ÂöÃ÷¦dï r6q²t>²*‰Iüƒ'ÈÂôWngË7ÀÞì#ÒÔÞÄ寒þö}À|xAF–vÎÐôW.c ÀÔÒÙÁÆÈã#÷˜ƒ“åß4\œ-íÌÿÉ€à47r2µ:;À|`ÿÕÖ øOÕ98Øxü½Ûþï¨ÿà` rÚ˜1"°°~ä4}ä6·´C`úkP¤íÌì,Ìÿ°›º8ü»Ïèôwƒ¨ÿššF¦öv6S “‚=è#%€ú¿§2ãÿžÈÿ ÿ¯ü¿"ïÿLÜÕè?âÿéyþWh #ÛøÇø¸aìr€¿î˜ÿ+ÖÈÖÒÆã¿ˆþ×@Mà?þW Ò £6Û™HÁÌÈü£¥³„¥;ÐTÉdb03²ùèÑßvu;S “¥ðCË¿Û``afþŸš…¥‰µÝ_Mgÿ‡ hgú¯Ì?äù›7“¨œ´œ–6ݿަG)}¨Rópø öouÈÛ›þÇâ/ {w€Ã6+'€ƒ‹ÀÅÉòí¿Èö7 Ë?×òF 'Kw€ÎGÉÌ,þoï?Wzÿ#ngboú×”¨‚ŒìL?ë? ¹M\œœ>ôüû¬üïë¿Gtš ,ÿ²7á ²JIOÕàdŽ‹éôv³@;׫äùUÙwù¦„nq—¾T36Lò¼µx,œ8¼îÉÐîwcÛPu%/r ¿‘Ñôä¡­S¶qÒí0é#§žjþðºœ—Û„Òæ`ÖØßWVÑ/zù<ÙÆæwù@ãGæšç‡I~ï€âc’\ÕŽÚ†^“rJôpOÕ?248ÐuݳG@— OÁë …Láç˜E ¨­^îF»p6:nƒ-tÊlÞ5(Íu‹Í±ÊÊ»^>èöíçúHñ³*â½ò ‰Ë™µ“g@OüL·~\ÛŽƒeÉueÛ+¦dü¥‹Ì‰á ê¿{N 6’Ù¯šÁHi×°ÈÌžœHpBßá}$ßVñ6<ªˆÔØw– °Ž€Ë0…׌cujLy—YceÔ«*WrTΞTîŠ$FÄ ö ¬oÐÂñ÷(ó´ÔYÂ’ïõ«Î@MJ‚9F·¢vIu·û @ñöýÈ;QMÚƒz^UCŸÎƒGãù!•ª=>°‰®Y­!W -=#ंֆÇ8e1ÀЫº*õ‚3 ~IqGRƒ}×.+P½šÃœoõ€jþ÷vàÛJ-Kí[‹&#žÑÏÁÖboCØ·ï°Dš9È^¼¿ó¼ùnQã'ÌÎÆÇIoU¥ÑÇbáA5¾ä&Ðkíd!~Tá§?²Ôùᭆʲ-}Ùer97cJÕ|ÞzÆ,ÆRS=KV.°LgÜÕoMPýݱá^¹’D4§Âj‡·Ð­~{°'Wªó]èŽ/ôÿΨi8N984ÅÃ8æb›6DQ5GöIµûåýf–Z´ëÿ•µ’Šö6 ƒq+¤r Vƒ+˜i Q3¦k™ùá<ºõM‰Ý*F}¤smûò²˜”ðù˜¶ºBÇí3QBž%ws”"“ÿå:ü:F›ìgµ;ð/foìeZÅ§ŽšÅ¦@ k[æ‚[…=¾_$g¬OPƒÓÍ^†kF´o¥hb̨[ç2KVÇ6È„éQ"|]U‚ ùi"¯(B=pU(Ö O $îäñX."º1¿4xpI=žc.rgÇOâù;|ïMìWfÓi¸éƒÀHÊ®LŸV¿-Ý*›ìÇæ>fÁŒ«Ê²!ü¹vSq+Ûâ>+ûÆŒ…uÒŽ«jR\2ßuè+Oy8±¯´çUâV^Ík¿(ï°mž;ðü[ãרŠä&4º?|šáSªaåvh¬C z6­ å]DH°»‘|'óÁ•óúÀäƒî‰¡Ë·íóôæ¨ÇO©Äá'åêç»rúpí«1Û.DÏuBrx.üa¦~c×ùC«å½µñ¹ÜXêÖWìyIòloߘÌÉ>0-Ôºåžq}Ü|%B¶jÌ›™{ž%‹@Š£‰©nN}&NK¦A7€p›3m· ±WÍ"ß²¡¦ÔÙWÜöžK=çbœêJ-°_”ã’³’ãF0ïØ Ï×OõØR@–Á¬H[ÞVjÃkíÊÌ>a oÒ;—öUÔ5­oŸ±Ý^aŽ]H8ÛO|½‹þäièJ{%ó°`WP€Y‡»«Ô¾@K³) ;&A¤Ò4Û7ÍkòDðÇ7Êù#+‹Sh†¿H¹E­ Áî@D÷Éä‘Òa÷ÁuR6« xÜu_í¥ƒ[ó“"ºu³ïͦ²öêU8Õ.SwÏÖóöÑç©Ät4Í‹.›p³ïô7Ùmž¦ _Ú'Òð5˜0ýwœ3‘0‘µ«Ÿk"q­œN\EÞe Ï 1¬/˜sštMCkì×,ÛJ|Ö6ÓæÈªÜ®Z‡®aTí3ëNñW»Ì š!6œCPª9ÑÎ “t+¤ÄàÞª-Tîý†Šº²k@§®ü6%õ@Ó礼LJ÷3D¢%!ÐJO9 9œ#m´¿zi:Ý£4U ?PÖ$¥»F»H¶‡JcI¢aÀÖV›‘RÝvÝ&<»%¼Ê5àvëæØå¶µTî<å!? ö)â™~É‚Ä#ºß±Y„¡·'»Ê!£‡^u äu‡Å´<)‡D+ º”À7£Ch¤ú»šô!ëç Êè³ÇkNÊïµo'Þ¬®òªD¼ºK3îOhÇê&Ÿ›¤vÆ+·®Xx.ÔŸ‹#ÚúÖ]íi‘ÔT˜lMwwÃ8Àòùö&b?ÇYOY—±ô4/Ǽe‚„ ¼dØ‚W­ëÊg;™Ãf.ÉÝÛØoy¾êÆwi«êêh–kqE.Á«†;ªZÜÀâÕˉ8™7r+ÓÝÕ^•¹pÀ{xZ‹EŸRëàªj@ŸvC& G“¥ Þnͧ7µÏs9Â~þm¤R•¥Üj“åZMÿñëËKSû# »S¶)Ö.˜!¬5¯‘=)>p*¥`˜Ãå(æO°þ¾’`²ù7vµ9><ŒjìAQZ˜mãeRm%?ì®îû2Þ…ü(xò£r`Èg¿­üΠÊ>ãH}*hÄgíkyî~¢É ¦û¹ ²ò»%ô ¥Û"ÐÃm¶ûÇß^ï"¯ç^ˆßôÇ7!ä^B©_âô̈%õ=¹¾¤è;g£ÃX‰¸îlš¶šzMrÆ‹ËÅ®Oõ¼ë‰Ye¹„5üwê¸?\à 5«&mŒšÞ¤äöN}›¼ð¼ûˆ”¢C®v°ÏÔY/îÌFM8 ž—~R¢¢çÎE`¹­qÙ¿Õ>½íï”UCÊ+ÍøÒÒt]—Ü$fÍ‚Oè9s»†HŸq3”.#«ÿŒ±0Ow¢Ä :¤ýd̬Üé4Áù<`Ý¥[Á7/ئÎ.¯H§ì:/~xyå˜h–Øð'kVðîÞÚ<^¾B s£â—û£(jÈd‰"Enc VË}A@u´'’^ó¼,«‚#}¤½õ"óÜœ.|¸ÌîÙ(½ð.šüGNY©.€Û]Á%ºª-s’„DW¼K±ÍËQ;ØöEÞXtS¬© .µî“î2v>ÊãýÄÓNyjyQtå1\Êâmø9Îêñ”†¶»x¨gõ* á0^5 8u’Ða=|ØeÎ7W´¨ë½ðãËS€w!½ÿ¹LìÜœ-g­Á˜Lc2ìŽdyS îÆ0ª²ŽÙ®Û±Üþbû.!!2oE1/y])Ä#H–õ'ñ!¼¶:TeгBïÍv}çË&ýàa.b žC˜i¢}V¸%Z½ßïèZAû\b5Œ¡ÁT¤Zf”\e­€i˜R?} Ä›zß<³ÅùØÃöÛvåÍ™AEoWCǺÿâYso„%œ¯²*U#„žÆ5³ÐUìjôXÀÓù¬‹Kl'e]³±·5fžÞ‚]íÞbÃ[hA.€Ñ}ù°¼â|ÉŸ'uJ|' •%’™Þ¿LoÄÉ,•®¥/-Åg³êÅf'wyÏ×á,ƹ>*ªb$¿¿kùq¸ –O³r0Ö3œi´ƒ ÕC‚èöÂX5ŸF7Iù‰çf•¼öh÷‚aDiƒÈu×Õ›Ÿøg&"n}ß™Ï_M¼y>-‡° }&`j´YÊÅc?VSáhlz >'}M·ƒ\!Y¢dÀºgrücÓß®e;"›ìeœ‹ R¸îP^?oÒ[.SŠ*ì C¹Gí+‘ûöNÑ ƒ ê® É*gq‚YAáTÊæ7êÛ¯döê½HžµµdYuG€&7ÃÎô¨ ”·Œ,‰èꈥ©»Ö•È:×§Á¶çÁyrɆ 'AÑ›’mŒsÏ=E°Ì‚dؾÏS8°eÀÀê–|øS¬,ià¡’jÇôþ)ºÁ6Æ£Öütd ï½m1ÞÑá%nïu®îþ*¾‘~“°9ѵ«Êjćñù¯ŒïÔÏßY8³ñ¯ì µ,î{ä_ëk“ø_>•Æ·«x…ZˆG ¿_fµf»žjžwªý)óð’œHch¥‡íò‘÷x]Zù• ·4n-o³N—{)’5DPôUP!°ð,e´ Ò†BèWí<7AyzÖ'góƒMYÊÔBveÚ¦=v«m^iá´œHµc—k¿¥M®Q{J~[ññ¶!N»8& ,qÏOd¦€ .9 }pÙ&ŠgNÎQ«ÄʽŠoS_ßA±È (  噟×S™­y®{§HÆ_nñ¸VešÍ8º«zc±jsÁ¶T}Rèø »Qc¯'â˶nÙ+ú^^ 2¤<б¶.ÑÞºo/ òZ${6(wOa Y‚ˆrèVäÆm™‹65Ÿ{Aoizjn‹¯r±ÁX×êK²výP16æŽ=³îŒÒIé ð‘%ï+.çÌ„¤Xõ¸÷ A~]¿™ÜHò¡?¡ kn¥¡f=ã`Ítš9_A~k}‚y¦îó§ÌCh!v@Âàƒ¤°æÂÁOÚ¶ä'Ÿùz®S¡÷»M0P¼²lnÔúê3[3tNäƒ{¥F«µN¬ná…•¢”'²Ø¤1êŽKÙP<ͽŷ¿Ä,Å@)p=âÈÄØ?ÄV´¤Ñ–’ 8!­1T}Š4³_3&`^˜íŒ,²üso1DòðE—=fX3Úõá•]†O”‚öÞ¦M¾y¼D{ôa—ÓãÜYBeÉ %±ö»Âk‰Oªø«°g^TÃâÂõÔh?îÒÇûjßÖiÚ(JÍú ±Úܵ=§Ã}Ý0{­ëŒ©8r^g—0ÊE-ù[&q” cX(_ý:¤9¨ÜéÉÏqžutù•”ÜÎÊ1QaÑÌω¡¬fr~úf%«Ãµ¿!ùŠR{꨹Xõè¼ò‹wíP¢Úú*p ÏÈMA^8<âÔÎ(SÇ&ójºçÈ.ÍLœ` Á ªG\±XIS)¾3é®N¢¬Ý„!ŽD"è ($ŒB®ÂAO‹#¸+„!ãÂŽQ{¥/>ð+ÃÖÐ;ÀÀá^)Ìs½xÓÓæ9Üð¾p“qœl{}Ãö{¼jÑR àªãà zÖØ0ûù„W,A9.«Æ¤¡^?»Ÿxh¯|}'H¦œSº3BúiKvÚä4x§Ø‹‘no/GJâ€]Ž-¸µUÜ‘p½-âìl/É»âúUkRøÊ;Çs é fTU–’Žjó9eö’KõËR°:ž^*âú{ÆÆ¼Ñkìpøâ$ò³¾ø ô­¸_¢;º[üšüäW.Í/kÉ£‘Áb›,æw–®‘1'Ö0j’ØxâÔq=V¬À†ý­?•ní>Öø6Ïso³‰£›lŠ÷‹ ÷^§7Ú´ûªƒd–R²¨h'Þt!¤vƒ*Vûk4¶g¯£ÉvI>çô;ýÜ–L³×½–«7y6˜Zõ÷I?iõä–Œx;©é¦ ©Àt½ õ§»~›ë².±é39´R8N[ŠX*1‰e9™! e…äŒ:zDAjùæ›÷Ð;!ts‚àˆV&…õL”Ö#C<Àvy×j@Zã!ßïF¤.”>UÁ¢«‘½Ë?Ö=; ²ÖÇ ×±¼=ZiÙ;é³\$róê&oì¤ñkŠ¥Rô ¶40x€! µ~›á(›òW)ÏU,}¡×0vTŒüúµq0†ųcXšÔê×èY°”‚¢ˆñ‰2¬s¦‘µ´WbJÔý¤Q"”06Ût²ê*>з\ó]´/¯«0¶õ­Ò°i`BùÊVw9‰èœ×'>ضh+á}!—ðÇSšÁ «DiwaO.ò|#Œ?°÷õLÝuêÁIŸN¼ò/üY*ûž«9“)jê*uÓp&˜,žW¯Pé‘ÃÃòS³ŒwX”ÜôÚã7ŽP×íÆnaç…×T Žx9sıÕò®(½ñh×6±žÙÁEfèSFÏã…‹|>,ÇoؤÊ=]Ì eŽ6_ü(’W±R›˜laëd¡”5Fzao×ΑIÀ=óaŽÙð—ûkÌQ–²ïzSY[»o»eµ˜äz¥=oÚQË¢uŽ­=v'c»©.úãuÍgðoÙ8‚Á±uR©.0ßË¿ý¡9™²¯26¨Î¦¿_⸶t#Ë™9RMÑbÃzOU×ÿb"«ò»¹YàRwT¹ÎÞ@ñGÈs0g=÷0Ò·ê0»®XSú¦(GE/àš‘í$简,xGD§ 0x3-— 2¹Ç!0FÔ1ÓâÌ-ªAvïÑÏŠ–iî»}¹m2Ó%'© kcVmp‡p "Y$öEÉ×jh©ø¾´/un>§ñ¶šð¨39k5õ‚à ?©²‰]`Žü¤(qòÿÖ•"îÊú®ÐóCñ-pzJý¶ðµT$#eæ-Ö2þŽí\̘ì@ÒŒÊ2Œ9F![#xNhŸ¹Îàl*ñÒx·¶éÛk“‚ÈOžôp¡óŽ…ÏÞwèPNøfG'¹ Lͨ”P"Xû³˜ßioí9sS”Ô¤E“Sp‹ý‡°œÃÿ¸vEQÜÄóÄü©Î‡k1Í' ÐòDqúóæH@¼{¨Îò~žñKN ÎÛ€ÑE4ÔŠ‰ŠI”[¯™RÝܧ'á+\lDz.¿a§¬]ƒÞE¼Ë6i•ò+àT{«mCŠ1‰2@Ç]"¤ŽjË~þÞ¼¡R(ÕšÙ÷¡š Ž%ò¶?Æ[“Ûiv‘I`Skc¢ïÐ;l×T"î…~ó Ö(£&ü~ ç àsu;*ž—ÑžÒ >ÆdäкûÑàkõäÛÂ×Ú>µ×â\~%³. ß MñWZTz í·cA€{nç‚mû3æPĈ=K]ƒ°ˆêï‡Â_‚PƒÉ(¾œ}ß‘™†A…„ƉßO'EæY?òy—Œ¼ü#–·¼BPpç´R½‚Ârá¿/ÉXš@6*¯ïo¿K{ÈŽ÷¨wŸ©3ÅTº3P*´O’Z@ð૞Ãlc+·’Û”¤.ÓÄÓ¾ ½ñE¸Emå8³Äó&î”ø>n)‚ñësW$|rX÷Ƴd}/KÊ׿:GO£§2h¸©·û†¸Äo7GGQ˜5%{*îâ…ˆöÒÜZ^ûUd’Ãìk`ûʼnf‘ÓRR€ÞÂ÷Ü·a?¸ögeÜJwÁ¥MÏKètÿM]{÷=êGÐqª•@ËÞdu#h[Wþ:uëÓ¥Ð'’| ó5ch(YAP3Gö–ÛõÁ<—lÒÎÒVQtÙs¢>þJMnúÕ§r®Ï¶©#ñ©y¢6ˆ1Î-ãëÂ3$POfbþÁ¸Ÿ ÃBYý%…x0ä|_¿oÁÜúÕ£•÷ N. Ú>¨ .H¸nAùˆ!QžkIœr2ÄYÄ/ÿ`›fVAv}RŸcqÑr½—Þk2¥"5b[¬¶ê2j†ã~ø¥Há°ÃÄ Ü O†À§Ãžu¬£ÆüÒhµÛëPpvfRŒ}uÔ’`fúu±ƒŸR%ž_‘ÅÚ〺áhTé°MA€èö‹9=9ƒ:¶l±Ñ—"¹]0]Ôýye¬-’´“´ e>‚®ÿ‹ ñxÜLQðîï¬[â cˆkj\MFÎÄæ×$q~G„B»kr”n¼–æ Ä~ã7»ËÓ¡ŒØe¹¢l«à‚„²ÁÒXhVöOon¶Irã >2áA:R•ÕÏò–8w°î¿yѷëp©× ©$ÄæìÇø9˜S†B°„d"!@´ íßÎÝųZã$ Eצ—|Å è44%z*±O"MüÓ_ߦðy‹Ž’®(—Y1áa[áiÑ®B E|ÅîBáíïVU‘(TÛ|áD} pzÖbúóX$º^ ç%"Üd—5½³ßÉnRZÔ$h¶ [fÜó=õP¹:ªÇ©{×¾ @úÎźÑÝL¥t1ܨŽÕvÍâ>ÃØj7XÄñ9–›±=Rl4ævãמf. x“_Á.¬ 4©"a~Úýó²Xt«¦ÔŠel[xF?¤¡ž1·Ý¡ÍMlâõìJà\¬È`R'V4| ¡Ø|ùrÕ3º=#¸ïŠy9Úl²üé¸ (5›±]ÿ!&Òh D^ƒ ùÜ>Թɾæàã ŒàâÑÁ¸žã÷£«´’ïÈÿ;Åz©,ôMH+”úÉ*dÓry÷U0pús³ðÉ#3Îô}¶\` š»®G5Ô¡ŒóS†{eOÂL¡¾š4 ³ƒeÙ—}yrWLûºp_oÊ&^îL»œ®¡ÉõÚ[´¼[ѳ–¥"MI§ßÐrK{‡)(9(ÄXaõ²®oCEÝšO­Éé)Ç)C¡¿ê%ß~‡Ûmq%%¼TMÔ`ãã2ýUâœ^`¯EÐÓOGG e1!±Th$8Ÿ¶cyäqf²é«œé{»±À\Ž‹#¾‘õ1":îC˜–’óoÕûêæÄty æQPÝCÕ£­›:vÂdx†·Ã÷Ü>Ùé©ù[É%m¢Úv.§ûö눕«b4>ýå¥'ø\ÁÂE·?0ÿˆ5ð=ƹÃTú«Ï²?[ Œî®ª§Ÿ:xÀtÕNê¬Xîa-±7.¤_pDZÀDEõË÷Nå‘ ÜÍU@t‹?X!» H‹Ò‡GÇ×ÙøØ”þ1EðCwí8f'"û~vØ¥‹5;3Ò÷m6ä)i×ò÷—P>4>FÏÈßåé쇈ÛùÅÐÒ§ÒnáöÚ—hE^ê`¬IQGv„'žHígÏc"žV*¨62‰rhÀRî„4"š TŽei$ÀL:"“6¸áeµ .Š0Âê|/ëÃ6þº#À·:U3šh”gÚ{ðBß™ïD ‰8/¢ÁÞ½9…nÿ¡*Z}.ïŒXÇm³¦`OTJh#NpIuåÅj9JÕ-l•,Jò‘fö «*¦©ÝìË–½ø@a|Š3ƒ`s+>6%8­].rF$(²ï˾¬ÂÜTb\V¤¬hKe0ÛÅypˆÍéô_|úª”Òд#®±:ŸL]΄¥Ũ²ÐUõii¢—¢B]Œ(V½ÏÖ ÷v95¹ŒÚ¹Å.óR jp¡%Gü5²GEœrÀÊ4GÓ³´;Îʾ“Db×_6á5¨äeÝüÀ,ž#†æ*4Á'mò“nÊj7o׬±/~S!A©ƒå;…9ˆÒ÷¬¾*k<µnÓê´šãpšn3|ÀÑÛ%@™£†wÙpãDä‘óÂxïóFqäóâ{{c;b ­™õŸ/Õ¥ƒP²‹±?¤§}/ió͂մ…mLùò„eáë®I¿º^„ S[G0‘˜Ÿ£4x' 4þìË$•ÉÅQ*³”M¨ü¼v35\÷¨#Ù%wð»¼ÌБ€Zµì+†ZF.û$]šy%0Uó¶;`J·@ÛÒ©`D5²&óëÒnkF{oP•daÝ+ØhþÅ#ìÂý½®Þk~L`Ð÷‘ÈÇ\ŸÏOp´iEêk¿:kÓ™·û_!Â/7JA6«ö•x{üŒaÿ7™§¯+F‘w:ˆŠÉúÁÒF4Ÿ˜»Ûa–ó[ú]y UÌ¿k]úÅq†ø)žeÇm•-ã< '/kk¦uj˜y¦ãº ãÆ8ïýÂ!X.ã=ñÕñ°Y€Ö]¼áÊóp¤=ÚÝïÞ‘t’MåzGô_mŒÊ*\¨ –ÎÈ p×ïvW ˜‚Ü +ÅÙ¥–W»Gïf˜¤\>²¶lï`¶ NÈë/“ÔÆ2Lò¸ÿ¤$½•¥:ÎÔ,™¥‘­¿*þ] +¡2?äLJ64æ³¹KÚ¸œ}¯k†LÜ äøy¨–ðÙ¡ñn_'äP_£¼æ‘•Ðrsã=O¥/VF¯MöK“¥nsmò!ÁŽá(‰Hg7ÏÏ59\ä±sBJ¡†îþ»O’ê cj÷¦Ç+qVT‚<Øo)ò ïwüs¨kÐòµ®mßéi@1n‹¨²c,º¡VàýFtÿþ“7ö W Ïl㩘ýw˜ÊȈžb‘'îŸ' t½Hïy=ÌŸ·¨k÷Çs!„KéØDàzÓæù2Æ—‹#5E÷Ý”B‚Fö!ñ9 6¬ˆ·tÇuC]±çn$Ð^@}‡ ]êü˧ÅÏüªncÆ¿^ùèråùè/1bÜ½Õ§êÆ·Èy* õb ŽMÜlfíq­µ¬»Æñ`\dv| |n‹<¹£§ƒi†"íw['ÙýÁ¨µ ·d—ùtò×7Š€õRånwa„=cz#Oû‘FžãïלJÆñ¸Ç¹7ó™b§¢ ÃÐØù€ð—NÅu 0ì kè)áÇÑíæTvÈ­zöyéì¸\¡Vq`éÕöžì9_®]—b-ôêä:\"[_¨¢ÆR|•)WÉàP® ÇÜ¹Ó Üï3x·'¡±ŒK $å`{Øœ]´jn]/*T 3bZ Oî©ti– ¬òUÍ[ƒG ˆ:¸E ¯‘= é;#ç ig¥Ër¹1ЂÔ³·s!……ÁŒ`D‘È…£™ÄSš¬Bl˜Cív‡ýt^/YCï+ˆðù§·ÑŒé{ÿœQ¤ür¾«nqz–ú3è ãj5éï²+¢‰üõz¦?7ùÅõç4-‡¬¸m5?´Õ¿ØÍÅÏ3kBP ¤€ûzxɦ­æ#G'`¨z¾¼ŸÕU~w´.â³Ç9 ¡±O2q˜?#÷Îú‘5ëßZ±Ì?ñj~ÏŽ£˜•ŠcJõêeØÊÐí*M)Ó0fØIé¡L[ÅDŽÃ¯ Ë©häóxW‹põÍâH”jG:"@·Äƒ_˜+kØ©’Qžg¼‰¢R^n¢x>µN$}ÌÚÓüG íz·‡¹Jy{æ §³‘(ª2cK–øÌTK["ùÓl}íe¨Kp熉¼Ù8'îê Ê „}ú1`â›þNW)<º$_ûhSKÈØw•%Ù?ùû$ký ‰[½Þ£ù(È&s$b®(@Ãhù÷‡ Œ [ÔKrl!ñ£yÜ.äÓkñ`õö¤¹oö^&£hü¢«ßØj5¼Ï5z í­`ˆÎ£´}Zò›©Îæ %QÑÁH¥ÀdÖ·~yjÍ )à HZGþ7ˆJŒV”%ŽÆxf/—ôxÑXsÖ—Ÿè…Åöq àÈá3Œ¢WGá6Z·ÿw('»Ÿ¤ÆÂZ—Ù¬L²ß€ÆüSÂß%}"Gc5O×écîÕ!Ð}°YT©g¥Ì_yë%šs¸­Üø)ÒôÖ—’ŰÙT5[(ûá“àLa¶´Ü1¥ôúT~¯Ž‰zäïƒzË}ád_i“óÚé¢T8¨òIÊï#LvÌ=;`a3 ¥¼t@é~°gܱ¥f’=½¾zá탤úݶâ\X\WÉ«£YÅ—T±» D““™P­º˜ƒÀ.·ÃÓû?ûÚŸ8\«F«›ˆêèÇ'É {‹i±O²y¼«0.¸ R!i‚úóêb ‚ó+Ý5N/XMÇF‹Fwow˜3⼡aZ»)ÆÌ”ûrÞöÓÿhâbgÕ¿> /)¯_£–ÝÚ‚]±ºOD»ã(ó ªƒÌä°Ç‹K¡I ²%µ!3`¹.÷‘añ2—åóMze®‚’¾ÔP9ɱ4Íã×NÉGøÔFIo$EN+”^VFì"‚;ÀÍ^ºÂ©’¾ò¹¼úúg0Ž>z^»yèÚ€~-Z_¾-áøMEÄ’„|‘‰|H:ÕbÒ¯žãlóÓÕt܈-QŘ -!½-sRB LÁ8Úx3%¼½)v¶”Å:;z¡G;É?XÚ_Æ‘§ôùRºôˆ8Í ­I¶è•#žß¿=Oï_‹ÜÌËÆÜƒˆÌæð|/á`uÖ–ð9ÔjïÊVÅMío1îV¹W£ÇCˆIRJ™€¦ŒwŸBRÚ?àÑæ¿¦:/ºt,ùR8GGOà3â ¢¦w.I¶¶Ž§¹1µÌ#(N˜~ŽN|“0/ ‡ò0L š"\ƒ³þ±@ŠÕñZÀIx"ÔÓ™¯gXƒH¡|eç®Þðà€6"ÞùñÌV¸z¢XkÊÞmïWimÝ ñÏáéî®C.îs©;ÑJa]Ÿwóñ45#²:Q£'P­w·ÌÒ ñ¡Èй…ý2ð õœ„øR¥…PþbBb6ͯ¸õS?éTQ¬H*ex³K‰Õ?¼½ð\ß(©,­CN¬õìû,Ÿ\ø­Pé‹§¢¤Æé,Î;èƒ5é/ñ`ÀN;þ~ Àþ[À¦ÄÏy¯d!­~˜ªz ä§z|pÑà ñmÈ²Ò ¤Ù•¨ìY£.‹Úg‘”-ê öHñN§ðr©¥¹oAÎg0©q3FFËÖP¦ô~"–1Uöú…¨Ú< ÒþdwÂPAõê?ßÖïn°é¾©çp… {Ûrç»7‚`õÈ¡$BhrrŒëà83F–ÙðÌ­à"~ǪÐÕæ˜?¨¯Æ6kV™£o%;¡ÝûîeÔÑ=9dÊb³…öŸþg>›íÆÕΟø…–˜}g ŸË)he›J˜æ¿*JÒý‡=}"V1O¬B§f…øÉ„;9æ~—A-רèh4Ä?,‡&“0ZõMQb÷–RŽŒŽ,’ÆT0uÔ€9¬¤gS(‚ÓY¢ì‡óCgÑ®™“=/áIxzá‘ÌÝfÍçAõÌÍ›zÖŒA.ûBÓaòºÖˆÑâÝ"ðuíÙ׈a"¶±ÄmqÌÁ;óÞuC©ž9OЏg"©ü§8ë»ÝNÇÓVm¬»Ó­q­¾†d9F§qN‚Œ}4‘·îܽÙçÛ¡g½*Wñsäðm{“3ùSuÜ ú/Ѿ˜ƒ¾Ò—x¬H >óî…í…3U^J“DþOŸ¸nIŸw|¦uW>åJÔ•@ |OÀAµÒ‰t ‰Rš‘¥‡Ê 8sX\F7‚ç–ñ'Kc¬ fÑt£õ£¶1ÉlVçúMŒÙ‚ŠS¯ cl±ÈCº¬AªS-N‡Ñ:ÜÌ ø£~E©Ûzдn9±ü#¸Ïw{)a°e¹ Š4*Ýçz²Vxb‹F‡óàëg•ú0í³…“*°?ÏH¶$wlÀ'½FÑ]mÙѺ·sKF ðŽîmhÌõ–Ѽ’JzìE£‰˜^Ewù¦ŽùMä‘v}èe]Ù=Í@pEsЋFæçiwß”®·ë—HWV×·Û«ÁÑ'ˆ&œ8ÎdåT?l–TŠ,í™× T m‚z.h̸‡—z(c!¼Âƒh­zB^1š<ÈÇ…8÷ÆÙÎZ¦Ø(—v¶¨rúqéí¬–s#eǵøÑF þioÊwKäwo'™Cë˜b¥‹PvWò Û/·zMþÀç„ïÈ0Q}ùHsðZhCŽXãïÞ¨†à“ôÉW€P«]UjÃ[C=_“šª³Kc¸ô]qÂ÷^ÈÁYÔã„ÒœQ8ÕuÜêÍ–ÈÅÑß°f„"µÚé{c°ÑMj¶˜h‹6ì·ßâ¾rsö6½î~Ãþ†ËµF I:K²ë‚æó$AÜÛÉ!ù- üvƒ<9 |e ¼S8>¹™ŽØ–ã$v‡ãoç#l)43OlåW%d´_¡ÜÄÑXS%ð}ä‡n;ðx/âðnNÒ&Œ3yK ì–¸>ß-ÌîúÑ•º§ƒŽÁé;J×ë°·õèpÍÕkWP%é²z×ÝÑ\–Hx¾_ŸŸå²ëpdbz â'Ý„žÏÏQüÐG$ ³ŽžMe§_&íës Ö]Èû…LS@§¾Ø‹€Ø\Ú)³©ìzŸ±ˆ>…0µ cPæ†A×òRJ¿µx Ä@qcåžô¾¸%³´°E—âyNoÌð²9M°SN<¢´oȚh.HD ª" 8X8K‡AsP±_ñGK~K:¼ì¢I»;­_¶'Cȧï뱪"õsÍçÆ¹‘ ¿ÑÒÿ|nÛ0z#Âó}"Gm(6¢(u¾x×YkZ«JüzkHd]Í>Ô>¦$ªrgÍ09Ö|]Z³ÈCÆ¥HÈE@ÛŒÆÝ"ÞŠœ9Åc«­õÚ€Ùoظ:»G{ ©ƒk¦qù!™XØtWHTkÇ AO˜ãáTyáú ¡áü¹Ô‡´¸—bd¨çs½[.¶z£þ\Ú~wúÆN}0ªŽÃωE_½²¿ù¬8ª<>ª7S‚[#YdQ¾v‚YÁQשê}ýY®Áª‡ýŒkÄÍ&,A¦k%:LÛ"öÓ×Õœ\§){ê‘Q³ÎºH g,Z„Rû…çyßUÔf¤1$FcÓµseJǢŢ{é7Ù· jBz¨6!úzócË®ÂñjXÌü⽜{ye†U'ž£ ’:]óBÙ+¢ß3^±äI+ø¥]8Ôo,-"J4™.¶Ûq_öÉSCà‹·l»°)¤‹CTúŸ¥m%•ÀÑB²R#»-ÖÜ,<¦œ¨É^>ÙkÐâ*¸m¼f†ŠÈÜŶ÷j”qkÙçIßû*F8E´~)ö6]6Ú8ܵ–}=^Ö³lTÁ3Ù51вš£ß\ÙΑ{¶kˆ4?p_Šáz’ª½†^ƬêÓ`ÂÆ½kHVP˳ö·C¨-rý3©äÄí¡ÏÆïÊ/=é|Waß&Ö8˜e;—#mxfB1]þ^ip™IÊÕ¨Ø/B¨In™[´ê*0Êz¤é‡4¥)Dîº|^Ó5–";ù|àBˆÈf2êyF×ÄÅ1’™Ó¥Æ#×[²Ž™4Ek=Ò_bY`ëhZíÖ—ËL)tå!D÷RB=ÔéVo£š,å`d?1õâîoõO©îå­©‡'!1kR¤HIÏq*y‹,Ù Åq!l\½”÷^'½T 1%á,°O%Ѻ6XËmz‚›¶õšº¼Å¤&>+ÒÓCHü‘y«ÍôØû´;’ìû„¤9GÁÏ/€/“#U¼@Pök™42ñÝÆøÞÀ1í½ëò¢´¡ÏâÇÔ¿úÝÔ1/VÝJ&Aê*·Ù¨k‡‘j6EsÇû´#\/õt¶ÛŸ8Ûü*>îçX¶ eFž=Í+zØ4Pw/qŒ¦›ƒ•ê§ë¢uÝ‹Ù\jÇø—‰èW'ÙBômh¹ö7GQüHíK­Û-£f}üÃÁÄÖ,Dwdª-Q½ êϦ0MÍÇm/îXß#bôUÚ[ÚI ·O…k3¯ 3ð©0ß\S˜Ýñ* qÍš¨8L<Èh¯ï,ºÔú7¬;û*X±-g¢#®8 ;óéþtªˆ½ÈÓCËjñ¿…ä˜ýŽÐR¸þ }H<Ö¢Øà`@ïòü…R¡oŸß‚¢x¡ÞGÙ êÞo´Ã<‘B½ožÆTàT™°¶†’ïZâVͯZ2lŸv¾^ch!1µ|ò¿’µ1*Ãö÷)cnÀFó¬Ó#¨–~(­ûW8Ö:ˆxXÅ9Ëç épC YU?d‹“¤lzÜû> endobj 168 0 obj << /Ascent 624 /CapHeight 552 /Descent -126 /FontName /CLILXZ+NimbusMonL-Bold /ItalicAngle 0 /StemV 101 /XHeight 439 /FontBBox [-43 -278 681 871] /Flags 4 /CharSet (/parenleft/parenright/comma/hyphen/period/slash/zero/three/four/six/A/B/C/E/G/H/I/L/N/R/T/V/X/a/b/c/d/e/f/g/h/i/k/l/m/n/o/q/r/s/t/u/v/w/x/z) /FontFile 169 0 R >> endobj 407 0 obj [600 600 0 0 600 600 600 600 600 0 0 600 600 0 600 0 0 0 0 0 0 0 0 0 0 600 600 600 0 600 0 600 600 600 0 0 600 0 600 0 0 0 600 0 600 0 600 0 600 0 0 0 0 0 0 0 0 600 600 600 600 600 600 600 600 600 0 600 600 600 600 600 0 600 600 600 600 600 600 600 600 0 600 ] endobj 163 0 obj << /Length1 1612 /Length2 11863 /Length3 532 /Length 12716 /Filter /FlateDecode >> stream xÚíxeTœÝ’.Á]ƒh‚»»{ÐàN Æ¡qww w'¸ww Npw÷Ë÷™9³ÎûçÎüºëöZ½Ö»«j?õT=µw ©¢ ƒˆ1Ø$ ¶qd`adæ(˜[:9ȃmä”A¦N€w#"…˜=èh¶:‚x c€8ÈÀÊ `áááA¤ˆmÝìÍMÍÔjÊ4ttôÿ´ü0tûwÏûNsSåûƒ3È lk ²q|‡ø¿Þ¨Í@s+@ì«¢–´‚€ZJA ²Ù­ŠN†VæF9s#ˆ`¶Xýc0Û›ÿUšã;–ˆp°™¿o¹lÿrÑlAöÖæïÏs€©=ÐÆñ½Ž`€¹‘•“ñ_Þí&à¿ ÙÚƒß#¬ß}ï`Š`G#{s[GÀ{VEqÉðt4:þ•ÛÁüÝ ›¼Gƒœþ*éoß;Ì»×hnãp¹:þ•Ë06w°µº½ç~³µ7ÿ›†“ƒ¹é?ÐìA¦@{c+ƒÃ;Ì;ö_Ýùg€ÿT=ÐÖÖÊíïÝà¿£þƒƒ¹£ÈÊ„‘…õ=§‘ã{nSsD¦¿EÚÆ `aþ‡ÝØÉöß}Î û¿Dý×Ìм“ƒm¬ÜÆ D&°ã{JõÿÊŒÿs"ÿHü?"ðÿˆ¼ÿ=qÿU£ÿtˆÿ»çù_¡%¬¬€Öïð ð~Àr€¿î+ ýÿ´6·rû/6ük è$ÿ8ÒŽÀ÷fˆØ˜¾ ÂÌÈü£¹ƒ¤¹+ÈXÑÜÑÈ `´zïÔßv5c½•¹ è]Ñ¿› ``afþŸª™¹‘¥Í_­çø‡ dcü¯äßEú›:“œ¬†ˆ¬ ݿީG)¾kï¨êfûNìßJ‘ÿÇâ/ QQ°+Àƒáý2°²q8ßr³°xýÙþ†aùçZèhoî Ðy/™™åïÂÿíýϕ޿ÀHØÿšG ñûxý‡á/·‘“½ý»ªŸø÷‚ÿ}ý÷ ƒ@® #ÄÅy°_ ErZŠcnVÿ¨¸Nw' TmQ­j~®o¸Ã'9ôO™ÁsecÝ8ïë/·¹CÛ—mÚÁN+ªŽ$ÐiÎ'/2š®\ŒUÊ.º¦oE()G‘g³rëÐÚœÌê;£JÊß Ÿa‰Æ[ØìáÏîh|Éœs}?’ßÚ¢zý¨‰ÁnE¯ƒÀ¬Ê;<¢LØ¿»¥êèï븀éÚ&¤ËŒA às†F¡ŒðµË$ÒV+ó£M©G&¼h>{%Ñh÷ø–MAN@n-÷¨hš³dÓ,÷ü&¥Yˆ?AÞþKÓöOMœóéñ~‘„qž©¬·e' \þúOcÝ—“–äip5Äý7çÔÝ¡UÖ´]¨Y3J­E5.°ÛÌ aN?QÅšl(Üu‹Êšž‹3Bmb{og5 Z:§,+䌳ôì«ÒðB°ê9ó€uâ=crýõçÚ #_È Ž”ÜZ¼O#œ» ÉãJ\áoY"4uÊ“¯™êŠÔZåfTï¾¶üBûeF8˜!AîÍ“€JK†Šc8“>¢óvس—êºfƒ™\vàç~ìÔ‹óqr&ä{ÊD‹[šCn%b­™ßÇÔBYzÕp§ÉVÍ[’DUY`÷40¼ˆ:žÊï'ƒù-¸å Q·Ö†ƒa{8û~æ³}Œå“ΰåC?*”;ª¸)bk*þ•ÛpT-’‰Rx¤“9)Á²äét¥ažYÄdæ<ë®Cÿ^`íQÞåqJÂ/ïpî{Å/ Þ‰1ŸžmLп¨9Ô›ÐIn1~'‚Ve¸{=ZëÇ_‰ Õ0 ¥ÆÊøhžGE¶1¥O{Îþy¢rÙ.|ŒdçÏDZƒmÌ4þõÛ+éŸr‹ø¨®D¿7zí6iàƒ†ýè§Vs$±5&ˆ”à…6ŒùN !ͱTT$d‚™ú´3 ,Æ•h¦¤#ylXÖ¼áŸpôN¤á½ÎI‚V¦¯Ã Ig ŒÚÖ»‘•|q‘L²y5üȃHW¿o¥f6Ás*ëu±"ä(#….tRªF’—#˜có}±Æß2݈…=ï 3ö2ºu³¿ÃUj´[¯ Ó¨lÎB[_ªÿá®u3ëFô[ ÓeFJoÏ´Nó1RÖv‚RöüuÓ“/™ÙÓŠkA *Fޱ³«Ìºnˆ—\làKW#µ+¸›Ó_\áÛ†G-×oL—ôðq¥Õ—õÇÍA (qÛŠ@C|tÊ’v]ËÔ쩃ÓžŸUá-¿Xçv³…=<÷ÓêÓeÖ‘Kή•κ)Gøz E”ü¯Ñ”_7%-“?ÉQ,>éÂO‚ލOË=þ [7Lü€µx(bÞA…‘[dJh,.X~ôoKE$6xÖ÷|$j¯[Ò€÷Ø3¢íŸ>”ºë*Õºq=¬C¬ÅeXsÆ‘#y–7±È %PQ2ŸbvMᬱÕÖ¥_iºMâ9 Mðç·”fÒ=bÂÎZÓ‚®ø*§âCXå?äApÛÝPǸõâ5MTS-–ñr[ðÝ`u¸Ë'›—ÇIh|8gÑ­ìœ}ia,uØKsVÚ*Ù °²n2ÊÀ=?6dFú>¥]1ÿ²‹9xY´ÄãKi.±ç Q%˜9O'}¨rØ 0öÿ¬z£•‰Š^¹ÏYÝž§LÐÞ,ñóÉ*Ù¹¥Z”)5Ò”ƒêL­ÄéûJÙ¯0^õ?z9Óa³¶Eö ò;Þ^±>¼DذLÏ[?ßZÖö6 º# ¦kX½Ëq¼q:0P­oræï™såôn%.¨]5Ñzôðe)ÀãA%8å qõˆ½ð¡¯ìòÂh6.”×e‚Ñ×Çm×Ï 0”~÷¿˜©Åþf·J×éÌ€;Í„çж=…âΗí#9<~Öb·óùØ£XþAíeð¶A›O¦1–ôaÊŠ®cÄÑЈ±¸8láã³ßc_;å8'•*p6l˜ïú‹Aj…`lšvžå~½nç Î:Œ¯&c¦X²Îüñ¥®Ë¨îqâ‡oEpˉáöØ÷˜»ÏOr”ì—³dÓyrÅ™ø¶×½” ‰¡H˜Ì"F/#¹óŠ£G„Û‘ãoóËRȰ uж¼[dýCGáPµëJÃNØ_Ú1™€ÑèŽ+Ý?ÇÕ?¦JȪc³·±9Y¥z]Ÿ=,eH*›Eð˜‚9Y`£EáU×°+iˆç Ù»”ðhJm`¥¥ /î•h’è.ì5ο×5Ò¶çu9 AžCÇ5Ÿ™¡q©ÉðÉèÊ—®O®gIoØ›fáKvÕ^qí,Ôn©‚kÉ×€"\•PjÎRÖxS'‚ÀQ5ð°ÛWÅÅâîg³‰9D¤îžÇŸXØ—º3îé=è|‡©V ™Ô€è2íf*!éL¿¥~iêÙ3Ôæö4éâ>‰=þ-n™0ú—þ"ñpt†wÅR±m« Äü$ØóJî¸;¤JG™ÑúD“~„Î\\’˜Åq{“Bm˜0¬ÕZ`Œ=*‚X{U´‡4¡P³‡ÕÓO¯ÂM¨NHto.ê÷Â.ÂøZ‰„Î*8LŒvo{ÀY?KÒvs´Àê©€Ä[ëžZðES"Öª)³ê“Òq…p‹ÿ¢Þ:°Ã6ªUWõǬߑáêê6¯a°¸¨þ^(*n8›±9e+H¦QÏ&ãôðËï.«¢wD'8:C–êl• 7÷ÕìRžë¤jŸ‡FËXB¶œWb…¾òã«mê|ë+  ­È7h3Z”o]ß–jzÕº ±¼ò6'°DÁ»Ç$šrÃÔ"r¨TÖ)ÖÌ8©•$ÿDÅ’LZTXNò;¯3ayaOݯÁ_Ù‡”®e úa‚PDF¾létF!­°M$¸Ø€/uiÙ““º¯‘ÊÍöÉiŽù¶nƒŒUjÆnCýZ[Õüh°±´ègBŒ ^.+ŠéZg_úH«…\S~Ç þT‹cËPê1J©šƒ‘: ®ˆÃºZP'Ì‹tZªgBà _˜kb÷^Þ ÚÝ_EO¯SËÁ»(ÄŸ¼¦¡+`è¤Îçþµž½Ø¨»Í&¨uŠaÎbµøºIŠ1ªK¸Š%%„éA,;¸,Ðï55a~¬«š´<ø¼·}•…OGK?Ó5uúoWÍ‚ÚÝ~DA…"Á‘ü¼›L}£mŽ\r>keSg‚Ýû7!P!;9Ï>mVì™ß©»ÕÜà~ä#$üý8]^í×üâ2Ë Ðæh˜¤!•©>ï‘}‰>q”mT3§6ˆNʾ& Þñ^Ò¬‹£œ®ïfµv?û¹þùTõ”ßvýÃ1ᜓ’ààèÌÕînû (fÚ ©ÒOòБ(D@ wï­²Œþdz”JZY~ºü³¿z°€¢z|J#vÂÈC«y‘fkk ðà‘h…ÅPÏÊÔƒªsn\îò+¥rîébgåB¶Ê]-j£ å “i€þOj›V8¢É1$¼.ÞÛ¥ ܧ¡Œ¸öi'ãú¬·¦âêñ×ÄžrkQíÕst„³]ìñïØQ™ˆ8”?ZòzÆ‹#õÇØÐH‹‰=]ûÈÁn^Gq盩÷†ˆ§#Õ¥Vá`¬‹ST,ô™DÂêEf+F¨S4¼ãA´WPâí?`ÐÇäãåƒu¹[¤p‡Í ÚÜ+'\ëËáæRñœF¡,sV¢\Ón/I|žÕ -ç¤?W×¹„I Ø™õ>¬xÝÔšªÔßkØZKoõäóhZ>X­×gz¤¸ÔžZT/¨ÂƒÙ&$ÍÓHÖ·òºñ(•†x‘¼q–|È”[{!­æz»¯úS“çOgñ>Dê)ÙS5}‚SçéEþư*PrCjœ6¶©C†½ûõ±ÔnèƒÖ·kUsAH/-’šR`W7qvˆ]ƒœg´é>—m!‹¾äP€¿tWG²dŽû\¾ñ†€gkf†[¤LÝw‹4n¬EÈBKŒè2v˹’¸I¤ŠÍËbF‰Y-JùGŽgÀì…¨©ƒhçäð’ ¨±Ö¬µ+Ýx(„‹(yþ˜#ÔWKÐÂÍkêrºk5V'ÞPmÚ(÷¯1D†7«œŠ_ß³åþrãGÓHMÛª.¸¬$`=΃ëV·ÄšÌÔ°À›´"&òÁ>¤É]<Ú† VþéXöS;’•üü]žç;ÕäHÄàO¿ÜÇÚp?;ÁlDšÅ³WÙûO5ˆl½æì~;X]Ø4w_LO3ðH ²Ð`¿ÑÖ"X—“`]öYÄü˜Êè59ϼì2¶"ÜUwaõuá‘f3äiÄYD Ù?-2+m nÒ™Ù4Óþ÷DÀƒŸ?è£ÒK°ÉĉŠzS/ÓgâþV¤òcÓgfÖ«§á€ÈË—©A_ؤlîQœ.ßqK¾I0S§¬}„4—AjJvõmïAÍPT¶ßñ:J¥ÖÍiÔÖ°¢órLÅ áQ\¥³N„Èî âQ¨Góž©°å«U×»;c"Ýl{Jž•ÿ€w( âø×r Æ3>¡±€—bf«|yIFJ#‘GÈÛ¾µõÆ6âOÁ-*s¸Vr–.Jõiw ¶ý僱ª7V‘6ç  †m9¨YœsÄ/e_†iµŽYæ «sû\ØÇÿ–8ˆ¿YÆ«`Þ>—¥â[’ut`ÿѲýïd%’u{oap§'ϸ Ñ Õ*91z9ͯª»ÄQk.„ŸšžkÆäï®×€£†ÝÀÚ†Ç* ~çÁëOrÆT¤ap<]+ÿ8;Ú@`P%[ޏý&qjïû‚¤¼R Vj*ÓPŽ­ëlQŽãØ,vvK^“cæóªO}_+˜ãûyt„ÂÛ]¤8Bï*–‡|eux“H°Ò†3-çYGFßoMýúzó˜h2ŸÖ›Ö‹¦¥‡›öB¹·”j~G½0ø›†AߨÕ2;ó˜¯ûù‡xJª?W|Ób™g-j_ê€!¼"®ðÊAê U)ß—Lé3 JOß`ùö0B4¯A]&ñcÖ1¥btÖR¼Y¤úB4cç”GvpfäG@Í¢<Æ./–W±°Ú[Š8¢î'2,þÏ4§› z×íòÜKÅ;»æ…Nc¶žP©ø¿ƒAâ,gó’îr•º¬Kë-c~p:δɂGÉ .:·ÏðÃ^¸¼%GχÕáØA=~¤†¢òi±Ktkù†Yµ|ÛŽîP)“óI*G*Š<•lkA‹8´Ë§¤Ôºçª {{T¡†Ÿ9+]†§ÔV·|ïkëHKˆ»: : è®Î›ËøYxccCBq3ŸX4ŒÑÄç‡`eÅÉ·cÐ$åC™ÀŠM«¾·£Âè¹·3¦ÓF`á{ÖÃãGÔ럳B=Óü^ÿFfS$xÎI9úéÛMÅX»Ò<ÅÐP„†d½M¥ŽéÕºS&Ãd¨î¦\PLq#½ðGw½Ú’¤©%íA¨â½«¡Ò‘:ªŽrafÒœbß®?ää©--5á_³Ò•M¶ tGš'|šžÀ™Eüòå¬1UzJ²¤šëHŠÉßà®{œ¿24É_IFyµ©Ç^ïz(¤jX·FÑ®ûÃ\ž†<.8ÛýUpŒœ@¼¹Vg?Œ6ü£[óp?ÐÑËFv%’ µ+ye]ZÁy˜ žE°'=QûõÖg‚ñ’<¤M\Uô¤µ`ô¼eÁQóðÔÇËÕÌ+“–Ü­ ú…ÜÛè–:U$Áã7'ŽÑoÈ‘xKlá ¬™HgN•—8úÜfÖNs6|ûÀÁÉôÔ§rN ‡$éóÛ¹|wCxÝýA.ÖÛnŽx[¦;=й…Ä5‹6¯à©Ä¥_?£Z¬œÖ]_Ã’!wYí–AØ8ÉÂüìC$˪,‘t[ØY#ÝeÆÔþ3¬T’„ÕËŒ­Cc•¡;üƒâDý³XŒEt3v¹Všhé+Õ7I£—ÃóBÓçªÐ"&÷yáM–Ä`*â`bòß··\ñ`@=ƒô`ÛÃ|Þý•)ÓÖhÝ’±è‡Y&,‹¢»âØU‡›‡ßüh"›xÖ³û+õr-b|l’÷üãY¥vvDs*ê×y¦zÒ›«Ü5Ç ¸~íŽãUŒú]šCÌŸâ˜KÍu7auÅF]æäØÄˆjã‹M·iAòÆ£ô@ç*ã aíe_©Ìýì»Î€.ßJtgò8CƒÈ4Œ‹R·áTÕ+#¬bM"ñ‚íË×k}ó:?Y *ž£÷¡˜H¡ÉÌoüì¢W=+Xð\üÝXln¼è#ª` ¿4ùÖ2Нiã¶.¹*zÓõÔìjÜáG7L‡(y Í84º=Væ¤ì¤[€<åö-©.N&‡è  Ù&BDÄŠç:Ö¦”¤ÈžÊ”%?±?DEÿwÁ¶9&©ÜU“'ZØ‘ ¾/.ˆ²PÜ_`"üé}ìÑo]M£˜ D©‰A|V2•ªóZƒQåRP¶ð D…k£º5{KãmÚñWù OðÆMéµR¼ ‡Ämzf_R‰¿¬ êw7àØó~÷0”ªJ䓉MŠª ‚ÎdD ÍÓ1bØw!ëÌ:nöèñvù•{ÏÊÈÍöù(` ¤2žÝËÂ#R%佈ÀVÆ3¸Ñ‰á6÷ÿöO Š) _kŽãé8fΪ+ÌÊ5÷„ïy~¸¶Ü¢OÍiwE u©ìFótù1h]/íæç bpiS§¶¶¬ä*É'Ý` 6+}«Ñê ä'¹žGÑ'g’ ÖPÂŰÃòó›Î¾¯o\ibÃÐÇ©®òâÄ9ÉÆ_!Ò4?d$OÃs@{\sé3¦u·œ´2C ¢>»ËΫ9‡×Ý”b{G6EÏ| R`$Àc£“i89®ñ„-ñ‘)ÆÒ&êÝj‡›ß¬ß*m£xîbûÅß peé­áÌ]A á*wŠ [Á Ï(øT‘ò‰àõ‹t &/iõ4»Ðb*rœtAÕ·Ik!½”9þUØÔ(ˆÉmú)%X;åŠ sÍ$Š­'õßOüoŠºÌò‘9Ÿçà Œ[=ŽKð––.ÎÈÝr1¢~¨CÊ$lE‘¥3b‘âYiV¿þ¦$zÍÜ[ùÌr¢;‡=ѱö…ÇK>‹ˆßKÄ'+Aÿ¶úzwÛº²Á'è¨]k#¬PÅÍŸ.*¸±K>.˜‹\_r&_†öuî<Ö}&­P>²mV©‚5ÿìµè¡›tB}’D©©ÿÙY\éÈ fJx]_›LØ’øÈ•Óðo¬8aëO¤Ñ8/•²lUà’°L«vÜiÇŒµð×ð¡Î´þ|  6ñcí}*×ñgȉXøªžö­±‰Ás=Õ ^ų]­Šä¯<‡l zûýeåæð®WeÒÐOJµ£Ü9VÊ#¼šk0M`W^â–•žcNªf¶í|¡Ò¥éKyI”†m>¿É1O!`):fº~~ñˆÀf ýoÃ5³bª Úû-·Ó ç‹Ö,:ÓaƒÛDìMD¢ö›Ùzì]§Ý¦(ï +–Ïä§v„Ì 64(ÞÒY£\gÖŸ:ÒÅ4„çÙ5iO–'>Îë‡I ÞNŽMî›0KÖÑn¢ÁDÎD/ãÌé“E÷§Ù´›ÈPå= G÷Sl¡/ z¶å9éï%°O¯ë·DxâmÕkÛùÛÂÍ)„’ÿ`P6ùãwlÏgmÀhßF”HMìàpoZÏ­Ìíë …69˜@7t9)vyV!¯*Xú˜ŒD²Í+'§n³a6 õ¸Ÿ=H¥þKp¸n¥³Ð l^ˆ*ÿËPƒs±ñû‰u.b£\+<„TÝ—fmêþµœ‘Š{éÇÚ–;ªH& s¶¼›Gœp´ŸvVÕN±ýdŸ¯K#LèÝvÎÌsU3!Ii€„GΖæ:KÁÕ\ìÔîÚ¬£‹TÁÄÁ¾MÒu§ŠVL±fƒ‡†\ºËœ^…˜§ÙCš‹uÂÞTy`36AÝ|ðu;½,ò…îwâˆÄé¢×‡2¥ ¥ìù o#˜IÆÉ?¨yXT‡½?ÍÅŒÚá9Ýþ豨9Œ{š²ÈòQÖªI·œŠp×}êœއ“ƒŸQ¨*ñbÜŠVpJ>« »î€Š&ö†L'J¨. D x(gkö»]Ì­žVŒÈ Ñ/ąćFQW±øÊ.q1eÕñgZ¡´‘”ß¿èÀÈŒ]pü·€ßšÎ*TªÐR0X:7³Iý¦Ÿxc µþ 2yuسOSËøž4è?:û¨Ð¿0]?Îç›#K†4Ú0(àtðÒ=œ´3ÁHm7Ý7¾Ð,ò kËS÷9Ù<„d% wé`Lž‰_tÜÜGK\³Š¡˜WR#È„ÃWRY®òÓ›æ…Y4{†ç–ªÉmAÜFD+tœ£ì¼ö¥0ù}×byÚmë‰Vä[¨Â ™ó멤1.Yà ݨY¸¾þ‘À ¡¤žZvÒ4jþøÆùqèèùY ÿ’ÿúJ&ýú1'õEXd"pX‰¬ÈŸdGy ÒûÇûO˜:ÿò•=aN–ÇjçñA¸Zl9ye¯æIŒ^i诟‰fÏóT¿ä8™uÐ%|´!×~~b•è¥ÇŽ+_@TAû©‡ÉUîæ_ËyH9XÿÑ^,•Òͦ0~¸ti‹/§¢Ž.á»æâbÓêÿ5pm䓬©ªä¼c÷ l°°5^în£eÎ":2J@”E)Ù—.çõ Æ8†öMqì‘tDtõéa¢£,íù·”È¿Ñ,T}ÏDžÄ:wDÓV÷(×ôO›Ûwµyeùfþ¯_£í.›íö*î2©ŠF‰,“¿çMcØC‰"ã÷R(K¤þ„è³ÏZM.‡V2J%§ÁôÚ-›÷Âæmĺ°"Õ—óÊ£JŸ¢¬¯%žfxYœ˜$K—öœ¦Ÿhz·”µmðköþ·á0{_“:•ó'ÇØ6Å:A® ¥¼…÷ÍÏ1¹®W+°¼<&yš,Sœð»]|Ë©µÆWÖüëC·øÇÐâAéÔ0Üá!ˆV̯‹ÌIÓVÉðé.V}êÒÀ(ÝJ\¡û2m«%K“2ÄI‡Z ! q•‰Xß$cð)‚zP !a0,„º´¨™UK³ˆ(f ×k—ú1i”šüv3$^1·ð_ÖP'žªNƒ¼çfÚÄrt'G–_O¼¾=ÀToBeçbº(+þØ6" çt ç]AÍå.‹ ¹ƒÛ%ÓRœ%TD·‘úIö pWÏ/ÐôCÞK]ÍÄF£…¥ft¾’\æõ’z­œª•\uN"‹u@mQ;ŒIxæRZ£÷úæ4«<›z•²E4Bz±P`Ütõ¯šßÓ¯$AÍO»Ð¡ãNà¡‚ù´ áÁƒ$[o]‰;]‡^¡3L*aª9¨Ç•õƒoþ¥~øõcsJ„iײ]K1œ…÷ב4Æ‚Ç ù(®!;jPL¹ùÄLJm•ø‹ºa‡›å0¦N/± Gæ²X'Ê—˜.ÞÃ:ˆM:¾‰x§ 4Ù4?íÄ^$~¤¢!<\&OøäúìejÏ8¯äüäv§Qšµôˆ_…‰„!f løÕ_^ŒÞ>¬,ÝΠ-«"õÅ‘*ŠY†UJèòb¨Å|½ΈռÅŸ|‰ô}Pp™Th‡“[B¡‡ö È,ŸFK ãZóï3rék_“ps?±1m£äm®Øf§2 €Š(ô%Ðp0ü›-n¼9rý#ƒ¸ÜÎ ¹A8ëůgֈѳˆ—9C)½£ã‡ÂŽ€tów1ϳæ kða˯ö†Íǃñ6ËŠZÜ|¦)HÚô’‰"$Wñ°cSÎå(eîàXòÄÎ\çÛ(%BD‹#ûÄÔ«¦á“¥’Ö³_zøHðÌêâ×úHf¬@]¹8yîší»Ô•§@œX5øbL¯ñ4#Æ4ø¾¥’(Ú¿±‘îBøyŒiù$¦/:;%Æ•ÅÏìVKDÚð¾.ÌŸ‡rz‰ð.V¢2 0Kô!¦œk®Ùæ¹U‹T™¥ÿ 쬑;øò1Ê —q °‚™AŸvùƸ+¸7N:Ï^3GMîˆ^T¿ØSÞê-Ü;¥ûcÁÜ2ý6¸Ä×µ²3,õ'æ:Å–ŒT:ÕØáÇù¹“‘ÅÒ‰òVûäB¥Œ%ëyRî,Ú5øpk¦Ïø•ˌƊ#µ^(ý¶ëP 07T”“« 4¢ß­çH„ëÔ›­µWÞèf¨Np lôºÔálŸj'Ò_ Esœª7þxæ![*—Ç^>J& ·*š`Ex*™áŸç‹¡«}™K«§†ôδú´Þçz1+å¯?9sº Ç_úNOn{ë1ó¥Ú0Z8öí<÷(‰["©Ð2‘þð8£ÔfIè>×›¶ 7éª4EîSkÔse»H—¡:v¸ø4˜i¯ùeÇœÈn–R”2·Â§r'×0ìæÏ àw;=îD°²‹þG¼‰›â6o†›Öï\üÆŽÈK¨Z/ÃAve ߪ”É™Õ[†bõ¬ÅGYSøœÄ¤vé>ù³çûr"VÞ“aÑ}Wœ˜yÈÓ³%½ã‹=´äë‰wšŽ<3ŸTË·û²(©¯Áµ¥e_FÙ©Š>{ù\W¼Y|âÏùÓ/QcÆ"«—öGw½QÕhÊ*.(mÓåQJ·?tñå®À‡ÅL¦ÚüY&*H,f¡~ËuCúêÒ•:èb퀀×-Ë'±Á¨îb ­sÈa„ÎËGiœ7§y²ðï $ù¾Î †Üpœ¸‹ßŒhñ>»ì)Û¥Y7}$†±cäL n3GNjbfãø] œ8×þt<,Z ÅDQ}ÜauÎ"îtêÞ\?9?)c’Ï ŸÚjËêæ‘o H½¤VÈÎI¡IÖ"a9¥/ÚKj§Ÿm¾Ê¶/¬*TNÿB 8F—mB{_±&»s÷ð„nÌ*õ´ñ{ž¯¿â!Hð™fôÞ»I ïæ 9#†tèƒ#¢]X‘IäT 2ÒÈ{º·D&zôg¹®,ÃMŽiÜÇ+L߀¯kÕn:0÷'¬*f³*k,÷ ANª?›ôU߯ªÐö~~âT5³&EÂëîØÎyC{ËšÆç&†3§3[Š1¥Ô¤Zu1?ª‹0—@r:¯ÚfH¡K oç%ÖKYé.ÐŽNñýbœÅâÙùB]NŒ‹{ñp¢xRãªÝ¸ ˆWªk2tn¨Œ½šÙOgPKîÅ3V»ñ|^2×ýBFixÿ Sy_™ŠÝáøÙê´·Ü¡:—m¾Á²µªP–áñÕv”F•†î8Rý§¦Bˆ{ʬX!Àâž§eskx½AÜX(Væ£cÌ'öKãâPŒ`©ß™qcªàÊö›7Ï}jÒKE'þ°ng-Û×#ã߯UÁT®v;ö<7À(¬$˜IKuK‰Øo\bµ¤ že¹ó~,H¯¹þ’!kól9ï€jWÜ·Y¾[W4å·Û¿wZ¬ÁXTVpöÊÊ<ôÒSð|N÷¿#iqè(c‚ú\>ÜÑð_› Ï÷“O€bb,†Lò÷@ ¤z¢¯ì…GSå .xÙý¾nÙ§%£é*Ö"ûcv\ô6Œ›¹¶™ŸÈâÞŒm'~(¢{ÿ1ŠØ½×. MÃVùã•ÖÈH|kfÛç¼ï>͵‡ï±Ö6¿F>Ý ú¸îÔFÔL‡ò%þØ4iÏÏð»ÎcD‘䔿ýéê4§lWâb‚|ývY1¢W鿣JʆK~FR‚úê™ìj~\ÆW ¿¥M/ù¢V–6\Q.)¥šcjüöi0Q¯È畘u‘ͺ½`öCá51é ßÁŸpÈÊÁÙ¸`’»»õ#úP*Ï‘Rþƒ\ä%'3RaÚõ·PÙÂ’Á6&Ëk$T³R¸dã5:Ti]_g?w¨‘ëói~âׯœ ¸}ùòJ—®òUbÝTBf圚%ˆSHyÉ> oÝ_,rÚ‚è¤5†K7UüèìýŠëe^—×´‰¯hi àÛìÁE8ˆTºóñ7.4/¦ÏÔ¶Òœ]á%|ûF‹µ,pݘÅ%Úy"·å<ÈÍ®]Û¿µ\'N½L(rì£^91Ÿ;r­X¨»œ>dn$Ûÿ™TPÊTHϼzHã¸i®OæH3ÈI°:ÌÝß®5B}0q3hÝHãÐrùQe³œù')UUøç/YÖG+ 2h;3JáWze\s~ZBرÕåJæýhõ€|—Õ•óçÔÞâNÜC#âƒûÑÖ®Ê lºá o†B»¢ÇÐ*Œ/üÄÉËÓZühn~œÄ29ÌÂ#m«Á™ÐCâk­±n!âîþè§âù1ÕˆzßìЧ Ôw÷„Ïê§ J¡¬öw+˜ >ÒDçèƒñkΩ•úÊoö¶÷ÒJ%öéÁÑnh’‹Ý¤[DSÙò>5àâ)ò’#a2š•ÝdõÉÄ+8êÆûÌF4KÿNj!&~¾AâÛ2·Q.U¤2Díªx¨xúÉiV¹–!W8SÛ>nx­/Äkv«ø ¨òŠÍ8i¬É’ã¤ò1R“ÿF6h¼Ïރ嚴f|"8âeÏ“‡5Ðfܶ×àB>õud<_Os,$ͺ†˜ãñÔŒ¶Æ™RÈ»/ЈÌOF‰ò0±·ï(þZ<óA*ˆ+[9åÃ$€%^x eV®.Ž88Ù‡?kœLj¤-òSœ]´Ö]mÙ0e**!†Y»×­:§Ã§ÇÆý ¬G塦îƒT‚Å+)‚>ÛoìÆzPÚîH$DexÍ`úáP[«1CLŸÙ©´3•Ï <úÄ¿±ü°gUçpð–v›°£åÿÈþ½£Äa j›+¶˜Íí‚”¹ôšò3ÓaÞŠuv¸TׄbéH†¥¼Õ‚¬ã… šѦÃÇðº5¨ÁSÄå–3ûiL·a}ùÂ8æ­Ü$Íht{¦ºë8 ¸ šá]BY£ãûÞÖOq&ŒWCóœ!Ô –—8öÑXkU8‘õ(F’Ò“¬#Ÿ¶×ƒ†Rø—ü­møF¶Q0Û)f%8¹*5szÛ?¹©Ïw»?heÅOÙ/Ã|—£¹Ù®¡qi¾_u&{q ämªŠ%Ì*ŸJÊQgÐ4SiÕ&‹JïÛŠ5 œ(JDÀ"¤Ý0çÝ^oÆ+lmo–/âÚG¾épxð×â#جž2` Ô  çl…ÀbA 8ðy(k--F%2€P›³ð§1¦0|#3îиh \{çuÈÅbþj5'‹Ò†Ä§Ðùm#Ìáy¹à´—5õÖàßÊFãÖÐ ¿"R‘„ÉqBú¤•w˜Ìí/ã…±2‡,ZûyæxÏÎ}?Ÿ‘i1©<†Záó¦Orêç·Æ/fr­^-Ô¥¡mÑ4 ' cDeXv=–;xIh½K¸®ý=<õE)ß¾· tÇSGa¹îµO›KfŸA$É{•4®£©ØoëûZ‹íÀ ~Û>Ls×Y¤’ƒr˜¢Ó…nÆ—Wµv¿þê$4¬´¸ÆÒ“ç3 óÉK9‚&~Uµ|G]Û;™•dŒû›m¦LT³Ý7yŸõTùa´¨ŠòD3äio-’¢>INJ±bSˆm'—²Õè“¥²>v´Pb¸Õ=Ç-(<åíHbx IgÅŽŸQ±Î’ŽQQÑݾðeT¬"³‹o™b°¹1c@JÙ‹¢~õc8g¦î Ëüõ “Ø×Ÿ±&ŠTþaüöó6·óÃVìµyÄo"L¸KOLF¤\~KÀuÛÁ·txº4K-ÍnO‘XjCÓx;3>=Ȉ˜ô‘"û,im$²/üI¡]%náÎÌÿÍâÿøÀÈ ´w[í-ÿƒ³¨endstream endobj 164 0 obj << /Type /Font /Subtype /Type1 /Encoding 404 0 R /FirstChar 36 /LastChar 121 /Widths 408 0 R /BaseFont /LKWAKS+NimbusMonL-Regu /FontDescriptor 162 0 R >> endobj 162 0 obj << /Ascent 625 /CapHeight 557 /Descent -147 /FontName /LKWAKS+NimbusMonL-Regu /ItalicAngle 0 /StemV 41 /XHeight 426 /FontBBox [-12 -237 650 811] /Flags 4 /CharSet (/dollar/parenleft/parenright/comma/hyphen/period/slash/two/three/A/D/E/M/R/X/Y/underscore/a/b/c/d/e/g/h/i/l/m/n/o/p/q/r/s/t/u/v/w/x/y) /FontFile 163 0 R >> endobj 408 0 obj [600 0 0 0 600 600 0 0 600 600 600 600 0 0 600 600 0 0 0 0 0 0 0 0 0 0 0 0 0 600 0 0 600 600 0 0 0 0 0 0 0 600 0 0 0 0 600 0 0 0 0 0 600 600 0 0 0 0 0 600 0 600 600 600 600 600 0 600 600 600 0 0 600 600 600 600 600 600 600 600 600 600 600 600 600 600 ] endobj 84 0 obj << /Length1 1626 /Length2 13043 /Length3 532 /Length 13909 /Filter /FlateDecode >> stream xÚíveP$Ü’%4»îÞXã»{ãP¸»»»CÓ¸Kãî4îîîëò}ofÞÄÛÙ?;ókc+¢"ꦜ<™'ï¢ QPf2¶1ŠÙX;2°02Ȭ ”l¬äl¸edÆ À‡ž‚BØhಱ1p~¨"@#++€…››ž lcëf25sP«*©ÓÐÑÑÿÓòWÀÐíß=™ SkåÇg ¥­ÐÚñâÿ:Q8š& K @X^ASRN@-.§ Zí , N†– #€ Èhí¤˜ØØ,ÿqÙXƒþjÍñKÈ`p°>Ò€®F@Û¿\ô[ ½ÈÁáã7ä0µ7°vü˜£ dmdédü»‰Íß„lím>"¬>|` 6ŽFö [GÀGU±ðt43pü«¶èà °1ùˆ4¶1rú«¥¿}0^GµÀèêøW-C Àä`kiàöQûÌÖô7 'µé?Ðì¦öÆ–@‡˜쿦óÏ>ÿ©{[[K·¿³mþŽú G ¥ #< ëGM#ÇÚ¦ kx¦¿vEÒÚÄÀÂü»±“í¿ûœöˆú¯¡ù a`lcmé0šÀ3ÉÙ8~”Pÿß©Ìø?'òÿ€Äÿ#ÿÈûß÷_5úO—ø¿{ŸÿZÌÉÒRÎÀêcþñÆ>kÀÇ;üõÐ8Yýo)V K·ÿSÒ¿F«ÿÁö›¥ñ¿ú$ >F"dmú! 3#ó?Œ 1+ÐXähd01°ü˜×ßvUkc ½%Èø¡ëß#0°03ÿ‹OÅ ddaý—ìÿp­ÿ•þ‡T“g’—W—¦û/׿>–ÀQÅÍöƒÛ¿µ"kcü‡¿`¾}³qx0°ppؾ°|ܽBÜÌ^ÿEÉ¿Xþy–5p´¹´?úffù»ûûþó¤ó/0¢ÖF6Æ­²£µñǦý‡á/·‘“½ý‡À_þ®ÿýü÷ή@#ø¥y#ž@óÔŒ4Ç_Ø?ûGE´{ºX úƒl‹jUòs}+m:}RC7¹Ëô_ª‚ëÆ¿¾5»ÍÛ¾îJÑî vaYRu&Ïs¼ÈhºsQ×([9éöü™t‹ÓNÔ#=.fe6 µ8˜Õö¶F•t _  Ç[Ùìa/îi|Éœs}1Èïl‘¼Rjb0ÛPêÀÐ~åŸP&ÞßQõ ôÿêÞŧˊ£àq†D¤ŒðµËÂÐR-óˆÆa­@B×s!Å<önüz'¬x¡(Ìãõ´Îj¡ÛÎӞؗ<÷­‚"WŽïZôáTưZNåèôTÃX2â$wFsŒ\ØhL˜{ÜXŽ£ Cg;0 YÜ`f)È›e$œªA"‡ÃšíUË›¥ þ,k´·.ÌOÞe3³²{=¸žE®ïƒÚk˜Fõ¯½w4‘âÔCë) .YgSÕ ”t½wˆpMÞ†¦ {»œP33Ƶ^лÝÊmÈ1Œz”Ó랣HñÞ÷‹Ê³GœÁÈ£{÷±FÆ?ÞÌ39B¼\¼mVP“]äøÐÙûQ,jH•Ïiæ%µžÚ”‘Jáèá^®¦oò¨QòVÆÑÎq§@ˆ5=ö9ê{ Õ{'ºrЦfšøKnóß^ÅL=+´ýëT"&¡OÖÜ“Ñy…Àèü˜¢ñö›JÖ:oÑDMÚ°N±S3Q”¶5?‘}‰Öàe‘¥êã…ml$kn“kRg S…Žë|®O:Oz臊œ`ÏM0McÔUw¹”˜Á&7›e…“L­i³ùmÜ¢PšlÇi¬™¹h$,²frabÊKPêt†?€*ðÉ(I¬KŒ Óe¬3¼¨Õã› P1[›Û9քЃ×r’ÃH« *Y&õgéŒAâ•N.WA q-4aCíZ•Jú)dÚõ’N×b {ûu{ô45áÎju}á@Z˜Ö´ã¶KÑsÄ“Õä«‹Ë~¬åŒuå">ºw ¯-!Z`X¯!Y^µ»5í,¯wª/ Q% :Ü:BÝj¥]UŒ Õ=ç"Ìöˆf;x÷´lކÞU¯‘R²eA¼ò80⌿BâÎúÞ‰¿€ûŠ•»vm–wrF4½K—ÃN\Ô&nL‹Û]!O§˜kz5½úÒÄ©dÅJ䞦”yÚZy’c€5X¦!W…U&͇­ Ó–©õ‰×GñJ¸ôB:OdÌ 9oÊë lEs0\Á—»TcP[ò˜Í–C$ŸÒ¡yR'þ¢<_L™Ù½£Ye×8ØøÃ™/« _iTU2EØÓ=Æé¯a¥Ù:"0ÆúûË%•%Œlyͧ„œ!D¤i[èb^HèŸÂ°ªİü™C ‘hDÌÚeoRÄQêó™Ïž$4AåÖ!…²Ûäu ÞË= 9tv 6_¥Yg4˜’o»–•Ó^-¨"éz›†œánߣa÷ˆí³2òAÕ~.\—8±†kcÍÞÐÞÓ=×iÿxlî·ÛÈ#Ô§oÄU¦J„ü­Æ÷Âk:ˆež ËðúÛÚÓ™°{Ò~ ¼îGiz‘/ÁŠP±z—Š“ûJÛ*¬#MÞ|Ö°Ÿ¡@’$¿ exÛ}™V/r#´I剾D–ð¤¬Áv GT ¦š¾ôÔe¸z÷а:Óì.©:¶W‹=¯0ÜB¤»K°BûL{ZÒí¸òW °OC€§Ô§ª·®¸ìò:«!¾b/¸iÏæêqíò{OCø!ÿw»Â¹þÛrõ^ÆM† x¥d£íÃ+wž°Žd¸Cueb6R7ÈÅõš™)õaË;o¯$UÛ¢Ïܬ,“Ô@·2úÖ¦bO8îÆòÕó 5¥×OFÎZ‰ýÝ&úpÖÕÔÙ‘%[#’x â ~ÐÞš"¯ã*A ‰^êõ#¤p”mÒXbŸØÛr3ÁÞ´[M1Y½Qºè¢Ü«Vøé}ÊHb4„Ó+QmW–Ó{k9%Làدø†ÊW1S`†Òá6êrÖ(Íu$16ÞU3š¼;WÂQ×gÐ0£Ž±awÅ7/„ßÖdòeáäúôM@\ºNxL— ^›²cÐß8ƒvŸÏp¨tEßi¨¯E-_¾ö*æ-Ol'b•”z³(Á«ÇfÕ ­ü&«˜Ý¢eƒ- õÎòq™ß©ûÏAñ™d|üV(]Oÿ36Zgº.™âNËÊÅIæýQÃ¥¸Û—l¸lÛµž‹#µ[Ñ>ÄSŽ}+6ÚƒÊd—Ö”“Q3XŒÚ¹L¢ñ{ÿFûÝĸ,lίÑ_šäµ|kOk™ÐTbÑÒEÛ($MtMQF,È-ŸÞŠg(»rõžäY…Þˆ¨7_k“ ÛIµ$žëùÇNºÓ¿.Ö’¨òùj•²ºá©¦ûò6ÆêÝÏä®Mšº;GyÉÐÑ ”‘ææ9c]YÛ­€é‹¨òælëü«P©.–EG°PÂ2]àÛÝ«&\ë+ ¥eÒБó \/p’Îú³ í ÅŠû¸²”T•‹Ý°Xw謣HhÞ¢°P`¡Hv{ÿ\Ì>Èö3Œf5r‚t ©ƒEíÐVIôXS»’Yå Â娷!Ÿ@šp(Þç[Üå²K4¸ñœÍQùŸXô†»ºÚÍiÉÒÐ;p¬j ÄœFÊ®ë‰c‹Rù î¹ÀZ¨ŸnÉ»œ„‘"¤±^±ä» ³JÁlpæøÓSÈeôK¨ÚýE©8Ãà‘"¥µ!:d#ìU&ŠW)ùU}·BÖ—w®·œ‡å/â t½ÙYÌrPÛ¿Šÿ8×f~â=¶–ª,ãÐŽ‰}}rOñ¿_§´ÔP(.säµäàeªïÌ¨ÚÆ» øz“Ý%|x7Rc› sÝÉž<Ѳ>r~)Qƒ¸×ýµ’šÅòJ Ç“ ·5U×5éð"…#ü’»] S(Z•"}ËÞAtðﳟýü)>…rž-B¶#8ãGOàHDí§ÈäÉ»:±Ù]ý`ÿýbJ—˜‘·€ó¥ÇŒáN¾Úƹ ÀèýƒŸ„¹ëñKN^#™Ã‡ø0aT°R5bV›Sñô9¾Î-nڲᆀ‘6µèŒ{Ú#雇ÖkN+Ò΂–ÈŸEK~#ÒïÐ=õ ’_PC¯æÒ$ƒ€UaLii𹃈ÑÖI¨=LôÄðý‘ùµ”â -ÎÙ£cJ’ÎñP$ŸÂfº²»µU%èj Jx"^¯Òi£¾tnØó ¥ü6$Lb–ûyÝXv-‘öõö5°±lêš¶¼îáùhf,].J0òOÛ 8\o²6Á0ÊÄåQ"¾bó–{s§›x£ýò.ÄÙoెôûŒà¿ä›(oºSbìò-× ·§Z¸[%+"º0Öt,PÎ]щ„T êâšÿ{ž»…Inü1›z¤ YDYè kÛ¨®c@²I‘Fï·CDj1ºLÿÚu_M›.J>êY»ŒÈ­²?nåU fD+ƒ- { Å:Œ‰Q{@0¿gëÄ-·+ØF\nêÈð"„RV¦FÀ/n¼“írªa÷GiôåþhªJÔ#?þO›V¶5"`¡uŽ‚ÓêúTg‰u&ß7û³âÙ ¹6¢Ä³Ó˜}ËöÅxøVá¹GÁ›-ŠÎ“³ö3~ÀÄ‹3EE0<pUä-•×OdšM¡Ew}ñDîÚ"¼]·±äºÇÞ Bn4þ«îÓ’&ÞóZÄ€œpøšXíTKT$ûër0±èï gßš ˆ¢ ¡y܆›ÒUŸÝ“rÖúÐÞô"x]ù`ÐÍW+í9=†ú1ÐáäªKÔQ²¹¾§»W­‘?Õ_È+…*‡SÚpÁ„èèœP\Ždd ·ÛÛÎ~6[*ùIªÞ©|GwÈY1_Å~g‘õnöqÉòL…ж³U‚©ÒI dzä¬T*|h .åÒi-eßi«¼·’g÷írª<Ò|ì_nݳ‚yÎBÁ¢¹t¸Í÷Õ§ó¹§×ö*â¶\RØùé|§°Îm˜Ràpܱ2},t˜¹"#o’K'öf6> øP§Ë§2ãk‘­kÌ8ÐØ)ä´§le‹2vGò÷ƒ|{܇)Ó,]Æo—¹:—“âyI±%0Àky¤í­k@]#¯:)Fëýí'迦@/÷Â)zÓ©Wà„ xWWUm_U:âì˜I‹¯-«/xìCµ]Óé-¬ÄøEO¿Hþ…ë8½@ ÿœ/Âzw5?j- à@Xc\Öò+6½­Ï’ÞLRÚÛx…áÜîÚÈ PóËálƒ V”)]6ü˜Õ¡þ2ÚUYkí‰pòkÇŒ”™9Eü›Ðmö,Œ´2nôøq(„Ì—A¯†^%GåPîs÷zDûï1ñ*[In³îè™KHEeïÞ[ ý#qàÈýà'0ƒ/Ñkˆcþ1fi'L¤#40õ“A',Ò-û 0ÌŒ#³¿aßx7ü¨®^ØW2éy%ƒ‹s‚A|MPÃC+¾«lЏó4ã›ÞЫœCýƾàEî~Šì.+$kWo•ýØæ°3CNÇMžC? #Ai\Fø(õ¿¿£wüº&·`ÿ{ç÷•ë2ÍæG«‹Ÿf¥µdäjH®€&j ±ÃíÉcwºUóg’þFYš¡™®WkJ•9IFäQ‰ÊZ` —kPí[‰ûk¿Ãh9×Wüæ“ÃõMDeÛÆõ$¶DjñÄÇÕ —ä§ü³ OOpvƒ"û„|Üç……¹÷à=È•„\Üœ>-ŒÞå&/0˜OÎváKɈ*ï‘sÝÖ¦G§*e·Â3Ê‚ò0.ûgÏ£‹†µ% FñbD¾` P£+\E`²t(G‹,AÛ“Fß½½Â3u‰uÁAÌÌ9›X!îζl½H ö…¿ã¬Y_ ¦Ê5b‰¾ß^Тl:^÷ÿ†JxcÓWøÉv7Q“&EéÇ„T«¦4Á-cä2%5•v®ü©ÌK{{±þ(dÁ'Æz•µdš@ÃI,'¬SbÀV…~I鵆H£$wä” ÈÑ_½ì©/°@átw¤ˆ¡||ë˜>~Æ÷å7mÐ°Þ¡Ïøˆ]PÔB«š+ìö×m-aì'AGÒOBM0ȘèÉ@É0´Ã/Ÿ·üÍ:ŽU» 1ÚäyÿÐmF¼j>ñ}5œ”~N¡­} ©âGgRÂÆ#‚‚NãTHÝb¢ joú%C×áI¹3”þ'Ë:\uaü¦TÓbÜút*ýßå²XBÜ Œ¹ój ;JõýJü"+ŸDlýŸä^›f¶­ŒAâiF¿šß¡ê=Ó«ç0EÆ­]‰‹]*¼7xT±ŒÞ=W NCžq2›œ{v”5[àcÓƒõgn­‹7ék§@é2hÐ.MùV û)j2›Ý%Ôkæ¹ØTÍì}¡ÇÎ*Ê\ G[<‡.‹f›|ƒLÅz‹ƒ* mõYnËpEŽ8}V›ù• lßeçi™5aN4!˜pÌ·ÅMÁƒÛzӎࢀªo4tÙx–Õ$šS*Çv1‘‹f]®•›zÏøx‰ømϹ+¥'Å‹õ&.4s}Ï^ËD±ŒÝŽòÕQG¡Án'}žh'?l{£¤g—®èÇ–4uÐçû15ò£;‹„ å—8=°.¶wK—ñ”G@þšQOôÆWð½ ¢š­Gp´´î¾õxV5Ÿ >)ÏŸ\qm™P¡s¬EväâË998­ubf”ãÉý§ˆÈöÕJÖàÕ`ÏÖwA3´P9îVlÔö~÷·VúÜbF7\a/—ÎS{cukvB£Ç×nÎÀz|Þ¦_HMŠÉd-);óЇ Mˆ ˜Š2Ï«:.Yàrùˆâ|¼ŽÝBôHàÁŸ!ÇÀÑBï€Zuz̧Vøx£_RÖIm¾ ¬…¾¾zsYFªø— N­(Cz¹WKE¥/fpW ª¢Ü:†àqûî¿™…XÝ #OVB·~î-Ò¶‚UÜl¢ôøt¶;Ö’À…n¼«ýНõ½LÖGý¶dŽ¡·×£ŸN%2e»H‰zfc½7mk$á~)Ðï|õ#eÇɳê¹°WâO±ß±‡¢[ûÂüµñe>.5.&ÿ B)4¯ ~«§¥˜0žs¦´’R:”¼…)dÓ¨ E¢Á lîY8㟇8è‹èLOã …¾ôs»Ã=Câó)ŸO̱ògÆïkýõÈúHdJ¦=Ʀ÷¥3¿8$ðÆû ‚/%B²¢{î5t@Ý`ÚÁRsÇ!»DÔH.%âãT¦âÍîJ¦×cMy¹ Éǽ¦¸vòÀ&Âï¦ßó½jØ÷Yí*Pú#ÏVßßìš{¶æúvc]Ò½–ÃqOg}¶ç²wgRHÉ*Ùú©ñ`%¥6d|×™¯¥ãxP'¹ûœL«a¤4Y$|¬ S±$=lá…äÉ<(671Aƒ›™ˆ.Ùq«°ï á`@¯Í@fmQ|å¤xêÁÆ‘â8ÅMÛÁ‘ÙɆ¨–}sE”}ƒóg ý[ýMç´“æ&NQ;®˜ûOfÏ$–€¦äÔË·£S†2ë7‘<+%{Óñg̲ ÎÕ¸#K"Íý=­OhRÈ(DoÜI4`uK)Šbeú‰Ô>Žæ¦¹ÝºË ýØR …‡šCS~¦r7à*ö|^ñzºªîÐþ99í2WUíï5ÙìvððÓR1iáÜa2?,•ÒôH­!kÞÛþè*åAn[†U˜½ð³ÀY4Ç¥FÈ«â7?¿Y¥ºÕšÜÑ\ÀõZRT„mèÝnÚG7àg™ŒúíBšè "þþåŒ )wv‰î3jkQ¢ BLÿ€o^p¾»ê/jº"—¾1”ÅŒBεßÇ ½(”¤a Òæ¢Hn£(«N·ÑX½÷ípzVü$ 0Iê™%}m 4aʆjšo,üsÕòýp…B嵡˜¾áj0ÔGÇiº^RÍ;$CXWašø:DÙˆ‡[s#X´(qÍdwûà4¾ÚhÒÂôLâ'nó.–Ec+^bc¬ÿn¸?…¦—ỆuÖ‚1H“ôUÒ/ ÒPj{‚FÏ0xŸX`Ám9.F£LýTjQò8¼©‹YuÜ…S½xì°°zÂJœooƒÌ®+NĆð׺ž•èp„< ð=Fnä/‰¬Lˆœ‰0Îzþ¾OÃÙøgxm9dï=xs 8 :ú°Y«¯¼,3Žúã€4*,Ò®°2Þ¬‚/“õl~·†a¦‡=!JꃻCªËshe§td¯b¤{Z]wuûRª­~å‹}Õ,òÚ½ÓXü,ôËÝ–Ù&eºŽöä-ù¢7½´kþZtÇÌ]ø+ ‰ÆŒ[à ~ô‹§2¥\K Dš‡Ð¼zæ è?žXkúí ñ¿¼í†%Ð) #òçç…<°”†ÕIFrÅIv7ÞRä¹.ȾÞó‘ˆl $3VÄSOFM¸ WkëÅ k=¦Ì¯ÔЬˆ]͇ÐúÂ|‚Ê—Z±´÷Â3køù×…ëš> ÌåÊΜ,å–¡vǤñÀÀRbwêe´phçuÍvS,ÙË †Î‹¥qÿ& óûMà\F4×ìŽb䞡܋$ ’ÔŽNÜý31á&‹šøs$,˜ÞþÓˆ ÐCŠØÁ«Ogî.•2yŒúøBÜÒ|Ì#IâoBŠÏ®³Èí)NÔrØBa ôˬ¡Ñ0ßšõEÈYÇÝiÀ` Œ*®zÖ_ZÃ8ϵÏÒzfd–­WÛ©‹Ï–#Ê”wºÐU|žmÄ}©16™ÓÑݦµeÇv÷Ðgl˜ÊÆ`c[°cê—R‹$¢íÏÉ?f¼“¥;&ê€c¿è^yQÜN¸4“n^dçR;ÆP¬Ã þPíÖ¥—_SˆÍ0fßìÙ•ñÜCdŸQ ®†Q2]¥´éVHá:FƒFL§”âAû¼õU&ß{)Ÿ1‰½j]#–Þ£™UtÑóÎ8¼ÖʉHs×Ñ{9c! •Ž[W«_²bŒtæn [0zfæœSÕyžú¥ûyÑvc§]0 5g©qäÁ ¤®šuÊëšËàACÒµ:ªç/ö#"æ\D?\óíx†ˆpo.&gíž›æÆ=ã#ÐNðb›÷!ÒÓÖ|›Ç¡çÆ t¹ïJи {ù*ª¿8YÔx»¥ùcØW)-ìëQ¡VFêôiyòû…HÊî°ðrè¡{ø|¶Xûpß"Ô "¦¬À} ýàŒª·¹š÷®ësd ìf•‚\àø÷OðëÒûˤ,G’šÆÌ:u1|Špºb „¼¼{¶ÐKПóÖ;Å'y[n<1êšGh{uY£Þg=òkø³&ȆܦP;ÊïŠp&´ÃÆ´"®Úí5ÅWòó«ÓÞÉ[~ûWxÍÞЃ˜¹ÓKÏoµšMŒrkÛrk77å–(üoµî4±|5W×¼ôÞFޱ:è«*§NüM?‘òÁÄÄ#€ä‰šWÜÑ-+òZ·BA64é°$»ô)£ û}óÝeËÙ¢Ë|+ÚX×-:ÌÛ–ãæëMA3)ƒÂh))šér{Ê àYçÒœÉw×ÈÊ’D#©àWëʪ·ê9÷\W‹Ë©Ù÷?M¤ô–©{Ç/q1u‡KŸœRXv9¯Ú»5 äP̯}cìÄRv;8²Z^‚Jçóá™ç¢ÚŽÁžó¼® ‚­æt¡Ö˜*NŸÆ“­àð ™mÄ)´ÀËɲÍYbPÓù ~ô¥‡ì¶˜%-cUÚ¨©ë›J¥óù©=-¸sÚjݱº_ŠX.Ýoù9¹¾G­NåíñS-ä›llnªÉo“–9”ÊHÉþNéZñ›ûqõ¾ì웣t\‘ûk$LúvÁz2[ÞEÏŒ‘ÝPUèQª_¬=¹µÊÎÕBáÝD,e tH}ô{× ¥¨ 9jùh!­? âj9Ê嵋˙=æÞ!_ûÞ˜0½â‹/añô‰:’`>S„Öju«­¸ŠY¿#tÊæzråêÀ&@f™€0¡Ì{ëÒI`½_¹Ç³×Þ9W€ðÊX©°º?‘(L³œÃ(;rŒønŒH™óùéÊ#·ÿpfäë{\µ¬7&mPµ©­c¨„v1[^ ÕaKϘǤv¶'>Æ‘ü|„T˜(N…ËÌ™ÜK¨®³þRãó¤ïþå²rMÀ$õ5`.ªrýSþ¶‹¡oažGq3È×òÆÆÿú9ª«¡”œzC×N4ç­sO»Ì%x¨<¢ ¿´4¥‘MVQ]Õy”Ô¯Ò‹Ú*¸&ò½S@xb¨`Ñ… 2QLÚà+Vµ ²´ãðÏk_ù¸'Sš/⥱ìx€!¼/ë~˜ÓÑÕÕl…Ð3ó{Ñbcø8Âå2Fóþ3ˆH™¿!“àýg{DzI÷‚-}`lîòG 5©u0 êüÒ Ï@ôNì€L«ø„ œui‚ΆŒ4Wè[E+á ¶T„™i‰ #7õ¤áÆWa^Ä]=ÏʸÓë‘*´^Áb^éÞ‡Ý4×üµQÏ^yéz(®Ô!^ö©ËÙ#5NÞÛ“NóIX" ’9,ìEô§ì7CyÜËr˜=r†ÑÄ“”¶ê9˜†Ò\”¯¢ºß²D:æä0%}÷¨ ´7TÜY7»è†76÷GKƒ4oE#R•"ˆqð´>C&mž(%ñ(ØJ³f³&rÛwɯOÄHâftS}îmjËZO>ÓOå$~Ì+Ò³ÄsÞ0 >m=eûÄ~â9n%ž5Œ™\~¢õö딂όMHQnÕ!×NìÕ3a#z×D¹9g‡úcêü;dÜmT°il™B1ÛÎQ$È…!g’Ÿe<‡½-—èzÓÄd[PDQ[a|y[KUÂti=#i XñBò}Û¡Œˆƒš<ÄpxJ©>Gc-J)†ËöðüPõ¼P0Ý WUn×½;4B»FÔqVíé±|ß°ìê"99ꔯx4¤÷A‡õ¦v 8l€±#g µ~ŸF1—zu'7 ZA{Ü:b[.¥/Àoôî]Yïÿ“rÓAR‚(®½Þ…Ç•áåS²¶¦ñJÍf̪µËÒP·$Å%ô§o½ªÃ¥°43lÐÂV*<(( #¯f&ÚŒ[ºÏ·,XX…bYnGЩ†v#Îç-ÑÍöðŸ\–`Úáz·» ª¹Úpfü²‡ås;º†éËѧm„ÇïÁ4?¹ØÍ?ë~˜P¸êóÚÊΫÔ,¡éFöt1+ô&¤õSÉr̃¾b%[hº4SB‘«ìƒv‹Ãú¶€U«Kóâ›}¸_½kµ(¯`nä³ÅQÄ\­!Ñ»Mœ›#dÛÈT°±WØ„Õ GOX0ð„vÀ Û›%7aGšÐïq–°A·¾€=aÏ8xI­ÅSŠ{l"ÍB?×:°ûQðX‘,u"ç…CÂé—Ž,¾/¦7ç›çÛ"gºÆ¥Ä±ƒ½šâ{¦ßÑ4!(U³õ[Ã=anÍ[4·ï ½åEí÷™²Ò\Úl cq|ªÄ¥JÂ`w¹C2bbf¬w9½hÏx%>€ï%j¯0¡0¬™¡{3U׿zda]5MeÔ©iræ­™ÐPûq‰}*h>wž<)™Ÿ²5f±à(ìe[•ꀄ4T<ê›ý‹¨rž9`9s1æp¡FÉJ[ lÞQŸ Õ¼ÝãXÎ š=^Reë0¯MŽ­«2›"g²Øƒ¾ÚH [• cÞ¬÷I &½o¸^qBº‰ eL¤^r¦XéõÈû>¹Õ³=Ý^S@ð·`êIA°37‰zN­³˜*˜½Ê¨¾©MÜ:zàë™ý9–ª}’§¥/ßã¿W¤x~AJ®h´šN«¼|C…*+yëà€¦üþ¤ãO§~>;»ß¦—j<²÷Ytþ„OÜ úèH_;(~ U1¹zqÉJ ÇUßîMYJÛp ëפ¾¸Ãz,b‰}"GÜ·)´s,Ãdvãꢺ,òîýá»ñìØ‡;ŠÇãýé8?e$k7gÍ™cɵB&¿wÇ߉¸'îd€Y´I37¸•:Ì!ô *‰w×ýý‚®b™hÊ]×µ)NÕêŠ ù͆#îÅöXŒ#…Ü£©Ф$a•ékÜõå^têÃö‡ûgçSŸtâëÒý5ó¾–\øØ,Æxðå­W.G0cK_BÌîoÐQò=I¼r°®Ž±F"ãÙ›66™ ¹£ˆT•A&`å1NT†d(4xÞÎcpV¶tB4/Wè2êØ;[Xãz„ê¿?„l"¨¥˜…¥Î6™1›×èœòÜm™}¹¬c~KSJ -`?ñ¨"å¶ý š0ð D|eòÝÔǧ…twlhKžñ_Öú売؀Ø&Z\ƒ¬ID¨»¢ðT¯Cn¯Â£x"63¬ù»†¨Ýñœ.ÜtPIbˆ×¡›±Bcðl%žóî¤ZàŽD\i¾Ì-‘¶ 3Øgä!põ}6̬HÕÕÔ£7< ß$:Ž6œû¥y²'šë cè[OcP‰Ã‰Ä?ÿÊÏ6¿¸ã4†¨Ÿj¸AßÏoNΊ7}4ùFjŸ˜-¦çl.I£ðEWÙ¤y¥¢¡TÀVZMÇøNH0æ›:?UtšÊÞ{<œ<‰õ6C½µÏFa)‡ŒóšÂ×¥€"LZÒZµ²»¢]ßßëvOáwEy´ÇZ?9æk@ÓS4.ýù”TűPƒOàH8L@Â)‰@égÅœ{û»¥ÝútržÙr²Âqnù¡·}÷äkV­ÄÏN[X—i _,H­ík›ð‘Tøp¨"P«Ë÷ ÕÔïà\š"zS{ŸWÆŒ½~ÕÈ2“Ú@dg›AgUw¹ì޵·iA ½ëFùážÇŽ#Ä#a·.=÷æAសŸên ?ËþN–뾑$r‰©Š›{ EKîbd4&D°å¾⾈Œ!1Û‡0|vs‘VJ¼òfe(ÊEi•ÝŠ%¼­ óÏó:ýê ¢gáoÈ?U‡1ù[`1Œ14r€$†LÏ“&ŒWV×É%ƒ‘ÜxÍÖ~îš4^#u‚É ÿcï„Æ_d…O.¬OAô½ç}„1³ù÷“…¤0[ü`B®±b<Ò#kÖ÷b©6¶ŒzjÌÔÔ¬^žA× ÉŸívàølkïÒtJ cg —(Òz„│Ÿ+v©w]=熨s zïÝ¿(‹su/fÆ,N$rjurØÍdwv@zjª>C 'i/¡OS»¹Çp¸3>‡lé\6ßFÜ»ò2ܾég­&‹¬Å¬õ-ÛœrÕñwEøi†ˆÉBχ(Õ“?ùŠyñä`‘UÖZL‚˜ Þ\¥¸£¢F˜Éªïu×+¤Œáòìäé!“U"ÓÚ«SwK ‰±òN¸d2]ù[÷Q,ON¯*À/¯y1~œ®4%<”À{#¿·Ÿ¾Ša¨P† Õyi]'ùEý‚ AñƒÂ. õ «ì´´]¼ü¢TÒÆ-„ÀC+†#<"Ì·ã»j7ŒÙ[༿í'¶Ì¾¥»Ëæ4+óR~ð¨sÓxÍò<Képáœç”…ãÝE€2j¡]|µËÚâ0Ç`ã”ñäþÕV‚Ó]ÌWEö×Xµ¬ÜÎ='_ÜņT>¦ß­©¯¼cû)œñÖ%È5N?×W$8l8-©˜ ‡(ë(d©88Ê\Ax_•t7F6Á†¡x6œ.|ü`¼PLr:O_¶=0x6¹E˜öà*¶ÑKæ¾ò ƒŠKÞ]p_:!šNª˜È…Ø}Û¼·#¿Ùט,_öf¡¼Nˆ)žOCÔ«Úá£îâå,$.íéŸâÃ]ê¦wÀñ¢«ä&FBŒªâU)Ómç †o°pdÅ\}éjDw°ÓknJi@â ìáûÁJ¾ÿ…%é® >Æ ôàß>ÆÂŒO‘bêáY¬|*:G†¿´Æ £W¿‹K¾—têÍ’óâÑñ¶N„.¬¿ñöm´[|ñaÎÝÛ_aûæûlQY 5„zêRÿ^ U!Þáâï–ët,§#Œ Sp\$i%eŠå¥Â17I5aZ³î›W\Å{…ºƒBÜš÷_Ž7ñûYåjZgpãi±·\~*\1MiÅ«HÝa3]ç‘?‘,TáJøà}U¸Dµ“y†µùkæ—…:ÒŸqóÅŒ»“-/Ë éã4æÚ“wì8GÊ·Óø ;ÄÛ *œýÆ›Âlh!ià¼nvÄÚñw»J¤aò4 è)hÝï—©ÐR²3½nk,>­Ì¾ºa„%uV-â‚Z=¬Þ -·mã¦<öùüÁ­SløJ¥|cãLI6"g#Å[OÕmsÑÅ­EŒüˆ’—n(çvHd´By«§®*‚:bh|Ç1ÈQ›s£"Hˆ)Ë©8 º{Éê-WŽv2âöw1ÑS:^:˜JÀž'Ó×q^àîümš}…8`3Õ’|+ãÍ\ÇËø÷Øv t⺺ۓº‘ÁüïÆ±®övü]et—:Î5O!ˆ O k!UœÛ@鈞;/Îk*0»B ŠR§®cþìoÁŠ[lþE ¶„‹xé²ûí‡ëni68{Fž$/5wûŽI“yÀØiy®Ãb%_­`͉bò[¦{lÂ’c,nþ8Ïè ´ÙÚxWÉV¸#=•?êæk%1¥nj32#á5:…¨ÄºÄ×mío0í¿ŸPôRçSÓýöl9n èúã™áiÇ_<ùï†AËâ8éuêKjW8Þ/Ì#Žp÷´ÎÜ _I6Í–³×®-¦¸M¹ë»,%Ì‚']®6 ÌOeÏ«¨ÓÊ3‘ Q‹+bÃëÐÇPHóiÆ|O™~hÝ3¶|¾?•Vï?«p·gÙ3ëîºLêÉPÀŒÙÉeH;­sm’¡opø´Ÿ7&ß4úékìA>G·½‹€f‡ Ö[$P}º6ŠúÒ!.NNGø´X‚(/èRÑö{ŽwEM~€}¡2FØúÆ­hœ“[^<(8•kYuÛŽDH׋ÉüßüÀÿ€ÿ'Œ,öŽ6Vöðÿ "Xïµendstream endobj 85 0 obj << /Type /Font /Subtype /Type1 /Encoding 404 0 R /FirstChar 2 /LastChar 121 /Widths 409 0 R /BaseFont /HGOWMC+NimbusRomNo9L-Medi /FontDescriptor 83 0 R >> endobj 83 0 obj << /Ascent 690 /CapHeight 690 /Descent -209 /FontName /HGOWMC+NimbusRomNo9L-Medi /ItalicAngle 0 /StemV 140 /XHeight 461 /FontBBox [-168 -341 1000 960] /Flags 4 /CharSet (/fi/hyphen/period/slash/one/two/three/four/five/eight/A/B/C/D/E/F/G/I/L/N/P/Q/R/S/T/U/a/b/c/d/e/f/g/h/i/k/l/m/n/o/p/q/r/s/t/u/v/w/y) /FontFile 84 0 R >> endobj 409 0 obj [556 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 333 250 278 0 500 500 500 500 500 0 0 500 0 0 0 0 0 0 0 0 722 667 722 722 667 611 778 0 389 0 0 667 0 722 0 611 778 722 556 667 722 0 0 0 0 0 0 0 0 0 0 0 500 556 444 556 444 333 500 556 278 0 556 278 833 556 500 556 556 444 389 333 556 500 722 0 500 ] endobj 73 0 obj << /Length1 1647 /Length2 11589 /Length3 532 /Length 12471 /Filter /FlateDecode >> stream xÚíveTœ]“-î ¸5\‚»»wo qèÆàÜ]‚;Á-Ü]ƒ[p‡.ïûÍÌ7ë»wþÜ™_wÝg­~ÖsήÚUuvZMC¡ªÎ,fáh”vt€0³³°ñ”Aöf®`5G{eG>Ef5 •«ÄÔð†q¡ÐÐH¸M! GIS  ´HÍv>>>€„£“§ ÈÊø ©¦MÏÈÈôÏ¿Lfžÿ޼y‚AVÚ·7 £“=ÐòFñí¨ Ö@€%ÈPQÕ•S–|QÖÈ€.oE¨ºšÙÌŠ s H°ttØýc0wt°ýU˜åK 0€€æ 77 ‡9Ðé/ˆ àt±Áoß`åbêy;ˆ#ä`nçjñWoû–Ž'ääâøfaÿ†½‘©:‚!`sðUURúyB¬M!ŃÞ`€£å›¥…£¹ë_%ý½Ñ¼¡Sz@þŠeX€ÀNv¦žo±ßÈœ\@§á 9Xý3&€ ÐÊÔÅ¿Ѽqÿu:ÿ¬ðŸª7ur²óüÛÛño«ÿÈí,YPØ9ÞbšCÞb[PXÿê9KG;Û?ö-\þsºü}@þêú·$L-ì<@KVeGÈ[HÀ‡ÿ;•YþçDþøDàÿyÿ{âþ«Fÿéÿwïó¿RK»ÚÙ)›Ú¿5À?æ àmИ:Þf @ð×°±3uü5p@æÿ›«©=ÈÎó¿rþWkmà?²þ7Î…ÿBÌÁêM!fv.®lƒÀÒ  …*bn °4µ{;¼¿÷5,€.v à›ÈŸï›Û¿`Ö s[‡¿Ôàút°ø×Þtû»VE) ) YÆÿbÚþm¬úÖ O' àß"i+9ZüÇâ/*qqG€73;7€™ƒ‡íí2¾]G>NßÿCØ¿‰Øÿ¹V2…¸€<úl,ll쀷÷¿ÿþ¹2ü)sG‹¿úHbê`ñÖzÿ±ñlîêâò¦øßÓà­ò_ÿ} €@ 9Êò‚£¹@°MZf:¤?w`LR¿÷;;ì@ˆSIƒFQA@µc·Zø&_…ÉŸš–oü/­žóGNÏ»ò {CßñìèºS€gù$¾Tô=Xk´í<Œ{A¬F%èéÇÚÑÞçsŠpzÜlZ{[cŸÔŒŠÿ N´tA:¿§ r+xO}ç„ágžZ‹ÛñîvmáÑ1mâ¯û;º¾áÁþîKøž]bÆœXd78tÚ¨çb=Í ï/8Jг\+Pdéœ=i%­§PJ26á(6–Ž Ûw ‰°TÞóÈ/JáÈPugõÜ•¥Þ¹wÇû­IÅ(· >câZîôœß’]±lú–/ØhæÔ¼ˆ¿¦F:µ`k…à[ó_yÁ:Gâ:ˆ8x;¨°º« .1¯Þhz NÞ éT{ÝŸŸÚõS|—°M–VmôdüeTðqlŸ‚/&/ŒJÙjbk–ábÖ6¦•$=L#9!ɇ¹€ËT™8µöÎ!\{¡ÂQù!ǺOa @ËgªÃlÄô_å£õ¼ÂS†as!¡ûiOýóf§Ù‘È'ÂåÄäl0Ô5€^Ú‚£Ÿ-ç•à†x%Ò€:ºW„A8Ûv(œÍФ‹^Oi^ç—nÀcð¯lˆáA{iÈr›Ëæ-Û©òýt¨‚ ”ßr8Ôq.V§aìm²¢§ßØxú1ØãDÐÂt䨜žVavÖÕŠbˆç‘Ó—Nñfï`-ùä³S‰­Ÿþ`±ïø÷x§öÔçÝ‚«–¿w')éÁJ¿KÎ5dõ y ~`äpDH€;¹{ô†ôŸäSÒÅã0ªƒŸ 1‰©§°[zìM´H·{•¬½$ËÕ4£‘Eˆ‹¿7É]Ëxÿ!aÆUe†s¢¡?ƒî»m…×.Fìz?¼n §[0‰+rX³†ZŸª1%óaÞYÍábÊ+ÙEõ)ñHßMÈŸê­ÈC¢ì€çµ"ãs²ê þv‚4ïc¥NºA±Ü}#Yõoð«{5.†ÊZõgéq‡¯“ÑähÊÃjÃò³„ƒ¸—#mí¹nhåŽxV`Ã¥Ðüåf*„b†ñÛZ%‚á¶šÌóEÂ]¡#ãZel‚ºs“¢)ñv£"’«R.TïðsÙ²öH JÞi·{ R£Ì~†Ë²{hIwt uÈÆ¯hdCé^u†û]¼mîå:Xj‚V"xK§³<¦i/fBÎÖØWjYš`s_×ñ®u‹ƒ—wÓæÍýVK‡9E·Jk+½²˜_6EQn>Kâ-·©õR«¿ãÈ® "Çï™ô®*ÈãÞ­~qˆt}ÍiPhCµ¦0/õ³*â2e3õ®ZKI¬6óvƒƒBînaNBBa˜ë¬R×dÎ#j\\•6XeœŸ1¨¦^4P <¢™í²Œé«}"D–)fùnµŠ¤»Ü&>T -¶‰“æVÜ×Zs~Dîð™ ž#·vÎZ›Ïñ²\ÓÙ"¤¿zçQ«¤ûIÚÝ53šSqï6OMüÛ#óŸÎ‹Ç6³¹òTƒ ï€9ÜΑêüPôÞçp"¸8d¿º$ý‡µ{2ÃáFû¸†=¬½ˆÛ½øGÝÍ/½RÝ!cEqç‡!Š„Ÿüs¢ùG„zµPoï•“—¤£@³G/¤_ÆY×}ºKtãJüÚCwFʸƒÄñó5cÏ/d jâÌ|‡¿Wöªyu/H1Üᲂ׈°«+WÖCDð;ß™Ç;Ÿ°³ŽIÖ»GräGwu®÷r9z•sõûšƒ!3«J‹$¡lIÂdpÉa×(SòÙ–ƒ÷hI2Ã#4j±£‰¼Æ‚Y¦ì­ð$ìe¬vϽÃyº(M;œ}ÿb™êNqW‰‡Pnˆí¶ú2€WÑ+_îHŽZd)îëôüÙìö~ÛwÊß;ãÊøï'ÎËÍW_s-V,4®h%ùñ¶ œ2z—?`ŸØ?ñ½2¶CÚF=‹ì“ýì¶¥ÉΗ'œÿR_j·äæ?£Š±,S`þ:ñX/–µë]5F†q<¦Ù”òJEäÜñ¼]˜ï؆ì:Ú®µ²ð%"ºZÈ2|î¢ÛÓ¢¼Hšêðåì:+ºIAJýL[à—îPÍU3¯q¹ïsì8ž¡õ9"°(Ù4ælÅ ?µ6jz¾D×ë„6]1…|³%àÇ—Ç]lÇr}® úŸ‘ tÖxòZF}2i.³Ã¿Û÷sf<¦cž§žvƲ$ÉoèO·‚3£O¢ç¨ ñ§œ¸k¢wÁOâ˜3MVs BbLëœ'd;kT˜ÜÓ´D¯† èËúVQބն¤¸>¶|R·‘l,DƒÎÄ„þúN¬•”þsmþ‚_z–ÉAÄÒÏXùxsjJ_I_Ftv2¬àTË\ …—WecóÎ>F®j…­µf3 ¨ |·?bVý5ž}.»ô=¯Ê<tI.pæ´à·“\\Êà1¸˜Ø¸¼œ”örè'•O[[„,ÞäÌÒ’tVΖ;<´¤4yŸ€˜ùMp{‚úèfÇ'ò‹ê5‰¦}3:±k3SƒÏåÓ©\ç¹–%Ó¸Í'Α––Ã'¬Sßq¨Ì†ý¹†-›´ËC†¾¯ Á6r—%3LyÍûõ¤+RÂV/ªÓ§ ¡èµÈ×-æjÑ‹_˜>¼_ü•W…Tðªiàkç¦ Ïü©¦ÌMj©±`,ìw80ôôCB‘‹H`fÍ}ŒeCþDGY1Ä*.#‘²—kå•GS ª7ªòõ AçZ»™Wº©`µ×¿lsÌÒ:U ¢pxÅm™$Ð2–CH7jš†-»Ýœ ]T!1 \ÀÁwB£´#½—¿Ë'”ZÛÞbOUÿÞ»Z!°ì®ìù&Âe;Û÷v$vMWaÊ-•• ¤XŠøwüs½s~ÉLZ«½b•×€OBì›î¼;Ù6Ãâ¹D\ñï[;2ïÓ®UuÀݜ©Ž¿UéufGž”úS”{%,ûzÈYC6[M¦óòÎpÉ3L‹c{Ÿ¼4¹á{œd  FÑ·Mž¯ëj&VW—{o‰´ò‘^@òÑ^ä_¿ 8 JØMê¤Ô‰¥E¿š8å{ˆ»#zúa„Ã7¦¯\‡üŽBV|üž8S­Ù~•Z›ïð0‰®>Ùúñ)¶tõcŸ®æñMvĕø}NupNä­†^&2«dÀàDÅ(d,.b6\Õ~pÆïX•'°·¥’ò;•©ÆPq<ï^5ˆÑñ—ÔaŸ êïr¹u¦89"ÙõXçG ê±‹7l÷äpL?Ý·‚ÿ¾Iø¯{l‰L[ÚdIýäâYHH몌#"'˘å~TšpŠãd³”§Sø—,Ÿ÷[«Ÿñ«P¹YGRHê³gm28ÜÙWXÅÊÍ‘q]X;L¨Z tŸS7~"nðj,@Ÿˆ{ʼnõÚ*ûªëMïÑj¾ {DŸÑvmV½—d3ƒ›mÜoÂLLaà rÍàV¶D ê7\;긴„ï¡?w}L¢ö/u©3.¯pm Ìå˜ÂLo„[Ãy0 Á™$ù#L°6ùûu h:ûÀ³"Xžcâsµ"}?p›ÿ2žèáup'i¤4J…´´‘•bªãó¥xiíÝÚ°î×ìD“/–Å®¸ž+ š=ü)[ÆÂÑj×ðQ¿]—¤{w²Uø«%ázz¸®HØûÁÖŸªÛùùŸ¿ û7ÕnºßÕa«8! ÄÌ¿ÇÝ,˜’ùÑš( µiƒ/Ž¨Æ‹£æ¿»(5%· —„:öš(,¿pn|óEìL+d}匹ÑyÂo¦± ­¤›s{·P$2Ã$7ð˲aÛÏA\EiOÈz¬êYûAÛ#]­oŸ€„tzc–W÷aHpöG®&ÙØÖ#s'ž«ññv1¦­2ƒ\«%$wÐØøŠF9<{puÁ÷7iÆM¹ŸÅt ®^µ¼ù=iÑ7g»ŒÔ®¹ÜÖ½ìçìEó®Ðð/Míy'{S("y°?³ö&”¿%5ù9“`ã»›í@^ë§z¡#ZØ2ö©hý”üÉ•{Œ;}+“ Qœ\PÃ{a±;çœGÕTž\l7ió÷Ãö,Í/…Š«Méö`Ÿ{f@Y4i¨”k3ªqðú2l•R»Áx¨(”yò(\û5j6\ו)ÓÐÃÙLU·¯ ÁœÚÏDBi°åG—iÔ&i€¢1JD|ßôB}áXLe’*FÖd´$„ƒÔ–óõ­Ð„"åo½._ôðññw™&›˜˜ ×…àÕGêa—gko\ATø?öئæŒYW­Uú¿æüh7V9aˆýpNÏÅëÇñn’ˆÚ—vU'ÙK:>¦ªO•Šª¾$¾T8wì(\Ý·È%$\JÀáí{(¿ê4ѸÎö^¯ÿ…®ÓH»/SáÉ=î‡#4œ-¾ŒA ÓÎïžÎ5*-ý­ôL~~n;›ìéÖ͇M§±áËó‰l·©ÂgNÕ°~[LOaÿçÑ<‡Üò}5Åèð¯ ÄŽŽ80zGûnèh\©S`°\À¼šBö çï§éCrL"õÖXAû!ó±7,-<4‹°áÉÝÉ™{Nh8V «eó²›>YÝDGz:ã¿R«€ðBŠè0V0›§¸ôlÕ¢ ÁtLWf/Ŕđp4€’9@_‰öì×oÉÔQjKO·“Lœ‚ϦülZÁAštõö¹“.eH¿™Ð–5C›øªÇ&ö§V«"ÈêZæ{«Ž^^°P%Ò9¬¬•;y|HÄp´µ¹¡!FŒSÒCKdâ¥"lfTC^s}ñ.‹¹„ÎPþJ2¥I^]85ßfš±Ä~øRƒòu”ñ?kO±P°¾@våÝ_Ê~ˆÛÑõ|s¢ˆn%âk–{¥®_ùƒó(&MOì(JòûLÌ‘8CÐæf àn¯ÉJ’:¢t®qiûèŒ×ޏ0ø[û[—q¿—”w ÇÙXöÄ„P¶ŸÙ—Ý)$?uxnhÏâ•™~TP(}¶Ú>±MøZ¬}¦'§ŸéJ­ª>„j¬ãdVt=påÍ|û±–-9˜kOF0½ó\,$d˜G,Ç¢¶8SnšÉËßaš`¨[°9=°+êäa䪌mGwû¦ßëyÙZÿÞ!ζJ’ÒÅ9?žIŽ÷Y×pmhfÝîUs]]ZºÅ k¨’GBw‰€ô!Nk6•æeå!ê}¦ršœoß)å붯=Å>+%÷bNÛ3"yÓÃô]/ÚtÖHË/ë¡ñÑ8ø’yÃÚçŠÐ.N]G½»L89”g麕"µ÷±½jϵn¿s,X#ñxɤódãè²ô{xGŒ 8^„gkÞ"Ë y¿Üísúûu¤P¡í/©8e¤mÑ”Ré°Nx|ÄhdüE;°LŸ{}Õë×_` î3ûé9ç¹ÆU4Çš ¼òçUˆib‘U^¿ ®c—W}b_ð"¢Í4èWuQw»}±¹8Âo¬1+·µö¦?²×¸@E)¿­',)6µ,î@.v¥{N¹rYXɆFš vÜô†d¿4,mß[#Ç6â_|h`Üùý%Ç®]öÈVMMUògøAŽ“CÁ/ºøß^·åÓB(ECìªüïÜË0LOÑÐX”É+ŽíÅL•`]fÄ]aíù(Û0œ$Íè-c‡éÕGÑ÷Ñ;¾¥r N”Ø; aMx„inkê–±;Ø™`¸±¨¼™šÊžW#1ä­šT'Eh±KÐú¾oNyçK"rS¬ÅÂЇü»ØÊDê§®É5){ÎCiÉÁ4âáó.ü"QeíyeæVÂЪÀü\,ëHÉhHfƒÕFJÏÍû&í&Åz_)-­ÇðtMrÁá]B*pY¯¯Ì Ï·‘>2¢Æ¢½{÷ð¤{ÉòOØä<º!.j¢ yƒ=á—Èå¯vó…OaÏ´V#¼Ð–ŠQW8ð)PÝñ ð˜_Ý?«œYÈÚiœM<NÎç—Üþd"fç€Êz‡:´}E¾$rƒ]´zDé©rñ O5Zh>î‚Û#=^ÃÔÅ‘œ·¼ˆ“SåR*Ú¿`ºí¿7ÙÀ¢žµ÷ØßÅñ#|ü½1‰¶Ÿn}!L ôhñ¡ü§Q¶×Mµí¬ä»ýÙé‹íçqÞÙ·ÌAkïk‡‰WgQÖò, Zð~Ot«‘DÆ3!4žgdüšº(ü$ýc¬žE\W*ÜÚÈÇFñ3ùSöáj˜i¼[tW©-I üè¹´§ÏÒm¼Ú±±F~z8$ëÑî=†»A¨õÑ‘ctw·‡p_®\Œp™ÎõÇ 7è¨û͸š£ÂA§Ë„níè×.ëâeC¹é=·+‡D^Y‰•›ˆyr†ðgj ”E"döóÂ*gŽëzÅŽ[rÅ0ùuÚ#_ÇÒŽ-g‡…™b;š¼¢šÍЉE} 7 ÄC4¡¶·?ë‚üÞ°6 ¼r¶ÃØ),5é‚®Âúàççvæi !CÏé3ƒ4oHwÁøêŠ|ü¼ß×'Nëzg™ý%`8‡+;ò)ï‡ÝI¢å/•ÊbVËÂØ$Ä ´°LVçÕ<þÒ)ì³bS[rÍMR…ÀJÍ$åñ†Ö)†ëˆÔsâÐa“¿ýĔӈ»Ÿ»þ®;1út…Ñ/_ñ×¥õ‡¸È¬ŸŽ½Ø˜BƒiZ[Ýg—aꨙpÂ,õÛßqÆX?4zYk4/Õ²ÎØbL3ƒ×–¤‘o³ITÎx( îÏfÏð’!œ;ÓúHé‹YöuDÄ–>1¼2iÚÉy»VO/0tÙ͸"ÄÜÌv–ì³dCÇOê§L°-‚¤òÆiâ.Cå':9û¶b<·ÇưûÆö;™/X¤q6󌙺(ø¼{ì ž« Ñf‡qÇ/ÒJEjž5ÃBöµÉù쑤,ãú2.Ev‘YZߌšŒªZ¨K1Â=Äñï+š\£e$Áƒ+¹ÂŠßݹâALŸzöâH¿ôÊ8‘ÖoøÒ?Y"p/ ž.égw)ùÐñyÖ]!•ÿ„lÝz÷å³r &)±ß’ž˜ZâYð9Çwã¶ÚÉ4éq^!^íK’ ÿׄb+8+2­k’Û$tó/‘ö»)~ŽŽ~0š:óô¥m² `ŲMë6a %·O¢ÌFz"/´"kp¹k„ÙO´›?C›ãêE4ãˆaH\õØÅd?÷fYÿ …çúlPÉ£ÛêF•#«+þÕ`7l³>é–þ׫æœWÈæ§ÜÚ¦þγödY)™@¦„\>ŽJZ•+úRâ„VZéãÌr±6FÝX1¦ËÍ%$TvG÷Ì™ÍF7ƒ1þm4¾÷•p¼F¬øÀèØÑ/öIW9­€*­¾±uï` º÷’¬_Ù1}XS †4ñ˜ Íóg…#¼ŸáU.D0-|ÛvcÙÞ(»R%¸ßß."2¡dOò¹#"S,õ3î§)Æ7 ìÞ³ ]r#>²]ém®Ë^ÅÉ:ì ûWÈ­#ç»ÍQ_„8•ûÁ'å Äãëÿ°¨ sÍ*ø8eD<ÆŒŒ™ë<¯â` Ê ¢ˆ ýO¢Ý(ü²7èÌŸF©[)”¦¯kâ¸ó`¯‚^fðaEŠÑy­n:“ ž\Ñóûûî# Be{ÂöÄ‹ –7°± ×²=KÅWÆsÇüâ+ñærÏC"ºbXkø ÕÒÆÇk)‘¥“ÞíÆ¿‚„|Y>ƒjðCæÕ­WöõééwšD}Aˆf½šî]tKÏ]ÔgI#z¤PLÆ—!%¬Q ²vsD'ðdaFåÑbX¾`~táp€F«A¹ÕÒ¬;‡w#,Nú= ˜båPŽÊ!x†l%Å©€½Ú(ÅþKðÀñª>S*¼_Ú'|QOØèÇ;±tØh(Û§*S./×Ý ¬oCŸû¹Äã4òXšk¬[X$_Ð9‹Æ’ƒýŒ°wa*!å…¨¸\;¿GU8+Uó°ç¢‡¿¹"PÚ*$’ÃU‚yÏÔ}ø‘¯¤q˜@Šàí¬!Å0‹šLlA^Â9\‡e·­~¦PªOŠó#¶ƒ!¹ÉG¯¶¾Ñê’|*–ñ·ç˜ŠÜ{2áœ\‘ú5ÎtTPá´:@”v—¹Øfr¥ó[Ö„…©°$²VŸ83Á²Òâ¬;:Ú+ñ*L‚Ë:½FÄh]{x#úœ‹¤€ #iŠ<×ÖFbޥѦž¦sÇ´,RŒWyÏ1qJfxÛCÞvŒG?¡ÿ"ujNºFØï)ðT ½™ÍXYi;yOÍ1ÒC–ðÅ?æ÷…áúaÑþ÷™5JQÄAdFfìÂ|TëúðGe72´0²ÉQÂkŸdÏó°OÙE‚è9ù`M"&2á«ÑÙ—uîˆWO©ˆÐÜ\ñjië¯Â]Ûæ›ýj Òü½N<õÇ@fï¯ *ÇËÞõl?yTŸQJ)Âjí›pù¥HÏ^+)&$J,O¹p‚>váÈÚû']®¦ÆYxÎq"ÖjÊó}ðLEMËZŒJ=á2FtŒ-'l÷K%u;óæ@9®/ h2ž¸ÇëvUô¥p½‚0ÒZøØÀiéà]…,¨,ˆž öÛº¹ËÛ–I«‚ömžI7û§ø|½…hŠ8I¬1÷ók|§ýŒ3 Yƒ-Õ¢OÔ÷j†ÀÒï_*Z’¿‘ú½g@%w»Ÿ"L2Ê2œöÕò}$‰Ö{²Pˆùô.Ô>p÷2†1äo¼N֮Ћ™/\ÄõÑ‹ÏADFò›¨ âîZF²«SÅNêO£™WŸöF ÓRÆDâô66^±dS­ùí=Í]þ§™S]e›ÙݬSÉO@°÷ËKœ×Íšža܇Tb­Û\¯¬Ú~uéh-‰!7Ú?º¤BôÀ’$Õ £Ù‹¥Yˆ§»j#ní40­Y ²Yë a=ÔK“¡$‡“ÈBÒ–W÷*÷ácÏ×µ›w»9ºîÜ…•ÍÀYÑLŽˆwá8PY¥Ê ò¥ÞÙn†Í¨†½çºäþ?«$‹Ÿ -ÓP{.üFRíÑšÊÉäAf§e_ v’оù~‡Œª© ·;ñ£MK3y]nÝØ÷¯zOñQ€\E•ÏgHš{P[®ž½¦¦2Ò&ÉJÄ•RY’ëI&vBs—âL£-fEá€tÉsMÙƒ6Š]6þ¶SS‰º ‘¯”4?‰­)‡KÎ̸dTqÀFüjl8øJC1BÝÁ›ÇP;áLm§Ã¯Ü¡¡I‰¯h«¡ú –ßÔŒ=…_³‹ÿy®Œ þ°_F[á2xÍ2ÔúÔr©*%剱¬âåSN$'ù`„ðÜi͆Ò{ŒÙÜAe ŠÓæ>ñ¡v*_cR9—PòA>ïÔu0‡>•àÔ$!U6l#q[Ó&t–Ûb{â Ãl2g‡¹ÆŽ6;}|wî¯vÍÇã$}X)¤š{t(¸ r_4Ö­S‚[µÄo]d‚g1Ÿ«3»Sô£MˆjîM~I£õÿn3Ö´5óæõš ËS Ÿ°I[³í}ûý%Ñ-e(ñ°"—-:– óÿÔÛ,k,Éd+¨“sødåBðpÅ­r‚œ¿L2N!½ûø×]5X:1NyÍ«³¿†‘<Ïå`x§©ä{©¾(§8‚ÚÄ©à1£ýðÉPîj ¼ylî&¼£S iP'ŒÎ)*l—ißâÛæÕëmbj¸c$¯^ºýý$=W‚r4Äű|¾Ò„d‚Fy;/B² x»îU†5¸¬¼"¦ G†Ñj«áç0/ 2E ýùç‡Ìhdø®oíuºØÔ>O‘$›i%-Žìšœ|£>hÌ.oØÍ-fŽ•üE’Ó%8mÉ×; xM|Õ‚Òt ‰'ü’]etcD¸ŒˆµÄbÌtb°`ðA¹gÅ^¤£€ƒ ÂyžI2˜EŠÝe«c¯„['psbäb„[ߔɷÞOÝ4ˆæ("Šz&à¬nÿ,j¶¤Êo±ðªb ¿•þ܃º¤ºådÂTŽäâln¥&Ä?¡â9Wv$s:øî€!³4­,&âb¥•]±hÞfL#ôõÙ­àV¤¥3Ç Og:$ú¦™Mm´E‘{Mƒ¦m€+Zµ—T¸N(ÞÚì¤'±"‡ÛŠ@y¹…çÈañ÷vùÏŸNf·>rÕ «-àm‘zï³b#L¥:oµ5èÍ¥Mv1ŠßÃßІ´â&¥øðTèé"©_yL-¤Ðr€qÒ—ÐMh7­YËè9)ì`"‡.#8qˆ“fäìB¾F\R— s.žÖ{$™xäGžS­Jq˜ÚÀôá§-„f‚Û& pÞáÈëò·¸ÍJ ànRh€¤/ºîrS)÷ƒÃ»Œ““Ø1Y“âTÎràÇù è)œ,ͰÓ{ ’®§à–ñavã!+Øã•«a'³Ý |ÿ@4ÞwßßN?÷±Y\cv…QâMx­~£æÀ=çZtÕÏK3tàï(Í=’zy“2JýGU¿oî;eÓxÇ•fÆšàôk¼Ï&=ãmçG²DËÍ™˜˜ž‰u;7êg²T`;ÆÀGàœ»ž3­áÅ ä÷_^ûðD3~»ËKó¬¨WSm¨Ë3Y'ëŒwÐÔi²Ò ³ÍÏlû¡rJßjçR¿èQC?7.y)Î/Ÿ¸9£Ùy,w€yd÷Œ/÷!X>ïuE°'“úþ½Ù¾®\`·þê"cí»ÏùŒå’êþËÁb›öòum¢É ræ§ž”úé ëéDç»î<áÑO¥—?Ãß.->£†».ÌctC“A¾^ByÓfrÿ¡päu††É¸àOÖÉÕê¹0 UÔÕ·€422zàF àHxn[‹±GÑ7­ª^zŸ!Ƶ&È.H`?™BT[j:ÂjQÚyù¼v bªäŒ«r嬅ކ cΛÝ^«wì z!Ù*“}Å*…–Ž”øé6Âå‘d(ƒ€pÕ:ªïtFV5Á^w…LøóþX÷eŠjÍÑ&KoüÃYR°MJ+ ûšú®%ù¡TÊ#iåÓŠýf€jîàá,'#!ÈÛpØLöËmHÌær_dº=‚(Ôuk,õ’ºÑBA³ËÕzDr¬b}¨wèMû<b‰É)Ð ¯6:ä•bw¬Ã„ŠüȶYÂÅæ}}íäสp&”u„ûºN¬QŠFõq†çö‡åmÊb%;õr«£*~dSm+vÙÈ‹¢Düœ<šJ…V‡qéÌWzjÁ’ŒËǹ­E[Ç‹R³¬ôfÏô5ÜãMp,8ž,²[­E]¡¬Ô‘“úÎþnj¶¨4D^Øä±ghÛ_Få°| qó”ðÇÝ`2¿¾¹‚­¤Â`_<ò@» ª]<:b±Ë*!‚sVø3»Ÿ0»ãlѵÌ¥HãÓ¸*òðÔ)缎: G '½ C8ÓLЊ{Ç{6Àïɉ]½†KH*¶È‹ÃL¼…‹ö½š IþF©É~ºì¯tﲂ§¼%œÜésU@ç3ƒe%Oô'm‘×j,V,:"Xþä¶ã+ÖuÀ¢3\ŒxôEz2ÑâN´€¼(>§Žñt¡5Âo°Áà‡þÊz‚u'‚©q;¹€–ÀÊ£J ¹"ùªü׎Ôuó8ÆýÕ¤¦›ÊÓØâÛÉcúÇ Jím<ã×µpk‘IR$¶éOK«bÛ®Š‹Ã'ê„ô\Eê¨6> d1GM®2OV¤&Û¿4 w{)6:Wåž~Ñ\-lЯì%-þ†bŠDàn×c~þ±×ŒËºp‚¤¢ˆ™zÉÑbNõûåë‘Ñ‚¼ ßyGۼЙ Ð)>™»KR”ÍðO¥lÁ¦\^o’¯f37f ÌZ»ìJÉà…¯§š±«|ï¡YÊóÁp³Cs€Å‚oTƒ"IõJWCÞÇ«ìmmA‡ ÜÆy[å{ï9&Ú ­UŠ£&·¨u2Wþ»%Òý›AQŠÞ ÚL@Ê=C$^Cg4?íì…:Õ)lÛw†2ßcRÍëÏLða¼ƒ¾¬úsè)lMžs®7¿¹Bûé©ìµffœEgnüJ¨Ï­þüÊ1✣©ÓSùieÀœ©Éé³Dá¡]q.À»w'!ÏŽ¥«ïS€‡•;½¡%ñž.þŽ%¢Qj,ú. VO%ÁŸ¯Lzå¤ãS« ‹ïØÙÙS_$ã\ðXpÄ×ÿäµÉ"°µ…D$4Èû‹t$ÆòºÖL\Z "­ƒðr¥©»žÔLk÷{?u”·Ÿ¼ò¢bñ)¥*µ2{ÍÂa"Ü[üàÕýU‚ÿ£b{ÔÊTÀPG.u Óx o¹FEØÄc³Bï‹áf1«Ç—æiÖrË3766dx?²eó®Ž÷NŽ…8`çh©:ší3¤q%Óëí©û¨T½ê×# ¨…€XBÐA]ÛoÔ”VµZ«gªä†\Fú)à%/UÑtKUÄdÌŸ.3¡5hqO‘YqPGyñǰ@ZZ°ª.¸ÆÐyª´NìôE™n7ÕY‚LˆÝ˜ÝÃÙõú‘:‡ØÅ®¨h·‹ÝnVG\Qtª"¥¤gË:ž1M][((=%üŽuUc9§|ŒÌ¨UÕSjkNÉQ¹¿úh4ÙÏ7pÞ+q¹»÷tuBŠ43Š<˜g´ƒ–kXŠZ$F9Hv¶þt'ÃãnPo'êUMØ©ÃÝí®Ç½Ì>¼çjÕc¼6È‚|tß/ªæÒ{]»a­ê@²av[ÇC[ÚxÙ_šÌ;~¬ýìÐøp2|i€+ —ù¨ZÞ½L< ·…×s÷<ù@¹æe"(Ukuoé0ÜT_.7Kبj;.É}ý}~‚)Ú|ÊšÀ î’ö’s.ÎÕÛ Ý%á™-\[k|™²:BÍüÌœx­GËv§]–‹¿•Ï’vM6w_€ç~Dó7;Ük9úÙR«ó }¯^YóKã*iJ´Á·ÂV»—wÊ™Wä,ï× ¯îý qéЧÇr\xú2MYíHïÌ£ꀜr•ók5±«ä°/Ÿh¹°¸Ç¿€B+c ÞÝæ_3ÌøteXºEh,Tz”5jòÓcO >=Ž”Ë^LµR,ÈÃ8u[ˆ2â>> endobj 72 0 obj << /Ascent 668 /CapHeight 668 /Descent -193 /FontName /LECETH+NimbusRomNo9L-ReguItal /ItalicAngle -15.5 /StemV 78 /XHeight 441 /FontBBox [-169 -270 1010 924] /Flags 4 /CharSet (/period/zero/one/two/three/four/five/six/seven/eight/nine/A/C/D/F/G/I/L/N/P/U/a/b/c/d/e/h/i/k/l/m/n/o/p/r/s/t/u/v/w/x/y) /FontFile 73 0 R >> endobj 410 0 obj [250 0 500 500 500 500 500 500 500 500 500 500 0 0 0 0 0 0 0 611 0 667 722 0 611 722 0 333 0 0 556 0 667 0 611 0 0 0 0 722 0 0 0 0 0 0 0 0 0 0 0 500 500 444 500 444 0 0 500 278 0 444 278 722 500 500 500 0 389 389 278 500 444 667 444 444 ] endobj 69 0 obj << /Length1 1630 /Length2 18676 /Length3 532 /Length 19578 /Filter /FlateDecode >> stream xÚ¬»sp¥o·&ÛvvÇv:VǶÑÑŽmulÛ¶mÛèØìØ6¾þ½ïœ9Sç›ùgæüñT=÷µp­{Õ®ÚõSP¦2¶5ŠÙÚ8Ñ330qäÌ­ •l­ål¹dè•€¦Î€¿rv8rra “¹­ˆ 4ˆ,,f...8r€°­»ƒ¹©™€JUIš––î?%ÿ˜ ÝÿCó×ÓÑÜÔ@ñ÷Åhekg ´qú ñí¨ œÌ€s+ @X^ASRN@%.§ Ú ¬ ΆVæFs# #`bë°ú÷`dkclþOiŽ ±„G; ‘ù_7 ›ÐîÀè`mîèø÷`î0u0°qúÛ'[€¹‘•³ñ? ü•›Øþ+!;Û¿ÖuÁlÌ휣*ˆˆý;O'3§b;šÿUlMþZÛ9ÿSÒ¿taþj ÌmN@7§bÆæŽvVîcÿ³s0ÿWÎŽæ6¦ÿ™Àhjà`lttü óûŸîüg€ÿ¥z;;+÷yÛþËêæ`îä´2a€cfùÓÈéolSs8ÆfEÒÆÄÀÌôo¹±³Ýè\€ÿjÕ?3Cý7 c[+w€1ÐŽQÎÖéoHÕÿË ÿ}$ÿ7PüßBð ½ÿoäþWŽþ—KüÿzŸÿ+´˜³••œõßø÷Žü]26€¿{ øgÑX8üÿ| ¬Í­ÜÿO^ÿÕZøïtÿ`’NÛ"dcú—&¦ ÍÅÌÝ€Æ æNFf«¿=û—\ÕÆè`enüËí¿Ú  gfbú/:3s#K›H`ÿ· hcü_+øK׿òg“Q×—£ýß,Ø*ü'w»¿¹ýjdmÿçá˜?lÝžôÌß9ô,œÌïßß„¸XØ~ýoBþ ˆù?ϲNæní¿u31ÿ«úÿñüçI÷¿ÀˆÚÙÿ3:ÊN6Ƨí þQ9;8ü%ù_ àoÕÿqþ×Ün@#¸Õ%[#ž@‹ÔŒ4§ZìœáIíþ^fðá »’•Â|ßjÛŸÔЮ ý÷𠆯iîÏ6÷ÅS»})šƒÑ^,+ÊždàeÁ/Rê¾|ÔMŠÚF½Ä´3õHÏ«™m­ïLj»“ŠJzÅïP„Ó¬0WOÔ¾¤.ù¾dvHÞF)õ1˜( hµ§g ÇO”ƒc#ÃC=7}ûø´Ù1°ä<.ˆ¾öÙøZªžÑ˜4‚±Bñ’·ûšÏÒÊdfÌÁbnxµ-ÇŠ(ã…éÛ}bŒsç 6¸JL EUQ ”ß®ž‹ì&XÅàœ´ã­B zS”û—cjÇ“6¬Z‡Èœéô‰¼s·M œ®µV¸±¬ËºÃnO»¤)€ÉȶM,ñÑhLýhK™—ð¬¨yŽá¨N{F(æX+'?Éëµ¥‡kjyÜ+Út×#„ 5P i0X{… ½_ÄYä?I~Ê[—FDÄU'5ÈÁ†³GW ›«ùùÉÉ‚½OæbÍž‰„îÅá/—º/e_Ôº'Z|cQ=IêßœÇ8/àôQ¡œõ™o7‹LÍ÷|wß%ˆÆáò™=GzwÖA·Øy_}óN,y B¡¿ \9®…}º²nÃ;Šx=ê2‹FiØHñÚ:/—=w##Òä£8÷Ð77P̯V&_þ~’ Ú5±e®žyN"mª~¹a\¢¢Úa¢{Oƒ$sÔ–qw´dó‰þ²œ÷å‘õó©R˜ËÔý† $’5‚O¢?´–¢îÇOXSmÕÌB&:¢cDZÇÌÞÒyâ—^¢0ÍÉ’~}ÔÖæ¹ÌþœÊø¢£Å•è—˜¬öd„de®L•`½Š`äü¥‘AiUþJL§E=w;'Yñø¯·Ã7a`W'5°ƒ!{muç캰.¤µêŸòP°:‚"l¢~$KqÌ¥>" Ì®å êË%þ ow`Á-(c¸è˜Eå+Ó¬(¬…„¶1Ö.$ÕáHûVMjú ¾UtâÐÃY02væ\.‰˜[DÝõÕ‹: ¯&?ëÖª_c|µ°×Gnf•®‡*—4B<š®{2ÖsP á;ó„ŦœÖ[;ôz—ÕîöX ¨\Ûù)–‰†»Ì­ 7YçøÉÅ n¬Ž5Î µËü&ß&”YÁœQû$Û´RˆŸ¬ü$º0p_#å°ZÖ<¥ù¸ã‘ êkÑ÷yîå;¯}†S{S$PŽ=O$­`¥¦øÔŸjÖo°ÛnãQ·u]Xc΀ŠyÓ×/¿GjœRurtß2=r6á jèÞ†›Ç[awP…BåÂ9¸Íä5¡Ù×~8d‚¿‡ÔBŠ„cá¡zì qèvúsºáï½DF:ð•Ã¥ ®—’×îÏ‹çÊ‘wƒR®ÐÇɱÈVÒs±¢ûI¨×<µåÓøq'ÅñU?|¡ùx¢¬74‡×øÚjJ†$†‚\`ðŸIMÕ2ûÙe=th9çüzíà¿Úç²KìUÑ]à…*TÓü)HI±ˆÓd˜‹d7ÇJ UÕ{rûH{×û- k#çÐOÌ;‘^ÑóJ;y‡ 4O … ^ïÙ铤V ™áŠàCßj nídLIññ#…ÀŠb–LРp 0/P¬Ù¦å0;½T¤%ª²dÍ}ª/ÐÆáx83÷Ü7- ºû <@Þ; Úl-3ÎÀ'Z0úä¬AV!y”=ò7ÒOžÑ*ÒÓÞ´Ïôèl6ýðŒ‘6°:Æxø4õ!þ©•{þØ<î0„ðŒ®ºÛÞèöÁ æä&ƒ _êºÆa_Ä,º²ß3žžŒÏÞ3ñöO× µÓ=$Hv´ü ¥6æMýΠûef%Ãù÷—à‡7˜ÑÐ.]`j–ò™ÔZËúpY„²$eØwÿí¼9-ñþ@8¿ãf E·5%lý©|2À™Š; Êk«ê~Wq4þ†eßðmÐK—ÈV:ï\¹ËÔ&f™S< 6).)m%–ƒ€Eüm„êÙ9dRƒsÐ3†gÔ©¹“Ÿ Búº?#:O2ŠŸ´&‚qÅRwÿ ´];Lå(à„lËsº”n×G×µ„ž±j3û}ˆ2ÌÖ³@¥Å»nÜÃÊcTÉÓ½­<øƒUÊÇÞ Ol” ©² š‹¨)444Èö3™6Ú`U­sÀZÔ1nÂJ„¯…j/ÂÌ:ê+ 5ôè$ÊOÑÑ×êÏî½$ð)Q¢µWõaŠ›X^Ó8VR0mRuäÎÊÔŸ¡–R½òÜ´w³FCöÛ&ƒÛÄôÊXØ£qÉYÄ­VNsˆ`ŸkßÐð›ÿ|½ÕC /fBaóë¦ ®ŸEÙ+¸‹úÆ‘’7øÎm°ÂIK‚¦ù³¶»m“=±™a•²k\Ü›;m¿´ÄÑ+ŸÿÙ[œ›©tˆ± ð_*ÑŽˆàV–c¯_Ö•1?¨Uø5 ¶`(¹¡RÔZ%ÝÝÊ÷zK×g 4rž$Maf ¤Cwù£ûgf&`b¤µ¨?¿D‚<£Ä>¥‚$+8ª­¢ã¦ËBæì6X‰9Kn&ÝT m£aútíÂmÜú.6ŠïŒýw4CÜ‚q¡ž€ðqq3ô ñÜ@C¸Ï ª8{l·T1è.TüoÆà„xBåÅÈŽ¢c¯o!«@æ'Û?¦%›Bƒ÷÷‰†-¤~©ÍD­¼ö7ý0©ä„ÏDÇ'üɬ¯éÐæ™°ÈT»ÑFëkÆ)õ¯f$¯†Ý4]t ý?@‘ü¶&h¤ MØûÌÕ$·Êâê’±…MoPÆè<ͳ͓ñkTò´I唌HÜèyÏÊ%è£<ÑÆu¥§@Ìe¢ v£ð$Û†Õ²ÿ˜Vjö!?Q¾þô¥ø€{‹(üöÊ,«wÖà~ï|' =d—#®|¡_ª ¢o ±X;2¯ÙrÈ&2Q‚Ð|Q³YË›5ö¯—ŸY̰ù>ßRÞ. ½ž#¥*ÌQ¾ÒÍÎR¿6·Aøõ¼tªO? \…‹Üsygæ³@ÁI-î€[Y4¡ :RQä;ßë©PþŠõy§×R‹ w%tíi¬©Á}§uhÂk1úö\Ó2ȘQ¾ ßh÷öFL}(id¯Nk’è5Za¶ø‰ÌÉJ{ºq™°9õÐuÅŽà\åûcRÐìM¼‹>o'ÆßÈŒ àà ±‡ä&Æy‹éu(«qÎÁH¡¤…óú“g\¥D¢[•mþûM1øÖ´PÜkV´ZwßmBÇËÅ­¥Œ ÕðU“,<Â×"Šs{4Ô+a[$ב_]ˉÓú¬ƒ¬h’aŽH¡c9áå'£Ô'ŒK¤‰â“š ¹&Ûé¡ÛÛl£5̲râˆd®dÁ{ÜØÚœ]•wœ“­ÔîxŒ’^M`"Kß‹¥Ò-‡Q¦÷§*÷éwAˆ1ºŽkBZ„.]6½D€>ìð‘ÞsqÐL)Ý ŽÊo‘´aÔ¾„9®»ð/Å…¢ïVÀÀd8©@úÃïÆ0àðòM»ªzž‹4×S榦©ŸÔÇèïc'†eƒõÚnêDÐq°•Á=õOðh«*~¤r¢÷DÎt ÇûWŽC—RA‡P)„9rÑ¢è+BßB›3êÅûKÑr6ê<É!+$¯\ËÚí™Ý,4(ZxM:E×ÎY+y¸ gS¥<Ï n¼b.‘çë;½pUÓ¦KÌQCŠžÐÇtÆnj&NðóüðºÕT°ú ÌÏ ªßiÔ•IÀ6fzi½æç3¥0J+¹z™Ï@jgE“Ú1øð±ãÙ‰îÜ,p >ù¯ŽŠÛ]a«ñ‚Û—j j~;T”š$—:ùþ8G1Kìv~«SWÝ-ÌìRÓ~“é8LÁ¬“Ä7öØFC.Ê÷ߛ…ÄÒíò+g‘¯2å|—aðài > F |ÖÊIãNªÐïŠ9›½a×áYC †±‚ÕFã•Ê%¢æÁc‰8v;ÏË"£”6ìÞ)®V%ß«èìXU¹+¾Ý-×|DÿIÜN,_U÷TäÁŒßƒãü³úc I`‘(4ëºP¥1b¹v7ýâI40@g\UÖ–¿ Èù°”Þ$kNúžFVÛß™S™’êtÅçw¸Q YÖË™2€”ÙÜ©9šIõì2¸Ð,²4{v™¼• ª`Qcý´ ;úhÚŒŠÖó« Xë@$1àðìÒP Є-„Ùøuâ„Ї)… Õ:æ8_ßÌ)¬A:~Š3É£ïvªî¯á‡KÛóa%Sá³+ÃÛ0èŒq•d™¡ÿd7ù˜ÅǾ˜èû9§!rŸ§"¿̈ÑÎÞa“È|MyóYiÞáôXØÖìPêx%?Œ^äÚ.­Íq7‰‰ˆÞ ŸÂs¨\Š|ÒôTÿÞ3Ž~¾i¦³èá8;DÀ | üU…¥X·b4ÉqìÈ|3WäFÐcí˜Bž½4³€‚8@àÊœ/‚>Vd‘¢“}Þ…á›ÁÙ‘G"Eõ0­œfSñÀ÷[’|C~&’Ž>ôHc<äQ !ÃLO,®9  \¶¥ìW0ͽ0KMÄ´¡órb0éð}ˆ° Eïw'ê¹Ò$Ü–Ì©EEŸØÆøL,"pàœøoãÆá°«ŒöÌùÖQ%HÌ@¥ 'ÁKeÁ ‡ ©ÁØ? R'^ä¸õUUüBK¿C»ÓÇ"!”ø5ÏcM¶È«9§Íö RmýýѨ1@бyŠ< øXžôg§ù©+\è©í…êa ÅHÛ¶M®†pœdççCfº  S›|s Q/kkT?ýÛqèÑdà0ÅæQUÕµèëiûk6_kônöz‚‰(¿´gv•p|ÝåĭЀ°wËlø95_¡R*‡¿Í¾×‹PIüÃSOuCµ=Qª±äí1.Ëçƒèׯ¼‚EÉu½@Œ&™ÕÆ´­õ“'_tÊ» ŒF©‘ÅgÚ)¨¶E5¸U×L<‰—ÍùdÕ2,¬ö{Ëk„ùZV^¿¦Š?‰ì¢JÈs©¦à`¼ìE:|à‘ )†#Å^6ؽ²o¢Šß+¬= Ý(Lò]÷ñ“\ÏQç”æˆÝÿ5¢ÅAè%úÎåHàÒË…œMr¢Øåä›j‚ô%,3µ‘,£ßx!cÂþi»òñžçÈÑ`z |Šç ?•hâúõe¨ø÷Íoóˆy{!mætCl ûHÞÍÛ9?L²{?ËOã) =š² nüÀÆxF¡gÆePâ_VÛôHØÇ —°QSP·-{Ó²-òÙ á!2îÄ‘0kX¸>Ï`«õ±‡O:=Vïz箘ÛñÏyÑ€¢M&ㇳڮÍk*-S¿ýÙź…©Û¼?ýêS ï„«"R¯èáˆñ=Ä–âa5œ¾~sìèêQù?䲞ñéîï‘%õCk†j<¨ÿYµ`ö_DÀªIï)¿çÂ+§ãóù!umn-„Eµ4É˨§îk6½X®éƒTç®¶3Œ!oÙëøï†Ux83厌}{dür&Ngä_~Ë zºÚ·Sè#d.39+ù„­ïZ=À ±î ln ­$Ý´¸L½¼o¸Gí¯’+ù‘ KQPiZÇbxw?My.À»‰h[ëF÷ƒôO‡@¨xC%.ÖûúäòËYAL¯Ø%öã§ìÎ ¶•|Jç±’¿ é!ã– ‚#Tw)oPÓ”J,4"*¼Z<íg~ÎîŸáî©rïvß@³(%¦Þ‰*¸™"ˆu Ï’?…ûM'%øÔ[ˆüàœlSªÓÚXdÞôg».µgwñè…M)®“ÖKU;ü¡+_ìã¨8÷£o‚ª3õÒ¥ù”q®õñc¨Þ·û©y2„ù¼°0-¡3ˆgoœÆÆFQð/K3¬¡ZfÚ6_¸žæ?õv#?2jXTò¶¿Le>õòŸœB‰¸¯E1Øß» 3ZUœð%;^Μäeâ“ê÷9‹¯ Øs ¦•ß³ª!65êƒ8ƒ¨$̽ÒäïnYÜñseÅÝ‹#¡ê4|»a˜±wKîø‹ßìÓºŽg°-f"&éZ”®‘q>‡ ñïmÕ¿¹ü²ƒ;òYn¨¿'îò;»ï²©â³CÚJiµÍ󕑦6ošÒÖÄ«þRhhþ½€\æ~ü5#\ƒïWÆaì}*œÂ|‚þ†;_&rºG&8ï)õ@âÆ7‚ú‰Ä|g²Â~E ?CÖŽXGÜr=6Ò—Î`KÛŽ8xKD¶EÑ„»äú|«ŒÄNU¼„2·b?8[2+0Í=!8‡U…±2Ī>Ö1®ßc§öþ,\¸l¯ì£ä½ï«·“s!l@æ0âçͦKl²ï Åkï¿l/TÁ÷Ô9g®:¯ýö­TWÊyq¥ÙZhNƒTœ(ޢƃ¦WúÜ×0sC:uÁðe ±ë'Sù/ˆr‘÷Õð@—–ÚÁU"ÏWgéŠÍg-ÈKuR»—øHâNñÛˆ™¨÷<›±â°vZˆdÝâ'®?d4¨)ïýxKņ¶ÖC¶á“;9-û›5ú5 †]ØÃ“¼.óÚ@6Šš¤ì%õº§>À•:lïò}XíH§Õæ\j-'µLLÁ¶’éÒ† c<‰ <ït å™NáPý^Y’qUÒ:÷¯§Ý äoiZžj(Í@ÕÕh*ÛêâÇ»ß×2Ææ›aäˈKãM‰ßîÿT:¼Y6÷fì(*‚râY „¹Ez¤ ( È0@±fÝNâ¦o´5#ŸT@W‚6ªRÇ"m ce‡ŽÐê‚ù<¤m´ÓÓ@öîØa+e.‡Ò¹/%‹}ÍÉ#ÒpG´”&Ä8ˆ@1؈û<4£ySPêP-¬ B+ÎuZóå-/±‰¾Ñ7ÿ-C)©r†wRŸòËe¶a†­…Ò›XC×Ýa59¶eÁŠãÂêCyEŸŠú>ôöæJΕáÝ3½µ H UzFõÃü¾ž¢àæ´(ßM·™ Œ;ñp«Äú(9‘*)£1KÛù&äRG—Ÿ•* %!í!4È›0v¨&]_+y ÒÈ ‡è»I\æŠa[µ“ž vj-ÌÈé•à"É-sTq**‹þ}Á—ñyl-.d<ŸÅÙÚÅiÚ^2Å8|”½ëÒf`ôVh„xƒ¨žu>néD¢Ù¬Šö3@­» Ñaˆm1ë%ö_lˆ‰A'äGÊÒľwè{¥1áÇ…Mt„Sl¹†u¾™ßgÐþ²/ŠÈÔÎô½ÞÔ€1Z˜™ ­s‹(,EwÎ÷xká_ivò˜§…NÜd½`gF;u’›´#´3¼CÊÇy>¯Ú¾$õ–£Üˆñ6äÌXìF‡J·õ"±^`±Ûj~1Šr¥,&t ½ê:Y‰,4ôørÖ¶Ÿ–{\(¦Ì=Qnm *cfIð…H x ]~V;JJJOdÕÛ$¤3(mêŠßh¦ü{´ÇR]7ì¨|+ÕÕ3ˆðl¸îIÓg£N-^¦ÓM pX¤·Ö%0ÐHâÃ>ÐB 7x¹za(i*’z–ò"²v1‹¦ð@úVTÅ5ÊËeÛ6jl•ÎrcÞŸoÈb‡눽ã`̈êÏÞüŸÔSν¸çGpt¾A+ñâò–H±i‘nB¦ÜÅÈ ›çï©YýAäψ¸µOºev_¦Q2' -q A†ªýÑKeÖ‘ŸîtæïØì¾âÅÉ5‡t]ˆÃIDUôþjøfýXÉDq³•´ä6à@ÞÂpF¯5ÿ‹/Õej!çW+ò˜’ï¾°\`|PZNy¼Qx¬Ú2,™‹à7Œ:6äŽyˆäo0’ÿ0™Z½6¤3wìli™V*øøA¿: :tògˆÁHÓhÊêêº |…ßát`2µÌñ´î-kBÀö+º®Çk˜gê+DÊÙ^~žìcÅDHnñz“*l¦u CÚX½6è–K`c9šÒ–[Tåf”sPãò”å*ëV–Zñ¿w*Ò#éã\%D‘Ëmƒ‚¶¼/~*/¶:Ê;" ŸÕlÃéŽïbž'­M}(¯¡˜û~$ ‹^tõ•znÉŒ!ÕzEiñÄÿ¦ß¢2³Ë,(>”f­[ê4ýv¯Í˜WO]u^–0Á ÿ©oПޗË$Ña—#/‡?B¤jm'níëN¾)ÏÅa®7OHU¢W)PŠö˜M‘ö“íf4÷MƒaÍ¥nI|]p ?X¢u¹êøŒiâ]f~-­Øº’<(Fï³o‡ïC{¯/à3ÊßÖ¹·»++‰”‰³ŸºF6¹=ôÓÊt¶2¬¡ ±¾œˆßrײ޹t„p<µpá“õ,»íAKÞ™Å\'×Oì!—ÝÛ1»‹ž|ÜXÇf¶¦ÐœsØà)5KìÑÑÃï7„Rºæ?Ï7ˆ G¹åϧußSïôv–¦¶¯˜œÔ— wÖ‡A}7|€Ï«©Ib–‡3ÿVcKã:ÑÄÙz!Ò—pŽ5¤w–[˜téœgVøZ¯g ¼z¡·R¯.˜ŒÙ»×W—JíÁœ¦¢ñnSí9‘¿do¦ÿlÜàJà¿Ü”áyºüQýÁQƒåb-¯2ût1—Še‘ÇT«ÊÃ"¹Ô%ßHkïÊM2.ÉXYcdè^ZKæŒ!¬²ñÓˆ*‚Hç5,ü¢)Ÿxâx¢³ìoª²3öâØ¬p*,¦a]†Sê›”ëL5ÊÆ¿ë–Ê_¬BÈ80Îãa¸ûÜÉPëý$Ãx³CúÖ¾W>Ô]N[·Ú|eG4êäÉ4WNy°*¡½®rÃë;:$‰ŽPáÓŽàû¼!þ«.]î>îïèCžÚô¯ÀN¬3./ý •aÁM/›º2k©¢‹Ãè›‰Þ 8íN…;h{Ø’/BÏŠü*ù6š2 z­ñ \Û£#eÊèXšÃ9KXÏ,ä%ä\è*Ã#!E¨ÕVÉYuòèÆ¤N*1imŽ˜¨1µãPÓâÖD'¸Ui.®Ôƒ6K#z:¿é¶ÖÀˆzç~ßÒU§ëõ™JÊÃ=t|$`ËX µrJ'Ù™¹AÆÚ’‹ä7<€ mÅNï>- {UÏS’%DëZBqT¼0’}šìïkù*ßâ¥×µ%U“6„÷¨¨„9èÉNrͲiRÇh‡F®ñmµîXÍuG2ãáÛ/Z1tý Ñ JXõ"ÕtÒÚJÉžv䪸†¾|4 Y UÔG( XÄe¶‡‚$1¸}t,0m_ R»ªXe×TRÜ¥vµ¸Oš^t½g5"¿!BÏ´àÀ‰)ïQ.:?úeÏ­Çļ!«zÖŒ¾¡»¼Ûw}ÃRT›¯ªšìa=Õ…ü„™*”ì}N­«È¸Sã×&õª<wˆ‚%“ð_0]þÊ/†¦L†QùÎò²‰à³Ó»'¦‹%kÒ;án—™¼AõüÄ„Ï+"â¸*Ùßä84#¦Ôí…: Óät¯Ú×)ÉËDIÒΑ¬V¹¼yÚÎÎ7ï×t`g'ÎΡôúK…=\Ó¼rÅñËØYz^ñ€_ ðøÉIÏo³vˆËõ±cŽÿb@ó@¼,ñÏ‚£5…yø­ Žé—í‹>™™sñž$˜á“Ѽ“U3“=ȃWã)÷]•ùa£[$¦Á¶²´æ“M³!%Xßán.: ±\3¤Kü g¨n¾j¼îÞi){qíƒãÜC+);(–TˆH̵ù•±œŒ˜dÞ…ÑÁ!.!„YáÝ&–?Ž^¦mŠà¹{Úúòˆàƒu&×¾¸$žÛèO}w"q•n‰ Ê ôg[ Î÷ºõã||ÓÉ0¥Êxé€9]øL›'F«²Kûe¬|€é÷ËŸ€~U'òdžbv€\Ø3B·*4‹ãÊRcpJŽ)¸5çVÁ²î¶—a–WøÛJ­37…„´zãø¼….êØ{ÜøEÝ)aîÜ|î Öz®ÇÎêqÓ%ñV3ërXSUZ™…ûæ·}›5'ÞƒåÎb­½LyÛ7Àíø la³8ÜͶ¼\w¦ß)Ïq¶ÌZôóT2W¥¡ÞoòüA©jXp$\ÛΔbø°l§XdttÃ=J¯0:¼Ü„Žduç‹‚­î¶cF r¤TÉÀ8ëˆ×¨€uSwK~,N°ˆE‹#´Ð'r‚Vî¡/©RùGMYnÖ ö½ÌFé-ð&×.G?6 9ì¹——– Ë‹AÛÑÎB¶" 9cðŽ£€ïðIJ!0lhæ”ežñ_nB4úÖ¬½ŽÁÏRy¸¢›{»Ì)ʽýë<«ö#ßJQÀùÞ7ãDŸ»uÞé5Œ/×ïfBùÇ·_2ï5Há°~¼,ݳh 0ÐûPws/£tö\Zh¶5wgòHŒÉ¯Zµð<±o±»aµ¦¸û˜8Ü¿‘U%)(˜[Jß‚(£?.-*‡ôò_`lz#ÁAQ!nÒ ~77ãÈ™bðK¬›Oa”‰¡æþÂå»ð¼»G »‚\Fw¸E˜ìr<‚ma€Õ„}^©pÇ'ˆnFùâ<èMcÊô 5<%,œog`ë`. 6?>õÛÑŸé*>DÔ²]¼œ\ê‰:õ°çÄŬ“OjÜÆ?úb÷°pn¸¹WmÓQ.·È6ÓL«S©ctðIKî\ã»Ä «urñÎÖƒ·Nº¶pÏ’Þ0ÀŠûÁã „_%B ’b‰Ì¬}MrF mË©)ljoÆ#éO­¶Ð‚ >”óló`FM¤«]‹×K¬æHÆ"-PÊ⪻N&”w[f×¢À`܃ÓÀȘà“WhœHÊ+ðÈ4I;ö1•q»Ó ô°# «|¤4¢&?© ¤íñötˆG:ừXÚ6óB*å¬c¡½`-¯Æ`³ [pf_›ÈËØ|è]éì'ÂPAº…"¬œj–¡j ×åÀhAR0ô³ ìõ®‚|õûX1ºÏ"^TŽp"÷íw'0™ÁEd«J\m‰?²&a'd@7¡¢À@ö¾è chPÄ- 1Œ^ǾÊü0ã“'cÀÛÚ7¾£©ì^ñ¯’wiz±I) ­«Â<½¥ ~#»É_Lë¥_š_Uºv›ö”»‡Û-ʨå/^!ßJ.-*”+/Æ5½vlèöÚǤ5ÒZt{fªXj+pâŽé#¡5è3ú¶´= @çm‰-b®ëéæI5霼˜n1 [o¹€#v«D·A"F®-h”ë®{±¯'‹x„J1Ý`•Ôã˜1ã[iªÏÞ  1”FÀÜâLWv"ÈžÆ úá Ç¿ ÿ_.uꃃ#ø9\‰SM}dg)÷Õ„oìÇQÁé¹É‹k˜ï:}ž¶×ÿë «]ìpJLP¾Ox‚W”$7Fu#ÝT À„ß ob(RUÉSÛ´e—ä+qÍ1d…ñÑyhÞ)Ù¤gyËŠE¶Î«È¢0mFÍCßB¦àºÝû¿ÙálšÐ¶7ô N é5•·3ã׊nýádï‚4¦)â-z¢6”ìjÐ ÝMV|•\Zr~q·ŠºŒšj=þ©$M‹ôÙ]>j`лÅÍQI`õÛãd8ÔÅíj\²Ž«‰y?–ïà ÔGþ\¹k–»’ njÇRL ˜1yY}™Tq5w‡Y¼È­ÄµUnÞ:Ls§ÝùRDøpP¢( DþÎjáÏÙ»Ÿa¢^ßÍ_’íî͇Ùé9Åwv#éè°ž|9¬ÌTzµAÚNæ©Y]\Þx ˆXb-ŒÔSvN‘<ÝÆ•¡~ܤ\at·‰ÑN‰YýÉé”n‚ŠÙ†‹pÝak"GÚÐxÜçÙ{3UŠ">ˆ&ðO3Ogƒ•ºMêS)uB*¶4Õ¦¼Ü1…÷It²¯V¦5m1]›çök!¥ÒUÔ‚Lå¡ ®ïѰ0ªÖßÊýxü¾®#~sTƒ°c”õ”@fKÒKéD7ˆ|îö&®óv-dÁƒµ3·mUš7sS÷ð”ç0k“Qöne‡×ÌÍiÂváT¤‹âL] Ïf‘|Ê·4%’Ðæ2dQæ©úÑ|?` á¦œŸ ‚zçïœ~®;Mà¤ÿôöÎ#þ§&xð"­©%h›^7 e'h)n"ŸÞÝNÀv•GäÙ©³‡Mö™ nÒàlÉ’n B÷yèQÈgúpµß.y°fø¹8Ùƒ³Ü2GÆÇØXÌp@'¥Ì’Ú0 “BlU¬¶´˜lOh´à2*à’»‘sYqo¸l1¬{igÜj­ì-T@zĺåK$¹ã•. Õ t¸ÒºégV'HøíUu5Æ!®¹þLMZ"'b|Púõmضd[?KŠÛ`í3Šë,ikf—lñÂd°ŠÎi b‹1Ÿµ¨Væ‰ïr LbíÇ™B€aÙé‘Ò%rÅÙ‡ªz¨¹lOa`’&OÈÂßmý`K°=Jv]^…˜ªë8Ï—áäNþèÞ¹„Y7&· ã9ØE¾Ü‡k²@Œß¨¥®{*iÆ>ûÊ ¼¬Ân0lHéPD1ùøeëu™gC‘»1øœZ£'H{ÐxDþýËÖ»U?< {“õ€n*Ú§õ#)^åµ€2ùVXѵ¡õ"ñy4U“Š_/4]s…b…BOϤ?:;¿$3Áòür•‘½ð^çhOûÑó5@u/õ¡–ÓÇP­ ¢e/VÛ7’òè7UJq£‘ êòâRozi‘Ó>Ø"+б‘£ÿ·üc SƒXŒ§l/Œ“~($JÝàtž:“¹®S›˜ì´%»vlÙæ¨g¢b>㫇2¥QûXÓiñ“ŽÏZ›¼M{ u±väOH:ÄŒ{Rk°’:Ocë}ãå­!5jWÞM~ÿä· f¡É/zòÒ<Ùša˜²ðoËvæ*_üSBhÞ—QÞbèZ‚½¼¨…“g*”e]õûÇ(ŽmX·7%©û€ôˆéÛÀË`×òƒxêò{¡¨*4¬qó}P2¾jïTÝü"Tï ÷Sܨ:]ÜÛœ©ßÍ’…Ρt²é3ËŠ›e_‚„rXb³±5X(ʵIÖ„º0+ÜÇE KhÅÍZÒº, ŽЖ„Âk‘¶1Ú:ãŠäÂÚ·îÙ#Ê^årK£oŸFщËi¦Ž‹H½Ãèêê.h.é«IW`{ =ÓU»7u›#ò“9X†m±ªÔh½¹¬šôjDä)C¡¹9ëÆ})__IQò°_Äè,š`ó=;d-)KÃà¯ì´ÆIÐ铹/ÿD6K~iºXžËš;¢œçZ*öÛÿ¢|Ofš ›°­Ôcd'Ïo¹´W&íf+-…Ä‘@d’UçK¾0Vöz¢)Äaj‘õf##–ÎJ!ÓŽV…·¨µ*ɶÖZB„Ö$ù£-n g·€±nµÑ…V+%£;ë©{ž‡:Dè:ý\à3¿žÄX¡kZo¨ ½,96f[ÍÀ´d¿oåuJe1ò}uØ?¨Ü}gA©¿¶ÚTº°Öq\gcŠ.bÑM5™Òý~-9¬ï]™maÄc~3|iJQt÷¹å.fîÕzb£>Kl׌Ոٚó güþìÇ*|3™}Þã]!>;1G9šáïo/½C9}ÊÅQn6šÑ‡T ye˜ñJ™Õ5ɧëÍVLù’‡RDÓ?àKFÍI^œÓ¢ðÊ/'_mPªÖÌâŠÃhåŠØ‰.„r§™mÕæ ¬a¤tv&_Td Ì);£óº< ]‰ãÓ¤.ÖsqQmn–ÃòʱޗèG©Öû¾ÿ.}<°\R ø¸ùØl™¾ìt§å>oå'öè£ßBÔmŽc#“ðXÞÔØ=”»uuN…¤>&¿mÕ µ•ŽA9,ó\ÍɸœJ ¡sõƒWÐB©1œz¸g²ÎV;l²¡Hñ¿ŽBÕ+Fâ] _âH€Œ»H VkND$èY˜‡SP†¦+ÚÏ.à_8{Þ¨žÿEɧT0Ò«´•áéGx6ÁXNÑHG ë]rò¥–iÒ=UàƒtñQò¦ùg³Bž[ "»?Þ ¦'$ü¬Ën3½zsE1=f ´2zý@X”´ƒÄ£ª#UÂÇ8t{±œçárdÊbó³‹*GŸ‘Ÿ(¿6¡„©Ä—£¸ðÉiw_aQ%˜ø›až.å < ÔãÚÆwÝ{pκ-ƒõèÉ+*[ E3$žbÙÉH¦4NBg`(·\^“„Úp©kóðúå*Û×ñn"‚iÑÒ{ûè´áGY|¹µÊNXǶ¼qß 4NrfýMA K’»Yº.½}˜°•¾PD?ŤSè«åÑ…VhG!C#§vð¬^]il æ»ÂõL:'~$Ä8»Ú½lEåo€ó FWY2âÌ”Ö Ý6ÜäâûåÚG+›õ!£&-OÍL1íM¶Øÿ0-{VŽVÞS®¶[‹÷s¿{„[}ß ET]yK%\TÍ߉Ñë]ii’p88w¶øÖ–¡e^m׿ÄqÞ•töó¥îÝ¿ŽÓ?KظS€Äoqï"SDZ\È/öæqK­Œ¬28ˆá;b…9¢Ð•)XBÇ §Ï|ÈwvžìТ%c)*å ¼{Z褘…Š ° ¶ŒrÕì&n®ÛbσBȼTdñíã<Ü¥b< ±A¯:ujÉËßS '®/2ÎNP÷Æps2–ŠÎÊÝ׋ èaf¡P1´ÄT;p¤¹*ZÓ,*¨TާbÙôÞO ’EÄÁo±}õ‚>º4n|òëÊÂËdÝ& »Ñ£ðàUªqyyz¯^A“µœêúDô3êiÚ YµÍú5”!›†Nj©YEíaüÕìùèÅïËðU‘g´«³´4¦“Œ”oZP?¶·ð†$¯]b`‚;÷¼4Ù¿}+ª%exѲÏlµ^ê^Ô ÎúÍFt ÿc¤µ%zs|xäiM(wõÙ)²Éê Aæëеߡ5qY2tYëPuÀ \˜¬7;]x›Dê´•:9þ&ö6dl%Ãj°¢fT~uªC*êˆí™,ÎýLçíkÆ‚ôî¸K¹ q'xn÷M’RE0mg-ƒƒ$~M\!½¦»ÊýpV…³rvŒ@m áÊo1¼ù4†/¹õÒ‹Ht1Ìåe|®Ë³­ø¸(É*¼pwƒms;#R!õ©fÐ2­J[[Â,mlˆEQ¿°P´ ĘYV+˜aÌa2ö³/ánÝÓ¿ëH-™GZ2/å—¤¥X"Ǫú±Ik]¹KÔ\ø;!7 ç™øèž¡f$˜˜èÕÝ‚ŠsŒ ¥TGñXÉ¥Ó…õ‰i"£¦¸?*cM•˜€½~¨Ñdmd"K‹œ­HÙ9(6œ€¢Ô°„ Žz²r½Zø«~O9ø„ÀqÕZj½ï¥kVíQ5]Îé÷\˜_ÜæûÊÃ!eR[¬Lš^^ÀöòÎqdè÷ѰmÁ=¾ôÖÒ¬†UNH>kgqŠy"–ÂŽ§‘Ïw!籠+cÚëþšÕ¬ŸW™Ä9òhµ6M;†x¼Õs¸ f1Na¥Ø×D\ínO«‰Þ…†s¿£“ciùø¯¡t_BÄÛë>¾§ÑiË8ßSµ¢¥ÍÍ/~qPùC‚ ŒfCLÚûÎ[¹a¥Ób!ù÷:¸" iAe .faÒÖ=8«_ìp£s'î#g¦VéÍô)rÆqöýÇw.Cy“lxÎÑéXƒØsÚˆCSß÷Á˜CcŒfÑ_Ô£8j¬%fÏÔÒ&]-+é(ßý ÅçƒNKÏò¦š2›ØšmÍö¬P{ñe¯ˆCäú»·Í«FV\2Ïè4Ñvyߣ´FS5o?ÊÉœ¨ÂÞBæÖ½²ægN!4ñ{=PF³«Þ¥n4TE1y LàÏ.ËEŒp}‡¸ÜìÈVª|/ Û¢24Ø',õô™\Làälɽ^ÖÐØ®Èª´-²%Vlx¥+mPÍê;í\gjï²÷L¨Œ7s^G ‰,OË<–ßòÝ^äÖgO/®VÏ1åuã¹õˆ.žø/7ÖÇÆú®^úS÷ÂaEî-ò˜ª‰‰³°qG úÊø=MSÁHºM„ËA• ›UkpÎ¥jUúŒË¸sN÷ŠÉb;⨭Íó÷ÞUÁÙñRÃuýV¾\[H%DtÜë.ëü–)Dùþö†â‚Ãád®ÄüÂ웬 þ~•Ž€ÚÈnZ¯S4»T•ÚØ“­Éíð¥@A˜¹qSMa=ÂñÙQôv›Ëìæ’ÎHò–J7*;*õ‹Í¾¯Áæ´Ì’Á&@–›¤q÷oÑ”.Ï=ŠŽy‘XÁÈ TÏHpÎŒ §°‹÷vÁ§`“€èÑh¤y…J›%"tú‰?s;¢»?hÒóƒi²²h¯QÉ<ú0›?‹µ'W®šq·øî=ÑQTͬMÌeC! ·¾“WXk»©Kmð›ßhV@&žm‘´¨ËŠ"èŒBsK¼†AÂõª­€I\x•ˆ¡Ôq]0iòƸðYYöI8ë4;†5ù±<üy\ÈÏ[¨1ÇÌ¹É%Ô]gvæªÙzü#h&®w3m?aßjc‹Pû3Zj‚VÒ‚µJ -ôáü)·Ô N¸È\„€`H\å…a<¦%Oa¢¬ F^‘—†*²‰ó×EŒe_Ý^t Šþb¬(³‹8\9LJ\7œ¾ç+Ð y³T×SÊ«¹R|ÆŠ4ì„ìLH­ ÐˆQ¸tÞ"Wø^ê¢j”ˆÝ[é/žÖ<œ…ËÖFØvZä{µ£µÝ¿ÙØq©«âÊ 7~8÷ó»ï­áǸ %J{:.ê6[£}(1Î=x '3vI[1ðn•i úêŒ"ªFqPŸV‡q 67^/ ߬i›+û¾+¥%%3U¬"ýCþ•÷‘|—M2ñ£p:úÿk·>ûÙPŒ›EÐÚ©u­¢bµC‘Zµ)µbϘ!VP{Ä uŽ™Ø£F+¥¶Z±GkÕ§¨QiQŠàÞïpßÝß}>ÀÿõúZ)9ëé(rvÈz¼õ®¤qÑêþ9!¶}K•ÄBÒWÀµ(pÝ߯ 9].¬Õ¸5Ôo9îÔf®'ˆ}ÌA=›61 k¦[˜ŠŸ4éÿ\Ýè×x2¦]ĉÈÖðÎé«V{G;_ó±!™#j¡TÇ]`µ8Êÿ`’71¼˜¬ø˜v®SX4”Ö‰O yVfÖx€ä~.8ÓD 60bI(ht$³áz('päsè.XfºlŸ²Ï-n(|¯ÄƒÍù<…D%N~:=aÜÒ ¨ ”k¶ù®“ÑýlJ{³è‘’Íñ]þÌë2É!ôjÝõŠa½cÌWb®Ï‚¢¦Æ—¼Ê|MnÒU“‰5"1˜vÓ§ë仪ºlÈ9aýë{CJ£l¢X˜‡ñDì‘Ì™^ßW”¼õ3³"×pô"W‹¶U„Þ…s?ŽÞ^—Söñr8À]Ü<¨ú5ó‡åp\¿S……ÍQFpLz@É+#²æ€ÿÔ¡ úq :n›|ÞMJþÀÉgŒ M?³ÝŒév‹õà˜žÉgДëÄÔÐfYÏzóöS™|WGÁ;S÷/³‡õxÕ2C ßœÍûn#üŒhÏ;@jí–xaÝ~ß5t6"ý°åg€,†êœŠ…­Jlõ°è6b0‘—†»ú=9Ë|TΪœá 6M-t2æxâ#p ÉH‚ͽjH;3¶…”§×r•äxåǦîñük&–²Ëàû/ê.±ñ¢ôdqjCPvÒ¦y¼Ê(áZ“ABñŠ~çÝi¿êËü±‹57Cb“Œ°Âëлc)~Èñ{`í¾Õ3Ÿßቈ€½»…+¼,ÁÝD·÷lƃbN¶‰ÔA~HÐúP¶R«;ôÔÐ??aêz2s✱¸Ö´­GÊË’# áÈ>ÍË :ýɬ2~¹&eäëÑÂKöòlúÙìZƨüL‘\9¶¥æ¹4êÜæþñ=À—Ðfþ6ïNMÏq ‡kNÔ«f…[ÁþrÍoÃË—Ž#â¸Q:ùçÏÆïÐ78†øÓä¼²×ÚRíß±›¨ ;Ì‹´ Æaè{ÙÐ.lè÷ò=i <öøýdnpÏY­Åå&@ÍŒg`ñU6¤'ä#.õwG˜™õÓúqEee9ŽF朑Ý¢“£Ì“%×bÈÓ¤#€G1Ð` ‚»IU]è–’èF0WtJÒ9ôܱ¼K ó~õįH¨ÌK2àõ¢'cfߦaŽ%f,×L‰Â6c+¾PƦñ÷†EÜ”oßK:å|¤; ’rIoØÞ3 øaö@ʆ;ù¦/ùôý•¼æ[`Zo~=õ²—:gaWåÝ2¶Ýg0Œ¡TŒú¦Ï¾Êôv·ÆsAIÔ˜ë^u<6@ƒŸO¨ùüͯj¹‰…ëürè R.éŠ!Ê7ÂÁeÓ,}ëJ½Ú·—öVV{ÉþÉfäö© Ó k9Ù˜Iï"RóZ3óœ<@£ºê3")~žõÓRW¬¯¬3µ[d`P#¢ÒjZQGÿ'1¶í¹J㔚‡[÷ZQÖ¶œ4Âõ2òZ7"¸Ë§ºXl$ÀÔ´ó#!Sè°eXÈÍOeBÞ̸ˆù4\„Ukü꤈{ÂÛ%ZõÕ³ÄÏû²Ò(«XðY.3Êw„B¼R‡gS³~3H;5élÈÎ U¹õ‰Z­þŽ€-&ûìrïhVÄ«p“÷Zø ’ðà»{…þ¢k?VšÃ”T.ü<«9ÙcgÿÈñit¸ßs¹VßL?î™jŠ·9)–@·œÔÎm_^”èþFÝÊ@Ož¾"ËcȲ1èÿËß î9e{Tx8 J.ëU—b°0—F‰q x£qª¹uXCU/*3«2AãòSYÃÖ$IÆC_Ò Ns4é0â-"#/yJ¶ieBo¯¾>º½n¬ûÒ#Ù²)uRÉ”ƒ’y´’üJ!á¹!·ÔØ%»LÐÑEÊ»µÖŽýzÉ Ð ŸPÚœï¬òÆ«Ð_ë“™¥ÀFó{…UwyàÇ'(×ý»vê²ðnaÀŒó`äÏxB ¿ö<£ÞôæOìÄ­·àÌëò.Œ³5©üZUAìú˜ùö¹50ŸG—ú3K]Ïáý±³Cÿ®döh5¶Ü¥± 3ΑˆîBìu Ýà÷;ãþ‰<£‰ƒGL^<øà§<†LQáÒñtázá|Y0ÅHAx„à¼-úS„½qè¯ÕÁ¤-|ÛJäWHHc—x. Âã„,ù ÷AŽFD>p'ž•íÊC¾ÖHŒ2c?Aª‰¡¤³ðT89òLÄÞ”Us‘ô~ÊeiÒT øá8"r®8ŸF9FKå¨|îÛ`úNM¬—gÆ)Öà/Ç¿…/`3>IÖ[4¯eÖ¯Q\8H- g©$òÉ·l‚º–JzÍ-œßIè->Ö϶BÍY¨3S5]3P#¯óõ ð0vS™ÞITáÈ~­U°DÓ#VއÊDÏ{’¹‰h`Và<ÎÒKDkQ‚žòãYhB1_æéÜÊ«Èlv*žäŠ²Ò¬~›o\ÃA52ÌêI!©NŠ\f1Wª¯àæ3Ë¢ó¦>ê ?õÅÛ|¥›M"Ø*æ›{L¶°.Öˆ™;¢—àè¾vZÞŒ6×g0š—æ^«2#0( «d­ƒŽx;‡Ý-z1 ‹‚&£È‹ã ¾:µó%¿Õ‘‰õ“8ž,ò|¿ªÍJÁl—eH¾=?Ïò+’0C88‰nA!îíE¥3JZI¡ØÝ.Db„ók?Î|5‹‚©ýJ ËË#1¤c­¢ÄÅF§õ¢Zè!…ùãŽþƒC³wwTAC'Œ#ºÎšæÄ’G¤ïSƒ¹>§íZ…³•ýòrU¨mÕC]’™¢s>|BÓ„ )Þ0z{BLì6)¸/®qâàó5Ë„‹KõY0õ¤©ÎŸBѱŠòÖÞž›—ÕJ·%fñgÆc?A]t>#Þ`Ç” 0>0çõšsz¿ÉŠf-º½¬´]E/ÎiLvëâúVG„eVÌ)¡gÕš9cg»É—ŸxdÁAû–Uï¤cÝãm]o"¥…3ÝÆ„C ›ˆ–~º?ù—€»ê Íý•êÐW•²•§@œ„éÙª²o;:“?²ê-»Â!ÇávÀ6–@dExòÝW7{–Solzƒ"iˆ?_qYò$µá³£¿ E—8çÿ<ÓŽ,.«þ]CåØ"Ÿö/±‹]þ;B8aŽkxÀè-Þç$]¼Óy<,ݰ kµÐ¬òKz’ù)ŸÑ¡/V^Ÿ_OYsÓŽÔÕs.D…µÂ©3õÄüAnO—Ùké äÔ]ÐÞg?Ñ=Ýf¹T¾<°\Ý´ ¦[¢õƒW‘¹;Ïþ§"²ÙËLF£ï kZTŠ/3«<£‹)}þãòÍУ»¬/è²»þìüµ²°j4%f€:#/x&à°J±(ž¿j=~™ü’S 4dý›C`LS"÷è}¾ÎIøÆCÇ“û) _åÑ&Äœ|QˆJ¶¯žôäjïÂ=œvu¸âÀÍL`êPwÔIó[7Þó* 1Ù¾¡Œü¡];qsubíÜY˜v¢véøº_Ũ^v÷!µ.´Ñ7M¡.þfWtDFoù ô¯½Ä‡QÿŠL7b¢½N8+íUáÛad"ï@¡ÿNØíkZç‚0Vùª\Ò@£lÑ_×ýÔ°ÌÙ&Ï1æPìÔHÕGp5}ÞE•K ¬BIGê¿ ðàp†¹:ùù8zþ Ôí endstream endobj 70 0 obj << /Type /Font /Subtype /Type1 /Encoding 404 0 R /FirstChar 2 /LastChar 169 /Widths 411 0 R /BaseFont /FLWXON+NimbusRomNo9L-Regu /FontDescriptor 68 0 R >> endobj 68 0 obj << /Ascent 678 /CapHeight 651 /Descent -216 /FontName /FLWXON+NimbusRomNo9L-Regu /ItalicAngle 0 /StemV 85 /XHeight 450 /FontBBox [-168 -281 1000 924] /Flags 4 /CharSet (/fi/fl/quotedbl/numbersign/dollar/quoteright/parenleft/parenright/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/backslash/underscore/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/bullet/copyright) /FontFile 69 0 R >> endobj 411 0 obj [556 556 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 408 500 500 0 0 333 333 333 0 564 250 333 250 278 500 500 500 500 500 500 500 500 500 500 278 278 0 0 0 0 921 722 667 667 722 611 556 722 722 333 389 722 611 889 722 722 556 722 667 556 611 722 722 944 722 722 0 0 278 0 0 500 0 444 500 444 500 444 333 500 500 278 278 500 278 778 500 500 500 500 333 389 278 500 500 722 500 500 444 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 350 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 760 ] endobj 61 0 obj << /Length1 1608 /Length2 9742 /Length3 532 /Length 10594 /Filter /FlateDecode >> stream xÚítePœÝ–.!¸„ iÜÝÝ]‚»C5Ðhpwww‚[ xpw A‚Cp‡Ë÷™9Sçί™ùuëvUW½Kö³žµžµ7%©²£¨9Ø(¶wfdebá(ìL] j&ö Œb`[sÀ›“™’RÜ hâ ÛK˜8ùZ@s€Ð ÀÆ`åååE¦ˆƒ<œ@–VÎ U-Zzz†zþJ˜zü{äí$di zûpÚ‚ì€öÎoÿíƒj@ ÀÙ °Ù⟕ud•¤4ÒJi =ÐÉÄ ìbj 2(€Ì€ö -Àì°ý‡0Û›ƒþj Âô†% ˜ @3ÐÛ1 »Ðá¯Àèd‚@Þ¾ ÀÒÉÄÞùmÎ`ÈÞÌÖÅü/o~ ðß„œÀovo±70e0Äbærp¼UU–úOg+ç¿jC@oaØâ-ÓlæòWKÇÞ`Þ¢Î& {ÀèîüW-S Àq°5ñx«ýæàú›† doùO ' ¥‰“¹-yƒyÃþk:ÿìðŸº7qp°õøû4øï¬ÿàr†m-˜YÙÞjš9¿Õ¶Ù#3ÿµ(²ö`+Ë?üæ.ÿs:ý= š¿v†ö„‰9ØÞÖ`´@fV;¿•Ðü÷TfúßùAâÿÿWäýŸ‰û¯ý§Kü?½Ïÿ -åbk«db÷¶ÿx`o/  øëù¿rMì@¶ÿEö¿&jÿÁð¿‘u6yƒ¨½å›,L,ÿp‚ R w ¹2ÈÙÌ `abû6£¿ýöæ@'[=ðMË¿Ç`dåäü—˜ºÈÌÆþ¯¡sñþÚ›ÿ+ó7yþæÍ¬¤(£¢®Aÿ¯¯éßYÊoª;«{8¼û·>Áæÿaü…!&vx2²r³ÙY¸ß. ;€—ƒ×û¿¨÷7ë?mEg';@ï­iÖ¿[ÿ·ÿ?-ƒ‘´7›ÿµ'jÎ&öæo«õŽ¿Âf.NNoŠþ}ÛßZþwûï%ÝfÈK `3þ ë´ÌtçZ¼Ü1 ½ž.VØ`‡¯ßÔ‹ üªÁ¾ia›¼ÆO5ÁL |/-ó‡Ï;rt»C]l©;S€§ùDÞä´Ý˜kTmÜô»̆_QÓ´¢<Ïæ6àt¹X4w©¨–¡€_þE³QÕdDHG&"ëªl‚:±÷^žÆpm†Õ¾õS"-á¥Bk«˜>,=?.<ªè2Îë¯o A§E4ït¡XÓæîdëy«²=®”™akQh}™9<³°ÝÌÁæ±nP®ÍFº ¹ã‡Ô°ì Í甦¾‘ÊúV1,ÚëÓÕ“ !'ãa= ²¥Hx¬Ç䇦ª6ugþ &¾â)å‡äÌDè­%ˆE@ª˜züͰ4ÉpYŒ*D±ßéÓ{6 ¶¡ŸyM*’Âá·P‘…ž}1H¬§B£‹y Oáïin’sh+ùWÜKÂøœ&8ò°JéÖ»¾ÝNBx5ÙÙ/Ñò¹ò9ûËfÆ”÷Ž˜ÙíÉίˆ©›Ør±ŒˆÛ{h[Bac]‘ŽdŠT]ÑZ)ÕOî@¶#ž%i†ix6HóƒrkF–SÞfR+·ŸY ¿½'½;¯å1‚»š¹}N‘Ô¨§â;Åž‰ˆªþÛK‘ÈÂ`õá#£fð£hÁ¢vXNN†«mÃ廆­Ö‚¨ó»1¬nøOx¾L±µT¹P¥EÃ7Ÿz•›¡’ˆà-*¶uሡ/B é…´är2Ü÷m›Â…›¡ˆà8 jhÔDrê” RËŒx©%@ÿØ4w[%ky%ê Ý5wa½Iêüsâö5È×Ë™ KàÓËŸàâROúèfòψ ·zZK»—%ú?ðùlùô¨ürE]JÏw%!6Æ¶Ý ¡Ò‘Ï6‘¤øßÒÔh8/¬o/}}Ó·ß?æZ”– {‹á‰P–/ñª _§ï—ëAÍøuzVõ‘ÐÜýƒÈÈÍŒ ú=Îõ§“oLTŸ"«¥€ ×äÓ\cûLí¦‚qöƒf µ.-SØÃT6dp§ú ‚8Š;À5Ìrªëz¬¢ÅÈ%Ý È¬Mþj´{f™=Oí ßóÇxsÁ›T‡8ÌY¦ÓMí?¬ön(;I×3FR–¯ë[5,û\ßFŸò%Ø:›ñ–ðÿ YʸB uw‹z±ZBщ=[ Šk7›r†íÍžÂ8Ó²Ü'¨×ùȬFAõîl \½t×à@¹wËÑãë€Îb}±ABbQ(;/ « §î“¸YšÙ§ÓŒÉ·.`Ï>î„Ö׎¸ÉâDåñ#TŽPÔ§‹Dîžñ¥!·`@,…α’OlrK¯ ˜Š‹Ã<^p÷&©ø@ß„r‡>8G{ÜÉ{5(—õ%ÒaØèÑ ©&h;!Æ(TˆÛ ‡2³æ³‚‡žf⟎uÍÒ.\†&– Ãé}¡5¶·í\[òä[­¯Ú']™ØÅ—‰'Z¶°q$G}ÃMÐ4bN—{£~üŠ ½¡³*‡f¯šf—ÂÕ`—.D½Z„ÒÒ_:ù}šéåÛ—ÏKN0¹é0mR¿å_Ì{ÇOewö=w›¹Ç<™,MŸ:‰H{çú} e‚¡ö‘Y@r×VÐWÌ¥qwTA£ƒ€YhØÇS™A|b*ò®e–wŽ-‹À§îªz>£ú=¹‹»_jÿË¥otèÙõÉrúO,·¥Ê3ªr"ßìùÈõˆPìºL%…û–⌑ ö|Fi0ì±.D0…“ÛC¼.Œ£Ú8\ÌŸ¾¹bVôX,q7ƒu®Ú(ÇÛ¨›¡*Ÿõ¯kHL}á9°¸¦>y¬ púHÑÑ,cÈ;–6êäºøÇøàÒ..;cžÈeÌ‚@“,¾ÆÀ$a¥g»ëóÛL¹MSj!û¡Ö¢bì3øbþ¡ÛàÁò¤»§P=ÔK þ2b[üüIÛÿ{tŠÞâOÌw $÷ sa´½>ÍŒJJh JUÜ1iK†T$ ›Pµæ/d>p$r¬ ¶E¾Ýå) þŠl|«ƒõ{ß[ À/Üì=äJÁ®×x›5Ù ŽÌhgÛPECÒðº¨;AhŒ„ÁΡÂqƒAl-n^¦]Ø÷Ì=U/â®3Å*«¸Ðšw™†'ÊÞ1²ç^s0*O”ݺ´;Ø"°^VЧåïºÙŒáY=SÅÇ F´.ak„õ(QÇöiȨ˪M,2}ôÂ[¶µLcYÜÆó: žÙiûšòÎdË`d1…ÈT¥ P$Nâɘ¹_—o9¸ÜÚþòì[l€9´Ã»Ž¶S‹dŽ›ò‹ýqäVs@­Ð- ú²)Bž¢wˆˆßàuj¢p¥o¡‰]Êû¨ š­ø,=c§ùøÛ• :7Ê6%ƒ4ÝYûÝz¹n®©t2)ˆØ)> mh²­¨ò@Eµ÷¥šgGðQG®ì1Ťi¯Œßà\ (<ÖË-NƳåÕt$ùf” l­è,WöX’M/Áß¾c±o¸®_T%™ÕÁ£Ö¬öd©·âQyÿ%^KM^´˜0’—åºp’ BÕŠÑô½¶äEV‘~Ð ³Nª™…‚É™l·6qžƒÎ9ØREE$€üqˆ¬ vâœ*£ 킃ǼE0å‹qµ‘Ñg¡lã(ê=Û4%x…-m¨5J3¢X2øTí$™±ry<Ú~fúXîÑ¥ãåã_;I²§2Ó¼×3ÌÚ*°vN†„›pßëCeØu4æÐ#ïÊš&‡¡¯·ÎÀI¡¿ ]ËÐÜBý†Ysè² @}~ú)œžjù³¹+dz¾ÆãŒZ)„¼ú‘Í“mîKz|N­CAoʧo+"¨]p1}TÅ̦LÂSEn®RÚÆÏ/aÇŽ‚ÝCðR65EÃKf"C÷“Ò*O±u{1è2E§nŒHR¹Øæ‹Tbè0å“´ÉŒ/æÉ%ÈAaÁ ±Û¯›œ+9Î=Ja“ÄŽ7†_jËMó ѬÔJ“¹/ý/3lL㞬á8£e–\â å)n1_µH\D1‰ _+ÔTf¾Qm"LJ˜Bo†&üa''‹4ebÁa8¼™†Q7RóŠÂ('_Õ¢…ȼo \ǘɋ—4õ‰†ÍÚÓ‰+KË3ÛDðf¾'ÐaV„5ƒYxº„mcÔÄ?äÞüœú VÒ•—ë.¬·7g‹êËI–æ5‰VåØ^…¾HX>Vv¦ë/‡tvhýhQ/ö#õ¦‚FJêy$^Ž¢÷ñÁRš5%p½‡!T>9µýPWôօ⹊٥Ǜ+_¿Z£&3\PVÄp©¥„Ÿ”rQ£o=8¥Và5̰øæNàÛé-ñŸˆ di¡õÃp`*±Šh©Š:ǵO&$j±‚¿øê¦ÑÀ ªAµ²£oª«$ÊE8˜¯¨¹ùˆöÙ,[W¾³JB]¡sËtõQôù¹ªžD‘ .í”e{ ÃꊅPÀÒc—±ŠÿîÐ~Jµ6ÎXÎà tYwœŸÝZIJVôM«G@œy,¹”{ÙüÓmµ·Á/þÔ0¼Ç…(ð‘ý]5Ѝ;Užl«ÄæÔ쯮ìòÞÀ•­±>©ê2Ic‘:x­Ã2D‚›4´.Lw’¦ýM „$¤Ÿô*Èmq}çê DÅ[ôiÜÖ15#”e—:S`ˆòLhê×C¥ÄÐwa§ŸðÏ“U^3ä\Mà+óÔ:¸]¦Æ"¯Rdd’íÅZ^:JCóþc•YÍ©W L3&ˆWK®‰ý¿Ͳ¯Y? \H›²Ö‘°À_^SX.Y@Âu›HçB%¾4Vt•¤ôZi:í6®ÁŠ;ÿ,[ ­°Ž¯ôŒ£‹ ÿ&Í!qUáKÀA )b@¿Ê(ïØî;¡ê³'ã,-äqLn°¢O“Ëù#Ö1#¿$¨2a®²æs´”ÅwqÙeS)è‹æÆáù„í+Õxma0ücœ?×¹¤žnV0ÚÊr›æüNIoåsùôäeçaé'Ì5×ÖµE,:¹ª»fw0-ˆÛ0çý‘ÒÇ#_ŽB{HN—À§ì­:ºâòótûÌï–G¿Jˆz#InÚ9ªHЄüáÁA7ìc´2½ï˜^¯1åý¶Z@ŽÁ˜ŸûϹP¬Z‚)†,Wv—"ܪ؟Ś@ÞzhÛÆwfK‘ø6GúšífƈMú„Sk˜(nŠÙB±W$‹ÜËöT}ïkUBò¹åç/¢4Y´­qZUõg‡0“©u‹¿`>©ôS?ø¥Õn„n„ çç|ÿpωVYž÷ÙÒŸZ+ÿ,‹ýÚé‚tàƒäàû{ZËþÚæ£OÎg)Ø£ÔÞ¦DÑæ_±é‰[lÇz­äûôÝMDÀÄõiîU8pïlzà#=&ÒÃZ¶®Åeè÷›§p3¢¿67¨&qQÆö’Våñ‰‹z/©4‘®ð¢[*×ëÒôË&Æ“ý+J¶ ÀMhCãŽú{¤ÉHÕôDs¸ Ãòm¾Ã|úœJÏ1臭hžKPabm+ •'ªS0´7HP +ßì±ø¹N¾É¡ñúa´"š%ÜhÒMKÌgðQü\ÇHþ PóiµïðûAÆ– Ed-ÁµêK!hÔÏ>ÅKãCwðƒRîÕKÝ[?°X•.…ï‰ÅÁ",LñGÁÕîlÕÚ˜O̸_—i¢ââ'ÁRm³¥Dûìì&‰ÞÜXß©ö†8Q¯ Iš&¼©PÈ/„VœßM²”[äÂÄ~Á›ãêÌ E½C÷¸ÈPÄýÆ¿†qHÂñpóRÑCew8­i´ Øxôë3 ×ÃA+’M O’°½£^$=§\ËOw‘Pòá ;!½«ö19‘,* †´„Á»aA4G…ÆŠòˆÆ“,~S$¿ª •±àÇDRdš$ëÿ8Ü’ %è7¥.€©Ïï–n“ ,Ñ”ä‚5õ¢`--Ý )" I ì"fÏcÛ›ÅÔ¨v§R“Îà àÐkÆÉtÓJS6^`aGnfgF΋Ñ1@F:ÜånSD 1BÞtx-YL©iR¤–O`ﶈ–Üî–hÌY K¾#q9(ƒ¼gwåK‡ÙdYfºfk80Vþôø§V%*ôÃ}}ø5ke\ªætó"âS{¥ kµ-øúÖåþ:¬yˆa¸È±XY)míj%P)éçþɰHÇa0¿õÆD BÀT“Ý% U.ÕžuUø$…r­-~³eºJ´¥M€!nÅÔ;‹,‡¶QÃ(ÛR¶†|Á@«Çô®%äH¬Ùµ6¼!á1L£‘Q䌼qth&*öî²Y®Sr~Ù¬êë>ž¬|X4?B¿x©/åw ËŸäTú&”ö…›u²Âlr 7:J íìQ[# ˆj<ƒnvÂ]ï™(".®èa÷; “¬gyÓryÚ<™ÃÄ‹<|mä¿E÷n‚£4• >îÜ¢uªÚ]Dêí«Ý$*%úöñ°>cXIn8žv¢ù:‚”¯yñÃÛ2ÜùLªÜ[%0÷‹WÁYÂñÐód˰¢Ë³ *bêÄÅ뺡êç|Ù9NÔÆTu{È!î¨"~0AIƒ½ê’Éé— ‰‡E†‡{Ó–TFÙö첯 Ê"Cè(æ yHçµ°ôCpA…£;ÿ‡¢¯ž$ηºeæ-•% Gï6j[4ॴšèܶ…Åw¡¾4ç¹mžOÿÂ5*èÓaqËtYTgÜ Üf'®¢2´5÷ ,V±1¼Ê…¼Ž‘’½IÖòû^juòð[ÒÍñ°`ºÝbxñbÚ«}×WqM²dØ:×Qp~Î=Tf¼hBϳ‡ø¥ˆ =´«0ooº5Q+ŠtGhO¨øTT\yãdòäýÜÙá`xžap‡q_‚Œ¼\Œò·¦: ß¹$Crê‡ÉªŸ§w‡BÙ0áô @`ç€Â¢O=5,_Mrâ)×;¿µCD¦ó+ŸIóŽÇÇE&¾ô¥â.v [Á.Ö)¹h€:Q‰ ë~P‰‘¥~ŒnÒ´+ª5ÿ6ÐìxeZ‘e¥ÖN”ŒþáòÒ ¾Aj¼iæþOø' vI90›&Ù±(Ú­Î!‰UH12B>îT={ÚÜÇ¡ŸTp°Z¨ï®–bö+OôðÏò®^ul±aüœœìÑÚëZ-ÂXúô¥g…„”ÅC=&h0sÉ¿r;æÆ%õ¸£©xt̺@)+tÕ‹æÊdµK:n¯Êüé4n†óÔÏ¿åuº [¥XÝ»±"kû˜aþÌ:i<}a˜§½jP ¸üý»h ÷Ö$ö‚ä7ÒÈ•üO!jÉŽtnï4Õ:Á^¿‰îñŒ-Raäïwr·˜“,"›Ï„)×¢'¾%T7„/žëÔ8Œ)Æ0ÍN£Øð›Z@(",æèIgͧèV’¦g‰·lÃØ!Ée>_šQŸ± È€(OÌ·üÏÜò¦hq Ú£bŽì+²‹]¬ Ūɨ€ðFøÆKª}ôô·JðìRñgMAú>†‰ßÆèd¸ø§«ºw,Wb‹UÇ’7bkavâ¢À&4€i›T½Õù†Åwê–„QÉ_ßé´1ÓëÇé`ÛÅždž…÷¦p ®XS¹±ŸþÒ_6N• ÐÃéyñQ=Î[VÛ1ô’‡¡2¡åá’‘ü¸jÙE´io¢±ó;hÞó0(AÝ9 Ñ„°ó aù¿ÎKFë!Œf[é&›Œ^x˜LíÉ4XO&øJäh¨ñ•m9ͼ–SÑIf…—ª9QwެìæÄÏ4ü®'(q’}ðL^וþ:'š¶šaQ _j7re‘c îGö.r§ ¢DéyHûÇÁr®çªnv»7zKB«c³˜wUŸ?åöI¢kÀQH!bãÞWÒuñµÑû‰9b}KuìÑÚÓ¡{ÒoÖökC [üF ÜCC¨-‡–pd·¢C+4îgnó9øßX??ÿvû•ãËdàÑV°^uP×Iª˜“ÁÞ1˵>%Ëo×Ü(óÕ­Rù1ïòA^ ¡ô…ul&“Cò¡±ì¤˜©I$¨/dÖ`ë•uï>˜êö¶bWœ¦Ke[ÊÓúw¨7™KÅØ’:$S1,¡ÙÒRA³©4PôºA¢5«ìÎÉ=Óèu¶¢6i‰ZöýE/…¡BnÀÇ0® Ø.„¹ï;îeÌéÇ#6)´8ä‚ ®QºÒ¹t\C§\>}+¤B|ðà.Eh6æ¢0t†n9\#¿P—4™Ö‰É¥^uß©rË™:*ýB„¬¾¢Ä³!&ac:ëÛã§gXƒé‰§Õ•®=|á³íÉ›öÖkþú8l¤†g8øƒmŸC¢Ü5uе!š(ZŸáÉUÞ²e%¯ÉD“ºdU«›‰Y|à<£·°cÑ}Uf6Ã4Ž ÇÇÇÚâ0"ñ5¢£Ä¦Qâ­__æEÌ´¿Á,;{"¢I—o›zlú»‘›‰È®_—ºWc”Ôn#Á RM_¼I» ÷pÓÐa& "Ñãrï{’¦÷XÈÛ,Šªq Ük J(’ñÏçš}m¾ _Öø1d¼Fã"JÌž1a·Y‡÷ÁÊÞ!ÍAçÝÄ8ø R¦Ý.³}n·žÒYÈTD‘ ×”Õ çE„÷dáu@w’î#;C0ê‘í_l$Ølø²¯Ùòþ˜zê·ˆ`Ï—EyWÂŽ U`ɴЇæQyêOÒ-^£p²ô\´–#Ú‡zäD:¯êh« õ•§ ÊÐumXzV~CQ‡xIN:Z$ì½~ô>‹Ý™ÒLÉhîÚ²õE[Öz—˜-wö¨@Ô_]*¶<õ#Þþ»_-‹•©Í'ZAvøíÚ•ãN}´jÃÏ>?Épò›{ÁŽ&ü [¬ªbôB3Ì&s×_ˆ®êtÃ9ø)ËÎ’›tQiÜ, ãž&ÇG›»ÝןÙì RŒ&«s–¶“µ Q“8Òäb nì{í4Z³ázm…_²{‰RFÌ„•{š»=UøBù{.ÇçOÒH:êZÕ«¨m{™@ô{‡vuBqŒh>GXýÊ,sT²¬øÄ(gð#³ffƒâæ—üu{ô&5Úñ[ø©ÂçDK¼_ BˆÅ$m:òþ¥%ì~§0ÅCE E­à€M=†y4"/”qÜ4ÿp?L%ñý>/«‚I¢¦’À|Ü|œ²2ef‘ÿTM9Ñå`/ë+××~ðÀ×È×Y6ý™ËÓ õ§šA‚¥é¤ý¾1§.,ðFã«tœÀ ®·ÕN)~ÄcgQP¡e¢Ÿbí˜zº=F¢ ¾£g‰È£Tð¬ 9˜üSþ<#2Ü6²Jš8Z;t~‘ÒØ|m§­¼6c™›§Åª{g%“€MrRIuà: kYMúÅ"”f]Éš æ€X3Ø®RÒûºÏ.ì·r¨lv”áÒY¨_ßš|ÆÉh ÅËa>@îMæ/îÛA;kw²vØ^θÍövj)Yø×ž@çùéŠÑOñUƒÜýÒ*\%5|¯¢žÔô(٬ŜÝás¨"–T±hã*×…>§%—ÆnPwÔ}°#nvmšL3–¿åSü[+ó%‚×÷úlÒÝd¿”µÂ¾¬E»ŽM…öþT+º4Ž-cïnÖœ“ˆú¶Ž³‡»çûÞúŠyàbÞh"{µœÂx0M¬³Ï·$ªSùG|õÁå–‘új•ÏH?}|ÿ9‡,+qsTñ+oXM¶_°Ðë¼'ijKsßÞ8Ÿ+0-kØÝØ!¼“~?#íø-Ñìû6Ÿ˜ù‹y°wt!)$æW^ùéç>¤.¥eß _ŽÀ4žöð÷KE@¬ŽÒ£˜5HR%ù’­riXð‚•ß1©‹ô9z`)I>þYË"ô¤˜¹…ºÐ§©]ß‘áÖl:BR~€ƒj\B·‘1Õ·ç\Œœ´j&Žp’Mí+¼¶'áJ(Rt^ô: q)ÌiC$ƒm ‘tAe4‰3Õ"‘𚂆ÛòEVƒ^®—ôÕuz)ùGû~NñyOÍ÷8’é…¬þ´þGhÞ¹ª­®Mb5½B¸1 >Wr7X·lñ>¿s%\Ú"Q¬ág8ˆÄ×Mª%O.Ù†3;EÊÔ£3_'è@îvÈä²Ï\1»úþvNrûž7”WX\%W¨d_æÓ] oFᕌd„oСìÇTŒ÷!§-çOjE*väí½]úZ2É®±lvuïµ»¡,DÆÄƒ”WÌN·Àò  ©+jGÃþ]Ûì`«i#iAÚG¾›÷̳ ÿú),(¹1¡Àsd›]o\(fºµÄÆBêσ‘åîCèÂJt'kµK¤ÙË-½¥š€oŒ¯^%L²»#á« $°uôµE.¦QÆ(J°ö†¤Ðx¿>'Ãzqî[+’Þ•84еržÀ=¦Wò!¬€“µËêÕOõë¯ 75æHf½Fþc!ÇÇz ó\Ev¤œeñwÙ¨ÌYÛ²Yi&á(w× GIì-Ñõ6ÿ"DÙ½‡#´©ìS¾ˆà>uJwdN"âý5½^Áô´MÌÀ—LŽl}Ëœ¸ÕgüNÛÄ1d`üdðÎÎ‶÷C=l\\”s‰h‘Ìâ™4+<ïàØ¸4 ËOÑQŽJ2OSÕèiBñðÔ4ì›ÀÓrW\Ä5” Æ©3¢e—°Ì yùa¦NQ1¿ãùœ2 #Z•& ØîóÚpè#BôTútÎ{Øåa†É\×Ò›K)NžxO–€´ÏZÝ륰äê$õ‘ƒÅuÈBžªÏÁì£ÄÒ"ÊwÝ •óPb´ƒu2n3pü)¿£¾‘¨Bô>|ŠŠ±ç“ïÑHLŽU%Õaùþÿ?Àÿf¶@'g°‰“ òÿd[endstream endobj 62 0 obj << /Type /Font /Subtype /Type1 /Encoding 404 0 R /FirstChar 40 /LastChar 121 /Widths 412 0 R /BaseFont /NMHQTU+NimbusSanL-Bold /FontDescriptor 60 0 R >> endobj 60 0 obj << /Ascent 722 /CapHeight 722 /Descent -217 /FontName /NMHQTU+NimbusSanL-Bold /ItalicAngle 0 /StemV 141 /XHeight 532 /FontBBox [-173 -307 1003 949] /Flags 4 /CharSet (/parenleft/parenright/period/slash/one/two/three/four/colon/at/A/B/C/D/F/G/H/I/L/M/N/P/Q/S/T/U/a/b/c/d/e/f/g/h/i/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y) /FontFile 61 0 R >> endobj 412 0 obj [333 333 0 0 0 0 278 278 0 556 556 556 556 0 0 0 0 0 333 0 0 0 0 0 975 722 722 722 722 0 611 778 722 278 0 0 611 833 722 0 667 778 0 667 611 722 0 0 0 0 0 0 0 0 0 0 0 556 611 556 611 556 333 611 611 278 0 556 278 889 611 611 611 611 389 556 333 611 556 778 556 556 ] endobj 63 0 obj << /Type /Pages /Count 6 /Parent 413 0 R /Kids [54 0 R 65 0 R 79 0 R 115 0 R 122 0 R 135 0 R] >> endobj 193 0 obj << /Type /Pages /Count 6 /Parent 413 0 R /Kids [147 0 R 195 0 R 210 0 R 246 0 R 263 0 R 270 0 R] >> endobj 318 0 obj << /Type /Pages /Count 5 /Parent 413 0 R /Kids [301 0 R 320 0 R 335 0 R 371 0 R 388 0 R] >> endobj 413 0 obj << /Type /Pages /Count 17 /Kids [63 0 R 193 0 R 318 0 R] >> endobj 414 0 obj << /Type /Outlines /First 3 0 R /Last 51 0 R /Count 9 >> endobj 51 0 obj << /Title 52 0 R /A 49 0 R /Parent 414 0 R /Prev 39 0 R >> endobj 47 0 obj << /Title 48 0 R /A 45 0 R /Parent 39 0 R /Prev 43 0 R >> endobj 43 0 obj << /Title 44 0 R /A 41 0 R /Parent 39 0 R /Next 47 0 R >> endobj 39 0 obj << /Title 40 0 R /A 37 0 R /Parent 414 0 R /Prev 35 0 R /Next 51 0 R /First 43 0 R /Last 47 0 R /Count -2 >> endobj 35 0 obj << /Title 36 0 R /A 33 0 R /Parent 414 0 R /Prev 23 0 R /Next 39 0 R >> endobj 31 0 obj << /Title 32 0 R /A 29 0 R /Parent 23 0 R /Prev 27 0 R >> endobj 27 0 obj << /Title 28 0 R /A 25 0 R /Parent 23 0 R /Next 31 0 R >> endobj 23 0 obj << /Title 24 0 R /A 21 0 R /Parent 414 0 R /Prev 19 0 R /Next 35 0 R /First 27 0 R /Last 31 0 R /Count -2 >> endobj 19 0 obj << /Title 20 0 R /A 17 0 R /Parent 414 0 R /Prev 15 0 R /Next 23 0 R >> endobj 15 0 obj << /Title 16 0 R /A 13 0 R /Parent 414 0 R /Prev 11 0 R /Next 19 0 R >> endobj 11 0 obj << /Title 12 0 R /A 9 0 R /Parent 414 0 R /Prev 7 0 R /Next 15 0 R >> endobj 7 0 obj << /Title 8 0 R /A 5 0 R /Parent 414 0 R /Prev 3 0 R /Next 11 0 R >> endobj 3 0 obj << /Title 4 0 R /A 1 0 R /Parent 414 0 R /Next 7 0 R >> endobj 415 0 obj << /Names [(0) 59 0 R (1.0) 2 0 R (101) 212 0 R (102) 213 0 R (103) 214 0 R (104) 215 0 R (106) 216 0 R (107) 217 0 R (108) 218 0 R (109) 219 0 R (110) 220 0 R (111) 221 0 R (112) 222 0 R (113) 223 0 R (115) 224 0 R (116) 225 0 R (117) 226 0 R (118) 227 0 R (119) 228 0 R (120) 229 0 R (121) 230 0 R (123) 234 0 R (124) 235 0 R (125) 236 0 R (127) 237 0 R (128) 238 0 R (129) 239 0 R (130) 240 0 R (131) 241 0 R (132) 242 0 R (133) 243 0 R (134) 244 0 R (135) 111 0 R (137) 248 0 R (138) 112 0 R (140) 249 0 R (141) 250 0 R (142) 251 0 R (143) 252 0 R (144) 253 0 R (145) 254 0 R (146) 255 0 R (147) 256 0 R (148) 257 0 R (149) 258 0 R (150) 259 0 R (151) 120 0 R (153) 260 0 R (2.0) 6 0 R (207) 266 0 R (208) 267 0 R (209) 268 0 R (210) 273 0 R (211) 274 0 R (212) 275 0 R (213) 276 0 R (214) 113 0 R (216) 277 0 R (217) 278 0 R (218) 279 0 R (219) 280 0 R (22) 105 0 R (220) 281 0 R (221) 282 0 R (222) 283 0 R (223) 284 0 R (224) 285 0 R (225) 286 0 R (226) 287 0 R (227) 288 0 R (228) 289 0 R (229) 290 0 R (230) 291 0 R (231) 292 0 R (232) 293 0 R (233) 294 0 R (234) 295 0 R (235) 296 0 R (236) 297 0 R (237) 298 0 R (238) 299 0 R (24) 125 0 R (241) 304 0 R (242) 305 0 R (243) 306 0 R (244) 307 0 R (245) 308 0 R (246) 309 0 R (247) 310 0 R (248) 311 0 R (249) 312 0 R (25) 126 0 R (250) 313 0 R (251) 314 0 R (252) 315 0 R (253) 316 0 R (254) 317 0 R (255) 323 0 R (256) 324 0 R (257) 325 0 R (258) 326 0 R (259) 327 0 R (26) 127 0 R (260) 328 0 R (261) 329 0 R (262) 330 0 R (263) 331 0 R (264) 332 0 R (265) 333 0 R (266) 339 0 R (267) 340 0 R (268) 341 0 R (269) 342 0 R (27) 128 0 R (270) 343 0 R (271) 344 0 R (272) 345 0 R (273) 346 0 R (274) 347 0 R (275) 348 0 R (276) 349 0 R (277) 350 0 R (278) 351 0 R (279) 352 0 R (28) 129 0 R (280) 353 0 R (281) 354 0 R (282) 355 0 R (283) 356 0 R (284) 357 0 R (285) 358 0 R (286) 359 0 R (287) 360 0 R (288) 361 0 R (289) 362 0 R (29) 130 0 R (290) 363 0 R (291) 364 0 R (292) 365 0 R (293) 366 0 R (294) 367 0 R (295) 368 0 R (296) 369 0 R (297) 375 0 R (298) 338 0 R (299) 376 0 R (3.0) 10 0 R (30) 131 0 R (300) 377 0 R (301) 378 0 R (302) 379 0 R (303) 380 0 R (304) 381 0 R (305) 382 0 R (306) 383 0 R (307) 384 0 R (308) 385 0 R (309) 386 0 R (31) 132 0 R (310) 391 0 R (311) 374 0 R (312) 392 0 R (313) 393 0 R (314) 394 0 R (315) 395 0 R (316) 396 0 R (317) 397 0 R (318) 398 0 R (319) 399 0 R (32) 133 0 R (320) 400 0 R (321) 401 0 R (322) 402 0 R (323) 403 0 R (33) 106 0 R (35) 137 0 R (36) 138 0 R (37) 139 0 R (38) 140 0 R (39) 141 0 R (4.0) 14 0 R (40) 142 0 R (41) 143 0 R (42) 144 0 R (43) 145 0 R (44) 107 0 R (46) 149 0 R (47) 108 0 R (49) 150 0 R (5.0) 18 0 R (50) 151 0 R (52) 152 0 R (53) 153 0 R (54) 154 0 R (55) 155 0 R (57) 156 0 R (58) 157 0 R (59) 158 0 R (6.0) 22 0 R (6.1.1) 26 0 R (6.2.1) 30 0 R (60) 159 0 R (61) 109 0 R (63) 160 0 R (64) 161 0 R (65) 165 0 R (66) 166 0 R (67) 167 0 R (68) 171 0 R (69) 172 0 R (7.0) 34 0 R (70) 173 0 R (71) 174 0 R (72) 175 0 R (73) 176 0 R (74) 177 0 R (75) 178 0 R (76) 179 0 R (77) 180 0 R (78) 181 0 R (79) 182 0 R (8.0) 38 0 R (8.3.1) 42 0 R (8.4.1) 46 0 R (80) 183 0 R (81) 184 0 R (82) 185 0 R (83) 186 0 R (84) 190 0 R (85) 191 0 R (86) 197 0 R (87) 198 0 R (88) 199 0 R (89) 192 0 R (9.0) 50 0 R (90) 200 0 R (91) 201 0 R (92) 202 0 R (93) 203 0 R (94) 204 0 R (95) 205 0 R (96) 206 0 R (97) 207 0 R (98) 208 0 R (99) 110 0 R (COPYING-FDL) 77 0 R (Doc-Start) 58 0 R (page.1) 57 0 R (page.10) 337 0 R (page.11) 373 0 R (page.12) 390 0 R (page.2) 67 0 R (page.3) 81 0 R (page.4) 117 0 R (page.5) 124 0 R (page.6) 265 0 R (page.7) 272 0 R (page.8) 303 0 R (page.9) 322 0 R (table.1) 76 0 R (table.2) 261 0 R] /Limits [(0) (table.2)] >> endobj 416 0 obj << /Kids [415 0 R] >> endobj 417 0 obj << /Dests 416 0 R >> endobj 418 0 obj << /Type /Catalog /Pages 413 0 R /Outlines 414 0 R /Names 417 0 R /PageMode /UseOutlines /OpenAction 53 0 R >> endobj 419 0 obj << /Author()/Title()/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfeTeX-1.21a)/Keywords() /CreationDate (D:20130312005329+01'00') /PTEX.Fullbanner (This is pdfeTeX, Version 3.141592-1.21a-2.2 (Web2C 7.5.4) kpathsea version 3.5.4) >> endobj xref 0 420 0000000000 65535 f 0000000009 00000 n 0000001859 00000 n 0000177002 00000 n 0000000048 00000 n 0000000086 00000 n 0000022190 00000 n 0000176918 00000 n 0000000125 00000 n 0000000160 00000 n 0000024451 00000 n 0000176832 00000 n 0000000199 00000 n 0000000232 00000 n 0000025677 00000 n 0000176744 00000 n 0000000272 00000 n 0000000298 00000 n 0000027520 00000 n 0000176656 00000 n 0000000338 00000 n 0000000380 00000 n 0000029995 00000 n 0000176531 00000 n 0000000420 00000 n 0000000462 00000 n 0000030182 00000 n 0000176457 00000 n 0000000504 00000 n 0000000541 00000 n 0000030927 00000 n 0000176383 00000 n 0000000583 00000 n 0000000642 00000 n 0000036849 00000 n 0000176295 00000 n 0000000682 00000 n 0000000726 00000 n 0000041366 00000 n 0000176170 00000 n 0000000766 00000 n 0000000831 00000 n 0000041553 00000 n 0000176096 00000 n 0000000873 00000 n 0000000919 00000 n 0000048192 00000 n 0000176022 00000 n 0000000961 00000 n 0000001010 00000 n 0000052347 00000 n 0000175947 00000 n 0000001050 00000 n 0000001111 00000 n 0000001561 00000 n 0000001920 00000 n 0000001161 00000 n 0000001679 00000 n 0000001739 00000 n 0000001799 00000 n 0000174826 00000 n 0000163943 00000 n 0000174657 00000 n 0000175457 00000 n 0000003390 00000 n 0000002812 00000 n 0000001990 00000 n 0000003270 00000 n 0000162913 00000 n 0000143043 00000 n 0000162742 00000 n 0000002956 00000 n 0000142453 00000 n 0000129685 00000 n 0000142277 00000 n 0000003113 00000 n 0000003330 00000 n 0000052286 00000 n 0000022251 00000 n 0000018887 00000 n 0000003484 00000 n 0000022130 00000 n 0000019162 00000 n 0000128988 00000 n 0000114787 00000 n 0000128817 00000 n 0000019309 00000 n 0000019456 00000 n 0000019603 00000 n 0000019750 00000 n 0000019897 00000 n 0000020044 00000 n 0000020191 00000 n 0000020338 00000 n 0000020485 00000 n 0000020632 00000 n 0000020779 00000 n 0000020926 00000 n 0000021074 00000 n 0000021222 00000 n 0000021370 00000 n 0000021519 00000 n 0000021668 00000 n 0000021817 00000 n 0000021973 00000 n 0000025615 00000 n 0000027458 00000 n 0000029933 00000 n 0000030120 00000 n 0000030865 00000 n 0000036787 00000 n 0000041304 00000 n 0000041491 00000 n 0000048130 00000 n 0000024514 00000 n 0000023947 00000 n 0000022357 00000 n 0000024389 00000 n 0000024096 00000 n 0000024242 00000 n 0000042303 00000 n 0000026306 00000 n 0000025432 00000 n 0000024609 00000 n 0000025553 00000 n 0000025740 00000 n 0000025802 00000 n 0000025864 00000 n 0000025928 00000 n 0000025990 00000 n 0000026052 00000 n 0000026116 00000 n 0000026180 00000 n 0000026242 00000 n 0000028144 00000 n 0000027337 00000 n 0000026401 00000 n 0000027583 00000 n 0000027645 00000 n 0000027707 00000 n 0000027769 00000 n 0000027831 00000 n 0000027894 00000 n 0000027956 00000 n 0000028019 00000 n 0000028081 00000 n 0000032479 00000 n 0000029811 00000 n 0000028239 00000 n 0000030058 00000 n 0000030243 00000 n 0000030305 00000 n 0000030366 00000 n 0000030428 00000 n 0000030490 00000 n 0000030553 00000 n 0000030617 00000 n 0000030679 00000 n 0000030740 00000 n 0000030802 00000 n 0000030989 00000 n 0000031051 00000 n 0000114180 00000 n 0000101171 00000 n 0000114009 00000 n 0000031112 00000 n 0000031174 00000 n 0000031236 00000 n 0000100549 00000 n 0000086084 00000 n 0000100378 00000 n 0000031298 00000 n 0000031359 00000 n 0000031422 00000 n 0000031484 00000 n 0000031546 00000 n 0000031609 00000 n 0000031671 00000 n 0000031733 00000 n 0000031796 00000 n 0000031858 00000 n 0000031921 00000 n 0000031983 00000 n 0000032045 00000 n 0000032107 00000 n 0000032170 00000 n 0000032232 00000 n 0000085347 00000 n 0000076720 00000 n 0000085177 00000 n 0000032294 00000 n 0000032357 00000 n 0000032418 00000 n 0000175570 00000 n 0000034581 00000 n 0000033710 00000 n 0000032625 00000 n 0000033832 00000 n 0000033894 00000 n 0000033956 00000 n 0000034019 00000 n 0000034080 00000 n 0000034141 00000 n 0000034204 00000 n 0000034266 00000 n 0000034329 00000 n 0000034391 00000 n 0000034453 00000 n 0000034517 00000 n 0000038794 00000 n 0000036665 00000 n 0000034715 00000 n 0000036912 00000 n 0000036974 00000 n 0000037038 00000 n 0000037102 00000 n 0000037164 00000 n 0000037226 00000 n 0000037287 00000 n 0000037350 00000 n 0000037414 00000 n 0000037476 00000 n 0000037540 00000 n 0000037603 00000 n 0000037667 00000 n 0000037729 00000 n 0000037791 00000 n 0000037854 00000 n 0000037916 00000 n 0000037978 00000 n 0000038040 00000 n 0000076397 00000 n 0000069840 00000 n 0000076222 00000 n 0000038104 00000 n 0000038166 00000 n 0000038228 00000 n 0000038291 00000 n 0000038353 00000 n 0000038415 00000 n 0000038478 00000 n 0000038540 00000 n 0000038602 00000 n 0000038666 00000 n 0000038730 00000 n 0000042488 00000 n 0000041182 00000 n 0000038928 00000 n 0000041429 00000 n 0000041616 00000 n 0000041678 00000 n 0000041742 00000 n 0000041806 00000 n 0000041867 00000 n 0000041931 00000 n 0000041993 00000 n 0000042055 00000 n 0000042117 00000 n 0000042179 00000 n 0000042241 00000 n 0000042364 00000 n 0000042426 00000 n 0000045002 00000 n 0000044629 00000 n 0000042608 00000 n 0000044751 00000 n 0000044813 00000 n 0000044874 00000 n 0000044938 00000 n 0000049701 00000 n 0000047696 00000 n 0000045109 00000 n 0000047818 00000 n 0000047880 00000 n 0000047942 00000 n 0000048004 00000 n 0000048068 00000 n 0000048255 00000 n 0000048317 00000 n 0000048379 00000 n 0000048441 00000 n 0000048504 00000 n 0000048566 00000 n 0000048629 00000 n 0000048693 00000 n 0000048757 00000 n 0000048821 00000 n 0000048884 00000 n 0000048946 00000 n 0000049009 00000 n 0000049073 00000 n 0000049135 00000 n 0000049197 00000 n 0000049260 00000 n 0000049323 00000 n 0000049387 00000 n 0000049449 00000 n 0000049512 00000 n 0000049576 00000 n 0000049638 00000 n 0000053278 00000 n 0000052102 00000 n 0000049822 00000 n 0000052224 00000 n 0000052410 00000 n 0000052472 00000 n 0000052534 00000 n 0000052596 00000 n 0000052658 00000 n 0000052720 00000 n 0000052782 00000 n 0000052844 00000 n 0000052906 00000 n 0000052968 00000 n 0000053030 00000 n 0000053092 00000 n 0000053154 00000 n 0000053216 00000 n 0000175687 00000 n 0000056639 00000 n 0000055776 00000 n 0000053373 00000 n 0000055898 00000 n 0000055960 00000 n 0000056022 00000 n 0000056084 00000 n 0000056146 00000 n 0000056207 00000 n 0000056268 00000 n 0000056329 00000 n 0000056391 00000 n 0000056453 00000 n 0000056515 00000 n 0000056577 00000 n 0000061424 00000 n 0000059245 00000 n 0000056722 00000 n 0000059367 00000 n 0000059429 00000 n 0000059491 00000 n 0000059553 00000 n 0000059615 00000 n 0000059677 00000 n 0000059740 00000 n 0000059802 00000 n 0000059865 00000 n 0000059927 00000 n 0000059990 00000 n 0000060052 00000 n 0000060115 00000 n 0000060176 00000 n 0000060239 00000 n 0000060301 00000 n 0000060364 00000 n 0000060426 00000 n 0000060489 00000 n 0000060551 00000 n 0000060613 00000 n 0000060675 00000 n 0000060738 00000 n 0000060800 00000 n 0000060863 00000 n 0000060925 00000 n 0000060988 00000 n 0000061050 00000 n 0000061113 00000 n 0000061175 00000 n 0000061238 00000 n 0000061300 00000 n 0000061362 00000 n 0000064883 00000 n 0000063894 00000 n 0000061507 00000 n 0000064016 00000 n 0000064078 00000 n 0000064140 00000 n 0000064202 00000 n 0000064264 00000 n 0000064326 00000 n 0000064387 00000 n 0000064449 00000 n 0000064511 00000 n 0000064573 00000 n 0000064635 00000 n 0000064697 00000 n 0000064759 00000 n 0000064821 00000 n 0000067869 00000 n 0000066877 00000 n 0000064966 00000 n 0000066999 00000 n 0000067061 00000 n 0000067123 00000 n 0000067185 00000 n 0000067247 00000 n 0000067309 00000 n 0000067371 00000 n 0000067435 00000 n 0000067497 00000 n 0000067559 00000 n 0000067621 00000 n 0000067683 00000 n 0000067745 00000 n 0000067807 00000 n 0000067952 00000 n 0000076636 00000 n 0000085720 00000 n 0000100893 00000 n 0000114517 00000 n 0000129327 00000 n 0000142787 00000 n 0000163425 00000 n 0000175173 00000 n 0000175796 00000 n 0000175873 00000 n 0000177073 00000 n 0000180757 00000 n 0000180796 00000 n 0000180834 00000 n 0000180963 00000 n trailer << /Size 420 /Root 418 0 R /Info 419 0 R /ID [ ] >> startxref 181226 %%EOF libdbi-drivers-0.9.0/drivers/sqlite/dbd_sqlite/c100.html000644 001750 001750 00000011040 12117467172 023715 0ustar00markusmarkus000000 000000 Driver options

    Chapter 3. Driver options

    Your application has to initialize libdbi drivers by setting some driver options with the dbi_conn_set_option() and the dbi_conn_set_option_numeric() library functions. The sqlite driver supports the following options:

    dbname

    The name of the database you want to work with. As a SQLite database corresponds to one file in your filesystem, dbname can be any legal filename. If the database/file doesn't exist when you first try to access it, SQLite will create it on the fly.

    It is important to understand that the full path of the database is composed of sqlite_dbdir and dbname. Therefore dbname should not contain the full path of a file, but just the name.

    sqlite_dbdir

    This is the directory that contains all sqlite databases. Use the full path please. If this option is not specified, a compile-time default directory will be used. By default, this directory (usually /usr/local/var/lib/libdbi/sqlite) has read and write permissions for everyone with the sticky bit set. If this is not suitable for your application, use a custom directory with your preferred permissions instead.

    Note: It is necessary to keep all sqlite databases in one directory to make it possible to list all existing databases through the libdbi API. However, you are free to open more than one connection simultaneously, each one using a different setting of sqlite_dbdir.

    timeout (numeric)

    The connection timeout in seconds.

    sqlite_timeout (numeric)

    The design of SQLite does not allow concurrent access by two clients. However, if the timeout is larger than zero, the second client will wait for the given amount of time for the first client to release its lock. If the timeout is set to zero, the second client will return immediately, indicating a busy status. The numerical value of this option specifies the timeout in milliseconds.

    Note: This option is deprecated. Use the generic option timeout instead. In the current implementation, sqlite_timeout overrides timeout if both are set. Please be aware that these options use different time scales.

    libdbi-drivers-0.9.0/drivers/sqlite/dbd_sqlite/c136.html000644 001750 001750 00000004630 12117467172 023735 0ustar00markusmarkus000000 000000 Peculiarities you should know about

    Chapter 4. Peculiarities you should know about

    This chapter lists known peculiarities of the sqlite driver. This includes SQLite features that differ from what you know from the other database servers supported by libdbi, and it includes features and misfeatures introduced by the sqlite driver. It is the intention of the driver author to reduce the number of misfeatures in future releases if possible.

    libdbi-drivers-0.9.0/drivers/sqlite/dbd_sqlite/c34.html000644 001750 001750 00000005275 12117467172 023660 0ustar00markusmarkus000000 000000 Introduction

    Chapter 1. Introduction

    SQLite is a smart library that implements an embeddable SQL database engine. No need for an external database server - an application linked against libsqlite can do it all by itself. Of course there are a few limitations of this approach compared to "real" SQL database servers, mostly for massively parallel high-throughput database applications, but on the other hand, installation and administration are a breeze. Your application should support the sqlite driver if one of the following applies:

    • You want to support potential users of your application who don't have the skills to administer a database server.

    • You want to offer the simplest possible installation of your application.

    • You want to let users test-drive your application without the need to fiddle with their production database servers.

    libdbi-drivers-0.9.0/drivers/sqlite/dbd_sqlite/c45.html000644 001750 001750 00000004141 12117467172 023651 0ustar00markusmarkus000000 000000 Installation

    Chapter 2. Installation

    This chapter describes the prerequisites and the procedures to build and install the sqlite driver from the sources.

    libdbi-drivers-0.9.0/drivers/sqlite/dbd_sqlite/copying-fdl.html000644 001750 001750 00000052167 12117467172 025504 0ustar00markusmarkus000000 000000 GNU Free Documentation License

    Appendix A. GNU Free Documentation License

    Version 1.1, March 2000

    Copyright (C) 2000 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.

    0. PREAMBLE

    The purpose of this License is to make a manual, textbook, or other written document "free" in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others.

    This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software.

    We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference.

    1. APPLICABILITY AND DEFINITIONS

    This License applies to any manual or other work that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you".

    A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language.

    A "Secondary Section" is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (For example, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them.

    The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License.

    The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License.

    A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, whose contents can be viewed and edited directly and straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup has been designed to thwart or discourage subsequent modification by readers is not Transparent. A copy that is not "Transparent" is called "Opaque".

    Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML designed for human modification. Opaque formats include PostScript, PDF, proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML produced by some word processors for output purposes only.

    The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, "Title Page" means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text.

    2. VERBATIM COPYING

    You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3.

    You may also lend copies, under the same conditions stated above, and you may publicly display copies.

    3. COPYING IN QUANTITY

    If you publish printed copies of the Document numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects.

    If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages.

    If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a publicly-accessible computer-network location containing a complete Transparent copy of the Document, free of added material, which the general network-using public has access to download anonymously at no charge using public-standard network protocols. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public.

    It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document.

    4. MODIFICATIONS

    You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version:

    1. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission.

    2. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has less than five).

    3. State on the Title page the name of the publisher of the Modified Version, as the publisher.

    4. Preserve all the copyright notices of the Document.

    5. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices.

    6. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below.

    7. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice.

    8. Include an unaltered copy of this License.

    9. Preserve the section entitled "History", and its title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section entitled "History" in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence.

    10. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the "History" section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission.

    11. In any section entitled "Acknowledgements" or "Dedications", preserve the section's title, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein.

    12. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles.

    13. Delete any section entitled "Endorsements". Such a section may not be included in the Modified Version.

    14. Do not retitle any existing section as "Endorsements" or to conflict in title with any Invariant Section.

    If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles.

    You may add a section entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various parties--for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard.

    You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one.

    The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version.

    5. COMBINING DOCUMENTS

    You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice.

    The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work.

    In the combination, you must combine any sections entitled "History" in the various original documents, forming one section entitled "History"; likewise combine any sections entitled "Acknowledgements", and any sections entitled "Dedications". You must delete all sections entitled "Endorsements."

    6. COLLECTIONS OF DOCUMENTS

    You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects.

    You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document.

    7. AGGREGATION WITH INDEPENDENT WORKS

    A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, does not as a whole count as a Modified Version of the Document, provided no compilation copyright is claimed for the compilation. Such a compilation is called an "aggregate", and this License does not apply to the other self-contained works thus compiled with the Document, on account of their being thus compiled, if they are not themselves derivative works of the Document.

    If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one quarter of the entire aggregate, the Document's Cover Texts may be placed on covers that surround only the Document within the aggregate. Otherwise they must appear on covers around the whole aggregate.

    8. TRANSLATION

    Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License provided that you also include the original English version of this License. In case of a disagreement between the translation and the original English version of this License, the original English version will prevail.

    9. TERMINATION

    You may not copy, modify, sublicense, or distribute the Document except as expressly provided for under this License. Any other attempt to copy, modify, sublicense or distribute the Document is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.

    10. FUTURE REVISIONS OF THIS LICENSE

    The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See http://www.gnu.org/copyleft/.

    Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation.

    How to use this License for your documents

    To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page:

    Copyright (c) YEAR YOUR NAME. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. A copy of the license is included in the section entitled "GNU Free Documentation License".

    If you have no Invariant Sections, write "with no Invariant Sections" instead of saying which ones are invariant. If you have no Front-Cover Texts, write "no Front-Cover Texts" instead of "Front-Cover Texts being LIST"; likewise for Back-Cover Texts.

    If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software.

    libdbi-drivers-0.9.0/drivers/sqlite/dbd_sqlite/f23.html000644 001750 001750 00000005716 12117467172 023661 0ustar00markusmarkus000000 000000 Preface

    Preface

    libdbi is a database abstraction layer written in C. It implements a framework that can utilize separate driver libraries for specific database servers. The libdbi-drivers project provides the drivers necessary to talk to the supported database servers.

    This manual provides information about the sqlite driver. The manual is intended for programmers who write applications linked against libdbi and who want their applications to work with the sqlite driver.

    Questions and comments about the sqlite driver should be sent to the libdbi-drivers-devel mailing list. Visit the libdbi-drivers-devel list page to subscribe and for further information. Questions and comments about the libdbi library should be sent to the appropriate libdbi mailing list.

    The sqlite driver is maintained by Markus Hoenicka.

    libdbi-drivers-0.9.0/drivers/sqlite/dbd_sqlite/index.html000644 001750 001750 00000006366 12117467172 024400 0ustar00markusmarkus000000 000000 sqlite driver manual

    sqlite driver manual

    A libdbi driver using the SQLite embedded database engine

    Markus Hoenicka

    Revision History
    Revision $Revision: 1.11 $$Date: 2008/05/16 15:09:43 $

    Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is included in Appendix A.


    libdbi-drivers-0.9.0/drivers/sqlite/dbd_sqlite/x139.html000644 001750 001750 00000017702 12117467172 023771 0ustar00markusmarkus000000 000000 SQLite (mis)features

    4.1. SQLite (mis)features

    As the SQLite package is constantly being improved, you should refer to the original documentation about the SQL features it supports and about the SQL features it doesn't support.

    One noticeable difference between SQLite and other SQL database engines is that the former is typeless. All data are stored as strings, and you can insert any type of data into any column. While the SQLite author has good reasons for this feature, it is an obstacle to using the strongly typed retrieval functions of libdbi. The only way out is to declare the column types in a CREATE TABLE statement just as you would with any other SQL database engine. As an example, the following statement is perfectly fine with SQLite, but not with the sqlite driver:

    CREATE TABLE foo (a,b,c)

    However, the following statement is fine with SQLite, the sqlite driver, and just about any other SQL database server:

    CREATE TABLE foo (a INTEGER,b TEXT,c VARCHAR(64))

    The following table lists the column types which are positively recognized by the sqlite driver. Essentially all column types supported by MySQL and PostgreSQL are supported by this driver as well, making it reasonably easy to write portable SQL code. All other column types are treated as strings.

    Table 4-1. SQL column types supported by the sqlite driver

    typedescription
    TINYBLOB, BLOB, MEDIUMBLOB, LONGBLOB, BYTEAString types of unlimited length. Binary data must be safely encoded, see text.
    CHAR(), VARCHAR(), TINYTEXT, TEXT, MEDIUMTEXT, LONGTEXTString types of unlimited length. There is no chopping or padding performed by the database engine.
    ENUMString type of unlimited length. In contrast to MySQL, choosing ENUM over VARCHAR does not save any storage space.
    SETString type of unlimited length. In contrast to MySQL, the input is not checked against the list of allowed values.
    YEARString type of unlimited length. MySQL stores 2 or 4 digit years as a 1 byte value, whereas the SQLite drivers stores the string as provided.
    TINYINT, INT1, CHARA 1 byte type used to store one character, a signed integer between -128 and 127, or an unsigned integer between 0 and 255.
    SMALLINT, INT22 byte (short) integer type used to store a signed integer between -32768 and 32767 or an unsigned integer between 0 and 65535.
    MEDIUMINT3 byte integer type used to store a signed integer between -8388608 and 8388607 or an unsigned integer between 0 and 16777215.
    INT, INTEGER, INT44 byte (long) integer type used to store a signed integer between -2147483648 and 2147483647 or an unsigned integer between 0 and 4294967295.
    BIGINT, INT88 byte (long long) integer type used to store a signed integer between -9223372036854775808 and 9223372036854775807 or an unsigned integer between 0 and 18446744073709551615.
    DECIMAL, NUMERICA string type of unlimited length used to store floating-point numbers of arbitrary precision.
    TIMESTAMP, DATETIMEA string type of unlimited length used to store date/time combinations. The required format is 'YYYY-MM-DD HH:MM:SS', anything following this pattern is ignored.
    DATEA string type of unlimited length used to store a date. The required format is 'YYYY-MM-DD', anything following this pattern is ignored.
    TIMEA string type of unlimited length used to store a time. The required format is 'HH:MM:SS', anything following this pattern is ignored.
    FLOAT, FLOAT4, REALA 4 byte floating-point number. The range is -3.402823466E+38 to -1.175494351E-38, 0, and 1.175494351E-38 to 3.402823466E+38. Please note that MySQL treats REAL as an 8 byte instead of a 4 byte float like PostgreSQL.
    DOUBLE, DOUBLE PRECISION, FLOAT8An 8 byte floating-point number. The range is -1.7976931348623157E+308 to -2.2250738585072014E-308, 0, and 2.2250738585072014E-308 to 1.7976931348623157E+308.

    Another difference is the lack of access control on the database engine level. Most SQL database servers implement some mechanisms to restrict who is allowed to fiddle with the databases and who is not. As SQLite uses regular files to store its databases, all available access control is on the filesystem level. There is no SQL interface to this kind of access control, but chmod and chown are your friends.

    SQLite appears to implement row and column counters as C long int values. This limits the maximum number of rows somewhat compared to other SQL database engines.

    SQLite does not have specific support for binary data. If you want to store binary data (e.g. character sequences containing NULL bytes) in a fashion that is portable across all database servers supported by libdbi, use the libdbi function _dbd_encode_binary.

    SQLite currently supports different character encodings only as compile-time options. There is no way to change the encoding at runtime or per database.

    libdbi-drivers-0.9.0/drivers/sqlite/dbd_sqlite/x215.html000644 001750 001750 00000011256 12117467172 023762 0ustar00markusmarkus000000 000000 sqlite driver misfeatures

    4.2. sqlite driver misfeatures

    And now we have to discuss how successful the sqlite driver is in squeezing the SQLite idea of a database engine into the libdbi framework which was shaped after MySQL and PostgreSQL. Keep in mind that the limitations mentioned here are not intrinsic, that is a sufficient amount of coding might fix these problems eventually.

    • The sqlite driver has not been tested for memory leaks yet. It may leak memory like hell.

    • The typeless nature of SQLite has some nasty consequences. The sqlite driver takes great care to reconstruct the type of a field that you request in a query, but this isn't always successful. Some of the functions that SQLite supports work both on numeric and text data. The sqlite driver currently cannot deduce the field type correctly as it would have to check all arguments of each function. Instead the sqlite driver makes a few assumptions that may be right or wrong in a given case. The affected functions are coalesce(X,Y,...), max(X), min(X), and count(X).

    • The sqlite driver currently assumes that the directory separator of your filesystem is a slash (/). This may be wrong on your particular system. It is not a problem for Windows systems as long as the sqlite driver is built with the Cygwin tools (see README.win32).

      Note: Building the sqlite driver on Windows/Cygwin has not been tested yet, but it uses the same procedure as the other libdbi drivers. Chances are that it works.

    • Listing tables with the dbi_conn_get_table_list() libdbi function currently returns only permanent tables. Temporary tables are ignored.

    • The sqlite driver assumes that table and field names do not exceed 128 characters in length, including the trailing \0. I don't know whether SQLite internally has such a limit or not (both MySQL and PostgreSQL have a lower limit). The limit can be increased by changing a single #define in the dbd_sqlite.h header file.

    • In a few cases, the sqlite driver expects you to type SQL keywords in all lowercase or all uppercase, but not mixed. This holds true for the 'from' in a SELECT statement. Type it either as 'from' or as 'FROM', but refrain from using 'fRoM' or other funny mixtures of uppercase and lowercase. Most other database engines treat the keywords as case-insensitive and would accept all variants.

    libdbi-drivers-0.9.0/drivers/sqlite/dbd_sqlite/x48.html000644 001750 001750 00000005334 12117467172 023706 0ustar00markusmarkus000000 000000 Prerequisites

    2.1. Prerequisites

    The following packages have to be installed on your system:

    libdbi

    This library provides the framework of the database abstraction layer which can utilize the sqlite driver to perform database operations. The download page as well as the mailing lists with bug reports and patches are accessible at sourceforge.net/projects/libdbi.

    sqlite

    This library implements the embeddable database engine. Find the most recent release at www.sqlite.org. The current version of the sqlite driver was tested with SQLite version 2.7.6. and should work ok with later releases.

    libdbi-drivers-0.9.0/drivers/sqlite/dbd_sqlite/x62.html000644 001750 001750 00000012254 12117467172 023701 0ustar00markusmarkus000000 000000 Build and install the sqlite driver

    2.2. Build and install the sqlite driver

    First you have to unpack the libdbi-drivers archive in a suitable directory. Unpacking will create a new subdirectory libdbi-drivers-X.Y where "X.Y" denotes the version:

    $ tar -xzf libdbi-drivers-0.3.tar.gz

    The libdbi-drivers project consists of several drivers that use a common build system. Therefore you must tell configure explicitly that you want to build the sqlite driver (you can list as many drivers as you want to build):

    $ cd libdbi-drivers
    $ ./configure --with-sqlite

    Run ./configure --help to find out about additional options.

    Then build the driver with the command:

    $ make

    Note: Please note that you may have to invoke gmake, the GNU version of make, on some systems.

    Then install the driver with the command (you'll need root permissions to do this):

    $ make install

    To test the operation of the newly installed driver, use the command:

    $ make check

    This command creates and runs a test program that performs a few basic input and output tests. The program will ask for a database name. This can be any name that is a valid filename on your system. It will also ask for a data directory. This is the directory that is used to create the test database. Needless to say that you need write access to that directory. If you accept the default ".", the database will be created in the tests subdirectory.

    Note: If for some reason you need to re-create the autoconf/automake-related files, try running ./autogen.sh. I've found out that the current stable autoconf/automake/libtool versions (as found in FreeBSD 4.7 and Debian 3.0) do not cooperate well, so I found it necessary to run the older autoconf 2.13. If necessary, edit autogen.sh so that it will catch the older autoconf version on your system.

    libdbi-drivers-0.9.0/drivers/pgsql/dbd_pgsql/000755 001750 001750 00000000000 12117473272 022040 5ustar00markusmarkus000000 000000 libdbi-drivers-0.9.0/drivers/pgsql/README000644 001750 001750 00000001326 07673517665 021003 0ustar00markusmarkus000000 000000 libdbi-drivers - drivers for libdbi, the Database Independent Abstraction Layer for C Copyright (C) 2001-2002, Markus Hoenicka http://libdbi-drivers.sourceforge.net POSTGRESQL DRIVER: ------------------ This driver allows libdbi-enabled applications to use PostgreSQL as a database backend. Internally, it provides a libdbi driver around the libpq client library. See the included driver documentation for installation instructions, usage, and information about driver-specific peculiarities. CONTACT INFO: ------------- libdbi-drivers-devel@lists.sourceforge.net http://libdbi-drivers.sourceforge.net David Parker $Id: README,v 1.1 2003/06/17 04:57:25 dap24 Exp $ libdbi-drivers-0.9.0/drivers/pgsql/Makefile.am000644 001750 001750 00000002774 11447472773 022161 0ustar00markusmarkus000000 000000 ## Process this file with automake to produce Makefile.in AUTOMAKE_OPTIONS = foreign docdir = $(datadir)/doc/$(PACKAGE)-$(VERSION) if HAVE_PGSQL if BUILDDOCS htdocdir = $(docdir)/dbd_pgsql doc_DATA = dbd_pgsql.pdf htdoc_DATA = dbd_pgsql/* else htdocdir = doc_DATA = htdoc_DATA = endif pgsql_ltlibs = libdbdpgsql.la pgsql_ldflags = -module -avoid-version pgsql_sources = dbd_pgsql.c else htdocdir = doc_DATA = htdoc_DATA = pgsql_ltlibs = pgsql_ldflags = pgsql_sources = endif INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/include @DBI_INCLUDE@ @PGSQL_INCLUDE@ libdir = $(driverdir) lib_LTLIBRARIES = $(pgsql_ltlibs) libdbdpgsql_la_LDFLAGS = $(pgsql_ldflags) @PGSQL_LDFLAGS@ @PGSQL_LIBS@ @LIBADD_LIBDBI@ libdbdpgsql_la_SOURCES = $(pgsql_sources) libdbdpgsql_la_DEPENDENCIES = dbd_pgsql.h EXTRA_DIST = dbd_pgsql.c dbd_pgsql.h AUTHORS TODO README dbd_pgsql.sgml dbd_pgsql.pdf dbd_pgsql/* # jadetex spews out tons of useless crap. shut it up: dbd_pgsql.pdf: dbd_pgsql.sgml @echo "Converting dbd_pgsql.sgml to PDF..."; openjade -t tex -V tex-backend -d $(top_srcdir)/doc/include/doc-print.dsl dbd_pgsql.sgml # run jadetex three times to get the references right pdftex "&pdfjadetex" dbd_pgsql.tex pdftex "&pdfjadetex" dbd_pgsql.tex pdftex "&pdfjadetex" dbd_pgsql.tex dbd_pgsql/*: dbd_pgsql.sgml @echo "Converting dbd_pgsql.sgml to HTML..."; mkdir -p dbd_pgsql && cd dbd_pgsql && openjade -t sgml -d $(top_srcdir)/../doc/include/doc-html.dsl ../dbd_pgsql.sgml maintainer-clean: clean rm -f dbd_pgsql.pdf dbd_pgsql/* libdbi-drivers-0.9.0/drivers/pgsql/Makefile.in000644 001750 001750 00000055171 12117467053 022157 0ustar00markusmarkus000000 000000 # Makefile.in generated by automake 1.12.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2012 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = drivers/pgsql DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(top_srcdir)/depcomp AUTHORS ChangeLog TODO ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(docdir)" \ "$(DESTDIR)$(htdocdir)" LTLIBRARIES = $(lib_LTLIBRARIES) libdbdpgsql_la_LIBADD = am__libdbdpgsql_la_SOURCES_DIST = dbd_pgsql.c @HAVE_PGSQL_TRUE@am__objects_1 = dbd_pgsql.lo am_libdbdpgsql_la_OBJECTS = $(am__objects_1) libdbdpgsql_la_OBJECTS = $(am_libdbdpgsql_la_OBJECTS) libdbdpgsql_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(libdbdpgsql_la_LDFLAGS) $(LDFLAGS) -o $@ @HAVE_PGSQL_TRUE@am_libdbdpgsql_la_rpath = -rpath $(libdir) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(libdbdpgsql_la_SOURCES) DIST_SOURCES = $(am__libdbdpgsql_la_SOURCES_DIST) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac DATA = $(doc_DATA) $(htdoc_DATA) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DB2_INCLUDE = @DB2_INCLUDE@ DB2_LDFLAGS = @DB2_LDFLAGS@ DB2_LIBS = @DB2_LIBS@ DB2_TEST = @DB2_TEST@ DBI_INCLUDE = @DBI_INCLUDE@ DEBUG = @DEBUG@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FIREBIRD_INCLUDE = @FIREBIRD_INCLUDE@ FIREBIRD_ISQL = @FIREBIRD_ISQL@ FIREBIRD_ISQL_FLAG = @FIREBIRD_ISQL_FLAG@ FIREBIRD_LDFLAGS = @FIREBIRD_LDFLAGS@ FIREBIRD_LIBS = @FIREBIRD_LIBS@ FIREBIRD_TEST = @FIREBIRD_TEST@ FREETDS_INCLUDE = @FREETDS_INCLUDE@ FREETDS_LDFLAGS = @FREETDS_LDFLAGS@ FREETDS_LIBS = @FREETDS_LIBS@ FREETDS_TEST = @FREETDS_TEST@ GREP = @GREP@ INGRES_INCLUDE = @INGRES_INCLUDE@ INGRES_LDFLAGS = @INGRES_LDFLAGS@ INGRES_LIBS = @INGRES_LIBS@ INGRES_TEST = @INGRES_TEST@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBADD_LIBDBI = @LIBADD_LIBDBI@ LIBDBI_LIBDIR = @LIBDBI_LIBDIR@ LIBDBI_TEST = @LIBDBI_TEST@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSQL_INCLUDE = @MSQL_INCLUDE@ MSQL_LDFLAGS = @MSQL_LDFLAGS@ MSQL_LIBS = @MSQL_LIBS@ MSQL_TEST = @MSQL_TEST@ MYSQL_CONFIG = @MYSQL_CONFIG@ MYSQL_INCLUDE = @MYSQL_INCLUDE@ MYSQL_LDFLAGS = @MYSQL_LDFLAGS@ MYSQL_LIBS = @MYSQL_LIBS@ MYSQL_TEST = @MYSQL_TEST@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ ORACLE_INCLUDE = @ORACLE_INCLUDE@ ORACLE_LDFLAGS = @ORACLE_LDFLAGS@ ORACLE_LIBS = @ORACLE_LIBS@ ORACLE_TEST = @ORACLE_TEST@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PGSQL_INCLUDE = @PGSQL_INCLUDE@ PGSQL_LDFLAGS = @PGSQL_LDFLAGS@ PGSQL_LIBS = @PGSQL_LIBS@ PGSQL_TEST = @PGSQL_TEST@ PG_CONFIG = @PG_CONFIG@ PROFILE = @PROFILE@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SQLITE3_INCLUDE = @SQLITE3_INCLUDE@ SQLITE3_LDFLAGS = @SQLITE3_LDFLAGS@ SQLITE3_LIBS = @SQLITE3_LIBS@ SQLITE3_TEST = @SQLITE3_TEST@ SQLITE_INCLUDE = @SQLITE_INCLUDE@ SQLITE_LDFLAGS = @SQLITE_LDFLAGS@ SQLITE_LIBS = @SQLITE_LIBS@ SQLITE_TEST = @SQLITE_TEST@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ dbi_dbdir = @dbi_dbdir@ docdir = $(datadir)/doc/$(PACKAGE)-$(VERSION) docs_subdirs = @docs_subdirs@ driverdir = @driverdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = $(driverdir) libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = foreign @BUILDDOCS_FALSE@@HAVE_PGSQL_TRUE@htdocdir = @BUILDDOCS_TRUE@@HAVE_PGSQL_TRUE@htdocdir = $(docdir)/dbd_pgsql @HAVE_PGSQL_FALSE@htdocdir = @BUILDDOCS_FALSE@@HAVE_PGSQL_TRUE@doc_DATA = @BUILDDOCS_TRUE@@HAVE_PGSQL_TRUE@doc_DATA = dbd_pgsql.pdf @HAVE_PGSQL_FALSE@doc_DATA = @BUILDDOCS_FALSE@@HAVE_PGSQL_TRUE@htdoc_DATA = @BUILDDOCS_TRUE@@HAVE_PGSQL_TRUE@htdoc_DATA = dbd_pgsql/* @HAVE_PGSQL_FALSE@htdoc_DATA = @HAVE_PGSQL_FALSE@pgsql_ltlibs = @HAVE_PGSQL_TRUE@pgsql_ltlibs = libdbdpgsql.la @HAVE_PGSQL_FALSE@pgsql_ldflags = @HAVE_PGSQL_TRUE@pgsql_ldflags = -module -avoid-version @HAVE_PGSQL_FALSE@pgsql_sources = @HAVE_PGSQL_TRUE@pgsql_sources = dbd_pgsql.c INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/include @DBI_INCLUDE@ @PGSQL_INCLUDE@ lib_LTLIBRARIES = $(pgsql_ltlibs) libdbdpgsql_la_LDFLAGS = $(pgsql_ldflags) @PGSQL_LDFLAGS@ @PGSQL_LIBS@ @LIBADD_LIBDBI@ libdbdpgsql_la_SOURCES = $(pgsql_sources) libdbdpgsql_la_DEPENDENCIES = dbd_pgsql.h EXTRA_DIST = dbd_pgsql.c dbd_pgsql.h AUTHORS TODO README dbd_pgsql.sgml dbd_pgsql.pdf dbd_pgsql/* all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign drivers/pgsql/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign drivers/pgsql/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ } uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libdbdpgsql.la: $(libdbdpgsql_la_OBJECTS) $(libdbdpgsql_la_DEPENDENCIES) $(EXTRA_libdbdpgsql_la_DEPENDENCIES) $(libdbdpgsql_la_LINK) $(am_libdbdpgsql_la_rpath) $(libdbdpgsql_la_OBJECTS) $(libdbdpgsql_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dbd_pgsql.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-docDATA: $(doc_DATA) @$(NORMAL_INSTALL) @list='$(doc_DATA)'; test -n "$(docdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(docdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(docdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(docdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(docdir)" || exit $$?; \ done uninstall-docDATA: @$(NORMAL_UNINSTALL) @list='$(doc_DATA)'; test -n "$(docdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(docdir)'; $(am__uninstall_files_from_dir) install-htdocDATA: $(htdoc_DATA) @$(NORMAL_INSTALL) @list='$(htdoc_DATA)'; test -n "$(htdocdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(htdocdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(htdocdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(htdocdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(htdocdir)" || exit $$?; \ done uninstall-htdocDATA: @$(NORMAL_UNINSTALL) @list='$(htdoc_DATA)'; test -n "$(htdocdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(htdocdir)'; $(am__uninstall_files_from_dir) ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(DATA) installdirs: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(docdir)" "$(DESTDIR)$(htdocdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-docDATA install-htdocDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-libLTLIBRARIES install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-docDATA uninstall-htdocDATA \ uninstall-libLTLIBRARIES .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libLTLIBRARIES clean-libtool cscopelist ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am \ install-docDATA install-dvi install-dvi-am install-exec \ install-exec-am install-htdocDATA install-html install-html-am \ install-info install-info-am install-libLTLIBRARIES \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \ uninstall-am uninstall-docDATA uninstall-htdocDATA \ uninstall-libLTLIBRARIES # jadetex spews out tons of useless crap. shut it up: dbd_pgsql.pdf: dbd_pgsql.sgml @echo "Converting dbd_pgsql.sgml to PDF..."; openjade -t tex -V tex-backend -d $(top_srcdir)/doc/include/doc-print.dsl dbd_pgsql.sgml # run jadetex three times to get the references right pdftex "&pdfjadetex" dbd_pgsql.tex pdftex "&pdfjadetex" dbd_pgsql.tex pdftex "&pdfjadetex" dbd_pgsql.tex dbd_pgsql/*: dbd_pgsql.sgml @echo "Converting dbd_pgsql.sgml to HTML..."; mkdir -p dbd_pgsql && cd dbd_pgsql && openjade -t sgml -d $(top_srcdir)/../doc/include/doc-html.dsl ../dbd_pgsql.sgml maintainer-clean: clean rm -f dbd_pgsql.pdf dbd_pgsql/* # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: libdbi-drivers-0.9.0/drivers/pgsql/AUTHORS000644 001750 001750 00000000274 07673517665 021174 0ustar00markusmarkus000000 000000 The following people have been involved in the PostgreSQL driver development: Main developer: * David Parker $Id: AUTHORS,v 1.1 2003/06/17 04:57:25 dap24 Exp $ libdbi-drivers-0.9.0/drivers/pgsql/ChangeLog000644 001750 001750 00000000000 07673517665 021661 0ustar00markusmarkus000000 000000 libdbi-drivers-0.9.0/drivers/pgsql/TODO000644 001750 001750 00000000364 07673526114 020601 0ustar00markusmarkus000000 000000 $Id: TODO,v 1.2 2003/06/17 05:51:08 dap24 Exp $ - finish documentation - support new connection options, see http://www.postgresql.org/docs/view.php?version=7.3&idoc=0&file=libpq-connect.html - define driver capabilities - dbd_query_null ? libdbi-drivers-0.9.0/drivers/pgsql/dbd_pgsql.c000644 001750 001750 00000064416 12105047153 022207 0ustar00markusmarkus000000 000000 /* * libdbi - database independent abstraction layer for C. * Copyright (C) 2001-2002, David Parker and Mark Tobenkin. * http://libdbi.sourceforge.net * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * dbd_pgsql.c: PostgreSQL database support (using libpq) * Copyright (C) 2001-2002, David A. Parker . * http://libdbi.sourceforge.net * * $Id: dbd_pgsql.c,v 1.69 2013/02/08 01:01:31 mhoenicka Exp $ */ #ifdef HAVE_CONFIG_H #include #endif #define _GNU_SOURCE /* we need asprintf */ #ifndef HAVE_ATOLL long long atoll(const char *str); #endif #ifndef HAVE_STRTOLL long long strtoll(const char *nptr, char **endptr, int base); #endif /* In 7.4 PQfreeNotify was deprecated and PQfreemem is used instead. A macro exists in 7.4 for backwards compatibility. */ #ifndef PQfreeNotify /* must be earlier than 7.4 */ #define PQfreemem PQfreeNotify #endif #include #include #include #include /* for isdigit() */ #include #include #include #include #include "dbd_pgsql.h" static const dbi_info_t driver_info = { "pgsql", "PostgreSQL database support (using libpq)", "David A. Parker ", "http://libdbi-drivers.sourceforge.net", "dbd_pgsql v" VERSION, __DATE__ }; static const char *custom_functions[] = PGSQL_CUSTOM_FUNCTIONS; static const char *reserved_words[] = PGSQL_RESERVED_WORDS; /* encoding strings, array is terminated by a pair of empty strings */ static const char pgsql_encoding_hash[][16] = { /* PostgreSQL , www.iana.org */ "SQL_ASCII", "US-ASCII", "EUC_JP", "EUC-JP", "EUC_KR", "EUC-KR", "UNICODE", "UTF-8", "UTF8", "UTF-8", "LATIN1", "ISO-8859-1", "LATIN2", "ISO-8859-2", "LATIN3", "ISO-8859-3", "LATIN4", "ISO-8859-4", "LATIN5", "ISO-8859-9", "LATIN6", "ISO-8859-10", "LATIN7", "ISO-8859-13", "LATIN8", "ISO-8859-14", "LATIN9", "ISO-8859-15", "LATIN10", "ISO-8859-16", "ISO-8859-5", "ISO-8859-5", "ISO-8859-6", "ISO-8859-6", "ISO-8859-7", "ISO-8859-7", "ISO-8859-8", "ISO-8859-8", "KOI8", "KOI8-R", "WIN", "windows-1251", "ALT", "IBM866", "", "" }; /* forward declarations of internal functions */ void _translate_postgresql_type(unsigned int oid, unsigned short *type, unsigned int *attribs); void _get_field_info(dbi_result_t *result); void _get_row_data(dbi_result_t *result, dbi_row_t *row, unsigned long long rowidx); int _dbd_real_connect(dbi_conn_t *conn, const char *db); char *_unescape_hex_binary(char* raw, size_t in_len, size_t* out_len); int _digit_to_number(const char c); /* this function is available through the PostgreSQL client library, but it is not declared in any of their headers. I hope this won't break anything */ const char *pg_encoding_to_char(int encoding_id); /* these are helpers for dbd_real_connect */ #define CONNINFO_APPEND_ESCAPED(conninfo, fmt, key, value ) \ do { \ size_t orig_size = strlen( value ); \ char *value_escaped = malloc( 2 * orig_size + 1 ); \ _dbd_escape_chars( value_escaped, value, orig_size, "\\'" ); \ CONNINFO_APPEND( conninfo, fmt, key, value_escaped ); \ free( value_escaped ); \ } while(0) #define CONNINFO_APPEND(conninfo, fmt, key, value ) \ do { \ char *tmp = conninfo; \ if( conninfo ) { \ asprintf( &conninfo, "%s " fmt, tmp, key, value ); \ free( tmp ); \ } \ else \ asprintf( &conninfo, fmt, key, value ); \ } while(0) /* base36 decoding to convert the 5 alphanumeric chars of SQLSTATE to a 32bit int */ int base36decode(char *base36) { int len = strlen(base36); int output = 0; int pos = 0; for (; pos < len; pos++) { char c = base36[pos]; if ( ((c - '0') >= 0) && ((c - '0') <= 9) ) { c = c - '0'; } else { c = c - 'A' + 10; } output = 36 * output + c; } return output; } /* real code starts here */ void dbd_register_driver(const dbi_info_t **_driver_info, const char ***_custom_functions, const char ***_reserved_words) { /* this is the first function called after the driver module is loaded into memory */ *_driver_info = &driver_info; *_custom_functions = custom_functions; *_reserved_words = reserved_words; } int dbd_initialize(dbi_driver_t *driver) { /* perform any database-specific server initialization. * this is called right after dbd_register_driver(). * return -1 on error, 0 on success. if -1 is returned, the driver will not * be added to the list of available drivers. */ /* this indicates the driver can be safely unloaded when libdbi is shut down. Change the value to '0' (zero) if the driver, or a library it is linked against, installs exit handlers via atexit() */ _dbd_register_driver_cap(driver, "safe_dlclose", 1); /* this indicates the database engine supports transactions */ _dbd_register_driver_cap(driver, "transaction_support", 1); /* this indicates the database engine supports savepoints */ _dbd_register_driver_cap(driver, "savepoint_support", 1); return 0; } int dbd_finalize(dbi_driver_t *driver) { /* perform any database-specific client library shutdown. * this is called right before dlclose()ing the driver. * return -1 on error, 0 on success. */ return 0; } int dbd_connect(dbi_conn_t *conn) { return _dbd_real_connect(conn, NULL); } int _dbd_real_connect(dbi_conn_t *conn, const char *db) { const char *dbname; const char *encoding = dbi_conn_get_option(conn, "encoding"); PGconn *pgconn; char *conninfo = NULL; const char *optname = NULL; const char *pgopt; const char *optval; int optval_num; int have_port = 0; /* PQconnectdb accepts additional options as a string of "key=value" pairs. Assemble that string from the option list */ while(( pgopt = optname = dbi_conn_get_option_list( conn, optname ) )) { /* Ignore "encoding" and "dbname"; we'll deal with them later */ if ( !strcmp( pgopt, "encoding" ) || !strcmp( pgopt, "dbname" ) ) { continue; } /* Map "username" to "user" */ else if( !strcmp( pgopt, "username" ) ) { pgopt = "user"; } else if (!strcmp(pgopt, "timeout")) { pgopt = "connect_timeout"; } /* Map "pgsql_foo" to "foo" */ else if( !strncmp( pgopt, "pgsql_", 6 ) ) { pgopt += 6; } /* Accept these non-pgsql_ options but discard all others */ else if (strcmp(pgopt, "password") && strcmp(pgopt, "host") && strcmp(pgopt, "port")) { continue; } if (!strcmp(pgopt, "port")) { have_port++; } optval = dbi_conn_get_option( conn, optname ); optval_num = dbi_conn_get_option_numeric( conn, optname ); if( optval ) { CONNINFO_APPEND_ESCAPED( conninfo, "%s='%s'", pgopt, optval ); } else { CONNINFO_APPEND( conninfo, "%s='%d'", pgopt, optval_num ); } } if (db && *db) { dbname = db; } else { dbname = dbi_conn_get_option(conn, "dbname"); } if( dbname ) CONNINFO_APPEND_ESCAPED( conninfo, "%s='%s'", "dbname", dbname ); /* if no port was specified, fill in the default PostgreSQL port */ if (!have_port) { CONNINFO_APPEND( conninfo, "%s='%d'", "port", 5432 ); } /* send an empty string instead of NULL if there are no options */ pgconn = PQconnectdb(conninfo ? conninfo : ""); if (conninfo) free(conninfo); if (!pgconn) return -1; if (PQstatus(pgconn) == CONNECTION_BAD) { conn->connection = (void *)pgconn; // still need this set so _error_handler can grab information _dbd_internal_error_handler(conn, NULL, DBI_ERROR_DBD); PQfinish(pgconn); conn->connection = NULL; // pgconn no longer valid return -2; } else { conn->connection = (void *)pgconn; if (dbname) conn->current_db = strdup(dbname); } if (encoding && *encoding) { /* set connection encoding */ if (strcmp(encoding, "auto")) { if (PQsetClientEncoding(pgconn, dbd_encoding_from_iana(encoding))) { /* printf("could not set client encoding to %s\n", dbd_encoding_from_iana(encoding)); */ } } /* else: by default, pgsql uses the database encoding as the client encoding, nothing to do */ } return 0; } int dbd_disconnect(dbi_conn_t *conn) { if (conn->connection) { PQfinish((PGconn *)conn->connection); } return 0; } int dbd_fetch_row(dbi_result_t *result, unsigned long long rowidx) { dbi_row_t *row = NULL; if (result->result_state == NOTHING_RETURNED) return 0; if (result->result_state == ROWS_RETURNED) { /* get row here */ row = _dbd_row_allocate(result->numfields); _get_row_data(result, row, rowidx); _dbd_row_finalize(result, row, rowidx); } return 1; /* 0 on error, 1 on successful fetchrow */ } int dbd_free_query(dbi_result_t *result) { PQclear((PGresult *)result->result_handle); return 0; } int dbd_goto_row(dbi_result_t *result, unsigned long long rowidx, unsigned long long currowidx) { /* libpq doesn't have to do anything, the row index is specified when * fetching fields */ return 1; } int dbd_get_socket(dbi_conn_t *conn) { PGconn *pgconn = (PGconn*) conn->connection; if(!pgconn) return -1; return PQsocket(pgconn); } const char *dbd_get_encoding(dbi_conn_t *conn){ const char* my_enc; int n_encoding; const char* encodingopt; char* sql_cmd; dbi_result dbires = NULL; PGconn *pgconn = (PGconn*) conn->connection; if(!pgconn) return NULL; encodingopt = dbi_conn_get_option(conn, "encoding"); if (encodingopt && !strcmp(encodingopt, "auto")) { /* this is somewhat murky as the pg_encoding_to_char() function is not declared properly by the PostgreSQL client library headers. This may indicate that it is not supposed to be exported or that it may disappear without a trace eventually. If it breaks, use a query "SHOW CLIENT_ENCODING" instead */ my_enc = pg_encoding_to_char(PQclientEncoding(pgconn)); /* printf("use PQclientEncoding, auto\n"); */ } else if (encodingopt) { my_enc = pg_encoding_to_char(PQclientEncoding(pgconn)); /* printf("use PQclientEncoding, %s\n", encodingopt); */ } else { asprintf(&sql_cmd, "SELECT encoding FROM pg_database WHERE datname='%s'", conn->current_db); dbires = dbi_conn_query(conn, sql_cmd); free(sql_cmd); if (dbires && dbi_result_next_row(dbires)) { n_encoding = dbi_result_get_int_idx(dbires, 1); my_enc = pg_encoding_to_char(n_encoding); /* printf("select returned encoding %d<<%s\n", n_encoding, my_enc); */ } } if (!my_enc) { return NULL; } else { return dbd_encoding_to_iana(my_enc); } } const char* dbd_encoding_to_iana(const char *db_encoding) { int i = 0; /* loop over all even entries in hash and compare to penc */ while (*pgsql_encoding_hash[i]) { if (!strcmp(pgsql_encoding_hash[i], db_encoding)) { /* return corresponding odd entry */ return pgsql_encoding_hash[i+1]; } i+=2; } /* don't know how to translate, return original encoding */ return db_encoding; } const char* dbd_encoding_from_iana(const char *iana_encoding) { int i = 0; /* loop over all odd entries in hash and compare to ienc */ while (*pgsql_encoding_hash[i+1]) { if (!strcmp(pgsql_encoding_hash[i+1], iana_encoding)) { /* return corresponding even entry */ return pgsql_encoding_hash[i]; } i+=2; } /* don't know how to translate, return original encoding */ return iana_encoding; } char *dbd_get_engine_version(dbi_conn_t *conn, char *versionstring) { snprintf(versionstring, VERSIONSTRING_LENGTH, "%d", PQserverVersion((PGconn *)conn->connection)); return versionstring; } dbi_result_t *dbd_list_dbs(dbi_conn_t *conn, const char *pattern) { dbi_result_t *res; char *sql_cmd; if (pattern == NULL) { return dbd_query(conn, "SELECT datname FROM pg_database"); } else { asprintf(&sql_cmd, "SELECT datname FROM pg_database WHERE datname LIKE '%s'", pattern); res = dbd_query(conn, sql_cmd); free(sql_cmd); return res; } } dbi_result_t *dbd_list_tables(dbi_conn_t *conn, const char *db, const char *pattern) { if (db == NULL) { return NULL; } if (pattern == NULL) { return (dbi_result_t *)dbi_conn_queryf((dbi_conn)conn, "SELECT relname FROM pg_class WHERE relname !~ '^pg_' AND relkind = 'r' AND relowner = (SELECT datdba FROM pg_database WHERE datname = '%s') ORDER BY relname", db); } else { return (dbi_result_t *)dbi_conn_queryf((dbi_conn)conn, "SELECT relname FROM pg_class WHERE relname !~ '^pg_' AND relname LIKE '%s' AND relkind = 'r' AND relowner = (SELECT datdba FROM pg_database WHERE datname = '%s') ORDER BY relname", pattern, db); } } size_t dbd_quote_string(dbi_driver_t *driver, const char *orig, char *dest) { /* foo's -> 'foo\'s' */ size_t len; strcpy(dest, "'"); len = PQescapeString(dest+1, orig, strlen(orig)); strcat(dest, "'"); return len+2; } size_t dbd_conn_quote_string(dbi_conn_t *conn, const char *orig, char *dest) { return dbd_quote_string(conn->driver, orig, dest); } size_t dbd_quote_binary(dbi_conn_t *conn, const unsigned char* orig, size_t from_length, unsigned char **ptr_dest) { unsigned char *temp = NULL; unsigned char *quoted_temp = NULL; size_t to_length; temp = PQescapeByteaConn((PGconn *)conn->connection, orig, from_length, &to_length); if (!temp) { return 0; } if ((quoted_temp = malloc(to_length+2)) == NULL) { PQfreemem((void *)temp); return 0; } strcpy((char *)quoted_temp, "'"); strcpy((char *)(quoted_temp+1), (char *)temp); strcat((char *)quoted_temp, "'"); PQfreemem((void*)temp); *ptr_dest = quoted_temp; /* to_length already contains one extra byte for the trailing NULL byte */ return to_length+1; } dbi_result_t *dbd_query(dbi_conn_t *conn, const char *statement) { /* allocate a new dbi_result_t and fill its applicable members: * * result_handle, numrows_matched, and numrows_changed. * everything else will be filled in by DBI */ dbi_result_t *result; PGresult *res; int resstatus; res = PQexec((PGconn *)conn->connection, statement); if (res) resstatus = PQresultStatus(res); if (!res || ((resstatus != PGRES_COMMAND_OK) && (resstatus != PGRES_TUPLES_OK) && (resstatus != PGRES_COPY_OUT) && (resstatus != PGRES_COPY_IN))) { char *base36 = PQresultErrorField(res, PG_DIAG_SQLSTATE); conn->error_number = (! base36) ? 0 : base36decode(base36); PQclear(res); return NULL; } conn->error_number = 0; result = _dbd_result_create(conn, (void *)res, (unsigned long long)PQntuples(res), (unsigned long long)atoll(PQcmdTuples(res))); _dbd_result_set_numfields(result, (unsigned int)PQnfields((PGresult *)result->result_handle)); _get_field_info(result); return result; } dbi_result_t *dbd_query_null(dbi_conn_t *conn, const unsigned char *statement, size_t st_length) { return NULL; } int dbd_transaction_begin(dbi_conn_t *conn) { if (dbd_query(conn, "BEGIN TRANSACTION") == NULL) { return 1; } else { return 0; } } int dbd_transaction_commit(dbi_conn_t *conn) { if (dbd_query(conn, "COMMIT") == NULL) { return 1; } else { return 0; } } int dbd_transaction_rollback(dbi_conn_t *conn) { if (dbd_query(conn, "ROLLBACK") == NULL) { return 1; } else { return 0; } } int dbd_savepoint(dbi_conn_t *conn, const char *savepoint) { char* query; if (!savepoint) { return 1; } asprintf(&query, "SAVEPOINT %s", savepoint); if (dbd_query(conn, query) == NULL) { free(query); return 1; } else { free(query); return 0; } } int dbd_rollback_to_savepoint(dbi_conn_t *conn, const char *savepoint) { char* query; if (!savepoint) { return 1; } asprintf(&query, "ROLLBACK TO SAVEPOINT %s", savepoint); if (dbd_query(conn, query) == NULL) { free(query); return 1; } else { free(query); return 0; } } int dbd_release_savepoint(dbi_conn_t *conn, const char *savepoint) { char* query; if (!savepoint) { return 1; } asprintf(&query, "RELEASE SAVEPOINT %s", savepoint); if (dbd_query(conn, query) == NULL) { free(query); return 1; } else { free(query); return 0; } } const char *dbd_select_db(dbi_conn_t *conn, const char *db) { /* postgresql doesn't support switching databases without reconnecting */ if (!db || !*db) { return NULL; } if (conn->connection) { PQfinish((PGconn *)conn->connection); conn->connection = NULL; } if (_dbd_real_connect(conn, db)) { return NULL; } return db; } int dbd_geterror(dbi_conn_t *conn, int *err_no, char **errstr) { /* put error number into err_no, error string into errstr * return 0 if error, 1 if err_no filled, 2 if errstr filled, 3 if both err_no and errstr filled */ *err_no = conn->error_number; *errstr = strdup(PQerrorMessage((PGconn *)conn->connection)); return 3; } unsigned long long dbd_get_seq_last(dbi_conn_t *conn, const char *sequence) { unsigned long long seq_last = 0; char *sql_cmd; char *rawdata; dbi_result_t *result; asprintf(&sql_cmd, "SELECT currval('%s')", sequence); if (!sql_cmd) return 0; result = dbd_query(conn, sql_cmd); free(sql_cmd); if (result) { rawdata = PQgetvalue((PGresult *)result->result_handle, 0, 0); if (rawdata) { seq_last = (unsigned long long)atoll(rawdata); } dbi_result_free((dbi_result)result); } return seq_last; } unsigned long long dbd_get_seq_next(dbi_conn_t *conn, const char *sequence) { unsigned long long seq_next = 0; char *sql_cmd; char *rawdata; dbi_result_t *result; asprintf(&sql_cmd, "SELECT nextval('%s')", sequence); if (!sql_cmd) return 0; result = dbd_query(conn, sql_cmd); free(sql_cmd); if (result) { rawdata = PQgetvalue((PGresult *)result->result_handle, 0, 0); if (rawdata) { seq_next = (unsigned long long)atoll(rawdata); } dbi_result_free((dbi_result)result); } return seq_next; } int dbd_ping(dbi_conn_t *conn) { PGconn *pgsql = (PGconn *)conn->connection; PGresult *res; res = PQexec(pgsql, "SELECT 1"); if (res) { PQclear (res); } if (PQstatus(pgsql) == CONNECTION_OK) { return 1; } PQreset(pgsql); // attempt a reconnection if (PQstatus(pgsql) == CONNECTION_OK) { return 1; } return 0; } /* CORE POSTGRESQL DATA FETCHING STUFF */ void _translate_postgresql_type(unsigned int oid, unsigned short *type, unsigned int *attribs) { unsigned int _type = 0; unsigned int _attribs = 0; /* fprintf(stderr, "oid went to %d\n", oid); */ switch (oid) { case PG_TYPE_CHAR: _type = DBI_TYPE_INTEGER; _attribs |= DBI_INTEGER_SIZE1; break; case PG_TYPE_INT2: _type = DBI_TYPE_INTEGER; _attribs |= DBI_INTEGER_SIZE2; break; case PG_TYPE_INT4: _type = DBI_TYPE_INTEGER; _attribs |= DBI_INTEGER_SIZE4; break; case PG_TYPE_INT8: _type = DBI_TYPE_INTEGER; _attribs |= DBI_INTEGER_SIZE8; break; case PG_TYPE_OID: _type = DBI_TYPE_INTEGER; _attribs |= DBI_INTEGER_SIZE8; _attribs |= DBI_INTEGER_UNSIGNED; break; case PG_TYPE_FLOAT4: _type = DBI_TYPE_DECIMAL; _attribs |= DBI_DECIMAL_SIZE4; break; case PG_TYPE_FLOAT8: _type = DBI_TYPE_DECIMAL; _attribs |= DBI_DECIMAL_SIZE8; break; case PG_TYPE_DATE: _type = DBI_TYPE_DATETIME; _attribs |= DBI_DATETIME_DATE; break; case PG_TYPE_TIME: case PG_TYPE_TIMETZ: _type = DBI_TYPE_DATETIME; _attribs |= DBI_DATETIME_TIME; break; case PG_TYPE_TIMESTAMP: case PG_TYPE_TIMESTAMPTZ: _type = DBI_TYPE_DATETIME; _attribs |= DBI_DATETIME_DATE; _attribs |= DBI_DATETIME_TIME; break; case PG_TYPE_NAME: case PG_TYPE_TEXT: case PG_TYPE_CHAR2: case PG_TYPE_CHAR4: case PG_TYPE_CHAR8: case PG_TYPE_BPCHAR: case PG_TYPE_VARCHAR: _type = DBI_TYPE_STRING; break; case PG_TYPE_BYTEA: _type = DBI_TYPE_BINARY; break; default: _type = DBI_TYPE_STRING; break; } *type = _type; *attribs = _attribs; } void _get_field_info(dbi_result_t *result) { unsigned int idx = 0; unsigned int pgOID = 0; char *fieldname; unsigned short fieldtype; unsigned int fieldattribs; while (idx < result->numfields) { pgOID = PQftype((PGresult *)result->result_handle, idx); fieldname = PQfname((PGresult *)result->result_handle, idx); _translate_postgresql_type(pgOID, &fieldtype, &fieldattribs); _dbd_result_add_field(result, idx, fieldname, fieldtype, fieldattribs); idx++; } } void _get_row_data(dbi_result_t *result, dbi_row_t *row, unsigned long long rowidx) { unsigned int curfield = 0; char *raw = NULL; size_t strsize = 0; unsigned int sizeattrib; dbi_data_t *data; unsigned char *temp = NULL; size_t unquoted_length; while (curfield < result->numfields) { raw = PQgetvalue((PGresult *)result->result_handle, rowidx, curfield); data = &row->field_values[curfield]; row->field_sizes[curfield] = 0; /* will be set to strlen later on for strings */ if (PQgetisnull((PGresult *)result->result_handle, rowidx, curfield) == 1) { _set_field_flag( row, curfield, DBI_VALUE_NULL, 1); curfield++; continue; } switch (result->field_types[curfield]) { case DBI_TYPE_INTEGER: switch (result->field_attribs[curfield] & DBI_INTEGER_SIZEMASK) { case DBI_INTEGER_SIZE1: data->d_char = (char) atol(raw); break; case DBI_INTEGER_SIZE2: data->d_short = (short) atol(raw); break; case DBI_INTEGER_SIZE3: case DBI_INTEGER_SIZE4: data->d_long = (int) atol(raw); break; case DBI_INTEGER_SIZE8: data->d_longlong = (long long) atoll(raw); break; /* hah, wonder if that'll work */ default: break; } break; case DBI_TYPE_DECIMAL: switch (result->field_attribs[curfield] & DBI_DECIMAL_SIZEMASK) { case DBI_DECIMAL_SIZE4: data->d_float = (float) strtod(raw, NULL); break; case DBI_DECIMAL_SIZE8: data->d_double = (double) strtod(raw, NULL); break; default: break; } break; case DBI_TYPE_STRING: strsize = (size_t)PQgetlength((PGresult *)result->result_handle, rowidx, curfield); data->d_string = strdup(raw); row->field_sizes[curfield] = strsize; break; case DBI_TYPE_BINARY: strsize = (size_t)PQgetlength((PGresult *)result->result_handle, rowidx, curfield); if (strsize > 2 && raw[0] == '\\' && raw[1] == 'x') { /* hex format */ /* row->field_sizes[curfield] = strsize; */ /* data->d_string = malloc(strsize); */ /* memcpy(data->d_string, raw, strsize); */ temp = PQunescapeBytea((const unsigned char *)_unescape_hex_binary(raw, strsize, &unquoted_length), &(row->field_sizes[curfield])); if ((data->d_string = malloc(row->field_sizes[curfield])) == NULL) { PQfreemem(temp); break; } memmove(data->d_string, temp, row->field_sizes[curfield]); PQfreemem(temp); } else { temp = PQunescapeBytea((const unsigned char *)raw, &unquoted_length); if ((data->d_string = malloc(unquoted_length)) == NULL) { PQfreemem(temp); break; } memmove(data->d_string, temp, unquoted_length); PQfreemem(temp); row->field_sizes[curfield] = unquoted_length; } break; case DBI_TYPE_DATETIME: sizeattrib = result->field_attribs[curfield] & (DBI_DATETIME_DATE|DBI_DATETIME_TIME); data->d_datetime = _dbd_parse_datetime(raw, sizeattrib); break; default: break; } curfield++; } } /* this function reverts the changes done by PQescapeByteaConn to a binary string. libpq does not provide such a function. Returns the result as a malloc'ed string which must be freed by the caller. The output string is in the BYTEA escape format with single backslashes and single single quotes. It must be post-processed by PQunescapeBytea() to obtain true binary data */ char *_unescape_hex_binary(char* raw, size_t in_len, size_t* out_len) { size_t i; int in_pair = 0; int last_nibble = 0; char *outstring; char *end_of_outstring; int have_backslash = 0; int have_singlequote = 0; char tempchar; /* algorithm borrowed and modified from: http://pqxx.org/development/libpqxx/browser/trunk/src/binarystring.cxx */ if ((outstring = malloc(((in_len-2)/2)+1)) == NULL) { return NULL; } end_of_outstring = outstring; for (i=2; i. * http://libdbi.sourceforge.net * * $Id: dbd_pgsql.h,v 1.5 2008/03/07 20:51:27 mhoenicka Exp $ */ /* OID declarations from src/interfaces/odbc/pgtypes.h */ #define PG_TYPE_BOOL 16 #define PG_TYPE_BYTEA 17 #define PG_TYPE_CHAR 18 #define PG_TYPE_NAME 19 #define PG_TYPE_INT8 20 #define PG_TYPE_INT2 21 #define PG_TYPE_INT2VECTOR 22 #define PG_TYPE_INT4 23 #define PG_TYPE_REGPROC 24 #define PG_TYPE_TEXT 25 #define PG_TYPE_OID 26 #define PG_TYPE_TID 27 #define PG_TYPE_XID 28 #define PG_TYPE_CID 29 #define PG_TYPE_OIDVECTOR 30 #define PG_TYPE_SET 32 #define PG_TYPE_CHAR2 409 #define PG_TYPE_CHAR4 410 #define PG_TYPE_CHAR8 411 #define PG_TYPE_POINT 600 #define PG_TYPE_LSEG 601 #define PG_TYPE_PATH 602 #define PG_TYPE_BOX 603 #define PG_TYPE_POLYGON 604 #define PG_TYPE_FILENAME 605 #define PG_TYPE_FLOAT4 700 #define PG_TYPE_FLOAT8 701 #define PG_TYPE_ABSTIME 702 #define PG_TYPE_RELTIME 703 #define PG_TYPE_TINTERVAL 704 #define PG_TYPE_UNKNOWN 705 #define PG_TYPE_MONEY 790 #define PG_TYPE_OIDINT2 810 #define PG_TYPE_OIDINT4 910 #define PG_TYPE_OIDNAME 911 #define PG_TYPE_BPCHAR 1042 #define PG_TYPE_VARCHAR 1043 #define PG_TYPE_DATE 1082 #define PG_TYPE_TIME 1083 /* w/o timezone */ #define PG_TYPE_TIMETZ 1266 /* with timezone */ #define PG_TYPE_TIMESTAMP 1114 /* w/o timezone */ #define PG_TYPE_TIMESTAMPTZ 1184 /* with timezone */ #define PG_TYPE_NUMERIC 1700 /* list from http://www.postgresql.org/idocs/index.php?sql-keywords-appendix.html */ #define PGSQL_RESERVED_WORDS { \ "ABORT", \ "ABS", \ "ABSOLUTE", \ "ACCESS", \ "ACTION", \ "ADA", \ "ADD", \ "ADMIN", \ "AFTER", \ "AGGREGATE", \ "ALIAS", \ "ALL", \ "ALLOCATE", \ "ALTER", \ "ANALYSE", \ "ANALYZE", \ "AND", \ "ANY", \ "ARE", \ "ARRAY", \ "AS", \ "ASC", \ "ASENSITIVE", \ "ASSERTION", \ "ASSIGNMENT", \ "ASYMMETRIC", \ "AT", \ "ATOMIC", \ "AUTHORIZATION", \ "AVG", \ "BACKWARD", \ "BEFORE", \ "BEGIN", \ "BETWEEN", \ "BINARY", \ "BIT", \ "BITVAR", \ "BIT_LENGTH", \ "BLOB", \ "BOOLEAN", \ "BOTH", \ "BREADTH", \ "BY", \ "C", \ "CACHE", \ "CALL", \ "CALLED", \ "CARDINALITY", \ "CASCADE", \ "CASCADED", \ "CASE", \ "CAST", \ "CATALOG", \ "CATALOG_NAME", \ "CHAIN", \ "CHAR", \ "CHARACTER", \ "CHARACTERISTICS", \ "CHARACTER_LENGTH", \ "CHARACTER_SET_CATALOG", \ "CHARACTER_SET_NAME", \ "CHARACTER_SET_SCHEMA", \ "CHAR_LENGTH", \ "CHECK", \ "CHECKED", \ "CHECKPOINT", \ "CLASS", \ "CLASS_ORIGIN", \ "CLOB", \ "CLOSE", \ "CLUSTER", \ "COALESCE", \ "COBOL", \ "COLLATE", \ "COLLATION", \ "COLLATION_CATALOG", \ "COLLATION_NAME", \ "COLLATION_SCHEMA", \ "COLUMN", \ "COLUMN_NAME", \ "COMMAND_FUNCTION", \ "COMMAND_FUNCTION_CODE", \ "COMMENT", \ "COMMIT", \ "COMMITTED", \ "COMPLETION", \ "CONDITION_NUMBER", \ "CONNECT", \ "CONNECTION", \ "CONNECTION_NAME", \ "CONSTRAINT", \ "CONSTRAINTS", \ "CONSTRAINT_CATALOG", \ "CONSTRAINT_NAME", \ "CONSTRAINT_SCHEMA", \ "CONSTRUCTOR", \ "CONTAINS", \ "CONTINUE", \ "CONVERT", \ "COPY", \ "CORRESPONDING", \ "COUNT", \ "CREATE", \ "CREATEDB", \ "CREATEUSER", \ "CROSS", \ "CUBE", \ "CURRENT", \ "CURRENT_DATE", \ "CURRENT_PATH", \ "CURRENT_ROLE", \ "CURRENT_TIME", \ "CURRENT_TIMESTAMP", \ "CURRENT_USER", \ "CURSOR", \ "CURSOR_NAME", \ "CYCLE", \ "DATA", \ "DATABASE", \ "DATE", \ "DATETIME_INTERVAL_CODE", \ "DATETIME_INTERVAL_PRECISION", \ "DAY", \ "DEALLOCATE", \ "DEC", \ "DECIMAL", \ "DECLARE", \ "DEFAULT", \ "DEFERRABLE", \ "DEFERRED", \ "DEFINED", \ "DEFINER", \ "DELETE", \ "DELIMITERS", \ "DEPTH", \ "DEREF", \ "DESC", \ "DESCRIBE", \ "DESCRIPTOR", \ "DESTROY", \ "DESTRUCTOR", \ "DETERMINISTIC", \ "DIAGNOSTICS", \ "DICTIONARY", \ "DISCONNECT", \ "DISPATCH", \ "DISTINCT", \ "DO", \ "DOMAIN", \ "DOUBLE", \ "DROP", \ "DYNAMIC", \ "DYNAMIC_FUNCTION", \ "DYNAMIC_FUNCTION_CODE", \ "EACH", \ "ELSE", \ "ENCODING", \ "END", \ "EQUALS", \ "ESCAPE", \ "EVERY", \ "EXCEPT", \ "EXCEPTION", \ "EXCLUSIVE", \ "EXEC", \ "EXECUTE", \ "EXISTING", \ "EXISTS", \ "EXPLAIN", \ "EXTEND", \ "EXTERNAL", \ "EXTRACT", \ "FALSE", \ "FETCH", \ "FINAL", \ "FIRST", \ "FLOAT", \ "FOR", \ "FORCE", \ "FOREIGN", \ "FORTRAN", \ "FORWARD", \ "FOUND", \ "FREE", \ "FROM", \ "FULL", \ "FUNCTION", \ "G", \ "GENERAL", \ "GENERATED", \ "GET", \ "GLOBAL", \ "GO", \ "GOTO", \ "GRANT", \ "GRANTED", \ "GROUP", \ "GROUPING", \ "HANDLER", \ "HAVING", \ "HIERARCHY", \ "HOLD", \ "HOST", \ "HOUR", \ "IDENTITY", \ "IGNORE", \ "ILIKE", \ "IMMEDIATE", \ "IMPLEMENTATION", \ "IN", \ "INCREMENT", \ "INDEX", \ "INDICATOR", \ "INFIX", \ "INHERITS", \ "INITIALIZE", \ "INITIALLY", \ "INNER", \ "INOUT", \ "INPUT", \ "INSENSITIVE", \ "INSERT", \ "INSTANCE", \ "INSTANTIABLE", \ "INSTEAD", \ "INT", \ "INTEGER", \ "INTERSECT", \ "INTERVAL", \ "INTO", \ "INVOKER", \ "IS", \ "ISNULL", \ "ISOLATION", \ "ITERATE", \ "JOIN", \ "K", \ "KEY", \ "KEY_MEMBER", \ "KEY_TYPE", \ "LANCOMPILER", \ "LANGUAGE", \ "LARGE", \ "LAST", \ "LATERAL", \ "LEADING", \ "LEFT", \ "LENGTH", \ "LESS", \ "LEVEL", \ "LIKE", \ "LIMIT", \ "LISTEN", \ "LOAD", \ "LOCAL", \ "LOCALTIME", \ "LOCALTIMESTAMP", \ "LOCATION", \ "LOCATOR", \ "LOCK", \ "LOWER", \ "M", \ "MAP", \ "MATCH", \ "MAX", \ "MAXVALUE", \ "MESSAGE_LENGTH", \ "MESSAGE_OCTET_LENGTH", \ "MESSAGE_TEXT", \ "METHOD", \ "MIN", \ "MINUTE", \ "MINVALUE", \ "MOD", \ "MODE", \ "MODIFIES", \ "MODIFY", \ "MODULE", \ "MONTH", \ "MORE", \ "MOVE", \ "MUMPS", \ "NAME", \ "NAMES", \ "NATIONAL", \ "NATURAL", \ "NCHAR", \ "NCLOB", \ "NEW", \ "NEXT", \ "NO", \ "NOCREATEDB", \ "NOCREATEUSER", \ "NONE", \ "NOT", \ "NOTHING", \ "NOTIFY", \ "NOTNULL", \ "NULL", \ "NULLABLE", \ "NULLIF", \ "NUMBER", \ "NUMERIC", \ "OBJECT", \ "OCTET_LENGTH", \ "OF", \ "OFF", \ "OFFSET", \ "OIDS", \ "OLD", \ "ON", \ "ONLY", \ "OPEN", \ "OPERATION", \ "OPERATOR", \ "OPTION", \ "OPTIONS", \ "OR", \ "ORDER", \ "ORDINALITY", \ "OUT", \ "OUTER", \ "OUTPUT", \ "OVERLAPS", \ "OVERLAY", \ "OVERRIDING", \ "OWNER", \ "PAD", \ "PARAMETER", \ "PARAMETERS", \ "PARAMETER_MODE", \ "PARAMETER_NAME", \ "PARAMETER_ORDINAL_POSITION", \ "PARAMETER_SPECIFIC_CATALOG", \ "PARAMETER_SPECIFIC_NAME", \ "PARAMETER_SPECIFIC_SCHEMA", \ "PARTIAL", \ "PASCAL", \ "PASSWORD", \ "PATH", \ "PENDANT", \ "PLI", \ "POSITION", \ "POSTFIX", \ "PRECISION", \ "PREFIX", \ "PREORDER", \ "PREPARE", \ "PRESERVE", \ "PRIMARY", \ "PRIOR", \ "PRIVILEGES", \ "PROCEDURAL", \ "PROCEDURE", \ "PUBLIC", \ "READ", \ "READS", \ "REAL", \ "RECURSIVE", \ "REF", \ "REFERENCES", \ "REFERENCING", \ "REINDEX", \ "RELATIVE", \ "RENAME", \ "REPEATABLE", \ "RESET", \ "RESTRICT", \ "RESULT", \ "RETURN", \ "RETURNED_LENGTH", \ "RETURNED_OCTET_LENGTH", \ "RETURNED_SQLSTATE", \ "RETURNS", \ "REVOKE", \ "RIGHT", \ "ROLE", \ "ROLLBACK", \ "ROLLUP", \ "ROUTINE", \ "ROUTINE_CATALOG", \ "ROUTINE_NAME", \ "ROUTINE_SCHEMA", \ "ROW", \ "ROWS", \ "ROW_COUNT", \ "RULE", \ "SAVEPOINT", \ "SCALE", \ "SCHEMA", \ "SCHEMA_NAME", \ "SCOPE", \ "SCROLL", \ "SEARCH", \ "SECOND", \ "SECTION", \ "SECURITY", \ "SELECT", \ "SELF", \ "SENSITIVE", \ "SEQUENCE", \ "SERIAL", \ "SERIALIZABLE", \ "SERVER_NAME", \ "SESSION", \ "SESSION_USER", \ "SET", \ "SETOF", \ "SETS", \ "SHARE", \ "SHOW", \ "SIMILAR", \ "SIMPLE", \ "SIZE", \ "SMALLINT", \ "SOME", \ "SOURCE", \ "SPACE", \ "SPECIFIC", \ "SPECIFICTYPE", \ "SPECIFIC_NAME", \ "SQL", \ "SQLCODE", \ "SQLERROR", \ "SQLEXCEPTION", \ "SQLSTATE", \ "SQLWARNING", \ "START", \ "STATE", \ "STATEMENT", \ "STATIC", \ "STDIN", \ "STDOUT", \ "STRUCTURE", \ "STYLE", \ "SUBCLASS_ORIGIN", \ "SUBLIST", \ "SUBSTRING", \ "SUM", \ "SYMMETRIC", \ "SYSID", \ "SYSTEM", \ "SYSTEM_USER", \ "TABLE", \ "TABLE_NAME", \ "TEMP", \ "TEMPLATE", \ "TEMPORARY", \ "TERMINATE", \ "THAN", \ "THEN", \ "TIME", \ "TIMESTAMP", \ "TIMEZONE_HOUR", \ "TIMEZONE_MINUTE", \ "TO", \ "TOAST", \ "TRAILING", \ "TRANSACTION", \ "TRANSACTIONS_COMMITTED", \ "TRANSACTIONS_ROLLED_BACK", \ "TRANSACTION_ACTIVE", \ "TRANSFORM", \ "TRANSFORMS", \ "TRANSLATE", \ "TRANSLATION", \ "TREAT", \ "TRIGGER", \ "TRIGGER_CATALOG", \ "TRIGGER_NAME", \ "TRIGGER_SCHEMA", \ "TRIM", \ "TRUE", \ "TRUNCATE", \ "TRUSTED", \ "TYPE", \ "UNCOMMITTED", \ "UNDER", \ "UNION", \ "UNIQUE", \ "UNKNOWN", \ "UNLISTEN", \ "UNNAMED", \ "UNNEST", \ "UNTIL", \ "UPDATE", \ "UPPER", \ "USAGE", \ "USER", \ "USER_DEFINED_TYPE_CATALOG", \ "USER_DEFINED_TYPE_NAME", \ "USER_DEFINED_TYPE_SCHEMA", \ "USING", \ "VACUUM", \ "VALID", \ "VALUE", \ "VALUES", \ "VARCHAR", \ "VARIABLE", \ "VARYING", \ "VERBOSE", \ "VERSION", \ "VIEW", \ "WHEN", \ "WHENEVER", \ "WHERE", \ "WITH", \ "WITHOUT", \ "WORK", \ "WRITE", \ "YEAR", \ "ZONE", \ NULL } #define PGSQL_CUSTOM_FUNCTIONS { \ "PQconnectdb", \ "PQsetdbLogin", \ "PQsetdb", \ "PQconnectStart", \ "PQconnectPoll", \ "PQconndefaults", \ "PQfinish", \ "PQreset", \ "PQresetStart", \ "PQresetPoll", \ "PQdb", \ "PQuser", \ "PQpass", \ "PQhost", \ "PQport", \ "PQtty", \ "PQoptions", \ "PQstatus", \ "PQtransactionStatus", \ "PQparameterStatus", \ "PQprotocolVersion", \ "PQserverVersion", \ "PQerrorMessage", \ "PQsocket", \ "PQbackendPID", \ "PQgetssl", \ "PQexec", \ "PQexecParams", \ "PQprepare", \ "PQexecPrepared", \ "PQresultStatus", \ "PQresStatus", \ "PQresultErrorMessage", \ "PQresultErrorField", \ "PQclear", \ "PQmakeEmptyPGresult", \ "PQntuples", \ "PQnfields", \ "PQfname", \ "PQfnumber", \ "PQftable", \ "PQftablecol", \ "PQfformat", \ "PQftype", \ "PQfmod", \ "PQfsize", \ "PQbinaryTuples", \ "PQgetvalue", \ "PQgetisnull", \ "PQgetlength", \ "PQprint", \ "PQcmdStatus", \ "PQcmdTuples", \ "PQoidValue", \ "PQoidStatus", \ "PQescapeString", \ "PQescapeBytea", \ "PQunescapeBytea", \ "PQfreemem", \ "PQsendQuery", \ "PQsendQueryParams", \ "PQsendPrepare", \ "PQsendQueryPrepared", \ "PQgetResult", \ "PQconsumeInput", \ "PQisBusy", \ "PQsetnonblocking", \ "PQisnonblocking", \ "PQflush", \ "PQgetCancel", \ "PQfreeCancel", \ "PQcancel", \ "PQrequestCancel", \ "PQfn", \ "PQnotifies", \ "PQputCopyData", \ "PQputCopyEnd", \ "PQgetCopyData", \ "PQgetline", \ "PQgetlineAsync", \ "PQputline", \ "PQputnbytes", \ "PQendcopy", \ "PQsetErrorVerbosity", \ "PQtrace", \ "PQuntrace", \ NULL} libdbi-drivers-0.9.0/drivers/pgsql/dbd_pgsql.sgml000644 001750 001750 00000026767 11013321667 022740 0ustar00markusmarkus000000 000000 ]> &proper-name; Driver Notes Details about the libdbi driver providing support for &proper-name; backends David A. Parker Neon Goat Productions
    david@neongoat.com
    Document revision: $Id: dbd_pgsql.sgml,v 1.7 2008/05/16 15:09:43 mhoenicka Exp $ $Date: 2008/05/16 15:09:43 $ 0.2 2005-07-17 0.1 2003-4-17 2001-2003 David Parker, Neon Goat Productions Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is included in .
    Preface libdbi is a database abstraction layer written in C. It implements a framework that can utilize separate driver libraries for specific database servers. The libdbi-drivers project provides the drivers necessary to talk to the supported database servers. This manual provides information about the &dbd-name; driver, which provides support for &proper-name; databases. The manual is intended for programmers who write applications linked against libdbi and who want their applications to use this database backend. Questions and comments about this driver should be sent to the libdbi-drivers-devel mailing list (see the website). Questions and comments about the libdbi library should be sent to the appropriate libdbi mailing list. This driver is maintained by &author-name;. Introduction PostgreSQL is an object-relational database management system (ORDBMS) based on POSTGRES, Version 4.2, developed at the University of California at Berkeley Computer Science Department. The POSTGRES project, led by Professor Michael Stonebraker, was sponsored by the Defense Advanced Research Projects Agency (DARPA), the Army Research Office (ARO), the National Science Foundation (NSF), and ESL, Inc. PostgreSQL is an open-source descendant of this original Berkeley code. It provides SQL92/SQL99 language support and other modern features. More information can be found from the &proper-name; website. Installation This chapter describes the prerequisites and the procedures to build and install this driver from source code.
    Prerequisites The following packages must be installed on your system: libdbi This library implements the core database abstraction layer, which provides your application with database backend functionality when paired with this driver. More information about libdbi, including mailing lists, documentation, bug reports, and downloads, is available from the libdbi website. libpq This is the C shared library to enable user programs to communicate with the PostgreSQL database backend. The backend can be on another machine and accessed through TCP/IP. This library is distributed as part of PostgreSQL, and can be found on their website. It may also be packaged independently for your operating system, depending on what you use. The current version of the dbd_pgsql driver was written and tested with libpq3 from PostgreSQL 8.0.1.
    Build and install the driver First you have to unpack the libdbi-drivers archive in a suitable directory. Unpacking will create a new subdirectory with the version number, such as libdbi-drivers-0.8.0 $ tar xfvz libdbi-drivers-0.8.0.tar.gz The libdbi-drivers project consists of several drivers that use a common build system. Therefore you must explicitly tell the configuration script that you want to build the &dbd-name; driver (you can list as many drivers as you want to build): $ cd libdbi-drivers-0.8.0 $ ./configure --with-&dbd-name; Run ./configure --help to find out about additional options and other available drivers. Then build the driver with the command: $ make Please note that you may have to invoke gmake, the GNU version of make, on some systems. Then install the driver with the command (you'll need root permissions to do this): $ make install To test the operation of the newly installed driver, use the command: $ make check This command creates and runs a test program that performs a few basic input and output tests. If for some reason you need to re-create the autoconf/automake-related files, try running ./autogen.sh. In some situations, the current stable autoconf/automake/libtool versions (as found in FreeBSD 4.7 and Debian 3.0) do not cooperate well, so it may be necessary to run the older autoconf 2.13. If necessary, edit autogen.sh so that it will catch the older autoconf version on your system.
    Driver options Before you can initiate a connection, you must usually specify options that tell the database driver what to connect to. This driver supports the standard options of host, username, password, dbname, timeout, and port, as well as PostgreSQL-specific options. You only need to set options that are specific to your application -- sensible defaults will be used for all unspecified options. host If this begins with a slash, it specifies Unix-domain communication rather than TCP/IP communication; the value is the name of the directory in which the socket file is stored. The default behavior when host is not specified is to connect to a Unix-domain socket in /tmp (or whatever socket directory was specified when PostgreSQL was built). port Port number to connect to at the server host, or socket file name extension for Unix-domain connections. username The name of the user accessing the database. password The password of the user accessing the database. dbname The name of the database used for the initial connection. If your program must be able to connect to a fresh PostgreSQL installation, use the system database template1. timeout (numeric) The connection timeout in seconds. If the option is not specified, or if it is 0 (zero), stale connections never time out. encoding The IANA name of a character encoding which is to be used as the connection encoding. Input and output data will be silently converted from and to this character encoding, respectively. The list of available character encodings depends on your local PostgreSQL installation. If you set this option to "auto", the connection encoding will be the same as the database encoding. pgsql_foo Pass option foo directly to libpq. For valid options, refer to the libpq documentation. &proper-name;-specific Peculiarities This chapter lists known peculiarities of the &dbd-name; driver. Wherever possible, nonstandard driver behavior is hidden by libdbi's abstractions, but occasionally special considerations must be taken or extra functionality may be utilized for particular drivers. PostgreSQL has no intrinsic concept of unsigned fields (although you can still use the "OID" type as an unsigned long, or define your own user-defined unsigned types). User-defined types are not handled specially. All unrecognized datatypes are preserved as strings. PostgreSQL does not support a 1-byte numeric datatype. &freedoc-license;
    libdbi-drivers-0.9.0/drivers/pgsql/dbd_pgsql.pdf000644 001750 001750 00000456423 11530021742 022536 0ustar00markusmarkus000000 000000 %PDF-1.4 1 0 obj << /S /GoTo /D (1.0) >> endobj 4 0 obj (PostgreSQL Driver Notes) endobj 5 0 obj << /S /GoTo /D (2.0) >> endobj 8 0 obj (Table of Contents) endobj 9 0 obj << /S /GoTo /D (3.0) >> endobj 12 0 obj (Preface) endobj 13 0 obj << /S /GoTo /D (4.0) >> endobj 16 0 obj (Chapter 1. Introduction) endobj 17 0 obj << /S /GoTo /D (5.0) >> endobj 20 0 obj (Chapter 2. Installation) endobj 21 0 obj << /S /GoTo /D (5.1.1) >> endobj 24 0 obj (2.1. Prerequisites) endobj 25 0 obj << /S /GoTo /D (5.2.1) >> endobj 28 0 obj (2.2. Build and install the driver) endobj 29 0 obj << /S /GoTo /D (6.0) >> endobj 32 0 obj (Chapter 3. Driver options) endobj 33 0 obj << /S /GoTo /D (7.0) >> endobj 36 0 obj (Chapter 4. PostgreSQLspecific Peculiarities) endobj 37 0 obj << /S /GoTo /D (8.0) >> endobj 40 0 obj (Appendix A. GNU Free Documentation License) endobj 41 0 obj << /S /GoTo /D [42 0 R /Fit ] >> endobj 44 0 obj << /Length 354 /Filter /FlateDecode >> stream xÚ’Oo‚@Åï~Š=ÂéÎì_nmckÒ4ƦܚPÐ ¢Ÿ¿‹Öƒ‡†ì¾ß¼Y…ä …CpŠHj±ÚO¤ØðÒl‚ãm-AË/wV£¤ž¬Hn!ÏÙäá•´ .ÙZ ±`œM…õȲȊ¯hk5ÇnÓ–ŸïqBÎGÓ¶:—mÐó¦+ñwö`¬ñ¦Ç%Ú‚6F± PFÒ€›–]^íŽÁ›/›Sd÷S±«–Ų º¸©shcâ ýí\U½ék r€Þx‘o¬jO‡CÓÛd4Ò׃w$Ýëh™¯ú-Û².þšA„Fg#5(™r3¨4è”\è&Ñôyå .”ŒòvËÙ¯,„ÔFJfñ7Ôi^6u0Ïš|L½-§UW5õKpqŘ„Ø‹oqIñX3eÃ~X5û~ûä%»ŽÁ8GÚƒGþ·ÿ£_k)œÑendstream endobj 42 0 obj << /Type /Page /Contents 44 0 R /Resources 43 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 51 0 R >> endobj 45 0 obj << /D [42 0 R /XYZ 71.731 741.2204 null] >> endobj 46 0 obj << /D [42 0 R /XYZ 71.731 706.3512 null] >> endobj 47 0 obj << /D [42 0 R /XYZ 71.731 706.3512 null] >> endobj 2 0 obj << /D [42 0 R /XYZ 453.1368 688.2669 null] >> endobj 43 0 obj << /Font << /F24 50 0 R >> /ProcSet [ /PDF /Text ] >> endobj 54 0 obj << /Length 869 /Filter /FlateDecode >> stream xÚVKoã6¾çWèƒD4)Š”äž²›uºÅ"H7Þ^ڢЃ¶‰Ø¢KÑÞäßwhRŠl+Û…‹œ~óú† 0üH”Rx$Å1N‚j{…ƒ¨î¯ˆ7I8G1#6#ÚˆÑåỸhòaq5ÇI£œƒn±ì<ñœ#še,XÔNÃOTkVZ<ýþ%Œ(#“;-B»õƒ2¢y¹0…Ü´nS”joÜÒ¬…[ldY—Ò­ëOv:ŒÁ‹ý;ÈZ6+gÒîw;& öHË£w=ZYTÖä9 ÿ^üÙG$F9#É1ÑÔ­•Oç”Ò>³*_Á#uWøxÜö¹çcHؤÐÏ!Áˆß»‰ÊqœîTµßŠÆ8{-˜L+U3s¢ëϵ_ÕeýÏnÕþ»Aíj»¹98)´Á-bŒ³)fS½‚Íp>K¨Ûm×J4²z.ÜöÓËÎÃû}- ø+Äã¾ÜÈv-|j×w…³Ÿqy}Šæ(òQíl1^µ\­}Ò{< Ät´¨gÅ„~Þ8Ń€È«{UxÐG­ê}eszë";ÅÄw1† º …ÞÊÖÖÜ•­{®tј.o£Ü³ò „œuþkÙ-KìÞ'+šzz¤£­½ªåÒŬ;ôú¤óû¦º3ñâòÆjù¦ƒt®>-ú‰¥> endobj 59 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [366.6224 593.0441 481.2157 602.1658] /Subtype /Link /A << /S /GoTo /D (COPYING-FDL) >> >> endobj 63 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [206.3371 567.1413 247.5105 576.2629] /Subtype /Link /A << /S /GoTo /D (COPYING-FDL) >> >> endobj 55 0 obj << /D [53 0 R /XYZ 71.731 741.2204 null] >> endobj 64 0 obj << /D [53 0 R /XYZ 71.731 514.4459 null] >> endobj 52 0 obj << /Font << /F24 50 0 R /F33 58 0 R /F35 62 0 R >> /ProcSet [ /PDF /Text ] >> endobj 68 0 obj << /Length 12649 /Filter /FlateDecode >> stream xÚœO³G~]÷ó)°$,wõÿ^Z–¥°Cᇩ•íÍÁȈ @™Äèó»Py³ßÍÎß¹¡ÅƒÔ9…Ê!ñðÐ÷¬Ûÿ­nër;mÿq^—ãñpþðË¿þéðá_¶úÇ?­û‘óõº/ëuû›?úãåt[÷ãõÃÏ¿ûéOÿáŽçÇÃr½Ü/~úkS]Û©ûáþá§¿üÏ~úx?üðóÿù¸~øõÓÇ·û¿ýõûþ§ß¾|ýôåëÿ÷OÿõOÿù' æz_‡Ãúò™ö3?>úöD§û‡Çò¸nOûô@íÐÛýù÷ëý‡Oýù—O.^§åzZ¥ú°œo÷óäU­‡ó²Wz0{÷hËø@×åz8œ^>Ð ù~åNÈËáqx¤òý4ÊúZ¾®Ëå¾^Cy;Mò:‘Ÿ—ÃíxLåûi”;u"¿.—ë1}íí4Ê:‘o·s9ů}?r§¾–·Û9ŸÓ×ÞN“| NäÛíœÎéko§QîÔ‰|»ãå’Ê÷Ó(wêD¾ÝÎz_û~åN}-?m·s¸¦¯½&ù@ÈOËãqK_{;r§Nä×å|¿§¯½F¹S'òûò¸Ýï©|?r§¾–o_Eœ¯ôµ·Ó$¨ùv;×CúÚÛi”;u"ßnçrH_{;r§NäÛíœ×øµï§QîÔ×òËv;§ãÊÛi’Ô‰|»ã1}íí4Ê:‘o·³žÒ×ÞN£Ü©ùv;‡süÚ÷Ó(wêkùu]NsúÚÛi’Ô‰ü´Üï—s*ßO£Ü©ùu9Ý®éko§QîÔ‰ü¾Ü·#©|?r§¾–o¿å:]néko§I>P'òívÎ÷ôµ·Ó(wêD¾ÝÎé~Kåûi”;u"ßnçøˆ_û~åN}-¿o·s<¤¯½&ù@È·ÛYéko§QîÔ‰|»Ãš¾övåNÈïËí‘~!³Fµ1_›¿}ƒç˜¾óvšÜu"?-·Û)}çí4Ê:‘_—ã5v?ŒjcNÌÛÍ\Îñ;ßO£Û©/åÛ?†Ëñ| ¿¥Ó ©ùv5é·$ÚaTsbÞnæx½¥êý4º:‘oW³ýÚ“Ê÷Ó(wêkùº]Múû”v˜ÔΜ˜OËõqO¯»F·S'òë²Þé;o§QîÔ‰ü¾\ãWþí,Šß_kë²Þé o§I=P'òí^®kúÂÛi”;u"ßîå²>Rù~åNÈ·»9ã×¾ŸF¹S_ËOÛíœNéko§I>P'òívާôµ·Ó(wêD¾ÝÎzN_{;r§NäÛí.ÇT¾ŸF¹S_ËÏërx\Ò×ÞN“| Nä§å²ýö1•ï§QîÔ‰üºn·ôµ·Ó(wêD~_.×[üÚ÷Ó(wêkùe»·?œÍäí4ÉêD¾ÝÎ9ý ŠN£Ü©ùv;§GúÚÛi”;u"ßnçtˆ_û~åN}-¿n·s\Ó×ÞN“| NäÛí¬kúUL;r§NäÛíŽéko§QîÔ‰ü¾œ§øµï§QîÔ×òÛayÜOéko§I>P'òÓr¾Ó×ÞN£Ü©ùeû¹¬©|?r§NäÛí\.ñkßO£Ü©¯å÷ívÎ×ôµ·Ó$¨ùv;§[úÚÛi”;u"ßng{K©|?r§NäÛí¬÷s*ßO£Ü©¯åívôµ·Ó$¨ùiÙ~íK_{;r§Nä—åþ8¤¯½F¹S'òûrº¯ñkßO£Ü©/å§Ãa¹ßÖð›P: ò‘:‘o·s=žSù~åNÈ·Û¹œÖT¾ŸF¹S'òív¶¥òý4ÊúZ¾n·s:§¯½&ù@È·ÛI¿Šj‡Qm̉y»šõ’¾óvÝNÈ·«9\ãw¾ŸF¹S_ˇåöHâûaR;sb>-Çû-Vï§ÑíÔ‰ü²Ün÷S*ßO£Ü©ù}9¦ŸP'òív.駉uåNÈ·Û9§F¹S'òívNÇøµï§QîÔ×òãv;ÇôÅ:Mò:‘o·³¦ßÑi”;u"ßnç~¦X§QîÔ‰ü¶Ü—øµï§QîÔ×òÓa9ÝÓŽN“| NäÇå~K?V¬Ó(wêD~YN×t £Ó(wêD¾ÝNúçåí0ªùÚ|ޮ朮stšÜu"߮攮ståNÈ·«9¥êogQüž8Ñn×r<Ä/|?j§¾–_¶{YÓïyê4ÉêD¾ÝKú-vÕÆœ˜/Ëñ‘îrtÝNÈoËíÿ/­F¹S_˯‡åÿKm?LjgNÌÇåvM?P¬ÓèvêD¾]Í%Ýåè4Ê:‘oW“ÿÄ¿Fµ1_›oÛÍœÒOë4¹êD¾]Í1Ýåè4Ê:‘oW³¦Ÿ&Öi”;u"ß.çp_û~åN}-¿–õ‘Nstšäu"?.×{úibF¹S'ò˲ÞÓŽN£Ü©ùm¹ÞÒOë4ÊúZþØnçšttšäu"ßnç’ttåNÈ·Û9§Ÿ&Öi”;u"ßnçtŠ_û~åN})¿¶Û9¦Ÿ&ÖiÔ‰|»5èè4Ê:‘o·sH::r§Nä·åò¸Æ¯}?r§¾–¯‡åpO::Mò:‘—Ë-ý4±N£Ü©ùe9\ÓŽN£Ü©ùv;—GüÚ÷Ó(wêkùq»súib&ù@È·Û9§F¹S'òívN駉uåNÈ·Û9®ñkßO£Ü©¯å§ívÖÉGK{_ó´ÞÓéöÃ'þ¦·Î½{ ÏoÒŸjÏ›–ÁQ5RÜþá:·ŸD™%½¼ý2»ÖYÒvèíÙÖåãÇËá‡ÿòåë·@éoùÛ/_?ÿöe,·]¶ß¾}ÐîI1¾Ãí÷³wø”’+Ÿ²§äžŸ³Hɽx *%r§BJ.’÷”\-¨’ËäJÉÜ©’ËäJÉÜ©’ËäJÉÜ©’‹ä=%WË*¤ä2¹Rr w*¤ä2¹Rr w*¤ä2¹Rr w*¤ä"yOÉÕò )¹L®”È )¹L®”È )¹L®”È )¹HÞSrµ| BJ.“+%r§BJ.“+%r§BJ.“+%r§BJ.’÷”\-¨’ËäJÉÜ©’ËäJÉÜ©uJ.s·”¨ )¹HÝSrµ{ BJ.“+%r§Ö)¹ÌÝRr 6&¤ä2µRràv*¤äùSJ®”Ô:%—¹[JÔÆ„”\¦VJÜN…”\&WJäN­Sr‘[)¹ZíLHÉej¥äÀíTHÉer¥ä@îÔ2%—©÷”ˆß!%‰{J®VTHÉer¥ä@îTHÉer¥ä@îTHÉer¥ä@îTHÉEòž’«åRr™\)9;Rr™\)9;Rr™\)9;Rr‘¼§äjù@…”\&WJäN…”\&WJäN…”\&WJäN…”\$ï)¹Z>P!%—É•’¹S!%—É•’¹S!%—É•’¹S!%É{J®–THÉer¥ä@îTHÉer¥ä@îTHÉer¥ä@îTHÉEòž’«åRr™\)9;Rr™\)9;Rr™\)9;Rr‘¼§äjù@…”\&WJäN…”\&WJäN…”\&WJäN…”\$ï)¹Z>P!%—É•’¹S!%—É•’¹S!%—É•’¹S!%—ÈŸRr¥|¤BJ.“+%r§BJ.“+%r§BJ.“+%r§BJ.’÷”\-¨uJ.s·”¨ )¹L­”¸ )¹L®”ÈZ§ä"·RrµÚ™’ËÔJÉÛ©’ËäJÉÜ©uJ.s·”¨ )¹HÝSrµ{ BJ.“+%r§Ö)¹ÌÝRr 6&¤ä2µRràv*¤ä"yOÉÕòZ§ä2wKÉÚ˜’ËÔJÉÛ©’ËäJÉÜ©’‹ä=%WË*¤ä2¹Rr w*¤ä2¹Rr w*¤ä2¹Rr w*¤ä"yOÉÕò )¹L®”È )¹L®”È )¹L®”È )¹HÞSrµ| BJ.“+%r§BJ.“+%r§BJ.“+%r§BJ.’÷”\-¨’ËäJÉÜ©’ËäJÉÜ©’ËäJÉÜ©’‹ä=%WË*¤ä2¹Rr w*¤ä2¹Rr w*¤ä2¹Rr w*¤äùSJ®”THÉer¥ä@îTHÉer¥ä@îTHÉer¥ä@îTHÉEòž’«åRr™\)9;Rr™\)9;Rr™\)9;Rr‘¼§äjù@…”\&WJäN…”\&WJäN…”\&WJäN…”\$ï)¹Z>P!%—É•’¹S!%—É•’¹Së”\æn)9PRr‘º§äj÷@…”\&WJäN-Sr™zOÉø=Rr™X)9P;Rr‘¼§äjù@­Sr™»¥ä@mLHÉej¥äÀíTHÉer¥ä@îÔ:%¹•’«Õ΄”\¦VJÜN…”\&WJäN­Sr™»¥ä@mLHÉEêž’«ÝRr™\)9;Rr™\)9;Rr™\)9;Rr‘¼§äjù@…”\&WJäN…”\&WJäN…”\&WJäN…”\$ï)¹Z>P!%—É•’¹S!%—É•’¹S!%—É•’¹S!%—ÈŸRr¥|¤BJ.“+%r§BJ.“+%r§BJ.“+%r§BJ.’÷”\-¨’ËäJÉÜ©’ËäJÉÜ©’ËäJÉÜ©’‹ä=%WË*¤ä2¹Rr w*¤ä2¹Rr w*¤ä2¹Rr w*¤ä"y;Mò:‘o·s˜|š¸7ؾýÙ̬cwZþêf?g_T®ó„]ñ@CÂî\'ì6æéí—š2a×½=ÖQ »?¾þüë¯?¿Î×mïåÛçžðþ o;Ðëmš¯[·—ÿí£6åêÜ»g|‘¯;-ÇÛŸà½x òý4Ê:‘·Ä^&W¸äN…p_&W¸äN…p_$ïá¾Z>P!Ü—Éî¹S!Ü—Éî¹S!Ü—Éî¹S!ÜÉ{¸¯–T÷er…û@îT÷er…û@îT÷er…û@îT÷Eòî«åÂ}™\á>;Â}™\á>;Â}™\á>;Â}‘¼‡ûjù@…p_&W¸äN…p_&W¸äN…p_&W¸äN…p_$ïá¾Z>P!Ü—Éî¹S!Ü—Éî¹Sëp_æná>PÂ}‘º‡ûj÷@…p_&W¸äN­Ã}™»…û@mL÷ej…ûÀíT÷%ò§p_)©u¸/s·p¨ á¾L­p¸ á¾L®pÈZ‡û"·Â}µÚ™îËÔ ÷Û©îËä ÷Ü©e¸/Sïá>¿'B¸/÷p_­¨îËä ÷Ü©îËä ÷Ü©îËä ÷Ü©î‹ä=ÜWË*„û2¹Â} w*„û2¹Â} w*„û2¹Â} w*„û"y÷Õò á¾L®pÈ á¾L®pÈ á¾L®pÈ á¾HÞÃ}µ| B¸/“+Ür§B¸/“+Ür§B¸/“+Ür§B¸/’÷p_-¨îËä ÷Ü©îËä ÷Ü©îËä ÷Ü©î‹ä=ÜWË*„û2¹Â} w*„û2¹Â} w*„û2¹Â} w*„û"y÷Õò á¾L®pÈ á¾L®pÈ á¾L®pÈ á¾HÞÃ}µ| B¸/“+Ür§B¸/“+Ür§B¸/“+Ür§B¸/‘?…ûJùH…p_&W¸äN…p_&W¸äN…p_&W¸äN…p_$ïá¾Z>Pëp_æná>PÂ}™Zá>p;Â}™\á>;µ÷En…ûjµ3!Ü—©î·S!Ü—Éî¹Sëp_æná>PÂ}‘º‡ûj÷@…p_&W¸äN­Ã}™»…û@mL÷ej…ûÀíT÷Eòî«åµ÷eîîµ1!Ü—©î·S!Ü—Éî¹S!ÜÉ{¸¯–T÷er…û@îT÷er…û@îT÷er…û@îT÷Eòî«åÂ}™\á>;Â}™\á>;Â}™\á>;Â}‘¼‡ûjù@…p_&W¸äN…p_&W¸äN…p_&W¸äN…p_$ïá¾Z>P!Ü—Éî¹S!Ü—Éî¹S!Ü—Éî¹S!ÜÉ{¸¯–T÷er…û@îT÷er…û@îT÷er…û@îT÷%ò§p_)©îËä ÷Ü©îËä ÷Ü©îËä ÷Ü©î‹ä=ÜWË*„û2¹Â} w*„û2¹Â} w*„û2¹Â} w*„û"y÷Õò á¾L®pÈ á¾L®pÈ á¾L®pÈ á¾HÞÃ}µ| B¸/“+Ür§B¸/“+Ür§Öá¾ÌÝÂ} 6&„û"u÷Õî á¾L®pÈZ†û2õîñ{"„û2±Â} v*„û"y÷ÕòZ‡û2w ÷Ú˜îËÔ ÷Û©îËä ÷Ü©u¸/r+ÜW« á¾L­p¸ á¾L®pÈZ‡û2w ÷Ú˜î‹Ô=ÜW»*„û2¹Â} w*„û2¹Â} w*„û2¹Â} w*„û"y÷Õò á¾L®pÈ á¾L®pÈ á¾L®pÈ á¾HÞÃ}µ| B¸/“+Ür§B¸/“+Ür§B¸/“+Ür§B¸/‘?…ûJùH…p_&W¸äN…p_&W¸äN…p_&W¸äN…p_$ïá¾Z>P!Ü—Éî¹S!Ü—Éî¹S!Ü—Éî¹S!ÜÉ{¸¯–T÷er…û@îT÷er…û@îT÷er…û@îT÷Eòî«åÂ}E}. ÷Áµpß»BÞ<ÜW<зïÎoÒïá¾ËËSÛ/ì×ó·? 8®ËcûD²ÓÓ“µc:õ=Ý·îñ¾?ÿþé÷OÿïoŸÿøüõÓcVè¼ý¯ûí[ùOбÞw?gñ¾ž9*²gŽžŸ²È½xž*sr§Bæ(’÷ÌQ-¨9ÊäÊÜ©9ÊäÊÜ©9ÊäÊÜ©9Šä=sTË*dŽ2¹2G w*dŽ2¹2G wj9ÊÜ-sjcBæ(R÷ÌQí¨9ÊäÊÜ©uæ(s·Ì¨ ™£L­Ì¸ ™£Dþ”9*å#µÎeî–9µ1!s”©•9·S!s”É•9¹SëÌQäVæ¨V;2G™Z™#p;2G™\™#;µÌeê=sâ÷DÈEâž9ªÕ2G™\™#;2G™\™#;2G™\™#;2G‘¼gŽjù@…ÌQ&WæäN…ÌQ&WæäN…ÌQ&WæäN…ÌQ$Z>P!s”É•9¹S!s”É•9¹S!s”É•9¹S!sÉ{樖TÈereŽ@îTÈereŽ@îTÈereŽ@îTÈEòž9ªå2G™\™#;2G™\™#;2G™\™#;2G‘¼gŽjù@…ÌQ&WæäN…ÌQ&WæäN…ÌQ&WæäN…ÌQ$Z>P!s”É•9¹S!s”É•9¹S!s”É•9¹S!sÉ{樖TÈereŽ@îTÈereŽ@îTÈereŽ@îTÈ%ò§ÌQ)©9ÊäÊÜ©9ÊäÊÜ©9ÊäÊÜ©9Šä=sTËj9ÊÜ-sjcBæ(S+sn§Bæ(“+sr§Ö™£È­ÌQ­v&dŽ2µ2Gàv*dŽ2¹2G wj9ÊÜ-sjcBæ(R÷ÌQí¨9ÊäÊÜ©uæ(s·Ì¨ ™£L­Ì¸ ™£HÞ3Gµ| Ö™£ÌÝ2G 6&dŽ2µ2Gàv*dŽ2¹2G w*dŽ"yÏÕò ™£L®ÌÈ ™£L®ÌÈ ™£L®ÌÈ ™£HÞ3Gµ| Bæ(“+sr§Bæ(“+sr§Bæ(“+sr§Bæ(’÷ÌQ-¨9ÊäÊÜ©9ÊäÊÜ©9ÊäÊÜ©9Šä=sTË*dŽ2¹2G w*dŽ2¹2G w*dŽ2¹2G w*dŽ"yÏÕò ™£L®ÌÈ ™£L®ÌÈ ™£L®ÌÈ ™£Dþ”9*å#2G™\™#;2G™\™#;2G™\™#;2G‘¼gŽjù@…ÌQ&WæäN…ÌQ&WæäN…ÌQ&WæäN…ÌQ$Z>P!s”É•9¹S!s”É•9¹S!s”É•9¹S!sÉ{樖TÈereŽ@îTÈereŽ@îÔ:s”¹[æÔÆ„ÌQ¤î™£Ú=P!s”É•9¹SËÌQ¦Þ3G ~O„ÌQ&VæÔN…ÌQ$Z>PëÌQæn™#P2G™Z™#p;2G™\™#;µÎEneŽjµ3!s”©•9·S!s”É•9¹SëÌQæn™#P2G‘ºgŽj÷@…ÌQ&WæäN…ÌQ&WæäN…ÌQ&WæäN…ÌQ$Z>P!s”É•9¹S!s”É•9¹S!s”É•9¹S!sÉ{樖TÈereŽ@îTÈereŽ@îTÈereŽ@îTÈ%ò§ÌQ)©9ÊäÊÜ©9ÊäÊÜ©9ÊäÊÜ©9Šä=sTË*dŽ2¹2G w*dŽ2¹2G w*dŽ2¹2G w*dŽ"yÏÕò ™£L®ÌÈ ™£L®ÌÈ ™£L®ÌÈ ™£HÞ3Gµ| Bæ¨Èô¤™#x –9zWšgŽŠzÎíßǯ3G‡ÇÛN뙣vê{æè¸gŽþîoŸýË÷¿üùËþŸ¿üñõç_ýþ7_ÿï§ïñ—ß?<^~ø÷ëå‡O¿KöÇöß>*ôô4céz»LÞôÓʼüùô•ùóO¨X™¿xžjer§ÂÊ<“ker§ÂÊ<“ker§ÂÊ<’÷•y-¨°2ÏäZ™ƒÜ©°2ÏäZ™ƒÜ©°2ÏäZ™ƒÜ©°2ä}e^Ë*¬Ì3¹Væ w*¬Ì3¹Væ w*¬Ì3¹Væ w*¬Ì#y_™×ò +óL®•9È +óL®•9È +óL®•9È +óHÞWæµ| ÂÊ<“ker§ÂÊ<“ker§ÂÊ<“ker§ÂÊ<’÷•y-¨°2ÏäZ™ƒÜ©°2ÏäZ™ƒÜ©°2ÏäZ™ƒÜ©°2ä}e^Ë*¬Ì3¹Væ w*¬Ì3¹Væ w*¬Ì3¹Væ w*¬Ì#y_™×ò +óL®•9È +óL®•9È +óL®•9È +óDþ´2/å#Væ™\+s;Væ™\+s;Væ™\+s;V摼¯Ìkù@­Wæ™»­ÌAmLX™gj­ÌÁíTX™gr­ÌAîÔze¹µ2¯Õ΄•y¦ÖÊÜN…•y&×ÊäN­Wæ™»­ÌAmLX™Gê¾2¯ÝVæ™\+s;µ^™gî¶2µ1aež©µ2·SaeÉûʼ–Ôzež¹ÛÊÔÆ„•y¦ÖÊÜN…•y&×ÊäN…•y$ï+óZ>PaežÉµ2¹SaežÉµ2¹SaežÉµ2¹SaeÉûʼ–TX™gr­ÌAîTX™gr­ÌAîTX™gr­ÌAîTX™Gò¾2¯åVæ™\+s;Væ™\+s;Væ™\+s;V摼¯Ìkù@…•y&×ÊäN…•y&×ÊäN…•y&×ÊäN…•y$ï+óZ>PaežÉµ2¹SaežÉµ2¹SaežÉµ2¹SaežÈŸVæ¥|¤ÂÊ<“ker§ÂÊ<“ker§ÂÊ<“ker§ÂÊ<’÷•y-¨°2ÏäZ™ƒÜ©°2ÏäZ™ƒÜ©°2ÏäZ™ƒÜ©°2ä}e^Ë*¬Ì3¹Væ w*¬Ì3¹Væ w*¬Ì3¹Væ w*¬Ì#y_™×ò +óL®•9È +óL®•9ÈZ¯Ì3w[™ƒÚ˜°2Ô}e^»*¬Ì3¹Væ wj¹2ÏÔûÊÄ2ÏÄZ™ƒÚ©°2ä}e^Ëj½2ÏÜmejcÂÊPaežÉµ2¹SaežÉµ2¹SaežÉµ2¹SaeÉûʼ–TX™ÓçteÔVæïÆÜó•yñ@Ûoœ®ÛoÆÞ>‰¶ýC}:o?ÍW§nër{ûèóåqÚ¾°ºßûƒÝŸl?¥CouÚæÿûçëám7~xÛûï~û·¯Ÿûò‡?øúöá¯ÃñôáÙ6¾ÉÛeûÅë7ùFx\ß¾íQ?°Î½{äe| ër¾î/è…|?r§Nä÷åq^/©|?r§¾–_Öeû‚n åí4ÉêD¾ÝÎñ˜¾övåNÈ·ÛYOéko§QîÔ‰|»Ã9~íûi”;õµüº.§Ç9}íí4ÉêD~Zî÷Ë9•ï§QîÔ‰üºœn×ôµ·Ó(wêD~_î×küÚ÷Ó(wêkùö¯îÓå–¾övšäu"ßnç|O_{;r§NäÛíœî·T¾ŸF¹S'òívŽøµï§QîÔ×òûv;ÇCúÚÛi’Ô‰|»õ¾övåNÈ·Û9¬éko§QîÔ‰ü¾ÜÇÔýý0ªùÚüX—ãý˜¾óvšÜu"?-·Û)}çí4Ê:‘o_ä^c÷÷è6æÄ¼ÝÌå¿óý4ºúzWzØ®æ|9erùHÈ·«9]S÷÷è6æÄ¼ÝÌñzKÕûit;u"ß®fûµ'•ï§QîÔ×òu»šô÷)í0©91o?ú¸§×ÝN£Û©ùuYïô·Ó(wêD~_®ñ+ÿvÅ¾×@ËÄʪz ÖYµPÞ²j$wjU å-«Fr§ÖYµPÞ²j$wjUËäʪ| ÖYµPÞ²j$wjU å-«Fr§ÖYµPÞ²j$wjUËäʪ| ÖYµPÞ²j$wjU å-«Fr§ÖYµPÞ²j$wjUËäʪ| ÖYµPÞ²j$wjU å-«Fr§ÖYµPÞ²j$wjUËäʪ| ÖYµPÞ²j$wjU å-«Fr§ÖYµPÞ²j$wjUËäʪ| ÖYµPÞ²j$wjU å-«Fr§ÖYµPÞ²j$wjUËäʪ| ÖYµPÞ²j$wjU å-«Fr§ÖYµPÞ²j$wjUËäʪ| ÖYµPÞ²j$wjU å-«Fr§ÖYµPÞ²j$wjU‹ä=«VËGjU å-«Fr§ÖYµPÞ²j$wjU å-«Fr§ÖYµL®¬Èj™U Ý{VÔÆ¬³j¡ºeÕÈíÔ:«Ê[VäN-³j™»eÕ@íÌ:«ª[VÜN­³j¡¼eÕHîÔ2«º÷¬©YgÕ2µ²jà¨uV-”·¬ÉZfÕB÷žU#µ1ë¬Z¨nY5r;µÎªereÕ@>PˬZèÞ³j¤6fU Õ-«Fn§ÖYµPÞ²j$wjUËäʪ| ÖYµPÞ²j$wjU å-«Fr§ÖYµPÞ²j$wjUËäʪ| ÖYµPÞ²j$wjU å-«Fr§ÖYµPÞ²j$wjUËäʪ| ÖYµPÞ²j$wjU å-«Fr§ÖYµPÞ²j$wjUËäʪ| ÖYµPÞ²j$wjU å-«Fr§ÖYµPÞ²j$wjUËäʪ| ÖYµPÞ²j$wjU å-«Fr§ÖYµPÞ²j$wjU‹ä=«VËGjU å-«Fr§ÖYµPÞ²j$wjU å-«Fr§ÖYµL®¬ÈjU å-«Fr§ÖYµPÞ²j$wjU å-«Fr§ÖYµL®¬ÈjU å-«Fr§ÖYµPÞ²j$wjU å-«Fr§ÖYµL®¬ÈjU å-«Fr§ÖYµPÞ²j$wj™U Ý{VÔÆ¬³j™ZY5pÔ:«Ê[VäN­²j¡ú{VÄï‰uV-·¬©ZgÕ2¹²j ¨eV-tïY5R³Îª…ê–U#·Së¬Z(oY5’;µÌªeî–Uµ3ë¬Z¨nY5r;µÎª…ò–U#¹SˬZèÞ³j¤6fUËÔʪ{ ÖYµPÞ²j$wjU å-«Fr§ÖYµPÞ²j$wjUËäʪ| ÖYµPÞ²j$wjU å-«Fr§ÖYµPÞ²j$wjUËäʪ| ÖYµPÞ²j$wjU å-«Fr§ÖYµPÞ²j$wjU‹ä=«VËGjU å-«Fr§ÖYµPÞ²j$wjU å-«Fr§ÖYµL®¬ÈjU å-«Fr§ÖYµPÞ²j$wjU å-«Fr§ÖYµL®¬ÈjU å-«Fr§ÖYµPÞ²j$wjU å-«Fr§ÖYµL®¬ÈjU«c`QVhϪ½{ ó4«V=ÐU;×YµÛ}9®ç:«Ö}{¬=«öçÇÿýñõ_~ÿ¸Þøô?þû?ýøÇ¿}úåóÿ:Ž¿<ùôËß~ýüó~þôǸiÞ^ñú6zz Öuûäv™¼â§…wù3é ïçŸK±ð~ñ@ÕÂäN……w&×ÂäN……w$ï ïZ>Paáɵð¹Saáɵð¹Saáɵð¹SaáÉû»–TXxgr-¼AîTXxgr-¼AîTXxgr-¼AîTXxGò¾ð®åÞ™\ o;Þ™\ o;Þ™\ o;Þ‘¼/¼kù@……w&×ÂäN……w&×ÂäN……w&×ÂäN……w$ï ïZ>Paáɵð¹Saáɵð¹Saáɵð¹SaáÉû»–TXxgr-¼AîTXxgr-¼AîTXxgr-¼AîTXxGò¾ð®åÞ™\ o;Þ™\ o;Þ™\ o;Þ‰üiá]ÊG*,¼3¹Þ w*,¼3¹Þ w*,¼3¹Þ w*,¼#y_x×òZ/¼3w[xƒÚ˜°ðÎÔZxƒÛ©°ðÎäZxƒÜ©õÂ;rká]« ïL­…7¸ ïL®…7ÈZ/¼3w[xƒÚ˜°ðŽÔ}á]»*,¼3¹Þ wj½ðÎÜmá jcÂÂ;Ská n§ÂÂ;’÷…w-¨õÂ;s·…7¨ ïL­…7¸ ïL®…7È ïHÞÞµ| ÂÂ;“ká r§ÂÂ;“ká r§ÂÂ;“ká r§ÂÂ;’÷…w-¨°ðÎäZxƒÜ©°ðÎäZxƒÜ©°ðÎäZxƒÜ©°ðŽä}á]Ë*,¼3¹Þ w*,¼3¹Þ w*,¼3¹Þ w*,¼#y_x×ò ïL®…7È ïL®…7È ïL®…7È ïHÞÞµ| ÂÂ;“ká r§ÂÂ;“ká r§ÂÂ;“ká r§ÂÂ;‘?-¼KùH……w&×ÂäN……w&×ÂäN……w&×ÂäN……w$ï ïZ>Paáɵð¹Saáɵð¹Saáɵð¹SaáÉû»–TXxgr-¼AîTXxgr-¼AîTXxgr-¼AîTXxGò¾ð®åÞ™\ o;Þ™\ o;µ^xgî¶ðµ1aá©û»vTXxgr-¼AîÔrá©÷…7ˆßaትðµSaáÉû»–Ôzá¹ÛÂÔÆ„…w¦ÖÂÜN……w&×ÂäN­Þ‘[ ïZíLXxgj-¼ÁíTXxgr-¼AîÔzá¹ÛÂÔÆ„…w¤î ïÚ=Paáɵð¹Saáɵð¹Saáɵð¹SaáÉû»–TXxgr-¼AîTXxgr-¼AîTXxgr-¼AîTXxGò¾ð®åÞ™\ o;Þ™\ o;Þ™\ o;Þ‰üiá]ÊG*,¼3¹Þ w*,¼3¹Þ w*,¼3¹Þ w*,¼#y_x×ò ïL®…7È ïL®…7È ïL®…7È ïHÞÞµ| ÂÂ;“ká r§ÂÂ;“ká r§ÂÂ;“ká r§ÂÂ;’÷…w-¨°ð.æÇé¨-¼Ÿè2_x4,¼/õÂ{û}ãöåì£^x·Coõ÷…÷?þ·þþÿð}âýéûßýýo¿üí_?}ùúó×Ï¿}ùþ_ýÓç_>}ùãÓ8n=¼-AožŸaœwN·ëlÞÝwÆåO£ïŒŸ"ÅÎøÅU;c;vÆ™\;c;vÆ™\;c;vÆ‘¼ïŒkù@…q&×ÎäN…q&×ÎäN…q&×ÎäN…q$ï;ãZ>PagœÉµ3¹SagœÉµ3¹SagœÉµ3¹SagÉûθ–TØgríŒAîTØgríŒAîTØgríŒAîTØGò¾3®åvÆ™\;c;vÆ™\;c;vÆ™\;c;vÆ‘¼ïŒkù@…q&×ÎäN…q&×ÎäN…q&×ÎäN…q$ï;ãZ>PagœÉµ3¹SagœÉµ3¹SagœÉµ3¹SagœÈŸvÆ¥|¤ÂÎ8“kg r§ÂÎ8“kg r§ÂÎ8“kg r§ÂÎ8’÷q-¨õÎ8s·1¨ ;ãL­1¸ ;ãL®1ÈZïŒ#·vƵڙ°3ÎÔÚƒÛ©°3ÎäڃܩõÎ8s·1¨ ;ãHÝwƵ{ ÂÎ8“kg r§Ö;ãÌÝvÆ 6&ìŒ3µvÆàv*ìŒ#yß×òZïŒ3wÛƒÚ˜°3ÎÔÚƒÛ©°3Îäڃܩ°3Žä}g\Ë*ìŒ3¹vÆ w*ìŒ3¹vÆ w*ìŒ3¹vÆ w*ìŒ#yß×ò ;ãL®1È ;ãL®1È ;ãL®1È ;ãHÞwƵ| ÂÎ8“kg r§ÂÎ8“kg r§ÂÎ8“kg r§ÂÎ8’÷q-¨°3Îäڃܩ°3Îäڃܩ°3Îäڃܩ°3Žä}g\Ë*ìŒ3¹vÆ w*ìŒ3¹vÆ w*ìŒ3¹vÆ w*ìŒùÓθ”TØgríŒAîTØgríŒAîTØgríŒAîTØGò¾3®åvÆ™\;c;vÆ™\;c;vÆ™\;c;vÆ‘¼ïŒkù@…q&×ÎäN…q&×ÎäN…q&×ÎäN…q$ï;ãZ>PagœÉµ3¹SagœÉµ3¹Sëqæn;cPvÆ‘ºïŒk÷@…q&×ÎäN-wÆ™z߃ø=vÆ™X;cP;vÆ‘¼ïŒkù@­wÆ™»íŒAmLØgjíŒÁíTØgríŒAîÔzg¹µ3®Õ΄q¦ÖÎÜN…q&×ÎäN­wÆ™»íŒAmLØGê¾3®ÝvÆ™\;c;vÆ™\;c;vÆ™\;c;vÆ‘¼ïŒkù@…q&×ÎäN…q&×ÎäN…q&×ÎäN…q$ï;ãZ>PagœÉµ3¹SagœÉµ3¹SagœÉµ3¹SagœÈŸvÆ¥|¤ÂÎ8“kg r§ÂÎ8“kg r§ÂÎ8“kg r§ÂÎ8’÷q-¨°3Îäڃܩ°3Îäڃܩ°3Îäڃܩ°3Žä}g\Ë*ìŒ3¹vÆ w*ìŒ3¹vÆ w*ìŒ3¹vÆ w*ìŒ#yß×ò ;ãb›îŒáÚÎøù®óqñ@O;ãËz^ÖÛ­ÜŸïË}½>=×åÝ-=¶¯ºÎo_Ô}?õöXŸ?ž>Ø­ÿ?’j^endstream endobj 67 0 obj << /Type /Page /Contents 68 0 R /Resources 66 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 51 0 R /Annots [ 70 0 R 74 0 R 75 0 R 76 0 R 77 0 R 78 0 R 79 0 R 80 0 R 81 0 R 82 0 R 83 0 R 84 0 R 85 0 R 86 0 R 87 0 R 88 0 R ] >> endobj 70 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [70.7348 666.8844 104.6274 675.8606] /Subtype /Link /A << /S /GoTo /D (29) >> >> endobj 74 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [529.3351 666.8844 538.9788 675.8606] /Subtype /Link /A << /S /GoTo /D (29) >> >> endobj 75 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [70.7348 651.5419 136.7566 660.5181] /Subtype /Link /A << /S /GoTo /D (INTRO) >> >> endobj 76 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [532.005 651.5419 538.9788 660.5181] /Subtype /Link /A << /S /GoTo /D (INTRO) >> >> endobj 77 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [70.7348 636.1994 131.4065 645.1757] /Subtype /Link /A << /S /GoTo /D (INSTALL) >> >> endobj 78 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [532.005 636.1994 538.9788 645.1757] /Subtype /Link /A << /S /GoTo /D (INSTALL) >> >> endobj 79 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [94.6451 618.8196 165.5384 629.7236] /Subtype /Link /A << /S /GoTo /D (INSTALL-PREREQ) >> >> endobj 80 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [532.005 618.8196 538.9788 629.7236] /Subtype /Link /A << /S /GoTo /D (INSTALL-PREREQ) >> >> endobj 81 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [94.6451 607.9255 220.4919 616.7721] /Subtype /Link /A << /S /GoTo /D (INSTALL-BUILD) >> >> endobj 82 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [532.005 607.9255 538.9788 616.7721] /Subtype /Link /A << /S /GoTo /D (INSTALL-BUILD) >> >> endobj 83 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [70.7348 590.6602 144.1986 601.5393] /Subtype /Link /A << /S /GoTo /D (OPTIONS) >> >> endobj 84 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [532.005 590.6602 538.9788 601.5393] /Subtype /Link /A << /S /GoTo /D (OPTIONS) >> >> endobj 85 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [70.7348 575.3177 223.51 586.1969] /Subtype /Link /A << /S /GoTo /D (SPECIFIC) >> >> endobj 86 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [532.005 575.3177 538.9788 586.1969] /Subtype /Link /A << /S /GoTo /D (SPECIFIC) >> >> endobj 87 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [70.7348 561.8782 231.092 570.8544] /Subtype /Link /A << /S /GoTo /D (COPYING-FDL) >> >> endobj 88 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [532.005 561.8782 538.9788 570.8544] /Subtype /Link /A << /S /GoTo /D (COPYING-FDL) >> >> endobj 69 0 obj << /D [67 0 R /XYZ 71.731 741.2204 null] >> endobj 6 0 obj << /D [67 0 R /XYZ 244.3315 691.2808 null] >> endobj 66 0 obj << /Font << /F24 50 0 R /F38 73 0 R /F33 58 0 R /F35 62 0 R >> /ProcSet [ /PDF /Text ] >> endobj 98 0 obj << /Length 731 /Filter /FlateDecode >> stream xÚUM›0½çWp©!æ3°§~nÕª‡]•[·¸ 6µÍFÛ__;¶ aI«VrlgæÍ{c¿ÀÙþ>’Cøab§ê7ÀiäÖÇM`Lâ4õÃ$Hådew›D{?ÏÂÔÙμ-6»Û0vBà§I–8ÅÁ†Jsi•Ì)êoîCX!ï{ñywENîç©t%­³ sy MN†.ë{Û0îH@+Äp³ÛéeŸÓ‘Uè@™dnƒ|‚„4 ´9æz„z¨¡€%äÈ,–\0X L‰^èà3búï‘a!YÇf|çëñ“0ëýСqåÀ`¼0q^\Êõ²h¡9WA¢P+œAèçIŸpŽwø—IŽ£2(̬fX9|ò‚ĵ)Jü 2ŒLpU}r@~ ¬Ö@sÄŒnÐ-šÊ‚n/cñ+u_š]åaèÀèT™bȉrñ„k‹D´«¨Í.Aâ²gcLÍ»ÇÅŠuÃÇa L ú¯õ°¹JUG¡ViÑZ õŒ°»–4&zÏb‚%Å"“¡á?»UFcà¾2ÊkqÕ^‹b ,¿£\4 }½ÿr‰pÎð s@x‚!U_ÛRMd&Tu?±plé¹Ql? C‡«S ¸UyT=`ýÁÆK\ˆ sÅ™=R/]«£œ‹ˆÙµ@’ó €úâ-Éb"ñ’üV:?R/Èߟ܈ϢL)V´Ÿ·ýœé)ÐJÇò–ŽqQNú›.u»ÞhÛ§•¦¼9HcÙòª¦å-ÜQÉg+Šøï.WŸÛÔ ½Tƒ¾Üžÿµn+"bat`xºKça^nUÅY=ß²yägÅ^šìßC/ª‰õô©Óò™Ö;¦Rô¦¶§^DIC¡ðeueŠ›Åô ›Ç5Îü,HóÕ‡Ú˜lg6§W:JfÏnŸåûɓŽŸ–á¦G%àoÙFendstream endobj 97 0 obj << /Type /Page /Contents 98 0 R /Resources 96 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 51 0 R >> endobj 99 0 obj << /D [97 0 R /XYZ 71.731 741.2204 null] >> endobj 89 0 obj << /D [97 0 R /XYZ 71.731 706.3512 null] >> endobj 10 0 obj << /D [97 0 R /XYZ 146.3693 691.2808 null] >> endobj 100 0 obj << /D [97 0 R /XYZ 71.731 674.2377 null] >> endobj 101 0 obj << /D [97 0 R /XYZ 71.731 674.2377 null] >> endobj 102 0 obj << /D [97 0 R /XYZ 330.1288 648.5929 null] >> endobj 103 0 obj << /D [97 0 R /XYZ 71.731 628.5033 null] >> endobj 104 0 obj << /D [97 0 R /XYZ 71.731 586.725 null] >> endobj 105 0 obj << /D [97 0 R /XYZ 487.8259 573.8731 null] >> endobj 106 0 obj << /D [97 0 R /XYZ 71.731 540.8321 null] >> endobj 107 0 obj << /D [97 0 R /XYZ 186.1707 530.0375 null] >> endobj 96 0 obj << /Font << /F24 50 0 R /F33 58 0 R /F35 62 0 R >> /ProcSet [ /PDF /Text ] >> endobj 110 0 obj << /Length 715 /Filter /FlateDecode >> stream xÚTËrÚ0Ýç+¼´g‚ävw$„L:I!˜vÓt!lÜbÉ•D˜ü}%$;ÀxÑa=|uî¹ç>õy&¡^"0†‘W47ÐÛêO7È™DIpŒ}ø:ŠÃ ÈRœx£s»õÍxŽ#CÄiì­«ÎU’i«¦ÞºüéßïH«¨Fx’úØõ‰)`èóòP¨š³à×úëx†^²D;ÒXÐáLÃ%ñ fÉ¥Ú š¿>k„úµ´+avå›ß´P#A÷Ä’½½.‰""©=5„‘-m(Sö,?¤¢Ý¿Á.V³»—\ï½3/K‡ïü,ùúqõßÚã!äS!ëÎ øÖ„c@d1ŠN”4À±ÿ Ø§{Þv¸ÄQQ;Çñ;«? 5®úp*»Þ“}]qÁjr pGÅŸA NÍS÷êž7íÁʯOyQSV8G3Ú¡ŒÀ^¬; ]ŒöÔ n¤uï5ñè6ÎßRðŠJÉ׺Øêr‘+ÎèFKSôèÑÜ—QÙr¦::ä^ ­(ë2:-ßZDGåìWTR"Š]ÏÇwÐÓ­ÿL“ó™á1]-ƒ ûS“ú«ìÙòë½OEó1ähQoâN_>]ô……½ ãÛE^dfn(ò+O&Ÿhßòùa.â‡üÙ]=±ôìuφxòÍÓR6’ü :%•Õþ»FéŠOíº§\ÔÛº§?\|/©«­'Õ“1x¯µùës†Çæ?sFØö Ût( òж\¨+¸Õ\£] UE‰:*%yÑæÄ`ºš3©‹N–³¨L.ÜVðæ*‘×âéFwíYì”j¿ŒÇÇã1Hb´Ö^þÝÝ&(õ·&©'’7ë~êºY¥ EI68—ÉèÌæ4”ÃølŽÆa Dad¢G×Þú?àï°¤šendstream endobj 109 0 obj << /Type /Page /Contents 110 0 R /Resources 108 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 51 0 R >> endobj 90 0 obj << /D [109 0 R /XYZ 71.731 706.3512 null] >> endobj 14 0 obj << /D [109 0 R /XYZ 298.5799 691.2808 null] >> endobj 111 0 obj << /D [109 0 R /XYZ 71.731 670.2196 null] >> endobj 112 0 obj << /D [109 0 R /XYZ 71.731 615.5519 null] >> endobj 113 0 obj << /D [109 0 R /XYZ 71.731 584.6677 null] >> endobj 114 0 obj << /D [109 0 R /XYZ 235.8044 573.8731 null] >> endobj 108 0 obj << /Font << /F24 50 0 R /F33 58 0 R /F35 62 0 R >> /ProcSet [ /PDF /Text ] >> endobj 117 0 obj << /Length 1619 /Filter /FlateDecode >> stream xÚ­XKÛ6¾ï¯ð¡XqI½,嘠 R´Á¦uNMQÐm³ÑÃ!©Ý8¿¾Cñ¡‡et {i‘Ùá÷}3Z²ÂðGV[‚¶Zš£4‹¶Ö¼¢€Ùãõ·ÃÓw3Z:Á:tü¾€‡Àš›Ô°ÝKîÿH­úFêr?%d£mt‘q¾ 9âwrz¡º„¸»˜µèFQ¼ CÏ|ðŒF³‰6Ec‚â-|ŘìõíðuNàâ,'vÓŽ~Ó}×Ú×WþXg+É“)œëGN0€¼|Æ8^0ŠãÌþƒd~šÿ÷ÔÂyÿÉöçendstream endobj 116 0 obj << /Type /Page /Contents 117 0 R /Resources 115 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 51 0 R >> endobj 91 0 obj << /D [116 0 R /XYZ 71.731 706.3512 null] >> endobj 18 0 obj << /D [116 0 R /XYZ 287.5478 691.2808 null] >> endobj 118 0 obj << /D [116 0 R /XYZ 71.731 670.2196 null] >> endobj 92 0 obj << /D [116 0 R /XYZ 71.731 659.3875 null] >> endobj 22 0 obj << /D [116 0 R /XYZ 214.3071 616.29 null] >> endobj 119 0 obj << /D [116 0 R /XYZ 71.731 604.1188 null] >> endobj 120 0 obj << /D [116 0 R /XYZ 71.731 592.574 null] >> endobj 121 0 obj << /D [116 0 R /XYZ 71.731 577.6301 null] >> endobj 122 0 obj << /D [116 0 R /XYZ 71.731 566.7359 null] >> endobj 123 0 obj << /D [116 0 R /XYZ 91.6563 548.9027 null] >> endobj 124 0 obj << /D [116 0 R /XYZ 354.1795 522.9999 null] >> endobj 125 0 obj << /D [116 0 R /XYZ 71.731 510.8804 null] >> endobj 126 0 obj << /D [116 0 R /XYZ 71.731 497.929 null] >> endobj 127 0 obj << /D [116 0 R /XYZ 91.6563 482.153 null] >> endobj 128 0 obj << /D [116 0 R /XYZ 71.731 436.1606 null] >> endobj 93 0 obj << /D [116 0 R /XYZ 71.731 418.2278 null] >> endobj 26 0 obj << /D [116 0 R /XYZ 321.4372 375.1304 null] >> endobj 129 0 obj << /D [116 0 R /XYZ 71.731 366.3075 null] >> endobj 130 0 obj << /D [116 0 R /XYZ 204.8308 340.6198 null] >> endobj 134 0 obj << /D [116 0 R /XYZ 71.731 329.2176 null] >> endobj 135 0 obj << /D [116 0 R /XYZ 71.731 329.2176 null] >> endobj 136 0 obj << /D [116 0 R /XYZ 81.4147 319.0008 null] >> endobj 140 0 obj << /D [116 0 R /XYZ 71.731 307.9448 null] >> endobj 141 0 obj << /D [116 0 R /XYZ 473.2014 296.0868 null] >> endobj 142 0 obj << /D [116 0 R /XYZ 71.731 271.0159 null] >> endobj 143 0 obj << /D [116 0 R /XYZ 71.731 271.0159 null] >> endobj 144 0 obj << /D [116 0 R /XYZ 81.4147 261.5164 null] >> endobj 145 0 obj << /D [116 0 R /XYZ 71.731 250.4927 null] >> endobj 146 0 obj << /D [116 0 R /XYZ 71.731 250.4927 null] >> endobj 147 0 obj << /D [116 0 R /XYZ 81.4147 239.8975 null] >> endobj 148 0 obj << /D [116 0 R /XYZ 71.731 228.8414 null] >> endobj 149 0 obj << /D [116 0 R /XYZ 90.8293 216.9834 null] >> endobj 150 0 obj << /D [116 0 R /XYZ 71.731 209.8453 null] >> endobj 151 0 obj << /D [116 0 R /XYZ 71.731 188.9885 null] >> endobj 152 0 obj << /D [116 0 R /XYZ 71.731 188.9885 null] >> endobj 153 0 obj << /D [116 0 R /XYZ 81.4147 177.4317 null] >> endobj 154 0 obj << /D [116 0 R /XYZ 71.731 176.3706 null] >> endobj 155 0 obj << /D [116 0 R /XYZ 71.731 156.4453 null] >> endobj 159 0 obj << /D [116 0 R /XYZ 279.598 145.8502 null] >> endobj 160 0 obj << /D [116 0 R /XYZ 71.731 48.8169 null] >> endobj 115 0 obj << /Font << /F24 50 0 R /F33 58 0 R /F47 133 0 R /F49 139 0 R /F35 62 0 R /F38 73 0 R /F51 158 0 R >> /ProcSet [ /PDF /Text ] >> endobj 163 0 obj << /Length 819 /Filter /FlateDecode >> stream xÚ­U=oÛ0Ýý+4¨D4)Šú蘦)Ò¡K½5h™¶„H¢!R5üï{IÛrœ CáÁ<ñxwïÝã‘~$È Ê)ü¥% Nƒª[à`[ßĹÄÎ'¾tº_-–”%*³$ VÛ M3T&ÌÄJQó`µù~­ù^‹!ІÃÙÿ§^iÞ¶\7²þ¬~,¾­NÉÍQY@Äw+:yݨ‰^Ôä*ÏÊ Ñ¢`SI«Zô¶ŽÆÖa ] »Ø M”°ðoDXè+?4º¾r«d×ñ~cgÌðQŽŸ#‚C°ÂíRj»Ú‹¡k”ÜÊ…“.©ôáÁÈÃËò1̓á¬Ì Ä A)Ê Ç'çR^¸”(+hžÆ¡ã/Pk†Ï@§3‚bw"NT’”X†¢‡¾ ¡ôr (lיּ½Úï…áïÐg,{2®èMqxg7F%nSü¹¨jQ½|˜ hÇvWƒà@Œ5N_‡Ñw•_s·änàÇÇÏrØÊ¡›ŸÚZú¬±æª©<ûQ_¥”£>}4ٲȒˆ(³,5ÈHiî%d’ ÙO©…#®ìÙ9a(Å$u´=™ÞæE¸($¬¡d'ì hP“ `}ŒS5œöa5 |r-kîsí|Ô²’ýviÐ%Eă€éàCˆuÃ]')ÂfMpñæÆu³—B%Í40cïÔÚƒ±DÛÞyµ¸b܉ޛ"]ëÖÂë¥Jqèäyï¤×Þ+&e»Ü7kÁ+CBB}Û¶73Œ}oÄJ{=ahž!‚3æT0‰æM½`^/Ø %É&9›3è.ÿ!‡¦uÍ­¸®ê¼P‚óœ_DYJ‹]?³îaL T¬|÷Õ¿ðyýè3 jÁ„ž"ŒôÍGýF¾ì‡+endstream endobj 162 0 obj << /Type /Page /Contents 163 0 R /Resources 161 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 175 0 R >> endobj 164 0 obj << /D [162 0 R /XYZ 71.731 706.3512 null] >> endobj 165 0 obj << /D [162 0 R /XYZ 81.4147 674.7696 null] >> endobj 166 0 obj << /D [162 0 R /XYZ 71.731 663.7458 null] >> endobj 167 0 obj << /D [162 0 R /XYZ 71.731 639.7361 null] >> endobj 168 0 obj << /D [162 0 R /XYZ 71.731 639.7361 null] >> endobj 169 0 obj << /D [162 0 R /XYZ 81.4147 630.2366 null] >> endobj 170 0 obj << /D [162 0 R /XYZ 71.731 619.2128 null] >> endobj 171 0 obj << /D [162 0 R /XYZ 71.731 605.1657 null] >> endobj 172 0 obj << /D [162 0 R /XYZ 71.731 590.2217 null] >> endobj 173 0 obj << /D [162 0 R /XYZ 469.0454 580.7223 null] >> endobj 174 0 obj << /D [162 0 R /XYZ 467.7628 557.4097 null] >> endobj 161 0 obj << /Font << /F35 62 0 R /F33 58 0 R /F47 133 0 R /F49 139 0 R /F24 50 0 R /F51 158 0 R >> /ProcSet [ /PDF /Text ] >> endobj 178 0 obj << /Length 1568 /Filter /FlateDecode >> stream xÚµXßã4~ß¿¢â©•¶nœß§»ƒC‡:Dy@€7u·i’‹í-=ãÆã$®Û[‰E}h“Nfìo¾ù<ºàC%Y_1%aÄ‹òx,á¯ïï¨1‰Ó”„ MáÂóï:‰2RäaºXO¼ÝÞmÞ‡ñ" HšäÉb»ÇPiVy/¶»ß—ï¬U¼[­Ã,_Fdøþ¶Ox¯i•hj¹úsûÃæ}- R¤ Ü‹uX€Ç49{zË÷MÇá¡$X>7ýð£dõðCÔB ¦ÌÿÌüÛÔ5/µÿ{ç¹c/Õð«—=«ªçáB¶¼{s+;_¨3(^UxÏ„Û1ŘīN¬Âdù´¢Éò¼K¸wofkÓûÖ;¥!)Ÿwª2ØlB^÷)û¶m:%ÅHÅêëvžM4ûæ8[äsk˜iž“4ÐÙÖ±Tž\„”$´ˆŒÑ½ÇM ¡hÐKÞÕìÈ=žâˆQž¾ÔSˤ<5°›ÿìi÷peEQH€ˆÅKý(qäMï êJ!·Ž*Ö;GÀ3O2Œ©ÓøÐ&—'MCMžu UGY:'Ú}„„>vü—Ÿ\ŸÙýG„匆l¿­(…{¦@šk¢æ|7§®äêf…0,S7 :€24fm[‰’i7ÃõcÔR6åßšLHb½åÊ )ÁßY¾d!â|`«0X>‰Æê<¯=åe9¡Q~AdcŠ®¥n”©ó $4ÎéœúT¶°9Íì&»’b¼¿QÇáJ‚frªñËsÉñáäætÆPº¤ÛÍt¹1ʘÇ˃NB/*‹£C ¯)à&”2x¡1 ­§”ã"#4…®åÕJyêñz)[«a—­î¶°nfR¹üæÝ,šl¦Ô›îË%0ÙYD>+-ÄXîVK=Ú€­–¼•€icàKB’’ˆF¯¨§S7’€VzÛèÞ‡Á¿,¹”¢~¼ÒúÑ{Óßø¡ ‰ÓŒ¾" 7A« ³ÿ?ÀP§Wó`Á^Ò0ˆ^“©Çë˜X«—’d>x:k9L/•[JæÂ~l›Ú®yìØÑe°ùa¶qzÉ!°ï¸<¼Ds¡ŸPÐD±É@ÕãîFùy–Š?'1ÍÑÒÐ&„™•ó{s{RŒòN”ú\¸Æ&`ó0|E2opÉͨ4&Þ`:Ý=¡9˜í¤C ÿÐÈÎ;ÝA¸§­s"ˆý¼ÄGƒÊx×hïí˜Y]¬^6z/>ŽÁþn ¯Ëf§5ÄŸ¼0ÍHF¯xhO=^OŸµšåïÛŸVQ²|sMð­Äu¬TˆŒÝ¢Û±ºÜåhÃÜÙeúF¶Ô-ÒI¥Ãâzeoêzõ%ér¼’¢âµÂ®â®¬ÎuÍщ†{g•+h–4µzC#Ÿ fš,ÝÖ¼¨#غ1?O¢q ç#18¾tá-‡RÃØáª)Q²o)奈;SôˆÅ´x©¯X¯š¯î¯'Ú“/‡RÙÅÚrô‚JóÃk$ÒæúQ~ªþÚ7Í•b¥yF¢0Ì^¯X§¯«µ:ŸišDÐÆÌ÷¼ñÉõ(–˜3ÇìÉñOs’FöÅÙ0å`E`ö*ñÐ~2 x¯C£àšYWÌß?XÖïÝÞ_L&EM Ç[­˜åÁNÅ4*Ò9­µz”j¿ÞlN§Ó¹|Ú°0+¢ùòqÞä¦ì»Úï_7Ï"endstream endobj 177 0 obj << /Type /Page /Contents 178 0 R /Resources 176 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 175 0 R >> endobj 94 0 obj << /D [177 0 R /XYZ 71.731 706.3512 null] >> endobj 30 0 obj << /D [177 0 R /XYZ 318.5354 691.2808 null] >> endobj 179 0 obj << /D [177 0 R /XYZ 71.731 670.2196 null] >> endobj 180 0 obj << /D [177 0 R /XYZ 260.332 648.5929 null] >> endobj 181 0 obj << /D [177 0 R /XYZ 286.8326 648.5929 null] >> endobj 182 0 obj << /D [177 0 R /XYZ 334.8525 648.5929 null] >> endobj 183 0 obj << /D [177 0 R /XYZ 382.8723 648.5929 null] >> endobj 184 0 obj << /D [177 0 R /XYZ 420.1326 648.5929 null] >> endobj 185 0 obj << /D [177 0 R /XYZ 479.6493 648.5929 null] >> endobj 186 0 obj << /D [177 0 R /XYZ 71.731 620.5332 null] >> endobj 187 0 obj << /D [177 0 R /XYZ 71.731 605.5892 null] >> endobj 188 0 obj << /D [177 0 R /XYZ 71.731 594.6951 null] >> endobj 189 0 obj << /D [177 0 R /XYZ 91.6563 576.8619 null] >> endobj 190 0 obj << /D [177 0 R /XYZ 469.7945 563.9105 null] >> endobj 191 0 obj << /D [177 0 R /XYZ 71.731 525.8881 null] >> endobj 192 0 obj << /D [177 0 R /XYZ 71.731 512.9367 null] >> endobj 193 0 obj << /D [177 0 R /XYZ 91.6563 497.1608 null] >> endobj 194 0 obj << /D [177 0 R /XYZ 71.731 485.7586 null] >> endobj 195 0 obj << /D [177 0 R /XYZ 71.731 474.1471 null] >> endobj 196 0 obj << /D [177 0 R /XYZ 91.6563 456.3139 null] >> endobj 197 0 obj << /D [177 0 R /XYZ 71.731 444.1945 null] >> endobj 198 0 obj << /D [177 0 R /XYZ 71.731 431.243 null] >> endobj 199 0 obj << /D [177 0 R /XYZ 91.6563 415.4671 null] >> endobj 200 0 obj << /D [177 0 R /XYZ 71.731 403.3476 null] >> endobj 201 0 obj << /D [177 0 R /XYZ 71.731 392.4535 null] >> endobj 202 0 obj << /D [177 0 R /XYZ 91.6563 374.6203 null] >> endobj 203 0 obj << /D [177 0 R /XYZ 289.5117 361.6689 null] >> endobj 204 0 obj << /D [177 0 R /XYZ 71.731 349.5494 null] >> endobj 205 0 obj << /D [177 0 R /XYZ 71.731 336.9716 null] >> endobj 206 0 obj << /D [177 0 R /XYZ 91.6563 320.822 null] >> endobj 207 0 obj << /D [177 0 R /XYZ 71.731 297.8084 null] >> endobj 208 0 obj << /D [177 0 R /XYZ 71.731 282.7997 null] >> endobj 209 0 obj << /D [177 0 R /XYZ 91.6563 267.0238 null] >> endobj 210 0 obj << /D [177 0 R /XYZ 71.731 216.05 null] >> endobj 211 0 obj << /D [177 0 R /XYZ 71.731 203.0986 null] >> endobj 212 0 obj << /D [177 0 R /XYZ 91.6563 187.3227 null] >> endobj 213 0 obj << /D [177 0 R /XYZ 139.6658 187.3227 null] >> endobj 214 0 obj << /D [177 0 R /XYZ 345.7909 187.3227 null] >> endobj 176 0 obj << /Font << /F24 50 0 R /F33 58 0 R /F47 133 0 R /F35 62 0 R >> /ProcSet [ /PDF /Text ] >> endobj 217 0 obj << /Length 653 /Filter /FlateDecode >> stream xÚuTËŽ›0Ýç+ÐlJ¤±Xö5U«Jª©ºh»0Økˆ¡¶™6ýú|ˆ* âû<çÞcãÙ8>¤ö“á8IPÔç ëz·Ã’åyœœÛÆ7"é!.‹$¢ë"¯Ž»»û$ ç¤ Áñä[å¥*PÙ÷ðuKÃÕ>JE˜Åîû°ÏPØkÓ(þåóÇH¼?JjïNQÈë±T #¸Þÿ<~¸»OÓ ŒËܱ½P%¥m—“¹Í±Ú&ÖKC{è„6`”ý>!áoéŽÃªþlêOîkZ1þÕ¹¿L‰)ûiIh‹ÆÎñ­åŠ_»\f¯µ¨:~뎲—ÚPɨb›åf[Å[ºOPø$z°xJ­`ŒËimœÄ%ÁÙL»ºxž«Ä‹ äÐJEk#lk@QMÕGdëšjë¤]5æ-Pà[Û4Á¸¢sg;Úx¨0)ú¸ÇvU0S›O´þØöîx匃vÂ@¯3½¬+Ftâ/g[$O¾î@•vmTmMQÇK²Õkš8ý=,2ƒYRíwC–F K¶^ˆ×|0kEŒÖßHË›”Ê;¦ý‰ Ú™¶›ÖY.ýµ( F[v0ØQóg*»ùôþÍ Ø.=J_aA°1Ÿ®—ÍízŒO %_}u,5I"òÑl‹í„I[’ÿõ?Ys€VÜÏØø©KÖùHšÕ]¾\£—v>+jîZRñºoä, ÇŒºÕjPÜsR`ëêiÁÍsy6åÁz®Ÿa×ã0ô  iUãIŽg®¼|<¼¹ÙîíqyEámÌŠ¸Ày¹ùÎBHt3?²)¹z÷HšÆát©4± Ï»-OöF¿㳟endstream endobj 216 0 obj << /Type /Page /Contents 217 0 R /Resources 215 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 175 0 R >> endobj 218 0 obj << /D [216 0 R /XYZ 71.731 741.2204 null] >> endobj 95 0 obj << /D [216 0 R /XYZ 71.731 706.3512 null] >> endobj 34 0 obj << /D [216 0 R /XYZ 507.7033 691.2808 null] >> endobj 219 0 obj << /D [216 0 R /XYZ 71.731 669.8994 null] >> endobj 220 0 obj << /D [216 0 R /XYZ 71.731 628.5033 null] >> endobj 221 0 obj << /D [216 0 R /XYZ 71.731 584.6677 null] >> endobj 215 0 obj << /Font << /F24 50 0 R /F33 58 0 R /F35 62 0 R >> /ProcSet [ /PDF /Text ] >> endobj 224 0 obj << /Length 2199 /Filter /FlateDecode >> stream xÚÅY[oã¸~Ÿ_aø¥6h$ù¾}Jf’EŠÌtÐx[Ý>Ðm³‘D”&뿇â!EJŒg (D2Eò|çö*™Äð—L6I´YÀe™Di/'Yù!žœàÑÏœ²\¯£t•¬áGàéíj±‰vÛt=¹u…Üï?||L—“4ŽÖ«íj²?š¥Ö;˜µ·“}þ¯Ù]]Ó*g¿ÍoÓÍvvéëÏ_Ñ7‚R}÷™gmI«†4ŒWzè™e´’tþïý_>>.“]´[Ã6`¥xr›î`±õª[äïó$IfTHýê*ž%Qr£ï¾‘õmDZ¶aë¥։݀Ä$Z'Û]'ñ¯çI<»v:7úí_ãUü þ%ްîu€»~lÞÔ{DàÈãÝÝ?=?íÿ‰C_?ë›ÏO_ŸöOýú¦fA=I]–xZ*ã_ûÐû, á†TÀ†°Ê·ø/,Žh)òžûUÎÆN6n,μ°J’ˈä*¯ n|ܧJ¸.ttÈ/À;KùâŠæ°twjÚ²©ÍvH°ÒÓ™øÒ²ÍÎïcn€6®€o¨¤åÁ†Ø°×NU/,U&c[re§å9ð9Œ½é…·Ó(äsØWM¿ Ç1oºèô}~ö‰BÏE<È|ïCŸgm_÷YbÍ…Ç0î›´<¹ÛÐÝŒI÷ª(´tS€–±î ÉÌú‰rôx-9Ñw1_.fSC¼PË¥âá ¢ O;‹Â•臵GúƒøÕm &ýó(à[›ÁaDR“Ë`V‡ jØaÀ½&x—S]kaŠ®,YÑJ‡Jv9æ!t(2Ü‚Ë3«¯ù»ê äÀø]!ÿ÷+Œÿi¾ZÍŒŒŽ3h?€²(}êh„8V§±·FVv§''³éçVåŽË÷ Ø2žcG Ìžr%°1uMaÜ·ÀæåkÊD½6úÜF˜¦W™’(’!À®ÃjòŠY¾&œO¹‘ÓõûfÜ }OÈäÚnèŸ}¤—¦1´¤Jˇºd64¨ƒv‘¨?ß²%`슎ÃÃŒ.‚: à4\°ÌP£r7ß'•žnº®6N>!GžàâEOç̉KßÝã@ ý/—.™ÚÖï8Ìíj^°¦Ÿt‰õJy4ÒMâetõ°iúTÍ—1¶¤‚ã_hn‰%Ʋ⌊ÆÚ8ì"cr×°¦0<©'ô]‡¥p½ñk¢sМGaãý 2;¹yç˜ÊåR}à3z¿# ‡x%2H‰F´çª>¹YÃ=±Õq{ÝС™è¯‰”PÞ†¹Å µ³â Í ñØ•¬í̃{’½þð•€Yñüÿ7ÒÖcbûùb5S,r­¢«¡óÅÿ‚Š™l’A ¡·‚’œØ.+ÔeÀÝ _å¿yç¢4x8¡'kš9Ä)ØWÙ¥&°XÑïeTÀOîA¦Ä7£uU™íO‹F]ówFñ }À—ÕA"ÍCÅÖN^„¨Ö4ÆŽ=w r(t[6Ìݵ UŸmÓÊÊ> Ô9·®d¬]ç븗싛·d ¡ÚxG+×ÌQâÞ :¥sô’+š0å;&tºJ«D:ìWú 2n![ÖñÙ+«êvHñ<`µC6#òxtX$ï8OàmI³üÝ|÷Ñ)Ÿ6}¬ ÐËþÏön:ÆP°÷'Íéé{ü7f‚a9ŒÉãÔÙY(xK"^ÛÚQv‡"öö³)~ ]n£m²Þ?¬â”[gN÷Uu±r>Y­i´Ù¥½$…ãz¸šýFXïwÏ-`endstream endobj 223 0 obj << /Type /Page /Contents 224 0 R /Resources 222 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 175 0 R >> endobj 225 0 obj << /D [223 0 R /XYZ 71.731 741.2204 null] >> endobj 65 0 obj << /D [223 0 R /XYZ 71.731 706.3512 null] >> endobj 38 0 obj << /D [223 0 R /XYZ 532.0396 691.2808 null] >> endobj 226 0 obj << /D [223 0 R /XYZ 71.731 670.2196 null] >> endobj 227 0 obj << /D [223 0 R /XYZ 71.731 660.1048 null] >> endobj 228 0 obj << /D [223 0 R /XYZ 71.731 650.1421 null] >> endobj 229 0 obj << /D [223 0 R /XYZ 71.731 621.3466 null] >> endobj 230 0 obj << /D [223 0 R /XYZ 71.731 605.2555 null] >> endobj 231 0 obj << /D [223 0 R /XYZ 71.731 546.4112 null] >> endobj 232 0 obj << /D [223 0 R /XYZ 71.731 504.6328 null] >> endobj 233 0 obj << /D [223 0 R /XYZ 71.731 434.8944 null] >> endobj 234 0 obj << /D [223 0 R /XYZ 71.731 416.9616 null] >> endobj 235 0 obj << /D [223 0 R /XYZ 71.731 371.0687 null] >> endobj 236 0 obj << /D [223 0 R /XYZ 71.731 340.1845 null] >> endobj 237 0 obj << /D [223 0 R /XYZ 71.731 257.4946 null] >> endobj 238 0 obj << /D [223 0 R /XYZ 71.731 226.6104 null] >> endobj 239 0 obj << /D [223 0 R /XYZ 71.731 195.7262 null] >> endobj 222 0 obj << /Font << /F24 50 0 R /F33 58 0 R /F35 62 0 R >> /ProcSet [ /PDF /Text ] >> endobj 242 0 obj << /Length 2323 /Filter /FlateDecode >> stream xÚµZKsÛ8¾çW¸rY©JÒèiË{sâ$£­ÄÉn4[“ÚÙDB6$ÁÀ8ú÷Û Ð‚¶ç°åƒH º¿îþú!/®æð·¸ºYÌnVð±^Ì–Ëùú*+_ͯNðÕ‡W »dj×LÃEoö¯~y¿Ú\ÝÎn¯—×WûãÕj½mVë 쵞mç7Wûü_£»º¦UÎ~ާËÍ|t73Ÿ~3ïÇ›ÍHŒW7#JÍ“{ž5%­QŒWæÑG–ÑJÒñ¿÷{õnïÄÚ¬nf·[8ûIÙݪ„ô«@z«ãõíõlµÝnZá”Zr*Ù©¢¹¹SÜ~žÇ‹ùˆeî¹°«™Ìx#ÈÉê$›ƒ¤ÿm@+s_òœý1Ÿ/³@ÉÃÅ| Jr*¤¹aö³âöÍýxx‘JÖDÀvÎ;ó‘ñZ‹sAáˆêï.ÓÅrv»Y¬[-_G›¾î¾•‘¢@Å_® èñzæöpWËm»Ï»Ÿ¤¬ j_ãGÔ)r(,G.J¢¤»Ijå´a¸«²¢ÉíuA˜íîëÛÝÎ\>2uæ LÄ÷¦žàî7ó/6£Ÿ¬:rܱÆÅF¦I šÄ¼üûàKíÍן>v=àw|ÐHVÌ%±â7‡‚eÅ.ç£ãåfDXáqºßßÛ½Ie±— .‰È§¯ôén_É4ìæú×=œP¤ë¿øsS’*å“Ö±Œ¹¦ëä —êk&Xx|¹?ÞÎGö®¼Œ*".‰¼›f(ÊúPð t´2ñIs¦P'^!¤I½sÛ`å"w_gTJ.äóVt€=žYvFÁ½­œ”¿àB»»3’â¼°ƒ?'ZQA7ä!±c8AJ’YE§f‡Lë(TÞdøq’¼¤Oaæâ nDÍ¥ zm„ëÍ(É{”ÓSè´_tlYZâ))0Á$:ƒG°Ê)vàüû$Â@ùmkÇ¿LIZÑ‹F"5¡-¼(¸†øÑL¿ëŽÒ<Îg^äI)Zê9±ƒFK±¾ ¦¨`¤ÀÇH»˜ôÚDz(O{$<%[‰À€ŒöE à™Ve†ùdi1…çÖÜßew‹Nx¢ÃÃóœ‡Éœ­k–}Rß\¬(­ D¼aH`‰ÉË#¶¹!w…ÆAL<Æ@PΧ8]Ž1’*£Ý¤åÞDˆþ¢ë ë¸B<ù(?ÓO¬ T•[Ù;éÀóËÀW¨_U¦ÀZZËþóÝ?ÞhäîÆ‹Åb´ß}2ß~þòm÷ð!ß`¥fôÃKªŠp,5ì -Þ(S -ÚGêxCk¸œ5¥…B²¦Ï+K*2æc¾âUçK=ÆŒzë̇¡N# _³µ^`@MÌ.P]ÁNgeƒÃZiWÂW š¸Ø\Kr1nW›ƒ;‘¼ÐW˜²F¯áÑÎŽz­°uÌPÑÁ]aåÔO˜h/hs’爴E>4 ”íºpDœÀ©&Iñ"®…¹ìEQDfÖUϹtŽŸ+h*¨€ dÓåD}öÜ´É¢‚”Q‚‘×êú¤]zlD‚qŽá° «Ô‹Wé»~öº‚ ‚,¿š´ÓÁuíJ'½cÂâ2’e´võr ­– Z t CÙ™T'¥U#¾•ewŒôHżMÄìb; iÅ›“M¦US@Ä+ Sƒ´L ÉSŠú¼Üƒ½ë¨ª¤™×5û´×Š`T£2@jªœÆ‰E’r@ ¨Ö]B†­ZóÆayéIÒmÀÐð\ºæJäÕ¬KøÆ¢æóïÚÓŽu÷°ßí¿¥péY¿•Cž…WhÍ^Dtsq?%.w`¹¿˜ÏKZÜ,Ì¿ž~ i°Ìų­’žô60èõ…JN}“B«ã¨-÷è|YxF¢½"ÌaY¥G§ÙDµR;œ¢<§Ñ_mÅ'€û¦ÝÅ |:¯b1é|Ô[%T Ëéñ†dߧω8pÎÞM³Ñ…ÙÕ0毼mcÊœ/©„ãÓf\€ÚH‰I/0V‡g÷Ï©U¦tåÍÑ8¯ð岃D>ƒ]ÝPÀoCµ•Vªh*g„ð“ß3©ÝA4>)'HÖU:¹áZ¤¼8K{LÒsÄQúy¯[’=J÷øI×ðw3À|­ÛÚK„Q ìg˜Ó~ ¥Ëã%áS˜r&ŽÏBVT«Óv-SnÞ«yõÀv _ ™6‰vÇ^ÕòrÞífâ©B·'èEƒk¾ç¨Ô%¼hÀ-y•z’¥žbTÌòÌ›'MczaÈ+ïIÒáúÇ|3GlËNËCd ß@40äÉ`“Å@ L5¤x!íêB—U íYÀ뀑ü?$sÞÖŽ;ž4gº.H·ýéáÿ«dH%ìÀ‘:sJ’®¥ÍÐL7~þ:4‘;cÏžo(Á‘R¤¼yÑûâÖÖ‰Qœ‰?¹kJ9ãkXJNu£ [¢öÍØIh{M+ªpÎüþ2¡}а*žcë- ª^Ø ÙqÖ'¨gÆ„¥€õ1æ0wL†§²vŠŠ3!§á4˜ÈxìüÎMùZ¨ºt’›&¤*¸ŸHsê%p«+T·†ìÓé’ÌÑ©äÚ 2ÅOh7õP<ãÅ`¿ÖôÊÔ‚(åÊ’ZÛt8nT§kõÜ„‡7¹3,°_-øø#Y¯[¦_ ¦pN†Î1Äø6(Àp* %44M@*B¼ÀEM‚–îW&un:¾áÃhhæDûM`7¦P¢è: ¨A¢±ˆºY&9ª^÷Y¸ •Ó—ôîÕs,¢“Y¹:Sñ0N…oñá”dI¤re½«€= (¢‚wŒ­DM%Ó/Í‚8Mvó»è7N]kPœ­sX¢ V$“ÁÑXKzY\FÝï!Ϥ±Gоt G—ÃàÐŽÿ;R ?\I`<<^‰âáÄüPÉIZv9üìgßøZ0[0 z tã:÷ŽÅr/¦{%-¹¶¬öéóýîýî-α??|ø·?Õ¯·³íâúöÉÿXÖôÿaa³ZήWp«´7ƒÿf8ï6— èendstream endobj 241 0 obj << /Type /Page /Contents 242 0 R /Resources 240 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 175 0 R >> endobj 243 0 obj << /D [241 0 R /XYZ 71.731 741.2204 null] >> endobj 244 0 obj << /D [241 0 R /XYZ 71.731 676.2989 null] >> endobj 245 0 obj << /D [241 0 R /XYZ 71.731 606.5605 null] >> endobj 246 0 obj << /D [241 0 R /XYZ 71.731 549.7734 null] >> endobj 247 0 obj << /D [241 0 R /XYZ 71.731 533.898 null] >> endobj 248 0 obj << /D [241 0 R /XYZ 71.731 451.208 null] >> endobj 249 0 obj << /D [241 0 R /XYZ 71.731 431.218 null] >> endobj 250 0 obj << /D [241 0 R /XYZ 71.731 413.6588 null] >> endobj 251 0 obj << /D [241 0 R /XYZ 71.731 317.6439 null] >> endobj 252 0 obj << /D [241 0 R /XYZ 71.731 286.7597 null] >> endobj 253 0 obj << /D [241 0 R /XYZ 71.731 178.1669 null] >> endobj 254 0 obj << /D [241 0 R /XYZ 71.731 147.2828 null] >> endobj 240 0 obj << /Font << /F35 62 0 R /F33 58 0 R >> /ProcSet [ /PDF /Text ] >> endobj 257 0 obj << /Length 2442 /Filter /FlateDecode >> stream xÚ¥YãDú}~E4/$RÇøLœ}˜ƒaY„Dƒ´ÚåÁ±+b;¸ìmúßïW®ÓuØn#œ8_÷]mBø/Ú£à˜À#‚8ÓMy{nžà§Oo"²ç0{è›Ç7_L²Í)8âÃæñ²IÒ<È’4\i‡ÇÍcõŸí»û5þs·³pû.`ÏO?þÂ>|ÜeÙ¶Û%Ç-BìÍû¶n¨é‹· {õ.QCÐî·Çïß|x”leÉ18å@{–w åà>Ѹç2N‡ Éóldþß»( ·íÀظ/ìCÙÞwðž+šŠ}¨0é;|ÞÅávè¹4{ü«­ðÃ0FôW@mQG¤Œí…=û«¡ömh*Ôe Š¥Z"S•ÚÛØà2áßÏí.ʶÿ£ÿCTµ ®}§,JGáïƒÀ•຿œ¡“Õ¨ ÈàlY\Mž{‡JLPý"`21ûûöŒûë«ÉÐ_ë7Oê/’vm¬ð Þœ¹zdNbžØ^’—J¿qNKÍ«-ZËâô-×ŵE»XXOè±%ÑÂó&’2‡žz®à÷<,? ¾+æX†µoáPµ’ye}Ð'Ž›WÈö3°Ç ÍOÙæŸ‚£;'q ½åkט”“d¿ÂÏN’æS² þh 7eá¡6KU»$“—ü‰Ú¸xB¡³PzUÛXAÅtG¸õðE8#}ÿ¢Inê-êŸ)¹/]{3)@$oú·D…—3Ñ0gÆ­.!ÊbTîç+.y ×v¨+C@à©ã„žå'.õîm9ø‰&½pGËßÁm÷2I¨  Šåqd× ‡Øƒ•6IqC–M 2±Ö¬²,}p–;ü„›¢æ†3ˆ~iCÉ#ll!|Â*Ùp¢wÔÝ0¡ V(ó LŽÙ&Ë3è’Ø½h¯C9¢×ÄE÷7z]$—£wž 7eá,a»2| k2DÛFZJÔ á¿ h¢*<ÿ¼ ò³°E‡È@ðYм8NåŠïßÖ%ârÓW¥rQ&Û'ÔKS•[xízU¡•wyؼw•ð]x0kUã4&̺6 1;$ŸÚË¿eÏ«0e EW†Pã’Še_˜@Wz: a¢AÍ„‰€¢ìëÉa2Ë‚…›²ð3tñh]œÜe‰“L‡¶CørØz-ˆ'Œ$¯'Éâtžæ{Êß“H(ª«÷~s9H®0×, nÊÂOIP§G¢Œ­Å`$””+„¦í¡^ GWd§,Ùdá!ˆÂ8òÀ´×¡œ0ÅEÅùàרƒä β`áͪ’m{Þa¬‚¬#ã«O#•CÞ¹s6ïØ/J™ôúÖìT6öжH—†ñ&Íó :œ·…8Ð^‡rXÈÄEÕóq—‡[¯•\d—­4φ…›²ñ¹)ë¡%ßn¨¢iqé³·O‹“v­æ« ˰¼§šŒ¦* •f—5µë¤utT®WÍß’2Hy³¢Ø=Œ[MøéM¶æT²çÆ !šj¸‰f¼fà´A÷&Ý4;qžÅóIW‡ò'] EõÉï|’+œo– ·;é*•É~ÉçEJÿƒÈÔt¬1¬c}JÛzÐs©Gd‰Ÿ'{"9¹uèwÂu¾ÕGJQ¹Ð‚Ò7 Jú„à0¼c!ÊÂW´Ú¯˜~—ˆAF ¡€f‚Q®¾óûƒMo…;ÌÑ71k™hZ3Ý 6…EÜ;+RmI¢ 9@¥OÃí¿5—rN¡Í_ QÜEZ£0î‘HŠt-R½c R9X#ô‚ŠŽ.ÿÚ –(ç'•4á ‡±”ì¢-o”áÍè-ðdôàäR¤±Y)(6žfˆSlÍ[<éé὘}öõ³"Þñ?ÀyÓ²§2|¡íL´v‚ÒN«æTc3UvHFÃ.kŒ0 ¥+,Í#Ó™´ðgM¹Ãž§TêH¢ÆrÈ5†kÚ®X!RvølK½Ü4¾©Ö¼›3{AE@pÔ8ryÒc¢h“Àx|È#OFâ@{Ê‘L\T?ß{3’‹ärFZ`ÁĽ‘Ô?ÓLÞv_xBhYOï^Üj+Ì…rëp99GèíeQ–jwÑNúÖÑíº¢!÷¢“H|•ÇÙƒúÃ5þB‘°d†Éj¥¿/úŠ=³Há#ÂßÏArå¸ñQƒÈSB±g¾×0™ù¢E¥4½Hy×ÈŒ‡›,4 :3ךlVu™™EF«dÍrØXT°$"ã|šÄcÆ$ìå]Ø"^3‘á¥f„¦w‚ê˃¥//ìÉÿ&Ö7ØðZ϶ôÇ)td,°sbº ÁÛèðð›¹Ü¦øg–Û¼iŒOiŸÒ…þS‡ò7 ŠªôŸÞ”å"¹œ²æY°p³&tšwÛ§wå—†Mqðî Qã’·ÓõÛ÷0Só@mÖ}±YÓ‡g vŸžœYi"†½Ý"Ê[S"ƒN¯6ô<ë¡BœEYžlu,cÏ¡#IäkU)-yÓÝØ>áÆ»O‹i†§Óü>M‡òïÓ$ÔxèáwMÉ®9Ë‚…{í†rÕ´»tŽiÌ\šWa±6á°928 ©ç’`ÂOÜÃíŒ:u¸ãpXÉ Ê™/PÁjÕLvj`–þGp¥˜‡î;½„ƒàÓô«,Èã ‘$AD?8ýŠíu(‡_™¸Æm•߯$WøÕ, î±YA5êÑ+ÓÞ‡¦‚Q€§;aÞA¤…Â@–pi«³L[ãà_ý…ëþeAäÛÚÊ¥€f*¢ªúÑo-›Þ cÍÑ71³¾ÒPa‡ôÓrÝx,BÇ; OkˆVgjÈiÝm1Äè?Áânn¬ƒzí˜Sgb>±nrƒSçêÃX‡_Aˆ»™n Ä…Œ¦ßߊ^.³§÷Äd¡böäŽêÿŠ_^¦Ê9Ú¦*ÄU {§èÈi´@BƒM+bÃâˆF ŒWIÜÙúÅꑵ‹jb&¿+˃†ðS#פ½çïÖ‰±vÏiª¶Âwh>5z ƪpšW¨°Ü'È’Y=<ç:µº‡ðš]ï«òË↖I6*È1éü«ûcç…G“ÒN¯V,v“3̓<:œf/´j0ö}Ö *DF‰ÄDÅɽ·PôþbÚ÷endstream endobj 256 0 obj << /Type /Page /Contents 257 0 R /Resources 255 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 175 0 R >> endobj 258 0 obj << /D [256 0 R /XYZ 71.731 741.2204 null] >> endobj 259 0 obj << /D [256 0 R /XYZ 71.731 753.1756 null] >> endobj 260 0 obj << /D [256 0 R /XYZ 71.731 706.3512 null] >> endobj 261 0 obj << /D [256 0 R /XYZ 71.731 655.3774 null] >> endobj 262 0 obj << /D [256 0 R /XYZ 71.731 650.3961 null] >> endobj 263 0 obj << /D [256 0 R /XYZ 89.6638 629.6388 null] >> endobj 264 0 obj << /D [256 0 R /XYZ 71.731 601.5791 null] >> endobj 265 0 obj << /D [256 0 R /XYZ 89.6638 585.8032 null] >> endobj 266 0 obj << /D [256 0 R /XYZ 71.731 558.1171 null] >> endobj 267 0 obj << /D [256 0 R /XYZ 89.6638 541.9676 null] >> endobj 268 0 obj << /D [256 0 R /XYZ 71.731 539.8108 null] >> endobj 269 0 obj << /D [256 0 R /XYZ 89.6638 524.0349 null] >> endobj 270 0 obj << /D [256 0 R /XYZ 71.731 521.878 null] >> endobj 271 0 obj << /D [256 0 R /XYZ 89.6638 506.1021 null] >> endobj 272 0 obj << /D [256 0 R /XYZ 71.731 503.9453 null] >> endobj 273 0 obj << /D [256 0 R /XYZ 89.6638 488.1693 null] >> endobj 274 0 obj << /D [256 0 R /XYZ 71.731 473.7784 null] >> endobj 275 0 obj << /D [256 0 R /XYZ 89.6638 457.2852 null] >> endobj 276 0 obj << /D [256 0 R /XYZ 71.731 444.2342 null] >> endobj 277 0 obj << /D [256 0 R /XYZ 89.6638 426.401 null] >> endobj 278 0 obj << /D [256 0 R /XYZ 71.731 424.2442 null] >> endobj 279 0 obj << /D [256 0 R /XYZ 89.6638 408.4682 null] >> endobj 280 0 obj << /D [256 0 R /XYZ 71.731 367.4571 null] >> endobj 281 0 obj << /D [256 0 R /XYZ 89.6638 351.6812 null] >> endobj 282 0 obj << /D [256 0 R /XYZ 71.731 310.6701 null] >> endobj 283 0 obj << /D [256 0 R /XYZ 89.6638 294.8941 null] >> endobj 284 0 obj << /D [256 0 R /XYZ 71.731 279.7859 null] >> endobj 285 0 obj << /D [256 0 R /XYZ 89.6638 264.0099 null] >> endobj 286 0 obj << /D [256 0 R /XYZ 71.731 248.9017 null] >> endobj 287 0 obj << /D [256 0 R /XYZ 89.6638 233.1258 null] >> endobj 288 0 obj << /D [256 0 R /XYZ 71.731 230.9689 null] >> endobj 289 0 obj << /D [256 0 R /XYZ 89.6638 215.193 null] >> endobj 290 0 obj << /D [256 0 R /XYZ 71.731 208.0549 null] >> endobj 255 0 obj << /Font << /F35 62 0 R /F33 58 0 R >> /ProcSet [ /PDF /Text ] >> endobj 293 0 obj << /Length 2307 /Filter /FlateDecode >> stream xÚZ[sÛ¸~ϯðø¥ÒŒ¬)Q¶fŸœÄñºMìÎFÛN· I¨yQ2Yõ×÷8¸„d»“™Aàà\¾ó#'3ø—\\'Óë9\É4Mg‹‹¼z7»ØÁ«ûw N¹Â9Wþ¤÷ëw?}šg«éj™./ÖÛ‹ùâfšÍ¬µ˜ÞÌ®/ÖÅ¿F·‡­ öçø*Íf£Û©¾Þ?þ¦o>³lÄÇóë¥zäc“w­[Ò²¦ÖCŸYNkAÇÿ^ÿõÝÝÚŠ•ͯ§«Øû¬ìvVDú¹'=žq¹ZNç77™þŸã$™šN‹Q‘£¾!E7ú"hî„ÑY[RœqyW TžH\Nôà7ã$}g…™ÆZ}Í88«…~ª›vÏê~ØŒÓÙ¨kÍ&nU=ÒlõõØt\ß}i öÇl– 8PÆU’NWY²PGû-Q.¬à<Ý÷qšgM‡KoWWÛ—¦Rü?Iu()I€½bâ(Åo8•ë~gêògá»vOZs‡nÐê=pxOpÝ ¥(.95ÊÿŒ"Í!H;4ì—ÜŒvc8_Íþëy˜YÞnOºvßp&½P‰­öЯ *µZ3÷µ9,±º¨ ‹©KlÜÁ–¡2&ÇËl„ {­ePW)9%Å1æ¬ÎË® RˆE¦ü .yp~òðž4rÉaµ!ÜRÑØÇ‹Ùh¢Ç±•yå~¨2¸ÝàÐQÅ2ܘ-Ì Oez5æM‰Hƒªê/M8é‚@Ú1éÁ¢8Ý“rkœ‡ÐH–Ì'><}yÿðøðx*}úðÛ—»Çõ×7dÖ¼©6¬¦g󃵈s*ŒÅôa\¾¤D˜tuáÜ.0à$2Ų^‰° 0JXzÌršÝx€X¯ ¨&õ,N’O76ÐeOdD­RŸ>•å‰ x¨%¢JIŒÂ¿ês‰xfCtS‹J`Ýh Älûãkk'Äí®vZÀ!¼pƒ¤`±µãd´§•~°[Ì+1±aØÛ“ )·J%Ê×p3ä@ÏúIiQ^[ad±UMuðòNt5ûÖÑ * KµÖ€D3÷¿@ ’ï© Fzû±;ÿ ø½8µiÕf’S9Éås·ž‘¸wL†¯ŸëF•”õ¤Ÿ¥hi#ê¥îª ì“Y—ùb¬qÊΤøO'Z—3¥HO8e·S…B¡Xyº}ƒSFVõèƒFv‰CG4?(ÔJ ö¦>öOô+d© D–×Ä˹ð…cðFxšø½xºüôÒðã¥þŽõ·N‚Æ øy ò@"“b¥}^N­é‹ù5èÜi~6êE‘¾Æ°‹ç=kkßæÆkal×ﹺûËE°ãò#-ŒÕìKôî€u¦4.€Ô´4Hâg%÷ûYÓËX†ZZîöùó݇õÃÓãW¬’?½Å-æ˜%À¸• O&ÆËÒ†` >Çšû¬O9fóôÁ­Oú`ŠGúà¥atjI•!aÐËR2½fj+¤ˆÓÙ8du¡Y>+:ƒ’Í/¤ã0èÜöui4À\&z”°8É -&Qhï³N¥Aµè $…ˆ-ËÆ´Ý@™ÓžMÚÈéD-†Dæ»8¨Œ·è¢{¤v)L¨C‡ICw`èhÈSç9Òàâ oéúa‚C!Ò.E¯RqU²Kþdh>œ!=¡ýŽsß Y|EyÓ³hÄâ^-á*Hò&Öi¾výœÞŒC5…gïùÔ˱ä*WËÚ>6l®zÈ\qªÈÙçóNìú5rcNu kÕ[É îï½»¿U5´„Wýæ÷‡õ/H?Þýýþ{\ã+¹õÓ¯‹î­-]¬45]¬êòÁsi»]¶œ‡Á–…!¿mŽ}äÒ&j2È5@-IKƒ: ¼’Êßl﬈nwÃ]LígŠ,óކĭ”ʶPòWÛÆo¸ëàòH(YæPAÆíª‰±#a“­ßþþ±oêvu|Ò¹žÉ §× °ÏrÏôž³½ÚY / «h´|fi–B‡ý:„©`7»4ÄuÔGÓ ²Ûy×RŸ$Eë¦htÇLr°=¬¼x±/h¹½ÂÒ9$Ìö7#“nõцEkÄ@½æ(É=7ð¬Ê¢UÒ†Zn=é×FrgÇ!m lµï+8¢‹SÅ Orôø'½0^O(TYTY ~”¡à§ áô[Ǹm¥¯œV‡‡¹¾h^°R¼)q'ef½µÀ!K¶¼%ucHßûöÒ_âV,<†ŽN`-"ÎI؈ùÖÞ+_ïÛÉBbrBÿ‘Õ­xËO_ƒ_ˆüŒo)1¨Ð;ÎÁ—ݧAO_+b؆Ëð¸æ'7£®ë;º+pÀ (á/Ÿ€xRÛ­=œJü1þùÀâfz“,WgÿŠÂ›3ü#Šl>ŸÎfÉÜ®$Õ´:ù§‘ýþ‡$endstream endobj 292 0 obj << /Type /Page /Contents 293 0 R /Resources 291 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 308 0 R >> endobj 294 0 obj << /D [292 0 R /XYZ 71.731 741.2204 null] >> endobj 295 0 obj << /D [292 0 R /XYZ 71.731 753.1756 null] >> endobj 296 0 obj << /D [292 0 R /XYZ 71.731 706.3512 null] >> endobj 297 0 obj << /D [292 0 R /XYZ 71.731 580.6576 null] >> endobj 298 0 obj << /D [292 0 R /XYZ 71.731 549.7734 null] >> endobj 299 0 obj << /D [292 0 R /XYZ 71.731 533.898 null] >> endobj 300 0 obj << /D [292 0 R /XYZ 71.731 477.1109 null] >> endobj 301 0 obj << /D [292 0 R /XYZ 71.731 407.3724 null] >> endobj 302 0 obj << /D [292 0 R /XYZ 71.731 363.5368 null] >> endobj 303 0 obj << /D [292 0 R /XYZ 71.731 345.6041 null] >> endobj 304 0 obj << /D [292 0 R /XYZ 71.731 299.7112 null] >> endobj 305 0 obj << /D [292 0 R /XYZ 71.731 255.8755 null] >> endobj 306 0 obj << /D [292 0 R /XYZ 71.731 240.0001 null] >> endobj 307 0 obj << /D [292 0 R /XYZ 71.731 168.2043 null] >> endobj 291 0 obj << /Font << /F35 62 0 R /F33 58 0 R >> /ProcSet [ /PDF /Text ] >> endobj 311 0 obj << /Length 1830 /Filter /FlateDecode >> stream xÚµYMoÛ8½çW9Ù€£Xþv{J»NëEš±S Øî–h›[}­HÅͿߑȡ$Šv”‹É9óøæÍ åvðçvf®3Áeì:Ãá`Üñ‹Ag?}¸pÕ+5æª:èÝæâúv4é,œÅt8ílvÑxîLFã Ì5væƒYgãÿÕ½Iùìgïj8toyýpÿ(ÿ¹íM&Ý´7šu)•Oþˆ½,¤‘ ‚Å‘|tÇ<qÚû{óçÅr£ÍšŒfÎbkŸµ]²X?ªX¯|œ.¦Îh>ŸÆÏ•¹›‡›ûõÝMÏuÝîfõù>·f¿raêÑP:ºéÀñ b9ãòêÅg>M©/ü`‘zïä5Œ}ö}0zÅ$}ùÇòúgjy–ÿøŒ‹”m{ÃA7 @QÁë“‹ƒ±¼Ë"°Ì!hríæÐYL\ ÎÅ©Wº9V8=Ð$ ‹öòvõƃîSo8é’”\o-_UÆ™8œ2<¥ÿf,¥êŽ'Ôc$7 È8×&ìÒ8Ô>°aOz.à–²ýA-~ˆð–÷ë¾ ßާÀf‘dþ‹(ó8Tcbe ‚W”GÄ÷Y ±ˆŠÁ)!O=wÒ¿¬›.CÇôöcÔ–~ÒÃdg± HL00’å¦qnõ†‰‰> ýuøí0,£}ÀøÁFÜ B/XçèÍ’$"h0¾Atð‘}JiI[*Ž”Ff,™¸Èoå…¹³»-ûª¼èÿÆG†ŒMRšD²„N]ùæÅ‚ TÉåçÕ}.ƒç•ò¥¢XÔ£¶7tû¥,îªx¶ j~b¬YÑ®{4wû§GuOxõ9xÎyð|Šª;\°¦žgwDÁtåS©‰c° UB¢-î¯Ãâ—¡ÀxÊÇÌïD- A2‡ÀeDíÙgyæžá‚ÈÊœB„¹4Kø}ŒsÎý ‚æz¥,KH*&†ãA¡u ¹ýr4f²r _£ /Ì‘öõÍt¢•¨ýF›˜if7í«$+µ‡¼LÀŒ~½bÌ®HWžy () ¦¼î24É‹Ã$Ñ÷¨5¤ÝÚ…ÛÇÍãÃRe÷å×Õbz-o?ߪ°ÿ¸ROîVï—÷륵:BÞݦXè­ã8æä&)þ–έÔòä,GÅŠ Z+A tŠqìlF4«Ð´EõYò²ó‚I¼(5 üU‚gPšäêX÷É¢ ›Û€†¼hP {4ÕÆ±?‘¼¹¾>‹}uöQæÀ+î¼»¿F èN\;6‚-‰÷r¤–EõÙWd"2󼀚6öéÒ¶±H”…[€º,ÎÝE1›Wú:àuíC*Ñìeùî['׳½Uéu©KÓj2‚®2ᥙ€`hc±&}C%­§lJš¥á.)ôZ£щÈÂ/`’¬‘1s³2–ä'Q3Þm޹Èey« A¥\¸ê÷Ád 3ŽFª¥d'`€«æx6 )„ʆ—´´'ý÷WÛW`¶{®yŠûç‰×?ÕVy‡8F^"à«Ö*ƒÿèViÊš?UñR–ŒÓ³A©KʲfòÕþpÛ"›Þðn773$­¶ïg‚÷‰FP<ˆ°u}ºBm£µfkT·C—› &¨| … Õ°´úzºZu Œ€[…Ñ?ÇÁ;Ñ<a"À¬JöôMnJqj4wÓé8?5*Îf«¡ëLÝù¢°î}Ó”œŠ^I·oË›l¯GPI=ª;Ù<}ZªpýbœqèT ¥. Ït ¶@¹Fž©NÂàÿÊÃ!ð|2Õ‡~­ÂRV-šÇj¤»Žk¨´ÕeC~#ÌßVN«,žë[ñl©æíÝj½Á:z¹R<ج6wËu¿q@VšGâê½ìI« ¸éͰ'Öš»Íî®±Â;âýxy –å°ïm¥­6SºãŸP‘ÚY$P+[5öòU ¼ttˆ—ÃWãUíÅLzF:£¸#ú¥ÐbqVîGË9..(1N”9yÖ;r<0¬’ã5Pž™‹”UƒEƒ[xÞŽ¦^7Á9ï/#T.ß"%䌕mã'2RúŠÀ±Ö J¥6%†b:±HWhh»ìyñPONO ³§FË $'òQkå1IÂR>Þ”ðjEŽÙ\£Ú4°¡SI"¥wP÷AÔí€RÞÐãúy_yêAø©¤óF4Ep¾§d¶„ƒ´ø¤ ç2™Y½ìNáU“óc•ú¼4ž;swº8û•­2¦ù‘m2œ;w±Ð3Éãš“ßÆ, þ$6†ºendstream endobj 310 0 obj << /Type /Page /Contents 311 0 R /Resources 309 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 308 0 R >> endobj 312 0 obj << /D [310 0 R /XYZ 71.731 741.2204 null] >> endobj 313 0 obj << /D [310 0 R /XYZ 71.731 706.3512 null] >> endobj 314 0 obj << /D [310 0 R /XYZ 71.731 606.5605 null] >> endobj 315 0 obj << /D [310 0 R /XYZ 71.731 590.5654 null] >> endobj 316 0 obj << /D [310 0 R /XYZ 71.731 531.8407 null] >> endobj 317 0 obj << /D [310 0 R /XYZ 71.731 515.9652 null] >> endobj 318 0 obj << /D [310 0 R /XYZ 179.3565 477.2104 null] >> endobj 319 0 obj << /D [310 0 R /XYZ 71.731 470.0723 null] >> endobj 320 0 obj << /D [310 0 R /XYZ 71.731 400.3338 null] >> endobj 321 0 obj << /D [310 0 R /XYZ 71.731 382.4011 null] >> endobj 322 0 obj << /D [310 0 R /XYZ 71.731 356.4982 null] >> endobj 323 0 obj << /D [310 0 R /XYZ 71.731 346.5356 null] >> endobj 324 0 obj << /D [310 0 R /XYZ 71.731 295.1448 null] >> endobj 325 0 obj << /D [310 0 R /XYZ 71.731 253.1508 null] >> endobj 309 0 obj << /Font << /F35 62 0 R /F33 58 0 R >> /ProcSet [ /PDF /Text ] >> endobj 326 0 obj << /Type /Encoding /Differences [ 0 /.notdef 1/dotaccent/fi/fl/fraction/hungarumlaut/Lslash/lslash/ogonek/ring 10/.notdef 11/breve/minus 13/.notdef 14/Zcaron/zcaron/caron/dotlessi/dotlessj/ff/ffi/ffl/notequal/infinity/lessequal/greaterequal/partialdiff/summation/product/pi/grave/quotesingle/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde 127/.notdef 128/Euro/integral/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft/OE/Omega/radical/approxequal 144/.notdef 147/quotedblleft/quotedblright/bullet/endash/emdash/tilde/trademark/scaron/guilsinglright/oe/Delta/lozenge/Ydieresis 160/.notdef 161/exclamdown/cent/sterling/currency/yen/brokenbar/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis] >> endobj 157 0 obj << /Length1 1166 /Length2 6816 /Length3 544 /Length 7627 /Filter /FlateDecode >> stream xÚíyeT[ëÖ.ZÜ] A‹(îŵ¸ X ^Ü )P …ÒâÅÝ¡hq/Z ÅZ¤w½tïoŸ}Ï>çþºÿî¸Éõ¾ó™ë™s>ï³ÆacÒ5à•Ãl!*07$¯P  uµõD€Ü4yõ!ž€û 0—ÍŠtü|(Â! $æ¦BÞㆎž- %€bÂ÷kàã¿ap €.ê óèB¸ ÔíR‚ÙyºBÜžîî.PX‚€yÂí  €ý}gÿY s÷…C‘#}cNnnž¿#âââ[ß¿€up°ß/¼ .0÷ß•î)T!nø}Óàß¹ºö e0ù{\‡#é.ÁÏïn‚ÜÇøö|n$?ç}£Ên`E˜ëoîoÍ” pˆÝýP¾üÿÔÍÙ æíæÿa{¨ø‘ÀžîüFnPOÈ¥ÿI¾áþs€ Â@A 8Pñ@|ìù—4ôu‡ü üƒÜÀþî0w€=È €ÚCî/¸þ€„{Büÿwàßw¸0Ô °…8ÜÃßì÷aˆýŸ{-õ˜ù€@ð÷÷_+ËûÃÜ\|ÿN×¹BüêfOu4t¸ÿ9û¿²`÷”¼¢B^A1á{§Ü3Š ?þ'ã¿´øK‡?¢º èÿô ü›ò‰›= þç8÷:þ5’ޏ÷&€ãsþ_†„ÚA[Ç( ¼wÍýEà¿Zêßðÿj¬ÖPñtqùCŽ?åÜëh~+â‚ÿG:Èêâû_nøg¢1äO÷ÿxž A.P;y7—ÉE¨@} `](ÒÎñO»ü¥2øç¢ C@?É^a`†ŽP;g7q@7ð?J*»ÙÁÀP7€òÞ• 8ø_ß°'~/Ïtï_{{è}ƒˆÄw~f'îTÞz^)OçÍû}ôq·ˆÑé'£nœ êZ—6µsPö‰Ø«·JºCŽ2åæèZ訑‰tÊq¢ÞÎâ m|X¤d¤hjÑ´;|5RÚøûØãÀnÚ—/¨ÓÞm)úöªí1•œš²É(ŽDÂ(‚ž›mlzè< c(É-ÃÑٜ᧼ ÝÕQs Ô“x05ðQ 蕆§Þ^?qñHÝ ¯~猬¬Ôfz¦G@8h*RY½oKgZ$*ñq¤]ðÒ±¸Åþ²rÀ=WXý±¥ûϧ\@lý¬ãFÝ‹ùVnç@’ÉŸ>Ä9âÁHiR×úË¥XÈáÁçís½xòFúîDûëšÌƵeÓÓº§ Ýê^ä“—k´Œ:bÁµñÖŒn”Mz´+†B gFm‡Æò/׺¿êÇBëšÚ¤||.¡eº$9ûüÆX›°Á ö¤Ï]FÉ#r]}/ÕŠ•Ø·^²åëÍð¡L1#Ç]óvÃ.ŸƒµaU [¡M™Ï•Ùc¿óãÔ%ù¾ë ÅûL=ç¯OVl+Þ T;ݰÎí0–¶äBBqxF¼Œ$1žäã`!·á ¤RD|Iþé߸EzÐ'.Þ…‹¥j œ¿Á/1[À¦Øì§GµQ@t |žüU|8G8gO1DTh$æyY”½QÇ&IEšõÏ´EÆ4RØ2rö‚Ê’sšŠ¢±i&ñM×å"蛲¢û£®mo²‚žŸh›wÏÑZ·ºCÓŸèzÍzšÓXà•…²m/ç 7+œIZ{ߎY7¾]^ý~ÈöüBÖDF›ßmZ90± ­’_oZã^¾ÂËQÇ…9؃֣øï$_)¨ ð}‘2à•¹zz·,)²`øV½7àƒ7?‚‹bÉÁR´+®ÏhmœÂÉÛÿ„œ„«e]”k(m6Ll%‚(qô»bmGÆÊ–¨Âvzãà0ÎuϤ©ÕΔʀÂnÉe@+Éhä[£vüÀÞbd`u9OÍ0ïÇ‘CüÕåЗ‚’"§†™ i-û_2‹úíê9å±# zÞ/»õ’‡ ýGŒ¥Áj_qÚƒ'ª°Kv¸Ê×PsµÕãö>úÞ¶yÌ›8óº-NžE•Ÿ‰>¡©(ÝËþ }N/ºR:é¼~.[.@Êœâ @¯£YBÂâBi¸L*°„]FˆhYùHSXæZ ±Üw’k“/Y£ï8œHjá©àT<Œ¿"“g0´ƒÐ †¦â HœEÚ»uÊ›Àãñrcì29– ·cÛmf¿ùöÕ-ncöwÏ\»SÐf•aÂð×hë„søÏ~>F{éwç¯k݈u~p¯ ˜ =éAÿT”çÉ(¹‘а9¥'Ûž6N–gUwbäÅހͧùøB)ËuæüÝ!„Õ ØÃé6./=ö×íx·q‘w°u!Úi¤~^óÖ)F@]ɹ :Oö…›ú·ŒÄ‹»Ë˜‰™°Lÿ“S~Ä,š‚ eœ7AæE¢IŽÄË:0àº+ψþ”jšjA¢Ôw¾ÅŽ2Þ\ô¨¤3,_ŒauLå¶Ï[\ÑO_ת^Y—ûµaàË.ËÈýO‰³WYzË™ŸZ—€óï¿>¶î©‹^Hª¦m³V§æ`qnµ;xh=ªåǓٳ4ÆêzÝ2³.§|(q8ü"Ö–!KÐÃKx ¯“žÉ~8³÷—Yü“~¡ù-ÆRUrv¿ö7]wQR6wßêFÖøì“B¸uŒáâq*IqÓ êíÍß—×wŒ÷B¦½=Xc2E¥ÀÔ„Ád[ÌO雬•Ò»˜ö¶Ô‘ï…ÎP[XÖÕâK‹Õˆp/é ü@i“_Ã{:—À[[œsåÓ3Òç;¹1 ‹¾œï•ª*Ëf«QÈŒ BnL Ñt–‘gsyD=4®åîWfÓÂÉzoÿíŰ¥@ºa¶Èx6úå%ñ8±w­Q;ÿKTkØ®¬?‰4³äaz0‰jýèö¯óÖe‰xaÙS†„:È‚“óæä)¦5[ÉV¤Ä8Ý3gMƒòæ¦2F—æüžRÏ¡]ô+Bë3•³R£/£SZ8ã®YïÚ¶»GŽdúCé ꜄ám'Ÿ\DÆ{Áš2ÛDÄ1cxðfÇÐ5iZ^õ‚&{ßëâE€}B¨+ô}k8zfM–Ò@é$ÜÖI²ž: “}÷rh§Nw°å&ù« (;¸õÖZ«éLnÁi"÷&­¾ï[渪­ê>ÚµrùÄXíë òþùcvÇ%ÕúhVzGü^ŠcP2ÿ †P«ë'Dê½¼CáG‚W¨›Í`—Ÿu宾§ºÑFgcÏmÙÝ×·£Ü·!üt_;zs ¢ý w\Û;Zãn¼ÞãA™šaU:£›ÐÕjáÂN›?Ø8º×º)*dòm+ùt#_9¡‘j„£ò»_^RÖnÖpví¯&hŽ·8*3€Ç\Ä»€E×ïEñ+œ,CÚbÐ'Ysâ±¢ 2}䯯÷-—÷À`Më…œÁ²EB}¬OÊ’;ëÔCZn×$'PâbÚ* ‡¸ ¿±®Ú°WlãX× é5ù|)B~Ã%uëUwÐI8%›ÿ¹ÛlxR7ýúf™] «¹¨e_뱟\º’m@6Ëë÷‘õÎ(=ÌԪ̥kÔž¸ Úí‡aqµA$;gÇI%”ŒÓ¢Ûä·žâ*ËÝøTn±VÑK÷'ǽ#0?ü2%7èÍa4C&š}|äqîãúIµ6Æøþ¡Ê”¦ŸïˉæTàR«ŽÚ¯|By2Ï®óÑé×â}í.Ÿµ¼yCʰëò ‘À¨™º´YzãÃ¥òÎ\fÝd‹s0†Êz`®ÜÐ>+¬ñ'w5÷á7HÝùä±(؃­|£gSÄq¸¤ŸPV<\ka“Ac˜®YÙÊç­l¿ûæ1 —ÜcáÓ‘ìÝ€®®|a˜öÏA^T_D `±½S¯Ò0¤¢ð$øuC«qÕêÑ.ÄõF5­ÓR•G™jK:’¥šaSÂR–9Žgpî$<3i™c÷ݶ4)VyMè;~»3ìøì»z©Æ3õs®†Ð¶$tÙÚoO$L„RB,¡ÄRÙí„opD‘óß3 /»IëBϣ륙â©ÞÒ܉&·ø£}Ýý"iù®š¬2ü3 CxŸÎ•“"™ K«ÀYtl®·é…žÝé©©UÅRÜSݲ‰¶ìÜ˦¡—ãj`l“ý 9~–e]¼£4aÌ|_ôÐÓça„ø¶…¶¢Y²VÑÚoLèš’>˜ªbÓnóñ¤ 3k »9;Wy¥Zb°2†…ÙïÊj²:9¬ø²G%_{C'!fš/¤£´ ðü:m™‚,.Mòå3Z*ª“?ÎÎ6“iåIQµ‡åx…>«Š^µ `¥¥E/÷–ü<éø1AÄÚëÍðÛ‰aºûÛ·tȇÕ6'ž£’Îcþ¼fFæ;<ßø£c—¦‡t:Q7€lÐ"ÔoKÜØ%ÓPíâ¼Ô¾ø×1;-'µwéGæ>yºÛ¤v¹PEß”Ö,¾Ýxšãm¢Èw°ÒqäNó:zrûkËÍ£¸tŸÌ\“Ä’ÀÆq´ç*qÂé¯ÔDr ¹\ ñ¢\G“ÍⲨ¦Š&1áÏ­YPKæ¹GBsÀ†¯1ÿœ —A»{¶6‰"¹|€$æõ»$ÔU«v©´–ŸþH”|ÆÉñuùŒ–›Xb£#λËF‚Ûö˜¥÷slËæÜËãb £_1J§“Þ §^£Ükþ;RÏû"]Œ—ޝ© H×Zf* %Ñhî±Bw™óº1¯º~¼°*2ûf=º„USk¶tKÙýkÙ]ì„8aþŠ€øî•‡ƒÝ4œ’æ$Ñ2Úû:¾ùnqÉ?£XèNå²T+ý~S:‡òLXØÊ¿zìë Iå|2:Þ†Ó;t)Çžª3Á8ò3ƒïØØo ˆ7‰Ù«µ1Yt´ó!‡3Ű$M|Ž>4œÄÕ'l‹¼–´Óٚö4rÙ3O ¶JÄ%Å{…n¸=Øœö´Óå?P†cj?ÃP˜ñ2ßpµÁ…e……gŒ|“—m"ޱIQã£ë0œ±./KyJÂ?vvâ2é«Q›¤Á«5WNKõÅü6=S{» tÊ«‚2v•saÁá§ï+ïRØï¨Lpw½¿ù=š0ï}¢ßÝê>axT/Ê%ø"ºcÏþ¤³K?îåøkïG¦Å ážR/ ݨÀìÉö ܦLØZײ?&—Bþ.›Œ{^f®Ê[—pÈ7gÄ;ªÌt¶^ݺ>“ÄÕH…œÖZyÕpŠîàë ®G56øa¶¡Ëþ´ÐXQ1Ug zFae[–ŠÒ¸d+mˆg†²u5ßõÚ“€†/Š9MBÈ6^U^ù*Û§ëGˆ˜G ‘눤e]¾u£YÐǬ¾:u9¦óÙ#}|îRev‡>ÅÄ1  ¯Uè*}S˱—{Û…Àpr¸æ|¢Ò!œ­ ÿ‚!áésF„a“¾›;‡WGáâü¨TT…k'AÂúñ‚]êï!]¢ ,*Ú·äoã»2xN©ñ©ƒœ4ä`ïqûpÐb}'RúNkët¸³àA=AÓ´§ ¤-NÈùž‰gÂÑjÍüKc*Ec›ŠÝÔ°X˜z3?9o¢k‰—ò8(×mƒFÌò|{_ÈÀ†!·¡”8úyú¼2*†1Õ n>Ò«ÈiÔÖ‰f¨ êU.§zØö/_T!æœ×/7y¸íxœxȨ0¨m+²Ÿ=xÇ›ólt¾úE)„”¸çÊzü†ÅÉ1þ‰z”h%» wg”§Ä”?$ÜGÈ  ´év]š»IEõ÷4mbiƒðøPb§&xºM$qE­a£²áË!˜[¥úˆ±xƒex-ÏŸÏâ¸L¶ûÜä­úêÔ!N¼ñSËñn ýÏðlõŽ+®î•ø_cÑ©›by¦ÔúºGGXü–»’\Õ£?»>}ó±F{{eÌ’A+‡Á]È?*=W¢ùê;c³Qô,þëë±Ã*ÐÿËË/cö8À'"YFz«l~“4=—Óf¼Nb|t˜€ÃÏ-}[16­YΡ{¹ç‰7Üó]ñ½œ,GÝÛG=·ÕNE©Þ¤Ê;9°‡OèíàÀÊΓ㒘¬˜q.snSxÊ'ð}ôS•n«x5'Ù7Ƹ\QÕì0›ÙˆnÙ=_;}VSVWл],EšSŽúMá Ù'õ|õºñ_ú8°1FBèºsÓžD \2û¶kàüHnA¼È3dÍÖœbµ¾ð3#]o zôi˜Âãéh† hZ9ÖUKÞŠ5ÀlïÎjŒEÕwä'ce¥–fóÉ~lôKzzPø7%wè"í'eÇ è`®õ%¢ìbÑã®ÇäÁ«ŸgyW2¼Ò•m+ž†l, ÞzÔˆ–Ü–jäž]j:’÷¿Yq„éê­^ŒTåJue1Ê~’æHZ¦WªðP}Ú¹'‚",pè‡Æ¼G1¥`”øN®B[(û¨PQ/BzÉ®ž‰ŒcUTßc4žèÛOZ\5yÁBp(C|iMgÁJ–9e-ù™’¡\ØO2Ûö[oy’—’TX‡»`…­ 0¸2¨ÔôP‚ñ.!ç¦fEÆ,ÁÎÌ®˜Ï䨡dÈÃ5~ÒTÖár[Õ}¹GÍ&ãrr.¼8nBáÎ Úù>1ÄxKeJPßÃgž»Ný)êóÜÕæOŒzç[þÝÃÝý¯¦X¯Äµ,Ñ.tGe9{¥”.!Ñ×~„”þà@,´X6¶–Tý‹ó®”`®¾tÒÙeèþ [‚ç<ßFÍëÅOß“+¹áâ‚SQ}^=ÅÒ¦¸>ç•-¯Å¢5¥Yœ -y\¬ÐÕÆ¢M"õ:‘³%“ïgH.Yg|„FÚ;Ò.Øìý{¾>.CÜáP^áàt%¾lñIöÖ;K¬<ñ"L"š4•’»Û_öçÏÚZi%/ðOïÈôŽc45ô3œÏøs­×í±C¼JuÈ/-2:ê|q¿®¾aØÇ? ˜uý²ï^é}éÄ‚;ÊÓH4ó ëpò.6CÀÉøøP×^€™ý:ʲ¯¤Ž|^½õ1,AÏœg‰>uWÛ]XqŒe›3ÀL#Gœå ¿±÷:u½æ3Ä¢LH¹`¾ƒáÆT´ãÂ|¢w Ê&—çA^òž¯‘sCJ™Äã×Z‡~u'>WeVø€ƒ7¿êy/Á±‰§+ øËLQ!i xOÈIž57í©ª'¡Meº±!¢ ϱû©Û€þ¡º!Q‡ÒµºßR¢ãÙÙigÊÁ£Ï‡'âSîÒ˜]>ëä!1sƒÎùöùCûwD¦ ãÔÊ÷Hð ñûzóž9*ÐRǧ¨4]Õ¥g)Ç´\YsVVë&Ý”å]Ánæx#žÊ/ò+wË솶·,6?;A˜ eË9‹à•—*Ûá8ƼŠÌWÙcôߤ?Ï‘g;)<™¨{lÓººÔÌ‹OýŒ¿sh³G¹àu«.gVÕ+¢›t“ŒùSë÷VÝÏ ‘L5sXR¯íÇXóòFðdÚ‰ë]ù±í¯Û™ƒ§QlA3Žoýb·X§5œ+Ék~v”gìqPÃCŠt^¨%'?ÜÐæ·ð¦ ^ÍÀJN?fkzŸ¬.¾ ¿(ŒÕwíè[^›ëÛJ£Ì¯Sù]í¿ÐW0Š‘[ÁËoí&gPóuüSÝàÕàúj,$;À.½E¬|ãVš¾£íÔ”™Äœüò}?ª®\³o‡'Í:Œ$„#Ý&ÔwPsNQ<ÒÞµ-XG¦·ôöÞyêR˜‰ï®(ËŽ<#ц¹÷‘#â–ÊÛ3&CÛ_o œ†GìÖºßXN¥û¼ÊùÆ!"¤*vƪ1Îsö¾¥æ‰c@š~WÒaǤSö¹1qÕ[öá—“óå’³×­LØÐ¤äHg3›7 F)H]c_Ip€™ÆõÜye YÝv}¿«MPÓ} mLv.‘_kè!£Ë÷ká·aç!ÍĨxcè”,{Á–­Fdµ"×Òðà¤5=Ê·Ú¯Öò«Ì²TñŸúf¼t¦î©s…`Pc€ˆ„Vn®Oc*8‰P - T1ß.­Tµæ•¿ô ¯UþNˆl$²Ø ÈSŠ ö«Œ Q»à²bPÛaþy* gbdx¤îHÎe„[—0êsÚ~Wãýø«Ë ½÷ËW›‘8“/žÇŠ%¹óÊ69!êp{8±QéUcjØp½ÚiéiKì°<Ò¯Ä=?¯,d§|ºüç2Uÿ•ºÙs ·Õ’§^¾š8îšáJ° Z£A«Êçû}sy¨þEÌ*“w>kÂ.Å›2ó6û#¦ñ%Óð<?æ"«Ï&¿ÈòÀÀ&ÅÀ¦Êצ¨¢‡£Ê6*]¦UTÔ–±-œrÑþ§æ˜NbGHÀ4© Š‚ºy)ÃkÌ‹Á7X®xHûpÓ”Á#ÔEüñÉÜ.TëäBsZâxÁjuӕͨ1Î/~á§ \ÇK÷@Ÿ#Lƒ53m&©?x'¤¤ Ú¬J1ñ¾ª.yæÕ°®®Ë¤x•CsÛ1669u#çóõ²¿éãH•‰Jâ@AcºíàÑ“tî"Q•ðý€åçäù—:öící'Ìfï (ŒD­âNDõ4â¼ €õ‘ ‹ÆA²ÆM»Ë„P¥ 3 jFM5pÍÂ!„¥•T.£A¸IBt„$Ï#€Ž •žFÓ« dN.3tç Xà”TØË±Næ×îŒ:L#zQ½Žõî‚…¢9Ôp\埽|­98ÚúaÍ$ný½§èa Wv¹?ã/g³ktÏ_¹IÜ=´÷ù ®ujD1Å|åÐ0u»hWJÈ(Ôçמ:!dXþ–í³ñë +¹Jn[UœêJ)[”ÿÀñ§®/iÚŸOž»(Ð’d¦>ncõP8$ £q}e ü¿üàþ‚ÿ'ì\ 8æ ‚;ãúÃ!$ þûuÜÿ˜þ"Ôendstream endobj 158 0 obj << /Type /Font /Subtype /Type1 /Encoding 326 0 R /FirstChar 2 /LastChar 121 /Widths 327 0 R /BaseFont /JZVOKO+NimbusSanL-Regu /FontDescriptor 156 0 R >> endobj 156 0 obj << /Ascent 712 /CapHeight 712 /Descent -213 /FontName /JZVOKO+NimbusSanL-Regu /ItalicAngle 0 /StemV 85 /XHeight 523 /FontBBox [-174 -285 1001 953] /Flags 4 /CharSet (/fi/parenleft/parenright/comma/hyphen/period/slash/zero/one/two/three/four/seven/B/D/F/G/I/N/P/S/U/a/b/c/d/e/f/g/h/i/k/l/m/n/o/p/r/s/t/u/v/w/y) /FontFile 157 0 R >> endobj 327 0 obj [500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 333 333 0 0 278 333 278 278 556 556 556 556 556 0 0 556 0 0 0 0 0 0 0 0 0 0 667 0 722 0 611 778 0 278 0 0 0 0 722 0 667 0 0 667 0 722 0 0 0 0 0 0 0 0 0 0 0 556 556 500 556 556 278 556 556 222 0 500 222 833 556 556 556 0 333 500 278 556 500 722 0 500 ] endobj 138 0 obj << /Length1 1606 /Length2 10164 /Length3 532 /Length 11017 /Filter /FlateDecode >> stream xÚíwePœ]—-w'8»kÐàÜ]»‘tãîî$8‚‡àî.àNp‡Ü.ïûÍÌ7õÝù53¿nݧê©zÎÞû¬½ö^ûœê¦£RÓd“:Z€dÁP6.vN!€Š­ƒ…+DÙ¬Ä&éh¼ùPéè¤\@æP[G°´9$ÐÒ K77€ëÝ»w¨t)G'O[k(€Q[C—‰……õŸ–¿BžÿîyÝ ±µè_?Ü@öŽN 0ô⿽Q@m@+[{@JUM_AEÀ(§¢ A.æö5W {[K€’­% 1¬]öÿX,Á@Û¿Jƒ°¿bI@æˆÈÒöuÈÃäô—‹àrq°…@^¿¶€µ‹9úÚ¨#Àliï ü‹À«ÝÊñoBN.ޝ¯¾W05Gbébë¼fU“–ýO¨9ô¯ÜÛW7ÀÑê5èhéúWIû^a^½Ps[0y@ÿÊem!Nö枯¹_Áœ\lÿ¦á ±[ÿ“+Àdmî´A ¯0¯ØuçŸuþSõæNNöžïvü;ê?8ØB! {+vT.îל–Ð×ÜÖ¶`TŽ¿Elåàâü‡èêôï>7Ëß bükf˜^I˜Áöž È •CÅúšÀøßS™ýOäÿ‰ÿWþ_‘÷&î¿jôŸñÿô<ÿ+´¬«½½Š¹ÃëüゼÞ0Ž%À_wÌÿkî`kïù_Dÿk .è ÿ+¨ùk$ÀÖ¯Rp²sþÃh ‘µõÕl¡–6+sû×ým×A.ö¶`Ы–·ÀÆÅÉù/>-;ð_Mçû‡ þ+óWyþæÍ¡£!¥-­Èò¯·éßQj¯ªCµ<^‰ý[ÊŽÀÿXü…!)éèðfãå°q ø¹‚\¾ÿE¶¿a¸þ¹V6‡ºØz _Kæäú»ð{ÿ¹2þ°¥#ð¯)Ñ„šƒ¯ƒõ†¿Ü–®..¯zþ}Ö_ þ÷õß#y€,Qç-…C>¦e¦C«ß~“6ìéâ‚u*þ®UPéØéŸ±ñ®Ìì±*”½nBè¹ÙsöÐéi[‘yg¨‹Ðž¡ó3è4Ì—†©;g•¾U€e'ˆÃ¤#ýH7ÆûlFiÞ€ŸSggsL]äè‘|¢•Çùì†)€Æ-?ŸöÚ ÓÏ2µ6ž  »·úëá}òþÍ5Cßðà@çB÷6)KN< °<}t€s©¸v™w$óìnÆÈ˜=áû#NëÎÁ?„üË\«eî¾§oï«’k¢ :ªP¹Û¹xu'Ouô%µþ ¬³¢o§ú]Ñú„/—|æªxhJ¶Äƒ½/ê‘›Fˆn5W=«à›Ý EíÝ»ŽÙ(ÞDÁ–” ã i:‹TyÊJÑ9pÒf´ÇW{œ¶PǾ¨t£ÅöìèNWþ™­/‹ Ú:{Ge}ˆ“>MVä³zѬKOú“Ýó¹¨MNÛ½ÿ:$X¦m'öJJ#P—y÷»°¦™_Çî­ÅÌ Få¶Ìxç´Þ ›!žž±9èNE`ÍsŒ¾¯`æ]UŸŠ}*ÔÆº úKNoUœ¬]Åo-²¼+Â0s¾ü¼TÃUsÊÓ¬+ÄNlÞ8ÐR@é#¶‡ô†D±¦«“‹á-|žOê#ò;yÜêxlŒú¦îhòî'hµ?­%ÂJMxCÔQL޶(ÊÇ•ÁÒ/¶þ|Šyë ß´üž»GgmFÓÓ=¯*ªJT–N €SZd,±=‘Ÿ?KêNFÖ mࢉ<÷äK­Ð95›í;Ϫ®;HÛݳ"&¹9äùa,Ž©iá—žóy¶J/Ú Ôç®``þ”ž^2 u¶÷ÇžˆuV>Nè)í¤à¡2<‚ËÈ?-^y~dŸK+=_¹.k©ëdJk”ÁÇËI¹b¶8-^vùÇØ¼¢'ý¶pºTy,=¢py4\éÅôò0õ¡¡wd¸Î½Gð%ƒxA»xâ*Ëh¤Ú¼ó Œ¹š Bâ3£ŽtTóAxi*˜oý² f"(…©–aqhúÆŸÆ &f¨•’|¹‹ƒ÷l| ã1Oú!JTWŸîVŸ}\ªïEÛß–v6/d?nºn¦¯/ÄÒV̿Ħõ¾+ٯà >ÃA ]¤!-Ý·ýÓ¥Bbvã–í‹â· /hŒÕ —¢…hXëª%¿ D¸k/É™´DUHÙ¹ºÇÀGjŠ‹ÏBÍ´C:ªÜÊÇo†R(SÝñZÃ[y‘VÜÕö f¡ýÁ­ }û¢W¿º‡)â™ 1šâû€+¶ð8»ø46p à´dC^U¨×áð;Hœ„ÌwúfNÓt¾÷d|UÿSÑ.^u¿u𨠷éÉ d ¡£ˆ#äI»ã°=³ÂGƒ?rtºÆ®FÓ”¹?–ˆ#Ô´ãœ7æµ8’%3ËŠ•ûUƒb˜e-8h@qô‰&=cLΡƒU>Eü½ ¬è›ž#Ó–®^­ Ì."<­Þ)mËgêÞ ‘`x¢PÑëÉ#m^rñqRÍM ÁoâšÓgæ™´ƒb’ÒxaøGùæSÑ5ù`%ê7EŸ< †Æ¨öŠVÔjãÎåtvF}8§íH‘™®Æå8ôF7d†Cþmª„ŸUì¥ñ¸êc:–òQŸd ;.=ó.žM$Úow\8ƒÊ`A›e[­ûûxªþÉ_«]sD\L#yù¨ß £½‡ (Ä}–$åÔª‚ÌW¤(ÖîÛ1ê–•Ú™5©;Û~ÎIƦ˜™\3rS<Ël〼€ø|ÚVö± _ÓG瓞µ/ WxˆÜ,ꉾþùö¨ÝmÏ× * µæöŸ“—¶ë™ò™?êÕꡯÀ¾!´°-ûø‡ÐŽúŠU8©çKü5<¬›Á…mþ½Ò ¿#r!.`DÔC ~’hã£>¥îaSÍAõÇ”xÙ¹M×þ†+óô1¢–žw†ùŒfÓœšúý9üŽì½ýà ÄÂŒªJß…ÇŽc»5DBåp¯nh ¼z k`ëVç1ˆ\°*zróíFcP¢FìãHR®WÞ0iUCCœŸöš‚FVt´idæãkmñ.ì0zfú¿Š8&ZÕÁ@pïó?¿äÒþˆSã“y*JV§ZQs̸ñ¨+)ÿý©s'‘|êl;»ñžF§;ƒH§¹öLòéTøàMªí7ÿ]àB´ÎîÝD¥ùC“Zoš€W´øb%¾šÈËãÎØ¹D.£{£™Zµó7 äÍ~¤ÌèïwHÈó…Ç+VS¦ÞXñ£g¥´G®WÔ;#' ðÔ’:O~Cæ>B4‡:Ÿ§×Ȉ>ìgƒŠ©YFøHLAnEÆš 7Œýy)8ëÕÑZUõ¯Ôíá)߯H(uy[|f!tõ_•zïB`c‡Aü fÒIsÏÜ–FzŸaâ¯}ÁÓT°ä0BÊfé“‹šš- ¡«Ãƒ†²F…Û7Ï#zs[Ø~Qb~@Ó~ì{í8‘¹&†’eÊ^Y‡N£]Æ7"ŸSŒ§±R^Ì8ÁK2ßéGÓeJUãÍÇܶ«ç[bÜø•n¤2[{å™ÎêÌÞ§þ8\•xùtèdÊÿ@ÇÇ÷ ö]=åGé#Ù©ž‡Ÿõ0&ú(m œ.ì[nn †pµ`oæ ý5,¶Zÿú7®’Ê ´§%a˜;|p1q`_p¼ÈèÊ3è.îkYöæ¢è¶g±?sŠÒ+.Ê.Ô–«BéÓ‰= ïAš ç“â°þ¨Ž“½ îÀ±ú7Š~‰ÙWÊÙ[ë!Š^AºeŸéŒÂŠÄ½~'µ—n¬r}Ù.“× z—aÏ%9£CæXûâÝ^kF+Nótü@çå) ÛæÚ1sy‰ä=YÚ*J=a+ß/“œ^µÏH?ŠÒ¾œh¬"ˆ’±(ÏÓq«{ðÈôóø|ÍÆ‚/°eÉbF¢ÐL´â¥$¶a0 n¶V'ù(á€@Î }£?êwI:´Ø²k»fKªH¡ÇߥŒôßÜß»«j\R æLwÑ¡^lÅHZz xù¢5æh ŸÞ¬'Þ£»Û™š1ŠÏ‚í€QR¡ ²ž‘h6rh†Ã‡*ÅÐj}ãðž«ç…±5æ³5÷žÊ¼Y‹Çæ,¹n’¡½Ë‹ºhƒÄf_í##­Àcu˜XC×‹ÌøÃM(þraBCš›Ç{tájnè|ÜõÎÁÛ2aÂǤ&1ešðØ\èS­p¬ç«ßüç{5ˆ’bäµÔ=¿.í…¢ZBÇË~´S. ûž\­…ñ‰1³jE•‰Ö5LáÇ‹-'4¤bô“ԨקhÄâúãBhGô¹)i²ã1‰É¢,oÑcGº>{Pq:ÈDô´¡žÿ¸-t’uŽM=7e Pô§3¬øYÁÅB©€>7Ö/°ß@rhåmnšà¥ù5¤ÇfµïylG¹eŸD"¼ˆŠQï~7Oƒó:™¹îqŠ{¹V·%:þÙ—Ð/1L´HvËÈ»¬ƒärµ²ãJað¹èVQÊ!Èg‹=V…è‹ÒŒ,N›÷ Q÷=¥)™úäÀGÝwóÀñí·j²öŽLt˜‰DŠ †¿@aú:Bz§ÁBIº£qþqÀ˜>|/vT`I'Ar­ú‚uè#¡FË·ÁIå?òX†e†?NCF–ÝÐÂ3¦‰d‹ö€½U¼¨¯„÷ ^[¡p{ñ °”†¹1ªˆÑÕ>DI¢DÐq†mQ© ÜCÝ´ðW¿uóÔ„Œ]öÃöÎt*>vÐä†4h¯¼=uiOSF2ŒÜM¹¬í,!†^…[dÃc äwçê<¬ü\ô_þ.ÿ h9Öóh¼ðÖ$Ü3zD”ÉÛ¬ùQ¦ºdv2L ¢TÍda\ÒßA‘V‚óóü˜ïS³Ü·KeL)a;䉗´“Ã1I¹º0¬²M` ¬ %ü“à®ÁI‘#é´éCßë¶!• a¢ #™Ñ€-VUö’|«*+ `¾)Û² „ùÁRuXç-”P¾¯Å²—›z'³¡ZmYʼn¡VK7@%Ò»@ÔÓÅ5#HZ øSÛM´kç–fâ ‹[·É»éu £niT2ÛM<¼«ùÅΓQ—¼Q±ðâ-’÷NI @ðÐò‰ÑÛžõC^Ù?÷oAoñI]ïÕ¯³µä"<ÔêJ©Ê%k„„­5¯tÁKGêL²{.;›ôXVé‹2EæI•c?0tâÏl{7«,u‰®=j¥‚–N™B""ùƒE4úßiá}æ3T6ªêv½´ò½bü—§…‡×±1uÄÁ#ØÒic)”W¢áŸõ>àdÈôókBåô¨‹>#rWl?!Ëze@zÚFCëË~V.t'òS÷µª}Ø×ä]㵫8€™%>ZQ)ZÖ2 Ìx± ¹±‘Å›)9õÀñ‘ËvqH“ˆdÅ„.wÐ(‰=ì.Y#?}ö2 ‰x¸¹Î€½¼É°ž‘'¼Àã5Tì@¨OÂkògiªxÀÙ´ßSP®²¼uËùÙŸ£C G©VjÄwÔc~íâ8/Þ~@¸ ¬¢#šëN «ûäm ÅcÔÁ,7˜Ëé\g€ÀsðÀ¢’ísip$Ÿ×yRFA;5ßÁäCE¦§.*aaXåÔ_ŸäE45àÅofB”… m¨ ž V§èékW~ÓU`@/}^TÅapl" ‡«¡<ˆîÐPò?ŸœßEw<@ÂÓ3OP‡¯E¤›¶Éä¯'z˜Óþ¸ZÄ ±eПdñ ²ô3êtÜåøóbpo1úBõoû9É—°#"a2 ƒæöÙxö ( L½já‰k™€–Dšä}‚½²Ìd]œÌƒûpÙŸÄŒƒ*=Âs»($>ˆ–烈ûè yß½šeÇg:ãDSÄ ¸úãÞºLbȳ¦°^.N8E À7L"A`tµ7êÝn–Sj5’êž ù´Œ­Q=È…ÛY´Î¸r"ÅÚz{ˆ¿µÒõ]««gò•œ†?dš‹¸A>óQ‚7X‚“¥òžZ#-±ÍqZ ;µG “ÅÄyÒ_/T|J‰ÔMuû6¬¾A7d,  qûðU¶Ç«¦Ðízí7®Ã«‚ÒÇÒÈÁøh ¾î/ü³Ú~1kv((†fX˜Å™"ŒfT~‚ Ðl ¡G~[%LÊ®”Q_S*¦üÂÃë¬êþ™p붸»9“ŒoÍÙÆD}¥õp#è‰rË¢h†‚xõ,(M‘Íf9=lÚhËžBøºú£ñÌ¿å=hÑ\ŒË•Il>‹ºê–ÔDƾg …†zyªèfO~b*ûõµÅ …Ë7ú–¸ôõÈ(åBÑhØ–V{¦G_)²\ãAÁælïóâoÏh!JÄÝóšsÓš\êûÎoA:î1£˜Ç|ü)Q¿ô çžø~žà­Ã §–eölx~É¢™¨1Ç6ïð&~²¾¢óFKçŠßJ¿hÈÞVZâ¯Ç ßë¾IM#vS#íA÷ ­c4÷Þ¢ŸWæ? å-%EEÛL%Yn×LAË¿‹Ÿô‰.½¹ÛGqzƒõ(}R(IIqÆyj4Õ€ e®ÑˆòÀ(ËýP¼=îI÷ù qf•=aã§h!§kxâ=7Þ®„ï…( Iõ' Ó¡€"¤uæN˜Ö’3¬SÖ·þíòåßXâ5x`JPî[WæÕ»O†y'$;ó°;œ-ÇU–… .ZçHOƒ-Q‘¼÷8dLÖzLÄŸÉL?ät°Íj>ÒÝϵ´Ü‰%2=#%ì*ï{&iÖD‘®švÑ©Ch¥Ñ⑚2NÐGSˆq#SQXB”]ðMnj`E¶üݬV<ÊøÊèØÓ½ &ŸåMøÚ¨§s]€Zƒ3)îÝíˆÊ1s²+ÍȦ}øv=]ĽXs=¶X Kb¿ç"ÓÇ¡uÂö™ÿ*h;[êÓ)ü´¦b#•éù½ÓWu.ájÍ…`ƒˆ_a¢&…HðÌy³P6Háh̃Áί×)eUëQ·óꆴNØZ Á&Ò7¤ÅùzO‹‘˜|ý3þ¬óï…1D)䜼Q½ÌΙ(¸0È‘ê\i[ëÙLEÙˆga[$ùñço]ª¸*Å.Ò9O´LÍ$*k6]ÊÉú^ÉÈ\þâšjE y—ÙŽS66ŠxdÀ€Nù‰Ñݸ=Ëd‹ï­X“ø4ͱ·EO)È2ßÐ×¹r‡ÊËvæG[(¢¸ç©[C¼%ãW°¥=YòL¦ÜruKÅ4å;\®uí‹< É;›üõš÷fËXíó2Í¥ö}óª¸SH8­J‡N Ïk¨^ü=Y}5 (¯¶²©¼Ô}ö ñH%cŸGŠeøîºµOªWý‘ýu²ï&‹¨y½ V“w‡+牜—ºŸ¿rÒ`™?3l³Ê8º¾°x,¾þšÙ±%¤2õb)|sÄÂ>òf°{ií:Iä …óšpJ»CjOPuØ×*Ët•*5Gdì…»rü©þÊSY¸ÂØor6’¯¦¢a/ÕÚž•Èkn(N,Z,Δzå&—Г±–VPÊZBßG–RAc«ÅfŒÔ}/ Ls°!E]Õ¶{Úníã]dl•{g•ƒ¤éôê éÉ,í¹Ýš¯jDžôé2&Ûo¡©š?ÅC47¡™x7ÖÜÔ0ŸÛuT²U›{M5¯J‚ Æ BSíÅ$’®‰œ„& ̆rÚWOØ •€™ÚÏð?¨šF)Å8p¸ýÂ:x8ÇILN§á®YBŒŸ#kƱßGGe“Ez7®Þa¡a7»Ö]*}›Ü3h`ŒÖ$Ÿw4ÄaÁàÐléŽÏ|4¹gçâ|í2;G<,ˆ‰~¬kQ¡›~yÖ¼ßǬF‰̦ 4ãª.Ï÷H[íH`L¿þöîå›îH¨ïœå½1¥°n{Ÿú%3lƒ€»RD›ïo3ßòæ'XDçéÉ=Øqà÷žnÀy¡_qÊÊ,Áþ JpjFÌ'¤’Û>`Z²ƒ‰ø"×Ά¨¶Žãë–ŠÚ7L 5Aš(¸|aR¥‘Í„àÌnýÈXž‰×§¶bB‡‡Ò®$a;¸ïᣂ9¼QÁÅû ÙÝ¥ÚøùVΙç%±80b–‡*±!‚o—žÀÙÁï$ÿ˜ê‹åˆr‡•½÷•ïæÃÔ;.é« w¢Tâuþæ>µaè•!å:Ñh‡úÖ³˜Qö^²Ñ‹X‡ös|^ ÁB©¤ëŸ…ÆQA— fS¹(Ë0·ñ‹E¡7ûF '3g‰ »²{³#é0Ôâ¤÷¢ÞÍ»fž˜/tÚ” ãt2ßËËúƒç™Æ¯{¤;á~)Çn{wõÙéíèKÑ¥“ø`*‡>ö–üÛöý:*wÝ}§³j‰¬Û(H…÷+Ì, zÌÞÅ%)ԲɸwaãK˜xïɾØ{ÕZˆè HˆÆÈ­^°ãgÂÕOÌ&Ù»PŽL‹Z2óô5·Ïˆºm';`À`}G$¾Z.ƒí"KãdmO÷i›ö+~×ðK -¡ ê¨Ù–+åæ/‚±Òtµ2çmƒÁ’Õ·™¼!†|o•’äÜŲʨ^”šèÔ0r)Šd¿êê°™º÷3üvˆÒcLEŒDÜ ëwè@&R1©¾Ž&¼*~‘4ɨÙ/`!ÄÞz±&ëìN4Šº»Ô?Ù V·Êz7nîHc‰ â$0c;½ìÌ“zŽîèòŒ‹œò×)Îδnˆ3bhŽžlH¹/ê;^.9OLDe]cë«_ÀÏ:ôg#TxïM±búTã´t.h'Û"uJ3D‘Çó@:SÙ¾!ˆ5£zŽœY L:Oå·©Ü£Œt?®SµFü­­þ.ÂØÞ –z¨l„5ÉI2úÐÁ±÷hÜJ]äêf1„µýMNüg˜¢’¦{ŠN@Zź¨êà™–F‡±›ŽŒ kq÷š ®Qoø”ÊêÒT“ÍÎ?¶?HëĤ’gØã‚+µK Od÷G}/nìYi§¸å井¿ÞG{`å{âb{\ê¾-3MhÐìk]Mnupomgþ±æ"xæÖíÌcèþmzÙ¢º­™ôü1(¿[§6´e¤êGDå(0à‚ŒQ@ŠÅŠkt™\<¥gEw×Q,Q¹*NÝÏ#ç*ÄÄàTú…ו'«‹·kXYO{O^'í›ÞÝQü½¤<®ßþ›ü³¤ÙÙ"x䈖‘ÙTã*fh©vÉÝâI«ÅSÍ'oñl~<7~œR ÑÉ3 )•¶–ÁlÖm@݈õæ9 é9i{CÑFÁ§a?øúÏQ’i†Ln`ÛK¡Üªrsu ¨Èíbbü"ähÓiÑ.ÜtT¡ ·Sìüª9Þ°Å»íÜU"àeMÌ–Ø|h‹Q´®ey¸%ÁLÄÚ)ª¦N‡u_¨œßnâ÷ëørûsémÖ(‡þФÔУÀ~'è{è“-ÒÚvkSÞMäB™ý¢œãß𮥑8Ñe¶æµé¥Dú,m5w'yÌK߀TÍaŸßb¬Fóú# >ôêè«BA‹ ªvÚæ›­G¹—#ïµ›¶.<ªêêgˆpö;œybfßÇk½Š@Ï—£ic1]ü ”€ ä“Vkì4b54j~ãÝ5BVG:LÃ"R2úÌ$Ò%êÕ ·—ýõWyj5½S©ÚB`¦ø7?˰OOJJ*>î9ýd‚ïý: s0?¾›¡]'ôž¯s”à÷k³g}oÈR»ô6­ŽÓŸÍl.³‚Þ¦˜Þýäev}Z6‚Œ°$úÚ´fRC œ?‹tÐPû ŽÄ2pØ2¸æëø°Ÿ®Ö!„ìpE#“ehW½:±G®ö®ö ©êí¼6Ó•2àSG+Ó$=QÏàý½˜¼ò±ü«7ÑpÒqøÓUÖÝLqÒ”mqœŽ3E¿mt\Ql©Ãºî-“ù»·ª\Ÿ¹0E åž Øö~LS[ÛáøD+q»òrémŒ8ôeVô³eyoŬ1k“œ¿mDrhÝKýp“ÙáÔ½)5¼çl‡J¤É`ñ­%ceÞN&>«)óÛOÿáV°d ¯W ¡B½Í>d¸3sa¿Jõy,k„1}¿“­ á†'FKÚ:r]P¯¶Gí'^û6ðö¢œVGÍš¦ä†¾ƒÔ;Øý2òQ?Ïv‡yFßlP´Nû=£å_鬜ODNÍjFáòNß!•W,ù6×›f®oˆ·¼›F‰‘ǃ“h\DÑééøÕ°µ!äRÕÙ?QÔ°ä“»¾4¼wYO(£UöµXÞ&ûW°ùäô˜­J<ˆÿq¯úIQH-ºÏ0ZïØ$×ì¨ÿ=E£Ò£÷®¿•½å;°P»®wä^›–HÁ7v)Jïa_»Å$Ñ”ÍFÏÁ:gCôd¦“°#?®?Ÿ}°eå£ð)ø‹Ž-uäšŠŽ­ý¥²ÕaL029nÔýÐÊÚ˜oa¬‡í•+<Ç'pÓlÞ”ÑH¸¸÷QŸŒý„.ÅAO8ÑA3a[v28ß»Åc^ÛìŸ2U ڜûÑ£eom4PÖ0‘nÿˆð%{3‰SWÆ3py2dlòrIZìãé—r3„‘æ$>®<¾@–_„W­,@3Ô¾”BnSÚÒ¤*Ì=ù‰,ªKó~Hæ”3ùÓëH†ð'[yÉdqÄ :… (¬­ÏÙsïF™Ó¤s‡ïèzr·¡ªœ ŸQ†2ŸK4¹·!w yy"̶á*µþ`Û{+h`85 ݓنž3µÖf»âÕ u[ܨãŠßïSmé©%UYØÈ Bw'¢ „xin¶b‘ÆM€_sÀ},Úd0ëñÇY6g‘‹Æö;tÃ5'*µÔ¨£9㉳0÷QØË×ýÐÕë=B×åÙ„Æá ¾> ÓÖÞ®ó@`2ÝK}y¥Ø™w…ÕŒ.ãSµ Óu‰PÚÆS“éCÍ€Ó7=™ÎHà`k´ØO´òÝaun1E*N…Ô/R´“DwŽqý[ÓB¹ñJ½ºôDZzÅenªbÈšŽãz‰uÈ`Ž3‰Ç"c˜•ʈvÖ÷I^ŒoøCÙåzŸÀ¹Ís3±ØûÓÞ¬OF»Þ¦°ÿüÈsð¢T\x“GÌþ#¸‡ ÆfŒ ÚÀÉ«n}´†mƒÏ–ø"*ddk‡¾²} 3Êö骙S¢ýû]†“Iƒ·àMÜA•Œ„Tý“í•ò‰xr“šl×{»Õ™©¡pé‡<¢|Wm[àë@îÊtê6­AJ­’„pÞªw¶Uº,wÍcéËÞh'u·33¡Ü©Ë”IV*ž  rŸKK—:¥µêC§Ël,KÛ—NÆÒù¨,‘;M\MÓ+éîç¶A›ÒÔáJ@Wkd×ec_Ð2æñ†ObxËjú\Ü{_ôÕ:§Cc ð ½ò.½¥&­.åsº¿[ÔÁ×;ЧÕ.-ßï„1€Zryùš~†âWKà"k±br qÔu®—ÉCR¥¢WÛj39­%ÉÁ vDÄÏß‘:C +ßi“òGÀ Ú G=é0iˆ¾Ô‘âÙFZ8åã ‡ÍvY¹4ÂÀ¤b3?ûX@@š[úé•©õ»(jf•|ž¾Oñð€Õ7”ƒ_£³®–§•9“¨êC6FÔì2RȨÂjNc—ŽÃ<®ždµUo¹G²Á,3å#§Šü¾ âúp¨µB†¹Àì\;•‚ÄGرXelŠû°ÙGÕx¶®+9J9ù¬ÛL’{î3CV¾ÕÓ%§0Y±«d‚â¡’„ ^îlÕãä’ÜŒþùÄ?ü® ·…(v½G¨‡`/ß'Ñžò£oúFºˆçJ·ÍdžaqæúæN‘÷+ 'ž4Æc fæ$¸ ‰Lë¯?®©v¦îÆSD°s~ˆÕŒÿÉf|§w8’„“j½²›Ô¬ xíÔŽÐw]%Â@ðYµ©i®¿šë¡ÔåŠøW¬Òè&bI˜sbÅIy-Óx åå€L·ðXÍ4ˆz¡—6‘ß³—óYŠº‡a7«ØýäÁ âÕƒ3ðdÎÅö{l=Ž´®³©£_Úé8¸ˆC»YüN7î±!Y®,–+J‹M£‡9Éÿh$ÃôØÃÀ‹Ô´—³œIx™¦Ç€Ûî[µ5¢^>‡Á‘b"ÄÎ'“ˆþ}ƒeH+ l›Bôe·ZþÑG…Ëæ ¿*l}À»õ1>NÉo9"ð³á÷2ÌÉí®Øî_@Њª¢ÏâkMŽd0‰5߸í3$·µ@ »Ø!OS¯õöþë<¦/¥ÅCN¨ß7ÚÏ&ÕÛ>èNy¾å>_L•³~ɦˆÆkUÄò[ó,&xßçN ß+á@»Äõõ< ⹌'¸…M­ôhùEÞIá‚hèÀð¤RkYõ¼ý!é6°_p^î ôÍ2Ö£Zø1ºÈìåc`¦ˆFÚà0F¤F]àJOÌ1xÏ{yI~ö®çú1)XwþKŽæLØGÇî]ÜÊȪ&2èçÿðAýÿÿOXÚƒÌ] Žæ.v¨ÿoË pendstream endobj 139 0 obj << /Type /Font /Subtype /Type1 /Encoding 326 0 R /FirstChar 45 /LastChar 122 /Widths 328 0 R /BaseFont /VRCUDJ+NimbusMonL-Bold /FontDescriptor 137 0 R >> endobj 137 0 obj << /Ascent 624 /CapHeight 552 /Descent -126 /FontName /VRCUDJ+NimbusMonL-Bold /ItalicAngle 0 /StemV 101 /XHeight 439 /FontBBox [-43 -278 681 871] /Flags 4 /CharSet (/hyphen/period/slash/zero/eight/a/b/c/d/e/f/g/h/i/k/l/m/n/o/p/q/r/s/t/u/v/w/x/z) /FontFile 138 0 R >> endobj 328 0 obj [600 600 600 600 0 0 0 0 0 0 0 600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 600 600 600 600 600 600 600 600 600 0 600 600 600 600 600 600 600 600 600 600 600 600 600 600 0 600 ] endobj 132 0 obj << /Length1 1612 /Length2 9844 /Length3 532 /Length 10699 /Filter /FlateDecode >> stream xÚíveP\]—.„àî¬qoÜ5¸Cp‡h¤Hð$XÐÜ!Xà®Á5¸'¸»×Ëû~3óM}wîŸ;óëÖ=U§êìµÖ~Ö³Ö³ö®ÃH«¥ÃùÚfV€AÝ9y€Ü¢ ˆ³•‡›: ªÆ© ¶ó<0eá`;•¹ƒE`€ØÀË àÁ`ÈÂ\¼à;{w‹ž¶+;;Ç?-…¬¼þÝó¼Ó b0=¼;Á\œÁP÷gˆÿë:`0ÀÝ °…8²šZFÊŠE =€" †ƒœZVNk€Ä u³lap€Ó?kÔòWinÀg¬×nÀÍl yÞö´»üå⸀áÎ7·çoÄ `AÝŸ{à@ ÖN6x¶ÛÂþ&ä‡=G8?ûžÁ´`nînÖpˆ‹;à9«–œÂ?xºÛƒÜÿÊíyv`¶Ï‘60k¿JúÛ÷ óìuA nw°§û_¹¬Àˆ›‹Èë9÷3˜ ò7 7ÔîŸ 8p°nãvs{†yÆþ«;ÿ¬ðŸª¹¸8yý½öwÔp€¸»l<¼Ï9­ÝŸsÛA \ Š2Ôàáþ‡ÝÆÃåß}oÁð¿Äò×̰>“ÙÀ N^°-—Ìý9%€åÿNeàÿœÈÿÿü?"ïOÜÕè?âÿîyþWh'' óóüã‚<ß00€à¯;Æ ÿßÂAÎ'¯ÿbÿ€ÿAòÿ€£ìznÆk¨Ý³ Ü@î!n O°ÄÝÚ` rzîÔßv=¨ ý»™NnîñéÚC¬¡µ^à.0Ôæ_É?‹ô7u.eyeõ×Fìÿz§þ¥õ¬½»®—Ë3±+Efó‹¿0dd`žÎçÈÉË'|N(ÌÃã÷_dû†çŸku;â 0y.™›çïÂÿíýçÊì_`ä¡Ö0›¿fEǵy¯ÿ0üå¶ö€ÃŸUýûÄ?üïë¿ ö[cüšY‹9$§¥¸WfõÉ™t¶ó õ»Tëæå|(ƒµ½O]ùny_ ¬}lôšÞsyØPaÛìo'qbnKeSúѳväà/25 ±op™`§ìDúO©-¿4äÖß\z£mþí…j¤™Žv|ÅúþmÎ"†K뤪h⼂ŠÜ½}¦¸«Kæî¾Þž¶SäŽ öÌhtF±·/±™">¸fRHë}÷ cEI©Å¢8m:~¤1øácþ•‘áC¸³Ú­–]öoh“Ú}f߸©¡=báe„Èú¡;w@{Û1òºÉÎ-8cG÷l¼Áh…‡±“×V/ž¢†!úºŠoøýSsµØýŽôöéÔL$Rv*¹2+(ô{R;ß‚cnFg‚Cª}ÚjØëg¸ìb NÊØ—·ÏR$"_Ƶ~¨-Ux;•¢ÜuLÇ`ý‘áNE&*MÃüÒŠ-¯)‘ß²#ç mC ±~(˜KšÝí •O©F¢í=(cv´nø0ÞŽG,úÔô´ä7B9s±’ù:¾7hMc*Xð#dZ °VÇɱ,÷C(×jò>Tƒ7ˆÚq•…4n÷Xïí@ë×ܺ‰ÅÒb 2X’^ÐÈR[¥Y)üV%•}JWº¬VG©ÄÇOtˆ Œø!ÉNH"@²ßúµä)Ï6±4Fœ_±¶ új ¼=T©¦Ž<'ÔKÎÉêJ¨åkú>šZ ÌÂûWÎr¹…˜Kß}?Üå|& ˆØf²Ôšt úÙ¶çÐÑyàm¢Ñ–•oŸ>Q2– šäÉë´åRôAÌýªrÕãNìyô .®"é[y—lß>d–Ù…™sË‘a×6™åޱ€X±À†|ó §½þ\,Äê?üúüèÇʳ©ÄK¢ºþ$…C?$¹BÌw6º ¯t*PƒìÙÉ»¼’‚:DTÞ'Ü2ádK(¯ó4Íñ¶Èš¿ö!vm°ß|¤å$YJ=| dJ¼ÄV¥éQ¡ò;eŒB¿«ÿuîÉ7ì;¿pÁc¥§þ^[;§ƒ°bº6M@bîðŽ† >µ7™ÏP댥ô)}cºó#Lq­È€Ú©ÁtœÝ­§¤«¬32$óÅóÙŽ·Eðõ)›˜øóô•SJ ’¨ÆôKZÕL4erüÃÌkñ¾µÄ˜˜Éž›«{ ‘ı¾èÁ`\ }dß°W$—D®@¢ j†¸›ÅvQ¶Î«Ï1Ã-ûSk™ }ã¼:9`*È–qª1%J{ZÃ7–¡}¼y#àP³¹eü0ûê4‰0`28§\$vc®ßºÉ7½ÚÂj<øäÍyÁ£Ðy†OªklÛÆÇ¢EõˆO£5Å’RhRÙšFñ¹ýv65]o{‚d`:4*Ré*^‡‚u¢™Èsç­„<‘$"V:Ã?Ó‚Ì[ß•®¥æêÏ:JäÌ o¥¥Ÿ0²ØõSЙjc9kÁ±m€µ@3a‰®%~=G›Ó†SC ΢¹¶´ ùÄô¨ÈQ  ¸æîKå0¥ÞÞÙjŽ2h#õ+` 'Ôÿ0ÛÒ=$6k2çF±n;­|ÌRÙ q%{ßͥҽСà+|Ù¶4üfÉwg}Þ~¬²ÑËÜŠûÃ.èÔ%A|N¸µ’ó®KÓ;Å<—ºÈ…"<"JÑÅ ­csö]ÜšT-±_XÚKtŸQ¯PúdýPá%ÒÎÌKanUhÙç»Üu^Ú³1Ú7ûå­°sl¼‘ÀÂn+YýçID* à+².kú'n>Ó®Õ'l=–ìðÒzÏ@7K¾ôÏY gŸ—ù†àM”N#SyÑÌCä¹´nu³fìMýá4ª=M/Ó𦫑Ny\ Íxj™èÇœ’è³×Ÿ¸g3Ï–N^]gA­64Êû‡–%£| }fï&Æö…ubí;Íwâq!M°ÃO'³C憣6kš¯"ˆ™ÌkmæôEù„×ÊrmÑJWû‰±¼<äÂ&àLAÑI%í£š¬]<]îÈc ¹ ­u] 3Q(I„O¿1³”ïoE­òÐbKÍϯ¡“±À#W-<Q…½«ØðV<]Äïl­âŒÓ9·‘"l× NÑ»£²Ÿ„³—ó²?°°õׯœ5¼Ó¿Œ{SUÿ cûâÆ)Ç=æR¨ï* Õ61˜Es+o=]cCuã»áÊ;½m§vߟ¢*.ñtˆÌî/vD¿–£S¦…hH<·n¹Poõµµ…'ãøºÔl¶R‡×ßÊîd˜ì-œë-×fêà¿o•b.ºDòo5$äN2ÈÆ½ÀW Úûq9oÄ*ûÇj_°9~¥|ìÃo¬9쨫ýþŒV¤vv#ªŒÆ‘z{è±4Èú®ˆMe·1V‹>«è§U¤Œ™m°¸DÊ9½9·ªR×†ÑØq»ȰNР½Ø’³FÿyÖàŽ¥ºà»ÁtNŸ!ÿæ>5rdÍ ÏtK(ø‹ðTÐ —¶Ô Šél ³ãÐLŒÉ²oŸôQp } 0&ù£ÏªòT-Cå?Œ_¬y¡~üÖs¢Í¨.ÕÄÕ‘]^Ä[©dLüIðLƒX›Šq=V çõ¡òîÒKqÍfR¿¾zZíàe…í|‰ {O²•¢²Žé)b6 G§ÉÀ|ÿ ?€ºDÿ}{ZÏîÙ=.;B=}>Y…#hxœ×õr^u<’¹(Âß%¼Ù&jqöûs… ƒÏ­Áš°Ald%Å\°W·;’«Ú­öœ¢œŠÔ©(ÞQíR=0j6—†²ð<¶û¶I€žýC±cµýƒþ}á E¡ö¼2Ö°›þMùÔ—&mm¶·o*Mä·¾;5¼=ˆ¬êIcIà&!•°áŒIÉÁb×r®šÄNèËd"Ðo‘$ã Åkœ©,k7·\8b¬p4]Ñ-þ1ZAùõ'5+U_ ^7Þ„âSßÂ>$ôkM”þ`là!µX8*°FR\NÈ¿h‚=ÕPþáµLà½÷–jÛT©Ÿ¯¼ûÉÉ"3Ñ„²”âR÷xÝán_ ¹ /te?ÈEqKðxAZQp5òß%Ï›w4䵩̖=%€IŸ eå†éÎJÇwõ¢yáüH` Añ½Ã~3wîtéú½nª-YÂʱü±þãXñŸ€k¬Ï§—– ÃiÃ@HyåË<Ç+•<«v¯i§ ´ÁŸ)ðI)Òw¶BD˜»Ì‚YD5ÿàÏF¤é½Î²¯0ºƒJB7›i¸$çgX­¥ÌewÈ}’3¥8Kò‘aïgfsŽ>ÿF™¹:¾½H:+)EnEV ¦#3˃!3ܪ‘$ÜÊúæ…p×;ª]€–ó‚…¸7ø‰FæÙ.J°ì™¯¦KT„ZãÉ Ux„ùw×E¿êZ÷Ãy‰m¸<ô½¬?Ó[ö¡ÇW<öÀ”lBÂj¿ÚdÛé«RmZ„"´Îr·"~r÷=[Å”:H íQX¢¶¥ß´Ç²’Û´#.UÕ¶úÈÐÈŸVá{ß]í7_aîüþ>÷öÍ –eÅÐ]c„"0B”uK@š>­v§eT¤«ª¥/«s‹D8^Cèmºd­O鈎sC¯5Ô¥¤øÅ÷¡>5†­-lj 6ö¹JÕiå~å<¬!A/ÍÍ’ QòŽ-»ÙŸK: ,5?1©—«k%“àòpñl$u”¶ˆN ó¿Ó“¯PÑ7œw£«›7o»×w»?Y‰Cº¾¬³‘Æ`IB<Çšõ¤̤VZ{GÊ…& ÙkcÍU©ý´)ð‹—¦ŽÀqÐ ©;w&î_(Iå/øÈÖ.ÿËèíêWÁín†¯MÍ1$‰š+¬¿@'S·4]àþ,6+^teËjLó—;QùðÚïD ’ù}ø7Î{ñWO¯åL¥ï肸¶¤£èé ßa‚?)âX&sKКÖY)VdJX…„’IýZ«`Bg{EÂ0âÉ‚¿My£S²™F#GåŸzm ¤ i9vºÒ¸í‘þÚ}uÄ<:Åû0ú´7¥Ïìç…æáÀiÿœ¬þòn ír£uÑDœ÷ît#AÏ7Ï®IÝíAR­É>Ž ø¥\³ã.Ù ;ªrŠn!·ò¯†÷×rAÊBÃÄ:ßcORo`@ÿàç9ÚKóz3÷x f£š”Fí†lëUÍàÇ8ܵ)´,–P¢p­ÉXé¶n|m#CÎ3×ø¯Åƒj·vG•ª.rT_¼3^Öjÿ{Î]©t• ¥š`fÀÌÔ›ïè)«x°—(òGŒ™ öŸB6ºvóë”Ð/85I_ @Rv •'Ì“2c;3¦iñt8Õ‰öȘ®¼;TÄi‰¾Ò…á ÅŠ(au¦»Î4$q7µÌø‹.¹¼*oZ¶Fbž›gƒ&DzD²úk YØà•˜ð…7°X ˜mTÒñøØ„DæD ‘ÒÝX8í)ÈÀKu nlí•×|hÖiŒù~ü RÑBnéuÐ*âwÜVZZysóÒ§žz]Žî³f;éÒ·Ù¹‡avÎ(,á.5 EB.8û‡‹*ÝåÊŒ¥1«´W(¡½ŽýÅÑ|__ã œ‚ù¾ö`ö,rPªp–ÔüÕ/R¥8?± saÅˆŠº®Ñ½á‡wGÆÚ0x6p OÊõ\ƱqnV‚ƒFWI€}7¾Ì CÔ>™vLJà™7ô°P)˜bì”@g?1‘Þ§ÍSA™Ñr™/g?›3–æ:ôÜœ§Ê]Q8`²æ•Ñ u.#yÁÝé¦édËI×%Aý:ÖM-ã™C<«À¬÷ªmÍó_õŠÊ´µÀ£ãPËYÆ,–ÄéÉéƒwG¯GeøùW'¨z‰Q—D¦:•R#A§²„«ÙI†Á¡8;yç½? Åfw>Al)>! péD^‹?ï}v7_ùÏrFmÜ®]wœ Dž2{°¤úÞ·lwDàM¶$s÷ã½gìçë9íÈÎlQ]Y[QQ:ëu²ýG€·3®ÑáfÀçÊ4ŽÞcÇ?"{(>é‹’¾é¥?uæÄñ—RÒ0h~ YI¡x_tYÍŸRïømþK+YÝ& Õ÷ÀS &êÔz36éMkI›­ôW©É…Üf8òÍÏt/Ñ~†+ñ­Så7ÊŒŸ2ÌB¸kz2¢ŸšØ„L$P¡«å^[‡¼œômÊ«åLƒŒ: 0ŒLî;9±Z"ÃÃ>£K³o>Ëoã’ÚƒŠ÷K5êÞ Ð(u8L¨) 7IÆÚº®“ÉôÑ%cO¬'Óˆ9³¯:>ƒÊÍûVÔÊ`ÎJGù¦l ×qþ4ô0ÙCûÀ]Ž‚ÛƒXãM‰EÜP{_G‘õGhPÎÙTî öÍC™}¡»uxn<ƒáVºÊ›gßÞþ0=·e†aùw‘$#¬ßqF¯˜‡=|¥#„ŒÜ¦ÓÛa25ì"°³åÕͽ?Ú06¶û‚$©þúé>„8ŒCö¥ýÆ9)Ý¡eH~Gåøe£ …›-žå«ÐÓÞNûÞfÀdN¨e$·wª2›^wÕS³ Afkÿ9è ]é[j&þéÅ#õ–»8B¡mG/•®!|™§®—+Fº­+îØÈ¥_vnðI­"yD¥½â+cÛû¶ðg4VæÖ’I7[fHLe@aJ*ñƒßü%êÍ•Ë^ø°»b5g:ËïÈ(Y, _‘ø«êzm³Ö*dš¤­ñ—Uô²¨Ê˜<ÙC¶kRùàlž° üþ¶Ÿü}OݳnÔMíΤ•a ¸ÚäÌz¿MrŽ©ü¤õ¸²(98íN-Î'šr]ÞÓ· $“;â#ó†ñ ßµo¿#ÎÍhÊø-–ÖUÓÌ¥D’û"2YkpʸÿÎtžäum6 er3‡ÿC¢qågK²J°ÏàÏ+¿aÓ"%1¾¾¬ç>É1I}Zàt|Ñžhº€³üJÉ»¹ym-̱·ÿ\”‡ÙADá—®Üè¹à1ާ|G4êFõfó¥}€÷øHæd&\¦_ó«‚ÙÕa—“ç:ÖЈÆþqIVñ&æ>F:!K#˜šj X²ãl®,ÚÛák™ÏC’Ø'T6{óô<+Á½™Ò8J|YCBZŒײ_¤dVrÒêJûÔÌ¥V¬›?ÓV«ßýaô&@Âv%ÂXcÍœõ7š¡é$(ú*•Ö=r³´'õãÒ|ÒÔù3ÏDŒ†t†Mõ—Š†ÇŸÒ¯Gšbgbæ¨CϾ¶M÷S÷ár±f†§TÔS0¨‚ ï d^¬ k*T±Œq ãÄLÞúéî›8e¡ß™¼Œh?. Íâ4»Å½zš÷g½Ã°b®­ÃtÏø£S~uî³ Ê™ß듨_µ'øì\ƒ’çÍÜηæS<°‚|„ãë2¾~¡¶Éñþ´D».§Öž„ò¥ý@tžÆ˜›­fÁ…ãîw“»™8Þj—UàÚH÷½¥ˆðLõFlφúeª£‡Ñbã~¢wç^ü…¢ qGï´NÀ*˜Lv—Ýmy%ׂF€Ëj;麠֚¦€¤Œh¬î’†ýÓ~6lçf¾õp¯€ƒËOÕÇ• m‘:N%qN°§Æ²{”ÝÊØœ4(Xÿ¼O•}C¹XÒca+.ùõ[ŒØ¨9ÏQ¢Í|"úÄàPp#A¸yl>õ2A¥ôúú éɲvmóŸ®_”íBØq*¯V!â²ìhbÊÈò³Oð~[6ˆòiþÎÔÏ6¿¯%Ôm¼E«\¡a´]|›bl¿ |ýmþÙ«Í,c †upš¢c@©ÅGhyi6­K¸  :FfGÖ â”p-,(ÿÒ«–?´U÷}ˆLl®¤2]\š%ã¿t´òŒ“ÝÐ"îôHhãc ·]ÞëÏB%¿µÜ=¶šññÅ/î°Xʧ#çNÛéR¼ü>ãëûOTêá_)Ó/×ÔT²:¥°áÖO.­p“lr66ýâmkôN#Mü"|ÇNr¹M¬f€Ð¯H®ä0sâ+ÅF`ç¨»í ¹ ß×ëHŽÓ¼È?4¢ûˆ9¸Ëž_‹Ÿš-Uw+ÝèNÍ-ÞÛùŽPƒ“†ošQSòËÁ­’dð“¥GÛ¾§°j`º¦)wÛ=¼ÄãÙ˜5ùÉDCDœå{4{2›G{hßx„l¿L’¡Ð I`ÞQJälÃÏ{•ZŠS(ÅD£jKâ¥ÐÕgD—*Náž¿AN½ûÍdÄøÖŠ– öH€ü‹J”k÷»ëé/bÒ€¶?[µ_h+¸mÍÏ<Ím¼.ÇîIo¬O8—…%…«®¨'Ž"‹É:ä EEÑïcÄ~Ð{õP”SF!íK£·Bä׆ úB?ûQȼ¶X’< Ƙ}ø'˜ Óåâ|‘»¦ZP~¢A½ßÐsç ‰­OŸûê§sËÀic¨Â{¤L‘WâD75«[ÐÏáY—«Àí/6•4{ºvA¡÷~ß!tr5"÷ªˆ¤ÿ„NÚZƒ6o;Õ7ú‹UgŽJ<ÀGpìåéµh¬òr_Êøbý²¬ˆÁ·ÌDE¹™éà>ç\Í ó¡Ê|·ýq$i%·;¹µÂ­”#ÿ@°z¾: çŽ7¯]ð½øïÒÆ\ºˆEø¤c;…Ë1}ä‹ •>þxf$ é{‰(7ò¤­¦Að¼ké‰D-ø'¯çE…òû>E«„#…¡'Ü:”TúÌttÜn’oÚ)®?¢XrÝó1$½!Í8¨5¿SƒÑc$e¶ùZO\8ÅÍ x% #ÝEVÞ2¹Ú¸Ó}81ùžxƒf:ä"ž©5ŽVøb—R×èbä¾é-rƒwñ·sú <ýEªoU —Ãâ²aëkt©«)‚ŽÅÀª wÞ ‹_˜V-¿ÉKHåúc3ÈSk¡~myMƒéÂ6¤ö"ý1 ©¦Ö?¡›X]mºXurHË’„d G8•¦òSZíw³µ®úûx|YrtÚ&Ç/Á —6Vh>ï¼#sŠ¿a›%{ lUAoÓ³Cˆ½Ñ?§†>mssŠq©–R6=Ü«”7ª£Ë ߎC Ãt–‚Šˆ‡AÉZ$ÄVIø?|Äz {>VýŠ^·"5cm§%'½Ð`*ÈÀoY+ŽÚ‹?A§º5kuÊ ð¥ŸÏê|èêYKÄáN_¹=…„p‰7ŠÙ¦çÍ1®n‘襯$MJ:Pçâ–Pï§ýT¶oPcUF¶qgû‡%ût˜È>×,³ÑÃËh‘éyD—HÞqQ ¹‹‚–ÕטJzîFû诒Ĉ’.kÍM(ð%aýNE&è/èp>‡-H¤èØØ­-b$„­z£-ò(šqðÇä>£»ÆLS7Æ¿‘òvÓàL³éX^¬£ÿÙäœÐ¡*tP~?†Ñ¥Køz‘ì®#]Ëx6•seéÂGO½±WTýôÜZ>Q§bá#+ÆCš „Ý/+dF÷J))I†ògŽ·Y¯2ÆafV¯³!"\F@W41Æž»›¦L¢;§£­-gz£Ÿ×p®³Øh9gVæuu«3 ‘„䌭e,ÌWˆqƒÍUøW8ì Bcp‰|ìT ,ЖnƒÔ Kà£àG»˜fî/Cà¶Ù•{âI™§†‰Š×¹æÁÝc <ùÖÌý§uQj`IÕÀ¤=ÑSc,¨½uF‰ì—B]¼åÅó¹·;',¿D¤9C“,HÕ™ÃrBÔlèzsÛjÔ|û´„vм2+\QXá¤ñ©VqÝEÄÇeÔAq¹.¼ç´±Æ<ó«ò¿áˆFŠF!…Ÿá PÖî½ÝÖtMç* Šw¼¿;tY’—,ÔB*—ðß+Zå–îòFf_6]šºgW.ñ«‰(¨ÇUÅ“U™óÇ}’E¶u‚¦¸ÍœÂ”ŠŒhç(“€M>:«΀ø•uÊ zGçýä× Ñ~÷K+m#B>ËRgÛ§µU{Ô<¢ ê!-fòh“pÒúÑYÇlÄÌ)Æ%Èгz¼é§©»øý¦>•ƒq«0"ù]t¾Û°Î·žõÝÂ-©]^¯]„û ¢ÅÀ’ŠÚD}í1T‹ïöW<þd¬ ÇíeAéÆÙa£âH V3›£øÌš »µ«G¦¾î÷Oú^¡¬ñá—TåK~˜˜/©˜D\B¢Qfæèð<­b{$_U$uæ«Þù…€œ‰lLŽ(ë:ÜŽÙíš·UÞ¾^Æ*,5ÝÚ ”Ô¸KëHH×ÿ²Ê x2mBIøšë|S£Œ”`xkôä#4Éaï*ÁBC&DZ 2>ëæO'ÿIªŸ<ÊËÂnøv]оJNx øF¸¼DµD=j;œX££ÇáÐ_2°þöœ¿ßd%¢Ú#ôGšZÓC—ÜšÆÝ¯†¨hÛÚW4’ÅßPËmuÓB‘˜†'wõÃøŒ|[Ãä\K ©Ìø:'3Z&['s6òv³¸ï¹5¦nanv|>+ ~K„¯È®ÉÖíE¯¥ß¢µ}À-´Ý]ÍzOÂÒ&‘>7›…t(]V;<ÓTsr¾C~×qŠxñƒÊìÕÂ9®MÖôCz³À•a™[u2V £´˜'ƒË»R1wÅ7LE·uƒ¡e&@8)TAé ›jüÂÁ@U ¢rÞP(º£ùyè€â¬hd¹a†øE‡bbƒ$¶¿G×÷„Ç£€'ëÉêBÞÌö,áhã(j|{ÞäðµÃÌçW¤¥¢8}F“ ž½°f@‹f'Û®;  ]\‚äÞq¬‚éôûù`J[FÇ]NÂÈ:Bo+=:"Ö=ÉåÎÓyG%6Ni&›Oúü÷˜éó„§¥UpkÕ_X>Ú*o0T~ìüeÛîùѾÔün$ý+æÆGð‰æ…)›Ô:ž›™;ïpB–Æv6’ëã.ÞPQáœ5‡2ŽG‰C&ˆ…@Å››;L‘ZXQL Š0Ü*úàÕ'ÛkÆövàC}=;ƒ=PÊ­©³acãšÂ_ÃÏ!6—²ï‹e ãÅQœ<¦ŽþP?Ý-Ðg¶rË,!=Öÿýn^0Ÿ~'c¿3éZiQ”',[Ë59s¬›?U‰ëF÷ûJM—⨀žÔ$*FE$wC÷ýÂôSOß¼#Qâ”ìÑŠ.—}s3ÛZ7)¥¶N€l…‚åQi¸ô²®Ó]–!…ú:%#1ߨþè ª”Cvwå[•§ñCºÆUóþcŸœ–bµxªÒ,]üxŠñÕÑÛÇéå8ìÅ?e’ŠžÇˆïÝ-TÖ)dî•IÏ ù˜гY§"k`òzÿZq×Vƒz³®ÛD0Y”à8z5‹Iª‰ÅY'Íà´ût±_¹œ½Æ…à»gîqÝV·¡¦–n!ì.ÉòÚg:.¼×9¼+~ù¶¯Š¥Ž”Ø­Ä5Hƒ=tòF°¯Wö¸JMžÃgºïÊG\b²ýèyB8u¯ Øq2·­æ+ÅpòF÷Ûˆ­o†'SOP;Ó J(¼œ»¨!¢–ézŸf ¸nõ_¬èÞ2F] âqYaK›¾®~gý:’ü íWÑ0yUzBÈ·°9¦¯ {_t¸´I;Ýž~ë,–quÞl 믶RhÍׯM1h Óú»ºÒÅÀ“á"×È×9Yɯe*­C]îfø½ÞR+˜ߨ²l+A‡µÑ©”¨jóŠP2}‰xtX—¸t^öØ? ¬fN!n鸞KmWçc+MÊ œ”-ÙkkèÛí¦'è8«ŒYd©8CK• v‘›± ýkÇfßÀ*^·³D¿8™Ÿc{µlp=~Õ( Ÿ(F~U£p~Fùn•üɇçIp»›¸Y„éØí¬ªRÇT˜·<ƒ>iªòõX!õxä ˜l˜—ȳÕ,bÔk.F^ °*)„ÇÝZ¯r³Ín¢Ñ#e¤§Äu®¦Îz„>Æ'ɹ÷êš·N?!j}×ÝúS²yïADŠ•gTÄkLø,C7•þrÄ!ÓÍFŽ÷·ˆ<.2¹ùûbÁ˜…N+ UrïÐÍw›ù¦ãþu?1µ^Š$'ÿÀNQƒå£/(8,ñ +‹Ýï“» 5ê6uh¢ÈkÜôôÒ:kÚÞ©^ypµÈï+Âc–kH^|‰ÜŠ×ðe>ÕHñ¢€ÚÉSq3e–¼ÁŸè¾!ó¶C]k²·Hç^ªa7UZÃsœOåÎ=x‰%•Ä1BЧŽ 矕îswJ}I'Ç kû¬:F² ¼3T¡ï˜·Y®Ù(à6`%… ÉŸ8G—dáÜÚ´Øät/Wö)xM,Y) ;%¾wŸ\7ÀŠª³v;¸2ÉWš3Ð7&L‚\ÛÅ‘)óõ_§÷ÃC¦.™¡»!RŽôS f/IÂ$½åmÑHl,iª:Ä¿–åP±)™ÝG}-´dȃjâÞ0„–¿ ODµX¢LÃ`qoá»äêfŸ¶ÿù=ôËH…:_Á (|.Šöܘ~€:§ïê{^p£ÃwFèzLg:’gܳ`,Þ¡»kÐFȤEÆ>¼—Ú›¨ÊÕ²<Àýß|0þ?ÀÿÖN`Üæ ‚;bü/ÃÍdendstream endobj 133 0 obj << /Type /Font /Subtype /Type1 /Encoding 326 0 R /FirstChar 36 /LastChar 119 /Widths 329 0 R /BaseFont /IEIMAY+NimbusMonL-Regu /FontDescriptor 131 0 R >> endobj 131 0 obj << /Ascent 625 /CapHeight 557 /Descent -147 /FontName /IEIMAY+NimbusMonL-Regu /ItalicAngle 0 /StemV 41 /XHeight 426 /FontBBox [-12 -237 650 811] /Flags 4 /CharSet (/dollar/hyphen/period/zero/one/eight/a/b/d/e/f/g/h/i/l/m/n/o/p/r/s/t/u/v/w) /FontFile 132 0 R >> endobj 329 0 obj [600 0 0 0 0 0 0 0 0 600 600 0 600 600 0 0 0 0 0 0 600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 600 600 0 600 600 600 600 600 600 0 0 600 600 600 600 600 0 600 600 600 600 600 600 ] endobj 72 0 obj << /Length1 1626 /Length2 11224 /Length3 532 /Length 12090 /Filter /FlateDecode >> stream xÚíxeP]“-Ü!8ÜÝÝ-ÁÝýàpƒ»ww'wîîÁ‚»{ðËû~3óM}wîŸ;óëÖ}ªžªgwï^½ºWï]§™²“˜9È( r3±1³ò­íM]]TAöŠ >y& ¹5àÝÎ…HE%á 4[ƒ$MÀ@~€Ð 4°³Øøøø© GOgkK+0€VCU‹ŽñŸ–¿¶L=ÿÝóébmé ~ÿpÚíàwˆÿë@5 ¶,¬í€ %e9E­Œ¢@èt6±(»šÚY›ä­Í€.@:€È`÷À ä`nýWi.ÌïXb.€‹#ÐÌú= èatüËÅp:Û[»¸¼¬]–Î&à÷€Ak3;Wó¿¼Û-@rt½ï°÷½ƒ)ƒ\À.fÎÖŽ`À{VeIéð[™€ÿÊíbýî€,ÞwšƒÌ\ÿ*éoß;Ì»lbíà=Àå2Ì­]íL<ßs¿ƒ9:[ÿMÃÕÅÚÁòŸ Î@Kgs; ‹Ë;Ì;ö_Ýùg€ÿT½‰££çßÑ ¿wýk° Ð΂‘ý=§ø=·¥µ"Ë_³"ç`°±þÃnîêøï>7 óß ¢ýkfèÞI˜˜ƒì<æ@ DEø=%€öÿNeæÿ9‘ÿ$þøDÞÿž¸ÿªÑ:ÄÿÝóü¯ÐÒ®vvŠ&öïð;ð~ɘ8Þï€<ோÆÕþ 1±·¶óü?ýën-à?ØŠƒìÌÿÕ'6yo‰˜ƒå»,¬Ì¬ÿ0Z»H[{Í•­ÁfV »÷~ým×p0:ÛY;ßuý»¥&6VÖñ©[Y›Ù:ü%×?\@ó¥ÿ.ÕßäY”uåeädþ‹ËõïÊïCV÷t|çöo¥(€ÌÿcñŒ¸8ÈàÍÄÆÍ `âàd{?{ï„ø¸Y}ÿ‹”±ýs­`v¶öè½×ÍÊöwõÿöþseð/0Rf ó¿ÆF lâ`þ>iÿaøËmæêìü.ð߇ÿ½ê_ÿ=ó@ Ð qid&b“ž•®ÆÍ“Ôëébƒu,«S/. øêôOÿ²ÁWaü\Ê\?ÁÿÚâ9äø²ó‰~w¨ë£Mg*ð¬€È—‚®»cº‡a7ˆÅ° %ãX+Úû|N~F—›UswsLEÕ°ôùñD‡3üù=]…[a6å#ªŸYZmN;z=fuÑÑ1uÒÁýMßðà@ç%l÷!Cn•€ uT€S.¡ˆ®F…w,n8ûwT,#wrœ#¿¦#7±Y¨Í¶T“ýêׇ0XqôUŸÂÂ…¿IîŽÔ[º# axW¦Õ~Š}B¥±4¾¹%Ä”hÅLf²ÈÙ$8ŠÔ›¼„Ù±ÚJY~PûêvƒÐÄ9Y&9ŽƒÍ)ž’­ø+éÉ19Côsð †j' S§[<ÄôÇù3jyH‡íMJt¼Ûɱ]aÝLù»þL__’±Ì9 øïk.Ú‹“Q DzÓ8ÑëLæÖKöi¦'× D‚4FÖñ¨(˜UYd—jÚZâ‡áHgBofãA©±m¢K=Ö〟*,9q0Ø‹%ÃQ†¾À³´Ù?×½¼å’Å$G–~Ö¦¢ãóDÎíJ© Ví\å¬ÿ™”²MK8f‹_ÚHÒ·ãÝX‰]ûVvjs˜I”_g<]Ò£ˆÖ¦1ÒÆ(ÿ@”Vâ{–÷õšÔñˆf!ÆÅ§—F¾i'à- Ž–Íà›WKfƒÆ»iâ[¦%èdØr3¼Ñ#‹ªIÜÌ}Z»w÷ g}ôíŽXƒU–&æÕ¡¡ˆ¥î}* ý"„Hà Êí )Âe}[‡<µääN’$²sÉÓÄpËhgIšóz1(¡—Õ'郴fun³è¿Yj*’Õ–—!sFÍï¦t*øSj£’%”a†Ë;DšQr6¶Y§¸Éù—€õ´ÂöC…X¡ã]jýÔI"Êþª >#Yzo)ißo§ûØ»‘Pb{FB¸­ô>_o¡ëE<Ú †7¹ñP†§öÜð:×uAbèô0¯8É}`çFüRH1fuJåÀþ½LùÒÙóž#¢—|Ôp©ÑA™Nêg͉UÍ`{ùù‚u]môæÔh„уåT1¯0Zä#Ö±¬‚K®¬¯œïѯ;“/ƒ Eß²ÌI MÕD^ÚÝXÙxõhaÎz¬Òå¾ ²XÿI kùŸß!Mð'BUŒ —·Çeò¯i$ö "#/FA­µôCWÜ0o'¼C¼2ŒÅˆ¿;áe*ˆ¥Páæñhg VK=·w¥9‹¼6KÊ<¸õu#iÌáu]+±'iF>ÊËÝy›Í3óFáb²àì®ó}5ŸnÃ-æòAX¥¡mTAóh„JŒètD}÷e³–!aFz›sd&ëN•òD™&ÒMêîØ°áZ– _:Ëâ-&È=›oÑ.²e¶¯fÁçÇü’@Rð/=)Ä^žú gE%¦;Â2d÷Â>jŠÞ"b<êEO§³<’måƒ »{wT=NâæîÍ|wâ©úÃÃWXKÆé ÷¬50å;’NGV§/6'€¼%í‚üt) ŠÅHn¼“»cLòÜ G‹å)h1†íLzüKÛB•û'¯B™`†ñ׉ȟ ÛVpg¤7 Êhx ­¦o)ÖÁ·1»y3M ̲Ò{“ü4š(Ä™W +0Y_·¹LÒšáˆ3oÑcUBqåb' 4†ú0MÃ;È_›¬È æ3RÈ7yþÀ¯¾qÌ}`‡ Æ0…Ü|xÄ“+ùÌUˆ ó”M×HCÕ­Úv`=»k€±äš~¼j\èèWÈj¢êSƒU´-Óàé±Ò+ùFèåÁ]õ«R)õŠÂ pþµÑ{øKÁ,j”M®+ }¶˜`pLë&!›®€­Q7á1+bHÉÛæÍ>õ’ö°CÎ2C6Öî9”ˆZ3*AãÁ=œhÀRâ‡g™·bž£ *f&óÜ:ŠˆÄ¬æ¬Qî--Ô<²’Z.ïßÅû$Næ‘Ca |G¶¯“eÞ0OZ)Ò¿kf,!¼qc*(Zû\[Çk5ä1ìоû>Wâ†jl±I:vø™ŸxÖÞ´Ntœýq2ù-gk¦ð˜iõv…Ø<ʤNÌ+‘ aÝ ?z0}¡*èÃä^gBçµ9½3D…¹ÃÂR/LNJA%õ ŒQ!£ƒø¶K›ß3ÿzœ9’¤«mií¶6Ó¸‰÷B,y4…_TÌ¡oÍ]DL£Ö„{Ò$sð¹Å×?þ¾g\ôúÑ ã›£„lÃ:ƒztèÛÏ_+Ñ`ÿpK.s6‹AÑ~ðe®Zï|¬íæ§U¨›Õÿv?ÊlÄQ­®ü%ÕZÃÌRBU+Ç,8ÀžÛ© òú“óÀCíws 5Ó¯ÉOß¾ú { #ÞÍi-‘},Z1Ìd ï$M`Ë.kú! }|½Û©{ëf»/òÅù¶S\uç‹ÌJÀ4ë¹Ȝoó<ò£É+èñIábdwH&§ÒApQCZ4Û“„–!gÙn´w²ï1AWþd(èèkGZOX&Ó¾ìþ;¨û ½¥>’6[¼„ó6UÙJiè)_HL£ôcI•Ãï¢ïÊ;!9h½œÛ“E5"}Œ_ߨ¹+8O¯~ûárëÅÛ¨P3áê4»q½iô l×]ö* ) ÞÊP›7òª1uYˇLŠüøc½gû u{(‹ÁFÛðŒÐj×MÞp¿¬pMç.´Ò—Ï…ÞHb>Â|nõ´ðƒf•Ìe±^CºÂ¯§“mx6(•£pà —SJÔí/_äG肪»æo©±ík±æìÂEE›§QVµŠ–}ƒ×2À uùC«§L›x`S1HnOË œA‹Ïi (:Ó¡r+ÄרçúHPðÚ°K&‹B(‹´—ÛJ‚j§søŠ¡ô´sëèûË–}(ÿo:BE|°`Šw”›†ìÐsúvꟚWE³TJH:͘…½QùÊÓÎC]b1A·RùÓYzÂ#¹ž.‡‰™ž° „,ƒC[‹oâr¢]Óú(ب o8tÚôq~ ÙoY.›<ft—fùÚ)Ðàa«`NÑ¡~ÌhN¿à©0`Õ?þdÁí‘âÇ(WÁe;J“?¥ìÜû¶>Q€uÁ‘j’‚HÇñ4 Ÿ‘æ[Óz‚™ÖÖŠÙ+äå²yë“Ë*eãùÁ(;NȬþj\PwÑc˜îÙ-ÁÝÙ»MDYµ¿Pi~ºå^/"Sتedg±˜ ñ0³ ÷ÈÃÁß:/E/0ÑQH5±#ëåý|å‚jFÙzå=W_b«4®Ý‘ü™!þ Gàž\uY~ñʃ+7àðñe Å¡/¯ä^IÞk9pxIe õêšöµ'l:-½dÏOÃsRµ‰¯æ`÷¾bÞO×!ãy\1'ÌËÐÞ±ÚÉ{2‰}Ær!)pïž±£5OéÄ¥ˆº¦çäÞ›Cyï§ê`/99—ÊÐ*­yC~Ûв7h]9:ay(¯Án¡>j·ÚT߈6k+Uˆ*ì+V™‡o´æBS(¥=Lÿ°ð3¬(YÓ‹!?ÓoN¨'ýæë‘¡º®À‘â„Û´a>Wœ“ùÀ‹KOº= á¸*þñ';ëüsq§ï"÷TÑöêÞâ—x[G§ò>Œ«ºžërnŠz^y·¸'•{@3ƒ¾Ã52 -JK¿’y²fŠ­‡ªã„Ù¾ª88£ªêÓ¸ŒšKZ2åÕývß­‡ÌqUøèþwxÎá¦5(¼Ùø±ø/=V3ÄDÏla«ŽÆ*RÃ'œÑ³Þ9šuߢ âƒCýX°™˜Ëó'Ê-”…Ø£Ýz‘Z ¥éEbPöÝóVˆéAÖôçö)Ü*¯ã>ò&“OªøÑ 7CGŽ%7«ƒÖÂ.ÅÜŸqý¦¸Û('ॿXÓÆ]tãì)O÷:†öLá9$ýídå'†zCûœ1`¤'}yßÝ"ˆàäûâðZ¥”ØàËiEœ1“AóçÚ~¡NkÑÄÃÅX´l¡« "9Ôyœ¥DŸýë;¤KËo¼¡‘bÎ bg)N1¿Õ|ny‹ü¹6^Ä”®óÍI]ÙªPgÈóŠ8Ê»Kf¼FD]íà"–»|]‡óGTùIv¬æT¹Ëmî¡>­v^)„|•3Åfbf´yd§$ïg^EèÅýynÚ-nk†±q ãüÁòV Ž«˜é$ýkâþxå=Ø›¥c®ž¿J’C=©wø×—]Z?ÁïK¤j솹DÁ—0¡G‘°ÄÖë«k[¤µ°Ÿ§Esú'3iãß]œÏ9Iuj[{|•íD)¨kkÍŠÎç½Äê÷Öcz¶ÖjÜ,x'›ãj3øzÇJž¤ŽÐ~iŠÉCr*&™‰é†Î¶E‚ä¢ZvØ¥æ·GÊL ªš¶¯ì…Ù 6÷à 4Óê¨NWÀ£ÅФ…à’ ÞDáË ¾œ-(J­¥ƒKq(fØòRý(¶yK5(}”3Sfz+'G'îç ɽ|…éÕ62_Õ- Q½Þìzm­õEi]ÐZü 94“}Cëœ=¥ñ¼ ~1„äeÂÜÜqí:At{N#I«¬TLºÖêÎ ÆürB¯ó°IȫӣNehgæ©y­ Pú‹~iËr‚“:‚µ $ÎgýyÛ‡¾Z0MêŽÚÎlŽ‘ZŒ&Ï—ú±º¬@}I˯ñô)Çc陫îc”ϨZÁ,Ýâæ5JÔɽb³9òrk‘˜Áp£÷B~òa‘Y‚è‘'Èýã®" .å©jðB.Õ(#R]u1¡Ñ(ö¡«ü:Õ¤Zˆ?n ÌÖÆh’› ÚÎDº˜Ð½ q9*¸…‡LHæÂë*Á^< Þ~¡HI,J—â®ÃîA+R ))ûªQŒxÆ”÷,»ä§O%<0:¬ïn¢Uk.™0ˈ¼¥ò°NT#+ÌóóƒÙ`¨‚9û:×sËKO̼Ž[¹`R»—‰lÕhf14*=wº4éÚÛ”‰N;®lÉ´ö0aFÀÝŸüŽßŠ[f UÄ-PJn×:êÖ˜Àr¯5¨¢&’‘„“ôÞ";A7Л 1óµè®d’åàÐZLJ£,Gžz.óE˜\ebiû¸Â¢EVµ*ö2«u':©»Å—1Ú¾…¥x:”Ïã0ë°vi„âô%¼‡ h`SùŠ!¢æ¥ñù¸ß3KN% :JóÊFgù¢r¦÷²À“kF5³.¦c„ŒðÕ¹˜¹šØ§„ºNýLSûÓ{ÆK&Þ9 0r–Ò QIHA.C m(« _4cüYÊiû<ý/ÕÔ|K•ÔpĤV|ÁݹÝu±¹=Å0¥zŒžU6‰ÎëWyј±åÆÌDXYß|é­ti‰È+ˆ ˪¡aR»¿¦¥Kª×dxÁÔúlÙ°j£)f#Å(pâÓ ëµVÍp÷ùK ð®@XÆ{Ñf® QYf(Ò䂈|fTý¼×güWÒÖÝ?Æ›ªsVs·Ä4ÎaZj›ï°¼¾”‡%ëú=ê¤Äcì"Æ}z6Ço­à°êŸe ýÓìIg]hhE·Ï=rAû1ƒû¤\V°û‹êÑ7¤°É7…"=²ŽÖÏWy)ÞaÎ=E¿«Ti¾9gGpåKõf±ì~ŽGylš>EôWÙüÚB4*\£Ÿ…×3¿O¸€ÂXÄR`.¬0¥k—÷•|á÷|ßE™…™Ë"Æ`Z!ć%sÌáq:Q Ϧ.4âJñ0ï UÃ_ŒR3 nîz“ÏïÆŠWAâÒãg†q|àâÑ’-j6K4Â0"9+~ø*Ý£W·ò_¤¯‰&ËžÔ²‹ E9¯‘w»Æ¶¤SR5<®ñËÝr,!)¯ü3÷©Áßïö¶ò"Ã[\*’e¨tñ“Oü²èf¡ûQ«÷š‘hCáw­ïíKâFgUS;Ž5õã‡ÈIxñ«”ýI¯qÜ’VíϺ/«±ix_‰óçUb1fÌ;p#ÿxêqB-»ÕÖ+š‡Y.gÉvÈË—¯$VÎC‡ªPúS$ >ç£(@ °=”ýJ[<ü"•ÅWM6pòƒÆÖ¬9„àì\Ñà -’j!p‡Ynñ#v›œ)œL,Ú–f—¤g¹‰> ¿:Ú™d9nã¦ò^f•mSJ©9AºÎY.f  ‡ÜüŒàÝ´[‚ ÛTŠ´¸û÷dÊž™=ê´ÌdŠ#I¶iv1®hý7Æ·áz6óœ_Ík' Ù+õµðô/:SX†[)e]9ØûD”<p¹×ëêÚ’QG('鬳[ÙÔb'UT„²ÖlùöZv+,!.ŒrK͹R)Z`ÈÆtŸSV×—º zMÆUðÖê¼8±0&äEȰÜѧÐïÄ‚sHiý|0¤©:ÜÖ‹Ñ £áŒ[GÖйýË’pXó~µèm÷ Å"ÉÙÞã žÈ"¿7VöøÒž«[Q^&a$üàÏÅPšIÕKVÛ „>ŠA}ÁªÖÑ#+·AÿŠeb뤧ôƒ…‹sÏÕUÄúÉ‚uõ4ʃӴ¾«÷ø¾¨€×·“;ê¡îz#„eåz!/=¾]4##^ r ]SÐ>ª¥ó Y"<. ¦º…h´­VSÃYTdJôE@¡à$²©¬G¯Ë¹Ÿ”£’—TÖ8ô[ ø ëtåêšêÞüò,è!‹MT“ëFŸ÷3œ–˜*,mÝÂ?Ò õ‚õ†/eq½½]^ñ€Îöí ì'NÃ~#†úa½gr## âÉd#P—OïW¦–§J[A‰‡¦šÁ•ýQû”"aQTðûê($´æ„¡šÖO?r%îj!³}±ãë.&È$§ìD;'U¾_L²Ÿ».ú ‘r!i¬¨œNæ†ø- ^ÓŸŒ„ Í? æ^Z”õ°‚HÑ4!°I'®X Îõ¤€[Ž!‘`~%s\¹Nq‰‚gàí{F b¸¦ êØ×I†»¹ôp½‡ÐWMNVbÇ]ëð¾òЬ5À«I¶°µ]ŒðåWùÌž <¸¤J½ ìâ?á8ŸjSôq¶>]¬åÊq¸^íÞêä·Q„\˜t¹ácU z¹iºì}taí{î]Õ„îÏQh'¤0ü>ò¹Ý€Ýw¶Ó¶Ü®×FŽ)¼W‚!Ýz´Û½Ã7c£¢àøFÁkæ«3äÝ6É­ÖË#½‹¬]P¢yµöl†JÁ Êêý6Iyf¨ÀI®†ñZl–fÏÔ¸'ð変ƒ¿»Â51¼´ ª3ð#¤+Tšˆ”þ^KIij^õœ:ò:4|θrÅ qkÒ£:¡AÊñ“ºM&Á‘X-œòJqH”P©ÑǘB¦`MâBƒÍÁ—&‡¶xyM5QM žlC#Sø /ÒýaÔÎMT`..Hj¾9öŸß*Þ4$`Ÿ»8?)¸™#ܨÔjÈ=“çè®Ã“*8Æ1hÿöîr‚4ÁGºù}—æúÒêJg ‰Ú¹Œ³¤/¢èíÍLJ›ëOpr¥;6ÿlÁ:úxÑÖi€Ú@;•›½n DÝÇdzŽ·h¦ÂòË–y‹q0tIë|¸ûúÒj5B鉤Žú\÷HR§3© ÇAõ¤ÆüŒå^V´‚ÅMÆ·¯"Q)ÝöÐ^o½‡ e%,—Ÿøk%¥K"7òø¦×´ÔPˆbVüHy- iÌ #ýl¨hŸƒÛ 6×[žoÙvkŽ,ìÀ~´ YdhÀ†x{ ¤ÏM°þùYÌz×ȉrzäAbì¦Ôè(bt!f±Û2ÕÑ3b®/5ã§šgî~s±´»lä÷®óÜB…;˲­Ñlž`ï7‚Ô¢2-û ¥Ð¥XkzLØá…8’½²¶~Q3yz fl qÑVr{ÅØ1=œ³VŽÆ†ÜdvÓ«½óZŠZý…¨4·Þ°Šê“ĸ™]†Ê3’í2\ç"®Ú½™-|Nõ¾7|Ñ ‚Ý,š³´ú'žóñoÓ¼Õ9ÂÚáMGÙÙê8Œ4ÆØÃ§±Ëññöo ûd?²áâo“!Ï´Áo—è9&›}Ÿf÷©v¢ŠfáFíKîµtªR &'B_ÌÚ½Z–êæ!„<ÇK±šë©91»&‘L$û¾E}÷-ƒDü=µ@ë[ùÀÏçòs`ðåNö•0,W¨@­WH¤ýc¤ÖÚ¡Æ7,,7QlŸ¼WNñ³þE1õÅ©¡I¬V2ù^_¡×¸€$ψܚ€$?¬àò‰#,b’GO£9Þ.q@ëFˆ£Rµ4jÀ@N¼¡Ï_Ã<æø#]÷*é´Áa³èË’™³gn§|ÞDåqŽï˜žé·?Û¸jìOa$juëI1uÃ7ül46|ÒKê’“7Üç¨<ÞRYÌfÝÓ8©›¯ ðLØ# î¨8?é K¦M“ÙPå—ùÖ¿ h|ÔÇŽ.Ñ÷"¸÷¤¬ëô%ä™ Æeù°|M¿ýù…š›Í4T6Ùx¹{±7¾¹-© <)Ý”{³:Lk¼ÿyÑÏÔ"ýŒš›iï©ç[¥ÁhzÓøá†mç­ÑpÁþGï:àç—4,O©¸„q‘àfÑÚ} nZá–´í »ŒvYò<âˆIðC†žèn¿Q{ઋO\Íæ÷çsúG›Œ e#‰/2\–Û%ž5EÁí=/‚7 »ÔN"C±pëç÷pY!Ò'GRºô¿²žR¯û,2>-£RÞ™•Å~4¬Š)9з•¢Ã`£U3±ð'EÒÙh5g+´ôˆåró¢pRzz]·ÎƒÛ·iÜ­¿cƒ½Ì³•­Qª¿<ÃÎ=_D¢6ZÓˆ XâóožcýMŒšý\€e¯r ·ò܈]¿®Q‡äƒ†#QÖõ‚zéÅÔIe¬A Ùû5ðo7..Åì^ú)Nj7§ôôgÁžr¢Èì`B+œ´rhîylë£X–ŽŸÂ¯ÝA„/=­EÆ`øà·_pà 'ˆ†XÀ£BŸqƒ<éY?ÖMâ*}ÅÙSgÖ«ÿ¨YQ$‡*×£À+W]èÍjäw;¬UÃs²O7¹%Ô$ÃPIx…ó¡Ñ›K}†Ô4¼æzRs¦ñreRÊ  ß4õº²é©£C93UñïÌ"XŠJQyßp%Ȉ„Šl øôâ®Èsža7ñÝ¡HMC9Úe,1•@F™h„Šª—”S”õº0œä¹lЈã•lÙÖ¸ å @§WŽ<óÂŽ+œh,EØ߀IØ^ûêq᪹TubéД{ì†P/f;ã‚Û……z ì-/¯»kÏFòIJº×O,KÅÄ#ƒ4‡Æ¢ãC‰ŸTh·T¨‘£Ï>rI¶@,ëÈÐvó,Žž?²êà®ÊeÚY’ëèiX”ã<¡Ö³¼ö“0A\Tsp©xz-D<ŸT~Ò¯›•£(È•˜ˆÿ¬¨Õ hèj=p:Ý-WýSeG)ƳAóG¾ö¤'ãi©ì“(^ú46š„þò*•ß(ÞGÈ4´Ôe8š˜éò|–Ûëñš@"d2uÖ­ô ž2[Úï#×&Á+K6™‚ZK‚LÄ¥#”¹BþåÇM{;M—å ;|xUƒtë„^À¯cÃqÙ| °†j¬™Ÿø)NRЬømŸFì;Îùê;Ý’½΋‘ͳn˜<£ÉãPWúsvî–M-š˜j>2ׇwH?×0Ä­5¿µþ ¨Søf/‰–a©ö0›Ú)zè¾+ˆÌಈçíKòA›^^Ž‘¾,¬sA[á”Z½J[DT¼v¹inSXlçqjD<áù‘w Ø[‡Ë[j´þ±öÎjxusëТšS.Ì0ôpiœöì.üUsñçL,ÌP:⤋™|¤Ä™b¸žá‡boÕ^I¾Hã1ã~³ÈtËŸHãY—#Õ暴mQÖE»¶÷**‰| ž§™Oņ¼{Ÿú‘užÝ,æÂÍûÐØ„ìd›lœÔé6°w©k¯ã~$JùPÐÈ…à >Ú5 9 uðýÍ8Vû +÷ ã2Ov%“ìI’QòUI$ŸÇP¹ ÀJ2ý;¿ÂÝj6_®/¹ší¶b™ƒÍ¶PyBS€ß2û1‰,³…ÿ²WÒð]Ñ@g¸Fm>%*”§I9:«ò•ìaørÐSD(¸IhdVšUU6¼:¬•/hÇh5Œ×ƒŒ+œ?^’8>÷®¢…¤3!»Ù­©gNqï ²žtÔÈô+µ- EØ «øtÐGÅþœvTäU§ë$êÝРÚNcï­Þ¼NŸ-¢o#ØUím@c–e^ÛBâ–ÿ:Zü  ƒ"ø.àð€yÊífñ<-@Õ?³HÂyoi–ù¥¥È T¸‘¹ýìºt²Ì ß¡Uj¥jDÈÜ »W‹±n°’½²í ZÌw®&|§¥Fl3Ñéu²IMghO´ª±(ÄÅW—Ã~½L¶IŒé¿t¥SP¨guÓâÞÔb¦ ùeÍPUg5(æ‘ü*Æuñ÷Âs]09Ù¦n}ÚùãL*^W™¥ ÿTª dÃç+ÈoÝRfyyî/áúÃÏyyä\­ Xþ1ÏrRðs§1ã.q”œêçZ톳…C¬"~7Ö@?ÿ,t3Îm^iæ¾p銆ôâDÙîõ+8™ŒÝŠ¸Æ»†õÜ]Øš¢ü±¹½kÔ{]€êS¡$G¦«_&.šÉb²ƒV=ÖúqŠDÅòË¢ ,Õ‡õæ¯:®èÔüBçM›#ˆ-Ôiù#l ÙÈ+ŸAÒQåÀ*¡îR‘Aøý=L¨W®Jó—|ílû+æ­÷Ì. wl­·hH¼ÝÌ`2”–`•pëæq²¿(›ú j§Ý Å7m¿ª¿˹§M¹1ãÑÍgõëñø*¿»‚só$¸½fvåzë@7b!á[¡zê€?†>$€‚¹g›ƒ~—¿äÌÏ,x¿ôòÑ`Íþ0|õ"¬¶Š“û>eÊ×S_§I… A]û—Ñ´1D JËr5E:VƒB'jp쀸è4®iéÒ¿í1Ž\o&k-úK‡›ÙtþKl_Ï3Cì»Z¹€ ´Ev÷ƒ-Œ­Cû%!æÃ×ãáQéà‹”åL-ܲ 9];HüK·HŸ\¼ú\ÍïsGA@3§Ò’®„Õ¶gW‚!ÒfÏý†_p…^ùÏšuuzYþ­ž²ê¬¡‰Ï®2:•¾6 B.ÑSc;ÀµØ|uoõAéÔC‡°4âr¤ 5ª®\µ›-¢ÃÙ?„š5aÒ$Kñ#zàŒ¼ÈAÈñ¹ÑÆö/JËœÁÁ6ÕkR–ÇØe31•™M0(ò1ŸúFëþ´êÂ`·µ“Žb.'ç™0:®ã wYH\tZî©ÀÇÈuKœ9Ò©z”}–Ï[ £ZNúÃËda‹5ã÷û\ÔdÒŠ)MrfKýÄ#pâ´#Èžu+i鵂còø$jÌbÜiªZÒÀ»®K”üÒÈ%ª=_ÐLç©ÄãÖ|è°Âëp?©ëkÿEDG_…Ñ«X'êÄ]Þà7Z{gf¾B±õQ¯ÖRYX,³œÒsjV5|̇Ú!ÝŒ(/u‚ h[4nÊ uômMA‡­¨1ló•¹Ù‹*óšå×Eí ¤£üÕI`Ä€êei´[Múî­[1~à\ȸ_{žRΰü†Œp¤Ã–ø6“Å‹ŸKŸ:Í%lýòfâaK8 ò2"×Ì‘iœ €×›¯ÊGýFge¼®VòQ }Ï16˧ԇݞö#@*?§‘²ˆø›l£dÈ !h®~UlŒT#øu"9N;Á¯èhW–À¤lŽ4QOÊù»¹êA%óÃÓZ<©&UFŽté|ê¶ÀºBQ¥ûÝ•>û.šy™«Ü¯¢È攣mA(jü6bØ"ÎÈuñv˜]ϺÖ*<¶Á×שø]×çÛ”¥ªTïzãC‹ß )zsMK2©)K¦»B$/Q¢pxx\J¸uÖ(T6ðnÂs~à2Æuc‚ýwú'B¶Î“ATÒ>aÐÛ?÷N½ËxKìEF\O„e¥^𱲍·^ª~…`ö÷“¬=æ)Llê…¡"ÖÜÿÈ6ñ“qÕ°ÚöV“ -`ÿXÖvNSl”.;úýA3-=z‰pDûa…º„-€7™eðÍxE¬cÙu]=Ñr‘ßN~YÌŒ‚iÍmÞ.t޾`?Ö™ì^ŒéoùºW¶ ¨øÜæ+Ù9§ÒŸ5ïžÍy¨¯#ýÀš£­óàXÚú‡â¹“YI°‚0¦7JТ…)ebûí”Yá>'ægÁ‰ÉC‚ÿA•ò‹õ æÜß­ßsx4®!„=Z2ÌÏÀ.½Œs± £Ÿ…Šmcþ¬áýz›… _‡Þ³‰e»‘üPRÕo¾å1Ö‚[Û VˆÿièÛ68w£üMöG8Éì)Jµh†p}÷PÂS8ë)þmûqcæq—ÌOú*«•YyQF9¬Ä@¦o×QÏéÃN-±8O_r¥ÖÙ°¯«Š%YzØ÷U¯m¿¾iJBò]¸ƒùIúÁt3žà&š?øcCéðN† MiTFšñdùŽÝfë½!7Œ°!B)[­ÉÒž«`ÈgŒ]({ÜöMjL¤jVƒ ¯Q¿ê gŽØßû].ð5Cö÷± Ê·üSyñ¡žö´S…bK¬fg%Gɪ Â?Gýn’›±ÀPºx³tîAf^>ŠZ}ȦœÃ¹ÐMè+CRñ7Çáü]“ƒ‘HÓ)ÊTUŒó6~X§o<òéÁ´&“¡˜¤¼) _Js›~é+èx?éRm»Q-»¸;E8qåBèÌÏ{ßàj?´‰®ˆòªž mŽuN¶—©·*Ç&:~:½e²'X“Í+¿Ú®6ðíR]Kôu¿G­|j ²¦éÞU°¾ßÓªš¢é¯À›§¼òr|¹b ãJAæaóÏݧ^‰—»I=äOL;m×ßZûÍÄ3§ücÎê„2=ÖZ@/'Ž¡}mt™c,êÅáq=W,Èûü2ò¥­f9žMÕkå*%$Tk’…&€¶…t‹k)½ÎÅUîlRç„°šìÂl*ñºªFž$C;ス-–yq¸·¥I#˜.bN$5ßp’Ñ¡;hËÀ$‚+×ÑhÑO,ÖcRªˆüªÌBÛtYQü惕cDGb¤—Õ®;‘Ry‰§ sê2²ÏK+›0h†ß-ñ:@m€±f‹6í‹bÖc·7ó`êœ%õ“i-HÁâ_ö -ŠÑëá0?Çe Ý×úŒOuÁólf¶öíb<ì ¦˜°#,sv ³Šm®,ëÑ®G/18¬Ã3$_@%ƒ/$ÂjnäEA_OÚœV¿v UC/ªRì6XâÀƒKŸ!’^ºûsžÚ˜r?—Oÿ7½Æ‘¤ü…¸Ï5ß~àÍ5 y4iwbçU"Ó‡¸ã ºµ[Ol¤3°þ7Äÿðÿ€™ÐÄ ²7q¶Eü_£ÍInendstream endobj 73 0 obj << /Type /Font /Subtype /Type1 /Encoding 326 0 R /FirstChar 2 /LastChar 118 /Widths 330 0 R /BaseFont /PZLGIH+NimbusRomNo9L-Medi /FontDescriptor 71 0 R >> endobj 71 0 obj << /Ascent 690 /CapHeight 690 /Descent -209 /FontName /PZLGIH+NimbusRomNo9L-Medi /ItalicAngle 0 /StemV 140 /XHeight 461 /FontBBox [-168 -341 1000 960] /Flags 4 /CharSet (/fi/hyphen/period/slash/one/two/three/four/five/six/A/D/F/G/I/L/N/P/Q/S/U/a/c/d/e/f/g/h/i/l/m/n/o/p/r/s/t/u/v) /FontFile 72 0 R >> endobj 330 0 obj [556 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 333 250 278 0 500 500 500 500 500 500 0 0 0 0 0 0 0 0 0 0 722 0 0 722 0 611 778 0 389 0 0 667 0 722 0 611 778 0 556 0 722 0 0 0 0 0 0 0 0 0 0 0 500 0 444 556 444 333 500 556 278 0 0 278 833 556 500 556 0 444 389 333 556 500 ] endobj 61 0 obj << /Length1 1647 /Length2 10645 /Length3 532 /Length 11524 /Filter /FlateDecode >> stream xÚíueTœ]“-îV‘Ô¿–nðUaζ g£<á¼ÏCZ‡ßé‡s·2à!èw&Ä`¿½$x¹Íyã†ýDén&D^Ø Êw9 Š^‚‡ Åq{‹,˜èñ_/êö´9*·‡U¨u•‚8âYøÌ…c¬é;XKO™ÉÄÖOXÛ~½îGɽu97àÊåÅžî% °â}ñ™†¬^>ŸþwŒ,ί’`áN¦^=„a½ÇOI©±CŒUAИÄÔÓØF-½öÆZ¤÷ížÅ«/‰rÕÍhd_%$p³×ÄÓpéã¶1a\”pOÖ¤1ÂõØ–{î`Ĭ Àë¶p» ¸ ‡ú³h¨õ{“¡Q²äœVŸ.&½ò}&#;¯:!í¿~ªÚ ?Ö1 Êô¿~ï´Z`tFV8ð•ã}Š×‘b·>Ýxöž¡¬z<ßå¶òÅF'=á²[ÄlÝßÙïÄò‘¥ùuÊÔ\Òú3¯W×êóÜ_Œ;i*r®m¨Óà›Ôv†º‰­€’ýfõèÈŠ8ÁöZ«L’ :N@G/èŽöÖf@ƒa—÷\Ì¥™’½†&Û†® “RCÿ…3¸úD'•,«/H*EâÅë@Å絫¢òZŽè~~Ôú aÁ‡ÛUÙô›.›;l×$qÍÕ‰QN¶êé1lœ8.÷£:¬Tg…œMÝR¯m¼ßQ¯u©è°DJ¡2+þ˜_þ'äMme£©H·Z;îdñÏí‘„ ÆWÁZ(Õ+t„v[=ˆ t¸Ñöú鯃™ß+¯·uÜËÁô¯f8½~ðE‚ùƒdÕùÃt:ø½¦zÓ…ƒ[1‰¯ÈÖðºEØ-Íqà;æ já–«4%ØR¿NØ\ÎTøÞ»}h_¬ýÈ›-ÑÍsòñ¡dÓ™ŽT¥„&‚t"gö'ûãÊFùŸ?ž¿P8íq¶—g<^É"¡ö5ˆYšGvÍqé¹l[b¸—˜yÄm÷Å ÅÑ­ªwÙúã°¨½Í. „Ø£ßex‘0:Û`R¤ãjѳeVâBsÙܪð0”W«¾HO€ §"ÉÑ”FÔF>Íá]Œ¶åµg»¢•9hàZ –Br—›…*ŠG%âlkß´Uçqbž-î|84ªQÂFa|_{f\0-ÑaR@rQ̆êy.]Ö PÎ9év+Fj”Ù«Öp^v )îî‡NB¢^ÿ‰l ݧNÃx篋¿¾%Ä»\ËKý¾•“ÞÒñ4‡yÆ“å½P!wkÌ«3µ,M™ËDך»ùþË‚›¼Ió×€Õғ·ØfIM…gˈh<ÊͯG#)üå6µ>jõwœ™•ä½S^•y9¼;U/ oC.¯Yõòm¨Öfùb¾VeÃ<&ì&^•«IñU¦^®"ð`ðí Ìqp K­UòªÌÙâ×jg% ›A¬Rî/TÓ/¨yî‘ñ,vF UÞ_E—)fn´ ¤»\'é«> /¶If—ßÕXsr!txÏÍ‘[;Cg¬ÎgyZ®êl2\¾s/ÇST‹Q•vsIäVؽÉQ“hxdâûÈòÔyþÐf:×Bž¬¬Ÿæå?‡×¹/ZL‚Þ÷F÷ÍÙ·–ždà æ|Wf$ÌpfAo[âVgÁûCP7—Ù…g²d¼àÛÙA°¡ªocV¤àè‡>-Ô›Û0¥…%é ÅìaÀ i¡ÿx#Ûšww±ÎÁ·bßöíÑRÞ@ ‚Ü͘³sYýêo¦>#=}jž]Ä oñXÀ«DØU?ׂEÿt¾3‹ r:óç`—ªk¸CrDwqªót=|•sñU|œƒ!3­L '¡jIÀdtÍâÐ(Uô^‘ƒwoI0Å'4l²£ ¿Â‚Y¦ì+÷ ìcªrË ¹Åy­ëÍ´‚Ó##æ¨ f@޼Ց;àG ÌMVs ę׸ɶW©0óxgh‰^ äÑ—õ¬"1ªlIñ¼m>Þ| `g%Úw"&òÓsd« ô›kóŽî]&K?cåâÏ©)’¾Œê,l§YÁ3ª –í»ÄA@^^‘=RˆÉ9å _ Ð ]mÍdDÐWê±?fQ)Œ˜È<“]êÉ©4 ^ :.øn'–•0º-Æ7./ç¦DC|?aåÒÖ K49±¶$œ–±gÌcXXRšEáÆa¤7oMR^o{‡G«\‘hÚ7£»„²0×{_<žÈužiY2OØ|×w†pãÌiiT±N|& Òë÷æê7mR.û ƒlä.Š˜ç1ç4ïÕ ‘þ„”¶zŠR<…^ Ýd©;ÿéÍí§ˆ¸òA¿Šn¨fn1ÿÔjfßlѸ† ÆÜ~›CO^/8¹€fÖÌÛðA6ø)‚8Š1Fa‰”£L+§,’Q½QE`â°ÿt¶µ«Ye¾«2V{ÝËç!­c¥0 §ç·Mã¸}º1¦2húTÃæáØÒ›IÒEeã€×h”v¤wŸns ?®nmr$«÷ô­” -; Q÷M†•üÉe‘ny*D¿–B ?±1ëNö.¼îš\Éš˜ø£à(kžÒÊJü+Þì@Í™n-û‰Ì Ýæº¹øÊõП”¯%®Qnš‰õƒÛማ2](ÓiVŽ_>§*æ÷æñb´SÛßÇâì£[c¿vIÁÅ×$É€®”V½›àYG׌óí‡ëË’ã6ñ,vK@=Á<ЋH m:\¤Þ£†r±e±½¢Žëj‡]°:h©Ù—|JZÒÉXDél;U€BpˆJ›M±VÝaVoK=?%¼7n ­ý=Ô'ñ8FäÓ-–¿«J ŸìHšq7˜ªÿ(&ëMúõ*QÏölá"ƒ½§]‰CÓE„rS9ÿg R Eì;Á¹¾9ßDf­•>ñóŠ+€ê 7þ¼íL›‰l"žXÜÖÎÁô»”+ÝP‹îNîd‡ûÆxÙÑGÅ$¥>Ió‡þ^r¶àV㙜‡ÆýS<²ƒ4“¢˜¾GOM^øÞAG™<¨1#´ƒ-ãç«ÚêÉ••å¾"íý\¤à§HOòÂ!¢¤­…qíGubiÆE±†1cÇ\w 7D_Œ0øÆÔŸWÁ÷h#*á=ñ?ª4ëS/“krA¦ÐÕ§Z¹ãaKV¸úu5®3+¢Ö%‚²Âo¬0>§#³IùM–AÆ¿} S±úá{¤ÂÐWž¡yð>1 %‡íc)x$,ËhÊ#±ËÌ•”í)’¼2L@E‘d0rg! ÒSTþƒ£NŒ®óåÚLOº:Ò‹±;ˆ<¡¬„˜&÷çÁ¶–TºÒÙj¦*Tu?wáç– ·›[ÈJå§Y;ËÓd?£SJÚp'ß’Il9L×zIûdÉ<â§ %²ü/1=[´Â“fnåœ÷Û%µÒ¾K H4²Ì%[Hoú“Ò~lsÁw9¨é©!L ÜÁ„Ü2éç¬RQ-bÚ¦NÐA©Y§uü)‡½>ê;Sƒ¹>C)©G\‘p”AæN|7ØC]g,ÚÊl¸8 ƒµ:ÍÅ ýúìJ†œY±ÜJL"ÍFdªd ŸÛ9”·e>÷ÃÔ¯}ˆÿ0j¸£-qXbD²•Fü Ìóg ùªŸ,˜Ó¹ujHª˜X úÏ(LÑî ³˜+EަRQä:ª=(ñïœÈ %‚ÅWÙ,©Ôü4ô]glGªÅ™—Y©³î§Ñ[î*ORŠ&µ€ðò-™–ÇGrA¹­Z¹óÝâÃ*Š©^Ï#ÙO?3ÿ8y =ÌßÔ‘oMï$¯ƒ>ú²èQ**½Sžn ‘ÀGAñêSƒE'ï‹x§ÉS÷Èeךàäˆd×~À:=X¨9{ÁvOD Ð5äåùõOÁžCî°u${1mah¥ô‹Še!Áy.+2ˆÜ¬ã–{)"ISÍ=ô™Ã¢3¼q7WT*PÙ‡‘4ÔgOÛôepx3/±Š”šÃ¿uam3£êkÕ/Ð}IB\GDø…¸Î¯±}¼/á(Þb«äK¨®g8³K«ù*âI´yJÛµQ1Œ+Ån 7۸ׄŸÄ(è’Æ«d‰8`°zØqa# ;Ñ+Êpæ0ö@íWâ\kTV.ä:VO™Í9™Ú·Šó8`†3NðC˜dk ô ‚wí@Ñtò†gC° 8Ã$àiW%żÉ}™ˆwþê¹+e¨8F…´´ž‘d¢ã]´´únuD·03Þ8Ú²ä‚çñS^³W°#iÓH$Rí >âÞeIºog?SY°J*®·—'î’„]xl­ZÕ.((Î=,âWOT³áL|[‹­¼ïˆ€5‹·=”7õAæ{k¼pĆ P¢?ŽšßÎâÇi¹¸Ôñ×x‘O gF×Ñâ§ZÁk?OYÍ‘' ñg`ZÛPÑêIšÑy¹·vòEÃÓŒ³¢— Ú~ á)H{@ÖÑcTNÛ÷Ûèj|ú…L!Œ¤3ë³ü²x†…g¿gk’oî2±tâ»ícaÚ*a1ʵZB²‡ŒŒ.i”Â2‡V|îKÒ®Ë| )þAà}®údvGšÅIôÝÕÉ.-¹kî;¯uÇGÁ¼ 4üKÓùFkÎñî4 èØŒE{ÊÏR°”šüŒY¸ñÝõV¿õc݇CZØRŽéH½¤Ü©cå;Œ[=+ãr1œc<`=®ˆø­SÖƒJ2Ÿ?ž ¶«´îˆ=$C3úÜ<_a¥)Õì}Ç ($ ùèÒŒj´vˆ [©Ø®?"e¨4×~‡š… ×uiÂ<üÈxú#…ªÚë#¿Íû9µ_ñ„Òî`K.çï)ÔÆ)€‚qJDVŸÔ|=‘L%’J&¶D´„ýä–³µÍ¸¥†>}çèÏ;ÌSMqÌ,kàÕGë`—gkŒ®]€TßwÙ§ç ØV¬• ³¾·)ŸŽ2ÆÐŸ1ððûr¾›"¢ö¡ÝCÕIô”ŽªìW¡¢ª+Ž-É? S÷)pΗ¼çãÔö9ø´â8Ù¸NñZ«û®ÓH»'SîÁ;˜ê‹óa$Sbƒ¦]Ð-•gLZº¡äT ~~n+“ìñÆÕ›]§±>úy›D¶ÛDþ ·JX/Ž=ª7`àËX(»lOM!2¬°¾œØ¡Ã¡æó×Ã=Wt4žäi0 ø3œÿ¼'š|ö¾ ÷µ*Wê°³èû:k¬À½àù˜?׬-|4‹°a‰Ý‰é»Žh8Võ+¥ói²Þ\¬®b£½±…ÔÊ@üà¢ï:Lå,fInƒ½›5(H03™KQ%†yßHxòêÁ¿È@Зb½{pe›2µ”ÚÒ3í¤þ“'à¦3‡ýi_›Vp &]}ö”3g)Ò=3ÚÒfH“@ÕøäÞôJ%è+ùŸÚ–ù¾Ê×,TÉT'N+k¥N>oq­øúFm^hˆ!Ó´ôpÇR™D‰(»)Õ°ç\¬óbZ6¡Ô¹Ÿ¢LI‚gN5¨áG3–øwj#`®ŽÁíiV ¶ÈÎ'·—Òïvt½ .‘ÍaÀxü Í2ÏäµK?p.#¥ü”ÉÉ‚ý>EÉBn¿±w0ÚÜ(¸›+²â„ŽÝÁËœFÚ~:£ÕC^y €Ö…øÖe¼žâ².‘o6æÂ½Q!ûÔí§ö¥·ò‰EëÚ³eã&\òò%ÏV[Ƕq…EÚ§Ÿå´àÓ]h#UÔ‡Q ƒ£M ®/½Xn¸j؃xvñuá`„S;ÏăƒGøÄ³Ì+`‹b1åf˜=ý@3…ë‘Sº"ŽÿŒª¢ÊØvt·oø¾ž•®ìàl)'(žï‘ âgym“uÔ„¤×î\†²ÔÖ¦¤š¹„(ºÇu Ià´fRiRV Þ¥+¥Èéó÷ŸP¾nùØ£Qì±Qò.fµ=Ã!’7ý™¹íC›Émù½‰C •3¢}¦íìØu(Ô·ÃŒ€“Eyšª[!ZsÓ§ö Pëö=Â5”ˆ•J Ÿ'›@—eØÅ?d’Çñž®z‰.×çüv³ÏPˆ×ù88ˆ mAÅ-ó‘PØvM1™ë˜Ïç8ŒŸX–ÉsŸz-òÚ LÞ]ú÷<Ï„²æxsžgâ¼2#1M ²òká>êÏ"ì²JUŽ5!O"Útýgu×›s ³üºþ*‹R[k_êGµ3t!JÙ•Xaq™Ðˆ‰ýPQr‘ ÝsÒ¥óÂÏLh¤Ù ‡p/HæK½ÿÒÖ5rL#Á9}=Óö}t–]»0ì¡;¬ššªÔ¯°ý,G-Ƽßt±÷ž7e\)Á”b!òvUò~·®L¥&'hh¬JäåGöâÆÈŠû°Î?$…]`í…(Û0¥LÌcFÔÇÐ÷Ð;’y…g¸$wƒÙâ`šÛšºeìö·'¯Í+®§ç>dΫ‘ðWN©Ä’"´ØÅiõì™Qž~ó!½.ÒbeìG¾/²òýøËϔ䊔#ëû´ÔWá⑳.‚1w%eíy%–VÂÊ€Ül,ëp).4$Ó¡*ÃuÅçæ=ãvã¢Ï…”–ÖãøºÆÙà°®ÉÊp¯¯, Ï7áÞ2bFb}û’i»w𤻉Ÿ4±ÉùÒtƒÕÄäs†zÃ.Ë^íæóCŸi­Fù¡-".ßãÀ'AqvwÄ.Àcº}Q>5ÿt`§ýþtòOþÔ|ÖQñÍ/fbN¨Œw¨Ã[—äK¢×‘+§”Êçô¨ÆòÍ&œñz¥'ª™»8s–Ñ`²*¡œKÄLö®üv§êYÕ3¾5›8;pÁÇÞ‘hûêÖåô@|RcÝPÛJÂJ¼Ý›Ý–5ßzÞ¦ÿæ•yø ðª¶M¾:‰±•bQЂ/ z#[ %Óž ¡ññ=2 è © ÂŽSŸš`?›ëJ†;äSzÛ(<±?f¬„šÄºFv•Ø’$ÁI{x/ÝÄê£éi䦆A’±ìp1ÜôC¬"»»ÝEú³å¢DJu®¸&]¡@Ým|«>Ìr¼ˆûÁ«ùÚe]ÄU:œ®*ä³ÄWÔù:k-Óqœvð¹§6/)CìÙÃ{šö±Ç;бì~ˆV×eMìÅžRÅp¨w­%²° ç^\Mx°ÔÊ9Q©g8q^ÅÅÙ3Î-k íŽ&Ý*k¹SšwIF/Ð|OËüãZŽ5£ß›µ·/XņèzH—Y†¼™]æ²O·_OGò«C3!T~E©UìvJM¯`è÷5]¾9 ]>Õ“E¬Kbû©½Bü I`ß 2_Bš–¢Tè<8.—kã»ý##:…t"ÿƒMÜ_ Ù_RL*j.Ðè“mVš ª_Dig¬· §Œ@ª Ç™ý“¸ìðš¤È»÷ʱ‚¤t“£Ež½#À6Ni¶»lgÆÖOÉi·üŒ®;èEø§&eZ¢%f¥‚¯kƒ‡’c\‰ÚP ÆÖ)"DÅõ“´¸œO’œU>°ðæ9gòøSõ^´Vq±ÝHiº\º9côÙY¦Ë95ä*‰dÝø½¨üÍã³ÑFOýaE²gYÌ <#Ÿ"1ÅI<»Pvl Ë¦Ï7Œv7Ž n®µ#T‘ÏÄðôÙSY5ê"ŸÃÍÈÆÌk1³»ó•wHL¢Äxää”=,vâðÚZâ"ƒœ^`JÅSŠcû½Lú-à²n’V†Å%›wÖð0ä…úX¢{1úûÛ=PÜA{ìßN€KŽ9¬”6ýÜãÁn)‰÷‡ ­§´ë Äß´Çð×ÝHÕjÃ;M IáÒ:‹‚ñnGgƒ{>Z—)I*mÊF4÷hªém»Ï‹Ÿ Ðî_(’K((zLçrýÍÂHÝyk'hzØ* Eê`ÖëYš}Ió¶þ°Ö~ÅÜkG@Á$å-9D2¿‘åêªç·J`"ÐCÊ’ °š5í6@—Áfy¡-Y™XäS)ì}µåžêƒ©i ðþ=9s#£‚®ûÕK[0ÑœâŸnD©±Dë÷Ýü×VìïJOzî qbfÄ]¾ìBbÉ?ÖC¢§¥4Î^Ó¿ïŽæ‘¦YÎçœ>vëÝ«M¡¡‰»)à z2Gªä•îx ÅStü·ñ›œ$¸qâesòtr–$k\ ,µ;ù Ì_] l.M=ã§X¼O^D•ו;÷}â‹¶Q'ýæ &•®XujL†GsaD¦Ì"÷ùœù°8M‹œÙ¹ˆjo:.G{ªñÄCwR‹ã”’i•ŠçL ¢_"ÌËhñFÜýBsÙÅi:SÝ(Ä+§>ƒèH°tùší€ø¤ö‡ /z铨ÐLJ¹ÝÎâ$±%]XX+c¶æ8 ç+k¥Ý}ìÉ7ï…ðÌÆÂ@Á=b$Ø5¢°CÀ¾”8ÆÈ…ܳ棞í݈é(ƒ¯þçw”0X+ØjëWM&Iª¥š`¿Ÿ¯˜›—mc¢°¬Q÷çìï [³ƒ~ú¼xÜé‡üé†Ñ£›T_kÏÉõ*>&$ÃÆ!XÊtˆª*-I~¶¾Ywz2Î^,teC$ÒÀÒ°ä ÜâÔãjhº>rÛd^7ל‡É]‹ßï ›6„ù®×òÆ­BZ6Ô°Ë¢ˆãÅ*:`=fÚàÖ°Iؾµ*Ù¤3ŸO5?îÇ2¿vr¥ÇZ<]†æœ•HH Ûä<Ù„ÔÓ¾&ˆhké=¸í.NÐ-µ4öy4¶÷G à¤i`ÁïT›½‡:5ÈDü€k˜§œxÖ¤Þä¿’ÜÚï`£Ûàq«·gè_VÚýnÊÀú4aT݃è #ý"ÙÝ#ÛÛÉ„¿Ó”ô[v†‘ê’ŤñV% Ïiã˜×ÂC-è(î¨óg>x‡°÷çSòA/¯|9²Ÿ1?±­¤vo ü4K{úwÛ¯Õ;vàiÏÝ¢mi:¦C5ÁáfhÊ»dªŠÔu¸d2+ᦾ?»·ºoðÝúäCÉ´RqÀ2ñ#5QíûFcWñ^XB¤ušs„ýˆiz€ÂšNK‚‘øý‹´ê|œl=µ†¾ß±v& "?+Q|”JÞÐ>»}y]aѲC6%… ]«¿ ¾RFÆÒÃë]£ú§ßHzFásƒµ>Ãb¹®¦$Ƽ·9d;I](aXRg•ë ‚—3jK°ˆšÌµ4o?‘¼Ê¶;X â£ûSså¹åòÈvjÓÕ—Ák––¤1KÞ먋ú’åÇ[¡QFs fÅšÚÌú°ÛŽYï…ÎŒè*cEqah»½1Ì–÷T\ŠsE‡dE·O˜¨,aWú¢‰«s¤ßK~ÓUã &è÷ZàGß#ö!»d¶rÞÙ²¿HBÁ²:ÔêÖxÇß”Ô`om7R³w–µQ«Ë=ý‚_Å6…óe™ëÒú0èYQÃÛ™D|Gkuü EÂNì\±„Zê:‡®È§›†}ï{&ª83<,£OX~¢Ç¥Àç|()p_ŒÆ·k!ˆ¸e°P&V¦#2ô×ÃÇ&$UJF6+k†H÷’ÈÒÉ#~ÂC~â¯üIØe}Žê&=.x‡ù®âY²[Qƒ5Iª#2¢’¬\j¿í¼ýш~.Ö«W)Ô‹’Æ ¯=°Ï]BjäŽ<žlL±ð~´¢\e—×ø°ç`–gÔL¯„CH¹M•“›¹~~¦ïéÃÙK­:£ÊIE—y‹;¿Ÿ|o#þlí•¥—ê¶cK%TŒ< ’Üݱb&ö *£É…£*›Ì®µìÎùý9l;^>4__צíÛK@ Á,ìÚGváXá+RÛ‘àØ ”på1 ݈«HvÍg¶@ó¶”Pž]“Ì$DŠ0d-»Òò„™œ®ß2ôi_6"åõnTC|`ÖyL }e¶ç¡üYó[_‚ˆ‰•bÍXðÑkGè"I-é! Ïê'MM‡êx‘Ek'î9í#ʨ™—½2Èf,ÊÞg|¾>ò·y%­l÷—Ó„ZO¶œœ«¡™‰ !äUÏ#d<^;«ä õ¬+z©u¥Úc8¤ÊDxÂÁ¦ëçeîÈ¥¢„þ‘¹øeFÿ”ŸtÛ‚‘’eðGB•Ñ(ŒèY!T·-óUp”rÝœÁ¤"”GB³Ë"¢v4_8ÔDÎeJ&Žäô¿}aêuOÿÎìøÞæžßï>åMš«àŒ÷k¶aAbfíôÛ†Ž®ïoÆKü„vÛ<7¯%­Uu>áš×ಾ :ŠÌa]üïfÙÀc{§OÛ©ë{A›ÞÅõŸyt Y•"®ÕÝx5‡g£Í?á”`£,ý{½-ÔŒ0&²`Ý×¶}êÞäÓ™g|—šÓùy³ Ã6DÏå‹¿(@ehw ]4Kô¥=Ì^?ÎoDäSóó1îîgö q;Q<ÄŸó3¼ÚýOd'µsÌfʘíÉ‹3_Õ“ÍÒ‡ÎúÎâÆ (Ú>w„^‘´½ti'Tœâó4+T<~¶xžRËz·å ^-}~…­(|°¢gñ¤…:¢âÝÏ'D LÙü—úû…fãÛ0ŽÌçF¯ø¢6ò>[ ¦áDïÐÌ“‡=´) Ï»@-¼¦öw­˜z:‹ÊŒæ7ÖïÕ±3ò×o(Ízî)±Ú/ñÍ1ptl×õÅNñr¸ýtbŽéo_bz©µä`ŠšEª%áUyŠØÝY\¸dÍeŸôÚ˜°öqI/:¢fÈúW¯å3 Yla¤Ñu`*UBÕ ”¬öÎf4¾X¡(ab+ÁsÄkåÚåoWT‹gÚe|ü꟤šÎÇ@ÐaS]Y%›Ò >£‘YÔüƒ6›ßÐËâÆJÁä·CŪð>Ž0±SìÍ^íiúX½ûër¥h¿ÙpCl~ Óîõ‚ú±øý¦åoA‡ò¦pçèkëøæô!TÝääEgT: *V³/rñL|¥_瀣½Ó%òÕ|Ïà-Õ+€>)‰v¶x]³P‰3 aˆOŸÊÕzÃ3pÀÿæ^ü¹)»ƒñ™òýî-ÐûŽbOIA؈ .`‡šçq°üécP¶*°?k'ï: ªji,Zþ„ß]?Z¸P9}Y³]x4[Yž5ÕË×0îÿÑõ…ç(Øá‘TžÿewÕüê«“ò ‡Sz±› Qåkðú†ËÔ-‘°:4÷8_û•â·×’`ÓÚ]»F&±Çç1¾‡h1?ÊZôbR°ð] ,ÔöW;¼á«$óáy ˆ ¾¦Ãt2ó€Ðêdäge+ «JD¾eÒ¢Á!R…Ûï~i‚<>íDi7ÿØûø¦PÝI)Œ<˜axjt¥xºïTdÌJ`Žg4^ò9$ ¹‰9/ï×"§ºÖü%¹PœìÄ‹Àax‰ë¡îìý oÜe«bÐÅ;»ô^›‚z "XÛ˜úÌ£>™¯0Y)dñW’0Ž×VƒY·´Ïõ³üYp>Ýe>Ø?i‚¿ºb×”ê L¤nO ¢Ïâ„6ÂР0aª®L&بƒ®èÇW2vÌ´áA}]bK8C'‘a°þ×N‚þÁuÓ ¸ßßOOn¸¢0í7¥‚Â;óQ>=éí> endobj 60 0 obj << /Ascent 668 /CapHeight 668 /Descent -193 /FontName /KOJAEN+NimbusRomNo9L-ReguItal /ItalicAngle -15.5 /StemV 78 /XHeight 441 /FontBBox [-169 -270 1010 924] /Flags 4 /CharSet (/period/zero/one/two/three/four/five/six/seven/eight/nine/A/C/D/F/G/I/L/N/U/a/c/d/e/h/i/l/m/n/o/p/r/s/t/u/v/x) /FontFile 61 0 R >> endobj 331 0 obj [250 0 500 500 500 500 500 500 500 500 500 500 0 0 0 0 0 0 0 611 0 667 722 0 611 722 0 333 0 0 556 0 667 0 0 0 0 0 0 722 0 0 0 0 0 0 0 0 0 0 0 500 0 444 500 444 0 0 500 278 0 0 278 722 500 500 500 0 389 389 278 500 444 0 444 ] endobj 57 0 obj << /Length1 1630 /Length2 18349 /Length3 532 /Length 19252 /Filter /FlateDecode >> stream xÚ¬¹spfo·&[;OlvlÛ¶ŸØV§cvlvlÛ6;¶m[_ÿÞ÷Ìœ©óÍü3sþØUû^¸®u¯ÚU›œXQ…^ÈÔÞ(noçBÏÌÀÄ ·´5vuV¶·•·ç’¥Wš»þÊÙàÈÉEœ€F.–öv¢F.@n€Ð 4°°˜¹¸¸àÈ"öžN–æ.*5e jZZºÿ”üc0öüš¿žÎ–ævŠ¿/n@{[ Ë_ˆÿkG àb˜YÚ" ŠZRò* y5€ÐèddPt5¶±4ÈZšíœÔ3{'€Í¿{;SËJsfø‹%ä 08;M,ÿº=L€ÿ¨è@'[Kgç¿ïKg€¹“‘Ë߸Ø,íLl\MÿIà¯ÜÌþ_ 98Ùÿµ°ý«û ¦hïìâlâdéàøUQTüßyºX¹üÛÙò¯`oö×ÒÔÞÄõŸ’þ¥û óWëbdiç pz¸üË0µtv°1òüû/˜ƒ“å¿Òpu¶´3ÿÏ èN@s#'S ³ó_˜¿Øÿtç?ëü/Õ98ØxþËÛþ_Vÿ3Kg 3Ëߘ&.c›[ÚÁ1þ3+Rvföf¦ËM]þ‡Î èô¯Qý33Ô“02µ·³ñ˜Íàåí]þ†Pýß±ÌðßGòÅÿ-ÿ·ÐûÿFîåè¹Äÿ¯÷ù¿B‹»ÚØÈÙþ€ïÀß%cdø»g²€‘ÓÿÏÇÈÖÒÆóÿäõ_­5€ÿN÷ÿ&åbô·-Bvæ©ab`ú·ÐÒYÜÒhªhébb03²ùÛ³ÉÕìLN6–vÀ¿Üþ«­zf&¦ÿ¢Sµ°4±¶û‡¶«€v¦ÿµ‚¿tý+FIQu-U)ÚÿÍ‚ý—¡âßApQõtø›ÛT#goú?ÿÀ Û{¼é™Ù9ô,œÌïßß„¸XXüoBþ ˆù?ÏrF.N–¿u31ÿ«úÿxþó¤÷_`ÄìLìMÿ#;Ó¿Óö?ÿ¨M\œþ’ü¯ð·êÿqþ×Ü@¸•E{ž «ÔŒ4—¬ßC¢:}=ÌàCÁÅõªy~UöÝ?Sö¹Ê ß«ƒ¦¸?[=N>ö¥iFz0m(»“—¹ø?H©{ó¾mP´sÐ0ê#¦iüò¾š—Ý‚ÐfgR?Ø™PRÖ/z‡"˜jÿîsõDíGê–ç‡Nöè€äk’RƒÑÒ‚Z“zF‘püôH90:<4Ø}Ù»G›KÎãHéç˜' ­VîA#x+/u»ßo¤õ| £Bf±g Ì÷À­i~Ì?Vú@+Hßê=gœ=7R\·ÃQfR|D”,4ªŒb $¾z.tÿ.ç¢o–Ñ“¢Ò·S3–´n{Ð2HæJhHèûÛyË ÊåZ{™Ó¶´+ü–ñ´S†˜ŒlߨÁÊÔ‡z°˜y ÿý[®sÄ7¯]KÌåò:™¡êÏòV½U¥H¡‚DÍo4èß{DŒ}_ÄY>I lK"#㪒êåa#XÏ£+€MUüüäd!¾'³±Ï„"N÷ð— ‹]—r/ê]Í?ƒb¿y“Ô½¹Žr^Àé¢Â:8ëÊ#3ßn˜‚šîùîØ% Çàò˜½Gzvæ×@ÿ4;ø^û&¿£Ð_P.×À>]Ù¶âÅE¾uZD£Ô¯§ûlK”Éœ{jñQœ{Z)åU©/±ŸdƒvŽoZjüŽ¿<'‘1׸\7-VUk7Ó»§A’=j͸;Z´yÿ…ö²”ûå•eðT!ÂeîyƒŸòë{Ÿd^X 3D­°¬¹ŽZfá1"­sfÏ i·ÑKa8ƒÖDqŸá·–í¦Ù̾ßÔñ…G ËÑ/1YmÉÉ*²\™ª!úå!ÈyÛ‹Ã2jü. úž.rñ_oë‡o"ÀÎj`;CöêÊöÙu`MH{% å¡*peEÄLãHŽâ˜KcX,6AÁ€6ôʹ~òµ8TY¸i’0Þ·kÙÄ=æ4ÂX×YšÆK¤  VÅì!Óâ€?jRk N7 µ½´âl}õš.⛚"äŽ@˜ùñ¡Õµa)KïrzƒpþmD!ù¨¯T$¨³Du3JÄý—½å,Û\ôk½ÍîýŒÃ‰~kIÓSz·ßý¡4™ñ7¼«¦Ã–,û‹Ð5c ¸TÞá²0wZã¢Îä°Iã Lúd‡cœ‘3±zÈ›’k¾îxrý•¥Xµç\í·’îp쀢Yâgqî„ÙL¾ÈýëÄõ"È­ßëãN!>“ªš}#¿½žV¾‡Þ€Œ»=ù¦Tçï‹é]ëìÑ….H,U%1Æ—åÆË½›’¨Ç©eÖ;Ø,"Ÿÿ|îá;¯y†SSÂW‰=O$-ÿNMñi8+ÔdXï°ÕÊ ¢aï>¿ÊœófhXvÔ(8© êâì ¾i~äjÆ\ßµ7‡» Âæ¤õ ûà6“׌ d_çáþZ)õ…[øÍkWˆC¯#€Óo÷å×/ç|¾2¸”µòšý9‰yò.PÊeú8y¶@|¹ ZS®ïhþ’ÕO­¹Ç'¤4þœ <µ?h>ž(Ûu­¡U¾Ö“âAÉÁ`7¼gRsõÌ>69o']ZÎY$ÿø¯¶ÙlçEGµd7x¡rµ´ RRL¢4YæB¹õÄÑ’cc5îœ^Òžµ¾cëàêð9ôóvû/Ÿè9åíÜÃõ„š§„‚Ÿ÷ìô R›=hf¸Bø°7§jˆ[¹sR<¼_B`…1‹f¨PØ(¶¬“ˆò>ª2’•Y²–~U¨cp<œ™»žV]½ù^ý ïíøP­öÖgàãÍè½ 6N? + ‘¼JùèÇ&Îè ”èŽiï‡Û¦»u7ô{ÇÈÙ£?|šÿÄù­‘þØ8n7†ð ¬xÚßèõ üÎI:¹ÔsúˆYútg»g<=›¹gâ웪j£{Hþjo6£6åMegÐûв°‘åÜÃù!øá f2¸C”š¥r&½Ú¼6T©"Eΰ•{£*¯-+Ñçܤ)°à±ªŒe8yƒG&” [~DymQÛï,Ê—Á[·îº ~é4’ÙLç-s›ÜÀÄ(u‰‡À¢"Å!¥­Àt°ªU¸TÛ“›E&5:-¶0cxþ69-b (d¨gÙñx’QôŒ 8‚#žº³‡Ðzí4ù[;tKÓ­d«.º¶9ìŒ@‡ÙÿCŒa¦Ž*-Þ}ýV½µN£û4Ç:GƯYÁÓ*ý»xXòFßwF>Áå‰6¼3=b6u  …'Ù>ܤ¶€MxJe°é'ù‰Êõ§Åøp´ø[œ@ñ+³œþY½çužëôd°%Üo •CÃ=Íx#Í…šá9­æ3@6¡™2¬€Ö‹ºÝ’xîŒi@ÂôB†ûx|sY›ôÚoi5޲å.4ÆÐºÕÙu‚¯çÅë0CBø à ܯ]·wf>+ìÔ™¢v¸å3šàó`UÅ >ñóÝîr•¯ØŸïôÚê1îîÝ ÕÕ¸#ït#N¸mÃ&ÄÏÕÍŒ eóBñ ooáDÔ‡ò¿L¬à5hÍ2}ÂÊÑ-Öƒ>‘9¿Óž„­_&lL>t^±á¸Vú½Å˜6ùí Í9ˆó7°ãù0C!¹‰°ßbzœJ«B~£§PÒÂýÜË5­T&ѫ̶üó¦rk^ á3#V¥·ï1®ëãÉâQRŠŸjü*†Ai‹c Ź5怙°%šã̯¡íÂi{ÖNV¸É0K¨Ø>‚œðbÀ(ý ãöKÈL©ŸIÝŽ\‹õôÐãm¦ÁfI%qX*G*ÿ=nôÀƒuÖ¡Ò7΂É^zg,FÙ·:(‘¥÷ERù–Ã$Ó÷ƒ‹Sû”]b”®ýš€¡SU?`;t¤ÿ\<]B÷‚­úG4mè[hïÂ,×Ý0øŒÒ|!;¤Í˜,'H_Äݘ:nžygB÷s¡ÖZÊìäõ“Æ(ý}¬ë8Ã\ˆ~«âüMÝ‘(6– ¸·á .me¹p~*ç·ã¾üÈ‚éväø€Š1è*èP*Åpg.ZC%è[hKFýøÂ"é#Z.‚Ã'ydSÅäÕƒk9‡]‹›ùz%+Ÿ —èšY[e/7´lª”çÙõWŒEò<="—®*ÚtÉYjH±ú˜®‚ ÃMõø ^®?n—º*f/”å™Q¥ó[:C„ Øzýt­ÏÜ\¦ŒzIWóùHÍŒXR:V<áç¡àŸþyŽoO+#WXê¼àŽ%:‚Z_DNå%fÉÅÆ.~Âçh棉ƒ]®oµïj;™ê:o²í‡)µRx¦^[¨È…Ù໓8˜†±þe, c•æœï² ^Ü¢-!g!”ÏÚ¿Ó¸“Ê ;cÎfnØtyGQC`l`uPy¥s©ypfY"=Îs³È¨eŒ»¶KÁ+•É÷ºÛ6•žJowKuÑ{飸€Óñ¥«ªîò\˜±{pì?â6{öøV‰B3îó•šÃÖ«wSO¡Þ„#ýt¦•¥Í±áyûX€ßÖ²CdMIŸCSÈêûÛ³ª“Òîè üNw J¡Kú¿'-#!e7¶«&DS½;.´ …¬-^DÜ&nåƒËYÔ¿Z]jÙ‰Õñ« X™êB$1`óïÐöSõÓ„’͇Ûù·`‡Ò‡+’…Ö8ÿv½¾™U\…tþ”`(T@ÛéPÛ_Å‹qäÃL¦ÂcS2 ·c†Qå*β@3`3û˜AǺï5˜Õ½ÏUUØ aDock·Kd¾¦¼ù¬0o€py,hmr*q¾RB+to“ÑḛÀ@Dk‚Oá9T)A>i|j°w¡Ý€oXè.x9ÏÌã3ä_…1+1•j—탇~q2ßÃÌ„ãwÛ:§g/NÏ£ öã»3çÁ‹¢Z¥èÃd`ÝŸw¢ûep¶ç’HS=L©ä†Û•?ðý‘"_—„ŸNc$ £;Ò }TGÈC·Ð‚k ,“kn%ûBs/ÂR9e캔B:tß ""HÑÃîB=[’„Óœ9¹ ô3¶á>“8+ñÇ´a(ü*£-³[¡eD#HYx>èá$a±4¤CôP15Ä KØ(…qüE^‘ÛPMÕ?¬„Úó˜> ¡Ø¿is¢YAÝ5m¦{€jóèïG£f?~ûÆ)òàci"€Æ@O¤À[Çç›—=X#më¹:Âq’œÿO2óyÝ@Ýšä›û@É:9{“º©?΃fý‡)vjjî…_O[˜«´yÚ#w3×ãL„y½ Ý3+ckn'F…8›CÈ©yòåÒ¿ù[{|”%>¼õÕÖÕÚ¥»‹ßã²~~þø‘›¿ µ¦„Þ(»Ò¶¹vÒÿä‚FyœÑ =¼ð,K; Õº ·âž‰+ù²1—¬VЉÙvo}0Wó׿ñ€b/‘MLy6ÕŒ—­P—üHʃñp‘VœÀÛ‡˜’{¹­·"´…YÞë^~’ëYjvHŽØýOPZl„Bv.gj·.äl’¥N¿T3¤/ÙÉõdYÆ Y3¶Oûå?ˆ÷ëîþ^éYÊ0¬z°Ú‹z`ø]fÿE¬Šôž’=^%Ï©scsq?<ª¹QAF#u_«ñÅvÕ¤*çp¥ayÓQÏÈh'¼ÜË•)gx”ø‘ñÈ™8•ñ[äòƒHÑwìÔݱÂ!s‰ÁÄUùgø2ð®Å ¬SàÎÈîÖxÁFÊCûËÜÇ÷†{Ññ*¹‚ ºåÛMËèAL?ïΧ9Ïx!mKíÈ~°>Áé o(ÃÅZo¯|^Ùwó+6%Éýø©~‡sü-åŸ%s˜ÉÄDBúÈ8¥ ¦U*ëÔ4%ÒÃó ˆŠ¯VO…û™Ÿ3ûg8»jÜ;]7Ð,ʉ©w¢¤Šæ¢d]"3äÇ&þSI ?ëlóE…9'Z•k ט7XïDJÙܼz`SŠjeôS•G…õм°•Æá„ÛqÇ©:R…‘.-'MÓplŸˆÃô‰ï'o@JærÃ×õ…Î ž}u±ÄÀ·¿¬-0k˜i[ýà>º›öêò‡…3jêYTs7¾Ìe?õóž\¹¯EÑÙÞ;¡3ZU]ð¤Ú_Î\dâ“÷¿^A°fÌ+سª 6L]5ë‚9ƒ©¤,}ÒînY<ñrä$<‹~AÕj%$øuÁ0cí” Üñ½9¦uOcY,DÍÒµñ÷”¯‘±?!ñLïí5ˆÝ~8Àý\j鯻'êô ?é¿ï´«äs@Ú†Ji±Ïõ“•¡¶lœÒÑ­ùR¬oú3\êy¼÷-#B“÷GÆaì}*œâ\‚áº'_&rºG&8¾ï)õ@â:1~Ýxbž+YAŸ’•¿ñ÷ŽXgœ2}VÒ—Žkûö8x7kDÖ%±„»äº<›ŒÄ5Ü„R"8{2]0­]!8§ÅÑRÄÊ^ìï£\FOñX¸pX_ÙFÈ{ÞWn'fCYÌÂ0çM括rïŠE«ïý?ì/ÔÀw58§¯:®ý÷mÔVŽÊxqdX›iœNƒU](ޢƂ§–{=W1rB;ôÀðå °ê&Rù/s÷ÕqAÛÀU¯ÌÐYÎX!—è>¤v-ò‘Äâ%¶1Qïz7aÆan7ÊyÄ;_ÈjRSÞû+öxKÄ7×B·à“;8­ûš4û4¡†ÜMØ"’|.s[AÖ ¥¥ô»&?ÀU€º¬ï ½EXaH—õ•¦j¯MõL ÁÖâ©’ú S\É 7\ßtI•é'‘0Ã9’15;Òy:ϯ§qdâ´mo¯½új¯#Æ;Ì5¡`V¬/bººÀñ2¹[fvÝABW›Ÿç.‹öÁ÷£dq¬¶;yäaEj–Ö‚1(öœƒf´l N¬DhÁ¾N+e¾¼å%23´ $F Ø4––.cx'ýYv¹Ä:İ9_rkì¾3¤"Ϻ$X)`ZPu¨ðÓNégy]/Z[Sçò¶ÈΙ~ÿê:$…=£Æa^owaH5sZ”߉Çô8úD„Mb]”¼h¥´É¨µý\#r‰³›A…jBqh[( òŒÃ7³Î¯å\P/dÐÃq´$.K¥p«Íš oõffäô pÑäæÙª8UÕ…€ÞËø\Öf72žÏ¢ì~¢4ŸGÙ"l>Êž5‹ƒG0zTÜoÞšVµ?=Ò­Ų¿S(I:Nçµï.Ć ¶ÄmÙ~°F"&#œ©ÈùÝ¡•GEç7ÐN±fOÖø¦ÿ<žAȽH*•#S»Ò÷øRKFia¦3´Ï­¢0•<9ßãm½D~¤!8¬+`œ8õk⻬s“ô€™l×JmHÒR ÓNóªçþ|Õñ#©³>áFŒï·#gÆd39T‰õ‹ÝRôQ’/a1£Ó„éÑÐÍJd¡¡Ç“·µÿ´ÞåB1gîŽòòh­WµH‚,@òÔ$-àHÀeèô·ÙVVV~"{¨2Úz !FiÕP2ê'¦™ èÖMu_w ò«ÐÐÈ Äµwáº'MŸ‰:µz™J77Âf‘Ù\“D D%‰ÿ@ -Xçåꡤ)Oê^ÌÌÚvÆ(œDÂé]V“Ð,+“ j]¯¶W>ˉy¾!‹L¬%òƒ± ¬;{ xR?L9÷QäžÆÖ%†VæÅá-–fÕ&#Ø€Lÿ‹‘²ÌÛU·ÙCäψ¸uLºevî_†¦Q¶$ +‰q E†ªhÏ»Ow9s‚wnòÜÊõâäšEº‹.Àæ$¤*ú~H×Û>V0Q£ßl&-zô;F43œÑßBAÍýàKu›œ…ÅþÑ‚<ª,ä·ï,‘Wk­ò…ƒ OæÂÄà §Ž ½cÞ" ç=L$…U­êλZ[§•>~Яô« žì 2˜h™LÚ\]wâ‚/ãã9öO¤–:ŸÖ¾e ØE×vû ñL~…J»:*Ì‘},› É/\oPåN·¬â¢Ë˜jÔßr ¬/åMQÚs‹©ÞŒpÎh^ž²ÒAeÝÊQ+]àõáLþòJú@?W Õ@ä2C]§ -ëM€ŸÌ­ŠòŒÂûn±€îrÇw1ϓ֪1˜[_DŽu?ŒÅ;/¼ÚûF=»hÁj»¬¼p@Œá¿ Âìv Š¥Uã‘:E¿•Äk7êÓ][•›%‚¿Ìê¼×óñr™$6äväã´'DªÞzâѶæâ—ò\ônä~ó„T)v•¥äˆáÕøËÊq¢Í‚æ¾q ¼©½Ä#‰¯Ž¡Áàˆ%ÚY«–Ï”&ÞmúÇüóR¤²¹qÜ(,B³YÜ^Ë+‹õìÅÑ7ÍõSûÔiùÆà•ÔA±¨Z¯cÃ|/ê{]>ŸIÞ–¡è½Ã]iñ/Ù8‰ ¡kd³ÛC/0íLWãjºPÛË™ÈøMOmÛíKgçS+7>9ïÒÛnÔäíŒù‘1rÃÄnr¹Ým‹»è9ÁÇõ5,f[ ­Y'Éuž‹Än]}¼>c(åkþó<³þHr”[þÎgHäEK!ñÄùDw)À\u{ôŹIñTD\Ó¶»*Ì/)Ç•j„•%~Ç#•¿2D•€±*>‚ÇËxÇÜÅXƒëý$Ãt£]æÖ±G!Ì M^G¯Êry[,ŠòdŠ«ïwYˆ£žJýë;$‰"¶PÁÓ¶à»0î ÿUh§w/7;Ú ·ý+°óŒƒËÇp\uHp}ÃÇ®v˜ÌVºðâ0úf¼çN§CñÚ¶ø‹À»<¯RAØNK¶^¿%„kkd¸Teè¦ÖÐEÌgòbòÈ.4/Õ¡áÐB„oU6ÉYµ h¦¤.ª1i­ÎßbjÆ ¦$l;Op*ÓÜÜ©ì‡õuÿ Ðm®‚ö0Îþ¹;¥«J×ïµ0–R€{hÿHÀ’µBmá”2Mr°p„Œµ'ͫڌÚyšGx”ò¤Ö2ÑF²=ÅýØ—_F³ñ:QÓku`Õ,d¸ŸŽwñQâó‘|Yë-E´S”ÀñÓcg8ÍÖù}*ãœiòt£]-"g7ó2X9SSò,º›È^ç¡r²÷Ì ¬•WÃâ“=ÍAÂè—[ƒ}–Œˆ¦XÇøÆüȶÞï¹Ç.Ög$Æ&…qÙ¡Wiï)TÉ$ÀÖlš&€ †/™{˜‚aD—á#œŸ)–úï‚yŸLµ†~ªœ¢ÏXpRŸ·E¹dZYüÇ/‰¹™a®ùI¼$’GL5Å­%‘f¸2ÜdYbyâXw¿ð“¢à¤R"ÑÈ'€ò`?wnIXÏhüŽÊäW™Žùƒ‹6ÎŽpðxƒâ ³x ^ÄSZÉg®êxг„hÝ‹)ŽŠæ‡³O“ü¬_š}ô;7¥«Óq•”1¼£â~±‘\³l˜Õ2: ’k¯Ô«»Ï`Ke<ÿ ×L7Ü^Û¦„Õ(TK'¤­ênÉ…%<¯ÐóÁ5ÏáYä«ëpB=7"h”¹õcÚŽ a눬\Ü6m× ¹–Ãêúy]Û"˜ç›)Áz»“¹=Œ–?qàÜíÎŒ¬žÂ¯ÔÐË\Wß+ÈGSŸU_I}„2ITj(HƒÓKÇÓú• ½£†YzmD%Í]âPƒó¤åC×sVm$ú"ìL»NœˆòŽå¢ã£ïPîÜvTÜ²Ò  oË趣ɻu×;$MEѰñª¦ÅÞ]YÀO©JÉÖëÒ²‚Œ39vmV§Æ“‡˜/X<ïõÓ òblÎd•çú¡ —‘>3µsb¾P¼*³áq™‘É\—ÏODð¼,Ú.£šM,Ï¡9©á(ÔA&¯wÕ¶FI^*Fª˜vŽd³ÂåËÓzv¾q¿¨‹“83~ît¥ßW"òãášæ•+އ\ÖÁÚûŠüªŸÇ_^úxÖtë{»„|/ÆØT/ÄËâ€,8:1s˜G?*àþÙΰh™¹1ïI‚?“ š¶³ª§³8bp«½åÙå¾1¢1¬w‰ÃÔÛW”T²jÕ§„:ÝÍF6”i…vÊ€_aÖÎÀ7@ ×Þû#-f/¬~pœ{i'…aÇ’ Š»7½2–‘‘̹1:9Å%„2+¾ÛÅòGÃÑ˶Nâ_"wMÙž@á|‡Éq,*Žç6Ù«ëJ$ªÔ+VE¹qƒþl-Æf¯];ÎÃ3ß– W®ˆ—• œÕƒÏ´{b´)½t\ÂÌ ”y¿4ô©¹'ó±äßʹÕXq¡Yœ—[CR~›ƒÛPsnV-émùgùD¼-×ø0sC€PHÊh4ŒÍYé}Ýd‹›?¢¨=%È™ËÐ^ËçØ^9n¼#ºÂlú¾ÞX™†š³ªfaå¹A¼o·êÂ{°ÔQ¤½›©rû¸+h’€»ÙRïŠÃð?å9Ζ]Í—yžìkDæªP'ÐÿCž7 -¬Ž G•¿åJ)ŽËzŠIFG7Ô=®ü £ÛÎËMàLV{¾ Øâi?j’ OÊã!5‘žJ•ó‚u熴ú·„ŠÑ‘d|LeòØJ‹N!J(UdÝà=̨ûpÝX®·Û¿ßüÅy÷ä[?ýÅD2ó5JtÕeœä¯Uço¡3 /}wg«‚ßÎ]]…ð ž2Ý‘„àà?‡±!¨èÄà-Bñ‡M{wà'¼Å«´èËŽV)Ù<Ë"F=Ïï;ÀÂÅ­ðîÎäògÝY¯_ †t «_›"÷gÓ‡°ØYÓÓ@Ϩóxbýex®É ~ÔpJ{} ¯ÚªàΛÖÜb`ŽŠçwÃrÚøÚ¨G–Ý…÷b^¿€ªxu `éìÊ© +0›#I¨Ãõ7• pj7He!ßÔÛóØOncž»zÂðý¤ºHÆÙF¾F®™{Zóó`ªr‚E+Y¡†=‘ã·p~I¯—(¤+“GªTŽh¥À¦™ç‰m“ͳ¥ Åó§™ÓýYÕWò¨¢ ¾¥µÌ-ˆ Úãâ‚Jhÿú†/t0²ñÝ»¥ÇïIÿÄÚ¹FÙjî/¾ ï»{Ôðû(È%4§[T‰Nç#ØfÆ!Xu8{ôr¹'~tZÌð‡àAO3P¶ɤþ)aþ|+K×`q ‘èñ©ÏþLWÀXé!²†õâåäR_Ì¥›íw\Ìù„æm<Ñ©V7 纇gååR³\Í”•ÆA×0d äàÎýž'@²J7÷l-dóD)°sç,é ¬¨<>ŸAäUê!*)–ÐÂÖïÇç/üÁ-…AuÅ ˜$ÃÉ•fZpÁ‡2ž-Œ¨ñôà"õk‰ZSÉ•ßR±H ý”r8îSŸ e]ÖÙ5(0Fè÷à40r0fxäåš'R Š<²`2νLÅÁÜž¦ÆDôÄA^dáu¿)-€ß’Ÿ4‡LÒ wyûòÛEE~¹àyªZÛ7Ž ñB*ÿ^ÃD}Á\Z‰Áa±Æç̾6S´ûпÒÝO„¡‚ôCX>Õ*ü¦‰\üF’‚¡U`·gä«ï§U!£ç òá5~aÜ 'rï~W3\T®²ØÝžè#kv\t#Ún‚´çEO]“"n•að:úUêŸ<ÞÚ¶ÎŽªž¿sÅ¿BÞ©IàÃ*­<¸¦óô–&HLv“·:!ÞC¿87¦|!ã1å-·S˜QÃ_´L¾™\RXö(_V„c~í9Pß÷ì³Ak¢½àñÍT¾Øšï,ÄÚKBkÔkB¼¸5@ãmŽ-d®íîâN5똙¸˜j6_k¾€Ãò«@³C"B®Éo Rï®ù°­%‹y…I2Ý`×a[0ãÙhiÌÜ  2”‚F÷ÃÜâ}LUw ÈÆ øc#Ç¿ €/•¸ôÂÁá UD@bWQ9XË5â™zár”szoðâç¹O§íöý8Èj?œTègÄ#ÉI€Q[Ow0áÕ+˜‹VV0ÂÔ4n:$ùI^s Ú tÆAYvH5ê[ß~Ç$[ãUbQœ² æ¡o&3DpßêùßìpV-hûzP†ôêŠÛé±k%;²wÁ óÑ&=a1+Jvèº^èÆw<ÕZr~ òÚôê*Y}þÉ$Ý «ô™j=>j`ð»Õ0ÍQq¾`ÕÛãDÔ0ÅíJ\²®»™e¦ïÀ ÔGÞl™{–›²NjûbL5˜)yi]©tQw»E¼è­äµMNîLS‡>ÝùbdøPp¢ DÞöJÁÌÝú°¦A¸˜;£åËC²Ã½å=ðwуÀp:¬7ßïïÌTú5Á:.–©Y\¾¸Šˆ ˜â͌ԓ.¿xºL+Âü¹I¹Âén£]³ú’Ó)=•ʳÇàºÂVEt q¹Ï³w§+•D"šÁ?M? Tè5jL¦Ô ©Ú?ÐT™órÇÝS$ÑɽژW·Ætnœ;®†r”ÈTR 2•…\¸¿KFèÙ?”ùóø]Gþá¨9`C/í.†Ì–¢“Ö®ýÜêI\ãíZɇè dnÙ«6 n並îà(ÏaV'¢=J¯™›ÒD"¨H$‚Ö™:ž-~ñ©ÜÒKA[Ê’EY¦®>Dãó Ã@Ãy-ë˜Uv&¼v¥‰¾]p/GN”ëÑ#E’£ÓÛïm1HáÛèZÞÚ*·ÛA#F6õ‰Súª!Žñ5~µý`Ì@ðÜ7Ÿ˜[§Þ1‚½÷™£w‰Bé« LtYü¦Ì ,‚“™ÉÊnOi}FZŽœ/Xö†€›lb•õ:Lÿ‡?z+@Aö8*'žœr¦F¤¾ìo?©>4_âfpÛ¢ÉÚêÞwíæ ûFOäÞHÞ D‡üÈÀÄ`W#lÓ1©6Á’Ô??LòŒ<¾HW£xÛsˆÃÐU¦W„‡›90ƒ-´•S¦9ƒ N®·ú)½H“r½)àîB  iæA;Uò¢:R:äé2[=hk™­,Ë•5RA£iË«øù@ShMª0·w@»ã,ý((kZ¿]0§ª*Aº-’ÃúǪ(£¥ªm3ïSJ–Åõ&l“%ÛÁoš› >v,࿊ºÐMˆ¹À¾eœŠJ 1;5Y´Wýø³¿³áÐnà;Žà/ÑÎAl£î𠉀„Ó*[KŒeåýGøK2šÙOÎ;ýr¢hBGÛÖBîS«7µJaæÛAÜ CX7ÒVÈ}í…Bë(ý…òiÐþ¬¶U0>ºÆÜöÉD†Bà,ó­Ù¼ÛÁ“&nœHñ펖¯ ÍÖ’úxRT´IT¢"ðøEL¶š4øÃ/AÈÝÖ§UÅÙw_µçàé°]e 3Ý\­©ÐEýÀ4ž;Â*9D(›”©Ô›å§@-ilo ÿQˆVÅaF|=ÑCàÙ(Úå´þÁг7µ±tv\> „ëªò¯Ì™ò‰td¹JEpÀ$ý÷ƒÝ~ÃUÄ tw7VÍ'÷΢º aZkÿNž¥°] ‡ØžQíeå9]xÑmgLÓŽ8®]nÀ&×Sø¸ø fV˜öµôíf|ìN»±³J÷a7qˆÔ€çÙ£˜O{ÝéO ðpšÅ+SlÅøêèF61"€÷<Ÿ oò¾pܼA§ˆµºX;m'‹ÚŵœêÓuYØ¥tg)&eVžÁQT–³KVç'ï9“Rfá Å¦ F¦5íg »‰"o×XŸ[†t>¥y§@, ©Æ³¤6ÿu랇Ú|‘ºÖîÕO«¸\°hqÇþŒjíýbœaDîöÖ©&öEÉmnhS«'‡“ÝÒrSçŽÓÁuükì«y?A9xÚe’ä;ÃU|°I=ÏÍë@]ß·bø@ê]à¢R¶ÝN¿H•?Ÿ¿£ò<ªJE-$¡ù1ŠüQB¥g¾Ød\} œü‘üî ¯g¿,™bÏ÷K¢ØR¸M¬YSÊŒœ’þñáF»ï²’ºÌsUºx1©˜‘¥‡`€L¹`4! 0e-Ìg€·– m­ë—VÛý¡n5pÞs—­êÿÓÛ$û¤¬¨DêO*®.=Q<ÎÊéêZÐ éÔº¾ðwo‘*2-X"zrBþ†€7î6F}µÄ‹øž¬·H4JÊ :ÌÛ”L+º9 V<‡Íƒ–õ’(‹’‰‰¬ºéw´0ð)ŸÈ}þ®²ì!šTӆ嫊†=ôí0ÂáBÑå°WÒ¨ +ZÌDq I;’¤ç`M[Ëbþ@k›iÚMN2I¬áãƒéÒžwx9fMe¯÷œïêÚòWÉ3ÃZZɯÜôçƒîHËþGò¥;Ì&ÌtÕž0{ñ/öhÖ°‚­`„íâGÛ)‹ÌTVhF]²jíŸu²~gìÉy€âUí|„ Ã!ñc‰ƒà±™¿C½aËFº¡Ò¥‘{Q/â@樷ëEpÙª’õt9®u4›ªÊnZìZÐñÙ, ›‰BÛ¢‹¶NðOlwdù.’Þ»ƒ´ê}u`±Ž(‡5úyimqýÈ+“f>74S¶ñ„îð ÒÈõT±kö<,#áea®k,WEôR¦oÈÃÕªƒÚ›¥ëëŸBÖŸp‹r Xo×›—‚Cºiä·ˆãØšë8ÓwvèLÅË‘Tknž@îY¼¹ÁãKà@ýú ’Qíð„*{mb›ÉžS]Ÿ"33ã&+'ÞœŸÈQ¢Á½ñ¶Aäò5ØÅ9õ¬âHéø4ñ\#NÃ9øY½jeóË•áë2C²d îRé ®SÌD76@2“´͵¯ÇÃߢý¸†6i§<…«ØØò3TŸW¹ù¸º; 2ų±’~ÂXæéë„äOTj‡„C Žv¿åa@¢myÈ “-Gï<[‘ËO4Õ#¤ˆ]çõÞ—añ„¨ÕïÜÇÒ›ôN„VA*8ÀçòCrAS>êT߉JI×vÚ#Ðï¶ò£^Tx¦Ë ÜÑE›"°M¶»· F•ÛPú,Éœö}Ú´• ;¿}ùPíÑlÓÛ!#VG†[†zY!ˆ-S8”Ôåzë5§Œ^eØw6[õ¤¼îX‡S˪í¶t„uUn‡…ä:“Ã!dŸb|‘ íø–é†/îœqò´ÆŠO^JùG›v¡>:ª'T‚0 ­C‘SÆ# «ø™Âpa‹@»<Τ¥9dÝ&k<בÑäØ{š{nôºË¥iã߃‘+'‚ä_ÑPŒä™ÙqšëD›¬ïfmjSvqˆ)¢¦¡f÷šÈ⫃QA~!É=g2QúV}vÎI‹ Pðå“4$‰JLˆuh裚ÅèãtD¼¶ó[Vù¼,ãBr„‘¢3]úáÃ2eÕJjn(Ý«ø)d¯DØè¡H$¼V f·uÏÂqyW©Cy¥PËà C&õš¼QR`uMç’z‰Bî’óÄ0Áæ¡q÷igÃÜMÑ'ˆ[NW-wU½8£J;‰(ÛEó›œsgbŠÊK±ŒvÅ”ròðáî¾Ú6§)iEo©ÉjO°Í Y±ËSËG¦w¯@Âq߆² 4 ¼Èo ñ¿˜ì FŒ)]؆U|øŠÝ¦3ì:eýdƒ‚|4ïìMøÏ$žŸ[Ùç¹kƒt‰á·Úy@Y¢ ³•6Éoœ‰5%)—§m9|Wx\jØ3—o-šêÉëð*|^±P/ XÁósØg•¸ê;€DCŠ<”Qa‡h™Z˜Šm²xxaª š»†AŒÿ9÷»¾ÜwXªAÇ#V—Dmctœ`°N ²û™Êz£ö{ÚÛ3YœÚôé!ˆ@cëÛØ-U+qG¸ì§ñ[šã—›±ì¶iCaW˜t7¬Ý[‹©µR¶yR;ŒÛÝ †}¦Ëu‚M;‹ÐŸ[jW2–\´£[äB åˆ/|ØK<2Œ¹lßn,ÖDXþ€Ê ÁÓªßÌՋ* fr d©ÑklÛA_¾D©ªóÚl„êµQl˜î‡ˆá'‡ÁµL ³&jí¹0œ#nÞp0?&ÂGm_Éw“fcˆxäÙSPXÇµç§ £å8½ÆB>ÊaèÎN¼†Š<•R“Háþ‹Ïöb¸Ó¿Õù¬¿vOû äBÏC>eGÁ ­jӴΊ9‰_÷½†öç.¿+¾é%òUšõ«îÕ:´jQΞڕ³#NY"Qtð¯õæ#4* ‡Tö(*ù«Ç ¯˜_*èœÏW>ãÐ>É"Oû9zveÝ7¥B.ôò·:†ôÎâAn+üâsço¸Ypý%Gj”1)4CÖ†„Ó«¶s5úSç4á6$Ñ#Ç”J•Tâì­•›!’‚E¸n?êRo_]xq®¯µ¼_$š|c¢ Û\|úx’c‹ò9&øô¤à')ðV7@°4Ñ‹L,p²’ gJ?ÎáDÑadLPŒÜÑ™ÚhgWfHL?ƒ]c®–Æ2"µ*(: ÕÆCî?élXÎZ0¡‘£®s”Ž‹y¸ˆòy^Û>Ý`u–8Ø Û˜ýöe‚yÀd( èKå.\—yý]ÊéüäÝ«GBic1Ä£ªôºJ“#¼gËëå³ÊÅ©#ÉQɾ0ʸRecâ6¢f« Ã×€µj„”þG²0ô{ü„sƒ5§VÝŒnt ï;8°wÇ Š@Ýirïº:¦¹N€|úV+nŽew;.7ag»dÖÕÒü^܋ʼ7ç¾ÍG¹ÇgH@¾t«Ú4Aðw3[èøoÆ”üËÛX¡ Úà«TÖÉÑVØžv¥ ,ë”Y|Ñë¡?–” cFæ”ÎÆaÞü™YºÓ0¹ù(‹Í~òdÄä‚ñNU~Qž¢.m}E¡(x}qä+Þ€(…Pvòy]ü¢#ÌëE“\«…ÇóU­o0[¥¿ž¸†ûL[vr,pªJ5Ü“Ïâ0b ùа룜xÒþHP'Bb%ŽÝ’ÉÓG´RZ5Â"ïübDÐ#øáøóú»4HÏ›‚%ÑwõaŸ"Þ£Uäo¬ ŒVÑ ØÒbk ½þ¸F²§Ÿ—˧4StnøXQ|Ì=ió&ãÃ^£ds×ë5V»]ŸÑ„õgï§+ 1}ã”8ÂðÄ>­¢JÜ`þ¢ü@%>rƒÁ4d–>Ç<:ø-[s‰,@x“±—•jíŃ¡k‡ôi?Ð$ò˜»r¾ÚœI{†Þv" §æ8J¾*mBâ[± éîˆo¡»eJω”Ô€ æEÝäß#_>lO…BŠJàÞíQæ‹fâG… ȸºiB8,CÌ0oeP–¥¿OÉ¿:ŸêŽæ$ŽXx«‰8ÜF%Š(áwìˆ.«=žÔˆ †Óƒ w¯ØüÑbÛûŠJ7ç•ÇF²-(¥ãµ|ö ˆeÿ“4÷2«»ýr©÷W»„)‰Ò˜Dgÿ—cìïOÒzœØsÐ-”°iË¥J´³sš(y¡n¡>åÒÑ.¦“É@ÍÓn?K§ÌV‘ÁÚã Ü·ô€Â\𔀛õ#Kîyù{—‚¯XÔ*×&}÷ñ Z/ãYMpŤ•åŽ9í´p!ÒN7œ÷;øïo͘¶É¬©·¢.›ªáˆ„άüÜD^#rØxØÍ—«Ð~`Y\yݤàŽ_©'Ÿþbƒ;n÷~ÛGÈöùž.ÉŸv©“—¡’¯æ^ƒí Oœ˜3»Ã?tGÐõÿµ3ßÿP8 €mgñEF‘‘ñÅápw¢—qá$#{œ½e¥23Ï™ÉÌžq8+”$»Kd“÷x{?ïó9ïÿ W8™ô0£^{Ý`>Õ|u8`•”79O‰©R¡]€þkåJ n1!Æñ,·@r5uCíº±›ànÁãKZèpŸ´{Øj5™ÇNdQ¿.ª¦ú0}'ü÷–eŠÝ²…0.eè>O¬G"ú÷Ú “Þw¶r64mVew‹Õ& …!Š6 ÚéÕ‚²ëÕÏ„pßć¦N{me‰Bpúë0DîbQÓå:ÍPð±@ºäóÙE"¡ÜÙëa55íõøÇÁå’sR­î3£’6žlof›u{Ú†y!mc:[e%º†N3Š5 ¼'àx|EÚ®œûëƒ•ÞƒŽƒÖTʛ먅«ïÖV{iB´ôZ6Ô‚;¸õ€9h8"ÑÇBoÃ<1D·Ä¦ËEª8a™™åx\>¹`¥`¢+²"Û$–t_ñ]4¿ Œ˜PušÃË…Ó$‹tÿþcðfßœeTÈS¹ u›)®DÃAÈo4I÷Æå¡Çô¶8g‘BîA÷ÕM@ ãø8Ó1Ç)5gñäTÑPÏÿ˜áI[½Œ¨? Ï£kÄ0ì+l™WÀèKnL‚‹ª[gÜ ;Ä“^`Xn?«Õ-À“6GN–¯“<ÃÞ±Ç?§û÷:Ï”ìYµ¨>ãaŸ”ÄÓ»â;n Ù ´ö+ÃÕŒ_»ôîjò¢[L¨xŠHÅj!Gtýyl!Ò)¼å¶Å冎ÒÓuYMoµþôuçU˜œ*ósBQþÄ¥4vès÷Â)ããJš­——eáo2`y’®MÁŸªæÒ7r"…RðéB€ôëN.2>«á±†±_ jª^‡¥VÝÂ5"{‚¥=Õ?·¶­V8ü³²?ËÅðÁI ÊI”©kÆvÇÍgÒû1(ÛIqçcÀ½™F_p]|É©± 3ÁHÑu}zÝ\‚á E$ÎÎöLh\s<:2—Ý\ .N/Éôð¶j¯—ô‹lpí9‰õ¤4)‹£à6Ú–ë!ôŠÉrÂùs60 iäm”ô·òƒñй{,KÁʲwÈoDŸ sr5åâdŒUBÁ'0%¯zR¡¬ÝNÈÜͺÃdÕ«aȨõ­ ¯r@(%?Eí¥×Àin? tȆÓ$ïhú]³ÃÆ´ê¾À}ŠÐñRs¼„d6‚YkûNŠÀá¶Öi(ö]Vï8ó¦þÞkª—(è2ŸF|ËÕHŽœÂñ¼å öàëÍ}S«}¥šBS ‡š}ø"Xî¤[)â‹K.)æ J»‚Àõžlõ C̹°Œé¹¢°"Ù•#7:ìOùâ_®thoã%ºÖ†+÷0®)ôЕT<ÿ#2,U4ôJ^ñ…-MöºÆƒ]9àó/M*°H™ˆºµ^¬×ñVÂð®ÏÛønôE!“Å•9õ øÞ›V6‹5¢dDö{n#™¹–Îãu4ß’cð­FúõÃU«)Ÿ¢niýà•×E)SQŽ`tÝácÇfAAQR|ó*èoŒpxs æÓ:Kë~Rþw{¿?B´Çxc.p1ÔZ´M£sçk´öc~:dëÙUý.”`€E~Zέ•°*¥”{RQ½«èëÓʇ֕µóªŽ'¶G+ŒÏÖahX?ûîÌædÁ#]н>Ÿ ì™3„WéòÖ:A^ i“mÇVÆWÃe©þRnÊUÍÒ¤ÁÀS*L¸V¤(üðÜýEµgy¦Òpò2³Ûe‹µ^ÃyuY,¸«Âútóþ Ñr[©å¯À¿¸¨–ònˆBë+{¼2^ycH¿gë5ææ¥Œ-ÔÌõð)S˜èWø‰\näYVPûŠ)ñü¢%zwfxÚ }º³µ¿Agè¾(Zx+¿*ÿˆôyýrpσî3»˜AJý¼ã|Üòçç< ;Df|”¯Ù+0¬ØÙö&ItïÄnœ:ú ÅP,lÌ9ƒ’§¯ÇK#) ~ë¤'xXìsc \ŸÓCÕaq(Ô׳Ö0„î‚nÙ†?ib!ëtÇDs½#MŸ¾A¢ÿ;Q¢;8A%Ü)ß{îÉ,RæKüÎ\ý≞iH<ž<¬eUrŽ«?“8Å‚N»Ü£žÒgLùU´+ è‡`¶­T‘©Ø‡áŸ‡ç¬£h¥TáÅ@z H7î¶öU ’î¬>r\²Ö£Ï–oS¹)ç`Š|wD\â÷¹l˜»ýóÞA&“9ªpwÅŽ*Fû¾ ?Û© ÏLt½œŠµÝ™ßRTý0SI¥ixv]Jg”Ú~n€cüCZÍï‚ ¼u üæFà’²®ÆK[<<J¤ ÂåžÚ>Öì¡U4´_÷¼Íny ¤R=잘7|™œ³¹âäitw¥ÞxIü(9tl1+ªHÍ[•Þ¥Ok’ME,ñómsdr×k³î·Ã’$^ ø½”BÚG{¥†r ö©®6trÖ¿ŒÙfL›0³F*ó¦U>ðx~\Æõ»qÕ7›hªpÜt©ºëR1±«ë͇ÒEãTü+{a8ÌSAq‘·"ú€h¶C$FÛ KGˆºÅ ¾jp?Ðÿ—Й· ±pˆulXdkG—;äiûå<ÿ¨tCcl58x¯µ(n5£ÞÕ2š_Ww–ޤ®Ûûº =Úâ›üá’> g90O„ø\ oø­S¸—B'd¤;¿Šœ-6ÔS2 ý²hoQ›k÷—)ïeÓk &Ëfî #ù±¯Jžé3a^*èÁÿ%Æÿÿƒ›ÚÛ÷¹;ÚÛ•ñ?ñQAGendstream endobj 58 0 obj << /Type /Font /Subtype /Type1 /Encoding 326 0 R /FirstChar 2 /LastChar 169 /Widths 332 0 R /BaseFont /HDVYTI+NimbusRomNo9L-Regu /FontDescriptor 56 0 R >> endobj 56 0 obj << /Ascent 678 /CapHeight 651 /Descent -216 /FontName /HDVYTI+NimbusRomNo9L-Regu /ItalicAngle 0 /StemV 85 /XHeight 450 /FontBBox [-168 -281 1000 924] /Flags 4 /CharSet (/fi/fl/quotedbl/dollar/quoteright/parenleft/parenright/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/underscore/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/copyright) /FontFile 57 0 R >> endobj 332 0 obj [556 556 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 408 0 500 0 0 333 333 333 0 0 250 333 250 278 500 500 500 500 500 500 500 500 500 500 278 278 0 0 0 0 921 722 667 667 722 611 556 722 722 333 389 722 611 889 722 722 556 722 667 556 611 722 722 944 722 722 0 0 0 0 0 500 0 444 500 444 500 444 333 500 500 278 278 500 278 778 500 500 500 500 333 389 278 500 500 722 500 500 444 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 760 ] endobj 49 0 obj << /Length1 1608 /Length2 9393 /Length3 532 /Length 10248 /Filter /FlateDecode >> stream xÚíweP\Ñ–.®ÁÝwww—à$‡k —Æ!\ƒ»wI€à!8Bp Ü-<’;3wê¾ù53¿^½SuªÎ^kío}k}kïªÃH«­Ç)k¶*] œ¼\>¯¨¨(#@ìêã²³‡X tXÙÙ9þiù°òùwÏóNÈÎÀôüá t»:] Ïÿíz@ jØ‚œ€ù—Ú¯Uµ”,ÊZe  ÐÝÒ  íaå²h€¬. +ÀìpúÇ` v±ý) ÂõŒ% X ®@kÐó6 ·5Ðõ‹à twA Ïß`çné}î ¹X;yØü!ðl·ÿ%äê~Žp~ö=ƒiƒ!Pˆµ;È xΪ­ ôžP{KèŸÜг¶}Ž´[{ü)é¯ïæÙ µ¹@P 7ôO.+ Àqu²ôyÎý æêúKÃr±û'€;ÐÎÒÝÆ <Ã}{µ£ËŸ¦ ‰þu]lþ•ù³<ysëë*h¿bÿ×Ûôo”ö³êP}×gbÿV‡&Øæ?0ääÀÞ?N^a~'?ðóaãሠˆüùþñþs­i uyÞ<ÍÃû·ô{ÿ¹2ýEk°ÍŸ9уZºØ<Öþ¸­=ÜÝŸý{ÚŸKþ÷õß!½Ö‹ó`kñ0‡Œ¬÷Ð:’¼Á1…7}=¼ˆƒá®eúÅ…A5àO°Œ¨5Ñ*‹‡Úp®¦q±ßí>sû®[jlÛÃ=ÄNÌŸÒ€G”ô¬½…xËLÂìÛ!ÜfeXïŒÞùÏj¬" ñn¯éèš•> Pwò»£_³Ñ{2\¹bZ§7Äuá6Áá×í0%ÿ¼¾bîøtŠÜ»EÁžÎ(Åä–K!mlPåkUÊ›Ü_“ÒÑkÀ¿¼pJܼÊ0ÞEo¬´þîwPlqñS¹7[:D((éñ~9 ù½$Ðñbó>=Õö=åÖ…í×8éÀ¸>Uµ£ e_•ÒòËö“±J5î:ŒýѯŽÙ¢ƒåg›¹(u–\ŸƒŠ¸î&[ÒÕ›Ç$kÑ“” Ó V^+ÁÒÌU{É7ŽMÓÉE°0Û@˜äï­‰½©RÏ÷w5ÍtÜ—XІ¯׌÷£®DQo)£…sJåúëÃê;ÏÏ=Kç7©O‡5WƒD¿îª¾ÌB³$ÞÅ‚ÜÇëQÚJ*7kd*hhØñ ìɳGøo,šdVŠ1FŽ9Dvq"d,Ùï„OëóaGÅ,èÆð{¼³7ª ¢r|.´¹Üjï_°Â¸üî³ ¼BlÀ6ñ^pžmæÆIy_÷™ù¥A¤m§ŒV°mû8ž³W+S5‡_£ú’TËÑHx!n©w­:õ¡âó@<2Í#FâÔ¬BTøEˆCHºœ~âÕˆ2õHEœ5D³šÌ“Ooø[~«Ž¢ôÛk¸˜"¿þ84Þ#©/ ù…Ióo1Y®RsY«Å5—¼K£Ä“ÜÇòñËÙVzZZd7S0ä£ÑßM|@VhYý˜ã»–9i º¡âözp*æê¥²[¨ v"ÞTÐX]Ñd£ž¤•ÅÑtÐJRÛSíNäI™æE™ 3<ÅeܘVÅSwœ0ÊD$à–(èê‹ÀéÍo¿®áî{3«IkÞW Mòg¡béïØ àË RÚšn‘`Ý‘rj‰†ßË.¼Šª'ÌÍôtj:GoÚè(|wz3†ß‹LC㊯cʃ+/¹¢ù¼¯Ý—’œD•„l[µiŒDaÆ.e¤–›éýÓ±¹5ÊMº ŽI°°–õcmŒàëÒ!f•Q½$øk6^?èÚï¾Pv³nÛxð^¥|:9ô* ƒùCɳ%h~Ÿ„—”û±Ç¶Ñ¿Dy5³Ú9ÿ^d?A.à+`Ç2ÏT+.ìÑ"¼)mŽp´pêMŠTŽytŒ¡• kÌÐc‡ÁÞobÞçÙ–—‡JÈ‘È0V.Šê\¾ÿYùÂia-þºï‡ ¶wpX†µ…9ÀðFpåá°‘‹‰&¦F ¨qI?%4ö³™+´ËJ2ÁeÈš£Î£}’`„É‘NéÈd^’Ps ¸ŒWÉt™ËŽ?J¹³h¼ Ct,øëAç"R·$öHšh#y•îš`Š7ƒÀu´öê„×ÅëÅVÊå´¹’ÝÓÊFm4ÏO¡F‰QŸy0v‡=LQRÍäb‡ª¤oCä®ß›£Yiã"oÄíVuwì7®Õ’øÉH,¤€Äuönª¾mvòªó‘ÃÍSiâ09*·Õg!gãçîþz.5B¡M‹ôÄûÇ0€Jqs»@mýJàüÉ>¦@ïSÉw²“aû"O¸/¦Ã½½²þ¼vpl£”r’ò¯Ú¬£vgŽ ¬<·©Ä ¯}81ô˜Ð7ÀÕ±‹7M®Œ»×"™¹0W‡³hjjÛ"Õ9 cm$ý€Üäµò¬þ„×mxù+.ü_ݱû»P×xÜ™£?¦ƒªÀÑš&l1Ÿ¤§a,ô¶¨åÈÀY^ úñÍ}aå%+Ùy„û3áÏ)úƒðW‘B§‘wÐXŸuÿ&íŠ~ó±d6\Ç7lúɅ¯ÜQã4j å1"¹y x‹ÀÃÓ‰¿Œ­3Î<†Ç5¾›½zË ƒ7Ø6“n:{vDe«·k:\tMxrÝñË/Qwplà»*~E5iZbÄ}ÿüîãzÂÛÈ+6ûJxþSüÊRDüJÀùwO¶‘,’ìçîAÄaÓŸåHæÔóS“,oÑc\§,6‚KDoÄ™œ[ò6¹ûlRé2L˜S(_m]b¦!0&™½:°®(n;©úKøà nªX^£ @æ›~’èL£>pÔq«Cã+¢É˜{>H=ž>Ž1­ÇNlý,wY÷èÿ2ü ÃóÁnê$^ØNçK;YlfŸ~ôrT*~E¥šÁ{CJsÚÜPw:­5u_!™&(ì#_%Pc‘O/Ì€ÜV5#ûK.y•(Sk¶Æ<7À¼—£‰.”Œ÷†¤g ‡RNþ1´¤¶!u ¬!qtÏÐݦb&:–ñÅÝsá)óΣK^uÚ¦ TÈ‚…%Uáí2—‚ þ«øíÀëWúxJó9wu¶Uc/Ágsw½¦wv‡]Â}Eúy Ï´`ßQKÄ’GšWÎd-±io¾á¡ƒR¼3Yd|l]¥±wû 3«áqMu‰Æ”í8ÒÑXIáêl~Ó"Q«ñ69áÃz+Óæ›‚! 9dö{+·°kÀ:QÎ.F£dÏS;²c·žjXwV,Ô‰®xxPÙk+ ›“‚!%)0Æ×îåoÕCpKlã§{–pyŸ%WýAǼm›kd¼“?ïRÀ”S{Ò´âÚ£ËÕ …÷¼ŠV¾…U¼çj-NäDZ.áh8ªKx)_«4 ªO‹é¸$¾ß@E_Uo|‹ÔŸä»“` ßö:QÔu(ôØùÌ:Tt:‹J7›Ë”.B}ðC†Cò‰Š¥”÷e冫gᕤӺ_ÿB¾3Éeb¸³^ wÂdPüǯÚ=f^H˜ïš }Ú›}T²&ÿ#K d[C‚÷ðå¢÷¯aÓ ã¥ÀÅG‚ŒÀ`çRTh³jk*ÈÐÊ;àõYèê’éu%?1Úª!ß’®ˆ)\4ðÕ.ªRÛÌ(Ù>ÖèÅ  žœ2ë…&9ṄÆ}ƒÚÂD"_~mw ,³Rbcéõ÷ê>;º©Eä¯×è<.M— ºÔ3¯qå˜ küxìEt0}õ…ôÔeK(bDy~ÃMÐAØñ;p[[êJ«j²¹ãÖ+µñPBðS—Ç¢Osq“Û?0QJ`ÓU ŽŸ2efœ ˆØ¤hæ¤â³z…'šT ¢]~Á“Ayz<Ék×a7H_^ýàŒ‘‡Åf1ÆºÝÆK`GCçÀxqÁ÷¡57Ö·5DnÁÁSâùv¥»¥Æ»æIõrê†Ñl°âBÚ‰G•³)þûtÊÔ¿B'ÐÎïv¦†ÂŽà]OÃðueœfËå-~d¹|A–/!°YÍ’q.Që? Ó3ÊÝ& Çãâ\]ØûéoJV#bcøá©³wQØ XF65mù6'á·Ò/+‹ü6™„ˆ5ð|—(<ýÒÉnòùýtZ‰ç/q+΢•Jy¸sÞ‘¶e]×2fÆ%¥}G; ¤OƒJÒf>‡˜*ªý$ `Æß5ææ/¥r,Þ1ï:eh!kl¼‚[f´¦Œ§CN7Ø$5 îΊWËYõyd}g‚ï[¾úµòkÙ'êœÉ¬Œ€•L›½Î*‚½­ÃaéV"L¸Lçãîæ\vŒ–žì)zö‡LÂ4ö3ö§åLà ¬F¼Ú}5ÖãÃ7é÷évßÚz"¦æk}ŽÙáÐ"èkîùüøf}ß'æÖ¹~N£i\’ÁêAŠëïf*á&·â’ž,öòTzeñø;ª9dð—›dï0²’cmñÈ¢µÌð턲ÎC|ý®D9Î dÁ½7†VF-¾í, >Jû0#I1Ó×F µ#,*$œÃ âT¶&¸” íÛÓŠš r»2+Ó¨«À°Ê7ö×+O>>_Èt´DMx ±§@ÚGŽ¡²è‘X¤Îp÷dDí!#‰Giö;´JOgº‘ic#1 ~-2鄟ž.ÆŠ‹‡cÿj Aß\Ïÿn%Å×F¬ ÌöÐÐÜéüDE«ÀXÄìÕ±× ùÖk(Ü·èÝvQÅøÓxEG‹Žæ­âÃÞ¿Ó×=)‰„n¢>ÎÝ`ò=Ì6¼¤6ªÛ­2‘‰Š&ÃÏÉò\wÆÑà‡7‰•õÁ ßZØÌÈ<‡&*PŒ™®dX[Šôy?‚‰<0W¡Nbî‚Ýa¯H>²åÃP¨JZþkm© µÌ+•㌩¨*NH/íía¹3ÎÆ{zIÓ4¬04oœÌùÍ¢ø¡¼D¶vŸ"¹ž¯\ ù+Ê0]YhB×E’$y²/È­¬fœÁ‚€¥×Á³¦¯“¬íj³¤ç(ÛïøÝ¡Ý>k‰ :–,ìégèòþ¢wtøŽnhq«"Ç_ú¢±\";A¯üÈN÷«‡t‹Ìïùø¡+ns3 øv_†Fô%a (¨Ó÷¥çj¿×NzíwWÅåšFVI„PCHùÑk^Èz3å«v(¬MÎ\¹‹‰:«³Ð×ÙëWª©PÔ°©×A6Ú¯@%¿ÊÀîÁó¦ný9j¨`Š’âƒöíŽ]£3¡ÿT_ƒ²dƒ=CØ!®v”±âüõ$¢=™^6h¦•‰%qDCvšªó”©æi‰\¯×-ì19Í™|‘¦¢’ê"×þ»»52ÿ¤ϼÂ~V¿Zb¬š9Nõ£ô’jð>¸Å|†ÙêQZâLÙŠ·žšùüìNhêGKR´ú'µ=í%ƒÝ¢C!ä­q+íl¤‚osUOiZÿ¨¤½¡ûvó2¢<ô[ÅÈ*‡Äj¿¶höFe…«wU0r~È‹ˆ’0œ«Q©ÌÊÙèÍþC¦~º1Á¡ò"·dé&{ö µÜŨîi‰‚E•Pqå`ƒŸÙbgç=ÖqÕ’0l/¿˜Ró¥­iÈÈǯâyÐÒ*¤ÉX{»M–Ó­7K/+§&Î?í—Ó˜â-{v,/೩}¸ióñ8„Ír1´î¹Är5j½#r‹…$hr6êÙJ*Oß»dµØ1¬—R~Ž¡¾ê¨IڣƖ F‡]ñ*Œ±ª|FçzºÄSÚh¹˜†à½8ÂðI¦™ñ\8ŸËë¼”k ¾ÁÞ´¸±^Œ!;s<01ì²¶@ýÔjB1¹Œ÷ÂKS G*þ‚zAø» S?fÎ]D°àô·,K6kG‚‘퇆c†}„‰ôú…uæ» ŒºÕÈÕ(éÜ_¹-Ä·‚ØÕ•ù/í‚™ ޳ù/ÝÏh‰!{-˜¬fg!âum4Ðã´Oƒ«_˜¬(cmVËîÙ|¬àÓmöÕ[fmlk^L$ü<Ò ˜t!~Zñ"jÖ"úâfA\Cm¢«çÖüгq˜ ÇÝ$®½SGºò»‰¹Ò}a(ôWñþ¸žô"O‡ã¸¨C¥z°“sã–cö“Úœ/~àÀJ"æûí5TÀøåQÞÅ[àîñÏ©ARv<´»åcÛóÈ–«R¤iÙuµU¦ ¢c»)?ÔIÜ(ÝP‹?Ÿ3¢]ĶKT¯Ôg˜TŒÕL ®æ(Ý4·*`u3Ù¥M E«a§œ%rÉT™Fk=Æa2 BçYK±⪠…gÕ‡º“U¬W¡hpK.øâB‡jØ¢Ác¸¨ÖIWlS s™…bL¦ßVpSwz.ÝAéø’Ôá(Ôà3…~øÅ3HšðOв@ãØö>2ª=ùëû˜„–è²¥±<ðø¡ØFEi~,¼Øžù°<÷5¨Ç*YsF²ü•õb² 1?¿%Cr€0~ Óî° ÖEuëxÓ ú3i×%(*úO¥mn(B¼/ɬЧ¬H¬Ÿ³LM¢FñeÜ}Ö»«ßU}L–ÑHûS†æóˆ€Õû ~S:ù7„ØÅªá_S”|èÌ ´§ŒËYòiÈ Z"pQ‡´750—;õ‚ÖPD{ÈÛd/|ˆá©±â|ʯ)¶w; ©Oº!8Ūm˜c¤Ø­D[+cùb)ÔäZÊ·Ÿ‡# ×®CW–J( V†<8!jé.¼?¤Ó—;çñÚ§>ȶwJ°¡$,Yd3€Õ°Wk9UÛ+–1N£9Xßp¡·GȵyÖ½mJº2hæ”9¦oþ2<‡ð.¾‘è»už{jAÅ$¢îÓOUõ¨Xq”ùr¹] ƒ¥Ý7z&KF—¢»µzUé3>5«×Z¸I]üï6F›PõD†¼œ¥!ÆÓMp”BB±#Þ¤[ݼÇwùSjù¯D²F¨DÄ:éwdw¯Âßj“' ’n]cÒu>‹y-õSï*Y+Ö/ÂûˆKm¯¸¶?è!̾ ©«Ïš’LŸBlÀI{/}ÍìhÌ4…ª?gUáO«õã$žE¤Þ8EäZ¬êS9<чÐÖë,͹SQ6¶{>\ bºùÛ±2ìšÞ_+¸NüÂCñ‰Ô}Šr­ãÃÎdiÜ]ÚÂ$„Š&d:ã†vŽ5î[^Lo‚?æj7uùÖÙ^ ²¢Óºò‹®´ˆÊ¹â¹±0Wüm:û¤JfÁ†”&dòkﱆÔhá•1‚J¼£u2Onn¨Vw ^{ºÉÈËs›plÝÛ‰›œh‘)f%fäÔº[Ü- b\óY ù×[Ô|Ê–U,jhÚ×õ•‹ÏLC«½g茪>=Öàž˜—WzJÆ7Ç.Ûç_ãð÷n°Ü[r‡§¶äÅ¢üÏpG€µš»Îð÷ÔL[–Œ"Iä_pÔŠ5êšO%ákö¢S ÅGò•xè.A»çy~£“‘éezÑBë0SòJs^Mc‘ò`¿Ó ÁÁˆ«˜au®—’—d[ß–!v”×<èI©:Àlf[OR¡ÃS|奄E¡Ò?÷^ew~Û6;nÒÓfRù›fdSØAeªyóCQpqäÛQS¼÷-Ó±›!Û¬¯s2£jÚ‚0xæ”Õeà>É(ï;Щ{Œ å_ט ·(ÍпùŒîVµÞÍÊòfç‰hÑFÛ ^·Á~€™NY$Šf7ÀÒn!Ýß 4^-´»GõzÏ|¿¬W9Éß(0W,²Åh6ª‚xœ3 Ö(N}LÓå-¡'f-Üú¯mŠÉ;RJ›ôË´)$(LA½s}•«ØiȺӿ™wu 6ëè•¶A‰Aàu”ñ -ði’¥cò‡ÈiZ„IþH>¹í§ŠÑ ®f€Õm<æÌûíý-™ªÄ²õG¤d½ìB0¡­ž‘pÒ];¼ôyF$͈ᘡeö¾e>%Æz÷®qÍ}ɧ7Òß|eÍJßš0F»¬ Ërv¼-÷mq³ÀFŠ,«ßXþÑÐ…oHß¾œV£[5¼ú l|z½r›Ã«ö)õà-Åü{*ŠŸÃ¿£¹Ž4»$µ&ÍÓmo]•H1^1?E%Q.Ëcg5'›z\œÄöß`Ê'ù]¶ÛGítµ‡—^·ÀÂ2ÉÆÙ7£ ˳Þ)pŒ\c’“{AÒ}tt4Ú9EV?íÆ Áßë¢è'©ñn¬¶$F«š 4vy/s”÷¢2çBÓÙ" i¹âm§<ÆÎÍXËü—ÚV[eb”Xþ ¿öüf–7 Šžx÷>×iM”0/²S)󚯂2’*ÜóÕHrô6Ü¥î82©¿[C˾IŸ¦WV‚0…nN;*ܦšOåçÙœ èL«üë¬Èl?f¯ÃïU›pM›[q9ž‘ºŒÜà È'n„î`cZc¨õé„GlÁuÛjGñ‹ Ïé‰ÜŠª´ñàd¼ÕQÕÖí+}‰=´!Û–.;G8/Î=´6¶›œü›À¶ÑÀ¬¥•¿qúö"JáÀ`]pÅ“/á€Hí÷ÃüwƒA—^™%]'Óªž ·ÑÄpzL,¬Ë²š‰egߨÓÞŽ]›4PD¦æm7H_¹êqC“k€T¹6%‡h!•y})7©|?ÀöÅ艾ݠÊTuÜÀ>¥Âï¿0Š #V’Ž@$/R‡.9œ‚Æõeì<¶ÃP›a.³/4/ýY¹Ñay§3+Øá¾×² +1¾ gl…ÿÛÉÝØÑ€0Ú¦ôtÊŠd°¢ñ¶CÄs3I )å³!BTá¼,÷üì;y_§¢Òth¨BvÛ`Acôœ7_"Žä…¶×êônÅp†# õ€pßï×@{É“o#Ù²lÚY›wšˆQ/ûßšå\ÞTÄÿzêžZ z#˜Ïð#~ú[ÉUIŽ®T'áàì¢ÝãÒþÁ¼fîNY£Îc•3Sµ%öÑTbyËÜåo,7“Ú:g¢­ÌRFêk(ÌÍ߻ӻÛð4åAA£ÂÆÜODÓ@ Z ÌA ì }+uŸüV)g×$Ñ/HP¥*‡!ïÈ@Ýhñ²vœ¸Úšç¿hœ³Û§?ß²ã¬m®{Ë[6©ÒBxÒaRÑOîÉËRÉÀ}Ö@9ô]æw|=1Úô!Íé`ºN$¾Ód«µš °|æÊ<û4K:Ä Ÿ0Ÿ•ÒÆG$LÜÖËíúÒ¢Æ)ìˆó»ÄõåTò„ÄI‹¢‹÷åøß¿_î™iOÑÌŽmÑ^Ôd´-rPf*[ŽœqØ4­nžŸŸ{‡-ãIB­#<«Êdüû’L‰ÓT¹‘EG§.í½àœß,‹nq¥ûÉêúç!/¨ ¼Sà“Å‘–Ι­hþŽOp|*”O?´N±µˆ¨«YòÒ%Œ1€1,û³³šBÀ(Dõj9®8ôÈ.Hp™8%ßÉ,úœÖ¶¶™êˆáw[³JÇb(ñ[B8ì;_ eÊUM Hn“«‚äb Nú²£«Ñø¼»©Ï³—"ˆ3LŸZùç†êîxlŽYÑ> ––ÏèåÇÊ}ˆƒwU;*>¼÷^ÔA‡G–‡kE™uª•º‹#+nh¸ê¯<™Zä)©Ä"Wá˜gè!>¸U¿×?ù”Ì4C“"~⓸Ò&2ÜhqðäÙ³U)ãDÐ(¹%ïÚò£·ëTA$–7ü<1_i!bÁÌË{ôXÚG­\àØš°9¥ªÅ£I]vHÌÈvJÜcä •ŸÛÓð’%ëÍ‹?ì󻼸kгâ‘DA*èU¿Ò ûcnkŸà*ÏÓ*ÊMR‘´ç$‰8qÌ·Œt ãÑwFÔÂ>†FÌí'ñÖZ~€G9#ù¦húÁ ·þ›26‰¯K¥Ûv ‘®˜û­ŸÕL_x¯)ÿƲ‰LRÞî±Â·©~ø”=DÆmÏoºïýé¹[…&¦©%r›¹ƒUžø[Óç0ü‰Þïp¾Äll,`r´‹0ZT ¾8¡!j…e¸Øýâ¤ÝŽA× —o9K °ðÔê3šr!”GM dnÄ9ùrã¹Üê“Êr—? ]ѸŸ¢É~@ý&„?ûXSÛûƒD˜H)|)ØxÛ:OhžÌL§"BUÁ÷e¦^÷ÑÞx‹ ñݯlV••¬Ûa éƒå“N­aõ;—YÎ:¥Y÷,w7X¼5o;¿¾æ&q¸èÍÅ0TòF 'ôdZdsM¬`0:؉{½Pº\pÿx/ñÅï³£ë.*ëüS´·äP9zZÅ/° Añ›—¼4j‘)ôÙéÄn4û,—'¾÷ßa_½4³@s!,ŒÆØiCÁf&åqؘí(Ýû:òêÆÁ;¡²³_%µkBOMÙ:±?gä5Ç“¿úc‰¢§+e¶ n@”hЃY>~‰°^ÈSËAP ó‘ëÏ`^‘nr7^èãŠÁ¶?KŸž@‰Éâu0Ôå³.ƹ a»Ú5Aë7H¶+šô1¡\^¶ëµË¨e]%¥gÆXnÞ¯±ÌûögÓøJÂJ¤VƒGÆ{XV&f&hõ.D@´`go,•>1¶–ÚyIIY0Ó{æHÀ=ŽŽ3Á]’o® GDZ>Q§#fá¤!ŽhöO¨}'6 d„k¥ÝÙdÊçÿUÊž /ŸÌ]Òê®h-¶$7q½¼bK¦^ìÛ“–šé˜ž rmý$!ƒßcÁ@ÃòÃK‰2;ï&ÃÅdžYdÆBó6´µK}ù WfyóÁV€Öd{/¡íÀ±Yz’ƒ²vl›J$MÞ’ÀĨãä”<ÆñnÔMÝe†æ!3Ô3~·o½Û¶íøý—§|ëXæx…²ýLQ&á¹#EK«Uù~Ȧ( ›~ÌSe?Ijƒ•„Ö™¹°@õ©¬­GêeL1yµ™Í˜KÕ»Âãw—<íVæ÷wÈÆ…x×GÅåŸ×qÎÆÇ%> IÌ.–Q 9"†ã§êÛJM½5¦µ¢|‡ÓJv?ö\ï*¤jg §m°ÃÖhJ‹&˜¿Ÿ¡Ëùøµ*f¹D™Ouc~,B³ðHËäœ-ä¿|Hæá [Üó‡g£/Îñ’ÿñ®w5î)­ŒÚ›1Ýp«†ÅEW߉wΈ/û"LÚ—¿éè5ákž<GÁ„]e~eÙ û<½«†º§²úÛtðÔG° =»õÇ+Ðæ±%ȯ높¦Ü;Ô€Ün*oè[?Í£ÒHå><¨·Qã¸C‘,‰é¸„–gcˆ•ägå,ñƒÊÍü^ýŒ™X2ÍJθá$®Ä—-žÀÙIÓ‰ž±-£%põªŸ¸Vµ1NÒËG¿É•Š 'Œõ:ûeK Yú’—ò,x0ðF•`æOV¯tÖ(W暌4Ÿ7¤Ð#Ñ©4LÚ‰–^l}ÀoÎèåd~dÆï»ÑÀë)Âó?|0þ?ÀÿÖN@Kw(ØÙÒÝãÿЫzendstream endobj 50 0 obj << /Type /Font /Subtype /Type1 /Encoding 326 0 R /FirstChar 2 /LastChar 120 /Widths 333 0 R /BaseFont /TSVDPX+NimbusSanL-Bold /FontDescriptor 48 0 R >> endobj 48 0 obj << /Ascent 722 /CapHeight 722 /Descent -217 /FontName /TSVDPX+NimbusSanL-Bold /ItalicAngle 0 /StemV 141 /XHeight 532 /FontBBox [-173 -307 1003 949] /Flags 4 /CharSet (/fi/hyphen/period/slash/one/two/three/four/colon/at/A/B/C/D/F/G/I/L/N/P/Q/S/T/U/a/b/c/d/e/f/g/h/i/k/l/m/n/o/p/q/r/s/t/u/v/x) /FontFile 49 0 R >> endobj 333 0 obj [611 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 333 278 278 0 556 556 556 556 0 0 0 0 0 333 0 0 0 0 0 975 722 722 722 722 0 611 778 0 278 0 0 611 0 722 0 667 778 0 667 611 722 0 0 0 0 0 0 0 0 0 0 0 556 611 556 611 556 333 611 611 278 0 556 278 889 611 611 611 611 389 556 333 611 556 0 556 ] endobj 51 0 obj << /Type /Pages /Count 6 /Parent 334 0 R /Kids [42 0 R 53 0 R 67 0 R 97 0 R 109 0 R 116 0 R] >> endobj 175 0 obj << /Type /Pages /Count 6 /Parent 334 0 R /Kids [162 0 R 177 0 R 216 0 R 223 0 R 241 0 R 256 0 R] >> endobj 308 0 obj << /Type /Pages /Count 2 /Parent 334 0 R /Kids [292 0 R 310 0 R] >> endobj 334 0 obj << /Type /Pages /Count 14 /Kids [51 0 R 175 0 R 308 0 R] >> endobj 335 0 obj << /Type /Outlines /First 3 0 R /Last 39 0 R /Count 8 >> endobj 39 0 obj << /Title 40 0 R /A 37 0 R /Parent 335 0 R /Prev 35 0 R >> endobj 35 0 obj << /Title 36 0 R /A 33 0 R /Parent 335 0 R /Prev 31 0 R /Next 39 0 R >> endobj 31 0 obj << /Title 32 0 R /A 29 0 R /Parent 335 0 R /Prev 19 0 R /Next 35 0 R >> endobj 27 0 obj << /Title 28 0 R /A 25 0 R /Parent 19 0 R /Prev 23 0 R >> endobj 23 0 obj << /Title 24 0 R /A 21 0 R /Parent 19 0 R /Next 27 0 R >> endobj 19 0 obj << /Title 20 0 R /A 17 0 R /Parent 335 0 R /Prev 15 0 R /Next 31 0 R /First 23 0 R /Last 27 0 R /Count -2 >> endobj 15 0 obj << /Title 16 0 R /A 13 0 R /Parent 335 0 R /Prev 11 0 R /Next 19 0 R >> endobj 11 0 obj << /Title 12 0 R /A 9 0 R /Parent 335 0 R /Prev 7 0 R /Next 15 0 R >> endobj 7 0 obj << /Title 8 0 R /A 5 0 R /Parent 335 0 R /Prev 3 0 R /Next 11 0 R >> endobj 3 0 obj << /Title 4 0 R /A 1 0 R /Parent 335 0 R /Next 7 0 R >> endobj 336 0 obj << /Names [(1.0) 2 0 R (101) 179 0 R (102) 180 0 R (103) 181 0 R (104) 182 0 R (105) 183 0 R (106) 184 0 R (107) 185 0 R (108) 186 0 R (110) 187 0 R (111) 188 0 R (112) 189 0 R (113) 190 0 R (115) 191 0 R (116) 192 0 R (117) 193 0 R (119) 194 0 R (120) 195 0 R (121) 196 0 R (123) 197 0 R (124) 198 0 R (125) 199 0 R (127) 200 0 R (128) 201 0 R (129) 202 0 R (130) 203 0 R (132) 204 0 R (133) 205 0 R (134) 206 0 R (136) 207 0 R (137) 208 0 R (138) 209 0 R (140) 210 0 R (141) 211 0 R (142) 212 0 R (143) 213 0 R (144) 214 0 R (147) 219 0 R (148) 220 0 R (149) 221 0 R (152) 226 0 R (153) 227 0 R (154) 228 0 R (155) 229 0 R (156) 230 0 R (157) 231 0 R (158) 232 0 R (159) 233 0 R (160) 234 0 R (161) 235 0 R (162) 236 0 R (163) 237 0 R (164) 238 0 R (165) 239 0 R (166) 244 0 R (167) 245 0 R (168) 246 0 R (169) 247 0 R (170) 248 0 R (171) 249 0 R (172) 250 0 R (173) 251 0 R (174) 252 0 R (175) 253 0 R (176) 254 0 R (177) 260 0 R (178) 261 0 R (179) 262 0 R (180) 263 0 R (181) 264 0 R (182) 265 0 R (183) 266 0 R (184) 267 0 R (185) 268 0 R (186) 269 0 R (187) 270 0 R (188) 271 0 R (189) 272 0 R (190) 273 0 R (191) 274 0 R (192) 275 0 R (193) 276 0 R (194) 277 0 R (195) 278 0 R (196) 279 0 R (197) 280 0 R (198) 281 0 R (199) 282 0 R (2.0) 6 0 R (200) 283 0 R (201) 284 0 R (202) 285 0 R (203) 286 0 R (204) 287 0 R (205) 288 0 R (206) 289 0 R (207) 290 0 R (208) 296 0 R (209) 259 0 R (210) 297 0 R (211) 298 0 R (212) 299 0 R (213) 300 0 R (214) 301 0 R (215) 302 0 R (216) 303 0 R (217) 304 0 R (218) 305 0 R (219) 306 0 R (220) 307 0 R (221) 313 0 R (222) 295 0 R (223) 314 0 R (224) 315 0 R (225) 316 0 R (226) 317 0 R (227) 318 0 R (228) 319 0 R (229) 320 0 R (230) 321 0 R (231) 322 0 R (232) 323 0 R (233) 324 0 R (234) 325 0 R (29) 89 0 R (3.0) 10 0 R (31) 100 0 R (32) 101 0 R (33) 102 0 R (34) 103 0 R (35) 104 0 R (36) 105 0 R (37) 106 0 R (38) 107 0 R (4.0) 14 0 R (41) 111 0 R (42) 112 0 R (43) 113 0 R (44) 114 0 R (47) 118 0 R (5.0) 18 0 R (5.1.1) 22 0 R (5.2.1) 26 0 R (50) 119 0 R (51) 120 0 R (53) 121 0 R (54) 122 0 R (55) 123 0 R (56) 124 0 R (58) 125 0 R (59) 126 0 R (6.0) 30 0 R (60) 127 0 R (61) 128 0 R (64) 129 0 R (65) 130 0 R (66) 134 0 R (67) 135 0 R (68) 136 0 R (69) 140 0 R (7.0) 34 0 R (70) 141 0 R (71) 142 0 R (72) 143 0 R (73) 144 0 R (74) 145 0 R (75) 146 0 R (76) 147 0 R (77) 148 0 R (78) 149 0 R (79) 150 0 R (8.0) 38 0 R (80) 151 0 R (81) 152 0 R (82) 153 0 R (83) 154 0 R (84) 155 0 R (85) 159 0 R (86) 164 0 R (87) 160 0 R (89) 165 0 R (90) 166 0 R (91) 167 0 R (92) 168 0 R (93) 169 0 R (94) 170 0 R (95) 171 0 R (96) 172 0 R (97) 173 0 R (98) 174 0 R (COPYING-FDL) 65 0 R (DBD-PGSQL) 47 0 R (Doc-Start) 46 0 R (INSTALL) 91 0 R (INSTALL-BUILD) 93 0 R (INSTALL-PREREQ) 92 0 R (INTRO) 90 0 R (OPTIONS) 94 0 R (SPECIFIC) 95 0 R (page.1) 45 0 R (page.10) 312 0 R (page.2) 55 0 R (page.3) 69 0 R (page.4) 99 0 R (page.5) 218 0 R (page.6) 225 0 R (page.7) 243 0 R (page.8) 258 0 R (page.9) 294 0 R (table.1) 64 0 R] /Limits [(1.0) (table.1)] >> endobj 337 0 obj << /Kids [336 0 R] >> endobj 338 0 obj << /Dests 337 0 R >> endobj 339 0 obj << /Type /Catalog /Pages 334 0 R /Outlines 335 0 R /Names 338 0 R /PageMode /UseOutlines /OpenAction 41 0 R >> endobj 340 0 obj << /Author()/Title()/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfeTeX-1.21a)/Keywords() /CreationDate (D:20110219211114+01'00') /PTEX.Fullbanner (This is pdfeTeX, Version 3.141592-1.21a-2.2 (Web2C 7.5.4) kpathsea version 3.5.4) >> endobj xref 0 341 0000000000 65535 f 0000000009 00000 n 0000001633 00000 n 0000144369 00000 n 0000000048 00000 n 0000000089 00000 n 0000018866 00000 n 0000144285 00000 n 0000000128 00000 n 0000000163 00000 n 0000020081 00000 n 0000144199 00000 n 0000000202 00000 n 0000000228 00000 n 0000021707 00000 n 0000144111 00000 n 0000000268 00000 n 0000000310 00000 n 0000023996 00000 n 0000143986 00000 n 0000000350 00000 n 0000000392 00000 n 0000024182 00000 n 0000143912 00000 n 0000000434 00000 n 0000000471 00000 n 0000024925 00000 n 0000143838 00000 n 0000000513 00000 n 0000000565 00000 n 0000030243 00000 n 0000143750 00000 n 0000000605 00000 n 0000000649 00000 n 0000033647 00000 n 0000143662 00000 n 0000000689 00000 n 0000000751 00000 n 0000036515 00000 n 0000143587 00000 n 0000000791 00000 n 0000000852 00000 n 0000001335 00000 n 0000001694 00000 n 0000000902 00000 n 0000001453 00000 n 0000001513 00000 n 0000001573 00000 n 0000142444 00000 n 0000131908 00000 n 0000142276 00000 n 0000143122 00000 n 0000003290 00000 n 0000002712 00000 n 0000001764 00000 n 0000003170 00000 n 0000130919 00000 n 0000111375 00000 n 0000130748 00000 n 0000002856 00000 n 0000110807 00000 n 0000098986 00000 n 0000110631 00000 n 0000003013 00000 n 0000003230 00000 n 0000036454 00000 n 0000018927 00000 n 0000016112 00000 n 0000003384 00000 n 0000018806 00000 n 0000016354 00000 n 0000098337 00000 n 0000085955 00000 n 0000098166 00000 n 0000016501 00000 n 0000016649 00000 n 0000016799 00000 n 0000016949 00000 n 0000017101 00000 n 0000017253 00000 n 0000017412 00000 n 0000017571 00000 n 0000017729 00000 n 0000017887 00000 n 0000018039 00000 n 0000018191 00000 n 0000018342 00000 n 0000018495 00000 n 0000018650 00000 n 0000020021 00000 n 0000021646 00000 n 0000023935 00000 n 0000024121 00000 n 0000024864 00000 n 0000030182 00000 n 0000033586 00000 n 0000020636 00000 n 0000019843 00000 n 0000019033 00000 n 0000019961 00000 n 0000020143 00000 n 0000020204 00000 n 0000020265 00000 n 0000020328 00000 n 0000020389 00000 n 0000020449 00000 n 0000020512 00000 n 0000020573 00000 n 0000022020 00000 n 0000021525 00000 n 0000020730 00000 n 0000021770 00000 n 0000021832 00000 n 0000021894 00000 n 0000021956 00000 n 0000026423 00000 n 0000023814 00000 n 0000022115 00000 n 0000024059 00000 n 0000024243 00000 n 0000024305 00000 n 0000024366 00000 n 0000024428 00000 n 0000024490 00000 n 0000024553 00000 n 0000024617 00000 n 0000024679 00000 n 0000024740 00000 n 0000024802 00000 n 0000024988 00000 n 0000025050 00000 n 0000085439 00000 n 0000074448 00000 n 0000085268 00000 n 0000025114 00000 n 0000025176 00000 n 0000025238 00000 n 0000073930 00000 n 0000062620 00000 n 0000073759 00000 n 0000025301 00000 n 0000025363 00000 n 0000025427 00000 n 0000025489 00000 n 0000025551 00000 n 0000025614 00000 n 0000025676 00000 n 0000025738 00000 n 0000025801 00000 n 0000025863 00000 n 0000025926 00000 n 0000025988 00000 n 0000026050 00000 n 0000026112 00000 n 0000026175 00000 n 0000026237 00000 n 0000061924 00000 n 0000054006 00000 n 0000061754 00000 n 0000026299 00000 n 0000026362 00000 n 0000028278 00000 n 0000027468 00000 n 0000026569 00000 n 0000027590 00000 n 0000027652 00000 n 0000027715 00000 n 0000027777 00000 n 0000027839 00000 n 0000027901 00000 n 0000027964 00000 n 0000028026 00000 n 0000028088 00000 n 0000028150 00000 n 0000028214 00000 n 0000143234 00000 n 0000032561 00000 n 0000030060 00000 n 0000028412 00000 n 0000030306 00000 n 0000030368 00000 n 0000030431 00000 n 0000030495 00000 n 0000030559 00000 n 0000030623 00000 n 0000030687 00000 n 0000030751 00000 n 0000030813 00000 n 0000030875 00000 n 0000030937 00000 n 0000031000 00000 n 0000031064 00000 n 0000031126 00000 n 0000031188 00000 n 0000031251 00000 n 0000031313 00000 n 0000031375 00000 n 0000031438 00000 n 0000031500 00000 n 0000031561 00000 n 0000031624 00000 n 0000031686 00000 n 0000031748 00000 n 0000031811 00000 n 0000031875 00000 n 0000031937 00000 n 0000031999 00000 n 0000032061 00000 n 0000032123 00000 n 0000032185 00000 n 0000032248 00000 n 0000032308 00000 n 0000032370 00000 n 0000032433 00000 n 0000032497 00000 n 0000033896 00000 n 0000033402 00000 n 0000032669 00000 n 0000033524 00000 n 0000033710 00000 n 0000033772 00000 n 0000033834 00000 n 0000037446 00000 n 0000036270 00000 n 0000033991 00000 n 0000036392 00000 n 0000036578 00000 n 0000036640 00000 n 0000036702 00000 n 0000036764 00000 n 0000036826 00000 n 0000036888 00000 n 0000036950 00000 n 0000037012 00000 n 0000037074 00000 n 0000037136 00000 n 0000037198 00000 n 0000037260 00000 n 0000037322 00000 n 0000037384 00000 n 0000040807 00000 n 0000039944 00000 n 0000037541 00000 n 0000040066 00000 n 0000040128 00000 n 0000040190 00000 n 0000040252 00000 n 0000040314 00000 n 0000040375 00000 n 0000040436 00000 n 0000040497 00000 n 0000040559 00000 n 0000040621 00000 n 0000040683 00000 n 0000040745 00000 n 0000045591 00000 n 0000043412 00000 n 0000040890 00000 n 0000043534 00000 n 0000043596 00000 n 0000043658 00000 n 0000043720 00000 n 0000043782 00000 n 0000043844 00000 n 0000043907 00000 n 0000043969 00000 n 0000044032 00000 n 0000044094 00000 n 0000044157 00000 n 0000044219 00000 n 0000044282 00000 n 0000044343 00000 n 0000044406 00000 n 0000044468 00000 n 0000044531 00000 n 0000044593 00000 n 0000044656 00000 n 0000044718 00000 n 0000044780 00000 n 0000044842 00000 n 0000044905 00000 n 0000044967 00000 n 0000045030 00000 n 0000045092 00000 n 0000045155 00000 n 0000045217 00000 n 0000045280 00000 n 0000045342 00000 n 0000045405 00000 n 0000045467 00000 n 0000045529 00000 n 0000049050 00000 n 0000048061 00000 n 0000045674 00000 n 0000048183 00000 n 0000048245 00000 n 0000048307 00000 n 0000048369 00000 n 0000048431 00000 n 0000048493 00000 n 0000048554 00000 n 0000048616 00000 n 0000048678 00000 n 0000048740 00000 n 0000048802 00000 n 0000048864 00000 n 0000048926 00000 n 0000048988 00000 n 0000143351 00000 n 0000052035 00000 n 0000051043 00000 n 0000049133 00000 n 0000051165 00000 n 0000051227 00000 n 0000051289 00000 n 0000051351 00000 n 0000051413 00000 n 0000051475 00000 n 0000051537 00000 n 0000051601 00000 n 0000051663 00000 n 0000051725 00000 n 0000051787 00000 n 0000051849 00000 n 0000051911 00000 n 0000051973 00000 n 0000052118 00000 n 0000062272 00000 n 0000074214 00000 n 0000085717 00000 n 0000098654 00000 n 0000111131 00000 n 0000131398 00000 n 0000142772 00000 n 0000143436 00000 n 0000143513 00000 n 0000144440 00000 n 0000147448 00000 n 0000147487 00000 n 0000147525 00000 n 0000147654 00000 n trailer << /Size 341 /Root 339 0 R /Info 340 0 R /ID [<14AD55B5BF7ADC0B9041946125BCC962> <14AD55B5BF7ADC0B9041946125BCC962>] >> startxref 147917 %%EOF libdbi-drivers-0.9.0/drivers/pgsql/dbd_pgsql/copying-fdl.html000644 001750 001750 00000052251 11530021744 025135 0ustar00markusmarkus000000 000000 GNU Free Documentation License

    Appendix A. GNU Free Documentation License

    Version 1.1, March 2000

    Copyright (C) 2000 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.

    0. PREAMBLE

    The purpose of this License is to make a manual, textbook, or other written document "free" in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others.

    This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software.

    We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference.

    1. APPLICABILITY AND DEFINITIONS

    This License applies to any manual or other work that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you".

    A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language.

    A "Secondary Section" is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (For example, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them.

    The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License.

    The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License.

    A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, whose contents can be viewed and edited directly and straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup has been designed to thwart or discourage subsequent modification by readers is not Transparent. A copy that is not "Transparent" is called "Opaque".

    Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML designed for human modification. Opaque formats include PostScript, PDF, proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML produced by some word processors for output purposes only.

    The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, "Title Page" means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text.

    2. VERBATIM COPYING

    You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3.

    You may also lend copies, under the same conditions stated above, and you may publicly display copies.

    3. COPYING IN QUANTITY

    If you publish printed copies of the Document numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects.

    If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages.

    If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a publicly-accessible computer-network location containing a complete Transparent copy of the Document, free of added material, which the general network-using public has access to download anonymously at no charge using public-standard network protocols. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public.

    It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document.

    4. MODIFICATIONS

    You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version:

    1. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission.

    2. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has less than five).

    3. State on the Title page the name of the publisher of the Modified Version, as the publisher.

    4. Preserve all the copyright notices of the Document.

    5. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices.

    6. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below.

    7. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice.

    8. Include an unaltered copy of this License.

    9. Preserve the section entitled "History", and its title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section entitled "History" in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence.

    10. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the "History" section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission.

    11. In any section entitled "Acknowledgements" or "Dedications", preserve the section's title, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein.

    12. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles.

    13. Delete any section entitled "Endorsements". Such a section may not be included in the Modified Version.

    14. Do not retitle any existing section as "Endorsements" or to conflict in title with any Invariant Section.

    If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles.

    You may add a section entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various parties--for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard.

    You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one.

    The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version.

    5. COMBINING DOCUMENTS

    You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice.

    The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work.

    In the combination, you must combine any sections entitled "History" in the various original documents, forming one section entitled "History"; likewise combine any sections entitled "Acknowledgements", and any sections entitled "Dedications". You must delete all sections entitled "Endorsements."

    6. COLLECTIONS OF DOCUMENTS

    You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects.

    You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document.

    7. AGGREGATION WITH INDEPENDENT WORKS

    A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, does not as a whole count as a Modified Version of the Document, provided no compilation copyright is claimed for the compilation. Such a compilation is called an "aggregate", and this License does not apply to the other self-contained works thus compiled with the Document, on account of their being thus compiled, if they are not themselves derivative works of the Document.

    If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one quarter of the entire aggregate, the Document's Cover Texts may be placed on covers that surround only the Document within the aggregate. Otherwise they must appear on covers around the whole aggregate.

    8. TRANSLATION

    Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License provided that you also include the original English version of this License. In case of a disagreement between the translation and the original English version of this License, the original English version will prevail.

    9. TERMINATION

    You may not copy, modify, sublicense, or distribute the Document except as expressly provided for under this License. Any other attempt to copy, modify, sublicense or distribute the Document is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.

    10. FUTURE REVISIONS OF THIS LICENSE

    The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See http://www.gnu.org/copyleft/.

    Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation.

    How to use this License for your documents

    To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page:

    Copyright (c) YEAR YOUR NAME. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. A copy of the license is included in the section entitled "GNU Free Documentation License".

    If you have no Invariant Sections, write "with no Invariant Sections" instead of saying which ones are invariant. If you have no Front-Cover Texts, write "no Front-Cover Texts" instead of "Front-Cover Texts being LIST"; likewise for Back-Cover Texts.

    If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software.

    libdbi-drivers-0.9.0/drivers/pgsql/dbd_pgsql/f30.html000644 001750 001750 00000005665 11530021744 023321 0ustar00markusmarkus000000 000000 Preface

    Preface

    libdbi is a database abstraction layer written in C. It implements a framework that can utilize separate driver libraries for specific database servers. The libdbi-drivers project provides the drivers necessary to talk to the supported database servers.

    This manual provides information about the pgsql driver, which provides support for PostgreSQL databases. The manual is intended for programmers who write applications linked against libdbi and who want their applications to use this database backend.

    Questions and comments about this driver should be sent to the libdbi-drivers-devel mailing list (see the website). Questions and comments about the libdbi library should be sent to the appropriate libdbi mailing list.

    This driver is maintained by David A. Parker.

    libdbi-drivers-0.9.0/drivers/pgsql/dbd_pgsql/index.html000644 001750 001750 00000006212 11530021744 024025 0ustar00markusmarkus000000 000000 PostgreSQL Driver Notes

    PostgreSQL Driver Notes

    Details about the libdbi driver providing support for PostgreSQL backends

    David A. Parker

    Neon Goat Productions
    Revision History
    Revision 0.22005-07-17
    Revision 0.12003-4-17

    Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is included in Appendix A.


    libdbi-drivers-0.9.0/drivers/pgsql/dbd_pgsql/install-build.html000644 001750 001750 00000012011 11530021744 025453 0ustar00markusmarkus000000 000000 Build and install the driver

    2.2. Build and install the driver

    First you have to unpack the libdbi-drivers archive in a suitable directory. Unpacking will create a new subdirectory with the version number, such as libdbi-drivers-0.8.0

    $ tar xfvz libdbi-drivers-0.8.0.tar.gz

    The libdbi-drivers project consists of several drivers that use a common build system. Therefore you must explicitly tell the configuration script that you want to build the pgsql driver (you can list as many drivers as you want to build):

    $ cd libdbi-drivers-0.8.0
    $ ./configure --with-pgsql

    Run ./configure --help to find out about additional options and other available drivers.

    Then build the driver with the command:

    $ make

    Note: Please note that you may have to invoke gmake, the GNU version of make, on some systems.

    Then install the driver with the command (you'll need root permissions to do this):

    $ make install

    To test the operation of the newly installed driver, use the command:

    $ make check

    This command creates and runs a test program that performs a few basic input and output tests.

    Note: If for some reason you need to re-create the autoconf/automake-related files, try running ./autogen.sh. In some situations, the current stable autoconf/automake/libtool versions (as found in FreeBSD 4.7 and Debian 3.0) do not cooperate well, so it may be necessary to run the older autoconf 2.13. If necessary, edit autogen.sh so that it will catch the older autoconf version on your system.

    libdbi-drivers-0.9.0/drivers/pgsql/dbd_pgsql/install-prereq.html000644 001750 001750 00000006160 11530021744 025662 0ustar00markusmarkus000000 000000 Prerequisites

    2.1. Prerequisites

    The following packages must be installed on your system:

    libdbi

    This library implements the core database abstraction layer, which provides your application with database backend functionality when paired with this driver. More information about libdbi, including mailing lists, documentation, bug reports, and downloads, is available from the libdbi website.

    libpq

    This is the C shared library to enable user programs to communicate with the PostgreSQL database backend. The backend can be on another machine and accessed through TCP/IP. This library is distributed as part of PostgreSQL, and can be found on their website. It may also be packaged independently for your operating system, depending on what you use.

    The current version of the dbd_pgsql driver was written and tested with libpq3 from PostgreSQL 8.0.1.

    libdbi-drivers-0.9.0/drivers/pgsql/dbd_pgsql/install.html000644 001750 001750 00000004271 11530021744 024367 0ustar00markusmarkus000000 000000 Installation

    Chapter 2. Installation

    This chapter describes the prerequisites and the procedures to build and install this driver from source code.

    libdbi-drivers-0.9.0/drivers/pgsql/dbd_pgsql/intro.html000644 001750 001750 00000005045 11530021744 024054 0ustar00markusmarkus000000 000000 Introduction

    Chapter 1. Introduction

    PostgreSQL is an object-relational database management system (ORDBMS) based on POSTGRES, Version 4.2, developed at the University of California at Berkeley Computer Science Department. The POSTGRES project, led by Professor Michael Stonebraker, was sponsored by the Defense Advanced Research Projects Agency (DARPA), the Army Research Office (ARO), the National Science Foundation (NSF), and ESL, Inc.

    PostgreSQL is an open-source descendant of this original Berkeley code. It provides SQL92/SQL99 language support and other modern features.

    More information can be found from the PostgreSQL website.

    libdbi-drivers-0.9.0/drivers/pgsql/dbd_pgsql/options.html000644 001750 001750 00000010630 11530021744 024410 0ustar00markusmarkus000000 000000 Driver options

    Chapter 3. Driver options

    Before you can initiate a connection, you must usually specify options that tell the database driver what to connect to. This driver supports the standard options of host, username, password, dbname, timeout, and port, as well as PostgreSQL-specific options. You only need to set options that are specific to your application -- sensible defaults will be used for all unspecified options.

    host

    If this begins with a slash, it specifies Unix-domain communication rather than TCP/IP communication; the value is the name of the directory in which the socket file is stored. The default behavior when host is not specified is to connect to a Unix-domain socket in /tmp (or whatever socket directory was specified when PostgreSQL was built).

    port

    Port number to connect to at the server host, or socket file name extension for Unix-domain connections.

    username

    The name of the user accessing the database.

    password

    The password of the user accessing the database.

    dbname

    The name of the database used for the initial connection. If your program must be able to connect to a fresh PostgreSQL installation, use the system database template1.

    timeout (numeric)

    The connection timeout in seconds. If the option is not specified, or if it is 0 (zero), stale connections never time out.

    encoding

    The IANA name of a character encoding which is to be used as the connection encoding. Input and output data will be silently converted from and to this character encoding, respectively. The list of available character encodings depends on your local PostgreSQL installation. If you set this option to "auto", the connection encoding will be the same as the database encoding.

    pgsql_foo

    Pass option foo directly to libpq. For valid options, refer to the libpq documentation.

    libdbi-drivers-0.9.0/drivers/pgsql/dbd_pgsql/specific.html000644 001750 001750 00000005076 11530021744 024512 0ustar00markusmarkus000000 000000 PostgreSQL-specific Peculiarities

    Chapter 4. PostgreSQL-specific Peculiarities

    This chapter lists known peculiarities of the pgsql driver. Wherever possible, nonstandard driver behavior is hidden by libdbi's abstractions, but occasionally special considerations must be taken or extra functionality may be utilized for particular drivers.

    PostgreSQL has no intrinsic concept of unsigned fields (although you can still use the "OID" type as an unsigned long, or define your own user-defined unsigned types). User-defined types are not handled specially. All unrecognized datatypes are preserved as strings.

    PostgreSQL does not support a 1-byte numeric datatype.

    libdbi-drivers-0.9.0/drivers/mysql/dbd_mysql/000755 001750 001750 00000000000 12117473272 022076 5ustar00markusmarkus000000 000000 libdbi-drivers-0.9.0/drivers/mysql/README000644 001750 001750 00000003304 10431510667 020775 0ustar00markusmarkus000000 000000 libdbi-drivers - drivers for libdbi, the Database Independent Abstraction Layer for C Copyright (C) 2001-2003, Mark M. Tobenkin http://libdbi-drivers.sourceforge.net MYSQL DRIVER: -------------- A driver providing connectivity to MySQL databases using libmysqlclient (http://www.mysql.org) NOTES: ------ To allow for row seeking, results are loaded into memory. This is very inefficient and may provide a bottleneck for large applications. DATETIME, TIMESTAMP, DATE and TIME will all be treated as the DBI type of DATETIME. This is currently a string, but will change in later releases. WARNING: The DECIMAL type is treated as a string, as it has arbitrary precision. Whether or not a trailing \0 value will be added to Binary string can be configured using: dbi_set_option_numeric("mysql_include_trailing_null",1); //include dbi_set_option_numeric("mysql_include_trailing_null",0); //don't include (For convenience, a trailing zero byte always follows the data, so that string casts can work. The above option just determines whether that byte is counted.) The function implementing dbi_conn_sequence_last() returns "the value generated for an AUTO_INCREMENT column by the previous INSERT or UPDATE statement". Any sequence name passed as a parameter is ignored. (See the MySQL API function mysql_insert_id(), http://dev.mysql.com/doc/refman/5.0/en/mysql-insert-id.html ) The function implementing dbi_conn_sequence_next() does nothing; MySQL does not use named sequences. CONTACT INFO: ------------- libdbi-drivers-devel@lists.sourceforge.net http://libdbi-drivers.sourceforge.net Mark M. Tobenkin $Id: README,v 1.2 2006/05/14 02:11:03 qu1j0t3 Exp $ libdbi-drivers-0.9.0/drivers/mysql/Makefile.am000644 001750 001750 00000003134 11447472773 022167 0ustar00markusmarkus000000 000000 ## Process this file with automake to produce Makefile.in AUTOMAKE_OPTIONS = foreign docdir = $(datadir)/doc/$(PACKAGE)-$(VERSION) if HAVE_MYSQL if BUILDDOCS # don't use docdir, doc_DATA. This way we keep the HTML in separate subdirs # for each driver htdocdir = $(docdir)/dbd_mysql doc_DATA = dbd_mysql.pdf htdoc_DATA = dbd_mysql/* else htdocdir = doc_DATA = htdoc_DATA = endif mysql_ltlibs = libdbdmysql.la mysql_ldflags = -module -avoid-version mysql_sources = dbd_mysql.c else htdocdir = doc_DATA = htdoc_DATA = mysql_ltlibs = mysql_ldflags = mysql_sources = endif INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/include @DBI_INCLUDE@ @MYSQL_INCLUDE@ libdir = $(driverdir) lib_LTLIBRARIES = $(mysql_ltlibs) libdbdmysql_la_LDFLAGS = $(mysql_ldflags) @MYSQL_LDFLAGS@ @MYSQL_LIBS@ @LIBADD_LIBDBI@ libdbdmysql_la_SOURCES = $(mysql_sources) libdbdmysql_la_DEPENDENCIES = dbd_mysql.h EXTRA_DIST = dbd_mysql.c dbd_mysql.h AUTHORS TODO README dbd_mysql.sgml dbd_mysql.pdf $(htdoc_DATA) # jadetex spews out tons of useless crap. shut it up: dbd_mysql.pdf: dbd_mysql.sgml @echo "Converting dbd_mysql.sgml to PDF..."; openjade -t tex -V tex-backend -d $(top_srcdir)/doc/include/doc-print.dsl dbd_mysql.sgml # run jadetex three times to get the references right pdftex "&pdfjadetex" dbd_mysql.tex pdftex "&pdfjadetex" dbd_mysql.tex pdftex "&pdfjadetex" dbd_mysql.tex dbd_mysql/*: dbd_mysql.sgml @echo "Converting dbd_mysql.sgml to HTML..."; mkdir -p dbd_mysql && cd dbd_mysql && openjade -t sgml -d $(top_srcdir)/../doc/include/doc-html.dsl ../dbd_mysql.sgml maintainer-clean: clean rm -f dbd_mysql.pdf dbd_mysql/* libdbi-drivers-0.9.0/drivers/mysql/Makefile.in000644 001750 001750 00000055320 12117467053 022172 0ustar00markusmarkus000000 000000 # Makefile.in generated by automake 1.12.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2012 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = drivers/mysql DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(top_srcdir)/depcomp AUTHORS TODO ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(docdir)" \ "$(DESTDIR)$(htdocdir)" LTLIBRARIES = $(lib_LTLIBRARIES) libdbdmysql_la_LIBADD = am__libdbdmysql_la_SOURCES_DIST = dbd_mysql.c @HAVE_MYSQL_TRUE@am__objects_1 = dbd_mysql.lo am_libdbdmysql_la_OBJECTS = $(am__objects_1) libdbdmysql_la_OBJECTS = $(am_libdbdmysql_la_OBJECTS) libdbdmysql_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(libdbdmysql_la_LDFLAGS) $(LDFLAGS) -o $@ @HAVE_MYSQL_TRUE@am_libdbdmysql_la_rpath = -rpath $(libdir) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(libdbdmysql_la_SOURCES) DIST_SOURCES = $(am__libdbdmysql_la_SOURCES_DIST) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac DATA = $(doc_DATA) $(htdoc_DATA) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DB2_INCLUDE = @DB2_INCLUDE@ DB2_LDFLAGS = @DB2_LDFLAGS@ DB2_LIBS = @DB2_LIBS@ DB2_TEST = @DB2_TEST@ DBI_INCLUDE = @DBI_INCLUDE@ DEBUG = @DEBUG@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FIREBIRD_INCLUDE = @FIREBIRD_INCLUDE@ FIREBIRD_ISQL = @FIREBIRD_ISQL@ FIREBIRD_ISQL_FLAG = @FIREBIRD_ISQL_FLAG@ FIREBIRD_LDFLAGS = @FIREBIRD_LDFLAGS@ FIREBIRD_LIBS = @FIREBIRD_LIBS@ FIREBIRD_TEST = @FIREBIRD_TEST@ FREETDS_INCLUDE = @FREETDS_INCLUDE@ FREETDS_LDFLAGS = @FREETDS_LDFLAGS@ FREETDS_LIBS = @FREETDS_LIBS@ FREETDS_TEST = @FREETDS_TEST@ GREP = @GREP@ INGRES_INCLUDE = @INGRES_INCLUDE@ INGRES_LDFLAGS = @INGRES_LDFLAGS@ INGRES_LIBS = @INGRES_LIBS@ INGRES_TEST = @INGRES_TEST@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBADD_LIBDBI = @LIBADD_LIBDBI@ LIBDBI_LIBDIR = @LIBDBI_LIBDIR@ LIBDBI_TEST = @LIBDBI_TEST@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSQL_INCLUDE = @MSQL_INCLUDE@ MSQL_LDFLAGS = @MSQL_LDFLAGS@ MSQL_LIBS = @MSQL_LIBS@ MSQL_TEST = @MSQL_TEST@ MYSQL_CONFIG = @MYSQL_CONFIG@ MYSQL_INCLUDE = @MYSQL_INCLUDE@ MYSQL_LDFLAGS = @MYSQL_LDFLAGS@ MYSQL_LIBS = @MYSQL_LIBS@ MYSQL_TEST = @MYSQL_TEST@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ ORACLE_INCLUDE = @ORACLE_INCLUDE@ ORACLE_LDFLAGS = @ORACLE_LDFLAGS@ ORACLE_LIBS = @ORACLE_LIBS@ ORACLE_TEST = @ORACLE_TEST@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PGSQL_INCLUDE = @PGSQL_INCLUDE@ PGSQL_LDFLAGS = @PGSQL_LDFLAGS@ PGSQL_LIBS = @PGSQL_LIBS@ PGSQL_TEST = @PGSQL_TEST@ PG_CONFIG = @PG_CONFIG@ PROFILE = @PROFILE@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SQLITE3_INCLUDE = @SQLITE3_INCLUDE@ SQLITE3_LDFLAGS = @SQLITE3_LDFLAGS@ SQLITE3_LIBS = @SQLITE3_LIBS@ SQLITE3_TEST = @SQLITE3_TEST@ SQLITE_INCLUDE = @SQLITE_INCLUDE@ SQLITE_LDFLAGS = @SQLITE_LDFLAGS@ SQLITE_LIBS = @SQLITE_LIBS@ SQLITE_TEST = @SQLITE_TEST@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ dbi_dbdir = @dbi_dbdir@ docdir = $(datadir)/doc/$(PACKAGE)-$(VERSION) docs_subdirs = @docs_subdirs@ driverdir = @driverdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = $(driverdir) libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = foreign @BUILDDOCS_FALSE@@HAVE_MYSQL_TRUE@htdocdir = # don't use docdir, doc_DATA. This way we keep the HTML in separate subdirs # for each driver @BUILDDOCS_TRUE@@HAVE_MYSQL_TRUE@htdocdir = $(docdir)/dbd_mysql @HAVE_MYSQL_FALSE@htdocdir = @BUILDDOCS_FALSE@@HAVE_MYSQL_TRUE@doc_DATA = @BUILDDOCS_TRUE@@HAVE_MYSQL_TRUE@doc_DATA = dbd_mysql.pdf @HAVE_MYSQL_FALSE@doc_DATA = @BUILDDOCS_FALSE@@HAVE_MYSQL_TRUE@htdoc_DATA = @BUILDDOCS_TRUE@@HAVE_MYSQL_TRUE@htdoc_DATA = dbd_mysql/* @HAVE_MYSQL_FALSE@htdoc_DATA = @HAVE_MYSQL_FALSE@mysql_ltlibs = @HAVE_MYSQL_TRUE@mysql_ltlibs = libdbdmysql.la @HAVE_MYSQL_FALSE@mysql_ldflags = @HAVE_MYSQL_TRUE@mysql_ldflags = -module -avoid-version @HAVE_MYSQL_FALSE@mysql_sources = @HAVE_MYSQL_TRUE@mysql_sources = dbd_mysql.c INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/include @DBI_INCLUDE@ @MYSQL_INCLUDE@ lib_LTLIBRARIES = $(mysql_ltlibs) libdbdmysql_la_LDFLAGS = $(mysql_ldflags) @MYSQL_LDFLAGS@ @MYSQL_LIBS@ @LIBADD_LIBDBI@ libdbdmysql_la_SOURCES = $(mysql_sources) libdbdmysql_la_DEPENDENCIES = dbd_mysql.h EXTRA_DIST = dbd_mysql.c dbd_mysql.h AUTHORS TODO README dbd_mysql.sgml dbd_mysql.pdf $(htdoc_DATA) all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign drivers/mysql/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign drivers/mysql/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ } uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libdbdmysql.la: $(libdbdmysql_la_OBJECTS) $(libdbdmysql_la_DEPENDENCIES) $(EXTRA_libdbdmysql_la_DEPENDENCIES) $(libdbdmysql_la_LINK) $(am_libdbdmysql_la_rpath) $(libdbdmysql_la_OBJECTS) $(libdbdmysql_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dbd_mysql.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-docDATA: $(doc_DATA) @$(NORMAL_INSTALL) @list='$(doc_DATA)'; test -n "$(docdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(docdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(docdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(docdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(docdir)" || exit $$?; \ done uninstall-docDATA: @$(NORMAL_UNINSTALL) @list='$(doc_DATA)'; test -n "$(docdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(docdir)'; $(am__uninstall_files_from_dir) install-htdocDATA: $(htdoc_DATA) @$(NORMAL_INSTALL) @list='$(htdoc_DATA)'; test -n "$(htdocdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(htdocdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(htdocdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(htdocdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(htdocdir)" || exit $$?; \ done uninstall-htdocDATA: @$(NORMAL_UNINSTALL) @list='$(htdoc_DATA)'; test -n "$(htdocdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(htdocdir)'; $(am__uninstall_files_from_dir) ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(DATA) installdirs: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(docdir)" "$(DESTDIR)$(htdocdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-docDATA install-htdocDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-libLTLIBRARIES install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-docDATA uninstall-htdocDATA \ uninstall-libLTLIBRARIES .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libLTLIBRARIES clean-libtool cscopelist ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am \ install-docDATA install-dvi install-dvi-am install-exec \ install-exec-am install-htdocDATA install-html install-html-am \ install-info install-info-am install-libLTLIBRARIES \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \ uninstall-am uninstall-docDATA uninstall-htdocDATA \ uninstall-libLTLIBRARIES # jadetex spews out tons of useless crap. shut it up: dbd_mysql.pdf: dbd_mysql.sgml @echo "Converting dbd_mysql.sgml to PDF..."; openjade -t tex -V tex-backend -d $(top_srcdir)/doc/include/doc-print.dsl dbd_mysql.sgml # run jadetex three times to get the references right pdftex "&pdfjadetex" dbd_mysql.tex pdftex "&pdfjadetex" dbd_mysql.tex pdftex "&pdfjadetex" dbd_mysql.tex dbd_mysql/*: dbd_mysql.sgml @echo "Converting dbd_mysql.sgml to HTML..."; mkdir -p dbd_mysql && cd dbd_mysql && openjade -t sgml -d $(top_srcdir)/../doc/include/doc-html.dsl ../dbd_mysql.sgml maintainer-clean: clean rm -f dbd_mysql.pdf dbd_mysql/* # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: libdbi-drivers-0.9.0/drivers/mysql/AUTHORS000644 001750 001750 00000000451 10431510667 021165 0ustar00markusmarkus000000 000000 The following people have been involved in the MySQL driver development: Main developer: * Mark Tobenkin Code Maintenance: * David Parker * Toby Thain $Id: AUTHORS,v 1.2 2006/05/14 02:11:03 qu1j0t3 Exp $ libdbi-drivers-0.9.0/drivers/mysql/TODO000644 001750 001750 00000000267 07671610156 020620 0ustar00markusmarkus000000 000000 $Id: TODO,v 1.1 2003/06/11 11:20:14 mmt Exp $ - add mysql_insert_id functionality as a custom function - improve date handling code - test handling of binary strings (BLOB etc.) libdbi-drivers-0.9.0/drivers/mysql/dbd_mysql.c000644 001750 001750 00000062367 12113511704 022245 0ustar00markusmarkus000000 000000 /* * libdbi - database independent abstraction layer for C. * Copyright (C) 2001-2002, David Parker and Mark Tobenkin. * http://libdbi.sourceforge.net * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * dbd_mysql.c: MySQL database support (using libmysqlclient) * Copyright (C) 2001-2002, Mark Tobenkin * http://libdbi.sourceforge.net * * $Id: dbd_mysql.c,v 1.109 2013/02/27 23:16:20 mhoenicka Exp $ */ #ifdef HAVE_CONFIG_H #include #endif #define _GNU_SOURCE /* we need asprintf */ #ifndef HAVE_ATOLL long long atoll(const char *str); #endif #ifndef HAVE_STRTOLL long long strtoll(const char *nptr, char **endptr, int base); #endif #ifdef __MINGW32__ #include #endif #include #include #include #include #include #include #include #include #include "dbd_mysql.h" static const dbi_info_t driver_info = { "mysql", "MySQL database support (using libmysqlclient)", "Mark M. Tobenkin ", "http://libdbi-drivers.sourceforge.net", "dbd_mysql v" VERSION, __DATE__ }; static const char *custom_functions[] = MYSQL_CUSTOM_FUNCTIONS; static const char *reserved_words[] = MYSQL_RESERVED_WORDS; /* encoding strings, array is terminated by a pair of empty strings */ static const char mysql_encoding_hash[][16] = { /* MySQL, www.iana.org */ "ascii", "US-ASCII", "ujis", "EUC-JP", "euc_kr", "EUC-KR", "euckr", "EUC-KR", "utf8", "UTF-8", "latin1", "ISO-8859-1", "latin2", "ISO-8859-2", "latin5", "ISO-8859-9", "latin7", "ISO-8859-13", "greek", "ISO-8859-7", "hebrew", "ISO-8859-8", "koi8_ru", "KOI8-R", "koi8r", "KOI8-R", "koi8_ukr","KOI8-U", "koi8u","KOI8-U", "cp1251","windows-1251", "win1250","windows-1250", "cp1250","windows-1250", "cp1256","windows-1256", "win1257","windows-1257", "cp1257","windows-1257", "cp850","IBM850", "cp852","IBM852", "dos","IBM865", "cp866","IBM866", "big5","Big5", "gb2312","GB2312", "sjis","Shift_JIS", "danish","ISO646-NO", "hungarian","ISO646-HU", "gbk","GBK", "ucs2","ISO-10646-UCS-2", "dec8","DEC-MCS", "tis620","TIS-620", "hp8","hp-roman8", "", "" }; /* forward declarations of local functions */ void _translate_mysql_type(MYSQL_FIELD *field, unsigned short *type, unsigned int *attribs); void _get_field_info(dbi_result_t *result); void _get_row_data(dbi_result_t *result, dbi_row_t *row, unsigned long long rowidx); void dbd_register_driver(const dbi_info_t **_driver_info, const char ***_custom_functions, const char ***_reserved_words) { /* this is the first function called after the driver module is loaded into memory */ *_driver_info = &driver_info; *_custom_functions = custom_functions; *_reserved_words = reserved_words; } int dbd_initialize(dbi_driver_t *driver) { /* perform any database-specific server initialization. * this is called right after dbd_register_driver(). * return -1 on error, 0 on success. * if -1 is returned, the driver will not * be added to the list of available drivers. */ /* this indicates the driver can be safely unloaded when libdbi is shut down. Change the value to '0' (zero) if the driver, or a library it is linked against, installs exit handlers via atexit() */ _dbd_register_driver_cap(driver, "safe_dlclose", 1); /* this indicates the database engine supports transactions */ _dbd_register_driver_cap(driver, "transaction_support", 1); /* this indicates the database engine supports savepoints */ _dbd_register_driver_cap(driver, "savepoint_support", 1); return 0; } int dbd_finalize(dbi_driver_t *driver) { /* perform any database-specific client library shutdown. * this is called right before dlclose()ing the driver. * return -1 on error, 0 on success. */ /* free memory allocated by the library. mysql_server_end() is deprecated as of MySQL 5.0.3, but the replacement mysql_library_end() is simply an alias defined in mysql.h. Leave this as is until it breaks */ mysql_server_end(); return 0; } int dbd_connect(dbi_conn_t *conn) { MYSQL *mycon; dbi_result_t *result = NULL; char* sql_cmd; unsigned long client_flags = 0; long n_port = 0; const char *host = dbi_conn_get_option(conn, "host"); const char *username = dbi_conn_get_option(conn, "username"); const char *password = dbi_conn_get_option(conn, "password"); const char *dbname = dbi_conn_get_option(conn, "dbname"); const char *encoding = dbi_conn_get_option(conn, "encoding"); const char *port = dbi_conn_get_option(conn, "port"); if (port) { n_port = strtol(port, NULL, 10); } else { n_port = (long)dbi_conn_get_option_numeric(conn, "port"); } /* if no port was specified, use MySQL's default port to let things run gracefully */ if (n_port == 0) { n_port = 3306; } int timeout = dbi_conn_get_option_numeric(conn, "timeout"); /* mysql specific options */ const char *unix_socket = dbi_conn_get_option(conn, "mysql_unix_socket"); /* we honor the mysql_compression flag for the sake of backwards compatibility. Newer code should use the mysql_client_whatever flags instead */ client_flags |= (dbi_conn_get_option_numeric(conn, "mysql_compression") > 0) ? CLIENT_COMPRESS : 0; client_flags |= (dbi_conn_get_option_numeric(conn, "mysql_client_compress") > 0) ? CLIENT_COMPRESS : 0; client_flags |= (dbi_conn_get_option_numeric(conn, "mysql_client_found_rows") > 0) ? CLIENT_FOUND_ROWS : 0; client_flags |= (dbi_conn_get_option_numeric(conn, "mysql_client_ignore_SPACE") > 0) ? CLIENT_IGNORE_SPACE : 0; client_flags |= (dbi_conn_get_option_numeric(conn, "mysql_client_interactive") > 0) ? CLIENT_INTERACTIVE : 0; client_flags |= (dbi_conn_get_option_numeric(conn, "mysql_client_local_files") > 0) ? CLIENT_LOCAL_FILES : 0; client_flags |= (dbi_conn_get_option_numeric(conn, "mysql_client_multi_statements") > 0) ? CLIENT_MULTI_STATEMENTS : 0; client_flags |= (dbi_conn_get_option_numeric(conn, "mysql_client_multi_results") > 0) ? CLIENT_MULTI_RESULTS : 0; client_flags |= (dbi_conn_get_option_numeric(conn, "mysql_client_no_schema") > 0) ? CLIENT_NO_SCHEMA : 0; client_flags |= (dbi_conn_get_option_numeric(conn, "mysql_client_odbc") > 0) ? CLIENT_ODBC : 0; mycon = mysql_init(NULL); if (!mycon) { _dbd_internal_error_handler(conn, NULL, DBI_ERROR_NOMEM); return -2; } if (timeout != -1) { /* option was specified */ /* the mysql_options prototype is braindead */ mysql_options(mycon, MYSQL_OPT_CONNECT_TIMEOUT, (const char*) &timeout); } if (!mysql_real_connect(mycon, host, username, password, dbname, (unsigned int)n_port, unix_socket, client_flags)) { /* printf("mysql_real_connect failed with host=%s\nusername=%s\npassword=%s\ndbname=%s\nport=%s\n", username,password,dbname,port); */ conn->connection = (void *)mycon; // still need this set so _error_handler can grab information _dbd_internal_error_handler(conn, NULL, DBI_ERROR_DBD); mysql_close(mycon); conn->connection = NULL; // myconn no longer valid return -2; } else { conn->connection = (void *)mycon; if (dbname) conn->current_db = strdup(dbname); } if (encoding && *encoding) { /* set connection encoding */ if (!strcmp(encoding, "auto")) { encoding = dbd_get_encoding(conn); if (encoding) { asprintf(&sql_cmd, "SET NAMES '%s'", dbd_encoding_from_iana(encoding)); result = dbd_query(conn, sql_cmd); free(sql_cmd); dbi_result_free(result); } } else { asprintf(&sql_cmd, "SET NAMES '%s'", dbd_encoding_from_iana(encoding)); result = dbd_query(conn, sql_cmd); free(sql_cmd); dbi_result_free(result); } } return 0; } int dbd_disconnect(dbi_conn_t *conn) { if (conn->connection) mysql_close((MYSQL *)conn->connection); return 0; } int dbd_fetch_row(dbi_result_t *result, unsigned long long rowidx) { dbi_row_t *row = NULL; if (result->result_state == NOTHING_RETURNED) return 0; if (result->result_state == ROWS_RETURNED) { /* get row here */ row = _dbd_row_allocate(result->numfields); _get_row_data(result, row, rowidx); _dbd_row_finalize(result, row, rowidx); } return 1; /* 0 on error, 1 on successful fetchrow */ } int dbd_free_query(dbi_result_t *result) { if (result->result_handle) mysql_free_result((MYSQL_RES *)result->result_handle); return 0; } int dbd_goto_row(dbi_result_t *result, unsigned long long rowidx, unsigned long long currowidx) { if (rowidx != currowidx+1) { mysql_data_seek((MYSQL_RES *)result->result_handle, rowidx); /* the return type of this function is indeed void, so it is unclear what happens if rowidx is outside the range. The calling function must make sure the row index is valid */ } /* else: nothing to do, next fetch will fetch next row */ return 1; } int dbd_get_socket(dbi_conn_t *conn){ MYSQL *mycon = (MYSQL*)conn->connection; return mycon ? mycon->net.fd : -1; } const char *dbd_get_encoding(dbi_conn_t *conn){ MYSQL *mycon = (MYSQL*)conn->connection; const char* my_enc = NULL; const char* iana_enc = NULL; dbi_result dbires = NULL; dbi_result dbires1 = NULL; dbi_result dbires2 = NULL; const char* schemastring; const char* encodingopt; char* sql_cmd; if (!mycon) return NULL; /* quite a mess. Set the dbi option "encoding" to "auto" to get a behaviour similar to PostgreSQL where the default connection encoding is identical to the database encoding. If you do not use this option, or if you explicitly requested a particular connection encoding, this encoding will be returned [it has been set in dbd_connect()] */ encodingopt = dbi_conn_get_option(conn, "encoding"); if (encodingopt && !strcmp(encodingopt, "auto")) { asprintf(&sql_cmd, "SHOW CREATE DATABASE %s", conn->current_db); /* printf("SHOW CREATE DATABASE %s", conn->current_db); */ dbires = dbi_conn_query(conn, sql_cmd); if (dbires && dbi_result_next_row(dbires)) { /* 4.x apparently returns these values as binary, 5.x as string */ if (dbi_result_get_field_type_idx(dbires, 2) == DBI_TYPE_STRING) { schemastring = dbi_result_get_string_idx(dbires, 2); } else { schemastring = dbi_result_get_binary_idx(dbires, 2); } if (schemastring && *schemastring) { my_enc = strstr(schemastring, "CHARACTER SET"); /* printf("schemastring:%s<current_db); */ dbires1 = dbi_conn_query(conn, sql_cmd); if (dbires1 && dbi_result_next_row(dbires1)) { if (dbi_result_get_field_type_idx(dbires1, 2) == DBI_TYPE_STRING) { my_enc = dbi_result_get_string_idx(dbires1, 2); } else { my_enc = dbi_result_get_binary_idx(dbires1, 2); } } /* my_enc = mysql_character_set_name(mycon); */ /* printf("mysql claims enc:%s<<\n", my_enc); */ if (!my_enc) { /* this may be a pre-4.1 server w/o per-connection encoding */ asprintf(&sql_cmd, "SHOW VARIABLES LIKE '%s'", "character_set"); /* printf("SHOW CREATE DATABASE %s", conn->current_db); */ dbires2 = dbi_conn_query(conn, sql_cmd); if (dbires2 && dbi_result_next_row(dbires2)) { if (dbi_result_get_field_type_idx(dbires2, 2) == DBI_TYPE_STRING) { my_enc = dbi_result_get_string_idx(dbires2, 2); } else { my_enc = dbi_result_get_binary_idx(dbires2, 2); } } } free(sql_cmd); if (!my_enc) { if (dbires) { dbi_result_free(dbires); } if (dbires1) { dbi_result_free(dbires1); } if (dbires2) { dbi_result_free(dbires1); } return NULL; } } iana_enc = dbd_encoding_to_iana(my_enc); if (dbires) { dbi_result_free(dbires); } if (dbires1) { dbi_result_free(dbires1); } if (dbires2) { dbi_result_free(dbires2); } return iana_enc; } const char* dbd_encoding_to_iana(const char *db_encoding) { int i = 0; /* loop over all even entries in hash and compare to menc */ while (*mysql_encoding_hash[i]) { if (!strncmp(mysql_encoding_hash[i], db_encoding, strlen(mysql_encoding_hash[i]))) { /* return corresponding odd entry */ return mysql_encoding_hash[i+1]; } i += 2; } /* don't know how to translate, return original encoding */ return db_encoding; } const char* dbd_encoding_from_iana(const char *iana_encoding) { int i = 0; /* loop over all odd entries in hash and compare to ienc */ while (*mysql_encoding_hash[i+1]) { if (!strcmp(mysql_encoding_hash[i+1], iana_encoding)) { /* return corresponding even entry */ return mysql_encoding_hash[i]; } i += 2; } /* don't know how to translate, return original encoding */ return iana_encoding; } char *dbd_get_engine_version(dbi_conn_t *conn, char *versionstring) { dbi_result_t *dbi_result; const char *versioninfo = NULL; /* initialize return string */ *versionstring = '\0'; dbi_result = dbd_query(conn, "SELECT VERSION()"); if (dbi_result) { if (dbi_result_next_row(dbi_result)) { versioninfo = dbi_result_get_string_idx(dbi_result, 1); strncpy(versionstring, versioninfo, VERSIONSTRING_LENGTH-1); versionstring[VERSIONSTRING_LENGTH-1] = '\0'; } dbi_result_free(dbi_result); } return versionstring; } dbi_result_t *dbd_list_dbs(dbi_conn_t *conn, const char *pattern) { dbi_result_t *res; char *sql_cmd; if (pattern == NULL) { return dbd_query(conn, "SHOW DATABASES"); } else { asprintf(&sql_cmd, "SHOW DATABASES LIKE '%s'", pattern); res = dbd_query(conn, sql_cmd); free(sql_cmd); return res; } } dbi_result_t *dbd_list_tables(dbi_conn_t *conn, const char *db, const char *pattern) { dbi_result_t *res; char *sql_cmd; if (db == NULL || db[0] == '\0') { return dbd_query(conn, "SHOW TABLES"); } if (pattern == NULL) { asprintf(&sql_cmd, "SHOW TABLES FROM %s", db); res = dbd_query(conn, sql_cmd); free(sql_cmd); return res; } else { asprintf(&sql_cmd, "SHOW TABLES FROM %s LIKE '%s'", db, pattern); res = dbd_query(conn, sql_cmd); free(sql_cmd); return res; } } size_t dbd_quote_string(dbi_driver_t *driver, const char *orig, char *dest) { /* foo's -> 'foo\'s' */ unsigned long len; strcpy(dest, "'"); len = mysql_escape_string(dest+1, orig, strlen(orig)); strcat(dest, "'"); return (size_t)(len+2); } size_t dbd_conn_quote_string(dbi_conn_t *conn, const char *orig, char *dest) { /* foo's -> 'foo\'s' */ unsigned long len; MYSQL *mycon = (MYSQL*)conn->connection; strcpy(dest, "'"); len = mysql_real_escape_string(mycon, dest+1, orig, strlen(orig)); strcat(dest, "'"); return (size_t)(len+2); } size_t dbd_quote_binary(dbi_conn_t *conn, const unsigned char* orig, size_t from_length, unsigned char **ptr_dest) { unsigned char *temp; unsigned long len; MYSQL *mycon = (MYSQL*)conn->connection; /* we allocate what mysql_real_escape_string needs, plus an extra two escape chars and a terminating zero*/ temp = malloc(2*from_length+1+2); if (!temp) { return DBI_LENGTH_ERROR; } strcpy((char *)temp, "'"); len = mysql_real_escape_string(mycon, (char *)(temp+1), (const char *)orig, from_length); strcpy((char *)(temp+len+1), "\'"); *ptr_dest = temp; return (size_t)len+2; } dbi_result_t *dbd_query(dbi_conn_t *conn, const char *statement) { /* allocate a new dbi_result_t and fill its applicable members: * * result_handle, numrows_matched, and numrows_changed. * everything else will be filled in by DBI */ dbi_result_t *result; MYSQL_RES *res; if (mysql_query((MYSQL *)conn->connection, statement)) { return NULL; } res = mysql_store_result((MYSQL *)conn->connection); /* if res is null and mysql reports an error, we encountered a select failure */ if (!res && mysql_errno((MYSQL *)conn->connection)) { return NULL; } /* else: if res is null and no error is indicated, the query was something that doesn't return rows (like an INSERT) */ result = _dbd_result_create(conn, (void *)res, (res ? mysql_num_rows(res) : 0), mysql_affected_rows((MYSQL *)conn->connection)); if (res) { _dbd_result_set_numfields(result, mysql_num_fields((MYSQL_RES *)result->result_handle)); _get_field_info(result); } else { _dbd_result_set_numfields(result, 0); } return result; } dbi_result_t *dbd_query_null(dbi_conn_t *conn, const unsigned char *statement, size_t st_length) { dbi_result_t *result; MYSQL_RES *res; if (mysql_real_query((MYSQL *)conn->connection, (const char *)statement, st_length)) { return NULL; } res = mysql_store_result((MYSQL *)conn->connection); /* if res is null, the query was something that doesn't return rows (like an INSERT) */ result = _dbd_result_create(conn, (void *)res, (res ? mysql_num_rows(res) : 0), mysql_affected_rows((MYSQL *)conn->connection)); if (res) { _dbd_result_set_numfields(result, mysql_num_fields((MYSQL_RES *)result->result_handle)); _get_field_info(result); } return result; } int dbd_transaction_begin(dbi_conn_t *conn) { if (dbd_query(conn, "START TRANSACTION") == NULL) { return 1; } else { return 0; } } int dbd_transaction_commit(dbi_conn_t *conn) { if (dbd_query(conn, "COMMIT") == NULL) { return 1; } else { return 0; } } int dbd_transaction_rollback(dbi_conn_t *conn) { if (dbd_query(conn, "ROLLBACK") == NULL) { return 1; } else { return 0; } } int dbd_savepoint(dbi_conn_t *conn, const char *savepoint) { char* query; if (!savepoint) { return 1; } asprintf(&query, "SAVEPOINT %s", savepoint); if (dbd_query(conn, query) == NULL) { free(query); return 1; } else { free(query); return 0; } } int dbd_rollback_to_savepoint(dbi_conn_t *conn, const char *savepoint) { char* query; if (!savepoint) { return 1; } asprintf(&query, "ROLLBACK TO SAVEPOINT %s", savepoint); if (dbd_query(conn, query) == NULL) { free(query); return 1; } else { free(query); return 0; } } int dbd_release_savepoint(dbi_conn_t *conn, const char *savepoint) { char* query; if (!savepoint) { return 1; } asprintf(&query, "RELEASE SAVEPOINT %s", savepoint); if (dbd_query(conn, query) == NULL) { free(query); return 1; } else { free(query); return 0; } } const char *dbd_select_db(dbi_conn_t *conn, const char *db) { if (mysql_select_db((MYSQL *)conn->connection, db)) { _dbd_internal_error_handler(conn, NULL, DBI_ERROR_DBD); return ""; } if (conn->current_db) { free(conn->current_db); } conn->current_db = strdup(db); return db; } int dbd_geterror(dbi_conn_t *conn, int *err_no, char **errstr) { /* put error number into err_no, error string into errstr * return 0 if error, 1 if err_no filled, 2 if errstr filled, 3 if both err_no and errstr filled */ if (strcmp("",mysql_error((MYSQL *)conn->connection)) == 0) { return -1; } *err_no = mysql_errno((MYSQL *)conn->connection); *errstr = strdup(mysql_error((MYSQL *)conn->connection)); return 3; } unsigned long long dbd_get_seq_last(dbi_conn_t *conn, const char *sequence) { return mysql_insert_id((MYSQL *)conn->connection); } unsigned long long dbd_get_seq_next(dbi_conn_t *conn, const char *sequence) { return 0; } int dbd_ping(dbi_conn_t *conn) { MYSQL *mysql = (MYSQL *)conn->connection; if (mysql_ping(mysql) == 0) { // server is alive and kicking return 1; } return 0; } /* CORE MYSQL DATA FETCHING STUFF */ void _translate_mysql_type(MYSQL_FIELD *field, unsigned short *type, unsigned int *attribs) { unsigned int _type = 0; unsigned int _attribs = 0; switch (field->type) { case FIELD_TYPE_TINY: _type = DBI_TYPE_INTEGER; _attribs |= DBI_INTEGER_SIZE1; break; case FIELD_TYPE_YEAR: _attribs |= DBI_INTEGER_UNSIGNED; case FIELD_TYPE_SHORT: _type = DBI_TYPE_INTEGER; _attribs |= DBI_INTEGER_SIZE2; break; case FIELD_TYPE_INT24: _type = DBI_TYPE_INTEGER; _attribs |= DBI_INTEGER_SIZE3; break; case FIELD_TYPE_LONG: _type = DBI_TYPE_INTEGER; _attribs |= DBI_INTEGER_SIZE4; break; #ifdef FIELD_TYPE_BIT case FIELD_TYPE_BIT: // BIT field (MySQL 5.0.3 and up) _attribs |= DBI_INTEGER_UNSIGNED; #endif case FIELD_TYPE_LONGLONG: _type = DBI_TYPE_INTEGER; _attribs |= DBI_INTEGER_SIZE8; break; case FIELD_TYPE_FLOAT: _type = DBI_TYPE_DECIMAL; _attribs |= DBI_DECIMAL_SIZE4; break; case FIELD_TYPE_DOUBLE: _type = DBI_TYPE_DECIMAL; _attribs |= DBI_DECIMAL_SIZE8; break; case FIELD_TYPE_DATE: /* TODO parse n stuph to native DBI unixtime type. for now, string */ _type = DBI_TYPE_DATETIME; _attribs |= DBI_DATETIME_DATE; break; case FIELD_TYPE_TIME: _type = DBI_TYPE_DATETIME; _attribs |= DBI_DATETIME_TIME; break; case FIELD_TYPE_DATETIME: case FIELD_TYPE_TIMESTAMP: _type = DBI_TYPE_DATETIME; _attribs |= DBI_DATETIME_DATE | DBI_DATETIME_TIME; break; case FIELD_TYPE_TINY_BLOB: case FIELD_TYPE_MEDIUM_BLOB: case FIELD_TYPE_LONG_BLOB: case FIELD_TYPE_BLOB: default: // see MySQL reference manual 22.2.1 on detecting binary flavour // http://dev.mysql.com/doc/refman/5.0/en/c-api-datatypes.html if(field->charsetnr == 63){ _type = DBI_TYPE_BINARY; break; } case FIELD_TYPE_VAR_STRING: case FIELD_TYPE_STRING: #ifdef FIELD_TYPE_NEWDECIMAL case FIELD_TYPE_NEWDECIMAL: // Precision math DECIMAL or NUMERIC field (MySQL 5.0.3 and up) #endif case FIELD_TYPE_DECIMAL: /* decimal is actually a string, has arbitrary precision, no floating point rounding */ case FIELD_TYPE_ENUM: case FIELD_TYPE_SET: _type = DBI_TYPE_STRING; break; } *type = _type; *attribs = _attribs; } void _get_field_info(dbi_result_t *result) { unsigned int idx = 0; MYSQL_FIELD *field; unsigned short fieldtype; unsigned int fieldattribs; field = mysql_fetch_fields((MYSQL_RES *)result->result_handle); while (idx < result->numfields) { _translate_mysql_type(&field[idx], &fieldtype, &fieldattribs); if ((fieldtype == DBI_TYPE_INTEGER) && (field[idx].flags & UNSIGNED_FLAG)) fieldattribs |= DBI_INTEGER_UNSIGNED; _dbd_result_add_field(result, idx, field[idx].name, fieldtype, fieldattribs); idx++; } } void _get_row_data(dbi_result_t *result, dbi_row_t *row, unsigned long long rowidx) { MYSQL_RES *_res = result->result_handle; MYSQL_ROW _row; unsigned int curfield = 0; char *raw = NULL; size_t *strsizes = NULL; unsigned int sizeattrib; dbi_data_t *data; _row = mysql_fetch_row(_res); strsizes = (size_t *)mysql_fetch_lengths(_res); while (curfield < result->numfields) { raw = _row[curfield]; data = &row->field_values[curfield]; row->field_sizes[curfield] = 0; /* this will be set to the string size later on if the field is indeed a string */ if ((strsizes[curfield] == 0) && (raw == NULL)) { _set_field_flag( row, curfield, DBI_VALUE_NULL, 1); curfield++; continue; } switch (result->field_types[curfield]) { case DBI_TYPE_INTEGER: switch (result->field_attribs[curfield] & DBI_INTEGER_SIZEMASK) { case DBI_INTEGER_SIZE1: data->d_char = (char) atol(raw); break; case DBI_INTEGER_SIZE2: data->d_short = (short) atol(raw); break; case DBI_INTEGER_SIZE3: case DBI_INTEGER_SIZE4: data->d_long = (int) atol(raw); break; case DBI_INTEGER_SIZE8: data->d_longlong = (long long) atoll(raw); break; default: break; } break; case DBI_TYPE_DECIMAL: switch (result->field_attribs[curfield] & DBI_DECIMAL_SIZEMASK) { case DBI_DECIMAL_SIZE4: data->d_float = (float) strtod(raw, NULL); break; case DBI_DECIMAL_SIZE8: data->d_double = (double) strtod(raw, NULL); break; default: break; } break; default: case DBI_TYPE_STRING: data->d_string = strdup(raw); row->field_sizes[curfield] = strsizes[curfield]; break; case DBI_TYPE_BINARY: row->field_sizes[curfield] = strsizes[curfield]; data->d_string = malloc(strsizes[curfield]+1); // one extra char for libdbi's null if (!data->d_string) { break; } memcpy(data->d_string, raw, strsizes[curfield]); /* todo: revise as this looks kinda strange */ data->d_string[strsizes[curfield]] = '\0'; // manually null-terminate the data so C string casting still works if (dbi_conn_get_option_numeric(result->conn, "mysql_include_trailing_null") == 1) { row->field_sizes[curfield]++; // the extra null we added was actually part of the original data } break; case DBI_TYPE_DATETIME: sizeattrib = result->field_attribs[curfield] & (DBI_DATETIME_DATE|DBI_DATETIME_TIME); data->d_datetime = _dbd_parse_datetime(raw, sizeattrib); break; } curfield++; } } libdbi-drivers-0.9.0/drivers/mysql/dbd_mysql.h000644 001750 001750 00000013626 10764325317 022261 0ustar00markusmarkus000000 000000 /* * libdbi - database independent abstraction layer for C. * Copyright (C) 2001-2002, David Parker and Mark Tobenkin. * http://libdbi.sourceforge.net * * dbd_mysql.c: MySQL database support (using libmysqlclient) * Copyright (C) 2001-2002, Mark M. Tobenkin . * http://libdbi.sourceforge.net * * $Id: dbd_mysql.h,v 1.4 2008/03/07 20:51:27 mhoenicka Exp $ */ #define MYSQL_RESERVED_WORDS { \ "ACTION", \ "ADD", \ "AGGREGATE", \ "ALL", \ "ALTER", \ "AFTER", \ "AND", \ "AS", \ "ASC", \ "AVG", \ "AVG_ROW_LENGTH", \ "AUTO_INCREMENT", \ "BETWEEN", \ "BIGINT", \ "BIT", \ "BINARY", \ "BLOB", \ "BOOL", \ "BOTH", \ "BY", \ "CASCADE", \ "CASE", \ "CHAR", \ "CHARACTER", \ "CHANGE", \ "CHECK", \ "CHECKSUM", \ "COLUMN", \ "COLUMNS", \ "COMMENT", \ "CONSTRAINT", \ "CREATE", \ "CROSS", \ "CURRENT_DATE", \ "CURRENT_TIME", \ "CURRENT_TIMESTAMP", \ "DATA", \ "DATABASE", \ "DATABASES", \ "DATE", \ "DATETIME", \ "DAY", \ "DAY_HOUR", \ "DAY_MINUTE", \ "DAY_SECOND", \ "DAYOFMONTH", \ "DAYOFWEEK", \ "DAYOFYEAR", \ "DEC", \ "DECIMAL", \ "DEFAULT", \ "DELAYED", \ "DELAY_KEY_WRITE", \ "DELETE", \ "DESC", \ "DESCRIBE", \ "DISTINCT", \ "DISTINCTROW", \ "DOUBLE", \ "DROP", \ "END", \ "ELSE", \ "ESCAPE", \ "ESCAPED", \ "ENCLOSED", \ "ENUM", \ "EXPLAIN", \ "EXISTS", \ "FIELDS", \ "FILE", \ "FIRST", \ "FLOAT", \ "FLOAT4", \ "FLOAT8", \ "FLUSH", \ "FOREIGN", \ "FROM", \ "FOR", \ "FULL", \ "FUNCTION", \ "GLOBAL", \ "GRANT", \ "GRANTS", \ "GROUP", \ "HAVING", \ "HEAP", \ "HIGH_PRIORITY", \ "HOUR", \ "HOUR_MINUTE", \ "HOUR_SECOND", \ "HOSTS", \ "IDENTIFIED", \ "IGNORE", \ "IN", \ "INDEX", \ "INFILE", \ "INNER", \ "INSERT", \ "INSERT_ID", \ "INT", \ "INTEGER", \ "INTERVAL", \ "INT1", \ "INT2", \ "INT3", \ "INT4", \ "INT8", \ "INTO", \ "IF", \ "IS", \ "ISAM", \ "JOIN", \ "KEY", \ "KEYS", \ "KILL", \ "LAST_INSERT_ID", \ "LEADING", \ "LEFT", \ "LENGTH", \ "LIKE", \ "LINES", \ "LIMIT", \ "LOAD", \ "LOCAL", \ "LOCK", \ "LOGS", \ "LONG", \ "LONGBLOB", \ "LONGTEXT", \ "LOW_PRIORITY", \ "MAX", \ "MAX_ROWS", \ "MATCH", \ "MEDIUMBLOB", \ "MEDIUMTEXT", \ "MEDIUMINT", \ "MIDDLEINT", \ "MIN_ROWS", \ "MINUTE", \ "MINUTE_SECOND", \ "MODIFY", \ "MONTH", \ "MONTHNAME", \ "MYISAM", \ "NATURAL", \ "NUMERIC", \ "NO", \ "NOT", \ "NULL", \ "ON", \ "OPTIMIZE", \ "OPTION", \ "OPTIONALLY", \ "OR", \ "ORDER", \ "OUTER", \ "OUTFILE", \ "PACK_KEYS", \ "PARTIAL", \ "PASSWORD", \ "PRECISION", \ "PRIMARY", \ "PROCEDURE", \ "PROCESS", \ "PROCESSLIST", \ "PRIVILEGES", \ "READ", \ "REAL", \ "REFERENCES", \ "RELOAD", \ "REGEXP", \ "RENAME", \ "REPLACE", \ "RESTRICT", \ "RETURNS", \ "REVOKE", \ "RLIKE", \ "ROW", \ "ROWS", \ "SECOND", \ "SELECT", \ "SET", \ "SHOW", \ "SHUTDOWN", \ "SMALLINT", \ "SONAME", \ "SQL_BIG_TABLES", \ "SQL_BIG_SELECTS", \ "SQL_LOW_PRIORITY_UPDATES", \ "SQL_LOG_OFF", \ "SQL_LOG_UPDATE", \ "SQL_SELECT_LIMIT", \ "SQL_SMALL_RESULT", \ "SQL_BIG_RESULT", \ "SQL_WARNINGS", \ "STRAIGHT_JOIN", \ "STARTING", \ "STATUS", \ "STRING", \ "TABLE", \ "TABLES", \ "TEMPORARY", \ "TERMINATED", \ "TEXT", \ "THEN", \ "TIME", \ "TIMESTAMP", \ "TINYBLOB", \ "TINYTEXT", \ "TINYINT", \ "TRAILING", \ "TO", \ "TYPE", \ "USE", \ "USING", \ "UNIQUE", \ "UNLOCK", \ "UNSIGNED", \ "UPDATE", \ "USAGE", \ "VALUES", \ "VARCHAR", \ "VARIABLES", \ "VARYING", \ "VARBINARY", \ "WITH", \ "WRITE", \ "WHEN", \ "WHERE", \ "YEAR", \ "YEAR_MONTH", \ "ZEROFILL", \ NULL } #define MYSQL_CUSTOM_FUNCTIONS { \ "my_init", \ "mysql_affected_rows", \ "mysql_autocommit", \ "mysql_change_user", \ "mysql_character_set_name", \ "mysql_close", \ "mysql_commit", \ "mysql_connect", \ "mysql_create_db", \ "mysql_data_seek", \ "mysql_debug", \ "mysql_drop_db", \ "mysql_dump_debug_info", \ "mysql_eof", \ "mysql_errno", \ "mysql_error", \ "mysql_escape_string", \ "mysql_fetch_field", \ "mysql_fetch_field_direct", \ "mysql_fetch_fields", \ "mysql_fetch_lengths", \ "mysql_fetch_row", \ "mysql_field_count", \ "mysql_field_seek", \ "mysql_field_tell", \ "mysql_free_result", \ "mysql_get_character_set_info", \ "mysql_get_client_info", \ "mysql_get_client_version", \ "mysql_get_host_info", \ "mysql_get_proto_info", \ "mysql_get_server_info", \ "mysql_get_server_version", \ "mysql_get_ssl_cipher", \ "mysql_hex_string", \ "mysql_info", \ "mysql_init", \ "mysql_insert_id", \ "mysql_kill", \ "mysql_library_end", \ "mysql_library_init", \ "mysql_list_dbs", \ "mysql_list_fields", \ "mysql_list_processes", \ "mysql_list_tables", \ "mysql_more_results", \ "mysql_next_result", \ "mysql_num_fields", \ "mysql_num_rows", \ "mysql_options", \ "mysql_ping", \ "mysql_query", \ "mysql_real_connect", \ "mysql_real_escape_string", \ "mysql_real_query", \ "mysql_refresh", \ "mysql_reload", \ "mysql_rollback", \ "mysql_row_seek", \ "mysql_row_tell", \ "mysql_select_db", \ "mysql_server_end", \ "mysql_server_init", \ "mysql_set_character_set", \ "mysql_set_local_infile_default", \ "mysql_set_local_infile_handler", \ "mysql_set_server_option", \ "mysql_sqlstate", \ "mysql_shutdown", \ "mysql_ssl_set", \ "mysql_stat", \ "mysql_store_result", \ "mysql_thread_end", \ "mysql_thread_id", \ "mysql_thread_init", \ "mysql_thread_safe", \ "mysql_use_result", \ "mysql_warning_count", \ NULL} libdbi-drivers-0.9.0/drivers/mysql/dbd_mysql.sgml000644 001750 001750 00000033053 12101101262 022742 0ustar00markusmarkus000000 000000 ]> mysql driver manual A libdbi driver providing connectivity to MySQL databases using libmysqlclient. Mark Tobenkin
    mmt@users.sourceforge.net
    Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is included in . 0.5 2012-01-27 0.4 2005-07-15 0.3 2003-4-12 0.2 2003-2-4 0.1 2002-11-5
    Preface libdbi is a database abstraction layer written in C. It implements a framework that can utilize separate driver libraries for specific database servers. The libdbi-drivers project provides the drivers necessary to talk to the supported database servers. This manual provides information about the MySQL driver. The manual is intended for programmers who write applications linked against libdbi and who want their applications to work with the MySQL driver. Questions and comments about the MySQL driver should be sent to the libdbi-drivers-devel mailing list. Visit the libdbi-drivers-devel list page to subscribe and for further information. Questions and comments about the libdbi library should be sent to the appropriate libdbi mailing list. The MySQL driver is maintained by Mark Tobenkin. Introduction MySQL, as of the time of this document's writing, is one of the fastest growing database systems worldwide. With approximately 4 million installations, and 30,000 daily downloads, the server has found a niche in the website development community. Quick deployment and ease of use are among it's assets. Installation This chapter describes the prerequisites and the procedures to build and install the mysql driver from the sources. Prerequisites The following packages have to be installed on your system: libdbi This library provides the framework of the database abstraction layer which can utilize the MySQL driver to perform database operations. The download page as well as the mailing lists with bug reports and patches are accessible at sourceforge.net/projects/libdbi. The current version of the MySQL driver requires libdbi version 0.8.x. libmysqlclient This library implements the client API for MySQL programs. Find the most recent release at www.mysql.com. The current version of the mysql driver should work with versions 4.x and 5.x. Build and install the mysql driver First you have to unpack the libdbi-drivers archive in a suitable directory. Unpacking will create a new subdirectory libdbi-drivers-X.Y where "X.Y" denotes the version: $ tar -xzf libdbi-drivers-X.Y.tar.gz The libdbi-drivers project consists of several drivers that use a common build system. Therefore you must tell configure explicitly that you want to build the mysql driver (you can list as many drivers as you want to build): $ cd libdbi-drivers $ ./configure --with-mysql Run ./configure --help to find out about additional options. Then build the driver with the command: $ make Please note that you may have to invoke gmake, the GNU version of make, on some systems. Then install the driver with the command (you'll need root permissions to do this): $ make install To test the operation of the newly installed driver, use the command: $ make check This command creates and runs a test program that performs a few basic input and output tests. The program will ask for an administrator username and password. This user can be any user who has database creation priveleges. Be sure to provide the name of a database which does not already exist (avoid 'test' which is used on many systems). If for some reason you need to re-create the autoconf/automake-related files, try running ./autogen.sh. I've found out that the current stable autoconf/automake/libtool versions (as found in FreeBSD 4.7 and Debian 3.0) do not cooperate well, so I found it necessary to run the older autoconf 2.13. If necessary, edit autogen.sh so that it will catch the older autoconf version on your system. Driver options Your application has to initialize libdbi drivers by setting some driver options with the dbi_conn_set_option() and the dbi_conn_set_option_numeric() library functions. The mysql driver supports the following options: host The hostname or IP address of the MySQL database server. Use an empty string or "localhost" to connect to a MySQL server running on the local machine. port (numeric) The port used to remotely connect to the MySQL database server over TCP. Use "0" (zero) to accept the default socket. username The name of the user accessing the database. password The password of the user accessing the database. dbname The name of the database used for the initial connection. If your program must be able to connect to a fresh MySQL installation, use the system database mysql. timeout (numeric) The connection timeout in seconds. encoding The IANA name of a character encoding which is to be used as the connection encoding. Input and output data will be silently converted from and to this character encoding, respectively. The list of available character encodings depends on your local MySQL installation. If you set this option to "auto", the connection encoding will be the same as the default encoding of the database. mysql_include_trailing_null (numeric) This item will tell the driver whether or not to include trailing null values ('\0') at the end of binary strings. This applies to the types BLOB, MEDIUMBLOB, LARGEBLOB etc. A numeric value of 0 will tell the driver to leave off the NULL value. A value of 1 will tell the driver to include the trailing NULL character. mysql_unix_socket The filename of the Unix socket used to connect to a MySQL database server running on the local machine. Provide an empty string to use the default socket. mysql_client_compress (numeric) A value larger than zero causes the client/server communication to be compressed. Set this to zero to use no data compression. mysql_client_found_rows (numeric) A value larger than zero causes the server to return the number of matched rows, not the number of affected rows. mysql_client_ignore_space (numeric) A value larger than zero causes the server to accept spaces after function names. mysql_client_interactive (numeric) A value larger than zero causes the client/server communication to use interactive_timeout instead of wait_timeout before closing an inactive connection. mysql_client_local_files (numeric) A value larger than zero enables LOAD DATA LOCAL handling. mysql_client_multi_statements (numeric) A value larger than zero causes server to accept multiple SQL statements in a single string, separated by semicolons (requires MySQL 4.1 or later). mysql_client_multi_results (numeric) A value larger than zero tells the server that the client can handle multiple result sets from multiple statements. This flag is automatically set if you use mysql_client_multi_statements (requires MySQL 4.1 or later). mysql_client_no_schema (numeric) A value larger than zero tells the server not to accept the db_name.tbl_name.col_name syntax.. mysql_client_odbc (numeric) A value larger than zero causes the server to behave more ODBC-friendly. Peculiarities you should know about This chapter lists known peculiarities of the mysql driver. This includes MySQL features that differ from what you know from the other database servers supported by libdbi, and it includes features and misfeatures introduced by the mysql driver. It is the intention of the driver author to reduce the number of misfeatures in future releases if possible. MySQL (mis)features To allow for row seeking, results are loaded into memory. This is very inefficient and may provide a bottleneck for large applications. DATETIME, TIMESTAMP, DATE and TIME are all treated as the DBI type DATETIME. This is currently a string, but will change in later releases. The DECIMAL type is treated as a string, as it has arbitrary precision. The driver per se supports transactions and savepoints and reports this when asked through the dbi_conn_cap_get() function. However, for transactions and savepoints to actually work, several conditions have to be met. First, the database server needs to support transactional table types. Recent versions do have transactional storage engines by default, but they may be switched off during compilation or by runtime configuration. Second, the tables used with transaction or savepoint queries must be of a transactional type. Non-transactional MyISAM tables have been replaced by transactional InnoDB tables as default table type no earlier than in MySQL version 5.5.5. If you intend to use transactions and savepoints, make sure to select an appropriate engine type like InnoDB explicitly in each CREATE TABLE statement. &freedoc-license;
    libdbi-drivers-0.9.0/drivers/mysql/dbd_mysql.pdf000644 001750 001750 00000473600 12104041412 022562 0ustar00markusmarkus000000 000000 %PDF-1.4 1 0 obj << /S /GoTo /D (1.0) >> endobj 4 0 obj (mysql driver manual) endobj 5 0 obj << /S /GoTo /D (2.0) >> endobj 8 0 obj (Table of Contents) endobj 9 0 obj << /S /GoTo /D (3.0) >> endobj 12 0 obj (Preface) endobj 13 0 obj << /S /GoTo /D (4.0) >> endobj 16 0 obj (Chapter 1. Introduction) endobj 17 0 obj << /S /GoTo /D (5.0) >> endobj 20 0 obj (Chapter 2. Installation) endobj 21 0 obj << /S /GoTo /D (5.1.1) >> endobj 24 0 obj (2.1. Prerequisites) endobj 25 0 obj << /S /GoTo /D (5.2.1) >> endobj 28 0 obj (2.2. Build and install the mysql driver) endobj 29 0 obj << /S /GoTo /D (6.0) >> endobj 32 0 obj (Chapter 3. Driver options) endobj 33 0 obj << /S /GoTo /D (7.0) >> endobj 36 0 obj (Chapter 4. Peculiarities you should know about) endobj 37 0 obj << /S /GoTo /D (7.3.1) >> endobj 40 0 obj (4.1. MySQL \(mis\)features) endobj 41 0 obj << /S /GoTo /D (8.0) >> endobj 44 0 obj (Appendix A. GNU Free Documentation License) endobj 45 0 obj << /S /GoTo /D [46 0 R /Fit ] >> endobj 48 0 obj << /Length 351 /Filter /FlateDecode >> stream xÚ’¹NÄ0†û<…K§Èàq|v€Hˆ-éE®]Y›r¬´o¯ )ãŒ3ßüÿØH˜hû 8g‚Ô}ÂÈÁo=%xùE(\¢òìf2×` W$û ¹/’›G. -)öÃ'ÊàJùdóNû4gô<uiƵ¡ÍäNí×}9¤ÈèZvéGña ”42à2Ʋœd‚C.=8ðîB­¦«šÊÅõSÓÏ)匎áur1]ÃÐÖ‹;¹å3Ëãîüöš"} ˆ6À´$W`¤Ê·†M¹”U9·s½Î¨ ®îêбsí°ÀÕ jà(E0cX+½ÌËõ†Þ•Ó1¢ŠÔxÕU;ÝðS`¥/ Ãðƒ±¹ð‘ƒE'Û/·ë죤3ÌãºY¯Ûý6-í…ú·¾£0´K@'Åõh/wC0èÏëßWãµ:’"endstream endobj 46 0 obj << /Type /Page /Contents 48 0 R /Resources 47 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 55 0 R >> endobj 49 0 obj << /D [46 0 R /XYZ 71.731 741.2204 null] >> endobj 50 0 obj << /D [46 0 R /XYZ 71.731 706.3512 null] >> endobj 51 0 obj << /D [46 0 R /XYZ 71.731 706.3512 null] >> endobj 2 0 obj << /D [46 0 R /XYZ 424.9134 688.2669 null] >> endobj 47 0 obj << /Font << /F24 54 0 R >> /ProcSet [ /PDF /Text ] >> endobj 58 0 obj << /Length 752 /Filter /FlateDecode >> stream xÚUÛrÓ0}ÏWäÑž©TÝeÃS ¤ÀPhà…áÁ·´š&r•´ù{¤Èvœíd&ÖeÏîÙݳ6#÷Ãc‰¡¤îÁ0$±q±¡ñ½»ºáÖ„  ÇÂmNÜN%L"Æ`èäz:ºœ6Na*ÜÝtÖE©€4IøxZþŽ1EѦù;•"*ZW&¬™Ž1ŠVÙüM8¸ ¹ÊË\Û/MLPTû¿µ*•¾ÇE­uUXµVvãOxdëps»¹ûþ¥õ“Ù,Ïšª ÛUÓÃ]´ž#ˆÿL?»œ&0å˜m3(|À¹ª´…þúrBÉ çãÜQ E·™y «iœ8Òy¥•îñ®žáÏ1LO¶øo•Y¨¦QµhÕ„ç½É´­Ê°ñùùgQ/}7±àÑE8*UcÊ=å•­ÂY¦ËËÚ„õ¢.Õ¬åh:ïe]¬.Á°[é²2IëÃ:^­q=Ûݹ|F¦½R¨PàDŽÝ2MOÊ©·C³­œ(”†ŠÔÙa²óæ+tóõgˆ?‰9LLeTµ$ß·id¶¯ßUTº9"Ê Nùÿ‰öV'ˆ{xìÍm;ò+ÆG•ÙõCÜVÒlõJ ó³'%?ŽžÅ‘ŽöÚp¸‡€1à‡ m?¡®¨ éë¿ÕÿD~ê endstream endobj 57 0 obj << /Type /Page /Contents 58 0 R /Resources 56 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 55 0 R /Annots [ 63 0 R 67 0 R ] >> endobj 63 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [366.6224 615.9582 481.2157 625.0799] /Subtype /Link /A << /S /GoTo /D (COPYING-FDL) >> >> endobj 67 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [206.3371 590.0553 247.5105 599.177] /Subtype /Link /A << /S /GoTo /D (COPYING-FDL) >> >> endobj 59 0 obj << /D [57 0 R /XYZ 71.731 741.2204 null] >> endobj 68 0 obj << /D [57 0 R /XYZ 71.731 537.36 null] >> endobj 56 0 obj << /Font << /F24 54 0 R /F32 62 0 R /F34 66 0 R >> /ProcSet [ /PDF /Text ] >> endobj 72 0 obj << /Length 13936 /Filter /FlateDecode >> stream xÚ•MÓ]Çy]çúžÜï¡Ç®¤œ”RaF‰0ŨP@L€Néßç¼xOï¾ïîÛÏÚ)DŠíµNK"Þ½îþÝný¿ý»ë~¹×9í—Ãawz÷Ë_þ°{÷¿Ö¿ôØoGN—Ër8ï/ëŸ<ù«?×å~;\ÞýôùÛŸÿðïþþpzwØ-—óíüîç?7Õ從ºínï~þÓÿxÿó‡ÛîýÇþ°ß½ÿõÓ‡Ÿ×Ûû¯~ý×ÿõË÷O_¾ûðO?ÿ§?ü‡Ÿ%l˜ËmÙívû§Ï´ùéñÐ':^ßÝ—ûe}Ú‡j‡^è¿}ØßÞúóÇ_>¹x¿;.—ãþPªwËéz;M^Õ~wZö»û…LçÞ<Ú2>Ðe¹ìvǧôD¾F¹S'òû²»ïî©|;r§>—ï÷Ëù¶¿„òvšäu"?-»ëáÊ·Ó(wêD~YΗCúÚÛi”;u"_oç|Œ_ûvåN}.?¬·s:¥¯½&ù@È×Û9žÒ×ÞN£Ü©ùz;‡ó9•o§QîÔ‰|½ý%~íÛi”;õ¹ü¸ÞÎî’¾övšäu"?.÷û5}íí4Ê:‘_–Óí–¾övåNÈoËýz»¥òí4Êú\¾þ,ât¹§¯½&ù@È×Û¹ìÒ×ÞN£Ü©ùz;ç]úÚÛi”;u"_oç´_ûvåN}.?¯·s<ìCy;Mò:‘¯·s8¤¯½F¹S'òõvöÇôµ·Ó(wêD¾ÞÎî¿öí4Êú\~Ù/Çû)}íí4ÉêD~\n·ó)•o§QîÔ‰ü²¯—ôµ·Ó(wêD~[në‘T¾F¹SŸË×_rÏ×ôµ·Ó$¨ùz;§[úÚÛi”;u"_oçx»¦òí4Ê:‘¯·s¸Ç¯};r§>—ßÖÛ9ìÒ×ÞN“| Näëíìwéko§QîÔ‰|½Ý>}íí4Ê:‘ß–ë=ý‰ÌvÕÆ|nþñ<‡ô·Óä¨ùq¹^é;o§QîÔ‰ü².±ûõ0ª91¯7s>Åï|;n§>•¯ÿ5\§søûP: ò‘:‘¯W“þ–D;ŒjcNÌëÍ.×T½F·S'òõjÖ¿÷¤òí4Êú\¾_¯&ýuJ;LjgNÌÇår¿¥×ÝN£Û©ùeÙßîé;o§QîÔ‰ü¶\âWþã,ŠßŸkûeÝ¥/¼&õ@È×{¹ìÓÞN£Ü©ùz/çý=•o§QîÔ‰|½›Ó!~íÛi”;õ¹ü¸ÞÎñ˜¾övšäu"_oçpL_{;r§NäëíìOéko§QîÔ‰|½ÝùÊ·Ó(wêsùi¿ìîçôµ·Ó$¨ùq9¯¿|LåÛi”;u"¿,»ë5}íí4Ê:‘ß–óå¿öí4Êú\~^oçåÎfòvšäu"_oç”þE§QîÔ‰|½ã=}íí4Ê:‘¯·sÜů};r§>—_ÖÛ9ìÓ×ÞN“| Näëíì÷éÏbÚi”;u"_ogwH_{;r§Nä·åt?Ư};r§>—_wËývL_{;Mò:‘—Óõ”¾övåNÈÏëÿËyŸÊ·Ó(wêD¾ÞÎù¿öí4Êú\~[oçtI_{;Mò:‘¯·s¼¦¯½F¹S'òõvÖ·”Ê·Ó(wêD¾ÞÎþvJåÛi”;õ¹ü¾ÞÎîž¾övšäu"?.ëßûÒ×ÞN£Ü©ùy¹Ýwéko§QîÔ‰ü¶oûøµo§QîÔ§òãn·Ü®ûð7¡tä#u"_oçr8¥òí4Ê:‘¯·s>îSùvåNÈ×ÛYÿÇ(•o§QîÔçòýz;ÇSúÚÛi’Ô‰|½ôgQí0ª91¯W³?§ï¼F·S'òõjv—øo§QîÔçòÃn¹ÞÓøv˜ÔΜ˜ËávÕÛit;u"?/×ëí˜Ê·Ó(wêD~[é'ÏÚaTó¹ù¸ÞÌ9¾îvšÜu"_¯æœ~¦X§QîÔ‰|½šôã(í0ª91¯7sL?P¬Óèvêsùi½šÃ!}çí4ÉêD¾^Í>v¿Fµ1'æõfvé?ºÓit;u"¿-ûû)þqo§QîÔçòón¹ÜÒOë4ÉêD~\ö×súÚÛi”;u"?/—Ë%}íí4Ê:‘¯·sŽÿ7½F¹SŸË/ë휮éko§I>P'òõvŽé§‰uåNÈ×Û9ÜÒ×ÞN£Ü©ùz;û{üÚ·Ó(wêsùu½}úib&ù@È×ÛÙ¥F¹S'òór¾§Ÿ&Öi”;u"_ÿêí¿öí4Êú\~Û-çk:ÐÑi’Ô‰ü¸ì.駉uåNÈ×Û9§F¹S'òõ¯žÒOë4Êú\~_oç˜ttšäu"_oçttåNÈ×ÛÙ§ŸKÑi”;u"ù«×øµo§QîÔ§òÓn·œî駉uä#u"?,÷[:ÐÑi”;u"?/§k:ÐÑi”;u"¿.÷ë.~íÛi”;õ¹|¿ÞÎ%ýà›N“| NäëíœÓOë4Ê:‘¯·sJ::r§NäëíñkßN£Ü©Ïå‡õvéŠušäu"_ogŸþŽˆN£Ü©ùz;»ô3Å:r§Nä×åv?ǯ};r§>—wËñ–ttšäu"?,·kú±bF¹S'òór¼¤F¹S'òõvÒ^Þ£Ú˜ÏͧõjNé:G§É=P'òõjŽé:G§QîÔ‰|½šcªþqÅo‰íz-‡]ü·Өvêsùy½—}ú{ž:Mò:‘¯÷’þ–@;ŒjcNÌçåpOw9:n§Nä×åz‹ÿ“ÖN£Ü©Ïå—ÝrˆÿGm;LjgṄåzI?P¬ÓèvêD¾^Í9Ýåè4Ê:‘¯W“ÿÀ_£Ú˜ÏÍ×õfŽé§‰ušÜu"_¯æîrtåNÈ׫٧Ÿ&Öi”;u"_/gw‹_ûvåN}.¿í–ý=æè4ÉêD~X.·ôÓÄ:r§NäçeK::r§Nä×årM?M¬Ó(wêsù}½K:ÐÑi’Ô‰|½s:ÐÑi”;u"_oç”~šX§QîÔ‰|½ã1~íÛi”;õ©ü¼[oç~šX§A>R'òõvöé@G§QîÔ‰|½]:ÐÑi”;u"¿.çû%~íÛi”;õ¹|¿[v·t £Ó$¨ùa9_ÓOë4Ê:‘Ÿ—Ý%èè4Ê:‘¯·s¾Ç¯};r§>—ÖÛ9¥Ÿ&Öi’Ô‰|½S:ÐÑi”;u"_oç˜~šX§QîÔ‰|½Ã>~íÛi”;õ¹ü¸ÞÎ~òÑÒÞ×<îo÷iŠtýËGþMo{ó@Ÿ_*¤ÿ6>Õ–7-ƒ£j¤þ´þ—ëxZe–ôüò·ùë¥Î’¶C/϶_>üt8ïÞÿÇ/ßJ¿þé÷_¾þúe,·×_¾|ÐîA1¾Ãõ׳wø’+Ÿ²§äŸ³HÉ=y *%r§BJ.’÷”\-¨’ËäJÉÜ©’ËäJÉÜ©’ËäJÉÜ©’‹ä=%WË*¤ä2¹Rr w*¤ä2¹Rr w*¤ä2¹Rr w*¤ä"yOÉÕò )¹L®”È )¹L®”È )¹L®”È )¹HÞSrµ| BJ.“+%r§BJ.“+%r§BJ.“+%r§BJ.’÷”\-¨’ËäJÉÜ©’ËäJÉÜ©uJ.s·”¨ )¹HÝSrµ{ BJ.“+%r§Ö)¹ÌÝRr 6&¤ä2µRràv*¤äùCJ®”Ô:%—¹[JÔÆ„”\¦VJÜN…”\&WJäN­Sr‘[)¹ZíLHÉej¥äÀíTHÉer¥ä@îÔ2%—©·”ˆß!%‰{J®VTHÉer¥ä@îTHÉer¥ä@îTHÉer¥ä@îTHÉEòž’«åRr™\)9;Rr™\)9;Rr™\)9;Rr‘¼§äjù@…”\&WJäN…”\&WJäN…”\&WJäN…”\$ï)¹Z>P!%—É•’¹S!%—É•’¹S!%—É•’¹S!%É{J®–THÉer¥ä@îTHÉer¥ä@îTHÉer¥ä@îTHÉEòž’«åRr™\)9;Rr™\)9;Rr™\)9;Rr‘¼§äjù@…”\&WJäN…”\&WJäN…”\&WJäN…”\$ï)¹Z>P!%—É•’¹S!%—É•’¹S!%—É•’¹S!%—ÈRr¥|¤BJ.“+%r§BJ.“+%r§BJ.“+%r§BJ.’÷”\-¨uJ.s·”¨ )¹L­”¸ )¹L®”ÈZ§ä"·RrµÚ™’ËÔJÉÛ©’ËäJÉÜ©uJ.s·”¨ )¹HÝSrµ{ BJ.“+%r§Ö)¹ÌÝRr 6&¤ä2µRràv*¤ä"yOÉÕòZ§ä2wKÉÚ˜’ËÔJÉÛ©’ËäJÉÜ©’‹ä=%WË*¤ä2¹Rr w*¤ä2¹Rr w*¤ä2¹Rr w*¤ä"yOÉÕò )¹L®”È )¹L®”È )¹L®”È )¹HÞSrµ| BJ.“+%r§BJ.“+%r§BJ.“+%r§BJ.’÷”\-¨’ËäJÉÜ©’ËäJÉÜ©’ËäJÉÜ©’‹ä=%WË*¤ä2¹Rr w*¤ä2¹Rr w*¤ä2¹Rr w*¤äùCJ®”THÉer¥ä@îTHÉer¥ä@îTHÉer¥ä@îTHÉEòž’«åRr™\)9;Rr™\)9;Rr™\)9;Rr‘¼§äjù@…”\&WJäN…”\&WJäN…”\&WJäN…”\$ï)¹Z>P!%—É•’¹S!%—É•’¹Së”\æn)9PRr‘º§äj÷@…”\&WJäN-Sr™zKÉø-Rr™X)9P;Rr‘¼§äjù@­Sr™»¥ä@mLHÉej¥äÀíTHÉer¥ä@îÔ:%¹•’«Õ΄”\¦VJÜN…”\&WJäN­Sr™»¥ä@mLHÉEêž’«ÝRr™\)9;Rr™\)9;Rr™\)9;Rr‘¼§äjù@…”\&WJäN…”\&WJäN…”\&WJäN…”\$ï)¹Z>P!%—É•’¹S!%—É•’¹S!%—É•’¹S!%—ÈRr¥|¤BJ.“+%r§BJ.“+%r§BJ.“+%r§BJ.’÷”\-¨’ËäJÉÜ©’ËäJÉÜ©’ËäJÉÜ©’‹ä=%WË*¤ä2¹Rr w*¤ä2¹Rr w*¤ä2¹Rr w*¤ä"y;Mò:‘¯·³›|š¸7Ø~ü³™YÇî¸ìvü³›íœý¤r?OØ4$ìNuÂne_þVS&ìÚ¡—Ç:(a÷íûÇ_ýø<_·¾—ŸGxÀû3¼ì@/×i¾n¿¾üµ)ŸPçÞ<ã“|Ýq¹ß_þ Þ“z"ßN£Ü©yKìer…û@îT÷er…û@îT÷Eòî«åÂ}™\á>;Â}™\á>;Â}™\á>;Â}‘¼‡ûjù@…p_&W¸äN…p_&W¸äN…p_&W¸äN…p_$ïá¾Z>P!Ü—Éî¹S!Ü—Éî¹S!Ü—Éî¹S!ÜÉ{¸¯–T÷er…û@îT÷er…û@îT÷er…û@îT÷Eòî«åÂ}™\á>;Â}™\á>;µ÷eîîµ1!Ü©{¸¯vT÷er…û@îÔ:Ü—¹[¸ÔÆ„p_¦V¸ÜN…p_"÷•ò‘Z‡û2w ÷Ú˜îËÔ ÷Û©îËä ÷Ü©u¸/r+ÜW« á¾L­p¸ á¾L®pÈZ†û2õîñ["„û"q÷Õê á¾L®pÈ á¾L®pÈ á¾L®pÈ á¾HÞÃ}µ| B¸/“+Ür§B¸/“+Ür§B¸/“+Ür§B¸/’÷p_-¨îËä ÷Ü©îËä ÷Ü©îËä ÷Ü©î‹ä=ÜWË*„û2¹Â} w*„û2¹Â} w*„û2¹Â} w*„û"y÷Õò á¾L®pÈ á¾L®pÈ á¾L®pÈ á¾HÞÃ}µ| B¸/“+Ür§B¸/“+Ür§B¸/“+Ür§B¸/’÷p_-¨îËä ÷Ü©îËä ÷Ü©îËä ÷Ü©î‹ä=ÜWË*„û2¹Â} w*„û2¹Â} w*„û2¹Â} w*„ûùC¸¯”T÷er…û@îT÷er…û@îT÷er…û@îT÷Eòî«åµ÷eîîµ1!Ü—©î·S!Ü—Éî¹Sëp_äV¸¯V;Â}™Zá>p;Â}™\á>;µ÷eîîµ1!Ü©{¸¯vT÷er…û@îÔ:Ü—¹[¸ÔÆ„p_¦V¸ÜN…p_$ïá¾Z>Pëp_æná>PÂ}™Zá>p;Â}™\á>;Â}‘¼‡ûjù@…p_&W¸äN…p_&W¸äN…p_&W¸äN…p_$ïá¾Z>P!Ü—Éî¹S!Ü—Éî¹S!Ü—Éî¹S!ÜÉ{¸¯–T÷er…û@îT÷er…û@îT÷er…û@îT÷Eòî«åÂ}™\á>;Â}™\á>;Â}™\á>;Â}‘¼‡ûjù@…p_&W¸äN…p_&W¸äN…p_&W¸äN…p_"÷•ò‘ á¾L®pÈ á¾L®pÈ á¾L®pÈ á¾HÞÃ}µ| B¸/“+Ür§B¸/“+Ür§B¸/“+Ür§B¸/’÷p_-¨îËä ÷Ü©îËä ÷Ü©îËä ÷Ü©î‹ä=ÜWË*„û2¹Â} w*„û2¹Â} wjîËÜ-ÜjcB¸/R÷p_í¨îËä ÷Ü©e¸/Soá>¿%B¸/+Üj§B¸/’÷p_-¨u¸/s·p¨ á¾L­p¸ á¾L®pÈZ‡û"·Â}µÚ™îËÔ ÷Û©îËä ÷Ü©u¸/s·p¨ á¾HÝÃ}µ{ B¸/“+Ür§B¸/“+Ür§B¸/“+Ür§B¸/’÷p_-¨îËä ÷Ü©îËä ÷Ü©îËä ÷Ü©î‹ä=ÜWË*„û2¹Â} w*„û2¹Â} w*„û2¹Â} w*„ûùC¸¯”T÷er…û@îT÷er…û@îT÷er…û@îT÷Eòî«åÂ}™\á>;Â}™\á>;Â}™\á>;Â}‘¼‡ûjù@…p_&W¸äN…p_&W¸äN…p_&W¸äN…p_$ïá¾Z>P!ÜWÔçÒpRëÌQæn™#P2G™Z™#p;2G™\™#;µÎEneŽjµ3!s”©•9·S!s”É•9¹SËÌQ¦Þ2G ~K„ÌQ$Z=P!s”É•9¹S!s”É•9¹S!s”É•9¹S!sÉ{樖TÈereŽ@îTÈereŽ@îTÈereŽ@îTÈEòž9ªå2G™\™#;2G™\™#;2G™\™#;2G‘¼gŽjù@…ÌQ&WæäN…ÌQ&WæäN…ÌQ&WæäN…ÌQ$Z>P!s”É•9¹S!s”É•9¹S!s”É•9¹S!sÉ{樖TÈereŽ@îTÈereŽ@îTÈereŽ@îTÈEòž9ªå2G™\™#;2G™\™#;2G™\™#;2G‘¼gŽjù@…ÌQ&WæäN…ÌQ&WæäN…ÌQ&WæäN…ÌQ"È•ò‘ ™£L®ÌÈ ™£L®ÌÈ ™£L®ÌÈ ™£HÞ3Gµ| Ö™£ÌÝ2G 6&dŽ2µ2Gàv*dŽ2¹2G wj9ŠÜÊÕjgBæ(S+sn§Bæ(“+sr§Ö™£ÌÝ2G 6&dŽ"uÏÕî ™£L®ÌÈZgŽ2wËÚ˜9ÊÔÊÛ©9Šä=sTËj9ÊÜ-sjcBæ(S+sn§Bæ(“+sr§Bæ(’÷ÌQ-¨9ÊäÊÜ©9ÊäÊÜ©9ÊäÊÜ©9Šä=sTË*dŽ2¹2G w*dŽ2¹2G w*dŽ2¹2G w*dŽ"yÏÕò ™£L®ÌÈ ™£L®ÌÈ ™£L®ÌÈ ™£HÞ3Gµ| Bæ(“+sr§Bæ(“+sr§Bæ(“+sr§Bæ(’÷ÌQ-¨9ÊäÊÜ©9ÊäÊÜ©9ÊäÊÜ©9J䙣R>R!s”É•9¹S!s”É•9¹S!s”É•9¹S!sÉ{樖TÈereŽ@îTÈereŽ@îTÈereŽ@îTÈEòž9ªå2G™\™#;2G™\™#;2G™\™#;2G‘¼gŽjù@…ÌQ&WæäN…ÌQ&WæäN­3G™»eŽ@mLÈEêž9ªÝ2G™\™#;µÌeê-sâ·DÈebeŽ@íTÈEòž9ªåµÎeî–9µ1!s”©•9·S!s”É•9¹SëÌQäVæ¨V;2G™Z™#p;2G™\™#;µÎeî–9µ1!s©{æ¨vTÈereŽ@îTÈereŽ@îTÈereŽ@îTÈEòž9ªå2G™\™#;2G™\™#;2G™\™#;2G‘¼gŽjù@…ÌQ&WæäN…ÌQ&WæäN…ÌQ&WæäN…ÌQ"È•ò‘ ™£L®ÌÈ ™£L®ÌÈ ™£L®ÌÈ ™£HÞ3Gµ| Bæ(“+sr§Bæ(“+sr§Bæ(“+sr§Bæ(’÷ÌQ-¨9ÊäÊÜ©9ÊäÊÜ©9ÊäÊÜ©9Šä=sTË*dŽŠLOš9‚j™£75¡yæ¨x ÇÌÑöûøuæhwÙi!sÔN½fŽ[æèoÿüëŸ^ÿðã—í>ùöý㯿¾þÉ÷ùôúùë·Ýþ½?ýöùÃáüþß>ìÏï?ýöl{y<½üŠîáÁüñ×'8¬¿ÄþÖ&‘å­O"pÅ$òÉU“ÈZ>Pa™É5‰¹Sa™É5‰¹Sa™É5‰¹SaÉû$²–T˜DfrM"AîT˜DfrM"AîT˜DfrM"AîT˜DFò>‰¬å&‘™\“H;&‘™\“H;&‘™\“H;&‘‘¼O"kù@…Id&×$äN…Id&×$äN…Id&×$äN…Id$ï“ÈZ>Pa™É5‰¹Sa™É5‰¹Sa™É5‰¹Sa™È&‘¥|¤Â$2“k r§Â$2“k r§Â$2“k r§Â$2’÷Id-¨õ$2s·I$¨ “ÈL­I$¸ “ÈL®I$ÈZO"#·&‘µÚ™0‰ÌÔšD‚Û©0‰ÌäšD‚Ü©õ$2s·I$¨ “ÈHÝ'‘µ{ Â$2“k r§Ö“ÈÌÝ&‘ 6&L"3µ&‘àv*L"#yŸDÖòZO"3w›D‚Ú˜0‰ÌÔšD‚Û©0‰ÌäšD‚Ü©0‰Œä}YË*L"3¹&‘ w*L"3¹&‘ w*L"3¹&‘ w*L"#yŸDÖò “ÈL®I$È “ÈL®I$È “ÈL®I$È “ÈHÞ'‘µ| Â$2“k r§Â$2“k r§Â$2“k r§Â$2’÷Id-¨0‰ÌäšD‚Ü©0‰ÌäšD‚Ü©0‰ÌäšD‚Ü©0‰Œä}YË*L"3¹&‘ w*L"3¹&‘ w*L"3¹&‘ w*L"ùÃ$²”T˜DfrM"AîT˜DfrM"AîT˜DfrM"AîT˜DFò>‰¬å&‘™\“H;&‘™\“H;&‘™\“H;&‘‘¼O"kù@…Id&×$äN…Id&×$äN…Id&×$äN…Id$ï“ÈZ>Pa™É5‰¹Sa™É5‰¹SëIdæn“HP&‘‘ºO"k÷@…Id&×$äN-'‘™z›D‚ø-&‘™X“HP;&‘‘¼O"kù@­'‘™»M"AmL˜DfjM"ÁíT˜DfrM"AîÔz¹5‰¬Õ΄Id¦Ö$ÜN…Id&×$äN­'‘™»M"AmL˜DFê>‰¬Ý&‘™\“H;&‘™\“H;&‘™\“H;&‘‘¼O"kù@…Id&×$äN…Id&×$äN…Id&×$äN…Id$ï“ÈZ>Pa™É5‰¹Sa™É5‰¹Sa™É5‰¹Sa™È&‘¥|¤Â$2“k r§Â$2“k r§Â$2“k r§Â$2’÷Id-¨0‰ÌäšD‚Ü©0‰ÌäšD‚Ü©0‰ÌäšD‚Ü©0‰Œä}YË*L"3¹&‘ w*L"3¹&‘ w*L"3¹&‘ w*L"#yŸDÖò “Èbœ—N"áÚ$òÍòp>‰,hý…ÓeýÅØË'ÑÖÿROëóÙ©ë~¹¾|ôù|?®?±ºÝúƒ]l;¥C/uÜæ÷ÛçûÝ˲q÷²lüñï}ý?ß?ýòmøvî—íÇw¶ñM^Ïë¯(ž¿ÉÂýòòÛõëÜ›G¿.ütYNçÝíé=‘o§QîÔ‰ü¶ÜOûs*ßN£Ü©Ïåçý²þ„nÊÛi’Ô‰|½Ã!}íí4Ê:‘¯·³?¦¯½F¹S'òõvv§øµo§QîÔçòË~9ÞOéko§I>P'òãr»O©|;r§Nä—åx½¤¯½F¹S'òÛr»\â×¾F¹SŸË×ÿé>ž¯éko§I>P'òõvN·ôµ·Ó(wêD¾ÞÎñvMåÛi”;u"_oçp_ûvåN}.¿­·sØ¥¯½&ù@È×ÛÙïÒ×ÞN£Ü©ùz;»}úÚÛi”;u"¿-×û!u¿Fµ1Ÿ›ïûåp;¤ï¼&÷@ÈËõzLßy;r§NäëOr/±ûõ0ª91¯7s>Åï|;n§>ß•îÖ«9™\§A>R'òõjŽ—ÔýzÕÆœ˜×›9\®©z;n§NäëÕ¬ïIåÛi”;õ¹|¿^Múë”v˜ÔΜ˜×¿z¿¥×ÝN£Û©ùeÙßîé;o§QîÔ‰ü¶\âWþã,ŠßŸkûeÝ¥/¼&õ@È׿zÙ§/¼F¹S'òõ^Îû{*ßN£Ü©ùz7§CüÚ·Ó(wêsùq½ã1}íí4ÉêD¾þÕÃ1}íí4Ê:‘¯·³?¥¯½F¹S'òõvvçC*ßN£Ü©Ïå§ý²»ŸÓ×ÞN“| NäÇå¼þò1•o§QîÔ‰ü²ì®×ôµ·Ó(wêD¾ÐBy˪‘Ü©uV-“+«òZgÕBy˪‘Ü©uV-”·¬ÉZgÕBy˪‘Ü©uV-“+«òZgÕBy˪‘Ü©uV-”·¬ÉZgÕBy˪‘Ü©uV-“+«òZgÕBy˪‘Ü©uV-”·¬ÉZgÕBy˪‘Ü©uV-“+«òZgÕBy˪‘Ü©uV-”·¬ÉZgÕBy˪‘Ü©uV-“+«òZgÕBy˪‘Ü©uV-”·¬ÉZgÕBy˪‘Ü©uV-’÷¬Z-©uV-”·¬ÉZgÕBy˪‘Ü©uV-”·¬ÉZgÕ2¹²j ¨eV-toY5R³Îª…ê–U#·Së¬Z(oY5’;µÌªeî–Uµ3ë¬Z¨nY5r;µÎª…ò–U#¹SˬZèÞ²j¤6fUËÔʪ{ ÖYµPÞ²j$wj™U Ý[VÔÆ¬³j¡ºeÕÈíÔ:«–É•Uù@-³j¡{˪‘Ú˜uV-T·¬¹ZgÕBy˪‘Ü©uV-“+«òZgÕBy˪‘Ü©uV-”·¬ÉZgÕBy˪‘Ü©uV-“+«òZgÕBy˪‘Ü©uV-”·¬ÉZgÕBy˪‘Ü©uV-“+«òZgÕBy˪‘Ü©uV-”·¬ÉZgÕBy˪‘Ü©uV-“+«òZgÕBy˪‘Ü©uV-”·¬ÉZgÕBy˪‘Ü©uV-“+«òZgÕBy˪‘Ü©uV-”·¬ÉZgÕBy˪‘Ü©uV-’÷¬Z-©uV-”·¬ÉZgÕBy˪‘Ü©uV-”·¬ÉZgÕ2¹²j ¨uV-”·¬ÉZgÕBy˪‘Ü©uV-”·¬ÉZgÕ2¹²j ¨uV-”·¬ÉZgÕBy˪‘Ü©uV-”·¬ÉZgÕ2¹²j ¨uV-”·¬ÉZgÕBy˪‘Ü©eV-toY5R³ÎªejeÕÀ=Pë¬Z(oY5’;µÊª…ê׬‰ßë¬Z(nY5R;µÎªereÕ@>PˬZèÞ²j¤6fU Õ-«Fn§ÖYµPÞ²j$wj™UËÜ-«jgÖYµPݲjävjU å-«Fr§–YµÐ½eÕHmÌ:«–©•U÷@­³j¡¼eÕHîÔ:«Ê[VäN­³j¡¼eÕHîÔ:«–É•Uù@­³j¡¼eÕHîÔ:«Ê[VäN­³j¡¼eÕHîÔ:«–É•Uù@­³j¡¼eÕHîÔ:«Ê[VäN­³j¡¼eÕHîÔ:«É{V­–Ô:«Ê[VäN­³j¡¼eÕHîÔ:«Ê[VäN­³j™\Y5Ô:«Ê[VäN­³j¡¼eÕHîÔ:«Ê[VäN­³j™\Y5Ô:«Ê[VäN­³j¡¼eÕHîÔ:«Ê[VäN­³j™\Y5Ô:«VÇÀ¢¬=ЖU{ó@§iV­z !«vª³j×Ûr<^NuV­úñX[Ví»÷Ÿ~ùý×Ïûüýó§o¯ÿö_?Îï¿þþú'ßþåëï¿þéõÿ÷—¯/¶ÿûúgÿùëïßǹëË$¯ïÊŸ|ÿ²¡¼L^øÃü¶üqõùí㬘ß>y j~ r§Âü6’÷ùm-¨0¿Íäšß‚Ü©0¿Íäšß‚Ü©0¿Íäšß‚Ü©0¿ä}~[Ë*Ìo3¹æ· w*Ìo3¹æ· w*Ìo3¹æ· w*Ìo#yŸßÖò óÛL®ù-È óÛL®ù-È óÛL®ù-È óÛHÞç·µ| Âü6“k~ r§Âü6“k~ r§Âü6“k~ r§Âü6’÷ùm-¨0¿Íäšß‚Ü©0¿Íäšß‚Ü©0¿Íäšß‚Ü©0¿ä}~[Ë*Ìo3¹æ· w*Ìo3¹æ· w*Ìo3¹æ· w*ÌoùÃü¶”T˜ßfrÍoAîT˜ßfrÍoAîT˜ßfrÍoAîT˜ßFò>¿­åµžßfî6¿µ1a~›©5¿·Sa~›É5¿¹SëùmäÖü¶V;æ·™Zó[p;æ·™\ó[;µžßfî6¿µ1a~©ûü¶vT˜ßfrÍoAîÔz~›¹ÛüÔÆ„ùm¦ÖüÜN…ùm$ïóÛZ>Pëùmænó[Pæ·™Zó[p;æ·™\ó[;æ·‘¼Ïokù@…ùm&×üäN…ùm&×üäN…ùm&×üäN…ùm$ïóÛZ>Pa~›É5¿¹Sa~›É5¿¹Sa~›É5¿¹Sa~Éûü¶–T˜ßfrÍoAîT˜ßfrÍoAîT˜ßfrÍoAîT˜ßFò>¿­åæ·™\ó[;æ·™\ó[;æ·™\ó[;æ·‘¼Ïokù@…ùm&×üäN…ùm&×üäN…ùm&×üäN…ùm"˜ß–ò‘ óÛL®ù-È óÛL®ù-È óÛL®ù-È óÛHÞç·µ| Âü6“k~ r§Âü6“k~ r§Âü6“k~ r§Âü6’÷ùm-¨0¿Íäšß‚Ü©0¿Íäšß‚Ü©0¿Íäšß‚Ü©0¿ä}~[Ë*Ìo3¹æ· w*Ìo3¹æ· wj=¿ÍÜm~ jcÂü6R÷ùmí¨0¿Íäšß‚Ü©åü6Soó[¿%Âü6k~ j§Âü6’÷ùm-¨õü6s·ù-¨ óÛL­ù-¸ óÛL®ù-ÈZÏo#·æ·µÚ™0¿ÍԚ߂۩0¿Íäšß‚Ü©õü6s·ù-¨ óÛHÝç·µ{ Âü6“k~ r§Âü6“k~ r§Âü6“k~ r§Âü6’÷ùm-¨0¿Íäšß‚Ü©0¿Íäšß‚Ü©0¿Íäšß‚Ü©0¿ä}~[Ë*Ìo3¹æ· w*Ìo3¹æ· w*Ìo3¹æ· w*ÌoùÃü¶”T˜ßfrÍoAîT˜ßfrÍoAîT˜ßfrÍoAîT˜ßFò>¿­åæ·™\ó[;æ·™\ó[;æ·™\ó[;æ·‘¼Ïokù@…ùm&×üäN…ùm&×üäN…ùm&×üäN…ùm$ïóÛZ>Pa~[¬AÓù->Ðe>¿-èÇïO/Ò×ùíùé©õoì—Ó°þÂqýùì½?ÙááÉÚ1zàî· îþëû¯ÿøú‡ÿswÞýåó·õ_öþôñûï¿}ú6~?øný¥ùåÝ£òÉû<ßO³uíëׯãS÷¯i|ìù×´?yžâkÚAmLøšöL­¯i·SákÚ3¹¾¦äN­¿¦=rëkÚkµ3ákÚ3µ¾¦ÜN…¯iÏäúšv;µüšöL½}M;ˆßákÚ#qÿšöZ=PákÚ3¹¾¦äN…¯iÏäúšv;¾¦=“ëkÚAîTøšöHÞ¿¦½–TøšöL®¯i¹SákÚ3¹: w*t"2¹: w*t""yïDÔò ˆL®NÈ ˆL®NÈ ˆL®NÈ ˆHÞ;µ| B'"“«r§B'"“«r§B'"“«r§B'"’÷ND-¨Ð‰ÈäêD€Ü©Ð‰ÈäêD€Ü©Ð‰ÈäêD€Ü©Ð‰ˆä½QË*t"2¹: w*t"2¹: w*t"2¹: w*t""yïDÔò ˆL®NÈ ˆL®NÈ ˆL®NÈ ˆHÞ;µ| B'"“«r§B'"“«r§B'"“«r§B'"‘?t"JùH…ND&W'äN…ND&W'äN…ND&W'äN…ND$ïˆZ>PëNDænP:™Zp;:™\;µîDDnu"jµ3¡‘©Õ‰·S¡‘ÉÕ‰¹SëNDænP:‘ºw"j÷@…ND&W'äN­;™»u"@mLèDdju"ÀíTèDDòÞ‰¨åµîDdîÖ‰µ1¡‘©Õ‰·S¡‘ÉÕ‰¹S¡É{'¢–TèDdru"@îTèDdru"@îTèDdru"@îTèDDòÞ‰¨å:™\;:™\;:™\;:‘¼w"jù@…ND&W'äN…ND&W'äN…ND&W'äN…ND$ïˆZ>P¡‘ÉÕ‰¹S¡‘ÉÕ‰¹S¡‘ÉÕ‰¹S¡É{'¢–TèDdru"@îTèDdru"@îTèDdru"@îTèD$ò‡ND)©Ð‰ÈäêD€Ü©Ð‰ÈäêD€Ü©Ð‰ÈäêD€Ü©Ð‰ˆä½QË*t"2¹: w*t"2¹: w*t"2¹: w*t""yïDÔò ˆL®NÈ ˆL®NÈ ˆL®NÈ ˆHÞ;µ| B'"“«r§B'"“«r§ÖˆÌÝ: 6&t""uïDÔî ˆL®NÈZv"2õÖ‰ñ["t"2±: v*t""yïDÔòZw"2wëD€Ú˜Ð‰ÈÔêD€Û©Ð‰ÈäêD€Ü©u'"r«Q« ˆL­N¸ ˆL®NÈZw"2wëD€Ú˜Ð‰ˆÔ½Q»*t"2¹: w*t"2¹: w*t"2¹: w*t""yïDÔò ˆL®NÈ ˆL®NÈ ˆL®NÈ ˆHÞ;µ| B'"“«r§B'"“«r§B'"“«r§B'"‘?t"JùH…ND&W'äN…ND&W'äN…ND&W'äN…ND$ïˆZ>P¡‘ÉÕ‰¹S¡‘ÉÕ‰¹S¡‘ÉÕ‰¹S¡É{'¢–TèDdru"@îTèDdru"@îTèDdru"@îTèDDòÞ‰¨å:u× êDÀµNÄãˆâþ¿¦ý´þMvý¯ý5ííÐËcýÍÖˆø‡ÿòß_ÿàïû°¿½ÿôéõÏþîë/¿ÿåÓ—ï¿þúåõßúÇÏ¿|úòíÓ8nݽ,A¯ïŸáÉ·²‹oe×θüaôñã¤Ø?y jg r§ÂÎ8“kg r§ÂÎ8“kg r§ÂÎ8’÷q-¨°3Îäڃܩ°3Îäڃܩ°3Îäڃܩ°3Žä}g\Ë*ìŒ3¹vÆ w*ìŒ3¹vÆ w*ìŒ3¹vÆ w*ìŒ#yß×ò ;ãL®1È ;ãL®1È ;ãL®1È ;ãHÞwƵ| ÂÎ8“kg r§ÂÎ8“kg r§ÂÎ8“kg r§ÂÎ8’÷q-¨°3Îäڃܩ°3Îäڃܩ°3Îäڃܩ°3Žä}g\Ë*ìŒ3¹vÆ w*ìŒ3¹vÆ w*ìŒ3¹vÆ w*ìŒùÃθ”TØgríŒAîTØgríŒAîTØgríŒAîTØGò¾3®åµÞgî¶3µ1agœ©µ3·SagœÉµ3¹SëqäÖθV;vÆ™Z;cp;vÆ™\;c;µÞgî¶3µ1ag©ûθvTØgríŒAîÔzgœ¹ÛÎÔÆ„q¦ÖÎÜN…q$ï;ãZ>Pëqæn;cPvÆ™Z;cp;vÆ™\;c;vÆ‘¼ïŒkù@…q&×ÎäN…q&×ÎäN…q&×ÎäN…q$ï;ãZ>PagœÉµ3¹SagœÉµ3¹SagœÉµ3¹SagÉûθ–TØgríŒAîTØgríŒAîTØgríŒAîTØGò¾3®åvÆ™\;c;vÆ™\;c;vÆ™\;c;vÆ‘¼ïŒkù@…q&×ÎäN…q&×ÎäN…q&×ÎäN…q"Ø—ò‘ ;ãL®1È ;ãL®1È ;ãL®1È ;ãHÞwƵ| ÂÎ8“kg r§ÂÎ8“kg r§ÂÎ8“kg r§ÂÎ8’÷q-¨°3Îäڃܩ°3Îäڃܩ°3Îäڃܩ°3Žä}g\Ë*ìŒ3¹vÆ w*ìŒ3¹vÆ wj½3ÎÜmg jcÂÎ8R÷qí¨°3ÎäڃܩåÎ8So;c¿%ÂÎ8kg j§ÂÎ8’÷q-¨õÎ8s·1¨ ;ãL­1¸ ;ãL®1ÈZïŒ#·vƵڙ°3ÎÔÚƒÛ©°3ÎäڃܩõÎ8s·1¨ ;ãHÝwƵ{ ÂÎ8“kg r§ÂÎ8“kg r§ÂÎ8“kg r§ÂÎ8’÷q-¨°3Îäڃܩ°3Îäڃܩ°3Îäڃܩ°3Žä}g\Ë*ìŒ3¹vÆ w*ìŒ3¹vÆ w*ìŒ3¹vÆ w*ìŒùÃθ”TØgríŒAîTØgríŒAîTØgríŒAîTØGò¾3®åvÆ™\;c;vÆ™\;c;vÆ™\;c;vÆ‘¼ïŒkù@…q&×ÎäN…q&×ÎäN…q&×ÎäN…q$ï;ãZ>Pag\ì`Ó1Ðu¾3.èag¼>ÙËÇw/åÐø´žÙ_Ч7×t_ÚuzùYÝë©—çúüùóôÉhÍøÿXuµendstream endobj 71 0 obj << /Type /Page /Contents 72 0 R /Resources 70 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 55 0 R /Annots [ 74 0 R 78 0 R 79 0 R 80 0 R 81 0 R 82 0 R 83 0 R 84 0 R 85 0 R 86 0 R 87 0 R 88 0 R 89 0 R 90 0 R 91 0 R 92 0 R 93 0 R 94 0 R ] >> endobj 74 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [70.7348 666.8844 104.6274 675.8606] /Subtype /Link /A << /S /GoTo /D (31) >> >> endobj 78 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [529.3351 666.8844 538.9788 675.8606] /Subtype /Link /A << /S /GoTo /D (31) >> >> endobj 79 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [70.7348 651.5419 136.7566 660.5181] /Subtype /Link /A << /S /GoTo /D (42) >> >> endobj 80 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [532.005 651.5419 538.9788 660.5181] /Subtype /Link /A << /S /GoTo /D (42) >> >> endobj 81 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [70.7348 636.1994 131.4065 645.1757] /Subtype /Link /A << /S /GoTo /D (46) >> >> endobj 82 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [532.005 636.1994 538.9788 645.1757] /Subtype /Link /A << /S /GoTo /D (46) >> >> endobj 83 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [94.6451 618.8196 165.5384 629.7236] /Subtype /Link /A << /S /GoTo /D (49) >> >> endobj 84 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [532.005 618.8196 538.9788 629.7236] /Subtype /Link /A << /S /GoTo /D (49) >> >> endobj 85 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [94.6451 605.8682 247.3409 616.7721] /Subtype /Link /A << /S /GoTo /D (63) >> >> endobj 86 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [532.005 605.8682 538.9788 616.7721] /Subtype /Link /A << /S /GoTo /D (63) >> >> endobj 87 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [70.7348 590.6602 144.1986 601.5393] /Subtype /Link /A << /S /GoTo /D (100) >> >> endobj 88 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [532.005 590.6602 538.9788 601.5393] /Subtype /Link /A << /S /GoTo /D (100) >> >> endobj 89 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [70.7348 575.3177 236.0333 586.1969] /Subtype /Link /A << /S /GoTo /D (179) >> >> endobj 90 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [532.005 575.3177 538.9788 586.1969] /Subtype /Link /A << /S /GoTo /D (179) >> >> endobj 91 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [94.6451 559.8408 201.7822 570.7448] /Subtype /Link /A << /S /GoTo /D (182) >> >> endobj 92 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [532.005 559.8408 538.9788 570.7448] /Subtype /Link /A << /S /GoTo /D (182) >> >> endobj 93 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [70.7348 546.5357 231.092 555.5119] /Subtype /Link /A << /S /GoTo /D (COPYING-FDL) >> >> endobj 94 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] /Rect [532.005 546.5357 538.9788 555.5119] /Subtype /Link /A << /S /GoTo /D (COPYING-FDL) >> >> endobj 73 0 obj << /D [71 0 R /XYZ 71.731 741.2204 null] >> endobj 6 0 obj << /D [71 0 R /XYZ 244.3315 691.2808 null] >> endobj 70 0 obj << /Font << /F24 54 0 R /F37 77 0 R /F32 62 0 R /F34 66 0 R >> /ProcSet [ /PDF /Text ] >> endobj 105 0 obj << /Length 747 /Filter /FlateDecode >> stream xÚVKs›0¾ûWp„0ÂS¦¦ÓN3ÓL™\šÈF5¯‘D<°ÆDNœŒÇ–µZíî·û­¤Àòù'°Ö·^ñ! ¼0ô#«h¾µåK_T‰âØ Aó‰aÕ«µ—&al¹S#Ÿ²Åò.Œ¬Ð÷b+Û(Wqʵ?±²ò·ý“  ,ó'û¾¼[…Vê¥17ŵ}Ë S¾!GÅçeŽ7¾ýä¿b¬¿Y.…Ø£Ý@ ´éˆ$öy-b\)ꘊŠ¡„ æ")Ì)#°`¸k… †DÄß=ÁŒ!)Çrüì‰ñ“ò¦¯QƒZvîeC`ƒœØ{'ðíŽì„˜UPî+`;¢q¡—‚ :â®ñ?E=$ÉYIðhðÙ €­Bäø $IçcÄÎøÉ÷Ú""­P‰&«6Èêžû¢ò>W»XОtQ!“Á'£‰g\*$¬2¢–«-*¥¤r'GXïfe†}߆Ê7ó¡bå¬^…‚¥Y¥8ÔÀv€õ¥ qË¡7ðD&˜w›ErøõðÃXQìy9¦þ°öÂIY*$ºä<œ-']£“´¯º‘©°ïk\㥪üín$¬²·°!n)›ÒC®µåÜѸ¶'ÄXÆöÒ›nÑí±Ç¬z_º ÕzxÒa]3íÓw•FФê†ZË5u4Ü9åÌ=â–è4­MUÛ¬¸fÝÍ5&nkL}ýÍáv«â¢LòìщG^aö‘е1É?¸E—àèSãB¤båø;öÐòÿ't*ótÈiA°*.¼n‘Í@8Dò¢Ye6 Ä9Ã#n¢·i4mq@>D Þ5¤ë Ö7ÀÔ°¡¤g½°–'×uÔ>oütá_Õÿ¹ŒüªÍœ„7lŽÚº'|mv;ÐWn‚c‹/™~>ÈGA”xI§Æ†Tq':Ç×Å*š<ÀÊ÷ÖIºÖ–FôøyîN?V ÿcó}ðendstream endobj 104 0 obj << /Type /Page /Contents 105 0 R /Resources 103 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 55 0 R >> endobj 106 0 obj << /D [104 0 R /XYZ 71.731 741.2204 null] >> endobj 95 0 obj << /D [104 0 R /XYZ 71.731 706.3512 null] >> endobj 10 0 obj << /D [104 0 R /XYZ 146.3693 691.2808 null] >> endobj 107 0 obj << /D [104 0 R /XYZ 71.731 674.2377 null] >> endobj 108 0 obj << /D [104 0 R /XYZ 71.731 674.2377 null] >> endobj 109 0 obj << /D [104 0 R /XYZ 330.1288 648.5929 null] >> endobj 110 0 obj << /D [104 0 R /XYZ 71.731 628.5033 null] >> endobj 111 0 obj << /D [104 0 R /XYZ 71.731 597.6191 null] >> endobj 112 0 obj << /D [104 0 R /XYZ 359.1207 586.8245 null] >> endobj 113 0 obj << /D [104 0 R /XYZ 362.6958 573.8731 null] >> endobj 114 0 obj << /D [104 0 R /XYZ 71.731 540.8321 null] >> endobj 115 0 obj << /D [104 0 R /XYZ 219.0971 530.0375 null] >> endobj 103 0 obj << /Font << /F24 54 0 R /F32 62 0 R /F34 66 0 R >> /ProcSet [ /PDF /Text ] >> endobj 118 0 obj << /Length 486 /Filter /FlateDecode >> stream xÚuSK¯”0Þϯ`'$—N[h\j¼F£‹I\¨‹^è Ð"-"ÿÞ–Rœ;ÓÅiÏãûΣEÐ8eVä` ó¨î0ºXÓûÚ\rJ&ˆÚÇkJ²( L£ôäMu8>â<ÂPR¨:*ZZ¯QÕ|‹ß¶l0|LR|*b¼ü ͘`«fªP2ùQ}<>f8*AI-‘Å‚QŠK GÉ óyùòôɇ¶Æ ¯ÇyžJbÐ/úWÔ˜ "¾X;zð®L{©Î^š–oÑó[“ØœUO=—æUBH¼éæQ!/lðT’ÿÿœ Çn¸6^qU‚I<[…öÌ4w¥»b%AùZ¬^ld¨”»f ^÷5Ém¦Ýª†Qý=3¼[¼*÷¢]çÚë³–Ú°®c®á:4H6þ’ÁaHMœÆg-;Åš³©ùø;A$^§kßmh÷YM—Ý«OŠ:`y:óg-Ìöh¸£÷$ÜT¼¡V}?Ia–uü^÷4‰úgˆ:åú¶ü ÙKå®ë/Æ6Ã¥WaPâÅG`Zs£«êð®Úwdûùy DË»[´¹¤W>ë eùÕ¯'Y DÙŽäÚ…nÙö…¼Ã÷| mendstream endobj 117 0 obj << /Type /Page /Contents 118 0 R /Resources 116 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 55 0 R >> endobj 96 0 obj << /D [117 0 R /XYZ 71.731 706.3512 null] >> endobj 14 0 obj << /D [117 0 R /XYZ 298.5799 691.2808 null] >> endobj 119 0 obj << /D [117 0 R /XYZ 71.731 670.2196 null] >> endobj 120 0 obj << /D [117 0 R /XYZ 71.731 670.2196 null] >> endobj 116 0 obj << /Font << /F24 54 0 R /F32 62 0 R /F34 66 0 R >> /ProcSet [ /PDF /Text ] >> endobj 123 0 obj << /Length 1490 /Filter /FlateDecode >> stream xÚ­XYÛ6~ß_ajMQ¤Ž¼5E7HÑië-š>Ðm³+YŽŽx_ßá¥ËÊÆAƒ}0%‡s|3ßhý†?ù( à‡úˆLiq‡{Øzyç[†ˆ0?„‡™]Jb.¼¡’›»õ=¡ ‚QÈb¶ØìÜUaR1Ž›ìïåO~jDµòH/ 2¿¯ŽuÃóœ7²<®þÙü²¾È"AI—€¼ðHªB¦Ul²†s /ÓNð½óúÀ•»ÆæIÄÈoaÃéÒ¿pÃ:t©Q„£z°qÙMä2Þð-¯íßÖMÅS ws¿8œ2=Xxs»Ý62—ŸÄDçëË¿ýúy´Aêl|‚æSíâIT»²*æ¬*aO—`Ì‹8™AÍ1/yæp³w¾Øœ…+> RÁÁ|‡¸\Ö;"›Ã°Ì¬D%NeÕLKõÄ›ôÐp%æœã)ÔR-·¹³­Vø½òãå^ £hÖÔEÚÔk K-ø3|hšÓóõú†3 íOC•¶U%Žö^›ºËó#ûMgûBFuÑw-jh÷ÕEÅèQw¸PO =WùÔwŨ»UšKeî|QÒ0A|³¢jü|QvRO¥,N¹(Àö)Ú¬GzýãÛW®õUWEÙÜCù:´ßË+V(ʺq¡O;¥•ÈE_Êöåù|^…l‰tPQ ~Ÿxå-Êþ n¡ úP¶ŽÌÆ-«/ÆÁ%6¶=Nª‘YtM9«È,²Ôå˜þ…åRX]°è¹Œ#°(VðŠqÁ™àÄdgp}/+—3 ¥/ÑZ{T8 ¡),o¾®ñ¤‡ÁkGŠvÓÆ¸•ÐV]Ê bÓ¦تt›wïôµ]K[e]Œ\_hëq:¡3®x'Ã¥úú¯ûˆËÆ[:ð–bÑ»ämÝÌÄÂOãÄwV<­yª±„A®¿Ç˜ì[wµPž=žr™Ê&¿LýëŠLwîÕgæç[Û”j”æn R£ÃxÄ(` Ž]žH…½ÕPÕƒçàŒ-Žãœfsè­Ù¯QÖ¨4iÒõâ©î™ÀÞX¿·îs+ˆB ÇI /²ˆP$eèy‘Ÿf.ªý8th+]B1qÜQ¶.‹Û~™eRž®ªÊ“D5R“l*|y$vU}|dsÈêi® $Œ¾EÒ þ :Zìû²\Haœñ`ªØÎ5o ¥º;“0aêÚÕô[7kª&ìXR׬.Êw mÅ™\“¦yp¬G O©S¥#Ün§|PËY›C‚ÅûÞµ±µ1Xˈ•úaBâ/ß¼3 c†\à…î©ÚdkäÈžv"uYX5¦3ÖJÍa›!"!ÐÓ`ð¥á ó_ë_Qcú^õ§ð(ÜçpU–Ïð)UÈz0B¹BÈJ§^Ö]«™½c(#€üÜ?`¬ˆ71³ôX Œ}¦1¢4¶ÿC˜ÞÖý/gæ¾ÿÝ·êendstream endobj 122 0 obj << /Type /Page /Contents 123 0 R /Resources 121 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 55 0 R >> endobj 97 0 obj << /D [122 0 R /XYZ 71.731 706.3512 null] >> endobj 18 0 obj << /D [122 0 R /XYZ 287.5478 691.2808 null] >> endobj 124 0 obj << /D [122 0 R /XYZ 71.731 670.2196 null] >> endobj 98 0 obj << /D [122 0 R /XYZ 71.731 659.3875 null] >> endobj 22 0 obj << /D [122 0 R /XYZ 214.3071 616.29 null] >> endobj 125 0 obj << /D [122 0 R /XYZ 71.731 604.1188 null] >> endobj 126 0 obj << /D [122 0 R /XYZ 71.731 592.574 null] >> endobj 127 0 obj << /D [122 0 R /XYZ 71.731 577.6301 null] >> endobj 128 0 obj << /D [122 0 R /XYZ 71.731 566.7359 null] >> endobj 129 0 obj << /D [122 0 R /XYZ 91.6563 548.9027 null] >> endobj 130 0 obj << /D [122 0 R /XYZ 144.2183 522.9999 null] >> endobj 131 0 obj << /D [122 0 R /XYZ 71.731 497.929 null] >> endobj 132 0 obj << /D [122 0 R /XYZ 71.731 484.9775 null] >> endobj 133 0 obj << /D [122 0 R /XYZ 91.6563 469.2016 null] >> endobj 134 0 obj << /D [122 0 R /XYZ 463.5473 469.2016 null] >> endobj 99 0 obj << /D [122 0 R /XYZ 71.731 449.112 null] >> endobj 26 0 obj << /D [122 0 R /XYZ 375.4586 406.0145 null] >> endobj 135 0 obj << /D [122 0 R /XYZ 71.731 393.8433 null] >> endobj 136 0 obj << /D [122 0 R /XYZ 71.731 371.504 null] >> endobj 140 0 obj << /D [122 0 R /XYZ 71.731 361.4024 null] >> endobj 141 0 obj << /D [122 0 R /XYZ 71.731 361.4024 null] >> endobj 142 0 obj << /D [122 0 R /XYZ 81.4147 349.885 null] >> endobj 146 0 obj << /D [122 0 R /XYZ 71.731 338.829 null] >> endobj 147 0 obj << /D [122 0 R /XYZ 473.2014 326.971 null] >> endobj 148 0 obj << /D [122 0 R /XYZ 71.731 301.9001 null] >> endobj 149 0 obj << /D [122 0 R /XYZ 71.731 301.9001 null] >> endobj 150 0 obj << /D [122 0 R /XYZ 81.4147 292.4006 null] >> endobj 151 0 obj << /D [122 0 R /XYZ 71.731 281.3768 null] >> endobj 152 0 obj << /D [122 0 R /XYZ 71.731 281.3768 null] >> endobj 153 0 obj << /D [122 0 R /XYZ 81.4147 270.7817 null] >> endobj 154 0 obj << /D [122 0 R /XYZ 71.731 259.7256 null] >> endobj 155 0 obj << /D [122 0 R /XYZ 90.8293 247.8676 null] >> endobj 156 0 obj << /D [122 0 R /XYZ 71.731 240.7295 null] >> endobj 157 0 obj << /D [122 0 R /XYZ 71.731 219.8727 null] >> endobj 158 0 obj << /D [122 0 R /XYZ 71.731 219.8727 null] >> endobj 159 0 obj << /D [122 0 R /XYZ 81.4147 208.3159 null] >> endobj 160 0 obj << /D [122 0 R /XYZ 71.731 207.2548 null] >> endobj 161 0 obj << /D [122 0 R /XYZ 71.731 187.3295 null] >> endobj 165 0 obj << /D [122 0 R /XYZ 279.598 176.7344 null] >> endobj 166 0 obj << /D [122 0 R /XYZ 71.731 148.839 null] >> endobj 167 0 obj << /D [122 0 R /XYZ 71.731 48.8169 null] >> endobj 121 0 obj << /Font << /F24 54 0 R /F32 62 0 R /F45 139 0 R /F47 145 0 R /F34 66 0 R /F37 77 0 R /F49 164 0 R >> /ProcSet [ /PDF /Text ] >> endobj 170 0 obj << /Length 966 /Filter /FlateDecode >> stream xÚ•VMoã6½çWèP 1¤¾µÇìv‹ôÐK}ëö@K´E¬$¢×ÿ¾C©(Š´ÉμÇ7´X@á#ECÊHÓ4¨û;œ`ë·;æ\"ç­žöwß“4¨H•Çy°?iš“*ÎÌY))i웿v_[~žÄFqFw1ÁñyÐï:>I5„ï¿ûu¿$Ë’‚T%œøiE‹×ûšÒ,( Í«ÂÔä*Ï«œ$e™Ù’~1)Á¯XùU$/“Î6=ÿ)Â(§t'±P HâØÈEDqL*–2¸KºSˆqzrV+ÐPg1"fœ7ûƒãlwé®8uÉEƒÓf”fû%dÙMéî7f-6ÕªïùÐ|q@ׄP¨˜‘œ•Õÿå¢nEýó?3ÑJ µ¤¹¯ÅMFÁ3ÉvËê8Ιãà¸ë<ªÓÈ{ ˜Zî—ÅxTcÿ6êˆôáäÀµ¬Ñ”Ãyž6)Õ<¹E̦ Ú{Ká6ñE‚0•¶ÀÍXjáB1f?…nlz9H=Á}û-¸¦qà½ðŽ g®õ%d ‡±!¸äÉôjòa9Àáºõ»´ –»3>q`Ã…Ù@ šäkMu '¡]O.DÏ£¸zrJªLà‹l¶:tpWZçN˯5ÁìÒʺuʪÃÄ*×>¼ƒ’׶Ĥo­4£<Œ) €JºV¹Yi¯õþ]©—¦qξûWFa¦¯z½†Œ èãz¤ÊóÔˆžUæ©K@ô9æH,!¨Iøž«VÎqFR ¤aG=*Šrw sé8ÑÊ2€Õ¶$°¯ÕŒ“AØŠÁ²Ä[×Ê-·Îàó¤j5 lNÑ(àÁõGü 4î€jüà¢M%•…oŽ#Øš‡A§ð`¥* ÿH›é1h º½ABÊ¡ÌX=EiBIlV#oR–#Ï÷/F”bMÓ<¸Â•íZ‹–OÜõ<Žbp«ðv ðî3R;y˜”êÐÓŽÚC{š@_z)„­ ‘‡ð@ŒB<ýù RR¸ŒÞõ›8H>,-´‚šj†n»VT¾Á£Ì/†y–;¶/…èº/Ÿor%'¯œZhÍáNaûºÑ»è •ªkĸpÃ.Ä„%Äå=ÞÌÀ(õ² Tñþg(©b°s¯+Ÿ”-Îo¸óØ_…àñºçÚ0È'ÛøC[áZ]¿ó|Û†¾UíË@¶ß-îK#-IÉòêÓϨ•Ïû¯¨,QP–,'Y|ø•t#ß¿]a†_endstream endobj 169 0 obj << /Type /Page /Contents 170 0 R /Resources 168 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 182 0 R >> endobj 171 0 obj << /D [169 0 R /XYZ 71.731 706.3512 null] >> endobj 172 0 obj << /D [169 0 R /XYZ 71.731 706.3512 null] >> endobj 173 0 obj << /D [169 0 R /XYZ 81.4147 696.3885 null] >> endobj 174 0 obj << /D [169 0 R /XYZ 71.731 661.355 null] >> endobj 175 0 obj << /D [169 0 R /XYZ 71.731 661.355 null] >> endobj 176 0 obj << /D [169 0 R /XYZ 81.4147 651.8555 null] >> endobj 177 0 obj << /D [169 0 R /XYZ 71.731 640.8318 null] >> endobj 178 0 obj << /D [169 0 R /XYZ 71.731 600.8818 null] >> endobj 179 0 obj << /D [169 0 R /XYZ 71.731 585.9378 null] >> endobj 180 0 obj << /D [169 0 R /XYZ 469.0454 576.4383 null] >> endobj 181 0 obj << /D [169 0 R /XYZ 483.7224 553.1258 null] >> endobj 168 0 obj << /Font << /F34 66 0 R /F45 139 0 R /F47 145 0 R /F32 62 0 R /F24 54 0 R /F49 164 0 R >> /ProcSet [ /PDF /Text ] >> endobj 185 0 obj << /Length 1468 /Filter /FlateDecode >> stream xÚµXm“›6þ~¿Âs_jÏÄŠ/ý–×Îu.iÚú>tšŽƒ.Ö‘«óë+¡ÇɸsãÁ²Ú}öÙÕJhÅZ„„¾¸`<âEz¸‹OâÕO7H‹à AL¼]?qä‹õPÉËÍÍó·^x$"‹Í£™*ˆ…T£Å&ûsùjŸTœÖ«µFK¨ëëš}6ÏÊŠ³²hVm~~þÖ÷1ˆ1—Pk/Òiúc…\–­üŽÀeRU9Kù±z°OuÃKueã,ÉÙªÆ9Ûe;¦î³š­<²ü¼BdIkýá 土ô <ЩoÔ3c}7xb|¯MØSå&‹H8`é @Š„gÒ!aÌ6-‹b+æÛ*E!â‡&ÐXÛ¯×È1A¸S’ÙÙ) ‘ù·E{ 5KÏÌŒH$X+0ÖI­¡zl‹´C¨ñf¯Á:›òyÜš¶ªÊš7½íJ]™ç¥~²øk„”† ×c bAD1Q ìˆË÷7o6–¶†ŒÐa€Ã)f{Ç0tY?¾Ú,± > ë¡Æ. °÷øý¼Ò>‹Š4´H ¡J ÆÝMé,«i£1)Gؼ;þþë½F4áÉ.i¨¡km°%d©ñ`Þ&:=è¡â†ß¼îáÕ6ÜæešäÒ¾[7‹$_hÊ݇I èRq`àÀ¤n\·EÑOYŒ<ë¦Ö´IÒ=+(0ѱG|l1 ¨›FòF KÎöôE3 ¸Kr= 5Î3ÀJ9 è­oš¹¨ÖôPršÏÿMlPhËódóêƒ(¥è„)·ð¶Çõ ­ËT7îiJ+>2%£+Q™“6çS´hÊôoùžòsQhÔ]fLÇ¢ø‘w½ 5ÎÑJ9A¤ð8K¥=VMcYßÃ¥Ã5†¢xÒ4O³²Îæ!øÂWd ñ FÊeõÐàÿ¤W°s$A>À!®ˆÉ@ãLŒÔ¥$q3¶/¦[IÝÃ8A,‡:uï´â£íŠªºüT']LÛFçêÎ,»œ^TÞ•9b5Ú¥Ò³¢áIžw}Ø3ëÏÈ‹æØpzù~Ú¬ ’X7ª…8íG¼@¬ü1ÒRš-žÀ‡#ºpv eûMË…Ob„"ªW#ÑPã<‰¬”C¢>äÒ¡C¬0%_ˆe͹¼¡EZf2åfœFˆ¼øŠkäPã§”ãôÝ‹÷+Ÿ,_Ì呦gºOê$妬XU/¾g©nÆÙh_°;É»d܇Ža7ºMÞ•‰í¿ETìCÉñ©¼ybyîÚаœ|°ä¯04«5·e¡.£Ùú~Àx7ƒÆ3ÓZ4•t¨oÄÅœí-ô93%£Û“‰ï–÷õ£ŸÎñ“8lkLƒPQÁO·ûëkÖ ý›),§åÎnÔÆ0¨í‚ ÒmÒòòöÙ…1¾,p}m³ô 5Î'¼•R ßE ÇK¦–q§‘w¢6w@âæd')?ØSñ^J}-JCŒZÚã€3­R§Å[3•"zÞRm˜Dó‡ÈÇâ¿ê†ÅÄì¢]ZÊùÕuÇ µE÷j·ÕmŨóy‚aÝqmfº}~¬Ì»—÷¿¼ÔT~÷æõÝûÁƒû¿ýôFŽ5Ýxª3Ç”RÅ 5°®ºl„æ,ÃJÇÁ!êÄŽ^ØÚàNmLD—ƒ‚xòtU‹¬2*dx2âûBä[MÒ%<žÍÔNÌ÷FN†=endstream endobj 184 0 obj << /Type /Page /Contents 185 0 R /Resources 183 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 182 0 R >> endobj 100 0 obj << /D [184 0 R /XYZ 71.731 706.3512 null] >> endobj 30 0 obj << /D [184 0 R /XYZ 318.5354 691.2808 null] >> endobj 186 0 obj << /D [184 0 R /XYZ 71.731 670.2196 null] >> endobj 187 0 obj << /D [184 0 R /XYZ 416.8528 661.5443 null] >> endobj 188 0 obj << /D [184 0 R /XYZ 103.2725 648.5929 null] >> endobj 189 0 obj << /D [184 0 R /XYZ 71.731 646.4361 null] >> endobj 190 0 obj << /D [184 0 R /XYZ 71.731 631.4921 null] >> endobj 191 0 obj << /D [184 0 R /XYZ 71.731 620.598 null] >> endobj 192 0 obj << /D [184 0 R /XYZ 91.6563 602.7647 null] >> endobj 193 0 obj << /D [184 0 R /XYZ 71.731 577.6938 null] >> endobj 194 0 obj << /D [184 0 R /XYZ 71.731 564.7424 null] >> endobj 195 0 obj << /D [184 0 R /XYZ 91.6563 548.9665 null] >> endobj 196 0 obj << /D [184 0 R /XYZ 71.731 525.9529 null] >> endobj 197 0 obj << /D [184 0 R /XYZ 71.731 513.0014 null] >> endobj 198 0 obj << /D [184 0 R /XYZ 91.6563 495.1682 null] >> endobj 199 0 obj << /D [184 0 R /XYZ 71.731 483.0488 null] >> endobj 200 0 obj << /D [184 0 R /XYZ 71.731 470.0973 null] >> endobj 201 0 obj << /D [184 0 R /XYZ 91.6563 454.3214 null] >> endobj 202 0 obj << /D [184 0 R /XYZ 71.731 442.2019 null] >> endobj 203 0 obj << /D [184 0 R /XYZ 71.731 431.3078 null] >> endobj 204 0 obj << /D [184 0 R /XYZ 91.6563 413.4746 null] >> endobj 205 0 obj << /D [184 0 R /XYZ 273.4622 400.5232 null] >> endobj 206 0 obj << /D [184 0 R /XYZ 71.731 388.4037 null] >> endobj 207 0 obj << /D [184 0 R /XYZ 71.731 375.8259 null] >> endobj 208 0 obj << /D [184 0 R /XYZ 91.6563 359.6763 null] >> endobj 209 0 obj << /D [184 0 R /XYZ 71.731 349.6141 null] >> endobj 210 0 obj << /D [184 0 R /XYZ 71.731 334.6054 null] >> endobj 211 0 obj << /D [184 0 R /XYZ 91.6563 318.8295 null] >> endobj 212 0 obj << /D [184 0 R /XYZ 71.731 267.8557 null] >> endobj 213 0 obj << /D [184 0 R /XYZ 71.731 254.9043 null] >> endobj 214 0 obj << /D [184 0 R /XYZ 91.6563 239.1284 null] >> endobj 215 0 obj << /D [184 0 R /XYZ 71.731 201.1061 null] >> endobj 216 0 obj << /D [184 0 R /XYZ 71.731 188.1546 null] >> endobj 217 0 obj << /D [184 0 R /XYZ 91.6563 172.3787 null] >> endobj 183 0 obj << /Font << /F24 54 0 R /F32 62 0 R /F45 139 0 R /F34 66 0 R >> /ProcSet [ /PDF /Text ] >> endobj 220 0 obj << /Length 984 /Filter /FlateDecode >> stream xÚÍXß›8~ß¿‚Ç 5.Æ6?·»½“N{Zš·ö„ ˜ ˜Ìörý Á&$KrA¥U• Œ?¿of<[ü°åcä¸PŒ\סVRÞ9Ö ¼úýk“µ¶Y>lîÞÿF¨¢Ðs=k“Y”PDEã[›ôóêaËwJÔöÚeΊ þúXç¯æYµSy%ûïÍw7ÚŒø( øªcƒÕ„kîÈ5½/ô vð¬Ü7_‹()r!U”Tå®MÓûôÅaŽlKQç ñ¹oÍe,˜òÌE4œñ»óë‘^ ®cßZßn"ÄÈc9®Ûíâ¾÷øÕvÙŠ­èo ^Û8X½’Õ–Ë~ô¯¨«~”ð¶y¯'öt¼oDýjc¶2󞲕yÂ;­ô ‹ÁäÀ HµÈŸ„2àys:çè„y®ôYul/kì¢azØeÊ?]ü@Ë5†\F¬µ 0ÅoÅͪV¦, }›'±KsŸ-(ññŠÄÆêH|®­‘ ª­å™1P™šõ×’«d+R=K³úÎȧn@àY7)‰˜ ¹ èÍ ç/²ªEÔìx"æèË|,$Ëé;F¼¬ï`õõåI"vZQc¨ÏY+“c†K^ŠH€á0½ÛFïÀ,%ˆƒìÒ•!^QÂXýÅt(ƒlF*/EÕ*cÐ(ÁÓ!¯&²è›AÝ\NŒE©b¬š\¾è8yJŤ’R‚ãæˆ(ª„ÑÇq 1«êRßC.¦îr±0F¼ ƒÕ÷Å‚<vüôl¶ºÔM@Ư6vHÌ"OÏ÷OýðÒ4¹™å²-T5Š+QÂý<¢ CÄóLº1â¢ÕrIwKÕ;Pµ+ô ŸþÒ”Ÿs—ë…tÇÑeˆ™Ó¨îÞ™%w¼æÊœ„ñþ4 ûûežTE×áÂÔâk›×Æó?÷ƒ'aеaÊ@'àt8\ŠÀ†ë¬P FÌ ñr¡0F¼ ƒÕ÷…‚Eñ¿á–«É m¢IŽRPL…LÏ«A7guUNYã M•çÍÐC‰$\Wa󌷪‚F N‰¢Ø+jÝFí«öìØ¸±2,€õHVQíaÉgEŸë#ßwü+5F¼}ÆêÇGß±3ž¨Lì4Žº¶ ©¸èP; º—Šÿƒn­U'sdp<F€—E0F?±ŽÅ–Û®sÒá”C[ôüøáaÕ@a ¹ç±ºt~(À^xõ›ÉÈæí'FrL¤Žvñ[ÈÄzÿeÖwéendstream endobj 219 0 obj << /Type /Page /Contents 220 0 R /Resources 218 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 182 0 R >> endobj 221 0 obj << /D [219 0 R /XYZ 71.731 741.2204 null] >> endobj 222 0 obj << /D [219 0 R /XYZ 71.731 706.3512 null] >> endobj 223 0 obj << /D [219 0 R /XYZ 71.731 694.2317 null] >> endobj 224 0 obj << /D [219 0 R /XYZ 91.6563 678.4558 null] >> endobj 225 0 obj << /D [219 0 R /XYZ 71.731 653.3849 null] >> endobj 226 0 obj << /D [219 0 R /XYZ 71.731 640.4334 null] >> endobj 227 0 obj << /D [219 0 R /XYZ 91.6563 624.6575 null] >> endobj 228 0 obj << /D [219 0 R /XYZ 71.731 601.6439 null] >> endobj 229 0 obj << /D [219 0 R /XYZ 71.731 586.6352 null] >> endobj 230 0 obj << /D [219 0 R /XYZ 91.6563 570.8593 null] >> endobj 231 0 obj << /D [219 0 R /XYZ 71.731 558.7398 null] >> endobj 232 0 obj << /D [219 0 R /XYZ 71.731 545.7884 null] >> endobj 233 0 obj << /D [219 0 R /XYZ 91.6563 530.0124 null] >> endobj 234 0 obj << /D [219 0 R /XYZ 71.731 504.9415 null] >> endobj 235 0 obj << /D [219 0 R /XYZ 71.731 491.9901 null] >> endobj 236 0 obj << /D [219 0 R /XYZ 91.6563 476.2142 null] >> endobj 237 0 obj << /D [219 0 R /XYZ 71.731 464.0947 null] >> endobj 238 0 obj << /D [219 0 R /XYZ 71.731 451.1433 null] >> endobj 239 0 obj << /D [219 0 R /XYZ 91.6563 435.3674 null] >> endobj 240 0 obj << /D [219 0 R /XYZ 71.731 410.2965 null] >> endobj 241 0 obj << /D [219 0 R /XYZ 71.731 397.345 null] >> endobj 242 0 obj << /D [219 0 R /XYZ 91.6563 381.5691 null] >> endobj 243 0 obj << /D [219 0 R /XYZ 71.731 356.4982 null] >> endobj 244 0 obj << /D [219 0 R /XYZ 71.731 343.5468 null] >> endobj 245 0 obj << /D [219 0 R /XYZ 91.6563 327.7708 null] >> endobj 246 0 obj << /D [219 0 R /XYZ 71.731 315.6514 null] >> endobj 247 0 obj << /D [219 0 R /XYZ 71.731 302.6999 null] >> endobj 248 0 obj << /D [219 0 R /XYZ 91.6563 286.924 null] >> endobj 218 0 obj << /Font << /F34 66 0 R /F32 62 0 R >> /ProcSet [ /PDF /Text ] >> endobj 251 0 obj << /Length 1370 /Filter /FlateDecode >> stream xÚXKsâ8¾çWpÄUÄcÛÀ1²ËÖdkvÂm³•¶UŒå‘äaù÷ÓBjc²[,K­~~ý0á €_8˜„þd 8ô£(ˆÙî&là跛ВÄiêGI˜Â‹ãô6OüÙ4J·m&÷Ë›/OQ<ˆ?M¦É`¹FQé ¨¦Át°Ìÿ>lI¥¨ðn£ÉtûæùÍCšÕ#‚)F¥Ù>xQ2äµy‘[^¹Y¿—Ü “áÞ¼‘¯•÷Ïò/Oãh0óg)èâƒÁm4 Òä(y¹ešo ³Fx)˜Tv_³‰ûÒ¼V=`‹¯ÍSm©YìòGa–¹`úöO­0O’¡oN‚Y™uŽÌž/}5Ë5%ªx ¶DYžl­y®QÙµà;³Ú74ð¯Í #–„ñÑ\4¦±QÃʲ͉"+"í¤Âaõ‘uUq¡hn^WôÜ*_±‘y!¥=eÊek×À†xÇd÷„•Jð¼Îú²´Ö#?ãþ*${Y´TŒ—bÛãh4¯Õ–Ûµâæ)¨V¸w¹¬w+¼„œÖZïÔz¹BöjÅ¥d«‚úçgáÄÂ$¶@ÈØØ8%öC›Wˆ0X¾Iòᮽ²ÍêìnæË&¹mÊ&Iè§!¤‘+ÿ-Ím›è˜ý}P&AØJþ†HköEəĨO¢ uŠì?O*ØKNN` ‡³ñ¤«ÄÒ›BHl8‹¢“%ZÑÞ•”¾³r3ÂøÈºÀŠA0j'9bpeÙï莋ƒ—ºJ}Ztð*=&ükDtöó…XÂJ+àO–[ˆÍ®TAKš½Ÿ,êä©…^8nðrU,#:¤ PØ'Ñ4þ-¢Ë@¢«pˆü$:8 ÑVâÑ‹ƒá†áp9_.žç6Özù²ôfãáÝó·ã±=è\èÅH_ê¡`f˃€¼Cœ~Az¼_ØCE‚4ç‹@Êj!0Åñà(—R‰W^ k‹°=C¡9–Ú­OiÚ%–§K0‰§3Çч0i]„ICt &.‘×aâÒá&%–M æ‹ç»¯ý`5Æe› àöÌmC,VL "šl§“½ÏY~œœm¢Ë^G¢«^wˆü„×:8¼ÞVbùQ?®pÑ /fVi"AJI²ca륩$ÿ†YÅ¡f÷ m3jòm¿¥%FïýØIs$¼Þl?œW`^zËxY¾e¤zÛP¥»²nÉ8”GUmŽÿnšm Õ`ÔëUÿÃFìOp«†ÚdQ¶×Öpñ>j}Dž>Šòn’Õ˜ÿ©ÔŒ¦Jb¾âLÔd0 Y3çºBÓ©à•`ÐSÛyÕ÷SÁÚ‚Ú¾?fÔ¿zÄeÍ|„Ž¢$³X}ø>ïNtfð»ÿ:ÇÔvP6.>þ4LgW&Ÿ†Æ´¿¸Õþ’qäOfщ“¶>íKkþ~qÈû¸Ñlendstream endobj 250 0 obj << /Type /Page /Contents 251 0 R /Resources 249 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 182 0 R >> endobj 252 0 obj << /D [250 0 R /XYZ 71.731 741.2204 null] >> endobj 101 0 obj << /D [250 0 R /XYZ 71.731 706.3512 null] >> endobj 34 0 obj << /D [250 0 R /XYZ 535.2205 691.2808 null] >> endobj 253 0 obj << /D [250 0 R /XYZ 71.731 670.2196 null] >> endobj 102 0 obj << /D [250 0 R /XYZ 71.731 633.4846 null] >> endobj 38 0 obj << /D [250 0 R /XYZ 277.2462 590.3872 null] >> endobj 254 0 obj << /D [250 0 R /XYZ 71.731 586.8237 null] >> endobj 255 0 obj << /D [250 0 R /XYZ 71.731 578.2159 null] >> endobj 256 0 obj << /D [250 0 R /XYZ 81.6937 551.6126 null] >> endobj 257 0 obj << /D [250 0 R /XYZ 71.731 536.5043 null] >> endobj 258 0 obj << /D [250 0 R /XYZ 81.6937 520.7284 null] >> endobj 259 0 obj << /D [250 0 R /XYZ 71.731 505.6201 null] >> endobj 260 0 obj << /D [250 0 R /XYZ 81.6937 489.8442 null] >> endobj 261 0 obj << /D [250 0 R /XYZ 71.731 487.6874 null] >> endobj 262 0 obj << /D [250 0 R /XYZ 81.6937 471.9114 null] >> endobj 249 0 obj << /Font << /F24 54 0 R /F32 62 0 R /F34 66 0 R >> /ProcSet [ /PDF /Text ] >> endobj 265 0 obj << /Length 2200 /Filter /FlateDecode >> stream xÚÅY[oã¸~Ÿ_aø¥6h$ù¾}Jf’EŠÌtÐx[Ý>Ðm³‘D”Æ›¿‡â!EJŒg (D2Eò|çö*™Äð—L6I´YÀe™Di/'Yù!žœàÑÏœ²\¯£t•¬áGàéíj±‰vÛt=¹u…Üï?||L—“4ŽÖ«íj²?š¥Ö;˜µ·“}þ¯Ù]]Ó*g¿ÍoÓÍvvéëÏ_Ñ7‚R}÷™gmI«†4ŒWzè™e´’tþïý_>>.ÒÉ.Ú­a°R<¹Mw°ØzÕ-ò÷y’$3*¤~uÏ’(¹Ñw_ˆÈÎú6ãØ Û‚°õR ëÄn@b­“í®“ø‰×ó$ž½ v:7úí_ãUü þ%ްîu€»~l.ê="päqž¬f¼­òN-ÜÒS•EúnµÓ×ý|ÏhYøÚ·‚dg¿´¬ÁáÅ"ÆÁ{.+ï˾Æ)Àp›,âþýË >xø®¶AůP“ …cZ¯Ö‹N뚊’5 Íõ¤†ëk†`è_¤ÂÇ9“`‡yÏZ³C\èê–öeF¥¾çG|f8R ‰µ@tT %£˜3©N¬:áö«Fw­8¢àót5»Ð< øÍ­±u.½Hµ‹ÆhŒo{¸ûrÿü`‘éælº9û3î±nEÍ͆Çú<»ú˜AƒcI^Žø”˜Áª%ª 0~¿5Î_qˆ ¼6gŠ·¡ŒTù é_Ó#8ã—¯ÌîpEÙoÍì\MÏyù“Õ9v«dÙél¶M¤l?SîÈ›ì ô¨žiÖ°~¢·Òò,AC¾ÅŒc\XsöÁQ#ܸJÉsv|s|_£¬ƒÐÓT猗%ïyóW¼ò®W3ô–šqkÁôèÍUO¨•Th8ðùÑ,aÁ#-(!PÔí¡`ÒšF'™7ÌmBfÌšÍxQ&Y\»œ™ÉB6ªÔ¢ JK–SA­©d­†æ%»„2ïqœf]ê“ÆÛsœwxsüZF~Ðm1讆bñÊ VÆ©§Æ­ zl¦½^¦””˜ý4g‚:‚Nè³ðŒý×À4Je4‡e+;¡”´ðlpbÂÆj(mä’ÒatÁ'“¹ªjq9Ø”®³ê†VTò©ÌCv ÒeÒPꦒ*ãÖ:ŠI§PMÿùÖ&Ê3QiÀµ…¿Ú{Ù·2¡œ›è1‘ÒÚ9øÐÙX†ÔÐð;7eŠfÄ ÏÄp‚(¯ã’»$è'ϽäZð“ ˜I%ä½"·~@‡ÒSÞT(~g¹ç€‹a¦EH?u¤ZΩD§¼o›°+_e›j  dH@Æ ¢Zö͘‘Ê0°ËÐ%a @ðæ×ÛÖ„Æ ŠîùiA䕃à—íá?PëÌ– ( [>eær¦}R“èsSt=ëׂUÅm7NíJU•ÿ ±*cu_ê,2ƒ w9[žã‘‡::öeì6k,7R=Bµ¨²pœ'¨ÇÝ·oÏOŸîŸöÿÄ¡¯ŸõÍç‡Ç§¯Oû§¿~} S³ ž¤® K<-•q¯}è}–…p Ã*`CXåÛüG´yÏý*gc'7g^Ø %ÉÛˆä*¯ n|ܧJ¸.ttÈ/À;KùâŠæ°twjÚ²©ÍvH°ÒÓ™øÒ²ÍÎïcn€6®€o¨¤åÁ†Ø°×NU/,U&c[re§å9ð9Œ½éo§QÈç°¯š~AŽcÞtÑé;ûüì…ž‹xùÞ‡>7ÎÚ¾0î³Äš 'a:Ü7iyr·¡»“î+TPþhé¦- bÝ’™õ'ä èñZr¢ïb¾\̦†x+ –KÅÃDžv…+Ñ+(j9Žôð«ÛL úçQÀ·6ƒÃˆ¤&—Á¬;԰À{7Lð.§ºÖÂ]Y²¢••ìr.ÌCèPd ¸-4–gV_ówÕÈñ»6Bþ!ï3V=þÓ|µšgÐ~e#PúÔÑp¬Nco¬ìNONfÒÏ­Ê5—ï°e<ÇŽ˜=å J`cêšÂ¸oÍË×”‰zmô¹0M¯2%Q$C€]‡Õä³|M„9Ÿr#§ë÷͸AûžÉ/´Ý Ð?ûH/MchI•–uÉlhPí"Q¾eKÀ؆‡]t4AÁi¸`™) Fån¾O*=Ýt]mœ|BŽ6<;ÁÅ‹žÎ™—¾»Çú_.9\2;´­ßq˜ÛÕ¼`M? èë•òh¤›ÄËèêaÓô©š/clI#Æ¿ÐÜKŒeŵqØEÆä®aMaxROè»Kázã×Dç( 9ÂÆû @evróÎ1•Ë¥úÀfô~G?ð JdhÏU3|r³†{b«ãöº C3Ñ_)¡¼ s3ŠjgÅAšâ±+Y?Ú™÷${ýá+³âùÿo¤­ÇÄöóÅj¦XäZEWCç‹ÿ3Ù$ƒBo%9±'\V¨Ë€»¾Ê!8~óÎEiðpBOÖ4sˆS°¯²;JM`±¢ß˨€ŸÜƒM‰oFëª2ÛŸºæïŒâú€/«ƒDš‡Š­½Q­ hŒ{îäP>è¶l˜» jA>$8ª>Û¦••}@©s0n]ÉX»Î×q/Ù7oÉBµñŽV®-˜ ¢Ä] :¥sô’+š0å;&tºJ«D:ìWú 2n![ÖñÙ+«êvHñ<`µC6#òxtX$ï8OàmI³üÝ|÷Ñ)Ÿ6}¬ ÐËþÏön:ÆP°÷'Íéé{ü 3Á0ÈÆäqêì,¼%¯mmŽ(»C‘{ûÙ?†.·Ñ6Yï‚VqÊ­3§ûªºX:Ÿ¬V‹4Z/àÞÌR8n†«Ùo´õ~y6-[endstream endobj 264 0 obj << /Type /Page /Contents 265 0 R /Resources 263 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 182 0 R >> endobj 266 0 obj << /D [264 0 R /XYZ 71.731 741.2204 null] >> endobj 69 0 obj << /D [264 0 R /XYZ 71.731 706.3512 null] >> endobj 42 0 obj << /D [264 0 R /XYZ 532.0396 691.2808 null] >> endobj 267 0 obj << /D [264 0 R /XYZ 71.731 670.2196 null] >> endobj 268 0 obj << /D [264 0 R /XYZ 71.731 660.1048 null] >> endobj 269 0 obj << /D [264 0 R /XYZ 71.731 650.1421 null] >> endobj 270 0 obj << /D [264 0 R /XYZ 71.731 621.3466 null] >> endobj 271 0 obj << /D [264 0 R /XYZ 71.731 605.2555 null] >> endobj 272 0 obj << /D [264 0 R /XYZ 71.731 546.4112 null] >> endobj 273 0 obj << /D [264 0 R /XYZ 71.731 504.6328 null] >> endobj 274 0 obj << /D [264 0 R /XYZ 71.731 434.8944 null] >> endobj 275 0 obj << /D [264 0 R /XYZ 71.731 416.9616 null] >> endobj 276 0 obj << /D [264 0 R /XYZ 71.731 371.0687 null] >> endobj 277 0 obj << /D [264 0 R /XYZ 71.731 340.1845 null] >> endobj 278 0 obj << /D [264 0 R /XYZ 71.731 257.4946 null] >> endobj 279 0 obj << /D [264 0 R /XYZ 71.731 226.6104 null] >> endobj 280 0 obj << /D [264 0 R /XYZ 71.731 195.7262 null] >> endobj 263 0 obj << /Font << /F24 54 0 R /F32 62 0 R /F34 66 0 R >> /ProcSet [ /PDF /Text ] >> endobj 283 0 obj << /Length 2323 /Filter /FlateDecode >> stream xÚµZK“Û¸¾ûWLù©JÒê9£Émì±½JÙc'Ö¦Ö•Í"! 1I0è±þ}ApföòA"¿~È‹«9ü[\Ý,f7+øX/fËå|}••¯æW'øÓ‡W »dj×LÃEoö¯~y¿Z_ÝÎn¯—×WûãÕj½mVë œµžmç7Wûü_£»º¦UÎ~ާËÍ|t73Ÿ~3_Þ7›‘¯nF”š7÷_f’‡‹ù”äTHóÀìgÅíÎýxx‘JÖDÀqÎ;ó‘ñZ‹sAáˆêŸ.ÓÅrv»Y¬[-_G‡¾îîÊHQ â¯?×ôx=s縫å¶=çÝORÖµÛøugŠ ‹Ä‘‹’(é’Z9mƪ¬hr{F]fA»ûúv·3_™:ó&â{SOðô›ùˆŽ›ÑOV9žXãb#Ó$ÍGb6ÿ>¸©}øúáÓÇ®üŽ/ɪ“ùJ¬øÍ¡`YqÁ—ËùèÇx¹Vxœî÷÷ölRY쥂¯DäÓŒWúvw®dvóý×=\œP¤ë¿øsS’*å“Ö±Œ¹¦ëä —êk&Xx|¹?ÞÎGö©¼Œ*".‰“¼›f(ÊúPð t´2ñIs¦P'^!¤I½{Û`å"wΨ”\Èç­è{<³ìŒ‚{[9)Á…ötg$Åya52O´¢‚nÈCbÇp‚”$;³ŠNÍ™Ö'P¨¼Éð=â$yIŸ(ÂÌÅA݈šKôÚ×›Q’ö(§!¦Ði¿èز´ÄSR`‚It'`•SìÀù÷I„òÇÖŽ™’´8¢;DjB[yQp ñ£3˜ÞëŽÒ<Îg^äI)Zê9±ƒFK±¾ ¦¨`¤À×H»˜ôÚײ(O{%¼%[‰À€ŒÎE àVe†ùdi1…÷ÖÜße÷ˆNx¢ÃÃûœ‡É^œ­k‘}R?\¬(­ D¼aH`‰ÉË#¶¹!w…ÆAL<Æ@PΧ8]Ž1’*£Ý¤åv"DÑuŠ uÜF!ž|”ŸiЧ֪ʭìÝtàùeàO¨_U¦ÀZZËþóÝ?ÞhäîÆ‹Åb´ß}2¯ß~þòm÷ð!ß`¥fôÃKªŠp,5ì -Þ(S -ÚGêxCk¸œ5¥…B²¦ï+K*2æc¾âUç6zŒõÑ?˜CF¾fj½À€š˜'#:|Au;•yk¥]i·>4q±ù.ÉŸ]m.îDòB{\aʽ†G'8êµÂ¾Ô1wBEwQ„•S?M`¢½ ÍIž#ÒùÐ,P¶ëRÀp§š$MÄ‹¸æ²E™YWp²3©N4J«F|+Ëî鑊y›ˆ ÙÅv„ÒŠ7'›L«¦< €ˆW¦i™’§õy¹{×;QUI3¯ÿjö'h¯Á¨F1d:ÔT9‹$å€@P­»:… [µæÃòÒ“¤Û €  á¹t͕ȫY—ðEÌçßµ;þ¦ëîa¿ÛKáÒ³~+‡<' ¯Ðš½ˆèæã .~J.\îÀr1Ÿ–´xX˜=ýÒ`™‹g[%%<ém`Ñë •œ ú&…VÇQ[2îÑù²ðŽD{#D˜Ã²J"N³‰j1¤v¸EyN£¿ÚŠO÷M»‹øt¶b1é|ÔG%T Ëéñ†dߧω8pÏö¦®ÙèÆÂœ‰jóˆW^ˆ¶1eÎÆŽ—TÂñi3.@m¤Ä¤«Ã³ûgÔ€*SºˆòæhœWørYA"ŸÁ®n(`ƒÝ@m¥•*Ú£Ê!üÁ$À÷Ljw…FP`OÊ R†u•Nn¸)/ÎÒ“ôq”~^àë–dÒ½~Ò5|ÁÝL'p_ë¶öac”ûæôƒHéòxIø¦œÉÀEA…ã³Õêt€SË”›÷jD=°èWC¦Mg¢Ý±Wgµ¼œw»™xªÐí zÑàšoÅ9*u /pKÞDe žd©§Õ³<ó¦À‰Gǘ>G`òÊ{’t¸þ1ßÌÛ²Óò™Â7 Ì#yE@28d1$S )^H»ºÐeUC{ð: D$ÿÉœ·µãŽ'Í™® ÒÅmzøÿ*R ;p¤Îœ’¤ki34ÓÍ€Ÿ¿M¤ÃÎØ³€çJp¤)o6zÿCÜÚ:1Š3ñ'OM)g| KÉ©ndKÔ¾Y; m¯iEÎ9ßÂ_&´OVÅsl}DAÕË4;Îúõ̘°°>ÆæŽÉðTÖNQq&ä4œyß¹)_ U—NrÓ„T÷inB½îqu…ê¶Ó}:]’¹:•\[A¦8âï í¦Šg¼ìך^™Z¥\YRk›Çêt­ž›ðò&w†ö«¥$ëu«Ñô+ÁÎÉÐ9†8wC §ÂPB#ASÐT¡â!Ä \ô‘aÑ$hé~eRç¦ã>Œ†fN´ßvcª%Š®Ó@$‹¨›e’£êuŸ…Û©œ¾¤w¯žcÌrÈՙЇqê,|‹·$»H"•+ë]­ìQ@ä¸cl%j*™~iÄi²›ßE¿qêZƒêälÃM˜°"™ ŽÆZÒËâr€4êì~y&=Rô¥=º—vüß‘jX8øáJãáñJ'æ‡JNÒ²Ëág?ûÆmÁl5Â$è-ÐëÜ{8˽˜î”´äÚ²Ú§Ï÷»÷»·8Çþüð5þáßþT¿Þζ‹ëÛ'ÿÇB°¦ÿ6«Õl>_¬ÜIZŒíà3HÜ÷?òO Úendstream endobj 282 0 obj << /Type /Page /Contents 283 0 R /Resources 281 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 182 0 R >> endobj 284 0 obj << /D [282 0 R /XYZ 71.731 741.2204 null] >> endobj 285 0 obj << /D [282 0 R /XYZ 71.731 676.2989 null] >> endobj 286 0 obj << /D [282 0 R /XYZ 71.731 606.5605 null] >> endobj 287 0 obj << /D [282 0 R /XYZ 71.731 549.7734 null] >> endobj 288 0 obj << /D [282 0 R /XYZ 71.731 533.898 null] >> endobj 289 0 obj << /D [282 0 R /XYZ 71.731 451.208 null] >> endobj 290 0 obj << /D [282 0 R /XYZ 71.731 431.218 null] >> endobj 291 0 obj << /D [282 0 R /XYZ 71.731 413.6588 null] >> endobj 292 0 obj << /D [282 0 R /XYZ 71.731 317.6439 null] >> endobj 293 0 obj << /D [282 0 R /XYZ 71.731 286.7597 null] >> endobj 294 0 obj << /D [282 0 R /XYZ 71.731 178.1669 null] >> endobj 295 0 obj << /D [282 0 R /XYZ 71.731 147.2828 null] >> endobj 281 0 obj << /Font << /F34 66 0 R /F32 62 0 R >> /ProcSet [ /PDF /Text ] >> endobj 298 0 obj << /Length 2443 /Filter /FlateDecode >> stream xÚ¥YãDú}~E4/$RÇøLœ}˜ƒaY„Dƒ´ÚåÁ±+b;¸ìmúßïW®ÓuØn#œ8_÷]mBø/Ú£à˜À#‚8ÓMy{nžà§Oo"²ç0{è›Ç7_LÒÍ)8âÃæñ²IÒ<È’4\i‡ÇÍcõŸí»û5þs·³pû.`ÏO?þÂ>|ÜeÙ¶Û%Ç-BìÍû¶n¨é‹· {õ.QCÐî·Çïß|x”leÉ18å@{–w åà>Ö¸ç2N‡ Éóldþß»( ·íÀظ/ìCÙÞwðž+šŠ}¨0é;|ÞÅávè¹4{ü«­ðÃ0FôW@mQG¤Œí…=û«¡ömh*Ôe Š¥Z"S•ÚÛØà2áßÏí.ʶÿ£ÿCTµ ®}§,JGáïƒÀ•຿œ¡“Õ¨ ÈàlY\Mž{‡JLPý"`21ûûöŒûë«ÉÐ_ë7Oê/’vm¬ð Þœ¹zdNbžØ^’—J¿qNKÍ«-ZËâô-×ŵE»XXOè±%ÑÂó&’2‡žz®à÷<,? ¾+æX†µoáPµ’ye}Ð'Ž›WÈö3°Ç ÍOÙæŸ‚£;'q ½åkט”“d¿ÂÏN’æS² þh 7eá¡6KU»$“—ü‰Ú¸xB¡³PzUÛXAÅtG¸õðE8#}ÿ¢Inê-êŸ)¹/]{3)@$oú·D…—3Ñ0gÆ­.!ÊbTîç+.y ×v¨+C@à©ã„žå'.õîm9ø‰&½pGËßÁm÷2I¨  Šåqd× ‡Øƒ•6IqC–M 2±Ö¬²,}p–;ü„›¢æ†3ˆ~iCÉ#ll!|Â*Ùp¢wÔÝ0¡ V(ó LŽÙ&Ë3è œÑËö:”#zM\Tqßx£×Er9zçY°pS~À"¶+Ã÷Á°æa!C´m¤¥D½þ Š&ªÂóŸÁÛ ? [tˆÜŸÍ‹€ãT®øîñÝi]".7}U*e²}B½ô0U¹…‡Ñž¡WZy—‡Í{Y ß…s±V5Nc¬k³à±Cò©°ü[ö¼ SÖPte5.©Xfð… t¥§Ãñ°&ÔL˜(Êþ·þ0q\&³,X¸) ?CÖÅÉ]–8 ÑÈth;„/‡­÷Ñ‚xqÂHøz’,NA×éi¾'Ñ¡ü=‰„¢ºzï7—ƒä sͲ`á¦,ü™uz$ÊÈÑZ ÖABI¹òHhÚšá¥pt@vÊ’M‚(Œ#_Œ@{ÊS\Tœ~:H®Ðè, î±Ñ¬*Ù†°çÆ*È:2.¼ú4R9ôà;góŽý÷¢”I¯oÍ@ec¿m tioÒ<¢Ã)q[ˆíu(‡…L\T=wy¸õZÉEvÙJólX¸)Ÿ›²*Q¢ñí†*j 1‘—Þ1{û´ø0i×j¾º° Ë{ªÉhªÒPivYS»NZGGåzÕü-)ƒ”7+ŠÝøÕ€ŸÞdkN%{n<¨©†›hÆkNtoÒM³cçY<Ÿtu(Ò•PTQŸüÎç ¹ÂùfY°p»“®R™ì—|^¤ô?ˆLMÇÊ0Ö§´­=zD–øy²'’“[‡þp'\ç[}¤•û-(}ó§ ¤OÃ;6¢,|E«-ñŠéw‰ø¤a´à hÆ!8åê;¿?ØôV¸Ã}³–‰¦5c€Ñ bSXĽñ"Õ–$ ’Tú4̃ô»ƒIíu(ï&®‘y¿ò$Whož·;˜Ôp­ñãU ¾åÓþ[s‰!ç„ÚüµÅ]¤e1ÃቤH×Ù"Õ;¦ •ƒ5B/¨èhàò¯ b‰r~RIÎ |KÉ.ÚòFÞŒÞOF>L*E›•‚b#ìi†8ÅÖL°Å“žÞ‹Ù7`_?+âÿÌ‘7-{*#ÁÚÎD[a'x!í´jN56Se‡´a9ì²ÆÓ™PºÂÒ<2I Ö”;áyJ¥Ž$j,€\c¸¦íŠ"e‡Ï¶ÔËMƒà›jÍ»9³TG#—ç!=&Š6 ŒÇ‡<òd$´×¡éÀÄEõó½7#¹H.g¤LÜ ©Aý3Íäm÷…'„–õôîÅ­¶Â\(·—“s„Þ^e©ví¤oÝ®+r/:‰ÄWyœ=¨o1\ã/ Kf˜¬V ùû¢¯Ø3‹>ò üý\$Wî+Õ1ˆ<%{æ{ “™/ZTJÓ‹”wÌx¸ÉB³ 3s¨É&aU—9‘Yd´JÖ,‡EK" 2ΧIMB‡~×t\áš³,X¸×n(WM»Kç˜ÆÌ¥yk>›#ƒ’z. &lðÄ=ÜΨS‡;‡• Ò©œù¬VÍd§féWŠy(á¾ÓÛI8>M¿Ê‚<ÎÀIDôƒÓ¯8Ð^‡rø•‰kÜVùýÊAr…_Ͳ`á›T£½2í}h*xºæDZ(d —¶:Ë´5þÕ_¸>á¯QQD¾­­,Q h¦Bq ªªýÖ²é­0Ö}3ë+ vH?-×Ç"t¼Óðä°†hu¦†œÖ-ÑCLþ,îFàÆ:¨×Ž9u&æÓë&÷Ñ18%q®>Œuøõ„¸‘éÆ@\Èhúý­èå2{zOL*vaOè¨þð¡¨ñåeª<£mªB\•°wŠŽœF d!4Ø´"6€1,ŽxaÔÀÈq•Ä­_¬Y»¨&fò»²> endobj 299 0 obj << /D [297 0 R /XYZ 71.731 741.2204 null] >> endobj 300 0 obj << /D [297 0 R /XYZ 71.731 753.1756 null] >> endobj 301 0 obj << /D [297 0 R /XYZ 71.731 706.3512 null] >> endobj 302 0 obj << /D [297 0 R /XYZ 71.731 655.3774 null] >> endobj 303 0 obj << /D [297 0 R /XYZ 71.731 650.3961 null] >> endobj 304 0 obj << /D [297 0 R /XYZ 89.6638 629.6388 null] >> endobj 305 0 obj << /D [297 0 R /XYZ 71.731 601.5791 null] >> endobj 306 0 obj << /D [297 0 R /XYZ 89.6638 585.8032 null] >> endobj 307 0 obj << /D [297 0 R /XYZ 71.731 558.1171 null] >> endobj 308 0 obj << /D [297 0 R /XYZ 89.6638 541.9676 null] >> endobj 309 0 obj << /D [297 0 R /XYZ 71.731 539.8108 null] >> endobj 310 0 obj << /D [297 0 R /XYZ 89.6638 524.0349 null] >> endobj 311 0 obj << /D [297 0 R /XYZ 71.731 521.878 null] >> endobj 312 0 obj << /D [297 0 R /XYZ 89.6638 506.1021 null] >> endobj 313 0 obj << /D [297 0 R /XYZ 71.731 503.9453 null] >> endobj 314 0 obj << /D [297 0 R /XYZ 89.6638 488.1693 null] >> endobj 315 0 obj << /D [297 0 R /XYZ 71.731 473.7784 null] >> endobj 316 0 obj << /D [297 0 R /XYZ 89.6638 457.2852 null] >> endobj 317 0 obj << /D [297 0 R /XYZ 71.731 444.2342 null] >> endobj 318 0 obj << /D [297 0 R /XYZ 89.6638 426.401 null] >> endobj 319 0 obj << /D [297 0 R /XYZ 71.731 424.2442 null] >> endobj 320 0 obj << /D [297 0 R /XYZ 89.6638 408.4682 null] >> endobj 321 0 obj << /D [297 0 R /XYZ 71.731 367.4571 null] >> endobj 322 0 obj << /D [297 0 R /XYZ 89.6638 351.6812 null] >> endobj 323 0 obj << /D [297 0 R /XYZ 71.731 310.6701 null] >> endobj 324 0 obj << /D [297 0 R /XYZ 89.6638 294.8941 null] >> endobj 325 0 obj << /D [297 0 R /XYZ 71.731 279.7859 null] >> endobj 326 0 obj << /D [297 0 R /XYZ 89.6638 264.0099 null] >> endobj 327 0 obj << /D [297 0 R /XYZ 71.731 248.9017 null] >> endobj 328 0 obj << /D [297 0 R /XYZ 89.6638 233.1258 null] >> endobj 329 0 obj << /D [297 0 R /XYZ 71.731 230.9689 null] >> endobj 330 0 obj << /D [297 0 R /XYZ 89.6638 215.193 null] >> endobj 331 0 obj << /D [297 0 R /XYZ 71.731 208.0549 null] >> endobj 296 0 obj << /Font << /F34 66 0 R /F32 62 0 R >> /ProcSet [ /PDF /Text ] >> endobj 335 0 obj << /Length 2307 /Filter /FlateDecode >> stream xÚZ[sÛ¸~ϯðø¥ÒŒ¬)Q–fŸœÄñºMìÎFÛN· I¨yQ2Yõ×÷8¸„|éd&$A88—ï|çÈÉÅ þ%×Éôz—E2MÓÙâ"¯ÞÍ.öðêî]‚S®pΕ?éýæÝOŸæ‹‹õt½L—›ÝÅ|±šfóEk-¦«ÙõŦø×èæx¤uÁþ_¥Ùlt3Õ×»‡ßôͧq–øx~=¢T|lò®¢uKZÖÔzè3Ëi-èøß›¿¾»ÝX±²ùõt½‚½Ÿ•ÝΊHŸzÒã—ëåt¾ZeJøŽ“d6j:-FENú†Þè‹ ¹DgmIqÆåm]4\Py"q9уGÞŒ“lôfkõ5oàà¬ú©nÚ«÷úa;Ng£®5›¸UõH³Ó×SÓq}÷¥)سY {€â@WI:]gÉBíp´dD¹°‚oñtßÇi6"œ5.}$¼eT\]í\šJñÿ$Õ±¤x$öЉs¤¿áT®û©Ëœ…ïÚiͺA«÷ÀáÁu·”¢¸ähÔ(ÿ3Š4‡ uìа_²íÇp¾šý×ó0³¼Ýžtí¡áLz¡[í¡_TjµfîksXbuQ„S+xà<]½Å¥ŽD²§ýõ»#JÙè«”#”îÇX.Ï Ñ?.û‰ƒƒ]}ðô†ØŒ¯YÛ‰Qáÿ!Rš½FŒ÷$ ¤ˆX+"“ÙÆÚ‰!@öMÉDÛõ±QDV yq¤žýÈA8{¬K´cSÓg´õ*õÚ·+Â"=%iˆŠ¨òÌŠÖ×¶Ôú\6̲™ JÞtûÎåœÔ{?Â+RPó1|–ظƒ-Ce(L<—ÙvZË >®RrJŠSÌ)X—]A¥‹Lù\òàü0äá;é‹¥­q,YnRÝ‘òŠ —~v¼©ÜzO÷íKt[ˆòdϳ£ÂȬ™Ê¦ý2„ïØE°i0¡yÞ¥‹&P¼ 9Hñ¢OsÔÃ~wB…,섳CUÔàO¸ªtýˆï¨cäÚÕpV?%7¹åmÿƒÄ‘ ú@ð<„F²d†8ñáñËûû‡û‡;Téã‡ß¾Ü>l¾¾!³æMµe5}Ö8?X‹8§bÀXLOÆåKJ„9AWÎíN"S,«á•èÑË£„¥Ç,¨Ù­Xõª@шjRÏâ,ùtqcQöLFÔ*õéSYž ‚ûZ"ª¡”Ä(ü«>—ˆg6D7µ¨Ö]€–@Ìö°?¾¶vBÜîj§ÒÁ 7H ËQ;NFZé»Á¼†=±=¹r«T¢| 7Cô¤Ÿ”åµF[Õ„P /ŸG)o/Ç·ž0ü)µ`Wžz¥E™óæ(¿<…æ‹»´Áª+[ì¤Y+'ålˆñ1Áa|Š y¯ ¥Ü€º¹é‹þ*YÝöÖ¯1a#ÔFrfÁvrÑP{ÅñS¥')wÔ`ÈZ²oJr”FtöÎlj®fß:ÔCEa©Â Öhfø¶ñ(AòÔHo?vç¿§6­ÚLr.'¹|îÖ3÷ŽÉðõSݨ’²žô³-Mb$C½Ô]µ…}2ë2_Œ5ÎÙ™ÿéDërÆ é §ìv®¢P(+OwopÊȪ}ÐrÆ.qèˆ&â{…Z‰ÁÞÔÇþ‰~…,5ÈÒàšx9¾pLÞA¿WO—¿€^~ºÔß±þÖIИ€?¤AHdR¬´ÏË©5}1¿#ÍÏF½è Òט vÑã<¢g­`í›Üx-ŒíûÝ!Ww¿b¹v\~¤€±š}‰Þp£Î”Æš–IüYÉý~Öô2–¡––»}þ|ûasÿøð«äOocq‹9f 0n冉ñŲ´„aXFC£Ï1A§Æƒæ>ëSŽYà<$}pë“>˜â‘>xiZReHô2¤”L¯™Ú )ât6Y]h–ϊΠ$d3FÅ éø  :w…}] 0—‰%,ÎrBc‹IÚû¬SiPí:CI!b˲1íAg7Pf§Á´gS†6r:QK !‘ùn!*ã-ú€è©] êÐaÒÐ:òÅÔyŽ4¸8‚Ä[º~Ø£àPÈŸµKÑ«T\•ì’?Z $gHOh¿ãÜ÷AC_QÞô,±¸WK¸ ’¼‰ušï‡]?§7ãFMáÙ{>õr,¹JÆ‚Ʋ¶ ›«2Wœ*röÀù¼»~̀ܘDèAõF2ƒ»»_oïnT -áU¿ùý~ó Ò‡‡·¿…ÿ6øJnýøëߢ€{cK—#+MM«º|ð\Ún—-gÀa°e!AÈo›ãD¹´‰š r PKÒÒ N¯¤òw#Û;ë¢ÛÝpSû™"˼7‡!q+¥²-Ô…üÕ¶ñî:¸<J–9Tq»jbìHEØdë·¿‡º]Ÿô\Ïä…ŽÓkX‰g9ŒgzÏY^‚,—„U´Ú>³4K¡Ã~ÂT°›]b:ê£éÙï½€k©O’¢uS4ºc&9ÚÖ^¼Ø´Ü]aéfû›‘I·úhâ5b ^s”äžxVeÑ*iK-ˆ ·žôk#¹³ã¶¶Z€÷ÑÅ©â„ç9zü³^¯'ª¬ ª¬?ÊÀPðÓŒpú­cܶÒ×Nk¿ÃÃ\_4/X+ Þ–¸“2³ÞZà%[Þ’º1¤ï}{é/q+ÃG'°g€$lÄ|ëo‡•¯÷Šíd!19£ÿ¿ÈêV¼å§¯Á/D~ƃ·”Tèçà˃îÓ §¯1lÈex\󓛌QW‡õÝ8à”ð—O@<©íÖN¥þÿ|`±š®’åúÙ¿¢ðæ ÿˆ"KWÓY²^Û•¤š’ÙÙ¿}ˆlø?kS$Qendstream endobj 334 0 obj << /Type /Page /Contents 335 0 R /Resources 333 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 332 0 R >> endobj 336 0 obj << /D [334 0 R /XYZ 71.731 741.2204 null] >> endobj 337 0 obj << /D [334 0 R /XYZ 71.731 753.1756 null] >> endobj 338 0 obj << /D [334 0 R /XYZ 71.731 706.3512 null] >> endobj 339 0 obj << /D [334 0 R /XYZ 71.731 580.6576 null] >> endobj 340 0 obj << /D [334 0 R /XYZ 71.731 549.7734 null] >> endobj 341 0 obj << /D [334 0 R /XYZ 71.731 533.898 null] >> endobj 342 0 obj << /D [334 0 R /XYZ 71.731 477.1109 null] >> endobj 343 0 obj << /D [334 0 R /XYZ 71.731 407.3724 null] >> endobj 344 0 obj << /D [334 0 R /XYZ 71.731 363.5368 null] >> endobj 345 0 obj << /D [334 0 R /XYZ 71.731 345.6041 null] >> endobj 346 0 obj << /D [334 0 R /XYZ 71.731 299.7112 null] >> endobj 347 0 obj << /D [334 0 R /XYZ 71.731 255.8755 null] >> endobj 348 0 obj << /D [334 0 R /XYZ 71.731 240.0001 null] >> endobj 349 0 obj << /D [334 0 R /XYZ 71.731 168.2043 null] >> endobj 333 0 obj << /Font << /F34 66 0 R /F32 62 0 R >> /ProcSet [ /PDF /Text ] >> endobj 352 0 obj << /Length 1831 /Filter /FlateDecode >> stream xÚµYMoÛ8½çW9Ù€£Xþv{J»NëEš±S Øî–h›[}­HÅͿߑȡ$Šv”‹É9óøæÍ åvðçvf®3Áeì:Ãá`Üñ‹Ag?}¸pÕ+5æª:èÝæâúv4î,œÅt8ílvÑxîLFã Ì5væƒYgãÿÕ½Iùìgïj8toyýpÿ(ÿ¹íM&Ý´7šu)•Oþˆ½,¤‘ ‚Å‘|tÇ<qÚû{óçÅr£ÍšŒfÎbkŸµ]²X?¬X¯|œ.¦Îh>ŸÆÏ•¹›‡›ûõÝMÏuÝîfõù>·f¿raêÑP:ºéÀñ b9ãòêÅg>M©/ü`‘zïä5Œ}ö}0zÅ$}ùÇòúgjy–ÿøŒ‹”m{ÃA7 @QÁë“‹ƒ±¼Ë"°Ì!hríæÐYL\ ÎÅ©Wº9V8=Ð$ ‹öòvõƃîSo8é’”\o-_UÆ™8œ2<¥ÿf,¥êŽ'Ôc$7 È8×&ìÒ8Ô>°aOz.à–²ýA-~ˆð–÷ë¾ ßާÀf‘dþ‹(ó8Tcbe ‚W”GÄ÷Y ±ˆŠÁ)!O=wÒ¿¬›.CÇôöcÔ–~ÒÃdg± HL00’å¦qnõ†‰‰> ýuøí0,£}ÀøÁFÜ B/XçèÍ’$"h0¾Atð‘}JiI[*Ž”Ff,™¸Èoå…¹³»-ûª¼èÿÆG†ŒMRšD²„N]ùæÅ‚ TÉåçÕ}.ƒç•ò¥¢XÔ£¶7tû¥,îªx¶ j~b¬YÑ®{4wû§GuOxõ9xÎyð|Šª;\°¦žgwDÁtåS©‰c° UB¢-î¯Ãâ—¡ÀxÊÇÌïD- A2‡ÀeDíÙgyæžá‚ÈÊœB„¹4Kø}ŒsÎý ‚æz¥,KH*&†ãA¡u ¹ýr4f²r _£ /Ì‘öõÍt¢•¨ýF›˜if7í«$+µ‡¼LÀŒ~½bÌ®HWžy () ¦¼î24É‹Ã$Ñ÷¨5¤ÝÚ…ÛÇÍãÃRe÷å×Õbz-o?ߪ°ÿ¸ROîVï—÷륵:BÞݦXè­ã8æä&)þ–έÔòä,GÅŠ Z+A tŠqìlF4«Ð´EõYò²ó‚I¼(5 üU‚gPšäêX÷É¢ ›Û€†¼hP {4ÕÆ±?‘¼¹¾>‹}uöQæÀ+î¼»¿F èN\;6‚-‰÷r¤–EõÙWd"2󼀚6öéÒ¶±H”…[€º,ÎÝE1›Wú:àuíC*Ñìeùî['׳½Uéu©KÓj2‚®2ᥙ€`hc±&}C%­§lJš¥á.)ôZ£щÈÂ/`’¬‘1s³2–ä'Q3Þm޹Èey« A¥\¸ê÷Ád 3ŽFª¥d'`€«æx6 )„ʆ—´´'ý÷WÛW`¶{®yŠûç‰×?ÕVy‡8F^"à«Ö*ƒÿèViÊš?UñR–ŒÓ³A©KʲfòÕþpÛ"›Þðn773$­¶ïg‚÷‰FP<ˆ°u}ºBm£µfkT·C—› &¨| … Õ°´úzºZu Œ€[…Ñ?ÇÁ;Ñ<a"À¬JöôMnJqj4wÓé8?5*Îf«¡ëLÝù¢°î}Ó”œŠ^I·oË›l¯GPI=ª;Ù<}ZªpýbœqèT ¥. Ït ¶@¹Fž©NÂàÿÊÃ!ð|2Õ‡~­ÂRV-šÇj¤»Žk¨´ÕeC~#ÌßVN«,žë[ñl©æíÝj½Á:z¹R<ج6wËu¿q@VšGâê½ìI« ¸éͰ'Öš»Íî®±Â;âýxy –å°ïm¥­6SºãŸP‘ÚY$P+[5öòU ¼ttˆ—ÃWãUíÅLzF:£¸#ú¥ÐbqVîGË9..(1N”9yÖ;r<0¬’ã5Pž™‹”UƒEƒ[xÞŽ¦^7Á9ï/#T.ß"%䌕mã'2RúŠÀ±Ö J¥6%†b:±HWhh»ìyñPONO ³§FË $'òQkå1IÂR>Þ”ðjEŽÙ\£Ú4°¡SI"¥wP÷AÔí€RÞÐãúy_yêAø©¤óF4Ep¾§d¶„ƒ´ø¤ ç2™Y½ìNáU“óc•ú¼4ž;swº8û•­2¦ù‘m2œ;w±Ð3Ç5îÉoc–ÿß¾†¶endstream endobj 351 0 obj << /Type /Page /Contents 352 0 R /Resources 350 0 R /MediaBox [0 0 609.7136 789.0411] /Parent 332 0 R >> endobj 353 0 obj << /D [351 0 R /XYZ 71.731 741.2204 null] >> endobj 354 0 obj << /D [351 0 R /XYZ 71.731 706.3512 null] >> endobj 355 0 obj << /D [351 0 R /XYZ 71.731 606.5605 null] >> endobj 356 0 obj << /D [351 0 R /XYZ 71.731 590.5654 null] >> endobj 357 0 obj << /D [351 0 R /XYZ 71.731 531.8407 null] >> endobj 358 0 obj << /D [351 0 R /XYZ 71.731 515.9652 null] >> endobj 359 0 obj << /D [351 0 R /XYZ 179.3565 477.2104 null] >> endobj 360 0 obj << /D [351 0 R /XYZ 71.731 470.0723 null] >> endobj 361 0 obj << /D [351 0 R /XYZ 71.731 400.3338 null] >> endobj 362 0 obj << /D [351 0 R /XYZ 71.731 382.4011 null] >> endobj 363 0 obj << /D [351 0 R /XYZ 71.731 356.4982 null] >> endobj 364 0 obj << /D [351 0 R /XYZ 71.731 346.5356 null] >> endobj 365 0 obj << /D [351 0 R /XYZ 71.731 295.1448 null] >> endobj 366 0 obj << /D [351 0 R /XYZ 71.731 253.1508 null] >> endobj 350 0 obj << /Font << /F34 66 0 R /F32 62 0 R >> /ProcSet [ /PDF /Text ] >> endobj 367 0 obj << /Type /Encoding /Differences [ 0 /.notdef 1/dotaccent/fi/fl/fraction/hungarumlaut/Lslash/lslash/ogonek/ring 10/.notdef 11/breve/minus 13/.notdef 14/Zcaron/zcaron/caron/dotlessi/dotlessj/ff/ffi/ffl/notequal/infinity/lessequal/greaterequal/partialdiff/summation/product/pi/grave/quotesingle/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde 127/.notdef 128/Euro/integral/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft/OE/Omega/radical/approxequal 144/.notdef 147/quotedblleft/quotedblright/bullet/endash/emdash/tilde/trademark/scaron/guilsinglright/oe/Delta/lozenge/Ydieresis 160/.notdef 161/exclamdown/cent/sterling/currency/yen/brokenbar/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis] >> endobj 163 0 obj << /Length1 1166 /Length2 6880 /Length3 544 /Length 7692 /Filter /FlateDecode >> stream xÚíyg<\kû®(щ’uˆ.½†è½ŽN0Œ6ÌŒ5ºè¢÷^¢DÞ;Ñ[t&Q" ¢‡8²÷¿û¼û}ϧóíüÎZÖóÜ×½®û¾¯çZŸ3ƒˆKÚf Q€9#¹x¹b ¨“¥vVãÒØºî‚‚`ÿ;ðï;<^^€5Ô °„ØÞÃßìwaˆÍŸ{u0õ˜¹@^ð÷ý¯Õ‹»µ†9;zý®v‚xeA²Zšœÿœý_Y22°;J.^aŸˆàSîEùÿÉø/-þÒá¨ú?}ÿ¦Tv¶DÿçNÇ¿Fr‡ÀwÞ°ýacvÀ¿ókÀP+€íoë˜w®¹{ðþWKýþ_õÏ nŽŽ¨Âö§€;=5ÀoEÁðÿH;A½þË ÿL4€üéþÿ2ìµ’v¶uü—LP„Ôb­EZÙýi—¿T¶þã;„hÁÐß_2€‹W÷˜®ÔÊÁ‚@ÜÅÄÙú%å­`ÖPg[yçJ0Üú_ß°•~'Ït÷î_{è]ƒˆ'Ä oif%l_ÜvQ#MíÁõé¯ÞÙ­½^´ã½mnô J‡2j¼S‘7YrZ£v’U&ê÷Bã¨å£…=DeÚ¹±IÉBHÑ•"¨¸ë$4ÄqØ&€½Tñ¯)Sröd½”¾3Tœ1KÊŽ“‚Baýi/Œwv]5ïSÓUTâjîγ‹>º ú¦©äè§-vv¸Ch–‚¯ÒÙ8uɪbŒßxpNVÙNj17ß'C(è?ªˆ‡¬=´¤6*ëï仲+oµ¹ªv)Táá²ü´¿Õ¸`·Óðz©ÓÁä~bi´>Æœ~ÊùQ³­6Õ¦®@Ó¹^û±tüvïŠN´¡Åw¹]ÂÓó Z¹£E’ßuÈc€½ +æ›bIœéÔÑ‹ÿ ×ÒQpW¬ÞŒÊr—ªBµÀG3Eôì¾™têöxm)šZ ìJÎð˳D}âÁåmˆr$4Јññ͆ó4&ʶ—ïú)í˜èß¶@‚pŸŽ»ë‰c*áb#÷á2¤ ÷ÄÜ >©ëœB}SWt9Á¢?’Õ‡/Ò *Œ·†±I‡)åaí!nóƒ’˜ϻ~öõ›’}ÓÇŸä~o æL§FðÆç=÷´ÐäyšRõ¢˜~‚©7[j½¥KýóxIEò›¨¤Ñiû\~ù„ ÙË b³X½‡Úè RÉ~›ê¤jÿ³ÂŸÚØ9­O…~a· ³O[‘9}CŒÀðñÓRžwܸ?pÏõã0…‹-q=±û!ïAobšT¨Eç\ChB5‰9s9ÿ;-¸21¿Y¦,Âçñ4êyMsvÄPصåM¶ø©†I·Á"•y› 4ÐO=ÀºàfòØ¿2ˆ¹øÇþFQ1r·Ú¤m kÂü}VÔÆÖ§_~Ìá—R†’<Îsò~qÍè5<Úsª9øE2ñŸÃNJòqFÌ?䈿‘Qäåþ(âz6~3ª»!.´ì«›%ƒ1à[êÁÁƒàx¸fû‚´'zPo{ò¡½‡Ï)9 G+J˜c4eá•Ùfq܇O²õ]›{Â2û©ïGÆp¯û¦Ìf†e¾£“\ù¶‘|ÍÒë$ð(GúÕV=­ãêÖ%ØÚŠç:ÓÍ\Ni½<ü(“Y6dÕÈ.¢KXÜ—^¾ ìÓNÕõ7xf­´‚Ûé<õ§â€£ uŸ’£½îÞë§¡W»'\qóiCèÑÒOyhb[‘ê~ÏX¾b,jûB7ßN; .¤ªxI“m…‚|Éb4Õ*>q|¤»AÊ»ïSI„hÝìx\RéT,¶1xZ`Q$^§c7Gjê&¿4—£ÍzX™¬Rìt8}ÅSùt$¨‹Ðb M&$;µqî–6„Çàç¯FZe²m”ìGuZÄ.¬{ 6¬îc õÎ_»PøRe—UbÁ¶©óyοð#Üuz ÆPê7"Ý¥.Õ‚Nû0úË ÝüÄw’o´¥:3^ÍE“š½‹>JÒóÀfiÂáVã¿”Ëvš¿È9†0¼ÙìE¦F}ý5ÙkPæ`^‚~ªSزw†‹éÛPqÁ‡ñ4ïÒYc=#0îòö*rjþU–Ïi“b]†÷1ðÉ$W‚ÌD ˆŸ}dÌËq[•ÑŸl”lJ"7x±Ç‚6ÙRÆZÑýªH„™nkBá× ‡¨¬·Ž–Y£¼gš®_|Ï‹ÐÃþ¸…ŸÙÚ™!ýmkÀ)Ó¥Ü~󾆈å„ZªvsJ¶'mVG´æ_Áßx†E?Íì[›`rºnG=—?;{eI—Íçj‰-8<ØMÃ`3–9ðd£<$°Tìc¨NÿV‘œŸ‘"Æ‚®ŠLiêÆ?´úEGÒOcÀ«NSwW ‡“Ž h{ ´¹'sì‚ÖTðgVÙH!‡ ’y¢Ó;Ê\ c˜=(pЫuÙÂ΋‰£`´*A‰b}?G÷¾¼ç½€0£'£×–¡gòüf:XØ/è­ržû.Á”Í„EB`§¤_S™âJcîJÛ¤õàÉ wgzÏm˜„ÅízÃøv,·MB §¦\4ÚV!¡+znY¥SµåÓêÀà{àœ‡ëSd¦ð³X뇔Dd{Œú4Íær©= ß÷?7"š§4½h¨'x&R'Ŧ9ü­]z_1–«¾<ÿ§çûÈñ&8÷éñ«ˆË‘¥‰ºÑ ¸TžÒCÉq?8(ðÆ¨˜õqw%y‡k­A=ç<³:nv®Íúë1ÞG¼©ºyBŸUc˜iêä×tÇG$µ²G_3ݶï÷Žÿ ¢5Ø ÂÛOû…&¬Õ$÷]‰D†LàÃ[ìJ¡ÛšsOШ¸TŠ›m¼®ËWU}‰ NÐ\¦wÖóÛR@r§Á–ö┾™Äß®F´FZoW$Áym¿Ì՛ϟ/ÛOܤ4®gN*Z*¢_ËWMMÔ§ù“KŸ°Ø­)6F0ÑØ <<Ñ "óño "4»V&Và þÁ÷óÛn‹µã—†*'¯3­½ó‰pKÔ~˜Ë>„‡z¥ ¡½H'ŒÐè‚gyKeЋŸÿ”+Ò`D²ïñ˜"µÞMÐÖp­`I©­ýî®ÖµV’™tûfõøŠ;4T‰èƒô·ñêwë8t{·cÕ&[ íäé¬'E{€Åe×¹ÂÕö/Û#1¦™òc°#t‹3=¥¯¯MG6¾[[«™/çT®é`‡¸=ª¸5O>¦âtJ°Ç­¦l¡±‰òh)¹G½?é9%½&_z‹žÃtLÞ{MÑëüˆÙÓçÂy!8¡—µ[‰KfåÇd"üb°íÄûy†œ¥oÞ“´ÜÐF{˜6Vò»Ìµë{%}ÑM˜Tû´¯ºŽ¢ëý}IÎO*Ñ‹u¤D´?ço;Ó~ãY³ÇôŽæÙPb¤^¡ÉñÇYi8h ŸÞgÜñÈ&é0Èñ…âÛ« ú\Z…YŸLo¯ø©–Òb ë·f]õ+Ü…’/¯‹0h¶c¼lh7Î[_§“Ò}s¼ÿžP¯…òm˳Ò+ùƒÅÌAêéV‡L”_Áó5 Mö«÷_8k9×! ÔÓ'îàW檾]!»±Š!")Ñ`õåïìtªcÔ-òfžY/ÜÃ;™Ûµvj"º(›í²gÈÔ Íì§Ë˜/2÷uÞnS éÝù y `Ò"‰Jà:Ù®­™;†tÈw¢êÀ©ðÓ[¬_¼CØG*P Fca\ùÔ´n6‘ΨÅ0âÇ!Û9ÌÀ(«Ç?{GC¶gK™xc…²ñŒ]ý+>w„)ɆX2VÄëïØ¯%æ(cèNù• “I¥¨Ð^/ (ñJm~Åć= °‚ðKK+Î?|ƒˆ ðЭYž*f»öN _͹:šÞÚ÷¹jE·äÕias <],O¬ª@²û)æó—y*÷:„¢¥éÚ~²×F# `ql}ÏzÕ¶BQ¹Vù¬˜ ©Lú}2¹À¯ ÖÐÑ#öïMœ×1"œ_corÜpvÝ7¦Ù³Œ;Ð=äºSÒÔgú +êÉ9ªÆ›?‰øà2ñØ~|W6æ­QK„b?%ÿ~AhWø+Ö@<Þ`€0MËúÑŒýE@D¢¡iõïÔÕtùNÇÓû§W j :þÇéQX|ûY#X8®«‘¼ÍÎù*×ÂçÜAÚ—ø®vW´G.fexØh®ñˆbú@™›*4:æ¹Rž}šb³ùe'ŠxB‰•áÏíª?*X¼×'›h¡(†‹ r³!ŸÏ " ® \ÀË¢2’bö3‰k¹kHkõÕ·ûÑ9|tõØh‘)F[#âÚÏõvrk5ßó¿ÉÓÆ¿e¢jM{‘¹Ïfìîv™1^hßD¥SáeIÜ_Õ_2X¹·9s¾ª(Vì”á¦‘àŒ£íÇBh‰NF'¸û8!É’ÎjÂ7‹c}5y°.øYÑt×Е½ƒ§yRçïÇKMØŽD¹S±‹G4쫹×öð”\|ö…Ï 5¬ô)&©¢üÔôüpó^&•ùøa•k¸Ø=s••¦ø1þô±–QÛ8JTÄlÚö¸ˆ‚+êƒÎ,“w:-Ƨ« Ë1Ÿªì¡2r"/ç¦n%D´’f'ÓïVÄ©ÑZ®ó Ô¥Û£bË»kœud"oÈýSº¸9)"BN±Iw0•†ñ¡2L­Ñ‡-\½ m Iñ¹\¢77èÊp1Ï{Ù!ø:àL¡4¿--ݶķ­Tè™ß®~Ôÿ•+¶ÇŰ¯‰êGó÷*e¸Tóâ\&ôR*}3˜²‡öŸ@ª|@]ÉP$º™˜-Ð Û.L–„äRÌÃNñDrû-îUqXLJõú÷q²oÖšg°|tä,æ4ó⦎s<š¼JDVŸ†‰À&3B6µô¦Q ´NF!o0\•¸ê×H‹ÖDêø¢Q7éŸSœmB×btؤb’`p®5WÀjüú>ä‚£EfZF˜ ô©»†Õ0ý¤8êPÐZ¼ B̽6”ÄC˜éçðQ…gÃg(_eÐ`úsë_ÅòÍ—YσRl¿ƒ®Ã>=Vbo}:*˜Aö‡Îô¯5‘&÷ °¼ÛÌ8]³:ŽÃl¿ð®óp^î0%\Ürõ2'Âòx¶Ckãñ­{¤¯…Ñm͹»3ƒu=Å$¶ð²'-b‚±÷>òóðM§yq’ü(ƒþ“\º×}¶as 7ù£2 ¢yÔÉé3Íp]Î]–wJ“›+”½Y³íCª‘Û Ìæ Âø½MÁýÄ¢ ®ØÁMæ]Õµ”Ó×üj^œ¶SÅb¼f¾”ÎÒÊL*UUéˆêÇK&“hà"ïWkÊÒG?¾‡…Δü‹ÍšøFlDÃAD„}–Œµ³¨ur^ÑÐ^‡+¹ `½DF‹—æ+²Çñ+â§M°&±2ΰæpÝNA’ï̧¯M»µdOñäåýÝi°„)>Ñ/jìßç䮵Sñç“¢Ý:£ŒýÅ1²+ ‘£ºW;+»êäG’\ ø„`fãYJƒû~Ï#A+r«d)-5+¤Œ#­†6Ĉ†CQ=?èž5%«µa/2k¼ikÌ•º8¡ùäœ"'#Þžû44µÊ´UÕØ‡i<‡ŠùÃ&™ƒQd˜5 ¥[¡òMCPŽ.ìµBokƒ\í½¾Ëí·98ʶQÚ“Ø"’ %æšåA—;G«¢tÆúûî˜c–«»Ç0Ä…ª~íîó»<+&ü’­ä`?ÃFªïÖj¶­MµN-ñrjrÊ«jkA*ä6/r«1jBû4 »úñå…VøæpX°­†’ü¥¬?y €`Y8¶<ós'ÅÔš£—E‹ºaªh°$ŸûKÎÇ­ÂÍÊ{§S!†ù¥–…g­/Æ"f¨ûc´Ì$hFT¬Ð_vPLææÝð¢<šƒdôh¤ÌP–{䣩q…vº>@€4Xb.#2O _òt@åÈhüë=^1*ßlðÅÜ÷æa…Ïþäåi /S;Q ‘ïì’"±¶$d]ToJR7BÞc·ÅéR8ßR›²¡çp7³†äñÅtWQ­~û”‹¦Údí*† Æåw™x¤â(Å}9÷}täì¼gßg8]«‹Þº?ÖÉ[é÷ë[`¾²@ŸTíÌ(¶Szðb/gÛEtøRX´^±´ŠgBLk±”à‘Ï:Žè‹A¿½C'©›Ô,jgQ5WÛ‹ß2ÙuJx³/z‰‰Í†û G2^?šƒ¤ì|°IJü0Û´Lz¾|ÉTbŠÀ™ë‹¦O’׊È:(îûFÁ;÷³­E åAÀ’Ëãâ€9m``xñáðìçϹ%cw¶si–Hñ­Ã-ݱM]ö×3¹]„ûDE562–’H^M?ÞïP¾Èâoõx†óÚ¨YZœ¶—±¼(ïnîr•œŠ4¤Ü~r¤a±7ËqçT'T`÷éj%˜á@úg…òu ZK9×°E Œã¹… É‘™Óøµÿ½d )6‹QãrÉ»ÞÛxþÅñǯa› aØÁ,éóÓnÔM[È€‘+Vÿ}Zщæ`\ÔËýj¹“ ‡†ž¹ý_s_):ø©* ïSóáõîé 9rj ö狳°ÁO[s”VF›pçÜÏâžÛ™^2S8$ÄD0,9GÚxèëÄ+ö£3´ ücls5kÉæÊù2+§ÍÏè4Ž‚g‚àælôûØ iž†a7Ⱦ:ªü˜Õ‡ú¢“ 2êýUUIêY¿‘© Ž•ÈçÜ 6,9ÿ‚®Å4XX=’ZêÒ¥ßùúfµ?1œ¨þŽêÑ·|Ø(kFÆ^}üœÑ¬“o¬)!”ß®g|½®NøµpoÖy¤ÄbTòÜg4ŽVx¹X¿Î³ˆ3´s{äóM]3ƒ_»x‘C¡€ÿ¡ÊžyèÁ­Æ«9^e‡Jv¨2§,a£í«·Ì£† § Mˆ•2)Çࡨ̥̄ËüPÜjeöL"êGãÐÂÕJl xp|—‡©úE½Ö[ª›SðVK<ö·?Yç¹[¾³_ÄX”v}Ä¢TK]-ƒ€ÿ—Þÿ'ø‚Àʆ#aN`¸ž‚@Âà¿ÿÈãý/MCÉendstream endobj 164 0 obj << /Type /Font /Subtype /Type1 /Encoding 367 0 R /FirstChar 2 /LastChar 121 /Widths 368 0 R /BaseFont /GCSCPO+NimbusSanL-Regu /FontDescriptor 162 0 R >> endobj 162 0 obj << /Ascent 712 /CapHeight 712 /Descent -213 /FontName /GCSCPO+NimbusSanL-Regu /ItalicAngle 0 /StemV 85 /XHeight 523 /FontBBox [-174 -285 1001 953] /Flags 4 /CharSet (/fi/quoteright/parenleft/parenright/comma/hyphen/period/slash/zero/one/two/three/four/seven/B/D/F/G/I/N/P/S/U/a/b/c/d/e/f/g/h/i/k/l/m/n/o/p/r/s/t/u/v/w/y) /FontFile 163 0 R >> endobj 368 0 obj [500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 222 333 333 0 0 278 333 278 278 556 556 556 556 556 0 0 556 0 0 0 0 0 0 0 0 0 0 667 0 722 0 611 778 0 278 0 0 0 0 722 0 667 0 0 667 0 722 0 0 0 0 0 0 0 0 0 0 0 556 556 500 556 556 278 556 556 222 0 500 222 833 556 556 556 0 333 500 278 556 500 722 0 500 ] endobj 144 0 obj << /Length1 1606 /Length2 9645 /Length3 532 /Length 10499 /Filter /FlateDecode >> stream xÚíwePœ]—-Áƒ»KãNÐàÁÝÝ¡i‚÷àî’à'¸»[ ¸nËû~3óM}w~Í̯[÷©zªž³÷>k¯½×>§«h4´9$-¡æ 9¨Œƒ›“K ¶7wuQ…:¨pHA!–€#?ƒ´3Cd€00@d YxxÜBBBh i¨£§3ØÚ`ÖÕÒgaccÿ§å¯€¹ç¿{^vº€­Œ/n ÔÑä{øooÔ0À ¤Õ5 ÕäÌòjºyÈh¸šCÀ°ÈÁİ‚: ÿX, –à¿Jsá|Á’t.Ž ðË6‡Èñ/;Àälvqyù€]ÖÎ@ØK`PØÁâjù»ôoBŽÎЗûß ˜Ôæbá v„^²jÈÈýƒ'Ìû+· øÅ €Z½DZB-\ÿ*éoß Ì‹;¸` Ø_¹ÌAK°‹#èù’ûÌÑü7 W°ƒõ?°œAÖ@gKÈÅåæû¯îü³NÀªèèñü{7ôï¨ÿà†¹€ VœhÜ^€ à­ 7@P€Û÷¿Èö7 ÷?ת@˜3Ø`üR2÷ß…ÿÛûϕɿÀÈ:X@-ÿšmÐÁòe°þÃð—ÛÂÕÙùEÏ¿ÏúKÁÿ¾þ{ÄA ÚÒ<ÔB$Ø65# VMœÓ?*cÜÝÉÐâXR§S˜ï_ íðK [úböXÂY?.üÔì9wèøg[‰ug°“ÂÔ‘ ú•GáKÇÒ•»ÊØ*À¶øÆ´3íH?ÊûtVå'¢Ñ[.½QM-ÓâGdÊñV^gÔÓ:·|úkG¬)µ±„m8õpxÕ‡GŒ‰û7×L½Cý}¿‘º¶ÉÙ²c_3ˆ¸!b2Fú;e“‹é~ñgÛM…IqYwô+ ^½] ãYýÒïîû‹ø|_R}ªÙOãzlçìØ•8ÕéO֛кPoÅØNs^Ñú‡@>ñÔUéðÅ2/ξ˜Gn*†Õ|u´¢[xtVWnô+ZÏÞu´èzÉÆk)…‘OÜÁpí§áj2?ë8ê2CTß=N›kâü®t£ÇñüÞ•&ô5™½Ÿ?“°Ú6wð)†Æú7mš¢4Ðgõ÷÷ }FòNϧâ6y]÷¾ëà Ù¶è+i­}ÖÝ:m³ßwoÍg´*·EáÆ:¦ ÜŒñ L€ _j„kž£Œ½%3ïªbÄœ_mì‹ê›òâøüÓh"ÙAºUo­EWvE™fÏ6‚ž–kà¸k~ñ6ë s’û[ ©}Þí¡<}B¡ZÓ×ËÅô9Ë'÷½ÄI³:¥½ÔVĉCGÝM‚UûÑ[ ýh£ õgŠ8ŠÊÖ{mûYm <ìǯ”'ð3®LçãS×ÈœÍHZšçUeU©Úò/BË)ŠK œ"Ô?‚ÉRúá5ƒëxèâ¶gžü)º¢¿ÞÎõžeVפîî™K“’ÝòNZ‰ci[c~Ls˜÷y²J+Þ 0ä©`b½ Ìä\àšIŒJˆ¦ØO¿ÁM8Æ“¦ãJ,¿×y.ŠUª?觃ßI½|ŽêaW势)°ÇŒ”´Ÿ±w·ã"`© œà zàâæ©Œ{2mVÑœ¹À1•c—ìm}ü#ã#°"kòU›[Wû¢¯ç»± Öô‚<‚Û/Ž“sÞ¯O#Ëg-Ò¬Iº²Ì*·™Ìú>·ˆ~ÜfÁÆ ¬ÛF-*<Ì'°íχET)!….ÅÁ+Þ ·]²Ÿ·N(áÉ Û-ò‘Ín]p…üÑqÇbh—#Y"*À@U¦Oøàþ…€(Iþ×ÏÓ†3Q_mÐøÞOR9湇CÈ•=¶¶\CC×2åâ"y˜¿·~FCîàuæénCÅB½ãåzÁªa¿4½Öñ1bôA€šüÚe‘èûâûìøÅü(§œDL,âyžÛq˜M+–Ÿˆ¡óÓi^fë†3³‰Áát»Ø>Ö÷¶¥È ŸÓFé”û ¦&Dˆ=:»²OÂÊ%!V~cÄö… 3d9v»¿åfË~x\’Þ7í¨J‚2é_û‡}Ï·»*axÒƒ7¡ž8!8²žÂRÄ¡ )»²ðóÚ:…êéuù‚Ëq?Yå–©p9!ØÐDumx)³›v"ª8C[F׮ǘðp†ÃP¡·Gà6bíô5SÜK¨é€V{þQŸ-gàVï¢QT’¢±Ã]SÔÚ‡üÆ=­a6™@©ù·”û“µïȸWÒ8ýý^ý>$QB„gÊhùiì IGjÆíø>2üìfƒp4oϳóÍcžƒfšf}Íf¾‡;™ g::ƒ::G›b˜¨ ub”æ‚Æ`føAµ/Y­[Úò¾·‹úMÈz³UŒ` Ja]³EÏú½îâJðiq¦A0류þ ‰b좩WÚa£”X¹>ÿ0%¼'¹L}kfú»éɽGZ%Œ¯ÝS˜ŒñŸÊžÅÓÜ4o%Rìêy$2•{rê±ô º×#x*ïá#ß‹l¦ìUh_IîšÎŒ ‚•©NK¶Ë…µßVÌð –mµ¨/ÉǬKîã¢6°ìã˜ÇU\<è›ñ™ojåÇÁ§KOào1¤b›DÒ¤OS©ƒž¨só %Ó¿%¬w:öçÖn%ë±¹q<­aöÆÂï»E&ŸkÕ\H•‚lk²G›—Ó'™§cùá~vߨjQ2l%ˆc ü©y¸¶ÇP}uúðõ*·á5ÂG9¥&¢BeCtf"Xû ¼² M窻º°Š7Qßs–&tËtSòG»÷'ã=`0ÙÕ6h//ëbíS³«™ 3dUüKìâœy˜]ýìÄ‚Ö0»Ú{§B'è¥ÄÊx—;N¸nfÊzò9cQ]Êܰpú{<îzyt#•8Oª„Õ/ÚQÌX]`“å˜FóöüÑå7¦FËæŽöJgIk.|[T‘•—ž9×1+- ‡~»}"œŒvP$½Ù4ºyn—^Ðí»}UÁLIXU6ý­Q¤ûªí&Í4A­™¤ÜÔ|§@C‚Yƒ"‘îäk•lŒBc7F.*(œãÕÔ¾×€oâ5U]É6ѳì[Jjé—Ñ(3Gåi!5UCu<§Øœ‹¤N`O¤Z¥»&UÖl µÍn–™×¸ÅN,ܲ·šÁ1Œ$7zHÙFÕA'c9j“Ý\ó»™oi‹Ô¶XtrÊJâ/³˜Ts+‚‹šê3‚ß§ZÝ%ÔJh›çmbnÜ‹!iUFÄbé¯LæhÔä‹mHù`@Ö¯û4ìÕhé°v1Ét(a?ô¤ öŒõðâ·á/nÆ’­}uePÍ´E•p‹Ùrчؾ'˨¿Å›öüÑ´qÞy‡("¡Ï°€žnιnZ8”),¾S"wf…'cA9ïOª¬s\¡ÉŸž>Ke\¾ÕŸo~bKÅ,n€¼v ö›r%íü0“°*ñdO«a:еÖUôÿVÛ¥ÔE;ÃSW³Ú­n,Óë:, SÙÂ÷Gâ]V:ñû  Çö¸©œmßµO0i5qŒ^04,„ D¢ÜÑ,T½ ¡ÅÊŽ«ÕRpfä/AµK3Îa™çý2íª9ç=·´èÝ0™²aÆUôÄÏ÷tòb&”¯E.qשØü‹š"³.Ÿøg\¨?¶ÞÔ:¤ܸ£¥-wîYç‹óoìÌ;²$—ò“Ÿ¤ýô{ª®\2ªˆ¶s9~N‰ï¥dPì+p¾‹o€¶VJQ¢ˆnÚÍðùë9¼Õ1ùB^-%Êçú!¬‚>40W×”…öä[ ë)¶¢¨ÖkswÕÀ¸õª ùU|\ÆŽÈð]æ§Ì¸óÆI³Yø7ÃKËyþîks¨âTý‰Ö²ü!Œ»VY‡% ŸöÄ™¶QQÞ©à¨ð0 \xÕ¿òø¬Ä,ïrbÂçANAbé¡Í±ðä†_ST?ÙnìÿêH,ùS›_ NÔS:ä+='¥åð Ñ þO„¡ýáB­ûmû±ªìÇRRYM¤ëÍ]4zc!!IS×5ÇJäø—˜âÑÀ¬Fã–f IÙ–¾Ëf-¹ùÐ)üV¸”–þ ¥éµªó÷˳"Ç^•S×-K–¤~?ìR…Xjô¹´>«#Ô>qg}¿éÚ³{'q¥mb{¼X‡}Å%ÌúHp—ò|–¨4Ù/W¯E6ãÿRˆžÛÜ« ´Äáj[DÜïk«‹Óe1ðàÍI½ñªz“:Ê®¿Ñν_Íejm‰Ûrw#"|pÆÀ’!ÿ“MÅd ×VE…ÀÐ÷gþ¥H¤¨«Ãè9`ÃÚ½à}6™Àçhº_zÜ¢'_’’‰N5Ìlœf±!æ ©®ÎD.âpX™aš·V¿oiÙlM®ùAñ•ÆóÊ%0§÷ ´c ‹¯|È…WzÅ$Hìp« V3¯r8ŒPÀ×¢% áË~BcåöC'¯vf«C÷¹ù¤äBª';‡‚+pØIÚÔ¤ÿƒ¢º0•÷@ÂdÅø®{ô{…î¾óÆJ¥ëÏÌe´€ë¹qVÕíæYl Þñw•±6R¸]©þ´¶B¯%úÃÙ ‹çíîBÈž1×sY lÕv®£¶÷ú¶ Ët@Ž!du´mä—4*ur‚œMi#Ek‘>O.%kÖW ‰"¡$^™Ø7³QQGâ?‡›Ë¼{i>*Ëlž?»ua É"Å}9®2Œ öûÊ9„ë·•õœOU©èºí¤<{ÜRÎ0ÈšüW÷Œ>¡<)sZ½È:"Èé’7Î&¯‡l9–0ÔݤAbÁ«î²øMJŠŒ®‚[÷ýdgY#GÌT®øx(ÏšŽ ucM6:<ÖØ€ö4r’¨°Áòetžg02ÔDÏ›fµ·­1âíV0<ç^×çþ¡¦šÈ× á,Smw¾ÇÔ6~Õ#" Y‰×èq°Ød˜ìêC0} %BgŠ ÷€Ý‚m¶¶Œ“Ùd¸d—SAª9¿}„3îÍÊxºSíóàÑñNµ?èpª—èkHWLÅ ?…l"<®¨rðáw´[ŒjŒÞ^®¤çœbe“Ksë²¢~{¢"Ê·ÕP¼´Ä\‹d$“yêtjj³G;ˆ,*ê£8ì&q €œÏvˆn÷7CN—ɸ‡àù]¥ÛFbx™†|GFÁÓs³ë};>ÚlDYÝœ{N\f™É°pÀ}‘ᇦ7>¸¨uùÛÌ'¶Û|àÏÖÅùÓ÷Å®v…ö c¸7<ŠëW7_)jÕD£éýéÂ6Ÿ6]A« i[sVÛð4=õÚã†:»qÞþ»’ Ž[ÏÒ°ŠhÍA<©¼ ª ˆïîOpìWKœ½Ö¸¥¶ãÏIhÕî¸q<Æ?#ÞØŸÔTK‘xÄëÍܬòù»Å}Ž?U2úƒŠFߌ¿Y^ïžmmRìj(G0¤ h_£RTÉôêֻ˜"ÝüÞÁ?{jv¹_ñ„|¸t˜Ò[•¢Õª]úIÑÚÑ\^hònÆ‘Y6 «WV~ûvrÍ£ìI,²æªnŒ$"TtÒ×ÄNó«›ú~ç‹@„?xÍ`Êd[«|•È`g½êö«jÑO»vãØÑó+¢Ê±jÙLswÖºæõ²òÔœ!¬å_% Ö ÑCÖûºqà?Þ߈ÄÍ Âh úÎܰ±–»mâÞ¯E–@»VPãeß𛿛Dõ¯,míRŠ#= …§ÜÕop·ŸˆÃ‘˜¤$¤kdkÙ†Ø+Æeà˜,±Å<(›.5 "¬©S4\é0½fû•-ÇZCéåq¬v‡²Mº§¶!7Iàôí0°-G?¡VtLçTB–3·â\e¤ì½‰sÐúF®Û•ºW@EMŒ5íîh›àYÑþKFžç<>í£ò-c³íÆ£ Ü|‚_6ð°1ߣ¸€ð„‘ûÖß0&¦¯ÀŠžzŠ[×¢µ5}O Q…\xµ´Y7öÒ}À8Ö/­&3C^¦^äµ/½öc ˜¬ÇyךPpûŠØ{-c¸vÐcŽÏºG“ñć‡ò› !9ܪ@Ý þ_z9êL‘,‡ºA1Öਠ‹§®í1ô=x›ý}(Õ½óœ:æë‹~悪/}“x¯ã[’íj^͈EÖÞ(äÔ%âüP¨1i’7{ö0çõ®Ï—ŽGg°1ç^_Û—ÓæßÇ u»bX”‰&6I/ŽE€Êó?ð$ÓIîBÀ)—â,C‡óh©Žo3ÉéD zT±IrÈʋ⠣+)‹ñW52êŒî“A’4€õ‚ ¸cèÂßTæËÐjBQ¸ÑHš®´Öd;Á.zÄÍd’¶-ýzëi®Xì<ó( å‚ib çUû!®1¤¢6Ä¡]Þ„ŽXO!y3Y¯d ®.it~- ô¤GºÅ*®ãñ•çÎÝ1:‰¾|1èîÁ~Í»É û2û @Ë›v3nú·jŠqË¢ÇÇÖrÈLÊt¿$­Œ[NŸ³ßÑ'á)A{²]ƒ‘âOµ7$³Oú|^†1ÁõüœƱލ톜½ÐÜê©:MS¥†•çÒ0¶Ò£Ì&.sœ8ä\Ÿ)qu„ØÁ–ª.¯˜ Œ2•å×èê|‡(0 ñ {ù“¹¿µ`Û½“76VJH¿( †òcà™³èëxq}ö°D@N°;k|Ò¼’¯dzGÿ1Üþç1>úþÅ^÷f窖µ“gé 8bOŽÀQoô<÷Ç‚‘ôã…•[$°…ûξݷj-b8XuF‰³ëªoÀý!£ÙF¢¯#ý>b¡(õ!á™3V1 iØ$€_,œ„2|v—f,±Ó÷¡-à‡S¦ÍäË™+iJ¹N$¬6€Ã,«†ÏØóT·”üÕA3m›‘ésaj"å7p+Í(É]Êl¡jiw%âëiÚ‰¢u½Iýâodxr QÜB$A¤¿Ô¼ œ½Q¡LÛïÞŸbîÆPƒ ב¼¢Õ6úV/k¼U·Þ[Çê€"øèDûއmlHÑ&YÃQƒ@W)x*¼¤9‚®¹J•=ñÒ‹ïgØ?çˆ%‰£·Ò™§-Ê“¤gµ«°>'+¼¯Lg9ÒQDdþVèïŸ{`7ùÛjªœ®OÝ÷OvTˆ¥ƒ£ùJ×@o´ÛOø¤:6¼G¾o¬³ˆÀB Áê_Dð&´À²PÄÈè¯N5îàò‘ë·{ü…¶¸oÑÊ|H£EÞÝ=Ä”¥Ý:Ë%²â±Ó•ÿÖMèÁ"töð._‘IDdh†O¥ÀçœwÉWŸ;ðWêeÏ¡÷!à;L®qöåÒ4h+a—C›eb1QìEh >[ÔÇ¿Õ9¨¾¯ÜqâG€ùµ_›Ò†!¸¿M,ßÏnxöXâ Õa~²™ªÄSiê ÔdJ¯Òepâêg§xìÆ?K®-s¯Éqųa׳XNtÜý6÷3ŠIQèå_,û)_RñD³l&E著ÈÁ±c=Bb65…+#T2ž¥Õmêcm®L^†é‚˜»ßWÏÕz¥"Õ„¦NësÀïïeWv¦¹‘£H—“ |Òs>ª…‡ÔÏe¹ûbšnÅ{ÜæÓäGæÉ ôŒŽƒUFy†D1­ì«ï+Ò¢V+Èá~Ì ϯcÝ‹DªËšX¬fèËÜ;ÞA ÿåP4¦Ñ4îA?ð£gqT±á®èŒ'òÁßàÇpú@‚µ ¾WÊå3²ô½nñ˜¯Ýl? Z©ÀJOù” âC+dDY´w‰ÑÏÂÅeoÝ[îòz‹Šä‰W–¼Äç~³\\š˜ßýÑJ^Èy™Œ~ ÌVu(x¸ z½×]'ýJ£SÓµùع +xì:Ý5‰çd™FçÞœäÜà4ž4é“Î݉¤OzîZ÷Ä­°ØAö×g¶D“LÈoÞò!¬LCÚ ÊÛÕ+yÃTh‚XFV¨#7¥iÛ« Ý)VG63s¦ÌëÖ¸¢³Þnú~‘v÷ó[±j œ×”ƒ0‡ùg`’xà"Á*ÚE¤óþ½¬Dƒn…ÎÎ’Ÿ*[xpàr’!’<ßX%¼‚ΕK@þ1¬ Qè@·ziU´eA¦®úÕ·™Ð 84yËCa¯†èz¬ÀÅt4ðê$^9“¯É¶6åê¯òµ?w3‰Pâ³æ6Ááœè]ËàEŒ#Bhzkî %LJíú÷^yE`6WŠ‘ŒQ®ð·éE©PÐÏc¡ì'¯‰ÐNìZ'IEºE¼yÊwwó¦0Üo'PnBOܦ&Þc£~Dù^—R8Üÿ(ˆûD 7OK–êqtØ4K×ÐÛN£PÌI6¾¹\Xí!"ò?кj´¼áàs`KX£–8)E\Qñ5¹!Y{¯unžÑ}ÂÁ¡OmOh(ð»X>ao•UHr„¦žCº»Ï©ã³qГle±s 舊ä@DŽ{\âü‡ÓšC:mpÔQä)AÃñ„X1½Tð ÚoxMÖ>¬~ØV)fãÀâ°Þc–r6ÿ2§×Ð’'GÅõ@ŸàVݧf¿ŠW›$&‚‘Ö#äÅI¡ªùÌôG×–ò+¹}ÏíFD<^‘°kÑ'pç­Km|ü^—Ûg»WœHŸLY•Èï1‰šXɬœ|P¸&ðaBð‡¢Ä(”X‘SˆðÇz“p¥?%5(ïs• {\z\w¦u'+ 4rJ[Œô.ÁvßoÓ ÍSØÛÌ·3Ë=$EQßîêsKŠÑ˜1 6vx†šš%®2¯7#O³óf³q­MեѬÊV¸µ'ÙšjL­) =üôïQô£xšðZŸ÷ùí“fÎ’tþâEÍH®[~‚zðÌk,=oúH¼Nl˜£³›N{¾ØÁx»]­®{Š™C©îNë@=ÁÕb$ÃÔ­_&är©1V–ë¹Ç%3‘eÂÒ±º‘z8G "‘£¦RцL!ÛØ|Í ‹™ Fýr©wÈØ:¥n«××LÁáOäæh‚1Ëi»5këhÞ”ÞK‘î|±Në Ä¥êSÅyQÒÏŒ“Kc…8RÔà{=úákòˆõþ(o¬cMlYГźb{TÑ[9O8%fŸf±¦˜Èûi3?+oMSUX›Ø¬Mq¤ò¿{Nö–NjÚñ[5j¬Ê÷W#`;òÕ/÷âWÁRÙ¾÷üºÿ~hƒ!ç¨èIIwÙèU¯Kêr†Äêèšõ{­Üè]ô+"ºÕJ…~ë¯ QÛFŸ´`-³dÈno¡öËJ~CûÑÕCBG² "´‹’B} ü{$=º´º©¬x)½=]2Ìð`‰‰ÁúÊåÑR)þ¥ËCŒ|ýiî? ÕúW2“a.ÉnB¾˜þáކ›C˜ëGß<òæÔHù[ÙꤋD|22­ÖD0;±X½rº{[î!Ü‚M ¿Diâ"Á(#3vÖ¡~˜±“ôðVu8ùo® »Õ$RÒp™¯ZÕ†è …J ˆµ86böµz9à´nÜ&m7’°*#1õ0ÓBGÑo<³CvT“݆€¬ùïÛ:R£û° 7®2ú¯û¸çO-?/7‚ôõÏó%F]LÆÞàŽmx´ ãO(#_2ž§õ‰¸ ÔJ·GË©|£H9. h¾»ÏýÑ®MØÛ'¿Ì»ùAl-­xû¾ø>lYÊ;éÄímëúôÁkRÛn4%ç¼ï¢u÷M5A]Ôû–uÈÅxÔAóϯ4õv˜dLì Ó'ð½õsFÌÂC æ ‘ò•.¨´.obB9%–?£^Ù ó¡—ŽWî^Ün"‹ÑßZªß’n´?9û0¿·?5¼@Ÿ÷ñÔ üï{½œr¶ÚJö‰Ëwó$5ì‡=b—¤uçéœAµÃ°¸ØÌÙ9Ï´†ö÷, t G›³eµqЛû‰,–ï‰tÁœ …u…%íZ$‹h„yâ£rnŸÔ¡¨·F ŒåWôC§ßªó. 4s±TLWÛ1Ô2Á‰aèC„bŽÝlv†@6WWe‚í¹ŽAX¹=m¦T‘T‹kGWÄxIˆU{dR(ò’aëQ{7Ñ+Ÿ_ï†=B•ï`Æå“=¼B ËŒþ9noQ Î1•Œ…1x€ËÐþbTž µL3¾ÞQiž mµÆJ˜˜³å½ÃºVâ–ç±zû1ŒM ËŒ8ehºfîÌ¡²7Z@AD8 b448­;<Ùw.&â'cCbð—‚½97R]ËÉÜØÒª?‹%­ ²*}Üá'ðŠ•ùPÈÞ½ÕYж"~òéÞP¼-*ld¾Ýb`Ú܄݋-ý.{XVÍBj 4 wx9!MSœªeYç¡eõÚ4E”_œÄߤQ“~PrÅaL¬çd\•yXxv˜S5ÒæËgŸ£³?Ì*¦ÙêlÈZÚ=™}"3 ωdÑ]Ç30Š zT ‚þhï–Î1‹q•uÞJy,LÈxÑ!¤ *½ÎÔfµ–Fßo˜\|OëÏ€DC“íIl=óémßÙë€a†½ú¬aÎéZRÚÎö·Ã§Üõb  #ÁW'×?s„Ò-ü­G:Š>xOê\Ì‹»¨çkó{Õ¶¹Ëš{¤Qjq?oiƒ1ÒˆW5*¤ã«ªÝ‹zNnxDƒí]êÉvTI°¥8Ø¢Ý4Gë†ÜÜ™¥gªÇѾhëôœŸDŽÑzÇ1n-Ÿàx}[F¹yçæ+x“ìäp)ûS\kÖr9'ýÑÃ?QtôÞZ¤Ò)i¤½)½‚ªj¶Þ,¶Üȉò·ç1«ÚˆŸSËØ+])}ÑüàÞå<Üq±e÷uÁô ´®ÝU&ÙVvOÁ Á KC©‡›½FOÖžz7˜ûú>i¯°ºV½ªph ñƒæ.Y‰¥Pטç×QLõ.Å™xŠ2øêúÉ ×•A"Ò4ŒPQVpŒzÒòN_9{™–@J>£üˆîtž|Æ1𓡆àgúm—ôÈ&Õoe-78©ô}%áßt¿T]߇yµŒFöe»Ê«7$Œ3bisãÎÉE—9 ®\8Áñ·È©;©[¾â˨!LÍt¡°°ßBtp#í`XƒÖÝ…Fr8*×’›šÈ¡µ·wKüˆ‘q$"‡_"x׳²Mtã-ló]•'ñƒxç7Ri X\Æ™¶[ÓûÃ*Ì—ô ¥‰†à«Â/ô+ÔÃÏš$/WæMäÄÃÄv) ¤2ÈFœ;u„ùP‹œmîÉD• ‹&3µay Z”IÊòQ1’ Û·»G¹HïC›@¶2½zk H—Ô>K}Aןǘ֖àK¼²¼Á:sBAœ•]ˆ%˜”²©t^œPxäÁÛnØ ^èF*ó«KÕªJ4×ÿðAûÿÿOX@@@gÔèl‡ö=2žendstream endobj 145 0 obj << /Type /Font /Subtype /Type1 /Encoding 367 0 R /FirstChar 45 /LastChar 122 /Widths 369 0 R /BaseFont /RQAAYT+NimbusMonL-Bold /FontDescriptor 143 0 R >> endobj 143 0 obj << /Ascent 624 /CapHeight 552 /Descent -126 /FontName /RQAAYT+NimbusMonL-Bold /ItalicAngle 0 /StemV 101 /XHeight 439 /FontBBox [-43 -278 681 871] /Flags 4 /CharSet (/hyphen/period/slash/X/Y/a/b/c/d/e/f/g/h/i/k/l/m/n/o/q/r/s/t/u/v/w/x/y/z) /FontFile 144 0 R >> endobj 369 0 obj [600 600 600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 600 600 0 0 0 0 0 0 0 600 600 600 600 600 600 600 600 600 0 600 600 600 600 600 0 600 600 600 600 600 600 600 600 600 600 ] endobj 138 0 obj << /Length1 1612 /Length2 10292 /Length3 532 /Length 11143 /Filter /FlateDecode >> stream xÚítePÝ–&×à.ww‚»×Aîwwww'‚»»'¸»»3|ßíîÛu§çÏtÿššSuªÞ½äYÏZÏÚ›‚DQ…AØØÖ(akãÈÀÂÈÌ P0·6tÉÛÚÈ1(MFx Q £¹­˜# 4ˆ¬¬x €¨­›ƒ¹©™#€ZMYƒ†ŽŽþŸ–¿B†nÿîùÈ™›Ú(?>œV¶vÖ@LjÿëD àh˜˜[¢_µ¤$Ô’ jI  ÐÁÀ  èdhen37Ú€€4[€Õ?#[có¿Z1~` ƒÐÈü# èj´ûËE°:X›ƒ@ßsÀÔÁÀÆñc޶s#+'ã¿|ØMlÿ&dç`ûaýáûS´9‚ŒÌíUÅ$þÁÓÑÌÀñ¯Ú ó7ÀÖä#ÒØÖÈ鯖þö}À|x Ìm@G «ã_µ cs•ÛGí0;ó¿i8ÌmLÿÉ€à45p0¶‚@0ØMçŸ}þS÷vvVngÛþõÌA@+FxÖšF޵MÍmà™þZi[ ó?ìÆNvÿîs:ü= ê¿v†æƒ„±­•ÀhϤ`ëøQ@ý§2ãÿœÈÿÿü?"ïOÜÕè?]âÿî}þWh '++ëøÇøxalr€¿Þ+‡ÿ-ÜÀÚÜÊí¿Hø×@ à?Hþp¤ >†!lcú!3#ó?Œæ sW ±¢¹£‘ÀÄÀêcRÛÕlŒVæ6ÀEÿ&€…™ù_|ªfæF–6žã. ñ¿’ÿéoêL²ÊrêÒÒtÿú¦þ¥ø¡½£ª›Ý±kEÞÖø?aˆˆØº<>n +€ó£ 7 ‹×Qío–žå Ì]:-3³üÝø¿ýÿyÒýq#[ã¿vEÅÑÀÆøc½þÃð—ÛÈÉÁáCÕ¿oüGÃÿ~þ{Ñ@W üŸy[£/©iŽÕØ9cb:=],Av%µª…ù¾•¶>©¡<ß_ª‚ë&xßšÝæŽì^wdhw‡º°¬¨:“gy^d4Ýù¨«”­\t»þLz%HiÇ‘ç³rëÚœÌê»›cJÊzÅ/Є­l°ç÷4¾dÎù¾äwvÈÞF)51˜m(u`hÕGÇ” ÷wT}Ãý—PÝ;øtÙ1p_œ!‘(#|í³ñµÕ*<Âh Óêñ/[Î߈5:<ôr)ÈñÈíåžMó–lZä^¡ÒZù䤚v~hb]LODð 'LðLå¼/;Qˆƒ°ùê Æz®~[’LfÀÔ Ü~º î…zT[WÒ>u#çÌ N*µ•Ô¸4BïP03 †9ý@m²Q¸[‘5¾”f…ÚÄ$õÝÍjò·vMYVËçè:Tgà(25„bÖsÔ]ŠõŽË Ô_h+ŒJ‘+¹µzŸE8÷à“Ç•¹ÂÞ±Dhê üL½aª+Qkk”›Q½Oê(jþÜl†?˜%NîÍ“€JK†Œe8“9¢ó~Ô»Ÿîºfƒ–Zqèç~ìÔ‡E ÿ{¦è{ÆD‹]žGn%l­YØÏÔJY~Ýp¯ÉVÍ[–LUUdÿ<8òy"3”Ï?+R/¸õé3ü·Z†‘܇R‡~(ËgËÇdwd1Sø(¾¶tÜk·‘¨Z{b¥ðH's¼AD‰³é*òˆßíhó¬{ ýÀÚã‚«}¢´„fïpîE©ï¤‚Å)Uõ&”'â;Ôfã$XHU†û·‹ µÜ•ÈÀ1 3~jô, ‡ð*²Í)}Ú‡ vÒɪeûðqâÝÉŒ»˜iÜ›÷7ÓŸñQÝI~ïôÚíÒâ¨cmæ¢kL`iÁ‹3l¨ó]‚šãéȈx3õçèŒ+ÑLÉÇ&ò˜Ð¬#?`èHÂû.“-¬:M#ÞF’ϵ­÷"«»SóX>±Rêbw(7bYv’ðL´Ú¢3Á:­OäLÆjÚPÅËr¾å=‚ä`ßQ²‚E½à¬{4l¬ºà ûpnôâ'ŒÝ°¥§ñ3Õ†ŸÞ£ÆÍ#ÔU%•Ø½Ó ”Á‘†,áÉÌ2‰(±Me D6 ÉŽŠƒšã'烂k=É;ëèWç™Lã4.ü+éÖö9¯Òø#!Ú}ëJ8ϦI÷žã&Ðh:² q„`„ˆ© i [’Ù=ÌÄœØí àÁF¯%‹) ‡ƒ¡â<µ$'•T–FM¾S](˜¼ï-ïk^ó·ÙÂf[ ³Aœ~æsŠP€­Êúu±®Ù—PÖ@"ËMjìIO”ÈyüÒÛ,-‹,€=œÖÜÁ+ðÞ=ºG?¬µôÓ÷ÊäÛ$Ùâ~B×/—QàSÏnÂ-"ÙÆ=—WnY Õä}”•ó»Ñ‡¦çÚlçаô,\ˆq`¦¢ŽfŠÈÆ[#J†dîÌõøÙJn•i°B{(Ï‹búÔ¤T¥U&q–À²'v¥¥>cÿâM rͺ߇˜|$W†’€‡ JjìÐÝS=ÅÔmÑc†6ê¼üõ–#³lãÓÇ$Ó·Ò-áÉ}×¹6ÅXüíÙ,æ¦ë\f§g‡XÖ>QWLÔáç†l™ŽÌÏnxõÓ÷S?bù ßëÆÙ.eMMÕîȬüÈ©â< ߨA‘@Åár× æXNGm~l©ž·:Ÿ2@#^é¨n}I0p³tI}Å ƒª!•1@_¥ aÓf 52 ê&Œ(çÀ+F’ä³’Òjî¡‘Ç1à̹Ô]ƒ;¡œ:©>é¼ßüÎ?-¤ë9äÀ‹Wxo¿%Kr;>¦€z–¹³)^¾¯É'Õ|ð-xÉStÆî½â÷ïùÀxçHµÃ$šøä>8–šÔ©Ñ3µäè³öЏ¤ÃÅÇ|«ÐéQ`^¡?4'îÂ-“Ì€âSÈiËñ©!†{š:, ÚcN>5113 h-nù4Á1ô~=7j·$êYç¸ñãoåu‡Tƒ\}¦·¹òh+G ‰ß=ð²_k5-Îõ¿bú)-&swe5µp†«ªøíJ¼„zõ†ó[­ ç§D8çyâ ´iŒk“ ê,¶ lDjNH¿%©ùì8ø·Gíˆõ“kö´®}Sd-z2ýì•4´9'”ž…0⪷KR?Ç7O9³ÌÓâ™oQâìSò;­šâ[ñL£1ƒœêñS'ìQ—øQN~­OMþynO±åC"sþ™ÕéÀ‰ÆÄã»q4÷€Á+.ñTjC™«òïMÇåh‚¦j.KPÄ£¯Ô|%ÿý”AN’Fݬu|GI”ówjašX­[oÄÐôöÏBpîâ;ÈŽ¤»Ú^ôçukEÑõNB7íe´¥V(ä« ç0e÷}®U¿Ù] ‡«ÍÉM-2¼OÖ¼‚aNn¯Ô­O¾FßÔtŒA@*ç» ·µ«ä ×]¶ ŽqÒ©½lØÌŠôÑ_=R‹€}þåû2SÞÛQØ@4Ü{Rl"#/倣ñÞô„ ’7Yý~CdgÖý HÄÍȨ¤¡&q‚r¹;kˆòÓdæþ¸Ñ>Ǿ-#­$Cñ쇩à|³¨êR9Í•ä㈋Û-‚˜Æ²¡ˆ7õˆèÝ—Ô(á©< n;,f%ŠãÜ6¯Fãì@7¿ø¤)ë¨AºkjþïøÖ#ëÜÐÇàa], kÚ]ÿº»+^î ±­”“í¼²u„CŠ¥c›gj» 4§ù0ïÏðoüþ*Ú:Š×½Jç}lß!›L{”‰Óë[Ÿ²\œ—™lüÙ#‚÷¦’×ê:´—®ÁT‚E›ÈÒ?nhϨI8wŸ+–dÆÂg ~FLbýVíà%!f,¸—Qø[7„¿¿ßso%ô¥/«¸N¥UГ͊k‹h\9’‰ZNNq8õáê‘+å€hú•p_7N¡1ãRK-lO)‰ˆbfl´–Ã6›.kóíó‚„ÕžÕ=†vút÷ÊÞÊèýL$Å$Mé)¢ZžÚçð1ÙíÅÒhÂÓ´°íŽyŠVÏˉ»ùiŸ\é˜3Ø “q¬7åŸ&‰å9„íötmÂçUPS‚¹G|÷Yc‘òqz}µwo ÞÄW-m°2a™Æ:(é )bU S¡Tgå"òik…>Ta‡‘¸%߆X&…䬆o4Q‡ËxöiÉS­)G&ý…Ý$I—¤ê„¡Æorä_WØÊbö|q=ˆ¥¶èÀ™‡^»¹±ß¸<œÆKSõ]­Ü’Õ+×fº7&¬½~ÑÊa Êï˰Ž`bÔž…ï‚i…t¤k„jÛßd¶t—é:ßZ ¥Â݉šRPºò-5ÃO'FBq§TµºåFi̸4ä+ƒhi³u¥ÐÁ£#”@6\aA&*K£­AŠ›£*_¥ÒƒÞµ… ùÈiÄrgrã!*I ^•Ðêöò¦4Oq‹*b/b+ Ÿ…Ÿ-à-X‘…¡%…;Eòž™¼’ÍâÁº¬¹-! éTÁ¼ýå“Ò”ÄäÜ»Ä{ .Œ·1?P1«¹âŠ&º’9亃ª0ûZ²Ú#d—ð#¦Sö‹2EO9ó)^hÑ$äW¢kÝ‘%q/(€xedõ=’"ÓmyûIO.xñ–?ç÷çHŸ%*îw6ÂÆÇ²M°ÏY¾ñ’ Ï—óx·Ã :# «|—)èŸÙ °²³Ý›ò~Œ`«O/0!ÉøA2_ÿRØj"ÀÙùïs¸‰Y',áI&µñÒŒn^jØÖ¤õêyý ÖG˜›mÞä•°­Ì5‘M, JWªùÆõƒ¸Ûk8è V»íþêOîTÂ/¿â|9ßèA|ÏNøD,êK]T¦úcU~=XþˆßCÃ\±=Di·È¦eÀß|ÎÃNGÜ/t¶n× ãÄcò£ð™©Ð»~7a Œwàš8Üc ÆÝt ÚŽÅŽMÚ|a+MÈÉ[ð’&K-ðìò}@}Owr¬|·¼—ùNaC^2{ðcT'±ÍNÓ°èǸ)v>9PY«ŒP¶Ý|1¢á;°_|ñʆ6êÿUí1r·ß•â!‹vU\´“„üón¹W¸€ZŠWò(ìxT1M`a5ƒ…Âvëzð¡{«HÔî§Óǃ ² dÿ¤5‰[ŠÞ»Þw¹Äì¼°9‚‡ñ¾õ?æ#{Nž™››v¼ ûÊ“Œ½L>îðÝ ð×(ö¹7c³¢u4̺‡|"1$i;ñ~?n$ wÈgû}•Ñw~®Ó ¶ÔwÏQÀ±<³ÁˆþÄÈ4AR„ÔÔÉ~¡ñ£k¼óî,Xq‚ä\¿‹ìo[cžúö§TÌKäj>ò]Ví™%gmÔ5x”]ÊÝ›¥ …çj*8»ÞýšÙöXÿü(‘vÊsÿêÂí„_jEíÉ¥ác*Æáûs\ð{ŽÃæÌ eöúÚe†fHpiŒFåwií ûÐ8@¦Ì´ÈPðçoóí w]9°i_.iÓšdoE“§ÓÝ«h²¡_§}/®1~­9Ëà;%[eá£Éá ’Ä¼»¾÷}ªã.º¢Yá0ü­‹NJÁ³[ËÎ0À§ðNc)ÄA\‹j ãZJ1 |[&NRÚoÇ_ÏiÙ)Y3y1áÙ¯$¡Ií$ä\ Ýìiµ b®/¹½“”…è¹îXÙ‹Ñ$ÅŠgOüCÞÕú6£À|×w°Bd2KÞ\†”_ÔJÙr“ä娶šsˆç¹õ-p…ûväì2çz‰ÊêF‰³ŠëíêÄÑšNP1m¶ÚËê %:•-4—$ü‡¯(¤ßÌNÔUÛò“.rÇL%à=ü뫼ªä]ÉÙ>+*× ˆ”þii#à_òPí°uœ@èN|þ#Å.ïv†©|®€– ÖòåϬÝó÷ïå7ÈõBãÊ57×…'”§@¿ªÒ†¹Ÿ_©Wu>‘I¿*è9]fÄX 7ÁùHó©lžìS„¨£÷÷œï Cmš åöö­~!U[Õí£oWl‹”b‡»º¸³zÝ¿„tqW=«…z©Ï zsi<˜Eò«\ÑrGþrréì9ÇòÏÕÅàèSWÄ3_tž)e¿ žQMà~]Ëõ˜g’ç¯XxþÜo"_ipâb¦¯šÿPÊA+ ý cÜXH¶Ûe‰üã1‡Ù<‚M©{X7Bñ,“èL¹ñ ÌíñÏ@”°.ëgÙ¼œºH¸O<ëƒÏÒ ¬›<µÊÆ/•z|=ø>ÍÄ5V!ÀÈtV_Õüú†:å‹þÔɶ›Ýö’“oÒ­!ô'ÔÒ¨[)±C>F‡–ü‚A4}Ý4¶ýŠKÖKV7»Õ<ü§’ o¬Jìtæ7‡ŽjÁ˜mS[@ñ¼ß­™ˆ8d%ÀÀkѯw©½^ºìv$(ƒhó­EõK})öß0óƒ›W~cä}¹pfÎÈoé—.„îôv9«gE›ª¾£äf¨žƒ:¿üŒµ|ÃÄpÅ®ãÅ—…â}CüÎfQ[ù™Zôa÷¼ªØä:T&S\”í¨ë;ˆoz~á’8Üâá?Řéû H|CQm¸è$s¤K’ä…fºÞ +f6~åà¥Ób¨»¡Ò™èK މŗQëP1m*»œ]¼H·í`ó­ññ*•ù€ð©·zþ€½„m=:õù±-ý±ðÓR"bétÌ~¬4 Oq–¶ÛcѶ«jRÆò'¯ÚT* ÞL‚f3×/F-«3ßK|érµ&`¹e¥$žÕ"²¢ƒã-gx—e'ú‡Ì¾¨…¿Ièå=-ºHG‹ém ðó¶)ëp$ '½¾¥î Å"Ò¶ŸÇH#œÍ2¼änY*R5_¤ö§FÅÇùûB£Œ9žK ægxqEªwÕkj^É ªæXÝ´®<¢úú ¶«‰¿\—ÉG+Ì·'kËö\¼~V‚j‰*Ô+¸!f̰sTy82!¯.Ö°€z&øy÷H¨aàÃ/?jtÑõÉa°#2dÅ'šê"·¶Ãé0ÆÆ~IÅ["Ù%ÅþÎøgESæÈAʹÃZvÚ¤øVzt­³o¾£Uå2|ºëüA%'£Ü¤Nôu¡ ÈRƒ”bé̸øL°ºHú›$Âä9Hp{ÉÊ®Ó )xÊA3éÖ;ðþiÌØüÜoè*átœáº ï\’ãóá_‘vŸî ‘ݸ}"ÙÂK&¯Ä´v—ÀÇ+€ fø k>ÐÞ®SK»jŽ›’nÅö Bæ;^ùɪ‰ígŽqvÈìé™È¯û*“VM˜7ê°ÇØŠ·¢v#¿ùć¼û£ø¦ù#§{-í£,é퇼ì„ë†S‹NýÏå M—óíS ƒ_«È]eûÉ{ 01·7¿5/¼L½ú®SH©'šé7j4š°Õ›§¼¬‰¶]dêèk 3Ù[½*&t£]ίlÐ Ö¡D‘_ökÁLn']…X¢¿5´ï·Ö QA·+T´ j– h2÷´ˆÍÿ¶¤FŠàÊo®Î3.Â\JDØ«ŒRäh÷¸µd‘ 1;áWÍÎ7Kj vèEÑ,¦%+·ÿVyßlq½{SŸIñ©átk=ÞçÀ<ÀË%£FC¬&/–ïÃâÚ 1h]ê\7ð‘ÇÂFÊv_‹žÙÝŸT¿ÐAøš¢ç¬ø‰Þ^¦Gùí ‚ö jVÁT~Ø7*=˜lÓ¬”e7½¥U± cùݰ²ê AÅu?ÊVþL@ŸQ\ù;{áûÎfžúêÚÀñý°Ó‚ï¦èg'#³hÔ‹³°Ûþ“¡” aÖ™¸?|9jÔI­î/›C aÎO~n!z„pHÎbÙ§˜g¥hÈÊ0"•qý6áÏôÑE¹¦‚Še~Úvt+må¾›ó¸ù05—g<îî˜C'~ÛÂEYżI–îÜ¢ˆâ¯q\Žð3üHåÝt(x0íÛ›ÛtX8¤¿-¾B¯‰»òö‚cÒËÂy5¶Í¬ƒÿÝÄ9Ê|±Aƨ„-*8ïOêäÚ% $‡nLZRÍnÍo¡Ð— ¾ðsXezÐÔXnpÝš”Ò5#|Sü.º9Há¿#¨Ï¹³VÙ†,Zp¿÷±úª>ÊAqrü¾™}Š™ûâÞQF• ¦¥cšžš™ü~vGc’ër1õðwŠ1`ß:Rx®ýl™á(”© ôµßJºäå×+žÖëieOœcw u»Há4ß ÖöÄáV"}°rõÒÏq7J?Ë©‡…¯Š«ï5 J,5ˆZŸò{äw5I8>)Ýf7>C/¾ïãâß\çœ+Ôì¿=Çšï…€>^±úž)^½ÊfqtŒW.¶Ì&z y2þ .}[ôÅi›ÁM+ààÌ9YËè§BÔ9¿#¬¹Ý Fç'#Áˆÿ¾‚ª¸X¶k®ä—#,ÓUú6&¬DÝÏ̹‰ž©¸&_Shº;§&nëb×Ò¦ÿª/Š„Á±=¢S`ï§Š”çb Ž .8NÈlÑÌfò#Xbà,Ég ËcÞøž#…ÙÆòõàÄKYYl/ý­©uyL³ÔFØÉKÌmЏ†”u{Ô—§¸*ßÀiµˆ(¦PÀ}Ƹ\FÈÀ 6iðͳÞ9SıœCBéÐs}5hiRÔj#KÞ¬ ½)Òž®«E†„L¨>Ú%-;ƒ£{ L&«}±°ñìöÄ” ?ØèÊú0Æ '†ƒ4-PÑÓ Šs_H£dþ²#T±Î@ÅñµA+±ä "S™e6¥H£ô g|’£„ˆ›öråhV@™Ù¬8„‰eKMqZ`8‰&¢öõдòŽÁ…©ný隆_çÞÕ‘÷lÃU²/¯„°)'Šñ`ùNW\`ègq‡nñ*âŸLl1n9Ø÷=ÎV’hÔœÚLw’E°·uòCe?}_\¯âJYÏÖã‘kr?éË'͵™+ƹ)2o‡nèþ°[=?ÛÞÂBEi”wÓ‹ÊÑÁ¡-mNq’¸ ‰` ._,-H¢~Ëý6ï¯bÑ)²ÔʰiÔy‹EUE‡¼ÚbŸd͘DÇÙØ2¼À‚tÛK¶#ò¯ì|D$ÊLKÛ¯·56ñs[=],¸+*ì"cZ) |òpò‘rëúD?…AqRÃq£$‚?ò?™+ë» ÿï6_ˆBHz%Î+¥…ÎuQŽèƪôxïX·Jˆ õ‚gà‡yÙí†ÍÈE¿ê x[vÚݸõ†ÿ‚R4£9€qÉÑý¶4tLGv0–‰ƒehs ³NN¡ùØb¾ @#‘UJÝ{Ë>ž8¹í¸KMtÏñ´Ó&Ÿ¨WÑ;M#0ýȾl*RF4ý I.\¼À’ˆ²PýNsS ã“Ï„«Ö=±VþíYOj€8È¡SØ_Â'ä.Ú…íÕ=ñø…³þAÁlrâÏH”ÄVØŠò\΢$áñØ~ˆ…'Ϲ0muR½R¶»›GÂð`wÂRù耋g^/}דìC—öAuI郌f£ÅàÌúö=Y.c͟߈i+pIysCô„*_[Mȵûéø.±Uðž>ËcÛ~‹H]f’/Ó%º´É|TJ$¯-ü"±Ãÿæì\ô{Ûdž¾à"]½n®ETo$Q†èÞ/,?bGIñЇ›˜ƒ7fß¶_¢BóÁпÓw@ˆjöçC–’×ö’ŒP“ýœB‘“Õþ}Ïœw)–ÐñÖ§ìuZí Á#ïi;=;Ù!0{† +(I¢úsžïKÐðùíM·8GÄ9¤Š9Ð £…€~3â·;ŸzÃx¶èÔ$ÐÅé[VÂ-]ß䆩”ûK— + fœ_¾üî÷½v"_"i©ì'>ö¡…—á5ôÍÞäX£ïáç4ö´ 1\û;7jü+°o¢± gÂLªkNµZ‚ðì iÚUmÊŠs«Ÿ´#„õýÕ ÜݘO÷pƒR§¸$äÆŒjQ"ʶúp Ú_™p½©¨{Lµ ®,‹ø–±ƒ“‰Њ~l_:÷×TÚÚóü±ÖéâÌ¢o‡@BØêaÚ°J®®$ÂIÿéóÔÕ_NQ<yì$w­GVC£å˜Ö×pÖĸi­/… ½IËÜðÉtŽh–¿Ü‘¨ O3QþÕŽ ­WCÀåײËs­Òqªb)â¢5w©,ïMŒÈU¥Å‹KmekǺŒÎÉüìS©'CøÛÝ`EêŽ;·4ÄY´ÈÄ-êŒ`þYŒ÷‡ãá ºY?"‚Jl¦™p²³j±à{úhû˜“‹³‹Û®>×ëS=§Ns‹›g¢Ó¯Ïâtæ·û~•gPv:¼=g¾"^y O¨åÕx¸7qY(ã(FDÊdÚh¾µlì¸U^µÃ'¿„§( ·Uȸͭyx¶1mÄrTâR૤{ìÈem$ûc?>m@wIp›|­"œöKg¦ˆ×ÅTviçŠ\w„i}§“B/4Ëîä˜Ê QñÙ28]ÛüµJ7Ó6—þ%Lç²L‡oöýdÌ+9ùëŠÕµ„ñ‰mXB$ó<¤L—êaL6/ØkøÂgî´5#yèY…Èh‘Û׆þ—£Ê.è•2þŠÀˈììXŽމÿZyY%“F½X@N¼¢ø{ažG´LZ™Q/®}r¥›ÉwyÅ:Èìo™GƒÅj>ˆEíá/fØx5§Ö'i·{ÕÏí ºƒ™aö9Öœ­9Ó:ËoÁý*Á†ÉH·}%‚ÊÛú6Ð:ÚcX«KRÌž=a&Sƒ}Nâä CsøÕ ¡­ÎCE@`Z·ök'ëmøÞpÈ7;ZÌgÁb(ø«p £ñSûóházq—®.=ã|‚ªèšghuöÊby³±~Ó‚—<¡Lë"¼ð;läN­k2—)šÈc;wª' •sh£4ô™ù¿ùƒÿÿÿOY m­ ,áÿ žÉdendstream endobj 139 0 obj << /Type /Font /Subtype /Type1 /Encoding 367 0 R /FirstChar 36 /LastChar 121 /Widths 370 0 R /BaseFont /KRLVII+NimbusMonL-Regu /FontDescriptor 137 0 R >> endobj 137 0 obj << /Ascent 625 /CapHeight 557 /Descent -147 /FontName /KRLVII+NimbusMonL-Regu /ItalicAngle 0 /StemV 41 /XHeight 426 /FontBBox [-12 -237 650 811] /Flags 4 /CharSet (/dollar/parenleft/parenright/hyphen/period/X/Y/underscore/a/b/c/d/e/g/h/i/l/m/n/o/p/q/r/s/t/u/v/y) /FontFile 138 0 R >> endobj 370 0 obj [600 0 0 0 600 600 0 0 0 600 600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 600 600 0 0 0 0 0 600 0 600 600 600 600 600 0 600 600 600 0 0 600 600 600 600 600 600 600 600 600 600 600 0 0 600 ] endobj 76 0 obj << /Length1 1626 /Length2 11429 /Length3 532 /Length 12300 /Filter /FlateDecode >> stream xÚívePÜ–-ÜÝ¥q îîÜ݇Fw N Xpw÷Aƒ»{pnÁõñ}wfîÔ}óþ¼™_¯^WuUŸ-k¯½×>§šš\EIÌd”9‚™Ø˜YùJ6fn®j %Ÿ“"ÐÂðnçB¤¦–pš‚m@Ž’¦` ?@hšØÙl|||ˆÔ “—‹•5@§©¦Mÿñ#ã?-…̼þÝóžéjcå yÿá´99Áïÿ׉ê@ l XÚØÊ*ºrJ2:%M€ ÐèbjPq3³·1(ؘ]ôK Àþ€9ÈÑÂæ¯Ö\™ß±Ä\¦W' ¹Í{ÐÓèô—‹àtq°qu}ÿ °qX¹˜:‚ßglÍíÝ,þ"ðn·ýMÈÉôáðî{S¹‚]Í]lœÀ€÷ª*’Òÿà ¶6ÿUÛÕæÝ Y¾GZ€ÌÝþjéoß;Ì»ljãè =ÁÕ2,l\ìM½Þk¿ƒ9¹ØüMÃÍÕÆÑêŸ .@+S { «ë;Ì;ö_ÓùgŸ€ÿÔ½©““½×ßÙ ¿£þƒƒ ØhoÉŒÈÆþ^Óü^ÛÊÆ‘å¯]‘s´ØXÿa·psúwŸ;ÐåïÑýµ3ôï$L-@Žö^  %"‹ü^@÷§2óÿœÈÿÿü?"ïOÜÕè?]âÿî}þWhi7{{%S‡÷øÇxdLïï @ð×Cãæð¿¥˜:ØØ{ýŸ’þ5Zø¶â {‹õÉMßG"æhõ. +3ë?Œ6®Ò6ž@ °¹5ÀÒÔþ}^Û5-€.ö6ŽÀw]ÿ)€‰•õ_|Ö6ævŽ ÀõÐÑâ_é¿Kõ7yqYiy±ÿÅãúw Êû€5¼œÞ¹ý[+Š ‹ÿ8ü#.òø0±qó˜88ÙÞïÞ;!>nV¿ÿ¢äß@lÿ<+š‚]l<úï}³²ýÝý¿}ÿy2ü)GsÅ_k£6u´xß´ÿ0üå6wsqyøïËÿÞõ¿ŸÿÞy Ðhޏ¼2µý–‘®ÅË“Ôïífû0æTÒ Q˜X ê ø±ÉWaò\ÆÜ8ÁÿÚê5äô²+ϰ7ÔkOÛ•<Ë#ö£¤ïÉÇøEÓÎóq/˜Å¨%íX;Æç|NaZ›UkokLUͨø–d¢ÃþüŽ>Ò=?›êÖ Õß<µþ ÎôFÌÚ‚£cšÄƒ»[Ú¾áÁþ®K˜ž]¢Ù_¨Ü¡Qh¢³‰Dô4+|âðÂÙ«P±Œ=(pŽü[ŽÜÅfq ¶ÚSL׸UBC`}a¨‘ÿüyP¸\ro¤ÑÊQó0Ч2µ^>î •ÖÊäú†tSPâ(v2EÎ6Á%H¤Ñô%ΜÕNÊ V½Ìí¡…s²Dsé§xrBŒÒRâ“bRšè§A µ.¦.÷xˆiÜù3HÇ-*tü›dɱ=a½L…ÛþtE??UÒ±ô9Køª_”®:‹“ÑŠÄúÓ81L6ËŽ©f'‰imâQQ0k2È/Õu´ÅÓ‘΄ÞÌƃSâÚE—{mÆ%`òVœ8ìëbIpTa/ð,íÏ /oÙdC±I!QÅŸt¨éù<‘³»“ëBÔºÖ8;3CwèˆÆìðá‹›Iûv}š+±ë`ÞJNmÓ‰sL¦‹z•ÐÚ5@:Eã°Ô@i WißOS€>ñ,ĸøôòH¹NþÂà¸QiYîß¼zëÜüë¾:®Û×úäÑu_·²Ÿ~Ýyø‡³>úu‰Æ ­Á‚ªËó H¤î|+Œü#? ‘…–Ú@¤ —õkòÒ–;;I”È̦8L“À­ !œ%jÍëÇ¢„i^Öž|¤3opŸ•pD_g©«HR_Y̵¸Ò­àO®N’P.íùŽú1ks‡uŠ›‚ØH'ì0˜6^Ñ­ÞO“8!¢¢ ¦è;’±©ÿ–œZu3ÝÇÞŒ„×;Êm­ÿéÏ6º~ä£ý`x‹;UxJï5¯KC×$†n/óª³\U$;7bD>å˜yô)µ?t| {U‰Ê¥‹×FäOŠQ£åfGz©ÎºëºÁÝ”ç 6½ôõ1[S£ÝÆVS…¼ÂôêQXs$²Š®Ù²~r~GK·¦¡Þ†Á‹~ äé“–ŽZj_yeèöâeã5b„9±Š‹TúÒÈã&%l:« M &ÂTVvÆerÿÐJü΋tŠºµÕ3 ]qC¿lòñÊ0"®wÁËTH¡Â=ÌãÓÍ®{í<îIsxo•xrè1FÑZÀë ºUb1NÒŽà*Èßú˜Ï3óFãa²àìmðá‚Çš‡Owà³ù ¬SÑ6+È?ðh†IŒèvDWù1ÙÈ2#½ÍyD1“÷¤Hy¡Lë%öüذåZ‘ _>Ëà-$È=[lÓ-²¥ÿØ(ÌÏ€Ï]’@R(>ÉÇ^™ê„³†¢Óa²a5Co1õf ×]ɉ±öÅ„ÙÄ»= . 'u÷ða¾=ñR«öÀðÖ–qŽà>‚±¤&Wña!évdt‰ðbs(ZS/(N—£YŒåÆ»¸;ÉÁ¤Ïßáè°¼-ǰ]ÈŽ—t,Õ¸;yKÓLÊ&¢:v¬%àÎÈ®UÐðAÚ3LåÉ6!7±{93-ŠÌ„²Òû“ü´Z($éW š«Ðe;\¦©ßáHÒoÐãTÃðäâ& 4‡ú0ÍÂ;(^[¬)çÓ’)¶xîá×Þ8æ`ÙaBÌ · ÞäŠ"B¸ò1¡Ÿ2é›ii°zÔÚlf÷ 1–ݒïBÖLòüóYMÕ))G·û;cl“ÏÝ=êÉó¸+W­,æ7Y6Ëjf}+3[ljjl<¨ôÚZ鲉îìG@xÃkõ„Gº«> ¡¡¹¹· uHm0èæþW3i.iû@±Üèï¾µðA_&ÏðSzï­éØ!jÌ]–F~BHb2*™P¬*9=DùN6]&Aïüëqú|h¢žŽ•û¯™æ-üÉ£)¤ø‚Bî‚`jhõ¼“ÙØƒ{TäV¿€\ø»ÞqÑ?GˆÎ匲M5bÂîuo>•U¢7ÁÜsK­p›äƒ¢ƒõ‹c®ƒÚèz¬ïá§Sl˜5(¿›Î c6æ¨ÕP‰H±ÑÂ0·’PÓÎ2 tuèÇöAúA ùGÞeà¡~‚û{, ÓÒ¤|y™¿°÷0âÝМö29nÁªÙ`:cxY[fIKµÌ‡ã?{]z7îv¿E"\nÚi0ÅÕv#dV§YÎEæüšžÍI_AOŠ#{CŠ´Y•Ž’€‹:²‚á¸ÞD´49«Æû'¿='èKߌüìɉJd~,‡x¬÷\¡·6FÑeŠqÞ¤¨X+=å ‰iãÕ8ð.ú­>±Q€6šÁÙݱÔ#ÒÇM_»öç4.â`/g°^|Œóµ®N3›7ZF>ïyÈ^e eÀ[éðF]5§¬hû’KQã6zýX¥ùÆb¸Ù><#´Ö}Ý„?Ü/+\×µ÷A9âS¾Ï=i,.ô§6/KO¹¬’¹  Ö?nðßÈ7½š”‹LP¸áK©$~/„\dFêj»çoh°ë±çìÃEE¿O£¬i¬ø…üJÃéñ‡ÕN™µðÀ¤`Þœ–:+ŸóRAÑ8ôfCÉÖˆ¯Ñ¡ÏQ _Ã,é,Š}  ²ŸÜÖÔ»¥˜ÃW‹O»¶ª^¶Âøçxë4*âC“}"¡Ü5e‡¶™¿íd Þ×½ (™§PBÒkÅ.àþŒÎUÙœvê‹ ¾‘Ê–Èпâzjº&azÂ2² k+¼þ’㊔ÚGÉFCtÍ¡Ûn€Ó)ä°mµbúD”vhÐ[žåûAeŒS{}Šþá0¡zFkú_õ#Vãc' ^¯?Fi¸*ÛQªBü)U×~ùÆDm ÖY$GŠi2"=ÇÓ€AZª_]Û fj{fO¶P–còÖžo6O˜”­[Èt®´ï©«CöÖS}÷i]¸Ý‹z±L òº¶ÚäºTî'ÝàF„ë¯ìÅ„@¹eðÓcwjmãcˆólßkQE•Êáׇ¡´äŽM©)†±®#HY:á*f3²•\ ^(†+4q~ÖÁLƒGYþ‡¬j²ÒÓço9õ˜SÎ}›<³]ж*¦:¦Ö(iÐ!æ'¼èñ• dŽ«Òæ¸&|.¼Lš˜g•ýŸ ˜(!ãÞKNú:íVµÏʰAõ¯lY6,=¿-!d!ü³kjƃKG¸e°ï&U„¥ñÁ{XŸH–&–œ:$ÿÔÿî—ßdhج`¶¸\âþhÜ ð+9»<¸Vý»a:‰ˆhL¼ñœ•”‘r*ßaø¾L´b‚Ì'g¶A\ak ÉQ½kCu3Q©âÚ^ ñµ¾ÁÅ]ñgC¼nŽ92õkyƒô‰6#¶*£ÿ§ ½ ì} Ew|hÀù0¶•Í‹Ðø„ð×ùá tTÒ8¼ô¬Ä«‰_%Û7³ç€ð‡=0*iZ™7ÓŽþÌX’¦û´j”õ 'DvôÝýð¼¹l±]é¬ lí>qED¶íXp6$<]짦:ÂëPu?ËÊLù²'#="êëEŠw‡æÅÈGðZ=ÝŸàt½Ÿ>ûÄ㇠×á(1®›¬ ½$ ¨WýHÀ€ùUA‰§Ó!Ö¹Y«w7£†‘ZÄA³CWz-݇ƒ^*>¿ñLYËê¯K½6Ó¬D)ÍÏBBa)ÈüJvH 9|ëî5ã™L¾ë2¶²WÍ+…ëÝD®*¸q¡BøUÁp؃ø{àN­íù9‚WÞ—ò”?˜ûÏו V­Ž&¼ˆtv»”EÀŒÞ Iý°]zœ³XÒIX ²JpˆÌÌÏÒ]U[­>åEæÝ0‡SSE †”'c~Ù #d¿btló©#NéëG< éשwNµ™?Ûó†ÖMK{s{W¼gÙxõ Øn’€Tu„ìò›\“ªóiÆ©rt›Ü„ºW?S{ª´§À“;>†÷±åisŒdÈ–Jz¶¦Ê@ÌxG·ù/}dY!Æ3Ú¢sùu’‹¯[ÚtÊöìÛHìÉŽv{~/ü65›v]0pÑ“^î^ÈôjhVÇGZuq¹¨^­¨™âÆè›7’åÿ@î[d·^™æ¤€W úö=öoTø(†8ŒNßN‚DíšÙÂf¯NX¶èßkÛE ØÊ”WŽ´)ë³Éy RK¼Ú*oH’®¼´thN|M®v¿Èäæãüv2> gkë†:Î˃ä\Šs͵®¿ŽšLàrfX¡.ŸÜ°¥…ÝŠƒŒQÎÏ-¦±KOÆÊ"£-:¿ ôÀ"ýy¨g#Pyâ}ûˆÜѰ?:þóÍ|Åe 3zG\À°“ƒÔxI9¯<ÔuJ›*ùøKcË"ÇN…[Þ¿÷ÐZ45AÞ¸ Д  wƒ³swãÓÊÞÃÔ&Ñ=˜Ô©?S£ë^oGiNC-åJ6èß6"ä×Ñÿ©p 1¯IQó19«£¡`> ß+´ÛºY(JèKðmZù!¤ÃÔ×ü‹f2Äm)Í?Ê”uZÛFú5uKùê•L% .6—7Dä¯k‹eë4ìËcZmªˆ§2³Á¸QBæÎCQâ;Mâ4ò(rP÷wÓUfIqëñcŠ':w,8ÌÆ›|È4 4BzÆš¿·a¾r„’ º :&Ž~ìÁ¢¸ ¥2†'}>–¼Ìð@#½ŽëEYÓ·üÐ'Ž3 þ.ŠôümA=)“I"oæ~Í:m¥O¢§õòlõ |:jç8cJ{NSOûOê lŠñ^‹£Ñ¥ÔU«ÅÜÇ[Z ÝzÍ_glIy…>“&†ŒÏUe2ò¯Ô-f˜ô‰ë¶©ÝO|äpeÖs”FäH%¤Â&,ÍP¶|+þ¶x>×K&èõ\"ÁÓÓ긠… )ŽÓscq4i6™6-Ø"ù -[E<þ lNŸ¹LÖ§:€æÀCó'¨pŠ+ÚþÞï¯{Dd'Œì!áœð–®Þr@UT*ßÊ&«õe´äº‰CFF²Lú˜çÈY¢èÄaRlæóxOž¾ÿ)1—B­Šh×ý j’'8#õøbá;Äx7S°hâ+azÑp¯h?ç%ÿ —´„ÖTB æ*Rzœ Eïé‰Í*³´X‚¢à¨\Phé¾hÄOR¬³g“wI0Cð¼Â€&%:¼1 vÄ­¾"Ê’Ëòmž/×(€# ¥6‘”e»€_B9Ì©A[²åedã*PÓ^ÒþEZ1-:)Øu(%„Rˆ –•M[4#‚!ÛpIÙA¢hãö6ÚsŽ#óA0"P‰Ü¥êFZýW­­éÝSÚ»ÍÕò쑽nsèEê@YÆFz%¡‰‡[¸ ãî1o¡ò| ⟇X¯Üx‚‡ReCc@÷’£òåMî̯©óäYã|¦®ßÉù³ä‰k{ÜÃ/J4˜^ °Ÿ/x¥Ý¢Ý=·©=é€R¸½¶ƒãfWúÂ6 v²…ÜXG⸽BÜÓÞB-äŸ ½œ€÷åwáz©ÍRæ?÷S5›ýõ ³´ uÐnGÓÖúëÏ<Œë–ô¤æÚ" xöL‚½yȶ5Pprô Þ»ý |s k’z“×E¶1lãP1bô}Óún²Òñ9è^VaŸr"•’/^'ñš¨{^ºÍl±¾{Æl…ÇK·=%X7$H æ}’LÁ?„a t9Œ 4oÜ05bl– ìÃiHë•ÈÁ—,t¨ò‚¶~k¥ÈXWš/]ñû(Æÿ¾±®ùKVÖå×þØÎf÷–O[²£nþçoîÍ¢Ï0€ÇÆðò†-Z3u¿<9êr¹Îßõ[*ûé5v-ÉWW&ç’aYx<è1 Ú–¹bÁ”A5ÒS…’»Û¿GþÔáÇ‹~“ ]¬€ÍŸÁëô¡”'€F¸^þrxPyª¯øZO¡hÙsÌ2ǺÕÈiÌõü©ò±çÖåèp=ëCìw™î’â?79%nRÑýo›yæðª³ý2ôåßQÇ@ô’u8ŸUÑÎÛ/o¸o+yT £îü Bì”7rx„ôâ—íy~šKð0Íî:ZІO f+(LÝÉ` 2UŧʉìeS8cÏÎŒS徨•˜?0]ˆ(1küÄÈÓ?ÇACÒÚ?B—} 'µ%ÆÕFëíg@Úùiwÿb€4ªøŒ>ûnÕU@3·s¹fð«¢øV:¡ùȵH­#ž7CÌ3@纀ݴ=äµrw¬âq“JÒXÛ:E•·ió:PŠ­ÙŒ,³ZûËE4ìÒagjfžHzÄY¬Ô#òڇܶÖnä ¥B™ÚN¦àP˜êJ’´æ§üü€fô¹tŽ’X¦Ûǯ¨ÕðÐ(I¹ôji8¾¨²mÞâ­3V8¹npy°‰ôöà`îl ¼Íw€¶ƒ€æa%KJÝžÇÑט#¬ý5·PÕ¾ëæYô`ßþ ˆ|zýçÛ¦yÊßGôÄœ|†¾â«æ{¢¬ƒm’¿œFvŒí úÉñÕ@.pËÄ´y/Ó(c¼¹Ô’ñ{|!{#X5) ªÛÓ¯DªÍŸÕ݇¹t`8æ)J ê©MMãÁµfY4¼ç@z!2±£º:¡¨©'í>×}ͺßð²¤a‚ƒèØ%H·…˜ƒcnÌ,1‰NæoPôº%_à ˆ3 îXnRîôH±¥ü)à¿$GÃÕßm"\¿,ÇU%Ú÷óNK;ýPÀø}€ÂõvšÕ2éâMÒXÌcè_ô;ª‘ëqȶðÙO1ÂûÁ¼ÍödFyBE—§’ó!Ú¤ã‚{ˆ±¹Cí# ´*Q¯ )I^¥Ù+è ü#ú‘…†A%"äËøŸR-Ñ"ÎòIJ›Àª—ߌÎààµÑ·ß=ƒÙUå¸Êr0EûŒ§Ìy¦Vˆ;Ål S.y"ƒí¾«¢eU\íáÉŸMBp~J=‹…"ã\]!ªý$`€9JÐ9Rµf€Ïu¸UÿL#]+ŒÅ¨c ÝÁþûó}1 H~|õ\Y cð-)?«Å”±Ò0Cú9qEÒñ›¥úŒË¦÷QÝÕÔp× Ú°ÿ±‡ŸóºôÛd;þÕ0+1ôìãټȷË[ÈYÌDR™KM¬¡ü9R²¦oQ¿‰bêmÐ PÛ! ž}ÊNɼx±Îd´˜_rïòQs^xÔd3KÌLR~Zñµ Åÿ6ídjÚ~¾ÄEΑ‹ÈM¥õü5y™æaØ‹ån¼¥(Lx;éª}­P eöCTßœYi¢Du㤠¨á+ ‚™~aÄ´¥ä ÁÉ•ô‘˜VßL7ø‡¼ÿÜ\\Û/úæé%±2÷²1BL£W™ žýKT\D&Ç,>:Ûr¨ŠsôÅ8…EêçÏ ™_0wYˆòÊSd‹a9Ÿ¡L£nGÆyxâ_ІN\¿&ÿ0œÔ³+¹øÚ·Xy±ð½AÌ­úó’­ N2N¥ –ÍyW“ôF—™š™ˆ,@øQVQÜÁ”V§M÷ç (ý9Œòp«ÞQª´«få8(õDŒè„µNxõ9ÿFÕÑJ\À}1J@/ –”žXyƒ‚¡ð½h«yf’§J$å“üÄWçµW‘U[ƒ»xðŠgCÄŒ·Ã ú~ÝHGìÞõGü{Î)Üì”K6Ebäýh/~ꬪ©HYùwµˆôIÀ€XËF8Ûrhw‘{:*Ÿßþ.°ƒ0±KÜ4›KS=0£ þ[tJŸ†mñ£F1ªMYO1Ã<ˆSÝ)­kä?77[=ËsÖ§d#hNÎîdTjŒv;æµ‹Ô ,'-o¯”жLä²7XiE-¤RÉ–Ÿ«œ)4j:;”Pº>oh˜‹L9«çè«Ê*pqü«vɪüEpÎJNÎë(0Ùv…O6´4ÊŽrŽUg6 ÁI¢”õ-~)] ¼jLVhéM ½@B~ºúbסs!®Ó‡¦J×.*”Ìn¢Sc“›áT¿`T§Q Ë¯œÜˆÙ£§6éõ¼s~WDÜ{p2‘„o&1Ìçºk¾‚Ø0â•ðÊÄîÜ¡«öFÂL ³LoI âYñá»i„i8×4a”q¹—Š^(æï>fÆ3çÉRHÓ¶¸Sà~hHg[oŽ6 ÎMŸû••ît9܇s¾ ß«zÀŠ-MœÖMÒ‹-AQç&XNV>$…Ëš<‡d½ñøºr5'”vxlþ5Ô!·–è8UÛ±Bé°³î…Bh`¨0šû;nÐ+²kd[•·‡¥qü¶"—I‰Ÿ‡ñûz”œô|´¯—*d9 ÷9W@*õ@/´’,ö:!¦4<ñÇz&Ëœ áƒÒülÑPKxÔU3î'½Çz‰\Å£ØÜ“Óoô&¼£EΙx…ÊÆJ| (¿÷J¡;d~Î% ·ÃWõcrU…Èн…zÚÓÇ_q¦¾&ªçÈûd>ÒÕRb òÛwÈÊÁ¿yžDþìomÇO@²ÔÜôð€}ÑúÕŸXU¿o´”<Ù†!]…:ª·(Û­÷fzòaLJ˜á~£i:Ð=Jˆ® {»på¡þ£fMT½Þè=ÐUçÇÙßYÅ@¡üK ÎCÖ#ÙDOÀ(2Z>åø8Srx`3Å‹Åc¡!jÛå IÄ2N¼&ó–ӸɼþqJùdS¤âœcš¢`D)Â6³P¸¿{ç“XF Õ¦|Zè&ö ûY2Ô8EÙëknîót®_TÀa¢¡t:߇T ŠÄYÎÑÙcÍš_¸KÁˆÄ­ËÕ+NPÌ(zq*]ë!>š¸*‘tâå­ùY8í–êâ‡ø1^ý¤gOãTù¿¨$ |ûG€Ý¡·±ëFü3]Ûs¼=¥N5Øâú9>€7Fvù¨ºR߯èÆCl¾ÐÛ$?7º¯"tM­¶g&Â/‰¤v~%›Ÿ²Ô‰Ô¿’¾ÊÄ[}ó#KõmB~°íÚÒ.§-¡TV ¨ƒq¤š¦þåÕ-Ûü¶PQJUýÇ÷Mt«Xi˜2•°è­x¨õ]ù-¼[Ú€—Ô“6r¤‡PÞŠ'C‘TÇqšÂ¦Åo3ðšCÆí<‡(Áz¦ÍΊÚ ä5û+½¤¿ÄÇTƒâÿtûL –¨€‹Ø}w7H5Ó« õØývóu'ìP3ÜÑ*Í®‡6¹§6C cØí¿ÊD¨.s°½±~Ð :ÿ#u?‰ÚЪ»ŒÍÖmÒbí§…'=Õ¼Û<Âõ¤ï/ÔÊÛwè°­M1ÓÃÕ%RÀ~QÚžC y>îZ$ÃFÒ6¹0³›¼Ýêe½O²€–8¡è ®O\ÃŒÛsãÑñ{~u®[ë ÃQ–•+‚œá¢²BÉ4ÙllYo²Ó_}Á!îÜX­â=æO·ó†.qêÏú¥p\ãRU]ÓFêôœ˜ÆÉÜîH‡Àì*bØ1rɪ•íTíuúº!ÕíÍ!ŽÌ·>sÚ°û­WüVfó¹K>Íe"Ç\´ã«±tÈÅK‘üÁ ¦_ñeô}xÏË]ëÑtßÝq*$?î,b*)–t AH°D.g4¼d¡Ÿ#¹F«<íˆwdŸå.¾·c$L&*ãëz”.`Ä®ZƳ•âfH·®TÅ%̵ ^íÃs!¬6^ YK˜ „» 43‚M>¾SçEè’,ì6ëÛX±BÖð—ƒx!'Îa©ÞKŸó0Ç€ööKV'ÅR ÚÿìåÞ˜Q:æ_™W EC¯ÖMjň#Ø–øÕæ;¤ž§[8#ŸÜ1´›F¢Q·á̯‚bëÓÖ3leÂmwC“n›ÎŠ3"xö=”“¨&2à;3pªæ—›ÌRê‚ú³2«'1k® U;ÍVw¤`6å¶‘×Á)€e4F¾3ÜtüïªÏ×VV"h”4núüÌf#CÜß²Ï~ 6'Ä?ž klÌgÄ=L‹`–Oõ©·j!rHx]åkuénr N¸uÕ%1i 7ƾ•íûí8Ʀ«k3,/OoÖ]ìnB µ9¯ì'…9oµü`QWûêCa_ðQpÉþDÔŽE¦2…×KY䟎Ú1û^¦uǯ=áìP¤¾CgÃï!2,²‰Râ¼:¶Ò!A¶\^_ÿ½«,Í‚%€œ±&ãRc¢)¨?[eï9nTµ¤ÿ Ÿ9J¨ýòd%ï>団½†ãÕid ºPõpãrço³ãbAÆ1ŽI S/"¹Ðv`\@è²tÖ½Á¯ß›„é¹\øU¤ ×æÏª­Ý/|¿¬‹[-ùRTÅàsê+Ý7ñ¤2bÒ~œ“¡./Ðs·þªFã ƒýÁóä*ƒ¤_“Êd‰½îF¬Ä:ŒÓ‡62uÿ¶ÇFC›‘.bÉ~"žE= ¦~ãÔØhíAIš:; … †ËÇÌ+ö„о^êœätoŸ[Š»Þ…Øæ‹DꣅNk›¿„Û„’¹rkýfþ‡Ãâ^.˜ñ­Ê&Þ«6›—VIk’l¦ö”ë‹åX/Óì\~?v.B,3ùK-€FîÀ+ûVhoÏ?àæôÒ«-zÞB‘”=ŒÚ‹g±J@³Þi%é¸Gf²Àœ3@ìñl'ñ絫íkÔ_ ¦ü\3tuÌbd#ÛŽœS$è|B¦1K4èÓ¤óÖt˪âa¡nXè‚R¸Á(ÖõK­Â$c[—çC€®<ËŠoQ³®¯œü\ÙÒŸMŽKšozÆÓ+Ÿoµ D•ÔK2mTÌK^ZðxER%H–05Þd°iO½­Ÿa±ø¯‘)àr)Ã\›Zvt ;¤Tob¦m:Mts úü//Á=K}ÜüÈ¥­ñàÒÂSÕƒ–ug¹\ZBÝC;K³3sû:¬+Ìþ¤Yw yú3–nbê„Yêù"å9Auºêë$ìvÄ*!U‚2sò•i©ŸR!éì1%Œî ¥ð>í¨jjDŽñÑlR»/ÂËd5N‹âTþù‹:z¢YA´Æ åxPìò'†G|_î¨Rk×CZŒ•u¶:‘¨pwŠTÃîCSëÏÍÑÜ‹bNèvò\%EzÒö¯Ù ük½x„àddª¶ j©,V*e´@U‚ëtxˆã²:šøAÙÕnꛫέè–Ãþ3ËP9­¸?L ¥ØÇî-Å~Ë-¨X©TãÁ¯77ž Lް0ØIÞe ©:)¸±#F¢ÊK‹©s þhHøXjV–þ”&éÇ,µr§^R2àj©ÚeeÎëaØtöGY6„j’ ¨ž(„ßÒçs'ë8¡Ñ™_ Cí'ÓJ<#39!˜ "Ií_ìŽ:¯Ô±¨ L…ûe–ÍËåÐTG§H$Œä\µ£& , †<â‘Z¢’2)âd®Ë–ZÒG’ðóv¾Ÿãˆ¸_³#ûA¡Ð‡ld¡ç)umN~–¨5%Cý8K¨ÃÑ¡ŸÍ(Ë¡rIÊ–NQVŒ¡ÂJ aUÒ©Y \GÌLI):â# ‚#®s!’XœKc¿ª¡GÚMTüáfGO7lg{³f¿Î¿éò3¿åA>(ÌZ` ä¼n8é3PGÌpW´J2µm30ìäWûD£¸b3–ì/ƒçfþ2ß„c{Eï+êz}L\¨58< ­†ó“³¼iâº:ÛõàØ°Ï¸$[Ñ+~ëTÆ+õ`®žðG²ö¼ò#v†Q‘ ,mýÞÁ\ÊYñpúu.«$J'Tuw¯(ÓÀÌÞ1g¤˜:¯~çÙ;‡ò«Wïéo¾°îßùº[l*^ÝòXEúÉu?í°i”KÌ\›ëŒ]bG¤.RxÖF,Jl1oNÄs=S‹:}³qisY‹p‘÷&楠 cÿnøÞ’ä›ýl”ú+áùøX‹Ÿ–Â#Zª9õC»+Ò³"OâÚÝ)×þ§ï¹'Ÿ…¡'f!M>-èâíjw,58®ÊØhjÌpªQÞÛxtMgŒüdá]ÝeÖv\–ôŒ*pvò7”¡Æµ¾ÓïåÊ[GU0ü}SÅÕÈUb·‘؇“[·Ù˜kr‡Ä‡÷u9B™e²eíPú£a°D5>å!«Ì6Ô~ŸütÑä0m¶dž[DÒE¢ O´ûüG½b%Q½“jì.ö3 d¹,(YÏdΔw—ŒŸ^=§å~ ˜â@ð|¢òÕ÷5t.írÝL.˜›je”9 AË™6UEΔÜcüiÈ”ñbˆ™Ï^7gfŒÐ<8â÷¢xq‰Ð!¶Ë~ÿ2ì§Ï@1JÝ»Š¹çWÖH¬e1™"7uU§%73Ï>{Æ01&øîàÂ…‚]‡öWîG£{äÁ«ó ߺ'toD­Ð9VжqÊ£þ°­jâ·Æ}–!-F‘ PÐw¦ýdƒ’ i©T¢À¯).xäKæÇùµÉÞåKÙ†cjÚhuH.§’5õ$rîÃô -E÷o®Io}[†Âôƒ3êóývëŪÊ·óü«ÁÊ ©ûP*‚`¥‰gá¬mƒm•£ü Á™d=<6žé`!˜Uòq“­Éü¬®=Ã%ÉÛE(¹®bLiœ×Ò_í€LáÑ´DEÕ:Ç€.œ¹ÒÙz_ŸÂœ°Ñ<§ É+ñгºß2 RlÒ8í’¸%Üéûñ•žîÒÆóÓ³pœ¬“Qd׈ÛãS]åñ³oà¦WVø,d^P„åÖn‰¦lÚ.ëóƒøÿþŸ0·šº€A¦.vˆÿ šÀ­endstream endobj 77 0 obj << /Type /Font /Subtype /Type1 /Encoding 367 0 R /FirstChar 2 /LastChar 121 /Widths 371 0 R /BaseFont /BXHFJA+NimbusRomNo9L-Medi /FontDescriptor 75 0 R >> endobj 75 0 obj << /Ascent 690 /CapHeight 690 /Descent -209 /FontName /BXHFJA+NimbusRomNo9L-Medi /ItalicAngle 0 /StemV 140 /XHeight 461 /FontBBox [-168 -341 1000 960] /Flags 4 /CharSet (/fi/hyphen/period/slash/one/two/three/four/six/seven/A/D/F/G/I/L/N/P/U/a/b/c/d/e/f/g/h/i/k/l/m/n/o/p/r/s/t/u/v/w/y) /FontFile 76 0 R >> endobj 371 0 obj [556 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 333 250 278 0 500 500 500 500 0 500 500 0 0 0 0 0 0 0 0 0 722 0 0 722 0 611 778 0 389 0 0 667 0 722 0 611 0 0 0 0 722 0 0 0 0 0 0 0 0 0 0 0 500 556 444 556 444 333 500 556 278 0 556 278 833 556 500 556 0 444 389 333 556 500 722 0 500 ] endobj 65 0 obj << /Length1 1647 /Length2 10645 /Length3 532 /Length 11524 /Filter /FlateDecode >> stream xÚíueTœ]“-îï|bÜîÁ·£ëN²8Í%ñ¡bèÍÃZ¥mçcÚ d3,FO=ÒŽô:›SX‡ûÌË®µ»9®ªfXô„@:ÙÎåŒtvÇàOåšçK}ëˆák–\ƒ×ñ® »&ÿðˆ6þ÷Ý-]ÿÈÐà@÷|ï1SV 2+:m„¿S±ègÍr¯hE…ÆòÉÙ´AžŸPd©Ü½)ÅZO èK Ó6à(Ö—óÛ…äv ñ°T^óï‘_ájOëx+J¼²oöZŠPn¼Ç%:µÜô¹A ƒL¿È.Y7|Ê–é×›¹5Ïc¯¨‘NÌÙ[!Ö‚—ž°Náx QH™5ÀMEx‰eåZÓSxêzX§ÊóîìÄn€"ï‹„¤m¢ˆ´J£Óoü?_ìS€ðEäùI›íÃìÍR@<̚Ɣâ„gÿ$G¤O¡ÎàRfn­Ý3Hh7D$"7øH÷1´ÞÂ²Ú € šý:Cï£gÈUÇ/2m:²—ò80oz’Ž|,RFLÎC] è¥Í;üÑ¢qúT«Hê_K7ø*ƒ0gÛÎÇ…³QžpÞç!­Ãïôù[ðô;b°ß^<ŽÜæ¼qÃ~¢t7"/lå»E/ÁÃdžâ8‚½ELôx¯õ{‚Z„Ž•ÛÃ*ÔκJAñ,|æÂ1Öô¬‚¥À§ÌdbëÇ',Žm¿^÷£äÞºœpåòbOw‚’Xñ¾øLCV/ŸOÿ;FçWI°p'S¯°Þ㧤T‰Ø!FŒª GhLbêil£–^{c-ÒûvÏâÕ—D¹êf4²¯¸ÆÙkâi¸ôqÛ˜0.Ê?¸'ëÒázlË=w0bÖàu[¸]ƒH\CýY4Ôú½ÉP(YrN«O “^ù>“‘Wö_?Um†ëeú_¿wZ-0:#« øÊñ>ÅëH1‹[ŸnH<{ÏPV½žo‰r[ùb£“žðÙ-b ¶îïìwby‹H‹Òü:eê.iý™×«kuÈyî/Æ4H9×6ÔiðMj;CÝÄV@ɉ~³zt dEœ`{­U&I' £tG{k3 Á°Ë{.æÒLIŒ^C‚“mC׌‡I©¡ÿÂ\}¢“J–Õ$•"ñâáU âóÚUQy-Gt??jý„€°`‰Ãíªlz„M—ƒÍ¶k’¸æêÄ('[õô6N—ûQVª³BΦn©×6Þï¨×ºTtX"¥P™Ì/ÿò¦¶²ÑÔ ¤[­w²xçöHBã«`-”jˆ:B»­D:ÜÀhû ýô×ÁÌï•×Û:îå`úW³?œ^¿?ø"ÁüÁF²êüa:ü^S½éÂÁ­˜ÄWäŠ kxÝ"ì–æ8ðs5ÈpËUš’Nl©_'l.g*|ïÝ>´/Ö~äÍ–èæ9ùøÐ@²éLGªRBA:‘3û“ýqe£üÏÏß(œv‚8Û˳¯d‘PûÄ,Í#»æ¸ô\¶-1ÜKÌ‚<â¶ûb…âèVÕ»lýÀqXÔÞfBìÑï2¼È˜m0)ÒqµèÙ2+q¡¹lnUxÊ«U_¤'@…S‘ähJ#j#Ÿf ‡ð.FÛòÚ³]ÑÊ4ð­ÀK!¹ËÍB•EŒ£q¶5ŠïGÚªó81Ï w>Õ(a£0¾¯=3.˜–h‡0) ¹(fCõ<—.k(çœt»#5ÊìUk8/»…w÷C'!Q¯ÿŽD6îS§a¼ó×Å_ßâ]®e„¥~ßÊIoéxšÃ<ãÉò^(‹»5æÕ™Z–&ÈÌÇe¢kÍÝ|ÿeÁMÞ¤yƒkÀjéIa„[l³¤¦Â3ƒåeC4åæ×£‘þr›Zµú;ÎÌÊ@r‚Þ)¯Ê¼Þªз!—׬zù6Tk ³|1_«²av¯ÊÕ¤ø*S/WHx0øöæ88†¥Ö*yUælñkµ³‹’…Í V)÷ ªé Ô<÷Èx» #†*ﯢ˳7ZÒ]®“ôU†Û$H³Ëïj¬9 ¹G:¼ç‚æÈ­¡3Vç³<-Wu6 .ß¹—ã)ªÅ¨J»¹¤Gr+ìÞä¨I4<2ñ}dyê<h3k!OVÖOóòŸÃëÜ-¦Î Aï{#‚ûfŒì[KO2pPs¾+3f¸‡÷^à7€­q«³àý!¨›ËìÂ3Ù 2^ðíì XPÕ·1+RpôCŸêÍm˜R‚Â’tbö0à…´Ð¼‘mÍ»»Xçà[±o{Èöh)o AîƒfÌÙ¹¬~õ7SŸ‘žŠ>5Ï.â…Œ·x¬àU"쪊ŸkÁ¢:ß™E9ùs°KÕ5Ü!9¢»8Õy:‹¾Ê¹øª>ÎÁ™V¦„“P µ$`2ºŒfqh”*z¯ÈÁ»·$˜âŒ¶FÙÑ„_aÁ,Sö•{ö1U¹å†Üâ<ž—¤Ìâ¾X&»QÜVàã”êcº­¢GüñËû>•9£XJø8>1¥ÇÞkëÑ¢¼ßžP"À<+3[yÍ6ÿi)¯qI+‰@ȵ]ã–Ùÿ|úûÈ¡*ðÊÔalö(°Oôû¾Óv˜";_wö[}©Ý’Wð”*ʲTž¥pò¡N<5bÇ«rœ ãh\³)é•‹È©ãù'@la¾c ²ãDh»ÚÊ*èb.Ë ÝE·«Eyž0ÝáÃÝušx„”ü…6Ï7TÅ U=¯q±ç}ä0‘úUëKE@A8²IÔéŠþ@rMÄÌ|±žç±lªBùF5Šÿ÷è‡l‡2=ž4†_áŒO:òò«|9-cÞé´B™a=Aö¼Ci©˜gI'1¬ ŸÖõfZÁé‘ÇsT3 GÞêÈð£æŽ&«¹…âÌkÜÇdÛ«T˜y¼3´D¯òèËzV„U¶¤xÞ¶o¾†?°³ í; ùé9²UPú͵ù G÷.“‰¥Ÿ±rñçÔ I_Fu¶Ó¬àUËö]â ? /¯È)Ääœr…¯h…®¶f2"è« õØŸ³¨FLdžÉ.õäTš/È…N|·Ë‚J݇ã——sS¢!¾Ÿ°rik %šœX[NËØ³Gæ1,,)Í¢pã°Ò„·&©¯·½Ã£U®H4í›Ñ‰]BY˜ë½/Oä:Ï´,™'l¾ë;C¸q戴´@ªX'>Péõ{sõ›6)Œý…ŒA6rÅ?Ìó˜sš÷ê„HBJ[=E©N‡¿B¯†¿n²T‰ÿÆôæöSD\ù Œ_E7T37ƒ˜êG5³o¶h\Ccn¿Í‰¡'¯‚\@3kæmø üAaÅ£°ŒDÊQ¦•SI¨Þ¨"0qØÿ:ÛÚÕ¬2ßU«½îe‹sŽÖ±R…ÓóÛ¦qÜ>ÝS4}ªaóð léÍÆ$é¢2‰qÀë4J;Ò»O·¹„W·69’Õ{úVÊ…–†¨û&ÃJþä²H·<¢_K ¡†ŸØ˜u'{^wM®dMLüQp”5Oie%þov æL·–ýÇDæN…ÆnsÝ\|eŠzèÏÊ××(· ÍÄúÁípÄM™.”é‰4+Ç/ŸSs‰{óx±NÚ©íïcqöÑ­‡±_»¤ŽÀàâk’Œd@WJ«ÞMð¬£kÆùöÃõeÉq›x»% ž`èE$†6.RïQC¹Ø²ØÞÑ ÇuµC.X´ÔìK¾%-éd,¢t¶*@!8D¥Í¦X«î0«·¥žŸÞ7†Vˆþê“x#òéËŠÎßU%Ov$͸LÕ“õ&ýz•¨‡ç {¶‰‰p‘ÇÁÞÓ.Ä¡é"B¹©œÿ3)†"öà\ßœo"³ÖJŸøyÅ@õ‡Æ†Þv¦ÍˆD6O,nkç`ú]Ê•Šn¨Ew'w²Ã}c¼ ƒÎìè£â@’RŸ¤ùC/9[ðF«ñLNŽCãþ)ÙAšIQLߣ§&/|ï £LÔ˜ÚÁ–ñóUmõäÊÊrß ‘ö~.Ò ðS¤'yaQÒÖ¸ö£:±4ã¢Xرc®»„¢‡/F|cêÏ«àû´•ð‡žøUšõ©—É5¹ ?SèêS­\ñ°%+\ýºšG×™QëwYUAYá7VŸÓ‘Ù¤ü‡&ËÇ ã߾Ά©Øýð=Rá è«ÏÐÞ—ðŒ ï?±Uò%T×3œÙ¥Õ|ñ$Ú<¥íڨƕb7…›mÜkÂŒObtIãU²D 0X=츰†èe8s{H ö+q®5*+r«§ÌæœÆLm„[Ňy0Ã'ø!L²5úÁ»v h:yó!Xœað´«’âÞä¾LÄ;õÜ¿•2T£BZZÏH2ÑñŽ.ZZ}·:¢[˜omYrÁóø)¯Ù+Ø‘´i$©vqï²$Ý·³Ÿ©,X%×ÛËwIÂ.<¶V­jçñ«'ªÙp&¾­ÅVÞwD@‰šÇÅÛÊ›ú ó½5^H8bÆ@( QGÍogñã´Ü \êøk¼È§…3£ëhñS­àµŸ§,æÈ“†ø30­ˆm¨hõ$Íè¼Ü[;ù¢áiÆÙÑËm¿†ð¤= ëè1*§íûmt5>ýB¦FÒ™õY~Y¼?ó߳5ÉÆ7w™X:ñ]ŒŽö±‹0m•°åZ-!ÙCFF—4Ja™C+ >÷‚%i×e¾†ˆ ð>W}2»#Íâ$úîêd—–Ü5÷׺㌣`Þþ¥é|£5çxw…@ô ìGÆ¢½åg)XJM~Æ,Üøîz+€ßú±îÃ!-l)Çt¤^RîÔ±òÆ­ž•q¹Î1°WDüÖ)ëA%™ÏOÛUÚ wÄ’¡}nž¯°Ò”jö¾ca”F’†|tiF5 Z;D†­Tlןƒ2 Tƒk¿‚C͆ëº4a~d<ý‘BUíõ‘ßæýœÚ¯xBiw°%—ó÷”Fjã@Á8%"+Oj¾žH ¦I%["ZÂ~rËÙÚfH\RCŸ¾sôg‚橦8f‡µðê£u°Ë³5F×.@*‚ï»ìƒÓs† l+ÖÊ…„YßÛ”OGcèÏxø}9ßMQûÐî¡ê$zJÇFUö«PQÕÇ–ˆd†©û8ç€KÞóqjû|Zqœlܧx­ÕýF×i¤Ý“)÷àLõÅù0’)±ŒA Ó.è–Ê3&-ÝPr*??·•IöxãêÍ®ÓXý¼M"Ûm"ÿ…[% ¬ÇÕ›?0ðe,”]¶§¦VX_NìÐáÐóùëáž+:Oò4üÎÞM¾ {߆ûÚG•+uXŽYô}5Và^ð|ÌŸkÖ–>šEذÄîÄô]G4«ú•Òù4Ù ïN.ÖFW±ÑÞÎØBje ~pÑw¦r³$·ÁÞÍ$˜Ž™ŠÌ¥¨üo${Ê™³éžmé@3¤I j|roz¥ô•üOmË|_åáË ªdª§•µR'Ÿ7‰8ŽV|}£6/4ÄiZz¸c)L¢D”Ý”jØs®?Öy1-›Ð êÜOQ¦$Á³ §Ôð£Kü»µ0WG‰à‹ö4+Û dç“ÛKéw ;ºÞ—ŠÈæ0`<þ„f™gòÚ¥8‘R~ÊädÁ~Ÿ¢d!·ßØ ‰;mîÜÍYqBG„îàåN#m?Ñê!¯<‚@@ëBü@ë2^OqY—È7sáÞ¨}jƒöSûÒ[ùĢǂuíY‚‚²q.yù’g«­cÛ¸Â"íÓÏrZðé.´‘*êè†AŠQަWƒ—^,7\5ì‰A<»øºp0©gâÁÁ#|âYæ°E±˜r3Ìž~ ™÷ÃÝÂõÈ©]ÇFUQel;ºÛ7|_ÏJWvp¶”Ï÷‰Èñ³¼¶ÉºFjBÒkw.CYjkSR͇\BÝ㺋…¤pZ3©4)+PïÒ•RäôùûO(_·|ìÑ(öØ(y³ÚžáÉ›þÌÜö¡ÍdŒ¶|^ ‰Ä!ÊÑ>S€vvì:êÛaFÀÉ¢:Ë®]öÐVMMUêWØ~–£cÞoºØ{Ï›2®”`J±y»*y¿[W&‡R “44V%òò#{qcdÅ}XçÂ.°ö‚B”mŽR¦ æˆ1# êcè{è ɼÂ3\’»‡Álq0ÍmMÝ2vûÛ“Œ×æ×Ós2çÕH ø+§TbIZìâ´zöÌ(O¿ùˆ^i±2ö#ßYù~üeˆgJrEÊ‘õý@Zê«p ñÈYA˜»’²ö¼K+aHe@n6–u¸’éP•áºâsóžq»qÑçBJKëq|]ãlpX×äe¸Œ×W–…ç›po1#±¾}É´Ý;xÒÝÄOØä|iºÁÎjbò9C½aÈe¯vóù¡Ï´V£üЖ —ïqà“ 8»;bà1 ݾ(Ÿš:°Ó~:ù'j>ë¨øæ31'TÆ;Ôá­Kò%Ñk‚È‚•Ó@Jåó?zTcùfÎx½ÒÕÌ]œ‰9Ë‹h0Y•PÎ%b &{W~»Sõ¬ê ߈͜¸àcïŒH´}uëòaZ ÇŠ>©Ž±¿n¨m%a%ÞîÍnKšo=oÓóʼa \xU[ƒ&_ÄØÊF±(hÁ—½‘­†’iÏ„Ðøø‰?tÐÔaÇ©OM°ŸÍ¿u%Ãò©½mžXÈ3VBMb]#»JlI’àÇΤ=¼—nbõÑŽô4rSà ÉXv¸nú!Ö‡‡‘ÝÝî"ýÙrQ"¥:W\“®Ð? î6¾Uæ9^ÄýàÕŽ|í².â*NWòYâ+ê|µ–é¸@N;øÜS›—”!öìá=M{ŒØãÅXv?D«k€²&öbO©b8Ô»ÖYØ…s¯.‹&q„EÛ¨“~ó “JW¬:5& ã¹0"Sæ ‘û|NŒ¿|Xœ¦EÎì\Dµ·?—£½ Õxâ¡;©ÅñGJÉ´‡JÅs¦Ñ/æe´x#î~¡¹Æìâ4©n â•SŸAt$Xº|Ív@|RûÃ…½ôIl h&%„Üngq’XŒ’.,¬•1[só•µÒî>öä›÷Bxf ca à1ìQØ¡`_JcäBîÙFó‚ÑÏönÄt”ÁWÿó;J¬lµõ+ƒ¦ “$ÕRM°ßO‹WÌÍ˶1QXÖ¨ûsöw­ÙÁ ¿N}^<îôCþô ÃèÑMª¯µçÎÇäz’aã,e:DU•–$?[߬;=g/º²!i`iXònqjq54]¹m2¯›kÎÃä®Åïw †MÂá\×kyãV!-jØåQÄñb°3mpkØ$lßZ•lҙϧš÷ã™ß;¹Òc-ž.CsÎJ$¤…ÀmrlBj‚i_D´µôÜv'胖Zû<šGÛû#pÒŠ4°àwªÍÎÞCd"~À5LŠÓ€NN¶žZCßïX»@“‘Ÿ•(>J%ohŸÝ‡¿¾¼®°hÙ!›’B®Õ_P_)#céáõ®QýÆÓo$=£ð¹ÁZŸa±\WScÞÛ²Nƒ¤.”0,©³ÊuPÁ˵%XDMæZ‰·ŸH^eÛ,ñÑý)¹òÜryd;µéêËà5KKÒ˜%ïuÔE}Éòã­Ð(£9P³b Mmf}ØíÇŠ¬÷BgFt•±¢¸0´ÝÞfË{*.Ź¢C²"ŒÛ'LT–°+}ÑÄÕ9Òï¥ ¿é ‚ªñôÀ{-ð£ïû]²[9ïlÙ_$¡`Yêuk¼ãïJj°·¶©‚Ù; ËÚ¨Õåž~Á¯‚bˆÂù²Ìui}ô¬¨áíL"¾£5:~Š"a'v®XB-uCWdáÓMþÎ÷=Uœ–Ñ',?ÑãÒà‡s>”¸/FãÛµDÜ2X(+Óúëaƒc’*%#›•5C¤Ž{Idé‡d‚?á!?ñWþ$ì²>Gu“¼Ã|Wñ,Ù­‚¨Áš$ÕQÉV® µßvÞþhD?ëÕ«êEIãרç.!5ò GO6¦Xx?ZQ®²‡Ëk|Øs0Ë3j¦W¡¤Ü¦ÊÉÍ\??Ó÷ôáì¥VQå¤"HŽË¼ÅßO¾·¶vƒÊÒKuÛŠ±¥*FIîîX1{•Ñä‡ÂQ•Mf×Zvçüþ6žÆŸFºÌ.Õ ÖâÖQóL’@ËbdµŒ9¼’˜±Ô©~G„² P†AH#0Äò±8†ŸäÏùÙi@ÌOî0N4=¶:¶“º}ž°…ƒKBý‡ X¤’sîÈ­Ow_6™•j{»‘•NËK1^"„éàI^诎8:îõ'»€SÚ$ÏDÇ.A^?1o‰©#(KP«§T±ÍꋹŠ>T«6¦û|©bÿ™?£óî@çš¿ Ó7<Þxça«jbfHiR -›@ƒíå§ò‹yÃzýäïO wÁ—3/ bˆ©ÇS€Ã‰~¦+7­õk©bðî^EI4Fý‘ã†C/Ù–”ÛÈlPy‘¬»c¶…ØÕòâ»´Ao÷ ÛË£dkÿîõqñß1¥‰ ›? ûvub9YùwØÎ:‘!øK¡Þ\§ÇVxenC³!|Ÿ/ š¯¯kÓöm€% †`–@ví#»p¬ð)‰íHplJ¸ò˜†nÄU$»æ3[ Œù[J(Ï®If"E²–]i yÂLN×oz€´/‘ò‰z7ª!>0ë<¦Ⱦ2ÛóPþ¬ù­/AÄÄJ±f,øèµ#t‘¤‹ôЇgõ“¦¦Cu¼È¢µ÷œöeTÌË^ä3eï3>_ùÛ¼’Ö ¶ûËiB­'[NÎÕÐLD†òªç2¯ÕGò…zÖ•½ÔºRí1Re"<€áÆ`S Šõó²?wäRQBÿÈ\ü2£ ÊOºmÁHÉ2ø#¡ÊhÆ ô¬ª[–ù*8J¹nÎ`RÊ#¡ÙeQ;š/j"ç2% Grúß¾0õº§çv|osωïw Ÿ¿ò&ÍUð@Æûµ Û° 1³vúmCG×÷7ã%~B»mž›×’Öª:ŸpÈÍkpY_Eæ°®Œþw³là±½Ó§ŠíÔõ½ Í‚NïâGŽúÏ<º†¬J ׌Žên¼šÃ³ÑæŸpJ°Q–~€½Þ‰¿jFY°î‰kÛ>uor‡éÌ3¾KÍéü¼Ya¢çrÈÅ_ 2´ƒ;.š%úÒf¯ç7 "r€©ùùw÷3û†¸¨@âÏù^íþ'²“Ú9f3å ÌöäÅ™/êÉféCg}gqc…„mŸ;B¯HZ€ÞNº4ˆ“*Nñyƒ•GG*ˆ??[¿ÂÀV”>XѳxÒÂ@ QñîgŒ"G¦l~ƒKýýB³q‚mGæNŠs£W|Qù Ÿ-PÓp¢wèæÉÃZ”„ç] Ç^S û»VL=ŠEeÆók#bÇ¿‹üR–‚é~;¢ƒR2ûv°4Uàuac2Se€Ø4¾ôâzÌ>?½”Œ&p]PÈıEæÚ!¾¸åéEwúÇàÙìg6ò/âœ8J€´„5§B²nò.Â!ELU ­ÝL; c±Ñ€”±Ä•;¦Ù¤{ ËQWG=íÚDArä&7äå/'‹à49:•X„ aDà«É’ëDûî8F“»¸M^ÎêÝù†—ÍœÌÛß1w-O^TÇQëZ:TÇ*N ¶òNtls‚a;÷l–¶ë,%;=Q.Dµ°¤®¤árzó‚šM™™qúboÀ Óѹ¼ £„ ýêeŸ÷êØ™ ùë7”æ@=÷”Xí—øæ8:6€ëúb§x9Ü~ :1G‹¿€ô·/1½ŠÔÎZr0EÍ"Õ’ðª~õÏRMçc è°©À®¬’MéŸÑÈ,Žj~áA›Íoèeqc¥`òÛ¡bUxG˜Ø)ö ‡f¯ö4}¬Þýu¹R´‰ßl8Œ!¶?Ši÷ŒzAýXü~Óò· ‡CyHS¸sôµuüsúªnrò"3*Œ«Ù¹x&¾Ò¯sÀÑÞéùj¾gð–êÀŸ”D;[¼®Y¨Ä™†0Ä§Ï åj½ˆa8àŒs/þÜ”ÝÁøLù~÷–Æ?èÆ}G±§Ç¤ lD°CÍó8 Xþô1([ØŸµ“÷Uµ´ -Âï®Æ-\¨œ¾¬Ù.<š-ƒ,Ïšêåk÷‹ÿèzŠÂsìðHªÏÿ²»êF~õÕIù„‰Ã© ½ŽŠØƒÍ„Ǩò5x}ÃeêŒHXšûNœ¯ýJñÛkI°ií‚®]#“ŠØãóßC´˜e-z1)XxÈ.j{ƒ«Þ‚ðU’ùð<D_Óa:™y@èu2ò³²•„U%"ß2i Ñà?©Âíw ¿4AŸv¢´›ì}|S¨î¤FÌ0<5ºR<Ý÷ *2f%0Ç3¯aÙ’†ÜÄœ—÷ƒk‘S]kþ’\(NvâEà0¼ÆÄõPwöþ„7î²Õ1èâ]z¯MA½€¬mL}æÑ ŸÌW˜Ȭ²ø+I‹Çk«Á¬[ÚçúYþ,8Žî² ì4Á_]±kJu&R·§ÑgqBá?hP˜0UW&lÔAWôƒã+;fÚð ¾.1‹%œ¡“ÀÈ0HXÿk'Á ÿàºi…FÜŠïï§'7\Q˜ö›RAáù(Ÿžôö ¸¶¥5ƒ¥­âôþ:ÿÜid2ð2¦:ûóAùÿÿO˜ÙY˜8CìMœmQþ²ìV°endstream endobj 66 0 obj << /Type /Font /Subtype /Type1 /Encoding 367 0 R /FirstChar 46 /LastChar 120 /Widths 372 0 R /BaseFont /OMFSBZ+NimbusRomNo9L-ReguItal /FontDescriptor 64 0 R >> endobj 64 0 obj << /Ascent 668 /CapHeight 668 /Descent -193 /FontName /OMFSBZ+NimbusRomNo9L-ReguItal /ItalicAngle -15.5 /StemV 78 /XHeight 441 /FontBBox [-169 -270 1010 924] /Flags 4 /CharSet (/period/zero/one/two/three/four/five/six/seven/eight/nine/A/C/D/F/G/I/L/N/U/a/c/d/e/h/i/l/m/n/o/p/r/s/t/u/v/x) /FontFile 65 0 R >> endobj 372 0 obj [250 0 500 500 500 500 500 500 500 500 500 500 0 0 0 0 0 0 0 611 0 667 722 0 611 722 0 333 0 0 556 0 667 0 0 0 0 0 0 722 0 0 0 0 0 0 0 0 0 0 0 500 0 444 500 444 0 0 500 278 0 0 278 722 500 500 500 0 389 389 278 500 444 0 444 ] endobj 61 0 obj << /Length1 1630 /Length2 18052 /Length3 532 /Length 18960 /Filter /FlateDecode >> stream xÚ¬¹spfo·&[;OlvlÛ¶ŸØV§cvlvlÛ6;¶m[_ÿÞ÷Ìœ©óÍü3sþØUû^¸®u¯ÚU›œXQ…^ÈÔÞ(noçBÏÌÀÄ ·´5vuV¶·•·ç’¥Wš»þÊÙàÈÉEœ€F.–öv¢F.@n€Ð 4°°˜¹¸¸àÈ"öžN–æ.*5e jZZºÿ”üc0öüš¿žÎ–ævŠ¿/n@{[ Ë_ˆÿkG àb˜YÚ" ŠZRò* y5€ÐèddPt5¶±4ÈZšíœÔ3{'€Í¿{;SËJsfø‹%ä 08;M,ÿº=L€ÿ¨è@'[Kgç¿ïKg€¹“‘Ë߸Ø,íLl\MÿIà¯ÜÌþ_ 98Ùÿµ°ý«û ¦hïìâlâdéàøUQTüßyºX¹üÛÙò¯`oö×ÒÔÞÄõŸ’þ¥û óWëbdiç pz¸üË0µtv°1òüû/˜ƒ“å¿Òpu¶´3ÿÏ èN@s#'S ³ó_˜¿Øÿtç?ëü/Õ98ØxþËÛþ_Vÿ3Kg 3Ëߘ&.c›[ÚÁ1þ3+Rvföf¦ËM]þ‡Î èô¯Qý33Ô“02µ·³ñ˜Íàåí]þ†Pýß±ÌðßGòÅÿ-ÿ·ÐûÿFîåè¹Äÿ¯÷ù¿B‹»ÚØÈÙþ€ïÀß%cdø»g²€‘ÓÿÏÇÈÖÒÆóÿäõ_­5€ÿN÷ÿ&åbô·-Bvæ©ab`ú·ÐÒYÜÒhªhébb03²ùÛ³ÉÕìLN6–vÀ¿Üþ«­zf&¦ÿ¢Sµ°4±¶û‡¶«€v¦ÿµ‚¿tý+F %I!eÚÿÍ‚ý—¡âßApQõtø›ÛT#goú?ÿÀ Û{¼é™Ù9ô,œÌïßß„¸XXüoBþ ˆù?ÏrF.N–¿u31ÿ«úÿxþó¤÷_`ÄìLìMÿ#;Ó¿Óö?ÿ¨M\œþ’ü¯ð·êÿqþ×Ü@¸•E{ž «ÔŒ4—¬ßC¢:}=ÌàCÁÅõªy~UöÝ?Sö¹Ê ß«ƒ¦¸?[=N>ö¥iFz0m(»“—¹ø?H©{ó¾mP´sÐ0ê#¦iüò¾š—Ý‚ÐfgR?Ø™PRÖ/z‡"˜jÿîsõDíGê–ç‡Nöè€äk’RƒÑÒ‚Z“zF‘püôH90:<4Ø}Ù»G›KÎãHéç˜' ­VîA#x+/u»ßo¤õ| £Bf±g Ì÷À­i~Ì?Vú@+Hßê=gœ=7R\·ÃQfR|D”,4ªŒb $¾z.tÿ.ç¢o–Ñ“¢Ò·S3–´n{Ð2HæJhHèûÛyË ÊåZ{™Ó¶´+ü–ñ´S†˜ŒlߨÁÊÔ‡z°˜y ÿý[®sÄ7¯]KÌåò:™¡êÏòV½U¥H¡‚DÍo4èß{DŒ}_ÄY>I lK"#㪒êåa#XÏ£+€MUüüäd!¾'³±Ï„"N÷ð— ‹]—r/ê]Í?ƒb¿y“Ô½¹Žr^Àé¢Â:8ëÊ#3ßn˜‚šîùîØ% Çàò˜½Gzvæ×@ÿ4;ø^û&¿£Ð_P.×À>]Ù¶âÅE¾uZD£Ô¯§ûlK”Éœ{jñQœ{Z)åU©/±ŸdƒvŽoZjüŽ¿<'‘1׸\7-VUk7Ó»§A’=j͸;Z´yÿ…ö²”ûå•eðT!ÂeîyƒŸòë{Ÿd^X 3D­°¬¹ŽZfá1"­sfÏ i·ÑKa8ƒÖDqŸá·–í¦Ù̾ßÔñ…G ËÑ/1YmÉÉ*²\™ª!úå!ÈyÛ‹Ã2jü. úž.rñ_oë‡o"ÀÎj`;CöêÊöÙu`MH{% å¡*peEÄLãHŽâ˜KcX,6AÁ€6ôʹ~òµ8TY¸i’0Þ·kÙÄ=æ4ÂX×YšÆK¤  VÅì!Óâ€?jRk N7 µ½´âl}õš.⛚"äŽ@˜ùñ¡Õµa)KïrzƒpþmD!ù¨¯T$¨³Du3JÄý—½å,Û\ôk½ÍîýŒÃ‰~kIÓSz·ßý¡4™ñ7¼«¦Ã–,û‹Ð5c ¸TÞá²0wZã¢Îä°Iã Lúd‡cœ‘3±zÈ›’k¾îxrý•¥Xµç\í·’îp쀢Yâgqî„ÙL¾ÈýëÄõ"È­ßëãN!>“ªš}#¿½žV¾‡Þ€Œ»=ù¦Tçï‹é]ëìÑ….H,U%1Æ—åÆË½›’¨Ç©eÖ;Ø,"Ÿÿ|îá;¯y†SSÂW‰=O$-ÿNMñi8+ÔdXï°ÕÊ ¢aï>¿ÊœófhXvÔ(8© êâì ¾i~äjÆ\ßµ7‡» Âæ¤õ ûà6“׌ d_çáþZ)õ…[øÍkWˆC¯#€Óo÷å×/ç|¾2¸”µòšý9‰yò.PÊeú8y¶@|¹ ZS®ïhþ’ÕO­¹Ç'¤4þœ <µ?h>ž(Ûu­¡U¾Ö“âAÉÁ`7¼gRsõÌ>69o']ZÎY$ÿø¯¶ÙlçEGµd7x¡rµ´ RRL¢4YæB¹õÄÑ’cc5îœ^Òžµ¾cëàêð9ôóvû/Ÿè9åíÜÃõ„š§„‚Ÿ÷ìô R›=hf¸Bø°7§jˆ[¹sR<¼_B`…1‹f¨PØ(¶¬“ˆò>ª2’•Y²–~U¨cp<œ™»žV]½ù^ý ïíøP­öÖgàãÍè½ 6N? + ‘¼JùèÇ&Îè ”èŽiï‡Û¦»u7ô{ÇÈÙ£?|šÿÄù­‘þØ8n7†ð ¬xÚßèõ üÎI:¹ÔsúˆYútg»g<=›¹gâ웪j£{Hþjo6£6åMegÐûв°‘åÜÃù!øá f2¸C”š¥r&½Ú¼6T©"Eΰ•{£*¯-+Ñçܤ)°à±ªŒe8yƒG&” [~DymQÛï,Ê—Á[·îº ~é4’ÙLç-s›ÜÀÄ(u‰‡À¢"Å!¥­Àt°ªU¸TÛ“›E&5:-¶0cxþ69-b (d¨gÙñx’QôŒ 8‚#žº³‡Ðzí4ù[;tKÓ­d«.º¶9ìŒ@‡ÙÿCŒa¦Ž*-Þ}ýV½µN£û4Ç:GƯYÁÓ*ý»xXòFßwF>Áå‰6¼3=b6u  …'Ù>ܤ¶€MxJe°é'ù‰Êõ§Åøp´ø[œ@ñ+³œþY½çužëôd°%Üo •CÃ=Íx#Í…šá9­æ3@6¡™2¬€Ö‹ºÝ’xîŒi@ÂôB†ûx|sY›ôÚoi5޲å.4ÆÐºÕÙu‚¯çÅë0CBø à ܯ]·wf>+ìÔ™¢v¸å3šàó`UÅ >ñóÝîr•¯ØŸïôÚê1îîÝ ÕÕ¸#ït#N¸mÃ&ÄÏÕÍŒ eóBñ ooáDÔ‡ò¿L¬à5hÍ2}ÂÊÑ-Öƒ>‘9¿Óž„­_&lL>t^±á¸Vú½Å˜6ùí Í9ˆó7°ãù0C!¹‰°ßbzœJ«B~£§PÒÂýÜË5­T&ѫ̶üó¦rk^ á3#V¥·ï1®ëãÉâQRŠŸjü*†Ai‹c Ź5怙°%šã̯¡íÂi{ÖNV¸É0K¨Ø>‚œðbÀ(ý ãöKÈL©ŸIÝŽ\‹õôÐãm¦ÁfI%qX*G*ÿ=nôÀƒuÖ¡Ò7΂É^zg,FÙ·:(‘¥÷ERù–Ã$Ó÷ƒ‹Sû”]b”®ýš€¡SU?`;t¤ÿ\<]B÷‚­úG4mè[hïÂ,×Ý0øŒÒ|!;¤Í˜,'H_Äݘ:nžygB÷s¡ÖZÊìäõ“Æ(ý}¬ë8Ã\ˆ~«âüMÝ‘(6– ¸·á .me¹p~*ç·ã¾üÈ‚éväø€Š1è*èP*Åpg.ZC%è[hKFýøÂ"é#Z.‚Ã'ydSÅäÕƒk9‡]‹›ùz%+Ÿ —èšY[e/7´lª”çÙõWŒEò<="—®*ÚtÉYjH±ú˜®‚ ÃMõø ^®?n—º*f/”å™Q¥ó[:C„ Øzýt­ÏÜ\¦ŒzIWóùHÍŒXR:V<áç¡àŸþyŽoO+#WXê¼àŽ%:‚Z_DNå%fÉÅÆ.~Âçh棉ƒ]®oµïj;™ê:o²í‡)µRx¦^[¨È…Ù໓8˜†±þe, c•æœï² ^Ü¢-!g!”ÏÚ¿Ó¸“Ê ;cÎfnØtyGQC`l`uPy¥s©ypfY"=Îs³È¨eŒ»¶KÁ+•É÷ºÛ6•žJowKuÑ{飸€Óñ¥«ªîò\˜±{pì?â6{öøV‰B3îó•šÃÖ«wSO¡Þ„#ýt¦•¥Í±áyûX€ßÖ²CdMIŸCSÈêûÛ³ª“Òîè üNw J¡Kú¿'-#!e7¶«&DS½;.´ …¬-^DÜ&nåƒËYÔ¿Z]jÙ‰Õñ« X™êB$1`óïÐöSõÓ„’͇Ûù·`‡Ò‡+’…Ö8ÿv½¾™U\…tþ”`(T@ÛéPÛ_Å‹qäÃL¦ÂcS2 ·c†Qå*β@3`3û˜AǺï5˜Õ½ÏUUØ aDock·Kd¾¦¼ù¬0o€py,hmr*q¾RB+to“ÑḛÀ@Dk‚Oá9T)A>i|j°w¡Ý€oXè.x9ÏÌã3ä_…1+1•j—탇~q2ßÃÌ„ãwÛ:§g/NÏ£ öã»3çÁ‹¢Z¥èÃd`ÝŸw¢ûep¶ç’HS=L©ä†Û•?ðý‘"_—„ŸNc$ £;Ò }TGÈC·Ð‚k ,“kn%ûBs/ÂR9e캔B:tß ""HÑÃîB=[’„Óœ9¹ ô3¶á>“8+ñÇ´a(ü*£-³[¡eD#HYx>èá$a±4¤CôP15Ä KØ(…qüE^‘ÛPMÕ?¬„Úó˜> ¡Ø¿is¢YAÝ5m¦{€jóèïG£f?~ûÆ)òàci"€Æ@O¤À[Çç›—=X#më¹:Âq’œÿO2óyÝ@Ýšä›û@É:9{“º©?΃fý‡)vjjî…_O[˜«´yÚ#w3×ãL„y½ Ý3+ckn'F…8›CÈ©yòåÒ¿ù[{|”%>¼õÕÖÕÚ¥»‹ßã²~~þø‘›¿ µ¦„Þ(»Ò¶¹vÒÿä‚FyœÑ =¼ð,K; Õº ·âž‰+ù²1—¬VЉÙvo}0Wó׿ñ€b/‘MLy6ÕŒ—­P—üHʃñp‘VœÀÛ‡˜’{¹­·"´…YÞë^~’ëYjvHŽØýOPZl„Bv.gj·.äl’¥N¿T3¤/ÙÉõdYÆ Y3¶Oûå?ˆ÷ëîþ^éYÊ0¬z°Ú‹z`ø]fÿE¬Šôž’=^%Ï©scsq?<ª¹QAF#u_«ñÅvÕ¤*çp¥ayÓQÏÈh'¼ÜË•)gx”ø‘ñÈ™8•ñ[äòƒHÑwìÔݱÂ!s‰ÁÄUùgø2ð®Å ¬SàÎÈîÖxÁFÊCûËÜÇ÷†{Ññ*¹‚ ºåÛMËèAL?ïΧ9Ïx!mKíÈ~°>Áé o(ÃÅZo¯|^Ùwó+6%Éýø©~‡sü-åŸ%s˜ÉÄDBúÈ8¥ ¦U*ëÔ4%ÒÃó ˆŠ¯VO…û™Ÿ3ûg8»jÜ;]7Ð,ʉ©w¢¤Šæ¢d]"3äÇ&þSI ?ëlóE…9'Z•k ט7XïDJÙܼz`SŠjeôS•G…õм°•Æá„ÛqÇ©:R…‘.-'MÓplŸˆÃô‰ï'o@JærÃ×õ…Î ž}u±ÄÀ·¿¬-0k˜i[ýà>º›öêò‡…3jêYTs7¾Ìe?õóž\¹¯EÑÙÞ;¡3ZU]ð¤Ú_Î\dâ“÷¿^A°fÌ+سª 6L]5ë‚9ƒ©¤,}ÒînY<ñrä$<‹~AÕj%$øuÁ0cí” Üñ½9¦uOcY,DÍÒµñ÷”¯‘±?!ñLïí5ˆÝ~8Àý\j鯻'êô ?é¿ï´«äs@Ú†Ji±Ïõ“•¡¶lœÒÑ­ùR¬oú3\êy¼÷-#B“÷GÆaì}*œâ\‚áº'_&rºG&8¾ï)õ@â:1~Ýxbž+YAŸ’•¿ñ÷ŽXgœ2}VÒ—Žkûö8x7kDÖ%±„»äº<›ŒÄ5Ü„R"8{2]0­]!8§ÅÑRÄÊ^ìï£\FOñX¸pX_ÙFÈ{ÞWn'fCYÌÂ0çM括rïŠE«ïý?ì/ÔÀw58§¯:®ý÷mÔVŽÊxqdX›iœNƒU](ޢƂ§–{=W1rB;ôÀðå °ê&Rù/s÷ÕqAÛÀU¯ÌÐYÎX!—è>¤v-ò‘Äâ%¶1Qïz7aÆan7ÊyÄ;_ÈjRSÞû+öxKÄ7×B·à“;8­ûš4û4¡†ÜMØ"’|.s[AÖ ¥¥ô»&?ÀU€º¬ï ½EXaH—õ•¦j¯MõL ÁÖâ©’ú S\É 7\ßtI•é'‘0Ã9’15;Òy:ϯ§qdâ´mo¯½új¯#Æ;Ì5¡`V¬/bººÀñ2¹[fvÝABW›Ÿç.‹öÁ÷£dq¬¶;yäaEj–Ö‚1(öœƒf´l N¬DhÁ¾N+e¾¼å%23´ $F Ø4––.cx'ýYv¹Ä:İ9_rkì¾3¤"Ϻ$X)`ZPu¨ðÓNégy]/Z[Sçò¶ÈΙ~ÿê:$…=£Æa^owaH5sZ”߉Çô8úD„Mb]”¼h¥´É¨µý\#r‰³›A…jBqh[( òŒÃ7³Î¯å\P/dÐÃq´$.K¥p«Íš oõffäô pÑäæÙª8UÕ…€ÞËø\Öf72žÏ¢ì~¢4ŸGÙ"l>Êž5‹ƒG0zTÜoÞšVµ?=Ò­Ų¿S(I:Nçµï.Ć ¶ÄmÙ~°F"&#œ©ÈùÝ¡•GEç7ÐN±fOÖø¦ÿ<žAȽH*•#S»Ò÷øRKFia¦3´Ï­¢0•<9ßãm½D~¤!8¬+`œ8õk⻬s“ô€™l×JmHÒR ÓNóªçþ|Õñ#©³>áFŒï·#gÆd39T‰õ‹ÝRôQ’/a1£Ó„éÑÐÍJd¡¡Ç“·µÿ´ÞåB1gîŽòòh­WµH‚,@òÔ$-àHÀeèô·ÙVVV~"{¨2Úz !FiÕP2ê'¦™ èÖMu_w ò«ÐÐÈ Äµwáº'MŸ‰:µz™J77Âf‘Ù\“D D%‰ÿ@ -Xçåꡤ)Oê^ÌÌÚvÆ(œDÂé]V“Ð,+“ j]¯¶W>ˉy¾!‹L¬%òƒ± ¬;{ xR?L9÷QäžÆÖ%†VæÅá-–fÕ&#Ø€Lÿ‹‘²ÌÛU·ÙCäψ¸uLºevî_†¦Q¶$ +‰q E†ªhÏ»Ow9s‚wnòÜÊõâäšEº‹.Àæ$¤*ú~H×Û>V0Q£ßl&-zô;F43œÑßBAÍýàKu›œ…ÅþÑ‚<ª,ä·ï,‘Wk­ò…ƒ OæÂÄà §Ž ½cÞ" ç=L$…U­êλZ[§•>~Яô« žì 2˜h™LÚ\]wâ‚/ãã9öO¤–:ŸÖ¾e ØE×vû ñL~…J»:*Ì‘},› É/\oPåN·¬â¢Ë˜jÔßr ¬/åMQÚs‹©ÞŒpÎh^ž²ÒAeÝÊQ+]àõáLþòJú@?W Õ@ä2C]§ -ëM€ŸÌ­ŠòŒÂûn±€îrÇw1ϓ֪1˜[_DŽu?ŒÅ;/¼ÚûF=»hÁj»¬¼p@Œá¿ Âìv Š¥Uã‘:E¿•Äk7êÓ][•›%‚¿Ìê¼×óñr™$6äväã´'DªÞzâѶæâ—ò\ônä~ó„T)v•¥äˆáÕøËÊq¢Í‚æ¾q ¼©½Ä#‰¯Ž¡Áàˆ%ÚY«–Ï”&ÞmúÇüóR¤²¹qÜ(,B³YÜ^Ë+‹õìÅÑ7ÍõSûÔiùÆà•ÔA±¨Z¯cÃ|/ê{]>ŸIÞ–¡è½Ã]iñ/Ù8‰ ¡kd³ÛC/0íLWãjºPÛË™ÈøMOmÛíKgçS+7>9ïÒÛnÔäíŒù‘1rÃÄnr¹Ým‹»è9ÁÇõ5,f[ ­Y'Éuž‹Än]}¼>c(åkþó<³þHr”[þÎgHäEK!ñÄùDw)À\u{ôŹIñTD\Ó¶»*Ì/)Ç•j„•%~Ç#•¿2D•€±*>‚ÇËxÇÜÅXƒëý$Ãt£]æÖ±G!Ì M^G¯Êry[,ŠòdŠ«ïwYˆ£žJýë;$‰"¶PÁÓ¶à»0î ÿUh§w/7;Ú ·ý+°óŒƒËÇp\uHp}ÃÇ®v˜ÌVºðâ0úf¼çN§CñÚ¶ø‹À»<¯RAØNK¶^¿%„kkd¸Teè¦ÖÐEÌgòbòÈ.4/Õ¡áÐB„oU6ÉYµ h¦¤.ª1i­ÎßbjÆ ¦$l;Op*ÓÜÜ©ì‡õuÿ Ðm®‚ö0Îþ¹;¥«J×ïµ0–R€{hÿHÀ’µBmá”2Mr°p„Œµ'ͫڌÚyšGx”ò¤Ö2ÑF²=ÅýØ—_F³ñ:QÓku`Õ,d¸ŸŽwñQâó‘|Yë-E´S”ÀñÓcg8ÍÖù}*ãœiòt£]-"g7ó2X9SSò,º›È^ç¡r²÷Ì ¬•WÃâ“=ÍAÂè—[ƒ}–Œˆ¦XÇøÆüȶÞï¹Ç.Ög$Æ&…qÙ¡Wiï)TÉ$ÀÖlš&€ †/™{˜‚aD—á#œŸ)–úï‚yŸLµ†~ªœ¢ÏXpRŸ·E¹dZYüÇ/‰¹™a®ùI¼$’GL5Å­%‘f¸2ÜdYbyâXw¿ð“¢à¤R"ÑÈ'€ò`?wnIXÏhüŽÊäW™Žùƒ‹6ÎŽpðxƒâ ³x ^ÄSZÉg®êxг„hÝ‹)ŽŠæ‡³O“ü¬_š}ô;7¥«Óq•”1¼£â~±‘\³l˜Õ2: ’k¯Ô«»Ï`Ke<ÿ ×L7Ü^Û¦„Õ(TK'¤­ênÉ…%<¯ÐóÁ5ÏáYä«ëpB=7"h”¹õcÚŽ a눬\Ü6m× ¹–Ãêúy]Û"˜ç›)Áz»“¹=Œ–?qàÜíÎŒ¬žÂ¯ÔÐË\Wß+ÈGSŸU_I}„2ITj(HƒÓKÇÓú• ½£†YzmD%Í]âPƒó¤åC×sVm$ú"ìL»NœˆòŽå¢ã£ïPîÜvTÜ²Ò  oË趣ɻu×;$MEѰñª¦ÅÞ]YÀO©JÉÖëÒ²‚Œ39vmV§Æ“‡˜/X<ïõÓ òblÎd•çú¡ —‘>3µsb¾P¼*³áq™‘É\—ÏODð¼,Ú.£šM,Ï¡9©á(ÔA&¯wÕ¶FI^*Fª˜vŽd³ÂåËÓzv¾q¿¨‹“83~ît¥ßW"òãášæ•+އ\ÖÁÚûŠüªŸÇ_^úxÖtë{»„|/ÆØT/ÄËâ€,8:1s˜G?*àþÙΰh™¹1ïI‚?“ š¶³ª§³8bp«½åÙå¾1¢1¬w‰ÃÔÛW”T²jÕ§„:ÝÍF6”i…vÊ€_aÖÎÀ7@ ×Þû#-f/¬~pœ{i'…aÇ’ Š»7½2–‘‘̹1:9Å%„2+¾ÛÅòGÃÑ˶Nâ_"wMÙž@á|‡Éq,*Žç6Ù«ëJ$ªÔ+VE¹qƒþl-Æf¯];ÎÃ3ß– W®ˆ—• œÕƒÏ´{b´)½t\ÂÌ ”y¿4ô©¹'ó±äßʹÕXq¡Yœ—[CR~›ƒÛPsnV-émùgùD¼-×ø0sC€PHÊh4ŒÍYé}Ýd‹›?¢¨=%È™ËÐ^ËçØ^9n¼#ºÂlú¾ÞX™†š³ªfaå¹A¼o·êÂ{°ÔQ¤½›©rû¸+h’€»ÙRïŠÃð?å9Ζ]Í—yžìkDæªP'ÐÿCž7 -¬Ž G•¿åJ)ŽËzŠIFG7Ô=®ü £ÛÎËMàLV{¾ Øâi?j’ OÊã!5‘žJ•ó‚u熴ú·„ŠÑ‘d|LeòØJ‹N!J(UdÝà=̨ûpÝX®·Û¿ßüÅy÷ä[?ýÅD2ó5JtÕeœä¯Uço¡3 /}wg«‚ßÎ]]…ð ž2Ý‘„àà?‡±!¨èÄà-Bñ‡M{wà'¼Å«´èËŽV)Ù<Ë"F=Ïï;ÀÂÅ­ðîÎäògÝY¯_ †t «_›"÷gÓ‡°ØYÓÓ@Ϩóxbýex®É ~ÔpJ{} ¯ÚªàΛÖÜb`ŽŠçwÃrÚøÚ¨G–Ý…÷b^¿€ªxu `éìÊ© +0›#I¨Ãõ7• pj7He!ßÔÛóØOncž»zÂðý¤ºHÆÙF¾F®™{Zóó`ªr‚E+Y¡†=‘ã·p~I¯—(¤+“GªTŽh¥À¦™ç‰m“ͳ¥ Åó§™ÓýYÕWò¨¢ ¾¥µÌ-ˆ Úãâ‚Jhÿú†/t0²ñÝ»¥ÇïIÿÄÚ¹FÙjî/¾ ï»{Ôðû(È%4§[T‰Nç#ØfÆ!Xu8{ôr¹'~tZÌð‡àAO3P¶ɤþ)aþ|+K×`q ‘èñ©ÏþLWÀXé!²†õâåäR_Ì¥›íw\Ìù„æm<Ñ©V7 纇gååR³\Í”•ÆA×0d äàÎýž'@²J7÷l-dóD)°sç,é ¬¨<>ŸAäUê!*)–ÐÂÖïÇç/üÁ-…AuÅ ˜$ÃÉ•fZpÁ‡2ž-Œ¨ñôà"õk‰ZSÉ•ßR±H ý”r8îSŸ e]ÖÙ5(0Fè÷à40r0fxäåš'R Š<²`2νLÅÁÜž¦ÆDôÄA^dáu¿)-€ß’Ÿ4‡LÒ wyûòÛEE~¹àyªZÛ7Ž ñB*ÿ^ÃD}Á\Z‰Áa±Æç̾6S´ûпÒÝO„¡‚ôCX>Õ*ü¦‰\üF’‚¡U`·gä«ï§U!£ç òá5~aÜ 'rï~W3\T®²ØÝžè#kv\t#Ún‚´çEO]“"n•að:úUêŸ<ÞÚ¶ÎŽªž¿sÅ¿BÞ©IàÃ*­<¸¦óô–&HLv“·:!ÞC¿87¦|!ã1å-·S˜QÃ_´L¾™\RXö(_V„c~í9Pß÷ì³Ak¢½àñÍT¾Øšï,ÄÚKBkÔkB¼¸5@ãmŽ-d®íîâN5똙¸˜j6_k¾€Ãò«@³C"B®Éo Rï®ù°­%‹y…I2Ý`×a[0ãÙhiÌÜ  2”‚F÷ÃÜâ}LUw ÈÆ øc#Ç¿ €/•¸ôÂÁá UD@bWQ9XË5â™zár”szoðâç¹O§íöý8Èj?œTègÄ#ÉI€Q[Ow0áÕ+˜‹VV0ÂÔ4n:$ùI^s Ú tÆAYvH5ê[ß~Ç$[ãUbQœ² æ¡o&3DpßêùßìpV-hûzP†ôêŠÛé±k%;²wÁ óÑ&=a1+Jvèº^èÆw<ÕZr~ òÚôê*Y}þÉ$Ý «ô™j=>j`ð»Õ0ÍQq¾`ÕÛãDÔ0ÅíJ\²®»™e¦ïÀ ÔGÞl™{–›²NjûbL5˜)yi]©tQw»E¼è­äµMNîLS‡>ÝùbdøPp¢ DÞöJÁÌÝú°¦A¸˜;£åËC²Ã½å=ðwуÀp:¬7ßïïÌTú5Á:.–©Y\¾¸Šˆ ˜â͌ԓ.¿xºL+Âü¹I¹Âén£]³ú’Ó)=•ʳÇàºÂVEt q¹Ï³w§+•D"šÁ?M? Tè5jL¦Ô ©Ú?ÐT™órÇÝS$ÑɽژW·Ætnœ;®†r”ÈTR 2•…\¸¿KFèÙ?”ùóø]Gþá¨9`C/í.†Ì–¢“Ö®ýÜêI\ãíZɇè dnÙ«6 n並îà(ÏaV'¢=J¯™›ÒD"¨H$‚Ö™:ž-~ñ©ÜÒKA[Ê’EY¦®>Dãó Ã@Ãy-ë˜Uv&¼v¥‰¾]p/GN”ëÑ#E’£ÓÛïm1HáÛèZÞÚ*·ÛA#F6õ‰Súª!Žñ5~µý`Ì@ðÜ7Ÿ˜[§Þ1‚½÷™£w‰Bé« LtYü¦Ì ,‚“™ÉÊnOi}FZŽœ/Xö†€›lb•õ:Lÿ‡?z+@Aö8*'žœr¦F¤¾ìo?©>4_âfpÛ¢ÉÚêÞwíæ ûFOäÞHÞ D‡üÈÀÄ`W#lÓ1©6Á’Ô??LòŒ<¾HW£xÛsˆÃÐU¦W„‡›90ƒ-´•S¦9ƒ N®·ú)½H“r½)àîB  iæA;Uò¢:R:äé2[=hk™­,Ë•5RA£iË«øù@ShMª0·w@»ã,ý((kZ¿]0§ª*Aº-’ÃúǪ(£¥ªm3ïSJ–Åõ&l“%ÛÁoš› >v,࿊ºÐMˆ¹À¾eœŠJ 1;5Y´Wýø³¿³áÐnà;Žà/ÑÎAl£î𠉀„Ó*[KŒeåýGøK2šÙOÎ;ýr¢hBGÛÖBîS«7µJaæÛAÜ CX7ÒVÈ}í…Bë(ý…òiÐþ¬¶U0>ºÆÜöÉD†Bà,ó­Ù¼ÛÁ“&nœHñ펖¯ ÍÖ’úxRT´IT¢"ðøEL¶š4øÃ/AÈÝÖ§UÅÙw_µçàé°]e 3Ý\­©ÐEýÀ4ž;Â*9D(›”©Ô›å§@-ilo ÿQˆVÅaF|=ÑCàÙ(Úå´þÁг7µ±tv\> „ëªò¯Ì™ò‰td¹JEpÀ$ý÷ƒÝ~ÃUÄ tw7VÍ'÷΢º aZkÿNž¥°] ‡ØžQíeå9]xÑmgLÓŽ8®]nÀ&×Sø¸ø fV˜öµôíf|ìN»±³J÷a7qˆÔ€çÙ£˜O{ÝéO ðpšÅ+SlÅøêèF61"€÷<Ÿ oò¾pܼA§ˆµºX;m'‹ÚŵœêÓuYØ¥tg)&eVžÁQT–³KVç'ï9“Rfá Å¦ F¦5íg »‰"o×XŸ[†t>¥y§@, ©Æ³¤6ÿu랇Ú|‘ºÖîÕO«¸\°hqÇþŒjíýbœaDîöÖ©&öEÉmnhS«'‡“ÝÒrSçŽÓÁuükì«y?A9xÚe’ä;ÃU|°I=ÏÍë@]ß·bø@ê]à¢R¶ÝN¿H•?Ÿ¿£ò<ªJE-$¡ù1ŠüQB¥g¾Ød\} œü‘üî ¯g¿,™bÏ÷K¢ØR¸M¬YSÊŒœ’þñáF»ï²’ºÌsUºx1©˜‘¥‡`€L¹`4! 0e-Ìg€·– m­ë—VÛý¡n5pÞs—­êÿÓÛ$û¤¬¨DêO*®.=Q<ÎÊéêZÐ éÔº¾ðwo‘*2-X"zrBþ†€7î6F}µÄ‹øž¬·H4JÊ :ÌÛ”L+º9 V<‡Íƒ–õ’(‹’‰‰¬ºéw´0ð)ŸÈ}þ®²ì!šTӆ嫊†=ôí0ÂáBÑå°WÒ¨ +ZÌDq I;’¤ç`M[Ëbþ@k›iÚMN2I¬áãƒéÒžwx9fMe¯÷œïêÚòWÉ3ÃZZɯÜôçƒîHËþGò¥;Ì&ÌtÕž0{ñ/öhÖ°‚­`„íâGÛ)‹ÌTVhF]²jíŸu²~gìÉy€âUí|„ Ã!ñc‰ƒà±™¿C½aËFº¡Ò¥‘{Q/â@樷ëEpÙª’õt9®u4›ªÊnZìZÐñÙ, ›‰BÛ¢‹¶NðOlwdù.’Þ»ƒ´ê}u`±Ž(‡5úyimqýÈ+“f>74S¶ñ„îð ÒÈõT±kö<,#áea®k,WEôR¦oÈÃÕªƒÚ›¥ëëŸBÖŸp‹r Xo×›—‚Cºiä·ˆãØšë8ÓwvèLÅË‘Tknž@îY¼¹ÁãKà@ýú ’Qíð„*{mb›ÉžS]Ÿ"33ã&+'ÞœŸÈQ¢Á½ñ¶Aäò5ØÅ9õ¬âHéø4ñ\#NÃ9øY½jeóË•áë2C²d îRé ®SÌD76@2“´͵¯ÇÃߢý¸†6i§<…«ØØò3TŸW¹ù¸º; 2ų±’~ÂXæéë„äOTj‡„C Žv¿åa@¢myÈ “-Gï<[‘ËO4Õ#¤ˆ]çõÞ—añ„¨ÕïÜÇÒ›ôN„VA*8ÀçòCrAS>êT߉JI×vÚ#Ðï¶ò£^Tx¦Ë ÜÑE›"°M¶»· F•ÛPú,Éœö}Ú´• ;¿}ùPíÑlÓÛ!#VG†[†zY!ˆ-S8”Ôåzë5§Œ^eØw6[õ¤¼îX‡S˪í¶t„uUn‡…ä:“Ã!dŸb|‘ íø–é†/îœqò´ÆŠO^JùG›v¡>:ª'T‚0 ­C‘SÆ# «ø™Âpa‹@»<Τ¥9dÝ&k<בÑäØ{š{nôºË¥iã߃‘+'‚ä_ÑPŒä™ÙqšëD›¬ïfmjSvqˆ)¢¦¡f÷šÈ⫃QA~!É=g2QúV}vÎI‹ Pðå“4$‰JLˆuh裚ÅèãtD¼¶ó[Vù¼,ãBr„‘¢3]úáÃ2eÕJjn(Ý«ø)d¯DØè¡H$¼V f·uÏÂqyW©Cy¥PËà C&õš¼QR`uMç’z‰Bî’óÄ0Áæ¡q÷igÃÜMÑ'ˆ[NW-wU½8£J;‰(ÛEó›œsgbŠÊK±ŒvÅ”ròðáî¾Ú6§)iEo©ÉjO°Í Y±ËSËG¦w¯@Âq߆² 4 ¼Èo ñ¿˜ì FŒ)]؆U|øŠÝ¦3ì:eýdƒ‚|4ïìMøÏ$žŸ[Ùç¹kƒt‰á·Úy@Y¢ ³•6Éoœ‰5%)—§m9|Wx\jØ3—o-šêÉëð*|^±P/ XÁósØg•¸ê;€DCŠ<”Qa‡h™Z˜Šm²xxaª š»†AŒÿ9÷»¾ÜwXªAÇ#V—Dmctœ`°N ²û™Êz£ö{ÚÛ3YœÚôé!ˆ@cëÛØ-U+qG¸ì§ñ[šã—›±ì¶iCaW˜t7¬Ý[‹©µR¶yR;ŒÛÝ †}¦Ëu‚M;‹ÐŸ[jW2–\´£[äB åˆ/|ØK<2Œ¹lßn,ÖDXþ€Ê ÁÓªßÌՋ* fr d©ÑklÛA_¾D©ªóÚl„êµQl˜î‡ˆá'‡ÁµL ³&jí¹0œ#nÞp0?&ÂGm_Éw“fcˆxäÙSPXÇµç§ £å8½ÆB>ÊaèÎN¼†Š<•R“Háþ‹Ïöb¸Ó¿Õù¬¿vOû äBÏC>eGÁ ­jӴΊ9‰_÷½†öç.¿+¾é%òUšõ«îÕ:´jQΞڕ³#NY"Qtð¯õæ#4* ‡Tö(*ù«Ç ¯˜_*èœÏW>ãÐ>É"Oû9zveÝ7¥B.ôò·:†ôÎâAn+üâsço¸Ypý%Gj”1)4CÖ†„Ó«¶s5úSç4á6$Ñ#Ç”J•Tâì­•›!’‚E¸n?êRo_]xq®¯µ¼_$š|c¢ Û\|úx’c‹ò9&øô¤à')ðV7@°4Ñ‹L,p²’ gJ?ÎáDÑadLPŒÜÑ™ÚhgWfHL?ƒ]c®–Æ2"µ*(: ÕÆCî?élXÎZ0¡‘£®s”Ž‹y¸ˆòy^Û>Ý`u–8Ø Û˜ýöe‚yÀd( èKå.\—yý]ÊéüäÝ«GBic1Ä£ªôºJ“#¼gËëå³ÊÅ©#ÉQɾ0ʸRecâ6¢f« Ã×€µj„”þG²0ô{ü„sƒ5§VÝŒnt ï;8°wÇ Š@Ýirïº:¦¹N€|úV+nŽew;.7ag»dÖÕÒü^܋ʼ7ç¾ÍG¹ÇgH@¾t«Ú4Aðw3[èøoÆ”üËÛX¡ Úà«TÖÉÑVØžv¥ ,ë”Y|Ñë¡?–” cFæ”ÎÆaÞü™YºÓ0¹ù(‹Í~òdÄä‚ñNU~Qž¢.m}E¡(x}qä+Þ€(…Pvòy]ü¢#ÌëE“\«…ÇóU­o0[¥¿ž¸†ûL[vr,pªJ5Ü“Ïâ0b ùа룜xÒþHP'Bb%ŽÝ’ÉÓG´RZ5Â"ïübDÐ#øáøóú»4HÏ›‚%ÑwõaŸ"Þ£Uäo¬ ŒVÑ ØÒbk ½þ¸F²§Ÿ—˧4StnøXQ|Ì=ió&ãÃ^£ds×ë5V»]ŸÑ„õgï§+ 1}ã”8ÂðÄ>­¢JÜ`þ¢ü@%>rƒÁ4d–>Ç<:ø-[s‰,@x“±—•jíŃ¡k‡ôi?Ð$ò˜»r¾ÚœI{†Þv" §æ8J¾*mBâ[± éîˆo¡»eJω”Ô€ æEÝäß#_>lO…BŠJàÞíQæ‹fâG… ȸºiB8,CÌ0oeP–¥¿OÉ¿:ŸêŽæ$ŽXx«‰8ÜF%Š(áwìˆ.«=žÔˆ †Óƒ w¯ØüÑbÛûŠJ7ç•ÇF²-(¥ãµ|ö ˆeÿ“4÷2«»ýr©÷W»„)‰Ò˜Dgÿ—cìïOÒzœØsÐ-”°iË¥J´³sš(y¡n¡>åÒÑ.¦“É@ÍÓn?K§ÌV‘ÁÚã Ü·ô€Â\𔀛õ#Kîyù{—‚¯XÔ*×&}÷ñ Z/ãYMpŤ•åŽ9í´p!ÒN7œ÷;øïo͘¶É¬©·¢.›ªáˆ„άüÜD^#rØxØÍ—«Ð~`Y\yݤàŽ_©'Ÿþbƒ;n÷~ÛGÈöùž.ÉŸv©“—¡’¯æ^ƒí Oœ˜3»Ã?tGÐõÿµ3—mM( €iFI\cˆÃ “MP)c0dÀ¡”Ú¥;¥a FJH Œn IÎî#Ý‚(!çGÜo÷¹ïxÿt«×^C⊵è#†(ÙqÄÊ9À{Ni4×t–Åñs}w5’0¡ßž{¾ûr¥<¶FO mËôëào7ÖoIÏ£ã™)Þª»‘u¶™C„d¢Ý70çÈΉYâVL\z@šC¢õö'ô}š}—X}s²ÖáIÇÄ4JúpÀ-ì‹ãbj•þPíùÞ—W‘éôVÅO™Ç&áÏÔCléauÚƒDà÷:Å䊒òî&Dجu´Âa6Ö¯§bŸ{54½3¥ZRÒ÷#`gÝ0Úô»HZt·0ÌÁº³øÕRe‰§€ÇëótsÛ8DÇj\¥ÓÄ*çTùUþ”¶`.Ö=tÔaò+¬˜¦ºŒDžN)Y_zcCÙ(mí€Q5o×ikñˆ‚7Î/©TæË¾»_¿çžŒ–"l4sI.œÚÆËfÌU ·X½RÑhÞmˆIÛ†ó§8*¡ò›¥Tg%8Û‹Ÿ”Ž×^5½¥°æë*lW’q(4ÉÕ@eUŸä‹È5þl}/' m˜hqP00iF ‘ÖFÜÙò•¬T{ô±+T@YAŠ(>J¾Æ’¦àµ­®u§ug_=ã·>PG³À‹P´·‚>š EA± L‘û¤à¬“´7w²®G#+dA€'{_Çß§{r:WsV°½ðGÉ2#6|cå°Çh¡ÉÖã&ò:!Âî¶]‰Ë¿Ž¿ë¿W¶v†!Sº¸_ ú9^ðy+'ºYJUð™Y´{$·îd°8iÐó&–êtjõ¸F“Žî‹ý°ƒŽâ^1óñ¿Ì7Yí›åz$wÁë:átA¨ \åI˜7kPw[îlUùÉÛeI%¹®*Ü:c˹ÿCCÂgćÌþ•byá§œ­“GìFEL+ ggùÙžñÈt ÛšwߊÇãV“ƒ@Ñe=1 @Üæ¼åÚvYb•‘‚Þ`—(\W> Ü‡Qv=­Ûþâ$?ÝÐ8_h¾ãæÅ‹¦XÝD²ÉDÒÇ,j™ÔC~tÔn:ÙÕ”p¸¼àäaæÞûÊŒü‰îuÒgýWªˆ;üÕR’1]äíPH•È~"ò6Ž|­„'VÐÁb›;¬šôÈ0¾4R¼[îÞNø”õ\"%Ô™î(\Å#RûgZ™-rÒº ƒöèPÑ!{‰†«ª‹`¿f'ûцûÆ»Tõš®½Rû{wÇÆU9ÕŠQ(øŠë3ŠøaŸá¢‹3û,ØcCÇ… Ö`’^åâÔDïg2Ë)GÈÇ0ÎÝüpé¹›©+àßÖ8¢ëK2 ⥱"çl`Îþì&€áMjD}ÖCjvô´âPüjûZ3ˆi"ªä9ׂ–y”ÃRЖ–¡R³w?¬“¥·Ày!qûðK{xìˆ q©·qo^û¨™p_ØËeÎn/ý9bùƒÇ4ØUhÅdTVåefÞÂxɦú|$Né\f¾õ}ƈ™Ô¤V ü)m2ê]ªÍp–Tî½ãöc‘ذ«Ïêo3ºÁ·›¹Úß÷´8Û‚é‘P6Eée«lòLÈ[}R¸Ÿ7+)ûÕÀt-'ûüb*†&Z$ `O•—w#–1šßÌݾ§8òLT•ЈRc?_£}ËyðùºÆÝËoÞß'9è¡Z‹ÁŸn¸gcïq>Ù*XYyxÿGn¤–ÄP1ˆ¨–Éy݇y{jðÐG>Hªz(yôvâ(¦ñUõbÜm'ËÔûÔ›—ÌÓFî<ñáŸFufêÙ*?oJ¥Ž·}'g§Lçˆû N­v|@^í1¼!ûI• # 0[è¸>yùµÄÇ[‡Â!?(vžw2¶dïÊœX<)@¹³Î¨oÎÅvéNÃÁ‹eüî{*ÂP‹ ¿9Õ]’mWËÕ;Äþ’3 PÅ3&gÎDʯý}NÀþË[°*f_?ݼ ªP>5ÙÓÚ©^E…í7Q´aå)¦?ñc<—¶Ä>j渿4“AýA´bël[¿‰)C-Ae ‰³dÑòÎ0—xùø õÅÍýÌÂ$ ˆ‚’?žù-£óxÞÄ”bkRä¿ÁåÓ˜„Ôï•£bb‚ÛŒO¡5Ö°­‰s5maXc¶;!õ -ËÁ|­‡0ú’| enG[Í9›3ûÙ J…ßâ^„–jPû+“‚“e?ûÓÜ2çB©K¿•ÓÊ×I[ÝK’³¼«œ¿W9ÌXŽò¬,%¯E2 -Œ3•î&kÚYÜd[èžáŒÔ¨%b¨Ú¡ rŸI›“r¦g¼a}þaØ êìçÊûBÓÒ@¿"ƒìFZºð"äø6ß´¼wx1;}LÀgÿŠ€´m¶– ~«ê‹bŸ€fé|;#tQ ²¦|§Ô# ]ŒïUÿ¨:¥3Ýg¹þ”÷µ×P\ŠýC¹±‚Àº‰pŸJn–­CºÍŸK™H÷V¾?9K{‹ë<~E¦NQ¿´ËE ³_6ÿQjqˆ_O ׂ d^g7áù¸xÃMŠžÕaY tAïWø¢ÍšîýË Vmý%A\?ŠåXs`ô¤ÏckØZhbëY>òORº4' ¾¢ÂÖXƒáöŽô Ú|m߉ª‡[ Íéûø¸Æ2‘qÈ7Úà~ÁuPÕ¬Î=¦çe6žaSÍ|þÖšx^þh[†KG‡Ñh[S">wÍ­Û\Ú¾V¥ã!§ƒWí°j"G+¤âHŽ >Bx9íJËÃíéauÇ”£€È!x¨}69—`Ïko7ÈÍóO@°+TßT 9¯­./àµ\ÿÙäYûþÉ_;ÃŽcˆð2§IæÇ$|.ì¿Äþÿà"0·³Ä¹¸9Úã\lÙÿÖñ tendstream endobj 62 0 obj << /Type /Font /Subtype /Type1 /Encoding 367 0 R /FirstChar 2 /LastChar 149 /Widths 373 0 R /BaseFont /WQHACR+NimbusRomNo9L-Regu /FontDescriptor 60 0 R >> endobj 60 0 obj << /Ascent 678 /CapHeight 651 /Descent -216 /FontName /WQHACR+NimbusRomNo9L-Regu /ItalicAngle 0 /StemV 85 /XHeight 450 /FontBBox [-168 -281 1000 924] /Flags 4 /CharSet (/fi/fl/quotedbl/quoteright/parenleft/parenright/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/backslash/underscore/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/bullet) /FontFile 61 0 R >> endobj 373 0 obj [556 556 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 408 0 0 0 0 333 333 333 0 0 250 333 250 278 500 500 500 500 500 500 500 500 500 500 278 278 0 0 0 0 921 722 667 667 722 611 556 722 722 333 389 722 611 889 722 722 556 722 667 556 611 722 722 944 722 722 0 0 278 0 0 500 0 444 500 444 500 444 333 500 500 278 278 500 278 778 500 500 500 500 333 389 278 500 500 722 500 500 444 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 350 ] endobj 53 0 obj << /Length1 1608 /Length2 9681 /Length3 532 /Length 10540 /Filter /FlateDecode >> stream xÚíweP\Ñ–.®ÁÝw·àî\„@Ó@è†îƃ îÜ] ‚»†@Ð ÁIp ðHîÌÜ©ûæ×ÌüzõNÕ©:{­µ¿õ­õ­½«+£ž!¯‚Ô¤ … xù$º`[w¸¡ D›Wêlx4Šâ°²*Á@60¢lƒILAve $”Àa(A]½a`G€ÃØÀ”“››çŸ–?![ï÷< ¶Ç3ÔÕAÁpU°ÈNŒ:ìmœ{ô×n ±ÁœÁУ–ÛàýŸ‘#èùÓt1‰¿.Äî_™?Êó—7ÿ3=}3î½MÿFé=ªŽ0òv}$öouè@íþcñCQêðåð ˆ?6a€„ˆ„ß‘ï/à?×:6Ø `ñX´€àßÒÿíýçÊê_`T @¨ÝŸ91DØ@ìGë? Ü@wìQÑ¿§ý±ä_ÿrÈ ÄY˜ƒ¥Þ¼JÏ|‡¨£ÈíU¶øÜ%ˆÚêZÚ`TTXí HX“¨|ù»6”¯q\ò¾ÕûËžëݦ&×Ö`¹3{g*è(ŸÖ™³»€h™­]œ{+˜ÿE)Þ»}Óhߟ³Ú«hÏÅL¶¾ê¼(ùA7Þ. ÃúyÉÈìQHÊráŠïL{Gö‘°‰¸®poŸ-içò‚½wh ¿¯ó½{“†;'›UÊ -*Ð-‡Fî¹q¥oŒm‰`RoMrWX·1‡ðòü1yÓª0àù6vCð›ï~=è,(ØWýöÅâ!J~q—׳>?‘ðoÅ)€¶o4·i)öïX„h7ÏìÇbåüc?kh®/û¨—„QŸ·þ­Ðä_¯IßsÊ’è/;ÙÈÁh¯³™àë ,ä»™lŽOÓj•©ÅNT#5I…Ûz®ˆɱWî&¡\95N'¼±÷¹ßœØ*ñ(†E×41ñŸã•û#Þí_²Þ»’åG¼¥wÊž/Qì­Sß~zêQ2·A<(ª³(1¸©™EdJGÇ€aãõ-Å5òå ÜDÆŽÔYCÂWîCÜ(Ž’²Á9RóÀƒLxG&¦à’F¢ßvžñ0hyZ0€ý3C'Í(«v[›¢%*·:žÂ7Ò‡ï soŽŠ8°Ÿ#ï ¦Ï^i¼—¨Îö>ÓãGq«½}ÂÀ/â{›Eâlµ‹óDòh±~ž˜;¶ÇŽ*,¦l9fµ ˆÒ³tŒ81[™ª™à ;‹øœ¨Q†E!wK¹i®n7BH͈¨tŽXÉS2 0‘×àŠ,ÁiŠF CjôCå±@<¸NŒWHYhðk^³¾ŠÜÛK¤¨BßÞX,Á#Ù‘ù¼‚Ä9éßoq9.Rr8«¤t½J"¤aã"yÄe\+]>(l$ã(EbGOtö¡+·>«ºËöY˘È®èø=»ñuÓ9Ì—ÓŠ;“ n(k¯®èpÑO2*è¼ÒM ÔÜÕèHHžÄšycrLȺ>­!A¤å4ašJÖÇ/ÿñsAw^ëm¤x ÿç'³:ŒÖŸká“™˜xF?ìPˆå1ií­6)ðn(yuŸš„Þ*Ì›EÔ“ædx87žb7®·D_w£3PðÅÕ±å"• ]0ôìéµ %'%Ò%¢ÛWn {Á-kª™“áµãÔÔá&ׂD‹&ZPËù©6JÔ¼d€]}øµa"ò§5;Ï%¦Ö›ÚÎ-;wÁ‹äÎ_‡ž¥o^#¨³¤î…—ùrÇ´0?Ã{¾âtp¹_àþ…ž/”Ïg%•¡YTÐ¥K}wUÒæôÒ¹;1\-êÎ)ŠQšª!ÝCôäÕåi@À» ÜÛ\û²²9?E yÖŠ áów;pÞ—@)óÏK–Xø^Ao‚™˜p€/­‘– ѕ߇ |l Q5ª ísæ)±Ñ&¾¶2ñ O{ë$É›“4Ú‘åœ ©Î&h™¨‚í<‡›x˜v>jáù*|Õ))Æ+3Œ ò´nQòŽ2ÁNæ"Í5ÞŠh…ïhÍì— ÄóÉfòù´µªÃÃÊzm¤ÀŽXƒô°w˜”I¯Í1@EFÓòì]ñçõ§7½^8Mªëg¹Cn×ò˜Û£÷„¶‹ÞR¿†bàù®³7Sõ-³“íwåÉÈ p%xu²IOo_¨ñEú¹š‘_NÒZYfo¼y OÞŠ4Dx †ßûsMÆæù) \ Ô±äŠÂé”›à`¶çÁ,CÍ Ò0o쉫-bØ* )¡Üžˆ÷$õû#_„‹‡ß b¼¯´^7ê•÷Z&q:Yp $˜Á0cµk ”œpÂùó ¡ƒ¿§~<¦Ÿ¸Žk{ñ6â-{²ñ¨‰rÃÅ£-"K«UçÕÙÇ ¾a¥…ºñ6žub7R•‘€ˆF|ãØ£o=ÑŸ¾Ç¿ ¿àr¬@®žV“%3VÍE?؇sÈpŸÂÉßL÷ˆ*R|ÑÊKI´¹ÆŽr²y¿T,q/ÅæòóCîÿg»¦tKödZ³ÍsÜTÖÄfûÀJ€Ê–³ ·XÉøj¿’Ã>׸C¡?ù›¯È¯Ž_ WIÅÞU-{w|7Êö=fb‹l§ òݽwdðÇã·ÃÔ¯8qý;<½$É™ebæáóaÙ¸õ*¯uYik  îxZw â¶>L&UTÜ[©>B¤æe³b zKåŒÂbÒ*Y†ÞluŽŸu7O#/R•àE×&­¢ÑÜ]Hqíû”M¨¶ôÑ-KG‹ú ‰Ñô˜ÇüC<ïûG%i»ü±—)Êo—yø”!Ķq[þ?€f8íFDªsÙ7uö•£Ï '_nº­n?Š.4Ê÷0B}†mP‹ïÌ\¨>ĤZÌ%Â'{epÈ{Û9¹Êáo÷šdT±"Z±ª9ð¤a)s8Q"ÕÙÝ3ù£Ñk 6:tW¤Î5ÁY²©wW®.•ßɲ·qbYeºZÑ: 5ÞtdÆ œ)‘ŠûÕПãm¾Áç¥a ÅÈ@„Ëżjõ|mÛErMnçkp~›©XU-F`ݲÅ74^ŽÍ+œ{.bÅ«7iU~éþÑÕCð´’Qé§T×ÅZìÓ¥ŸT¤Ã¡˜Ð¡f9@Äg]¶ŸÅq½ÆêF†ãó|”¯)¾9;¦ˆí/$\B~º˜C$¦3éÔ ³ø¬˜Â´ú«Ó¥Y’&(Ômd½Î+Ö]= .dœ¿ûöÎ7¢ì¹Pœ'„ºFñÇOÆ}Ú÷¬Ýe×î–‡¿ñY“gNµØÃ¤j|}d£}f‰noBò¹LâÖôfüsÑáŽ$Ý?È¥Ѥќ6ñBöyöˆ]œ³™g²Ð ³c­š-<µBŠ™mcª¶Ì Síá ŸõCˆÕ8Ï^âR“žJk߾לŸHÊ«íHȨ^_4ÿVõÙij}ì[Òxþ~Þ€~ÆœP‘ݤÆWà½ãS}\Ÿ#1C-…bš( {ä &87qa󇺒{ îh½j‹ )œH4Åey4ò8‡@´?©µšV‡r©uü˜-£ ýDä©]²N.I 1§»ih‚e9j?Öù×!"yŒ‡»_¹­úÜÆiË‹à%Þ(¥ä,Nüh‡ÛxqÀÝÑÄÀ)è²”軚+àu ™[PÐÔo©<‡’í’çÛÖ<‰õŠZ&‘\EŒwê'Sú½ÙŽi´Kô!“ûŒsÛíþ)!GȮǡóÄòγeJ/—2!#èJŤ"v«™ò.Å_ºãŽÞšæ¬ËQ„ñ ö¯Îïî¼¶¢ªyjgRmåâOö~T*¯’º|¯z`û2¯E>>l :÷Q™yñפÓÛéÔb)[Þ• %c¤kÁ¡–e×RvÖEÕ='i´Î~U¹Þ‡¸ê½óPÖû—5ÖÖÏd³_F³o;§ë¢k¯›!-³iã˜ÐÓŒ7(é;2ã4óž®z›o,‰½bÊVÇ*ÆJ;é³'3ÓýV2ìvÛ+Iv7åšÉp-‘2\~v4åpã|èÊšbFá~ÿ*ƒ4•û„ûa9Ãd¯¨vÏ} €w÷û«Ü»4‡¯-]aS_Ðk½r#+c…1×Ü ù Íú¼KÈ#­s-èIehX”ÇëB‹íí`+æ§¶å“›,òôP5{ywÑÜà&Ó=ˆ®êT[4´”¼žPÓÿW¿-KMp£Ÿ‡uF1ÊkƵœ¤Ñ!Gè¦'ªdøØ‰¤”༉å1Žƒ;—®‰.æ >ïêFLй]¼(Õ®+DZÍ{ïhX–"~t:ŸádƒìHƒ&:°M£¾àžP¨ÅrIô`Jï./CDûâ>¤ÒPºm}'!Ìy-<ñ—03S”-Ÿ)ÏÞÅŠ‘µáëh š±%SNp˜:nkHÈ át^‚Š­ jÖê¨y|yzp Ãÿ[ºÃ!¢ˆxš¨ðhÄɺYjЫïà.í;ªŠ-™ØUDOOÎ:›Ïa–É9½iÕèv¥¥|D$qv¦Çw×HmadË…×O„÷š šXÙ¿`Iˆá&„ªšÔ– õì…±Qûç(×I÷!q¿Ú-TÊ…oz³hP–¬-–b–¾ÂKá9a+¬Œ3L}{X&ÆN°~K«¤hœ(ɧr±X:T’Î2Åÿü•Z„HWP±˜ÚŒö"þãM¢ u’© Ø­´ ày: ž!R›0Áš‘~’f¤«Ý¢¡§¿B¯Ó·WUØŽÉx‹\ˆÑ9É›t–ª®žQl½ï(à ÏûULd]î8kT%= ÕÆÌ§[*9§ë¿ ú`=#¼üŠîNNúDÍV°ž^ýôäFlê’@WF¢j‡ÞŒõŒÅaáUüíófÆÙpeŸ¦Ê®’ÔÞaGØVÓ2ªâkùRxå«„*ßx®Hî5å‹èÊjaø“°â7<ò] ‘½‡l½¦QѲ§nIrŽÜéš9¿T":¦¥óÔCôÇíô—ƒH÷wö³$ON»€±U2øž"¾¿IT›Îí­‚‡>Iå"JÞÓ¡ÍÈÄ8:lp_éZ,>«˜š8íÜ+c°"Zöh[ž'æÒ¬¾jñ‚"q8ƒÅ_äàîëþ¹å“ÌÑ®õ Ë)“fÈ^¯ç*®8~ÉüàÀ²ÿ½„¶'Šþâ£HMâ.=¾l:ôÍ…p¿²ñ(§z6ßÃ9‘Vàz+ØÍØ*Ô˜èYß±@ÐT&õ…À™Ë©¼¸É3Åf°_¿þÆË+àBÕ‰Ó¾¥ÉGàKÌÎfKšÉe¢'ž:"Ù²qgôóâß l½¸uú7aù⚀ã{Ž,ζxSûê÷?YöP&Òêç¿£0è÷±ß¦×­†¯FÈåä| ¿ůªÈ{æÄnšÿ3KøvÂØOîßý€Ëùâ$Xª®eŸñ3µ“¤u„ÝÏ–6Ænµ”ä–ËÛ9ÍnOëì}Í“‰ø#ÝÀ¾9ÀGÔÎO²&í²·—ä5´‘–ZHnMf¼ ƒl0ËØÖv}¹Šü4ö Øü@È¡ÊíÏzʳ\}žŸ@úôû?²¯Ü²_ìÐ[ ÅõE‹¬Ô©à¾ÛZÃŒŸåž½mÿÜ™ê§ä&ºYÎ~nþáâ7%Ú´ÂwíµU¶ ²'£ÛÉKZn´n˜E=§l&Xg1­ÒU+õé–åãc:)AU<%VÐfeüÁ17ËmÆ”¬nÚY2×¹¡ ­ö€!IKÑHÝ»X\¶~ÄÇ] Jœs%¼à¤êÐ`¥’ó" I{±B,%vÈÓ ‰/4J؆ L¼0¦ášRþ’Q Éfõu…0åÀп Òø‰I(Q ‰ö•&r†Ø’o‹ŒuŸð¤"–k÷«æÃk#oËb®TŠß¾ö:Ÿ ζfª—GýcÇ»l“tædÊÌ€ Iraa–$?qâlÛƒ¢xg…ôÍã~lO˜Oä\˜Øö9!(q>³b™áxWÞ':d RË„{œa"7÷•ŸÙl"Ñö¦L¬çP«·½VLJ¤øEé¡cÉj!löyÆcÖåL¥Ttwe]ÿ§H‡ŒW5`>ý¼î@XkðÛ}tOb¸ÉˆìhQíX²ýÍ–”ƒ`‚¢rªØ(–Ì›ËO{ëáÔ}¶ì(ïó»ÕÚUƒiJLTÄPm_³)”• î †1…¥†tÑñŽå mÏÉ×xq ªeH‹X´fzš¦ë½œÆiæÇÉ‹5·ÂÁÚÛo×Áà°ÆYs}(™O­ToÖa×Jlµ*”_n•Ͼ’SÁ¦wß-‡ã {H¾CÙŠXŠá;çhÜ—¶“Óc¸mxÚªN~ÝÈ]}ÈZS­=Zû¥ƒùûc•ŒG3ôüÒýý9¢eg¨È­XO7}ùl1Äò Vò×Ã!c°¹ë@~Û…*‹´­‰{p›fDpIî0•u¹=aލuªZ¡µ]š #~ÑÖ/‹ª‰¿ZË«ÑZ¾ŒsÉÃjÁ‡Ý¶¯ØâQ÷¶1ñ6¸‰Wþ'sÓÈà”踲oÀ\XJ~ù$ªÁÃ…†VDŒFŸRYµÃ‡¯Ìl–6¬Â›µz ¹!Mí s]ÂÄÂÑëØ†O<]äàÏý¦‘hÅÄb†¼(7y:&JßäMiæ™=Í¢›*ÙÎüCaû"4ÚD:±Ÿró¿ÓÀå$Ê\vÇð"I7) ÷©à!½£ÊÚ^¿ÛQçÙ@7°Þ¹ÕÛö m¯ýyI›j¯6e¢â%h–\ò¦o¨ ßfÀÕtìIóçõƒ5wù³¢xMiþFøÙˆ)&U(uI#Ä`ËæÈgUùæ³Ï͵mk¯ÆÇìòRŒñ9=ùA‚'v`-x繜Ú.‡khA¥›—yÑj©/=¢òòyù­]kUIâ>öj]«I#Ú€ªi3—熜Ò’OK.­çÚñÔ'U2ë‚^sÏL/ùy#ÞÍ hÒO{K¯ô|µ”ðu…ìë¬?z¬åü>žû:ó<ªÖwvÄ(Ýž±O“(b?Ö¬,‘Ùdiì u®>c;z»yJ;ŠëCɬûÂíñ‰`xÕF*ļ/ GÉ)üþ¼[+Pj“#K`]éô‘ý—ŸÊKªº£OÊ;“÷éM#›ïÀqD¯×u7wâѽ¨ÿĦȔFÓlâ¤XT7b×Ðßâvf[™åhø‘:9…€üôÔ½Qu…‚¹yúú×[cá My¨ Óþ¥ù½cX1F>Ù0Ò{áôYÊÁ¯lh¨¦xØg q»;U‡T?óÎ̉“Pa0þǦú6Ä\’}„@ï<ÌRmFVVO9O=£ÂˆŽÍ?ô[ŒeƒÍ4ô'7‚øLΖõçÙœç•rkÎíº‘ã;_ðÈsÌÉ)ˆz1޵4ªÈY´!W.I°H½Ž´~ÚÉ›b´½ú9P’OSSyÖaŸ­ÚæË>ð:­ýS˜{±ái1ôŠš* ]>!æµY6ÆÌͬ~륫‘”éïÈÎùã]RzíÖ•1³}VeQÜqqG‡bÿ¨È 9¢ðˆMå[<ˆ×,5¨7 l{mQøÆ4F1€,î祀·û&Zƒ(Ì”VÚ]Âdý6û¾°:ûºtnMþýU>ã;~}S|Vq;mB±0Þ+þÞ‡¦”êʪ|Q£‹çÜ‹;¢ü)nbUâæcÙÙß1 [Ö;‡˜>ÇŽF„Æôe¿øFnž„FÅ#ƒ™ˆ65Ž¥\È•‘u»Þ^ fŒYpÔñ¬SüîÔ>cBQDGâ†E¨]>ô‡“8\=‰¯åñ¨'$©®[Br~£y7è¬Ü¤#™êºîîõøóü¤¹ò®J\cc³“\„)\_RVŸ¦qw§ÿæ‹¶¦ÚG±XEVüžáLÎe”õŽ!ÙM`ÏÖ PU‘6ÙøÌ_»¸W»çÑýF´`ûáU¾2ülÚØ°½¤îçÞÞÅÆÁ7Õ °¹ üò¾¼hξ™XˆüÉG¢}à)LïæzÖGHW¦UvmÃûg2È›~~*IÙÈ« ^ :t­?ÄTðD€á÷M·Ÿ°€ù‡?Ö;„jÝ¿9Ðû(Ax/š7L¯Ì«²kÎÒ—œüx\f$V _ÆŒˆÉæÃü<ˆÅt «Sjßå:|Ô.ÆÞúN¯¡Èáìz'šF Ü¿e¶˜œÉÓªW³pskÏT÷ä|¸âD#âúÒy‡,Ôä‘ÒDDåDÞ N$6kðŒ.Ga©C‹\•¤Y)ÜŸdpE±N­G0§è|m˜bô«‘À@ÖÞzn] Ë>tfz_EyŸ¨H@ÒÔ35¸hõà™ýU£Ì‚G¯(»M;Vh'?½Ý·[ó‡ ¯Eµ•M‘ûÚCŸRägZVÖ.»Ù>WÌ—OëÜ®ÌÏÏ?a¾#Q6 ó,ÿô(cqàéºI‚ÛYQÿÛ9äÞ|Z"®dt…nÌÝdSCSšƒUÑÒ ÌK?êÆMEZ()%µ%øÓ¼˦+¡¯Òè[Ašš»õÜ%:­2yŽvíüƒ&¬ïXÓ¬Ìy§ÒPÅfïîŠõµ½°u|‰ÊùÅ ÜUÙœ 5{ª©ìòúðÏÈ“þÆ*îW—m?”ŸÇÞ1K£ [QR…ÃH!:g†‡¦$ùiYšû÷6Ó*¹¦!å|ÃàijšO{õ3ô°¦/ü1rÑQù©¶í‰ÊÀÌ$V‰U'_4v70©2á‰@øofM•GŽ_†€áÕ4tlH3Ú¼ˆxn\>T¸@Å8- 3®Éäú[ç¥hÑÚƒTÓ΀Š'ëŠNÇô¸pf½”½k¥9sœëÙ,Û<efå Uë¹!&¹~ LñšìeÚSôE^ô ØÛŸáú©ïÑsn†¹Ùì –Wm‡¡Ñ‡™›KCåý†¯'†Fh`ৃ#­ªä©ï8% 8’jUÇ•²¤ø‚èØ_k'H,$ý!!aQÅ艔ݡõ¯ÛèÍžÍ-òϓ} 5)M3Ò_-„¤Vi¡˜í†ªX0äôè],’~õ;ÙãàÉ»¢2•3»ÖxÜQÏ«Do%>OÏ£]:2SIº«¿ÃŽ–e]-ÝâÄyç—ŸõFâ@è¤ Lè·þÖÛ D}1• /áÁÙ¼_¼f%»órý’è5>ŠEÝRÅ/õN»;K:ß›V}¤©û à«©×L“BOdÿ WÛÔ¶ÌÕžXÖ›¼„=ɬÐà¥Ñã(÷#½_½Nö›•° ”ÓéuÓGªLÒ¾sÜ_¬XMEÖš¾˜­ŠÎ:õ·¸÷lF]†Äì½& 󮜕8Îc€ãýØJT“·ÔÂÕâŃHi¶z1l­\\-ù“¢8Ž¢v¿H hôþóù Á÷TÎÂkéF턈‡“<[ö2ètêâN1AÒéÛ;(£ MáH4mƒK„U!¥ŸÛ¿†ÄWJ|¸0ø–GǽʩØ~©rã,¢÷­ uo³™ÕD[0¼ ¬`/tÅ'šíäo›ãÍ`¤ÀÃAzÍzd»÷2#f"Ûê®;g¡c’,ל™3Ûñå‹òõcfµD"§¥´-æ5žÎ ª-²:TÎ÷ç¹{¯tò·„̤f5@1lÜ®'‘ËXü<3¦èû|=ÄÑ÷Nck‘ÄÁ±ñë+4÷ëå4´\Æ("þßÛ= ÕOwKÓaÙõ¹æUeUõ‘Äù}ð‡ÊÂyN¢KCÑ@¢ëß—'¡AçÑ=mž–šÃ¸xç¯{ãºâ*¹v'tÁò£)ß·\wn…+œû’¯¤™=¦ ¼e’&}®ê$l+®hè˜?š)îê|’K` ê¯¡ÔÊå!Q˜f)#ìâX12qO—™R0ðÃ*6ø±Bý®ö” ÷ñÝÑg¼6ª×ç¡÷1Q±]A"hWŸÔ½Úóòâð‚*Fsïa„LoE-ª{D~¶¨X2Óè@SÌJ"Sýª_P©±ýÂÒÃz/ìþ\^RŒ` F!-r÷ –´’Ù™%€d0ÄÓ¬(¡Ž(¡àq“Õ;>!Ë—]ø–vIEè%Â6†¤þˆLJ.¸ ô|Ã5yeüº,&; £òÝ J¨C@ì{¹„×§ 4qÛ%gî*Ÿ5$;:ßÿdIW;•”ûM4Ž•åÄ~”˜r(·P/²}ÙÚ ákóD°õ=)(4hÁ”Ÿ¶i)$òÎG §ý¦´ƒ¤Uš‹Y­ƒ‡®8¶këK»ª•X›UŸb#"³ý#Ëȉ凼ÆÛÊW™-ª/â,7§lEÎ"ôÊöðQêû¶0dÊyôW>ïbÀJʱ³f ÛjK|!ç-¥<·µ‚ D-&þ äHZ¦ÅL %ûÞ†NPtw“¿Žßné*ú%7Mº0Ä´Ç[BÞð×5kB„vùjsMxÉu®•{v(n¹úÄ›ïßGÇ(rÉ32ÛWêXòI%ÂçÜ#üŠIøÆaOñ ¨¥èÚH‘„ëž*W‰›t|9ÑÜËŸABq#2¾Y¼µ±÷¸Õ“¼¢æ’áZˆcÜà+5ì?§áŸ[ è´Ÿ8{·l×§Üœ,Ñšÿ|QzÎú”ÝΑçÕCÑ·}‘a÷޾1¾:ƒ¯§?椵Sú⟾¯äö(îÍŠœl..dvl5ªMkMK!‘=÷3Âý¥~cš ÚOn?±zNUƒ€.–ñD¯º’Å»PH&Ô€–ðoλÝq ¬éÕ¢ò6(ên=cq D×®Žké-Í8JÔ‘Sˆ…ÚLC篙ꗖÇ ¬Îû(ÞË÷lÁ̉6›ƒø©çÁ/ ]~"â¦ûûgë –^ݲsBÜîë{"[}8à'M «ÓMïÚ°ÙʹmƒÔîÍ—N¤?ØÉÄçdª¾”#½zÃB}>ô4µÛ”5È‚ÙøÂM×záÁg±iŸ®¬ðde§‰Ü€2—v"¼Ð³ºÀN©òîiLvº•±í™é%îhÍ5ç›{’JÝñ÷ ¾ÊÇI›o¿H»¬)bn]­4Å­l•Ö¿Tï4¼ŸÉ·6œäº¦ “~Py+ßÕS™¾`}'pëdõ*O'ÁE®ýK8u¥Ð¢Cùí¶?QéQÞ‘I_Âå|¯^fÙIÁ×]‡ø/®_¨é ÷TŠe‚?{²{¼Tãt.ÐXE!öwz"‰vÄŸàôE1€wÇÅ5K²Wnû™°Éé‚«ê›àeVÐs8Á•Ð Ñdü>H9ñóòBvßqûk«æ_íÓ˜oi ¸ó64ÙI.7×°ªT(÷“z(Ð<ê}ÇŠ,Ç—}†Ÿ5•™3ZN\¸x+¼«}¡¡¨ûõ¦îðÙz±Ñmw[^ݨ…6iö”¿¨iÌÚ¨z¡ÏG…Oq¶½öÄV£4 ÕQûq›!;f Wº[‚‡ÃÁmBtÍýmÐ*2æ¾q>’Û“’Åïê)Á\ŠÌç~ Ÿ•<ßn+~nòCï#ÕˆÎó¡+ùÚÜlt 5S ‘GbÖx¦Ù.#Øùôð»{·ºùuLÇ¡š8ÍAVVƒYUiµ¥´Õ»;Y3…ia"ÿüä®`LßÃEö ³0‚%yÿЉ!2+UMOëѾªVøKìA­j-/–QsŽro:«Ä»ÂÐ šÌz ]ÇNÐãçþÜiRÉCßØÂ¹¹›ØÃoÍ0óLtp'çªBép'wÊ»¾? F†¬µóáãAúµU2}þCl2œc4ưç‚îáöZ rMŠé-K­® iþÌ £pîèh R&–6v!Ý5il;0ŽG0VÏõrX¶´ÆŽyÿdËÙõ¢¸?§ºÈ2Û«¡|%)('a‹¿<Ø!>”=LxhÄ¥l)¼ãÖŸ›¾ÅÑÞö†ñ+;ðÕm¿>݈p¥ÖžÀÿðÁùÿÿOA60ÔÅæ„ó\l%!endstream endobj 54 0 obj << /Type /Font /Subtype /Type1 /Encoding 367 0 R /FirstChar 40 /LastChar 121 /Widths 374 0 R /BaseFont /OVMPQX+NimbusSanL-Bold /FontDescriptor 52 0 R >> endobj 52 0 obj << /Ascent 722 /CapHeight 722 /Descent -217 /FontName /OVMPQX+NimbusSanL-Bold /ItalicAngle 0 /StemV 141 /XHeight 532 /FontBBox [-173 -307 1003 949] /Flags 4 /CharSet (/parenleft/parenright/hyphen/period/slash/one/two/three/four/colon/at/A/B/C/D/F/G/I/L/M/N/P/Q/S/T/U/a/b/c/d/e/f/g/h/i/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y) /FontFile 53 0 R >> endobj 374 0 obj [333 333 0 0 0 333 278 278 0 556 556 556 556 0 0 0 0 0 333 0 0 0 0 0 975 722 722 722 722 0 611 778 0 278 0 0 611 833 722 0 667 778 0 667 611 722 0 0 0 0 0 0 0 0 0 0 0 556 611 556 611 556 333 611 611 278 0 556 278 889 611 611 611 611 389 556 333 611 556 778 556 556 ] endobj 55 0 obj << /Type /Pages /Count 6 /Parent 375 0 R /Kids [46 0 R 57 0 R 71 0 R 104 0 R 117 0 R 122 0 R] >> endobj 182 0 obj << /Type /Pages /Count 6 /Parent 375 0 R /Kids [169 0 R 184 0 R 219 0 R 250 0 R 264 0 R 282 0 R] >> endobj 332 0 obj << /Type /Pages /Count 3 /Parent 375 0 R /Kids [297 0 R 334 0 R 351 0 R] >> endobj 375 0 obj << /Type /Pages /Count 15 /Kids [55 0 R 182 0 R 332 0 R] >> endobj 376 0 obj << /Type /Outlines /First 3 0 R /Last 43 0 R /Count 8 >> endobj 43 0 obj << /Title 44 0 R /A 41 0 R /Parent 376 0 R /Prev 35 0 R >> endobj 39 0 obj << /Title 40 0 R /A 37 0 R /Parent 35 0 R >> endobj 35 0 obj << /Title 36 0 R /A 33 0 R /Parent 376 0 R /Prev 31 0 R /Next 43 0 R /First 39 0 R /Last 39 0 R /Count -1 >> endobj 31 0 obj << /Title 32 0 R /A 29 0 R /Parent 376 0 R /Prev 19 0 R /Next 35 0 R >> endobj 27 0 obj << /Title 28 0 R /A 25 0 R /Parent 19 0 R /Prev 23 0 R >> endobj 23 0 obj << /Title 24 0 R /A 21 0 R /Parent 19 0 R /Next 27 0 R >> endobj 19 0 obj << /Title 20 0 R /A 17 0 R /Parent 376 0 R /Prev 15 0 R /Next 31 0 R /First 23 0 R /Last 27 0 R /Count -2 >> endobj 15 0 obj << /Title 16 0 R /A 13 0 R /Parent 376 0 R /Prev 11 0 R /Next 19 0 R >> endobj 11 0 obj << /Title 12 0 R /A 9 0 R /Parent 376 0 R /Prev 7 0 R /Next 15 0 R >> endobj 7 0 obj << /Title 8 0 R /A 5 0 R /Parent 376 0 R /Prev 3 0 R /Next 11 0 R >> endobj 3 0 obj << /Title 4 0 R /A 1 0 R /Parent 376 0 R /Next 7 0 R >> endobj 377 0 obj << /Names [(0) 51 0 R (1.0) 2 0 R (100) 100 0 R (102) 186 0 R (103) 187 0 R (104) 188 0 R (105) 189 0 R (107) 190 0 R (108) 191 0 R (109) 192 0 R (111) 193 0 R (112) 194 0 R (113) 195 0 R (115) 196 0 R (116) 197 0 R (117) 198 0 R (119) 199 0 R (120) 200 0 R (121) 201 0 R (123) 202 0 R (124) 203 0 R (125) 204 0 R (126) 205 0 R (128) 206 0 R (129) 207 0 R (130) 208 0 R (132) 209 0 R (133) 210 0 R (134) 211 0 R (136) 212 0 R (137) 213 0 R (138) 214 0 R (140) 215 0 R (141) 216 0 R (142) 217 0 R (144) 222 0 R (145) 223 0 R (146) 224 0 R (148) 225 0 R (149) 226 0 R (150) 227 0 R (152) 228 0 R (153) 229 0 R (154) 230 0 R (156) 231 0 R (157) 232 0 R (158) 233 0 R (160) 234 0 R (161) 235 0 R (162) 236 0 R (164) 237 0 R (165) 238 0 R (166) 239 0 R (168) 240 0 R (169) 241 0 R (170) 242 0 R (172) 243 0 R (173) 244 0 R (174) 245 0 R (176) 246 0 R (177) 247 0 R (178) 248 0 R (179) 101 0 R (181) 253 0 R (182) 102 0 R (184) 254 0 R (185) 255 0 R (186) 256 0 R (187) 257 0 R (188) 258 0 R (189) 259 0 R (190) 260 0 R (191) 261 0 R (192) 262 0 R (195) 267 0 R (196) 268 0 R (197) 269 0 R (198) 270 0 R (199) 271 0 R (2.0) 6 0 R (200) 272 0 R (201) 273 0 R (202) 274 0 R (203) 275 0 R (204) 276 0 R (205) 277 0 R (206) 278 0 R (207) 279 0 R (208) 280 0 R (209) 285 0 R (210) 286 0 R (211) 287 0 R (212) 288 0 R (213) 289 0 R (214) 290 0 R (215) 291 0 R (216) 292 0 R (217) 293 0 R (218) 294 0 R (219) 295 0 R (220) 301 0 R (221) 302 0 R (222) 303 0 R (223) 304 0 R (224) 305 0 R (225) 306 0 R (226) 307 0 R (227) 308 0 R (228) 309 0 R (229) 310 0 R (230) 311 0 R (231) 312 0 R (232) 313 0 R (233) 314 0 R (234) 315 0 R (235) 316 0 R (236) 317 0 R (237) 318 0 R (238) 319 0 R (239) 320 0 R (240) 321 0 R (241) 322 0 R (242) 323 0 R (243) 324 0 R (244) 325 0 R (245) 326 0 R (246) 327 0 R (247) 328 0 R (248) 329 0 R (249) 330 0 R (250) 331 0 R (251) 338 0 R (252) 300 0 R (253) 339 0 R (254) 340 0 R (255) 341 0 R (256) 342 0 R (257) 343 0 R (258) 344 0 R (259) 345 0 R (260) 346 0 R (261) 347 0 R (262) 348 0 R (263) 349 0 R (264) 354 0 R (265) 337 0 R (266) 355 0 R (267) 356 0 R (268) 357 0 R (269) 358 0 R (270) 359 0 R (271) 360 0 R (272) 361 0 R (273) 362 0 R (274) 363 0 R (275) 364 0 R (276) 365 0 R (277) 366 0 R (3.0) 10 0 R (31) 95 0 R (33) 107 0 R (34) 108 0 R (35) 109 0 R (36) 110 0 R (37) 111 0 R (38) 112 0 R (39) 113 0 R (4.0) 14 0 R (40) 114 0 R (41) 115 0 R (42) 96 0 R (44) 119 0 R (45) 120 0 R (46) 97 0 R (48) 124 0 R (49) 98 0 R (5.0) 18 0 R (5.1.1) 22 0 R (5.2.1) 26 0 R (51) 125 0 R (52) 126 0 R (54) 127 0 R (55) 128 0 R (56) 129 0 R (57) 130 0 R (59) 131 0 R (6.0) 30 0 R (60) 132 0 R (61) 133 0 R (62) 134 0 R (63) 99 0 R (65) 135 0 R (66) 136 0 R (67) 140 0 R (68) 141 0 R (69) 142 0 R (7.0) 34 0 R (7.3.1) 38 0 R (70) 146 0 R (71) 147 0 R (72) 148 0 R (73) 149 0 R (74) 150 0 R (75) 151 0 R (76) 152 0 R (77) 153 0 R (78) 154 0 R (79) 155 0 R (8.0) 42 0 R (80) 156 0 R (81) 157 0 R (82) 158 0 R (83) 159 0 R (84) 160 0 R (85) 161 0 R (86) 165 0 R (87) 166 0 R (88) 171 0 R (89) 172 0 R (90) 173 0 R (91) 167 0 R (92) 174 0 R (93) 175 0 R (94) 176 0 R (95) 177 0 R (96) 178 0 R (97) 179 0 R (98) 180 0 R (99) 181 0 R (COPYING-FDL) 69 0 R (Doc-Start) 50 0 R (page.1) 49 0 R (page.10) 336 0 R (page.11) 353 0 R (page.2) 59 0 R (page.3) 73 0 R (page.4) 106 0 R (page.5) 221 0 R (page.6) 252 0 R (page.7) 266 0 R (page.8) 284 0 R (page.9) 299 0 R (table.1) 68 0 R] /Limits [(0) (table.1)] >> endobj 378 0 obj << /Kids [377 0 R] >> endobj 379 0 obj << /Dests 378 0 R >> endobj 380 0 obj << /Type /Catalog /Pages 375 0 R /Outlines 376 0 R /Names 379 0 R /PageMode /UseOutlines /OpenAction 45 0 R >> endobj 381 0 obj << /Author()/Title()/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfeTeX-1.21a)/Keywords() /CreationDate (D:20130205002354+01'00') /PTEX.Fullbanner (This is pdfeTeX, Version 3.141592-1.21a-2.2 (Web2C 7.5.4) kpathsea version 3.5.4) >> endobj xref 0 382 0000000000 65535 f 0000000009 00000 n 0000001722 00000 n 0000149894 00000 n 0000000048 00000 n 0000000085 00000 n 0000020354 00000 n 0000149810 00000 n 0000000124 00000 n 0000000159 00000 n 0000021592 00000 n 0000149724 00000 n 0000000198 00000 n 0000000224 00000 n 0000023064 00000 n 0000149636 00000 n 0000000264 00000 n 0000000306 00000 n 0000025098 00000 n 0000149511 00000 n 0000000346 00000 n 0000000388 00000 n 0000025284 00000 n 0000149437 00000 n 0000000430 00000 n 0000000467 00000 n 0000026029 00000 n 0000149363 00000 n 0000000509 00000 n 0000000567 00000 n 0000031448 00000 n 0000149275 00000 n 0000000607 00000 n 0000000651 00000 n 0000038325 00000 n 0000149150 00000 n 0000000691 00000 n 0000000756 00000 n 0000038512 00000 n 0000149089 00000 n 0000000798 00000 n 0000000843 00000 n 0000041757 00000 n 0000149014 00000 n 0000000883 00000 n 0000000944 00000 n 0000001424 00000 n 0000001783 00000 n 0000000994 00000 n 0000001542 00000 n 0000001602 00000 n 0000001662 00000 n 0000147904 00000 n 0000137075 00000 n 0000147735 00000 n 0000148540 00000 n 0000003259 00000 n 0000002684 00000 n 0000001853 00000 n 0000003141 00000 n 0000136126 00000 n 0000116874 00000 n 0000135955 00000 n 0000002828 00000 n 0000116306 00000 n 0000104485 00000 n 0000116130 00000 n 0000002985 00000 n 0000003201 00000 n 0000041696 00000 n 0000020415 00000 n 0000017368 00000 n 0000003353 00000 n 0000020294 00000 n 0000017624 00000 n 0000103821 00000 n 0000091229 00000 n 0000103650 00000 n 0000017771 00000 n 0000017919 00000 n 0000018066 00000 n 0000018213 00000 n 0000018360 00000 n 0000018507 00000 n 0000018654 00000 n 0000018801 00000 n 0000018948 00000 n 0000019095 00000 n 0000019243 00000 n 0000019391 00000 n 0000019539 00000 n 0000019687 00000 n 0000019835 00000 n 0000019983 00000 n 0000020138 00000 n 0000021531 00000 n 0000023003 00000 n 0000025037 00000 n 0000025223 00000 n 0000025969 00000 n 0000031386 00000 n 0000038263 00000 n 0000038450 00000 n 0000022221 00000 n 0000021348 00000 n 0000020521 00000 n 0000021469 00000 n 0000021655 00000 n 0000021717 00000 n 0000021779 00000 n 0000021843 00000 n 0000021905 00000 n 0000021967 00000 n 0000022031 00000 n 0000022095 00000 n 0000022157 00000 n 0000023251 00000 n 0000022882 00000 n 0000022316 00000 n 0000023127 00000 n 0000023189 00000 n 0000027582 00000 n 0000024916 00000 n 0000023346 00000 n 0000025161 00000 n 0000025345 00000 n 0000025407 00000 n 0000025468 00000 n 0000025530 00000 n 0000025592 00000 n 0000025655 00000 n 0000025719 00000 n 0000025780 00000 n 0000025842 00000 n 0000025905 00000 n 0000026092 00000 n 0000026154 00000 n 0000090680 00000 n 0000079244 00000 n 0000090509 00000 n 0000026215 00000 n 0000026277 00000 n 0000026339 00000 n 0000078733 00000 n 0000067942 00000 n 0000078562 00000 n 0000026401 00000 n 0000026462 00000 n 0000026525 00000 n 0000026587 00000 n 0000026649 00000 n 0000026712 00000 n 0000026774 00000 n 0000026836 00000 n 0000026899 00000 n 0000026961 00000 n 0000027024 00000 n 0000027086 00000 n 0000027148 00000 n 0000027210 00000 n 0000027273 00000 n 0000027335 00000 n 0000067233 00000 n 0000059250 00000 n 0000067063 00000 n 0000027397 00000 n 0000027460 00000 n 0000027521 00000 n 0000029582 00000 n 0000028774 00000 n 0000027728 00000 n 0000028896 00000 n 0000028958 00000 n 0000029020 00000 n 0000029083 00000 n 0000029144 00000 n 0000029205 00000 n 0000029268 00000 n 0000029330 00000 n 0000029392 00000 n 0000029454 00000 n 0000029518 00000 n 0000148653 00000 n 0000033509 00000 n 0000031264 00000 n 0000029716 00000 n 0000031511 00000 n 0000031573 00000 n 0000031637 00000 n 0000031701 00000 n 0000031763 00000 n 0000031825 00000 n 0000031886 00000 n 0000031949 00000 n 0000032011 00000 n 0000032073 00000 n 0000032136 00000 n 0000032198 00000 n 0000032260 00000 n 0000032323 00000 n 0000032385 00000 n 0000032447 00000 n 0000032510 00000 n 0000032572 00000 n 0000032634 00000 n 0000032697 00000 n 0000032761 00000 n 0000032823 00000 n 0000032885 00000 n 0000032948 00000 n 0000033010 00000 n 0000033072 00000 n 0000033135 00000 n 0000033197 00000 n 0000033259 00000 n 0000033322 00000 n 0000033384 00000 n 0000033446 00000 n 0000036546 00000 n 0000034681 00000 n 0000033617 00000 n 0000034803 00000 n 0000034865 00000 n 0000034927 00000 n 0000034989 00000 n 0000035052 00000 n 0000035114 00000 n 0000035176 00000 n 0000035239 00000 n 0000035301 00000 n 0000035363 00000 n 0000035426 00000 n 0000035488 00000 n 0000035550 00000 n 0000035613 00000 n 0000035675 00000 n 0000035737 00000 n 0000035800 00000 n 0000035862 00000 n 0000035924 00000 n 0000035987 00000 n 0000036049 00000 n 0000036110 00000 n 0000036173 00000 n 0000036235 00000 n 0000036297 00000 n 0000036360 00000 n 0000036422 00000 n 0000036484 00000 n 0000039137 00000 n 0000038079 00000 n 0000036629 00000 n 0000038201 00000 n 0000038388 00000 n 0000038575 00000 n 0000038637 00000 n 0000038699 00000 n 0000038762 00000 n 0000038824 00000 n 0000038887 00000 n 0000038949 00000 n 0000039012 00000 n 0000039074 00000 n 0000042688 00000 n 0000041512 00000 n 0000039232 00000 n 0000041634 00000 n 0000041820 00000 n 0000041882 00000 n 0000041944 00000 n 0000042006 00000 n 0000042068 00000 n 0000042130 00000 n 0000042192 00000 n 0000042254 00000 n 0000042316 00000 n 0000042378 00000 n 0000042440 00000 n 0000042502 00000 n 0000042564 00000 n 0000042626 00000 n 0000046049 00000 n 0000045186 00000 n 0000042783 00000 n 0000045308 00000 n 0000045370 00000 n 0000045432 00000 n 0000045494 00000 n 0000045556 00000 n 0000045617 00000 n 0000045678 00000 n 0000045739 00000 n 0000045801 00000 n 0000045863 00000 n 0000045925 00000 n 0000045987 00000 n 0000050834 00000 n 0000048655 00000 n 0000046132 00000 n 0000048777 00000 n 0000048839 00000 n 0000048901 00000 n 0000048963 00000 n 0000049025 00000 n 0000049087 00000 n 0000049150 00000 n 0000049212 00000 n 0000049275 00000 n 0000049337 00000 n 0000049400 00000 n 0000049462 00000 n 0000049525 00000 n 0000049586 00000 n 0000049649 00000 n 0000049711 00000 n 0000049774 00000 n 0000049836 00000 n 0000049899 00000 n 0000049961 00000 n 0000050023 00000 n 0000050085 00000 n 0000050148 00000 n 0000050210 00000 n 0000050273 00000 n 0000050335 00000 n 0000050398 00000 n 0000050460 00000 n 0000050523 00000 n 0000050585 00000 n 0000050648 00000 n 0000050710 00000 n 0000050772 00000 n 0000148770 00000 n 0000054293 00000 n 0000053304 00000 n 0000050917 00000 n 0000053426 00000 n 0000053488 00000 n 0000053550 00000 n 0000053612 00000 n 0000053674 00000 n 0000053736 00000 n 0000053797 00000 n 0000053859 00000 n 0000053921 00000 n 0000053983 00000 n 0000054045 00000 n 0000054107 00000 n 0000054169 00000 n 0000054231 00000 n 0000057279 00000 n 0000056287 00000 n 0000054376 00000 n 0000056409 00000 n 0000056471 00000 n 0000056533 00000 n 0000056595 00000 n 0000056657 00000 n 0000056719 00000 n 0000056781 00000 n 0000056845 00000 n 0000056907 00000 n 0000056969 00000 n 0000057031 00000 n 0000057093 00000 n 0000057155 00000 n 0000057217 00000 n 0000057362 00000 n 0000067592 00000 n 0000079010 00000 n 0000090981 00000 n 0000104143 00000 n 0000116630 00000 n 0000136605 00000 n 0000148256 00000 n 0000148863 00000 n 0000148940 00000 n 0000149965 00000 n 0000153393 00000 n 0000153432 00000 n 0000153470 00000 n 0000153599 00000 n trailer << /Size 382 /Root 380 0 R /Info 381 0 R /ID [<264EB585DE4F452FCBE693AEAA94D851> <264EB585DE4F452FCBE693AEAA94D851>] >> startxref 153862 %%EOF libdbi-drivers-0.9.0/drivers/mysql/dbd_mysql/c101.html000644 001750 001750 00000013174 12117473272 023436 0ustar00markusmarkus000000 000000 Driver options

    Chapter 3. Driver options

    Your application has to initialize libdbi drivers by setting some driver options with the dbi_conn_set_option() and the dbi_conn_set_option_numeric() library functions. The mysql driver supports the following options:

    host

    The hostname or IP address of the MySQL database server. Use an empty string or "localhost" to connect to a MySQL server running on the local machine.

    port (numeric)

    The port used to remotely connect to the MySQL database server over TCP. Use "0" (zero) to accept the default socket.

    username

    The name of the user accessing the database.

    password

    The password of the user accessing the database.

    dbname

    The name of the database used for the initial connection. If your program must be able to connect to a fresh MySQL installation, use the system database mysql.

    timeout (numeric)

    The connection timeout in seconds.

    encoding

    The IANA name of a character encoding which is to be used as the connection encoding. Input and output data will be silently converted from and to this character encoding, respectively. The list of available character encodings depends on your local MySQL installation. If you set this option to "auto", the connection encoding will be the same as the default encoding of the database.

    mysql_include_trailing_null (numeric)

    This item will tell the driver whether or not to include trailing null values ('\0') at the end of binary strings. This applies to the types BLOB, MEDIUMBLOB, LARGEBLOB etc. A numeric value of 0 will tell the driver to leave off the NULL value. A value of 1 will tell the driver to include the trailing NULL character.

    mysql_unix_socket

    The filename of the Unix socket used to connect to a MySQL database server running on the local machine. Provide an empty string to use the default socket.

    mysql_client_compress (numeric)

    A value larger than zero causes the client/server communication to be compressed. Set this to zero to use no data compression.

    mysql_client_found_rows (numeric)

    A value larger than zero causes the server to return the number of matched rows, not the number of affected rows.

    mysql_client_ignore_space (numeric)

    A value larger than zero causes the server to accept spaces after function names.

    mysql_client_interactive (numeric)

    A value larger than zero causes the client/server communication to use interactive_timeout instead of wait_timeout before closing an inactive connection.

    mysql_client_local_files (numeric)

    A value larger than zero enables LOAD DATA LOCAL handling.

    mysql_client_multi_statements (numeric)

    A value larger than zero causes server to accept multiple SQL statements in a single string, separated by semicolons (requires MySQL 4.1 or later).

    mysql_client_multi_results (numeric)

    A value larger than zero tells the server that the client can handle multiple result sets from multiple statements. This flag is automatically set if you use mysql_client_multi_statements (requires MySQL 4.1 or later).

    mysql_client_no_schema (numeric)

    A value larger than zero tells the server not to accept the db_name.tbl_name.col_name syntax..

    mysql_client_odbc (numeric)

    A value larger than zero causes the server to behave more ODBC-friendly.

    libdbi-drivers-0.9.0/drivers/mysql/dbd_mysql/c177.html000644 001750 001750 00000004332 11500004663 023434 0ustar00markusmarkus000000 000000 Peculiarities you should know about

    Chapter 4. Peculiarities you should know about

    This chapter lists known peculiarities of the mysql driver. This includes MySQL features that differ from what you know from the other database servers supported by libdbi, and it includes features and misfeatures introduced by the mysql driver. It is the intention of the driver author to reduce the number of misfeatures in future releases if possible.

    libdbi-drivers-0.9.0/drivers/mysql/dbd_mysql/c180.html000644 001750 001750 00000004335 12117473272 023444 0ustar00markusmarkus000000 000000 Peculiarities you should know about

    Chapter 4. Peculiarities you should know about

    This chapter lists known peculiarities of the mysql driver. This includes MySQL features that differ from what you know from the other database servers supported by libdbi, and it includes features and misfeatures introduced by the mysql driver. It is the intention of the driver author to reduce the number of misfeatures in future releases if possible.

    libdbi-drivers-0.9.0/drivers/mysql/dbd_mysql/c40.html000644 001750 001750 00000004213 11500004663 023337 0ustar00markusmarkus000000 000000 Introduction

    Chapter 1. Introduction

    MySQL, as of the time of this document's writing, is one of the fastest growing database systems worldwide. With approximately 4 million installations, and 30,000 daily downloads, the server has found a niche in the website development community. Quick deployment and ease of use are among it's assets.

    libdbi-drivers-0.9.0/drivers/mysql/dbd_mysql/c43.html000644 001750 001750 00000004213 12117473272 023355 0ustar00markusmarkus000000 000000 Introduction

    Chapter 1. Introduction

    MySQL, as of the time of this document's writing, is one of the fastest growing database systems worldwide. With approximately 4 million installations, and 30,000 daily downloads, the server has found a niche in the website development community. Quick deployment and ease of use are among it's assets.

    libdbi-drivers-0.9.0/drivers/mysql/dbd_mysql/c44.html000644 001750 001750 00000004163 11500004663 023347 0ustar00markusmarkus000000 000000 Installation

    Chapter 2. Installation

    This chapter describes the prerequisites and the procedures to build and install the mysql driver from the sources.

    libdbi-drivers-0.9.0/drivers/mysql/dbd_mysql/c47.html000644 001750 001750 00000004163 12117473272 023365 0ustar00markusmarkus000000 000000 Installation

    Chapter 2. Installation

    This chapter describes the prerequisites and the procedures to build and install the mysql driver from the sources.

    libdbi-drivers-0.9.0/drivers/mysql/dbd_mysql/c98.html000644 001750 001750 00000013173 11500004663 023361 0ustar00markusmarkus000000 000000 Driver options

    Chapter 3. Driver options

    Your application has to initialize libdbi drivers by setting some driver options with the dbi_conn_set_option() and the dbi_conn_set_option_numeric() library functions. The mysql driver supports the following options:

    host

    The hostname or IP address of the MySQL database server. Use an empty string or "localhost" to connect to a MySQL server running on the local machine.

    port (numeric)

    The port used to remotely connect to the MySQL database server over TCP. Use "0" (zero) to accept the default socket.

    username

    The name of the user accessing the database.

    password

    The password of the user accessing the database.

    dbname

    The name of the database used for the initial connection. If your program must be able to connect to a fresh MySQL installation, use the system database mysql.

    timeout (numeric)

    The connection timeout in seconds.

    encoding

    The IANA name of a character encoding which is to be used as the connection encoding. Input and output data will be silently converted from and to this character encoding, respectively. The list of available character encodings depends on your local MySQL installation. If you set this option to "auto", the connection encoding will be the same as the default encoding of the database.

    mysql_include_trailing_null (numeric)

    This item will tell the driver whether or not to include trailing null values ('\0') at the end of binary strings. This applies to the types BLOB, MEDIUMBLOB, LARGEBLOB etc. A numeric value of 0 will tell the driver to leave off the NULL value. A value of 1 will tell the driver to include the trailing NULL character.

    mysql_unix_socket

    The filename of the Unix socket used to connect to a MySQL database server running on the local machine. Provide an empty string to use the default socket.

    mysql_client_compress (numeric)

    A value larger than zero causes the client/server communication to be compressed. Set this to zero to use no data compression.

    mysql_client_found_rows (numeric)

    A value larger than zero causes the server to return the number of matched rows, not the number of affected rows.

    mysql_client_ignore_space (numeric)

    A value larger than zero causes the server to accept spaces after function names.

    mysql_client_interactive (numeric)

    A value larger than zero causes the client/server communication to use interactive_timeout instead of wait_timeout before closing an inactive connection.

    mysql_client_local_files (numeric)

    A value larger than zero enables LOAD DATA LOCAL handling.

    mysql_client_multi_statements (numeric)

    A value larger than zero causes server to accept multiple SQL statements in a single string, separated by semicolons (requires MySQL 4.1 or later).

    mysql_client_multi_results (numeric)

    A value larger than zero tells the server that the client can handle multiple result sets from multiple statements. This flag is automatically set if you use mysql_client_multi_statements (requires MySQL 4.1 or later).

    mysql_client_no_schema (numeric)

    A value larger than zero tells the server not to accept the db_name.tbl_name.col_name syntax..

    mysql_client_odbc (numeric)

    A value larger than zero causes the server to behave more ODBC-friendly.

    libdbi-drivers-0.9.0/drivers/mysql/dbd_mysql/copying-fdl.html000644 001750 001750 00000052177 12117473272 025213 0ustar00markusmarkus000000 000000 GNU Free Documentation License

    Appendix A. GNU Free Documentation License

    Version 1.1, March 2000

    Copyright (C) 2000 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.

    0. PREAMBLE

    The purpose of this License is to make a manual, textbook, or other written document "free" in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others.

    This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software.

    We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference.

    1. APPLICABILITY AND DEFINITIONS

    This License applies to any manual or other work that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you".

    A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language.

    A "Secondary Section" is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (For example, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them.

    The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License.

    The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License.

    A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, whose contents can be viewed and edited directly and straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup has been designed to thwart or discourage subsequent modification by readers is not Transparent. A copy that is not "Transparent" is called "Opaque".

    Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML designed for human modification. Opaque formats include PostScript, PDF, proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML produced by some word processors for output purposes only.

    The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, "Title Page" means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text.

    2. VERBATIM COPYING

    You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3.

    You may also lend copies, under the same conditions stated above, and you may publicly display copies.

    3. COPYING IN QUANTITY

    If you publish printed copies of the Document numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects.

    If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages.

    If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a publicly-accessible computer-network location containing a complete Transparent copy of the Document, free of added material, which the general network-using public has access to download anonymously at no charge using public-standard network protocols. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public.

    It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document.

    4. MODIFICATIONS

    You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version:

    1. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission.

    2. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has less than five).

    3. State on the Title page the name of the publisher of the Modified Version, as the publisher.

    4. Preserve all the copyright notices of the Document.

    5. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices.

    6. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below.

    7. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice.

    8. Include an unaltered copy of this License.

    9. Preserve the section entitled "History", and its title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section entitled "History" in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence.

    10. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the "History" section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission.

    11. In any section entitled "Acknowledgements" or "Dedications", preserve the section's title, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein.

    12. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles.

    13. Delete any section entitled "Endorsements". Such a section may not be included in the Modified Version.

    14. Do not retitle any existing section as "Endorsements" or to conflict in title with any Invariant Section.

    If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles.

    You may add a section entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various parties--for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard.

    You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one.

    The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version.

    5. COMBINING DOCUMENTS

    You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice.

    The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work.

    In the combination, you must combine any sections entitled "History" in the various original documents, forming one section entitled "History"; likewise combine any sections entitled "Acknowledgements", and any sections entitled "Dedications". You must delete all sections entitled "Endorsements."

    6. COLLECTIONS OF DOCUMENTS

    You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects.

    You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document.

    7. AGGREGATION WITH INDEPENDENT WORKS

    A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, does not as a whole count as a Modified Version of the Document, provided no compilation copyright is claimed for the compilation. Such a compilation is called an "aggregate", and this License does not apply to the other self-contained works thus compiled with the Document, on account of their being thus compiled, if they are not themselves derivative works of the Document.

    If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one quarter of the entire aggregate, the Document's Cover Texts may be placed on covers that surround only the Document within the aggregate. Otherwise they must appear on covers around the whole aggregate.

    8. TRANSLATION

    Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License provided that you also include the original English version of this License. In case of a disagreement between the translation and the original English version of this License, the original English version will prevail.

    9. TERMINATION

    You may not copy, modify, sublicense, or distribute the Document except as expressly provided for under this License. Any other attempt to copy, modify, sublicense or distribute the Document is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.

    10. FUTURE REVISIONS OF THIS LICENSE

    The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See http://www.gnu.org/copyleft/.

    Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation.

    How to use this License for your documents

    To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page:

    Copyright (c) YEAR YOUR NAME. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. A copy of the license is included in the section entitled "GNU Free Documentation License".

    If you have no Invariant Sections, write "with no Invariant Sections" instead of saying which ones are invariant. If you have no Front-Cover Texts, write "no Front-Cover Texts" instead of "Front-Cover Texts being LIST"; likewise for Back-Cover Texts.

    If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software.

    libdbi-drivers-0.9.0/drivers/mysql/dbd_mysql/f29.html000644 001750 001750 00000005724 11500004663 023361 0ustar00markusmarkus000000 000000 Preface

    Preface

    libdbi is a database abstraction layer written in C. It implements a framework that can utilize separate driver libraries for specific database servers. The libdbi-drivers project provides the drivers necessary to talk to the supported database servers.

    This manual provides information about the MySQL driver. The manual is intended for programmers who write applications linked against libdbi and who want their applications to work with the MySQL driver.

    Questions and comments about the MySQL driver should be sent to the libdbi-drivers-devel mailing list. Visit the libdbi-drivers-devel list page to subscribe and for further information. Questions and comments about the libdbi library should be sent to the appropriate libdbi mailing list.

    The MySQL driver is maintained by Mark Tobenkin.

    libdbi-drivers-0.9.0/drivers/mysql/dbd_mysql/f32.html000644 001750 001750 00000005724 12117473272 023366 0ustar00markusmarkus000000 000000 Preface

    Preface

    libdbi is a database abstraction layer written in C. It implements a framework that can utilize separate driver libraries for specific database servers. The libdbi-drivers project provides the drivers necessary to talk to the supported database servers.

    This manual provides information about the MySQL driver. The manual is intended for programmers who write applications linked against libdbi and who want their applications to work with the MySQL driver.

    Questions and comments about the MySQL driver should be sent to the libdbi-drivers-devel mailing list. Visit the libdbi-drivers-devel list page to subscribe and for further information. Questions and comments about the libdbi library should be sent to the appropriate libdbi mailing list.

    The MySQL driver is maintained by Mark Tobenkin.

    libdbi-drivers-0.9.0/drivers/mysql/dbd_mysql/index.html000644 001750 001750 00000006774 12117473272 024111 0ustar00markusmarkus000000 000000 mysql driver manual

    mysql driver manual

    A libdbi driver providing connectivity to MySQL databases using libmysqlclient.

    Mark Tobenkin

    Revision History
    Revision 0.52012-01-27
    Revision 0.42005-07-15
    Revision 0.32003-4-12
    Revision 0.22003-2-4
    Revision 0.12002-11-5

    Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is included in Appendix A.


    libdbi-drivers-0.9.0/drivers/mysql/dbd_mysql/x180.html000644 001750 001750 00000004762 11500004663 023462 0ustar00markusmarkus000000 000000 MySQL (mis)features

    4.1. MySQL (mis)features

    • To allow for row seeking, results are loaded into memory. This is very inefficient and may provide a bottleneck for large applications.

    • DATETIME, TIMESTAMP, DATE and TIME are all treated as the DBI type DATETIME. This is currently a string, but will change in later releases.

    • The DECIMAL type is treated as a string, as it has arbitrary precision.

    libdbi-drivers-0.9.0/drivers/mysql/dbd_mysql/x183.html000644 001750 001750 00000006474 12117473272 023502 0ustar00markusmarkus000000 000000 MySQL (mis)features

    4.1. MySQL (mis)features

    • To allow for row seeking, results are loaded into memory. This is very inefficient and may provide a bottleneck for large applications.

    • DATETIME, TIMESTAMP, DATE and TIME are all treated as the DBI type DATETIME. This is currently a string, but will change in later releases.

    • The DECIMAL type is treated as a string, as it has arbitrary precision.

    • The driver per se supports transactions and savepoints and reports this when asked through the dbi_conn_cap_get() function. However, for transactions and savepoints to actually work, several conditions have to be met. First, the database server needs to support transactional table types. Recent versions do have transactional storage engines by default, but they may be switched off during compilation or by runtime configuration. Second, the tables used with transaction or savepoint queries must be of a transactional type. Non-transactional MyISAM tables have been replaced by transactional InnoDB tables as default table type no earlier than in MySQL version 5.5.5. If you intend to use transactions and savepoints, make sure to select an appropriate engine type like InnoDB explicitly in each CREATE TABLE statement.

    libdbi-drivers-0.9.0/drivers/mysql/dbd_mysql/x47.html000644 001750 001750 00000005425 11500004663 023401 0ustar00markusmarkus000000 000000 Prerequisites

    2.1. Prerequisites

    The following packages have to be installed on your system:

    libdbi

    This library provides the framework of the database abstraction layer which can utilize the MySQL driver to perform database operations. The download page as well as the mailing lists with bug reports and patches are accessible at sourceforge.net/projects/libdbi. The current version of the MySQL driver requires libdbi version 0.8.x.

    libmysqlclient

    This library implements the client API for MySQL programs. Find the most recent release at www.mysql.com. The current version of the mysql driver should work with versions 4.x and 5.x.

    libdbi-drivers-0.9.0/drivers/mysql/dbd_mysql/x50.html000644 001750 001750 00000005425 12117473272 023406 0ustar00markusmarkus000000 000000 Prerequisites

    2.1. Prerequisites

    The following packages have to be installed on your system:

    libdbi

    This library provides the framework of the database abstraction layer which can utilize the MySQL driver to perform database operations. The download page as well as the mailing lists with bug reports and patches are accessible at sourceforge.net/projects/libdbi. The current version of the MySQL driver requires libdbi version 0.8.x.

    libmysqlclient

    This library implements the client API for MySQL programs. Find the most recent release at www.mysql.com. The current version of the mysql driver should work with versions 4.x and 5.x.

    libdbi-drivers-0.9.0/drivers/mysql/dbd_mysql/x61.html000644 001750 001750 00000012057 11500004663 023374 0ustar00markusmarkus000000 000000 Build and install the mysql driver

    2.2. Build and install the mysql driver

    First you have to unpack the libdbi-drivers archive in a suitable directory. Unpacking will create a new subdirectory libdbi-drivers-X.Y where "X.Y" denotes the version:

    $ tar -xzf libdbi-drivers-X.Y.tar.gz

    The libdbi-drivers project consists of several drivers that use a common build system. Therefore you must tell configure explicitly that you want to build the mysql driver (you can list as many drivers as you want to build):

    $ cd libdbi-drivers
    $ ./configure --with-mysql

    Run ./configure --help to find out about additional options.

    Then build the driver with the command:

    $ make

    Note: Please note that you may have to invoke gmake, the GNU version of make, on some systems.

    Then install the driver with the command (you'll need root permissions to do this):

    $ make install

    To test the operation of the newly installed driver, use the command:

    $ make check

    This command creates and runs a test program that performs a few basic input and output tests. The program will ask for an administrator username and password. This user can be any user who has database creation priveleges. Be sure to provide the name of a database which does not already exist (avoid 'test' which is used on many systems).

    Note: If for some reason you need to re-create the autoconf/automake-related files, try running ./autogen.sh. I've found out that the current stable autoconf/automake/libtool versions (as found in FreeBSD 4.7 and Debian 3.0) do not cooperate well, so I found it necessary to run the older autoconf 2.13. If necessary, edit autogen.sh so that it will catch the older autoconf version on your system.

    libdbi-drivers-0.9.0/drivers/mysql/dbd_mysql/x64.html000644 001750 001750 00000012062 12117473272 023406 0ustar00markusmarkus000000 000000 Build and install the mysql driver

    2.2. Build and install the mysql driver

    First you have to unpack the libdbi-drivers archive in a suitable directory. Unpacking will create a new subdirectory libdbi-drivers-X.Y where "X.Y" denotes the version:

    $ tar -xzf libdbi-drivers-X.Y.tar.gz

    The libdbi-drivers project consists of several drivers that use a common build system. Therefore you must tell configure explicitly that you want to build the mysql driver (you can list as many drivers as you want to build):

    $ cd libdbi-drivers
    $ ./configure --with-mysql

    Run ./configure --help to find out about additional options.

    Then build the driver with the command:

    $ make

    Note: Please note that you may have to invoke gmake, the GNU version of make, on some systems.

    Then install the driver with the command (you'll need root permissions to do this):

    $ make install

    To test the operation of the newly installed driver, use the command:

    $ make check

    This command creates and runs a test program that performs a few basic input and output tests. The program will ask for an administrator username and password. This user can be any user who has database creation priveleges. Be sure to provide the name of a database which does not already exist (avoid 'test' which is used on many systems).

    Note: If for some reason you need to re-create the autoconf/automake-related files, try running ./autogen.sh. I've found out that the current stable autoconf/automake/libtool versions (as found in FreeBSD 4.7 and Debian 3.0) do not cooperate well, so I found it necessary to run the older autoconf 2.13. If necessary, edit autogen.sh so that it will catch the older autoconf version on your system.

    libdbi-drivers-0.9.0/m4/libtool.m4000444 001750 001750 00001057216 12117467037 017537 0ustar00markusmarkus000000 000000 # libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. m4_define([_LT_COPYING], [dnl # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is part of GNU Libtool. # # GNU Libtool 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. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool 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 GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, or # obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ]) # serial 57 LT_INIT # LT_PREREQ(VERSION) # ------------------ # Complain and exit if this libtool version is less that VERSION. m4_defun([LT_PREREQ], [m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, [m4_default([$3], [m4_fatal([Libtool version $1 or higher is required], 63)])], [$2])]) # _LT_CHECK_BUILDDIR # ------------------ # Complain if the absolute build directory name contains unusual characters m4_defun([_LT_CHECK_BUILDDIR], [case `pwd` in *\ * | *\ *) AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; esac ]) # LT_INIT([OPTIONS]) # ------------------ AC_DEFUN([LT_INIT], [AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl AC_BEFORE([$0], [LT_LANG])dnl AC_BEFORE([$0], [LT_OUTPUT])dnl AC_BEFORE([$0], [LTDL_INIT])dnl m4_require([_LT_CHECK_BUILDDIR])dnl dnl Autoconf doesn't catch unexpanded LT_ macros by default: m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 dnl unless we require an AC_DEFUNed macro: AC_REQUIRE([LTOPTIONS_VERSION])dnl AC_REQUIRE([LTSUGAR_VERSION])dnl AC_REQUIRE([LTVERSION_VERSION])dnl AC_REQUIRE([LTOBSOLETE_VERSION])dnl m4_require([_LT_PROG_LTMAIN])dnl _LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}]) dnl Parse OPTIONS _LT_SET_OPTIONS([$0], [$1]) # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ltmain" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' AC_SUBST(LIBTOOL)dnl _LT_SETUP # Only expand once: m4_define([LT_INIT]) ])# LT_INIT # Old names: AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PROG_LIBTOOL], []) dnl AC_DEFUN([AM_PROG_LIBTOOL], []) # _LT_CC_BASENAME(CC) # ------------------- # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. m4_defun([_LT_CC_BASENAME], [for cc_temp in $1""; do case $cc_temp in compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` ]) # _LT_FILEUTILS_DEFAULTS # ---------------------- # It is okay to use these file commands and assume they have been set # sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'. m4_defun([_LT_FILEUTILS_DEFAULTS], [: ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} ])# _LT_FILEUTILS_DEFAULTS # _LT_SETUP # --------- m4_defun([_LT_SETUP], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl _LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl dnl _LT_DECL([], [host_alias], [0], [The host system])dnl _LT_DECL([], [host], [0])dnl _LT_DECL([], [host_os], [0])dnl dnl _LT_DECL([], [build_alias], [0], [The build system])dnl _LT_DECL([], [build], [0])dnl _LT_DECL([], [build_os], [0])dnl dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl dnl AC_REQUIRE([AC_PROG_LN_S])dnl test -z "$LN_S" && LN_S="ln -s" _LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl dnl AC_REQUIRE([LT_CMD_MAX_LEN])dnl _LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl _LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl m4_require([_LT_CMD_RELOAD])dnl m4_require([_LT_CHECK_MAGIC_METHOD])dnl m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl m4_require([_LT_CMD_OLD_ARCHIVE])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_WITH_SYSROOT])dnl _LT_CONFIG_LIBTOOL_INIT([ # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi ]) if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi _LT_CHECK_OBJDIR m4_require([_LT_TAG_COMPILER])dnl case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld="$lt_cv_prog_gnu_ld" old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o _LT_CC_BASENAME([$compiler]) # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then _LT_PATH_MAGIC fi ;; esac # Use C for the default configuration in the libtool script LT_SUPPORTED_TAG([CC]) _LT_LANG_C_CONFIG _LT_LANG_DEFAULT_CONFIG _LT_CONFIG_COMMANDS ])# _LT_SETUP # _LT_PREPARE_SED_QUOTE_VARS # -------------------------- # Define a few sed substitution that help us do robust quoting. m4_defun([_LT_PREPARE_SED_QUOTE_VARS], [# Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\([["`\\]]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ]) # _LT_PROG_LTMAIN # --------------- # Note that this code is called both from `configure', and `config.status' # now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, # `config.status' has no value for ac_aux_dir unless we are using Automake, # so we pass a copy along to make sure it has a sensible value anyway. m4_defun([_LT_PROG_LTMAIN], [m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl _LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) ltmain="$ac_aux_dir/ltmain.sh" ])# _LT_PROG_LTMAIN ## ------------------------------------- ## ## Accumulate code for creating libtool. ## ## ------------------------------------- ## # So that we can recreate a full libtool script including additional # tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS # in macros and then make a single call at the end using the `libtool' # label. # _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) # ---------------------------------------- # Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL_INIT], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_INIT], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_INIT]) # _LT_CONFIG_LIBTOOL([COMMANDS]) # ------------------------------ # Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) # _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) # ----------------------------------------------------- m4_defun([_LT_CONFIG_SAVE_COMMANDS], [_LT_CONFIG_LIBTOOL([$1]) _LT_CONFIG_LIBTOOL_INIT([$2]) ]) # _LT_FORMAT_COMMENT([COMMENT]) # ----------------------------- # Add leading comment marks to the start of each line, and a trailing # full-stop to the whole comment if one is not present already. m4_define([_LT_FORMAT_COMMENT], [m4_ifval([$1], [ m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) )]) ## ------------------------ ## ## FIXME: Eliminate VARNAME ## ## ------------------------ ## # _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) # ------------------------------------------------------------------- # CONFIGNAME is the name given to the value in the libtool script. # VARNAME is the (base) name used in the configure script. # VALUE may be 0, 1 or 2 for a computed quote escaped value based on # VARNAME. Any other value will be used directly. m4_define([_LT_DECL], [lt_if_append_uniq([lt_decl_varnames], [$2], [, ], [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], [m4_ifval([$1], [$1], [$2])]) lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) m4_ifval([$4], [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) lt_dict_add_subkey([lt_decl_dict], [$2], [tagged?], [m4_ifval([$5], [yes], [no])])]) ]) # _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) # -------------------------------------------------------- m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) # lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_tag_varnames], [_lt_decl_filter([tagged?], [yes], $@)]) # _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) # --------------------------------------------------------- m4_define([_lt_decl_filter], [m4_case([$#], [0], [m4_fatal([$0: too few arguments: $#])], [1], [m4_fatal([$0: too few arguments: $#: $1])], [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], [lt_dict_filter([lt_decl_dict], $@)])[]dnl ]) # lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) # -------------------------------------------------- m4_define([lt_decl_quote_varnames], [_lt_decl_filter([value], [1], $@)]) # lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_dquote_varnames], [_lt_decl_filter([value], [2], $@)]) # lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_varnames_tagged], [m4_assert([$# <= 2])dnl _$0(m4_quote(m4_default([$1], [[, ]])), m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) m4_define([_lt_decl_varnames_tagged], [m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) # lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_all_varnames], [_$0(m4_quote(m4_default([$1], [[, ]])), m4_if([$2], [], m4_quote(lt_decl_varnames), m4_quote(m4_shift($@))))[]dnl ]) m4_define([_lt_decl_all_varnames], [lt_join($@, lt_decl_varnames_tagged([$1], lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl ]) # _LT_CONFIG_STATUS_DECLARE([VARNAME]) # ------------------------------------ # Quote a variable value, and forward it to `config.status' so that its # declaration there will have the same value as in `configure'. VARNAME # must have a single quote delimited value for this to work. m4_define([_LT_CONFIG_STATUS_DECLARE], [$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`']) # _LT_CONFIG_STATUS_DECLARATIONS # ------------------------------ # We delimit libtool config variables with single quotes, so when # we write them to config.status, we have to be sure to quote all # embedded single quotes properly. In configure, this macro expands # each variable declared with _LT_DECL (and _LT_TAGDECL) into: # # ='`$ECHO "$" | $SED "$delay_single_quote_subst"`' m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], [m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAGS # ---------------- # Output comment and list of tags supported by the script m4_defun([_LT_LIBTOOL_TAGS], [_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl available_tags="_LT_TAGS"dnl ]) # _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) # ----------------------------------- # Extract the dictionary values for VARNAME (optionally with TAG) and # expand to a commented shell variable setting: # # # Some comment about what VAR is for. # visible_name=$lt_internal_name m4_define([_LT_LIBTOOL_DECLARE], [_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [description])))[]dnl m4_pushdef([_libtool_name], m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), [0], [_libtool_name=[$]$1], [1], [_libtool_name=$lt_[]$1], [2], [_libtool_name=$lt_[]$1], [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl ]) # _LT_LIBTOOL_CONFIG_VARS # ----------------------- # Produce commented declarations of non-tagged libtool config variables # suitable for insertion in the LIBTOOL CONFIG section of the `libtool' # script. Tagged libtool config variables (even for the LIBTOOL CONFIG # section) are produced by _LT_LIBTOOL_TAG_VARS. m4_defun([_LT_LIBTOOL_CONFIG_VARS], [m4_foreach([_lt_var], m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAG_VARS(TAG) # ------------------------- m4_define([_LT_LIBTOOL_TAG_VARS], [m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) # _LT_TAGVAR(VARNAME, [TAGNAME]) # ------------------------------ m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) # _LT_CONFIG_COMMANDS # ------------------- # Send accumulated output to $CONFIG_STATUS. Thanks to the lists of # variables for single and double quote escaping we saved from calls # to _LT_DECL, we can put quote escaped variables declarations # into `config.status', and then the shell code to quote escape them in # for loops in `config.status'. Finally, any additional code accumulated # from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. m4_defun([_LT_CONFIG_COMMANDS], [AC_PROVIDE_IFELSE([LT_OUTPUT], dnl If the libtool generation code has been placed in $CONFIG_LT, dnl instead of duplicating it all over again into config.status, dnl then we will have config.status run $CONFIG_LT later, so it dnl needs to know what name is stored there: [AC_CONFIG_COMMANDS([libtool], [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], dnl If the libtool generation code is destined for config.status, dnl expand the accumulated commands and init code now: [AC_CONFIG_COMMANDS([libtool], [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) ])#_LT_CONFIG_COMMANDS # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], [ # 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 sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' _LT_CONFIG_STATUS_DECLARATIONS LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$[]1 _LTECHO_EOF' } # Quote evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_quote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_dquote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done _LT_OUTPUT_LIBTOOL_INIT ]) # _LT_GENERATED_FILE_INIT(FILE, [COMMENT]) # ------------------------------------ # Generate a child script FILE with all initialization necessary to # reuse the environment learned by the parent script, and make the # file executable. If COMMENT is supplied, it is inserted after the # `#!' sequence but before initialization text begins. After this # macro, additional text can be appended to FILE to form the body of # the child script. The macro ends with non-zero status if the # file could not be fully written (such as if the disk is full). m4_ifdef([AS_INIT_GENERATED], [m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])], [m4_defun([_LT_GENERATED_FILE_INIT], [m4_require([AS_PREPARE])]dnl [m4_pushdef([AS_MESSAGE_LOG_FD])]dnl [lt_write_fail=0 cat >$1 <<_ASEOF || lt_write_fail=1 #! $SHELL # Generated by $as_me. $2 SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$1 <<\_ASEOF || lt_write_fail=1 AS_SHELL_SANITIZE _AS_PREPARE exec AS_MESSAGE_FD>&1 _ASEOF test $lt_write_fail = 0 && chmod +x $1[]dnl m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT # LT_OUTPUT # --------- # This macro allows early generation of the libtool script (before # AC_OUTPUT is called), incase it is used in configure for compilation # tests. AC_DEFUN([LT_OUTPUT], [: ${CONFIG_LT=./config.lt} AC_MSG_NOTICE([creating $CONFIG_LT]) _LT_GENERATED_FILE_INIT(["$CONFIG_LT"], [# Run this file to recreate a libtool stub with the current configuration.]) cat >>"$CONFIG_LT" <<\_LTEOF lt_cl_silent=false exec AS_MESSAGE_LOG_FD>>config.log { echo AS_BOX([Running $as_me.]) } >&AS_MESSAGE_LOG_FD lt_cl_help="\ \`$as_me' creates a local libtool stub from the current configuration, for use in further configure time tests before the real libtool is generated. Usage: $[0] [[OPTIONS]] -h, --help print this help, then exit -V, --version print version number, then exit -q, --quiet do not print progress messages -d, --debug don't remove temporary files Report bugs to ." lt_cl_version="\ m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) configured by $[0], generated by m4_PACKAGE_STRING. Copyright (C) 2011 Free Software Foundation, Inc. This config.lt script is free software; the Free Software Foundation gives unlimited permision to copy, distribute and modify it." while test $[#] != 0 do case $[1] in --version | --v* | -V ) echo "$lt_cl_version"; exit 0 ;; --help | --h* | -h ) echo "$lt_cl_help"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --quiet | --q* | --silent | --s* | -q ) lt_cl_silent=: ;; -*) AC_MSG_ERROR([unrecognized option: $[1] Try \`$[0] --help' for more information.]) ;; *) AC_MSG_ERROR([unrecognized argument: $[1] Try \`$[0] --help' for more information.]) ;; esac shift done if $lt_cl_silent; then exec AS_MESSAGE_FD>/dev/null fi _LTEOF cat >>"$CONFIG_LT" <<_LTEOF _LT_OUTPUT_LIBTOOL_COMMANDS_INIT _LTEOF cat >>"$CONFIG_LT" <<\_LTEOF AC_MSG_NOTICE([creating $ofile]) _LT_OUTPUT_LIBTOOL_COMMANDS AS_EXIT(0) _LTEOF chmod +x "$CONFIG_LT" # configure is writing to config.log, but config.lt does its own redirection, # appending to config.log, which fails on DOS, as config.log is still kept # open by configure. Here we exec the FD to /dev/null, effectively closing # config.log, so it can be properly (re)opened and appended to by config.lt. lt_cl_success=: test "$silent" = yes && lt_config_lt_args="$lt_config_lt_args --quiet" exec AS_MESSAGE_LOG_FD>/dev/null $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false exec AS_MESSAGE_LOG_FD>>config.log $lt_cl_success || AS_EXIT(1) ])# LT_OUTPUT # _LT_CONFIG(TAG) # --------------- # If TAG is the built-in tag, create an initial libtool script with a # default configuration from the untagged config vars. Otherwise add code # to config.status for appending the configuration named by TAG from the # matching tagged config vars. m4_defun([_LT_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_CONFIG_SAVE_COMMANDS([ m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl m4_if(_LT_TAG, [C], [ # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi cfgfile="${ofile}T" trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # _LT_COPYING _LT_LIBTOOL_TAGS # ### BEGIN LIBTOOL CONFIG _LT_LIBTOOL_CONFIG_VARS _LT_LIBTOOL_TAG_VARS # ### END LIBTOOL CONFIG _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac _LT_PROG_LTMAIN # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) _LT_PROG_REPLACE_SHELLFNS mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" ], [cat <<_LT_EOF >> "$ofile" dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded dnl in a comment (ie after a #). # ### BEGIN LIBTOOL TAG CONFIG: $1 _LT_LIBTOOL_TAG_VARS(_LT_TAG) # ### END LIBTOOL TAG CONFIG: $1 _LT_EOF ])dnl /m4_if ], [m4_if([$1], [], [ PACKAGE='$PACKAGE' VERSION='$VERSION' TIMESTAMP='$TIMESTAMP' RM='$RM' ofile='$ofile'], []) ])dnl /_LT_CONFIG_SAVE_COMMANDS ])# _LT_CONFIG # LT_SUPPORTED_TAG(TAG) # --------------------- # Trace this macro to discover what tags are supported by the libtool # --tag option, using: # autoconf --trace 'LT_SUPPORTED_TAG:$1' AC_DEFUN([LT_SUPPORTED_TAG], []) # C support is built-in for now m4_define([_LT_LANG_C_enabled], []) m4_define([_LT_TAGS], []) # LT_LANG(LANG) # ------------- # Enable libtool support for the given language if not already enabled. AC_DEFUN([LT_LANG], [AC_BEFORE([$0], [LT_OUTPUT])dnl m4_case([$1], [C], [_LT_LANG(C)], [C++], [_LT_LANG(CXX)], [Go], [_LT_LANG(GO)], [Java], [_LT_LANG(GCJ)], [Fortran 77], [_LT_LANG(F77)], [Fortran], [_LT_LANG(FC)], [Windows Resource], [_LT_LANG(RC)], [m4_ifdef([_LT_LANG_]$1[_CONFIG], [_LT_LANG($1)], [m4_fatal([$0: unsupported language: "$1"])])])dnl ])# LT_LANG # _LT_LANG(LANGNAME) # ------------------ m4_defun([_LT_LANG], [m4_ifdef([_LT_LANG_]$1[_enabled], [], [LT_SUPPORTED_TAG([$1])dnl m4_append([_LT_TAGS], [$1 ])dnl m4_define([_LT_LANG_]$1[_enabled], [])dnl _LT_LANG_$1_CONFIG($1)])dnl ])# _LT_LANG m4_ifndef([AC_PROG_GO], [ ############################################################ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_GO. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # ############################################################ m4_defun([AC_PROG_GO], [AC_LANG_PUSH(Go)dnl AC_ARG_VAR([GOC], [Go compiler command])dnl AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl _AC_ARG_VAR_LDFLAGS()dnl AC_CHECK_TOOL(GOC, gccgo) if test -z "$GOC"; then if test -n "$ac_tool_prefix"; then AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo]) fi fi if test -z "$GOC"; then AC_CHECK_PROG(GOC, gccgo, gccgo, false) fi ])#m4_defun ])#m4_ifndef # _LT_LANG_DEFAULT_CONFIG # ----------------------- m4_defun([_LT_LANG_DEFAULT_CONFIG], [AC_PROVIDE_IFELSE([AC_PROG_CXX], [LT_LANG(CXX)], [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) AC_PROVIDE_IFELSE([AC_PROG_F77], [LT_LANG(F77)], [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) AC_PROVIDE_IFELSE([AC_PROG_FC], [LT_LANG(FC)], [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal dnl pulling things in needlessly. AC_PROVIDE_IFELSE([AC_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([LT_PROG_GCJ], [LT_LANG(GCJ)], [m4_ifdef([AC_PROG_GCJ], [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([A][M_PROG_GCJ], [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([LT_PROG_GCJ], [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) AC_PROVIDE_IFELSE([AC_PROG_GO], [LT_LANG(GO)], [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])]) AC_PROVIDE_IFELSE([LT_PROG_RC], [LT_LANG(RC)], [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) ])# _LT_LANG_DEFAULT_CONFIG # Obsolete macros: AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_CXX], []) dnl AC_DEFUN([AC_LIBTOOL_F77], []) dnl AC_DEFUN([AC_LIBTOOL_FC], []) dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) dnl AC_DEFUN([AC_LIBTOOL_RC], []) # _LT_TAG_COMPILER # ---------------- m4_defun([_LT_TAG_COMPILER], [AC_REQUIRE([AC_PROG_CC])dnl _LT_DECL([LTCC], [CC], [1], [A C compiler])dnl _LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl _LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl _LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC ])# _LT_TAG_COMPILER # _LT_COMPILER_BOILERPLATE # ------------------------ # Check for compiler boilerplate output or warnings with # the simple compiler test code. m4_defun([_LT_COMPILER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ])# _LT_COMPILER_BOILERPLATE # _LT_LINKER_BOILERPLATE # ---------------------- # Check for linker boilerplate output or warnings with # the simple link test code. m4_defun([_LT_LINKER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ])# _LT_LINKER_BOILERPLATE # _LT_REQUIRED_DARWIN_CHECKS # ------------------------- m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ case $host_os in rhapsody* | darwin*) AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) AC_CHECK_TOOL([LIPO], [lipo], [:]) AC_CHECK_TOOL([OTOOL], [otool], [:]) AC_CHECK_TOOL([OTOOL64], [otool64], [:]) _LT_DECL([], [DSYMUTIL], [1], [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) _LT_DECL([], [NMEDIT], [1], [Tool to change global to local symbols on Mac OS X]) _LT_DECL([], [LIPO], [1], [Tool to manipulate fat objects and archives on Mac OS X]) _LT_DECL([], [OTOOL], [1], [ldd/readelf like tool for Mach-O binaries on Mac OS X]) _LT_DECL([], [OTOOL64], [1], [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], [lt_cv_apple_cc_single_mod=no if test -z "${LT_MULTI_MODULE}"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test $_lt_result -eq 0; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -rf libconftest.dylib* rm -f conftest.* fi]) AC_CACHE_CHECK([for -exported_symbols_list linker flag], [lt_cv_ld_exported_symbols_list], [lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [lt_cv_ld_exported_symbols_list=yes], [lt_cv_ld_exported_symbols_list=no]) LDFLAGS="$save_LDFLAGS" ]) AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], [lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then lt_cv_ld_force_load=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM ]) case $host_os in rhapsody* | darwin1.[[012]]) _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; 10.[[012]]*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test "$lt_cv_apple_cc_single_mod" = "yes"; then _lt_dar_single_mod='$single_module' fi if test "$lt_cv_ld_exported_symbols_list" = "yes"; then _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' fi if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac ]) # _LT_DARWIN_LINKER_FEATURES([TAG]) # --------------------------------- # Checks for linker and compiler features on darwin m4_defun([_LT_DARWIN_LINKER_FEATURES], [ m4_require([_LT_REQUIRED_DARWIN_CHECKS]) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported if test "$lt_cv_ld_force_load" = "yes"; then _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes], [FC], [_LT_TAGVAR(compiler_needs_object, $1)=yes]) else _LT_TAGVAR(whole_archive_flag_spec, $1)='' fi _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=func_echo_all _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" m4_if([$1], [CXX], [ if test "$lt_cv_apple_cc_single_mod" != "yes"; then _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" fi ],[]) else _LT_TAGVAR(ld_shlibs, $1)=no fi ]) # _LT_SYS_MODULE_PATH_AIX([TAGNAME]) # ---------------------------------- # Links a minimal program and checks the executable # for the system default hardcoded library path. In most cases, # this is /usr/lib:/lib, but when the MPI compilers are used # the location of the communication and MPI libs are included too. # If we don't find anything, use the default library path according # to the aix ld manual. # Store the results from the different compilers for each TAGNAME. # Allow to override them for all tags through lt_cv_aix_libpath. m4_defun([_LT_SYS_MODULE_PATH_AIX], [m4_require([_LT_DECL_SED])dnl if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])], [AC_LINK_IFELSE([AC_LANG_PROGRAM],[ lt_aix_libpath_sed='[ /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }]' _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi],[]) if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])="/usr/lib:/lib" fi ]) aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1]) fi ])# _LT_SYS_MODULE_PATH_AIX # _LT_SHELL_INIT(ARG) # ------------------- m4_define([_LT_SHELL_INIT], [m4_divert_text([M4SH-INIT], [$1 ])])# _LT_SHELL_INIT # _LT_PROG_ECHO_BACKSLASH # ----------------------- # Find how we can fake an echo command that does not interpret backslash. # In particular, with Autoconf 2.60 or later we add some code to the start # of the generated configure script which will find a shell with a builtin # printf (which we can use as an echo command). m4_defun([_LT_PROG_ECHO_BACKSLASH], [ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO AC_MSG_CHECKING([how to print strings]) # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $[]1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } case "$ECHO" in printf*) AC_MSG_RESULT([printf]) ;; print*) AC_MSG_RESULT([print -r]) ;; *) AC_MSG_RESULT([cat]) ;; esac m4_ifdef([_AS_DETECT_SUGGESTED], [_AS_DETECT_SUGGESTED([ test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test "X`printf %s $ECHO`" = "X$ECHO" \ || test "X`print -r -- $ECHO`" = "X$ECHO" )])]) _LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) _LT_DECL([], [ECHO], [1], [An echo program that protects backslashes]) ])# _LT_PROG_ECHO_BACKSLASH # _LT_WITH_SYSROOT # ---------------- AC_DEFUN([_LT_WITH_SYSROOT], [AC_MSG_CHECKING([for sysroot]) AC_ARG_WITH([sysroot], [ --with-sysroot[=DIR] Search for dependent libraries within DIR (or the compiler's sysroot if not specified).], [], [with_sysroot=no]) dnl lt_sysroot will always be passed unquoted. We quote it here dnl in case the user passed a directory name. lt_sysroot= case ${with_sysroot} in #( yes) if test "$GCC" = yes; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) AC_MSG_RESULT([${with_sysroot}]) AC_MSG_ERROR([The sysroot must be an absolute path.]) ;; esac AC_MSG_RESULT([${lt_sysroot:-no}]) _LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl [dependent libraries, and in which our libraries should be installed.])]) # _LT_ENABLE_LOCK # --------------- m4_defun([_LT_ENABLE_LOCK], [AC_ARG_ENABLE([libtool-lock], [AS_HELP_STRING([--disable-libtool-lock], [avoid locking (might break parallel builds)])]) test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" ;; *ELF-64*) HPUX_IA64_MODE="64" ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out which ABI we are using. echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_i386" ;; ppc64-*linux*|powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; ppc*-*linux*|powerpc*-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, [AC_LANG_PUSH(C) AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) AC_LANG_POP]) if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; *-*solaris*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD="${LD-ld}_sol2" fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks="$enable_libtool_lock" ])# _LT_ENABLE_LOCK # _LT_PROG_AR # ----------- m4_defun([_LT_PROG_AR], [AC_CHECK_TOOLS(AR, [ar], false) : ${AR=ar} : ${AR_FLAGS=cru} _LT_DECL([], [AR], [1], [The archiver]) _LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive]) AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file], [lt_cv_ar_at_file=no AC_COMPILE_IFELSE([AC_LANG_PROGRAM], [echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD' AC_TRY_EVAL([lt_ar_try]) if test "$ac_status" -eq 0; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a AC_TRY_EVAL([lt_ar_try]) if test "$ac_status" -ne 0; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a ]) ]) if test "x$lt_cv_ar_at_file" = xno; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi _LT_DECL([], [archiver_list_spec], [1], [How to feed a file listing to the archiver]) ])# _LT_PROG_AR # _LT_CMD_OLD_ARCHIVE # ------------------- m4_defun([_LT_CMD_OLD_ARCHIVE], [_LT_PROG_AR AC_CHECK_TOOL(STRIP, strip, :) test -z "$STRIP" && STRIP=: _LT_DECL([], [STRIP], [1], [A symbol stripping program]) AC_CHECK_TOOL(RANLIB, ranlib, :) test -z "$RANLIB" && RANLIB=: _LT_DECL([], [RANLIB], [1], [Commands used to install an old-style archive]) # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac _LT_DECL([], [old_postinstall_cmds], [2]) _LT_DECL([], [old_postuninstall_cmds], [2]) _LT_TAGDECL([], [old_archive_cmds], [2], [Commands used to build an old-style archive]) _LT_DECL([], [lock_old_archive_extraction], [0], [Whether to use a lock for old archive extraction]) ])# _LT_CMD_OLD_ARCHIVE # _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------------------- # Check whether the given compiler option works AC_DEFUN([_LT_COMPILER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$3" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi fi $RM conftest* ]) if test x"[$]$2" = xyes; then m4_if([$5], , :, [$5]) else m4_if([$6], , :, [$6]) fi ])# _LT_COMPILER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) # _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------- # Check whether the given linker option works AC_DEFUN([_LT_LINKER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $3" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&AS_MESSAGE_LOG_FD $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi else $2=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" ]) if test x"[$]$2" = xyes; then m4_if([$4], , :, [$4]) else m4_if([$5], , :, [$5]) fi ])# _LT_LINKER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) # LT_CMD_MAX_LEN #--------------- AC_DEFUN([LT_CMD_MAX_LEN], [AC_REQUIRE([AC_CANONICAL_HOST])dnl # find the maximum length of command line arguments AC_MSG_CHECKING([the maximum length of command line arguments]) AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl i=0 teststring="ABCD" case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8 ; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac ]) if test -n $lt_cv_sys_max_cmd_len ; then AC_MSG_RESULT($lt_cv_sys_max_cmd_len) else AC_MSG_RESULT(none) fi max_cmd_len=$lt_cv_sys_max_cmd_len _LT_DECL([], [max_cmd_len], [0], [What is the maximum length of a command?]) ])# LT_CMD_MAX_LEN # Old name: AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) # _LT_HEADER_DLFCN # ---------------- m4_defun([_LT_HEADER_DLFCN], [AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl ])# _LT_HEADER_DLFCN # _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, # ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) # ---------------------------------------------------------------- m4_defun([_LT_TRY_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test "$cross_compiling" = yes; then : [$4] else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF [#line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; }] _LT_EOF if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) $1 ;; x$lt_dlneed_uscore) $2 ;; x$lt_dlunknown|x*) $3 ;; esac else : # compilation failed $3 fi fi rm -fr conftest* ])# _LT_TRY_DLOPEN_SELF # LT_SYS_DLOPEN_SELF # ------------------ AC_DEFUN([LT_SYS_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ]) ;; *) AC_CHECK_FUNC([shl_load], [lt_cv_dlopen="shl_load"], [AC_CHECK_LIB([dld], [shl_load], [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"], [AC_CHECK_FUNC([dlopen], [lt_cv_dlopen="dlopen"], [AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], [AC_CHECK_LIB([svld], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], [AC_CHECK_LIB([dld], [dld_link], [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"]) ]) ]) ]) ]) ]) ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" AC_CACHE_CHECK([whether a program can dlopen itself], lt_cv_dlopen_self, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) ]) if test "x$lt_cv_dlopen_self" = xyes; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" AC_CACHE_CHECK([whether a statically linked program can dlopen itself], lt_cv_dlopen_self_static, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) ]) fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi _LT_DECL([dlopen_support], [enable_dlopen], [0], [Whether dlopen is supported]) _LT_DECL([dlopen_self], [enable_dlopen_self], [0], [Whether dlopen of programs is supported]) _LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], [Whether dlopen of statically linked programs is supported]) ])# LT_SYS_DLOPEN_SELF # Old name: AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) # _LT_COMPILER_C_O([TAGNAME]) # --------------------------- # Check to see if options -c and -o are simultaneously supported by compiler. # This macro does not hard code the compiler like AC_PROG_CC_C_O. m4_defun([_LT_COMPILER_C_O], [m4_require([_LT_DECL_SED])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes fi fi chmod u+w . 2>&AS_MESSAGE_LOG_FD $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* ]) _LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], [Does compiler simultaneously support -c and -o options?]) ])# _LT_COMPILER_C_O # _LT_COMPILER_FILE_LOCKS([TAGNAME]) # ---------------------------------- # Check to see if we can do hard links to lock some files if needed m4_defun([_LT_COMPILER_FILE_LOCKS], [m4_require([_LT_ENABLE_LOCK])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_COMPILER_C_O([$1]) hard_links="nottested" if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user AC_MSG_CHECKING([if we can lock with hard links]) hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no AC_MSG_RESULT([$hard_links]) if test "$hard_links" = no; then AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) need_locks=warn fi else need_locks=no fi _LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) ])# _LT_COMPILER_FILE_LOCKS # _LT_CHECK_OBJDIR # ---------------- m4_defun([_LT_CHECK_OBJDIR], [AC_CACHE_CHECK([for objdir], [lt_cv_objdir], [rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null]) objdir=$lt_cv_objdir _LT_DECL([], [objdir], [0], [The name of the directory that contains temporary libtool files])dnl m4_pattern_allow([LT_OBJDIR])dnl AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/", [Define to the sub-directory in which libtool stores uninstalled libraries.]) ])# _LT_CHECK_OBJDIR # _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) # -------------------------------------- # Check hardcoding attributes. m4_defun([_LT_LINKER_HARDCODE_LIBPATH], [AC_MSG_CHECKING([how to hardcode library paths into programs]) _LT_TAGVAR(hardcode_action, $1)= if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || test -n "$_LT_TAGVAR(runpath_var, $1)" || test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then # We can hardcode non-existent directories. if test "$_LT_TAGVAR(hardcode_direct, $1)" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no && test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then # Linking always hardcodes the temporary library directory. _LT_TAGVAR(hardcode_action, $1)=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. _LT_TAGVAR(hardcode_action, $1)=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. _LT_TAGVAR(hardcode_action, $1)=unsupported fi AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) if test "$_LT_TAGVAR(hardcode_action, $1)" = relink || test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi _LT_TAGDECL([], [hardcode_action], [0], [How to hardcode a shared library path into an executable]) ])# _LT_LINKER_HARDCODE_LIBPATH # _LT_CMD_STRIPLIB # ---------------- m4_defun([_LT_CMD_STRIPLIB], [m4_require([_LT_DECL_EGREP]) striplib= old_striplib= AC_MSG_CHECKING([whether stripping libraries is possible]) if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" AC_MSG_RESULT([yes]) else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" old_striplib="$STRIP -S" AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) fi ;; *) AC_MSG_RESULT([no]) ;; esac fi _LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) _LT_DECL([], [striplib], [1]) ])# _LT_CMD_STRIPLIB # _LT_SYS_DYNAMIC_LINKER([TAG]) # ----------------------------- # PORTME Fill in your ld.so characteristics m4_defun([_LT_SYS_DYNAMIC_LINKER], [AC_REQUIRE([AC_CANONICAL_HOST])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_OBJDUMP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl AC_MSG_CHECKING([dynamic linker characteristics]) m4_if([$1], [], [ if test "$GCC" = yes; then case $host_os in darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; *) lt_awk_arg="/^libraries:/" ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq="s,=\([[A-Za-z]]:\),\1,g" ;; *) lt_sed_strip_eq="s,=/,/,g" ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary. lt_tmp_lt_search_path_spec= lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path/$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" else test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS=" "; FS="/|\n";} { lt_foo=""; lt_count=0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo="/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[[lt_foo]]++; } if (lt_freq[[lt_foo]] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's,/\([[A-Za-z]]:\),\1,g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi]) library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[[4-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[[01]] | aix4.[[01]].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[[45]]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' library_names_spec='${libname}.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec="$LIB" if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[[23]].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[[01]]* | freebsdelf3.[[01]]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=yes sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[[3-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath], [lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], [lt_cv_shlibpath_overrides_runpath=yes])]) LDFLAGS=$save_LDFLAGS libdir=$save_libdir ]) shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[[89]] | openbsd2.[[89]].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac AC_MSG_RESULT([$dynamic_linker]) test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi _LT_DECL([], [variables_saved_for_relink], [1], [Variables whose values should be saved in libtool wrapper scripts and restored at link time]) _LT_DECL([], [need_lib_prefix], [0], [Do we need the "lib" prefix for modules?]) _LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) _LT_DECL([], [version_type], [0], [Library versioning type]) _LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) _LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) _LT_DECL([], [shlibpath_overrides_runpath], [0], [Is shlibpath searched before the hard-coded library search path?]) _LT_DECL([], [libname_spec], [1], [Format of library name prefix]) _LT_DECL([], [library_names_spec], [1], [[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]]) _LT_DECL([], [soname_spec], [1], [[The coded name of the library, if different from the real name]]) _LT_DECL([], [install_override_mode], [1], [Permission mode override for installation of shared libraries]) _LT_DECL([], [postinstall_cmds], [2], [Command to use after installation of a shared archive]) _LT_DECL([], [postuninstall_cmds], [2], [Command to use after uninstallation of a shared archive]) _LT_DECL([], [finish_cmds], [2], [Commands used to finish a libtool library installation in a directory]) _LT_DECL([], [finish_eval], [1], [[As "finish_cmds", except a single script fragment to be evaled but not shown]]) _LT_DECL([], [hardcode_into_libs], [0], [Whether we should hardcode library paths into libraries]) _LT_DECL([], [sys_lib_search_path_spec], [2], [Compile-time system search path for libraries]) _LT_DECL([], [sys_lib_dlsearch_path_spec], [2], [Run-time system search path for libraries]) ])# _LT_SYS_DYNAMIC_LINKER # _LT_PATH_TOOL_PREFIX(TOOL) # -------------------------- # find a file program which can recognize shared library AC_DEFUN([_LT_PATH_TOOL_PREFIX], [m4_require([_LT_DECL_EGREP])dnl AC_MSG_CHECKING([for $1]) AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, [case $MAGIC_CMD in [[\\/*] | ?:[\\/]*]) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR dnl $ac_dummy forces splitting on constant user-supplied paths. dnl POSIX.2 word splitting is done only on the output of word expansions, dnl not every word. This closes a longstanding sh security hole. ac_dummy="m4_if([$2], , $PATH, [$2])" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$1; then lt_cv_path_MAGIC_CMD="$ac_dir/$1" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac]) MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then AC_MSG_RESULT($MAGIC_CMD) else AC_MSG_RESULT(no) fi _LT_DECL([], [MAGIC_CMD], [0], [Used to examine libraries when file_magic_cmd begins with "file"])dnl ])# _LT_PATH_TOOL_PREFIX # Old name: AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) # _LT_PATH_MAGIC # -------------- # find a file program which can recognize a shared library m4_defun([_LT_PATH_MAGIC], [_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) else MAGIC_CMD=: fi fi ])# _LT_PATH_MAGIC # LT_PATH_LD # ---------- # find the pathname to the GNU or non-GNU linker AC_DEFUN([LT_PATH_LD], [AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PROG_ECHO_BACKSLASH])dnl AC_ARG_WITH([gnu-ld], [AS_HELP_STRING([--with-gnu-ld], [assume the C compiler uses GNU ld @<:@default=no@:>@])], [test "$withval" = no || with_gnu_ld=yes], [with_gnu_ld=no])dnl ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. AC_MSG_CHECKING([for ld used by $CC]) case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [[\\/]]* | ?:[[\\/]]*) re_direlt='/[[^/]][[^/]]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi AC_CACHE_VAL(lt_cv_path_LD, [if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &1 /dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; gnu*) lt_cv_deplibs_check_method=pass_all ;; haiku*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'] lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[[3-9]]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) lt_cv_deplibs_check_method=pass_all ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; esac ]) file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown _LT_DECL([], [deplibs_check_method], [1], [Method to check whether dependent libraries are shared objects]) _LT_DECL([], [file_magic_cmd], [1], [Command to use when deplibs_check_method = "file_magic"]) _LT_DECL([], [file_magic_glob], [1], [How to find potential files when deplibs_check_method = "file_magic"]) _LT_DECL([], [want_nocaseglob], [1], [Find potential files using nocaseglob when deplibs_check_method = "file_magic"]) ])# _LT_CHECK_MAGIC_METHOD # LT_PATH_NM # ---------- # find the pathname to a BSD- or MS-compatible name lister AC_DEFUN([LT_PATH_NM], [AC_REQUIRE([AC_PROG_CC])dnl AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, [if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else lt_nm_to_check="${ac_tool_prefix}nm" if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. tmp_nm="$ac_dir/$lt_tmp_nm" if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in */dev/null* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS="$lt_save_ifs" done : ${lt_cv_path_NM=no} fi]) if test "$lt_cv_path_NM" != "no"; then NM="$lt_cv_path_NM" else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols" ;; *) DUMPBIN=: ;; esac fi AC_SUBST([DUMPBIN]) if test "$DUMPBIN" != ":"; then NM="$DUMPBIN" fi fi test -z "$NM" && NM=nm AC_SUBST([NM]) _LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], [lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD) cat conftest.out >&AS_MESSAGE_LOG_FD if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest*]) ])# LT_PATH_NM # Old names: AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_PROG_NM], []) dnl AC_DEFUN([AC_PROG_NM], []) # _LT_CHECK_SHAREDLIB_FROM_LINKLIB # -------------------------------- # how to determine the name of the shared library # associated with a specific link library. # -- PORTME fill in with the dynamic library characteristics m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB], [m4_require([_LT_DECL_EGREP]) m4_require([_LT_DECL_OBJDUMP]) m4_require([_LT_DECL_DLLTOOL]) AC_CACHE_CHECK([how to associate runtime and link libraries], lt_cv_sharedlib_from_linklib_cmd, [lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh # decide which to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd="$ECHO" ;; esac ]) sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO _LT_DECL([], [sharedlib_from_linklib_cmd], [1], [Command to associate shared and link libraries]) ])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB # _LT_PATH_MANIFEST_TOOL # ---------------------- # locate the manifest tool m4_defun([_LT_PATH_MANIFEST_TOOL], [AC_CHECK_TOOL(MANIFEST_TOOL, mt, :) test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool], [lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&AS_MESSAGE_LOG_FD if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest*]) if test "x$lt_cv_path_mainfest_tool" != xyes; then MANIFEST_TOOL=: fi _LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl ])# _LT_PATH_MANIFEST_TOOL # LT_LIB_M # -------- # check for math library AC_DEFUN([LT_LIB_M], [AC_REQUIRE([AC_CANONICAL_HOST])dnl LIBM= case $host in *-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*) # These system don't have libm, or don't need it ;; *-ncr-sysv4.3*) AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") ;; *) AC_CHECK_LIB(m, cos, LIBM="-lm") ;; esac AC_SUBST([LIBM]) ])# LT_LIB_M # Old name: AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_CHECK_LIBM], []) # _LT_COMPILER_NO_RTTI([TAGNAME]) # ------------------------------- m4_defun([_LT_COMPILER_NO_RTTI], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= if test "$GCC" = yes; then case $cc_basename in nvcc*) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;; *) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;; esac _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], lt_cv_prog_compiler_rtti_exceptions, [-fno-rtti -fno-exceptions], [], [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) fi _LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], [Compiler flag to turn off builtin functions]) ])# _LT_COMPILER_NO_RTTI # _LT_CMD_GLOBAL_SYMBOLS # ---------------------- m4_defun([_LT_CMD_GLOBAL_SYMBOLS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([LT_PATH_NM])dnl AC_REQUIRE([LT_PATH_LD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_TAG_COMPILER])dnl # Check for command to grab the raw symbol name followed by C symbol from nm. AC_MSG_CHECKING([command to parse $NM output from $compiler object]) AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], [ # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[[BCDEGRST]]' # Regexp to match symbols that can be accessed directly from C. sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[[BCDT]]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[[ABCDGISTW]]' ;; hpux*) if test "$host_cpu" = ia64; then symcode='[[ABCDEGRST]]' fi ;; irix* | nonstopux*) symcode='[[BCDEGRST]]' ;; osf*) symcode='[[BCDEGQRST]]' ;; solaris*) symcode='[[BDRT]]' ;; sco3.2v5*) symcode='[[DT]]' ;; sysv4.2uw2*) symcode='[[DT]]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[[ABDT]]' ;; sysv4) symcode='[[DFNSTU]]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[[ABCDGIRSTW]]' ;; esac # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'" lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function # and D for any global variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK ['"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ " {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ " s[1]~/^[@?]/{print s[1], s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx]" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if AC_TRY_EVAL(ac_compile); then # Now try to grab the symbols. nlist=conftest.nm if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT@&t@_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT@&t@_DLSYM_CONST #else # define LT@&t@_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT@&t@_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[[]] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD fi else echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done ]) if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then AC_MSG_RESULT(failed) else AC_MSG_RESULT(ok) fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then nm_file_list_spec='@' fi _LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], [Take the output of nm and produce a listing of raw symbols and C names]) _LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], [Transform the output of nm in a proper C declaration]) _LT_DECL([global_symbol_to_c_name_address], [lt_cv_sys_global_symbol_to_c_name_address], [1], [Transform the output of nm in a C name address pair]) _LT_DECL([global_symbol_to_c_name_address_lib_prefix], [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], [Transform the output of nm in a C name address pair when lib prefix is needed]) _LT_DECL([], [nm_file_list_spec], [1], [Specify filename containing input files for $NM]) ]) # _LT_CMD_GLOBAL_SYMBOLS # _LT_COMPILER_PIC([TAGNAME]) # --------------------------- m4_defun([_LT_COMPILER_PIC], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_wl, $1)= _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)= m4_if([$1], [CXX], [ # C++ specific cases for pic, static, wl, etc. if test "$GXX" = yes; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac else case $host_os in aix[[4-9]]*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68*) # Green Hills C++ Compiler # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; dgux*) case $cc_basename in ec++*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; ghcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; freebsd* | dragonfly*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' if test "$host_cpu" != ia64; then _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' fi ;; aCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac ;; *) ;; esac ;; interix*) # This is c89, which is MS Visual C++ (no shared libs) # Anyone wants to do a port? ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # KAI C++ Compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; ecpc* ) # old Intel C++ for x86_64 which still supported -KPIC. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; icpc* ) # Intel C++, used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; pgCC* | pgcpp*) # Portland Group C++ compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; cxx*) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL 8.0, 9.0 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; esac ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' ;; *) ;; esac ;; netbsd*) ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' ;; RCC*) # Rational C++ 2.4.1 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; cxx*) # Digital/Compaq C++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; *) ;; esac ;; psos*) ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; lcc*) # Lucid _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; *) ;; esac ;; vxworks*) ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ], [ if test "$GCC" = yes; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker ' if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; hpux9* | hpux10* | hpux11*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC (with -KPIC) is the default. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in # old Intel for x86_64 which still supported -KPIC. ecc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # Lahey Fortran 8.1. lf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' ;; nagfor*) # NAG Fortran compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; ccc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All Alpha code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='' ;; *Sun\ F* | *Sun*Fortran*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ;; *Intel*\ [[CF]]*Compiler*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; *Portland\ Group*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; esac ;; newsos6) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All OSF/1 code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; rdos*) _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; solaris*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; *) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; esac ;; sunos4*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; unicos*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; uts4*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ]) case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" ;; esac AC_CACHE_CHECK([for $compiler option to produce PIC], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) _LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1) # # Check to make sure the PIC flag actually works. # if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in "" | " "*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; esac], [_LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) fi _LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], [Additional compiler flags for building library objects]) _LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], [How to pass a linker flag through the compiler]) # # Check to make sure the static flag actually works. # wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" _LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), $lt_tmp_static_flag, [], [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) _LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], [Compiler flag to prevent dynamic linking]) ])# _LT_COMPILER_PIC # _LT_LINKER_SHLIBS([TAGNAME]) # ---------------------------- # See if the linker supports building shared libraries. m4_defun([_LT_LINKER_SHLIBS], [AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) m4_if([$1], [CXX], [ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] case $host_os in aix[[4-9]]*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global defined # symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi ;; pw32*) _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" ;; cygwin* | mingw* | cegcc*) case $cc_basename in cl*) _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] ;; esac ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac ], [ runpath_var= _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_cmds, $1)= _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(old_archive_from_new_cmds, $1)= _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= _LT_TAGVAR(thread_safe_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list _LT_TAGVAR(include_expsyms, $1)= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. dnl Note also adjust exclude_expsyms for C++ above. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac _LT_TAGVAR(ld_shlibs, $1)=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test "$with_gnu_ld" = yes; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;; *\ \(GNU\ Binutils\)\ [[3-9]]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test "$lt_use_gnu_ld_interface" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi supports_anon_versioning=no case `$LD -v 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[[3-9]]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test "$host_os" = linux-dietlibc; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test "$tmp_diet" = no then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 _LT_TAGVAR(whole_archive_flag_spec, $1)= tmp_sharedflag='--shared' ;; xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi case $cc_basename in xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; sunos4*) _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then runpath_var= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. _LT_TAGVAR(hardcode_minus_L, $1)=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. _LT_TAGVAR(hardcode_direct, $1)=unsupported fi ;; aix[[4-9]]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global # defined symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' if test "$GCC" = yes; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. _LT_TAGVAR(always_export_symbols, $1)=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes # This is similar to how AIX traditionally builds its shared libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; bsdi[[45]]*) _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl*) # Native MSVC _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC wrapper _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' # FIXME: Should let the user specify the lib program. _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; dgux*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; hpux9*) if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ;; hpux10*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes fi ;; hpux11*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) m4_if($1, [], [ # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) _LT_LINKER_OPTION([if $CC understands -b], _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b], [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])], [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags']) ;; esac fi if test "$with_gnu_ld" = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol], [lt_cv_irix_exported_symbol], [save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" AC_LINK_IFELSE( [AC_LANG_SOURCE( [AC_LANG_CASE([C], [[int foo (void) { return 0; }]], [C++], [[int foo (void) { return 0; }]], [Fortran 77], [[ subroutine foo end]], [Fortran], [[ subroutine foo end]])])], [lt_cv_irix_exported_symbol=yes], [lt_cv_irix_exported_symbol=no]) LDFLAGS="$save_LDFLAGS"]) if test "$lt_cv_irix_exported_symbol" = yes; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' fi else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes _LT_TAGVAR(link_all_deplibs, $1)=yes ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; newsos6) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' else case $host_os in openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' ;; esac fi else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; solaris*) _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' if test "$GCC" = yes; then wlarc='${wl}' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='${wl}' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. GCC discards it without `$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test "$GCC" = yes; then _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' else _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' fi ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4) case $host_vendor in sni) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' _LT_TAGVAR(hardcode_direct, $1)=no ;; motorola) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4.3*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes _LT_TAGVAR(ld_shlibs, $1)=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(ld_shlibs, $1)=no ;; esac if test x$host_vendor = xsni; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym' ;; esac fi fi ]) AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no _LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld _LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl _LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl _LT_DECL([], [extract_expsyms_cmds], [2], [The commands to extract the exported symbol list from a shared archive]) # # Do we need to explicitly link libc? # case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in x|xyes) # Assume -lc should be added _LT_TAGVAR(archive_cmds_need_lc, $1)=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $_LT_TAGVAR(archive_cmds, $1) in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. AC_CACHE_CHECK([whether -lc should be explicitly linked in], [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1), [$RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if AC_TRY_EVAL(ac_compile) 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) _LT_TAGVAR(allow_undefined_flag, $1)= if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) then lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no else lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes fi _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* ]) _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1) ;; esac fi ;; esac _LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], [Whether or not to add -lc for building shared libraries]) _LT_TAGDECL([allow_libtool_libs_with_static_runtimes], [enable_shared_with_static_runtimes], [0], [Whether or not to disallow shared libs when runtime libs are static]) _LT_TAGDECL([], [export_dynamic_flag_spec], [1], [Compiler flag to allow reflexive dlopens]) _LT_TAGDECL([], [whole_archive_flag_spec], [1], [Compiler flag to generate shared objects directly from archives]) _LT_TAGDECL([], [compiler_needs_object], [1], [Whether the compiler copes with passing no objects directly]) _LT_TAGDECL([], [old_archive_from_new_cmds], [2], [Create an old-style archive from a shared archive]) _LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], [Create a temporary old-style archive to link instead of a shared archive]) _LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) _LT_TAGDECL([], [archive_expsym_cmds], [2]) _LT_TAGDECL([], [module_cmds], [2], [Commands used to build a loadable module if different from building a shared archive.]) _LT_TAGDECL([], [module_expsym_cmds], [2]) _LT_TAGDECL([], [with_gnu_ld], [1], [Whether we are building with GNU ld or not]) _LT_TAGDECL([], [allow_undefined_flag], [1], [Flag that allows shared libraries with undefined symbols to be built]) _LT_TAGDECL([], [no_undefined_flag], [1], [Flag that enforces no undefined symbols]) _LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], [Flag to hardcode $libdir into a binary during linking. This must work even if $libdir does not exist]) _LT_TAGDECL([], [hardcode_libdir_separator], [1], [Whether we need a single "-rpath" flag with a separated argument]) _LT_TAGDECL([], [hardcode_direct], [0], [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_direct_absolute], [0], [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the resulting binary and the resulting library dependency is "absolute", i.e impossible to change by setting ${shlibpath_var} if the library is relocated]) _LT_TAGDECL([], [hardcode_minus_L], [0], [Set to "yes" if using the -LDIR flag during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_shlibpath_var], [0], [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_automatic], [0], [Set to "yes" if building a shared library automatically hardcodes DIR into the library and all subsequent libraries and executables linked against it]) _LT_TAGDECL([], [inherit_rpath], [0], [Set to yes if linker adds runtime paths of dependent libraries to runtime path list]) _LT_TAGDECL([], [link_all_deplibs], [0], [Whether libtool must link a program against all its dependency libraries]) _LT_TAGDECL([], [always_export_symbols], [0], [Set to "yes" if exported symbols are required]) _LT_TAGDECL([], [export_symbols_cmds], [2], [The commands to list exported symbols]) _LT_TAGDECL([], [exclude_expsyms], [1], [Symbols that should not be listed in the preloaded symbols]) _LT_TAGDECL([], [include_expsyms], [1], [Symbols that must always be exported]) _LT_TAGDECL([], [prelink_cmds], [2], [Commands necessary for linking programs (against libraries) with templates]) _LT_TAGDECL([], [postlink_cmds], [2], [Commands necessary for finishing linking programs]) _LT_TAGDECL([], [file_list_spec], [1], [Specify filename containing input files]) dnl FIXME: Not yet implemented dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], dnl [Compiler flag to generate thread safe objects]) ])# _LT_LINKER_SHLIBS # _LT_LANG_C_CONFIG([TAG]) # ------------------------ # Ensure that the configuration variables for a C compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to `libtool'. m4_defun([_LT_LANG_C_CONFIG], [m4_require([_LT_DECL_EGREP])dnl lt_save_CC="$CC" AC_LANG_PUSH(C) # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' _LT_TAG_COMPILER # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) LT_SYS_DLOPEN_SELF _LT_CMD_STRIPLIB # Report which library types will actually be built AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_CONFIG($1) fi AC_LANG_POP CC="$lt_save_CC" ])# _LT_LANG_C_CONFIG # _LT_LANG_CXX_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a C++ compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to `libtool'. m4_defun([_LT_LANG_CXX_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl if test -n "$CXX" && ( test "X$CXX" != "Xno" && ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || (test "X$CXX" != "Xg++"))) ; then AC_PROG_CXXCPP else _lt_caught_CXX_error=yes fi AC_LANG_PUSH(C++) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the CXX compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_caught_CXX_error" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else $as_unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else $as_unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} CFLAGS=$CXXFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then # We don't want -fno-exception when compiling C++ code, so set the # no_builtin_flag separately if test "$GXX" = yes; then _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' else _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= fi if test "$GXX" = yes; then # Set up default GNU C++ configuration LT_PATH_LD # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test "$with_gnu_ld" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='${wl}' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) _LT_TAGVAR(ld_shlibs, $1)=yes case $host_os in aix3*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aix[[4-9]]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' if test "$GXX" = yes; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to # export. _LT_TAGVAR(always_export_symbols, $1)=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an empty # executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes # This is similar to how AIX traditionally builds its shared # libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; cygwin* | mingw* | pw32* | cegcc*) case $GXX,$cc_basename in ,cl* | no,cl*) # Native MSVC # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ func_to_tool_file "$lt_outputfile"~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # g++ # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; dgux*) case $cc_basename in ec++*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; ghcx*) # Green Hills C++ Compiler # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; freebsd2.*) # C++ shared libraries reported to be fairly broken before # switch to ELF _LT_TAGVAR(ld_shlibs, $1)=no ;; freebsd-elf*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; freebsd* | dragonfly*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions _LT_TAGVAR(ld_shlibs, $1)=yes ;; gnu*) ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; hpux9*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; hpux10*|hpux11*) if test $with_gnu_ld = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) ;; *) _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ;; esac fi case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then if test $with_gnu_ld = no; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in CC*) # SGI C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test "$GXX" = yes; then if test "$with_gnu_ld" = no; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib' fi fi _LT_TAGVAR(link_all_deplibs, $1)=yes ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc* | ecpc* ) # Intel C++ with_gnu_ld=yes # version 8.0 and above of icpc choke on multiply defined symbols # if we add $predep_objects and $postdep_objects, however 7.1 and # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer tmp_idyn= case $host_cpu in ia64*) tmp_idyn=' -i_dynamic';; esac _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; esac _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' ;; pgCC* | pgcpp*) # Portland Group C++ compiler case `$CC -V` in *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*) _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ $RANLIB $oldlib' _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; *) # Version 6 and above use weak symbols _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' ;; cxx*) # Compaq C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' ;; xl* | mpixl* | bgxl*) # IBM XL 8.0 on PPC, with GNU ld _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes # Not sure whether something based on # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 # would be better. output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; esac ;; esac ;; lynxos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; m88k*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; mvs*) case $cc_basename in cxx*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; *nto* | *qnx*) _LT_TAGVAR(ld_shlibs, $1)=yes ;; openbsd2*) # C++ shared libraries are fairly broken _LT_TAGVAR(ld_shlibs, $1)=no ;; openbsd*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' fi output_verbose_link_cmd=func_echo_all else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Archives containing C++ object files must be created using # the KAI C++ compiler. case $host in osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; esac ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; cxx*) case $host in osf3*) _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' ;; *) _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~ $RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' ;; esac _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' case $host in osf3*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; lcc*) # Lucid # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(archive_cmds_need_lc,$1)=yes _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. # Supported since Solaris 2.6 (maybe 2.5.1?) _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' if $CC --version | $GREP -v '^2\.7' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # g++ 2.7 appears to require `-G' NOT `-shared' on this # platform. _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' ;; esac fi ;; esac ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~ '"$_LT_TAGVAR(old_archive_cmds, $1)" _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~ '"$_LT_TAGVAR(reload_cmds, $1)" ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no _LT_TAGVAR(GCC, $1)="$GXX" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld fi # test "$_lt_caught_CXX_error" != yes AC_LANG_POP ])# _LT_LANG_CXX_CONFIG # _LT_FUNC_STRIPNAME_CNF # ---------------------- # func_stripname_cnf prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # # This function is identical to the (non-XSI) version of func_stripname, # except this one can be used by m4 code that may be executed by configure, # rather than the libtool script. m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl AC_REQUIRE([_LT_DECL_SED]) AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH]) func_stripname_cnf () { case ${2} in .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; esac } # func_stripname_cnf ])# _LT_FUNC_STRIPNAME_CNF # _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) # --------------------------------- # Figure out "hidden" library dependencies from verbose # compiler output when linking a shared library. # Parse the compiler output and extract the necessary # objects, libraries and library flags. m4_defun([_LT_SYS_HIDDEN_LIBDEPS], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl # Dependencies to place before and after the object being linked: _LT_TAGVAR(predep_objects, $1)= _LT_TAGVAR(postdep_objects, $1)= _LT_TAGVAR(predeps, $1)= _LT_TAGVAR(postdeps, $1)= _LT_TAGVAR(compiler_lib_search_path, $1)= dnl we can't use the lt_simple_compile_test_code here, dnl because it contains code intended for an executable, dnl not a library. It's possible we should let each dnl tag define a new lt_????_link_test_code variable, dnl but it's only used here... m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF int a; void foo (void) { a = 0; } _LT_EOF ], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF class Foo { public: Foo (void) { a = 0; } private: int a; }; _LT_EOF ], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer*4 a a=0 return end _LT_EOF ], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer a a=0 return end _LT_EOF ], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF public class foo { private int a; public void bar (void) { a = 0; } }; _LT_EOF ], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF package foo func foo() { } _LT_EOF ]) _lt_libdeps_save_CFLAGS=$CFLAGS case "$CC $CFLAGS " in #( *\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; *\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; *\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; esac dnl Parse the compiler output and extract the necessary dnl objects, libraries and library flags. if AC_TRY_EVAL(ac_compile); then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no for p in `eval "$output_verbose_link_cmd"`; do case ${prev}${p} in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test $p = "-L" || test $p = "-R"; then prev=$p continue fi # Expand the sysroot to ease extracting the directories later. if test -z "$prev"; then case $p in -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; esac fi case $p in =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; esac if test "$pre_test_object_deps_done" = no; then case ${prev} in -L | -R) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}" else _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$_LT_TAGVAR(postdeps, $1)"; then _LT_TAGVAR(postdeps, $1)="${prev}${p}" else _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}" fi fi prev= ;; *.lto.$objext) ;; # Ignore GCC LTO objects *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test "$pre_test_object_deps_done" = no; then if test -z "$_LT_TAGVAR(predep_objects, $1)"; then _LT_TAGVAR(predep_objects, $1)="$p" else _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" fi else if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then _LT_TAGVAR(postdep_objects, $1)="$p" else _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling $1 test program" fi $RM -f confest.$objext CFLAGS=$_lt_libdeps_save_CFLAGS # PORTME: override above test on systems where it is broken m4_if([$1], [CXX], [case $host_os in interix[[3-9]]*) # Interix 3.5 installs completely hosed .la files for C++, so rather than # hack all around it, let's just trust "g++" to DTRT. _LT_TAGVAR(predep_objects,$1)= _LT_TAGVAR(postdep_objects,$1)= _LT_TAGVAR(postdeps,$1)= ;; linux*) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac if test "$solaris_use_stlport4" != yes; then _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' fi ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac # Adding this requires a known-good setup of shared libraries for # Sun compiler versions before 5.6, else PIC objects from an old # archive will be linked into the output, leading to subtle bugs. if test "$solaris_use_stlport4" != yes; then _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' fi ;; esac ;; esac ]) case " $_LT_TAGVAR(postdeps, $1) " in *" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; esac _LT_TAGVAR(compiler_lib_search_dirs, $1)= if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` fi _LT_TAGDECL([], [compiler_lib_search_dirs], [1], [The directories searched by this compiler when creating a shared library]) _LT_TAGDECL([], [predep_objects], [1], [Dependencies to place before and after the objects being linked to create a shared library]) _LT_TAGDECL([], [postdep_objects], [1]) _LT_TAGDECL([], [predeps], [1]) _LT_TAGDECL([], [postdeps], [1]) _LT_TAGDECL([], [compiler_lib_search_path], [1], [The library search path used internally by the compiler when linking a shared library]) ])# _LT_SYS_HIDDEN_LIBDEPS # _LT_LANG_F77_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a Fortran 77 compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_F77_CONFIG], [AC_LANG_PUSH(Fortran 77) if test -z "$F77" || test "X$F77" = "Xno"; then _lt_disable_F77=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for f77 test sources. ac_ext=f # Object file extension for compiled f77 test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the F77 compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_disable_F77" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${F77-"f77"} CFLAGS=$FFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) GCC=$G77 if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)="$G77" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC="$lt_save_CC" CFLAGS="$lt_save_CFLAGS" fi # test "$_lt_disable_F77" != yes AC_LANG_POP ])# _LT_LANG_F77_CONFIG # _LT_LANG_FC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for a Fortran compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_FC_CONFIG], [AC_LANG_PUSH(Fortran) if test -z "$FC" || test "X$FC" = "Xno"; then _lt_disable_FC=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for fc test sources. ac_ext=${ac_fc_srcext-f} # Object file extension for compiled fc test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the FC compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_disable_FC" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${FC-"f95"} CFLAGS=$FCFLAGS compiler=$CC GCC=$ac_cv_fc_compiler_gnu _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS fi # test "$_lt_disable_FC" != yes AC_LANG_POP ])# _LT_LANG_FC_CONFIG # _LT_LANG_GCJ_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Java Compiler compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_GCJ_CONFIG], [AC_REQUIRE([LT_PROG_GCJ])dnl AC_LANG_SAVE # Source file extension for Java test sources. ac_ext=java # Object file extension for compiled Java test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="class foo {}" # Code to be used in simple link tests lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GCJ-"gcj"} CFLAGS=$GCJFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)="$LD" _LT_CC_BASENAME([$compiler]) # GCJ did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GCJ_CONFIG # _LT_LANG_GO_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Go compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_GO_CONFIG], [AC_REQUIRE([LT_PROG_GO])dnl AC_LANG_SAVE # Source file extension for Go test sources. ac_ext=go # Object file extension for compiled Go test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="package main; func main() { }" # Code to be used in simple link tests lt_simple_link_test_code='package main; func main() { }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GOC-"gccgo"} CFLAGS=$GOFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)="$LD" _LT_CC_BASENAME([$compiler]) # Go did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GO_CONFIG # _LT_LANG_RC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for the Windows resource compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_RC_CONFIG], [AC_REQUIRE([LT_PROG_RC])dnl AC_LANG_SAVE # Source file extension for RC test sources. ac_ext=rc # Object file extension for compiled RC test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' # Code to be used in simple link tests lt_simple_link_test_code="$lt_simple_compile_test_code" # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC= CC=${RC-"windres"} CFLAGS= compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes if test -n "$compiler"; then : _LT_CONFIG($1) fi GCC=$lt_save_GCC AC_LANG_RESTORE CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_RC_CONFIG # LT_PROG_GCJ # ----------- AC_DEFUN([LT_PROG_GCJ], [m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], [AC_CHECK_TOOL(GCJ, gcj,) test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" AC_SUBST(GCJFLAGS)])])[]dnl ]) # Old name: AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_GCJ], []) # LT_PROG_GO # ---------- AC_DEFUN([LT_PROG_GO], [AC_CHECK_TOOL(GOC, gccgo,) ]) # LT_PROG_RC # ---------- AC_DEFUN([LT_PROG_RC], [AC_CHECK_TOOL(RC, windres,) ]) # Old name: AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_RC], []) # _LT_DECL_EGREP # -------------- # If we don't have a new enough Autoconf to choose the best grep # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_EGREP], [AC_REQUIRE([AC_PROG_EGREP])dnl AC_REQUIRE([AC_PROG_FGREP])dnl test -z "$GREP" && GREP=grep _LT_DECL([], [GREP], [1], [A grep program that handles long lines]) _LT_DECL([], [EGREP], [1], [An ERE matcher]) _LT_DECL([], [FGREP], [1], [A literal string matcher]) dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too AC_SUBST([GREP]) ]) # _LT_DECL_OBJDUMP # -------------- # If we don't have a new enough Autoconf to choose the best objdump # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_OBJDUMP], [AC_CHECK_TOOL(OBJDUMP, objdump, false) test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) AC_SUBST([OBJDUMP]) ]) # _LT_DECL_DLLTOOL # ---------------- # Ensure DLLTOOL variable is set. m4_defun([_LT_DECL_DLLTOOL], [AC_CHECK_TOOL(DLLTOOL, dlltool, false) test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program]) AC_SUBST([DLLTOOL]) ]) # _LT_DECL_SED # ------------ # Check for a fully-functional sed program, that truncates # as few characters as possible. Prefer GNU sed if found. m4_defun([_LT_DECL_SED], [AC_PROG_SED test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" _LT_DECL([], [SED], [1], [A sed program that does not truncate output]) _LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], [Sed that helps us avoid accidentally triggering echo(1) options like -n]) ])# _LT_DECL_SED m4_ifndef([AC_PROG_SED], [ ############################################################ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_SED. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # ############################################################ m4_defun([AC_PROG_SED], [AC_MSG_CHECKING([for a sed that does not truncate output]) AC_CACHE_VAL(lt_cv_path_SED, [# Loop through the user's path and test for sed and gsed. # Then use that list of sed's as ones to test for truncation. as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for lt_ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" fi done done done IFS=$as_save_IFS lt_ac_max=0 lt_ac_count=0 # Add /usr/xpg4/bin/sed as it is typically found on Solaris # along with /bin/sed that truncates output. for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do test ! -f $lt_ac_sed && continue cat /dev/null > conftest.in lt_ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >conftest.in # Check for GNU sed and select it if it is found. if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then lt_cv_path_SED=$lt_ac_sed break fi while true; do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo >>conftest.nl $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break cmp -s conftest.out conftest.nl || break # 10000 chars as input seems more than enough test $lt_ac_count -gt 10 && break lt_ac_count=`expr $lt_ac_count + 1` if test $lt_ac_count -gt $lt_ac_max; then lt_ac_max=$lt_ac_count lt_cv_path_SED=$lt_ac_sed fi done done ]) SED=$lt_cv_path_SED AC_SUBST([SED]) AC_MSG_RESULT([$SED]) ])#AC_PROG_SED ])#m4_ifndef # Old name: AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_SED], []) # _LT_CHECK_SHELL_FEATURES # ------------------------ # Find out whether the shell is Bourne or XSI compatible, # or has some other useful features. m4_defun([_LT_CHECK_SHELL_FEATURES], [AC_MSG_CHECKING([whether the shell understands some XSI constructs]) # Try some XSI features xsi_shell=no ( _lt_dummy="a/b/c" test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ = c,a/b,b/c, \ && eval 'test $(( 1 + 1 )) -eq 2 \ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ && xsi_shell=yes AC_MSG_RESULT([$xsi_shell]) _LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell']) AC_MSG_CHECKING([whether the shell understands "+="]) lt_shell_append=no ( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \ >/dev/null 2>&1 \ && lt_shell_append=yes AC_MSG_RESULT([$lt_shell_append]) _LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append']) if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi _LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac _LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl _LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl ])# _LT_CHECK_SHELL_FEATURES # _LT_PROG_FUNCTION_REPLACE (FUNCNAME, REPLACEMENT-BODY) # ------------------------------------------------------ # In `$cfgfile', look for function FUNCNAME delimited by `^FUNCNAME ()$' and # '^} FUNCNAME ', and replace its body with REPLACEMENT-BODY. m4_defun([_LT_PROG_FUNCTION_REPLACE], [dnl { sed -e '/^$1 ()$/,/^} # $1 /c\ $1 ()\ {\ m4_bpatsubsts([$2], [$], [\\], [^\([ ]\)], [\\\1]) } # Extended-shell $1 implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: ]) # _LT_PROG_REPLACE_SHELLFNS # ------------------------- # Replace existing portable implementations of several shell functions with # equivalent extended shell implementations where those features are available.. m4_defun([_LT_PROG_REPLACE_SHELLFNS], [if test x"$xsi_shell" = xyes; then _LT_PROG_FUNCTION_REPLACE([func_dirname], [dnl case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac]) _LT_PROG_FUNCTION_REPLACE([func_basename], [dnl func_basename_result="${1##*/}"]) _LT_PROG_FUNCTION_REPLACE([func_dirname_and_basename], [dnl case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac func_basename_result="${1##*/}"]) _LT_PROG_FUNCTION_REPLACE([func_stripname], [dnl # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are # positional parameters, so assign one to ordinary parameter first. func_stripname_result=${3} func_stripname_result=${func_stripname_result#"${1}"} func_stripname_result=${func_stripname_result%"${2}"}]) _LT_PROG_FUNCTION_REPLACE([func_split_long_opt], [dnl func_split_long_opt_name=${1%%=*} func_split_long_opt_arg=${1#*=}]) _LT_PROG_FUNCTION_REPLACE([func_split_short_opt], [dnl func_split_short_opt_arg=${1#??} func_split_short_opt_name=${1%"$func_split_short_opt_arg"}]) _LT_PROG_FUNCTION_REPLACE([func_lo2o], [dnl case ${1} in *.lo) func_lo2o_result=${1%.lo}.${objext} ;; *) func_lo2o_result=${1} ;; esac]) _LT_PROG_FUNCTION_REPLACE([func_xform], [ func_xform_result=${1%.*}.lo]) _LT_PROG_FUNCTION_REPLACE([func_arith], [ func_arith_result=$(( $[*] ))]) _LT_PROG_FUNCTION_REPLACE([func_len], [ func_len_result=${#1}]) fi if test x"$lt_shell_append" = xyes; then _LT_PROG_FUNCTION_REPLACE([func_append], [ eval "${1}+=\\${2}"]) _LT_PROG_FUNCTION_REPLACE([func_append_quoted], [dnl func_quote_for_eval "${2}" dnl m4 expansion turns \\\\ into \\, and then the shell eval turns that into \ eval "${1}+=\\\\ \\$func_quote_for_eval_result"]) # Save a `func_append' function call where possible by direct use of '+=' sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: else # Save a `func_append' function call even when '+=' is not available sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$_lt_function_replace_fail" = x":"; then AC_MSG_WARN([Unable to substitute extended shell functions in $ofile]) fi ]) # _LT_PATH_CONVERSION_FUNCTIONS # ----------------------------- # Determine which file name conversion functions should be used by # func_to_host_file (and, implicitly, by func_to_host_path). These are needed # for certain cross-compile configurations and native mingw. m4_defun([_LT_PATH_CONVERSION_FUNCTIONS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_MSG_CHECKING([how to convert $build file names to $host format]) AC_CACHE_VAL(lt_cv_to_host_file_cmd, [case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac ]) to_host_file_cmd=$lt_cv_to_host_file_cmd AC_MSG_RESULT([$lt_cv_to_host_file_cmd]) _LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd], [0], [convert $build file names to $host format])dnl AC_MSG_CHECKING([how to convert $build file names to toolchain format]) AC_CACHE_VAL(lt_cv_to_tool_file_cmd, [#assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac ]) to_tool_file_cmd=$lt_cv_to_tool_file_cmd AC_MSG_RESULT([$lt_cv_to_tool_file_cmd]) _LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd], [0], [convert $build files to toolchain format])dnl ])# _LT_PATH_CONVERSION_FUNCTIONS libdbi-drivers-0.9.0/m4/ltoptions.m4000444 001750 001750 00000030073 12117467040 020107 0ustar00markusmarkus000000 000000 # Helper functions for option handling. -*- Autoconf -*- # # Copyright (C) 2004, 2005, 2007, 2008, 2009 Free Software Foundation, # Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 7 ltoptions.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) # _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) # ------------------------------------------ m4_define([_LT_MANGLE_OPTION], [[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) # _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) # --------------------------------------- # Set option OPTION-NAME for macro MACRO-NAME, and if there is a # matching handler defined, dispatch to it. Other OPTION-NAMEs are # saved as a flag. m4_define([_LT_SET_OPTION], [m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), _LT_MANGLE_DEFUN([$1], [$2]), [m4_warning([Unknown $1 option `$2'])])[]dnl ]) # _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) # ------------------------------------------------------------ # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. m4_define([_LT_IF_OPTION], [m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) # _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) # ------------------------------------------------------- # Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME # are set. m4_define([_LT_UNLESS_OPTIONS], [m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), [m4_define([$0_found])])])[]dnl m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 ])[]dnl ]) # _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) # ---------------------------------------- # OPTION-LIST is a space-separated list of Libtool options associated # with MACRO-NAME. If any OPTION has a matching handler declared with # LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about # the unknown option and exit. m4_defun([_LT_SET_OPTIONS], [# Set options m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [_LT_SET_OPTION([$1], _LT_Option)]) m4_if([$1],[LT_INIT],[ dnl dnl Simply set some default values (i.e off) if boolean options were not dnl specified: _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no ]) _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no ]) dnl dnl If no reference was made to various pairs of opposing options, then dnl we run the default mode handler for the pair. For example, if neither dnl `shared' nor `disable-shared' was passed, we enable building of shared dnl archives by default: _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], [_LT_ENABLE_FAST_INSTALL]) ]) ])# _LT_SET_OPTIONS ## --------------------------------- ## ## Macros to handle LT_INIT options. ## ## --------------------------------- ## # _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) # ----------------------------------------- m4_define([_LT_MANGLE_DEFUN], [[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) # LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) # ----------------------------------------------- m4_define([LT_OPTION_DEFINE], [m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl ])# LT_OPTION_DEFINE # dlopen # ------ LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes ]) AU_DEFUN([AC_LIBTOOL_DLOPEN], [_LT_SET_OPTION([LT_INIT], [dlopen]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `dlopen' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) # win32-dll # --------- # Declare package support for building win32 dll's. LT_OPTION_DEFINE([LT_INIT], [win32-dll], [enable_win32_dll=yes case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) AC_CHECK_TOOL(AS, as, false) AC_CHECK_TOOL(DLLTOOL, dlltool, false) AC_CHECK_TOOL(OBJDUMP, objdump, false) ;; esac test -z "$AS" && AS=as _LT_DECL([], [AS], [1], [Assembler program])dnl test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl ])# win32-dll AU_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_REQUIRE([AC_CANONICAL_HOST])dnl _LT_SET_OPTION([LT_INIT], [win32-dll]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `win32-dll' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) # _LT_ENABLE_SHARED([DEFAULT]) # ---------------------------- # implement the --enable-shared flag, and supports the `shared' and # `disable-shared' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_SHARED], [m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([shared], [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) _LT_DECL([build_libtool_libs], [enable_shared], [0], [Whether or not to build shared libraries]) ])# _LT_ENABLE_SHARED LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) # Old names: AC_DEFUN([AC_ENABLE_SHARED], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) ]) AC_DEFUN([AC_DISABLE_SHARED], [_LT_SET_OPTION([LT_INIT], [disable-shared]) ]) AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_SHARED], []) dnl AC_DEFUN([AM_DISABLE_SHARED], []) # _LT_ENABLE_STATIC([DEFAULT]) # ---------------------------- # implement the --enable-static flag, and support the `static' and # `disable-static' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_STATIC], [m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([static], [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_static=]_LT_ENABLE_STATIC_DEFAULT) _LT_DECL([build_old_libs], [enable_static], [0], [Whether or not to build static libraries]) ])# _LT_ENABLE_STATIC LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) # Old names: AC_DEFUN([AC_ENABLE_STATIC], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) ]) AC_DEFUN([AC_DISABLE_STATIC], [_LT_SET_OPTION([LT_INIT], [disable-static]) ]) AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_STATIC], []) dnl AC_DEFUN([AM_DISABLE_STATIC], []) # _LT_ENABLE_FAST_INSTALL([DEFAULT]) # ---------------------------------- # implement the --enable-fast-install flag, and support the `fast-install' # and `disable-fast-install' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_FAST_INSTALL], [m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([fast-install], [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) _LT_DECL([fast_install], [enable_fast_install], [0], [Whether or not to optimize for fast installation])dnl ])# _LT_ENABLE_FAST_INSTALL LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) # Old names: AU_DEFUN([AC_ENABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `fast-install' option into LT_INIT's first parameter.]) ]) AU_DEFUN([AC_DISABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], [disable-fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `disable-fast-install' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) # _LT_WITH_PIC([MODE]) # -------------------- # implement the --with-pic flag, and support the `pic-only' and `no-pic' # LT_INIT options. # MODE is either `yes' or `no'. If omitted, it defaults to `both'. m4_define([_LT_WITH_PIC], [AC_ARG_WITH([pic], [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@], [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], [lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for lt_pkg in $withval; do IFS="$lt_save_ifs" if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS="$lt_save_ifs" ;; esac], [pic_mode=default]) test -z "$pic_mode" && pic_mode=m4_default([$1], [default]) _LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl ])# _LT_WITH_PIC LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) # Old name: AU_DEFUN([AC_LIBTOOL_PICMODE], [_LT_SET_OPTION([LT_INIT], [pic-only]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `pic-only' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) ## ----------------- ## ## LTDL_INIT Options ## ## ----------------- ## m4_define([_LTDL_MODE], []) LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], [m4_define([_LTDL_MODE], [nonrecursive])]) LT_OPTION_DEFINE([LTDL_INIT], [recursive], [m4_define([_LTDL_MODE], [recursive])]) LT_OPTION_DEFINE([LTDL_INIT], [subproject], [m4_define([_LTDL_MODE], [subproject])]) m4_define([_LTDL_TYPE], []) LT_OPTION_DEFINE([LTDL_INIT], [installable], [m4_define([_LTDL_TYPE], [installable])]) LT_OPTION_DEFINE([LTDL_INIT], [convenience], [m4_define([_LTDL_TYPE], [convenience])]) libdbi-drivers-0.9.0/m4/ltsugar.m4000444 001750 001750 00000010424 12117467040 017533 0ustar00markusmarkus000000 000000 # ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- # # Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 6 ltsugar.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) # lt_join(SEP, ARG1, [ARG2...]) # ----------------------------- # Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their # associated separator. # Needed until we can rely on m4_join from Autoconf 2.62, since all earlier # versions in m4sugar had bugs. m4_define([lt_join], [m4_if([$#], [1], [], [$#], [2], [[$2]], [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) m4_define([_lt_join], [m4_if([$#$2], [2], [], [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) # lt_car(LIST) # lt_cdr(LIST) # ------------ # Manipulate m4 lists. # These macros are necessary as long as will still need to support # Autoconf-2.59 which quotes differently. m4_define([lt_car], [[$1]]) m4_define([lt_cdr], [m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], [$#], 1, [], [m4_dquote(m4_shift($@))])]) m4_define([lt_unquote], $1) # lt_append(MACRO-NAME, STRING, [SEPARATOR]) # ------------------------------------------ # Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'. # Note that neither SEPARATOR nor STRING are expanded; they are appended # to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). # No SEPARATOR is output if MACRO-NAME was previously undefined (different # than defined and empty). # # This macro is needed until we can rely on Autoconf 2.62, since earlier # versions of m4sugar mistakenly expanded SEPARATOR but not STRING. m4_define([lt_append], [m4_define([$1], m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) # lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) # ---------------------------------------------------------- # Produce a SEP delimited list of all paired combinations of elements of # PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list # has the form PREFIXmINFIXSUFFIXn. # Needed until we can rely on m4_combine added in Autoconf 2.62. m4_define([lt_combine], [m4_if(m4_eval([$# > 3]), [1], [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl [[m4_foreach([_Lt_prefix], [$2], [m4_foreach([_Lt_suffix], ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) # lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) # ----------------------------------------------------------------------- # Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited # by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. m4_define([lt_if_append_uniq], [m4_ifdef([$1], [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], [lt_append([$1], [$2], [$3])$4], [$5])], [lt_append([$1], [$2], [$3])$4])]) # lt_dict_add(DICT, KEY, VALUE) # ----------------------------- m4_define([lt_dict_add], [m4_define([$1($2)], [$3])]) # lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) # -------------------------------------------- m4_define([lt_dict_add_subkey], [m4_define([$1($2:$3)], [$4])]) # lt_dict_fetch(DICT, KEY, [SUBKEY]) # ---------------------------------- m4_define([lt_dict_fetch], [m4_ifval([$3], m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) # lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) # ----------------------------------------------------------------- m4_define([lt_if_dict_fetch], [m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], [$5], [$6])]) # lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) # -------------------------------------------------------------- m4_define([lt_dict_filter], [m4_if([$5], [], [], [lt_join(m4_quote(m4_default([$4], [[, ]])), lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl ]) libdbi-drivers-0.9.0/m4/ltversion.m4000444 001750 001750 00000001262 12117467040 020077 0ustar00markusmarkus000000 000000 # ltversion.m4 -- version numbers -*- Autoconf -*- # # Copyright (C) 2004 Free Software Foundation, Inc. # Written by Scott James Remnant, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # @configure_input@ # serial 3337 ltversion.m4 # This file is part of GNU Libtool m4_define([LT_PACKAGE_VERSION], [2.4.2]) m4_define([LT_PACKAGE_REVISION], [1.3337]) AC_DEFUN([LTVERSION_VERSION], [macro_version='2.4.2' macro_revision='1.3337' _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) _LT_DECL(, macro_revision, 0) ]) libdbi-drivers-0.9.0/m4/lt~obsolete.m4000444 001750 001750 00000013756 12117467040 020437 0ustar00markusmarkus000000 000000 # lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- # # Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation, Inc. # Written by Scott James Remnant, 2004. # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 5 lt~obsolete.m4 # These exist entirely to fool aclocal when bootstrapping libtool. # # In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN) # which have later been changed to m4_define as they aren't part of the # exported API, or moved to Autoconf or Automake where they belong. # # The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN # in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us # using a macro with the same name in our local m4/libtool.m4 it'll # pull the old libtool.m4 in (it doesn't see our shiny new m4_define # and doesn't know about Autoconf macros at all.) # # So we provide this file, which has a silly filename so it's always # included after everything else. This provides aclocal with the # AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything # because those macros already exist, or will be overwritten later. # We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. # # Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. # Yes, that means every name once taken will need to remain here until # we give up compatibility with versions before 1.7, at which point # we need to keep only those names which we still refer to. # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])]) m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])]) m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])]) m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])]) m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])]) m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])])