pax_global_header00006660000000000000000000000064142031307340014507gustar00rootroot0000000000000052 comment=46b192145b4b59b08eb436afdafa29ca38ac74b2 pgtcl-2.8.0/000077500000000000000000000000001420313073400126275ustar00rootroot00000000000000pgtcl-2.8.0/.github/000077500000000000000000000000001420313073400141675ustar00rootroot00000000000000pgtcl-2.8.0/.github/workflows/000077500000000000000000000000001420313073400162245ustar00rootroot00000000000000pgtcl-2.8.0/.github/workflows/linux-ci.yml000066400000000000000000000016551420313073400205060ustar00rootroot00000000000000# This is a basic workflow to help you get started with Actions name: Linux CI # Controls when the action will run. on: # Triggers the workflow on push or pull request events but only for the master branch push: branches: [ master ] pull_request: branches: [ master ] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Install dependencies run: | sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test sudo apt-get update -qq sudo apt-get install -y gcc-7 g++-7 sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 70 --slave /usr/bin/g++ g++ /usr/bin/g++-7 sudo apt-get install -y tcl8.6-dev - name: configure run: | autoreconf -vi ./configure --with-tcl=/usr/lib/tcl8.6 - name: make run: make - name: install run: sudo make install pgtcl-2.8.0/.github/workflows/mac-ci.yml000066400000000000000000000015741420313073400201070ustar00rootroot00000000000000name: Mac CI on: push: branches: [ master ] pull_request: branches: [ master ] jobs: build: runs-on: macos-latest steps: - uses: actions/checkout@v2 - name: Install dependencies run: | brew update brew install tcl-tk || true sudo mkdir -p /usr/local sudo ln -sf /usr/local/opt/tcl-tk/include /usr/local/include/tcl8.6 sudo rm -f /usr/local/lib/libtcl* || true sudo cp /usr/local/opt/tcl-tk/lib/libtcl* /usr/local/lib sudo ln -sf /usr/local/opt/tcl-tk/bin/tclsh8.6 /usr/local/bin/tclsh sudo ln -sf /usr/local/opt/tcl-tk/bin/tclsh8.6 /usr/local/bin/tclsh8.6 - name: configure run: | autoreconf -vi ./configure --with-tcl=/usr/local/opt/tcl-tk/lib --prefix=/usr/local - name: make run: make - name: install run: sudo make install pgtcl-2.8.0/.gitignore000066400000000000000000000001461420313073400146200ustar00rootroot00000000000000*.so *.o *.swp Makefile pkgIndex.tcl autom4te.cache config.status config.log configure sampledata.tsv pgtcl-2.8.0/ChangeLog000066400000000000000000000512361420313073400144100ustar00rootroot000000000000002017-06-21 Peter da Silva * Integrate sqlite bridge with "pg_sqlite" command. * Documentation updates for 2.2.x * Update version to 2.2.0 2017-04-25 Peter da Silva * Update minor version to 2.1.1 * Documentation updates for 2.1.x * Remove dead macro from configure.in (change in TEA) 2016-10-26 Peter da Silva * Increment version to v2.1.0 * Add -params and -paramarray to pg_select * Add -paramarray to pg_exec and pg_sendquery * Update documentation to match. 2016-07-06 Jeff Lawson * Increment to 2.0.1 * Update pre-generated pdf documentation. * Update Makefile target to install manpages 2016-07-06 Pietro Cerutti * Avoid installing .h file only needed during build. 2016-07-06 Peter da Silva * Fix some manpage formatting glitches * Add more test cases 2016-06-20 Jeff Lawson * Released 2.0.0 2016-06-20 Peter da Silva * Add man-page generation using docbook2man 2016-06-16 Jeff Lawson * Change functionality of pg_quote regarding NULL values. pg_quote will now only return "NULL" if the new "-null" flag is explicitly specified by the callerd, regardless of whether a database handle is also specified (#6). 2016-06-16 Karl Lehenbauer, Jeff Lawson and Peter da Silva * Add a -rowbyrow option to pg_select that will return results through libpq a row at a time via PQsetSingleRowMode rather letting libpq wait for all the rows to be returned first. (Caveats at https://www.postgresql.org/docs/current/static/libpq-single-row-mode.html should be observed.) 2016-06-16 Jeff Lawson * Explicitly initialize extra Tcl_ChannelType fields. * Make pg_select handle exit conditions more carefully. * Fix mislabelled error message text. * Regenerate HTML documentation. 2016-06-16 Peter da Silva * Add ?connection? option for pg_quote and flags for pg_select. * Modify Makefile for docs to only generate HTML by default. * Update documentation to reflect changes and updates. 2016-06-15 Peter da Silva * Fixed docbook errors in libpgtcl.sgml * Deleted html directory to make "make" work. 2016-06-15 Karl Lehenbauer * Make -async processing for pg_connect use C-level Tcl boolean handling. 2016-06-15 Jeff Lawson * Unset array in pg_select at start of each loop to avoid elements lingering over (#4). * Remove unused variable. 2016-06-14 Jeff Lawson * Fix possible segfault in pg_select if you unset the array variable inside of the code body. * Document the pg_select refcount fix. * Whitespace cleanup. * Remove changelog from 1.4 era; update some text. * Update Tcl version in the README. * Avoid error during docs part of "make install". * Add SGML dependency to dohtml target. 2015-08-26 Karl Lehenbauer * Install helper package sc_postgres by default. * Minor package README improvements. * Helper integration. * Regenerate "configure" script. 2015-08-23 Karl Lehenbauer * Doc and usage message additions. 2015-08-22 Karl Lehenbauer * Simplify most Tcl_GetStringFromObj calls. * Remove legacy version handling, requiring Tcl 8.4 or above. (Tcl 8.4 has been out for ten years or so, so it's OK.) * Remove ifdef compatibility for long-present stuff such as lo_truncate that has been in PostgreSQL libpq since version 8.3 (released in 2008). 2015-08-18 Karl Lehenbauer * pg_result $res -foreach array code - iterate over tuples in a result handle. * Fix compiler warnings. 2015-08-08 Karl Lehenbauer * Update build to Tcl Extension Architecture (TEA) 3.9 * shared library now builds without a reference to libtcl*.so since it uses stubs to access that library. * "make distclean" will now remove autom4te.cache * Add .gitignore to suppress untracked files warning 2015-04-21 Karl Lehenbauer * genericize tclsh invocation. 2015-03-04 Karl Lehenbauer * clean up compiler warnings. 2014-09-15 Karl Lehenbauer * Force UTC in helpers' clock_to_sql_time. 2014-07-07 Karl Lehenbauer * Force UTC on timestamp without timezone conversions. 2013-06-14 Karl Lehenbauer * Fix gen_update_from_array to work correctly with multiple key fields. 2013-05-08 Karl Lehenbauer * Update .gitignore to ignore *.o, *.so, Makefile, pkgIndex.tcl, etc. 2012-10-10 David McNett * Migrate README file to a github-friendly markdown format. * Migrate from Tcl 8.4 to Tcl 8.5. 2012-09-21 Karl Lehenbauer * Update the postgresql database schema comparator. 2012-09-11 Karl Lehenbauer * Add subcommands for direct execution of connection handles for conndefaults, set_single_row_mode, is_busy, blocking and cancel_request. * Make "make distclean" get rid of more autoconf work product. * Add -nodotfields option to pg_select. If set it will inhibit the creation of the .tupno, .numcols and .headers fields in pg_select results. * Added new command, pg_set_single_row_mode aka ::pg::set_single_row_mode to enable retrieving query results row-by-row. * Make "make distclean" get rid of more autoconf work product. * Clean up compiler warnings. * Update README.freebsd. 2012-06-18 Karl Lehenbauer * Add new -withoutnulls option to pg_select, if set will remove null fields from the row result array. * Reference variable name as a string, not an object, when invoking Tcl_UnsetVar2. 2012-06-04 Karl Lehenbauer * Change dbinfo option "pass" to "password". Fix crash in pg_listen. 2012-06-02 Karl Lehenbauer * Add new pg_dbinfo options "dbname", "user", "pass", "host", "port", "options", "status", "transaction_status", "error_message", "needs_password", "used_password", "used_ssl" to provide Tcl access to libpq connection parameter values established at connection time. * Fixed bug where pg_dbinfo would get a segmentation violation if passed an invalid connection handle. * Version bump to 1.9. 2011-02-15 Karl Lehenbauer * Removed arrVar variable and setting of it in Pg_result because it didn't do anything. 2010-07-01 Brett Schwarz * Added result callback for async queries via pg_sql. Based on code from Miguel Sofer. I had this code laying around and thought I had already committed, but turned out no. 2010-04-14 Karl Lehenbauer * Added new option to pg_dbinfo, "sql_count", returns the number of calls to pg_exec, pg_exec_prepared, pg_sendquery, pg_sendquery_prepared, and pg_select since the database connection was established. * Fixed a bug in dbinfo where a missing database connection argument could result in a coredump. * Version bump to 1.8. 2010-04-12 Brett Schwarz * Added Tcl 8.6 compatability by gettting rid of errorLine direct struct access and using Tcl_GetErrorLine, introduced in 8.6. Also added define for Tcl versions less than 8.6 so they can use the Tcl_GetErrorLine call. I ripped this off from the aolserver fix :) 2009-09-16 Karl Lehenbauer * Add gen_update_from_array and perform_update_from_array to Postgres helper package. 2009-07-07 Karl Lehenbauer * pg_select was not checking returns from Tcl_ObjSetVar2 and friends. The problem was that if the pg_select array already existed as a scalar variable, no error was returned to denote this, and it caused a coredump in Tcl 8.5. This has now been fixed. * In pg_select code, correct memory allocation for columnNameObjs to use the size of a pointer to Tcl_Obj times the number of columns, rather than the size of a Tcl_Obj times the number of columns.. 2009-06-30 Karl Lehenbauer * Fixed bug in "pgresult -assign" that could cuase a Tcl panic by attempting to set a value into a shared Tcl object. * libpq's PQfname can return NULL if the column requested is out of range. We have seen it return NULL when the column is in range, so instead of dumping core, we treat such a return as a Tcl error. 2009-04-06 Karl Lehenbauer * Pgtcl 1.7 released. 2009-02-26 Karl Lehenbauer * Make PostgreSQL helpers "res_dont_care" and "res_must_succeed" accept PGRES_TUPLES_OK as a sucessful result as well as PGRES_COMMAND_OK. 2008-05-24 Karl Lehenbauer * Add new pg_result suboption -tupleArrayWithoutNulls. It works like -tupleArray except if a field is null, it unsets the field from the array. 2008-05-23 Karl Lehenbauer * Add "escape_bytea" and "unescape_bytea" to the methods that can be invoked from $conn. * Extend pg_escape_bytea to allow a connection handle to be specified. If specified, libpq's PQescapeByteaConn is used rather than deprecated PQescapeBytea, which can return incorrect results since it can't determine whether standard-conforming strings are enabled. If the "$conn escape_bytea ..." method is used, the connection-handle version is automatically used. * Detect if lo_truncate is available in libpq or not and, if not, return an error if it is attempted. 2008-05-20 Karl Lehenbauer * Add support for the lo_truncate function that truncates a large object to a given length. * Version bump to 1.7. 2007-12-14 Karl Lehenbauer * Update autoconf build to Tcl Extension Architecture (TEA) 3.6 * Extend pg_quote to allow a connection handle to be specified. If the connection handle is specified and the string matches the null string, returns "NULL" (without quotes). If not, returns the string quoted for inclusion in SQL commands. * pg_quote can be invoked as a method of the connection handle as well. For instance, "$db quote $string". * Removed unused variables and silence compiler warnings with casting. * Added "internal_position" and "internal_query" to the error options. 2007-02-08 Brett Schwarz * Added support for async connections. Note that you will have to use [after] command to find the result of the connection. Callbacks won't work, since the sock isn't established yet 2007-01-24 Brett Schwarz * added additional sub commands to dbinfo (version, protocol, param, backendpid, socket) 2006-07-05 Karl Lehenbauer * Updated autoconf build to Tcl Extension Architecture (TEA) 3.5 2006-01-01 Brett Schwarz * changed the commands that handle params, such that if a value is NULL then the lib will change the paramValues value to '\0' so that the backend will insert a NULL correctly 2005-11-27 Karl Lehenbauer * Bumped version number to 1.6 * Add pg_null_value_string, ::pg::null_value_string and "$conn null_value_string" to get and set a special string value that will be returned for fields containing null values from queries. pg_select and pg_execute use this value for null values. If not set, they use the traditional empty string. pg_exec, pg_exec_prepared, pg_sendquery and pg_sendquery_prepared use this value as well. However, it can be overridden or replaced for one specific result using "pg_result $result -null_value_string NULL", etc, or by executing the result handle, as in "$result -null_value_string NULL" Updated documentation and regenerated HTML and PDF files. 2005-11-09 Karl Lehenbauer * List -cmdTuples as one of the possible options when executing pg_result without arguments. 2005-07-18 Karl Lehenbauer * Made pggrok database introspection code much more useful -- routines for finding out data about fields and indexes in a table now load on array with data about each field (index) and execute a code body on it, rather than punting with a call to parray 2005-07-01 Karl Lehenbauer * Fixed memory leaks when connections-as-commands are used ($conn exec $statement, etc) 2005-04-16 Brett Schwarz * added more documentation about the new capabilities 2005-02-25 Brett Schwarz * took away pg::conninfo and pg::results, and made one command pg::dbinfo. Usage is pg::dbinfo connections and pg::dbinfo results $conn 2004-11-30 Karl Lehenbauer * Document pg_exec_prepared, pg_results, and pg_sendquery_prepared. * Document pg_exec's ability to take optional arguments for $-substitution in PostgreSQL 7.4+. * Documented pg_getresult and pg_result -error suboptions. * Pasted connect string options from the libpq manual rather than simply referring Pgtcl users to the libpq manual. * Regenerated pdf and html documentation. 2004-11-29 Brett Schwarz * Added commands to escape and unescape binary strings 2004-11-29 Karl Lehenbauer * Added library of useful PostreSQL helper functions to the playpen. * Added dbobjects PostgreSQL/Itcl-object interface package to the playpen. * Added pggrok code to introspect into Postgres databases to the playpen. 2004-11-23 Karl Lehenbauer * Simplify result object processing * Fixed bug in Pg_cancelrequest where the error message would not be returned. * Remove unused variables. * Silence compiler warnings about a fall-through (that couldn't be reached) that would cause a function declared to return something to not return anything and about a possibly uninitialized variable. 2004-11-22 Karl Lehenbauer * Created playpen directory where interesting things that are not yet ready for prime time can be examined and messed with. Added code for turning OIDs returned by pg_result -lAttributes into data type names. 2004-11-19 Karl Lehenbauer * Updated autoconf build to TEA 3.1 / autoconf 2.59 * Added import_sampledata_prepared_onetransaction.tcl to the tests 2004-11-17 Karl Lehenbauer * minor optimization in connections-as-commands and results-as-commands where we don't copy and then swap, we copy it the way we want it to end up (first and second elements of objv reversed). * connections-as-commands and results-as-commands now error out when called with no arguments 2004-11-16 Karl Lehenbauer * libpgtcl will again build with versions of Tcl < 8.5 thanks to a little extra checking for HAVETCL_NEWDICTOBJ * Fixed several calls to Tcl_AppendStringsToObj whose arguments were terminated with -1 instead of NULL, eliminating several segmentation violations that could occur while preparing error messages. * Removed spurious newline at the start of the error message when the query result handle passed to pg_result is invalid. 2004-11-05 Brett Schwarz * added delete proc for result handle cleanup 2004-11-02 Brett Schwarz * added delete proc for connection handle cleanup 2004-09-20 Brett Schwarz * added preliminary support for dicts in pg_result. Need to have Tcl 8.5 or the dicts package extension. Need to set HAVETCL_NEWDICTOBJ manually for now. 2004-08-23 Brett Schwarz * added tcltest script of testing pgtcl. 2004-08-21 Brett Schwarz * Made the result handle into a command, and added associated command dispatcher. 2004-08-18 Brett Schwarz * Added another way to specify the connection string to pg::connect: pg::connect -connlist {host myhost port myport ...}. This is similiar to -conninfo, except that the arg is a key value list. * Added -connhandle option to pg::connect to specify the connection handle name. If not specified, then connection handle name is derived by pgtcl (as before). 2004-08-16 Brett Schwarz * added Pg_results (pg::results, pg_results) command that returns the result handles for a particular connection 2004-08-15 Brett Schwarz * Added new command pg::conninfo that returns a list of PG connection handles 2004-07-02 Brett Schwarz * added basic capability to use the connection handle as a command * since connection handle can be a command now, I made the returned handle namespace qualified, with respect to the calling namespace 2004-06-29 Brett Schwarz * Added proper Tcl namespace support (i.e. ::pg::connect) 2004-06-28 Karl Lehenbauer * Version 1.4 released 2004-06-22 Karl Lehenbauer * Added new optional subidentifiers to pg_result $resultID -error. You can specify one of "severity", "sqlstate", "primary", "detail", "hint", "position", "context", "file", "line", or "function" to get the severity (ERROR, FATAL, PANIC, WARNING, NOTICE, DEBUG, INFO, or LOG or a localized translation of one of these), the SQLSTATE code (see Appendix A of the Postgres manual), the primary human-readable error message, the optional secondary error message carrying more detail about the problem, the hint, an optional suggestion about what to do, the position, an error cursor position as an index into the original statement string starting from 1 (in characters, not bytes), the context, the source file where the error was reported, the line number of the source code where the error was reported, and the name of the source code function reporting the error, respectively. With newer versions of Postgres, $-variable substitution is now supported in pg_sendquery as it is in pg_exec. * Added a new function, pg_sendquery_prepared, that supports asynchronous invocation of prepared statements. 2004-06-21 Karl Lehenbauer * Added parameter support to the asynchronous pg_sendquery function. With newer versions of Postgres, $-variable substitution is now supported in pg_sendquery as it is in pg_exec. * Added a new function, pg_sendquery_prepared, that supports asynchronous invocation of prepared statements. 2004-05-26 Karl Lehenbauer * Changed configure script to use pg_config to find the path to PostgreSQL includes and libraries. * Altered libpgtcl to no longer require access to internal PostgreSQL include files. * Changed configure script to determine whether or not PostgreSQL 7.4+ functions PQexecParams and PQexecPrepared are available or not. 2004-05-21 Karl Lehenbauer * Add pg_exec_prepared to execute pre-prepared SQL statements with parameters. 2004-04-23 Karl Lehenbauer * Add pg_quote function to escape strings. It adds the outside quotes, too. 2004-04-14 Karl Lehenbauer * Modify pg_exec to support $-variable substitution for PostgreSQL 7.4 and above (protocol >= 3). For example, you can now do stuff like pg_exec $conn {select * from foo where field1 = $1} $value 2004-02-14 Brett Schwarz * Updated with the fixes that went into the -core libpgtcl release * Also added fix for WSAStartup posted by anonymous on the bug list 2003-01-14 Brett Schwarz * added -cmdTuples to pg_result (code submitted by Artur Trzewik) 2002-11-19 Brett Schwarz * Improved the performance of -list a little bit 2002-11-15 Karl Lehenbauer * Tagged for 1.4b3 * Fix pg_listen. (callback string wasn't properly terminated) Also made slight performance improvements in pg_listen. 2002-11-15 Brett Schwarz * Cleanup memory leaks in pg_result. * Fixed bug in pg_result -assignbyidx 2002-11-15 Karl Lehenbauer * Convert all the "#ifdef TCL_ARRAYS" where tcl_value was called if defined and not called if not defined to always "call" tcl_value. In the case where TCL_ARRAYS isn't defined, tcl_value is now defined as a macro that returns whatever was given to it, making it a no-op. This change allows the code to be compiled with TCL_MEM_DEBUG enabled to look for memory leaks. 2002-11-06 Karl Lehenbauer * Tagged for 1.4b2 * Create the libpgtcl shared library in a way where it can find both the Postgres shared library it needs (libpq) and the Tcl shared library it needs (libtcl). 2002-11-05 Brett Schwarz * added -list and -llist options to pg_result to return the results as a list and list of lists 2002-11-05 Karl Lehenbauer Started the ChangeLog. pgtcl-2.8.0/LICENSE000066400000000000000000000041441420313073400136370ustar00rootroot00000000000000 Copyright (c) 1993-1994 The Regents of the University of California. Copyright (c) 1994 X Consortium Copyright (c) 1994-1996 Sun Microsystems, Inc. Copyright (c) 1996-2000, PostgreSQL, Inc Copyright (c) 1996-2004 PostgreSQL Global Development Group Copyright (c) 1996-1999 NeoSoft, Inc. Copyright (c) 1997-2007 Karl Lehenbauer, Brett Schwartz Copyright (c) 1998-2000 Ajuba Solutions. Copyright (c) 1999 Scriptics Corporation. Copyright (c) 2001-2002 David Gravereaux. Copyright (c) 2001-2005 ActiveState Corporation. Copyright (c) 2003 Patrick Thoyts Copyright (c) 2003 Proc Place. Copyright (c) 2004 Superconnect, Ltd. Copyright (c) 2005-2016 FlightAware, LLC 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 FlightAware LLC nor the names of other contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS 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 COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. pgtcl-2.8.0/Makefile.in000066400000000000000000000372411420313073400147030ustar00rootroot00000000000000# Makefile.in -- # # This file is a Makefile for Sample TEA Extension. If it has the name # "Makefile.in" then it is a template for a Makefile; to generate the # actual Makefile, run "./configure", which is a configuration script # generated by the "autoconf" program (constructs like "@foo@" will get # replaced in the actual Makefile. # # Copyright (c) 1999 Scriptics Corporation. # Copyright (c) 2002-2003 ActiveState Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # # RCS: @(#) $Id$ #======================================================================== # Add additional lines to handle any additional AC_SUBST cases that # have been added in a customized configure script. #======================================================================== #======================================================================== # Nothing of the variables below this line should need to be changed. # Please check the TARGETS section below to make sure the make targets # are correct. #======================================================================== #======================================================================== # The names of the source files is defined in the configure script. # The object files are used for linking into the final library. # This will be used when a dist target is added to the Makefile. # It is not important to specify the directory, as long as it is the # $(srcdir) or in the generic, win or unix subdirectory. #======================================================================== PKG_SOURCES = @PKG_SOURCES@ PKG_OBJECTS = @PKG_OBJECTS@ PKG_STUB_SOURCES = @PKG_STUB_SOURCES@ PKG_STUB_OBJECTS = @PKG_STUB_OBJECTS@ #======================================================================== # PKG_TCL_SOURCES identifies Tcl runtime files that are associated with # this package that need to be installed, if any. #======================================================================== PKG_TCL_SOURCES = @PKG_TCL_SOURCES@ #======================================================================== # This is a list of public header files to be installed, if any. #======================================================================== PKG_HEADERS = @PKG_HEADERS@ #======================================================================== # "PKG_LIB_FILE" refers to the library (dynamic or static as per # configuration options) composed of the named objects. #======================================================================== PKG_LIB_FILE = @PKG_LIB_FILE@ PKG_STUB_LIB_FILE = @PKG_STUB_LIB_FILE@ lib_BINARIES = $(PKG_LIB_FILE) BINARIES = $(lib_BINARIES) SHELL = @SHELL@ srcdir = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ libdir = @libdir@ includedir = @includedir@ datarootdir = @datarootdir@ datadir = @datadir@ mandir = @mandir@ DESTDIR = PKG_MAJ_MIN = @PKG_MAJ_MIN@ PKG_DIR = $(PACKAGE_NAME)$(PKG_MAJ_MIN) pkgdatadir = $(datadir)/$(PKG_DIR) pkglibdir = $(libdir)/$(PKG_DIR) pkgincludedir = $(includedir)/$(PKG_DIR) top_builddir = . INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ CC = @CC@ CFLAGS_DEFAULT = @CFLAGS_DEFAULT@ CFLAGS_WARNING = @CFLAGS_WARNING@ EXEEXT = @EXEEXT@ LDFLAGS_DEFAULT = @LDFLAGS_DEFAULT@ MAKE_LIB = @MAKE_LIB@ MAKE_SHARED_LIB = @MAKE_SHARED_LIB@ MAKE_STATIC_LIB = @MAKE_STATIC_LIB@ MAKE_STUB_LIB = @MAKE_STUB_LIB@ OBJEXT = @OBJEXT@ RANLIB = @RANLIB@ RANLIB_STUB = @RANLIB_STUB@ SHLIB_CFLAGS = @SHLIB_CFLAGS@ SHLIB_LD = @SHLIB_LD@ SHLIB_LD_LIBS = @SHLIB_LD_LIBS@ STLIB_LD = @STLIB_LD@ #TCL_DEFS = @TCL_DEFS@ TCL_BIN_DIR = @TCL_BIN_DIR@ TCL_SRC_DIR = @TCL_SRC_DIR@ # Not used, but retained for reference of what libs Tcl required #TCL_LIBS = @TCL_LIBS@ # For Sierra and beyond you need to patch the install path into the binary. See "patch_name" target, below PATCH_NAME = @PATCH_NAME@ INSTALL_NAME = $(pkglibdir)/$(PKG_LIB_FILE) # #======================================================================== # TCLLIBPATH seeds the auto_path in Tcl's init.tcl so we can test our # package without installing. The other environment variables allow us # to test against an uninstalled Tcl. Add special env vars that you # require for testing here (like TCLX_LIBRARY). #======================================================================== EXTRA_PATH = $(top_builddir):$(TCL_BIN_DIR) TCLLIBPATH = $(top_builddir) TCLSH_ENV = TCL_LIBRARY=`@CYGPATH@ $(TCL_SRC_DIR)/library` PKG_ENV = @LD_LIBRARY_PATH_VAR@="$(EXTRA_PATH):$(@LD_LIBRARY_PATH_VAR@)" \ PATH="$(EXTRA_PATH):$(PATH)" \ TCLLIBPATH="$(TCLLIBPATH)" TCLSH_PROG = @TCLSH_PROG@ TCLSH = $(PKG_ENV) $(TCLSH_ENV) $(TCLSH_PROG) SHARED_BUILD = @SHARED_BUILD@ INCLUDES = @PKG_INCLUDES@ @TCL_INCLUDES@ PKG_CFLAGS = @PKG_CFLAGS@ # TCL_DEFS is not strictly need here, but if you remove it, then you # must make sure that configure.in checks for the necessary components # that your library may use. TCL_DEFS can actually be a problem if # you do not compile with a similar machine setup as the Tcl core was # compiled with. #DEFS = $(TCL_DEFS) @DEFS@ $(PKG_CFLAGS) DEFS = @DEFS@ $(PKG_CFLAGS) # Move pkgIndex.tl to 'BINARIES' var if it is generated in the Makefile CONFIG_CLEAN_FILES = Makefile pkgIndex.tcl CLEANFILES = @CLEANFILES@ CPPFLAGS = @CPPFLAGS@ LIBS = @PKG_LIBS@ @LIBS@ AR = @AR@ CFLAGS = @CFLAGS@ COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) #======================================================================== # Start of user-definable TARGETS section #======================================================================== #======================================================================== # TEA TARGETS. Please note that the "libraries:" target refers to platform # independent files, and the "binaries:" target inclues executable programs and # platform-dependent libraries. Modify these targets so that they install # the various pieces of your package. The make and install rules # for the BINARIES that you specified above have already been done. #======================================================================== all: binaries libraries doc #======================================================================== # The binaries target builds executable programs, Windows .dll's, unix # shared/static libraries, and any other platform-dependent files. # The list of targets to build for "binaries:" is specified at the top # of the Makefile, in the "BINARIES" variable. #======================================================================== binaries: $(BINARIES) $(PATCH_NAME) # If defined, this target will trigger after the library is made patch_name: install_name_tool -id $(INSTALL_NAME) $(PKG_LIB_FILE) # libraries: #======================================================================== # Your doc target should differentiate from doc builds (by the developer) # and doc installs (see install-doc), which just install the docs on the # end user machine when building from source. #======================================================================== doc: @echo "If you really want to rebuild the documentation, do the following:" @echo " cd doc ; make all" install: all install-binaries install-libraries install-doc install-binaries: binaries install-lib-binaries install-bin-binaries #======================================================================== # This rule installs platform-independent files, such as header files. # The list=...; for p in $$list handles the empty list case x-platform. #======================================================================== install-libraries: libraries @mkdir -p $(DESTDIR)$(includedir) @echo "Installing header files in $(DESTDIR)$(includedir)" @list='$(PKG_HEADERS)'; for i in $$list; do \ echo "Installing $(srcdir)/$$i" ; \ $(INSTALL_DATA) $(srcdir)/$$i $(DESTDIR)$(includedir) ; \ done; #======================================================================== # Install documentation. Unix manpages should go in the $(mandir) # directory. #======================================================================== install-doc: doc @mkdir -p $(DESTDIR)$(mandir)/mann @echo "Installing documentation in $(DESTDIR)$(mandir)" @list='$(srcdir)/doc/man/*.n'; for i in $$list; do \ echo "Installing $$i"; \ rm -f $(DESTDIR)$(mandir)/mann/`basename $$i`; \ $(INSTALL_DATA) $$i $(DESTDIR)$(mandir)/mann ; \ done test: binaries libraries cd $(srcdir)/tests; $(TCLSH) all.tcl $(TESTFLAGS) shell: binaries libraries @$(TCLSH) $(SCRIPT) gdb: $(TCLSH_ENV) gdb $(TCLSH_PROG) $(SCRIPT) depend: #======================================================================== # $(PKG_LIB_FILE) should be listed as part of the BINARIES variable # mentioned above. That will ensure that this target is built when you # run "make binaries". # # The $(PKG_OBJECTS) objects are created and linked into the final # library. In most cases these object files will correspond to the # source files above. #======================================================================== $(PKG_LIB_FILE): $(PKG_OBJECTS) -rm -f $(PKG_LIB_FILE) ${MAKE_LIB} $(RANLIB) $(PKG_LIB_FILE) $(PKG_STUB_LIB_FILE): $(PKG_STUB_OBJECTS) -rm -f $(PKG_STUB_LIB_FILE) ${MAKE_STUB_LIB} $(RANLIB_STUB) $(PKG_STUB_LIB_FILE) pgtclsh: pgtclAppInit.o $(BINARIES) -rm -f pgtclsh $(CC) $(CFLAGS) $(DEFS) -o $@ pgtclAppInit.o \ $(PKG_LIB_FILE) ${LIBS} $(TCL_LIB_SPEC) $(LDFLAGS_DEFAULT) #======================================================================== # We need to enumerate the list of .c to .o lines here. # # In the following lines, $(srcdir) refers to the toplevel directory # containing your extension. If your sources are in a subdirectory, # you will have to modify the paths to reflect this: # # sample.$(OBJEXT): $(srcdir)/generic/sample.c # $(COMPILE) -c `@CYGPATH@ $(srcdir)/generic/sample.c` -o $@ # # Setting the VPATH variable to a list of paths will cause the makefile # to look into these paths when resolving .c to .obj dependencies. # As necessary, add $(srcdir):$(srcdir)/compat:.... #======================================================================== VPATH = $(srcdir):$(srcdir)/generic:$(srcdir)/unix:$(srcdir)/win .c.@OBJEXT@: $(COMPILE) -c `@CYGPATH@ $<` -o $@ #======================================================================== # Distribution creation # You may need to tweak this target to make it work correctly. #======================================================================== #COMPRESS = tar cvf $(PKG_DIR).tar $(PKG_DIR); compress $(PKG_DIR).tar COMPRESS = gtar zcvf $(PKG_DIR).tar.gz $(PKG_DIR) DIST_ROOT = /tmp/dist DIST_DIR = $(DIST_ROOT)/$(PKG_DIR) dist-clean: rm -rf $(DIST_DIR) $(DIST_ROOT)/$(PKG_DIR).tar.* dist: dist-clean mkdir -p $(DIST_DIR) cp -p $(srcdir)/ChangeLog $(srcdir)/README* $(srcdir)/license* \ $(srcdir)/aclocal.m4 $(srcdir)/configure $(srcdir)/*.in \ $(DIST_DIR)/ chmod 664 $(DIST_DIR)/Makefile.in $(DIST_DIR)/aclocal.m4 chmod 775 $(DIST_DIR)/configure $(DIST_DIR)/configure.in for i in $(srcdir)/*.[ch]; do \ if [ -f $$i ]; then \ cp -p $$i $(DIST_DIR)/ ; \ fi; \ done; mkdir $(DIST_DIR)/tclconfig cp $(srcdir)/tclconfig/install-sh $(srcdir)/tclconfig/tcl.m4 \ $(DIST_DIR)/tclconfig/ chmod 664 $(DIST_DIR)/tclconfig/tcl.m4 chmod +x $(DIST_DIR)/tclconfig/install-sh list='demos doc generic library mac tests unix win'; \ for p in $$list; do \ if test -d $(srcdir)/$$p ; then \ mkdir $(DIST_DIR)/$$p; \ cp -p $(srcdir)/$$p/*.* $(DIST_DIR)/$$p/; \ fi; \ done (cd $(DIST_ROOT); $(COMPRESS);) #======================================================================== # End of user-definable section #======================================================================== #======================================================================== # Don't modify the file to clean here. Instead, set the "CLEANFILES" # variable in configure.in #======================================================================== clean: -test -z "$(BINARIES)" || rm -f $(BINARIES) -rm -f *.$(OBJEXT) core *.core -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean: clean -rm -f *.tab.c -rm -f $(CONFIG_CLEAN_FILES) -rm -rf config.cache config.log config.status autom4te.cache #======================================================================== # Install binary object libraries. On Windows this includes both .dll and # .lib files. Because the .lib files are not explicitly listed anywhere, # we need to deduce their existence from the .dll file of the same name. # Library files go into the lib directory. # In addition, this will generate the pkgIndex.tcl # file in the install location (assuming it can find a usable tclsh shell) # # You should not have to modify this target. #======================================================================== install-lib-binaries: binaries @mkdir -p $(DESTDIR)$(pkglibdir) @list='$(lib_BINARIES)'; for p in $$list; do \ if test -f $$p; then \ echo " $(INSTALL_PROGRAM) $$p $(DESTDIR)$(pkglibdir)/$$p"; \ $(INSTALL_PROGRAM) $$p $(DESTDIR)$(pkglibdir)/$$p; \ stub=`echo $$p|sed -e "s/.*\(stub\).*/\1/"`; \ if test "x$$stub" = "xstub"; then \ echo " $(RANLIB_STUB) $(DESTDIR)$(pkglibdir)/$$p"; \ $(RANLIB_STUB) $(DESTDIR)$(pkglibdir)/$$p; \ else \ echo " $(RANLIB) $(DESTDIR)$(pkglibdir)/$$p"; \ $(RANLIB) $(DESTDIR)$(pkglibdir)/$$p; \ fi; \ ext=`echo $$p|sed -e "s/.*\.//"`; \ if test "x$$ext" = "xdll"; then \ lib=`basename $$p|sed -e 's/.[^.]*$$//'`.lib; \ if test -f $$lib; then \ echo " $(INSTALL_DATA) $$lib $(DESTDIR)$(pkglibdir)/$$lib"; \ $(INSTALL_DATA) $$lib $(DESTDIR)$(pkglibdir)/$$lib; \ fi; \ fi; \ fi; \ done ln -sf $(PKG_DIR)/$(PKG_LIB_FILE) $(DESTDIR)$(libdir)/`echo $(PKG_LIB_FILE) | sed 's/$(PACKAGE_VERSION)//'` @list='$(PKG_TCL_SOURCES)'; for p in $$list; do \ if test -f $(srcdir)/$$p; then \ destp=`basename $$p`; \ echo " Install $$destp $(DESTDIR)$(pkglibdir)/$$destp"; \ $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(pkglibdir)/$$destp; \ fi; \ done @if test "x$(SHARED_BUILD)" = "x1"; then \ echo " Install pkgIndex.tcl $(DESTDIR)$(pkglibdir)"; \ $(INSTALL_DATA) pkgIndex.tcl $(DESTDIR)$(pkglibdir); \ fi #======================================================================== # Install binary executables (e.g. .exe files and dependent .dll files) # This is for files that must go in the bin directory (located next to # wish and tclsh), like dependent .dll files on Windows. # # You should not have to modify this target, except to define bin_BINARIES # above if necessary. #======================================================================== install-bin-binaries: binaries @mkdir -p $(DESTDIR)$(bindir) @list='$(bin_BINARIES)'; for p in $$list; do \ if test -f $$p; then \ echo " $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/$$p"; \ $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/$$p; \ fi; \ done .SUFFIXES: .c .$(OBJEXT) Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status cd $(top_builddir) \ && CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status uninstall-binaries: list='$(lib_BINARIES)'; for p in $$list; do \ rm -f $(DESTDIR)$(pkglibdir)/$$p; \ done list='$(PKG_TCL_SOURCES)'; for p in $$list; do \ p=`basename $$p`; \ rm -f $(DESTDIR)$(pkglibdir)/$$p; \ done list='$(bin_BINARIES)'; for p in $$list; do \ rm -f $(DESTDIR)$(bindir)/$$p; \ done .PHONY: all binaries clean depend distclean doc install libraries test # 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: pgtcl-2.8.0/README-postgres-helpers.md000066400000000000000000000061021420313073400174110ustar00rootroot00000000000000 Welcome to the Postgres helpers functions. These are actually quite soild. They've been in use for years. They are installed as part of *make install* from the top-level directory of the Pgtcl repo. To make them available to your Tcl program, execute ```tcl package require sc_postgres ``` * **sc_pg::foreach_tuple** *pgResult* *arrayName* *body* Given a postgres result, an array name, and a code body, fill the array in turn with each result tuple and execute the code body against it. This is largely superseded by the new Pgtcl pg_result -foreach option. * **sc_pg::quote** *string* Quote a string for Postgres. Puts single quotes around it and quotes single quotes if they're contained within it. It's just a synonym for pg_quote. * **sc_pg::gen_insert_from_array** *tableName* *array* Return a postgres SQL insert statement based on the specified table and the contents of the specified array. * **sc_pg::gen_update_from_array** *tableName* *array* *keyFieldList* Return a postgres SQL update statement based on the contents of an array. Key field list specifies the keys and their values must be in the array. The where clause is generated as a big "and", so all the keys in the key field list must match for a row to be updated. * **sc_pg::perform_insert** *session* *insertStatement* Execute a statement on the given database session. Grab the status out of the result. Clear the result. Return the status. * **sc_pg::perform_update_from_array** *session* *tableName* *array* *keyFieldList* Generate an update statement and execute it on the given session. Grab the status out of the result. Clear the result. Return the status. * **sc_pg::gen_insert_from_lists** *tableName* *nameList* *valueList* Generate a sql insert command based on the contents of an element list and a one-for-one corresponding value list, and return it. * **sc_pg::perform_insert_from_array** *session* *tableName* *arrayName* Generate a sql insert command based on the contents of an array and execute it against the specified database session. * **sc_pg::clock_to_sql_time** *clockValue* Convert a clock value (integer seconds since 1970) to a SQL standard abstime value, accurate to a day. * **sc_pg::clock_to_precise_sql_time** *clockValue* Generate a SQL time from an integer clock time (seconds since 1970), accurate to the second, with timezone. * **sc_pg::clock_to_precise_sql_time_without_timezone** *clockValue* Generate a SQL time from an integer clock time (seconds since 1970), accurate to the second, without timezone. * **sc_pg::sql_time_to_clock** *sqlDate* Given a SQL standard abstime value, convert it to an integer clock value (seconds since 1970) and return it. * **sc_pg::res_must_succeed** *$resultHandle* The given postgres result must be PGRES_COMMAND_OK and, if it isn't, throw an error. If it is OK, clear the postgres result. * **sc_pg::res_dont_care** *$resultHandle* Whether or not the give postgres result is PGRES_COMMAND_OK, the result is cleared. By default we write something to stdout, but that's probably dumb. pgtcl-2.8.0/README.FreeBSD000066400000000000000000000006371420313073400147260ustar00rootroot00000000000000# # # You should have install tcl and postgresql*-client from # ports or packages. # # Then run autoconf and configure in this directory, like this: autoreconf #LDFLAGS seems to be needed to find SQLITE3 on FreeBSD 11 without gcc CC=clang CXX=clang++ LDFLAGS="${LDFLAGS} -L/usr/local/lib" ./configure --with-tcl=/usr/local/lib/tcl8.6 --mandir=/usr/local/man "$@" # Add "--enable-symbols" if you want debugging. pgtcl-2.8.0/README.Linux000066400000000000000000000004301420313073400146020ustar00rootroot00000000000000# # # You should have install tcl and postgresql*-client from # ports or packages. # # Then run autoconf and configure in this directory, like this: autoreconf ./configure --with-tcl=/usr/lib/tcl8.6 --mandir=/usr/share/man "$@" # Add "--enable-symbols" if you want debugging. pgtcl-2.8.0/README.async000066400000000000000000000124151420313073400146260ustar00rootroot00000000000000 $Id$ Experimental Tcl interface to PostgreSQL asynchronous query processing by Karl Lehenbauer (karl-pg@sc.com) 10/2002 (revised 6/2004) RATIONALE From the C-interface docs: The PQexec function is adequate for submitting commands in simple synchronous applications. It has a couple of major deficiencies however: * PQexec waits for the command to be completed. The application may have other work to do (such as maintaining a user interface), in which case it won't want to block waiting for the response. * Since control is buried inside PQexec, it is hard for the frontend to decide it would like to try to cancel the ongoing command. (It can be done from a signal handler, but not otherwise.) * PQexec can return only one PGresult structure. If the submitted command string contains multiple SQL commands, all but the last PGresult are discarded by PQexec. WHAT THIS IS A handful of new pg_* commands have been added to support asynchronous operation, including cancelling requests that are currently being processed and obtaining results from each SQL command when a query contains multiple commands. SOMEWHAT EXPERIMENTAL IN NATURE This is a new Tcl interface to asynchronous query processing capabilities that have been made available through the Postgres C interface. We're calling it experimental because we think we'll want to evolve and change the interface, perhaps simplifying it, as we gain experience with it. So if you use it, understand that we are not promising to provide the same interface or backwards compatibility to this interface in future releases. ASYNCHRONOUS QUERY PROCESSING COMMANDS pg_sendquery connection query This works like pg_exec, except that the query is issued asynchronously and pg_sendquery returns immediately without providing a result handle. With Postgres 7.4 and above, you can also do variable substitution. pg_sendquery connection query var1 var2 ... ...for example... pg_sendquery $conn {insert into people values ($1, $2, $3, $4, $5);} \ $name $address $city $state $zip You can also execute prepared statements: pg_exec $conn {prepare insert_people (varchar, varchar, varchar, varchar, varchar) as insert into people values ($1, $2, $3, $4, $5);} pg_sendquery_prepared $conn insert_people $name $address $city $state $zip To get result handles resulting from the execution of pg_sendqery (and there may be more than one if there are multiple SQL commands in the query), you need to repeatedly call pg_getresult connection This will return the same sort of result handle that pg_exec returns. If there is no query currently being processed or all of the results have been obtained, pg_getresult returns nothing. pg_isbusy connection pg_getresult can block if results aren't yet available. To avoid this, you can use pg_isbusy to check to see if the connection is busy processing a query. If this returns 1, pg_getresult will block if called. If it's 0, you can safely call pg_getresult and it won't block. pg_blocking This sets whether a connection is set for blocking or nonblocking, and allows that state to be changed. syntax: pg_blocking connection - returns the current state, 1 = blocking, 0 = non pg_blocking connection 1 - sets the connection to blocking pg_blocking connection 0 - sets the connection to nonblocking Note - I'm not sure about all of the ramifications of setting a connection nonblocking. Even with a connection in the (default) blocking state, pg_isbusy seems to work OK and can be used in conjunction with pg_getresult to keep from blocking while processing query results. pg_cancelrequest connection This request that postgresql abandon processing of the current command issued via pg_sendquery. There is no guarantee that the request will be cancelled. If it is and you were in the middle of a transaction, the entire transaction is cancelled. You still need to call pg_getresult repeatedly until it doesn't return anything, and handle (and discard) all of the returned result handles. HOW TO USE IT We really need some example code. Probably we need some Tcl code that will be part of the libary, pulled in with "package require Pgtcl", that will issue a pg_sendrequest and iteratively call pg_isbusy on a timer, then looping through passed-in Tcl code for each result until none are found. You'll want to write something that issues the request via pg_sendquery. Then you'll want a proc that does a pg_isbusy and if it is busy, calls itself to run again after, oh, a tenth of a second or so, via "after". If pg_isbusy returns 0, you can safely call pg_getresult to get a result. (Use pg_result to examine the result, as in the past.) If pg_getresult returns an empty string, there is no more work to be done. If you want to cancel a request that is currently in progress, use pg_cancelrequest. Note that you still need to do the pg_getresult thing repeatedly until it returns nothing. For more information, read the C interface docs in the PostgreSQL documentation. I know you'd like some example code. We don't have any yet. That's why we call it an alpha release. LICENSE Berkeley License. Freely redistributable for any use including resale, without royalty or other sucky GPL restrictions. Don't sue us if it kills your dog. pgtcl-2.8.0/README.macosx000066400000000000000000000025401420313073400150010ustar00rootroot00000000000000 #$Id$ # #Configuration of libpgtcl under Mac OS X no longer requires any tweaks. # #We'd love some help in making this a port in the Mac OS X darwinports tree, #so this build can be even more automatic. # #For now, you need to build and install Tcl and Postgres # #brew install tcl #brew install postgresql ## #Then run aoutoconf and configure in this directory with the following parameters: # autoconf ./configure --prefix=/usr/local --exec-prefix=/usr/local # #Then do a "make" and a "sudo make install" or equivalent, and you should #be on your way. # #There is also a version of Tcl included on the Mac in /usr/bin if you install #developer tools (I think that's what did it), and you'll #get this one by default (in all likelihood) if you just type tclsh from the #shell command line. This version does not have /opt/local/lib in its package #path (auto_path). You need to either edit #/System/Library/Frameworks/Tcl.framework/Versions/8.4/Resources/Scripts/init.tcl #to add /opt/local/lib to the auto_path or make sure you run tclsh from #/opt/local/bin instead of from /usr/bin, which may require you to type #/opt/local/bin/tclsh from the command line, or make sure that your PATH #environment variable has /opt/local/bin first. This is not a libpgtcl issue. # #Here's one way to start up PostgreSQL under Mac OS X: # #pg_ctl -D /opt/local/pgsql/data start # pgtcl-2.8.0/README.md000066400000000000000000000077721420313073400141230ustar00rootroot00000000000000![Linux CI](https://github.com/flightaware/Pgtcl/workflows/Linux%20CI/badge.svg) ![Mac CI](https://github.com/flightaware/Pgtcl/workflows/Mac%20CI/badge.svg) Thank you for downloading Pgtcl, a package that adds PostgreSQL interface extensions to the Tcl programming language... an open source project that's been in existence for nearly twenty years. # CONFIGURING Pgtcl is now Tcl Extension Architecture (TEA) compliant, shipping with a standard "configure" script. It no longer needs to reside in a specific place within the Postgres source tree in order to build. For standard builds to put things in subdirectories of /usr/local, you can often simply execute configure with no arguments at all... ```sh autoreconf ./configure ``` The configure script will attempt to find where the Postgres includes and libraries are using pg_config, a program built and installed as part of Postgres. Alternatively, you can specify a path to the Postgres include files using --with-postgres-include and to the Postgres libraries using --with-postgres-lib. If you had PostgreSQL installed into /usr/postgres and a Tcl build in /usr/pptcl, you might use something like ```sh ./configure --prefix=/usr/pptcl ``` With this style of configure command, you'll need to make sure pg_config (and the correct pg_config if you have postgres installed in multiple places) is in the PATH. Alternatively you can still explicitly specify where the Postgres includes and libraries are found: ```sh ./configure --prefix=/usr/pptcl --with-postgres-include=/usr/postgres/include --with-postgres-lib=/usr/postgres/lib ``` The other configure parameters that may need tweaking are where Tcl's includes and libraries (and tclConfig.sh) are. Although normally they will be in /usr/local/include and /usr/local/lib, in some cases they may reside elsewhere. If Tcl is built and installed from the FreeBSD ports tree, for example, they'll be in versioned subdirectories... ```sh ./configure --with-tcl=/usr/local/lib/tcl8.6 --with-tclinclude=/usr/local/include/tcl8.6 ``` # BUILDING Do a `make`. If all goes well, libpgtcl will be compiled and linked. # INSTALLING Do a `make install` # USING IT With version 1.4, Pgtcl is a standard package and can be loaded with "package require" instead of the shared library load routine, "load". Fire up your tclsh: ``` tclsh8.6 % package require Pgtcl 2.1.0 ``` It's a good idea to switch to using the ``package require`` instead of "load" to pick up Pgtcl, because there will be additional Tcl code shipped in future versions of Pgtcl, and using "package require" will make that code available to your application. Also it keeps you from hard-coding the path to the library and hard-coding a dependency on a specific version. ## TROUBLESHOOTING If it compiles and installs ok, but ``package require`` doesn't work, it probably didn't install into the search path Tcl uses to find extensions. You might have more than one Tclsh installed. Try adding a path to the parent directory of where the thing installed, for example, if it installed into /opt/local/bin ``` tclsh8.6 % lappend auto_path /opt/local/lib ... % package require Pgtcl 2.1.0 ``` # CREDITS Pgtcl was originally written by Jolly Chen. Many people have contributed to the development of Pgtcl over the years, including Randy Kunkee, who added the channel handler code, among many other improvements. Karl Lehenbauer has been maintaining the software since 2002. Brett Schwartz contributed many improvements and bug fixes between 2002 and 2011. Jeff Lawson and Peter da Silva have made prolific contributions to Pgtcl since 2016. (Special thanks also to Peter for cleaning up and updating the documentation.) Additional thanks to David McNett for the work to migrate Pgtcl from Tcl 8.4 to 8.5, and to Pietro Cerutti for ideas, assistance, and for maintaining the Pgtcl port for FreeBSD. If you have contributed to Pgtcl at any time since its inception and your name is not listed here, please file an issue and we will gladly acknowledge your contribution. pgtcl-2.8.0/TODO000066400000000000000000000035251420313073400133240ustar00rootroot00000000000000 $Id$ Document var substitution to pg_sendquery Document pg_sendquery_prepared Set up error code when returning errors from postgres stuff. Return postgres status like {POSTGRES PGRES_EMPTY_QUERY} or whatever. Go through all possible C library calls to investigate a Postgres result and make sure they're supported. Make a cursor-like thing that sits on top of postgres results. It's "reusable", because it knows to close out the previous result when it's being handed a new result. Fix up new asynchronous operation stuff to use applicable Tcl internals. Make a new command that uses the async interface but waits behind your back through the tcl event loop, something like pg_query $conn query resultVar {resultCode} It iterates the resultCode for each result found, automatically clearing the result at the end of each iteration. X add -list and -llist options to return list in pg_result - add introspection commands? e.g. to return the connection handles, or result handles Possibly implement a notice processor that will allow us to catch reporting of notice and warning messages generated by libpq. These are normally just dumped to stdout. Add pg_trace and pg_untrace or equivalent to trace client/server communication to a debugging file stream. DONE Make configure script use or have an option to use "pg_config --includedir" to find the postgres includes and "pg_config --libdir" to find the postgres libraries. DONE Support for asynchronous operation. DONE Stubify the build. DONE Make the build TEA-compliant, including DONE Document pg_execute. DONE Document pg_on_connection_loss. DONE Document new asynchronous operation stuff. DONE Add support for PQsendQueryParams (parameter substitution to asynchronous queries.) DONE Add support for PQsendQueryPrepared (parameter substitution to prepared statements as asynchronous queries.) pgtcl-2.8.0/aclocal.m4000077500000000000000000001216301420313073400144750ustar00rootroot00000000000000# # Include the TEA standard macro set # builtin(include,tclconfig/tcl.m4) # # Add here whatever m4 macros you want to define for your package # #-------------------------------------------------------------------- # TEA_CONFIG_CFLAGS (formerly PGTCL_CONFIG_CFLAGS) # # a modified copy of TEA_CONFIG_CFLAGS, overriding the original so it gets called at the right # time by TEA_ENABLE_SYMBOLS # # The reason is that we have to set up search paths to the Tcl shared lib # AND the postgresql libpq shared library. # # Unfortunately this is a big routine and our changes are small. This is # a maintenance problem as changes to TEA_CONFIG_CFLAGS in tcl.m4 need to be # propagated. # # Basically anywhere you see LIB_RUNTIME_DIR you have to add # LIB_PGTCL_RUNTIME_DIR, things like this: # #CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR},-R,${LIB_PGTCL_RUNTIME_DIR}' #CC_SEARCH_FLAGS='-R${LIB_RUNTIME_DIR},-R,${LIB_PGTCL_RUNTIME_DIR}' #LD_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR} -R ${LIB_PGTCL_RUNTIME_DIR}' #CC_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR} -L{LIB_PGTCL_RUNTIME_DIR}' #CC_SEARCH_FLAGS='-Wl,+s,+b,${LIB_RUNTIME_DIR}:${LIB_PGTCL_RUNTIME_DIR}:.' #LD_SEARCH_FLAGS='+s +b ${LIB_RUNTIME_DIR}:${LIB_PGTCL_RUNTIME_DIR}:.' #CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR},-rpath,${LIB_PGTCL_RUNTIME_DIR}' # # Try to determine the proper flags to pass to the compiler # for building shared libraries and other such nonsense. # # Arguments: # none # # Results: # # Defines and substitutes the following vars: # # DL_OBJS, DL_LIBS - removed for TEA, only needed by core. # LDFLAGS - Flags to pass to the compiler when linking object # files into an executable application binary such # as tclsh. # LD_SEARCH_FLAGS-Flags to pass to ld, such as "-R /usr/local/tcl/lib", # that tell the run-time dynamic linker where to look # for shared libraries such as libtcl.so. Depends on # the variable LIB_RUNTIME_DIR in the Makefile. Could # be the same as CC_SEARCH_FLAGS if ${CC} is used to link. # CC_SEARCH_FLAGS-Flags to pass to ${CC}, such as "-Wl,-rpath,/usr/local/tcl/lib", # that tell the run-time dynamic linker where to look # for shared libraries such as libtcl.so. Depends on # the variable LIB_RUNTIME_DIR in the Makefile. # SHLIB_CFLAGS - Flags to pass to cc when compiling the components # of a shared library (may request position-independent # code, among other things). # SHLIB_LD - Base command to use for combining object files # into a shared library. # SHLIB_LD_LIBS - Dependent libraries for the linker to scan when # creating shared libraries. This symbol typically # goes at the end of the "ld" commands that build # shared libraries. The value of the symbol defaults to # "${LIBS}" if all of the dependent libraries should # be specified when creating a shared library. If # dependent libraries should not be specified (as on # SunOS 4.x, where they cause the link to fail, or in # general if Tcl and Tk aren't themselves shared # libraries), then this symbol has an empty string # as its value. # SHLIB_SUFFIX - Suffix to use for the names of dynamically loadable # extensions. An empty string means we don't know how # to use shared libraries on this platform. # LIB_SUFFIX - Specifies everything that comes after the "libfoo" # in a static or shared library name, using the $PACKAGE_VERSION variable # to put the version in the right place. This is used # by platforms that need non-standard library names. # Examples: ${PACKAGE_VERSION}.so.1.1 on NetBSD, since it needs # to have a version after the .so, and ${PACKAGE_VERSION}.a # on AIX, since a shared library needs to have # a .a extension whereas shared objects for loadable # extensions have a .so extension. Defaults to # ${PACKAGE_VERSION}${SHLIB_SUFFIX}. # CFLAGS_DEBUG - # Flags used when running the compiler in debug mode # CFLAGS_OPTIMIZE - # Flags used when running the compiler in optimize mode # CFLAGS - Additional CFLAGS added as necessary (usually 64-bit) #-------------------------------------------------------------------- AC_DEFUN([TEA_CONFIG_CFLAGS], [ dnl TEA specific: Make sure we are initialized AC_REQUIRE([TEA_INIT]) # Step 0.a: Enable 64 bit support? AC_MSG_CHECKING([if 64bit support is requested]) AC_ARG_ENABLE(64bit, AC_HELP_STRING([--enable-64bit], [enable 64bit support (default: off)]), [do64bit=$enableval], [do64bit=no]) AC_MSG_RESULT([$do64bit]) # Step 0.b: Enable Solaris 64 bit VIS support? AC_MSG_CHECKING([if 64bit Sparc VIS support is requested]) AC_ARG_ENABLE(64bit-vis, AC_HELP_STRING([--enable-64bit-vis], [enable 64bit Sparc VIS support (default: off)]), [do64bitVIS=$enableval], [do64bitVIS=no]) AC_MSG_RESULT([$do64bitVIS]) # Force 64bit on with VIS AS_IF([test "$do64bitVIS" = "yes"], [do64bit=yes]) # Step 0.c: Check if visibility support is available. Do this here so # that platform specific alternatives can be used below if this fails. AC_CACHE_CHECK([if compiler supports visibility "hidden"], tcl_cv_cc_visibility_hidden, [ hold_cflags=$CFLAGS; CFLAGS="$CFLAGS -Werror" AC_TRY_LINK([ extern __attribute__((__visibility__("hidden"))) void f(void); void f(void) {}], [f();], tcl_cv_cc_visibility_hidden=yes, tcl_cv_cc_visibility_hidden=no) CFLAGS=$hold_cflags]) AS_IF([test $tcl_cv_cc_visibility_hidden = yes], [ AC_DEFINE(MODULE_SCOPE, [extern __attribute__((__visibility__("hidden")))], [Compiler support for module scope symbols]) AC_DEFINE(HAVE_HIDDEN, [1], [Compiler support for module scope symbols]) ]) # Step 0.d: Disable -rpath support? AC_MSG_CHECKING([if rpath support is requested]) AC_ARG_ENABLE(rpath, AC_HELP_STRING([--disable-rpath], [disable rpath support (default: on)]), [doRpath=$enableval], [doRpath=yes]) AC_MSG_RESULT([$doRpath]) # TEA specific: Cross-compiling options for Windows/CE builds? AS_IF([test "${TEA_PLATFORM}" = windows], [ AC_MSG_CHECKING([if Windows/CE build is requested]) AC_ARG_ENABLE(wince, AC_HELP_STRING([--enable-wince], [enable Win/CE support (where applicable)]), [doWince=$enableval], [doWince=no]) AC_MSG_RESULT([$doWince]) ]) # Set the variable "system" to hold the name and version number # for the system. TEA_CONFIG_SYSTEM # Require ranlib early so we can override it in special cases below. AC_REQUIRE([AC_PROG_RANLIB]) # Set configuration options based on system name and version. # This is similar to Tcl's unix/tcl.m4 except that we've added a # "windows" case and removed some core-only vars. do64bit_ok=no # default to '{$LIBS}' and set to "" on per-platform necessary basis SHLIB_LD_LIBS='${LIBS}' # When ld needs options to work in 64-bit mode, put them in # LDFLAGS_ARCH so they eventually end up in LDFLAGS even if [load] # is disabled by the user. [Bug 1016796] LDFLAGS_ARCH="" UNSHARED_LIB_SUFFIX="" # TEA specific: use PACKAGE_VERSION instead of VERSION TCL_TRIM_DOTS='`echo ${PACKAGE_VERSION} | tr -d .`' ECHO_VERSION='`echo ${PACKAGE_VERSION}`' TCL_LIB_VERSIONS_OK=ok CFLAGS_DEBUG=-g AS_IF([test "$GCC" = yes], [ CFLAGS_OPTIMIZE=-O2 CFLAGS_WARNING="-Wall" ], [ CFLAGS_OPTIMIZE=-O CFLAGS_WARNING="" ]) AC_CHECK_TOOL(AR, ar) STLIB_LD='${AR} cr' LD_LIBRARY_PATH_VAR="LD_LIBRARY_PATH" AS_IF([test "x$SHLIB_VERSION" = x],[SHLIB_VERSION=""],[SHLIB_VERSION=".$SHLIB_VERSION"]) case $system in # TEA specific: windows) # This is a 2-stage check to make sure we have the 64-bit SDK # We have to know where the SDK is installed. # This magic is based on MS Platform SDK for Win2003 SP1 - hobbs # MACHINE is IX86 for LINK, but this is used by the manifest, # which requires x86|amd64|ia64. MACHINE="X86" if test "$do64bit" != "no" ; then if test "x${MSSDK}x" = "xx" ; then MSSDK="C:/Progra~1/Microsoft Platform SDK" fi MSSDK=`echo "$MSSDK" | sed -e 's!\\\!/!g'` PATH64="" case "$do64bit" in amd64|x64|yes) MACHINE="AMD64" ; # default to AMD64 64-bit build PATH64="${MSSDK}/Bin/Win64/x86/AMD64" ;; ia64) MACHINE="IA64" PATH64="${MSSDK}/Bin/Win64" ;; esac if test "$GCC" != "yes" -a ! -d "${PATH64}" ; then AC_MSG_WARN([Could not find 64-bit $MACHINE SDK to enable 64bit mode]) AC_MSG_WARN([Ensure latest Platform SDK is installed]) do64bit="no" else AC_MSG_RESULT([ Using 64-bit $MACHINE mode]) do64bit_ok="yes" fi fi if test "$doWince" != "no" ; then if test "$do64bit" != "no" ; then AC_MSG_ERROR([Windows/CE and 64-bit builds incompatible]) fi if test "$GCC" = "yes" ; then AC_MSG_ERROR([Windows/CE and GCC builds incompatible]) fi TEA_PATH_CELIB # Set defaults for common evc4/PPC2003 setup # Currently Tcl requires 300+, possibly 420+ for sockets CEVERSION=420; # could be 211 300 301 400 420 ... TARGETCPU=ARMV4; # could be ARMV4 ARM MIPS SH3 X86 ... ARCH=ARM; # could be ARM MIPS X86EM ... PLATFORM="Pocket PC 2003"; # or "Pocket PC 2002" if test "$doWince" != "yes"; then # If !yes then the user specified something # Reset ARCH to allow user to skip specifying it ARCH= eval `echo $doWince | awk -F, '{ \ if (length([$]1)) { printf "CEVERSION=\"%s\"\n", [$]1; \ if ([$]1 < 400) { printf "PLATFORM=\"Pocket PC 2002\"\n" } }; \ if (length([$]2)) { printf "TARGETCPU=\"%s\"\n", toupper([$]2) }; \ if (length([$]3)) { printf "ARCH=\"%s\"\n", toupper([$]3) }; \ if (length([$]4)) { printf "PLATFORM=\"%s\"\n", [$]4 }; \ }'` if test "x${ARCH}" = "x" ; then ARCH=$TARGETCPU; fi fi OSVERSION=WCE$CEVERSION; if test "x${WCEROOT}" = "x" ; then WCEROOT="C:/Program Files/Microsoft eMbedded C++ 4.0" if test ! -d "${WCEROOT}" ; then WCEROOT="C:/Program Files/Microsoft eMbedded Tools" fi fi if test "x${SDKROOT}" = "x" ; then SDKROOT="C:/Program Files/Windows CE Tools" if test ! -d "${SDKROOT}" ; then SDKROOT="C:/Windows CE Tools" fi fi WCEROOT=`echo "$WCEROOT" | sed -e 's!\\\!/!g'` SDKROOT=`echo "$SDKROOT" | sed -e 's!\\\!/!g'` if test ! -d "${SDKROOT}/${OSVERSION}/${PLATFORM}/Lib/${TARGETCPU}" \ -o ! -d "${WCEROOT}/EVC/${OSVERSION}/bin"; then AC_MSG_ERROR([could not find PocketPC SDK or target compiler to enable WinCE mode [$CEVERSION,$TARGETCPU,$ARCH,$PLATFORM]]) doWince="no" else # We could PATH_NOSPACE these, but that's not important, # as long as we quote them when used. CEINCLUDE="${SDKROOT}/${OSVERSION}/${PLATFORM}/include" if test -d "${CEINCLUDE}/${TARGETCPU}" ; then CEINCLUDE="${CEINCLUDE}/${TARGETCPU}" fi CELIBPATH="${SDKROOT}/${OSVERSION}/${PLATFORM}/Lib/${TARGETCPU}" fi fi if test "$GCC" != "yes" ; then if test "${SHARED_BUILD}" = "0" ; then runtime=-MT else runtime=-MD fi if test "$do64bit" != "no" ; then # All this magic is necessary for the Win64 SDK RC1 - hobbs CC="\"${PATH64}/cl.exe\"" CFLAGS="${CFLAGS} -I\"${MSSDK}/Include\" -I\"${MSSDK}/Include/crt\" -I\"${MSSDK}/Include/crt/sys\"" RC="\"${MSSDK}/bin/rc.exe\"" lflags="-nologo -MACHINE:${MACHINE} -LIBPATH:\"${MSSDK}/Lib/${MACHINE}\"" LINKBIN="\"${PATH64}/link.exe\"" CFLAGS_DEBUG="-nologo -Zi -Od -W3 ${runtime}d" CFLAGS_OPTIMIZE="-nologo -O2 -W2 ${runtime}" # Avoid 'unresolved external symbol __security_cookie' # errors, c.f. http://support.microsoft.com/?id=894573 TEA_ADD_LIBS([bufferoverflowU.lib]) elif test "$doWince" != "no" ; then CEBINROOT="${WCEROOT}/EVC/${OSVERSION}/bin" if test "${TARGETCPU}" = "X86"; then CC="\"${CEBINROOT}/cl.exe\"" else CC="\"${CEBINROOT}/cl${ARCH}.exe\"" fi CFLAGS="$CFLAGS -I\"${CELIB_DIR}/inc\" -I\"${CEINCLUDE}\"" RC="\"${WCEROOT}/Common/EVC/bin/rc.exe\"" arch=`echo ${ARCH} | awk '{print tolower([$]0)}'` defs="${ARCH} _${ARCH}_ ${arch} PALM_SIZE _MT _WINDOWS" if test "${SHARED_BUILD}" = "1" ; then # Static CE builds require static celib as well defs="${defs} _DLL" fi for i in $defs ; do AC_DEFINE_UNQUOTED($i, 1, [WinCE def ]$i) done AC_DEFINE_UNQUOTED(_WIN32_WCE, $CEVERSION, [_WIN32_WCE version]) AC_DEFINE_UNQUOTED(UNDER_CE, $CEVERSION, [UNDER_CE version]) CFLAGS_DEBUG="-nologo -Zi -Od" CFLAGS_OPTIMIZE="-nologo -Ox" lversion=`echo ${CEVERSION} | sed -e 's/\(.\)\(..\)/\1\.\2/'` lflags="-MACHINE:${ARCH} -LIBPATH:\"${CELIBPATH}\" -subsystem:windowsce,${lversion} -nologo" LINKBIN="\"${CEBINROOT}/link.exe\"" AC_SUBST(CELIB_DIR) else RC="rc" lflags="-nologo" LINKBIN="link" CFLAGS_DEBUG="-nologo -Z7 -Od -W3 -WX ${runtime}d" CFLAGS_OPTIMIZE="-nologo -O2 -W2 ${runtime}" fi fi if test "$GCC" = "yes"; then # mingw gcc mode AC_CHECK_TOOL(RC, windres) CFLAGS_DEBUG="-g" CFLAGS_OPTIMIZE="-O2 -fomit-frame-pointer" SHLIB_LD='${CC} -shared' UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a' LDFLAGS_CONSOLE="-wl,--subsystem,console ${lflags}" LDFLAGS_WINDOW="-wl,--subsystem,windows ${lflags}" AC_CACHE_CHECK(for cross-compile version of gcc, ac_cv_cross, AC_TRY_COMPILE([ #ifdef _WIN32 #error cross-compiler #endif ], [], ac_cv_cross=yes, ac_cv_cross=no) ) if test "$ac_cv_cross" = "yes"; then case "$do64bit" in amd64|x64|yes) CC="x86_64-w64-mingw32-gcc" LD="x86_64-w64-mingw32-ld" AR="x86_64-w64-mingw32-ar" RANLIB="x86_64-w64-mingw32-ranlib" RC="x86_64-w64-mingw32-windres" ;; *) CC="i686-w64-mingw32-gcc" LD="i686-w64-mingw32-ld" AR="i686-w64-mingw32-ar" RANLIB="i686-w64-mingw32-ranlib" RC="i686-w64-mingw32-windres" ;; esac fi else SHLIB_LD="${LINKBIN} -dll ${lflags}" # link -lib only works when -lib is the first arg STLIB_LD="${LINKBIN} -lib ${lflags}" UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.lib' PATHTYPE=-w # For information on what debugtype is most useful, see: # http://msdn.microsoft.com/library/en-us/dnvc60/html/gendepdebug.asp # and also # http://msdn2.microsoft.com/en-us/library/y0zzbyt4%28VS.80%29.aspx # This essentially turns it all on. LDFLAGS_DEBUG="-debug -debugtype:cv" LDFLAGS_OPTIMIZE="-release" if test "$doWince" != "no" ; then LDFLAGS_CONSOLE="-link ${lflags}" LDFLAGS_WINDOW=${LDFLAGS_CONSOLE} else LDFLAGS_CONSOLE="-link -subsystem:console ${lflags}" LDFLAGS_WINDOW="-link -subsystem:windows ${lflags}" fi fi SHLIB_SUFFIX=".dll" SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.dll' TCL_LIB_VERSIONS_OK=nodots ;; AIX-*) AS_IF([test "${TCL_THREADS}" = "1" -a "$GCC" != "yes"], [ # AIX requires the _r compiler when gcc isn't being used case "${CC}" in *_r|*_r\ *) # ok ... ;; *) # Make sure only first arg gets _r CC=`echo "$CC" | sed -e 's/^\([[^ ]]*\)/\1_r/'` ;; esac AC_MSG_RESULT([Using $CC for compiling with threads]) ]) LIBS="$LIBS -lc" SHLIB_CFLAGS="" SHLIB_SUFFIX=".so" LD_LIBRARY_PATH_VAR="LIBPATH" # Check to enable 64-bit flags for compiler/linker AS_IF([test "$do64bit" = yes], [ AS_IF([test "$GCC" = yes], [ AC_MSG_WARN([64bit mode not supported with GCC on $system]) ], [ do64bit_ok=yes CFLAGS="$CFLAGS -q64" LDFLAGS_ARCH="-q64" RANLIB="${RANLIB} -X64" AR="${AR} -X64" SHLIB_LD_FLAGS="-b64" ]) ]) AS_IF([test "`uname -m`" = ia64], [ # AIX-5 uses ELF style dynamic libraries on IA-64, but not PPC SHLIB_LD="/usr/ccs/bin/ld -G -z text" AS_IF([test "$GCC" = yes], [ CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR},-R,${LIB_PGTCL_RUNTIME_DIR}' ], [ CC_SEARCH_FLAGS='-R${LIB_RUNTIME_DIR},-R,${LIB_PGTCL_RUNTIME_DIR}' ]) LD_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR} -R ${LIB_PGTCL_RUNTIME_DIR}' ], [ AS_IF([test "$GCC" = yes], [ SHLIB_LD='${CC} -shared -Wl,-bexpall' ], [ SHLIB_LD="/bin/ld -bhalt:4 -bM:SRE -bexpall -H512 -T512 -bnoentry" LDFLAGS="$LDFLAGS -brtl" ]) SHLIB_LD="${SHLIB_LD} ${SHLIB_LD_FLAGS}" CC_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR} -L{LIB_PGTCL_RUNTIME_DIR}' LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} ]) ;; BeOS*) SHLIB_CFLAGS="-fPIC" SHLIB_LD='${CC} -nostart' SHLIB_SUFFIX=".so" #----------------------------------------------------------- # Check for inet_ntoa in -lbind, for BeOS (which also needs # -lsocket, even if the network functions are in -lnet which # is always linked to, for compatibility. #----------------------------------------------------------- AC_CHECK_LIB(bind, inet_ntoa, [LIBS="$LIBS -lbind -lsocket"]) ;; BSD/OS-4.*) SHLIB_CFLAGS="-export-dynamic -fPIC" SHLIB_LD='${CC} -shared' SHLIB_SUFFIX=".so" LDFLAGS="$LDFLAGS -export-dynamic" CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" ;; CYGWIN_*) SHLIB_CFLAGS="" SHLIB_LD='${CC} -shared' SHLIB_LD_LIBS="${SHLIB_LD_LIBS} -Wl,--out-implib,\$[@].a" SHLIB_SUFFIX=".dll" EXEEXT=".exe" do64bit_ok=yes CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" ;; Haiku*) LDFLAGS="$LDFLAGS -Wl,--export-dynamic" SHLIB_CFLAGS="-fPIC" SHLIB_SUFFIX=".so" SHLIB_LD='${CC} -shared ${CFLAGS} ${LDFLAGS}' AC_CHECK_LIB(network, inet_ntoa, [LIBS="$LIBS -lnetwork"]) ;; HP-UX-*.11.*) # Use updated header definitions where possible AC_DEFINE(_XOPEN_SOURCE_EXTENDED, 1, [Do we want to use the XOPEN network library?]) # TEA specific: Needed by Tcl, but not most extensions #AC_DEFINE(_XOPEN_SOURCE, 1, [Do we want to use the XOPEN network library?]) #LIBS="$LIBS -lxnet" # Use the XOPEN network library AS_IF([test "`uname -m`" = ia64], [ SHLIB_SUFFIX=".so" # Use newer C++ library for C++ extensions #if test "$GCC" != "yes" ; then # CPPFLAGS="-AA" #fi ], [ SHLIB_SUFFIX=".sl" ]) AC_CHECK_LIB(dld, shl_load, tcl_ok=yes, tcl_ok=no) AS_IF([test "$tcl_ok" = yes], [ LDFLAGS="$LDFLAGS -Wl,-E" CC_SEARCH_FLAGS='-Wl,+s,+b,${LIB_RUNTIME_DIR}:${LIB_PGTCL_RUNTIME_DIR}:.' LD_SEARCH_FLAGS='+s +b ${LIB_RUNTIME_DIR}:${LIB_PGTCL_RUNTIME_DIR}:.' LD_LIBRARY_PATH_VAR="SHLIB_PATH" ]) AS_IF([test "$GCC" = yes], [ SHLIB_LD='${CC} -shared' LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} ], [ CFLAGS="$CFLAGS -z" # Users may want PA-RISC 1.1/2.0 portable code - needs HP cc #CFLAGS="$CFLAGS +DAportable" SHLIB_CFLAGS="+z" SHLIB_LD="ld -b" ]) # Check to enable 64-bit flags for compiler/linker AS_IF([test "$do64bit" = "yes"], [ AS_IF([test "$GCC" = yes], [ case `${CC} -dumpmachine` in hppa64*) # 64-bit gcc in use. Fix flags for GNU ld. do64bit_ok=yes SHLIB_LD='${CC} -shared' AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR},-rpath,${LIB_PGTCL_RUNTIME_DIR}']) LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} ;; *) AC_MSG_WARN([64bit mode not supported with GCC on $system]) ;; esac ], [ do64bit_ok=yes CFLAGS="$CFLAGS +DD64" LDFLAGS_ARCH="+DD64" ]) ]) ;; IRIX-6.*) SHLIB_CFLAGS="" SHLIB_LD="ld -n32 -shared -rdata_shared" SHLIB_SUFFIX=".so" AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR},-rpath,${LIB_PGTCL_RUNTIME_DIR}' LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR} -rpath ${LIB_PGTCL_RUNTIME_DIR}']) AS_IF([test "$GCC" = yes], [ CFLAGS="$CFLAGS -mabi=n32" LDFLAGS="$LDFLAGS -mabi=n32" ], [ case $system in IRIX-6.3) # Use to build 6.2 compatible binaries on 6.3. CFLAGS="$CFLAGS -n32 -D_OLD_TERMIOS" ;; *) CFLAGS="$CFLAGS -n32" ;; esac LDFLAGS="$LDFLAGS -n32" ]) ;; IRIX64-6.*) SHLIB_CFLAGS="" SHLIB_LD="ld -n32 -shared -rdata_shared" SHLIB_SUFFIX=".so" AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR},-rpath,${LIB_PGTCL_RUNTIME_DIR}' LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR} -rpath ${LIB_PGTCL_RUNTIME_DIR}']) # Check to enable 64-bit flags for compiler/linker AS_IF([test "$do64bit" = yes], [ AS_IF([test "$GCC" = yes], [ AC_MSG_WARN([64bit mode not supported by gcc]) ], [ do64bit_ok=yes SHLIB_LD="ld -64 -shared -rdata_shared" CFLAGS="$CFLAGS -64" LDFLAGS_ARCH="-64" ]) ]) ;; Linux*|GNU*|NetBSD-Debian) SHLIB_CFLAGS="-fPIC" SHLIB_SUFFIX=".so" # TEA specific: CFLAGS_OPTIMIZE="-O2 -fomit-frame-pointer" # TEA specific: use LDFLAGS_DEFAULT instead of LDFLAGS SHLIB_LD='${CC} -shared ${CFLAGS} ${LDFLAGS_DEFAULT}' LDFLAGS="$LDFLAGS -Wl,--export-dynamic" AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR},-rpath,${LIB_PGTCL_RUNTIME_DIR}']) LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} AS_IF([test "`uname -m`" = "alpha"], [CFLAGS="$CFLAGS -mieee"]) AS_IF([test $do64bit = yes], [ AC_CACHE_CHECK([if compiler accepts -m64 flag], tcl_cv_cc_m64, [ hold_cflags=$CFLAGS CFLAGS="$CFLAGS -m64" AC_TRY_LINK(,, tcl_cv_cc_m64=yes, tcl_cv_cc_m64=no) CFLAGS=$hold_cflags]) AS_IF([test $tcl_cv_cc_m64 = yes], [ CFLAGS="$CFLAGS -m64" do64bit_ok=yes ]) ]) # The combo of gcc + glibc has a bug related to inlining of # functions like strtod(). The -fno-builtin flag should address # this problem but it does not work. The -fno-inline flag is kind # of overkill but it works. Disable inlining only when one of the # files in compat/*.c is being linked in. AS_IF([test x"${USE_COMPAT}" != x],[CFLAGS="$CFLAGS -fno-inline"]) ;; Lynx*) SHLIB_CFLAGS="-fPIC" SHLIB_SUFFIX=".so" CFLAGS_OPTIMIZE=-02 SHLIB_LD='${CC} -shared' LD_FLAGS="-Wl,--export-dynamic" AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR},-rpath,${LIB_PGTCL_RUNTIME_DIR}' LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR},-rpath,${LIB_PGTCL_RUNTIME_DIR}']) ;; OpenBSD-*) arch=`arch -s` case "$arch" in vax) SHLIB_SUFFIX="" SHARED_LIB_SUFFIX="" LDFLAGS="" ;; *) case "$arch" in alpha|sparc64) SHLIB_CFLAGS="-fPIC" ;; *) SHLIB_CFLAGS="-fpic" ;; esac SHLIB_LD='${CC} -shared ${SHLIB_CFLAGS}' SHLIB_SUFFIX=".so" AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR},-rpath,${LIB_PGTCL_RUNTIME_DIR}']) LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.so${SHLIB_VERSION}' LDFLAGS="-Wl,-export-dynamic" ;; esac case "$arch" in vax) CFLAGS_OPTIMIZE="-O1" ;; *) CFLAGS_OPTIMIZE="-O2" ;; esac AS_IF([test "${TCL_THREADS}" = "1"], [ # On OpenBSD: Compile with -pthread # Don't link with -lpthread LIBS=`echo $LIBS | sed s/-lpthread//` CFLAGS="$CFLAGS -pthread" ]) # OpenBSD doesn't do version numbers with dots. UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a' TCL_LIB_VERSIONS_OK=nodots ;; NetBSD-*) # NetBSD has ELF and can use 'cc -shared' to build shared libs SHLIB_CFLAGS="-fPIC" SHLIB_LD='${CC} -shared ${SHLIB_CFLAGS}' SHLIB_SUFFIX=".so" LDFLAGS="$LDFLAGS -export-dynamic" AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR},-rpath,${LIB_PGTCL_RUNTIME_DIR}']) LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} AS_IF([test "${TCL_THREADS}" = "1"], [ # The -pthread needs to go in the CFLAGS, not LIBS LIBS=`echo $LIBS | sed s/-pthread//` CFLAGS="$CFLAGS -pthread" LDFLAGS="$LDFLAGS -pthread" ]) ;; FreeBSD-*) # This configuration from FreeBSD Ports. SHLIB_CFLAGS="-fPIC" SHLIB_LD="${CC} -shared" SHLIB_LD_LIBS="${SHLIB_LD_LIBS} -Wl,-soname,\$[@]" SHLIB_SUFFIX=".so" LDFLAGS="" AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR},-rpath,${LIB_PGTCL_RUNTIME_DIR}' LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR},-rpath,${LIB_PGTCL_RUNTIME_DIR}']) AS_IF([test "${TCL_THREADS}" = "1"], [ # The -pthread needs to go in the LDFLAGS, not LIBS LIBS=`echo $LIBS | sed s/-pthread//` CFLAGS="$CFLAGS $PTHREAD_CFLAGS" LDFLAGS="$LDFLAGS $PTHREAD_LIBS"]) case $system in FreeBSD-3.*) # Version numbers are dot-stripped by system policy. TCL_TRIM_DOTS=`echo ${PACKAGE_VERSION} | tr -d .` UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a' SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}\$\{DBGX\}.so.1' TCL_LIB_VERSIONS_OK=nodots ;; esac ;; Darwin-*) CFLAGS_OPTIMIZE="-Os" SHLIB_CFLAGS="-fno-common" PATCH_NAME="patch_name" # To avoid discrepancies between what headers configure sees during # preprocessing tests and compiling tests, move any -isysroot and # -mmacosx-version-min flags from CFLAGS to CPPFLAGS: CPPFLAGS="${CPPFLAGS} `echo " ${CFLAGS}" | \ awk 'BEGIN {FS=" +-";ORS=" "}; {for (i=2;i<=NF;i++) \ if ([$]i~/^(isysroot|mmacosx-version-min)/) print "-"[$]i}'`" CFLAGS="`echo " ${CFLAGS}" | \ awk 'BEGIN {FS=" +-";ORS=" "}; {for (i=2;i<=NF;i++) \ if (!([$]i~/^(isysroot|mmacosx-version-min)/)) print "-"[$]i}'`" AS_IF([test $do64bit = yes], [ case `arch` in ppc) AC_CACHE_CHECK([if compiler accepts -arch ppc64 flag], tcl_cv_cc_arch_ppc64, [ hold_cflags=$CFLAGS CFLAGS="$CFLAGS -arch ppc64 -mpowerpc64 -mcpu=G5" AC_TRY_LINK(,, tcl_cv_cc_arch_ppc64=yes, tcl_cv_cc_arch_ppc64=no) CFLAGS=$hold_cflags]) AS_IF([test $tcl_cv_cc_arch_ppc64 = yes], [ CFLAGS="$CFLAGS -arch ppc64 -mpowerpc64 -mcpu=G5" do64bit_ok=yes ]);; i386) AC_CACHE_CHECK([if compiler accepts -arch x86_64 flag], tcl_cv_cc_arch_x86_64, [ hold_cflags=$CFLAGS CFLAGS="$CFLAGS -arch x86_64" AC_TRY_LINK(,, tcl_cv_cc_arch_x86_64=yes, tcl_cv_cc_arch_x86_64=no) CFLAGS=$hold_cflags]) AS_IF([test $tcl_cv_cc_arch_x86_64 = yes], [ CFLAGS="$CFLAGS -arch x86_64" do64bit_ok=yes ]);; *) AC_MSG_WARN([Don't know how enable 64-bit on architecture `arch`]);; esac ], [ # Check for combined 32-bit and 64-bit fat build AS_IF([echo "$CFLAGS " |grep -E -q -- '-arch (ppc64|x86_64) ' \ && echo "$CFLAGS " |grep -E -q -- '-arch (ppc|i386) '], [ fat_32_64=yes]) ]) # TEA specific: use LDFLAGS_DEFAULT instead of LDFLAGS SHLIB_LD='${CC} -dynamiclib ${CFLAGS} ${LDFLAGS_DEFAULT}' AC_CACHE_CHECK([if ld accepts -single_module flag], tcl_cv_ld_single_module, [ hold_ldflags=$LDFLAGS LDFLAGS="$LDFLAGS -dynamiclib -Wl,-single_module" AC_TRY_LINK(, [int i;], tcl_cv_ld_single_module=yes, tcl_cv_ld_single_module=no) LDFLAGS=$hold_ldflags]) AS_IF([test $tcl_cv_ld_single_module = yes], [ SHLIB_LD="${SHLIB_LD} -Wl,-single_module" ]) # TEA specific: link shlib with current and compatibility version flags vers=`echo ${PACKAGE_VERSION} | sed -e 's/^\([[0-9]]\{1,5\}\)\(\(\.[[0-9]]\{1,3\}\)\{0,2\}\).*$/\1\2/p' -e d` SHLIB_LD="${SHLIB_LD} -current_version ${vers:-0} -compatibility_version ${vers:-0}" SHLIB_SUFFIX=".dylib" # Don't use -prebind when building for Mac OS X 10.4 or later only: AS_IF([test "`echo "${MACOSX_DEPLOYMENT_TARGET}" | awk -F '10\\.' '{print int([$]2)}'`" -lt 4 -a \ "`echo "${CPPFLAGS}" | awk -F '-mmacosx-version-min=10\\.' '{print int([$]2)}'`" -lt 4], [ LDFLAGS="$LDFLAGS -prebind"]) LDFLAGS="$LDFLAGS -headerpad_max_install_names" AC_CACHE_CHECK([if ld accepts -search_paths_first flag], tcl_cv_ld_search_paths_first, [ hold_ldflags=$LDFLAGS LDFLAGS="$LDFLAGS -Wl,-search_paths_first" AC_TRY_LINK(, [int i;], tcl_cv_ld_search_paths_first=yes, tcl_cv_ld_search_paths_first=no) LDFLAGS=$hold_ldflags]) AS_IF([test $tcl_cv_ld_search_paths_first = yes], [ LDFLAGS="$LDFLAGS -Wl,-search_paths_first" ]) AS_IF([test "$tcl_cv_cc_visibility_hidden" != yes], [ AC_DEFINE(MODULE_SCOPE, [__private_extern__], [Compiler support for module scope symbols]) tcl_cv_cc_visibility_hidden=yes ]) CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" LD_LIBRARY_PATH_VAR="DYLD_LIBRARY_PATH" # TEA specific: for combined 32 & 64 bit fat builds of Tk # extensions, verify that 64-bit build is possible. AS_IF([test "$fat_32_64" = yes && test -n "${TK_BIN_DIR}"], [ AS_IF([test "${TEA_WINDOWINGSYSTEM}" = x11], [ AC_CACHE_CHECK([for 64-bit X11], tcl_cv_lib_x11_64, [ for v in CFLAGS CPPFLAGS LDFLAGS; do eval 'hold_'$v'="$'$v'";'$v'="`echo "$'$v' "|sed -e "s/-arch ppc / /g" -e "s/-arch i386 / /g"`"' done CPPFLAGS="$CPPFLAGS -I/usr/X11R6/include" LDFLAGS="$LDFLAGS -L/usr/X11R6/lib -lX11" AC_TRY_LINK([#include ], [XrmInitialize();], tcl_cv_lib_x11_64=yes, tcl_cv_lib_x11_64=no) for v in CFLAGS CPPFLAGS LDFLAGS; do eval $v'="$hold_'$v'"' done]) ]) AS_IF([test "${TEA_WINDOWINGSYSTEM}" = aqua], [ AC_CACHE_CHECK([for 64-bit Tk], tcl_cv_lib_tk_64, [ for v in CFLAGS CPPFLAGS LDFLAGS; do eval 'hold_'$v'="$'$v'";'$v'="`echo "$'$v' "|sed -e "s/-arch ppc / /g" -e "s/-arch i386 / /g"`"' done CPPFLAGS="$CPPFLAGS -DUSE_TCL_STUBS=1 -DUSE_TK_STUBS=1 ${TCL_INCLUDES} ${TK_INCLUDES}" LDFLAGS="$LDFLAGS ${TCL_STUB_LIB_SPEC} ${TK_STUB_LIB_SPEC}" AC_TRY_LINK([#include ], [Tk_InitStubs(NULL, "", 0);], tcl_cv_lib_tk_64=yes, tcl_cv_lib_tk_64=no) for v in CFLAGS CPPFLAGS LDFLAGS; do eval $v'="$hold_'$v'"' done]) ]) # remove 64-bit arch flags from CFLAGS et al. if configuration # does not support 64-bit. AS_IF([test "$tcl_cv_lib_tk_64" = no -o "$tcl_cv_lib_x11_64" = no], [ AC_MSG_NOTICE([Removing 64-bit architectures from compiler & linker flags]) for v in CFLAGS CPPFLAGS LDFLAGS; do eval $v'="`echo "$'$v' "|sed -e "s/-arch ppc64 / /g" -e "s/-arch x86_64 / /g"`"' done]) ]) ;; OS/390-*) CFLAGS_OPTIMIZE="" # Optimizer is buggy AC_DEFINE(_OE_SOCKETS, 1, # needed in sys/socket.h [Should OS/390 do the right thing with sockets?]) ;; OSF1-V*) # Digital OSF/1 SHLIB_CFLAGS="" AS_IF([test "$SHARED_BUILD" = 1], [ SHLIB_LD='ld -shared -expect_unresolved "*"' ], [ SHLIB_LD='ld -non_shared -expect_unresolved "*"' ]) SHLIB_SUFFIX=".so" AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR},-rpath,${LIB_PGTCL_RUNTIME_DIR}' LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR} -rpath ${LIB_PGTCL_RUNTIME_DIR}']) AS_IF([test "$GCC" = yes], [CFLAGS="$CFLAGS -mieee"], [ CFLAGS="$CFLAGS -DHAVE_TZSET -std1 -ieee"]) # see pthread_intro(3) for pthread support on osf1, k.furukawa AS_IF([test "${TCL_THREADS}" = 1], [ CFLAGS="$CFLAGS -DHAVE_PTHREAD_ATTR_SETSTACKSIZE" CFLAGS="$CFLAGS -DTCL_THREAD_STACK_MIN=PTHREAD_STACK_MIN*64" LIBS=`echo $LIBS | sed s/-lpthreads//` AS_IF([test "$GCC" = yes], [ LIBS="$LIBS -lpthread -lmach -lexc" ], [ CFLAGS="$CFLAGS -pthread" LDFLAGS="$LDFLAGS -pthread" ]) ]) ;; QNX-6*) # QNX RTP # This may work for all QNX, but it was only reported for v6. SHLIB_CFLAGS="-fPIC" SHLIB_LD="ld -Bshareable -x" SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" ;; SCO_SV-3.2*) AS_IF([test "$GCC" = yes], [ SHLIB_CFLAGS="-fPIC -melf" LDFLAGS="$LDFLAGS -melf -Wl,-Bexport" ], [ SHLIB_CFLAGS="-Kpic -belf" LDFLAGS="$LDFLAGS -belf -Wl,-Bexport" ]) SHLIB_LD="ld -G" SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" ;; SunOS-5.[[0-6]]) # Careful to not let 5.10+ fall into this case # Note: If _REENTRANT isn't defined, then Solaris # won't define thread-safe library routines. AC_DEFINE(_REENTRANT, 1, [Do we want the reentrant OS API?]) AC_DEFINE(_POSIX_PTHREAD_SEMANTICS, 1, [Do we really want to follow the standard? Yes we do!]) SHLIB_CFLAGS="-KPIC" SHLIB_SUFFIX=".so" AS_IF([test "$GCC" = yes], [ SHLIB_LD='${CC} -shared' CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR},-R,${LIB_PGTCL_RUNTIME_DIR}' LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} ], [ SHLIB_LD="/usr/ccs/bin/ld -G -z text" CC_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR} -R ${LIB_PGTCL_RUNTIME_DIR}' LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} ]) ;; SunOS-5*) # Note: If _REENTRANT isn't defined, then Solaris # won't define thread-safe library routines. AC_DEFINE(_REENTRANT, 1, [Do we want the reentrant OS API?]) AC_DEFINE(_POSIX_PTHREAD_SEMANTICS, 1, [Do we really want to follow the standard? Yes we do!]) SHLIB_CFLAGS="-KPIC" # Check to enable 64-bit flags for compiler/linker AS_IF([test "$do64bit" = yes], [ arch=`isainfo` AS_IF([test "$arch" = "sparcv9 sparc"], [ AS_IF([test "$GCC" = yes], [ AS_IF([test "`${CC} -dumpversion | awk -F. '{print [$]1}'`" -lt 3], [ AC_MSG_WARN([64bit mode not supported with GCC < 3.2 on $system]) ], [ do64bit_ok=yes CFLAGS="$CFLAGS -m64 -mcpu=v9" LDFLAGS="$LDFLAGS -m64 -mcpu=v9" SHLIB_CFLAGS="-fPIC" ]) ], [ do64bit_ok=yes AS_IF([test "$do64bitVIS" = yes], [ CFLAGS="$CFLAGS -xarch=v9a" LDFLAGS_ARCH="-xarch=v9a" ], [ CFLAGS="$CFLAGS -xarch=v9" LDFLAGS_ARCH="-xarch=v9" ]) # Solaris 64 uses this as well #LD_LIBRARY_PATH_VAR="LD_LIBRARY_PATH_64" ]) ], [AS_IF([test "$arch" = "amd64 i386"], [ AS_IF([test "$GCC" = yes], [ case $system in SunOS-5.1[[1-9]]*|SunOS-5.[[2-9]][[0-9]]*) do64bit_ok=yes CFLAGS="$CFLAGS -m64" LDFLAGS="$LDFLAGS -m64";; *) AC_MSG_WARN([64bit mode not supported with GCC on $system]);; esac ], [ do64bit_ok=yes case $system in SunOS-5.1[[1-9]]*|SunOS-5.[[2-9]][[0-9]]*) CFLAGS="$CFLAGS -m64" LDFLAGS="$LDFLAGS -m64";; *) CFLAGS="$CFLAGS -xarch=amd64" LDFLAGS="$LDFLAGS -xarch=amd64";; esac ]) ], [AC_MSG_WARN([64bit mode not supported for $arch])])]) ]) SHLIB_SUFFIX=".so" AS_IF([test "$GCC" = yes], [ SHLIB_LD='${CC} -shared' CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR},-R,${LIB_PGTCL_RUNTIME_DIR}' LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} AS_IF([test "$do64bit_ok" = yes], [ AS_IF([test "$arch" = "sparcv9 sparc"], [ # We need to specify -static-libgcc or we need to # add the path to the sparv9 libgcc. # JH: static-libgcc is necessary for core Tcl, but may # not be necessary for extensions. SHLIB_LD="$SHLIB_LD -m64 -mcpu=v9 -static-libgcc" # for finding sparcv9 libgcc, get the regular libgcc # path, remove so name and append 'sparcv9' #v9gcclibdir="`gcc -print-file-name=libgcc_s.so` | ..." #CC_SEARCH_FLAGS="${CC_SEARCH_FLAGS},-R,$v9gcclibdir" ], [AS_IF([test "$arch" = "amd64 i386"], [ # JH: static-libgcc is necessary for core Tcl, but may # not be necessary for extensions. SHLIB_LD="$SHLIB_LD -m64 -static-libgcc" ])]) ]) ], [ case $system in SunOS-5.[[1-9]][[0-9]]*) # TEA specific: use LDFLAGS_DEFAULT instead of LDFLAGS SHLIB_LD='${CC} -G -z text ${LDFLAGS_DEFAULT}';; *) SHLIB_LD='/usr/ccs/bin/ld -G -z text';; esac CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR},-R,${LIB_PGTCL_RUNTIME_DIR}' LD_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR} -R ${LIB_PGTCL_RUNTIME_DIR}' ]) ;; UNIX_SV* | UnixWare-5*) SHLIB_CFLAGS="-KPIC" SHLIB_LD='${CC} -G' SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" # Some UNIX_SV* systems (unixware 1.1.2 for example) have linkers # that don't grok the -Bexport option. Test that it does. AC_CACHE_CHECK([for ld accepts -Bexport flag], tcl_cv_ld_Bexport, [ hold_ldflags=$LDFLAGS LDFLAGS="$LDFLAGS -Wl,-Bexport" AC_TRY_LINK(, [int i;], tcl_cv_ld_Bexport=yes, tcl_cv_ld_Bexport=no) LDFLAGS=$hold_ldflags]) AS_IF([test $tcl_cv_ld_Bexport = yes], [ LDFLAGS="$LDFLAGS -Wl,-Bexport" ]) CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" ;; esac AS_IF([test "$do64bit" = yes -a "$do64bit_ok" = no], [ AC_MSG_WARN([64bit support being disabled -- don't know magic for this platform]) ]) dnl # Add any CPPFLAGS set in the environment to our CFLAGS, but delay doing so dnl # until the end of configure, as configure's compile and link tests use dnl # both CPPFLAGS and CFLAGS (unlike our compile and link) but configure's dnl # preprocessing tests use only CPPFLAGS. AC_CONFIG_COMMANDS_PRE([CFLAGS="${CFLAGS} ${CPPFLAGS}"; CPPFLAGS=""]) # Add in the arch flags late to ensure it wasn't removed. # Not necessary in TEA, but this is aligned with core LDFLAGS="$LDFLAGS $LDFLAGS_ARCH" # If we're running gcc, then change the C flags for compiling shared # libraries to the right flags for gcc, instead of those for the # standard manufacturer compiler. AS_IF([test "$GCC" = yes], [ case $system in AIX-*) ;; BSD/OS*) ;; CYGWIN_*|MINGW32_*) ;; IRIX*) ;; NetBSD-*|FreeBSD-*|OpenBSD-*) ;; Darwin-*) ;; SCO_SV-3.2*) ;; windows) ;; *) SHLIB_CFLAGS="-fPIC" ;; esac]) AS_IF([test "$tcl_cv_cc_visibility_hidden" != yes], [ AC_DEFINE(MODULE_SCOPE, [extern], [No Compiler support for module scope symbols]) ]) AS_IF([test "$SHARED_LIB_SUFFIX" = ""], [ # TEA specific: use PACKAGE_VERSION instead of VERSION SHARED_LIB_SUFFIX='${PACKAGE_VERSION}${SHLIB_SUFFIX}']) AS_IF([test "$UNSHARED_LIB_SUFFIX" = ""], [ # TEA specific: use PACKAGE_VERSION instead of VERSION UNSHARED_LIB_SUFFIX='${PACKAGE_VERSION}.a']) if test "${GCC}" = "yes" -a ${SHLIB_SUFFIX} = ".dll"; then AC_CACHE_CHECK(for SEH support in compiler, tcl_cv_seh, AC_TRY_RUN([ #define WIN32_LEAN_AND_MEAN #include #undef WIN32_LEAN_AND_MEAN int main(int argc, char** argv) { int a, b = 0; __try { a = 666 / b; } __except (EXCEPTION_EXECUTE_HANDLER) { return 0; } return 1; } ], tcl_cv_seh=yes, tcl_cv_seh=no, tcl_cv_seh=no) ) if test "$tcl_cv_seh" = "no" ; then AC_DEFINE(HAVE_NO_SEH, 1, [Defined when mingw does not support SEH]) fi # # Check to see if the excpt.h include file provided contains the # definition for EXCEPTION_DISPOSITION; if not, which is the case # with Cygwin's version as of 2002-04-10, define it to be int, # sufficient for getting the current code to work. # AC_CACHE_CHECK(for EXCEPTION_DISPOSITION support in include files, tcl_cv_eh_disposition, AC_TRY_COMPILE([ # define WIN32_LEAN_AND_MEAN # include # undef WIN32_LEAN_AND_MEAN ],[ EXCEPTION_DISPOSITION x; ], tcl_cv_eh_disposition=yes, tcl_cv_eh_disposition=no) ) if test "$tcl_cv_eh_disposition" = "no" ; then AC_DEFINE(EXCEPTION_DISPOSITION, int, [Defined when cygwin/mingw does not support EXCEPTION DISPOSITION]) fi # Check to see if winnt.h defines CHAR, SHORT, and LONG # even if VOID has already been #defined. The win32api # used by mingw and cygwin is known to do this. AC_CACHE_CHECK(for winnt.h that ignores VOID define, tcl_cv_winnt_ignore_void, AC_TRY_COMPILE([ #define VOID void #define WIN32_LEAN_AND_MEAN #include #undef WIN32_LEAN_AND_MEAN ], [ CHAR c; SHORT s; LONG l; ], tcl_cv_winnt_ignore_void=yes, tcl_cv_winnt_ignore_void=no) ) if test "$tcl_cv_winnt_ignore_void" = "yes" ; then AC_DEFINE(HAVE_WINNT_IGNORE_VOID, 1, [Defined when cygwin/mingw ignores VOID define in winnt.h]) fi fi # See if the compiler supports casting to a union type. # This is used to stop gcc from printing a compiler # warning when initializing a union member. AC_CACHE_CHECK(for cast to union support, tcl_cv_cast_to_union, AC_TRY_COMPILE([], [ union foo { int i; double d; }; union foo f = (union foo) (int) 0; ], tcl_cv_cast_to_union=yes, tcl_cv_cast_to_union=no) ) if test "$tcl_cv_cast_to_union" = "yes"; then AC_DEFINE(HAVE_CAST_TO_UNION, 1, [Defined when compiler supports casting to union type.]) fi AC_SUBST(CFLAGS_DEBUG) AC_SUBST(CFLAGS_OPTIMIZE) AC_SUBST(CFLAGS_WARNING) AC_SUBST(STLIB_LD) AC_SUBST(SHLIB_LD) AC_SUBST(SHLIB_LD_LIBS) AC_SUBST(SHLIB_CFLAGS) AC_SUBST(LD_LIBRARY_PATH_VAR) AC_SUBST(PATCH_NAME) # These must be called after we do the basic CFLAGS checks and # verify any possible 64-bit or similar switches are necessary TEA_TCL_EARLY_FLAGS TEA_TCL_64BIT_FLAGS ]) # Local Variables: # mode: autoconf # End: pgtcl-2.8.0/configure.in000077500000000000000000000250751420313073400151540ustar00rootroot00000000000000#!/bin/bash -norc dnl This file is an input file used by the GNU "autoconf" program to dnl generate the file "configure", which is run during Tcl installation dnl to configure the system for the local environment. # # RCS: @(#) $Id$ #----------------------------------------------------------------------- # Sample configure.in for Tcl Extensions. The only places you should # need to modify this file are marked by the string __CHANGE__ #----------------------------------------------------------------------- #----------------------------------------------------------------------- # __CHANGE__ # Set your package name and version numbers here. # # This initializes the environment with PACKAGE_NAME and PACKAGE_VERSION # set as provided. These will also be added as -D defs in your Makefile # so you can encode the package version directly into the source files. #----------------------------------------------------------------------- AC_INIT([pgtcl], [2.7.7]) #----- # Version with patch stripped #----- AC_SUBST(PKG_MAJ_MIN,`expr $PACKAGE_VERSION : '\(.*\)\..*'`) #-------------------------------------------------------------------- # Call TEA_INIT as the first TEA_ macro to set up initial vars. # This will define a ${TEA_PLATFORM} variable == "unix" or "windows" # as well as PKG_LIB_FILE and PKG_STUB_LIB_FILE. #-------------------------------------------------------------------- TEA_INIT([3.9]) AC_CONFIG_AUX_DIR(tclconfig) #-------------------------------------------------------------------- # Load the tclConfig.sh file #-------------------------------------------------------------------- TEA_PATH_TCLCONFIG TEA_LOAD_TCLCONFIG #-------------------------------------------------------------------- # Load the tkConfig.sh file if necessary (Tk extension) #-------------------------------------------------------------------- #TEA_PATH_TKCONFIG #TEA_LOAD_TKCONFIG #----------------------------------------------------------------------- # Handle the --prefix=... option by defaulting to what Tcl gave. # Must be called after TEA_LOAD_TCLCONFIG and before TEA_SETUP_COMPILER. #----------------------------------------------------------------------- TEA_PREFIX #----------------------------------------------------------------------- # Standard compiler checks. # This sets up CC by using the CC env var, or looks for gcc otherwise. # This also calls AC_PROG_CC, AC_PROG_INSTALL and a few others to create # the basic setup necessary to compile executables. #----------------------------------------------------------------------- TEA_SETUP_COMPILER #-------------------------------------------------------------------- # Get the paths to the Postgres includes and libraries. #-------------------------------------------------------------------- AC_ARG_WITH(postgres-include, --with-postgres-include directory containing PostgreSQL include files) AC_ARG_WITH(postgres-lib, --with-postgres-lib directory containing PostgreSQL library files) need_pg_config="" if test "${with_postgres_include+set}" = "set"; then PG_INC_DIR="${with_postgres_include}" AC_MSG_RESULT([using PostgreSQL include dir of... "$PG_INC_DIR"]) else need_pg_config="1" fi if test "${with_postgres_lib+set}" = "set"; then PG_LIB_DIR="${with_postgres_lib}" AC_MSG_RESULT([using PostgreSQL lib dir of... "$PG_LIB_DIR"]) else need_pg_config="1" fi if test "$need_pg_config" = "1"; then AC_PATH_PROGS(PG_CONFIG, pg_config) if test "$PG_CONFIG" = ""; then AC_MSG_ERROR([Cannot locate program pg_config to determine PostgreSQL paths. Make sure pg_config is in PATH or set PG_CONFIG env var to path to pg_config.]) fi if test "${with_postgres_include+set}" != "set"; then PG_INC_DIR="`$PG_CONFIG --includedir`" AC_MSG_RESULT([using pg_config-reported PostgreSQL include dir of... "$PG_INC_DIR"]) fi if test "${with_postgres_lib+set}" != "set"; then PG_LIB_DIR="`$PG_CONFIG --libdir`" AC_MSG_RESULT([using pg_config-reported PostgreSQL lib dir of... "$PG_LIB_DIR"]) fi fi LIBPG="" PG_INCLUDES="-I$PG_INC_DIR" PKG_INCLUDES="-I$PG_INC_DIR" PG_LIBS="-L$PG_LIB_DIR -lpq" PKG_LIBS="-L$PG_LIB_DIR -lpq" if test ! "$PG_LIB_DIR" = ""; then LIBPG="libpq${SHLIB_SUFFIX}" fi #-------------------------------------------------------------------- # Determine if certain PostgreSQL functions are defined # (Postgres 7.4 and above) #-------------------------------------------------------------------- SAVE_LIBS=$LIBS LIBS="$PG_LIBS $LIBS $TCL_LIB_SPEC" AC_CHECK_FUNCS(PQsetSingleRowMode) LIBS=$SAVE_LIBS AC_SUBST(LIBPG) AC_SUBST(PG_INC_DIR) AC_SUBST(PG_INCLUDES) AC_SUBST(PG_LIBS) AC_SUBST(PG_LIB_DIR) #----------------------------------------------------------------------- # __CHANGE__ # Specify the C source files to compile in TEA_ADD_SOURCES, # public headers that need to be installed in TEA_ADD_HEADERS, # stub library C source files to compile in TEA_ADD_STUB_SOURCES, # and runtime Tcl library files in TEA_ADD_TCL_SOURCES. # This defines PKG(_STUB)_SOURCES, PKG(_STUB)_OBJECTS, PKG_HEADERS # and PKG_TCL_SOURCES. #----------------------------------------------------------------------- TEA_ADD_SOURCES([pgtcl.c pgtclCmds.c pgtclId.c tokenize.c]) TEA_ADD_HEADERS([generic/pgtclId.h]) TEA_ADD_INCLUDES([]) TEA_ADD_LIBS([]) TEA_ADD_CFLAGS([]) TEA_ADD_STUB_SOURCES([]) TEA_ADD_TCL_SOURCES([postgres-helpers.tcl]) #-------------------------------------------------------------------- # SQLITE option #-------------------------------------------------------------------- AC_ARG_WITH([sqlite3], [AS_HELP_STRING([--with-sqlite3],[Include pg_sqlite function @<:@default=check@:>@])], [], [with_sqlite3=check]) AS_IF([test "x$with_sqlite3" != "xno"], [AC_CHECK_LIB([sqlite3], [main], [TEA_ADD_LIBS([-lsqlite3]) TEA_ADD_SOURCES([pgtclSqlite.c]) AC_DEFINE([HAVE_SQLITE3], [1], [Define if you have sqlite3]) ], [if test "x$with_sqlite3" != "xcheck"; then AC_MSG_FAILURE([--with-sqlite3 was given, but test for sqlite3 failed]) fi ], [])]) #-------------------------------------------------------------------- # __CHANGE__ # A few miscellaneous platform-specific items: # # Define a special symbol for Windows (BUILD_sample in this case) so # that we create the export library with the dll. # # Windows creates a few extra files that need to be cleaned up. # You can add more files to clean if your extension creates any extra # files. # # TEA_ADD_* any platform specific compiler/build info here. #-------------------------------------------------------------------- #CLEANFILES="pkgIndex.tcl" if test "${TEA_PLATFORM}" = "windows" ; then AC_DEFINE(BUILD_libpgtcl, 1, [Build windows export dll]) CLEANFILES="$CLEANFILES *.lib *.dll *.exp *.ilk *.pdb vc*.pch" #TEA_ADD_SOURCES([win/winFile.c]) #TEA_ADD_INCLUDES([-I\"$(${CYGPATH} ${srcdir}/win)\"]) else # Ensure no empty else clauses : #TEA_ADD_SOURCES([unix/unixFile.c]) #TEA_ADD_LIBS([-lsuperfly]) fi AC_SUBST(CLEANFILES) #-------------------------------------------------------------------- # __CHANGE__ # Choose which headers you need. Extension authors should try very # hard to only rely on the Tcl public header files. Internal headers # contain private data structures and are subject to change without # notice. # This MUST be called after TEA_LOAD_TCLCONFIG / TEA_LOAD_TKCONFIG #-------------------------------------------------------------------- TEA_PUBLIC_TCL_HEADERS #TEA_PRIVATE_TCL_HEADERS #TEA_PUBLIC_TK_HEADERS #TEA_PRIVATE_TK_HEADERS #TEA_PATH_X #-------------------------------------------------------------------- # Check whether --enable-threads or --disable-threads was given. # This auto-enables if Tcl was compiled threaded. #-------------------------------------------------------------------- TEA_ENABLE_THREADS #-------------------------------------------------------------------- # The statement below defines a collection of symbols related to # building as a shared library instead of a static library. #-------------------------------------------------------------------- TEA_ENABLE_SHARED #-------------------------------------------------------------------- # This macro figures out what flags to use with the compiler/linker # when building shared/static debug/optimized objects. This information # can be taken from the tclConfig.sh file, but this figures it all out. #-------------------------------------------------------------------- # NOTE - WE HAVE A SPECIFAL VERSION OF TEA_CONFIG_CFLAGS that includes # paths to the postgres libraries alongside the Tcl libraries. # see aclocal.m4 # This now gets included by TEA_ENABLE_SYMBOLS below, so don't include # anything here. Leaving this comment here so the next person to try and # figure out what happened in 2.0 won't go down the rabbit hole. #-------------------------------------------------------------------- # Set the default compiler switches based on the --enable-symbols option. #-------------------------------------------------------------------- TEA_ENABLE_SYMBOLS #-------------------------------------------------------------------- # Everyone should be linking against the Tcl stub library. If you # can't for some reason, remove this definition. If you aren't using # stubs, you also need to modify the SHLIB_LD_LIBS setting below to # link against the non-stubbed Tcl library. Add Tk too if necessary. #-------------------------------------------------------------------- AC_DEFINE(USE_TCL_STUBS, 1, [Use Tcl stubs]) #AC_DEFINE(USE_TK_STUBS, 1, [Use Tk stubs]) #-------------------------------------------------------------------- # This macro generates a line to use when building a library. It # depends on values set by the TEA_ENABLE_SHARED, TEA_ENABLE_SYMBOLS, # and TEA_LOAD_TCLCONFIG macros above. #-------------------------------------------------------------------- TEA_MAKE_LIB #-------------------------------------------------------------------- # Determine the name of the tclsh and/or wish executables in the # Tcl and Tk build directories or the location they were installed # into. These paths are used to support running test cases only, # the Makefile should not be making use of these paths to generate # a pkgIndex.tcl file or anything else at extension build time. #-------------------------------------------------------------------- TEA_PROG_TCLSH #TEA_PROG_WISH #-------------------------------------------------------------------- # Finally, substitute all of the various values into the Makefile. # You may alternatively have a special pkgIndex.tcl.in or other files # which require substituting th AC variables in. Include these here. #-------------------------------------------------------------------- AC_OUTPUT([Makefile pkgIndex.tcl]) pgtcl-2.8.0/doc/000077500000000000000000000000001420313073400133745ustar00rootroot00000000000000pgtcl-2.8.0/doc/Dockerfile000066400000000000000000000002651420313073400153710ustar00rootroot00000000000000FROM debian:stable-slim RUN apt-get update -qq && \ apt install -y docbook-utils ghostscript make patch ed docbook-xsl tidy docbook5-xml RUN mkdir /root/doc WORKDIR /root/doc pgtcl-2.8.0/doc/Makefile000066400000000000000000000031451420313073400150370ustar00rootroot00000000000000# # Makefile for making html and pdf documentation (etc) of the libpgtcl # interface. # # This requires all that complicated docbook sgml stuff, plus tex if you # want to generate postscript or pdf. You need at least # openjade and pdfjadetex to run it, plus all the stuff they need. # # There is a lot of useful information on # # http://www.postgresql.org/docs/7.3/static/doc-toolsets.html # # The man page generation requires docbook2X # # http://docbook2x.sourceforge.net/ # STYLESHEET=stylesheet.dsl SGMLSOURCE=libpgtcl.sgml all: html man pdf .PHONY: html man pdf clean html: html/HTML.index html/HTML.index: $(SGMLSOURCE) -rm -rf html -mkdir html cd html && docbook2html -s /usr/share/xml/docbook/schema -i output-html -d ../$(STYLESHEET) ../$(SGMLSOURCE) -find html/ -type f -name "*.html" -exec tidy -quiet -wrap 2000 -modify \{\} \; sh ./clean-html.sh html/* man: $(SGMLSOURCE) -rm -rf man -mkdir man cp $(SGMLSOURCE) man/$(SGMLSOURCE) cd man && docbook2man -V default-manpage-section=n $(SGMLSOURCE) rm man/$(SGMLSOURCE)* find man -name \*\. -exec mv {} {}n \; sh ./fix-fi.sh man/* sh ./clean-man.sh man/* # Install Debian packages docbook-utils and ghostscript pdf: libpgtcl.pdf libpgtcl.pdf: $(SGMLSOURCE) rm -f libpgtcl.ps libpgtcl.pdf docbook2ps -V default-manpage-section=n $(SGMLSOURCE) ps2pdf libpgtcl.ps clean: rm -rf man html libpgtcl.aux libpgtcl.log libpgtcl.out libpgtcl.tex-pdf libpgtcl.fot all-man-docker: mkdir -p docker-context cd docker-context && docker build -t pgtcl-doc -f ../Dockerfile . docker run --rm -it -v $$PWD:/root/doc pgtcl-doc make all docker rmi pgtcl-doc pgtcl-2.8.0/doc/PGTCL-NOTES000066400000000000000000000144531420313073400150650ustar00rootroot00000000000000 Commands: pg_conndefaults pg_connect dbName [-host hostName] [-port portNumber] [-tty pqtty] ?-connhandle connHandleName? The result is either an error message or a handle for a database connection. Handles start with the prefix "pgp". (DEPRECATED, use pg_connect -conninfo instead.) pg_connect -conninfo conninfoString ?-connhandle connHandleName? The modern way to connect, all necessary information required for the connection (host, port, database, user, password, etc.) is specified in the connect info string. pg_connect -connlist name_value_list ?-connhandle connHandleName? This was added to better suit Tcl style of data structures. You can set an array with the connection info, such as: array set myinfo {host myhost port 5000} And then do: pg_connect -connlist [array get myinfo] pg_dbinfo connections This returns the currect connection handles pg_dbinfo results $conn This returns the currect result handles for connection $conn pg_disconnect $conn Close a backend connection. pg_exec $conn query Send a query string to the backend connection. The return result is either an error message or a handle for a query result. Handles start with the prefix "pgp". pg_select send a select query string to the backend connection syntax: pg_select connection query var proc The query must be a select statement The var is used in the proc as an array The proc is run once for each row found example: set conn [pg_connect www] pg_select $conn "select * from users" user { parray user } pg_disconnect $conn You can "continue" and "return" in the body and it'll do the expected thing. pg_result Get information about the results of a query. pg_result result ?option? the options are: -status the status of the result -error the error message, if the status indicates error; otherwise an empty string -conn the connection that produced the result -oid if command was an INSERT, the OID of the inserted tuple -numTuples the number of tuples in the query -numAttrs returns the number of attributes returned by the query -assign arrayName assign the results to an array, using subscripts of the form (tupno,attributeName) -assignbyidx arrayName ?appendstr? assign the results to an array using the first field's value as a key. All but the first field of each tuple are stored, using subscripts of the form (field0value,attributeNameappendstr) -getTuple tupleNumber returns the values of the tuple in a list -tupleArray tupleNumber arrayName stores the values of the tuple in array arrayName, indexed by the attributes returned -attributes returns a list of the name/type pairs of the tuple attributes -lAttributes returns a list of the {name type len} entries of the tuple attributes -list returns a list with the results -llist returns a list of lists with the results -dict returns a dict object with the results -clear clear the result buffer. Do not reuse after this -null_value_string ?value? if value is specified or has been set via the connection's pg_null_value_string, this string value is returned for the various query styles when the corresponding row element is NULL. pg_results returns a list of result handles for a particular connection syntax: pg_results connhandle pg_execute Send a query string to the backend connection and process the result. syntax: pg_execute ?-array name? ?-oid varname? connection query ?loop_body? The return result is the number of tuples processed. If the query returns tuples (i.e. a SELECT statement), the result is placed into variables. pg_lo_open Open a large object syntax: pg_lo_open conn objOid mode ...where mode can be either 'r', 'w', or 'rw' pg_lo_close close a large object syntax: pg_lo_close conn fd pg_lo_read reads at most len bytes from a large object into a variable named bufVar syntax: pg_lo_read conn fd bufVar len bufVar is the name of a variable in which to start the contents of the read pg_lo_write write at most len bytes to a large object pg_lo_write conn fd buf len pg_lo_seek seek to a certain position in a large object syntax pg_lo_seek conn fd offset whence whence can be either "SEEK_CUR", "SEEK_END", or "SEEK_SET" pg_lo_creat create a new large object with mode syntax: pg_lo_creat conn mode mode can be any OR'ing together of INV_READ, INV_WRITE. For now, we don't support any additional storage managers. pg_lo_tell returns the current seek location of the large object syntax: pg_lo_tell conn fd pg_lo_creat pg_lo_unlink unlink a file based on lobject id syntax: pg_lo_unlink conn lobjId pg_lo_import import a UNIX file into an (inversion) large object returns the oid of that object upon success returns InvalidOid upon failure syntax: pg_lo_import conn filename pg_lo_export export an inversion large object to a UNIX file syntax: pg_lo_export conn lobjId filename pg_listen create or remove a callback request for notifies on a given name syntax: pg_listen conn notifyname ?callbackcommand? With a fourth arg, creates or changes the callback command for notifies on the given name; without, cancels the callback request. Callbacks can occur whenever Tcl is executing its event loop. This is the normal idle loop in Tk; in plain tclsh applications, vwait or update can be used to enter the Tcl event loop. pg_quote quotes a string suitable for SQL statements to the backend syntax: pg_quote string pg_escape_string escapes a string suitable for SQL statements to the backend syntax: pg_escape_string string pg_escape_bytea escapes a binary string suitable for SQL statements to the backend syntax: pg_escape_bytea binaryString pg_unescape_bytea unescapes a binary string that was stored in the backend syntax: pg_unescape_bytea binaryString pgtcl-2.8.0/doc/README000066400000000000000000000017521420313073400142610ustar00rootroot00000000000000 libpgtcl.sgml is in docbook 4.2 format, and started out as the documentation from the PostgreSQL package when Pgtcl was part of the Postgres core. It has been updated to document the latest capabilities of Pgtcl. The release ships with pre-generated documentation in HTML, PDF, and manpage form. To build your own docs from the sgml source is beyond the scope of this document. For starters, though, you'll need openjade, pdfjadetex, docbook 4.2, DSSSL Docbook (cygnus), and probably some other stuff. * "make pdf" should make libpgtcl.pdf. * "make html" should make the html subdirectory and (re)populate it with html files. * "make man" should generate the manpages. If you're using FreeBSD, installing the build dependencies is pretty easy. pkg install docbook docbook-sgml dsssl-docbook-modular openjade tex-jadetex texlive-full There are some good hints on everything you need and how to get it built and installed at https://www.postgresql.org/docs/current/static/docguide.html pgtcl-2.8.0/doc/clean-html.sh000077500000000000000000000002261420313073400157570ustar00rootroot00000000000000#!/bin/sh # Remove gratuitous changed lines to cut down on spam in git diffs. for i do ed - $i << \! / < %version; < < %filelist; < < --> < < < ]> < --- > pgtcl-2.8.0/doc/fix-fi.sh000077500000000000000000000001041420313073400151100ustar00rootroot00000000000000#!/bin/sh for i do ed - $i << \! g/.\.fi$/s/\.fi/\ .fi/ w q ! done pgtcl-2.8.0/doc/html/000077500000000000000000000000001420313073400143405ustar00rootroot00000000000000pgtcl-2.8.0/doc/html/HTML.index000066400000000000000000000200731420313073400161370ustar00rootroot00000000000000INDEXTERM libpgtcl.html INDEXPOINT libpgtcl.html#AEN9 TITLE pgtcl - Tcl Binding Library significance NORMAL ZONE index.html TITLE PostgreSQL Tcl Interface Documentation PRIMARY libpgtcl /INDEXTERM INDEXTERM libpgtcl.html INDEXPOINT libpgtcl.html#AEN11 TITLE pgtcl - Tcl Binding Library significance NORMAL ZONE index.html TITLE PostgreSQL Tcl Interface Documentation PRIMARY pgtcl /INDEXTERM INDEXTERM libpgtcl.html INDEXPOINT libpgtcl.html#AEN13 TITLE pgtcl - Tcl Binding Library significance NORMAL ZONE index.html TITLE PostgreSQL Tcl Interface Documentation PRIMARY Tcl /INDEXTERM INDEXTERM libpgtcl.html#PGTCL-OVERVIEW INDEXPOINT libpgtcl.html#AEN249 TITLE Overview significance NORMAL PRIMARY large object SECONDARY in pgctl /INDEXTERM INDEXTERM pgtcl-pgconnect.html INDEXPOINT pgtcl-pgconnect.html#IX-PGTCL-PGCONNECT-2 TITLE pg_connect significance NORMAL id IX-PGTCL-PGCONNECT-2 PRIMARY pg_connect /INDEXTERM INDEXTERM pgtcl-pgconnect.html#AEN361 INDEXPOINT pgtcl-pgconnect.html#AEN389 TITLE Arguments significance NORMAL PRIMARY host name /INDEXTERM INDEXTERM pgtcl-pgconnect.html#AEN361 INDEXPOINT pgtcl-pgconnect.html#AEN392 TITLE Arguments significance NORMAL PRIMARY Unix domain socket /INDEXTERM INDEXTERM pgtcl-pgconnect.html#AEN361 INDEXPOINT pgtcl-pgconnect.html#AEN425 TITLE Arguments significance NORMAL PRIMARY port /INDEXTERM INDEXTERM pgtcl-pgconnect.html#AEN361 INDEXPOINT pgtcl-pgconnect.html#AEN481 TITLE Arguments significance NORMAL PRIMARY SSL SECONDARY[libpq] with libpq /INDEXTERM INDEXTERM pgtcl-pgconninfo.html INDEXPOINT pgtcl-pgconninfo.html#IX-PGTCL-PGCONNINFO-2 TITLE pg_dbinfo significance NORMAL id IX-PGTCL-PGCONNINFO-2 PRIMARY pg_dbinfo /INDEXTERM INDEXTERM pgtcl-pgdisconnect.html INDEXPOINT pgtcl-pgdisconnect.html#IX-PGTCL-PGDISCONNECT-2 TITLE pg_disconnect significance NORMAL id IX-PGTCL-PGDISCONNECT-2 PRIMARY pg_disconnect /INDEXTERM INDEXTERM pgtcl-pgconndefaults.html INDEXPOINT pgtcl-pgconndefaults.html#IX-PGTCL-PGCONNDEFAULTS-2 TITLE pg_conndefaults significance NORMAL id IX-PGTCL-PGCONNDEFAULTS-2 PRIMARY pg_conndefaults /INDEXTERM INDEXTERM pgtcl-pgexec.html INDEXPOINT pgtcl-pgexec.html#IX-PGTCL-PGEXEC-2 TITLE pg_exec significance NORMAL id IX-PGTCL-PGEXEC-2 PRIMARY pg_exec /INDEXTERM INDEXTERM pgtcl-pgexecprepared.html INDEXPOINT pgtcl-pgexecprepared.html#IX-PGTCL-PGEXECPREPARED-2 TITLE pg_exec_prepared significance NORMAL id IX-PGTCL-PGEXECPREPARED-2 PRIMARY pg_exec_prepared /INDEXTERM INDEXTERM pgtcl-pgresult.html INDEXPOINT pgtcl-pgresult.html#IX-PGTCL-PGRESULT-2 TITLE pg_result significance NORMAL id IX-PGTCL-PGRESULT-2 PRIMARY pg_result /INDEXTERM INDEXTERM pgtcl-pgselect.html INDEXPOINT pgtcl-pgselect.html#IX-PGTCL-PGSELECT-2 TITLE pg_select significance NORMAL id IX-PGTCL-PGSELECT-2 PRIMARY pg_select /INDEXTERM INDEXTERM pgtcl-pgexecute.html INDEXPOINT pgtcl-pgexecute.html#IX-PGTCL-PGEXECUTE-2 TITLE pg_execute significance NORMAL id IX-PGTCL-PGEXECUTE-2 PRIMARY pg_execute /INDEXTERM INDEXTERM pgtcl-pglisten.html INDEXPOINT pgtcl-pglisten.html#IX-PGTCL-PGLISTEN-2 TITLE pg_listen significance NORMAL id IX-PGTCL-PGLISTEN-2 PRIMARY pg_listen /INDEXTERM INDEXTERM pgtcl-pglisten.html#AEN1409 INDEXPOINT pgtcl-pglisten.html#AEN1420 TITLE Description significance NORMAL PRIMARY NOTIFY SECONDARY[pgtcl] in pgtcl /INDEXTERM INDEXTERM pgtcl-pgon-connection-loss.html INDEXPOINT pgtcl-pgon-connection-loss.html#IX-PGTCL-PGON-CONNECTION-LOSS-2 TITLE pg_on_connection_loss significance NORMAL id IX-PGTCL-PGON-CONNECTION-LOSS-2 PRIMARY pg_on_connection_loss /INDEXTERM INDEXTERM pgtcl-pgsendquery.html INDEXPOINT pgtcl-pgsendquery.html#IX-PGTCL-PGSENDQUERY-2 TITLE pg_sendquery significance NORMAL id IX-PGTCL-PGSENDQUERY-2 PRIMARY pg_sendquery /INDEXTERM INDEXTERM pgtcl-pgsendqueryprepared.html INDEXPOINT pgtcl-pgsendqueryprepared.html#IX-PGTCL-PGSENDQUERYPREPARED-2 TITLE pg_sendquery_prepared significance NORMAL id IX-PGTCL-PGSENDQUERYPREPARED-2 PRIMARY pg_sendquery_prepared /INDEXTERM INDEXTERM pgtcl-pggetresult.html INDEXPOINT pgtcl-pggetresult.html#IX-PGTCL-PGGETRESULT-2 TITLE pg_getresult significance NORMAL id IX-PGTCL-PGGETRESULT-2 PRIMARY pg_getresult /INDEXTERM INDEXTERM pgtcl-pgisbusy.html INDEXPOINT pgtcl-pgisbusy.html#IX-PGTCL-PGISBUSY-2 TITLE pg_isbusy significance NORMAL id IX-PGTCL-PGISBUSY-2 PRIMARY pg_isbusy /INDEXTERM INDEXTERM pgtcl-pgblocking.html INDEXPOINT pgtcl-pgblocking.html#IX-PGTCL-PGBLOCKING-2 TITLE pg_blocking significance NORMAL id IX-PGTCL-PGBLOCKING-2 PRIMARY pg_blocking /INDEXTERM INDEXTERM pgtcl-pgcancelrequest.html INDEXPOINT pgtcl-pgcancelrequest.html#IX-PGTCL-PGCANCELREQUEST-2 TITLE pg_cancelrequest significance NORMAL id IX-PGTCL-PGCANCELREQUEST-2 PRIMARY pg_cancelrequest /INDEXTERM INDEXTERM pgtcl-nullvaluestring.html INDEXPOINT pgtcl-nullvaluestring.html#IX-PGTCL-NULLVALUESTRING-2 TITLE pg_null_value_string significance NORMAL id IX-PGTCL-NULLVALUESTRING-2 PRIMARY pg_null_value_string /INDEXTERM INDEXTERM pgtcl-quote.html INDEXPOINT pgtcl-quote.html#IX-PGTCL-QUOTE-2 TITLE pg_quote significance NORMAL id IX-PGTCL-QUOTE-2 PRIMARY pg_quote /INDEXTERM INDEXTERM pgtcl-pgescape-string.html INDEXPOINT pgtcl-pgescape-string.html#IX-PGTCL-PGESCAPE-STRING-2 TITLE pg_escape_string significance NORMAL id IX-PGTCL-PGESCAPE-STRING-2 PRIMARY pg_escape_string /INDEXTERM INDEXTERM pgtcl-pgescape-bytea.html INDEXPOINT pgtcl-pgescape-bytea.html#IX-PGTCL-PGESCAPE-BYTEA-2 TITLE pg_escape_bytea significance NORMAL id IX-PGTCL-PGESCAPE-BYTEA-2 PRIMARY pg_escape_bytea /INDEXTERM INDEXTERM pgtcl-pgunescape-bytea.html INDEXPOINT pgtcl-pgunescape-bytea.html#IX-PGTCL-PGUNESCAPE-BYTEA-2 TITLE pg_unescape_bytea significance NORMAL id IX-PGTCL-PGUNESCAPE-BYTEA-2 PRIMARY pg_unescape_bytea /INDEXTERM INDEXTERM pgtcl-pglocreat.html INDEXPOINT pgtcl-pglocreat.html#IX-PGTCL-PGLOCREAT-2 TITLE pg_lo_creat significance NORMAL id IX-PGTCL-PGLOCREAT-2 PRIMARY pg_lo_creat /INDEXTERM INDEXTERM pgtcl-pgloopen.html INDEXPOINT pgtcl-pgloopen.html#IX-PGTCL-PGLOOPEN-2 TITLE pg_lo_open significance NORMAL id IX-PGTCL-PGLOOPEN-2 PRIMARY pg_lo_open /INDEXTERM INDEXTERM pgtcl-pgloclose.html INDEXPOINT pgtcl-pgloclose.html#IX-PGTCL-PGLOCLOSE-2 TITLE pg_lo_close significance NORMAL id IX-PGTCL-PGLOCLOSE-2 PRIMARY pg_lo_close /INDEXTERM INDEXTERM pgtcl-pgloread.html INDEXPOINT pgtcl-pgloread.html#IX-PGTCL-PGLOREAD-2 TITLE pg_lo_read significance NORMAL id IX-PGTCL-PGLOREAD-2 PRIMARY pg_lo_read /INDEXTERM INDEXTERM pgtcl-pglowrite.html INDEXPOINT pgtcl-pglowrite.html#IX-PGTCL-PGLOWRITE-2 TITLE pg_lo_write significance NORMAL id IX-PGTCL-PGLOWRITE-2 PRIMARY pg_lo_write /INDEXTERM INDEXTERM pgtcl-pglolseek.html INDEXPOINT pgtcl-pglolseek.html#IX-PGTCL-PGLOLSEEK-2 TITLE pg_lo_lseek significance NORMAL id IX-PGTCL-PGLOLSEEK-2 PRIMARY pg_lo_lseek /INDEXTERM INDEXTERM pgtcl-pglotell.html INDEXPOINT pgtcl-pglotell.html#IX-PGTCL-PGLOTELL-2 TITLE pg_lo_tell significance NORMAL id IX-PGTCL-PGLOTELL-2 PRIMARY pg_lo_tell /INDEXTERM INDEXTERM pgtcl-pgtruncate.html INDEXPOINT pgtcl-pgtruncate.html#IX-PGTCL-PGLOTRUNCATE-2 TITLE pg_lo_truncate significance NORMAL id IX-PGTCL-PGLOTRUNCATE-2 PRIMARY pg_lo_truncate /INDEXTERM INDEXTERM pgtcl-pglounlink.html INDEXPOINT pgtcl-pglounlink.html#IX-PGTCL-PGLOUNLINK-2 TITLE pg_lo_unlink significance NORMAL id IX-PGTCL-PGLOUNLINK-2 PRIMARY pg_lo_unlink /INDEXTERM INDEXTERM pgtcl-pgloimport.html INDEXPOINT pgtcl-pgloimport.html#IX-PGTCL-PGLOIMPORT-2 TITLE pg_lo_import significance NORMAL id IX-PGTCL-PGLOIMPORT-2 PRIMARY pg_lo_import /INDEXTERM INDEXTERM pgtcl-pgloexport.html INDEXPOINT pgtcl-pgloexport.html#IX-PGTCL-PGLOEXPORT-2 TITLE pg_lo_export significance NORMAL id IX-PGTCL-PGLOEXPORT-2 PRIMARY pg_lo_export /INDEXTERM INDEXTERM pgtcl-pgsqlite.html INDEXPOINT pgtcl-pgsqlite.html#IX-PGTCL-SQLITE2-2 TITLE pg_sqlite significance NORMAL id IX-PGTCL-SQLITE2-2 PRIMARY pg_sqlite /INDEXTERM INDEXTERM pgtcl-pgcopycomplete.html INDEXPOINT pgtcl-pgcopycomplete.html#IX-PGTCL-COPY-COMPLETE TITLE pg_copy_complete significance NORMAL id IX-PGTCL-COPY-COMPLETE PRIMARY pg_copy_complete /INDEXTERM INDEXTERM pgtcl-pggetconnectionid.html INDEXPOINT pgtcl-pggetconnectionid.html#IX-PGTCL-C-API-2 TITLE PgGetConnectionId significance NORMAL id IX-PGTCL-C-API-2 PRIMARY PgGetConnectionId /INDEXTERM pgtcl-2.8.0/doc/html/index.html000066400000000000000000000052071420313073400163410ustar00rootroot00000000000000 PostgreSQL Tcl Interface Documentation

PostgreSQL Tcl Interface Documentation

The PostgreSQL Global Development Group

The Tcl Interface Group


List of Tables
1-1. pgtcl Commands
1-2. pgtcl C API
List of Examples
1-1. pgtcl Example Program
pgtcl-2.8.0/doc/html/libpgtcl-loading.html000066400000000000000000000122731420313073400204460ustar00rootroot00000000000000 Loading pgtcl into an Application

1.2. Loading pgtcl into an Application

Before using pgtcl commands, you must load the libpgtcl library into your Tcl application. This is normally done with the package require command. Here is an example:

package require Pgtcl 1.5

package require loads the libpgtcl shared library, and loads any additional Tcl code that is part of the Pgtcl package. Note that you can manually generate the pkgIndex.tcl file, or use make pkgIndex.tcl or make pkgIndex.tcl-hand to have make generate it.

The old way to load the shared library is by using the Tcl load command. Here is an example:

load libpgtcl[info sharedlibextension]

Although this way of loading the shared library is deprecated, we continue to document it for the time being, because it may help in debugging if, for some reason, package require is failing. The use of info sharedlibextension is recommended in preference to hard-wiring .so or .sl or .dll into the program.

The load command will fail unless the system's dynamic loader knows where to look for the libpgtcl shared library file. You may need to work with ldconfig, or set the environment variable LD_LIBRARY_PATH, or use some equivalent facility for your platform to make it work. Refer to the PostgreSQL installation instructions for more information.

libpgtcl in turn depends on the interface library libpq, so the dynamic loader must also be able to find the libpq shared library. In practice this is seldom an issue, since both of these shared libraries are normally stored in the same directory, but it can be a stumbling block in some configurations.

If you use a custom executable for your application, you might choose to statically bind libpgtcl into the executable and thereby avoid the load command and the potential problems of dynamic linking. See the source code for pgtclsh for an example.

If you want to use the pg_sqlite bridge, you must still explicitly "package require sqlite3" before executing any sqlite3 commands.

pgtcl-2.8.0/doc/html/libpgtcl-ref.html000066400000000000000000000154661420313073400176140ustar00rootroot00000000000000 pgtcl Command Reference

1.3. pgtcl Command Reference

Table of Contents
pg_connect -- open a connection to the server
pg_dbinfo -- returns data about the connection
pg_disconnect -- close a connection to the server
pg_conndefaults -- get connection options and their defaults
pg_exec -- send a command to the server
pg_exec_prepared -- send a request to execute a prepared SQL statement to the server
pg_result -- get information about a command result
pg_select -- loop over the result of a query
pg_execute -- send a query and optionally loop over the results
pg_listen -- set or change a callback for asynchronous notification messages
pg_on_connection_loss -- set or change a callback for unexpected connection loss
pg_sendquery -- send a query string to the backend connection without waiting for a result
pg_sendquery_prepared -- send a request to execute a prepared statement to the backend connection, without waiting for a result
pg_getresult -- process asychronous results
pg_isbusy -- see if a query is busy
pg_blocking -- see or set whether or not a connection is set to blocking or nonblocking
pg_cancelrequest -- request that PostgreSQL abandon processing of the current command
pg_null_value_string -- define a value to be returned for NULL fields distinct from the default value of an empty string.
pg_quote -- escapes a string for inclusion into SQL statements
pg_escape_string -- escapes a string for inclusion into SQL statements. This is the same as pg_quote. It was added for consistency.
pg_escape_bytea -- escapes a binary string for inclusion into SQL statements.
pg_unescape_bytea -- unescapes a binary string.
pg_lo_creat -- create a large object
pg_lo_open -- open a large object
pg_lo_close -- close a large object
pg_lo_read -- read from a large object
pg_lo_write -- write to a large object
pg_lo_lseek -- seek to a position of a large object
pg_lo_tell -- return the current seek position of a large object
pg_lo_truncate -- Truncate a large object to a given length
pg_lo_unlink -- delete a large object
pg_lo_import -- import a large object from a file
pg_lo_export -- export a large object to a file
pg_sqlite -- implements a bridge between PostgreSQL and Sqlite3 using the Pgtcl and sqlite3 packages.
pg_copy_complete -- Completes a COPY FROM stdin operation
PgGetConnectionId -- Provides access to the underlying libpq SQL connection handle.
pgtcl-2.8.0/doc/html/libpgtcl.html000066400000000000000000000370461420313073400170400ustar00rootroot00000000000000 pgtcl - Tcl Binding Library

Chapter 1. pgtcl - Tcl Binding Library

Table of Contents
1.1. Overview
1.2. Loading pgtcl into an Application
1.3. pgtcl Command Reference
pg_connect -- open a connection to the server
pg_dbinfo -- returns data about the connection
pg_disconnect -- close a connection to the server
pg_conndefaults -- get connection options and their defaults
pg_exec -- send a command to the server
pg_exec_prepared -- send a request to execute a prepared SQL statement to the server
pg_result -- get information about a command result
pg_select -- loop over the result of a query
pg_execute -- send a query and optionally loop over the results
pg_listen -- set or change a callback for asynchronous notification messages
pg_on_connection_loss -- set or change a callback for unexpected connection loss
pg_sendquery -- send a query string to the backend connection without waiting for a result
pg_sendquery_prepared -- send a request to execute a prepared statement to the backend connection, without waiting for a result
pg_getresult -- process asychronous results
pg_isbusy -- see if a query is busy
pg_blocking -- see or set whether or not a connection is set to blocking or nonblocking
pg_cancelrequest -- request that PostgreSQL abandon processing of the current command
pg_null_value_string -- define a value to be returned for NULL fields distinct from the default value of an empty string.
pg_quote -- escapes a string for inclusion into SQL statements
pg_escape_string -- escapes a string for inclusion into SQL statements. This is the same as pg_quote. It was added for consistency.
pg_escape_bytea -- escapes a binary string for inclusion into SQL statements.
pg_unescape_bytea -- unescapes a binary string.
pg_lo_creat -- create a large object
pg_lo_open -- open a large object
pg_lo_close -- close a large object
pg_lo_read -- read from a large object
pg_lo_write -- write to a large object
pg_lo_lseek -- seek to a position of a large object
pg_lo_tell -- return the current seek position of a large object
pg_lo_truncate -- Truncate a large object to a given length
pg_lo_unlink -- delete a large object
pg_lo_import -- import a large object from a file
pg_lo_export -- export a large object to a file
pg_sqlite -- implements a bridge between PostgreSQL and Sqlite3 using the Pgtcl and sqlite3 packages.
pg_copy_complete -- Completes a COPY FROM stdin operation
PgGetConnectionId -- Provides access to the underlying libpq SQL connection handle.
1.4. Tcl Namespace Support
1.5. Connection/result handles as commands
1.6. Example Program

pgtcl is a Tcl package for client programs to interface with PostgreSQL servers. It makes most of the functionality of libpq available to Tcl scripts.

1.1. Overview

Table 1-1> gives an overview over the commands available in pgtcl. These commands are described further on subsequent pages.

Table 1-1. pgtcl Commands

Command Namespace Command Description
pg_connect pg::connect open a connection to the server
pg_dbinfo pg::dbinfo returns data about the connection
pg_disconnect pg::disconnect close a connection to the server
pg_conndefaults pg::conndefaults get connection options and their defaults
pg_exec pg::sqlexec send a command to the server
pg_exec_prepared pg::exec_prepared send a request to execute a prepared statement, with parameters
pg_result pg::result get information about a command result
pg_select pg::select loop over the result of a query
pg_execute pg::execute send a query and optionally loop over the results
pg_null_value_string pg::null_value_string set string to be returned for null values in query results
pg_quote pg::quote escape a string for inclusion into SQL statements
pg_escape_string pg::escape_string escape a binary string for inclusion into SQL statements
pg_escape_bytea pg::escape_bytea escape a binary string for inclusion into SQL statements
pg_unescape_bytea pg::unescape_bytea unescape a binary string from the backend
pg_listen pg::listen set or change a callback for asynchronous notification messages
pg_on_connection_loss pg::on_connection_loss set or change a callback for unexpected connection loss
pg_sendquery pg::sendquery issue pg_exec-style command asynchronously
pg_sendquery_prepared pg::sendquery_prepared send an asynchronous request to execute a prepared statement, with parameters
pg_getresult pg::getresult check on results from asynchronously issued commands
pg_isbusy pg::isbusy check to see if the connection is busy processing a query
pg_blocking pg::blocking set a database connection to be either blocking or nonblocking
pg_cancelrequest pg::cancelrequest request PostgreSQL abandon processing of the current command
pg_lo_creat pg::lo_creat create a large object
pg_lo_open pg::lo_open open a large object
pg_lo_close pg::lo_close close a large object
pg_lo_read pg::lo_read read from a large object
pg_lo_write pg::lo_write write to a large object
pg_lo_lseek pg::lo_lseek seek to a position in a large object
pg_lo_tell pg::lo_tell return the current seek position of a large object
pg_lo_truncate pg::lo_truncate Truncate (or pad) a large object to a specified length
pg_lo_unlink pg::lo_unlink delete a large object
pg_lo_import pg::lo_import import a large object from a file
pg_lo_export pg::lo_export export a large object to a file
pg_sqlite pg::sqlite bridge between pgtcl and the Tcl sqlite package (when compiled with sqlite bridge)
pg_copy_complete pg::copy_complete Complete COPY FROM stdin operation after finished writing

The pg_lo_* commands are interfaces to the large object features of PostgreSQL. The functions are designed to mimic the analogous file system functions in the standard Unix file system interface. The pg_lo_* commands should be used within a BEGIN/COMMIT transaction block because the descriptor returned by pg_lo_open is only valid for the current transaction. pg_lo_import and pg_lo_export must be used in a BEGIN/COMMIT transaction block.

The pg_sqlite command is only included if Sqlite 3 is installed. It can be disabled at compile time with "./configure --without-sqlite3".

Table 1-2. pgtcl C API

Function Description
PGconn *PgGetConnectionId(interp, id, connid) Given a Tcl handle to an open Pgtcl connection, return the underlying libpq connection
pgtcl-2.8.0/doc/html/pgtcl-commandhandles.html000066400000000000000000000064131420313073400213160ustar00rootroot00000000000000 Connection/result handles as commands

1.5. Connection/result handles as commands

Starting with version 1.5, you can use the connection/result handle as a Tcl command. What this means is that when a handle for a connection or result is generated, a corresponding Tcl command is also generate. For example, you can do the following:

set conn [pg::connect template1 -host $host -port $port]
set res [$conn exec "SELECT datname FROM pg_database ORDER BY datname;"]
set datnames [$res -list]
$res -clear
rename $conn {} ;# or $conn disconnect

Note that deleting the command (rename $conn {}), has the same effect as pg::result $res -clear (if it is a result handle), and pg::disconnect (if it is a connection handle). Also, if that command gets overloaded with a proc definition, then that has the same effect as deleting the command.

pgtcl-2.8.0/doc/html/pgtcl-examplesect.html000066400000000000000000000076141420313073400206570ustar00rootroot00000000000000 Example Program

1.6. Example Program

Example 1-1> shows a small example of how to use the pgtcl commands.

Example 1-1. pgtcl Example Program

# getDBs :
#   get the names of all the databases at a given host and port number
#   with the defaults being the localhost and port 5432
#   return them in alphabetical order
proc getDBs { {host "localhost"} {port "5432"} } {
    # datnames is the list to be result
    set conn [pg_connect template1 -host $host -port $port]
    set res [pg_exec $conn "SELECT datname FROM pg_database ORDER BY datname;"]
    set ntups [pg_result $res -numTuples]
    for {set i 0} {$i < $ntups} {incr i} {
        lappend datnames [pg_result $res -getTuple $i]
    }
    pg_result $res -clear
    pg_disconnect $conn
    return $datnames
}

## OR an alternative

proc getDBs { {host "localhost"} {port "5432"} } {
    # datnames is the list to be result
    set conn [pg_connect template1 -host $host -port $port]
    set res [pg_exec $conn "SELECT datname FROM pg_database ORDER BY datname;"]

    set datnames [pg_result $res -list]
    pg_result $res -clear
    pg_disconnect $conn
    return $datnames
}

## OR an alternative

proc getDBs { {host "localhost"} {port "5432"} } {
    # datnames is the list to be result
    set conn [pg_connect template1 -host $host -port $port]
    set res [$conn exec "SELECT datname FROM pg_database ORDER BY datname;"]

    set datnames [$res -dict]
    $res -clear
    rename $conn {}
    return [dict get $datnames]
}
pgtcl-2.8.0/doc/html/pgtcl-nullvaluestring.html000066400000000000000000000074351420313073400216040ustar00rootroot00000000000000 pg_null_value_string

pg_null_value_string

Name

pg_null_value_string -- define a value to be returned for NULL fields distinct from the default value of an empty string.

Synopsis

pg_null_value_string ?string?

Description

pg_null_value_string sets or retrieves a string to be returned in query results for fields whose value is NULL, making it possible to distinguish between NULL values an values that are not null but are comprised of an empty string. Without setting an alternative null value with this or with pg_result's -null_value_string, it is impossible to tell the difference between a NULL field value and one that is not null but empty.

Arguments

string

The string to be set that will be returned for null fields.

Return Value

Returns the string that is currently being returned for null fields. It will be the passed string value if one was passed, or, otherwise, the value currently being used.

pgtcl-2.8.0/doc/html/pgtcl-pgblocking.html000066400000000000000000000075201420313073400204600ustar00rootroot00000000000000 pg_blocking

pg_blocking

Name

pg_blocking -- see or set whether or not a connection is set to blocking or nonblocking

Synopsis

pg_blocking conn ?mode?

Description

pg_blocking can set the connection to either blocking or nonblocking, and it can see which way the connection is currently set.

Arguments

conn

The handle of a connection to the database in which the large object exists.

mode

If present, sets the mode of the connection to nonblocking if 0. Otherwise it sets the connection to blocking.

Return Value

Returns nothing if called with the mode argument. Otherwise it returns 1 if the connection is set for blocking, or 0 if the connection is set for nonblocking.

pgtcl-2.8.0/doc/html/pgtcl-pgcancelrequest.html000066400000000000000000000066271420313073400215350ustar00rootroot00000000000000 pg_cancelrequest

pg_cancelrequest

Name

pg_cancelrequest -- request that PostgreSQL abandon processing of the current command

Synopsis

pg_cancelrequest conn

Description

pg_cancelrequest requests that the processing of the current command be abandoned.

Arguments

conn

The handle of a connection to the database in which the large object exists.

Return Value

Returns nothing if the command was successfully dispatched or if no query was being processed. Otherwise, returns an error.

pgtcl-2.8.0/doc/html/pgtcl-pgconndefaults.html000066400000000000000000000066151420313073400213610ustar00rootroot00000000000000 pg_conndefaults

pg_conndefaults

Name

pg_conndefaults -- get connection options and their defaults

Synopsis

pg_conndefaults

Description

pg_conndefaults returns information about the connection options available in pg_connect -conninfo and the current default value for each option.

Arguments

None

Return Value

The result is a list describing the possible connection options and their current default values. Each entry in the list is a sublist of the format:

{optname label dispchar dispsize value}

where the optname is usable as an option in pg_connect -conninfo.

pgtcl-2.8.0/doc/html/pgtcl-pgconnect.html000066400000000000000000000361701420313073400203240ustar00rootroot00000000000000 pg_connect

pg_connect

Name

pg_connect -- open a connection to the server

Synopsis

pg_connect -conninfo connectOptions ?-connhandle connectionHandleName? ?-async bool?
pg_connect dbName ?-host hostName? ?-port portNumber? ?-tty tty? ?-options serverOptions? ?-connhandle connectionHandleName? ?-async bool?
pg_connect -connlist connectNameValueList ?-connhandle connectionHandleName? ?-async bool?

Description

pg_connect opens a connection to the PostgreSQL server.

Three syntaxes are available. In the older one, each possible option has a separate option switch in the pg_connect command. In the newer form, a single option string is supplied that can contain multiple option values. The third form takes the parameters as a name value Tcl list. pg_conndefaults can be used to retrieve information about the available options in the newer syntax.

Arguments

New style

connectOptions

pg_connect opens a new database connection using the parameters taken from the connectOptions string. Unlike the old-style usage of pg_connect, with the new-style usage the parameter set can be extended without requiring changes to either libpgtcl or the underlying libpq library, so use of the new style (or its nonexistent nonblocking analogues pg_connect_start and pg_connect_poll) is preferred for new application programming.

The passed string can be empty to use all default parameters, or it can contain one or more parameter settings separated by whitespace. Each parameter setting is in the form keyword = value. (To write an empty value or a value containing spaces, surround it with single quotes, e.g., keyword = 'a value'. Single quotes and backslashes within the value must be escaped with a backslash, i.e., \' and \\.) Spaces around the equal sign are optional.

The currently recognized parameter key words are:

host

Name of host to connect to. 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 is to connect to a Unix-domain socket in /tmp.

hostaddr

Numeric IP address of host to connect to. This should be in the standard IPv4 address format, e.g., 172.28.40.9. If your machine supports IPv6, you can also use IPv6 address format, e.g., fe80::203:93ff:fedb:49bc. TCP/IP communication is always used when a nonempty string is specified for this parameter.

Using hostaddr instead of host allows the application to avoid a host name lookup, which may be important in applications with time constraints. However, Kerberos authentication requires the host name. The following therefore applies: If host is specified without hostaddr, a host name lookup occurs. If hostaddr is specified without host, the value for hostaddr gives the remote address. When Kerberos is used, a reverse name query occurs to obtain the host name for Kerberos. If both host and hostaddr are specified, the value for hostaddr gives the remote address; the value for host is ignored, unless Kerberos is used, in which case that value is used for Kerberos authentication. (Note that authentication is likely to fail if libpq is passed a host name that is not the name of the machine at hostaddr.) Also, host rather than hostaddr is used to identify the connection in $HOME/.pgpass.

Without either a host name or host address, Pgtcl will connect using a local Unix domain socket.

port

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

dbname

The database name. Defaults to be the same as the user name.

user

PostgreSQL user name to connect as.

password

Password to be used if the server demands password authentication.

connect_timeout

Maximum wait for connection, in seconds (write as a decimal integer string). Zero or not specified means wait indefinitely. It is not recommended to use a timeout of less than 2 seconds.

options

Command-line options to be sent to the server.

tty

Ignored (formerly, this specified where to send server debug output).

sslmode

This option determines whether or with what priority an SSL connection will be negotiated with the server. There are four modes: disable will attempt only an unencrypted SSL connection; allow will negotiate, trying first a non-SSL connection, then if that fails, trying an SSL connection; prefer (the default) will negotiate, trying first an SSL connection, then if that fails, trying a regular non-SSL connection; require will try only an SSL connection.

If PostgreSQL is compiled without SSL support, using option require will cause an error, and options allow and prefer will be tolerated but libpq will be unable to negotiate an SSL connection.

requiressl

This option is deprecated in favor of the sslmode setting.

If set to 1, an SSL connection to the server is required (this is equivalent to sslmode require). libpq will then refuse to connect if the server does not accept an SSL connection. If set to 0 (default), libpq will negotiate the connection type with the server (equivalent to sslmode prefer). This option is only available if PostgreSQL is compiled with SSL support.

service

Service name to use for additional parameters. It specifies a service name in pg_service.conf that holds additional connection parameters. This allows applications to specify only a service name so connection parameters can be centrally maintained. See PREFIX/share/pg_service.conf.sample for information on how to set up the file.

-connhandle connectionHandleName

Name to use for the connection handle, instead of pgtcl generating the name automatically. Without the option, the name is auto-generated, prefixed with pgsql, and with a numeric id at the end. This gives the programmer control over the name of the connection handle.

-async bool

Connect asyncronously if [bool] is true.

If any parameter is unspecified, then the corresponding environment variable (see libpq documentation in the PostgreSQL manual) is checked. If the environment variable is not set either, then built-in defaults are used.

Old style

dbName

The name of the database to connect to.

-host hostName

The host name of the database server to connect to.

-port portNumber

The TCP port number of the database server to connect to.

-tty tty

A file or TTY for optional debug output from the server.

-options serverOptions

Additional configuration options to pass to the server.

-connhandle connectionHandleName

Name to use for the connection handle, instead of pgtcl generating the name automatically. Without the option, the name is auto-generated, prefixed with pgsql, and with a numeric id at the end. This gives the programmer control over the name of the connection handle.

-async bool

Connect asyncronously if [bool] is true.

Third style (most recent one added)

-connlist connectNameValuelist

pg_connect opens a new database connection using the parameters taken from the connectNameValuelist list. The parameters are exactly the same for the New Style, but they are stored as a Tcl list, instead of a string. The list is a name value pair, for example: [list host localhost port 5400 dbname template1].

array set conninfo {
    host    192.168.123.180
    port    5801
    dbname  template1
    user    postgres
}
set conn [pg::connect -connlist [array get ::conninfo]]
-async bool

Connect asyncronously if [bool] is true.

-connhandle connectionHandleName

Name to use for the connection handle, instead of pgtcl generating the name automatically. Without the option, the name is auto-generated, prefixed with pgsql, and with a numeric id at the end. This gives the programmer control over the name of the connection handle.

Return Value

If successful, a handle for a database connection is returned. Handles start with the prefix pgsql.

pgtcl-2.8.0/doc/html/pgtcl-pgconninfo.html000066400000000000000000000141121420313073400204740ustar00rootroot00000000000000 pg_dbinfo

pg_dbinfo

Name

pg_dbinfo -- returns data about the connection

Synopsis

pg_dbinfo command ?conn? ?paramname?

Description

pg_dbinfo returns data about the connection. The first argument is a command, and the second and third argument depend on the command chosen.

Arguments

command
connections

Return a list of connection handles.

results connHandle

Return a list of result handles for the named connection.

version connHandle

Return server version for the connection.

protocol connHandle

Return protocol version for the connection.

param connHandle name

Return connection's value for the named parameter.

backendpid connHandle

Return server process ID for the connection.

socket connHandle

Return socket file handle for the connection.

sql_count connHandle

Return number of SQL queries that have been made for the connection.

dbname connHandle

Return name of the connected database.

user connHandle

Return logged in user name.

password connHandle

Return logged in user's password.

host connHandle

Return address of the connected host.

port connHandle

Return host port for the connection.

options connHandle

Return command line options passed in the connection request.

status connHandle

Return connection status.

transaction_status connHandle

Return transaction status.

error_message connHandle

Return the most recent error message on the connection.

needs_password connHandle

Return true if the connection required a password but none was available.

This function can be applied after a failed connection attempt to decide whether to prompt the user for a password.

used_password connHandle

Return true if the connection used a password.

This function can be applied after either a failed or successful connection attempt to detect whether the server demanded a password.

used_ssl connHandle

Return true if the connection uses SSL.

conn

The handle of the connection, when required.

param

The connection parameter name, when the command "param" is provided.

Return Value

A Tcl list of connection handle names

pgtcl-2.8.0/doc/html/pgtcl-pgcopycomplete.html000066400000000000000000000063111420313073400213700ustar00rootroot00000000000000 pg_copy_complete

pg_copy_complete

Name

pg_compy_complete -- Completes a COPY FROM stdin operation

Synopsis

pg_copy_complete conn

Description

pg_copy_complete completes a COPY FROM stdin operation. After writing the rows to the postgres connection handle, this tells postgres that the copy is completed and it can return to normal operation.

Arguments

conn

An postgresql connection handle.

pgtcl-2.8.0/doc/html/pgtcl-pgdisconnect.html000066400000000000000000000062211420313073400210160ustar00rootroot00000000000000 pg_disconnect

pg_disconnect

Name

pg_disconnect -- close a connection to the server

Synopsis

pg_disconnect conn

Description

pg_disconnect closes a connection to the PostgreSQL server.

Arguments

conn

The handle of the connection to be closed.

Return Value

None

pgtcl-2.8.0/doc/html/pgtcl-pgescape-bytea.html000066400000000000000000000066321420313073400212350ustar00rootroot00000000000000 pg_escape_bytea

pg_escape_bytea

Name

pg_escape_bytea -- escapes a binary string for inclusion into SQL statements.

Synopsis

pg_escape_bytea string

Description

pg_escape_bytea escapes a binary string, making it safe for inclusion into SQL statements.

    pg_exec $conn "insert into foo values ([pg_escape_binary $name]);" 

Arguments

binary_string

The binary string to be escaped.

Return Value

Returns the binary string, escaped for inclusion into SQL queries.

pgtcl-2.8.0/doc/html/pgtcl-pgescape-string.html000066400000000000000000000110671420313073400214350ustar00rootroot00000000000000 pg_escape_string

pg_escape_string

Name

pg_escape_string -- escapes a string for inclusion into SQL statements. This is the same as pg_quote. It was added for consistency.

Synopsis

pg_escape_string string

Description

pg_escape_string quotes a string and escapes single quotes and backslashes within the string, making it safe for inclusion into SQL statements.

If you're doing something like

    pg_exec $conn "insert into foo values ('$name');" 

and name contains text includeng an unescaped single quote, such as Bob's House, at best the insert will fail, and at worst your software will be exploited via an SQL injection attack. Passing value strings through pg_escape_string will properly quote them for insertion into SQL commands.

    pg_exec $conn "insert into foo values ([pg_escape_string $name]);" 

...will make sure that any special characters that occur in name, such as single quote or backslash, will be properly quoted.

Arguments

string

The string to be escaped.

Return Value

Returns the string, escaped for inclusion into SQL queries. Note that it adds a set of single quotes around the outside of the string as well.

See Also

In most cases, with recent versions of SQL, it is better to use the native parameter insertion capabilities of the SQL server and protocol. If you are using a version of PostgreSQL more recent then 7.4, consider the optional parameter arguments to pg_exec and pg_sendquery, and the paramarray option to pg_exec, pg_sendquery, and pg_select.

pgtcl-2.8.0/doc/html/pgtcl-pgexec.html000066400000000000000000000136711420313073400176200ustar00rootroot00000000000000 pg_exec

pg_exec

Name

pg_exec -- send a command to the server

Synopsis

pg_exec [-paramarray arrayVar] [-variables] conn commandString ?args?

Description

pg_exec submits a command to the PostgreSQL server and returns a result. Command result handles start with the connection handle and add a period and a result number.

Note that lack of a Tcl error is not proof that the command succeeded! An error message returned by the server will be processed as a command result with failure status, not by generating a Tcl error in pg_exec. Check for {[pg_result $result -status] == PGRES_COMMAND_OK}.

If the [-paramarray] flag is provided, then a substitution is performed on the query, securely replacing each back-quote delimited name with the corresponding entry from the named array. If the array does not contain the named element, then NULL is substituted (similarly to the way an array created by -withoutnulls is generated). Each such name must occur in a location where a value or field name could appear. See pg_select for more info.

If the [-variables] flag is provided, then embedded Tcl variables are passed as parameters. Variables can be flagged with ':' and array references and namespaces are supported. Complex variable names can usually be embedded with :{nasty-name-here} though no attempt at duplicating Tcl brace-escaping is made. If the variable does not exist, then NULL is substituted.

Arguments

[-paramarray arrayname]

Perform parameter substitution via `quoted` elements of the array using PQexecParams or PQSendQueryParams.

[-variables]

Substitute Tcl variables found in the SQL string using PQexecParams or PQSendQueryParams.

conn

The handle of the connection on which to execute the command.

commandString

The SQL command to execute.

args

For PostgreSQL versions greater than 7.4, args consists of zero or more optional values that can be inserted, unquoted, into the SQL statement using $-style substitution. Nulls are represented by the string "NULL".

Return Value

A result handle. A Tcl error will be returned if pgtcl was unable to obtain a server response. Otherwise, a command result object is created and a handle for it is returned. This handle can be passed to pg_result to obtain the results of the command.

Example

pg_exec $conn {select * from table1 where id = $1 and user = $2} $id $user
pgtcl-2.8.0/doc/html/pgtcl-pgexecprepared.html000066400000000000000000000105611420313073400213360ustar00rootroot00000000000000 pg_exec_prepared

pg_exec_prepared

Name

pg_exec_prepared -- send a request to execute a prepared SQL statement to the server

Synopsis

pg_exec_prepared conn statementName ?args?

Description

pg_exec_prepared submits a command to the PostgreSQL server and returns a result.

pg_exec_prepared functions identically to pg_exec, except that it operates using statements prepared by the PREPARE SQL command.

Note that prepared statements are only support under PostgreSQL 7.4 and later.

Arguments

conn

The handle of the connection on which to execute the command.

statementName

The name of the prepared statement to execute.

args

args consists of zero or more optional values that can be inserted, unquoted, into the SQL statement using $-style substitution.

Return Value

A result handle. See pg_exec for details.

Example

pg_exec $conn {prepare insert_people 
    (varchar, varchar, varchar, varchar, varchar, varchar) 
    as insert into people values ($1, $2, $3, $4, $5, $6);}

pg_exec_prepared $conn insert_people $email $name $address $city $state $zip
pgtcl-2.8.0/doc/html/pgtcl-pgexecute.html000066400000000000000000000164621420313073400203370ustar00rootroot00000000000000 pg_execute

pg_execute

Name

pg_execute -- send a query and optionally loop over the results

Synopsis

pg_execute ?-array arrayVar? ?-oid oidVar? conn commandString ?procedure?

Description

pg_execute submits a command to the PostgreSQL server.

If the command is not a SELECT statement, the number of rows affected by the command is returned. If the command is an INSERT statement and a single row is inserted, the OID of the inserted row is stored in the variable oidVar if the optional -oid argument is supplied.

If the command is a SELECT statement, then, for each row in the result, the row values are stored in the arrayVar variable, if supplied, using the column names as the array indices, else in variables named by the column names, and then the optional procedure is executed if supplied. (Omitting the procedure probably makes sense only if the query will return a single row.) The number of rows selected is returned.

The procedure can use the Tcl commands break, continue, and return with the expected behavior. Note that if the procedure executes return, then pg_execute does not return the number of affected rows.

pg_execute is a newer function which provides a superset of the features of pg_select and can replace pg_exec in many cases where access to the result handle is not needed.

For server-handled errors, pg_execute will throw a Tcl error and return a two-element list. The first element is an error code, such as PGRES_FATAL_ERROR, and the second element is the server error text. For more serious errors, such as failure to communicate with the server, pg_execute will throw a Tcl error and return just the error message text.

Arguments

-array arrayVar

Specifies the name of an array variable where result rows are stored, indexed by the column names. This is ignored if commandString is not a SELECT statement.

-oid oidVar

Specifies the name of a variable into which the OID from an INSERT statement will be stored.

conn

The handle of the connection on which to execute the command.

commandString

The SQL command to execute.

procedure

Optional procedure to execute for each result row of a SELECT statement.

Return Value

The number of rows affected or returned by the command.

Examples

In the following examples, error checking with catch has been omitted for clarity.

Insert a row and save the OID in result_oid:

pg_execute -oid result_oid $pgconn "INSERT INTO mytable VALUES (1);"

Print the columns item and value from each row:

pg_execute -array d $pgconn "SELECT item, value FROM mytable;" {
    puts "Item=$d(item) Value=$d(value)"
}

Find the maximum and minimum values and store them in $s(max) and $s(min):

pg_execute -array s $pgconn "SELECT max(value) AS max, min(value) AS min FROM mytable;"

Find the maximum and minimum values and store them in $max and $min:

pg_execute $pgconn "SELECT max(value) AS max, min(value) AS min FROM mytable;"
pgtcl-2.8.0/doc/html/pgtcl-pggetconnectionid.html000066400000000000000000000076001420313073400220430ustar00rootroot00000000000000 PgGetConnectionId

PgGetConnectionId

Name

PgGetConnectionId -- Provides access to the underlying libpq SQL connection handle.

Synopsis

extern PGconn *PgGetConnectionId(Tcl_Interp *interp, const char *handle, Pg_ConnectionId **connid);

Description

PgGetConnectionId returns the underlying PGconn handle. This is intended to allow Tcl extensions to Pgtcl to use the existing database connection.

The Pg_ConnectionId structure provides access to more internals of the Pgtcl handle, but may be ignored in most cases.

Parameters

Tcl_Interp *interp

Pointer to Tcl interpreter.

char *handle

The name of the Pgtcl database handle command.

Pg_ConnectionId **connid

Pointer to address to hold Pgtcl connection handle. Must be provided even if not used.

Returns

PGconn *conn is a pointer to the libpq SQL database connection.

pgtcl-2.8.0/doc/html/pgtcl-pggetresult.html000066400000000000000000000074701420313073400207120ustar00rootroot00000000000000 pg_getresult

pg_getresult

Name

pg_getresult -- process asychronous results

Synopsis

pg_getresult conn

Description

pg_getresult checks to see if any commands issued by pg_sendquery have completed.

This will return the same sort of result handle that pg_exec returns.

If there is no query currently being processed or all of the results have been obtained, pg_getresult returns nothing.

Arguments

conn

The handle of a connection to the database to which asynchronous requests are being issued.

Return Value

If a query result is available, a command result object is returned. This handle can be passed to pg_result to obtain the results of the command.

If there is no query currently being processed or all of the results have been obtained, pg_getresult returns nothing.

pgtcl-2.8.0/doc/html/pgtcl-pgisbusy.html000066400000000000000000000064471420313073400202150ustar00rootroot00000000000000 pg_isbusy

pg_isbusy

Name

pg_isbusy -- see if a query is busy

Synopsis

pg_isbusy conn

Description

pg_isbusy checks to see if the backend is busy handling a query or not.

Arguments

conn

The handle of a connection to the database in which the large object exists.

Return Value

Returns 1 if the backend is busy, in which case a call to pg_getresult would block, otherwise it returns 0.

pgtcl-2.8.0/doc/html/pgtcl-pglisten.html000066400000000000000000000117721420313073400201720ustar00rootroot00000000000000 pg_listen

pg_listen

Name

pg_listen -- set or change a callback for asynchronous notification messages

Synopsis

pg_listen conn notifyName ?callbackCommand?

Description

pg_listen creates, changes, or cancels a request to listen for asynchronous notification messages from the PostgreSQL server. With a callbackCommand parameter, the request is established, or the command string of an already existing request is replaced. With no callbackCommand parameter, a prior request is canceled.

After a pg_listen request is established, the specified command string is executed whenever a notification message bearing the given name arrives from the server. This occurs when any PostgreSQL client application issues a NOTIFY command referencing that name. The command string is executed from the Tcl idle loop. That is the normal idle state of an application written with Tk. In non-Tk Tcl shells, you can execute update or vwait to cause the idle loop to be entered.

You should not invoke the SQL statements LISTEN or UNLISTEN directly when using pg_listen. pgtcl takes care of issuing those statements for you. But if you want to send a notification message yourself, invoke the SQL NOTIFY statement using pg_exec.

Arguments

conn

The handle of the connection on which to listen for notifications.

notifyName

The name of the notification condition to start or stop listening to.

callbackCommand

If present, provides the command string to execute when a matching notification arrives.

Return Value

None

pgtcl-2.8.0/doc/html/pgtcl-pgloclose.html000066400000000000000000000063731420313073400203350ustar00rootroot00000000000000 pg_lo_close

pg_lo_close

Name

pg_lo_close -- close a large object

Synopsis

pg_lo_close conn descriptor

Description

pg_lo_close closes a large object.

Arguments

conn

The handle of a connection to the database in which the large object exists.

descriptor

A descriptor for the large object from pg_lo_open.

Return Value

None

pgtcl-2.8.0/doc/html/pgtcl-pglocreat.html000066400000000000000000000070451420313073400203230ustar00rootroot00000000000000 pg_lo_creat

pg_lo_creat

Name

pg_lo_creat -- create a large object

Synopsis

pg_lo_creat conn mode

Description

pg_lo_creat creates a large object.

Arguments

conn

The handle of a connection to the database in which to create the large object.

mode

The access mode for the large object. It can be any or'ing together of INV_READ and INV_WRITE. The "or" operator is |. For example:

[pg_lo_creat $conn "INV_READ|INV_WRITE"]

Return Value

The OID of the large object created.

pgtcl-2.8.0/doc/html/pgtcl-pgloexport.html000066400000000000000000000072021420313073400205410ustar00rootroot00000000000000 pg_lo_export

pg_lo_export

Name

pg_lo_export -- export a large object to a file

Synopsis

pg_lo_export conn loid filename

Description

pg_lo_export writes the specified large object into a file.

Arguments

conn

The handle of a connection to the database in which the large object exists.

loid

The OID of the large object.

filename

Specifies the file into which the data is to be exported.

Return Value

None

Notes

pg_lo_export must be called within a BEGIN/COMMIT transaction block.

pgtcl-2.8.0/doc/html/pgtcl-pgloimport.html000066400000000000000000000071101420313073400205300ustar00rootroot00000000000000 pg_lo_import

pg_lo_import

Name

pg_lo_import -- import a large object from a file

Synopsis

pg_lo_import conn filename

Description

pg_lo_import reads the specified file and places the contents into a new large object.

Arguments

conn

The handle of a connection to the database in which to create the large object.

filename

Specified the file from which to import the data.

Return Value

The OID of the large object created.

Notes

pg_lo_import must be called within a BEGIN/COMMIT transaction block.

pgtcl-2.8.0/doc/html/pgtcl-pglolseek.html000066400000000000000000000075301420313073400203270ustar00rootroot00000000000000 pg_lo_lseek

pg_lo_lseek

Name

pg_lo_lseek -- seek to a position of a large object

Synopsis

pg_lo_lseek conn descriptor offset whence

Description

pg_lo_lseek moves the current read/write position to offset bytes from the position specified by whence.

Arguments

conn

The handle of a connection to the database in which the large object exists.

descriptor

A descriptor for the large object from pg_lo_open.

offset

The new seek position in bytes.

whence

Specified from where to calculate the new seek position: SEEK_CUR (from current position), SEEK_END (from end), or SEEK_SET (from start).

Return Value

None

pgtcl-2.8.0/doc/html/pgtcl-pgloopen.html000066400000000000000000000067521420313073400201720ustar00rootroot00000000000000 pg_lo_open

pg_lo_open

Name

pg_lo_open -- open a large object

Synopsis

pg_lo_open conn loid mode

Description

pg_lo_open opens a large object.

Arguments

conn

The handle of a connection to the database in which the large object exists.

loid

The OID of the large object.

mode

Specifies the access mode for the large object. Mode can be either r, w, or rw.

Return Value

A descriptor for use in later large-object commands.

pgtcl-2.8.0/doc/html/pgtcl-pgloread.html000066400000000000000000000075371420313073400201460ustar00rootroot00000000000000 pg_lo_read

pg_lo_read

Name

pg_lo_read -- read from a large object

Synopsis

pg_lo_read conn descriptor bufVar len

Description

pg_lo_read reads at most len bytes from a large object into a variable named bufVar.

Arguments

conn

The handle of a connection to the database in which the large object exists.

descriptor

A descriptor for the large object from pg_lo_open.

bufVar

The name of a buffer variable to contain the large object segment.

len

The maximum number of bytes to read.

Return Value

The number of bytes actually read is returned; this could be less than the number requested if the end of the large object is reached first. In event of an error, the return value is negative.

pgtcl-2.8.0/doc/html/pgtcl-pglotell.html000066400000000000000000000067011420313073400201630ustar00rootroot00000000000000 pg_lo_tell

pg_lo_tell

Name

pg_lo_tell -- return the current seek position of a large object

Synopsis

pg_lo_tell conn descriptor

Description

pg_lo_tell returns the current read/write position in bytes from the beginning of the large object.

Arguments

conn

The handle of a connection to the database in which the large object exists.

descriptor

A descriptor for the large object from pg_lo_open.

Return Value

A zero-based offset in bytes suitable for input to pg_lo_lseek.

pgtcl-2.8.0/doc/html/pgtcl-pglounlink.html000066400000000000000000000063561420313073400205310ustar00rootroot00000000000000 pg_lo_unlink

pg_lo_unlink

Name

pg_lo_unlink -- delete a large object

Synopsis

pg_lo_unlink conn loid

Description

pg_lo_unlink deletes the specified large object.

Arguments

conn

The handle of a connection to the database in which the large object exists.

loid

The OID of the large object.

Return Value

None

pgtcl-2.8.0/doc/html/pgtcl-pglowrite.html000066400000000000000000000076261420313073400203640ustar00rootroot00000000000000 pg_lo_write

pg_lo_write

Name

pg_lo_write -- write to a large object

Synopsis

pg_lo_write conn descriptor buf len

Description

pg_lo_write writes at most len bytes from a variable buf to a large object.

Arguments

conn

The handle of a connection to the database in which the large object exists.

descriptor

A descriptor for the large object from pg_lo_open.

buf

The string to write to the large object (not a variable name, but the value itself).

len

The maximum number of bytes to write. The number written will be the smaller of this value and the length of the string.

Return Value

The number of bytes actually written is returned; this will ordinarily be the same as the number requested. In event of an error, the return value is negative.

pgtcl-2.8.0/doc/html/pgtcl-pgon-connection-loss.html000066400000000000000000000100361420313073400224130ustar00rootroot00000000000000 pg_on_connection_loss

pg_on_connection_loss

Name

pg_on_connection_loss -- set or change a callback for unexpected connection loss

Synopsis

pg_on_connection_loss conn ?callbackCommand?

Description

pg_on_connection_loss creates, changes, or cancels a request to execute a callback command if an unexpected loss of connection to the database occurs. With a callbackCommand parameter, the request is established, or the command string of an already existing request is replaced. With no callbackCommand parameter, a prior request is canceled.

The callback command string is executed from the Tcl idle loop. That is the normal idle state of an application written with Tk. In non-Tk Tcl shells, you can execute update or vwait to cause the idle loop to be entered.

Arguments

conn

The handle to watch for connection losses.

callbackCommand

If present, provides the command string to execute when connection loss is detected.

Return Value

None

pgtcl-2.8.0/doc/html/pgtcl-pgresult.html000066400000000000000000000265321420313073400202120ustar00rootroot00000000000000 pg_result

pg_result

Name

pg_result -- get information about a command result

Synopsis

pg_result resultHandle resultOption

Description

pg_result returns information about a command result created by a prior pg_exec.

You can keep a command result around for as long as you need it, but when you are done with it, be sure to free it by executing pg_result -clear. Otherwise, you have a memory leak, and pgtcl will eventually start complaining that you have created too many command result objects.

Arguments

resultHandle

The handle of the command result.

resultOption

One of the following options, specifying which piece of result information to return:

-status

The status of the result.

-error ?diagCode?

The error message, if the status indicates an error, otherwise an empty string.

diagCode, if specified, requests data for a specific diagnostic code:

severity

The severity; the field contents are ERROR, FATAL, or PANIC, in an error message, or WARNING, NOTICE, DEBUG, INFO, or LOG, in a notice message, or a localized translation of one of these.

sqlstate

The SQLSTATE code for the error. (See PostgreSQL manual Appendix A).

primary

The primary human-readable error message (typically one line).

detail

An optional secondary error message carrying more detail abhout the problem, which may run to multiple lines.

hint

An optional suggestion about what to do about the problem. This is intended to differ from detail in that it offers advice (potentially inappropriate) rather than hard facts.

The result may run to multiple lines.

position

A string containing a decimal integer indicating an error cursor position as an index into the original statement string.

The first character has index 1, and positions are measured in characters not bytes.

internal_position

This is the same as "position", but it is used when the cursor position refers to an internally generated command rather than the one submitted by the client.

The first character has index 1, and positions are measured in characters not bytes.

internal_query

This is the text of a failed internally generated command. This could be, for example, a SQL query issued by a PL/pgSQL function.

context

An indication of the context in which the error occurred. Presently this includes a call stack traceback of active PL functions. The trace is one entry per line, most recent first.

file

The filename of the source code location where the error was reported.

line

The line number of the source code location where the error was reported.

function

The name of the source code function reporting the error.

-foreach arrayName tclCode

Iterates through each row of the result, filling arrayName with the columns and their values and executing tclCode for each row in turn. Null columns will be not be present in the array.

-conn

The connection that produced the result.

-oid

If the command was an INSERT, the OID of the inserted row, otherwise 0.

-numTuples

The number of rows (tuples) returned by the query.

-cmdTuples

The number of rows (tuples) affected by the command. (This is similar to -numTuples but relevant to INSERT and UPDATE commands.)

-numAttrs

The number of columns (attributes) in each row.

-assign arrayName

Assign the results to an array, using subscripts of the form (rowNumber, columnName).

-foreach arrayName code

For each resulting row assigns the results to the named array, using subscripts matching the column names, then executes the code body.

-assignbyidx arrayName ?appendstr?

Assign the results to an array using the values of the first column and the names of the remaining column as keys. If appendstr is given then it is appended to each key. In short, all but the first column of each row are stored into the array, using subscripts of the form (firstColumnValue, columnNameAppendStr).

-getTuple rowNumber

Returns the columns of the indicated row in a list. Row numbers start at zero.

-tupleArray rowNumber arrayName

Stores the columns of the row in array arrayName, indexed by column names. Row numbers start at zero. If a field's value is null, sets an empty string or the default string, if a default string has been defined.

-tupleArrayWithoutNulls rowNumber arrayName

Stores the columns of the row in array arrayName, indexed by column names. Row numbers start at zero. If a field's value is null, unsets the column from the array.

-attributes

Returns a list of the names of the columns in the result.

-lAttributes

Returns a list of sublists, {name typeOid typeSize} for each column.

-list

Returns one list containing all the data returned by the query.

-llist

Returns a list of lists, where each embedded list represents a tuple in the result.

-dict

Returns a dict object with the results. This needs to have dictionary support built into Tcl (Tcl 8.5), and is experimental right now, since Tcl 8.5 has not been release yet, and the API could change. In order to enable this, you need to add -DHAVE_TCL_NEWDICTOBJ to the Makefile in the DEFS variable.

-null_value_string ?string?

Defines or retrieves the string that will be returned for null values in query results. Defaults to whatever was set by pg_null_value_string but can be set here and, in this case, affects only this query result.

-clear

Clear the command result object.

Return Value

The result depends on the selected option, as described above.

pgtcl-2.8.0/doc/html/pgtcl-pgselect.html000066400000000000000000000214061420313073400201460ustar00rootroot00000000000000 pg_select

pg_select

Name

pg_select -- loop over the result of a query

Synopsis

pg_select ?-rowbyrow? ?-nodotfields? ?-withoutnulls? ?-paramarray var? [-variables] ?-params paramList? ?-count countVar? conn commandString arrayVar procedure

Description

pg_select submits a query (SELECT statement) to the PostgreSQL server and executes a given chunk of code for each row in the result. The commandString must be a SELECT statement; anything else returns an error. The arrayVar variable is an array name used in the loop. For each row, arrayVar is filled in with the row values, using the column names as the array indices. Then the procedure is executed.

In addition to the column values, the following special entries are made in the array (unless the [-nodotfields] flag is provided):

.headers

A list of the column names returned by the query.

.numcols

The number of columns returned by the query.

.tupno

The current row number, starting at zero and incrementing for each iteration of the loop body.

If the [-param] flag is provided, then it contains a list of parameters that will replace "$1", "$2" and so on in the query string, as if it were a prepared statement. Be sure to properly escape or quote the "$" in the query. :)

If the [-paramarray] flag is provided, then a substitution is performed on the query, securely replacing each back-quote delimited name with the corresponding entry from the named array. If the array does not contain the named element, then NULL is substituted (similarly to the way an array created by -withoutnulls is generated). Each such name must occur in a location where a value or field name could appear.

If the [-variables] flag is provided, then embedded Tcl variables are passed as parameters. Variables can be flagged with ':' and array references and namespaces are supported. Complex variable names can usually be embedded with :{nasty-name-here} though no attempt at duplicating Tcl brace-escaping is made. If the variable does not exist, then NULL is substituted.

Notes: This substitution is performed by generating a positional parameter list and calling PQExecParams with a modified query containing $1, $2, ... where the original `names` appeared. This is a straight substitution, so if this mechanism is used the back-quote character (`) can not appear elsewhere in the query, even in a quoted string. There are a maximum of 99,999 names.

Arguments

[-params list]

Perform parameter substitution using PQexecParams or PQSendQueryParams.

[-paramarray arrayname]

Perform parameter substitution via `quoted` elements of the array using PQexecParams or PQSendQueryParams.

[-variables]

Substitute Tcl variables found in the SQL string using PQexecParams or PQSendQueryParams.

[-rowbyrow]

Perform the select in row-by-row mode. This means that the code block is called immediately results become available, rather than waiting for the query to complete.

[-nodotfields]

Suppress generation of the pseudo-fields .headers, .numcols, and .tupno.

[-withoutnulls]

If specified null columns will be unset from the array rather than being defined and containing the null string, typically an empty string.

[-count countVar]

Set the variable "countVar" to the number of tuples returned for use in the block.

conn

The handle of the connection on which to execute the query.

commandString

The SQL query to execute.

arrayVar

An array variable for returned rows.

procedure

The procedure to run for each returned row.

Return Value

Number of rows actually processed.

Examples

This examples assumes that the table table1 has columns control and name (and perhaps others):

pg_select $pgconn "SELECT * FROM table1;" array {
    puts [format "%5d %s" $array(control) $array(name)]
}

This example demonstrates how to use named parameters to securely perform queries on an SQL database:

# An array imported from some hive of scum and villainy like a web form.
set form(first) {Andrew'); DROP TABLE students;--}
set form(last) {Randall}

# Secure extraction of data
pg_select -paramarray form $pgconn "SELECT * from students WHERE firstname = `first` AND lastname = `last`;" row {
    lappend candidates $row(student_id) $row(firstname) $row(lastname) $row(age)
}
pgtcl-2.8.0/doc/html/pgtcl-pgsendquery.html000066400000000000000000000136201420313073400207050ustar00rootroot00000000000000 pg_sendquery

pg_sendquery

Name

pg_sendquery -- send a query string to the backend connection without waiting for a result

Synopsis

pg_sendquery [-paramarray [-variables] arrayVar] conn commandString ?args?

Description

pg_sendquery submits a command to the PostgreSQL server. This function works like pg_exec, except that it does not return a result. Rather, the command is issued to the backend asynchronously.

The result is either an error message or nothing. An empty return indicates that the command was dispatched to the backend.

If the [-paramarray] flag is provided, then a substitution is performed on the query, securely replacing each back-quote delimited name with the corresponding entry from the named array. If the array does not contain the named element, then NULL is substituted (similarly to the way an array created by -withoutnulls is generated). Each such name must occur in a location where a value or field name could appear. See pg_select for more info.

If the [-variables] flag is provided, then embedded Tcl variables are passed as parameters. Variables can be flagged with ':' and array references and namespaces are supported. Complex variable names can usually be embedded with :{nasty-name-here} though no attempt at duplicating Tcl brace-escaping is made. If the variable does not exist, then NULL is substituted. Each such name must occur in a location where a value or field name could appear. See pg_select for more info.

Arguments

[-paramarray arrayname]

Perform parameter substitution via `quoted` elements of the array using PQexecParams or PQSendQueryParams.

[-variables]

Substitute Tcl variables found in the SQL string using PQexecParams or PQSendQueryParams.

conn

The handle of the connection on which to execute the command.

commandString

The SQL command to execute.

args

For PostgreSQL versions greater than 7.4, args consists of zero or more optional values that can be inserted, unquoted, into the SQL statement using $-style substitution. Nulls are represented by the string "NULL".

Return Value

A Tcl error will be returned if pgtcl was unable to issue the command. Otherwise, an empty string will be return. It is up to the developer to use pg_getresult to obtain results from commands issued with pg_sendquery.

pgtcl-2.8.0/doc/html/pgtcl-pgsendqueryprepared.html000066400000000000000000000105431420313073400224310ustar00rootroot00000000000000 pg_sendquery_prepared

pg_sendquery_prepared

Name

pg_sendquery_prepared -- send a request to execute a prepared statement to the backend connection, without waiting for a result

Synopsis

pg_sendquery_prepared conn statementName ?args?

Description

pg_sendquery_prepared submits a command to the PostgreSQL server. This function works like pg_exec, except that it does not return a result. Rather, the command is issued to the backend asynchronously.

The result is either an error message or nothing. An empty return indicates that the command was dispatched to the backend.

Arguments

conn

The handle of the connection on which to execute the command.

statementName

The name of the prepared SQL statement to execute asynchronously.

args

args consists of zero or more optional values that can be inserted, unquoted, into the SQL statement using $-style substitution.

Return Value

A Tcl error will be returned if pgtcl was unable to issue the command. Otherwise, an empty string will be return. It is up to the developer to use pg_getresult to obtain results from commands issued with pg_sendquery.

pgtcl-2.8.0/doc/html/pgtcl-pgsqlite.html000066400000000000000000000466411420313073400202000ustar00rootroot00000000000000 pg_sqlite

pg_sqlite

Name

pg_sqlite -- implements a bridge between PostgreSQL and Sqlite3 using the Pgtcl and sqlite3 packages.

Synopsis

pg_sqlite sqlite_db command [args]

Description

pg_sqlite can import the results of a Postgres SQL query (previously made via pg_exec) directly into an sqlite3 table, export the results of an Sqlite SQL query into a Postgres table (via write_tabsep), or import TSV files directly into sqlite3.

The commands currently implemented are import_postgres_result, read_tabsep, write_tabsep, and read_tabsep_keylist.

Arguments

sqlite_db

An Sqlite3 database handle previously created via the sqlite3 command.

command

The command, one of info, import_postgres_result, read_tabsep, write_tabsep, or read_tabsep_keylist,

args

Command-specific arguments.

Commands

info

    pg_sqlite sqlite_db info
        ?-busy?
        ?-filename?
        ?-db database_name?
   

Request information from an SQLITE database connection. Returns a key-value list containing the values requested if available. With no arguments, all available info is returned.

-filename

Request the filename associated with a database.

-db database

For the -filename option, specify the database name (default "main").

-busy

Request a list of prepared commands that are currently busy.

import_postgres_result

    pg_sqlite sqlite_db import_postgres_result handle
        ?-rowbyrow?
        ?-sql target_sql?
        ?-create new_table?
        ?-into table?
        ?-replace?
        ?-as name_type_list?
        ?-types type_list?
        ?-names name_list?
        ?-pkey primary_key?
        ?-sep separator?
        ?-null null_string?
        ?-poll_interval rows?
        ?-recommit rows?
        ?-check?
        ?-max column-name variable-name?
   

Import the result of a PostgreSQL request into an sqlite3 table.

handle

A database or result handle. Normally, you would call pg_exec and pass the result handle to pg_sqlite here. If you are using row_by_row mode, though, you use pg_sendquery and pass the PostgreSQL database handle here.

-rowbyrow

Perform the request using row-by-row mode. This injects the data to sqlite directly without making an internal copy, but the result may be incomplete or inconsistent if an error occurs during the request.

-sep separator

String to use to separate columns. Default is "\t" (tab).

-null null_string

String to use to indicate a null value. Default is to treat all strings literally.

-sql target_sql

An INSERT statement, suitable to be compiled into a prepared statement to be applied to each row. For example "INSERT INTO newtable (id, name, value) VALUES (?,?,?)"

-create new_table

A table to be created in sqlite. The names and types of columns, and the primary key, must be provided.

-into table

An existing sqlite table to insert the data. The names of the columns must be provided, if the type can not be inferred it will be assumed to be "text".

-replace

When performing the insert on an existing or newly create table, use "INSERT OR REPLACE" semantics. Not compatible with "-sql".

-as name-type-list

A list of alternating column names and types. See note on types.

-types type-list

A list of column types. See note on types.

-names name-list

A list of column names.

-pkey primary_key

A list containing key names and optional sorting to indicate primary key where needed. For example -pkey {{clock ASC} {sequence ASC}}.

-poll_interval count

Call DoOneEvent() every count rows to keep the event loop alive during long transactions.

-recommit count

Chunk the operation in transactions, with one transaction every count rows.

-check

Check (via a SELECT) whether the exact row is already present, and skip inserting the row if so. This avoids bloating the WAL log during large re-loads of databases, at some performance cost.

-max column-name variable-name

Set $variable-name to the maximum value of column-name imported.

write_tabsep

    pg_sqlite sqlite_db write_tabsep handle sql
        ?sql?
        ?-sep separator?
        ?-null null_string?
        ?-poll_interval rows?
   

Write the results of the provided sql to a file handle

This command may be used to export sqlite3 data to postgres. You issue a COPY FROM STDIN ... FORMAT text command, then use pg_sqlite write_tabsep ... to write the data directly to the Postgresql handle, followed by writing the terminator line to the same handle. See the PostgreSQL documentation on the "COPY" command for more details.

handle

File handle.

-sep separator

String to use to separate columns. Default is "\t" (tab).

-null null_string

String to use to indicate a null value. Default is to treat all strings literally.

-poll_interval count

Call DoOneEvent() every count rows to keep the event loop alive during long transactions.

read_tabsep

    pg_sqlite sqlite_db read_tabsep
        ?-row single_tab_separated_row?
        ?-file file_handle?
        ?-sql target_sql?
        ?-create new_table?
        ?-into table?
        ?-replace?
        ?-as name_type_list?
        ?-types type_list?
        ?-names name_list?
        ?-pkey primary_key?
        ?-sep separator?
        ?-null null_string?
        ?-poll_interval rows?
        ?-recommit rows?
        ?-check?
   

Read a previously opened file into an sqlite3 table.

-row single_tab_separated_row

An already read tab-separated line.

-file file_handle

An open file consistion of tab-separated rows.

-sep separator

String to use to separate columns. Default is "\t" (tab).

-null null_string

String to use to indicate a null value. Default is to treat all strings literally.

-sql target_sql

An INSERT statement, suitable to be compiled into a prepared statement to be applied to each row. For example "INSERT INTO newtable (id, name, value) VALUES (?,?,?)"

-create new_table

A table to be created in sqlite. The names and types of columns, and the primary key, must be provided.

-into table

An existing sqlite table to insert the data. The names of the columns must be provided, if the type can not be inferred it will be assumed to be "text".

-replace

When performing the insert on an existing or newly create table, use "INSERT OR REPLACE" semantics. Not compatible with "-sql".

-as name-type-list

A list of alternating column names and types. See note on types.

-types type-list

A list of column types. See note on types.

-names name-list

A list of column names.

-pkey primary_key

A list containing key names and optional sorting to indicate primary key where needed. For example -pkey {{clock ASC} {sequence ASC}}.

-poll_interval count

Call DoOneEvent() every count rows to keep the event loop alive during long transactions.

-recommit count

Chunk the operation in transactions, with one transaction every count rows.

-check

Check (via a SELECT) whether the exact row is already present, and skip inserting the row if so. This avoids bloating the WAL log during large re-loads of databases, at some performance cost.

read_tabsep_keylist

    pg_sqlite sqlite_db read_tabsep_keylist
        ?-row single_tab_separated_row?
        ?-file file_handle?
        ?-create new_table?
        ?-into table?
        ?-replace?
        ?-as name_type_list?
        ?-names name_list?
        ?-pkey primary_key?
        ?-sep separator?
        ?-null null_string?
        ?-poll_interval rows?
        ?-recommit rows?
   

Read a previously opened file containing alternating key-value columns into an sqlite3 table.

-row single_tab_separated_row

An already read tab-separated key-value list line.

-file file_handle

An open file consistion of tab-separated key-value list rows.

-sep separator

String to use to separate columns. Default is "\t" (tab).

-null null_string

String to use to indicate a null value. Default is to treat all strings literally.

-create new_table

A table to be created in sqlite. The names and types of columns, and the primary key, must be provided.

-into table

An existing sqlite table to insert the data. The names of the columns must be provided, if the type can not be inferred it will be assumed to be "text".

-replace

When performing the insert on an existing or newly create table, use "INSERT OR REPLACE" semantics. Not compatible with "-sql".

-as name-type-list

A list of alternating column names and types. See note on types.

-names name-list

A list of column names.

-pkey primary_key

A list containing key names and optional sorting to indicate primary key where needed. For example -pkey {{clock ASC} {sequence ASC}}.

-poll_interval count

Call DoOneEvent() every count rows to keep the event loop alive during long transactions.

-recommit count

Chunk the operation in transactions, with one transaction every count rows.

Types

A note on types: pg_sqlite supports four types: integer (or int), boolean (or bool), double (or real), and text. Integer, double, and text match both sqlite and postgresql types. Boolean is an integer type in sqlite, and boolean in postgresql, and converts postgresql boolean values (such as 'yes', 'no', 'true', or 'false') to integer 1 and 0.

In addition, pg_sqlite will accept PostgreSQL boolean values for the integer type. This may be made conditional on a "strict" mode in the future.

Return Value

Number of rows imported or exported.

See Also

Sqlite 3

pgtcl-2.8.0/doc/html/pgtcl-pgtruncate.html000066400000000000000000000073061420313073400205170ustar00rootroot00000000000000 pg_lo_truncate

pg_lo_truncate

Name

pg_lo_truncate -- Truncate a large object to a given length

Synopsis

pg_lo_truncate conn descriptor length

Description

pg_lo_truncate truncates the specified large object to the given length. If the length is greater than the current large object length, the large object is extended with null bytes.

Arguments

conn

The handle of a connection to the database in which the large object exists.

descriptor

A descriptor for the large object from pg_lo_open.

length

The length to which the large object is to be truncated or padded.

Return Value

A zero-based offset in bytes suitable for input to pg_lo_lseek.

pgtcl-2.8.0/doc/html/pgtcl-pgunescape-bytea.html000066400000000000000000000062721420313073400216000ustar00rootroot00000000000000 pg_unescape_bytea

pg_unescape_bytea

Name

pg_unescape_bytea -- unescapes a binary string.

Synopsis

pg_unescape_bytea string

Description

pg_unescape_bytea unescapes a binary string, when retrieving from the backend.

Arguments

binary_string

The string to be unescaped.

Return Value

Returns the binary string.

pgtcl-2.8.0/doc/html/pgtcl-quote.html000066400000000000000000000120301420313073400174660ustar00rootroot00000000000000 pg_quote

pg_quote

Name

pg_quote -- escapes a string for inclusion into SQL statements

Synopsis

pg_quote [-null] [connection] string

Description

pg_quote quotes a string and escapes single quotes and backslashes within the string, making it safe for inclusion into SQL statements.

If a connection is provided, the connection is used to customize the quoting process for the database referenced by the connection.

If the [-null] option is provided, then if the text matches the null string (either the empty string, or the null string specified in the connection) then the SQL keyword NULL is returned, rather than a quoted string.

If you're doing something like

    pg_exec $conn "insert into foo values ('$name');" 

and name contains text includeng an unescaped single quote, such as Bob's House, at best the insert will fail, and at worst your software will be exploited via an SQL injection attack. Passing value strings through pg_quote will properly quote them for insertion into SQL commands.

    pg_exec $conn "insert into foo values ([pg_quote $name]);" 

...will make sure that any special characters that occur in name, such as single quote or backslash, will be properly quoted.

Arguments

string

The string to be escaped.

Return Value

Returns the string, escaped for inclusion into SQL queries. Note that it adds a set of single quotes around the outside of the string as well.

See Also

In most cases, with recent versions of SQL, it is better to use the native parameter insertion capabilities of the SQL server and protocol. If you are using a version of PostgreSQL more recent then 7.4, consider the optional parameter arguments to pg_exec and pg_sendquery, and the paramarray option to pg_exec, pg_sendquery, and pg_select.

pgtcl-2.8.0/doc/html/pgtcl-tclnamespace.html000066400000000000000000000064031420313073400207770ustar00rootroot00000000000000 Tcl Namespace Support

1.4. Tcl Namespace Support

With version 1.5, there is proper Tcl namespace support built into pgtcl. There are commands now that mirror the pg_ commands, but use the Tcl namespace convention. For example, there are commands now called: pg::connect, pg::result, etc. However, due to this, there are some incapabilities. For example, pg_exec has a counterpart called pg::sqlexec, since doing a namespace import ::pg::* would clobber the builtin Tcl commmand exec. The old command names, pg_*, are still there for backwards compatibility, but might be phased out eventually.

So, one can use Tcl's namespace mechanisms now with pgtcl. For eaxmple, you can import that namespace:

namespace import ::pg::*

set conn [connect template1 -host $host -port $port]
pgtcl-2.8.0/doc/libpgtcl.pdf000066400000000000000000020052161420313073400156750ustar00rootroot00000000000000%PDF-1.4 %Çì¢ 249 0 obj <> stream xœmSM“Ó0 ½çWøè",É–í+³ Ã…ÜKi» ÛÂR–ßì|y¡“CUéIzz/y4иòÌ¿»S÷â4ÇKWóÍ÷î±Ãù›QæåXdÈCÌÍxèpnÀ!ˆ‰Î™ñÔ}²ï{ŽQÐþè\L)ÙK?8è“ýÝšv>°=NÎö—FÑ'—ì~†jÿÇ ™}°·%dïپ늒&ǵ}×cÉíC)3$û¦'p¥z^qÍîf϶ü0Õ%Ø»©Œ‚N¯1 …¥­ÄŸÇ·^˜³˜€R‘æ«JpÓ;ÈÁ§EƒÊq]ø´&Oe¡ÄŒ¾%ôaµ0*õæŒoõHÊÔlZÛ ÃÉ9Œ@|qnÈ|¡:Ä0ÑU3ðŽØÛû-ÜOJzµO-Í A¼.Yë—J“ĉOH¬¢'GQY«g‘ê¬‚ÍœŠ©(’¹˜JÅ5•©¸*˜Ð¾Þ²åä„Yò²¸Ìý²q¸ÛæVãµQT}­gFFÝ‹ŒhÿlÀý³ž+ónóÕÒ(,m¢Nœ7€^®òB@iyë •õ«¨ö¯Ð§-¬8ç€Å¡äÅ‘|V®ú2µ¦B×LÉ-`Wöéõ²ªY_ÿõ¸ó­" ­U‡ à]lÕÝ=ÓD P¼r2ûVÉO®Ùrò«±»Õç/REóëendstream endobj 250 0 obj 506 endobj 259 0 obj <> stream xœSMo1 ½Ï¯È1AŒ‰ÄI®„@=°0·ŠC»ìnÝ-í¶Hü{œùJªrBsObû½çç¹WPÙòÌïí±{ó…ªÃ¹ÏªŸÝ}‡ó‡³ÔÛaL$•!3±Wþù "D¶¤¢MàX ÇîR6ÞÇÀúÎô(—õÙ dg½Ó¦÷@l>L×>&ý`„½×»1­×_‡@>³Þ”’L¾0=qŠz¨Õ[C –,ê[¹N lÎú£±Â7B}ª©3:× UôýJîj½Ý–ˆr"©è)@$ýÎô"2gva‘éB˜rǪ§zx”2p">5˜3'Ò§mjP¢?F%ÎFl¡NkømøTb|æI,Î ÝðêR_›>@Ê6xýGèx†˜Ó2ÃbÐ͘rv£LgeöI¼\øÜÕûó:®Ç:ãC½X‡(˜²¸¹tÚ4£+vz˜ô‡æô¶¶m`¯kx5õuÇè~nÉΗíÖ¿ ² ™—)ê_ÓˆGÇ–…ÛU¨Óš*æJ,6Œ¼£µ‰q^<«mŸþðº4ÈÅÒ¡ZzSŠž °o¶v©ê޲é+lKq]šFBÃpo"Ä|™fÙ òÍòWßå'n–uÀübKó÷C·‘ç/=;òCendstream endobj 260 0 obj 496 endobj 267 0 obj <> stream xœíMsܸ†ïúsäK|8f][©¤¶’ìF·TÊ%K²â²<²lÙ»þ÷83D“Ä|ƒB“ƒòA4ù’lR3ý¨Æó¬$tVº럷Ÿ®~úI:{øzUïŸÑÙÇ«ç+ºþO¹VÍ~¾®…lÆJ¢¤–³ë÷Wt}BEI¥J6«JNØìúÓÕŠë¹fD”•(næ J”(K^¼›SF”¬xœ/J¢YI•,îç ¦K"$/žæ””º¬dñÞî¬1ÔoìΊŠJƒÃËfëÅn™²4Ì]§¾çëÔ‹õa*iñµ9üßë¿_ýr}õ›}à‡íZÑ™!F1%à£Rjˆ} J+BÕêQé|!‰ÖÆð‚X«'ZŸÝ}9-Eñà¿Ì‚0eßÄmmŒ’T¹WÁ¸½«Š…Ý”a”Û÷'ì}„Q]©´×­Xñssüü´fJÉhýØ«›Þ¹-f4 ~pÒö@‹_ë )ûžWJ^VÔý¢ÖÊ/«»skýÍêAtµÙ©¸.~lv‚—º÷S~µLØwÚ~µdnHi´õ›%FHYmÝ““-㔺ÏeÖCÈÊ~z®ïêO R«[gÑ’r“¥¯,]}\*RVàã2Œ)'œu‘$ç¤"J¥»°=SµÎ\p]ClA%áŽÛõëè`Ì&¸ìîå”èâŸÞÊXVÈâûÜÝ–[8Ý{N}i8÷ÝŸ@t?gö‹²â©c¢Â))aöMTöO‹ ?šÁå²4¹-[<ÂxÞà˜¤Éýÿ¹Ò£þÜ@cu"é` ûý ½ßoÐóÎÞlïX€w¿Î6®5«´9|ãyw¤ÜÒïuñ–EžÒ†pïÚJ6§Ýúઠal¶l°¿ÓÚå§J›].b[®÷SüŶ*K­èÆ{…ÏÞ‚Go¸Ùm+üÛØõÔ>5—]¶^ÿ™P7šû˵q± ³4»éK’&âp%|;(¤Ñ»@Á èùöuÖ¯ëÛ;õ¾ýM“ÊtùäB(äj69ÕÐ{ Ü­áb/õ{“Ì»÷wz¿ŠÆ¨äpï—à^﹡­^ÁŸ«•?ÂZߊÒ{›ñ8ÉK’£´4lÉRüÒ³Ò|1ØÜšè°EIbÏi!ab¼m|;üpXö6­ôÞ³¸n#DpÝ”“ŠÍwcK×ÓƒŒ_ŠÉ–#¤Gü-ŽÉìäRLþô¥ûIÑê³¥'œƒSÀ‡ïàTíãÈ€½Û— {ߌ=ÅÌ•š(=STÛc‰ãŠ,ÅdËÐqE–bò§CÆÇÿ-3ž'Ä,àÙu„Ð*¨¨Ñfé¨Rí-<²H¶{¤©Éœ3¸mI.~&“K½}&pPè@§ ¸Ó-ióÜ98Iw?§%áFòâÏPÕ¶ÇR´Rl©KRæZlìÒä¶äZì̪å¹È «€¬bçÇH³ œª™WÕmÒ”ÆM@p³¯î.æØ”pÓ‘gRUn‚ëα©äÞa¢„“tô4Ääÿ&/MNÃa |& L·nû„hÈOR\ñÃ?ßü9½tZ¤AR÷„RL¿ßÁ˜¤˜lÉ;™U'IG?°3FVOX%φ<–«aC…Pd4¬l$Ã2«ÐH1Ù’Y•Y•Y5VyGPe¶¡JóèƒL›«ÝÈ êTÓÕ|%û¸„‡J“Ÿ'*ÅdK®RÈTFоJaŒT®šEOêµ·Ì(_·FP½³×Á]*^E%É}lðH1Ù’#¨Ìª“¤9‚JÀ*ïȪz“i˜ ׄ¿õ› ½ƒŸA ŠÆ—Á¢ñàÔ¤]ýÛÜÖÛ`Qù“‹ì$ç «¥f,F‹ îº0É’¹NAã6L¶déàq&—–¥CÇmÃBø46üàÇ]£|ö÷ýÒv @íܘEpŒ» B"Bß’û‘1I1Ù2R¯>&)z§š\:¥lÜ ‚þH¡'P¯Ðñuj·[uÞ›á¨]eÞG®_´3l•r?“-YšÃ–,¸a¡|€Fu~² ì¼U®í(Ó®ÓNž>“µðj×ê@8çžûÊe.í‘æ¾rKGH§ßWnX.¯ ¸Ôkw|0l ÷nnaÀìWÎò‡OZ ug7S!å:ˆ<F³3t2Ÿ2t0òÉûo€§­UÖ‡‡M Évk\¾[#à‚¥¨uV‘{hY'Xâ•û‘¹u‰0ÊÜÊ0ÊÜÂ#à•}ÿ„È Mo‚C?ýµäVË›68ê÷ëq‚çæÁa¢nõv¤Uޏv1¥`ÂE`Î0L¶à”N‰a˜\áD¥˜6,m€ÿ´ÙÞÆô`Ú®„›ô€MP5ýÝ%ï¨æ ö~ "¦SÝÐ ¬)è­uT?îCÄ” ¬s‚R7©ayAÆ &)¦ú9L8K‡®Ÿ+Àý„•ƒSjÏA¬€”ÚK¯ßNœ.«y¡ÜhRå6px¤˜lñÒ<14#êižúúˆ‚ž *JSì@£Ò~òÍ—@ú:Þ\ª6gGFñâ!›O.2ŒpÚ¨åQ§Ó2^'õxIB‹%ÿžIŠÉ–\—”\:¥ê¼aäÝ/ ÐöNtñ¡û9- ¯XñgwÚlmÂSs%°\CÔ%Â×Ñ­ˆØ³ê]ò/ü˜¤˜lÉÑPFQiކN@ðÄ€EÛÕ ùÊ9°\†‚u Ñ–‹`¥ "÷kÀ#ÅdK®§Ë°:IzIõth`<9€Õö6C§,ËÚj(äºbs»óG÷¤úÆ`­Vº[§ö8Õ0´z öðj~“àöPC‰ûúw£ç ~éHÓ|˜ÜÞ%IÓ¤ù ô”>ô9¤@á_sJ §¥€\ù+˜× µ³3ö†Â´p³lp´ öè¾ VÆÙ²O ¸­¿ùD^Ì6B»F«za¢)ÖÐa²eôRô5tèîEI¯¡&À)˜t‡wtË´»tSƒµ=‚oÎlörJtq=_pÂŒ¨t»ëœ=lÍbUñÀ ¯u€,>Wç‹@ {ŒÈJÿnÐJºýù¯ZÖ µ{™TÉð‚ßÉ ~[.IšG˜Šaáp ¡´ý¦«f“”Tðà>%õŒ€ô÷бž)'vý•WÌNî(’K1Ù’\:Ò‰‚ ½}ó°`ò>p©= óæR‡ïbÜ$¡IEYÝêC0–¨7«R0ÖÜõ·«ÿ%)øCendstream endobj 268 0 obj 3270 endobj 364 0 obj <> stream xœí—KoÔ0Çïþ>Ú‡ 3c{ì9ââ@QnˆCtUѪ­øü8Ýd¥]QQ*¢²Êa½£ÿx™äçÜY²Ø]ãïåÚ¼øÈ‰ìjcz»%ûÕÜÿਲ¯Ú^È–$•dÛkC£C&È‚l3`Û®Í'÷Þ`!LîÆ7…‘$¹o$"wïÎÊÁ}ﵘ“»¤®õ…!b&w>:…à.<1ˆFv·³]¿L‚måÏí;ó¦5gµªÕñz„¬‚ Kœ×C¤P+•"@2ÔC¾IPŠjpo"°ÔfF¨™‡Ú†Ýɺš–÷k ”˜ÜeŸ¤„j½íÜjì^ûXcF•ÚŽÓº ¥œdoy>ù›´WÓrã$Aɳ&üöÖn£—½V€W@-û¢AcJùèò$}é’r™¤Ý¼×8å:=íU?-‹ÏzùÒ=/B ú,¤Ã¸dÀ<—ÅgýäÒ?ðz íR€ñí”(u7‘BÇæÂW;Î÷wê ù¯±áX »—íEUBrêiAato·a9ªÅ±’w˜¡÷õ|±ír¬±-$]È»ä$=Qî’þó7û‰rÏŸ7Â:H¥Êáݱ~XÛ ÁLªÃþ75Ô”Pv¡ÎÌ/‚ endstream endobj 365 0 obj 489 endobj 376 0 obj <> stream xœí\[oã¸.úè_áG¹¨5¼‹ìCfvN±mwºúP…“8É`çæÌîüûêBIGÖ%²Ó¢‹6™<âùH~çãMK–ò%óÿ•/îïþ.4_^?/òçK¾ü²x\ðò¬Ìµ|–gKÁR£­^ž]-xY ãif˜XfL¦byv·øgòaϸÊlr)f¹TÉfµæ©QLÊä!È2ì!ås"ÙÆŸŸVk‘¹”qðø4õOej…E寖¸æÉÅŠë4³Z$·…!#M²öI“:î’³P¥"gfy‘ŒKž¼uÿ¼Z³Ôrë¬Lv¡ÐeH¿ Æ.„ JkaeªµL~hd-L‡§Oþ)·&²„Gf.ó9O-3<ùüÿ×ÙŸ}¾t©3Â(ß*K3íìr-]*}œ]ú«µN­uNúÊTÉýŠAA­…GÈ[5žzÇ¡04Àçøû3sÝ}^Aï5ÌÔjxÝ@+Gcëò“~’3•|BUùÁ¿TA{¹Òªä—B¶¾®LÊ¥¼ã÷XÞ„1jUò1þî[Vs?4pË öúB½À·œÌR©2\ª†í>ŒôóUÙ!µk`]eˆïò˜¯KÐ×\¤ÎÜû²«3™¼Ä¡°‹IÔÕ‹—(á ¯÷­bÐNò,\çä¼ì 0 U±sÒ¤cyHóQÁIPõÇ"©Édò7ÿ ã”ò$ÏÑ¢ìTy*nS) _á e¸qÆA^èk€‡ðQÚòÕýþlñ bþuw´¯‡š*ÚsîRðSC3SDû³•…ˆ?à>‡ºê?ekþe¹zÙ.ÞýcÉïþäÿ÷þÇðçãwËß,¾ÿ¸œÝ”Ï q ,…MIÿw„©3a*â)BU5÷Ô\Í„køW¨;ß±¤dªJ \½ÉÑvVø.\e½ IŒ|ÝCïÐ Nà¡0àaÍÁ¿"¹¿ ýù· ŸCê!òð&ô°‹ð³6K9Pþdþ>–já—'ãûw1ëeHvã'aL¤êø L3Qð;äaŽhŒÕExöb’áÊ}SÄV“ƒ*C‰ŠU¦ -ŸE÷f çâƒ)¶:ø€eÖš×·¶tjipˆ(x]©@|gš©|i¦Jþ;&/bò>&wͤr¬PyíbûÀÇF à‹yõ¯còdò"&ïcrG&·d±}Hû³aÑ1)Ç>#®6=4^%…TPÈÅu8Û¡BwQáíHµˆŠíÉ }ÝX¾ÀÎ[-h¹æÂz[¥X_¹Ü3€ŸÆ7W'§(ìsñÓ$[•‹Â lHœ„,ÈM—1y“ŸInº¢xŒjUïrEGGw¹¤£ºÇÃÈè2&Ïcò3IFWqu9_ñÏ|Î÷ðOå=Z˜Ø’ÜðB.ïêSXèí Þð uCÛÄi4Êp‹ÝGC/ö .üÀàœ“#š1SÍYñÓ„æìæ£r›of‹ÖOÊH“š0”ÎÍG“b¦ç¦TBƒ“VXyòõ ëè•”Ö‚h4«!*{žKƒùYï 6Z=ˆàjm$6Ç|{)Ðð_õXSMhºnŽRVÏÆwSl‘zLžxNc;©á·#L/I^CBm“/1yK"Ô^QwlÜJlÁ6ÿ$ó’ä:¤ö61ùð–š"’íU†³!ØÃŠBra›ñý¾3@@ЛMÊN²E­(€¡“Y©Ù`!K“?Z>}ij¾K¢x9àèN—±¡éó°Ø@³5’¼-÷ì3ã¹ü|î÷yô¿g*¸‰Ñ«8葜ET@²<«çÙÔm ƒÄ=þ´ëNs$ñ¾Y{ß\}B_è&%©f[2d‹ž«ƒ)vŠ-")¸?º:ŒãžIŽ»m>EZpô¶ÏÑý.Y®åöè9ü–$´×§™¢C ³ä÷-F)Wó5ᄽÏú•’’Õ±e!ú§ÝSy¢¼Š¦:.¡-¦^ Ö·@ ýóù ÔÍܺÙhŠ-Rbq;ö4Î4þaÀäGX,Ä1{*o¯Ü:6%µüŸ.þBÊÛ+½fƒ¢‡‘Ó&Ò#‡{NiÊõïl¼~i¦Û8ÕC¬VÞ$4áfOÓY‡RÉY•\óÔðóøÝ— ]¬“…còMmQ| †Ø)¦¬"Ë¯Ž¢ÝnzÛéTì+¹øyKÛ’/F:šBÒ§¯{«"]w ìaÜ\¢gÅ-ÜóäטÜyÑÎù–´€Ô뼸W‘b>ÜG <(ª;íÎÐK‡­[ËÍYüõŠ:!„TÏÛ„™™Âs2´~ɰŠ‹ ÅG¶@“òmmrnÑ!£uµq´KkŸÍ¥ £‰ÑøtQgBw펆Ϧâ'Ù"£Žáê«@ÃUü#)Ð)¬–H¢×îjIù-O‡qþc‹¦§&)óùœîá[ä5ºMÇäEÔˆBHU‰ôú«É¹—i ô}wD,ÏÔÁÆjlIWôöT1bÝuÄç_޵õupg©F—ã{[7ÅI9ŸHŸb‹¤K)O#Ò›r„¡uip´‘>Fx7·®Zw’PÍ ïc#X²pÀÑ‹&ôIý–ÍbÅ´ÞsŠéÙ°ì!÷æœÜŽ2M‘ôNy%:bth=ER¸õÁ±7‰•?…+ìÿÑa|wíft¦æÓSl‘Ñ©“ˆiîĤ%ñׇt9õ)¶M»ƒ”ù±q+bB¶7 è†ë·HmìöF‚Ù< 0„ÿ§¡Ió_CÁäP0¾¿vÒ7ÏÌl…I¶¨P†N2QàP_3t¦€S蛸-zk®áÏ Ò[ ŽŽf Z` h½†¾³ûº°áD;lt. óáÚ6°ñ»r­EíÆ™eD¤Ý±$ž9þïŒ%OdXñ_Ö’2ÙÛú \§ ñ#~ÈyóïñfLs‚±Ñ§;α`žžÐAº¹UÍ÷Y™I¶è[)`ê4¢]êá¢í•ÒŸZ WÀ«÷ß$9ºß%§¶ÜÆ©h×’þ|Í}»ƒÜW¿ý1=ì‡ èÛŒ$Ö¨óï÷…¼7Mkž²½nóc‘—¸NGoæ¡ä9Éš5ª §l&è 5…ˆ§ì:Tõ e½ãT zŠî­ønÄ­éÈKÜùmPØ4†#¿qã Õu#~ˆ¶õiUò›µ]›šõûz~73£fÒfÚR£Hû¯%ª¥²i–ö®øÒ72wöÓâ?¡0˜xendstream endobj 377 0 obj 3483 endobj 400 0 obj <> stream xœí]ksܶíäãþŠý¸›éÒÄ‹~t’¶î$m’ªÓé$Œ¤•eÕkY–ä&þ÷H8 .ŸÂ®í™Nf²0E^À¹\‚ïÖiÂÖ©ùÏþ^¾Y=û‘+¶¾~XU××lýzõnÅì?R{×úù™¾Q¨b]&eÆ3¹>{¹böQ¨$-Ö¹àI¡ÿðfõÓæ«­LÏX¹yµÝ©¤(Š|s^•JÆÔ殽ø¸Mµ@‘ælsµÝ±$Ë2Qlî·;.òD(¾aî©D_•")2û|uñÚkYJq¶¹t²F–n5ßìÌó*a¹Üœm™¾’1Ù½S1Ó¿ÍóíN$¼,d¶¹1RóTr¾¹­ëÊRµÙ»jo\µ·^»¸I®äæÛ¶2uádÝo™J2. „è~+• Æ7ªæŒÿ>ûË꛳Õ«wkÉS–ðjv2)ÖŒ•õ °B˜_=°Ï_¬ž½ønýxÿþjõìŸk¶zögó¿çߥ^|½þÝê›ëè²ôó• ¦x"AT^&r–¨ž9ȧæ ãzòézR•ä¼™ƒ»4ÉJ=»Ôæm=ž2/6oôÀ$B¤²)r=6y3FeQ rsë¾-"ò~¹*eÂOÐCžézü«é`ž¦EÆêö –JìßU{ñ¡-ÝÕ}JÙ>ªÔ‹ ù³^„¼È&Ë?+þ­{*À¯*ºúoÝ­û¶ØŸ(Kap;:~2å9ðkèáU»HV—í5·aµ”[½rôTH ¼P»m ¥ %J¶Šþ5œ fÆ¢5Ì ‚xaæùÓÇG”r]hˆ4å+8+SÓ÷j|îÌüâ*•¢¢S[üÅߺâ-yÃeU”eš÷Ü Å«îcUñÑo*®ªøÅÝŠ«âU¤&„A¾e–c#_3K|ÕÎkWüY„îÑPcнŠWÁc†½ÝÕ›Gƒ–¢¦“vÂAx¨8'Ír´Œ­Rf¦OÎX¨-›ŠÊÛ{_¹Î[¢c£4E¼HUßË%O4ƒ¡°s´“Z†ƒâE·¶êÞKWñk#7KŠ4Û¼tté÷Â^5ÃÁ¸–œj¦þvuöåO›÷­Éx‹­fi"r•o~ë—M¯šÚ/öр¬VV\KË<“ZÆßm·èj·_€0®ùNO+„nxhN[ꛣ­Ú˜?G{ÕF–ë‘ú˜²(¤ñ$; Ò|˜Ê‰*èT  VöŽoÞ¹«ïÉÇî]ñC[ÓG‡ÅꇕiúøöŠdì ªøž|ìÞ?´úaŒ¼ã4BÞ€Ðók»EýÞg^¥½å²ìqkqÄSó]©„æ»,aYÇmÚ9†uµ-}pòò4K¤vˆh|cÄ–\‹Ã"­]œ‹Üй*‹†Î­Š¥€ö} )–Öh÷¤ Çàê{'×Uv ÀãØS©Ÿe6ß4)«é d_¥ò™^ÿ2–bº¡|–ÅÚîÈ{†€ÿÎIrº¢èš\5ö-•{KåôŸ •£ù~7†lìQhõE´QÑ0 ¤±ïÇãùÜ»¡¾Êðê‰ ug8‰J€N¼ ëX樟l¨Ö‹å¾ ô¸µF,òrT#B›]¶ñ{¸D¿çބ䠠üì½’åØ¿}mëg%§Uñù˜gš–žПߛy^J¥ªynú‚\àŒ@U¯ÜÜ úÕ„ã ΚUõÖÇ–@¦Â@œôgê…ØjÛù ±_C¦º‹±4÷Y=ÚVk–Sh[UrSÍ4m WAmB$,àØ®’Å{ $LP…ǦV…!.ÓTá5©eÇÔhPЊ‡@BWÓÑSÑ ÖSˆÑ¥³Û_‘lŒk>v ¬ú°:‹æVÒK:Ìeà4û„šl ¤Dk2GW„ùÔ܉ºÁ®¡}êû]¦w0hOöå†ãQþž?A{9WWÍóZ$‹ŠH©Œç3Ý®eì­´‰’Mdï’‘/ºä |43àtô^[j:=šoHº½ ™nø0è!`<)^ÿGxXÈ»¾mx7/‘K€v!´óÒ\Í+óÞ·1|îœ nNq#Áì[V$ôc*G±Ö!†Óô uNrgW§ÐA—wmL¥g+¼€)p¶ &œÃ ñ¬ÁŒ)/<3Æ^™†Åæû6½‘L<¾&MchÀß[Q?@¸ù[C2ayI(³þ´¤ýÍÒÛ.¡üè¦;H5ΑZùóçHûT§v":hÒÀB\LjëŒGsL÷^Í 3íDÒ2‹dÑiêZÔI2Œ¤š‘aD{t’+­O@9 ‡àý”ö££aÕEÆ4uAûtâ)­Χò¾Ÿª—Þ``©ÓDÑ»‹X9¹çzH'ã~«—wªwóB­  ðÿ[–öé6Ç3ß ÛO ²ŒfÈ.’ÕC1²8!+²é†ì(ÅÀ»#)æv¯Ë+‘x%£?#f™Dc„L·­µDçJßZk‡×JkÁÌd “Uá›KGcùö¯t!T4ÖX"«‡5Äì×x–±7ãrľ—Lë›@ ÇFÃHF|Ãdô•«9\ —.`À0{“¡±%ª×?Z™f?°"fØ,‘ÕC+,W'¡•T%"­ÐÙGàäìçpɱ!°\ ‰KF=›áÌ×Dc„@ :¢T°·ÖH&'%ù˜`}!ŸàîœaæÃÝÏ )—Ñf‰¬†I9;E~£(Jó‰a~%#*°M ¹³ —c£Q“MF$² pénÔ>Rl4w¢á2Ì; æE™t7"]š¸5]è-ÏÏ ™r/Eˆ"+bÑÍ"YTNˆ¤NB6yµš#‘ ¬:ú5'(¾$Ì 9:–j("QM€J×ÄâëAªÁœx¨Œ ÀBæ„@´Þ‹å–;rk¬}¥&¥qX»ÊßôâªH ^,7¡:°Oç"OñH3!Œo?-©BÆz~‘,’âÔlçoÅIwLÎÓ).0 º¦óÚ±°¼ô?¯‘>v˜NfÑ !3À‚öÖ€kèÍí†kü”äÑ4âÅ;å6ÇAô¦:ä™[;É öæHðå¶Í-û4ýU[çO·~>äe<óq‰,’[yyó‘åÍÇà³nÞXÖŸ0âÌz<|l°,XÅçape!?ŒÎ;³µÎ©Tþ®ÇÙÑ`álÀílkNæäÊKxO‘UxàñNoó¾ôÏ›¾SœLRTZæ=oï]¾ìÏÛ­Í Ê?ºc¯Âñ¤´AîôËè±S )¾Àó1Îi_E9¦Oî"õé(—ÏŸ†ýü›²xvòYtäQ¤i¤%‡ÙœEDK9  îcô»"Ãq?yt`jæq‰ÄÜ4GÃcô‹#¯[æGƃh˜¥£}kÂ’§‰àóMðZl/WðBE;ïn‘,šw´¨¹›'Ëx'Ó_LåX3oÜÕ;ò103礓Ë;.‘x'€¨›I9|¢ƒÏ;ñ áÀNªƒtqÚû±ñ±sñ-·ª e:íô‡pcø‹ö­…ujÍ8-¯~ ÊõØÄ¢³%²zè,›í]/£3•'Y´”x­ýv,:;60–Î\"ÑYÑè,D#tá`íêÙ,K[63/Ö›^1Cꣲ™9üLKÝz:qÍ™~²QñÞåY$‹~cT‹:É»VAíe@Úþ²䜓±¦&ÿN–{7–˜ÎÜws.)/–±¹íqx‹õ@n°~oÖwf¡ðrrú.T<0G4$ é> 7ȪêzBŽ‘nEîµB2s°YÐgûæC`–;ÿæ*üÞéªîd‰ÒVöÝÕ·\hWB|ê;Cùæˆ|ÿ¨„–$÷ÔÇÞn›‹¶¹>h»¦½»V5î'¼¥î ½W7|zóôýKŒìPè7Çàä¼°È£*i­ÙžeÍæ%á“3áL´³¾W5°"Þq dÍ[º"½ôÖLkwÁ›=áö+wö ššAR,«'j—*‹fI=9Bcä ã‘ê •*ó¼–û¥wCСܠ†÷_¶ n–‹é†e)Ã0À¸5+Ë;×t§õ½®ƒõÓ*‹S–2u¢Â/Yv¼ÜæI^()°‚à`{­ýþeFí@%^uØ„Üß½Þ˜ÈEªîuðP.p&Æ-*¡m6·$‚Éaæ†s¼·m–ûžS˜R†ÈÚÕäKe¼>¼¦ÚBï9¼ÆL JBÖLÚå§Ø4_ñ3_ 5/rž‘Æ–y߸͵˜‘OVÕ®ºïˆv_9îÌN¿ÊjÝR%¡íÝf£¿æÁƒV\»[oɧÿPäÝÀU•Gœã"¹ôÕK능DbCSqílf8±¸zðÖŽCnêG2›‹ ˆ ²4ÞÚ®I•ׇî4iBh6"XË¥ûu3Sš>ÑÓç©Qê°¨>Ô+ÇÄád³rI: β_ù%¸¯™#¼Üü–m?ü¶m[ê t6'Õ‡uû)›ôÇ̘£Œ”è1)z- f‰ÕTžEqèe,eä{)óe;:wgG· ?_ýkn"r Ø­!ÀÉÍvúXxøBÊ…7¯­vÃ%ÞÌX—ðxk©f>üê¼:á£E &¦ÛÔº'Ï[Çè›¶ô'‡Û‹ øÞ/9:zæ§çV™ˆ6]ª£~;Ÿq¨¶îÊÍÛCÈië*h4¥âh¸ºZ?<uÀHz‘¢kyÓ/RDZÀ/`ÐÚ5¡r£>“Rja´GªJgŠ6qž–ãÓ72sä¹›N½Û,Çí‘‹ÖŽgÄɔЭUÅ@ßå’•¥=‚Õi|ßVnvˆ9óâ‰ú¶‹GT¶^ôÅÿ5öñ|= Æ–ôÞ‚´ÍEKö£gÁddõù¹;%ôízUÝãa®ü«ÿ+©endstream endobj 401 0 obj 4337 endobj 420 0 obj <> stream xœÍ\moÜ6>ô£Å¢_n·è*⫨ûÖ´½ÖEîö mQØ^¿ÁÎú½Iþý )’3¤F»ÞÔMŠ5£¥(Šœyæ™êvÖ6bÖúÿâßã7{/~’FÌÎî÷Âõ™˜]îÝî‰ø6öš½<€ŽÊ¸YßôVZ=;8ÝñåLÓºY§dãà‡7{?Ï¿^èÆH+úùùbiç\7? ­^3¿É- ¨ÚNÌOKÑXk•›ß-–Ru2r.ð®®jÕ8ïϰ9ŒeŒócëʳ–ó¥¿ß4¢Óóƒ…€+V躧þýæ/KÕÈÞi;¿ð£v­–r¾že[3_ác/ð±ëb^Ré¦3zþ*?ŒŒu„cÝ-„i¬ÔŽ.ÑÝB5Æ*!çïà ;!ݯ?øí²‚îÂRZ=gðnîúnv°‚ 8^@w.í@ß«´ÄFØa(Õ뙃¡àíÆ:ØÏp;,°l¤iµ /›¿aó›·Ø¼ÂæEhê¾õ{œ¯žä&û.¦…‰¶"Íâ8Ow~/ñf±Ô°ž°8´y8ôUÐa¥k…›p‚æç®ûFuyXèJ¶î 7ô}À :>àŸz…¿?Ò ¤QO°kš–ì騧Q²}ɸ÷Ø¼Åæ€`zXVn„l*l~ž›,® Û5­Nk¸×ƤÎ] èÂé“ÐA[\tÑÂÞ¶"‰…G'®pÑx†®ËA [5—x‘ZÔ4Òþüï!HœíiVn‡ëó¯ˆ4¾,24´Ñ8)ý{~{°÷ãÞíL‹Þ6:0ÜÍ„è{°¦—už‘¼Üß{±ÿ¯ÙÃÝãÉÞ‹ÿÎÄÞ‹ïýÿ^¾þþì3ûÛÞ·û³g«qÃ@€¿0&åzÿw‡¡&È“4’#OBk‚çêÁŒyú'ÚîÇ¡iÛÓéêqÞ,Ü¡4ôõZzâMt ÊWU²þ¯ª€ Â/ôU¿ñ‚Óµ­³^nÓ[Ýç¾é]’% w7¸<ÃJ˜¾uÔ¶]£0®ssz)ŒÕs´Ó¨•}6Áþ±Ò+J'é@êyöº¦•X+áöú5‚þw;Ølú}¯Àz³pLÌbÇ/Š>Æë/ý™<ùŒÒRJV¿®§ >ÎGt}lÖfᘵhXFƒ…æ>6WØüeΚ¿5û 2‰;lÞ`óKÀvã•ƒŽµ*~'fl©½Œ„ŦÔc‡£L`…Í_Åsj]ô‚šAéÙµ6É(AýŽ€ÒÅB‚ÂxGö÷…¦Àž®Fà«}`Žž‹Ý'çË£ç^êÒ)&Üwì50²-<Ýë4ÁðhØùd—8׌tM+ž銛t‚[‹÷“)­hOÃH‰øMïsב–ö—c/4Øí¼oîÅGÝ)õ͆twõ6~ÞFËO6Ö®#ºF SÀJ'šÎË¥±Òg®ˆ°Äªoñn'z¥¬çãä²ì`÷;5åÅ\·°«ÊÍAÅ•³¶‡«q4MÒpÕ‹ø¤ƒ À«±ùà3ÎÏxVßÈðzm À_Ç ë#ñ.è&Öy%Jî6(Û€'N€ë"½_ =SÅnp°+|yÚ1FÆ%&}¯q0œ$ë„é4Ü©¥Sz³¬Ù˩Խ%Á1ïËFZMâNwùâüï!ö`z­ÇA¯ïg’ÁÞàM…·Uãìs@ðº¤Æá°: ñ„pXº C=OÁøuà"8‘ñ#´À{‘ñï31ÏÑ xa#SZ¡ÙœÜØ•Sö\¢;}Å2¤#–±¼‰06Œ—!à–$jBÞ“‡hbYÓð>ê‰ÜC±’Cl¬žPAj€Ñ˜ÄE|$›·Þd^7#ÛRÅÌ.X*pˆ\âíËÛ!v€:Þê’Iž³õ¹t}y5Fû[õ‘ UÇÉÖ¨_¬*ó*s…Î4 VI“êa×T€W{R¤.ÉÀ(~W…ŽYu“FCyDÜY¿d;Õð1¹Î£%u#ˆsAâe¬ò±·± åjج2â¯òºþˆKò|ûû"Ìo+Ùb‚t>`^>-¡×ÉB´ •à ¾ã(ý8Bœ9ý(ý|•Ýä¥è\£5Ð+ÀjÑ÷£<Í!ëS_²ˆì÷\-!m•eÒ;$‚K»;v°×»îp›ñ)]m°i !ò¡…Døÿz °ƒ´?ÁL¢½$Ñ~˜ÅT®€ˆOh2‘x€;œÒÉŠ0xˆ|›kt£ðâ/"Fh’<»”Úq³|úZÉrXÛ î–~€›NÚÅK&692Ⱦ•È@àmfÂy$ÓI8é˜\ÝÊ”@óã*Í™òNSL,v*(¹2> ¥† Eæuš÷tWµ^c¸Ê¤Ä ›Ûš ×Õ¨¨|‘„ à`œUÙ7šXê4ŸCäöÄ^²ÎF¯¡b.x¼ÿ71w(«e©E²v,š©Ì+ßM»QC¶¦t7oÂ`«Œ²Î)â%Ý€PãðËš»8††*<4б1‘ Ÿ[“–Ô°\ÖÕ(þâ~^*ØÉ0'L‰CÌ ºÖOiÈmkoòKn5à+Èg9dÇÓ qÆí¿.0r¨5H,q }ö`S”˜v$Îì Ìà¡S©€Å#ÅåB¨¦w²å³µðÞ[ÉÓ1ÿx^n,3¹Öëüë*ßA÷ÑbÓM¥1,ð•(°dßóØ•]uå²h™êzY!«‚¢T¼?).³%öçh?_aSfî’«P™Q”&+¯Â„­¡²DœËÄ4À,¾]ä¡3ôß'§£›WÑÿ°¶ëš5©Êeƒ—™Öô/AÒ¸)âå-ÎKÓ³a©éú¼h–¶Åü§Ò9%€Ôõ5 HšáÛ$ùGœoÌÁñ¤¡6Ïë ÎA®ö#­‡‘d®2ù^*•K2,Ý;–ìñ5Tæ!{8dK—½ÎT7p…¾ß¨t14°É—DŽ8 q‰ÂÕŸÙqIù´w!ÅIç¬Àð™U=… .¹íëâÅ>nEÒÍ÷ì¸|Jû×-R-]yZDDÀŒçïâHmÁy„m&¨„Ø»kZLCogM›Ê5í.žá4E.»u~82G0ýÈ̦C‘.óS䇢ºup Aã³_†OJž<ÀõÛËÒÊñÈÉFÚù]z,MåÆT<Ùrò°cIJG¼G &&àáÝŒ¯Ò+âÇ9‚n0Gñ;½ÅÞ›©ÈÂtIjÜ…’ÂqÞõd.,uMé§^N 0 •Í»¥7ê»Rš1ŽI¿c‘÷( VZú`"Õ(Ó5)3ÃÊþÑB¸Fô4kvVh¿™( HyÃXP‹§=÷+è‹8UºTëšêÛ =xòEbJK Ò Áª‹è“>¾,ÏŽà)}ÞŒEŒ ì”φNaØ Šf¤+_ܱ®¥¢8÷¢ìD¢,;vÒ›~Óѳ1RÒd%ÏÑ´1‡ÁÚïD´¥"gDÎYúÅÇÛI¡ØˆÄÔ¤ŒÜö)Õs’Þו¶ANÎ[Á­fn+?ÙÂß+DÛjWãRô¼·™ßSö*ßw][´pÕ¯4Àœ¶®vþ#4²Eo„W7[âÕ·E1^Örß6ý™8êZVäDãz‹¸Æ–ñ¡Š?ñ&"þ±[ò)ÏúXÞaØ2ƒZòë¥/)Ù…¥d°uèo2@Ÿüo&ÇÄ=aâgœlKETª àä¸Íà€üÁ3sOñ67fj'Ÿ?÷¦§h )uXE‡®Žõ§>¿•jAœˆV«E:¬¸+v(„äO…!ëHž–±[ƒ.xÓûÚ¤UÔNØþû‡p½É‹˜¬[AØtÍáRI‰P‘÷ïàô•€*ð%Sn§\ÀëÄé¶¥U“¾˜$8AàÒàq¢q¡ºŸ=#ÞÊ(tX;.—‹\N<íløJÏ2:ÉΌբλ×ý')éZ]ËùˆÌsЩ P0ö³ÛÂU@ùâÝ Éˆ ãEâdVò eIUâ/ÐÃùÿ¢í@ë)ûOù9ðXøÐ ‰ž²Qs>ŒÀÇ÷cøÄVîGÂäËEÎ{OÀ+<|¢Å9¢DWäðïñ§ß?«Ï¼9^B”*„3û[Žq²ÀG"«˜œÐ~òÅ@EÁ´@o¥ëwÎI¼«Ý½º `chÁ¶Ch¡Užý>@O×OÐ3"Æã³µ“à?„ $“ñ{…Ööùû U„ô ÙÔ—ùÓ?åÒ]:üia½/¯;PvØ×‹ÞÁ°ðJ_e}!¦Ÿ†ÂspBó[Í¥âNvìân“M'G¾É®‡s(½öI¶-S°X›C&†¤ oäIbc䥒˜X­¤¤|u[ìaªz€ôŒ–ñ&¹žäÉLøÜÝÔã“ø¾Y1Dì*ógŽAG¿CÊÑJ¬™( ¹æÙŒÀ¯Ž¦’2 ðŠrzÌJߦz¬a|>Óø`̤žxé§RÈšP¾N´A ÂEÂkù0{qxv¨¶¤yýu)Äôû(7ÜXfÇÿ¤4ÛTå¡å=ÕAèk?rr=I½7v ª°¥«bûe9™œ.éܸռ DöÚ}çŒV@OÌϳd…(…ª½dÓ‘j¾]è=ny§¹£´,Ô¿‰Òî©»íçð ÛádéÖ`@ù†!%”0@vãƒ6U@OÚQÉc±g^WP%$J쓸\ê;Ø‘²'„_W¡‰‘ö==Ü¢dQ˜¹ œÜnF Z˜ù<ÞßóÔ(“c eMaŠ«²¡]^ãyœ¯‚¸a³5¯/U¨;9O¥Y?¨¬x*C þo’ãDQ£E ²xÆ•Rë±V­p.‚¤]7}Щ‚G¬5Š6€FÙ²Ö­<ÊSgZÍ–[9Z•µ ŽDO.޲þ :¼àhÑQ@eý7œ%Þ*¤<"ôäÄm5ûì•ÄUôóO:¤Å²Ê©ã*¹Š2Ä2»­Ñj0¾Ì‰ˆÕŠÓ«­y£2ô2Vý:Lqºá(;ÈdIewáÜålù?ÑEíèP6.VaOà“EáMOúÂWH4%ÆcÚ'†e‰R§”Ö•þ§Va:7øìVL– Ñ•:ÀÄœÒLjûg(3%a‡ÈÆa±ãaÈ!ÓRïý,ðù[s*·qQUÚ奦£Nõ]D j=|3À£=OÇ|nƒ¬8•c.4ÀŠ©ÛÙì†==XA9:>[=}ÓéÙ]ʤÛfû± "¼Däi©Ü eÿP9oãÏ Q ¦çš{daï™ã%$RA™,UäÝùñ¢UŒ¢2ña[ø|%‘‰Ô©öUÞŸþèÜîÙÖ®©9ùVóµAI5Ñp×1›è'Éþ+6ӹˈÐ=„éú²áïq°áÄØ6AE9&šA*ñ?èã Hœ´ü ¿Ó·P§Ï: ?í+ßpú_~‰táÑ­ÐääÕÖ.MnÜ–u ‹‘b/ÆÕ”<SW…¸0fœçq%01¾?¯®—ÛШ*ü ŸæÐC\5ó§æ¹üë©§ ºLú¸¤yeyv*ÝŽgþªR…¢ ²²¸£ª¤Áè«(µT±‡/:G›·Ùº?ÏYþ1· Ù"2Z~7[ƒ8æÞoi«†Rv‡o*ý¸÷ óOendstream endobj 421 0 obj 4679 endobj 467 0 obj <> stream xœÝÉr·õί˜òi&åî4vàCì¸*I©ìØfr±]*îd™")rh™_’ßÍËðz†¦%ÙNé ' ¶·oh½]M#[MþOüûäÍÁŸ¿áŠ­.ÂøŠ­~ ^pÞK)ÎÖ'e¯k¿Üš¯¿^ÌÈõá†Áˆf²©˜ÇoýÙf#wVêõ•ßÕL’óõÍ|–žÔú´{U޽©îÅ…’ëWù0´×qÙë~ÃÔ¨¹´˜D÷1*-_?…Æí‡ÿôìÒ saàZÁÌà6JãÌêððÍ G®'±>X+áwòdwN¬o øè'èÑX¶~·alÂ(OÅtD*LÝFZ_±oãÎo•¦>øû+'¥ç+W NâE—ejd¼pbFP8¹²0xâ´nœäÄAÔfÀ{>ré&hÁ×|(àÛ^ðª€Ûže$³šà¶K·8Î|?SÚÓ÷ªóiþý"CHÀ?õ„d£lb ü~[¸ÿ¥È÷Æïï8ÈB"¯5‘ºäh›Å;ŒéIWJ…®t]ˆï‰¡å8Ï6l…æýœwGê…¡­N2ÇðèG3~$s7cfí'…ˆËG<)àä„‹ŠŸÊPÀ`M:&cÙx$e£^¦W¿^ºÖ¢€Ÿì–9`’CWã0*€EiŽ×Òó¬ð·”húóÅ4*¡*Žë‘Ñx£“>6f‰ä.[†YÈ9磙lm9`á¬E–‡Vq°H¹Þ'IÂÊ V9‰3ÒA¤x<*s úÈ-ôîjtR©tÅW ¤©™¹ÌÀL`.˜N•™ËÂöÂa=Øæ„Ð4Ì ‡ f%Ó(ä,ø3¸õs•õËN6ÌÜhˆW}î%&=[î¸êMðxœOƒ3¶ÂÌÌös…Ñ]´Ô{ýͼÉa,£…cÝ{PHÃ%E»ž”Ñ2Á“NXÐb‚òêàðOße¬MF:˜¿Àj“¶ñ Bï¦ŤÒ9ͲB@Ä8 w×<™¯3HP./Eq_n€ºÒê$n½1¡´óúåÇœfEüq Â#Ax!¹(àëžð¶€7$•öÇ˶$õCó³¨ÿõÐEFqÃåÁÃÑÞsqì28~ØtAÊ¡À í…Vu.-Eh¯`ð̘X‡G/±Cæ’J:¤¶u ,V¬ÚOÁ”Y­ñýŠ}%eHdÀA‹¬âßzÚ3-a¯§$pý`“Á6À­=wõ$Σyê•'µ³q´©nYK”š¤ˆÀ×<)àmoZ™ÙvÙ6¹[âì싌:=/àmg„¥5€ð¤QA‹˜€@±Øtˆy­R°*7p–€O;•Lu&bysK6â–d ºí9÷†’IÚË&1Z¢8(‹?}_‘|6#?ºO¤ò÷ó6QËvý!b :Ç}¾áz¯1Ð3LÚú?ݜ첻ɯ:±ëì(­–“Çù8Ydßþß' ©ôG‰œ¦"Ðï?xê“6©”W¡ABÎæ±‹þ–³û³œÝ—Œì$C!#dB†¾ALÓP+ \«ø³u*æ{á÷’Ò±ŸkÐ5««¢¼¶(®«:ÁsŠ¥?0·xÀkxy‰iøoW'|Ù]'°vý/Ï6Á&‰÷$+ïM6”PqáÛ¼Ó×¾Ðg¦É‚½òG™—$@|áª)?‰UC"ϱùÏ%Å ™û\KFuáD­Pou”n¨b1*‡b³™Ûz)à ­šZŸDãhl“Öÿ´aJNSUŒíDJÇýŽ(—»‹"5Ï|ÝÜ‹Ë3KH·Ô§xfÕÞ#› ZD‹ö§ñV¢ºëQ٠ɾwk±ôV¬¤˜–öRL /2~/¡²ÙÏJÀÐ¥Q§¨k$Õ*ø…ÛiV÷„"^¼ÍÕ„‡ÜEô»+½Ó#R5Ð(ºV‡êEÓ(PÆ#à ÑÅÞ!õEËènôe”'£›¾ñl€ªû^v¡EꛦQy:E¨ LÌEÑÓ×D­Ì'ß­v–ÏPXN·‡¶IM—¦º ‡Ú³ü bc¥nsÒ½gÔcñª .ݳáeªzƒ½U{Vl¬k¼¡}®yj±ù³ÈB!õw™î…Ù+ Òª‰F´]ÓµüÕzGú©®M½dˆtE$uмí#õÄcW79bÌT(u9µ“^ЈJÅ縨^s  Y24žÐÁ lË£üð¢y2·æ]ßšo‘¤ MZÅî|O´iýÒÖ.³•\ó,½ëôJ†.p (þ>9I±9  ~ëqÕ ^°×§Ås=Cɼïôº„ùùÛ¦¶ˆÑ¦—V»'“Øuîõ-ˆÿè¬þISÝ+JApß]5În¨ÛÔ熾>sÀÛY\)6£íQLòØ¡^D~ŠŒö§ª I~ˆ’cè Lc«I=ûAÏ/IíQ掞 &JNѳ”å£ê][œk<œU{¯í9^òçƒðˆöÇÒcªÄQÚDæ\ÆÐa<šZ~¯Œ±wˆL«9¿HŠ4 ï]D¸_÷ø¤Î"¢¼ ¶™-:.A„ì£ø@Ã2ó{Ã,°ûýC%‰T/õÖ%\Ÿ3dÁëpaŽÍCÔRÊÜ"Þ)~ý‰ÊÅ»4/xÊŸë0 ›¶Ò’ää¥;­Í¥–û èƒrÎ]È%’ǶÏ+|QõÑQ±å¡~~.Fî:åÎÛO—Ê*_FÂHå“+- äâRkaânþ!Ë"d£¹H|?ví é$goqm«4è¹H™}f±&€»Š5Ár}UFïÚ ¼ÚwÚCSùé+jáò3¨œðû¯Hµù5¥oUº :\ÂÎïiˆFÛ©%´òþ©ëG¬‚QOJ÷¤ì÷BÑÄž£ÀæYùMò˜ <Ö,i_³OÒ‚®X¿¬#Î}Éy£*ƒ˜„/ 7îý÷£ïωuŒ©ž?¿8“Œr1Æü8ñoä‡n(—Šœ_àªô¯ò‘´ýʺ܀¥ŠÀêiÉÍÇí) B ~QÉÉœáL¾ä;´•áÛŠ*Ÿ‘ËÚck_s†KÜóþ ØeŒJ¥XÖ¡@ÅkëL®ÕCQÓR…CÛ¢h¥©£øÈŒ;/– P Cñl©ѦíFä®—½YåFâÒÛÃ&h?«6edÁû!ÖçÂ÷,Náê[]]K&ý¸Ó#ÉohÓŒxÖU¼S®âý 3„°´ ê¶1þ|ƒXîi¸§ÃÞR‰’ËgU¼‚w¬‹ëMé©Á»ûÎ#%õ¡¿Á1áлÔTû>šHªÕ‘¥7nKOPÛG “–ëôó‚ãÒfKZŠëÝ– —®Ã°ø]SüÉí·ˆ}€…bÝ».ź§2—þŽ«¨úœˆO.«oöÔtÕ}†ôûmd­‘û—u ¶ O%} šSêݸ}!I”Éhjg“’»¦Œ)îýe®2³¾_/÷‚[°^…4ƒ àð€ ‹gså`ób®ªŠ5qeÚ†y÷ò¥Z:sNÂõˆß&P^§ y‚ƒSâzõÇ4¾ð¡š:Rm‚§B¢~K 5V!¤,ÙëÑkD¬Ö‚šÛá}Ú moÇûǶbg«×´!ÏŒÈôœøþÞ· ê›þÈÀï1Ï6{›ï7ÞI±qÒb¡Ás‡u•p¸çä(šK¿€HAÁbÍþZWï³EHKP’šÄHK%îêµA£¶ä\"u—ŽN£SÇ rþ"pWö„+kém³z”v~Ú‘¿ÞÛ ¡£Òö‘@SžÿV~ßWSF•âTEpÕG¤T½|1&¥beºÂú”s Ñ×ÇI·OÒgâ°ž|Ýq¾1p$7¯_êæPöcÔLg?%®½âi^{äøq¼ÜǸ÷Üdíw¨ò2¶\""Ý’ZØ&n35:Ÿ÷Û$n{:ȵBeŽ/ꞎý ë¯N^w‹j>mòóœÙ•˜’NfÚîr¸,ÒbDY$n›Ü‰¶ë/JërùaT4ZïWÍRÈ-*!_ªÍ„޵m‰«ã­«†ë³V köfU礫B4(ˆÓÏ'ïl"¾è3|½ ·¾ïÈø…lÞ†ÆoëÿÒ„,Íÿ7¢õüÀzðyQÖQYep_| þ¬Ô—endstream endobj 468 0 obj 3541 endobj 540 0 obj <> stream xœå\Ks·®Ê‘¿b©ònJ;¼rå'®²'±ª|°rU¦HI$å(¿>@7€Æ>襤JJ³ƒw÷×_7óv1l1úñÿÓ×G_þƒ+¶xysž/Øâ磷G,þ1Æ·_»…šv°šk¹8~qÄb1©aœFðar?¼>úiùÇ•×Ì./Vk5LÓd–ÏCÉ2¦–oòÃÛÕè£aËóÕš Zk1-ß­Ö\˜A(¾dPkpO¥&뇇/¡8·¥gËShëÒ·åFÍ—k__ ÌÈåñй'šÉúMÅüü–_¯Öbàv’zùÊ·jFÉùòjîKjyݾ‚n¯Šqq!£äò»ÜjëÚz·bjÐ\Nx‰Þ­Ä ´`|ù!ŒÐ0>ýëøÏ~¬\L®G7d¿ aNnCÜÿƒ4Ö,ŽÏܼwÝ\RøFSñŠwP<ÏŹ7T¼Íܸ]¦ fùl¹ZËëQ¸µœØ0ú½ºö¿ëÁ¸þeµmÝÖú©¤WÑR¡ÍòýK>(eýXýn+üZ†Æ¬M’៾ömYîV jìT{¿bÓÀÇQàf/Aàî²úˆqPnb×ùá»(.Nü*éöH߯ÑSxõF}Eijõ<…WɇIظ]Þ¹µÁëƒEòŽ–j=JJ†Þa¹ô›©ì8¥}eÊÏÊ‹—r˜’°ÜÕMzÃ9w’ÁKaȚnjã¤YG\.æžFG蕤«„©xÙÊ›ÑË·ðï5Œ÷4ö<ë!ê×/—`ÃÄÆ/¯(ƒ•J<ôôÑ\tkÛÑiãÚ\¬™{I|^П) ò‹¿@ñŠï èA˲91þýj­G‡ÑË/  H?Ïð!íh"|„â%ï xÅ/r‘D6òAèM¦å?=B 6Ê®xoØÆ‰Åmô¯6»H™Yæ(ªOê¤úgI\û'؈¥MFJý3Ô¥ACEµà÷ ¨DŽªÕ„0ƒRh#”ôMü¢À¥fÓ fÌ‹GˆÆ}W qF3‹1ø®ž¸×‰ÛlqOÊúQéÎëÕð•NA»žG0q¬B&ayÓ,–¯~–¦Êöà ˜­ïi-¤d¥mqË­Í@¯˜n÷<¼f¡¬”ÄžûZð;ìBÂÙÄ0æJ"L´À!…"Cóâª={¶»n:¾“ªuõa;Ù3ÓƒeÖR=£rÀj ©>[y9ÄF«æ‹…t¹5¶r bQ˜-7w±êj’—iYP”ƦT¸‘ ©A`€üe®„(=~4˜ Í‹P׸ƒj13Ì6¶#( YrvÉ3ýL5g®,Í”–ÆZšVis¼&ÜÁ À ¡toÖäHr«±z}ˆ”Gº>M¹^VS¯ÕH1Šb`Û‚V "ôa$ Úy Í…VÊŠv„S0’N-„[åÌh«flB‹’¦&qÈ$ß;Prƒä¤§ó HÅæ&¢âwGÇ¿û) hK2n x»Ù›`^òGáÐÖ¸¡Žl–¡¿!wg¹Š³ýÈs÷Bô"qt,z×µQò –Œ’áÛB¸š†‰÷æŠÒ•sx|~±ªöcõÈv¼.?mHãW„A²™ÀÌЄ@^J´H²I i…·´;ñ d)“çS3›Ú]™­ÜäP£µr¢ê*Ò}I»+Åú6Ž2—¿ÉfFý§hªhÿP ÿ†§kPdäÝ#Y@Òˆ4ô<ZΣ´BÙi<ÂB$Ʊe'› · ¿_Au‡ÚBãÙóš±:ž“ U˜: WÞ,sI¿JûðÑJrú>ïß—ÐÒ؇ïgA»xŽ–«]¹Ê£¦ö[·ÔëWnX£´s/Ø'\0Kú„X/Úì¬þ²ãä( ï˜uL5Ë™ÁÈn![ˆò”\dÔ1ªö!JçØqé£b…E* ;Ž8]lÓ—‹$˜¦jA_¤Eì ¹pœÍ6£b¥¥ŸÍ£'Rhߣæší`<¶\„4Ò¦íJò®TØLÂgµšû­z±2n}¸)¢Éˆ‹eËGO¥²·Á§¶fo“=;ø4«–›NÒ­cf¨åÈÑm„(ø¼ÍÚ…Hö•¡ák“và:æ˜í—à‡ÝBñ5ßlvÎ1Õ­sFG­Üf‚/ܤg_0TÚƒ0âPõY] ƒ…`Ö=É%2ª4EGŠUBG¦'ÙÛðÖI¸ù—*‚dål‹º‚Žg¾Î‘Žgr‹Õžäö•­$·>”Gƒ aȬ¤ca¤OŽÀæ bݘGï Ž ¦èØé€ Ê"É8cQñ»& ÂÄ´?ˆ†ZšdÞC^Em5²Ï‹B[’%¼®bÒI˜D¡Ô-moi CS/#Õë¸X%©En÷ãSÉ#±ÀòOmƧÁ…‘ €"‡âP? 01Aq€¢„âH¾`7C¡²ƒÄPèÆjœõ¬Ü9OÝ 4öBòùÛ-¨ÎiHwðª}™1" ݨÅJË0Ü–æÛ‡ݺ¢ùÕ¢ëëkh4†èîôgrg:ü*jÃ1š.f4…~É 4¢¸ÛtOC˜ïº7C sF8ÉÊa”ðN™„^óè Qè˜i‚âÅÇd‘×zžŠ¹Èœµ|L©\|!ç1Ho°_ÀÓÇÍ Õñ" 'd5IvŒÞ=ÝŒŒÛ’ Ž#só?áÜræHRÏ)´‘ ˆD|Àz˜c0=íLº“Ïpt™jOÇ €°™*lrÃn‚Ö¢vI À¾æ¼å¥Š€Gˆê‘Y(pó2¹œ¤W?¡Fßn(a¶EÀÐÉå ê°#e6˜Î !-ýVÊq Í*÷"Ÿ1Ìq秈ÄÃRu—ZõOª¸ön`vvôOê³ð3²øn3~øL2¶Ó„i ¯ÿœTi´É…Ë·›œºôfÉùGÅÔÃÀ¯¡xCyŒ´o(‰Cd­/1Ôø“æI•Jž˜*W[i¨¤· “¨¯6äã׋Žp¢wKèH<¤\p„A:øF>Tµš|Q Vãï>†zöüí^Á¼Kr6¨ˆîÑ‚>мÖù4¦W÷¢BMÑž¨·,GÍD1EâN ÜK§=¨?»É Ø&çm>TlCVÈ]üØÒ–Õ¯ä ²×!"Û À2XÛ¶ê €D°Â‡H`6ÌüÕ8Ÿÿ[4±ë¬;¿ÄdÆ”s¤cþT´ÉõŒØ:J2ëZüËŠ g¬„*ßÌ6ªLH!^(´qÞ [(¢3Ý y¢6Wä»( ´Hzé’µù]’ÙÄpxX¶RÛÈCñ· a@#_Áù:Y)Ǧ¦vÆu¬|÷8HÌVÞ€¤gk(›ä;IŠ¤Ï˜ž²µù•ÂtíÔæ3ö Én4Ò¨{BO“Så—û1,w¤ i‘› Õ‡§ô¸͹oP‡û°]½[aI¥îdf*ÿWû˜1n‰µòñú„;ª„óŸ)¹\Ù¾/5Ä"Æ›R`ÞD;‹laÜX‰MU¼-¾J¹žßC¤Šè“ç{½Ä‡ÏSŒ-òü~5N ã¥,ͺoZÓù󞙫1ót[$®&cju6öGUy$M8Ïlj÷èÁô=ÊC‡K9ãgs°îØ,„½TêwfÛ¬{%Ò™ô|dËWÒ-»u+EZ”[Ò°¾ÊŸÔõw"}•ÞjG²˜D胦OàQ4üy½Ö1EÂÜÑØÁ­p0…µcváÎôÙ9]’%I¡]DúƲ¼(Â’1¨Skà¡ZÀóE.2õcæ¯V £w©`(= 9†­_žH °Y,vÈìxCÙ¸ùƒ¡ÃŠ*á^ѹ…'ÔDIŒíävûsõÝ7Ïü#ué“ ÊÑW„nW–ã¦`M„8ÔþL¬¤Óƒüñéˆñÿ•ü*"S/møž ˆù¾âw•VL®¡>ÿXÓçÞ}‰æèœÄJ¡|øÈ-f{g±J>©Ýì°iXÁD¢}èNÖ.BœNö½*­²MNÎ7¡‚0'Åb-ÂE5çRÞKšïKäRBζ3´‡¡ŸtÖ妘#2¤m<&cÔdòsJõòÚ"¹¿h§PøG”l—ã»åXŠk›ºçå‘Мùù…`çІé(çeÕÂ\$Ó<«[Má®ÞÄ—ç/-­Oׯ‘I¬n¨çôqƒ© ™#ŠÎ€õFÇÒoÓ0{ùäY1eÉ*‹"é°=XâN6`…8~±ºó#- Ü{Ýf”÷*™ºªGm)ÇÑknî¼!¤¿tÒËH!É€óuô8~šÐŠR·I¹YþaÔ%Ö^"G{K¾bÈ¡ªóC~í9 ?p ƒ´ºëצ’mRÛ%}K2¹wyš\‰OâmÑz¸ƒo¯Â£¼hÔjs ¢rKé*ä+¥©ªs/ éçÒ±wÈ`wVw¿8À¤§;i½ õ-ÿÅ¿Bñ(¢ë(±î„£´öésRšn6Kˆ)MŸoôs;¤‹ÊùÀ+étÕíÁÆÐ8ºBŠJ-&¢kÛÖ8{uw}Sæ!ãPä‡lvïépÎ*:¤‚”ÈÝ?ÛÔ=ž½$ÈÍöü†žj¥k¦Y¢r†éfõ?úObÒö:¯’ÎÊi“EʯUítw5‘Å/(šKšù|auæ•“H¼²¾ýaÓí·ÊBAê?m?ó•až¿õA˜Oô›{]1ÙCûš(_Nªt®è–iJX³}BÿÔ±4áºá/o#¢…?N¸¦!f&&­; ¶Or÷è{'$2A¥ß²ŒpØAÎYí-2|¨NüƒRøZ`éÊ–™eU_ë:zB’ sdˆ´z¦::ßòS_` ³Ë öZkJzJ‚CÃ]ª¶ÊsÁM4<뼿{è a¬(Ž|Å+(¢˜ók(žï/»å žÒd©0ýõ¡2z¶»/I$Rý V‘§dœ=©®"õ.ý„¼MãEàD^ÔÛ›¶râ+1»áëW±ƒ-΃WCåŒÒ¨÷]ãý}ñ†’ÃÝ/¾N¬yo]Ó#ÓÿàÓK? Pðw«Àümž–1`üna¸£mDÉï–ìµwù‚óNnÈâ¦Oô!ÿxj#œ¡Qm¨=l6(Ò|mGÂç¢Ê]G¸2ú8ëñDëñî>xé7oüðÍ9 ùuúÒeñé¯:&?u>Eù<óBël×+)_ 0œ=@˜?e„Øú³n{¦'­€[„ÕW€ÝÚ½Xk1è¹U°ˆoŽ~pÿþ 䥪‹endstream endobj 541 0 obj 3987 endobj 601 0 obj <> stream xœÕ\Yoä6òè_áG5VÄ›Ú}Ë"‹E6Èa`›Aû±ßž‰ÿ}HŠdÉR«í±YÌÃÐj‰âQõ}uQ×ûCÏöÿ/þô~﫹bû§·{áú>ÛÿßÞõ‹ ñ®ý¯ÜBÙý±5×rÿàí‹«úÁîÁ{ë~x¿÷s÷·•ì×lìÞ­Öª·ÖšnZ#cª»ÊïVƒëP †u'«5ëµÖÂv7«5¦Šw žêÝU)z«ãóáâ)4§¾”â¬;‚¾Î}_nÔ¼[ûçUÏŒìVÌ]ÑLÖw*æç×}½Z‹žVêîÌ÷jÉyw1½Kª;†×žÁk/Šqq!{£d÷m~êëúºY1Õk.-^¢›•蕌wa„†qûëÁ?ý.Œrߺ7º!û]srâþï¥ÍþÁ±Û7-Þs5HÑ]Bó‚lž@=všrL÷[}54Ï ùžììz¸‡&ô;MÇ-L!T~«±¿fvšÉ¿üýB Óòø½£è~Ÿ$h^7éwëæß˜nð£¢7ZuWŒ¹ÎÜ隷3Á»(vìÞú¾ÜàT˜H×›$B: Žïà¶í"ߊdánEO!ÑGS ûúÒ½v0½“ˆ¸‘5¿•´È™í¥ƒ`Ø+¹Ï n6U-ì‘ 1^$ž"Yô*‰ª”3¢«ïšþåH÷ÀþÃÊ ¡£Fõöf¥”ïU=Q†îHÁyÈÍݬ®7yOI¡/L"Ô<ú¸ay®M…ëëmn!AC B#z’© ¬¥˜¬£ÖäŽTXíHà͹"ñ95ŠA[šÙ&S!Äö#I¤zA>ºÍØË’6™;\Òtz¸rÚÉF˜â42…7 ²±²pO*ïUCÞë¹_¨¶•¶ ½“çe²Jèok ÍsÒCAÀy\û-΃ɜ“Ʀͮ’DV£ÄÌ/šPK¢ ¡“'r“h£†Ö)Ò’*H6£è¢ÓÜKH—à„ÿä\lüÚH{òMgƒ‡“Œ¬+ ™Hþh~o½Ã3­½”ïåÝO  õ­§Ý{oþ(z&CÏKUA~XP…ÖUDþPµØ³®â·Ôº†›Ïqs2cIQˆÄÆt9ï2¹®kCúø]›%ñ‹5º+~‰‚-¦ÆH@az DØìNOÄR´Â˜\›‚‰kËîqL,X°#£Ê ¥æåña€.䇸A΄î ʼnXús1 …¿d©&a•y.ÍRz Ñš3h‚i<‚Ø<„æ94ÐTý`Á[ŸBd-Ã+yWÃŽ#ŠÒ†Å!ÇèÚ–,¾rÆ«¸oôvÀGìðÕ#žê¨h´(ì §åÞ¥û)Ç è‰Á… Ul”½¬<äâ·ÎL^@.oîÂW±¯¿n9i'm2°!å5Q4ñãvé⣛÷SD “b€=礞Ò.=å™Ð’‰Ä1ªNÝÑ ´0,D•9²D €Âß“P† PÀÅ5ô4Çm‚; ”Oˆ~>ÒR3¯›Ùnv$åŒ*‹úMñ…¼ò±‡@ÐnJ#GrXÛnºoWÎìÜ&áßiv…H…¶ck ‚zÒv×øƒÙS0Ös[Ñgµ}!~W˜&Ÿ€ ^/à€¶½ë1ãÀ¨ù Å'a+Û«7Û!Á-b~ŽpÏŠSâmÒæöÒ`FnF¬òˆ 4 uò^NàðÏ”œmc¬~QPR–ó JÆÌðé ­±-ôå é |à4 Lξì†>q*%úÄÅœÖ-Ö`+f¦MØ fÞ¸v<¢ÑÀ$þ} Ã÷˘„æ“шã\NaΆüŠóø@@iµØ¶PJºü‰ìôôÜܼ±¹4¢]CåIÏ€ðÙ ëY©HN8MΕ¹¥¿Uo£ùç Þ¹YšÖ^å=‹ú"†ßyƒ#—S‚Btßç¡#ê=Cc@¡Ó›ÜâSX„ÐFù‘²g¦H}¡,ÓbÂ|zÓ+—"†8v È”1€ÒGõ哲Kq0R8À˜¯¨· ‰Dº™¸k”E6+ÑÍv“õÿ¨´©ènf½zUMçój¾%äƒÔ)) Ì‚›í =C×tıLg§e½YùŠÑcØ5¬yÖö¦ÿ b+óL)Ðþôp*/…sÞ©ñÑå—õN›lZX©lsÒ„¢§¸÷«ÙË»‘HL”•y6o"°Â5B©:zÖX®sØ%Ì”ªàà *8Šq:yH¡Ï5tú(ö¬"©aæb&>´øz¬hÏGj(Ð(e†Æ*‹úœÚðÚÙ$:ÍßS´ÉɵÂMVþᦳ¥Âôƒt]¶v Í{h¢Ì{ó Χ >Û´mdŽ/™[¡-è]r!eQW´ÅÜ'öqÜmÒéY÷!k9™Q‚‹oáâ\Ž>Žsbrÿnë=®±ÿ=I(ˆþ*'¹hÇ¤ÊæÎèƒó`YÐÏeû–Ì•$ïsl)ÔB˜X§d+yššÊš©EóðUœ·Iôè´û •ud‘¤ŽÖ¨kÊ‘F³ÚZ}¡­Ú!ÚEãJ,«t²É8Ö„8Z4ókè Y‘g+®úÁȨµl4Eì”öFвÍ5gîY  }¶±Äᥔv-†!Œe+õ9 „¶Ã Š[®²¶Æ|¤16m¼ˆ›Y_o[``B1—Ðâˆr›•›–´h{Ì3 BôLÑ\=â)Ó³—Tø¦ºæ’)ª‹+ïMÕ H…ŽpsŠZ:T£Î’¶‹žäø¢‰yŸ7°ÚU4•íÌß]*99lAEk¨¸urÆöÑ9€¤ )«%Æ×Pâ—J#Lü•tèÏaõ‡*À3 *…øí’K#mO)^FPfñB7%[©: _*œ'Ú‰¾=Ñ*Ç“¯H´ë¸|%>OžvðÄÌ 6Œ³ŠjBõʘ*|œfÓ>••áú©uË3¾—ó;$“å­3qöØåÑ'*ÎIe†xMIj[¦PÖ†Àc 6Ôä‡bnH™Þ1^X§FÎðP–è Mbàc…“ÌÑžD†„íœ hЄ»Ãøšxw:òS¼ÃK£S7µ ©EmCŒcÈ^Þ튲R‘ú´RêÇv?³÷S]% åvžQ?A öÉg…CD(&\ŠO¸;çÎQ™ôÐÒ9?¤,¨ÈL:š.–,ÐgÙ€¤6$q «t©<â' „’16Gœ‚¥‰ ôO.Oš«=5Mì;"ö]¶¯)FïÏòˆ5nW+ÝKæ‡æønÌ|—­LtFçšè´ìŽš‡²@Xó<ü!fë¡yÔ8¯¾Jõ‚âFRa­#8”&&m·ÂâË‘tøý’¤¦cÌñ¬òFŒ`¯ih¾¨º†±’º:@;€C¤ÛÃ8vÎ<ÇóòF£eáxÚ;γÂ20œ®H;ž¥µ¥=îÈ{i—2J0[ Ôµ`2é§`>åÀ+RzH$2wôoÎ&ËÅ1φl WÇÌ[pÆpÀ"y·â•¬¿‚bDËGUè¤CN%0úì_ ™85¡"&Hü¨Ò3 õ*ɃóîÛã“gÒ§ÕïmTøñ" »ô¤¨Øœ¨AZã˜nУQñs~IJ¢û~ål!ë¢Sã›Ôø{j¼IÿÄ]%²ß_‘DùX eÝið+h"wñš¿Aó–ìáè³áâšjwåâq*e#üÔžšæ{rB»¬`N×Mè%Ó–Ì Í=”.Fi¬P‚]|^ ¬®íKÅÚEm‘÷dǾüYC=°:bóàd¤%Çùtåq¥4öb独8ˆÔЩŽ%7Œ6Txgפkµøu–wÐÜÔòU‡OP¨ìMR͵ô‘3;GIy/Sã¢iœ¤F¾ù.5ÎæÿGjlšŸŽSã¼yÅwðÔÚÁ‘q¶°¼ê.RÖRNõäÙý$ÛîB–…ú(0Œ>&Ó¦-vð!?£à(yz²8SLXõm¹¸e–†2 tBRt[ÍU¦îÁŠØé#OÜ—Pqjø¼9Š=™ª¨Š¬éMCJØ6Ÿ€Ju„|\”¼Ro¼ñâ¤}žšŽx-Z×´%Ž®ùŠÃÞ¦Œ`Z­2îûï•tælÞù“šI}” ´Y<Êù©ŸŠH\V’’j¹‹Å€ÎéÓ©!z+×`\¶_'*?øBû;žºõ ïI-•ôLThÕØýî³}º¨ª4˜Í¡¤€”Ô £»ô§ÜÀï½&)Z©Ó˜(¶0a‹ž«Ž¥C¹Ùw+z»'5q$3•Æ…œè"ÎyœxefËb9zX¯]Έ¤rCž7¦­šUPb~|·³˜åH’M>rXÎò*¤!=#—sê¤ÜÂ"YXôg¿‡±ØrE}î©pez¹Ìó&WeýŸ]–+ÛÒ7Ð öfû¼NÖ>}€`öSLém[m ï¢ymXÈrÌ™×Ò±„Oà`ëLqÒNvÒ¬Q¤ô°1t/k#–¶J™ñ¥ov—/=ª> stream xœí[YoÇòÈ_±»vÒ÷á·8†l'D‚@+Š0¹Kñ°-ùï©ê飺§g—¤ç! {ú¬þ¾êªêæûø‚áOüÿìúèš/.îŽBù‚/~zµüÓJ Zî—ïVk=8çìò$Hžs½¼É…÷+Jfùr³ZóÁ#ÝòvµÒR‹%/­(Urp&¶…EûÒZðåYéë û‚Y‹åÛë[µ<^q(1\µ55Çõ-¿^­å ¼Sfy‰½Z¦„XnDZ ÓËó2ìev[ÍKH5X­–ßæÁH_§¥¯Û׃ÊQÝ®ä äbù!ÌÐráÞÿ·Ëpº aM Âÿƒ²Þ.ŽÏa¾Y­Õ “Ë·qÕZb÷¸VÍ ÌÔ \zç°{¡Ì`A+q[¼¯ªÞæ®b¡„ï×XèÌ0íV%;°©:‚L']…í¾ƒRÃjyÈp ¼ `ÆÒÝÞ”œ‘ôú;ÔµäLѪd³^À¨ÜÖ( ½RÒjãýlU¡Ä •§sÙÑ-DÅiÏ\Ò!n!,Q;@C!Ä®§‹ó\H–ºÍ…ˆ5ήž¿d0<ôþiŽÒ Jz oÀ ™\;:JÓ­F²l …ׂIГ‚¸¸·>A%’9©P…T8- ½ª$`J_/Kw™d2E)"½Z8è "Î R0›Ö‹<„ò õ‘ÅÓ"Þñ}ûä“bk. ‰q€ó£] HJiŸHÛÆ@*á ¥)%:%ƒ!x…lcF@óý€£ð}¦Ñ®ÇHÒü"7'ûL¶æï¹§Vk6XÆœá`a(¦ØSœTäKÃë@¾_•¼^!R$˜3ÑÚåi Õü»}¶çû#F…†¿o@†h@`„o o²‘óªÕ Œ‘»d¾Ç°7´” @N™évŽË‘KM0÷ƒWZú®£Ök¶Nº ªÉ8òhO0VQ˜Líª;Ëu>A/ oI¯çÝaß®,|e§Šåh7⾆½Ðƒ¨éRŸ? Š…Yå$šG}Ñ#ºŒbÁa`ô`ž{¿Xƒf²ò݈KeP1àP1åÇn…Ì6 ë¥xs°£BðGRi³I…ãðÊYjßÁÐyÀ÷âøÛ£ãßó 6[3%£QâË"žñºˆ›,vM}^"wãêŽGQY×à&Q£“oÜ©HV¥rUí¨åN¦ÄÌ3¹ç­eé3OàÆˆV»>2¹²_;„Šœ03ζgú>²Zûšþcó_Í^ð…[BØuÙ¼wEÜñ®ˆ÷ÍîŽbÆ[#@ì"ãÉ ¿[Á8f+ wI¸OÂË$œ$á: ›(ô}°>­ÏšÛÁe²„)%p¡‡òhV•|ò`2ðöœaŸx±Ó²’M÷dú)„,ÎT'óm<û…j‹¶ÕÍ¹æ¿ pƒj€{Óîís{3î퓜Ơå%M(—Š¢œ‹Ä:¥Ø¥ˆÁhôÿÐÿ­mö}Wü°ïo9‚÷û º?ì¬AÇ›Ñöb?¡—?"þÀs‘–$®Š¯}&íUJD ˜Ž"Œ±ü~æN)ÄW„oûGTJ2R—=í“ͫ¢qǘ%@ÝPHï_×/%ª íý¡;2½Òþ¾ ù¶x™¼»Š›¸ä}Ù—ä›>“Zc¯S‡õÉàÜuM4Áée·î¶¤îöY¹A ßÍZ^Xêì§ï’p3áÁåä$ض¾ÌL>Ñ¡âÅ”"l0>(—Ä+mf*Ðe‚ÝNv¢¶ŒèžDì:—m–v[’ ïMÿH’hg’3 ˆ›Ì*YÆ3aö£)™¢0¯glóM«„wÁ|Š¡ýœmÿ_§ÏÙv´"ñÝO }HÐ]ÍÇk ¿Œaùu6O‡í„_gOaÓ_&q@þtž„«É$zX{ˆ™5·l±¢N×KÂÍ©¿ÓBÁ×°’¢8Çw–¦3FÅÓ0ÁNN0zrkºMŸÀy${ë§iºšd5êTV sF˜?⮟mï¦AI{2êy",ï;›Å <ê+ZÇ ªàé+¹F=0•ˆ°Ï"vîÐ5{“¶jˆèø#8‚˜bw•Tè;µËP§‡ñ"l¬;^¤]vÕEê^•ºdÃÁMTƒ-gtÁúçJ‘À†N7îÚƒ§YCÌ7Í?2ߘl7a‰†žp¨¦K.Û™|›Cš¦ :û@?»ÞÏNöws]N ‹.ãg`œ[õƒ®ME9¢fÀáYÿ"nô'œöË_fÒÿÉEþ™\buÔjFÎ;fúô.æã}×½ÈWtå~ 1B¬Ë“¦u’ æhoýzSxwAqÛp.ÐZzZš¦æy½ccfߊR{2½È(¡áNcÍ4:CÇå¶žtV]IÄ{†‘•£n+µgèÍçƒëƤ^´ËhÀc¡”;Ì.ÂßÛÞ ÚÞžµ>+Ù‰é%OJ0?08¬±Ä„÷£3rÄìòÂ'*˜O=tþ‰«?o^ž•ùŽE ¤fè•ñó ¬l0}[X†¯9ælr‡A²Ü%yBýçâŒ÷Sˆv0$=¸º»ÖI‚±Ž%Ë×=«¶oÇH˜~•k[|Ô½žHó–v <&Çxíá‘kfT->²¨_± Rµ¥øå«ÂàÓ¦ÿf$‰7)9wºöYûÐEõ£oé„tÕ1v œÕÁuFÂËrùv»‚ ¯Èæ«;®žru·†Î®9¾ãHUƒÒƒwã F×ÂH>Ð!®à´âåv8I¥l[:JÍí|ÇIY˜Gg4µ?_¹Ájâ6R³|Î…¯Wi!ÝûH¼„|f,Lâ[ò6¥¾ÇÒžƒéµOêwÓN'ô{_Ä—E$Aøu7EüǤ.FžäYÍC·YÿÝÍ]o:]£Xn`©}!Ù¹‹"þûÉê'³m›µW0áÓ¦º‚™¸ï}7ç‰Ð—á’zfnV`ÿº"?¯B6ËŸå â è½gó(£‡{Èè&ÔúCß“êóÄ-›äôZe‡§C¦yʺM~7žc4¿µï&Êç_»ôýÉÀ=ã¾ =?Êb*‹ñ¨Ñb´)¾Oo1Ú7p`sSÞýõZ0H4')æBaˆ\H­{‘ŠQ_yóoz"6+X³tCÙμú„­ò"9Ö=D¹â&Í»öñÖìmå1Œ`ÞŽ_’w´ŠB˜`ÃÅ]|h^Y“äЇ/’4 j1I€oÊ¡¯ÓHO…O~fªŒF¾yž›mP}¸ƒŒoªÍ &jú®%¨ BÑ&$-Nî$™ÒD”ÄsΑ·­ýå³’s†Ü[9?˜·‡ó¢0æSdM‚JõC“'~r Æì±¢Ë6æzÁ:Ïó> stream xœÕZÛnÇüȯØÇ™@Û™¾w?qÀ vˆäA0’K®!——J¬/ñﺪ/SÕ3MÒŠ_ •z»«/uNÝFï7“› ÿ”¿¯îÎþø²r³?¥ñÜüûìý™,ÿ˜Ê¬Íç0QÛ°‰":åÌæüæL–:X1…×JøáîìÍðçÑ«œŒÃwãÖŠ‚.’¥´Ã»yðqœ@¡ž¼®Ç­Î9†‡q«´ÚªAÒ*£F‹àÊú4¸'1ë²VÉáŠtÝ¢.8µ¶¸Þ éÍp>JqÒ,gZ‰÷¾·Z¨Œ¨ÕOF©á˜÷r“v´í¶=6çRÚoÍðÕ¼ÓuIºFi…S&ð'zµ°NK5|L'ôR…oÏÿŽVˆf`G82Za«œ…™¸›0>úÍù €wÊNF£Ò*žHüHâ‘Ä«YÌ{™àa¯ÉEoq/°‰ Ú=mr9Âkk‡û•p[„¬.ϳ•^x7©ÍV†¬)ãÅD4bÔå5%G,(±ÒUÓ¡øXŒlñ¶uð„Oh£1xÙµ&¶ðf„r“.Û' ÐölðÃ<˜´»Éy¸ëŒa|U9 @CE½A`yx8¼É;I« Hÿb§[‚Õ·°^Ià˜çZј& ígQ¾ŠS(gMÊÊ«i¸6²HDc­ïÃIÂ3ÊO0MMz…'·"&~·„¡‰“çv$Þ’xý< Á—W†W+ôWÂuæÉU8<½üË*\¬~Ú-‘N[¼¦UÛ̵ÒwËY}b#œIÄð"Ìd~=nS,ÜàûMx‰ô`F ë5÷‚hDP¾âqO´¨«¬Gˆ6 H3ªÃlF½®7±’ ֥б‹E¶ŠmphnÀt)€¤o#JõÝ´Ó®K!¶é+ôR8›Žb¯ƒ®g»"z>HÆá›òjF(Îý¤0¥ÀèA—¹å×lâ$Âw›LeÃÅ3oº¸iQ*®í[M•¢¸Ù, ¨'ôâ|‡Y™†‹9Ðå¹9PºÏÅæÞÒ\fð£5B+#“çæþ5 ’²†keçbW_ùüÅðá·åå·\%:¤d€•¾·`_ؼ qïHdËVX„ÃWåF¾søy³BLðž¶[qýàÂõ¢5·}ö]Æ?ãy;ã㊽…rì&H$$çÙÅW¶ëg) 6ßNHƒyûyWxù/ºZ?MÁ5œiŸ9&×§7¹÷]Oô*sVCÌUÎ2ž1ïòIǺ¨P \Û‡.箉GÅ Fúç­uä£õhQ¶Ë ´WOŠù“•k«W®Y±ÈnÚCÒtNÙ8SÆŽsªÉrfe~Û–•{âÁaT@[ÃðD¬s<­<•âÄ—ÙÅø»Ì!Óà¾Lfmf‰•QÒ ÁS«—Bl? l2Ê9ÄÜÏ_=AÝUk!Á—¿øiÿÝK7Dþ‹DH;aVTùs’ œZ²lp%ѳj#! §rÑæ'¬Ö6˜ñ™¼å7£‚äÏG´„Q‡”vF ÄþNÆ$¯d^©µKÁ\ø0Ã?GëÐacüÅõ~¾EÇçBl–gõÀÝnŠU|Ê<¿:;ÿÛáo3¬«Ñ,O!Y^yµz~»$V]E>ò†hA¥Uã-Kͯȭ9NF–/Í“~oÍ“\8¶í=§hB=ßi×Ãs lôr9UÏÉvPêWJ–û!½%™Ö=¿ÅcwŽaØPÃ(Q3.Pô% \OF¹ÆìËt»ºcëú™ùE㶪۫ xíuìì¤}©N2úå¸ÅZOl;ÆüÏænÏ÷óÔn¥-OÛßQy¼'ñDâ{og±Ë`å«Òe­Ÿ¼ ¼@.7Á‚&l¶`1GÊt(BËA’ô6ÝOçsÅƒÚ â«xÀG2º˜«{3éD3€V!7 ÒÌ®;4ÆÙ¸7|={ËÙÞÁà`öàáèeycžÂ{uaõiÁ‡ìI|KâŽÄK$I¼É"è/Ýíš¼±bͲdH˜ÀRæò˜SíÒQàQäéžóO¹1`8Q.—u*h’ûÒ3õ¿‰ø\tõ#i}æ­æ þÚF:ãT‚5)Þ'¶Ål=ÍS)pBŠxªèërXÁ-Z˜¥þ՞ķÝ^×%‰‡eã,Qü¦i²Ù(!óO´ÞîºâEW/âÅ#Û†ÏiðŠÄ{]ñózšFó^¬Ï÷нëêíO¸n6nÞÂ…€õ±mYŒñ—N2EÖ½š¥’J™Ôè/&g€`ù×aN¥îéwBT˜K!6ÿÿiÚ¥KG4û Ow<“æ„_Äñ`‰ÒiHýz~gÎgÌ\Šjk{ùäÞ)ük9îºyâ’Kä°H\€’Ë¥}ïUú¥!¯üà| ·_ÚÎóïvW‰P@¸ –~gn]¬£X;RN®ë¥¶—á^N±æjž§UWt„•š¨cõdo!w ¢Ç˦.æÏôî>ˆ»¦áB_’Ð’®ÉŒVåQsó}Q¸ä.`1¥æE ›ûŽ“¡£`W3ÿ{N…ܬù_YÕïR¬ÒùRy¥í¥çºV}Õ¹Ï^K£µ¦nîÊüý”¿×ú§Ùß?Œ`Qá²{òÓ¬ú]&‘Ž]j“ÌüŠB¿/Ý¥|€Ÿš™ó¯nþ gj2›?uýôooô/{¤rxI}.îÆ<"~ L«R˜ËmŒú)÷ÓbL&¯áÅ7«Ý—;„›êLé÷–~G¥èR«ï³íºÐ^cѽõ1ŠOošJó¯çg_ß’+Oendstream endobj 736 0 obj 2128 endobj 779 0 obj <> stream xœåšKsÛ6ÇgzÔ§à­äA(ÞkÚδ\’ê–édd˱5¶eÙ’“é·/@ÄŸü’éXu&# °±¿]ì.u]P þ5/'¿|䊧›IÝ_°â|r=aÍh3ªx7ó…²…#Ns-‹Ù— k&«µ…œXÿàrò©üµ’DqÍ\yVM±Öšr^·cª\wÛŠz‚VžTSF´Ö–7Õ” C„â%K³ˆï•‚XÝ̯;OS3ÊRгò8ɺ²ü®y9 óaF–³ŠùÍäp¤báýÊwÕTî¬Ôå2H5Tr^®âZšªr‘–]¦eW½}q!‰Q²|ß-²Ž’¬›Š)¢¹´xD7• J ÆËëÆí?³¿¼¤5…õ+ú--Ôïäâÿiœ)f ¯€p‚„+*E8×¶¹IÍÛÔ¼HÍmo¬rŒ0®Ãµ½W©¹Ê6ÿ¨›ÒÑZáms•š‹Ô¼HÍ“®_ÒWµ @*Š)³ñý>Ö€I§[lÓÀm$Ì9ŽB®iܦÔÄxÂÞ”ô§®ý.ºY ÊM8e½¦¶-2¼}Ãí—†%ÏJ#Ÿ)ÑîE8çkªM³•Z©°Ô¶ÁR˜¾‰´0®ºÎEv~o©h-’‡mµ{I{­­I†Æ–Ö '/9QÒÁš°‘Ë ÒqÏ"®¹hðæ®µ Ð{•¶šdQ€˜Ûde@œTÊäm¡ã„óبaùš5†›¬],ïbýÁÛYüs-"ï¤Äùiä×J&¬Ö¨Ä–,.ãs﯆Ï[“=,“º¯’š'Íîf¸öÝúAŠŸÇuB i›íÝ!¯å&¢i‹f=íâ§×¹çW©s;TPÐ Üé©3¼7$¼Ä¬z}j«Þ.«Ì¹VçYl¡÷ò9^r(ì1(*c|„…CåËWv¨Çiû2ºý¹R*ŒUõUÆá6`Î,ᔊö:B/’ÐÛ‘‚%̳‰Þ/†XçfÅSUŽÚ‡eíæѦñ(©ì稲dÛçÙÈØtÁ’–½‘â»üû*Ûü"‹5b¸Ë&8ûlø ÑñŸiþo!¨DûæóbæƒõàÄ›!Vƒx;’3?̸"1 ¾´r 4T±¾“ér¶ŸBN/•èPObRéÅîÓÕn˜þ`yšP‹ø|Oä % à«Ïíýñð+8TKÙ8ð®Òs ã".•3B1(†2ÆßѪ)%†RëïÍ÷iíON-5³n³ð€w^îÔ)þmhâTßyßÒBÍÅô-É$…³ý¾6Æw_zp%4h©Æ£š÷âx­(Ö½¨%›'U ˆkÿ𲠏ߑûl²+–Þg”Ür"ôÀ&ÉJކ“ öáÖxÃWXÛ< 臡µ²•É[Ö÷ôÕƒðºIS¹ÛŽzr昊¡ ?·uçM H-_0‰T̸W÷ß;E‹0ôtØjò%¨K´r­ƒ„.«°Öié'eic– 6Ùæ·¬šozª;Ä×Û@¢½Üb !ÜŽA5ÒIY>/Çܪ•ù­bÌß'½à„'Ôàd©x NgYµCce+#{ñ¾Vµ³iè"wÒåÀzC¥eaô0ÿÙþhÇÇ2@cú˜³ô| rLo%Ö\@PƒLxÏòIóñõðóT@`ÝÃ%SÌËãò¶¿¤çËÜKä“­^-$xà ÖRò¿ªhÉ¡ø=~ ²“!í~ºIÎ¥ËF}Ë |Wsù›÷ *4up îº Êè71•&ü¼§IGŸà‰¹6w×|À€æÙÞÛ‘ èåòË1}ówùXT›YþVg%å¢Çý¼((6ÿí°ï/3Ž“†žâ|?å‚„¡o…^¨-ú´$BHÜÃ!|¡>šžCÐ %DøÊ}¼’”c“8øy¢0‡–ÅT;b%åñ¤\·‘0ç÷Ùäƒÿ÷Ù‹¨ endstream endobj 780 0 obj 1471 endobj 844 0 obj <> stream xœíZÛn7 }߯ôi¦èªº_›¢@Qš.úRÁf×— öÚñ%A¿¤¿[R—gGk;Žë¦@‡0Z‰¢ÈCJ“wg¢ãø'ÿ½9_|ûJÑ\/âx'º?ï"ÿƒçYÝ‹LTÆw+­îVÇ ‘(o÷S’yøá|ñ{ÿý ™‘V„þtXæ½wý:JAÓ_Žƒ7…Š;Ñ KÁ¬µÊ÷WÃR*Ç”‘½¨«ŒjżÍëãàI“.c¤è7U×ê«e¿Äõ† §ûÕ `Ä ½?Ó<_ÿbX*&ƒ×¶‹Z×Rö»´—å¦ßÖmßÖmw»¤ÒÌÝ¿7#ºÞT]Wƒ0ÌJí©‹®ÅŒUBöE þÕOí]çaG0£Ï¿™vÁu«-œ)™4\«è̹xÑ}]Åó(êÀUvÝ×U<©",3Î z¹(»¨â®)þXÅus¶ŠgûF¢˜ÜŸ€!ÀU·>yèU„¨¶ÏK!t›0BtfÒr­Ð–9€™zZ§¢Z2£:PÞD´ý{Ü[èqˆkΪH&¼©† ¤^Ns™ Yb¯â¹Hö¬Ûkçi)'{ƒƒF´Í¹«â ,Z;K©–9¬dÕzRëcj€Cß̼ìt™Š«HGTqqÖD+qN ½žè:®Ø˜·g™cR#e)¨œ‹‰.’§gM]ÛšþÏ˜ëæ¢öiÏ‚¡² ø²•dùE!BA;EâùÍØÔѦp[›ÂI2-9sœ{[ÊÚ¾¶Y/B&Ä= ëKGç+ ~Ri0a¬q”´ dnîA¼WwÚ€F¦ôK^\ ÈIËer&I¤T´à±7Hö]L¸¤ÇË:á“ëã´ð\ÝÓGÀ)ùÈŠ·M¾o÷³æ´×‘—?¾y([|ŽÍÃÓ·âÿû¾¡oè¼\zž°ž›é'lšPÙòåbõõ¾ü¾L–'õ.ˆfáÍé;¤)Ŭr4‹òǦØÑò9¹Z•ìB-X¨E»¦þ«Y8åÁÓ–š]›>"ÇÆæŽÄß1 îñ×øÈ|·´é‘Õb5þtéód”^GмæÆ~¡…¼õ"Xl~Ç ›*^Ô¹»$ªt€2zÔ\–ñÐjâv4;šýóÜõÜsƒ†b3€1i„Ëö¤jƒChÌWöò) .x'U|]ÅmßVñºŠ›*æw#Ð?¶—VRñ¨¹ìf›ùáy:z®#á®3¹|’+më›jî!=èëÈ36„{OÀñ:hï-ð½f媚ã?ýÏJz,„T.äÿRðQÄÕ?¬¿ÀŸ=ˆ5yendstream endobj 845 0 obj 1759 endobj 886 0 obj <> stream xœÕXMo7½ëWìq·À²äðûØ´½FÐ$B.AaÈ’e •WŽ-è/éßíðcÉYi ·hÑ&ð!.9$gÞ{3Ôç†3Ñðð—ÿ]?,¾}Z4wÏ‹8Þˆæ×Åç…ÈÿáyVóf‰¥vgÞ€QÍr»ytšq×X ÌᇇŧöûN1 Føö¾ë5sÎÙv-/„nËà±ãèPr+ÚÛ®Ì#]ûÔõ -“ZQW1U’9“×ÇÁ»j&_Zƒh×Õ×>øÂSCÛ‡õš «Úe'pÄu>S‹p¿öM×KÞ)Óî‚WË@;¤½ ×í¦n»«Û“sTÌjÕ^•͈¯›ê멚PŽ†è©“L) ý=žÐ p¿,Šé‚F(&•…ŒÆ™ žqëm³Ü`>àöLe ®—ÌKoÂñ8“Î <Ó!šx‰Á,£Ïeê.œÙx—‡œ5iséUãð Æ+lx²fyµX~ó)$h®d¼|6¯«¹©æ®šÏÕ\GSynñ|et˜5oÏ—EóXÌt\å,—ou8®ÕLˆÚ¤u‡hpZãnÙÎù~zå™.“»:`FYoðp9h$¢ëb!ºREpå0“$C¾µÃ´æÏÎ뜯ø½fq6%…_nV TG,0帨Y‰ŒÔ # µI2¼—1¦ÚpcGÉ>8J† ,­Qfô&*·†"?„°ÄYEôiw~˜Ñ°‰’…0iÇ0…t´*aˆ’¦•o–‚+ê³^,¿+Ë#~@{î¨f~(žÞu=g–s‡X» aA%Pp¶¬´£¯ß:ƒ¨tÆÐPàLÌÞ„=Ã,+ §(Ç«$Yæµw#þ _Cï,8ÚÂû¦£÷‹×Z¦ú ¬Ó€9æÏHFWÏx›ú€<8>®)Þ·¹nZáî'Èáô¿ãýæäVQÿûɪ<5"s ôP›ò9#Ïq9¼’"¥˜Jùy?#ÅAvYŒe,=8Å8ê6LZ£0{£lï‹“åɽõbÔ=JTŒ¡¬¼ÌU ›¹»j^Ws]ÍC5‡Y3ÕH…þs…‹£Ûj®ªyªæ¾šÇjæÒ ÜÎbƇ¾­ö(naTœ%€ø±´·ÿ!÷+uI'NÄi7Çò¸T¬%Œê( â„Mîž•z±‚Ž«È^OcƒoˆzXm;„œëé®§º+Qb²k©›óê3æ«—”“_bÿýKaìôHWHzºm5WÕ> stream xœµ[ÛnÇ’7~ÅÈÃl™Lß»äÁŽÀ‰¢ÄãY ÈårEˆäR¼Hb G~7Õ=}©ž©Ù% zp¹·ïu;u¦ùaÑwlÑûñ¿«Ëƒ?½âŠ-6·¡}Áï>°ø?}ìµøö: e®sšk¹8<;`q€°ªëíÂÞYøáòàMó×¥ì×Ì5ꬵ¦9’cL5×¹ñnÙÄ¢7¬Y/[Öi­…mn–-¦Š7¬Œê UŠÎê8>4nŠ8Ì¥gͪÌuáç‚]ó¦õãUÇŒl— Z4“㞊ùó5ß.[Ñqg¥nÎý¬¦—œ7WÃZºWÍiYö¼,{Uí‹ Ù%›y14×I™ëfÉT§¹´øŠn–¢SZ0Þ<„ÆíÛÿuñ“š{-´\+è¹€³u†9·8<|³ä–Æi?;ï”s¶ÔwÂ[º/â%ôJCÏ5,é UÃ9òÏw~uea‘æ6üî4‹ûÐ [ƒ×¾íÙâðÅÁáÞ4/—mßiºUÍvP·s"Þ×|T·bš<–„ÑÆ™4Ý«|ž²K´5t°Ù1!tP·²ëáæZ*Ý £%Üq<èÛ+Ûºjø0½q:äá`&ÒØdçþŒkogpçZ ›áºè¸á•rÒ«!ÝÆE0"É]8V0X!±iÝúI!X W,FÇa¡CÕ7-p—LZF‹M¬ö¢{m°# »V®·qÖàŸ'y³¨±è3ð}‰Õh.dÎïâ-={Ƽ.º‡ÜÁ«³úl™Ïr=ÔZÇ~®,ìÈàùˆ°ð·Ý&Ñį5ö´Tˆ1ÅÙîrz,&z á¬+ÇÕφǔ@ãoJ㥇L†M]ПóCÀN.üEƒŠ|Àå,&µ!àþ+ƒzz–KâuïŠxUÄã"^Qº>C9Ö1nBêŸö=)⺈i˜þ';/âm¯‹¸*â»"nMð%õ¤ioɾÿ%N©Àé¨u/Šx_ Kâ¯Y$s"ÄD‡Tô %þÚú“ö‘y$Ÿ0bÞi*” ­Áæ!øµK”}¾M =ÏžP O‹Qž©QJ/Á Yþ QC}Ó¬VÒCˆfèö'¢ì¼Uþ yZ32“^è øp/ÒÉ‘ùmŠxDÚú¶ˆW¤¸&‡ÝeghŸ7í9ÙzFÍ@jšõ°zNß>ÝtN*eX5Ä0¸>\.Z êÒ)9„k‚To)HGA‘ RpH%ÜÁ?/U'¸á)‡ŸWY¤ñ±¿g­„6ð¶aÉ—&g˜<øÀ{%ã+o äèÇIÉ6E<*⺈ŸÉÖUi_’L÷û?oÔ6΂¦!‘í5N‚4úCɇÎCõ´ܱª$ݦœ®÷bÚ’Q×$þ¸ÔP•X­éHH—váŠZHÏ2þ¦^ûKeZÂD¹’AõÚ6ˆ°Qsk.ÝÀ/<®p66Ìå]][B›"‘Éñ3Ùº*)óMnŽ×àÁ(ìpÖh-x³Ê3Q8NÂͤår¾Ï´óCÈÓ+×q´‹:I"êðPÄŸæÒ|߯ ×§k)Ñht-°!æ½}|-ç|>ùé$ IX'áv×mȼîÛÝ»d býbïUš}›„«"@¨prNôºœWhžà4 ¯“p7yÔf×1a?9ÞïSG‰\Ó‹ß<êR™+Hb|­ã0 pê!»d†ç;‚)n¾ÊRäCd ²¢ï£È€H”ó̇lËï%´Çð„¢i¾H¨x,ÛSù ŽkPT ,£´D*ñYçK§’PÊï§Gþíõ X/iz ߌJ®qÿ:Ïô£Gå¦ï-XÄ ¿Ø„y~ÖâB@4—ûi‹ë\Ë=U5^!=P$œtDÏz›)ÓûQªxôÅØ‚˜h¡#e-Œ|´Ú‹)áD€ÑÚÀû›£G"ñ÷®t˜]Œ®#&‹ ä…ƒÞ»pžbº!Ïp\¬¿p—‰Ž°¶ªî&^•Š·Ðæy9_qÄW$g‰FMŠYÒ®úQ_htÚ™ºLôêwt^ç²r…SÒý^c·ßͺnÇqEÛG°…ôïøs¶<È+2§ºr[÷¤‡œŒO5 ðBgàPu ÕÆ¹ÛL©õ ùÕànZ*K7c^ÇØ:»5혴¤÷©¬6xáÌ„…ë"ÖŸúz$i„ÅŠ* ±«± åÊ‘MÊîš ž[jŒ?`úÞÐÙ§âæâ¥É½‰êKV]¤A¢V1¤ Ï|$‹D½&ÝoÒêWý]¼sXõ”±RÓÄ4WŽŽ5Ø» qaÂùŸ7ÕnÃÕ*>“AÅÓtþô+‡–#‡ÁüÓC Ôãð=apØx÷!‹øbd”EÖTê„ÏõÏÑ«fÒÉcîIáSéF$pÅ×z=x51‘úÜE[IÙ,÷5œà¹±:{ì'dÏ(¢ÐéÙ¹±½ÿ:Šö…F]ìAiù;§¤ÑéqÌ!ž¯HK"¿âŒxLî }%Ù<BtCš?‚M´c“FøßD_r¼$Y›R‚ß7õô`ná½…|[@bm¼çã}õz ê'‹IÒ¦MÓŠ,úÀ(ñFØ|F90úšù‹ñо$™aI‚¥:"£ã$(Ÿ}XövÆ Y°æ÷3¦_yg0ÞÙ™òó“4|Æ]v×GeÐÛ?yó—@2iEkõÐZ*È¿¡€ð*?ʉŸLEàORWtgåùÎ¿Ðøúµ„è¡^DnAU8…¾DòwH>"ÎPOû$ÿêïÀ8kX‚‹ýÀ·¢g¾‚©ÐâÙ^NS;¾#%@ü&j³„²Y¡Æi8¯»’ƒ²AwÌ鬛¯¾†‰'ABÍ: ±zóAšŒ¡ý7¾é+‚}jT}ÔõŸ;Ø<7A|}B9ÌP'D|§?NѰæ1²âVª› ¦æñFß«v–[Oøˆ= Ћ´ô¦fAUÂxJë乃î•¶(™Or`½BŽòÊb.`“‚,ѹVe<×8Aå-f4¨gú¢OŒÓbjôâböI\Ì¢žtTˆ'F›ÖiþÖß•tqB:-êû¾t(®þ¡4"Ú°h„^WÌvÒ¨™×Sô;Ž]Ä#~阌(‚¿xÐ¥Ö¦ÈðÒ'Á¼çUq”2Ÿ÷ÆÏ¹F¯œN©ˆT½cÎvš±Qœ!âÀMD”¬À‰àANLêËVù7€û®äªH>–j+Wu4ÆC–PJtÅŸ¨BRHhÍ‘ãH°õÄu÷—É[2ü$îÕ(¬Ž-¥™Èèx½ÔtÃGS£gUaSû3û¢Þê ‘µ´?#[¤Ëúñ‚5ùà,NE¢èDÎ×(àŒ2T,ÊŸ÷‰þÓ’1È¡5Xš&ZŸâ]ôsZt‹tÑI]³±6¨ lãÅÕœLIv¢ëG9p”ï*_u¨_.#eÅØáŸ!Ð/7dB¥ž‡w=ª‘hîïçe—‚¬ä¸ö™‚—„0(÷’’Œ<&{ÜWÑ„B½È\‘;­ñÝÀiªQ–MÎÐúEt9åM(£v#;Ð8F'“Ð7uˆÆ„ÃtÊÓ^§ FJ¨]ó›ü×4ð=w$+б‚ñêïFк÷…(º(ôÑéøÆ›¯3%ÊX¨”.#d<|^‘v0qŸzPE†¤,Ùs<;r£‘%ŽÝifœ|‰Ëo»çÊ©Dã  %Ë­ m8ÉùÇ/ôF«${ÿ°hÑjè¡¿-âUXýþðàGø÷ž;A³endstream endobj 927 0 obj 3081 endobj 967 0 obj <> stream xœÅ[YoÇ~ÈÅ"0àYC;™îéÓ€ìÀŽdÒ~„xyˆbB.%ŠŒ¤þï©>«z¦†ä*Q=¨ÕÛgU}_=z»z±Ÿü÷ÉÕÁ~”Z¬ÎßÄþ•XýãàíÈÿò¨ÕwG0pÔnå{o¤Q«£W"Oî·²£ìüpuð¢ûãZõZá»×ëîs¶ÛÆ–Bwojçíz€ÇÁŠîl½½1ftÝÍz#GÛZvgõЫÆÞ™ÆZ!ÝË£¿uAµ°‘FÃÈÜ­WÖÛÕÑ)(àÏëê¥ÆîU¾µ©€²Z¼ƒÜ¥VpÓ½¨³6µõϵp½lT`•&((ÿLnO~?Æå/qÀx¯7Û½„í¥èƒü.jƒ¢KA*Ó[/ò^ÑXÞ…^ßÖcʧ W½^›^€ø œ¿üL¦ŸÖNbuØùV”×èë餮·Ëz6‚ö^…“x ,Š:%p¯Ó¥ß¥”½ql5Úâ¨5k¬ªh”±Åˆ,Ƚ·ë`C[Êv£©×£\ÎÀV ¢–º¦È¯ HÉ^+Ot±Å£¢®cK;0ÿVìQÁ ÊfRR°SíÛ†#àÚŽöÁŸUÜ$%&ܑ޼‚ô`dFÑ[统×b°½Å{O¶›~@ô=7ýr³@nÊR}’f‚²6Y[!a±A6J+ø â·ã"€ÊÐófµµ 7vï×›¡7Œ áµ–8Â`7˜îËJ_ãï_fº1žža‡×ÝÄ‚9‘&ð1ãl´Ó+^±½üØ]5S¢¹ÉKGO@Èý4F)²Ô}V˜W-8˜[tø}ù,Ñš‡á‡;Ü% ‚LÁ9b“l=!ÏhØs§Œ”U=qàG ŸäéGð©×ø;¹ÿ›8ˆ¡3?µúDcÂ[ÿß›‡^CïŽež'ª¬å#¡åÛ"óM=±Š+¹›ZI9/i~D4ò '^tæfˆs ¿Ÿ6°[€~v3úvœi-ý¯qÀ¯a57D9Þ²Z}¤ÖÛæ’E)Ôð\U_JN¾AÌüòÄpHïop…ÁÀyx¿Žh¸›F˜¡óu6VéÉU¯1 ‡¾J0£)¡âeU`9ÃJ ‹SÐ:ÚvÑäól§ÜIq>±§ 6*Þ²Îq9”# Žðãb>p&päôŒäâ6èŠ8–˜G#á–å“ÑÛ ¨Ëf GmDkïfJÙÎàÔb¬d%ã¾1wæìYôöÅ׉õ$9*¡eޫ측Åe¦j´ü‹¤Ñå;Rdâ?ÇðÞw?ú‰´Ÿbü4ŒVÂù…d€zÀzäF–Œx¶»£Â "NB®U ŒÂÆÐ{¥µÍ¹š–+¡ Ö32åjyâþ6@šiþ·k `èz3Ô„q¾ŽR:8Ú¼‚‘ 3y7ñÐôW¾ r…ëoêGo›4J Ê Æþôàè«lÞ÷MŒ5Ì-ë†Ø¡ì¤›ûN*‡š9›ÉIˆ½¬¾"/<è@d°?«QówWµu»ãÏW)#°}¬Èx§†ò×MÚAŒò³›7‹¾¤¸l2½E2û½òÛ‰‡š —!’~ÉeÝП¡Î…‰±Ú¤ÈTxd‰,tmdKW)W«¹2áí}“—˜âÒH½Ûý$ØëY­ ='¼˜˜ÙÃVbµcRD#>æáZãBhÍÆ5ñ§zÃY99âiC`Ôs’OÆKx'»y&6‰Pé4OóyÝÇ*ÑtM¿Xáñ׿þÈÞ›JüÄF¼Üÿ©Fưxu"‡UèDbdLFfxŸæød¦Ñö!qÏa ²ÕÊR>ói%©:`JÉö§A{¦,š«‡èuh8+pšv=¸ÊÅ¥ý°µf JÀz šf—],Ë)'D[\ž”‹'ÏØcM9!T@KÌ( ÙœÜRyo 5<9¤¸w‰²§®¶MªiN#ΊOñH>™®ã¬Û“ë OC8åìÊ|`B.·'ÆkHá$L’zPÑKsÇ5ÙxŒ‡4“;@GzçŶZ[^JM#šêç)K|AÄ ZQþŽCA/™EpBì¼]+‚v…äD–*²Ýd«×8í¶ nŽ|“ß b¸¢´ÓRÎå$^lÄçqt[¬l*p¼uò>‹7Ï+¶¹eí÷46•=ÄÞ[lÞ`ó‚]áü±p4þC6ʨ¼l¨k"vž…¬#î6l,žCØÏf:eèC¤Ã«uËŠIzoÖùS$P«Í$ßÉì€~‡üÌçÍô ‘øfY!ÅwD0B%Ž ýîRÚRÐRêùžVóø§b |ŠR²±aám°Ená;-8…ªOî׿°H¢øî-bñ›çØ|W›|ò¯&QÀ"‘³áW|^õ/܉÷à×(«æM"ÊZ6`e³‘Ê ZÒ¤Dȇ½³{“òs,B†¨VÚÞ’¡¸œÆÍÓ0…¤œ¼gmL.×}ÕòDbÃ<,Àœ¸¨`.mR6 ('Àå16Ç@[-•>ehÖ@6˜•¼o )ÕÂù¶ ßç|J˜ùóÄô|}¯BDR¯šÕóQ'm8$‡Â¤ø’‰UÚBR*sÀðùŸ­ „qL|nwàø€Ÿ%«%_µæ:àŸ‚Þ,±ⶤäIbÇÞrò5Cþ¼^µ]S'u´o¬e‹ ~õë™î÷±6<c–tv·?¥¶SµÎn†Ú Á™—]—5_Ý®ñøo•ýc-mcÁšT©Ii;ÞDŒáQ8œSýÉãÏkää¶-m0ƒPdp¾™ž–·ž¯w‡OÓb€“êÝß ½Á ÚÈ„{¸MƧ@>”¥?9£ÏGÐ$§šXšOÙì[ßpU‘âD—^x€¥ PÍñŒ6­Z™íÜÑ]ËÐ]о<ç¢29K}8“ä1sOüÞ¯…OÛ&PõS"ÃWˆš T*•Ø^2ägÞí ÐÙ3ªjášÞÕ±”®åŒ~¦£ãÑ̃Ó\€yˆÔfÄL43¨ŸG©î¯Äœ"5z𹶝²tÚÜn;aȨ£6ÄÙ?ác¾MŠŸùd^ˆïó’îOj°ŸQÀ$O¼-Á¦]xßLFÓ}¨Ù¶†xøÂ ÑRÜæ†‚¬•éXâJ±ÚƒöEŒêÛ ‚Ò^ôBš@‘ÞKöeÚ¯S»Æz6µÛiï 6o›’Œ®Wᛣ`+©G‘~Õ Ÿ-y»j†¼b+?ר¼*gÖdGZ0:~èÌWx½¯Ù±7Mo™v½`af€\ÀûîðE³[@¹kV(ÓMðJ¸Á±ßàºd7‰ÍߨãðG's†¦ô6ù/3Ò‚ •™ÀRY©ä¸Œ ÿ~tðþüàSå;endstream endobj 968 0 obj 2892 endobj 1010 0 obj <> stream xœÝZKs7¾ûWì!‡ÙTFÑ£õ:BÂ%E¹låBQÔ²^Œ+ö¿ää殮ÑH­í»à„FjIÝ_ýX®œ‰Òß›‹£Ÿ_J-§7Gq~!]‰ôžV-ž®p¡Òná™7ÒÀbõþH¤ ÊiÆÝÂ*É~¸8zÝý²¦¥¾û°ì5sÎÙnG^Ý}Ì“·KŽ·¢Û.{ÁŒ1Êu×Ë^*Ë”–(»΂bΤýqò´ YZKÑmЬó o-»>ì×LXèVK3FÀt¥á}ÝÓe¯˜ôLw¤ZRv»á,ÃuwRŽ=+Çîª{IÌjèžçȬwEÖõRhf$8ª¢ë¥bÚ(!»/ñ†VH÷fõ[4—\ˤÐÑ ½Š)¹è¥ÁÓ¼[¬NШ!É€K/2ŒÞFAÊ‹ºßgu÷y©q·•.é?~Þ”!Ù4ÊT $˜+nK ¾i=ÌZoòZ¯Çµaö$­µ†¼ p‘áU`‡Çô †'/%3ö®Q7^9kº œSÚàÜ6Îy#qÊCUͬð~±z~´ú1iGB°ôi¾-Ãm~nÎnfÛœòTîusY°>°VKn I°bÔôIÞ1a¸DŒÚù'€„>u¡Ã£™3¸wÙå‚\0Ìqï’iðáÀð­Æ]Ê«î*ïº+Ð$ßËQ·ÉÍuéËá(ë|@gh3 5xs% DÜðn9HÅ™FF —Ö€c´¯Oxb]fÛkƒZ$*‰âUpX%8t¿/{Î,çÎtc| }øêÙùŠäÂDÄá\/ѫ熉Duè©„ Dí˜C%³*{D+"[ÞdÖ¨Ø4HjË8ŒpùŒ ŒœÒ.*F{îš>Ù+­ ^ƒ W¥Â€1HTÉñMÑÖÈPxû0D käÙ›¼ô,èÚx—¦ÜÈÁ~Á{…³%Þ±ö^ÍA%ï÷e¸-ÃÏÍÙÑ{¹¥ÛˆÜëæ6²`}ßÚ“|Äðpßà rnô^ÁŠ÷n……ÓÕ•»2èWÂ`Ý4w;Ö³™í8¸˜Íìf‹grf»šÖÀûˆ@§éö¯¿U³ »|Îõ887‡že]½™œ6E©ä‰‘Ã39?lú5m„›<Š. ÄÀŸIp{œE;itúì¼Nß ð›ÏRôœÿ0'aȹÀ„Ù8…IÀx—išPàYaNBk7)óƒŠç7…Z/‹X"Œ ×1ÉÝ ; O‘Y -ëH¬¢{‘#9¿N'!)°)åØý±Á!@¶£7‘50·3Uø¼N©íWÔïw=Ié(Àž{ÜÑ,4¯ÝчF’2gZî‘["Ò] C˜ëŽh9/‡’óCžÏíˆ[®i•מ—µ_ÕÔ‡sÛaçÔÄÑ@§S[Åá¶ ?7g7‡õ˜vãa?¥bS¹*um(¿o†\N¢<ߦ–*YLYŸ­91£@ìøq–„r1Š µâpìPknËìh~¬üî¦Lœt1óxC–L¬›P|Xê›o;²‹’ô½mv™%øñ‘D!äé¥dÆG5p¬–=Â>—Í)Ry4Ë—ôfoçiw\®¡s}f+0¡ñiŽôbè(€uÝË@üÆ£¡u÷,6J°ôáïðŒ'ä{sm¼€LùŒß{k˜oSig¦0voõ Òš¡ÉS.‹kÀŒåh[åë¬òìvDI\J;N­CªD²¿¹’Ô€çÚ4p®ê*—À!œO*Zó½µé¨&“žÍXõíìc‹AŠPâ[A­§µžÅœ1¨En×aI€ ð㥘¨˜¶'ø~UÆ”l³¤„C‡V…±ÿv(#Šœ&¨&ïe2,\º‘ÿ¦iʬQ©áCTïz’ëëЂÓMvZꇻ2œ¶¶BÅBêjR‰ÜÔ­¯¡ú*•³Åq8~¨96%¹,Ã]kؤ¬Ä| µ^`pCržµ*ìV3dD0Þ±íÄS2‰ßÏkB]^1Æû1Ù½§ûHn×Bö¼5qskY±²¨}tôÆ¿bKðo§PʶïÝB;XíìUÛccC–}jÏK®Æú1ñ¶™X“Y’X_Lgcº·kn;nÊIøÖ°kz@R$@é⹯ÄzuøïÕ ýº^çÃáôæøúíÁ>.òôA æ†Q»–#¥åM…’ ÷¨ý3”I(½ÁŒŒ¢Ê’©†j¦/áÈÐóЂ˜öÝßEkíæÃh ïëôal>³OÓ‹œÓD’íªæ…,àùPk—ÿ´ŽIÎUý=‹º£tWz9{@±Ö®~GòÇ´âÝŒZ-ÐgMLx çÓöIÊ› e«ÌqGó?¢¶«Rs‘—MËBG Ü-Ø=Õâä·‹ˆqO¬ÖéW—ø3é$Ï ¼ªtªÚŒ ¯U[Nªå꺦ÎíŒz E‘扭!÷_üø“×ÔÝŠ)s©¬ºòd_< I§_òÊó:^'j¿§«:\ÉI¹ÇÚ½½øÚ}©nf?ÌÈe.ø^6zî$m%¹n꺫øÓQ/0Ž0øc© SÖ@úÁ7ôçÏs×lÄ#ÈÚ]ºéþ$Ž*ü Ý®‹}ï&VéM!x|N;.eÉYqXŠò}Úa˜´Çœ,íªïÞÃ*†-Î{“ó@`M»NlwŒˆôÈÏÚÁõÿB‘.4”{!R"FþÃTŸg«£ßñÏ¿g™endstream endobj 1011 0 obj 2135 endobj 1062 0 obj <> stream xœÕZK5¾ï¯˜CÝ(mü~ˆHE `.(A«}Lv‡ìÎ$3;! âwðw)»í®êÏnX%QP$¨xÊåªr=¾rçÍŒ31ãñOþÿÙõÑ—?K#fÛ£´>³WGoŽDþ Ï\³'s`TÆÏ VZ=›¿<yƒò†q?sJ2?\=o¾i53ÒŠÐ\¶aÞ{ל$*aš×ÃâMËA âN4‹¶ÌZ«|³i;©SF6w1XÕŠy›÷§Å ${YÆHÑœ¡¬«( ´–M÷&œnæ­€+ô”Óˆh_ó¤í“ÁkÛ,£Tǵ”ͪ?ËrÓœã±KŠjÁL:çÙÑü‹çñ.$“†k•lÎä1’ $ßUWá LLHÛ<­räjD–máj¯ŽÜ¥(ÊäIÂprˆ×87×5,®ÜVÅ7HWÏ%ÛÖU†«=^«L¼ ‘0ëüWßßô‹‹ä ’›ªS/§¼ÄŒ´ú¸ø¡"wjò’—÷ùw›ÅÞÁú_ŦpørÿGê¾h: „г\–d%Q±ÅôYVók[MV 7wH˜&ÂÍ}x"Üí0»«±E 9iÒò#$Eõ~ƒ¼A,×L‡@ô}Ì} ¶zÙÍWHþ= ®/šç¢/¤h‹©¾Ó@YTêŠðÆk¡Ñ)MÍ'“˜YÈâµÏ¤€çúñ¨*àºÌË‘¬J¬ªÛ®Ççîo#¼çUrÔcø(.˜ÖôRàlGnÜ7ì¬jqèmU­m•÷¤ºZ7ìÏêÁx%;9&î$ì¤t`rÖ9Í Í¥ëS#QÇ ƒ)o“ƒ€/LF¬iu‹ä.ïRQuœy *¸É+e«(NGGBKï4¬…`{U~˜fá([…n‹ì¦QtHRcå/žp{ä1’$Hn‘Ü!™ÃÛ«0\Œ•Ù.+¨ÆöžÍáóp°Éû Ü}ª #lÑ:LK Vüð²í4ƒ3LB…yqƒ‹×‘ R‰¦ ²'“‘Šb2I ðÙ•] Ô:E4ެ;:oÀ.Ij4`x[扸¬Y-ô”$g¡…ç¨ ±k¬Û4p;Òå -Ä‘ª>/”+éÀÏÊùK¼Ç~`¸†ëD‚XEG†íÀº,ÃÃöÎá!ö"Îõ{õÎ@  iõW#h’É^ íhÁmp&E%L‘$*7-L…ÞÄ„ÎĶ»B\â¦ß⤫Bœïíåt` a÷°Ó~,Ä뽟–…XO9ÙúŠŸ&Æo‡Z3ŒäzÏ*¥P:ÆùÎIDä:CiþÙ“ƒ'ýŽ!Uø†*ñ§iÕ"¡‘ROŠÔl;¬bȺÂŨ‰4pîÀ;Áç[дdF‡SÐòKÈC Zß”£ÊÔeÕ}Dž–Š6ZgwDo£¹–¹0*å¯k÷Anqð‘„Žø¨ç4ûjx›4¸Ü1^ I0'Á‰ïª«ˆ·ª¬à6ËañùŒmL?(åÁ8èq.¸žç×Vp@"bÆûâÁÿ1 N\e/šW­….¢„¥ùBÈ×Ⱥc‘œ› nêôÌþéÏizÀ¦–›DÀž6ȃ -•b‚J¥!V`o³&û9œ©‹QxVö߬$Ewé(ŠdqOI 9B]$÷¡n#O‰§ÓVx&9W¥zGSõˆ}çzÆ%jE¦@*ÓØ‚@óS,%B !#éƒìzzCé•5ò*Î Tµå8%2>³È­0IçW(!£ó|Ä@ÀÒ9VŒ‡}:àÚ« ™>Ѥ¼D÷i9ŒJ‹ä>H§±ûH7,ùµ½£sznŸ@ƒ÷ò•­©$² @)¼æÞ^JGÚé+Õ¹»ºx]¯ÞD(i ã4ã‚ûã4–7(¬ æSoj-xw‡!è8^ZAáR >îS@Ô¿ÚdjÈYS HÃú½ê–³á‹cï–þ‹%ÖŸŒ$Nø"™¼Ði1Wîe_ã妅l2ÀÌŽ…;$§\q%dÀÜŽÀú!Ÿ\n¥ý(ùž“b"«“" ü“î0ýbr^•€§UÛ‡H¯]jŒ#@|Þ€ÖΗ|Èe©2ƒídõd¯öô±S~—à‚HqxÙöÆíQXóMƒC¢Ž'š½Ÿ ¼OÆX¬r’N`Fèäéüè'øó/@—ø'endstream endobj 1063 0 obj 1995 endobj 1098 0 obj <> stream xœÅ[Ûn$·ò¨¯ä©'ð0Ík“ÉÓzckïZAl#4º,¢Ûj%'Ê×›ìæå°»zzÆ«ÄØÓ›—bÕ©SUœ«–ñUþÅÿžÝýñ½Ð|uùé¨ï_ñÕ¿Ž>ñø?mµúòؔڮsFµ:¾8âñi5kíª“‚Yÿ‡›£š×kÅ´0Ü5WëfÖÚ®9é[ŽsÝÜçÎÇuë'”mÇ›óõ†3cŒ´ÍÃz#dǤ /_1ß«$³&~ßw^–æ0—Ö‚7ge®ë0—ßµh6á{Íx§šã5÷=†«ñHÍÃùš/×É„³Ê4¬]«„hn‡µL«›mYöCYö¶Ú—ŠuZ5oòb0×i™ëaÍ53BYÑÃZ2m$Ís¿ÃŽ ûÓñßü-(Û­¬_Ño9ÜÂFíG®üÙ˜ê\·:Þú dB·J¹¦æ§Ò|*ÍëÒ|,Íoû¦rmÄM øPšw¥y››Ãný¹+ñmîÜjÃí°Q¿LËŒó: £ø¬sæ•`ºë'O½ñ ÞõÕô+åÂPÅ„i«ï¯ËWм[sËDÛuÍ¿Ãfº¶µ†Çkí5ó6«kºUÙ¥im‡ÚÛ‚ïËPPOý·¦k¾“rÖ90i4 éÚ jÏʵ Ê—Ú¹᪳^Q_•e¯âg~è=5”Þaº ÂÊW(‚ަmÃEOë BBù¿X4½ºÀµ=FÖ3g©”åaÍ›ÐtÂY°»´éÉ FÉ·\ÖñÇ ЖYaãÚµ! Æ>¡•ç± Êc’NÕ?ˆd#:¸­$³!Íìõ„ì},~ÖtE+‹é ©:KÙ ‰*®Rxú(k]ñS™ lC9æ½ ­6à2ŠÞ‚å/«Ut¥MyÖàg˜S^oiñgAx5èÁl,@ܲyGõ’B÷V—uÿ‡i¤Lš–›4xK5èÀei¾ï¬GýmižïÖ ï”EZ÷§,ý0tc8SÒy]å^WmË÷Ôœó¢$È(Hï©‚dÍy|íÚz‡[¬ý(}óEâ%h î·nQËR0ò¤,½Oùû¬ö††³íFÓô)’*)p/ΔñÎÇ¡À†hõËvJ÷ÂòÑžð»{µËíßO-³YfJ ˆý{ÕÂ@hïüœ[gE_IÛ%¾¬èEzÐ@Œæ—a%Ù2íc Øp–m 6àz–hF¯6døE²FÊÉý¼äú@ËÖ>ï*ä: é8_{¼ß ñÔAzoBcȲƈ$À?§ rÛø“–Dc›Ë zßQ0 Ž#âMÿžÀ]Ô+ÒÖÈËæþt…eU.é=Ùü–ê%oQtˆ<;h¯Ëì¯Jó˜ì}sÈòø¨p€–Šö<ß«`œâ;roKó›Ò|}ð¾ÌÈÓ n™#¢ÑÎ|4A£"ºµ®#XÒ@ ’ ,P3aIˆ¡7Ó¤ÑRqó¡‹î5A»Gü£ Ã«Ò|_šoKóRîÝ-lovo- ˜“½å[Rånì‡Þ‡¥Ã­â/Ôü!S•šß[ e%Zú_SB¢×õºó‚öø†¼…³s³D†’íy¦t`ì˜wä{×Ï£k–”éÊç™ÞÀá`Û¶Îså±@NH/Pôß*£Ü®'ÐÊÍÐæ¶ê¬W@šëŠ’~‰Í>¾äF÷Ü:Jf)dÆ:‰<ã\ŽjW$S_tî“@è™M•@nõ±4!9»gZgŸˆà@ncqÚ&3@}_vòŽrÐqÀg½ ê¯'# M£¶9‹ôx–ü÷u³Hî ‘µöJ`m¯!\ö^ûǦ ý~L%裞m¤¿ßíg]Žðsœ{,+½ƒh;\ŒRþØŽH…¢Ù/ AY…^ƒƒÙp‰yb—&‘S(càÄtå?ëœcʼn\—ãEó’ mÌz9Mm *txrCŒ}^ð.ãúÆb¼r_å²ê¤C»ôåÀØ”ËÐ ”nl×톡R“A)á«íDBï)™R 38Õg´²›Kè%×VGÇwdUcš\“¹†Ô¸®æJKV{ÀÏT^vHx9?>¡ÙíØdús¢ú~³ƒâ‡4õ8Ý!:íFÀŠ÷Yv#9µõª.éõuþTþ€‚Yu=ð?Qå“´–k2]4²(/>cõo¥¹ÑßÐùÝIÀ·oé/ž öGVÆ`•¥kD,Õܥ§±ž'‹ë¾*‰)¸(À®ÇèbºJU®Ãèlè8x¦¦iã”×ö2œVJÇþ ètÐóÓá´5=âq¨s<§ˆ?_E+Q)*éºþ»«À´¥ªh_ÁÖï©¡À˜®É¯¦ U'i#DÙ–Žãfð‰A·^Àj#8‚«»D#Ü7¹½»ú<ã}ËNG6“—tÑ¿Š¿ÒkZÉ ¤NçÝK°çå"Ú=…LeÎ}m¹íd!à6ѱð°çj€#Ý¿ZŠxBÏU1î UºN͘]{£/PâN‹*œÎ2æ3DùbíuÞJ—^;Œ™ŽÛÄÃÖpT^ÊÖ›!:²>"ùLg0vLI§HM¨Ê¥Ô¡·­¥ªÈ=È#ô‚d² J¹êføíÏ œ@ æ=Zȉüy¤½Xgdþ¤Ï‡ &AÙ¬eáŸ{ ²$!§»ãj®à8«hk¹I ͺôê! §Tué ÆÒÉqzì!™›Wž‹µ‡£Vh‡CÏÈ=–äUáÙ "ª ¼‹_±¶I&~×3•l tX÷\`n·‚ÿ7‡µüM#¼!‹I„µrHMj‘ôcÆ> µ÷cÆßÚ³>Ù5ä¨rïó/Gã]P  ¡`gLàfºI˜?#ç§uø¹l‡¼õÞTŠéSœdÿ!5§fî×=ŠYŠ^àyLÎ(’Ä÷ŒÒ°6À¤‚.w%*ÊX½B'û¨ïõˆ1âß ‚O|‚¤fp•VØŠÑ„ë4C¯(ë–yRÙצƒ€j’2ÿÞ7*mý$¬2°QŽtÉS&í=äè]aEå\)zɳúåQ˜ªöBÙû¼9:þÃþ§zçÿýáDendstream endobj 1099 0 obj 2890 endobj 1161 0 obj <> stream xœí[Io7æ¨_ÑÇ*`ºRÜÉ£ãäà1“d4§É` ©%ˈԲµÄö¿ŸG—GÖ«^)˜CàC6·züÞ÷6êójØjôÿâ/nO¾û…+¶úðpúWlõÛÉçÿgŒ£VߟÂ@¡ìÊ Ns-W§W',NV £]Á ?Üžü»{ÛËAqÍ\wݯÕ`­5ÝYh9ÆT÷)w>ö#,(FúË~Í­µ°Ý}¿æÂ BñŽ•YôJ1Xç‡Î¥9­¥gÝEYëÆ¯§æÝÚÏW3²;íôh&Û‘Šùïë¾ï×bàÎJÝ}ô«šQrÞm§½ô¨ºMÙöcÙv[‹ 9%»÷y3´ÖyYë¾gjÐ\Z,¢û^ J Æ»oᄆqûŸÓ¿ùëÒ ßš0gŸ6HãÌêtò?Î/Màœðæ’òªû‹?“`£ô²–¬©D÷öµ¿–I6‹RÀüër¼³Ò‹@½H®è^.«i\ˆ1Sc$Ízð‡uƒÐ.J8€d›‡nrë²g#Œ²ûšú&I 'WfÂr¯ fÁ²AD,>À£!Ū™Fþ5âNXüè®7~€ H« û®ü^䊾IõÞåù[<͹‚û\’{ºXéº[ßë8@ »’k:ÌSÞ«^*MÚ×çÊ–[|Ç3hx¼Æu•d÷î„FT?Í6ºQX wXé“zŸ—Îo$)\6BPôГÊà$ȃÄÌšÉqD¬Žø‡8j”©ùXš—¥yOŽ=ËÐ œ{ÿ;5™qÝç2à©4/KsZWj¾uŽ´™s«53p×#ÛÅè–“ö9Iõ‰ûibÆaEì^?Á<ýÌ×& ‚üU$h `/"%5ôÂÉÇè©ÌÍÌ„$ðz4’¦¹áitjÛ’’ÿý¦Ý6ˆå[Q”X m[ªm@Ë çƒ=BtŒ´i=jÎØªðf6¨€£e„7x×½—l™ DÛŒå©X¶›bï2Gj¬¨Hžeƒ›¶I4wØ"fó=!Ê*…M’_ ÉàyšËÂFq_cZÁK`E°f@zŒÚÿÏl8î×@ Îy%|ïáªáÌÚën”ôÓì;ˆ%ÜÈ £… [ªn—Š2µc’©ßõ[´ ß“Ôñ§|ì÷ÓM ÞweÓb·CÕ|«G«YøV)fu¼¨ð-Oáò-šè÷Y»ÈÈJ-1rb4ЈÐ÷rQˆôî‚þÚ8’Hß $ËH¸„^‹Ç‚DpAéÄå A[EÓç";GN¥Ydƒ®ÆjögÊjÑëäèî ÂËõžÏ¾ŽZ ÙÞcÓj„šEɽD]Žhû§Šaï,zDq­D’OªÜ{äî\Fõß“Hô!»ô3Ûк*´qA¿EÙçÖcKc«h'@"Ø´D8q~┚þÏÈuK3òiFàSå,Šr²úº¸œbRKøÂ8™›Ñæ~ÑõÏŒŠTÒQÖµZy$q¹?¾ù؃³:zùÿÞkÐDÁ4vŠ*ž †z-¦#!U™dä=õ_W÷«È•7KQ¼*Ö E-(æ(–pͳGçh·|Kª`´&XgÙâ¤ü™KÚDº –Å8¨Q-XÆÍl+[3#ó {m m:éÀ!ÆÈ½ryŽéüÒ36¡•—±²>IÐU%À'IºŠ´vãÓ$:6o” 7°ß„y>Ši×óÛg`êð„Ú!dܘG¡Èò"8o¯=åË8rLô§^¼º^P((ÆèL¥ ù£-ž­#ù¬ˆj4ŠŒÁ©(„z$•è®$ ¶‡*Ñ¡†ÅIt <‡ÿwxQ.ÅytDBæ›g8 «.×)|jéec/¥›ÖîE)¸AVŽ|µ†Ð "e]ðvÕB¯Í©¢@þ¬Åq€éuSi ì?jg”ß_ÚAúP>ªíYPòY¥ûY#ÿô-5þ>ûé65àXf´ƒf>¢}©q“oSã.56e©±Pð±>b²M&âÝt£ ¸ÃR÷ùw]ÑCS¸'Ù<ä ZÖ"u ¥®#¼ÆÊ–ÑÅuIgU°bÖ #$|JÎ[Ðg1­Ad’ Ys´**‘~îÌhrÎE.¥>e¹/5d0¶Ùþ¦‰”À’p[š¥Š@×½²6`ƒK×­Ð…Ñ©‰ÌÙK¹b: X…M¨„ðC•áv'MCdˆòÊ¿¬9ãó4lULš²à!hÙd9ÊÕ ÁT7ŒY6Øù+N4Yß,j63·+TmàæFá²ÏRÒŸ˜@oJómi"G`s0²€âsñõjgÜñ’LÑä'ƒ¸«êéõ,”%˜W­¬eV¥ÿ±jî¼…áî—Mh·KzXåÙ¦}ij+“¬1&ö•NÑ,ä¤Ò^l›Ð ¹Âm½÷6ÊvtyIM“G-1~>¤-Áx ìu? d“3AþÇÞšÂ^°w¿÷‚‘žß•Ûj‘#¥ý½:Ç¿Ãß«*‘T9™¤»‡¢’¢ó l `8´_ßZRG ·SEIkòÎQ´9ôÎqú 8gÉ_QbÁ·šWi4DºòRo*ÏR9“0c˜ªé‡-ñMõ½Œy—osc(r«\÷cxfµì~éÌÜ'¡ãÓ0R|B¿»@µ,ÿ@Û¿+ÀùÁ¯æ¸‚ë#éÅÒɇå~Ìd,˜,å@.²ò2+²ÞãÑ Ì-F¬!ºa­pÝxxJy:àËt‰ˆ%nKó”ð©õ6ÚÐîá¥Y±è¥Wç$Ëæk 5×%O$_E «¸ê~íÊàGÒ)(œK'Ò íû\ ¢IópogþæÄ§ÈÇûtç¨wÁ` sgÏó$ê6ð ²#W=Æz—ðŠD%íµÐ”ù,¾ÒS),ºYEµyæ$.xÝ;9¸…û…œc£~Äî~[(¯ Ÿ_hùpR¡ &“©tˆuÑ„mi¢'ˆ(pJ˜éRûrñaOúACÈS2rç9 ¢La¸˜%¡›gZ%C… #Ä>!æçcC šƒ6—«@:IR¾ª“ä€À×±ÑüQ2þ›2=Ùð¸Ä¿ÐÉ~*˜þ!ˆÙîMnŸ6Ò–“Ås/tŸñ%u±~Û0™‹@BQ+L‡† o äÇx/oJó±m¢ÜÜqcÿ£ÜW7/˜ªÀÔH?j­žw䱈܂Æó*”¤­Cy%‘íÏhÒ=/PJÞùQQ%…³3 %¸‰bÍ-< o¶• _~|JÆÎBÈ|*DØùkÈò°«ýóÉF¥s>hG@üR9ä¡Þ»>?\¬¹=¤Ý]ûB&gV±ò {ݵ»ÿl¨ú¬sb¥‹öt!Dš@þ¹U~Ó§Ÿ/¥pSg¡ RQà+X=kõ ”dþRš¨¾Aû%ç¤ÛÖ…{QÆ Fá<7Úìfß[ò4ûª-Míz` êTºÍx¦ùÛ»q ·µ-“׃þXÎTŽß§'?ÿÿü‹Ð2endstream endobj 1162 0 obj 2804 endobj 1227 0 obj <> stream xœí\Ýo·ò¨¿Bo½|Ûåç’Nì R·…ä! ‚Ó§ÕÈ'YÒ9QŠþï%¹$gÈÝÕɲãF<Ùã’\ræ÷›õv¿mØ~ëÿ‹ÿ½Ùûëw\±ý³›½ð|Ÿíÿº÷vÅÿic«ý/\C¡Ì¾m¬æZîœî±ø‚0ªiÍ~'xcÜoö~\|µ”âšÙÅëåJ5Ƙn±’eL-®òÃÛeë:mÇ'Ëk´ÖÂ,®—+.ºF(¾`ðVãžJÑßÏ@ìûRгÅôuáûr³æ‹•_5¬“‹ƒ%sO4“uKÅü÷-¾\®Dí‘zqî{íZÉùbÓ¥[µ8†aÏaØM1/.dÓ)¹ø6†ú:„¾®—L5šKƒ—èz)¥ã‹»0ÃŽqóóÁ7~¬Ü7nD7e¿ á›Ü†¸ÙÙnÿàØm€ÿÖ†«VŠÅ)ˆ— ^ƒxâÄ£ JÛv~ãÓ~Òtn­¶ò3¦‘¦õÚ†^/Ýå?¡òOwIx9øéMÜ´ºÖ4šùíŒÏ.“p ­z¡Ÿ™[e¬¡+n¥¬Ù_1ÓOîë%n ”ökáuÐÚ~-¼b褃ʉk£Ž×Ô/…ÔiµK6\·¿u¶­ÕÝb {y‚ô}ZoD—`Êo3þ3õâ7?7ZËÒ ý´Â°Ê8½‚ œÃPgÙÞ6YºñÙFtO ÌÕk…ä’Oä¤ó~Ÿzí™+üÔk£2ázvŒ"É^ßøiYî¬Oë8. ·xÐ' 5¸[z â²õF”Tù‰ï‹¹Ýføo²iNo¡›74Eï#Ó‡ß ôsT¶5x€+èn)Ñr E¢Añõ}áKZÜz ÐÚ¯Û*-ÜŠq׸åýúa sC:²ÍûŠf¿Ic«´ïþ-dôƃ>>‰D¡Ô¨b¥—6½=wÖº§¬m„qöðûR;0€¾%Z½í}õ3Yq®nfõ!Ë%¬íqÑT´j“Öø‡dK‡¨²̲@“•Ju4_0O†­p„áš1k„Hà†ÏA<q„qOïÈ׎Aü}š\´íõéÑÉÓFµDÒcþ˜?Œœ¡jä`vW! è–©¦°›$ÜÖßDÏN4R8N‹cþ\Í®¦@&;ï–­˜ûdztxéérÕ6Ú:ÕŒ¤¬”îÜê’;z¼BB°ÐÊkÒ†wCüÌ´[ÄŠ‰HÇqÑeجm¿óœÍÛ¶ô^ÚÖxä¡%}·à 1Ýï§É?᳃~á}MÁZ‰?Öý6º¸†@ÏE¦Ae3 ¢ÝŠÐÛv¦-æ›MN³Âji^¼6ÅðÞ ÎðÚ)<ó´HjÆòßX2éÔ ™Õ?(H0‚áS·A‰Mõø²W”ˆ»àDYº}½¶¸þqVâ±;B­Så"› !§ÙåÀ—!‡yMË8EŠ' "N8ñÄ[¯§Ì©-G°w^bEðd1X/Š´ÂÅzï(6ßÀŽìà" A“%i92´MÈu»¢ô±2¢_&µ ¬bãÀ…óän¼ìUQ±aô5AÐ=k9‹Ï¾ØlÅÇŒÂvd¤°@î5`Üš(Ùx¨•›ý´ Ó@ÈGi äàß‚ø4Ê]ô"s$³…oHàÿ¾½«‰¨ãDÔ¢·ûJ;E§¢.çz çðÄ5Ù ütŠßüWÌòÛ«~[ü´œæ:î`™gMž è|„Èôx<‡b4”êC{|âÄ«z©«è`HôQF›Ü©:q÷Û 8Û‚³ÃAÐt=™åsàjû,Žq¾ 9hi‹¬Þmà)½>äÉeçÊLðJp_õ{ÐÊÆõ)ƒ¹ý$TCrý|D2úÀÊëˆ:GFå-¬a…PàsŽ3¡9š×w¥¯xßås„ËLýhTøVz}ñZ²PÎÊ>- )€ ДÖ$/dwA—kÙ88àúžž= e™µòŽ7Z²q3¿°b Ú ¸Cd€D”º›6~× åMÏøWÃTöC¤j<‘Ne>5x•ÝÆ[HŒ <©ú$ ¬œwKÿløx°uï’l釥ãK†ˆ/¯I5¸{Å“».M£‰¼ÿ ²ö”v¶N&cܦ Îߦē.NfØ' ÚR@E„õqr¿óÖ¹t„ ÝOAlp£iˆËƒöY—V4uT È!âzKóÊ€kðï(üžžPTxöØT‰Þg瘼 lD߈v íYzêê„H Ý*î” ѤHÊ„Ñá­t " OHÒO˜±Ä*Òi´ùt4t¯‘!(Bˆ™³sN²zÀ+óÀÓŠt6åtÙ¹Ùñ®H\Ž¥¤;¯Òv´c@G‰å·$1ïG‘;L'‘»ô(/Ò)qËð4<0:Á™2àsÙzÈ{ÚÝ/äá$·å‘Wj f·¡~†wÞûÈë£úN‹êP¼_“ï–lû’lpAŠx%ý7ÆmÃþÿÝ7ÖÚ†WÁàgî³÷Ùƒ{dnšH>{péÁÁhCïãÖ…¼ô|…ÕûxœÖ3ÑK–éíYˆ`;ƒ9Õ§ÂtÚ‰¨Ay‚5™IqldùD&±ö-)"†G¹ôÚ‰ë×çÉvʲÃò¡2šƒÌ\è`$3—O:DM;Ôî!}}ÐPÂÂq4c~ðRÉ÷ve‘§útg=®«·Oͧ¬ÂäþÝﻆ‡O¦7’µ-8LÿÅG'J£N²Ìùé GÈ¢+1þ"Úêã‡uöŠìì²í§6Æ5:ê:Ån,rÎÃùùôéy,kM§ç÷Ë’3-ÑiÅØ‰«vÿ7A#ÈÏ)‹A&õçªÉE ò©ô}?Û ½dÝò Hßœ|˜rBeY7š`ºç¡æ²B9ÿôØ:®@'Gð °ÅjššÒ“‘DÌ•ÍQË[Êožk íÔ#ÙStŠÄ|ŠÄi¨·¹‡2?ž^Ò¤ð`Ô×û¾ÎÇ`mÓµ­ÑDaYåÒ¢ a—!:+{Hª(ý0·X©çfOÛÇeµ?º*³C¬¸‰J­?ãôB´ Ò¯H¼GÅ6eb3ÕµÍÖ¨–û»Dq™ˆ½‡ ªFš`ƒf`€Ç¤Õ}jV7WtOÇ;duHcÿMV"¸ˆ[XQš‰72ÙÊ)w¬ê¸ûKØã—>ÂZè B<üá÷?ó%éÉK®o'À¬:º§ñzG¿\e©º8<½etV„DéµTodJ:·è œ.¯&7STÛŽÕT\# ­þ)bMÂÏ»¡tN1J4ßQº]æ4ï=XŠ \ô]k’ÑòÑÙËPT³‚ìÂ3ÿ":—ýÄç þ∨Öù[²íK²³Èé¼ ûE£¡ŒÌ— ~3—.iým¾‚’kºšµ»¿û17ù4#PT¸ÒµªÀ‹/²Y’xLÍAH#tÅe•níuéUæEn>—½Ç~.ïs¿ñÕôB¶‰<Ô°RÍ`d^Àœ—¯MŸÍ µ7 ¢ü+€ÿâ;P¢5ÙuvBö0w/ 'ûPžÒ¥¯Ôw>ÅÌUYvþOUä¢Û±{¯n ú¶ìÙÔ•XnŽªÎg¯Ä²®Jª=C÷aØ P*2ÈeS çÒàÏIÌfåCQ™¼ËÎºŽ¾»K iè¢#T9r¬Þ+¯¨Hߢoà’áýŸŸ‰zsU`&á_ P­åB¯ þ†•_PÔÃÑÒYq&\È\ÞDqèF.¦ä£×2|Ö†±Ù­"׉[ì)ÚH^2¯/O{^Tø]Ä6uP†3£þaþ{&¸åé’Yþ—w‡)³AE®åa–7µãF !ÃÎGcî‘Ý’ ÝBƒ±ó‹ŒÓÝÆ8á}ÔË?b&œ;æÿzVç€-¯ú£c¦°ðç{ÿrÿýypPÁendstream endobj 1228 0 obj 3540 endobj 1298 0 obj <> stream xœíZYo$·’7ýŠyì] ¢9•øÁ®7Œkíx÷sö#ÔÀ¬€°l˜ìÀ ’8e,pD1ç˜r‹¥Ûp†°þkا#õ>ì 7¶xûD® 70ǽñtô¼Ñ‹Àašþ¨,Ü×+ uäãÙWÙoaLj“ýü«à3ÅL•„í¢…+!bŠñN#ù¾…\ò¦9:B»‚ýƒ£M7,nàI1ÿAxƒ;¹Ê´‰Ãò.ڀ᣶!(Ðv¢ˆŽCØ–Œ uÐË>#*_ưòX•>äßÉV5¯‰ç4µ ÏItˆÓÅ4¿Gys£Œõ _·Uw  óèCžº Pì]‹jFwüÖ¦âôU!ßò¡ÞgA_ùÁÒ¬¤ª=µÙîí$þ+g›Áx«ƒùÊŠ–=ˆÝiýHìñ1g‰x><¹)Èø<÷>ù®_pLc³x›&³Ü -‰³ÛÙù³‘ÇD\&b“ˆu"nfË^ºä>fz !¹‚Ñôg|e–¯g·yšÍÙÎ~º™/ÞÆÓÛhàYñ#ncZös—ˆÕÌHòÈíþ9óÉÏ(`& @µoYó^“ÆÚÚ Jy~Œµ…ÜmzµýçÕåŸÎfJX¥ å>Ÿe½J/r•ðr Á|ŸU!·…|SÈM! ùXH¸=çÃ^Ê•ÑðÛ˜h£–_i$Ú§Ï3ÓljÂÞÚIn¾Éiö®ü^bC[Xg£kü÷±þ¥Ogßœ¥ì>'~TI¶¡ñ9çô±„«ÚO‹Ê!í~ìòpäÚV\7ÊnH¡Ä/ù ºorâM¦ÊØ×˜(Úap ÜÓ4Ú‹âþK.i IsV‡Š"2’¡—š•¬ú±9ª2©]¬bÜá*æŸY¤€nò}•—“º€0X¤ù-‘z%à 8[»`"{…TQ1ïð`ª(’àŠ0¯é®è–]àæ—uNšE¤²y*M•ÇÒjYçJª…ÕÁ*5"¥£=¤M?¯Ç wrÖvì+WT×eýS¬‚4ÖÉ^ȵ~Ê$Î[ªÁB]r(rfIRïœÚÎ;"´î%ª‡Bì2Wàdf’÷žæ ©d¯KÍzOvâ€Ìñ#þ sié¸=Þ.?5ﯚ)رÇ^„ 9OMhØË8ËQç9êÜ5£!IxÚò¢ß7c p›æ± 4R7±ÇFÛˆ)½”¬Øzj¥ˆºžâ·´ˆo)ï›=¯R »ÎÔu{^U׬lp߯ ­±Mã‚£aÃiË/nÙt3'«ÜNøÚ¹ßs!82¶m,6\âÑ?#t‰a¨:ņ6Í^¼ç¦ æBLƒZɪԃ³fÒ‹NÇö¹„$žã2«Hf°Úgû#7¾‰í6ä+Q;HCePú.$± -Íd6øÿÚsÈ­ätê} iÚS×YMÃyˆÖ×ÑÍ„§ùDŒER`ìñù‡î(m±O¬QË„û0ÆM"b"ÏêLàwI³|ÞŠN*†܉ b6ˆQ Ýƒõ<_O˜—ldÿóL4‡}ymÑö8bBOÔÄæê/R„çM»ÞÈÁ˜ùÁ„ä:»f¶ArânÛRá™´A^2+pÈÅÑa×Û!ÍÔN‰YSA^¥8|y‹ù™Èeª— ø”yS§åytžy¥<90à÷ÄÕ:,ÎÇÀâS7ZÄMIÆFò8R÷’Ü쩹ÃúeçÕCÄö:/>€‹ILE øÞ/ÓV¹®óùbäót'[ñE©"ö þFóèì«æÚ©Î§;<œ…L‡2·ËG„ŠvÝr”³áû-èèó¡É!`¸,þµk…ÿê¥$0e투1÷múÚUñÅÂÕÝÌðV¤¤$Ú “¿e¨é }Dˆ€£ª-xÚ˜˜§´!2j?¼_T× sõzF‹™ÆœÙ²*Q'QŸdBN—Lj…Ĩ¶MˆŸ™ ¦êIRZË(Û:f¿Í¹l¥êóâŒfY¢?r‡êÑ;Ö;t%†í~Ÿ×@¸Ê®[¡YÌ`yi¿§ÞPžý£ùò\±™•vú2Ú~í²Õ[)+}Ëëf»“|¹rÑœ@°¾4L÷~Ú‚-áüiËŸÄ$3ÒR¡Oc@è¦gI£ÚÍ›×ïr> stream xœí\[o·Ò7ýŠƒ"@ö>Ûåuɼ5ERAR«}I X²lÙ°,ù"51Šþ÷¹¼ ÉáÙsT9 Š"YïárIÎ|3ß\Vï6ÓÈ6“û/üÿÙ›“?þ•+¶¹üpâïoØæõÉ»þ1…Q›¯Na PfcG«¹–›Ó',< Œ'³™ üðæäÇáÏ[9*®™^nwj4ÆÌÙ¿²Œ©ámºy»`B1Ílx¾Ý±Qk-Ìð~»ãb…âËOpWŠÑèð¼¿y™/—¹”âlx–çºrsÁªù°sÏ«‘Ír8Ý2¸£™¬G*æö7|µÝ‰‘[#õðÊÍ:O’óázy—žÔp‘_û*¿öºXrœ•¾M/Csç¹Þo™5—Ñû­•Œý gÆÍ“Ó¿8qi†¥°ãZÁÈÍN¹³fszøf»“#ד^„]+(ˆÅZáÎ+ ÐÃé©]ºz›Gž-g¥˜v ¿£›oÜMËaÙØ”³q‚Ëß¹í 6I<ÔÔãlññ}p7í(fƒ4$¼É­ÿf«Gg¢‡¦Ÿ_eºH7‘*å›`vfA"…Ö½¬°Ñë <Íðü·Q?’Ö¸±7Yf×”ZŸå¡h®<ôCÔuí†rÉG%-èbZ(…2 >n-ZŽ“dan*'j!FÆ%:¿3 +§A\hÀ& ×+ ú‰E‹PwIÅm€+@‹¢Ïõ ϵœ ð§ínçi2ºØá¾ ƒ£(;,ZdÐchCÛNÉÅû–ÃïÝ]Å-<öy!²3h€ÓÁÆÙôãÅcNz’I¼d.‚Vx?$t߸]šÑÀÐF“Ü¥“Ø.ˆlÇ8ìrâ‹äJ»ã'áóŒÍz—ïÞ*Ñ´?Æ« yVJü‚<²±~ÒË|Ò`án$F†Sb0eÌØö°æÐ‰v‹ Eš4R§³Þ´ñ®%磯²ˆrÒ=ÐÓøi±–•¥2 Ñí/ú*¹Ud´óî°ûðP—ÓÎ/b=žË,ñüQ¹îYÝx}ð†à •Ö8ëý³äÕ0ZÊ7øÅ*Žñ>š8ÙßE¿ÉؼÍÞ6N¦Y úm4Ð#º¹­çÝØžyÃÞ x$'g}$AêB‚ƒ; ú2¿úÛ8Ô½Ï123±Íé·'§øõI9”|ècÒ9 Ìjï2"á4&‰Ò\8Ó¢™·ÅŸˆILó8a^A SDBöQ‚ìæ“p c˜î¢çé±½h)ÅI-œ0¥£xKmùà”q@§K g3Ù4jièE­“üólHÂ%›N„1‰öi†¬Ú2D…ý¤Geß`áfÒÀNº!D°>x•$àyÆ ‚¢§/ƒ»uN‚}d¨ÓÆ)KpØEíeÅÌ(ça;æÞuU«¨¿Dê‚îÒ~38Þ™ÍÈYv9¬§|€Ò–lÖ8z™ÅÙƒt/Íý‘Д!ƒ:ëÀ¢‰­EÊ›½tÑŒš±ÊÎv ²6&¾üòŒAŒÖŽvôfqµ³–«Gr€("Æs:# ºD‚߃ØÌxþ¦0IÞ¡É}vÄkƒ:ò½ |„Å!ÿ i~b 4cþŽÇæ•2àäRRg,7B5/Ä¦Ä ­Ià쫞ýš4An@õr/²¡ñ|?nÃ8ô#<éwÎC×ß.Y¡”»„ŒlnhO0tXóºà’8,èÙ€ãæ¸4/m Q6à,@ZŒ"ùë>I ší¯¡ú§-càC3q‹€ð†’UQ.q÷t=#C§ˆ[9f“kN$«Hz9¸Ò‰fgç…¶p*ªõE5’@‘g¼-°X €¾Êþ +ØQÆÒ(!vY 8ðºFJæÖø¬ûq(2j!tðÏE#+ùðuUK^"Ãpç MFñÞž÷Íøî ИàÍîô¹Ò’ßy>•ò·ÑËFp¹¸r ›béæ]ÂŠŽŽ®±qÌNÓ×»1±ÄÞb€v1;[¼‚+ÒD¡ ª°Úǃvø,e«iâ{ÎH¤c?ãEž½÷.ØW9Z¿¨ˆo8ùÒS"…¢Ñ&t©˜ñû­R£•fQq¸’¿äaÃc/g:ä}E:qDÏ[¿ºäË"ºbv4jvu¼ßo&½NÓ†óB_K[åæºèý¾¤œÔpšUà‘QB9ëPe²^5WÌ£4ýç•9¯Íj4çŒwæGn–LÕgYgCGøºY—¥„j›Ì¬ É*Q/³gDˆ6Æ,¹þ¾e>3Òc÷­ê»HÞ­êǹ"‰,L{›fϱ²—VéæÏKüúLh¿s$˜†—p+*:9©çpÏŒwÿí²ÝÖCûõŒÄ2/ÓM’òßd@G(š"ûžd„eƒ•%­°Ä¢Wr¾ VšŸ§““N×αßþáó”šLã8å^¼Ã{š±KS¨·9I—*hJM„…rÆDñ%¹á”ß±{¨YGÉÍ2V:ùèª"J‚ ç™·üe<¦ÿ´èH›³—¸É^Œî/$Õ’æH´ÅGF˜ìw½îˆ1ê×›%;«žÏ§ê•óÁUbAìçõú–À"8Ïß×dŒIZÀº$ú=+ʦBD¸^:g…Ž”.ó¥Ê ÕT¿F„uWÈZòi²Ÿ’ˆ~´W©Tþþ¸w«œlA‘®(¯ÿ| v\Š™²³U!mN¢ûþúƒc3bj²a;Àc J‹õ„²b¹Ð\²ª£´Ž@eÑþ¥aE1.ñ6…árB+—NjQËŽ²WÝÉ-aAýL¦ šúuœ1a؟ƨ(¥M7mðÜõ<ÊžL³ÛИö7^Ms•ŒZ˜ˆ#|Å¢ø†9íÑ|ùŠeYÍ¢?•è矶Àp t”t[YøÐš)gÓå ‘›oB wª¥ŸoÝ’Àzê%аÂjF~M㘃tZ:f®÷5¥Ç÷†µ‹|‚»y`–ù:hÃΛêȨ„+1çŸc—ÝYtC»‰xS-ø'Ï1¬…Ô”#íç¿B­¥Š~Ò7.¹c•X‚là*Ö?}·Wi <Ç….yqÄ1½ªÇH–t‹FèÎÍyütÙTÞ%Ÿ—]™¹Çsi~ÝX‚”ïÑP±t,Úí×û+õœûLÈ}ÕË&=z%HGž$(q=£Œ×ÿÁ}0¸ÉvÔÀó4C®&M ·ÓY†> ªðþtÀm1õ(8íº rûõ©¿ë‘¶chúåáиU™GÓýߵ»¾OBûÌc•kÍ£G’¢»¯S«¼1岼݄ »ˆ«ÊÒ{¼Äí¥Æ!NtÙ¦í¶šô¼î®@ö2Y‹Uƒù t!‘V,œwöHmJ ¬ôîË ³@dü½Ú†“û(ùxß~Ÿ4àˆ62û~‡­Nâ&M·®eË“À•y¸R¥îù,_¬óOÏ–b³M åAheb_#m­SÉ_ú;ÿß _Zl›ƒ?ŸDþEgŸo){•³±ªâÎýà§: 0àÌ\VsÙ„¬~”P䕳`ê’Tü°99£t‘œAEÑ,\íjÏ>­ñS žNLñyµNv»ì¬ìä#èZ&Í@›úÒöôÔ!_ò‡f‹£¾—ZðoÉÚJ02èµåõ»BÀFâ| Õ:ßËÒ¥²¶ÇÒåèÜ Mðè"Óê× e7“Â…¹p\ev/¦öÍUóúÞà¶99±ªcªªáåú•@õv»SÍ)?ÂÍ"]ÝËͦ¿Â ;n`­aEÏkŠÂŠæû—j3Mi»ëm·8¿üAšuŸT2VÄYúê¯ú(,Š®Q’ÍU­`’*7=ÂeªÏg8]³Ð*_E¬©ÜEs×6åÛÊ çש+ÀIþÚ~jPz/’(§ðŽê&^ùŒ§Ê7‡²ðz$IèY–8YpBÊWwKUޝK(_ …OŸ.?ÓyvDÚI—&ž?ú4½5[K¤ü4:®ºuÍ'…Êý&è@—ÑJPšÎÄêÏÁ॔İýó\Êóëûë Ém €©p3_Ÿžüÿý§Å fendstream endobj 1367 0 obj 3712 endobj 1400 0 obj <> stream xœÅ[YoÇüÈ_±PdÖÈN¦Ï鉑‡ÈVŒI åAâ¹< rIí.%†ÿ{ª{º§ªgjvI†L •š}ÔùÕ1Ô§IUŠIåÿÄ¿.þðZ19Ý„õ‰˜|<øt â?ª¸kòb•q“¦l¬´z2?9ñ€r¦¬Ü¤V²tðƒËƒwÅ·S]iESœMg¦tÎÕÅ"P¦¸î·Ó .TU-Šåt&Jk­rÅz:“ª.•‘…ÀS%¬jU:χÅS$Û»Œ‘¢8».ü]Àµ,fþ¼)E­‹ùTÀŠº¿Ó/_ñb:S¥lœ¶Å¹¿µ®´”Ū}ËV¦8ÆgÏñÙUÆ—Tº¬.»ÇÈ]ð®õT˜ÒJí¨ŠÖSU«„,n‡µîýü{o.+¨fÒØ9ÙJ]7õd~ x7éRÚJy©#õe:«JÛ€º3¦[µiÙXb¬«–jUÜ ¹í‹Úßp¹ñ²˜Fëâ}bÆ‹"@ Ñ4“™p-ÓëX=‰¦2оÆw¢¯( £°T¨¯‚Î'éÖc«-k§îÂ~ë6ªsÈì½ÁÕK/B#Áré Pæî’¦”®5A]UΊÈmpýÞ»Þ ˆ.â/XzÆeiÀsoºEâlAG¶²5 ¢mrüÚ«Ó+Ö«sHÓTŽ sÙêÛigƒ÷uã]4)cÝ¿5dÃmŒUl{Œ¼ •*…ô|y—ñ\€ÛW­¿dؒά¢‘›&W`RËîp Ih“c_uA¼b~Œ,p•ìíœÏRÌ!6 è²EœXtÑ?‚Düª—G‚®öHОq¬{½Î¢bgBÂÞJ¶ú½O`˜’÷Ö]@´®:Eò÷ÜUM/¸Å $úÏ@ï ¿ HÞƒ¡àbÄy!žGâ˜$›œ³t £ø3qøQ‹ÎéóZÙhcê`ŠÁ~t}<^#y05Ð{Nu¸ÒÇû·SQÕe ÔÏ£}G€Ý¿X‰V‚7>‚”¨tÒ³¿a›r®úiBú=Ÿ§Â•²ªÏQ3ùùÖqý­ª* ¤×g~¯QÂŽàü@1yÕõ"ä2>k_Ò•¤§®4{_åÓÌä(pŠ.“»ºKª6cåêŒ ¹t«2`Џdáo%[W«ÇØE©U“$¬+zS[¿Yr}‹;NÊNg¦îE\§b¥ÑP¹T“õ²;ñÜkcü´švõÄÁiØ 4¥l? ü)i*DLäŠ#ÙºoP=ÍÛšU׎‹kè* 4ÊñÎPA \t¾´C«Ñù°ZõŠ&%RÖõÜêœ5˪MvÔ× ªÓš #ŒT_ä©3<ÆGë½T®nŠŸ§Ä÷¸1äÚ;È ‡îìûO\Ü/YŒ¹‚+­ú©dèŠ|ná]ñ’%¬¯R7U 0ß­n‘\#yÎÞpzWo§)e¯ËcÎyEšŸCò^³I˽¼9Ts…Õ¬6OæiëÃ̸`Õ½fmw‹äÛþ†`ÆõCìñg¢do[ãJgølù1©Ðž&ÙæŸ,7«µ’ØìÖ+/”pàw”°~Œvw•ºÝ¯Yc“H&ñ½ìÇl o8»“½”€H –$I…1)ÙÅ ü Vgø—Mf€›A‚€–z·S£’c˜3\eÛ|ç̘™¦4P6 ÀB9>X™;†[ºP}=õ _ÝxˆR€‘®Å8”ÂNZ_õ(F·Ï ¥l[L9]Vп‚ªêöE8ßXßkùJÞ5Ùñöz°ëD~fx:<˜ý®ø1ö®r7âB0–’|B½-(ÚT: K•­ÌÀŠ4JıЄƒ†³?Ë!=â5gxô6’²‚;CVå¡£Ñ> AR¢å—~·°ÚZÈTÉx‹Î .Á5”±Ÿ³vflmÛ8â.›tö.–åÁÀ¸·nJÕè,‘r%kt‡|$˜~ÚŠ£·]L³ Ô0ïmdÀC|„-ݲ±V‹ÔãU^h9,ý9¹œíÄZ}ƒ¦hr <çRµED'Iý’H.‘ÉÛT—ntøF•øSÓh6†¡A%7G(Ã’+$‰BÖìÞ‹Ý¢CuåÓ#2à‹$˰°¨»kKÎ$,3²þXàaÛJD|o©À㲟ÿo{ä?ü{Þü÷R|ƒä³Nƒ£O’ ·ÈÍ/™d3!XéÁÇtWݰMè&Ýgý85­ž°F$u0ßýn9ÓþIƒ$„ ­4T¨ ݰÉÕ}Îjâ.ªJ¤‡„ܯ ‹¾4"Vö!k,TJ?2›÷ÀÃÀE¢ßç^ø`[ŸPMìI~ÝÝÀ«ÿS…z§h{³ä. -™Ì÷¿9ÐÏ-ãÙzÃ\ä•ɾúú¦Ðû‹¶VbdÖ16€…² +’ÅIRÖU´S–´H^°Ùcï]¼¨D-©lÆf8ì—Ô£vDmLʺ¤t!ì-ûý@× äã³ã ûm–l¸lûœÚ¹8¸"_(HÖ Y;Ó"‡÷ Ú¨‹Þ,5– y=‘VßtB_‘Æa<ʘ6AWù·Äc6N¶ƒ1){{±j'q²§tˆãû7- ?¥"©:e„{NÏÒ12Í$y‚¤¢ANéã.Á¶cÌ'ûêÕKÜ»Û@žH{ÏpõÉÏì^rÙ ¦0òI/7,gÍW¬˜ŸYv.XrÁî%÷’zá‚Ýû‘s²} ‘®4ü«)Ú‰>°ºbmEô_æy*ÝŸ§*¾^Ý&¯½O™sk¿¼9ïóÙ¯“I­’}¨o)¾bì0e@ôöÉßñ©ü›®œúù"õŸh„9ËÙ $óªš ˆ7¬@KVbrl“ ‘ÈKþš9˜¿ÙÔ9éx}®ïhub‡Ñˆf6ðaœë@ª8”ìôV¤áºau°Dd&Ç~f…å±ý¨¿·"y!6‡Êäg¼ZØÎ*úC ­.þîŒMY|*$«—¬\wêçZuÝ<™ŽèÉS6 ñMÎÓuáR‰RÙ{váLí‚TQÿÂÅ¿²¿ÎV™œ7È%},ܲ܌¶wé‰?!ùSSyø'¼Œ¤‡„\# ¦TeÓ–­² ¿J›åå~öÃ…$ ó¯ã­Þ ý_Ò‰¤{d™©"Zù9«*âh$-ÓvüQ®Å+ÝþÒ1wÍ9åø)Ósí©$Ó9Êf€„ÆøÁ\¬Gøå«Ú‡GO¦Ë=LîÓ%yätôpa> stream xœÕ\ÙrÝ6­šG}Å}$§r9ÄJàq’8S™re±UyqR.íÖD–YÞ¾$¿; `7Àæåµly2åÃ$bé>}z¹þcÓwbÓ‡?éï“—ÿx"Ø\¼>ˆÏ7bóûÁ"ý£O½6_BGeÜÆwÞJ«7‡ç" PÎt½Û Jv^¼Çæ6ß³OO°ùfl:åÃþæ}Óþ¬  ²ðÒõAþãÞþ ‚Ûs®y®Íx­³8a“Xq? "h;ׇc€¦ìŒöÍÓû7(i¼ò*¨ƒî` Faˆb8ÂDîÒ'š›iÚW¬’\¢îaW2ùÀv½Â ÂbdØ·¡p®bqUÞÃCÛ lÛ¼Zå^¥Ršb¢È92A¼ÛÛâ0ɢɬSWVˆ·ù–·Êör¼ì§A4„ÕÖÂþ“Ô©õˆ4¨$ì/4á v==}=u½ h`½K@Pæ¼­ _—‚‘yÓk•d>6Ÿcó ›ïÙ§Yæû¤ÓãÓ»¢¯‚âªæ>Ýbó›·u3Î{„ÍSsÜvì®·9Q£ûð6ëÏ`p&€^ݘ^}È_f¯rgö•œ(JŸú­ÝZ% âñ W»Åæ 6/±yº{;`•4ùÈM^ÙenœÞsõÒw}¹ú§*º :÷>ÉŸ˜Ös­˜kÁôz9kÍ&˜6ô47îfww9u±k¯`¿l^ú³Ý5Ý$;¯fŸö1íìl¶ê7³Qg»–÷+—î F e-ìc«3¢þ†1ßNÆïl2~ˆ'S+"šP:ÒŽD’–Ö¤×Λ„7ñ=¢¯ ÀÏž}QHIMÖŒ[˜Q´#r;p~¿œB×é,½þpçAÕGû’/i”üƒÞn’Æ¡FoG‹Ûg;ŸÏúÑäÌ<žZøìr‡ù)+îLºExf%€HàÜ5R¾VrÅ(­dÔWA.M·*¢×%Ÿ:¦ƒ(UšÓ#ÑË"šÐ³›V¸€®¶yGN+ë«,¨æy+|çÀÛ s1üîdí„NE¶:;Ya3ðéLV3ߎ§a$õ ÷„ŒàÕ,H¨…?×iâã}´çZí^ê1´1yâĺ`>h!+åÉÁY ZÔ´Y6NóŠ;Ç+ög@F%ëúh.¶샟Æ_K7âùëQ¥ •©sÝã᦮vÅš›†X¾^vŸCHÌÄ9µ^Äk#ü…s„k!äñEfé?ÆN@¹îö}rx2Ÿ‘²ë”uͶDÐ~ðô4ÈgççÐ!3t˜ëˆZ¿hçT4)I`ÈRîm°²äì’[>‚4‹–[eELŽ€ás*¾]Ì:Òùa?ó²ãqtļ<ˆñÌz18½`¿l³6 —6™ „kw^L¯Ç÷ùÈ /´z®ñ =D|yË•EÝXŠsžÝºº¦sÒ|Ò$>$B?è[F½ò€Ó„>2yFâ Úš~’Oß_Q³CXm4qBÕzó5 ÈAtx.²¡Ã1{a ´hޱ×}ì €Ú¥sOÙ.8{p‘þó8¶3y«b‘“¸jí‰ö"G ‹±ÎŒò†!µ÷·‡©At¹ë—g¬Â*Œa¼ª³¦®$¦|Ö2,6'l«°/i ¿'dô¬1tî›÷\R’èÊÀrô)äD½üìP<”ÊPÇ{ÔÐüÚ rRgyGü|œyvûvÇ쵸Ÿ5¦ïôÿZ€˜)êEë%²ê¢5&(p\[’e»À¤É³àüƒðÞ¹`”êBÅJ AñZª¬…çu”OÕWbÂ#“ê3x>vâ#k‚§wAýä»daWc|>Ý!C˜ÉÂP÷H×ëìWÅèY^ca¼J—` ë„j€,»ïZ¬´$eÒüÚB»÷]„èp, R akºpïE˃ªº¨ð20M‚\Kn@sb¦Ùâõ bÎÝe³\9·Ñ}XÊgÝÕ¶µvöŠs“ŒUº¥ÒáOw¡ÁÇ. ÿ®Ø“¨pªvH0ê›$9JâR3œÚ+9Ú9!'%MÈÜ€£à‰ÜX¬ò"°\ñÜðYò¨³ä'›§½#Å!Ç+ O}±ßW‚]Cžô«Blæùþ …Šž=cž®±y‡ÍK¶Ãn弿HJ ¦p‡˜Ÿh¦†ãá.•Y’;bŽîŽ]á-·>vª;‰5Ô“xF& ¹øm5Ÿ™ ŠK"h±ç„Å“*´’qÇ,ž¼@°=j¡§VRƒßÃy^E#¦Í¯AHüZ]y)!ÓìEzz–šÑ~ÁU!z..”ª…›½Oø>3Wÿ|¬|‚D¾0Æ-E¨} ]‘X´D{ÿè'¯ãºX:áÔØ|Înè=ûtVÓSo~íöÊšŒÝÌT¯ »\s]snT~ƒÈuØ«AT‚¬»Ê 8Vê S³²¨ŒEà$U7ÀÇÎÙýìfE¨œka+g†z0‘‚¯ðŽàz ¹´â¥ë/Y&¶˜=É©šk xΦSëT•°¤r’P@4A™ä/f)J’}-úYTo2ªJH¤i ~N33Öè‘£lî›â€VB|¢›Íñgõy.k€ÖJ¸ÓJø>ÑÄzÅ^G?MuÊÒœ1QHRü°Îpôvo$}ÍÂçÕ¨"’îÃú rpAKÅrÞpj$$˜AB‚ A¢ $ B&¸«Ø#2äTyí{9O*WIH²®ÀHƒ_ £ñG˜ _´þÛôÃÊ„ªZÐè×ݨå@î*~LT†W¯ÅM¹ª<–lîWÂ:^ŰSWË|Ã$³¤dø¡g?åãÞœk¦ß!îç% %IXî'TÙaó 6aó)‹ßaóŸØfgHŸ.Ív ?rOY\ñ#YáC.ÍîQ»faY¾À‡RË_œ$òyÔ0ˆªš…æSéª[¼V;Z=+ç?á“ü¨"UA=÷0¬÷Céÿ†@Ð]ßSBP€ÍHÝõunŲ“s,ß#I.rKË$`-Œ3Ñð|ÊŠ¨ýð€D4Û ÄÜ^ Ÿ4|yËy;ô¢ù™IÝ鈰¬¸èÇä8œwš í¬B©1Ï&—B!ô£ßé÷RëõßYtv^®¦TQãûÀºÕ𱮩'¯#te½¢ôQ†¦h…£4à„CÃÑÅÿÓÀ¢™ß×Ú.—î&¼g½æY²ÂŽ)©šÿ°]QH`7.k_ŠÖžts©ø-s&l¢Yœ öÏJ&x®âð]-íå#¢{ªB¶ƒY·ñî$î›aø£ÃƒŸáÏ+Bendstream endobj 1441 0 obj 3532 endobj 1497 0 obj <> stream xœÝZYoÇòÈ_±0ò0h'Óww‚<ÈŠ Ð`¬XÚøÅŠÜ%&we.)‹òßSÝÓGõlí¡qÀ•z{ªúê«cæ—Iß±Iïÿâ¿·'|É›\mNÂø„M~>ùå„ÅÿôqÖäëLÊN\ç4×r2[œ°ø€°ªëíÄÞYøáöäÇæY+;Å5sÍu;UµÖ4çArŒ©æM¼o{P(zÚy;eÖZØæ®ra:¡xÃÊSŒJÑYŸƒWEt)ÅYsQtÝx]°kÞLýóªcF6³–Áˆfr”ÀL³äš¼NtÉ”iœ-q¼ïó¢¬p¤¹h;Ï}žò;'ÁŒþV§ñZ§Àhλf¸ÝÙÀÕÜùº²ägNR£¦ºÞ«¢¹ÜV ç¬MµÈpÅ\– ÓÀDÞ‹’‹À|ÒõÁ“xKŠçE\ñ²ˆ¯Šx_Ä»".I Wƒ¨M‰¼Š;F^î/S³NBŒ[å»ZãÐ äi3F\ÃTkâ…bý˜nŸç”â,Keìr×Y%!Ù@ëqÂ÷$im'(~t ·Í+*­‰b&Ã&ø ˜ü¸¾Qô\qYÄËýq’ë!dÅC®SÄ[&áòC£¢öžÇôÿOTLº>OLCO‘èXÇXlÝŽð‡\”e¯KGʪ ™Îõ©=-Çù«Ÿêà¾ãÈ"ìºbt.Dˆu'Žì×/!ð4»Ùwh?6ܪäÉVxÙ ÕI¡’ #I$Bðfˆ(JÌ@¨A‘Î÷ÄäÇ!7ÏiBmâ,„18ÎæTEÓ›D]'8(|ã“É(¤LE ÈK.H.YQ"yÑÌ Ê¦Ìî ¸é˜P(\“nYðY~¿©Ì¼n}]&dgÝ“¤D¤#ÿ@wZ–]UO¥©$×/Iû¤|‘ J¦?Þ 5.¦t‚ib×;Šé‚}mÈ3¸åþÅœŸ4.3†Ž@æ-)ž“ÐÝJyÂè=Ye.I WÇ‚‡»ƒPâá÷Ú$.ÀV«"{¼i)‰;¯Œ”q²]Ñäãñ“¦âÚ¶oH 3#ãÏ©¼Æï«N\GsßÃ^/P‚‚eËßÇ%B~é(!]1Sè~¹Êpý=ìâ~ÞkȦõظÊv–ëOAìHËq쯊œ¡QViE8Ü&2ÛëÏWˆ‡D¥g‡t@ò³–8ÓÞWN|T’‡cwÜj^3™JÙÉaO/s/°tøP[õƒ˜ðO‘Vv=TtP"hÈÇCö;€`@ß(µ®z|Po£6=rhäÐÕØMFùš¬4î†\•Õĺˆ£¼vÔ€1Põ+âºÙ³hY¬oN,H”ÓYĨEº-Œp4€1í¶Jú–ܸ“R Åfæõ¡ÎGÞ”`¨œ”;P—S€Ð_zÎzQs0‹*qU–.ÞMÈ€Zõ¼¤IÉš·8[J¾¼“ã>7P¨& Up>1…Ú±ó"nŠˆ2àËÿ"{ƨ·{¹á*ïåOùt—R1¿s0z§·üRCųúwäèÅø¤ãâ æ*cè⨆¨î!QûB·:ì«ù}|SÄ+’m®U%F]_•ÁÓ"~7®pƒø¼ˆ/‹)•r ²µCìˆ/Ê\ôbᑼD¤¯ÉË›e?”ѧ¡ „tžä³òû?Èó¼*º~jÊ0+âOm‘ÿ\Ärtç:mdªÀC‡Íü=—[^š­ÉÅ÷ä‘/èÒ~ë]Ù(PtIº¢ #Ëû äµçl¿6¢ƒœ,/Ó‰Ön*VwšÊí¨â-‰”‡ 3‚/GuÕQ=jˆy¶Š1»KV?¹;üê÷ /JÑõÿ¼xägÉÏ““Eâ”P|6‹zÑÄuFŽ>«él FĽ÷‚0…=)[xO8¦Ç¾!ÉõEÿö ¸s FÓ©Bè<5­¥Åþ]¹Ì”;䄯|þ½ì4z6I¡Ž6 £§{xdÜ‹ýKdP/÷±¶óU‘gv¥!Ý’÷à’¸· ÞÛ±ñ{CkàôÕÈ&ž‚Adú>á?ù¶è,D£¡ý&Ç£!IîFïMRq°BÝ®Ñ}@z7ªÊÂhjšÂ;?g¶3íR¦M×1«ÑZa0NÌŽ>ápsF1ú5ì Õ™“…ØÎ(V•ãÝ®<Õè{€};¾à"|·uCƒ•þþã KºUÙwü˜`¿»Òì}Ð~é¯Mí,jëúÄãŽÃBøïŸ~ËqxóˆÃ‡!øä:"ð†åžV[O·spOÈ𼃠‰¿ÀÖ—¤±¾HêAm}O5úêÛõþ;_Hy•@}^HDT$ò|vò=üýrêÁ¿endstream endobj 1498 0 obj 2512 endobj 1550 0 obj <> stream xœÕ[[· ò¸¿â èÜ"g:ºŽÔ>%i´p“&Ù¢ÒÀð^½Ø›í]'Þ_Ò¿[êJJÃ9»Nœ^à‡0:‰’Èï#)íëÍ4ŠÍþåÿ_üþiÄæüî ¶oÄæòàõÈÿ3å^›O¡£2nãGo¥Õ›Ã³‘?PÎŒ“ÛÌJŽ~¸>ø~øl«G#­ðÃËíΌιyx%/„^ÕÆûíªiÃév'Fk­rÛíNªyTF¿¡U«ÑÙü}lÝîÔ(½Óv¸£Î“–r¸IsÙÉ '8íN{Óè%•g£‡gu22ÖŽõf+Ìh¥vt‹ÞlÕh¬rxˆÎBºÿŽË z ;i ôÜìLØ0ï6‡'p_„9•˜òœVKo³zaÛOÂVØÑM–îZ>+ïU8 ©åh´®·; úƒ2A¿°YFØá]‹L@º¾­¿_‡Pãìgú=Ùª¬Ììà-㦛+6æ®J¸ Ú¼%¾OC“]þÙÁáïŠÓëÀäç(>Gñ Å ïP¼G1oµS¾ZŸ•,X›¶5[Ï¿B<kr.Q…ñZ¨xŸã oZÖˆA L|Œðûá—åsÊ%RM£‘Á¤ÑZX:Ö ñTî'ÄxDC¶Ò• p™Cé‡3ä¸v @ø‚ªš6ÀÉÎä~DýÅR;½å>ÂF¤òp„B7;“¨á– ½~T£%~Ÿø¯¥J°G"˜&¬(ÑÜ]İ¡QÙŽgCGÎrŸ³¾´SÄz³ƒ0WW·Ž”!¬¶¶<û(:àX€ }a%ªjë]ízöÄz—›ÀùØ#tãv{¸ö Å ïzV%[oª˜TÐn&ëgÝrâvÇ[pg‚}dá…d)Ûj¯û"\á¬Eø²/Šp]„Ó,°»“j¢â÷N÷ õb1u«…p´èS¿º,Âg‹å^/„‹ý:Ù»&€f;É¢é÷#•’N €–_£³?UÌ?­˜&x\¥Bé˜e»$V›)2¡ü³‹˜ZG³gW×è7ÿY3îÙƒXp刌“¢ÄApõ“¯ÓmÝ| âaÿ èd‰áyT7¹G™‹`2IºÉø„‚jæ)‰µUùìuG<«Ú9MK¥Õ%l)¡óT’Ôã² œ6Ë’@ü•é02pûTáa/Fñ-V–N~:»ÒwArQüˆ«”ì£Æ(’aߋˮ<w‘CΛnüä²D‘h€Ó† ÜI'Âî Ô÷¿âF@÷·"ÜâïègäûsüõÞoëH_‡xÚz09s9ˆ…ÅJ¬ˆ#ý¸µ€„Þ5®ófkÌÇ)E2Ø£l5 ÎCƒ–v¡¥„¦I “z©€¿<íO¶ˆxÄö%#\²‰+ɯY1VLR“žƒZ„u°±z¦šø,ã\bB¤ui¹ªE‘æ,4:8ɓ³իeŸRúЖ¡)W9M ]ÉKfÍ;1²XRš¼Â‚eˆq€—Ø•L@Š£•<õÈBÆ/¯óôä²ÓœüµÖ7 EÌǤõJÑò»S‘²FË{1:Ü¢¾¿?Ï´áéüg…»ISO¿RˆäÏžô%ûùÑ4¢ƒˆQ_Ôb3…2ÕI¶¨Z–Vò!VÎÐC¶ªì`ÌQ‹µ Ðɶ àã…ZˆŒ MK½”_QÀZ‡¿ÀÛZ±©" „2Z'ó?ˆ„]qìç !ß ÃÍDÚפ5C¡ )ÒDßVFÆë‹†Ž_qºˆ/Êï)¼bÉö5v\ÔûMçûAgA…œ%¤`PÉW,G´¦;zmL<¨~|B¢‚³º¦eì™Ã‚¤æøgj2ÐÿVŽ35©úâÈ‚ýœx¾›xbLFÔñ ÎëˆMØ[›%ãÁ*%}\É+v¥öúˆ<Æ-å–k)’<°A0Øý•ËÁH3O"Ã×ï>sJµŒDê2¨ ¢YÛ]ÿçLÇb„$2<Ôœ`Qò§à@ó49»SЋÜÓ-,U+©S`Ý«LB¾àÌ·Ä pÖ…%$@ µ'³¢EÇYöeVqØšY)&>­àOaŽL@b”G½}“„O!ï?ý¢<æXf¸ØµNÁ6Ò1(ѸoYª¥qË*)Åáͼ¢u³€0«ž%?k°Xèݳþ{&ÉŒ·Üë±~ŠKBtXŒϧµ¸2|Jõœm”bS½Ãô^AG‹ïœ/¾¨°TécêsÕ•ìeêòi–lÀÓSº‰ë± ÎC 9mJ¬c(Ʀ(ç¬^dÖoëP_ ŸÕ½I¹D:‚à·N—xƒxàëvÄ«n¨cgjüŠ/}`K†5»e¡ŒõüØwyÝ Í’¢‚£´Æ  ‰½^$þrnøÐ)Ü,Lå†wõ«Úw°½òÖçÏÕž¿H{n¿KáŒÓ‚4D]Ýóƒ0Ÿhœ±­|_¶\¹yaÞiæ¿)Øf“™Ÿ‚då«êêbÅÕ êYKµ}â.F¯ïÞ¸4@çˆÄûö^üÜ Š ñG5j´ÕdÚ€¤n;å}¼ohøãi =ÛúAq³§ ˜‹Ñùt›Ô×fMq‚#\5˜’ÎÌÐV¢Îm$õ\.¾ó¶ÀX›YËÇchö•œÿÒ#ËKºPpMd~ÒaIŠÒ&h>Ø\ÜuÔ¯ò9 ,ÖêKÿv‹)¿ý¤]8ÚuµƒþQ!¯Õþ8À1%N>ŽºgÅŽYclm›Ñø!H…÷_4^¶¶pÅv×3½Aïåo Hø¼KŸi1w3$<”´µyjIŸríò–·5d±ÖÛ y¼Y($bÆD#|`}ê-Ìjn_’*Zlë"ÅГ|e¶<Ì&ç^C†i1y¬ôjË”thÍg‘†¯Ö|`©nyo„fÈ?ç#ôLYýÄêrÁ©Å?ëó˜Úñwqü"}èQr‚ ¡ÙSÀ(ÀÊÔ¼‡¹í00H¯0!áõ?ZÌEøî²•wt>Ä=A×Ë•#0õèCÂúøú±^f‡½ýÌÒT±°ûèß3ïc‹w5o‘T{-ßM¬#|¨)0®#/sÉG—ô^«¼`zì@»»4Œøex‹eÌ{rJiå/*o8Ï®ðñsx$QŸH W½WVJ# qWƒÙìr,Bºð¤<À>Gñ9ŠW,^Þ=‚轓ÖßI·%åž |ØÂ$G=§ŽÛ;‰hË_P,k§ñ.9F¬ôf…\›ÚoHÕߥ…º¾T{’Üh™ä,×Ó‘pÓ#Vžßßîa³Rý°Rÿè`ÿ ’‡NeòÆ£Ü%ÄËV=|Z=“Æ#é½éÜ<ûlæQg=享 [ÜK™ #Y!@a.ÏœÖÚL¥ÇüR†-}µ_S8¦>r+áèÿÓÕîænãÝÕ µÅõ‰>;Y\4ÅE`–Kj}&ÞógB«TLŠo IÄ­_»¼ôkùq²ôZmkqd§¬ý k_ÜÕí¡BïØÖãýäØãxòXþÍŸ †;‡`3~!qYº)Á|~xð5üû7í+íRendstream endobj 1551 0 obj 3189 endobj 1595 0 obj <> stream xœåZÉn$7|ÔWÔ1Ó˜¢“;y´{æàÑ€=ÂÌ¡a4´TK‚¤*µ/_2¿;Á%‘$«Jv»:šIÉX^,¬«‰ñÕþò¿÷'_ý 4_]=Äñ_Ýž|<áù?Sžµúæ&JíVžy#ŒZ~8áytšMne¥`>ÜŸ¼ÞŒŠia¸®ÇµfÎ9;œEÊs®‡‡2ø^!™xi-øp¼î/8µÖa½fܪátä0b¸ªgjî7|3®%Þ)3Ü®vRB Û´—™ôp‰ÛÞà¶ÛŹ„TÌj5|W6#¼Î‘×ãÈ53B9*¢ÇQ2m$ïñ„– ÷ãé?£ºÄŠ+&•A ka4Ì\ÁݘåÞ¯N/A_‚e½ ÜÓÞ{8ÒĤ³Žô‚ä=Ì”ÚÀÌ léaÔÀ=Êçç°»v°Éð¿{ÃÓ9”³+7Ñ…s˼ö@~wrúå» WÁ„ž”vHn{d¾–á ã:ÜfÍ-XÊÄÓµN“^”u³ay/ƒå—„3’ѳ¤YÍMÖK°·Kü~‡z äÄ4(c‡>d{1Ô²®QEó¶ÊÏV$½Ì âÜv»X5O%«ˆ{ZòB0;01Ê0 ªýy\OÌN“3œxÜ 2%[]ã2²ë.:ŸSŸ%h_ƒ!* â³á4Ú1°” 8Å@ŸZ’ÓFŸ–Œ©ìº¾KNýEðÉ'Eφ{.V3*¸ R´–]Oþñf26â óJkÛ5hp, äžL1òÜvíúÉ$? ù+’o#©ü!q½GróYá›àöÿv¤5á9CP ‰¼ó‹å‰½õ¼ëï¡|‰gJ ìÛ`!ƃé,’Âmm,àÏ䢖 Ø)^TY,$Äkã™*— hÎÔ$lÔz¢ÞGNÒ›  ¥JH•H2ᢙ+'MçrÓ]–E R ¹ÊÄ÷Æw6‰ÎûTuæ>á$»Š/âXèþmÑýYÑ}]‘”ŠCzµhP„ÄŠã!‡ ˆ¨WH¾Gr‡ä¶;ᢙ üé\BnºËž‘¼©™i‘ü;ŒZnèÆwÝC>õÈ~¨|s†žÿ¼±:ÛFŸ„ ©Îwó‘>t5OÊï9’Dp0Û B †”^$¥9§­‚y*ap›Âƒ›ŽUþ‹º+ÆXü M­ö—e„’@Gæ6ég,îÛÊÜêÕ(£ƒ r#{ Õ‡Þl&kHF¥™D²–ÓâFEÊ Ÿ¤°‹$h(¤%e´ôàÐi½ËCàÀ謴=Àsw‚:kLî|¬i@&¬ðXƒTT4ím ³¸Å{$ïê#ùÔ#i–<outVî˜R˜'€Ó9bL&¶5Ñ—gîöd6ïï©Y»áÙLÜ5Äy3§¬º‰7ÍÁï⬹Óå¡;Y‘ì2ŸôÇêNM&!¦P쯘s)7þÞI&ÐX/ •S ;|Ù‚‰}“ü㦤;üŽÒ½I•Kü?Y{š JSkïÈ›nèc/F´R.ÕÝ­ß±æïXB®’CqGƒ#9+f…Ù 傼Bo2 RXô¥ñ±°}éF*Zf¥ƒ¬+§\OýÖÊ)Æ®glWÏÑ]¨ݵØSw4Ñ=’çb0†æ6 Ëܦ˜j{©Â롚4²"ê&±š„×¹€W¾ÕbXN²–$)HX¹Èíp¢—¦Hm°*¹ƒô{-j½l©‘æ@9±iã}d–ŒÕ«˜}‹€~nOßšìõ¹ÛÒ}³;ÖsÀžEßñÉh“.ý–0Ýõœ‘\Šø)p—}áÜ ÿऴ¹ì„ÆÞDì1õŸE Ü‘‚Øó²÷[c,!Ï»s›fX$ßtQú¾Kfò/ø“¡mRÒ‡®3i’Qâ¢tÑ%¶Ì£c¼Ëè4¾Rì{}"û’Hñç6è7üwHŽ/llüóð 9çÉ‹†kr;ë¨ß¢[¶Ìî¼ûô”Ø*ái«ðºAŽ óh‰}–:~ SÇ›õªf:l.Qí:wÀÉè]w³6—$y/1¹±Gƒbçͬ{/ò…q•C—g¢4ÿˆˆìЋ噲éíKˆgÞuq´IP¢/ø“ ü‘·“¹"ï6.÷¼$9-ãê_ö™ ‹ŒUD{%0Ö!—Œf`„TTNû,¸mãxÕNé’üq)gß>?9SÞÔþÛ>A­gé¯KÅõªÇP’‘ÇÐC‰+}8­Ò¸ÛŒ(· W\†¬-ª6?O˜;òŸŒª}­|ú ÑIˆŠ´ãˆ©/K0ºÐ£?–fÝI­éaÊos™šÅÒl’šEØå_ „Ù^B3ãÜ€œ¥_W’§Ý¾¸æ.ý"ÅÖdfy„èà:O€5øor™9©nʳ¿æNÅéB‘ååóPá4Ë6"|i4ƒ'•ÑC¥Â:)jQ¤ªœÈÜöJ§—¾üŽƒ©ýxöŒ¼ˆ¡ÏéÈš2Û_äH¬çvi^!u_ùÝf‹~Ûý®qÑrƒT‡uŸ:ˬžø ÑȲAίB¿¸sÒ̯öF€tU¾£ä”p3ûäï‚¥~³T25aWá3…‡±SÑéÉÍx°D‚K»å/*Wî PVý„{ýÜ=ÌMï\ÝÃ_bsiîùžÞ éþ VD=„g+^ƒFy³Tk)Q¨Jû}Ý5Ò=l÷v4fχ·‹Zªÿ ŒEÂÕËŽH V¿sW?ŽU“‹Í#\J )P"z™ÿ8=ùþþp¬8ëendstream endobj 1596 0 obj 2466 endobj 1639 0 obj <> stream xœÍZKs·®Jnü{œMi‘Á8ÚŽN©T±ÄøB«TÔîjÉŸKR2Iþn<3=KÒ‘])ÔÂâÝÝ_ݘÛEÏø¢éßõåÑßß Í»»£Ø¾à‹ÏG·G<ý§O½ßCG©ÝÂ3o„Q‹ãOG< N³Þ-¬ÌÁ—G'ÝKÅ´0ÜwgË•fÎ9ÛFÉs®»›Òx¿ìaBÙ[Þm—+ÎŒ1ÒuûåJHˤ¯£´*ÉœIãc㮊Ã\Z Þ­ë\a.صèVa¼fܪîxÉ¡Åp5î©y8_÷ýr%™ðN™î<Ìj{%Dw5¬ezÝmê²çuÙ«f_B*fµê^—ÅÐ\ë\û%×Ìåðí—’i#¹èã-îýñ?£ºÄ‚+&•A +a4ô\ÀÙ˜åÞ/Ž7 €ï–‚e½ ³ ¦½÷°¥žIg9l顊—ÐSj=·°¤‡Vç(?߇յƒEº»ø»7|؇rváàäpuaÂ2¯=ˆ¯ŽÿvîU0¡{%»ë*^Qb:–áqN³â,¥çñ޽(ë²ay/ƒå‡„=¢ÖÓA³š›¤—`o›úûEÕ[˜@öL÷…}kÇœ°Ý×%çLJ«ó¬&@¶»®­ga3†Y¸ðOË•bp.ï í Ú¶d͘ëª÷ºUdLÛÚuM®ÞìÍ%„`65ö¬¹‹Ö›$Ž^¨þüŽyåzI*~UTkùbÈN«xAŠɾà Ê÷¶û\[ ë’OIËÛüËûiÐe/ƒV#Œ€Voª5íËïÛjwõ·côEƒQm¯¸ÍLz½4Œ˜îKýi}SÔŠ`ôæäà/Úa[9Ã]£ß(?cŒ—a}/‡°ˆ\ q¬hkZu_}a0ƒß8‡ ðÄ#*ùî·rSÇç~˜ /ÑÇ!&}]®zfûÞ™Ñmä ®x+õ / F$”eÆA4Œ¶ò?ºk/06¡w%&Í*·¡ð\¹Üfá\÷ äåÖu 0C‡!@mk+š,a(w.Ùl+¥˜nãm E5À ¨‚BQ´.¥‰†!œb=Í_–ÚÀ™ŒÃKî'Äiç›áÃôÖsÒ­;‰Þ<ħ7ÁŒ…茉¾1èê±è¤– X)ž4nC¼[¸qÓ‹á°7á~T!cW¤q&é"Òq[Å«ÔUª›ñveYZÑ0¸.Ç$w –ÇÒJª¥ì´"áÌÃ^ßŜŌÙ@‰öÒ«$á–T8ôp›7 ª:íªø¡ŠwUÜVñªŠ›*Þ¢“~8ødؾŠE$•ns‚Ò“cþ'  Ú¹)4'¿Gp@øD´‚fÂÎÒïdpF ÷X!ä[ãá´•„ô˜y·¾7û9 ¨í5Ç'@ؼ¿UÁØ|^G!ä:«£ÐH!÷a.ˆÝ¾ð¶´Â  iÏûÄ${!Ôáy¢uÚ÷o`_³‹b1.©9ömsr´í j[4ÊJàú\,VCÏ»à Ü(cÀø2P"&E¸Î@1Jk!õpS½KM€Õó1χC´nIÕ®ŠªxWÅí.9Þmm} ‡í«Þ¥m5ÙŒØÜÀN{ã­Ž ‡+J]-AEN‡4 §YØOZ.çûL;?&¼4í:)§&÷¬™šì÷Ëü^Î'?}ÌÂE¶Y¸;´MU(ÌûåÊ@°0Æ&U´'EÔ᱊¿а÷‡/Á¨†÷9H¸ÎÂU ËÈ›¦½.ç•Y&Ødá]îç/¹ŒÚºIØy¹¶§ºÝ=Ko²¤¹fµ vX(T°£$kÿ 8ZE†u‘CS±.’à ¢uç…¡]×ß+‘ÇÍzûÿ€.‡D ¸=ræ!{öJå¼#ðÈ|QâDdz»TìR Õø– Ùïà¼ûWP ä½šf #*³Ãµ "Ú½+3ýŒ‚ûë°äs$Cs} LB—i¹–Ö,Ò÷\„A©>$µÆ4á|zÙÚàêÌÈÉiM¦MÙ‹q˜q\„ôé ¬¢C}Æ·š,Àb€–šP5ØÕœõªšæMµÿ]?Tq[ÅßÈÖõMFIЬ¼Ø«!5Ô:vnÂá·‡¶BQp _\e]K#H½¨ RøÜ”Ž }¡k(áZѲ¼TØU¸þ‡²¾¦ìU äŠì›w㺿%¹îÃÈ3b×\\Ðû;=WõŒCD1®…¼àm©¾ÓÕJ²æ±_JP$üµõç–2ïY¥!¥¢a0xŽ*—ãûA÷·àÎõf¦¨49`ž!žP—:}h¤Q±8Bù&™Fy<Á.ïç‡4 ¡ÚמÌ<аiBæ­‹!Ó¾ ¬@B’ÍZÇMX•‚ɳ ïóõO]F8%üà­áiFÒU,‡§¢“¶³‰‡¾93£7€\—§3öýÁj=2䱯ÊyµD¤åå3íäqŸyR!ôΖ ÒAàÊÖ«î;oóù­Â@Ǻ!Îu Ãgánp[ }²Û>…{È—'O3ÎâŸÀœ’yTîÐ-ÅÌÍ53Ó£ûnk|ñ™ a„ åÈŠDqÐä€ñ.cèŒ/jáJQàj|%;X}RmÂáøE4´ÒN“qJZ<,óŹػ­ì#‘_VpB&\)ääóË“[:)£VEº!·Yá 5NƒWÛ•ôXN™÷ȈêþZ(p‹™‹7ÁmþÂÇ:m°iôÔ: ùTClïmx(>H’f2`žVô"#nÍv* NHó8ïy ñæ¼ Ó••ç­47‘'À³AŒ—¢6%lÎ=ÉæFæƒos5ÊÑ›š‡Ä"nÉB%zbI[TÜæÀì\T¤ö{k§nЬtvÑBz"Et_ аiyTLD£@>Dt4NŠÏÐxqVkðÏÀ–Ò¡ºúmmD©yÕà}¥"AWÜ1e5FZ´E:1›$÷cV>2¢jÐC—ÚšõV9['8î è:2‚YHtêê^LœŒð»ˆŽ>Щö‰VðZÙzÌoŸÆ¤m̈/ÖÞ Ÿº’g¨=ƒÆ,ß Üwr{QDVÎİ–üù§’b@S‡p$Zƒ~áº) {ü€{MÂO:B3a粉öEb5è¥e(ˆaª÷(ñúòêN0ßqd¿"!éM)ŠØ?ãÏ4&Ÿ‘5½h¶ëç³d"’¾Aîüï¶– W¨06¢)þ£CpKŠÂ»_»êuuh^ ѧG§É¥%“¦-ˆÅIG*%ÏLÛG^M²ì÷šXvE¶¾Ä»Öä0t‹Of.åš ®7<1ù\¼¸6ˆÖ`÷}Ððd²ŒEÆûÆGÚÔ)+aGxW¤³øP©/-ˆ»•®Úxšoê×e—AV‰îÇêTôxþVÏ*Ú©h2òœèy_Sü 4›ZÃéšÜiËï"Ÿ*¥€e³s ¶~Q’sYŸÒ&kÍg×O±ñ'¿¤j"†1‰Þ9Bmh÷¶©Ž]…& ÞݵïþR>´¥‰ï&Ý‘jHÇa &ÔLþêkõ«©Íˆø¦›oE,”NR—3<”s¹Âƒ_VÐ%{gGNøad‰¾—ÓȈ¸v.²§ï+f¿p_B44™nj3S"ço«“ÏÒUï˜P‹• ¢ñ¾EÕši0õÇ㣟áï¿bùhendstream endobj 1640 0 obj 2813 endobj 1684 0 obj <> stream xœÅ[Ûn$·’7}Å àž`§Ó¼6é7;p€ ÇöÊ~1Œõ¬%kÖŽ´Z)±ä;ò»)^«È®IvÁ>˜æl².§ª©w›i›)üËÿýáíÉ¿’Fl.ÞŸÄþØütòîDäÿ™ò¨Í§§0P·ñ£·ÒêÍé'"OPÎŒ“ÛÌJŽ~x{òí𧭴¯·;3:çæa[^3\×ÎÛí ªiÃùv'Fk­rÃÍv'Õ<*#³FèÕjt6ÏØLk#Åð®uÖ‚]Ëaæ›QÌz8Ý è±B÷#ç>ÝîÔ(½ÓvxV'-åpHß²“Îð³oð³‡f_Réq6zx^?FÖz…kÝl…­ÔŽŠèf«Fc•Ã}Üá,¤ûîô¯A]VP-ì¤50rgõìçÍé(à/Û¥Ôðc>µQT@Y-Þ« wi4lÀßÖY»ÚúûV¸QNsT`•6((ÿLNO~…Ë_â€sð>o²óð|^Š1XÀoƒ ”˜4]*RÛqö"+ËûÐëG5[bLyWá¨W[; Ÿ…ý—ŸÉô³ÚI¬;ŸÁêƒò}ÝORp¼CÖ³´÷m؉— À¢è S2¿u¶ö»”r´Î€­F[Tưƪ‹†@{\€È‚œ{¿ 6|K;ðÝh*¯êV.ÎV ¢–f ¦È¯ HËÑhOt±Ç­¢®cË80ÿVìQÁ ÊfRR°ÓÔÛ÷ FÀŒŸí%‚?¯~“”˜üŽôæ´  £Ä8;?|³Ó<Îxîî³KÓˆ¾—¦_NÀMÏTŸd„™ ¬]ÖÖNHXl’ÒŠÿñÏjÕÊЋfµµ §†lwÓh=Aƒk-p„Án²ÃG>Æß?Êpc=ÝÃ?\¿&V̉4É€ûìgjîL¯ ø‘íåǪ™ ,M^:ºîgy3Z“¥ŽYa^µøÁÒ¢Ãïë{‰±Ð>ì~ø…»äèàA¶ø9ú&ùüUžÑ°—A!«Fâ€>)Ò+ˆ©Wø;9ÿõŠ;ˆiT€™?µúcÂÏþãnRM£Þ‹à ¯³±JOŽz… Ùôm/ÁìMÉ+!_ÖÅ-¾’Òâ”´ª¹]4Å|p¶3n§8ŸØÓ6+Þ³Áq=•# ðób>q&îÈèÈÅ=ì07îXr`Þ ¶¬ï€ÆÎÍ€ºlöá¨èÄÆ»…Rö wj}¬T%ê©9wÆìEöö«òë„z’l•À2UÜÐb€2CµXþ™Ë¤1ä;Vdâ•?ÇôÞŸúš´Ÿcü<ŒÖPÂù•b€FÀzÄFŒx´»£Â "N<…Z«¸0 »d^Ÿá®—æNþºä½šßõrh@ÞÇ„³hRÓ^².zUÁo©êèw}ñ®ql©Ô(D¥NÛ—ŠÒQëä?A±PI? Ïž=7i¡¿4…m=îHî4Gï;ê’—½iôqù {oJ<ü¦fäçìRg½ff’ñSf¦¦AÄs×Á©tKªJ" AÎëÞ+‰V’´Œ½v®7ÄúáE¬ŒçQíð;.Jø™—ŒµðÕ9j0W9ž¦úMþšØ&-¢¿GÏ…ÃÔŒ˜à%ÁÔû ¨!Ó1Fn„†rÎÊDÇÄ/ìÀ6-H*}è“-äX`ªØÁX´»ØFX&d‡µùF(ÃÈs‘‡Þ`õçÛ œMnì•·‚e…@NN…höüäôß²ÄÎ5Ú+yH'q(;é>ß§N*›ZøC·b:ßUEa@eâ…¸£ùœÞÐh[­ çη îf??Vd|Ö†ò•UT%?xü"cѤ ‡Å²e¿G—x×¥ ‹ ‚sg •ßgÞϘ%ôZ ‹±ŽE.‰ ÈòŠ:rÂcÙæ#‰ ƒDÅQHÈG}*;‘cù]«¬hSÄð­/*Eü%I|RêåáS?G:³cÉI…ù*KÑØñ CV™=ª7œ•Ù§(ž6=F‡ú’DÛ 8]~Ç” tZM‘ßW‰¦cúU¦“÷¿–ÜCìÞU €ê&ŸìÿÄ€C/ŒµDRdydøj qVëžÑæ(õž«u¥|å—qÍuÀ(f6æÞQ¨¢$\(K§¹‹ÞÒ¸BäjéQüEkÅXm€Õ€¾¶YvõæGöXmp}RfE¿`·ÕcA¸Ú(ÅHpý`KPpk¼ýš·ð  Ú5¨bBþ¾ŒN#AŠçnQ”Žãf÷DŒ+ Ü'nÚÍò ù-!Ø”—“ªâ”°þ¤£9–æk²yz3$dõvޏC ئpY²èõÒh­þŸ Ídjð[rEðÅ#øºâÀyñÞ&E¯~²ZÂE§í²ÌP]–x7S>ôÛ&©I~äâ=†cÛÑMÛü,þA áÅFŒp™?·· µÎ['U™ç[¶¹gí÷,6µ}½·Ø¼Áæv…‹Çz€{¤ñ¿`³‹ŠË–†&bçYÈZ3ânÓÅ9ÄüÁL§ }tµ†FÑž? :‚ôcQ§V¡Ž:ËSwÈÏlrqÑLÏiImÖ¸;I#T˜0+Èe¥‹:OizþÎ'šúG'P…M+—þ­çì™{bÀ,tí|v\ÿbž@%vïÑo°yÍ÷µÉýºËVœMGØt§p«^óõÔ?ñK|¿BYµdMuKR²Uò^’ ÖxCzïq™é¤IòW ¯OSH©ÉGÖÆäò…Ž^¿YLèc™#0 ,:˜K[Œ-ÊÎqy[ú@{ÃQ(|miÕ@>°(ÿ½o”‡êÿðü¼‚%ßxdþ09=q÷$"©W/êÿÇåü¿¯“v ’Ma1|Éä*-”è ¾|êóÁˆ$Ìc2Yìš{²ý]ïrôJšOà€¿ã½^CôÛR»Æ{Êî™R~ÐG´^–Cé«àÁ`RRW`ÉÊ @Ð|‰Í÷Ø<Çæ›gØL&£!ÔT,j§Ý`óžýÚu?ÖH„»YX:`Ï®{ÎíŒ'ò¤#OEÿÐ.¼Ö¥™[?&—÷<Âõ…üò© –¡9žpƽ¾ [ùó²*ÿ–ž[ž;{ɧ?r„Çx€xÏUEäûÔ!¿;~cš´‹wƒ£ ²'#Ú-¤×Mà`¶}–X«+7ý;WžIï/|èÝ|JfãÞºµÊUi÷¸?3a8¥æþºjlŲà2úK)Žˆ9ò´,°•Ô,m¶¯ý‹J=¹QÈÍnV£Ö%bJ\in"îg§'_¿ÿ Õ53endstream endobj 1685 0 obj 3248 endobj 1732 0 obj <> stream xœåZKs·¾óWì!‡Ù”¼£ä”J‰%V.*—jERK–È%EríÈ$7 €î™éáR,Ùjaðîþ¾~`?¯z!W}ú+ÿžÝœüå²rµ{8Éí+¹útòùD–ÿô¥×ê‡Sè¨mXErfuúñD–:Xч•×Jøpsò®ûëÚ«œŒÝåzcEÁwÛ,E)mw××=L¨{/»‹õF çœÝýz£´ÚªNâ(­F‹àÊøÜ¸Cq˜ËZ%»3œë:Í»VÝ&·BzÓ®%´8i¦=­Lçë~Xo´P1×]¥Y}o”êöÃZ®·Ý9.{…ËîGûRÚoM÷ª-Fæú€sݯ¥N™@¯è~­…uZªîKÞ¡—*ütúϬ.µ’FhãTÒÂF9 =W°wÑûèW§ç €·°¼Î8㵈:º´½^èà%ìé6‹pñ.³µ>´®WiÏ.†Ò¼×Ѭ|ûJ‹+ØÙêôÕÉéŸß%¥(¡lot>|ߣø€âŠ{ϳhbï»ÏØz`‡Ý£ø…]íŽí{KÜ¡¸EñEÒw6\ƒ ®¡wÑÛŒ„1†|÷gk0²`-\rö(lœ ·QÚ«°µ\TáfÖ²Ÿu~=›g6ŠÕaÔuãïž>¥íˆm‰û*ìªððÔZ2 Uçøi²ÚÌ®µ½YmLZõzô·µÎøèàLÅ0‰Õž5 Ôh„Ô&¸˜21ôÇ„):åsˆ¶`"G¤°ÇHL—¡ödz|౑êBËȤÕ;Ÿ¶^™ìC#û›¤”¨€Ö ifÞ'´î)©(>mÌ(aM¬­£µiÉdDÜbß}[7A)áåÈßÜ&º,*G[Ñ_]”„Ðý;Ùˆ–½¡ÀÃ’á»6<[ ²±Ô³½m3ý¸ÞôÂ÷}k}•–{õ‘Ì:ö‡u®Ÿ×ìÚ©‰¿´6ÝaÌ>RKác×|Ø%ë­ÐË~Ĉæˆ;#n’è‹Lv;–]Ÿ3Ý/k)…Ö.i.Ù‚}ö½¬öBÎõ‰^ì°/ãÁ%sk}Jwà{Kï€ÅéFû>™çF*hìÕ°êQ¸°ý—m={°ùPø] ZtR¨Ì¬Ó¬ÉJbÔõb­tõ0Évï°Ãc2^˜0Ò‹¿Äï[œà±„:ÚŒñUÂS¢–dD]dÙfŽ ç–FX5–4ç¤Õt<Âa„ܵZXÁ7?Ë%ÄÈZ50ã|ÓÏ-»­¼>™!j+<Í ß†•2"ÒtÍ'µU.ônŒÙ¢t˜ê2ÅŠ™ô½M '‘žqÀrnNu†¼%ÛBÔÔºÅË:Ã%8RÒ8o1n:éF05#1ß|"I~­\ÒžE 1ÿb<}ÕÂdÐ-Šq%bP_Ö¢m{ðUç}'_¸Ôø@×®wå,ÙÆw Dð Q‘ëÈú@§ºšþ”Hßû’ç8z¹ûªøHAF GÄ[Š]¥µÔ˜§…0J´SÙq¸Ož÷©–؆3ÐÅt«LÐ< é¾'.¶ž’?rr¬;vá/Õ—ÉEÊPl¡OEñ1î#()E"Ÿ ÉlYL€WÉ[«…›ÍÐLo™NêúŸIt™ÆJžHM€$E-¥¢‰ fý¾hfØÀF·lvƒ"ŸC€,cC˜ :Ì?J¹| 4Tú~=ŒÒp½¥¾ác£Ì§½â¢ßÇe÷£QµëeŒïåø9ÁeìÑ*{ÿBHíòg\â°Iâ“ZC…¤`€AÇì:a9m\²Ë—)ãï.‘B k–›fHp{Y(Ii3ÄG·l+‰ñoØÔyÏ{ÍÎ;›á[#`Ï" \¤1Ë…gÚúhP²*ïüˆÏܲAé[œ€ƒäa9 ¶ni!µæzÞ™ÏâÑÁp§gÌo޲WŒ‘¦Q-M¬ Zç·=jó šL»TwŸ¸â<ºÕqæ]¦(RÉùŽDlš”Hîü02o´æð¢ñ3x(RZmfN,z?9zÒ0%0¥¦h8lØØýŠŠá+1-6Xˆi‰9Þ.àh0E¾óQèÕÈ\çö@Ìíz($®úy-ƒP}¯Çß™ý©(rBé#– Ò/Ä©ÕkIŠ€•^¼áãàc0û%™Ö´ÿÝ „Å¢Ög|ƒ9Ppq* ›!ž(-æî_ÈK^˜z¿mOF†LAÛ’O;5/n±ÆÎÇÄ3Ÿ1IïˆiܹGÏNŸT¹«ú×ÝŸZãÀÒ<²äõ˜Z‹O:RcFòãñCZ/ÂÚ‘àƒÇlïqo˜w o“ ½¼\è’³#z0ƒÿ¬ìu*©nÛÇu{¹ ÇéÁÈøÊ¤*ñEMàZAÛ4Ô ÛžN=µ,uÌj/¥ £”=˜RU]„Û¥í×TlfEò§Fš¯«<£Ì8&¶€{w&PWÂPÞQ»e còRœj²AÏZZGs=ákRdã³”I¨2/! Xh4Vñ_£e 'L‹0^¬oTï…#úá²E d(Ÿ¦¿úcÈbä;ÙãÑ_,‚Äh¸+)Õ‘¬’1é?Ât“z)a÷R3 Ý?ÚWòjÀ'Éœwõš¦î.?¯ùãyÆ9±Fˆ<Žå¡k‚_sä|7»,MxÈÎ T¢}.`Æñüó5܈nÅzòŒºCñ=ÛJRÈGù'×(^s3°$ïÜ`e›ü“'^ßÖô xƦýt9ô+^m*I*[žIºؤNh:˜oS¬bÚ‚ÇgÂËßXÀšBï–àÍÒÿV©R´^Ë{Ïz«üíZÀÛ˜Á'ÎñsI‰ˆ¼PŽ QªJBNé"0W-n䃙^”dé}¾Y\nL4£U…n-¸Û´U™žˆcUˆNÁÕö= Óê>Ùè&Èè"™/­‚£JwŸƒ·¶××-xÛ¶àmZKmµÒ¤VZÚk,ÖV΀üp‡â{¶õÅGïg`þÆN5ÎpªqÆhVŸ¾œ·¨ô‰(àÐ!ð5 d‚G–ÒÆ”I GŠ"d¦i%dJìsåóë¥ZÔW±TéZ´;þ ¤2TÙ²}û‰’Â)Ãò?=ùþþ!/Ëéendstream endobj 1733 0 obj 2464 endobj 1781 0 obj <> stream xœíZÉn7½ÏWô±;ð0Ü—cœäÀg‹É–'ÖI¢/Éï¦Èf³Š=Ôæøàƒ ƒJÝ\е¼zÅÖUÇ™èxüÉ¿OÎß¾•Ftg7‹ô¼ݧÅÕBä?xÕ½^Á@e|X°Òênõa!òå ã¾sJ2/ÎïúïÍŒ´"ô‡¥aÞ{×')aúËòðvà° âNô`ÖZåûëa)•cÊÈ^à,OµbÞæùéáŠãZÆHÑŸàZÛ¸h-ûeœo˜pº_ žX¡ç#ˆçë_KÅdðÚö›¸ªãZÊ~7îe¹éOqÛ n»«ô’J3gtÿ¦lFÖZãZ׃0ÌJí©‰®ÅŒUBöwIC'¤ÿcõsr—ì„fJ[½°”ÖÀÈtgÜ×­NÁ¿ÁöLXm-ÌW,¨`£zœ)ïèt‘D0¼c–§7eè&êlƒÏ¼³ãæ*èÎðWÜ\‚fÝêÍbõÍ»èɤáZ¥Ãgñ¨ùô=Š·(^'Qîè€÷(n[+Œ:jï@Gnƒ3QGC–KÕd™“BÀ&ÈÂn.´í<­³Ô)Éո܃dV»`Aål)bÆ“"ÁÙ4J§ˆÊ¶%–¿N6|™_û`²“Ò{t]Ó1õ’ï¿2W@ÔSİ€‚ tEÊ=#ì!¨ ˆ$9?ȸÉà E‹˜Ü–9’ùåÖQH‰§0J!gá8ëC†šcÜv7Xp•O¹3®ê PÄ÷˜¦çÑ­AB¦R±ZkÒ›@F<‚€1TT¥=Î!f9µòÜf‰Ëß•¡Í€€ÎÙò—èÞ3P¼™û?‰;OQ¼BqßœF‚鮈O xüãAJ¦•Sý_Ñ;6W ©%襑ÒöÎ%âíQø}ÁÖ1–žžÖå‡ n‰ª/çÝ2æ]Ô7i»‹†vž†3)Ѩ< ÿ–œÙ®¯ È–Šc5ò#tHËKjÄ„!Ån›áÐÝTZ§Y2žÎ ™¡§Àf$¶+v¦¡yAkUÜÕîÄj«¦14§,ƒÂš¦ÊófÀ[Üf[@V|bÒµ™dd~<€âÌð 2–ŠªàûvÁã‚iÿä4"IðOóéÉÃù 9+…«m:rž}9º#¸99G2ø3E²Ô°˜ŸóO%’ F>ISTV¡:…W#\ñYñ4¡lHX2=Ý7Kîp—#\ZHöͰlێеÛy&‹Æ-vYRR&~M—-‡`ZœTÕé0Æ´ô(ö»ÈJ‰/+&¤¦¡LRÀ$´Ó²™Ä…•ýbÐÄ$·¥œ<ž¿¤Ê¥мοî€u#¸+aKÎ Ù¶>éÖC‚Jë¦wó_ü_UàX]yÌâ'ÃÂY n›“ E™Úmk…&š,dº‡Lp|…+Ï./ÓCÂÇꜞÄCÔOŽÆ×ˆ3BÔNÊ¥U›0šHÆ3áý®°ph¦ d¤Ç²ç=Šç0R[ñuÒ^X<í*°¸±È œ ¾@q×›® ‹À5.3ùûÅ”— #yzŒÎ›—Ãô¾]‰› Ä¥"WÝîa½¸ÁAâPÞ>«O$ßêµFŒm“ùÇé´ÅÚù¾ž-p;ì´h[•ÄÙçÞrKŽýaº¹Ù]Ë‚õü‡JÇna€t^Pß"ˆ¹ ŒEA«!AÑ+Üý ×HxSî!në2žïgˆ}ë&f¾>ˆ'ÔÎi˜T@©­ì½l½qkââúÐÌk¨E`Äd·fž ‘ÜΫt«²”^3.tÿû`,ËðÔøoK;O¦Ë» š`0ëæ›TŒäèçq¦&ìc'€1´E¤.ì^ßCêÆBq …\x&9¯šá e$E$Ö³]éÅ`|ÿjº ÓõK´æ ƒ„ûÿ ¦!‰ü?+ð’ ‚IÐJ wõ•@¶¬½—ýdÌ@ùpà‘6 æ’4]ÈÝ\t”1´ÿÞ4²ß>ÔͯIÛõ‡pàz…tí >’Ç]uL¦!¼"PsOÔÙUô#¦Éì–Ù¸‰3¥‚ ï ¶ëæÛÁý!pO¹?3åf¤>ÀXjh1_7é×A*Nü+‚Ïëž‘-úÿYÈ—¼…›µÁ`Ü—ø¥~i_Z௸vLLGÑŽ¹x„øeJÕ¥Is™Mœ¤£t*åmÜš/‚×¾åé:²5#”­ “”¦ïïŠØîÆ'M"›Õø¥PéãB¥ç½wé­c(Ñf؃f¸úš¥ãwÙ3PÜ xƒâÅýÁ¯Bùae»ØZ&É·ˆ#~À™¼',™„ËS>0Í»¿ïÁšñúb¸.D›¶}}f» šÎ¸,Ó¥ð}7Mµn*2ànF¨f߆ëýs¿ ÏþBE¿B*bD‰ž Åüqµø~þ/p|endstream endobj 1782 0 obj 1858 endobj 1824 0 obj <> stream xœíYÉnG ½ÏWô±;HWj_Žq’K`ˆ3ÈÅ0$KŠF3¶$ú’ünÈêZØ=%ÉK#€áƒéžZÉ÷YôûŽ3Ñqü“þ>¹^}÷JÑß®â÷NtW«÷+‘þÁÓ¨îÅ*ã»À‚•Vwë·+‘&(o÷S’yøázõºÿaÐÌH+B1Œ†yï]­ „éß•w‡w¢?FÁ¬µÊ÷7Ã(•cÊÈ^ÔY ¾jżMóãÇójNk#ER×ÚâZpjÙ8ß0át¿|±B/G÷ë_ £b2xmûK\Õq-e¿›ö²Üô§uÛ˺ínv.©4sF÷/Ëfd­M]ëf†Y©=uÑÍ ˜±JÈþ!žÐ é߬Žá’ÐLi+1 £´FvpvÆ]pÝúðã ™Õ.Xp«bAygûÛh‹îÉxZ3¡t¼(Þ=xð.g0AÀÑïpoãa‹ô³¦ß×ßwŜΦ‚î< wâÙž‹nýrµþæ5†M2i¸VÑ=É<ªæe5o«¹©æ}4uàŽx(fò§½’‚m„͸ Aeà)0É€«:·ïÊ‚×ì=ÂÅ3/}ô¬±Ü: â3„›dƸ‘ˆò·8Ë1áÅ~eIž¥C‚H¢N^õ¤öj°fn½ài‚ Öôx˜@lá™ä<ú5m¯¸“Ú2çÅœÄù$»ò‘a[ýCö¬C1î  tÊŸÃÈÓÜ[z2–\û"M Ïß`[?¦l pùè|6 ã¦7#Ì„€Ÿ$œ›êÔ?fÁnÈÒ]J¸ ;gƒ@øÓÿÕÌ—·%Éݵ>>ÇUéDÌ|Z3=óU#íÞ²¦Ä§ì¯:ä÷ÁX”F þÊ)r[™>-ï‚hRn‘÷^ÅjHÇS&‘ßW¦$¥ãYÈSþIé¥dÓ¸Y •xZ \™G“`d’E϶‡ÄÝMS>27%ÿ´Üd€ÖoSQüW©E¾žÏ}d™h™Eô1W£j)JÓ¹šò9bïj t^Í£æ×³jÞUó¦9à¶š¤ÊÚ¶VhË:xTþ9Á€^3q'Ùø$×)ÀºMsY”ëWµ‚F(ÃÝÎú¹$=3€l&p?CIS r¼¥¿×-Ð'£ ð°A‚:aÊàè‰JéÏ`¿9m³ŸCLxá3¦fEÒ“¸jeˆ¸:&AÝ¢¸z•n´ÀÆR EèÁf cÑ:ŠwR(±A™3¸Eoz¯‰©d‘ ŸZPŠH'cm']Ö¡»:ô¼˜Må×Và_¢ü¿å?.Ê¿,ÈJÁ…>¤’a+¤Ù3Eã;ð¼šGÕÜTs[Í}5Oªy5™^…ôº‰_w­-Ú´$´úµnê}ÅÅòÑZŸå1d !uû¥r—¾à¨¶Zž5ëŸCR¥Z}ªõBûèù‘þe ÄvzÎYí²²Ö‚Û†Â*XMG´‡€²–{r&kÙÁ&PäªÍ²šÜÉRŸ ¬Oö6’Ù®Ë>–»ªË{ã7„¹°ÚZHÞ¹´"¯£©©ÎR´ÿP[¥;q›éÝ”C —øàvi,l›¬ÌcÈ~WÍ.Å®µ}Ôqœ‰<ÖÓ›²t" ‚Xï³±[íûéIªÒ2¯9y±)‘ûëƒ O³qöÔ†(Ùy7Ë `w! CUúD=ýÿv¢þSh,%Ë;ÞjRÍÞ¹Óþ¶,5_…_îáÛe–®J„÷±c$ùûx;êûIõãSªúÑÉ+A1+‚aÖøy·-ê»òøâMH9͘XÔ¤¥MöŸ7îò´Y}{PC´OË´@¶¸¨u|­þɾ ÏU06VÓŠcm;UÓ¥%ì ¦%xi_—¼L•÷xóZ´(Hï€TxºT³ro–ûõ|ÓöZO d’ë”{¬èX60=WíÒ˜£6”æá—é^Æh}í^~í^~í^ÖîåòO–ê¢ËoXU·á³û§õêWøó¼nN}endstream endobj 1825 0 obj 1723 endobj 1870 0 obj <> stream xœíZK·¾ï¯˜cwà¡›oò99ØœÈ^äÆìÌj5Ñî¬vvŠ~IþnªØlV±›3’à@–C•8Å"Y¯­‡Õ äjÀ?ùïíÝÅ·?)+W7i}%Wo/.dþǹV/.QÛ°Š":åÌêòõ…Ìt°b+¯•ðÃÝÅ?»ïz#¬r2voúµ!ßm¥´Ý»²øÔ P^v×ýZ çœݱ_+í…¶ª“´KÀªÑ"¸¼?-Þ9ʲVÉnK²nQÜZukÜo…ô¦»ì%¬8iæœVâûºýZ ƒqÝ¥úÁ(ÕƳÜ`»»§cÕ½”6Â[Ó½,‡1YW$ëØK+œ2«èØka–ªûnè¥ ÿºü¬`‚_8®ŒVX+gsoÆG¿ºÜîàx¡ì`twOäŽÈëBŽRá~•m–1®Ö2Œ¿ï×F(7èîuV£Õ“cÔh²ü{¶£•®{Lœç‹ÚÄ,ö êK vJ»l4†ïb¬Ù;@alõ éßf”°&¢ (4‰zÈN·«Yõ ,x*ýŽ/ÔZHe¸’'3ùÙ}tœä'©‡Âz¨ŽšXÙ.vs¤Z–’rsÞrÙÑz:î2 #g2Ý!™ÚÄÁg_H$[½"ò¶É»%ò-‘û¦°›B6ËIô5ÝmOOz<ÈÆ!4ßÐH±lÎc…™8'Ø€ÿ[¿„†àäi×a ”ïÓ½gûöܧ-nTÁÁJÅ:ÐòiÿŸHdµð¹(K§CÞmóàÓN§â ¦&ãÿc#Ús}GeTú$@g¹Í”)µ#?¹k"ÞŽÈëóH£ Ðlè5ÇÞ ï1ëÜ”K=Sx±¬ÄT@JfB7†dì­o ×ÉgOn€9^àÕ ¼T­î ^† »nf®çrÆJÏ)e@;YAáåcV¢<¯m/B:ŠûY/dp_zîkˆ7ÀÁœÊ£Â!Ü(r±Çó r­¢BE&øµ1ü¶ð›ë¹ÀQ¦`SÛ ®³ûɃ|*NÕ OÈ@´Ä4¼z‚5Pn»/T»¡#ð¸*nÐ(›n‚é¾am- Û¾ªÊÏÆº&ƒäl­gÉÙ ™qte(`Ñ•ì)¹ùn2ƒÊ'%ê—¤8œÏ†Iä†ÈCfÕ†3\y‹ðdtU+±‹–3<„g"ÃãHÆÑx¹Th²Ff]süXjŽM©9î`M[Wê¨#ÈܼO¯Ðëc¡ð.›*Î"!rKä†ÈC“!'>_œV $ˆ|n2<Ž­Ÿ<V½tM?‰AHÖ!üãT'­ Ë~§(Ãd¨ÚùsÃC{ŒBë¿cù¦å`xds¡EÒÍ,H€³Ðþ¹HzÅròKDJ%¤QüWtÖf^"¤Õ]9ìž#â |Ärl¡KgMUQup~¼¡=×JAßøYyø¹•ãNèÝá©GÿA0Ü¥ÞYÁÅÈM™¬,K]μq€*zµÖ€à¥ÅùZ:ã\÷¡Týªõï >‚“²úXX÷©Aˆ!/Aü7¡]Iá±c©b=¥hÊË9Öç™}3O猹ó2áØšåXOäs“á‘ȧYN+ñÁEoS¬Kh)Ö·=8O°4–‰ÃœhÛd’³ÆÌšt„âþÒhæHëÛBåVΤi_63ëÿö¥•»§ßÉÒM³Íz¹ß¥ÙfB5Äùõ¸\UGiòë> ¢q°«ýÉnhªô¾¦2¯!"º©¦]†ž¹z+ „þ=y»¦=¼2 ®¯–ÀíKWÚZ$©%–Ž 5©‘“»,Û.òŒ$€Ígs¡XzÇÃU1¸ÖfÀ™qnzþ\ÿØC7dcŒ`¤°l 3¯³"ÍЬë°ÙHÊŠqä59‹áûf ù‘ñ»ÏàϺ¿Jæ šîÈVÙì…:šýÎ2Sÿ?XÞ¬N(ôå[¦zØfC!ž¦<ßÍ‘bÖ°/œw*õT$ eÝÛ®Âç*ó¡YâeÏ~CÓ­½€Çf¥0à„ñ¦Ú„vK5XŠ3¨X]é±Xpþ»2öl¤Á±4}s‘èþrÿÓüÆE³‹§Öb³³c«¼L_« 2Œ\ÿ?#×ӓ޳_©>1+dà˜’Âû^B“¬kÎi¨øPƒe³í >!Ù²)Õž$ ~d׊E’Ͼoš¸T‡m=ZÅ[O9ͲX«Æ3S⯿mÆRL©÷ çj%ö-ÊH_^jâÒÈZL1ÏßÃù†Ä2 ›ƒÈ… SÖ& hŽ7—I=cÄ:«²ž[¦a·‹ ?{Ú¿§¸¤|϶-†Ýì“2ZG”éÿ¨ö×ëÏŒve…¢d’ïdàöh¾Y{kA;!,°töÿ/Ìö¢!ŠÁL½¨&5ÓÀí½¼xþãn2¿endstream endobj 1871 0 obj 2037 endobj 1919 0 obj <> stream xœÝZKo$·rÔ¯˜[ºƒ4Ó|“ÇØÎ!Á"€×ãä`‚VÏ¥Kíb‰ÿ®«Ø|»9;šõÆ‚=l‰CÉz}UÅ~\Œ¯Füÿ¿|8ûÛ[¡ùêöù,Œ¯øê§³Ç3ÿã¬ÕWk˜(µ[yæ0jµ¾9ãqtšne¥`~x8û¡ûºWL Ã}wך9çlw(Ϲî~΃û~†r´¼»îÎŒ1ÒuOý ¤eR‹Ž—U F•dÎÄõað¶/­ï. ¯{ä§Ý€ë5ãVuëžÃˆáj>Ss¼_÷U?H&¼S¦Û W;*!ºí´—uwU¶Ý”m·Õ¹„TÌjսɛ^ï ¯§žkf„rTDO½dÚH.ºá„– ÷ãú_A]bÅ-\- ’K&Åj–qîýj} ¦FaÃA&ê<0’ÎX8(èG;£º—ø³Txÿ‘9î§$Yõ¾çž + 4 ’©„×u™@Ü`ßÚ€LÝÎ/…‹®¢ïÞÝ”©;º^HÉ8˜˜«G3¿'ô›)|H­‘`—ÜúIV!\Ó “£‰)¨Z噄{µ#Ís$êµ#‰pû ÁA§‹i?º(Ž@îʲ‡é’Ö(ºÅ]™pÝ£ýÉ\®èÏyÛ›<Ô ÁE|)S‰ ÊVÈ|@hÑf5p„–QL›,,IƒÙQÑÞËbY}8zÀPÛh_>›Ž> l¼Q/@K %“©LÑ^U⊖G=ˆ‘'‚óJkÛŒq 5g6¥ïp67Êà b0¾#ƒH¸—EìGŸóÔ š¢ñ.Ax,¡ÐÁ/  ÜU€ê8¨G%c äy!·…|)äýœT~´tÙûB^4—f×ÍŸ ¹/[<rSÈm!Qö$l]÷CÄ œ1ŒÆ[B"Ø›Ê!ñ¹ÓqóH<%b“ˆm"n#Ñ/ ©ybüãì38=† ôßd¤»ÎHWô|™©`‰\ªÑDåÓ p<ý켎V~/¶Õ¼ ¦~x“ÿc[©U3ÃL µ)‚±y4Pîiìž‚;$²5¦„˜$Ž# Øš?r+n1O3ÀHrC×ã®B3„ ”VrrÖÿp€ÃÉmÄâ?¡¦%šJ¦+îóª—$!"ÂÂ!G!£DukaV2.àß4QõiMðíåļùKÛ} ùA匈ä„ÈJp|Oîk,^€ç Á',~‹¡l‰X¼Yš5ÄÓjÑS^é˜)˜I3ò®#hKù§¬ËMÞb©ÒRU‚´OÅœ"À=N0ü"&²¼ð=õ°,ƶÙ_ÍN~oºXmµå&K£'}á¤wéΪvµF´¡vBf_ˆ™͉ íñ”>»V$C¬ü*³ ësöÚ’ažm¶íÄõ¢™“Ñ: •kA㱣ġú½'îËfï²¾,Y}ê0Ô!£`ƒCbýä{Yü†d¼Ñ±TvŸc`INƒ_-À 9¥‚Hø/ŸFÑä4ú€»¼‘H"ÑD÷ß^Aè1QwkÛÄnæzÓùd,óGý~pI°ó¶u/[c¸fÈxÑ„ÓMx?bî}DÐ!Ž(äÈ4„Ñõ'VñÈU›¹Ø’&Rjë§…3ªÖɵ?m»v+ñœvç‚ÿAbÕ€¸Sr‚?÷Z3oHÍ>yï¤N‡ì’Ûâg¤ž­”’Éó2á´Ú8)0xU»Dà´°œ{ ‰?Æ0`ȲV£ÍPQܳ``ñJ²ú nS?”®¶]p¸/ sï*cu3¸ÁΩ“VÒ†RÛ«k`ެ.'æ;ìı0uâ å1“êà‹÷·’×–…N„¡sIèOà¤<Û%s(ø·‚vÈ9”Tm«¨¨Ú·_áÑu~ܘL%g;©CÊ”Âæ“’ºÝFÑñsßûï¹±ðÔÃ=´ º- —BÎëØ‚ ½(ÒZx®ïS›¥´Cl”Öt€E©ȧBnšý„Òph—ê@códà6¶,P7ëR˜Ü-»‡F¿.,’¤$¬Oe²§‹vyð]½ú?”kLáÇ›vø©ð?cõc,«,ù:þ{Vì{êáqΜ’Ž”ç‡W”ÎI°GZ­C6‘òžô¶Ñe#vMœ!öÙ¤™ÚN±âzm |ߣ0¸Ï}6²|bo=o/¶ÙHømxeUÞÐx°ŸGÑY®Oì3UJÊ-ce–âôövv€ð*l03\´E»ÈBä5©²‘9~¦¼¯~Çhƒèü˜`ûÇÉ2mE?ýº«þ˜w§ã2åûàþu—és\²Wgu÷Ïr¢\óþös(ßÏ–çh†N€zžb*N.s ›fæOe‹ê'Þï?/Y!lS¡ü© …<ñQqõ«×‡žslüišÙçV²¦…}5¡ns¡×…=ÉÜcnGÆäpF0üiúëÁ ÑHk?Lm@§x»7Ft—N¢ ]òÉʱý_4ù¹¡¤œ¶jÝ’ð5!Œ|’?‰0 „”åù(ä±ÏŸo/9v)GÀ|ßñ;}’aË×+?Éx,$ùŠbWÈ}!ã·Nú&äê‘UC`GIsêCűˆaü¹éäˆ|$ñ›ŸcŽåVÍþÔåßivÈëH–L¸É¿]t—éÛº´LõdSíV,©‡ˆï5“7ˆFWÞâgmƒÃ¬5¹,·™ÄåÿXŸ} ÿ~¶¸V9endstream endobj 1920 0 obj 2333 endobj 1958 0 obj <> stream xœí[Ko¹rÔ¯ lwé4ß$rŠ“I°²^%¯±K#[±4zÛ«üú廊ÝÕ3’íÄ—ÀÓ=d‘,V}õU‘¾Y[áOþûäòèw/¹b«·wGñûŠ­Þݱü1÷Z½8ö…²+78͵\Ÿ±<@X5Œve¬ÿáòèU÷Ç^ŠkæºwýZ ÖZÓmbË1¦ºëúñ¾½@1Ömû5´ÖÂv·ýš 3Å;£ÿUŠÁê<>~| Í$K)κudùUónÆ«Ù÷ÌÑLN{*ö×½è×bàÎJÝ©f”œw»4—Uw Ӟô»f]\ÈÁ(Ù}W'C²Þ€¬Ûž©Asi±Šn{1(-ïã ãöõñßâqñ“ƒš‡SXs­|Ï•_û0gVǧþ~ðÓLK­ýx18átXÞ8k˜_ÓUlzÅ ¯Ìúõ®v=kÖÎæOÖè4¹preý/^_arîW¶:þîèø7¯Â¡ð«QЏùÜü š7Ð|€æ4ïcSºÑcPŽ Œ›îtXCsG » ›¯½0cüYdYa†´ißΨQa;N{ ¹·ê¨Ä“Þ[‹Uʯ17v³Æ¶4jçûÒ8_NêRÚ2ïëý«d^/ÊÕÞw³‰og+¨Ë}Û¬`jJ,Ø‘tƒà£HÂÿÔóAKã´ßh6d%'µå=VLÈè0ÙtaÝVÖ›jþÙ:•m0þ–Iª& K4íÿŽ¥å¯Y'ša󀡋¦ol9Å–æÕÌ"d0S,¨kͽoòèÞ\IïêI‡J9)ñ ¨D?¿{@EêÁXd… „¸ÃiF/w Òd֣Π|Üð7ƒü\.€D¯Gmò²"\ïê Á¸äƒòh{S»>@שÚp (óWµ-l5ê‚e,Í1¦l mõ=Œ‚­ ¥¢Qðû;4YUŒLºûدÇÁŒ£pŒ‡K8[ :ØwKÑ"ìÀŽz¡oQ¡ƒw5ÌìE¹Ñ.ÛKiþ6,œ ƹî2 sÜ‹Ã;ÿÔˆ&îpAֈĞÁ·Ùü™À_¯pÌ+_ƒ6×ÜÂVkƽxÊQ«³µE<wC犜tjÂ’{HÜ•½›ã‘Ö¯²á9dýÆe÷}°í¼+îý6µßÇ‚—#s¦-âD;Ê_`[ N*cF@É¿&4£¶#ñQõÀ½¢ph©@Ë´gr#ƒHçŽlŽâahÏ#á7(-NÁ'ƒñ !èU¯½õoêϾN§˜t ƒ»0ç)C£îwxPtMï h-ï°m@rBZÁycfHç|hÖ_·¯‹™û©èÑL§S˜‰ã‹ÛfR¶£òTÈHѪþ¢Š†,;¨Á=ñ!ä{ ÍKДàw H6•k W°VóßVŠ@¬@½0ËpUò‰ƒøòŽsT_Qj0‹Laa`°&ó©JBÉÀ ãæo«ï#"rF}${Α5Ÿhépš,R»’ÈľÍ\!±ÃÜk‚°+èð…½&Ëz"6.¯9“¶WuÔº¶ªP¸AA5¯÷Ó¨Þó5ef{*ú‰qJ“H¨¿"v–ÎßaùUÃü 4ñù”ÀÞýŒ_Jå…!8ÌÄ&¥drͲ"’ø„£fh}; ¨š³® $áó9ÿÇ:£e7Ôktpå©…†!Ý"E‹Ê/ÃKCQGh Z•;¸ËDãµLñ ž™OKîMÇFâ°¢¨rX ¿n€c[ì¨_ź³T´6v:kšj9˜f4­¯kY]ädWÐÜ‘Í-4Ѱ«[F³º¥ì3&jñx9$fž³´ÊÌ•Ïv && ±þ«¤=c0ßA®{ZèØß‘ì¶ó„ê¡P)Ò» #ɛľ²%‰ÁCã¥ï<<jW¿ °mw¤¹Ç~ôXôA$¬¦²‘ÈL¹¾‰¢`°‹èÛLÁx[‚ó©[š™H¡öR‚ÇY™Á‰·Šo{]޹–Fq1ªnd:z¾¶TC‰65Z´54(c2Ôu–^°T¢‰ˆÍ]À)oŠþ`FÅfPBU|שî›iöþZÊ ^ÊSu–uß9ä,[,“*Īû5 G¨ï h·  a´„xWÐ÷Œ?Ôá|Ý@óšäÊî@B åó·Ðü†\%šã’Œ$DäÍíßCtI"÷:Ÿ?Vï’ lÈÄ¡2HÒŒ˜NÆ«Ëo yIÙ ¹,.QpÛ›WÌS®ITF[€dSÙÄt—’Þ‡¸(ò>@‘ÓþŠfÍè.iC†CE§Mû ÀÂ54oBEr’÷U*Àµd)Ñüh|KñKcCl›F2¡PµöéÊoH×AîùrØCÓwî‡4)rM© ã&j§r«©7ˆ“¨ G]­r‡.‘š¦éTɳ › ^¡fZ¯ýˆ*£ç˜{74ËóŠp„¿mIGRs¶êy!4[ΓÑUSHu,c¥:Ü®µ@íx€rûâÃSüNÒÐ÷Q‚¾‘Ae­ÜMݘw¶—Ëó Ø–‘g¦ê³˜d«ÿÏŽ¾Jvo{²Úcó-4‚æ 9ǹ£m9OMºà9ÏrÒõäd Èñ×§®ô"n^E,)Ö„³s DÌWޱt2aa™Q5t ÌjヵD'š*:š(Ÿ“!ºîÕ,ÜФkCN1ß36M'ÀÛÜTÔ”ÐödF-&w²Ž+)+xY qW¯/jµ)cþ°à ¥Yé&¥X Ê÷P *QÔÏ-¦J›Ä0Ê–ofÇ ªˆ?{`~ßàð;2ž¬:ëcÝœ!,å9ÆÐ©[½È˜Ö:¯)‡›_ Bdoïu/àÁK¥òß²¡Šf[A½%ôTQE’˜žìý¡¾#¼íýæ”sÎC}ÿ÷ÍKßS(ݼ8DWÑKÂú‘¼óà&«0-ànJcóšèy ªFAÔ&š¹Íkæ3×ûã§ú¿4–ºüÎ+ÿŒë&ò1Ò›v¦øÐê³"4e?³·£Ež„ɤ‡—ÄãQt~èÐóóQ¡šY9„*À¿z¥Ãµvˆå¡éE}>І'ñÆ1ò‚KųI–ð2¾M—qU“RúôÕɤ*ᎸC™¾øÜkŠ0í{Ò"óyYŠ…Ÿ@ô0'‰,Éós5æ‹ðü|‰G¦Dtd>ŸÁYûÚsÈSc-%ãë½ÅDkþra1ÞGðo4PO6L9Ý)¾Â-Œ‚wÄô« *ÖéIù©Fõ¿ Óð¸ªþ¿d°ô󬇯|ŠÜÉÝ`>°/­(ñòàÛ#º&†‘¯E›w2©pj±¨¢_â5ïtÏ……=¿Ñ3mLA¶¤Ç¢æ,™mÿo­Of½bG²¹Ô#`-¢9†?}ïÿü[+endstream endobj 1959 0 obj 2830 endobj 1997 0 obj <> stream xœí[[o·~ׯ8(dOá³]ÞIô©i ´…4Þœ@8–dYµ.¶.vüKúw;¼ÎpwV’+£EÑÂ@<á!‡äܾ™áúÃfÅfŠÊßÇ—¿ù›4bsv{Æ7bóîàÃ(ÿ3•Y›ïa¢2~Æ`¥Õ›Ã7¢,PÞŒ“ß8%G?\¼~¿Õ£‘V„áívgFï½ö‰ B˜á}¼ÛNÀPMN §Û­µÊ7ÛTnTFW0ªÕèmYŸÏ̼Œ‘b8F^‘œZ»¸ÞŒÂéáp+`Ä =ŸiD¼ßðÝv§F¼¶Ãyäê&-åp•÷²“NpÛsÜöª;—TztF/Ûf„×käu³f´R{*¢›­UBŸÓ þçÿ$uÉУÒVF-ì¤50sg'Üæðð#l? «­¹ª1¨`“„¥ŸFmÄð»­­vÁ­㕃nÓ<ïìp ÇB]v´‚ê=êÙObsøòàðׯ†?owz”vRñúRÛÑ…á2Ž fI×!¨´ƒ±“j¯J)ò7ÂÆÛWgžÎMÐzx5\A“Ÿ¶»i´l¨Ó±…·ùT~²Ñ®ÊQ‰±•¨Ð^Íg…}?n-U [gÆE…©0ô‚çh××1[` “Áßßü1jE‰I?Ä ºiò À—Ù,•1UîÔ¤Úí·²bÔ`¯ÛVä¦ws©Qo,”JBj:á:À^Úá¾±Í*ò`ß§Ûh;Rƒh H$›$‹ßÒƒH-G£ùž=Ýù6š¸r3=Ôå$(ì»PG0aòt”Øçis¯¼WvO2¯/Å8­yúmóÔSvÛî¼FÕmÀóH4"§}±‚Œ¾fCÐÅl·|þ ä¼íQk»¬¶0s’Y{Ä›ÎܬþN”2³ãâ¨/£íXujâéè§IÓ*x?û9¤¢1ã pR$êâ§×þà Ñ^àÌD"€ÂD ~‘i•ŠI!»¬"j¾/ˆWݳÑ#ŠÍh@Þ£ƙ̵®~ JL­à£Ó_›V¯³›€åITG§q¾q?›)"ù±ÀÕˆ'o„–KL)8I™%³ð[½."}ò®@¥Ã$—–vë—eXƒës€ cÜ q4k%ÃÒ¶j¨gÀpB~Âo™½¶h!ú­Ÿ¡Q÷%Žýɇ¢Vš°ˆÖÑ/ª-åµç<›øÀ"§©wl ª¾¯dïEÜ12@3»G™-7PÝ îz´²Z­€’z<<ð±_8õËÉŽZv þ̆.v'ŠµÌˆÉ|˜É$Ÿ3ã3œÅW¿%^óy ‘D)¢íŠù©yüÀü¿ˆÐû‹ã\-ÜʲÏÑå“©{‘Ÿ„ÆÀÁ6³¨²ø•âã=xn³â†D€-ZØMÚèq—øÑ’s3˜h…eæ¼ï"ÁÒ9‹ú¡P¨êõ=kñ¨O±Ø ÖÍIR~×/Ê«”Bn”P©¤RHC0øv6€ c‰R$(G=ÉäG…:Jü•oF"o‘Z€|E g;$©H~Û'°é²N ¹=|Wìå’[‘»¾ã:”ä¬J-[©êªÍj@‹O$8/8*âóÃ8Úk¶vã×1·tqð\d*©ûV †ö]H}¥Ô4Šy_sQh&Ð{פ›7Ñ2Ø^ý9š=:”$Mª2Âô }~Ȇ¢È u‚™‹K¦ ÿ3‰à¢=S7轈j­XU[±³¤ õí’É Bÿ6$ÁRŒô4÷!«—*)&;“'Ê'‹Ê%û:혬œ¤0¨ÂÉIÞÅ^ƒ› •ìZò_ ã±<~"hýÂŽ‚1KT1|âÚõˆÀÅ˸ i†_áèy7¡’·Hž"yƒä2ã9Ü!ysßt£Ì„8J°ùÉ{öd·Èᧇ¿Eòö”dK–1áðÓéß"‰²dñ}WôÎ#'•M`µ³“5#a£Û„øI‚±Gò’³öXXŠ‘a¶Ý|·À°8•“¹|_&Å*ÁÉhÍg®ŒÔŠ÷=n—ýù¾K¾è=¿—ÂêŠeõP:£Zç~¾ê$Ç$ä&ŸiïšìOÖ“»Wú=sm>’)CRïXW~ͺqÏ?±ËK?dmذ4|{Q:ÊÒd«& NÒÜùSlRu³Êðx®ôÜ·é’ ™ÑÙY‡bå ‹ Jæ+y§T8 ½âšdQý†ã¡¾rÿ\š³I[}âTPA¸‰Q¯>ÌΚoŠú ™ùf.¹dðå ¶sÈÙ»n)úô¹qàd)ú¯5ªž¶F¯÷¬ó’s/>Œ™;j6ë#—‡*®‹_¹ó¨6¿ž!j(Ã]à£ÏßÙCño~CÁ<²DÙ[ ©—j‹QÛøÒ é¡S+õÒ,Í^|&v†QíãVøQ('¢®ûÞ­cªÂóK ù‡QWéX׈ ¾áÊÒÄwV\Ä·HT~Š™¾<Û|^‹$Z‰Ý$ÿ+ich\öe-’/rêG¾GáqœL%\Ë[§õËÞÑ9C†ã‹¾,‹ÑÐAÔy¬±Ëzõâ#>|qê•Ö²2¦H "‡ ô¹åJ‘Ê‚AŠPþí¹oÃ,vÞižùÁNLÓ¨uª¼\kcþ¿øú÷_¯æcæëí‰rÁ­’Çìy޳ˎXË(´.öbm|†— ÙhS`e}¹õ´’ñçg—Œ Â@©›åsתû艌>-oÌ_¯5áÈÇ]9åu÷Z‘Îl³d²$†]Vwõé ¨ÅŒe|„&1åœÍ4Ú]ݬê©ÌøÜqÏnÁ¿ùuß÷õuï,Èw¹Vù²@’Ãh©‰rË-kd®Â’Æ÷‘j²}~ûµªÅÕöýWïÚ‚¨¤> :œn CM¥Â£ ´Ð[$Ÿ [žÛ¬/¢ó€ªËld­\sޝ@s¦˜T·ú)›.ÞTúŠ.°“ÞRýðwßî!\IcCNÁÝþ_©èÉ—ª 4Í÷PxküH3.þãáÁðçŸb>̘endstream endobj 1998 0 obj 2859 endobj 2028 0 obj <> stream xœÝZ[od· ~÷¯}8§È¨º_Ч¦íCŠEÝ}ÙÆx²h&-W‡Lë£(Ú2è¢û6xÞïd4³Í‡ æ==˜z‹ƒô6Œ²è¢÷v´1nlövZ3Ïá]3:š’Ø=é.”²Icé5ãàžÿšeÊY rSCPĈð¡[žÙ» †FŠ8l“=á]¤JŠaé‘>ãA¢Iˆž @|U?¿´ŸmèJ~÷ÌSQ‘ç§2ûI˜.óö¨è=ejB8ÅD)à]ûJ6ºÁïÏí;úÖuçšÕwî øh=æOP·:´Ó·ÑÔJp=½×œ9Î=8À›xºbÒLÁ3îE”~DM‰\דܖ[Þ]G*˸†$’Ü÷k²ëý‘ ‘"Z:Úe˜*ʾ`¹ëN Ž&Ý¢rt;i˜t&ÎÍV5ˆ°LÔªlÁʼn.Kº1¬:š,*yÓ\R¢ø'£¿Gi÷˜Yv-_´Ð<ºé²+˜ÉÏûæ¹h¯u1ØRJûh·ãQYŒu£$ØÉ2ô‹|>ZÂQ^иJ¬Œ§¬êùÚ×øTXh¼DƆÂ:ŒB;ý›øën±„|Î5 +f~g «m…ò÷ž3mI/Ù9Bþ}êç¯(æ–ÜvÇ„½¢ŽVÚ·šj‹8¹Y@fš9Äш²¸Bp¦3´9ª+¤z‹F©<·Äb$øV’QŠuYVØ÷§Ù¡*a€ÖÒ +@NÄ7*8C¾7‡”Ç¡4Ö)  ´AX¢S:Õnÿ¸•LC~>_fš >‹S£ÅtQ0¥©—¸o<ƒÂ`˜WvŸ¡¶ž‡K‚ìn‰Ã é®g81®ÜÂu9©éÇXEF‰´c`T_ ÆêCD'ÛvK¶1l òÈeâ @HpJFχ7ˆ›ÅnY± ‰”È(ÌÖƒôççÂK ¶’€5‰tŒÓdi¼_|Ω(f‚¬O^âêqTFíGqJ¬€ƒ (†êÙù2mé:ݸʪ>?Öšj3DR†¾R© ®‰™k]ÿË*1íê(‚Nß4«Þç07p«æ¢:ÅùÆýjaˆÄo„–‡9¥\s)³œåå‘-ˆ]¾Aêp åòгi­Z–å´"&7ºtMGË­ ó¾µ,˜†¥ÞÅPÔ2Gm±BŠÛT |jqõaX\ Všp€Ö1oêZÊk3Šlh¼¼á-;;ûJöQä #t3Rn : ö}¶dµ:’ìPHÑ}Fò™€â)@Œý<ŠA0¿ä–iÙ‰ç!t w¢¹v q™åµ+Ë™ó3ÈâkÜ’¨y™I”R!ú®†YóºÀ¯%øÏÌЛ.ǹZ¸#Ë^¢J“ix‘?*ÛÜ¢µm’ø#½Ã3Œà¥ ,z“¾èjúu±F¿$ŽHŸaé‹ÚçÂ2óax‹¦Ýb~¸(TóëðѹEý½†9)Ê÷}â=¸9&ᦒZZP ,k ¬V¹|ˆ«4—.7u–øÃ%¬–‰|Br‹äÉÊJiºŒ0;Ÿ…g’Ø Ž•šR @«ê´‘ßçª*ØûºÝÙ6íª¶l¾¶æª ºë{‚ 4^“±¥&KÃ4‘gHî|Br‹äÉÂÌXì†ÌΑ|Ar?Ü-ó5’»áÝ3Ä[-oWŠÿİÌÁúK;§­Kh!…7¦al c/X> K¡q›kÜ9øÿiþaaCpu|ÓÛ óÀ±š­ÝrP±Ü<ìyW÷Y+ ¤YòÒš%ä #÷C@ãX!µÑöš§´l¡` Ò¾ÀÅ‹E‰™Dî$/![$krG™í†ÌΑ|>«ì–|ñ%¿Òpœ‰JxÛàÓ 7o¢ ñX‰ëJÜUâªcÛTÎëØkïP> stream xœíXKo7¾ëWì‘[tY>†¯cÓöR’¹…!ËŠl$–dËná_Ò¿Ûác9Ôf´p‹Â@áƒ?Ï’œÎ7ú¶\v"þ”ßë›Åwo”‘Ýö¸HòNv· YþeU÷j‰ µñ]àÁ* ÝòÃB– Ú.|ç´â?Ü,Þ³zàFYØU?î½wl•PÒ°CÞ÷ÔÂI¶éÉ­µÚ³»~PÚqm“´‹£4÷¶ìOÂ-Á|–1J²5õ)ž…V+6Äý†KlÙK”X Ó•FFÿØ«~Ð\–]ÇS¥Ø.ë²Â°KR{Mjw'v) Ü`gUYsÖu×Kíß^Ñ]¯¹±Z*ö˜,tRù_—?§p©N×`UŒÂ ¬Á•úÆ ¡[^b¾ï·à‚§+nBh’àÚ;‰&=¼Á•ÚX\¹A•¥ý¨Ÿï£vãQ ;¦ïÁÊlx×yô¯.Ú¡& <[,¿yýS\½®pGpEðŽà#Áó!‡š«ô~vÛ¼Šm…忬<á/âxaƒtHF!óÍ-sèÁù‘»!èHNxx $ý,ôIºÊ”Ò!™ÕšìY$„M÷hLh[VЧ¾€å.È6göEêÃhæÔh+ò|C¦d­©·&áŠØh÷ß/O³0ÆÍÓ°Þ&‡|•o* ‰Z Ÿ&ï¥Ö6ù¬ÜÜ<\gèu(M)I³Û –þ¤ò}E©“¶9w¾ ¬~•tDvÆìwMz4Éýó8Âû°¼®R'¥ UͦWSr&˜ <*ÓпÉÄ¿Q¨¾Ú_ò 8Ë!‡\¾ª·q“´`-š2¶ˆfzÙ'ˆ¶Ä«¨Ò:È Q±›_DÈHb_;Û ëBÀ)û&#F¡F‚³ãȆàÈ>á û¦#Ñav[£¢™¯š™é~º-©XUØNnÂg¢wÁâÜŽe¨ÐïØãŒìMœ§ ¸Áõv#Ø0³ñä°ÒÕÙôÇ™±€B²®¨ †ð§Ãìdz]‡‚=}'ÌÆt2¼ô˜N*JÀK´Ó—PGÒp,Ÿ]Gšç÷¦å_M'šhA3S4?3!YÛ8¶é±ütŽýöe¿·äa3<5‡6£ÎM¤âàÛpuƒ4á›úŽŒÒæj×õÍÈ>öŸ¼Âȉãã®Ë™±§Ôb Â|^kôDÇ´q6õÿå“3ÍO/óÉY»ØWŸœÏ{1¶›öUxqª)f¯ü—êÄå´É{¡ÿD¾ Gät6›ü#„Ǭé†r»OqÓt­0nÿi¹x?QW›endstream endobj 2065 0 obj 1286 endobj 2106 0 obj <> stream xœÍXmo5þ~¿b…ØEZã÷¾µ´HAUåT>TUt¹Ë$—ör¨ ñ/@âï2öz=³§IDQ>ä9¯=žñÌ33öÛ†3Ñðø—ÿ¯/_½F4§×‹4Þˆæ—ÅÛ…È?xžÕ<^ÂDe|X°Òêfy²yò†qß8%™‡—‹Wí7fFZÚ³®7Ì{ïÚUBAÓ¾)ƒûŽƒ@Åh»^0k­òí®ë¥rLÙ \Å`T+æm^ŸO²Œ‘¢]£¬‹( ´–m×&œn—€+ô|¦Ѿöq×+&ƒ×¶=R×R¶Ûa/ËM»ÁmÏqÛíD/©4sF·ÏÊfDÖÊÚuÂ0+µ§G´ë3V Ùþž4tBú×Ëï’»d#“Â$/ôJ(¦dÓK »ß,7à8!É4—.)2 Ã$Hy뢩œylh¯òw¥é„5Â]„J»`²‹Òè á>B㕲DA K¬Œ j7èÕkÍô ÝóN2 -ˆQ,(ïl{ cÊX;NcÁŠAœ zu†9B³|¶X~™ •::íá! „WÕ k„»z¢©ãè á¾ÀlªT7ë™ô<ò"™ùw (°Ôû1ÌŒ°qͤ Ü!¯‚Êç™âÄqÔBKf dWê&Ò¬P®sÌsavZèEÖ_•Á#Œ²Ÿ'[ ¬Q(ò³êÛ~´¸Šé’á?ÆcV[ Ñ› äà < a ºDbø¯Œ^—©ç‘16ø<á¡àá (w— å4 ×*ÇA‚‡/^U'ŒqÀ]Žƒ4zŒp…p_à ˜öã68“ⲟårŒƒuYÇg°EÐ[ç!o À|ÖfÇÜ⃼[¯S‰qÓ'…cÇ…cxÂë‚R8 ¥SªËÇNœ’É-­ÉŸ}0Ùé;zµê¢XRXü¼4g+„aë ŠZ®FVÄÁÕœZ¦Ã-´¹ÎUK )ÃhHêöɪ83Ê=˜¬©V² q·ÄL¶½×|žtJÌ@M‚´BýНE8ÏÖ1º¶Õ¨¹žfó)HaÇB*ZC|¬«îßÖ`Õ¥pd@Ò—t´ª¹v~lGBP%7‚Ždt…ß'lðûÅ49Gq3ú+N8É]†¥A@œt…Å Hã@jBݵ¤ß˜Ê’R²IGPCWà=»Q ¤lh›V)Ddôh>5ê½lÀá’ =ÇM·¨Ê»Ø{8ν¥º¹Äì³¼,„[ìZSJ%Ò £>¨®î»IQÆø›?9~²à²Ê¢M-]ÞÁ"OÖ¬o@&yt• uJ˜P³4Åœ$t¼”K›¹ŽäýŒir7öööÎPÿt 9^^ Ì ûñrâè2³…7‚ðnÚŽ«¶…:îSÏ5,št}„_ ¼ýò“‰Ð3ÚeYôˆöxpÍH ³³j^K×;ÊJÊ“Ò×›=ì€J‘79À>à9—¾@øá#„O ¬òK“FaêžQýM¹ÐUÕvàÔG¨ÿSÕ"aY³¯n â¨Â4µôÊC+”‡±ÒÜÉû?‘Ö„¶Ø>ý5Fê„Öo&²fù›Ojð¾ZìbAóÏ¡u#%Ë­«:ÀÃ-WcOþÇû yÈÛ– ÿÑëWxß{øëÍÂf¯wÛëò¶'»; V”Ÿxeøä÷ý|ÖÓ÷yÜòºéûÇxR(ß—?].~€¿_”'endstream endobj 2107 0 obj 1588 endobj 2155 0 obj <> stream xœÕXKo7zÔ¯ØãnÑeù¾ŽIÓC‹´ES¡— 0lI¶•ʲ#©HûKòw;ärÉÑŠªí"EPø 5$çñ}3Ã}ßp&þÒ¿‹»Ù×o¤ÍÍ~×Ñü>{?é?[‘´¢häãbLàýP&¼WcÅbªʫķ¸ºO%D`‘É4x´8——˲m×Yæ8GBÞäB´J›,Œ×ââUáã»ÂrR¨åPRÉB¡b´¶g0‘Üì#sÑÛXÐï=Ú—sùGïPSis„žmS”/…½–yíݘÿE5½Û'gO ,¼ozá þE·æC)ëÆ^’Ã6’Õ”#-̘ZL²ü¾9J‚T>®)L®S‰7°¬š¤û’Ðr©Ú[õÔ’b|–”’µ³B0Ì:OWoO‡(]Ò9B‹t3²z5UUûØ+0á’º.—n‹)ºžcÙãÎP[ˆ.qû6mó{ð<ž…¼)‹ 0 -ñ“(ÿ<Æ D€?Vã?«yŸ»é¡¶8%ì„'½´bh±r@x4µ^ ×E\>•.î‰Lù)$Ïx ´n¿ Aì߯‚ÆA_eñxrlâÇ¿LÞ'.’Ó˜çð„ çÆyW z‰4i6×(2-aóT‚C¥Ï„b´("ÕyQ }(´zëþ!ð‰5—ÕH¸H°rcÇ€‡©Aà%‚˜äcyTÎb¾p¿ð"4Uݱù¯þ @¢^áÚBb•â8&Ÿõ5òèY¤tæ*(H%mŸÔ~RC‘‚€¡±H¨„b puÖÂ_æ*·ËsR} bYó« K&§B¤F˜><ë\NØ£ž8ø =wç|°<'^> stream xœíXËn7Ýë+f9S`X¾ˤí¦4² C¶dG­,9’Ò6_Òßí%‡ä½’™8q¤-|Ìáã>Î}o:ÎDÇã/ÿ½º}ÿBÑÝfi¼Ý³73‘ÿáyV÷t•ñ]`ÁJ«»ùõLäÊÆ}ç”d>ÜÎ^õ? šiEè_£aÞ{×/ B˜þ®*îD¿FÁ¬µÊ÷ûa”Ê1ed/pƒQ­˜·y}¼A8íeŒý{Ô²ãzÄÓý|0b…>ŸiDÔ¯:ŒŠÉàµí×qWǵ”ýv:ËrÓ/ñØ5»=‘K*ÍœÑý³zÙë÷ÚÂ0+µ§&ÚŠ«„ìß% þ·ùÏÉ]²š)meôÂ(­™Èθ ®›/Á?’Y킳*”w¶?$l4OA`iÍ„ÒIѨ{ð`]Î`ÑñlãáˆüÙÓïðû¶ÂI6tça˜3Êá¹èæÏfóï^E·I& ×*™'à „„»æ„«uàî=sWf»YAÙkÁ¨Q6>,óÀ ;W‡î&¢† ’õŒå֢Ʃñ8¨}'µdF‡¼A"õbš«`ƒýà˜çhpSé¿Ê‹€’»:x‰,øE!áq…›’ø‰áÁ‚6ƵyR5ŠÈIï'•(@C$„òU¿Ex 3•±'”Ú6©R‰6 ¢½£¤Ž|!ÅUÓÛlúQ!t£p™lQ­ùÀÚù’¢‹¹AF2º@n«–ø}sâ©À|ÜPj\çÄb Œ†`¶ÔI;t(@rÅ §¶]»>gdÙKJÉN’h4¡¶Ìù@G_ß#°tI3s¡É¡dôò|ª*—tÓ5ºEQþFÎçÞRYÈ\¢öë¼,<¬Á§ÅYô›r`¡H£˜è?9ø?-â¦z¢5L‘þÆô7ËÁ¡æðckð<`Ïâd”NL‰]N O¢.[ ަ=O{„k„w˜CÍØÛ?&àžDæ+fÕI蜤ʒ?IªMåGZ®¨Ùîpý±™ŠS{  lÉzyƒÆ÷÷(Çè# ô¸D ~„ÌVÏ2 £²þ&pOû6Ž ,iVUÜõ…ºÄ›7/Îëd‚»æ2J6[!ÜVØäƒ©aôP’Т8 H3=­xÑhSH!!Õ'7*ÊN‰Åkôr0–)gcù--ͦ6*dù´½ ¢©ÂYŸò<¦+€'i~KÙLuLÂIIQí ñƒ7Zè j©MÖÕ\fO%t‘vRÞ&Gqæ´`“Kà»ÒtÂ>BÖ*#..벦ý«ThÿçÕþ‹jÿó:_ëx¤!Í` …u¼pºç„7wÍ {„™}°*©ytYa»£ƒ¤£û'Æ9¨ç=I3$!‘ˆ_bÍù˜àŒÉeâÜ×mùÞÓçe3ŒP¥Tj´¢5~¶V[ Š*¤}›šzØVÑþ¯ õvp(Diæ& R~¹vžÒè!VCZB¹ ΤÔ@e¿ÚãC“Ëõ®€-ˆUð*,Ëc«Ô ö¬ ¸+àxïÐÂ)Ï”Š·¾<ö¶€ë^°h¬ÛÜ“©HÞæ@Q|Œ—ÉÕíR˜î©_%çÌžä%‹±o>äg ur‡8æg'I!'±Ž}3v7ÍÐÄg”ks®æÇgá!OºÜ(Â»æ£ I7U3ùq n?þ3òágwV¹!?½}Üb"·#rSûs+IÎÕ©¨UíuS´&ѵ(#$½ß‘›aξëפ&„±oB7ç¿Exð%ÂÂý‡‰QéHª|¨•SPYµNo –ܾÂ[‚×±¿úÒo þÛ3·g„ÿç3Âù+½²p „¾0wý '™ç§ùìøý endstream endobj 2206 0 obj 1440 endobj 2257 0 obj <> stream xœíYKE–8úWÌqá¦ßq"À!¬\ZÙ»Þ]ƒ×Þìƒd —ªžžîšq'Q 9D{H¥§ßõÕW_µ_5œ‰†ã_ú÷üföõ iDsu?‹íhþœ½š‰ôžz5ÏÐQ߬´ºY\ÎD ¼aÜ7NIæáÃÍì·ö»N3#­íu77Ì{ïÚe´‚¦½Í‡ w¢]wsÁ¬µÊ·wÝ\*Ç”‘­(£´jżMãcãU1û¹Œ‘¢=/smq.صlç8Þ0át»è´X¡§=ÀóµÏº¹b2xmÛ Î긖²ÝõkYnÚ‹²ì¦,»íK*ÍœÑíó¼™kUæºë„aVjO¯è®SÌX%dûwè„ô¿/~/hï+Â–Ñ si ôlàlL»àšÅ8ö'™4\+¼×Á¼/æy1)æm4uàè¤Üº¯ ë÷'¡lB3¾ßÒ·x½ŠYåÒíùÔàu#,ìÌ­œ‚°ŠfÒrEïù¶Œ'Nß—Ö Å„’íež ò⯠oÌhp‰LäïË~S*wÌs½ Rœ8Þ>7®ŠCÿ(%H?/“â-KÇðÂÓž…Qéü&pŸ¦“Ý`kþîUÐ`ì!6ã½G^ó¬˜Ûbî«H+™l]Ì]6«P0zØ †0 ÚwËÒ0'ËÐKrÕZÌ=ó²˜/‹¹||‚/sÜ,úÀ×ÎxH •Z8M ñغ,(MþÐ:w5žâí2QÄï:À¹„g’óx¬˜Ëöå!Ö)Öy ¸åÁ#\æ1›*pWy¡íˆx#rkH8 Óg‚€€”`pW#q²ÙÁ.‘!ÜÏÑ€K—ò?fØU¡žu'8SVÑ•n:DÔ‘ä€d2eõ"N"Ý:ˆ˜ Ò·UÖÞ½#ÑžÄpaŠá7ù½ç´ –v}$÷AACÎþXc'¸ ˆ¥`™Òzà§‘dÌS5¹“«¿OBA@W[æ| A6@EùÔeÒÈFh¦´•Ñeù¢5L™ãE'™…ÄkaÅ‚òÎ"²3:®àä÷"”²}@xÍÐ/;c™rVîp|€Ï[T Ö‡Ñð~zD(¾<Íâùlñå»ñØc1 ­ª)z 0'솭RÑaOÕ$M¼7rddAéKÈb[ú>%÷‡·sÿЗðîLôÊ‘ØJX®»ì Ô¾@ôymê„XßK‡kœ~Qwu@³ €·‰Ò»Jë]3ð!.oÓRÕwJîr`y{ZVí¦Û¯óF”Ç“º‰Ãª‹H‡WÕy×YA§ƒ©œê¦„2Ü›ÑToäù‰ »­ÐÍ&†Ø!û#P×]æC 7æÉs4d¹ì½r°à(’sÆŒ–4R'“Žr#1Lbö0g’Äi³Hµô~2F=Ñë„6ȾHx_OƒdäÙ~,¨×4² 2'ÉÖà\ªýq„CXwg5Tw ›,$%,=àŽæ™x@œªšœ&xOÜ1NncíÍ=a âÜAä…G›ÿK¼$c¡ÄH½vâct4\jU7nktFôÕ„ŽX”ä¢h´_Vy|ÓÂç*øäˆIá_MÁ ” ÿõªÉsÌÁÍܦcºËŽæ28Ñ:‹“*oc}ÃASúJ¾ƒ¼#^c«á+ ã;‰ñŸ‡¥|®ùUV   ~¢~Îa™5 ´)c³n€¼_j9*ï0M ô‰}(ÀŠWÅ<+涘ûj‡×ÅìK$íUH•l}(æ:›UÑaJè…„½¿1 á¤Þã"œ9Î=€â *‰H¿üô5“;¢â–© –ªëÁáôs(":=^¯xeÂjkAˆ ‚nWdÜ>š0->±äÖûÜuµ_ð©  R-ñ! Ú1&b­pU̳b’ºb_í0`‚»#¯Aä ¨T&´²á681¡‘ŸstÞozc`ádìŠ1·*Lr%µ­ã~0òwƒ±ŒÛÁx8XNá ðbLo©íq0€Îò±jØ,+&7²a“+€}ù^PT…Ĥø¸¨˜2À•0E¤ ºL[}á;Tgý a¯3‚¦Á»Àw[µDA–˜’®•j¾jQn<Óš†M’w±·ë‚ìšsñû²oóøËïX2fbü°Bé{õš¼°—_•»y,æå‰k ,Oð‰p~¬Ê ý©ç¨’ã»»æ=´Ó#÷ÀwÈx@^•&åü4ÿ#gìª\p?Öo XEЦ¨?¯õ®f~ ×$ÒJt~‡ä±;ºþè)nŽ¿“&÷Ÿz~$êý°h™Të„bÆsI(ŽÉSêübZ OD/i]M»æj;™tò|š¶BuUõ¹€ûºÔ'ÿÑ«k,?€zËÂ{¾¿ö¦ß7ÕÖªe{i<ùØêDÿ}lý”~"£?A|þìóïdS@Oy÷@V6VÁ.ãY—cólâð³_àïTnÄåendstream endobj 2258 0 obj 1940 endobj 2310 0 obj <> stream xœÅZÍn7zÔSè¸[T ÿ—DOMÛC‹ @S¡—¦0d[²UË’#ÙMý$}ÝÉ%9Ü¥,ÛHä EÉùùæn>N)aSêþô_ÜNÞ¼çŠM¯?>eÓ›ÉÇ ëÿAûYÓ·s˜(”™Zb5×r:_MX¿@E¨™v‚?ÜNþh¾o%Q\3Û\·3EŒ1]³ð’eL5wið¾¥ PÐŽ5ËvƈÖZ˜fßθèˆP¼ayQ)ˆÑýz?x•Å K)Κ‹¬kãtÁ©y3sëalæ-ƒÍäp¦bî~ÍÛv&·Fêfí´vTrÞlÃ^šªæ2o»ÎÛn‹sq!I§dó.m†tg]û–)¢¹4ØDûV¥ãÍ£?aǸùsþ3xAšnj`G8²óÂŒk3§p7";ÛMç—àPÏ WTŠæ!‹«$Up¨Â¡ 3k§3f‚–y0ƒìLô£µÂ9ŠK{ªæàN©¬”Øøà=I¸¦bl¿Þ™FjÒY¼h—?µ3J´…¨PuUeÌp¡f%ºŒÅ£9㤟§ß!œpßvÄP »-‚èÙ¥Áóì°¿òQ$_d¥÷ €wÄÒ®ùЄ{1%¢a@ÙeEˆYá³&žõï–Â)£8jÒ´®Þå­.‚¸dÎý€>\j8å+fÁñ œŠÉ˜ÙÄÉz^<¤¤YVu­¼±”¥¦ùÐY²Î ±R©îX†1—Zb0Sn»ÉyµÌâö¹)–²õdž!ôVRL7ÿ${sHn5žšýqëü! »:äodY´è; Eç P骇SÍÑšÇ*#ozhüHÆúôï(5šƒ»’ÿñˆ$goN¡ToÎ"z´|½ À† æEg¬ÛaoÌ m(‡QÜnB¶iˆn“í|ŒLïU¹9”Óœ!ã$˦zî}ïueûPð;¬òhýkœ¤0×@úÂÜwˆ%й¨à^¦‚êl5ë5c²šò`³ÑÙRžA­ÜÙåYY» æâSõ:f‡›™Òã‰]{ N¡ºËz\• £?Ê¿8\œI"¤æ¿èH Áï[N4`š†sÀiãƒn¬ ð 0<%0Æ€½øs0!´ßœI\]ü½U\¹´ðë­vãÈ“±Åò ¾³¬ ‡Ž2ʦów“ù×ÏÀA䉇,ö¡ ,ä¼Xý—2wä 7Ê^ö˜Åqâ:HV”aD#ï«ñ‹ænª9þ Ð !ð$¼ HI©§±Þ%æ(in.ûYA‹þ6pcD½îÎâíhŸ€šW*<ÂRi"¢^Ööªrœ}&õMG âw¬€­ ÆÆ7<¶G©Ul†'D'yÎÈ÷1âX |•ʼn·Í)VÖõUÆQzõ©Ž“–0kûšE¹Ö-‡¦>Ôèì€y0=&^_y ¨òt„òæÜÁ 7Õî¯X…ïÜ"Iyç;Á ùS£]›h`˜ÕžaøßáÀõ ‡<º¬Š7I¬–FÙ±!âQeü%UÆEªŒ·0&”NÕª]P'¬,Ø=ØT¸ åÌ_¼ ù*‹gYÜdqwjÂ!ˆ ¿o7ü(o’X-µÂÉ•ÚÞsÿ:ƒ›ƒ’AŠÚ›6†ê#”}‘ T~ÙAì0ó›uµn­ ­ýú˜ šÕ{´éËšø>W^ÛÄÇ­êT+Zy&pÄÿæ\ôÔŠJ¤KÛL’v^µ ˜FiêÚ3+kú!É~¨Qå.3‹Øó-éUϲˆÚ×ݤ{¯8T[]$Þ ºÞÐASm;åcO:ÿ§Öå¢èÎvQØfa¦;CŒdP+ú±eQH öQXGá. ÷£Mh;„ÏŠ<¶ ‡Ñ¶Pb´…æYQ釮G“¶£³ÅŸŽJo’™iGνe~¨ÐòIêI¹ôï“}l ÈAL~Hù.ÿžC¯GVþeCicãÆÕÙ¥BUå nc¨iâtíFéŽH¢‹õ⎸X"%âÈÜE•=¿ÉèóÒWvà@ÿ þÞW~¯¾”1ðO¬|—½¾ªŠ‡,.³xŸÄzË(‰¿¼äÝi5$|Þ©»‚?û×2ý Ž>E - Èñ“ÿÈâñá;®ÚÆB‹_2ïŠmû/¸ßDº¾rÉ.-*ùe,ÔWºl°#ož ¨‘ôŸrš^Ÿxýt'O8ö „RŠ#°éçÎ$ àé—|—0sßÂi•z•±½E iœñä¸†š‡’æ Œã^ñýö/ªð·­‰ŸóM.F­¤êµÊg-Ï€¨ª?V!Z…p° ÒŒedâ—A»s<à]‡ýÊ7¹×¯71hô|85<åÄ,EJËgƒÚ«tõ9]û:·™Ÿ÷óSb®¾S0]–HøüQîãŒ'ü®!tlåŸ#oµ†ª_YN~8éXø4‰¿›\V‘ãPEŽ}×YŒ}U*ÃÜÛ?7áL„z}b‘5Ãw _A/ŠgÅñÇÉ»êû!Jµø™ µßÇΗèzÒ§ËçÏž‘U¹%ƒ°Mõ9ò*‹gYDÄqW€F‘2Ä&¶O³ 5¬<)–‡ÿÙÁp_t=–[ óYQLœO~…?ÿw‡Lendstream endobj 2311 0 obj 2101 endobj 2357 0 obj <> stream xœÅYKo7zÔ¯ØãnQ1|?zk—&ÐTí%) Y~6²äÈ2Úü’þݹKÎ슶’6HàƒÇÜáœùæ›!ý¡áL4<þ ¿W7³'o¤ÍåÝ,7¢y?û0Ã|Ðjž.@Q߬´ºY\ÌÄ0Ayøoœ’ÌÇ›ÙÛöY§™‘V„öª›æ½wí2IAÓÞ–Á}ÇÁ âN´çÝ\0k­òí®›Kå˜2²8‹Á¨VÌÛa~¼D±·eŒí m­£-صlçq¾aÂévÑ ±BO5ˆçkŸvsÅdðÚ¶×ѪãZÊvÓ¯e¹iÏpÙk\v3Ú—Tš9£ÛWe1bëmí:a˜•ÚSí:ÅŒUB¶ÓþÅÏí]ãaEØrŒÂ\Zš œi\³8ƒlay& ת½¨Šw(ž£¸/b¿ìzqEÍ\ø~™Eï'í|t½A-aSfðÈ0*%ÓZ´ÅÏp$؜ѭsì°YT0ã}T´Ìóñdg‹NJ,·nBÂÝÈmz«.ú=ú0„&ª~¬‚‹7ÁÉ‚6ÆÕ£T\N’«Þ¡ë¯ªÙ ¸ª) “c¾@â×C%¸¦Î$Ž_¡H ý]™ETϲ #¢4“–«˜³ƒ´Eó71 s€8*gŽso!…qÒƒ¸/‚LÝB˜C´B,i×à¾,¶F[K40¦ ´®Óh·é»Øi0âZ_€Í9á£ÐK_ÙyþEµGˆ šÂQJü ì= #ÂIîÚUñ%Š'(>Cñ7ß±ŠM `í¹ÈK¿k1ê(XТ8%eF“ ‡ñHsja@SÖÝЄžG/x¯h9™†ÀxàjBÛ!H"™EVx×á~˜ÐÃ$sé¤+¨X.iPRº¿¨Š/Q<©*¼Æ <œ0 (v‘˜ÈÉ-Œ"pËáð‚"›8ନ®H¢+”è{b ¨úÇø˜ ÿ°õi‹£€=ðM<ÆZö&ó¾Ê@d>Q ð™V É+4SÚʾºØÀ¬oæz€~«o:É,ô± *`pïl„¼`€h`ã{XÆ´'iu¡”틠׌C«ò{g,SÎjØhœàó:ÖëÃhzoÞQõ^ì cº/^Íß¿äÌ8¡¡eb3­PdÈA“°R:¨vÐR8)XE!ö6ºGséRÛÕK'É’ò6ò>¬êE°¡ï‹à»ÒTap ø`ØÀtŠUÿ—]¡ÿ_ÿ/‹ÿo`L[b>E´Óú ÎБz§Ý…¾ôÅ×(n« {ûÖA{è4«Q´ð‘ö?±Q†ãyOª>iˆï+ž`–zcy´Ì’BÿÏ'³u"<ÿ­Šrn7qðb¸Š€ë—xØz²ë`÷<æäåÈCŠ3£1zŠ;ý³Ú­®jMOPrÄçŠæY"PaµµÐgVØ l“fcM-£wEõ:HðÃäD½;]ŽÁŸêÙeµà­QÜV2ø¹£õº&ÒÖÛàLª=ŽŒµgÕAܼ‰ü5€–€ò¹„Ò7Œgá. ÅÀ. ×Y¸ÍÂþ`‘¬\WÞã\C¸Êíây¥`0VE*€N·Ý!B$~¤l\— °Åï€j4c H—oÐ ›Aa£lö…¥ºÇ:…ªä^{7> stream xœíYKE–8úWÌq1M¿Ç8€"$‚Å%B+Çö®—ìډ텄?’¿KuO?jÆílv"‡h©ôôÔTw}õÕÃoJXCý_üwy;ûö9W¬¹:ÌÂzÚW³73ÿCã®æé6 eGœæZ6óË‹/«µœXxp;{Ñ~×I¢¸f®Ýt½"ÖZÓ.‚äSíë¼xì((Ô°vÝõŒh­…m÷]Ï…!Bñ–•·¬JA¬Žï‡Å«"º”â¬]]7^XÍÛÞ¿¯3²w V4“ÓŠùóµO»^î¬Ôíµ×j¨ä¼ÝßÒTµ«òÙëòÙíÈ..$1J¶ÏòÇ®—E×¾cŠh.-¾¢}'ˆÒ‚ñö]°Ð0nŸÿÜÅ&‰š{/ô\+ØÙÀÙˆaÎ5ó8àylj–Æi¸VAœ°FÃý€"ea{†Àëà®%aBè`>·’P°ô·Ni"Œ–`“ßÁãmÝèõA½q,§†ˆ‡„¥¬™?›Í¿~Ñ>ñ7,ˆ¦ý{¸wÅtr¼ƒ1\SÑî2Dúa)/-‚)½sð7¥œ”Xø‡sNLÒãœh/;戅Ã]æ¯Tß=FÄ9ñ-—šÀI‘ïªèCH>D$ >|KSmàújàA¡O'\:rØ{3ú—œ(“㯧ÜÙ>A=âwP»ÍÏKÞáÀXØ–¬tp°p²±ð 8ÀIx4Pj9áÒQðÅ‹"Þqw߆C×UñU«ØSŽÈd˜§â¤RÅ!bHPN¨lz ïgÐi$åñ0AºžVS)ÀÉi7œžbІoZÞ "Ö„ØÉ{·E\–×U ë¼Zei€jœmz `çOðsfEf[XJgf€È.žÅì^ 1†nr-ãU/ŠxSÄ]uñˆûAýÃu «Û".‹¸¨jXg±ê{« Ó”'÷¿÷¼WxŸwž“€…×øÀ¹ËáPB%Žã|Å% ’œ·QIàpƒtÅûâŠzb½ÊHï ƒ…ûUBYb[žöÇkà);2«|öºã®0ÇŸ¿%QØ+ÝÄ©­ÂGoˆšê©w“Wëé*¹¦Ó…‚‡~õþdZj œš椙]ÁHÌ«‡¼õ:ä&gã½JWN1F´¢RDDñ¢ˆ7EÜU7$> stream xœÍXKs$5 ®â8¿¢ÝTµñC~Y–ÔÖR,S\(*•Ìä1$ÓÙÍ£€_ÂßE²=¶¦iÈnr`+‡(j[–¥ï“ä|è¤P¤Ÿò{³_}õN[Õ]Þ¯’¾SÝõêÃJ•?dYÕ½ZãBcCEtÚA·¾X©²Á+dè¼Ñ"à‡ýê—þ›„ÕNÅþj­!øþ4IQ)Û¿¯Ê‡A¢A#½êχQ çœ ýÝ0jã…±ºWm—@-\ÙŸ”—M̶¬Õªß4[7d ½ÖýHû­Púõ PãÌWZE÷ë_ £:pýެz Z÷S>ËIÛoÛ±»vìtä—6 ¼…þM=ŒÙ:k¶îe…Óxˆî#¬3J÷&½Òá×õ÷)]ºS^heSF£Œ0ºµJÅØ­·˜Œ µOŽdé$2ÁyºªAEûÛòÝ_ðØ´S zʶíš8µµ×Õó„§ÉWðº@@vôí …^Þˆh‚wýuÆ:Ô']t*›3ŽˆÁ2hnýfµþ²ÜYåﲉ'M¼iâíâ‚Ç&NYDû|Ûî H¼®b¹µSÜMBIlI7þ‹`†—¡ ˆxpÎaXñÄ´GZ ZXÄñi!–m‰I§y›‰aäE±wÉÏÒF k<…¡(Ïô~[t`ÓŒ6Ò.fy<\xDÞ'u¾÷O%åÀ9„tI+FQ Ì9b}!ÍÌdÕÞ×¥;¢‘‹¡¨( ¿ “tºF/a%˜‚ˆ$ž4ñ¦‰·‹ ˆ¾$|¾m×D¶àºŠÙG}”.zK>:BÆ¥ b3`U Ö¢E˜š0:°®*,)ç„ñ‡N$”ÃáSg„'W—‹4+¼Û¥KøH¦ü@Ésmûï¨ai‡cÄkZ€1AÐ/2Ýxf¶ð㙩ž,’5ÿó‰%9@CäEs+{h£ ¼ÃQ™8µr´ñ‹¹ÝzhIöñÿS Žf8¥ã#^Øòf‚vNió·ëÕøó7Ô¢ÂÄendstream endobj 2452 0 obj 1265 endobj 2495 0 obj <> stream xœÕXÉnGräWÌq&Û½/ÇÈ6Ž8D.F P%+æ"K2â|‰7U=½©¦¨$C{z©í½ªîg¢ãø—þ/Ö“'o¤Ýåí$Žw¢{?ù0éO³º“LTÆw+­îf‘(o÷S’yø°ž¼íŸšiEèß Sü÷®ŸG)aúë2x7pØPq'úå0ÌZ«|3L¥rLÙ‹ºŠÁ¨VÌÛ´>^VqÜË)úEÝk…{Ö²ŸâzÄÓýl0b…ÞŸiÚן SÅdðÚöW¸«ãZÊ~3že¹éÏë±WõØÍŽ^RiæŒî_–ÃÈ^gu¯›Af¥öÔE7ƒbÆ*!û?¢†NHÿëì‡.Ù Í”¶£0•ÖÀÌtgÜ×ÍÎ!?ÃñLXm-¬W,¨`Q=ΔwtÚF¯À™eô¶L½BmðiÈ;;®‚î<|áá4ëf/'³oßbP$“†kOâiWUÜ6'\EQîúu½n.»©â]Gµw #·ÁÔÑbÊr ©=³ ¼1°Y6U˜Zç!‰E‘Ç®²°ÊÂòÞºyÖûsÚËMu`Jr5*ölÌj,¬N>'Y ,×L(s3E‰ÄðÓÅxÈŠôٓ¿×$hFA³èTÀåë€r¸ÈA>‘²9±ˆÑ”ÅóB8·‰Z”¤ÜSYj‰$!™Ñ!:ßXnå›´¿ ŠRá€oÐéJpM íwµÌyú}µÃ}ÒeµÆ *y’ æMµˆ²ÙncÚ½¨«¶UƒÍœ]•Ýûާ/Éì¡8Øœ¹Í´¡&S—ƒ”L+Èõßq&œÊEr@tûœVÇ<—&@ÊbòDÒ7!ç Zª83*PóΪø[Ý•„pQhxT{¤q¬I,hc\ê@à Ê@c.ÉQ…ï ÔûÁé! ®¢«¸†™³RØ4Á^¨‚’`%jÇ‚ >Ãzфߦ%6á'@ÌàjÄa4k6VMí|N¬TÉ,БŒpÖ Ÿ×ï« Ä€q“'\¤jni¾KÝÍC@F‘d$Áôî^2ñPîÃV%"’°wÍ4>ÛŸ:Â8 .馻ØÊªN8sœ{Ku!s‰ÙïÒ²ØEæ&®FQ¶ÍÉJ:LÕ‹‡Mÿ´)"špÜÛþ 8Þƒ4Yð *6„>&~´àb¿ÊíWÄe[ó*®kq\>q>wx¹Ž\ï`-£jQŇªSªŽcôiè†øìW/-#5•êuQ“c̸§ñA‹•bÎê/› dÙºgR+·E"ù‹M0£wæ0p³üà« %”ô(äù¦Ñþz'5!5€ÊŽp÷šq¸[ü2Ëúu^ZÅUiÉòq{D3ϰÿ‹:…â(¥¿Æ Ú®3ý‹Ò…=K5ZØ6eγäîû•uä´örwU¬ç†ù‘48?f‚ðïÓéô’ GÒKýª„Û,ï;ÁÁþlû•ôï²kdk~W.ñg÷ª†Ó4l$@$‡v[í<÷¼’ å"B%÷ò´qãÇ-<·¤^%‹ÝŽÅA¨OŸ”’çEú¾záE1ýUÕì`9´Åyß'Eù¦й@ãlóì§Äì×õôA%íƒNRÞfYá¦>è¼=!UR HˆjgVc=?ÒG4føà¢5ÿª9—\‘Þ×w˜XÐÖ1 H{€ ˜²^ßUì¥ÑÄÍ¥ñ¥Ó¸½ò¯hà`/à’>â¾+M',ñ „è?Õ±ë:“,Bp!¤FÆB^€ЦÇ*ˆFjVz™"Ù¿[ìP m=ÀA¯.”R4>“]Vñ´Š«*n›–Uü4Š.c×Íe7U¼+b3ñ\ª¦)÷>c1£=^ƒE¤Ô€Ç¥|#Wúƒ­A4ÜÐûÅCí))K‰bUrÿ *!åi}üš|èMa—öÚ쯩¢ùüU>æ„‚õé?~8\Ý›U^¡Ü8©˜v_øyqïY^)ôÜM½Äç]3Ï—?ŸM~‚¿?s4endstream endobj 2496 0 obj 1570 endobj 2543 0 obj <> stream xœÝXÉnGräWÌq&Û½/ÇxAàÀ±c›ÈE0J”eÅ%Š ‰7U=½Ô­%œC ƒËÍžêZ^½ªîmÇ™è8þ¥O/gOÞI#ºóÝ,®w¢û<ÛÎDúO»º§ بŒï VZÝ->ÎDú@yøÌ׳£þÙ ™‘V„þÓ07Ì{ïúe”‚¦¿.‹·…Š;ÑŸ sÁ¬µÊ÷7Ã\*Ç”‘½¨_1XÕŠy›¾‹çUu#EZu­QX-û9~o˜pº_ V¬Ðû;@ÿú§Ã\1¼¶ýju\KÙoƳ,7ýª{QÝLì’J3gtÿªFtT]7ƒ0ÌJíiˆnÅŒUBö_¢…NHÿañKL—ì„fJ[‰Y˜Kk`g¶3î‚ë+HÀóA2«]°VÅ‚òÎö»(‹áÉDZ3¡tt}¢Ë| Àô[<Ûx8"ýìƒé¯êï›"޶© ;Û œh"ÂsÑ-^Í?aÚ$“†kÓÄã*®«xÕÜpE¸ëÿ®«×ÍÏnªx[ÄB+(­ür„sŒÝ_Ü3–fŒ´\Ñ4 Ðî^A(ª+þÑv-™Ñ!fÂXnErR¥‚¢ $Çþ€P‚kzê µZæ¼€è•S—U×Íà˜çÐw>1Eqf”À¥Å“jÊMO«ÒÛTT:azy®]—i•|>ªwA4aº7¬¾&$Aø`Cc™PØt;Q—¼jŽ1ý4R_bâ‚„Vù(±¬cpîC²URM¤0È(Ó"WµòhÁ’Ò9àŒÆUxn §'ÝÄã Gl'Ÿ–ð‹"ý\£ð²¸þºZv,¹‚ 3é}RŒoZ”åÂæÝψÛoêé¿‚IÚ¤ ¼'-²ÁM{0Y=¡›‘%Làž¦¨VKÍõò¡Žv÷€ˆjUH§\7÷’ûÓçzÏNì6‚uLB%Ž#JLÁˆbKãL.ÆBÐ\º±¾¢tÕ+oÑ­"nÓï û „Ý ¸McwÍbªv ¯Rü¬ÍŽ9´yRvTþX¦Ø¿ÄL8ƒ6`ˆ€ª—”ëTñV&ΈâqwUÜVq]Å‹*Ž< Aa+›À’–„¾bãŸüäŽKˆ‚Ìíò&{É*¹ŠLU˜ ÃI•\kNZMŽÐCílÍÙíd¿ìµkJ:dÇÔØjúßÊtB€L²Xu¾gu,:¢¿ŽWo‰¯É {º@§S­U-°ªaÛ,µ6ƒÆØ#îßo0÷¿™i¬•ñbãÈņ0tî FŽq‹¯kz L|5 A ¶Þ‚{žƒTù =™+*a *ïâ˃ñÓó¹¹áü`j®WX¼Ê%¢ÓÊ4Ù­Š&Œtðw «­í¿”ù‰¼…Œó d[Ñ—Áú˜XÞ w™˜šƒ‹;=µìª¸mÎ2™¸#“ÈÁEd¼ qœ‰ ¤ÆÙ)ái7À½/¼Û,¬³p‘…Û,œeá8 «, 8©˜ŽcZ»ÊÂå°ÌÂf_S3nÞsd2ú¨:¾¬âMÏ«¸«â‡"¦C¦Oùø†l¡ß!Òövå‹Ù[øû>¬ eendstream endobj 2544 0 obj 1634 endobj 2591 0 obj <> stream xœÕZKo¹ö¨_1È©'Øfšoò¸›l€>dArðƒ‘f$ –F‘v×ÿ>E6E6{F2äv¹‡]U¬ÇǪb?,Bƒûþ½¸=ûË{&éâêpæŸ/èâóÙà ÿªÅ+XÈ¥YXbSb±º<£án$ÌBsF üp{ö¡ûëRɵݧe/‰1FwOYJewŸ>-`ÈM»Ý²§D)ÅM÷¸ìׄKÖÑü§‚£ÂûþáU&G^R2Ú]d^7Žhͺ޽/ Õ¢[-)> stream xœÍ[Yo7~ׯä©gáé4oò)pv³@F²q´û‚.KZ®‘[ÿ~‹ì&Y$«gF† º‡gÕW×Gú~1ôl1ø?ÓÿO¯¾Ë[\<„ï ¶øxpÀ¦¿ S¯Å‡ÐQ(»p½Ó\ËÅá‡6 Võƒ]Á{ ?\üÑý}){Å5sÝår¥zk­éŽCË1¦º»ôñq9À„b0¬;_®X¯µ¶Û,W\˜^(Þ±<ª‡¯RôVOãÃÇ‹ÜçRгî4ϵösÁ®y·òãUÏŒì— ¾h&랊ùóu?.W¢çÎJÝ]ùYÍ 9ïnƵô º³¼ìU^ö¦Ø²7JvoÒbh®“<×fÉT¯¹´XD›¥è•ŒwÏa‡†qûþð_^]ša-¬¸VÐsgë¥qfqx €³ÊžëAÀBÌöÌJÙ=RwNt~våàãsT…ŸœÁ¼Ì¹ÅŠÙqš·AÒé¨ÅtwŸ´‡fD¿çÉ'‰Úp4.y¯¤9'!Ùµ£´ìnó&íi„žÍxJ¦Òúz"tç¯tß³IMÜE$ø¯·y†k?ÌqPn¢yoÒn&`ZRà…)Äá<…™ßlÚáFŠï«Ü`gÎxCšÈ:oìyì! …C\ÁïvÔŒåŠJöBB¿~9Ñ”`LòÎÀl„Ró5ƒu’[PèX°¡Ðò&Ãè1Aø(ÿN Ôƒ6qŒÀB z¡…¤AzTutªEs˜ü)­d÷˜¤? D8¹°ý Q^ ¦Óôÿ ’¸[„­òþajÅÆClÜÇÆ:6®bã16ΧƸ¨´/*-ìnààœÃš_4qÞ×YlœkŽuÞs†5Ä€Å5¯R=8ŽÁx³‰Í»Ü¼ÍÍMn>ææÑ®aä°‹f^-T0¢vعºïSn®©…IE0.ÀµD™\FAÇÆM#ã5­àJØ!::`IÐt˜ÿ°5HBÝÔÜäæmn~ÊÍ“Ü|®²eØûÔ ‘6"lîÍÁáßæ¶ò›÷¹¹.&jdŽ„#`=6BÜ4&uÞ z#£Qmãºï M¯ì0îj•>¯SRç¹yœ›5gåF.‘\nšÃjßÊîäe¸ƒì‹ÏÄ¢@ŒÞɫܼ©^!ކ„ך…Ä Åey¨¸ðJ£CíÒ2­Ú; 瓃–OÉaå>æ- !ça»Ì¸ãq —$³ëùüwóÛØòPÏC*A›ylÉ1¶ì£„¢gR çµÈf½7 } `ö-¥°Å¬Þßåܹþ Rxp¾µv„>¤õäÑŸ·ÛLåg’º7ͱ®©l´$©|lö¼M òOŸRÏú]¾$H Üí@|šßÍü¸V5¸õªÏœò¥? }^£z3–¨»ã ²‚'ÒïJ=Jý'è?5ø^7Jn€N &Mx±CÿXµþ‡1×ßÈnwÈçÆ;Ã5Š‚’>h]l¿9˜÷ sé²i ó©0)3(Cçüí¥©3:â))ETå 7{EÉ‹<¸r=ÓßôàÆB¼'RÐ/w ác>ù¾iË5 Ï/òE§„Ö}^7–¶j¾Pql¥¡œe <ëÝ®šŸæ“Î=WݦV>ôsµHË2eL‹¤T2AüçD§ ë.“(% 3uõ å¦·Fbêè² ý";•G‘4Kæ“FöDr§3û5Cõyt(ÙÃɺWÌÏijeæ'Q2?¨1Ä.ÿžfúm¹z3 V³î_Tö̸­¦=ÃÐï ¤æøÄ|…me¢íÕ{©{c]Å)†¯Î¡Yïóª ƒ:QQ5—îçÓ\I…¡Zì$Py\}®ƒÖäTž€ïT…"VbœcÅÍ“&Öƒ²uHÎÈøSW¿Æ3SíÑYï×.¼[$cœŽ1§˜WH€ê›¡‹@^ZÉ„ÒyäO¼!¥8Dü6İG)É+£ñ•^ë-³Ý/Ñ·ON“ØHßh‰‘îÂu¯`¹ÑèÂÛ¡O¯<ƒ Âú´„ø"„h}ZgåˆÙ>Æ2[MWð¥s¢ž"¢QFƒ(¾Ïä×ÓíÖã<.Ö\„cƳYF\Gø³eRÝ'æÓeWãc£ ðƒ´C{HwEóPó*†ãi¬Õ[%ظz5W3,¥2°QŽüJB/êts/–sËdJªL±LÃR—V {¹DÃqÿœM(†'ÅwÃÎ+ê–eþBqBšêv¼ÝSÚS³Éòó•ÆIž ïõˆr ·ãÍ1ä…$Y—_·”;B>èÕ(*ãŠ0sYɧr9RçŽÑÕÈÝÒE3e8S^…¾&>Ê`Ç£BTº×Æå‚ÛslÞçñm"0Ý^G#õw·ÎöV­¹~Bïå' -*Ìú‰iTÈ÷Aá0¥ùÕiTuŒf¾ Bd1U¥ó7-1²{G`Êêj4Ì—ÆÊè¾òxZc•õCº£ÔT8Æ”ƒó±Q]´g!¦”$ƒ²ŒçydšãQå­<Îu²"I/öí†Ð£¯À„s5_˜Øßç®û¤Ã!ÓùFÞn•;de£Ÿ‘ž§©ÿ2w×gww8¾Jac,^6L^ÓåÀÿÈd¥DÈ¡NN@Œv³“ƒðÄS¹xF™Li‡AÕe…+Ç›ÜVƒL©Fat¾v„Ò¯eh«;%÷Xd¥ée F½ ¤‘2†ä©mSc¿‰{¼ô™âAp“ìK¯‹`ªíL;_0§R„­eß~uÏqš¿"Û¿[jHY”i½b8«§Þ}¤´q&¤·.¢ª˜_PÑeÉs®Nše¤Íiç;žü~ˆ.sË::æÊjj,üfÊ{z7¥ï b¹J¥·•™c'(¹×<;£ðFPzZ†H®lo… |…oÄ‹|œ\‘ƒÖæê_§Í¼Iò‹ƒI˜"‰¢ûnJ§ ŠJ|&y–¸_CyAý’--ü´  âÄ ‚$‘ÂÊ·4»nn0¯²!¿¢W·T_²b! g¥Ì¯sÆ÷˜)¼,XÚ]dW–ŽãWúUbJâ%=( s¶ëcátô‹îIJÃEë‰ô'”e#Jæ(H!;þ°„âØTo§ŸDv룻ïü J°Þ½«Ã`èûÝxH)\÷®Ë¾zW2þn™ûn½­1ÓØ•K$SÎIàl¼ªÈuؾ÷x3D2d!ôÅÖÅv³1yR]üÍ‚ G9ýC?Ó„aFâ§»yV©ëŒÔ?SFAóŒÃ%—â-õW2OE×F£AƒŒÌuSi¾Òù)ñv7GÚ†K ñ]ð^Û­ñåOÛ’ÌÑÇŒÕWx¥&û%žÔûÃH½cÙëü ½á}¹lbW<jˆ2<¯Í»¾·Þï¹aeÞà$ÇB;=^~jø˜E)tö ú=»‚ŸÆªPC¡öv©}¹â Å‘1tbA³$û(朙]JØ“æ_eC"³p/ÍE¤Ì—Šv&MAF~…§–?m|°/g²ÿÙ»µè¾î¿YCÞ3¾Õ¾ §A™ç6Õª1åŽtý +,‰^cçŽv—çEàj»À›…½!pÊ7VuÁå2ý‹F9ÿ¯LHwÃø˜È«ø`áŸK&`ÇJwä]ÜyxÃo!~&ëäIП;23‰g1«„m­ÝÂnƒ±s«\4vOÆ.aL2w/ðÝáÒöFhðä¿ú¾°ÅCù|ÉCÊf žc›¹¶5íX½ò"ëCzFYô '´ÇÛZÑþ_ð}†é Lþú¿ Y¨ð×å½|”íÐg$òßýS` 3X¤ñ«F‹ü!/÷*Œøêmö‡ Û)ù !s‚‚âMWõ/á `@\ô«òAŒ«Ê,Z›š~ôO‡¿ÁŸÿBj»üendstream endobj 2645 0 obj 3000 endobj 2708 0 obj <> stream xœÍ[Y·~ß_1òÐx:Í›|”H`؉²€lCØKÒbÙK’ÿ{Šl²«Ø¬žÙ]IA ÓœæU¬úê«*îíjèÅjˆÿòO®þòZ±zwúWbuqp{ òÿ ù«Õ·‡ð¡2~ú`¥Õ«Ã·"PÞôƒ_9%{?\üÒ}·Ö½‘V„îýzczï½ëŽR+aº›©óa=À„jp¢;[oDo­U¾»[o¤r½2²8ª‡^­zoóøÔù›ã\ÆHÑà\—q.صì6q¼é…ÓÝáZ@zþ¥ñ|Ý·ëêeðÚvçqV7h)»ëq-;˜î—=Çe¯«}I¥{gt÷ô™ëçº[ Ó[©=ÑÝZõÆ*!»Ç´C'¤ÿíðñº¬ ·°‘ÖÀ—+8[¯]p«ÃS¸8«î¥T9 6Š5wžaç6‰ñƒqQíÝÊà §¸¨ ½Õƒ„ëO«Á¹e/Í ÓÌ¥ù ›o°ù€Í#l§¦ƒK×ÐLÆ=ôNJ¬6Ây¯PõV9zrÄQì>ëÐÓJ-{£¶½¶wŽŠŸÝ[±S°*¨²jÔ¬V°±÷4«ˆÎŠ1šÁu^Õ‡î>éÀ`]w‹ŠA¶MFµv·-ÆÀ@g@ã“F+c²I¦ÉÊÁ­Îº› µlñ*,HPD:í}1ÏI{b/Q~r2²±Çi´"Ž2«’Qòù÷·ÙfÁ&Op©-+ŽØKöçº_G-’&ÁTÖÜo⢢÷Âï8JºAo‘!`Õ 5ߨ& žâÙÖQ…vå[‘”²wÂuk Ç/T =€¬ŸAõ”Ìûv!ÐI‰î'üxȰŠö—mçõ£P6Y*!a¯`ØI87¨ö¨áÛ´/Zÿ&g<­l¥H”ôF¥ìƒ6Æ¥•´ðKŽ~5ðš&©Í4÷òP%zeªvÁOj>~D¯HÍÁ1aÐÐ[·2ɘï½)—`ò;+¶t_&LC |~öâZ”#£nY`#Ô‘0l¨z‰þO6sYª@2õn®j›Œ®`Ø«ñÙ=«Š ¼§‘ö*mÑ¡¡Z˜½}6kXà+ Q‹'Èr;HGÅ) ùR,{1½ô/7ÿ´)gPk;ÁÏG–êœrPRz#«‰58€²jX–q½ðv?œ’çܑŰQ®5†°LçQÖ–â˨–¢qþIjK°ô–cXˆD¾56ªXyôÌFu$RCï†ÁÛÊçu)ÔÎsÜ(ðÝ#ªÃ2¹ßmåßG¢$S±íDÁù¼ËîdìûåQp‰Èÿýâ Šåª i |È—$PÁ]“cÏZ ` ^kïöF¥¢ìõ>‰uIÓ_‹ÆÕðÖtß<)˜ÖàcW;Æ•mìúˆÍç›Q²¾ÆŒ–ã\ù´°mœû¥Œ‰À:ù½QêxQœN›¯¦|Mˆ¸¬|™&¼Lù¶÷ Dç‘eɬwA>ÄÍ*.ðyÿÙJ' ˜û*ÈýÙÊö,]§T{rPóë$hq1%Üc#®ð¸¡Çx˜òxEêw¬K½bï˜|K¼6Iå_°Jð¸çbM?ðY³\0—xA|€Ýw'ÛdXºˆâ™¿´_Íù‰í 0æØCˆe…=åS²@´IéúÑ‹bD«‚À'GiÏHbüLÍR6úæè3Æ…%–#3¶ivŒûž–fálEáë,9“¤Ú5ûíÙTÊÛ?+ÕN@ §]÷·µP¼(Á_V޼†1óeJØÅfœ[ßÅgIæ%@é*;V ·\C ]18 ÿ\¤}[/)ã) ®ûOŒ#ºà4¹©]]%ùÓÁ‰¾DR>Ul_ÍÃãäο#½DذËJºp“ ‰óÞ¦#xÀ̘Áh¨¥ó¤¥ À?i/e”“³h)Œ#¹â9qä"% ×Ê;:Ò|³÷E6×ô _Çó¸ë¦à6 a'èC¶Øü€MBEö±ÐÎ9_ó:,ÅnSÕwåÓ?Õ•š½ÅÙrbD;òûPÞZúû5‹à¿vˆb¿®#4‰~H#æ·`OãdÙópy¬‰Tò1ü {] 9yò-6?`ó›{ÂkzI¢²Ÿí¨ ¦ÆÏèõ ÀÒuÙ‰øŒ î˜oÐ+îË|î‘]uÉ)z¯hf]iå“ϳ¢vªÄSJ 7ñÕKµhÙ÷¬ÓÝüÝá‘ÿ–(Y‚xX2 «Eä÷tVønå|×bÝçÊh•ƒÛˆôîyé{žÞ÷Ž>lÜ—–¦SXsÐ:Я:À»“OœÂÄR4Àø‚àëò̦0V=<‘•,Ú¬†aT„Ò1—˜XÑàfì­Ø'™a—JÕE†F£ø„*¯QõT䱯³R«,/. #ñ??WÁ°ÌkáÖåÏŸ‰ô9ªü*X¯k ÏUâôJ΀~…°¨a'a!æÞÖØ¢ ÈUŒÕ:Þã?eºx-~°“;N¤†cEG%1”‚«b”Hô2 ˆY˰JG|DãacÀ&Ç•+kµÛã[0õ±~ æ‚ÞŸíF¿À߉ŽÜdôQK^'XªÂ>µ&À8ŒùKŠ%‹/&¢BÎhDÕÑl‘à×<%X¿¹8Düžµ ¢IÒHÔ`gr¨«âüò’?Ñ~áA'™Ï)ìLjØýüò絉„TÁÞcˆ)å—|W š¤BvqAfƒ .ë ¿Êqþ ƒÐù]tÙu®Œð¦²Á^ž`6ÆX^ ¥;³·Pä^z­5¦rL¬Ÿd³#?ÏÇ,Z2êf©«k[/4U|Y5®ór#œ þm½•·Ô¸kã_x³%¬:.<Ä„M#lg‘NøwSŠÊ¿yÚn':;ÌñÙcõ‚Lòû„+“D2¡Í›9ãØ]M0ÎõÎ$ï[†aó›çìÍSòÔ<Ãf³ù WÍ0ˆøò ‰ð‹ñhêIc•wJ[ÿáiD½ø°…\ò÷šv”ß_±—vÕ…TB-¬«häi×>(ä³­¿³n‘¬x5æ<\ œ‹àÙ‡fUÍíK>'°Ø¤öd8Õæihd+ÛL<{`‘ë û}÷ì 7³0o&ÆBÞæûr¶£Ò¸nŽ}‰¢ÙØ ¹wH”•ÍFxЬU¬øÚéÑØ/³TËl£ÃÑg®&H2ô·j‘X”õã6t¡²¸ ZÜ&elRø¼Ù½e°Gš.½oTꦑö]Ó3)âvþ ¯v*=¬Ï[nãÌhzK’§G&Ž›øûK®ÉŸÞmÅÓOzô¡Ñ£ËÆÄî›ÓO‚9oóÝ.yUÝÁLaá)ò 5už‘曹‰/ç©>‘úûG–6]î6fo+wרΧ¹€yƒ ½äÖüE¨ .ý‘…¸`zÔ Ñw…©‡xð/ø÷_®ò]™endstream endobj 2709 0 obj 3168 endobj 2775 0 obj <> stream xœÍZÛn7öQ_1ðSÏ"Ãå½ÉÇ$»ðƉ#`Ć K²,x4#$;úû-v7É"Y=#9N°0`Ó=¼«Nºt\p&<ü™þ=»>úÇ+iÄâòöhx¾‹GÄô>ÍZ|w •q ϼ•V/Žß‰ir†q·è•d~¸>ú­û~©™‘Vøîýre˜s®ïN‡‘Ât7éáݒÆŠ÷¢»X®³Ö*×í–+©z¦ŒìD^Åà©VÌÙiýðð2ǽŒ‘¢;Ë{­Ã^ µìVa½a¢×ÝñRÀ+t=Óˆp¿î»åJ1é¶ÝUصçZÊn3že¹éÎó±WùØM!—TšõFw/Òah¯·y¯ÝRf¥vXE»¥bÆ*!»‡AÂ^H÷æøßÁ\V`+¬¤50s±2AaÞ-ŽÏÁÿhÏmØh¥™´\aAGUiémP»4šYõ7YÍ{5ü®%3Ú£­&[a»Û ¨ñZw÷ɪë¼=Úô6ì䙿¢ÛæýßMV±íùƒ"Ðù6“$Â(ØÊÂbë?¥Ÿ¯2ªÎÓC„¯ôpÔ¨výÂÁøiÀµ‚y =h2HÍ@nÞwóp†¤Q„c6n€ ¾ w±¬w>˜zP»´Ýß>”àzÒ[ô†ð;(¶t¡x…Mzˆ ¸Îœn«¼ ®„á îb|Ôq1Jv<¢\÷üª±˜òÉO‚Å‘ñ®ƒ¼ãO#€l”2LÝä© ¦”’õð”žû0)Ç÷“sLF¬ßcxsàEù–Ãþ°Üq;£ñ‹¥àL¹Þw¿§‘l)pÝ¡{x¬ÆC-· …#̵¤T“(p•sÊ¢þ§ùÖô]²'l³0YB´è’º’*/ ô ÈwÂu¿.h¤1ÃY9÷ÑJß8ï’G÷¥O`Ξ§/G  L ±éÜï—+ÎzÎÐÓËŒšŸ2=ÿä°µèžç§¯–R­•«þ.h™–¦û%Qòñ©húŸè¬%öýq9¬õƒ~˜×Æôqµ6>ü (õ@ÆZ.Ç[<Ï~†Äyγ4h@´H×ß.=œf{¼bÓ ÄE¼¿gßJ¿“dd5SÂû¨Ó§{rÀ É7߀ˆÂÃ… œ¾¯)wZq³ß‘IXôž%LÜ$ºD±ÿ¤ÜsòS‚W 7 Z3ž;L3Ÿ vYþf]íHYôûizø6 C²×M ËÅ-ÌÐÐ͘Xð@Rû#Nu±(b“Ôá§±l–!EC€8@gv&oÚ–ˆ;œ‘›!Ê}È9š®lsÒÈ(@ôŸ4<ª¿KëÖhió*2>Œì`äH )OCq· ›ÉÙ†ßÛà¦~YÛ†Ljb‰-¹juŠä}?¢bb!´íù¤ZcqØ Eè'i†¬çÉ#fHt@Eç"Îj›³Û¦R Æ­jÉ¢<âÇ6Ñy€¿Î”ÇfŠBr¡+$€ö°~ˆÄ:À4º÷e8¼ÿ’¸á7ª›‹ÃÿÝ&G⟤^„³4”j_ v–Š"œg”:,•T—ˆ4$®HtäF7ÍQyäs›ì'kªgA £8ˆ1ÍЦ—£S:-&U{'C¦“<õÙh,Ý›¯ÎǼ¼2VU(m«æ"o'³åp-Å™’.»hí_Õ Ue”e†ÕTkžtúâèøï¡Baf¸®‡›<<ÏÃu^¤!_aR¨•èQýô<ùÑU.xKï›Jë?Ló“´˜äË ƒAžU ¹(G{¤¢®z=ãáfEÙ[éfHSZíîȧw¹ZÞRsIEsæà*U1EÈLV¨iA65P±yIz`L†R ê}¥ª2ç©eH"LßP1QM3‘\jU§Ü’Nó[ÆYÁábwË Њ îÉc料™êËBoìLÌÀzýš ûÏÆKjå»×®©)È%ÿëež[UWö®Æ<2ÿ=éNe2Ö‰`*°ùäˆ2îIÊ@Ó<¼%yÈÉJ—ûÝÔ¤5—êÿÑ-:B+{qêûݢשf€™w¥‘ºÎHý4æµ¼À7Š*÷TXŠ}em¿’Û„T; йvzJgIèØè—†Ñw\)£’ÌºÌæDkˆÎÛË =qÌØ—f&=žíã‡ËhÙqHØÖ¹ ^s2©UÓR1p“ÙHw“!{°ê9!›œÈ?J(Ƹ™½j€—€ð„£øZ1¢¢û}~K2̦&yRP6(¦HIrIJ˜Þq¸)DLù$RÝKôxS»KØí‡ÜÍúzïÊY‹§ÓmÃÇjëb †Õ Ó¸ÙÐȧk¼‡ýé ‡t¸T2J=†á}nò0³4©dé™DiQñâaƒ±E1Œ^rоþºf™PŒS‰:¬ª#è®0Dêc¯ ©Š.òÔ 1C/WKiÀr—‡F™P¹†±Úþf€Õe›‚(Áð\0:çBËr}Š~Guä]¦¥½U`xe—÷Ê­`²q¹¤'-Þ»ìÒ›ä6§øUIŒí'˜›" ¡™uWeücWq*GÙ”×à2ÜúÞL OàÕð÷ÔX5ÏAÁÓà$nãàc¬ãà*îâàb`?M‡j7ÖÌ)0}ÁÆY®ó8x[œ9^4qƒ.K›]vþ‹<<ÍÃó<<¡ˆÏ}›‡·ä¾7¿¬„ÐË8!À±wð[æüYV¡Pñ¹ •~h²(ãjmn+¯çõ›TZ+šÀFZ~Ó¬Ú5OQW<Ј>[ó$¯K?nã³ÏûL-„…ûÇÛ¿©tà oÊA÷ànŸîß‘ ûž†Am†²¯l†wö(ý}£¬Mƒ÷f9© #Ùœ.RÊx [$%L\6ª¸›YôÇÏ]ÛñQªÇ`àŒtEÔ ¡›^é!½lšËn.¿Ç ‡¨näÄÔÇ(„.]ï(šzŒSüákI]^*¼²øRÀM›ö†tzÄûgä²RŽ¤Ò±5IŸ@t»_}ÒŽ9Dœ¤¾ëGùCCÒíä6ßÖûö°ý<Ìô‚3¨Ò"µÊrö^;›*"ÿ_¢…=ÎælfŸCÑCBäú+háIÀù“µp ÈêÈ«?ì÷™Šr’¹w͵®­ì´$­|hö°OPà@KÁò©q˜¤ª'%„_–­më9sÆ×ÊÏÅàÞ°~|™rØþOèÂ>Æþ ú÷ ¾×‘ ¨i²é9ûc´©ØP=ȶôk—ƒ‘á ÄO$Õß>V*÷æ:Wx»:ŸkÓ™¼Ÿ%ÁM¬¡ᇎîtî:ë Ñì¥/òâÆ3aÿÔ‹÷n|EñÄìõý!%|È7Sݱî9Ї@oRøz•ZŽe7˜9|{ú¨m‹¿*Îý,ªS‹º”õ7d¡ñQ}^js‡¡Cé6Yõ9ih2©þà÷¹ä Ù¯~‰â¾æ§¥h:,¿][“ÔŸ—U_úkŠ–ÅÊy”¶˜,+/¾øáøègøó?|ï:.endstream endobj 2776 0 obj 2657 endobj 2838 0 obj <> stream xœÍ[[oݸúè_q°OÊwòi‘ÝnÁn›¸íCSŽ'ßb'5ŠýïR¼ ¥Ñѱ“A–Ë#Qäð›o¾Ò×›ñÍþ¥ÿ8øãs¡ùæíǃؿᛳƒëžþgHOm~:„¥vϼFmOxzA:Í·±R0?|8øw÷s¯˜†ûî]¿ÕÌ9g»£ØòœëîªtÞö (Ë»7ý–3cŒtÝM¿Ò2©EÇë[ z•dΤ÷cçÛÚÇÒZðuÆ‚Y‹nÞ׌[Õöz WÓ'5ëë~ê·’ ï”éÞ‡Qí „è.Æo™Aw'õ³ïëg/šy ©˜Õª{V>†Æz]Ǻé¹fF(‡MtÓK¦ä¢»3´\¸ÿþ5l—áx¶ÂhxrkcÊz»9< €µ*&Ì ƒ-Së²çމÁÚîs¿˜ñ`x=Ž©œÝ8ÌÆœqî=ìnì#¬… =( +(Í‹Ú|[›çµù¦6_ŦòCØñÒ{T›¯§ÏÆfú0·> ¦`Æa÷ó`GµyCöÞÖæ›Ú<©ÍWä—µù¹4iós&6[îFK=­†öÑŽ9æ0¦¹ó°ÔySGž'¹OXRzŸ—â£{Vú]z™`Má:˜9`m0ûàvÜüúM} õÎ8ôžT8¯ÐÞ‚^ ^μÒ:Ú{ËÁÖŠ[½bSxÿ!:—w›¶GÂÜÀdlŸ’ØÞ…âØ|7EqÄ r‰“•ÁH0q&a­O–¹âË4¨.Çýñ`²«ÚD†¼Hö~4’äCÞ %¼‰sÑ@Ó¾`ö¢ D; -´}5·ÓíÍËò:šIíá‚„2 `#õeîíî꣩2HÉ—öÃCÒ0=í‡{oÒJ0íŠ|и¬$…æ®ö~ãz±zê0$’3Ç]÷'„"¾ÓÞ2kÃû§wägo“–‘;Z€…òLéÿFЀõò%~­<ûøH%}÷²«PGf@Æ©ø²¯Ïî"èИÀ!í0ZTm.ii‘}QìI±¨9W@N²&l–‚¿RƒÂþ~Ü¡¤‚³ ô3‚ün÷õ|”šÊ£QiÄžWÄ~åçÐà)ƒ»2rå¬ùAˆ÷–ù©óØF®°›d :{… )6Ñe\-ä-ôÏû€#™’q•Õ‰8ŠÂÐb~Q¸fL–„^ÐY‹9VXŒâ™%C†1Ž0f(Èp÷=€L ŧÎ/4¬dˆwMy>ò,Ó(õ ³…ÊCqL¼’@twD×a>d¹—ûKYö¯è÷J¿Œ)¥x÷¼7AC (S 1,2ÕœŠƒNh1# Å´³Õ'ÑÎ?©ŽT‡Ü„ÆËLŽM] ±í>¯±WçGéøŠVsEQÔ\à‡Õæ4C)šíèi! «ßBN‡ŒŒŠ ´¼l„dôoð .vú÷NI–µkkcÕ hOR?ÇVLo0¹£…]Õq¼ßmðÙ‡ƒ#ŠCó¸’Ì»š JMr[ ÛÚ3½@7<¤GÐ4A´ïŸ{.aƺÉ]nrv³á“à½ÝëÏȳ’¡>W¤< ¶“ ͤ®XÍÌÛÌ6:»pÚgg—Z'gWðNqw“_èù…µÃÞ1+ 0ùoáY˜â€¡ü¦Qº¹&!YËžÎ|ŵpѨ?´Ï¨®•Cca{´ ¡á»OF½kA‘<*à¥)¤døúŸ°³0Øë)Zï³jÛ ndòaˆ)ð",3z¤ _ÍùcýÜ“0¢7øì¶IÇ™  =ÓC’ä50Ê¯× 8s¢‡^Z{f)ŒQ üLªá]5¸)÷/Yl=øñ ySZ2#íB,{½èg‰‘I)‹ÞJª×ð†Ý)eW£G•½¯ÉˆÞ¢k Â4¼8Æû Ñwsr6ê!~–UŸ6Ø»@D+C»/_¸¢¼/ $LVj¾Bbœ¤S¹Ojм¼”¸ï"aBÐÝ(¨¡Ø‚M‹®Ü×bÐYo`Ùã†Æ(;7jaÜR¨ÎãA‘>–~p¸p´àÍ$,§ï—èæÔ$º]51­TòüBšÿ©þ0‡§3ÖÖMSï>9üêÀè§ÉÀC­l‡D'¥À´¢9áËÙzð.iײœåL,rØðàÞäT×’˜,’!Ä£²õ&ˆ8W%hjE½¹ò5¸oE|kÅävÉnÇ#©œ ÈÇrø‹fÂ=Þý³*§Yë²ÐÏ'2Q;¡¨$÷-j°@eÍkÁXÚFºJ§èûYº@qØh×–ÃŽI¥sQY9Ö%æ—–|ü£Õ–hé”RX•;çEœÉaUÑÓ‰°j7“æãcÇé¤÷c8Ÿ§¹x‚“䎒*r–ÓÆ¼ËÐ_­áF"4Re"lóäúÎã)né´ Á£=¸+Ÿk¸ý_½b RMææ0®¼%ÆZ,œ¢ˆJ„YäÖˇüA*¬’ΗÒr{–Wç'b)÷΂œ›ì>µ«ÓC!®~þ¦íZ^ŠÂÖ} PHAÒ%”ÕêóR¸i݆«(‰ÖÛÀ‰3ÔxD¢ ´zd!¿œä Ïsu/n NØ_”«³Œ_ÂbKÆïCB_ÞzºS\B3\”‘¶  t+EÃgµói/5Yót¹fòNkâáhˆÈÃÚ;T‰šž@ÖúGËÍ„ÊCN€|¶Žš‹õº­N(=p¤]J%È ],C ]ÔJ¬ìÄy·Ñ/Ò((ÎÊ~Ûºé×Ô·͘G„麸 R€Êö‘„þ@Ö¶dâ_³ý«µ×Gçd䙩Ò5Vo-Y# •2–â%_6A>Õ÷èË5dQ;8]|Ù}« æýøT8§åßA¶O©ƒçJŽN,Г([©³FËž0u¨1.E­Õé<ÊJó ú´lB lѹfâuá¶Lñ¾ð :5£™'°÷µùp7šžJÕqéd×QÍÍ<ÙýZÎD_š:l…iýÍÀ7Ë—Á—dÂãÀ·0½ÇÝw˜Ÿ2ÌÜzåËñ:ØRþƒŽs¦¾ s1ØD {ÜÚrÓ½DTqVJnU`WR¡IC9ðP*yÄùõ{r+é³n²Q1ÿŒDÀýÊ®j6¤ºÙmìÚÍAú€NÜwWÚ„_Úƒ‘¿vöêϓ嚶§ˆqÄy½æ{ûÕØÇeØöêe[¢"2fTQ›_.N¡$Ÿæí,žå?7v°Êæ#fÉéÍJ×0){}…“çæüOØÆ…%Ø-\º欕¯DŸÅy'°ÒÉÆõ¶û_ȵ`5©©lû“ \8ÂKàžpÒjDsD[ÃøÏ¨÷÷@rX?<«‚„q¯ËIúÝTŒŽš;ç2÷½æ’'ð{^9}%[[T(žêOÞ\”h[釚¯Öxp-£ù4^Ÿhóø•ËV°ø²Õq èv0ºf‰$ÈšjtNuêX·P~)g+ÔtUv^>ø­=ÖiU[-D”u`ðéŒÁ¿_ ŽïBÄû‚³!ŒPׂ9ƒ¥ÈCÕ¯Š˜¤s÷A1ÕyúW&wµyQ›+iµðL ¬d«ëñ¢°jÏœPÌ8£–Ù^¬nb—+ž+¶k6"EçšË!5”6ñwüãÞU)èšðggÍGóœ¹ß‘AwwÒoÔ!ÒÏ"€ÑwÏÑkõ¨ˆ¾1uK^ÊšO!úÔ±[•¤vò÷{!£—Vìh ZºŽYÿô.¼þËáÁßáßÿ›È×Gendstream endobj 2839 0 obj 2974 endobj 2895 0 obj <> stream xœÍ[KoGrÔ¯ r.ÂÙéçLÝ\¾lV@±aèi ¢HY”¬Õ¿ßêwuw I)Î"tš=ý¨úê]úºz¶ì?á¿w'ÿ•+¶ø¼;qó ¶¸=ùzÂÂÿ aÕâçSX(Ô´0½Ñ\ËÅéõ ˆIõôï'øáîä÷îKÙ+®™é¾,WªŸ¦iìÎÜÈ0¦ºû4ù¸`C1Œ¬»Z®X¯µS÷°\q1öBñŽå¯z˜•¢ŸtøÞM~ÎC¿—Rœuy¯µÝ nÍ»•ý^õl”Ýé’ÁŒf²^©˜}_÷ór%zn&©»»ë8Hλ?Kª»ÌÇÞäc7ޏý¨d÷>†ö:Ï{=,™ê5—&ÑÃRôJ Æ»wÑñéãé¿,»4Ã\Xq­`åÞÖËÑŒ‹ÓK`¼Uö\ÂÒ2ŒÓñÕv¸õ¼0Ftwv©áplÊpg-¹ÑˆÀþ&rÌñìM¤ì9pÀ„»œÁ{®)ìqø”‡›<|LÙ7ÊžñA,Vlò›{€I¸Ô—|ÿ§«Mž¼ Œà}ueÙ.-î‹–XÂ`bžeÜ #,l3/íC9ïÇa ÜZ;+u?NïàOPf˜ð›ô²ÃÅ GüóE¾á1—i¶úÉÒˆõ›ºçåj€›“fø²%鸚@ÔE¤W"¸;ÀÒS ½bÿ÷wyrZMbQd¹ÎeDã·¥îÈ“&ØÉ”°RæoBB›™1%´¥†nóð)7yø˜†$´¹éÓ¶K6õl¼`È.)« {#•r»®Ä z9€I+'•@âþ…Ä5Zp›ØãÃWl짤]Hé›Ýβet÷¡Kú–?CÜ<³k9¼P¹aÊÿXõ)Ø »_¼VÖê†B)<›ÍÎiþýÃÒRô¬ e¶KWµ$#ãLˆ.°]ìå^ ÙÐ  Y÷_lIh{ Ê2 @i{m0QZb‰ÜÙ£L/F·µ{­k‰s{¡ µÈ†½dáɶ™ÞÀaPM`ÂÐd–ãG/{JY<\õ2‰G*ã2èh @†ø-ibïƒöÒ†7oP:Q²÷[nAŒ¤à,“Á;™“X.áä¡8á:@ ‘¯ˆôW%Ñ‚+“Œª#d@µ',xè GiP6¸íúè2Ïî‚ã¾Èyž]× ×Í6Ñ4¸ŠHRÍŠÍoKÆÒ½CÒúÞr]÷œßXü‚kw™&Ÿ°7•ø4{A —žÞÿ >è¿aîsqkkèÄœ¨¬òlCBw­F½% <0è×A‡qüÀ‚Nì`:™ôóyýͬ$glþÜm©Ëƒ¼“1Æ)ù;+Ú¨­æÚkM9Mûë<¼ÉÃu^`Ã6,³áºaâiˆµiä¨ùœ¤†9C 3€WtÄûxAb2S ÈJ áš%0C"m‚<¿ŽÇÌ(Ÿ#ó;† dîÉë1èøÃÏÊÑõÇâà•Æ:yšµ÷$ú‘b½ ?+ï‘Húþäôosç#íö“koùkä$òÝ¡Ñ^mÕ.nmܮއä‡ça&½;†#’8w$ÁwÅ1­°‰Â´¾Šdo¥Âa›´·RÇBà-ùô—W [b÷C󬻆* ZUn‚½ì#†6gæ•÷>Þ‰Ý!}•Oð6ƒ½­×Ì1_ZÆÒïU?úlÖaþ#)@9ë55<†ÿ úO ¾× “ ¨iª9þc´ÖØyÛ¯”‡íz`Oö ÍBxB¦à©ƒÖÅõ’ƒxãÄCçšÀ´3gfTt£ßf×è¢È]¦R³7½È‡+Ó3ýg>¼­ÈLÂ+™ ókJ —ñ0Êr¸ìO¹^ip©«rúŠJZ¡DÔJÄÐ…¾VO»êËt¸¾³iòñÖ.#8v?¤0å‰B Æi]²æòHf—ÈœÔÞD•á3Yß¶ Z:6T*ˆ®®PIQ›æJJÌ~¤ê Îyå¼ãY(È€"’-B—~*rjð•Ô3”D|}"“N›"ÆA\çŘ\úа*¹äK¸ðò•¼ :m‹R]"œ0â*j›¡«÷E;Ôùá@ÌQ‚˜*ûn=ÆÑ×?´¢É—ìϳž!gaGª"¤Å?QÛôH­ÐÏëµØÛ`>­!(S‚â€r¶ ÷$nШ˜÷|@ÿyÏiD¹Àw™ºŽHVÏ¥¯Õƒˆ¯dQ-Í9Þ— xRó‘ϲÏh™sJHsÝaížÒH‡ÐšƒÐ˜J¾M]PšRkRoáünhé3Ki…_ÉZ*‚ÚòªT²öCJζ¢+Œ e î¯sšæè¬“/d`ŒäóòÀf$²Y/à‰Çû{›/jËé:JZËYµ¤T Ž©5§z VUˆÐMʪŠ+çò¿†ÈX7…½ÑÂ~O‘Ѷ“§¨ ÕhÔàí:N~Ù™|UÁ—íf%§©uXö'Rεb ETy }„¬Í9‹lÅ–ZKJÉÐOàôJ™;’r›ÂcÆwVÙÎqðŽuK3’îHd 1©¢Ð‡ÏªGWsc obßËײ íFÿDhBÂp½ÁWBÅ>‘üüúØØ=! uGühwPVš>|¨Ý4·öGÿHˆbR‹Š…ü>?;Çö•ĵ¯4ˆÃèQy8ç¨ ï½"UA¸Y• !9äõÍyFBcQ¿ŽxqUv¸ÐÏòûÅc”8žÍ»Òˆ]gľJãH æ¿øØ¢ ld‹I¤àl¿"ºbaíükÕ\ĺFĶ_d­NØudŽfƒÔª‡‚«{7Ûwl#YÔ’®`›Š´€Lp0“Mçw…sZô‘›sÈŸo#I˜¥õñé¨V ›øL*}qª4ã9® ¸Wƒ`Ù&¾³¢(z-FB›Ú'ÒMF¨ˆ”àóÂ×t}‚l/a÷JpœEMht—nå¾$Àž,ŒŠ‚G…û‰Î2Wš4½bÙ\“[vB·|‘j£ÛëÐŲGyOi™¸«à´Ãüüß)èþj ì´žÁüSB£âÁæ<ÔtÔô¹Ïèž"´6¦“Oîê|r_y‘¶WNçGƒ7EÈ ¤’s>™ðI‡LÒuÿM)¹JæI·)V ó¤—…¬TÝfæ@¬K´Ó†ºSÔ?|Èu9˜z…úÉŽÇ´/hms›ÊÜ5ß*šü“Í_}=Ô€U*§¾†b– @«|s¡kûLº8dXP4Æ&·d¶I3´dÏ´ Rþrôõá€?Iç çÉ6Ó‹Ð/i1±øGÓÌo–|ïCê…µMšç[þ½‘ðº·2ÌÚ¿/²Êi‡°üÌKÓëÚ-xÉ È¦N¯¾<]]órê6» ôgH°¶XµxX²Æî;ªÍi¤kʹÊj³u[«´eaÌSqæ¯c*çÞ.†÷œ7À‹øœsÉ¢Ù¢M°‰òRJ)ÝíÆ5}jŽ ßÇ*B-$ú …2,ßÔ­±ÕߊÉ÷·©Á—_·U~OCûù/§'ÿ†þ\rðbendstream endobj 2896 0 obj 3021 endobj 2962 0 obj <> stream xœ½ZYo]·~ׯ¸È‹Ï)rYîKÞì4\MãéCS–dË‚díj,ùïò‡Cž¹‹b;Ѓés¹ÎòÍ7CÞ¬8+ÿò¿ÇþúZ±:½;HßWbu~ps òxîµzq•ñ«À‚•V¯ßˆ<@yø_9%™‡>ügøvÔÌH+Âð~\æ½wÃ›Ô B˜ázþx?r˜Pq'†·ãZ0k­òÃí¸–Ê1eä ê(_µbÞæñéãimNs#Åp\纈sÁ®å°Žã N‡£€/Vè¾§ñ|Ëq­˜ ^Ûá,Î긖r¸œÖ²Ü 'uÙ³ºìe³/©4sF¯æÅÐ\Gu®ÛQf¥öXD·£bÆ*!‡Ç´C'¤ÿïá?¢º¬ÀZXKk ç ÎÆ´ nux €³j&-WQ–¹•lD AÁ©çí¿©Žk3SAÅõ,-BX­…ŸVú7¨ZnMQuœ-u¥nì ¯Š:Ô ¾›[WµgýùCl RÙ"s)YcUÕþÞÆHftÈÃÓï—óïwIâܺÎau¸‡I'CR®lͧ Ez 'üõí(8SÞ…áã<-_E{&·W ªYþ6›´•¨çÛ„ Uðïãš3ǹ·"ë9Mú˜·çCѳª‚F!•—SEY ÿ*²WBûF8£±Hí"2ðÉR.¾{~]¼Z ­.Œ?)+7|@Ó/«Zþ‰ÎøãìißM¬Œ^6Š {çÒL@ó{4êuüì™ š·”›'ˆð¯8«Už÷éJ ëߢ¯¿Eذ[H¼ð";óÞ¤#x t arÔòñ¸¥ 9¡Úk/e¿•““h)ŒcZ!÷”@Ä‘ûÄ:Сæ/»ppÉüßIˆðm~U Ãhà ¦q\cÈUm>Ô&¢"»ØX§í"Ì”Oê°‰F—2•÷Ãßè´î{ô—æÙr¢ªy€(o-þý’D🇊b?šã)`Äzìiš,Gª®0“K:§âšéVÈ)’_ÕæCm^ÖæŽtG&£tóÌh?W“1˜?cÔ®«¹Ø3Ωc"t¼®QqW%j‡ìE¤ è½Â™n ¥MüM1ÏŠ6¨¢H)ÜÄêl³hÙ÷2ènÏÀîЀH÷E†–@ »›‹¢è÷ã¬îk}õlÛb͵륄 °u¢¼‘Þm+²œJÓ;Þk ›ö¥eÀ™-éZ'ú%PxwЉsÚR1qk~ðõ¼ò̶^ƒ*»)-•,–¥_ œ`TˆÒJL¬ˆ»Ž½ÿD3l3©¶è»°(ºÀE[T;U,iBvê…Z©‹äÅ%wú¹ †e^ Z—3<"Òç¬ò‹`½n>É(½’Ðw K¼“+¡™ÒVNašO |RÎúp½A¢§á´ÀU€)¯ÇÄe…‰D,~ôn*%¦Ÿ§É»k´xm–æ|upø—œ`Z&¥Án×m—uÓ¥•…¹¢¾äíUm¾)n™÷4Vžµ›’öÓÚDÙ÷]UÞMm^Ôæ¥Ýœ©o®aòIj‹r Y×8$–Íå ‘F¢œ÷f eÔ/•$ýcõ½oæ1¤˜½€¼¯úÈÙo@òÊzè¿Þn¨æŒ#b²·¼or–Nœ‘"C,âýºs¯î¨jÎÎŽH$¸"Íí %œ'œ2cæ:妸¨·ÜŒ<â¢rŽ'öʵe'»ðh‡ÈÃbÛ½‹t@¬”’ÀîMð enIdľåfϨ wY'mXŠhtQ‚*x÷f<©Ø.9ÕÊÐ˲ùÂòårõÉ>83/¶Ë`RÄ”_Ø`dž…Äp±¹ö·E{ q‡Ê.4P}Ü?®Ïû¢‹fxËy?ÎWõN’¾"y_“¦ Ñ7ä%Ò‚ÇÍ÷›ù:fçuÐ5µ™þ)@Zë´MöS-J§$Šmã [xËA peÎbë[CtßK°#‚%e޳–'¶IrÑÝ0=lq!\^&¯lPÈŽjízù€œžf:¨`Þ×Gû›â+C·ÔtÌD8³&óAÞd¾TÀ_>²ìÒ¯¦Yu+°«î€})wgáš¼-Bæû€œš0šaì(sÏ6)vN•È×£dV»`Q)ó> ÎGâóPKi5¡”Nã5‹ô§ÑXðyi©^D°°>4çé]›’R\ÅOYQ4F²?êASvòµUÕøÕ|Cü+Zª€ˆlœlù>1ŒV Kòž½ië«nêùø–bæö•ÚÀ¼Å ,’÷±·°Ú3ˆjŒ6é9ÓF Ïg+™t|®wGs¹š•¼jk$Ù3J¾ZZ jEÚ5÷©ˆ/8ìxB'SE©š¼ñ»ÃƒàïwÃpÍ÷endstream endobj 2963 0 obj 2908 endobj 3017 0 obj <> stream xœíZ_o5ϧØÇ½Š3ëÿöc **¶÷‚Eé]HO$wm’BûIøºÌx½žÙ=_®-E Ej¦^{lÏÌoþ9¯›NȦßü{y}ôå3eesy{”ÆÙüvôúHæÿtyVóhµ MÑ)gšÅ¯G2/ÐÁŠ.4^+àÃõÑOíñÌ«œŒíËÙÜŠ‚oÏ¥´í«2x7뀡î¼l/fs)œs:´7³¹Ò^h«ZI«Œ-‚ËëÓà%‘=/k•l—Äë yÁ©U;ÇõVHoÚÅLˆ“f:ÓJ¼_ûh6×BÅ`\»F®¾3Jµ›~/×ÙvEÛ®iÛÍè\Já­iŸ”ͯÄëf&­pÊ.¢›™Öi©Úwé„^ªðËâÛ¤.ÕH/”´I s-µÐª™+»ÅÐ,V ¦S>¤§Î#œÏ·Nä6×I)¬2\ud¥T§Ë®0 ÂìDÑŬXAÄwHÚ œe£ìZFhã^Ëøþ6sc„éïôýL g|t '-`¡w°¹3q0v‘Æ¢“=;ÍÈV­ð2Æfñähñ ‹GTõ%‘gD.‰ÜyM$ãð®'ƒŽËáŠÈ‹DZÕ!6Ò¨—.â„,,'G·ëŒÀ˜äô'Ú1ˆ àE8ÜÈÁ Ø#ÇÑY1â]uô6ÃS+´X5æƒùÑÁ(OƒóÉŽÑ(|×'Ûè§=Ú´µíˆQ0‘hÚohôÙL‡.ðUßá)œ0ÊÂ,K23.l5@`§A4¡ÉÉl†Áªƒur8.ÉŒ ê¢ÜÝÔ°É»4æ¶Ä¼DÕòAyV°|ðZO“Îò-@:ãØ[¶tàÔXM1KGE Ïõn„ÜÙnòh˜g˜ê!C­¬¿,3$&Þeø¢QíBàé«oêS;1qg{5s€ ÛgÙ©FÐ~XÞÃ5¢Ù$&ÅŸ~ˆ“\å¨È¯È·'ù8ÃxNðß`ë‰å^ô”¹ªŸ&(E¾qä¶ULLìd¼”UMt2ñž › ±ç4Z÷V»ùbݧˆŒqOª×knn:pCíö°$P‚%ÅÁ~KÂð†Èiõƒ) Ë Yêq;®ŽLð£¬ÏgwÓ'õd`S#ëåИHÍ¥ÏÉK-ðÁ.‚ %%o[Z±˜x"§N"¾¤ïÄÝÈãõ8Ó¾ænª×·7»~të6S#HV½ü°¸9ò£ä92(FntOÝ…;e» ®×ü΃1FßÌ=$ ½xOûÁEÍJþ¤ˆd_*Þ³]hí0ßtç$/é7U’qXV™­©æße†þì1MX• Ë…7ý€`ÈÆO«€“i!žÈ;"«Uý†:›*‡e•Ùúf©ð˜:«ìœ–“¾m A¿›dî}Ń/ú1BBõr¾ƒœÀ€2Z6 ¹ä]–©ä]î`8}SCjõ¬, °hø®vWeIªu˜4A°[j¨5‘/ˆ|Eäëû‹!!é „þyQ×S–²>A!9¸‘寇œ]/Æ”3 ½÷{±NñÄmÇ‘Mû õÒÁ`¦IÍ]"à¿Ðì`•ìÛ{ŠÚDÞŒ"¡RH0ßS=9TXï¥Þ ‘}ªëÑIFs¬0Íèó)YÛ%‘'DRA^ÜOç‹/{~ ç°¬2Ë8Àà^gö˜È‘?·D/ª{0¬U¹mªça¾©á)­« zø¾#èõßÝë#ë1¶îVÝŽvè­l´ì%‘çµ}Ó;Õ”pË:ßMUWÕ»Ó-ë¦ÉùOá~fU#¬;&ÚBsø×˜¡ÿ,[‚Ìï°– sAõ&ÝñÔ11YM}ã°¬2[òr÷ ~£îk‘ëå:K(+`S)ª#Š$$ÉöóN/b'{(a°9©ý{6¸Ç¢…bÓ±\ãS)Ø4 ]÷Ð Ýéõ”¦MîÆNZé!)ÖeVÞQÏ´n_õ Œ‹;¾Ü;õÊ„+>—uähÖ™á’ø(\{_Æ#H.ámõUº~ê²çám5¡Ë9¸ž\‹½&F ™©ƒôOQÀjèÝçr¬ŒË#x½ï2 ¤é©Þ.½ÑQ½Îš‰8Á‚õ)7 X½¥ï#K¸ÖÕÊ»ö §çÕL—¾¨uõH ûwŸ¸aÀí'ƒ³ÿ­…éBztòâ!YbdFVðõâè)üüR7'endstream endobj 3018 0 obj 2031 endobj 3062 0 obj <> stream xœÍZYo7~ׯ˜‡Òcìpy~L°‡ÞE ؇ dI¶„ŒF²Ž¬ýï·ŠM6‹löÌHƒ…LsH6YUßWùiÅ™XqüKÿžßœüåGiÄêãÃIì_‰Õ¯'ŸNDúO£VßžÂ@eü*°`¥Õ«Ó'"MPÞ0îWNIæá‡›“Ÿ†ïÖšiE®Öü÷n8‹­ „î¦ÎÇ5‡wb¸\o³Ö*?ܯ7R9¦ŒD™Å W+æmš;?–渖1R çe­-®»–Ãç&œN×z¬ÐíH#ð|÷ëb2xm‡k\Õq-å°¿e¹.Êg¯ËgwÕ¾¤ÒÌ=¼>FÖz_Öº_ ìԞŠè~­˜±JÈáKÜ¡Òÿ|úOT—T i Œ\ÁÙ˜vÁ­N/@§ã´óY!¨,b#츔 zåa)8}T¨}ÆéßÃî™4\«xÔü¥4¿+ÍÛÒܵM¸Ã¯æÞóÒ|,Íë=‹ÅÞ”æÅÔìJÃ+&,—ùQŠÜV†Ö¥Ì3jxš 1Ù Š-¿“Ix-™Ñ2ùývmaJØá·éçë²æÅÔI,þÖ 1 ï„'Ù_5-ŸÐi.èþQœÚ2çÃpƒ l {÷žŠlv·©¸²ÀŽ"=ÿ¾-³p‡Ò0 Ê>$LæÈ® ò¶€ ¾Ÿptè”ÉZgeÀnæƒ &dk! Þ–e‰¸ÿŒ Ì øž‰àB²‘´™‘k”¦â&Ÿý2êÖÞWgLpS¥À~äj#$ll9î°ÌÇè]i.)5kâ"’n+HÏ>pU  Ì£ç‹ä£a³Œ¼ìu"y³ É¸5r%4SÚJÄ­æÌ‚TV§oON_!ÿ€˜eðâ 6¡V(­-é¼YKðV –rß#~Þx EÒ +’íCîêÒ‡tÌ«àó6‹’CÛø¥HêÍ(u^)åqfF¸Àý4ô1©¾šf;ÓÞQnlBl×]Ò%œJH÷¾4ï¦æ‚/ Ìj޶ç³#)Á55Š™ÇÛÖpS ¸ÌnIÄ ¿zïÇö°QËÌ&pO¡<ßíxVê}c¯R!€—•c#J‡ì˜xÙ³jC#½…Cúïípݤ߫¢³³®ª/JsÛÓz_¿šyÐ-yÄÚÞ@!².`h7;7±…Ö… =5‘‰×© ;oSLìøXÎ/zÖU*é}ßsL‘™€%$ÝÊUoÑâ×ýƒTœ â¤oËX¬s¯ ‚êá(leeKHiŒÃu°T7ås»J!Y·Äª‰@¯+ôÎ×zS°‡¶)€ÐµúCðÀäç%ä»-Í]·y}tx¸±’é?Ýb.ÊZ 7¡'è:͇”i¹Ôƒ½íÚæEÞÉKaÖ·èÖ‚hCâÖ&˜žYP^ ] {1øò—XÎüð/´¥8¤T%‚/ˆ,ç+Ü€06ša,q7‡ X®³=þÎø>C¡œà¸ât\¨É}w)N«]ò©qL@òKD~K5™Ã3>LIäå”Dv8L­”Aj l©¥†£OãGˆ¹,dš6…WÞYs=Á¦¡O@â›B6eIØ R"0,"T`¶Ú¿¯7 ¿B6”¡æ\”š£Ý»C´2s3Ú9˜×.zX©ÆíóYÔž4åb†MMæJ à÷”–BP®ìîˆ`gêM„'{Z ÀW3 %ÚmMÀZªÎ#é‡Ì¢Ï&¼FÜw.j_(dTò_ü.,Á[lu be@L7’êÙ[Ábifÿ¤äáTxÃ:Ÿ+WzÁñ—d´_uë‘Ū÷À¾6Ð3Щ¨çºÁdŠ‚zÚe(§hô«CyÉÂÏ0DÌɶ¤§-„®)ð"n1¤™pK&¬D0Ì?üm öœ±5UäðåZÄà1 ŸH"+zÛr©B¢Ü¬TÓ1»#° Óþï°œ£¬ £´ ~Š>ú•YÂpó̉¤¦ ì×Sчâë2ÿõŒM *ëÚÂÞ2C‰Ê´„è&ëͪ>‰ÏvÐ^ét1B×¶ 8âÙ÷ó*¥$ÈnÑM`™pø‰|o'æ šÊ¹žY@Ö=–¹A0²[mB&4¹¹wc Æ úgiD›@mÊ™¢_ؚݬaêœë |¢/Ue S (dþ~ÿÜu²Ï%°’›o’æj‡¼è/'â~èäs/ŠÆd¬V›Ð)_•¨1ŒµQÕMÖ8á§ò÷ÝD:-ïÓ-  ÉØ¹µw¤ö B)†ûi¡î„’µ Í$ÛxߌìjÑn(Û¸ìT:8X ø˜Ji¥9Þo:LQ+—ü£ rª¹¥7õªFÇxñæ–üKÿ¹Gì«”pt™˜¡+[Å:}O/G­^H È ïgMq§"#‡#´G-Eh›ìÊg‘hSšž¹±–Ër Ì«ÃwlÏ«ç6Ϊ"ìXèÔU0·"ùa¶4Dn Iút€À=cÜé…÷yW0Dâ…áxvªÆôù¦°ó«Ò9=,°ÇøÔmk˜&YrSÖJù41—QÙ^ìuõËÁî‡ÒÛø>0u…‘Öyqh¿–#2-÷ ¬ßÄÅÒ0%‡Ûý¨ EÇìùémc…¾¾¬••R!»ç|=—ÔQ»ç.†ûoDúÏ;®ºÓÞÏsg§h,п‹.•²:ôħ(²:/Zä¡P¶Ÿ$>ÍŒ¢y´me‹Wuå¯Þõ.ê&¤©¦à×JǸ…ÌhâHA5T */pð)È7ñ週SñŸb}u—Û_‹ŒÝª5ʪn(rMƒ¬J^m•ä´ÔÐ M{5EÝäš_^Ÿ‹@UUH‹yrWW* ½ ±TúqÊÁ×__º1ÍS.T……¼e²7KåþÂXéÙ%½(¢:Ê8âqGÉ2*æ±÷uµ‡Ù‹SHjl¾ê#—läÉËͺó¸%ZåìISšßœWÓLLÈüP ]—¬@îüÈ«)ºqxë#é ¤yWš»J¥ ð’}â]ØQ¯ª!›<TÊ;]YÀî,‡\ᨻËQvø©ô>ãÊsþ”7¯Èç±t^–æMWTÛÒ<«Öê¬ òÎM|Åz¯J“¼y¨7–¦ýéeÓ6Ý­“i÷‡¾vÌ´Üü¹2‚Ùƒ{Í!YGCÈÁF´ S _š8û¯§'?Àßÿ›¡Dendstream endobj 3063 0 obj 2808 endobj 3097 0 obj <> stream xœíko·èGýŠCì{…o½|.éêÄù¸uã( 'Î:I>ôôÈɲúï%¹$g¸;{Y±aTð¹äp8ïòüÛ¤©Ù¤ñâßGg_rÅ&§Wa|Â&ÿ=øí€Å4qÖäé¡›(”™ØÚj®åäðä€Å¨º1“VðÚ¸g¯ªo§²V\3[½™ÎTmŒi«y€,cªºÌƒo§C(š–UÇÓ«µÖÂTë錋¶ŠW VÕnTŠÚè¸> žØáRгêp­<.G5¯f~½ªY+«Ã)s#šÉþLÅüùª§Ó™¨¹5RWKµm$çÕy·—nTµ€m—°íyA²n•¬žçÍ®×€k=eªÖ\Ì¢õTÔJ ƫ߅-ãæ—Ã‚¸ø„µ5g*Ha&˜¨ŸÌx[3fíäpáÀÂ"aáÙÖÔ†Y!t¥ŠaÞr‡X8iÍxmE£YuáAÙ8Òýa°“’0º¬ à[*ã·XÆí´Aö&¬ý2![žñZ'‡+¯»e¢Õ^:iÙÛNJ)¯^i–¡Ý$†r7®u­‹1øQÓÔRÙtL?zÈ΂†pî8A!U •$hð œ- S3lR²ucÍdæmÉ4¬æO^kdTqÉm:®GåÙ(k®)èû@-uS½ZJ]·¶­Þ{vh묯ÐadEoºÉ¦ÑÕ»©®™SGÌT9ö½òÚª¬”Ól{­AG{ö¦_­“Æ-WyðQ´qÇìßóà˜ÅuD$³åzÌÁˆÏã ós#‚Ž<ãÌîØæî…ë'•¾K‹ñ#ÎóTdìÇ0­B ¸ÒÃõ¦vLU¶1Ø#†èÆ™Ú5¬_M½q!c'ºâmù£Eézâà#ÊäyˆÆ™ƒÂæÍAÚÚÙºåJ:¥Í^’r¸ ¢cŸùºÏZ`pžÝæì¢tÿ̺£²êß.¼Hce:cøŽù6zò–÷Ô™ðÙW1ÖˆSƒX?`^pÚWÉ?{Ì¢ fÌi´·ß ŠÞ&ž­ dV…ˆÇ&Š&#uK†Õùž$q_ôá;-ú“β™JºïW­Süì”àsš‰s´uKâBõH=Æ KÚ òr’:©/aÿ,&óŠè†ÆS&+É`çä©YHuÆë¸È²ñne+Úkùƒ§ƒë‚’ÅN sÚ§>“™§l‰²‰p…'¤$ öíì±ck°GÝðŽ»§ *­‚Œl…abSI£Þ- æò ]}?u©˜m•Æ¡/«ª[äø)Lk«¤}F.¹Ðv9fŸ‰¢/tal4LÆ(¸5L.0‚.J³ñà= é V°h…-™™š7mÌ8Ú¦1ša« €Ñ=ÉŸ»ð99ú-€‡€l±MSÎÉ g‘Q¾‡Á—¾ð°/’Ý)€¿¸•04úš½¢h|AÒøɱ—@îÓ“…K6|íƒò:‘ÖÞ ø‘¬K ž%Zf^—eŠd[4ycóâ3¡hÂYkâoÇT1bkòtW¤ @k9æ9Fm9TÆÑ–ûo°Ûi¬+rٜ›|Ià·?½é.|MTÝÒ…|„Ñ›$o¤I€í¥³L*Œ+Š?£a‹p ´àvAF;¼¡èÉÖˆ3Ú[þ‰J#”m•9ZJ¦÷©¹Pm„²¼aIþ–vK×÷ IØÚnØ”D§ŠºP&±¶ú¹ÊéYäe[ð’¹rU›äàÖ9/- Kß´4ÊÆ¦¤ßá̹ª›ÜFy˜?Ê€®äH½«PÆi'D¯ÃÂÕï­;ßMJZæmS;‘çòèç)d©Q¤Fú¹¬ç[sY¨Ñú²‹t2u ¸ñuÌ Y‰n.6 Qa "ëhçHG¿Ì=dÔð~Õ`%k£8[U©P)]gL½rØ)ÒFyÆjÓcÒ¬D䤨jÁ¼[M»‘ÕYÙCA%l%En]…€Î59ì‚Lì$Ò«eÙºÌ ü%Q$vÕúã÷:5¨u•²~hoBOq¶Ÿå+oßyIS“Ž7ŠQ=Õ¨äwÓêtÀæn·AƒVúóø[Æw:Ž}4VshY«W¤`бýí©0Ú9 cj|†É9øn×'Ê-ŒÙ`T;ÔÛ_ƒ2˜£8µ#©ÈŸpDMßi F/c  {êr4JâNs¸9²ôÔ9ïFc³·G=‚ eE_ 6÷î;}fŒG¹‚óÝÕŒñÁ&ªeÑçÚÚhÛ3-lÚ¯Pj+·è«dn´Ï gNÎ*Ç‘«dM^%‡ºšiíÂĸžˆîMCs@6¢Q½«Ùpë\ÿÙÚKÔÑ”o¨c>Ý«¢›dt‹ 7³þ¼Ï~‘ªq™j÷¾áY×—­ÙÜËõmæ†Ë–ž8„ ³ì`‘¾íÆØ\Ýêâë4ÌZ‹’”¼„¦­táæ¢UȆa‡&:¬Pz¶’^X´rØ 7c&(ÆeöYärNÀ‘-uíg§üï}Ìq’,}ÝEtÒ.õû”ûbc{¼I¹‹ª/­‚`çef8s2à>9ÚÑ›‘gáÑŽt m©ÓƒêRÉžBûš±m ®LZ#Yi,âÓ¢#\Gžµ‘Pÿº¨Ðàž'Ô{£Ë\Äö VzãÍX¨TëØâ>Éq]Ü¢ vÚzIñ õjÐeBÙºKàw>%ÛYpñúbúRnf;¾M‚v|Cö§öí»N'ÐuBÍÐU¦e¨ï‡nާ»w°÷l¤—xÑh:ja£&Ø;/êís]2/0 .9ÑQ½ Iô" מuMníÜ:4¹_“‡´]×ÌòÅŠ_šTî=¨Æ’Ôì7{hߢMà )Xt¶UÁBÆô9—$×O÷PÏ)–#’Þ‰l\5º+QÍHÒÞçzMÁ¨PÈ É÷šßIâtÉö@4÷<‰ëò7ß,ED˜ âê%É`ÚAü!bT†Q.4¯ä¥=yV^’B·G`Ÿ:>&n~ìó}7ïô Éî»Vø¢Ýn2»?’bÞªð׺O“p6Ô„rÏüò¦îéÒîæV.àíßÇlõX‰ô]®âdc¾4á½ÜÕ]'Ó½äL ½«—at'}'WY÷Ï9îü9ÇNJ±Ï+úϯ$÷¾×¸åÅêÝ<óèTán^yD¾æg!Áe­ïT¤wìÁGý²Ï<"±;>ó j4:ëB¾É6Hîöî<Êèá¸ï2V»`µ'&Ð|ã“2¸¬‹\ ±v³œ–)ïj`÷86Êi·–y_ Æn/XÝÝFDÿët&É6ãµDÏ™’<~»›WÛ(§k¨£BúiÙr ²`nÈ·]K“@¯vPŽtI‚ôÜŘ‘uÿŠdà4¯ä×f$5t´§y ©A2îš®y¯…p“9J<ÛÜ¥7?+"¢:Ûg|ØvË×lGcÜ ‚ÃÆÒ>RÏ%y®AžA$ÀgbÞÌÚðK:¥ex%³gþÒ;̧·’ßd—»Åß«‚ÖQ£•ÚÇE-Q£#m™¸/`ì%¸’yA\7­Ècñ¤<}ß4·õã)xk[†îÛ =vÞ·þoÛ »þ@à¾ãpßq¸ï8dð¾ãУñkî8tùÎNí†?öw%}[½ó‚ih6Ÿç§+÷EÌWPÄ þwáßÂÉÉLqÿºNt&¢àí‡Î`~ õãÁÿ£ç=endstream endobj 3098 0 obj 3112 endobj 3117 0 obj <> stream xœ­WKoÚ@¾ó+¬&‡u%o½O¯ÕIz¨RE¥¾TQT%@ *NÕ*â¿w×özÖdIqàËdß¼v—Ç(¥,Jݧù/F\±h¶TòˆE¿Öü‘6ZѰ°ŠB™(§¹æZFÅÏk „Q45Q&85öËÁ59‹%U\³œÜlj¢Æ˜ŒÜV(gL‘u+,ãÔ:iÆÈ4NÕZ C6qÂEF…ℵR)¨Ñ}%œ¬})ѝ…óeYs’8{EY&I3+ÑLîk*æò#Ã8”çFj2w^³TrNVu,*2°s»êðâBÒLIrÙ |ݯMÌÕ\š°D›XP¥ãäoÅ0cÜÜŸ]rÑRv]¨j’ëÈ~S™åYTLl\)W©®®–Ÿº.,³¬9éà-êlUA™§Y£PÁ%À)Àm ]: ·¹E c4Ó)¯¹ïZÇNƒÛF˜”EÅå xMN ª…:µsF®@6² äŒ2®Cª+¯Èh&ÓCeé Ê¤8øËÚ%âØ¯Q÷ÇÀÖ×Âs€C€[ððìÓ~†ß½¬).@m¯È;.P³1Ú÷@÷˜hÑv~ æ•púÚô1W%@÷PØÕU”y°©&Ó®¹©G÷ŠäÒì+,÷»î+VûíŒÚ.ÑšOzДù¡N Î@z‡úÝt¤ˆß't0ÊN%ÛÖ;¾=4ù¾¶ctwVèu¯Alß ¨ü@ç9± §¨YÙŽM‰ªgâ- ~¾X!yÝžù>žþŸY‚2ïÝÄÓ×™yx³?õõpä|à·ßŠàž{1VHû}^AGþ ä4úðà%*=X€³I߬s{gŸ@:xð èí÷§—Y ½C¥Û.Éz̯PŽçhÉF@w»ÉÜ>JS÷R­Îçïo\G?¢wHwˆÏ%iŸ4ŽRï0¿ùER•U4;PIƒ%=xž#ç@PÂàN£Õ|±Ðáì`ïê&è¾.P³[̯‹á‘Ž)&òD>þFê¼ivªfõš‡{p¶£3G¹u°ÓAãK¸éƒ!yÓÝ –~oaV÷·Á‹Ÿ¤256™(‘¹¦RÖ& ~Te-tÖÅà«ýüðë âendstream endobj 3118 0 obj 872 endobj 4 0 obj <> /Contents 249 0 R >> endobj 257 0 obj <> /Contents 259 0 R >> endobj 265 0 obj <> /Annots[270 0 R 273 0 R 274 0 R 275 0 R 276 0 R 277 0 R 278 0 R 279 0 R 280 0 R 281 0 R 282 0 R 283 0 R 284 0 R 285 0 R 286 0 R 287 0 R 288 0 R 289 0 R 290 0 R 291 0 R 292 0 R 293 0 R 294 0 R 295 0 R 296 0 R 297 0 R 298 0 R 299 0 R 300 0 R 301 0 R 302 0 R 303 0 R 304 0 R 305 0 R 306 0 R 307 0 R 308 0 R 309 0 R 310 0 R 311 0 R 312 0 R 313 0 R 314 0 R 315 0 R 316 0 R 317 0 R 318 0 R 319 0 R 320 0 R 321 0 R 322 0 R 323 0 R 324 0 R 325 0 R 326 0 R 327 0 R 328 0 R 329 0 R 330 0 R 331 0 R 332 0 R 333 0 R 334 0 R 335 0 R 336 0 R 337 0 R 338 0 R 339 0 R 340 0 R 341 0 R 342 0 R 343 0 R 344 0 R 345 0 R 346 0 R 347 0 R 348 0 R 349 0 R 350 0 R 351 0 R 352 0 R 353 0 R 354 0 R 355 0 R 356 0 R 357 0 R]/Contents 267 0 R >> endobj 362 0 obj <> /Annots[367 0 R 368 0 R 369 0 R 370 0 R]/Contents 364 0 R >> endobj 373 0 obj <> /Annots[389 0 R]/Contents 376 0 R >> endobj 398 0 obj <> /Contents 400 0 R >> endobj 417 0 obj <> /Contents 420 0 R >> endobj 465 0 obj <> /Contents 467 0 R >> endobj 538 0 obj <> /Contents 540 0 R >> endobj 599 0 obj <> /Contents 601 0 R >> endobj 673 0 obj <> /Contents 676 0 R >> endobj 732 0 obj <> /Contents 735 0 R >> endobj 776 0 obj <> /Contents 779 0 R >> endobj 841 0 obj <> /Contents 844 0 R >> endobj 883 0 obj <> /Contents 886 0 R >> endobj 924 0 obj <> /Contents 926 0 R >> endobj 965 0 obj <> /Contents 967 0 R >> endobj 1008 0 obj <> /Contents 1010 0 R >> endobj 1059 0 obj <> /Contents 1062 0 R >> endobj 1096 0 obj <> /Contents 1098 0 R >> endobj 1159 0 obj <> /Contents 1161 0 R >> endobj 1225 0 obj <> /Contents 1227 0 R >> endobj 1295 0 obj <> /Contents 1298 0 R >> endobj 1363 0 obj <> /Contents 1366 0 R >> endobj 1398 0 obj <> /Contents 1400 0 R >> endobj 1438 0 obj <> /Contents 1440 0 R >> endobj 1494 0 obj <> /Contents 1497 0 R >> endobj 1547 0 obj <> /Contents 1550 0 R >> endobj 1592 0 obj <> /Contents 1595 0 R >> endobj 1637 0 obj <> /Contents 1639 0 R >> endobj 1681 0 obj <> /Contents 1684 0 R >> endobj 1729 0 obj <> /Contents 1732 0 R >> endobj 1779 0 obj <> /Contents 1781 0 R >> endobj 1822 0 obj <> /Contents 1824 0 R >> endobj 1868 0 obj <> /Contents 1870 0 R >> endobj 1916 0 obj <> /Contents 1919 0 R >> endobj 1956 0 obj <> /Contents 1958 0 R >> endobj 1994 0 obj <> /Contents 1997 0 R >> endobj 2025 0 obj <> /Contents 2028 0 R >> endobj 2062 0 obj <> /Contents 2064 0 R >> endobj 2103 0 obj <> /Contents 2106 0 R >> endobj 2152 0 obj <> /Contents 2155 0 R >> endobj 2202 0 obj <> /Contents 2205 0 R >> endobj 2254 0 obj <> /Contents 2257 0 R >> endobj 2307 0 obj <> /Contents 2310 0 R >> endobj 2355 0 obj <> /Contents 2357 0 R >> endobj 2402 0 obj <> /Contents 2404 0 R >> endobj 2449 0 obj <> /Contents 2451 0 R >> endobj 2492 0 obj <> /Contents 2495 0 R >> endobj 2541 0 obj <> /Contents 2543 0 R >> endobj 2588 0 obj <> /Contents 2591 0 R >> endobj 2642 0 obj <> /Contents 2644 0 R >> endobj 2705 0 obj <> /Contents 2708 0 R >> endobj 2772 0 obj <> /Contents 2775 0 R >> endobj 2835 0 obj <> /Contents 2838 0 R >> endobj 2893 0 obj <> /Contents 2895 0 R >> endobj 2960 0 obj <> /Contents 2962 0 R >> endobj 3015 0 obj <> /Contents 3017 0 R >> endobj 3059 0 obj <> /Contents 3062 0 R >> endobj 3095 0 obj <> /Annots[3107 0 R]/Contents 3097 0 R >> endobj 3115 0 obj <> /Contents 3117 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 4 0 R 257 0 R 265 0 R 362 0 R 373 0 R 398 0 R 417 0 R 465 0 R 538 0 R 599 0 R 673 0 R 732 0 R 776 0 R 841 0 R 883 0 R 924 0 R 965 0 R 1008 0 R 1059 0 R 1096 0 R 1159 0 R 1225 0 R 1295 0 R 1363 0 R 1398 0 R 1438 0 R 1494 0 R 1547 0 R 1592 0 R 1637 0 R 1681 0 R 1729 0 R 1779 0 R 1822 0 R 1868 0 R 1916 0 R 1956 0 R 1994 0 R 2025 0 R 2062 0 R 2103 0 R 2152 0 R 2202 0 R 2254 0 R 2307 0 R 2355 0 R 2402 0 R 2449 0 R 2492 0 R 2541 0 R 2588 0 R 2642 0 R 2705 0 R 2772 0 R 2835 0 R 2893 0 R 2960 0 R 3015 0 R 3059 0 R 3095 0 R 3115 0 R ] /Count 61 >> endobj 7 0 obj << /Count 4 /First 8 0 R /Last 11 0 R >> endobj 1 0 obj <> >> /OpenAction [4 0 R /Fit] /PageMode/UseOutlines /PageLabels<< /Nums [0 << /P (1) >> 1 << /P (2) >> 2 << /P (iii) >> 3 << /P (iv) >> 4 << /P (1) >> 5 << /P (2) >> 6 << /P (3) >> 7 << /P (4) >> 8 << /P (5) >> 9 << /P (6) >> 10 << /P (7) >> 11 << /P (8) >> 12 << /P (9) >> 13 << /P (10) >> 14 << /P (11) >> 15 << /P (12) >> 16 << /P (13) >> 17 << /P (14) >> 18 << /P (15) >> 19 << /P (16) >> 20 << /P (17) >> 21 << /P (18) >> 22 << /P (19) >> 23 << /P (20) >> 24 << /P (21) >> 25 << /P (22) >> 26 << /P (23) >> 27 << /P (24) >> 28 << /P (25) >> 29 << /P (26) >> 30 << /P (27) >> 31 << /P (28) >> 32 << /P (29) >> 33 << /P (30) >> 34 << /P (31) >> 35 << /P (32) >> 36 << /P (33) >> 37 << /P (34) >> 38 << /P (35) >> 39 << /P (36) >> 40 << /P (37) >> 41 << /P (38) >> 42 << /P (39) >> 43 << /P (40) >> 44 << /P (41) >> 45 << /P (42) >> 46 << /P (43) >> 47 << /P (44) >> 48 << /P (45) >> 49 << /P (46) >> 50 << /P (47) >> 51 << /P (48) >> 52 << /P (49) >> 53 << /P (50) >> 54 << /P (51) >> 55 << /P (52) >> 56 << /P (53) >> 57 << /P (54) >> 58 << /P (55) >> 59 << /P (56) >> 60 << /P (57) >>] >> /Metadata 3131 0 R >> endobj 6 0 obj <>endobj 8 0 obj << /Title(PostgreSQL Tcl Interface Documentation) /Dest(1.0) /Parent 7 0 R /Next 9 0 R >> endobj 9 0 obj << /Title(Table of Contents) /Dest(2.0) /Parent 7 0 R /Prev 8 0 R /Next 10 0 R >> endobj 10 0 obj << /Title(List of Tables) /Dest(3.0) /Parent 7 0 R /Prev 9 0 R /Next 11 0 R >> endobj 12 0 obj << /Title(1.1. Overview) /Dest(4.1.1) /Parent 11 0 R /Next 13 0 R >> endobj 13 0 obj << /Title(1.2. Loading pgtcl into an Application) /Dest(4.2.1) /Parent 11 0 R /Prev 12 0 R /Next 14 0 R >> endobj 14 0 obj << /Title(1.3. pgtcl Command Reference) /Dest(4.3.1) /Parent 11 0 R /Prev 13 0 R /Next 15 0 R >> endobj 16 0 obj << /Title(Name) /Dest(4.4.1.2) /Parent 15 0 R /Next 17 0 R >> endobj 17 0 obj << /Title(Synopsis) /Dest(4.4.2.2) /Parent 15 0 R /Prev 16 0 R /Next 18 0 R >> endobj 18 0 obj << /Title(Description) /Dest(4.4.3.2) /Parent 15 0 R /Prev 17 0 R /Next 19 0 R >> endobj 20 0 obj << /Title(New style) /Dest(4.4.4.1.3) /Parent 19 0 R /Next 21 0 R >> endobj 21 0 obj << /Title(Old style) /Dest(4.4.4.2.3) /Parent 19 0 R /Prev 20 0 R /Next 22 0 R >> endobj 22 0 obj << /Title(Third style \(most recent one added\)) /Dest(4.4.4.3.3) /Parent 19 0 R /Prev 21 0 R >> endobj 19 0 obj << /Title(Arguments) /Dest(4.4.4.2) /Count -3 /Parent 15 0 R /Prev 18 0 R /Next 23 0 R /First 20 0 R /Last 22 0 R >> endobj 23 0 obj << /Title(Return Value) /Dest(4.4.5.2) /Parent 15 0 R /Prev 19 0 R >> endobj 15 0 obj << /Title(pgconnect) /Dest(4.4.1) /Count -5 /Parent 11 0 R /Prev 14 0 R /Next 24 0 R /First 16 0 R /Last 23 0 R >> endobj 25 0 obj << /Title(Name) /Dest(4.5.6.2) /Parent 24 0 R /Next 26 0 R >> endobj 26 0 obj << /Title(Synopsis) /Dest(4.5.7.2) /Parent 24 0 R /Prev 25 0 R /Next 27 0 R >> endobj 27 0 obj << /Title(Description) /Dest(4.5.8.2) /Parent 24 0 R /Prev 26 0 R /Next 28 0 R >> endobj 28 0 obj << /Title(Arguments) /Dest(4.5.9.2) /Parent 24 0 R /Prev 27 0 R /Next 29 0 R >> endobj 29 0 obj << /Title(Return Value) /Dest(4.5.10.2) /Parent 24 0 R /Prev 28 0 R >> endobj 24 0 obj << /Title(pgdbinfo) /Dest(4.5.1) /Count -5 /Parent 11 0 R /Prev 15 0 R /Next 30 0 R /First 25 0 R /Last 29 0 R >> endobj 31 0 obj << /Title(Name) /Dest(4.6.11.2) /Parent 30 0 R /Next 32 0 R >> endobj 32 0 obj << /Title(Synopsis) /Dest(4.6.12.2) /Parent 30 0 R /Prev 31 0 R /Next 33 0 R >> endobj 33 0 obj << /Title(Description) /Dest(4.6.13.2) /Parent 30 0 R /Prev 32 0 R /Next 34 0 R >> endobj 34 0 obj << /Title(Arguments) /Dest(4.6.14.2) /Parent 30 0 R /Prev 33 0 R /Next 35 0 R >> endobj 35 0 obj << /Title(Return Value) /Dest(4.6.15.2) /Parent 30 0 R /Prev 34 0 R >> endobj 30 0 obj << /Title(pgdisconnect) /Dest(4.6.1) /Count -5 /Parent 11 0 R /Prev 24 0 R /Next 36 0 R /First 31 0 R /Last 35 0 R >> endobj 37 0 obj << /Title(Name) /Dest(4.7.16.2) /Parent 36 0 R /Next 38 0 R >> endobj 38 0 obj << /Title(Synopsis) /Dest(4.7.17.2) /Parent 36 0 R /Prev 37 0 R /Next 39 0 R >> endobj 39 0 obj << /Title(Description) /Dest(4.7.18.2) /Parent 36 0 R /Prev 38 0 R /Next 40 0 R >> endobj 40 0 obj << /Title(Arguments) /Dest(4.7.19.2) /Parent 36 0 R /Prev 39 0 R /Next 41 0 R >> endobj 41 0 obj << /Title(Return Value) /Dest(4.7.20.2) /Parent 36 0 R /Prev 40 0 R >> endobj 36 0 obj << /Title(pgconndefaults) /Dest(4.7.1) /Count -5 /Parent 11 0 R /Prev 30 0 R /Next 42 0 R /First 37 0 R /Last 41 0 R >> endobj 43 0 obj << /Title(Name) /Dest(4.8.21.2) /Parent 42 0 R /Next 44 0 R >> endobj 44 0 obj << /Title(Synopsis) /Dest(4.8.22.2) /Parent 42 0 R /Prev 43 0 R /Next 45 0 R >> endobj 45 0 obj << /Title(Description) /Dest(4.8.23.2) /Parent 42 0 R /Prev 44 0 R /Next 46 0 R >> endobj 46 0 obj << /Title(Arguments) /Dest(4.8.24.2) /Parent 42 0 R /Prev 45 0 R /Next 47 0 R >> endobj 47 0 obj << /Title(Return Value) /Dest(4.8.25.2) /Parent 42 0 R /Prev 46 0 R /Next 48 0 R >> endobj 48 0 obj << /Title(Example) /Dest(4.8.26.2) /Parent 42 0 R /Prev 47 0 R >> endobj 42 0 obj << /Title(pgexec) /Dest(4.8.1) /Count -6 /Parent 11 0 R /Prev 36 0 R /Next 49 0 R /First 43 0 R /Last 48 0 R >> endobj 50 0 obj << /Title(Name) /Dest(4.9.27.2) /Parent 49 0 R /Next 51 0 R >> endobj 51 0 obj << /Title(Synopsis) /Dest(4.9.28.2) /Parent 49 0 R /Prev 50 0 R /Next 52 0 R >> endobj 52 0 obj << /Title(Description) /Dest(4.9.29.2) /Parent 49 0 R /Prev 51 0 R /Next 53 0 R >> endobj 53 0 obj << /Title(Arguments) /Dest(4.9.30.2) /Parent 49 0 R /Prev 52 0 R /Next 54 0 R >> endobj 54 0 obj << /Title(Return Value) /Dest(4.9.31.2) /Parent 49 0 R /Prev 53 0 R /Next 55 0 R >> endobj 55 0 obj << /Title(Example) /Dest(4.9.32.2) /Parent 49 0 R /Prev 54 0 R >> endobj 49 0 obj << /Title(pgexecprepared) /Dest(4.9.1) /Count -6 /Parent 11 0 R /Prev 42 0 R /Next 56 0 R /First 50 0 R /Last 55 0 R >> endobj 57 0 obj << /Title(Name) /Dest(4.10.33.2) /Parent 56 0 R /Next 58 0 R >> endobj 58 0 obj << /Title(Synopsis) /Dest(4.10.34.2) /Parent 56 0 R /Prev 57 0 R /Next 59 0 R >> endobj 59 0 obj << /Title(Description) /Dest(4.10.35.2) /Parent 56 0 R /Prev 58 0 R /Next 60 0 R >> endobj 60 0 obj << /Title(Arguments) /Dest(4.10.36.2) /Parent 56 0 R /Prev 59 0 R /Next 61 0 R >> endobj 61 0 obj << /Title(Return Value) /Dest(4.10.37.2) /Parent 56 0 R /Prev 60 0 R >> endobj 56 0 obj << /Title(pgresult) /Dest(4.10.1) /Count -5 /Parent 11 0 R /Prev 49 0 R /Next 62 0 R /First 57 0 R /Last 61 0 R >> endobj 63 0 obj << /Title(Name) /Dest(4.11.38.2) /Parent 62 0 R /Next 64 0 R >> endobj 64 0 obj << /Title(Synopsis) /Dest(4.11.39.2) /Parent 62 0 R /Prev 63 0 R /Next 65 0 R >> endobj 65 0 obj << /Title(Description) /Dest(4.11.40.2) /Parent 62 0 R /Prev 64 0 R /Next 66 0 R >> endobj 66 0 obj << /Title(Arguments) /Dest(4.11.41.2) /Parent 62 0 R /Prev 65 0 R /Next 67 0 R >> endobj 67 0 obj << /Title(Return Value) /Dest(4.11.42.2) /Parent 62 0 R /Prev 66 0 R /Next 68 0 R >> endobj 68 0 obj << /Title(Examples) /Dest(4.11.43.2) /Parent 62 0 R /Prev 67 0 R >> endobj 62 0 obj << /Title(pgselect) /Dest(4.11.1) /Count -6 /Parent 11 0 R /Prev 56 0 R /Next 69 0 R /First 63 0 R /Last 68 0 R >> endobj 70 0 obj << /Title(Name) /Dest(4.12.44.2) /Parent 69 0 R /Next 71 0 R >> endobj 71 0 obj << /Title(Synopsis) /Dest(4.12.45.2) /Parent 69 0 R /Prev 70 0 R /Next 72 0 R >> endobj 72 0 obj << /Title(Description) /Dest(4.12.46.2) /Parent 69 0 R /Prev 71 0 R /Next 73 0 R >> endobj 73 0 obj << /Title(Arguments) /Dest(4.12.47.2) /Parent 69 0 R /Prev 72 0 R /Next 74 0 R >> endobj 74 0 obj << /Title(Return Value) /Dest(4.12.48.2) /Parent 69 0 R /Prev 73 0 R /Next 75 0 R >> endobj 75 0 obj << /Title(Examples) /Dest(4.12.49.2) /Parent 69 0 R /Prev 74 0 R >> endobj 69 0 obj << /Title(pgexecute) /Dest(4.12.1) /Count -6 /Parent 11 0 R /Prev 62 0 R /Next 76 0 R /First 70 0 R /Last 75 0 R >> endobj 77 0 obj << /Title(Name) /Dest(4.13.50.2) /Parent 76 0 R /Next 78 0 R >> endobj 78 0 obj << /Title(Synopsis) /Dest(4.13.51.2) /Parent 76 0 R /Prev 77 0 R /Next 79 0 R >> endobj 79 0 obj << /Title(Description) /Dest(4.13.52.2) /Parent 76 0 R /Prev 78 0 R /Next 80 0 R >> endobj 80 0 obj << /Title(Arguments) /Dest(4.13.53.2) /Parent 76 0 R /Prev 79 0 R /Next 81 0 R >> endobj 81 0 obj << /Title(Return Value) /Dest(4.13.54.2) /Parent 76 0 R /Prev 80 0 R >> endobj 76 0 obj << /Title(pglisten) /Dest(4.13.1) /Count -5 /Parent 11 0 R /Prev 69 0 R /Next 82 0 R /First 77 0 R /Last 81 0 R >> endobj 83 0 obj << /Title(Name) /Dest(4.14.55.2) /Parent 82 0 R /Next 84 0 R >> endobj 84 0 obj << /Title(Synopsis) /Dest(4.14.56.2) /Parent 82 0 R /Prev 83 0 R /Next 85 0 R >> endobj 85 0 obj << /Title(Description) /Dest(4.14.57.2) /Parent 82 0 R /Prev 84 0 R /Next 86 0 R >> endobj 86 0 obj << /Title(Arguments) /Dest(4.14.58.2) /Parent 82 0 R /Prev 85 0 R /Next 87 0 R >> endobj 87 0 obj << /Title(Return Value) /Dest(4.14.59.2) /Parent 82 0 R /Prev 86 0 R >> endobj 82 0 obj << /Title(pgonconnectionloss) /Dest(4.14.1) /Count -5 /Parent 11 0 R /Prev 76 0 R /Next 88 0 R /First 83 0 R /Last 87 0 R >> endobj 89 0 obj << /Title(Name) /Dest(4.15.60.2) /Parent 88 0 R /Next 90 0 R >> endobj 90 0 obj << /Title(Synopsis) /Dest(4.15.61.2) /Parent 88 0 R /Prev 89 0 R /Next 91 0 R >> endobj 91 0 obj << /Title(Description) /Dest(4.15.62.2) /Parent 88 0 R /Prev 90 0 R /Next 92 0 R >> endobj 92 0 obj << /Title(Arguments) /Dest(4.15.63.2) /Parent 88 0 R /Prev 91 0 R /Next 93 0 R >> endobj 93 0 obj << /Title(Return Value) /Dest(4.15.64.2) /Parent 88 0 R /Prev 92 0 R >> endobj 88 0 obj << /Title(pgsendquery) /Dest(4.15.1) /Count -5 /Parent 11 0 R /Prev 82 0 R /Next 94 0 R /First 89 0 R /Last 93 0 R >> endobj 95 0 obj << /Title(Name) /Dest(4.16.65.2) /Parent 94 0 R /Next 96 0 R >> endobj 96 0 obj << /Title(Synopsis) /Dest(4.16.66.2) /Parent 94 0 R /Prev 95 0 R /Next 97 0 R >> endobj 97 0 obj << /Title(Description) /Dest(4.16.67.2) /Parent 94 0 R /Prev 96 0 R /Next 98 0 R >> endobj 98 0 obj << /Title(Arguments) /Dest(4.16.68.2) /Parent 94 0 R /Prev 97 0 R /Next 99 0 R >> endobj 99 0 obj << /Title(Return Value) /Dest(4.16.69.2) /Parent 94 0 R /Prev 98 0 R >> endobj 94 0 obj << /Title(pgsendqueryprepared) /Dest(4.16.1) /Count -5 /Parent 11 0 R /Prev 88 0 R /Next 100 0 R /First 95 0 R /Last 99 0 R >> endobj 101 0 obj << /Title(Name) /Dest(4.17.70.2) /Parent 100 0 R /Next 102 0 R >> endobj 102 0 obj << /Title(Synopsis) /Dest(4.17.71.2) /Parent 100 0 R /Prev 101 0 R /Next 103 0 R >> endobj 103 0 obj << /Title(Description) /Dest(4.17.72.2) /Parent 100 0 R /Prev 102 0 R /Next 104 0 R >> endobj 104 0 obj << /Title(Arguments) /Dest(4.17.73.2) /Parent 100 0 R /Prev 103 0 R /Next 105 0 R >> endobj 105 0 obj << /Title(Return Value) /Dest(4.17.74.2) /Parent 100 0 R /Prev 104 0 R >> endobj 100 0 obj << /Title(pggetresult) /Dest(4.17.1) /Count -5 /Parent 11 0 R /Prev 94 0 R /Next 106 0 R /First 101 0 R /Last 105 0 R >> endobj 107 0 obj << /Title(Name) /Dest(4.18.75.2) /Parent 106 0 R /Next 108 0 R >> endobj 108 0 obj << /Title(Synopsis) /Dest(4.18.76.2) /Parent 106 0 R /Prev 107 0 R /Next 109 0 R >> endobj 109 0 obj << /Title(Description) /Dest(4.18.77.2) /Parent 106 0 R /Prev 108 0 R /Next 110 0 R >> endobj 110 0 obj << /Title(Arguments) /Dest(4.18.78.2) /Parent 106 0 R /Prev 109 0 R /Next 111 0 R >> endobj 111 0 obj << /Title(Return Value) /Dest(4.18.79.2) /Parent 106 0 R /Prev 110 0 R >> endobj 106 0 obj << /Title(pgisbusy) /Dest(4.18.1) /Count -5 /Parent 11 0 R /Prev 100 0 R /Next 112 0 R /First 107 0 R /Last 111 0 R >> endobj 113 0 obj << /Title(Name) /Dest(4.19.80.2) /Parent 112 0 R /Next 114 0 R >> endobj 114 0 obj << /Title(Synopsis) /Dest(4.19.81.2) /Parent 112 0 R /Prev 113 0 R /Next 115 0 R >> endobj 115 0 obj << /Title(Description) /Dest(4.19.82.2) /Parent 112 0 R /Prev 114 0 R /Next 116 0 R >> endobj 116 0 obj << /Title(Arguments) /Dest(4.19.83.2) /Parent 112 0 R /Prev 115 0 R /Next 117 0 R >> endobj 117 0 obj << /Title(Return Value) /Dest(4.19.84.2) /Parent 112 0 R /Prev 116 0 R >> endobj 112 0 obj << /Title(pgblocking) /Dest(4.19.1) /Count -5 /Parent 11 0 R /Prev 106 0 R /Next 118 0 R /First 113 0 R /Last 117 0 R >> endobj 119 0 obj << /Title(Name) /Dest(4.20.85.2) /Parent 118 0 R /Next 120 0 R >> endobj 120 0 obj << /Title(Synopsis) /Dest(4.20.86.2) /Parent 118 0 R /Prev 119 0 R /Next 121 0 R >> endobj 121 0 obj << /Title(Description) /Dest(4.20.87.2) /Parent 118 0 R /Prev 120 0 R /Next 122 0 R >> endobj 122 0 obj << /Title(Arguments) /Dest(4.20.88.2) /Parent 118 0 R /Prev 121 0 R /Next 123 0 R >> endobj 123 0 obj << /Title(Return Value) /Dest(4.20.89.2) /Parent 118 0 R /Prev 122 0 R >> endobj 118 0 obj << /Title(pgcancelrequest) /Dest(4.20.1) /Count -5 /Parent 11 0 R /Prev 112 0 R /Next 124 0 R /First 119 0 R /Last 123 0 R >> endobj 125 0 obj << /Title(Name) /Dest(4.21.90.2) /Parent 124 0 R /Next 126 0 R >> endobj 126 0 obj << /Title(Synopsis) /Dest(4.21.91.2) /Parent 124 0 R /Prev 125 0 R /Next 127 0 R >> endobj 127 0 obj << /Title(Description) /Dest(4.21.92.2) /Parent 124 0 R /Prev 126 0 R /Next 128 0 R >> endobj 128 0 obj << /Title(Arguments) /Dest(4.21.93.2) /Parent 124 0 R /Prev 127 0 R /Next 129 0 R >> endobj 129 0 obj << /Title(Return Value) /Dest(4.21.94.2) /Parent 124 0 R /Prev 128 0 R >> endobj 124 0 obj << /Title(pgnullvaluestring) /Dest(4.21.1) /Count -5 /Parent 11 0 R /Prev 118 0 R /Next 130 0 R /First 125 0 R /Last 129 0 R >> endobj 131 0 obj << /Title(Name) /Dest(4.22.95.2) /Parent 130 0 R /Next 132 0 R >> endobj 132 0 obj << /Title(Synopsis) /Dest(4.22.96.2) /Parent 130 0 R /Prev 131 0 R /Next 133 0 R >> endobj 133 0 obj << /Title(Description) /Dest(4.22.97.2) /Parent 130 0 R /Prev 132 0 R /Next 134 0 R >> endobj 134 0 obj << /Title(Arguments) /Dest(4.22.98.2) /Parent 130 0 R /Prev 133 0 R /Next 135 0 R >> endobj 135 0 obj << /Title(Return Value) /Dest(4.22.99.2) /Parent 130 0 R /Prev 134 0 R /Next 136 0 R >> endobj 136 0 obj << /Title(See Also) /Dest(4.22.100.2) /Parent 130 0 R /Prev 135 0 R >> endobj 130 0 obj << /Title(pgquote) /Dest(4.22.1) /Count -6 /Parent 11 0 R /Prev 124 0 R /Next 137 0 R /First 131 0 R /Last 136 0 R >> endobj 138 0 obj << /Title(Name) /Dest(4.23.101.2) /Parent 137 0 R /Next 139 0 R >> endobj 139 0 obj << /Title(Synopsis) /Dest(4.23.102.2) /Parent 137 0 R /Prev 138 0 R /Next 140 0 R >> endobj 140 0 obj << /Title(Description) /Dest(4.23.103.2) /Parent 137 0 R /Prev 139 0 R /Next 141 0 R >> endobj 141 0 obj << /Title(Arguments) /Dest(4.23.104.2) /Parent 137 0 R /Prev 140 0 R /Next 142 0 R >> endobj 142 0 obj << /Title(Return Value) /Dest(4.23.105.2) /Parent 137 0 R /Prev 141 0 R /Next 143 0 R >> endobj 143 0 obj << /Title(See Also) /Dest(4.23.106.2) /Parent 137 0 R /Prev 142 0 R >> endobj 137 0 obj << /Title(pgescapestring) /Dest(4.23.1) /Count -6 /Parent 11 0 R /Prev 130 0 R /Next 144 0 R /First 138 0 R /Last 143 0 R >> endobj 145 0 obj << /Title(Name) /Dest(4.24.107.2) /Parent 144 0 R /Next 146 0 R >> endobj 146 0 obj << /Title(Synopsis) /Dest(4.24.108.2) /Parent 144 0 R /Prev 145 0 R /Next 147 0 R >> endobj 147 0 obj << /Title(Description) /Dest(4.24.109.2) /Parent 144 0 R /Prev 146 0 R /Next 148 0 R >> endobj 148 0 obj << /Title(Arguments) /Dest(4.24.110.2) /Parent 144 0 R /Prev 147 0 R /Next 149 0 R >> endobj 149 0 obj << /Title(Return Value) /Dest(4.24.111.2) /Parent 144 0 R /Prev 148 0 R >> endobj 144 0 obj << /Title(pgescapebytea) /Dest(4.24.1) /Count -5 /Parent 11 0 R /Prev 137 0 R /Next 150 0 R /First 145 0 R /Last 149 0 R >> endobj 151 0 obj << /Title(Name) /Dest(4.25.112.2) /Parent 150 0 R /Next 152 0 R >> endobj 152 0 obj << /Title(Synopsis) /Dest(4.25.113.2) /Parent 150 0 R /Prev 151 0 R /Next 153 0 R >> endobj 153 0 obj << /Title(Description) /Dest(4.25.114.2) /Parent 150 0 R /Prev 152 0 R /Next 154 0 R >> endobj 154 0 obj << /Title(Arguments) /Dest(4.25.115.2) /Parent 150 0 R /Prev 153 0 R /Next 155 0 R >> endobj 155 0 obj << /Title(Return Value) /Dest(4.25.116.2) /Parent 150 0 R /Prev 154 0 R >> endobj 150 0 obj << /Title(pgunescapebytea) /Dest(4.25.1) /Count -5 /Parent 11 0 R /Prev 144 0 R /Next 156 0 R /First 151 0 R /Last 155 0 R >> endobj 157 0 obj << /Title(Name) /Dest(4.26.117.2) /Parent 156 0 R /Next 158 0 R >> endobj 158 0 obj << /Title(Synopsis) /Dest(4.26.118.2) /Parent 156 0 R /Prev 157 0 R /Next 159 0 R >> endobj 159 0 obj << /Title(Description) /Dest(4.26.119.2) /Parent 156 0 R /Prev 158 0 R /Next 160 0 R >> endobj 160 0 obj << /Title(Arguments) /Dest(4.26.120.2) /Parent 156 0 R /Prev 159 0 R /Next 161 0 R >> endobj 161 0 obj << /Title(Return Value) /Dest(4.26.121.2) /Parent 156 0 R /Prev 160 0 R >> endobj 156 0 obj << /Title(pglocreat) /Dest(4.26.1) /Count -5 /Parent 11 0 R /Prev 150 0 R /Next 162 0 R /First 157 0 R /Last 161 0 R >> endobj 163 0 obj << /Title(Name) /Dest(4.27.122.2) /Parent 162 0 R /Next 164 0 R >> endobj 164 0 obj << /Title(Synopsis) /Dest(4.27.123.2) /Parent 162 0 R /Prev 163 0 R /Next 165 0 R >> endobj 165 0 obj << /Title(Description) /Dest(4.27.124.2) /Parent 162 0 R /Prev 164 0 R /Next 166 0 R >> endobj 166 0 obj << /Title(Arguments) /Dest(4.27.125.2) /Parent 162 0 R /Prev 165 0 R /Next 167 0 R >> endobj 167 0 obj << /Title(Return Value) /Dest(4.27.126.2) /Parent 162 0 R /Prev 166 0 R >> endobj 162 0 obj << /Title(pgloopen) /Dest(4.27.1) /Count -5 /Parent 11 0 R /Prev 156 0 R /Next 168 0 R /First 163 0 R /Last 167 0 R >> endobj 169 0 obj << /Title(Name) /Dest(4.28.127.2) /Parent 168 0 R /Next 170 0 R >> endobj 170 0 obj << /Title(Synopsis) /Dest(4.28.128.2) /Parent 168 0 R /Prev 169 0 R /Next 171 0 R >> endobj 171 0 obj << /Title(Description) /Dest(4.28.129.2) /Parent 168 0 R /Prev 170 0 R /Next 172 0 R >> endobj 172 0 obj << /Title(Arguments) /Dest(4.28.130.2) /Parent 168 0 R /Prev 171 0 R /Next 173 0 R >> endobj 173 0 obj << /Title(Return Value) /Dest(4.28.131.2) /Parent 168 0 R /Prev 172 0 R >> endobj 168 0 obj << /Title(pgloclose) /Dest(4.28.1) /Count -5 /Parent 11 0 R /Prev 162 0 R /Next 174 0 R /First 169 0 R /Last 173 0 R >> endobj 175 0 obj << /Title(Name) /Dest(4.29.132.2) /Parent 174 0 R /Next 176 0 R >> endobj 176 0 obj << /Title(Synopsis) /Dest(4.29.133.2) /Parent 174 0 R /Prev 175 0 R /Next 177 0 R >> endobj 177 0 obj << /Title(Description) /Dest(4.29.134.2) /Parent 174 0 R /Prev 176 0 R /Next 178 0 R >> endobj 178 0 obj << /Title(Arguments) /Dest(4.29.135.2) /Parent 174 0 R /Prev 177 0 R /Next 179 0 R >> endobj 179 0 obj << /Title(Return Value) /Dest(4.29.136.2) /Parent 174 0 R /Prev 178 0 R >> endobj 174 0 obj << /Title(pgloread) /Dest(4.29.1) /Count -5 /Parent 11 0 R /Prev 168 0 R /Next 180 0 R /First 175 0 R /Last 179 0 R >> endobj 181 0 obj << /Title(Name) /Dest(4.30.137.2) /Parent 180 0 R /Next 182 0 R >> endobj 182 0 obj << /Title(Synopsis) /Dest(4.30.138.2) /Parent 180 0 R /Prev 181 0 R /Next 183 0 R >> endobj 183 0 obj << /Title(Description) /Dest(4.30.139.2) /Parent 180 0 R /Prev 182 0 R /Next 184 0 R >> endobj 184 0 obj << /Title(Arguments) /Dest(4.30.140.2) /Parent 180 0 R /Prev 183 0 R /Next 185 0 R >> endobj 185 0 obj << /Title(Return Value) /Dest(4.30.141.2) /Parent 180 0 R /Prev 184 0 R >> endobj 180 0 obj << /Title(pglowrite) /Dest(4.30.1) /Count -5 /Parent 11 0 R /Prev 174 0 R /Next 186 0 R /First 181 0 R /Last 185 0 R >> endobj 187 0 obj << /Title(Name) /Dest(4.31.142.2) /Parent 186 0 R /Next 188 0 R >> endobj 188 0 obj << /Title(Synopsis) /Dest(4.31.143.2) /Parent 186 0 R /Prev 187 0 R /Next 189 0 R >> endobj 189 0 obj << /Title(Description) /Dest(4.31.144.2) /Parent 186 0 R /Prev 188 0 R /Next 190 0 R >> endobj 190 0 obj << /Title(Arguments) /Dest(4.31.145.2) /Parent 186 0 R /Prev 189 0 R /Next 191 0 R >> endobj 191 0 obj << /Title(Return Value) /Dest(4.31.146.2) /Parent 186 0 R /Prev 190 0 R >> endobj 186 0 obj << /Title(pglolseek) /Dest(4.31.1) /Count -5 /Parent 11 0 R /Prev 180 0 R /Next 192 0 R /First 187 0 R /Last 191 0 R >> endobj 193 0 obj << /Title(Name) /Dest(4.32.147.2) /Parent 192 0 R /Next 194 0 R >> endobj 194 0 obj << /Title(Synopsis) /Dest(4.32.148.2) /Parent 192 0 R /Prev 193 0 R /Next 195 0 R >> endobj 195 0 obj << /Title(Description) /Dest(4.32.149.2) /Parent 192 0 R /Prev 194 0 R /Next 196 0 R >> endobj 196 0 obj << /Title(Arguments) /Dest(4.32.150.2) /Parent 192 0 R /Prev 195 0 R /Next 197 0 R >> endobj 197 0 obj << /Title(Return Value) /Dest(4.32.151.2) /Parent 192 0 R /Prev 196 0 R >> endobj 192 0 obj << /Title(pglotell) /Dest(4.32.1) /Count -5 /Parent 11 0 R /Prev 186 0 R /Next 198 0 R /First 193 0 R /Last 197 0 R >> endobj 199 0 obj << /Title(Name) /Dest(4.33.152.2) /Parent 198 0 R /Next 200 0 R >> endobj 200 0 obj << /Title(Synopsis) /Dest(4.33.153.2) /Parent 198 0 R /Prev 199 0 R /Next 201 0 R >> endobj 201 0 obj << /Title(Description) /Dest(4.33.154.2) /Parent 198 0 R /Prev 200 0 R /Next 202 0 R >> endobj 202 0 obj << /Title(Arguments) /Dest(4.33.155.2) /Parent 198 0 R /Prev 201 0 R /Next 203 0 R >> endobj 203 0 obj << /Title(Return Value) /Dest(4.33.156.2) /Parent 198 0 R /Prev 202 0 R >> endobj 198 0 obj << /Title(pglotruncate) /Dest(4.33.1) /Count -5 /Parent 11 0 R /Prev 192 0 R /Next 204 0 R /First 199 0 R /Last 203 0 R >> endobj 205 0 obj << /Title(Name) /Dest(4.34.157.2) /Parent 204 0 R /Next 206 0 R >> endobj 206 0 obj << /Title(Synopsis) /Dest(4.34.158.2) /Parent 204 0 R /Prev 205 0 R /Next 207 0 R >> endobj 207 0 obj << /Title(Description) /Dest(4.34.159.2) /Parent 204 0 R /Prev 206 0 R /Next 208 0 R >> endobj 208 0 obj << /Title(Arguments) /Dest(4.34.160.2) /Parent 204 0 R /Prev 207 0 R /Next 209 0 R >> endobj 209 0 obj << /Title(Return Value) /Dest(4.34.161.2) /Parent 204 0 R /Prev 208 0 R >> endobj 204 0 obj << /Title(pglounlink) /Dest(4.34.1) /Count -5 /Parent 11 0 R /Prev 198 0 R /Next 210 0 R /First 205 0 R /Last 209 0 R >> endobj 211 0 obj << /Title(Name) /Dest(4.35.162.2) /Parent 210 0 R /Next 212 0 R >> endobj 212 0 obj << /Title(Synopsis) /Dest(4.35.163.2) /Parent 210 0 R /Prev 211 0 R /Next 213 0 R >> endobj 213 0 obj << /Title(Description) /Dest(4.35.164.2) /Parent 210 0 R /Prev 212 0 R /Next 214 0 R >> endobj 214 0 obj << /Title(Arguments) /Dest(4.35.165.2) /Parent 210 0 R /Prev 213 0 R /Next 215 0 R >> endobj 215 0 obj << /Title(Return Value) /Dest(4.35.166.2) /Parent 210 0 R /Prev 214 0 R /Next 216 0 R >> endobj 216 0 obj << /Title(Notes) /Dest(4.35.167.2) /Parent 210 0 R /Prev 215 0 R >> endobj 210 0 obj << /Title(pgloimport) /Dest(4.35.1) /Count -6 /Parent 11 0 R /Prev 204 0 R /Next 217 0 R /First 211 0 R /Last 216 0 R >> endobj 218 0 obj << /Title(Name) /Dest(4.36.168.2) /Parent 217 0 R /Next 219 0 R >> endobj 219 0 obj << /Title(Synopsis) /Dest(4.36.169.2) /Parent 217 0 R /Prev 218 0 R /Next 220 0 R >> endobj 220 0 obj << /Title(Description) /Dest(4.36.170.2) /Parent 217 0 R /Prev 219 0 R /Next 221 0 R >> endobj 221 0 obj << /Title(Arguments) /Dest(4.36.171.2) /Parent 217 0 R /Prev 220 0 R /Next 222 0 R >> endobj 222 0 obj << /Title(Return Value) /Dest(4.36.172.2) /Parent 217 0 R /Prev 221 0 R /Next 223 0 R >> endobj 223 0 obj << /Title(Notes) /Dest(4.36.173.2) /Parent 217 0 R /Prev 222 0 R >> endobj 217 0 obj << /Title(pgloexport) /Dest(4.36.1) /Count -6 /Parent 11 0 R /Prev 210 0 R /Next 224 0 R /First 218 0 R /Last 223 0 R >> endobj 225 0 obj << /Title(Name) /Dest(4.37.174.2) /Parent 224 0 R /Next 226 0 R >> endobj 226 0 obj << /Title(Synopsis) /Dest(4.37.175.2) /Parent 224 0 R /Prev 225 0 R /Next 227 0 R >> endobj 227 0 obj << /Title(Description) /Dest(4.37.176.2) /Parent 224 0 R /Prev 226 0 R /Next 228 0 R >> endobj 228 0 obj << /Title(Arguments) /Dest(4.37.177.2) /Parent 224 0 R /Prev 227 0 R /Next 229 0 R >> endobj 229 0 obj << /Title(Commands) /Dest(4.37.178.2) /Parent 224 0 R /Prev 228 0 R /Next 230 0 R >> endobj 230 0 obj << /Title(Types) /Dest(4.37.179.2) /Parent 224 0 R /Prev 229 0 R /Next 231 0 R >> endobj 231 0 obj << /Title(Return Value) /Dest(4.37.180.2) /Parent 224 0 R /Prev 230 0 R /Next 232 0 R >> endobj 232 0 obj << /Title(See Also) /Dest(4.37.181.2) /Parent 224 0 R /Prev 231 0 R >> endobj 224 0 obj << /Title(pgsqlite) /Dest(4.37.1) /Count -8 /Parent 11 0 R /Prev 217 0 R /Next 233 0 R /First 225 0 R /Last 232 0 R >> endobj 234 0 obj << /Title(Name) /Dest(4.38.182.2) /Parent 233 0 R /Next 235 0 R >> endobj 235 0 obj << /Title(Synopsis) /Dest(4.38.183.2) /Parent 233 0 R /Prev 234 0 R /Next 236 0 R >> endobj 236 0 obj << /Title(Description) /Dest(4.38.184.2) /Parent 233 0 R /Prev 235 0 R /Next 237 0 R >> endobj 237 0 obj << /Title(Arguments) /Dest(4.38.185.2) /Parent 233 0 R /Prev 236 0 R >> endobj 233 0 obj << /Title(pgcopycomplete) /Dest(4.38.1) /Count -4 /Parent 11 0 R /Prev 224 0 R /Next 238 0 R /First 234 0 R /Last 237 0 R >> endobj 239 0 obj << /Title(Name) /Dest(4.39.186.2) /Parent 238 0 R /Next 240 0 R >> endobj 240 0 obj << /Title(Synopsis) /Dest(4.39.187.2) /Parent 238 0 R /Prev 239 0 R /Next 241 0 R >> endobj 241 0 obj << /Title(Description) /Dest(4.39.188.2) /Parent 238 0 R /Prev 240 0 R /Next 242 0 R >> endobj 242 0 obj << /Title(Parameters) /Dest(4.39.189.2) /Parent 238 0 R /Prev 241 0 R /Next 243 0 R >> endobj 243 0 obj << /Title(Returns) /Dest(4.39.190.2) /Parent 238 0 R /Prev 242 0 R >> endobj 238 0 obj << /Title(PgGetConnectionId) /Dest(4.39.1) /Count -5 /Parent 11 0 R /Prev 233 0 R /Next 244 0 R /First 239 0 R /Last 243 0 R >> endobj 244 0 obj << /Title(1.4. Tcl Namespace Support) /Dest(4.40.1) /Parent 11 0 R /Prev 238 0 R /Next 245 0 R >> endobj 245 0 obj << /Title(1.5. Connection/result handles as commands) /Dest(4.41.1) /Parent 11 0 R /Prev 244 0 R /Next 246 0 R >> endobj 246 0 obj << /Title(1.6. Example Program) /Dest(4.42.1) /Parent 11 0 R /Prev 245 0 R >> endobj 247 0 obj <>endobj 248 0 obj <>endobj 251 0 obj <>endobj 254 0 obj <>endobj 255 0 obj <> endobj 256 0 obj <> endobj 258 0 obj <>endobj 263 0 obj <> endobj 264 0 obj <> endobj 266 0 obj <>endobj 269 0 obj <>endobj 270 0 obj <>endobj 273 0 obj <>endobj 274 0 obj <>endobj 275 0 obj <>endobj 276 0 obj <>endobj 277 0 obj <>endobj 278 0 obj <>endobj 279 0 obj <>endobj 280 0 obj <>endobj 281 0 obj <>endobj 282 0 obj <>endobj 283 0 obj <>endobj 284 0 obj <>endobj 285 0 obj <>endobj 286 0 obj <>endobj 287 0 obj <>endobj 288 0 obj <>endobj 289 0 obj <>endobj 290 0 obj <>endobj 291 0 obj <>endobj 292 0 obj <>endobj 293 0 obj <>endobj 294 0 obj <>endobj 295 0 obj <>endobj 296 0 obj <>endobj 297 0 obj <>endobj 298 0 obj <>endobj 299 0 obj <>endobj 300 0 obj <>endobj 301 0 obj <>endobj 302 0 obj <>endobj 303 0 obj <>endobj 304 0 obj <>endobj 305 0 obj <>endobj 306 0 obj <>endobj 307 0 obj <>endobj 308 0 obj <>endobj 309 0 obj <>endobj 310 0 obj <>endobj 311 0 obj <>endobj 312 0 obj <>endobj 313 0 obj <>endobj 314 0 obj <>endobj 315 0 obj <>endobj 316 0 obj <>endobj 317 0 obj <>endobj 318 0 obj <>endobj 319 0 obj <>endobj 320 0 obj <>endobj 321 0 obj <>endobj 322 0 obj <>endobj 323 0 obj <>endobj 324 0 obj <>endobj 325 0 obj <>endobj 326 0 obj <>endobj 327 0 obj <>endobj 328 0 obj <>endobj 329 0 obj <>endobj 330 0 obj <>endobj 331 0 obj <>endobj 332 0 obj <>endobj 333 0 obj <>endobj 334 0 obj <>endobj 335 0 obj <>endobj 336 0 obj <>endobj 337 0 obj <>endobj 338 0 obj <>endobj 339 0 obj <>endobj 340 0 obj <>endobj 341 0 obj <>endobj 342 0 obj <>endobj 343 0 obj <>endobj 344 0 obj <>endobj 345 0 obj <>endobj 346 0 obj <>endobj 347 0 obj <>endobj 348 0 obj <>endobj 349 0 obj <>endobj 350 0 obj <>endobj 351 0 obj <>endobj 352 0 obj <>endobj 353 0 obj <>endobj 354 0 obj <>endobj 355 0 obj <>endobj 356 0 obj <>endobj 357 0 obj <>endobj 360 0 obj <> endobj 361 0 obj <> endobj 363 0 obj <>endobj 366 0 obj <>endobj 367 0 obj <>endobj 368 0 obj <>endobj 369 0 obj <>endobj 370 0 obj <>endobj 371 0 obj <> endobj 372 0 obj <> endobj 374 0 obj <>endobj 375 0 obj <>endobj 378 0 obj <>endobj 379 0 obj <>endobj 380 0 obj <>endobj 381 0 obj <>endobj 382 0 obj <>endobj 383 0 obj <>endobj 384 0 obj <>endobj 385 0 obj <>endobj 386 0 obj <>endobj 387 0 obj <>endobj 388 0 obj <>endobj 389 0 obj <>endobj 390 0 obj <>endobj 391 0 obj <>endobj 392 0 obj <>endobj 393 0 obj <>endobj 396 0 obj <> endobj 397 0 obj <> endobj 399 0 obj <>endobj 402 0 obj <>endobj 403 0 obj <>endobj 404 0 obj <>endobj 405 0 obj <>endobj 406 0 obj <>endobj 407 0 obj <>endobj 408 0 obj <>endobj 409 0 obj <>endobj 410 0 obj <>endobj 411 0 obj <>endobj 412 0 obj <>endobj 413 0 obj <>endobj 414 0 obj <>endobj 415 0 obj <> endobj 416 0 obj <> endobj 418 0 obj <>endobj 419 0 obj <>endobj 422 0 obj <>endobj 423 0 obj <>endobj 424 0 obj <>endobj 425 0 obj <>endobj 426 0 obj <>endobj 427 0 obj <>endobj 428 0 obj <>endobj 429 0 obj <>endobj 430 0 obj <>endobj 431 0 obj <>endobj 432 0 obj <>endobj 433 0 obj <>endobj 434 0 obj <>endobj 435 0 obj <>endobj 436 0 obj <>endobj 437 0 obj <>endobj 438 0 obj <>endobj 439 0 obj <>endobj 440 0 obj <>endobj 441 0 obj <>endobj 442 0 obj <>endobj 443 0 obj <>endobj 444 0 obj <>endobj 445 0 obj <>endobj 446 0 obj <>endobj 447 0 obj <>endobj 448 0 obj <>endobj 449 0 obj <>endobj 450 0 obj <>endobj 451 0 obj <>endobj 452 0 obj <>endobj 453 0 obj <>endobj 454 0 obj <>endobj 455 0 obj <>endobj 456 0 obj <>endobj 457 0 obj <>endobj 458 0 obj <>endobj 459 0 obj <>endobj 460 0 obj <>endobj 461 0 obj <>endobj 462 0 obj <>endobj 463 0 obj <> endobj 464 0 obj <> endobj 466 0 obj <>endobj 469 0 obj <>endobj 470 0 obj <>endobj 471 0 obj <>endobj 472 0 obj <>endobj 473 0 obj <>endobj 474 0 obj <>endobj 475 0 obj <>endobj 476 0 obj <>endobj 477 0 obj <>endobj 478 0 obj <>endobj 479 0 obj <>endobj 480 0 obj <>endobj 481 0 obj <>endobj 482 0 obj <>endobj 483 0 obj <>endobj 484 0 obj <>endobj 485 0 obj <>endobj 486 0 obj <>endobj 489 0 obj <>endobj 490 0 obj <>endobj 491 0 obj <>endobj 492 0 obj <>endobj 493 0 obj <>endobj 494 0 obj <>endobj 495 0 obj <>endobj 496 0 obj <>endobj 497 0 obj <>endobj 498 0 obj <>endobj 499 0 obj <>endobj 500 0 obj <>endobj 501 0 obj <>endobj 502 0 obj <>endobj 503 0 obj <>endobj 504 0 obj <>endobj 505 0 obj <>endobj 506 0 obj <>endobj 507 0 obj <>endobj 508 0 obj <>endobj 509 0 obj <>endobj 510 0 obj <>endobj 511 0 obj <>endobj 512 0 obj <>endobj 513 0 obj <>endobj 514 0 obj <>endobj 515 0 obj <>endobj 516 0 obj <>endobj 517 0 obj <>endobj 518 0 obj <>endobj 519 0 obj <>endobj 520 0 obj <>endobj 521 0 obj <>endobj 522 0 obj <>endobj 523 0 obj <>endobj 524 0 obj <>endobj 525 0 obj <>endobj 526 0 obj <>endobj 527 0 obj <>endobj 528 0 obj <>endobj 529 0 obj <>endobj 530 0 obj <>endobj 531 0 obj <>endobj 532 0 obj <>endobj 533 0 obj <>endobj 534 0 obj <>endobj 535 0 obj <>endobj 536 0 obj <> endobj 537 0 obj <> endobj 539 0 obj <>endobj 542 0 obj <>endobj 543 0 obj <>endobj 544 0 obj <>endobj 545 0 obj <>endobj 546 0 obj <>endobj 547 0 obj <>endobj 548 0 obj <>endobj 549 0 obj <>endobj 550 0 obj <>endobj 551 0 obj <>endobj 552 0 obj <>endobj 553 0 obj <>endobj 554 0 obj <>endobj 555 0 obj <>endobj 556 0 obj <>endobj 557 0 obj <>endobj 558 0 obj <>endobj 559 0 obj <>endobj 560 0 obj <>endobj 561 0 obj <>endobj 562 0 obj <>endobj 563 0 obj <>endobj 564 0 obj <>endobj 565 0 obj <>endobj 566 0 obj <>endobj 567 0 obj <>endobj 568 0 obj <>endobj 569 0 obj <>endobj 570 0 obj <>endobj 571 0 obj <>endobj 572 0 obj <>endobj 573 0 obj <>endobj 574 0 obj <>endobj 575 0 obj <>endobj 576 0 obj <>endobj 577 0 obj <>endobj 578 0 obj <>endobj 579 0 obj <>endobj 580 0 obj <>endobj 581 0 obj <>endobj 582 0 obj <>endobj 583 0 obj <>endobj 584 0 obj <>endobj 585 0 obj <>endobj 586 0 obj <>endobj 587 0 obj <>endobj 588 0 obj <>endobj 589 0 obj <>endobj 590 0 obj <>endobj 591 0 obj <>endobj 592 0 obj <>endobj 593 0 obj <>endobj 594 0 obj <>endobj 595 0 obj <>endobj 596 0 obj <>endobj 597 0 obj <> endobj 598 0 obj <> endobj 600 0 obj <>endobj 603 0 obj <>endobj 604 0 obj <>endobj 605 0 obj <>endobj 606 0 obj <>endobj 607 0 obj <>endobj 608 0 obj <>endobj 609 0 obj <>endobj 610 0 obj <>endobj 611 0 obj <>endobj 612 0 obj <>endobj 613 0 obj <>endobj 614 0 obj <>endobj 615 0 obj <>endobj 616 0 obj <>endobj 617 0 obj <>endobj 618 0 obj <>endobj 619 0 obj <>endobj 620 0 obj <>endobj 621 0 obj <>endobj 622 0 obj <>endobj 623 0 obj <>endobj 624 0 obj <>endobj 625 0 obj <>endobj 626 0 obj <>endobj 627 0 obj <>endobj 628 0 obj <>endobj 629 0 obj <>endobj 630 0 obj <>endobj 631 0 obj <>endobj 632 0 obj <>endobj 633 0 obj <>endobj 634 0 obj <>endobj 635 0 obj <>endobj 636 0 obj <>endobj 637 0 obj <>endobj 638 0 obj <>endobj 639 0 obj <>endobj 640 0 obj <>endobj 641 0 obj <>endobj 642 0 obj <>endobj 643 0 obj <>endobj 644 0 obj <>endobj 645 0 obj <>endobj 646 0 obj <>endobj 647 0 obj <>endobj 648 0 obj <>endobj 649 0 obj <>endobj 650 0 obj <>endobj 651 0 obj <>endobj 652 0 obj <>endobj 653 0 obj <>endobj 654 0 obj <>endobj 655 0 obj <>endobj 656 0 obj <>endobj 657 0 obj <>endobj 658 0 obj <>endobj 659 0 obj <>endobj 660 0 obj <>endobj 661 0 obj <>endobj 662 0 obj <>endobj 663 0 obj <>endobj 664 0 obj <>endobj 665 0 obj <>endobj 666 0 obj <>endobj 667 0 obj <>endobj 668 0 obj <>endobj 669 0 obj <>endobj 670 0 obj <>endobj 671 0 obj <> endobj 672 0 obj <> endobj 674 0 obj <>endobj 675 0 obj <>endobj 678 0 obj <>endobj 679 0 obj <>endobj 680 0 obj <>endobj 681 0 obj <>endobj 682 0 obj <>endobj 683 0 obj <>endobj 684 0 obj <>endobj 685 0 obj <>endobj 686 0 obj <>endobj 687 0 obj <>endobj 688 0 obj <>endobj 689 0 obj <>endobj 690 0 obj <>endobj 691 0 obj <>endobj 692 0 obj <>endobj 693 0 obj <>endobj 694 0 obj <>endobj 695 0 obj <>endobj 696 0 obj <>endobj 697 0 obj <>endobj 698 0 obj <>endobj 699 0 obj <>endobj 700 0 obj <>endobj 701 0 obj <>endobj 702 0 obj <>endobj 703 0 obj <>endobj 704 0 obj <>endobj 705 0 obj <>endobj 706 0 obj <>endobj 707 0 obj <>endobj 708 0 obj <>endobj 709 0 obj <>endobj 710 0 obj <>endobj 711 0 obj <>endobj 712 0 obj <>endobj 713 0 obj <>endobj 714 0 obj <>endobj 715 0 obj <>endobj 716 0 obj <>endobj 717 0 obj <>endobj 718 0 obj <>endobj 719 0 obj <>endobj 720 0 obj <>endobj 721 0 obj <>endobj 722 0 obj <>endobj 723 0 obj <>endobj 724 0 obj <>endobj 725 0 obj <>endobj 726 0 obj <>endobj 727 0 obj <>endobj 728 0 obj <>endobj 729 0 obj <>endobj 730 0 obj <> endobj 731 0 obj <> endobj 733 0 obj <>endobj 734 0 obj <>endobj 737 0 obj <>endobj 738 0 obj <>endobj 739 0 obj <>endobj 740 0 obj <>endobj 741 0 obj <>endobj 742 0 obj <>endobj 743 0 obj <>endobj 744 0 obj <>endobj 745 0 obj <>endobj 746 0 obj <>endobj 747 0 obj <>endobj 748 0 obj <>endobj 749 0 obj <>endobj 750 0 obj <>endobj 751 0 obj <>endobj 752 0 obj <>endobj 753 0 obj <>endobj 754 0 obj <>endobj 755 0 obj <>endobj 756 0 obj <>endobj 757 0 obj <>endobj 758 0 obj <>endobj 759 0 obj <>endobj 760 0 obj <>endobj 761 0 obj <>endobj 762 0 obj <>endobj 763 0 obj <>endobj 764 0 obj <>endobj 765 0 obj <>endobj 766 0 obj <>endobj 767 0 obj <>endobj 768 0 obj <>endobj 769 0 obj <>endobj 770 0 obj <>endobj 771 0 obj <>endobj 772 0 obj <>endobj 773 0 obj <>endobj 774 0 obj <> endobj 775 0 obj <> endobj 777 0 obj <>endobj 778 0 obj <>endobj 781 0 obj <>endobj 782 0 obj <>endobj 783 0 obj <>endobj 784 0 obj <>endobj 785 0 obj <>endobj 786 0 obj <>endobj 787 0 obj <>endobj 788 0 obj <>endobj 789 0 obj <>endobj 790 0 obj <>endobj 791 0 obj <>endobj 792 0 obj <>endobj 793 0 obj <>endobj 794 0 obj <>endobj 795 0 obj <>endobj 796 0 obj <>endobj 797 0 obj <>endobj 798 0 obj <>endobj 799 0 obj <>endobj 800 0 obj <>endobj 801 0 obj <>endobj 802 0 obj <>endobj 803 0 obj <>endobj 804 0 obj <>endobj 805 0 obj <>endobj 806 0 obj <>endobj 807 0 obj <>endobj 808 0 obj <>endobj 809 0 obj <>endobj 810 0 obj <>endobj 811 0 obj <>endobj 812 0 obj <>endobj 813 0 obj <>endobj 814 0 obj <>endobj 815 0 obj <>endobj 816 0 obj <>endobj 817 0 obj <>endobj 818 0 obj <>endobj 819 0 obj <>endobj 820 0 obj <>endobj 821 0 obj <>endobj 822 0 obj <>endobj 823 0 obj <>endobj 824 0 obj <>endobj 825 0 obj <>endobj 826 0 obj <>endobj 827 0 obj <>endobj 828 0 obj <>endobj 829 0 obj <>endobj 830 0 obj <>endobj 831 0 obj <>endobj 832 0 obj <>endobj 833 0 obj <>endobj 834 0 obj <>endobj 835 0 obj <>endobj 836 0 obj <>endobj 837 0 obj <>endobj 838 0 obj <>endobj 839 0 obj <> endobj 840 0 obj <> endobj 842 0 obj <>endobj 843 0 obj <>endobj 846 0 obj <>endobj 847 0 obj <>endobj 848 0 obj <>endobj 849 0 obj <>endobj 850 0 obj <>endobj 851 0 obj <>endobj 852 0 obj <>endobj 853 0 obj <>endobj 854 0 obj <>endobj 855 0 obj <>endobj 856 0 obj <>endobj 857 0 obj <>endobj 858 0 obj <>endobj 859 0 obj <>endobj 860 0 obj <>endobj 861 0 obj <>endobj 862 0 obj <>endobj 863 0 obj <>endobj 864 0 obj <>endobj 865 0 obj <>endobj 866 0 obj <>endobj 867 0 obj <>endobj 868 0 obj <>endobj 869 0 obj <>endobj 870 0 obj <>endobj 871 0 obj <>endobj 872 0 obj <>endobj 873 0 obj <>endobj 874 0 obj <>endobj 875 0 obj <>endobj 876 0 obj <>endobj 877 0 obj <>endobj 878 0 obj <>endobj 879 0 obj <>endobj 880 0 obj <>endobj 881 0 obj <> endobj 882 0 obj <> endobj 884 0 obj <>endobj 885 0 obj <>endobj 888 0 obj <>endobj 889 0 obj <>endobj 890 0 obj <>endobj 891 0 obj <>endobj 892 0 obj <>endobj 893 0 obj <>endobj 894 0 obj <>endobj 895 0 obj <>endobj 896 0 obj <>endobj 897 0 obj <>endobj 898 0 obj <>endobj 899 0 obj <>endobj 900 0 obj <>endobj 901 0 obj <>endobj 902 0 obj <>endobj 903 0 obj <>endobj 904 0 obj <>endobj 905 0 obj <>endobj 906 0 obj <>endobj 907 0 obj <>endobj 908 0 obj <>endobj 909 0 obj <>endobj 910 0 obj <>endobj 911 0 obj <>endobj 912 0 obj <>endobj 913 0 obj <>endobj 914 0 obj <>endobj 915 0 obj <>endobj 916 0 obj <>endobj 917 0 obj <>endobj 918 0 obj <>endobj 919 0 obj <>endobj 920 0 obj <>endobj 921 0 obj <>endobj 922 0 obj <> endobj 923 0 obj <> endobj 925 0 obj <>endobj 928 0 obj <>endobj 929 0 obj <>endobj 930 0 obj <>endobj 931 0 obj <>endobj 932 0 obj <>endobj 933 0 obj <>endobj 934 0 obj <>endobj 935 0 obj <>endobj 936 0 obj <>endobj 937 0 obj <>endobj 938 0 obj <>endobj 939 0 obj <>endobj 940 0 obj <>endobj 941 0 obj <>endobj 942 0 obj <>endobj 943 0 obj <>endobj 944 0 obj <>endobj 945 0 obj <>endobj 946 0 obj <>endobj 947 0 obj <>endobj 948 0 obj <>endobj 949 0 obj <>endobj 950 0 obj <>endobj 951 0 obj <>endobj 952 0 obj <>endobj 953 0 obj <>endobj 954 0 obj <>endobj 955 0 obj <>endobj 956 0 obj <>endobj 957 0 obj <>endobj 958 0 obj <>endobj 959 0 obj <>endobj 960 0 obj <>endobj 961 0 obj <>endobj 962 0 obj <>endobj 963 0 obj <> endobj 964 0 obj <> endobj 966 0 obj <>endobj 969 0 obj <>endobj 970 0 obj <>endobj 971 0 obj <>endobj 972 0 obj <>endobj 973 0 obj <>endobj 974 0 obj <>endobj 975 0 obj <>endobj 976 0 obj <>endobj 977 0 obj <>endobj 978 0 obj <>endobj 979 0 obj <>endobj 980 0 obj <>endobj 981 0 obj <>endobj 982 0 obj <>endobj 983 0 obj <>endobj 984 0 obj <>endobj 985 0 obj <>endobj 986 0 obj <>endobj 987 0 obj <>endobj 988 0 obj <>endobj 989 0 obj <>endobj 990 0 obj <>endobj 991 0 obj <>endobj 992 0 obj <>endobj 993 0 obj <>endobj 994 0 obj <>endobj 995 0 obj <>endobj 996 0 obj <>endobj 997 0 obj <>endobj 998 0 obj <>endobj 999 0 obj <>endobj 1000 0 obj <>endobj 1001 0 obj <>endobj 1002 0 obj <>endobj 1003 0 obj <>endobj 1004 0 obj <>endobj 1005 0 obj <>endobj 1006 0 obj <> endobj 1007 0 obj <> endobj 1009 0 obj <>endobj 1012 0 obj <>endobj 1013 0 obj <>endobj 1014 0 obj <>endobj 1015 0 obj <>endobj 1016 0 obj <>endobj 1017 0 obj <>endobj 1018 0 obj <>endobj 1019 0 obj <>endobj 1020 0 obj <>endobj 1021 0 obj <>endobj 1022 0 obj <>endobj 1023 0 obj <>endobj 1024 0 obj <>endobj 1025 0 obj <>endobj 1026 0 obj <>endobj 1027 0 obj <>endobj 1028 0 obj <>endobj 1029 0 obj <>endobj 1030 0 obj <>endobj 1031 0 obj <>endobj 1032 0 obj <>endobj 1033 0 obj <>endobj 1034 0 obj <>endobj 1035 0 obj <>endobj 1036 0 obj <>endobj 1037 0 obj <>endobj 1038 0 obj <>endobj 1039 0 obj <>endobj 1040 0 obj <>endobj 1041 0 obj <>endobj 1042 0 obj <>endobj 1043 0 obj <>endobj 1044 0 obj <>endobj 1045 0 obj <>endobj 1046 0 obj <>endobj 1047 0 obj <>endobj 1048 0 obj <>endobj 1049 0 obj <>endobj 1050 0 obj <>endobj 1051 0 obj <>endobj 1052 0 obj <>endobj 1053 0 obj <>endobj 1054 0 obj <>endobj 1055 0 obj <>endobj 1056 0 obj <>endobj 1057 0 obj <> endobj 1058 0 obj <> endobj 1060 0 obj <>endobj 1061 0 obj <>endobj 1064 0 obj <>endobj 1065 0 obj <>endobj 1066 0 obj <>endobj 1067 0 obj <>endobj 1068 0 obj <>endobj 1069 0 obj <>endobj 1070 0 obj <>endobj 1071 0 obj <>endobj 1072 0 obj <>endobj 1073 0 obj <>endobj 1074 0 obj <>endobj 1075 0 obj <>endobj 1076 0 obj <>endobj 1077 0 obj <>endobj 1078 0 obj <>endobj 1079 0 obj <>endobj 1080 0 obj <>endobj 1081 0 obj <>endobj 1082 0 obj <>endobj 1083 0 obj <>endobj 1084 0 obj <>endobj 1085 0 obj <>endobj 1086 0 obj <>endobj 1087 0 obj <>endobj 1088 0 obj <>endobj 1089 0 obj <>endobj 1090 0 obj <>endobj 1091 0 obj <>endobj 1092 0 obj <>endobj 1093 0 obj <>endobj 1094 0 obj <> endobj 1095 0 obj <> endobj 1097 0 obj <>endobj 1100 0 obj <>endobj 1101 0 obj <>endobj 1102 0 obj <>endobj 1103 0 obj <>endobj 1104 0 obj <>endobj 1105 0 obj <>endobj 1106 0 obj <>endobj 1107 0 obj <>endobj 1108 0 obj <>endobj 1109 0 obj <>endobj 1110 0 obj <>endobj 1111 0 obj <>endobj 1112 0 obj <>endobj 1113 0 obj <>endobj 1114 0 obj <>endobj 1115 0 obj <>endobj 1116 0 obj <>endobj 1117 0 obj <>endobj 1118 0 obj <>endobj 1119 0 obj <>endobj 1120 0 obj <>endobj 1121 0 obj <>endobj 1122 0 obj <>endobj 1123 0 obj <>endobj 1124 0 obj <>endobj 1125 0 obj <>endobj 1126 0 obj <>endobj 1127 0 obj <>endobj 1128 0 obj <>endobj 1129 0 obj <>endobj 1130 0 obj <>endobj 1131 0 obj <>endobj 1132 0 obj <>endobj 1133 0 obj <>endobj 1134 0 obj <>endobj 1135 0 obj <>endobj 1136 0 obj <>endobj 1137 0 obj <>endobj 1138 0 obj <>endobj 1139 0 obj <>endobj 1140 0 obj <>endobj 1141 0 obj <>endobj 1142 0 obj <>endobj 1143 0 obj <>endobj 1144 0 obj <>endobj 1145 0 obj <>endobj 1146 0 obj <>endobj 1147 0 obj <>endobj 1148 0 obj <>endobj 1149 0 obj <>endobj 1150 0 obj <>endobj 1151 0 obj <>endobj 1152 0 obj <>endobj 1153 0 obj <>endobj 1154 0 obj <>endobj 1155 0 obj <>endobj 1156 0 obj <>endobj 1157 0 obj <> endobj 1158 0 obj <> endobj 1160 0 obj <>endobj 1163 0 obj <>endobj 1164 0 obj <>endobj 1165 0 obj <>endobj 1166 0 obj <>endobj 1167 0 obj <>endobj 1168 0 obj <>endobj 1169 0 obj <>endobj 1170 0 obj <>endobj 1171 0 obj <>endobj 1172 0 obj <>endobj 1173 0 obj <>endobj 1174 0 obj <>endobj 1175 0 obj <>endobj 1176 0 obj <>endobj 1177 0 obj <>endobj 1178 0 obj <>endobj 1179 0 obj <>endobj 1180 0 obj <>endobj 1181 0 obj <>endobj 1182 0 obj <>endobj 1183 0 obj <>endobj 1184 0 obj <>endobj 1185 0 obj <>endobj 1186 0 obj <>endobj 1187 0 obj <>endobj 1188 0 obj <>endobj 1189 0 obj <>endobj 1190 0 obj <>endobj 1191 0 obj <>endobj 1192 0 obj <>endobj 1193 0 obj <>endobj 1194 0 obj <>endobj 1195 0 obj <>endobj 1196 0 obj <>endobj 1197 0 obj <>endobj 1198 0 obj <>endobj 1199 0 obj <>endobj 1200 0 obj <>endobj 1201 0 obj <>endobj 1202 0 obj <>endobj 1203 0 obj <>endobj 1204 0 obj <>endobj 1205 0 obj <>endobj 1206 0 obj <>endobj 1207 0 obj <>endobj 1208 0 obj <>endobj 1209 0 obj <>endobj 1210 0 obj <>endobj 1211 0 obj <>endobj 1212 0 obj <>endobj 1213 0 obj <>endobj 1214 0 obj <>endobj 1215 0 obj <>endobj 1216 0 obj <>endobj 1217 0 obj <>endobj 1218 0 obj <>endobj 1219 0 obj <>endobj 1220 0 obj <>endobj 1221 0 obj <>endobj 1222 0 obj <>endobj 1223 0 obj <> endobj 1224 0 obj <> endobj 1226 0 obj <>endobj 1229 0 obj <>endobj 1230 0 obj <>endobj 1231 0 obj <>endobj 1232 0 obj <>endobj 1233 0 obj <>endobj 1234 0 obj <>endobj 1235 0 obj <>endobj 1236 0 obj <>endobj 1237 0 obj <>endobj 1238 0 obj <>endobj 1239 0 obj <>endobj 1240 0 obj <>endobj 1241 0 obj <>endobj 1242 0 obj <>endobj 1243 0 obj <>endobj 1244 0 obj <>endobj 1245 0 obj <>endobj 1246 0 obj <>endobj 1247 0 obj <>endobj 1248 0 obj <>endobj 1249 0 obj <>endobj 1250 0 obj <>endobj 1251 0 obj <>endobj 1252 0 obj <>endobj 1253 0 obj <>endobj 1254 0 obj <>endobj 1255 0 obj <>endobj 1256 0 obj <>endobj 1257 0 obj <>endobj 1258 0 obj <>endobj 1259 0 obj <>endobj 1260 0 obj <>endobj 1261 0 obj <>endobj 1262 0 obj <>endobj 1263 0 obj <>endobj 1264 0 obj <>endobj 1265 0 obj <>endobj 1266 0 obj <>endobj 1267 0 obj <>endobj 1268 0 obj <>endobj 1269 0 obj <>endobj 1270 0 obj <>endobj 1271 0 obj <>endobj 1272 0 obj <>endobj 1273 0 obj <>endobj 1274 0 obj <>endobj 1275 0 obj <>endobj 1276 0 obj <>endobj 1277 0 obj <>endobj 1278 0 obj <>endobj 1279 0 obj <>endobj 1280 0 obj <>endobj 1281 0 obj <>endobj 1282 0 obj <>endobj 1283 0 obj <>endobj 1284 0 obj <>endobj 1285 0 obj <>endobj 1286 0 obj <>endobj 1287 0 obj <>endobj 1288 0 obj <>endobj 1289 0 obj <>endobj 1290 0 obj <>endobj 1291 0 obj <>endobj 1292 0 obj <>endobj 1293 0 obj <> endobj 1294 0 obj <> endobj 1296 0 obj <>endobj 1297 0 obj <>endobj 1300 0 obj <>endobj 1301 0 obj <>endobj 1302 0 obj <>endobj 1303 0 obj <>endobj 1304 0 obj <>endobj 1305 0 obj <>endobj 1306 0 obj <>endobj 1307 0 obj <>endobj 1308 0 obj <>endobj 1309 0 obj <>endobj 1310 0 obj <>endobj 1311 0 obj <>endobj 1312 0 obj <>endobj 1313 0 obj <>endobj 1314 0 obj <>endobj 1315 0 obj <>endobj 1316 0 obj <>endobj 1317 0 obj <>endobj 1318 0 obj <>endobj 1319 0 obj <>endobj 1320 0 obj <>endobj 1321 0 obj <>endobj 1322 0 obj <>endobj 1323 0 obj <>endobj 1324 0 obj <>endobj 1325 0 obj <>endobj 1326 0 obj <>endobj 1327 0 obj <>endobj 1328 0 obj <>endobj 1329 0 obj <>endobj 1330 0 obj <>endobj 1331 0 obj <>endobj 1332 0 obj <>endobj 1333 0 obj <>endobj 1334 0 obj <>endobj 1335 0 obj <>endobj 1336 0 obj <>endobj 1337 0 obj <>endobj 1338 0 obj <>endobj 1339 0 obj <>endobj 1340 0 obj <>endobj 1341 0 obj <>endobj 1342 0 obj <>endobj 1343 0 obj <>endobj 1344 0 obj <>endobj 1345 0 obj <>endobj 1346 0 obj <>endobj 1347 0 obj <>endobj 1348 0 obj <>endobj 1349 0 obj <>endobj 1350 0 obj <>endobj 1351 0 obj <>endobj 1352 0 obj <>endobj 1353 0 obj <>endobj 1354 0 obj <>endobj 1355 0 obj <>endobj 1356 0 obj <>endobj 1357 0 obj <>endobj 1358 0 obj <>endobj 1359 0 obj <>endobj 1360 0 obj <>endobj 1361 0 obj <> endobj 1362 0 obj <> endobj 1364 0 obj <>endobj 1365 0 obj <>endobj 1368 0 obj <>endobj 1369 0 obj <>endobj 1370 0 obj <>endobj 1371 0 obj <>endobj 1372 0 obj <>endobj 1373 0 obj <>endobj 1374 0 obj <>endobj 1375 0 obj <>endobj 1376 0 obj <>endobj 1377 0 obj <>endobj 1378 0 obj <>endobj 1379 0 obj <>endobj 1380 0 obj <>endobj 1381 0 obj <>endobj 1382 0 obj <>endobj 1383 0 obj <>endobj 1384 0 obj <>endobj 1385 0 obj <>endobj 1386 0 obj <>endobj 1387 0 obj <>endobj 1388 0 obj <>endobj 1389 0 obj <>endobj 1390 0 obj <>endobj 1391 0 obj <>endobj 1392 0 obj <>endobj 1393 0 obj <>endobj 1394 0 obj <>endobj 1395 0 obj <>endobj 1396 0 obj <> endobj 1397 0 obj <> endobj 1399 0 obj <>endobj 1402 0 obj <>endobj 1403 0 obj <>endobj 1404 0 obj <>endobj 1405 0 obj <>endobj 1406 0 obj <>endobj 1407 0 obj <>endobj 1408 0 obj <>endobj 1409 0 obj <>endobj 1410 0 obj <>endobj 1411 0 obj <>endobj 1412 0 obj <>endobj 1413 0 obj <>endobj 1414 0 obj <>endobj 1415 0 obj <>endobj 1416 0 obj <>endobj 1417 0 obj <>endobj 1418 0 obj <>endobj 1419 0 obj <>endobj 1420 0 obj <>endobj 1421 0 obj <>endobj 1422 0 obj <>endobj 1423 0 obj <>endobj 1424 0 obj <>endobj 1425 0 obj <>endobj 1426 0 obj <>endobj 1427 0 obj <>endobj 1428 0 obj <>endobj 1429 0 obj <>endobj 1430 0 obj <>endobj 1431 0 obj <>endobj 1432 0 obj <>endobj 1433 0 obj <>endobj 1434 0 obj <>endobj 1435 0 obj <>endobj 1436 0 obj <> endobj 1437 0 obj <> endobj 1439 0 obj <>endobj 1442 0 obj <>endobj 1443 0 obj <>endobj 1444 0 obj <>endobj 1445 0 obj <>endobj 1446 0 obj <>endobj 1447 0 obj <>endobj 1448 0 obj <>endobj 1449 0 obj <>endobj 1450 0 obj <>endobj 1451 0 obj <>endobj 1452 0 obj <>endobj 1453 0 obj <>endobj 1454 0 obj <>endobj 1455 0 obj <>endobj 1456 0 obj <>endobj 1457 0 obj <>endobj 1458 0 obj <>endobj 1459 0 obj <>endobj 1460 0 obj <>endobj 1461 0 obj <>endobj 1462 0 obj <>endobj 1463 0 obj <>endobj 1464 0 obj <>endobj 1465 0 obj <>endobj 1466 0 obj <>endobj 1467 0 obj <>endobj 1468 0 obj <>endobj 1469 0 obj <>endobj 1470 0 obj <>endobj 1471 0 obj <>endobj 1472 0 obj <>endobj 1473 0 obj <>endobj 1474 0 obj <>endobj 1475 0 obj <>endobj 1476 0 obj <>endobj 1477 0 obj <>endobj 1478 0 obj <>endobj 1479 0 obj <>endobj 1480 0 obj <>endobj 1481 0 obj <>endobj 1482 0 obj <>endobj 1483 0 obj <>endobj 1484 0 obj <>endobj 1485 0 obj <>endobj 1486 0 obj <>endobj 1487 0 obj <>endobj 1488 0 obj <>endobj 1489 0 obj <>endobj 1490 0 obj <>endobj 1491 0 obj <>endobj 1492 0 obj <> endobj 1493 0 obj <> endobj 1495 0 obj <>endobj 1496 0 obj <>endobj 1499 0 obj <>endobj 1500 0 obj <>endobj 1501 0 obj <>endobj 1502 0 obj <>endobj 1503 0 obj <>endobj 1504 0 obj <>endobj 1505 0 obj <>endobj 1506 0 obj <>endobj 1507 0 obj <>endobj 1508 0 obj <>endobj 1509 0 obj <>endobj 1510 0 obj <>endobj 1511 0 obj <>endobj 1512 0 obj <>endobj 1513 0 obj <>endobj 1514 0 obj <>endobj 1515 0 obj <>endobj 1516 0 obj <>endobj 1517 0 obj <>endobj 1518 0 obj <>endobj 1519 0 obj <>endobj 1520 0 obj <>endobj 1521 0 obj <>endobj 1522 0 obj <>endobj 1523 0 obj <>endobj 1524 0 obj <>endobj 1525 0 obj <>endobj 1526 0 obj <>endobj 1527 0 obj <>endobj 1528 0 obj <>endobj 1529 0 obj <>endobj 1530 0 obj <>endobj 1531 0 obj <>endobj 1532 0 obj <>endobj 1533 0 obj <>endobj 1534 0 obj <>endobj 1535 0 obj <>endobj 1536 0 obj <>endobj 1537 0 obj <>endobj 1538 0 obj <>endobj 1539 0 obj <>endobj 1540 0 obj <>endobj 1541 0 obj <>endobj 1542 0 obj <>endobj 1543 0 obj <>endobj 1544 0 obj <>endobj 1545 0 obj <> endobj 1546 0 obj <> endobj 1548 0 obj <>endobj 1549 0 obj <>endobj 1552 0 obj <>endobj 1553 0 obj <>endobj 1554 0 obj <>endobj 1555 0 obj <>endobj 1556 0 obj <>endobj 1557 0 obj <>endobj 1558 0 obj <>endobj 1559 0 obj <>endobj 1560 0 obj <>endobj 1561 0 obj <>endobj 1562 0 obj <>endobj 1563 0 obj <>endobj 1564 0 obj <>endobj 1565 0 obj <>endobj 1566 0 obj <>endobj 1567 0 obj <>endobj 1568 0 obj <>endobj 1569 0 obj <>endobj 1570 0 obj <>endobj 1571 0 obj <>endobj 1572 0 obj <>endobj 1573 0 obj <>endobj 1574 0 obj <>endobj 1575 0 obj <>endobj 1576 0 obj <>endobj 1577 0 obj <>endobj 1578 0 obj <>endobj 1579 0 obj <>endobj 1580 0 obj <>endobj 1581 0 obj <>endobj 1582 0 obj <>endobj 1583 0 obj <>endobj 1584 0 obj <>endobj 1585 0 obj <>endobj 1586 0 obj <>endobj 1587 0 obj <>endobj 1588 0 obj <>endobj 1589 0 obj <>endobj 1590 0 obj <> endobj 1591 0 obj <> endobj 1593 0 obj <>endobj 1594 0 obj <>endobj 1597 0 obj <>endobj 1598 0 obj <>endobj 1599 0 obj <>endobj 1600 0 obj <>endobj 1601 0 obj <>endobj 1602 0 obj <>endobj 1603 0 obj <>endobj 1604 0 obj <>endobj 1605 0 obj <>endobj 1606 0 obj <>endobj 1607 0 obj <>endobj 1608 0 obj <>endobj 1609 0 obj <>endobj 1610 0 obj <>endobj 1611 0 obj <>endobj 1612 0 obj <>endobj 1613 0 obj <>endobj 1614 0 obj <>endobj 1615 0 obj <>endobj 1616 0 obj <>endobj 1617 0 obj <>endobj 1618 0 obj <>endobj 1619 0 obj <>endobj 1620 0 obj <>endobj 1621 0 obj <>endobj 1622 0 obj <>endobj 1623 0 obj <>endobj 1624 0 obj <>endobj 1625 0 obj <>endobj 1626 0 obj <>endobj 1627 0 obj <>endobj 1628 0 obj <>endobj 1629 0 obj <>endobj 1630 0 obj <>endobj 1631 0 obj <>endobj 1632 0 obj <>endobj 1633 0 obj <>endobj 1634 0 obj <>endobj 1635 0 obj <> endobj 1636 0 obj <> endobj 1638 0 obj <>endobj 1641 0 obj <>endobj 1642 0 obj <>endobj 1643 0 obj <>endobj 1644 0 obj <>endobj 1645 0 obj <>endobj 1646 0 obj <>endobj 1647 0 obj <>endobj 1648 0 obj <>endobj 1649 0 obj <>endobj 1650 0 obj <>endobj 1651 0 obj <>endobj 1652 0 obj <>endobj 1653 0 obj <>endobj 1654 0 obj <>endobj 1655 0 obj <>endobj 1656 0 obj <>endobj 1657 0 obj <>endobj 1658 0 obj <>endobj 1659 0 obj <>endobj 1660 0 obj <>endobj 1661 0 obj <>endobj 1662 0 obj <>endobj 1663 0 obj <>endobj 1664 0 obj <>endobj 1665 0 obj <>endobj 1666 0 obj <>endobj 1667 0 obj <>endobj 1668 0 obj <>endobj 1669 0 obj <>endobj 1670 0 obj <>endobj 1671 0 obj <>endobj 1672 0 obj <>endobj 1673 0 obj <>endobj 1674 0 obj <>endobj 1675 0 obj <>endobj 1676 0 obj <>endobj 1677 0 obj <>endobj 1678 0 obj <>endobj 1679 0 obj <> endobj 1680 0 obj <> endobj 1682 0 obj <>endobj 1683 0 obj <>endobj 1686 0 obj <>endobj 1687 0 obj <>endobj 1688 0 obj <>endobj 1689 0 obj <>endobj 1690 0 obj <>endobj 1691 0 obj <>endobj 1692 0 obj <>endobj 1693 0 obj <>endobj 1694 0 obj <>endobj 1695 0 obj <>endobj 1696 0 obj <>endobj 1697 0 obj <>endobj 1698 0 obj <>endobj 1699 0 obj <>endobj 1700 0 obj <>endobj 1701 0 obj <>endobj 1702 0 obj <>endobj 1703 0 obj <>endobj 1704 0 obj <>endobj 1705 0 obj <>endobj 1706 0 obj <>endobj 1707 0 obj <>endobj 1708 0 obj <>endobj 1709 0 obj <>endobj 1710 0 obj <>endobj 1711 0 obj <>endobj 1712 0 obj <>endobj 1713 0 obj <>endobj 1714 0 obj <>endobj 1715 0 obj <>endobj 1716 0 obj <>endobj 1717 0 obj <>endobj 1718 0 obj <>endobj 1719 0 obj <>endobj 1720 0 obj <>endobj 1721 0 obj <>endobj 1722 0 obj <>endobj 1723 0 obj <>endobj 1724 0 obj <>endobj 1725 0 obj <>endobj 1726 0 obj <>endobj 1727 0 obj <> endobj 1728 0 obj <> endobj 1730 0 obj <>endobj 1731 0 obj <>endobj 1734 0 obj <>endobj 1735 0 obj <>endobj 1736 0 obj <>endobj 1737 0 obj <>endobj 1738 0 obj <>endobj 1739 0 obj <>endobj 1740 0 obj <>endobj 1741 0 obj <>endobj 1742 0 obj <>endobj 1743 0 obj <>endobj 1744 0 obj <>endobj 1745 0 obj <>endobj 1746 0 obj <>endobj 1747 0 obj <>endobj 1748 0 obj <>endobj 1749 0 obj <>endobj 1750 0 obj <>endobj 1751 0 obj <>endobj 1752 0 obj <>endobj 1753 0 obj <>endobj 1754 0 obj <>endobj 1755 0 obj <>endobj 1756 0 obj <>endobj 1757 0 obj <>endobj 1758 0 obj <>endobj 1759 0 obj <>endobj 1760 0 obj <>endobj 1761 0 obj <>endobj 1762 0 obj <>endobj 1763 0 obj <>endobj 1764 0 obj <>endobj 1765 0 obj <>endobj 1766 0 obj <>endobj 1767 0 obj <>endobj 1768 0 obj <>endobj 1769 0 obj <>endobj 1770 0 obj <>endobj 1771 0 obj <>endobj 1772 0 obj <>endobj 1773 0 obj <>endobj 1774 0 obj <>endobj 1775 0 obj <>endobj 1776 0 obj <>endobj 1777 0 obj <> endobj 1778 0 obj <> endobj 1780 0 obj <>endobj 1783 0 obj <>endobj 1784 0 obj <>endobj 1785 0 obj <>endobj 1786 0 obj <>endobj 1787 0 obj <>endobj 1788 0 obj <>endobj 1789 0 obj <>endobj 1790 0 obj <>endobj 1791 0 obj <>endobj 1792 0 obj <>endobj 1793 0 obj <>endobj 1794 0 obj <>endobj 1795 0 obj <>endobj 1796 0 obj <>endobj 1797 0 obj <>endobj 1798 0 obj <>endobj 1799 0 obj <>endobj 1800 0 obj <>endobj 1801 0 obj <>endobj 1802 0 obj <>endobj 1803 0 obj <>endobj 1804 0 obj <>endobj 1805 0 obj <>endobj 1806 0 obj <>endobj 1807 0 obj <>endobj 1808 0 obj <>endobj 1809 0 obj <>endobj 1810 0 obj <>endobj 1811 0 obj <>endobj 1812 0 obj <>endobj 1813 0 obj <>endobj 1814 0 obj <>endobj 1815 0 obj <>endobj 1816 0 obj <>endobj 1817 0 obj <>endobj 1818 0 obj <>endobj 1819 0 obj <>endobj 1820 0 obj <> endobj 1821 0 obj <> endobj 1823 0 obj <>endobj 1826 0 obj <>endobj 1827 0 obj <>endobj 1828 0 obj <>endobj 1829 0 obj <>endobj 1830 0 obj <>endobj 1831 0 obj <>endobj 1832 0 obj <>endobj 1833 0 obj <>endobj 1834 0 obj <>endobj 1835 0 obj <>endobj 1836 0 obj <>endobj 1837 0 obj <>endobj 1838 0 obj <>endobj 1839 0 obj <>endobj 1840 0 obj <>endobj 1841 0 obj <>endobj 1842 0 obj <>endobj 1843 0 obj <>endobj 1844 0 obj <>endobj 1845 0 obj <>endobj 1846 0 obj <>endobj 1847 0 obj <>endobj 1848 0 obj <>endobj 1849 0 obj <>endobj 1850 0 obj <>endobj 1851 0 obj <>endobj 1852 0 obj <>endobj 1853 0 obj <>endobj 1854 0 obj <>endobj 1855 0 obj <>endobj 1856 0 obj <>endobj 1857 0 obj <>endobj 1858 0 obj <>endobj 1859 0 obj <>endobj 1860 0 obj <>endobj 1861 0 obj <>endobj 1862 0 obj <>endobj 1863 0 obj <>endobj 1864 0 obj <>endobj 1865 0 obj <>endobj 1866 0 obj <> endobj 1867 0 obj <> endobj 1869 0 obj <>endobj 1872 0 obj <>endobj 1873 0 obj <>endobj 1874 0 obj <>endobj 1875 0 obj <>endobj 1876 0 obj <>endobj 1877 0 obj <>endobj 1878 0 obj <>endobj 1879 0 obj <>endobj 1880 0 obj <>endobj 1881 0 obj <>endobj 1882 0 obj <>endobj 1883 0 obj <>endobj 1884 0 obj <>endobj 1885 0 obj <>endobj 1886 0 obj <>endobj 1887 0 obj <>endobj 1888 0 obj <>endobj 1889 0 obj <>endobj 1890 0 obj <>endobj 1891 0 obj <>endobj 1892 0 obj <>endobj 1893 0 obj <>endobj 1894 0 obj <>endobj 1895 0 obj <>endobj 1896 0 obj <>endobj 1897 0 obj <>endobj 1898 0 obj <>endobj 1899 0 obj <>endobj 1900 0 obj <>endobj 1901 0 obj <>endobj 1902 0 obj <>endobj 1903 0 obj <>endobj 1904 0 obj <>endobj 1905 0 obj <>endobj 1906 0 obj <>endobj 1907 0 obj <>endobj 1908 0 obj <>endobj 1909 0 obj <>endobj 1910 0 obj <>endobj 1911 0 obj <>endobj 1912 0 obj <>endobj 1913 0 obj <>endobj 1914 0 obj <> endobj 1915 0 obj <> endobj 1917 0 obj <>endobj 1918 0 obj <>endobj 1921 0 obj <>endobj 1922 0 obj <>endobj 1923 0 obj <>endobj 1924 0 obj <>endobj 1925 0 obj <>endobj 1926 0 obj <>endobj 1927 0 obj <>endobj 1928 0 obj <>endobj 1929 0 obj <>endobj 1930 0 obj <>endobj 1931 0 obj <>endobj 1932 0 obj <>endobj 1933 0 obj <>endobj 1934 0 obj <>endobj 1935 0 obj <>endobj 1936 0 obj <>endobj 1937 0 obj <>endobj 1938 0 obj <>endobj 1939 0 obj <>endobj 1940 0 obj <>endobj 1941 0 obj <>endobj 1942 0 obj <>endobj 1943 0 obj <>endobj 1944 0 obj <>endobj 1945 0 obj <>endobj 1946 0 obj <>endobj 1947 0 obj <>endobj 1948 0 obj <>endobj 1949 0 obj <>endobj 1950 0 obj <>endobj 1951 0 obj <>endobj 1952 0 obj <>endobj 1953 0 obj <>endobj 1954 0 obj <> endobj 1955 0 obj <> endobj 1957 0 obj <>endobj 1960 0 obj <>endobj 1961 0 obj <>endobj 1962 0 obj <>endobj 1963 0 obj <>endobj 1964 0 obj <>endobj 1965 0 obj <>endobj 1966 0 obj <>endobj 1967 0 obj <>endobj 1968 0 obj <>endobj 1969 0 obj <>endobj 1970 0 obj <>endobj 1971 0 obj <>endobj 1972 0 obj <>endobj 1973 0 obj <>endobj 1974 0 obj <>endobj 1975 0 obj <>endobj 1976 0 obj <>endobj 1977 0 obj <>endobj 1978 0 obj <>endobj 1979 0 obj <>endobj 1980 0 obj <>endobj 1981 0 obj <>endobj 1982 0 obj <>endobj 1983 0 obj <>endobj 1984 0 obj <>endobj 1985 0 obj <>endobj 1986 0 obj <>endobj 1987 0 obj <>endobj 1988 0 obj <>endobj 1989 0 obj <>endobj 1990 0 obj <>endobj 1991 0 obj <>endobj 1992 0 obj <> endobj 1993 0 obj <> endobj 1995 0 obj <>endobj 1996 0 obj <>endobj 1999 0 obj <>endobj 2000 0 obj <>endobj 2001 0 obj <>endobj 2002 0 obj <>endobj 2003 0 obj <>endobj 2004 0 obj <>endobj 2005 0 obj <>endobj 2006 0 obj <>endobj 2007 0 obj <>endobj 2008 0 obj <>endobj 2009 0 obj <>endobj 2010 0 obj <>endobj 2011 0 obj <>endobj 2012 0 obj <>endobj 2013 0 obj <>endobj 2014 0 obj <>endobj 2015 0 obj <>endobj 2016 0 obj <>endobj 2017 0 obj <>endobj 2018 0 obj <>endobj 2019 0 obj <>endobj 2020 0 obj <>endobj 2021 0 obj <>endobj 2022 0 obj <>endobj 2023 0 obj <> endobj 2024 0 obj <> endobj 2026 0 obj <>endobj 2027 0 obj <>endobj 2030 0 obj <>endobj 2031 0 obj <>endobj 2032 0 obj <>endobj 2033 0 obj <>endobj 2034 0 obj <>endobj 2035 0 obj <>endobj 2036 0 obj <>endobj 2037 0 obj <>endobj 2038 0 obj <>endobj 2039 0 obj <>endobj 2040 0 obj <>endobj 2041 0 obj <>endobj 2042 0 obj <>endobj 2043 0 obj <>endobj 2044 0 obj <>endobj 2045 0 obj <>endobj 2046 0 obj <>endobj 2047 0 obj <>endobj 2048 0 obj <>endobj 2049 0 obj <>endobj 2050 0 obj <>endobj 2051 0 obj <>endobj 2052 0 obj <>endobj 2053 0 obj <>endobj 2054 0 obj <>endobj 2055 0 obj <>endobj 2056 0 obj <>endobj 2057 0 obj <>endobj 2058 0 obj <>endobj 2059 0 obj <>endobj 2060 0 obj <> endobj 2061 0 obj <> endobj 2063 0 obj <>endobj 2066 0 obj <>endobj 2067 0 obj <>endobj 2068 0 obj <>endobj 2069 0 obj <>endobj 2070 0 obj <>endobj 2071 0 obj <>endobj 2072 0 obj <>endobj 2073 0 obj <>endobj 2074 0 obj <>endobj 2075 0 obj <>endobj 2076 0 obj <>endobj 2077 0 obj <>endobj 2078 0 obj <>endobj 2079 0 obj <>endobj 2080 0 obj <>endobj 2081 0 obj <>endobj 2082 0 obj <>endobj 2083 0 obj <>endobj 2084 0 obj <>endobj 2085 0 obj <>endobj 2086 0 obj <>endobj 2087 0 obj <>endobj 2088 0 obj <>endobj 2089 0 obj <>endobj 2090 0 obj <>endobj 2091 0 obj <>endobj 2092 0 obj <>endobj 2093 0 obj <>endobj 2094 0 obj <>endobj 2095 0 obj <>endobj 2096 0 obj <>endobj 2097 0 obj <>endobj 2098 0 obj <>endobj 2099 0 obj <>endobj 2100 0 obj <>endobj 2101 0 obj <> endobj 2102 0 obj <> endobj 2104 0 obj <>endobj 2105 0 obj <>endobj 2108 0 obj <>endobj 2109 0 obj <>endobj 2110 0 obj <>endobj 2111 0 obj <>endobj 2112 0 obj <>endobj 2113 0 obj <>endobj 2114 0 obj <>endobj 2115 0 obj <>endobj 2116 0 obj <>endobj 2117 0 obj <>endobj 2118 0 obj <>endobj 2119 0 obj <>endobj 2120 0 obj <>endobj 2121 0 obj <>endobj 2122 0 obj <>endobj 2123 0 obj <>endobj 2124 0 obj <>endobj 2125 0 obj <>endobj 2126 0 obj <>endobj 2127 0 obj <>endobj 2128 0 obj <>endobj 2129 0 obj <>endobj 2130 0 obj <>endobj 2131 0 obj <>endobj 2132 0 obj <>endobj 2133 0 obj <>endobj 2134 0 obj <>endobj 2135 0 obj <>endobj 2136 0 obj <>endobj 2137 0 obj <>endobj 2138 0 obj <>endobj 2139 0 obj <>endobj 2140 0 obj <>endobj 2141 0 obj <>endobj 2142 0 obj <>endobj 2143 0 obj <>endobj 2144 0 obj <>endobj 2145 0 obj <>endobj 2146 0 obj <>endobj 2147 0 obj <>endobj 2148 0 obj <>endobj 2149 0 obj <>endobj 2150 0 obj <> endobj 2151 0 obj <> endobj 2153 0 obj <>endobj 2154 0 obj <>endobj 2157 0 obj <>endobj 2158 0 obj <>endobj 2159 0 obj <>endobj 2160 0 obj <>endobj 2161 0 obj <>endobj 2162 0 obj <>endobj 2163 0 obj <>endobj 2164 0 obj <>endobj 2165 0 obj <>endobj 2166 0 obj <>endobj 2167 0 obj <>endobj 2168 0 obj <>endobj 2169 0 obj <>endobj 2170 0 obj <>endobj 2171 0 obj <>endobj 2172 0 obj <>endobj 2173 0 obj <>endobj 2174 0 obj <>endobj 2175 0 obj <>endobj 2176 0 obj <>endobj 2177 0 obj <>endobj 2178 0 obj <>endobj 2179 0 obj <>endobj 2180 0 obj <>endobj 2181 0 obj <>endobj 2182 0 obj <>endobj 2183 0 obj <>endobj 2184 0 obj <>endobj 2185 0 obj <>endobj 2186 0 obj <>endobj 2187 0 obj <>endobj 2188 0 obj <>endobj 2189 0 obj <>endobj 2190 0 obj <>endobj 2191 0 obj <>endobj 2192 0 obj <>endobj 2193 0 obj <>endobj 2194 0 obj <>endobj 2195 0 obj <>endobj 2196 0 obj <>endobj 2197 0 obj <>endobj 2198 0 obj <>endobj 2199 0 obj <>endobj 2200 0 obj <> endobj 2201 0 obj <> endobj 2203 0 obj <>endobj 2204 0 obj <>endobj 2207 0 obj <>endobj 2208 0 obj <>endobj 2209 0 obj <>endobj 2210 0 obj <>endobj 2211 0 obj <>endobj 2212 0 obj <>endobj 2213 0 obj <>endobj 2214 0 obj <>endobj 2215 0 obj <>endobj 2216 0 obj <>endobj 2217 0 obj <>endobj 2218 0 obj <>endobj 2219 0 obj <>endobj 2220 0 obj <>endobj 2221 0 obj <>endobj 2222 0 obj <>endobj 2223 0 obj <>endobj 2224 0 obj <>endobj 2225 0 obj <>endobj 2226 0 obj <>endobj 2227 0 obj <>endobj 2228 0 obj <>endobj 2229 0 obj <>endobj 2230 0 obj <>endobj 2231 0 obj <>endobj 2232 0 obj <>endobj 2233 0 obj <>endobj 2234 0 obj <>endobj 2235 0 obj <>endobj 2236 0 obj <>endobj 2237 0 obj <>endobj 2238 0 obj <>endobj 2239 0 obj <>endobj 2240 0 obj <>endobj 2241 0 obj <>endobj 2242 0 obj <>endobj 2243 0 obj <>endobj 2244 0 obj <>endobj 2245 0 obj <>endobj 2246 0 obj <>endobj 2247 0 obj <>endobj 2248 0 obj <>endobj 2249 0 obj <>endobj 2250 0 obj <>endobj 2251 0 obj <>endobj 2252 0 obj <> endobj 2253 0 obj <> endobj 2255 0 obj <>endobj 2256 0 obj <>endobj 2259 0 obj <>endobj 2260 0 obj <>endobj 2261 0 obj <>endobj 2262 0 obj <>endobj 2263 0 obj <>endobj 2264 0 obj <>endobj 2265 0 obj <>endobj 2266 0 obj <>endobj 2267 0 obj <>endobj 2268 0 obj <>endobj 2269 0 obj <>endobj 2270 0 obj <>endobj 2271 0 obj <>endobj 2272 0 obj <>endobj 2273 0 obj <>endobj 2274 0 obj <>endobj 2275 0 obj <>endobj 2276 0 obj <>endobj 2277 0 obj <>endobj 2278 0 obj <>endobj 2279 0 obj <>endobj 2280 0 obj <>endobj 2281 0 obj <>endobj 2282 0 obj <>endobj 2283 0 obj <>endobj 2284 0 obj <>endobj 2285 0 obj <>endobj 2286 0 obj <>endobj 2287 0 obj <>endobj 2288 0 obj <>endobj 2289 0 obj <>endobj 2290 0 obj <>endobj 2291 0 obj <>endobj 2292 0 obj <>endobj 2293 0 obj <>endobj 2294 0 obj <>endobj 2295 0 obj <>endobj 2296 0 obj <>endobj 2297 0 obj <>endobj 2298 0 obj <>endobj 2299 0 obj <>endobj 2300 0 obj <>endobj 2301 0 obj <>endobj 2302 0 obj <>endobj 2303 0 obj <>endobj 2304 0 obj <>endobj 2305 0 obj <> endobj 2306 0 obj <> endobj 2308 0 obj <>endobj 2309 0 obj <>endobj 2312 0 obj <>endobj 2313 0 obj <>endobj 2314 0 obj <>endobj 2315 0 obj <>endobj 2316 0 obj <>endobj 2317 0 obj <>endobj 2318 0 obj <>endobj 2319 0 obj <>endobj 2320 0 obj <>endobj 2321 0 obj <>endobj 2322 0 obj <>endobj 2323 0 obj <>endobj 2324 0 obj <>endobj 2325 0 obj <>endobj 2326 0 obj <>endobj 2327 0 obj <>endobj 2328 0 obj <>endobj 2329 0 obj <>endobj 2330 0 obj <>endobj 2331 0 obj <>endobj 2332 0 obj <>endobj 2333 0 obj <>endobj 2334 0 obj <>endobj 2335 0 obj <>endobj 2336 0 obj <>endobj 2337 0 obj <>endobj 2338 0 obj <>endobj 2339 0 obj <>endobj 2340 0 obj <>endobj 2341 0 obj <>endobj 2342 0 obj <>endobj 2343 0 obj <>endobj 2344 0 obj <>endobj 2345 0 obj <>endobj 2346 0 obj <>endobj 2347 0 obj <>endobj 2348 0 obj <>endobj 2349 0 obj <>endobj 2350 0 obj <>endobj 2351 0 obj <>endobj 2352 0 obj <>endobj 2353 0 obj <> endobj 2354 0 obj <> endobj 2356 0 obj <>endobj 2359 0 obj <>endobj 2360 0 obj <>endobj 2361 0 obj <>endobj 2362 0 obj <>endobj 2363 0 obj <>endobj 2364 0 obj <>endobj 2365 0 obj <>endobj 2366 0 obj <>endobj 2367 0 obj <>endobj 2368 0 obj <>endobj 2369 0 obj <>endobj 2370 0 obj <>endobj 2371 0 obj <>endobj 2372 0 obj <>endobj 2373 0 obj <>endobj 2374 0 obj <>endobj 2375 0 obj <>endobj 2376 0 obj <>endobj 2377 0 obj <>endobj 2378 0 obj <>endobj 2379 0 obj <>endobj 2380 0 obj <>endobj 2381 0 obj <>endobj 2382 0 obj <>endobj 2383 0 obj <>endobj 2384 0 obj <>endobj 2385 0 obj <>endobj 2386 0 obj <>endobj 2387 0 obj <>endobj 2388 0 obj <>endobj 2389 0 obj <>endobj 2390 0 obj <>endobj 2391 0 obj <>endobj 2392 0 obj <>endobj 2393 0 obj <>endobj 2394 0 obj <>endobj 2395 0 obj <>endobj 2396 0 obj <>endobj 2397 0 obj <>endobj 2398 0 obj <>endobj 2399 0 obj <>endobj 2400 0 obj <> endobj 2401 0 obj <> endobj 2403 0 obj <>endobj 2406 0 obj <>endobj 2407 0 obj <>endobj 2408 0 obj <>endobj 2409 0 obj <>endobj 2410 0 obj <>endobj 2411 0 obj <>endobj 2412 0 obj <>endobj 2413 0 obj <>endobj 2414 0 obj <>endobj 2415 0 obj <>endobj 2416 0 obj <>endobj 2417 0 obj <>endobj 2418 0 obj <>endobj 2419 0 obj <>endobj 2420 0 obj <>endobj 2421 0 obj <>endobj 2422 0 obj <>endobj 2423 0 obj <>endobj 2424 0 obj <>endobj 2425 0 obj <>endobj 2426 0 obj <>endobj 2427 0 obj <>endobj 2428 0 obj <>endobj 2429 0 obj <>endobj 2430 0 obj <>endobj 2431 0 obj <>endobj 2432 0 obj <>endobj 2433 0 obj <>endobj 2434 0 obj <>endobj 2435 0 obj <>endobj 2436 0 obj <>endobj 2437 0 obj <>endobj 2438 0 obj <>endobj 2439 0 obj <>endobj 2440 0 obj <>endobj 2441 0 obj <>endobj 2442 0 obj <>endobj 2443 0 obj <>endobj 2444 0 obj <>endobj 2445 0 obj <>endobj 2446 0 obj <>endobj 2447 0 obj <> endobj 2448 0 obj <> endobj 2450 0 obj <>endobj 2453 0 obj <>endobj 2454 0 obj <>endobj 2455 0 obj <>endobj 2456 0 obj <>endobj 2457 0 obj <>endobj 2458 0 obj <>endobj 2459 0 obj <>endobj 2460 0 obj <>endobj 2461 0 obj <>endobj 2462 0 obj <>endobj 2463 0 obj <>endobj 2464 0 obj <>endobj 2465 0 obj <>endobj 2466 0 obj <>endobj 2467 0 obj <>endobj 2468 0 obj <>endobj 2469 0 obj <>endobj 2470 0 obj <>endobj 2471 0 obj <>endobj 2472 0 obj <>endobj 2473 0 obj <>endobj 2474 0 obj <>endobj 2475 0 obj <>endobj 2476 0 obj <>endobj 2477 0 obj <>endobj 2478 0 obj <>endobj 2479 0 obj <>endobj 2480 0 obj <>endobj 2481 0 obj <>endobj 2482 0 obj <>endobj 2483 0 obj <>endobj 2484 0 obj <>endobj 2485 0 obj <>endobj 2486 0 obj <>endobj 2487 0 obj <>endobj 2488 0 obj <>endobj 2489 0 obj <>endobj 2490 0 obj <> endobj 2491 0 obj <> endobj 2493 0 obj <>endobj 2494 0 obj <>endobj 2497 0 obj <>endobj 2498 0 obj <>endobj 2499 0 obj <>endobj 2500 0 obj <>endobj 2501 0 obj <>endobj 2502 0 obj <>endobj 2503 0 obj <>endobj 2504 0 obj <>endobj 2505 0 obj <>endobj 2506 0 obj <>endobj 2507 0 obj <>endobj 2508 0 obj <>endobj 2509 0 obj <>endobj 2510 0 obj <>endobj 2511 0 obj <>endobj 2512 0 obj <>endobj 2513 0 obj <>endobj 2514 0 obj <>endobj 2515 0 obj <>endobj 2516 0 obj <>endobj 2517 0 obj <>endobj 2518 0 obj <>endobj 2519 0 obj <>endobj 2520 0 obj <>endobj 2521 0 obj <>endobj 2522 0 obj <>endobj 2523 0 obj <>endobj 2524 0 obj <>endobj 2525 0 obj <>endobj 2526 0 obj <>endobj 2527 0 obj <>endobj 2528 0 obj <>endobj 2529 0 obj <>endobj 2530 0 obj <>endobj 2531 0 obj <>endobj 2532 0 obj <>endobj 2533 0 obj <>endobj 2534 0 obj <>endobj 2535 0 obj <>endobj 2536 0 obj <>endobj 2537 0 obj <>endobj 2538 0 obj <>endobj 2539 0 obj <> endobj 2540 0 obj <> endobj 2542 0 obj <>endobj 2545 0 obj <>endobj 2546 0 obj <>endobj 2547 0 obj <>endobj 2548 0 obj <>endobj 2549 0 obj <>endobj 2550 0 obj <>endobj 2551 0 obj <>endobj 2552 0 obj <>endobj 2553 0 obj <>endobj 2554 0 obj <>endobj 2555 0 obj <>endobj 2556 0 obj <>endobj 2557 0 obj <>endobj 2558 0 obj <>endobj 2559 0 obj <>endobj 2560 0 obj <>endobj 2561 0 obj <>endobj 2562 0 obj <>endobj 2563 0 obj <>endobj 2564 0 obj <>endobj 2565 0 obj <>endobj 2566 0 obj <>endobj 2567 0 obj <>endobj 2568 0 obj <>endobj 2569 0 obj <>endobj 2570 0 obj <>endobj 2571 0 obj <>endobj 2572 0 obj <>endobj 2573 0 obj <>endobj 2574 0 obj <>endobj 2575 0 obj <>endobj 2576 0 obj <>endobj 2577 0 obj <>endobj 2578 0 obj <>endobj 2579 0 obj <>endobj 2580 0 obj <>endobj 2581 0 obj <>endobj 2582 0 obj <>endobj 2583 0 obj <>endobj 2584 0 obj <>endobj 2585 0 obj <>endobj 2586 0 obj <> endobj 2587 0 obj <> endobj 2589 0 obj <>endobj 2590 0 obj <>endobj 2593 0 obj <>endobj 2594 0 obj <>endobj 2595 0 obj <>endobj 2596 0 obj <>endobj 2597 0 obj <>endobj 2598 0 obj <>endobj 2599 0 obj <>endobj 2600 0 obj <>endobj 2601 0 obj <>endobj 2602 0 obj <>endobj 2603 0 obj <>endobj 2604 0 obj <>endobj 2605 0 obj <>endobj 2606 0 obj <>endobj 2607 0 obj <>endobj 2608 0 obj <>endobj 2609 0 obj <>endobj 2610 0 obj <>endobj 2611 0 obj <>endobj 2612 0 obj <>endobj 2613 0 obj <>endobj 2614 0 obj <>endobj 2615 0 obj <>endobj 2616 0 obj <>endobj 2617 0 obj <>endobj 2618 0 obj <>endobj 2619 0 obj <>endobj 2620 0 obj <>endobj 2621 0 obj <>endobj 2622 0 obj <>endobj 2623 0 obj <>endobj 2624 0 obj <>endobj 2625 0 obj <>endobj 2626 0 obj <>endobj 2627 0 obj <>endobj 2628 0 obj <>endobj 2629 0 obj <>endobj 2630 0 obj <>endobj 2631 0 obj <>endobj 2632 0 obj <>endobj 2633 0 obj <>endobj 2634 0 obj <>endobj 2635 0 obj <>endobj 2636 0 obj <>endobj 2637 0 obj <>endobj 2638 0 obj <>endobj 2639 0 obj <>endobj 2640 0 obj <> endobj 2641 0 obj <> endobj 2643 0 obj <>endobj 2646 0 obj <>endobj 2647 0 obj <>endobj 2648 0 obj <>endobj 2649 0 obj <>endobj 2650 0 obj <>endobj 2651 0 obj <>endobj 2652 0 obj <>endobj 2653 0 obj <>endobj 2654 0 obj <>endobj 2655 0 obj <>endobj 2656 0 obj <>endobj 2657 0 obj <>endobj 2658 0 obj <>endobj 2659 0 obj <>endobj 2660 0 obj <>endobj 2661 0 obj <>endobj 2662 0 obj <>endobj 2663 0 obj <>endobj 2664 0 obj <>endobj 2665 0 obj <>endobj 2666 0 obj <>endobj 2667 0 obj <>endobj 2668 0 obj <>endobj 2669 0 obj <>endobj 2670 0 obj <>endobj 2671 0 obj <>endobj 2672 0 obj <>endobj 2673 0 obj <>endobj 2674 0 obj <>endobj 2675 0 obj <>endobj 2676 0 obj <>endobj 2677 0 obj <>endobj 2678 0 obj <>endobj 2679 0 obj <>endobj 2680 0 obj <>endobj 2681 0 obj <>endobj 2682 0 obj <>endobj 2683 0 obj <>endobj 2684 0 obj <>endobj 2685 0 obj <>endobj 2686 0 obj <>endobj 2687 0 obj <>endobj 2688 0 obj <>endobj 2689 0 obj <>endobj 2690 0 obj <>endobj 2691 0 obj <>endobj 2692 0 obj <>endobj 2693 0 obj <>endobj 2694 0 obj <>endobj 2695 0 obj <>endobj 2696 0 obj <>endobj 2697 0 obj <>endobj 2698 0 obj <>endobj 2699 0 obj <>endobj 2700 0 obj <>endobj 2701 0 obj <>endobj 2702 0 obj <>endobj 2703 0 obj <> endobj 2704 0 obj <> endobj 2706 0 obj <>endobj 2707 0 obj <>endobj 2710 0 obj <>endobj 2711 0 obj <>endobj 2712 0 obj <>endobj 2713 0 obj <>endobj 2714 0 obj <>endobj 2715 0 obj <>endobj 2716 0 obj <>endobj 2717 0 obj <>endobj 2718 0 obj <>endobj 2719 0 obj <>endobj 2720 0 obj <>endobj 2721 0 obj <>endobj 2722 0 obj <>endobj 2723 0 obj <>endobj 2724 0 obj <>endobj 2725 0 obj <>endobj 2726 0 obj <>endobj 2727 0 obj <>endobj 2728 0 obj <>endobj 2729 0 obj <>endobj 2730 0 obj <>endobj 2731 0 obj <>endobj 2732 0 obj <>endobj 2733 0 obj <>endobj 2734 0 obj <>endobj 2735 0 obj <>endobj 2736 0 obj <>endobj 2737 0 obj <>endobj 2738 0 obj <>endobj 2739 0 obj <>endobj 2740 0 obj <>endobj 2741 0 obj <>endobj 2742 0 obj <>endobj 2743 0 obj <>endobj 2744 0 obj <>endobj 2745 0 obj <>endobj 2746 0 obj <>endobj 2747 0 obj <>endobj 2748 0 obj <>endobj 2749 0 obj <>endobj 2750 0 obj <>endobj 2751 0 obj <>endobj 2752 0 obj <>endobj 2753 0 obj <>endobj 2754 0 obj <>endobj 2755 0 obj <>endobj 2756 0 obj <>endobj 2757 0 obj <>endobj 2758 0 obj <>endobj 2759 0 obj <>endobj 2760 0 obj <>endobj 2761 0 obj <>endobj 2762 0 obj <>endobj 2763 0 obj <>endobj 2764 0 obj <>endobj 2765 0 obj <>endobj 2766 0 obj <>endobj 2767 0 obj <>endobj 2768 0 obj <>endobj 2769 0 obj <>endobj 2770 0 obj <> endobj 2771 0 obj <> endobj 2773 0 obj <>endobj 2774 0 obj <>endobj 2777 0 obj <>endobj 2778 0 obj <>endobj 2779 0 obj <>endobj 2780 0 obj <>endobj 2781 0 obj <>endobj 2782 0 obj <>endobj 2783 0 obj <>endobj 2784 0 obj <>endobj 2785 0 obj <>endobj 2786 0 obj <>endobj 2787 0 obj <>endobj 2788 0 obj <>endobj 2789 0 obj <>endobj 2790 0 obj <>endobj 2791 0 obj <>endobj 2792 0 obj <>endobj 2793 0 obj <>endobj 2794 0 obj <>endobj 2795 0 obj <>endobj 2796 0 obj <>endobj 2797 0 obj <>endobj 2798 0 obj <>endobj 2799 0 obj <>endobj 2800 0 obj <>endobj 2801 0 obj <>endobj 2802 0 obj <>endobj 2803 0 obj <>endobj 2804 0 obj <>endobj 2805 0 obj <>endobj 2806 0 obj <>endobj 2807 0 obj <>endobj 2808 0 obj <>endobj 2809 0 obj <>endobj 2810 0 obj <>endobj 2811 0 obj <>endobj 2812 0 obj <>endobj 2813 0 obj <>endobj 2814 0 obj <>endobj 2815 0 obj <>endobj 2816 0 obj <>endobj 2817 0 obj <>endobj 2818 0 obj <>endobj 2819 0 obj <>endobj 2820 0 obj <>endobj 2821 0 obj <>endobj 2822 0 obj <>endobj 2823 0 obj <>endobj 2824 0 obj <>endobj 2825 0 obj <>endobj 2826 0 obj <>endobj 2827 0 obj <>endobj 2828 0 obj <>endobj 2829 0 obj <>endobj 2830 0 obj <>endobj 2831 0 obj <>endobj 2832 0 obj <>endobj 2833 0 obj <> endobj 2834 0 obj <> endobj 2836 0 obj <>endobj 2837 0 obj <>endobj 2840 0 obj <>endobj 2841 0 obj <>endobj 2842 0 obj <>endobj 2843 0 obj <>endobj 2844 0 obj <>endobj 2845 0 obj <>endobj 2846 0 obj <>endobj 2847 0 obj <>endobj 2848 0 obj <>endobj 2849 0 obj <>endobj 2850 0 obj <>endobj 2851 0 obj <>endobj 2852 0 obj <>endobj 2853 0 obj <>endobj 2854 0 obj <>endobj 2855 0 obj <>endobj 2856 0 obj <>endobj 2857 0 obj <>endobj 2858 0 obj <>endobj 2859 0 obj <>endobj 2860 0 obj <>endobj 2861 0 obj <>endobj 2862 0 obj <>endobj 2863 0 obj <>endobj 2864 0 obj <>endobj 2865 0 obj <>endobj 2866 0 obj <>endobj 2867 0 obj <>endobj 2868 0 obj <>endobj 2869 0 obj <>endobj 2870 0 obj <>endobj 2871 0 obj <>endobj 2872 0 obj <>endobj 2873 0 obj <>endobj 2874 0 obj <>endobj 2875 0 obj <>endobj 2876 0 obj <>endobj 2877 0 obj <>endobj 2878 0 obj <>endobj 2879 0 obj <>endobj 2880 0 obj <>endobj 2881 0 obj <>endobj 2882 0 obj <>endobj 2883 0 obj <>endobj 2884 0 obj <>endobj 2885 0 obj <>endobj 2886 0 obj <>endobj 2887 0 obj <>endobj 2888 0 obj <>endobj 2889 0 obj <>endobj 2890 0 obj <>endobj 2891 0 obj <> endobj 2892 0 obj <> endobj 2894 0 obj <>endobj 2897 0 obj <>endobj 2898 0 obj <>endobj 2899 0 obj <>endobj 2900 0 obj <>endobj 2901 0 obj <>endobj 2902 0 obj <>endobj 2903 0 obj <>endobj 2904 0 obj <>endobj 2905 0 obj <>endobj 2906 0 obj <>endobj 2907 0 obj <>endobj 2908 0 obj <>endobj 2909 0 obj <>endobj 2910 0 obj <>endobj 2911 0 obj <>endobj 2912 0 obj <>endobj 2913 0 obj <>endobj 2914 0 obj <>endobj 2915 0 obj <>endobj 2916 0 obj <>endobj 2917 0 obj <>endobj 2918 0 obj <>endobj 2919 0 obj <>endobj 2920 0 obj <>endobj 2921 0 obj <>endobj 2922 0 obj <>endobj 2923 0 obj <>endobj 2924 0 obj <>endobj 2925 0 obj <>endobj 2926 0 obj <>endobj 2927 0 obj <>endobj 2928 0 obj <>endobj 2929 0 obj <>endobj 2930 0 obj <>endobj 2931 0 obj <>endobj 2932 0 obj <>endobj 2933 0 obj <>endobj 2934 0 obj <>endobj 2935 0 obj <>endobj 2936 0 obj <>endobj 2937 0 obj <>endobj 2938 0 obj <>endobj 2939 0 obj <>endobj 2940 0 obj <>endobj 2941 0 obj <>endobj 2942 0 obj <>endobj 2943 0 obj <>endobj 2944 0 obj <>endobj 2945 0 obj <>endobj 2946 0 obj <>endobj 2947 0 obj <>endobj 2948 0 obj <>endobj 2949 0 obj <>endobj 2950 0 obj <>endobj 2951 0 obj <>endobj 2952 0 obj <>endobj 2953 0 obj <>endobj 2954 0 obj <>endobj 2955 0 obj <>endobj 2956 0 obj <>endobj 2957 0 obj <>endobj 2958 0 obj <> endobj 2959 0 obj <> endobj 2961 0 obj <>endobj 2964 0 obj <>endobj 2965 0 obj <>endobj 2966 0 obj <>endobj 2967 0 obj <>endobj 2968 0 obj <>endobj 2969 0 obj <>endobj 2970 0 obj <>endobj 2971 0 obj <>endobj 2972 0 obj <>endobj 2973 0 obj <>endobj 2974 0 obj <>endobj 2975 0 obj <>endobj 2976 0 obj <>endobj 2977 0 obj <>endobj 2978 0 obj <>endobj 2979 0 obj <>endobj 2980 0 obj <>endobj 2981 0 obj <>endobj 2982 0 obj <>endobj 2983 0 obj <>endobj 2984 0 obj <>endobj 2985 0 obj <>endobj 2986 0 obj <>endobj 2987 0 obj <>endobj 2988 0 obj <>endobj 2989 0 obj <>endobj 2990 0 obj <>endobj 2991 0 obj <>endobj 2992 0 obj <>endobj 2993 0 obj <>endobj 2994 0 obj <>endobj 2995 0 obj <>endobj 2996 0 obj <>endobj 2997 0 obj <>endobj 2998 0 obj <>endobj 2999 0 obj <>endobj 3000 0 obj <>endobj 3001 0 obj <>endobj 3002 0 obj <>endobj 3003 0 obj <>endobj 3004 0 obj <>endobj 3005 0 obj <>endobj 3006 0 obj <>endobj 3007 0 obj <>endobj 3008 0 obj <>endobj 3009 0 obj <>endobj 3010 0 obj <>endobj 3011 0 obj <>endobj 3012 0 obj <>endobj 3013 0 obj <> endobj 3014 0 obj <> endobj 3016 0 obj <>endobj 3019 0 obj <>endobj 3020 0 obj <>endobj 3021 0 obj <>endobj 3022 0 obj <>endobj 3023 0 obj <>endobj 3024 0 obj <>endobj 3025 0 obj <>endobj 3026 0 obj <>endobj 3027 0 obj <>endobj 3028 0 obj <>endobj 3029 0 obj <>endobj 3030 0 obj <>endobj 3031 0 obj <>endobj 3032 0 obj <>endobj 3033 0 obj <>endobj 3034 0 obj <>endobj 3035 0 obj <>endobj 3036 0 obj <>endobj 3037 0 obj <>endobj 3038 0 obj <>endobj 3039 0 obj <>endobj 3040 0 obj <>endobj 3041 0 obj <>endobj 3042 0 obj <>endobj 3043 0 obj <>endobj 3044 0 obj <>endobj 3045 0 obj <>endobj 3046 0 obj <>endobj 3047 0 obj <>endobj 3048 0 obj <>endobj 3049 0 obj <>endobj 3050 0 obj <>endobj 3051 0 obj <>endobj 3052 0 obj <>endobj 3053 0 obj <>endobj 3054 0 obj <>endobj 3055 0 obj <>endobj 3056 0 obj <>endobj 3057 0 obj <> endobj 3058 0 obj <> endobj 3060 0 obj <>endobj 3061 0 obj <>endobj 3064 0 obj <>endobj 3065 0 obj <>endobj 3066 0 obj <>endobj 3067 0 obj <>endobj 3068 0 obj <>endobj 3069 0 obj <>endobj 3070 0 obj <>endobj 3071 0 obj <>endobj 3072 0 obj <>endobj 3073 0 obj <>endobj 3074 0 obj <>endobj 3075 0 obj <>endobj 3076 0 obj <>endobj 3077 0 obj <>endobj 3078 0 obj <>endobj 3079 0 obj <>endobj 3080 0 obj <>endobj 3081 0 obj <>endobj 3082 0 obj <>endobj 3083 0 obj <>endobj 3084 0 obj <>endobj 3085 0 obj <>endobj 3086 0 obj <>endobj 3087 0 obj <>endobj 3088 0 obj <>endobj 3089 0 obj <>endobj 3090 0 obj <>endobj 3091 0 obj <>endobj 3092 0 obj <>endobj 3093 0 obj <> endobj 3094 0 obj <> endobj 3096 0 obj <>endobj 3099 0 obj <>endobj 3100 0 obj <>endobj 3101 0 obj <>endobj 3102 0 obj <>endobj 3103 0 obj <>endobj 3104 0 obj <>endobj 3105 0 obj <>endobj 3106 0 obj <>endobj 3107 0 obj <>endobj 3108 0 obj <>endobj 3109 0 obj <>endobj 3110 0 obj <>endobj 3113 0 obj <> endobj 3114 0 obj <> endobj 3116 0 obj <>endobj 3119 0 obj <> endobj 3120 0 obj <> endobj 358 0 obj <> endobj 271 0 obj <> endobj 3128 0 obj <> endobj 261 0 obj <> endobj 3129 0 obj <> endobj 252 0 obj <> endobj 3111 0 obj <> endobj 487 0 obj <> endobj 394 0 obj <> endobj 3130 0 obj <> endobj 359 0 obj <> endobj 3121 0 obj <>stream xœWyXS×¶?1%œZÅ^Ò#DÛœÜÖ¶Ö±jõе­Žu@E­Ê ’‰$2„L$Ù„0$Ì (‚"Z±¶¥(j[mí­­·ß³õÕ·wó½÷vè{÷Þï{ÿ½ïü³ÏYg¯µ×ú­õ[k³ˆ&,+d›H—¦Œ”I¶É¶Ì&¥mRÅŠý¢9ÌLóê$æ5ö*7¶k죆?…SØ`Ê •¯r3ƒÇbÿ46}óôå?t¹Yí¬s“ˆÙQ‘{Þ™;wÞZ™\£%%«‹ÂÂÂqÁÿHáB¥(I*x /ÔB±L.JU ;…B*Y(H‰…‚µÛ#önÚ¶A0{ö(Á¡T¨ˆ "ÒâÄ¢xÁQ¼Pª¾#H”)â?^ñ2i‚H%’I• «•‚XR.ŒáMÂŒx¡Ü/˜' ‘R‰×‘R¤ˆ•ª„ •L ’Æ‹Óüæñ÷D™T%+dX.Á¬*B¦T)ã"¹J€-F„¯ÿ㌪äX•ß®R„ÅY"þ3AŸæ÷æ2U¬Hª¨„*¿8¡ A¤”‹c5Ø.V%Wˆ&ަI“þi}ž@!LŠU$ˆ…Ê ½þ¨üÓ?Á¿x+—‹5{eýþH¥Šü®£+`€[~„ű eQüÿý៰ýÿ€$âÍÕÒ5²µr…R•¦ŽÛ¢‰O&%‹v‰%ï-]ö—åa+æ/xwÑâ%ñ:±xƒˆ f;ˆÄ."ŠØMì!Ök‰ùÄ>"œXG¬'6›ˆÍÄRb+± ˆéDJðˆÄL"ˆ˜Fü‰&¸Ä+Ä[8ÿˆˆDâwVëÙ¤h6‹Ë~òÂî~ˆø#ã\ <ØKî!û^“_›\:ù——ÖO™:eӔƩӧ®™z;èã W7¨oZÈ´ôi£/ÇÀÜ /Œë`¦{YÌçTd¾­Èpk>s94•ƒzÆ+/ËoáéàöŠÀè|K>¨չŕdž`@(”s¼($Çœcfš?¶‘:è çAçÀ²^TÄ8Ìýð÷³Á°ë¶ëëîC&¾H©S¥‰]&àY,EE…”_ ‡`\÷«|_^MùŒy}ÂÇ[¶£÷fñ¿„R‡;ʤÎ~OÇÓžu•Ù@:°¹l.û\ô,ô6§..®é¾ôøì@' =Å&ÑvØ"¦¡°îCC´#3k†°\×vªÁ÷ø+¾ßßæ¯-Áȇç!±ç×é°Aâ8¹ÓØžVC§×¦—QÙ\ÚÚDrjªóëšñ$|Q|tDÇùÂî±Ðg+¬J4m|[¨f‡Õ¶3‹ä~]p˜º º³½–“ÚúC ŠDÄêM((6ÍÓXZzºö>¿ìTAmÙY’ûùmXIÔ”œäýNÑêHå¡%-Jßo]H4“Yàc5>€ Øð.³•BsÐl´-Zz!êÇkWZ†.Ò×®v=·Éow -ãÕTOSbäšÃoÚL'î*bù‰¸ãÓ‘æGgnÐ'.t·ô`µc 5§˜§¬kðö˜€Rp€šcÑeÙÒÝêüƒGâ R‰D( @ 4ˆ€óŸÝïýý¯´¶|Ñ’’0ÀCìï@ ¾tN½û5}úÌå¦kà18U‚ˆ‰ÃW3‹¼ÞàU0ºÿ½À̦j9¸ANNYACÐsz=…ÊßVγJM ÆΞXOà'Úb_yå]ï]o¨Ê®$| .€+á’»‡úÃ7ïOY±ƒn~š[ €+Çåæ9s¸Ës\ð¹£NZ+p,œÕ©`Ø$]³56b¿x eéžšc0¤y„n¾xfÀÊ^æM/ N>?¬ìé»Óv¡éh%(ùÙùYEÚ"»Í•UGfød*¹^žJÇÅÆGèâ3“BÏA‰Ã½Æ`v®1ò´uù¹ 5eYšLtèèN}žÁ«ñ1ójq( ëVßnN|‹JGK*8Eù%à¨ÊöÚI®ØZS騘ùàÒù;ÇÕ½Ÿ\¤…ýº£ ‘lóùÚ[?(áWp¸¯z!ɱdZ²3d¹3òñÎ"…Þ­›¹fÌÆ_Lw}"º2HɃ’”C»Ä'ŸèøAð¨é ü{+ žaVQïsšžå¸ýPð ¹v›Ãe±ñ¢·îM1+,V0pæ8ÈÎZÔä4»3Ï,±$ ™æÓ5öµ5ýt™o(Ü·E§ÓžÙVTšƒQÍ¥Áïpü蟋îg¸ÞàîQøáÝn4‹+~Ïf}¦Öì‚#TߤïÁÁ€ÕœH´Ðª;°†äžš·}_tÊL£¹Ä“ÜXÝð¿îHC’5ÒÊË <Ü®b{3ߌý¶ØfQ"z=Tn ™T•Ñ~ãÜyùRn=P“ÜhI•¦¥¿ÖûË0.ú—ù f¸—β}ÌÛÔ‘œ"÷ D[¾°d})š v2·µ°þ§çðõßøí WA'ÙšÚ(IÓÔºc•Ž_fÌ·€,p`b‡¯§„ZáŸmƒ†‘ôß€Û ìÀê²84ö]YBÛDþŸÙïezƒ+Àè[!ÜSLœDéõ6»Õ"²Ì€´Ø ½Ýð£~¸ŠÎ-Éq»‹­¹¡Û¬‡i¿¥Sê‹Á%Š ÑâuÇã®\ïiƒ/?¢Ó?p€û&-56uÕWÿ8Âç–¡÷áM꘳F ’Á_ö¢ÉëW+å"­ɪæ¾óÇŸõ|Aw]ìoírL¬–yù ‹ }Ȇ“ÆB¨ÏœÌ£-ÍiuZ]v§5½:î ÈTJ.À¹p\ ]ß7°qÝž84)œ?# OÁìù¡{ÍI¶& ÕÓxx÷¦hAÄV:Q£Æä#Ö©½ÔòK÷Ý;zêøi?§ÌÏ…·ÇþL¡L£6L£R™­²*þ•FuLAàE¸!½ y­<åP/Yg{)Š óëò«i8Ùî9ÛP})‡±e°Îé]l3‹*Ë-Ì9†€GчVUn®C/-ÐÙtz8.=ÕdT§-`Ö\S‘¾Ô”odšV›¦¨Éh¾CpÏÚ zNkº Î-Šz‰J§OÓ™¼~µ©Ð 2A|âËПÓ!ª´†é™Íq¹²A60»’l»³ì.ƒ#Ó‰½0u0´Õò̺ɆϞS»"Òö2RÔsãaû>£›[ºª0û×z,F»Óžm¦­§˜I¥'³®Ñçmè;ؾ³¾½…Þw~×O#Ÿ½s g³³Êiæo°ç{¸sJÙTÔV“Y È,Kñ‘òVÔ'Ñ}÷ÏÂO0T»MI6ܵŸ: @ .[fô!´<ÔÒ­©HÀt?-ChNxWÌÕáÞ֧ô)Ú©*’[&¯ÔÔwž¼5ÈçF£åð:Õâôd€$Í{­Z(R6žøv’×®ó›š;«›þðüóJ-ëè÷0ãþ²¨µbΉÈĎ󷧨•nʃs|Ïï€ïxÝ’†½hZ„ÂМçwÞ½1zòËÏøH RÇ~= H_¹N%ÎHKèÄd¡f©ÚŸÇ(®>òÁÝ'Êk‚‹>m» ç^:|/„ûŸŒ˜y‡ÚÆq»ÛR ¯:\"ľ±}8Od(•Žˆ×¤%0«3goÆëäúk…Á>ûþòþÞyõüCGR+€‡ôÔ6”¹ÝÀ•Ë/r–»ŠÉýíÇŸ¿¾[áðÚ¼ô‡ûw4Š~¤r0)¹]¹®G…ýùáNVµ#þÃ÷?9~¥® ²¢š_VÙÝV„7?‡³™™Tgµò“dã¡ 'ü4 …iMý‡î_¥ÿwHbÁ“÷rï²!&̨ F&L³µ¸¸¤ârå Ýü¤zÔ‘]òÆ„Íá›Ð› øp ³Ëž¿Ã`Ýnåé1c&./¨ÓâDÍÄ$)u¹™¶44s¼J]pAÙ±®Ïï ÑŽG¥2£!ÛaÈÖÑ»P¼aŸU Œ¼ÔJ]ãÙöÆï/M´Œ~†òÂ(/ëÌm6T@¥L±Z²LZ­~‚À,E…%¹žÂjäæº‹Hw`Žû¼íp¿•‘îHpàaí Ö,-}?ZªÛaƒt2±"½¥¯³åÁ_Íœ¦äé*IJµº¹¡¶¶©YÕ §ý<áež´³Æ¦bžoæÄ¢UÙç ÑZ ç;yhÖx½n·R·ÉŽ‡ÒžŠ@mŽÞmñ¹ÆbÐÊrK‹Aš±‡~ʹ٪ØipéZºÒàwÇËêeà 82›ðcL‰ÍÐkpÁØ æ–æ{éœÜœü7œËÜ µçG„Ö+öâ´×ªs¸l3^¯w˜œYÀÎKªLoloþÛU~ÐX"†îßYð?Fá²{ì±u»,£%Ë‘-KRk1?Xì%ùyu˜XòròÜU €×¡he¤[õJþ¾”¸ýëѤú;ž!PM¶«êEÛÖapò/B¡Ã½Ó¨Î^®çéêʬz“êÝ$Ä¥UaŽ,C4y›s.ñt¼ððÒ…c€,+4ëÌ)hêd ý`¿ë8{ãÌð@o3 g™ìN£]Cï@ZsbvÈâIÊu ý½m#çøù…þ1__f1{¡šÇS™ qœñ¥ãkÓ7@gZpÓÞrв«JÎãÀ!x# Ïßò­ÝÌÐ |öš™ÇÔrjo bÎH üEÝf춦úö‚Ý$b­xg‘ZSä“òÕúB ¥V§LîJ»à ¾—|¡:s’NlOªXáõ»µyµƒÕrz`3Uck(4C¿Q±t âÎÿ½Ð$zåærȆ3!ráÜßÂGfË[ 2~¶û:þ0ãW8¹œ‡<¨”ºÞ»÷à ʕ‰{hñÁd›Ú–tæ›/½z馾VoÿÄèmñ2wo±˜cc³([IÀøKœèÕróé¡FÏEÀƒ ŽÛ1Îp}Âñš±àÚà–á®»pþíŒáîïð&˜‚“Oôõ€ä7k>{S°fÛâ(_µ5|·~XäE¢-ò’ô[Ì œöxôÙ—’óËÑaB NB¥°“\±#⃕;?ûúöÀõÑv~ž€ªBòʧÔ·´  ›¼~¢ç2Ÿ;t¥gÿºÝ áN)mÉ@aôŸ_ë…ê>æ¥ÖW`Ùmv­–‚3k¿lüö*$†3œIµß# F8tHðÆ«ì(mäç9u÷nÞÉ[»moêJ- O½F}ѹoùŠ)š§ÅŒº%ñ죑æû=½t]ýÑ2œzAð;Ž¿²ƒ /ñ=ïùSJ¬HKëÍ­õu-G šûÕ¿ÁŸ)±R‘"©S¶ø?·*êÅ4Þw]fÁvXD!'sK¾ZÁ\\²ß<¥$hijmÀZR±Ø›Æ›X­÷à¥{løóØr 7y(Qè•%¿ôt{ŽvÓOGFá g‘pqÄ“9|«Œ:ßrà}4#…E¾I 7ʼn2*eàáóA¸ð1ÝqåÄÑÞ‰ž1 ÓÞtØêÑqö©KjŠóªŠêiw‘»ÀÏ¡ð ¦"Ïã.ù¼> endobj 3122 0 obj <>stream xœXyXS×¶?É9UK•x*TMÒÖgÛ:+jêŠâ„‚Œ B’BÂÌfž!H€P&ApªÖé^‡kÕVímookG[{_{kß]'ws¿ïí×Þ¾ïÝï½ï{ÿ@ÎÙ+{ïµÖoýÖoE@C ÑNE|D¢n:~§z¥ßY”‚=—›*à¦á¦»!ñ÷.«;'ž@¡ nhÂØ–iÞ7<]Å“\Ó_⾜8ºO‘ M0$à|öí90gÞ¼ùÕš­":F/}cåʕ҈é?W¤›d:E´J:‹|H’)Õšx™J¿P(“Iõ12©\¡”I7î Ú¶s‹ÔgËÎ}Ò-2•L®”$F(‘R?E¤L¥“Í‘ÊÕZ©rôA©VE)ô µJ·Pú¶N.Õid‘ ò%™!R¦áæK52m¼B§#Ÿ¥ 4Z®ÒË¢¤zµT¡ŠT&FñÇ“÷rµJ/ÕhÕd=ž¬­Ô:½.R«Ðè¥äÄ€MïŒÞQ®çÏÕ)ȲT-'–QêÈDÞ›_×ôá •Nª—ôü92i”B§Q†§sÉV­bä ‰:…*ú_§Ï—jeÑáÚ(¥L7²/•ù'ý×á2eä»ê«_ÏWèu2¥|áhb¥$³á*)I®ÔOÊg71þ.ü+]ÿ¿RµâmÕuÐFͦ„ÍÚwt[ô‰Û’à ~)‘þQ;e»äÑ1{{ãö)ã—,]5ãð˜ C§½ñf:E½Fí¢^§¨UÔ j75“ÚCÍ¢©ÙÔ^ʇÚGí§æR© Tµ‘Z@¢6Q ©ÍÔ"êj1µ…zƒÚJm£Þ¢¶SK¨¥”µŒò§vR,õ25•r§ÖPñÔZʃz‰ZOM¢‚)OJD¡VÀRc)%õX ôŽ™5¦ÞMêVìc5co»/s®& ÿHO¦ë˜…Ì­f½`'·oÜåñ«Ç׎wM˜Ðÿâì¿ö8àñõK+^º7qêÄÚIô¤U“žz.õ,ó¼. eNOÞ:9l²qrÑ䧬[Ár/A±‡KŽœ°þ$èìh¸6;Ù\aJk ‚qXǵx©…X;<$[h6¶zk!ÔI”è«Q+ª­p6½WÒ …ݾ5Ñ(%™2bòs© =ŸÑÂGôpXØï ÷'œëîÁ]BÎóN´ÃóH@ ’)¢!ˆáÂY¨fUf pŸ¥Qx¦õˆ•ÑA¶ƒ–—šëQ/v•”WUU2¢Zš5-S{4œC#¹)M‘KŒÍ:ª8£f „~¼ÿòÊ]!ê¹ØÃµ9µÜßkžÏ` ,†•X 마æÚ\+XQ½–¾›Û˜†2Ã4š7d2¢X-<¤ÁÆ>÷!é˜IÌqEýæzF¤¦{àÔ£W~^x¯ïÄÙãBQìÏöá1s#‚V…¦6 J¸Â±'êkOŠEÊ{a ^‹Uã—ò$\^zçÛ!pÂlxf»A Ïb‘Ïkx~ýû0اÏHX¤óžaVR¨d¯5îÅ+ðÂä»’ß…Y°éèÅ’‘\¹ÆÛÐËÜ\»ˆ X£ÞÉiÈD*dHÑF`7ìï…'€± 8§!ïtgn5ªfšë+N‰…îNü¥–îÎo5ذî…gÓhƒÅ²2“äëG'½²"£ =`À†@¸UßÒXÝ]êMN5œs½Ð%8›Ý\3a>à§;dP™c³ÕhòëQ]T]JÿýÈ@ä-ΤÈÄQ-±=ë'˜4Âô‹Å€¬ÈX’Xà8\}1ø0žƒâ0³ñ,ˆ¼½¡÷²¤³¹Ù>t!hÁáMI„›.sã®Ô<$áY>SD[~ƒš*5Ãù4ŠÈ´&¹{]­´ÈÖDï,Nµ£; ¼JŸ n5 "Æ~ò |@²þ{ì­ß­”ˆ¦…°¨¼ÒVSkon©iFÌEÇ.<OTì‰UµôGã­íážuøü@N¯‚ SD…?|âPmòî|‚-Ü¥A 3 #!KaN“àkBÑ4-}+»ÑˆBxØ,ka[ì5'?x7önqÛþº h9šŸ¼4îˆ"ä°~;bŽ˜j‡$#>;tNXõ7³Ó³›d}_%~ðý\ùgZ·›Ñy-ØtH¥µõ3Ü·FÚ7ðà€².yã—½F":ýÑ<œí±õŸ’\›!×&)㯼M6µóÞÍþ¶¸Ã’Ѫèà {¤*–Mùp_, ?Šjÿ[EH·¼M¢£å>¥û!Ê]-TnMVG«Bä{ÓÖ!f‡¡v@94Щ¨Ì0­ðM‚Ј…Qј*dÀH÷ÕV^„åçØÛ)v =¸Âo82ížæ=» *>“»uÂìjŠ©ÿˆ Kh&)éF½³Ä\‹n0°›¾Ø>ÐUQ™•V-nÔÔ[[ÓÛÚ~R"Z<¤è ’i¶‹=8@NÀ}»tK(êqɈüÆ%- ;éE%)5è2éô_ó{åuäþNøF+LÁ˜˜Ùˆ¿¾( ·¶êÝo¯§Ætˆ›µÕš:?ÆA¼ðNïæVt Ú~ñS7x³03‘Î6fç˜Q6Ê(J+­Ö—$"fñ6ÿåÛN…ü&y?¾]‹â˜¨ø„#›C†¾H«ñJ§°º©¬¼•¢ŠüªÜ6ó%K;b¾¹yãëûQ>§%[Ž©¨›éjwöµ¶Y’šÅMÉÕ)õ¡Œ‡«ÑÐåòêôÂf¸‹Ý\¹ÐÏâ§Záãœz ÚǼFT%nõ oˆ‡^IzŒ`²›à/ž!•9(µ(þïÊŒ •9 ÏùÏ pôÝ’€ˆFT×<¬`<à±ù>ü}PðHÜàÉáðÕ w.<²}/£¹ˆ?¢·DÞ½ÓüÓSbmu²,-= y«- ýxï;š=ý¶²…;ábi(þƽMȧýJb 7î I<©’xÂ&FøÖÄž©u–Þ(¿QAØ$¤ØTK´!÷ŽÓÑwr*³H[Æ;è°3ñ¶ÂwcVJñL‰¨ O{äóË¥.Û…³â¼ß±(;#ÕlJÖ'Y“ï×þDÀ¶]¿ÖÕ¡“ÕñÒ ÅžÏûéùlÛ8È3X*·h­ÐŽŒçö0Ã*í1¦“¬k!ÙI¯­Liä}žEHŒ >åÞÎ=¢«µµ·«ˆûqZúAVcÚÄàk4Ÿ‘`W/,ép³`yH™†¢êhROJgfWî]J…ÙŸÏÆõÅž ±ï%NLZîƒgáYŸÎƒ‰:ßùä¶×Ã:¶&í?ÚQcZ…²ÔP¤.:Èé_[Hi!#²Ž›îÚÂbá}…#‰"›Mô ùO" axÌÃ!’‚XÆÜÂ/“p<Ó˜ö'zï(o/HH_ ý}ú îÜ'­á>·”Åif1‡ä2ípЛ‹Ì5è6w¾\ôåú枣ÕYæÜ¼¬ì ±Õ˜kAŒ²U×Ýëtö^8µ|ë]¨Fœ“–2{B…£m~¸‡´ù‰Ò 7scÃbbÂtÅvw (zÂø’òy¥Ã`÷dÃø)¢œS³Og%df¦Ee)N¬ «-8®L6O[±{¾uÑÆï‘܉û2Ü‘€x¿sèÈÚÝAÎó2±¦7½+õ£Â蘰ÌYQiC¨:¯9ëBjoÖÑ¢>?~žCîè”àÙ®êOt¢sÞ7N÷½?tÚ ?!©ìÛ™‘V52 –ñº§ ^`ÑÛËRžv]NzI™¥ =b8 /å^ iÀã™cÂ|qþA˜‡CÜ `üÅ30±„A‹qî¸pU|°bõÂêüª‚âG^u2!kFŠÅ‚'ãÉ^ÜF¼KGwçÕ¥"Ù–¢Œ)±y£‘ .Ï)CgÒ-Žïñ+ Úr3Êôæ;·º€X˜´å[kð~hòúñ—Ö£7+x f8ï8·à᠛˻ɢëu¶[âŽ<5YñOwb ÓÉäåázðü׌û£55*cÏCäóÙ4»ÚüW–щ&‹Ç•…Ç_Ye¶ÆÚ*Fô'[SCyÃÔ“õú]#µa1ÉóFSBÊpÔ¸”7nn –ˆé«×Œ˜†[Ì2ÞÔê £Š,5¼\ýñcL¿ã€8þfŒÃù¡l3"Þ`"¸qoØ=Á3ñëðúÑO¤ßW°ÜæÕtÀZ’ÊÕÛíšïݡϠI‘Ì„dlŠžàˆ—±L2¸àNvÊü=—"÷Â݈8ÃB‡pDî¤|çâ¿|Ÿu*{0Ýû+õ¥=h¨×Ô‡uÆ×& &:A³ÿZÌW°^ø^}¶ã,èȪ•%+KùÁ¾¤ëø µ/fCdQGŸŸ=××{æ¬ìd°îŽ ‘ÉŽ:!?w¶¯¼ë æué±ï¿ºòƸqë¹D–ÌüÁíŠjßZæÑ^_:$'1[™º7N¹Ÿ„âÍ ðÊV—Ðo×EÅ•Tä…ÓŸ*Ù7òŸËÿAZ²¡³£«³a]AçŒ Çbúãís/0GßOë =6›ÁbœÆ~r¤6íCñ±~f&[ÃîjRu¡3è\këMïžÓå*êÜyæïa†]-Œ°V H\žôµêš+â›]Øô÷Á$egÒ2ƒ?Gž ¦ˆ8“îùLØZ‘™ Á—ii1E?'Ý"BºdüŸF/¶É‹AÌ«BôKIO}[msK5°¢_Ž;ÌÆ‚‚¼‚—l_j©E'ã,{æÖ‰ç°`r½M±7…WªÍ»%ÿð¤C3­áâÕBb ë€ B®ôóÃh.f —¼/6.šôï2É7ÕIü_öÂp^/ŠMí.ïvÞ„ið¦»6±ÛѶЈq{  ŽøŽèo`ŸåÁs‰*aÅïËYékÕXTiézÄ®ƒRh˜×xíÜy»?žM&B1ÞXãúºFì/nÀ*Xt¨&¶-ñxÂ`Æ_ ˜zMÓA¸ÖÑè3]ëûwvG+úläùQkÇ' Ää͂Ȭ¸$ERšíeðmJÔ-Kú<©YGd_`®µõ+âðNðqƒ{äö¸ ÜèÊâŠâ⢶*gy-bœÕ‰Á’a–F+“S}rãôâ¢Ôz"Z¸;|xsþ À%˜æÆi!šÕ UÍÙ3‰È›Ç÷Ó…?칃yÿmí#LNŽŽGE%+Ôë™vaÇÞö÷Ð ê24G×$U¨ÉàjØwè oL8‘‡‹=·„þM0–`,‰bѺåêTÆLUØ_ÞÙÔÝdëå!>Þov|Þ´¬)ÑÁ÷^ò|9í„¢)®)ªüBbþqZ[ZÏ`¥åŽ„ï’&k5$QÉv.Üì®q ßÕ5aH[&¼HQÿ'!Hà endstream endobj 262 0 obj <> endobj 3123 0 obj <>stream xœyyXS×öö‰œÓ:´%µIjmµÎcE­3N•AD†0C€2¦Í¦$@Â<Ï£ jµuªÖ±ƒzoçö¶µíí>ts¿çÛÛÛûün|ßó0$Ù眽ֻÖz×»vX„Ó$‚Åbq÷EÅ…$K½%qû$k={‹#’™гXôìIô+ìí(þ7õXŒ3-˜B€)l0Å©zö¼I.c?¼4¶ñú³Ÿ='ÕÄfÍ?è}øÍ… m“$(“¢""e¢åk×®…(E¿¯ˆÜÅÒ¨ˆxÑøEŠ8V’'Ž—-‹E²H±(<*V,Ú¶ßÓo÷¾¢ù;÷íÇ‹“‚cEžÉ!±Q¡"¨Pq¼Tü¦(\’$Š}öF*‰‹’EIâ¥KD[¤¢`‘4A…o+BÅ ÌÂ"Q‚8).J*ůEQRQDRp¼L&’IDQñ¡±ÉaÌöøópI¼L”$Áëqx?ÊS"•IC“¢d"¼£§ûŽg6Ê"ƒe̾Ò(¼,’„ã+Ã$¡ÉŒ7ÿ^“GÅKE2±BÆì"…EIbƒ•x_ü¨„¤¨ ’¥Qñî¾H”$ŽN ‹K'žË ò§¢ÿð:8!!V9q¯dâªï%“Šc×< ¬G68^„ƒ+ò1Ñ Núï•?ãõÿA‚ |·Äo•ømKðwOÜž´CºS¶+ywŠÂàÓ 91ƒp%&|‚MÌ$fÎÄlB@PD!$ž#DÄóÄdâm"ŽØ@L%â‰Ä4âb3ñ"±…x‰8B¸Ù—8J¼LøáŠ œ1q•ʺ4iý¤öJ¶† $N¿9û9_âåüƒô$/Rk¨$êösQÏO~Þ6yîdýä;SNé˜:sjàÔ§í™ÖúÂ/¤¿€^¼õRèK\B]ÎpC¸w_~íåÞ^ïôtÉôßf¼5£Ûu¦k¶ë€ë_Í™9oæ‘™?ÍÚ?+nVãlî앳³~ÅM0[°CðDð›pð#‘“ÈU´Rä. YDc¯ú½ZÿjßœçæDÍy ó§…ôí§_u°ÆÙyGó ¥‘wP}ÕUÎAaãº=è ]j@6_ýíd€ÜÒTžo-´‡ásÎÐÆé_Xž`N>HR¥Ê¡°˜×ÂR$a¤P“ó4: Øè™gY=‚îØô^Q~in šJÔþB”Ko½Æ7“RÃHé[ .]ì O¯)oÔh]ìn!“ÀC«òc. ³‘þ…ºr0JA%ùuй-±ª=;Icž¿2Jï“ÊŸ6¶ØÝôãn…Ý:?…O×ArwAåØצ e”ëÁjÜ“[´Z·,Š­€#€[ÕÝ]mŽãàRöÅ6Ç5&”¿SqÚR]ZWMqcëklÝý3¡ÓŠ h‹`-úŒ÷ÎèRãÛÏKC=f‚ƒ)a¡²eHún@ùkJÚ„°ß [Ym.± †8ÜXH^X±áPÐb!FÅÐD¯hb5­Ÿ³a>}Œ‡¦/[ˆhÖWo@èòí?¡ÎXú zY¨•ð]\ˆ^AÎGwn ¯ëKJN§~nQߌ\¹%`Bhc;XðÆSöØì$’(8§s*Ó2tijôJqEóa’¾ÂT Êø ÊZÒ–WJAY.eGí òD¶UózÎ@>®h+ V Ë2q4/ÚÉyšrp‚‡H8¦\þ{CÍ©cÍýS ™=FЇxi0Å9…cJIÕÉAPç«‹ü+üŠ€µÀ-v¯Ïö½â%MKZVŸò¾ôΗâïtß_þ˜RVmqßçøà€ãXÏhìç²)¸û+ø|ýüé”Ð>A[ŒMb‡Â¨¡¸JU•ÆÚèi—\î>‚ÉOfp3JèWx%¹fP¨³áˆp<’‡õzOÅ}C3HîÑ*rs®¶ ¼GÁådgtaPðù/¡|¾¸ý³‚’ ¼ƒ)‘Z.ØÌk9×5|gt¢Ûó¶#Þ]-‚i4=ô§=,útç©RäÉÒ¤ 7 P)‡v§ÿél¯%åh“s§d´ØQY]Û|Üz ï–Èß=þOg5}™¬ƒîÎQû#K~Js k7÷gÈâm:í¦ œo ØMB üÒ~åÜÕ‹ÝŸïÀçq|ÎX]è¼c-‡;[A>4–¤átæÆ>mçµ–÷?¹šuBðà`ÿj€€žY³îˆo¼—n Bu8)'P´j*¡÷eڥɥî L}4ƒ«†ãô^`c\I~òK ‘š‹\®­øúÂÙ†CB„‹å€RíŽíUA½•ô)O/ýžÜŠ>åi¦Öž¬ˆÖÅ‚XP*wÄ4§\×0ÊïÞy|¥5z×vØc8ØKz°Óß?Á•Ñ_à < ÇǤè5@%püAp¡Ñœ‘Ÿ]*)àò`ÓZܨZ¨–qŒ!™j½F«’¤Áf.Iœ¦¢¢FœÅÁùT£®\NÕs²àkÎãMn®‚¼c²hÀö‰Rß®QoÅÖ»+ènr|‚IiƒƒuïÛLÏäYóKrËU_’$Dù$ð3÷è0ÙmäÎ|• œ§`2Ù6x²±¨$ÃP&¨Ð”™,€ª³U6µ§8¢°®p÷~IfäJŽÐz*øÓèw^þ?#i)LåaHÝz¥z=6ýuÆôBÆôÙaúý?MßN7=“ Øn'7h¬à6ãáëäÇ R]¾WßP£sÐKÚ—SWàÚfpÁð:/ÎvÖs²³ÓŒ99™€o†<}!Å­,NN.Hœõ¶·ï¶m¡„¢;å•RËŠ‘øFÅZj‚”ú´Zíy*-³pÌ¥y®G °f×⚪455fVͺÿþ…NJÛ÷w ñ¾¤B]ù}­MÃç[¢VÔ2´¤é£ícµA-úŽ=æå¡b%g0«<«<Ý–V$Ç(ô³/aZ3rྯ›¾ ^i¼ÎQEoD‹¤"¡~UËI‡ÎÉ“B©Iš¯4µÅHÁô6{³qó9Oáõߊá$ðÀ—:û:)D‚‹å– …Ô4Øj8MOis±À ´'ücXŒi‹{ó HqJsòMcš)Íhû Hͤ¸õF“1c&ÈÊÍÎϦ¸7ßEg8kZŽ]í©;Ý.Ж¥$© É€®n|O{Iîã9% G‡`·õëSxî)Š!âaæ·ËÊî›1Õ¶*ÈûÆ2=Ø6×5Ý&®­vrs‘Ö‚ †Àsèð_­ÐžõtˆdZÉo½®Rcu¹õîÀ¾Í¦¥'yœ@}Ù°~‹VÜvy%«Üü(¤#$C£Ñ'$ÇêâÓ1 äV‡è y"˪*$ß>áûawoEc£`pÐÙäzdŸtt•²ò™â±9ÙYÄ’ cmÖêÖdasOÚɵù©VðᄹZ- °¹'äãg-ÛªqÐo;Xt"Æ Õœ¶,›(€!Ûi˜Ê]_‡%&k–”à&Ufî̧lÈWMöd› ÃsáÔçšgÊ7æ§)‹Ò‹@0[lÝðexǵùF‘¹%Ÿb’îÙ7ðj²ÃXj* 6Iõ ËQ’ë(S ,|PSf1ãÇ©ÉîÌr½ã YaV)—¡×ùКYš] Jù º¼¸£_µKMÖfj|á,ôky\±¦‚bKyî!F×/Þ^`*|3(,©èýû{תüBÞ‡ÈÓpÞûíZçrîS8ÿãÜãô¾k<•F—¡”ÌhBôÓÍêºä®cvO@-Þâï!sÈkëª59…9favIN10Sm5}£ñûH´d¯*ý˜8Y®‰Ñ××c(èòPõéË®åpaUJÿ¬lg^BK1EÇf¤¥è¤IZ  "%ƒÂ\ý]pêõLC01}ñ)›^>6ƒWžS @Kvy:ƒdYœ/ÚŽV»Â`ײ²‹p\»äS¹¸ÿARo3)Ûi'70íC î'ªÿ9çÞæ3î@ÊQ’“ô@ÇèÄ vòp®¦tÙwHó]¡7ô¼qµ¢øF!ߎÀ²€ƒ^icÁÖé0ÐÆ‰òŠØ!ô2ôuýN±7¶T´åòmh…šlÉ.5 Ðé’“b3L:¥V®q¸J”À¬sK.Ž]¨º„lÚÖ#_£¹®ˆƒÖÆ…ŒÑY|5|ÝFJt…–"³Íâ>„/|D¦<0ñÒ˜Íd,–“ßcÝ|ågÃÅcxyÁê„ô#Z~|ºs*Y”[Ì€ê+I ŽW±£?‚®Oá$ø|aÓ×óöyEøË‡œzGºN?8¹MCì€=k­­ÿ½!öÒ?>ë ôp+O%ÖÈÔªÈ0¥ vq¶j‹:…t nY­ 1èÿÙÔ¸…´5OÝIž€[½âÑ—q H˜›…k¬"-53Ç”e.@͈„E&k¦eBÚ̃y  ÙY©/VAÊqÍO·Å5ùUD5¨eª8Mb²BL -ÏP¨0« T8gårit[ÒÀõçàÜ3B¸„^di++­Ëç3¹~›vnfÕßgÓsà2^Àö)–GËö|ÉŸÎÞú¸Ë¢/%Kª”Õ€ßPc¯=·}d¿¯<"Dè$Ù Þ¦Ðô‡K ûx_Ek— ±Çû"5í·©¿g(kˆ®ÂB÷-úÞ¸Î;ݳ¼ÃÍqk!nŽÏ¨ò–År‡ÉÑ%Žç¡T:Ïù+8ŸdXt`+5¾€s5 7¾OÇ4UU-ø‘¢ç‘°`|ÄÙÊÁN€zf ‹~ Îâ) ~¦T­Š¯QE¥ùâŽ#àÀúMgúÌBÏ;WqJ>´Ù.a'à ûø›XãM åÓ ‚~¾‰ÕøÊ±áwœwÚ¹‚Tædƒ,@E¤cv¦ßDz!@iأ⧒ŹE PÝ%†!ZFŠÛÊBñ~ääŒæ —ﮂ“Îõ8F:„{0í:£QgÐ+åI†x@¹ù|_€Î£wî½;zä´Þ‘ÆæÂ¶rˆáZÏ£kIp©´Ûn±–Z zvÖ)Èž,k¦-Í¡)‰{)ô99ΣÎh“‚3¬é}G¨ñ½$×÷¯›Mr-ô> õ›0¾ ’],ztãl:¿xƒcÍñç•=Æöì˼ÌI¿jhNj‹ë ¬> üÀ¥8êHH‚;X‹!½½’ßܽ‰zñÊtt_—AIJj‚Ö»èÿÓÅêÀZb#ä°á¿ÆÜxèšEjàâ¶eg¼„<> û;Žœ E0ðûøÇ>—„7×t-ÄP; ƒaeWÌÿÖÅMžÚòÃiIª$™,2ò¨òG«"[Gÿˆgð´é»ªwp´æ, žiÅym0¸‰õ㦪^À¢á‚½µ§Újˆ¯T$–*Uk¯ªí jØ¿÷PB`¢01(="g=µ6æt¶êuÛ˜ñÕbÃR_îRð:œF>SŠ5}ð$3üð¦2c@,< ‡x Ù•9 à8S:Xw©­ë2¸4= Í¡C«š㬨äp+1¤—þé†MÆg•ðv¾šéÂÜX:Å©Ñln„³®™»ÀÓ‘rMnžL0ÁçáJœQ£{ ›XMÀÔûMl:švåõn$åx†“›“‹]J µd˶eâkÑB…R©2eDÇkå¸3¤”ëúåA8uèAÐ7w4 œô´V¶påÈÀ–|Ä+r=”—T*€£½³±¸$Çœ“ìÙ–œ"Ð úl­íM¶Np4gÔjÚ(dŸÉk7~dÔíÚ¯MaÈy¥WóP­Ù2pRX¿â]lênmPÅUª"ËAu >2pðÕoÍ9öòŸY2æ…Vò'ýк_nXº*‡ûî\ëùbbº D³á\œ@ÏR(èÍ–µ÷zƒÛä·¤#>®7Þ†SÁ•À†'J<"qÐçcxƒ`XÑ{& m!@Î`~üë¡á!‡e> UF´‰ùÀçÀ·Íÿè¨g§³Î°>|÷áäY¿å ·Töêd}Äv!ò'ÁNƒÖËôìøã`©©ܤ`ùKð™užÁÒýxžÌÈÒ%¥Hå'0 § 7Kj°8ý˜p<6¦4¯t|¬ô*2”ãû'N@蟘”zúj™”º?6ÏÎçËKã;P,r½ni)oolk°€0¨íNl÷»50iÕÌáWwÓKõ4vƒn3S÷-¸î ±ÅÓ‡y.¦¡ËÎp5‡ë;@?á5•÷Á—.[ì—¡&Fšf3ªû?ÙÖé€SŸºW‘ë-ᜠÁCà uv çÊñED§ 5ÆšXá‰Ç9ì>ŠïsšðþË ï¿‚é@^F¾§L¬õTbÎ/̵åÙrK¿¶D…ú 6e%éå&ƒ&]ÔÀ`VU+k5%©¸é*UÉ1}²3pÒÅ{pŽû£ïئ¿« ú,hÆòÜCB¨QÖ¢ITÇ7:_æ˜ÐFç:NdÕÚ¡Óùëfc}‚å16Ç ›Jµ—j„ã)$8œ•µ”µ6Ržš‡I§“=H(Bûó3ó²ò²ò³øÅ†|È ÒÒL:B ãmœ üX{ð)´rmn¼uíÊps1ßV`ÍÃZlCÇ4œÞœ²L¬êÒÓ4zMs¥ÝÈÌ<±.>Ý+•—Ξh†è1;ëç§ð_ClÒå<ð´¼â“RÜÐÔŒ,­Hó(„›ÝN£85.!`OìfàüëF”mÆnæèÉyê#fžêRMxžÚJ¡«$ÚòñZ¸²îvÞèÔ ” ƒûÏÒ˜õGl;Æ ˆS–[ž‹Ût[©æˆp<‘5Z Œ‚ÞFzèJÁYŠþÛ{X%6ìPñ'ZñØTkl/s6¬àœÍªÒ H5&èâмq¶+Z¿ˆþ0½ØøÀn-eÎæÊr­ÌÙœ]AŽf[5ƒ+`Îø°«“è íËÊN`¥5fDZyå4ëÉ#èÁü°íôž%¿˜9\m(I ¢"Æ6õl[’<”§.½ì$A^q©Ù\_;XÙ ¨¡šHLDXbÐë½™Ò“ÙHï\u%¸BÁB²e°½jPç«Ü„(‚Þéé^F|‘ÄF&æÅåi«@/†ðù°K½|½ ”磂 ѸyPwIcž¯"Jï£æOûÍý¿¹18`5v*ãRL‰ z }éŠ\á×Ù…i59ùü´j“”ºÚÒ3 y>§4­c}ûZWêDsé)ƪ̉ÃÌ«ùT>¾$[AžÊ°)»Ãã TKèõpÕøzgç1´–6A±Ÿ.+y·t"­pÞûô‡ <þ`ã}\—t,Lå½N{qÐõq/ç=°­'¹?Þ‡ëŸrЮ÷yÈÈFø-#°5Ýôù‡,8öî¦?âA_N(ÈË7÷|æšfV§2R‰9ˆ… Xêå€l~FAVq[ŸQÛ/€dø»{Á|já¾Íä*sMœ ¦VVŠ'²x.I<"½ûèvã©“ÂáãÕçÁ=p[1ìw2hÈ»=_­ö¤oþÌ‚Ó{áÁ^öyz;ïzûñËàu2²÷h¤TS£è.2çæ Ìyäâj*2¥ÇH† ¡Iñÿp5ãcí4Ìêø |Φ½Ç6ã>jðRlõEÄFOÄh&XÕ¸rЯ'èŒô V]/>ùϼ/oý‘A)F±‡°.Ä“1—7P(õòžœÜ†C<)lßö•¿†KO79lÂêŠÖ’Î –IwÐÞaÑqfŒs8žh^eúà*ËYÀ‡qä?þ•óUŒ›ãŒåXÚ¯ôY zAwÞqš‹k± Xù§MQÑò¸#²’µeÛ%û‹ÍWó^œLW“ÜÒV[ÓÒ"­{æÞØ´&—s÷¶ß’›>÷pƒ„ƒ4ÉûþÝÎpƒúdÛ¥yˆµnײwìñ¿,p?CÄÚäØ3<Ü á”û×~º5Ц~.PÎå}x¸. Þ9zôM¾þö~ÍÀ…÷þè}ÞŠ Ãàuáxÿ{7ƒvxKŽz‹Ydfa—ÑÛ`6 ž¦·ñÌ}÷J.f~¢J&U(e©¶7+— ÐüéÿË vi§&VË—ì‹É<èd9k¿1úó½ËðEgQpíRøâ¡É+Þ@³Ð´Ûë qv ¢ÿ]AZƒØ"´(‘‚áÈ3Óôii¸6P›îÂÉç+.U7+õeÍ€úÛñÕèm!&?=dÃ\ÈfÁÙt/.)16¾>©¹µ¡¾¹5±!NˆÓ}†-<}çg,IJé t²É¨¦c¶5¥Ô{Q¤‡Q’• ÇÀ‘ŠÈ¾ðfIúV(…:ÉŹ‡F¤¿Pj4s)|@ÿ(‹ZÕñ7òNykyWs{“½œé]:GR‚Mý€‚9ä#ÃñàÊ·(´{ Ï휼 ƒ³7­T'úŽ÷•WuØ vG„oP3ÞYWÛÑ&³G˜Œ99&1`¡ÒMEÅíM]gº…Pjÿ¸û`p°š <ºªœ¯‘ãÌ¿m$톌ã_¦úÆæ:X'ž°á lÆ–€¸Äð@÷U‘óz n÷›½? !ùtLy…ëú÷$ w¥×õ÷ÀàË'Wš®´tݾÀðXú¯ð'ÜÞºqê꯭_²ažË®Wöu ŸÀZÝ6jéý GÛ%«ìô¬=¨¥Û÷º…V&·ÖUVÖYMåêJ¡ÎšQŠ©¶á–ÑK'í ÔúH}’= ƒN¿ô¦òcâÿ¨ü¤z,ŽžÙž°{ÐvÞ- Ý÷þÖ9!ÜáËáß­|r"±æp›.Õõ#ÆÈ¦Íu»Ê6yà5­[Â>‰G\Ä6/†®&b²³¡‰>ÈËU奘âµQ|£2Sô”¼Be¯®²WeY2,m§±w]3iΪI«V6Fóëc+uU€ª¶ÚjÔeAfaXQLybEz¡ëh“ݯGÿº#8Ìk£ßh78 ½Ë÷à~¬r¯¶Ò«y7Ð=Ø£×ÈÆz!ÁF(ÐZ±6‚ŸÏkƒ3ïd7ºüøzbŸ¿k£ßâÝD×8à¨)I“f0²ã³—SEšr0LÁ/¡'ú üÕ©‡¡ƒ'¾C)8MÑß‘yé9úL‰¯HÓd¤ `ÈWRÜ#e’ø"é¬# P* ‹;fË\I¹sà×Ó‘çiÎÏÕ'‡jÊÓªÜX‰Ý’V;ËŒ…Haá„n¸ÇîÀáK‚cQDÒ²½B)ü×*2V£à á¡÷X½0‡Ý Ky0ç=££ÇéýÒÿMõ̹ÁK'YÌ_ÞÉñ,?òßÃ>†–0¼(3l÷Œ´ ‰)Kþß”Õ*süï$”¥isi`Õ} -ß23ŒÏ«Â#½ˆ9A5¬vôÜÈî SÒ à¬ìê¼p¶RN¥`ð2ø*š!ÈJä=:Žœ‘‰ƒD«Wý Ã`äqÈ~‚7ÍǦí½Ã†?¡¼UÉ-̉ÌÛ$øTѰÙ~×aoŸN¼¿[Ór³Š*#wç$šâ•ñJuð¦Ð‡“CÃ1Qê•{u†kß?ºÚnêÑyï5—¬Y!D;—³ŽžIþG"ÆcúØrÞMeMØL!ìÿ{Ò]Åf¹"¸M¼ßœ·CIéÉk¹ EÍUÍU¶^æËQŒÇUµ×«w9”µ·dŒÇ¹Ô~I•¤*±hWîÄ×>]ô—\àí‡âÛ3¸7ábø)ï"¨Í®K»’Üë!\ãýΖ¹¹.\W¥23'ÌjMJä`ò÷6ôGú.€ëàTêH|«¼FQd§¸oŽÔwŸ™ùñžsKý‚T1‚¸ubò~[¦kÿ‡ÇÛßÔÕãAꈤ$a\œD½SJM“;èCèãà´<ÿxrKñ”)«¦L%ˆÿ ïÔÁ endstream endobj 253 0 obj <> endobj 3124 0 obj <>stream xœWw\SÙ¶>rΑ¦ˆ{αѬˆ ^!ˆ±+ˆH  ’€Æ±`W6–±á!l V,8*^àØÇr¯wfuƱ»NîŽ÷½}G÷çûãü²ûZû[ßúöŠŒ²oAÉd²Ö1ê¬ä\ýø$m”oˆN“*ùˆdbçb»\¬3_5å¢Â‰BNvÈÉ~Oç6¾mÌy®fÇVâÍÖ¶CVËL²²ß½&Ž›ìÝ«WlcŽ:=à ô ’§!T¥W§kÒÈSitÙY*­ÁO¯R † •¦Ö¨„‘cb§FÄ„ ^á1…p•V•“¤bs“5ê!J¢ÒêUÞBš.GÐØ:BŠN›ª6¨uZ½Ÿ¬’}¶*EM6©æ¤¨²¥‰ÞB¶*'K­×“¶ Ö é9IZƒ*U0èµ6E“›*™'ãi:­AÈÎÑ‘ù,2CŽŠÕé ú”u¶A cC•6 IÉ®^M¦]Y™ªKÉ•nóyΤÖêƒjŽA²“¬RÕúlM’‘Ø%Ge稭.äêÕÚô/Ö{ 9ªô¤œTJo=WBåËý„¯n”­1Z÷ꬫ>ÛWô*MšŸ-ª «^ˆ¤ÀþeäKˆþA£(Ê?X¢™:+,G©7äFäÍNš“eLIQI‹M›1N=~ÂLͤ¬þƒ¼¼}ýûôë?€¢ºQc¨îT,ÕƒKõ¤ÆQÔxÊ“š@yQ©I”5™šB…PS©‘”/G…RaTJIõ¥Â©~Ô(ª?A  FS)*ŠŠ¦¨УܩvTKÊr¡ZQ#¨ÖTÊjK "ܤìÉÀJ”Žþ§ED‹Ý-nÚ¹Ú ±;iïmŸj_jÔþÜM^"¿AûÒ‘ôzúgf“Á\c±³ØÚ–^-M-_8hÖ;2Ž>Ž ŽyŽÅNvNCœŠœÛ:Ç8¯r.q®unp~èü?.q.÷¡ÜÅœ†Là®Pb‚Þ&™¸ <¹:ì)?¯3gÉq‹>fÉÁ—> dx¸rxýªå." “èŽZS›Ë @"íÜŽ]«8KéÞeÜî^9v¸éâþÌH~LFþË€cDfBâ²Ç¤(Üßc$óÄöXò‚k›‡à; n=Ú¹½{èè¢sÅG«ŽVí½„. ©çëX7ñÆñ½‡/uD§rê“ͨšR< ±ø >Ø•ƒº¹J;qRšVÉã»ÚC8íöîfuftŒ*3„Çá4ñÛrøä²JâÕzìà¬xœÃX†Ã°ò¦ ¿C¤×<Œ/Ärîî)eWÉa#†O¹þæÍéëwxâ½ڈ롭ì(øØ™ÿ&æqË//¨ÑÔŽ¿Õ¯ˈWɸ-öÄùx¸aO‚P8¿ƒ!yìA/ö‹äG–°áÏ`øÿð8œ9bÌØËÏÞ0gc*KÜÄZ„@KøZÊ.Wó%WãÀXøX@ú•ôÁ1uº&Ä‚ûoàƒïäÞI?ŧŸup4 GñZõtÜ'”=¼ã”ʰø¦W¯êš¯ó6ØE=¸ÊîÈÏçïºC5 vèúî“ šÊÿ@ G`¯ùcls\ƒ² ÛGɼåG¶ub@~n(öÇÇÅrþÿxº÷“§¢ñt“Ù0uÿ(²Ý½vÁÃw ?ÇšÒ¨¾‚šÐ©}XL¢`.`ðfLWûyLJ‡}åjŸ¯"û‘¸ Fhäà5¸â×(:ƒ«e×Ç,ñ0ùåIl;NvÞÆÉvnUŸùXøÅ>¬­}¸uSÁÊRtc–.G+P$Ÿ”ºõ}ÏX '>™º%™2H¦nS7ÈØ‰‰³À‡˜©7@ x-duäè ÒmW‹-¸U@hÆ=Ém» Rb»ôÍšÒ<¾tζÅgæÂÉí+ó‹òQ.›™:{tºv}‘Q1oó²ÍËö‘ÕôZìðïhŒn£óÅ55»N¡zt=ãXèvvº}jÑ¢ h»¿Ât²ñ€>®Páb.5@[D|EèwX¢_¼Ø™Ãǰ+Ñ+’åäÎJOœ0k,ñÅyà{å~wŸƒÛ™£ó´øíÆÍs·¨XèJIÒ¸<Ç¡dUîŽûàÙxI@˜úâZåÃs|I/ù/´ <6¼‡÷Oel©²›=±€{*ýšñ¿èAÇ’~-/[³¡Lñ‚™¿jIÁ"Ħ-Þ\ÇÉ{Œ5×Å¡&+%œªÝÅ*²ù 9=)|LVÅU¼Ä‚ʼnÁŽ×¹yrÏÅE$ãåÈd3É.KqP›³8ìó'ö$Ä+M2xã1b•{ÑXfáqK‘—Ú0ÖR%'øØ‰fwð•õ¤-.A¢‹ RË_jõ¤¡7Y =èǢ닫ÜW›4H,]ìÄíÛ¸œK·¢½,Ô3ÐbÄ9ì=†Gc×Å èD¯?·³¤±g÷Ó‹¿™·„Ÿ³!eþøEíãä È%lQ•e—Ï<1§]Dßï>yéÖ,Úò ½i< ²¸ ”„ÐiÚ²šÃ;LŠu«Ö»ºxC‡/·(ã ¶ËñPz R Bñv< —Éa(ý+ }‚‡J-+Ü-á ùšd Ÿ±€G ¾gN:‘#É÷ZAÀÍÜ[égø´úˆƒhŠÏQOd¡ˆ|Šk>æé¦ Öôæ…5InÉx`’Ý—â1÷S<ÄRJ1Áº7æÖo…$Oö–.ØQì"Ç~4$XäÌJfŠ*5.Iá:£¢³}eQÁ6T‰¯ßµé»âm;w^³[û¯à?(Q¥žp‹ ý€q'BPß®8 +Ÿv‡ÐîÉà¶ð¸#m ÓeODlèŒ+ïNoªÛVÁï//®AçÑžìâPö¯€ìûS™¼Ý‰ädÑg§•IòÄyãÖ8 dGð¡É|Õäkêk¨(«¬g±ƒèl“P«.5ÿñ²îºMB­ôl"©uœ@"npr¦e)‹KÉÝ%ºŠ…V±øÝžB«2q;äq…EhZÎ.9µ :ýÅÀëKѧ7¶Ç8øYWðçÍïËy¬ çÎHÍ™‚RÐÌm³÷/0-ßµê4»ú)·ñaeí%_Å\“nËìoóÖ¤±6A×1¨!V=$:š\O Ž5:,­'"f°¬ªÇUååð‡™oÑ[ôðÀå¦Ëß½GoÐi¯G_lªè†ØBÜ–ƒV÷þCÿ´G>Akö}üXþ½@To"›£štGÝQ`fTx¤RÕÆuu+ëG™oˆªŸÛz¡’}tç—ÀZnxÐÝÃÂÌ¥3Qìô]pùÑ÷“?17‘ÿ\^IÌm$7Dànü”ʤººtìèåý»òs‹EƵóQ‹Yk,Ôh¬K+×ìž¾u:R¢©ºÔXLŒ­ÐÛA°G°'9 5Ö<†ÃŒ ¯î³ -*XÀÌAF”Â׿–f°à¿‡6lY¼U¬€™+6ùÕ<¬¨m@?£ ³ë3eL(&h[:Ù"ÕßžœÁA%+Jæ•ÌÛ˜ƒÔ(c‘nî¼oæÏ^>±V=ãmR¬UŒô0Óæ,{’‰®¤Eb'’#N²cÐÎB;ñ­¸–Cóަ×Ä ÚG؉GzânX~~xéø×³_ΩҡØ1ãÓúöwäÞr©­6â¾A ‰m,ØýDXÅŒ½ˆ;íæ1½Cخَê;|²òîóú”àu Î’c°PÊN|Åš<õˆO³,¯þ|r¤do\‡GœØ”`R˜sÿ/–Ã`O…Ÿ! fÈñúóóe»­$—Ö ´5 ¤ ±«;¬‘*ì^4`9Ž‰Ç¥6jÛå?ΟKë‹ÀcžXaûÚ¹U^üªÄn¼v¨æâ‰}Ù3ØbùK_lü‹¼„©ðxòY1ëôÄ}DêÜúF£”¼„ l#c½tVÿ° în.X…IÑoQʱTá~äØ~·œ ,‡£iˆ†s¶wÒ vÝ;‚©ÁÈÞù橜¥eáåІÞZYQz±?™â?8qJXŒºüüJIÐVãÖÏ@A"Óûí[Bûžý^âvÓ2j’ùà%‡ãô§³·úªy*@)Ç׊Ǹ¥Çï4îN;=zÿßÐ42uFh’rîP„9„]¶?4®6âVê?ÉÙ]{~Ð9àv›:7!‘_s¡o÷o¹RS}C»Œ%ÓYo<ž»zxʰá ¢#ëoß;zöª¤næ©&"¡­ì Q ƒƒã±a_„ýê°HŸ}Iw…d5Ø#ðDàqè÷0ƒý´“”dd« žÆÁuä¦à‹À/˜ôYOú=N>HÊi쉰‡Ó]±u+¤@'œ†ç.àÌÊð]‘’4<Èc‹=lLÄc›eâmìÄY~WŠ¿K 糩æéNþ¨‘7ÒlÖÈ­‘•Áb‰}‹Åùœe>yñ¦ú1¹!3° gkìÉ‹nZöt‚)†¥wõtIõÓÛ;Ðê—CgÑo,tñý {cOÿØgZR˜¯€Ž;髎_¹T=#tXŽ÷Åv 옵·cżO!7ƒ¼ ¼·”hÛ Yp;‰6ìZvbÁþd4™Nœ‘^}s…w¦ q·§ýÔÎÐë÷ŸAñ(ýìïx·]«ÝsìjGppw ×MNQè2Ä£(v!¸3…ÕkJ×—l)¯(­Eì¹ ulhrú`~!íbØ)V™`˜)~' ÐÕ6:9A×MNÎõ¿b¨Û¦ endstream endobj 3112 0 obj <> endobj 3125 0 obj <>stream xœcd`ab`dddsöõõ´±T~H3þaú!ËÜñ3æÇÖnæn–•ß7 }üÎÿ=D€™‘1¯¸É9¿ ²(3=£DA#YSÁÐÒÒ\GÁÈÀÀRÁ17µ(391OÁ7±$#57±ÈÉQÎOÎL-©TаÉ())°Ò×///×KÌ-ÖË/J·ÓÔQ(Ï,ÉPJ-N-*KMQpËÏ+QðKÌMU;ML:çç”–¤)øæ§¤å1000Ú00È2012²ÿèàû¹9bÁcóþdcþéñ£_tJÿ´‰Ý38¦5O«íjën­—ûsê÷’¦ö†Öî:ÉîÚ)mÓÚ~œø½XbfKwo7Çì‰3'Íhéo˜ ÿgí÷é¬|¥ 8O›6í{þB¶ß‰ÓØWq]å–ãb1ŸÏùd"7žvi endstream endobj 488 0 obj <> endobj 3126 0 obj <>stream xœX{TSWº?Î!´•4<NÎQ‹Ôª­µ>¦ÃCã«Òò ’ðFÏ^Ix?¢@mQ±öÇZ+µõ­8:ê½¶õÖéš©sëhÝÇ»½wÝ} ÇN׬5÷?8ç;{û÷û}¿ïÛN„@ xUªHOÈÒlPfD,ˆ‘§dE&¤)¸ç¬€éÀþÎQŠ¤Ï¶¿ÁKE)5ZM¢Z¡Ò2xǨP[ŽÚÔx-·¯F_3Êd™¤LÌâN3õN¯ÈÐ0Zy®–Û'AÎ$)4ª´ø<¼/^J¥VXSÈÒ(2Rì»ÏgÔò”xuRš\c]—CÅ~>†wêx•*-Ïú­Ò5µ¿B«‘§%¿ac–ÁÔ*™†#7-^ÍpgfÉ_xigëÿÇAs3¶*ƒU™kÔ¡mxÖÚìœø„ˆ¼Ä$©<29*%5F±qWÚæôD$±œˆ"^#¢‰b.±‘xØDÈb3@l!¶«‰`b±!Ö ‰PbF,&‰µÄ[Ä:b Al Þ!¤Ät"x+p"Œ_Òašptvlwrqª#ww©4ê¶ólg­óM¡Bø§—¼Ôí2×¥Ùå¿]S\º-r3Nóœ¶úÜ骗¥/Ÿ{…|E6ÃaÆœKØŸ¦³? ¼oQYÜÙš£ž¢+Ðľ-¤rŠK ö*:è*Ý'c'tÒГ2·4µ·”×çÓP§a#):rûvçyŸ# «ÜœÓ^hÊÙ TUë¶ à¥°¯Twëħ ü©AoÔ7‚&ïË[Žý^š˜»>XbM‡Í²XhÃp´Nߨ7Hôµ ”Hk±ÃÇènÀåCŽðcL"®ÏZ#ÐÛŸ€c<ЮãT ÚW]RSJ¼cNÉoÜhß{BòIk³ ´›t†²ŠªšŠIœvUþF Œ–4X¯7è ô—ÐLB•ݸ&…rì¥e˜Ðí¨àðgMÆæaÄf‘}<uãÓö!’“¨ÇÊòéߎé³RËïŒ=õ9, ­x¨9M»C_ÜgTìz?ÚWSPwX79SÙv 6¡6ÜZ¤¡k3Â|âÒû‡Œ ¾¶‘>GÉ ‡Uí©ÙöxGÉ/^º´ô"¯³Ýb{6y4·7H[óF ïÑ8/”žªCüOXƒ3´ðàeq…BJ\’¹Ôïá}òâd ^bž=ÆBÝîÆáÌÅ™I=àR¼b÷o··“úW@#¹…B 2VÂqrä·C»©z¼ðîC-‡QËÔ!èeqÿq>ÆnZȾãñû÷2 ÆÚ}MÞc-+ä r S$ÅåXwÂRƒÎXW§×7HÆ÷YŒ@xaH•P°ðèÂé ±ÀI˜ Z¤_2é߯^øèËq\6MÃâå1šÕ@(MýhøÊ÷§ óðpyéaz2£GÖŒØã8Ÿ­°ý·Œ|aQce'×ZŸwó-ò/T÷}R4zðTêuÜO¼ 7œõ(øÚkA»BÖÑ0ækñ½s‘Ë3"ä¼Bzî.tþ“ŽÎÑ`úÿʃ­Èºaq#Ø_­äób·PC0Öf¸@'=N–¨²u¨(eݰ)Â⽾ȗDî¼¢ÚmWÏzŠåZP«usìq4rÀ‘ŽO[€î-€÷ÈS¼g{uXýÐÂ:ZR±N³Ž 'X7qê‘­Ýp? @^ÈùûýqÍ“ËãæOÇèCæ½flÆR“®BW©+“DíX„K6|y÷„ùô¡!zèô…WÁ 8V¼7¿¥´/TT¥x5àÉÀ€íЄí°û6³zÎM8Yn•äEòáL†Ÿ¹X¹Ë±s· íQ\Ûv( ƒÆƒ‘šíw#èáÍK×¾¡E¹¹o’˜L ô& ùÂGâoÇ¢–Ñ¢Opƒ„ïD} Ÿþ)^íV{à.ÞMðø à;¥ÿóD´Õ“³lšáHµ5…]D0À>QÙD¸ý¹ÞV"pµX-¬xБƒï‹úêzA›ðoï^Eä‡ñŽ$ÈñÎ*(òçoÏ>ÂçcVTƒ \3¶¹Ï`<bWãr;.FËÐ"Ž¢‘÷íÅÐ.‡ a8”AñÊEëľ´9à oF/ ¿ àR,ÿÅPBOzœ‹õýKFóЦZÏ5}12px÷KUOÕñrjqçoin3T4–ÖÒ»×’À›`ÕæÂÕER¯·ìXÝ·Îþ<ð®ÚÁCk&Ü0Æë09C¸§í„b<-ÃW!ùãÓ[ëFÒH÷k.xËÃÌkø¸-ˆG` ý©+_ÄE¿»8Äÿ·ç@#ü^œviG0Ö½'š^AþWBë¿ô­DâÝak7…aå y•èL},G?;r°û€É"ù}ÇúýÃ<¬ß=#{~~Èaå¦Ñ;OþëoO'¶Êkó8ß©:èQ›SÅòæe?w%2¶¶^>°sxn|%ê(4æâ+QEM©íJks!ÞecâS Gm“Þ„M_‰VJwh¥ëmõ“-0õ X/†ÞÔåÔC²´Tø¥}tj+œ}Xv RGÆÎ‚[ÂñugÞ‘ Z»éý#'ïñëÏïâÏa> PçOÅÉÖD0Szûûc»€›DyŠ.VÉ ·yôySÝ Ng¨¬9ä˜ÍÑ4fvšºZ¸!/v†=EÍì)¶M¼ËòawfØyÎ[ÊÖts>Ý—5P|¹øJ±¹Ü\ÐYÔªYÂå‹C^KŠmíÊ–5)?õǽ*Œõå ””Tæi‘“WMeM9žE¡“£k½¤ñRttÇÑÌ«>߀ñýß ô€à`þam§ºKe l•6©M˜§–==À,¼~燋ò;%¦Ò};±OÆOÜ Z@Ss]羿{ÕpQaŸœþÂÄg¯K þœBI%.ÏI° 0ÙhŒƒ 'ùëôÞjÄöè}ŠC¯ßa]¹QÿŸµI›cvcyȰRÑ›Ö2(æ¢áK¶ðBu akpÎ{=ÎPpîÉ+]>7ÀX?ä´s›B'±xª©exZ¼i¿öMš2s`jdâîg¹¶c±h‚~ýƒÂԯ퓿 X[ ‚›KðÔwöä‘ÞÃ>÷dîÂZSN‡£+ä þ¸xšOžý´÷SàÝ¿O½Ë6œ„¡ë8ˆ÷ Ã<\kÔ€Áûdê§Û㓳·m—ŸPõÄx ÈÛÁÝ{`3Æm6‹§Úðó¹öd9?šqRÀž ÿ¹íIMÏ1³o›ñTo6S—£®77‚ø?Œ~ endstream endobj 395 0 obj <> endobj 3127 0 obj <>stream xœYXW»„QYDtgmA{G¢ ‚‚(b—HYp•&MŠ ,K=ô]¦€D Ö -VŒÆ’ÄÄ/÷šrÆ{Ƚ÷Ì"ìøÿÉÿÜç>…9õ+ï÷}ïw0 Œúƒ=¡þ1QáaË&®”Çðc¶œ•7¢7Òpòä¸÷SDœÔ„&†ÀÄhψ±ÇÍÞßòÞn÷hpÏ!yµG ~ï³rÍ„ v‹Â#â#Á[¢eSçÎ+ó—}˜‘9Ë£Áa²Oð±òðˆPyXô$™·\.‹Þ"—)Bä²E˽ֹyºÊÆ»zúÈ\åaòH¿™WŒˆ"@¶L ‹’ÛÈ‚Â#e!=²€ð°@E´"<,j’Ì)Jæ'‹Š(ð&y\€<‚Ÿ°“EÈ#CQQøg™"Jé-”E‡Ëa!1üõx<(<,ZŽçCñ >Ê+<*:* R-Ã7z9»ôȽÅ/š¿7J§eáAxe`x@ ¯Mß\´Ÿ",J-‹æïñ—ËQ!~ñø^|TD¤B'BL”",X»,Rì"ÒË[E¯ŸL µ_DDH¼no¸nUßýŠè(yHФ¯Ê°[ÃeËd¼cCü"?Ô{éÿç7‚ ¼Â†¯[á¼}q¤K”kô’·X÷~Kãü—Åx$zÊ—y¯Ø²Rá½j›OÈêÐ53fΚ=gôÜ1öcçûÔzüÛ í6MœôÙäÍS§îœ–4 Fˉ1„aOŒ%V㈕Ä'„7aM¬"Æ>„ ±š°%ÖˆµÄBÂŽXG,"&ë gb±XLL&\ˆ)„+1•XBL#܈é„;1ƒ˜I,#fÄl“˜CЄ9aA #, Cb8aDX"bAR‚"ú2baL8Ÿ‰ù„)1ˆp$NÄb#aFl"$„/1”X…·Æô3H48Ûob¿c†Ó h£B£ÿE£Ésb+q-%¦¼¨zê}ÿµý¿°eÀGŸ7™lR;päÀÏÞ3ašcú|÷ cƒ¿²eÈfSÍ^IæJ. • Ý4´™^N·˜“æ;, ,œ,NYü¶,„R(Äzi ô°˜üÚµ}šTâå‚ãV,¥zdId¡œ5€ƒy#䲆øÚG O;ùêá·7ŸÝÀ´Þ×.PÏœ®ÛJ‘V¿¨d‘œ†r8Güà²ï ÏÏf1ÈÕÓ0Úˆ¯&ÕḖ˜½[@0åá½ÎYŠ/Nd9Öà>Ë ÀW~Î-¢‘äk4 é%Ðìí? )”Xÿ eü~{6oôøÙöcÇÌyú¶ëùÓ_à\ –º ïî€Å4t†{Dud…V]VšªN`P?½õŽ“Èí@vp‡è¨ÞÈP/ ]ÑRŒ˜®@¿v4Ù#1U°[kÌ®ób[H:¹H®€ÞxzyX¼¶ûnؼ)|1ð¤æˆ‘„Á7®Õ·ž“î«+­%”6M½K•™¦’ú,]»ÝPh€õ;hÂÜCã;¡á߬ö,æ&§•ª¼Xƒ…0KFT©4ÉI*eFˆ–¢ý‚&’펡¹8FÜZv6o9î_¿¬¦ŠGM·™ðÏÚ]gá{ÖšZHžp~ð%½ñÖª†ùØdƒí¦ cdüf2ÄH<—ZoQ¨ÀF,TUrO¯ìü9–«jKF÷ Ú‘’È5‚îz¬Óp¼õ§oÞ<~ø Ó/j~cÍø˜ÇþÁîÀ&þo8b<ó%ã‹•åeØ9Rh!îs/‡áߊ¥(V–•ëf™n'½LmÝ1‚ ’¼çVÃdßn¬ÐmqofÁè²B.v*¢È„Ô´]É%i•Lz9Aÿï•%êÒ2Ü]ávR2¥ ök®=mµÔ¤ÔE«òrŠUªÑ”jÒÕ åÌö½1š0°¬Ÿ4›*jУ(ŠƒI å=tZ&%ëµ¼ý±–«ÿNK˜DV•è Ç iOEÖp$«¨1{Çî8 +ØØÓ’ýœ3GÓ[ùî^ (›…ÜCªBÄ3¨¦]J߯ڗDIö﬌Œ¾Ú-pú,—–Vi±¸,M³Kg¼9b‰[ŸO´bICЉó 7­ èùåGÍqM!{˜m{‚´žÅÓ5éy1å”dliJeÅð“—?|t1Ì·Pš—X¬ÂÇïgîˆ%æÕØ-Éi) =i .cáøØÿCÜcÏüÁUB9]NVkzµ[-КA¶¤÷ö-ik0XÇNG0Ä ýÀSìÑ–Ó•—Áà¾ÁÚÜ„¢´²—¾KL«ÓÕI:u’Ä’Ž#¾«ªÜ¬ÜÀŠh_¿uBœ€3å$FÓ~ç|y«ª©ýƒd8 Íj °ç ¡'† 4÷‚ŒÄ} ð!ÚK:^Ûðó·³ü^/‡7éW]°=#áúaw Ѓê4‰QžæuèƒÍ'ÿ.ñÍ×ï(ÀÅ3NÃÙpª¨X`È~ú}gI4™£áÐ\Ôª[Q®,úØÔÅ$œ¦¢eÈE¤Üg©?Ï•„S¡ œŒlDî‚Ãô+”}qõVç!=X…iD¦’µúJµª­»Ðõ}#o^’’3‹Ï\U<°‚&]pl׉LÉI'à½m3]¾¤yl?ÆÆ~®-#9=ÞáYWד§òq•߇]²ãŸÀœ¤—÷?ºcÁÀ­›ÅrÚ'î! þ8ï™°fGØl.ÙãŒÆ‰äãúÓ{¸; 5\•¨ü¯ ßF¢™èš_ˆ. Vˆõ+*È^Ί‹ÆÿÄæúšÛÊ™ÐþG|ª=10‡O°CÃÐП'C‹[·jš/0ªwWRªD©IUee§¥I×lðˆZˆWÌïø ö{Ôû½¸ç·º€ÉK(R JÁœêMã¤}Ã4Ùì ü”ÆÞý]¤îŽqèi# ù%bkMB]h*ìÿ(é*>ÞݛŜ¸5‰Éï"=hqâ=‚3OÏEÞMгŸK°@ŒÚÐkQ07 SŸk¼Qƒ^†¯EƒLÏæÎq9: Rr ¹þÞŠFGlc[¾Ôù ÏH#;ÀÕæ3w©ioĬA¢ø3·ycI£õ<{kÜ`„éíõŽ…w°ÌÙæ\u“ `mU¢;€D_p¹¢Q±Ð.¶úòæÈð‹îÜ¥àBÚâìY 7Р5«:©1øù¼ °øC­'¡Èü±Ðê49ӬžÏÈÌÎP1ÛÆxD€yw’~£X£ªŸîÑ :ÁC¯Š)T´ŠYƒ ,7C×= (²@sÑ\ˆÿ‡ ‰™µœ ç#š£Q¸-‚ÔOˆDcÑH;$F"DN„b(ƒ²×ø?1Óë@ø öa>´c® {Å5òüéæ[{eeí—žM '‹êÒ’ôâ]ù̶"—b9 ¦.]½ñœ®/ /ÑK‘îê„\>¤º•,Ìïm(ùÄ›Hãþ’?<|ýzÎýQ RýmÞü˜0ÂD#˜ûÇ'7½]]­œÁük‡ðCo‡° ~OûÞ^ÝÀÇ—hÒDD!êµaö´:;Zìê³ÊUŠù´þ>’<Z*›[—,…Û„ñÿÚ&8DÐoà6ÁÑqÒ$GÜ=ìøY'‰˜ÝÉrß°f:§YHâàXQiÁïp(€s(8õƒØ‹½~õ †d¤tª»*#3¨,wi”Úü|¾Ò,½­mõ "k*%)K=¨Íª°:ñ塚R¥&%33'+“ Ù‘ ŠÉ -/JCIâ´¡ÑaV± 1;4:ǽ¤ÿXТÎ-õ¼[þ)»«7õ|•¨*uå¢×¾PMjËÚnÀÔÕò8Ø«ª«ßQ¶]÷Òà+`ƒúÊé óɧní“<ý¢=×öD% b1 u·ŸÖ¢€Æ—<ÚrÊç%šE]ÑÃ2„´‡£Â[–|}¸õ,¸I½˜sßVŠrÿo¥Á8Q|ÿ¶Ïò¥óÖØôEÁ»_Í`i{ ®U~Àg²é‚# —h†àûO g’®lîÚkL{_SÊ·?±ñ§à16æßÀ¬àÊi?Ö·Ê P£–L÷«lŒfbŽìº»ëÞ®=éu‰¸9P¹mËp§Å>“¦8]¸•%Í©HW'ŠOš 2êéazzªƒ¸‡ÙȶGÞÁö»»¢OÖ1¡Õáêùe%‘ê핸‡‰¬L:phø­kçž=¾æ»¼çÑ ·†¼Ã=ŒðÍ[àÏš_ø*ç±Ð›ÿ!Ë·áö ʼnš”Òò"uµ’Ý©ïëÀyÝ1ó"H-f×yòÀ[Õ.¡[Á%˜™„“BTè®H7ãúe!:#HCæúÕ{±±‘²qÆÊ.yÝCAº#oÈ>fÜÕ“ë31™hê!MiEqº\Ÿ–ž¤[þýHN]¼xú4—»?Já?ªñÊ«šð*D~7Š Ñ÷ßCòC5©îk ºh4M YÿîêƒÇærðæó+$”sÕ¢CJg‹¥û°ñ1‰|ºcDY$òäbD_ MÐ wHøn¨í 8çóøG# g\kB/¤ä·‘Jþ °/GKn+0é–4_9z¸¾ÙªéЖ@Ý„Ÿ=úECæÝ͇¶ÊqûóÑd3Ù¾ñÜ ÿ­±ë¥1g·Õn”ÄË„Å+6PzMͯ“PÌ…FÝcE7È/±î»·ÐH ,Ë@±:·ªÆ {®a¹ šÑüiSH 4ã™îÎnD< ):04<(¨!ìSBk8p´%ô@ “ Ûðx˜~ü`KKèÁ@ÞA“¡·öGF5<0âYÌLJ``܆˜ÙÎN]îyUðÁû¦ÞØu;¹"£6¹ng9Ï*–yøÎ’J:œÀ’–Ì“ÙUŽEÒAÜ×{Tˆ÷…µE·fã†A?Åoµ7®€'àdü‘=áÕÛՋʽ´±E;J)ÉÍØ²¤º}ï\>sçÚ•`þѯ(½·`^KìªÒù7ÎÔ¸iðèßê¢X²LXE¹QØÁp½åãÉ™–‰eÉeê¢ê)«D aýßd×QèxJø  øèwGO㿆ðO˜B/YåíêzÉû«[—/ߺçsÉ…‘m‘¯ß$Ü´Q~ìÌÙ£G[4˜›*\xû®`a` /¿ðÌÑc­ Ô¢xº¬ °h¨’4“ÇœLi÷ dšœ™‘R-S5Ju^an^!¯fêï0«1wîÃA·— ïöBcÿz†ß€ƒðomÁ/8sÍsÇ‹RJ•áŒú¢þÀŒmóÕiRKpR+Ñh rò² 88ä-øüqè×;Д—P¸Já%Ýù |Vó‡ïpöwV÷žÓ ‡´? R?-úrÔÚmiáˤiY»Ò•Y”«¬øâ¾ÃêÓ€zÞ¾Ñmåú͈ZϦ· ´"zGhhíŽ&f?ÙT»ç`CtB§`þ5Cè€åOIU¦dæfçe0wÑk¾‹“…ŒqA¦Ù9Ù “Ò%Êââý•Ò{°ß1ØüÞmýÍEÅýÐÅ=O!sî4²<¡ÊËÎÍ–|¥HU+Õ9LA´ô³GFªT|\†®/P”¨¥O¡Ñ3d¤N)ÈRK­F£-Ì*Ê,fìq'hybwaQÐZòϹYªœì )²Ü,‚Œø£ß fßÇVkä9.j‚2,ý3Jõß¶|%„“ßKiUyF§¿TejfnfA¿ùsYqRaf °,)Ñ”àb„…Ð!àßEƒàzòsh]áOJÖUjéûÜáõ}wên×b0fC­rŸ|¹ÿ&ñ× 9oÀqŽôŸFëÞñr±ïÒêÜŒ¤’TM*îÅ“TR„ÕÉTåd`‘S±õJ Ê‹u>’§x–$‡ÒJÔeÀ²¢¬´‚œ&Eß½¡Áª¯Z÷65UŸ'@SÜ^Eæ*W°”š&Kã]C7Å(q~À(ªcšB[ã¿7t€Ñýb“ˤASíþÃùÕyÅ… œ*Uªw®Ú¼ÉKŠœÄ (*28+1'M…ÛÂ$uzEΑ¬ºí ˜Âs^'7]Ú[ùrUa\žt[~ô~ÐDA¼‡MÙ³µ®±N»w»:>Õ‹ ŽF+3pŽHÁVIÕä©ópc ‡u—!F¬¢¿/€îÍ6çÙñCšžî·DÎÒõºøê!Ѭ·˜ Â%à[8ˆ¥óÅWÎ^oÿþ;8¬9Ú©W3ŸÚxz‡o’ÆE%‡‚xJ©Q–h‹ŠÊ ¤W¿<ý Ýötñ Ÿ8™qtšçh¿Z.–Üá¤_럃y>amÅÑ@±-+.[•’¨]š´Ý—N¶¶Ky ´ÔÕɯÈUƒ2€;…ÄÜàü¨}àoöÍ­«v*Óv%gTgKgÕFoMà¯mŒÚ• ü©^ ˜qKØ8^!n|Jçåæåæ‚«õG/‚+Ô÷ n[¯Y—(MLŠ©T*Ñùy¥%ÒƒMçj.êëöõî~á~ñLljbÎ:@%¤öÒ÷;ÏÜ>¿À}Š·wõ‘ŒªPG+S•ÊÔä²äÆæbø™äs˜VŠ~ÖõÕÆ«ŸfLwÔp3k YMM yrk|ÒÄ„5Hÿ †…œ endstream endobj 11 0 obj << /Title(Chapter 1. pgtcl Tcl Binding Library) /Dest(4.0) /Count -42 /Parent 7 0 R /Prev 10 0 R /First 12 0 R /Last 246 0 R >> endobj 5 0 obj << /Limits [ (0:10) (table.2) ] /Names [ (0:10) 380 0 R (0:1000) 1163 0 R (0:1001) 1164 0 R (0:1003) 1165 0 R (0:1004) 1166 0 R (0:1005) 1167 0 R (0:1006) 1168 0 R (0:1008) 1169 0 R (0:1009) 1170 0 R (0:1010) 1171 0 R (0:1011) 1172 0 R (0:1013) 1173 0 R (0:1014) 1174 0 R (0:1015) 1175 0 R (0:1016) 1176 0 R (0:1018) 1177 0 R (0:1019) 1178 0 R (0:1020) 1179 0 R (0:1021) 1180 0 R (0:1023) 1181 0 R (0:1024) 1182 0 R (0:1025) 1183 0 R (0:1026) 1184 0 R (0:1028) 1185 0 R (0:1029) 1186 0 R (0:1030) 1187 0 R (0:1031) 1188 0 R (0:1032) 1189 0 R (0:1033) 1190 0 R (0:1034) 1191 0 R (0:1035) 1192 0 R (0:1037) 1193 0 R (0:1038) 1194 0 R (0:1039) 1195 0 R (0:1040) 1196 0 R (0:1042) 1197 0 R (0:1043) 1198 0 R (0:1044) 1199 0 R (0:1045) 1200 0 R (0:1046) 1201 0 R (0:1048) 1202 0 R (0:1049) 1203 0 R (0:1050) 1204 0 R (0:1051) 1205 0 R (0:1053) 1206 0 R (0:1054) 1207 0 R (0:1055) 1208 0 R (0:1056) 1209 0 R (0:1057) 1210 0 R (0:1058) 1211 0 R (0:1059) 1212 0 R (0:1061) 1213 0 R (0:1062) 1214 0 R (0:1063) 1215 0 R (0:1064) 1216 0 R (0:1066) 1217 0 R (0:1067) 1218 0 R (0:1068) 1219 0 R (0:1069) 1220 0 R (0:1070) 1221 0 R (0:1071) 1222 0 R (0:1073) 1229 0 R (0:1074) 1230 0 R (0:1075) 1231 0 R (0:1076) 1232 0 R (0:1077) 1233 0 R (0:1078) 1234 0 R (0:1080) 1235 0 R (0:1081) 1236 0 R (0:1082) 1237 0 R (0:1083) 1238 0 R (0:1084) 1239 0 R (0:1085) 1240 0 R (0:1086) 1241 0 R (0:1087) 1242 0 R (0:1088) 1243 0 R (0:1090) 1244 0 R (0:1091) 1245 0 R (0:1092) 1246 0 R (0:1093) 1247 0 R (0:1094) 1248 0 R (0:1096) 1249 0 R (0:1097) 1250 0 R (0:1098) 1251 0 R (0:1099) 1252 0 R (0:1100) 1253 0 R (0:1101) 1254 0 R (0:1102) 1255 0 R (0:1104) 1256 0 R (0:1105) 1257 0 R (0:1106) 1258 0 R (0:1107) 1259 0 R (0:1108) 1260 0 R (0:1109) 1261 0 R (0:1110) 1262 0 R (0:1112) 1263 0 R (0:1113) 1264 0 R (0:1114) 1265 0 R (0:1115) 1266 0 R (0:1117) 1267 0 R (0:1118) 1268 0 R (0:1119) 1269 0 R (0:1120) 1270 0 R (0:1121) 1271 0 R (0:1123) 1272 0 R (0:1124) 1273 0 R (0:1125) 1274 0 R (0:1126) 1275 0 R (0:1128) 1276 0 R (0:1129) 1277 0 R (0:1130) 1278 0 R (0:1131) 1279 0 R (0:1133) 1280 0 R (0:1134) 1281 0 R (0:1135) 1282 0 R (0:1136) 1283 0 R (0:1137) 1284 0 R (0:1138) 1285 0 R (0:1140) 1286 0 R (0:1141) 1287 0 R (0:1142) 1288 0 R (0:1143) 1289 0 R (0:1144) 1290 0 R (0:1145) 1291 0 R (0:1146) 1292 0 R (0:1148) 1300 0 R (0:1149) 1301 0 R (0:1150) 1302 0 R (0:1151) 1303 0 R (0:1152) 1304 0 R (0:1154) 1306 0 R (0:1158) 1309 0 R (0:1159) 1310 0 R (0:1160) 1312 0 R (0:1163) 1314 0 R (0:1164) 1316 0 R (0:1165) 1317 0 R (0:1166) 1318 0 R (0:1167) 1319 0 R (0:1168) 1320 0 R (0:1169) 1321 0 R (0:1170) 1322 0 R (0:1171) 1323 0 R (0:1172) 1324 0 R (0:1173) 1325 0 R (0:1174) 1326 0 R (0:1175) 1327 0 R (0:1176) 1328 0 R (0:1177) 1329 0 R (0:1178) 1330 0 R (0:1179) 1331 0 R (0:1180) 1332 0 R (0:1181) 1333 0 R (0:1182) 1334 0 R (0:1183) 1335 0 R (0:1185) 1337 0 R (0:1186) 1338 0 R (0:1187) 1339 0 R (0:1188) 1340 0 R (0:1189) 1341 0 R (0:1190) 1342 0 R (0:1191) 1343 0 R (0:1192) 1344 0 R (0:1193) 1345 0 R (0:1194) 1346 0 R (0:1195) 1347 0 R (0:1196) 1348 0 R (0:1198) 1349 0 R (0:1199) 1350 0 R (0:12) 381 0 R (0:1200) 1351 0 R (0:1201) 1352 0 R (0:1203) 1353 0 R (0:1204) 1354 0 R (0:1205) 1355 0 R (0:1206) 1356 0 R (0:1208) 1357 0 R (0:1209) 1358 0 R (0:1210) 1359 0 R (0:1211) 1360 0 R (0:1212) 1297 0 R (0:1214) 1368 0 R (0:1215) 1369 0 R (0:1216) 1370 0 R (0:1217) 1371 0 R (0:1218) 1372 0 R (0:1219) 1373 0 R (0:1221) 1375 0 R (0:1223) 1376 0 R (0:1224) 1377 0 R (0:1225) 1378 0 R (0:1226) 1379 0 R (0:1228) 1380 0 R (0:1229) 1381 0 R (0:1230) 1382 0 R (0:1231) 1383 0 R (0:1233) 1384 0 R (0:1234) 1385 0 R (0:1235) 1386 0 R (0:1236) 1387 0 R (0:1238) 1388 0 R (0:1239) 1389 0 R (0:1240) 1390 0 R (0:1241) 1391 0 R (0:1243) 1392 0 R (0:1244) 1393 0 R (0:1245) 1394 0 R (0:1246) 1395 0 R (0:1248) 1402 0 R (0:1249) 1403 0 R (0:1250) 1404 0 R (0:1251) 1405 0 R (0:1253) 1365 0 R (0:1255) 1406 0 R (0:1256) 1407 0 R (0:1258) 1408 0 R (0:1259) 1409 0 R (0:1260) 1410 0 R (0:1261) 1411 0 R (0:1263) 1412 0 R (0:1264) 1413 0 R (0:1265) 1414 0 R (0:1266) 1415 0 R (0:1268) 1416 0 R (0:1269) 1417 0 R (0:1270) 1418 0 R (0:1271) 1419 0 R (0:1273) 1420 0 R (0:1274) 1421 0 R (0:1275) 1422 0 R (0:1276) 1423 0 R (0:1277) 1424 0 R (0:1279) 1426 0 R (0:1280) 1427 0 R (0:1282) 1429 0 R (0:1283) 1430 0 R (0:1284) 1431 0 R (0:1285) 1432 0 R (0:1286) 1433 0 R (0:1287) 1434 0 R (0:1288) 1435 0 R (0:1292) 1444 0 R (0:1293) 1445 0 R (0:1294) 1447 0 R (0:1297) 1449 0 R (0:1298) 1451 0 R (0:1299) 1452 0 R (0:1300) 1453 0 R (0:1301) 1454 0 R (0:1302) 1455 0 R (0:1303) 1456 0 R (0:1304) 1457 0 R (0:1305) 1458 0 R (0:1306) 1459 0 R (0:1307) 1460 0 R (0:1309) 1462 0 R (0:1310) 1463 0 R (0:1311) 1464 0 R (0:1312) 1465 0 R (0:1313) 1466 0 R (0:1314) 1467 0 R (0:1315) 1468 0 R (0:1316) 1469 0 R (0:1317) 1470 0 R (0:1318) 1471 0 R (0:1319) 1472 0 R (0:1320) 1473 0 R (0:1321) 1474 0 R (0:1322) 1475 0 R (0:1323) 1476 0 R (0:1324) 1477 0 R (0:1325) 1478 0 R (0:1326) 1479 0 R (0:1327) 1480 0 R (0:1328) 1481 0 R (0:1329) 1482 0 R (0:1330) 1483 0 R (0:1331) 1484 0 R (0:1332) 1485 0 R (0:1333) 1486 0 R (0:1334) 1487 0 R (0:1335) 1488 0 R (0:1336) 1489 0 R (0:1337) 1490 0 R (0:1338) 1491 0 R (0:1340) 1500 0 R (0:1342) 1501 0 R (0:1343) 1502 0 R (0:1344) 1503 0 R (0:1345) 1504 0 R (0:1346) 1505 0 R (0:1347) 1506 0 R (0:1348) 1507 0 R (0:1350) 1508 0 R (0:1351) 1509 0 R (0:1352) 1510 0 R (0:1353) 1511 0 R (0:1354) 1512 0 R (0:1355) 1513 0 R (0:1357) 1514 0 R (0:1358) 1515 0 R (0:1359) 1516 0 R (0:1360) 1517 0 R (0:1362) 1518 0 R (0:1363) 1519 0 R (0:1364) 1520 0 R (0:1365) 1521 0 R (0:1367) 1522 0 R (0:1368) 1523 0 R (0:1369) 1524 0 R (0:1370) 1525 0 R (0:1371) 1526 0 R (0:1372) 1527 0 R (0:1374) 1529 0 R (0:1375) 1530 0 R (0:1377) 1532 0 R (0:1378) 1533 0 R (0:1379) 1534 0 R (0:1380) 1535 0 R (0:1381) 1536 0 R (0:1382) 1537 0 R (0:1383) 1538 0 R (0:1384) 1539 0 R (0:1385) 1540 0 R (0:1386) 1541 0 R (0:1387) 1542 0 R (0:1388) 1543 0 R (0:1389) 1544 0 R (0:1390) 1496 0 R (0:1392) 1552 0 R (0:1393) 1553 0 R (0:1397) 1556 0 R (0:1398) 1557 0 R (0:1399) 1559 0 R (0:14) 382 0 R (0:1402) 1561 0 R (0:1403) 1563 0 R (0:1404) 1564 0 R (0:1405) 1565 0 R (0:1406) 1566 0 R (0:1407) 1567 0 R (0:1408) 1568 0 R (0:1410) 1570 0 R (0:1411) 1571 0 R (0:1412) 1572 0 R (0:1413) 1573 0 R (0:1414) 1574 0 R (0:1415) 1575 0 R (0:1416) 1576 0 R (0:1417) 1577 0 R (0:1418) 1578 0 R (0:1419) 1579 0 R (0:1422) 1580 0 R (0:1423) 1581 0 R (0:1424) 1582 0 R (0:1425) 1583 0 R (0:1426) 1584 0 R (0:1427) 1585 0 R (0:1428) 1586 0 R (0:1429) 1587 0 R (0:1430) 1588 0 R (0:1431) 1589 0 R (0:1433) 1598 0 R (0:1435) 1599 0 R (0:1436) 1600 0 R (0:1437) 1601 0 R (0:1438) 1602 0 R (0:1440) 1549 0 R (0:1442) 1603 0 R (0:1443) 1604 0 R (0:1445) 1605 0 R (0:1446) 1606 0 R (0:1447) 1607 0 R (0:1448) 1608 0 R (0:1449) 1609 0 R (0:1451) 1611 0 R (0:1455) 1614 0 R (0:1456) 1615 0 R (0:1457) 1617 0 R (0:1460) 1619 0 R (0:1461) 1621 0 R (0:1462) 1622 0 R (0:1463) 1623 0 R (0:1464) 1624 0 R (0:1465) 1625 0 R (0:1467) 1627 0 R (0:1468) 1628 0 R (0:1469) 1629 0 R (0:1470) 1630 0 R (0:1471) 1631 0 R (0:1472) 1632 0 R (0:1473) 1633 0 R (0:1474) 1634 0 R (0:1476) 1642 0 R (0:1478) 1643 0 R (0:1479) 1644 0 R (0:1480) 1645 0 R (0:1481) 1646 0 R (0:1483) 1594 0 R (0:1485) 1647 0 R (0:1486) 1648 0 R (0:1487) 1649 0 R (0:1489) 1651 0 R (0:1493) 1654 0 R (0:1494) 1655 0 R (0:1495) 1657 0 R (0:1498) 1659 0 R (0:1499) 1661 0 R (0:15) 383 0 R (0:1500) 1662 0 R (0:1501) 1663 0 R (0:1502) 1664 0 R (0:1503) 1665 0 R (0:1504) 1666 0 R (0:1505) 1667 0 R (0:1506) 1668 0 R (0:1507) 1669 0 R (0:1508) 1670 0 R (0:1510) 1672 0 R (0:1511) 1673 0 R (0:1512) 1674 0 R (0:1513) 1675 0 R (0:1514) 1676 0 R (0:1515) 1677 0 R (0:1516) 1678 0 R (0:1517) 1686 0 R (0:1518) 1687 0 R (0:1519) 1688 0 R (0:1521) 1690 0 R (0:1523) 1691 0 R (0:1524) 1692 0 R (0:1525) 1693 0 R (0:1526) 1694 0 R (0:1528) 1695 0 R (0:1529) 1696 0 R (0:1530) 1697 0 R (0:1531) 1698 0 R (0:1533) 1699 0 R (0:1534) 1700 0 R (0:1535) 1701 0 R (0:1536) 1702 0 R (0:1538) 1703 0 R (0:1539) 1704 0 R (0:1540) 1705 0 R (0:1541) 1706 0 R (0:1543) 1707 0 R (0:1544) 1708 0 R (0:1545) 1709 0 R (0:1546) 1710 0 R (0:1547) 1711 0 R (0:1548) 1712 0 R (0:1549) 1713 0 R (0:1551) 1715 0 R (0:1552) 1716 0 R (0:1553) 1717 0 R (0:1554) 1718 0 R (0:1558) 1721 0 R (0:1559) 1722 0 R (0:1560) 1724 0 R (0:1563) 1726 0 R (0:1564) 1735 0 R (0:1565) 1736 0 R (0:1566) 1737 0 R (0:1567) 1738 0 R (0:1568) 1739 0 R (0:1569) 1740 0 R (0:1571) 1742 0 R (0:1572) 1743 0 R (0:1573) 1744 0 R (0:1574) 1745 0 R (0:1575) 1746 0 R (0:1576) 1747 0 R (0:1578) 1749 0 R (0:1580) 1750 0 R (0:1581) 1751 0 R (0:1582) 1752 0 R (0:1583) 1753 0 R (0:1585) 1754 0 R (0:1586) 1755 0 R (0:1587) 1756 0 R (0:1588) 1757 0 R (0:1590) 1758 0 R (0:1591) 1759 0 R (0:1592) 1760 0 R (0:1593) 1761 0 R (0:1594) 1762 0 R (0:1595) 1763 0 R (0:1597) 1765 0 R (0:1598) 1766 0 R (0:1599) 1767 0 R (0:16) 384 0 R (0:1600) 1768 0 R (0:1604) 1771 0 R (0:1605) 1772 0 R (0:1606) 1774 0 R (0:1609) 1776 0 R (0:1610) 1784 0 R (0:1611) 1785 0 R (0:1612) 1786 0 R (0:1614) 1788 0 R (0:1615) 1789 0 R (0:1616) 1790 0 R (0:1617) 1791 0 R (0:1618) 1792 0 R (0:1619) 1793 0 R (0:1620) 1794 0 R (0:1621) 1795 0 R (0:1623) 1797 0 R (0:1625) 1798 0 R (0:1626) 1799 0 R (0:1627) 1800 0 R (0:1628) 1801 0 R (0:1629) 1802 0 R (0:1631) 1804 0 R (0:1632) 1805 0 R (0:1633) 1806 0 R (0:1634) 1807 0 R (0:1638) 1810 0 R (0:1639) 1811 0 R (0:1640) 1813 0 R (0:1643) 1815 0 R (0:1644) 1817 0 R (0:1645) 1818 0 R (0:1646) 1819 0 R (0:1648) 1827 0 R (0:1649) 1828 0 R (0:1650) 1829 0 R (0:1652) 1831 0 R (0:1654) 1832 0 R (0:1655) 1833 0 R (0:1656) 1834 0 R (0:1657) 1835 0 R (0:1658) 1836 0 R (0:1660) 1838 0 R (0:1661) 1839 0 R (0:1662) 1840 0 R (0:1663) 1841 0 R (0:1667) 1844 0 R (0:1668) 1845 0 R (0:1669) 1847 0 R (0:1672) 1849 0 R (0:1673) 1851 0 R (0:1674) 1852 0 R (0:1675) 1853 0 R (0:1676) 1854 0 R (0:1677) 1855 0 R (0:1679) 1857 0 R (0:1680) 1858 0 R (0:1681) 1859 0 R (0:1683) 1861 0 R (0:1685) 1862 0 R (0:1686) 1863 0 R (0:1687) 1864 0 R (0:1688) 1865 0 R (0:1690) 1872 0 R (0:1691) 1873 0 R (0:1692) 1874 0 R (0:1693) 1875 0 R (0:1694) 1876 0 R (0:1695) 1877 0 R (0:1696) 1878 0 R (0:1697) 1879 0 R (0:1699) 1881 0 R (0:17) 385 0 R (0:1700) 1882 0 R (0:1701) 1883 0 R (0:1702) 1884 0 R (0:1703) 1885 0 R (0:1704) 1886 0 R (0:1708) 1889 0 R (0:1709) 1890 0 R (0:1710) 1892 0 R (0:1711) 1893 0 R (0:1714) 1895 0 R (0:1715) 1897 0 R (0:1716) 1898 0 R (0:1717) 1899 0 R (0:1719) 1901 0 R (0:1720) 1902 0 R (0:1721) 1903 0 R (0:1723) 1905 0 R (0:1725) 1906 0 R (0:1726) 1907 0 R (0:1727) 1908 0 R (0:1728) 1909 0 R (0:1729) 1910 0 R (0:1731) 1912 0 R (0:1735) 1922 0 R (0:1736) 1923 0 R (0:1737) 1925 0 R (0:1740) 1927 0 R (0:1741) 1929 0 R (0:1742) 1930 0 R (0:1743) 1931 0 R (0:1744) 1932 0 R (0:1746) 1934 0 R (0:1747) 1935 0 R (0:1748) 1936 0 R (0:1750) 1938 0 R (0:1752) 1939 0 R (0:1753) 1940 0 R (0:1754) 1941 0 R (0:1755) 1942 0 R (0:1756) 1943 0 R (0:1758) 1945 0 R (0:1762) 1948 0 R (0:1763) 1949 0 R (0:1764) 1951 0 R (0:1767) 1953 0 R (0:1768) 1961 0 R (0:1769) 1962 0 R (0:1770) 1963 0 R (0:1771) 1964 0 R (0:1772) 1965 0 R (0:1773) 1966 0 R (0:1775) 1968 0 R (0:1776) 1969 0 R (0:1777) 1970 0 R (0:1778) 1971 0 R (0:1779) 1972 0 R (0:1780) 1973 0 R (0:1781) 1974 0 R (0:1782) 1975 0 R (0:1783) 1976 0 R (0:1784) 1977 0 R (0:1785) 1978 0 R (0:1786) 1979 0 R (0:1787) 1980 0 R (0:1788) 1981 0 R (0:1790) 1983 0 R (0:1792) 1984 0 R (0:1793) 1985 0 R (0:1794) 1986 0 R (0:1795) 1987 0 R (0:1796) 1988 0 R (0:1798) 1990 0 R (0:1799) 1991 0 R (0:1801) 2000 0 R (0:1805) 2003 0 R (0:1806) 2004 0 R (0:1807) 2006 0 R (0:1810) 2008 0 R (0:1811) 2010 0 R (0:1812) 2011 0 R (0:1813) 2012 0 R (0:1815) 2014 0 R (0:1816) 2015 0 R (0:1817) 2016 0 R (0:1818) 2017 0 R (0:1819) 2018 0 R (0:1820) 2019 0 R (0:1821) 2020 0 R (0:1822) 2021 0 R (0:1823) 2022 0 R (0:1825) 2031 0 R (0:1827) 2032 0 R (0:1828) 2033 0 R (0:1829) 2034 0 R (0:1830) 2035 0 R (0:1831) 2036 0 R (0:1833) 2038 0 R (0:1834) 2039 0 R (0:1836) 2041 0 R (0:1840) 2044 0 R (0:1841) 2045 0 R (0:1842) 2047 0 R (0:1845) 2049 0 R (0:1846) 2051 0 R (0:1847) 2052 0 R (0:1848) 2053 0 R (0:1850) 2055 0 R (0:1851) 2056 0 R (0:1852) 2057 0 R (0:1853) 2058 0 R (0:1854) 2059 0 R (0:1856) 2067 0 R (0:1858) 2068 0 R (0:1859) 2069 0 R (0:1860) 2070 0 R (0:1861) 2071 0 R (0:1862) 2072 0 R (0:1864) 2074 0 R (0:1868) 2077 0 R (0:1869) 2078 0 R (0:1870) 2080 0 R (0:1873) 2082 0 R (0:1874) 2084 0 R (0:1875) 2085 0 R (0:1876) 2086 0 R (0:1878) 2088 0 R (0:1879) 2089 0 R (0:1880) 2090 0 R (0:1882) 2092 0 R (0:1884) 2093 0 R (0:1885) 2094 0 R (0:1886) 2095 0 R (0:1887) 2096 0 R (0:1888) 2097 0 R (0:1890) 2099 0 R (0:1894) 2109 0 R (0:1895) 2110 0 R (0:1896) 2112 0 R (0:1899) 2114 0 R (0:1900) 2116 0 R (0:1901) 2117 0 R (0:1902) 2118 0 R (0:1903) 2119 0 R (0:1905) 2121 0 R (0:1906) 2122 0 R (0:1907) 2123 0 R (0:1909) 2125 0 R (0:1911) 2126 0 R (0:1912) 2127 0 R (0:1913) 2128 0 R (0:1914) 2129 0 R (0:1916) 2130 0 R (0:1917) 2131 0 R (0:1918) 2132 0 R (0:1919) 2133 0 R (0:1920) 2134 0 R (0:1921) 2135 0 R (0:1922) 2136 0 R (0:1923) 2137 0 R (0:1924) 2138 0 R (0:1925) 2139 0 R (0:1927) 2141 0 R (0:1931) 2144 0 R (0:1932) 2145 0 R (0:1933) 2147 0 R (0:1936) 2149 0 R (0:1937) 2158 0 R (0:1938) 2159 0 R (0:1939) 2160 0 R (0:1940) 2161 0 R (0:1941) 2162 0 R (0:1943) 2164 0 R (0:1944) 2165 0 R (0:1945) 2166 0 R (0:1947) 2168 0 R (0:1949) 2169 0 R (0:1950) 2170 0 R (0:1951) 2171 0 R (0:1952) 2172 0 R (0:1954) 2173 0 R (0:1955) 2174 0 R (0:1956) 2175 0 R (0:1957) 2176 0 R (0:1959) 2177 0 R (0:1960) 2178 0 R (0:1961) 2179 0 R (0:1962) 2180 0 R (0:1963) 2181 0 R (0:1964) 2182 0 R (0:1965) 2183 0 R (0:1966) 2184 0 R (0:1968) 2186 0 R (0:1972) 2189 0 R (0:1973) 2190 0 R (0:1974) 2192 0 R (0:1977) 2194 0 R (0:1978) 2196 0 R (0:1979) 2197 0 R (0:1980) 2198 0 R (0:1981) 2199 0 R (0:1983) 2208 0 R (0:1984) 2209 0 R (0:1985) 2210 0 R (0:1987) 2212 0 R (0:1989) 2213 0 R (0:1990) 2214 0 R (0:1991) 2215 0 R (0:1992) 2216 0 R (0:1994) 2217 0 R (0:1995) 2218 0 R (0:1996) 2219 0 R (0:1997) 2220 0 R (0:1998) 2221 0 R (0:1999) 2222 0 R (0:20) 388 0 R (0:2001) 2224 0 R (0:2005) 2227 0 R (0:2006) 2228 0 R (0:2007) 2230 0 R (0:2010) 2232 0 R (0:2011) 2234 0 R (0:2012) 2235 0 R (0:2013) 2236 0 R (0:2014) 2237 0 R (0:2015) 2238 0 R (0:2016) 2239 0 R (0:2018) 2241 0 R (0:2019) 2242 0 R (0:2020) 2243 0 R (0:2021) 2244 0 R (0:2022) 2245 0 R (0:2024) 2247 0 R (0:2026) 2248 0 R (0:2027) 2249 0 R (0:2028) 2250 0 R (0:2029) 2251 0 R (0:2031) 2259 0 R (0:2032) 2260 0 R (0:2033) 2261 0 R (0:2034) 2262 0 R (0:2035) 2263 0 R (0:2037) 2204 0 R (0:2039) 2264 0 R (0:2040) 2265 0 R (0:2042) 2266 0 R (0:2043) 2267 0 R (0:2044) 2268 0 R (0:2045) 2269 0 R (0:2046) 2270 0 R (0:2048) 2272 0 R (0:2052) 2275 0 R (0:2053) 2276 0 R (0:2054) 2278 0 R (0:2057) 2280 0 R (0:2058) 2282 0 R (0:2059) 2283 0 R (0:2060) 2284 0 R (0:2061) 2285 0 R (0:2062) 2286 0 R (0:2063) 2287 0 R (0:2065) 2289 0 R (0:2066) 2290 0 R (0:2067) 2291 0 R (0:2068) 2292 0 R (0:2069) 2293 0 R (0:2071) 2295 0 R (0:2073) 2296 0 R (0:2074) 2297 0 R (0:2075) 2298 0 R (0:2076) 2299 0 R (0:2078) 2300 0 R (0:2079) 2301 0 R (0:2080) 2302 0 R (0:2081) 2303 0 R (0:2082) 2304 0 R (0:2084) 2312 0 R (0:2085) 2313 0 R (0:2086) 2314 0 R (0:2087) 2315 0 R (0:2089) 2256 0 R (0:2091) 2316 0 R (0:2092) 2317 0 R (0:2093) 2318 0 R (0:2095) 2320 0 R (0:2099) 2323 0 R (0:2100) 2324 0 R (0:2101) 2326 0 R (0:2104) 2328 0 R (0:2105) 2330 0 R (0:2106) 2331 0 R (0:2107) 2332 0 R (0:2108) 2333 0 R (0:2109) 2334 0 R (0:2110) 2335 0 R (0:2112) 2337 0 R (0:2113) 2338 0 R (0:2114) 2339 0 R (0:2115) 2340 0 R (0:2116) 2341 0 R (0:2118) 2343 0 R (0:2120) 2344 0 R (0:2121) 2345 0 R (0:2122) 2346 0 R (0:2123) 2347 0 R (0:2125) 2348 0 R (0:2126) 2349 0 R (0:2127) 2350 0 R (0:2128) 2351 0 R (0:2129) 2352 0 R (0:2131) 2359 0 R (0:2132) 2360 0 R (0:2133) 2361 0 R (0:2134) 2362 0 R (0:2136) 2309 0 R (0:2138) 2363 0 R (0:2139) 2364 0 R (0:2140) 2365 0 R (0:2141) 2366 0 R (0:2142) 2367 0 R (0:2143) 2368 0 R (0:2145) 2370 0 R (0:2149) 2373 0 R (0:2150) 2374 0 R (0:2151) 2376 0 R (0:2154) 2378 0 R (0:2155) 2380 0 R (0:2156) 2381 0 R (0:2157) 2382 0 R (0:2158) 2383 0 R (0:2160) 2385 0 R (0:2161) 2386 0 R (0:2162) 2387 0 R (0:2164) 2389 0 R (0:2166) 2390 0 R (0:2167) 2391 0 R (0:2168) 2392 0 R (0:2169) 2393 0 R (0:2171) 2394 0 R (0:2172) 2395 0 R (0:2173) 2396 0 R (0:2174) 2397 0 R (0:2175) 2398 0 R (0:2176) 2399 0 R (0:2178) 2407 0 R (0:2179) 2408 0 R (0:2183) 2411 0 R (0:2184) 2412 0 R (0:2185) 2414 0 R (0:2188) 2416 0 R (0:2189) 2418 0 R (0:2190) 2419 0 R (0:2191) 2420 0 R (0:2192) 2421 0 R (0:2193) 2422 0 R (0:2195) 2424 0 R (0:2196) 2425 0 R (0:2197) 2426 0 R (0:2199) 2428 0 R (0:22) 390 0 R (0:2201) 2429 0 R (0:2202) 2430 0 R (0:2203) 2431 0 R (0:2204) 2432 0 R (0:2206) 2433 0 R (0:2207) 2434 0 R (0:2208) 2435 0 R (0:2209) 2436 0 R (0:2210) 2437 0 R (0:2212) 2438 0 R (0:2213) 2439 0 R (0:2214) 2440 0 R (0:2215) 2441 0 R (0:2216) 2442 0 R (0:2218) 2444 0 R (0:2219) 2445 0 R (0:2223) 2454 0 R (0:2224) 2455 0 R (0:2225) 2457 0 R (0:2228) 2459 0 R (0:2229) 2461 0 R (0:2230) 2462 0 R (0:2231) 2463 0 R (0:2232) 2464 0 R (0:2234) 2466 0 R (0:2235) 2467 0 R (0:2236) 2468 0 R (0:2238) 2470 0 R (0:2240) 2471 0 R (0:2241) 2472 0 R (0:2242) 2473 0 R (0:2243) 2474 0 R (0:2245) 2475 0 R (0:2246) 2476 0 R (0:2247) 2477 0 R (0:2248) 2478 0 R (0:2249) 2479 0 R (0:2251) 2481 0 R (0:2255) 2484 0 R (0:2256) 2485 0 R (0:2257) 2487 0 R (0:2260) 2489 0 R (0:2261) 2498 0 R (0:2262) 2499 0 R (0:2263) 2500 0 R (0:2264) 2501 0 R (0:2266) 2503 0 R (0:2267) 2504 0 R (0:2268) 2505 0 R (0:2270) 2507 0 R (0:2272) 2508 0 R (0:2273) 2509 0 R (0:2274) 2510 0 R (0:2275) 2511 0 R (0:2277) 2512 0 R (0:2278) 2513 0 R (0:2279) 2514 0 R (0:2280) 2515 0 R (0:2281) 2516 0 R (0:2283) 2518 0 R (0:2284) 2519 0 R (0:2286) 2521 0 R (0:2287) 2522 0 R (0:2288) 2523 0 R (0:2289) 2524 0 R (0:2293) 2527 0 R (0:2294) 2528 0 R (0:2295) 2530 0 R (0:2298) 2532 0 R (0:2299) 2534 0 R (0:2300) 2535 0 R (0:2301) 2536 0 R (0:2302) 2537 0 R (0:2303) 2538 0 R (0:2305) 2546 0 R (0:2306) 2547 0 R (0:2307) 2548 0 R (0:2309) 2550 0 R (0:2311) 2551 0 R (0:2312) 2552 0 R (0:2313) 2553 0 R (0:2314) 2554 0 R (0:2316) 2555 0 R (0:2317) 2556 0 R (0:2318) 2557 0 R (0:2319) 2558 0 R (0:2321) 2559 0 R (0:2322) 2560 0 R (0:2323) 2561 0 R (0:2324) 2562 0 R (0:2325) 2563 0 R (0:2327) 2565 0 R (0:2328) 2566 0 R (0:2330) 2568 0 R (0:2331) 2569 0 R (0:2332) 2570 0 R (0:2333) 2571 0 R (0:2337) 2574 0 R (0:2338) 2575 0 R (0:2339) 2577 0 R (0:2342) 2579 0 R (0:2343) 2581 0 R (0:2344) 2582 0 R (0:2345) 2583 0 R (0:2346) 2584 0 R (0:2347) 2585 0 R (0:2349) 2594 0 R (0:2350) 2595 0 R (0:2351) 2596 0 R (0:2352) 2597 0 R (0:2353) 2598 0 R (0:2354) 2599 0 R (0:2356) 2601 0 R (0:2358) 2602 0 R (0:2359) 2603 0 R (0:2360) 2604 0 R (0:2361) 2605 0 R (0:2362) 2606 0 R (0:2364) 2607 0 R (0:2365) 2608 0 R (0:2366) 2609 0 R (0:2367) 2610 0 R (0:2368) 2611 0 R (0:2369) 2612 0 R (0:2370) 2613 0 R (0:2371) 2614 0 R (0:2372) 2615 0 R (0:2374) 2616 0 R (0:2375) 2617 0 R (0:2376) 2618 0 R (0:2377) 2619 0 R (0:2378) 2620 0 R (0:2380) 2622 0 R (0:2381) 2623 0 R (0:2382) 2624 0 R (0:2383) 2625 0 R (0:2384) 2626 0 R (0:2385) 2627 0 R (0:2386) 2628 0 R (0:2387) 2629 0 R (0:2388) 2630 0 R (0:2389) 2631 0 R (0:2390) 2632 0 R (0:2392) 2633 0 R (0:2393) 2634 0 R (0:2394) 2635 0 R (0:2396) 2636 0 R (0:2397) 2637 0 R (0:2398) 2638 0 R (0:2399) 2639 0 R (0:2401) 2646 0 R (0:2402) 2647 0 R (0:2403) 2648 0 R (0:2404) 2590 0 R (0:2406) 2649 0 R (0:2407) 2650 0 R (0:2408) 2651 0 R (0:2409) 2652 0 R (0:2410) 2653 0 R (0:2411) 2654 0 R (0:2412) 2655 0 R (0:2413) 2656 0 R (0:2414) 2657 0 R (0:2415) 2658 0 R (0:2416) 2659 0 R (0:2417) 2660 0 R (0:2418) 2661 0 R (0:2419) 2662 0 R (0:2420) 2663 0 R (0:2421) 2664 0 R (0:2422) 2665 0 R (0:2423) 2666 0 R (0:2424) 2667 0 R (0:2425) 2668 0 R (0:2426) 2669 0 R (0:2427) 2670 0 R (0:2428) 2671 0 R (0:2429) 2672 0 R (0:2430) 2673 0 R (0:2431) 2674 0 R (0:2432) 2675 0 R (0:2433) 2676 0 R (0:2434) 2677 0 R (0:2435) 2678 0 R (0:2436) 2679 0 R (0:2437) 2680 0 R (0:2438) 2681 0 R (0:2440) 2682 0 R (0:2441) 2683 0 R (0:2442) 2684 0 R (0:2443) 2685 0 R (0:2444) 2686 0 R (0:2445) 2687 0 R (0:2447) 2688 0 R (0:2448) 2689 0 R (0:2449) 2690 0 R (0:245) 402 0 R (0:2451) 2691 0 R (0:2452) 2692 0 R (0:2453) 2693 0 R (0:2454) 2694 0 R (0:2456) 2695 0 R (0:2457) 2696 0 R (0:2458) 2697 0 R (0:2459) 2698 0 R (0:246) 403 0 R (0:2461) 2699 0 R (0:2462) 2700 0 R (0:2463) 2701 0 R (0:2464) 2702 0 R (0:2466) 2710 0 R (0:2467) 2711 0 R (0:2468) 2712 0 R (0:2469) 2713 0 R (0:247) 404 0 R (0:2471) 2714 0 R (0:2472) 2715 0 R (0:2473) 2716 0 R (0:2474) 2717 0 R (0:2476) 2718 0 R (0:2477) 2719 0 R (0:2478) 2720 0 R (0:248) 405 0 R (0:2480) 2721 0 R (0:2481) 2722 0 R (0:2482) 2723 0 R (0:2483) 2724 0 R (0:2485) 2725 0 R (0:2486) 2726 0 R (0:2487) 2727 0 R (0:2488) 2728 0 R (0:2490) 2729 0 R (0:2491) 2730 0 R (0:2492) 2731 0 R (0:2493) 2732 0 R (0:2495) 2733 0 R (0:2496) 2734 0 R (0:2497) 2735 0 R (0:2498) 2736 0 R (0:2499) 2737 0 R (0:2501) 2738 0 R (0:2502) 2739 0 R (0:2503) 2740 0 R (0:2504) 2741 0 R (0:2505) 2742 0 R (0:2507) 2743 0 R (0:2508) 2744 0 R (0:2509) 2745 0 R (0:251) 406 0 R (0:2510) 2746 0 R (0:2511) 2747 0 R (0:2513) 2748 0 R (0:2514) 2749 0 R (0:2515) 2750 0 R (0:2517) 2751 0 R (0:2518) 2752 0 R (0:2519) 2753 0 R (0:252) 407 0 R (0:2520) 2754 0 R (0:2521) 2755 0 R (0:2522) 2756 0 R (0:2523) 2757 0 R (0:2524) 2758 0 R (0:2525) 2759 0 R (0:2526) 2760 0 R (0:2527) 2761 0 R (0:2528) 2762 0 R (0:2529) 2763 0 R (0:253) 408 0 R (0:2530) 2764 0 R (0:2531) 2765 0 R (0:2532) 2766 0 R (0:2533) 2767 0 R (0:2534) 2768 0 R (0:2535) 2769 0 R (0:2536) 2707 0 R (0:2538) 2777 0 R (0:2539) 2778 0 R (0:254) 409 0 R (0:2540) 2779 0 R (0:2541) 2780 0 R (0:2543) 2781 0 R (0:2544) 2782 0 R (0:2545) 2783 0 R (0:2546) 2784 0 R (0:2548) 2785 0 R (0:2549) 2786 0 R (0:255) 410 0 R (0:2550) 2787 0 R (0:2551) 2788 0 R (0:2553) 2789 0 R (0:2554) 2790 0 R (0:2555) 2791 0 R (0:2556) 2792 0 R (0:2558) 2793 0 R (0:2559) 2794 0 R (0:256) 411 0 R (0:2560) 2795 0 R (0:2561) 2796 0 R (0:2562) 2797 0 R (0:2563) 2798 0 R (0:2564) 2799 0 R (0:2565) 2800 0 R (0:2566) 2801 0 R (0:2567) 2802 0 R (0:2568) 2803 0 R (0:2569) 2804 0 R (0:257) 412 0 R (0:2570) 2805 0 R (0:2571) 2806 0 R (0:2572) 2807 0 R (0:2573) 2808 0 R (0:2574) 2809 0 R (0:2575) 2810 0 R (0:2576) 2811 0 R (0:2577) 2812 0 R (0:2578) 2813 0 R (0:2579) 2814 0 R (0:258) 413 0 R (0:2580) 2815 0 R (0:2581) 2816 0 R (0:2582) 2817 0 R (0:2583) 2818 0 R (0:2584) 2819 0 R (0:2585) 2820 0 R (0:2586) 2821 0 R (0:2587) 2822 0 R (0:2588) 2823 0 R (0:2589) 2824 0 R (0:259) 414 0 R (0:2590) 2825 0 R (0:2591) 2826 0 R (0:2592) 2827 0 R (0:2593) 2828 0 R (0:2594) 2829 0 R (0:2595) 2830 0 R (0:2596) 2831 0 R (0:2597) 2832 0 R (0:2599) 2840 0 R (0:26) 392 0 R (0:260) 422 0 R (0:2600) 2841 0 R (0:2601) 2842 0 R (0:2602) 2843 0 R (0:2604) 2774 0 R (0:2606) 2844 0 R (0:2607) 2845 0 R (0:2609) 2846 0 R (0:261) 423 0 R (0:2610) 2847 0 R (0:2611) 2848 0 R (0:2612) 2849 0 R (0:2614) 2850 0 R (0:2615) 2851 0 R (0:2616) 2852 0 R (0:2617) 2853 0 R (0:2619) 2854 0 R (0:262) 424 0 R (0:2620) 2855 0 R (0:2621) 2856 0 R (0:2622) 2857 0 R (0:2624) 2858 0 R (0:2625) 2859 0 R (0:2626) 2860 0 R (0:2627) 2861 0 R (0:2629) 2862 0 R (0:263) 425 0 R (0:2630) 2863 0 R (0:2631) 2864 0 R (0:2632) 2865 0 R (0:2634) 2866 0 R (0:2635) 2867 0 R (0:2636) 2868 0 R (0:2638) 2869 0 R (0:2639) 2870 0 R (0:2640) 2871 0 R (0:2641) 2872 0 R (0:2643) 2873 0 R (0:2644) 2874 0 R (0:2645) 2875 0 R (0:2646) 2876 0 R (0:2648) 2877 0 R (0:2649) 2878 0 R (0:2650) 2879 0 R (0:2651) 2880 0 R (0:2653) 2881 0 R (0:2654) 2882 0 R (0:2655) 2883 0 R (0:2656) 2884 0 R (0:2657) 2885 0 R (0:2659) 2886 0 R (0:2660) 2887 0 R (0:2661) 2888 0 R (0:2662) 2889 0 R (0:2663) 2890 0 R (0:2665) 2897 0 R (0:2666) 2898 0 R (0:2667) 2899 0 R (0:2668) 2900 0 R (0:2669) 2901 0 R (0:267) 427 0 R (0:2671) 2837 0 R (0:2672) 2902 0 R (0:2673) 2903 0 R (0:2674) 2904 0 R (0:2675) 2905 0 R (0:2676) 2906 0 R (0:2677) 2907 0 R (0:2678) 2908 0 R (0:2679) 2909 0 R (0:2680) 2910 0 R (0:2681) 2911 0 R (0:2682) 2912 0 R (0:2683) 2913 0 R (0:2684) 2914 0 R (0:2685) 2915 0 R (0:2686) 2916 0 R (0:2687) 2917 0 R (0:2688) 2918 0 R (0:2689) 2919 0 R (0:2690) 2920 0 R (0:2691) 2921 0 R (0:2692) 2922 0 R (0:2693) 2923 0 R (0:2694) 2924 0 R (0:2695) 2925 0 R (0:2696) 2926 0 R (0:2697) 2927 0 R (0:2698) 2928 0 R (0:2699) 2929 0 R (0:2700) 2930 0 R (0:2701) 2931 0 R (0:2702) 2932 0 R (0:2703) 2933 0 R (0:2705) 2934 0 R (0:2706) 2935 0 R (0:2707) 2936 0 R (0:2708) 2937 0 R (0:2710) 2938 0 R (0:2711) 2939 0 R (0:2712) 2940 0 R (0:2713) 2941 0 R (0:2715) 2942 0 R (0:2716) 2943 0 R (0:2717) 2944 0 R (0:2718) 2945 0 R (0:2720) 2946 0 R (0:2721) 2947 0 R (0:2722) 2948 0 R (0:2723) 2949 0 R (0:2725) 2950 0 R (0:2726) 2951 0 R (0:2727) 2952 0 R (0:2728) 2953 0 R (0:2730) 2954 0 R (0:2731) 2955 0 R (0:2732) 2956 0 R (0:2733) 2957 0 R (0:2735) 2964 0 R (0:2736) 2965 0 R (0:2737) 2966 0 R (0:2739) 2967 0 R (0:2740) 2968 0 R (0:2741) 2969 0 R (0:2742) 2970 0 R (0:2744) 2971 0 R (0:2745) 2972 0 R (0:2746) 2973 0 R (0:2747) 2974 0 R (0:2749) 2975 0 R (0:2750) 2976 0 R (0:2751) 2977 0 R (0:2752) 2978 0 R (0:2753) 2979 0 R (0:2755) 2980 0 R (0:2756) 2981 0 R (0:2757) 2982 0 R (0:2758) 2983 0 R (0:2759) 2984 0 R (0:2761) 2985 0 R (0:2762) 2986 0 R (0:2763) 2987 0 R (0:2764) 2988 0 R (0:2765) 2989 0 R (0:2766) 2990 0 R (0:2768) 2992 0 R (0:2769) 2993 0 R (0:2770) 2994 0 R (0:2771) 2995 0 R (0:2772) 2996 0 R (0:2773) 2997 0 R (0:2774) 2998 0 R (0:2775) 2999 0 R (0:2776) 3000 0 R (0:2777) 3001 0 R (0:2778) 3002 0 R (0:2779) 3003 0 R (0:2780) 3004 0 R (0:2781) 3005 0 R (0:2783) 3007 0 R (0:2784) 3008 0 R (0:2786) 3010 0 R (0:2787) 3011 0 R (0:2791) 3020 0 R (0:2792) 3021 0 R (0:2793) 3023 0 R (0:2794) 3024 0 R (0:2797) 3026 0 R (0:2798) 3028 0 R (0:2799) 3029 0 R (0:280) 431 0 R (0:2801) 3031 0 R (0:2802) 3032 0 R (0:2803) 3033 0 R (0:2804) 3034 0 R (0:2806) 3036 0 R (0:2808) 3037 0 R (0:2809) 3038 0 R (0:281) 432 0 R (0:2810) 3039 0 R (0:2811) 3040 0 R (0:2815) 3043 0 R (0:2816) 3044 0 R (0:2817) 3046 0 R (0:2818) 3047 0 R (0:282) 433 0 R (0:2821) 3049 0 R (0:2822) 3051 0 R (0:2823) 3052 0 R (0:2825) 3054 0 R (0:2826) 3055 0 R (0:2827) 3056 0 R (0:2828) 3064 0 R (0:2829) 3065 0 R (0:283) 434 0 R (0:2830) 3066 0 R (0:2832) 3068 0 R (0:2834) 3069 0 R (0:2835) 3070 0 R (0:2836) 3071 0 R (0:2837) 3072 0 R (0:2839) 3073 0 R (0:284) 435 0 R (0:2840) 3074 0 R (0:2841) 3075 0 R (0:2842) 3076 0 R (0:2844) 3077 0 R (0:2845) 3078 0 R (0:2846) 3079 0 R (0:2847) 3080 0 R (0:2848) 3081 0 R (0:285) 436 0 R (0:2850) 3083 0 R (0:2851) 3084 0 R (0:2854) 3087 0 R (0:2855) 3088 0 R (0:2856) 3089 0 R (0:2857) 3090 0 R (0:2858) 3091 0 R (0:286) 437 0 R (0:2861) 3100 0 R (0:2862) 3061 0 R (0:2863) 3101 0 R (0:2864) 3102 0 R (0:2865) 3103 0 R (0:2868) 3106 0 R (0:287) 438 0 R (0:2870) 3108 0 R (0:2874) 3110 0 R (0:288) 439 0 R (0:289) 440 0 R (0:290) 441 0 R (0:291) 442 0 R (0:292) 443 0 R (0:293) 444 0 R (0:294) 445 0 R (0:295) 446 0 R (0:296) 447 0 R (0:297) 448 0 R (0:298) 449 0 R (0:299) 450 0 R (0:300) 451 0 R (0:301) 452 0 R (0:302) 453 0 R (0:303) 454 0 R (0:304) 455 0 R (0:305) 456 0 R (0:306) 457 0 R (0:307) 458 0 R (0:308) 459 0 R (0:309) 460 0 R (0:310) 461 0 R (0:311) 462 0 R (0:312) 469 0 R (0:313) 470 0 R (0:314) 471 0 R (0:315) 472 0 R (0:322) 477 0 R (0:323) 478 0 R (0:324) 480 0 R (0:327) 482 0 R (0:328) 484 0 R (0:329) 485 0 R (0:330) 486 0 R (0:331) 489 0 R (0:332) 490 0 R (0:333) 491 0 R (0:334) 492 0 R (0:335) 493 0 R (0:336) 494 0 R (0:337) 495 0 R (0:338) 496 0 R (0:339) 497 0 R (0:340) 498 0 R (0:341) 499 0 R (0:342) 500 0 R (0:343) 501 0 R (0:344) 502 0 R (0:345) 503 0 R (0:346) 504 0 R (0:347) 505 0 R (0:348) 506 0 R (0:349) 507 0 R (0:350) 508 0 R (0:351) 509 0 R (0:352) 510 0 R (0:354) 512 0 R (0:355) 513 0 R (0:356) 514 0 R (0:357) 515 0 R (0:358) 516 0 R (0:359) 517 0 R (0:360) 518 0 R (0:362) 520 0 R (0:363) 521 0 R (0:365) 523 0 R (0:366) 524 0 R (0:367) 525 0 R (0:368) 526 0 R (0:369) 527 0 R (0:370) 528 0 R (0:371) 529 0 R (0:372) 530 0 R (0:373) 531 0 R (0:374) 532 0 R (0:375) 533 0 R (0:376) 534 0 R (0:377) 535 0 R (0:378) 542 0 R (0:379) 543 0 R (0:380) 544 0 R (0:381) 545 0 R (0:382) 546 0 R (0:384) 547 0 R (0:385) 548 0 R (0:386) 549 0 R (0:387) 550 0 R (0:388) 551 0 R (0:390) 552 0 R (0:391) 553 0 R (0:394) 554 0 R (0:395) 555 0 R (0:396) 556 0 R (0:397) 557 0 R (0:398) 558 0 R (0:399) 559 0 R (0:400) 560 0 R (0:401) 561 0 R (0:402) 562 0 R (0:403) 563 0 R (0:404) 564 0 R (0:405) 565 0 R (0:406) 566 0 R (0:407) 567 0 R (0:408) 568 0 R (0:409) 569 0 R (0:410) 570 0 R (0:411) 571 0 R (0:412) 572 0 R (0:413) 573 0 R (0:414) 574 0 R (0:415) 575 0 R (0:416) 576 0 R (0:417) 577 0 R (0:418) 578 0 R (0:420) 579 0 R (0:421) 580 0 R (0:422) 581 0 R (0:423) 582 0 R (0:424) 583 0 R (0:427) 584 0 R (0:428) 585 0 R (0:429) 586 0 R (0:430) 587 0 R (0:432) 588 0 R (0:433) 589 0 R (0:434) 590 0 R (0:435) 591 0 R (0:436) 592 0 R (0:438) 593 0 R (0:439) 594 0 R (0:440) 595 0 R (0:441) 596 0 R (0:443) 603 0 R (0:444) 604 0 R (0:445) 605 0 R (0:446) 606 0 R (0:448) 607 0 R (0:449) 608 0 R (0:450) 609 0 R (0:451) 610 0 R (0:453) 611 0 R (0:454) 612 0 R (0:455) 613 0 R (0:456) 614 0 R (0:458) 615 0 R (0:459) 616 0 R (0:460) 617 0 R (0:461) 618 0 R (0:462) 619 0 R (0:463) 620 0 R (0:464) 621 0 R (0:465) 622 0 R (0:466) 623 0 R (0:467) 624 0 R (0:468) 625 0 R (0:469) 626 0 R (0:470) 627 0 R (0:471) 628 0 R (0:472) 629 0 R (0:473) 630 0 R (0:474) 631 0 R (0:475) 632 0 R (0:476) 633 0 R (0:477) 634 0 R (0:478) 635 0 R (0:479) 636 0 R (0:480) 637 0 R (0:484) 638 0 R (0:485) 639 0 R (0:486) 640 0 R (0:487) 641 0 R (0:488) 642 0 R (0:489) 643 0 R (0:490) 644 0 R (0:491) 645 0 R (0:492) 646 0 R (0:493) 647 0 R (0:494) 648 0 R (0:495) 649 0 R (0:496) 650 0 R (0:497) 651 0 R (0:498) 652 0 R (0:500) 653 0 R (0:501) 654 0 R (0:502) 655 0 R (0:503) 656 0 R (0:504) 657 0 R (0:505) 658 0 R (0:506) 659 0 R (0:508) 660 0 R (0:509) 661 0 R (0:510) 662 0 R (0:511) 663 0 R (0:512) 664 0 R (0:514) 665 0 R (0:515) 666 0 R (0:516) 667 0 R (0:517) 668 0 R (0:518) 669 0 R (0:519) 670 0 R (0:520) 678 0 R (0:521) 679 0 R (0:522) 680 0 R (0:523) 681 0 R (0:525) 683 0 R (0:526) 684 0 R (0:527) 685 0 R (0:528) 686 0 R (0:530) 687 0 R (0:531) 688 0 R (0:532) 689 0 R (0:533) 690 0 R (0:534) 691 0 R (0:536) 692 0 R (0:537) 693 0 R (0:538) 694 0 R (0:539) 695 0 R (0:540) 696 0 R (0:542) 697 0 R (0:543) 698 0 R (0:544) 699 0 R (0:545) 700 0 R (0:546) 701 0 R (0:547) 702 0 R (0:549) 703 0 R (0:550) 704 0 R (0:551) 705 0 R (0:552) 706 0 R (0:553) 707 0 R (0:555) 708 0 R (0:556) 709 0 R (0:557) 710 0 R (0:558) 711 0 R (0:559) 712 0 R (0:561) 713 0 R (0:562) 714 0 R (0:563) 715 0 R (0:564) 716 0 R (0:565) 717 0 R (0:566) 718 0 R (0:567) 719 0 R (0:568) 720 0 R (0:570) 722 0 R (0:571) 723 0 R (0:572) 724 0 R (0:573) 725 0 R (0:574) 726 0 R (0:575) 727 0 R (0:576) 728 0 R (0:577) 729 0 R (0:579) 737 0 R (0:580) 738 0 R (0:581) 739 0 R (0:582) 740 0 R (0:583) 741 0 R (0:584) 742 0 R (0:586) 675 0 R (0:589) 743 0 R (0:590) 744 0 R (0:591) 745 0 R (0:593) 747 0 R (0:594) 748 0 R (0:598) 751 0 R (0:599) 752 0 R (0:600) 754 0 R (0:603) 756 0 R (0:604) 758 0 R (0:605) 759 0 R (0:607) 761 0 R (0:608) 762 0 R (0:609) 763 0 R (0:611) 765 0 R (0:613) 766 0 R (0:614) 767 0 R (0:615) 768 0 R (0:616) 769 0 R (0:618) 770 0 R (0:619) 771 0 R (0:620) 772 0 R (0:621) 773 0 R (0:623) 781 0 R (0:624) 782 0 R (0:625) 783 0 R (0:626) 784 0 R (0:628) 734 0 R (0:630) 785 0 R (0:631) 786 0 R (0:633) 787 0 R (0:634) 788 0 R (0:635) 789 0 R (0:636) 790 0 R (0:638) 791 0 R (0:639) 792 0 R (0:640) 793 0 R (0:641) 794 0 R (0:643) 795 0 R (0:644) 796 0 R (0:645) 797 0 R (0:646) 798 0 R (0:648) 799 0 R (0:649) 800 0 R (0:650) 801 0 R (0:651) 802 0 R (0:653) 803 0 R (0:654) 804 0 R (0:655) 805 0 R (0:656) 806 0 R (0:658) 807 0 R (0:659) 808 0 R (0:660) 809 0 R (0:661) 810 0 R (0:663) 811 0 R (0:664) 812 0 R (0:665) 813 0 R (0:666) 814 0 R (0:668) 815 0 R (0:669) 816 0 R (0:670) 817 0 R (0:671) 818 0 R (0:673) 819 0 R (0:674) 820 0 R (0:675) 821 0 R (0:676) 822 0 R (0:678) 823 0 R (0:679) 824 0 R (0:680) 825 0 R (0:681) 826 0 R (0:683) 827 0 R (0:684) 828 0 R (0:685) 829 0 R (0:686) 830 0 R (0:688) 831 0 R (0:689) 832 0 R (0:690) 833 0 R (0:691) 834 0 R (0:693) 835 0 R (0:694) 836 0 R (0:695) 837 0 R (0:696) 838 0 R (0:698) 846 0 R (0:699) 847 0 R (0:700) 848 0 R (0:701) 849 0 R (0:703) 778 0 R (0:705) 850 0 R (0:706) 851 0 R (0:707) 852 0 R (0:709) 853 0 R (0:710) 854 0 R (0:711) 855 0 R (0:712) 856 0 R (0:713) 857 0 R (0:715) 858 0 R (0:716) 859 0 R (0:717) 860 0 R (0:718) 861 0 R (0:720) 862 0 R (0:721) 863 0 R (0:722) 864 0 R (0:723) 865 0 R (0:725) 866 0 R (0:726) 867 0 R (0:727) 868 0 R (0:728) 869 0 R (0:729) 870 0 R (0:731) 872 0 R (0:735) 875 0 R (0:736) 876 0 R (0:737) 878 0 R (0:740) 880 0 R (0:741) 889 0 R (0:742) 890 0 R (0:743) 891 0 R (0:745) 893 0 R (0:746) 894 0 R (0:747) 895 0 R (0:748) 896 0 R (0:750) 898 0 R (0:752) 899 0 R (0:753) 900 0 R (0:754) 901 0 R (0:755) 902 0 R (0:756) 903 0 R (0:758) 905 0 R (0:762) 908 0 R (0:763) 909 0 R (0:764) 911 0 R (0:767) 913 0 R (0:768) 915 0 R (0:769) 916 0 R (0:771) 918 0 R (0:772) 919 0 R (0:773) 920 0 R (0:774) 921 0 R (0:776) 929 0 R (0:777) 930 0 R (0:779) 932 0 R (0:780) 933 0 R (0:781) 934 0 R (0:782) 935 0 R (0:786) 938 0 R (0:787) 939 0 R (0:788) 941 0 R (0:791) 943 0 R (0:792) 945 0 R (0:793) 946 0 R (0:794) 947 0 R (0:795) 948 0 R (0:796) 949 0 R (0:797) 950 0 R (0:798) 951 0 R (0:799) 952 0 R (0:8) 379 0 R (0:800) 953 0 R (0:801) 954 0 R (0:803) 956 0 R (0:804) 957 0 R (0:805) 958 0 R (0:806) 959 0 R (0:807) 960 0 R (0:808) 961 0 R (0:809) 962 0 R (0:810) 969 0 R (0:811) 970 0 R (0:812) 971 0 R (0:814) 973 0 R (0:816) 974 0 R (0:817) 975 0 R (0:818) 976 0 R (0:819) 977 0 R (0:821) 978 0 R (0:822) 979 0 R (0:823) 980 0 R (0:824) 981 0 R (0:826) 982 0 R (0:827) 983 0 R (0:828) 984 0 R (0:829) 985 0 R (0:831) 986 0 R (0:832) 987 0 R (0:833) 988 0 R (0:834) 989 0 R (0:836) 990 0 R (0:837) 991 0 R (0:838) 992 0 R (0:839) 993 0 R (0:840) 994 0 R (0:841) 995 0 R (0:842) 996 0 R (0:844) 998 0 R (0:845) 999 0 R (0:846) 1000 0 R (0:847) 1001 0 R (0:849) 1003 0 R (0:850) 1004 0 R (0:854) 1013 0 R (0:855) 1014 0 R (0:856) 1016 0 R (0:859) 1018 0 R (0:860) 1020 0 R (0:861) 1021 0 R (0:862) 1022 0 R (0:863) 1023 0 R (0:864) 1024 0 R (0:865) 1025 0 R (0:867) 1027 0 R (0:868) 1028 0 R (0:869) 1029 0 R (0:870) 1030 0 R (0:871) 1031 0 R (0:872) 1032 0 R (0:873) 1033 0 R (0:874) 1034 0 R (0:875) 1035 0 R (0:876) 1036 0 R (0:878) 1038 0 R (0:880) 1039 0 R (0:881) 1040 0 R (0:882) 1041 0 R (0:883) 1042 0 R (0:885) 1043 0 R (0:886) 1044 0 R (0:887) 1045 0 R (0:888) 1046 0 R (0:890) 1047 0 R (0:891) 1048 0 R (0:892) 1049 0 R (0:893) 1050 0 R (0:894) 1051 0 R (0:895) 1052 0 R (0:897) 1054 0 R (0:898) 1055 0 R (0:899) 1056 0 R (0:901) 1065 0 R (0:902) 1066 0 R (0:906) 1069 0 R (0:907) 1070 0 R (0:908) 1072 0 R (0:911) 1074 0 R (0:912) 1076 0 R (0:913) 1077 0 R (0:914) 1078 0 R (0:915) 1079 0 R (0:917) 1081 0 R (0:918) 1082 0 R (0:919) 1083 0 R (0:920) 1084 0 R (0:921) 1085 0 R (0:922) 1086 0 R (0:923) 1087 0 R (0:925) 1089 0 R (0:927) 1090 0 R (0:928) 1091 0 R (0:929) 1092 0 R (0:930) 1093 0 R (0:932) 1100 0 R (0:933) 1101 0 R (0:934) 1102 0 R (0:935) 1103 0 R (0:936) 1104 0 R (0:938) 1105 0 R (0:939) 1106 0 R (0:940) 1107 0 R (0:941) 1108 0 R (0:943) 1061 0 R (0:945) 1109 0 R (0:946) 1110 0 R (0:947) 1111 0 R (0:948) 1112 0 R (0:949) 1113 0 R (0:950) 1114 0 R (0:951) 1115 0 R (0:953) 1116 0 R (0:954) 1117 0 R (0:955) 1118 0 R (0:956) 1119 0 R (0:957) 1120 0 R (0:958) 1121 0 R (0:959) 1122 0 R (0:960) 1123 0 R (0:961) 1124 0 R (0:962) 1125 0 R (0:963) 1126 0 R (0:964) 1127 0 R (0:966) 1128 0 R (0:967) 1129 0 R (0:968) 1130 0 R (0:969) 1131 0 R (0:970) 1132 0 R (0:971) 1133 0 R (0:973) 1134 0 R (0:974) 1135 0 R (0:975) 1136 0 R (0:976) 1137 0 R (0:978) 1138 0 R (0:979) 1139 0 R (0:980) 1140 0 R (0:981) 1141 0 R (0:983) 1142 0 R (0:984) 1143 0 R (0:985) 1144 0 R (0:986) 1145 0 R (0:987) 1146 0 R (0:989) 1147 0 R (0:990) 1148 0 R (0:991) 1149 0 R (0:992) 1150 0 R (0:993) 1151 0 R (0:994) 1152 0 R (0:996) 1153 0 R (0:997) 1154 0 R (0:998) 1155 0 R (0:999) 1156 0 R (0:IX-PGTCL-C-API-2) 3048 0 R (0:IX-PGTCL-COPY-COMPLETE) 3025 0 R (0:IX-PGTCL-NULLVALUESTRING-2) 1926 0 R (0:IX-PGTCL-PGBLOCKING-2) 1848 0 R (0:IX-PGTCL-PGCANCELREQUEST-2) 1894 0 R (0:IX-PGTCL-PGCONNDEFAULTS-2) 912 0 R (0:IX-PGTCL-PGCONNECT-2) 481 0 R (0:IX-PGTCL-PGCONNINFO-2) 755 0 R (0:IX-PGTCL-PGDISCONNECT-2) 879 0 R (0:IX-PGTCL-PGESCAPE-BYTEA-2) 2048 0 R (0:IX-PGTCL-PGESCAPE-STRING-2) 2007 0 R (0:IX-PGTCL-PGEXEC-2) 942 0 R (0:IX-PGTCL-PGEXECPREPARED-2) 1017 0 R (0:IX-PGTCL-PGEXECUTE-2) 1448 0 R (0:IX-PGTCL-PGGETRESULT-2) 1775 0 R (0:IX-PGTCL-PGISBUSY-2) 1814 0 R (0:IX-PGTCL-PGLISTEN-2) 1560 0 R (0:IX-PGTCL-PGLOCLOSE-2) 2193 0 R (0:IX-PGTCL-PGLOCREAT-2) 2113 0 R (0:IX-PGTCL-PGLOEXPORT-2) 2531 0 R (0:IX-PGTCL-PGLOIMPORT-2) 2488 0 R (0:IX-PGTCL-PGLOLSEEK-2) 2327 0 R (0:IX-PGTCL-PGLOOPEN-2) 2148 0 R (0:IX-PGTCL-PGLOREAD-2) 2231 0 R (0:IX-PGTCL-PGLOTELL-2) 2377 0 R (0:IX-PGTCL-PGLOTRUNCATE-2) 2415 0 R (0:IX-PGTCL-PGLOUNLINK-2) 2458 0 R (0:IX-PGTCL-PGLOWRITE-2) 2279 0 R (0:IX-PGTCL-PGON-CONNECTION-LOSS-2) 1618 0 R (0:IX-PGTCL-PGRESULT-2) 1073 0 R (0:IX-PGTCL-PGSELECT-2) 1313 0 R (0:IX-PGTCL-PGSENDQUERY-2) 1658 0 R (0:IX-PGTCL-PGSENDQUERYPREPARED-2) 1725 0 R (0:IX-PGTCL-PGUNESCAPE-BYTEA-2) 2081 0 R (0:IX-PGTCL-QUOTE-2) 1952 0 R (0:IX-PGTCL-SQLITE2-2) 2578 0 R (0:LIBPGTCL) 375 0 R (0:LIBPGTCL-LOADING) 429 0 R (0:LIBPGTCL-REF) 473 0 R (0:PGTCL) 248 0 R (0:PGTCL-C-API-TABLE) 426 0 R (0:PGTCL-COMMANDHANDLES) 3092 0 R (0:PGTCL-COMMANDS-TABLE) 391 0 R (0:PGTCL-EXAMPLE) 3109 0 R (0:PGTCL-EXAMPLESECT) 3104 0 R (0:PGTCL-NULLVALUESTRING) 1913 0 R (0:PGTCL-OVERVIEW) 386 0 R (0:PGTCL-PGBLOCKING) 1842 0 R (0:PGTCL-PGCANCELREQUEST) 1887 0 R (0:PGTCL-PGCONNDEFAULTS) 906 0 R (0:PGTCL-PGCONNECT) 475 0 R (0:PGTCL-PGCONNINFO) 749 0 R (0:PGTCL-PGCOPYCOMPLETE) 3012 0 R (0:PGTCL-PGDISCONNECT) 873 0 R (0:PGTCL-PGESCAPE-BYTEA) 2042 0 R (0:PGTCL-PGESCAPE-STRING) 2001 0 R (0:PGTCL-PGEXEC) 936 0 R (0:PGTCL-PGEXECPREPARED) 1005 0 R (0:PGTCL-PGEXECUTE) 1442 0 R (0:PGTCL-PGGETCONNECTIONID) 3041 0 R (0:PGTCL-PGGETRESULT) 1769 0 R (0:PGTCL-PGISBUSY) 1808 0 R (0:PGTCL-PGLISTEN) 1554 0 R (0:PGTCL-PGLOCLOSE) 2187 0 R (0:PGTCL-PGLOCREAT) 2100 0 R (0:PGTCL-PGLOEXPORT) 2525 0 R (0:PGTCL-PGLOIMPORT) 2482 0 R (0:PGTCL-PGLOLSEEK) 2321 0 R (0:PGTCL-PGLOOPEN) 2142 0 R (0:PGTCL-PGLOREAD) 2225 0 R (0:PGTCL-PGLOTELL) 2371 0 R (0:PGTCL-PGLOUNLINK) 2446 0 R (0:PGTCL-PGLOWRITE) 2273 0 R (0:PGTCL-PGON-CONNECTION-LOSS) 1612 0 R (0:PGTCL-PGRESULT) 1067 0 R (0:PGTCL-PGSELECT) 1307 0 R (0:PGTCL-PGSENDQUERY) 1652 0 R (0:PGTCL-PGSENDQUERYPREPARED) 1719 0 R (0:PGTCL-PGSQLITE) 2572 0 R (0:PGTCL-PGTRUNCATE) 2409 0 R (0:PGTCL-PGUNESCAPE-BYTEA) 2075 0 R (0:PGTCL-QUOTE) 1946 0 R (0:PGTCL-TCLNAMESPACE) 3085 0 R (1.0) 254 0 R (2.0) 269 0 R (3.0) 366 0 R (4.0) 378 0 R (4.1.1) 387 0 R (4.10.1) 1068 0 R (4.10.33.2) 1071 0 R (4.10.34.2) 1075 0 R (4.10.35.2) 1080 0 R (4.10.36.2) 1088 0 R (4.10.37.2) 1305 0 R (4.11.1) 1308 0 R (4.11.38.2) 1311 0 R (4.11.39.2) 1315 0 R (4.11.40.2) 1336 0 R (4.11.41.2) 1374 0 R (4.11.42.2) 1425 0 R (4.11.43.2) 1428 0 R (4.12.1) 1443 0 R (4.12.44.2) 1446 0 R (4.12.45.2) 1450 0 R (4.12.46.2) 1461 0 R (4.12.47.2) 1499 0 R (4.12.48.2) 1528 0 R (4.12.49.2) 1531 0 R (4.13.1) 1555 0 R (4.13.50.2) 1558 0 R (4.13.51.2) 1562 0 R (4.13.52.2) 1569 0 R (4.13.53.2) 1597 0 R (4.13.54.2) 1610 0 R (4.14.1) 1613 0 R (4.14.55.2) 1616 0 R (4.14.56.2) 1620 0 R (4.14.57.2) 1626 0 R (4.14.58.2) 1641 0 R (4.14.59.2) 1650 0 R (4.15.1) 1653 0 R (4.15.60.2) 1656 0 R (4.15.61.2) 1660 0 R (4.15.62.2) 1671 0 R (4.15.63.2) 1689 0 R (4.15.64.2) 1714 0 R (4.16.1) 1720 0 R (4.16.65.2) 1723 0 R (4.16.66.2) 1734 0 R (4.16.67.2) 1741 0 R (4.16.68.2) 1748 0 R (4.16.69.2) 1764 0 R (4.17.1) 1770 0 R (4.17.70.2) 1773 0 R (4.17.71.2) 1783 0 R (4.17.72.2) 1787 0 R (4.17.73.2) 1796 0 R (4.17.74.2) 1803 0 R (4.18.1) 1809 0 R (4.18.75.2) 1812 0 R (4.18.76.2) 1816 0 R (4.18.77.2) 1826 0 R (4.18.78.2) 1830 0 R (4.18.79.2) 1837 0 R (4.19.1) 1843 0 R (4.19.80.2) 1846 0 R (4.19.81.2) 1850 0 R (4.19.82.2) 1856 0 R (4.19.83.2) 1860 0 R (4.19.84.2) 1880 0 R (4.2.1) 430 0 R (4.20.1) 1888 0 R (4.20.85.2) 1891 0 R (4.20.86.2) 1896 0 R (4.20.87.2) 1900 0 R (4.20.88.2) 1904 0 R (4.20.89.2) 1911 0 R (4.21.1) 1921 0 R (4.21.90.2) 1924 0 R (4.21.91.2) 1928 0 R (4.21.92.2) 1933 0 R (4.21.93.2) 1937 0 R (4.21.94.2) 1944 0 R (4.22.1) 1947 0 R (4.22.100.2) 1999 0 R (4.22.95.2) 1950 0 R (4.22.96.2) 1960 0 R (4.22.97.2) 1967 0 R (4.22.98.2) 1982 0 R (4.22.99.2) 1989 0 R (4.23.1) 2002 0 R (4.23.101.2) 2005 0 R (4.23.102.2) 2009 0 R (4.23.103.2) 2013 0 R (4.23.104.2) 2030 0 R (4.23.105.2) 2037 0 R (4.23.106.2) 2040 0 R (4.24.1) 2043 0 R (4.24.107.2) 2046 0 R (4.24.108.2) 2050 0 R (4.24.109.2) 2054 0 R (4.24.110.2) 2066 0 R (4.24.111.2) 2073 0 R (4.25.1) 2076 0 R (4.25.112.2) 2079 0 R (4.25.113.2) 2083 0 R (4.25.114.2) 2087 0 R (4.25.115.2) 2091 0 R (4.25.116.2) 2098 0 R (4.26.1) 2108 0 R (4.26.117.2) 2111 0 R (4.26.118.2) 2115 0 R (4.26.119.2) 2120 0 R (4.26.120.2) 2124 0 R (4.26.121.2) 2140 0 R (4.27.1) 2143 0 R (4.27.122.2) 2146 0 R (4.27.123.2) 2157 0 R (4.27.124.2) 2163 0 R (4.27.125.2) 2167 0 R (4.27.126.2) 2185 0 R (4.28.1) 2188 0 R (4.28.127.2) 2191 0 R (4.28.128.2) 2195 0 R (4.28.129.2) 2207 0 R (4.28.130.2) 2211 0 R (4.28.131.2) 2223 0 R (4.29.1) 2226 0 R (4.29.132.2) 2229 0 R (4.29.133.2) 2233 0 R (4.29.134.2) 2240 0 R (4.29.135.2) 2246 0 R (4.29.136.2) 2271 0 R (4.3.1) 474 0 R (4.30.1) 2274 0 R (4.30.137.2) 2277 0 R (4.30.138.2) 2281 0 R (4.30.139.2) 2288 0 R (4.30.140.2) 2294 0 R (4.30.141.2) 2319 0 R (4.31.1) 2322 0 R (4.31.142.2) 2325 0 R (4.31.143.2) 2329 0 R (4.31.144.2) 2336 0 R (4.31.145.2) 2342 0 R (4.31.146.2) 2369 0 R (4.32.1) 2372 0 R (4.32.147.2) 2375 0 R (4.32.148.2) 2379 0 R (4.32.149.2) 2384 0 R (4.32.150.2) 2388 0 R (4.32.151.2) 2406 0 R (4.33.1) 2410 0 R (4.33.152.2) 2413 0 R (4.33.153.2) 2417 0 R (4.33.154.2) 2423 0 R (4.33.155.2) 2427 0 R (4.33.156.2) 2443 0 R (4.34.1) 2453 0 R (4.34.157.2) 2456 0 R (4.34.158.2) 2460 0 R (4.34.159.2) 2465 0 R (4.34.160.2) 2469 0 R (4.34.161.2) 2480 0 R (4.35.1) 2483 0 R (4.35.162.2) 2486 0 R (4.35.163.2) 2497 0 R (4.35.164.2) 2502 0 R (4.35.165.2) 2506 0 R (4.35.166.2) 2517 0 R (4.35.167.2) 2520 0 R (4.36.1) 2526 0 R (4.36.168.2) 2529 0 R (4.36.169.2) 2533 0 R (4.36.170.2) 2545 0 R (4.36.171.2) 2549 0 R (4.36.172.2) 2564 0 R (4.36.173.2) 2567 0 R (4.37.1) 2573 0 R (4.37.174.2) 2576 0 R (4.37.175.2) 2580 0 R (4.37.176.2) 2593 0 R (4.37.177.2) 2600 0 R (4.37.178.2) 2621 0 R (4.37.179.2) 2991 0 R (4.37.180.2) 3006 0 R (4.37.181.2) 3009 0 R (4.38.1) 3019 0 R (4.38.182.2) 3022 0 R (4.38.183.2) 3027 0 R (4.38.184.2) 3030 0 R (4.38.185.2) 3035 0 R (4.39.1) 3042 0 R (4.39.186.2) 3045 0 R (4.39.187.2) 3050 0 R (4.39.188.2) 3053 0 R (4.39.189.2) 3067 0 R (4.39.190.2) 3082 0 R (4.4.1) 476 0 R (4.4.1.2) 479 0 R (4.4.2.2) 483 0 R (4.4.3.2) 511 0 R (4.4.4.1.3) 522 0 R (4.4.4.2) 519 0 R (4.4.4.2.3) 682 0 R (4.4.4.3.3) 721 0 R (4.4.5.2) 746 0 R (4.40.1) 3086 0 R (4.41.1) 3099 0 R (4.42.1) 3105 0 R (4.5.1) 750 0 R (4.5.10.2) 871 0 R (4.5.6.2) 753 0 R (4.5.7.2) 757 0 R (4.5.8.2) 760 0 R (4.5.9.2) 764 0 R (4.6.1) 874 0 R (4.6.11.2) 877 0 R (4.6.12.2) 888 0 R (4.6.13.2) 892 0 R (4.6.14.2) 897 0 R (4.6.15.2) 904 0 R (4.7.1) 907 0 R (4.7.16.2) 910 0 R (4.7.17.2) 914 0 R (4.7.18.2) 917 0 R (4.7.19.2) 928 0 R (4.7.20.2) 931 0 R (4.8.1) 937 0 R (4.8.21.2) 940 0 R (4.8.22.2) 944 0 R (4.8.23.2) 955 0 R (4.8.24.2) 972 0 R (4.8.25.2) 997 0 R (4.8.26.2) 1002 0 R (4.9.1) 1012 0 R (4.9.27.2) 1015 0 R (4.9.28.2) 1019 0 R (4.9.29.2) 1026 0 R (4.9.30.2) 1037 0 R (4.9.31.2) 1053 0 R (4.9.32.2) 1064 0 R (Doc-Start) 247 0 R (page.1) 374 0 R (page.10) 842 0 R (page.11) 884 0 R (page.12) 925 0 R (page.13) 966 0 R (page.14) 1009 0 R (page.15) 1060 0 R (page.16) 1097 0 R (page.17) 1160 0 R (page.18) 1226 0 R (page.19) 1296 0 R (page.2) 399 0 R (page.20) 1364 0 R (page.21) 1399 0 R (page.22) 1439 0 R (page.23) 1495 0 R (page.24) 1548 0 R (page.25) 1593 0 R (page.26) 1638 0 R (page.27) 1682 0 R (page.28) 1730 0 R (page.29) 1780 0 R (page.3) 418 0 R (page.30) 1823 0 R (page.31) 1869 0 R (page.32) 1917 0 R (page.33) 1957 0 R (page.34) 1995 0 R (page.35) 2026 0 R (page.36) 2063 0 R (page.37) 2104 0 R (page.38) 2153 0 R (page.39) 2203 0 R (page.4) 466 0 R (page.40) 2255 0 R (page.41) 2308 0 R (page.42) 2356 0 R (page.43) 2403 0 R (page.44) 2450 0 R (page.45) 2493 0 R (page.46) 2542 0 R (page.47) 2589 0 R (page.48) 2643 0 R (page.49) 2706 0 R (page.5) 539 0 R (page.50) 2773 0 R (page.51) 2836 0 R (page.52) 2894 0 R (page.53) 2961 0 R (page.54) 3016 0 R (page.55) 3060 0 R (page.56) 3096 0 R (page.57) 3116 0 R (page.6) 600 0 R (page.7) 674 0 R (page.8) 733 0 R (page.9) 777 0 R (page.iii) 266 0 R (page.iv) 363 0 R (table.1) 393 0 R (table.2) 428 0 R] >> endobj 3131 0 obj <>stream dvips + GPL Ghostscript 9.27 2020-09-17T17:22:40Z 2020-09-17T17:22:40Z LaTeX with hyperref endstream endobj 2 0 obj <>endobj xref 0 3132 0000000000 65535 f 0000167816 00000 n 0000463988 00000 n 0000167176 00000 n 0000156081 00000 n 0000417486 00000 n 0000169026 00000 n 0000167760 00000 n 0000169088 00000 n 0000169193 00000 n 0000169290 00000 n 0000417342 00000 n 0000169385 00000 n 0000169470 00000 n 0000169593 00000 n 0000170492 00000 n 0000169706 00000 n 0000169784 00000 n 0000169879 00000 n 0000170273 00000 n 0000169977 00000 n 0000170062 00000 n 0000170160 00000 n 0000170406 00000 n 0000171077 00000 n 0000170623 00000 n 0000170701 00000 n 0000170796 00000 n 0000170894 00000 n 0000170990 00000 n 0000171665 00000 n 0000171207 00000 n 0000171286 00000 n 0000171382 00000 n 0000171481 00000 n 0000171578 00000 n 0000172257 00000 n 0000171799 00000 n 0000171878 00000 n 0000171974 00000 n 0000172073 00000 n 0000172170 00000 n 0000172946 00000 n 0000172393 00000 n 0000172472 00000 n 0000172568 00000 n 0000172667 00000 n 0000172764 00000 n 0000172864 00000 n 0000173627 00000 n 0000173074 00000 n 0000173153 00000 n 0000173249 00000 n 0000173348 00000 n 0000173445 00000 n 0000173545 00000 n 0000174226 00000 n 0000173763 00000 n 0000173843 00000 n 0000173940 00000 n 0000174040 00000 n 0000174138 00000 n 0000174917 00000 n 0000174357 00000 n 0000174437 00000 n 0000174534 00000 n 0000174634 00000 n 0000174732 00000 n 0000174833 00000 n 0000175608 00000 n 0000175048 00000 n 0000175128 00000 n 0000175225 00000 n 0000175325 00000 n 0000175423 00000 n 0000175524 00000 n 0000176203 00000 n 0000175740 00000 n 0000175820 00000 n 0000175917 00000 n 0000176017 00000 n 0000176115 00000 n 0000176797 00000 n 0000176334 00000 n 0000176414 00000 n 0000176511 00000 n 0000176611 00000 n 0000176709 00000 n 0000177401 00000 n 0000176938 00000 n 0000177018 00000 n 0000177115 00000 n 0000177215 00000 n 0000177313 00000 n 0000177998 00000 n 0000177535 00000 n 0000177615 00000 n 0000177712 00000 n 0000177812 00000 n 0000177910 00000 n 0000178622 00000 n 0000178141 00000 n 0000178224 00000 n 0000178325 00000 n 0000178429 00000 n 0000178531 00000 n 0000179241 00000 n 0000178760 00000 n 0000178843 00000 n 0000178944 00000 n 0000179048 00000 n 0000179150 00000 n 0000179858 00000 n 0000179377 00000 n 0000179460 00000 n 0000179561 00000 n 0000179665 00000 n 0000179767 00000 n 0000180477 00000 n 0000179996 00000 n 0000180079 00000 n 0000180180 00000 n 0000180284 00000 n 0000180386 00000 n 0000181101 00000 n 0000180620 00000 n 0000180703 00000 n 0000180804 00000 n 0000180908 00000 n 0000181010 00000 n 0000181829 00000 n 0000181246 00000 n 0000181329 00000 n 0000181430 00000 n 0000181534 00000 n 0000181636 00000 n 0000181741 00000 n 0000182552 00000 n 0000181964 00000 n 0000182048 00000 n 0000182150 00000 n 0000182255 00000 n 0000182358 00000 n 0000182464 00000 n 0000183180 00000 n 0000182694 00000 n 0000182778 00000 n 0000182880 00000 n 0000182985 00000 n 0000183088 00000 n 0000183807 00000 n 0000183321 00000 n 0000183405 00000 n 0000183507 00000 n 0000183612 00000 n 0000183715 00000 n 0000184436 00000 n 0000183950 00000 n 0000184034 00000 n 0000184136 00000 n 0000184241 00000 n 0000184344 00000 n 0000185059 00000 n 0000184573 00000 n 0000184657 00000 n 0000184759 00000 n 0000184864 00000 n 0000184967 00000 n 0000185681 00000 n 0000185195 00000 n 0000185279 00000 n 0000185381 00000 n 0000185486 00000 n 0000185589 00000 n 0000186304 00000 n 0000185818 00000 n 0000185902 00000 n 0000186004 00000 n 0000186109 00000 n 0000186212 00000 n 0000186926 00000 n 0000186440 00000 n 0000186524 00000 n 0000186626 00000 n 0000186731 00000 n 0000186834 00000 n 0000187549 00000 n 0000187063 00000 n 0000187147 00000 n 0000187249 00000 n 0000187354 00000 n 0000187457 00000 n 0000188172 00000 n 0000187686 00000 n 0000187770 00000 n 0000187872 00000 n 0000187977 00000 n 0000188080 00000 n 0000188794 00000 n 0000188308 00000 n 0000188392 00000 n 0000188494 00000 n 0000188599 00000 n 0000188702 00000 n 0000189420 00000 n 0000188934 00000 n 0000189018 00000 n 0000189120 00000 n 0000189225 00000 n 0000189328 00000 n 0000190143 00000 n 0000189558 00000 n 0000189642 00000 n 0000189744 00000 n 0000189849 00000 n 0000189952 00000 n 0000190058 00000 n 0000190866 00000 n 0000190281 00000 n 0000190365 00000 n 0000190467 00000 n 0000190572 00000 n 0000190675 00000 n 0000190781 00000 n 0000191793 00000 n 0000191004 00000 n 0000191088 00000 n 0000191190 00000 n 0000191295 00000 n 0000191398 00000 n 0000191500 00000 n 0000191599 00000 n 0000191705 00000 n 0000192309 00000 n 0000191929 00000 n 0000192013 00000 n 0000192115 00000 n 0000192220 00000 n 0000192933 00000 n 0000192451 00000 n 0000192535 00000 n 0000192637 00000 n 0000192742 00000 n 0000192846 00000 n 0000193078 00000 n 0000193193 00000 n 0000193324 00000 n 0000193419 00000 n 0000193482 00000 n 0000000015 00000 n 0000000595 00000 n 0000193545 00000 n 0000378865 00000 n 0000401000 00000 n 0000193588 00000 n 0000193651 00000 n 0000193686 00000 n 0000156245 00000 n 0000193721 00000 n 0000000616 00000 n 0000001186 00000 n 0000378115 00000 n 0000391677 00000 n 0000193787 00000 n 0000193822 00000 n 0000156411 00000 n 0000193870 00000 n 0000001207 00000 n 0000004551 00000 n 0000193936 00000 n 0000194001 00000 n 0000377512 00000 n 0000385472 00000 n 0000194136 00000 n 0000194271 00000 n 0000194412 00000 n 0000194553 00000 n 0000194696 00000 n 0000194839 00000 n 0000194978 00000 n 0000195117 00000 n 0000195259 00000 n 0000195401 00000 n 0000195543 00000 n 0000195686 00000 n 0000195831 00000 n 0000195976 00000 n 0000196123 00000 n 0000196270 00000 n 0000196409 00000 n 0000196548 00000 n 0000196695 00000 n 0000196842 00000 n 0000196983 00000 n 0000197124 00000 n 0000197264 00000 n 0000197405 00000 n 0000197547 00000 n 0000197689 00000 n 0000197830 00000 n 0000197971 00000 n 0000198124 00000 n 0000198277 00000 n 0000198420 00000 n 0000198564 00000 n 0000198716 00000 n 0000198868 00000 n 0000199012 00000 n 0000199156 00000 n 0000199297 00000 n 0000199438 00000 n 0000199581 00000 n 0000199724 00000 n 0000199869 00000 n 0000200017 00000 n 0000200165 00000 n 0000200313 00000 n 0000200451 00000 n 0000200589 00000 n 0000200734 00000 n 0000200882 00000 n 0000201029 00000 n 0000201176 00000 n 0000201322 00000 n 0000201471 00000 n 0000201612 00000 n 0000201754 00000 n 0000201895 00000 n 0000202036 00000 n 0000202178 00000 n 0000202320 00000 n 0000202461 00000 n 0000202602 00000 n 0000202744 00000 n 0000202886 00000 n 0000203028 00000 n 0000203170 00000 n 0000203311 00000 n 0000203452 00000 n 0000203595 00000 n 0000203738 00000 n 0000203881 00000 n 0000204024 00000 n 0000204167 00000 n 0000204310 00000 n 0000204453 00000 n 0000204596 00000 n 0000204737 00000 n 0000204878 00000 n 0000205025 00000 n 0000205172 00000 n 0000205322 00000 n 0000205472 00000 n 0000205617 00000 n 0000205762 00000 n 0000205909 00000 n 0000206056 00000 n 0000206199 00000 n 0000377114 00000 n 0000380466 00000 n 0000206343 00000 n 0000206378 00000 n 0000157273 00000 n 0000206452 00000 n 0000004573 00000 n 0000005136 00000 n 0000206518 00000 n 0000206583 00000 n 0000206729 00000 n 0000206876 00000 n 0000207019 00000 n 0000207163 00000 n 0000207198 00000 n 0000157479 00000 n 0000207259 00000 n 0000207325 00000 n 0000005157 00000 n 0000008714 00000 n 0000207390 00000 n 0000207455 00000 n 0000207517 00000 n 0000207579 00000 n 0000207641 00000 n 0000207706 00000 n 0000207771 00000 n 0000207836 00000 n 0000207901 00000 n 0000207966 00000 n 0000208031 00000 n 0000208096 00000 n 0000208243 00000 n 0000208308 00000 n 0000208373 00000 n 0000208438 00000 n 0000379853 00000 n 0000410042 00000 n 0000208503 00000 n 0000208538 00000 n 0000157669 00000 n 0000208625 00000 n 0000008736 00000 n 0000013147 00000 n 0000208691 00000 n 0000208756 00000 n 0000208820 00000 n 0000208884 00000 n 0000208948 00000 n 0000209013 00000 n 0000209078 00000 n 0000209143 00000 n 0000209208 00000 n 0000209273 00000 n 0000209338 00000 n 0000209403 00000 n 0000209468 00000 n 0000209533 00000 n 0000209568 00000 n 0000157843 00000 n 0000209655 00000 n 0000209721 00000 n 0000013169 00000 n 0000017922 00000 n 0000209786 00000 n 0000209851 00000 n 0000209916 00000 n 0000209981 00000 n 0000210045 00000 n 0000210110 00000 n 0000210175 00000 n 0000210240 00000 n 0000210304 00000 n 0000210366 00000 n 0000210431 00000 n 0000210495 00000 n 0000210560 00000 n 0000210624 00000 n 0000210689 00000 n 0000210754 00000 n 0000210818 00000 n 0000210883 00000 n 0000210947 00000 n 0000211012 00000 n 0000211077 00000 n 0000211142 00000 n 0000211207 00000 n 0000211271 00000 n 0000211336 00000 n 0000211401 00000 n 0000211466 00000 n 0000211531 00000 n 0000211596 00000 n 0000211661 00000 n 0000211726 00000 n 0000211791 00000 n 0000211856 00000 n 0000211921 00000 n 0000211986 00000 n 0000212051 00000 n 0000212115 00000 n 0000212180 00000 n 0000212245 00000 n 0000212310 00000 n 0000212375 00000 n 0000212440 00000 n 0000212475 00000 n 0000158017 00000 n 0000212562 00000 n 0000017944 00000 n 0000021559 00000 n 0000212628 00000 n 0000212693 00000 n 0000212758 00000 n 0000212823 00000 n 0000212888 00000 n 0000212953 00000 n 0000213018 00000 n 0000213083 00000 n 0000213148 00000 n 0000213209 00000 n 0000213270 00000 n 0000213332 00000 n 0000213397 00000 n 0000213462 00000 n 0000213527 00000 n 0000213592 00000 n 0000213657 00000 n 0000213722 00000 n 0000379456 00000 n 0000405980 00000 n 0000213787 00000 n 0000213852 00000 n 0000213917 00000 n 0000213982 00000 n 0000214047 00000 n 0000214112 00000 n 0000214177 00000 n 0000214242 00000 n 0000214307 00000 n 0000214370 00000 n 0000214435 00000 n 0000214500 00000 n 0000214565 00000 n 0000214627 00000 n 0000214692 00000 n 0000214757 00000 n 0000214822 00000 n 0000214887 00000 n 0000214952 00000 n 0000215016 00000 n 0000215078 00000 n 0000215143 00000 n 0000215208 00000 n 0000215273 00000 n 0000215336 00000 n 0000215399 00000 n 0000215464 00000 n 0000215529 00000 n 0000215594 00000 n 0000215659 00000 n 0000215724 00000 n 0000215788 00000 n 0000215853 00000 n 0000215918 00000 n 0000215983 00000 n 0000216048 00000 n 0000216113 00000 n 0000216178 00000 n 0000216243 00000 n 0000216308 00000 n 0000216373 00000 n 0000216438 00000 n 0000216502 00000 n 0000216567 00000 n 0000216632 00000 n 0000216697 00000 n 0000216762 00000 n 0000216826 00000 n 0000216861 00000 n 0000158183 00000 n 0000216961 00000 n 0000021581 00000 n 0000025642 00000 n 0000217027 00000 n 0000217092 00000 n 0000217155 00000 n 0000217220 00000 n 0000217285 00000 n 0000217350 00000 n 0000217415 00000 n 0000217480 00000 n 0000217545 00000 n 0000217610 00000 n 0000217675 00000 n 0000217740 00000 n 0000217805 00000 n 0000217870 00000 n 0000217935 00000 n 0000218000 00000 n 0000218064 00000 n 0000218129 00000 n 0000218194 00000 n 0000218259 00000 n 0000218324 00000 n 0000218389 00000 n 0000218454 00000 n 0000218519 00000 n 0000218584 00000 n 0000218649 00000 n 0000218714 00000 n 0000218779 00000 n 0000218844 00000 n 0000218909 00000 n 0000218974 00000 n 0000219038 00000 n 0000219102 00000 n 0000219167 00000 n 0000219232 00000 n 0000219296 00000 n 0000219361 00000 n 0000219426 00000 n 0000219491 00000 n 0000219556 00000 n 0000219621 00000 n 0000219686 00000 n 0000219751 00000 n 0000219816 00000 n 0000219881 00000 n 0000219946 00000 n 0000220011 00000 n 0000220076 00000 n 0000220141 00000 n 0000220206 00000 n 0000220271 00000 n 0000220336 00000 n 0000220401 00000 n 0000220466 00000 n 0000220531 00000 n 0000220596 00000 n 0000220631 00000 n 0000158349 00000 n 0000220692 00000 n 0000025664 00000 n 0000029682 00000 n 0000220758 00000 n 0000220823 00000 n 0000220888 00000 n 0000220953 00000 n 0000221017 00000 n 0000221081 00000 n 0000221145 00000 n 0000221210 00000 n 0000221275 00000 n 0000221340 00000 n 0000221405 00000 n 0000221470 00000 n 0000221535 00000 n 0000221600 00000 n 0000221665 00000 n 0000221730 00000 n 0000221795 00000 n 0000221860 00000 n 0000221922 00000 n 0000221984 00000 n 0000222049 00000 n 0000222114 00000 n 0000222179 00000 n 0000222241 00000 n 0000222306 00000 n 0000222371 00000 n 0000222435 00000 n 0000222500 00000 n 0000222565 00000 n 0000222630 00000 n 0000222695 00000 n 0000222760 00000 n 0000222825 00000 n 0000222890 00000 n 0000222955 00000 n 0000223019 00000 n 0000223084 00000 n 0000223149 00000 n 0000223214 00000 n 0000223279 00000 n 0000223344 00000 n 0000223409 00000 n 0000223474 00000 n 0000223536 00000 n 0000223601 00000 n 0000223666 00000 n 0000223731 00000 n 0000223795 00000 n 0000223860 00000 n 0000223925 00000 n 0000223990 00000 n 0000224055 00000 n 0000224120 00000 n 0000224182 00000 n 0000224247 00000 n 0000224312 00000 n 0000224376 00000 n 0000224440 00000 n 0000224505 00000 n 0000224570 00000 n 0000224632 00000 n 0000224697 00000 n 0000224762 00000 n 0000224827 00000 n 0000224892 00000 n 0000224957 00000 n 0000225022 00000 n 0000225086 00000 n 0000225150 00000 n 0000225185 00000 n 0000158515 00000 n 0000225259 00000 n 0000225325 00000 n 0000029704 00000 n 0000032949 00000 n 0000225390 00000 n 0000225455 00000 n 0000225520 00000 n 0000225582 00000 n 0000225647 00000 n 0000225712 00000 n 0000225777 00000 n 0000225842 00000 n 0000225907 00000 n 0000225972 00000 n 0000226037 00000 n 0000226102 00000 n 0000226167 00000 n 0000226232 00000 n 0000226297 00000 n 0000226362 00000 n 0000226427 00000 n 0000226492 00000 n 0000226557 00000 n 0000226622 00000 n 0000226687 00000 n 0000226752 00000 n 0000226814 00000 n 0000226879 00000 n 0000226944 00000 n 0000227009 00000 n 0000227074 00000 n 0000227139 00000 n 0000227200 00000 n 0000227264 00000 n 0000227329 00000 n 0000227394 00000 n 0000227459 00000 n 0000227523 00000 n 0000227588 00000 n 0000227653 00000 n 0000227718 00000 n 0000227783 00000 n 0000227848 00000 n 0000227913 00000 n 0000227978 00000 n 0000228042 00000 n 0000228105 00000 n 0000228170 00000 n 0000228234 00000 n 0000228299 00000 n 0000228364 00000 n 0000228428 00000 n 0000228493 00000 n 0000228558 00000 n 0000228623 00000 n 0000228687 00000 n 0000228752 00000 n 0000228787 00000 n 0000158681 00000 n 0000228887 00000 n 0000228953 00000 n 0000032971 00000 n 0000035173 00000 n 0000229018 00000 n 0000229083 00000 n 0000229148 00000 n 0000229213 00000 n 0000229277 00000 n 0000229341 00000 n 0000229404 00000 n 0000229469 00000 n 0000229534 00000 n 0000229596 00000 n 0000229661 00000 n 0000229726 00000 n 0000229790 00000 n 0000229855 00000 n 0000229920 00000 n 0000229985 00000 n 0000230050 00000 n 0000230112 00000 n 0000230177 00000 n 0000230242 00000 n 0000230307 00000 n 0000230372 00000 n 0000230436 00000 n 0000230501 00000 n 0000230566 00000 n 0000230631 00000 n 0000230696 00000 n 0000230761 00000 n 0000230825 00000 n 0000230890 00000 n 0000230955 00000 n 0000231020 00000 n 0000231085 00000 n 0000231149 00000 n 0000231214 00000 n 0000231279 00000 n 0000231344 00000 n 0000231409 00000 n 0000231444 00000 n 0000158847 00000 n 0000231531 00000 n 0000231597 00000 n 0000035195 00000 n 0000036740 00000 n 0000231662 00000 n 0000231727 00000 n 0000231792 00000 n 0000231857 00000 n 0000231921 00000 n 0000231986 00000 n 0000232051 00000 n 0000232116 00000 n 0000232181 00000 n 0000232246 00000 n 0000232310 00000 n 0000232375 00000 n 0000232440 00000 n 0000232505 00000 n 0000232570 00000 n 0000232635 00000 n 0000232700 00000 n 0000232765 00000 n 0000232830 00000 n 0000232895 00000 n 0000232960 00000 n 0000233025 00000 n 0000233090 00000 n 0000233155 00000 n 0000233220 00000 n 0000233282 00000 n 0000233347 00000 n 0000233411 00000 n 0000233475 00000 n 0000233540 00000 n 0000233604 00000 n 0000233669 00000 n 0000233734 00000 n 0000233799 00000 n 0000233864 00000 n 0000233929 00000 n 0000233994 00000 n 0000234059 00000 n 0000234124 00000 n 0000234189 00000 n 0000234254 00000 n 0000234319 00000 n 0000234384 00000 n 0000234449 00000 n 0000234514 00000 n 0000234579 00000 n 0000234644 00000 n 0000234708 00000 n 0000234772 00000 n 0000234837 00000 n 0000234899 00000 n 0000234964 00000 n 0000235029 00000 n 0000235094 00000 n 0000235155 00000 n 0000235220 00000 n 0000235285 00000 n 0000235350 00000 n 0000235415 00000 n 0000235450 00000 n 0000159013 00000 n 0000235511 00000 n 0000235577 00000 n 0000036762 00000 n 0000038595 00000 n 0000235642 00000 n 0000235707 00000 n 0000235772 00000 n 0000235836 00000 n 0000235900 00000 n 0000235965 00000 n 0000236030 00000 n 0000236095 00000 n 0000236160 00000 n 0000236225 00000 n 0000236290 00000 n 0000236355 00000 n 0000236420 00000 n 0000236485 00000 n 0000236550 00000 n 0000236615 00000 n 0000236680 00000 n 0000236745 00000 n 0000236810 00000 n 0000236875 00000 n 0000236940 00000 n 0000237005 00000 n 0000237070 00000 n 0000237135 00000 n 0000237200 00000 n 0000237265 00000 n 0000237330 00000 n 0000237395 00000 n 0000237460 00000 n 0000237525 00000 n 0000237590 00000 n 0000237655 00000 n 0000237717 00000 n 0000237782 00000 n 0000237847 00000 n 0000237912 00000 n 0000237947 00000 n 0000159179 00000 n 0000238034 00000 n 0000238100 00000 n 0000038617 00000 n 0000040087 00000 n 0000238165 00000 n 0000238230 00000 n 0000238295 00000 n 0000238359 00000 n 0000238424 00000 n 0000238489 00000 n 0000238554 00000 n 0000238619 00000 n 0000238684 00000 n 0000238749 00000 n 0000238813 00000 n 0000238878 00000 n 0000238943 00000 n 0000239008 00000 n 0000239073 00000 n 0000239138 00000 n 0000239203 00000 n 0000239268 00000 n 0000239331 00000 n 0000239396 00000 n 0000239460 00000 n 0000239525 00000 n 0000239590 00000 n 0000239652 00000 n 0000239716 00000 n 0000239781 00000 n 0000239846 00000 n 0000239911 00000 n 0000239976 00000 n 0000240041 00000 n 0000240106 00000 n 0000240171 00000 n 0000240236 00000 n 0000240300 00000 n 0000240365 00000 n 0000240400 00000 n 0000159345 00000 n 0000240487 00000 n 0000040109 00000 n 0000043264 00000 n 0000240553 00000 n 0000240617 00000 n 0000240679 00000 n 0000240744 00000 n 0000240806 00000 n 0000240870 00000 n 0000240935 00000 n 0000240999 00000 n 0000241063 00000 n 0000241128 00000 n 0000241193 00000 n 0000241258 00000 n 0000241323 00000 n 0000241385 00000 n 0000241450 00000 n 0000241515 00000 n 0000241580 00000 n 0000241645 00000 n 0000241710 00000 n 0000241775 00000 n 0000241836 00000 n 0000241901 00000 n 0000241966 00000 n 0000242031 00000 n 0000242096 00000 n 0000242158 00000 n 0000242223 00000 n 0000242288 00000 n 0000242351 00000 n 0000242416 00000 n 0000242481 00000 n 0000242546 00000 n 0000242611 00000 n 0000242676 00000 n 0000242741 00000 n 0000242806 00000 n 0000242841 00000 n 0000159511 00000 n 0000242928 00000 n 0000043286 00000 n 0000046252 00000 n 0000242994 00000 n 0000243059 00000 n 0000243124 00000 n 0000243189 00000 n 0000243253 00000 n 0000243318 00000 n 0000243383 00000 n 0000243448 00000 n 0000243513 00000 n 0000243578 00000 n 0000243643 00000 n 0000243708 00000 n 0000243773 00000 n 0000243838 00000 n 0000243902 00000 n 0000243966 00000 n 0000244031 00000 n 0000244096 00000 n 0000244161 00000 n 0000244226 00000 n 0000244291 00000 n 0000244356 00000 n 0000244420 00000 n 0000244484 00000 n 0000244549 00000 n 0000244614 00000 n 0000244679 00000 n 0000244744 00000 n 0000244809 00000 n 0000244874 00000 n 0000244939 00000 n 0000245004 00000 n 0000245068 00000 n 0000245134 00000 n 0000245200 00000 n 0000245266 00000 n 0000245332 00000 n 0000245398 00000 n 0000245434 00000 n 0000159679 00000 n 0000245522 00000 n 0000046274 00000 n 0000048485 00000 n 0000245590 00000 n 0000245657 00000 n 0000245720 00000 n 0000245783 00000 n 0000245847 00000 n 0000245914 00000 n 0000245980 00000 n 0000246046 00000 n 0000246112 00000 n 0000246179 00000 n 0000246245 00000 n 0000246312 00000 n 0000246379 00000 n 0000246446 00000 n 0000246513 00000 n 0000246580 00000 n 0000246647 00000 n 0000246714 00000 n 0000246780 00000 n 0000246847 00000 n 0000246914 00000 n 0000246981 00000 n 0000247048 00000 n 0000247115 00000 n 0000247182 00000 n 0000247249 00000 n 0000247315 00000 n 0000247382 00000 n 0000247449 00000 n 0000247516 00000 n 0000247583 00000 n 0000247650 00000 n 0000247717 00000 n 0000247784 00000 n 0000247850 00000 n 0000247916 00000 n 0000247983 00000 n 0000248050 00000 n 0000248117 00000 n 0000248184 00000 n 0000248251 00000 n 0000248318 00000 n 0000248385 00000 n 0000248452 00000 n 0000248519 00000 n 0000248586 00000 n 0000248622 00000 n 0000159849 00000 n 0000248723 00000 n 0000248791 00000 n 0000048508 00000 n 0000050579 00000 n 0000248858 00000 n 0000248925 00000 n 0000248992 00000 n 0000249059 00000 n 0000249126 00000 n 0000249193 00000 n 0000249260 00000 n 0000249327 00000 n 0000249391 00000 n 0000249458 00000 n 0000249525 00000 n 0000249592 00000 n 0000249658 00000 n 0000249725 00000 n 0000249792 00000 n 0000249859 00000 n 0000249926 00000 n 0000249993 00000 n 0000250060 00000 n 0000250127 00000 n 0000250194 00000 n 0000250261 00000 n 0000250328 00000 n 0000250395 00000 n 0000250462 00000 n 0000250528 00000 n 0000250595 00000 n 0000250662 00000 n 0000250729 00000 n 0000250796 00000 n 0000250863 00000 n 0000250899 00000 n 0000160019 00000 n 0000250987 00000 n 0000050602 00000 n 0000053568 00000 n 0000251055 00000 n 0000251122 00000 n 0000251189 00000 n 0000251255 00000 n 0000251321 00000 n 0000251387 00000 n 0000251454 00000 n 0000251521 00000 n 0000251588 00000 n 0000251655 00000 n 0000251722 00000 n 0000251789 00000 n 0000251856 00000 n 0000251923 00000 n 0000251990 00000 n 0000252057 00000 n 0000252124 00000 n 0000252191 00000 n 0000252258 00000 n 0000252325 00000 n 0000252392 00000 n 0000252459 00000 n 0000252526 00000 n 0000252593 00000 n 0000252660 00000 n 0000252727 00000 n 0000252791 00000 n 0000252858 00000 n 0000252925 00000 n 0000252992 00000 n 0000253059 00000 n 0000253124 00000 n 0000253191 00000 n 0000253258 00000 n 0000253324 00000 n 0000253391 00000 n 0000253458 00000 n 0000253525 00000 n 0000253592 00000 n 0000253659 00000 n 0000253726 00000 n 0000253793 00000 n 0000253860 00000 n 0000253927 00000 n 0000253994 00000 n 0000254061 00000 n 0000254128 00000 n 0000254195 00000 n 0000254262 00000 n 0000254329 00000 n 0000254396 00000 n 0000254463 00000 n 0000254530 00000 n 0000254597 00000 n 0000254664 00000 n 0000254731 00000 n 0000254798 00000 n 0000254865 00000 n 0000254901 00000 n 0000160189 00000 n 0000254976 00000 n 0000053591 00000 n 0000056471 00000 n 0000255044 00000 n 0000255111 00000 n 0000255178 00000 n 0000255245 00000 n 0000255312 00000 n 0000255379 00000 n 0000255446 00000 n 0000255513 00000 n 0000255580 00000 n 0000255647 00000 n 0000255714 00000 n 0000255781 00000 n 0000255848 00000 n 0000255915 00000 n 0000255982 00000 n 0000256049 00000 n 0000256116 00000 n 0000256183 00000 n 0000256250 00000 n 0000256317 00000 n 0000256384 00000 n 0000256451 00000 n 0000256518 00000 n 0000256585 00000 n 0000256652 00000 n 0000256719 00000 n 0000256786 00000 n 0000256853 00000 n 0000256920 00000 n 0000256987 00000 n 0000257054 00000 n 0000257121 00000 n 0000257188 00000 n 0000257255 00000 n 0000257318 00000 n 0000257385 00000 n 0000257452 00000 n 0000257519 00000 n 0000257583 00000 n 0000257647 00000 n 0000257714 00000 n 0000257781 00000 n 0000257848 00000 n 0000257914 00000 n 0000257981 00000 n 0000258048 00000 n 0000258115 00000 n 0000258182 00000 n 0000258249 00000 n 0000258316 00000 n 0000258383 00000 n 0000258450 00000 n 0000258517 00000 n 0000258584 00000 n 0000258651 00000 n 0000258718 00000 n 0000258785 00000 n 0000258852 00000 n 0000258919 00000 n 0000258986 00000 n 0000259053 00000 n 0000259089 00000 n 0000160359 00000 n 0000259177 00000 n 0000056494 00000 n 0000060110 00000 n 0000259245 00000 n 0000259312 00000 n 0000259379 00000 n 0000259446 00000 n 0000259513 00000 n 0000259580 00000 n 0000259646 00000 n 0000259713 00000 n 0000259780 00000 n 0000259847 00000 n 0000259914 00000 n 0000259981 00000 n 0000260048 00000 n 0000260113 00000 n 0000260180 00000 n 0000260247 00000 n 0000260314 00000 n 0000260381 00000 n 0000260448 00000 n 0000260515 00000 n 0000260581 00000 n 0000260648 00000 n 0000260715 00000 n 0000260779 00000 n 0000260846 00000 n 0000260913 00000 n 0000260980 00000 n 0000261047 00000 n 0000261114 00000 n 0000261181 00000 n 0000261248 00000 n 0000261315 00000 n 0000261382 00000 n 0000261449 00000 n 0000261516 00000 n 0000261583 00000 n 0000261650 00000 n 0000261716 00000 n 0000261783 00000 n 0000261850 00000 n 0000261917 00000 n 0000261984 00000 n 0000262051 00000 n 0000262118 00000 n 0000262185 00000 n 0000262252 00000 n 0000262319 00000 n 0000262386 00000 n 0000262453 00000 n 0000262520 00000 n 0000262587 00000 n 0000262654 00000 n 0000262720 00000 n 0000262786 00000 n 0000262853 00000 n 0000262920 00000 n 0000262987 00000 n 0000263054 00000 n 0000263121 00000 n 0000263188 00000 n 0000263252 00000 n 0000263316 00000 n 0000263383 00000 n 0000263450 00000 n 0000263516 00000 n 0000263552 00000 n 0000160529 00000 n 0000263627 00000 n 0000263695 00000 n 0000060133 00000 n 0000062931 00000 n 0000263762 00000 n 0000263829 00000 n 0000263896 00000 n 0000263963 00000 n 0000264029 00000 n 0000264096 00000 n 0000264163 00000 n 0000264230 00000 n 0000264297 00000 n 0000264364 00000 n 0000264431 00000 n 0000264498 00000 n 0000264562 00000 n 0000264626 00000 n 0000264693 00000 n 0000264760 00000 n 0000264827 00000 n 0000264894 00000 n 0000264961 00000 n 0000265028 00000 n 0000265094 00000 n 0000265161 00000 n 0000265227 00000 n 0000265294 00000 n 0000265361 00000 n 0000265428 00000 n 0000265495 00000 n 0000265562 00000 n 0000265629 00000 n 0000265696 00000 n 0000265763 00000 n 0000265830 00000 n 0000265897 00000 n 0000265964 00000 n 0000266031 00000 n 0000266098 00000 n 0000266165 00000 n 0000266232 00000 n 0000266299 00000 n 0000266366 00000 n 0000266433 00000 n 0000266500 00000 n 0000266567 00000 n 0000266634 00000 n 0000266700 00000 n 0000266766 00000 n 0000266833 00000 n 0000266900 00000 n 0000266967 00000 n 0000267034 00000 n 0000267101 00000 n 0000267168 00000 n 0000267235 00000 n 0000267302 00000 n 0000267369 00000 n 0000267436 00000 n 0000267503 00000 n 0000267570 00000 n 0000267637 00000 n 0000267704 00000 n 0000267771 00000 n 0000267838 00000 n 0000267874 00000 n 0000160699 00000 n 0000267975 00000 n 0000268043 00000 n 0000062954 00000 n 0000066742 00000 n 0000268110 00000 n 0000268177 00000 n 0000268243 00000 n 0000268310 00000 n 0000268377 00000 n 0000268444 00000 n 0000268511 00000 n 0000268577 00000 n 0000268644 00000 n 0000268711 00000 n 0000268778 00000 n 0000268845 00000 n 0000268912 00000 n 0000268979 00000 n 0000269046 00000 n 0000269113 00000 n 0000269180 00000 n 0000269247 00000 n 0000269314 00000 n 0000269381 00000 n 0000269448 00000 n 0000269514 00000 n 0000269580 00000 n 0000269647 00000 n 0000269714 00000 n 0000269781 00000 n 0000269848 00000 n 0000269913 00000 n 0000269980 00000 n 0000270016 00000 n 0000160869 00000 n 0000270078 00000 n 0000066765 00000 n 0000069461 00000 n 0000270146 00000 n 0000270213 00000 n 0000270280 00000 n 0000270347 00000 n 0000270413 00000 n 0000270480 00000 n 0000270545 00000 n 0000270612 00000 n 0000270679 00000 n 0000270746 00000 n 0000270813 00000 n 0000270880 00000 n 0000270947 00000 n 0000271013 00000 n 0000271080 00000 n 0000271147 00000 n 0000271214 00000 n 0000271281 00000 n 0000271348 00000 n 0000271415 00000 n 0000271482 00000 n 0000271549 00000 n 0000271616 00000 n 0000271683 00000 n 0000271750 00000 n 0000271817 00000 n 0000271883 00000 n 0000271950 00000 n 0000272017 00000 n 0000272084 00000 n 0000272151 00000 n 0000272218 00000 n 0000272285 00000 n 0000272352 00000 n 0000272419 00000 n 0000272455 00000 n 0000161039 00000 n 0000272543 00000 n 0000069484 00000 n 0000073092 00000 n 0000272611 00000 n 0000272678 00000 n 0000272745 00000 n 0000272809 00000 n 0000272873 00000 n 0000272937 00000 n 0000273004 00000 n 0000273071 00000 n 0000273138 00000 n 0000273205 00000 n 0000273272 00000 n 0000273339 00000 n 0000273406 00000 n 0000273472 00000 n 0000273539 00000 n 0000273606 00000 n 0000273673 00000 n 0000273740 00000 n 0000273807 00000 n 0000273874 00000 n 0000273941 00000 n 0000274007 00000 n 0000274073 00000 n 0000274140 00000 n 0000274207 00000 n 0000274274 00000 n 0000274341 00000 n 0000274408 00000 n 0000274472 00000 n 0000274539 00000 n 0000274605 00000 n 0000274672 00000 n 0000274739 00000 n 0000274806 00000 n 0000274873 00000 n 0000274940 00000 n 0000275007 00000 n 0000275074 00000 n 0000275141 00000 n 0000275208 00000 n 0000275275 00000 n 0000275339 00000 n 0000275406 00000 n 0000275473 00000 n 0000275540 00000 n 0000275607 00000 n 0000275674 00000 n 0000275740 00000 n 0000275804 00000 n 0000275871 00000 n 0000275938 00000 n 0000275974 00000 n 0000161209 00000 n 0000276075 00000 n 0000276143 00000 n 0000073115 00000 n 0000075703 00000 n 0000276210 00000 n 0000276276 00000 n 0000276343 00000 n 0000276409 00000 n 0000276475 00000 n 0000276539 00000 n 0000276606 00000 n 0000276673 00000 n 0000276739 00000 n 0000276806 00000 n 0000276873 00000 n 0000276940 00000 n 0000277004 00000 n 0000277071 00000 n 0000277138 00000 n 0000277204 00000 n 0000277271 00000 n 0000277338 00000 n 0000277405 00000 n 0000277472 00000 n 0000277539 00000 n 0000277606 00000 n 0000277673 00000 n 0000277740 00000 n 0000277807 00000 n 0000277874 00000 n 0000277941 00000 n 0000278008 00000 n 0000278075 00000 n 0000278142 00000 n 0000278209 00000 n 0000278276 00000 n 0000278343 00000 n 0000278410 00000 n 0000278477 00000 n 0000278544 00000 n 0000278611 00000 n 0000278678 00000 n 0000278745 00000 n 0000278811 00000 n 0000278878 00000 n 0000278945 00000 n 0000279012 00000 n 0000279079 00000 n 0000279146 00000 n 0000279213 00000 n 0000279280 00000 n 0000279316 00000 n 0000161379 00000 n 0000279417 00000 n 0000279485 00000 n 0000075726 00000 n 0000078991 00000 n 0000279552 00000 n 0000279619 00000 n 0000279686 00000 n 0000279752 00000 n 0000279819 00000 n 0000279886 00000 n 0000279953 00000 n 0000280017 00000 n 0000280084 00000 n 0000280151 00000 n 0000280218 00000 n 0000280285 00000 n 0000280352 00000 n 0000280419 00000 n 0000280486 00000 n 0000280553 00000 n 0000280620 00000 n 0000280687 00000 n 0000280754 00000 n 0000280821 00000 n 0000280888 00000 n 0000280955 00000 n 0000281022 00000 n 0000281088 00000 n 0000281155 00000 n 0000281222 00000 n 0000281289 00000 n 0000281356 00000 n 0000281423 00000 n 0000281487 00000 n 0000281551 00000 n 0000281618 00000 n 0000281685 00000 n 0000281752 00000 n 0000281819 00000 n 0000281886 00000 n 0000281953 00000 n 0000282020 00000 n 0000282087 00000 n 0000282123 00000 n 0000161549 00000 n 0000282224 00000 n 0000282292 00000 n 0000079014 00000 n 0000081556 00000 n 0000282359 00000 n 0000282425 00000 n 0000282492 00000 n 0000282558 00000 n 0000282624 00000 n 0000282691 00000 n 0000282758 00000 n 0000282825 00000 n 0000282892 00000 n 0000282959 00000 n 0000283026 00000 n 0000283093 00000 n 0000283160 00000 n 0000283226 00000 n 0000283293 00000 n 0000283360 00000 n 0000283426 00000 n 0000283493 00000 n 0000283560 00000 n 0000283627 00000 n 0000283691 00000 n 0000283758 00000 n 0000283825 00000 n 0000283892 00000 n 0000283959 00000 n 0000284026 00000 n 0000284093 00000 n 0000284159 00000 n 0000284226 00000 n 0000284293 00000 n 0000284360 00000 n 0000284427 00000 n 0000284494 00000 n 0000284561 00000 n 0000284628 00000 n 0000284695 00000 n 0000284762 00000 n 0000284829 00000 n 0000284896 00000 n 0000284932 00000 n 0000161719 00000 n 0000285020 00000 n 0000081579 00000 n 0000084468 00000 n 0000285088 00000 n 0000285154 00000 n 0000285221 00000 n 0000285287 00000 n 0000285353 00000 n 0000285420 00000 n 0000285487 00000 n 0000285554 00000 n 0000285621 00000 n 0000285688 00000 n 0000285755 00000 n 0000285821 00000 n 0000285888 00000 n 0000285955 00000 n 0000286022 00000 n 0000286089 00000 n 0000286153 00000 n 0000286220 00000 n 0000286287 00000 n 0000286354 00000 n 0000286421 00000 n 0000286488 00000 n 0000286555 00000 n 0000286621 00000 n 0000286688 00000 n 0000286755 00000 n 0000286822 00000 n 0000286889 00000 n 0000286954 00000 n 0000287021 00000 n 0000287088 00000 n 0000287153 00000 n 0000287220 00000 n 0000287287 00000 n 0000287353 00000 n 0000287420 00000 n 0000287487 00000 n 0000287554 00000 n 0000287621 00000 n 0000287657 00000 n 0000161889 00000 n 0000287745 00000 n 0000287813 00000 n 0000084491 00000 n 0000087815 00000 n 0000287880 00000 n 0000287947 00000 n 0000288014 00000 n 0000288081 00000 n 0000288147 00000 n 0000288214 00000 n 0000288281 00000 n 0000288348 00000 n 0000288415 00000 n 0000288482 00000 n 0000288548 00000 n 0000288614 00000 n 0000288681 00000 n 0000288747 00000 n 0000288814 00000 n 0000288881 00000 n 0000288948 00000 n 0000289015 00000 n 0000289082 00000 n 0000289149 00000 n 0000289216 00000 n 0000289283 00000 n 0000289350 00000 n 0000289417 00000 n 0000289484 00000 n 0000289551 00000 n 0000289618 00000 n 0000289685 00000 n 0000289751 00000 n 0000289817 00000 n 0000289884 00000 n 0000289951 00000 n 0000290016 00000 n 0000290083 00000 n 0000290150 00000 n 0000290217 00000 n 0000290284 00000 n 0000290351 00000 n 0000290415 00000 n 0000290482 00000 n 0000290549 00000 n 0000290616 00000 n 0000290652 00000 n 0000162059 00000 n 0000290740 00000 n 0000290808 00000 n 0000087838 00000 n 0000090378 00000 n 0000290875 00000 n 0000290942 00000 n 0000291009 00000 n 0000291076 00000 n 0000291142 00000 n 0000291209 00000 n 0000291276 00000 n 0000291343 00000 n 0000291410 00000 n 0000291477 00000 n 0000291544 00000 n 0000291611 00000 n 0000291678 00000 n 0000291745 00000 n 0000291812 00000 n 0000291878 00000 n 0000291945 00000 n 0000292012 00000 n 0000292079 00000 n 0000292146 00000 n 0000292213 00000 n 0000292279 00000 n 0000292345 00000 n 0000292412 00000 n 0000292479 00000 n 0000292546 00000 n 0000292613 00000 n 0000292678 00000 n 0000292745 00000 n 0000292812 00000 n 0000292879 00000 n 0000292945 00000 n 0000293012 00000 n 0000293079 00000 n 0000293146 00000 n 0000293212 00000 n 0000293279 00000 n 0000293346 00000 n 0000293413 00000 n 0000293480 00000 n 0000293544 00000 n 0000293611 00000 n 0000293678 00000 n 0000293745 00000 n 0000293781 00000 n 0000162229 00000 n 0000293869 00000 n 0000090401 00000 n 0000092335 00000 n 0000293937 00000 n 0000294004 00000 n 0000294071 00000 n 0000294138 00000 n 0000294205 00000 n 0000294272 00000 n 0000294339 00000 n 0000294406 00000 n 0000294473 00000 n 0000294540 00000 n 0000294607 00000 n 0000294674 00000 n 0000294740 00000 n 0000294807 00000 n 0000294873 00000 n 0000294940 00000 n 0000295004 00000 n 0000295068 00000 n 0000295135 00000 n 0000295202 00000 n 0000295269 00000 n 0000295336 00000 n 0000295403 00000 n 0000295470 00000 n 0000295537 00000 n 0000295603 00000 n 0000295670 00000 n 0000295737 00000 n 0000295804 00000 n 0000295871 00000 n 0000295935 00000 n 0000296002 00000 n 0000296069 00000 n 0000296136 00000 n 0000296203 00000 n 0000296270 00000 n 0000296337 00000 n 0000296404 00000 n 0000296440 00000 n 0000162399 00000 n 0000296528 00000 n 0000092358 00000 n 0000094157 00000 n 0000296596 00000 n 0000296663 00000 n 0000296727 00000 n 0000296791 00000 n 0000296858 00000 n 0000296924 00000 n 0000296990 00000 n 0000297057 00000 n 0000297124 00000 n 0000297191 00000 n 0000297258 00000 n 0000297325 00000 n 0000297392 00000 n 0000297459 00000 n 0000297525 00000 n 0000297591 00000 n 0000297658 00000 n 0000297722 00000 n 0000297789 00000 n 0000297856 00000 n 0000297923 00000 n 0000297987 00000 n 0000298054 00000 n 0000298121 00000 n 0000298188 00000 n 0000298255 00000 n 0000298322 00000 n 0000298388 00000 n 0000298451 00000 n 0000298517 00000 n 0000298584 00000 n 0000298651 00000 n 0000298718 00000 n 0000298785 00000 n 0000298852 00000 n 0000298918 00000 n 0000298985 00000 n 0000299052 00000 n 0000299119 00000 n 0000299186 00000 n 0000299253 00000 n 0000299289 00000 n 0000162569 00000 n 0000299377 00000 n 0000094180 00000 n 0000096293 00000 n 0000299445 00000 n 0000299512 00000 n 0000299579 00000 n 0000299646 00000 n 0000299712 00000 n 0000299778 00000 n 0000299844 00000 n 0000299911 00000 n 0000299978 00000 n 0000300045 00000 n 0000300112 00000 n 0000300179 00000 n 0000300245 00000 n 0000300312 00000 n 0000300379 00000 n 0000300446 00000 n 0000300513 00000 n 0000300580 00000 n 0000300647 00000 n 0000300714 00000 n 0000300778 00000 n 0000300845 00000 n 0000300912 00000 n 0000300979 00000 n 0000301046 00000 n 0000301113 00000 n 0000301180 00000 n 0000301246 00000 n 0000301313 00000 n 0000301380 00000 n 0000301447 00000 n 0000301514 00000 n 0000301581 00000 n 0000301647 00000 n 0000301714 00000 n 0000301781 00000 n 0000301848 00000 n 0000301912 00000 n 0000301979 00000 n 0000302046 00000 n 0000302113 00000 n 0000302180 00000 n 0000302247 00000 n 0000302283 00000 n 0000162739 00000 n 0000302371 00000 n 0000302439 00000 n 0000096316 00000 n 0000098725 00000 n 0000302506 00000 n 0000302573 00000 n 0000302640 00000 n 0000302707 00000 n 0000302771 00000 n 0000302837 00000 n 0000302904 00000 n 0000302971 00000 n 0000303038 00000 n 0000303105 00000 n 0000303172 00000 n 0000303239 00000 n 0000303306 00000 n 0000303373 00000 n 0000303439 00000 n 0000303505 00000 n 0000303572 00000 n 0000303635 00000 n 0000303702 00000 n 0000303769 00000 n 0000303836 00000 n 0000303903 00000 n 0000303970 00000 n 0000304037 00000 n 0000304104 00000 n 0000304171 00000 n 0000304237 00000 n 0000304304 00000 n 0000304371 00000 n 0000304438 00000 n 0000304501 00000 n 0000304568 00000 n 0000304635 00000 n 0000304702 00000 n 0000304738 00000 n 0000162909 00000 n 0000304826 00000 n 0000098748 00000 n 0000101654 00000 n 0000304894 00000 n 0000304961 00000 n 0000305028 00000 n 0000305091 00000 n 0000305157 00000 n 0000305224 00000 n 0000305291 00000 n 0000305358 00000 n 0000305425 00000 n 0000305492 00000 n 0000305559 00000 n 0000305626 00000 n 0000305693 00000 n 0000305757 00000 n 0000305824 00000 n 0000305889 00000 n 0000305956 00000 n 0000306023 00000 n 0000306087 00000 n 0000306151 00000 n 0000306218 00000 n 0000306285 00000 n 0000306352 00000 n 0000306418 00000 n 0000306485 00000 n 0000306552 00000 n 0000306619 00000 n 0000306686 00000 n 0000306752 00000 n 0000306819 00000 n 0000306886 00000 n 0000306951 00000 n 0000307018 00000 n 0000307054 00000 n 0000163079 00000 n 0000307142 00000 n 0000307210 00000 n 0000101677 00000 n 0000104612 00000 n 0000307277 00000 n 0000307344 00000 n 0000307411 00000 n 0000307478 00000 n 0000307545 00000 n 0000307612 00000 n 0000307679 00000 n 0000307743 00000 n 0000307810 00000 n 0000307877 00000 n 0000307944 00000 n 0000308011 00000 n 0000308078 00000 n 0000308144 00000 n 0000308211 00000 n 0000308277 00000 n 0000308344 00000 n 0000308411 00000 n 0000308478 00000 n 0000308545 00000 n 0000308612 00000 n 0000308679 00000 n 0000308746 00000 n 0000308813 00000 n 0000308880 00000 n 0000308916 00000 n 0000163249 00000 n 0000309004 00000 n 0000309072 00000 n 0000104635 00000 n 0000106892 00000 n 0000309139 00000 n 0000309205 00000 n 0000309272 00000 n 0000309338 00000 n 0000309404 00000 n 0000309471 00000 n 0000309538 00000 n 0000309605 00000 n 0000309672 00000 n 0000309739 00000 n 0000309806 00000 n 0000309873 00000 n 0000309940 00000 n 0000310007 00000 n 0000310074 00000 n 0000310141 00000 n 0000310208 00000 n 0000310272 00000 n 0000310338 00000 n 0000310405 00000 n 0000310472 00000 n 0000310539 00000 n 0000310606 00000 n 0000310672 00000 n 0000310739 00000 n 0000310806 00000 n 0000310873 00000 n 0000310940 00000 n 0000311007 00000 n 0000311074 00000 n 0000311140 00000 n 0000311176 00000 n 0000163419 00000 n 0000311264 00000 n 0000106915 00000 n 0000108277 00000 n 0000311332 00000 n 0000311398 00000 n 0000311465 00000 n 0000311531 00000 n 0000311597 00000 n 0000311664 00000 n 0000311731 00000 n 0000311798 00000 n 0000311865 00000 n 0000311932 00000 n 0000311999 00000 n 0000312066 00000 n 0000312133 00000 n 0000312200 00000 n 0000312263 00000 n 0000312330 00000 n 0000312397 00000 n 0000312464 00000 n 0000312531 00000 n 0000312598 00000 n 0000312665 00000 n 0000312732 00000 n 0000312799 00000 n 0000312866 00000 n 0000312933 00000 n 0000313000 00000 n 0000313066 00000 n 0000313133 00000 n 0000313199 00000 n 0000313265 00000 n 0000313332 00000 n 0000313399 00000 n 0000313466 00000 n 0000313533 00000 n 0000313600 00000 n 0000313667 00000 n 0000313703 00000 n 0000163589 00000 n 0000313791 00000 n 0000313859 00000 n 0000108300 00000 n 0000109964 00000 n 0000313926 00000 n 0000313993 00000 n 0000314056 00000 n 0000314119 00000 n 0000314183 00000 n 0000314250 00000 n 0000314316 00000 n 0000314382 00000 n 0000314448 00000 n 0000314515 00000 n 0000314582 00000 n 0000314646 00000 n 0000314713 00000 n 0000314780 00000 n 0000314847 00000 n 0000314914 00000 n 0000314980 00000 n 0000315046 00000 n 0000315113 00000 n 0000315180 00000 n 0000315247 00000 n 0000315314 00000 n 0000315381 00000 n 0000315445 00000 n 0000315509 00000 n 0000315576 00000 n 0000315639 00000 n 0000315702 00000 n 0000315765 00000 n 0000315832 00000 n 0000315899 00000 n 0000315966 00000 n 0000316033 00000 n 0000316100 00000 n 0000316167 00000 n 0000316232 00000 n 0000316299 00000 n 0000316366 00000 n 0000316433 00000 n 0000316497 00000 n 0000316564 00000 n 0000316631 00000 n 0000316698 00000 n 0000316734 00000 n 0000163759 00000 n 0000316822 00000 n 0000316890 00000 n 0000109987 00000 n 0000111537 00000 n 0000316957 00000 n 0000317024 00000 n 0000317091 00000 n 0000317158 00000 n 0000317225 00000 n 0000317292 00000 n 0000317359 00000 n 0000317426 00000 n 0000317493 00000 n 0000317560 00000 n 0000317627 00000 n 0000317693 00000 n 0000317760 00000 n 0000317827 00000 n 0000317894 00000 n 0000317961 00000 n 0000318028 00000 n 0000318095 00000 n 0000318162 00000 n 0000318229 00000 n 0000318296 00000 n 0000318363 00000 n 0000318430 00000 n 0000318497 00000 n 0000318564 00000 n 0000318630 00000 n 0000318697 00000 n 0000318764 00000 n 0000318831 00000 n 0000318898 00000 n 0000318965 00000 n 0000319032 00000 n 0000319099 00000 n 0000319166 00000 n 0000319233 00000 n 0000319297 00000 n 0000319363 00000 n 0000319429 00000 n 0000319495 00000 n 0000319562 00000 n 0000319629 00000 n 0000319696 00000 n 0000319760 00000 n 0000319827 00000 n 0000319863 00000 n 0000163929 00000 n 0000319951 00000 n 0000320019 00000 n 0000111560 00000 n 0000113076 00000 n 0000320086 00000 n 0000320153 00000 n 0000320217 00000 n 0000320281 00000 n 0000320348 00000 n 0000320414 00000 n 0000320480 00000 n 0000320547 00000 n 0000320614 00000 n 0000320681 00000 n 0000320748 00000 n 0000320815 00000 n 0000320882 00000 n 0000320949 00000 n 0000321016 00000 n 0000321083 00000 n 0000321150 00000 n 0000321217 00000 n 0000321284 00000 n 0000321351 00000 n 0000321418 00000 n 0000321485 00000 n 0000321552 00000 n 0000321616 00000 n 0000321682 00000 n 0000321749 00000 n 0000321816 00000 n 0000321883 00000 n 0000321950 00000 n 0000322017 00000 n 0000322084 00000 n 0000322151 00000 n 0000322218 00000 n 0000322285 00000 n 0000322352 00000 n 0000322419 00000 n 0000322486 00000 n 0000322553 00000 n 0000322617 00000 n 0000322683 00000 n 0000322749 00000 n 0000322816 00000 n 0000322883 00000 n 0000322950 00000 n 0000323017 00000 n 0000323084 00000 n 0000323120 00000 n 0000164099 00000 n 0000323208 00000 n 0000323276 00000 n 0000113099 00000 n 0000115115 00000 n 0000323343 00000 n 0000323410 00000 n 0000323477 00000 n 0000323543 00000 n 0000323609 00000 n 0000323675 00000 n 0000323742 00000 n 0000323809 00000 n 0000323874 00000 n 0000323939 00000 n 0000324006 00000 n 0000324072 00000 n 0000324139 00000 n 0000324206 00000 n 0000324272 00000 n 0000324339 00000 n 0000324405 00000 n 0000324472 00000 n 0000324539 00000 n 0000324602 00000 n 0000324669 00000 n 0000324736 00000 n 0000324803 00000 n 0000324870 00000 n 0000324937 00000 n 0000325004 00000 n 0000325068 00000 n 0000325135 00000 n 0000325202 00000 n 0000325269 00000 n 0000325336 00000 n 0000325403 00000 n 0000325470 00000 n 0000325534 00000 n 0000325597 00000 n 0000325664 00000 n 0000325730 00000 n 0000325797 00000 n 0000325863 00000 n 0000325929 00000 n 0000325996 00000 n 0000326063 00000 n 0000326130 00000 n 0000326197 00000 n 0000326263 00000 n 0000326330 00000 n 0000326397 00000 n 0000326433 00000 n 0000164269 00000 n 0000326521 00000 n 0000326589 00000 n 0000115138 00000 n 0000117315 00000 n 0000326656 00000 n 0000326723 00000 n 0000326790 00000 n 0000326857 00000 n 0000326923 00000 n 0000326990 00000 n 0000327057 00000 n 0000327123 00000 n 0000327190 00000 n 0000327254 00000 n 0000327321 00000 n 0000327388 00000 n 0000327455 00000 n 0000327522 00000 n 0000327586 00000 n 0000327653 00000 n 0000327720 00000 n 0000327787 00000 n 0000327854 00000 n 0000327920 00000 n 0000327987 00000 n 0000328051 00000 n 0000328118 00000 n 0000328185 00000 n 0000328252 00000 n 0000328319 00000 n 0000328386 00000 n 0000328453 00000 n 0000328520 00000 n 0000328587 00000 n 0000328654 00000 n 0000328720 00000 n 0000328787 00000 n 0000328854 00000 n 0000328921 00000 n 0000328988 00000 n 0000329054 00000 n 0000329121 00000 n 0000329188 00000 n 0000329255 00000 n 0000329322 00000 n 0000329389 00000 n 0000329425 00000 n 0000164439 00000 n 0000329513 00000 n 0000117338 00000 n 0000119161 00000 n 0000329581 00000 n 0000329648 00000 n 0000329715 00000 n 0000329782 00000 n 0000329848 00000 n 0000329915 00000 n 0000329982 00000 n 0000330049 00000 n 0000330114 00000 n 0000330177 00000 n 0000330241 00000 n 0000330308 00000 n 0000330372 00000 n 0000330439 00000 n 0000330505 00000 n 0000330572 00000 n 0000330639 00000 n 0000330703 00000 n 0000330770 00000 n 0000330837 00000 n 0000330904 00000 n 0000330970 00000 n 0000331037 00000 n 0000331104 00000 n 0000331171 00000 n 0000331237 00000 n 0000331304 00000 n 0000331371 00000 n 0000331438 00000 n 0000331505 00000 n 0000331571 00000 n 0000331638 00000 n 0000331705 00000 n 0000331772 00000 n 0000331838 00000 n 0000331902 00000 n 0000331969 00000 n 0000332036 00000 n 0000332103 00000 n 0000332170 00000 n 0000332237 00000 n 0000332304 00000 n 0000332340 00000 n 0000164609 00000 n 0000332428 00000 n 0000119184 00000 n 0000121081 00000 n 0000332496 00000 n 0000332563 00000 n 0000332630 00000 n 0000332694 00000 n 0000332761 00000 n 0000332825 00000 n 0000332891 00000 n 0000332957 00000 n 0000333021 00000 n 0000333088 00000 n 0000333155 00000 n 0000333222 00000 n 0000333289 00000 n 0000333356 00000 n 0000333423 00000 n 0000333490 00000 n 0000333557 00000 n 0000333624 00000 n 0000333688 00000 n 0000333755 00000 n 0000333822 00000 n 0000333889 00000 n 0000333955 00000 n 0000334022 00000 n 0000334089 00000 n 0000334156 00000 n 0000334223 00000 n 0000334290 00000 n 0000334357 00000 n 0000334424 00000 n 0000334491 00000 n 0000334558 00000 n 0000334625 00000 n 0000334692 00000 n 0000334759 00000 n 0000334825 00000 n 0000334892 00000 n 0000334959 00000 n 0000335026 00000 n 0000335093 00000 n 0000335157 00000 n 0000335224 00000 n 0000335260 00000 n 0000164779 00000 n 0000335348 00000 n 0000121104 00000 n 0000122445 00000 n 0000335416 00000 n 0000335483 00000 n 0000335550 00000 n 0000335617 00000 n 0000335681 00000 n 0000335747 00000 n 0000335814 00000 n 0000335881 00000 n 0000335948 00000 n 0000336014 00000 n 0000336081 00000 n 0000336148 00000 n 0000336215 00000 n 0000336282 00000 n 0000336349 00000 n 0000336416 00000 n 0000336483 00000 n 0000336546 00000 n 0000336613 00000 n 0000336680 00000 n 0000336747 00000 n 0000336814 00000 n 0000336881 00000 n 0000336948 00000 n 0000337015 00000 n 0000337082 00000 n 0000337149 00000 n 0000337214 00000 n 0000337281 00000 n 0000337345 00000 n 0000337412 00000 n 0000337479 00000 n 0000337546 00000 n 0000337613 00000 n 0000337677 00000 n 0000337744 00000 n 0000337811 00000 n 0000337878 00000 n 0000337914 00000 n 0000164949 00000 n 0000338002 00000 n 0000338070 00000 n 0000122468 00000 n 0000124114 00000 n 0000338137 00000 n 0000338204 00000 n 0000338271 00000 n 0000338338 00000 n 0000338405 00000 n 0000338472 00000 n 0000338539 00000 n 0000338606 00000 n 0000338673 00000 n 0000338740 00000 n 0000338806 00000 n 0000338873 00000 n 0000338940 00000 n 0000339007 00000 n 0000339074 00000 n 0000339141 00000 n 0000339208 00000 n 0000339275 00000 n 0000339342 00000 n 0000339409 00000 n 0000339476 00000 n 0000339543 00000 n 0000339610 00000 n 0000339677 00000 n 0000339744 00000 n 0000339811 00000 n 0000339878 00000 n 0000339945 00000 n 0000340012 00000 n 0000340079 00000 n 0000340145 00000 n 0000340212 00000 n 0000340279 00000 n 0000340343 00000 n 0000340409 00000 n 0000340475 00000 n 0000340541 00000 n 0000340608 00000 n 0000340675 00000 n 0000340742 00000 n 0000340809 00000 n 0000340876 00000 n 0000340943 00000 n 0000340979 00000 n 0000165119 00000 n 0000341080 00000 n 0000124137 00000 n 0000125847 00000 n 0000341148 00000 n 0000341215 00000 n 0000341279 00000 n 0000341343 00000 n 0000341410 00000 n 0000341476 00000 n 0000341542 00000 n 0000341609 00000 n 0000341676 00000 n 0000341743 00000 n 0000341810 00000 n 0000341877 00000 n 0000341944 00000 n 0000342011 00000 n 0000342078 00000 n 0000342145 00000 n 0000342212 00000 n 0000342279 00000 n 0000342346 00000 n 0000342413 00000 n 0000342480 00000 n 0000342547 00000 n 0000342614 00000 n 0000342681 00000 n 0000342748 00000 n 0000342815 00000 n 0000342882 00000 n 0000342949 00000 n 0000343016 00000 n 0000343083 00000 n 0000343150 00000 n 0000343217 00000 n 0000343278 00000 n 0000343345 00000 n 0000343412 00000 n 0000343479 00000 n 0000343546 00000 n 0000343613 00000 n 0000343680 00000 n 0000343747 00000 n 0000343814 00000 n 0000343880 00000 n 0000343916 00000 n 0000165289 00000 n 0000344017 00000 n 0000344085 00000 n 0000125870 00000 n 0000128518 00000 n 0000344152 00000 n 0000344219 00000 n 0000344283 00000 n 0000344347 00000 n 0000344414 00000 n 0000344480 00000 n 0000344547 00000 n 0000344614 00000 n 0000344677 00000 n 0000344743 00000 n 0000344810 00000 n 0000344877 00000 n 0000344944 00000 n 0000345011 00000 n 0000345078 00000 n 0000345145 00000 n 0000345212 00000 n 0000345279 00000 n 0000345346 00000 n 0000345413 00000 n 0000345480 00000 n 0000345544 00000 n 0000345611 00000 n 0000345678 00000 n 0000345745 00000 n 0000345812 00000 n 0000345879 00000 n 0000345945 00000 n 0000346010 00000 n 0000346074 00000 n 0000346141 00000 n 0000346208 00000 n 0000346274 00000 n 0000346341 00000 n 0000346408 00000 n 0000346475 00000 n 0000346542 00000 n 0000346609 00000 n 0000346676 00000 n 0000346743 00000 n 0000346810 00000 n 0000346876 00000 n 0000346943 00000 n 0000347008 00000 n 0000347075 00000 n 0000347142 00000 n 0000347209 00000 n 0000347276 00000 n 0000347312 00000 n 0000165459 00000 n 0000347413 00000 n 0000128541 00000 n 0000131617 00000 n 0000347481 00000 n 0000347548 00000 n 0000347615 00000 n 0000347681 00000 n 0000347748 00000 n 0000347815 00000 n 0000347882 00000 n 0000347949 00000 n 0000348016 00000 n 0000348083 00000 n 0000348150 00000 n 0000348214 00000 n 0000348278 00000 n 0000348345 00000 n 0000348412 00000 n 0000348479 00000 n 0000348546 00000 n 0000348613 00000 n 0000348680 00000 n 0000348743 00000 n 0000348810 00000 n 0000348873 00000 n 0000348939 00000 n 0000349005 00000 n 0000349068 00000 n 0000349131 00000 n 0000349198 00000 n 0000349265 00000 n 0000349332 00000 n 0000349398 00000 n 0000349465 00000 n 0000349532 00000 n 0000349599 00000 n 0000349666 00000 n 0000349733 00000 n 0000349797 00000 n 0000349864 00000 n 0000349931 00000 n 0000349998 00000 n 0000350065 00000 n 0000350132 00000 n 0000350199 00000 n 0000350266 00000 n 0000350333 00000 n 0000350399 00000 n 0000350466 00000 n 0000350533 00000 n 0000350600 00000 n 0000350667 00000 n 0000350734 00000 n 0000350801 00000 n 0000350868 00000 n 0000350934 00000 n 0000351001 00000 n 0000351068 00000 n 0000351134 00000 n 0000351201 00000 n 0000351268 00000 n 0000351304 00000 n 0000165629 00000 n 0000351392 00000 n 0000351460 00000 n 0000131640 00000 n 0000134884 00000 n 0000351527 00000 n 0000351594 00000 n 0000351661 00000 n 0000351728 00000 n 0000351794 00000 n 0000351861 00000 n 0000351928 00000 n 0000351994 00000 n 0000352059 00000 n 0000352126 00000 n 0000352190 00000 n 0000352257 00000 n 0000352321 00000 n 0000352388 00000 n 0000352455 00000 n 0000352519 00000 n 0000352586 00000 n 0000352648 00000 n 0000352715 00000 n 0000352779 00000 n 0000352846 00000 n 0000352913 00000 n 0000352980 00000 n 0000353047 00000 n 0000353114 00000 n 0000353181 00000 n 0000353247 00000 n 0000353314 00000 n 0000353381 00000 n 0000353448 00000 n 0000353512 00000 n 0000353579 00000 n 0000353645 00000 n 0000353710 00000 n 0000353777 00000 n 0000353841 00000 n 0000353908 00000 n 0000353975 00000 n 0000354039 00000 n 0000354106 00000 n 0000354172 00000 n 0000354239 00000 n 0000354305 00000 n 0000354372 00000 n 0000354439 00000 n 0000354506 00000 n 0000354573 00000 n 0000354640 00000 n 0000354707 00000 n 0000354774 00000 n 0000354841 00000 n 0000354908 00000 n 0000354975 00000 n 0000355042 00000 n 0000355109 00000 n 0000355176 00000 n 0000355243 00000 n 0000355310 00000 n 0000355377 00000 n 0000355444 00000 n 0000355510 00000 n 0000355546 00000 n 0000165799 00000 n 0000355634 00000 n 0000355702 00000 n 0000134907 00000 n 0000137640 00000 n 0000355769 00000 n 0000355836 00000 n 0000355903 00000 n 0000355970 00000 n 0000356037 00000 n 0000356104 00000 n 0000356171 00000 n 0000356235 00000 n 0000356302 00000 n 0000356369 00000 n 0000356436 00000 n 0000356503 00000 n 0000356567 00000 n 0000356631 00000 n 0000356698 00000 n 0000356765 00000 n 0000356832 00000 n 0000356899 00000 n 0000356966 00000 n 0000357033 00000 n 0000357097 00000 n 0000357160 00000 n 0000357226 00000 n 0000357292 00000 n 0000357359 00000 n 0000357426 00000 n 0000357493 00000 n 0000357559 00000 n 0000357625 00000 n 0000357689 00000 n 0000357753 00000 n 0000357820 00000 n 0000357887 00000 n 0000357954 00000 n 0000358021 00000 n 0000358088 00000 n 0000358155 00000 n 0000358222 00000 n 0000358289 00000 n 0000358356 00000 n 0000358423 00000 n 0000358486 00000 n 0000358552 00000 n 0000358614 00000 n 0000358681 00000 n 0000358748 00000 n 0000358815 00000 n 0000358882 00000 n 0000358949 00000 n 0000359016 00000 n 0000359083 00000 n 0000359149 00000 n 0000359216 00000 n 0000359283 00000 n 0000359350 00000 n 0000359417 00000 n 0000359484 00000 n 0000359520 00000 n 0000165969 00000 n 0000359608 00000 n 0000359676 00000 n 0000137663 00000 n 0000140713 00000 n 0000359743 00000 n 0000359810 00000 n 0000359875 00000 n 0000359941 00000 n 0000360007 00000 n 0000360074 00000 n 0000360141 00000 n 0000360206 00000 n 0000360273 00000 n 0000360340 00000 n 0000360406 00000 n 0000360473 00000 n 0000360539 00000 n 0000360606 00000 n 0000360673 00000 n 0000360740 00000 n 0000360806 00000 n 0000360873 00000 n 0000360940 00000 n 0000361007 00000 n 0000361074 00000 n 0000361140 00000 n 0000361207 00000 n 0000361274 00000 n 0000361341 00000 n 0000361408 00000 n 0000361475 00000 n 0000361541 00000 n 0000361608 00000 n 0000361675 00000 n 0000361742 00000 n 0000361806 00000 n 0000361873 00000 n 0000361940 00000 n 0000362007 00000 n 0000362071 00000 n 0000362138 00000 n 0000362205 00000 n 0000362272 00000 n 0000362338 00000 n 0000362405 00000 n 0000362472 00000 n 0000362538 00000 n 0000362605 00000 n 0000362672 00000 n 0000362739 00000 n 0000362806 00000 n 0000362873 00000 n 0000362940 00000 n 0000363007 00000 n 0000363074 00000 n 0000363140 00000 n 0000363176 00000 n 0000166139 00000 n 0000363251 00000 n 0000140736 00000 n 0000143833 00000 n 0000363319 00000 n 0000363386 00000 n 0000363453 00000 n 0000363520 00000 n 0000363586 00000 n 0000363649 00000 n 0000363716 00000 n 0000363783 00000 n 0000363849 00000 n 0000363915 00000 n 0000363982 00000 n 0000364049 00000 n 0000364116 00000 n 0000364182 00000 n 0000364248 00000 n 0000364315 00000 n 0000364382 00000 n 0000364449 00000 n 0000364516 00000 n 0000364583 00000 n 0000364650 00000 n 0000364716 00000 n 0000364780 00000 n 0000364844 00000 n 0000364911 00000 n 0000364974 00000 n 0000365041 00000 n 0000365108 00000 n 0000365175 00000 n 0000365242 00000 n 0000365309 00000 n 0000365376 00000 n 0000365442 00000 n 0000365507 00000 n 0000365574 00000 n 0000365641 00000 n 0000365708 00000 n 0000365774 00000 n 0000365841 00000 n 0000365906 00000 n 0000365973 00000 n 0000366040 00000 n 0000366107 00000 n 0000366173 00000 n 0000366240 00000 n 0000366307 00000 n 0000366374 00000 n 0000366441 00000 n 0000366508 00000 n 0000366575 00000 n 0000366642 00000 n 0000366708 00000 n 0000366775 00000 n 0000366842 00000 n 0000366909 00000 n 0000366976 00000 n 0000367043 00000 n 0000367110 00000 n 0000367177 00000 n 0000367244 00000 n 0000367311 00000 n 0000367378 00000 n 0000367414 00000 n 0000166309 00000 n 0000367502 00000 n 0000143856 00000 n 0000146840 00000 n 0000367570 00000 n 0000367637 00000 n 0000367704 00000 n 0000367770 00000 n 0000367837 00000 n 0000367904 00000 n 0000367971 00000 n 0000368036 00000 n 0000368103 00000 n 0000368170 00000 n 0000368237 00000 n 0000368304 00000 n 0000368370 00000 n 0000368437 00000 n 0000368504 00000 n 0000368571 00000 n 0000368638 00000 n 0000368704 00000 n 0000368771 00000 n 0000368838 00000 n 0000368905 00000 n 0000368971 00000 n 0000369038 00000 n 0000369105 00000 n 0000369172 00000 n 0000369239 00000 n 0000369303 00000 n 0000369368 00000 n 0000369435 00000 n 0000369502 00000 n 0000369569 00000 n 0000369636 00000 n 0000369703 00000 n 0000369770 00000 n 0000369836 00000 n 0000369901 00000 n 0000369967 00000 n 0000370033 00000 n 0000370099 00000 n 0000370165 00000 n 0000370232 00000 n 0000370295 00000 n 0000370362 00000 n 0000370426 00000 n 0000370493 00000 n 0000370560 00000 n 0000370627 00000 n 0000370694 00000 n 0000370761 00000 n 0000370828 00000 n 0000370864 00000 n 0000166479 00000 n 0000370965 00000 n 0000146863 00000 n 0000148970 00000 n 0000371033 00000 n 0000371097 00000 n 0000371160 00000 n 0000371223 00000 n 0000371287 00000 n 0000371354 00000 n 0000371420 00000 n 0000371486 00000 n 0000371552 00000 n 0000371618 00000 n 0000371685 00000 n 0000371752 00000 n 0000371819 00000 n 0000371886 00000 n 0000371953 00000 n 0000372020 00000 n 0000372087 00000 n 0000372153 00000 n 0000372220 00000 n 0000372286 00000 n 0000372352 00000 n 0000372419 00000 n 0000372486 00000 n 0000372552 00000 n 0000372618 00000 n 0000372685 00000 n 0000372752 00000 n 0000372816 00000 n 0000372883 00000 n 0000372950 00000 n 0000373017 00000 n 0000373084 00000 n 0000373151 00000 n 0000373218 00000 n 0000373285 00000 n 0000373352 00000 n 0000373419 00000 n 0000373486 00000 n 0000373553 00000 n 0000373589 00000 n 0000166649 00000 n 0000373690 00000 n 0000373758 00000 n 0000148993 00000 n 0000151877 00000 n 0000373825 00000 n 0000373892 00000 n 0000373959 00000 n 0000374026 00000 n 0000374089 00000 n 0000374156 00000 n 0000374223 00000 n 0000374290 00000 n 0000374355 00000 n 0000374422 00000 n 0000374488 00000 n 0000374555 00000 n 0000374622 00000 n 0000374689 00000 n 0000374756 00000 n 0000374823 00000 n 0000374890 00000 n 0000374957 00000 n 0000375023 00000 n 0000375090 00000 n 0000375157 00000 n 0000375224 00000 n 0000375291 00000 n 0000375355 00000 n 0000375421 00000 n 0000375488 00000 n 0000375555 00000 n 0000375622 00000 n 0000375689 00000 n 0000375755 00000 n 0000375791 00000 n 0000166819 00000 n 0000375879 00000 n 0000151900 00000 n 0000155088 00000 n 0000375947 00000 n 0000376014 00000 n 0000376081 00000 n 0000376148 00000 n 0000376215 00000 n 0000376282 00000 n 0000376349 00000 n 0000376413 00000 n 0000376480 00000 n 0000376621 00000 n 0000376688 00000 n 0000376755 00000 n 0000379298 00000 n 0000405350 00000 n 0000376822 00000 n 0000376858 00000 n 0000167006 00000 n 0000376961 00000 n 0000155111 00000 n 0000156059 00000 n 0000377029 00000 n 0000377065 00000 n 0000380831 00000 n 0000385902 00000 n 0000392314 00000 n 0000401400 00000 n 0000405570 00000 n 0000406340 00000 n 0000410669 00000 n 0000378030 00000 n 0000378750 00000 n 0000380359 00000 n 0000462362 00000 n trailer << /Size 3132 /Root 1 0 R /Info 2 0 R /ID [<020A387A95A4622A209AC42CA75C2212><020A387A95A4622A209AC42CA75C2212>] >> startxref 464191 %%EOF pgtcl-2.8.0/doc/libpgtcl.sgml000066400000000000000000004214771420313073400160770ustar00rootroot00000000000000 %version; %filelist; --> ]> PostgreSQL Tcl Interface Documentation The PostgreSQL Global Development Group The Tcl Interface Group <application>pgtcl</application> - Tcl Binding Library libpgtcl pgtcl Tcl pgtcl is a Tcl package for client programs to interface with PostgreSQL servers. It makes most of the functionality of libpq available to Tcl scripts. Overview gives an overview over the commands available in pgtcl. These commands are described further on subsequent pages. <application>pgtcl</application> Commands Command Namespace Command Description pg_connect pg::connect open a connection to the server pg_dbinfo pg::dbinfo returns data about the connection pg_disconnect pg::disconnect close a connection to the server pg_conndefaults pg::conndefaults get connection options and their defaults pg_exec pg::sqlexec send a command to the server pg_exec_prepared pg::exec_prepared send a request to execute a prepared statement, with parameters pg_result pg::result get information about a command result pg_select pg::select loop over the result of a query pg_execute pg::execute send a query and optionally loop over the results pg_null_value_string pg::null_value_string set string to be returned for null values in query results pg_quote pg::quote escape a string for inclusion into SQL statements pg_escape_string pg::escape_string escape a binary string for inclusion into SQL statements pg_escape_bytea pg::escape_bytea escape a binary string for inclusion into SQL statements pg_unescape_bytea pg::unescape_bytea unescape a binary string from the backend pg_listen pg::listen set or change a callback for asynchronous notification messages pg_on_connection_loss pg::on_connection_loss set or change a callback for unexpected connection loss pg_sendquery pg::sendquery issue pg_exec-style command asynchronously pg_sendquery_prepared pg::sendquery_prepared send an asynchronous request to execute a prepared statement, with parameters pg_getresult pg::getresult check on results from asynchronously issued commands pg_isbusy pg::isbusy check to see if the connection is busy processing a query pg_blocking pg::blocking set a database connection to be either blocking or nonblocking pg_cancelrequest pg::cancelrequest request PostgreSQL abandon processing of the current command pg_lo_creat pg::lo_creat create a large object pg_lo_open pg::lo_open open a large object pg_lo_close pg::lo_close close a large object pg_lo_read pg::lo_read read from a large object pg_lo_write pg::lo_write write to a large object pg_lo_lseek pg::lo_lseek seek to a position in a large object pg_lo_tell pg::lo_tell return the current seek position of a large object pg_lo_truncate pg::lo_truncate Truncate (or pad) a large object to a specified length pg_lo_unlink pg::lo_unlink delete a large object pg_lo_import pg::lo_import import a large object from a file pg_lo_export pg::lo_export export a large object to a file pg_sqlite pg::sqlite bridge between pgtcl and the Tcl sqlite package (when compiled with sqlite bridge) pg_copy_complete pg::copy_complete Complete COPY FROM stdin operation after finished writing
The pg_lo_* commands are interfaces to the large object features of PostgreSQL.large objectin pgctl The functions are designed to mimic the analogous file system functions in the standard Unix file system interface. The pg_lo_* commands should be used within a BEGIN/COMMIT transaction block because the descriptor returned by pg_lo_open is only valid for the current transaction. pg_lo_import and pg_lo_export must be used in a BEGIN/COMMIT transaction block. The pg_sqlite command is only included if Sqlite 3 is installed. It can be disabled at compile time with "./configure --without-sqlite3". <application>pgtcl</application> C API Function Description PGconn *PgGetConnectionId(interp, id, connid) Given a Tcl handle to an open Pgtcl connection, return the underlying libpq connection
Loading <application>pgtcl</application> into an Application Before using pgtcl commands, you must load the libpgtcl library into your Tcl application. This is normally done with the package require command. Here is an example: package require Pgtcl 1.5 package require loads the libpgtcl shared library, and loads any additional Tcl code that is part of the Pgtcl package. Note that you can manually generate the pkgIndex.tcl file, or use make pkgIndex.tcl or make pkgIndex.tcl-hand to have make generate it. The old way to load the shared library is by using the Tcl load command. Here is an example: load libpgtcl[info sharedlibextension] Although this way of loading the shared library is deprecated, we continue to document it for the time being, because it may help in debugging if, for some reason, package require is failing. The use of info sharedlibextension is recommended in preference to hard-wiring .so or .sl or .dll into the program. The load command will fail unless the system's dynamic loader knows where to look for the libpgtcl shared library file. You may need to work with ldconfig, or set the environment variable LD_LIBRARY_PATH, or use some equivalent facility for your platform to make it work. Refer to the PostgreSQL installation instructions for more information. libpgtcl in turn depends on the interface library libpq, so the dynamic loader must also be able to find the libpq shared library. In practice this is seldom an issue, since both of these shared libraries are normally stored in the same directory, but it can be a stumbling block in some configurations. If you use a custom executable for your application, you might choose to statically bind libpgtcl into the executable and thereby avoid the load command and the potential problems of dynamic linking. See the source code for pgtclsh for an example. If you want to use the pg_sqlite bridge, you must still explicitly "package require sqlite3" before executing any sqlite3 commands. <application>pgtcl</application> Command Reference pg_connect pg_connect open a connection to the server pg_connect pg_connect -conninfo connectOptions -connhandle connectionHandleName -async bool pg_connect dbName -host hostName -port portNumber -tty tty -options serverOptions -connhandle connectionHandleName -async bool pg_connect -connlist connectNameValueList -connhandle connectionHandleName -async bool Description pg_connect opens a connection to the PostgreSQL server. Three syntaxes are available. In the older one, each possible option has a separate option switch in the pg_connect command. In the newer form, a single option string is supplied that can contain multiple option values. The third form takes the parameters as a name value Tcl list. pg_conndefaults can be used to retrieve information about the available options in the newer syntax. Arguments New style connectOptions pg_connect opens a new database connection using the parameters taken from the connectOptions string. Unlike the old-style usage of pg_connect, with the new-style usage the parameter set can be extended without requiring changes to either libpgtcl or the underlying libpq library, so use of the new style (or its nonexistent nonblocking analogues pg_connect_start and pg_connect_poll) is preferred for new application programming. The passed string can be empty to use all default parameters, or it can contain one or more parameter settings separated by whitespace. Each parameter setting is in the form keyword = value. (To write an empty value or a value containing spaces, surround it with single quotes, e.g., keyword = 'a value'. Single quotes and backslashes within the value must be escaped with a backslash, i.e., \' and \\.) Spaces around the equal sign are optional. The currently recognized parameter key words are: host Name of host to connect to.host name 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 is to connect to a Unix-domain socket in /tmp.Unix domain socket hostaddr Numeric IP address of host to connect to. This should be in the standard IPv4 address format, e.g., 172.28.40.9. If your machine supports IPv6, you can also use IPv6 address format, e.g., fe80::203:93ff:fedb:49bc. TCP/IP communication is always used when a nonempty string is specified for this parameter. Using hostaddr instead of host allows the application to avoid a host name lookup, which may be important in applications with time constraints. However, Kerberos authentication requires the host name. The following therefore applies: If host is specified without hostaddr, a host name lookup occurs. If hostaddr is specified without host, the value for hostaddr gives the remote address. When Kerberos is used, a reverse name query occurs to obtain the host name for Kerberos. If both host and hostaddr are specified, the value for hostaddr gives the remote address; the value for host is ignored, unless Kerberos is used, in which case that value is used for Kerberos authentication. (Note that authentication is likely to fail if libpq is passed a host name that is not the name of the machine at hostaddr.) Also, host rather than hostaddr is used to identify the connection in $HOME/.pgpass. Without either a host name or host address, Pgtcl will connect using a local Unix domain socket. port Port number to connect to at the server host, or socket file name extension for Unix-domain connections.port dbname The database name. Defaults to be the same as the user name. user PostgreSQL user name to connect as. password Password to be used if the server demands password authentication. connect_timeout Maximum wait for connection, in seconds (write as a decimal integer string). Zero or not specified means wait indefinitely. It is not recommended to use a timeout of less than 2 seconds. options Command-line options to be sent to the server. tty Ignored (formerly, this specified where to send server debug output). sslmode This option determines whether or with what priority an SSL connection will be negotiated with the server. There are four modes: disable will attempt only an unencrypted SSL connection; allow will negotiate, trying first a non-SSL connection, then if that fails, trying an SSL connection; prefer (the default) will negotiate, trying first an SSL connection, then if that fails, trying a regular non-SSL connection; require will try only an SSL connection. If PostgreSQL is compiled without SSL support, using option require will cause an error, and options allow and prefer will be tolerated but libpq will be unable to negotiate an SSL connection.SSLwith libpq requiressl This option is deprecated in favor of the sslmode setting. If set to 1, an SSL connection to the server is required (this is equivalent to sslmode require). libpq will then refuse to connect if the server does not accept an SSL connection. If set to 0 (default), libpq will negotiate the connection type with the server (equivalent to sslmode prefer). This option is only available if PostgreSQL is compiled with SSL support. service Service name to use for additional parameters. It specifies a service name in pg_service.conf that holds additional connection parameters. This allows applications to specify only a service name so connection parameters can be centrally maintained. See PREFIX/share/pg_service.conf.sample for information on how to set up the file. Name to use for the connection handle, instead of pgtcl generating the name automatically. Without the option, the name is auto-generated, prefixed with pgsql, and with a numeric id at the end. This gives the programmer control over the name of the connection handle. Connect asyncronously if bool is true. If any parameter is unspecified, then the corresponding environment variable (see libpq documentation in the PostgreSQL manual) is checked. If the environment variable is not set either, then built-in defaults are used. Old style dbName The name of the database to connect to. The host name of the database server to connect to. The TCP port number of the database server to connect to. A file or TTY for optional debug output from the server. Additional configuration options to pass to the server. Name to use for the connection handle, instead of pgtcl generating the name automatically. Without the option, the name is auto-generated, prefixed with pgsql, and with a numeric id at the end. This gives the programmer control over the name of the connection handle. Connect asyncronously if bool is true. Third style (most recent one added) -connlist connectNameValuelist pg_connect opens a new database connection using the parameters taken from the connectNameValuelist list. The parameters are exactly the same for the New Style, but they are stored as a Tcl list, instead of a string. The list is a name value pair, for example: [list host localhost port 5400 dbname template1]. array set conninfo { host 192.168.123.180 port 5801 dbname template1 user postgres } set conn [pg::connect -connlist [array get ::conninfo]] Connect asyncronously if bool is true. Name to use for the connection handle, instead of pgtcl generating the name automatically. Without the option, the name is auto-generated, prefixed with pgsql, and with a numeric id at the end. This gives the programmer control over the name of the connection handle. Return Value If successful, a handle for a database connection is returned. Handles start with the prefix pgsql. pg_dbinfo pg_dbinfo returns data about the connection pg_dbinfo pg_dbinfo command ?conn? ?paramname? Description pg_dbinfo returns data about the connection. The first argument is a command, and the second and third argument depend on the command chosen. Arguments command connections Return a list of connection handles. results connHandle Return a list of result handles for the named connection. version connHandle Return server version for the connection. protocol connHandle Return protocol version for the connection. param connHandle name Return connection's value for the named parameter. backendpid connHandle Return server process ID for the connection. socket connHandle Return socket file handle for the connection. sql_count connHandle Return number of SQL queries that have been made for the connection. dbname connHandle Return name of the connected database. user connHandle Return logged in user name. password connHandle Return logged in user's password. host connHandle Return address of the connected host. port connHandle Return host port for the connection. options connHandle Return command line options passed in the connection request. status connHandle Return connection status. transaction_status connHandle Return transaction status. error_message connHandle Return the most recent error message on the connection. needs_password connHandle Return true if the connection required a password but none was available. This function can be applied after a failed connection attempt to decide whether to prompt the user for a password. used_password connHandle Return true if the connection used a password. This function can be applied after either a failed or successful connection attempt to detect whether the server demanded a password. used_ssl connHandle Return true if the connection uses SSL. conn The handle of the connection, when required. param The connection parameter name, when the command "param" is provided. Return Value A Tcl list of connection handle names pg_disconnect pg_disconnect close a connection to the server pg_disconnect pg_disconnect conn Description pg_disconnect closes a connection to the PostgreSQL server. Arguments conn The handle of the connection to be closed. Return Value None pg_conndefaults pg_conndefaults get connection options and their defaults pg_conndefaults pg_conndefaults Description pg_conndefaults returns information about the connection options available in pg_connect -conninfo and the current default value for each option. Arguments None Return Value The result is a list describing the possible connection options and their current default values. Each entry in the list is a sublist of the format: {optname label dispchar dispsize value} where the optname is usable as an option in pg_connect -conninfo. pg_exec pg_exec send a command to the server pg_exec pg_exec -paramarray arrayVar -variables conn commandString args Description pg_exec submits a command to the PostgreSQL server and returns a result. Command result handles start with the connection handle and add a period and a result number. Note that lack of a Tcl error is not proof that the command succeeded! An error message returned by the server will be processed as a command result with failure status, not by generating a Tcl error in pg_exec. Check for {[pg_result $result -status] == PGRES_COMMAND_OK}. If the -paramarray flag is provided, then a substitution is performed on the query, securely replacing each back-quote delimited name with the corresponding entry from the named array. If the array does not contain the named element, then NULL is substituted (similarly to the way an array created by -withoutnulls is generated). Each such name must occur in a location where a value or field name could appear. See pg_select for more info. If the -variables flag is provided, then embedded Tcl variables are passed as parameters. Variables can be flagged with ':' and array references and namespaces are supported. Complex variable names can usually be embedded with :{nasty-name-here} though no attempt at duplicating Tcl brace-escaping is made. If the variable does not exist, then NULL is substituted. Arguments -paramarray arrayname Perform parameter substitution via `quoted` elements of the array using PQexecParams or PQSendQueryParams. -variables Substitute Tcl variables found in the SQL string using PQexecParams or PQSendQueryParams. conn The handle of the connection on which to execute the command. commandString The SQL command to execute. args For PostgreSQL versions greater than 7.4, args consists of zero or more optional values that can be inserted, unquoted, into the SQL statement using $-style substitution. Nulls are represented by the string "NULL". Return Value A result handle. A Tcl error will be returned if pgtcl was unable to obtain a server response. Otherwise, a command result object is created and a handle for it is returned. This handle can be passed to pg_result to obtain the results of the command. Example pg_exec $conn {select * from table1 where id = $1 and user = $2} $id $user pg_exec_prepared pg_exec_prepared send a request to execute a prepared SQL statement to the server pg_exec_prepared pg_exec_prepared conn statementName args Description pg_exec_prepared submits a command to the PostgreSQL server and returns a result. pg_exec_prepared functions identically to pg_exec, except that it operates using statements prepared by the PREPARE SQL command. Note that prepared statements are only support under PostgreSQL 7.4 and later. Arguments conn The handle of the connection on which to execute the command. statementName The name of the prepared statement to execute. args args consists of zero or more optional values that can be inserted, unquoted, into the SQL statement using $-style substitution. Return Value A result handle. See pg_exec for details. Example pg_exec $conn {prepare insert_people (varchar, varchar, varchar, varchar, varchar, varchar) as insert into people values ($1, $2, $3, $4, $5, $6);} pg_exec_prepared $conn insert_people $email $name $address $city $state $zip pg_result pg_result get information about a command result pg_result pg_result resultHandle resultOption Description pg_result returns information about a command result created by a prior pg_exec. You can keep a command result around for as long as you need it, but when you are done with it, be sure to free it by executing pg_result -clear. Otherwise, you have a memory leak, and pgtcl will eventually start complaining that you have created too many command result objects. Arguments resultHandle The handle of the command result. resultOption One of the following options, specifying which piece of result information to return: The status of the result. diagCode The error message, if the status indicates an error, otherwise an empty string. diagCode, if specified, requests data for a specific diagnostic code: The severity; the field contents are ERROR, FATAL, or PANIC, in an error message, or WARNING, NOTICE, DEBUG, INFO, or LOG, in a notice message, or a localized translation of one of these. The SQLSTATE code for the error. (See PostgreSQL manual Appendix A). The primary human-readable error message (typically one line). An optional secondary error message carrying more detail abhout the problem, which may run to multiple lines. An optional suggestion about what to do about the problem. This is intended to differ from detail in that it offers advice (potentially inappropriate) rather than hard facts. The result may run to multiple lines. A string containing a decimal integer indicating an error cursor position as an index into the original statement string. The first character has index 1, and positions are measured in characters not bytes. This is the same as "position", but it is used when the cursor position refers to an internally generated command rather than the one submitted by the client. The first character has index 1, and positions are measured in characters not bytes. This is the text of a failed internally generated command. This could be, for example, a SQL query issued by a PL/pgSQL function. An indication of the context in which the error occurred. Presently this includes a call stack traceback of active PL functions. The trace is one entry per line, most recent first. The filename of the source code location where the error was reported. The line number of the source code location where the error was reported. The name of the source code function reporting the error. Iterates through each row of the result, filling arrayName with the columns and their values and executing tclCode for each row in turn. Null columns will be not be present in the array. The connection that produced the result. If the command was an INSERT, the OID of the inserted row, otherwise 0. The number of rows (tuples) returned by the query. The number of rows (tuples) affected by the command. (This is similar to but relevant to INSERT and UPDATE commands.) The number of columns (attributes) in each row. Assign the results to an array, using subscripts of the form (rowNumber, columnName). For each resulting row assigns the results to the named array, using subscripts matching the column names, then executes the code body. Assign the results to an array using the values of the first column and the names of the remaining column as keys. If appendstr is given then it is appended to each key. In short, all but the first column of each row are stored into the array, using subscripts of the form (firstColumnValue, columnNameAppendStr). Returns the columns of the indicated row in a list. Row numbers start at zero. Stores the columns of the row in array arrayName, indexed by column names. Row numbers start at zero. If a field's value is null, sets an empty string or the default string, if a default string has been defined. Stores the columns of the row in array arrayName, indexed by column names. Row numbers start at zero. If a field's value is null, unsets the column from the array. Returns a list of the names of the columns in the result. Returns a list of sublists, {name typeOid typeSize} for each column. Returns one list containing all the data returned by the query. Returns a list of lists, where each embedded list represents a tuple in the result. Returns a dict object with the results. This needs to have dictionary support built into Tcl (Tcl 8.5), and is experimental right now, since Tcl 8.5 has not been release yet, and the API could change. In order to enable this, you need to add -DHAVE_TCL_NEWDICTOBJ to the Makefile in the DEFS variable. Defines or retrieves the string that will be returned for null values in query results. Defaults to whatever was set by pg_null_value_string but can be set here and, in this case, affects only this query result. Clear the command result object. Return Value The result depends on the selected option, as described above. pg_select pg_select loop over the result of a query pg_select pg_select -rowbyrow -nodotfields -withoutnulls -paramarray var -variables -params paramList -count countVar conn commandString arrayVar procedure Description pg_select submits a query (SELECT statement) to the PostgreSQL server and executes a given chunk of code for each row in the result. The commandString must be a SELECT statement; anything else returns an error. The arrayVar variable is an array name used in the loop. For each row, arrayVar is filled in with the row values, using the column names as the array indices. Then the procedure is executed. In addition to the column values, the following special entries are made in the array (unless the -nodotfields flag is provided): .headers A list of the column names returned by the query. .numcols The number of columns returned by the query. .tupno The current row number, starting at zero and incrementing for each iteration of the loop body. If the -param flag is provided, then it contains a list of parameters that will replace "$1", "$2" and so on in the query string, as if it were a prepared statement. Be sure to properly escape or quote the "$" in the query. :) If the -paramarray flag is provided, then a substitution is performed on the query, securely replacing each back-quote delimited name with the corresponding entry from the named array. If the array does not contain the named element, then NULL is substituted (similarly to the way an array created by -withoutnulls is generated). Each such name must occur in a location where a value or field name could appear. If the -variables flag is provided, then embedded Tcl variables are passed as parameters. Variables can be flagged with ':' and array references and namespaces are supported. Complex variable names can usually be embedded with :{nasty-name-here} though no attempt at duplicating Tcl brace-escaping is made. If the variable does not exist, then NULL is substituted. Notes: This substitution is performed by generating a positional parameter list and calling PQExecParams with a modified query containing $1, $2, ... where the original `names` appeared. This is a straight substitution, so if this mechanism is used the back-quote character (`) can not appear elsewhere in the query, even in a quoted string. There are a maximum of 99,999 names. Arguments -params list Perform parameter substitution using PQexecParams or PQSendQueryParams. -paramarray arrayname Perform parameter substitution via `quoted` elements of the array using PQexecParams or PQSendQueryParams. -variables Substitute Tcl variables found in the SQL string using PQexecParams or PQSendQueryParams. -rowbyrow Perform the select in row-by-row mode. This means that the code block is called immediately results become available, rather than waiting for the query to complete. -nodotfields Suppress generation of the pseudo-fields .headers, .numcols, and .tupno. -withoutnulls If specified null columns will be unset from the array rather than being defined and containing the null string, typically an empty string. -count countVar Set the variable "countVar" to the number of tuples returned for use in the block. conn The handle of the connection on which to execute the query. commandString The SQL query to execute. arrayVar An array variable for returned rows. procedure The procedure to run for each returned row. Return Value Number of rows actually processed. Examples This examples assumes that the table table1 has columns control and name (and perhaps others): pg_select $pgconn "SELECT * FROM table1;" array { puts [format "%5d %s" $array(control) $array(name)] } This example demonstrates how to use named parameters to securely perform queries on an SQL database: # An array imported from some hive of scum and villainy like a web form. set form(first) {Andrew'); DROP TABLE students;--} set form(last) {Randall} # Secure extraction of data pg_select -paramarray form $pgconn "SELECT * from students WHERE firstname = `first` AND lastname = `last`;" row { lappend candidates $row(student_id) $row(firstname) $row(lastname) $row(age) } pg_execute pg_execute send a query and optionally loop over the results pg_execute pg_execute -array arrayVar -oid oidVar conn commandString procedure Description pg_execute submits a command to the PostgreSQL server. If the command is not a SELECT statement, the number of rows affected by the command is returned. If the command is an INSERT statement and a single row is inserted, the OID of the inserted row is stored in the variable oidVar if the optional -oid argument is supplied. If the command is a SELECT statement, then, for each row in the result, the row values are stored in the arrayVar variable, if supplied, using the column names as the array indices, else in variables named by the column names, and then the optional procedure is executed if supplied. (Omitting the procedure probably makes sense only if the query will return a single row.) The number of rows selected is returned. The procedure can use the Tcl commands break, continue, and return with the expected behavior. Note that if the procedure executes return, then pg_execute does not return the number of affected rows. pg_execute is a newer function which provides a superset of the features of pg_select and can replace pg_exec in many cases where access to the result handle is not needed. For server-handled errors, pg_execute will throw a Tcl error and return a two-element list. The first element is an error code, such as PGRES_FATAL_ERROR, and the second element is the server error text. For more serious errors, such as failure to communicate with the server, pg_execute will throw a Tcl error and return just the error message text. Arguments Specifies the name of an array variable where result rows are stored, indexed by the column names. This is ignored if commandString is not a SELECT statement. Specifies the name of a variable into which the OID from an INSERT statement will be stored. conn The handle of the connection on which to execute the command. commandString The SQL command to execute. procedure Optional procedure to execute for each result row of a SELECT statement. Return Value The number of rows affected or returned by the command. Examples In the following examples, error checking with catch has been omitted for clarity. Insert a row and save the OID in result_oid: pg_execute -oid result_oid $pgconn "INSERT INTO mytable VALUES (1);" Print the columns item and value from each row: pg_execute -array d $pgconn "SELECT item, value FROM mytable;" { puts "Item=$d(item) Value=$d(value)" } Find the maximum and minimum values and store them in $s(max) and $s(min): pg_execute -array s $pgconn "SELECT max(value) AS max, min(value) AS min FROM mytable;" Find the maximum and minimum values and store them in $max and $min: pg_execute $pgconn "SELECT max(value) AS max, min(value) AS min FROM mytable;" pg_listen pg_listen set or change a callback for asynchronous notification messages pg_listen pg_listen conn notifyName callbackCommand Description pg_listen creates, changes, or cancels a request to listen for asynchronous notification messages from the PostgreSQL server. With a callbackCommand parameter, the request is established, or the command string of an already existing request is replaced. With no callbackCommand parameter, a prior request is canceled. After a pg_listen request is established, the specified command string is executed whenever a notification message bearing the given name arrives from the server. This occurs when any PostgreSQL client application issues a NOTIFYNOTIFYin pgtcl command referencing that name. The command string is executed from the Tcl idle loop. That is the normal idle state of an application written with Tk. In non-Tk Tcl shells, you can execute update or vwait to cause the idle loop to be entered. You should not invoke the SQL statements LISTEN or UNLISTEN directly when using pg_listen. pgtcl takes care of issuing those statements for you. But if you want to send a notification message yourself, invoke the SQL NOTIFY statement using pg_exec. Arguments conn The handle of the connection on which to listen for notifications. notifyName The name of the notification condition to start or stop listening to. callbackCommand If present, provides the command string to execute when a matching notification arrives. Return Value None pg_on_connection_loss pg_on_connection_loss set or change a callback for unexpected connection loss pg_on_connection_loss pg_on_connection_loss conn callbackCommand Description pg_on_connection_loss creates, changes, or cancels a request to execute a callback command if an unexpected loss of connection to the database occurs. With a callbackCommand parameter, the request is established, or the command string of an already existing request is replaced. With no callbackCommand parameter, a prior request is canceled. The callback command string is executed from the Tcl idle loop. That is the normal idle state of an application written with Tk. In non-Tk Tcl shells, you can execute update or vwait to cause the idle loop to be entered. Arguments conn The handle to watch for connection losses. callbackCommand If present, provides the command string to execute when connection loss is detected. Return Value None pg_sendquery pg_sendquery send a query string to the backend connection without waiting for a result pg_sendquery pg_sendquery -paramarray -variables arrayVar conn commandString args Description pg_sendquery submits a command to the PostgreSQL server. This function works like pg_exec, except that it does not return a result. Rather, the command is issued to the backend asynchronously. The result is either an error message or nothing. An empty return indicates that the command was dispatched to the backend. If the -paramarray flag is provided, then a substitution is performed on the query, securely replacing each back-quote delimited name with the corresponding entry from the named array. If the array does not contain the named element, then NULL is substituted (similarly to the way an array created by -withoutnulls is generated). Each such name must occur in a location where a value or field name could appear. See pg_select for more info. If the -variables flag is provided, then embedded Tcl variables are passed as parameters. Variables can be flagged with ':' and array references and namespaces are supported. Complex variable names can usually be embedded with :{nasty-name-here} though no attempt at duplicating Tcl brace-escaping is made. If the variable does not exist, then NULL is substituted. Each such name must occur in a location where a value or field name could appear. See pg_select for more info. Arguments -paramarray arrayname Perform parameter substitution via `quoted` elements of the array using PQexecParams or PQSendQueryParams. -variables Substitute Tcl variables found in the SQL string using PQexecParams or PQSendQueryParams. conn The handle of the connection on which to execute the command. commandString The SQL command to execute. args For PostgreSQL versions greater than 7.4, args consists of zero or more optional values that can be inserted, unquoted, into the SQL statement using $-style substitution. Nulls are represented by the string "NULL". Return Value A Tcl error will be returned if pgtcl was unable to issue the command. Otherwise, an empty string will be return. It is up to the developer to use pg_getresult to obtain results from commands issued with pg_sendquery. pg_sendquery_prepared pg_sendquery_prepared send a request to execute a prepared statement to the backend connection, without waiting for a result pg_sendquery_prepared pg_sendquery_prepared conn statementName args Description pg_sendquery_prepared submits a command to the PostgreSQL server. This function works like pg_exec, except that it does not return a result. Rather, the command is issued to the backend asynchronously. The result is either an error message or nothing. An empty return indicates that the command was dispatched to the backend. Arguments conn The handle of the connection on which to execute the command. statementName The name of the prepared SQL statement to execute asynchronously. args args consists of zero or more optional values that can be inserted, unquoted, into the SQL statement using $-style substitution. Return Value A Tcl error will be returned if pgtcl was unable to issue the command. Otherwise, an empty string will be return. It is up to the developer to use pg_getresult to obtain results from commands issued with pg_sendquery. pg_getresult pg_getresult process asychronous results pg_getresult pg_getresult conn Description pg_getresult checks to see if any commands issued by pg_sendquery have completed. This will return the same sort of result handle that pg_exec returns. If there is no query currently being processed or all of the results have been obtained, pg_getresult returns nothing. Arguments conn The handle of a connection to the database to which asynchronous requests are being issued. Return Value If a query result is available, a command result object is returned. This handle can be passed to pg_result to obtain the results of the command. If there is no query currently being processed or all of the results have been obtained, pg_getresult returns nothing. pg_isbusy pg_isbusy see if a query is busy pg_isbusy pg_isbusy conn Description pg_isbusy checks to see if the backend is busy handling a query or not. Arguments conn The handle of a connection to the database in which the large object exists. Return Value Returns 1 if the backend is busy, in which case a call to pg_getresult would block, otherwise it returns 0. pg_blocking pg_blocking see or set whether or not a connection is set to blocking or nonblocking pg_blocking pg_blocking conn mode Description pg_blocking can set the connection to either blocking or nonblocking, and it can see which way the connection is currently set. Arguments conn The handle of a connection to the database in which the large object exists. mode If present, sets the mode of the connection to nonblocking if 0. Otherwise it sets the connection to blocking. Return Value Returns nothing if called with the mode argument. Otherwise it returns 1 if the connection is set for blocking, or 0 if the connection is set for nonblocking. pg_cancelrequest pg_cancelrequest request that PostgreSQL abandon processing of the current command pg_cancelrequest pg_cancelrequest conn Description pg_cancelrequest requests that the processing of the current command be abandoned. Arguments conn The handle of a connection to the database in which the large object exists. Return Value Returns nothing if the command was successfully dispatched or if no query was being processed. Otherwise, returns an error. pg_null_value_string pg_null_value_string define a value to be returned for NULL fields distinct from the default value of an empty string. pg_null_value_string pg_null_value_string string Description pg_null_value_string sets or retrieves a string to be returned in query results for fields whose value is NULL, making it possible to distinguish between NULL values an values that are not null but are comprised of an empty string. Without setting an alternative null value with this or with pg_result's -null_value_string, it is impossible to tell the difference between a NULL field value and one that is not null but empty. Arguments string The string to be set that will be returned for null fields. Return Value Returns the string that is currently being returned for null fields. It will be the passed string value if one was passed, or, otherwise, the value currently being used. pg_quote pg_quote escapes a string for inclusion into SQL statements pg_quote pg_quote -null connection string Description pg_quote quotes a string and escapes single quotes and backslashes within the string, making it safe for inclusion into SQL statements. If a connection is provided, the connection is used to customize the quoting process for the database referenced by the connection. If the -null option is provided, then if the text matches the null string (either the empty string, or the null string specified in the connection) then the SQL keyword NULL is returned, rather than a quoted string. If you're doing something like pg_exec $conn "insert into foo values ('$name');" and name contains text includeng an unescaped single quote, such as Bob's House, at best the insert will fail, and at worst your software will be exploited via an SQL injection attack. Passing value strings through pg_quote will properly quote them for insertion into SQL commands. pg_exec $conn "insert into foo values ([pg_quote $name]);" ...will make sure that any special characters that occur in name, such as single quote or backslash, will be properly quoted. Arguments string The string to be escaped. Return Value Returns the string, escaped for inclusion into SQL queries. Note that it adds a set of single quotes around the outside of the string as well. See Also In most cases, with recent versions of SQL, it is better to use the native parameter insertion capabilities of the SQL server and protocol. If you are using a version of PostgreSQL more recent then 7.4, consider the optional parameter arguments to pg_exec and pg_sendquery, and the paramarray option to pg_exec, pg_sendquery, and pg_select. pg_escape_string pg_escape_string escapes a string for inclusion into SQL statements. This is the same as pg_quote. It was added for consistency. pg_escape_string pg_escape_string string Description pg_escape_string quotes a string and escapes single quotes and backslashes within the string, making it safe for inclusion into SQL statements. If you're doing something like pg_exec $conn "insert into foo values ('$name');" and name contains text includeng an unescaped single quote, such as Bob's House, at best the insert will fail, and at worst your software will be exploited via an SQL injection attack. Passing value strings through pg_escape_string will properly quote them for insertion into SQL commands. pg_exec $conn "insert into foo values ([pg_escape_string $name]);" ...will make sure that any special characters that occur in name, such as single quote or backslash, will be properly quoted. Arguments string The string to be escaped. Return Value Returns the string, escaped for inclusion into SQL queries. Note that it adds a set of single quotes around the outside of the string as well. See Also In most cases, with recent versions of SQL, it is better to use the native parameter insertion capabilities of the SQL server and protocol. If you are using a version of PostgreSQL more recent then 7.4, consider the optional parameter arguments to pg_exec and pg_sendquery, and the paramarray option to pg_exec, pg_sendquery, and pg_select. pg_escape_bytea pg_escape_bytea escapes a binary string for inclusion into SQL statements. pg_escape_bytea pg_escape_bytea string Description pg_escape_bytea escapes a binary string, making it safe for inclusion into SQL statements. pg_exec $conn "insert into foo values ([pg_escape_binary $name]);" Arguments binary_string The binary string to be escaped. Return Value Returns the binary string, escaped for inclusion into SQL queries. pg_unescape_bytea pg_unescape_bytea unescapes a binary string. pg_unescape_bytea pg_unescape_bytea string Description pg_unescape_bytea unescapes a binary string, when retrieving from the backend. Arguments binary_string The string to be unescaped. Return Value Returns the binary string. pg_lo_creat pg_lo_creat create a large object pg_lo_creat pg_lo_creat conn mode Description pg_lo_creat creates a large object. Arguments conn The handle of a connection to the database in which to create the large object. mode The access mode for the large object. It can be any or'ing together of INV_READ and INV_WRITE. The or operator is |. For example: [pg_lo_creat $conn "INV_READ|INV_WRITE"] Return Value The OID of the large object created. pg_lo_open pg_lo_open open a large object pg_lo_open pg_lo_open conn loid mode Description pg_lo_open opens a large object. Arguments conn The handle of a connection to the database in which the large object exists. loid The OID of the large object. mode Specifies the access mode for the large object. Mode can be either r, w, or rw. Return Value A descriptor for use in later large-object commands. pg_lo_close pg_lo_close close a large object pg_lo_close pg_lo_close conn descriptor Description pg_lo_close closes a large object. Arguments conn The handle of a connection to the database in which the large object exists. descriptor A descriptor for the large object from pg_lo_open. Return Value None pg_lo_read pg_lo_read read from a large object pg_lo_read pg_lo_read conn descriptor bufVar len Description pg_lo_read reads at most len bytes from a large object into a variable named bufVar. Arguments conn The handle of a connection to the database in which the large object exists. descriptor A descriptor for the large object from pg_lo_open. bufVar The name of a buffer variable to contain the large object segment. len The maximum number of bytes to read. Return Value The number of bytes actually read is returned; this could be less than the number requested if the end of the large object is reached first. In event of an error, the return value is negative. pg_lo_write pg_lo_write write to a large object pg_lo_write pg_lo_write conn descriptor buf len Description pg_lo_write writes at most len bytes from a variable buf to a large object. Arguments conn The handle of a connection to the database in which the large object exists. descriptor A descriptor for the large object from pg_lo_open. buf The string to write to the large object (not a variable name, but the value itself). len The maximum number of bytes to write. The number written will be the smaller of this value and the length of the string. Return Value The number of bytes actually written is returned; this will ordinarily be the same as the number requested. In event of an error, the return value is negative. pg_lo_lseek pg_lo_lseek seek to a position of a large object pg_lo_lseek pg_lo_lseek conn descriptor offset whence Description pg_lo_lseek moves the current read/write position to offset bytes from the position specified by whence. Arguments conn The handle of a connection to the database in which the large object exists. descriptor A descriptor for the large object from pg_lo_open. offset The new seek position in bytes. whence Specified from where to calculate the new seek position: SEEK_CUR (from current position), SEEK_END (from end), or SEEK_SET (from start). Return Value None pg_lo_tell pg_lo_tell return the current seek position of a large object pg_lo_tell pg_lo_tell conn descriptor Description pg_lo_tell returns the current read/write position in bytes from the beginning of the large object. Arguments conn The handle of a connection to the database in which the large object exists. descriptor A descriptor for the large object from pg_lo_open. Return Value A zero-based offset in bytes suitable for input to pg_lo_lseek. pg_lo_truncate pg_lo_truncate Truncate a large object to a given length pg_lo_truncate pg_lo_truncate conn descriptor length Description pg_lo_truncate truncates the specified large object to the given length. If the length is greater than the current large object length, the large object is extended with null bytes. Arguments conn The handle of a connection to the database in which the large object exists. descriptor A descriptor for the large object from pg_lo_open. length The length to which the large object is to be truncated or padded. Return Value A zero-based offset in bytes suitable for input to pg_lo_lseek. pg_lo_unlink pg_lo_unlink delete a large object pg_lo_unlink pg_lo_unlink conn loid Description pg_lo_unlink deletes the specified large object. Arguments conn The handle of a connection to the database in which the large object exists. loid The OID of the large object. Return Value None pg_lo_import pg_lo_import import a large object from a file pg_lo_import pg_lo_import conn filename Description pg_lo_import reads the specified file and places the contents into a new large object. Arguments conn The handle of a connection to the database in which to create the large object. filename Specified the file from which to import the data. Return Value The OID of the large object created. Notes pg_lo_import must be called within a BEGIN/COMMIT transaction block. pg_lo_export pg_lo_export export a large object to a file pg_lo_export pg_lo_export conn loid filename Description pg_lo_export writes the specified large object into a file. Arguments conn The handle of a connection to the database in which the large object exists. loid The OID of the large object. filename Specifies the file into which the data is to be exported. Return Value None Notes pg_lo_export must be called within a BEGIN/COMMIT transaction block. pg_sqlite pg_sqlite implements a bridge between PostgreSQL and Sqlite3 using the Pgtcl and sqlite3 packages. pg_sqlite pg_sqlite sqlite_db command args Description pg_sqlite can import the results of a Postgres SQL query (previously made via pg_exec) directly into an sqlite3 table, export the results of an Sqlite SQL query into a Postgres table (via write_tabsep), or import TSV files directly into sqlite3. The commands currently implemented are import_postgres_result, read_tabsep, write_tabsep, and read_tabsep_keylist. Arguments sqlite_db An Sqlite3 database handle previously created via the sqlite3 command. command The command, one of info, import_postgres_result, read_tabsep, write_tabsep, or read_tabsep_keylist, args Command-specific arguments. Commands info pg_sqlite sqlite_db info -busy -filename -db database_name Request information from an SQLITE database connection. Returns a key-value list containing the values requested if available. With no arguments, all available info is returned. -filename Request the filename associated with a database. -db database For the -filename option, specify the database name (default "main"). -busy Request a list of prepared commands that are currently busy. import_postgres_result pg_sqlite sqlite_db import_postgres_result handle -rowbyrow -sql target_sql -create new_table -into table -replace -as name_type_list -types type_list -names name_list -pkey primary_key -sep separator -null null_string -poll_interval rows -recommit rows -check -max column-name variable-name Import the result of a PostgreSQL request into an sqlite3 table. handle A database or result handle. Normally, you would call pg_exec and pass the result handle to pg_sqlite here. If you are using row_by_row mode, though, you use pg_sendquery and pass the PostgreSQL database handle here. -rowbyrow Perform the request using row-by-row mode. This injects the data to sqlite directly without making an internal copy, but the result may be incomplete or inconsistent if an error occurs during the request. -sep separator String to use to separate columns. Default is "\t" (tab). -null null_string String to use to indicate a null value. Default is to treat all strings literally. -sql target_sql An INSERT statement, suitable to be compiled into a prepared statement to be applied to each row. For example "INSERT INTO newtable (id, name, value) VALUES (?,?,?)" -create new_table A table to be created in sqlite. The names and types of columns, and the primary key, must be provided. -into table An existing sqlite table to insert the data. The names of the columns must be provided, if the type can not be inferred it will be assumed to be "text". -replace When performing the insert on an existing or newly create table, use "INSERT OR REPLACE" semantics. Not compatible with "-sql". -as name-type-list A list of alternating column names and types. See note on types. -types type-list A list of column types. See note on types. -names name-list A list of column names. -pkey primary_key A list containing key names and optional sorting to indicate primary key where needed. For example -pkey {{clock ASC} {sequence ASC}}. -poll_interval count Call DoOneEvent() every count rows to keep the event loop alive during long transactions. -recommit count Chunk the operation in transactions, with one transaction every count rows. -check Check (via a SELECT) whether the exact row is already present, and skip inserting the row if so. This avoids bloating the WAL log during large re-loads of databases, at some performance cost. -max column-name variable-name Set $variable-name to the maximum value of column-name imported. write_tabsep pg_sqlite sqlite_db write_tabsep handle sql sql -sep separator -null null_string -poll_interval rows Write the results of the provided sql to a file handle This command may be used to export sqlite3 data to postgres. You issue a COPY FROM STDIN ... FORMAT text command, then use pg_sqlite write_tabsep ... to write the data directly to the Postgresql handle, followed by writing the terminator line to the same handle. See the PostgreSQL documentation on the "COPY" command for more details. handle File handle. -sep separator String to use to separate columns. Default is "\t" (tab). -null null_string String to use to indicate a null value. Default is to treat all strings literally. -poll_interval count Call DoOneEvent() every count rows to keep the event loop alive during long transactions. read_tabsep pg_sqlite sqlite_db read_tabsep -row single_tab_separated_row -file file_handle -sql target_sql -create new_table -into table -replace -as name_type_list -types type_list -names name_list -pkey primary_key -sep separator -null null_string -poll_interval rows -recommit rows -check Read a previously opened file into an sqlite3 table. -row single_tab_separated_row An already read tab-separated line. -file file_handle An open file consistion of tab-separated rows. -sep separator String to use to separate columns. Default is "\t" (tab). -null null_string String to use to indicate a null value. Default is to treat all strings literally. -sql target_sql An INSERT statement, suitable to be compiled into a prepared statement to be applied to each row. For example "INSERT INTO newtable (id, name, value) VALUES (?,?,?)" -create new_table A table to be created in sqlite. The names and types of columns, and the primary key, must be provided. -into table An existing sqlite table to insert the data. The names of the columns must be provided, if the type can not be inferred it will be assumed to be "text". -replace When performing the insert on an existing or newly create table, use "INSERT OR REPLACE" semantics. Not compatible with "-sql". -as name-type-list A list of alternating column names and types. See note on types. -types type-list A list of column types. See note on types. -names name-list A list of column names. -pkey primary_key A list containing key names and optional sorting to indicate primary key where needed. For example -pkey {{clock ASC} {sequence ASC}}. -poll_interval count Call DoOneEvent() every count rows to keep the event loop alive during long transactions. -recommit count Chunk the operation in transactions, with one transaction every count rows. -check Check (via a SELECT) whether the exact row is already present, and skip inserting the row if so. This avoids bloating the WAL log during large re-loads of databases, at some performance cost. read_tabsep_keylist pg_sqlite sqlite_db read_tabsep_keylist -row single_tab_separated_row -file file_handle -create new_table -into table -replace -as name_type_list -names name_list -pkey primary_key -sep separator -null null_string -poll_interval rows -recommit rows Read a previously opened file containing alternating key-value columns into an sqlite3 table. -row single_tab_separated_row An already read tab-separated key-value list line. -file file_handle An open file consistion of tab-separated key-value list rows. -sep separator String to use to separate columns. Default is "\t" (tab). -null null_string String to use to indicate a null value. Default is to treat all strings literally. -create new_table A table to be created in sqlite. The names and types of columns, and the primary key, must be provided. -into table An existing sqlite table to insert the data. The names of the columns must be provided, if the type can not be inferred it will be assumed to be "text". -replace When performing the insert on an existing or newly create table, use "INSERT OR REPLACE" semantics. Not compatible with "-sql". -as name-type-list A list of alternating column names and types. See note on types. -names name-list A list of column names. -pkey primary_key A list containing key names and optional sorting to indicate primary key where needed. For example -pkey {{clock ASC} {sequence ASC}}. -poll_interval count Call DoOneEvent() every count rows to keep the event loop alive during long transactions. -recommit count Chunk the operation in transactions, with one transaction every count rows. Types A note on types: pg_sqlite supports four types: integer (or int), boolean (or bool), double (or real), and text. Integer, double, and text match both sqlite and postgresql types. Boolean is an integer type in sqlite, and boolean in postgresql, and converts postgresql boolean values (such as 'yes', 'no', 'true', or 'false') to integer 1 and 0. In addition, pg_sqlite will accept PostgreSQL boolean values for the integer type. This may be made conditional on a "strict" mode in the future. Return Value Number of rows imported or exported. See Also Sqlite 3 pg_copy_complete pg_compy_complete Completes a COPY FROM stdin operation pg_copy_complete pg_copy_complete conn Description pg_copy_complete completes a COPY FROM stdin operation. After writing the rows to the postgres connection handle, this tells postgres that the copy is completed and it can return to normal operation. Arguments conn An postgresql connection handle. PgGetConnectionId PgGetConnectionId Provides access to the underlying libpq SQL connection handle. PgGetConnectionId extern PGconn *PgGetConnectionId(Tcl_Interp *interp, const char *handle, Pg_ConnectionId **connid); Description PgGetConnectionId returns the underlying PGconn handle. This is intended to allow Tcl extensions to Pgtcl to use the existing database connection. The Pg_ConnectionId structure provides access to more internals of the Pgtcl handle, but may be ignored in most cases. Parameters Tcl_Interp *interp Pointer to Tcl interpreter. char *handle The name of the Pgtcl database handle command. Pg_ConnectionId **connid Pointer to address to hold Pgtcl connection handle. Must be provided even if not used. Returns PGconn *conn is a pointer to the libpq SQL database connection. Tcl Namespace Support With version 1.5, there is proper Tcl namespace support built into pgtcl. There are commands now that mirror the pg_ commands, but use the Tcl namespace convention. For example, there are commands now called: pg::connect, pg::result, etc. However, due to this, there are some incapabilities. For example, pg_exec has a counterpart called pg::sqlexec, since doing a namespace import ::pg::* would clobber the builtin Tcl commmand exec. The old command names, pg_*, are still there for backwards compatibility, but might be phased out eventually. So, one can use Tcl's namespace mechanisms now with pgtcl. For eaxmple, you can import that namespace: namespace import ::pg::* set conn [connect template1 -host $host -port $port] Connection/result handles as commands Starting with version 1.5, you can use the connection/result handle as a Tcl command. What this means is that when a handle for a connection or result is generated, a corresponding Tcl command is also generate. For example, you can do the following: set conn [pg::connect template1 -host $host -port $port] set res [$conn exec "SELECT datname FROM pg_database ORDER BY datname;"] set datnames [$res -list] $res -clear rename $conn {} ;# or $conn disconnect Note that deleting the command (rename $conn {}), has the same effect as pg::result $res -clear (if it is a result handle), and pg::disconnect (if it is a connection handle). Also, if that command gets overloaded with a proc definition, then that has the same effect as deleting the command. Example Program shows a small example of how to use the pgtcl commands. <application>pgtcl</application> Example Program # getDBs : # get the names of all the databases at a given host and port number # with the defaults being the localhost and port 5432 # return them in alphabetical order proc getDBs { {host "localhost"} {port "5432"} } { # datnames is the list to be result set conn [pg_connect template1 -host $host -port $port] set res [pg_exec $conn "SELECT datname FROM pg_database ORDER BY datname;"] set ntups [pg_result $res -numTuples] for {set i 0} {$i < $ntups} {incr i} { lappend datnames [pg_result $res -getTuple $i] } pg_result $res -clear pg_disconnect $conn return $datnames } ## OR an alternative proc getDBs { {host "localhost"} {port "5432"} } { # datnames is the list to be result set conn [pg_connect template1 -host $host -port $port] set res [pg_exec $conn "SELECT datname FROM pg_database ORDER BY datname;"] set datnames [pg_result $res -list] pg_result $res -clear pg_disconnect $conn return $datnames } ## OR an alternative proc getDBs { {host "localhost"} {port "5432"} } { # datnames is the list to be result set conn [pg_connect template1 -host $host -port $port] set res [$conn exec "SELECT datname FROM pg_database ORDER BY datname;"] set datnames [$res -dict] $res -clear rename $conn {} return [dict get $datnames] }
pgtcl-2.8.0/doc/man/000077500000000000000000000000001420313073400141475ustar00rootroot00000000000000pgtcl-2.8.0/doc/man/PgGetConnectionId.n000066400000000000000000000023711420313073400176340ustar00rootroot00000000000000.\" This manpage has been automatically generated by docbook2man .\" from a DocBook document. This tool can be found at: .\" .\" Please send any bug reports, improvements, comments, patches, .\" etc. to Steve Cheng . .TH "PgGetConnectionId" "" "17 September 2020" "" "PostgreSQL Tcl Interface Documentation" .SH NAME PgGetConnectionId \- Provides access to the underlying libpq SQL connection handle. .SH SYNOPSIS .nf extern PGconn *PgGetConnectionId(Tcl_Interp *interp, const char *handle, Pg_ConnectionId **connid); .fi .SH "DESCRIPTION" .PP \fBPgGetConnectionId\fR returns the underlying PGconn handle. This is intended to allow Tcl extensions to Pgtcl to use the existing database connection. .PP The Pg_ConnectionId structure provides access to more internals of the Pgtcl handle, but may be ignored in most cases. .SH "PARAMETERS" .TP \fBTcl_Interp *\fIinterp\fB\fR Pointer to Tcl interpreter. .TP \fBchar *\fIhandle\fB\fR The name of the Pgtcl database handle command. .TP \fBPg_ConnectionId **\fIconnid\fB\fR Pointer to address to hold Pgtcl connection handle. Must be provided even if not used. .SH "RETURNS" .PP PGconn *\fIconn\fR is a pointer to the libpq SQL database connection. pgtcl-2.8.0/doc/man/pg_blocking.n000066400000000000000000000021571420313073400166110ustar00rootroot00000000000000.\" This manpage has been automatically generated by docbook2man .\" from a DocBook document. This tool can be found at: .\" .\" Please send any bug reports, improvements, comments, patches, .\" etc. to Steve Cheng . .TH "PG_BLOCKING" "" "17 September 2020" "" "PostgreSQL Tcl Interface Documentation" .SH NAME pg_blocking \- see or set whether or not a connection is set to blocking or nonblocking .SH SYNOPSIS .nf pg_blocking \fIconn\fR [\fImode\fR] .fi .SH "DESCRIPTION" .PP \fBpg_blocking\fR can set the connection to either blocking or nonblocking, and it can see which way the connection is currently set. .SH "ARGUMENTS" .TP \fB\fIconn\fB\fR The handle of a connection to the database in which the large object exists. .TP \fB\fImode\fB\fR If present, sets the mode of the connection to nonblocking if 0\&. Otherwise it sets the connection to blocking\&. .SH "RETURN VALUE" .PP Returns nothing if called with the \fImode\fR argument. Otherwise it returns 1 if the connection is set for blocking, or 0 if the connection is set for nonblocking\&. pgtcl-2.8.0/doc/man/pg_cancelrequest.n000066400000000000000000000016131420313073400176530ustar00rootroot00000000000000.\" This manpage has been automatically generated by docbook2man .\" from a DocBook document. This tool can be found at: .\" .\" Please send any bug reports, improvements, comments, patches, .\" etc. to Steve Cheng . .TH "PG_CANCELREQUEST" "" "17 September 2020" "" "PostgreSQL Tcl Interface Documentation" .SH NAME pg_cancelrequest \- request that PostgreSQL abandon processing of the current command .SH SYNOPSIS .nf pg_cancelrequest \fIconn\fR .fi .SH "DESCRIPTION" .PP \fBpg_cancelrequest\fR requests that the processing of the current command be abandoned. .SH "ARGUMENTS" .TP \fB\fIconn\fB\fR The handle of a connection to the database in which the large object exists. .SH "RETURN VALUE" .PP Returns nothing if the command was successfully dispatched or if no query was being processed. Otherwise, returns an error. pgtcl-2.8.0/doc/man/pg_conndefaults.n000066400000000000000000000017511420313073400175050ustar00rootroot00000000000000.\" This manpage has been automatically generated by docbook2man .\" from a DocBook document. This tool can be found at: .\" .\" Please send any bug reports, improvements, comments, patches, .\" etc. to Steve Cheng . .TH "PG_CONNDEFAULTS" "" "17 September 2020" "" "PostgreSQL Tcl Interface Documentation" .SH NAME pg_conndefaults \- get connection options and their defaults .SH SYNOPSIS .nf pg_conndefaults .fi .SH "DESCRIPTION" .PP \fBpg_conndefaults\fR returns information about the connection options available in \fBpg_connect -conninfo\fR and the current default value for each option. .SH "ARGUMENTS" .PP None .SH "RETURN VALUE" .PP The result is a list describing the possible connection options and their current default values. Each entry in the list is a sublist of the format: .nf {optname label dispchar dispsize value} .fi where the \fIoptname\fR is usable as an option in \fBpg_connect -conninfo\fR\&. pgtcl-2.8.0/doc/man/pg_connect.n000066400000000000000000000210461420313073400164500ustar00rootroot00000000000000.\" This manpage has been automatically generated by docbook2man .\" from a DocBook document. This tool can be found at: .\" .\" Please send any bug reports, improvements, comments, patches, .\" etc. to Steve Cheng . .TH "PG_CONNECT" "" "17 September 2020" "" "PostgreSQL Tcl Interface Documentation" .SH NAME pg_connect \- open a connection to the server .SH SYNOPSIS .nf pg_connect -conninfo \fIconnectOptions\fR [-connhandle \fIconnectionHandleName\fR] [-async \fIbool\fR] pg_connect \fIdbName\fR [-host \fIhostName\fR] [-port \fIportNumber\fR] [-tty \fItty\fR] [-options \fIserverOptions\fR] [-connhandle \fIconnectionHandleName\fR] [-async \fIbool\fR] pg_connect -connlist \fIconnectNameValueList\fR [-connhandle \fIconnectionHandleName\fR] [-async \fIbool\fR] .fi .SH "DESCRIPTION" .PP \fBpg_connect\fR opens a connection to the PostgreSQL server. .PP Three syntaxes are available. In the older one, each possible option has a separate option switch in the \fBpg_connect\fR command. In the newer form, a single option string is supplied that can contain multiple option values. The third form takes the parameters as a name value Tcl list. \fBpg_conndefaults\fR can be used to retrieve information about the available options in the newer syntax. .SH "ARGUMENTS" "NEW STYLE" .TP \fB\fIconnectOptions\fB\fR \fBpg_connect\fR opens a new database connection using the parameters taken from the connectOptions string. Unlike the old-style usage of \fBpg_connect\fR, with the new-style usage the parameter set can be extended without requiring changes to either \fIlibpgtcl\fR or the underlying \fBlibpq\fR library, so use of the new style (or its nonexistent nonblocking analogues \fBpg_connect_start\fR and \fBpg_connect_poll\fR) is preferred for new application programming. The passed string can be empty to use all default parameters, or it can contain one or more parameter settings separated by whitespace. Each parameter setting is in the form keyword = value\&. (To write an empty value or a value containing spaces, surround it with single quotes, e.g., keyword = 'a value'\&. Single quotes and backslashes within the value must be escaped with a backslash, i.e., \\' and \\\\\&.) Spaces around the equal sign are optional. The currently recognized parameter key words are: .RS .TP \fBhost\fR Name of host to connect to. 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 is to connect to a Unix-domain socket in \fI/tmp\fR\&. .TP \fBhostaddr\fR Numeric IP address of host to connect to. This should be in the standard IPv4 address format, e.g., 172.28.40.9\&. If your machine supports IPv6, you can also use IPv6 address format, e.g., fe80::203:93ff:fedb:49bc\&. TCP/IP communication is always used when a nonempty string is specified for this parameter. Using hostaddr instead of host allows the application to avoid a host name lookup, which may be important in applications with time constraints. However, Kerberos authentication requires the host name. The following therefore applies: If host is specified without hostaddr, a host name lookup occurs. If hostaddr is specified without host, the value for hostaddr gives the remote address. When Kerberos is used, a reverse name query occurs to obtain the host name for Kerberos. If both host and hostaddr are specified, the value for hostaddr gives the remote address; the value for host is ignored, unless Kerberos is used, in which case that value is used for Kerberos authentication. (Note that authentication is likely to fail if \fBlibpq\fR is passed a host name that is not the name of the machine at hostaddr\&.) Also, host rather than hostaddr is used to identify the connection in \fI$HOME/.pgpass\fR\&. Without either a host name or host address, \fBPgtcl\fR will connect using a local Unix domain socket. .TP \fBport\fR Port number to connect to at the server host, or socket file name extension for Unix-domain connections. .TP \fBdbname\fR The database name. Defaults to be the same as the user name. .TP \fBuser\fR PostgreSQL user name to connect as. .TP \fBpassword\fR Password to be used if the server demands password authentication. .TP \fBconnect_timeout\fR Maximum wait for connection, in seconds (write as a decimal integer string). Zero or not specified means wait indefinitely. It is not recommended to use a timeout of less than 2 seconds. .TP \fBoptions\fR Command-line options to be sent to the server. .TP \fBtty\fR Ignored (formerly, this specified where to send server debug output). .TP \fBsslmode\fR This option determines whether or with what priority an SSL connection will be negotiated with the server. There are four modes: disable will attempt only an unencrypted SSL connection; allow will negotiate, trying first a non-SSL connection, then if that fails, trying an SSL connection; prefer (the default) will negotiate, trying first an SSL connection, then if that fails, trying a regular non-SSL connection; require will try only an SSL connection. If PostgreSQL is compiled without SSL support, using option require will cause an error, and options allow and prefer will be tolerated but \fBlibpq\fR will be unable to negotiate an SSL connection. .TP \fBrequiressl\fR This option is deprecated in favor of the sslmode setting. If set to 1, an SSL connection to the server is required (this is equivalent to sslmode require). \fBlibpq\fR will then refuse to connect if the server does not accept an SSL connection. If set to 0 (default), \fBlibpq\fR will negotiate the connection type with the server (equivalent to sslmode prefer). This option is only available if PostgreSQL is compiled with SSL support. .TP \fBservice\fR Service name to use for additional parameters. It specifies a service name in \fIpg_service.conf\fR that holds additional connection parameters. This allows applications to specify only a service name so connection parameters can be centrally maintained. See \fIPREFIX/share/pg_service.conf.sample\fR for information on how to set up the file. .TP \fB-connhandle \fIconnectionHandleName\fB\fR Name to use for the connection handle, instead of pgtcl generating the name automatically. Without the option, the name is auto-generated, prefixed with pgsql, and with a numeric id at the end. This gives the programmer control over the name of the connection handle. .TP \fB-async \fIbool\fB\fR Connect asyncronously if [bool] is true. .RE If any parameter is unspecified, then the corresponding environment variable (see libpq documentation in the PostgreSQL manual) is checked. If the environment variable is not set either, then built-in defaults are used. "OLD STYLE" .TP \fB\fIdbName\fB\fR The name of the database to connect to. .TP \fB-host \fIhostName\fB\fR The host name of the database server to connect to. .TP \fB-port \fIportNumber\fB\fR The TCP port number of the database server to connect to. .TP \fB-tty \fItty\fB\fR A file or TTY for optional debug output from the server. .TP \fB-options \fIserverOptions\fB\fR Additional configuration options to pass to the server. .TP \fB-connhandle \fIconnectionHandleName\fB\fR Name to use for the connection handle, instead of pgtcl generating the name automatically. Without the option, the name is auto-generated, prefixed with pgsql, and with a numeric id at the end. This gives the programmer control over the name of the connection handle. .TP \fB-async \fIbool\fB\fR Connect asyncronously if [bool] is true. "THIRD STYLE (MOST RECENT ONE ADDED)" .TP \fB\fI-connlist connectNameValuelist\fB\fR \fBpg_connect\fR opens a new database connection using the parameters taken from the connectNameValuelist list. The parameters are exactly the same for the New Style, but they are stored as a Tcl list, instead of a string. The list is a name value pair, for example: \fB[list host localhost port 5400 dbname template1]\fR\&. .nf array set conninfo { host 192.168.123.180 port 5801 dbname template1 user postgres } set conn [pg::connect -connlist [array get ::conninfo]] .fi .TP \fB-async \fIbool\fB\fR Connect asyncronously if [bool] is true. .TP \fB-connhandle \fIconnectionHandleName\fB\fR Name to use for the connection handle, instead of pgtcl generating the name automatically. Without the option, the name is auto-generated, prefixed with pgsql, and with a numeric id at the end. This gives the programmer control over the name of the connection handle. .SH "RETURN VALUE" .PP If successful, a handle for a database connection is returned. Handles start with the prefix pgsql\&. pgtcl-2.8.0/doc/man/pg_copy_complete.n000066400000000000000000000014431420313073400176600ustar00rootroot00000000000000.\" This manpage has been automatically generated by docbook2man .\" from a DocBook document. This tool can be found at: .\" .\" Please send any bug reports, improvements, comments, patches, .\" etc. to Steve Cheng . .TH "PG_COPY_COMPLETE" "" "17 September 2020" "" "PostgreSQL Tcl Interface Documentation" .SH NAME pg_compy_complete \- Completes a COPY FROM stdin operation .SH SYNOPSIS .nf pg_copy_complete conn .fi .SH "DESCRIPTION" .PP \fBpg_copy_complete\fR completes a \fBCOPY FROM stdin\fR operation. After writing the rows to the postgres connection handle, this tells postgres that the copy is completed and it can return to normal operation. .SH "ARGUMENTS" .TP \fB\fIconn\fB\fR An postgresql connection handle. pgtcl-2.8.0/doc/man/pg_dbinfo.n000066400000000000000000000053651420313073400162660ustar00rootroot00000000000000.\" This manpage has been automatically generated by docbook2man .\" from a DocBook document. This tool can be found at: .\" .\" Please send any bug reports, improvements, comments, patches, .\" etc. to Steve Cheng . .TH "PG_DBINFO" "" "17 September 2020" "" "PostgreSQL Tcl Interface Documentation" .SH NAME pg_dbinfo \- returns data about the connection .SH SYNOPSIS .nf pg_dbinfo command ?conn? ?paramname? .fi .SH "DESCRIPTION" .PP \fBpg_dbinfo\fR returns data about the connection. The first argument is a command, and the second and third argument depend on the command chosen. .SH "ARGUMENTS" .TP \fB\fIcommand\fB\fR .RS .TP \fB\fIconnections\fB\fR Return a list of connection handles. .TP \fB\fIresults connHandle\fB\fR Return a list of result handles for the named connection. .TP \fB\fIversion connHandle\fB\fR Return server version for the connection. .TP \fB\fIprotocol connHandle\fB\fR Return protocol version for the connection. .TP \fB\fIparam connHandle name\fB\fR Return connection's value for the named parameter. .TP \fB\fIbackendpid connHandle\fB\fR Return server process ID for the connection. .TP \fB\fIsocket connHandle\fB\fR Return socket file handle for the connection. .TP \fB\fIsql_count connHandle\fB\fR Return number of SQL queries that have been made for the connection. .TP \fB\fIdbname connHandle\fB\fR Return name of the connected database. .TP \fB\fIuser connHandle\fB\fR Return logged in user name. .TP \fB\fIpassword connHandle\fB\fR Return logged in user's password. .TP \fB\fIhost connHandle\fB\fR Return address of the connected host. .TP \fB\fIport connHandle\fB\fR Return host port for the connection. .TP \fB\fIoptions connHandle\fB\fR Return command line options passed in the connection request. .TP \fB\fIstatus connHandle\fB\fR Return connection status. .TP \fB\fItransaction_status connHandle\fB\fR Return transaction status. .TP \fB\fIerror_message connHandle\fB\fR Return the most recent error message on the connection. .TP \fB\fIneeds_password connHandle\fB\fR Return true if the connection required a password but none was available. This function can be applied after a failed connection attempt to decide whether to prompt the user for a password. .TP \fB\fIused_password connHandle\fB\fR Return true if the connection used a password. This function can be applied after either a failed or successful connection attempt to detect whether the server demanded a password. .TP \fB\fIused_ssl connHandle\fB\fR Return true if the connection uses SSL. .RE .TP \fB\fIconn\fB\fR The handle of the connection, when required. .TP \fB\fIparam\fB\fR The connection parameter name, when the command "param" is provided. .SH "RETURN VALUE" .PP A Tcl list of connection handle names pgtcl-2.8.0/doc/man/pg_disconnect.n000066400000000000000000000012561420313073400171510ustar00rootroot00000000000000.\" This manpage has been automatically generated by docbook2man .\" from a DocBook document. This tool can be found at: .\" .\" Please send any bug reports, improvements, comments, patches, .\" etc. to Steve Cheng . .TH "PG_DISCONNECT" "" "17 September 2020" "" "PostgreSQL Tcl Interface Documentation" .SH NAME pg_disconnect \- close a connection to the server .SH SYNOPSIS .nf pg_disconnect \fIconn\fR .fi .SH "DESCRIPTION" .PP \fBpg_disconnect\fR closes a connection to the PostgreSQL server. .SH "ARGUMENTS" .TP \fB\fIconn\fB\fR The handle of the connection to be closed. .SH "RETURN VALUE" .PP None pgtcl-2.8.0/doc/man/pg_escape_bytea.n000066400000000000000000000016021420313073400174370ustar00rootroot00000000000000.\" This manpage has been automatically generated by docbook2man .\" from a DocBook document. This tool can be found at: .\" .\" Please send any bug reports, improvements, comments, patches, .\" etc. to Steve Cheng . .TH "PG_ESCAPE_BYTEA" "" "17 September 2020" "" "PostgreSQL Tcl Interface Documentation" .SH NAME pg_escape_bytea \- escapes a binary string for inclusion into SQL statements. .SH SYNOPSIS .nf pg_escape_bytea \fIstring\fR .fi .SH "DESCRIPTION" .PP \fBpg_escape_bytea\fR escapes a binary string, making it safe for inclusion into SQL statements. .PP .nf pg_exec $conn "insert into foo values ([pg_escape_binary $name]);" .fi .SH "ARGUMENTS" .TP \fB\fIbinary_string\fB\fR The binary string to be escaped. .SH "RETURN VALUE" .PP Returns the binary string, escaped for inclusion into SQL queries. pgtcl-2.8.0/doc/man/pg_escape_string.n000066400000000000000000000036351420313073400176510ustar00rootroot00000000000000.\" This manpage has been automatically generated by docbook2man .\" from a DocBook document. This tool can be found at: .\" .\" Please send any bug reports, improvements, comments, patches, .\" etc. to Steve Cheng . .TH "PG_ESCAPE_STRING" "" "17 September 2020" "" "PostgreSQL Tcl Interface Documentation" .SH NAME pg_escape_string \- escapes a string for inclusion into SQL statements. This is the same as pg_quote. It was added for consistency. .SH SYNOPSIS .nf pg_escape_string \fIstring\fR .fi .SH "DESCRIPTION" .PP \fBpg_escape_string\fR quotes a string and escapes single quotes and backslashes within the string, making it safe for inclusion into SQL statements. .PP If you're doing something like .nf pg_exec $conn "insert into foo values ('$name');" .fi and name contains text includeng an unescaped single quote, such as Bob's House, at best the insert will fail, and at worst your software will be exploited via an SQL injection attack. Passing value strings through \fBpg_escape_string\fR will properly quote them for insertion into SQL commands. .nf pg_exec $conn "insert into foo values ([pg_escape_string $name]);" .fi \&...will make sure that any special characters that occur in name, such as single quote or backslash, will be properly quoted. .SH "ARGUMENTS" .TP \fB\fIstring\fB\fR The string to be escaped. .SH "RETURN VALUE" .PP Returns the string, escaped for inclusion into SQL queries. Note that it adds a set of single quotes around the outside of the string as well. .SH "SEE ALSO" .PP In most cases, with recent versions of SQL, it is better to use the native parameter insertion capabilities of the SQL server and protocol. If you are using a version of PostgreSQL more recent then 7.4, consider the optional parameter arguments to pg_exec and pg_sendquery, and the paramarray option to pg_exec, pg_sendquery, and pg_select. pgtcl-2.8.0/doc/man/pg_exec.n000066400000000000000000000055131420313073400157440ustar00rootroot00000000000000.\" This manpage has been automatically generated by docbook2man .\" from a DocBook document. This tool can be found at: .\" .\" Please send any bug reports, improvements, comments, patches, .\" etc. to Steve Cheng . .TH "PG_EXEC" "" "17 September 2020" "" "PostgreSQL Tcl Interface Documentation" .SH NAME pg_exec \- send a command to the server .SH SYNOPSIS .nf pg_exec [\fI-paramarray\fR arrayVar] [\fI-variables\fR] \fIconn\fR \fIcommandString\fR [\fIargs\fR] .fi .SH "DESCRIPTION" .PP \fBpg_exec\fR submits a command to the PostgreSQL server and returns a result. Command result handles start with the connection handle and add a period and a result number. .PP Note that lack of a Tcl error is not proof that the command succeeded! An error message returned by the server will be processed as a command result with failure status, not by generating a Tcl error in \fBpg_exec\fR\&. Check for {[pg_result $result -status] == PGRES_COMMAND_OK}. .PP If the [-paramarray] flag is provided, then a substitution is performed on the query, securely replacing each back-quote delimited name with the corresponding entry from the named array. If the array does not contain the named element, then NULL is substituted (similarly to the way an array created by -withoutnulls is generated). Each such name must occur in a location where a value or field name could appear. See pg_select for more info. .PP If the [-variables] flag is provided, then embedded Tcl variables are passed as parameters. Variables can be flagged with ':' and array references and namespaces are supported. Complex variable names can usually be embedded with :{nasty-name-here} though no attempt at duplicating Tcl brace-escaping is made. If the variable does not exist, then NULL is substituted. .SH "ARGUMENTS" .TP \fB[-paramarray arrayname]\fR Perform parameter substitution via `quoted` elements of the array using PQexecParams or PQSendQueryParams. .TP \fB[-variables]\fR Substitute Tcl variables found in the SQL string using PQexecParams or PQSendQueryParams. .TP \fB\fIconn\fB\fR The handle of the connection on which to execute the command. .TP \fB\fIcommandString\fB\fR The SQL command to execute. .TP \fB\fIargs\fB\fR For PostgreSQL versions greater than 7.4, \fIargs\fR consists of zero or more optional values that can be inserted, unquoted, into the SQL statement using $-style substitution. Nulls are represented by the string "NULL". .SH "RETURN VALUE" .PP A result handle. A Tcl error will be returned if \fBpgtcl\fR was unable to obtain a server response. Otherwise, a command result object is created and a handle for it is returned. This handle can be passed to \fBpg_result\fR to obtain the results of the command. .SH "EXAMPLE" .PP .nf pg_exec $conn {select * from table1 where id = $1 and user = $2} $id $user .fi pgtcl-2.8.0/doc/man/pg_exec_prepared.n000066400000000000000000000030461420313073400176250ustar00rootroot00000000000000.\" This manpage has been automatically generated by docbook2man .\" from a DocBook document. This tool can be found at: .\" .\" Please send any bug reports, improvements, comments, patches, .\" etc. to Steve Cheng . .TH "PG_EXEC_PREPARED" "" "17 September 2020" "" "PostgreSQL Tcl Interface Documentation" .SH NAME pg_exec_prepared \- send a request to execute a prepared SQL statement to the server .SH SYNOPSIS .nf pg_exec_prepared \fIconn\fR \fIstatementName\fR [\fIargs\fR] .fi .SH "DESCRIPTION" .PP \fBpg_exec_prepared\fR submits a command to the PostgreSQL server and returns a result. .PP \fBpg_exec_prepared\fR functions identically to \fBpg_exec\fR, except that it operates using statements prepared by the \fBPREPARE\fR SQL command. .PP Note that prepared statements are only support under PostgreSQL 7.4 and later. .SH "ARGUMENTS" .TP \fB\fIconn\fB\fR The handle of the connection on which to execute the command. .TP \fB\fIstatementName\fB\fR The name of the prepared statement to execute. .TP \fB\fIargs\fB\fR \fIargs\fR consists of zero or more optional values that can be inserted, unquoted, into the SQL statement using $-style substitution. .SH "RETURN VALUE" .PP A result handle. See \fBpg_exec\fR for details. .SH "EXAMPLE" .PP .nf pg_exec $conn {prepare insert_people (varchar, varchar, varchar, varchar, varchar, varchar) as insert into people values ($1, $2, $3, $4, $5, $6);} pg_exec_prepared $conn insert_people $email $name $address $city $state $zip .fi pgtcl-2.8.0/doc/man/pg_execute.n000066400000000000000000000070201420313073400164550ustar00rootroot00000000000000.\" This manpage has been automatically generated by docbook2man .\" from a DocBook document. This tool can be found at: .\" .\" Please send any bug reports, improvements, comments, patches, .\" etc. to Steve Cheng . .TH "PG_EXECUTE" "" "17 September 2020" "" "PostgreSQL Tcl Interface Documentation" .SH NAME pg_execute \- send a query and optionally loop over the results .SH SYNOPSIS .nf pg_execute [-array \fIarrayVar\fR] [-oid \fIoidVar\fR] \fIconn\fR \fIcommandString\fR [\fIprocedure\fR] .fi .SH "DESCRIPTION" .PP \fBpg_execute\fR submits a command to the PostgreSQL server. .PP If the command is not a \fBSELECT\fR statement, the number of rows affected by the command is returned. If the command is an \fBINSERT\fR statement and a single row is inserted, the OID of the inserted row is stored in the variable \fIoidVar\fR if the optional \fI-oid\fR argument is supplied. .PP If the command is a \fBSELECT\fR statement, then, for each row in the result, the row values are stored in the \fIarrayVar\fR variable, if supplied, using the column names as the array indices, else in variables named by the column names, and then the optional \fIprocedure\fR is executed if supplied. (Omitting the \fIprocedure\fR probably makes sense only if the query will return a single row.) The number of rows selected is returned. .PP The \fIprocedure\fR can use the Tcl commands break, continue, and return with the expected behavior. Note that if the \fIprocedure\fR executes return, then \fBpg_execute\fR does not return the number of affected rows. .PP \fBpg_execute\fR is a newer function which provides a superset of the features of \fBpg_select\fR and can replace \fBpg_exec\fR in many cases where access to the result handle is not needed. .PP For server-handled errors, \fBpg_execute\fR will throw a Tcl error and return a two-element list. The first element is an error code, such as PGRES_FATAL_ERROR, and the second element is the server error text. For more serious errors, such as failure to communicate with the server, \fBpg_execute\fR will throw a Tcl error and return just the error message text. .SH "ARGUMENTS" .TP \fB-array \fIarrayVar\fB\fR Specifies the name of an array variable where result rows are stored, indexed by the column names. This is ignored if \fIcommandString\fR is not a \fBSELECT\fR statement. .TP \fB-oid \fIoidVar\fB\fR Specifies the name of a variable into which the OID from an \fBINSERT\fR statement will be stored. .TP \fB\fIconn\fB\fR The handle of the connection on which to execute the command. .TP \fB\fIcommandString\fB\fR The SQL command to execute. .TP \fB\fIprocedure\fB\fR Optional procedure to execute for each result row of a \fBSELECT\fR statement. .SH "RETURN VALUE" .PP The number of rows affected or returned by the command. .SH "EXAMPLES" .PP In the following examples, error checking with catch has been omitted for clarity. .PP Insert a row and save the OID in result_oid: .nf pg_execute -oid result_oid $pgconn "INSERT INTO mytable VALUES (1);" .fi .PP Print the columns item and value from each row: .nf pg_execute -array d $pgconn "SELECT item, value FROM mytable;" { puts "Item=$d(item) Value=$d(value)" } .fi .PP Find the maximum and minimum values and store them in $s(max) and $s(min): .nf pg_execute -array s $pgconn "SELECT max(value) AS max, min(value) AS min FROM mytable;" .fi .PP Find the maximum and minimum values and store them in $max and $min: .nf pg_execute $pgconn "SELECT max(value) AS max, min(value) AS min FROM mytable;" .fi pgtcl-2.8.0/doc/man/pg_getresult.n000066400000000000000000000023311420313073400170310ustar00rootroot00000000000000.\" This manpage has been automatically generated by docbook2man .\" from a DocBook document. This tool can be found at: .\" .\" Please send any bug reports, improvements, comments, patches, .\" etc. to Steve Cheng . .TH "PG_GETRESULT" "" "17 September 2020" "" "PostgreSQL Tcl Interface Documentation" .SH NAME pg_getresult \- process asychronous results .SH SYNOPSIS .nf pg_getresult \fIconn\fR .fi .SH "DESCRIPTION" .PP \fBpg_getresult\fR checks to see if any commands issued by \fBpg_sendquery\fR have completed. .PP This will return the same sort of result handle that \fBpg_exec\fR returns. .PP If there is no query currently being processed or all of the results have been obtained, \fBpg_getresult\fR returns nothing. .SH "ARGUMENTS" .TP \fB\fIconn\fB\fR The handle of a connection to the database to which asynchronous requests are being issued. .SH "RETURN VALUE" .PP If a query result is available, a command result object is returned. This handle can be passed to \fBpg_result\fR to obtain the results of the command. .PP If there is no query currently being processed or all of the results have been obtained, \fBpg_getresult\fR returns nothing. pgtcl-2.8.0/doc/man/pg_isbusy.n000066400000000000000000000014661420313073400163410ustar00rootroot00000000000000.\" This manpage has been automatically generated by docbook2man .\" from a DocBook document. This tool can be found at: .\" .\" Please send any bug reports, improvements, comments, patches, .\" etc. to Steve Cheng . .TH "PG_ISBUSY" "" "17 September 2020" "" "PostgreSQL Tcl Interface Documentation" .SH NAME pg_isbusy \- see if a query is busy .SH SYNOPSIS .nf pg_isbusy \fIconn\fR .fi .SH "DESCRIPTION" .PP \fBpg_isbusy\fR checks to see if the backend is busy handling a query or not. .SH "ARGUMENTS" .TP \fB\fIconn\fB\fR The handle of a connection to the database in which the large object exists. .SH "RETURN VALUE" .PP Returns 1 if the backend is busy, in which case a call to \fBpg_getresult\fR would block, otherwise it returns 0\&. pgtcl-2.8.0/doc/man/pg_listen.n000066400000000000000000000040141420313073400163110ustar00rootroot00000000000000.\" This manpage has been automatically generated by docbook2man .\" from a DocBook document. This tool can be found at: .\" .\" Please send any bug reports, improvements, comments, patches, .\" etc. to Steve Cheng . .TH "PG_LISTEN" "" "17 September 2020" "" "PostgreSQL Tcl Interface Documentation" .SH NAME pg_listen \- set or change a callback for asynchronous notification messages .SH SYNOPSIS .nf pg_listen \fIconn\fR \fInotifyName\fR [\fIcallbackCommand\fR] .fi .SH "DESCRIPTION" .PP \fBpg_listen\fR creates, changes, or cancels a request to listen for asynchronous notification messages from the PostgreSQL server. With a \fIcallbackCommand\fR parameter, the request is established, or the command string of an already existing request is replaced. With no \fIcallbackCommand\fR parameter, a prior request is canceled. .PP After a \fBpg_listen\fR request is established, the specified command string is executed whenever a notification message bearing the given name arrives from the server. This occurs when any PostgreSQL client application issues a \fBNOTIFY\fR command referencing that name. The command string is executed from the Tcl idle loop. That is the normal idle state of an application written with Tk. In non-Tk Tcl shells, you can execute \fBupdate\fR or \fBvwait\fR to cause the idle loop to be entered. .PP You should not invoke the SQL statements \fBLISTEN\fR or \fBUNLISTEN\fR directly when using \fBpg_listen\fR\&. \fBpgtcl\fR takes care of issuing those statements for you. But if you want to send a notification message yourself, invoke the SQL \fBNOTIFY\fR statement using \fBpg_exec\fR\&. .SH "ARGUMENTS" .TP \fB\fIconn\fB\fR The handle of the connection on which to listen for notifications. .TP \fB\fInotifyName\fB\fR The name of the notification condition to start or stop listening to. .TP \fB\fIcallbackCommand\fB\fR If present, provides the command string to execute when a matching notification arrives. .SH "RETURN VALUE" .PP None pgtcl-2.8.0/doc/man/pg_lo_close.n000066400000000000000000000014141420313073400166130ustar00rootroot00000000000000.\" This manpage has been automatically generated by docbook2man .\" from a DocBook document. This tool can be found at: .\" .\" Please send any bug reports, improvements, comments, patches, .\" etc. to Steve Cheng . .TH "PG_LO_CLOSE" "" "17 September 2020" "" "PostgreSQL Tcl Interface Documentation" .SH NAME pg_lo_close \- close a large object .SH SYNOPSIS .nf pg_lo_close \fIconn\fR \fIdescriptor\fR .fi .SH "DESCRIPTION" .PP \fBpg_lo_close\fR closes a large object. .SH "ARGUMENTS" .TP \fB\fIconn\fB\fR The handle of a connection to the database in which the large object exists. .TP \fB\fIdescriptor\fB\fR A descriptor for the large object from \fBpg_lo_open\fR\&. .SH "RETURN VALUE" .PP None pgtcl-2.8.0/doc/man/pg_lo_creat.n000066400000000000000000000016511420313073400166070ustar00rootroot00000000000000.\" This manpage has been automatically generated by docbook2man .\" from a DocBook document. This tool can be found at: .\" .\" Please send any bug reports, improvements, comments, patches, .\" etc. to Steve Cheng . .TH "PG_LO_CREAT" "" "17 September 2020" "" "PostgreSQL Tcl Interface Documentation" .SH NAME pg_lo_creat \- create a large object .SH SYNOPSIS .nf pg_lo_creat \fIconn\fR \fImode\fR .fi .SH "DESCRIPTION" .PP \fBpg_lo_creat\fR creates a large object. .SH "ARGUMENTS" .TP \fB\fIconn\fB\fR The handle of a connection to the database in which to create the large object. .TP \fB\fImode\fB\fR The access mode for the large object. It can be any or'ing together of INV_READ and INV_WRITE\&. The ``or'' operator is |\&. For example: .nf [pg_lo_creat $conn "INV_READ|INV_WRITE"] .fi .SH "RETURN VALUE" .PP The OID of the large object created. pgtcl-2.8.0/doc/man/pg_lo_export.n000066400000000000000000000017221420313073400170310ustar00rootroot00000000000000.\" This manpage has been automatically generated by docbook2man .\" from a DocBook document. This tool can be found at: .\" .\" Please send any bug reports, improvements, comments, patches, .\" etc. to Steve Cheng . .TH "PG_LO_EXPORT" "" "17 September 2020" "" "PostgreSQL Tcl Interface Documentation" .SH NAME pg_lo_export \- export a large object to a file .SH SYNOPSIS .nf pg_lo_export \fIconn\fR \fIloid\fR \fIfilename\fR .fi .SH "DESCRIPTION" .PP \fBpg_lo_export\fR writes the specified large object into a file. .SH "ARGUMENTS" .TP \fB\fIconn\fB\fR The handle of a connection to the database in which the large object exists. .TP \fB\fIloid\fB\fR The OID of the large object. .TP \fB\fIfilename\fB\fR Specifies the file into which the data is to be exported. .SH "RETURN VALUE" .PP None .SH "NOTES" .PP \fBpg_lo_export\fR must be called within a \fBBEGIN\fR/\fBCOMMIT\fR transaction block. pgtcl-2.8.0/doc/man/pg_lo_import.n000066400000000000000000000017151420313073400170240ustar00rootroot00000000000000.\" This manpage has been automatically generated by docbook2man .\" from a DocBook document. This tool can be found at: .\" .\" Please send any bug reports, improvements, comments, patches, .\" etc. to Steve Cheng . .TH "PG_LO_IMPORT" "" "17 September 2020" "" "PostgreSQL Tcl Interface Documentation" .SH NAME pg_lo_import \- import a large object from a file .SH SYNOPSIS .nf pg_lo_import \fIconn\fR \fIfilename\fR .fi .SH "DESCRIPTION" .PP \fBpg_lo_import\fR reads the specified file and places the contents into a new large object. .SH "ARGUMENTS" .TP \fB\fIconn\fB\fR The handle of a connection to the database in which to create the large object. .TP \fB\fIfilename\fB\fR Specified the file from which to import the data. .SH "RETURN VALUE" .PP The OID of the large object created. .SH "NOTES" .PP \fBpg_lo_import\fR must be called within a \fBBEGIN\fR/\fBCOMMIT\fR transaction block. pgtcl-2.8.0/doc/man/pg_lo_lseek.n000066400000000000000000000021421420313073400166100ustar00rootroot00000000000000.\" This manpage has been automatically generated by docbook2man .\" from a DocBook document. This tool can be found at: .\" .\" Please send any bug reports, improvements, comments, patches, .\" etc. to Steve Cheng . .TH "PG_LO_LSEEK" "" "17 September 2020" "" "PostgreSQL Tcl Interface Documentation" .SH NAME pg_lo_lseek \- seek to a position of a large object .SH SYNOPSIS .nf pg_lo_lseek \fIconn\fR \fIdescriptor\fR \fIoffset\fR \fIwhence\fR .fi .SH "DESCRIPTION" .PP \fBpg_lo_lseek\fR moves the current read/write position to \fIoffset\fR bytes from the position specified by \fIwhence\fR\&. .SH "ARGUMENTS" .TP \fB\fIconn\fB\fR The handle of a connection to the database in which the large object exists. .TP \fB\fIdescriptor\fB\fR A descriptor for the large object from \fBpg_lo_open\fR\&. .TP \fB\fIoffset\fB\fR The new seek position in bytes. .TP \fB\fIwhence\fB\fR Specified from where to calculate the new seek position: SEEK_CUR (from current position), SEEK_END (from end), or SEEK_SET (from start). .SH "RETURN VALUE" .PP None pgtcl-2.8.0/doc/man/pg_lo_open.n000066400000000000000000000015771420313073400164610ustar00rootroot00000000000000.\" This manpage has been automatically generated by docbook2man .\" from a DocBook document. This tool can be found at: .\" .\" Please send any bug reports, improvements, comments, patches, .\" etc. to Steve Cheng . .TH "PG_LO_OPEN" "" "17 September 2020" "" "PostgreSQL Tcl Interface Documentation" .SH NAME pg_lo_open \- open a large object .SH SYNOPSIS .nf pg_lo_open \fIconn\fR \fIloid\fR \fImode\fR .fi .SH "DESCRIPTION" .PP \fBpg_lo_open\fR opens a large object. .SH "ARGUMENTS" .TP \fB\fIconn\fB\fR The handle of a connection to the database in which the large object exists. .TP \fB\fIloid\fB\fR The OID of the large object. .TP \fB\fImode\fB\fR Specifies the access mode for the large object. Mode can be either r, w, or rw\&. .SH "RETURN VALUE" .PP A descriptor for use in later large-object commands. pgtcl-2.8.0/doc/man/pg_lo_read.n000066400000000000000000000022631420313073400164240ustar00rootroot00000000000000.\" This manpage has been automatically generated by docbook2man .\" from a DocBook document. This tool can be found at: .\" .\" Please send any bug reports, improvements, comments, patches, .\" etc. to Steve Cheng . .TH "PG_LO_READ" "" "17 September 2020" "" "PostgreSQL Tcl Interface Documentation" .SH NAME pg_lo_read \- read from a large object .SH SYNOPSIS .nf pg_lo_read \fIconn\fR \fIdescriptor\fR \fIbufVar\fR \fIlen\fR .fi .SH "DESCRIPTION" .PP \fBpg_lo_read\fR reads at most \fIlen\fR bytes from a large object into a variable named \fIbufVar\fR\&. .SH "ARGUMENTS" .TP \fB\fIconn\fB\fR The handle of a connection to the database in which the large object exists. .TP \fB\fIdescriptor\fB\fR A descriptor for the large object from \fBpg_lo_open\fR\&. .TP \fB\fIbufVar\fB\fR The name of a buffer variable to contain the large object segment. .TP \fB\fIlen\fB\fR The maximum number of bytes to read. .SH "RETURN VALUE" .PP The number of bytes actually read is returned; this could be less than the number requested if the end of the large object is reached first. In event of an error, the return value is negative. pgtcl-2.8.0/doc/man/pg_lo_tell.n000066400000000000000000000016531420313073400164530ustar00rootroot00000000000000.\" This manpage has been automatically generated by docbook2man .\" from a DocBook document. This tool can be found at: .\" .\" Please send any bug reports, improvements, comments, patches, .\" etc. to Steve Cheng . .TH "PG_LO_TELL" "" "17 September 2020" "" "PostgreSQL Tcl Interface Documentation" .SH NAME pg_lo_tell \- return the current seek position of a large object .SH SYNOPSIS .nf pg_lo_tell \fIconn\fR \fIdescriptor\fR .fi .SH "DESCRIPTION" .PP \fBpg_lo_tell\fR returns the current read/write position in bytes from the beginning of the large object. .SH "ARGUMENTS" .TP \fB\fIconn\fB\fR The handle of a connection to the database in which the large object exists. .TP \fB\fIdescriptor\fB\fR A descriptor for the large object from \fBpg_lo_open\fR\&. .SH "RETURN VALUE" .PP A zero-based offset in bytes suitable for input to \fBpg_lo_lseek\fR\&. pgtcl-2.8.0/doc/man/pg_lo_truncate.n000066400000000000000000000021501420313073400173310ustar00rootroot00000000000000.\" This manpage has been automatically generated by docbook2man .\" from a DocBook document. This tool can be found at: .\" .\" Please send any bug reports, improvements, comments, patches, .\" etc. to Steve Cheng . .TH "PG_LO_TRUNCATE" "" "17 September 2020" "" "PostgreSQL Tcl Interface Documentation" .SH NAME pg_lo_truncate \- Truncate a large object to a given length .SH SYNOPSIS .nf pg_lo_truncate \fIconn\fR \fIdescriptor\fR \fIlength\fR .fi .SH "DESCRIPTION" .PP \fBpg_lo_truncate\fR truncates the specified large object to the given length. If the length is greater than the current large object length, the large object is extended with null bytes. .SH "ARGUMENTS" .TP \fB\fIconn\fB\fR The handle of a connection to the database in which the large object exists. .TP \fB\fIdescriptor\fB\fR A descriptor for the large object from \fBpg_lo_open\fR\&. .TP \fB\fIlength\fB\fR The length to which the large object is to be truncated or padded. .SH "RETURN VALUE" .PP A zero-based offset in bytes suitable for input to \fBpg_lo_lseek\fR\&. pgtcl-2.8.0/doc/man/pg_lo_unlink.n000066400000000000000000000013641420313073400170120ustar00rootroot00000000000000.\" This manpage has been automatically generated by docbook2man .\" from a DocBook document. This tool can be found at: .\" .\" Please send any bug reports, improvements, comments, patches, .\" etc. to Steve Cheng . .TH "PG_LO_UNLINK" "" "17 September 2020" "" "PostgreSQL Tcl Interface Documentation" .SH NAME pg_lo_unlink \- delete a large object .SH SYNOPSIS .nf pg_lo_unlink \fIconn\fR \fIloid\fR .fi .SH "DESCRIPTION" .PP \fBpg_lo_unlink\fR deletes the specified large object. .SH "ARGUMENTS" .TP \fB\fIconn\fB\fR The handle of a connection to the database in which the large object exists. .TP \fB\fIloid\fB\fR The OID of the large object. .SH "RETURN VALUE" .PP None pgtcl-2.8.0/doc/man/pg_lo_write.n000066400000000000000000000023521420313073400166420ustar00rootroot00000000000000.\" This manpage has been automatically generated by docbook2man .\" from a DocBook document. This tool can be found at: .\" .\" Please send any bug reports, improvements, comments, patches, .\" etc. to Steve Cheng . .TH "PG_LO_WRITE" "" "17 September 2020" "" "PostgreSQL Tcl Interface Documentation" .SH NAME pg_lo_write \- write to a large object .SH SYNOPSIS .nf pg_lo_write \fIconn\fR \fIdescriptor\fR \fIbuf\fR \fIlen\fR .fi .SH "DESCRIPTION" .PP \fBpg_lo_write\fR writes at most \fIlen\fR bytes from a variable \fIbuf\fR to a large object. .SH "ARGUMENTS" .TP \fB\fIconn\fB\fR The handle of a connection to the database in which the large object exists. .TP \fB\fIdescriptor\fB\fR A descriptor for the large object from \fBpg_lo_open\fR\&. .TP \fB\fIbuf\fB\fR The string to write to the large object (not a variable name, but the value itself). .TP \fB\fIlen\fB\fR The maximum number of bytes to write. The number written will be the smaller of this value and the length of the string. .SH "RETURN VALUE" .PP The number of bytes actually written is returned; this will ordinarily be the same as the number requested. In event of an error, the return value is negative. pgtcl-2.8.0/doc/man/pg_null_value_string.n000066400000000000000000000024601420313073400205520ustar00rootroot00000000000000.\" This manpage has been automatically generated by docbook2man .\" from a DocBook document. This tool can be found at: .\" .\" Please send any bug reports, improvements, comments, patches, .\" etc. to Steve Cheng . .TH "PG_NULL_VALUE_STRING" "" "17 September 2020" "" "PostgreSQL Tcl Interface Documentation" .SH NAME pg_null_value_string \- define a value to be returned for NULL fields distinct from the default value of an empty string. .SH SYNOPSIS .nf pg_null_value_string [\fIstring\fR] .fi .SH "DESCRIPTION" .PP \fBpg_null_value_string\fR sets or retrieves a string to be returned in query results for fields whose value is NULL, making it possible to distinguish between NULL values an values that are not null but are comprised of an empty string. Without setting an alternative null value with this or with pg_result's -null_value_string, it is impossible to tell the difference between a NULL field value and one that is not null but empty. .SH "ARGUMENTS" .TP \fB\fIstring\fB\fR The string to be set that will be returned for null fields. .SH "RETURN VALUE" .PP Returns the string that is currently being returned for null fields. It will be the passed string value if one was passed, or, otherwise, the value currently being used. pgtcl-2.8.0/doc/man/pg_on_connection_loss.n000066400000000000000000000026001420313073400207050ustar00rootroot00000000000000.\" This manpage has been automatically generated by docbook2man .\" from a DocBook document. This tool can be found at: .\" .\" Please send any bug reports, improvements, comments, patches, .\" etc. to Steve Cheng . .TH "PG_ON_CONNECTION_LOSS" "" "17 September 2020" "" "PostgreSQL Tcl Interface Documentation" .SH NAME pg_on_connection_loss \- set or change a callback for unexpected connection loss .SH SYNOPSIS .nf pg_on_connection_loss \fIconn\fR [\fIcallbackCommand\fR] .fi .SH "DESCRIPTION" .PP \fBpg_on_connection_loss\fR creates, changes, or cancels a request to execute a callback command if an unexpected loss of connection to the database occurs. With a \fIcallbackCommand\fR parameter, the request is established, or the command string of an already existing request is replaced. With no \fIcallbackCommand\fR parameter, a prior request is canceled. .PP The callback command string is executed from the Tcl idle loop. That is the normal idle state of an application written with Tk. In non-Tk Tcl shells, you can execute \fBupdate\fR or \fBvwait\fR to cause the idle loop to be entered. .SH "ARGUMENTS" .TP \fB\fIconn\fB\fR The handle to watch for connection losses. .TP \fB\fIcallbackCommand\fB\fR If present, provides the command string to execute when connection loss is detected. .SH "RETURN VALUE" .PP None pgtcl-2.8.0/doc/man/pg_quote.n000066400000000000000000000042741420313073400161600ustar00rootroot00000000000000.\" This manpage has been automatically generated by docbook2man .\" from a DocBook document. This tool can be found at: .\" .\" Please send any bug reports, improvements, comments, patches, .\" etc. to Steve Cheng . .TH "PG_QUOTE" "" "17 September 2020" "" "PostgreSQL Tcl Interface Documentation" .SH NAME pg_quote \- escapes a string for inclusion into SQL statements .SH SYNOPSIS .nf pg_quote [-null] [\fIconnection\fR] \fIstring\fR .fi .SH "DESCRIPTION" .PP \fBpg_quote\fR quotes a string and escapes single quotes and backslashes within the string, making it safe for inclusion into SQL statements. .PP If a \fIconnection\fR is provided, the connection is used to customize the quoting process for the database referenced by the connection. .PP If the [-null] option is provided, then if the text matches the null string (either the empty string, or the null string specified in the \fIconnection\fR) then the SQL keyword NULL is returned, rather than a quoted string. .PP If you're doing something like .nf pg_exec $conn "insert into foo values ('$name');" .fi and name contains text includeng an unescaped single quote, such as Bob's House, at best the insert will fail, and at worst your software will be exploited via an SQL injection attack. Passing value strings through \fBpg_quote\fR will properly quote them for insertion into SQL commands. .nf pg_exec $conn "insert into foo values ([pg_quote $name]);" .fi \&...will make sure that any special characters that occur in name, such as single quote or backslash, will be properly quoted. .SH "ARGUMENTS" .TP \fB\fIstring\fB\fR The string to be escaped. .SH "RETURN VALUE" .PP Returns the string, escaped for inclusion into SQL queries. Note that it adds a set of single quotes around the outside of the string as well. .SH "SEE ALSO" .PP In most cases, with recent versions of SQL, it is better to use the native parameter insertion capabilities of the SQL server and protocol. If you are using a version of PostgreSQL more recent then 7.4, consider the optional parameter arguments to pg_exec and pg_sendquery, and the paramarray option to pg_exec, pg_sendquery, and pg_select. pgtcl-2.8.0/doc/man/pg_result.n000066400000000000000000000142411420313073400163340ustar00rootroot00000000000000.\" This manpage has been automatically generated by docbook2man .\" from a DocBook document. This tool can be found at: .\" .\" Please send any bug reports, improvements, comments, patches, .\" etc. to Steve Cheng . .TH "PG_RESULT" "" "17 September 2020" "" "PostgreSQL Tcl Interface Documentation" .SH NAME pg_result \- get information about a command result .SH SYNOPSIS .nf pg_result \fIresultHandle\fR \fIresultOption\fR .fi .SH "DESCRIPTION" .PP \fBpg_result\fR returns information about a command result created by a prior \fBpg_exec\fR\&. .PP You can keep a command result around for as long as you need it, but when you are done with it, be sure to free it by executing \fBpg_result -clear\fR\&. Otherwise, you have a memory leak, and \fBpgtcl\fR will eventually start complaining that you have created too many command result objects. .SH "ARGUMENTS" .TP \fB\fIresultHandle\fB\fR The handle of the command result. .TP \fB\fIresultOption\fB\fR One of the following options, specifying which piece of result information to return: .RS .TP \fB-status\fR The status of the result. .TP \fB-error [\fIdiagCode\fB]\fR The error message, if the status indicates an error, otherwise an empty string. \fIdiagCode\fR, if specified, requests data for a specific diagnostic code: .RS .TP \fBseverity\fR The severity; the field contents are ERROR, FATAL, or PANIC, in an error message, or WARNING, NOTICE, DEBUG, INFO, or LOG, in a notice message, or a localized translation of one of these. .TP \fBsqlstate\fR The SQLSTATE code for the error. (See PostgreSQL manual Appendix A). .TP \fBprimary\fR The primary human-readable error message (typically one line). .TP \fBdetail\fR An optional secondary error message carrying more detail abhout the problem, which may run to multiple lines. .TP \fBhint\fR An optional suggestion about what to do about the problem. This is intended to differ from detail in that it offers advice (potentially inappropriate) rather than hard facts. The result may run to multiple lines. .TP \fBposition\fR A string containing a decimal integer indicating an error cursor position as an index into the original statement string. The first character has index 1, and positions are measured in characters not bytes. .TP \fBinternal_position\fR This is the same as "position", but it is used when the cursor position refers to an internally generated command rather than the one submitted by the client. The first character has index 1, and positions are measured in characters not bytes. .TP \fBinternal_query\fR This is the text of a failed internally generated command. This could be, for example, a SQL query issued by a PL/pgSQL function. .TP \fBcontext\fR An indication of the context in which the error occurred. Presently this includes a call stack traceback of active PL functions. The trace is one entry per line, most recent first. .TP \fBfile\fR The filename of the source code location where the error was reported. .TP \fBline\fR The line number of the source code location where the error was reported. .TP \fBfunction\fR The name of the source code function reporting the error. .RE .TP \fB-foreach \fIarrayName\fB \fItclCode\fB\fR Iterates through each row of the result, filling \fIarrayName\fR with the columns and their values and executing \fItclCode\fR for each row in turn. Null columns will be not be present in the array. .TP \fB-conn\fR The connection that produced the result. .TP \fB-oid\fR If the command was an \fBINSERT\fR, the OID of the inserted row, otherwise 0. .TP \fB-numTuples\fR The number of rows (tuples) returned by the query. .TP \fB-cmdTuples\fR The number of rows (tuples) affected by the command. (This is similar to \fB-numTuples\fR but relevant to \fBINSERT\fR and \fBUPDATE\fR commands.) .TP \fB-numAttrs\fR The number of columns (attributes) in each row. .TP \fB-assign \fIarrayName\fB\fR Assign the results to an array, using subscripts of the form (rowNumber, columnName)\&. .TP \fB-foreach \fIarrayName\fB \fIcode\fB\fR For each resulting row assigns the results to the named array, using subscripts matching the column names, then executes the code body. .TP \fB-assignbyidx \fIarrayName\fB [\fIappendstr\fB]\fR Assign the results to an array using the values of the first column and the names of the remaining column as keys. If \fIappendstr\fR is given then it is appended to each key. In short, all but the first column of each row are stored into the array, using subscripts of the form (firstColumnValue, columnNameAppendStr)\&. .TP \fB-getTuple \fIrowNumber\fB\fR Returns the columns of the indicated row in a list. Row numbers start at zero. .TP \fB-tupleArray \fIrowNumber\fB \fIarrayName\fB\fR Stores the columns of the row in array \fIarrayName\fR, indexed by column names. Row numbers start at zero. If a field's value is null, sets an empty string or the default string, if a default string has been defined. .TP \fB-tupleArrayWithoutNulls \fIrowNumber\fB \fIarrayName\fB\fR Stores the columns of the row in array \fIarrayName\fR, indexed by column names. Row numbers start at zero. If a field's value is null, unsets the column from the array. .TP \fB-attributes\fR Returns a list of the names of the columns in the result. .TP \fB-lAttributes\fR Returns a list of sublists, {name typeOid typeSize} for each column. .TP \fB-list\fR Returns one list containing all the data returned by the query. .TP \fB-llist\fR Returns a list of lists, where each embedded list represents a tuple in the result. .TP \fB-dict\fR Returns a dict object with the results. This needs to have dictionary support built into Tcl (Tcl 8.5), and is experimental right now, since Tcl 8.5 has not been release yet, and the API could change. In order to enable this, you need to add -DHAVE_TCL_NEWDICTOBJ to the Makefile in the DEFS variable. .TP \fB-null_value_string [\fIstring\fB]\fR Defines or retrieves the string that will be returned for null values in query results. Defaults to whatever was set by \fBpg_null_value_string\fR but can be set here and, in this case, affects only this query result. .TP \fB-clear\fR Clear the command result object. .RE .SH "RETURN VALUE" .PP The result depends on the selected option, as described above. pgtcl-2.8.0/doc/man/pg_select.n000066400000000000000000000115151420313073400162760ustar00rootroot00000000000000.\" This manpage has been automatically generated by docbook2man .\" from a DocBook document. This tool can be found at: .\" .\" Please send any bug reports, improvements, comments, patches, .\" etc. to Steve Cheng . .TH "PG_SELECT" "" "17 September 2020" "" "PostgreSQL Tcl Interface Documentation" .SH NAME pg_select \- loop over the result of a query .SH SYNOPSIS .nf pg_select [\fI-rowbyrow\fR] [\fI-nodotfields\fR] [\fI-withoutnulls\fR] [\fI-paramarray var\fR] [\fI-variables\fR] [\fI-params\fR paramList] [\fI-count\fR countVar] \fIconn\fR \fIcommandString\fR \fIarrayVar\fR \fIprocedure\fR .fi .SH "DESCRIPTION" .PP \fBpg_select\fR submits a query (\fBSELECT\fR statement) to the PostgreSQL server and executes a given chunk of code for each row in the result. The \fIcommandString\fR must be a \fBSELECT\fR statement; anything else returns an error. The \fIarrayVar\fR variable is an array name used in the loop. For each row, \fIarrayVar\fR is filled in with the row values, using the column names as the array indices. Then the \fIprocedure\fR is executed. .PP In addition to the column values, the following special entries are made in the array (unless the [-nodotfields] flag is provided): .TP \fB\&.headers\fR A list of the column names returned by the query. .TP \fB\&.numcols\fR The number of columns returned by the query. .TP \fB\&.tupno\fR The current row number, starting at zero and incrementing for each iteration of the loop body. .PP If the [-param] flag is provided, then it contains a list of parameters that will replace "$1", "$2" and so on in the query string, as if it were a prepared statement. Be sure to properly escape or quote the "$" in the query. :) .PP If the [-paramarray] flag is provided, then a substitution is performed on the query, securely replacing each back-quote delimited name with the corresponding entry from the named array. If the array does not contain the named element, then NULL is substituted (similarly to the way an array created by -withoutnulls is generated). Each such name must occur in a location where a value or field name could appear. .PP If the [-variables] flag is provided, then embedded Tcl variables are passed as parameters. Variables can be flagged with ':' and array references and namespaces are supported. Complex variable names can usually be embedded with :{nasty-name-here} though no attempt at duplicating Tcl brace-escaping is made. If the variable does not exist, then NULL is substituted. .PP Notes: This substitution is performed by generating a positional parameter list and calling PQExecParams with a modified query containing $1, $2, ... where the original `names` appeared. This is a straight substitution, so if this mechanism is used the back-quote character (`) can not appear elsewhere in the query, even in a quoted string. There are a maximum of 99,999 names. .SH "ARGUMENTS" .TP \fB[-params list]\fR Perform parameter substitution using PQexecParams or PQSendQueryParams. .TP \fB[-paramarray arrayname]\fR Perform parameter substitution via `quoted` elements of the array using PQexecParams or PQSendQueryParams. .TP \fB[-variables]\fR Substitute Tcl variables found in the SQL string using PQexecParams or PQSendQueryParams. .TP \fB[-rowbyrow]\fR Perform the select in row-by-row mode. This means that the code block is called immediately results become available, rather than waiting for the query to complete. .TP \fB[-nodotfields]\fR Suppress generation of the pseudo-fields .headers, .numcols, and .tupno. .TP \fB[-withoutnulls]\fR If specified null columns will be unset from the array rather than being defined and containing the null string, typically an empty string. .TP \fB[-count countVar]\fR Set the variable "countVar" to the number of tuples returned for use in the block. .TP \fB\fIconn\fB\fR The handle of the connection on which to execute the query. .TP \fB\fIcommandString\fB\fR The SQL query to execute. .TP \fB\fIarrayVar\fB\fR An array variable for returned rows. .TP \fB\fIprocedure\fB\fR The procedure to run for each returned row. .SH "RETURN VALUE" .PP Number of rows actually processed. .SH "EXAMPLES" .PP This examples assumes that the table \fBtable1\fR has columns \fBcontrol\fR and \fBname\fR (and perhaps others): .nf pg_select $pgconn "SELECT * FROM table1;" array { puts [format "%5d %s" $array(control) $array(name)] } .fi .PP This example demonstrates how to use named parameters to securely perform queries on an SQL database: .nf # An array imported from some hive of scum and villainy like a web form. set form(first) {Andrew'); DROP TABLE students;--} set form(last) {Randall} # Secure extraction of data pg_select -paramarray form $pgconn "SELECT * from students WHERE firstname = `first` AND lastname = `last`;" row { lappend candidates $row(student_id) $row(firstname) $row(lastname) $row(age) } .fi pgtcl-2.8.0/doc/man/pg_sendquery.n000066400000000000000000000053731420313073400170430ustar00rootroot00000000000000.\" This manpage has been automatically generated by docbook2man .\" from a DocBook document. This tool can be found at: .\" .\" Please send any bug reports, improvements, comments, patches, .\" etc. to Steve Cheng . .TH "PG_SENDQUERY" "" "17 September 2020" "" "PostgreSQL Tcl Interface Documentation" .SH NAME pg_sendquery \- send a query string to the backend connection without waiting for a result .SH SYNOPSIS .nf pg_sendquery [\fI-paramarray\fR [\fI-variables\fR] arrayVar] \fIconn\fR \fIcommandString\fR [\fIargs\fR] .fi .SH "DESCRIPTION" .PP \fBpg_sendquery\fR submits a command to the PostgreSQL server. This function works like \fBpg_exec\fR, except that it does not return a result. Rather, the command is issued to the backend asynchronously. .PP The result is either an error message or nothing. An empty return indicates that the command was dispatched to the backend. .PP If the [-paramarray] flag is provided, then a substitution is performed on the query, securely replacing each back-quote delimited name with the corresponding entry from the named array. If the array does not contain the named element, then NULL is substituted (similarly to the way an array created by -withoutnulls is generated). Each such name must occur in a location where a value or field name could appear. See pg_select for more info. .PP If the [-variables] flag is provided, then embedded Tcl variables are passed as parameters. Variables can be flagged with ':' and array references and namespaces are supported. Complex variable names can usually be embedded with :{nasty-name-here} though no attempt at duplicating Tcl brace-escaping is made. If the variable does not exist, then NULL is substituted. Each such name must occur in a location where a value or field name could appear. See pg_select for more info. .SH "ARGUMENTS" .TP \fB[-paramarray arrayname]\fR Perform parameter substitution via `quoted` elements of the array using PQexecParams or PQSendQueryParams. .TP \fB[-variables]\fR Substitute Tcl variables found in the SQL string using PQexecParams or PQSendQueryParams. .TP \fB\fIconn\fB\fR The handle of the connection on which to execute the command. .TP \fB\fIcommandString\fB\fR The SQL command to execute. .TP \fB\fIargs\fB\fR For PostgreSQL versions greater than 7.4, \fIargs\fR consists of zero or more optional values that can be inserted, unquoted, into the SQL statement using $-style substitution. Nulls are represented by the string "NULL". .SH "RETURN VALUE" .PP A Tcl error will be returned if \fBpgtcl\fR was unable to issue the command. Otherwise, an empty string will be return. It is up to the developer to use \fBpg_getresult\fR to obtain results from commands issued with \fBpg_sendquery\fR\&. pgtcl-2.8.0/doc/man/pg_sendquery_prepared.n000066400000000000000000000030741420313073400207210ustar00rootroot00000000000000.\" This manpage has been automatically generated by docbook2man .\" from a DocBook document. This tool can be found at: .\" .\" Please send any bug reports, improvements, comments, patches, .\" etc. to Steve Cheng . .TH "PG_SENDQUERY_PREPARED" "" "17 September 2020" "" "PostgreSQL Tcl Interface Documentation" .SH NAME pg_sendquery_prepared \- send a request to execute a prepared statement to the backend connection, without waiting for a result .SH SYNOPSIS .nf pg_sendquery_prepared \fIconn\fR \fIstatementName\fR [\fIargs\fR] .fi .SH "DESCRIPTION" .PP \fBpg_sendquery_prepared\fR submits a command to the PostgreSQL server. This function works like \fBpg_exec\fR, except that it does not return a result. Rather, the command is issued to the backend asynchronously. .PP The result is either an error message or nothing. An empty return indicates that the command was dispatched to the backend. .SH "ARGUMENTS" .TP \fB\fIconn\fB\fR The handle of the connection on which to execute the command. .TP \fB\fIstatementName\fB\fR The name of the prepared SQL statement to execute asynchronously. .TP \fB\fIargs\fB\fR \fIargs\fR consists of zero or more optional values that can be inserted, unquoted, into the SQL statement using $-style substitution. .SH "RETURN VALUE" .PP A Tcl error will be returned if \fBpgtcl\fR was unable to issue the command. Otherwise, an empty string will be return. It is up to the developer to use \fBpg_getresult\fR to obtain results from commands issued with \fBpg_sendquery\fR\&. pgtcl-2.8.0/doc/man/pg_sqlite.n000066400000000000000000000246421420313073400163250ustar00rootroot00000000000000.\" This manpage has been automatically generated by docbook2man .\" from a DocBook document. This tool can be found at: .\" .\" Please send any bug reports, improvements, comments, patches, .\" etc. to Steve Cheng . .TH "PG_SQLITE" "" "17 September 2020" "" "PostgreSQL Tcl Interface Documentation" .SH NAME pg_sqlite \- implements a bridge between PostgreSQL and Sqlite3 using the Pgtcl and sqlite3 packages. .SH SYNOPSIS .nf pg_sqlite \fIsqlite_db\fR \fIcommand\fR [args] .fi .SH "DESCRIPTION" .PP \fBpg_sqlite\fR can import the results of a Postgres SQL query (previously made via \fBpg_exec\fR) directly into an sqlite3 table, export the results of an Sqlite SQL query into a Postgres table (via write_tabsep), or import TSV files directly into sqlite3. .PP The commands currently implemented are import_postgres_result, read_tabsep, write_tabsep, and read_tabsep_keylist. .SH "ARGUMENTS" .TP \fB\fIsqlite_db\fB\fR An Sqlite3 database handle previously created via the sqlite3 command. .TP \fB\fIcommand\fB\fR The command, one of info, import_postgres_result, read_tabsep, write_tabsep, or read_tabsep_keylist, .TP \fB\fIargs\fB\fR Command-specific arguments. .SH "COMMANDS" .PP \fBinfo\fR .nf \fBpg_sqlite\fR \fIsqlite_db\fR info [-busy] [-filename] [-db \fIdatabase_name\fR] .fi .PP Request information from an SQLITE database connection. Returns a key-value list containing the values requested if available. With no arguments, all available info is returned. .TP \fB-filename\fR Request the filename associated with a database. .TP \fB-db \fIdatabase\fB\fR For the -filename option, specify the database name (default "main"). .TP \fB-busy\fR Request a list of prepared commands that are currently busy. .PP \fBimport_postgres_result\fR .nf \fBpg_sqlite\fR \fIsqlite_db\fR import_postgres_result \fIhandle\fR [-rowbyrow] [-sql \fItarget_sql\fR] [-create \fInew_table\fR] [-into \fItable\fR] [-replace] [-as \fIname_type_list\fR] [-types \fItype_list\fR] [-names \fIname_list\fR] [-pkey \fIprimary_key\fR] [-sep \fIseparator\fR] [-null \fInull_string\fR] [-poll_interval \fIrows\fR] [-recommit \fIrows\fR] [-check] [-max \fIcolumn-name variable-name\fR] .fi .PP Import the result of a PostgreSQL request into an sqlite3 table. .TP \fB\fIhandle\fB\fR A database or result handle. Normally, you would call \fBpg_exec\fR and pass the result handle to \fBpg_sqlite\fR here. If you are using row_by_row mode, though, you use pg_sendquery and pass the PostgreSQL database handle here. .TP \fB-rowbyrow\fR Perform the request using row-by-row mode. This injects the data to sqlite directly without making an internal copy, but the result may be incomplete or inconsistent if an error occurs during the request. .TP \fB-sep \fIseparator\fB\fR String to use to separate columns. Default is "\\t" (tab). .TP \fB-null \fInull_string\fB\fR String to use to indicate a null value. Default is to treat all strings literally. .TP \fB-sql \fItarget_sql\fB\fR An INSERT statement, suitable to be compiled into a prepared statement to be applied to each row. For example "INSERT INTO newtable (id, name, value) VALUES (?,?,?)" .TP \fB-create \fInew_table\fB\fR A table to be created in sqlite. The names and types of columns, and the primary key, must be provided. .TP \fB-into \fItable\fB\fR An existing sqlite table to insert the data. The names of the columns must be provided, if the type can not be inferred it will be assumed to be "text". .TP \fB-replace\fR When performing the insert on an existing or newly create table, use "INSERT OR REPLACE" semantics. Not compatible with "-sql". .TP \fB-as \fIname-type-list\fB\fR A list of alternating column names and types. See note on types. .TP \fB-types \fItype-list\fB\fR A list of column types. See note on types. .TP \fB-names \fIname-list\fB\fR A list of column names. .TP \fB-pkey \fIprimary_key\fB\fR A list containing key names and optional sorting to indicate primary key where needed. For example \fB-pkey {{clock ASC} {sequence ASC}}\fR\&. .TP \fB-poll_interval \fIcount\fB\fR Call DoOneEvent() every \fIcount\fR rows to keep the event loop alive during long transactions. .TP \fB-recommit \fIcount\fB\fR Chunk the operation in transactions, with one transaction every \fIcount\fR rows. .TP \fB-check\fR Check (via a SELECT) whether the exact row is already present, and skip inserting the row if so. This avoids bloating the WAL log during large re-loads of databases, at some performance cost. .TP \fB-max \fIcolumn-name variable-name\fB\fR Set $variable-name to the maximum value of column-name imported. .PP \fBwrite_tabsep\fR .nf \fBpg_sqlite\fR \fIsqlite_db\fR write_tabsep \fIhandle\fR \fIsql\fR [\fIsql\fR] [-sep \fIseparator\fR] [-null \fInull_string\fR] [-poll_interval \fIrows\fR] .fi .PP Write the results of the provided \fIsql\fR to a file handle .PP This command may be used to export sqlite3 data to postgres. You issue a \fBCOPY FROM STDIN ... FORMAT text\fR command, then use \fBpg_sqlite write_tabsep ...\fR to write the data directly to the Postgresql handle, followed by writing the terminator line to the same handle. See the PostgreSQL documentation on the "COPY" command for more details. .TP \fB\fIhandle\fB\fR File handle. .TP \fB-sep \fIseparator\fB\fR String to use to separate columns. Default is "\\t" (tab). .TP \fB-null \fInull_string\fB\fR String to use to indicate a null value. Default is to treat all strings literally. .TP \fB-poll_interval \fIcount\fB\fR Call DoOneEvent() every \fIcount\fR rows to keep the event loop alive during long transactions. .PP \fBread_tabsep\fR .nf \fBpg_sqlite\fR \fIsqlite_db\fR read_tabsep [-row \fIsingle_tab_separated_row\fR] [-file \fIfile_handle\fR] [-sql \fItarget_sql\fR] [-create \fInew_table\fR] [-into \fItable\fR] [-replace] [-as \fIname_type_list\fR] [-types \fItype_list\fR] [-names \fIname_list\fR] [-pkey \fIprimary_key\fR] [-sep \fIseparator\fR] [-null \fInull_string\fR] [-poll_interval \fIrows\fR] [-recommit \fIrows\fR] [-check] .fi .PP Read a previously opened file into an sqlite3 table. .TP \fB-row \fIsingle_tab_separated_row\fB\fR An already read tab-separated line. .TP \fB-file \fIfile_handle\fB\fR An open file consistion of tab-separated rows. .TP \fB-sep \fIseparator\fB\fR String to use to separate columns. Default is "\\t" (tab). .TP \fB-null \fInull_string\fB\fR String to use to indicate a null value. Default is to treat all strings literally. .TP \fB-sql \fItarget_sql\fB\fR An INSERT statement, suitable to be compiled into a prepared statement to be applied to each row. For example "INSERT INTO newtable (id, name, value) VALUES (?,?,?)" .TP \fB-create \fInew_table\fB\fR A table to be created in sqlite. The names and types of columns, and the primary key, must be provided. .TP \fB-into \fItable\fB\fR An existing sqlite table to insert the data. The names of the columns must be provided, if the type can not be inferred it will be assumed to be "text". .TP \fB-replace\fR When performing the insert on an existing or newly create table, use "INSERT OR REPLACE" semantics. Not compatible with "-sql". .TP \fB-as \fIname-type-list\fB\fR A list of alternating column names and types. See note on types. .TP \fB-types \fItype-list\fB\fR A list of column types. See note on types. .TP \fB-names \fIname-list\fB\fR A list of column names. .TP \fB-pkey \fIprimary_key\fB\fR A list containing key names and optional sorting to indicate primary key where needed. For example \fB-pkey {{clock ASC} {sequence ASC}}\fR\&. .TP \fB-poll_interval \fIcount\fB\fR Call DoOneEvent() every \fIcount\fR rows to keep the event loop alive during long transactions. .TP \fB-recommit \fIcount\fB\fR Chunk the operation in transactions, with one transaction every \fIcount\fR rows. .TP \fB-check\fR Check (via a SELECT) whether the exact row is already present, and skip inserting the row if so. This avoids bloating the WAL log during large re-loads of databases, at some performance cost. .PP \fBread_tabsep_keylist\fR .nf \fBpg_sqlite\fR \fIsqlite_db\fR read_tabsep_keylist [-row \fIsingle_tab_separated_row\fR] [-file \fIfile_handle\fR] [-create \fInew_table\fR] [-into \fItable\fR] [-replace] [-as \fIname_type_list\fR] [-names \fIname_list\fR] [-pkey \fIprimary_key\fR] [-sep \fIseparator\fR] [-null \fInull_string\fR] [-poll_interval \fIrows\fR] [-recommit \fIrows\fR] .fi .PP Read a previously opened file containing alternating key-value columns into an sqlite3 table. .TP \fB-row \fIsingle_tab_separated_row\fB\fR An already read tab-separated key-value list line. .TP \fB-file \fIfile_handle\fB\fR An open file consistion of tab-separated key-value list rows. .TP \fB-sep \fIseparator\fB\fR String to use to separate columns. Default is "\\t" (tab). .TP \fB-null \fInull_string\fB\fR String to use to indicate a null value. Default is to treat all strings literally. .TP \fB-create \fInew_table\fB\fR A table to be created in sqlite. The names and types of columns, and the primary key, must be provided. .TP \fB-into \fItable\fB\fR An existing sqlite table to insert the data. The names of the columns must be provided, if the type can not be inferred it will be assumed to be "text". .TP \fB-replace\fR When performing the insert on an existing or newly create table, use "INSERT OR REPLACE" semantics. Not compatible with "-sql". .TP \fB-as \fIname-type-list\fB\fR A list of alternating column names and types. See note on types. .TP \fB-names \fIname-list\fB\fR A list of column names. .TP \fB-pkey \fIprimary_key\fB\fR A list containing key names and optional sorting to indicate primary key where needed. For example \fB-pkey {{clock ASC} {sequence ASC}}\fR\&. .TP \fB-poll_interval \fIcount\fB\fR Call DoOneEvent() every \fIcount\fR rows to keep the event loop alive during long transactions. .TP \fB-recommit \fIcount\fB\fR Chunk the operation in transactions, with one transaction every \fIcount\fR rows. .SH "TYPES" .PP \fBA note on types:\fR \fBpg_sqlite\fR supports four types: integer (or int), boolean (or bool), double (or real), and text\&. Integer, double, and text match both sqlite and postgresql types. Boolean is an integer type in sqlite, and boolean in postgresql, and converts postgresql boolean values (such as 'yes', 'no', 'true', or 'false') to integer 1 and 0. .PP In addition, \fBpg_sqlite\fR will accept PostgreSQL boolean values for the integer type. This may be made conditional on a "strict" mode in the future. .SH "RETURN VALUE" .PP Number of rows imported or exported. .SH "SEE ALSO" .PP Sqlite 3 pgtcl-2.8.0/doc/man/pg_unescape_bytea.n000066400000000000000000000013311420313073400200010ustar00rootroot00000000000000.\" This manpage has been automatically generated by docbook2man .\" from a DocBook document. This tool can be found at: .\" .\" Please send any bug reports, improvements, comments, patches, .\" etc. to Steve Cheng . .TH "PG_UNESCAPE_BYTEA" "" "17 September 2020" "" "PostgreSQL Tcl Interface Documentation" .SH NAME pg_unescape_bytea \- unescapes a binary string. .SH SYNOPSIS .nf pg_unescape_bytea \fIstring\fR .fi .SH "DESCRIPTION" .PP \fBpg_unescape_bytea\fR unescapes a binary string, when retrieving from the backend. .SH "ARGUMENTS" .TP \fB\fIbinary_string\fB\fR The string to be unescaped. .SH "RETURN VALUE" .PP Returns the binary string. pgtcl-2.8.0/doc/stylesheet.dsl000066400000000000000000000515751420313073400163060ustar00rootroot00000000000000 ]]> ]]> ]]> ]> (define draft-mode #f) (define pgsql-docs-list "pgsql-docs@postgresql.org") ;; Don't show manpage volume numbers (define %refentry-xref-manvolnum% #f) ;; Don't use graphics for callouts. (We could probably do that, but ;; it needs extra work.) (define %callout-graphics% #f) ;; Show comments during the development stage. (define %show-comments% draft-mode) ;; Don't append period if run-in title ends with any of these ;; characters. We had to add the colon here. This is fixed in ;; stylesheets version 1.71, so it can be removed sometime. (define %content-title-end-punct% '(#\. #\! #\? #\:)) ;; No automatic punctuation after honorific name parts (define %honorific-punctuation% "") ;; Change display of some elements (element command ($mono-seq$)) (element envar ($mono-seq$)) (element lineannotation ($italic-seq$)) (element literal ($mono-seq$)) (element structfield ($mono-seq$)) (element structname ($mono-seq$)) (element symbol ($mono-seq$)) (element token ($mono-seq$)) (element type ($mono-seq$)) (element (programlisting emphasis) ($bold-seq$)) ;; to highlight sections of code ;; Special support for Tcl synopses (element optional (if (equal? (attribute-string (normalize "role")) "tcl") (make sequence (literal "?") ($charseq$) (literal "?")) (make sequence (literal %arg-choice-opt-open-str%) ($charseq$) (literal %arg-choice-opt-close-str%)))) ;; Avoid excessive cross-reference labels (define (auto-xref-indirect? target ancestor) (cond ; ;; Always add indirect references to another book ; ((member (gi ancestor) (book-element-list)) ; #t) ;; Add indirect references to the section or component a block ;; is in iff chapters aren't autolabelled. (Otherwise "Figure 1-3" ;; is sufficient) ((and (member (gi target) (block-element-list)) (not %chapter-autolabel%)) #t) ;; Add indirect references to the component a section is in if ;; the sections are not autolabelled ((and (member (gi target) (section-element-list)) (member (gi ancestor) (component-element-list)) (not %section-autolabel%)) #t) (else #f))) ;; Bibliography things ;; Use the titles of bibliography entries in cross-references (define biblio-xref-title #t) ;; Process bibliography entry components in the order shown below, not ;; in the order they appear in the document. (I suppose this should ;; be made to fit some publishing standard.) (define %biblioentry-in-entry-order% #f) (define (biblioentry-inline-elements) (list (normalize "author") (normalize "authorgroup") (normalize "title") (normalize "subtitle") (normalize "volumenum") (normalize "edition") (normalize "othercredit") (normalize "contrib") (normalize "editor") (normalize "publishername") (normalize "confgroup") (normalize "publisher") (normalize "isbn") (normalize "issn") (normalize "pubsnumber") (normalize "date") (normalize "pubdate") (normalize "pagenums") (normalize "bibliomisc"))) (mode biblioentry-inline-mode (element confgroup (make sequence (literal "Proc. ") (next-match))) (element isbn (make sequence (literal "ISBN ") (process-children))) (element issn (make sequence (literal "ISSN ") (process-children)))) ;; The rules in the default stylesheet for productname format it as a ;; paragraph. This may be suitable for productname directly within ;; *info, but it's nonsense when productname is used inline, as we do. (mode set-titlepage-recto-mode (element (para productname) ($charseq$))) (mode set-titlepage-verso-mode (element (para productname) ($charseq$))) (mode book-titlepage-recto-mode (element (para productname) ($charseq$))) (mode book-titlepage-verso-mode (element (para productname) ($charseq$))) ;; Add more here if needed... string (time) #t))))) ;; Create an index (define html-index #t) ;; Block elements are allowed in PARA in DocBook, but not in P in ;; HTML. With %fix-para-wrappers% turned on, the stylesheets attempt ;; to avoid putting block elements in HTML P tags by outputting ;; additional end/begin P pairs around them. (define %fix-para-wrappers% #t) ;; ...but we need to do some extra work to make the above apply to PRE ;; as well. (mostly pasted from dbverb.dsl) (define ($verbatim-display$ indent line-numbers?) (let ((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$) (make element gi: "TR" (make element gi: "TD" content))) (make sequence (para-check) content (para-check 'restart))))) ;; ...and for notes. (element note (make sequence (para-check) ($admonition$) (para-check 'restart))) ;;; XXX The above is very ugly. It might be better to run 'tidy' on ;;; the resulting *.html files. ;; Format multiple terms in varlistentry vertically, instead ;; of comma-separated. (element (varlistentry term) (make sequence (process-children-trim) (if (not (last-sibling?)) (make empty-element gi: "BR") (empty-sosofo)))) ]]> (string->number (attribute-string (normalize "columns"))) 0) (string->number (attribute-string (normalize "columns"))) 1) 1)) (members (select-elements (children (current-node)) (normalize "member")))) (cond ((equal? type (normalize "inline")) (if (equal? (gi (parent (current-node))) (normalize "para")) (process-children) (make paragraph space-before: %para-sep% space-after: %para-sep% start-indent: (inherited-start-indent)))) ((equal? type (normalize "vert")) (my-simplelist-vert members)) ((equal? type (normalize "horiz")) (simplelist-table 'row cols members))))) (element member (let ((type (inherited-attribute-string (normalize "type")))) (cond ((equal? type (normalize "inline")) (make sequence (process-children) (if (not (last-sibling?)) (literal ", ") (literal "")))) ((equal? type (normalize "vert")) (make paragraph space-before: 0pt space-after: 0pt)) ((equal? type (normalize "horiz")) (make paragraph quadding: 'start (process-children)))))) ;; Jadetex doesn't handle links to the content of tables, so ;; indexterms that point to table entries will go nowhere. We fix ;; this by pointing the index entry to the table itself instead, which ;; should be equally useful in practice. (define (find-parent-table nd) (let ((table (ancestor-member nd ($table-element-list$)))) (if (node-list-empty? table) nd table))) ;; (The function below overrides the one in print/dbindex.dsl.) (define (indexentry-link nd) (let* ((id (attribute-string (normalize "role") nd)) (prelim-target (find-indexterm id)) (target (find-parent-table prelim-target)) (preferred (not (node-list-empty? (select-elements (children (current-node)) (normalize "emphasis"))))) (sosofo (if (node-list-empty? target) (literal "?") (make link destination: (node-list-address target) (with-mode toc-page-number-mode (process-node-list target)))))) (if preferred (make sequence font-weight: 'bold sosofo) sosofo))) ;; By default, the part and reference title pages get wrong page ;; numbers: The first title page gets roman numerals carried over from ;; preface/toc -- we want arabic numerals. We also need to make sure ;; that page-number-restart is set of #f explicitly, because otherwise ;; it will carry over from the previous component, which is not good. ;; ;; (This looks worse than it is. It's copied from print/dbttlpg.dsl ;; and common/dbcommon.dsl and modified in minor detail.) (define (first-part?) (let* ((book (ancestor (normalize "book"))) (nd (ancestor-member (current-node) (append (component-element-list) (division-element-list)))) (bookch (children book))) (let loop ((nl bookch)) (if (node-list-empty? nl) #f (if (equal? (gi (node-list-first nl)) (normalize "part")) (if (node-list=? (node-list-first nl) nd) #t #f) (loop (node-list-rest nl))))))) (define (first-reference?) (let* ((book (ancestor (normalize "book"))) (nd (ancestor-member (current-node) (append (component-element-list) (division-element-list)))) (bookch (children book))) (let loop ((nl bookch)) (if (node-list-empty? nl) #f (if (equal? (gi (node-list-first nl)) (normalize "reference")) (if (node-list=? (node-list-first nl) nd) #t #f) (loop (node-list-rest nl))))))) (define (part-titlepage elements #!optional (side 'recto)) (let ((nodelist (titlepage-nodelist (if (equal? side 'recto) (reference-titlepage-recto-elements) (reference-titlepage-verso-elements)) elements)) ;; partintro is a special case... (partintro (node-list-first (node-list-filter-by-gi elements (list (normalize "partintro")))))) (if (part-titlepage-content? elements side) (make simple-page-sequence page-n-columns: %titlepage-n-columns% ;; Make sure that page number format is correct. page-number-format: ($page-number-format$) ;; Make sure that the page number is set to 1 if this is the ;; first part in the book page-number-restart?: (first-part?) input-whitespace-treatment: 'collapse use: default-text-style ;; This hack is required for the RTF backend. If an external-graphic ;; is the first thing on the page, RTF doesn't seem to do the right ;; thing (the graphic winds up on the baseline of the first line ;; of the page, left justified). This "one point rule" fixes ;; that problem. (make paragraph line-spacing: 1pt (literal "")) (let loop ((nl nodelist) (lastnode (empty-node-list))) (if (node-list-empty? nl) (empty-sosofo) (make sequence (if (or (node-list-empty? lastnode) (not (equal? (gi (node-list-first nl)) (gi lastnode)))) (part-titlepage-before (node-list-first nl) side) (empty-sosofo)) (cond ((equal? (gi (node-list-first nl)) (normalize "subtitle")) (part-titlepage-subtitle (node-list-first nl) side)) ((equal? (gi (node-list-first nl)) (normalize "title")) (part-titlepage-title (node-list-first nl) side)) (else (part-titlepage-default (node-list-first nl) side))) (loop (node-list-rest nl) (node-list-first nl))))) (if (and %generate-part-toc% %generate-part-toc-on-titlepage% (equal? side 'recto)) (make display-group (build-toc (current-node) (toc-depth (current-node)))) (empty-sosofo)) ;; PartIntro is a special case (if (and (equal? side 'recto) (not (node-list-empty? partintro)) %generate-partintro-on-titlepage%) ($process-partintro$ partintro #f) (empty-sosofo))) (empty-sosofo)))) (define (reference-titlepage elements #!optional (side 'recto)) (let ((nodelist (titlepage-nodelist (if (equal? side 'recto) (reference-titlepage-recto-elements) (reference-titlepage-verso-elements)) elements)) ;; partintro is a special case... (partintro (node-list-first (node-list-filter-by-gi elements (list (normalize "partintro")))))) (if (reference-titlepage-content? elements side) (make simple-page-sequence page-n-columns: %titlepage-n-columns% ;; Make sure that page number format is correct. page-number-format: ($page-number-format$) ;; Make sure that the page number is set to 1 if this is the ;; first part in the book page-number-restart?: (first-reference?) input-whitespace-treatment: 'collapse use: default-text-style ;; This hack is required for the RTF backend. If an external-graphic ;; is the first thing on the page, RTF doesn't seem to do the right ;; thing (the graphic winds up on the baseline of the first line ;; of the page, left justified). This "one point rule" fixes ;; that problem. (make paragraph line-spacing: 1pt (literal "")) (let loop ((nl nodelist) (lastnode (empty-node-list))) (if (node-list-empty? nl) (empty-sosofo) (make sequence (if (or (node-list-empty? lastnode) (not (equal? (gi (node-list-first nl)) (gi lastnode)))) (reference-titlepage-before (node-list-first nl) side) (empty-sosofo)) (cond ((equal? (gi (node-list-first nl)) (normalize "author")) (reference-titlepage-author (node-list-first nl) side)) ((equal? (gi (node-list-first nl)) (normalize "authorgroup")) (reference-titlepage-authorgroup (node-list-first nl) side)) ((equal? (gi (node-list-first nl)) (normalize "corpauthor")) (reference-titlepage-corpauthor (node-list-first nl) side)) ((equal? (gi (node-list-first nl)) (normalize "editor")) (reference-titlepage-editor (node-list-first nl) side)) ((equal? (gi (node-list-first nl)) (normalize "subtitle")) (reference-titlepage-subtitle (node-list-first nl) side)) ((equal? (gi (node-list-first nl)) (normalize "title")) (reference-titlepage-title (node-list-first nl) side)) (else (reference-titlepage-default (node-list-first nl) side))) (loop (node-list-rest nl) (node-list-first nl))))) (if (and %generate-reference-toc% %generate-reference-toc-on-titlepage% (equal? side 'recto)) (make display-group (build-toc (current-node) (toc-depth (current-node)))) (empty-sosofo)) ;; PartIntro is a special case (if (and (equal? side 'recto) (not (node-list-empty? partintro)) %generate-partintro-on-titlepage%) ($process-partintro$ partintro #f) (empty-sosofo))) (empty-sosofo)))) ]]> pgtcl-2.8.0/generic/000077500000000000000000000000001420313073400142435ustar00rootroot00000000000000pgtcl-2.8.0/generic/libpgtcl.h000066400000000000000000000011541420313073400162150ustar00rootroot00000000000000/*------------------------------------------------------------------------- * * libpgtcl.h * * libpgtcl is a tcl package for front-ends to interface with PostgreSQL. * It's a Tcl wrapper for libpq. * * Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * $Id$ * *------------------------------------------------------------------------- */ #ifndef LIBPGTCL_H #define LIBPGTCL_H #include EXTERN int Pgtcl_Init(Tcl_Interp *interp); extern int Pgtcl_SafeInit(Tcl_Interp *interp); #endif /* LIBPGTCL_H */ pgtcl-2.8.0/generic/pgtcl.c000066400000000000000000000144101420313073400155200ustar00rootroot00000000000000/*------------------------------------------------------------------------ * * pgtcl.c * * libpgtcl is a tcl package for front-ends to interface with PostgreSQL. * It's a Tcl wrapper for libpq. * * Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * * IDENTIFICATION * $Id$ * *------------------------------------------------------------------------- */ #include #include "libpgtcl.h" #include "pgtclCmds.h" #include "pgtclId.h" #ifdef HAVE_SQLITE3 #include "pgtclSqlite.h" #endif #ifdef WIN32 #include #endif #ifdef _MSC_VER /* Only do this when MSVC++ is compiling us. */ #ifdef USE_TCL_STUBS /* Mark this .obj as needing tcl's Stubs library. */ #pragma comment(lib, "tclstub" \ STRINGIFY(JOIN(TCL_MAJOR_VERSION,TCL_MINOR_VERSION)) ".lib") #if !defined(_MT) || !defined(_DLL) || defined(_DEBUG) /* * This fixes a bug with how the Stubs library was compiled. The * requirement for msvcrt.lib from tclstubXX.lib should be removed. */ #pragma comment(linker, "-nodefaultlib:msvcrt.lib") #endif #else /* Mark this .obj needing the import library */ #pragma comment(lib, "tcl" \ STRINGIFY(JOIN(TCL_MAJOR_VERSION,TCL_MINOR_VERSION)) ".lib") #endif #endif #undef TCL_STORAGE_CLASS #define TCL_STORAGE_CLASS DLLEXPORT /* END STUBS MUMBO JUMBO */ typedef struct { char *name; /* Name of command. */ char *name2; /* Name of command, in ::pg namespace. */ Tcl_ObjCmdProc *objProc; /* Command's object-based procedure. */ int protocol; /* version 2 or version 3 (>=7.4) of PG protocol */ } PgCmd; static PgCmd commands[] = { {"pg_conndefaults", "::pg::conndefaults", Pg_conndefaults, 2}, {"pg_connect", "::pg::connect", Pg_connect,2}, {"pg_disconnect", "::pg::disconnect", Pg_disconnect,2}, {"pg_exec", "::pg::sqlexec", Pg_exec,2}, {"pg_exec_prepared", "::pg::exec_prepared", Pg_exec_prepared,3}, {"pg_select", "::pg::select", Pg_select,2}, {"pg_result", "::pg::result", Pg_result,2}, {"pg_execute", "::pg::execute", Pg_execute,2}, {"pg_lo_open", "::pg::lo_open", Pg_lo_open,2}, {"pg_lo_close", "::pg::lo_close", Pg_lo_close,2}, {"pg_lo_read", "::pg::lo_read", Pg_lo_read,2}, {"pg_lo_write", "::pg::lo_write", Pg_lo_write,2}, {"pg_lo_lseek", "::pg::lo_lseek", Pg_lo_lseek,2}, {"pg_lo_creat", "::pg::lo_creat", Pg_lo_creat,2}, {"pg_lo_tell", "::pg::lo_tell", Pg_lo_tell,2}, {"pg_lo_truncate", "::pg::lo_truncate", Pg_lo_truncate,2}, {"pg_lo_unlink", "::pg::lo_unlink", Pg_lo_unlink,2}, {"pg_lo_import", "::pg::lo_import", Pg_lo_import,2}, {"pg_lo_export", "::pg::lo_export", Pg_lo_export,2}, {"pg_listen", "::pg::listen", Pg_listen,2}, {"pg_sendquery", "::pg::sendquery", Pg_sendquery,2}, {"pg_sendquery_prepared", "::pg::sendquery_prepared", Pg_sendquery_prepared,3}, {"pg_getresult", "::pg::getresult", Pg_getresult,2}, {"pg_set_single_row_mode", "::pg::set_single_row_mode", Pg_set_single_row_mode,3}, {"pg_isbusy", "::pg::isbusy", Pg_isbusy,2}, {"pg_blocking", "::pg::blocking", Pg_blocking,2}, {"pg_null_value_string", "::pg::null_value_string", Pg_null_value_string,2}, {"pg_cancelrequest", "::pg::cancelrequest", Pg_cancelrequest,2}, {"pg_on_connection_loss", "::pg::on_connection_loss", Pg_on_connection_loss,2}, {"pg_quote", "::pg::quote", Pg_quote,2}, {"pg_escape_string", "::pg::escape_string", Pg_quote,2}, {"pg_escape_bytea", "::pg::escape_bytea", Pg_escapeBytea,2}, {"pg_unescape_bytea", "::pg::unescape_bytea", Pg_unescapeBytea,2}, {"pg_dbinfo", "::pg::dbinfo", Pg_dbinfo,2}, {"pg_getdata", "::pg::getdata", Pg_getdata,2}, {"pg_sql", "::pg::sql", Pg_sql,2}, {"pg_copy_complete", "::pg::copy_complete", Pg_copy_complete, 3}, #ifdef HAVE_SQLITE3 {"pg_sqlite", "::pg::sqlite", Pg_sqlite, 3}, #endif {NULL, NULL, NULL, 0} }; /* * Pgtcl_Init * initialization package for the PGTCL Tcl package * */ EXTERN int Pgtcl_Init(Tcl_Interp *interp) { double tclversion; Tcl_Obj *tclVersionObj; PgCmd *cmdPtr; #ifdef WIN32 WSADATA wsaData; #endif #ifdef USE_TCL_STUBS if (Tcl_InitStubs(interp, "8.1", 0) == NULL) return TCL_ERROR; #endif #ifdef WIN32X /* * On Windows, need to explicitly load the libpq library to * force the call to WSAStartup. */ Tcl_Obj *tresult; if (LoadLibrary("libpq.dll") == NULL) { //char buf[32]; //sprintf(buf, "%d", GetLastError()); tresult = Tcl_NewStringObj("Cannot load \"libpq.dll\" (or dependant), error was "); Tcl_AppendToObj(tresult, GetLastError(), -1); Tcl_SetObjResult(interp, tresult); /* Tcl_AppendStringsToObj(Tcl_GetObjResult(interp), "Cannot load \"libpq.dll\" (or dependant), error was ", GetLastError(), NULL); */ return TCL_ERROR; } #endif #ifdef WIN32 if (WSAStartup(MAKEWORD(1, 1), &wsaData)) { /* * No really good way to do error handling here, since we * don't know how we were loaded */ return TCL_ERROR; } #endif /* * Tcl versions >= 8.1 use UTF-8 for their internal string * representation. Therefore PGCLIENTENCODING must be set to UNICODE * for these versions. */ if ((tclVersionObj = Tcl_GetVar2Ex(interp, "tcl_version", NULL, TCL_GLOBAL_ONLY)) == NULL) return TCL_ERROR; if (Tcl_GetDoubleFromObj(interp, tclVersionObj, &tclversion) == TCL_ERROR) return TCL_ERROR; if (tclversion >= 8.1) Tcl_PutEnv("PGCLIENTENCODING=UNICODE"); if(pgtclInitEncoding(interp) != TCL_OK) return TCL_ERROR; /* register all pgtcl commands */ for (cmdPtr = commands; cmdPtr->name != NULL; cmdPtr++) { Tcl_CreateObjCommand(interp, cmdPtr->name, cmdPtr->objProc, (ClientData) "::",NULL); Tcl_CreateObjCommand(interp, cmdPtr->name2, cmdPtr->objProc, (ClientData) "::pg::",NULL); } if (Tcl_Eval(interp, "namespace eval ::pg namespace export *") == TCL_ERROR) return TCL_ERROR; return Tcl_PkgProvide(interp, "Pgtcl", PACKAGE_VERSION); } int Pgtcl_SafeInit(Tcl_Interp *interp) { return Pgtcl_Init(interp); } pgtcl-2.8.0/generic/pgtclAppInit.c000066400000000000000000000055071420313073400170140ustar00rootroot00000000000000/* * pgtclAppInit.c * * a skeletal Tcl_AppInit that provides pgtcl initialization * to create a tclsh that can talk to pglite backends * * Portions Copyright (c) 1996-2000, PostgreSQL, Inc * Portions Copyright (c) 1993 The Regents of the University of California. * Copyright (c) 1994 Sun Microsystems, Inc. * Copyright (c) 1997-2007 Karl Lehenbauer, Brett Schwartz * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. */ #include #include /* * The following variable is a special hack that is needed in order for * Sun shared libraries to be used for Tcl. */ #ifdef NEED_MATHERR extern int matherr(); int *tclDummyMathPtr = (int *) matherr; #endif /* *---------------------------------------------------------------------- * * main * * This is the main program for the application. * * Results: * None: Tcl_Main never returns here, so this procedure never * returns either. * * Side effects: * Whatever the application does. * *---------------------------------------------------------------------- */ int main(argc, argv) int argc; /* Number of command-line arguments. */ char **argv; /* Values of command-line arguments. */ { Tcl_Main(argc, argv, Tcl_AppInit); return 0; /* Needed only to prevent compiler * warning. */ } /* *---------------------------------------------------------------------- * * Tcl_AppInit * * This procedure performs application-specific initialization. * Most applications, especially those that incorporate additional * packages, will have their own version of this procedure. * * Results: * Returns a standard Tcl completion code, and leaves an error * message in interp->result if an error occurs. * * Side effects: * Depends on the startup script. * *---------------------------------------------------------------------- */ int Tcl_AppInit(Tcl_Interp *interp) { if (Tcl_Init(interp) == TCL_ERROR) return TCL_ERROR; /* * Call the init procedures for included packages. Each call should * look like this: * * if (Mod_Init(interp) == TCL_ERROR) { return TCL_ERROR; } * * where "Mod" is the name of the module. */ if (Pgtcl_Init(interp) == TCL_ERROR) return TCL_ERROR; /* * Call Tcl_CreateCommand for application-specific commands, if they * weren't already created by the init procedures called above. */ /* * Specify a user-specific startup file to invoke if the application * is run interactively. Typically the startup file is "~/.apprc" * where "app" is the name of the application. If this line is * deleted then no user-specific startup file will be run under any * conditions. */ Tcl_SetVar(interp, "tcl_rcFileName", "~/.tclshrc", TCL_GLOBAL_ONLY); return TCL_OK; } pgtcl-2.8.0/generic/pgtclCmds.c000066400000000000000000004253421420313073400163410ustar00rootroot00000000000000/*------------------------------------------------------------------------- * * pgtclCmds.c * C functions which implement pg_* tcl commands * * Portions Copyright (c) 1996-2004, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * * IDENTIFICATION * $Id$ * *------------------------------------------------------------------------- */ #include #include #include #include #include "pgtclCmds.h" #include "pgtclId.h" #include "libpq/libpq-fs.h" /* large-object interface */ #include "tokenize.h" /* * Local function forward declarations */ static int execute_put_values(Tcl_Interp *interp, const char *array_varname, PGresult *result, char *nullString, int tupno); static int count_parameters(Tcl_Interp *interp, const char *queryString, int *nParamsPtr); static int expand_parameters(Tcl_Interp *interp, const char *queryString, int nParams, char *paramArrayName, char **newQueryStringPtr, const char ***paramValuesPtr, const char **bufferPtr); static int build_param_array(Tcl_Interp *interp, int nParams, Tcl_Obj *CONST objv[], const char ***paramValuesPtr, const char **bufferPtr); static void report_connection_error(Tcl_Interp *interp, PGconn *conn); #ifdef TCL_ARRAYS #define ISOCTAL(c) (((c) >= '0') && ((c) <= '7')) #define DIGIT(c) ((c) - '0') /* * translate_escape() * * This function performs in-place translation of a single C-style * escape sequence pointed by p. Curly braces { } and double-quote * are left escaped if they appear inside an array. * The value returned is the pointer to the last character (the one * just before the rest of the buffer). */ static inline char * translate_escape(char *p, int isArray) { char c, *q, *s; #ifdef TCL_ARRAYS_DEBUG_ESCAPE printf(" escape = '%s'\n", p); #endif /* Address of the first character after the escape sequence */ s = p + 2; switch (c = *(p + 1)) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': c = DIGIT(c); if (ISOCTAL(*s)) c = (c << 3) + DIGIT(*s++); if (ISOCTAL(*s)) c = (c << 3) + DIGIT(*s++); *p = c; break; case 'b': *p = '\b'; break; case 'f': *p = '\f'; break; case 'n': *p = '\n'; break; case 'r': *p = '\r'; break; case 't': *p = '\t'; break; case 'v': *p = '\v'; break; case '\\': case '{': case '}': case '"': /* * Backslahes, curly braces and double-quotes are left escaped * if they appear inside an array. They will be unescaped by * Tcl in Tcl_AppendElement. The buffer position is advanced * by 1 so that the this character is not processed again by * the caller. */ if (isArray) return p + 1; else *p = c; break; case '\0': /* * This means a backslash at the end of the string. It should * never happen but in that case replace the \ with a \0 but * don't shift the rest of the buffer so that the caller can * see the end of the string and terminate. */ *p = c; return p; break; default: /* * Default case, store the escaped character over the * backslash and shift the buffer over itself. */ *p = c; } /* Shift the rest of the buffer over itself after the current char */ q = p + 1; for (; *s;) *q++ = *s++; *q = '\0'; #ifdef TCL_ARRAYS_DEBUG_ESCAPE printf(" after = '%s'\n", p); #endif return p; } /* * tcl_value() * * This function does in-line conversion of a value returned by libpq * into a tcl string or into a tcl list if the value looks like the * representation of a postgres array. */ static char * tcl_value(char *value) { int literal, last; char *p; if (!value) return NULL; #ifdef TCL_ARRAYS_DEBUG printf("pq_value = '%s'\n", value); #endif last = strlen(value) - 1; if ((last >= 1) && (value[0] == '{') && (value[last] == '}')) { /* Looks like an array, replace ',' with spaces */ /* Remove the outer pair of { }, the last first! */ value[last] = '\0'; value++; literal = 0; for (p = value; *p; p++) { if (!literal) { /* We are at the list level, look for ',' and '"' */ switch (*p) { case '"': /* beginning of literal */ literal = 1; break; case ',': /* replace the ',' with space */ *p = ' '; break; } } else { /* We are inside a C string */ switch (*p) { case '"': /* end of literal */ literal = 0; break; case '\\': /* * escape sequence, translate it */ p = translate_escape(p, 1); break; } } if (!*p) break; } } else { /* Looks like a normal scalar value */ for (p = value; *p; p++) { if (*p == '\\') { /* * escape sequence, translate it */ p = translate_escape(p, 0); } if (!*p) break; } } #ifdef TCL_ARRAYS_DEBUG printf("tcl_value = '%s'\n\n", value); #endif return value; } #else /* TCL_ARRAYS */ #define tcl_value(x) x #endif /* TCL_ARRAYS */ static Tcl_Encoding utf8encoding = NULL; /* * Initialize utf8encoding */ int pgtclInitEncoding(Tcl_Interp *interp) { utf8encoding = Tcl_GetEncoding(interp, "utf-8"); if (utf8encoding != NULL) return TCL_OK; return TCL_ERROR; } // The following two functions "waste" a DStrings storage by not freeing it until it's needed again // This is a little sloppy but massively simplifies the use since just about every place it's used // has to handle a possible early error return // NOTE: only one of these can ever be in flight at any time. /* * Convert one utf string at a time to an external string, hiding the DString management. */ char *externalString(const char *utfString) { static Tcl_DString tmpds; static int allocated = 0; if(allocated) Tcl_DStringFree(&tmpds); allocated = 1; return Tcl_UtfToExternalDString(utf8encoding, utfString, -1, &tmpds); } /* * Convert one external string at a time to a utf string, hiding the DString management. */ char *utfString(const char *externalString) { static Tcl_DString tmpds; static int allocated = 0; if(allocated) Tcl_DStringFree(&tmpds); allocated = 1; return Tcl_ExternalToUtfDString(utf8encoding, externalString, -1, &tmpds); } // TODO something to simplify an array worth of external or utf strings in flight at a time /* * PGgetvalue() * * This function gets a field result string for a specified PGresult, tuple * number and field number. If the string is empty and the connection has * a non-empty null string value defined, the field is checked to see if * the returned field is actually null and, if so, the null string value * associated with the connection is returned. * * If array-into-list processing has been defined, it is also performed, * which is probably a bad idea, since it can be tricked by legitimate * data, but that's tcl_value's fault, if TCL_ARRAYS is defined. */ static char * PGgetvalue ( PGresult *result, char *nullString, int tupno, int fieldNumber ) { char *string; string = PQgetvalue (result, tupno, fieldNumber); /* if the returned string is empty, see if we have a non-empty null * string value set for this connection and, if so, see if the * value returned is null. If it is, return the null string. */ if (*string == '\0') { if ((nullString != NULL) && (*nullString != '\0')) { if (PQgetisnull (result, tupno, fieldNumber)) { return nullString; } } /* string is empty but is either not null or null string is empty, * return the empty string */ return string; } /* string is not empty */ return tcl_value (string); } /********************************** * pg_conndefaults syntax: pg_conndefaults the return result is a list describing the possible options and their current default values for a call to pg_connect with the new -conninfo syntax. Each entry in the list is a sublist of the format: {optname label dispchar dispsize value} **********************************/ int Pg_conndefaults(ClientData cData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { PQconninfoOption *options = PQconndefaults(); PQconninfoOption *option; if (objc != 1) { Tcl_WrongNumArgs(interp, 1, objv, ""); return TCL_ERROR; } if (options) { Tcl_Obj *resultList = Tcl_NewListObj(0, NULL); Tcl_SetListObj(resultList, 0, NULL); for (option = options; option->keyword != NULL; option++) { char *val = option->val ? option->val : ""; /* start a sublist */ Tcl_Obj *subList = Tcl_NewListObj(0, NULL); if (Tcl_ListObjAppendElement(interp, subList, Tcl_NewStringObj(option->keyword, -1)) == TCL_ERROR) return TCL_ERROR; if (Tcl_ListObjAppendElement(interp, subList, Tcl_NewStringObj(option->label, -1)) == TCL_ERROR) return TCL_ERROR; if (Tcl_ListObjAppendElement(interp, subList, Tcl_NewStringObj(option->dispchar, -1)) == TCL_ERROR) return TCL_ERROR; if (Tcl_ListObjAppendElement(interp, subList, Tcl_NewIntObj(option->dispsize)) == TCL_ERROR) return TCL_ERROR; if (Tcl_ListObjAppendElement(interp, subList, Tcl_NewStringObj(val, -1)) == TCL_ERROR) return TCL_ERROR; if (Tcl_ListObjAppendElement(interp, resultList, subList) == TCL_ERROR) return TCL_ERROR; } Tcl_SetObjResult(interp, resultList); PQconninfoFree(options); } return TCL_OK; } /* *---------------------------------------------------------------------- * * Pg_connect -- * * make a connection to a backend. * * Syntax: * pg_connect dbName [-host hostName] [-port portNumber] [-tty pqtty]] * pg_connect -conninfo "dbname=myydb host=myhost ..." * pg_connect -connlist [list dbname mydb host myhost ...] * pg_connect -connhandle myhandle * * Results: * the return result is either an error message or a handle for * a database connection. Handles start with the prefix "pgsql" * *---------------------------------------------------------------------- */ int Pg_connect(ClientData cData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { PGconn *conn; char *connhandle = NULL; int optIndex, i, skip = 0; Tcl_DString ds, utfds; Tcl_Obj *tresult; int async = 0; static const char *options[] = { "-host", "-port", "-tty", "-options", "-user", "-password", "-conninfo", "-connlist", "-connhandle", "-async", (char *)NULL }; enum options { OPT_HOST, OPT_PORT, OPT_TTY, OPT_OPTIONS, OPT_USER, OPT_PASSWORD, OPT_CONNINFO, OPT_CONNLIST, OPT_CONNHANDLE, OPT_ASYNC }; Tcl_DStringInit(&ds); if (objc == 1) { Tcl_DStringAppend(&ds, "pg_connect: database name missing\n", -1); Tcl_DStringAppend(&ds, "pg_connect databaseName [-host hostName] [-port portNumber] [-tty pgtty]\n", -1); Tcl_DStringAppend(&ds, "pg_connect -conninfo conninfoString\n", -1); Tcl_DStringAppend(&ds, "pg_connect -connlist [connlist]", -1); Tcl_DStringResult(interp, &ds); return TCL_ERROR; } i = objc%2 ? 1 : 2; while (i + 1 < objc) { char *nextArg = Tcl_GetString(objv[i + 1]); if (Tcl_GetIndexFromObj(interp, objv[i], options, "option", TCL_EXACT, &optIndex) != TCL_OK) return TCL_ERROR; switch ((enum options) optIndex) { case OPT_HOST: { Tcl_DStringAppend(&ds, " host=", -1); i += 2; break; } case OPT_PORT: { Tcl_DStringAppend(&ds, " port=", -1); i += 2; break; } case OPT_TTY: { Tcl_DStringAppend(&ds, " tty=", -1); i += 2; break; } case OPT_OPTIONS: { Tcl_DStringAppend(&ds, " options=", -1); i += 2; break; } case OPT_USER: { Tcl_DStringAppend(&ds, " user=", -1); i += 2; break; } case OPT_PASSWORD: { Tcl_DStringAppend(&ds, " password=", -1); i += 2; break; } case OPT_CONNINFO: { i += 2; break; } case OPT_CONNLIST: { Tcl_Obj **elemPtrs; int count, lelem; Tcl_ListObjGetElements(interp, objv[i + 1], &count, &elemPtrs); if (count % 2 != 0) { Tcl_WrongNumArgs(interp,1,objv,"-connlist {opt val ...}"); Tcl_DStringFree(&ds); return TCL_ERROR; } for (lelem = 0; lelem < count; lelem=lelem+2) { Tcl_DStringAppend(&ds, " ", -1); Tcl_DStringAppend(&ds, Tcl_GetString(elemPtrs[lelem]), -1); Tcl_DStringAppend(&ds, "=", -1); Tcl_DStringAppend(&ds, Tcl_GetString(elemPtrs[lelem+1]), -1); } i += 2; skip = 1; break; } case OPT_CONNHANDLE: { connhandle = nextArg; i += 2; skip = 1; break; } case OPT_ASYNC: { if (Tcl_GetBooleanFromObj(interp, objv[i + 1], &async) == TCL_ERROR) { Tcl_AddErrorInfo (interp, " while converting -async argument"); return TCL_ERROR; } i += 2; skip = 1; } } /** end switch **/ if (!skip) { Tcl_DStringAppend(&ds, nextArg, -1); } skip = 0; } /* end while */ /* * if even numbered args, then assume connect dbname ?option val? ... * and put dbname into conn string */ if (objc % 2 == 0) { if ((i % 2 != 0) || i != objc) { Tcl_WrongNumArgs(interp, 1, objv, "databaseName ?-host hostName? ?-port portNumber? ?-tty pgtty? ?-options pgoptions?"); Tcl_DStringFree(&ds); return TCL_ERROR; } Tcl_DStringAppend(&ds, " dbname=", -1); Tcl_DStringAppend(&ds, Tcl_GetString(objv[1]), -1); } Tcl_ExternalToUtfDString(NULL, Tcl_DStringValue(&ds), -1, &utfds); Tcl_DStringFree(&ds); if (async) { conn = PQconnectStart(Tcl_DStringValue(&utfds)); } else { conn = PQconnectdb(Tcl_DStringValue(&utfds)); } if (conn == NULL) { Tcl_SetResult(interp, "Could not allocate connection", TCL_STATIC); return TCL_ERROR; } Tcl_DStringFree(&utfds); if (PQstatus(conn) != CONNECTION_BAD) { if (PgSetConnectionId(interp, conn, connhandle)) { return TCL_OK; } } tresult = Tcl_NewStringObj("Connection to database failed\n", -1); if (PQstatus(conn) != CONNECTION_OK) { Tcl_AppendStringsToObj(tresult, PQerrorMessage(conn), NULL); } else { Tcl_AppendStringsToObj(tresult, "handle already exists", NULL); } Tcl_SetObjResult(interp, tresult); PQfinish(conn); return TCL_ERROR; } /********************************** * pg_disconnect close a backend connection syntax: pg_disconnect connection The argument passed in must be a connection pointer. **********************************/ int Pg_disconnect(ClientData cData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { Pg_ConnectionId *connid; Tcl_Channel conn_chan; const char *connString; Tcl_Obj *tresult; if (objc != 2) { Tcl_WrongNumArgs(interp, 1, objv, "connection"); return TCL_ERROR; } connString = Tcl_GetString(objv[1]); conn_chan = Tcl_GetChannel(interp, connString, 0); if (conn_chan == NULL) { tresult = Tcl_NewStringObj(connString, -1); Tcl_AppendStringsToObj(tresult, " is not a valid connection", NULL); Tcl_SetObjResult(interp, tresult); return TCL_ERROR; } /* Check that it is a PG connection and not something else */ connid = (Pg_ConnectionId *) Tcl_GetChannelInstanceData(conn_chan); if (connid->conn == NULL) return TCL_ERROR; /* * We use to call Tcl_UnregisterChannel here, but since * we have a command deletion callback now, that gets * taken care of there (PgDelCmdHandle), by deleting the command * here. */ if (connid->cmd_token != NULL) { Tcl_DeleteCommandFromToken(interp, connid->cmd_token); } return TCL_OK; } /* helper for build_param_array and other related functions. ** convert nParams strings in paramValues, lengths in paramLengths, ** return allocated buffer containing new strings in bufferPtr */ int array_to_utf8(Tcl_Interp *interp, const char **paramValues, int *paramLengths, int nParams, const char **bufferPtr) { int param; int charsWritten; char *nextDestByte, *paramsBuffer; int remaining; int lengthRequired = 0; for (param = 0; param < nParams; param++) { lengthRequired += paramLengths[param] + 1; } lengthRequired += 4; //(Tcl_UtfToExternal assumes it will need 4 bytes for the last character) nextDestByte = paramsBuffer = (char *)ckalloc(lengthRequired); remaining = lengthRequired; for(param = 0; param < nParams; param++) { int errcode; if(!paramLengths[param] || !paramValues[param]) { continue; } // the arguments to Tcl_UtfToExternal are hellish if( TCL_OK != (errcode = Tcl_UtfToExternal(interp, utf8encoding, paramValues[param], paramLengths[param], 0, NULL, nextDestByte, remaining, NULL, &charsWritten, NULL))) { Tcl_Obj *tresult; char errmsg[256]; sprintf(errmsg, "Errcode %d attempting to convert param %d: ", errcode, param); tresult = Tcl_NewStringObj(errmsg, -1); Tcl_AppendStringsToObj(tresult, paramValues[param], NULL); if(errcode == TCL_CONVERT_NOSPACE) { // CAN'T HAPPEN, check anyway sprintf(errmsg, " (%d bytes needed, %d bytes available)", paramLengths[param], remaining); Tcl_AppendStringsToObj(tresult, errmsg, NULL); } Tcl_SetObjResult(interp, tresult); ckfree(paramsBuffer); return errcode; } paramValues[param] = nextDestByte; nextDestByte += charsWritten; *nextDestByte++ = '\0'; remaining -= charsWritten + 1; } *bufferPtr = paramsBuffer; return TCL_OK; } /* build_param_array - helper for pg_exec and pg_sendquery */ /* If there are any extra params, allocate paramValues and fill it * with the string representations of all of the extra parameters * substituted on the command line. Otherwise nParams will be 0, * and PQexecParams will work just like PQexec (no $-substitutions). * The magic string NULL is replaced by a null value! // TODO - make this use null value string */ int build_param_array(Tcl_Interp *interp, int nParams, Tcl_Obj *CONST objv[], const char ***paramValuesPtr, const char **bufferPtr) { const char **paramValues = NULL; int *paramLengths = NULL; int param; if(nParams == 0) return TCL_OK; paramValues = (const char **)ckalloc (nParams * sizeof (char *)); paramLengths = (int *)ckalloc(nParams * sizeof(int)); for (param = 0; param < nParams; param++) { int newLength = 0; paramValues[param] = Tcl_GetStringFromObj(objv[param], &newLength); if (strcmp(paramValues[param], "NULL") == 0) { paramValues[param] = NULL; paramLengths[param] = 0; } else { paramLengths[param] = newLength; } } if (array_to_utf8(interp, paramValues, paramLengths, nParams, bufferPtr) != TCL_OK) { ckfree(paramValues); ckfree(paramLengths); return TCL_ERROR; } *paramValuesPtr = paramValues; return TCL_OK; } /********************************** * pg_exec send a query string to the backend connection syntax: pg_exec connection query [var1] [var2]... the return result is either an error message or a handle for a query result. Handles start with the prefix "pgsql" **********************************/ int Pg_exec(ClientData cData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { Pg_ConnectionId *connid; PGconn *conn; PGresult *result; const char *connString = NULL; const char *execString = NULL; char *newExecString = NULL; const char **paramValues = NULL; char *paramArrayName = NULL; const char *paramsBuffer = NULL; int nParams; int index; int useVariables = 0; enum positionalArgs {EXEC_ARG_CONN, EXEC_ARG_SQL, EXEC_ARGS}; int nextPositionalArg = EXEC_ARG_CONN; for(index = 1; index < objc && nextPositionalArg != EXEC_ARGS; index++) { char *arg = Tcl_GetString(objv[index]); if (arg[0] == '-' && arg[1] != '-') { // a legal SQL statement can start with "--" if(strcmp(arg, "-paramarray") == 0) { index++; paramArrayName = Tcl_GetString(objv[index]); } else if(strcmp(arg, "-variables") == 0) { useVariables = 1; } else { goto wrong_args; } } else { switch(nextPositionalArg) { case EXEC_ARG_CONN: connString = Tcl_GetString(objv[index]); nextPositionalArg = EXEC_ARG_SQL; break; case EXEC_ARG_SQL: execString = Tcl_GetString(objv[index]); nextPositionalArg = EXEC_ARGS; break; } } } if (nextPositionalArg != EXEC_ARGS) { wrong_args: Tcl_WrongNumArgs(interp, 1, objv, "?-variables? ?-paramarray var? connection queryString ?parm...?"); return TCL_ERROR; } /* figure out the connect string and get the connection ID */ conn = PgGetConnectionId(interp, connString, &connid); if (conn == NULL) return TCL_ERROR; if (connid->res_copyStatus != RES_COPY_NONE) { Tcl_SetResult(interp, "Attempt to query while COPY in progress", TCL_STATIC); return TCL_ERROR; } if (connid->callbackPtr || connid->callbackInterp) { Tcl_SetResult(interp, "Attempt to query while waiting for callback", TCL_STATIC); return TCL_ERROR; } /* extra params will substitute for $1, $2, etc, in the statement */ /* objc must be 3 or greater at this point */ nParams = objc - index; if (useVariables) { if(paramArrayName || nParams) { Tcl_SetResult(interp, "-variables can not be used with positional or named parameters", TCL_STATIC); return TCL_ERROR; } if (handle_substitutions(interp, execString, &newExecString, ¶mValues, &nParams, ¶msBuffer) != TCL_OK) { return TCL_ERROR; } if(nParams) execString = newExecString; } else if (paramArrayName) { // Can't combine positional params and -paramarray if (nParams) { Tcl_SetResult(interp, "Can't use both positional and named parameters", TCL_STATIC); return TCL_ERROR; } if (count_parameters(interp, execString, &nParams) == TCL_ERROR) { return TCL_ERROR; } if(nParams) { // After this point we must free newExecString and paramValues before exiting if (expand_parameters(interp, execString, nParams, paramArrayName, &newExecString, ¶mValues, ¶msBuffer) == TCL_ERROR) { return TCL_ERROR; } execString = newExecString; } } else if (nParams) { if (build_param_array(interp, nParams, &objv[index], ¶mValues, ¶msBuffer) != TCL_OK) { return TCL_ERROR; } // After this point we must free paramValues and paramsBufferbefore exiting } /* we could call PQexecParams when nParams is 0, but PQexecParams * will not accept more than one SQL statement per call, while * PQexec will. by checking and using PQexec when no parameters * are included, we maintain compatibility for code that doesn't * use params and might have had multiple statements in a single * request */ if (nParams == 0) { result = PQexec(conn, externalString(execString)); } else { result = PQexecParams(conn, externalString(execString), nParams, NULL, paramValues, NULL, NULL, 0); } if(paramValues) { ckfree ((void *)paramValues); paramValues = NULL; } if(newExecString) { ckfree((void *)newExecString); newExecString = NULL; } if(paramsBuffer) { ckfree ((void *)paramsBuffer); paramsBuffer = NULL; } connid->sql_count++; /* REPLICATED IN pg_exec_prepared -- NEEDS TO BE FACTORED */ /* Transfer any notify events from libpq to Tcl event queue. */ PgNotifyTransferEvents(connid); if (result) { int rId; if(PgSetResultId(interp, connString, result, &rId) != TCL_OK) { PQclear(result); // Reconnect if the connection is bad. PgCheckConnectionState(connid); return TCL_ERROR; } ExecStatusType rStat = PQresultStatus(result); if (rStat == PGRES_COPY_IN || rStat == PGRES_COPY_OUT) { connid->res_copyStatus = RES_COPY_INPROGRESS; connid->res_copy = rId; } return TCL_OK; } else { /* error occurred during the query */ report_connection_error(interp, conn); // Reconnect if the connection is bad. PgCheckConnectionState(connid); return TCL_ERROR; } } /********************************** * report_connection_error Generate a proper Tcl errorCode and return error meaage from an error during a request */ static void report_connection_error(Tcl_Interp *interp, PGconn *conn) { char *errString = ""; if(conn) { errString = PQerrorMessage(conn); } if(errString[0] != '\0') { char *nl = strchr(errString, '\n'); if(nl) *nl = '\0'; Tcl_SetErrorCode(interp, "POSTGRESQL", "REQUEST_FAILED", errString, (char *)NULL); if(nl) *nl = '\n'; Tcl_SetResult(interp, errString, TCL_VOLATILE); } else { Tcl_SetResult(interp, "Unknown error from Exec or SendQuery", TCL_STATIC); } } /********************************** * pg_exec_prepared send a request to executed a prepared statement with given parameters to the backend connection syntax: pg_exec_prepared connection statement_name [var1] [var2]... the return result is either an error message or a handle for a query result. Handles start with the prefix "pgp" **********************************/ int Pg_exec_prepared(ClientData cData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { Pg_ConnectionId *connid; PGconn *conn; PGresult *result; const char *connString; const char *statementNameString; const char **paramValues = NULL; const char *paramsBuffer = NULL; int nParams; if (objc < 3) { Tcl_WrongNumArgs(interp, 1, objv, "connection statementName [parm...]"); return TCL_ERROR; } /* figure out the connect string and get the connection ID */ connString = Tcl_GetString(objv[1]); conn = PgGetConnectionId(interp, connString, &connid); if (conn == NULL) return TCL_ERROR; if (connid->res_copyStatus != RES_COPY_NONE) { Tcl_SetResult(interp, "Attempt to query while COPY in progress", TCL_STATIC); return TCL_ERROR; } if (connid->callbackPtr || connid->callbackInterp) { Tcl_SetResult(interp, "Attempt to query while waiting for callback", TCL_STATIC); return TCL_ERROR; } /* extra params will substitute for $1, $2, etc, in the statement */ /* objc must be 3 or greater at this point */ nParams = objc - 3; if (nParams > 0) { if (build_param_array(interp, nParams, &objv[3], ¶mValues, ¶msBuffer) != TCL_OK) { return TCL_ERROR; } // After this point we must free paramValues and paramsBuffer before exiting } statementNameString = Tcl_GetString(objv[2]); result = PQexecPrepared(conn, externalString(statementNameString), nParams, paramValues, NULL, NULL, 0); if (paramValues != (const char **)NULL) { ckfree ((void *)paramValues); } if(paramsBuffer) { ckfree ((void *)paramsBuffer); paramsBuffer = NULL; } connid->sql_count++; /* REPLICATED IN pg_exec -- NEEDS TO BE FACTORED */ /* Transfer any notify events from libpq to Tcl event queue. */ PgNotifyTransferEvents(connid); if (result) { int rId; if(PgSetResultId(interp, connString, result, &rId) != TCL_OK) { PQclear(result); return TCL_ERROR; } ExecStatusType rStat = PQresultStatus(result); if (rStat == PGRES_COPY_IN || rStat == PGRES_COPY_OUT) { connid->res_copyStatus = RES_COPY_INPROGRESS; connid->res_copy = rId; } return TCL_OK; } else { /* error occurred during the query */ report_connection_error(interp, conn); // Reconnect if the connection is bad. PgCheckConnectionState(connid); return TCL_ERROR; } } /********************************** * Pg_result_foreach - iterate Tcl code over a result handle */ int Pg_result_foreach(Tcl_Interp *interp, PGresult *result, Tcl_Obj *arrayNameObj, Tcl_Obj *code) { int retval = TCL_OK; int tupno; int column; char *arrayName = Tcl_GetString (arrayNameObj); if (PQresultStatus(result) != PGRES_TUPLES_OK) { /* query failed, or it wasn't SELECT */ Tcl_SetResult(interp, (char *)PQresultErrorMessage(result), TCL_VOLATILE); return TCL_ERROR; } int ncols = PQnfields(result); for (tupno = 0; tupno < PQntuples(result); tupno++) { for (column = 0; column < ncols; column++) { char *columnName = PQfname (result, column); if (PQgetisnull (result, tupno, column)) { Tcl_UnsetVar2 (interp, arrayName, columnName, 0); continue; } char *string = PQgetvalue (result, tupno, column); if (Tcl_SetVar2(interp, arrayName, columnName, utfString(string), (TCL_LEAVE_ERR_MSG)) == NULL) { return TCL_ERROR; } } int r = Tcl_EvalObjEx(interp, code, 0); if ((r != TCL_OK) && (r != TCL_CONTINUE)) { if (r == TCL_BREAK) break; /* exit loop, but return TCL_OK */ if (r == TCL_ERROR) { char msg[60]; sprintf(msg, "\n (\"pg_result_foreach\" body line %d)", Tcl_GetErrorLine(interp)); Tcl_AddErrorInfo(interp, msg); } retval = r; break; } } return retval; } /********************************** * pg_result get information about the results of a query syntax: pg_result result ?option? the options are: -status the status of the result -error the error message, if the status indicates error; otherwise an empty string -conn the connection that produced the result -oid if command was an INSERT, the OID of the inserted tuple -numTuples the number of tuples in the query -cmdTuples Same as -numTuples, but for DELETE and UPDATE -numAttrs returns the number of attributes returned by the query -assign arrayName assign the results to an array, using subscripts of the form (tupno,attributeName) -foreach arrayName code for each tuple assigns the results to the named array, using subscripts matching the column names, executing the code body. -assignbyidx arrayName ?appendstr? assign the results to an array using the first field's value as a key. All but the first field of each tuple are stored, using subscripts of the form (field0value,attributeNameappendstr) -getTuple tupleNumber returns the values of the tuple in a list -tupleArray tupleNumber arrayName stores the values of the tuple in array arrayName, indexed by the attributes returned. If a value is null, sets an empty string or the default string into the array, if a default string has been defined. -tupleArrayWithoutNulls tupleNumber arrayName ...stores the values of the tuple in array arrayName, indexed by the attributes returned. If a value is null, unsets the field from the array. -attributes returns a list of the name/type pairs of the tuple attributes -lAttributes returns a list of the {name type len} entries of the tuple attributes -list returns one list of all of the data -llist returns a list of lists, where each embedded list represents a tuple in the result -clear clear the result buffer. Do not reuse after this -null_value_string Set the value returned for fields that are null (defaults to connection setting, default "") **********************************/ int Pg_result(ClientData cData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { PGresult *result; int i; int tupno; Tcl_Obj *arrVarObj; Tcl_Obj *appendstrObj; char *queryResultString; int optIndex; int errorOptIndex; Tcl_Obj* listObj; Tcl_Obj* subListObj; Tcl_Obj* fieldObj = NULL; Tcl_Obj *fieldNameObj; Tcl_Obj* tresult; /* Tcl_CmdInfo infoPtr; */ Pg_resultid *resultid; static const char *options[] = { "-status", "-error", "-foreach", "-conn", "-oid", "-numTuples", "-cmdTuples", "-numAttrs", "-assign", "-assignbyidx", "-getTuple", "-tupleArray", "-tupleArrayWithoutNulls", "-attributes", "-lAttributes", "-clear", "-list", "-llist", "-dict", "-null_value_string", (char *)NULL }; enum options { OPT_STATUS, OPT_ERROR, OPT_FOREACH, OPT_CONN, OPT_OID, OPT_NUMTUPLES, OPT_CMDTUPLES, OPT_NUMATTRS, OPT_ASSIGN, OPT_ASSIGNBYIDX, OPT_GETTUPLE, OPT_TUPLEARRAY, OPT_TUPLEARRAY_WITHOUT_NULLS, OPT_ATTRIBUTES, OPT_LATTRIBUTES, OPT_CLEAR, OPT_LIST, OPT_LLIST, OPT_DICT, OPT_NULL_VALUE_STRING }; static const char *errorOptions[] = { "severity", "sqlstate", "primary", "detail", "hint", "position", "internal_position", "internal_query", "context", "file", "line", "function", (char *)NULL }; static CONST char pgDiagCodes[] = { PG_DIAG_SEVERITY, PG_DIAG_SQLSTATE, PG_DIAG_MESSAGE_PRIMARY, PG_DIAG_MESSAGE_DETAIL, PG_DIAG_MESSAGE_HINT, PG_DIAG_STATEMENT_POSITION, PG_DIAG_INTERNAL_POSITION, PG_DIAG_INTERNAL_QUERY, PG_DIAG_CONTEXT, PG_DIAG_SOURCE_FILE, PG_DIAG_SOURCE_LINE, PG_DIAG_SOURCE_FUNCTION }; if (objc < 3 || objc > 5) { Tcl_WrongNumArgs(interp, 1, objv, ""); goto Pg_result_errReturn; /* append help info */ } /* figure out the query result handle and look it up */ queryResultString = Tcl_GetString(objv[1]); result = PgGetResultId(interp, queryResultString, &resultid); if (result == (PGresult *)NULL) { tresult = Tcl_NewStringObj(queryResultString, -1); Tcl_AppendStringsToObj(tresult, " is not a valid query result", NULL); Tcl_SetObjResult(interp, tresult); return TCL_ERROR; } /* process command options */ if (Tcl_GetIndexFromObj(interp, objv[2], options, "option", TCL_EXACT, &optIndex) != TCL_OK) return TCL_ERROR; switch ((enum options) optIndex) { case OPT_STATUS: { char *resultStatus; if (objc != 3) { Tcl_WrongNumArgs(interp, 3, objv, ""); return TCL_ERROR; } resultStatus = PQresStatus(PQresultStatus(result)); Tcl_SetObjResult(interp, Tcl_NewStringObj(resultStatus, -1)); // Reconnect if the connection is bad. if (strcmp(resultStatus, "PGRES_COMMAND_OK") != 0) { PgCheckConnectionState(resultid->connid); } return TCL_OK; } case OPT_ERROR: { if (objc < 3 || objc > 4) { Tcl_WrongNumArgs(interp, 3, objv, "[subcode]"); return TCL_ERROR; } /* if there's no subfield (objc == 3), just get the result * error message */ if (objc == 3) { Tcl_SetObjResult(interp, Tcl_NewStringObj(PQresultErrorMessage(result), -1)); return TCL_OK; } if (Tcl_GetIndexFromObj(interp, objv[3], errorOptions, "error suboption", TCL_EXACT, &errorOptIndex) != TCL_OK) { return TCL_ERROR; } Tcl_SetObjResult(interp, Tcl_NewStringObj( PQresultErrorField(result,pgDiagCodes[errorOptIndex]),-1)); return TCL_OK; } case OPT_FOREACH: { if (objc != 5) { Tcl_WrongNumArgs(interp, 3, objv, "array code"); return TCL_ERROR; } int resultStatus = Pg_result_foreach(interp, result, objv[3], objv[4]); if(resultStatus != TCL_OK) { if(PgCheckConnectionState(resultid->connid) != TCL_OK) { report_connection_error(interp, resultid->connid->conn); return TCL_ERROR; } } return resultStatus; } case OPT_CONN: { if (objc != 3) { Tcl_WrongNumArgs(interp, 3, objv, ""); return TCL_ERROR; } return PgGetConnByResultId(interp, queryResultString); } case OPT_OID: { if (objc != 3) { Tcl_WrongNumArgs(interp, 3, objv, ""); return TCL_ERROR; } Tcl_SetObjResult(interp, Tcl_NewLongObj(PQoidValue(result))); return TCL_OK; } case OPT_CLEAR: { if (objc != 3) { Tcl_WrongNumArgs(interp, 3, objv, ""); return TCL_ERROR; } /* This will take care of the cleanup */ Tcl_DeleteCommandFromToken(interp, resultid->cmd_token); return TCL_OK; } case OPT_NUMTUPLES: { if (objc != 3) { Tcl_WrongNumArgs(interp, 3, objv, ""); return TCL_ERROR; } Tcl_SetObjResult(interp, Tcl_NewIntObj(PQntuples(result))); return TCL_OK; } case OPT_CMDTUPLES: { if (objc != 3) { Tcl_WrongNumArgs(interp, 3, objv, ""); return TCL_ERROR; } Tcl_SetObjResult(interp, Tcl_NewStringObj( PQcmdTuples(result), -1)); return TCL_OK; } case OPT_NUMATTRS: { if (objc != 3) { Tcl_WrongNumArgs(interp, 3, objv, ""); return TCL_ERROR; } Tcl_SetObjResult(interp, Tcl_NewIntObj(PQnfields(result))); return TCL_OK; } case OPT_ASSIGN: { if (objc != 4) { Tcl_WrongNumArgs(interp, 3, objv, "arrayName"); return TCL_ERROR; } arrVarObj = objv[3]; /* * this assignment assigns the table of result tuples into * a giant array with the name given in the argument. The * indices of the array are of the form (tupno,attrName). */ for (tupno = 0; tupno < PQntuples(result); tupno++) { for (i = 0; i < PQnfields(result); i++) { Tcl_Obj *fieldNameObj; /* * construct the array element name consisting * of the tuple number, a comma, and the field * name. * this is a little kludgey -- we set the obj * to an int but the append following will force a * string conversion. */ fieldNameObj = Tcl_NewObj (); Tcl_SetIntObj(fieldNameObj, tupno); Tcl_AppendToObj(fieldNameObj, ",", 1); Tcl_AppendToObj(fieldNameObj, PQfname(result, i), -1); if (Tcl_ObjSetVar2(interp, arrVarObj, fieldNameObj, Tcl_NewStringObj( utfString(PGgetvalue(result, resultid->nullValueString, tupno, i)), -1), TCL_LEAVE_ERR_MSG) == NULL) { Tcl_DecrRefCount (fieldNameObj); return TCL_ERROR; } } } return TCL_OK; } case OPT_ASSIGNBYIDX: { if ((objc != 4) && (objc != 5)) { Tcl_WrongNumArgs(interp, 3, objv, "arrayName ?append_string?"); return TCL_ERROR; } arrVarObj = objv[3]; if (objc == 5) appendstrObj = objv[4]; else appendstrObj = NULL; /* * this assignment assigns the table of result tuples into * a giant array with the name given in the argument. The * indices of the array are of the form * (field0Value,attrNameappendstr). Here, we still assume * PQfname won't exceed 200 characters, but we dare not * make the same assumption about the data in field 0 nor * the append string. */ for (tupno = 0; tupno < PQntuples(result); tupno++) { const char *field0 = utfString(PGgetvalue(result, resultid->nullValueString, tupno, 0)); char *dupfield0 = ckalloc(strlen(field0)+1); strcpy(dupfield0, field0); for (i = 1; i < PQnfields(result); i++) { Tcl_Obj *fieldNameObj; fieldNameObj = Tcl_NewObj (); Tcl_SetStringObj(fieldNameObj, dupfield0, -1); Tcl_AppendToObj(fieldNameObj, ",", 1); Tcl_AppendToObj(fieldNameObj, PQfname(result, i), -1); if (appendstrObj != NULL) Tcl_AppendObjToObj(fieldNameObj, appendstrObj); char *val = utfString(PGgetvalue(result, resultid->nullValueString, tupno, i)); if (Tcl_ObjSetVar2(interp, arrVarObj, fieldNameObj, Tcl_NewStringObj( val, -1), TCL_LEAVE_ERR_MSG) == NULL) { Tcl_DecrRefCount(fieldNameObj); ckfree(dupfield0); return TCL_ERROR; } } ckfree(dupfield0); } return TCL_OK; } case OPT_GETTUPLE: { Tcl_Obj *resultObj; if (objc != 4) { Tcl_WrongNumArgs(interp, 3, objv, "tuple_number"); return TCL_ERROR; } if (Tcl_GetIntFromObj(interp, objv[3], &tupno) == TCL_ERROR) return TCL_ERROR; if (tupno < 0 || tupno >= PQntuples(result)) { tresult = Tcl_NewStringObj("argument to getTuple cannot exceed ", -1); Tcl_AppendStringsToObj(tresult, "number of tuples - 1", NULL); Tcl_SetObjResult(interp, tresult); /* Tcl_AppendStringsToObj(Tcl_GetObjResult(interp), "argument to getTuple cannot exceed ", "number of tuples - 1", NULL); */ return TCL_ERROR; } /* set the result object to be an empty list */ resultObj = Tcl_NewListObj(0, NULL); /* build up a return list, Tcl-object-style */ for (i = 0; i < PQnfields(result); i++) { char *value; value = utfString(PGgetvalue(result, resultid->nullValueString, tupno, i)); if (Tcl_ListObjAppendElement(interp, resultObj, Tcl_NewStringObj(value, -1)) == TCL_ERROR) return TCL_ERROR; } Tcl_SetObjResult(interp, resultObj); return TCL_OK; } case OPT_TUPLEARRAY: case OPT_TUPLEARRAY_WITHOUT_NULLS: { char *arrayName; if (objc != 5) { Tcl_WrongNumArgs(interp, 3, objv, "tuple_number array_name"); return TCL_ERROR; } if (Tcl_GetIntFromObj(interp, objv[3], &tupno) == TCL_ERROR) return TCL_ERROR; if (tupno < 0 || tupno >= PQntuples(result)) { tresult = Tcl_NewStringObj("argument to tupleArray cannot exceed number of tuples - 1", -1); Tcl_SetObjResult(interp, tresult); return TCL_ERROR; } arrayName = Tcl_GetString(objv[4]); if (optIndex == OPT_TUPLEARRAY) { /* it's the -array variant, if the field is null, * set it in the array as the empty string or * as the set null value string if one is set */ for (i = 0; i < PQnfields(result); i++) { if (Tcl_SetVar2(interp, arrayName, PQfname(result, i), utfString( PGgetvalue(result, resultid->nullValueString, tupno, i) ), TCL_LEAVE_ERR_MSG) == NULL) return TCL_ERROR; } } else { /* it's the array_without_nulls variant, * unset the field name from the array * if it's null, else set it. */ for (i = 0; i < PQnfields(result); i++) { char *string; string = PQgetvalue (result, tupno, i); if (*string == '\0') { if (PQgetisnull (result, tupno, i)) { Tcl_UnsetVar2 (interp, arrayName, PQfname(result, i), 0); continue; } } if (Tcl_SetVar2(interp, arrayName, PQfname(result, i), utfString(string), TCL_LEAVE_ERR_MSG) == NULL) return TCL_ERROR; } } return TCL_OK; } case OPT_ATTRIBUTES: { Tcl_Obj *resultObj = Tcl_NewListObj(0, NULL); if (objc != 3) { Tcl_WrongNumArgs(interp, 3, objv, ""); return TCL_ERROR; } for (i = 0; i < PQnfields(result); i++) { Tcl_ListObjAppendElement(interp, resultObj, Tcl_NewStringObj(PQfname(result, i), -1)); } Tcl_SetObjResult(interp, resultObj); return TCL_OK; } case OPT_LATTRIBUTES: { Tcl_Obj *resultObj = Tcl_NewListObj(0, NULL); if (objc != 3) { Tcl_WrongNumArgs(interp, 3, objv, ""); return TCL_ERROR; } for (i = 0; i < PQnfields(result); i++) { /* start a sublist */ Tcl_Obj *subList = Tcl_NewListObj(0, NULL); if (Tcl_ListObjAppendElement(interp, subList, Tcl_NewStringObj(PQfname(result, i), -1)) == TCL_ERROR) return TCL_ERROR; if (Tcl_ListObjAppendElement(interp, subList, Tcl_NewLongObj((long)PQftype(result, i))) == TCL_ERROR) return TCL_ERROR; if (Tcl_ListObjAppendElement(interp, subList, Tcl_NewLongObj((long)PQfsize(result, i))) == TCL_ERROR) return TCL_ERROR; /* end the sublist, append to the result list */ if (Tcl_ListObjAppendElement(interp, resultObj, subList) == TCL_ERROR) return TCL_ERROR; } Tcl_SetObjResult(interp, resultObj); return TCL_OK; } case OPT_LIST: { listObj = Tcl_NewListObj(0, (Tcl_Obj **) NULL); /* ** Loop through the tuple, and append each ** attribute to the list ** ** This option appends all of the attributes ** for each tuple to the same list */ for (tupno = 0; tupno < PQntuples(result); tupno++) { /* ** Loop over the attributes for the tuple, ** and append them to the list */ for (i = 0; i < PQnfields(result); i++) { fieldObj = Tcl_NewObj(); Tcl_SetStringObj(fieldObj, utfString(PGgetvalue(result, resultid->nullValueString, tupno, i)), -1); if (Tcl_ListObjAppendElement(interp, listObj, fieldObj) != TCL_OK) { Tcl_DecrRefCount(listObj); Tcl_DecrRefCount(fieldObj); return TCL_ERROR; } } } Tcl_SetObjResult(interp, listObj); return TCL_OK; } case OPT_LLIST: { listObj = Tcl_NewListObj(0, (Tcl_Obj **) NULL); /* ** This is the top level list. This ** contains the other lists ** ** This option contructs a list of ** attributes for each tuple, and ** appends that to the main list. ** This is a list of lists */ for (tupno = 0; tupno < PQntuples(result); tupno++) { subListObj = Tcl_NewListObj(0, (Tcl_Obj **) NULL); /* ** This is the inner list. This contains ** the actual row values */ for (i = 0; i < PQnfields(result); i++) { fieldObj = Tcl_NewObj(); Tcl_SetStringObj(fieldObj, utfString(PGgetvalue(result, resultid->nullValueString, tupno, i)), -1); if (Tcl_ListObjAppendElement(interp, subListObj, fieldObj) != TCL_OK) { Tcl_DecrRefCount(listObj); Tcl_DecrRefCount(fieldObj); return TCL_ERROR; } } if (Tcl_ListObjAppendElement(interp, listObj, subListObj) != TCL_OK) { Tcl_DecrRefCount(listObj); Tcl_DecrRefCount(fieldObj); return TCL_ERROR; } } Tcl_SetObjResult(interp, listObj); return TCL_OK; } case OPT_DICT: { listObj = Tcl_NewDictObj(); /* ** This is the top level list. This ** contains the other lists ** ** This option contructs a list of ** attributes for each tuple, and ** appends that to the main list. ** This is a list of lists */ for (tupno = 0; tupno < PQntuples(result); tupno++) { subListObj = Tcl_NewDictObj(); /* ** This is the inner list. This contains ** the actual row values */ for (i = 0; i < PQnfields(result); i++) { fieldObj = Tcl_NewObj(); fieldNameObj = Tcl_NewObj(); Tcl_SetStringObj(fieldNameObj, PQfname(result, i), -1); Tcl_SetStringObj(fieldObj, utfString(PGgetvalue(result, resultid->nullValueString, tupno, i)), -1); if (Tcl_DictObjPut(interp, subListObj, fieldNameObj, fieldObj) != TCL_OK) { Tcl_DecrRefCount(listObj); Tcl_DecrRefCount(fieldObj); return TCL_ERROR; } } if (Tcl_DictObjPut(interp, listObj, Tcl_NewIntObj(tupno), subListObj) != TCL_OK) { Tcl_DecrRefCount(listObj); Tcl_DecrRefCount(fieldObj); return TCL_ERROR; } } Tcl_SetObjResult(interp, listObj); return TCL_OK; } case OPT_NULL_VALUE_STRING: { char *nullValueString; int length; if ((objc < 3) || (objc > 4)) { Tcl_WrongNumArgs(interp, 3, objv, "?nullValueString?"); return TCL_ERROR; } if (objc == 3) { if (resultid->nullValueString == NULL || *resultid->nullValueString == '\0') { Tcl_SetObjResult(interp, Tcl_NewStringObj("", 0)); } else { Tcl_SetObjResult(interp, Tcl_NewStringObj(resultid->nullValueString, -1)); } return TCL_OK; } /* objc == 4, they're setting it */ if (resultid->nullValueString != NULL) { if (resultid->connid->nullValueString != resultid->nullValueString) ckfree((void *)resultid->nullValueString); } nullValueString = Tcl_GetStringFromObj (objv[3], &length); resultid->nullValueString = ckalloc (length + 1); strcpy (resultid->nullValueString, nullValueString); Tcl_SetObjResult(interp, objv[3]); return TCL_OK; } default: { Tcl_SetObjResult(interp, Tcl_NewStringObj("Invalid option\n", -1)); goto Pg_result_errReturn; /* append help info */ } } Pg_result_errReturn: tresult = Tcl_NewStringObj("pg_result result ?option? where option is\n", -1); Tcl_AppendStringsToObj(tresult, "\t-status\n", "\t-error ?subCode?\n", "\t-foreach array code\n", "\t-conn\n", "\t-oid\n", "\t-numTuples\n", "\t-cmdTuples\n", "\t-numAttrs\n" "\t-assign arrayVarName\n", "\t-assignbyidx arrayVarName ?appendstr?\n", "\t-getTuple tupleNumber\n", "\t-tupleArray tupleNumber arrayVarName\n", "\t-attributes\n" "\t-lAttributes\n" "\t-list\n", "\t-llist\n", "\t-clear\n", "\t-dict\n", "\t-null_value_string ?nullValueString?\n", (char *)NULL); Tcl_SetObjResult(interp, tresult); return TCL_ERROR; } /********************************** * pg_execute send a query string to the backend connection and process the result syntax: pg_execute ?-array name? ?-oid varname? connection query ?loop_body? the return result is the number of tuples processed. If the query returns tuples (i.e. a SELECT statement), the result is placed into variables **********************************/ int Pg_execute(ClientData cData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { Pg_ConnectionId *connid; PGconn *conn; PGresult *result; int i; int tupno; int ntup; int loop_rc; const char *array_varname = NULL; char *arg; Tcl_Obj *oid_varnameObj = NULL; Tcl_Obj *evalObj; Tcl_Obj *resultObj; char *usage = "?-array arrayname? ?-oid varname? " "connection queryString ?loop_body?"; /* * First we parse the options */ i = 1; while (i < objc) { arg = Tcl_GetString(objv[i]); if (arg[0] != '-' || arg[1] == '-') { break; } if (strcmp(arg, "-array") == 0) { /* * The rows should appear in an array vs. to single variables */ i++; if (i == objc) { Tcl_WrongNumArgs(interp, 1, objv, usage); return TCL_ERROR; } array_varname = Tcl_GetString(objv[i++]); continue; } if (strcmp(arg, "-oid") == 0) { /* * We should place PQoidValue() somewhere */ i++; if (i == objc) { Tcl_WrongNumArgs(interp, 1, objv, usage); return TCL_ERROR; } oid_varnameObj = objv[i++]; continue; } Tcl_WrongNumArgs(interp, 1, objv, usage); return TCL_ERROR; } /* * Check that after option parsing at least 'connection' and 'query' * are left */ if (objc - i < 2) { Tcl_WrongNumArgs(interp, 1, objv, usage); return TCL_ERROR; } /* * Get the connection and make sure no COPY command is pending */ conn = PgGetConnectionId(interp, Tcl_GetString(objv[i++]), &connid); if (conn == NULL) return TCL_ERROR; if (connid->res_copyStatus != RES_COPY_NONE) { Tcl_SetObjResult(interp, Tcl_NewStringObj("Attempt to query while COPY in progress", -1)); return TCL_ERROR; } if (connid->callbackPtr || connid->callbackInterp) { Tcl_SetResult(interp, "Attempt to query while waiting for callback", TCL_STATIC); return TCL_ERROR; } /* * Execute the query */ result = PQexec(conn, externalString(Tcl_GetString(objv[i++]))); connid->sql_count++; /* * Transfer any notify events from libpq to Tcl event queue. */ PgNotifyTransferEvents(connid); /* * Check for errors */ if (result == NULL) { report_connection_error(interp, conn); // Look for a failed connection and re-open it. PgCheckConnectionState(connid); return TCL_ERROR; } /* * Set the oid variable to the returned oid of an INSERT statement if * requested (or 0 if it wasn't an INSERT) */ if (oid_varnameObj != NULL) { if (Tcl_ObjSetVar2(interp, oid_varnameObj, NULL, Tcl_NewLongObj((long)PQoidValue(result)), TCL_LEAVE_ERR_MSG) == NULL) { PQclear(result); return TCL_ERROR; } } /* * Decide how to go on based on the result status */ switch (PQresultStatus(result)) { case PGRES_TUPLES_OK: /* fall through if we have tuples */ break; case PGRES_EMPTY_QUERY: case PGRES_COMMAND_OK: case PGRES_COPY_IN: case PGRES_COPY_OUT: /* tell the number of affected tuples for non-SELECT queries */ Tcl_SetObjResult(interp, Tcl_NewStringObj(PQcmdTuples(result), -1)); PQclear(result); return TCL_OK; default: /* anything else must be an error */ /* set the result object to be an empty list */ resultObj = Tcl_NewListObj(0, NULL); if (Tcl_ListObjAppendElement(interp, resultObj, Tcl_NewStringObj(PQresStatus(PQresultStatus(result)), -1)) == TCL_ERROR) return TCL_ERROR; if (Tcl_ListObjAppendElement(interp, resultObj, Tcl_NewStringObj(PQresultErrorMessage(result), -1)) == TCL_ERROR) return TCL_ERROR; Tcl_SetObjResult(interp, resultObj); PQclear(result); return TCL_ERROR; } /* * We reach here only for queries that returned tuples */ if (i == objc) { /* * We don't have a loop body. If we have at least one result row, * we set all the variables to the first one and return. */ if (PQntuples(result) > 0) { if (execute_put_values(interp, array_varname, result, connid->nullValueString, 0) != TCL_OK) { PQclear(result); return TCL_ERROR; } } Tcl_SetObjResult(interp, Tcl_NewIntObj(PQntuples(result))); PQclear(result); return TCL_OK; } /* * We have a loop body. For each row in the result set, put the values * into the Tcl variables and execute the body. */ ntup = PQntuples(result); evalObj = objv[i]; for (tupno = 0; tupno < ntup; tupno++) { if (execute_put_values(interp, array_varname, result, connid->nullValueString, tupno) != TCL_OK) { PQclear(result); return TCL_ERROR; } loop_rc = Tcl_EvalObjEx(interp, evalObj, 0); /* The returncode of the loop body controls the loop execution */ if (loop_rc == TCL_OK || loop_rc == TCL_CONTINUE) { /* OK or CONTINUE means start next loop invocation */ continue; } if (loop_rc == TCL_RETURN) { /* RETURN means hand up the given interpreter result */ PQclear(result); return TCL_RETURN; } if (loop_rc == TCL_BREAK) { /* BREAK means leave the loop */ break; } PQclear(result); return TCL_ERROR; } /* * At the end of the loop we put the number of rows we got into the * interpreter result and clear the result set. */ Tcl_SetObjResult(interp, Tcl_NewIntObj(ntup)); PQclear(result); return TCL_OK; } /********************************** * execute_put_values Put the values of one tuple into Tcl variables named like the column names, or into an array indexed by the column names. **********************************/ static int execute_put_values(Tcl_Interp *interp, const char *array_varname, PGresult *result, char *nullValueString, int tupno) { int i; int n; char *fname; char *value; /* * For each column get the column name and value and put it into a Tcl * variable (either scalar or array item) */ n = PQnfields(result); for (i = 0; i < n; i++) { fname = PQfname(result, i); value = utfString(PGgetvalue(result, nullValueString, tupno, i)); if (array_varname != NULL) { if (Tcl_SetVar2(interp, array_varname, fname, value, TCL_LEAVE_ERR_MSG) == NULL) return TCL_ERROR; } else { if (Tcl_SetVar(interp, fname, value, TCL_LEAVE_ERR_MSG) == NULL) return TCL_ERROR; } } return TCL_OK; } /********************************** * pg_lo_open open a large object syntax: pg_lo_open conn objOid mode where mode can be either 'r', 'w', or 'rw' **********************/ int Pg_lo_open(ClientData cData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { PGconn *conn; int lobjId; int mode; int fd; char *connString; char *modeString; int modeStringLen; Pg_ConnectionId *connid; if (objc != 4) { Tcl_WrongNumArgs(interp, 1, objv, "connection lobjOid mode"); return TCL_ERROR; } connString = Tcl_GetString(objv[1]); conn = PgGetConnectionId(interp, connString, &connid); if (conn == NULL) return TCL_ERROR; if (Tcl_GetIntFromObj(interp, objv[2], &lobjId) == TCL_ERROR) return TCL_ERROR; modeString = Tcl_GetStringFromObj(objv[3], &modeStringLen); if ((modeStringLen < 1) || (modeStringLen > 2)) { Tcl_SetObjResult(interp, Tcl_NewStringObj("mode argument must be 'r', 'w', or 'rw'", -1)); return TCL_ERROR; } switch (modeString[0]) { case 'r': case 'R': mode = INV_READ; break; case 'w': case 'W': mode = INV_WRITE; break; default: Tcl_SetObjResult(interp, Tcl_NewStringObj("mode argument must be 'r', 'w', or 'rw'", -1)); return TCL_ERROR; } switch (modeString[1]) { case '\0': break; case 'r': case 'R': mode |= INV_READ; break; case 'w': case 'W': mode |= INV_WRITE; break; default: Tcl_SetObjResult(interp, Tcl_NewStringObj("mode argument must be 'r', 'w', or 'rw'", -1)); return TCL_ERROR; } fd = lo_open(conn, lobjId, mode); // Reconnect if the connection is bad. if(PgCheckConnectionState(connid) != TCL_OK) { report_connection_error(interp, conn); return TCL_ERROR; } Tcl_SetObjResult(interp, Tcl_NewIntObj(fd)); return TCL_OK; } /********************************** * pg_lo_close close a large object syntax: pg_lo_close conn fd **********************/ int Pg_lo_close(ClientData cData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { PGconn *conn; int fd; char *connString; Pg_ConnectionId *connid; if (objc != 3) { Tcl_WrongNumArgs(interp, 1, objv, "connection fd"); return TCL_ERROR; } connString = Tcl_GetString(objv[1]); conn = PgGetConnectionId(interp, connString, &connid); if (conn == NULL) return TCL_ERROR; if (Tcl_GetIntFromObj(interp, objv[2], &fd) != TCL_OK) return TCL_ERROR; int result = lo_close(conn, fd); // Reconnect if the connection is bad. if(PgCheckConnectionState(connid) != TCL_OK) { report_connection_error(interp, conn); return TCL_ERROR; } Tcl_SetObjResult(interp, Tcl_NewIntObj(result)); return TCL_OK; } /********************************** * pg_lo_read reads at most len bytes from a large object into a variable named bufVar syntax: pg_lo_read conn fd bufVar len bufVar is the name of a variable in which to store the contents of the read **********************/ int Pg_lo_read(ClientData cData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { PGconn *conn; int fd; int nbytes = 0; char *buf; Tcl_Obj *bufVar; Tcl_Obj *bufObj; int len; int rc = TCL_OK; Pg_ConnectionId *connid; if (objc != 5) { Tcl_WrongNumArgs(interp, 1, objv, "conn fd bufVar len"); return TCL_ERROR; } conn = PgGetConnectionId(interp, Tcl_GetString(objv[1]), &connid); if (conn == NULL) return TCL_ERROR; if (Tcl_GetIntFromObj(interp, objv[2], &fd) != TCL_OK) return TCL_ERROR; bufVar = objv[3]; if (Tcl_GetIntFromObj(interp, objv[4], &len) != TCL_OK) return TCL_ERROR; if (len <= 0) { Tcl_SetObjResult(interp, Tcl_NewIntObj(nbytes)); return TCL_OK; } buf = ckalloc(len + 1); nbytes = lo_read(conn, fd, buf, len); // Reconnect if the connection is bad. if(PgCheckConnectionState(connid) != TCL_OK) { report_connection_error(interp, conn); rc = TCL_ERROR; } else if (nbytes >= 0) { bufObj = Tcl_NewByteArrayObj((unsigned char*)buf, nbytes); if (Tcl_ObjSetVar2(interp, bufVar, NULL, bufObj, TCL_LEAVE_ERR_MSG | TCL_PARSE_PART1) == NULL) rc = TCL_ERROR; } if (rc == TCL_OK) Tcl_SetObjResult(interp, Tcl_NewIntObj(nbytes)); ckfree((void *)buf); return rc; } /*********************************** Pg_lo_write write at most len bytes to a large object syntax: pg_lo_write conn fd buf len ***********************************/ int Pg_lo_write(ClientData cData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { PGconn *conn; char *buf; int fd; int nbytes = 0; int len; Pg_ConnectionId *connid; if (objc != 5) { Tcl_WrongNumArgs(interp, 1, objv, "conn fd buf len"); return TCL_ERROR; } conn = PgGetConnectionId(interp, Tcl_GetString(objv[1]), &connid); if (conn == NULL) return TCL_ERROR; if (Tcl_GetIntFromObj(interp, objv[2], &fd) != TCL_OK) return TCL_ERROR; buf = (char*)Tcl_GetByteArrayFromObj(objv[3], &nbytes); if (Tcl_GetIntFromObj(interp, objv[4], &len) != TCL_OK) return TCL_ERROR; if (len > nbytes) len = nbytes; if (len <= 0) { Tcl_SetObjResult(interp, Tcl_NewIntObj(0)); return TCL_OK; } nbytes = lo_write(conn, fd, (char*)buf, len); // Reconnect if the connection is bad. if(PgCheckConnectionState(connid) != TCL_OK) { report_connection_error(interp, conn); return TCL_ERROR; } Tcl_SetObjResult(interp, Tcl_NewIntObj(nbytes)); return TCL_OK; } /*********************************** Pg_lo_lseek seek to a certain position in a large object syntax pg_lo_lseek conn fd offset whence whence can be either "SEEK_CUR", "SEEK_END", or "SEEK_SET" ***********************************/ int Pg_lo_lseek(ClientData cData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { PGconn *conn; int fd; char *whenceStr; int offset; int whence; char *connString; Pg_ConnectionId *connid; Tcl_Obj *tresult; if (objc != 5) { Tcl_WrongNumArgs(interp, 1, objv, "conn fd offset whence"); return TCL_ERROR; } connString = Tcl_GetString(objv[1]); conn = PgGetConnectionId(interp, connString, &connid); if (conn == NULL) return TCL_ERROR; if (Tcl_GetIntFromObj(interp, objv[2], &fd) != TCL_OK) return TCL_ERROR; if (Tcl_GetIntFromObj(interp, objv[3], &offset) == TCL_ERROR) return TCL_ERROR; whenceStr = Tcl_GetString(objv[4]); if (strcmp(whenceStr, "SEEK_SET") == 0) whence = SEEK_SET; else if (strcmp(whenceStr, "SEEK_CUR") == 0) whence = SEEK_CUR; else if (strcmp(whenceStr, "SEEK_END") == 0) whence = SEEK_END; else { tresult = Tcl_NewStringObj("'whence' must be SEEK_SET, SEEK_CUR or SEEK_END", -1); Tcl_SetObjResult(interp, tresult); return TCL_ERROR; } int result = lo_lseek(conn, fd, offset, whence); // Reconnect if the connection is bad. if(PgCheckConnectionState(connid) != TCL_OK) { report_connection_error(interp, conn); return TCL_ERROR; } Tcl_SetObjResult(interp, Tcl_NewIntObj(result)); return TCL_OK; } /*********************************** Pg_lo_creat create a new large object with mode syntax: pg_lo_creat conn mode mode can be any OR'ing together of INV_READ, INV_WRITE, for now, we don't support any additional storage managers. ***********************************/ int Pg_lo_creat(ClientData cData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { PGconn *conn; char *modeStr; char *modeWord; int mode; char *connString; Tcl_Obj *tresult; Pg_ConnectionId *connid; if (objc != 3) { Tcl_WrongNumArgs(interp, 1, objv, "conn mode"); return TCL_ERROR; } connString = Tcl_GetString(objv[1]); conn = PgGetConnectionId(interp, connString, &connid); if (conn == NULL) return TCL_ERROR; modeStr = Tcl_GetString(objv[2]); modeWord = strtok(modeStr, "|"); if (strcmp(modeWord, "INV_READ") == 0) mode = INV_READ; else if (strcmp(modeWord, "INV_WRITE") == 0) mode = INV_WRITE; else { tresult = Tcl_NewStringObj("mode must be some OR'd combination of INV_READ, and INV_WRITE", -1); Tcl_SetObjResult(interp, tresult); return TCL_ERROR; } while ((modeWord = strtok(NULL, "|")) != NULL) { if (strcmp(modeWord, "INV_READ") == 0) mode |= INV_READ; else if (strcmp(modeWord, "INV_WRITE") == 0) mode |= INV_WRITE; else { tresult = Tcl_NewStringObj("mode must be some OR'd combination of INV_READ, and INV_WRITE", -1); Tcl_SetObjResult(interp, tresult); return TCL_ERROR; } } int result = lo_creat(conn, mode); // Reconnect if the connection is bad. if(PgCheckConnectionState(connid) != TCL_OK) { report_connection_error(interp, conn); return TCL_ERROR; } Tcl_SetObjResult(interp, Tcl_NewIntObj(result)); return TCL_OK; } /*********************************** Pg_lo_tell returns the current seek location of the large object syntax: pg_lo_tell conn fd ***********************************/ int Pg_lo_tell(ClientData cData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { PGconn *conn; int fd; char *connString; Pg_ConnectionId *connid; if (objc != 3) { Tcl_WrongNumArgs(interp, 1, objv, "conn fd"); return TCL_ERROR; } connString = Tcl_GetString(objv[1]); conn = PgGetConnectionId(interp, connString, &connid); if (conn == NULL) return TCL_ERROR; if (Tcl_GetIntFromObj(interp, objv[2], &fd) != TCL_OK) return TCL_ERROR; int result = lo_tell(conn, fd); // Reconnect if the connection is bad. if(PgCheckConnectionState(connid) != TCL_OK) { report_connection_error(interp, conn); return TCL_ERROR; } Tcl_SetObjResult(interp, Tcl_NewIntObj(result)); return TCL_OK; } /*********************************** Pg_lo_truncate truncates a large object to the given length. If length is greater than the current large object length, the large object is extended with null bytes. syntax: pg_lo_truncate conn fd len ***********************************/ int Pg_lo_truncate(ClientData cData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { PGconn *conn; int fd; int len = 0; char *connString; Pg_ConnectionId *connid; if ((objc < 3) || (objc > 4)) { Tcl_WrongNumArgs(interp, 1, objv, "conn fd ?len?"); return TCL_ERROR; } connString = Tcl_GetString(objv[1]); conn = PgGetConnectionId(interp, connString, &connid); if (conn == NULL) return TCL_ERROR; if (Tcl_GetIntFromObj(interp, objv[2], &fd) != TCL_OK) return TCL_ERROR; if (objc == 4) { if (Tcl_GetIntFromObj(interp, objv[3], &len) != TCL_OK) return TCL_ERROR; } int result = lo_truncate(conn, fd, len); // Reconnect if the connection is bad. if(PgCheckConnectionState(connid) != TCL_OK) { report_connection_error(interp, conn); return TCL_ERROR; } Tcl_SetObjResult(interp, Tcl_NewIntObj(result)); return TCL_OK; } /*********************************** Pg_lo_unlink unlink a file based on lobject id syntax: pg_lo_unlink conn lobjId ***********************************/ int Pg_lo_unlink(ClientData cData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { PGconn *conn; int lobjId; int retval; char *connString; Tcl_Obj *tresult; Pg_ConnectionId *connid; if (objc != 3) { Tcl_WrongNumArgs(interp, 1, objv, "conn fd"); return TCL_ERROR; } connString = Tcl_GetString(objv[1]); conn = PgGetConnectionId(interp, connString, &connid); if (conn == NULL) return TCL_ERROR; if (Tcl_GetIntFromObj(interp, objv[2], &lobjId) == TCL_ERROR) return TCL_ERROR; retval = lo_unlink(conn, lobjId); if (retval == -1) { tresult = Tcl_NewStringObj("unlink of '", -1); Tcl_AppendStringsToObj(tresult, lobjId, NULL); Tcl_AppendStringsToObj(tresult, "' failed", NULL); Tcl_SetObjResult(interp, tresult); // Reconnect if the connection is bad. PgCheckConnectionState(connid); return TCL_ERROR; } Tcl_SetObjResult(interp, Tcl_NewIntObj(retval)); return TCL_OK; } /*********************************** Pg_lo_import import a Unix file into an (inversion) large objct returns the oid of that object upon success returns InvalidOid upon failure syntax: pg_lo_import conn filename ***********************************/ int Pg_lo_import(ClientData cData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { PGconn *conn; const char *filename; Oid lobjId; char *connString; Tcl_Obj *tresult; Pg_ConnectionId *connid; if (objc != 3) { Tcl_WrongNumArgs(interp, 1, objv, "conn filename"); return TCL_ERROR; } connString = Tcl_GetString(objv[1]); conn = PgGetConnectionId(interp, connString, &connid); if (conn == NULL) return TCL_ERROR; filename = Tcl_GetString(objv[2]); lobjId = lo_import(conn, filename); if (lobjId == InvalidOid) { tresult = Tcl_NewStringObj("import of '", -1); Tcl_AppendStringsToObj(tresult, filename, NULL); Tcl_AppendStringsToObj(tresult, "' failed", NULL); Tcl_SetObjResult(interp, tresult); // Reconnect if the connection is bad. PgCheckConnectionState(connid); return TCL_ERROR; } Tcl_SetObjResult(interp, Tcl_NewLongObj((long)lobjId)); return TCL_OK; } /*********************************** Pg_lo_export export an Inversion large object to a Unix file syntax: pg_lo_export conn lobjId filename ***********************************/ int Pg_lo_export(ClientData cData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { PGconn *conn; const char *filename; Oid lobjId; int retval; char *connString; Tcl_Obj *tresult; Pg_ConnectionId *connid; if (objc != 4) { Tcl_WrongNumArgs(interp, 1, objv, "conn lobjId filename"); return TCL_ERROR; } connString = Tcl_GetString(objv[1]); conn = PgGetConnectionId(interp, connString, &connid); if (conn == NULL) return TCL_ERROR; if (Tcl_GetIntFromObj(interp, objv[2], (int *)&lobjId) == TCL_ERROR) return TCL_ERROR; filename = Tcl_GetString(objv[3]); retval = lo_export(conn, lobjId, filename); if (retval == -1) { tresult = Tcl_NewStringObj("export failed", -1); Tcl_SetObjResult(interp, tresult); // Reconnect if the connection is bad. if(PgCheckConnectionState(connid) != TCL_OK) report_connection_error(interp, conn); return TCL_ERROR; } return TCL_OK; } /********************************* * Helper functions for Pg_select() *********************************/ /* count_parameters Returns TCL_OK or TCL_ERROR If successful, sets nParams to the number of expected parameters in queryString */ static int count_parameters(Tcl_Interp *interp, const char *queryString, int *nParamsPtr) { int nQuotes = 0; int nParams; const char *cursor = queryString; while(*cursor) { if(*cursor == '`') { nQuotes++; } cursor++; } if (nQuotes & 1) { Tcl_SetResult(interp, "Unmatched substitution back-quotes in SQL query", TCL_STATIC); return TCL_ERROR; } nParams = nQuotes / 2; if(nParams >= 100000) { Tcl_SetResult(interp, "Too many parameter substitutions requested (max 100,000)", TCL_STATIC); return TCL_ERROR; } *nParamsPtr = nParams; return TCL_OK; } /* expand_paremeters Returns TCL_OK or TCL_ERROR If successful, allocates newQueryString and paramValues array. If not, does not modify the arguments. */ static int expand_parameters(Tcl_Interp *interp, const char *queryString, int nParams, char *paramArrayName, char **newQueryStringPtr, const char ***paramValuesPtr, const char **bufferPtr) { // Allocating space for parameter IDs up to 100,000 (5 characters) char *newQueryString = (char *)ckalloc(strlen(queryString) + 5 * nParams); const char **paramValues = (const char **)ckalloc(nParams * sizeof (*paramValues)); int *paramLengths = (int *)ckalloc(nParams * sizeof (int)); const char *input = queryString; char *output = newQueryString; int paramIndex = 0; while(*input) { if(*input == '`') { // Step over quote ++input; // Defense, make sure we're not about to stomp over the end of the array assert(paramIndex < nParams); // base and length for name string const char *nameMarker = input; int paramNameLength = 0; // Step over name, making sure it's legit while(*input && *input != '`') { if (!isalnum(*input) && *input != '_') { Tcl_SetResult(interp, "Invalid name between back-quotes", TCL_STATIC); goto error_return; } input++; paramNameLength++; } // More likely a mistake than some bizarre attempt to use the null name in the param array. if(paramNameLength == 0) { Tcl_SetResult(interp, "Parameter name must not be empty", TCL_STATIC); goto error_return; } // Should never happen because we already know the back-quotes are paired // but check anyway assert(*input != 0); // Copy name out so we can null terminate it char *paramName = ckalloc(paramNameLength+1); strncpy(paramName, nameMarker, paramNameLength); paramName[paramNameLength] = 0; // Get name from array. Ignore errors. Maybe we want to trap some errors? // Think about that later. Tcl_Obj *paramValueObj = Tcl_GetVar2Ex(interp, paramArrayName, paramName, 0); // This has done its work, ditch it; ckfree((void *)paramName); paramName = NULL; // If the name is not present in the parameter array, then treat it as a NULL // in the SQL sense, represented by a literal NULL in the parameter list if(paramValueObj) { paramValues[paramIndex] = Tcl_GetStringFromObj(paramValueObj, ¶mLengths[paramIndex]); } else { paramValues[paramIndex] = NULL; paramLengths[paramIndex] = 0; } // First param (paramValues[0]) is $1, etc... sprintf(output, "$%d", paramIndex + 1); output += strlen(output); // step into next parameter paramIndex++; // step over closing back-quote input++; } else { // Literally copy everything outside `name` *output = *input; output++; input++; } } // Null terminate that puppy *output = 0; // If this triggers then something is very wrong with the logic above. assert(paramIndex == nParams); if (array_to_utf8(interp, paramValues, paramLengths, nParams, bufferPtr) != TCL_OK) { goto error_return; } // Normal return, push parameters and return OK. *paramValuesPtr = paramValues; *newQueryStringPtr = newQueryString; return TCL_OK; error_return: // Something went wrong, clean up and return ERROR. if(paramValues) ckfree((void *)paramValues); if(paramLengths) ckfree((void *)paramLengths); if(newQueryString) ckfree((void *)newQueryString); return TCL_ERROR; } /********************************** * pg_select send a select query string to the backend connection syntax: pg_select ?-nodotfields? ?-withoutnulls? ?-variables? ?-paramarray var? ?-count var? ?-params list? connection query var proc The query must be a select statement The var is used in the proc as an array The proc is run once for each row found .headers, .numcols and .tupno are not set if -nodotfields is specified null variables are set as empty strings unless -withoutnulls is specified, in which case null variables are made to simply be absent from the array If -params is provided, then it is a list of parameters that will replace "$1" "$2" and so on in the query. Don't forget to escape the "$" signs or {brace-enclose} the query. :) If -paramarray is provided, then occurrences of `name` will be replaced (via PQexecParams) with the corresponding value from paramArray. If the array doesn't contain the name then NULL will be replaced instead. * `name` must occur in a location where a value or field name could occur. * There are a maximum of 99,999 substitutions. * The name must contain only alphanumercis and underscores. Originally I was also going to update changes but that has turned out to be not so simple. Instead, the caller should get the OID of any table they want to update and update it themself in the loop. I may try to write a simplified table lookup and update function to make that task a little easier. The return is either TCL_OK, TCL_ERROR or TCL_RETURN and interp->result may contain more information. **********************************/ int Pg_select(ClientData cData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { Pg_ConnectionId *connid; PGconn *conn; PGresult *result; int r, retval = TCL_ERROR; int tupno, column, ncols = 0; int withoutNulls = 0; int noDotFields = 0; int rowByRow = 0; int firstPass = 1; int index = 1; int nParams = 0; char *connString = NULL; const char *queryString = NULL; char *varNameString = NULL; char *paramArrayName = NULL; const char *paramsBuffer = NULL; Tcl_Obj *varNameObj = NULL; Tcl_Obj *procStringObj = NULL; Tcl_Obj *columnListObj = NULL; Tcl_Obj **columnNameObjs = NULL; const char **paramValues = NULL; char *newQueryString = NULL; Tcl_Obj *paramListObj = NULL; int useVariables = 0; int tuplesProcessed = 0; Tcl_Obj *tuplesVarObj = NULL; enum positionalArgs {SELECT_ARG_CONN, SELECT_ARG_QUERY, SELECT_ARG_VAR, SELECT_ARG_PROC, SELECT_ARGS}; int nextPositionalArg = SELECT_ARG_CONN; for(index = 1; index < objc && nextPositionalArg != SELECT_ARGS; index++) { char *arg = Tcl_GetString(objv[index]); if (arg[0] == '-' && arg[1] != '-') { if (strcmp(arg, "-withoutnulls") == 0) { withoutNulls = 1; } else if (strcmp(arg, "-rowbyrow") == 0) { rowByRow = 1; } else if (strcmp(arg, "-nodotfields") == 0) { noDotFields = 1; } else if(strcmp(arg, "-variables") == 0) { if(paramListObj || paramArrayName) goto parameter_conflict; useVariables = 1; } else if (strcmp(arg, "-paramarray") == 0) { if(paramListObj || useVariables) goto parameter_conflict; index++; paramArrayName = Tcl_GetString(objv[index]); } else if (strcmp(arg, "-count") == 0) { index++; tuplesVarObj = objv[index]; Tcl_UnsetVar(interp, Tcl_GetString(tuplesVarObj), 0); } else if (strcmp(arg, "-params") == 0) { if(paramArrayName || useVariables) { parameter_conflict: Tcl_SetResult(interp, "Can't combine multiple parameter flags (-variables, -paramarray, -params)", TCL_STATIC); return TCL_ERROR; } index++; paramListObj = objv[index]; } else { Tcl_SetObjResult(interp, Tcl_NewStringObj ("-arg argument isn't one of \"-nodotfields\", \"-variables\", \"-paramarray\", \"-params\", \"-rowbyrow\", \"-count\", or \"-withoutnulls\"", -1)); return TCL_ERROR; } } else { switch(nextPositionalArg) { case SELECT_ARG_CONN: connString = Tcl_GetString(objv[index]); nextPositionalArg = SELECT_ARG_QUERY; break; case SELECT_ARG_QUERY: queryString = Tcl_GetString(objv[index]); nextPositionalArg = SELECT_ARG_VAR; break; case SELECT_ARG_VAR: varNameObj = objv[index]; varNameString = Tcl_GetString(varNameObj); nextPositionalArg = SELECT_ARG_PROC; break; case SELECT_ARG_PROC: procStringObj = objv[index]; nextPositionalArg = SELECT_ARGS; break; } } } if (index < objc || nextPositionalArg != SELECT_ARGS) { Tcl_WrongNumArgs(interp, 1, objv, "?-nodotfields? ?-rowbyrow? ?-withoutnulls? ?-variables? ?-paramarray var? ?-params list? ?-count var? connection queryString var proc"); return TCL_ERROR; } if (useVariables) { if (handle_substitutions(interp, queryString, &newQueryString, ¶mValues, &nParams, ¶msBuffer) != TCL_OK) { return TCL_ERROR; } if(nParams) queryString = newQueryString; else { // No variables being substituted, fall back to simple code path ckfree((void *)newQueryString); newQueryString = NULL; ckfree((void *)paramValues); paramValues = NULL; } } if(paramListObj) { Tcl_Obj **listObjv; if (Tcl_ListObjGetElements(interp, paramListObj, &nParams, &listObjv) == TCL_ERROR) { return TCL_ERROR; } if (build_param_array(interp, nParams, listObjv, ¶mValues, ¶msBuffer) != TCL_OK) { return TCL_ERROR; } } if(paramArrayName) { // Count and validate parameters for PQexecParams(...paramValues...). if(count_parameters(interp, queryString, &nParams) == TCL_ERROR) { return TCL_ERROR; } if (nParams) { if(expand_parameters(interp, queryString, nParams, paramArrayName, &newQueryString, ¶mValues, ¶msBuffer) == TCL_ERROR) { return TCL_ERROR; } queryString = newQueryString; } } conn = PgGetConnectionId(interp, connString, &connid); if (conn == NULL) { cleanup_params_and_return_error: { if(paramValues) ckfree((void *)paramValues); if(paramsBuffer) ckfree((void *)paramsBuffer); if(newQueryString) ckfree((void *)newQueryString); return TCL_ERROR; } } if(nParams) { // TODO convert parameters to external } connid->sql_count++; if (rowByRow) { int status; // Make the call if (nParams) { status = PQsendQueryParams(conn, externalString(queryString), nParams, NULL, paramValues, NULL, NULL, 0); } else { status = PQsendQuery(conn, externalString(queryString)); } if(status == 0) { /* error occurred sending the query */ report_connection_error(interp, conn); // Reconnect if the connection is bad. PgCheckConnectionState(connid); goto cleanup_params_and_return_error; } // It doesn't matter if this fails, the logic for handling the results is the same, we'll // just have a big wait before the first result comes out. PQsetSingleRowMode (conn); // Queue up the result. result = PQgetResult (conn); if(result == 0) { /* error occurred sending the query */ report_connection_error(interp, conn); // Reconnect if the connection is bad. PgCheckConnectionState(connid); goto cleanup_params_and_return_error; } } else { // Make the call AND queue up the result. if (nParams) { result = PQexecParams(conn, externalString(queryString), nParams, NULL, paramValues, NULL, NULL, 0); } else { result = PQexec(conn, externalString(queryString)); } if (result == 0) { /* error occurred sending the query */ report_connection_error(interp, conn); // Reconnect if the connection is bad. PgCheckConnectionState(connid); goto cleanup_params_and_return_error; } } // Register on the connection channel to hold it open (eg, in case a user // issues a pg_disconnect inside the select). Tcl_Channel conn_chan = Tcl_GetChannel(interp, connString, 0); Tcl_RegisterChannel(NULL, conn_chan); // At this point we no longer need these. Zap them so we don't have to worry about them // in the big loop. if(paramValues) { ckfree((void *)paramValues); paramValues = NULL; } if(newQueryString) { ckfree((void *)newQueryString); newQueryString = NULL; } if(paramsBuffer) { ckfree((void *)paramsBuffer); paramsBuffer = NULL; } /* Transfer any notify events from libpq to Tcl event queue. */ // TODO: why was this commented out? // PgNotifyTransferEvents(connid); // Invariant from this point: If retval != TCL_OK we're exiting retval = TCL_OK; // Invariant from this point - result is NULL or result needs to be PQclear()ed while (result != NULL) { int resultStatus = PQresultStatus(result); // Don't care if it's row-by-row or not, these are the only good result statuses either way. if (resultStatus != PGRES_TUPLES_OK && resultStatus != PGRES_SINGLE_TUPLE) { /* query failed, or it wasn't SELECT */ /* NB FIX there isn't necessarily an error here, * meaning we can get an empty string */ char *errString = PQresultErrorMessage(result); char *errStatus = PQresStatus (resultStatus); if (*errString == '\0') { errString = errStatus; Tcl_SetErrorCode(interp, "POSTGRESQL", errStatus, (char *)NULL); } else { char *nl = strchr(errString, '\n'); if(nl) *nl = '\0'; Tcl_SetErrorCode(interp, "POSTGRESQL", errStatus, errString, (char *)NULL); if(nl) *nl = '\n'; } // Reconnect if the connection is bad (can only happen here in rowbyrow or first pass) if(rowByRow || firstPass) PgCheckConnectionState(connid); Tcl_SetResult(interp, errString, TCL_VOLATILE); retval = TCL_ERROR; goto done; } // Save the list of column names. if (firstPass) { ncols = PQnfields(result); columnNameObjs = (Tcl_Obj **)ckalloc(sizeof(Tcl_Obj *) * ncols); for (column = 0; column < ncols; column++) { char *colName = PQfname(result, column); if (colName == NULL) { // PQfname failed, shouldn't happen, but we've seen it char msg[64]; sprintf(msg, "PQfname() returned NULL for column %d, ncols %d", column, ncols); Tcl_SetResult(interp, msg, TCL_VOLATILE); retval = TCL_ERROR; goto done; } else { columnNameObjs[column] = Tcl_NewStringObj(colName, -1); } } columnListObj = Tcl_NewListObj(ncols, columnNameObjs); Tcl_IncrRefCount (columnListObj); firstPass = 0; } int numTuples = PQntuples(result); if(tuplesVarObj) Tcl_ObjSetVar2(interp, tuplesVarObj, NULL, Tcl_NewIntObj(numTuples), 0); // Loop over the result, even if it's a single row. for (tupno = 0; tupno < numTuples; tupno++) { // Clear array before filling it in. Ignore failure because it's // OK for the array not to exist at this point. Tcl_UnsetVar2(interp, varNameString, NULL, 0); // Set the dot fields in the array. if (!noDotFields) { if (Tcl_SetVar2Ex(interp, varNameString, ".headers", columnListObj, TCL_LEAVE_ERR_MSG) == NULL || Tcl_SetVar2Ex(interp, varNameString, ".numcols", Tcl_NewIntObj(ncols), TCL_LEAVE_ERR_MSG) == NULL || Tcl_SetVar2Ex(interp, varNameString, ".tupno", Tcl_NewIntObj(tupno), TCL_LEAVE_ERR_MSG) == NULL) { retval = TCL_ERROR; goto done; } } // Set all of the column values for this row. for (column = 0; column < ncols; column++) { Tcl_Obj *valueObj = NULL; char *string; string = PQgetvalue (result, tupno, column); if (*string == '\0') { if (PQgetisnull (result, tupno, column)) { if (withoutNulls) { // Don't need to unset because the array was cleared. continue; } if ((connid->nullValueString != NULL) && (*connid->nullValueString != '\0')) { valueObj = Tcl_NewStringObj(connid->nullValueString, -1); } } } if (valueObj == NULL) { valueObj = Tcl_NewStringObj(utfString(string), -1); } if (Tcl_ObjSetVar2(interp, varNameObj, columnNameObjs[column], valueObj, TCL_LEAVE_ERR_MSG) == NULL) { retval = TCL_ERROR; goto done; } } tuplesProcessed++; // Run the code body. r = Tcl_EvalObjEx(interp, procStringObj, 0); if ((r != TCL_OK) && (r != TCL_CONTINUE)) { if (r == TCL_BREAK) { goto done; /* exit loop, but leave TCL_OK in retval */ } if (r == TCL_ERROR) { char msg[60]; sprintf(msg, "\n (\"pg_select\" body line %d)", Tcl_GetErrorLine(interp)); Tcl_AddErrorInfo(interp, msg); } retval = r; goto done; } } PQclear(result); if(rowByRow) { result = PQgetResult (conn); } else { result = NULL; } } done: /* drain output */ while (result) { PQclear(result); if(rowByRow) { result = PQgetResult (conn); } else { result = NULL; } } if (columnListObj != NULL) { Tcl_DecrRefCount (columnListObj); } if (columnNameObjs != NULL) { ckfree((void *)columnNameObjs); } if(tuplesVarObj) Tcl_UnsetVar(interp, Tcl_GetString(tuplesVarObj), 0); Tcl_UnregisterChannel(NULL, conn_chan); Tcl_UnsetVar(interp, varNameString, 0); return retval; } /* * Test whether any callbacks are registered on this connection for * the given relation name. NB: supplied name must be case-folded already. */ static int Pg_have_listener(Pg_ConnectionId * connid, const char *relname) { Pg_TclNotifies *notifies; Tcl_HashEntry *entry; for (notifies = connid->notify_list; notifies != NULL; notifies = notifies->next) { Tcl_Interp *interp = notifies->interp; if (interp == NULL) continue; /* ignore deleted interpreter */ entry = Tcl_FindHashEntry(¬ifies->notify_hash, (char *)relname); if (entry == NULL) continue; /* no pg_listen in this interpreter */ return 1; /* OK, there is a listener */ } return 0; /* Found no listener */ } /*********************************** Pg_listen create or remove a callback request for notifies on a given name syntax: pg_listen conn notifyname ?callbackcommand? With a fourth arg, creates or changes the callback command for notifies on the given name; without, cancels the callback request. Callbacks can occur whenever Tcl is executing its event loop. This is the normal idle loop in Tk; in plain tclsh applications, vwait or update can be used to enter the Tcl event loop. ***********************************/ int Pg_listen(ClientData cData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { const char *origrelname; char *caserelname; char *callback = NULL; Pg_TclNotifies *notifies; Tcl_HashEntry *entry; Pg_ConnectionId *connid; PGconn *conn; PGresult *result; int new; char *connString; int callbackStrlen = 0; int origrelnameStrlen; Tcl_Obj *tresult; if (objc < 3 || objc > 4) { Tcl_WrongNumArgs(interp, 1, objv, "connection relname ?callback?"); return TCL_ERROR; } /* * Get the command arguments. Note that the relation name will be * copied by Tcl_CreateHashEntry while the callback string must be * allocated by us. */ connString = Tcl_GetString(objv[1]); conn = PgGetConnectionId(interp, connString, &connid); if (conn == NULL) return TCL_ERROR; if (connid->callbackPtr || connid->callbackInterp) { Tcl_SetResult(interp, "Attempt to query while waiting for callback", TCL_STATIC); return TCL_ERROR; } /* * LISTEN/NOTIFY do not preserve case unless the relation name is * quoted. We have to do the same thing to ensure that we will find * the desired pg_listen item. */ origrelname = Tcl_GetStringFromObj(objv[2], &origrelnameStrlen); caserelname = (char *)ckalloc((unsigned)(origrelnameStrlen + 1)); if (*origrelname == '"') { /* Copy a quoted string without downcasing */ strcpy(caserelname, origrelname + 1); caserelname[origrelnameStrlen - 2] = '\0'; } else { /* Downcase it */ const char *rels = origrelname; char *reld = caserelname; while (*rels) *reld++ = tolower((unsigned char)*rels++); *reld = '\0'; } if (objc > 3) { char *callbackStr; callbackStr = Tcl_GetStringFromObj(objv[3], &callbackStrlen); callback = ckalloc(callbackStrlen + 1); strcpy(callback, callbackStr); } /* Find or make a Pg_TclNotifies struct for this interp and connection */ for (notifies = connid->notify_list; notifies; notifies = notifies->next) { if (notifies->interp == interp) break; } if (notifies == NULL) { notifies = (Pg_TclNotifies *) ckalloc(sizeof(Pg_TclNotifies)); notifies->interp = interp; Tcl_InitHashTable(¬ifies->notify_hash, TCL_STRING_KEYS); notifies->conn_loss_cmd = NULL; notifies->next = connid->notify_list; connid->notify_list = notifies; Tcl_CallWhenDeleted(interp, PgNotifyInterpDelete, (ClientData)notifies); } if (callback) { /* * Create or update a callback for a relation */ int alreadyHadListener = Pg_have_listener(connid, caserelname); entry = Tcl_CreateHashEntry(¬ifies->notify_hash, caserelname, &new); /* If update, free the old callback string */ if (!new) ckfree((void *)Tcl_GetHashValue(entry)); /* Store the new callback string */ Tcl_SetHashValue(entry, callback); /* Start the notify event source if it isn't already running */ PgStartNotifyEventSource(connid); /* * Send a LISTEN command if this is the first listener. */ if (!alreadyHadListener) { char *cmd = (char *)ckalloc((unsigned)(origrelnameStrlen + 8)); sprintf(cmd, "LISTEN %s", origrelname); result = PQexec(conn, cmd); ckfree((void *)cmd); /* Transfer any notify events from libpq to Tcl event queue. */ PgNotifyTransferEvents(connid); if (PQresultStatus(result) != PGRES_COMMAND_OK) { /* Error occurred during the execution of command */ PQclear(result); Tcl_DeleteHashEntry(entry); ckfree((void *)callback); ckfree((void *)caserelname); report_connection_error(interp, conn); return TCL_ERROR; } PQclear(result); } } else { /* * Remove a callback for a relation */ entry = Tcl_FindHashEntry(¬ifies->notify_hash, caserelname); if (entry == NULL) { tresult = Tcl_NewStringObj("not listening on ", -1); Tcl_AppendStringsToObj(tresult, origrelname, NULL); Tcl_SetObjResult(interp, tresult); ckfree((void *)caserelname); return TCL_ERROR; } ckfree((void *)Tcl_GetHashValue(entry)); Tcl_DeleteHashEntry(entry); /* * Send an UNLISTEN command if that was the last listener. Note: * we don't attempt to turn off the notify mechanism if no LISTENs * remain active; not worth the trouble. */ if (!Pg_have_listener(connid, caserelname)) { char *cmd = (char *) ckalloc((unsigned)(origrelnameStrlen + 10)); sprintf(cmd, "UNLISTEN %s", origrelname); result = PQexec(conn, cmd); ckfree((void *)cmd); /* Transfer any notify events from libpq to Tcl event queue. */ PgNotifyTransferEvents(connid); if (PQresultStatus(result) != PGRES_COMMAND_OK) { /* Error occurred during the execution of command */ PQclear(result); ckfree(caserelname); report_connection_error(interp, conn); return TCL_ERROR; } PQclear(result); } } ckfree(caserelname); return TCL_OK; } /********************************** * pg_sendquery send a query string to the backend connection syntax: pg_sendquery connection query the return result is either an error message or nothing, indicating the command was dispatched. **********************************/ int Pg_sendquery(ClientData cData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { Pg_ConnectionId *connid; PGconn *conn; int status; const char *connString = NULL; const char *execString = NULL; char *newExecString = NULL; const char **paramValues = NULL; char *paramArrayName = NULL; const char *paramsBuffer = NULL; int nParams; int index; int useVariables = 0; enum positionalArgs {SENDQUERY_ARG_CONN, SENDQUERY_ARG_SQL, SENDQUERY_ARGS}; int nextPositionalArg = SENDQUERY_ARG_CONN; for(index = 1; index < objc && nextPositionalArg != SENDQUERY_ARGS; index++) { char *arg = Tcl_GetString(objv[index]); if (arg[0] == '-') { if(strcmp(arg, "-paramarray") == 0) { index++; paramArrayName = Tcl_GetString(objv[index]); } else if(strcmp(arg, "-variables") == 0) { useVariables = 1; } else { goto wrong_args; } } else { switch(nextPositionalArg) { case SENDQUERY_ARG_CONN: connString = Tcl_GetString(objv[index]); nextPositionalArg = SENDQUERY_ARG_SQL; break; case SENDQUERY_ARG_SQL: execString = Tcl_GetString(objv[index]); nextPositionalArg = SENDQUERY_ARGS; break; } } } if (nextPositionalArg != SENDQUERY_ARGS || connString == NULL || execString == NULL) { wrong_args: Tcl_WrongNumArgs(interp, 1, objv, "?-variables? ?-paramarray var? connection queryString ?parm...?"); return TCL_ERROR; } /* figure out the connect string and get the connection ID */ conn = PgGetConnectionId(interp, connString, &connid); if (conn == NULL) return TCL_ERROR; if (connid->res_copyStatus != RES_COPY_NONE) { Tcl_SetResult(interp, "Attempt to query while COPY in progress", TCL_STATIC); return TCL_ERROR; } if (connid->callbackPtr || connid->callbackInterp) { Tcl_SetResult(interp, "Attempt to query while waiting for callback", TCL_STATIC); return TCL_ERROR; } /* extra params will substitute for $1, $2, etc, in the statement */ /* objc must be 3 or greater at this point */ nParams = objc - index; if (useVariables) { if(paramArrayName || nParams) { Tcl_SetResult(interp, "-variables can not be used with positional or named parameters", TCL_STATIC); return TCL_ERROR; } if (handle_substitutions(interp, execString, &newExecString, ¶mValues, &nParams, ¶msBuffer) != TCL_OK) { return TCL_ERROR; } if(nParams) execString = newExecString; } else if (paramArrayName) { // Can't combine positional params and -paramarray if (nParams) { Tcl_SetResult(interp, "Can't use both positional and named parameters", TCL_STATIC); return TCL_ERROR; } if (count_parameters(interp, execString, &nParams) == TCL_ERROR) { return TCL_ERROR; } if(nParams) { // After this point we must free newExecString and paramValues before exiting if (expand_parameters(interp, execString, nParams, paramArrayName, &newExecString, ¶mValues, ¶msBuffer) == TCL_ERROR) { return TCL_ERROR; } execString = newExecString; } } else if (nParams) { // After this point we must free paramValues and paramsBuffer before exiting if (build_param_array(interp, nParams, &objv[index], ¶mValues, ¶msBuffer) != TCL_OK) { return TCL_ERROR; } } if (nParams == 0) { status = PQsendQuery(conn, externalString(execString)); } else { status = PQsendQueryParams(conn, externalString(execString), nParams, NULL, paramValues, NULL, NULL, 1); } if(newExecString) { ckfree(newExecString); newExecString = NULL; } if(paramValues) { ckfree ((void *)paramValues); paramValues = NULL; } if(paramsBuffer) { ckfree((void *)paramsBuffer); paramsBuffer = NULL; } connid->sql_count++; /* Transfer any notify events from libpq to Tcl event queue. */ PgNotifyTransferEvents(connid); if (status) return TCL_OK; else { /* error occurred during the query */ report_connection_error(interp, conn); // Reconnect if the connection is bad. PgCheckConnectionState(connid); return TCL_ERROR; } } /********************************** * pg_sendquery_prepared send a request to executed a prepared statement with given parameters to the backend connection, asynchronously syntax: pg_sendquery_prepared connection statement_name [var1] [var2]... the return result is either an error message or a handle for a query result. Handles start with the prefix "pgp" **********************************/ int Pg_sendquery_prepared(ClientData cData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { Pg_ConnectionId *connid; PGconn *conn; char *connString; char *statementNameString; const char **paramValues = NULL; int nParams; int status; if (objc < 3) { Tcl_WrongNumArgs(interp, 1, objv, "connection statementName [parm...]"); return TCL_ERROR; } /* extra params will substitute for $1, $2, etc, in the statement */ /* objc must be 3 or greater at this point */ nParams = objc - 3; /* figure out the connect string and get the connection ID */ connString = Tcl_GetString(objv[1]); conn = PgGetConnectionId(interp, connString, &connid); if (conn == NULL) return TCL_ERROR; if (connid->res_copyStatus != RES_COPY_NONE) { Tcl_SetResult(interp, "Attempt to query while COPY in progress", TCL_STATIC); return TCL_ERROR; } //HERE// // TODO convert params /* If there are any extra params, allocate paramValues and fill it * with the string representations of all of the extra parameters * substituted on the command line. Otherwise nParams will be 0, * and we don't need to allocate space, paramValues will be NULL. * However, prepared statements that don't take any parameters aren't * generally real useful. */ if (nParams > 0) { int param; paramValues = (const char **)ckalloc (nParams * sizeof (char *)); for (param = 0; param < nParams; param++) { paramValues[param] = Tcl_GetString (objv[3+param]); if (strcmp(paramValues[param], "NULL") == 0) { paramValues[param] = NULL; } } } statementNameString = Tcl_GetString(objv[2]); status = PQsendQueryPrepared(conn, statementNameString, nParams, paramValues, NULL, NULL, 1); connid->sql_count++; if (paramValues != (const char **)NULL) { ckfree ((void *)paramValues); } /* Transfer any notify events from libpq to Tcl event queue. */ PgNotifyTransferEvents(connid); if (status) return TCL_OK; else { /* error occurred during the query */ report_connection_error(interp, conn); // Reconnect if the connection is bad. PgCheckConnectionState(connid); return TCL_ERROR; } } /********************************** * pg_set_single_row_mode if called at the correct time and referencing new enough libpq (9.2+) this activates single-row return mode for the current query and returns 1, else returns 0. syntax: pg_set_single_row_mode connection the return result is either 1 or 0. **********************************/ int Pg_set_single_row_mode(ClientData cData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { #ifndef HAVE_PQSETSINGLEROWMODE Tcl_SetObjResult(interp, Tcl_NewStringObj( "function unavailable with this version of the postgres libpq library\n", -1)); return TCL_ERROR; #else Pg_ConnectionId *connid; PGconn *conn; char *connString; int setRowModeResult; if (objc != 2) { Tcl_WrongNumArgs(interp, 1, objv, "connection"); return TCL_ERROR; } connString = Tcl_GetString(objv[1]); conn = PgGetConnectionId(interp, connString, &connid); if (conn == NULL) return TCL_ERROR; setRowModeResult = PQsetSingleRowMode (conn); Tcl_SetObjResult (interp, Tcl_NewIntObj (setRowModeResult)); return TCL_OK; #endif } /********************************** * pg_getresult wait for the next result from a prior pg_sendquery syntax: pg_getresult connection the return result is either an error message, nothing, or a handle for a query result. Handles start with the prefix "pgp" **********************************/ int Pg_getresult(ClientData cData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { Pg_ConnectionId *connid; PGconn *conn; PGresult *result; char *connString; if (objc != 2) { Tcl_WrongNumArgs(interp, 1, objv, "connection"); return TCL_ERROR; } connString = Tcl_GetString(objv[1]); conn = PgGetConnectionId(interp, connString, &connid); if (conn == NULL) return TCL_ERROR; if (connid->callbackPtr || connid->callbackInterp) { /* Cancel any callback script: the user lost patience */ Tcl_DecrRefCount(connid->callbackPtr); Tcl_Release((ClientData) connid->callbackInterp); connid->callbackPtr=NULL; connid->callbackInterp=NULL; } result = PQgetResult(conn); /* Transfer any notify events from libpq to Tcl event queue. */ PgNotifyTransferEvents(connid); /* if there's a non-null result, give the caller the handle */ if (result) { int rId; if(PgSetResultId(interp, connString, result, &rId) != TCL_OK) { PQclear(result); return TCL_ERROR; } ExecStatusType rStat = PQresultStatus(result); if (rStat == PGRES_COPY_IN || rStat == PGRES_COPY_OUT) { connid->res_copyStatus = RES_COPY_INPROGRESS; connid->res_copy = rId; } } return TCL_OK; } /* *---------------------------------------------------------------------- * * Pg_getdata -- * * returns the data from the connection, from either a async * connection, or a async query * * Syntax: * pg_getdata $conn -result|-connection * * Results: * the return result is a handle for the data that has * arrived on that connection channel * *---------------------------------------------------------------------- */ int Pg_getdata(ClientData cData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { Pg_ConnectionId *connid; PGconn *conn; char *connString; int optIndex; static const char *options[] = { "-result", "-connection", NULL }; enum options { OPT_RESULT, OPT_CONNECTION }; if (objc != 3) { Tcl_WrongNumArgs(interp, 1, objv, "connection -result|-connection"); return TCL_ERROR; } if (Tcl_GetIndexFromObj(interp, objv[2], options, "option", TCL_EXACT, &optIndex) != TCL_OK) { return TCL_ERROR; } connString = Tcl_GetString(objv[1]); conn = PgGetConnectionId(interp, connString, &connid); if (conn == NULL) return TCL_ERROR; if (optIndex == OPT_RESULT) { PGresult *result; result = PQgetResult(conn); /* if there's a non-null result, give the caller the handle */ if (result) { int rId; if(PgSetResultId(interp, connString, result, &rId) != TCL_OK) { PQclear(result); return TCL_ERROR; } ExecStatusType rStat = PQresultStatus(result); // Reconnect if the connection is bad. if(PgCheckConnectionState(connid) != TCL_OK) { report_connection_error(interp, conn); return TCL_ERROR; } if (rStat == PGRES_COPY_IN || rStat == PGRES_COPY_OUT) { connid->res_copyStatus = RES_COPY_INPROGRESS; connid->res_copy = rId; } } } else if (optIndex == OPT_CONNECTION) { PostgresPollingStatusType pollstatus; Tcl_Obj *res = NULL; pollstatus = PQconnectPoll(conn); // Reconnect if the connection is bad. if(PgCheckConnectionState(connid) != TCL_OK) { report_connection_error(interp, conn); return TCL_ERROR; } switch (pollstatus) { case PGRES_POLLING_FAILED: { res = Tcl_NewStringObj("PGRES_POLLING_FAILED", -1); break; } case PGRES_POLLING_READING: { res = Tcl_NewStringObj("PGRES_POLLING_READING", -1); break; } case PGRES_POLLING_WRITING: { res = Tcl_NewStringObj("PGRES_POLLING_WRITING", -1); break; } case PGRES_POLLING_OK: { res = Tcl_NewStringObj("PGRES_POLLING_OK", -1); break; } case PGRES_POLLING_ACTIVE: { res = Tcl_NewStringObj("PGRES_POLLING_ACTIVE", -1); } } Tcl_SetObjResult(interp, res); } else { Tcl_WrongNumArgs(interp, 1, objv, "connection -result|-connection"); return TCL_ERROR; } /* Transfer any notify events from libpq to Tcl event queue. */ PgNotifyTransferEvents(connid); return TCL_OK; } /********************************** * pg_isbusy see if a query is busy, i.e. pg_getresult would block. syntax: pg_isbusy connection return is 1 if it's busy and pg_getresult would block, 0 otherwise **********************************/ int Pg_isbusy(ClientData cData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { Pg_ConnectionId *connid; PGconn *conn; char *connString; if (objc != 2) { Tcl_WrongNumArgs(interp, 1, objv, "connection"); return TCL_ERROR; } connString = Tcl_GetString(objv[1]); conn = PgGetConnectionId(interp, connString, &connid); if (conn == NULL) return TCL_ERROR; PQconsumeInput(conn); // Reconnect if the connection is bad. if(PgCheckConnectionState(connid) != TCL_OK) { report_connection_error(interp, conn); return TCL_ERROR; } Tcl_SetObjResult(interp, Tcl_NewIntObj(PQisBusy(conn))); return TCL_OK; } /********************************** * pg_blocking see or set whether or not a connection is set to blocking or nonblocking syntax: pg_blocking connection pg_blocking connection 1 pg_blocking connection 0 return is 1 if it's blocking or 0 if not (if called with two arguments), sets blocking if called with 3. **********************************/ int Pg_blocking(ClientData cData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { Pg_ConnectionId *connid; PGconn *conn; char *connString; int boolean; if ((objc < 2) || (objc > 3)) { Tcl_WrongNumArgs(interp, 1, objv, "connection ?bool?"); return TCL_ERROR; } connString = Tcl_GetString(objv[1]); conn = PgGetConnectionId(interp, connString, &connid); if (conn == NULL) return TCL_ERROR; if (objc == 2) { Tcl_SetObjResult(interp, Tcl_NewBooleanObj(!PQisnonblocking(conn))); return TCL_OK; } /* objc == 3, they're setting it */ if (Tcl_GetBooleanFromObj(interp, objv[2], &boolean) == TCL_ERROR) return TCL_ERROR; PQsetnonblocking(conn, !boolean); return TCL_OK; } /********************************** * pg_null_value_string see or set the null value string syntax: pg_null_value_string connection pg_null_value_string connection nullString return is the current null value string if called with two arguments or the new null value string if called with 3. **********************************/ int Pg_null_value_string(ClientData cData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { Pg_ConnectionId *connid; PGconn *conn; char *connString; char *nullValueString; int length; if ((objc < 2) || (objc > 3)) { Tcl_WrongNumArgs(interp, 1, objv, "connection ?string?"); return TCL_ERROR; } connString = Tcl_GetString(objv[1]); conn = PgGetConnectionId(interp, connString, &connid); if (conn == NULL) return TCL_ERROR; if (objc == 2) { if (connid->nullValueString == NULL || *connid->nullValueString == '\0') { Tcl_SetObjResult(interp, Tcl_NewStringObj("", 0)); } else { Tcl_SetObjResult(interp, Tcl_NewStringObj(connid->nullValueString, -1)); } return TCL_OK; } /* objc == 3, they're setting it */ if (connid->nullValueString != NULL) { ckfree (connid->nullValueString); } nullValueString = Tcl_GetStringFromObj (objv[2], &length); connid->nullValueString = ckalloc (length + 1); strcpy (connid->nullValueString, nullValueString); Tcl_SetObjResult(interp, objv[2]); return TCL_OK; } /********************************** * pg_cancelrequest request that postgresql abandon processing of the current command syntax: pg_cancelrequest connection returns nothing if the command successfully dispatched or if nothing was going on, otherwise an error **********************************/ int Pg_cancelrequest(ClientData cData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { Pg_ConnectionId *connid; PGconn *conn; char *connString; if (objc != 2) { Tcl_WrongNumArgs(interp, 1, objv, "connection"); return TCL_ERROR; } connString = Tcl_GetString(objv[1]); conn = PgGetConnectionId(interp, connString, &connid); if (conn == NULL) return TCL_ERROR; /* * Clear any async result callback, if present. */ if (connid->callbackPtr) { Tcl_DecrRefCount(connid->callbackPtr); connid->callbackPtr = NULL; } if (connid->callbackInterp) { Tcl_Release((ClientData) connid->callbackInterp); connid->callbackInterp = NULL; } if (PQrequestCancel(conn) == 0) { // Reconnect if the connection is bad. if(PgCheckConnectionState(connid) != TCL_OK) report_connection_error(interp, conn); else Tcl_SetObjResult(interp, Tcl_NewStringObj(PQerrorMessage(conn), -1)); return TCL_ERROR; } return TCL_OK; } /*********************************** Pg_on_connection_loss create or remove a callback request for unexpected connection loss syntax: pg_on_connection_loss conn ?callbackcommand? With a third arg, creates or changes the callback command for connection loss; without, cancels the callback request. Callbacks can occur whenever Tcl is executing its event loop. This is the normal idle loop in Tk; in plain tclsh applications, vwait or update can be used to enter the Tcl event loop. ***********************************/ int Pg_on_connection_loss(ClientData cData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { char *callback = NULL; Pg_TclNotifies *notifies; Pg_ConnectionId *connid; PGconn *conn; char *connString; if (objc < 2 || objc > 3) { Tcl_WrongNumArgs(interp, 1, objv, "connection ?callback?"); return TCL_ERROR; } /* * Get the command arguments. */ connString = Tcl_GetString(objv[1]); conn = PgGetConnectionId(interp, connString, &connid); if (conn == NULL) return TCL_ERROR; if (objc > 2) { int callbackStrLen; char *callbackStr; /* there is probably a better way to do this, like incrementing * the reference count (?) */ callbackStr = Tcl_GetStringFromObj(objv[2], &callbackStrLen); callback = (char *) ckalloc((unsigned) (callbackStrLen + 1)); strcpy(callback, callbackStr); } /* Find or make a Pg_TclNotifies struct for this interp and connection */ for (notifies = connid->notify_list; notifies; notifies = notifies->next) { if (notifies->interp == interp) break; } if (notifies == NULL) { notifies = (Pg_TclNotifies *) ckalloc(sizeof(Pg_TclNotifies)); notifies->interp = interp; Tcl_InitHashTable(¬ifies->notify_hash, TCL_STRING_KEYS); notifies->conn_loss_cmd = NULL; notifies->next = connid->notify_list; connid->notify_list = notifies; Tcl_CallWhenDeleted(interp, PgNotifyInterpDelete, (ClientData) notifies); } /* Store new callback setting */ if (notifies->conn_loss_cmd) ckfree((void *) notifies->conn_loss_cmd); notifies->conn_loss_cmd = callback; if (callback) { /* * Start the notify event source if it isn't already running. The * notify source will cause Tcl to watch read-ready on the * connection socket, so that we find out quickly if the * connection drops. */ PgStartNotifyEventSource(connid); } return TCL_OK; } /* *---------------------------------------------------------------------- * * Pg_quote -- * * returns the quoted version of the passed in string * * Syntax: * pg_quote ?-null? ?connection? string * * Results: * * If the connection handle and the -null flag are both specified, * we examine the string to see if it matches the null value string * defined in the connection ID. If it is, we return the string * "NULL", unquoted. * * If no connection handle but the -null flag is specified, * we examine the string to see if it is the empty string. * If it is, we return the string "NULL", unquoted. * * If the passed in string doesn't match the null value string or if * pg_quote was invoked without the -null flag, the string is escaped * using PQescapeString or PQescapeStringConn, and that is returned. * *---------------------------------------------------------------------- */ int Pg_quote (ClientData cData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { char *fromString = NULL; char *toString; int fromStringLen; int stringSize; Pg_ConnectionId *connid = NULL; PGconn *conn = NULL; char *connString; int do_null_handling = 0; int error = 0; static Tcl_Obj *nullStringObj = NULL; /* allocate the null string object if we don't have it and increment * its reference count so it'll never be freed. We can use it over * and over and it'll keep using the same string object */ if (nullStringObj == NULL) { nullStringObj = Tcl_NewStringObj ("NULL", -1); Tcl_IncrRefCount (nullStringObj); } if ((objc < 2) || (objc > 4)) { wrongargs: Tcl_WrongNumArgs(interp, 1, objv, "?-null? ?connection? string"); return TCL_ERROR; } if (objc == 2) { /* * Get the "from" string. */ fromString = Tcl_GetStringFromObj(objv[1], &fromStringLen); } else if (objc == 3) { /* * Get the connection object (or possibly the -null flag). */ connString = Tcl_GetString(objv[1]); if (connString[0] == '-' && strcmp(connString, "-null") == 0) { do_null_handling = 1; } else { // wasn't the -null flag, so it must be a connection. conn = PgGetConnectionId(interp, connString, &connid); if (conn == NULL) return TCL_ERROR; } /* * Get the "from" string. */ fromString = Tcl_GetStringFromObj(objv[2], &fromStringLen); } else if (objc == 4) { /* * Since there are 3 arguments, ensure the first one is the -null flag. */ connString = Tcl_GetString(objv[1]); if (connString[0] == '-' && strcmp(connString, "-null") == 0) { do_null_handling = 1; } else { // wasn't the -null flag, so there is a syntax issue. goto wrongargs; } /* * Get the connection object. */ connString = Tcl_GetString(objv[2]); conn = PgGetConnectionId(interp, connString, &connid); if (conn == NULL) return TCL_ERROR; /* * Get the "from" string. */ fromString = Tcl_GetStringFromObj(objv[3], &fromStringLen); } else { goto wrongargs; } if (do_null_handling) { /* * If the from string is empty, see if the null value string is also * empty and if so, return the string NULL rather than something * quoted */ if (fromStringLen == 0) { if (connid == NULL || connid->nullValueString == NULL || *connid->nullValueString == '\0') { Tcl_SetObjResult (interp, nullStringObj); return TCL_OK; } } else { /* * The from string wasn't null, see if the connection's null value * string also isn't null and if so, if they match and if so, * return the string NULL */ if (connid != NULL && connid->nullValueString != NULL) { if (strcmp (fromString, connid->nullValueString) == 0) { Tcl_SetObjResult (interp, nullStringObj); return TCL_OK; } } } } /* * Allocate the "to" string, the max size is documented in the * postgres docs as 2 * fromStringLen + 1 and we add two more * for the leading and trailing single quotes */ toString = (char *) ckalloc((2 * fromStringLen) + 3); /* * call the library routine to escape the string, use * Tcl_SetResult to set the command result to be that string, * with TCL_DYNAMIC, we tell Tcl to free the memory when it's * done with it */ *toString = '\''; if (conn != NULL) { stringSize = PQescapeStringConn (conn, toString+1, fromString, fromStringLen, &error); if (error) { /* error returned from PQescapeStringConn, send it on up */ ckfree (toString); Tcl_SetObjResult (interp, Tcl_NewStringObj ( PQerrorMessage (conn), -1)); return TCL_ERROR; } } else { stringSize = PQescapeString (toString+1, fromString, fromStringLen); } toString[stringSize+1] = '\''; toString[stringSize+2] = '\0'; Tcl_SetResult(interp, toString, TCL_DYNAMIC); return TCL_OK; } /* *---------------------------------------------------------------------- * * Pg_escapeBytea -- * * returns the escaped version of the passed in binary * string * * Syntax: * pg_escapeBytea binaryString * * Results: * the return result is either an error message or the passed * in binary string after going through PQescapeBytea * * NOTE: PQunescapeBytea is *not* the direct inverse * of PQescapeBytea. The result from PQescapeBytea needs * to go through extra parsing, where as PQunescapeBytea * is at the end of the parsing stage. *---------------------------------------------------------------------- */ int Pg_escapeBytea(ClientData cData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { unsigned char *from; unsigned char *to; int fromLen; size_t toLen; PGconn *conn = NULL; char *connString; if ((objc < 2) || (objc > 3)) { Tcl_WrongNumArgs(interp, 1, objv, "?connection? binaryString"); return TCL_ERROR; } if (objc == 2) { /* * Get the "from" string. */ from = Tcl_GetByteArrayFromObj(objv[1], &fromLen); to = PQescapeBytea(from, fromLen, &toLen); } else { connString = Tcl_GetString(objv[1]); conn = PgGetConnectionId(interp, connString, NULL); if (conn == NULL) return TCL_ERROR; /* * Get the "from" string. */ from = Tcl_GetByteArrayFromObj(objv[2], &fromLen); to = PQescapeByteaConn(conn, from, fromLen, &toLen); } if (! to) { Tcl_SetObjResult(interp, Tcl_NewStringObj("Failed to quote binary string", -1)); return TCL_ERROR; } Tcl_SetObjResult(interp, Tcl_NewStringObj((char *)to, -1)); #ifdef PQfreemem PQfreemem(to); #else PQfreeNotify(to); #endif return TCL_OK; } /* *---------------------------------------------------------------------- * * Pg_unescapeBytea -- * * returns the unescaped version of the passed in escaped binary * string * * Syntax: * pg_unescapeBytea escapedBinaryString * * Results: * the return result is either an error message or the passed * in string, that has gone through PQunescapeBytea * * NOTE: PQunescapeBytea is *not* the direct inverse * of PQescapeBytea. The result from PQescapeBytea needs * to go through extra parsing, where as PQunescapeBytea * is at the end of the parsing stage. *---------------------------------------------------------------------- */ int Pg_unescapeBytea(ClientData cData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { const unsigned char *from; unsigned char *to; int fromLen; size_t toLen; if (objc != 2) { Tcl_WrongNumArgs(interp, 1, objv, "binaryString"); return TCL_ERROR; } from = (const unsigned char *)Tcl_GetStringFromObj(objv[1], &fromLen); to = PQunescapeBytea(from, &toLen); if (! to) { Tcl_SetObjResult(interp, Tcl_NewStringObj("Failed to unquote binary string", -1)); return TCL_ERROR; } Tcl_SetObjResult(interp, Tcl_NewByteArrayObj(to, toLen)); #ifdef PQfreemem PQfreemem(to); #else PQfreeNotify(to); #endif return TCL_OK; } /* *---------------------------------------------------------------------- * * Pg_dbinfo -- * * returns either the connection handles or the result handles * * Syntax: * pg_dbinfo connections * pg_dbinfo results connHandle * pg_dbinfo version connHandle * pg_dbinfo protocol connHandle * pg_dbinfo param connHandle paramName * pg_dbinfo backendpid connHandle * pg_dbinfo socket connHandle * pg_dbinfo sql_count connHandle * * pg_dbinfo dbname connHandle * pg_dbinfo user connHandle * pg_dbinfo pass connHandle * pg_dbinfo host connHandle * pg_dbinfo port connHandle * pg_dbinfo options connHandle * pg_dbinfo status connHandle * pg_dbinfo transaction_status connHandle * pg_dbinfo error_message connHandle * pg_dbinfo needs_password connHandle * pg_dbinfo used_password connHandle * pg_dbinfo used_ssl connHandle * * Results: * the return result is either an error message or a list of * the connection/result handles. * *---------------------------------------------------------------------- */ int Pg_dbinfo(ClientData cData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { Pg_ConnectionId *connid = NULL; char *connString = NULL; char buf[32]; Tcl_Obj *listObj; Tcl_Obj *tresult; Tcl_Obj **elemPtrs; int i, count, optIndex; Tcl_Channel conn_chan; const char *paramname; static const char *cmdargs = "connections|results|version|protocol|param|backendpid|socket|sql_count|dbname|user|password|host|port|options|status|transaction_status|error_message|needs_password|used_password|used_ssl"; static const char *options[] = { "connections", "results", "version", "protocol", "param", "backendpid", "socket", "sql_count", "dbname", "user", "password", "host", "port", "options", "status", "transaction_status", "error_message", "needs_password", "used_password", "used_ssl", NULL }; enum options { OPT_CONNECTIONS, OPT_RESULTS, OPT_VERSION, OPT_PROTOCOL, OPT_PARAM, OPT_BACKENDPID, OPT_SOCKET, OPT_SQL_COUNT, OPT_DBNAME, OPT_USER, OPT_PASSWORD, OPT_HOST, OPT_PORT, OPT_OPTIONS, OPT_STATUS, OPT_TRANSACTION_STATUS, OPT_ERROR_MESSAGE, OPT_NEEDS_PASSWORD, OPT_USED_PASSWORD, OPT_USED_SSL }; if (objc <= 1) { Tcl_WrongNumArgs(interp,1,objv,cmdargs); return TCL_ERROR; } if (Tcl_GetIndexFromObj(interp, objv[1], options, "option", TCL_EXACT, &optIndex) != TCL_OK) { return TCL_ERROR; } /* * this is common for most cmdargs, so do it upfront */ if (optIndex != OPT_CONNECTIONS) { if (optIndex == OPT_PARAM) { // OPT_PARAM is a maverick if (objc != 4) { Tcl_WrongNumArgs(interp, 2, objv, "connHandle paramName"); return TCL_ERROR; } } else { if (objc != 3) { Tcl_WrongNumArgs(interp, 2, objv, "connHandle"); return TCL_ERROR; } } connString = Tcl_GetString(objv[2]); conn_chan = Tcl_GetChannel(interp, connString, 0); if (conn_chan == NULL) { tresult = Tcl_NewStringObj(connString, -1); Tcl_AppendStringsToObj(tresult, " is not a valid connection", NULL); Tcl_SetObjResult(interp, tresult); return TCL_ERROR; } /* Check that it is a PG connection and not something else */ connid = (Pg_ConnectionId *) Tcl_GetChannelInstanceData(conn_chan); if (connid->conn == NULL) { return TCL_ERROR; } } switch ((enum options) optIndex) { case OPT_CONNECTIONS: { listObj = Tcl_NewListObj(0, (Tcl_Obj **) NULL); /* * This is not a very robust method to use. * Will have to re-think this */ Tcl_GetChannelNames(interp); Tcl_ListObjGetElements(interp, Tcl_GetObjResult(interp), &count, &elemPtrs); for (i = 0; i < count; i++) { char *name = Tcl_GetString(elemPtrs[i]); conn_chan = Tcl_GetChannel(interp, name, 0); if (conn_chan != NULL && Tcl_GetChannelType(conn_chan) == &Pg_ConnType) { if (Tcl_ListObjAppendElement(interp, listObj, elemPtrs[i]) != TCL_OK) { Tcl_DecrRefCount(listObj); return TCL_ERROR; } } } break; } case OPT_RESULTS: { listObj = Tcl_NewListObj(0, (Tcl_Obj **) NULL); for (i = 0; i <= connid->res_last; i++) { if (connid->results[i] == 0) { continue; } sprintf(buf, "%s.%d", connString, i); if (Tcl_ListObjAppendElement(interp, listObj, Tcl_NewStringObj(buf, -1)) != TCL_OK) { Tcl_DecrRefCount(listObj); return TCL_ERROR; } } break; } case OPT_VERSION: { #define SET_AND_CHECK_INT(fun) { \ int result = fun; \ if(PgCheckConnectionState(connid) != TCL_OK) { \ report_connection_error(interp, connid->conn); \ return TCL_ERROR; \ } \ Tcl_SetObjResult(interp, Tcl_NewIntObj(result)); \ } #define SET_AND_CHECK_BOOL(fun) { \ int result = fun; \ if(PgCheckConnectionState(connid) != TCL_OK) { \ report_connection_error(interp, connid->conn); \ return TCL_ERROR; \ } \ Tcl_SetObjResult(interp, Tcl_NewBooleanObj(result)); \ } #define SET_AND_CHECK_STRING(fun) { \ const char *result = fun; \ if(PgCheckConnectionState(connid) != TCL_OK) { \ report_connection_error(interp, connid->conn); \ return TCL_ERROR; \ } \ Tcl_SetObjResult(interp, Tcl_NewStringObj(result, -1)); \ } SET_AND_CHECK_INT(PQserverVersion(connid->conn)); return TCL_OK; } case OPT_PROTOCOL: { SET_AND_CHECK_INT(PQprotocolVersion(connid->conn)); return TCL_OK; } case OPT_PARAM: { paramname = Tcl_GetString(objv[3]); SET_AND_CHECK_STRING(PQparameterStatus(connid->conn,paramname)); return TCL_OK; } case OPT_BACKENDPID: { SET_AND_CHECK_INT(PQbackendPID(connid->conn)); return TCL_OK; } case OPT_SOCKET: { SET_AND_CHECK_INT(PQsocket(connid->conn)); return TCL_OK; } case OPT_SQL_COUNT: { // Can't call libpq, so leave alone Tcl_SetObjResult(interp, Tcl_NewIntObj( connid->sql_count)); return TCL_OK; } case OPT_DBNAME: { SET_AND_CHECK_STRING(PQdb(connid->conn)); return TCL_OK; } case OPT_USER: { SET_AND_CHECK_STRING(PQuser(connid->conn)); return TCL_OK; } case OPT_PASSWORD: { SET_AND_CHECK_STRING(PQpass(connid->conn)); return TCL_OK; } case OPT_HOST: { SET_AND_CHECK_STRING(PQhost(connid->conn)); return TCL_OK; } case OPT_PORT: { SET_AND_CHECK_STRING(PQport(connid->conn)); return TCL_OK; } case OPT_OPTIONS: { SET_AND_CHECK_STRING(PQoptions(connid->conn)); return TCL_OK; } case OPT_STATUS: { switch (PQstatus(connid->conn)) { case CONNECTION_OK: { Tcl_SetObjResult(interp, Tcl_NewStringObj("connection_ok", -1)); return TCL_OK; } case CONNECTION_BAD: { Tcl_SetObjResult(interp, Tcl_NewStringObj("connection_bad", -1)); return TCL_OK; } default: { Tcl_SetObjResult(interp, Tcl_NewStringObj("unrecognized_status", -1)); return TCL_OK; } } } case OPT_TRANSACTION_STATUS: { int status = PQtransactionStatus(connid->conn); // Reconnect if the connection is bad. if(PgCheckConnectionState(connid) != TCL_OK) { report_connection_error(interp, connid->conn); return TCL_ERROR; } switch (status) { case PQTRANS_IDLE: { Tcl_SetObjResult(interp, Tcl_NewStringObj("idle", -1)); return TCL_OK; } case PQTRANS_ACTIVE: { Tcl_SetObjResult(interp, Tcl_NewStringObj("command_in_progress", -1)); return TCL_OK; } case PQTRANS_INTRANS: { Tcl_SetObjResult(interp, Tcl_NewStringObj("idle_in_valid_block", -1)); return TCL_OK; } case PQTRANS_INERROR: { Tcl_SetObjResult(interp, Tcl_NewStringObj("idle_in_failed_block", -1)); return TCL_OK; } case PQTRANS_UNKNOWN: { Tcl_SetObjResult(interp, Tcl_NewStringObj("connection_bad", -1)); return TCL_OK; } default: { Tcl_SetObjResult(interp, Tcl_NewStringObj("unrecognized_status", -1)); return TCL_OK; } } } case OPT_ERROR_MESSAGE: { SET_AND_CHECK_STRING(PQerrorMessage(connid->conn)); return TCL_OK; } case OPT_NEEDS_PASSWORD: { SET_AND_CHECK_BOOL(PQconnectionNeedsPassword(connid->conn)); return TCL_OK; } case OPT_USED_PASSWORD: { SET_AND_CHECK_BOOL(PQconnectionUsedPassword(connid->conn)); return TCL_OK; } case OPT_USED_SSL: { SET_AND_CHECK_BOOL( (PQgetssl(connid->conn) != NULL) ); return TCL_OK; } default: { Tcl_WrongNumArgs(interp,1,objv,cmdargs); return TCL_ERROR; } } Tcl_SetObjResult(interp, listObj); return TCL_OK; } /* *---------------------------------------------------------------------- * * Pg_sql -- * * returns result handle * * Syntax: * pg_sql connhandle sqlStmt \ * ?-params {list}? \ * ?-binparams {list}? \ * ?-binresults? \ * ?-callback script? \ * ?-async yes|no? \ * ?-prepared yes|no? * * Results: * the return result is either an error message or a list of * the connection/result handles. * *---------------------------------------------------------------------- */ int Pg_sql(ClientData cData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { PGconn *conn; PGresult *result = NULL; int iResult = 0; const char *connString; const char *execString; const char **paramValues = NULL; int *binValues = NULL; const int *paramLengths = NULL; Pg_ConnectionId *connid; Tcl_Obj **elemPtrs; Tcl_Obj **elembinPtrs; int i=3; int count=0, countbin=0, optIndex; int params=0,binparams=0,binresults=0,callback=0,async=0,prepared=0; unsigned char flags = 0; static const char *cmdargs = ""; static const char *options[] = { "-params", "-binparams", "-binresults", "-callback", "-async", "-prepared", NULL }; enum options { OPT_PARAMS, OPT_BINPARAMS, OPT_BINRESULTS, OPT_CALLBACK, OPT_ASYNC, OPT_PREPARED }; if (objc < 3) { Tcl_WrongNumArgs(interp,1,objv,cmdargs); return TCL_ERROR; } /* * We just loop through now to set some * flags, since some of the options are * dependent on others */ while (i < objc) { if (Tcl_GetIndexFromObj(interp, objv[i], options, "option", TCL_EXACT, &optIndex) != TCL_OK) return TCL_ERROR; switch ((enum options) optIndex) { case OPT_PARAMS: { flags = flags | 0x01; params = i+1; i=i+2; Tcl_ListObjGetElements(interp, objv[params], &count, &elemPtrs); if (count == 0) { params = 0; } break; } case OPT_BINPARAMS: { flags = flags | 0x02; binparams = i+1; i=i+2; break; } case OPT_BINRESULTS: { flags = flags | 0x04; Tcl_GetBooleanFromObj(interp, objv[i+1], &binresults); /* binresults = i+1; */ i=i+2; break; } case OPT_CALLBACK: { /* assume async if -callback too */ flags = flags | 0x10; flags = flags | 0x08; callback = i+1; async = 1; i=i+2; break; } case OPT_ASYNC: { flags = flags | 0x10; Tcl_GetBooleanFromObj(interp, objv[i+1], &async); /* async = i+1; */ i=i+2; break; } case OPT_PREPARED: { flags = flags | 0x20; /* prepared = i+1; */ Tcl_GetBooleanFromObj(interp, objv[i+1], &prepared); i=i+2; } } /* end switch */ /* * Check error case where -binparams or * -binresults are given but -params is not if ((flags == 0x06) || (flags == 0x04) || (flags == 0x02)) { Tcl_SetResult(interp, "Need to specify -params", TCL_STATIC); return TCL_ERROR; } */ } /* end while */ /* * Check error case where -binparams or * -binresults are given but -params is not */ if (!params && (binparams != 0 || binresults != 0)) { Tcl_SetResult(interp, "Need to specify -params option", TCL_STATIC); return TCL_ERROR; } /* * Handle param options */ if (params) { Tcl_ListObjGetElements(interp, objv[binparams], &countbin, &elembinPtrs); if (countbin != 0 && countbin != count) { Tcl_SetResult(interp, "-params and -binparams need the same number of elements", TCL_STATIC); return TCL_ERROR; } int param; paramValues = (const char **)ckalloc (count * sizeof (char *)); binValues = (int *)ckalloc (countbin * sizeof (char *)); for (param = 0; param < count; param++) { // TODO convert to external paramValues[param] = Tcl_GetString (elemPtrs[param]); if (strcmp(paramValues[param], "NULL") == 0) { paramValues[param] = NULL; } } for (param = 0; param < countbin; param++) { Tcl_GetBooleanFromObj (interp, elembinPtrs[param], &binValues[param]); } } connString = Tcl_GetString(objv[1]); conn = PgGetConnectionId(interp, connString, &connid); if (conn == NULL) return TCL_ERROR; if (connid->res_copyStatus != RES_COPY_NONE) { Tcl_SetResult(interp, "Attempt to query while COPY in progress", TCL_STATIC); return TCL_ERROR; } execString = Tcl_GetString(objv[2]); /* * Handle the callback first, before executing statments */ if (callback) { if (connid->callbackPtr || connid->callbackInterp) { Tcl_SetResult(interp, "Attempt to wait for result while already waiting", TCL_STATIC); return TCL_ERROR; } /* Start the notify event source if it isn't already running */ PgStartNotifyEventSource(connid); connid->callbackPtr= objv[callback]; connid->callbackInterp= interp; Tcl_IncrRefCount(objv[callback]); Tcl_Preserve((ClientData) interp); /* * invoke function based on type * of query */ if (prepared) { iResult = PQsendQueryPrepared(conn, externalString(execString), count, paramValues, paramLengths, binValues, binresults); } else if (params) { iResult = PQsendQueryParams(conn, externalString(execString), count, NULL, paramValues, paramLengths, binValues, binresults); } else { iResult = PQsendQuery(conn, externalString(execString)); /* ckfree ((void *)paramValues); */ } } else { if (prepared) { result = PQexecPrepared(conn, externalString(execString), count, paramValues, paramLengths, binValues, binresults); } else if (params) { result = PQexecParams(conn, externalString(execString), count, NULL, paramValues, paramLengths, binValues, binresults); } else { result = PQexec(conn, externalString(execString)); ckfree ((void *)paramValues); } } /* end if callback */ PgNotifyTransferEvents(connid); // Reconnect if the connection is bad. if(PgCheckConnectionState(connid) != TCL_OK) { report_connection_error(interp, conn); return TCL_ERROR; } if (((result != NULL) || (iResult > 0)) && !callback) { int rId; if(PgSetResultId(interp, connString, result, &rId) != TCL_OK) { PQclear(result); return TCL_ERROR; } ExecStatusType rStat = PQresultStatus(result); if (rStat == PGRES_COPY_IN || rStat == PGRES_COPY_OUT) { connid->res_copyStatus = RES_COPY_INPROGRESS; connid->res_copy = rId; } return TCL_OK; } else if ((result == NULL) && (iResult == 0)) { /* error occurred during the query */ report_connection_error(interp, conn); return TCL_ERROR; } return TCL_OK; } /* error severity error sqlstate error message error message primary error message detail error message hint error position error context error source file error source line error source function */ pgtcl-2.8.0/generic/pgtclCmds.h000066400000000000000000000102151420313073400163330ustar00rootroot00000000000000/*------------------------------------------------------------------------- * * pgtclCmds.h * declarations for the C functions which implement pg_* tcl commands * * Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * $Id$ * *------------------------------------------------------------------------- */ #ifndef PGTCLCMDS_H #define PGTCLCMDS_H #include #include "libpq-fe.h" extern int pgtclInitEncoding(Tcl_Interp *interp); /* MOVED structure definitions for connection IDs to pctclId.h */ /* **************************/ /* registered Tcl functions */ /* **************************/ extern int Pg_conndefaults( ClientData cData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); extern int Pg_connect( ClientData cData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); extern int Pg_disconnect( ClientData cData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); extern int Pg_exec( ClientData cData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); extern int Pg_exec_prepared( ClientData cData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); extern int Pg_execute( ClientData cData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); extern int Pg_select( ClientData cData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); extern int Pg_result( ClientData cData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); extern int Pg_lo_open( ClientData cData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); extern int Pg_lo_close( ClientData cData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); extern int Pg_lo_read( ClientData cData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); extern int Pg_lo_write( ClientData cData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); extern int Pg_lo_lseek( ClientData cData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); extern int Pg_lo_creat( ClientData cData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); extern int Pg_lo_tell( ClientData cData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); extern int Pg_lo_truncate( ClientData cData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); extern int Pg_lo_unlink( ClientData cData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); extern int Pg_lo_import( ClientData cData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); extern int Pg_lo_export( ClientData cData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); extern int Pg_listen( ClientData cData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); extern int Pg_sendquery( ClientData cData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); extern int Pg_sendquery_prepared( ClientData cData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); extern int Pg_getresult( ClientData cData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); extern int Pg_set_single_row_mode( ClientData cData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); extern int Pg_isbusy( ClientData cData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); extern int Pg_blocking( ClientData cData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); extern int Pg_null_value_string( ClientData cData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); extern int Pg_cancelrequest( ClientData cData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); extern int Pg_on_connection_loss( ClientData cData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); extern int Pg_quote( ClientData cData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); extern int Pg_escapeBytea( ClientData cData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); extern int Pg_unescapeBytea( ClientData cData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); extern int Pg_dbinfo( ClientData cData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); extern int Pg_getdata( ClientData cData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); extern int Pg_sql( ClientData cData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); #endif /* PGTCLCMDS_H */ pgtcl-2.8.0/generic/pgtclId.c000066400000000000000000001274401420313073400160050ustar00rootroot00000000000000/*------------------------------------------------------------------------- * * pgtclId.c * * Contains Tcl "channel" interface routines, plus useful routines * to convert between strings and pointers. These are needed because * everything in Tcl is a string, but in C, pointers to data structures * are needed. * * ASSUMPTION: sizeof(long) >= sizeof(void*) * * Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION * $Id$ * *------------------------------------------------------------------------- */ #include #include #include #include "pgtclCmds.h" #include "pgtclId.h" #ifdef HAVE_SQLITE3 # include "pgtclSqlite.h" #endif static int PgEndCopy(Pg_ConnectionId * connid, int *errorCodePtr, int writing) { connid->res_copyStatus = RES_COPY_NONE; if (writing && PQputCopyEnd(connid->conn, NULL) != 1) { PQclear(connid->results[connid->res_copy]); connid->results[connid->res_copy] = PQmakeEmptyPGresult(connid->conn, PGRES_BAD_RESPONSE); connid->res_copy = -1; *errorCodePtr = EIO; PgCheckConnectionState(connid); return -1; } else { PQclear(connid->results[connid->res_copy]); connid->results[connid->res_copy] = PQmakeEmptyPGresult(connid->conn, PGRES_COMMAND_OK); connid->res_copy = -1; return 0; } } /* * Called when reading data (via gets) for a copy to stdout. */ int PgInputProc(DRIVER_INPUT_PROTO) { Pg_ConnectionId *connid; PGconn *conn; int avail; char *bufPtr = NULL; connid = (Pg_ConnectionId *) cData; conn = connid->conn; if (connid->res_copy < 0 || PQresultStatus(connid->results[connid->res_copy]) != PGRES_COPY_OUT) { *errorCodePtr = EBUSY; PgCheckConnectionState(connid); return -1; } /* * Read any newly arrived data into libpq's buffer, thereby clearing * the socket's read-ready condition. */ if (!PQconsumeInput(conn)) { *errorCodePtr = EIO; PgCheckConnectionState(connid); return -1; } /* Move data from libpq's buffer to Tcl's. */ switch(avail = PQgetCopyData(conn, &bufPtr, bufSize)) { case -2: { *errorCodePtr = EIO; PgCheckConnectionState(connid); return -1; } case -1: { // PgEndCopy calls PgCheckConnectionState if needed. return PgEndCopy(connid, errorCodePtr, 0); } } /* Should never happen */ if(avail < 0) { *errorCodePtr = EIO; PgCheckConnectionState(connid); return -1; } if(bufPtr) { memcpy (buf, bufPtr, avail); PQfreemem(bufPtr); } return avail; } /* * Called when writing data (via puts) for a copy from stdin */ int PgOutputProc(DRIVER_OUTPUT_PROTO) { Pg_ConnectionId *connid; PGconn *conn; int endcopy = 0; int writeLen; connid = (Pg_ConnectionId *) cData; conn = connid->conn; if (connid->res_copy < 0 || PQresultStatus(connid->results[connid->res_copy]) != PGRES_COPY_IN) { PgCheckConnectionState(connid); *errorCodePtr = EBUSY; return -1; } writeLen = bufSize; /* * This assumes Tcl script will write the terminator line in a single * operation; maybe not such a good assumption? */ if (writeLen >= 3 && strncmp(&buf[writeLen - 3], "\\.\n", 3) == 0) { writeLen -= 3; // Don't write the terminator using the new API endcopy = 1; } if (PQputCopyData(conn, buf, writeLen) < 0) { *errorCodePtr = EIO; PgCheckConnectionState(connid); return -1; } if (endcopy) { // PgEndCopy calls PgCheckConnectionState if (PgEndCopy(connid, errorCodePtr, 1) == -1) return -1; } return bufSize; } /* * The WatchProc and GetHandleProc are no-ops but must be present. */ static void PgWatchProc(ClientData instanceData, int mask) { } static int PgGetHandleProc(ClientData instanceData, int direction, ClientData *handlePtr) { return TCL_ERROR; } Tcl_ChannelType Pg_ConnType = { "pgsql", /* channel type */ NULL, /* blockmodeproc */ PgDelConnectionId, /* closeproc */ PgInputProc, /* inputproc */ PgOutputProc, /* outputproc */ NULL, /* SeekProc, Not used */ NULL, /* SetOptionProc, Not used */ NULL, /* GetOptionProc, Not used */ PgWatchProc, /* WatchProc, must be defined */ PgGetHandleProc, /* GetHandleProc, must be defined */ NULL, /* Close2Proc, Not used */ NULL, /* blockModeProc, Not used */ NULL, /* flushProc */ NULL, /* handlerProc */ NULL, /* wideSeekProc */ NULL, /* threadActionProc */ NULL /* truncateProc */ }; /* * Create and register a new channel for the connection */ int PgSetConnectionId(Tcl_Interp *interp, PGconn *conn, char *chandle) { Tcl_Channel conn_chan; Tcl_Obj *nsstr; Pg_ConnectionId *connid; int i; CONST char *ns = ""; connid = (Pg_ConnectionId *) ckalloc(sizeof(Pg_ConnectionId)); connid->conn = conn; connid->res_count = 0; connid->res_last = -1; connid->res_max = RES_START; connid->res_hardmax = RES_HARD_MAX; connid->res_copy = -1; connid->res_copyStatus = RES_COPY_NONE; connid->results = (PGresult **)ckalloc(sizeof(PGresult *) * RES_START); connid->resultids = (Pg_resultid **)ckalloc(sizeof(Pg_resultid *) * RES_START); connid->callbackPtr = (Tcl_Obj *) NULL; connid->callbackInterp = (Tcl_Interp *) NULL; for (i = 0; i < RES_START; i++) { connid->results[i] = NULL; connid->resultids[i] = NULL; } connid->notify_list = NULL; connid->notifier_running = 0; connid->interp = interp; connid->nullValueString = NULL; connid->sql_count = 0; nsstr = Tcl_NewStringObj("if {[namespace current] != \"::\"} {set k [namespace current]::}", -1); Tcl_EvalObjEx(interp, nsstr, 0); /* Tcl_Eval(interp, "if {[namespace current] != \"::\"} {\ set k [namespace current]::\ }"); */ ns = Tcl_GetStringResult(interp); Tcl_ResetResult(interp); if (chandle == NULL) { sprintf(connid->id, "%spgsql%p", ns, connid); } else { sprintf(connid->id, "%s%s", ns, chandle); } conn_chan = Tcl_GetChannel(interp, connid->id, 0); if (conn_chan != NULL) { return 0; } connid->notifier_channel = Tcl_MakeTcpClientChannel((ClientData)(long)PQsocket(conn)); /* Code executing outside of any Tcl interpreter can call Tcl_RegisterChannel with interp as NULL, to indicate that it wishes to hold a reference to this channel. Subse- quently, the channel can be registered in a Tcl inter- preter and it will only be closed when the matching number of calls to Tcl_UnregisterChannel have been made. This allows code executing outside of any interpreter to safely hold a reference to a channel that is also registered in a Tcl interpreter. */ Tcl_RegisterChannel(NULL, connid->notifier_channel); conn_chan = Tcl_CreateChannel(&Pg_ConnType, connid->id, (ClientData) connid, TCL_READABLE | TCL_WRITABLE); Tcl_SetChannelOption(interp, conn_chan, "-buffering", "line"); Tcl_SetResult(interp, connid->id, TCL_VOLATILE); Tcl_RegisterChannel(interp, conn_chan); connid->cmd_token=Tcl_CreateObjCommand(interp, connid->id, PgConnCmd, (ClientData) connid, PgDelCmdHandle); return 1; } /* *---------------------------------------------------------------------- * * PgConnCmd -- * * dispatches the correct command from a handle command * * Results: * Returns the return value of the command that gets called. If * the command is not found, then a TCL_ERROR is returned * *---------------------------------------------------------------------- */ int PgConnCmd(ClientData cData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { int optIndex; int objvxi; int idx = 1; char *arg; Tcl_Obj *objvx[25]; Tcl_CmdInfo info; Pg_ConnectionId *connid; int returnCode = TCL_ERROR; static const char *options[] = { "quote", "escape_bytea", "unescape_bytea", "disconnect", "exec", "sqlexec", "execute", "select", "listen", "on_connection_loss", "lo_creat", "lo_open", "lo_close", "lo_read", "lo_write", "lo_lseek", "lo_tell", "lo_truncate", "lo_unlink", "lo_import", "lo_export", "sendquery", "exec_prepared", "sendquery_prepared", "null_value_string", "version", "protocol", "param", "backendpid", "socket", "conndefaults", "set_single_row_mode", "is_busy", "blocking", "cancel_request", "copy_complete", #ifdef HAVE_SQLITE3 "sqlite", #endif (char *)NULL }; enum options { QUOTE, ESCAPE_BYTEA, UNESCAPE_BYTEA, DISCONNECT, EXEC, SQLEXEC, EXECUTE, SELECT, LISTEN, ON_CONNECTION_LOSS, LO_CREAT, LO_OPEN, LO_CLOSE, LO_READ, LO_WRITE, LO_LSEEK, LO_TELL, LO_TRUNCATE, LO_UNLINK, LO_IMPORT, LO_EXPORT, SENDQUERY, EXEC_PREPARED, SENDQUERY_PREPARED, NULL_VALUE_STRING, VERSION, PROTOCOL, PARAM, BACKENDPID, SOCKET, CONNDEFAULTS, SET_SINGLE_ROW_MODE, ISBUSY, BLOCKING, CANCELREQUEST, COPY_COMPLETE, #ifdef HAVE_SQLITE3 SQLITE3 #endif }; if (objc == 1 || objc > 25) { Tcl_WrongNumArgs(interp, 1, objv, "command..."); return TCL_ERROR; } /* * this assigns the args array with an offset, since * the command handle args looks is offset */ for (objvxi = 2; objvxi < objc; objvxi++) { objvx[objvxi] = objv[objvxi]; } /* swap the first and second elements of the copied command */ objvx[0] = objv[1]; objvx[1] = objv[0]; if (Tcl_GetCommandInfo(interp, Tcl_GetString(objvx[1]), &info) == 0) return TCL_ERROR; connid = (Pg_ConnectionId *) info.objClientData; if (Tcl_GetIndexFromObj(interp, objv[1], options, "command", TCL_EXACT, &optIndex) != TCL_OK) return TCL_ERROR; /* * Need to test here, since EXECUTE and UNESCAPE_BYTEA branches do things * a little differently if ((optIndex != EXECUTE) && (optIndex != UNESCAPE_BYTEA)) { objvx[1] = Tcl_NewStringObj(connid->id, -1); } */ switch ((enum options) optIndex) { case QUOTE: { /* error if only two args, we gotta pick it up here or * Pg_quote will happily quote and return the connection ID. */ if (objc == 2) { Tcl_WrongNumArgs(interp, 1, objv, "quote string"); return TCL_ERROR; } objvx[1] = Tcl_NewStringObj(connid->id, -1); returnCode = Pg_quote(cData, interp, objc, objvx); break; } case ESCAPE_BYTEA: { /* error if only two args, we gotta pick it up here or * Pg_escapeBytea will happily quote and return the connection ID. */ if (objc == 2) { Tcl_WrongNumArgs(interp, 1, objv, "escape_bytea byteArray"); return TCL_ERROR; } objvx[1] = Tcl_NewStringObj(connid->id, -1); returnCode = Pg_escapeBytea(cData, interp, objc, objvx); break; } case UNESCAPE_BYTEA: { if (objc != 3) { Tcl_WrongNumArgs(interp, 1, objv, "unescape_bytea string"); return TCL_ERROR; } objvx[1] = objv[2]; returnCode = Pg_unescapeBytea(cData, interp, 2, objvx); return returnCode; } case DISCONNECT: { objvx[1] = Tcl_NewStringObj(connid->id, -1); returnCode = Pg_disconnect(cData, interp, objc, objvx); break; } case EXEC: case SQLEXEC: { objvx[1] = Tcl_NewStringObj(connid->id, -1); returnCode = Pg_exec(cData, interp, objc, objvx); break; } case EXECUTE: { /* * Need a little extra mojo here, since * there can be the -array and -oid options * before the connection handle -- arrggh */ int num = 2; arg = Tcl_GetString(objvx[2]); if (arg[0] == '-') { /* see if there are 2 options on the command line */ arg = Tcl_GetString(objvx[4]); if (arg[0] == '-') { num = 4; } for (objvxi = 1; objvxi <= num; objvxi++) { objvx[objvxi] = objv[objvxi+1]; } objvx[objvxi++] = objv[0]; } /* DEBUGGING for (objvxi = 0; objvxi < objc; objvxi++) { Tcl_GetString(objv[objvxi]), Tcl_GetString(objvx[objvxi])); } */ idx += num; objvx[idx] = Tcl_NewStringObj(connid->id, -1); returnCode = Pg_execute(cData, interp, objc, objvx); break; } case SELECT: { objvx[1] = Tcl_NewStringObj(connid->id, -1); returnCode = Pg_select(cData, interp, objc, objvx); break; } case LISTEN: { objvx[1] = Tcl_NewStringObj(connid->id, -1); returnCode = Pg_listen(cData, interp, objc, objvx); break; } case ON_CONNECTION_LOSS: { objvx[1] = Tcl_NewStringObj(connid->id, -1); returnCode = Pg_listen(cData, interp, objc, objvx); break; } case LO_CREAT: { objvx[1] = Tcl_NewStringObj(connid->id, -1); returnCode = Pg_lo_creat(cData, interp, objc, objvx); break; } case LO_OPEN: { objvx[1] = Tcl_NewStringObj(connid->id, -1); returnCode = Pg_lo_open(cData, interp, objc, objvx); break; } case LO_CLOSE: { objvx[1] = Tcl_NewStringObj(connid->id, -1); returnCode = Pg_lo_close(cData, interp, objc, objvx); break; } case LO_READ: { objvx[1] = Tcl_NewStringObj(connid->id, -1); returnCode = Pg_lo_read(cData, interp, objc, objvx); break; } case LO_WRITE: { objvx[1] = Tcl_NewStringObj(connid->id, -1); returnCode = Pg_lo_write(cData, interp, objc, objvx); break; } case LO_LSEEK: { objvx[1] = Tcl_NewStringObj(connid->id, -1); returnCode = Pg_lo_lseek(cData, interp, objc, objvx); break; } case LO_TELL: { objvx[1] = Tcl_NewStringObj(connid->id, -1); returnCode = Pg_lo_tell(cData, interp, objc, objvx); break; } case LO_TRUNCATE: { objvx[1] = Tcl_NewStringObj(connid->id, -1); returnCode = Pg_lo_truncate(cData, interp, objc, objvx); break; } case LO_UNLINK: { objvx[1] = Tcl_NewStringObj(connid->id, -1); returnCode = Pg_lo_unlink(cData, interp, objc, objvx); break; } case LO_IMPORT: { objvx[1] = Tcl_NewStringObj(connid->id, -1); returnCode = Pg_lo_import(cData, interp, objc, objvx); break; } case LO_EXPORT: { objvx[1] = Tcl_NewStringObj(connid->id, -1); returnCode = Pg_lo_export(cData, interp, objc, objvx); break; } case SENDQUERY: { objvx[1] = Tcl_NewStringObj(connid->id, -1); returnCode = Pg_sendquery(cData, interp, objc, objvx); break; } case EXEC_PREPARED: { objvx[1] = Tcl_NewStringObj(connid->id, -1); returnCode = Pg_exec_prepared(cData, interp, objc, objvx); break; } case SENDQUERY_PREPARED: { objvx[1] = Tcl_NewStringObj(connid->id, -1); returnCode = Pg_sendquery_prepared(cData, interp, objc, objvx); break; } case NULL_VALUE_STRING: { objvx[1] = Tcl_NewStringObj(connid->id, -1); returnCode = Pg_null_value_string(cData, interp, objc, objvx); break; } case PROTOCOL: case BACKENDPID: case SOCKET: case VERSION: { objc = 3; objvx[2] = objv[0]; objvx[1] = objv[1]; idx++; objvx[idx] = Tcl_NewStringObj(connid->id, -1); returnCode= Pg_dbinfo(cData, interp, objc, objvx); break; } case PARAM: { objc = 4; objvx[2] = objv[0]; objvx[1] = objv[1]; objvx[3] = objv[2]; idx++; objvx[idx] = Tcl_NewStringObj(connid->id, -1); returnCode= Pg_dbinfo(cData, interp, objc, objvx); break; } case CONNDEFAULTS: { return Pg_conndefaults(cData, interp, 1, objvx); } case SET_SINGLE_ROW_MODE: { objvx[1] = Tcl_NewStringObj(connid->id, -1); returnCode = Pg_set_single_row_mode(cData, interp, objc, objvx); break; } case ISBUSY: { objvx[1] = Tcl_NewStringObj(connid->id, -1); returnCode = Pg_isbusy(cData, interp, objc, objvx); break; } case BLOCKING: { objvx[1] = Tcl_NewStringObj(connid->id, -1); returnCode = Pg_blocking(cData, interp, objc, objvx); break; } case CANCELREQUEST: { objvx[1] = Tcl_NewStringObj(connid->id, -1); returnCode = Pg_cancelrequest(cData, interp, objc, objvx); break; } case COPY_COMPLETE: { objvx[1] = Tcl_NewStringObj(connid->id, -1); returnCode = Pg_copy_complete(cData, interp, objc, objvx); break; } #ifdef HAVE_SQLITE3 case SQLITE3: { objvx[1] = Tcl_NewStringObj(connid->id, -1); returnCode = Pg_sqlite(cData, interp, objc, objvx); break; } #endif } Tcl_DecrRefCount(objvx[idx]); return returnCode; } /* *---------------------------------------------------------------------- * * PgResultCmd -- * * dispatches the correct command from a result handle command * * Results: * Returns the return value of the command that gets called. If * the command is not found, then a TCL_ERROR is returned * *---------------------------------------------------------------------- */ int PgResultCmd(ClientData cData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { int objvxi; Tcl_Obj *objvx[25]; if (objc == 1 || objc > 25) { Tcl_WrongNumArgs(interp, 1, objv, "command..."); return TCL_ERROR; } /* * this assigns the args array with an offset, since * the command handle args looks is offset */ for (objvxi = 0; objvxi < objc; objvxi++) { objvx[objvxi + 1] = objv[objvxi]; } objvx[0] = objv[0]; return Pg_result(cData, interp, objc + 1, objvx); } /* * Get back the connection from the Id */ PGconn * PgGetConnectionId(Tcl_Interp *interp, const char *id, Pg_ConnectionId ** connid_p) { Tcl_Channel conn_chan; Pg_ConnectionId *connid; Tcl_Obj *tresult; conn_chan = Tcl_GetChannel(interp, id, 0); if (conn_chan == NULL || Tcl_GetChannelType(conn_chan) != &Pg_ConnType) { tresult = Tcl_NewStringObj(id, -1); Tcl_AppendStringsToObj(tresult, " is not a valid postgresql connection", NULL); Tcl_SetObjResult(interp, tresult); if (connid_p) *connid_p = NULL; return NULL; } connid = (Pg_ConnectionId *) Tcl_GetChannelInstanceData(conn_chan); if (connid_p) *connid_p = connid; return connid->conn; } /* * Remove a connection Id from the hash table and * close all portals the user forgot. */ int PgDelConnectionId(DRIVER_DEL_PROTO) { Tcl_HashEntry *entry; Tcl_HashSearch hsearch; Pg_ConnectionId *connid; Pg_TclNotifies *notifies; int i; Pg_resultid *resultid; int allow_unregister; connid = (Pg_ConnectionId *) cData; for (i = 0; i < connid->res_max; i++) { if (connid->results[i]) { PQclear(connid->results[i]); resultid = connid->resultids[i]; if (resultid != NULL) { Tcl_DecrRefCount(resultid->str); if ((resultid->nullValueString != NULL) && (resultid->nullValueString != connid->nullValueString)) ckfree (resultid->nullValueString); ckfree((void *)resultid); } } } ckfree((void *)connid->results); ckfree((void *)connid->resultids); /* Release associated notify info */ while ((notifies = connid->notify_list) != NULL) { connid->notify_list = notifies->next; for (entry = Tcl_FirstHashEntry(¬ifies->notify_hash, &hsearch); entry != NULL; entry = Tcl_NextHashEntry(&hsearch)) ckfree((void *)Tcl_GetHashValue(entry)); Tcl_DeleteHashTable(¬ifies->notify_hash); if (notifies->conn_loss_cmd) ckfree((void *) notifies->conn_loss_cmd); if (notifies->interp) Tcl_DontCallWhenDeleted(notifies->interp, PgNotifyInterpDelete, (ClientData)notifies); ckfree((void *)notifies); } /* * Turn off the Tcl event source for this connection, and delete any * pending notify and connection-loss events. */ PgStopNotifyEventSource(connid, 1); /* Check if the connection has been broken in the background */ allow_unregister = PQsocket(connid->conn) >= 0; /* Close the libpq connection too */ PQfinish(connid->conn); connid->conn = NULL; if (connid->nullValueString != NULL) ckfree(connid->nullValueString); /* * Kill the notifier channel, too. We must not do this until after * we've closed the libpq connection, because Tcl will try to close * the socket itself! * * XXX Unfortunately, while this works fine if we are closing due to * explicit pg_disconnect, Tcl versions through 8.4.1 dump core if we * try to do it during interpreter shutdown. Not clear why, or if * there is a workaround. For now, accept leakage of the (fairly * small) amount of memory taken for the channel state representation. * Note we are not leaking a socket, since libpq closed that already. */ if (allow_unregister && connid->notifier_channel != NULL && interp != NULL) { Tcl_UnregisterChannel(NULL, connid->notifier_channel); } /* * Clear any async result callback, if present. */ if (connid->callbackPtr) { Tcl_DecrRefCount(connid->callbackPtr); connid->callbackPtr = NULL; } if (connid->callbackInterp) { Tcl_Release((ClientData) connid->interp); connid->callbackInterp = NULL; } /* * We must use Tcl_EventuallyFree because we don't want the connid * struct to vanish instantly if Pg_Notify_EventProc is active for it. * (Otherwise, closing the connection from inside a pg_listen callback * could lead to coredump.) Pg_Notify_EventProc can detect that the * connection has been deleted from under it by checking connid->conn. */ Tcl_EventuallyFree((ClientData)connid, TCL_DYNAMIC); return 0; } /* *---------------------------------------------------------------------- * * PgSetResultId -- * * Find a slot for a new result id. If the table is full, expand * it by a factor of 2. However, do not expand past the hard max, * as the client is probably just not clearing result handles like * they should. * * Results: * Returns the result id. If the an error occurs, TCL_ERROR is * returned. The result handle is put into the interp result. * *---------------------------------------------------------------------- */ int PgSetResultId(Tcl_Interp *interp, const char *connid_c, PGresult *res, int *idPtr) { Tcl_Channel conn_chan; Pg_ConnectionId *connid; int resid, i; char buf[32]; Tcl_Obj *cmd; Pg_resultid *resultid; conn_chan = Tcl_GetChannel(interp, connid_c, 0); if (conn_chan == NULL) return TCL_ERROR; connid = (Pg_ConnectionId *) Tcl_GetChannelInstanceData(conn_chan); /* search, starting at slot after the last one used */ resid = connid->res_last; for (;;) { /* advance, with wraparound */ if (++resid >= connid->res_max) resid = 0; /* this slot empty? */ if (!connid->results[resid]) { connid->res_last = resid; break; /* success exit */ } /* checked all slots? */ if (resid == connid->res_last) break; /* failure exit */ } if (connid->results[resid]) { /* no free slot found, so try to enlarge array */ if (connid->res_max >= connid->res_hardmax) { Tcl_SetResult(interp, "hard limit on result handles reached", TCL_STATIC); return TCL_ERROR; } connid->res_last = resid = connid->res_max; connid->res_max *= 2; if (connid->res_max > connid->res_hardmax) connid->res_max = connid->res_hardmax; connid->results = (PGresult **)ckrealloc((void *)connid->results, sizeof(PGresult *) * connid->res_max); connid->resultids = (Pg_resultid **)ckrealloc((void *)connid->resultids, sizeof(Pg_resultid *) * connid->res_max); for (i = connid->res_last; i < connid->res_max; i++) { connid->results[i] = NULL; connid->resultids[i] = NULL; } } connid->results[resid] = res; sprintf(buf, "%s.%d", connid_c, resid); cmd = Tcl_NewStringObj(buf, -1); resultid = (Pg_resultid *) ckalloc(sizeof(Pg_resultid)); resultid->interp = interp; resultid->id = resid; resultid->str = Tcl_NewStringObj(buf, -1); resultid->cmd_token = Tcl_CreateObjCommand(interp, buf, PgResultCmd, (ClientData) resultid, PgDelResultHandle); resultid->connid = connid; resultid->nullValueString = connid->nullValueString; connid->resultids[resid] = resultid; Tcl_SetObjResult(interp, cmd); *idPtr = resid; return TCL_OK; } static int getresid(Tcl_Interp *interp, const char *id, Pg_ConnectionId ** connid_p) { Tcl_Channel conn_chan; char *mark; int resid; Pg_ConnectionId *connid; if (!(mark = strrchr(id, '.'))) { Tcl_SetResult(interp, "Poorly formated result handle", TCL_STATIC); return -1; } *mark = '\0'; conn_chan = Tcl_GetChannel(interp, id, 0); *mark = '.'; if (conn_chan == NULL || Tcl_GetChannelType(conn_chan) != &Pg_ConnType) { Tcl_SetResult(interp, "Invalid connection handle", TCL_STATIC); return -1; } if (Tcl_GetInt(interp, mark + 1, &resid) == TCL_ERROR) { Tcl_SetResult(interp, "Poorly formated result handle", TCL_STATIC); return -1; } connid = (Pg_ConnectionId *) Tcl_GetChannelInstanceData(conn_chan); if (resid < 0 || resid >= connid->res_max || connid->results[resid] == NULL) { Tcl_SetResult(interp, "Invalid result handle", TCL_STATIC); return -1; } *connid_p = connid; return resid; } /* * Get back the result pointer from the Id */ PGresult * PgGetResultId(Tcl_Interp *interp, const char *id, Pg_resultid **resultidPtr) { Pg_ConnectionId *connid; int resid; if (!id) return NULL; resid = getresid(interp, id, &connid); if (resid == -1) return NULL; if (resultidPtr != NULL) { *resultidPtr = connid->resultids[resid]; } return connid->results[resid]; } /* * Remove a result Id from the hash tables */ void PgDelResultId(Tcl_Interp *interp, const char *id) { Pg_ConnectionId *connid; Pg_resultid *resultid; int resid; resid = getresid(interp, id, &connid); if (resid == -1) return; connid->results[resid] = 0; resultid = connid->resultids[resid]; Tcl_DecrRefCount((Tcl_Obj *)resultid->str); if ((resultid->nullValueString != NULL) && (resultid->nullValueString != connid->nullValueString)) ckfree (resultid->nullValueString); ckfree((void *)resultid); connid->resultids[resid] = 0; } /* * Get the connection Id from the result Id */ int PgGetConnByResultId(Tcl_Interp *interp, const char *resid_c) { char *mark; Tcl_Channel conn_chan; Tcl_Obj *tresult; if (!(mark = strrchr(resid_c, '.'))) goto error_out; *mark = '\0'; conn_chan = Tcl_GetChannel(interp, resid_c, 0); *mark = '.'; if (conn_chan && Tcl_GetChannelType(conn_chan) == &Pg_ConnType) { Tcl_SetResult(interp, (char *)Tcl_GetChannelName(conn_chan), TCL_VOLATILE); return TCL_OK; } error_out: tresult = Tcl_NewStringObj(resid_c, -1); Tcl_AppendStringsToObj(tresult, " is not a valid connection\n", NULL); Tcl_SetObjResult(interp, tresult); return TCL_ERROR; } /*------------------------------------------- Notify event source These functions allow asynchronous notify messages arriving from the SQL server to be dispatched as Tcl events. See the Tcl Notifier(3) man page for more info. The main trick in this code is that we have to cope with status changes between the queueing and the execution of a Tcl event. For example, if the user changes or cancels the pg_listen callback command, we should use the new setting; we do that by not resolving the notify relation name until the last possible moment. We also have to handle closure of the channel or deletion of the interpreter to be used for the callback (note that with multiple interpreters, the channel can outlive the interpreter it was created by!) Upon closure of the channel, we immediately delete the file event handler for it, which has the effect of disabling any file-ready events that might be hanging about in the Tcl event queue. But for interpreter deletion, we just set any matching interp pointers in the Pg_TclNotifies list to NULL. The list item stays around until the connection is deleted. (This avoids trouble with walking through a list whose members may get deleted under us.) In the current design, Pg_Notify_FileHandler is a file handler that we establish by calling Tcl_CreateFileHandler(). It gets invoked from the Tcl event loop whenever the underlying PGconn's socket is read-ready. We suck up any available data (to clear the OS-level read-ready condition) and then transfer any available PGnotify events into the Tcl event queue. Eventually these events will be dispatched to Pg_Notify_EventProc. When we do an ordinary PQexec, we must also transfer PGnotify events into Tcl's event queue, since libpq might have read them when we weren't looking. ------------------------------------------*/ typedef struct { Tcl_Event header; /* Standard Tcl event info */ PGnotify *notify; /* Notify event from libpq, or NULL */ /* We use a NULL notify pointer to denote a connection-loss event */ Pg_ConnectionId *connid; /* Connection for server */ } NotifyEvent; /* Dispatch a NotifyEvent that has reached the front of the event queue */ static int Pg_Notify_EventProc(Tcl_Event *evPtr, int flags) { NotifyEvent *event = (NotifyEvent *) evPtr; Pg_TclNotifies *notifies; char *callback; /* We classify SQL notifies as Tcl file events. */ if (!(flags & TCL_FILE_EVENTS)) return 0; /* If connection's been closed, just forget the whole thing. */ if (event->connid == NULL) { if (event->notify) { #ifdef PQfreemem PQfreemem(event->notify); #else PQfreeNotify(event->notify); #endif } return 1; } /* * Preserve/Release to ensure the connection struct doesn't disappear * underneath us. */ Tcl_Preserve((ClientData)event->connid); /* * Loop for each interpreter that has ever registered on the * connection. Each one can get a callback. */ for (notifies = event->connid->notify_list; notifies != NULL; notifies = notifies->next) { Tcl_Interp *interp = notifies->interp; if (interp == NULL) continue; /* ignore deleted interpreter */ /* * Find the callback to be executed for this interpreter, if any. */ if (event->notify) { /* Ordinary NOTIFY event */ Tcl_HashEntry *entry; entry = Tcl_FindHashEntry(¬ifies->notify_hash, event->notify->relname); if (entry == NULL) continue; /* no pg_listen in this interpreter */ callback = (char *) Tcl_GetHashValue(entry); } else { /* Connection-loss event */ callback = notifies->conn_loss_cmd; } if (callback == NULL) continue; /* nothing to do for this interpreter */ /* Create a Tcl List Object containing the callback with the channel name * (relname) and the PID of the notifying backend. This will also copy the callback * string in case the user executes a new pg_listen or pg_on_connection_loss * during the callback */ Tcl_Obj *callbackList = Tcl_NewListObj(0, NULL); Tcl_ListObjAppendElement(NULL, callbackList, Tcl_NewStringObj(callback, -1)); if (event->notify) { Tcl_ListObjAppendElement(NULL, callbackList, Tcl_NewStringObj(event->notify->relname, -1)); Tcl_ListObjAppendElement(NULL, callbackList, Tcl_NewIntObj(event->notify->be_pid)); /* In case there is a payload, add it to the callback as a * further element to the list. */ if (event->notify->extra[0]) { Tcl_ListObjAppendElement (NULL, callbackList, Tcl_NewStringObj(event->notify->extra, -1)); } } /* * Execute the callback. */ Tcl_IncrRefCount(callbackList); Tcl_Preserve((ClientData)interp); if (Tcl_EvalObjEx(interp, callbackList, TCL_EVAL_GLOBAL) != TCL_OK) { if (event->notify) Tcl_AddErrorInfo(interp, "\n (\"pg_listen\" script)"); else Tcl_AddErrorInfo(interp, "\n (\"pg_on_connection_loss\" script)"); Tcl_BackgroundError(interp); } Tcl_Release((ClientData)interp); Tcl_DecrRefCount(callbackList); /* * Check for the possibility that the callback closed the * connection. */ if (event->connid->conn == NULL) break; } Tcl_Release((ClientData)event->connid); if (event->notify) { #ifdef PQfreemem PQfreemem(event->notify); #else PQfreeNotify(event->notify); #endif } return 1; } /* * Transfer any notify events available from libpq into the Tcl event queue. * Note that this must be called after each PQexec (to capture notifies * that arrive during command execution) as well as in Pg_Notify_FileHandler * (to capture notifies that arrive when we're idle). */ void PgNotifyTransferEvents(Pg_ConnectionId * connid) { PGnotify *notify; while ((notify = PQnotifies(connid->conn)) != NULL) { NotifyEvent *event = (NotifyEvent *) ckalloc(sizeof(NotifyEvent)); event->header.proc = Pg_Notify_EventProc; event->notify = notify; event->connid = connid; Tcl_QueueEvent((Tcl_Event *) event, TCL_QUEUE_TAIL); } /* * This is also a good place to check for unexpected closure of the * connection (ie, backend crash), in which case we must shut down the * notify event source to keep Tcl from trying to select() on the now- * closed socket descriptor. But don't kill on-connection-loss * events; in fact, register one. */ if (PQsocket(connid->conn) < 0) PgConnLossTransferEvents(connid); } /* * Handle a connection-loss event */ void PgConnLossTransferEvents(Pg_ConnectionId * connid) { if (connid->notifier_running) { /* Put the on-connection-loss event in the Tcl queue */ NotifyEvent *event = (NotifyEvent *) ckalloc(sizeof(NotifyEvent)); event->header.proc = Pg_Notify_EventProc; event->notify = NULL; event->connid = connid; Tcl_QueueEvent((Tcl_Event *) event, TCL_QUEUE_TAIL); } /* * Shut down the notify event source to keep Tcl from trying to * select() on the now-closed socket descriptor. And zap any * unprocessed notify events ... but not, of course, the * connection-loss event. */ PgStopNotifyEventSource(connid, 0); } /* * Cleanup code for coping when an interpreter or a channel is deleted. * * PgNotifyInterpDelete is registered as an interpreter deletion callback * for each extant Pg_TclNotifies structure. * NotifyEventDeleteProc is used by PgStopNotifyEventSource to cancel * pending Tcl NotifyEvents that reference a dying connection. */ void PgNotifyInterpDelete(ClientData clientData, Tcl_Interp *interp) { /* Mark the interpreter dead, but don't do anything else yet */ Pg_TclNotifies *notifies = (Pg_TclNotifies *) clientData; notifies->interp = NULL; } /* * Comparison routines for detecting events to be removed by Tcl_DeleteEvents. * NB: In (at least) Tcl versions 7.6 through 8.0.3, there is a serious * bug in Tcl_DeleteEvents: if there are multiple events on the queue and * you tell it to delete the last one, the event list pointers get corrupted, * with the result that events queued immediately thereafter get lost. * Therefore we daren't tell Tcl_DeleteEvents to actually delete anything! * We simply use it as a way of scanning the event queue. Events matching * the about-to-be-deleted connid are marked dead by setting their connid * fields to NULL. Then Pg_Notify_EventProc will do nothing when those * events are executed. */ static int NotifyEventDeleteProc(Tcl_Event *evPtr, ClientData clientData) { Pg_ConnectionId *connid = (Pg_ConnectionId *) clientData; if (evPtr->proc == Pg_Notify_EventProc) { NotifyEvent *event = (NotifyEvent *) evPtr; if (event->connid == connid && event->notify != NULL) event->connid = NULL; } return 0; } /* This version deletes on-connection-loss events too */ static int AllNotifyEventDeleteProc(Tcl_Event *evPtr, ClientData clientData) { Pg_ConnectionId *connid = (Pg_ConnectionId *) clientData; if (evPtr->proc == Pg_Notify_EventProc) { NotifyEvent *event = (NotifyEvent *) evPtr; if (event->connid == connid) event->connid = NULL; } return 0; } static int Pg_Result_EventProc(Tcl_Event *evPtr, int flags) { NotifyEvent *event = (NotifyEvent *) evPtr; /* Results can only come from file events. */ if (!(flags & TCL_FILE_EVENTS)) return 0; /* If connection's been closed, just forget the whole thing. */ if (event->connid) { Pg_ConnectionId *connid = event->connid; Tcl_Obj *callbackPtr = connid->callbackPtr; Tcl_Interp *interp = connid->callbackInterp; /* Clear the result callback for this connection, so that the callback * script may safely establish a new one. */ connid->callbackPtr = NULL; connid->callbackInterp = NULL; if (callbackPtr || interp) { if (TCL_OK != Tcl_EvalObjEx(interp, callbackPtr, TCL_EVAL_GLOBAL)) { Tcl_BackgroundError(interp); } Tcl_DecrRefCount(callbackPtr); Tcl_Release((ClientData) interp); } } /* never deliver this event twice */ return 1; } /* * File handler callback: called when Tcl has detected read-ready on socket. * The clientData is a pointer to the associated connection. * We can ignore the condition mask since we only ever ask about read-ready. */ static void Pg_Notify_FileHandler(ClientData clientData, int mask) { Pg_ConnectionId *connid = (Pg_ConnectionId *) clientData; /* * Consume any data available from the SQL server (this just buffers * it internally to libpq; but it will clear the read-ready * condition). */ if (PQconsumeInput(connid->conn)) { /* Transfer notify events from libpq to Tcl event queue. */ PgNotifyTransferEvents(connid); /* If the connection is still alive, and if there is a * callback for results, check if a result is ready. If it is, * transfer the event to the Tcl event queue. */ if ((PQsocket(connid->conn) >= 0) && connid->callbackPtr && !PQisBusy(connid->conn)) { NotifyEvent *event = (NotifyEvent *) ckalloc(sizeof(NotifyEvent)); event->header.proc = Pg_Result_EventProc; event->notify = NULL; event->connid = connid; Tcl_QueueEvent((Tcl_Event *) event, TCL_QUEUE_TAIL); } } else { /* * If there is no input but we have read-ready, assume this means * we lost the connection. */ PgConnLossTransferEvents(connid); } } /* * Start and stop the notify event source for a connection. * * We do not bother to run the notifier unless at least one pg_listen * or pg_on_connection_loss has been executed on the connection. Currently, * once started the notifier is run until the connection is closed. * * FIXME: if PQreset is executed on the underlying PGconn, the active * socket number could change. How and when should we test for this * and update the Tcl file handler linkage? (For that matter, we'd * also have to reissue LISTEN commands for active LISTENs, since the * new backend won't know about 'em. I'm leaving this problem for * another day.) */ void PgStartNotifyEventSource(Pg_ConnectionId * connid) { /* Start the notify event source if it isn't already running */ if (!connid->notifier_running) { int pqsock = PQsocket(connid->conn); if (pqsock >= 0) { Tcl_CreateChannelHandler(connid->notifier_channel, TCL_READABLE, Pg_Notify_FileHandler, (ClientData) connid); connid->notifier_running = 1; } } } void PgStopNotifyEventSource(Pg_ConnectionId * connid, pqbool allevents) { /* Remove the event source */ if (connid->notifier_running) { Tcl_DeleteChannelHandler(connid->notifier_channel, Pg_Notify_FileHandler, (ClientData)connid); connid->notifier_running = 0; } /* Kill queued Tcl events that reference this channel */ if (allevents) Tcl_DeleteEvents(AllNotifyEventDeleteProc, (ClientData) connid); else Tcl_DeleteEvents(NotifyEventDeleteProc, (ClientData) connid); } void PgDelCmdHandle(ClientData cData) { Pg_ConnectionId *connid = (Pg_ConnectionId *) cData; Tcl_Channel conn_chan; Tcl_Obj *tresult; Pg_resultid *resultid; int i = 0; conn_chan = Tcl_GetChannel(connid->interp, connid->id, 0); if (conn_chan == NULL) { tresult = Tcl_NewStringObj("conn->id", -1); Tcl_AppendStringsToObj(tresult, " is not a valid connection", NULL); Tcl_SetObjResult(connid->interp, tresult); return; } if (connid->conn == NULL) return; for (i = 0; i <= connid->res_last; i++) { resultid = connid->resultids[i]; if (resultid) { Tcl_DeleteCommandFromToken(resultid->interp, resultid->cmd_token); } } Tcl_UnregisterChannel(connid->interp, conn_chan); return; } void PgDelResultHandle(ClientData cData) { PGresult *result; Pg_resultid *resultid = (Pg_resultid *) cData; char *resstr; resstr = Tcl_GetString(resultid->str); result = PgGetResultId(resultid->interp, resstr, NULL); PgDelResultId(resultid->interp, resstr); PQclear(result); return; } /********************************** * pg_copy_complete * * complete a COPY IN operation * * Usage: pg_copy_complete connection * **********************************/ int Pg_copy_complete(ClientData cData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { Pg_ConnectionId *connid; PGconn *conn; char *connString; int errorCode; if (objc != 2) { Tcl_WrongNumArgs(interp, 1, objv, "connection"); return TCL_ERROR; } connString = Tcl_GetString(objv[1]); conn = PgGetConnectionId(interp, connString, &connid); if (conn == NULL) return TCL_ERROR; if (PgEndCopy(connid, &errorCode, 1) == -1) { char *errorMessage = "I/O Error"; if(errorCode == EBUSY) { errorMessage = "Busy"; } Tcl_SetObjResult(interp, Tcl_NewStringObj(errorMessage, -1)); return TCL_ERROR; } return TCL_OK; } /********************************** * PgCheckConnectionState(Pg_ConnectionId *connid) * * Called after an error from libpq that might have closed a connection * (probably all of them). Unregister the notifier_channel and clear it out. * **********************************/ int PgCheckConnectionState(Pg_ConnectionId *connid) { // We don't have a connection, we can't do anything. if(!connid->conn) { return TCL_ERROR; } // Connection is still good, we're good. if(PQstatus(connid->conn) != CONNECTION_BAD) { return TCL_OK; } // Clean up notifiers and queue a connection loss event. PgConnLossTransferEvents(connid); return TCL_ERROR; } pgtcl-2.8.0/generic/pgtclId.h000066400000000000000000000117201420313073400160030ustar00rootroot00000000000000/*------------------------------------------------------------------------- * * pgtclId.h * * Contains Tcl "channel" interface routines, plus useful routines * to convert between strings and pointers. These are needed because * everything in Tcl is a string, but in C, pointers to data structures * are needed. * * Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * $Id$ * *------------------------------------------------------------------------- */ #define RES_HARD_MAX 128 #define RES_START 16 /* * Tcl 8.6 and TIP 330/336 compatability * New function in 8.6 Tcl_GetErrorLine instead of direct access * to errorLine in struct. Define Tcl_GetErrorLine here if less * 8.6 */ #if (TCL_MAJOR_VERSION == 8) && (TCL_MINOR_VERSION < 6) #define Tcl_GetErrorLine(interp) (interp->errorLine) #endif /* * Each Pg_ConnectionId has a list of Pg_TclNotifies structs, one for each * Tcl interpreter that has executed any pg_listens on the connection. * We need this arrangement to be able to clean up if an interpreter is * deleted while the connection remains open. A free side benefit is that * multiple interpreters can be registered to listen for the same notify * name. (All their callbacks will be called, but in an unspecified order.) * * We use the same approach for pg_on_connection_loss callbacks, but they * are not kept in a hashtable since there's no name associated. */ typedef struct Pg_TclNotifies_s { struct Pg_TclNotifies_s *next; /* list link */ Tcl_Interp *interp; /* This Tcl interpreter */ /* * NB: if interp == NULL, the interpreter is gone but we haven't yet * got round to deleting the Pg_TclNotifies structure. */ Tcl_HashTable notify_hash; /* Active pg_listen requests */ char *conn_loss_cmd; /* pg_on_connection_loss cmd, or NULL */ } Pg_TclNotifies; typedef struct Pg_resultid_s { int id; Tcl_Obj *str; Tcl_Interp *interp; Tcl_Command cmd_token; char *nullValueString; struct Pg_ConnectionId_s *connid; } Pg_resultid; typedef struct Pg_ConnectionId_s { char id[32]; PGconn *conn; int res_max; /* Max number of results allocated */ int res_hardmax; /* Absolute max to allow */ int res_count; /* Current count of active results */ int res_last; /* Optimize where to start looking */ int res_copy; /* Query result with active copy */ int res_copyStatus; /* Copying status */ PGresult **results; /* The results */ Pg_TclNotifies *notify_list; /* head of list of notify info */ int notifier_running; /* notify event source is live */ Tcl_Channel notifier_channel; /* Tcl_Channel on which notifier * is listening */ Tcl_Command cmd_token; /* handle command token */ Tcl_Interp *interp; /* save Interp info */ char *nullValueString; /* null vals are returned as this, if set */ Pg_resultid **resultids; /* resultids (internal storage) */ int sql_count; /* number of pg_exec, pg_select, etc, done */ Tcl_Obj *callbackPtr; /* callback for async queries */ Tcl_Interp *callbackInterp; /* interp where the callback should run */ } Pg_ConnectionId; /* Values of res_copyStatus */ #define RES_COPY_NONE 0 #define RES_COPY_INPROGRESS 1 #define RES_COPY_FIN 2 extern int PgSetConnectionId(Tcl_Interp *interp, PGconn *conn, char *connhandle); #define DRIVER_OUTPUT_PROTO ClientData cData, const char *buf, int bufSize, \ int *errorCodePtr #define DRIVER_INPUT_PROTO ClientData cData, char *buf, int bufSize, \ int *errorCodePtr #define DRIVER_DEL_PROTO ClientData cData, Tcl_Interp *interp extern PGconn *PgGetConnectionId(Tcl_Interp *interp, const char *id, Pg_ConnectionId **); extern int PgDelConnectionId(DRIVER_DEL_PROTO); extern int PgOutputProc(DRIVER_OUTPUT_PROTO); extern int PgInputProc(DRIVER_INPUT_PROTO); extern int PgSetResultId(Tcl_Interp *interp, const char *connid, PGresult *res, int *idPtr); extern PGresult *PgGetResultId(Tcl_Interp *interp, const char *id, Pg_resultid **resultidPtr); extern void PgDelResultId(Tcl_Interp *interp, const char *id); extern int PgGetConnByResultId(Tcl_Interp *interp, const char *resid); extern void PgStartNotifyEventSource(Pg_ConnectionId * connid); extern void PgStopNotifyEventSource(Pg_ConnectionId * connid, pqbool allevents); extern void PgNotifyTransferEvents(Pg_ConnectionId * connid); extern void PgConnLossTransferEvents(Pg_ConnectionId * connid); extern void PgNotifyInterpDelete(ClientData clientData, Tcl_Interp *interp); extern int PgConnCmd(ClientData cData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); extern void PgDelCmdHandle(ClientData cData); extern void PgDelResultHandle(ClientData cData); extern Tcl_ChannelType Pg_ConnType; extern int Pg_copy_complete( ClientData cData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); extern int PgCheckConnectionState(Pg_ConnectionId *connid); pgtcl-2.8.0/generic/pgtclSqlite.c000066400000000000000000001514441420313073400167130ustar00rootroot00000000000000#include #include #include #include #include #include #include #include #include "pgtclCmds.h" #include "pgtclId.h" #include //#define IFDEBUG(thing) thing #define IFDEBUG(thing) /* */ #define LAPPEND_STRING(i, o, s) Tcl_ListObjAppendElement((i), (o), Tcl_NewStringObj((s), -1)); // From tclsqlite.c, part 1 of the hack, sqlite3 conveniently guarantees that the first element in // the userdata for an sqlite proc is the sqlite3 database. // // I have verified with Richard Hipp at the Tcl2017 conference that this behaviour is intentional // and stable. -- PDS 2018 /* ** There is one instance of this structure for each SQLite database ** that has been opened by the SQLite TCL interface. ** ** If this module is built with SQLITE_TEST defined (to create the SQLite ** testfixture executable), then it may be configured to use either ** sqlite3_prepare_v2() or sqlite3_prepare() to prepare SQL statements. ** If SqliteDb.bLegacyPrepare is true, sqlite3_prepare() is used. */ struct SqliteDb { sqlite3 *db; /* The "real" database structure. MUST BE FIRST */ // other stuff we don't look at, but probably should maybe use to validate... }; // // Prepare a statement, and finalize it first if it's already prepared // int Pg_sqlite_prepare(Tcl_Interp *interp, sqlite3 *sqlite_db, char *sql, sqlite3_stmt **statement_ptr) { if(*statement_ptr) { sqlite3_finalize(*statement_ptr); *statement_ptr = NULL; } if(sqlite3_prepare_v2(sqlite_db, sql, -1, statement_ptr, NULL) != SQLITE_OK) { Tcl_AppendResult(interp, sqlite3_errmsg(sqlite_db), (char *)NULL); return TCL_ERROR; } if(!*statement_ptr) { Tcl_AppendResult(interp, "Empty SQL statement provided.", (char *)NULL); return TCL_ERROR; } return TCL_OK; } int Pg_sqlite_begin(Tcl_Interp *interp, sqlite3 *sqlite_db) { char *errMsg; if(sqlite3_exec(sqlite_db, "savepoint pg_sqlite;", NULL, NULL, &errMsg) != SQLITE_OK) { Tcl_AppendResult(interp, errMsg, " when beginning a transaction", (char *)NULL); return TCL_ERROR; } return TCL_OK; } int Pg_sqlite_commit(Tcl_Interp *interp, sqlite3 *sqlite_db) { char *errMsg; if(sqlite3_exec(sqlite_db, "release savepoint pg_sqlite;", NULL, NULL, &errMsg) != SQLITE_OK) { Tcl_AppendResult(interp, errMsg, " when comitting a transaction", (char *)NULL); return TCL_ERROR; } return TCL_OK; } int Pg_sqlite_wal_checkpoint(Tcl_Interp *interp, sqlite3 *sqlite_db) { char *errMsg; if(sqlite3_exec(sqlite_db, "PRAGMA wal_checkpoint(PASSIVE);", NULL, NULL, &errMsg) != SQLITE_OK) { Tcl_AppendResult(interp, errMsg, " when doing a WAL checkpoint", (char *)NULL); return TCL_ERROR; } return TCL_OK; } // // Commit a statement, checkpoint, and prepare it again // int Pg_sqlite_recommit(Tcl_Interp *interp, sqlite3 *sqlite_db, char *sql, sqlite3_stmt **statement_ptr) { if(Pg_sqlite_commit(interp, sqlite_db) != TCL_OK) return TCL_ERROR; if(Pg_sqlite_wal_checkpoint(interp, sqlite_db) != TCL_OK) return TCL_ERROR; if(Pg_sqlite_begin(interp, sqlite_db) != TCL_OK) return TCL_ERROR; return TCL_OK; } // // Exec a Sqlite3 statement embedded in a Tcl object. // int Pg_sqlite_execObj(Tcl_Interp *interp, sqlite3 *sqlite_db, Tcl_Obj *obj) { sqlite3_stmt *statement = NULL; int result = TCL_OK; if(Pg_sqlite_prepare(interp, sqlite_db, Tcl_GetString(obj), &statement) != TCL_OK) { result = TCL_ERROR; } else if(sqlite3_step(statement) != SQLITE_DONE) { Tcl_AppendResult(interp, sqlite3_errmsg(sqlite_db), (char *)NULL); result = TCL_ERROR; } if(statement) sqlite3_finalize(statement); return result; } // We don't use the internal Sqlite3 types because we may need to do some special handling for types mapped from // PostgreSQL. For example, PostgreSQL booleans present as strings, but Sqlite3 booleans are integer 0 or 1. enum mappedTypes { PG_SQLITE_INT, PG_SQLITE_DOUBLE, PG_SQLITE_TEXT, PG_SQLITE_BOOL, PG_SQLITE_NOTYPE }; struct { char *name; enum mappedTypes type; } mappedTypes[] = { {"integer", PG_SQLITE_INT}, {"real", PG_SQLITE_DOUBLE}, {"boolean", PG_SQLITE_BOOL}, {"int", PG_SQLITE_INT}, {"double", PG_SQLITE_DOUBLE}, {"bool", PG_SQLITE_BOOL}, {"text", PG_SQLITE_TEXT}, {NULL, PG_SQLITE_NOTYPE} }; // Reverse mapping primarily for debugging. Map to the first (canonical) name for a type. char *Pg_sqlite_typename(enum mappedTypes type) { static char *typenames[PG_SQLITE_NOTYPE] = { NULL }; if (type >= PG_SQLITE_NOTYPE) return NULL; if (typenames[0] == NULL) { int t; for(t = 0; mappedTypes[t].name; t++) { if (typenames[mappedTypes[t].type] == NULL) { typenames[mappedTypes[t].type] = mappedTypes[t].name; } } } return typenames[type]; } // Step through a list and produce an array of the types in the list. Since the list may be a list of types // or a list of names and types, we take a start index and stride to describe the list. int Pg_sqlite_mapTypes(Tcl_Interp *interp, Tcl_Obj *list, int start, int stride, enum mappedTypes **arrayPtr, int *lengthPtr) { Tcl_Obj **objv; int objc; enum mappedTypes *array; int i; int col; if(Tcl_ListObjGetElements(interp, list, &objc, &objv) != TCL_OK) return TCL_ERROR; if (stride > 1 && (objc % stride) != 0) { Tcl_AppendResult(interp, "List not an even length", (char *)NULL); return TCL_ERROR; } array = (enum mappedTypes *)ckalloc((sizeof *array) * (objc / stride)); for(col = 0, i = start; i < objc; col++, i += stride) { char *typeName = Tcl_GetString(objv[i]); int t; for(t = 0; mappedTypes[t].name; t++) { if(strcmp(typeName, mappedTypes[t].name) == 0) { array[col] = mappedTypes[t].type; break; } } if(!mappedTypes[t].name) { ckfree((void *)array); Tcl_AppendResult(interp, "Unknown type ", typeName, (char *)NULL); return TCL_ERROR; } } *arrayPtr = array; *lengthPtr = col; return TCL_OK; } // Step through a list and produce an array of the names in the list. Since the list may be a list of types // or a list of names and types, we take a stride to describe the list. int Pg_sqlite_getNames(Tcl_Interp *interp, Tcl_Obj *list, int stride, char ***arrayPtr, int *lengthPtr) { Tcl_Obj **objv; int objc; char **array; int i; int col; if(Tcl_ListObjGetElements(interp, list, &objc, &objv) != TCL_OK) return TCL_ERROR; if (stride > 1 && (objc % stride) != 0) { Tcl_AppendResult(interp, "List not an even length", (char *)NULL); return TCL_ERROR; } array = (char **)ckalloc((sizeof *array) * (objc / stride)); for(col = 0, i = 0; i < objc; col++, i += stride) { array[col] = Tcl_GetString(objv[i]); } *arrayPtr = array; *lengthPtr = col; return TCL_OK; } // PostgreSQL documentation, possible values for the boolean type: // Valid literal values for the "true" state are: TRUE 't' 'true' 'y' 'yes' 'on' '1' // For the "false" state, the following values can be used: FALSE 'f' 'false' 'n' 'no' 'off' '0' // boolean values are output using the letters t and f. // Handle all possible cases int Pg_sqlite_toBool(char *value) { int i = 0; // skip 'quotes' if(value[i] == '\'') i++; switch (tolower(value[i])) { // off and on case 'o': { if (tolower(value[i+1]) == 'n') { return 1; } return 0; } // true and false case 't': case 'y': { return 1; } case 'f': case 'n': { return 0; } // otherwise assume it's an integer default: { return atoi(value); } } } // Bind a single value to an Sqlite3 prepared statement, using our internal types. int Pg_sqlite_bindValue(sqlite3 *sqlite_db, sqlite3_stmt *statement, int column, char *value, enum mappedTypes type, const char **errorMessagePtr) { switch(type) { case PG_SQLITE_BOOL: { if (sqlite3_bind_int(statement, column+1, Pg_sqlite_toBool(value)) == SQLITE_OK) return TCL_OK; break; } case PG_SQLITE_INT: { int ival = atoi(value); if(ival == 0) { // It might be a boolean column mapped to an integer column ival = Pg_sqlite_toBool(value); } if (sqlite3_bind_int(statement, column+1, ival) == SQLITE_OK) return TCL_OK; break; } case PG_SQLITE_DOUBLE: { if (sqlite3_bind_double(statement, column+1, atof(value)) == SQLITE_OK) return TCL_OK; break; } case PG_SQLITE_TEXT: { if (sqlite3_bind_text(statement, column+1, value, -1, SQLITE_TRANSIENT) == SQLITE_OK) return TCL_OK; break; } default: { *errorMessagePtr = "Internal error - invalid column type"; return TCL_ERROR; } } *errorMessagePtr = sqlite3_errmsg(sqlite_db); return TCL_ERROR; } // // Generate statement to query the target DB to see if the row is already there. Returns success and fills in the indexes // of the primary keys in the name list. // int Pg_sqlite_generateCheck(Tcl_Interp *interp, sqlite3 *sqlite_db, char *tableName, char **columnNames, int nColumns, Tcl_Obj *primaryKey, sqlite3_stmt **statementPtr, int **primaryKeyIndexPtr) { Tcl_Obj **keyv; int keyc; int *primaryKeyIndex = NULL; char **primaryKeyNames = NULL; Tcl_Obj *sql = NULL; Tcl_Obj *where = NULL; int i; int k; int result = TCL_ERROR; sqlite3_stmt *statement = NULL; if(Tcl_ListObjGetElements(interp, primaryKey, &keyc, &keyv) != TCL_OK) goto cleanup_and_exit; Tcl_IncrRefCount(where = Tcl_NewObj()); primaryKeyNames = (char **)ckalloc(keyc * (sizeof *primaryKeyNames)); for(k = 0; k < keyc; k++) { char *column = Tcl_GetString(keyv[k]); char *space = strchr(column, ' '); if(space) { primaryKeyNames[k] = (char *)ckalloc(space - column + 1); *space = 0; strcpy(primaryKeyNames[k], column); *space = ' '; } else { primaryKeyNames[k] = (char *)ckalloc(strlen(column) + 1); strcpy(primaryKeyNames[k], column); } if(k != 0) Tcl_AppendStringsToObj(where, " AND ", (char *)NULL); Tcl_AppendStringsToObj(where, primaryKeyNames[k], " = ?", (char *)NULL); } primaryKeyIndex = (int *)ckalloc((keyc + 1) * (sizeof *primaryKeyIndex)); for(k = 0; k < keyc+1; k++) { primaryKeyIndex[k] = -1; } Tcl_IncrRefCount(sql = Tcl_NewObj()); Tcl_AppendStringsToObj(sql, "SELECT ", (char *)NULL); for(i = 0; i < nColumns; i++) { char *column = columnNames[i]; // add to the select clause if(i != 0) Tcl_AppendStringsToObj(sql, ", ", (char *)NULL); Tcl_AppendStringsToObj(sql, column, (char *)NULL); // look in primary key list for(k = 0; k < keyc; k++) { if(strcmp(column, primaryKeyNames[k]) == 0) break; } // if it's a primary key if(k < keyc) { // remember where it was in the column list primaryKeyIndex[k] = i; } } // if there's any unused primary keys that's an error for(k = 0; k < keyc; k++) { if(primaryKeyIndex[k] == -1) break; } if(k < keyc) { Tcl_AppendResult(interp, "Primary keys names must all be in the column list", (char *)NULL); goto cleanup_and_exit; } // combine select list and where clause into statement, and turn it into a string Tcl_AppendStringsToObj(sql, " FROM ", tableName, " WHERE (", Tcl_GetString(where), ");", (char *)NULL); IFDEBUG(fprintf(stderr, "Generated check statement = '%s'\n", Tcl_GetString(sql))); // create statement if(Pg_sqlite_prepare(interp, sqlite_db, Tcl_GetString(sql), &statement) != TCL_OK) { goto cleanup_and_exit; } result = TCL_OK; cleanup_and_exit: // discard key names if(primaryKeyNames) { for(k = 0; k < keyc; k++) { ckfree((void *)primaryKeyNames[k]); } ckfree((void *)primaryKeyNames); } // save or discard primary key indexes. if(primaryKeyIndex) { if(result == TCL_OK) *primaryKeyIndexPtr = primaryKeyIndex; else ckfree((void *)primaryKeyIndex); } // save or discard statement if(statement) { if(result == TCL_OK) *statementPtr = statement; else sqlite3_finalize(statement); } // Release allocated objects if(sql) Tcl_DecrRefCount (sql); if(where) Tcl_DecrRefCount (where); return result; } // // Execute prepared statement from Pg_sqlite_generate_check, pulling the primary keys from the already parsed row. // // Return TCL_CONTINUE if // (a) there is a row already existing, and // (b) all values in the parsed row match the values retreived from the db // Return TCL_OK if the there is no row or it doesn't match. // Return TCL_ERROR if there is an error. // int Pg_sqlite_executeCheck(Tcl_Interp *interp, sqlite3 *sqlite_db, sqlite3_stmt *statement, int *primaryKeyIndex, enum mappedTypes *columnTypes, char **row, int count) { int i; int status = TCL_ERROR; int col; for(i = 0; -1 != (col = primaryKeyIndex[i]); i++) { char *value = row[col]; enum mappedTypes type = columnTypes[col]; const char *errorMessage; if (Pg_sqlite_bindValue(sqlite_db, statement, i, value, type, &errorMessage) != TCL_OK) { IFDEBUG(fprintf(stderr, "ERROR binding primary key(%d) value = '%s' type = %d\n", i, value, type)); Tcl_AppendResult(interp, errorMessage, (char *)NULL); goto cleanup_and_exit; } } switch (sqlite3_step(statement)) { case SQLITE_ROW: { for(i = 0; i < count; i++) { // NULL CHECKING int colType = sqlite3_column_type(statement, i); // Both null, matches, continue to next row if(colType == SQLITE_NULL && !row[i]) { continue; } // sqlite null, check not null, no match, return if(colType == SQLITE_NULL && row[i]) { status = TCL_OK; goto cleanup_and_exit; } // sqlite has value, check is null, no match, return if(colType != SQLITE_NULL && !row[i]) { status = TCL_OK; goto cleanup_and_exit; } // Compare columns switch (columnTypes[i]) { case PG_SQLITE_BOOL: { int ival = sqlite3_column_int(statement, i); if (Pg_sqlite_toBool(row[i]) != ival) { status = TCL_OK; goto cleanup_and_exit; } break; } case PG_SQLITE_TEXT: { char *sval = (char *)sqlite3_column_text(statement, i); if(strcmp(row[i], sval) != 0) { status = TCL_OK; goto cleanup_and_exit; } break; } case PG_SQLITE_INT: { int ival = sqlite3_column_int(statement, i); int rval = atoi(row[i]); if(ival != rval) { status = TCL_OK; goto cleanup_and_exit; } break; } case PG_SQLITE_DOUBLE: { double dval = sqlite3_column_double(statement, i); double rval = atof(row[i]); if(dval != rval) { status = TCL_OK; goto cleanup_and_exit; } break; } default: { // otherwise unhandled type, maybe should be an error? char *value = (char *)sqlite3_column_text(statement, i); if(strcmp(row[i], value) != 0) { status = TCL_OK; goto cleanup_and_exit; } break; } } } status = TCL_CONTINUE; goto cleanup_and_exit; } case SQLITE_DONE: { status = TCL_OK; goto cleanup_and_exit; } default: { Tcl_AppendResult(interp, sqlite3_errmsg(sqlite_db), (char *)NULL); goto cleanup_and_exit; } } cleanup_and_exit: sqlite3_reset(statement); sqlite3_clear_bindings(statement); return status; } // Generate SQL to *insert* a row into Sqlite3. Also create the table if required. // // Pulls the names from either a name list or a name-type list. Only one need be provided. If it's creating // the table and no types are provided, it punts and assumes text. // // TODO: Add type list argument, or get rid of the whole separate -names and -types options. Tcl_Obj* Pg_sqlite_generate(Tcl_Interp *interp, sqlite3 *sqlite_db, char *sqliteTable, Tcl_Obj *nameList, Tcl_Obj *nameTypeList, Tcl_Obj *primaryKey, char *unknownKey, int newTable, int replacing) { Tcl_Obj **objv; int objc; Tcl_Obj **keyv = NULL; int keyc = 0; Tcl_Obj *create = NULL; Tcl_Obj *sql = NULL; Tcl_Obj *values = NULL; int i; int primaryKeyIndex = -1; int stride; Tcl_Obj *result = NULL; if(nameTypeList) { if(Tcl_ListObjGetElements(interp, nameTypeList, &objc, &objv) != TCL_OK) goto cleanup; if(objc & 1) { Tcl_AppendResult(interp, "List must have an even number of elements", (char *)NULL); goto cleanup; } stride = 2; } else { if(Tcl_ListObjGetElements(interp, nameList, &objc, &objv) != TCL_OK) goto cleanup; stride = 1; } if(newTable && primaryKey) { if(Tcl_ListObjGetElements(interp, primaryKey, &keyc, &keyv) != TCL_OK) goto cleanup; if(keyc == 1) { char *keyName = Tcl_GetString(keyv[0]); for(i = 0; i < objc; i += stride) if(strcmp(keyName, Tcl_GetString(objv[i])) == 0) break; if(i >= objc) { Tcl_AppendResult(interp, "Primary key not found in list", (char *)NULL); goto cleanup; } primaryKeyIndex = i/stride; } } Tcl_IncrRefCount(create = Tcl_NewObj()); Tcl_IncrRefCount(sql = Tcl_NewObj()); Tcl_IncrRefCount(values = Tcl_NewObj()); if (newTable) Tcl_AppendStringsToObj(create, "CREATE TABLE ", sqliteTable, " (", (char *)NULL); if (replacing) { Tcl_AppendStringsToObj(sql, "INSERT OR REPLACE INTO ", sqliteTable, " (", (char *)NULL); } else { Tcl_AppendStringsToObj(sql, "INSERT INTO ", sqliteTable, " (", (char *)NULL); } for(i = 0; i < objc; i+= stride) { if (newTable) { Tcl_AppendToObj(create, "\n\t", -1); Tcl_AppendObjToObj(create, objv[i]); if (stride == 2) { Tcl_AppendToObj(create, " ", -1); Tcl_AppendObjToObj(create, objv[i+1]); } else { Tcl_AppendToObj(create, " TEXT", -1); } if(i == primaryKeyIndex) Tcl_AppendToObj(create, " PRIMARY KEY", -1); if(i < objc-stride) Tcl_AppendToObj(create, ",", -1); } if(unknownKey && strcmp(Tcl_GetString(objv[i]), unknownKey) == 0) { Tcl_AppendResult(interp, "Unknown key duplicates existing key", (char *)NULL); goto cleanup; } if(i > 0) Tcl_AppendToObj(sql, ", ", -1); Tcl_AppendObjToObj(sql, objv[i]); if(i > 0) Tcl_AppendToObj(values, ", ", -1); Tcl_AppendToObj(values, "?", -1); } if(unknownKey) { if (newTable) { Tcl_AppendStringsToObj(create, ",\n\t", unknownKey, " TEXT", (char *)NULL); } Tcl_AppendStringsToObj(sql, ", ", unknownKey, (char *)NULL); Tcl_AppendToObj(values, ",?", -1); } if(newTable && keyc > 1) { int i; Tcl_AppendToObj(create, ",\n\tPRIMARY KEY(", -1); for(i = 0; i < keyc; i++) { if(i) Tcl_AppendToObj(create, ", ", -1); Tcl_AppendObjToObj(create, keyv[i]); } Tcl_AppendToObj(create, ")", -1); } if(newTable) Tcl_AppendToObj(create, "\n);", -1); Tcl_AppendToObj(sql, ") VALUES (", -1); Tcl_AppendObjToObj(sql, values); Tcl_AppendToObj(sql, ");", -1); if(newTable) { if(Pg_sqlite_execObj(interp, sqlite_db, create) != TCL_OK) goto cleanup; } result = sql; cleanup: if(create) Tcl_DecrRefCount(create); if(sql && sql != result) Tcl_DecrRefCount(sql); if(values) Tcl_DecrRefCount(values); return result; } // Drop table int Pg_sqlite_dropTable(Tcl_Interp *interp, sqlite3 *sqlite_db, char *dropTable) { Tcl_Obj *drop = NULL; int result; Tcl_IncrRefCount(drop = Tcl_NewObj()); Tcl_AppendStringsToObj(drop, "DROP TABLE ", dropTable, ";", (char *)NULL); result = Pg_sqlite_execObj(interp, sqlite_db, drop); if(drop) Tcl_DecrRefCount(drop); return result; } // Part 2 of the hack, locate the ObjProc for a known sqlite3 command so I can validate that the // userdata I've pulled out of the command provided really is a sqlite3 userdata. int Pg_sqlite_probe(Tcl_Interp *interp, Tcl_ObjCmdProc **procPtr) { static Tcl_ObjCmdProc *sqlite3_ObjProc = NULL; if (sqlite3_ObjProc == NULL) { char cmd_name[256 + 1]; char create_cmd[256 + 18 + 1]; char delete_cmd[256 + 7 + 1]; struct Tcl_CmdInfo cmd_info; if (Tcl_Eval(interp, "package require sqlite3") != TCL_OK) { return TCL_ERROR; } snprintf(cmd_name, 256, "::dummy%d", getpid()); snprintf(create_cmd, 256 + 18, "sqlite3 %s :memory:", cmd_name); snprintf(delete_cmd, 256 + 7, "%s close", cmd_name); if (Tcl_Eval(interp, create_cmd) != TCL_OK) { return TCL_ERROR; } if (!Tcl_GetCommandInfo(interp, cmd_name, &cmd_info)) { Tcl_AppendResult(interp, "pg_sqlite3 probe failed (", cmd_name, " not found)", (char *)NULL); Tcl_Eval(interp, delete_cmd); return TCL_ERROR; } if (!cmd_info.isNativeObjectProc) { Tcl_AppendResult(interp, "pg_sqlite3 probe failed (", cmd_name, " not a native object proc)", (char *)NULL); Tcl_Eval(interp, delete_cmd); return TCL_ERROR; } sqlite3_ObjProc = cmd_info.objProc; Tcl_Eval(interp, delete_cmd); if (!sqlite3_ObjProc) { Tcl_AppendResult(interp, "pg_sqlite3 probe failed (", cmd_name, " not a native object proc)", (char *)NULL); return TCL_ERROR; } } *procPtr = sqlite3_ObjProc; return TCL_OK; } // Error/end-of-file handling wrapped around Tcl_GetsObj int Pg_sqlite_gets(Tcl_Interp *interp, Tcl_Channel chan, Tcl_Obj **lineObjPtr) { Tcl_SetStringObj(*lineObjPtr, "", -1); if(Tcl_GetsObj(chan, *lineObjPtr) == -1) { if(Tcl_Eof(chan)) { return TCL_BREAK; } else { Tcl_AppendResult (interp, Tcl_ErrnoMsg(Tcl_GetErrno()), (char *)NULL); return TCL_ERROR; } } return TCL_OK; } // Split a string up into an array of named columns. Modifies the input string. int Pg_sqlite_split_tabsep(char *row, char ***columnsPtr, int nColumns, char *sepStr, char *nullStr, const char **errorMessagePtr) { int i; char *col; char *nextCol; char **columns = (char **)ckalloc(nColumns * sizeof *columns); int returnCode = TCL_OK; int sepLen = strlen(sepStr); col = row; i = 0; while(col && i < nColumns) { nextCol = strstr(col, sepStr); columns[i] = col; if(nextCol) { *nextCol = 0; nextCol += sepLen; } if (nullStr && strcmp(columns[i], nullStr) == 0) columns[i] = NULL; col = nextCol; i++; } if (col) { *errorMessagePtr = "Too many columns in row"; returnCode = TCL_ERROR; } else if (i < nColumns) { *errorMessagePtr = "Not enough columns in row"; returnCode = TCL_ERROR; } if(returnCode == TCL_OK) { *columnsPtr = columns; } else { ckfree((void *)columns); } return returnCode; } // Split a string up into a key-val list, and populate a column list with the values pulled in from the list. This // modifies the original string. // // TODO, add nullStr option and code to remove value from list. int Pg_sqlite_split_keyval(Tcl_Interp *interp, char *row, char ***columnsPtr, int nColumns, char *sepStr, char **names, Tcl_Obj *unknownObj) { char *val; char *key; char *nextVal; int col; char **columns = (char **)ckalloc(nColumns * sizeof *columns); int returnCode = TCL_OK; int sepLen = strlen(sepStr); Tcl_SetListObj(unknownObj, 0, NULL); for(col = 0; col < nColumns; col++) columns[col] = NULL; val = row; while(val) { nextVal = strstr(val, sepStr); if(!nextVal) { Tcl_AppendResult(interp, "Odd number of columns", (char *)NULL); returnCode = TCL_ERROR; break; } key = val; *nextVal = 0; nextVal += sepLen; val = nextVal; nextVal = strstr(val, sepStr); if(nextVal) { *nextVal = 0; nextVal += sepLen; } for(col = 0; col < nColumns; col++) { if(strcmp(key, names[col]) == 0) { break; } } if(col < nColumns) columns[col] = val; else { LAPPEND_STRING(interp, unknownObj, key); LAPPEND_STRING(interp, unknownObj, val); } val = nextVal; } if(returnCode == TCL_OK) { *columnsPtr = columns; } else { ckfree((void *)columns); Tcl_SetListObj(unknownObj, 0, NULL); } return returnCode; } int Pg_sqlite_getDB(Tcl_Interp *interp, char *cmdName, sqlite3 **sqlite_dbPtr) { struct Tcl_CmdInfo sqlite_commandInfo; Tcl_ObjCmdProc *sqlite3_ObjProc = NULL; struct SqliteDb *sqlite_clientData; if (!Tcl_GetCommandInfo(interp, cmdName, &sqlite_commandInfo)) { Tcl_AppendResult(interp, cmdName, " is not an sqlite3 handle", (char *)NULL); return TCL_ERROR; } // Get a known sqlite3 Tcl_ObjCmdProc if (Pg_sqlite_probe(interp, &sqlite3_ObjProc) != TCL_OK) { return TCL_ERROR; } if (sqlite3_ObjProc != sqlite_commandInfo.objProc) { Tcl_AppendResult(interp, "command ", cmdName, " is not an sqlite3 handle", (char *)NULL); return TCL_ERROR; } sqlite_clientData = (struct SqliteDb *)sqlite_commandInfo.objClientData; *sqlite_dbPtr = sqlite_clientData->db; return TCL_OK; } // Main routine, extract the sqlite handle, parse the ensemble command, and run the subcommand. int Pg_sqlite(ClientData clientdata, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { sqlite3 *sqlite_db; int cmdIndex; static const char *subCommands[] = { "info", "import_postgres_result", "write_tabsep", "read_tabsep", "read_tabsep_keylist", (char *)NULL }; enum subCommands { CMD_INFO, CMD_IMPORT_POSTGRES_RESULT, CMD_WRITE_TABSEP, CMD_READ_TABSEP, CMD_READ_KEYVAL, NUM_COMMANDS }; if (objc <= 2) { Tcl_WrongNumArgs(interp, 1, objv, "sqlite_handle command ?args?"); return TCL_ERROR; } if(Pg_sqlite_getDB(interp, Tcl_GetString(objv[1]), &sqlite_db) != TCL_OK) { return TCL_ERROR; } if (Tcl_GetIndexFromObj(interp, objv[2], subCommands, "command", TCL_EXACT, &cmdIndex) != TCL_OK) return TCL_ERROR; int minargs[NUM_COMMANDS] = { -1 }; int incoming[NUM_COMMANDS] = { -1 }; char *argerr[NUM_COMMANDS] = { "" }; // one time initialization of common code if(minargs[0] == -1) { int i; for(i = 0; i < NUM_COMMANDS; i++) { minargs[i] = 0; incoming[i] = 0; argerr[i] = ""; } minargs[CMD_IMPORT_POSTGRES_RESULT] = 4; minargs[CMD_READ_TABSEP] = 3; minargs[CMD_READ_KEYVAL] = 3; incoming[CMD_IMPORT_POSTGRES_RESULT] = 1; incoming[CMD_READ_TABSEP] = 1; incoming[CMD_READ_KEYVAL] = 1; argerr[CMD_READ_TABSEP] = "?-row tabsep_row? ?-file file_handle? ?-sql sqlite_sql? ?-create new_table? ?-into table? ?-as name-type-list? ?-types type-list? ?-names name-list? ?-pkey primary_key? ?-sep sepstring? ?-null nullstring? ?-replace? ?-poll_interval count? ?-check?"; argerr[CMD_IMPORT_POSTGRES_RESULT] = "handle ?-sql sqlite_sql? ?-create new_table? ?-into table? ?-as name-type-list? ?-types type-list? ?-names name-list? ?-rowbyrow? ?-pkey primary_key? ?-null nullstring? ?-replace? ?-poll_interval count? ?-check? ?-max col varname?"; argerr[CMD_READ_KEYVAL] = "?-row tabsep_row? ?-file file_handle? ?-create new_table? ?-into table? ?-as name-type-list? ?-names name-list? ?-pkey primary_key? ?-sep sepstring? ?-unknown colname? ?-replace? ?-poll_interval count?"; } // common variables Tcl_Obj *sqliteCodeObj = NULL; char *sqliteCode = NULL; char *sqliteTable = NULL; char *dropTable = NULL; sqlite3_stmt *statement = NULL; int optIndex = 4; Tcl_Obj *typeList = NULL; Tcl_Obj *nameTypeList = NULL; Tcl_Obj *nameList = NULL; int rowbyrow = 0; int returnCode = TCL_OK; const char *errorMessage = NULL; enum mappedTypes *columnTypes = NULL; char **columnNames = NULL; int nColumns = 0; int column; ExecStatusType status; char *tabsepFile = NULL; char *tabsepRow = NULL; Tcl_Obj *primaryKey = NULL; char **columns = NULL; int totalTuples = 0; char *sepString = "\t"; char *nullString = NULL; char *unknownKey = NULL; int createTable = 0; int replaceRows = 0; int pollInterval = 0; int recommitInterval = 0; int checkRow = 0; sqlite3_stmt *checkStatement = NULL; int *primaryKeyIndex = NULL; char *maxColumn = NULL; char *maxVar = NULL; int maxColumnNumber = -1; int maxColumnType = PG_SQLITE_NOTYPE; // common code if(incoming[cmdIndex]) { optIndex = minargs[cmdIndex]; if (objc < optIndex) { common_wrong_num_args: Tcl_WrongNumArgs(interp, 3, objv, argerr[cmdIndex]); return TCL_ERROR; } while(optIndex < objc) { char *optName = Tcl_GetString(objv[optIndex]); optIndex++; if (optName[0] != '-') { goto common_wrong_num_args; } if (cmdIndex != CMD_READ_KEYVAL && strcmp(optName, "-types") == 0) { if(optIndex >= objc) { Tcl_AppendResult(interp, "No list provided for -types", (char *)NULL); return TCL_ERROR; } typeList = objv[optIndex]; optIndex++; } else if (strcmp(optName, "-names") == 0) { if(optIndex >= objc) { Tcl_AppendResult(interp, "No list provided for -names", (char *)NULL); return TCL_ERROR; } nameList = objv[optIndex]; optIndex++; } else if (strcmp(optName, "-as") == 0) { if(optIndex >= objc) { Tcl_AppendResult(interp, "No list provided for -as", (char *)NULL); return TCL_ERROR; } nameTypeList = objv[optIndex]; optIndex++; } else if (strcmp(optName, "-pkey") == 0) { if(optIndex >= objc) { Tcl_AppendResult(interp, "No list provided for -pkey", (char *)NULL); return TCL_ERROR; } primaryKey = objv[optIndex]; optIndex++; } else if (cmdIndex != CMD_IMPORT_POSTGRES_RESULT && strcmp(optName, "-sep") == 0) { if(optIndex >= objc) { Tcl_AppendResult(interp, "No string provided for -sep", (char *)NULL); return TCL_ERROR; } sepString = Tcl_GetString(objv[optIndex]); optIndex++; } else if (cmdIndex != CMD_READ_KEYVAL && strcmp(optName, "-null") == 0) { if(optIndex >= objc) { Tcl_AppendResult(interp, "No string provided for -null", (char *)NULL); return TCL_ERROR; } nullString = Tcl_GetString(objv[optIndex]); optIndex++; } else if (cmdIndex == CMD_READ_KEYVAL && strcmp(optName, "-unknown") == 0) { if(optIndex >= objc) { Tcl_AppendResult(interp, "No column provided for -unknown", (char *)NULL); return TCL_ERROR; } unknownKey = Tcl_GetString(objv[optIndex]); optIndex++; } else if (cmdIndex != CMD_READ_KEYVAL && strcmp(optName, "-sql") == 0) { if(optIndex >= objc) { Tcl_AppendResult(interp, "No code provided for -sql", (char *)NULL); return TCL_ERROR; } sqliteCode = Tcl_GetString(objv[optIndex]); optIndex++; } else if (strcmp(optName, "-create") == 0) { if(optIndex >= objc) { Tcl_AppendResult(interp, "No table provided for -create", (char *)NULL); return TCL_ERROR; } sqliteTable = Tcl_GetString(objv[optIndex]); createTable = 1; optIndex++; } else if (strcmp(optName, "-into") == 0) { if(optIndex >= objc) { Tcl_AppendResult(interp, "No table provided for -into", (char *)NULL); return TCL_ERROR; } sqliteTable = Tcl_GetString(objv[optIndex]); optIndex++; } else if (cmdIndex == CMD_IMPORT_POSTGRES_RESULT && strcmp(optName, "-max") == 0) { if(optIndex >= objc) { Tcl_AppendResult(interp, "No column provided for -max", (char *)NULL); return TCL_ERROR; } maxColumn = Tcl_GetString(objv[optIndex]); optIndex++; if(optIndex >= objc) { Tcl_AppendResult(interp, "No variable provided for -max", (char *)NULL); return TCL_ERROR; } maxVar = Tcl_GetString(objv[optIndex]); optIndex++; } else if (cmdIndex != CMD_IMPORT_POSTGRES_RESULT && strcmp(optName, "-row") == 0) { if(optIndex >= objc) { Tcl_AppendResult(interp, "No string provided for -row", (char *)NULL); return TCL_ERROR; } tabsepRow = Tcl_GetString(objv[optIndex]); optIndex++; } else if (cmdIndex != CMD_IMPORT_POSTGRES_RESULT && strcmp(optName, "-file") == 0) { if(optIndex >= objc) { Tcl_AppendResult(interp, "No name provided for -file", (char *)NULL); return TCL_ERROR; } tabsepFile = Tcl_GetString(objv[optIndex]); optIndex++; } else if (cmdIndex == CMD_IMPORT_POSTGRES_RESULT && strcmp(optName, "-rowbyrow") == 0) { rowbyrow = 1; } else if (cmdIndex != CMD_READ_KEYVAL && strcmp(optName, "-check") == 0) { checkRow = 1; } else if (strcmp(optName, "-replace") == 0) { replaceRows = 1; } else if (strcmp(optName, "-recommit") == 0) { if(optIndex >= objc) { Tcl_AppendResult(interp, "No value provided for -recommit", (char *)NULL); return TCL_ERROR; } if (Tcl_GetIntFromObj(interp, objv[optIndex], &recommitInterval) == TCL_ERROR) { Tcl_AppendResult(interp, " in argument to '-recommit'", (char *)NULL); return TCL_ERROR; } if(pollInterval <= 0) // Or should this be an error? pollInterval = 0; optIndex++; } else if (strcmp(optName, "-poll_interval") == 0) { if(optIndex >= objc) { Tcl_AppendResult(interp, "No value provided for -poll_interval", (char *)NULL); return TCL_ERROR; } if (Tcl_GetIntFromObj(interp, objv[optIndex], &pollInterval) == TCL_ERROR) { Tcl_AppendResult(interp, " in argument to '-poll_interval'", (char *)NULL); return TCL_ERROR; } if(pollInterval <= 0) // Or should this be an error? pollInterval = 0; optIndex++; } else { goto common_wrong_num_args; } } if (cmdIndex == CMD_READ_TABSEP || cmdIndex == CMD_READ_KEYVAL) { if(!tabsepFile && !tabsepRow) { Tcl_AppendResult(interp, "command requires either -row or -file", (char *)NULL); return TCL_ERROR; } if(tabsepFile && tabsepRow) { Tcl_AppendResult(interp, "Can't use both -row and -file", (char *)NULL); return TCL_ERROR; } } if (sqliteCode && sqliteTable) { Tcl_AppendResult(interp, "Can't use both -sql and -into", (char *)NULL); return TCL_ERROR; } if (!sqliteCode && !sqliteTable) { Tcl_AppendResult(interp, "No sqlite destination provided", (char *)NULL); return TCL_ERROR; } if ((nameList || typeList) && nameTypeList) { Tcl_AppendResult(interp, "Can't use both -names/-types and -as", (char *)NULL); return TCL_ERROR; } if(typeList) { if (Pg_sqlite_mapTypes(interp, typeList, 0, 1, &columnTypes, &nColumns) != TCL_OK) return TCL_ERROR; } if(nameList) { if(cmdIndex == CMD_READ_KEYVAL) { if(Pg_sqlite_getNames(interp, nameList, 1, &columnNames, &nColumns) != TCL_OK) { early_error_exit: if(dropTable) Pg_sqlite_dropTable(interp, sqlite_db, dropTable); if (columnNames) ckfree((void *)columnNames); if (columnTypes) ckfree((void *)columnTypes); if(sqliteCodeObj) Tcl_DecrRefCount(sqliteCodeObj); return TCL_ERROR; } } else if(!nColumns) { if(Tcl_ListObjLength(interp, nameList, &nColumns) != TCL_OK) { goto early_error_exit; } } } if(!columnNames && nameTypeList) { if(Pg_sqlite_getNames(interp, nameTypeList, 2, &columnNames, &nColumns) != TCL_OK) { goto early_error_exit; } } if(sqliteTable) { if(nameTypeList) { if (Pg_sqlite_mapTypes(interp, nameTypeList, 1, 2, &columnTypes, &nColumns) != TCL_OK) goto early_error_exit; } else if(!nameList) { Tcl_AppendResult(interp, "No template (-as) provided for -into", (char *)NULL); goto early_error_exit; } sqliteCodeObj = Pg_sqlite_generate(interp, sqlite_db, sqliteTable, nameList, nameTypeList, primaryKey, unknownKey, createTable, replaceRows); sqliteCode = Tcl_GetString(sqliteCodeObj); if (!sqliteCode) { goto early_error_exit; } if(createTable) dropTable = sqliteTable; } if(checkRow) { if(!columnNames || !columnTypes || !primaryKey || !sqliteTable) { Tcl_AppendResult(interp, "-check requires primary key, column names, and column types", (char *)NULL); goto early_error_exit; } if(Pg_sqlite_generateCheck(interp, sqlite_db, sqliteTable, columnNames, nColumns, primaryKey, &checkStatement, &primaryKeyIndex) != TCL_OK) { goto early_error_exit; } } // Last try hack to guess columns if(!nColumns) { char *p = strchr(sqliteCode, '?'); while(p) { p++; nColumns++; p = strchr(p, '?'); } } if(!nColumns) { Tcl_AppendResult(interp, "Can't determine row length from provided arguments", (char *)NULL); goto early_error_exit; } if(maxColumn) { if (!columnNames || !columnTypes) { Tcl_AppendResult(interp, "Can't specify -max without column names and types", (char *)NULL); goto early_error_exit; } for(maxColumnNumber = 0; maxColumnNumber < nColumns; maxColumnNumber++) { if(strcmp(maxColumn, columnNames[maxColumnNumber]) == 0) break; } if(maxColumnNumber >= nColumns) { Tcl_AppendResult(interp, "Argument to -max not found in columns", (char *)NULL); goto early_error_exit; } switch (columnTypes[maxColumnNumber]) { case PG_SQLITE_INT: case PG_SQLITE_DOUBLE: case PG_SQLITE_TEXT: { maxColumnType = columnTypes[maxColumnNumber]; break; } default: { Tcl_AppendResult(interp, "Can only track maximum of integer, float, or text columns", (char *)NULL); goto early_error_exit; } } } } switch (cmdIndex) { case CMD_INFO: { char *dbName = NULL; Tcl_Obj *infoList = NULL; int doFilename = 0; int doBusy = 0; optIndex = 3; Tcl_IncrRefCount(infoList = Tcl_NewObj()); if(objc < optIndex) { info_wrong_num_args: Tcl_WrongNumArgs(interp, 3, objv, "?-busy? ?-filename? ?-db dbname?"); if(infoList) Tcl_DecrRefCount(infoList); return TCL_ERROR; } while (optIndex < objc) { char *optName = Tcl_GetString(objv[optIndex]); optIndex++; if (optName[0] != '-') { goto info_wrong_num_args; } if (strcmp(optName, "-db") == 0) { if(optIndex >= objc) goto info_wrong_num_args; dbName = Tcl_GetString(objv[optIndex]); optIndex++; } else if (strcmp(optName, "-busy") == 0) { doBusy = 1; } else if (strcmp(optName, "-filename") == 0) { doFilename = 1; } else goto info_wrong_num_args; } // no args, do everything if(!doFilename && !doBusy) { doFilename = 1; doBusy = 1; } if(doFilename) { if(!dbName) dbName = "main"; LAPPEND_STRING(interp, infoList, "filename"); LAPPEND_STRING(interp, infoList, sqlite3_db_filename(sqlite_db, dbName)); } if(doBusy) { sqlite3_stmt *pStmt = NULL; Tcl_Obj *busyList = NULL; for(pStmt=sqlite3_next_stmt(sqlite_db, pStmt); pStmt; pStmt=sqlite3_next_stmt(sqlite_db, pStmt)){ if( sqlite3_stmt_busy(pStmt) ){ if(!busyList) Tcl_IncrRefCount(busyList = Tcl_NewObj()); LAPPEND_STRING(interp, busyList, sqlite3_sql(pStmt)); } } if(busyList) { LAPPEND_STRING(interp, infoList, "busy"); Tcl_ListObjAppendElement(interp, infoList, busyList); Tcl_DecrRefCount(busyList); } } Tcl_SetObjResult(interp, infoList); break; } case CMD_WRITE_TABSEP: { Tcl_Channel channel = NULL; const char *channelName = NULL; int channelMode; int sqliteStatus; channelName = Tcl_GetString(objv[3]); sqliteCode = Tcl_GetString(objv[4]); optIndex = 5; nullString = ""; if(objc < optIndex) { write_wrong_num_args: Tcl_WrongNumArgs(interp, 3, objv, "handle sql ?-null nullstring? ?-sep sepstring? ?-poll_interval row-count?"); return TCL_ERROR; } while (optIndex < objc) { char *optName = Tcl_GetString(objv[optIndex]); optIndex++; if (optName[0] != '-') { goto write_wrong_num_args; } if (strcmp(optName, "-null") == 0) { nullString = Tcl_GetString(objv[optIndex]); optIndex++; } else if (strcmp(optName, "-sep") == 0) { sepString = Tcl_GetString(objv[optIndex]); optIndex++; } else if (strcmp(optName, "-poll_interval") == 0) { if (Tcl_GetIntFromObj(interp, objv[optIndex], &pollInterval) == TCL_ERROR) { Tcl_AppendResult(interp, " in argument to '-poll_interval'", (char *)NULL); return TCL_ERROR; } if(pollInterval <= 0) // Or should this be an error? pollInterval = 0; optIndex++; } else goto write_wrong_num_args; } channel = Tcl_GetChannel(interp, channelName, &channelMode); if(!channel) { Tcl_AppendResult(interp, Tcl_ErrnoMsg(Tcl_GetErrno()), " converting ", channelName, (char *)NULL); return TCL_ERROR; } if (!(channelMode & TCL_WRITABLE)) { Tcl_AppendResult (interp, "Channel ", channelName, " is not writable", (char *)NULL); return TCL_ERROR; } if(Pg_sqlite_prepare(interp, sqlite_db, sqliteCode, &statement) != TCL_OK) return TCL_ERROR; nColumns = sqlite3_column_count(statement); totalTuples = 0; returnCode = TCL_ERROR; if(recommitInterval) { if(Pg_sqlite_begin(interp, sqlite_db) == TCL_ERROR) goto write_tabsep_cleanup_and_exit; } while (SQLITE_ROW == (sqliteStatus = sqlite3_step(statement))) { int i; for(i = 0; i < nColumns; i++) { char *value = (char *)sqlite3_column_text(statement, i); if(value == NULL) value = nullString; if (i > 0 && Tcl_WriteChars(channel, sepString, -1) == -1) { Tcl_AppendResult(interp, Tcl_ErrnoMsg(Tcl_GetErrno()), (char *)NULL); goto write_tabsep_cleanup_and_exit; } if (Tcl_WriteChars(channel, value, -1) == -1) { Tcl_AppendResult(interp, Tcl_ErrnoMsg(Tcl_GetErrno()), (char *)NULL); goto write_tabsep_cleanup_and_exit; } } if(Tcl_WriteChars(channel, "\n", -1) == -1) { Tcl_AppendResult(interp, Tcl_ErrnoMsg(Tcl_GetErrno()), (char *)NULL); goto write_tabsep_cleanup_and_exit; } totalTuples++; if(recommitInterval && (totalTuples % recommitInterval) == 0) { if(Pg_sqlite_recommit(interp, sqlite_db, sqliteCode, &statement) != TCL_OK) goto write_tabsep_cleanup_and_exit; } if(pollInterval && (totalTuples % pollInterval) == 0) { Tcl_DoOneEvent(0); } } if(sqliteStatus != SQLITE_DONE) { Tcl_AppendResult(interp, sqlite3_errmsg(sqlite_db), (char *)NULL); goto write_tabsep_cleanup_and_exit; } returnCode = TCL_OK; write_tabsep_cleanup_and_exit: if(statement) { sqlite3_finalize(statement); statement = NULL; } if(checkStatement) { sqlite3_finalize(checkStatement); checkStatement = NULL; } if(recommitInterval) { if(Pg_sqlite_commit(interp, sqlite_db) != TCL_OK) returnCode = TCL_ERROR; } if(returnCode == TCL_ERROR) return TCL_ERROR; Tcl_SetObjResult(interp, Tcl_NewIntObj(totalTuples)); return TCL_OK; } case CMD_READ_KEYVAL: case CMD_READ_TABSEP: { Tcl_Channel tabsepChannel = NULL; int channelMode; char *row = NULL; Tcl_Obj *unknownObj = NULL; Tcl_Obj *rowObj = NULL; if(cmdIndex == CMD_READ_KEYVAL) Tcl_IncrRefCount(unknownObj = Tcl_NewObj()); Tcl_IncrRefCount(rowObj = Tcl_NewObj()); if(tabsepFile) { tabsepChannel = Tcl_GetChannel(interp, tabsepFile, &channelMode); if(!tabsepChannel) { Tcl_AppendResult(interp, Tcl_ErrnoMsg(Tcl_GetErrno()), " converting ", tabsepFile, (char *)NULL); returnCode = TCL_ERROR; goto read_tabsep_cleanup_and_exit; } if (!(channelMode & TCL_READABLE)) { Tcl_AppendResult (interp, "File in -from argument must be readable", (char *)NULL); returnCode = TCL_ERROR; goto read_tabsep_cleanup_and_exit; } returnCode = Pg_sqlite_gets(interp, tabsepChannel, &rowObj); if(returnCode == TCL_OK) { row = Tcl_GetString(rowObj); } else { if (returnCode == TCL_BREAK) returnCode = TCL_OK; goto read_tabsep_cleanup_and_exit; } } else { row = tabsepRow; } if(recommitInterval) { if(Pg_sqlite_begin(interp, sqlite_db) == TCL_ERROR) { returnCode = TCL_ERROR; goto read_tabsep_cleanup_and_exit; } } if(Pg_sqlite_prepare(interp, sqlite_db, sqliteCode, &statement) != TCL_OK) { goto read_tabsep_cleanup_and_exit; } while(row) { if(cmdIndex == CMD_READ_KEYVAL) { int len; if (Pg_sqlite_split_keyval(interp, row, &columns, nColumns, sepString, columnNames, unknownObj) != TCL_OK) { returnCode = TCL_ERROR; break; } if(Tcl_ListObjLength(interp, unknownObj, &len) != TCL_OK) { returnCode = TCL_ERROR; break; } if(len && !unknownKey) { returnCode = TCL_ERROR; break; } } else { if (Pg_sqlite_split_tabsep(row, &columns, nColumns, sepString, nullString, &errorMessage) != TCL_OK) { returnCode = TCL_ERROR; break; } if(checkRow) { int check = Pg_sqlite_executeCheck(interp, sqlite_db, checkStatement, primaryKeyIndex, columnTypes, columns, nColumns); if(check == TCL_ERROR) { returnCode = TCL_ERROR; break; } if (check == TCL_CONTINUE) { goto next_row; } } } for(column = 0; column < nColumns; column++) { char *value = columns[column]; if(!value) continue; int type = columnTypes ? columnTypes[column] : PG_SQLITE_TEXT; if (Pg_sqlite_bindValue(sqlite_db, statement, column, value, type, &errorMessage)) { returnCode = TCL_ERROR; break; } } if(cmdIndex == CMD_READ_KEYVAL && unknownKey) { char *value = Tcl_GetString(unknownObj); if(value[0]) { if (Pg_sqlite_bindValue(sqlite_db, statement, nColumns, value, PG_SQLITE_TEXT, &errorMessage) != TCL_OK) { returnCode = TCL_ERROR; break; } } } if (sqlite3_step(statement) != SQLITE_DONE) { errorMessage = sqlite3_errmsg(sqlite_db); returnCode = TCL_ERROR; break; } sqlite3_reset(statement); sqlite3_clear_bindings(statement); // Once we've imported any data, we'll keep the table. dropTable = NULL; totalTuples++; if(recommitInterval && (totalTuples % recommitInterval) == 0) { if(Pg_sqlite_recommit(interp, sqlite_db, sqliteCode, &statement) != TCL_OK) { returnCode = TCL_ERROR; goto read_tabsep_cleanup_and_exit; } } if(pollInterval && (totalTuples % pollInterval) == 0) { Tcl_DoOneEvent(0); } next_row: if(tabsepFile) { row = NULL; returnCode = Pg_sqlite_gets(interp, tabsepChannel, &rowObj); if(returnCode == TCL_OK) row = Tcl_GetString(rowObj); else if(returnCode == TCL_BREAK) returnCode = TCL_OK; } else { row = NULL; } } read_tabsep_cleanup_and_exit: if(statement) { sqlite3_finalize(statement); statement = NULL; } if(checkStatement) { sqlite3_finalize(checkStatement); checkStatement = NULL; } if(recommitInterval) { if(Pg_sqlite_commit(interp, sqlite_db) != TCL_OK) returnCode = TCL_ERROR; } if(columnTypes) ckfree((void *)columnTypes); if(columns) ckfree((void *)columns); if(rowObj) Tcl_DecrRefCount(rowObj); if(unknownObj) Tcl_DecrRefCount(unknownObj); if(sqliteCodeObj) Tcl_DecrRefCount(sqliteCodeObj); if(returnCode == TCL_ERROR) { if (errorMessage) { Tcl_AppendResult(interp, (char *)errorMessage, (char *)NULL); } if(dropTable) { if(Pg_sqlite_dropTable(interp, sqlite_db, dropTable) != TCL_OK) Tcl_AppendResult(interp, " while dropping table", (char *)NULL); } return TCL_ERROR; } Tcl_SetObjResult(interp, Tcl_NewIntObj(totalTuples)); return returnCode; } case CMD_IMPORT_POSTGRES_RESULT: { char *pghandle_name = Tcl_GetString(objv[3]); int nTuples; int tupleIndex; int maxInt = 0; double maxFloat = 0.0; char maxString[BUFSIZ]; int maxValid = 0; PGconn *conn = NULL; PGresult *result = NULL; Pg_resultid *resultid; Pg_ConnectionId *connid; if(rowbyrow) { conn = PgGetConnectionId(interp, pghandle_name, &connid); if(conn == NULL) { Tcl_AppendResult (interp, " while getting connection from ", pghandle_name, (char *)NULL); returnCode = TCL_ERROR; goto import_cleanup_and_exit; } PQsetSingleRowMode(conn); result = PQgetResult(conn); } else { result = PgGetResultId(interp, pghandle_name, &resultid); connid = resultid->connid; } if(!result) { Tcl_AppendResult (interp, "Failed to get handle from ", pghandle_name, (char *)NULL); returnCode = TCL_ERROR; goto import_cleanup_and_exit; } if(Pg_sqlite_prepare(interp, sqlite_db, sqliteCode, &statement) != TCL_OK) { Tcl_AppendResult (interp, " while preparing ", sqliteCode, (char *)NULL); goto import_cleanup_and_exit; } if(recommitInterval) { if(Pg_sqlite_begin(interp, sqlite_db) == TCL_ERROR) { returnCode = TCL_ERROR; goto import_cleanup_and_exit; } } while(result) { status = PQresultStatus(result); if(status != PGRES_TUPLES_OK && status != PGRES_SINGLE_TUPLE) { errorMessage = PQresultErrorMessage(result); if (!*errorMessage) errorMessage = PQresStatus(status); PgCheckConnectionState(connid); returnCode = TCL_ERROR; break; } nTuples = PQntuples(result); for (tupleIndex = 0; tupleIndex < nTuples; tupleIndex++) { char **columns = (char **)ckalloc(nColumns * (sizeof *columns)); int gotMax = 1; for(column = 0; column < nColumns; column++) { if(PQgetisnull(result, tupleIndex, column)) { columns[column] = NULL; if(maxColumn && column == maxColumnNumber) { gotMax = 0; } } else { columns[column] = PQgetvalue(result, tupleIndex, column); if(nullString && strcmp(columns[column], nullString) == 0) columns[column] = NULL; } } if(checkRow) { int check = Pg_sqlite_executeCheck(interp, sqlite_db, checkStatement, primaryKeyIndex, columnTypes, columns, nColumns); if(check == TCL_ERROR) { returnCode = TCL_ERROR; ckfree((void *)columns); goto import_cleanup_and_exit; } if (check == TCL_CONTINUE) { ckfree((void *)columns); continue; } } for(column = 0; column < nColumns; column++) { if (!columns[column]) continue; int type = columnTypes ? columnTypes[column] : PG_SQLITE_TEXT; if (Pg_sqlite_bindValue(sqlite_db, statement, column, columns[column], type, &errorMessage) != TCL_OK) { returnCode = TCL_ERROR; ckfree((void *)columns); goto import_cleanup_and_exit; } } if(maxColumn && gotMax) { char *val = columns[maxColumnNumber]; switch (maxColumnType) { case PG_SQLITE_TEXT: { if(!maxValid || strcmp(val, maxString) > 0) { strcpy(maxString, val); maxValid = 1; } break; } case PG_SQLITE_INT: { int valInt = atoi(val); if(!maxValid || valInt > maxInt) { maxInt = valInt; maxValid = 1; } break; } case PG_SQLITE_DOUBLE: { double valFloat = atof(val); if(!maxValid || valFloat > maxFloat) { maxFloat = valFloat; maxValid = 1; } break; } } } ckfree((void *)columns); columns = NULL; if (sqlite3_step(statement) != SQLITE_DONE) { errorMessage = sqlite3_errmsg(sqlite_db); returnCode = TCL_ERROR; if(rowbyrow) PgCheckConnectionState(connid); goto import_cleanup_and_exit; } sqlite3_reset(statement); sqlite3_clear_bindings(statement); // Once we've imported any data, we'll keep the table. dropTable = NULL; totalTuples++; if(recommitInterval && (totalTuples % recommitInterval) == 0) { if(Pg_sqlite_recommit(interp, sqlite_db, sqliteCode, &statement) != TCL_OK) { returnCode = TCL_ERROR; goto import_cleanup_and_exit; } } if(pollInterval && (totalTuples % pollInterval) == 0) { Tcl_DoOneEvent(0); } } if(rowbyrow) { PQclear(result); result = PQgetResult(conn); if(!result && PgCheckConnectionState(connid) != TCL_OK) { errorMessage = "CONNECTION_BAD"; returnCode = TCL_ERROR;; goto import_cleanup_and_exit; } } else { result = NULL; } } import_cleanup_and_exit: if(rowbyrow) { while(result) { PQclear(result); if(!conn) break; result = PQgetResult(conn); } if(PgCheckConnectionState(connid) != TCL_OK) { errorMessage = "CONNECTION_BAD"; returnCode = TCL_ERROR;; } } if(statement) { sqlite3_finalize(statement); statement = NULL; } if(checkStatement) { sqlite3_finalize(checkStatement); checkStatement = NULL; } if(recommitInterval) { if(Pg_sqlite_commit(interp, sqlite_db) != TCL_OK) returnCode = TCL_ERROR; } if(columnTypes) ckfree((void *)columnTypes); if(sqliteCodeObj) Tcl_DecrRefCount(sqliteCodeObj); if(returnCode == TCL_ERROR) { if (errorMessage) { Tcl_AppendResult(interp, (char *)errorMessage, (char *)NULL); } if(dropTable) { if(Pg_sqlite_dropTable(interp, sqlite_db, dropTable) != TCL_OK) Tcl_AppendResult(interp, " while handling error", (char *)NULL); } return TCL_ERROR; } if(maxColumn) { if(maxValid) { Tcl_Obj *obj = NULL; switch (maxColumnType) { case PG_SQLITE_TEXT: { Tcl_IncrRefCount(obj = Tcl_NewStringObj(maxString, -1)); break; } case PG_SQLITE_INT: { Tcl_IncrRefCount(obj = Tcl_NewIntObj(maxInt)); break; } case PG_SQLITE_DOUBLE: { Tcl_IncrRefCount(obj = Tcl_NewDoubleObj(maxFloat)); break; } } if(obj) { Tcl_SetVar2Ex(interp, maxVar, NULL, obj, 0); Tcl_DecrRefCount(obj); obj = NULL; } } } Tcl_SetObjResult(interp, Tcl_NewIntObj(totalTuples)); return returnCode; } } return TCL_OK; } pgtcl-2.8.0/generic/pgtclSqlite.h000066400000000000000000000002461420313073400167110ustar00rootroot00000000000000#ifndef PGTCLSQLITE_H #define PGTCLSQLITE_H #include extern int Pg_sqlite( ClientData cData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); #endif pgtcl-2.8.0/generic/tokenize.c000066400000000000000000000414051420313073400162430ustar00rootroot00000000000000/* ** 2001 September 15 ** ** The author disclaims copyright to this source code. In place of ** a legal notice, here is a blessing: ** ** May you do good and not evil. ** May you find forgiveness for yourself and forgive others. ** May you share freely, never taking more than you give. ** ************************************************************************* ** An tokenizer for SQL ** ** This file contains C code that splits an SQL input string up into ** individual tokens and sends those tokens one-by-one over to the ** parser for analysis. */ #include "tokenize.h" #include #include #include /* Character classes for tokenizing ** ** In the sqlite3GetToken() function, a switch() on aiClass[c] is implemented ** using a lookup table, whereas a switch() directly on c uses a binary search. ** The lookup table is much faster. To maximize speed, and to ensure that ** a lookup table is used, all of the classes need to be small integers and ** all of them need to be used within the switch. */ #define CC_X 0 /* The letter 'x', or start of BLOB literal */ #define CC_KYWD 1 /* Alphabetics or '_'. Usable in a keyword */ #define CC_ID 2 /* unicode characters usable in IDs */ #define CC_DIGIT 3 /* Digits */ #define CC_DOLLAR 4 /* '$' (returns TK_TCLVAR unless numeric var "name") */ #define CC_VARALPHA 5 /* '@', ':'. Alphabetic SQL variables (returns TK_TCLVAR) */ #define CC_VARNUM 6 /* '?'. Numeric SQL variables (returns TK_SQLVAR) */ #define CC_SPACE 7 /* Space characters */ #define CC_QUOTE 8 /* '"', '\'', or '`'. String literals, quoted ids */ #define CC_QUOTE2 9 /* '['. [...] style quoted ids */ #define CC_PIPE 10 /* '|'. Bitwise OR or concatenate */ #define CC_MINUS 11 /* '-'. Minus or SQL-style comment */ #define CC_LT 12 /* '<'. Part of < or <= or <> */ #define CC_GT 13 /* '>'. Part of > or >= */ #define CC_EQ 14 /* '='. Part of = or == */ #define CC_BANG 15 /* '!'. Part of != */ #define CC_SLASH 16 /* '/'. / or c-style comment */ #define CC_LP 17 /* '(' */ #define CC_RP 18 /* ')' */ #define CC_SEMI 19 /* ';' */ #define CC_PLUS 20 /* '+' */ #define CC_STAR 21 /* '*' */ #define CC_PERCENT 22 /* '%' */ #define CC_COMMA 23 /* ',' */ #define CC_AND 24 /* '&' */ #define CC_TILDA 25 /* '~' */ #define CC_DOT 26 /* '.' */ #define CC_HASH 28 /* '#' added 20170726 PDS */ #define CC_ILLEGAL 99 /* Illegal character */ static const unsigned char aiClass[] = { /* x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xa xb xc xd xe xf */ /* 0x */ 99, 99, 99, 99, 99, 99, 99, 99, 99, 7, 7, 99, 7, 7, 99, 99, /* 1x */ 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, /* 2x */ 7, 15, 8, 28, 4, 22, 24, 8, 17, 18, 21, 20, 23, 11, 26, 16, /* 3x */ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 19, 12, 14, 13, 6, /* 4x */ 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 5x */ 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 9, 99, 99, 99, 1, /* 6x */ 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 7x */ 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 99, 10, 99, 25, 99, /* 8x */ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, /* 9x */ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, /* Ax */ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, /* Bx */ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, /* Cx */ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, /* Dx */ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, /* Ex */ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, /* Fx */ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 }; #define totoken(X) aiClass[(unsigned char)X] // Imported from src/global.c in the sqlite distro static const unsigned char sqlite3CtypeMap[256] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 00..07 ........ */ 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, /* 08..0f ........ */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 10..17 ........ */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 18..1f ........ */ 0x01, 0x00, 0x80, 0x00, 0x40, 0x00, 0x00, 0x80, /* 20..27 !"#$%&' */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 28..2f ()*+,-./ */ 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, /* 30..37 01234567 */ 0x0c, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 38..3f 89:;<=>? */ 0x00, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x02, /* 40..47 @ABCDEFG */ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, /* 48..4f HIJKLMNO */ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, /* 50..57 PQRSTUVW */ 0x02, 0x02, 0x02, 0x80, 0x00, 0x00, 0x00, 0x40, /* 58..5f XYZ[\]^_ */ 0x80, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x22, /* 60..67 `abcdefg */ 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, /* 68..6f hijklmno */ 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, /* 70..77 pqrstuvw */ 0x22, 0x22, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, /* 78..7f xyz{|}~. */ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, /* 80..87 ........ */ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, /* 88..8f ........ */ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, /* 90..97 ........ */ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, /* 98..9f ........ */ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, /* a0..a7 ........ */ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, /* a8..af ........ */ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, /* b0..b7 ........ */ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, /* b8..bf ........ */ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, /* c0..c7 ........ */ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, /* c8..cf ........ */ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, /* d0..d7 ........ */ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, /* d8..df ........ */ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, /* e0..e7 ........ */ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, /* e8..ef ........ */ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, /* f0..f7 ........ */ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40 /* f8..ff ........ */ }; /* ** The charMap() macro maps alphabetic characters (only) into their ** lower-case ASCII equivalent. On ASCII machines, this is just ** an upper-to-lower case map. On EBCDIC machines we also need ** to adjust the encoding. The mapping is only valid for alphabetics ** which are the only characters for which this feature is used. ** ** Used by keywordhash.h */ # define charMap(X) tolower((unsigned char)X) /* ** If X is a character that can be used in an identifier then ** IdChar(X) will be true. Otherwise it is false. ** ** For ASCII, any character with the high-order bit set is ** allowed in an identifier. For 7-bit characters, ** sqlite3IsIdChar[X] must be 1. */ #define IdChar(C) ((sqlite3CtypeMap[(unsigned char)C]&0x46)!=0) /* ** Return the length (in bytes) of the token that begins at z[0]. ** Store the token type in *tokenType before returning. */ int Pg_sqlite3GetToken(const char *z, enum sqltoken *tokenType){ int i, c; switch( totoken(*z) ){ /* Switch on the character-class of the first byte ** of the token. See the comment on the CC_ defines ** above. */ case CC_SPACE: { for(i=1; sqlite3Isspace(z[i]); i++){} *tokenType = TK_SPACE; return i; } case CC_MINUS: { if( z[1]=='-' ){ for(i=2; (c=z[i])!=0 && c!='\n'; i++){} *tokenType = TK_SPACE; /* IMP: R-22934-25134 */ return i; } *tokenType = TK_MINUS; return 1; } case CC_LP: { *tokenType = TK_LP; return 1; } case CC_RP: { *tokenType = TK_RP; return 1; } case CC_SEMI: { *tokenType = TK_SEMI; return 1; } case CC_PLUS: { *tokenType = TK_PLUS; return 1; } case CC_STAR: { *tokenType = TK_STAR; return 1; } case CC_HASH: { *tokenType = TK_HASH; return 1; } case CC_SLASH: { if( z[1]!='*' || z[2]==0 ){ *tokenType = TK_SLASH; return 1; } for(i=3, c=z[2]; (c!='*' || z[i]!='/') && (c=z[i])!=0; i++){} if( c ) i++; *tokenType = TK_SPACE; /* IMP: R-22934-25134 */ return i; } case CC_PERCENT: { *tokenType = TK_REM; return 1; } case CC_EQ: { *tokenType = TK_EQ; return 1 + (z[1]=='='); } case CC_LT: { if( (c=z[1])=='=' ){ *tokenType = TK_LE; return 2; }else if( c=='>' ){ *tokenType = TK_NE; return 2; }else if( c=='<' ){ *tokenType = TK_LSHIFT; return 2; }else{ *tokenType = TK_LT; return 1; } } case CC_GT: { if( (c=z[1])=='=' ){ *tokenType = TK_GE; return 2; }else if( c=='>' ){ *tokenType = TK_RSHIFT; return 2; }else{ *tokenType = TK_GT; return 1; } } case CC_BANG: { if( z[1]!='=' ){ *tokenType = TK_ILLEGAL; return 1; }else{ *tokenType = TK_NE; return 2; } } case CC_PIPE: { if( z[1]!='|' ){ *tokenType = TK_BITOR; return 1; }else{ *tokenType = TK_CONCAT; return 2; } } case CC_COMMA: { *tokenType = TK_COMMA; return 1; } case CC_AND: { *tokenType = TK_BITAND; return 1; } case CC_TILDA: { *tokenType = TK_BITNOT; return 1; } case CC_QUOTE: { int delim = z[0]; for(i=1; (c=z[i])!=0; i++){ if( c==delim ){ if( z[i+1]==delim ){ i++; }else{ break; } } } if( c=='\'' ){ *tokenType = TK_STRING; return i+1; }else if( c!=0 ){ *tokenType = TK_ID; return i+1; }else{ *tokenType = TK_ILLEGAL; return i; } } case CC_DOT: { #ifndef SQLITE_OMIT_FLOATING_POINT if( !sqlite3Isdigit(z[1]) ) #endif { *tokenType = TK_DOT; return 1; } /* If the next character is a digit, this is a floating point ** number that begins with ".". Fall thru into the next case */ } case CC_DIGIT: { *tokenType = TK_INTEGER; #ifndef SQLITE_OMIT_HEX_INTEGER if( z[0]=='0' && (z[1]=='x' || z[1]=='X') && sqlite3Isxdigit(z[2]) ){ for(i=3; sqlite3Isxdigit(z[i]); i++){} return i; } #endif for(i=0; sqlite3Isdigit(z[i]); i++){} #ifndef SQLITE_OMIT_FLOATING_POINT if( z[i]=='.' ){ i++; while( sqlite3Isdigit(z[i]) ){ i++; } *tokenType = TK_FLOAT; } if( (z[i]=='e' || z[i]=='E') && ( sqlite3Isdigit(z[i+1]) || ((z[i+1]=='+' || z[i+1]=='-') && sqlite3Isdigit(z[i+2])) ) ){ i += 2; while( sqlite3Isdigit(z[i]) ){ i++; } *tokenType = TK_FLOAT; } #endif while( IdChar(z[i]) ){ *tokenType = TK_ILLEGAL; i++; } return i; } case CC_QUOTE2: { for(i=1, c=z[0]; c!=']' && (c=z[i])!=0; i++){} *tokenType = c==']' ? TK_ID : TK_ILLEGAL; return i; } case CC_VARNUM: { *tokenType = TK_SQLVAR; for(i=1; sqlite3Isdigit(z[i]); i++){} return i; } // BEGIN change PDS Jul 2017 case CC_DOLLAR: { // treat $NNN the same as ? because that's how PostgreSQL expects positional variables for(i=1; isdigit(z[i]); i++); if(i > 1) { // $NNN is an SQL variable *tokenType = TK_SQLVAR; return i; } // otherwise it's a dollar-quoted string (PostgreSQL special) *tokenType = TK_STRING; for(i = 1; z[i] && z[i] != '$'; i++); if(!z[i]) { *tokenType = TK_ILLEGAL; return i; } // len includes both leading and trailing $ signs int len = ++i; while(z[i]) { if(z[i] == '$') { // compare &z[i] with '$token$' if(strncmp(z, &z[i], len) == 0) break; } i++; } if(z[i]) { i += len; // skip over end token } else { *tokenType = TK_ILLEGAL; // nonterminated string is illegal } return i; } // END change PDS Jul 2017 case CC_VARALPHA: { // special case of "::" which is a cast in PostgreSQL if (z[0]==':' && z[1]==':' && z[2]!=':') { *tokenType = TK_CAST; return 2; } int n = 0; *tokenType = TK_TCLVAR; if(z[1] == '{') { // Handle ${...} i = 1; while((c=z[i])!=0 && c != '}') i++; if(c == 0) { // nonterminated {...} *tokenType = TK_ILLEGAL; // punt, let SQL error out return 1; } return i+1; } for(i=1; (c=z[i])!=0; i++){ if( IdChar(c) ){ n++; #ifndef SQLITE_OMIT_TCL_VARIABLE }else if( c=='(' && n>0 ){ do{ i++; }while( (c=z[i])!=0 && !sqlite3Isspace(c) && c!=')' ); if( c==')' ){ i++; }else{ *tokenType = TK_ILLEGAL; } break; }else if( c==':' && z[i+1]==':' ){ i++; #endif }else{ break; } } if( n==0 ) *tokenType = TK_ILLEGAL; return i; } case CC_KYWD: { for(i=1; totoken(z[i])<=CC_KYWD; i++){} if( IdChar(z[i]) ){ /* This token started out using characters that can appear in keywords, ** but z[i] is a character not allowed within keywords, so this must ** be an identifier instead */ i++; break; } *tokenType = TK_ID; return i; // was keywordCode((char*)z, i, tokenType); } case CC_X: { #ifndef SQLITE_OMIT_BLOB_LITERAL if( z[1]=='\'' ){ *tokenType = TK_BLOB; for(i=2; sqlite3Isxdigit(z[i]); i++){} if( z[i]!='\'' || i%2 ){ *tokenType = TK_ILLEGAL; while( z[i] && z[i]!='\'' ){ i++; } } if( z[i] ) i++; return i; } #endif /* If it is not a BLOB literal, then it must be an ID, since no ** SQL keywords start with the letter 'x'. Fall through */ } case CC_ID: { i = 1; break; } case CC_ILLEGAL: default: { *tokenType = TK_ILLEGAL; return 1; } } while( IdChar(z[i]) ){ i++; } *tokenType = TK_ID; return i; } extern int array_to_utf8(Tcl_Interp *interp, const char **paramValues, int *paramLengths, int nParams, const char **bufferPtr); int handle_substitutions(Tcl_Interp *interp, const char *sql, char **newSqlPtr, const char ***replacementArrayPtr, int *replacementArrayLengthPtr, const char **bufferPtr) { // Worst possible case, :a mapping to $99999 at the end of a really long string char *newSql = ckalloc(strlen(sql)*3+1); // Worst possible case? the sql is nothing but ":varname" and they're all one character names. This // will still be big enough. const char **replacementArray = (const char **)ckalloc((strlen(sql)/2) * (sizeof *replacementArray)); int *lengthArray = (int *)ckalloc((strlen(sql)/2) * sizeof (int)); const char *p; char *q; int len; enum sqltoken tk; int nextVarIndex = 0; int result = TCL_OK; p = sql; q = newSql; while(*p) { len = Pg_sqlite3GetToken(p, &tk); switch (tk) { case TK_SQLVAR: { Tcl_SetResult(interp, "Can't combine Tcl and Postgres substitutions", TCL_STATIC); result = TCL_ERROR; goto cleanup_and_exit; } case TK_TCLVAR: { char *nameBuf = ckalloc(len); int stringLength; Tcl_Obj *varObj = NULL; int i; int skip = 1; int trunc = 0; // if :{...} then skip ':{' and truncate '}' if(p[1] == '{') { skip = 2; trunc = 1; } for(i = skip; i < len; i++) nameBuf[i-skip] = p[i]; nameBuf[i-skip-trunc] = 0; varObj = Tcl_GetVar2Ex(interp, nameBuf, NULL, 0); if(varObj) { replacementArray[nextVarIndex] = Tcl_GetStringFromObj(varObj, &stringLength); lengthArray[nextVarIndex] = stringLength; } else { replacementArray[nextVarIndex] = NULL; lengthArray[nextVarIndex] = 0; } ckfree(nameBuf); p += len; sprintf(q, "$%d", nextVarIndex+1); //1 indexed while(*q) q++; nextVarIndex++; break; } case TK_ILLEGAL: default: { while(len > 0) { *q++ = *p++; len--; } break; } } } *q = 0; if(result == TCL_OK) result = array_to_utf8(interp, replacementArray, lengthArray, nextVarIndex, bufferPtr); cleanup_and_exit: if(lengthArray) ckfree(lengthArray); if(result == TCL_OK) { *newSqlPtr = newSql; *replacementArrayPtr = replacementArray; *replacementArrayLengthPtr = nextVarIndex; } else { ckfree(newSql); ckfree((char *)replacementArray); } return result; } pgtcl-2.8.0/generic/tokenize.h000066400000000000000000000013671420313073400162530ustar00rootroot00000000000000/* ** tokenize.h ** ** An tokenizer for SQL */ #include #include enum sqltoken { TK_BITAND, TK_BITNOT, TK_BITOR, TK_BLOB, TK_COMMA, TK_CONCAT, TK_DOT, TK_EQ, TK_FLOAT, TK_GE, TK_GT, TK_ID, TK_ILLEGAL, TK_INTEGER, TK_LE, TK_LP, TK_LSHIFT, TK_LT, TK_MINUS, TK_NE, TK_PLUS, TK_REM, TK_RP, TK_RSHIFT, TK_SEMI, TK_SLASH, TK_SPACE, TK_STAR, TK_STRING, TK_TCLVAR, TK_SQLVAR, TK_CAST, TK_HASH }; int Pg_sqlite3GetToken(const char *z, enum sqltoken *tokenType); int handle_substitutions(Tcl_Interp *interp, const char *sql, char **newSqlPtr, const char ***replacementArrayPtr, int *replacementArrayLengthPtr, const char **bufferPtr); #define sqlite3Isdigit(x) isdigit(x) #define sqlite3Isspace(x) isspace(x) #define sqlite3Isxdigit(x) isxdigit(x) pgtcl-2.8.0/libpgtcl.def000066400000000000000000000002771420313073400151150ustar00rootroot00000000000000;libpgtcl.def ; The LIBRARY entry must be same as the name of your DLL, the name of ; our DLL is libpgtcl.dll LIBRARY libpgtcl EXPORTS Pgtcl_Init Pgtcl_SafeInit pgtcl-2.8.0/pkgIndex.tcl.in000066400000000000000000000002611420313073400155100ustar00rootroot00000000000000package ifneeded Pgtcl @PACKAGE_VERSION@ [list load [file join $dir @PKG_LIB_FILE@]] package ifneeded sc_postgres 1.3 \ [list source [file join $dir postgres-helpers.tcl]] pgtcl-2.8.0/playpen/000077500000000000000000000000001420313073400142775ustar00rootroot00000000000000pgtcl-2.8.0/playpen/README000066400000000000000000000007501420313073400151610ustar00rootroot00000000000000 $Id$ This is the playpen directory, where we put stuff to play with, mess with, and evolve... stuff that isn't (yet) ready for prime time. datatypes - code for playing with data type oids and names dbobjects - code for creating and populating Itcl objects from Postgres pggrok - code for introspecting into postgres, finding out tables, users, etc. pghelpers - utility code for generating insert statements from arrays of key-value pairs and stuff like that pgtcl-2.8.0/playpen/datatypes/000077500000000000000000000000001420313073400162755ustar00rootroot00000000000000pgtcl-2.8.0/playpen/datatypes/README000066400000000000000000000004111420313073400171510ustar00rootroot00000000000000 $Id$ Code for fetching data types and storing them in a global so data type numbers returned by pg_result -lAttributes can be turned into something useful. table_types - will tell you all the data types for the fields within a table. demo.tcl - will demo it pgtcl-2.8.0/playpen/datatypes/demo.tcl000066400000000000000000000004731420313073400177310ustar00rootroot00000000000000# # playpen entry to mess with data types # # $Id$ # package require Pgtcl source install-types.tcl proc doit {} { set conn [pg_connect www] fetch_types $conn puts "here are the fields and data types in pg_tables (or whatever)..." puts [table_types $conn pg_tables] } if !$tcl_interactive doit pgtcl-2.8.0/playpen/datatypes/install-types.tcl000066400000000000000000000017601420313073400216150ustar00rootroot00000000000000# # playpen entry to mess with data types # # $Id$ # package require Pgtcl # # fetch_types - fetch all the datatypes from the database and store # the data types in oidTypeCache, indexed by type number # proc fetch_types {conn} { global oidTypeCache pg_select $conn "select oid,typname from pg_type" data { set oidTypeCache($data(oid)) $data(typname) } #puts "Here are all the types..." #parray oidTypeCache #puts [array get ::oidTypeCache] } # # table_types - given a connecvtion and a table name, return as a list the # names of the elements in the and each one's datatype # proc table_types {conn tableName} { set res [pg_exec $conn "select * from $tableName limit 1"] set result "" foreach triple [pg_result $res -lAttributes] { #lassign $triple name oid size set name [lindex $triple 0] set oid [lindex $triple 1] set size [lindex $triple 2] lappend result $name $::oidTypeCache($oid) } pg_result $res -clear return $result } pgtcl-2.8.0/playpen/dbobjects/000077500000000000000000000000001420313073400162365ustar00rootroot00000000000000pgtcl-2.8.0/playpen/dbobjects/README000066400000000000000000000002131420313073400171120ustar00rootroot00000000000000 DBOBJECTS $Id$ This is some very promising code that provides substantial automated integration between Itcl classes and PostgreSQL. pgtcl-2.8.0/playpen/dbobjects/dbtable.tcl000066400000000000000000000011461420313073400203410ustar00rootroot00000000000000# # base class for dbobjects # # $Id$ # package require Itcl # # db_table -- base class inherited by all postgres table classes # ::itcl::class db_table { constructor {args} { eval configure $args } method publics {} { puts [configure] } method dump {} { foreach varSet [configure] { puts "[lindex $varSet 0] -> [lindex $varSet 2]" } } method gen_insert {} { set result "insert into [$this table] ([join [$this fields] ","]) values (" foreach value [$this values] { append result "[pg_quote $value]," } return "[string range $result 0 end-1]);" } } pgtcl-2.8.0/playpen/dbobjects/demo.tcl000066400000000000000000000016401420313073400176670ustar00rootroot00000000000000# # this code generates an Itcl class based on fields found in a postgres table # # it then does a select and instantiates the table from an object # # $Id$ # # package require Pgtcl source gen_db_objects.tcl set conn [pg_connect www] if 0 { set baseClass [gen_table_base_class $conn pg_type] } else { set baseClass [gen_table_base_class $conn pp_users] } puts $baseClass eval $baseClass package require sc-sqlobj ::sqlobj::SQLtable MySqlTable if 0 { MySqlTable instantiate -selectStatement "select * from pg_type" -dataKeyFields typname -objectType DB-pg_type puts [::itcl::find objects -class DB-pg_type] } if 0 { foreach obj [::itcl::find objects -class DB-pg_type] { puts $obj puts [$obj configure] puts "" } } MySqlTable instantiate -selectStatement "select * from pp_users" -dataKeyFields "address neighborhood" -objectType DB-pp_users -namespace :: puts [::itcl::find objects -class DB-pp_users] pgtcl-2.8.0/playpen/dbobjects/gen_db_objects.tcl000066400000000000000000000023021420313073400216660ustar00rootroot00000000000000# # this code generates an Itcl class based on fields found in a postgres table # # it then does a select and instantiates the table from an object # # $Id$ # # source dbtable.tcl # # gen_table_base_class - return source code to generate an Itcl class # for the specified table, from the specified database connection # proc gen_table_base_class {conn tableName} { set result "::itcl::class DB-$tableName {\n" append result " inherit db_table\n\n" set res [pg_exec $conn "select * from $tableName limit 1"] set varList "" foreach var [lsort [pg_result $res -attributes]] { append result " public variable $var\n" lappend varList $var } pg_result $res -clear append result "\n" append result " common fields [list $varList]\n\n" append result " constructor {args} {\n eval configure \$args\n }\n\n" append result " method fields {} {\n return \$fields\n }\n\n" append result " method table {} {\n return [list $tableName]\n }\n\n" append result " method values {} {\n return \[list" foreach var $varList { append result " \$$var" } append result "]\n }\n\n" append result "}\n" } pgtcl-2.8.0/playpen/pggrok/000077500000000000000000000000001420313073400155705ustar00rootroot00000000000000pgtcl-2.8.0/playpen/pggrok/README000066400000000000000000000022031420313073400164450ustar00rootroot00000000000000 pggrok -- code to introspect the postgres database and compare database schemas Copyright (C) 2004-2005 Karl Lehenbauer freely redistributable under the Berkeley license as long as this copyright is maintained. $Id$ programs: tclsh8.4 dump.tcl oldDbString >olddb.out tclsh8.4 dump.tcl newDbString >newdb.out tclsh8.4 compare.tcl olddb.out newdb.out pggrok package: ::pggrok::tables $conn Return a list of the names of all the tables in the database. ::pggrok::schema $conn Return a list of the names of all the schema in the database ::pggrok::users $conn Return a list of the names of all the users in the database ::pggrok::views $conn Return a list of the names of all the views in the datbase ::pggrok::attributes $conn tableName arrayName codeBody Populate the array with information about each field of the table, in turn, executing the code body. ::pggrok::indices $conn tableName arrayName codeBody Populate the array with information about each index of the table, in turn, executing the code body. ::pggrok::dump $conn Dump the names of the tables, schema, users and views to stdout. pgtcl-2.8.0/playpen/pggrok/compare.tcl000066400000000000000000000063261420313073400177310ustar00rootroot00000000000000# # program to compare two files created by dump.tcl and list tables that # are in the first database but not the second, tables in the second but # not the first, and, for tables in both databases, any fields that have # been added, fields that have been removed, and information about any # fields that have changed # # $Id$ # package require Tclx set suppressColumnChanges 1 proc compare_element {tableName what listVar0 listVar1 name} { upvar ${listVar0}::${name} array0 upvar ${listVar1}::${name} array1 set somethingChanged 0 foreach varName [array names array0] { if {$::suppressColumnChanges && $varName == "attnum"} { continue } if {$array0($varName) != $array1($varName)} { puts "Changed $tableName $what \"$name\", $varName from \"$array0($varName)\" to \"$array1($varName)\"" set somethingChanged 1 } } return $somethingChanged } proc compare_table_info {tableName what namespace0 namespace1} { set listVar0 ${namespace0}::${tableName}::${what} set listVar1 ${namespace1}::${tableName}::${what} set list0 [set $listVar0] set list1 [set $listVar1] #puts "comparing $tableName $what" #puts " $listVar0" #puts " $listVar1" #puts " $list0" #puts " $list1" #puts "" lassign [intersect3 $list0 $list1] deleted inBoth added set somethingChanged 0 if {![lempty $deleted]} { puts "-- Deleted $tableName $what \"$deleted\"" set somethingChange 1 if {$what == "fields"} { foreach field $deleted { puts "alter table $tableName drop column $field;" } puts "" } } if {![lempty $added]} { puts "-- Added $tableName $what \"$added\"" set somethingChange 1 if {$what == "fields"} { foreach field $added { set formatType [set ${namespace1}::${tableName}::fields::${field}(format_type)] puts "alter table $tableName add column $field $formatType;" set null [set ${namespace1}::${tableName}::fields::${field}(attnotnull)] if {$null == "t"} { puts "alter table $tableName set not null;" } # handle default values set default [set ${namespace1}::${tableName}::fields::${field}(default)] if {$default != ""} { puts "alter table $tableName set default $default;" } } } puts "" } foreach var $inBoth { if {[compare_element $tableName $what $listVar0 $listVar1 $var]} { set somethingChanged 1 } } if $somethingChanged { puts "" } } proc compare_dumpfiles {file0 file1} { namespace eval ::file0 "source $file0" namespace eval ::file1 "source $file1" set tableComp [intersect3 $::file0::tables $::file1::tables] set inFirstOnly [lindex $tableComp 0] set inSecondOnly [lindex $tableComp 2] set inBoth [lindex $tableComp 1] if {![lempty $inFirstOnly]} { puts "in first only: $inFirstOnly" puts "" } if {![lempty $inSecondOnly]} { puts "in second only: $inSecondOnly" puts "" } foreach table $inBoth { compare_table_info $table fields ::file0 ::file1 compare_table_info $table indices ::file0 ::file1 } } proc main {argv} { if {[llength $argv] != 2} { puts stderr "usage: $::argv0 dumpfile1 dumpfile2" exit 1 } compare_dumpfiles [lindex $argv 0] [lindex $argv 1] } if !$tcl_interactive {main $argv} pgtcl-2.8.0/playpen/pggrok/demo.tcl000066400000000000000000000006651420313073400172270ustar00rootroot00000000000000# # pggrok - code to introspect the postgres database # # Copyright (C) 2004 Karl Lehenbauer # # package require Pgtcl source pggrok.tcl set conn [pg_connect www] ::pggrok::dump $conn #puts [::pggrok::table_to_oid $conn sc_hyperconnect_text] puts "table attributes sc_hyperconnect_text" ::pggrok::table_attributes $conn sc_hyperconnect_text puts "" puts "indices sc_hyperconnect_text" ::pggrok::indices $conn sc_hyperconnect_text pgtcl-2.8.0/playpen/pggrok/dump.tcl000066400000000000000000000026401420313073400172430ustar00rootroot00000000000000# # program to dump info about tables and indices for a database, into a format # that can be sourced back into tcl and will create a nested hierachy of # namespaces and arrays representing tables and fields and indexes within # tables # # $Id$ # source pggrok.tcl proc load_database_metadata {db} { set tables [::pggrok::tables $db] puts "set tables [list $tables]" puts "" foreach table $tables { puts "# TABLE $table" puts "namespace eval $table {" puts " # fields" puts " namespace eval fields {" set fields "" ::pggrok::table_attributes $db $table field { set name "$field(attname)" unset field(attname) puts " array set $name [list [array get field]]" lappend fields $name } puts " }" puts "" puts " set fields [list $fields]" puts "" puts " # indices" puts " namespace eval indices {" set indices "" ::pggrok::indices $db $table index { set name "$index(relname)" unset index(relname) puts " array set $name [list [array get index]]" lappend indices $name } puts " }" puts "" puts " set indices [list $indices]" puts "" puts "}" puts "" } } proc main {argv} { if {[llength $argv] != 1} { puts stderr "usage: $::argv0 dbstring" exit 1 } set connectString [lindex $argv 0] set db [pg_connect $connectString] load_database_metadata $db pg_disconnect $db } if !$tcl_interactive {main $argv} pgtcl-2.8.0/playpen/pggrok/pggrok.tcl000066400000000000000000000105571420313073400175750ustar00rootroot00000000000000# # pggrok - code to introspect the postgres database # # Copyright (C) 2004 Karl Lehenbauer # # package require Pgtcl package provide pggrok 1.0 namespace eval pggrok { # # tables -- return a list of the names of all the tables in the database # proc tables {conn} { set result "" pg_execute -array data $conn { select c.relname as name from pg_catalog.pg_class c left join pg_catalog.pg_user u on u.usesysid = c.relowner left join pg_catalog.pg_namespace n on n.oid = c.relnamespace where c.relkind in ('r','') and n.nspname not in('pg_catalog', 'pg_toast') and pg_catalog.pg_table_is_visible(c.oid) order by 1 } { lappend result $data(name) } return $result } # # schema -- return a list of the names of all the schema in the database # proc schema {conn} { set result "" pg_execute -array data $conn { SELECT c.relname as name FROM pg_catalog.pg_class c LEFT JOIN pg_catalog.pg_user u ON u.usesysid = c.relowner LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace WHERE c.relkind IN ('S','') AND n.nspname NOT IN ('pg_catalog', 'pg_toast') AND pg_catalog.pg_table_is_visible(c.oid) ORDER BY 1; } { lappend result $data(name) } return $result } # # users -- return a list of the names of all the users in the database # proc users {conn} { set result "" pg_execute -array data $conn { SELECT u.usename AS name FROM pg_catalog.pg_user u ORDER BY 1; } { lappend result $data(name) } return $result } # # views -- return a list of the names of all the views in the datbase # proc views {conn} { set result "" pg_execute -array data $conn { SELECT c.relname as "name" FROM pg_catalog.pg_class c LEFT JOIN pg_catalog.pg_user u ON u.usesysid = c.relowner LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace WHERE c.relkind IN ('v','') AND n.nspname NOT IN ('pg_catalog', 'pg_toast') AND pg_catalog.pg_table_is_visible(c.oid) ORDER BY 1; } { lappend result $data(name) } return $result } # # table_to_oid -- given a connection and a table name, return thew OID of that # table # proc table_to_oid {conn table} { set cmd { SELECT c.oid FROM pg_catalog.pg_class c LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace WHERE pg_catalog.pg_table_is_visible(c.oid) AND c.relname ~ '^%s$' } set result "" pg_execute -array data $conn [format $cmd $table] { lappend result $data(oid) } return $result } # # table_attributes -- given a connection and a table name, fill the # specified array name with elements containing data about each # field in turn, executing the code body on the result # proc table_attributes {conn table arrayName codeBody} { upvar $arrayName data set oid [table_to_oid $conn $table] set cmd { SELECT a.attname, pg_catalog.format_type(a.atttypid, a.atttypmod), (SELECT substring(d.adsrc for 128) FROM pg_catalog.pg_attrdef d WHERE d.adrelid = a.attrelid AND d.adnum = a.attnum AND a.atthasdef), a.attnotnull, a.attnum FROM pg_catalog.pg_attribute a WHERE a.attrelid = '%s' AND a.attnum > 0 AND NOT a.attisdropped ORDER BY a.attnum } pg_execute -array data $conn [format $cmd $oid] { set data(default) $data(?column?) unset data(?column?) uplevel $codeBody } } # # indices -- given a connection handle and a table name, fill the specified # array name with elements containing data about each index defined for the # table in turn, executing the code body on each result # # if there are no indexes, the code body will not be executed # proc indices {conn table arrayName codeBody} { upvar $arrayName data set oid [table_to_oid $conn $table] set cmd { SELECT c2.relname, i.indisprimary, i.indisunique, pg_catalog.pg_get_indexdef(i.indexrelid) FROM pg_catalog.pg_class c, pg_catalog.pg_class c2, pg_catalog.pg_index i WHERE c.oid = '%s' AND c.oid = i.indrelid AND i.indexrelid = c2.oid ORDER BY i.indisprimary DESC, i.indisunique DESC, c2.relname } pg_execute -array data $conn [format $cmd $oid] { uplevel $codeBody } } proc dump {conn} { puts "TABLES" puts [::pggrok::tables $conn] puts "" puts "SCHEMAS" puts [::pggrok::schema $conn] puts "" puts "USERS" puts [::pggrok::users $conn] puts "" puts "VIEWS" puts [::pggrok::views $conn] puts "" } } pgtcl-2.8.0/postgres-helpers.tcl000066400000000000000000000171621420313073400166500ustar00rootroot00000000000000# # Copyright (C) 1996 NeoSoft. # # Permission to use, copy, modify, and distribute this software and its # documentation for any purpose and without fee is hereby granted, provided # that the above copyright notice appear in all copies. NeoSoft makes no # representations about the suitability of this software for any purpose. # It is provided "as is" without express or implied warranty. # # # Copyright (C) 2003 Proc Place. # Berkeley copyright as above. # # Copyright (C) 2004 Superconnect, Ltd. # Berkeley copyright as above. # # Copyright (C) 2005-2019 FlightAware, LLC # Berkeley copyright as above. # # # postgres interface stuff # package provide sc_postgres 1.3 package require Tclx package require Pgtcl namespace eval sc_pg { # # foreach_tuple - given a postgres result, an array name, and a code # body, fill the array in turn with each result tuple and execute # the code body against it. # proc foreach_tuple {res arrayName body} { upvar $arrayName $arrayName set numTuples [pg_result $res -numTuples] for {set i 0} {$i < $numTuples} {incr i} { pg_result $res -tupleArray $i $arrayName uplevel 1 $body } } # # quote - make string legally quoted for postgres # (obsoleted by pg_quote... it used to do it with a bunch of regexps) # proc quote_sql {string} { return [pg_quote $string] } # # gen_sql_insert_from_array - return a sql insert statement based on the # contents of an array # proc gen_insert_from_array {tableName arrayName} { upvar $arrayName array set nameList [array names array] set result [gen_insert_front_part $tableName $nameList] foreach name $nameList { append result "[pg_quote $array($name)]," } return "[string range $result 0 end-1]);" } # # gen_sql_update_from_array - return a sql update statement based on the # contents of an array and a list of key fields # proc gen_update_from_array {tableName arrayName keyFields {nullableColumns ""}} { upvar $arrayName array set result "update $tableName set " foreach element [array names array] { # don't emit key fields into the update body if {[lsearch $keyFields $element] >= 0} { continue } append result "$element = [pg_quote $array($element)], " } foreach element $nullableColumns { if {![info exists array($element)]} { append result "$element = NULL, " } } set result "[string range $result 0 end-2] where (" foreach key $keyFields { if {![info exists array($key)]} { error "required key field '$key' not found in array '$arrayName'" } append result "$key = [pg_quote $array($key)] and " } return "[string range $result 0 end-5]);" } # # gen_insert_front_part - generate a sql insert front part # proc gen_insert_front_part {tableName nameList} { return "insert into $tableName ([join $nameList ","]) values (" } # # gen_insert_back_part - generate a sql insert back part # proc gen_insert_back_part {valueList} { set result "" foreach value $valueList { append result "[pg_quote $value]," } return "[string range $result 0 end-1]);" } # # gen_insert_simplex_front_part - generate a sql insert command based on # contents of a properly ordered list (fields same as the order in the table) # proc gen_insert_simplex_front_part {tableName} { set result "insert into $tableName values (" } # # perform_insert - generate a sql insert command based on the contents # of an array and execute it against the specified database session # proc perform_insert {session insertStatement} { set result [pg_exec $session $insertStatement] set status [pg_result $result -status] pg_result $result -clear return $status } # # gen_insert_from_lists - generate a sql insert command based on the # contents of an element list and a corresponding value list # proc gen_insert_from_lists {tableName nameList valueList} { set result [gen_insert_front_part $tableName $nameList] foreach value $valueList { append result "[pg_quote $value]," } return "[string range $result 0 end-1]);" } # # perform_insert_from_lists - generate a sql insert command based on the # contents of an element list and a corresponding value list # and execute it against the specified database session # proc perform_insert_from_lists {session tableName nameList valueList} { set result [pg_exec $session [gen_insert_from_lists $tableName $nameList $valueList]] set status [pg_result $result -status] pg_result $result -clear return $status } # # perform_insert_from_array - generate a sql insert command based on the # contents of an array and execute it against the specified database session # proc perform_insert_from_array {session tableName arrayName} { upvar $arrayName array set result [pg_exec $session [gen_insert_from_array $tableName array]] set status [pg_result $result -status] pg_result $result -clear return $status } # # perform_update_from_array - generate a sql update command based on the # contents of an array and execute it against the specified database session # proc perform_update_from_array {session tableName arrayName keyFields} { upvar $arrayName array set result [pg_exec $session [gen_update_from_array $tableName array $keyFields]] set status [pg_result $result -status] pg_result $result -clear return $status } # # clock_to_sql_time - convert a clock value (integer seconds since 1970) to a # sql standard abstime value, accurate to a day. # # Month Day [ Hour : Minute : Second ] Year [ Timezone ] # proc clock_to_sql_time {clock} { return [clock format $clock -format "%b %d %Y" -gmt 1] } # # clock_to_precise_sql_time - generate a SQL time from an integer clock # time (seconds since 1970), accurate to the second, with timezone # proc clock_to_precise_sql_time {clock} { return [clock format $clock -format "%b %d %H:%M:%S %Y GMT" -gmt 1] } # # clock_to_precise_sql_time_without_timezone - generate a SQL time from an # integer clock time (seconds since 1970), accurate to the second, without # timezone info (using local timezone) # proc clock_to_precise_sql_time_without_timezone {clock} { return [clock format $clock -format "%b %d %H:%M:%S %Y"] } # # convert a sql standard abstime value to a clock value (integer # seconds since 1970) # proc sql_time_to_clock {date} { if {$date == ""} { return 0 } set firstPeriod [string first "." $date] if {$firstPeriod >= 0} { set date [string range $date 0 [expr $firstPeriod - 1]] } return [clock scan $date -gmt 1] } # # convert a sql time with timezone to a clock value (seconds since 1970) # # ERROR - this ain't right, it discards timezone and assumes local # proc sql_time_with_timezone_to_clock {date} { if {$date == ""} { return 0 } if {![regexp {(.*:..)[^-]*(.*)} $date dummy a b]} { error "unable to convert time-with-timezone value $date" } return [clock scan "$a"] } # # res_must_succeed - a postgres result must be PGRES_COMMAND_OK and # if not throw an error, and if so, clear the postgres result. # proc res_must_succeed {res} { set status [pg_result $res -status] if {$status != "PGRES_COMMAND_OK" && $status != "PGRES_TUPLES_OK"} { set errorString [pg_result $res -error] pg_result $res -clear error $errorString } pg_result $res -clear } # # res_dont_care - any postgres result is OK, we don't care, # clear the postgres result and return. # proc res_dont_care {res} { set status [pg_result $res -status] if {$status != "PGRES_COMMAND_OK" && $status != "PGRES_TUPLES_OK"} { puts "[pg_result $res -error] (ignored)" pg_result $res -clear return 0 } pg_result $res -clear return 1 } } # vim: set ts=8 sw=4 sts=4 noet : pgtcl-2.8.0/tclconfig/000077500000000000000000000000001420313073400145775ustar00rootroot00000000000000pgtcl-2.8.0/tclconfig/ChangeLog000066400000000000000000001074771420313073400163710ustar00rootroot000000000000002013-10-08 Jan Nijtmans * unix/tcl.m4: Bug [172223e008]: Wrong filename in --disable-shared compile on MinGW 2013-10-04 Jan Nijtmans * unix/tcl.m4: stub library is no longer linked with msvcrt??.dll. 2013-10-01 Jan Nijtmans * unix/tcl.m4: Workaround for MinGW bug #2065: "gcc --shared" links with libgcc_s_dw2-1.dll when using 64-bit division in C 2013-07-04 Jan Nijtmans * unix/tcl.m4: Bug [3324676]: AC_PROG_INSTALL incompat, Bug [3606445]: Unneeded -DHAVE_NO_SEH=1 when not building on Windows 2013-07-02 Jan Nijtmans * unix/tcl.m4: Bug [32afa6e256]: dirent64 check is incorrect in tcl.m4 (thanks to Brian Griffin) 2013-06-20 Jan Nijtmans * unix/tcl.m4: Use X11/Xlib.h for checking where X11 can be found in stead of X11/XIntrinsic.h. Suggested by Pietro Cerutti. 2013-06-04 Jan Nijtmans * unix/tcl.m4: Eliminate NO_VIZ macro as current zlib uses HAVE_HIDDEN in stead. One more last-moment fix for FreeBSD by Pietro Cerutti 2013-05-19 Jan Nijtmans * unix/tcl.m4: Fix for FreeBSD, and remove support for old FreeBSD versions. Patch by Pietro Cerutti 2013-03-12 Jan Nijtmans * unix/tcl.m4: Patch by Andrew Shadura, providing better support for * three architectures they have in Debian. 2012-08-07 Stuart Cassoff * tcl.m4: Added "-DNDEBUG" to CFLAGS_DEFAULT when building with --disable-symbols. 2012-08-07 Stuart Cassoff * tcl.m4: [Bug 3555058]: Checkin [30736d63f0] broke CFLAGS_DEFAULT, LDFLAGS_DEFAULT 2012-08-07 Stuart Cassoff * tcl.m4: [Bug 3511806]: Checkin [30736d63f0] broke CFLAGS 2012-08-07 Jan Nijtmans * tcl.m4: [Bug 3511806]: Checkin [30736d63f0] broke CFLAGS 2012-07-25 Jan Nijtmans * tcl.m4: My previous commit (2012-04-03) broke the ActiveTcl build for AMD64, because of the quotes in "C://AMD64/cl.exe". It turns out that the AC_TRY_COMPILE macro cannot handle that. 2012-07-22 Stuart Cassoff * tcl.m4: Tidy: consistency, spelling, phrasing, whitespace. No functional change. 2012-04-03 Jan Nijtmans * tcl.m4: [Bug 3511806] Compiler checks too early This change allows to build the cygwin and mingw32 ports of Tcl/Tk extensions to build out-of-the-box using a native or cross-compiler, e.g. on Cygwin, Linux or Darwin. 2011-04-02 Jan Nijtmans * install-sh: Fix issue with library stripping in install-sh (backported from kevin_walzer's patch from Tcl 8.6 trunk) 2011-04-05 Andreas Kupries * tcl.m4: Applied patch by Jeff Lawson. Nicer error message when tclConfig.sh was not found. 2010-12-15 Stuart Cassoff * install-sh: Upgrade to newer install-sh and use it. * tcl.m4: 2010-12-14 Stuart Cassoff * tcl.m4: Better building on OpenBSD. 2010-12-14 Jan Nijtmans * tcl.m4: when using gcc, don't try to determine Win64 SDK 2010-12-12 Jan Nijtmans * tcl.m4: Determine correctly a cross-compiler-windres 2010-11-23 Jan Nijtmans * tcl.m4: add some cross-compile support, borrowed from Tcl 8.6 2010-09-16 Jeff Hobbs * tcl.m4: correct HP-UX LDFLAGS (only used when building big shell) 2010-09-14 Jeff Hobbs * tcl.m4: add extra if check for .manifest file generation Add notice about package name and version being built. 2010-09-09 Jan Nijtmans * tcl.m4: [FREQ #3058486] TEA_LOAD_CONFIG doesn't set all BUILD_ vars Slightly related: defining BUILD_$1 on all platforms - not only win - allows the -fvisibility feature to be used in extensions as well, at least if you compile against tcl >= 8.5. 2010-08-26 Jeff Hobbs * tcl.m4: ensure safe quoting for autoheader usage 2010-08-19 Jeff Hobbs * tcl.m4: add TEA_ADD_CLEANFILES macro to make adding cleanfiles easier, and add *.exp to CLEANFILES Windows default. (TEA_MAKE_LIB): Enhanced to check for MSVC that requires manifests and auto-embed it into proj DLL via MAKE_SHARED_LIB. Also define VC_MANIFEST_EMBED_DLL and VC_MANIFEST_EMBED_EXE that do the same magic in case it is needed for extended TEA projects. 2010-08-16 Jeff Hobbs *** Bump to TEA_VERSION 3.9 *** If upgrading from TEA_VERSION 3.8, copy over tcl.m4, change TEA_INIT to use 3.9 and reconfigure (ac-2.59+). BUILD_${PACKAGE_NAME} will be auto-defined on Windows for correct setting of TCL_STORAGE_CLASS. TEA_LOAD_CONFIG users should remove the SHLIB_LD_LIBS setting done in configure.in (LIBS will be automagically populated by TEA_LOAD_CONFIG). TEA_EXPORT_CONFIG has been added for ${pkg}Config.sh creators SHLIB_LD_FLAGS was deprecated a while ago, remove it if it is still in your Makefile.in. * tcl.m4: add /usr/lib64 to set of auto-search dirs. [Bug 1230554] Auto-define BUILD_$PACKAGE_NAME so users don't need to. This needs to correspond with $pkg.h define magic for TCL_STORAGE_CLASS. Auto-define CLEANFILES. Users can expand it. (SHLIB_LD_LIBS): define to '${LIBS}' default and change it only if necessary. Platforms not using this may simply not work or have very funky linkers. (TEA_LOAD_CONFIG): When loading config for another extension, auto-add stub libraries found with TEA_ADD_LIBS. Eases configure.in for modules like itk and img::*. (TEA_EXPORT_CONFIG): Add standardized function for exporting a ${pkg}Config.sh. See use by img::* and itcl. 2010-08-12 Jeff Hobbs *** Bump to TEA_VERSION 3.8 *** If upgrading from TEA_VERSION 3.7, copy over tcl.m4, change TEA_INIT to use 3.8 and reconfigure (ac-2.59+). No other changes should be necessary. * tcl.m4: remove more vestigial bits from removed platforms. Add back SCO_SV-3.2*. Remove use of DL_LIBS and DL_OBJS and related baggage - these are only needed by the core to support 'load'. Allow for macosx in TEA_ADD_SOURCES. Correct check for found_xincludes=no in TEA_PATH_UNIX_X. 2010-08-11 Jeff Hobbs * tcl.m4: remove the following old platform configurations: UNIX_SV*|UnixWare-5*, SunOS-4.*, SINIX*5.4*, SCO_SV-3.2*, OSF1-1.*, NEXTSTEP-*, NetBSD-1.*|FreeBSD-[[1-2]].*, MP-RAS-*, IRIX-5.*, HP-UX-*.08.*|HP-UX-*.09.*|HP-UX-*.10.*, dgux*, BSD/OS-2.1*|BSD/OS-3* (AIX): drop AIX-pre4 support and use of ldAix, use -bexpall/-brtl 2010-07-05 Jan Nijtmans * tcl.m4: [Patch #1055668] removal of exported internals from tclInt.h (EXTERN macro) 2010-04-14 Jan Nijtmans * tcl.m4 - Backport a lot of quoting fixes from tcl8.6/unix/tcl.m4 - Fix determination of CYGPATH for CYGWIN With those fixes, itcl and tdbc compile fine with CYGWIN 2010-04-06 Jan Nijtmans * install-sh [Bug 2982540] configure and install* script files should always have LF 2010-02-19 Stuart Cassoff * tcl.m4: Correct compiler/linker flags for threaded builds on OpenBSD. 2010-01-19 Jan Nijtmans * tcl.m4: Detect CYGWIN variant: win32 or unix 2010-01-03 Donal K. Fellows * unix/tcl.m4 (TEA_CONFIG_CFLAGS): [Tcl Bug 1636685]: Use the configuration for modern FreeBSD suggested by the FreeBSD porter. 2009-10-22 Jan Nijtmans * tcl.m4: [Tcl Patch #2883533] tcl.m4 support for Haiku OS 2009-04-27 Jeff Hobbs * tcl.m4 (TEA_CONFIG_CFLAGS): harden the check to add _r to CC on AIX with threads. 2009-04-10 Daniel Steffen * tcl.m4 (Darwin): check for 64-bit TkAqua. 2009-03-26 Jan Nijtmans * tclconfig/tcl.m4: Adapt LDFLAGS and LD_SEARCH_FLAGS together with SHLIB_LD definition to unbreak building on HPUX. 2009-03-20 Andreas Kupries * tclconfig/tcl.m4: Changed SHLIB_LD definition to unbreak building on HPUX. 2009-03-16 Joe English * tcl.m4(TEA_PUBLIC_TK_HEADERS): Look at ${TK_INCLUDE_SPEC} (found in tkConfig.sh) when trying to guess where tk.h might be [Patch 1960628]. 2009-03-11 Joe English * tcl.m4: Allow ${SHLIB_SUFFIX} to be overridden at configure-time [Patch 1960628]. Also fix some comment typos, and an uninitialized variable bug-waiting-to-happen. 2008-12-21 Jan Nijtmans * tcl.m4: [Bug 2073255] Tcl_GetString(NULL) doesn't crash on HP-UX (this bug report was for Tcl, but holds for TEA as well.) 2008-12-20 Daniel Steffen * tcl.m4: sync with tdbc tcl.m4 changes (SunOS-5.11): Sun cc SHLIB_LD: use LDFLAGS_DEFAULT instead of LDFLAGS 2008-12-02 Jeff Hobbs *** Bump to TEA_VERSION 3.7 *** * tcl.m4: in private header check, check for Port.h instead of Int.h to ensure all private headers are available. 2008-11-04 Daniel Steffen * tcl.m4 (Darwin): sync TEA_PRIVATE_TK_HEADERS handling of Tk.framework PrivateHeaders with TEA_PRIVATE_TCL_HEADERS. 2008-11-04 Jeff Hobbs * tcl.m4 (TEA_PATH_TCLCONFIG, TEA_PATH_TKCONFIG): exit with error when tclConfig.sh cannot be found. [Bug #1997760] (TEA_PRIVATE_TCL_HEADERS, TEA_PRIVATE_TK_HEADERS): allow for finding the headers installed in the public areas, e.g. a result of make install-private-headers. [Bug #1631922] 2008-08-12 Daniel Steffen * tcl.m4 (Darwin): link shlib with current and compatiblity version flags; look for libX11.dylib when searching for X11 libraries. 2008-06-12 Daniel Steffen * tcl.m4 (SunOS-5.11): fix 64bit amd64 support with gcc & Sun cc. 2008-03-27 Daniel Steffen * tcl.m4 (SunOS-5.1x): fix 64bit support for Sun cc. [Bug 1921166] 2008-02-01 Donal K. Fellows * tcl.m4 (TEA_CONFIG_CFLAGS): Updated to work at least in part with more modern VC versions. Currently just made the linker flags more flexible; more work may be needed. 2007-10-26 Daniel Steffen * tcl.m4 (Darwin): add support for 64-bit X11. 2007-10-23 Jeff Hobbs *** Tagged tea-3-branch to start TEA 4 development on HEAD *** 2007-09-17 Joe English * tcl.m4: use '${CC} -shared' instead of 'ld -Bshareable' to build shared libraries on current NetBSDs [Bug 1749251]. 2007-09-15 Daniel Steffen * tcl.m4: replace all direct references to compiler by ${CC} to enable CC overriding at configure & make time. (SunOS-5.1x): replace direct use of '/usr/ccs/bin/ld' in SHLIB_LD by 'cc' compiler driver. 2007-08-08 Jeff Hobbs * tcl.m4: check Ttk dir for Tk private headers (8.5). Add some comments to other bits. 2007-06-25 Jeff Hobbs * tcl.m4 (TEA_PROG_TCLSH, TEA_PROG_WISH): move where / is added. 2007-06-13 Jeff Hobbs * tcl.m4: fix --with-tkinclude alignment. [Bug 1506111] 2007-06-06 Daniel Steffen * tcl.m4 (Darwin): fix 64bit arch removal in fat 32&64bit builds. 2007-05-18 Donal K. Fellows * tcl.m4: Added quoting so that paths with spaces cause fewer problems. 2007-03-07 Daniel Steffen * tcl.m4 (Darwin): s/CFLAGS/CPPFLAGS/ in -mmacosx-version-min check. 2007-02-15 Jeff Hobbs * tcl.m4: correct private header check to search in generic subdir 2007-02-09 Jeff Hobbs *** Bump to TEA_VERSION 3.6 *** * tcl.m4: correct -d to -f (TEA_CONFIG_CFLAGS): SHLIB_SUFFIX is .so on HP ia64 [Bug 1615058] 2007-02-08 Jeff Hobbs * tcl.m4 (TEA_PRIVATE_TCL_HEADERS, TEA_PRIVATE_TK_HEADERS): check that the dirs actually have private headers. [Bug 1631922] 2007-02-04 Daniel Steffen * tcl.m4: add caching to -pipe check. 2007-01-25 Daniel Steffen * tcl.m4: integrate CPPFLAGS into CFLAGS as late as possible and move (rather than duplicate) -isysroot flags from CFLAGS to CPPFLAGS to avoid errors about multiple -isysroot flags from some older gcc builds. 2006-01-19 Daniel Steffen * tcl.m4: ensure CPPFLAGS env var is used when set. [Bug 1586861] (Darwin): add -isysroot and -mmacosx-version-min flags to CPPFLAGS when present in CFLAGS to avoid discrepancies between what headers configure sees during preprocessing tests and compiling tests. 2006-12-19 Daniel Steffen * tcl.m4 (Darwin): --enable-64bit: verify linking with 64bit -arch flag succeeds before enabling 64bit build. 2006-12-16 Daniel Steffen * tcl.m4 (Linux): fix previous change to use makefile variable LDFLAGS_DEFAULT instead of LDFLAGS in SHLIB_LD, to ensure linker flags in sampleextension Makefile are picked up. 2006-11-26 Daniel Steffen * tcl.m4 (Linux): --enable-64bit support. [Patch 1597389], [Bug 1230558] 2006-08-18 Daniel Steffen * tcl.m4 (Darwin): add support for --enable-64bit on x86_64, for universal builds including x86_64 and for use of -mmacosx-version-min instead of MACOSX_DEPLOYMENT_TARGET. For Tk extensions, remove 64-bit arch flags from CFLAGS like in the Tk configure, as neither TkAqua nor TkX11 can be built for 64-bit at present. 2006-03-28 Jeff Hobbs * tcl.m4: []-quote AC_DEFUN functions. (TEA_PATH_TKCONFIG): Fixed Windows-specific check for tkConfig.sh. (TEA_MAKE_LIB): Prepend 'lib' for Windows-gcc configs. 2006-03-07 Joe English * tcl.m4: Set SHLIB_LD_FLAGS='${LIBS}' on NetBSD, as per the other *BSD variants [Bug 1334613]. 2006-01-25 Jeff Hobbs *** Bump to TEA version 3.5 *** * tcl.m4: keep LD_SEARCH_FLAGS and CC_SEARCH_FLAGS synchronous with core tcl.m4 meaning. 2006-01-24 Daniel Steffen * tcl.m4 (Darwin): use makefile variable LDFLAGS_DEFAULT instead of LDFLAGS in SHLIB_LD, to ensure linker flags in sampleextension Makefile are picked up. [Bug 1403343] 2006-01-23 Jeff Hobbs * tcl.m4: add C:/Tcl/lib and C:/Progra~1/Tcl/lib dirs to check for *Config.sh on Windows. [Bug 1407544] 2006-01-23 Daniel Steffen * tcl.m4 (Darwin): for Tk extensions, remove -arch ppc64 from CFLAGS like in the Tk configure, as neither TkAqua nor TkX11 can be built for 64bit at present (no 64bit GUI libraries). 2006-01-22 Jeff Hobbs * tcl.m4: restore system=windows on Windows. Remove error if 'ar' isn't found (it may not be on Windows). Do not add -lxnet or define _XOPEN_SOURCE on HP-UX by default. Ensure the C|LDFLAGS_DEFAULT gets the fully sub'd value at configure time. 2006-01-10 Daniel Steffen * tcl.m4: add caching, use AC_CACHE_CHECK instead of AC_CACHE_VAL where possible, consistent message quoting, sync relevant tcl/unix/tcl.m4 HEAD changes and gratuitous formatting differences (notably sunc removal of support for for ancient BSD's, IRIX 4, RISCos and Ultrix by kennykb), Darwin improvements to TEA_LOAD_*CONFIG to make linking work against Tcl/Tk frameworks installed in arbitrary location, change TEA_PROG_* search order (look in *_BIN_DIR parents before *_PREFIX). 2006-01-05 Jeff Hobbs * tcl.m4: add dkf's system config refactor 2006-01-04 Jeff Hobbs * tcl.m4: remove extraneous ' that causes bash 3.1 to choke 2005-12-19 Joe English * tcl.m4 (TEA_PATH_TCLCONFIG &c): Look for tclConfig.sh &c in ${libdir}, where they are installed by default [Patch #1377407]. 2005-12-05 Don Porter * tcl.m4 (TEA_PUBLIC_*_HEADERS): Better support for finding header files for uninstalled Tcl and Tk. 2005-12-02 Jeff Hobbs * tcl.m4: correctly bump TEA_VERSION var to 3.4 2005-12-01 Daniel Steffen * unix/tcl.m4 (Darwin): fixed error when MACOSX_DEPLOYMENT_TARGET unset 2005-11-29 Jeff Hobbs * tcl.m4: *** Bump to TEA version 3.4 *** Add Windows x64 build support. Remove TEA_PATH_NOSPACE and handle the problem with ""s where necessary - the macro relied on TCLSH_PROG which didn't work for cross-compiles. 2005-11-27 Daniel Steffen * tcl.m4 (Darwin): add 64bit support, add CFLAGS to SHLIB_LD to support passing -isysroot in env(CFLAGS) to configure (flag can't be present twice, so can't be in both CFLAGS and LDFLAGS during configure), don't use -prebind when deploying on 10.4. (TEA_ENABLE_LANGINFO, TEA_TIME_HANDLER): add/fix caching. 2005-10-30 Daniel Steffen * tcl.m4: fixed two tests for TEA_WINDOWINGSYSTEM = "aqua" that should have been for `uname -s` = "Darwin" instead; added some missing quoting. (TEA_PROG_TCLSH, TEA_PROG_WISH): fix incorrect assumption that install location of tclConfig.sh/tkConfig.sh allows to determine the tclsh/wish install dir via ../bin. Indeed tcl/tk can be configured with arbitrary --libdir and --bindir (independent of prefix) and such a configuration is in fact standard with Darwin framework builds. At least now also check ${TCL_PREFIX}/bin resp. ${TK_PREFIX}/bin for presence of tclsh resp. wish (if tcl/tk have been configured with arbitrary --bindir, this will still not find them, for a general solution *Config.sh would need to contain the values of bindir/libdir/includedir passed to configure). 2005-10-07 Jeff Hobbs * tcl.m4: Fix Solaris 5.10 check and Solaris AMD64 64-bit builds. 2005-10-04 Jeff Hobbs * tcl.m4 (TEA_PRIVATE_TCL_HEADERS): add / to finish sed macro (TEA_ENABLE_THREADS): don't check for pthread_attr_setstacksize func 2005-09-13 Jeff Hobbs * tcl.m4: *** Update to TEA version 3.3 *** define TEA_WINDOWINGSYSTEM in TEA_LOAD_TKCONFIG. Make --enable-threads the default (users can --disable-threads). Improve AIX ${CC}_r fix to better check existing ${CC} value. Do the appropriate evals to not require the *TOP_DIR_NATIVE vars be set for extensions that use private headers. Make aqua check for Xlib compat headers the same as win32. 2005-07-26 Mo DeJong * tcl.m4 (TEA_PROG_TCLSH, TEA_BUILD_TCLSH, TEA_PROG_WISH, TEA_BUILD_WISH): Remove TEA_BUILD_TCLSH and TEA_BUILD_WISH because of complaints that it broke the build when only an installed version of Tcl was available at extension build time. The TEA_PROG_TCLSH and TEA_PROG_WISH macros will no longer search the path at all. The build tclsh or installed tclsh shell will now be found by TEA_PROG_TCLSH. 2005-07-24 Mo DeJong * tcl.m4 (TEA_PROG_TCLSH, TEA_BUILD_TCLSH, TEA_PROG_WISH, TEA_BUILD_WISH): Split confused search for tclsh on PATH and build and install locations into two macros. TEA_PROG_TCLSH and TEA_PROG_WISH search the system PATH for an installed tclsh or wish. The TEA_BUILD_TCLSH and TEA_BUILD_WISH macros determine the name of tclsh or wish in the Tcl or Tk build directory even if tclsh or wish has not yet been built. [Tcl bug 1160114] [Tcl patch 1244153] 2005-06-23 Daniel Steffen * tcl.m4 (TEA_PRIVATE_TK_HEADERS): add ${TK_SRC_DIR}/macosx to TK_INCLUDES when building against TkAqua. * tcl.m4 (TEA_PATH_X): fixed missing comma in AC_DEFINE * tcl.m4: changes to better support framework builds of Tcl and Tk out of the box: search framework install locations for *Config.sh, and if in presence of a framework build, use the framework's Headers and PrivateHeaders directories for public and private includes. [FR 947735] 2005-06-18 Daniel Steffen * tcl.m4 (Darwin): add -headerpad_max_install_names to LDFLAGS to ensure we can always relocate binaries with install_name_tool. 2005-06-04 Daniel Steffen * tcl.m4 (TEA_PATH_X): for TEA_WINDOWINGSYSTEM == aqua, check if xlib compat headers are available in tkheaders location, otherwise add xlib sourcedir to TK_XINCLUDES. 2005-04-25 Daniel Steffen * tcl.m4: added AC_DEFINE* descriptions (from core tcl.m4) to allow use with autoheader. (Darwin): added configure checks for recently added linker flags -single_module and -search_paths_first to allow building with older tools (and on Mac OS X 10.1), use -single_module in SHLIB_LD. (TEA_MISSING_POSIX_HEADERS): added caching of dirent.h check. (TEA_BUGGY_STRTOD): added caching (sync with core tcl.m4). 2005-03-24 Jeff Hobbs * tcl.m4 (TEA_TCL_64BIT_FLAGS): use Tcl header defaults for wide int type only on Windows when __int64 is detected as valid. 2005-03-24 Don Porter * README.txt: Update reference to "SC_* macros" to "TEA_* macros". * tcl.m4: Incorporated recent improvements in SC_PATH_TCLCONFIG and SC_PATH_TKCONFIG into TEA_PATH_TCLCONFIG and TEA_PATH_TKCONFIG. Corrected search path in TEA_PATH_CONFIG and added AC_SUBST($1_BIN_DIR) to TEA_LOAD_CONFIG so that packages that load the configuration of another package can know where they loaded it from. 2005-03-18 Jeff Hobbs * tcl.m4 (TEA_CONFIG_CFLAGS): correct 2005-03-17 change to have variant LD_SEARCH_FLAGS for gcc and cc builds. * tcl.m4 (TEA_PROG_TCLSH, TEA_PROG_WISH): correct x-compile check. 2005-03-17 Jeff Hobbs * tcl.m4: Correct gcc build and HP-UX-11. 2005-02-08 Jeff Hobbs * tcl.m4 (TEA_ADD_LIBS): don't touch lib args starting with -. (TEA_CONFIG_CFLAGS): only define _DLL for CE in shared build. (TEA_MAKE_LIB): set RANLIB* to : on Windows (it's not needed). 2005-02-01 Jeff Hobbs * tcl.m4: redo of 2005-01-27 changes to correctly handle paths with spaces. Win/CE and Win/64 builds now require a prebuilt tclsh to handle conversion to short pathnames. This is done in the new TEA_PATH_NOSPACE macro. For Win/CE|64, make CC just the compiler and move the necessary includes to CFLAGS. (TEA_CONFIG_CFLAGS): Add Solaris 64-bit gcc build support. (TEA_PROG_TCLSH, TEA_PROG_WISH): Allow TCLSH_PROG and WISH_PROG to be set in the env and prevent resetting. (TEA_ADD_LIBS): On Windows using GCC (mingw), convert foo.lib args to -lfoo, for use with mingw. *** POTENTIAL INCOMPATABILITY *** (TEA_CONFIG_CFLAGS): Fix AIX gcc builds to work out-of-box. Bumped TEA to 3.2. 2005-01-27 Jeff Hobbs * tcl.m4: remove cygpath calls to support msys. Update base CE build assumption to "420,ARMV4,ARM,Pocket PC 2003". Make STLIB_LD use $LINKBIN -lib. 2005-01-25 Daniel Steffen * tcl.m4 (Darwin): fixed bug with static build linking to dynamic library in /usr/lib etc instead of linking to static library earlier in search path. [Tcl Bug 956908] Removed obsolete references to Rhapsody. 2004-12-29 Jeff Hobbs * tcl.m4: Updates for VC7 compatibility, fixing CFLAGS and LDFLAGS options, using better default -O levels. [Bug 1092952, 1091967] 2004-12-29 Joe English * tcl.m4: Do not use ${DBGX} suffix when building shared libraries [patch #1081595, TIP #34] 2004-09-07 Jeff Hobbs * tcl.m4 (TEA_CONFIG_CFLAGS): support eVC4 Win/CE builds 2004-08-10 Jeff Hobbs * tcl.m4 (TEA_INIT, TEA_PREFIX): update handling of exec_prefix to work around subdir configures since autoconf only propagates the prefix (not exec_prefix). 2004-07-23 Daniel Steffen * tcl.m4 (TEA_CONFIG_CFLAGS): Darwin section: brought inline with Tcl 8.5 HEAD config, removed core specific & obsolete settings. 2004-07-22 Jeff Hobbs * tcl.m4 (TEA_PATH_X): check in TK_DEFS for MAC_OSX_TK to see if we are compiling on Aqua. Add TEA_WINDOWINGSYSTEM var that reflects 'tk windowingsystem' value. 2004-07-16 Jeff Hobbs * tcl.m4 (TEA_ENABLE_THREADS): force a threaded build when building against a threaded core. (CFLAGS_WARNING): Remove -Wconversion for gcc builds (TEA_CONFIG_CFLAGS): Reorder configure.in for better 64-bit build configuration, replacing EXTRA_CFLAGS with CFLAGS. [Bug #874058] Update to latest Tcl 8.5 head config settings. Call this TEA version 3.1. 2004-04-29 Jeff Hobbs * tcl.m4 (TEA_TCL_64BIT_FLAGS): replace AC_TRY_RUN test with AC_TRY_COMPILE for the long vs. long long check. (kenny) 2004-04-26 Jeff Hobbs * tcl.m4 (TEA_TCL_64BIT_FLAGS): update against core tcl.m4 to define TCL_WIDE_INT_IS_LONG if 'using long'. 2004-03-19 Jeff Hobbs * tcl.m4: correct Windows builds getting LDFLAGS info in MAKE_LIB 2004-02-11 Jeff Hobbs * tcl.m4: correct TCL_INCLUDES for private headers on Windows - it doesn't need the eval. 2004-02-10 Jeff Hobbs * tcl.m4: don't require TK_INCLUDES and TCL_INCLUDES to have the DIR_NATIVE vars defined when using private headers on unix. Allow $... to TEA_ADD_SOURCES for constructs like TEA_ADD_SOURCES([\$(WIN_OBJECTS)]), that allow the developer to place more in the Makefile.in. tkUnixPort.h checks for HAVE_LIMITS_H, so do both HAVE and CHECK on limits.h 2003-12-10 Jeff Hobbs * Makefile.in: added TEA_ADD_LIBS, TEA_ADD_INCLUDES and * configure: TEA_ADD_CFLAGS to configurable parameters with * configure.in: PKG_* equivs in the Makefile. This allows the * tclconfig/tcl.m4: user to worry less about actual magic VAR names. Corrected Makefile.in to note that TEA_ADD_TCL_SOURCES requires exact file names. 2003-12-09 Jeff Hobbs * tcl.m4: updated OpenBSD support based on [Patch #775246] (cassoff) 2003-12-05 Jeff Hobbs * configure: * configure.in: * Makefile.in (VPATH): readd $(srcdir) to front of VPATH as the first part of VPATH can get chopped off. Change .c.$(OBJEXT) rule to .c.@OBJEXT@ to support more makes. * tclconfig/tcl.m4: add TEA_ADD_STUB_SOURCES to support libstub generation and TEA_ADD_TCL_SOURCES to replace RUNTIME_SOURCES as the way the user specifies library files. 2003-12-03 Jeff Hobbs * configure: Update of TEA spec to (hopefully) simplify * configure.in: some aspects of TEA by making use of more * Makefile.in: AC 2.5x features. Use PACKAGE_NAME (instead * generic/tclsample.c: of PACKAGE) and PACKAGE_VERSION (instead of * tclconfig/tcl.m4: VERSION) arguments to AC_INIT as the TEA package name and version. Provide a version argument to TEA_INIT - starting with 3.0. Drop all use of interior shell substs that older makefiles didn't like. Use PKG_* naming convention instead. Move specification of source files and public headers into configure.in with TEA_ADD_SOURCES and TEA_ADD_HEADERS. These will be munged during ./configure into the right obj file names (no $(SOURCES:.c=.obj) needed). There is almost nothing that should be touched in Makefile.in now for the developer. May want to add a TEA_ADD_TCL_SOURCES for the RUNTIME_SOURCES that remains. Use SHLID_LD_FLAGS (instead of SHLID_LDFLAGS) as Tcl does. Only specify the user requested LDFLAGS/CFLAGS in the Makefile, don't mention the _OPTIMIZE/_DEBUG variants. 2003-10-15 Jeff Hobbs * tcl.m4: create a TEA_SETUP_COMPILER_CC the precedes the TEA_SETUP_COMPILER macro. They are split so the check for CC occurs before any use of CC. Also add AC_PROG_CPP to the compiler checks. 2003-10-06 Jeff Hobbs * tcl.m4: Updated for autoconf 2.5x prereq. Where TCL_WIDE_INT_TYPE would be __int64, defer to the code checks in tcl.h, which also handles TCL_LL_MODIFIER* properly. 2003-04-22 Jeff Hobbs * tcl.m4: correct default setting of ARCH for WinCE builds. Correct \ escaping for CE sed macros. 2003-04-10 Jeff Hobbs * tcl.m4: replace $(syscal) construct with older `syscall` for systems where sh != bash. 2003-04-09 Jeff Hobbs * tcl.m4 (TEA_WITH_CELIB): add --enable-wince and --with-celib options for Windows/CE compilation support. Requires the Microsoft eMbedded SDK and Keuchel's celib emulation layer. 2003-02-18 Jeff Hobbs * tcl.m4 (TEA_ENABLE_THREADS): Make sure -lpthread gets passed on the link line when checking for the pthread_attr_setstacksize symbol. (dejong) * tcl.m4 (TEA_SETUP_COMPILER): added default calls to TEA_TCL_EARLY_FLAGS, TEA_TCL_64BIT_FLAGS, TEA_MISSING_POSIX_HEADERS and TEA_BUGGY_STRTOD. 2003-02-14 Jeff Hobbs * tcl.m4: correct HP-UX ia64 --enable-64bit build flags 2003-01-29 Jeff Hobbs * tcl.m4: check $prefix/lib as well as $exec_prefix/lib when looking for tcl|tkConfig.sh, as this check is done before we would set exec_prefix when the user does not define it. 2003-01-21 Mo DeJong * tcl.m4 (TEA_CONFIG_CFLAGS): Fix build support for mingw, the previous implementation would use VC++ when compiling with mingw gcc. Don't pass -fPIC since gcc always compiles pic code under win32. Change some hard coded cases of gcc to ${CC}. 2002-10-15 Jeff Hobbs * tcl.m4: move the CFLAGS definition from TEA_ENABLE_SHARED to TEA_MAKE_LIB because setting too early confuses other AC_* macros. Correct the HP-11 SHLIB_LD_LIBS setting. * tcl.m4: add the CFLAGS definition into TEA_ENABLE_SHARED and make it pick up the env CFLAGS at configure time. 2002-10-09 Jeff Hobbs * tcl.m4: add --enable-symbols=mem option to enable TCL_MEM_DEBUG. Improved AIX 64-bit build support, allow it on AIX-4 as well. Enable 64-bit HP-11 compilation with gcc. Enable 64-bit IRIX64-6 cc build support. Correct FreeBSD thread library linkage. Add OSF1 static build support. Improve SunOS-5 shared build SHLIB_LD macro. 2002-07-20 Zoran Vasiljevic * tcl.m4: Added MINGW32 to list of systems checked for Windows build. Also, fixes some indentation issues with "--with-XXX" options. 2002-04-23 Jeff Hobbs * tcl.m4 (TEA_ENABLE_THREADS): added USE_THREAD_ALLOC define to use new threaded allocatory by default on Unix for Tcl 8.4. (TEA_CONFIG_CFLAGS): corrected LD_SEARCH_FLAGS for FreeBSD-3+. 2002-04-22 Jeff Hobbs * tcl.m4 (TEA_SETUP_COMPILER): removed call to AC_CYGWIN so that we can use autoconf 2.5x as well as 2.13. This prevents us from being able to warn against the use of cygwin gcc at configure time, but allows autoconf 2.5x, which is what is shipped with most newer systems. 2002-04-11 Jeff Hobbs * tcl.m4: Enabled COFF as well as CV style debug info with --enable-symbols to allow Dr. Watson users to see function info. More info on debugging levels can be obtained at: http://msdn.microsoft.com/library/en-us/dnvc60/html/gendepdebug.asp 2002-04-03 Jeff Hobbs * tcl.m4: change all SC_* macros to TEA_*. The SC_ was for Scriptics, which is no more. TEA represents a better, independent prefix that won't need changing. Added preliminary mingw gcc support. [Patch #538772] Added TEA_PREFIX macro that handles defaulting the prefix and exec_prefix vars to those used by Tcl if none were specified. Added TEA_SETUP_COMPILER macro that encompasses the AC_PROG_CC check and several other basic AC_PROG checks needed for making executables. This greatly simplifies user's configure.in files. Collapsed AIX-5 defines into AIX-* with extra checks for doing the ELF stuff on AIX-5-ia64. Updated TEA_ENABLE_THREADS to take an optional arg to allow switching it on by default (for Thread) and add sanity checking to warn the user if configuring threads incompatibly. 2002-03-29 Jeff Hobbs * tcl.m4: made sure that SHLIB_LDFLAGS was set to LDFLAGS_DEFAULT. Removed --enable-64bit support for AIX-4 because it wasn't correct. Added -MT or -MD Windows linker switches to properly support symbols-enabled builds. 2002-03-28 Jeff Hobbs * tcl.m4: called AC_MSG_ERROR when SC_TEA_INIT wasn't called first instead of calling it as that inlines it each time in shell code. Changed Windows CFLAGS_OPTIMIZE to use -O2 instead of -Oti. Noted TCL_LIB_VERSIONS_OK=nodots for Windows builds. A few changes to support itcl (and perhaps others): Added support for making your own stub libraries to SC_MAKE_LIB. New SC_PATH_CONFIG and SC_LOAD_CONFIG that take a package name arg and find that ${pkg}Config.sh file. itk uses this for itcl. 2002-03-27 Jeff Hobbs * tcl.m4: made SC_LOAD_TKCONFIG recognize when working with a Tk build dir setup. Added EXTRA_CFLAGS and SHLIB_LD_LIBS substs to SC_CONFIG_CFLAGS. Added XLIBSW onto LIBS when it is defined. Remove TCL_LIBS from MAKE_LIB and correctly use SHLIB_LD_LIBS instead to not rely as much on tclConfig.sh cached info. Add TK_BIN_DIR to paths to find wish in SC_PROG_WISH. These move towards making TEA much more independent of *Config.sh. 2002-03-19 Jeff Hobbs * tcl.m4: corrected forgotten (UN)SHARED_LIB_SUFFIX and SHLIB_SUFFIX defines for Win. (SC_PATH_X): made this only do the check on unix platforms. 2002-03-12 Jeff Hobbs * README.txt: updated to reflect fewer files 2002-03-06 Jeff Hobbs * config.guess (removed): * config.sub (removed): removed unnecessary files * installFile.tcl (removed): * mkinstalldirs (removed): these aren't really necessary for making TEA work * tcl.m4 (SC_PUBLIC_TCL_HEADERS, SC_PUBLIC_TK_HEADERS): don't check /usr(/local)/include for includes on Windows when not using gcc 2002-03-05 Jeff Hobbs * tcl.m4: added warnings on Windows, removed RELPATH define and added TCL_LIBS to MAKE_LIB macro. This import represents 2.0.0, or a new start at attempting to make TEA much easier for C extension developers. **** moved from tclpro project to core tcl project, **** **** renamed to 'tclconfig' **** 2001-03-15 Karl Lehenbauer * installFile.tcl: Added updating of the modification time of the target file whether we overwrote it or decided that it hadn't changed. This was necessary for us to be able to determine whether or not a module install touched the file. 2001-03-08 Karl Lehenbauer * installFile.tcl: Added support for converting new-style (1.1+) Cygnus drive paths to Tcl-style. 2001-01-15 * tcl.m4: Added FreeBSD clause. 2001-01-03 * tcl.m4: Fixed typo in SC_LIB_SPEC where it is checking for exec-prefix. 2000-12-01 * tcl.m4: Concatenated most of the Ajuba acsite.m4 file so we don't need to modify the autoconf installation. * config.guess: * config.sub: * installFile.tcl: Added files from the itcl config subdirectory, which should go away. 2000-7-29 * Fixed the use of TCL_SRC_DIR and TK_SRC_DIR within TCL_PRIVATE_INCLUDES and TK_PRIVATE_INCLUDES to match their recent change from $(srcdir) to $(srcdir)/.. pgtcl-2.8.0/tclconfig/README.txt000066400000000000000000000014541420313073400163010ustar00rootroot00000000000000These files comprise the basic building blocks for a Tcl Extension Architecture (TEA) extension. For more information on TEA see: http://www.tcl.tk/doc/tea/ This package is part of the Tcl project at SourceForge, and latest sources should be available there: http://tcl.sourceforge.net/ This package is a freely available open source package. You can do virtually anything you like with it, such as modifying it, redistributing it, and selling it either in whole or in part. CONTENTS ======== The following is a short description of the files you will find in the sample extension. README.txt This file install-sh Program used for copying binaries and script files to their install locations. tcl.m4 Collection of Tcl autoconf macros. Included by a package's aclocal.m4 to define TEA_* macros. pgtcl-2.8.0/tclconfig/install-sh000077500000000000000000000330541420313073400166100ustar00rootroot00000000000000#!/bin/sh # install - install a program, script, or datafile scriptversion=2011-04-20.01; # 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. -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;; -S) stripcmd="$stripprog $2" shift;; -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 do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 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: pgtcl-2.8.0/tclconfig/tcl.m4000066400000000000000000004065401420313073400156340ustar00rootroot00000000000000# tcl.m4 -- # # This file provides a set of autoconf macros to help TEA-enable # a Tcl extension. # # Copyright (c) 1999-2000 Ajuba Solutions. # Copyright (c) 2002-2005 ActiveState Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. AC_PREREQ(2.57) dnl TEA extensions pass us the version of TEA they think they dnl are compatible with (must be set in TEA_INIT below) dnl TEA_VERSION="3.9" # Possible values for key variables defined: # # TEA_WINDOWINGSYSTEM - win32 aqua x11 (mirrors 'tk windowingsystem') # TEA_PLATFORM - windows unix # #------------------------------------------------------------------------ # TEA_PATH_TCLCONFIG -- # # Locate the tclConfig.sh file and perform a sanity check on # the Tcl compile flags # # Arguments: # none # # Results: # # Adds the following arguments to configure: # --with-tcl=... # # Defines the following vars: # TCL_BIN_DIR Full path to the directory containing # the tclConfig.sh file #------------------------------------------------------------------------ AC_DEFUN([TEA_PATH_TCLCONFIG], [ dnl TEA specific: Make sure we are initialized AC_REQUIRE([TEA_INIT]) # # Ok, lets find the tcl configuration # First, look for one uninstalled. # the alternative search directory is invoked by --with-tcl # if test x"${no_tcl}" = x ; then # we reset no_tcl in case something fails here no_tcl=true AC_ARG_WITH(tcl, AC_HELP_STRING([--with-tcl], [directory containing tcl configuration (tclConfig.sh)]), with_tclconfig="${withval}") AC_MSG_CHECKING([for Tcl configuration]) AC_CACHE_VAL(ac_cv_c_tclconfig,[ # First check to see if --with-tcl was specified. if test x"${with_tclconfig}" != x ; then case "${with_tclconfig}" in */tclConfig.sh ) if test -f "${with_tclconfig}"; then AC_MSG_WARN([--with-tcl argument should refer to directory containing tclConfig.sh, not to tclConfig.sh itself]) with_tclconfig="`echo "${with_tclconfig}" | sed 's!/tclConfig\.sh$!!'`" fi ;; esac if test -f "${with_tclconfig}/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd "${with_tclconfig}"; pwd)`" else AC_MSG_ERROR([${with_tclconfig} directory doesn't contain tclConfig.sh]) fi fi # then check for a private Tcl installation if test x"${ac_cv_c_tclconfig}" = x ; then for i in \ ../tcl \ `ls -dr ../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ `ls -dr ../tcl[[8-9]].[[0-9]] 2>/dev/null` \ `ls -dr ../tcl[[8-9]].[[0-9]]* 2>/dev/null` \ ../../tcl \ `ls -dr ../../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ `ls -dr ../../tcl[[8-9]].[[0-9]] 2>/dev/null` \ `ls -dr ../../tcl[[8-9]].[[0-9]]* 2>/dev/null` \ ../../../tcl \ `ls -dr ../../../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ `ls -dr ../../../tcl[[8-9]].[[0-9]] 2>/dev/null` \ `ls -dr ../../../tcl[[8-9]].[[0-9]]* 2>/dev/null` ; do if test "${TEA_PLATFORM}" = "windows" \ -a -f "$i/win/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i/win; pwd)`" break fi if test -f "$i/unix/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i/unix; pwd)`" break fi done fi # on Darwin, check in Framework installation locations if test "`uname -s`" = "Darwin" -a x"${ac_cv_c_tclconfig}" = x ; then for i in `ls -d ~/Library/Frameworks 2>/dev/null` \ `ls -d /Library/Frameworks 2>/dev/null` \ `ls -d /Network/Library/Frameworks 2>/dev/null` \ `ls -d /System/Library/Frameworks 2>/dev/null` \ ; do if test -f "$i/Tcl.framework/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i/Tcl.framework; pwd)`" break fi done fi # TEA specific: on Windows, check in common installation locations if test "${TEA_PLATFORM}" = "windows" \ -a x"${ac_cv_c_tclconfig}" = x ; then for i in `ls -d C:/Tcl/lib 2>/dev/null` \ `ls -d C:/Progra~1/Tcl/lib 2>/dev/null` \ ; do if test -f "$i/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i; pwd)`" break fi done fi # check in a few common install locations if test x"${ac_cv_c_tclconfig}" = x ; then for i in `ls -d ${libdir} 2>/dev/null` \ `ls -d ${exec_prefix}/lib 2>/dev/null` \ `ls -d ${prefix}/lib 2>/dev/null` \ `ls -d /usr/local/lib 2>/dev/null` \ `ls -d /usr/contrib/lib 2>/dev/null` \ `ls -d /usr/lib 2>/dev/null` \ `ls -d /usr/lib64 2>/dev/null` \ `ls -d /usr/lib/tcl8.6 2>/dev/null` \ `ls -d /usr/lib/tcl8.5 2>/dev/null` \ ; do if test -f "$i/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i; pwd)`" break fi done fi # check in a few other private locations if test x"${ac_cv_c_tclconfig}" = x ; then for i in \ ${srcdir}/../tcl \ `ls -dr ${srcdir}/../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ `ls -dr ${srcdir}/../tcl[[8-9]].[[0-9]] 2>/dev/null` \ `ls -dr ${srcdir}/../tcl[[8-9]].[[0-9]]* 2>/dev/null` ; do if test "${TEA_PLATFORM}" = "windows" \ -a -f "$i/win/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i/win; pwd)`" break fi if test -f "$i/unix/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i/unix; pwd)`" break fi done fi ]) if test x"${ac_cv_c_tclconfig}" = x ; then TCL_BIN_DIR="# no Tcl configs found" AC_MSG_ERROR([Can't find Tcl configuration definitions. Use --with-tcl to specify a directory containing tclConfig.sh]) else no_tcl= TCL_BIN_DIR="${ac_cv_c_tclconfig}" AC_MSG_RESULT([found ${TCL_BIN_DIR}/tclConfig.sh]) fi fi ]) #------------------------------------------------------------------------ # TEA_PATH_TKCONFIG -- # # Locate the tkConfig.sh file # # Arguments: # none # # Results: # # Adds the following arguments to configure: # --with-tk=... # # Defines the following vars: # TK_BIN_DIR Full path to the directory containing # the tkConfig.sh file #------------------------------------------------------------------------ AC_DEFUN([TEA_PATH_TKCONFIG], [ # # Ok, lets find the tk configuration # First, look for one uninstalled. # the alternative search directory is invoked by --with-tk # if test x"${no_tk}" = x ; then # we reset no_tk in case something fails here no_tk=true AC_ARG_WITH(tk, AC_HELP_STRING([--with-tk], [directory containing tk configuration (tkConfig.sh)]), with_tkconfig="${withval}") AC_MSG_CHECKING([for Tk configuration]) AC_CACHE_VAL(ac_cv_c_tkconfig,[ # First check to see if --with-tkconfig was specified. if test x"${with_tkconfig}" != x ; then case "${with_tkconfig}" in */tkConfig.sh ) if test -f "${with_tkconfig}"; then AC_MSG_WARN([--with-tk argument should refer to directory containing tkConfig.sh, not to tkConfig.sh itself]) with_tkconfig="`echo "${with_tkconfig}" | sed 's!/tkConfig\.sh$!!'`" fi ;; esac if test -f "${with_tkconfig}/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd "${with_tkconfig}"; pwd)`" else AC_MSG_ERROR([${with_tkconfig} directory doesn't contain tkConfig.sh]) fi fi # then check for a private Tk library if test x"${ac_cv_c_tkconfig}" = x ; then for i in \ ../tk \ `ls -dr ../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ `ls -dr ../tk[[8-9]].[[0-9]] 2>/dev/null` \ `ls -dr ../tk[[8-9]].[[0-9]]* 2>/dev/null` \ ../../tk \ `ls -dr ../../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ `ls -dr ../../tk[[8-9]].[[0-9]] 2>/dev/null` \ `ls -dr ../../tk[[8-9]].[[0-9]]* 2>/dev/null` \ ../../../tk \ `ls -dr ../../../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ `ls -dr ../../../tk[[8-9]].[[0-9]] 2>/dev/null` \ `ls -dr ../../../tk[[8-9]].[[0-9]]* 2>/dev/null` ; do if test "${TEA_PLATFORM}" = "windows" \ -a -f "$i/win/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd $i/win; pwd)`" break fi if test -f "$i/unix/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd $i/unix; pwd)`" break fi done fi # on Darwin, check in Framework installation locations if test "`uname -s`" = "Darwin" -a x"${ac_cv_c_tkconfig}" = x ; then for i in `ls -d ~/Library/Frameworks 2>/dev/null` \ `ls -d /Library/Frameworks 2>/dev/null` \ `ls -d /Network/Library/Frameworks 2>/dev/null` \ `ls -d /System/Library/Frameworks 2>/dev/null` \ ; do if test -f "$i/Tk.framework/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd $i/Tk.framework; pwd)`" break fi done fi # check in a few common install locations if test x"${ac_cv_c_tkconfig}" = x ; then for i in `ls -d ${libdir} 2>/dev/null` \ `ls -d ${exec_prefix}/lib 2>/dev/null` \ `ls -d ${prefix}/lib 2>/dev/null` \ `ls -d /usr/local/lib 2>/dev/null` \ `ls -d /usr/contrib/lib 2>/dev/null` \ `ls -d /usr/lib 2>/dev/null` \ `ls -d /usr/lib64 2>/dev/null` \ ; do if test -f "$i/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd $i; pwd)`" break fi done fi # TEA specific: on Windows, check in common installation locations if test "${TEA_PLATFORM}" = "windows" \ -a x"${ac_cv_c_tkconfig}" = x ; then for i in `ls -d C:/Tcl/lib 2>/dev/null` \ `ls -d C:/Progra~1/Tcl/lib 2>/dev/null` \ ; do if test -f "$i/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd $i; pwd)`" break fi done fi # check in a few other private locations if test x"${ac_cv_c_tkconfig}" = x ; then for i in \ ${srcdir}/../tk \ `ls -dr ${srcdir}/../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ `ls -dr ${srcdir}/../tk[[8-9]].[[0-9]] 2>/dev/null` \ `ls -dr ${srcdir}/../tk[[8-9]].[[0-9]]* 2>/dev/null` ; do if test "${TEA_PLATFORM}" = "windows" \ -a -f "$i/win/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd $i/win; pwd)`" break fi if test -f "$i/unix/tkConfig.sh" ; then ac_cv_c_tkconfig="`(cd $i/unix; pwd)`" break fi done fi ]) if test x"${ac_cv_c_tkconfig}" = x ; then TK_BIN_DIR="# no Tk configs found" AC_MSG_ERROR([Can't find Tk configuration definitions. Use --with-tk to specify a directory containing tkConfig.sh]) else no_tk= TK_BIN_DIR="${ac_cv_c_tkconfig}" AC_MSG_RESULT([found ${TK_BIN_DIR}/tkConfig.sh]) fi fi ]) #------------------------------------------------------------------------ # TEA_LOAD_TCLCONFIG -- # # Load the tclConfig.sh file # # Arguments: # # Requires the following vars to be set: # TCL_BIN_DIR # # Results: # # Substitutes the following vars: # TCL_BIN_DIR # TCL_SRC_DIR # TCL_LIB_FILE #------------------------------------------------------------------------ AC_DEFUN([TEA_LOAD_TCLCONFIG], [ AC_MSG_CHECKING([for existence of ${TCL_BIN_DIR}/tclConfig.sh]) if test -f "${TCL_BIN_DIR}/tclConfig.sh" ; then AC_MSG_RESULT([loading]) . "${TCL_BIN_DIR}/tclConfig.sh" else AC_MSG_RESULT([could not find ${TCL_BIN_DIR}/tclConfig.sh]) fi # eval is required to do the TCL_DBGX substitution eval "TCL_LIB_FILE=\"${TCL_LIB_FILE}\"" eval "TCL_STUB_LIB_FILE=\"${TCL_STUB_LIB_FILE}\"" # If the TCL_BIN_DIR is the build directory (not the install directory), # then set the common variable name to the value of the build variables. # For example, the variable TCL_LIB_SPEC will be set to the value # of TCL_BUILD_LIB_SPEC. An extension should make use of TCL_LIB_SPEC # instead of TCL_BUILD_LIB_SPEC since it will work with both an # installed and uninstalled version of Tcl. if test -f "${TCL_BIN_DIR}/Makefile" ; then TCL_LIB_SPEC="${TCL_BUILD_LIB_SPEC}" TCL_STUB_LIB_SPEC="${TCL_BUILD_STUB_LIB_SPEC}" TCL_STUB_LIB_PATH="${TCL_BUILD_STUB_LIB_PATH}" elif test "`uname -s`" = "Darwin"; then # If Tcl was built as a framework, attempt to use the libraries # from the framework at the given location so that linking works # against Tcl.framework installed in an arbitrary location. case ${TCL_DEFS} in *TCL_FRAMEWORK*) if test -f "${TCL_BIN_DIR}/${TCL_LIB_FILE}"; then for i in "`cd "${TCL_BIN_DIR}"; pwd`" \ "`cd "${TCL_BIN_DIR}"/../..; pwd`"; do if test "`basename "$i"`" = "${TCL_LIB_FILE}.framework"; then TCL_LIB_SPEC="-F`dirname "$i" | sed -e 's/ /\\\\ /g'` -framework ${TCL_LIB_FILE}" break fi done fi if test -f "${TCL_BIN_DIR}/${TCL_STUB_LIB_FILE}"; then TCL_STUB_LIB_SPEC="-L`echo "${TCL_BIN_DIR}" | sed -e 's/ /\\\\ /g'` ${TCL_STUB_LIB_FLAG}" TCL_STUB_LIB_PATH="${TCL_BIN_DIR}/${TCL_STUB_LIB_FILE}" fi ;; esac fi # eval is required to do the TCL_DBGX substitution eval "TCL_LIB_FLAG=\"${TCL_LIB_FLAG}\"" eval "TCL_LIB_SPEC=\"${TCL_LIB_SPEC}\"" eval "TCL_STUB_LIB_FLAG=\"${TCL_STUB_LIB_FLAG}\"" eval "TCL_STUB_LIB_SPEC=\"${TCL_STUB_LIB_SPEC}\"" AC_SUBST(TCL_VERSION) AC_SUBST(TCL_PATCH_LEVEL) AC_SUBST(TCL_BIN_DIR) AC_SUBST(TCL_SRC_DIR) AC_SUBST(TCL_LIB_FILE) AC_SUBST(TCL_LIB_FLAG) AC_SUBST(TCL_LIB_SPEC) AC_SUBST(TCL_STUB_LIB_FILE) AC_SUBST(TCL_STUB_LIB_FLAG) AC_SUBST(TCL_STUB_LIB_SPEC) AC_MSG_CHECKING([platform]) hold_cc=$CC; CC="$TCL_CC" AC_TRY_COMPILE(,[ #ifdef _WIN32 #error win32 #endif ], TEA_PLATFORM="unix", TEA_PLATFORM="windows" ) CC=$hold_cc AC_MSG_RESULT($TEA_PLATFORM) # The BUILD_$pkg is to define the correct extern storage class # handling when making this package AC_DEFINE_UNQUOTED(BUILD_${PACKAGE_NAME}, [], [Building extension source?]) # Do this here as we have fully defined TEA_PLATFORM now if test "${TEA_PLATFORM}" = "windows" ; then EXEEXT=".exe" CLEANFILES="$CLEANFILES *.lib *.dll *.pdb *.exp" fi # TEA specific: AC_SUBST(CLEANFILES) AC_SUBST(TCL_LIBS) AC_SUBST(TCL_DEFS) AC_SUBST(TCL_EXTRA_CFLAGS) AC_SUBST(TCL_LD_FLAGS) AC_SUBST(TCL_SHLIB_LD_LIBS) ]) #------------------------------------------------------------------------ # TEA_LOAD_TKCONFIG -- # # Load the tkConfig.sh file # # Arguments: # # Requires the following vars to be set: # TK_BIN_DIR # # Results: # # Sets the following vars that should be in tkConfig.sh: # TK_BIN_DIR #------------------------------------------------------------------------ AC_DEFUN([TEA_LOAD_TKCONFIG], [ AC_MSG_CHECKING([for existence of ${TK_BIN_DIR}/tkConfig.sh]) if test -f "${TK_BIN_DIR}/tkConfig.sh" ; then AC_MSG_RESULT([loading]) . "${TK_BIN_DIR}/tkConfig.sh" else AC_MSG_RESULT([could not find ${TK_BIN_DIR}/tkConfig.sh]) fi # eval is required to do the TK_DBGX substitution eval "TK_LIB_FILE=\"${TK_LIB_FILE}\"" eval "TK_STUB_LIB_FILE=\"${TK_STUB_LIB_FILE}\"" # If the TK_BIN_DIR is the build directory (not the install directory), # then set the common variable name to the value of the build variables. # For example, the variable TK_LIB_SPEC will be set to the value # of TK_BUILD_LIB_SPEC. An extension should make use of TK_LIB_SPEC # instead of TK_BUILD_LIB_SPEC since it will work with both an # installed and uninstalled version of Tcl. if test -f "${TK_BIN_DIR}/Makefile" ; then TK_LIB_SPEC="${TK_BUILD_LIB_SPEC}" TK_STUB_LIB_SPEC="${TK_BUILD_STUB_LIB_SPEC}" TK_STUB_LIB_PATH="${TK_BUILD_STUB_LIB_PATH}" elif test "`uname -s`" = "Darwin"; then # If Tk was built as a framework, attempt to use the libraries # from the framework at the given location so that linking works # against Tk.framework installed in an arbitrary location. case ${TK_DEFS} in *TK_FRAMEWORK*) if test -f "${TK_BIN_DIR}/${TK_LIB_FILE}"; then for i in "`cd "${TK_BIN_DIR}"; pwd`" \ "`cd "${TK_BIN_DIR}"/../..; pwd`"; do if test "`basename "$i"`" = "${TK_LIB_FILE}.framework"; then TK_LIB_SPEC="-F`dirname "$i" | sed -e 's/ /\\\\ /g'` -framework ${TK_LIB_FILE}" break fi done fi if test -f "${TK_BIN_DIR}/${TK_STUB_LIB_FILE}"; then TK_STUB_LIB_SPEC="-L` echo "${TK_BIN_DIR}" | sed -e 's/ /\\\\ /g'` ${TK_STUB_LIB_FLAG}" TK_STUB_LIB_PATH="${TK_BIN_DIR}/${TK_STUB_LIB_FILE}" fi ;; esac fi # eval is required to do the TK_DBGX substitution eval "TK_LIB_FLAG=\"${TK_LIB_FLAG}\"" eval "TK_LIB_SPEC=\"${TK_LIB_SPEC}\"" eval "TK_STUB_LIB_FLAG=\"${TK_STUB_LIB_FLAG}\"" eval "TK_STUB_LIB_SPEC=\"${TK_STUB_LIB_SPEC}\"" # TEA specific: Ensure windowingsystem is defined if test "${TEA_PLATFORM}" = "unix" ; then case ${TK_DEFS} in *MAC_OSX_TK*) AC_DEFINE(MAC_OSX_TK, 1, [Are we building against Mac OS X TkAqua?]) TEA_WINDOWINGSYSTEM="aqua" ;; *) TEA_WINDOWINGSYSTEM="x11" ;; esac elif test "${TEA_PLATFORM}" = "windows" ; then TEA_WINDOWINGSYSTEM="win32" fi AC_SUBST(TK_VERSION) AC_SUBST(TK_BIN_DIR) AC_SUBST(TK_SRC_DIR) AC_SUBST(TK_LIB_FILE) AC_SUBST(TK_LIB_FLAG) AC_SUBST(TK_LIB_SPEC) AC_SUBST(TK_STUB_LIB_FILE) AC_SUBST(TK_STUB_LIB_FLAG) AC_SUBST(TK_STUB_LIB_SPEC) # TEA specific: AC_SUBST(TK_LIBS) AC_SUBST(TK_XINCLUDES) ]) #------------------------------------------------------------------------ # TEA_PROG_TCLSH # Determine the fully qualified path name of the tclsh executable # in the Tcl build directory or the tclsh installed in a bin # directory. This macro will correctly determine the name # of the tclsh executable even if tclsh has not yet been # built in the build directory. The tclsh found is always # associated with a tclConfig.sh file. This tclsh should be used # only for running extension test cases. It should never be # or generation of files (like pkgIndex.tcl) at build time. # # Arguments: # none # # Results: # Substitutes the following vars: # TCLSH_PROG #------------------------------------------------------------------------ AC_DEFUN([TEA_PROG_TCLSH], [ AC_MSG_CHECKING([for tclsh]) if test -f "${TCL_BIN_DIR}/Makefile" ; then # tclConfig.sh is in Tcl build directory if test "${TEA_PLATFORM}" = "windows"; then TCLSH_PROG="${TCL_BIN_DIR}/tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}${EXEEXT}" else TCLSH_PROG="${TCL_BIN_DIR}/tclsh" fi else # tclConfig.sh is in install location if test "${TEA_PLATFORM}" = "windows"; then TCLSH_PROG="tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}${EXEEXT}" else TCLSH_PROG="tclsh${TCL_MAJOR_VERSION}.${TCL_MINOR_VERSION}${TCL_DBGX}" fi list="`ls -d ${TCL_BIN_DIR}/../bin 2>/dev/null` \ `ls -d ${TCL_BIN_DIR}/.. 2>/dev/null` \ `ls -d ${TCL_PREFIX}/bin 2>/dev/null`" for i in $list ; do if test -f "$i/${TCLSH_PROG}" ; then REAL_TCL_BIN_DIR="`cd "$i"; pwd`/" break fi done TCLSH_PROG="${REAL_TCL_BIN_DIR}${TCLSH_PROG}" fi AC_MSG_RESULT([${TCLSH_PROG}]) AC_SUBST(TCLSH_PROG) ]) #------------------------------------------------------------------------ # TEA_PROG_WISH # Determine the fully qualified path name of the wish executable # in the Tk build directory or the wish installed in a bin # directory. This macro will correctly determine the name # of the wish executable even if wish has not yet been # built in the build directory. The wish found is always # associated with a tkConfig.sh file. This wish should be used # only for running extension test cases. It should never be # or generation of files (like pkgIndex.tcl) at build time. # # Arguments: # none # # Results: # Substitutes the following vars: # WISH_PROG #------------------------------------------------------------------------ AC_DEFUN([TEA_PROG_WISH], [ AC_MSG_CHECKING([for wish]) if test -f "${TK_BIN_DIR}/Makefile" ; then # tkConfig.sh is in Tk build directory if test "${TEA_PLATFORM}" = "windows"; then WISH_PROG="${TK_BIN_DIR}/wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}${TK_DBGX}${EXEEXT}" else WISH_PROG="${TK_BIN_DIR}/wish" fi else # tkConfig.sh is in install location if test "${TEA_PLATFORM}" = "windows"; then WISH_PROG="wish${TK_MAJOR_VERSION}${TK_MINOR_VERSION}${TK_DBGX}${EXEEXT}" else WISH_PROG="wish${TK_MAJOR_VERSION}.${TK_MINOR_VERSION}${TK_DBGX}" fi list="`ls -d ${TK_BIN_DIR}/../bin 2>/dev/null` \ `ls -d ${TK_BIN_DIR}/.. 2>/dev/null` \ `ls -d ${TK_PREFIX}/bin 2>/dev/null`" for i in $list ; do if test -f "$i/${WISH_PROG}" ; then REAL_TK_BIN_DIR="`cd "$i"; pwd`/" break fi done WISH_PROG="${REAL_TK_BIN_DIR}${WISH_PROG}" fi AC_MSG_RESULT([${WISH_PROG}]) AC_SUBST(WISH_PROG) ]) #------------------------------------------------------------------------ # TEA_ENABLE_SHARED -- # # Allows the building of shared libraries # # Arguments: # none # # Results: # # Adds the following arguments to configure: # --enable-shared=yes|no # # Defines the following vars: # STATIC_BUILD Used for building import/export libraries # on Windows. # # Sets the following vars: # SHARED_BUILD Value of 1 or 0 #------------------------------------------------------------------------ AC_DEFUN([TEA_ENABLE_SHARED], [ AC_MSG_CHECKING([how to build libraries]) AC_ARG_ENABLE(shared, AC_HELP_STRING([--enable-shared], [build and link with shared libraries (default: on)]), [tcl_ok=$enableval], [tcl_ok=yes]) if test "${enable_shared+set}" = set; then enableval="$enable_shared" tcl_ok=$enableval else tcl_ok=yes fi if test "$tcl_ok" = "yes" ; then AC_MSG_RESULT([shared]) SHARED_BUILD=1 else AC_MSG_RESULT([static]) SHARED_BUILD=0 AC_DEFINE(STATIC_BUILD, 1, [Is this a static build?]) fi AC_SUBST(SHARED_BUILD) ]) #------------------------------------------------------------------------ # TEA_ENABLE_THREADS -- # # Specify if thread support should be enabled. If "yes" is specified # as an arg (optional), threads are enabled by default, "no" means # threads are disabled. "yes" is the default. # # TCL_THREADS is checked so that if you are compiling an extension # against a threaded core, your extension must be compiled threaded # as well. # # Note that it is legal to have a thread enabled extension run in a # threaded or non-threaded Tcl core, but a non-threaded extension may # only run in a non-threaded Tcl core. # # Arguments: # none # # Results: # # Adds the following arguments to configure: # --enable-threads # # Sets the following vars: # THREADS_LIBS Thread library(s) # # Defines the following vars: # TCL_THREADS # _REENTRANT # _THREAD_SAFE #------------------------------------------------------------------------ AC_DEFUN([TEA_ENABLE_THREADS], [ AC_ARG_ENABLE(threads, AC_HELP_STRING([--enable-threads], [build with threads]), [tcl_ok=$enableval], [tcl_ok=yes]) if test "${enable_threads+set}" = set; then enableval="$enable_threads" tcl_ok=$enableval else tcl_ok=yes fi if test "$tcl_ok" = "yes" -o "${TCL_THREADS}" = 1; then TCL_THREADS=1 if test "${TEA_PLATFORM}" != "windows" ; then # We are always OK on Windows, so check what this platform wants: # USE_THREAD_ALLOC tells us to try the special thread-based # allocator that significantly reduces lock contention AC_DEFINE(USE_THREAD_ALLOC, 1, [Do we want to use the threaded memory allocator?]) AC_DEFINE(_REENTRANT, 1, [Do we want the reentrant OS API?]) if test "`uname -s`" = "SunOS" ; then AC_DEFINE(_POSIX_PTHREAD_SEMANTICS, 1, [Do we really want to follow the standard? Yes we do!]) fi AC_DEFINE(_THREAD_SAFE, 1, [Do we want the thread-safe OS API?]) AC_CHECK_LIB(pthread,pthread_mutex_init,tcl_ok=yes,tcl_ok=no) if test "$tcl_ok" = "no"; then # Check a little harder for __pthread_mutex_init in the same # library, as some systems hide it there until pthread.h is # defined. We could alternatively do an AC_TRY_COMPILE with # pthread.h, but that will work with libpthread really doesn't # exist, like AIX 4.2. [Bug: 4359] AC_CHECK_LIB(pthread, __pthread_mutex_init, tcl_ok=yes, tcl_ok=no) fi if test "$tcl_ok" = "yes"; then # The space is needed THREADS_LIBS=" -lpthread" else AC_CHECK_LIB(pthreads, pthread_mutex_init, tcl_ok=yes, tcl_ok=no) if test "$tcl_ok" = "yes"; then # The space is needed THREADS_LIBS=" -lpthreads" else AC_CHECK_LIB(c, pthread_mutex_init, tcl_ok=yes, tcl_ok=no) if test "$tcl_ok" = "no"; then AC_CHECK_LIB(c_r, pthread_mutex_init, tcl_ok=yes, tcl_ok=no) if test "$tcl_ok" = "yes"; then # The space is needed THREADS_LIBS=" -pthread" else TCL_THREADS=0 AC_MSG_WARN([Do not know how to find pthread lib on your system - thread support disabled]) fi fi fi fi fi else TCL_THREADS=0 fi # Do checking message here to not mess up interleaved configure output AC_MSG_CHECKING([for building with threads]) if test "${TCL_THREADS}" = 1; then AC_DEFINE(TCL_THREADS, 1, [Are we building with threads enabled?]) AC_MSG_RESULT([yes (default)]) else AC_MSG_RESULT([no]) fi # TCL_THREADS sanity checking. See if our request for building with # threads is the same as the way Tcl was built. If not, warn the user. case ${TCL_DEFS} in *THREADS=1*) if test "${TCL_THREADS}" = "0"; then AC_MSG_WARN([ Building ${PACKAGE_NAME} without threads enabled, but building against Tcl that IS thread-enabled. It is recommended to use --enable-threads.]) fi ;; *) if test "${TCL_THREADS}" = "1"; then AC_MSG_WARN([ --enable-threads requested, but building against a Tcl that is NOT thread-enabled. This is an OK configuration that will also run in a thread-enabled core.]) fi ;; esac AC_SUBST(TCL_THREADS) ]) #------------------------------------------------------------------------ # TEA_ENABLE_SYMBOLS -- # # Specify if debugging symbols should be used. # Memory (TCL_MEM_DEBUG) debugging can also be enabled. # # Arguments: # none # # TEA varies from core Tcl in that C|LDFLAGS_DEFAULT receives # the value of C|LDFLAGS_OPTIMIZE|DEBUG already substituted. # Requires the following vars to be set in the Makefile: # CFLAGS_DEFAULT # LDFLAGS_DEFAULT # # Results: # # Adds the following arguments to configure: # --enable-symbols # # Defines the following vars: # CFLAGS_DEFAULT Sets to $(CFLAGS_DEBUG) if true # Sets to "$(CFLAGS_OPTIMIZE) -DNDEBUG" if false # LDFLAGS_DEFAULT Sets to $(LDFLAGS_DEBUG) if true # Sets to $(LDFLAGS_OPTIMIZE) if false # DBGX Formerly used as debug library extension; # always blank now. #------------------------------------------------------------------------ AC_DEFUN([TEA_ENABLE_SYMBOLS], [ dnl TEA specific: Make sure we are initialized AC_REQUIRE([TEA_CONFIG_CFLAGS]) AC_MSG_CHECKING([for build with symbols]) AC_ARG_ENABLE(symbols, AC_HELP_STRING([--enable-symbols], [build with debugging symbols (default: off)]), [tcl_ok=$enableval], [tcl_ok=no]) DBGX="" if test "$tcl_ok" = "no"; then CFLAGS_DEFAULT="${CFLAGS_OPTIMIZE} -DNDEBUG" LDFLAGS_DEFAULT="${LDFLAGS_OPTIMIZE}" AC_MSG_RESULT([no]) else CFLAGS_DEFAULT="${CFLAGS_DEBUG}" LDFLAGS_DEFAULT="${LDFLAGS_DEBUG}" if test "$tcl_ok" = "yes"; then AC_MSG_RESULT([yes (standard debugging)]) fi fi # TEA specific: if test "${TEA_PLATFORM}" != "windows" ; then LDFLAGS_DEFAULT="${LDFLAGS}" fi AC_SUBST(CFLAGS_DEFAULT) AC_SUBST(LDFLAGS_DEFAULT) AC_SUBST(TCL_DBGX) if test "$tcl_ok" = "mem" -o "$tcl_ok" = "all"; then AC_DEFINE(TCL_MEM_DEBUG, 1, [Is memory debugging enabled?]) fi if test "$tcl_ok" != "yes" -a "$tcl_ok" != "no"; then if test "$tcl_ok" = "all"; then AC_MSG_RESULT([enabled symbols mem debugging]) else AC_MSG_RESULT([enabled $tcl_ok debugging]) fi fi ]) #------------------------------------------------------------------------ # TEA_ENABLE_LANGINFO -- # # Allows use of modern nl_langinfo check for better l10n. # This is only relevant for Unix. # # Arguments: # none # # Results: # # Adds the following arguments to configure: # --enable-langinfo=yes|no (default is yes) # # Defines the following vars: # HAVE_LANGINFO Triggers use of nl_langinfo if defined. #------------------------------------------------------------------------ AC_DEFUN([TEA_ENABLE_LANGINFO], [ AC_ARG_ENABLE(langinfo, AC_HELP_STRING([--enable-langinfo], [use nl_langinfo if possible to determine encoding at startup, otherwise use old heuristic (default: on)]), [langinfo_ok=$enableval], [langinfo_ok=yes]) HAVE_LANGINFO=0 if test "$langinfo_ok" = "yes"; then AC_CHECK_HEADER(langinfo.h,[langinfo_ok=yes],[langinfo_ok=no]) fi AC_MSG_CHECKING([whether to use nl_langinfo]) if test "$langinfo_ok" = "yes"; then AC_CACHE_VAL(tcl_cv_langinfo_h, [ AC_TRY_COMPILE([#include ], [nl_langinfo(CODESET);], [tcl_cv_langinfo_h=yes],[tcl_cv_langinfo_h=no])]) AC_MSG_RESULT([$tcl_cv_langinfo_h]) if test $tcl_cv_langinfo_h = yes; then AC_DEFINE(HAVE_LANGINFO, 1, [Do we have nl_langinfo()?]) fi else AC_MSG_RESULT([$langinfo_ok]) fi ]) #-------------------------------------------------------------------- # TEA_CONFIG_SYSTEM # # Determine what the system is (some things cannot be easily checked # on a feature-driven basis, alas). This can usually be done via the # "uname" command. # # Arguments: # none # # Results: # Defines the following var: # # system - System/platform/version identification code. #-------------------------------------------------------------------- AC_DEFUN([TEA_CONFIG_SYSTEM], [ AC_CACHE_CHECK([system version], tcl_cv_sys_version, [ # TEA specific: if test "${TEA_PLATFORM}" = "windows" ; then tcl_cv_sys_version=windows else tcl_cv_sys_version=`uname -s`-`uname -r` if test "$?" -ne 0 ; then AC_MSG_WARN([can't find uname command]) tcl_cv_sys_version=unknown else if test "`uname -s`" = "AIX" ; then tcl_cv_sys_version=AIX-`uname -v`.`uname -r` fi fi fi ]) system=$tcl_cv_sys_version ]) #-------------------------------------------------------------------- # TEA_CONFIG_CFLAGS # # Try to determine the proper flags to pass to the compiler # for building shared libraries and other such nonsense. # # Arguments: # none # # Results: # # Defines and substitutes the following vars: # # DL_OBJS, DL_LIBS - removed for TEA, only needed by core. # LDFLAGS - Flags to pass to the compiler when linking object # files into an executable application binary such # as tclsh. # LD_SEARCH_FLAGS-Flags to pass to ld, such as "-R /usr/local/tcl/lib", # that tell the run-time dynamic linker where to look # for shared libraries such as libtcl.so. Depends on # the variable LIB_RUNTIME_DIR in the Makefile. Could # be the same as CC_SEARCH_FLAGS if ${CC} is used to link. # CC_SEARCH_FLAGS-Flags to pass to ${CC}, such as "-Wl,-rpath,/usr/local/tcl/lib", # that tell the run-time dynamic linker where to look # for shared libraries such as libtcl.so. Depends on # the variable LIB_RUNTIME_DIR in the Makefile. # SHLIB_CFLAGS - Flags to pass to cc when compiling the components # of a shared library (may request position-independent # code, among other things). # SHLIB_LD - Base command to use for combining object files # into a shared library. # SHLIB_LD_LIBS - Dependent libraries for the linker to scan when # creating shared libraries. This symbol typically # goes at the end of the "ld" commands that build # shared libraries. The value of the symbol defaults to # "${LIBS}" if all of the dependent libraries should # be specified when creating a shared library. If # dependent libraries should not be specified (as on # SunOS 4.x, where they cause the link to fail, or in # general if Tcl and Tk aren't themselves shared # libraries), then this symbol has an empty string # as its value. # SHLIB_SUFFIX - Suffix to use for the names of dynamically loadable # extensions. An empty string means we don't know how # to use shared libraries on this platform. # LIB_SUFFIX - Specifies everything that comes after the "libfoo" # in a static or shared library name, using the $PACKAGE_VERSION variable # to put the version in the right place. This is used # by platforms that need non-standard library names. # Examples: ${PACKAGE_VERSION}.so.1.1 on NetBSD, since it needs # to have a version after the .so, and ${PACKAGE_VERSION}.a # on AIX, since a shared library needs to have # a .a extension whereas shared objects for loadable # extensions have a .so extension. Defaults to # ${PACKAGE_VERSION}${SHLIB_SUFFIX}. # CFLAGS_DEBUG - # Flags used when running the compiler in debug mode # CFLAGS_OPTIMIZE - # Flags used when running the compiler in optimize mode # CFLAGS - Additional CFLAGS added as necessary (usually 64-bit) #-------------------------------------------------------------------- AC_DEFUN([TEA_CONFIG_CFLAGS], [ dnl TEA specific: Make sure we are initialized AC_REQUIRE([TEA_INIT]) # Step 0.a: Enable 64 bit support? AC_MSG_CHECKING([if 64bit support is requested]) AC_ARG_ENABLE(64bit, AC_HELP_STRING([--enable-64bit], [enable 64bit support (default: off)]), [do64bit=$enableval], [do64bit=no]) AC_MSG_RESULT([$do64bit]) # Step 0.b: Enable Solaris 64 bit VIS support? AC_MSG_CHECKING([if 64bit Sparc VIS support is requested]) AC_ARG_ENABLE(64bit-vis, AC_HELP_STRING([--enable-64bit-vis], [enable 64bit Sparc VIS support (default: off)]), [do64bitVIS=$enableval], [do64bitVIS=no]) AC_MSG_RESULT([$do64bitVIS]) # Force 64bit on with VIS AS_IF([test "$do64bitVIS" = "yes"], [do64bit=yes]) # Step 0.c: Check if visibility support is available. Do this here so # that platform specific alternatives can be used below if this fails. AC_CACHE_CHECK([if compiler supports visibility "hidden"], tcl_cv_cc_visibility_hidden, [ hold_cflags=$CFLAGS; CFLAGS="$CFLAGS -Werror" AC_TRY_LINK([ extern __attribute__((__visibility__("hidden"))) void f(void); void f(void) {}], [f();], tcl_cv_cc_visibility_hidden=yes, tcl_cv_cc_visibility_hidden=no) CFLAGS=$hold_cflags]) AS_IF([test $tcl_cv_cc_visibility_hidden = yes], [ AC_DEFINE(MODULE_SCOPE, [extern __attribute__((__visibility__("hidden")))], [Compiler support for module scope symbols]) AC_DEFINE(HAVE_HIDDEN, [1], [Compiler support for module scope symbols]) ]) # Step 0.d: Disable -rpath support? AC_MSG_CHECKING([if rpath support is requested]) AC_ARG_ENABLE(rpath, AC_HELP_STRING([--disable-rpath], [disable rpath support (default: on)]), [doRpath=$enableval], [doRpath=yes]) AC_MSG_RESULT([$doRpath]) # TEA specific: Cross-compiling options for Windows/CE builds? AS_IF([test "${TEA_PLATFORM}" = windows], [ AC_MSG_CHECKING([if Windows/CE build is requested]) AC_ARG_ENABLE(wince, AC_HELP_STRING([--enable-wince], [enable Win/CE support (where applicable)]), [doWince=$enableval], [doWince=no]) AC_MSG_RESULT([$doWince]) ]) # Set the variable "system" to hold the name and version number # for the system. TEA_CONFIG_SYSTEM # Require ranlib early so we can override it in special cases below. AC_REQUIRE([AC_PROG_RANLIB]) # Set configuration options based on system name and version. # This is similar to Tcl's unix/tcl.m4 except that we've added a # "windows" case and removed some core-only vars. do64bit_ok=no # default to '{$LIBS}' and set to "" on per-platform necessary basis SHLIB_LD_LIBS='${LIBS}' # When ld needs options to work in 64-bit mode, put them in # LDFLAGS_ARCH so they eventually end up in LDFLAGS even if [load] # is disabled by the user. [Bug 1016796] LDFLAGS_ARCH="" UNSHARED_LIB_SUFFIX="" # TEA specific: use PACKAGE_VERSION instead of VERSION TCL_TRIM_DOTS='`echo ${PACKAGE_VERSION} | tr -d .`' ECHO_VERSION='`echo ${PACKAGE_VERSION}`' TCL_LIB_VERSIONS_OK=ok CFLAGS_DEBUG=-g AS_IF([test "$GCC" = yes], [ CFLAGS_OPTIMIZE=-O2 CFLAGS_WARNING="-Wall" ], [ CFLAGS_OPTIMIZE=-O CFLAGS_WARNING="" ]) AC_CHECK_TOOL(AR, ar) STLIB_LD='${AR} cr' LD_LIBRARY_PATH_VAR="LD_LIBRARY_PATH" AS_IF([test "x$SHLIB_VERSION" = x],[SHLIB_VERSION=""],[SHLIB_VERSION=".$SHLIB_VERSION"]) case $system in # TEA specific: windows) # This is a 2-stage check to make sure we have the 64-bit SDK # We have to know where the SDK is installed. # This magic is based on MS Platform SDK for Win2003 SP1 - hobbs # MACHINE is IX86 for LINK, but this is used by the manifest, # which requires x86|amd64|ia64. MACHINE="X86" if test "$do64bit" != "no" ; then if test "x${MSSDK}x" = "xx" ; then MSSDK="C:/Progra~1/Microsoft Platform SDK" fi MSSDK=`echo "$MSSDK" | sed -e 's!\\\!/!g'` PATH64="" case "$do64bit" in amd64|x64|yes) MACHINE="AMD64" ; # default to AMD64 64-bit build PATH64="${MSSDK}/Bin/Win64/x86/AMD64" ;; ia64) MACHINE="IA64" PATH64="${MSSDK}/Bin/Win64" ;; esac if test "$GCC" != "yes" -a ! -d "${PATH64}" ; then AC_MSG_WARN([Could not find 64-bit $MACHINE SDK to enable 64bit mode]) AC_MSG_WARN([Ensure latest Platform SDK is installed]) do64bit="no" else AC_MSG_RESULT([ Using 64-bit $MACHINE mode]) do64bit_ok="yes" fi fi if test "$doWince" != "no" ; then if test "$do64bit" != "no" ; then AC_MSG_ERROR([Windows/CE and 64-bit builds incompatible]) fi if test "$GCC" = "yes" ; then AC_MSG_ERROR([Windows/CE and GCC builds incompatible]) fi TEA_PATH_CELIB # Set defaults for common evc4/PPC2003 setup # Currently Tcl requires 300+, possibly 420+ for sockets CEVERSION=420; # could be 211 300 301 400 420 ... TARGETCPU=ARMV4; # could be ARMV4 ARM MIPS SH3 X86 ... ARCH=ARM; # could be ARM MIPS X86EM ... PLATFORM="Pocket PC 2003"; # or "Pocket PC 2002" if test "$doWince" != "yes"; then # If !yes then the user specified something # Reset ARCH to allow user to skip specifying it ARCH= eval `echo $doWince | awk -F, '{ \ if (length([$]1)) { printf "CEVERSION=\"%s\"\n", [$]1; \ if ([$]1 < 400) { printf "PLATFORM=\"Pocket PC 2002\"\n" } }; \ if (length([$]2)) { printf "TARGETCPU=\"%s\"\n", toupper([$]2) }; \ if (length([$]3)) { printf "ARCH=\"%s\"\n", toupper([$]3) }; \ if (length([$]4)) { printf "PLATFORM=\"%s\"\n", [$]4 }; \ }'` if test "x${ARCH}" = "x" ; then ARCH=$TARGETCPU; fi fi OSVERSION=WCE$CEVERSION; if test "x${WCEROOT}" = "x" ; then WCEROOT="C:/Program Files/Microsoft eMbedded C++ 4.0" if test ! -d "${WCEROOT}" ; then WCEROOT="C:/Program Files/Microsoft eMbedded Tools" fi fi if test "x${SDKROOT}" = "x" ; then SDKROOT="C:/Program Files/Windows CE Tools" if test ! -d "${SDKROOT}" ; then SDKROOT="C:/Windows CE Tools" fi fi WCEROOT=`echo "$WCEROOT" | sed -e 's!\\\!/!g'` SDKROOT=`echo "$SDKROOT" | sed -e 's!\\\!/!g'` if test ! -d "${SDKROOT}/${OSVERSION}/${PLATFORM}/Lib/${TARGETCPU}" \ -o ! -d "${WCEROOT}/EVC/${OSVERSION}/bin"; then AC_MSG_ERROR([could not find PocketPC SDK or target compiler to enable WinCE mode [$CEVERSION,$TARGETCPU,$ARCH,$PLATFORM]]) doWince="no" else # We could PATH_NOSPACE these, but that's not important, # as long as we quote them when used. CEINCLUDE="${SDKROOT}/${OSVERSION}/${PLATFORM}/include" if test -d "${CEINCLUDE}/${TARGETCPU}" ; then CEINCLUDE="${CEINCLUDE}/${TARGETCPU}" fi CELIBPATH="${SDKROOT}/${OSVERSION}/${PLATFORM}/Lib/${TARGETCPU}" fi fi if test "$GCC" != "yes" ; then if test "${SHARED_BUILD}" = "0" ; then runtime=-MT else runtime=-MD fi if test "$do64bit" != "no" ; then # All this magic is necessary for the Win64 SDK RC1 - hobbs CC="\"${PATH64}/cl.exe\"" CFLAGS="${CFLAGS} -I\"${MSSDK}/Include\" -I\"${MSSDK}/Include/crt\" -I\"${MSSDK}/Include/crt/sys\"" RC="\"${MSSDK}/bin/rc.exe\"" lflags="-nologo -MACHINE:${MACHINE} -LIBPATH:\"${MSSDK}/Lib/${MACHINE}\"" LINKBIN="\"${PATH64}/link.exe\"" CFLAGS_DEBUG="-nologo -Zi -Od -W3 ${runtime}d" CFLAGS_OPTIMIZE="-nologo -O2 -W2 ${runtime}" # Avoid 'unresolved external symbol __security_cookie' # errors, c.f. http://support.microsoft.com/?id=894573 TEA_ADD_LIBS([bufferoverflowU.lib]) elif test "$doWince" != "no" ; then CEBINROOT="${WCEROOT}/EVC/${OSVERSION}/bin" if test "${TARGETCPU}" = "X86"; then CC="\"${CEBINROOT}/cl.exe\"" else CC="\"${CEBINROOT}/cl${ARCH}.exe\"" fi CFLAGS="$CFLAGS -I\"${CELIB_DIR}/inc\" -I\"${CEINCLUDE}\"" RC="\"${WCEROOT}/Common/EVC/bin/rc.exe\"" arch=`echo ${ARCH} | awk '{print tolower([$]0)}'` defs="${ARCH} _${ARCH}_ ${arch} PALM_SIZE _MT _WINDOWS" if test "${SHARED_BUILD}" = "1" ; then # Static CE builds require static celib as well defs="${defs} _DLL" fi for i in $defs ; do AC_DEFINE_UNQUOTED($i, 1, [WinCE def ]$i) done AC_DEFINE_UNQUOTED(_WIN32_WCE, $CEVERSION, [_WIN32_WCE version]) AC_DEFINE_UNQUOTED(UNDER_CE, $CEVERSION, [UNDER_CE version]) CFLAGS_DEBUG="-nologo -Zi -Od" CFLAGS_OPTIMIZE="-nologo -Ox" lversion=`echo ${CEVERSION} | sed -e 's/\(.\)\(..\)/\1\.\2/'` lflags="-MACHINE:${ARCH} -LIBPATH:\"${CELIBPATH}\" -subsystem:windowsce,${lversion} -nologo" LINKBIN="\"${CEBINROOT}/link.exe\"" AC_SUBST(CELIB_DIR) else RC="rc" lflags="-nologo" LINKBIN="link" CFLAGS_DEBUG="-nologo -Z7 -Od -W3 -WX ${runtime}d" CFLAGS_OPTIMIZE="-nologo -O2 -W2 ${runtime}" fi fi if test "$GCC" = "yes"; then # mingw gcc mode AC_CHECK_TOOL(RC, windres) CFLAGS_DEBUG="-g" CFLAGS_OPTIMIZE="-O2 -fomit-frame-pointer" SHLIB_LD='${CC} -shared' UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a' LDFLAGS_CONSOLE="-wl,--subsystem,console ${lflags}" LDFLAGS_WINDOW="-wl,--subsystem,windows ${lflags}" AC_CACHE_CHECK(for cross-compile version of gcc, ac_cv_cross, AC_TRY_COMPILE([ #ifdef _WIN32 #error cross-compiler #endif ], [], ac_cv_cross=yes, ac_cv_cross=no) ) if test "$ac_cv_cross" = "yes"; then case "$do64bit" in amd64|x64|yes) CC="x86_64-w64-mingw32-gcc" LD="x86_64-w64-mingw32-ld" AR="x86_64-w64-mingw32-ar" RANLIB="x86_64-w64-mingw32-ranlib" RC="x86_64-w64-mingw32-windres" ;; *) CC="i686-w64-mingw32-gcc" LD="i686-w64-mingw32-ld" AR="i686-w64-mingw32-ar" RANLIB="i686-w64-mingw32-ranlib" RC="i686-w64-mingw32-windres" ;; esac fi else SHLIB_LD="${LINKBIN} -dll ${lflags}" # link -lib only works when -lib is the first arg STLIB_LD="${LINKBIN} -lib ${lflags}" UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.lib' PATHTYPE=-w # For information on what debugtype is most useful, see: # http://msdn.microsoft.com/library/en-us/dnvc60/html/gendepdebug.asp # and also # http://msdn2.microsoft.com/en-us/library/y0zzbyt4%28VS.80%29.aspx # This essentially turns it all on. LDFLAGS_DEBUG="-debug -debugtype:cv" LDFLAGS_OPTIMIZE="-release" if test "$doWince" != "no" ; then LDFLAGS_CONSOLE="-link ${lflags}" LDFLAGS_WINDOW=${LDFLAGS_CONSOLE} else LDFLAGS_CONSOLE="-link -subsystem:console ${lflags}" LDFLAGS_WINDOW="-link -subsystem:windows ${lflags}" fi fi SHLIB_SUFFIX=".dll" SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.dll' TCL_LIB_VERSIONS_OK=nodots ;; AIX-*) AS_IF([test "${TCL_THREADS}" = "1" -a "$GCC" != "yes"], [ # AIX requires the _r compiler when gcc isn't being used case "${CC}" in *_r|*_r\ *) # ok ... ;; *) # Make sure only first arg gets _r CC=`echo "$CC" | sed -e 's/^\([[^ ]]*\)/\1_r/'` ;; esac AC_MSG_RESULT([Using $CC for compiling with threads]) ]) LIBS="$LIBS -lc" SHLIB_CFLAGS="" SHLIB_SUFFIX=".so" LD_LIBRARY_PATH_VAR="LIBPATH" # Check to enable 64-bit flags for compiler/linker AS_IF([test "$do64bit" = yes], [ AS_IF([test "$GCC" = yes], [ AC_MSG_WARN([64bit mode not supported with GCC on $system]) ], [ do64bit_ok=yes CFLAGS="$CFLAGS -q64" LDFLAGS_ARCH="-q64" RANLIB="${RANLIB} -X64" AR="${AR} -X64" SHLIB_LD_FLAGS="-b64" ]) ]) AS_IF([test "`uname -m`" = ia64], [ # AIX-5 uses ELF style dynamic libraries on IA-64, but not PPC SHLIB_LD="/usr/ccs/bin/ld -G -z text" AS_IF([test "$GCC" = yes], [ CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}' ], [ CC_SEARCH_FLAGS='-R${LIB_RUNTIME_DIR}' ]) LD_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}' ], [ AS_IF([test "$GCC" = yes], [ SHLIB_LD='${CC} -shared -Wl,-bexpall' ], [ SHLIB_LD="/bin/ld -bhalt:4 -bM:SRE -bexpall -H512 -T512 -bnoentry" LDFLAGS="$LDFLAGS -brtl" ]) SHLIB_LD="${SHLIB_LD} ${SHLIB_LD_FLAGS}" CC_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} ]) ;; BeOS*) SHLIB_CFLAGS="-fPIC" SHLIB_LD='${CC} -nostart' SHLIB_SUFFIX=".so" #----------------------------------------------------------- # Check for inet_ntoa in -lbind, for BeOS (which also needs # -lsocket, even if the network functions are in -lnet which # is always linked to, for compatibility. #----------------------------------------------------------- AC_CHECK_LIB(bind, inet_ntoa, [LIBS="$LIBS -lbind -lsocket"]) ;; BSD/OS-4.*) SHLIB_CFLAGS="-export-dynamic -fPIC" SHLIB_LD='${CC} -shared' SHLIB_SUFFIX=".so" LDFLAGS="$LDFLAGS -export-dynamic" CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" ;; CYGWIN_*) SHLIB_CFLAGS="" SHLIB_LD='${CC} -shared' SHLIB_LD_LIBS="${SHLIB_LD_LIBS} -Wl,--out-implib,\$[@].a" SHLIB_SUFFIX=".dll" EXEEXT=".exe" do64bit_ok=yes CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" ;; Haiku*) LDFLAGS="$LDFLAGS -Wl,--export-dynamic" SHLIB_CFLAGS="-fPIC" SHLIB_SUFFIX=".so" SHLIB_LD='${CC} -shared ${CFLAGS} ${LDFLAGS}' AC_CHECK_LIB(network, inet_ntoa, [LIBS="$LIBS -lnetwork"]) ;; HP-UX-*.11.*) # Use updated header definitions where possible AC_DEFINE(_XOPEN_SOURCE_EXTENDED, 1, [Do we want to use the XOPEN network library?]) # TEA specific: Needed by Tcl, but not most extensions #AC_DEFINE(_XOPEN_SOURCE, 1, [Do we want to use the XOPEN network library?]) #LIBS="$LIBS -lxnet" # Use the XOPEN network library AS_IF([test "`uname -m`" = ia64], [ SHLIB_SUFFIX=".so" # Use newer C++ library for C++ extensions #if test "$GCC" != "yes" ; then # CPPFLAGS="-AA" #fi ], [ SHLIB_SUFFIX=".sl" ]) AC_CHECK_LIB(dld, shl_load, tcl_ok=yes, tcl_ok=no) AS_IF([test "$tcl_ok" = yes], [ LDFLAGS="$LDFLAGS -Wl,-E" CC_SEARCH_FLAGS='-Wl,+s,+b,${LIB_RUNTIME_DIR}:.' LD_SEARCH_FLAGS='+s +b ${LIB_RUNTIME_DIR}:.' LD_LIBRARY_PATH_VAR="SHLIB_PATH" ]) AS_IF([test "$GCC" = yes], [ SHLIB_LD='${CC} -shared' LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} ], [ CFLAGS="$CFLAGS -z" # Users may want PA-RISC 1.1/2.0 portable code - needs HP cc #CFLAGS="$CFLAGS +DAportable" SHLIB_CFLAGS="+z" SHLIB_LD="ld -b" ]) # Check to enable 64-bit flags for compiler/linker AS_IF([test "$do64bit" = "yes"], [ AS_IF([test "$GCC" = yes], [ case `${CC} -dumpmachine` in hppa64*) # 64-bit gcc in use. Fix flags for GNU ld. do64bit_ok=yes SHLIB_LD='${CC} -shared' AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}']) LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} ;; *) AC_MSG_WARN([64bit mode not supported with GCC on $system]) ;; esac ], [ do64bit_ok=yes CFLAGS="$CFLAGS +DD64" LDFLAGS_ARCH="+DD64" ]) ]) ;; IRIX-6.*) SHLIB_CFLAGS="" SHLIB_LD="ld -n32 -shared -rdata_shared" SHLIB_SUFFIX=".so" AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}']) AS_IF([test "$GCC" = yes], [ CFLAGS="$CFLAGS -mabi=n32" LDFLAGS="$LDFLAGS -mabi=n32" ], [ case $system in IRIX-6.3) # Use to build 6.2 compatible binaries on 6.3. CFLAGS="$CFLAGS -n32 -D_OLD_TERMIOS" ;; *) CFLAGS="$CFLAGS -n32" ;; esac LDFLAGS="$LDFLAGS -n32" ]) ;; IRIX64-6.*) SHLIB_CFLAGS="" SHLIB_LD="ld -n32 -shared -rdata_shared" SHLIB_SUFFIX=".so" AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}']) # Check to enable 64-bit flags for compiler/linker AS_IF([test "$do64bit" = yes], [ AS_IF([test "$GCC" = yes], [ AC_MSG_WARN([64bit mode not supported by gcc]) ], [ do64bit_ok=yes SHLIB_LD="ld -64 -shared -rdata_shared" CFLAGS="$CFLAGS -64" LDFLAGS_ARCH="-64" ]) ]) ;; Linux*|GNU*|NetBSD-Debian) SHLIB_CFLAGS="-fPIC" SHLIB_SUFFIX=".so" # TEA specific: CFLAGS_OPTIMIZE="-O2 -fomit-frame-pointer" # TEA specific: use LDFLAGS_DEFAULT instead of LDFLAGS SHLIB_LD='${CC} -shared ${CFLAGS} ${LDFLAGS_DEFAULT}' LDFLAGS="$LDFLAGS -Wl,--export-dynamic" AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}']) LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} AS_IF([test "`uname -m`" = "alpha"], [CFLAGS="$CFLAGS -mieee"]) AS_IF([test $do64bit = yes], [ AC_CACHE_CHECK([if compiler accepts -m64 flag], tcl_cv_cc_m64, [ hold_cflags=$CFLAGS CFLAGS="$CFLAGS -m64" AC_TRY_LINK(,, tcl_cv_cc_m64=yes, tcl_cv_cc_m64=no) CFLAGS=$hold_cflags]) AS_IF([test $tcl_cv_cc_m64 = yes], [ CFLAGS="$CFLAGS -m64" do64bit_ok=yes ]) ]) # The combo of gcc + glibc has a bug related to inlining of # functions like strtod(). The -fno-builtin flag should address # this problem but it does not work. The -fno-inline flag is kind # of overkill but it works. Disable inlining only when one of the # files in compat/*.c is being linked in. AS_IF([test x"${USE_COMPAT}" != x],[CFLAGS="$CFLAGS -fno-inline"]) ;; Lynx*) SHLIB_CFLAGS="-fPIC" SHLIB_SUFFIX=".so" CFLAGS_OPTIMIZE=-02 SHLIB_LD='${CC} -shared' LD_FLAGS="-Wl,--export-dynamic" AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}']) ;; OpenBSD-*) arch=`arch -s` case "$arch" in vax) SHLIB_SUFFIX="" SHARED_LIB_SUFFIX="" LDFLAGS="" ;; *) case "$arch" in alpha|sparc64) SHLIB_CFLAGS="-fPIC" ;; *) SHLIB_CFLAGS="-fpic" ;; esac SHLIB_LD='${CC} -shared ${SHLIB_CFLAGS}' SHLIB_SUFFIX=".so" AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}']) LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.so${SHLIB_VERSION}' LDFLAGS="-Wl,-export-dynamic" ;; esac case "$arch" in vax) CFLAGS_OPTIMIZE="-O1" ;; *) CFLAGS_OPTIMIZE="-O2" ;; esac AS_IF([test "${TCL_THREADS}" = "1"], [ # On OpenBSD: Compile with -pthread # Don't link with -lpthread LIBS=`echo $LIBS | sed s/-lpthread//` CFLAGS="$CFLAGS -pthread" ]) # OpenBSD doesn't do version numbers with dots. UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a' TCL_LIB_VERSIONS_OK=nodots ;; NetBSD-*) # NetBSD has ELF and can use 'cc -shared' to build shared libs SHLIB_CFLAGS="-fPIC" SHLIB_LD='${CC} -shared ${SHLIB_CFLAGS}' SHLIB_SUFFIX=".so" LDFLAGS="$LDFLAGS -export-dynamic" AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}']) LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} AS_IF([test "${TCL_THREADS}" = "1"], [ # The -pthread needs to go in the CFLAGS, not LIBS LIBS=`echo $LIBS | sed s/-pthread//` CFLAGS="$CFLAGS -pthread" LDFLAGS="$LDFLAGS -pthread" ]) ;; FreeBSD-*) # This configuration from FreeBSD Ports. SHLIB_CFLAGS="-fPIC" SHLIB_LD="${CC} -shared" SHLIB_LD_LIBS="${SHLIB_LD_LIBS} -Wl,-soname,\$[@]" SHLIB_SUFFIX=".so" LDFLAGS="" AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}']) AS_IF([test "${TCL_THREADS}" = "1"], [ # The -pthread needs to go in the LDFLAGS, not LIBS LIBS=`echo $LIBS | sed s/-pthread//` CFLAGS="$CFLAGS $PTHREAD_CFLAGS" LDFLAGS="$LDFLAGS $PTHREAD_LIBS"]) case $system in FreeBSD-3.*) # Version numbers are dot-stripped by system policy. TCL_TRIM_DOTS=`echo ${PACKAGE_VERSION} | tr -d .` UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a' SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}\$\{DBGX\}.so.1' TCL_LIB_VERSIONS_OK=nodots ;; esac ;; Darwin-*) CFLAGS_OPTIMIZE="-Os" SHLIB_CFLAGS="-fno-common" # To avoid discrepancies between what headers configure sees during # preprocessing tests and compiling tests, move any -isysroot and # -mmacosx-version-min flags from CFLAGS to CPPFLAGS: CPPFLAGS="${CPPFLAGS} `echo " ${CFLAGS}" | \ awk 'BEGIN {FS=" +-";ORS=" "}; {for (i=2;i<=NF;i++) \ if ([$]i~/^(isysroot|mmacosx-version-min)/) print "-"[$]i}'`" CFLAGS="`echo " ${CFLAGS}" | \ awk 'BEGIN {FS=" +-";ORS=" "}; {for (i=2;i<=NF;i++) \ if (!([$]i~/^(isysroot|mmacosx-version-min)/)) print "-"[$]i}'`" AS_IF([test $do64bit = yes], [ case `arch` in ppc) AC_CACHE_CHECK([if compiler accepts -arch ppc64 flag], tcl_cv_cc_arch_ppc64, [ hold_cflags=$CFLAGS CFLAGS="$CFLAGS -arch ppc64 -mpowerpc64 -mcpu=G5" AC_TRY_LINK(,, tcl_cv_cc_arch_ppc64=yes, tcl_cv_cc_arch_ppc64=no) CFLAGS=$hold_cflags]) AS_IF([test $tcl_cv_cc_arch_ppc64 = yes], [ CFLAGS="$CFLAGS -arch ppc64 -mpowerpc64 -mcpu=G5" do64bit_ok=yes ]);; i386) AC_CACHE_CHECK([if compiler accepts -arch x86_64 flag], tcl_cv_cc_arch_x86_64, [ hold_cflags=$CFLAGS CFLAGS="$CFLAGS -arch x86_64" AC_TRY_LINK(,, tcl_cv_cc_arch_x86_64=yes, tcl_cv_cc_arch_x86_64=no) CFLAGS=$hold_cflags]) AS_IF([test $tcl_cv_cc_arch_x86_64 = yes], [ CFLAGS="$CFLAGS -arch x86_64" do64bit_ok=yes ]);; *) AC_MSG_WARN([Don't know how enable 64-bit on architecture `arch`]);; esac ], [ # Check for combined 32-bit and 64-bit fat build AS_IF([echo "$CFLAGS " |grep -E -q -- '-arch (ppc64|x86_64) ' \ && echo "$CFLAGS " |grep -E -q -- '-arch (ppc|i386) '], [ fat_32_64=yes]) ]) # TEA specific: use LDFLAGS_DEFAULT instead of LDFLAGS SHLIB_LD='${CC} -dynamiclib ${CFLAGS} ${LDFLAGS_DEFAULT}' AC_CACHE_CHECK([if ld accepts -single_module flag], tcl_cv_ld_single_module, [ hold_ldflags=$LDFLAGS LDFLAGS="$LDFLAGS -dynamiclib -Wl,-single_module" AC_TRY_LINK(, [int i;], tcl_cv_ld_single_module=yes, tcl_cv_ld_single_module=no) LDFLAGS=$hold_ldflags]) AS_IF([test $tcl_cv_ld_single_module = yes], [ SHLIB_LD="${SHLIB_LD} -Wl,-single_module" ]) # TEA specific: link shlib with current and compatibility version flags vers=`echo ${PACKAGE_VERSION} | sed -e 's/^\([[0-9]]\{1,5\}\)\(\(\.[[0-9]]\{1,3\}\)\{0,2\}\).*$/\1\2/p' -e d` SHLIB_LD="${SHLIB_LD} -current_version ${vers:-0} -compatibility_version ${vers:-0}" SHLIB_SUFFIX=".dylib" # Don't use -prebind when building for Mac OS X 10.4 or later only: AS_IF([test "`echo "${MACOSX_DEPLOYMENT_TARGET}" | awk -F '10\\.' '{print int([$]2)}'`" -lt 4 -a \ "`echo "${CPPFLAGS}" | awk -F '-mmacosx-version-min=10\\.' '{print int([$]2)}'`" -lt 4], [ LDFLAGS="$LDFLAGS -prebind"]) LDFLAGS="$LDFLAGS -headerpad_max_install_names" AC_CACHE_CHECK([if ld accepts -search_paths_first flag], tcl_cv_ld_search_paths_first, [ hold_ldflags=$LDFLAGS LDFLAGS="$LDFLAGS -Wl,-search_paths_first" AC_TRY_LINK(, [int i;], tcl_cv_ld_search_paths_first=yes, tcl_cv_ld_search_paths_first=no) LDFLAGS=$hold_ldflags]) AS_IF([test $tcl_cv_ld_search_paths_first = yes], [ LDFLAGS="$LDFLAGS -Wl,-search_paths_first" ]) AS_IF([test "$tcl_cv_cc_visibility_hidden" != yes], [ AC_DEFINE(MODULE_SCOPE, [__private_extern__], [Compiler support for module scope symbols]) tcl_cv_cc_visibility_hidden=yes ]) CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" LD_LIBRARY_PATH_VAR="DYLD_LIBRARY_PATH" # TEA specific: for combined 32 & 64 bit fat builds of Tk # extensions, verify that 64-bit build is possible. AS_IF([test "$fat_32_64" = yes && test -n "${TK_BIN_DIR}"], [ AS_IF([test "${TEA_WINDOWINGSYSTEM}" = x11], [ AC_CACHE_CHECK([for 64-bit X11], tcl_cv_lib_x11_64, [ for v in CFLAGS CPPFLAGS LDFLAGS; do eval 'hold_'$v'="$'$v'";'$v'="`echo "$'$v' "|sed -e "s/-arch ppc / /g" -e "s/-arch i386 / /g"`"' done CPPFLAGS="$CPPFLAGS -I/usr/X11R6/include" LDFLAGS="$LDFLAGS -L/usr/X11R6/lib -lX11" AC_TRY_LINK([#include ], [XrmInitialize();], tcl_cv_lib_x11_64=yes, tcl_cv_lib_x11_64=no) for v in CFLAGS CPPFLAGS LDFLAGS; do eval $v'="$hold_'$v'"' done]) ]) AS_IF([test "${TEA_WINDOWINGSYSTEM}" = aqua], [ AC_CACHE_CHECK([for 64-bit Tk], tcl_cv_lib_tk_64, [ for v in CFLAGS CPPFLAGS LDFLAGS; do eval 'hold_'$v'="$'$v'";'$v'="`echo "$'$v' "|sed -e "s/-arch ppc / /g" -e "s/-arch i386 / /g"`"' done CPPFLAGS="$CPPFLAGS -DUSE_TCL_STUBS=1 -DUSE_TK_STUBS=1 ${TCL_INCLUDES} ${TK_INCLUDES}" LDFLAGS="$LDFLAGS ${TCL_STUB_LIB_SPEC} ${TK_STUB_LIB_SPEC}" AC_TRY_LINK([#include ], [Tk_InitStubs(NULL, "", 0);], tcl_cv_lib_tk_64=yes, tcl_cv_lib_tk_64=no) for v in CFLAGS CPPFLAGS LDFLAGS; do eval $v'="$hold_'$v'"' done]) ]) # remove 64-bit arch flags from CFLAGS et al. if configuration # does not support 64-bit. AS_IF([test "$tcl_cv_lib_tk_64" = no -o "$tcl_cv_lib_x11_64" = no], [ AC_MSG_NOTICE([Removing 64-bit architectures from compiler & linker flags]) for v in CFLAGS CPPFLAGS LDFLAGS; do eval $v'="`echo "$'$v' "|sed -e "s/-arch ppc64 / /g" -e "s/-arch x86_64 / /g"`"' done]) ]) ;; OS/390-*) CFLAGS_OPTIMIZE="" # Optimizer is buggy AC_DEFINE(_OE_SOCKETS, 1, # needed in sys/socket.h [Should OS/390 do the right thing with sockets?]) ;; OSF1-V*) # Digital OSF/1 SHLIB_CFLAGS="" AS_IF([test "$SHARED_BUILD" = 1], [ SHLIB_LD='ld -shared -expect_unresolved "*"' ], [ SHLIB_LD='ld -non_shared -expect_unresolved "*"' ]) SHLIB_SUFFIX=".so" AS_IF([test $doRpath = yes], [ CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}']) AS_IF([test "$GCC" = yes], [CFLAGS="$CFLAGS -mieee"], [ CFLAGS="$CFLAGS -DHAVE_TZSET -std1 -ieee"]) # see pthread_intro(3) for pthread support on osf1, k.furukawa AS_IF([test "${TCL_THREADS}" = 1], [ CFLAGS="$CFLAGS -DHAVE_PTHREAD_ATTR_SETSTACKSIZE" CFLAGS="$CFLAGS -DTCL_THREAD_STACK_MIN=PTHREAD_STACK_MIN*64" LIBS=`echo $LIBS | sed s/-lpthreads//` AS_IF([test "$GCC" = yes], [ LIBS="$LIBS -lpthread -lmach -lexc" ], [ CFLAGS="$CFLAGS -pthread" LDFLAGS="$LDFLAGS -pthread" ]) ]) ;; QNX-6*) # QNX RTP # This may work for all QNX, but it was only reported for v6. SHLIB_CFLAGS="-fPIC" SHLIB_LD="ld -Bshareable -x" SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" ;; SCO_SV-3.2*) AS_IF([test "$GCC" = yes], [ SHLIB_CFLAGS="-fPIC -melf" LDFLAGS="$LDFLAGS -melf -Wl,-Bexport" ], [ SHLIB_CFLAGS="-Kpic -belf" LDFLAGS="$LDFLAGS -belf -Wl,-Bexport" ]) SHLIB_LD="ld -G" SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" ;; SunOS-5.[[0-6]]) # Careful to not let 5.10+ fall into this case # Note: If _REENTRANT isn't defined, then Solaris # won't define thread-safe library routines. AC_DEFINE(_REENTRANT, 1, [Do we want the reentrant OS API?]) AC_DEFINE(_POSIX_PTHREAD_SEMANTICS, 1, [Do we really want to follow the standard? Yes we do!]) SHLIB_CFLAGS="-KPIC" SHLIB_SUFFIX=".so" AS_IF([test "$GCC" = yes], [ SHLIB_LD='${CC} -shared' CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} ], [ SHLIB_LD="/usr/ccs/bin/ld -G -z text" CC_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} ]) ;; SunOS-5*) # Note: If _REENTRANT isn't defined, then Solaris # won't define thread-safe library routines. AC_DEFINE(_REENTRANT, 1, [Do we want the reentrant OS API?]) AC_DEFINE(_POSIX_PTHREAD_SEMANTICS, 1, [Do we really want to follow the standard? Yes we do!]) SHLIB_CFLAGS="-KPIC" # Check to enable 64-bit flags for compiler/linker AS_IF([test "$do64bit" = yes], [ arch=`isainfo` AS_IF([test "$arch" = "sparcv9 sparc"], [ AS_IF([test "$GCC" = yes], [ AS_IF([test "`${CC} -dumpversion | awk -F. '{print [$]1}'`" -lt 3], [ AC_MSG_WARN([64bit mode not supported with GCC < 3.2 on $system]) ], [ do64bit_ok=yes CFLAGS="$CFLAGS -m64 -mcpu=v9" LDFLAGS="$LDFLAGS -m64 -mcpu=v9" SHLIB_CFLAGS="-fPIC" ]) ], [ do64bit_ok=yes AS_IF([test "$do64bitVIS" = yes], [ CFLAGS="$CFLAGS -xarch=v9a" LDFLAGS_ARCH="-xarch=v9a" ], [ CFLAGS="$CFLAGS -xarch=v9" LDFLAGS_ARCH="-xarch=v9" ]) # Solaris 64 uses this as well #LD_LIBRARY_PATH_VAR="LD_LIBRARY_PATH_64" ]) ], [AS_IF([test "$arch" = "amd64 i386"], [ AS_IF([test "$GCC" = yes], [ case $system in SunOS-5.1[[1-9]]*|SunOS-5.[[2-9]][[0-9]]*) do64bit_ok=yes CFLAGS="$CFLAGS -m64" LDFLAGS="$LDFLAGS -m64";; *) AC_MSG_WARN([64bit mode not supported with GCC on $system]);; esac ], [ do64bit_ok=yes case $system in SunOS-5.1[[1-9]]*|SunOS-5.[[2-9]][[0-9]]*) CFLAGS="$CFLAGS -m64" LDFLAGS="$LDFLAGS -m64";; *) CFLAGS="$CFLAGS -xarch=amd64" LDFLAGS="$LDFLAGS -xarch=amd64";; esac ]) ], [AC_MSG_WARN([64bit mode not supported for $arch])])]) ]) SHLIB_SUFFIX=".so" AS_IF([test "$GCC" = yes], [ SHLIB_LD='${CC} -shared' CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} AS_IF([test "$do64bit_ok" = yes], [ AS_IF([test "$arch" = "sparcv9 sparc"], [ # We need to specify -static-libgcc or we need to # add the path to the sparv9 libgcc. # JH: static-libgcc is necessary for core Tcl, but may # not be necessary for extensions. SHLIB_LD="$SHLIB_LD -m64 -mcpu=v9 -static-libgcc" # for finding sparcv9 libgcc, get the regular libgcc # path, remove so name and append 'sparcv9' #v9gcclibdir="`gcc -print-file-name=libgcc_s.so` | ..." #CC_SEARCH_FLAGS="${CC_SEARCH_FLAGS},-R,$v9gcclibdir" ], [AS_IF([test "$arch" = "amd64 i386"], [ # JH: static-libgcc is necessary for core Tcl, but may # not be necessary for extensions. SHLIB_LD="$SHLIB_LD -m64 -static-libgcc" ])]) ]) ], [ case $system in SunOS-5.[[1-9]][[0-9]]*) # TEA specific: use LDFLAGS_DEFAULT instead of LDFLAGS SHLIB_LD='${CC} -G -z text ${LDFLAGS_DEFAULT}';; *) SHLIB_LD='/usr/ccs/bin/ld -G -z text';; esac CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}' LD_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}' ]) ;; UNIX_SV* | UnixWare-5*) SHLIB_CFLAGS="-KPIC" SHLIB_LD='${CC} -G' SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" # Some UNIX_SV* systems (unixware 1.1.2 for example) have linkers # that don't grok the -Bexport option. Test that it does. AC_CACHE_CHECK([for ld accepts -Bexport flag], tcl_cv_ld_Bexport, [ hold_ldflags=$LDFLAGS LDFLAGS="$LDFLAGS -Wl,-Bexport" AC_TRY_LINK(, [int i;], tcl_cv_ld_Bexport=yes, tcl_cv_ld_Bexport=no) LDFLAGS=$hold_ldflags]) AS_IF([test $tcl_cv_ld_Bexport = yes], [ LDFLAGS="$LDFLAGS -Wl,-Bexport" ]) CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" ;; esac AS_IF([test "$do64bit" = yes -a "$do64bit_ok" = no], [ AC_MSG_WARN([64bit support being disabled -- don't know magic for this platform]) ]) dnl # Add any CPPFLAGS set in the environment to our CFLAGS, but delay doing so dnl # until the end of configure, as configure's compile and link tests use dnl # both CPPFLAGS and CFLAGS (unlike our compile and link) but configure's dnl # preprocessing tests use only CPPFLAGS. AC_CONFIG_COMMANDS_PRE([CFLAGS="${CFLAGS} ${CPPFLAGS}"; CPPFLAGS=""]) # Add in the arch flags late to ensure it wasn't removed. # Not necessary in TEA, but this is aligned with core LDFLAGS="$LDFLAGS $LDFLAGS_ARCH" # If we're running gcc, then change the C flags for compiling shared # libraries to the right flags for gcc, instead of those for the # standard manufacturer compiler. AS_IF([test "$GCC" = yes], [ case $system in AIX-*) ;; BSD/OS*) ;; CYGWIN_*|MINGW32_*) ;; IRIX*) ;; NetBSD-*|FreeBSD-*|OpenBSD-*) ;; Darwin-*) ;; SCO_SV-3.2*) ;; windows) ;; *) SHLIB_CFLAGS="-fPIC" ;; esac]) AS_IF([test "$tcl_cv_cc_visibility_hidden" != yes], [ AC_DEFINE(MODULE_SCOPE, [extern], [No Compiler support for module scope symbols]) ]) AS_IF([test "$SHARED_LIB_SUFFIX" = ""], [ # TEA specific: use PACKAGE_VERSION instead of VERSION SHARED_LIB_SUFFIX='${PACKAGE_VERSION}${SHLIB_SUFFIX}']) AS_IF([test "$UNSHARED_LIB_SUFFIX" = ""], [ # TEA specific: use PACKAGE_VERSION instead of VERSION UNSHARED_LIB_SUFFIX='${PACKAGE_VERSION}.a']) if test "${GCC}" = "yes" -a ${SHLIB_SUFFIX} = ".dll"; then AC_CACHE_CHECK(for SEH support in compiler, tcl_cv_seh, AC_TRY_RUN([ #define WIN32_LEAN_AND_MEAN #include #undef WIN32_LEAN_AND_MEAN int main(int argc, char** argv) { int a, b = 0; __try { a = 666 / b; } __except (EXCEPTION_EXECUTE_HANDLER) { return 0; } return 1; } ], tcl_cv_seh=yes, tcl_cv_seh=no, tcl_cv_seh=no) ) if test "$tcl_cv_seh" = "no" ; then AC_DEFINE(HAVE_NO_SEH, 1, [Defined when mingw does not support SEH]) fi # # Check to see if the excpt.h include file provided contains the # definition for EXCEPTION_DISPOSITION; if not, which is the case # with Cygwin's version as of 2002-04-10, define it to be int, # sufficient for getting the current code to work. # AC_CACHE_CHECK(for EXCEPTION_DISPOSITION support in include files, tcl_cv_eh_disposition, AC_TRY_COMPILE([ # define WIN32_LEAN_AND_MEAN # include # undef WIN32_LEAN_AND_MEAN ],[ EXCEPTION_DISPOSITION x; ], tcl_cv_eh_disposition=yes, tcl_cv_eh_disposition=no) ) if test "$tcl_cv_eh_disposition" = "no" ; then AC_DEFINE(EXCEPTION_DISPOSITION, int, [Defined when cygwin/mingw does not support EXCEPTION DISPOSITION]) fi # Check to see if winnt.h defines CHAR, SHORT, and LONG # even if VOID has already been #defined. The win32api # used by mingw and cygwin is known to do this. AC_CACHE_CHECK(for winnt.h that ignores VOID define, tcl_cv_winnt_ignore_void, AC_TRY_COMPILE([ #define VOID void #define WIN32_LEAN_AND_MEAN #include #undef WIN32_LEAN_AND_MEAN ], [ CHAR c; SHORT s; LONG l; ], tcl_cv_winnt_ignore_void=yes, tcl_cv_winnt_ignore_void=no) ) if test "$tcl_cv_winnt_ignore_void" = "yes" ; then AC_DEFINE(HAVE_WINNT_IGNORE_VOID, 1, [Defined when cygwin/mingw ignores VOID define in winnt.h]) fi fi # See if the compiler supports casting to a union type. # This is used to stop gcc from printing a compiler # warning when initializing a union member. AC_CACHE_CHECK(for cast to union support, tcl_cv_cast_to_union, AC_TRY_COMPILE([], [ union foo { int i; double d; }; union foo f = (union foo) (int) 0; ], tcl_cv_cast_to_union=yes, tcl_cv_cast_to_union=no) ) if test "$tcl_cv_cast_to_union" = "yes"; then AC_DEFINE(HAVE_CAST_TO_UNION, 1, [Defined when compiler supports casting to union type.]) fi AC_SUBST(CFLAGS_DEBUG) AC_SUBST(CFLAGS_OPTIMIZE) AC_SUBST(CFLAGS_WARNING) AC_SUBST(STLIB_LD) AC_SUBST(SHLIB_LD) AC_SUBST(SHLIB_LD_LIBS) AC_SUBST(SHLIB_CFLAGS) AC_SUBST(LD_LIBRARY_PATH_VAR) # These must be called after we do the basic CFLAGS checks and # verify any possible 64-bit or similar switches are necessary TEA_TCL_EARLY_FLAGS TEA_TCL_64BIT_FLAGS ]) #-------------------------------------------------------------------- # TEA_SERIAL_PORT # # Determine which interface to use to talk to the serial port. # Note that #include lines must begin in leftmost column for # some compilers to recognize them as preprocessor directives, # and some build environments have stdin not pointing at a # pseudo-terminal (usually /dev/null instead.) # # Arguments: # none # # Results: # # Defines only one of the following vars: # HAVE_SYS_MODEM_H # USE_TERMIOS # USE_TERMIO # USE_SGTTY #-------------------------------------------------------------------- AC_DEFUN([TEA_SERIAL_PORT], [ AC_CHECK_HEADERS(sys/modem.h) AC_CACHE_CHECK([termios vs. termio vs. sgtty], tcl_cv_api_serial, [ AC_TRY_RUN([ #include int main() { struct termios t; if (tcgetattr(0, &t) == 0) { cfsetospeed(&t, 0); t.c_cflag |= PARENB | PARODD | CSIZE | CSTOPB; return 0; } return 1; }], tcl_cv_api_serial=termios, tcl_cv_api_serial=no, tcl_cv_api_serial=no) if test $tcl_cv_api_serial = no ; then AC_TRY_RUN([ #include int main() { struct termio t; if (ioctl(0, TCGETA, &t) == 0) { t.c_cflag |= CBAUD | PARENB | PARODD | CSIZE | CSTOPB; return 0; } return 1; }], tcl_cv_api_serial=termio, tcl_cv_api_serial=no, tcl_cv_api_serial=no) fi if test $tcl_cv_api_serial = no ; then AC_TRY_RUN([ #include int main() { struct sgttyb t; if (ioctl(0, TIOCGETP, &t) == 0) { t.sg_ospeed = 0; t.sg_flags |= ODDP | EVENP | RAW; return 0; } return 1; }], tcl_cv_api_serial=sgtty, tcl_cv_api_serial=no, tcl_cv_api_serial=no) fi if test $tcl_cv_api_serial = no ; then AC_TRY_RUN([ #include #include int main() { struct termios t; if (tcgetattr(0, &t) == 0 || errno == ENOTTY || errno == ENXIO || errno == EINVAL) { cfsetospeed(&t, 0); t.c_cflag |= PARENB | PARODD | CSIZE | CSTOPB; return 0; } return 1; }], tcl_cv_api_serial=termios, tcl_cv_api_serial=no, tcl_cv_api_serial=no) fi if test $tcl_cv_api_serial = no; then AC_TRY_RUN([ #include #include int main() { struct termio t; if (ioctl(0, TCGETA, &t) == 0 || errno == ENOTTY || errno == ENXIO || errno == EINVAL) { t.c_cflag |= CBAUD | PARENB | PARODD | CSIZE | CSTOPB; return 0; } return 1; }], tcl_cv_api_serial=termio, tcl_cv_api_serial=no, tcl_cv_api_serial=no) fi if test $tcl_cv_api_serial = no; then AC_TRY_RUN([ #include #include int main() { struct sgttyb t; if (ioctl(0, TIOCGETP, &t) == 0 || errno == ENOTTY || errno == ENXIO || errno == EINVAL) { t.sg_ospeed = 0; t.sg_flags |= ODDP | EVENP | RAW; return 0; } return 1; }], tcl_cv_api_serial=sgtty, tcl_cv_api_serial=none, tcl_cv_api_serial=none) fi]) case $tcl_cv_api_serial in termios) AC_DEFINE(USE_TERMIOS, 1, [Use the termios API for serial lines]);; termio) AC_DEFINE(USE_TERMIO, 1, [Use the termio API for serial lines]);; sgtty) AC_DEFINE(USE_SGTTY, 1, [Use the sgtty API for serial lines]);; esac ]) #-------------------------------------------------------------------- # TEA_MISSING_POSIX_HEADERS # # Supply substitutes for missing POSIX header files. Special # notes: # - stdlib.h doesn't define strtol, strtoul, or # strtod in some versions of SunOS # - some versions of string.h don't declare procedures such # as strstr # # Arguments: # none # # Results: # # Defines some of the following vars: # NO_DIRENT_H # NO_ERRNO_H # NO_VALUES_H # HAVE_LIMITS_H or NO_LIMITS_H # NO_STDLIB_H # NO_STRING_H # NO_SYS_WAIT_H # NO_DLFCN_H # HAVE_SYS_PARAM_H # # HAVE_STRING_H ? # # tkUnixPort.h checks for HAVE_LIMITS_H, so do both HAVE and # CHECK on limits.h #-------------------------------------------------------------------- AC_DEFUN([TEA_MISSING_POSIX_HEADERS], [ AC_CACHE_CHECK([dirent.h], tcl_cv_dirent_h, [ AC_TRY_LINK([#include #include ], [ #ifndef _POSIX_SOURCE # ifdef __Lynx__ /* * Generate compilation error to make the test fail: Lynx headers * are only valid if really in the POSIX environment. */ missing_procedure(); # endif #endif DIR *d; struct dirent *entryPtr; char *p; d = opendir("foobar"); entryPtr = readdir(d); p = entryPtr->d_name; closedir(d); ], tcl_cv_dirent_h=yes, tcl_cv_dirent_h=no)]) if test $tcl_cv_dirent_h = no; then AC_DEFINE(NO_DIRENT_H, 1, [Do we have ?]) fi # TEA specific: AC_CHECK_HEADER(errno.h, , [AC_DEFINE(NO_ERRNO_H, 1, [Do we have ?])]) AC_CHECK_HEADER(float.h, , [AC_DEFINE(NO_FLOAT_H, 1, [Do we have ?])]) AC_CHECK_HEADER(values.h, , [AC_DEFINE(NO_VALUES_H, 1, [Do we have ?])]) AC_CHECK_HEADER(limits.h, [AC_DEFINE(HAVE_LIMITS_H, 1, [Do we have ?])], [AC_DEFINE(NO_LIMITS_H, 1, [Do we have ?])]) AC_CHECK_HEADER(stdlib.h, tcl_ok=1, tcl_ok=0) AC_EGREP_HEADER(strtol, stdlib.h, , tcl_ok=0) AC_EGREP_HEADER(strtoul, stdlib.h, , tcl_ok=0) AC_EGREP_HEADER(strtod, stdlib.h, , tcl_ok=0) if test $tcl_ok = 0; then AC_DEFINE(NO_STDLIB_H, 1, [Do we have ?]) fi AC_CHECK_HEADER(string.h, tcl_ok=1, tcl_ok=0) AC_EGREP_HEADER(strstr, string.h, , tcl_ok=0) AC_EGREP_HEADER(strerror, string.h, , tcl_ok=0) # See also memmove check below for a place where NO_STRING_H can be # set and why. if test $tcl_ok = 0; then AC_DEFINE(NO_STRING_H, 1, [Do we have ?]) fi AC_CHECK_HEADER(sys/wait.h, , [AC_DEFINE(NO_SYS_WAIT_H, 1, [Do we have ?])]) AC_CHECK_HEADER(dlfcn.h, , [AC_DEFINE(NO_DLFCN_H, 1, [Do we have ?])]) # OS/390 lacks sys/param.h (and doesn't need it, by chance). AC_HAVE_HEADERS(sys/param.h) ]) #-------------------------------------------------------------------- # TEA_PATH_X # # Locate the X11 header files and the X11 library archive. Try # the ac_path_x macro first, but if it doesn't find the X stuff # (e.g. because there's no xmkmf program) then check through # a list of possible directories. Under some conditions the # autoconf macro will return an include directory that contains # no include files, so double-check its result just to be safe. # # This should be called after TEA_CONFIG_CFLAGS as setting the # LIBS line can confuse some configure macro magic. # # Arguments: # none # # Results: # # Sets the following vars: # XINCLUDES # XLIBSW # PKG_LIBS (appends to) #-------------------------------------------------------------------- AC_DEFUN([TEA_PATH_X], [ if test "${TEA_WINDOWINGSYSTEM}" = "x11" ; then TEA_PATH_UNIX_X fi ]) AC_DEFUN([TEA_PATH_UNIX_X], [ AC_PATH_X not_really_there="" if test "$no_x" = ""; then if test "$x_includes" = ""; then AC_TRY_CPP([#include ], , not_really_there="yes") else if test ! -r $x_includes/X11/Xlib.h; then not_really_there="yes" fi fi fi if test "$no_x" = "yes" -o "$not_really_there" = "yes"; then AC_MSG_CHECKING([for X11 header files]) found_xincludes="no" AC_TRY_CPP([#include ], found_xincludes="yes", found_xincludes="no") if test "$found_xincludes" = "no"; then dirs="/usr/unsupported/include /usr/local/include /usr/X386/include /usr/X11R6/include /usr/X11R5/include /usr/include/X11R5 /usr/include/X11R4 /usr/openwin/include /usr/X11/include /usr/sww/include" for i in $dirs ; do if test -r $i/X11/Xlib.h; then AC_MSG_RESULT([$i]) XINCLUDES=" -I$i" found_xincludes="yes" break fi done fi else if test "$x_includes" != ""; then XINCLUDES="-I$x_includes" found_xincludes="yes" fi fi if test "$found_xincludes" = "no"; then AC_MSG_RESULT([couldn't find any!]) fi if test "$no_x" = yes; then AC_MSG_CHECKING([for X11 libraries]) XLIBSW=nope dirs="/usr/unsupported/lib /usr/local/lib /usr/X386/lib /usr/X11R6/lib /usr/X11R5/lib /usr/lib/X11R5 /usr/lib/X11R4 /usr/openwin/lib /usr/X11/lib /usr/sww/X11/lib" for i in $dirs ; do if test -r $i/libX11.a -o -r $i/libX11.so -o -r $i/libX11.sl -o -r $i/libX11.dylib; then AC_MSG_RESULT([$i]) XLIBSW="-L$i -lX11" x_libraries="$i" break fi done else if test "$x_libraries" = ""; then XLIBSW=-lX11 else XLIBSW="-L$x_libraries -lX11" fi fi if test "$XLIBSW" = nope ; then AC_CHECK_LIB(Xwindow, XCreateWindow, XLIBSW=-lXwindow) fi if test "$XLIBSW" = nope ; then AC_MSG_RESULT([could not find any! Using -lX11.]) XLIBSW=-lX11 fi # TEA specific: if test x"${XLIBSW}" != x ; then PKG_LIBS="${PKG_LIBS} ${XLIBSW}" fi ]) #-------------------------------------------------------------------- # TEA_BLOCKING_STYLE # # The statements below check for systems where POSIX-style # non-blocking I/O (O_NONBLOCK) doesn't work or is unimplemented. # On these systems (mostly older ones), use the old BSD-style # FIONBIO approach instead. # # Arguments: # none # # Results: # # Defines some of the following vars: # HAVE_SYS_IOCTL_H # HAVE_SYS_FILIO_H # USE_FIONBIO # O_NONBLOCK #-------------------------------------------------------------------- AC_DEFUN([TEA_BLOCKING_STYLE], [ AC_CHECK_HEADERS(sys/ioctl.h) AC_CHECK_HEADERS(sys/filio.h) TEA_CONFIG_SYSTEM AC_MSG_CHECKING([FIONBIO vs. O_NONBLOCK for nonblocking I/O]) case $system in OSF*) AC_DEFINE(USE_FIONBIO, 1, [Should we use FIONBIO?]) AC_MSG_RESULT([FIONBIO]) ;; *) AC_MSG_RESULT([O_NONBLOCK]) ;; esac ]) #-------------------------------------------------------------------- # TEA_TIME_HANDLER # # Checks how the system deals with time.h, what time structures # are used on the system, and what fields the structures have. # # Arguments: # none # # Results: # # Defines some of the following vars: # USE_DELTA_FOR_TZ # HAVE_TM_GMTOFF # HAVE_TM_TZADJ # HAVE_TIMEZONE_VAR #-------------------------------------------------------------------- AC_DEFUN([TEA_TIME_HANDLER], [ AC_CHECK_HEADERS(sys/time.h) AC_HEADER_TIME AC_STRUCT_TIMEZONE AC_CHECK_FUNCS(gmtime_r localtime_r) AC_CACHE_CHECK([tm_tzadj in struct tm], tcl_cv_member_tm_tzadj, [ AC_TRY_COMPILE([#include ], [struct tm tm; tm.tm_tzadj;], tcl_cv_member_tm_tzadj=yes, tcl_cv_member_tm_tzadj=no)]) if test $tcl_cv_member_tm_tzadj = yes ; then AC_DEFINE(HAVE_TM_TZADJ, 1, [Should we use the tm_tzadj field of struct tm?]) fi AC_CACHE_CHECK([tm_gmtoff in struct tm], tcl_cv_member_tm_gmtoff, [ AC_TRY_COMPILE([#include ], [struct tm tm; tm.tm_gmtoff;], tcl_cv_member_tm_gmtoff=yes, tcl_cv_member_tm_gmtoff=no)]) if test $tcl_cv_member_tm_gmtoff = yes ; then AC_DEFINE(HAVE_TM_GMTOFF, 1, [Should we use the tm_gmtoff field of struct tm?]) fi # # Its important to include time.h in this check, as some systems # (like convex) have timezone functions, etc. # AC_CACHE_CHECK([long timezone variable], tcl_cv_timezone_long, [ AC_TRY_COMPILE([#include ], [extern long timezone; timezone += 1; exit (0);], tcl_cv_timezone_long=yes, tcl_cv_timezone_long=no)]) if test $tcl_cv_timezone_long = yes ; then AC_DEFINE(HAVE_TIMEZONE_VAR, 1, [Should we use the global timezone variable?]) else # # On some systems (eg IRIX 6.2), timezone is a time_t and not a long. # AC_CACHE_CHECK([time_t timezone variable], tcl_cv_timezone_time, [ AC_TRY_COMPILE([#include ], [extern time_t timezone; timezone += 1; exit (0);], tcl_cv_timezone_time=yes, tcl_cv_timezone_time=no)]) if test $tcl_cv_timezone_time = yes ; then AC_DEFINE(HAVE_TIMEZONE_VAR, 1, [Should we use the global timezone variable?]) fi fi ]) #-------------------------------------------------------------------- # TEA_BUGGY_STRTOD # # Under Solaris 2.4, strtod returns the wrong value for the # terminating character under some conditions. Check for this # and if the problem exists use a substitute procedure # "fixstrtod" (provided by Tcl) that corrects the error. # Also, on Compaq's Tru64 Unix 5.0, # strtod(" ") returns 0.0 instead of a failure to convert. # # Arguments: # none # # Results: # # Might defines some of the following vars: # strtod (=fixstrtod) #-------------------------------------------------------------------- AC_DEFUN([TEA_BUGGY_STRTOD], [ AC_CHECK_FUNC(strtod, tcl_strtod=1, tcl_strtod=0) if test "$tcl_strtod" = 1; then AC_CACHE_CHECK([for Solaris2.4/Tru64 strtod bugs], tcl_cv_strtod_buggy,[ AC_TRY_RUN([ extern double strtod(); int main() { char *infString="Inf", *nanString="NaN", *spaceString=" "; char *term; double value; value = strtod(infString, &term); if ((term != infString) && (term[-1] == 0)) { exit(1); } value = strtod(nanString, &term); if ((term != nanString) && (term[-1] == 0)) { exit(1); } value = strtod(spaceString, &term); if (term == (spaceString+1)) { exit(1); } exit(0); }], tcl_cv_strtod_buggy=ok, tcl_cv_strtod_buggy=buggy, tcl_cv_strtod_buggy=buggy)]) if test "$tcl_cv_strtod_buggy" = buggy; then AC_LIBOBJ([fixstrtod]) USE_COMPAT=1 AC_DEFINE(strtod, fixstrtod, [Do we want to use the strtod() in compat?]) fi fi ]) #-------------------------------------------------------------------- # TEA_TCL_LINK_LIBS # # Search for the libraries needed to link the Tcl shell. # Things like the math library (-lm) and socket stuff (-lsocket vs. # -lnsl) are dealt with here. # # Arguments: # Requires the following vars to be set in the Makefile: # DL_LIBS (not in TEA, only needed in core) # LIBS # MATH_LIBS # # Results: # # Substitutes the following vars: # TCL_LIBS # MATH_LIBS # # Might append to the following vars: # LIBS # # Might define the following vars: # HAVE_NET_ERRNO_H #-------------------------------------------------------------------- AC_DEFUN([TEA_TCL_LINK_LIBS], [ #-------------------------------------------------------------------- # On a few very rare systems, all of the libm.a stuff is # already in libc.a. Set compiler flags accordingly. # Also, Linux requires the "ieee" library for math to work # right (and it must appear before "-lm"). #-------------------------------------------------------------------- AC_CHECK_FUNC(sin, MATH_LIBS="", MATH_LIBS="-lm") AC_CHECK_LIB(ieee, main, [MATH_LIBS="-lieee $MATH_LIBS"]) #-------------------------------------------------------------------- # Interactive UNIX requires -linet instead of -lsocket, plus it # needs net/errno.h to define the socket-related error codes. #-------------------------------------------------------------------- AC_CHECK_LIB(inet, main, [LIBS="$LIBS -linet"]) AC_CHECK_HEADER(net/errno.h, [ AC_DEFINE(HAVE_NET_ERRNO_H, 1, [Do we have ?])]) #-------------------------------------------------------------------- # Check for the existence of the -lsocket and -lnsl libraries. # The order here is important, so that they end up in the right # order in the command line generated by make. Here are some # special considerations: # 1. Use "connect" and "accept" to check for -lsocket, and # "gethostbyname" to check for -lnsl. # 2. Use each function name only once: can't redo a check because # autoconf caches the results of the last check and won't redo it. # 3. Use -lnsl and -lsocket only if they supply procedures that # aren't already present in the normal libraries. This is because # IRIX 5.2 has libraries, but they aren't needed and they're # bogus: they goof up name resolution if used. # 4. On some SVR4 systems, can't use -lsocket without -lnsl too. # To get around this problem, check for both libraries together # if -lsocket doesn't work by itself. #-------------------------------------------------------------------- tcl_checkBoth=0 AC_CHECK_FUNC(connect, tcl_checkSocket=0, tcl_checkSocket=1) if test "$tcl_checkSocket" = 1; then AC_CHECK_FUNC(setsockopt, , [AC_CHECK_LIB(socket, setsockopt, LIBS="$LIBS -lsocket", tcl_checkBoth=1)]) fi if test "$tcl_checkBoth" = 1; then tk_oldLibs=$LIBS LIBS="$LIBS -lsocket -lnsl" AC_CHECK_FUNC(accept, tcl_checkNsl=0, [LIBS=$tk_oldLibs]) fi AC_CHECK_FUNC(gethostbyname, , [AC_CHECK_LIB(nsl, gethostbyname, [LIBS="$LIBS -lnsl"])]) # TEA specific: Don't perform the eval of the libraries here because # DL_LIBS won't be set until we call TEA_CONFIG_CFLAGS TCL_LIBS='${DL_LIBS} ${LIBS} ${MATH_LIBS}' AC_SUBST(TCL_LIBS) AC_SUBST(MATH_LIBS) ]) #-------------------------------------------------------------------- # TEA_TCL_EARLY_FLAGS # # Check for what flags are needed to be passed so the correct OS # features are available. # # Arguments: # None # # Results: # # Might define the following vars: # _ISOC99_SOURCE # _LARGEFILE64_SOURCE # _LARGEFILE_SOURCE64 #-------------------------------------------------------------------- AC_DEFUN([TEA_TCL_EARLY_FLAG],[ AC_CACHE_VAL([tcl_cv_flag_]translit($1,[A-Z],[a-z]), AC_TRY_COMPILE([$2], $3, [tcl_cv_flag_]translit($1,[A-Z],[a-z])=no, AC_TRY_COMPILE([[#define ]$1[ 1 ]$2], $3, [tcl_cv_flag_]translit($1,[A-Z],[a-z])=yes, [tcl_cv_flag_]translit($1,[A-Z],[a-z])=no))) if test ["x${tcl_cv_flag_]translit($1,[A-Z],[a-z])[}" = "xyes"] ; then AC_DEFINE($1, 1, [Add the ]$1[ flag when building]) tcl_flags="$tcl_flags $1" fi ]) AC_DEFUN([TEA_TCL_EARLY_FLAGS],[ AC_MSG_CHECKING([for required early compiler flags]) tcl_flags="" TEA_TCL_EARLY_FLAG(_ISOC99_SOURCE,[#include ], [char *p = (char *)strtoll; char *q = (char *)strtoull;]) TEA_TCL_EARLY_FLAG(_LARGEFILE64_SOURCE,[#include ], [struct stat64 buf; int i = stat64("/", &buf);]) TEA_TCL_EARLY_FLAG(_LARGEFILE_SOURCE64,[#include ], [char *p = (char *)open64;]) if test "x${tcl_flags}" = "x" ; then AC_MSG_RESULT([none]) else AC_MSG_RESULT([${tcl_flags}]) fi ]) #-------------------------------------------------------------------- # TEA_TCL_64BIT_FLAGS # # Check for what is defined in the way of 64-bit features. # # Arguments: # None # # Results: # # Might define the following vars: # TCL_WIDE_INT_IS_LONG # TCL_WIDE_INT_TYPE # HAVE_STRUCT_DIRENT64 # HAVE_STRUCT_STAT64 # HAVE_TYPE_OFF64_T #-------------------------------------------------------------------- AC_DEFUN([TEA_TCL_64BIT_FLAGS], [ AC_MSG_CHECKING([for 64-bit integer type]) AC_CACHE_VAL(tcl_cv_type_64bit,[ tcl_cv_type_64bit=none # See if the compiler knows natively about __int64 AC_TRY_COMPILE(,[__int64 value = (__int64) 0;], tcl_type_64bit=__int64, tcl_type_64bit="long long") # See if we should use long anyway Note that we substitute in the # type that is our current guess for a 64-bit type inside this check # program, so it should be modified only carefully... AC_TRY_COMPILE(,[switch (0) { case 1: case (sizeof(]${tcl_type_64bit}[)==sizeof(long)): ; }],tcl_cv_type_64bit=${tcl_type_64bit})]) if test "${tcl_cv_type_64bit}" = none ; then AC_DEFINE(TCL_WIDE_INT_IS_LONG, 1, [Are wide integers to be implemented with C 'long's?]) AC_MSG_RESULT([using long]) elif test "${tcl_cv_type_64bit}" = "__int64" \ -a "${TEA_PLATFORM}" = "windows" ; then # TEA specific: We actually want to use the default tcl.h checks in # this case to handle both TCL_WIDE_INT_TYPE and TCL_LL_MODIFIER* AC_MSG_RESULT([using Tcl header defaults]) else AC_DEFINE_UNQUOTED(TCL_WIDE_INT_TYPE,${tcl_cv_type_64bit}, [What type should be used to define wide integers?]) AC_MSG_RESULT([${tcl_cv_type_64bit}]) # Now check for auxiliary declarations AC_CACHE_CHECK([for struct dirent64], tcl_cv_struct_dirent64,[ AC_TRY_COMPILE([#include #include ],[struct dirent64 p;], tcl_cv_struct_dirent64=yes,tcl_cv_struct_dirent64=no)]) if test "x${tcl_cv_struct_dirent64}" = "xyes" ; then AC_DEFINE(HAVE_STRUCT_DIRENT64, 1, [Is 'struct dirent64' in ?]) fi AC_CACHE_CHECK([for struct stat64], tcl_cv_struct_stat64,[ AC_TRY_COMPILE([#include ],[struct stat64 p; ], tcl_cv_struct_stat64=yes,tcl_cv_struct_stat64=no)]) if test "x${tcl_cv_struct_stat64}" = "xyes" ; then AC_DEFINE(HAVE_STRUCT_STAT64, 1, [Is 'struct stat64' in ?]) fi AC_CHECK_FUNCS(open64 lseek64) AC_MSG_CHECKING([for off64_t]) AC_CACHE_VAL(tcl_cv_type_off64_t,[ AC_TRY_COMPILE([#include ],[off64_t offset; ], tcl_cv_type_off64_t=yes,tcl_cv_type_off64_t=no)]) dnl Define HAVE_TYPE_OFF64_T only when the off64_t type and the dnl functions lseek64 and open64 are defined. if test "x${tcl_cv_type_off64_t}" = "xyes" && \ test "x${ac_cv_func_lseek64}" = "xyes" && \ test "x${ac_cv_func_open64}" = "xyes" ; then AC_DEFINE(HAVE_TYPE_OFF64_T, 1, [Is off64_t in ?]) AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) fi fi ]) ## ## Here ends the standard Tcl configuration bits and starts the ## TEA specific functions ## #------------------------------------------------------------------------ # TEA_INIT -- # # Init various Tcl Extension Architecture (TEA) variables. # This should be the first called TEA_* macro. # # Arguments: # none # # Results: # # Defines and substs the following vars: # CYGPATH # EXEEXT # Defines only: # TEA_VERSION # TEA_INITED # TEA_PLATFORM (windows or unix) # # "cygpath" is used on windows to generate native path names for include # files. These variables should only be used with the compiler and linker # since they generate native path names. # # EXEEXT # Select the executable extension based on the host type. This # is a lightweight replacement for AC_EXEEXT that doesn't require # a compiler. #------------------------------------------------------------------------ AC_DEFUN([TEA_INIT], [ # TEA extensions pass this us the version of TEA they think they # are compatible with. TEA_VERSION="3.9" AC_MSG_CHECKING([for correct TEA configuration]) if test x"${PACKAGE_NAME}" = x ; then AC_MSG_ERROR([ The PACKAGE_NAME variable must be defined by your TEA configure.ac]) fi if test x"$1" = x ; then AC_MSG_ERROR([ TEA version not specified.]) elif test "$1" != "${TEA_VERSION}" ; then AC_MSG_RESULT([warning: requested TEA version "$1", have "${TEA_VERSION}"]) else AC_MSG_RESULT([ok (TEA ${TEA_VERSION})]) fi # If the user did not set CFLAGS, set it now to keep macros # like AC_PROG_CC and AC_TRY_COMPILE from adding "-g -O2". if test "${CFLAGS+set}" != "set" ; then CFLAGS="" fi case "`uname -s`" in *win32*|*WIN32*|*MINGW32_*) AC_CHECK_PROG(CYGPATH, cygpath, cygpath -w, echo) EXEEXT=".exe" TEA_PLATFORM="windows" ;; *CYGWIN_*) CYGPATH=echo EXEEXT=".exe" # TEA_PLATFORM is determined later in LOAD_TCLCONFIG ;; *) CYGPATH=echo # Maybe we are cross-compiling.... case ${host_alias} in *mingw32*) EXEEXT=".exe" TEA_PLATFORM="windows" ;; *) EXEEXT="" TEA_PLATFORM="unix" ;; esac ;; esac # Check if exec_prefix is set. If not use fall back to prefix. # Note when adjusted, so that TEA_PREFIX can correct for this. # This is needed for recursive configures, since autoconf propagates # $prefix, but not $exec_prefix (doh!). if test x$exec_prefix = xNONE ; then exec_prefix_default=yes exec_prefix=$prefix fi AC_MSG_NOTICE([configuring ${PACKAGE_NAME} ${PACKAGE_VERSION}]) AC_SUBST(EXEEXT) AC_SUBST(CYGPATH) # This package name must be replaced statically for AC_SUBST to work AC_SUBST(PKG_LIB_FILE) # Substitute STUB_LIB_FILE in case package creates a stub library too. AC_SUBST(PKG_STUB_LIB_FILE) # We AC_SUBST these here to ensure they are subst'ed, # in case the user doesn't call TEA_ADD_... AC_SUBST(PKG_STUB_SOURCES) AC_SUBST(PKG_STUB_OBJECTS) AC_SUBST(PKG_TCL_SOURCES) AC_SUBST(PKG_HEADERS) AC_SUBST(PKG_INCLUDES) AC_SUBST(PKG_LIBS) AC_SUBST(PKG_CFLAGS) ]) #------------------------------------------------------------------------ # TEA_ADD_SOURCES -- # # Specify one or more source files. Users should check for # the right platform before adding to their list. # It is not important to specify the directory, as long as it is # in the generic, win or unix subdirectory of $(srcdir). # # Arguments: # one or more file names # # Results: # # Defines and substs the following vars: # PKG_SOURCES # PKG_OBJECTS #------------------------------------------------------------------------ AC_DEFUN([TEA_ADD_SOURCES], [ vars="$@" for i in $vars; do case $i in [\$]*) # allow $-var names PKG_SOURCES="$PKG_SOURCES $i" PKG_OBJECTS="$PKG_OBJECTS $i" ;; *) # check for existence - allows for generic/win/unix VPATH # To add more dirs here (like 'src'), you have to update VPATH # in Makefile.in as well if test ! -f "${srcdir}/$i" -a ! -f "${srcdir}/generic/$i" \ -a ! -f "${srcdir}/win/$i" -a ! -f "${srcdir}/unix/$i" \ -a ! -f "${srcdir}/macosx/$i" \ ; then AC_MSG_ERROR([could not find source file '$i']) fi PKG_SOURCES="$PKG_SOURCES $i" # this assumes it is in a VPATH dir i=`basename $i` # handle user calling this before or after TEA_SETUP_COMPILER if test x"${OBJEXT}" != x ; then j="`echo $i | sed -e 's/\.[[^.]]*$//'`.${OBJEXT}" else j="`echo $i | sed -e 's/\.[[^.]]*$//'`.\${OBJEXT}" fi PKG_OBJECTS="$PKG_OBJECTS $j" ;; esac done AC_SUBST(PKG_SOURCES) AC_SUBST(PKG_OBJECTS) ]) #------------------------------------------------------------------------ # TEA_ADD_STUB_SOURCES -- # # Specify one or more source files. Users should check for # the right platform before adding to their list. # It is not important to specify the directory, as long as it is # in the generic, win or unix subdirectory of $(srcdir). # # Arguments: # one or more file names # # Results: # # Defines and substs the following vars: # PKG_STUB_SOURCES # PKG_STUB_OBJECTS #------------------------------------------------------------------------ AC_DEFUN([TEA_ADD_STUB_SOURCES], [ vars="$@" for i in $vars; do # check for existence - allows for generic/win/unix VPATH if test ! -f "${srcdir}/$i" -a ! -f "${srcdir}/generic/$i" \ -a ! -f "${srcdir}/win/$i" -a ! -f "${srcdir}/unix/$i" \ -a ! -f "${srcdir}/macosx/$i" \ ; then AC_MSG_ERROR([could not find stub source file '$i']) fi PKG_STUB_SOURCES="$PKG_STUB_SOURCES $i" # this assumes it is in a VPATH dir i=`basename $i` # handle user calling this before or after TEA_SETUP_COMPILER if test x"${OBJEXT}" != x ; then j="`echo $i | sed -e 's/\.[[^.]]*$//'`.${OBJEXT}" else j="`echo $i | sed -e 's/\.[[^.]]*$//'`.\${OBJEXT}" fi PKG_STUB_OBJECTS="$PKG_STUB_OBJECTS $j" done AC_SUBST(PKG_STUB_SOURCES) AC_SUBST(PKG_STUB_OBJECTS) ]) #------------------------------------------------------------------------ # TEA_ADD_TCL_SOURCES -- # # Specify one or more Tcl source files. These should be platform # independent runtime files. # # Arguments: # one or more file names # # Results: # # Defines and substs the following vars: # PKG_TCL_SOURCES #------------------------------------------------------------------------ AC_DEFUN([TEA_ADD_TCL_SOURCES], [ vars="$@" for i in $vars; do # check for existence, be strict because it is installed if test ! -f "${srcdir}/$i" ; then AC_MSG_ERROR([could not find tcl source file '${srcdir}/$i']) fi PKG_TCL_SOURCES="$PKG_TCL_SOURCES $i" done AC_SUBST(PKG_TCL_SOURCES) ]) #------------------------------------------------------------------------ # TEA_ADD_HEADERS -- # # Specify one or more source headers. Users should check for # the right platform before adding to their list. # # Arguments: # one or more file names # # Results: # # Defines and substs the following vars: # PKG_HEADERS #------------------------------------------------------------------------ AC_DEFUN([TEA_ADD_HEADERS], [ vars="$@" for i in $vars; do # check for existence, be strict because it is installed if test ! -f "${srcdir}/$i" ; then AC_MSG_ERROR([could not find header file '${srcdir}/$i']) fi PKG_HEADERS="$PKG_HEADERS $i" done AC_SUBST(PKG_HEADERS) ]) #------------------------------------------------------------------------ # TEA_ADD_INCLUDES -- # # Specify one or more include dirs. Users should check for # the right platform before adding to their list. # # Arguments: # one or more file names # # Results: # # Defines and substs the following vars: # PKG_INCLUDES #------------------------------------------------------------------------ AC_DEFUN([TEA_ADD_INCLUDES], [ vars="$@" for i in $vars; do PKG_INCLUDES="$PKG_INCLUDES $i" done AC_SUBST(PKG_INCLUDES) ]) #------------------------------------------------------------------------ # TEA_ADD_LIBS -- # # Specify one or more libraries. Users should check for # the right platform before adding to their list. For Windows, # libraries provided in "foo.lib" format will be converted to # "-lfoo" when using GCC (mingw). # # Arguments: # one or more file names # # Results: # # Defines and substs the following vars: # PKG_LIBS #------------------------------------------------------------------------ AC_DEFUN([TEA_ADD_LIBS], [ vars="$@" for i in $vars; do if test "${TEA_PLATFORM}" = "windows" -a "$GCC" = "yes" ; then # Convert foo.lib to -lfoo for GCC. No-op if not *.lib i=`echo "$i" | sed -e 's/^\([[^-]].*\)\.lib[$]/-l\1/i'` fi PKG_LIBS="$PKG_LIBS $i" done AC_SUBST(PKG_LIBS) ]) #------------------------------------------------------------------------ # TEA_ADD_CFLAGS -- # # Specify one or more CFLAGS. Users should check for # the right platform before adding to their list. # # Arguments: # one or more file names # # Results: # # Defines and substs the following vars: # PKG_CFLAGS #------------------------------------------------------------------------ AC_DEFUN([TEA_ADD_CFLAGS], [ PKG_CFLAGS="$PKG_CFLAGS $@" AC_SUBST(PKG_CFLAGS) ]) #------------------------------------------------------------------------ # TEA_ADD_CLEANFILES -- # # Specify one or more CLEANFILES. # # Arguments: # one or more file names to clean target # # Results: # # Appends to CLEANFILES, already defined for subst in LOAD_TCLCONFIG #------------------------------------------------------------------------ AC_DEFUN([TEA_ADD_CLEANFILES], [ CLEANFILES="$CLEANFILES $@" ]) #------------------------------------------------------------------------ # TEA_PREFIX -- # # Handle the --prefix=... option by defaulting to what Tcl gave # # Arguments: # none # # Results: # # If --prefix or --exec-prefix was not specified, $prefix and # $exec_prefix will be set to the values given to Tcl when it was # configured. #------------------------------------------------------------------------ AC_DEFUN([TEA_PREFIX], [ if test "${prefix}" = "NONE"; then prefix_default=yes if test x"${TCL_PREFIX}" != x; then AC_MSG_NOTICE([--prefix defaulting to TCL_PREFIX ${TCL_PREFIX}]) prefix=${TCL_PREFIX} else AC_MSG_NOTICE([--prefix defaulting to /usr/local]) prefix=/usr/local fi fi if test "${exec_prefix}" = "NONE" -a x"${prefix_default}" = x"yes" \ -o x"${exec_prefix_default}" = x"yes" ; then if test x"${TCL_EXEC_PREFIX}" != x; then AC_MSG_NOTICE([--exec-prefix defaulting to TCL_EXEC_PREFIX ${TCL_EXEC_PREFIX}]) exec_prefix=${TCL_EXEC_PREFIX} else AC_MSG_NOTICE([--exec-prefix defaulting to ${prefix}]) exec_prefix=$prefix fi fi ]) #------------------------------------------------------------------------ # TEA_SETUP_COMPILER_CC -- # # Do compiler checks the way we want. This is just a replacement # for AC_PROG_CC in TEA configure.ac files to make them cleaner. # # Arguments: # none # # Results: # # Sets up CC var and other standard bits we need to make executables. #------------------------------------------------------------------------ AC_DEFUN([TEA_SETUP_COMPILER_CC], [ # Don't put any macros that use the compiler (e.g. AC_TRY_COMPILE) # in this macro, they need to go into TEA_SETUP_COMPILER instead. AC_PROG_CC AC_PROG_CPP INSTALL='$(SHELL) $(srcdir)/tclconfig/install-sh -c' INSTALL_DATA_DIR='${INSTALL} -d -m 755' INSTALL_DATA='${INSTALL} -m 644' INSTALL_PROGRAM='${INSTALL}' INSTALL_SCRIPT='${INSTALL}' INSTALL_LIBRARY='${INSTALL_DATA}' AC_SUBST(INSTALL) AC_SUBST(INSTALL_DATA_DIR) AC_SUBST(INSTALL_DATA) AC_SUBST(INSTALL_PROGRAM) AC_SUBST(INSTALL_SCRIPT) AC_SUBST(INSTALL_LIBRARY) #-------------------------------------------------------------------- # Checks to see if the make program sets the $MAKE variable. #-------------------------------------------------------------------- AC_PROG_MAKE_SET #-------------------------------------------------------------------- # Find ranlib #-------------------------------------------------------------------- AC_CHECK_TOOL(RANLIB, ranlib) #-------------------------------------------------------------------- # Determines the correct binary file extension (.o, .obj, .exe etc.) #-------------------------------------------------------------------- AC_OBJEXT AC_EXEEXT ]) #------------------------------------------------------------------------ # TEA_SETUP_COMPILER -- # # Do compiler checks that use the compiler. This must go after # TEA_SETUP_COMPILER_CC, which does the actual compiler check. # # Arguments: # none # # Results: # # Sets up CC var and other standard bits we need to make executables. #------------------------------------------------------------------------ AC_DEFUN([TEA_SETUP_COMPILER], [ # Any macros that use the compiler (e.g. AC_TRY_COMPILE) have to go here. AC_REQUIRE([TEA_SETUP_COMPILER_CC]) #------------------------------------------------------------------------ # If we're using GCC, see if the compiler understands -pipe. If so, use it. # It makes compiling go faster. (This is only a performance feature.) #------------------------------------------------------------------------ if test -z "$no_pipe" -a -n "$GCC"; then AC_CACHE_CHECK([if the compiler understands -pipe], tcl_cv_cc_pipe, [ hold_cflags=$CFLAGS; CFLAGS="$CFLAGS -pipe" AC_TRY_COMPILE(,, tcl_cv_cc_pipe=yes, tcl_cv_cc_pipe=no) CFLAGS=$hold_cflags]) if test $tcl_cv_cc_pipe = yes; then CFLAGS="$CFLAGS -pipe" fi fi #-------------------------------------------------------------------- # Common compiler flag setup #-------------------------------------------------------------------- AC_C_BIGENDIAN if test "${TEA_PLATFORM}" = "unix" ; then TEA_TCL_LINK_LIBS TEA_MISSING_POSIX_HEADERS # Let the user call this, because if it triggers, they will # need a compat/strtod.c that is correct. Users can also # use Tcl_GetDouble(FromObj) instead. #TEA_BUGGY_STRTOD fi ]) #------------------------------------------------------------------------ # TEA_MAKE_LIB -- # # Generate a line that can be used to build a shared/unshared library # in a platform independent manner. # # Arguments: # none # # Requires: # # Results: # # Defines the following vars: # CFLAGS - Done late here to note disturb other AC macros # MAKE_LIB - Command to execute to build the Tcl library; # differs depending on whether or not Tcl is being # compiled as a shared library. # MAKE_SHARED_LIB Makefile rule for building a shared library # MAKE_STATIC_LIB Makefile rule for building a static library # MAKE_STUB_LIB Makefile rule for building a stub library # VC_MANIFEST_EMBED_DLL Makefile rule for embedded VC manifest in DLL # VC_MANIFEST_EMBED_EXE Makefile rule for embedded VC manifest in EXE #------------------------------------------------------------------------ AC_DEFUN([TEA_MAKE_LIB], [ if test "${TEA_PLATFORM}" = "windows" -a "$GCC" != "yes"; then MAKE_STATIC_LIB="\${STLIB_LD} -out:\[$]@ \$(PKG_OBJECTS)" MAKE_SHARED_LIB="\${SHLIB_LD} \${SHLIB_LD_LIBS} \${LDFLAGS_DEFAULT} -out:\[$]@ \$(PKG_OBJECTS)" AC_EGREP_CPP([manifest needed], [ #if defined(_MSC_VER) && _MSC_VER >= 1400 print("manifest needed") #endif ], [ # Could do a CHECK_PROG for mt, but should always be with MSVC8+ VC_MANIFEST_EMBED_DLL="if test -f \[$]@.manifest ; then mt.exe -nologo -manifest \[$]@.manifest -outputresource:\[$]@\;2 ; fi" VC_MANIFEST_EMBED_EXE="if test -f \[$]@.manifest ; then mt.exe -nologo -manifest \[$]@.manifest -outputresource:\[$]@\;1 ; fi" MAKE_SHARED_LIB="${MAKE_SHARED_LIB} ; ${VC_MANIFEST_EMBED_DLL}" TEA_ADD_CLEANFILES([*.manifest]) ]) MAKE_STUB_LIB="\${STLIB_LD} -nodefaultlib -out:\[$]@ \$(PKG_STUB_OBJECTS)" else MAKE_STATIC_LIB="\${STLIB_LD} \[$]@ \$(PKG_OBJECTS)" MAKE_SHARED_LIB="\${SHLIB_LD} -o \[$]@ \$(PKG_OBJECTS) \${SHLIB_LD_LIBS}" MAKE_STUB_LIB="\${STLIB_LD} \[$]@ \$(PKG_STUB_OBJECTS)" fi if test "${SHARED_BUILD}" = "1" ; then MAKE_LIB="${MAKE_SHARED_LIB} " else MAKE_LIB="${MAKE_STATIC_LIB} " fi #-------------------------------------------------------------------- # Shared libraries and static libraries have different names. # Use the double eval to make sure any variables in the suffix is # substituted. (@@@ Might not be necessary anymore) #-------------------------------------------------------------------- if test "${TEA_PLATFORM}" = "windows" ; then if test "${SHARED_BUILD}" = "1" ; then # We force the unresolved linking of symbols that are really in # the private libraries of Tcl and Tk. if test x"${TK_BIN_DIR}" != x ; then SHLIB_LD_LIBS="${SHLIB_LD_LIBS} \"`${CYGPATH} ${TK_BIN_DIR}/${TK_STUB_LIB_FILE}`\"" fi SHLIB_LD_LIBS="${SHLIB_LD_LIBS} \"`${CYGPATH} ${TCL_BIN_DIR}/${TCL_STUB_LIB_FILE}`\"" if test "$GCC" = "yes"; then SHLIB_LD_LIBS="${SHLIB_LD_LIBS} -static-libgcc" fi eval eval "PKG_LIB_FILE=${PACKAGE_LIB_PREFIX}${PACKAGE_NAME}${SHARED_LIB_SUFFIX}" else eval eval "PKG_LIB_FILE=${PACKAGE_LIB_PREFIX}${PACKAGE_NAME}${UNSHARED_LIB_SUFFIX}" if test "$GCC" = "yes"; then PKG_LIB_FILE=lib${PKG_LIB_FILE} fi fi # Some packages build their own stubs libraries eval eval "PKG_STUB_LIB_FILE=${PACKAGE_LIB_PREFIX}${PACKAGE_NAME}stub${UNSHARED_LIB_SUFFIX}" if test "$GCC" = "yes"; then PKG_STUB_LIB_FILE=lib${PKG_STUB_LIB_FILE} fi # These aren't needed on Windows (either MSVC or gcc) RANLIB=: RANLIB_STUB=: else RANLIB_STUB="${RANLIB}" if test "${SHARED_BUILD}" = "1" ; then SHLIB_LD_LIBS="${SHLIB_LD_LIBS} ${TCL_STUB_LIB_SPEC}" if test x"${TK_BIN_DIR}" != x ; then SHLIB_LD_LIBS="${SHLIB_LD_LIBS} ${TK_STUB_LIB_SPEC}" fi eval eval "PKG_LIB_FILE=lib${PACKAGE_LIB_PREFIX}${PACKAGE_NAME}${SHARED_LIB_SUFFIX}" RANLIB=: else eval eval "PKG_LIB_FILE=lib${PACKAGE_LIB_PREFIX}${PACKAGE_NAME}${UNSHARED_LIB_SUFFIX}" fi # Some packages build their own stubs libraries eval eval "PKG_STUB_LIB_FILE=lib${PACKAGE_LIB_PREFIX}${PACKAGE_NAME}stub${UNSHARED_LIB_SUFFIX}" fi # These are escaped so that only CFLAGS is picked up at configure time. # The other values will be substituted at make time. CFLAGS="${CFLAGS} \${CFLAGS_DEFAULT} \${CFLAGS_WARNING}" if test "${SHARED_BUILD}" = "1" ; then CFLAGS="${CFLAGS} \${SHLIB_CFLAGS}" fi AC_SUBST(MAKE_LIB) AC_SUBST(MAKE_SHARED_LIB) AC_SUBST(MAKE_STATIC_LIB) AC_SUBST(MAKE_STUB_LIB) AC_SUBST(RANLIB_STUB) AC_SUBST(VC_MANIFEST_EMBED_DLL) AC_SUBST(VC_MANIFEST_EMBED_EXE) ]) #------------------------------------------------------------------------ # TEA_LIB_SPEC -- # # Compute the name of an existing object library located in libdir # from the given base name and produce the appropriate linker flags. # # Arguments: # basename The base name of the library without version # numbers, extensions, or "lib" prefixes. # extra_dir Extra directory in which to search for the # library. This location is used first, then # $prefix/$exec-prefix, then some defaults. # # Requires: # TEA_INIT and TEA_PREFIX must be called first. # # Results: # # Defines the following vars: # ${basename}_LIB_NAME The computed library name. # ${basename}_LIB_SPEC The computed linker flags. #------------------------------------------------------------------------ AC_DEFUN([TEA_LIB_SPEC], [ AC_MSG_CHECKING([for $1 library]) # Look in exec-prefix for the library (defined by TEA_PREFIX). tea_lib_name_dir="${exec_prefix}/lib" # Or in a user-specified location. if test x"$2" != x ; then tea_extra_lib_dir=$2 else tea_extra_lib_dir=NONE fi for i in \ `ls -dr ${tea_extra_lib_dir}/$1[[0-9]]*.lib 2>/dev/null ` \ `ls -dr ${tea_extra_lib_dir}/lib$1[[0-9]]* 2>/dev/null ` \ `ls -dr ${tea_lib_name_dir}/$1[[0-9]]*.lib 2>/dev/null ` \ `ls -dr ${tea_lib_name_dir}/lib$1[[0-9]]* 2>/dev/null ` \ `ls -dr /usr/lib/$1[[0-9]]*.lib 2>/dev/null ` \ `ls -dr /usr/lib/lib$1[[0-9]]* 2>/dev/null ` \ `ls -dr /usr/lib64/$1[[0-9]]*.lib 2>/dev/null ` \ `ls -dr /usr/lib64/lib$1[[0-9]]* 2>/dev/null ` \ `ls -dr /usr/local/lib/$1[[0-9]]*.lib 2>/dev/null ` \ `ls -dr /usr/local/lib/lib$1[[0-9]]* 2>/dev/null ` ; do if test -f "$i" ; then tea_lib_name_dir=`dirname $i` $1_LIB_NAME=`basename $i` $1_LIB_PATH_NAME=$i break fi done if test "${TEA_PLATFORM}" = "windows"; then $1_LIB_SPEC=\"`${CYGPATH} ${$1_LIB_PATH_NAME} 2>/dev/null`\" else # Strip off the leading "lib" and trailing ".a" or ".so" tea_lib_name_lib=`echo ${$1_LIB_NAME}|sed -e 's/^lib//' -e 's/\.[[^.]]*$//' -e 's/\.so.*//'` $1_LIB_SPEC="-L${tea_lib_name_dir} -l${tea_lib_name_lib}" fi if test "x${$1_LIB_NAME}" = x ; then AC_MSG_ERROR([not found]) else AC_MSG_RESULT([${$1_LIB_SPEC}]) fi ]) #------------------------------------------------------------------------ # TEA_PRIVATE_TCL_HEADERS -- # # Locate the private Tcl include files # # Arguments: # # Requires: # TCL_SRC_DIR Assumes that TEA_LOAD_TCLCONFIG has # already been called. # # Results: # # Substitutes the following vars: # TCL_TOP_DIR_NATIVE # TCL_INCLUDES #------------------------------------------------------------------------ AC_DEFUN([TEA_PRIVATE_TCL_HEADERS], [ # Allow for --with-tclinclude to take effect and define ${ac_cv_c_tclh} AC_REQUIRE([TEA_PUBLIC_TCL_HEADERS]) AC_MSG_CHECKING([for Tcl private include files]) TCL_SRC_DIR_NATIVE=`${CYGPATH} ${TCL_SRC_DIR}` TCL_TOP_DIR_NATIVE=\"${TCL_SRC_DIR_NATIVE}\" # Check to see if tclPort.h isn't already with the public headers # Don't look for tclInt.h because that resides with tcl.h in the core # sources, but the Port headers are in a different directory if test "${TEA_PLATFORM}" = "windows" -a \ -f "${ac_cv_c_tclh}/tclWinPort.h"; then result="private headers found with public headers" elif test "${TEA_PLATFORM}" = "unix" -a \ -f "${ac_cv_c_tclh}/tclUnixPort.h"; then result="private headers found with public headers" else TCL_GENERIC_DIR_NATIVE=\"${TCL_SRC_DIR_NATIVE}/generic\" if test "${TEA_PLATFORM}" = "windows"; then TCL_PLATFORM_DIR_NATIVE=\"${TCL_SRC_DIR_NATIVE}/win\" else TCL_PLATFORM_DIR_NATIVE=\"${TCL_SRC_DIR_NATIVE}/unix\" fi # Overwrite the previous TCL_INCLUDES as this should capture both # public and private headers in the same set. # We want to ensure these are substituted so as not to require # any *_NATIVE vars be defined in the Makefile TCL_INCLUDES="-I${TCL_GENERIC_DIR_NATIVE} -I${TCL_PLATFORM_DIR_NATIVE}" if test "`uname -s`" = "Darwin"; then # If Tcl was built as a framework, attempt to use # the framework's Headers and PrivateHeaders directories case ${TCL_DEFS} in *TCL_FRAMEWORK*) if test -d "${TCL_BIN_DIR}/Headers" -a \ -d "${TCL_BIN_DIR}/PrivateHeaders"; then TCL_INCLUDES="-I\"${TCL_BIN_DIR}/Headers\" -I\"${TCL_BIN_DIR}/PrivateHeaders\" ${TCL_INCLUDES}" else TCL_INCLUDES="${TCL_INCLUDES} ${TCL_INCLUDE_SPEC} `echo "${TCL_INCLUDE_SPEC}" | sed -e 's/Headers/PrivateHeaders/'`" fi ;; esac result="Using ${TCL_INCLUDES}" else if test ! -f "${TCL_SRC_DIR}/generic/tclInt.h" ; then AC_MSG_ERROR([Cannot find private header tclInt.h in ${TCL_SRC_DIR}]) fi result="Using srcdir found in tclConfig.sh: ${TCL_SRC_DIR}" fi fi AC_SUBST(TCL_TOP_DIR_NATIVE) AC_SUBST(TCL_INCLUDES) AC_MSG_RESULT([${result}]) ]) #------------------------------------------------------------------------ # TEA_PUBLIC_TCL_HEADERS -- # # Locate the installed public Tcl header files # # Arguments: # None. # # Requires: # CYGPATH must be set # # Results: # # Adds a --with-tclinclude switch to configure. # Result is cached. # # Substitutes the following vars: # TCL_INCLUDES #------------------------------------------------------------------------ AC_DEFUN([TEA_PUBLIC_TCL_HEADERS], [ AC_MSG_CHECKING([for Tcl public headers]) AC_ARG_WITH(tclinclude, [ --with-tclinclude directory containing the public Tcl header files], with_tclinclude=${withval}) AC_CACHE_VAL(ac_cv_c_tclh, [ # Use the value from --with-tclinclude, if it was given if test x"${with_tclinclude}" != x ; then if test -f "${with_tclinclude}/tcl.h" ; then ac_cv_c_tclh=${with_tclinclude} else AC_MSG_ERROR([${with_tclinclude} directory does not contain tcl.h]) fi else list="" if test "`uname -s`" = "Darwin"; then # If Tcl was built as a framework, attempt to use # the framework's Headers directory case ${TCL_DEFS} in *TCL_FRAMEWORK*) list="`ls -d ${TCL_BIN_DIR}/Headers 2>/dev/null`" ;; esac fi # Look in the source dir only if Tcl is not installed, # and in that situation, look there before installed locations. if test -f "${TCL_BIN_DIR}/Makefile" ; then list="$list `ls -d ${TCL_SRC_DIR}/generic 2>/dev/null`" fi # Check order: pkg --prefix location, Tcl's --prefix location, # relative to directory of tclConfig.sh. eval "temp_includedir=${includedir}" list="$list \ `ls -d ${temp_includedir} 2>/dev/null` \ `ls -d ${TCL_PREFIX}/include 2>/dev/null` \ `ls -d ${TCL_BIN_DIR}/../include 2>/dev/null`" if test "${TEA_PLATFORM}" != "windows" -o "$GCC" = "yes"; then list="$list /usr/local/include /usr/include" if test x"${TCL_INCLUDE_SPEC}" != x ; then d=`echo "${TCL_INCLUDE_SPEC}" | sed -e 's/^-I//'` list="$list `ls -d ${d} 2>/dev/null`" fi fi for i in $list ; do if test -f "$i/tcl.h" ; then ac_cv_c_tclh=$i break fi done fi ]) # Print a message based on how we determined the include path if test x"${ac_cv_c_tclh}" = x ; then AC_MSG_ERROR([tcl.h not found. Please specify its location with --with-tclinclude]) else AC_MSG_RESULT([${ac_cv_c_tclh}]) fi # Convert to a native path and substitute into the output files. INCLUDE_DIR_NATIVE=`${CYGPATH} ${ac_cv_c_tclh}` TCL_INCLUDES=-I\"${INCLUDE_DIR_NATIVE}\" AC_SUBST(TCL_INCLUDES) ]) #------------------------------------------------------------------------ # TEA_PRIVATE_TK_HEADERS -- # # Locate the private Tk include files # # Arguments: # # Requires: # TK_SRC_DIR Assumes that TEA_LOAD_TKCONFIG has # already been called. # # Results: # # Substitutes the following vars: # TK_INCLUDES #------------------------------------------------------------------------ AC_DEFUN([TEA_PRIVATE_TK_HEADERS], [ # Allow for --with-tkinclude to take effect and define ${ac_cv_c_tkh} AC_REQUIRE([TEA_PUBLIC_TK_HEADERS]) AC_MSG_CHECKING([for Tk private include files]) TK_SRC_DIR_NATIVE=`${CYGPATH} ${TK_SRC_DIR}` TK_TOP_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}\" # Check to see if tkPort.h isn't already with the public headers # Don't look for tkInt.h because that resides with tk.h in the core # sources, but the Port headers are in a different directory if test "${TEA_PLATFORM}" = "windows" -a \ -f "${ac_cv_c_tkh}/tkWinPort.h"; then result="private headers found with public headers" elif test "${TEA_PLATFORM}" = "unix" -a \ -f "${ac_cv_c_tkh}/tkUnixPort.h"; then result="private headers found with public headers" else TK_GENERIC_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}/generic\" TK_XLIB_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}/xlib\" if test "${TEA_PLATFORM}" = "windows"; then TK_PLATFORM_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}/win\" else TK_PLATFORM_DIR_NATIVE=\"${TK_SRC_DIR_NATIVE}/unix\" fi # Overwrite the previous TK_INCLUDES as this should capture both # public and private headers in the same set. # We want to ensure these are substituted so as not to require # any *_NATIVE vars be defined in the Makefile TK_INCLUDES="-I${TK_GENERIC_DIR_NATIVE} -I${TK_PLATFORM_DIR_NATIVE}" # Detect and add ttk subdir if test -d "${TK_SRC_DIR}/generic/ttk"; then TK_INCLUDES="${TK_INCLUDES} -I\"${TK_SRC_DIR_NATIVE}/generic/ttk\"" fi if test "${TEA_WINDOWINGSYSTEM}" != "x11"; then TK_INCLUDES="${TK_INCLUDES} -I\"${TK_XLIB_DIR_NATIVE}\"" fi if test "${TEA_WINDOWINGSYSTEM}" = "aqua"; then TK_INCLUDES="${TK_INCLUDES} -I\"${TK_SRC_DIR_NATIVE}/macosx\"" fi if test "`uname -s`" = "Darwin"; then # If Tk was built as a framework, attempt to use # the framework's Headers and PrivateHeaders directories case ${TK_DEFS} in *TK_FRAMEWORK*) if test -d "${TK_BIN_DIR}/Headers" -a \ -d "${TK_BIN_DIR}/PrivateHeaders"; then TK_INCLUDES="-I\"${TK_BIN_DIR}/Headers\" -I\"${TK_BIN_DIR}/PrivateHeaders\" ${TK_INCLUDES}" else TK_INCLUDES="${TK_INCLUDES} ${TK_INCLUDE_SPEC} `echo "${TK_INCLUDE_SPEC}" | sed -e 's/Headers/PrivateHeaders/'`" fi ;; esac result="Using ${TK_INCLUDES}" else if test ! -f "${TK_SRC_DIR}/generic/tkInt.h" ; then AC_MSG_ERROR([Cannot find private header tkInt.h in ${TK_SRC_DIR}]) fi result="Using srcdir found in tkConfig.sh: ${TK_SRC_DIR}" fi fi AC_SUBST(TK_TOP_DIR_NATIVE) AC_SUBST(TK_XLIB_DIR_NATIVE) AC_SUBST(TK_INCLUDES) AC_MSG_RESULT([${result}]) ]) #------------------------------------------------------------------------ # TEA_PUBLIC_TK_HEADERS -- # # Locate the installed public Tk header files # # Arguments: # None. # # Requires: # CYGPATH must be set # # Results: # # Adds a --with-tkinclude switch to configure. # Result is cached. # # Substitutes the following vars: # TK_INCLUDES #------------------------------------------------------------------------ AC_DEFUN([TEA_PUBLIC_TK_HEADERS], [ AC_MSG_CHECKING([for Tk public headers]) AC_ARG_WITH(tkinclude, [ --with-tkinclude directory containing the public Tk header files], with_tkinclude=${withval}) AC_CACHE_VAL(ac_cv_c_tkh, [ # Use the value from --with-tkinclude, if it was given if test x"${with_tkinclude}" != x ; then if test -f "${with_tkinclude}/tk.h" ; then ac_cv_c_tkh=${with_tkinclude} else AC_MSG_ERROR([${with_tkinclude} directory does not contain tk.h]) fi else list="" if test "`uname -s`" = "Darwin"; then # If Tk was built as a framework, attempt to use # the framework's Headers directory. case ${TK_DEFS} in *TK_FRAMEWORK*) list="`ls -d ${TK_BIN_DIR}/Headers 2>/dev/null`" ;; esac fi # Look in the source dir only if Tk is not installed, # and in that situation, look there before installed locations. if test -f "${TK_BIN_DIR}/Makefile" ; then list="$list `ls -d ${TK_SRC_DIR}/generic 2>/dev/null`" fi # Check order: pkg --prefix location, Tk's --prefix location, # relative to directory of tkConfig.sh, Tcl's --prefix location, # relative to directory of tclConfig.sh. eval "temp_includedir=${includedir}" list="$list \ `ls -d ${temp_includedir} 2>/dev/null` \ `ls -d ${TK_PREFIX}/include 2>/dev/null` \ `ls -d ${TK_BIN_DIR}/../include 2>/dev/null` \ `ls -d ${TCL_PREFIX}/include 2>/dev/null` \ `ls -d ${TCL_BIN_DIR}/../include 2>/dev/null`" if test "${TEA_PLATFORM}" != "windows" -o "$GCC" = "yes"; then list="$list /usr/local/include /usr/include" if test x"${TK_INCLUDE_SPEC}" != x ; then d=`echo "${TK_INCLUDE_SPEC}" | sed -e 's/^-I//'` list="$list `ls -d ${d} 2>/dev/null`" fi fi for i in $list ; do if test -f "$i/tk.h" ; then ac_cv_c_tkh=$i break fi done fi ]) # Print a message based on how we determined the include path if test x"${ac_cv_c_tkh}" = x ; then AC_MSG_ERROR([tk.h not found. Please specify its location with --with-tkinclude]) else AC_MSG_RESULT([${ac_cv_c_tkh}]) fi # Convert to a native path and substitute into the output files. INCLUDE_DIR_NATIVE=`${CYGPATH} ${ac_cv_c_tkh}` TK_INCLUDES=-I\"${INCLUDE_DIR_NATIVE}\" AC_SUBST(TK_INCLUDES) if test "${TEA_WINDOWINGSYSTEM}" != "x11"; then # On Windows and Aqua, we need the X compat headers AC_MSG_CHECKING([for X11 header files]) if test ! -r "${INCLUDE_DIR_NATIVE}/X11/Xlib.h"; then INCLUDE_DIR_NATIVE="`${CYGPATH} ${TK_SRC_DIR}/xlib`" TK_XINCLUDES=-I\"${INCLUDE_DIR_NATIVE}\" AC_SUBST(TK_XINCLUDES) fi AC_MSG_RESULT([${INCLUDE_DIR_NATIVE}]) fi ]) #------------------------------------------------------------------------ # TEA_PATH_CONFIG -- # # Locate the ${1}Config.sh file and perform a sanity check on # the ${1} compile flags. These are used by packages like # [incr Tk] that load *Config.sh files from more than Tcl and Tk. # # Arguments: # none # # Results: # # Adds the following arguments to configure: # --with-$1=... # # Defines the following vars: # $1_BIN_DIR Full path to the directory containing # the $1Config.sh file #------------------------------------------------------------------------ AC_DEFUN([TEA_PATH_CONFIG], [ # # Ok, lets find the $1 configuration # First, look for one uninstalled. # the alternative search directory is invoked by --with-$1 # if test x"${no_$1}" = x ; then # we reset no_$1 in case something fails here no_$1=true AC_ARG_WITH($1, [ --with-$1 directory containing $1 configuration ($1Config.sh)], with_$1config=${withval}) AC_MSG_CHECKING([for $1 configuration]) AC_CACHE_VAL(ac_cv_c_$1config,[ # First check to see if --with-$1 was specified. if test x"${with_$1config}" != x ; then case ${with_$1config} in */$1Config.sh ) if test -f ${with_$1config}; then AC_MSG_WARN([--with-$1 argument should refer to directory containing $1Config.sh, not to $1Config.sh itself]) with_$1config=`echo ${with_$1config} | sed 's!/$1Config\.sh$!!'` fi;; esac if test -f "${with_$1config}/$1Config.sh" ; then ac_cv_c_$1config=`(cd ${with_$1config}; pwd)` else AC_MSG_ERROR([${with_$1config} directory doesn't contain $1Config.sh]) fi fi # then check for a private $1 installation if test x"${ac_cv_c_$1config}" = x ; then for i in \ ../$1 \ `ls -dr ../$1*[[0-9]].[[0-9]]*.[[0-9]]* 2>/dev/null` \ `ls -dr ../$1*[[0-9]].[[0-9]][[0-9]] 2>/dev/null` \ `ls -dr ../$1*[[0-9]].[[0-9]] 2>/dev/null` \ `ls -dr ../$1*[[0-9]].[[0-9]]* 2>/dev/null` \ ../../$1 \ `ls -dr ../../$1*[[0-9]].[[0-9]]*.[[0-9]]* 2>/dev/null` \ `ls -dr ../../$1*[[0-9]].[[0-9]][[0-9]] 2>/dev/null` \ `ls -dr ../../$1*[[0-9]].[[0-9]] 2>/dev/null` \ `ls -dr ../../$1*[[0-9]].[[0-9]]* 2>/dev/null` \ ../../../$1 \ `ls -dr ../../../$1*[[0-9]].[[0-9]]*.[[0-9]]* 2>/dev/null` \ `ls -dr ../../../$1*[[0-9]].[[0-9]][[0-9]] 2>/dev/null` \ `ls -dr ../../../$1*[[0-9]].[[0-9]] 2>/dev/null` \ `ls -dr ../../../$1*[[0-9]].[[0-9]]* 2>/dev/null` \ ${srcdir}/../$1 \ `ls -dr ${srcdir}/../$1*[[0-9]].[[0-9]]*.[[0-9]]* 2>/dev/null` \ `ls -dr ${srcdir}/../$1*[[0-9]].[[0-9]][[0-9]] 2>/dev/null` \ `ls -dr ${srcdir}/../$1*[[0-9]].[[0-9]] 2>/dev/null` \ `ls -dr ${srcdir}/../$1*[[0-9]].[[0-9]]* 2>/dev/null` \ ; do if test -f "$i/$1Config.sh" ; then ac_cv_c_$1config=`(cd $i; pwd)` break fi if test -f "$i/unix/$1Config.sh" ; then ac_cv_c_$1config=`(cd $i/unix; pwd)` break fi done fi # check in a few common install locations if test x"${ac_cv_c_$1config}" = x ; then for i in `ls -d ${libdir} 2>/dev/null` \ `ls -d ${exec_prefix}/lib 2>/dev/null` \ `ls -d ${prefix}/lib 2>/dev/null` \ `ls -d /usr/local/lib 2>/dev/null` \ `ls -d /usr/contrib/lib 2>/dev/null` \ `ls -d /usr/lib 2>/dev/null` \ `ls -d /usr/lib64 2>/dev/null` \ ; do if test -f "$i/$1Config.sh" ; then ac_cv_c_$1config=`(cd $i; pwd)` break fi done fi ]) if test x"${ac_cv_c_$1config}" = x ; then $1_BIN_DIR="# no $1 configs found" AC_MSG_WARN([Cannot find $1 configuration definitions]) exit 0 else no_$1= $1_BIN_DIR=${ac_cv_c_$1config} AC_MSG_RESULT([found $$1_BIN_DIR/$1Config.sh]) fi fi ]) #------------------------------------------------------------------------ # TEA_LOAD_CONFIG -- # # Load the $1Config.sh file # # Arguments: # # Requires the following vars to be set: # $1_BIN_DIR # # Results: # # Substitutes the following vars: # $1_SRC_DIR # $1_LIB_FILE # $1_LIB_SPEC #------------------------------------------------------------------------ AC_DEFUN([TEA_LOAD_CONFIG], [ AC_MSG_CHECKING([for existence of ${$1_BIN_DIR}/$1Config.sh]) if test -f "${$1_BIN_DIR}/$1Config.sh" ; then AC_MSG_RESULT([loading]) . "${$1_BIN_DIR}/$1Config.sh" else AC_MSG_RESULT([file not found]) fi # # If the $1_BIN_DIR is the build directory (not the install directory), # then set the common variable name to the value of the build variables. # For example, the variable $1_LIB_SPEC will be set to the value # of $1_BUILD_LIB_SPEC. An extension should make use of $1_LIB_SPEC # instead of $1_BUILD_LIB_SPEC since it will work with both an # installed and uninstalled version of Tcl. # if test -f "${$1_BIN_DIR}/Makefile" ; then AC_MSG_WARN([Found Makefile - using build library specs for $1]) $1_LIB_SPEC=${$1_BUILD_LIB_SPEC} $1_STUB_LIB_SPEC=${$1_BUILD_STUB_LIB_SPEC} $1_STUB_LIB_PATH=${$1_BUILD_STUB_LIB_PATH} $1_INCLUDE_SPEC=${$1_BUILD_INCLUDE_SPEC} $1_LIBRARY_PATH=${$1_LIBRARY_PATH} fi AC_SUBST($1_VERSION) AC_SUBST($1_BIN_DIR) AC_SUBST($1_SRC_DIR) AC_SUBST($1_LIB_FILE) AC_SUBST($1_LIB_SPEC) AC_SUBST($1_STUB_LIB_FILE) AC_SUBST($1_STUB_LIB_SPEC) AC_SUBST($1_STUB_LIB_PATH) # Allow the caller to prevent this auto-check by specifying any 2nd arg AS_IF([test "x$2" = x], [ # Check both upper and lower-case variants # If a dev wanted non-stubs libs, this function could take an option # to not use _STUB in the paths below AS_IF([test "x${$1_STUB_LIB_SPEC}" = x], [TEA_LOAD_CONFIG_LIB(translit($1,[a-z],[A-Z])_STUB)], [TEA_LOAD_CONFIG_LIB($1_STUB)]) ]) ]) #------------------------------------------------------------------------ # TEA_LOAD_CONFIG_LIB -- # # Helper function to load correct library from another extension's # ${PACKAGE}Config.sh. # # Results: # Adds to LIBS the appropriate extension library #------------------------------------------------------------------------ AC_DEFUN([TEA_LOAD_CONFIG_LIB], [ AC_MSG_CHECKING([For $1 library for LIBS]) # This simplifies the use of stub libraries by automatically adding # the stub lib to your path. Normally this would add to SHLIB_LD_LIBS, # but this is called before CONFIG_CFLAGS. More importantly, this adds # to PKG_LIBS, which becomes LIBS, and that is only used by SHLIB_LD. if test "x${$1_LIB_SPEC}" != "x" ; then if test "${TEA_PLATFORM}" = "windows" -a "$GCC" != "yes" ; then TEA_ADD_LIBS([\"`${CYGPATH} ${$1_LIB_PATH}`\"]) AC_MSG_RESULT([using $1_LIB_PATH ${$1_LIB_PATH}]) else TEA_ADD_LIBS([${$1_LIB_SPEC}]) AC_MSG_RESULT([using $1_LIB_SPEC ${$1_LIB_SPEC}]) fi else AC_MSG_RESULT([file not found]) fi ]) #------------------------------------------------------------------------ # TEA_EXPORT_CONFIG -- # # Define the data to insert into the ${PACKAGE}Config.sh file # # Arguments: # # Requires the following vars to be set: # $1 # # Results: # Substitutes the following vars: #------------------------------------------------------------------------ AC_DEFUN([TEA_EXPORT_CONFIG], [ #-------------------------------------------------------------------- # These are for $1Config.sh #-------------------------------------------------------------------- # pkglibdir must be a fully qualified path and (not ${exec_prefix}/lib) eval pkglibdir="[$]{libdir}/$1${PACKAGE_VERSION}" if test "${TCL_LIB_VERSIONS_OK}" = "ok"; then eval $1_LIB_FLAG="-l$1${PACKAGE_VERSION}${DBGX}" eval $1_STUB_LIB_FLAG="-l$1stub${PACKAGE_VERSION}${DBGX}" else eval $1_LIB_FLAG="-l$1`echo ${PACKAGE_VERSION} | tr -d .`${DBGX}" eval $1_STUB_LIB_FLAG="-l$1stub`echo ${PACKAGE_VERSION} | tr -d .`${DBGX}" fi $1_BUILD_LIB_SPEC="-L`pwd` ${$1_LIB_FLAG}" $1_LIB_SPEC="-L${pkglibdir} ${$1_LIB_FLAG}" $1_BUILD_STUB_LIB_SPEC="-L`pwd` [$]{$1_STUB_LIB_FLAG}" $1_STUB_LIB_SPEC="-L${pkglibdir} [$]{$1_STUB_LIB_FLAG}" $1_BUILD_STUB_LIB_PATH="`pwd`/[$]{PKG_STUB_LIB_FILE}" $1_STUB_LIB_PATH="${pkglibdir}/[$]{PKG_STUB_LIB_FILE}" AC_SUBST($1_BUILD_LIB_SPEC) AC_SUBST($1_LIB_SPEC) AC_SUBST($1_BUILD_STUB_LIB_SPEC) AC_SUBST($1_STUB_LIB_SPEC) AC_SUBST($1_BUILD_STUB_LIB_PATH) AC_SUBST($1_STUB_LIB_PATH) AC_SUBST(MAJOR_VERSION) AC_SUBST(MINOR_VERSION) AC_SUBST(PATCHLEVEL) ]) #------------------------------------------------------------------------ # TEA_PATH_CELIB -- # # Locate Keuchel's celib emulation layer for targeting Win/CE # # Arguments: # none # # Results: # # Adds the following arguments to configure: # --with-celib=... # # Defines the following vars: # CELIB_DIR Full path to the directory containing # the include and platform lib files #------------------------------------------------------------------------ AC_DEFUN([TEA_PATH_CELIB], [ # First, look for one uninstalled. # the alternative search directory is invoked by --with-celib if test x"${no_celib}" = x ; then # we reset no_celib in case something fails here no_celib=true AC_ARG_WITH(celib,[ --with-celib=DIR use Windows/CE support library from DIR], with_celibconfig=${withval}) AC_MSG_CHECKING([for Windows/CE celib directory]) AC_CACHE_VAL(ac_cv_c_celibconfig,[ # First check to see if --with-celibconfig was specified. if test x"${with_celibconfig}" != x ; then if test -d "${with_celibconfig}/inc" ; then ac_cv_c_celibconfig=`(cd ${with_celibconfig}; pwd)` else AC_MSG_ERROR([${with_celibconfig} directory doesn't contain inc directory]) fi fi # then check for a celib library if test x"${ac_cv_c_celibconfig}" = x ; then for i in \ ../celib-palm-3.0 \ ../celib \ ../../celib-palm-3.0 \ ../../celib \ `ls -dr ../celib-*3.[[0-9]]* 2>/dev/null` \ ${srcdir}/../celib-palm-3.0 \ ${srcdir}/../celib \ `ls -dr ${srcdir}/../celib-*3.[[0-9]]* 2>/dev/null` \ ; do if test -d "$i/inc" ; then ac_cv_c_celibconfig=`(cd $i; pwd)` break fi done fi ]) if test x"${ac_cv_c_celibconfig}" = x ; then AC_MSG_ERROR([Cannot find celib support library directory]) else no_celib= CELIB_DIR=${ac_cv_c_celibconfig} CELIB_DIR=`echo "$CELIB_DIR" | sed -e 's!\\\!/!g'` AC_MSG_RESULT([found $CELIB_DIR]) fi fi ]) # Local Variables: # mode: autoconf # End: pgtcl-2.8.0/tests/000077500000000000000000000000001420313073400137715ustar00rootroot00000000000000pgtcl-2.8.0/tests/README000066400000000000000000000025061420313073400146540ustar00rootroot00000000000000 # $Id$ # This is the start of a tests directory. # Right now you can start up a default database, like one owned by you, # and use psql psql -c '\i create.sql' # You can time importing the 5,000 sample data items by doing a time tclsh import_sampledata.tcl # You can time importing the 5,000 sample data items via a prepared # statement using time tclsh import_sampledata_prepared.tcl # You can time importing the 5,000 sample data items as one single # transaction using time tclsh import_sampledata_onetransaction.tcl # You can time importing the 5,000 sample data items as single # transaction but using a pre-prepared statement using time tclsh import_sampledata_prepared_onetransaction.tcl # You will see that batching lots of inserts into a single transaction is # much faster, and although even batching prepared statements as a single # transaction is much faster than separate transactions, its still slower # than import_sampledata_onetransaction, since it communicates each # insert separately to the server. # # The trouble with doing tons of inserts as one transaction is that any error # in any insert will abort the entire transaction. Postgres 8 is supposed # to have powerful new capabilities to handle errors in the middle of a # transaction without aborting the transaction. # # The data set is in sampledata.txt. pgtcl-2.8.0/tests/all.tcl000077500000000000000000000010011420313073400152400ustar00rootroot00000000000000#!/usr/bin/env tclsh package require tcltest # Hook to determine if any of the tests failed. Then we can exit with # proper exit code: 0=all passed, 1=one or more failed proc tcltest::cleanupTestsHook {} { variable numTests set ::exitCode [expr {$numTests(Failed) > 0}] } ::tcltest::configure -testdir [file dirname [file normalize [info script]]] ::tcltest::configure {*}$argv ::tcltest::runAllTests if {$exitCode == 1} { puts "====== FAIL =====" exit $exitCode } else { puts "====== SUCCESS =====" } pgtcl-2.8.0/tests/conninfo.tcl000066400000000000000000000004721420313073400163110ustar00rootroot00000000000000# # set this to your specific location # array set conninfo { host localhost port 5432 dbname #### user #### } # Or copy and fill out the above datastructure into ~/.conninfo if {[file exists [file join $env(HOME) .conninfo.tcl]]} { source [file join $env(HOME) .conninfo.tcl] } pgtcl-2.8.0/tests/create.sql000066400000000000000000000003001420313073400157460ustar00rootroot00000000000000-- -- test table pgtest_people -- -- $Id$ -- create table pgtest_people ( email varchar, name varchar, address varchar, city varchar, state varchar, zip varchar ); pgtcl-2.8.0/tests/import_sampledata.tcl000066400000000000000000000015451420313073400202070ustar00rootroot00000000000000# # program to insert the sampledata.txt data set into pgtest_people # # $Id$ # package require Pgtcl if {[file exists conninfo.tcl]} { source conninfo.tcl } proc doit {} { set fp [open sampledata.txt] if {[info exists ::conninfo]} { set conn [pg_connect -connlist [array get ::conninfo]] } else { set conn [pg_connect -conninfo ""] } while {[gets $fp line] >= 0} { set statement "insert into pgtest_people values ([pg_quote [lindex $line 0]], [pg_quote [lindex $line 1]], [pg_quote [lindex $line 2]], [pg_quote [lindex $line 3]], [pg_quote [lindex $line 4]], [pg_quote [lindex $line 5]]);" set result [pg_exec $conn $statement] if {[pg_result $result -status] != "PGRES_COMMAND_OK"} { puts "[pg_result $result -error] executing '$statement'" } pg_result $result -clear } } if !$tcl_interactive doit pgtcl-2.8.0/tests/import_sampledata_connobj.tcl000066400000000000000000000016041420313073400217130ustar00rootroot00000000000000# # program to insert the sampledata.txt data set into pgtest_people # using the new-fangled connection and result objects # # $Id$ # package require Pgtcl if {[file exists conninfo.tcl]} { source conninfo.tcl } proc doit {} { set fp [open sampledata.txt] if {[info exists ::conninfo]} { set conn [pg_connect -connlist [array get ::conninfo]] } else { set conn [pg_connect -conninfo ""] } while {[gets $fp line] >= 0} { set statement "insert into pgtest_people values ([pg_quote [lindex $line 0]], [pg_quote [lindex $line 1]], [pg_quote [lindex $line 2]], [pg_quote [lindex $line 3]], [pg_quote [lindex $line 4]], [pg_quote [lindex $line 5]]);" set result [$conn exec $statement] if {[$result -status] != "PGRES_COMMAND_OK"} { puts "[pg_result $result -error] executing '$statement'" } $result -clear } } if !$tcl_interactive doit pgtcl-2.8.0/tests/import_sampledata_onetransaction.tcl000066400000000000000000000017001420313073400233070ustar00rootroot00000000000000# # program to insert the sampledata.txt data set into pgtest_people # in one single transaction # # $Id$ # package require Pgtcl if {[file exists conninfo.tcl]} { source conninfo.tcl } proc doit {} { set fp [open sampledata.txt] if {[info exists ::conninfo]} { set conn [pg_connect -connlist [array get ::conninfo]] } else { set conn [pg_connect -conninfo ""] } set statement "begin; " while {[gets $fp line] >= 0} { append statement "insert into pgtest_people values ([pg_quote [lindex $line 0]], [pg_quote [lindex $line 1]], [pg_quote [lindex $line 2]], [pg_quote [lindex $line 3]], [pg_quote [lindex $line 4]], [pg_quote [lindex $line 5]]); " } append statement "end;" set result [pg_exec $conn $statement] if {[pg_result $result -status] != "PGRES_COMMAND_OK"} { puts "[pg_result $result -error] executing '$statement'" } pg_result $result -clear } if !$tcl_interactive doit pgtcl-2.8.0/tests/import_sampledata_prepared.tcl000066400000000000000000000021151420313073400220630ustar00rootroot00000000000000# # program to insert the sampledata.txt data set into pgtest_people # using a prepared statement. # # $Id$ # package require Pgtcl if {[file exists conninfo.tcl]} { source conninfo.tcl } proc doit {} { set fp [open sampledata.txt] if {[info exists ::conninfo]} { set conn [pg_connect -connlist [array get ::conninfo]] } else { set conn [pg_connect -conninfo ""] } set result [pg_exec $conn {prepare pgtest_insert_people (varchar, varchar, varchar, varchar, varchar, varchar) as insert into pgtest_people values ($1, $2, $3, $4, $5, $6);}] if {[pg_result $result -status] != "PGRES_COMMAND_OK"} { puts "[pg_result $result -error] preparing statement" exit 1 } while {[gets $fp line] >= 0} { set result [pg_exec_prepared $conn pgtest_insert_people [lindex $line 0] [lindex $line 1] [lindex $line 2] [lindex $line 3] [lindex $line 4] [lindex $line 5]] if {[pg_result $result -status] != "PGRES_COMMAND_OK"} { puts "[pg_result $result -error] inserting '$line'" } pg_result $result -clear } } if !$tcl_interactive doit pgtcl-2.8.0/tests/import_sampledata_prepared_onetransaction.tcl000066400000000000000000000027211420313073400251750ustar00rootroot00000000000000# # program to insert the sampledata.txt data set into pgtest_people # using a prepared statement. # # $Id$ # package require Pgtcl if {[file exists conninfo.tcl]} { source conninfo.tcl } proc doit {} { set fp [open sampledata.txt] if {[info exists ::conninfo]} { set conn [pg_connect -connlist [array get ::conninfo]] } else { set conn [pg_connect -conninfo ""] } set result [pg_exec $conn {begin}] if {[pg_result $result -status] != "PGRES_COMMAND_OK"} { puts "[pg_result $result -error] starting the transaction" } pg_result $result -clear set result [pg_exec $conn {prepare pgtest_insert_people (varchar, varchar, varchar, varchar, varchar, varchar) as insert into pgtest_people values ($1, $2, $3, $4, $5, $6);}] if {[pg_result $result -status] != "PGRES_COMMAND_OK"} { puts "[pg_result $result -error] preparing statement" exit 1 } while {[gets $fp line] >= 0} { set result [pg_exec_prepared $conn pgtest_insert_people [lindex $line 0] [lindex $line 1] [lindex $line 2] [lindex $line 3] [lindex $line 4] [lindex $line 5]] if {[pg_result $result -status] != "PGRES_COMMAND_OK"} { puts "[pg_result $result -error] inserting '$line'" } pg_result $result -clear } set result [pg_exec $conn {commit}] if {[pg_result $result -status] != "PGRES_COMMAND_OK"} { puts "[pg_result $result -error] committing" } pg_result $result -clear } if !$tcl_interactive doit pgtcl-2.8.0/tests/pgtcl.test000066400000000000000000000674401420313073400160160ustar00rootroot00000000000000if {[lsearch [namespace children] ::tcltest] == -1} { package require tcltest 2 namespace import -force ::tcltest::* } #tcltest::verbose 100 #tcltest::debug 100 set flist [glob -nocomplain -dir .. libpgtcl*[info sharedlibextension]] set flist [concat $flist [glob -nocomplain libpgtcl*[info sharedlibextension]]] if {[llength $flist] == 0} { puts "\nCan not find a shared lib file\n" exit } puts [list loading [lindex $flist end] ...] load [lindex $flist end] if [file exists $env(HOME)/.conninfo.tcl] { puts [list sourcing $env(HOME)/.conninfo.tcl ...] source $env(HOME)/.conninfo.tcl } elseif [file exists conninfo.tcl] { puts [list sourcing conninfo.tcl ...] source conninfo.tcl } puts [list running tests ...] # # # test pgtcl-1.1 {connect to db using old connection string} -body { if [info exists ::conninfo(password)] { set conn [pg_connect $::conninfo(dbname) \ -connhandle pgsql3 \ -host $::conninfo(host) \ -port $::conninfo(port) \ -user $::conninfo(user) \ -password $::conninfo(password)] } else { set conn [pg_connect $::conninfo(dbname) \ -connhandle pgsql3 \ -host $::conninfo(host) \ -port $::conninfo(port) \ -user $::conninfo(user)] } pg_disconnect $conn set conn } -result pgsql3 # # # test pgtcl-1.2 {connect to db using conninfo string} -body { set l [list dbname=$::conninfo(dbname) host=$::conninfo(host) port=$::conninfo(port) user=$::conninfo(user)] if [info exists ::conninfo(password)] { lappend l password=$::conninfo(password) } set conn [pg_connect -connhandle pgsql3 -conninfo [join $l " "]] pg_disconnect $conn set conn } -result pgsql3 # # # test pgtcl-1.3 {connect to db using connlist option} -body { set conn [pg::connect -connhandle pgsql3 -connlist [array get ::conninfo]] pg_disconnect $conn set conn } -result pgsql3 # # # test pgtcl-1.4 {connect to db using -connhandle option} -body { set conn [pg::connect -connlist [array get ::conninfo] -connhandle myhan] pg_disconnect $conn set conn } -result myhan # # # test pgtcl-2.1 {use connection as command} -body { set conn [pg::connect -connlist [array get ::conninfo] -connhandle myhan] set res [myhan exec "SELECT * FROM Pg_class LIMIT 5"] pg_result $res -clear pg_disconnect $conn set res } -result myhan.0 # # # test pgtcl-3.1 {test getting connection handles} -body { set cnt 3 foreach C [list 1 2 3] { set myconn($C) [pg::connect -connlist [array get ::conninfo] -connhandle pgsql$cnt] incr cnt } #set conns [lsort [pg::dbinfo]] set conns [lsort [pg::dbinfo connections]] foreach C [list 1 2 3] { pg::disconnect $myconn($C) } set conns } -result [lsort [list pgsql3 pgsql4 pgsql5]] # # # test pgtcl-3.2 {test getting connection handles, after disconnect} -body { set cnt 3 foreach C [list 1 2 3] { set myconn($C) [pg::connect -connlist [array get ::conninfo] -connhandle pgsql$cnt] incr cnt } foreach C [list 1 2 3] { pg::disconnect $myconn($C) } #pg::conninfo pg::dbinfo connections } -result [list] # # # test pgtcl-3.3 {test renaming of connection handle command} -body { set conn [pg::connect -connlist [array get ::conninfo] -connhandle pgsql3] rename $conn MYCONN set res [MYCONN exec "SELECT * FROM Pg_class LIMIT 5"] pg_result $res -clear pg_disconnect $conn set res } -result pgsql3.0 # # # test pgtcl-3.4 {test deleting of a command handle} -body { unset -nocomplain res set conn [pg::connect -connlist [array get ::conninfo]] set res [$conn exec "SELECT * FROM Pg_class WHERE relname='tables'"] pg::result $res -clear rename $conn {} #pg::conninfo pg::dbinfo connections } -result [list] # # test pgtcl-4.1 {get result handles} -body { unset -nocomplain res set conn [pg::connect -connlist [array get ::conninfo] -connhandle pgsql9] foreach R [list 1 2 3 4] { set res($R) [$conn exec "SELECT * FROM Pg_class LIMIT $R"] } #set results [lsort [pg::results $conn]] set results [lsort [pg::dbinfo results $conn]] foreach R [list 1 2 3 4] { pg_result $res($R) -clear } pg_disconnect $conn set results } -result [lsort [list pgsql9.0 pgsql9.1 pgsql9.2 pgsql9.3]] # ## # test pgtcl-4.2 {test using result handle command} -body { catch {unset res} set conn [pg::connect -connlist [array get ::conninfo]] set res [$conn exec "SELECT * FROM Pg_class LIMIT 1"] set num [$res -numTuples] $res -clear pg_disconnect $conn set num } -result 1 # # # test pgtcl-4.3 {test deleting of a result handle} -body { unset -nocomplain res set conn [pg::connect -connlist [array get ::conninfo]] set res [$conn exec "SELECT * FROM Pg_class WHERE relname='tables'"] rename $res {} #pg::result $res -clear pg::dbinfo results $conn } -result [list] ## only check if have dicts installed if {[llength [info commands dict]] == 1} { # # # test pgtcl-4.4 {get results as a DICT} -body { unset -nocomplain res set conn [pg::connect -connlist [array get ::conninfo]] set res [$conn exec "SELECT * FROM Pg_class WHERE relname='pg_tables'"] set results [pg::result $res -dict] pg_result $res -clear pg_disconnect $conn dict get $results 0 relname } -result pg_tables } test pgtcl-4.5 {get results as a list} -body { unset -nocomplain res set conn [pg::connect -connlist [array get ::conninfo]] set res [$conn exec "SELECT relname FROM Pg_class WHERE relname LIKE 'pg_%' ORDER BY relname LIMIT 5"] set results [pg::result $res -list] pg_result $res -clear pg_disconnect $conn lsort $results } -result [list pg_aggregate pg_aggregate_fnoid_index pg_am pg_am_name_index pg_am_oid_index] # # # test pgtcl-4.6 {get results as a list of lists} -body { unset -nocomplain res set conn [pg::connect -connlist [array get ::conninfo]] set res [$conn exec "SELECT relname, relkind FROM Pg_class WHERE relname LIKE 'pg_%' ORDER BY relname LIMIT 3"] set results [pg::result $res -llist] pg_result $res -clear pg_disconnect $conn lsort $results } -result [list [list pg_aggregate r] [list pg_aggregate_fnoid_index i] [list pg_am r]] # # # test pgtcl-4.7 {get results an array with -assign} -body { unset -nocomplain res ARR set conn [pg::connect -connlist [array get ::conninfo]] set res [$conn exec "SELECT relname, relkind FROM Pg_class WHERE relname LIKE 'pg_%' ORDER BY relname LIMIT 1"] pg::result $res -assign ARR pg_result $res -clear pg_disconnect $conn lsort [array get ARR] } -result [lsort [list 0,relname pg_aggregate 0,relkind r]] # # # test pgtcl-4.8 {get results an array with -assignbyidx} -body { unset -nocomplain ARR res set conn [pg::connect -connlist [array get ::conninfo]] set res [$conn exec "SELECT oid, relname, relkind FROM Pg_class WHERE relname LIKE 'pg_%' ORDER BY relname LIMIT 1"] pg::result $res -assignbyidx ARR pg_result $res -clear pg_disconnect $conn lsort [array get ARR] } -result [lsort [list 2600,relname pg_aggregate 2600,relkind r]] # # # test pgtcl-4.9 {get results an array with -assignbyidx with appendstr} -body { unset -nocomplain ARR res set conn [pg::connect -connlist [array get ::conninfo]] set res [$conn exec "SELECT '0', relname, relkind FROM Pg_class WHERE relname LIKE 'pg_%' ORDER BY relname LIMIT 1"] pg::result $res -assignbyidx ARR X pg_result $res -clear pg_disconnect $conn lsort [array get ARR] } -result [lsort [list 0,relnameX pg_aggregate 0,relkindX r]] # # # test pgtcl-4.10 {test pg_result -numAttrs} -body { unset -nocomplain res num set conn [pg::connect -connlist [array get ::conninfo]] set res [$conn exec "SELECT oid, relname, relkind FROM Pg_class WHERE relname LIKE 'pg_%' ORDER BY relname LIMIT 1"] set num [pg::result $res -numAttrs] pg_result $res -clear pg_disconnect $conn set num } -result 3 # # # test pgtcl-4.11 {test pg_result -numTuples} -body { unset -nocomplain res num set conn [pg::connect -connlist [array get ::conninfo]] set res [$conn exec "SELECT oid, relname, relkind FROM Pg_class WHERE relname LIKE 'pg_%' ORDER BY relname LIMIT 10"] set num [pg::result $res -numTuples] pg_result $res -clear pg_disconnect $conn set num } -result 10 # # # test pgtcl-4.12 {test pg_result -status} -body { unset -nocomplain res stat set conn [pg::connect -connlist [array get ::conninfo]] set res [$conn exec "SELECT 1 FROM Pg_class WHERE relname LIKE 'pg_%' ORDER BY relname LIMIT 1"] set stat [pg::result $res -status] pg_result $res -clear pg_disconnect $conn set stat } -result "PGRES_TUPLES_OK" # # # test pgtcl-4.13 {test pg_result -error} -body { unset -nocomplain res stat set conn [pg::connect -connlist [array get ::conninfo]] set res [$conn exec "SELECT 1 FROM Pg_junk"] set stat [string match "*does not exist*" [pg::result $res -error]] pg_result $res -clear pg_disconnect $conn set stat } -result 1 # # # test pgtcl-4.14 {test pg_result -conn} -body { unset -nocomplain res stat set conn [pg::connect -connlist [array get ::conninfo] -connhandle PGTEST] set res [$conn exec "SELECT 1 FROM Pg_class"] set stat [pg_result $res -conn] pg_result $res -clear pg_disconnect $conn set stat } -result PGTEST # # # test pgtcl-4.15 {test pg_result -getTuple} -body { unset -nocomplain res stat set conn [pg::connect -connlist [array get ::conninfo]] set res [$conn exec "SELECT 'one', 'two' FROM Pg_class WHERE relname LIKE 'pg_%' ORDER BY relname LIMIT 1"] set stat [pg_result $res -getTuple 0] pg_result $res -clear pg_disconnect $conn set stat } -result [list one two] # # # test pgtcl-4.16 {test pg_result -typleArray} -body { unset -nocomplain res ARR set conn [pg::connect -connlist [array get ::conninfo]] set res [$conn exec "SELECT 'one' AS col1, 'two' AS col2 FROM Pg_class WHERE relname LIKE 'pg_%' ORDER BY relname LIMIT 1"] pg_result $res -tupleArray 0 ARR pg_result $res -clear pg_disconnect $conn lsort [array get ARR] } -result [lsort [list col1 one col2 two]] # # # test pgtcl-4.17 {test pg_result -attributes} -body { unset -nocomplain res stat set conn [pg::connect -connlist [array get ::conninfo]] set res [$conn exec "SELECT 'one' AS col1, 'two' AS col2 FROM Pg_class WHERE relname LIKE 'pg_%' ORDER BY relname LIMIT 1"] set stat [pg_result $res -attributes] pg_result $res -clear pg_disconnect $conn lsort $stat } -result [lsort [list col1 col2]] # # # test pgtcl-4.18 {test pg_result -lAttributes} -body { unset -nocomplain res stat set conn [pg::connect -connlist [array get ::conninfo]] set res [$conn exec "SELECT 'one' AS col1, 'two' AS col2 FROM Pg_class WHERE relname LIKE 'pg_%' ORDER BY relname LIMIT 1"] set stat [pg_result $res -lAttributes] pg_result $res -clear pg_disconnect $conn # drop actual type details (oid, size) because they're not stable set names {} foreach tuple $stat { lappend names [lindex $tuple 0] } set names } -result [list col1 col2] # # # test pgtcl-5.1 {quote a string} -body { set qstr [pg::quote "o'reilly"] set qstr } -result 'o''reilly' # # # test pgtcl-5.2 {escape a binary string} -body { set bn [binary format a* \000\\HELLO's] set qstr [pg::escape_bytea $bn] set qstr } -result \\000\\\\HELLO''s # # # test pgtcl-5.3 {unescape a binary string} -body { set qstr [pg::unescape_bytea "\\\\000\\\\\\\\HELLO\\'s"] set qstr } -result [binary format a* \\000\\\\HELLO\'s] # # # test pgtcl-6.1 {using pg_exec with params} -body { unset -nocomplain res set conn [pg::connect -connlist [array get ::conninfo]] set res [$conn exec {SELECT relname FROM Pg_class WHERE relname LIKE $1 ORDER BY relname LIMIT $2} "pg_%" 5] set results [pg::result $res -list] pg_result $res -clear pg_disconnect $conn lsort $results } -result [list pg_aggregate pg_aggregate_fnoid_index pg_am pg_am_name_index pg_am_oid_index] # # # test pgtcl-6.2 {using pg_exec_prepared with params} -body { unset -nocomplain res set conn [pg::connect -connlist [array get ::conninfo]] set res [$conn exec {PREPARE test_prepare (integer) AS SELECT relname FROM Pg_class WHERE relname LIKE 'pg_%' ORDER BY relname LIMIT $1}] set res [pg::exec_prepared $conn test_prepare 5] set results [pg::result $res -list] if {[$res -status] != "PGRES_TUPLES_OK"} { puts "[$res -status] [pg::result $res -error] during select" } pg_result $res -clear pg_disconnect $conn lsort $results } -result [list pg_aggregate pg_aggregate_fnoid_index pg_am pg_am_name_index pg_am_oid_index] # # # test pgtcl-6.3 {using pg_exec with named params} -body { unset -nocomplain res set conn [pg::connect -connlist [array get ::conninfo]] array set params {pattern "pg_%" limit 5} set res [$conn exec -paramarray params {SELECT relname FROM Pg_class WHERE relname LIKE `pattern` ORDER BY relname LIMIT `limit`}] set results [pg::result $res -list] pg_result $res -clear pg_disconnect $conn lsort $results } -result [list pg_aggregate pg_aggregate_fnoid_index pg_am pg_am_name_index pg_am_oid_index] # # # test pgtcl-6.4 {using pg_exec with embedded variables} -body { unset -nocomplain res set conn [pg::connect -connlist [array get ::conninfo]] set pattern "pg_%" set limit 5 set res [$conn exec -variables {SELECT relname FROM Pg_class WHERE relname LIKE :pattern ORDER BY relname LIMIT :limit}] set results [pg::result $res -list] pg_result $res -clear pg_disconnect $conn lsort $results } -result [list pg_aggregate pg_aggregate_fnoid_index pg_am pg_am_name_index pg_am_oid_index] # # # test pgtcl-6.5 {pg_select error code} -body { unset -nocomplain res set conn [pg::connect -connlist [array get ::conninfo]] catch {$conn select "SELECT * FROM UNKNOWN_TABLE_GLARGH;" _ {break}} set res $::errorCode pg_disconnect $conn set res } -result {POSTGRESQL PGRES_FATAL_ERROR {ERROR: relation "unknown_table_glargh" does not exist}} # # # test pgtcl-6.6 {using pg_exec with statement starting with a comment} -body { unset -nocomplain res set conn [pg::connect -connlist [array get ::conninfo]] set res [$conn exec {-- something about this statement here SELECT relname FROM Pg_class WHERE relname LIKE 'pg_%' ORDER BY relname LIMIT 5}] set results [pg::result $res -list] pg_result $res -clear pg_disconnect $conn lsort $results } -result [list pg_aggregate pg_aggregate_fnoid_index pg_am pg_am_name_index pg_am_oid_index] # # # test pgtcl-7.1 {using pg_select} -body { unset -nocomplain res set conn [pg::connect -connlist [array get ::conninfo]] set names {} pg::select $conn "SELECT relname FROM Pg_class LIMIT 5" resultArr { set headers $resultArr(.headers) set numcols $resultArr(.numcols) set tupno $resultArr(.tupno) lappend names $resultArr(relname) } rename $conn {} llength $names } -result 5 # # # test pgtcl-7.2 {using pg_select via handle} -body { unset -nocomplain res set conn [pg::connect -connlist [array get ::conninfo]] set names {} $conn select "SELECT relname FROM Pg_class LIMIT 5" resultArr { set headers $resultArr(.headers) set numcols $resultArr(.numcols) set tupno $resultArr(.tupno) lappend names $resultArr(relname) } rename $conn {} llength $names } -result 5 # # # test pgtcl-7.3 {using pg_select with parameters} -body { unset -nocomplain res set conn [pg::connect -connlist [array get ::conninfo]] set names {} $conn select -params {pg_% 5} {SELECT relname FROM Pg_class WHERE relname like $1 LIMIT $2} resultArr { set headers $resultArr(.headers) set numcols $resultArr(.numcols) set tupno $resultArr(.tupno) lappend names $resultArr(relname) } rename $conn {} llength $names } -result 5 # # # test pgtcl-7.4 {using pg_select with named parameters} -body { unset -nocomplain res set conn [pg::connect -connlist [array get ::conninfo]] set names {} array set params {pattern pg_% limit 5} $conn select -paramarray params "SELECT relname FROM Pg_class WHERE relname like `pattern` LIMIT `limit`" resultArr { set headers $resultArr(.headers) set numcols $resultArr(.numcols) set tupno $resultArr(.tupno) lappend names $resultArr(relname) } rename $conn {} llength $names } -result 5 # # # test pgtcl-7.5 {using pg_select with embedded variables} -body { unset -nocomplain res set conn [pg::connect -connlist [array get ::conninfo]] set names {} set pattern "pg_%" set limit 5 $conn select -variables "SELECT relname FROM Pg_class WHERE relname like :pattern LIMIT :limit" resultArr { set headers $resultArr(.headers) set numcols $resultArr(.numcols) set tupno $resultArr(.tupno) lappend names $resultArr(relname) } rename $conn {} llength $names } -result 5 # # # test pgtcl-7.6 {pg_select -count} -body { unset -nocomplain res set conn [pg::connect -connlist [array get ::conninfo]] set names {} pg::select $conn -count ntuples "SELECT relname FROM Pg_class LIMIT 5" resultArr { set headers $resultArr(.headers) set numcols $resultArr(.numcols) set tupno $resultArr(.tupno) lappend names $resultArr(relname) set count $ntuples } rename $conn {} list [llength $names] $count } -result {5 5} # # # test pgtcl-8.1 {using pg_execute} -body { unset -nocomplain res names set conn [pg::connect -connlist [array get ::conninfo]] set names [list] pg::execute -array resultArr $conn "SELECT relname FROM Pg_class LIMIT 5" { lappend names $resultArr(relname) } rename $conn {} llength $names } -result 5 # # # test pgtcl-8.2 {using connection command handle for pg_execute, no options} -body { unset -nocomplain res names set conn [pg::connect -connlist [array get ::conninfo]] $conn execute -array resultArr "SELECT relname FROM Pg_class LIMIT 5" { lappend ::names $resultArr(relname) } rename $conn {} llength $::names } -result 5 # # # test pgtcl-8.3 {using connection command handle for pg_execute, -array option} -body { unset -nocomplain res names set conn [pg::connect -connlist [array get ::conninfo]] $conn execute -array resultArr -oid OID "SELECT relname FROM Pg_class LIMIT 5" { lappend ::names $resultArr(relname) } rename $conn {} llength $::names } -result 5 # # # test pgtcl-9.1 {dbinfo version} -body { unset -nocomplain res set conn [pg::connect -connlist [array get ::conninfo]] set val [pg::dbinfo version $conn] set val2 [$conn version] lappend res [string equal $val $val2] ::pg::disconnect $conn lappend res [regexp {(7|8|9|10|11|12)0([0-9])[012]([0-9])} $val] } -result [list 1 1] # # # test pgtcl-9.2 {dbinfo protocol} -body { unset -nocomplain res set conn [pg::connect -connlist [array get ::conninfo]] set val [pg::dbinfo protocol $conn] set val2 [$conn protocol] lappend res [string equal $val $val2] ::pg::disconnect $conn lappend res [regexp {2|3} $val] } -result [list 1 1] # # # test pgtcl-9.3 {dbinfo param} -body { unset -nocomplain res set conn [pg::connect -connlist [array get ::conninfo]] set val [pg::dbinfo param $conn server_version] set val2 [$conn param server_version] lappend res [string equal $val $val2] ::pg::disconnect $conn set match [regexp {(7|8|9|10|11|12)\.([0-9])\.([0-9])} $val] if {!$match} { set match [regexp {^(10|11|12)\.[1-9][0-9]* \(.*} $val] } lappend res $match } -result [list 1 1] # # # test pgtcl-9.4 {dbinfo backend pid} -body { unset -nocomplain res set conn [pg::connect -connlist [array get ::conninfo]] set val [pg::dbinfo backendpid $conn] set val2 [$conn backendpid] lappend res [string equal $val $val2] ::pg::disconnect $conn lappend res [regexp {^[0-9]{2,7}$} $val] } -result [list 1 1] # # # test pgtcl-9.5 {dbinfo socket} -body { unset -nocomplain res set conn [pg::connect -connlist [array get ::conninfo]] set val [pg::dbinfo socket $conn] set val2 [$conn socket] lappend res [string equal $val $val2] ::pg::disconnect $conn lappend res [regexp {^[0-9]{1,6}$} $val] } -result [list 1 1] # # COPY in/out tests # test pgtcl-10.1 {copy in} -body { unset -nocomplain res set conn [pg::connect -connlist [array get ::conninfo]] set r [pg_exec $conn { CREATE TEMPORARY TABLE test1011 ( key text primary key, val text ); }] set ok 1 if {[pg_result $r -status] ne "PGRES_COMMAND_OK"} { set ok 0 set result "ERROR [pg_result $r -status] [pg_result $r -error]" } pg_result $r -clear if {$ok} { set r [pg_exec $conn "COPY test1011 FROM stdin with DELIMITER as '\t';"] if {"[pg_result $r -status]" ne "PGRES_COPY_IN"} { set ok 0 set result "ERROR [pg_result $r -status] [pg_result $r -error]" } else { puts $conn "name batfink" puts $conn "wings steel" puts $conn "type superhero" puts $conn "studio Hal Seeger Studios" puts $conn "\\." } } if {$ok} { set result {} pg_select $conn -nodotfields "select key,val from test1011 ORDER BY key;" row { lappend result [array get row] } } ::pg::disconnect $conn set result } -result {{key name val batfink} {key studio val {Hal Seeger Studios}} {key type val superhero} {key wings val steel}} # # # test pgtcl-10.2 {copy in new API} -body { unset -nocomplain res set conn [pg::connect -connlist [array get ::conninfo]] set r [pg_exec $conn { CREATE TEMPORARY TABLE test1011 ( key text primary key, val text ); }] set ok 1 if {[pg_result $r -status] ne "PGRES_COMMAND_OK"} { set ok 0 set result "ERROR [pg_result $r -status] [pg_result $r -error]" } pg_result $r -clear if {$ok} { set r [pg_exec $conn "COPY test1011 FROM stdin with DELIMITER as '\t';"] if {"[pg_result $r -status]" ne "PGRES_COPY_IN"} { set ok 0 set result "ERROR [pg_result $r -status] [pg_result $r -error]" } else { puts $conn "name batfink" puts $conn "wings steel" puts $conn "type superhero" puts $conn "studio Hal Seeger Studios" $conn copy_complete } } if {$ok} { set result {} pg_select $conn -nodotfields "select key,val from test1011 ORDER BY key;" row { lappend result [array get row] } } ::pg::disconnect $conn set result } -result {{key name val batfink} {key studio val {Hal Seeger Studios}} {key type val superhero} {key wings val steel}} # # # test pgtcl-10.3 {copy out} -body { unset -nocomplain res set conn [pg::connect -connlist [array get ::conninfo]] set r [pg_exec $conn { CREATE TEMPORARY TABLE test1011 ( key text primary key, val text ); INSERT INTO test1011 (key, val) VALUES ('name', 'batfink'); INSERT INTO test1011 (key, val) VALUES ('wings', 'steel'); INSERT INTO test1011 (key, val) VALUES ('type', 'superhero'); INSERT INTO test1011 (key, val) VALUES ('studio', 'Hal Seeger Studios'); }] set ok 1 if {[pg_result $r -status] ne "PGRES_COMMAND_OK"} { set ok 0 set result "ERROR [pg_result $r -status] [pg_result $r -error]" } pg_result $r -clear if {$ok} { set r [pg_exec $conn "COPY test1011 TO stdout with DELIMITER as '\t';"] if {"[pg_result $r -status]" eq "PGRES_COPY_OUT"} { set result {} while {[gets $conn line]>= 0} { lappend result [split $line "\t"] } } else { set result "ERROR [pg_result $r -status] [pg_result $r -error]" } pg_result $r -clear set result [lsort -index 0 $result] } ::pg::disconnect $conn set result } -result {{name batfink} {studio {Hal Seeger Studios}} {type superhero} {wings steel}} # # # test pgtcl-11.0 {using pg_exec with 4-byte unicode} -body { unset -nocomplain res set conn [pg::connect -connlist [array get ::conninfo]] set glyph "ð”„" set res [$conn exec {SELECT relname FROM Pg_class WHERE relname LIKE '$glyph'}] set results [pg::result $res -list] pg_result $res -clear pg_disconnect $conn lsort $results } -result [list] # # # test pgtcl-11.1 {using pg_exec with 4-byte unicode variables} -body { unset -nocomplain res set conn [pg::connect -connlist [array get ::conninfo]] set glyph "ð”„" set res [$conn exec -variables {SELECT relname FROM Pg_class WHERE relname LIKE :glyph}] set results [pg::result $res -list] pg_result $res -clear pg_disconnect $conn lsort $results } -result [list] # # # test pgtcl-11.2 {using pg_exec with 4-byte unicode array replacement} -body { unset -nocomplain res set conn [pg::connect -connlist [array get ::conninfo]] set paramarray(glyph) "ð”„" set res [$conn exec -paramarray paramarray {SELECT relname FROM Pg_class WHERE relname LIKE `glyph`}] set results [pg::result $res -list] pg_result $res -clear pg_disconnect $conn lsort $results } -result [list] # # # test pgtcl-11.3 {using pg_exec with 4-byte unicode positional args} -body { unset -nocomplain res set conn [pg::connect -connlist [array get ::conninfo]] set paramarray(glyph) "ð”„" set res [$conn exec {SELECT relname FROM Pg_class WHERE relname LIKE $1} $glyph] set results [pg::result $res -list] pg_result $res -clear pg_disconnect $conn lsort $results } -result [list] puts "tests complete" pgtcl-2.8.0/tests/sampledata.txt000066400000000000000000014244021420313073400166540ustar00rootroot00000000000000betty@noway1234.com {Betty Robinson} {2387 Amherst Court} Newcastle TX 77473 joe@noway1234.com {Joe Kroeze} {908 Byron Drive} Amarillo TX 77411 elton@noway1234.com {Elton Peterson} {5447 Capstan Drive} Ketherine TX 77110 schmidt@noway1234.com {Betty Schmidt} {6015 Greece Circle} {Broken Hill} TX 77802 orvin@noway1234.com {Orvin Brockman} {11288 Iona Circle} Star TX 77217 everett@noway1234.com {Everett Kreiling} {2784 Chelea Street} Hamilton TX 77168 orian@noway1234.com {Orian Goracke} {622 Rhyner Court} {Coffs Harbour} TX 77733 irvin@noway1234.com {Irvin Hansel} {2761 East 95th Avenue} Austin TX 77050 paul@noway1234.com {Paul Carmine} {9159 Trisha Avenue} Cairns TX 77229 mullins@noway1234.com {Mullins Wachosky} {3193 West 78th Avenue} Cairns TX 77589 amanda@noway1234.com {Amanda Witte} {4273 Fesler Road} Ketherine TX 77159 jenevieve@noway1234.com {Jenevieve Grof} {3052 Marlowe Avenue} Bendigo TX 77213 boyd@noway1234.com {Boyd Hinkle} {2711 Bootlegger Cove Drive} {Broken Hill} TX 77116 jo@noway1234.com {Jo Dwinell} {1526 Lahonda Drive} Katy TX 77268 lewis@noway1234.com {Lewis Jewell} {8000 Stargazer Circle} {Port Hedland} TX 77816 j_r@noway1234.com {J.R. Packett} {8177 Lloyd Drive} {Mount Isa} TX 77087 hazelton@noway1234.com {Hazelton Gottula} {7950 Pullen Circle} Sunnyville TX 77871 tate@noway1234.com {Tate Nielsen} {3096 Wellington Court} Brookshire TX 77082 vera@noway1234.com {Vera Wilhelm} {9028 Temple Circle} Albany TX 77610 loring@noway1234.com {Loring Urich} {1917 Round Tree Circle} Pattison TX 77363 martha@noway1234.com {Martha Michl} {7916 Craig Creek Circle} Nacogdoches TX 77982 aubry@noway1234.com {Aubry Lyons} {69 Sambar Loop} Launceston TX 77371 lou@noway1234.com {Lou Mahoney} {9587 Reka Drive} {Tennant Creek} TX 77616 laxton@noway1234.com {Laxton Brommer} {4785 Westland Circle} Katy TX 77455 bulah@noway1234.com {Bulah Reinhardt} {9130 Northrup Circle} Queenstown TX 77791 sand@noway1234.com {Betty Sand} {10133 Evenson Court} Centerville TX 77222 clayton@noway1234.com {Clayton Rubin} {4401 Mountain Lake Circle} Tamworth TX 77235 holcomb@noway1234.com {Holcomb Rulla} {4176 Grizzly Avenue} Adelaide TX 77661 anna@noway1234.com {Anna Rubin} {10740 Polaris Way} Cairns TX 77118 penny@noway1234.com {Penny Malone} {8115 Ahtena Circle} Austin TX 77456 j_v@noway1234.com {J.V. Lewis} {10289 Kitlina Circle} Katy TX 77748 evert@noway1234.com {Evert Wachosky} {3437 Strathmore Drive} Queenstown TX 77712 katie@noway1234.com {Katie Mahar} {6559 Eshamy Bay Drive} Waco TX 77508 b@noway1234.com {B. Mccoy} {4687 Delong Landing Circle} Adelaide TX 77910 glen@noway1234.com {Glen Zillig} {916 Shelter Rock Circle} Queenstown TX 77558 linda@noway1234.com {Linda Walters} {10127 Sunshine Loop} {Port Augusta} TX 77515 babe@noway1234.com { Babe Sherman} {10748 Honey Bear Circle} Centerville TX 77705 howard@noway1234.com {Howard Feese} {5596 Folker Circle} Bathurst TX 77483 jeanette@noway1234.com {Jeanette Xayaphonesongkham} {5071 Andre'e Drive} Amarillo TX 77070 edwin@noway1234.com {Edwin McDonald} {8466 Mount Kiliak Circle} Katy TX 77791 carol@noway1234.com {Carol Buethe} {1620 Hocker Place} Mildura TX 77563 mable@noway1234.com {Mable Schermbeck} {5353 Tayshee Circle} Albany TX 77337 mack@noway1234.com {Mack Bohling} {6551 Baywind Circle} {Mount Isa} TX 77455 boggs@noway1234.com {Boggs Hahn} {1036 Greenbrook Drive} {Alice Springs} TX 77747 lucille@noway1234.com {Lucille Johnson} {8519 Majestic Court} Centerville TX 77628 ona@noway1234.com {Ona Sterlin} {8050 Icefall Place} Pattison TX 77036 tootsie@noway1234.com {Tootsie Fisher} {1393 Doncaster Drive} Katy TX 77546 popcorn@noway1234.com {Popcorn Hays} {5245 Elkhorn Drive} Rockhampton TX 77667 beam@noway1234.com {Beam Rau} {1822 Gardner Street} Austin TX 77011 white@noway1234.com {White Staley} {7686 Alpha Circle} {Alice Springs} TX 77752 butler@noway1234.com {Butler Somchay} {4866 Bisquier Drive} {Coober Pedy} TX 77479 shrewsbury@noway1234.com {Shrewsbury Mann} {8477 Ledora Circle} Launceston TX 77211 leroy@noway1234.com {LeRoy Rexroth} {10599 Loveland Circle} Star TX 77139 w@noway1234.com {W. Stauffer} {11135 Lynwood Drive} Centerville TX 77406 ovid@noway1234.com {Ovid Heidemann} {7449 Margaret Mielke Street} Hamilton TX 77930 thomas@noway1234.com {Thomas Chritton} {7489 Dinaaka Drive} Wollongong TX 77220 jean@noway1234.com {Jean Bossung} {5142 East 84th Avenue} {Coober Pedy} TX 77018 verelene@noway1234.com {Verelene Mcculla} {7655 Leo's Road} Sunnyville TX 77875 topp@noway1234.com {Butler Topp} {9935 Province Circle} {Coffs Harbour} TX 77558 acree@noway1234.com {Acree Reilly} {5429 South River Lane} Bendigo TX 77784 waggoner@noway1234.com {Waggoner Kerchal} {7884 Link Brook Court} {Tennant Creek} TX 77756 dimple@noway1234.com {Dimple Berg} {5531 Southbluff Circle} Broome TX 77614 joyce@noway1234.com {Joyce Davis} {4744 Gertrude Street} Galveston TX 77484 gillispie@noway1234.com {Gillispie Lofgren} {2416 Lott Landing Circle} Tamworth TX 77336 orval@noway1234.com {Orval Bauers} {10621 Southport Drive} Sunnyville TX 77622 acie@noway1234.com {Acie Thurber} {440 Dawn Street} {Alice Springs} TX 77860 thurmond@noway1234.com {Thurmond Triplett} {6604 Rushwood Circle} Galveston TX 77241 vaughn@noway1234.com {Vaughn Meints} {10871 Kronos Drive} Katy TX 77740 charlotte@noway1234.com {Charlotte Volkmer} {3706 Tofson Street} Austin TX 77325 muncey@noway1234.com {Muncey Purdy} {601 Monastery Drive} {Tennant Creek} TX 77370 young@noway1234.com {Young Nixon} {19 Longhorn Street} Sunnyville TX 77328 mardell@noway1234.com {Mardell Brockman} {1692 East 23rd Avenue} Albury TX 77895 ruby@noway1234.com {Ruby Johnson} {5194 Wild Iris Circle} {San Antonio} TX 77198 horstman@noway1234.com {Loring Horstman} {10614 West 73rd Circle} Galveston TX 77227 elizabeth@noway1234.com {Elizabeth Humann} {8983 Longbow Drive} Broome TX 77446 e@noway1234.com {E. Driskell} {2065 Birch Trail Circle} Rockhampton TX 77442 delbert@noway1234.com {Delbert Rau} {3405 Winter Haven Street} Albury TX 77930 perry@noway1234.com {Perry Weinrich} {1249 Upper O'malley Road} {Tennant Creek} TX 77453 margaret@noway1234.com {Margaret Rebuck} {5459 Boyd Street} Waco TX 77053 iris@noway1234.com {Iris Goemann} {6756 Thunder Street} Hamilton TX 77786 staley@noway1234.com {Lou Staley} {5473 Lindsey Drive} {Alice Springs} TX 77043 jason@noway1234.com {Jason Bohung} {2894 Crystal Road} Albury TX 77543 garris@noway1234.com {Waggoner Garris} {879 Arlberg Avenue} Sunnyville TX 77368 cecil@noway1234.com {Cecil Foetisch} {1885 Arlene Street} Townsville TX 77594 franklin@noway1234.com {Franklin Beck} {5365 Maywood Circle} Rockhampton TX 77493 s@noway1234.com {S. Kunzman} {10694 Quiet Way} Eucla TX 77909 noralee@noway1234.com {Noralee Rogers} {1800 Brookview Street} Independence TX 77337 cantrell@noway1234.com {Cantrell Thurber} {2866 Bridle Circle} {Port Augusta} TX 77689 ida@noway1234.com {Ida Leahy} {9649 Lake View Circle} Albury TX 77861 tressie@noway1234.com {Tressie Lempka} {10986 East 114th Avenue} Newcastle TX 77395 sterling@noway1234.com {Sterling Boardman} {4778 Cisek Drive} Waco TX 77628 dieckmann@noway1234.com {Charlotte Dieckmann} {11729 I Street} Launceston TX 77551 maw@noway1234.com {Maw Hershberger} {672 Burning Bush Drive} Bendigo TX 77383 burton@noway1234.com {Burton Rohrs} {5109 Warehouse Avenue} Brookshire TX 77319 patsy@noway1234.com {Patsy Finke} {6660 Juneau Drive} {Padre Island} TX 77118 charles@noway1234.com {Charles Littlejohn} {9508 Biglerville Circle} Star TX 77141 piersol@noway1234.com {Iris Piersol} {4209 San Jeronimo Drive} Independence TX 77975 clifton@noway1234.com {Clifton Ham} {920 Tayshee Circle} Amarillo TX 77803 delmas@noway1234.com {Delmas Ullman} {7202 Finland Court} {Mount Isa} TX 77751 dorthy@noway1234.com {Dorthy Greene} {47 East 160th Avenue} Independence TX 77023 mcalexander@noway1234.com {Iris Mcalexander} {1056 Tyl's Trail} Rockhampton TX 77080 nellie@noway1234.com {Nellie Polson} {3120 Anchor Park Circle} Tamworth TX 77298 earl@noway1234.com {Earl Phillips} {10120 East 72nd Avenue} {Coffs Harbour} TX 77852 orville@noway1234.com {Orville Gillette} {6961 Austin Avenue} Kema TX 77134 dominic@noway1234.com {Dominic Wenzl} {9898 Fairmount Circle} Bourke TX 77157 bud@noway1234.com {Bud Topp} {7287 Illiamna Avenue} Hamilton TX 77392 mae@noway1234.com {Mae Othmer} {5951 Zappa Place} Katy TX 77396 brother@noway1234.com {Brother Lewis} {4369 Hunt Circle} Star TX 77754 esser@noway1234.com {Nellie Esser} {6829 Boniface Parkway} Albury TX 77721 woods@noway1234.com {Woods Aust} {3654 West 11th Avenue} Monaville TX 77263 c@noway1234.com {C. Lyons} {1582 Ira Drive} {Padre Island} TX 77932 marty@noway1234.com {Marty Glasson} {3984 Perenosa Circle} Launceston TX 77303 rebuck@noway1234.com {Lucille Rebuck} {8955 Crataegus Avenue} Mildura TX 77748 velma@noway1234.com {Velma Thompson} {6436 Communications Avenue} Bathurst TX 77994 roxie@noway1234.com {Roxie Mahoney} {1603 Suncrest Circle} Centerville TX 77220 pat@noway1234.com {Pat Volkmer} {7502 Ostovia Circle} {Coober Pedy} TX 77493 ester@noway1234.com {Ester Speckmann} {416 Chestnut Court} Katy TX 77500 t@noway1234.com {T. Putnam} {9271 Italy Circle} Nacogdoches TX 77473 farley@noway1234.com {Mable Farley} {2837 Norgaard Road} Centerville TX 77524 harlan@noway1234.com {Harlan Chritton} {7928 Cape Noble Circle} {San Felipe} TX 77392 kip@noway1234.com {Kip Petersen} {9435 Mossberry Place} Eucla TX 77880 dirty@noway1234.com {Dirty Bernadt} {5824 Sextant Circle} Nacogdoches TX 77357 mary@noway1234.com {Mary Menard} {5420 East 63rd Avenue} {Mount Gambier} TX 77910 annalee@noway1234.com {Annalee Goings} {3516 Rodeo Circle} Townsville TX 77552 becky@noway1234.com {Becky Hesman} {10641 D Street} {Padre Island} TX 77625 melvina@noway1234.com {Melvina Kaufman} {7650 Canton Loop} Austin TX 77517 johnson@noway1234.com {Lucille Johnson} {2676 Dome Circle} {Mount Isa} TX 77199 l@noway1234.com {L. Durst} {3697 Traverse Way} {Tennant Creek} TX 77685 helen@noway1234.com {Helen Gibson} {1502 Northfleet Drive} Brookshire TX 77674 gladys@noway1234.com {Gladys Othmer} {3344 Tamarack Street} Kema TX 77575 ellis@noway1234.com {Ellis Suydan} {8840 Goose Lake Drive} Townsville TX 77718 hughart@noway1234.com {Hughart Hardin} {10499 Charity Circle} {Coober Pedy} TX 77649 collene@noway1234.com {Collene McCain} {170 Caspian Court} Albany TX 77466 sattler@noway1234.com {Sattler Van} {9866 East Fireweed Lane} Newcastle TX 77998 colombia@noway1234.com {Colombia Husing} {7726 Bayshore Drive} Bourke TX 77591 trossie@noway1234.com {Trossie Schermbeck} {6781 Seclusion Bay Drive} Independence TX 77345 lee@noway1234.com {Lee Chrastil} {11620 Polaris Way} Newcastle TX 77873 dee@noway1234.com {Dee Ray} {4118 West 94th Court} {Tennant Creek} TX 77426 nicholas@noway1234.com {Nicholas Sand} {6117 Talon Circle} Ketherine TX 77523 reed@noway1234.com {Ellis Reed} {8890 Wildwood Circle} Albany TX 77303 jerold@noway1234.com {Jerold Mahar} {7102 Rancho Drive} {Alice Springs} TX 77943 rosa@noway1234.com {Rosa Sikyta} {4389 Fairmount Circle} Newcastle TX 77307 doylene@noway1234.com {Doylene Morrow} {21 Glacier Street} Dallas TX 77605 loretta@noway1234.com {Loretta Betzelberger} {47 Heidi Circle} {Mount Isa} TX 77290 ada@noway1234.com {Ada Pierce} {4440 Kent Avenue} Dallas TX 77462 strickland@noway1234.com {Strickland Christen} {8417 Hampton Drive} Amarillo TX 77691 harman@noway1234.com {Annalee Harman} {3697 Gordon Circle} Independence TX 77177 cheryl@noway1234.com {Cheryl Wall} {8174 Porphyry Mountain Way} Adelaide TX 77498 dottie@noway1234.com {Dottie VanWinkle} {6723 Pelican Drive} Star TX 77707 given@noway1234.com {Given Foetisch} {6602 West 38th Avenue} Pattison TX 77502 a@noway1234.com {A. Hitzeman} {5002 Talarik Drive} Cairns TX 77670 vicki@noway1234.com {Vicki Foetisch} {5073 Nigh Road} {San Felipe} TX 77706 lenora@noway1234.com {Lenora Fritsch} {8046 Teresa Circle} Albury TX 77323 melvern@noway1234.com {Melvern Sterling} {11869 Hillandale Avenue} Queenstown TX 77931 buddy_boy@noway1234.com {Buddy Boy Vrbka} {3693 Trent Circle} Pattison TX 77410 whiskey@noway1234.com {Whiskey Murphy} {4805 Sultana Drive} OOdnadatta TX 77209 terrance@noway1234.com {Terrance Mayfield} {5500 Anchorage Port Road} Katy TX 77108 phillip@noway1234.com {Phillip Mason} {11094 Wellsford Circle} Nacogdoches TX 77204 donohue@noway1234.com {Donohue Field} {7128 Winchester Loop} {Alice Springs} TX 77406 evalene@noway1234.com {Evalene Hemmer} {10602 Kailyard Street} Nacogdoches TX 77758 ward@noway1234.com {Ward Badellino} {6025 Dorchester Street} Sunnyville TX 77565 rachelle@noway1234.com {Rachelle Geweke} {6022 Kelly Maureen Circle} {Port Augusta} TX 77936 dale@noway1234.com {Dale Lade} {6402 Warning Drive} Adelaide TX 77776 malone@noway1234.com {Lee Malone} {3959 East 50th Avenue} Brookshire TX 77010 jeanie@noway1234.com {Jeanie Bevard} {6446 Friendship Lane} Nacogdoches TX 77861 floyd@noway1234.com {Floyd Kent} {3484 Stewart Mountain Drive} Rockhampton TX 77264 levy@noway1234.com {Levy Lade} {9847 Mariah Drive} Monaville TX 77942 ella@noway1234.com {Ella Ray} {2329 Akula Drive} {Broken Hill} TX 77711 bonnie@noway1234.com {Bonnie Brown} {6542 Spinnaker Drive} Dallas TX 77743 merle@noway1234.com {Merle Topp} {8016 Peter S Ezi Street} {Coober Pedy} TX 77299 butcher@noway1234.com {Butcher Robinson} {2860 Glacier Creek Drive} {Padre Island} TX 77551 donna@noway1234.com {Donna Esser} {3673 Rowan Street} Pattison TX 77179 chilton@noway1234.com {Chilton Morris} {2789 Crataegus Circle} Townsville TX 77275 j_d@noway1234.com {J.D. Rohmeyer} {11769 Southpark Bluff Drive} Mildura TX 77487 rapp@noway1234.com {Rapp Sova} {9356 Lake View Drive} {San Felipe} TX 77964 ethel@noway1234.com {Ethel Hitzeman} {3724 Forest Village Drive} Rockhampton TX 77628 frame@noway1234.com {Frame Smithers} {4295 East Prince Of Peace Drive} Ketherine TX 77695 strossie@noway1234.com {Strossie Menard} {9309 Turnagain Parkway} Queenstown TX 77154 henrichs@noway1234.com {C. Henrichs} {11879 Seacliff Street} Amarillo TX 77064 jackson@noway1234.com {Jackson VanLaningham} {9948 Sparkle Drive} Star TX 77354 joann@noway1234.com {JoAnn VanWinkle} {10395 Meadow View Drive} {San Felipe} TX 77351 dexter@noway1234.com {Dexter Putnam} {9170 Boulder Circle} {Coober Pedy} TX 77986 rennie@noway1234.com {Rennie Chard} {7808 Baxter Crest Circle} Monaville TX 77627 christopher@noway1234.com {Christopher Conradt} {11832 Birch Hills Drive} Townsville TX 77498 blythe@noway1234.com {Perry Blythe} {11346 Gravina Circle} {Mount Isa} TX 77129 phyllis@noway1234.com {Phyllis Johnson} {2732 Snowmobile Lane} {Alice Springs} TX 77672 catherine@noway1234.com {Catherine Brock} {1936 Roehl Circle} Austin TX 77452 plug@noway1234.com {Plug Niemann} {11332 Great Dane Circle} Hamilton TX 77135 suydan@noway1234.com {Lou Suydan} {11324 Revere Circle} Mildura TX 77028 p_simer@noway1234.com {P'simer Wright} {3385 Seaforth Place} Pattison TX 77403 chrastil@noway1234.com {Johnson Chrastil} {8761 Bern Street} Nacogdoches TX 77059 ammie@noway1234.com {Ammie Cox} {8846 Sportsman Road} Brookshire TX 77990 henline@noway1234.com {Henline Speckmann} {7021 Haricot Circle} {Broken Hill} TX 77867 wheeler@noway1234.com {Jean Wheeler} {11198 West 64th Avenue} {Mount Gambier} TX 77342 fleck@noway1234.com {Betty Fleck} {2440 Orchard Place} Adelaide TX 77438 jimmy@noway1234.com {Jimmy Sherman} {9713 Capstan Drive} {Broken Hill} TX 77501 badertscher@noway1234.com {Margaret Badertscher} {3396 O'malley Centre Drive} Bendigo TX 77384 lorene@noway1234.com {Lorene Gobber} {3390 Kabob Circle} Sunnyville TX 77544 morris@noway1234.com {Rennie Morris} {2236 Cotton Grass Drive} Katy TX 77363 gary@noway1234.com {Gary Dieckmann} {6192 Hope Circle} {Alice Springs} TX 77241 berne@noway1234.com {Berne Scholl} {5869 Mere Circle} Newcastle TX 77521 minnie@noway1234.com {Minnie Hardin} {8543 Brudne Road} Wollongong TX 77319 jeanine@noway1234.com {Jeanine Packett} {8841 Airport Heights Drive} Austin TX 77732 margie@noway1234.com {Margie Clements} {1739 Walker Circle} Bathurst TX 77781 chard@noway1234.com {Whiskey Chard} {777 Iron Mountain Road} {Mount Isa} TX 77533 woody@noway1234.com {Woody Miner} {2813 Loc Sault Avenue} Dallas TX 77440 murl@noway1234.com {Murl Durst} {7136 Little Cape Circle} Dallas TX 77986 john@noway1234.com {John Badellino} {5115 Windward Circle} Nacogdoches TX 77058 suflonia@noway1234.com {Suflonia Morrissey} {5507 West 66th Avenue} Bathurst TX 77676 maysel@noway1234.com {Maysel Durman} {9296 West 88th Court} Kema TX 77310 rollyson@noway1234.com {Rollyson Lantz} {2320 Country View Drive} Independence TX 77275 lea@noway1234.com {Lea Staley} {921 Mila Street} {Mount Gambier} TX 77794 kaye@noway1234.com {Kaye Haughton} {7758 Southport Drive} Burnie TX 77216 theresa@noway1234.com {Theresa Philpott} {7756 Cherni Circle} Star TX 77113 vernice@noway1234.com {Vernice Carman} {5003 Rosehip Ridge Road} Dallas TX 77196 pottie@noway1234.com {Pottie Agena} {6753 Seneca Circle} {San Antonio} TX 77593 field@noway1234.com {Dottie Field} {8164 Thuja Avenue} {Alice Springs} TX 77315 raney@noway1234.com {Lou Raney} {4416 Eklutna Park Drive} {Broken Hill} TX 77178 hartley@noway1234.com {Hartley Sellman} {10219 Pequod Circle} Brookshire TX 77598 vongsaly@noway1234.com {Morris Vongsaly} {2704 East 95th Avenue} {Coober Pedy} TX 77093 eva@noway1234.com {Eva Farley} {6071 Copper Mountain Circle} Eucla TX 77772 dawson@noway1234.com {Dawson Heidemann} {10744 Big Spruce Circle} Brookshire TX 77312 ann@noway1234.com {Ann Stephens} {10509 Wells Circle} {Tennant Creek} TX 77704 kaye_suydan@noway1234.com {Kaye Suydan} {5113 Schodde Street} Adelaide TX 77110 jerle@noway1234.com {Jerle Petersen} {11369 East 99th Avenue} Monaville TX 77986 ramsey@noway1234.com {Ramsey Haney} {175 Laoana Drive} Hamilton TX 77305 chip@noway1234.com {Chip Sobotta} {867 Mc Hugh Lane} {Tennant Creek} TX 77455 felix@noway1234.com {Felix Yates} {6523 Hutson Drive} Burnie TX 77127 les@noway1234.com {Les Miner} {10958 Barnes Avenue} {Tennant Creek} TX 77688 james@noway1234.com {James Boone} {342 Big Mountain Drive} Houston TX 77492 king@noway1234.com {Elizabeth King} {3106 Peg Street} {Coober Pedy} TX 77792 straube@noway1234.com {Joe Straube} {2978 Kimpton Circle} Bendigo TX 77245 stahl@noway1234.com {Ann Stahl} {10220 Borealis Drive} Townsville TX 77660 marple@noway1234.com {Marple Kaufman} {7532 Gunwale Court} {Port Augusta} TX 77952 silas@noway1234.com {Silas Hothan} {5706 Hill View Circle} Waco TX 77148 ashley@noway1234.com {Ashley Kelley} {9602 East Tudor Road} Bendigo TX 77066 h@noway1234.com {H. McAlexander} {11236 Soldotna Drive} {Padre Island} TX 77722 dean@noway1234.com {Dean Nielsen} {3841 Monastery Drive} Independence TX 77468 radie@noway1234.com {Radie Zappa} {1435 Viscount Circle} Cairns TX 77473 aundrel@noway1234.com {Aundrel Kounthapanya} {2539 Sauvignon Circle} {Port Augusta} TX 77328 vina@noway1234.com {Vina Yates} {9889 Camelot Circle} OOdnadatta TX 77317 johnny@noway1234.com {Johnny Rosakrans} {9246 Peg Street} Adelaide TX 77738 claudine@noway1234.com {Claudine Kirkman} {1812 Loretta Place} {Port Augusta} TX 77743 denny@noway1234.com {Denny Knox} {11557 East 32nd Avenue} Centerville TX 77042 dave@noway1234.com {Dave Pieratt} {3332 Fawn Court} Hamilton TX 77455 mike@noway1234.com {Mike Wolken} {10094 Thimble Berry Drive} {Padre Island} TX 77626 doris@noway1234.com {Doris Colton} {9842 Goodnews Circle} Austin TX 77174 mcdonald@noway1234.com {Whiskey McDonald} {2867 Tranquillity Loop} Albury TX 77548 wibb@noway1234.com {Wibb Nakamura} {9478 Beechey Point Court} Bourke TX 77538 kimet@noway1234.com {Kimet Packwood} {4959 Lily Street} Rockhampton TX 77771 rodgers@noway1234.com {Gladys Rodgers} {464 Heartwood Place} Wollongong TX 77593 austin@noway1234.com {Austin Schmidt} {1106 Karen Lane} {Tennant Creek} TX 77691 mchenry@noway1234.com {Perry McHenry} {10954 Roehl Circle} Newcastle TX 77142 klein@noway1234.com {Doris Klein} {10634 Le Doux Lane} Centerville TX 77100 deb@noway1234.com {Deb Laug} {3004 Wranglers Way} Dallas TX 77093 byrne@noway1234.com {Byrne Nolte} {6629 Upper Fish Hatchery Road} Galveston TX 77901 volmer@noway1234.com {Volmer Wagner} {7175 North A Street} {Mount Gambier} TX 77976 wilson@noway1234.com {Wilson Mapes} {3377 Wentworth Street} Houston TX 77152 britt@noway1234.com {Donna Britt} {8934 Kenny Place} {Broken Hill} TX 77330 benton@noway1234.com {Benton Montz} {5387 South Mitkof Loop} Wollongong TX 77246 rozella@noway1234.com {Rozella Brock} {2137 Wallace Wynd Drive} {Coffs Harbour} TX 77667 corliss@noway1234.com {Corliss Ruby} {3325 Aspen Way} Tamworth TX 77981 murphy@noway1234.com {Ramsey Murphy} {7740 Parkside Circle} Ketherine TX 77641 barnabas@noway1234.com {Barnabas Todter} {10575 Bree Avenue} Ketherine TX 77181 bail@noway1234.com {Bail Mason} {11020 Dave Lane} Pattison TX 77529 mutt@noway1234.com {Mutt Landry} {6557 Chalet Court} Cairns TX 77291 oestmann@noway1234.com {Lee Oestmann} {4430 West Street} Wollongong TX 77381 marjorie@noway1234.com {Marjorie Baird} {8220 Leprechan Drive} Bendigo TX 77697 branting@noway1234.com {Mary Branting} {3119 Birchwood Street} OOdnadatta TX 77960 spence@noway1234.com {Floyd Spence} {6643 Lorraine Street} Bourke TX 77051 levi@noway1234.com {Levi Morrison} {8782 Anne Hathaway Circle} Bourke TX 77541 rachel@noway1234.com {Rachel Cooper} {6171 Snow Circle} Mildura TX 77359 ruhie@noway1234.com {Ruhie Hardin} {11290 Grizzly Lane} Pattison TX 77990 alice@noway1234.com {Alice Xayaphonesongkham} {8371 Mc Cabe Circle} Houston TX 77598 imogene@noway1234.com {Imogene Sobotta} {8752 Sextant Circle} Pattison TX 77289 sec@noway1234.com {Sec Geiger} {10933 Delong Landing Circle} Waco TX 77998 kind@noway1234.com {Kind Brommer} {2988 Talarik Drive} Rockhampton TX 77958 dona@noway1234.com {Dona Baird} {6047 Starboard Lane} Brookshire TX 77516 wanda@noway1234.com {Wanda Smith} {9453 Karluk Street} Centerville TX 77785 deloris@noway1234.com {Deloris Tucker} {3085 Exeter Drive} Amarillo TX 77527 mc@noway1234.com {Mc Hupka} {4951 Ryoaks Place} Albany TX 77131 orvill@noway1234.com {Orvill Pfister} {7919 Bernie Avenue} Burnie TX 77642 susan@noway1234.com {Susan Noudaranouvong} {10699 Rowan Street} Independence TX 77321 presley@noway1234.com {Presley Lang} {8995 Calamity Court} Queenstown TX 77737 darius@noway1234.com {Darius Huttenmeyer} {672 Liberty Circle} Launceston TX 77159 albert@noway1234.com {Albert Urich} {1041 Solarset Circle} Sunnyville TX 77907 bruce@noway1234.com {Bruce TenHulzen} {3742 Holmgren Place} Sunnyville TX 77167 jane@noway1234.com {Jane Goodrich} {9201 O'riedner Road} Ketherine TX 77184 almira@noway1234.com {Almira Stangel} {2847 Muldrow Street} Amarillo TX 77814 casto@noway1234.com {Casto Anderson} {10741 Ursa Minor Circle} {Broken Hill} TX 77640 hudson@noway1234.com {Hudson Lambelet} {1310 Richard Evelyn Byrd Street} Austin TX 77790 virginia@noway1234.com {Virginia Frederick} {2315 Laurel Street} Dallas TX 77391 landis@noway1234.com {Landis Seeba} {4036 O'malley Road} {San Felipe} TX 77164 e_burns@noway1234.com {E.Burns Colton} {7651 Barbara Falls Drive} Independence TX 77032 nancy@noway1234.com {Nancy Hunt} {8806 Wildwood Lane} Mildura TX 77076 bessie@noway1234.com {Bessie Armknecht} {1802 Von Scheben Drive} Rockhampton TX 77924 kitzmiller@noway1234.com {Kitzmiller Bicknell} {10315 Cobra Avenue} Pattison TX 77222 roland@noway1234.com {Roland Goracke} {1927 Wingate Circle} Waco TX 77685 vance@noway1234.com {Vance Parrisb} {1761 Chaparral Circle} {San Felipe} TX 77093 aldridge@noway1234.com {Aldridge Mitchel} {2117 Spruce Road} Townsville TX 77018 vivian@noway1234.com {Vivian Chritton} {9822 Cunningham Street} Albany TX 77497 delmar@noway1234.com {Delmar McLaughlin} {8540 Olympic Drive} {Coober Pedy} TX 77771 sorensen@noway1234.com {Wanda Sorensen} {10668 Hartman Circle} Galveston TX 77132 stoddard@noway1234.com {Morris Stoddard} {6529 Gakona Circle} Albany TX 77620 j@noway1234.com {J. Birnie} {2261 East 172nd Avenue} Hamilton TX 77595 hackbart@noway1234.com {Phyllis Hackbart} {9598 Elnora Lane} Monaville TX 77286 zeke@noway1234.com {Zeke Higgins} {11657 Annex Circle} Amarillo TX 77726 alton@noway1234.com {Alton Zappa} {2715 Vantage Avenue} {San Antonio} TX 77793 chard128@noway1234.com {Charles Chard} {7279 Golovin Street} {Port Hedland} TX 77806 buck@noway1234.com {Buck Kent} {7363 Louinda Circle} Ketherine TX 77051 amsberry@noway1234.com {Mable Amsberry} {5958 Hale Court} Waco TX 77553 miner@noway1234.com {Virginia Miner} {7241 Robert Circle} Monaville TX 77900 brott@noway1234.com {Suflonia Brott} {7365 Deborah Lynn Circle} Bourke TX 77303 judi@noway1234.com {Judi Mahar} {968 Birchtree Street} Star TX 77582 emily@noway1234.com {Emily Martin} {3700 Betty Street} Houston TX 77862 ossian@noway1234.com {Catherine Ossian} {1252 Babrof Drive} Katy TX 77769 wink@noway1234.com {Wink Rowland} {4479 Jodhpur Street} Independence TX 77840 merton@noway1234.com {Merton Nolte} {6473 Reeve Boulevard} {Alice Springs} TX 77304 elden@noway1234.com {Elden Meints} {9417 Pokey Circle} Albany TX 77705 scottie@noway1234.com {Scottie Reynolds} {9967 Labate Drive} Galveston TX 77389 holliday@noway1234.com {Holliday Rogers} {1972 Sheppard Drive} Wollongong TX 77066 phala@noway1234.com {Phala Leuenberger} {8416 Ariel Circle} OOdnadatta TX 77374 mac@noway1234.com {Mac Geiger} {3734 Kimball Street} Bourke TX 77772 hunter@noway1234.com {Hunter Seawall} {6688 Hines Circle} Kema TX 77415 tammy@noway1234.com {Tammy Pluta} {5615 Ellen Avenue} Albany TX 77057 oma@noway1234.com {Oma Ensor} {9125 Sun Spot Circle} Houston TX 77496 rupert@noway1234.com {Rupert Yates} {11781 Little Brook Street} {Padre Island} TX 77266 gray@noway1234.com {Gray Smith} {8036 Marsha Loop} {Mount Isa} TX 77386 laky@noway1234.com {Laky Sorensen} {8482 Mountain Circle} Nacogdoches TX 77887 hughes@noway1234.com {Hughes Hunt} {5824 Scenic Drive} Albury TX 77761 moss@noway1234.com {Moss Hitzeman} {5134 Sorbus Way} Galveston TX 77175 bib@noway1234.com {Bib Neeman} {9420 Saunders Road} Katy TX 77631 chittenden@noway1234.com {L. Chittenden} {5997 Clear Haven Circle} {Port Augusta} TX 77429 kenneth@noway1234.com {Kenneth Jewell} {5665 Artemus Circle} {Coober Pedy} TX 77798 halverstadt@noway1234.com {Elizabeth Halverstadt} {11739 Prator Street} Galveston TX 77964 lott@noway1234.com {Beam Lott} {4562 Green Garden Drive} Pattison TX 77052 forrest@noway1234.com {Forrest Cary} {6878 Atelier Drive} {Port Hedland} TX 77117 eloise@noway1234.com {Eloise Kroeze} {4264 Telephone Avenue} OOdnadatta TX 77512 beyty@noway1234.com {Beyty Scott} {9539 Ptarmigan Boulevard} {Port Augusta} TX 77886 audre@noway1234.com {Audre Bogle} {8347 Shooresin Circle} {Alice Springs} TX 77543 moe@noway1234.com {Moe Kerchal} {7262 Hillcrest Circle} Newcastle TX 77364 johnie@noway1234.com {Johnie Nielsen} {96 Grizzly Avenue} {Coffs Harbour} TX 77899 amma@noway1234.com {Amma Norvell} {1629 James Drive} Wollongong TX 77444 gregory@noway1234.com {Gregory Phommachan} {585 Abbas Circle} Independence TX 77923 dorsey@noway1234.com {Dorsey Robertson} {1575 Alpenhorn Avenue} {San Felipe} TX 77904 cotrill@noway1234.com {Cotrill Mathis} {3098 Tony Circle} Star TX 77481 haney@noway1234.com {Ella Haney} {5745 Knik Vista Court} Dallas TX 77762 les261@noway1234.com {Les Mcalexander} {8079 Shelikof Street} Amarillo TX 77273 kathern@noway1234.com {Kathern Tagart} {7641 Elmhurst Drive} Albury TX 77480 jody@noway1234.com {Jody McCoy} {8194 Gayle Circle} Katy TX 77845 freddie@noway1234.com {Freddie Pohlman} {11174 South Christmasberry Loop} Burnie TX 77698 eagle@noway1234.com {Eagle Gieser} {2534 Charity Circle} Albury TX 77784 estella@noway1234.com {Estella Gibbs} {4182 Bobbie Circle} Dallas TX 77055 irene@noway1234.com {Irene Hemmer} {11700 Pussywillow Street} Bathurst TX 77130 hickman@noway1234.com {Hickman Petersen} {8354 Crow's Nest Circle} {Port Hedland} TX 77276 darla@noway1234.com {Darla Harrah} {6430 Cassin Drive} Star TX 77170 swanson@noway1234.com {Ruby Swanson} {3600 Le Doux Lane} Bourke TX 77284 bee@noway1234.com {Bee Kavanaugh} {9562 Smaldon Circle} {Coober Pedy} TX 77509 fitzwater@noway1234.com {Fitzwater Steinauer} {6862 Prince Circle} Albany TX 77839 leigh@noway1234.com {Leigh Lofgren} {3592 Keyhole Circle} Bourke TX 77947 pebble@noway1234.com {Pebble Nixon} {9192 Wolf Creek Drive} Galveston TX 77350 keener@noway1234.com {Keener Ditlevson} {4267 Beaty Avenue} Ketherine TX 77651 quinn@noway1234.com {Betty Quinn} {4208 Caragana Circle} Pattison TX 77510 marge@noway1234.com {Marge Rathe} {9657 Stratton Circle} Amarillo TX 77532 dr@noway1234.com {Dr. Stordahl} {4697 Alex Circle} Katy TX 77588 hupka@noway1234.com {Mullins Hupka} {1622 Crystal Creek Drive} Centerville TX 77435 adolf@noway1234.com {Adolf Bartels} {11799 Bettijean Street} {Padre Island} TX 77978 craig@noway1234.com {Craig Foetisch} {9112 Grumman Street} OOdnadatta TX 77778 nutter@noway1234.com {Nutter Williams} {2735 Keyann Circle} Independence TX 77330 bubby@noway1234.com {Bubby Laue} {11964 Summit View Street} Waco TX 77177 denver@noway1234.com {Denver Piersol} {5374 Yukon Road} Cairns TX 77425 dunlap@noway1234.com {Dunlap Parrisb} {10755 Mountainman Loop} Tamworth TX 77322 kyer@noway1234.com {Kyer Rathbun} {4226 Upper Mc Crary Road} Queenstown TX 77265 kennith@noway1234.com {Kennith Nakamura} {8088 Vought Circle} Newcastle TX 77530 reva@noway1234.com {Reva Lempke} {4308 Cleveland Avenue} Wollongong TX 77659 opal@noway1234.com {Opal Durman} {2740 Ptarmigan Boulevard} {Alice Springs} TX 77042 boob@noway1234.com {Boob Rohrs} {10624 Baxter Court} {Mount Isa} TX 77940 bird_legs@noway1234.com {Bird-Legs Vance} {11678 Bowlby Street} Adelaide TX 77909 oral@noway1234.com {Oral Sherman} {4998 Peterkin Avenue} Kema TX 77020 sweeney@noway1234.com {Sweeney Badertscher} {3836 Copper Circle} Nacogdoches TX 77184 bryan@noway1234.com {Bryan Robertson} {10624 Terracewood Lane} Pattison TX 77782 dieckhoff@noway1234.com {Nicholas Dieckhoff} {9087 Petrel Circle} Houston TX 77582 thies@noway1234.com {Mike Thies} {278 Maylen Circle} {Tennant Creek} TX 77625 klein809@noway1234.com {Eva Klein} {4063 Via Appia} Nacogdoches TX 77944 mildred@noway1234.com {Mildred Harrington} {1758 Lars Circle} Wollongong TX 77478 l789@noway1234.com {L. Ruby} {4042 Dickerson Drive} Launceston TX 77760 underwood@noway1234.com {Underwood Thies} {6031 Porcupine Trail Road} Hamilton TX 77306 rauner@noway1234.com {Opal Rauner} {4147 Warfield Place} Galveston TX 77997 eulah@noway1234.com {Eulah Sorensen} {5880 Mammoth Court} Waco TX 77228 eugene@noway1234.com {Eugene Holmstrom} {408 Seville Park Circle} Centerville TX 77073 van@noway1234.com {Charlotte Van} {2731 Regina Circle} {Tennant Creek} TX 77467 hamrick@noway1234.com {Hamrick Neill} {6702 Snowy Court} Tamworth TX 77145 kroeze@noway1234.com {Betty Kroeze} {11909 Lake Clark Street} Hamilton TX 77089 dough_belly@noway1234.com {Dough Belly Suydan} {5693 Flintlock Street} {Padre Island} TX 77340 dorthea@noway1234.com {Dorthea Kreiling} {45 Westland Circle} {Port Hedland} TX 77114 moslander@noway1234.com {Merle Moslander} {2008 Rouse Circle} Tamworth TX 77505 patrica@noway1234.com {Patrica Baum} {9950 Laverne Place} Rockhampton TX 77892 thurber@noway1234.com {Anna Thurber} {6111 South River Drive} Newcastle TX 77177 mercure@noway1234.com {Presley Mercure} {4274 Chisik Circle} Amarillo TX 77565 tony@noway1234.com {Tony Lacey} {6173 Frosty Drive} Bourke TX 77253 kerchal@noway1234.com {Alice Kerchal} {7461 Snowline Drive} Sunnyville TX 77196 macel@noway1234.com {Macel McLaughlin} {3858 Jay Circle} Galveston TX 77033 janet@noway1234.com {Janet Piersol} {6989 Santa Maria Drive} Independence TX 77980 radford@noway1234.com {Radford Beck} {3331 Farm Avenue} Hamilton TX 77458 scholl@noway1234.com {Eva Scholl} {5415 Gravins Circle} {Port Hedland} TX 77243 chester@noway1234.com {Chester Martin} {6411 Addenda Circle} Hamilton TX 77742 delford@noway1234.com {Delford Foetisch} {3257 Paso Place} Pattison TX 77218 philip@noway1234.com {Philip Brott} {3614 Redhawk Circle} Centerville TX 77055 lois@noway1234.com {Lois Tucker} {5749 Crooked Tree Circle} Launceston TX 77057 p_simer694@noway1234.com {P'simer Hupka} {1510 Chekok Circle} Mildura TX 77384 hesman@noway1234.com {Oma Hesman} {3833 Mesquite Circle} Rockhampton TX 77360 haskel@noway1234.com {Haskel Hippen} {2109 Hazel Court} Pattison TX 77416 brian@noway1234.com {Brian Schmiegelow} {10051 Lowland Avenue} {Tennant Creek} TX 77869 peek@noway1234.com {Colombia Peek} {4778 Baxter Crest Circle} Wollongong TX 77487 dixie@noway1234.com {Dixie Belding} {9710 Baffin Street} {Mount Gambier} TX 77923 carney@noway1234.com {Carney Mueller} {10353 West Dowling Road} {Port Augusta} TX 77868 sonny@noway1234.com {Sonny Kreiling} {255 Gulkana Circle} {Port Hedland} TX 77982 early@noway1234.com {Early Geweke} {6116 Newby Avenue} {Broken Hill} TX 77653 zappa@noway1234.com {Helen Zappa} {11770 Cyrus Street} {Port Augusta} TX 77515 cox@noway1234.com {Frame Cox} {773 Donner Drive} {Broken Hill} TX 77260 darius483@noway1234.com {Darius Chrastil} {3700 Tree Circle} {Coober Pedy} TX 77247 rubin@noway1234.com {Bryan Rubin} {6082 Greenwood Street} Bendigo TX 77802 sheryl@noway1234.com {Sheryl Harrah} {7061 Marten Street} {Tennant Creek} TX 77011 weiss@noway1234.com {Judi Weiss} {7312 Orca Place} OOdnadatta TX 77549 daniel@noway1234.com {Daniel Volkmer} {503 Fairweather Place} Bendigo TX 77764 jimmy_pistol@noway1234.com {Jimmy"Pistol" Bane} {11519 Shandy Court} {San Antonio} TX 77132 warnke@noway1234.com {Wanda Warnke} {111 Sunny Circle} Queenstown TX 77563 mason@noway1234.com {Ann Mason} {8198 Davis Drive} Eucla TX 77094 rosetta@noway1234.com {Rosetta Hoke} {11180 Mc Lain Road} Independence TX 77001 thelma@noway1234.com {Thelma Morris} {2706 Eaglek Bay Circle} Pattison TX 77017 sarah@noway1234.com {Sarah Graff} {6525 Ross Voyles Avenue} Sunnyville TX 77633 r@noway1234.com {R. Watteyne} {892 Norton Drive} Tamworth TX 77717 doty@noway1234.com {Delbert Doty} {5536 Nakochina Circle} Monaville TX 77072 h_h@noway1234.com {H.H. Berg} {11184 Hanson Drive} Broome TX 77310 dwight@noway1234.com {Dwight Higgins} {1079 West 43rd Court} Centerville TX 77206 louis@noway1234.com {Louis Suydan} {10887 Foothill Circle} Hamilton TX 77852 mann@noway1234.com {Charles Mann} {547 Arctic Boulevard} Bathurst TX 77309 gay@noway1234.com {Gay Mccoy} {3852 Florence Circle} Tamworth TX 77140 morgan@noway1234.com {Morgan Chard} {11023 Elizabeth Drive} {Coffs Harbour} TX 77407 todter@noway1234.com {Felix Todter} {11101 Magpie Drive} {Coffs Harbour} TX 77571 cawley@noway1234.com {Dexter Cawley} {7380 Nickleen Street} {Tennant Creek} TX 77070 rosanne@noway1234.com {Rosanne Brock} {8280 Kosina Circle} Wollongong TX 77027 brown@noway1234.com {Brown Hamer} {4562 Knapper Lane} {Coffs Harbour} TX 77407 oltman@noway1234.com {Chilton Oltman} {9184 Borland Drive} {Alice Springs} TX 77659 joy@noway1234.com {Joy Weakland} {3720 Browder Avenue} Launceston TX 77845 boardman@noway1234.com {Bulah Boardman} {4433 Birch Avenue} {San Felipe} TX 77222 tommy@noway1234.com {Tommy Rathe} {5880 Sundown Court} Launceston TX 77073 gaylene@noway1234.com {Gaylene Xayaphonesongkham} {594 West 87th Avenue} Queenstown TX 77739 fankhauser@noway1234.com {Charlotte Fankhauser} {8294 Kabob Circle} Newcastle TX 77394 quenton@noway1234.com {Quenton Ensor} {8214 First Street} {Padre Island} TX 77304 dumitru@noway1234.com {Ramsey Dumitru} {2903 Lewis Street} {Port Hedland} TX 77647 mc_staley@noway1234.com {Mc Staley} {10478 Sherbrooke Circle} Ketherine TX 77422 rogers@noway1234.com {Beam Rogers} {2743 Talon Circle} {Port Hedland} TX 77379 darleen@noway1234.com {Darleen Stewart} {5698 Woodbourne Circle} {Port Hedland} TX 77862 marion@noway1234.com {Marion Watteyne} {10055 South Mitkof Loop} OOdnadatta TX 77120 carl@noway1234.com {Carl. Feurer} {7498 Ridd Circle} Ketherine TX 77454 masur@noway1234.com {Sterling Masur} {859 Pyramid Drive} Austin TX 77398 clark@noway1234.com {Clark Jacobsen} {1041 Far View Place} {Mount Isa} TX 77616 hamer@noway1234.com {Eva Hamer} {3586 Galactica Drive} {Alice Springs} TX 77480 pino@noway1234.com {Pino Swanson} {2830 Fountain Drive} Ketherine TX 77280 scott@noway1234.com {Jean Scott} {1340 Reliance Drive} Sunnyville TX 77786 logsdon@noway1234.com {Chester Logsdon} {7796 Man O War Road} Bourke TX 77415 bailey@noway1234.com {Gregory Bailey} {3352 Owen Circle} Star TX 77853 ned@noway1234.com {Ned Reilly} {2930 Vancouver Circle} Cairns TX 77280 freda@noway1234.com {Freda Pella} {1738 West 57th Avenue} Albany TX 77376 moore@noway1234.com {Moore DeFreece} {11722 Camden Circle} {Coffs Harbour} TX 77059 j_g@noway1234.com {J.G. Einstein} {5032 Glacier Pine Street} {Mount Gambier} TX 77513 chuck@noway1234.com {Chuck Mason} {6364 Turnagain Bluff Way} {Port Hedland} TX 77305 lyons@noway1234.com {Oma Lyons} {7893 Needle Circle} Burnie TX 77110 jerry@noway1234.com {Jerry Tagart} {1765 Academy Drive} Hamilton TX 77204 emery@noway1234.com {Emery McKinney} {2520 Kensington Circle} Centerville TX 77952 carson@noway1234.com {Chilton Carson} {8572 Newcastle Way} Bathurst TX 77917 goings@noway1234.com {Hazelton Goings} {4826 Steffes Street} Sunnyville TX 77633 merlin@noway1234.com {Merlin Elenga} {2057 Gertrude Street} {Mount Isa} TX 77349 emma@noway1234.com {Emma Conradt} {1365 Karen Lane} Nacogdoches TX 77628 lynnette@noway1234.com {Lynnette Pooch} {5684 Saint Elias Drive} Katy TX 77924 harvey@noway1234.com {Harvey Morrissey} {4376 East 18th Circle} Cairns TX 77334 kathryn@noway1234.com {Kathryn Goodrich} {2125 Caress Circle} Kema TX 77849 clara@noway1234.com {Clara Yoder} {10752 Firnline Drive} Monaville TX 77172 spencer@noway1234.com {Spencer Siske} {7458 Birch Run Circle} Albany TX 77772 vernon@noway1234.com {Vernon Frederick} {6817 Trail Bay Drive} {Padre Island} TX 77469 floerke@noway1234.com {Levi Floerke} {11415 Hillshire Court} Amarillo TX 77613 david@noway1234.com {David Sackaly} {5906 Baby Bear Drive} Pattison TX 77173 mullens@noway1234.com {Mullens Scharton} {7126 East 68th Avenue} Galveston TX 77536 casey@noway1234.com {Casey Thurber} {8301 Teri Circle} Houston TX 77849 kerchovel@noway1234.com {Kerchovel Evans} {7284 Aurora Drive} {Coober Pedy} TX 77783 aden@noway1234.com {Acie Aden} {11574 Applewood Circle} Bathurst TX 77105 noudaranouvong@noway1234.com {Dawson Noudaranouvong} {1543 Chandalar Street} Newcastle TX 77338 red@noway1234.com {Red Robinson} {8388 Cheely's Lane} Galveston TX 77853 blake@noway1234.com {Blake Husing} {7054 Anogoc Drive} Katy TX 77077 mollohan@noway1234.com {mollohan Mooney} {6665 Girdwood Place} Centerville TX 77396 hansford@noway1234.com {Hansford Brammann} {2913 Sandy Beach Drive} {Tennant Creek} TX 77305 colleen@noway1234.com {Colleen Dills} {5141 Maxwell Place} Pattison TX 77115 peggy@noway1234.com {Peggy Scott} {6801 Bumpy Road} {Broken Hill} TX 77541 carla@noway1234.com {Carla Blessing} {1220 West 37th Avenue} Albany TX 77620 gottula@noway1234.com {Sarah Gottula} {10920 Colwell Street} {San Antonio} TX 77177 laue@noway1234.com {Brown Laue} {8644 Galena Circle} Rockhampton TX 77132 hickman434@noway1234.com {Hickman Ossian} {10095 Balfour Drive} {San Antonio} TX 77448 tom@noway1234.com {Tom Hackbart} {6842 Maria Court} Nacogdoches TX 77740 garris469@noway1234.com {David Garris} {570 Torkelson Circle} Bourke TX 77441 jimmy930@noway1234.com {Jimmy Lyons} {6457 Justin Circle} {Alice Springs} TX 77958 pauline@noway1234.com {Pauline Campbell} {7628 Jackson Hole Court} Amarillo TX 77820 dodrill@noway1234.com {Dodrill Lambelet} {1460 Jelinek Place} Adelaide TX 77051 moss547@noway1234.com {Moss Roland} {2993 West 77th Avenue} Pattison TX 77476 jesse@noway1234.com {Jesse Menard} {2005 Thompson Avenue} Bendigo TX 77656 donrita@noway1234.com {Donrita Morrissey} {3967 Tyone Court} {Coober Pedy} TX 77251 burns@noway1234.com {W. Burns} {7351 Ladd Lane} {Padre Island} TX 77607 jenner@noway1234.com {Jenner Gregory} {11730 Parker Place} Austin TX 77963 lloyd@noway1234.com {Lloyd Purdy} {412 Wiley Post Avenue} Star TX 77235 verna@noway1234.com {Verna McHenry} {10444 Eshamy Bay Drive} {Coober Pedy} TX 77144 kreiling@noway1234.com {Dona Kreiling} {6951 Harca Street} {Tennant Creek} TX 77723 grove@noway1234.com {Janet Grove} {3381 Leslie Street} {Alice Springs} TX 77212 broady@noway1234.com {Gladys Broady} {4392 Excursion Circle} {Alice Springs} TX 77492 roy@noway1234.com {Roy Van} {11686 Oilwell Road} Launceston TX 77201 spence449@noway1234.com {Spence Dumitru} {6345 Tool Street} {Tennant Creek} TX 77900 averel@noway1234.com {Averel Severns} {3557 Seward Highway} Albury TX 77025 ruter@noway1234.com {Irene Ruter} {5556 Daniel Court} Rockhampton TX 77219 dancy@noway1234.com {Dancy Thies} {8228 Brighton Road} Rockhampton TX 77107 samuel@noway1234.com {Samuel Lueders} {900 Pass Place} {Coffs Harbour} TX 77649 niemann@noway1234.com {Charles Niemann} {11252 Paramount Drive} {Mount Gambier} TX 77429 diane@noway1234.com {Diane Rine} {9676 Augustine Drive} Burnie TX 77358 davis@noway1234.com {Rogers Davis} {8985 Lake O' The Hills Circle} {Port Hedland} TX 77150 ora@noway1234.com {Ora Homer} {129 Longhorn Street} Broome TX 77164 amos@noway1234.com {Margaret Amos} {5021 Diamond Circle} Sunnyville TX 77068 proctor@noway1234.com {Muncey Proctor} {9805 De Havilland Avenue} Launceston TX 77015 schreiner@noway1234.com {Joy Schreiner} {4775 Arlene Street} Hamilton TX 77773 faye@noway1234.com {Faye Henrichs} {11936 Skyway Drive} Houston TX 77504 bedford@noway1234.com {Bedford McDonald} {9589 East 63rd Avenue} Austin TX 77824 blaine@noway1234.com {Blaine Kuhl} {7609 North Eagle River Access Road} Townsville TX 77399 adkins@noway1234.com {Adkins Faris} {2760 Hidden Hill Court} Kema TX 77987 bryan831@noway1234.com {Pottie Bryan} {10670 Panther Drive} Austin TX 77684 moses@noway1234.com {Moses VanLaningham} {5334 Village Road} {Alice Springs} TX 77947 hollis@noway1234.com {Hollis Rine} {8232 Golden View Drive} Monaville TX 77777 sizemore@noway1234.com {Sizemore Rathe} {1996 Stanley Park Circle} Sunnyville TX 77116 miller@noway1234.com {Miller Krontz} {9865 Noblewood Street} Pattison TX 77783 torb@noway1234.com {Torb Weinrich} {3363 East 41st Court} Burnie TX 77990 wood@noway1234.com {Wood Mattox} {6693 River Park Circle} Nacogdoches TX 77237 sherie@noway1234.com {Sherie Sellhorn} {4233 Hillhaven Circle} Nacogdoches TX 77289 frank@noway1234.com {Frank Ebeler} {9428 Kester Circle} Star TX 77859 gill@noway1234.com {Gill Wolf} {3727 Vasili Drive} Tamworth TX 77258 hippen@noway1234.com {Pauline Hippen} {4929 Waldron Drive} Independence TX 77573 buster@noway1234.com {Buster Ossian} {1466 Kittiwake Circle} Rockhampton TX 77692 lawrence@noway1234.com {Eugene Lawrence} {1832 Karluk Street} Pattison TX 77725 ahtelene@noway1234.com {Ahtelene Lewis} {1247 Chandelle Drive} Albany TX 77096 mozelle@noway1234.com {Mozelle Hendee} {8585 Stanford Circle} Launceston TX 77308 neal@noway1234.com {Neal Hahn} {8369 East Klatt Road} Nacogdoches TX 77248 horriey@noway1234.com {Horriey Mcculla} {9075 Annapolis Drive} Mildura TX 77381 colton@noway1234.com {Anna Colton} {2732 David Lane} {Mount Gambier} TX 77564 ditlevson@noway1234.com {Doris Ditlevson} {4743 Warfield Place} Sunnyville TX 77376 ray@noway1234.com {Dodrill Ray} {1734 Pacific View Drive} {Mount Gambier} TX 77341 finke@noway1234.com {Sheryl Finke} {10774 Canton Loop} Monaville TX 77548 naber@noway1234.com {Jackson Naber} {4387 West 104th Avenue} Launceston TX 77650 blishack@noway1234.com {Blishack Van} {7080 West Klatt Road} {Mount Gambier} TX 77400 pudge@noway1234.com {Pudge Pan} {2351 Brandon Street} Bourke TX 77997 ernst@noway1234.com {Ernst McDonald} {11628 Spectrum Circle} {Port Augusta} TX 77617 phem@noway1234.com {Phem Miesbach} {8247 Rutan Place} Townsville TX 77123 bernard@noway1234.com {Bernard Schmiegelow} {7588 Arlington Drive} Queenstown TX 77643 d@noway1234.com {D Wegforth} {5260 Corner Tree Drive} {Mount Isa} TX 77006 frances@noway1234.com {Frances Swanson} {10946 Sushana Circle} Monaville TX 77942 ovil@noway1234.com {Ovil Hamm} {306 Mc Cain Loop} Independence TX 77239 mcculla@noway1234.com {White Mcculla} {1607 Delong Drive} {Padre Island} TX 77205 james_mcculla@noway1234.com {James Mcculla} {6167 Highlander Circle} {Alice Springs} TX 77308 jarel@noway1234.com {Jarel Topp} {930 Dawson Street} Katy TX 77234 mcquire@noway1234.com {McQuire Grove} {10881 Bellevue Circle} Hamilton TX 77292 king994@noway1234.com {T. King} {8601 San Bowfel Street} {San Felipe} TX 77903 doy@noway1234.com {Doy Yates} {10924 Wanigan Street} Waco TX 77545 robert@noway1234.com {Robert Lock} {6570 East 25th Court} {Coober Pedy} TX 77784 miesbach@noway1234.com {Claudine Miesbach} {11509 Mego Street} Waco TX 77741 dempsey@noway1234.com {Dempsey Thompson} {9104 Solomon Avenue} Tamworth TX 77129 ford@noway1234.com {Burton Ford} {5677 Waterfront Lane} {Coober Pedy} TX 77640 janet_staley@noway1234.com {Janet Staley} {4365 Chilkoot Court} {Broken Hill} TX 77308 samples@noway1234.com {Samples Kettelhake} {10458 Karen Avenue} {Coffs Harbour} TX 77567 rosie@noway1234.com {Rosie Hauptman} {2633 Pleasant View Drive} {Mount Gambier} TX 77662 mcpherrin@noway1234.com {Maysel McPherrin} {3570 Cloud Nine Circle} Mildura TX 77268 graff@noway1234.com {Buck Graff} {6601 Remington Circle} {Padre Island} TX 77139 greta@noway1234.com {Greta Peters} {10825 Maidianne Street} Nacogdoches TX 77743 hubert@noway1234.com {Hubert Kroll} {9333 Hillcrest Drive} Dallas TX 77313 pearl@noway1234.com {Pearl Lantz} {4708 East 114th Avenue} Townsville TX 77645 mcnergney@noway1234.com {Dimple McNergney} {2200 Kenny Place} Dallas TX 77587 noralea@noway1234.com {Noralea Heideman} {11499 East Fireweed Lane} Pattison TX 77320 gardner@noway1234.com {Gardner Rine} {5031 Kittiwake Circle} Albany TX 77940 jessie@noway1234.com {Jessie Stitt} {1106 Park Place} Adelaide TX 77915 nina@noway1234.com {Nina Siske} {1747 Overlook Place} Bendigo TX 77560 marshal@noway1234.com {Marshal Esser} {1299 Pointe Circle} {Coober Pedy} TX 77346 mommens@noway1234.com {Helen Mommens} {2004 Gulkana Circle} {Mount Gambier} TX 77049 bowers@noway1234.com {Bowers Smith} {9349 Toloff Street} Bourke TX 77028 laveda@noway1234.com {Laveda Puchalla} {6969 Burning Bush Drive} {Mount Isa} TX 77145 montz@noway1234.com {Dominic Montz} {6201 Turin Drive} Burnie TX 77807 joellen@noway1234.com {JoEllen Gregory} {8770 Mink Drive} Cairns TX 77353 brommer@noway1234.com {Irene Brommer} {8150 Swan Circle} Star TX 77506 pierce@noway1234.com {Bud Pierce} {550 Morgan Loop} {Coober Pedy} TX 77299 steven@noway1234.com {Steven Spence} {599 Randolph Street} Cairns TX 77108 janis@noway1234.com {Janis Sellman} {4177 Wes Way} {San Antonio} TX 77681 landry@noway1234.com {Macel Landry} {6423 Klingler Street} Mildura TX 77917 stump@noway1234.com {Stump Aden} {7507 Trail's End Road} {Coober Pedy} TX 77293 wegforth@noway1234.com {Diane Wegforth} {2226 Melody Place} Adelaide TX 77155 jack@noway1234.com {Jack Hershberger} {7738 East 12th Court} Waco TX 77304 henrietta@noway1234.com {Henrietta Halverstadt} {655 Brant Way} {Mount Isa} TX 77722 mandery@noway1234.com {Clara Mandery} {839 Robin Hood Drive} Launceston TX 77955 staley919@noway1234.com {A. Staley} {6375 Nugget Lane} Albury TX 77275 phylis@noway1234.com {Phylis Seawall} {5367 Imperial Drive} {Mount Isa} TX 77241 richardson@noway1234.com {Richardson Keim} {5903 Paul Revere Circle} Austin TX 77691 rothell@noway1234.com {Sterling Rothell} {3658 Ski Road} Brookshire TX 77014 giittinger@noway1234.com {Ann Giittinger} {6344 Carolyn Street} {Alice Springs} TX 77599 mule@noway1234.com {Mule Thongkhamvilay} {5390 Carlina Drive} {Port Augusta} TX 77009 lott210@noway1234.com {Lou Lott} {8798 Viburnum Drive} Launceston TX 77257 carlos@noway1234.com {Carlos Reilly} {10869 Crescent Drive} Tamworth TX 77874 browning@noway1234.com {Browning Tucker} {8572 Midvale Circle} Star TX 77958 osterthun@noway1234.com {Jenner Osterthun} {9838 Hamilton Drive} Houston TX 77561 michael@noway1234.com {Michael Warnke} {362 Post Road} Dallas TX 77583 harriet@noway1234.com {Harriet Jewell} {5165 Legacy Drive} {Port Augusta} TX 77808 harms@noway1234.com {Harms Logsdon} {10577 Eagle Place Loop} Star TX 77919 bird@noway1234.com {Bird Buerstetta} {2182 Hamann Road} {Coffs Harbour} TX 77679 georgene@noway1234.com {Georgene Lott} {1314 White Spruce Drive} Kema TX 77318 marian@noway1234.com {Marian Krouse} {6290 Hanson Drive} Waco TX 77875 borrenphol@noway1234.com {Donohue Borrenphol} {2440 Brittany Place} Austin TX 77696 christensen@noway1234.com {Bernard Christensen} {9114 Daybreak Court} Centerville TX 77439 edna@noway1234.com {Edna Krouse} {11678 Karta Circle} {Mount Isa} TX 77793 phil@noway1234.com {Phil Piersol} {2771 Maywood Circle} OOdnadatta TX 77652 needra@noway1234.com {Needra Rickman} {3968 Casey Circle} Ketherine TX 77025 ramsey697@noway1234.com {Ramsey Schmidt} {6759 Sherrie Street} Katy TX 77513 oscar@noway1234.com {Oscar Lyons} {685 Waterfall Drive} {Mount Isa} TX 77540 emanuel@noway1234.com {Emanuel Craig} {5085 Fisher Drive} Houston TX 77371 dennis@noway1234.com {Dennis Hansel} {4726 Borland Drive} Sunnyville TX 77382 bowers206@noway1234.com {Bowers Branting} {2537 Rocky Road} Rockhampton TX 77943 oldfather@noway1234.com {Acie Oldfather} {7261 Juanita Street} Townsville TX 77715 noreene@noway1234.com {Noreene Stahl} {9977 Sutwik Circle} Monaville TX 77090 hall@noway1234.com {Hall Hindera} {9744 Gabriel Circle} Albany TX 77418 berne101@noway1234.com {Berne Staley} {1580 Lakonia Drive} {Port Hedland} TX 77816 sue@noway1234.com {Sue Kaster} {2917 Columbia Glacier Loop} OOdnadatta TX 77233 lane@noway1234.com {Lane Kreiling} {80 Galena Circle} Independence TX 77178 sikyta@noway1234.com {Ann Sikyta} {1697 Ira Drive} {Tennant Creek} TX 77285 diann@noway1234.com {Diann Luck} {2743 Arlon Street} {San Felipe} TX 77578 tejral@noway1234.com {Marple Tejral} {9226 Lampert Circle} Tamworth TX 77459 osbome@noway1234.com {Osbome Severns} {3666 Endicott Street} Rockhampton TX 77937 lucy@noway1234.com {Lucy Gibson} {2411 Wickersham Drive} Bathurst TX 77967 kerchal79@noway1234.com {Morris Kerchal} {8920 Garmisch Road} Mildura TX 77716 kavanaugh@noway1234.com {Ester Kavanaugh} {3553 Turks Turn Street} Albany TX 77677 cecilia@noway1234.com {Cecilia Hutt} {3892 Woodshire Circle} Sunnyville TX 77391 marilynn@noway1234.com {Marilynn Masur} {7808 Campbell Terrace Place} Pattison TX 77009 wenzel@noway1234.com {Loring Wenzel} {7129 Sherwood Circle} Star TX 77735 omer@noway1234.com {Omer Oestmann} {1109 Jesse Lee Court} Mildura TX 77326 tenney@noway1234.com {Tenney Gordon} {9467 Muley Circle} {Coober Pedy} TX 77369 garnet@noway1234.com {Garnet Mathis} {10964 Longbow Drive} Tamworth TX 77267 suzette@noway1234.com {Suzette Rubin} {5613 West Prince Of Peace Drive} Amarillo TX 77041 glendora@noway1234.com {Glendora Bohung} {9557 Rushwood Circle} Kema TX 77743 pope@noway1234.com {Jean Pope} {6455 Alpina Way} Mildura TX 77031 krouse@noway1234.com {Samuel Krouse} {11221 East International Airport Road} Burnie TX 77700 leerie@noway1234.com {Leerie Pierce} {284 Frank Street} OOdnadatta TX 77157 orbit@noway1234.com {Orbit Rauner} {942 Glenn Circle} Houston TX 77345 rathe@noway1234.com {Ned Rathe} {779 Golden Wood Lane} Albany TX 77710 osa@noway1234.com {Osa Topp} {8114 Randolph Street} {Port Augusta} TX 77135 bogle@noway1234.com {Joe Bogle} {9170 Mount Mc Kinley Drive} Wollongong TX 77621 robison@noway1234.com {Keener Robison} {8644 Brooks Road} Austin TX 77810 mary_mcnergney@noway1234.com {Mary McNergney} {9350 Tolhurst Court} Star TX 77685 eileen@noway1234.com {Eileen Weyers} {4735 Rosebud Row Avenue} Cairns TX 77641 s804@noway1234.com {S. Todter} {4868 Pearl Street} Bendigo TX 77318 masur345@noway1234.com {Gardner Masur} {2273 Linden Drive} Townsville TX 77470 amber@noway1234.com {Amber Dieckmann} {1915 Blueberry Street} Albury TX 77993 bernice@noway1234.com {Bernice Phommachan} {3469 Bounty Drive} Albany TX 77027 oss@noway1234.com {Oss Nakamura} {7904 Country Lane Circle} {Coffs Harbour} TX 77607 conradt@noway1234.com {Mae Conradt} {9196 Sinner Street} Mildura TX 77086 allen@noway1234.com {Allen Lott} {6574 Maximilian Drive} {San Antonio} TX 77042 lyle@noway1234.com {Lyle Stettenbenz} {6162 Valley Avenue} {San Felipe} TX 77423 sandi@noway1234.com {Sandi Rohmeyer} {3843 Poniard Drive} Star TX 77744 evette@noway1234.com {Evette Wenzl} {5751 Tahoe Circle} Star TX 77960 myrtle@noway1234.com {Myrtle Piersol} {11031 Mount Kiliak Circle} Kema TX 77902 maryln@noway1234.com {Maryln Snowden} {9572 Pilots Road} Newcastle TX 77049 steinmeyer@noway1234.com {Betty Steinmeyer} {6151 West Prince Of Peace Drive} Tamworth TX 77314 lore@noway1234.com {Lore Rosakrans} {8311 Primrose Street} Galveston TX 77726 jim@noway1234.com {Jim Rader} {11156 Arnica Circle} Dallas TX 77494 donna284@noway1234.com {Donna Klein} {3933 Jay Circle} {Alice Springs} TX 77288 jewell@noway1234.com {Marian Jewell} {5591 Cape Circle} Broome TX 77971 arron@noway1234.com {Arron Houmann} {8794 Sikorsky Avenue} Brookshire TX 77313 finn@noway1234.com {Margaret Finn} {9233 Witherspoon Circle} {Mount Gambier} TX 77229 lorah@noway1234.com {Lorah Sterling} {513 Kempton Hills Drive} Centerville TX 77453 maxine@noway1234.com {Maxine Lawrence} {5769 Patches Avenue} Tamworth TX 77782 deborah@noway1234.com {Deborah Schmid} {4133 Vallihi Circle} Launceston TX 77706 mickey@noway1234.com {Mickey Reilly} {1675 Newton Court} Bourke TX 77011 garland@noway1234.com {Garland Taylor} {5694 Grace Street} Cairns TX 77993 jefferson@noway1234.com {Jefferson VanLaningham} {7326 Raven Court} Nacogdoches TX 77231 doeden@noway1234.com {Morgan Doeden} {2208 Orion Circle} Wollongong TX 77431 sand637@noway1234.com {Thomas Sand} {3127 Rachel Avenue} Albany TX 77232 kathleen@noway1234.com {Kathleen Robison} {3092 Covington Court} Centerville TX 77134 larry@noway1234.com {Larry Buethe} {6192 Opal Circle} {Padre Island} TX 77343 riensche@noway1234.com {John Riensche} {11732 Mills Bay Drive} Albany TX 77108 iv@noway1234.com {IV Schermbeck} {7917 Immelman Circle} {Port Hedland} TX 77804 barb@noway1234.com {Barb Vrbka} {8460 Hollow Street} Galveston TX 77049 obie@noway1234.com {Obie Beethe} {473 Emerald Street} Broome TX 77691 agena@noway1234.com {Dixie Agena} {1718 East Fireweed Lane} {Port Hedland} TX 77454 spadden@noway1234.com {spadden Kerr} {10561 Kaylin Circle} {Coffs Harbour} TX 77058 littlejohn@noway1234.com {Wilson Littlejohn} {7004 Delong Circle} Galveston TX 77899 harold@noway1234.com {Harold Hitzeman} {6099 Browning Drive} Rockhampton TX 77102 finke884@noway1234.com {Young Finke} {998 Valley Forge Circle} {Mount Gambier} TX 77646 gibbs@noway1234.com {T. Gibbs} {10893 Moorland Street} Waco TX 77917 winkle@noway1234.com {Wink Winkle} {1283 Business Park Boulevard} {Coffs Harbour} TX 77752 harrington@noway1234.com {T. Harrington} {9052 Mount Korohusk Circle} {Mount Isa} TX 77460 shew@noway1234.com {Dunlap Shew} {7009 Brayton Drive} Monaville TX 77074 witte@noway1234.com {Moss Witte} {1346 Sweetwater Circle} Albany TX 77731 fredrick@noway1234.com {Fredrick Durst} {927 Riddell Street} Adelaide TX 77750 pershing@noway1234.com {Pershing Rickman} {10936 Canyon Road} Hamilton TX 77962 friend@noway1234.com {Friend Bray} {9653 Bert Circle} Pattison TX 77954 jo414@noway1234.com {Jo Miesbach} {6783 Bear Mountain View Circle} Ketherine TX 77956 stoner@noway1234.com {Robert Stoner} {6608 Unimak Circle} Pattison TX 77863 eric@noway1234.com {Eric Waring} {7590 Liberty Road} {Port Hedland} TX 77390 pella@noway1234.com {A. Pella} {2474 Crystal Creek Drive} Galveston TX 77023 hahn@noway1234.com {Scott Hahn} {467 Peninsula Circle} OOdnadatta TX 77691 wilhelm@noway1234.com {woods Wilhelm} {4403 Lampert Circle} Austin TX 77003 inez@noway1234.com {Inez Kerr} {7916 Yale Drive} Wollongong TX 77286 hazelton726@noway1234.com {Hazelton Harms} {11231 Augustine Drive} Rockhampton TX 77572 ross@noway1234.com {Ross Waring} {1417 Sextant Circle} Bourke TX 77066 jennings@noway1234.com {Jennings Lewis} {9467 Viking Drive} Bendigo TX 77568 hunt@noway1234.com {Hunt Weible} {6986 Barbara Drive} Dallas TX 77758 anton@noway1234.com {Anton Carmine} {4086 West 29th Avenue} {Mount Isa} TX 77261 floerke4@noway1234.com {Pat Floerke} {6766 Mayfair Circle} Albany TX 77881 loren@noway1234.com {Loren Mattheis} {809 Greece Drive} Nacogdoches TX 77761 stordahl@noway1234.com {Jeanie Stordahl} {3289 Joseph Street} Cairns TX 77617 roena@noway1234.com {Roena Mapes} {10347 Chirikof Court} Katy TX 77643 fisher@noway1234.com {Rauner Fisher} {3297 Dakota Street} Queenstown TX 77939 joey@noway1234.com {Joey Spence} {11008 Fordham Drive} Cairns TX 77604 diann650@noway1234.com {Diann Burns} {7395 Olive Lane} Bendigo TX 77010 norma@noway1234.com {Norma Petersen} {435 Arboretum Street} Katy TX 77204 kathy@noway1234.com {Kathy Jacobsen} {9592 Fatemeh Circle} Nacogdoches TX 77064 sackaly@noway1234.com {Frame Sackaly} {3786 Retriever Circle} Dallas TX 77332 karen@noway1234.com {Karen Chritton} {6509 Prescott Street} {San Antonio} TX 77832 hervey@noway1234.com {Pudge Hervey} {416 Doggie Avenue} {San Antonio} TX 77628 g@noway1234.com {G. Wenzel} {7908 Larkspur Street} Monaville TX 77494 stanley@noway1234.com {Stanley DeLong} {5841 Nitoanya Circle} Waco TX 77613 robinson@noway1234.com {Robinson Grable} {6368 Goff Street} Wollongong TX 77289 junie@noway1234.com {Junie Drake} {7818 West 39th Avenue} {Padre Island} TX 77462 cork@noway1234.com {Cork Malone} {321 West 72nd Avenue} {San Antonio} TX 77295 hoke@noway1234.com {Myrtle Hoke} {9475 Sycamore Loop} Mildura TX 77230 cluster@noway1234.com {Cluster McCulla} {7866 Sunset View Street} {Coffs Harbour} TX 77463 hayes@noway1234.com {Imogene Hayes} {4674 Northgate Drive} Wollongong TX 77143 l930@noway1234.com {L. Quinn} {5928 Ebbtide Circle} Amarillo TX 77747 newman@noway1234.com {Newman Volkmer} {5516 East Zeus Circle} {Coffs Harbour} TX 77078 given531@noway1234.com {Given Burns} {2571 Callaway Circle} {Mount Isa} TX 77144 l616@noway1234.com {L. Jewell} {2614 Caswell Ave} Ketherine TX 77819 gumm@noway1234.com {Gumm Ruby} {11103 West Frontage Road} OOdnadatta TX 77303 gilbert@noway1234.com {Gilbert Seeba} {9276 Loc Sault Avenue} Monaville TX 77439 merida@noway1234.com {Merida Glasson} {9000 Deborah Lane} OOdnadatta TX 77312 pieratt@noway1234.com {Bud Pieratt} {570 Bonnie Jean Court} {Mount Gambier} TX 77853 lovell@noway1234.com {Lovell Jacobsen} {6063 Birch Trail Circle} Townsville TX 77868 reiber@noway1234.com {Ida Reiber} {990 North Star Street} Pattison TX 77876 buerstetta@noway1234.com {Morris Buerstetta} {10279 North Eagle River Access Road} Cairns TX 77521 frederick@noway1234.com {Myrtle Frederick} {5298 Curvell Drive} {San Felipe} TX 77248 fleck482@noway1234.com {Marian Fleck} {1727 Pluto Drive} Pattison TX 77377 carlon@noway1234.com {Carlon Carman} {575 Doil Drive} Wollongong TX 77296 rickman@noway1234.com {Buck Rickman} {1897 Ahtena Circle} {Port Augusta} TX 77072 hazel@noway1234.com {Hazel Seward} {11836 East 101st Avenue} {Port Augusta} TX 77853 edgar@noway1234.com {Edgar Belding} {2879 Sand Lake Road} Hamilton TX 77964 collison@noway1234.com {Collison Mayfield} {2555 Morningtide Court} Bourke TX 77344 irne@noway1234.com {Irne Phillips} {10015 Brandl Street} {Broken Hill} TX 77823 marie@noway1234.com {Marie Hesman} {9886 Davis Court} Broome TX 77283 geweke@noway1234.com {Ann Geweke} {2540 Bradley Circle} Katy TX 77939 holden@noway1234.com {Peggy Holden} {9935 Shale Circle} Queenstown TX 77009 duane@noway1234.com {Duane Oestmann} {801 West 16th Avenue} Pattison TX 77097 swanson695@noway1234.com {Dean Swanson} {1548 Cimarron Circle} Mildura TX 77268 nelson@noway1234.com {Nelson Norvell} {7006 Raintree Circle} Houston TX 77562 irene583@noway1234.com {Irene Ruby} {1733 Reklas Circle} Galveston TX 77299 donna_rathe@noway1234.com {Donna Rathe} {4745 New England Drive} Cairns TX 77925 nettles@noway1234.com {Nettles Stangel} {974 West Harvard Avenue} {Alice Springs} TX 77873 christian@noway1234.com {Christian Morrow} {3920 Kilo Circle} Austin TX 77936 jerold537@noway1234.com {Jerold Mcculla} {2005 Lakonia Drive} {Port Augusta} TX 77708 hoover@noway1234.com {Hoover Hagelback} {5470 Keyhole Circle} Adelaide TX 77497 quentin@noway1234.com {Quentin Jones} {2254 Windsor Place} Bendigo TX 77485 rathbun@noway1234.com {Ona Rathbun} {4235 Country Meadow Circle} Austin TX 77349 gay277@noway1234.com {Gay Horstman} {9955 Amber Bay Circle} Bourke TX 77055 greeb@noway1234.com {Merle Greeb} {10928 North C Street} Katy TX 77084 suhr@noway1234.com {Hughes Suhr} {286 East 53rd Avenue} {Coffs Harbour} TX 77259 lila@noway1234.com {Lila Pope} {3270 East International Airport Road} Bourke TX 77312 backus@noway1234.com {Backus Hansel} {10018 Ginami Circle} Albury TX 77549 rebuck934@noway1234.com {Osbome Rebuck} {106 Dotie's Drive} Nacogdoches TX 77756 ralph@noway1234.com {Ralph Evans} {310 Montagne Circle} Ketherine TX 77012 goers@noway1234.com {Ross Goers} {2278 Ben Court} {Alice Springs} TX 77676 tinney@noway1234.com {Tinney Russell} {4744 Sutwik Circle} Austin TX 77761 w_b@noway1234.com {W.B. Homer} {5831 Westland Circle} Newcastle TX 77022 filmore@noway1234.com {Filmore Ruter} {8911 Newport Circle} Tamworth TX 77934 rau@noway1234.com {Mary Rau} {11914 Jerry Avenue} {Padre Island} TX 77924 j_a@noway1234.com {J.A. Krontz} {1359 Landings Circle} {San Felipe} TX 77722 mitzi@noway1234.com {Mitzi Hoke} {9610 Jim Avenue} {Padre Island} TX 77260 parsons@noway1234.com {Parsons Staley} {7184 Dimond D Circle} Sunnyville TX 77625 leola@noway1234.com {Leola Fink} {10640 North C Street} Ketherine TX 77153 burns146@noway1234.com {Johnson Burns} {9985 Twining Drive} Broome TX 77216 gibson@noway1234.com {Gibson Koehler} {5429 Campus Circle} {Padre Island} TX 77891 schroder@noway1234.com {Dodrill Schroder} {11461 Flower Street} Kema TX 77018 joe_malone@noway1234.com {Joe Malone} {10606 Samalga Circle} Houston TX 77896 jess@noway1234.com {Jess Rademacher} {831 Melody Lane} Monaville TX 77231 siske@noway1234.com {Noralea Siske} {9932 Northrup Circle} Eucla TX 77235 roberta@noway1234.com {Roberta Gorton} {10272 Kelly Circle} Centerville TX 77749 genniene@noway1234.com {Genniene Carpenter} {10337 Buttress Haul Road} Albury TX 77165 ernestine@noway1234.com {Ernestine Drake} {10203 Louis Place} {Coffs Harbour} TX 77061 bude@noway1234.com {Bude Todter} {11462 Loc Sault Avenue} Amarillo TX 77420 rizor@noway1234.com {Imogene Rizor} {10255 Cherokee Court} Rockhampton TX 77973 mahetable@noway1234.com {Mahetable Klein} {3106 Beechcraft Drive} Bourke TX 77333 saunders@noway1234.com {Macel Saunders} {7858 Excursion Circle} Star TX 77107 mardell_hupka@noway1234.com {Mardell Hupka} {1864 Fountain Drive} Centerville TX 77635 bennett@noway1234.com {Volmer Bennett} {5440 Dotberry Drive} Sunnyville TX 77118 steel@noway1234.com {Steel Feurer} {7388 East 110th Avenue} Houston TX 77585 esser326@noway1234.com {Buck Esser} {6978 Cliff Court} {Coober Pedy} TX 77929 glasson@noway1234.com {Jo Glasson} {8805 Knowles Circle} {Coffs Harbour} TX 77992 ancil@noway1234.com {Ancil Jochim} {431 Duncanshire Place} Houston TX 77622 legg@noway1234.com {Legg Vrbka} {10165 Claudene Loop} Sunnyville TX 77833 rue@noway1234.com {Rue Montz} {289 Dimond Hook Drive} {Coober Pedy} TX 77595 jasper@noway1234.com {Jasper Zager} {6199 Old Seward Highway} Broome TX 77503 yates@noway1234.com {Wanda Yates} {4575 Romig Place} Bathurst TX 77218 penelope@noway1234.com {Penelope Rebuck} {7355 North Strand Lane} Dallas TX 77437 nell@noway1234.com {Nell Dollarhide} {8195 Blair Avenue} {San Felipe} TX 77130 buttermilk@noway1234.com {Buttermilk Eltiste} {10910 Yorkshire Lane} {Mount Gambier} TX 77791 einstein@noway1234.com {Wilson Einstein} {11328 Francesca Drive} Eucla TX 77301 carson605@noway1234.com {Rosa Carson} {67 West 24th Avenue} Amarillo TX 77410 cleve@noway1234.com {Cleve Schweppe} {8442 Mc Rae Road} Austin TX 77611 mavallee@noway1234.com {Mavallee Gobber} {11411 Rowan Street} Dallas TX 77095 goldie@noway1234.com {Goldie Laue} {3227 Mc Lean Place} {San Felipe} TX 77385 kae@noway1234.com {Kae Vongsaly} {87 Showers Avenue} Brookshire TX 77391 cawley647@noway1234.com {Sandi Cawley} {9912 Little Creek Drive} Amarillo TX 77597 carroll@noway1234.com {Carroll Mccoy} {6478 Cleo Avenue} {Broken Hill} TX 77656 matthew@noway1234.com {Matthew Schacht} {10916 Tobuk Circle} {San Felipe} TX 77389 sally@noway1234.com {Sally Sterling} {800 Sugar Circle} Eucla TX 77343 d7@noway1234.com {D. Graff} {207 Decoy Circle} {Mount Isa} TX 77475 neukirch@noway1234.com {Nellie Neukirch} {10865 Resurrection Drive} {Mount Gambier} TX 77698 lofgren@noway1234.com {T. Lofgren} {2371 Tidepool Place} Bathurst TX 77462 miller_gibson@noway1234.com {Miller Gibson} {9601 East Dimond Circle} {Mount Isa} TX 77664 deane@noway1234.com {Deane Kroll} {4678 Prescott Street} Tamworth TX 77881 cotrill891@noway1234.com {Cotrill Oltman} {1804 Upper Sunny Circle} Katy TX 77081 arthur@noway1234.com {Arthur Fricke} {7530 Rodeo Place} Albany TX 77105 tilden@noway1234.com {Tilden Aden} {9523 Larkspur Street} Galveston TX 77210 ermine@noway1234.com {Ermine Knox} {4265 Klondike Street} Galveston TX 77635 wayne@noway1234.com {Wayne Grove} {1314 Will Rogers Place} Centerville TX 77655 haymon@noway1234.com {Haymon Olsen} {1773 Bowdoin Circle} Amarillo TX 77262 perry_mcalexander@noway1234.com {Perry Mcalexander} {3626 Lynx Way} {San Antonio} TX 77371 harmon@noway1234.com {Harmon Staley} {7175 Topaz Avenue} Hamilton TX 77328 sussie@noway1234.com {Sussie Hamm} {206 Mirage Circle} Katy TX 77495 randy@noway1234.com {Randy Landry} {11794 Loland Drive} Townsville TX 77924 jessie_ruby@noway1234.com {Jessie Ruby} {9262 Seppala Drive} Brookshire TX 77567 neemann@noway1234.com {Jackson Neemann} {6659 Specking Avenue} Monaville TX 77418 mccoy@noway1234.com {R. McCoy} {6101 Nettleton Drive} Albury TX 77010 menard@noway1234.com {Nicholas Menard} {3376 Belknap Circle} Townsville TX 77181 billine@noway1234.com {Billine Taylor} {9550 Apollo Drive} Houston TX 77934 humann@noway1234.com {Dee Humann} {2663 Helvetia Drive} Nacogdoches TX 77281 mckinney@noway1234.com {Delbert McKinney} {7083 Monte Road} {Alice Springs} TX 77895 jolene@noway1234.com {Jolene Esser} {5721 Ellen Circle} Queenstown TX 77948 neill@noway1234.com {Daniel Neill} {9752 Kalmia Drive} {San Antonio} TX 77663 chelsie@noway1234.com {Chelsie Meyer} {6701 Husky Street} Bathurst TX 77224 gillette@noway1234.com {Hunter Gillette} {8209 Rakof Avenue} Centerville TX 77799 leuder@noway1234.com {Moore Leuder} {9275 East 38th Avenue} Katy TX 77867 prussia@noway1234.com {Prussia Sellman} {3482 Lane Street} Cairns TX 77646 guy@noway1234.com {Guy Lofgren} {7886 Wolf Way} {Mount Isa} TX 77371 goosman@noway1234.com {Frame Goosman} {8730 Resort Circle} {Mount Gambier} TX 77521 boline@noway1234.com {s Boline} {2169 Crestline Road} Kema TX 77084 carte@noway1234.com {Carte Rogers} {1223 East 80th Avenue} Albury TX 77272 shaffer@noway1234.com {Shaffer Campbell} {8055 Seal Point Circle} Pattison TX 77485 neukirch26@noway1234.com {Boyd Neukirch} {1455 Nickell Circle} {San Felipe} TX 77013 lillie@noway1234.com {Lillie Ford} {8859 Fawn Lane} Eucla TX 77216 stanley736@noway1234.com {Stanley Sackaly} {7274 Discovery Park Drive} {Mount Isa} TX 77797 fuller@noway1234.com {Lorene Fuller} {4314 Heritage Center Drive} Adelaide TX 77076 dodrill_sorensen@noway1234.com {Dodrill Sorensen} {8874 Virda Lee Circle} {Alice Springs} TX 77381 williams@noway1234.com {Williams Gates} {7550 Reliance Drive} {Mount Isa} TX 77696 tenhulzen@noway1234.com {T. TenHulzen} {1931 Swanee Court} OOdnadatta TX 77075 ruth@noway1234.com {Ruth Lacey} {11302 Maplewood Street} Broome TX 77729 maxine580@noway1234.com {Maxine Menard} {1628 Dylan Drive} Monaville TX 77600 hess@noway1234.com {Hess Uhrmacher} {4475 Carriage Drive} OOdnadatta TX 77460 baum@noway1234.com {Baum Yoder} {9387 Nix Court} Houston TX 77064 viola@noway1234.com {Viola Kerchal} {1130 Navrot Circle} Monaville TX 77219 malissa@noway1234.com {Malissa Scharton} {6946 Bellevue Circle} {Broken Hill} TX 77941 zelia@noway1234.com {Zelia Winkle} {7697 Snowy Court} Centerville TX 77742 whitehead@noway1234.com {Ann Whitehead} {5543 Jeanne Road} OOdnadatta TX 77974 nora@noway1234.com {Nora Kuhl} {5850 West Lake Avenue} Albany TX 77720 amsberry200@noway1234.com {Roena Amsberry} {5526 Bisquier Drive} Burnie TX 77814 kay@noway1234.com {Kay Johns} {6037 Craig Creek Circle} Eucla TX 77771 taylor@noway1234.com {Lee Taylor} {11865 Sumac Drive} Albany TX 77205 west@noway1234.com {Holcomb West} {462 Baxter Court} Kema TX 77076 iciphine@noway1234.com {Iciphine Rothell} {10656 Cervin Circle} Amarillo TX 77936 rosalie@noway1234.com {Rosalie Mann} {7230 Lang Street} {Coffs Harbour} TX 77385 clifton360@noway1234.com {Bud Clifton} {7602 Bryant Ridge Place} Albany TX 77925 evalina@noway1234.com {Evalina Mooney} {1960 Merrill Field Drive} Queenstown TX 77465 doc@noway1234.com {Doc Gibson} {7798 Linda Lane} Launceston TX 77532 kelly@noway1234.com {Kelly Hutt} {9974 Chickadee Street} {Coober Pedy} TX 77656 dirksen@noway1234.com {Maxine Dirksen} {8812 Ambler Lane} Mildura TX 77153 barnette@noway1234.com {Barnette Weyers} {2278 West 68th Avenue} Austin TX 77980 jimmie@noway1234.com {Jimmie Carson} {11991 Ridgeview Drive} {Port Hedland} TX 77093 vena@noway1234.com {Vena Wenzl} {3225 Cicutta Way} Rockhampton TX 77480 dillaplain@noway1234.com {Mullins Dillaplain} {7837 Belknap Circle} Centerville TX 77881 ocie@noway1234.com {Ocie Werner} {4233 De Ette Circle} Monaville TX 77894 west224@noway1234.com {Boggs West} {4189 West 78th Court} Launceston TX 77556 donzel@noway1234.com {Donzel Todter} {951 Ascot Street} Ketherine TX 77042 willis@noway1234.com {Willis Stone} {8728 North Parkview Terrace Loop} Houston TX 77807 lou752@noway1234.com {Lou Stoddard} {746 Teri Circle} Independence TX 77957 florence@noway1234.com {Florence Baird} {2171 Lassen Street} Hamilton TX 77095 burkley@noway1234.com {Burkley Foetisch} {7822 Cheechako Street} {Port Hedland} TX 77921 wolf@noway1234.com {D. Wolf} {9198 Eleusis Circle} Independence TX 77022 arch@noway1234.com {Arch Troeger} {2375 Michelin Place} Bourke TX 77109 gregg@noway1234.com {Gregg Hansel} {4310 Keta Circle} Ketherine TX 77141 buddy@noway1234.com {Buddy Feurer} {4195 Bluebell Drive} Albury TX 77585 ira@noway1234.com {Ira Kleine} {1817 Milky Way Drive} Launceston TX 77468 ruter291@noway1234.com {Butcher Ruter} {3303 East 42nd Court} Rockhampton TX 77214 greene@noway1234.com {Betty Greene} {5049 Marsha Loop} Albury TX 77806 billie@noway1234.com {Billie Philippi} {4685 Cutwater Circle} Galveston TX 77245 andrew@noway1234.com {Andrew Christensen} {10869 Auriga Way} Pattison TX 77260 a825@noway1234.com {A. Mommens} {3530 Mc Cain Road} Queenstown TX 77634 arnett@noway1234.com {Arnett Bicknell} {1609 Waxwing Circle} Newcastle TX 77670 freeda@noway1234.com {Freeda Rathbun} {11916 Kilkenny Circle} {Mount Gambier} TX 77380 triplett@noway1234.com {Triplett Keedy} {8304 Austin Street} {Port Augusta} TX 77614 quinton@noway1234.com {Quinton Clifton} {7149 Downhill Circle} {San Felipe} TX 77695 eells@noway1234.com {Triplett Eells} {5885 Mirror Lake Drive} {Broken Hill} TX 77601 phillips@noway1234.com {Phillips Shaffer} {2936 Liberty Circle} Monaville TX 77352 sigman@noway1234.com {Sigman Allen} {11840 Judy Street} Newcastle TX 77188 macel127@noway1234.com {Macel Rau} {363 Orange Leaf Circle} Broome TX 77900 zellmer@noway1234.com {Elizabeth Zellmer} {4750 Hillcrest Lane} {Padre Island} TX 77082 mcalexander421@noway1234.com {Merida Mcalexander} {3311 Hatcher Circle} Katy TX 77212 woodrow@noway1234.com {Woodrow Lock} {10985 Campus Street} {Tennant Creek} TX 77973 c_l@noway1234.com {C.L. Laug} {9503 Lakehurst Drive} {Broken Hill} TX 77224 marcella@noway1234.com {Marcella Lempka} {9045 Cliffside Drive} Bendigo TX 77796 wherry@noway1234.com {Ann Wherry} {3260 Voyles Boulevard} {Broken Hill} TX 77632 muncey431@noway1234.com {Muncey Witte} {9190 West 40th Avenue} Waco TX 77012 darnell@noway1234.com {Darnell Hunt} {1597 North Wrangell Street} Austin TX 77471 kelley@noway1234.com {Phala Kelley} {5923 Mercy Drive} Albury TX 77426 laura@noway1234.com {Laura Aldana} {9321 Honey Bear Circle} Bourke TX 77993 emory@noway1234.com {Emory Siske} {3529 Ravenview Loop Road} Wollongong TX 77819 jeannene@noway1234.com {Jeannene Scherrer} {1049 Treasure Box Mine Road} Hamilton TX 77347 jacquine@noway1234.com {Jacquine Beethe} {250 Meadow View Drive} {Tennant Creek} TX 77169 scott594@noway1234.com {JoAnn Scott} {8472 Viola Circle} {San Felipe} TX 77512 tinnel@noway1234.com {Tinnel Huff} {6324 L Street} {Port Hedland} TX 77702 halverstadt202@noway1234.com {D. Halverstadt} {8461 Bellevue Circle} {Coober Pedy} TX 77546 gerald@noway1234.com {Gerald Bicknell} {5946 Hilltop Circle} Mildura TX 77973 elkins@noway1234.com {Elkins Lempke} {1248 Genevieve Street} Launceston TX 77124 lcie@noway1234.com {lcie Robison} {11422 East 98th Avenue} Adelaide TX 77579 wherry755@noway1234.com {L. Wherry} {6742 Greenhill Way} {San Felipe} TX 77508 jesse268@noway1234.com {Jesse Mccoy} {11452 Nancy Circle} {Padre Island} TX 77791 brady@noway1234.com {Brady Reiber} {3292 Vanderbilt Circle} Townsville TX 77561 dough_belly677@noway1234.com {Dough Belly Fuller} {4737 Aspen Court} Centerville TX 77486 bette@noway1234.com {Bette Olmsted} {5447 Tudor Hills Court} Brookshire TX 77431 hemmer@noway1234.com {Bud Hemmer} {564 West 25th Avenue} Hamilton TX 77725 walker@noway1234.com {Walker Tagart} {7150 West 72nd Avenue} Newcastle TX 77914 kae434@noway1234.com {Kae Johnson} {10489 Marilaine Drive} Hamilton TX 77665 sova@noway1234.com {J.D. Sova} {2321 Diplomacy Drive} {Broken Hill} TX 77418 landry750@noway1234.com {Goldie Landry} {8678 Summerset Drive} {Padre Island} TX 77896 imogene_chittenden@noway1234.com {Imogene Chittenden} {4839 Groh Street} Eucla TX 77251 renee@noway1234.com {Renee Beethe} {3622 Weatherly Court} Mildura TX 77353 jessie919@noway1234.com {Jessie Kreiling} {5508 Shetland Heights Circle} {Port Augusta} TX 77439 irvin183@noway1234.com {Irvin Ray} {2707 Delphin Circle} Newcastle TX 77402 purdy@noway1234.com {Keener Purdy} {4370 Spruce Run Circle} Pattison TX 77795 dick@noway1234.com {Dick Cottingham} {4074 Capricorn Circle} Hamilton TX 77268 karl@noway1234.com {Karl Schmiegelow} {8282 Quick Way} {San Felipe} TX 77967 dawn@noway1234.com {Dawn King} {10810 Anne Circle} Dallas TX 77247 snowden@noway1234.com {Eugene Snowden} {3225 Redwood Street} Burnie TX 77127 armknecht@noway1234.com {Gillispie Armknecht} {791 Beaujolais Drive} Star TX 77627 schweppe@noway1234.com {Noralee Schweppe} {6040 Fire Lake Drive} Broome TX 77049 kelly955@noway1234.com {Kelly Whitehead} {8745 East 100th Avenue} {Mount Gambier} TX 77659 mudflaps@noway1234.com {Mudflaps Thurber} {9397 Hidden Point Loop} Launceston TX 77773 casto683@noway1234.com {Casto Tejral} {1686 Mount Yukla Circle} Broome TX 77187 williams124@noway1234.com {Williams Schreiner} {607 Christopher Circle} Newcastle TX 77804 blanch@noway1234.com {Blanch Davison} {9218 Woodroe Lane} Monaville TX 77241 kirkman@noway1234.com {Shaffer Kirkman} {6399 North Tug Road} {Port Hedland} TX 77248 herbert@noway1234.com {Herbert Pierce} {5471 Lane Circle} Galveston TX 77937 morrissey@noway1234.com {Phala Morrissey} {10854 West End Road} Sunnyville TX 77031 winnie@noway1234.com {Winnie Dieckmann} {495 Bruce Lane} Galveston TX 77824 walter@noway1234.com {Walter Guenther} {9858 West 88th Avenue} {Mount Isa} TX 77731 henderson@noway1234.com {Henderson Drake} {7922 Klingler Street} Star TX 77645 khanthasene@noway1234.com {David Khanthasene} {7186 Brayton Drive} {Broken Hill} TX 77901 befty@noway1234.com {Befty Klein} {10624 East 82nd Avenue} Broome TX 77563 alva@noway1234.com {Alva Wiese} {1307 Terminal Road} Waco TX 77632 dr_gibson@noway1234.com {Dr. Gibson} {5000 West Potter Drive} OOdnadatta TX 77758 russell@noway1234.com {Russell Bossung} {3421 L Street} Eucla TX 77516 eddie@noway1234.com {Eddie Boone} {9678 Fairweather Court} {Coffs Harbour} TX 77831 dorthy_jewell@noway1234.com {Dorthy Jewell} {3281 Monron Street} Austin TX 77363 violet@noway1234.com {Violet Agena} {576 Bennington Drive} {San Antonio} TX 77284 borrenpohl@noway1234.com {Roy Borrenpohl} {6982 Saaya Circle} Albury TX 77703 bus@noway1234.com {Bus Berg} {1167 Thunder Road} Launceston TX 77367 otch@noway1234.com {Otch Fritsch} {7318 Loriann Street} Austin TX 77796 mary_menard@noway1234.com {Mary Menard} {1090 Chaffee Circle} Mildura TX 77120 gillette305@noway1234.com {Jean Gillette} {5634 Lower Sunny Circle} Bathurst TX 77978 wendell@noway1234.com {Gladys Wendell} {3167 East 9th Court} OOdnadatta TX 77438 rothell659@noway1234.com {McQuire Rothell} {251 Ronald Place} Adelaide TX 77966 ann38@noway1234.com {Ann Armknecht} {557 Flower Street} Albury TX 77868 gene@noway1234.com {Gene Fisher} {3700 Spectrum Circle} Katy TX 77825 lilly@noway1234.com {Lilly Huff} {6699 Round Tree Drive} Wollongong TX 77215 davis155@noway1234.com {Oral Davis} {3949 Commerce Street} {Broken Hill} TX 77593 gordon@noway1234.com {Ann Gordon} {7817 Little Moose Circle} {San Antonio} TX 77405 nixon@noway1234.com {Hubert Nixon} {8494 Lower Sunny Circle} Brookshire TX 77056 jay@noway1234.com {Jay Wright} {9019 Kutcher Drive} Monaville TX 77601 colson@noway1234.com {Virginia Colson} {2823 O'malley Centre Drive} Newcastle TX 77620 evayline@noway1234.com {Evayline Othmer} {5615 Harriet Court} Queenstown TX 77674 stewart@noway1234.com {Mary Stewart} {9960 Moose Road} Austin TX 77261 dolly@noway1234.com {Dolly Snowden} {9399 Redcoat Place} Mildura TX 77282 stitt@noway1234.com {Byrne Stitt} {1531 Berryhill Lane} OOdnadatta TX 77979 sidney@noway1234.com {Sidney Brock} {5069 Rodeo Place} {San Felipe} TX 77693 morris_mcpherrin@noway1234.com {Morris McPherrin} {1947 Holden Drive} Independence TX 77025 chessie@noway1234.com {Chessie Morrison} {3560 Etolin Circle} {Padre Island} TX 77473 hagelback@noway1234.com {Hughes Hagelback} {384 East 31st Avenue} {Broken Hill} TX 77807 hershberger@noway1234.com {Gardner Hershberger} {6589 Brien Street} Albury TX 77758 delma@noway1234.com {Delma Stangel} {10696 Kidron Street} Star TX 77149 kage@noway1234.com {Frame Kage} {11609 Nancy Street} Brookshire TX 77142 june@noway1234.com {June Guenther} {1472 Westford Lane} Newcastle TX 77273 harry@noway1234.com {Harry Frederick} {8709 Wolf Creek Circle} {San Antonio} TX 77617 rhodes@noway1234.com {Rhodes Rohrs} {896 Pine Street} Cairns TX 77414 daisy@noway1234.com {Daisy Hauptman} {8827 Alissa Circle} Waco TX 77429 doug@noway1234.com {Doug Pfister} {5726 Garnett Court} Amarillo TX 77008 hauptman@noway1234.com {Eddie Hauptman} {5736 Carol Drive} Mildura TX 77263 kroll@noway1234.com {Sizemore Kroll} {6397 Stover Place} Townsville TX 77108 parrish@noway1234.com {Jenner Parrish} {9320 Wild Mountain Drive} Bendigo TX 77658 feurer@noway1234.com {Nellie Feurer} {497 East 58th Court} {Tennant Creek} TX 77312 thongkhamvilay@noway1234.com {Harold Thongkhamvilay} {4863 Williamsburg Drive} Hamilton TX 77403 krause@noway1234.com {Imogene Krause} {4899 Mossberry Place} Hamilton TX 77229 sikyta359@noway1234.com {Ruth Sikyta} {6900 Ridgelake Circle} Eucla TX 77035 hardway@noway1234.com {Hardway Wachosky} {2254 Highland Ridge Drive} Adelaide TX 77113 dewey@noway1234.com {Dewey Horner} {10613 West Hoteco Avenue} Independence TX 77887 prin@noway1234.com {prin Woltemath} {9923 Alamosa Drive} Tamworth TX 77751 aaron@noway1234.com {Aaron Bogle} {8778 Commerce Street} {Tennant Creek} TX 77348 rother@noway1234.com {Gill Rother} {2421 Newhaven Loop} Waco TX 77974 brenda@noway1234.com {Brenda Ebeler} {811 Wesleyan Drive} Centerville TX 77644 irene290@noway1234.com {Irene Reiber} {9256 Burlington Street} {Padre Island} TX 77610 sheila@noway1234.com {Sheila Piersol} {3073 East 30th Avenue} {Broken Hill} TX 77990 patrick@noway1234.com {Patrick Feurer} {10435 San Bowfel Street} {Coffs Harbour} TX 77142 mattox@noway1234.com {Kae Mattox} {2045 Tofson Street} {Coffs Harbour} TX 77607 facemire@noway1234.com {Facemire Earhart} {990 Coventry Drive} Launceston TX 77813 bengtsson@noway1234.com {Frank Bengtsson} {5025 Victor Road} Albury TX 77712 dirk@noway1234.com {Dirk Morrissey} {4652 Baby Bear Drive} Burnie TX 77108 ronna@noway1234.com {Ronna DeVorss} {8272 Maryland Avenue} Pattison TX 77967 cantrell718@noway1234.com {Cantrell McKinney} {9567 Columbine Court} Bathurst TX 77297 johnson175@noway1234.com {Johnson Hervey} {7182 Cutwater Circle} Austin TX 77931 calhoun@noway1234.com {Calhoun Goracke} {10015 Ridgecrest Drive} {Coober Pedy} TX 77076 gracie@noway1234.com {Gracie Birnie} {9823 Chester Court} Bendigo TX 77872 wherry259@noway1234.com {Jeanie Wherry} {10434 China Berry Circle} Star TX 77239 m@noway1234.com {M. Knock} {8346 Car-lynn Circle} Townsville TX 77991 sedersten@noway1234.com {Laxton Sedersten} {1597 Meadow Lake Drive} Bathurst TX 77758 curry@noway1234.com {Backus Curry} {283 Community Park Loop} Wollongong TX 77166 pieratt182@noway1234.com {Bette Pieratt} {4032 Alaska Avenue} Newcastle TX 77731 sharon@noway1234.com {Sharon Tagart} {982 Reliance Drive} Launceston TX 77622 scherrer@noway1234.com {Wanda Scherrer} {3604 Rollins Drive} Albury TX 77998 dola@noway1234.com {Dola McPherrin} {8923 Lars Circle} Ketherine TX 77957 hale@noway1234.com {Hale Hays} {5379 Cathedral Place} {Padre Island} TX 77841 zager@noway1234.com {Perry Zager} {11911 Virgo Avenue} {Tennant Creek} TX 77344 otha@noway1234.com {Otha Whitehead} {4164 Round Tree Circle} Bendigo TX 77732 cora@noway1234.com {Cora Rau} {3554 East Dimond Boulevard} Cairns TX 77507 ullman@noway1234.com {Billine Ullman} {6163 Stephanie Boulevard} {Port Hedland} TX 77547 darrell@noway1234.com {Darrell Philpott} {9423 View Circle} {San Felipe} TX 77803 lueders@noway1234.com {Ahtelene Lueders} {7607 Koehler Street} Ketherine TX 77899 morris309@noway1234.com {Morris Badertscher} {88 West 76th Avenue} Broome TX 77504 wetzel@noway1234.com {Wetzel Wenzel} {9288 Hiton Drive} {Coffs Harbour} TX 77060 carmine@noway1234.com {Bud Carmine} {1445 Powder Horn Circle} Sunnyville TX 77556 jeff@noway1234.com {Jeff Schutz} {6987 Montclaire Court} OOdnadatta TX 77256 johns@noway1234.com {Anna Johns} {236 West 33rd Avenue} Kema TX 77413 etta@noway1234.com {Etta Dumitru} {9297 Frank Street} Star TX 77844 sheryl22@noway1234.com {Sheryl Thies} {10840 Oomiak Circle} {Alice Springs} TX 77742 bud692@noway1234.com {Bud Gibson} {4441 Duben Avenue} Katy TX 77298 rosalea@noway1234.com {Rosalea Dirksen} {11276 West Lake Avenue} {San Antonio} TX 77554 pony@noway1234.com {Pony Volkmer} {8762 Orange Leaf Circle} Independence TX 77300 bane@noway1234.com {Cleve Bane} {8406 Oline Circle} {Coffs Harbour} TX 77469 lacie@noway1234.com {Lacie Wiese} {313 Don Circle} Austin TX 77763 elenga@noway1234.com {Linda Elenga} {2972 Cleveland Avenue} Burnie TX 77399 adrian@noway1234.com {Adrian Holden} {2299 Riverton Avenue} Burnie TX 77828 berg@noway1234.com {Lee Berg} {9976 G Court} Galveston TX 77562 troeger@noway1234.com {Dawn Troeger} {2445 Desiree Loop} Adelaide TX 77859 mccourtney@noway1234.com {Marple McCourtney} {6157 Pauline Street} Townsville TX 77725 tab@noway1234.com {Tab Dirksen} {1923 Birchtree Street} Tamworth TX 77984 tyburtis@noway1234.com {Tyburtis Hitzeman} {7529 Chess Drive} {Broken Hill} TX 77068 rosakrans@noway1234.com {Donzel Rosakrans} {6821 Curlew Circle} Monaville TX 77167 ines@noway1234.com {Ines Knippelmeyer} {6152 Willson Way} {Port Hedland} TX 77874 rommie@noway1234.com {Rommie Hester} {2835 Tartan Circle} {San Felipe} TX 77479 emza@noway1234.com {Emza Putnam} {11439 Jackson Drive} Houston TX 77615 melissa@noway1234.com {Melissa Neemann} {5877 Diggins Drive} Newcastle TX 77915 kyle@noway1234.com {Kyle Neukirch} {8457 Chatanika Loop} Galveston TX 77370 pan@noway1234.com {Ramsey Pan} {145 Gram Circle} Bathurst TX 77234 hansel@noway1234.com {Charles Hansel} {3929 Lido Circle} Newcastle TX 77279 tim@noway1234.com {Tim Staley} {8878 Baby Bear Drive} {Port Hedland} TX 77385 leona@noway1234.com {Leona McDowell} {3087 Stover Place} Bendigo TX 77392 nurse@noway1234.com {nurse Field} {8637 West 73rd Circle} {San Felipe} TX 77735 severns@noway1234.com {June Severns} {5512 Jem Circle} {Mount Gambier} TX 77256 tucker@noway1234.com {Kay Tucker} {4219 Hialeah Drive} Launceston TX 77074 pau@noway1234.com {Pau Lohmeier} {4612 Valley Park Drive} {Coffs Harbour} TX 77850 rhunie@noway1234.com {Rhunie Holmstrom} {3492 Commerce Street} Katy TX 77592 rona@noway1234.com {Rona Reinhardt} {2417 Artemus Circle} {Alice Springs} TX 77417 taka@noway1234.com {Taka Colson} {6254 Lovejoy Drive} Waco TX 77449 jackie@noway1234.com {Jackie LaFrance} {5455 Sundew Circle} OOdnadatta TX 77577 bates@noway1234.com {Lawrence Bates} {8357 Calaska Circle} {Padre Island} TX 77828 marge301@noway1234.com {Marge Nixon} {6545 Donalds Street} Brookshire TX 77177 delsie@noway1234.com {Delsie Faris} {7789 Snowline Drive} {Port Augusta} TX 77529 brenford@noway1234.com {Brenford Houmann} {678 Baugh Circle} Rockhampton TX 77990 evalena@noway1234.com {Evalena McCain} {8727 Nielsen Way} Bourke TX 77103 eileen_troeger@noway1234.com {Eileen Troeger} {9405 Tree Top Lane} Brookshire TX 77512 person@noway1234.com {prin Person} {6713 Bridget Drive} Waco TX 77081 berner@noway1234.com {Johnson Berner} {862 Woodside Street} Star TX 77090 olmsted@noway1234.com {Eugene Olmsted} {107 Crows Circle} Dallas TX 77567 avis@noway1234.com {Avis Mommens} {10019 Sky Circle} Eucla TX 77670 shaffer334@noway1234.com {Ester Shaffer} {9516 Chad Street} {San Felipe} TX 77153 eva_gordon@noway1234.com {Eva Gordon} {5477 Jarvi Drive} {Mount Isa} TX 77877 annette@noway1234.com {Annette Herman} {9802 Saint Elias Drive} Dallas TX 77259 wanda_greene@noway1234.com {Wanda Greene} {2872 Don Circle} Dallas TX 77742 denny296@noway1234.com {Denny Topp} {4316 Algarin Circle} Bathurst TX 77949 f@noway1234.com {F. Lott} {9481 Kew Court} Brookshire TX 77118 sackaly836@noway1234.com {Amanda Sackaly} {4785 Seward Highway} Townsville TX 77895 packwood@noway1234.com {Ruth Packwood} {425 Gillette Drive} Townsville TX 77636 ione@noway1234.com {Ione Schroder} {6467 Wade Circle} Dallas TX 77085 scholl210@noway1234.com {Ona Scholl} {9182 East 154th Avenue} Brookshire TX 77819 houmann@noway1234.com {Carte Houmann} {10034 Aspen Way} Waco TX 77199 geraldine@noway1234.com {Geraldine Borrenpohl} {4074 Halyards Circle} Cairns TX 77798 duncan@noway1234.com {Duncan Bauers} {7410 Eastwood Loop} {San Felipe} TX 77366 hazen@noway1234.com {Rosanne Hazen} {9771 Mary Anne Court} Queenstown TX 77039 alta@noway1234.com {Alta Knock} {10661 Birch Avenue} Brookshire TX 77357 rosevelt@noway1234.com {Rosevelt Kettelhake} {6418 Packhorse Circle} Sunnyville TX 77830 bragg@noway1234.com {Bragg Boardman} {4304 Birchwood Spur Road} Bourke TX 77615 hitzeman@noway1234.com {Frame Hitzeman} {5562 Candywine Circle} {Port Augusta} TX 77010 craft@noway1234.com {Craft Aldana} {1978 Pine Valley Court} Broome TX 77801 little@noway1234.com {Allen Little} {2159 Valarian Street} Centerville TX 77098 triplett394@noway1234.com {Triplett Scholl} {11732 Swanson Circle} Albany TX 77535 holly@noway1234.com {Holly Robison} {8925 Homestead Trail} Mildura TX 77177 amanda61@noway1234.com {Amanda Menard} {8992 Shady Birch Place} Centerville TX 77388 goff@noway1234.com {Goff Rizor} {10625 Oakwood Drive} Broome TX 77340 teske@noway1234.com {Ward Teske} {11101 Delong Circle} Bendigo TX 77982 buethe@noway1234.com {Cluster Buethe} {3037 Cody Court} Austin TX 77521 r816@noway1234.com {R. Oldfather} {5101 West Bluff Drive} {San Felipe} TX 77391 samuel639@noway1234.com {Samuel Davis} {5890 Chitstone Mountain Loop} Eucla TX 77323 driskell@noway1234.com {Sonny Driskell} {5622 East Tree Drive} {Mount Isa} TX 77859 mancil@noway1234.com {Mancil Horner} {7887 Bitterroot Circle} Star TX 77811 holmstrom@noway1234.com {Joey Holmstrom} {4431 Banff Street} {Tennant Creek} TX 77294 senesourinh@noway1234.com {Jay Senesourinh} {5765 West 65th Avenue} Eucla TX 77774 etta610@noway1234.com {Etta Chrastil} {9605 Wenmatt Circle} Star TX 77960 parrish96@noway1234.com {Freeda Parrish} {3760 Ricky Road} Broome TX 77688 april@noway1234.com {April Rulla} {3727 Breeze Court} Eucla TX 77810 wall@noway1234.com {Lou Wall} {10010 Giddeon Circle} {Tennant Creek} TX 77270 morris485@noway1234.com {Morris Hayes} {3358 West 54th Avenue} Kema TX 77003 maynard@noway1234.com {Maynard Chritton} {6615 Theodore Drive} Independence TX 77248 bird820@noway1234.com {Bird Henrichs} {8268 Tanaina Drive} Star TX 77424 beula@noway1234.com {Beula Stinson} {2731 Red Talon Circle} {Alice Springs} TX 77855 mooney@noway1234.com {Wilson Mooney} {5647 Fountain Drive} Cairns TX 77620 marty_bryan@noway1234.com {Marty Bryan} {2960 Kigul Circle} Townsville TX 77022 russ@noway1234.com {Russ Lueders} {6336 Graiff Street} Brookshire TX 77762 eltiste@noway1234.com {Delsie Eltiste} {6639 Zuleika Road} {Padre Island} TX 77457 atha@noway1234.com {Atha Hood} {6231 Donelar Street} {Port Augusta} TX 77123 jayne@noway1234.com {Jayne Rogers} {11116 Nanook Circle} Rockhampton TX 77542 philpott@noway1234.com {dawson Philpott} {6953 Athanasius Street} Rockhampton TX 77741 greene397@noway1234.com {Perry Greene} {9831 Azalea Drive} Hamilton TX 77032 ella_kirkman@noway1234.com {Ella Kirkman} {3542 Noblewood Street} Brookshire TX 77147 waveline@noway1234.com {Waveline Steinauer} {5177 East Chester Heights Circle} Tamworth TX 77456 walker822@noway1234.com {Walker Suhr} {10125 Raven Drive} {Coffs Harbour} TX 77296 nealie@noway1234.com {Nealie Hindera} {4269 Woodcliff Court} Burnie TX 77104 wilhelm96@noway1234.com {Tootsie Wilhelm} {11811 Kinnikinnick Street} Ketherine TX 77713 murphy803@noway1234.com {Pearl Murphy} {227 Taft Street} Brookshire TX 77766 louisa@noway1234.com {Louisa Neukirch} {5067 Sorrels Drive} Adelaide TX 77632 leon@noway1234.com {Leon Davis} {9341 Long Street} {Port Augusta} TX 77286 huling@noway1234.com {Huling Keim} {5863 Balchen Drive} Cairns TX 77259 wolf375@noway1234.com {Dorsey Wolf} {8889 Michelin Alley} {Coffs Harbour} TX 77119 ebeler@noway1234.com {Woodrow Ebeler} {11819 Goodnews Lane} {San Antonio} TX 77013 cornelious@noway1234.com {Cornelious Krouse} {8990 Radiant Circle} Townsville TX 77055 sherman@noway1234.com {Evalene Sherman} {156 Highland Ridge Drive} Eucla TX 77827 flame@noway1234.com {Flame Johnson} {9016 Artemus Street} Kema TX 77428 reynolds@noway1234.com {Ora Reynolds} {8069 Miley Drive} {Mount Isa} TX 77158 soumpholphakdy@noway1234.com {Lucy Soumpholphakdy} {10322 Steel Street} {San Antonio} TX 77477 timothy@noway1234.com {Timothy Lohmeier} {8770 Muley Circle} {Coober Pedy} TX 77740 finfrock@noway1234.com {JoEllen Finfrock} {3389 Salem Court} Adelaide TX 77801 speckmann@noway1234.com {Neal Speckmann} {2675 Mall Circle} {Mount Gambier} TX 77690 garland606@noway1234.com {Garland Reiber} {3066 Wells Circle} {Alice Springs} TX 77207 aldana@noway1234.com {Eugene Aldana} {7771 Casey Circle} Star TX 77463 jennings162@noway1234.com {Jennings Raney} {2539 Mason Drive} {Coffs Harbour} TX 77508 neukirch255@noway1234.com {Dona Neukirch} {6058 Mumby Circle} {Port Hedland} TX 77694 orville684@noway1234.com {Orville Masur} {8158 Douglas Place} Pattison TX 77125 lambelet@noway1234.com {Lane Lambelet} {7674 Katalla Circle} Newcastle TX 77883 vickie@noway1234.com {Vickie Reinhardt} {2539 Genny Circle} Austin TX 77141 montz194@noway1234.com {Dee Montz} {4139 Lochenshire Place} {Coffs Harbour} TX 77112 dittmer@noway1234.com {Ann Dittmer} {854 Travis Circle} Centerville TX 77347 haughton@noway1234.com {Tucker Haughton} {2539 East 86th Court} Rockhampton TX 77330 lou369@noway1234.com {Lou Mattox} {8379 Pequod Circle} {Padre Island} TX 77105 stauffer@noway1234.com {Henrietta Stauffer} {1918 Craig Creek Circle} Kema TX 77940 ford_mchenry@noway1234.com {Ford McHenry} {4703 Galloway Loop} Bourke TX 77807 guenther@noway1234.com {Barb Guenther} {10719 Musket Ball Circle} Wollongong TX 77588 hinkle@noway1234.com {Sue Hinkle} {3179 Lynx Way} {San Felipe} TX 77912 pluta@noway1234.com {Ward Pluta} {8901 West 90th Avenue} Centerville TX 77449 mahoney@noway1234.com {Tab Mahoney} {844 Thornton Street} Bendigo TX 77966 homer@noway1234.com {Homer Lanspa} {7017 Betula Circle} Broome TX 77718 chittum@noway1234.com {chittum Kreiling} {9785 Westview Circle} Brookshire TX 77738 sylvester@noway1234.com {Sylvester Pettinger} {10497 Hesterberg Road} Pattison TX 77966 wilber@noway1234.com {Wilber Schafer} {3408 Kingston Drive} Queenstown TX 77215 jewell441@noway1234.com {Ruth Jewell} {2948 Portage Glacier Road} {Mount Gambier} TX 77795 geiger@noway1234.com {Margaret Geiger} {5379 Marge Court} Albury TX 77939 krouse528@noway1234.com {Frances Krouse} {11599 East 21st Avenue} Eucla TX 77905 mitchel@noway1234.com {Jack Mitchel} {6544 Greenwood Street} {Coober Pedy} TX 77339 gregg_zappa@noway1234.com {Gregg Zappa} {956 Viola Circle} Bourke TX 77889 lomas@noway1234.com {Lomas Mercure} {11008 Teton Place} Ketherine TX 77426 robert215@noway1234.com {Robert Amos} {9275 Middlerock Road} Albury TX 77958 ira699@noway1234.com {Ira Horstman} {4802 Clarbert Court} Bathurst TX 77954 fox@noway1234.com {Norma Fox} {7960 Wren Lane} {Port Augusta} TX 77872 c_n@noway1234.com {C.N. Smith} {1754 Cadmus Court} Sunnyville TX 77773 buttermilk944@noway1234.com {Buttermilk Whitehead} {9089 Hill Drive} Monaville TX 77707 thom@noway1234.com {Wanda Thom} {2970 Kempton Hills Drive} Wollongong TX 77637 carolyn@noway1234.com {Carolyn Shaffer} {9866 Chad Street} Rockhampton TX 77621 serena@noway1234.com {Serena Reinhardt} {6501 Willow Lane} Kema TX 77035 gussie@noway1234.com {Gussie Riensche} {7879 Renee Circle} Wollongong TX 77068 rebecca@noway1234.com {Rebecca Riensche} {6709 Petrified Tree Circle} Galveston TX 77983 walker_clark@noway1234.com {Walker Clark} {3534 Christine Avenue} {San Antonio} TX 77614 gloria@noway1234.com {Gloria Jewell} {6913 West End Road} {Mount Gambier} TX 77990 lana@noway1234.com {Lana Douglas} {7890 Reindeer Circle} Wollongong TX 77173 wilbur@noway1234.com {Wilbur Raney} {11665 West 91st Avenue} Broome TX 77953 melvin@noway1234.com {Melvin Morris} {3080 West 72nd Avenue} Launceston TX 77611 gorton@noway1234.com {Davis Gorton} {1232 End Street} Independence TX 77857 janie@noway1234.com {Janie Hahn} {646 East 150th Avenue} {Broken Hill} TX 77080 nielsen@noway1234.com {Pearl Nielsen} {343 Peters Creek Road} {San Felipe} TX 77604 d_b@noway1234.com {D.B. Schmidt} {6836 Iris Way} {Mount Gambier} TX 77657 scharton@noway1234.com {Ruhie Scharton} {1528 Dartmouth Drive} {Broken Hill} TX 77810 bertha@noway1234.com {Bertha Shuey} {8556 Genora Street} {Padre Island} TX 77343 biddie@noway1234.com {Biddie Haughton} {5752 Toakoana Way} Queenstown TX 77553 rush@noway1234.com {Rush Polson} {2679 Bursiel Circle} {Mount Gambier} TX 77011 philippi@noway1234.com {Vina Philippi} {6987 West 15th Terrace} Pattison TX 77027 sleepy@noway1234.com {Sleepy McKinney} {1250 Industry Way} {Port Hedland} TX 77132 davison@noway1234.com {T. Davison} {7058 Island Drive} Sunnyville TX 77618 elise@noway1234.com {Elise Triplett} {8478 Midland Place} Waco TX 77603 anne@noway1234.com {Anne Durst} {5295 Seneca Circle} Albany TX 77068 anthony@noway1234.com {Anthony Einstein} {8085 Brenner Circle} Ketherine TX 77733 merton278@noway1234.com {Merton Person} {4595 Hancock Drive} Townsville TX 77514 d_b689@noway1234.com {D.B. Stitt} {5835 Enstrom Circle} {Alice Springs} TX 77987 lyn@noway1234.com {Lyn Shaffer} {3916 Tedrow Drive} {Port Augusta} TX 77570 ike@noway1234.com {Ike Belding} {602 Jennifer Ann Circle} {Mount Isa} TX 77737 desmond@noway1234.com {Desmond Sikyta} {10520 Violet Drive} {Broken Hill} TX 77119 mathis@noway1234.com {R. Mathis} {8388 Cirrus Way} {Alice Springs} TX 77483 xayaphonesongkham@noway1234.com {Facemire Xayaphonesongkham} {123 Stonegate Drive} Bourke TX 77349 ulysses@noway1234.com {Ulysses Faris} {5621 Great North Circle} {Port Hedland} TX 77367 mary843@noway1234.com {Mary Fleck} {4015 Fesler Road} Eucla TX 77651 rosevelt279@noway1234.com {Rosevelt Davis} {3224 Chalet Court} Newcastle TX 77125 sheryl_russell@noway1234.com {Sheryl Russell} {2285 Chrystal Island Drive} {Alice Springs} TX 77303 feurer415@noway1234.com {Homer Feurer} {7396 Kingfisher Drive} {Alice Springs} TX 77955 ferrel@noway1234.com {Ferrel Pella} {1986 Elegante Lane} Houston TX 77025 griffith@noway1234.com {Griffith Little} {11206 Thoreau Circle} Tamworth TX 77028 pat543@noway1234.com {Pat Suhr} {9343 Jerde Circle} {Mount Isa} TX 77513 earhart@noway1234.com {Marian Earhart} {7586 Teri Drive} Ketherine TX 77569 durman@noway1234.com {Woody Durman} {8312 West 61st Avenue} Star TX 77557 danielle@noway1234.com {Danielle Mayfield} {1485 Kenny Place} Mildura TX 77123 audess@noway1234.com {Audess Rothell} {10072 Karen Lane} Burnie TX 77576 carsel@noway1234.com {Carsel Kaufman} {2583 Mael Street} Austin TX 77890 prather@noway1234.com {Prather Pella} {3801 Pettis Road} {Mount Gambier} TX 77029 kent@noway1234.com {Ann Kent} {6710 Upper Terrace Street} Townsville TX 77062 dump@noway1234.com {Dump Butler} {3111 Roy Street} {Broken Hill} TX 77697 vanlaningham@noway1234.com {Hughart VanLaningham} {208 East 41st Avenue} Dallas TX 77101 winkle787@noway1234.com {Brown Winkle} {7834 Bonanza Drive} {Mount Gambier} TX 77500 hedgmond@noway1234.com {Hedgmond Morrow} {1892 Crawford Street} Nacogdoches TX 77203 phillis@noway1234.com {Phillis Robison} {8837 Stanford Circle} Dallas TX 77946 bartels@noway1234.com {Rosa Bartels} {11949 Kathy Place} Wollongong TX 77359 campbell@noway1234.com {Lovell Campbell} {10306 Irene Drive} Queenstown TX 77072 crane@noway1234.com {Mason Crane} {8955 Posiedon Drive} Austin TX 77060 somchay@noway1234.com {Mutt Somchay} {7624 Saint Gotthard Avenue} Katy TX 77134 rowland@noway1234.com {Taka Rowland} {5032 Morgan Loop} Pattison TX 77477 hendee@noway1234.com {Donna Hendee} {10915 Tanada Loop} Pattison TX 77834 bicknell@noway1234.com {Dr. Bicknell} {5480 Esquire Drive} Kema TX 77664 mcculla137@noway1234.com {Mahetable Mcculla} {1773 Jackson Drive} {Port Augusta} TX 77531 p@noway1234.com {P. Farley} {2543 Bobbie Circle} Tamworth TX 77945 h_j@noway1234.com {H.J. McDowell} {374 Redhawk Circle} Sunnyville TX 77468 h_a@noway1234.com {H.A Soumpholphakdy} {5461 Easy Street} {Alice Springs} TX 77270 boyce@noway1234.com {Boyce Urich} {8607 Juneau Street} Tamworth TX 77058 urban@noway1234.com {Urban Arnold} {1484 Boyd Street} Star TX 77035 urban368@noway1234.com {Urban Boardman} {2537 Lusardi Point Circle} Houston TX 77849 joyce640@noway1234.com {Joyce Dittmer} {785 Brookstone Loop} {Port Augusta} TX 77390 sweeney587@noway1234.com {Sweeney Suydan} {11924 Spruce Road} Austin TX 77674 logsdon735@noway1234.com {Butcher Logsdon} {2240 Green Garden Drive} Brookshire TX 77222 schermbeck@noway1234.com {Jesse Schermbeck} {10469 Von Scheben Drive} Rockhampton TX 77965 hester@noway1234.com {Doc Hester} {9361 Point Woronzof Drive} Cairns TX 77265 jewell911@noway1234.com {Lucy Jewell} {4565 Stumpy's Way} Star TX 77773 hargis@noway1234.com {Sherie Hargis} {6738 Market Street} Sunnyville TX 77743 o_b@noway1234.com {O.B. Graff} {4364 Birch Drive} Albany TX 77284 laug@noway1234.com {Jenevieve Laug} {5735 Fairweather Drive} Amarillo TX 77802 stover@noway1234.com {Verna Stover} {4861 Nancy Street} OOdnadatta TX 77840 ruthie@noway1234.com {Ruthie Harrington} {2624 Rockingham Circle} {Tennant Creek} TX 77023 norman@noway1234.com {Norman Harrington} {717 Ruby Drive} {Alice Springs} TX 77519 deane187@noway1234.com {Deane Piersol} {6357 Stormy Place} Monaville TX 77588 given_gibson@noway1234.com {Given Gibson} {4559 Northwoods Circle} {Tennant Creek} TX 77328 kaster@noway1234.com {Cantrell Kaster} {6748 Mockingbird Drive} Eucla TX 77825 rubt@noway1234.com {Rubt Doty} {2037 Sokolof Circle} Cairns TX 77348 jim57@noway1234.com {Jim Garris} {354 Alder Drive} {Padre Island} TX 77668 kay352@noway1234.com {Kay Ruby} {5093 Talon Circle} Cairns TX 77932 waring@noway1234.com {Marilynn Waring} {1886 Business Park Boulevard} Albury TX 77802 chatta@noway1234.com {Chatta Mueller} {11247 Bowdoin Circle} {Port Hedland} TX 77520 runion@noway1234.com {Runion Sayakhoummane} {9243 Kimball Street} Houston TX 77558 hollis_homer@noway1234.com {Hollis Homer} {76 Pleasure View Circle} Albury TX 77225 osterhoudt@noway1234.com {Desmond Osterhoudt} {3933 Lucille Lane} Sunnyville TX 77299 raney238@noway1234.com {Dawson Raney} {3936 Goose Lake Drive} {Tennant Creek} TX 77316 acree561@noway1234.com {Acree Rubin} {1070 Lochwood Circle} Bourke TX 77626 steel_soumpholphakdy@noway1234.com {Steel Soumpholphakdy} {6485 Bryn Mawr Court} Kema TX 77839 reed896@noway1234.com {D. Reed} {10245 Cranberry Street} {Mount Isa} TX 77234 feese@noway1234.com {Jackson Feese} {8312 East Tudor Road} OOdnadatta TX 77989 rex@noway1234.com {Rex Robertson} {9540 Flagship Circle} Rockhampton TX 77386 rauner444@noway1234.com {Rex Rauner} {605 Peg Street} Adelaide TX 77026 knock@noway1234.com {Stover Knock} {9079 Belsey Street} Pattison TX 77488 rene@noway1234.com {Rene Person} {4303 East 64th Avenue} Newcastle TX 77760 jobe@noway1234.com {Jobe Boyden} {911 Lindsey Drive} {Broken Hill} TX 77477 bozo@noway1234.com {Bozo Arnold} {5866 Chilton Drive} Star TX 77634 maryln_berg@noway1234.com {Maryln Berg} {5396 Gayot Drive} Houston TX 77804 w_williams@noway1234.com {W. Williams} {11705 Bliss Street} {Coober Pedy} TX 77568 donohue186@noway1234.com {Donohue Kage} {3541 Coachman Circle} Brookshire TX 77005 lock@noway1234.com {Samples Lock} {2682 Temple Drive} Galveston TX 77048 seward@noway1234.com {Triplett Seward} {4669 Elies Drive} OOdnadatta TX 77766 garland184@noway1234.com {Garland Frederick} {6643 Valley Street} Launceston TX 77040 walters@noway1234.com {Dr. Walters} {2660 Voyles Boulevard} Adelaide TX 77276 sheila343@noway1234.com {Sheila Boardman} {7087 Runamuck Place} Eucla TX 77222 conley@noway1234.com {Conley Geweke} {10175 Bay View Drive} Amarillo TX 77736 mctheny@noway1234.com {Mctheny McAlexander} {11627 Delridge Circle} Bendigo TX 77202 scott478@noway1234.com {Scott Graff} {1401 Bedford Street} {Coffs Harbour} TX 77057 bernadt@noway1234.com {Cecil Bernadt} {11108 Lesmer Court} Monaville TX 77235 terry@noway1234.com {Terry Dittmer} {6527 Last Frontier Drive} Bathurst TX 77416 sand610@noway1234.com {Woodrow Sand} {9626 Crystal Street} Brookshire TX 77006 colluzzi@noway1234.com {Colluzzi Kohout} {5926 San Clementson Court} Star TX 77366 cummins@noway1234.com {J.A. Cummins} {8225 Whispering Spruce Circle} Albury TX 77545 philpott544@noway1234.com {Verna Philpott} {2123 Moose Run Circle} Townsville TX 77934 mullins43@noway1234.com {Mullins Sova} {11432 Old Seward Highway} Dallas TX 77704 harland@noway1234.com {Harland Menard} {7914 Crow Berry Circle} Burnie TX 77880 doc871@noway1234.com {Doc. Davison} {9588 North Klevin Street} Adelaide TX 77330 blessing@noway1234.com {Wanda Blessing} {2184 Pioneer Drive} Centerville TX 77123 dieckmann894@noway1234.com {Griffith Dieckmann} {3022 Keyhole Circle} Ketherine TX 77585 dee435@noway1234.com {Dee Sorensen} {9852 Lesmer Court} {San Antonio} TX 77724 wink823@noway1234.com {Wink Kent} {865 Mount Mc Kinley View Drive} Katy TX 77970 lillie696@noway1234.com {Lillie Haney} {3477 Kirov Street} OOdnadatta TX 77473 nakamura@noway1234.com {Merle Nakamura} {589 West 82nd Avenue} Adelaide TX 77011 marmia@noway1234.com {Marmia Lohmeier} {5843 Eastwood Court} {San Felipe} TX 77030 stordahl78@noway1234.com {Mildred Stordahl} {6899 Columbine Street} Ketherine TX 77242 belle@noway1234.com {Belle Dittmer} {5065 Arlington Drive} {San Felipe} TX 77858 carmine115@noway1234.com {B. Carmine} {7765 Davidson Drive} Bourke TX 77327 oral_jewell@noway1234.com {Oral Jewell} {10185 Snowy Owl Circle} {Alice Springs} TX 77912 delong@noway1234.com {Jo DeLong} {9275 Tahoe Drive} Rockhampton TX 77310 morris_goings@noway1234.com {Morris Goings} {1739 Beaufort Street} Star TX 77122 mamie@noway1234.com {Mamie Hauptman} {1690 Ivan Drive} Austin TX 77584 schutz@noway1234.com {Cantrell Schutz} {2267 Ptarmigan Boulevard} Bourke TX 77813 xayaphonesongkham191@noway1234.com {Betty Xayaphonesongkham} {11623 Hogan Bay Circle} Launceston TX 77003 holmstrom535@noway1234.com {Osbome Holmstrom} {8123 Kilkerry Circle} Albury TX 77847 lavonne@noway1234.com {Lavonne Carter} {8321 Hill View Circle} {Tennant Creek} TX 77023 ensor@noway1234.com {Barb Ensor} {1606 Mark Circle} Katy TX 77509 bernell@noway1234.com {Bernell McCain} {9770 Big Horn Circle} Katy TX 77789 helm@noway1234.com {Sattler Helm} {7155 West 69th Avenue} Broome TX 77705 polson@noway1234.com {Levy Polson} {4872 Grape Place} {Tennant Creek} TX 77971 salisbury@noway1234.com {Salisbury Bevard} {4532 West 7th Avenue} {San Felipe} TX 77431 august@noway1234.com {August Allen} {8474 Ken Logan Circle} Kema TX 77681 emerald@noway1234.com {Emerald Mahoney} {368 Old Eagle River Road} Nacogdoches TX 77485 wiese@noway1234.com {Betty Wiese} {11300 Dylan Drive} Galveston TX 77922 vaden@noway1234.com {Vaden Reynolds} {6846 West 106th Avenue} Ketherine TX 77011 borrenpohl626@noway1234.com {Gerald Borrenpohl} {6963 Concord Hill Circle} {Padre Island} TX 77735 packwood379@noway1234.com {Osa Packwood} {8451 West Tree Drive} Bendigo TX 77433 donald@noway1234.com {Donald Ebeler} {4764 Ridge Park Drive} Sunnyville TX 77695 ofie@noway1234.com {Ofie Russell} {11438 Greenpoint Avenue} Dallas TX 77077 loretta_spence@noway1234.com {Loretta Spence} {1392 Lakeridge Court} Brookshire TX 77590 uke@noway1234.com {Uke Neill} {6522 Nordale Street} Independence TX 77686 orvis@noway1234.com {Orvis Thies} {4671 Lynkerry Circle} Nacogdoches TX 77526 gibbs634@noway1234.com {Rosanne Gibbs} {4926 South Salem Drive} Brookshire TX 77279 a_blythe@noway1234.com {A. Blythe} {1619 East Ship Creek Avenue} Newcastle TX 77246 lowell@noway1234.com {Lowell Schroder} {7696 Rya Street} Sunnyville TX 77699 mayfield@noway1234.com {Quenton Mayfield} {4744 East 101st Avenue} Queenstown TX 77321 sandra@noway1234.com {Sandra Sterlin} {885 Toakee Circle} Nacogdoches TX 77069 pooey@noway1234.com {Pooey Durst} {5372 Hubbard Place} Wollongong TX 77570 ocie91@noway1234.com {Ocie Wilhelm} {5244 Kluane Avenue} Katy TX 77145 hanshaw@noway1234.com {Hanshaw Lang} {11041 Ursa Minor Circle} Star TX 77491 arthur315@noway1234.com {Arthur Morrissey} {3688 Red Currant Circle} Bourke TX 77844 leo@noway1234.com {Leo Tucker} {11932 Gunnysack Mine Road} Star TX 77635 stinson@noway1234.com {Gladys Stinson} {2577 Sydney Park Circle} Burnie TX 77588 sarah901@noway1234.com {Sarah Robison} {2572 Washington Avenue} {San Felipe} TX 77063 donna135@noway1234.com {Donna Mann} {475 Catkin Circle} {Broken Hill} TX 77660 shartlet@noway1234.com {Shartlet Person} {948 Vallihi Circle} {Coffs Harbour} TX 77352 morris879@noway1234.com {Maw Morris} {7457 Newell Street} Albany TX 77673 ellen@noway1234.com {Ellen Horstman} {10105 Kilmory Circle} {Broken Hill} TX 77448 moon@noway1234.com {Moon Phommachack} {2341 Sunflower Street} Bendigo TX 77554 imogee@noway1234.com {Imogee Wall} {5309 Dolly Varden Circle} Wollongong TX 77311 stephens@noway1234.com {Nora Stephens} {1671 Knik Vista Street} Pattison TX 77420 pluta529@noway1234.com {Lowell Pluta} {2696 May Court Circle} Burnie TX 77810 e_p@noway1234.com {E.P. Oldfather} {5429 Nancy Circle} Amarillo TX 77555 rogers422@noway1234.com {Rogers Robinson} {11860 Canterbury Way} Hamilton TX 77957 mahler@noway1234.com {Alice Mahler} {8876 Tanaga Circle} Ketherine TX 77663 duncan210@noway1234.com {Duncan Sand} {5396 Ski Road} {Broken Hill} TX 77614 wilma@noway1234.com {Wilma Snow} {9123 Cleveland Avenue} Waco TX 77119 thomas336@noway1234.com {Thomas Sova} {5476 East 11th Avenue} Albany TX 77905 frame826@noway1234.com {Frame Harms} {3428 Hampton Drive} OOdnadatta TX 77593 moore982@noway1234.com {Moore Holmstrom} {9712 Riverside Drive} Wollongong TX 77187 betsy@noway1234.com {Betsy Doty} {6085 Cutty Sark Street} Brookshire TX 77317 barbara@noway1234.com {Barbara Sova} {11194 Westchester Circle} Nacogdoches TX 77395 wilbert@noway1234.com {Wilbert Stettenbenz} {4855 Linden Drive} Tamworth TX 77365 joyce287@noway1234.com {Joyce Pella} {6346 Bowery Lane} {Port Augusta} TX 77074 martha442@noway1234.com {Martha Humann} {9886 Labate Drive} {San Felipe} TX 77117 georgene215@noway1234.com {Georgene Bennett} {3798 West 41st Avenue} Cairns TX 77258 corine@noway1234.com {Corine Roland} {10353 Romanzof Circle} Adelaide TX 77937 pan514@noway1234.com {Genniene Pan} {8995 West 44th Place} Queenstown TX 77212 nixon519@noway1234.com {Moore Nixon} {3398 Neher Ridge Drive} Kema TX 77960 marilyn@noway1234.com {Marilyn Puchalla} {7420 Tina Street} Galveston TX 77131 dane@noway1234.com {Dane Suhr} {1024 Dorinda Drive} Hamilton TX 77583 lawrence854@noway1234.com {Lawrence Bogle} {11131 Waterfall Drive} Dallas TX 77336 willard@noway1234.com {Willard Horner} {11921 Lila's Place} {Mount Gambier} TX 77576 lohmeier@noway1234.com {Ernst Lohmeier} {10234 Kensington Circle} Bendigo TX 77782 scharton42@noway1234.com {B. Scharton} {9421 Hulse Circle} {Broken Hill} TX 77686 pettinger@noway1234.com {Evert Pettinger} {1257 Aspen Ridge Circle} Independence TX 77139 feese287@noway1234.com {Ann Feese} {5862 Terrace Street} Monaville TX 77998 hughart925@noway1234.com {Hughart Colson} {5309 Brook Hill Circle} Pattison TX 77622 mccain@noway1234.com {Ruth McCain} {1837 West Street} Broome TX 77874 janie_curry@noway1234.com {Janie Curry} {9962 Domain Lane} Eucla TX 77002 leroy26@noway1234.com {Leroy McKinney} {11340 Birch Avenue} Monaville TX 77342 sova173@noway1234.com {Moses Sova} {10593 Outlook Circle} {Coober Pedy} TX 77663 billy@noway1234.com {Billy Leahy} {7865 Kadow Drive} Albany TX 77726 ann338@noway1234.com {Ann Grove} {2157 Glacier Loop Road} {Coober Pedy} TX 77233 mahoney924@noway1234.com {Butcher Mahoney} {2676 Roosevelt Drive} Nacogdoches TX 77039 lawrence746@noway1234.com {Betty Lawrence} {6666 Bietinger Drive} Wollongong TX 77385 n_l@noway1234.com {N.L. Rothell} {9109 East 95th Avenue} {San Antonio} TX 77680 ron@noway1234.com {Ron Phommachack} {7800 East 40th Court} {Port Hedland} TX 77911 rauner18@noway1234.com {Friend Rauner} {8481 Western Drive} Nacogdoches TX 77222 monkey_buster@noway1234.com {Monkey Buster Rauner} {3470 Mere Circle} Launceston TX 77180 morrissey541@noway1234.com {Dennis Morrissey} {4751 Windflower Street} Katy TX 77745 horner@noway1234.com {Boyd Horner} {7630 Ivy Drive} Amarillo TX 77065 j_v_ruter@noway1234.com {J.V. Ruter} {10104 Red Currant Circle} {Mount Gambier} TX 77451 michelle@noway1234.com {Michelle Winkle} {6790 Maho Circle} Pattison TX 77430 mutt_scharton@noway1234.com {Mutt Scharton} {6042 Discovery Court} Albany TX 77622 anna49@noway1234.com {Anna Teske} {5694 Orion Circle} Bourke TX 77805 r_gibson@noway1234.com {R. Gibson} {10072 Frances Elaine Circle} Nacogdoches TX 77895 west259@noway1234.com {Marian West} {10273 Maggies Place} Hamilton TX 77585 person288@noway1234.com {Ferrel Person} {6483 Maria Court} OOdnadatta TX 77038 wheeler391@noway1234.com {frame Wheeler} {9289 Birch Trail Circle} {Padre Island} TX 77806 truman@noway1234.com {Truman Dirksen} {5643 Hayes Street} Wollongong TX 77599 hamer571@noway1234.com {Adkins Hamer} {7464 Campbell Airstrip Road} Wollongong TX 77540 bezel@noway1234.com {Bezel Vrbka} {3046 East Bluff Drive} Centerville TX 77156 earl71@noway1234.com {Earl Jewell} {4420 Skyhaven Circle} Dallas TX 77847 kellis@noway1234.com {Kellis Putnam} {3539 Camrose Drive} {Coober Pedy} TX 77967 maxine705@noway1234.com {Maxine Crane} {10512 Dalzell Circle} Nacogdoches TX 77009 meister@noway1234.com {N.L. Meister} {11328 Westchester Circle} Sunnyville TX 77870 sorensen141@noway1234.com {Butcher Sorensen} {8521 Rappe Court} {Port Hedland} TX 77499 okay@noway1234.com {Okay Hamilton} {5739 Christensen Drive} Mildura TX 77801 aust@noway1234.com {Blanch Aust} {3170 Rebano Drive} Star TX 77666 odbert@noway1234.com {Odbert Mapes} {5999 Snow Bear Drive} Launceston TX 77681 wellensiek@noway1234.com {Irene Wellensiek} {11150 Running Brook Circle} Hamilton TX 77157 otto@noway1234.com {Otto Oldfather} {11288 Athanasius Street} Waco TX 77524 lanspa@noway1234.com {Marjorie Lanspa} {4404 Cantonment Court} Newcastle TX 77614 marple632@noway1234.com {Marple Sherman} {8495 Draper Drive} Newcastle TX 77130 troeger653@noway1234.com {Charlotte Troeger} {392 Scarborough Drive} Waco TX 77024 hardin@noway1234.com {Dorsey Hardin} {3021 Little Creek Drive} Townsville TX 77546 pearl_mcpherrin@noway1234.com {Pearl McPherrin} {1630 Woodhaven Circle} Tamworth TX 77807 kerchovel983@noway1234.com {Kerchovel Kelley} {1293 Tulugak Circle} Rockhampton TX 77083 dana@noway1234.com {Dana Zappa} {2098 Carolyn Circle} Cairns TX 77644 wilson796@noway1234.com {Wilson Gillette} {5404 Topaz Avenue} {San Antonio} TX 77999 vale@noway1234.com {Vale Repp} {6516 Heritage Center Drive} {Alice Springs} TX 77366 irene823@noway1234.com {Irene Miesbach} {7263 Chugach Park Drive} Centerville TX 77266 heideman@noway1234.com {Tammy Heideman} {7378 West 40th Avenue} {Mount Gambier} TX 77671 kevin@noway1234.com {Kevin McDonald} {989 Ginami Circle} OOdnadatta TX 77086 wolken@noway1234.com {Carlos Wolken} {8461 Willow Street} Hamilton TX 77211 jewell732@noway1234.com {prin Jewell} {11039 Tahoe Drive} Queenstown TX 77619 luther@noway1234.com {Luther Buces} {6832 Kalgin Street} Bourke TX 77289 tagart@noway1234.com {Baum Tagart} {8404 West 36th Avenue} Pattison TX 77200 lee_nielsen@noway1234.com {Lee Nielsen} {1185 Stargate Circle} {Port Augusta} TX 77642 herlman@noway1234.com {Herlman Dillaplain} {4971 Saint Gotthard Avenue} {Padre Island} TX 77325 schmidt87@noway1234.com {Wanda Schmidt} {4526 Westview Circle} Albany TX 77614 dell@noway1234.com {Dell Zager} {7081 Tyl's Trail} Austin TX 77510 fricke@noway1234.com {Phillips Fricke} {2998 Smith Drive} {Coffs Harbour} TX 77721 wright@noway1234.com {Cantrell Wright} {10715 Golden View Drive} Burnie TX 77670 james220@noway1234.com {James Hervey} {6102 Province Circle} Houston TX 77241 hamilton@noway1234.com {Haskel Hamilton} {8649 O Street} {Mount Gambier} TX 77743 leahy@noway1234.com {Leona Leahy} {8725 Trinity Circle} Mildura TX 77701 sonja@noway1234.com {Sonja Glasson} {9332 West 34th Avenue} Albury TX 77342 dimple790@noway1234.com {Dimple Ellis} {7917 Westwind Court} Austin TX 77253 wesley@noway1234.com {Wesley Dahl} {8449 King Street} Galveston TX 77502 dorsel@noway1234.com {Dorsel Oltman} {3079 Glacier Pine Street} Amarillo TX 77862 pettinger860@noway1234.com {Earl Pettinger} {3048 Mary Avenue} Townsville TX 77136 peters@noway1234.com {Patrica Peters} {2751 Birdsong Drive} Star TX 77805 vonnie@noway1234.com {Vonnie Faris} {445 Kumquat Place} OOdnadatta TX 77558 sebert@noway1234.com {Sebert Kuhl} {8524 Falling Water Circle} Adelaide TX 77001 colson306@noway1234.com {Frame Colson} {9094 Buskin Circle} {Tennant Creek} TX 77631 mary335@noway1234.com {Mary Goers} {715 Independence Drive} Rockhampton TX 77700 kelly162@noway1234.com {Kelly Curry} {9341 Kamishak Bay Circle} {Port Augusta} TX 77277 thelma678@noway1234.com {Thelma Davison} {10563 D Street} {Port Augusta} TX 77006 schafer@noway1234.com {Ruthie Schafer} {9331 Country Woods Court} {Coffs Harbour} TX 77600 joe373@noway1234.com {Joe Hahn} {1760 Lupine Drive} Independence TX 77848 mell@noway1234.com {Mell Lanspa} {1135 Flyway Avenue} Star TX 77883 saunders313@noway1234.com {Sherie Saunders} {6987 Seacloud Circle} Wollongong TX 77174 sayakhoummane@noway1234.com {J. Sayakhoummane} {5310 Twilight Lane} Galveston TX 77103 gorton698@noway1234.com {J. Gorton} {4833 Markstrom Drive} Dallas TX 77797 erma@noway1234.com {Erma Ellis} {10492 Stormy Place} Mildura TX 77791 tanner@noway1234.com {Tanner Sorensen} {1294 Tonga Drive} Independence TX 77978 farley262@noway1234.com {Delsie Farley} {2006 Hazen Circle} {San Felipe} TX 77946 h_a_wherry@noway1234.com {H.A Wherry} {6236 Foster Estate Drive} Tamworth TX 77652 hillyer@noway1234.com {Wibb Hillyer} {9460 Steamboat Drive} Waco TX 77918 j_r_j@noway1234.com {J.R.J. Ham} {7118 New Seward Highway} {Mount Isa} TX 77803 viola_suydan@noway1234.com {Viola Suydan} {9444 Hidden Haven Drive} {Alice Springs} TX 77049 hazelton107@noway1234.com {Hazelton Mitchel} {447 Neher Ridge Drive} Tamworth TX 77025 myron@noway1234.com {Myron Schmidt} {7710 Buena Vista Drive} Ketherine TX 77068 lytal@noway1234.com {Lytal Conradt} {4658 Trena Street} Albany TX 77623 carrie@noway1234.com {Carrie Kreiling} {7699 Cobblecreek Circle} Queenstown TX 77081 harlan874@noway1234.com {Harlan Badertscher} {11889 Gull Avenue} Kema TX 77513 douglas@noway1234.com {Spencer Douglas} {1795 Oak Drive} Wollongong TX 77432 ed@noway1234.com {Ed Grove} {4361 Hollow Street} Bourke TX 77839 spier@noway1234.com {D Spier} {11781 North Valley Road} Houston TX 77316 rosanne_dieckhoff@noway1234.com {Rosanne Dieckhoff} {286 River Park Drive} Broome TX 77189 oat@noway1234.com {Oat Phommachack} {4342 Cape Circle} Cairns TX 77379 joanne@noway1234.com {Joanne Knock} {855 Rainy Place} Houston TX 77410 e_p79@noway1234.com {E.P. Harrington} {10386 Bethany Circle} Brookshire TX 77143 pauline743@noway1234.com {Pauline Robinson} {3910 Hiland Road} {Coober Pedy} TX 77590 eleanor@noway1234.com {Eleanor Hagelback} {10703 Sparks Avenue} Launceston TX 77500 kaufman@noway1234.com {Jess Kaufman} {2219 Babrof Drive} Adelaide TX 77174 rohmeyer@noway1234.com {Arch Rohmeyer} {7623 Dicks Street} Amarillo TX 77578 eleanor_vance@noway1234.com {Eleanor Vance} {7211 Kallander Avenue} Centerville TX 77538 lenora166@noway1234.com {Lenora Driskell} {1079 Hunters Drive} Launceston TX 77669 nealie720@noway1234.com {Nealie Reynolds} {8502 Michigan Avenue} Independence TX 77391 troeger100@noway1234.com {Nina Troeger} {922 Olympic Street} {Alice Springs} TX 77011 elwood@noway1234.com {Elwood Gregory} {11737 Biscayne Circle} Burnie TX 77243 rexroth@noway1234.com {Dawson Rexroth} {3770 Landau Circle} Bendigo TX 77177 m_b@noway1234.com {M.B. Leuenberger} {5390 Reliance Drive} {Tennant Creek} TX 77018 davis939@noway1234.com {Davis Lanspa} {1053 Matthews Drive} Amarillo TX 77578 stephane@noway1234.com {Stephane Leuenberger} {700 Deer Park Circle} Monaville TX 77560 funkhouser@noway1234.com {Dawn Funkhouser} {62 Kayak Drive} {San Felipe} TX 77529 weakland@noway1234.com {Scottie Weakland} {1062 Dunkirk Drive} Austin TX 77059 thurber401@noway1234.com {Oat Thurber} {1211 Eris Drive} {San Felipe} TX 77444 koehler@noway1234.com {Dorthea Koehler} {940 Salem Street} {Broken Hill} TX 77714 dumitru495@noway1234.com {A. Dumitru} {8531 Delak's Way} Galveston TX 77395 minnie279@noway1234.com {Minnie Lock} {6844 West Skyline Drive} Austin TX 77075 prushia@noway1234.com {Prushia Kehlenbeck} {3072 Hidden Hill Court} {Mount Gambier} TX 77964 a42@noway1234.com {A. Berner} {11220 Carla Street} Rockhampton TX 77050 buddy_boy476@noway1234.com {Buddy Boy Rauner} {278 Lazy Street} {Port Hedland} TX 77181 hazen507@noway1234.com {Alta Hazen} {7833 Dorchester Street} Nacogdoches TX 77542 belle667@noway1234.com {Belle Reed} {8745 East 48th Avenue} {Port Augusta} TX 77684 elise685@noway1234.com {Elise Weakland} {885 East 68th Avenue} Austin TX 77213 marple_mccoy@noway1234.com {Marple McCoy} {536 Campbell Creek Road} Wollongong TX 77107 oren@noway1234.com {Oren Hazen} {7187 West 123rd Avenue} Austin TX 77760 dollarhide@noway1234.com {Given Dollarhide} {6274 Sambar Loop} Ketherine TX 77237 hinkle78@noway1234.com {Mary Hinkle} {2699 Country Meadow Circle} Amarillo TX 77446 louise@noway1234.com {Louise Tagart} {10554 East 44th Court} Newcastle TX 77635 hanau@noway1234.com {Leigh Hanau} {9114 Terrace Drive} {Alice Springs} TX 77120 jean_pan@noway1234.com {Jean Pan} {8528 Aspen Road} {Padre Island} TX 77902 smith@noway1234.com {Smith Uhrmacher} {11054 Little Bend Circle} Launceston TX 77146 hamm@noway1234.com {Melvern Hamm} {1607 Jaguar Circle} Amarillo TX 77737 wilhelm88@noway1234.com {Doris Wilhelm} {1980 Live Alder Avenue} {Coober Pedy} TX 77205 speckmann736@noway1234.com {Charles Speckmann} {8421 Bristol Drive} Monaville TX 77506 lisa@noway1234.com {Lisa Heideman} {2314 Eris Drive} Bathurst TX 77296 g_w@noway1234.com {G.W. Watteyne} {11081 Saint James Circle} Wollongong TX 77452 bingley@noway1234.com {Bingley Triplett} {2172 Diana Circle} OOdnadatta TX 77778 hamric@noway1234.com {Hamric Rader} {10345 Gardner Street} Galveston TX 77318 bartels962@noway1234.com {Buddy Boy Bartels} {10130 Hall Circle} Centerville TX 77682 n@noway1234.com {N. Armknecht} {3152 Park Circle} Dallas TX 77741 curt@noway1234.com {Curt Grof} {9089 Flagship Circle} Hamilton TX 77255 rauner272@noway1234.com {Michael Rauner} {761 Whist Road} OOdnadatta TX 77626 phillips_hackbart@noway1234.com {Phillips Hackbart} {322 Pawn Place} {Coober Pedy} TX 77187 gerry@noway1234.com {Gerry Carman} {6499 Ray Street} Adelaide TX 77533 brammann@noway1234.com {Irene Brammann} {2065 Raymond Drive} Brookshire TX 77971 johnson495@noway1234.com {Barbara Johnson} {3901 Kvichak Circle} Waco TX 77067 jeanne@noway1234.com {Jeanne Quinn} {5581 Gina Circle} Ketherine TX 77550 keedy@noway1234.com {Leon Keedy} {7637 Sinner Street} Burnie TX 77733 kallai@noway1234.com {Kallai Kage} {10871 Barbara Street} Wollongong TX 77598 randy_pierce@noway1234.com {Randy Pierce} {6167 Yellow Leaf Circle} Monaville TX 77134 delano@noway1234.com {Delano Reed} {178 Sushana Circle} OOdnadatta TX 77972 taylor826@noway1234.com {Lucy Taylor} {1882 Timothy Street} {Mount Isa} TX 77249 norris@noway1234.com {Norris Monkeyballs} {6183 Draco Drive} Tamworth TX 77600 claudia@noway1234.com {Claudia Kaufman} {10672 Henson Drive} Bendigo TX 77094 weible@noway1234.com {Emza Weible} {1246 Elmhurst Circle} Burnie TX 77373 anderson@noway1234.com {Dorsey Anderson} {1959 Heide Drive} Monaville TX 77357 conner@noway1234.com {Conner Phommachan} {3679 Dunbar Lane} {Coober Pedy} TX 77375 rita@noway1234.com {Rita Bray} {6840 Round Tree Drive} {Port Augusta} TX 77623 chritton@noway1234.com {Stanley Chritton} {10752 Outcrop Lane} OOdnadatta TX 77537 moore129@noway1234.com {Moore Anderson} {8898 Gunwale Circle} {Coober Pedy} TX 77843 kermit@noway1234.com {Kermit McCoy} {11241 Sonia Street} Newcastle TX 77521 packett@noway1234.com {Nina Packett} {8387 Trail's End Road} Nacogdoches TX 77600 wall278@noway1234.com {Adkins Wall} {10977 Whispering Spruce Drive} Launceston TX 77743 bartels107@noway1234.com {Underwood Bartels} {2795 Galatea Drive} {San Antonio} TX 77645 quinn944@noway1234.com {Gill Quinn} {3493 Tangle Court} Queenstown TX 77525 finfrock879@noway1234.com {Alice Finfrock} {10844 Terry Street} Monaville TX 77791 ruby808@noway1234.com {Ruby McKinney} {7879 Hidden Hill Court} {Port Hedland} TX 77849 herman@noway1234.com {Nutter Herman} {7371 Fireball Street} Amarillo TX 77957 l_s@noway1234.com {L.S. Witte} {6850 Mc Henry Circle} Bathurst TX 77746 ted@noway1234.com {Ted Bossung} {8679 Kayak Drive} Nacogdoches TX 77501 polson654@noway1234.com {Ramsey Polson} {7640 Mile Hi Way} {San Antonio} TX 77022 junior@noway1234.com {Junior Cary} {7406 Red Talon Circle} Rockhampton TX 77911 c_a@noway1234.com {C.A. Aust} {6477 West 36th Avenue} Adelaide TX 77713 groves@noway1234.com {Groves Sterling} {306 Becky Lane} Tamworth TX 77556 roberts@noway1234.com {Aldridge Roberts} {4262 Barclay Drive} Bathurst TX 77072 bevard@noway1234.com {Laxton Bevard} {6866 West 9th Avenue} Tamworth TX 77160 jessie_davison@noway1234.com {Jessie Davison} {8573 Barclay Drive} {Padre Island} TX 77357 elna@noway1234.com {Elna Speckmann} {792 Tudortop Circle} Amarillo TX 77562 evette633@noway1234.com {Evette Ford} {7756 West 38th Avenue} Mildura TX 77335 carolyn_reiber@noway1234.com {Carolyn Reiber} {5163 Jerome Street} Mildura TX 77359 imogene_quinn@noway1234.com {Imogene Quinn} {11531 Cherni Circle} Bendigo TX 77424 galford@noway1234.com {Galford Blythe} {3726 Helvetia Drive} Bathurst TX 77918 dwayne@noway1234.com {Dwayne Bernadt} {4080 West 73rd Avenue} Ketherine TX 77047 flame_schafer@noway1234.com {Flame Schafer} {4412 Industry Way} {Alice Springs} TX 77202 craig107@noway1234.com {Sheila Craig} {9594 Loretta Place} Independence TX 77914 clarence@noway1234.com {Clarence Goings} {11544 Seward Highway} Galveston TX 77765 rhetta@noway1234.com {Rhetta Brock} {3523 Galloway Loop} Waco TX 77563 husing@noway1234.com {Denny Husing} {4408 West 37th Court} Nacogdoches TX 77745 flora@noway1234.com {Flora West} {1292 Ril Way} Newcastle TX 77890 farrel@noway1234.com {Farrel Little} {871 Agattu Circle} Albury TX 77861 hamrick_kage@noway1234.com {Hamrick Kage} {8491 Upper Canyon Drive} {Mount Gambier} TX 77004 harvey_glasson@noway1234.com {Harvey Glasson} {10172 Rankin Road} Newcastle TX 77820 dillaplain794@noway1234.com {J.A. Dillaplain} {5126 Elmhurst Circle} {Coffs Harbour} TX 77511 lawrence614@noway1234.com {prin Lawrence} {7347 Old Eagle River Road} {Padre Island} TX 77783 virginia98@noway1234.com {Virginia Somchay} {5711 Colleen Circle} Ketherine TX 77134 stanley_ray@noway1234.com {Stanley Ray} {5833 Park Street} Launceston TX 77347 holben@noway1234.com {Bus Holben} {1860 Copper Drive} Pattison TX 77617 vertie@noway1234.com {Vertie Thompson} {5711 Mast Circle} Rockhampton TX 77420 topp808@noway1234.com {Ward Topp} {11674 Standish Street} Pattison TX 77884 thurman@noway1234.com {Thurman Curry} {11608 Birch Knoll Loop} Sunnyville TX 77034 rae@noway1234.com {Rae Schweppe} {894 Kantishna Drive} {Broken Hill} TX 77622 monk@noway1234.com {Monk Hothan} {4028 San Fernando Street} Albany TX 77294 brian_mccoy@noway1234.com {Brian Mccoy} {1631 Dorian Drive} Albany TX 77142 tyburtis_hagelback@noway1234.com {Tyburtis Hagelback} {123 Trail's End Road} Bourke TX 77110 mary_naber@noway1234.com {Mary Naber} {7308 Christine Avenue} Rockhampton TX 77674 donald447@noway1234.com {Donald Zappa} {10516 Caress Circle} Katy TX 77855 arial@noway1234.com {Arial Thurber} {3496 Eastwind Drive} Adelaide TX 77069 jim240@noway1234.com {Jim Rowland} {1785 Mirror Drive} Houston TX 77222 gary662@noway1234.com {Gary Hahn} {9955 Maclaren Street} Wollongong TX 77321 baird@noway1234.com {Estella Baird} {8515 Shadow Lane} Queenstown TX 77917 bomar@noway1234.com {Rona Bomar} {6590 Virgin Creek Road} Adelaide TX 77609 schacht@noway1234.com {Doc. Schacht} {9928 Davis Court} Albury TX 77956 lakie@noway1234.com {Lakie Laue} {3650 Bulgaria Drive} Launceston TX 77064 marguerite@noway1234.com {Marguerite Fankhauser} {1677 Robin Street} {Alice Springs} TX 77813 cummins92@noway1234.com {Gibson Cummins} {9473 Patro Street} Newcastle TX 77584 thomas480@noway1234.com {Thomas Kroll} {7640 Ellen Avenue} Eucla TX 77619 neelie@noway1234.com {Neelie Brock} {4462 Casper Court} {Coober Pedy} TX 77486 patty@noway1234.com {Patty McAlexander} {6297 Trail Drive} OOdnadatta TX 77587 hugh@noway1234.com {Hugh Lyons} {5541 Ptarmigan Boulevard} Waco TX 77767 charles630@noway1234.com {Charles Hauptman} {75 Princess Circle} Launceston TX 77895 taylor3@noway1234.com {Hedgmond Taylor} {6035 Garnett Court} Bendigo TX 77686 rothell499@noway1234.com {Joyce Rothell} {3415 Patterson Street} {Padre Island} TX 77811 diana@noway1234.com {Diana Harrah} {8292 Ginami Street} Brookshire TX 77299 defreece@noway1234.com {Nealie DeFreece} {8489 Blackburn Court} Broome TX 77443 bischoff@noway1234.com {Hickman Bischoff} {7259 Reef Place} Houston TX 77335 browning517@noway1234.com {Browning Bomar} {2585 Lamb Drive} Austin TX 77080 baird458@noway1234.com {Osa Baird} {2741 Norman Street} Queenstown TX 77272 scott358@noway1234.com {Betty Scott} {1505 West 106th Avenue} Brookshire TX 77733 okey@noway1234.com {Okey Fankhauser} {11700 Ramsey Road} Cairns TX 77584 dana296@noway1234.com {Dana Suydan} {11519 Camelot Drive} Adelaide TX 77028 bright@noway1234.com {Bright Rickman} {3251 Kalmia Drive} Amarillo TX 77133 fleet@noway1234.com {Fleet Somchay} {3071 Medfra Street} {Broken Hill} TX 77425 burton_eltiste@noway1234.com {Burton Eltiste} {10319 Brandywine Street} Tamworth TX 77246 penny241@noway1234.com {Penny Mcalexander} {7808 Opal Drive} Galveston TX 77777 flame587@noway1234.com {Flame Murphy} {8683 Nickell Circle} Albury TX 77199 hamer477@noway1234.com {Laug Hamer} {6040 Taos Road} {San Felipe} TX 77987 j_r_gorton@noway1234.com {J.R. Gorton} {5935 Lone Tree Circle} Kema TX 77855 borrenphol432@noway1234.com {Triplett Borrenphol} {4492 Donner Drive} Katy TX 77009 bill@noway1234.com {Bill Seawall} {9378 Sultana Court} Star TX 77083 jessie73@noway1234.com {Jessie Floerke} {10259 Monroe Avenue} Rockhampton TX 77673 tagart878@noway1234.com {Carla Tagart} {5172 Cascade Circle} {San Felipe} TX 77964 dell_triplett@noway1234.com {Dell Triplett} {5283 Lucy Street} Bathurst TX 77492 odbert_greeb@noway1234.com {Odbert Greeb} {5317 Bluegrass Circle} Star TX 77917 kerns@noway1234.com {Kerns Spence} {4829 Lakeside Drive} {Mount Isa} TX 77456 hermsmeier@noway1234.com {Orbit Hermsmeier} {8506 Flamingo Drive} {Mount Isa} TX 77150 katherine@noway1234.com {Katherine Betzelberger} {5431 Baywind Circle} {Port Augusta} TX 77188 gill538@noway1234.com {Gill Floerke} {11625 Virda Lee Circle} Bendigo TX 77978 olive@noway1234.com {Olive Funkhouser} {1660 Rebel Ridge Drive} {San Felipe} TX 77082 nettie@noway1234.com {Nettie Jewell} {2740 Leeper Circle} Galveston TX 77972 colombia103@noway1234.com {Colombia Murphy} {6159 West 25th Avenue} Launceston TX 77315 rodney@noway1234.com {Rodney Kehlenbeck} {11332 Cremins Lane} Sunnyville TX 77048 anderson776@noway1234.com {Dunlap Anderson} {732 Wills Way} {Mount Gambier} TX 77217 dallas@noway1234.com {Dallas Huff} {1503 River Heights Loop} {Alice Springs} TX 77588 phillips853@noway1234.com {Dorsel Phillips} {4606 Northfleet Drive} Hamilton TX 77434 hamer724@noway1234.com {Otch Hamer} {5945 Commerce Street} Albany TX 77003 hamilton336@noway1234.com {Ahtelene Hamilton} {7676 Lakeview Drive} Launceston TX 77997 russell310@noway1234.com {Russell Taylor} {10576 Cliffside Drive} Brookshire TX 77271 margaret537@noway1234.com {Margaret McAlexander} {6907 Camai Circle} Bourke TX 77951 jacobsen@noway1234.com {Dump Jacobsen} {5402 Lipscomb Street} Burnie TX 77760 rau994@noway1234.com {Nora Rau} {6548 Cutty Sark Street} Rockhampton TX 77185 scherrer570@noway1234.com {Hickman Scherrer} {3469 Mc Gowan Street} Wollongong TX 77503 lohmeier28@noway1234.com {Pat Lohmeier} {3312 Jayhawk Drive} Wollongong TX 77617 carter@noway1234.com {D.B. Carter} {8516 Nigh Road} Katy TX 77934 ruter991@noway1234.com {Olive Ruter} {7118 Augustine Drive} {Port Augusta} TX 77466 edith@noway1234.com {Edith Finke} {675 Ephreta Court} Galveston TX 77330 searcey@noway1234.com {Hedgmond Searcey} {11633 Girdwood Place} {Broken Hill} TX 77423 hallie@noway1234.com {Hallie Zager} {8788 List Circle} Dallas TX 77028 kuhl@noway1234.com {Philip Kuhl} {4252 West 41st Avenue} Eucla TX 77628 doc424@noway1234.com {Doc Clark} {4926 Inlet Vista Drive} {Padre Island} TX 77804 laxton627@noway1234.com {Laxton Winkle} {831 Nystrom Street} Brookshire TX 77765 sonny_gordon@noway1234.com {Sonny Gordon} {3801 Hillbrook Circle} Cairns TX 77510 dills@noway1234.com {mollohan Dills} {1562 Spruce Meadows Loop} Brookshire TX 77605 jess599@noway1234.com {Jess Pella} {6378 Shadowy Spruce Drive} Albury TX 77667 b717@noway1234.com {B. Buethe} {7170 Michael Drive} Burnie TX 77073 lempka@noway1234.com {Dr. Lempka} {853 Mary Circle} Newcastle TX 77904 oscar_mcnergney@noway1234.com {Oscar McNergney} {7496 Hiland Road} Monaville TX 77868 husing291@noway1234.com {Ray Husing} {11182 Mammoth Court} Albany TX 77704 fox531@noway1234.com {Curt Fox} {1785 Klondike Street} Dallas TX 77673 strossie_lohmeier@noway1234.com {Strossie Lohmeier} {9276 Jewel Terrace Street} Broome TX 77206 marmia138@noway1234.com {Marmia Jewell} {11626 Plumas Circle} {Alice Springs} TX 77692 leroy64@noway1234.com {Leroy Pella} {5868 Cange Street} OOdnadatta TX 77299 schmiegelow@noway1234.com {J. Schmiegelow} {7320 Anthem Place} Eucla TX 77559 marvin@noway1234.com {Marvin Miner} {10600 Concord Lane} Amarillo TX 77104 baucke@noway1234.com {Rita Baucke} {7551 Candy Place} Galveston TX 77076 bryce@noway1234.com {Bryce Noudaranouvong} {2872 Wandering Lane} {San Antonio} TX 77684 bohung@noway1234.com {Donald Bohung} {788 Happy Lane} Independence TX 77287 bates37@noway1234.com {Trossie Bates} {3603 East 36th Avenue} Monaville TX 77494 clayton790@noway1234.com {Clayton Rohmeyer} {2524 Feodosia Drive} {Coober Pedy} TX 77506 w_a@noway1234.com {W.A. Hester} {9002 Short Shot Way} {Coffs Harbour} TX 77800 cathy@noway1234.com {Cathy Ellis} {2822 Irene Way} {Padre Island} TX 77212 mueller@noway1234.com {Otch Mueller} {2421 Landau Circle} {San Felipe} TX 77704 mercil@noway1234.com {Mercil Hays} {8022 Leopard Circle} Galveston TX 77864 steph@noway1234.com {Steph Bartels} {1996 Dunbar Lane} {San Felipe} TX 77702 paul_neemann@noway1234.com {Paul Neemann} {4291 Devils End Drive} {Port Hedland} TX 77854 driskell807@noway1234.com {Phem Driskell} {4975 Lower Devils End Drive} {Port Augusta} TX 77812 ovid417@noway1234.com {Ovid Olmsted} {2252 Shaun Circle} {Alice Springs} TX 77665 notinaham@noway1234.com {Notinaham Badellino} {11542 Amanda Circle} Houston TX 77707 henrichs926@noway1234.com {Hugh Henrichs} {6138 Hartley Street} Ketherine TX 77981 diaz@noway1234.com {Marple Diaz} {1169 Lilac Circle} {Mount Gambier} TX 77324 mooney56@noway1234.com {Hamilton Mooney} {3195 Tetlin Street} {San Felipe} TX 77069 smithers@noway1234.com {Tenney Smithers} {10950 Telequana Circle} Pattison TX 77239 teresa@noway1234.com {Teresa Purdy} {1270 Clare Circle} Star TX 77514 carrol@noway1234.com {Carrol Rathe} {5782 Guam Avenue} Austin TX 77544 william@noway1234.com {William Colson} {5418 Rainy Place} {Mount Isa} TX 77314 chuck234@noway1234.com {Chuck Bates} {8780 Delong Landing Circle} {Port Augusta} TX 77416 scholl741@noway1234.com {J. Scholl} {878 Tool Street} Bourke TX 77969 jerome@noway1234.com {Jerome Mattheis} {11453 Baugh Circle} {Alice Springs} TX 77467 olmsted218@noway1234.com {Ida Olmsted} {1294 Spectrum Circle} Albury TX 77240 coby@noway1234.com {Coby Winkle} {4306 Doe Lane} {Mount Isa} TX 77966 sullivan@noway1234.com {Evayline Sullivan} {1440 Lassen Circle} Tamworth TX 77993 boyden@noway1234.com {Sattler Boyden} {3968 Electric Street} Hamilton TX 77180 watteyne@noway1234.com {Alta Watteyne} {11222 Rock Ptarmigan Street} Tamworth TX 77816 molly@noway1234.com {Molly Goosman} {9069 East 8th Avenue} Wollongong TX 77128 britt652@noway1234.com {Emma Britt} {9859 Industry Way} Adelaide TX 77472 kounthapanya@noway1234.com {Cora Kounthapanya} {8635 Hilltop Circle} Bathurst TX 77915 eric154@noway1234.com {Eric Mahler} {5175 Aldren Circle} Centerville TX 77294 frame_taylor@noway1234.com {frame Taylor} {6253 Hooper Circle} Bendigo TX 77792 h_v@noway1234.com {H.V. Dahl} {6601 Falke Court} Eucla TX 77721 mooney186@noway1234.com {Gladys Mooney} {1096 Toadstool Turnpike} Bourke TX 77482 behrends@noway1234.com {Lois Behrends} {11246 Wild Iris Circle} Launceston TX 77002 joan@noway1234.com {Joan Gottula} {10539 Terry Street} Cairns TX 77141 speckmann69@noway1234.com {Sweeney Speckmann} {6359 Loch Circle} Mildura TX 77094 charlie@noway1234.com {Charlie Pooch} {11733 Hamilton Drive} Tamworth TX 77432 weyers@noway1234.com {J.R.J. Weyers} {5251 Lamoreaux Court} Nacogdoches TX 77464 stover882@noway1234.com {Stover Klein} {1705 Targhee Loop} Wollongong TX 77717 browning675@noway1234.com {Browning Pope} {2442 Unga Street} Amarillo TX 77538 maggie@noway1234.com {Maggie Curry} {7714 Communications Avenue} {San Antonio} TX 77294 piersol1@noway1234.com {Sarah Piersol} {6059 Fairweather Drive} Eucla TX 77803 nolen@noway1234.com {Nolen Yates} {2554 East 1st Avenue} Newcastle TX 77993 tinnel796@noway1234.com {Tinnel Allen} {3832 Livingston Street} Townsville TX 77070 horner34@noway1234.com {Eric Horner} {2412 Foxhall Drive} Mildura TX 77523 finfrock856@noway1234.com {Tyburtis Finfrock} {1642 Barrington Loop} Bourke TX 77393 donohue613@noway1234.com {Donohue Buerstetta} {4213 Camila Court} Albany TX 77345 gibbs385@noway1234.com {Carte Gibbs} {2856 Hunters Drive} {Mount Isa} TX 77766 corliss_dieckmann@noway1234.com {Corliss Dieckmann} {5171 Brigantine Circle} {Alice Springs} TX 77318 ella132@noway1234.com {Ella Fleck} {10079 Neptune Court} Adelaide TX 77289 goracke@noway1234.com {Griffith Goracke} {5329 Hollow Street} Albury TX 77044 whitehead896@noway1234.com {Tenney Whitehead} {8006 Hughes Avenue} Amarillo TX 77168 dirksen306@noway1234.com {Moss Dirksen} {10852 East 48th Avenue} {Mount Gambier} TX 77603 nielsen680@noway1234.com {Given Nielsen} {4727 Labrador Circle} {Port Hedland} TX 77225 ina@noway1234.com {Ina Goodrich} {8186 Bowery Lane} Queenstown TX 77138 noralea306@noway1234.com {Noralea Seward} {3558 East 2nd Court} Bourke TX 77919 fink@noway1234.com {Sarah Fink} {8725 Fire Eagle Way} {Mount Gambier} TX 77804 sorensen118@noway1234.com {Ora Sorensen} {2193 East 131st Avenue} Hamilton TX 77811 mae929@noway1234.com {Mae Pieratt} {2430 U Street} Rockhampton TX 77844 boob_russell@noway1234.com {Boob Russell} {8624 Highlands Drive} Broome TX 77696 reiber54@noway1234.com {Sally Reiber} {8007 Breckenridge Circle} Ketherine TX 77893 griffin@noway1234.com {Griffin Sears} {6561 Malaspina Circle} Launceston TX 77985 buddy329@noway1234.com {Buddy Wellensiek} {11236 Tuttle Place} {Coffs Harbour} TX 77186 lance@noway1234.com {Lance Mattheis} {552 Discovery Heights Circle} Townsville TX 77917 evalena_finn@noway1234.com {Evalena Finn} {2667 West Northern Lights Boulevard} Bourke TX 77881 robinson906@noway1234.com {Pearl Robinson} {7332 Navrot Circle} {Coffs Harbour} TX 77455 chris@noway1234.com {Chris Dills} {5750 K And R Street} Mildura TX 77518 harold361@noway1234.com {Harold Floerke} {2739 West 70th Circle} Broome TX 77504 deloris_ditlevson@noway1234.com {Deloris Ditlevson} {9176 Bridgeview Drive} Monaville TX 77400 rene955@noway1234.com {Rene Kreiling} {6159 Seville Park Circle} {Tennant Creek} TX 77194 notinaham775@noway1234.com {Notinaham Harms} {10889 Cortina Road} Cairns TX 77165 harold_rodgers@noway1234.com {Harold Rodgers} {9144 Pilots Road} Newcastle TX 77101 lynette@noway1234.com {Lynette Sears} {5325 Seldon Circle} Bourke TX 77124 wanda112@noway1234.com {Wanda Kerchal} {10914 West 37th Avenue} Pattison TX 77039 robin@noway1234.com {Robin Graff} {4234 Miley Drive} {Mount Gambier} TX 77830 goemann@noway1234.com {Tate Goemann} {7064 Steeple Drive} Townsville TX 77891 gayle@noway1234.com {Gayle Lempka} {10773 Vanover Circle} {Padre Island} TX 77567 lawrence568@noway1234.com {Lawrence Mcculla} {218 Brenner Circle} Houston TX 77638 sherie726@noway1234.com {Sherie Broady} {9220 Beaver Court} {Alice Springs} TX 77799 forest@noway1234.com {Forest Goers} {8561 Melvin Avenue} Houston TX 77363 anis@noway1234.com {Anis Foetisch} {1079 Hyatt Street} Eucla TX 77503 julie@noway1234.com {Julie Yoder} {1004 Degan Street} {Port Augusta} TX 77291 fritsch@noway1234.com {Ira Fritsch} {11605 Mariah Drive} {Port Hedland} TX 77302 elouise@noway1234.com {Elouise Ruby} {323 Loudermilk Circle} Cairns TX 77977 krause480@noway1234.com {Irvin Krause} {8984 Bern Street} {San Antonio} TX 77558 eugene739@noway1234.com {Eugene Bogle} {4107 Barrow Street} Eucla TX 77560 lewie@noway1234.com {Lewie Leuenberger} {6506 Coughlan Way} Sunnyville TX 77179 marian116@noway1234.com {Marian Lofgren} {10311 Maho Circle} {Port Augusta} TX 77747 stocklass@noway1234.com {Stocklass Kleine} {7243 Victoria Court} Austin TX 77183 fritsch227@noway1234.com {Edna Fritsch} {4761 Glenn Circle} {Tennant Creek} TX 77954 luck@noway1234.com {Deborah Luck} {9337 Norm Circle} {Coffs Harbour} TX 77296 mommens697@noway1234.com {Opal Mommens} {715 West 45th Avenue} Wollongong TX 77270 littlejohn822@noway1234.com {Laveda Littlejohn} {579 Foxridge Circle} {San Antonio} TX 77661 mccoy502@noway1234.com {Dorthy McCoy} {9872 Damman Circle} OOdnadatta TX 77149 stone@noway1234.com {Edna Stone} {2124 Kiloana Circle} Pattison TX 77530 borrenphol219@noway1234.com {Lou Borrenphol} {2838 Parkview Circle} {San Antonio} TX 77368 comer@noway1234.com {Comer Hood} {5302 Mary Esther Drive} Sunnyville TX 77148 walker13@noway1234.com {Walker Noudaranouvong} {7054 Pamela Place} Star TX 77434 clements@noway1234.com {Verna Clements} {4718 Miles Court} Newcastle TX 77791 bane433@noway1234.com {Ward Bane} {10788 Sauvignon Circle} {Mount Gambier} TX 77147 durst@noway1234.com {Claudine Durst} {1139 North Bliss Street} Centerville TX 77782 arte@noway1234.com {Arte Mooney} {7862 Quest Circle} Houston TX 77351 wilson852@noway1234.com {Wilson Homer} {3738 Easy Street} Bathurst TX 77056 mudflaps207@noway1234.com {Mudflaps Kreiling} {2712 Saint James Circle} Kema TX 77462 arlene@noway1234.com {Arlene Staley} {8106 Shady Birch Place} Bathurst TX 77188 katherine675@noway1234.com {Katherine Dittmer} {4222 East 58th Circle} OOdnadatta TX 77746 joe_lohmeier@noway1234.com {Joe Lohmeier} {3051 Far View Place} Nacogdoches TX 77773 velda@noway1234.com {Velda Goings} {2367 West 59th Avenue} Broome TX 77885 miesbach100@noway1234.com {Norris Miesbach} {8891 East Zeus Circle} Mildura TX 77226 selena@noway1234.com {Selena Morrison} {9114 West 121st Circle} Pattison TX 77657 bicknell593@noway1234.com {G. Bicknell} {5065 East 113th Avenue} Galveston TX 77685 beth@noway1234.com {Beth Lewis} {3497 Kruger Drive} {Coffs Harbour} TX 77284 hamm859@noway1234.com {Torb Hamm} {332 Moss Creek Avenue} Waco TX 77062 reiber783@noway1234.com {Nell Reiber} {6865 Oakwood Drive} Houston TX 77192 linda217@noway1234.com {Linda Rebuck} {8511 Decoy Circle} Ketherine TX 77425 emil@noway1234.com {Emil Noudaranouvong} {1620 Beechcraft Drive} Pattison TX 77146 pan860@noway1234.com {D.B. Pan} {3779 Whitecap Place} Star TX 77279 eagle_cummins@noway1234.com {Eagle Cummins} {9184 Short Shot Way} Newcastle TX 77122 troeger548@noway1234.com {S. Troeger} {10 Hollowbrook Circle} OOdnadatta TX 77540 mckinney945@noway1234.com {White McKinney} {3318 Crowberry Loop} {Broken Hill} TX 77084 abbie@noway1234.com {Abbie Huff} {1891 North Point Circle} Launceston TX 77345 mepherrin@noway1234.com {Duncan MePherrin} {5105 Jesters Place} Star TX 77999 thurber257@noway1234.com {Pearl Thurber} {4598 Aviation Avenue} Kema TX 77175 h_h911@noway1234.com {H.H. Gregory} {3676 Miller Road} Monaville TX 77346 patti@noway1234.com {Patti Triplett} {9647 Skyway Drive} Townsville TX 77403 frederick151@noway1234.com {Griffith Frederick} {3861 East 120th Avenue} Katy TX 77371 laug390@noway1234.com {Albert Laug} {6471 Kiloana Court} {Coober Pedy} TX 77152 rotha@noway1234.com {Rotha Seeba} {5286 Hutson Drive} Brookshire TX 77802 horn@noway1234.com {JoAnne Horn} {11130 Mc Cabe Circle} Sunnyville TX 77180 ditlevson104@noway1234.com {F. Ditlevson} {7584 Taiga Street} Austin TX 77021 parrisb@noway1234.com {Ira Parrisb} {8724 Via Appia} {Tennant Creek} TX 77658 mckinney220@noway1234.com {Daisy McKinney} {8430 Bliss Street} Launceston TX 77344 mary241@noway1234.com {Mary Krouse} {10220 Connors Trail Circle} Albany TX 77588 mcalexander564@noway1234.com {Ann McAlexander} {9232 Woodland Avenue} {Alice Springs} TX 77953 carte_bicknell@noway1234.com {Carte Bicknell} {9186 Stratford Court} Waco TX 77437 lula@noway1234.com {Lula Kehlenbeck} {4836 East 84th Court} Townsville TX 77562 lorenza@noway1234.com {Lorenza Richard} {7432 Williwa Avenue} OOdnadatta TX 77785 carman@noway1234.com {Christian Carman} {10567 Hope Circle} {Tennant Creek} TX 77254 spence641@noway1234.com {Spence Van} {10689 Surrey Circle} Centerville TX 77627 hindera@noway1234.com {Vena Hindera} {5628 Cloudcroft Lane} Nacogdoches TX 77157 punk@noway1234.com {Punk Thom} {1196 Helgelien Loop} Townsville TX 77792 clifton656@noway1234.com {Clifton Aldana} {9196 Almdale Avenue} Rockhampton TX 77504 hays@noway1234.com {Hays Wall} {5653 Southeast Apron Road} Austin TX 77794 lou_wegforth@noway1234.com {Lou Wegforth} {6866 Kings Point Circle} Ketherine TX 77090 eunice@noway1234.com {Eunice Rathbun} {58 San Fernando Street} Bathurst TX 77060 pamela@noway1234.com {Pamela Bischoff} {6537 Ricky Road} Kema TX 77343 j_r621@noway1234.com {J.R. Finn} {1350 Ambergate Drive} Star TX 77226 j_d_senesourinh@noway1234.com {J.D. Senesourinh} {5937 Gander Street} Eucla TX 77355 werner@noway1234.com {Minnie Werner} {3065 Gibstay Circle} Eucla TX 77053 mahar@noway1234.com {Tony Mahar} {4149 Boni Street} {Padre Island} TX 77974 meredith@noway1234.com {Meredith Kunzman} {8167 Hennings Way} Brookshire TX 77163 mccain877@noway1234.com {Jo McCain} {346 Imlach Drive} Burnie TX 77583 wagner@noway1234.com {Frances Wagner} {8963 Rainwater Circle} Sunnyville TX 77005 calvin@noway1234.com {Calvin Armknecht} {3461 Jarvi Drive} Independence TX 77560 weinrich@noway1234.com {Jackson Weinrich} {7249 Jamie Avenue} Austin TX 77068 aust351@noway1234.com {Dodrill Aust} {10539 Pacer Place} {Port Hedland} TX 77771 frank119@noway1234.com {Frank Zager} {7985 Cates Avenue} {Padre Island} TX 77130 ann221@noway1234.com {Ann Aust} {11593 Freebird Circle} Galveston TX 77285 wilmes@noway1234.com {Rozella Wilmes} {9024 Prince William Circle} Albury TX 77461 pieratt115@noway1234.com {Kevin Pieratt} {7007 Northfleet Drive} OOdnadatta TX 77747 troy@noway1234.com {Troy Sova} {6863 Honeysuckle Street} Katy TX 77105 policeman@noway1234.com {policeman McCain} {6393 Marino Drive} Bendigo TX 77447 kunzman@noway1234.com {Tom Kunzman} {10105 Maclaren Street} {Padre Island} TX 77797 malcolm@noway1234.com {Malcolm Masur} {3168 Willow Place} Burnie TX 77768 albert651@noway1234.com {Albert Rothell} {5613 Mountain Ash Drive} Dallas TX 77813 dillon@noway1234.com {Dillon Kaster} {10374 Cara Loop} Monaville TX 77472 waring264@noway1234.com {Bedford Waring} {3194 Snowline Circle} Broome TX 77681 jarvis@noway1234.com {Jarvis Holmstrom} {8853 Lexington Avenue} {San Felipe} TX 77102 miner967@noway1234.com {Mickey Miner} {5577 East 65th Avenue} Dallas TX 77525 griffith572@noway1234.com {Griffith Todter} {4179 East 63rd Avenue} Ketherine TX 77935 melinda@noway1234.com {Melinda Rodriques} {2509 Perry Drive} Tamworth TX 77808 ernest@noway1234.com {Ernest Wolf} {4600 Corrie Way} Mildura TX 77912 lynne@noway1234.com {Lynne Frederick} {9868 Cottonwood Street} Kema TX 77421 boyd302@noway1234.com {Boyd Berg} {10787 Raven Drive} Albury TX 77720 paxton@noway1234.com {Paxton Rodriques} {6194 Saturn Circle} Wollongong TX 77448 ivan@noway1234.com {Ivan Morris} {8267 Valley View Drive} Houston TX 77514 olga@noway1234.com {Olga Helm} {1163 Whale Bay Circle} Bendigo TX 77751 c210@noway1234.com {C. Zellmer} {2782 Andreanof Drive} Centerville TX 77537 deryle@noway1234.com {Deryle Finney} {3101 West 86th Court} Sunnyville TX 77870 oran@noway1234.com {Oran Gibson} {4281 Brigantine Circle} Monaville TX 77773 carrol48@noway1234.com {Carrol Rothell} {8321 Spring Court} {Port Augusta} TX 77741 hartman@noway1234.com {John Hartman} {9876 Anne Circle} Tamworth TX 77530 luanne@noway1234.com {Luanne Staley} {7743 Delores Drive} {Coober Pedy} TX 77921 garret@noway1234.com {Garret Dieckhoff} {3244 Bedford Street} Burnie TX 77218 meyer@noway1234.com {Pau Meyer} {4221 Snowy Plover Circle} {Mount Isa} TX 77238 cannon@noway1234.com {Cannon Khanthasene} {9958 Iron Mountain Road} Katy TX 77528 r119@noway1234.com {R. Goosman} {1154 East 9th Avenue} Tamworth TX 77000 floerke438@noway1234.com {Paul Floerke} {2747 Trail Bay Drive} Cairns TX 77620 grizilla@noway1234.com {Grizilla Kelley} {7218 Pyrenean Circle} {Broken Hill} TX 77067 constance@noway1234.com {Constance Hitzeman} {7440 Kirk Avenue} {Coober Pedy} TX 77674 drema@noway1234.com {Drema Stangel} {7187 Ramona Street} Austin TX 77281 mcalexander161@noway1234.com {Ernst Mcalexander} {2362 Jerde Circle} {Port Augusta} TX 77979 osa653@noway1234.com {Osa Mandery} {8537 West Manor Avenue} {Tennant Creek} TX 77342 hazen445@noway1234.com {Lloyd Hazen} {3849 Villages Scenic Parkway} Tamworth TX 77252 susan_jacobsen@noway1234.com {Susan Jacobsen} {9177 West Marston Drive} Newcastle TX 77703 jill@noway1234.com {Jill McPherrin} {1228 Kylie Circle} {Port Hedland} TX 77519 henderson708@noway1234.com {Henderson Thies} {11430 Crawford Street} Star TX 77904 buces@noway1234.com {Ramsey Buces} {11438 Orca Street} Queenstown TX 77227 rathbun419@noway1234.com {Pearl Rathbun} {6666 Hartman Circle} Dallas TX 77278 borrenphol93@noway1234.com {Samuel Borrenphol} {5299 Opal Circle} Monaville TX 77660 jerte@noway1234.com {Jerte Brown} {9365 Portugal Place} Hamilton TX 77692 petersen@noway1234.com {Perry Petersen} {6290 Mc Kenzie Drive} Launceston TX 77107 hoke146@noway1234.com {Johnson Hoke} {5416 Car-lynn Circle} Centerville TX 77635 dessie@noway1234.com {Dessie Meyer} {7343 Old Glenn Highway} Queenstown TX 77721 ester832@noway1234.com {Ester Baird} {1235 Woster Avenue} {Tennant Creek} TX 77104 shirley@noway1234.com {Shirley Straube} {7453 East 68th Avenue} Kema TX 77509 virginia835@noway1234.com {Virginia Fuller} {1497 Little Cape Circle} Star TX 77725 mcalexander950@noway1234.com {Gregory Mcalexander} {6114 Kronos Drive} Tamworth TX 77575 jochim@noway1234.com {J. Jochim} {3394 Interstate Circle} Ketherine TX 77712 polson615@noway1234.com {Red Polson} {5823 Home Place} Bourke TX 77153 greeb781@noway1234.com {Dottie Greeb} {4491 Gary Cooper Circle} Broome TX 77941 bette637@noway1234.com {Bette Sand} {9269 Whispering Spruce Circle} Adelaide TX 77691 phommachack@noway1234.com {Bud Phommachack} {2320 Shiloh Road} Houston TX 77514 elba@noway1234.com {Elba Johns} {4544 Constitution Drive} {Alice Springs} TX 77331 stahl153@noway1234.com {M. Stahl} {8582 Glenn Hill Circle} Wollongong TX 77687 lempke@noway1234.com {Ivan Lempke} {5907 Richmond Circle} Hamilton TX 77520 tinnel_wilmes@noway1234.com {Tinnel Wilmes} {2650 Fountain Drive} Kema TX 77969 parsons197@noway1234.com {Parsons Stauffer} {8567 Bernard Drive} Wollongong TX 77529 berner317@noway1234.com {Tinnel Berner} {11305 Zappa Place} Bendigo TX 77188 doralea@noway1234.com {Doralea Phommachan} {4854 East 55th Avenue} Mildura TX 77019 mandery680@noway1234.com {Helen Mandery} {4911 Ashley Park Lane} Austin TX 77279 scottie574@noway1234.com {Scottie Johns} {1371 Freedom Road} Waco TX 77567 joyce425@noway1234.com {Joyce Fink} {11899 Jessie Way} Monaville TX 77961 leonard@noway1234.com {Leonard Urich} {9800 Waxwing Circle} Kema TX 77893 doris510@noway1234.com {Doris Leuder} {1367 Rinner Circle} Newcastle TX 77454 pebble389@noway1234.com {Pebble Halverstadt} {6939 Willis Drive} Hamilton TX 77243 mason427@noway1234.com {Dirty Mason} {7122 Sheldon Jackson Street} Townsville TX 77756 hunt838@noway1234.com {Hunt Mueller} {8043 Colleen Circle} {Coober Pedy} TX 77427 sedersten772@noway1234.com {Dick Sedersten} {10059 Seaview Street} Burnie TX 77304 helm629@noway1234.com {Norma Helm} {11405 H Street} {San Felipe} TX 77831 peters940@noway1234.com {Dola Peters} {8203 Duvoy Court} Galveston TX 77264 hitzeman667@noway1234.com {Sandra Hitzeman} {1413 Old International Airport Road} Burnie TX 77408 ragon@noway1234.com {Prussia Ragon} {3226 Loussac Drive} Austin TX 77876 rod@noway1234.com {Rod Hays} {5052 Iris Drive} {Padre Island} TX 77385 rogers12@noway1234.com {Betsy Rogers} {3709 Lovitt Circle} Eucla TX 77197 amber275@noway1234.com {Amber Neill} {222 Bluegrass Circle} Albury TX 77088 ralph896@noway1234.com {Ralph Kroeze} {1233 Oxford Drive} Hamilton TX 77026 dell983@noway1234.com {Dell Stoner} {124 Adonis Drive} Adelaide TX 77438 williams494@noway1234.com {White Williams} {3449 Lower Tulwar Loop} Wollongong TX 77631 vincent@noway1234.com {Vincent Lempke} {5198 Patrick Road} Hamilton TX 77455 sellman@noway1234.com {Lillie Sellman} {6044 Ashwood Street} Launceston TX 77022 j_r386@noway1234.com {J.R. Stitt} {5775 Unimak Circle} Mildura TX 77685 hamilton608@noway1234.com {Eunice Hamilton} {3495 Harlequin Place} {Port Augusta} TX 77377 ruhl@noway1234.com {Ruhl Roberts} {4033 Joy Avenue} {Padre Island} TX 77974 claire@noway1234.com {Claire Ullman} {10746 Dana Street} {San Felipe} TX 77584 miller_lott@noway1234.com {Miller Lott} {460 Wisconsin Avenue} {Coffs Harbour} TX 77690 mane@noway1234.com {Mane Vrbka} {2304 Will Rogers Place} Hamilton TX 77862 geiger131@noway1234.com {Ann Geiger} {3730 Marten Street} {Mount Gambier} TX 77001 w841@noway1234.com {W. Nielsen} {4534 M Court} Austin TX 77583 bernard497@noway1234.com {Bernard Horstman} {2527 Goldenview Park Drive} Nacogdoches TX 77424 jacob@noway1234.com {Jacob Pierce} {9330 Lafayette Circle} Star TX 77580 clarence123@noway1234.com {Clarence Farley} {7402 Rock Ptarmigan Street} Independence TX 77773 rowe@noway1234.com {Delbert Rowe} {9685 Broadwater Drive} Townsville TX 77176 blythe521@noway1234.com {Hedgmond Blythe} {9850 Ptarmigan Terrace Avenue} Sunnyville TX 77750 earhart297@noway1234.com {Popcorn Earhart} {175 East 68th Avenue} Kema TX 77897 lee45@noway1234.com {Lee Driskell} {4408 Aries Court} Rockhampton TX 77876 lewis46@noway1234.com {Neelie Lewis} {6460 Cache Drive} Hamilton TX 77688 shelia@noway1234.com {Shelia Ruter} {4726 Arlene Drive} {Coober Pedy} TX 77373 nolte@noway1234.com {Eleanor Nolte} {5785 Canyon Road} Bourke TX 77870 juanita@noway1234.com {Juanita Feese} {6948 Bruce Lane} Broome TX 77463 facemire_hamm@noway1234.com {Facemire Hamm} {4807 Weeping Birch Avenue} Dallas TX 77946 henry@noway1234.com {Henry Raney} {8375 Alaska Regional Drive} Dallas TX 77900 randall@noway1234.com {Randall Sikyta} {7168 Port Access Road} {Tennant Creek} TX 77963 watteyne350@noway1234.com {H. Watteyne} {10270 Stolt Lane} Bourke TX 77201 wilson_tenhulzen@noway1234.com {Wilson TenHulzen} {7145 Weimer Drive} Rockhampton TX 77192 piersol579@noway1234.com {Ruhl Piersol} {3254 Marsha Loop} Hamilton TX 77719 krause560@noway1234.com {Dorsel Krause} {9520 Portage Glacier Road} Galveston TX 77318 steinauer@noway1234.com {Sleepy Steinauer} {5695 Loretta Place} Waco TX 77286 delmar_fleck@noway1234.com {Delmar Fleck} {11892 Shuttle Circle} {San Felipe} TX 77813 don@noway1234.com {Don Suhr} {3691 Meadow View Drive} Amarillo TX 77040 lantie@noway1234.com {Lantie Morrow} {8817 Wren Lane} Bourke TX 77748 maggie412@noway1234.com {Maggie Diaz} {2881 Driftwood Street} Nacogdoches TX 77635 william_bartels@noway1234.com {William Bartels} {3978 Creekside Street} Sunnyville TX 77497 carpenter@noway1234.com {Clark Carpenter} {1666 Bill Street} {San Antonio} TX 77320 armknecht982@noway1234.com {Evette Armknecht} {5299 Mountain Road} Brookshire TX 77261 holthus@noway1234.com {Melvina Holthus} {6462 Southport Drive} {San Antonio} TX 77967 fletcher@noway1234.com {Fletcher Urich} {6664 Dunlap Court} {Coffs Harbour} TX 77060 norman83@noway1234.com {Norman Bischoff} {6584 Beaumont Circle} Brookshire TX 77732 mullins397@noway1234.com {Mullins Hesman} {1029 Cox Drive} Broome TX 77099 ester_mason@noway1234.com {Ester Mason} {6683 Sproat Road} Mildura TX 77734 menard871@noway1234.com {Lynnette Menard} {5244 Muldoon Circle} Independence TX 77844 zelma@noway1234.com {Zelma Lade} {607 Hidden View Court} {Padre Island} TX 77853 jaime@noway1234.com {Jaime MePherrin} {6996 Craig Circle} Ketherine TX 77112 dawson437@noway1234.com {Dawson McCain} {6881 Rendon Drive} Kema TX 77311 gilbert431@noway1234.com {Gilbert Sellman} {10846 Matilda Circle} {Mount Gambier} TX 77122 hunt219@noway1234.com {Gaylene Hunt} {10464 Caplina Drive} Hamilton TX 77529 cherlly@noway1234.com {Cherlly Thompson} {6978 Roald Amundsen Avenue} Burnie TX 77144 zappa513@noway1234.com {Gene Zappa} {7068 Cache Drive} {Mount Gambier} TX 77537 wilson754@noway1234.com {Wilson Gordon} {11547 Callaway Circle} Amarillo TX 77209 hemmingway@noway1234.com {Hemmingway Buethe} {7998 Leyden Road} {Padre Island} TX 77888 rome@noway1234.com {Rome Holthus} {6210 Sunset View Circle} Sunnyville TX 77626 peterson@noway1234.com {Chip Peterson} {5889 East Bluff Drive} Burnie TX 77614 fawn@noway1234.com {Fawn Doeden} {3961 Hidden Falls Avenue} Houston TX 77730 jo218@noway1234.com {Jo Carpenter} {1207 Kincaid Road} Bendigo TX 77571 buell@noway1234.com {Buell McHenry} {3883 Telder Street} Kema TX 77430 barb_dirksen@noway1234.com {Barb Dirksen} {9131 Ticonderoga Place} Mildura TX 77342 werner714@noway1234.com {Triplett Werner} {9074 Thunder Road} {Padre Island} TX 77372 fanny@noway1234.com {Fanny Bates} {7684 Jackson Hole Court} Bathurst TX 77038 roy763@noway1234.com {Roy Clark} {3066 Campbell Terrace Drive} Brookshire TX 77131 schultz@noway1234.com {Gregory Schultz} {2397 Queen Victoria Drive} Hamilton TX 77863 bird_legs_armknecht@noway1234.com {Bird-Legs Armknecht} {3539 Mountain Road} Houston TX 77624 husing783@noway1234.com {Pearl Husing} {8626 West 47th Avenue} Austin TX 77696 carolyn_gibbs@noway1234.com {Carolyn Gibbs} {3995 Kalka Circle} Monaville TX 77021 shirlee@noway1234.com {Shirlee Parrish} {9087 Jasper Lane} {Alice Springs} TX 77788 eldon@noway1234.com {Eldon Ebeler} {4769 Tangle Court} {Coffs Harbour} TX 77713 stocklass351@noway1234.com {Stocklass Sikyta} {5311 Eagle River Road} Townsville TX 77900 georgia@noway1234.com {Georgia Steinmeyer} {6131 Ida Road} Newcastle TX 77919 donvil@noway1234.com {Donvil Cummins} {3336 West 95th Avenue} Pattison TX 77457 nelia@noway1234.com {Nelia Stangel} {11333 Terracewood Lane} Townsville TX 77520 dorsch@noway1234.com {Mary Dorsch} {91 Wooded Acres Drive} {Coffs Harbour} TX 77749 kenneth36@noway1234.com {Kenneth Stephens} {8183 White Tail Lane} Queenstown TX 77168 james814@noway1234.com {James Hahn} {10008 Ressel Avenue} Rockhampton TX 77208 ocie669@noway1234.com {Ocie Humann} {2939 Linden Drive} Bathurst TX 77284 belding@noway1234.com {Violet Belding} {5590 Mc Gowan Street} Albany TX 77995 shelton@noway1234.com {Shelton Stettenbenz} {4402 Florence Circle} Adelaide TX 77683 hanson@noway1234.com {Suflonia Hanson} {10785 O'malley Centre Court} Monaville TX 77959 william48@noway1234.com {William Triplett} {4886 Rampart Drive} Kema TX 77030 midge@noway1234.com {Midge Beethe} {5963 Summer Circle} Townsville TX 77820 anis258@noway1234.com {Anis Stephens} {7943 Academy Drive} Sunnyville TX 77592 dieckmann733@noway1234.com {Joe Dieckmann} {652 Friendship Lane} Bathurst TX 77446 leahy373@noway1234.com {wilson Leahy} {8256 Mohegan Drive} Centerville TX 77967 wilson307@noway1234.com {Wilson Haney} {4661 Muir Court} Townsville TX 77786 cary@noway1234.com {Berne Cary} {4271 Cassius Court} Albury TX 77319 eells394@noway1234.com {E. Eells} {2957 Upper Mc Crary Road} {Coober Pedy} TX 77792 chatta848@noway1234.com {Chatta Baird} {10980 Erin Street} Independence TX 77100 bernadt224@noway1234.com {Iris Bernadt} {2348 Jennifer Ann Circle} Independence TX 77666 lucy_cawley@noway1234.com {Lucy Cawley} {201 Stanford Drive} {Padre Island} TX 77586 schlender@noway1234.com {Pat Schlender} {862 Humphrey Drive} OOdnadatta TX 77612 tinnel976@noway1234.com {Tinnel Baird} {4656 Aurora Drive} Wollongong TX 77661 triplett484@noway1234.com {Conner Triplett} {9735 Sinina Circle} Queenstown TX 77384 jess449@noway1234.com {Jess Eltiste} {11821 Montrose Circle} OOdnadatta TX 77280 durman808@noway1234.com {Ida Durman} {11598 Admiralty Place} Townsville TX 77622 monkeyballs@noway1234.com {Burton Monkeyballs} {7571 Maywood Circle} Galveston TX 77948 given600@noway1234.com {Given Murphy} {10685 Sawmill Road} {Padre Island} TX 77163 orvill121@noway1234.com {Orvill Hershberger} {1737 Hace Street} Austin TX 77385 somchay395@noway1234.com {Lillie Somchay} {7092 Alpine View Circle} {San Felipe} TX 77136 ruby345@noway1234.com {Ruby Ebeler} {217 East 6th Avenue} Rockhampton TX 77747 gay_phillips@noway1234.com {Gay Phillips} {3425 Ermine Street} Bathurst TX 77942 bischoff541@noway1234.com {Gary Bischoff} {4544 Marino Drive} Broome TX 77379 vincent35@noway1234.com {Vincent Fricke} {6784 West 70th Avenue} Nacogdoches TX 77920 volkmer@noway1234.com {Lloyd Volkmer} {1411 Porcupine Trail Road} {Broken Hill} TX 77464 cox903@noway1234.com {Edna Cox} {26 Buskin Circle} Eucla TX 77810 david853@noway1234.com {David Cummins} {439 Sebring Circle} Cairns TX 77928 reschke@noway1234.com {Ernestine Reschke} {5720 Iowa Drive} Launceston TX 77765 holbert@noway1234.com {Holbert Hansel} {1753 Saint James Circle} Eucla TX 77261 evayline654@noway1234.com {Evayline Ruby} {7006 Rio Grande Avenue} Dallas TX 77960 williams_lueders@noway1234.com {Williams Lueders} {5378 Meadowbrook Circle} Galveston TX 77198 dodrill796@noway1234.com {Dodrill Bogle} {136 Pinnacle Circle} Launceston TX 77538 littlejohn346@noway1234.com {Tressie Littlejohn} {4957 Galena Bay Loop} Amarillo TX 77988 frances687@noway1234.com {Frances Rosakrans} {11103 Monte Road} {Coober Pedy} TX 77844 vickie_reynolds@noway1234.com {Vickie Reynolds} {1145 Campbell Airstrip Road} Brookshire TX 77861 dwinell@noway1234.com {Wanda Dwinell} {4236 Sunburst Circle} {Alice Springs} TX 77312 harms84@noway1234.com {Harms Mooney} {1497 Cannoneer Circle} Launceston TX 77752 anne599@noway1234.com {Anne Goemann} {9064 Parker Place} {Mount Isa} TX 77449 jerie@noway1234.com {Jerie Rinne} {6605 Artemus Avenue} Albury TX 77575 ruby529@noway1234.com {Notinaham Ruby} {2111 East 54th Avenue} {San Felipe} TX 77936 darius127@noway1234.com {Darius Rowe} {9249 Brendl Way} Eucla TX 77603 darla926@noway1234.com {Darla Fritsch} {8612 Kodiak Street} Cairns TX 77408 drake@noway1234.com {C.A. Drake} {1423 Lupine Road} Newcastle TX 77921 paxton_malone@noway1234.com {Paxton Malone} {1027 Newt Drive} {Padre Island} TX 77296 icie@noway1234.com {Icie Kounthapanya} {7426 Ridgeway Avenue} Nacogdoches TX 77890 fitzwater467@noway1234.com {Fitzwater Pettinger} {4807 Aviation Avenue} Houston TX 77863 sweeney_davison@noway1234.com {Sweeney Davison} {7980 West 28th Court} Cairns TX 77337 sobotta@noway1234.com {Mable Sobotta} {2747 Hanes Street} Wollongong TX 77120 leroy_ellis@noway1234.com {LeRoy Ellis} {11430 Tyee Circle} Mildura TX 77345 gates@noway1234.com {Dillon Gates} {1334 Lake Hill Drive} OOdnadatta TX 77541 peck@noway1234.com {Peck Roland} {9076 Bluebell Drive} Bourke TX 77679 lacie647@noway1234.com {Lacie Walters} {11776 Mountain Lake Drive} Dallas TX 77083 driskell643@noway1234.com {Patty Driskell} {7302 Fairweather Drive} Bendigo TX 77483 eula@noway1234.com {Eula Ragon} {258 Banff Circle} Waco TX 77259 betty919@noway1234.com {Betty Wilmes} {9968 Anne Circle} {Mount Isa} TX 77061 ethel98@noway1234.com {Ethel Xayaphonesongkham} {8614 Baltimore Place} Dallas TX 77696 douglas163@noway1234.com {Dodrill Douglas} {3873 Old Harbor Avenue} {Mount Isa} TX 77695 bud301@noway1234.com {Bud Wiese} {8878 Kwigillingok Street} Burnie TX 77658 dufield@noway1234.com {Dufield Diaz} {3503 Geronimo Circle} Bendigo TX 77810 daisy_hayes@noway1234.com {Daisy Hayes} {10530 Jelinek Place} Bendigo TX 77943 mable371@noway1234.com {Mable Thom} {9489 Passage Way} Nacogdoches TX 77695 herbert781@noway1234.com {Herbert Mason} {3389 Highlander Circle} Bourke TX 77439 stettenbenz@noway1234.com {Kellis Stettenbenz} {1719 Beechcraft Drive} {Padre Island} TX 77979 scharton981@noway1234.com {Pearl Scharton} {7793 Kitzbuhel Road} Townsville TX 77921 thom890@noway1234.com {Hazel Thom} {8959 High Point Street} Houston TX 77257 pony_mepherrin@noway1234.com {Pony MePherrin} {11865 Ressel Avenue} Hamilton TX 77014 patronia@noway1234.com {Patronia Mccoy} {4201 Preuss Lane} {Alice Springs} TX 77197 glenn@noway1234.com {Glenn Hershberger} {5591 Caravelle Court} {Padre Island} TX 77712 marie468@noway1234.com {Marie Rubin} {2305 Foraker Drive} Launceston TX 77477 richard@noway1234.com {Martha Richard} {4042 Swiss Place} {Mount Gambier} TX 77058 annie@noway1234.com {Annie Dorsch} {140 Bridger Place} Bendigo TX 77286 red_bartels@noway1234.com {Red Bartels} {669 Sycamore Loop} Bourke TX 77919 holmstrom661@noway1234.com {Arte Holmstrom} {2138 Pinnacle Circle} Brookshire TX 77592 lilly_garris@noway1234.com {Lilly Garris} {5489 Lake Shore Drive} Amarillo TX 77530 roncy@noway1234.com {Roncy Proctor} {10692 Tree Circle} Mildura TX 77266 paden@noway1234.com {Oss Paden} {6758 Barbara Falls Drive} {Padre Island} TX 77184 genniene181@noway1234.com {Genniene Rogers} {4455 Redcoat Place} Nacogdoches TX 77707 lu@noway1234.com {Lu Ragon} {5497 Newcomb Drive} Star TX 77583 okey_philippi@noway1234.com {Okey Philippi} {4393 Vail Drive} {Mount Isa} TX 77986 amanda711@noway1234.com {Amanda Husing} {579 Rabbit Creek Road} Wollongong TX 77113 field_miesbach@noway1234.com {Field Miesbach} {9718 Creekside Drive} Sunnyville TX 77402 julian@noway1234.com {Julian Dollarhide} {9666 Michelin Alley} {Alice Springs} TX 77038 neill898@noway1234.com {Dixie Neill} {2525 Scott Street} Independence TX 77743 roberts532@noway1234.com {Martha Roberts} {1647 Grissom Circle} {Mount Gambier} TX 77375 edward@noway1234.com {Edward Stephens} {8488 Stanley Park Circle} Tamworth TX 77236 parrisb802@noway1234.com {Arron Parrisb} {11054 Antelope Lane} {Broken Hill} TX 77324 buddy_carmine@noway1234.com {Buddy Carmine} {11192 Brittany Drive} {Tennant Creek} TX 77883 nolen_mommens@noway1234.com {Nolen Mommens} {4433 Raven Drive} Sunnyville TX 77524 toby@noway1234.com {Toby Nielsen} {11076 East 86th Court} {Broken Hill} TX 77994 alton212@noway1234.com {Alton Rother} {10586 Birch Hills Drive} Queenstown TX 77231 maw433@noway1234.com {Maw Xayaphonesongkham} {5545 Indian Chief Court} Adelaide TX 77604 gieser@noway1234.com {Calhoun Gieser} {5580 Gold Kings Circle} {Coober Pedy} TX 77200 avis53@noway1234.com {Avis Schroder} {3782 Cleveland Avenue} Galveston TX 77822 roena_volkmer@noway1234.com {Roena Volkmer} {7214 Pinto Circle} Centerville TX 77038 chip789@noway1234.com {Chip Ensor} {3259 Pluto Drive} Austin TX 77440 dow@noway1234.com {Dow Huff} {5462 First Street} Hamilton TX 77719 deane335@noway1234.com {Deane Miesbach} {9084 Lakonia Drive} Monaville TX 77704 christen@noway1234.com {Virginia Christen} {8917 East Cook Avenue} {Broken Hill} TX 77583 topp321@noway1234.com {Wetzel Topp} {9662 Sidorof Lane} Sunnyville TX 77698 keim@noway1234.com {Tyburtis Keim} {10500 Huot Circle} Newcastle TX 77338 lois812@noway1234.com {Lois Shaffer} {7087 Mountain Way} Centerville TX 77799 freda_scherrer@noway1234.com {Freda Scherrer} {7003 East 50th Avenue} {Tennant Creek} TX 77156 vicki_hayes@noway1234.com {Vicki Hayes} {1349 Adobe Drive} {Broken Hill} TX 77084 jackson_boardman@noway1234.com {Jackson Boardman} {8904 Goldenview Park Drive} Monaville TX 77845 aldridge_schweppe@noway1234.com {Aldridge Schweppe} {3002 North Wrangell Street} Dallas TX 77793 seawall@noway1234.com {Tenney Seawall} {11708 Zeus Drive} Houston TX 77402 kounthapanya856@noway1234.com {Phil Kounthapanya} {1804 East 4th Avenue} Albany TX 77953 thompson@noway1234.com {Barnette Thompson} {9256 Tinian Street} Townsville TX 77662 polson471@noway1234.com {Waveline Polson} {8943 Marmot Court} Launceston TX 77208 leonard168@noway1234.com {Leonard Thompson} {4290 Sunchase Street} Tamworth TX 77253 shuey@noway1234.com {Irene Shuey} {2455 Harley Drive} Burnie TX 77458 denise@noway1234.com {Denise Dieckhoff} {2684 Davis Highway} Amarillo TX 77423 finn942@noway1234.com {Maggie Finn} {69 Niltina Lane} Kema TX 77989 dahl@noway1234.com {Carla Dahl} {2308 West 12th Avenue} Queenstown TX 77245 kenneth_berg@noway1234.com {Kenneth Berg} {10838 Summer Drive} {Port Hedland} TX 77064 nelma@noway1234.com {Nelma Dollarhide} {11713 Prescot Circle} Waco TX 77192 holden293@noway1234.com {Casto Holden} {9294 Cutlass Circle} Centerville TX 77721 cottingham@noway1234.com {Cleve Cottingham} {3563 Hampstead Drive} Dallas TX 77356 mahoney330@noway1234.com {Bessie Mahoney} {6821 West 86th Court} Rockhampton TX 77765 repp@noway1234.com {Mary Repp} {9674 Elizabeth Street} OOdnadatta TX 77629 lona@noway1234.com {Lona Fricke} {5318 Miley Drive} Star TX 77293 hickman583@noway1234.com {Hickman Horstman} {8625 Reader Road} Ketherine TX 77368 burton_neemann@noway1234.com {Burton Neemann} {9386 Upper Fish Hatchery Road} Brookshire TX 77981 mcnergney516@noway1234.com {Eva McNergney} {2188 Kodiak Street} Hamilton TX 77982 bessie585@noway1234.com {Bessie Lott} {6327 Knight's Way} {Mount Gambier} TX 77845 billy_scholl@noway1234.com {Billy Scholl} {11926 North Bunn Street} Ketherine TX 77286 phillips727@noway1234.com {Phillips Belding} {3748 Jennison Circle} OOdnadatta TX 77306 eagle_oldfather@noway1234.com {Eagle Oldfather} {875 West 100th Avenue} Launceston TX 77017 frame_christensen@noway1234.com {frame Christensen} {2681 South Airpark Drive} Bathurst TX 77168 june975@noway1234.com {June Hitzeman} {2367 Neacola Circle} {Coffs Harbour} TX 77418 bauers@noway1234.com {A. Bauers} {5924 Lake View Drive} Queenstown TX 77352 reynolds549@noway1234.com {Dwayne Reynolds} {8315 Crow Creek Highway} Mildura TX 77372 pierce787@noway1234.com {Leola Pierce} {5860 Del's Lane} {Padre Island} TX 77351 alex@noway1234.com {Alex Raney} {7875 Killington Court} Broome TX 77539 leola971@noway1234.com {Leola Campbell} {9849 O'riedner Road} Katy TX 77925 abner@noway1234.com {Abner Giittinger} {11243 Brittany Rock Way} Houston TX 77422 vaden42@noway1234.com {Vaden Naber} {9438 Holitna Circle} {Broken Hill} TX 77024 hamrick686@noway1234.com {Hamrick Lawrence} {11374 Pointe Resolution Drive} Adelaide TX 77847 casey_goemann@noway1234.com {Casey Goemann} {9215 Irene Way} Galveston TX 77733 p_d@noway1234.com {P.D Schreiner} {1741 Constitution Street} Burnie TX 77272 brady_hinkle@noway1234.com {Brady Hinkle} {10662 Kensington Drive} {San Antonio} TX 77543 virginia860@noway1234.com {Virginia Gorton} {5609 Hillside Drive} Wollongong TX 77886 jones@noway1234.com {Garland Jones} {9211 Inlet Vista Drive} Houston TX 77646 william_piersol@noway1234.com {William Piersol} {3669 Hilltop Drive} Kema TX 77526 schmidt30@noway1234.com {Lorene Schmidt} {11619 West 70th Circle} {Alice Springs} TX 77829 pohlman@noway1234.com {Maxine Pohlman} {7366 East Fireweed Lane} Rockhampton TX 77762 grosse@noway1234.com {Pamela Grosse} {1536 Lilac Circle} Rockhampton TX 77004 tex@noway1234.com {Tex Luck} {11325 Sterling Way} Bendigo TX 77982 hickman_humann@noway1234.com {Hickman Humann} {10920 Ridge Top Circle} {Port Hedland} TX 77726 c_l_hamilton@noway1234.com {C.L. Hamilton} {7385 Yosemite Drive} Brookshire TX 77820 carrie_horner@noway1234.com {Carrie Horner} {11697 Sapphire Loop} Cairns TX 77536 pearl234@noway1234.com {Pearl Holden} {8842 Twilight Lane} Launceston TX 77315 malissa_vanlaningham@noway1234.com {Malissa VanLaningham} {10775 Cc Way} Kema TX 77099 kroeze843@noway1234.com {Ofie Kroeze} {11172 Cranberry Street} {Alice Springs} TX 77566 josephine@noway1234.com {Josephine Whitehead} {6393 Northern Raven Drive} Independence TX 77643 karin@noway1234.com {Karin Stinson} {2245 Woodmont Drive} Austin TX 77833 melborne@noway1234.com {Melborne Altman} {8360 Greenpoint Avenue} Sunnyville TX 77379 opal469@noway1234.com {Opal Wheeler} {4438 Seawind Drive} Bathurst TX 77688 l_s277@noway1234.com {L.S. Paden} {8156 Lewis Street} Queenstown TX 77979 spence70@noway1234.com {Miller Spence} {3741 Merlin Loop} {Alice Springs} TX 77199 bennett230@noway1234.com {Mc Bennett} {357 Cherokee Way} Eucla TX 77703 hervey673@noway1234.com {Dana Hervey} {3924 Penn Circle} {San Felipe} TX 77683 mccoy313@noway1234.com {Dee Mccoy} {5548 Vfw Road} Independence TX 77070 rademacher@noway1234.com {Moss Rademacher} {2856 Marlowe Avenue} {Coober Pedy} TX 77042 sandi_kroeze@noway1234.com {Sandi Kroeze} {3348 David Blackburn Road} Independence TX 77821 bob@noway1234.com {Bob Elenga} {8646 East 94th Court} Pattison TX 77568 reed388@noway1234.com {Reed Jones} {4280 Greendale Drive} Adelaide TX 77765 alan@noway1234.com {Alan Wilmes} {9857 Mike Street} Hamilton TX 77846 adrian_holmstrom@noway1234.com {Adrian Holmstrom} {9396 Horizon Avenue} {Port Augusta} TX 77570 brommer148@noway1234.com {Odbert Brommer} {7366 Eklutna Lake Road} {Coffs Harbour} TX 77173 mitchel599@noway1234.com {Karen Mitchel} {4531 Shelter Rock Circle} Queenstown TX 77521 troeger518@noway1234.com {Donohue Troeger} {638 Bradford Drive} {Alice Springs} TX 77070 thurber371@noway1234.com {J. Thurber} {4889 Delta Circle} Hamilton TX 77686 beulah@noway1234.com {Beulah McNergney} {6173 Bunnell Street} Bourke TX 77521 robinson41@noway1234.com {Wibb Robinson} {3457 Gold Kings Circle} {Padre Island} TX 77275 xayaphonesongkham855@noway1234.com {Christian Xayaphonesongkham} {4836 Ashland Drive} OOdnadatta TX 77290 hilda@noway1234.com {Hilda Juilfs} {8807 Barrow Street} {Mount Isa} TX 77395 morrow@noway1234.com {Sterling Morrow} {4326 Thiel Circle} Eucla TX 77918 coulter@noway1234.com {Coulter Robinson} {2187 Energy Court} Mildura TX 77951 huck@noway1234.com {Huck Severns} {9781 Leprechan Drive} Star TX 77921 morrissey467@noway1234.com {Burkley Morrissey} {3574 West 74th Court} Launceston TX 77844 linda465@noway1234.com {Linda Whitehead} {10133 Kelly Circle} Burnie TX 77882 reinhardt@noway1234.com {Hansford Reinhardt} {7732 West 71st Court} Kema TX 77910 pfister@noway1234.com {Laky Pfister} {11425 Tahoe Drive} Galveston TX 77690 kehlenbeck@noway1234.com {Louisa Kehlenbeck} {2961 Fairkytes Circle} {San Antonio} TX 77553 brown651@noway1234.com {Brown Hervey} {3717 Sean Circle} Launceston TX 77748 dorlen@noway1234.com {Dorlen Greene} {5652 Wilma Circle} Bourke TX 77870 willis656@noway1234.com {Willis Rau} {3669 Cramer Place} Brookshire TX 77038 dexter91@noway1234.com {Dexter Driskell} {2168 Red Talon Drive} Houston TX 77697 weible634@noway1234.com {Comer Weible} {1377 Rose Street} Launceston TX 77892 mitchell@noway1234.com {Mitchell Reschke} {10367 Woodshire Circle} Star TX 77066 jones170@noway1234.com {Dufield Jones} {10313 East 19th Circle} {Coffs Harbour} TX 77024 buck_stewart@noway1234.com {Buck Stewart} {3928 Francesca Drive} Houston TX 77116 horstman360@noway1234.com {Belle Horstman} {8419 Grape Place} {Mount Gambier} TX 77999 b904@noway1234.com {B. Hazen} {11275 Hartman Circle} {Port Hedland} TX 77346 polson807@noway1234.com {Ruby Polson} {586 Verdant Circle} Tamworth TX 77153 grable@noway1234.com {Ivan Grable} {6749 San Bowfel Street} Kema TX 77900 ammie185@noway1234.com {Ammie Thompson} {9725 Hartzell Road} Centerville TX 77261 roberts504@noway1234.com {Darius Roberts} {7258 Ivy Drive} Sunnyville TX 77745 tagart762@noway1234.com {Marion Tagart} {7876 Shore Drive} Bendigo TX 77875 seward522@noway1234.com {Cannon Seward} {3933 White Tail Lane} Star TX 77474 bartholomew@noway1234.com {nurse Bartholomew} {633 Fantail Circle} Waco TX 77183 staley126@noway1234.com {Staley Ellis} {5388 Eaglewood Loop} Brookshire TX 77163 annalee_kirkman@noway1234.com {Annalee Kirkman} {10817 Chenega Drive} Bourke TX 77003 site@noway1234.com {Site Bartels} {3642 Belsey Street} Brookshire TX 77943 charles12@noway1234.com {Charles Meyer} {10601 Belduque Court} Amarillo TX 77672 otha_thies@noway1234.com {Otha Thies} {5154 Agate Circle} Star TX 77692 mullins928@noway1234.com {Mullins Wiese} {4950 Wildwood Street} Brookshire TX 77204 jewell436@noway1234.com {Lea Jewell} {4249 Hardrock Drive} Bendigo TX 77136 oma53@noway1234.com {Oma Gottula} {11483 Myrtle Drive} Pattison TX 77186 oral672@noway1234.com {Oral Kavanaugh} {3029 Veco Drive} Broome TX 77980 raney52@noway1234.com {Mozelle Raney} {2460 Doroshin Avenue} {Tennant Creek} TX 77929 madeline@noway1234.com {Madeline Wall} {9523 Austin Street} Tamworth TX 77267 scott9@noway1234.com {Julie Scott} {1323 O Hop-toop Drive} Star TX 77725 helm782@noway1234.com {Johnson Helm} {2718 Kilkerry Circle} Pattison TX 77171 dodrill_mckinney@noway1234.com {Dodrill McKinney} {5761 Marian Bay Circle} Bourke TX 77412 eva665@noway1234.com {Eva Schultz} {9331 Mc Carthy Street} Bathurst TX 77413 boob922@noway1234.com {Boob Hamilton} {3505 Norman Street} Kema TX 77264 anthony_todter@noway1234.com {Anthony Todter} {5502 Fenn Street} Townsville TX 77305 n_l737@noway1234.com {N.L. MePherrin} {6983 Oomiak Circle} Wollongong TX 77524 mctheny866@noway1234.com {Mctheny Einstein} {5786 Woodmont Drive} Star TX 77379 teske191@noway1234.com {L. Teske} {7579 Rainwater Circle} Bathurst TX 77142 ernst588@noway1234.com {Ernst Berner} {7020 Wallace Avenue} Eucla TX 77345 jeanne221@noway1234.com {Jeanne Russell} {7073 Golden Wood Lane} Sunnyville TX 77950 ivan_sedersten@noway1234.com {Ivan Sedersten} {8909 Glennway Drive} Bendigo TX 77560 eldridge@noway1234.com {Eldridge Mathis} {4917 Mego Street} Albury TX 77845 clark170@noway1234.com {Aldridge Clark} {7983 East 20th Avenue} {Mount Isa} TX 77575 rapp251@noway1234.com {Rapp Rodgers} {2575 Heritage Place} Centerville TX 77722 june564@noway1234.com {June Stephens} {10195 Michaels Street} Pattison TX 77750 rosetta575@noway1234.com {Rosetta Seward} {10383 East 95th Court} {Coffs Harbour} TX 77404 kleine@noway1234.com {Allen Kleine} {6273 West 14th Avenue} Independence TX 77724 nona@noway1234.com {Nona Luck} {2611 Wild Rose Court} Townsville TX 77335 blake_buces@noway1234.com {Blake Buces} {2667 Marston Drive} {Port Hedland} TX 77916 john_gillette@noway1234.com {John Gillette} {6985 Chenoweth Street} Sunnyville TX 77287 acree412@noway1234.com {Acree Mason} {11039 University Lake Drive} Newcastle TX 77727 ruby502@noway1234.com {Ruby Pan} {4879 Seclusion Bay Drive} Sunnyville TX 77577 rowe881@noway1234.com {Rubin Rowe} {3213 Hatay Drive} Albury TX 77642 harien@noway1234.com {Harien Scott} {1644 Buttress Haul Road} Hamilton TX 77724 wood_sackaly@noway1234.com {Wood Sackaly} {7078 Four Wheel Drive} Adelaide TX 77963 lillie548@noway1234.com {Lillie Mccoy} {1055 Curvi Street} Pattison TX 77879 craig495@noway1234.com {Craig Dills} {1912 Micheal Court} {Mount Isa} TX 77770 shelby@noway1234.com {Shelby Clifton} {2604 East 147th Avenue} Albany TX 77455 ellis268@noway1234.com {Dixie Ellis} {845 Lark Street} {Padre Island} TX 77484 effie@noway1234.com {Effie Harman} {11391 Romig Place} Wollongong TX 77338 dora@noway1234.com {Dora Wilhelm} {389 Heritage Place} {Port Augusta} TX 77351 rothell71@noway1234.com {Murl Rothell} {4580 Joyce Road} Katy TX 77368 brown608@noway1234.com {Dodrill Brown} {849 Amherst Court} Mildura TX 77147 halley@noway1234.com {Halley Durman} {2135 Posiedon Drive} Eucla TX 77757 tex386@noway1234.com {Tex Campbell} {3628 Cache Creek Circle} Albury TX 77308 chritton648@noway1234.com {Kennith Chritton} {1763 Gold Kings Avenue} Rockhampton TX 77034 hershel@noway1234.com {Hershel Wheeler} {4274 Dunkirk Court} Pattison TX 77663 earlie@noway1234.com {Earlie Rickman} {2001 Milky Way Drive} Katy TX 77559 j_r68@noway1234.com {J.R. Hazen} {7289 West Tudor Road} Tamworth TX 77873 donald787@noway1234.com {Donald Pfister} {6149 Puma Drive} {Padre Island} TX 77403 james264@noway1234.com {James Grable} {4450 Lodge Pole Court} Bathurst TX 77329 davis517@noway1234.com {Davis Thurber} {3300 Crete Street} {San Felipe} TX 77939 bert@noway1234.com {Bert Clark} {9534 William Jones Circle} Austin TX 77519 aaron42@noway1234.com {Aaron Bennett} {11584 Chandalar Drive} Dallas TX 77797 wendel@noway1234.com {Wendel Heidemann} {4507 Unalaska Circle} Pattison TX 77482 oral916@noway1234.com {Oral Van} {9443 Sokolof Circle} Waco TX 77955 radford_noudaranouvong@noway1234.com {Radford Noudaranouvong} {1739 Landmark Court} {Alice Springs} TX 77842 moore708@noway1234.com {Moore Weible} {4204 Greenbelt Drive} {San Felipe} TX 77378 merlin_tagart@noway1234.com {Merlin Tagart} {3289 West 84th Avenue} Bendigo TX 77599 bud_mann@noway1234.com {Bud Mann} {9046 Locarno Drive} {Port Hedland} TX 77372 hanshaw_weakland@noway1234.com {Hanshaw Weakland} {8649 Treasure Box Mine Road} Cairns TX 77748 pudge_horn@noway1234.com {Pudge Horn} {1290 Alpenglow Drive} Eucla TX 77296 mark@noway1234.com {Mark Harrington} {11307 Coventry Drive} Eucla TX 77588 jill947@noway1234.com {Jill Rother} {1728 Aspen Court} {Alice Springs} TX 77324 flava@noway1234.com {Flava Meyer} {9709 Montego Circle} Hamilton TX 77492 babe_nielsen@noway1234.com {Babe Nielsen} {6376 Silvertip Circle} Bourke TX 77121 wib@noway1234.com {Wib Gibson} {9631 Snead Street} Monaville TX 77512 ruth_pieratt@noway1234.com {Ruth Pieratt} {10121 Beluga Bay Circle} Dallas TX 77952 mullins_oltman@noway1234.com {Mullins Oltman} {7951 East 96th Avenue} {Coffs Harbour} TX 77388 f_ullman@noway1234.com {F. Ullman} {10756 Roop Road} Ketherine TX 77279 tagart584@noway1234.com {Orvis Tagart} {4977 Dawn Lane} Townsville TX 77435 snow@noway1234.com {snow Mitchel} {5492 Hunter Circle} {Broken Hill} TX 77257 jill332@noway1234.com {Jill Boline} {1006 Setter Drive} Bathurst TX 77789 kitzmiller_vance@noway1234.com {Kitzmiller Vance} {141 Jackpot Bay Circle} Launceston TX 77192 laura312@noway1234.com {Laura Buethe} {3800 Ridgemont Drive} {Tennant Creek} TX 77180 cab@noway1234.com {Cab Heideman} {11354 Westwind Circle} Queenstown TX 77794 flavy@noway1234.com {Flavy Greeb} {5490 Orchid Circle} Albury TX 77597 schultz493@noway1234.com {Suzette Schultz} {8143 Baffin Street} Cairns TX 77871 keener209@noway1234.com {Keener Tagart} {4938 Bonnie Jean Court} OOdnadatta TX 77486 nanny@noway1234.com {Nanny Mahler} {9389 Little Dipper Avenue} Tamworth TX 77302 mathis621@noway1234.com {Ralph Mathis} {4693 Rezanof Circle} Hamilton TX 77455 frederick979@noway1234.com {JoAnne Frederick} {9717 Highlands Drive} Rockhampton TX 77920 raney904@noway1234.com {Leola Raney} {10000 Vasili Drive} Star TX 77404 maryaldine@noway1234.com {Maryaldine Thies} {9822 Birch Lane} {Tennant Creek} TX 77367 tenhulzen634@noway1234.com {Penelope TenHulzen} {6669 Christina Place} Kema TX 77392 mccoy707@noway1234.com {Rush Mccoy} {6284 Atlantis Avenue} Waco TX 77129 keith@noway1234.com {Keith Mccoy} {9295 Jewel Terrace Street} Centerville TX 77330 neemann406@noway1234.com {Jerome Neemann} {6303 Crabtree Lane} Kema TX 77608 dawson344@noway1234.com {Dawson Menard} {3145 Bluff Creek Circle} Rockhampton TX 77806 barbara332@noway1234.com {Barbara Neukirch} {10863 North Eagle Street} Centerville TX 77781 dr683@noway1234.com {Dr. Stephens} {7662 Wesleyan Drive} Pattison TX 77030 jerte_holmstrom@noway1234.com {Jerte Holmstrom} {6788 East Cook Avenue} {Port Hedland} TX 77232 suzette656@noway1234.com {Suzette Lewis} {7691 Alamosa Drive} Austin TX 77768 judy@noway1234.com {Judy Sellman} {1831 Mount Kiliak Circle} Townsville TX 77252 peterson661@noway1234.com {Wendell Peterson} {2937 Aspen Court} Kema TX 77554 hershel696@noway1234.com {Hershel Behrends} {708 Secluded Circle} Houston TX 77230 johnson59@noway1234.com {Harold Johnson} {5716 Abbey Lane} Burnie TX 77010 linda621@noway1234.com {Linda Kavanaugh} {10824 Northway Street} Broome TX 77275 gene_hunt@noway1234.com {Gene Hunt} {3377 Leigh Street} Adelaide TX 77448 buck843@noway1234.com {Buck Goemann} {9432 Bothwell Circle} Pattison TX 77230 rowland832@noway1234.com {Annalee Rowland} {1223 Lagoon Circle} Austin TX 77237 virginia714@noway1234.com {Virginia Stewart} {298 Dawn Drive} Dallas TX 77872 fleck461@noway1234.com {Johnson Fleck} {10245 Blair Avenue} Hamilton TX 77362 ona281@noway1234.com {Ona Klein} {11206 Lori Street} Waco TX 77958 j_a_baird@noway1234.com {J.A. Baird} {667 Seacliff Street} Bathurst TX 77082 janet469@noway1234.com {Janet Jochim} {3595 Hollow Street} Hamilton TX 77118 aldana87@noway1234.com {Ann Aldana} {9616 Saturn Circle} Nacogdoches TX 77725 patsi@noway1234.com {Patsi Stinson} {7426 Bridle Circle} Hamilton TX 77816 barden@noway1234.com {Dessie Barden} {8713 Loc Loman Lane} Galveston TX 77343 debbie@noway1234.com {Debbie Wherry} {7454 Moose Road} {Port Hedland} TX 77850 weyers783@noway1234.com {Ruth Weyers} {5534 Westford Lane} Sunnyville TX 77737 mildred311@noway1234.com {Mildred Graff} {3153 Noaya Circle} Centerville TX 77819 dawson_krouse@noway1234.com {Dawson Krouse} {4988 West 70th Circle} {Mount Isa} TX 77763 mudflaps_ellis@noway1234.com {Mudflaps Ellis} {3979 West 30th Avenue} Bendigo TX 77702 norman918@noway1234.com {Norman Gates} {3790 Thunderbird Street} {San Felipe} TX 77930 velma_williams@noway1234.com {Velma Williams} {5054 Eastwood Court} Independence TX 77397 irene971@noway1234.com {Irene Ditlevson} {3823 Reindeer Circle} Katy TX 77929 mary_sherman@noway1234.com {Mary Sherman} {4125 Luliad Circle} Galveston TX 77736 landry61@noway1234.com {Charles Landry} {989 Gunnysack Mine Road} Brookshire TX 77954 t_g@noway1234.com {T.G. Evans} {6313 Copper Mountain Circle} Brookshire TX 77945 kohout@noway1234.com {Wibb Kohout} {11293 Kruger Drive} {San Antonio} TX 77142 elbin@noway1234.com {Elbin Sikyta} {11395 Harrier Circle} {Port Hedland} TX 77260 sears@noway1234.com {Helen Sears} {11454 Mc Crary Road} Adelaide TX 77301 betty679@noway1234.com {Betty Cottingham} {2965 Kigul Circle} Kema TX 77558 bates378@noway1234.com {Peggy Bates} {7141 Boni Street} OOdnadatta TX 77762 hanson689@noway1234.com {Joe Hanson} {7286 Jesse Lee Court} OOdnadatta TX 77856 cox868@noway1234.com {Pat Cox} {9553 Umbarto Nobile Circle} Centerville TX 77750 juanita_sellman@noway1234.com {Juanita Sellman} {5165 Hyatt Street} Bourke TX 77827 harmon703@noway1234.com {Harmon Holben} {7972 Southport Drive} Eucla TX 77507 acie_taylor@noway1234.com {Acie Taylor} {3209 Brandywine Street} Wollongong TX 77103 larry213@noway1234.com {Larry Rademacher} {9344 Carla Street} Queenstown TX 77367 imogee_guenther@noway1234.com {Imogee Guenther} {1839 Denise Circle} Austin TX 77028 hickman_waring@noway1234.com {Hickman Waring} {8641 Hollywood Drive} Broome TX 77096 noralea_conradt@noway1234.com {Noralea Conradt} {1040 Lane Street} Bourke TX 77622 flora_fox@noway1234.com {Flora Fox} {10308 Lynx Way} Wollongong TX 77708 soumpholphakdy925@noway1234.com {Harland Soumpholphakdy} {6307 Trapline Circle} {Padre Island} TX 77473 mcdowell@noway1234.com {Ernest McDowell} {1953 F Street} Hamilton TX 77891 tejral375@noway1234.com {Steph Tejral} {551 North A Street} Galveston TX 77663 gibbs161@noway1234.com {Bob Gibbs} {3346 Francesca Drive} Centerville TX 77852 hamm690@noway1234.com {Mae Hamm} {4676 Glenn Haven Drive} Townsville TX 77208 ronnie@noway1234.com {Ronnie Parrish} {635 Reata Drive} Adelaide TX 77570 a_henrichs@noway1234.com {A. Henrichs} {1258 Kerry Lane} Broome TX 77240 delia@noway1234.com {Delia Ossian} {6655 Cottontail Trail} Pattison TX 77410 judi430@noway1234.com {Judi Amos} {3746 Polly Circle} {Padre Island} TX 77552 gibson791@noway1234.com {Gibson Dieckmann} {10472 San Ernesto Avenue} Kema TX 77807 sara@noway1234.com {Sara Kuhl} {8978 Alumni Drive} {Broken Hill} TX 77684 debra@noway1234.com {Debra Buces} {5982 Mackay Street} Sunnyville TX 77498 elba906@noway1234.com {Elba Hamilton} {9990 Vassar Drive} {Tennant Creek} TX 77878 hamm956@noway1234.com {Mary Hamm} {8806 Jarvis Avenue} Kema TX 77409 zillig@noway1234.com {Kathy Zillig} {3820 Laurie Circle} Launceston TX 77513 boyd203@noway1234.com {Boyd Senesourinh} {6907 Davos Road} Wollongong TX 77025 frame_barden@noway1234.com {Frame Barden} {2923 Walker Circle} Rockhampton TX 77348 farley_siske@noway1234.com {Farley Siske} {7843 Alyeska Highway} Amarillo TX 77474 birnie@noway1234.com {Lois Birnie} {2135 Brudne Road} Hamilton TX 77409 joan77@noway1234.com {Joan Sobotta} {10210 Harbor Circle} {Broken Hill} TX 77598 kitzmiller447@noway1234.com {Kitzmiller Scholl} {1691 Waverly Circle} Hamilton TX 77989 sellhorn@noway1234.com {Anne Sellhorn} {9680 Abbott Loop Road} {Coffs Harbour} TX 77985 beck@noway1234.com {Aundrel Beck} {6958 Barrett Drive} Wollongong TX 77980 meints@noway1234.com {Helen Meints} {3052 Sonora Circle} Wollongong TX 77369 orbit_buces@noway1234.com {Orbit Buces} {6608 Baidarka Street} Albury TX 77852 katherine_boyden@noway1234.com {Katherine Boyden} {9637 Gemini Drive} Centerville TX 77797 olsen@noway1234.com {Woods Olsen} {2156 Parks Street} Nacogdoches TX 77408 malone729@noway1234.com {Averel Malone} {4280 Snow Circle} Queenstown TX 77020 juanita782@noway1234.com {Juanita Walters} {6958 Hare Place} Houston TX 77836 ardie@noway1234.com {Ardie Barden} {699 Expedition Circle} Bourke TX 77337 joyce379@noway1234.com {Joyce Gillette} {8208 East 18th Circle} Eucla TX 77520 joanne620@noway1234.com {Joanne Gregory} {9415 Alta Drive} {Alice Springs} TX 77273 bell@noway1234.com {Bell Jacobsen} {2225 Lake Hill Drive} {Coffs Harbour} TX 77213 lintz@noway1234.com {Given Lintz} {259 Caravelle Drive} Amarillo TX 77484 p_keim@noway1234.com {P. Keim} {6223 Silverberry Loop} Adelaide TX 77220 denny855@noway1234.com {Denny Dillaplain} {4879 Stoltze Drive} {San Felipe} TX 77001 carrol172@noway1234.com {Carrol Horner} {2224 Patricia Lane} Bathurst TX 77332 ferrell@noway1234.com {Ferrell Rieken} {8508 Dorchester Street} Bendigo TX 77751 les_topp@noway1234.com {Les Topp} {6977 Price Drive} Amarillo TX 77990 fyle@noway1234.com {Fyle Ritter} {2435 Kovey Street} Broome TX 77292 spence487@noway1234.com {Doc Spence} {1818 Leary Bay Circle} OOdnadatta TX 77082 deborah938@noway1234.com {Deborah Stewart} {10161 Hardwood Court} {Port Hedland} TX 77368 yoder@noway1234.com {Ermine Yoder} {10615 Troy Street} OOdnadatta TX 77275 ruter499@noway1234.com {Shaffer Ruter} {308 Taiga Street} Katy TX 77416 viola8@noway1234.com {Viola Winkle} {8608 West 95th Avenue} Bendigo TX 77257 berman@noway1234.com {Berman King} {7035 Limestone Circle} Albany TX 77428 mcquire521@noway1234.com {McQuire Cawley} {6137 Lilleston Street} {Coffs Harbour} TX 77373 lykins@noway1234.com {Lykins McCourtney} {6119 Penn Circle} Brookshire TX 77220 hasselbalch@noway1234.com {Doc Hasselbalch} {7681 Long Street} {Coober Pedy} TX 77879 lehenbauer@noway1234.com {Red Lehenbauer} {462 Bonanza Drive} Mildura TX 77175 donald_hagelback@noway1234.com {Donald Hagelback} {3583 Pinnacle Circle} Monaville TX 77091 glenna@noway1234.com {Glenna Hermsmeier} {2618 Inyo Circle} {Padre Island} TX 77997 lantz@noway1234.com {Tinney Lantz} {9673 Ranna Circle} {Port Hedland} TX 77387 nelma811@noway1234.com {Nelma Fox} {2893 Connors Trail Circle} Pattison TX 77934 denice@noway1234.com {Denice Reinhardt} {2668 Shakespeare Circle} Centerville TX 77926 carole@noway1234.com {Carole Reschke} {11296 East 76th Avenue} Kema TX 77998 jewell872@noway1234.com {Hemmingway Jewell} {2530 Rebecca Circle} Newcastle TX 77867 ralph_buethe@noway1234.com {Ralph Buethe} {8614 Winter Ridge Court} Albury TX 77145 freddie_gordon@noway1234.com {Freddie Gordon} {10583 Lord Baranof Drive} Launceston TX 77852 huff@noway1234.com {Waggoner Huff} {7485 Altoona Drive} Centerville TX 77765 rozella_bernadt@noway1234.com {Rozella Bernadt} {3964 Romig Place} Rockhampton TX 77987 mccourtney806@noway1234.com {Elba McCourtney} {11346 Shaw Circle} {Mount Isa} TX 77256 john463@noway1234.com {John Mahar} {83 Lalande Place} Newcastle TX 77569 emanuel_crane@noway1234.com {Emanuel Crane} {3059 Kigul Circle} Hamilton TX 77204 t_doeden@noway1234.com {T. Doeden} {5200 Seville Circle} Bourke TX 77609 moore104@noway1234.com {Moore Robison} {179 Kirov Circle} {Padre Island} TX 77986 oss85@noway1234.com {Oss Clements} {5221 Toyon Avenue} Katy TX 77680 gretta@noway1234.com {Gretta Othmer} {5065 Roosevelt Drive} Launceston TX 77477 joseph@noway1234.com {Joseph Wellensiek} {10570 Sydnie Kay Street} Pattison TX 77056 marilyn930@noway1234.com {Marilyn Morrow} {5580 Northpark Drive} {Port Hedland} TX 77916 rebecca679@noway1234.com {Rebecca Gregory} {2804 Tulwar Circle} Bathurst TX 77179 bonita@noway1234.com {Bonita Rubin} {2097 Vashon Circle} {Mount Gambier} TX 77847 rapp523@noway1234.com {Rapp Jones} {5377 Suneagle Circle} Bendigo TX 77991 pierson@noway1234.com {Pierson Hasselbalch} {7493 Concord Hill Circle} Galveston TX 77064 heidemann@noway1234.com {Donzel Heidemann} {2095 Squaw Valley Circle} Cairns TX 77354 wanda_hunt@noway1234.com {Wanda Hunt} {9483 Early View Drive} Adelaide TX 77759 carter925@noway1234.com {Vera Carter} {5304 Poplar Street} {Coffs Harbour} TX 77490 morse@noway1234.com {John Morse} {5670 East 121st Avenue} Mildura TX 77593 tab434@noway1234.com {Tab Chritton} {4470 King Arthur Circle} Bendigo TX 77584 baughman@noway1234.com {Baughman Craig} {4238 East 31st Avenue} Nacogdoches TX 77741 wherry740@noway1234.com {Cleve Wherry} {8728 Patterson Street} Bendigo TX 77671 maysel_lohmeier@noway1234.com {Maysel Lohmeier} {6319 School Road} Burnie TX 77162 winkle209@noway1234.com {William Winkle} {2609 Caragana Circle} {Mount Gambier} TX 77570 beck792@noway1234.com {Helen Beck} {7895 Klutina Drive} {Padre Island} TX 77471 juilfs@noway1234.com {Wilson Juilfs} {10251 Astonshire Court} {Port Hedland} TX 77865 moslander818@noway1234.com {Kaye Moslander} {771 Laoana Court} {Coober Pedy} TX 77094 durst835@noway1234.com {Lacie Durst} {11170 Artemus Street} Nacogdoches TX 77747 tenhulzen712@noway1234.com {Conner TenHulzen} {2159 Carnaby Way} {San Felipe} TX 77996 morris616@noway1234.com {Morris Pierce} {1025 Coachman Circle} {Coffs Harbour} TX 77135 robinson599@noway1234.com {Rozella Robinson} {9749 Castner Circle} Galveston TX 77200 sears86@noway1234.com {A. Sears} {6898 East Tudor Road} {Port Augusta} TX 77862 higgins@noway1234.com {Margaret Higgins} {11251 Autumn Drive} Galveston TX 77974 julia@noway1234.com {Julia Wagner} {3223 Camelot Drive} {Coffs Harbour} TX 77632 meints477@noway1234.com {Ernest Meints} {4082 Waterfall Circle} Pattison TX 77622 alfred@noway1234.com {Alfred Dollarhide} {8669 Oren Street} Rockhampton TX 77444 douglas403@noway1234.com {Glen Douglas} {2836 Newhaven Loop} Newcastle TX 77994 viola807@noway1234.com {Viola McCain} {5466 Preuss Boulevard} Newcastle TX 77140 royal@noway1234.com {Royal Mcalexander} {1190 Boulder Circle} {San Antonio} TX 77205 hutt@noway1234.com {Plug Hutt} {8133 Windy Circle} Centerville TX 77985 m_d@noway1234.com {M.D. Gottula} {5321 Susitna Drive} Wollongong TX 77244 verlyn@noway1234.com {Verlyn Birnie} {4235 Western Drive} Dallas TX 77121 jean_speckmann@noway1234.com {Jean Speckmann} {5741 Reka Drive} Monaville TX 77781 imogene428@noway1234.com {Imogene Laug} {1250 Toilsome Hill Drive} Burnie TX 77608 speckmann181@noway1234.com {Walter Speckmann} {4663 Hilltop Drive} Adelaide TX 77709 dumitru303@noway1234.com {Nora Dumitru} {11911 Denson Lane} Bendigo TX 77183 cora_hasselbalch@noway1234.com {Cora Hasselbalch} {2028 Chris Court} Queenstown TX 77710 roena_piersol@noway1234.com {Roena Piersol} {11593 Alpha Circle} Brookshire TX 77201 dawson_lofgren@noway1234.com {Dawson Lofgren} {2688 Meadow Road} Mildura TX 77549 geanine@noway1234.com {Geanine Snow} {4510 Misty Mountain Road} Nacogdoches TX 77390 caroline@noway1234.com {Caroline Spence} {9702 Snowberry Loop} Austin TX 77337 martin@noway1234.com {Aldridge Martin} {5060 Mountain Way} Burnie TX 77588 field286@noway1234.com {Morrow Field} {9153 West 42nd Avenue} Centerville TX 77872 freeman@noway1234.com {Freeman Beethe} {422 Criswell Circle} Wollongong TX 77269 graff358@noway1234.com {Vaughn Graff} {10178 Klamath Falls Lane} Cairns TX 77190 strousie@noway1234.com {Strousie Wright} {3946 Old Seward Highway} {Coober Pedy} TX 77141 bobby@noway1234.com {Bobby Thurber} {8820 Kent Avenue} Monaville TX 77079 beatrice@noway1234.com {Beatrice Curry} {803 Jacqueline Circle} Launceston TX 77592 charles111@noway1234.com {Charles Fleck} {10741 Dorbrandt Street} Townsville TX 77695 goff886@noway1234.com {Goff Aust} {2015 Majella Circle} {Mount Isa} TX 77508 jeri@noway1234.com {Jeri Bohung} {2468 Fischer Avenue} Newcastle TX 77491 sobotta266@noway1234.com {Stewart Sobotta} {1206 Mirror Lake Drive} Austin TX 77833 h_j_meister@noway1234.com {H.J. Meister} {5359 Lavender Lane} Kema TX 77453 mary257@noway1234.com {Mary Parrisb} {11612 Misty Springs Court} Houston TX 77137 aletha@noway1234.com {Aletha VanLaningham} {9318 Berthod Way} {Tennant Creek} TX 77790 dorthy922@noway1234.com {Dorthy Mann} {10045 Bridger Circle} {San Antonio} TX 77186 colton944@noway1234.com {Minnie Colton} {7363 Austin Avenue} {Port Hedland} TX 77283 brown595@noway1234.com {Brown Morse} {2060 Brandy Circle} Broome TX 77256 hartman914@noway1234.com {Merlin Hartman} {10447 Foothill Circle} Eucla TX 77232 mildred935@noway1234.com {Mildred Reschke} {7500 East 135th Avenue} {Padre Island} TX 77166 add@noway1234.com {Add DeFreece} {779 Tundra Court} {Coober Pedy} TX 77262 ida101@noway1234.com {Ida Hinkle} {9653 Greenscreek Circle} Hamilton TX 77325 winkle340@noway1234.com {Allen Winkle} {2669 West Zeus Circle} Pattison TX 77046 emily_hamilton@noway1234.com {Emily Hamilton} {6374 East 96th Court} Ketherine TX 77449 doc_keim@noway1234.com {Doc Keim} {5063 Lilac Drive} Mildura TX 77901 sylvester614@noway1234.com {Sylvester Mason} {9636 Lane Circle} Rockhampton TX 77138 j_t@noway1234.com {J.T. Mathis} {779 Bay View Drive} Eucla TX 77423 sec503@noway1234.com {Sec Moslander} {1861 Helvetia Drive} Waco TX 77596 mahoney395@noway1234.com {April Mahoney} {2651 Debbie Drive} Galveston TX 77982 j456@noway1234.com {J. Young} {1464 Early View Drive} Cairns TX 77929 norvell@noway1234.com {Merle Norvell} {4751 Muriel Place} Queenstown TX 77380 allan@noway1234.com {Allan Christensen} {1465 Beachwood Circle} {Alice Springs} TX 77051 phillips631@noway1234.com {Eugene Phillips} {2316 Soldotna Drive} Sunnyville TX 77021 guenther473@noway1234.com {Sue Guenther} {7173 Parks Street} {Tennant Creek} TX 77844 jefferson_packett@noway1234.com {Jefferson Packett} {415 Echo Drive} {Coffs Harbour} TX 77410 ray741@noway1234.com {Dr. Ray} {2361 Killey Street} Austin TX 77439 norris364@noway1234.com {Norris Clark} {894 Cape Noble Circle} {Alice Springs} TX 77797 hoke349@noway1234.com {Blake Hoke} {10802 Stoltze Drive} Houston TX 77845 hazen793@noway1234.com {Anna Hazen} {10709 Kelly Maureen Circle} OOdnadatta TX 77236 beard@noway1234.com {Beard Hamilton} {6561 Birch Run Circle} Ketherine TX 77290 emil409@noway1234.com {Emil Dills} {11354 Greenbrook Drive} {Port Augusta} TX 77633 henderson236@noway1234.com {Henderson Carpenter} {9920 Raymond Avenue} Tamworth TX 77146 whitehead460@noway1234.com {Quinton Whitehead} {9644 Walnut Circle} Albany TX 77058 ruth769@noway1234.com {Ruth Pope} {9827 Strawberry Road} {Port Augusta} TX 77035 royce@noway1234.com {Royce McNergney} {9490 Justin Circle} Star TX 77499 beethe@noway1234.com {Douglas Beethe} {2742 East 90th Avenue} OOdnadatta TX 77550 montz834@noway1234.com {Corliss Montz} {477 Mael Street} {Mount Isa} TX 77825 carmel@noway1234.com {Carmel Holden} {2537 West Tudor Road} Queenstown TX 77243 white198@noway1234.com {White Rademacher} {9252 Dunkirk Drive} Tamworth TX 77114 bicknell497@noway1234.com {Tyburtis Bicknell} {3640 Valley Park Drive} Independence TX 77212 jean515@noway1234.com {Jean Fleck} {1119 Carl Street} Tamworth TX 77230 ullman776@noway1234.com {Verlyn Ullman} {10054 Tengberg Avenue} Kema TX 77673 jesse425@noway1234.com {Jesse Husing} {5683 Southpark Loop} Ketherine TX 77630 charlotte119@noway1234.com {Charlotte McCain} {7906 West 31st Avenue} {Padre Island} TX 77358 verna880@noway1234.com {Verna Nielsen} {1768 Lower Sunny Circle} Cairns TX 77136 morrow_yates@noway1234.com {Morrow Yates} {5626 Prince Circle} Rockhampton TX 77847 early518@noway1234.com {Early Leahy} {8099 2nd Avenue} Houston TX 77115 eunice70@noway1234.com {Eunice Speckmann} {4194 Outcrop Lane} OOdnadatta TX 77170 melvina966@noway1234.com {Melvina Steinmeyer} {2337 South Aircraft Drive} Pattison TX 77735 herman52@noway1234.com {Rue Herman} {8779 Snowcup Circle} Albany TX 77407 dominic854@noway1234.com {Dominic Staley} {271 Reese Road} Launceston TX 77560 add631@noway1234.com {Add Armknecht} {600 Valley Vista Circle} Burnie TX 77716 carsell@noway1234.com {Carsell Dwinell} {6989 Gosling Circle} Pattison TX 77873 prussia769@noway1234.com {Prussia Lintz} {3507 East 64th Avenue} {Coffs Harbour} TX 77250 phommachan@noway1234.com {F. Phommachan} {9128 Alpha Circle} {Tennant Creek} TX 77539 dolly_philippi@noway1234.com {Dolly Philippi} {5919 Walker Circle} Launceston TX 77000 bennie@noway1234.com {Bennie Oltman} {11596 Career Center Drive} {Padre Island} TX 77074 morris845@noway1234.com {Morris Baucke} {11419 Upper Lowland Avenue} {Broken Hill} TX 77120 smith_rowe@noway1234.com {Smith Rowe} {4122 Wilma Avenue} Brookshire TX 77160 everett653@noway1234.com {Everett Gottula} {9343 O Place} Queenstown TX 77993 dodrill910@noway1234.com {Dodrill Pluta} {6516 Cherrier Street} {San Antonio} TX 77177 coby186@noway1234.com {Coby VanLaningham} {9652 Granite Place} Adelaide TX 77382 cab_wellensiek@noway1234.com {Cab Wellensiek} {8997 Smaldon Street} OOdnadatta TX 77972 herman23@noway1234.com {policeman Herman} {7218 Riffle Lane} Katy TX 77220 miner114@noway1234.com {Arial Miner} {8062 Gorlanof Lane} Katy TX 77936 tagart37@noway1234.com {nurse Tagart} {8784 Noaya Circle} Sunnyville TX 77666 grogg@noway1234.com {Grogg Philippi} {6401 Hocker Place} Bathurst TX 77652 charlene@noway1234.com {Charlene Hesman} {3028 West 121st Circle} {Mount Isa} TX 77920 pete@noway1234.com {Pete Oestmann} {10042 East 154th Avenue} Pattison TX 77919 perry462@noway1234.com {Perry Rathe} {10320 Cutwater Court} Tamworth TX 77870 rita552@noway1234.com {Rita Krause} {1219 Beamreach Court} Adelaide TX 77198 piersol304@noway1234.com {Delmar Piersol} {11781 Hardwood Court} {Mount Isa} TX 77582 topp603@noway1234.com {Aletha Topp} {5578 East 7th Avenue} Austin TX 77220 j24@noway1234.com {J. Houmann} {5140 Breezewood Drive} {Padre Island} TX 77953 t_peek@noway1234.com {T. Peek} {247 East 2nd Avenue} Tamworth TX 77771 shelby_harms@noway1234.com {Shelby Harms} {5099 Crescent Avenue} {Padre Island} TX 77077 bea@noway1234.com {Bea Troeger} {8787 Eklutna Village Road} Amarillo TX 77930 nona_kuhl@noway1234.com {Nona Kuhl} {9737 Atwood Drive} {Mount Isa} TX 77446 harrison@noway1234.com {Harrison Mahar} {2515 Red Talon Circle} OOdnadatta TX 77230 bern@noway1234.com {Bern Bischoff} {4909 Hanning Bay Circle} Austin TX 77277 odis@noway1234.com {Odis Carman} {6232 Gstaad Way} Houston TX 77220 sam@noway1234.com {Sam Johnson} {8216 Camden Circle} Star TX 77985 ammar@noway1234.com {Ammar Funkhouser} {4252 Zaikof Circle} Bathurst TX 77536 rennie_jochim@noway1234.com {Rennie Jochim} {3543 Halyards Circle} Kema TX 77542 josephine122@noway1234.com {Josephine Wheeler} {5418 Jennifer Ann Circle} Austin TX 77359 carlene@noway1234.com {Carlene Cox} {9383 Kitlina Circle} {Coober Pedy} TX 77201 grizilla815@noway1234.com {Grizilla Rau} {8187 North River Drive} Independence TX 77936 carney_cary@noway1234.com {Carney Cary} {373 Kensington Drive} Bathurst TX 77957 byrne719@noway1234.com {Byrne Lock} {1467 Kluane Avenue} Albany TX 77540 speckmann157@noway1234.com {Rod Speckmann} {11911 L Street} {Port Hedland} TX 77278 tanner605@noway1234.com {Tanner Doeden} {5839 Yarnot Avenue} {Broken Hill} TX 77620 miner978@noway1234.com {Colluzzi Miner} {1635 Leander Circle} Mildura TX 77736 masur905@noway1234.com {Dr. Masur} {11769 Noak Circle} Dallas TX 77235 jeanette963@noway1234.com {Jeanette McCourtney} {7829 Jehovahjireh Street} Broome TX 77654 gottula51@noway1234.com {Frame Gottula} {11769 Yarnot Avenue} Centerville TX 77220 parrisb634@noway1234.com {Butcher Parrisb} {5824 Austria Drive} {Tennant Creek} TX 77260 noudaranouvong838@noway1234.com {Popcorn Noudaranouvong} {9043 Aldren Circle} Brookshire TX 77429 ensor865@noway1234.com {Morris Ensor} {2943 Lichen Place} {Coffs Harbour} TX 77347 bonita794@noway1234.com {Bonita Scott} {8019 Shemya Drive} {Broken Hill} TX 77619 knippelmeyer@noway1234.com {Dodrill Knippelmeyer} {3508 Woodchase Circle} {Coober Pedy} TX 77802 lilly563@noway1234.com {Lilly Ruby} {7674 Spring Street} Bendigo TX 77476 robert99@noway1234.com {Robert Borrenphol} {10864 Loc Loman Lane} Newcastle TX 77461 wilbur_armknecht@noway1234.com {Wilbur Armknecht} {5013 Carolyn Street} Queenstown TX 77449 huttenmeyer@noway1234.com {Marie Huttenmeyer} {3294 Abbott Road} {Padre Island} TX 77579 elmie@noway1234.com {Elmie Gregory} {7116 Balchen Drive} Pattison TX 77504 lou_horn@noway1234.com {Lou Horn} {5301 West 62nd Avenue} {Coffs Harbour} TX 77031 butcher789@noway1234.com {Butcher Goings} {380 Oilwell Road} {Coffs Harbour} TX 77328 curt_straube@noway1234.com {Curt Straube} {11540 De Armoun Road} Eucla TX 77356 zappa805@noway1234.com {Butcher Zappa} {6917 David Avenue} Sunnyville TX 77257 reinhardt50@noway1234.com {Mahetable Reinhardt} {6542 Juneau Street} Broome TX 77913 kage398@noway1234.com {Wilson Kage} {10846 Norton Drive} Kema TX 77610 mark182@noway1234.com {Mark Speckmann} {3360 Lane Street} Katy TX 77178 higgins692@noway1234.com {Myron Higgins} {11316 Garfield Street} Burnie TX 77763 flavy4@noway1234.com {Flavy Field} {92 Queen Victoria Drive} Dallas TX 77489 mable_hershberger@noway1234.com {Mable Hershberger} {405 Jewel Street} {Alice Springs} TX 77548 vrbka@noway1234.com {Young Vrbka} {7060 Glenn Court} Bathurst TX 77451 c436@noway1234.com {C. Lempka} {6078 Pyramid Drive} Centerville TX 77119 gates550@noway1234.com {Dessie Gates} {957 Lauren Creek Loop} {Mount Gambier} TX 77376 pierce723@noway1234.com {Dane Pierce} {6685 Quartz Avenue} {Broken Hill} TX 77493 rathe988@noway1234.com {Mildred Rathe} {808 Duvoy Court} Kema TX 77999 peterson106@noway1234.com {Gumm Peterson} {1695 Cheechako Street} Broome TX 77170 kohout212@noway1234.com {Rene Kohout} {11056 Jill Place} Launceston TX 77314 hansford897@noway1234.com {Hansford Miller} {9834 Lobdell Street} Ketherine TX 77191 warnke277@noway1234.com {Dr. Warnke} {4446 Konrad Circle} Rockhampton TX 77423 esther@noway1234.com {Esther Eells} {10769 Clairborne Drive} Independence TX 77382 viola583@noway1234.com {Viola Graff} {6469 Lake Hill Drive} Bendigo TX 77262 rosakrans11@noway1234.com {Loring Rosakrans} {2521 Ambassador Drive} Mildura TX 77528 blankenship@noway1234.com {Blankenship Thom} {8877 Nitoanya Circle} Wollongong TX 77028 carte494@noway1234.com {Carte Weiss} {9382 Lupine Drive} Queenstown TX 77817 pearl107@noway1234.com {Pearl Christen} {614 Hillandale Avenue} {Broken Hill} TX 77701 grass@noway1234.com {Les Grass} {10656 Camila Court} Amarillo TX 77160 doc693@noway1234.com {Doc Bengtsson} {5691 Goldenview Park Drive} Launceston TX 77726 lafrance@noway1234.com {Homer LaFrance} {157 East 92nd Avenue} Launceston TX 77976 eunice564@noway1234.com {Eunice Rosakrans} {8314 Tahoe Road} Katy TX 77566 norval@noway1234.com {Norval Grof} {8914 Limestone Circle} Newcastle TX 77820 menard968@noway1234.com {Florence Menard} {3899 Homestead Road} Mildura TX 77882 jenny@noway1234.com {Jenny Wilhelm} {8828 Ptarmigan Court} Rockhampton TX 77766 tortie@noway1234.com {Tortie Pohlman} {6080 Pinto Circle} Tamworth TX 77511 john_chard@noway1234.com {John Chard} {7372 University Drive} {Padre Island} TX 77260 punk989@noway1234.com {Punk Hanau} {5813 Parker Place} Adelaide TX 77031 delorsis@noway1234.com {Delorsis Hutt} {7470 Hemlock Circle} Broome TX 77147 coulter_xayaphonesongkham@noway1234.com {Coulter Xayaphonesongkham} {11541 Race Circle} Bathurst TX 77915 bernard811@noway1234.com {Bernard Doeden} {11247 Beechcraft Drive} Dallas TX 77777 norma_wilmes@noway1234.com {Norma Wilmes} {10269 Jones Avenue} Dallas TX 77680 grable106@noway1234.com {G.W. Grable} {2869 East 94th Avenue} Ketherine TX 77675 keener_pieratt@noway1234.com {Keener Pieratt} {744 Valley Park Drive} Ketherine TX 77693 audra@noway1234.com {Audra Aufdenkamp} {10569 Paxson Drive} Bourke TX 77021 eleanor_ruter@noway1234.com {Eleanor Ruter} {517 Brittany Drive} OOdnadatta TX 77760 cary661@noway1234.com {Vera Cary} {10682 Innes Circle} Queenstown TX 77591 bray@noway1234.com {J. Bray} {3385 Cranberry Street} Broome TX 77735 lillie141@noway1234.com {Lillie Krouse} {243 Ril Circle} {Padre Island} TX 77188 schultz253@noway1234.com {Hedgmond Schultz} {5796 Duvoy Court} {San Felipe} TX 77036 peters636@noway1234.com {Volmer Peters} {9280 Clover Lane} Monaville TX 77927 evelyn@noway1234.com {Evelyn Stangel} {9549 Midland Place} Monaville TX 77567 mcalexander279@noway1234.com {Ira McAlexander} {10876 Raymond Drive} Austin TX 77025 bernard687@noway1234.com {Bernard Earhart} {5479 Harrison Street} Brookshire TX 77698 robinson_pluta@noway1234.com {Robinson Pluta} {7866 Commons Place} {San Felipe} TX 77580 othmer@noway1234.com {Mitzi Othmer} {4299 Loch Circle} {Tennant Creek} TX 77584 jessie374@noway1234.com {Jessie Finfrock} {1318 Checkmate Drive} Rockhampton TX 77312 cumbers@noway1234.com {cumbers Horner} {6597 Jefferson Avenue} Austin TX 77559 jo_dittmer@noway1234.com {Jo Dittmer} {9243 Berryman Lane} {San Antonio} TX 77060 martin774@noway1234.com {Martin Whitehead} {5281 Pearl Drive} Eucla TX 77372 huff279@noway1234.com {Lawrence Huff} {10950 Sroufe Street} Brookshire TX 77396 kevin_fritsch@noway1234.com {Kevin Fritsch} {11034 Cumberland Circle} Bendigo TX 77669 warter@noway1234.com {Warter Whitehead} {2252 Midnight Sun Court} Waco TX 77850 shirlee756@noway1234.com {Shirlee Scherrer} {10639 Spruce Crest Drive} Broome TX 77109 wilson664@noway1234.com {Wilson Meister} {5627 Charing Cross Circle} Bendigo TX 77927 dodrill469@noway1234.com {Dodrill Kroeze} {1070 See Saw Avenue} Cairns TX 77208 joan_rowe@noway1234.com {Joan Rowe} {4741 San Jeronimo Court} Eucla TX 77704 mckinney436@noway1234.com {Hamrick McKinney} {5147 Center Street} Amarillo TX 77111 buttermilk322@noway1234.com {Buttermilk Brammann} {7486 Orange Leaf Circle} Star TX 77868 seeba@noway1234.com {Eva Seeba} {1829 Rose Street} Ketherine TX 77376 vanlaningham245@noway1234.com {Henderson VanLaningham} {2000 Russian Jack Drive} Rockhampton TX 77996 taylor933@noway1234.com {Fredrick Taylor} {2685 Hooper Way} Bathurst TX 77937 emie@noway1234.com {Emie Pella} {7931 Kalgin Street} Independence TX 77563 bradley@noway1234.com {Bradley Shew} {155 Crawford Street} Albury TX 77670 a375@noway1234.com {A. Finfrock} {10027 Steamboat Drive} Tamworth TX 77936 branting857@noway1234.com {Orian Branting} {6643 Tikishla Street} {Port Hedland} TX 77348 radia@noway1234.com {Radia Chritton} {2252 Parsons Avenue} {Broken Hill} TX 77428 dorthy810@noway1234.com {Dorthy Wilson} {11820 Jaguar Circle} Burnie TX 77342 norma440@noway1234.com {Norma Baucke} {5010 East 15th Avenue} Bathurst TX 77682 dennis143@noway1234.com {Dennis Schlender} {9004 Roma Drive} Galveston TX 77018 seibert@noway1234.com {Seibert Young} {11035 Lakehurst Circle} Houston TX 77353 newt@noway1234.com {Newt McNergney} {10712 Aspen Way} Dallas TX 77422 vada@noway1234.com {Vada Feurer} {7687 Panorama Drive} Wollongong TX 77824 kuhl77@noway1234.com {Walker Kuhl} {5224 Juniper Drive} Amarillo TX 77032 logsdon8@noway1234.com {Dixie Logsdon} {11166 Sprucewood Street} {Broken Hill} TX 77991 bernice497@noway1234.com {Bernice Jones} {11620 Whaler Drive} Bourke TX 77255 teacher@noway1234.com {Teacher Rother} {5435 Christensen Drive} Hamilton TX 77147 clifton684@noway1234.com {Jane Clifton} {6307 Tyre Drive} Centerville TX 77930 a_kage@noway1234.com {A. Kage} {2297 Poseidon Drive} Bourke TX 77119 milton@noway1234.com {Milton Dwinell} {4059 East Loop Road} Ketherine TX 77239 corley@noway1234.com {Corley Aden} {7991 Gilbert Road} Nacogdoches TX 77898 mike_behrends@noway1234.com {Mike Behrends} {683 Degan Street} Monaville TX 77387 xayaphonesongkham720@noway1234.com {Harrison Xayaphonesongkham} {10139 Cherni Circle} Bourke TX 77902 oltman283@noway1234.com {S. Oltman} {5598 Dogwood Street} {Broken Hill} TX 77826 frame_amos@noway1234.com {frame Amos} {9184 Waldorf Woods Drive} Pattison TX 77599 beulah_blythe@noway1234.com {Beulah Blythe} {2074 Galloway Loop} Rockhampton TX 77776 herman30@noway1234.com {Flora Herman} {10130 Image Drive} Mildura TX 77217 alferd@noway1234.com {Alferd Kaufman} {868 Tahoe Circle} Townsville TX 77896 hooper@noway1234.com {Hooper Ruter} {9999 Aldren Circle} Centerville TX 77025 scott699@noway1234.com {Lucille Scott} {7331 Lake Street} Albany TX 77558 acree91@noway1234.com {Acree Norvell} {7916 View Heights Way} Burnie TX 77995 esker@noway1234.com {Esker Hervey} {11779 Tony Circle} {Coober Pedy} TX 77348 lanty@noway1234.com {Lanty Ritter} {11445 Louise Court} Tamworth TX 77167 rebecca612@noway1234.com {Rebecca Bailey} {3517 East 35th Avenue} Broome TX 77892 pino249@noway1234.com {Pino Knock} {1414 River Park Circle} Katy TX 77358 edwin248@noway1234.com {Edwin Young} {10973 Guillemot Circle} Centerville TX 77032 victor@noway1234.com {Victor Osterhoudt} {3633 Valley Forge Circle} Eucla TX 77769 marple947@noway1234.com {Marple Miner} {11707 Elcadore Drive} Wollongong TX 77164 roger@noway1234.com {Roger Laug} {4642 Ledora Circle} {Mount Gambier} TX 77334 lula985@noway1234.com {Lula Buces} {11489 West 41st Avenue} {Alice Springs} TX 77108 verna992@noway1234.com {Verna Schafer} {5530 Broadwater Drive} Houston TX 77396 charlotte109@noway1234.com {Charlotte Pan} {6761 Snowmobile Lane} Katy TX 77937 bowers253@noway1234.com {Bowers Giittinger} {2500 East 58th Circle} Queenstown TX 77538 oat158@noway1234.com {Oat Brammann} {10049 Breeze Court} {Port Augusta} TX 77690 ebeler269@noway1234.com {Opal Ebeler} {4869 Scarborough Drive} Broome TX 77159 ramsey436@noway1234.com {Ellis Ramsey} {1792 Lloyd Drive} Kema TX 77279 dodrill182@noway1234.com {Dodrill Suydan} {4576 Shelly Marie Circle} {Port Augusta} TX 77951 elkins_whitehead@noway1234.com {Elkins Whitehead} {5914 Bunnyshoe Circle} Bendigo TX 77397 brown_rau@noway1234.com {Brown Rau} {9712 O'brien Avenue} Kema TX 77926 yates66@noway1234.com {Bezel Yates} {9238 Dana Street} Rockhampton TX 77341 norris823@noway1234.com {Norris Murphy} {7040 West 54th Avenue} {Tennant Creek} TX 77796 walter_clements@noway1234.com {Walter Clements} {11375 Lake Otis (old) Parkway} Sunnyville TX 77853 rush_parrisb@noway1234.com {Rush Parrisb} {11685 Nelchina Street} {Port Augusta} TX 77612 johnson_reynolds@noway1234.com {Johnson Reynolds} {1864 Wild Iris Circle} Kema TX 77700 hazle@noway1234.com {Hazle Murphy} {3049 Skylark Avenue} {Coober Pedy} TX 77984 lytal185@noway1234.com {Lytal Kohout} {7795 Chapel Drive} Waco TX 77608 jewell927@noway1234.com {Annie Jewell} {9478 Nantucket Loop} Waco TX 77493 christensen746@noway1234.com {Casto Christensen} {9788 Philadelphia Way} Amarillo TX 77295 vickie_holthus@noway1234.com {Vickie Holthus} {9653 Woodmar Place} Waco TX 77454 clevenger@noway1234.com {Clevenger Oldfather} {10710 Loch Circle} Houston TX 77755 lintz782@noway1234.com {Wanda Lintz} {5252 Ramsey Road} {Broken Hill} TX 77704 bingley_husing@noway1234.com {Bingley Husing} {11932 East 78th Avenue} Dallas TX 77788 eltiste118@noway1234.com {Legg Eltiste} {1919 Rockridge Drive} Broome TX 77919 schmid@noway1234.com {Moon Schmid} {9831 West Frontage Road} Albury TX 77606 silvin@noway1234.com {Silvin McKinney} {4386 Talkeetna Street} Star TX 77652 butler59@noway1234.com {Wilson Butler} {7 Poppy Lane} Townsville TX 77960 cheisie@noway1234.com {Cheisie Steinauer} {4036 Redoubt Court} Launceston TX 77558 mollahan@noway1234.com {Mollahan Pieratt} {10037 Orth Circle} Kema TX 77056 charlotte236@noway1234.com {Charlotte Finn} {10811 Wagner Street} Cairns TX 77241 jewell822@noway1234.com {Vina Jewell} {6877 Crow's Nest Circle} Katy TX 77115 phillips_juilfs@noway1234.com {Phillips Juilfs} {2359 Sherilynn Street} Townsville TX 77140 harold124@noway1234.com {Harold Swanson} {3522 Hollyberry Circle} {Coffs Harbour} TX 77748 jarvis660@noway1234.com {Jarvis Gregory} {9787 Truro Drive} Rockhampton TX 77916 credis@noway1234.com {Credis Robison} {3623 Rusnak Street} Wollongong TX 77471 johnny_rauner@noway1234.com {Johnny Rauner} {11354 Monte Road} Launceston TX 77129 garland168@noway1234.com {Garland Miesbach} {6808 Rose Street} Broome TX 77728 betty_britt@noway1234.com {Betty Britt} {11019 Twolots Circle} {Broken Hill} TX 77285 judy643@noway1234.com {Judy Morse} {6193 Clements Drive} Cairns TX 77559 borrenphol346@noway1234.com {Acie Borrenphol} {9189 Chelatna Circle} Star TX 77104 beethe664@noway1234.com {Edwin Beethe} {5178 Barat Circle} OOdnadatta TX 77679 stover196@noway1234.com {Dennis Stover} {5672 Alyeska Avenue} OOdnadatta TX 77272 harrison_leahy@noway1234.com {Harrison Leahy} {328 Draper Drive} {Coober Pedy} TX 77891 dorothy@noway1234.com {Dorothy Huttenmeyer} {7246 Prominence Pointe Drive} Hamilton TX 77543 tucker_fleck@noway1234.com {Tucker Fleck} {7379 Hideaway Lake Drive} Katy TX 77059 vaughn_mason@noway1234.com {Vaughn Mason} {5384 West Fireweed Lane} Rockhampton TX 77426 nadine@noway1234.com {Nadine Mandery} {10458 Elsie Place} Amarillo TX 77263 jen@noway1234.com {Jen Hindera} {509 Campbell Terrace Drive} {San Antonio} TX 77979 gibbs846@noway1234.com {Dawson Gibbs} {6063 Jill Street} Ketherine TX 77415 lillian@noway1234.com {Lillian Scherrer} {8423 Riffle Lane} {Port Augusta} TX 77681 morris335@noway1234.com {Morris Colton} {11927 Lunar Drive} Dallas TX 77479 thompson956@noway1234.com {Averel Thompson} {11660 Poseidon Drive} Brookshire TX 77947 bennett297@noway1234.com {Nicholas Bennett} {8008 Hillcrest Drive} {Mount Gambier} TX 77624 hitzeman611@noway1234.com {Norma Hitzeman} {11413 Telequana Drive} Bourke TX 77292 mary374@noway1234.com {Mary Taylor} {10294 Rowan Street} Sunnyville TX 77376 bernadine@noway1234.com {Bernadine Sand} {4668 Portugal Place} Launceston TX 77886 belle116@noway1234.com {Belle Schermbeck} {8957 Potter Glen Circle} Centerville TX 77796 harley@noway1234.com {Harley Mapes} {6225 Marquez Circle} Waco TX 77460 joy681@noway1234.com {Joy Pettinger} {2736 Prospect Drive} Albany TX 77617 mane_agena@noway1234.com {Mane Agena} {3905 Resurrection Drive} Burnie TX 77254 josie@noway1234.com {Josie Hemmer} {5523 Holden Drive} Independence TX 77558 osbome636@noway1234.com {Osbome Hartman} {8785 Wiley Post Place} Hamilton TX 77915 etta297@noway1234.com {Etta Lempka} {419 Rusnak Street} Townsville TX 77180 pella747@noway1234.com {Donohue Pella} {5396 West 70th Place} Sunnyville TX 77970 altman@noway1234.com {Morris Altman} {9739 West Franklin Drive} Centerville TX 77352 john681@noway1234.com {John Finn} {6972 Rendezvous Circle} {Tennant Creek} TX 77168 sybil@noway1234.com {Sybil Cawley} {6504 Howard Avenue} Sunnyville TX 77659 gobbie@noway1234.com {Gobbie Hayes} {5453 Hightower Road} Star TX 77477 christopher81@noway1234.com {Christopher Greeb} {10281 Ames Avenue} Katy TX 77795 tab_triplett@noway1234.com {Tab Triplett} {2611 Caplina Drive} {Broken Hill} TX 77816 ruter932@noway1234.com {Freda Ruter} {1255 Papago Place} Star TX 77309 t96@noway1234.com {T. Lempke} {5697 Kiyona Court} Tamworth TX 77951 opal_seward@noway1234.com {Opal Seward} {10396 Roald Amundsen Avenue} {Padre Island} TX 77156 herbert954@noway1234.com {Herbert Snow} {4136 Sleeping Lady Lane} {Coffs Harbour} TX 77074 kallai896@noway1234.com {Kallai Bailey} {9943 Ricky Road} Queenstown TX 77637 grof@noway1234.com {Fanny Grof} {11377 East 9th Court} Pattison TX 77474 wachosky@noway1234.com {Steel Wachosky} {5296 Clark Street} Dallas TX 77601 dodrill_hupka@noway1234.com {Dodrill Hupka} {9087 Union Way} {Broken Hill} TX 77495 grosse77@noway1234.com {Larry Grosse} {8144 Lane Street} Mildura TX 77754 carolene@noway1234.com {Carolene Bohling} {6747 Brandilyn Street} {Mount Isa} TX 77148 cecil_huttenmeyer@noway1234.com {Cecil Huttenmeyer} {8605 Victor Road} Bendigo TX 77587 rubt70@noway1234.com {Rubt Mahler} {6542 Dotie's Drive} Galveston TX 77245 keith_noudaranouvong@noway1234.com {Keith Noudaranouvong} {11420 Hooper Circle} Katy TX 77626 brenford_noudaranouvong@noway1234.com {Brenford Noudaranouvong} {2489 Theodore Drive} {Coffs Harbour} TX 77424 cheryle@noway1234.com {Cheryle Lang} {7513 Andover Drive} {Coober Pedy} TX 77405 wachosky639@noway1234.com {Maysel Wachosky} {9033 Nikita Drive} {Tennant Creek} TX 77618 dorwin@noway1234.com {Dorwin Rinne} {1177 Calista Court} Eucla TX 77352 brown166@noway1234.com {Becky Brown} {8902 Kathy Place} {Broken Hill} TX 77278 patty61@noway1234.com {Patty Pettinger} {4521 Norman Street} Austin TX 77771 rayburn@noway1234.com {Rayburn DeFreece} {2265 Tamworth Circle} Rockhampton TX 77015 jones228@noway1234.com {Estella Jones} {1321 Lake Otis Road} Bathurst TX 77611 mane490@noway1234.com {Mane Straube} {146 Westview Circle} Townsville TX 77122 emily767@noway1234.com {Emily Rowland} {4827 Lindsey Drive} Burnie TX 77929 t887@noway1234.com {T. Grass} {6470 Tayshee Circle} Bathurst TX 77014 bates667@noway1234.com {Paul Bates} {2297 Spinnaker Drive} {Coober Pedy} TX 77893 frankie@noway1234.com {Frankie Doty} {5521 Audubon Circle} Broome TX 77587 eda@noway1234.com {Eda Seeba} {2313 Carline Circle} Nacogdoches TX 77620 mildred181@noway1234.com {Mildred Sorensen} {7775 Solarset Circle} Nacogdoches TX 77586 urich@noway1234.com {Smith Urich} {1400 Tinian Street} {Coober Pedy} TX 77299 kavanaugh56@noway1234.com {A. Kavanaugh} {7816 Lamb Drive} Star TX 77781 smith983@noway1234.com {Smith Scott} {6067 West 79th Court} {San Felipe} TX 77291 robison717@noway1234.com {Helen Robison} {7972 Misty Mountain Circle} Rockhampton TX 77982 kathleen700@noway1234.com {Kathleen Miner} {8724 Amber Bay Loop} {Coober Pedy} TX 77479 gillette540@noway1234.com {Red Gillette} {7555 Anchorage Port Road} Townsville TX 77305 everett842@noway1234.com {Everett Cox} {9950 Brink Drive} Dallas TX 77805 erie@noway1234.com {Erie Richard} {7680 Stowe Circle} Launceston TX 77616 ones@noway1234.com {Ones Speckmann} {7894 Wildwood Street} Albany TX 77043 etta526@noway1234.com {Etta Thongkhamvilay} {2667 Beach Lake Road} Independence TX 77718 norma996@noway1234.com {Norma Jewell} {9635 Tieszen Avenue} Ketherine TX 77837 sellhorn6@noway1234.com {Blake Sellhorn} {687 F Street} Bendigo TX 77045 virginia452@noway1234.com {Virginia Schroder} {2002 Ursa Major Circle} Katy TX 77362 rowland763@noway1234.com {Mullins Rowland} {2400 Gardner Street} Broome TX 77270 horstman76@noway1234.com {Scott Horstman} {82 Falling Water Circle} Kema TX 77725 olsen897@noway1234.com {E.Burns Olsen} {4470 Cross Road} Mildura TX 77161 piersol636@noway1234.com {Russell Piersol} {8176 Breckenridge Circle} Centerville TX 77001 woltemath@noway1234.com {Bernard Woltemath} {9881 Colwell Street} {Port Hedland} TX 77544 kerchal775@noway1234.com {Kay Kerchal} {11999 Mount Mc Kinley View Drive} Tamworth TX 77800 wenzl@noway1234.com {Tenney Wenzl} {6426 Railroad Avenue} OOdnadatta TX 77351 hargis685@noway1234.com {Rozella Hargis} {10455 Torkelson Circle} Bendigo TX 77394 herman954@noway1234.com {Dr. Herman} {3602 New Smyrna Circle} {Broken Hill} TX 77064 kaufman860@noway1234.com {Shelby Kaufman} {10866 Wildwood Lane} Galveston TX 77786 kerner@noway1234.com {Orvill Kerner} {5712 Demeter Circle} {Coober Pedy} TX 77050 cluster_christen@noway1234.com {Cluster Christen} {7548 Prescot Circle} {San Antonio} TX 77706 vanwinkle@noway1234.com {Wilbur VanWinkle} {10309 Dolina Circle} Newcastle TX 77089 krontz@noway1234.com {Margie Krontz} {2127 Brentwood Drive} Pattison TX 77028 doeden955@noway1234.com {Truman Doeden} {3592 Violet Place} Newcastle TX 77645 martha462@noway1234.com {Martha Clements} {7464 Mistybrook Circle} OOdnadatta TX 77216 foetisch@noway1234.com {Jay Foetisch} {2740 Bulwark Circle} Mildura TX 77820 reilly@noway1234.com {Plug Reilly} {8057 Kimball Street} {San Antonio} TX 77526 finney@noway1234.com {Marjorie Finney} {6790 Anvik Circle} Bathurst TX 77575 ruby_phillips@noway1234.com {Ruby Phillips} {4668 East 102nd Avenue} {Broken Hill} TX 77462 judith@noway1234.com {Judith Wellensiek} {1717 Roe Way} Tamworth TX 77933 bill857@noway1234.com {Bill Steinauer} {3584 Bluebell Drive} Brookshire TX 77635 wilfong@noway1234.com {Wilfong Cary} {6107 Elmore Road} {Port Augusta} TX 77829 oral879@noway1234.com {Oral Fox} {2706 Mc Crary Road} Monaville TX 77339 sikyta69@noway1234.com {Chessie Sikyta} {3077 Elm Street} Waco TX 77266 lowell976@noway1234.com {Lowell Mccoy} {4914 Bowdoin Circle} Amarillo TX 77930 hagelback818@noway1234.com {Martin Hagelback} {9851 Lakeside Drive} {Alice Springs} TX 77511 samples_ditlevson@noway1234.com {Samples Ditlevson} {3951 Jodhpur Street} Star TX 77357 shrewsbury123@noway1234.com {Shrewsbury Christen} {794 Upper Canyon Drive} Bathurst TX 77332 triplett207@noway1234.com {Triplett Logsdon} {3492 Ange Street} {Alice Springs} TX 77606 moe660@noway1234.com {Moe Armknecht} {4485 Muldrow Street} Townsville TX 77367 gladys40@noway1234.com {Gladys Robison} {6118 Mountain Circle} Monaville TX 77627 finke328@noway1234.com {E. Finke} {8542 Fountain Drive} Tamworth TX 77177 lincoln@noway1234.com {Lincoln Sears} {612 Rendezvous Circle} {Padre Island} TX 77493 dillon320@noway1234.com {Dillon Wherry} {1437 First Street} {San Felipe} TX 77068 j_d582@noway1234.com {J.D. Fleck} {11274 Williams Street} Albany TX 77781 pet@noway1234.com {Pet Searcey} {11070 Judd Drive} Independence TX 77223 somchay249@noway1234.com {Evalina Somchay} {8554 Buckner Drive} Brookshire TX 77736 ada_kaufman@noway1234.com {Ada Kaufman} {11541 East 41st Court} Amarillo TX 77568 shew97@noway1234.com {Hazle Shew} {3453 Tulugak Circle} Hamilton TX 77250 claudine203@noway1234.com {Claudine Soumpholphakdy} {3754 Hampton Green Loop} Cairns TX 77808 allie@noway1234.com {Allie Bates} {9173 Crow Berry Circle} OOdnadatta TX 77972 hughes544@noway1234.com {Hughes Amos} {5001 Klondike Street} {San Antonio} TX 77359 rexroth70@noway1234.com {D. Rexroth} {8823 Kenmore Circle} Bendigo TX 77979 berman_brammann@noway1234.com {Berman Brammann} {6487 West 86th Court} Pattison TX 77198 mckinney322@noway1234.com {Ruby McKinney} {8049 Freitag Circle} Wollongong TX 77354 oral_sobotta@noway1234.com {Oral Sobotta} {5529 Apollo Drive} Dallas TX 77854 lucy71@noway1234.com {Lucy Shuey} {8731 East 37th Avenue} Cairns TX 77768 cab706@noway1234.com {Cab Steinmeyer} {3964 Savage Drive} {Broken Hill} TX 77963 orian748@noway1234.com {Orian Rothell} {2887 Camino Place} {San Felipe} TX 77237 nona_rauner@noway1234.com {Nona Rauner} {7101 Balandra Circle} Waco TX 77388 pan320@noway1234.com {Scottie Pan} {2196 East 138th Avenue} Star TX 77985 brinkman@noway1234.com {spadden Brinkman} {5488 Curt Court} Bendigo TX 77881 rapp_siske@noway1234.com {Rapp Siske} {1680 Gilmore Court} Sunnyville TX 77096 mont@noway1234.com {Mont Farley} {7171 Humphrey Drive} {Alice Springs} TX 77527 vergie@noway1234.com {Vergie Hanau} {11076 Dewey Circle} Wollongong TX 77352 goff672@noway1234.com {Goff Xayaphonesongkham} {7313 Almdale Avenue} Katy TX 77617 clifford@noway1234.com {Clifford Sears} {6937 Mc Kenzie Drive} Rockhampton TX 77577 person203@noway1234.com {Olive Person} {7996 Entry Way} Rockhampton TX 77545 chrastil855@noway1234.com {David Chrastil} {2592 Charter Circle} Centerville TX 77413 virginia553@noway1234.com {Virginia Lambelet} {3539 Jesters Circle} {Coober Pedy} TX 77897 charlene155@noway1234.com {Charlene Christen} {6048 Martagon Circle} {Coober Pedy} TX 77239 dow832@noway1234.com {Dow Miesbach} {5000 Max Circle} Star TX 77420 morrison@noway1234.com {Judy Morrison} {995 Culross Circle} Launceston TX 77300 kreiling478@noway1234.com {BeTty Kreiling} {4633 Balandra Circle} Mildura TX 77509 fink853@noway1234.com {Rex Fink} {10921 Birch Street} Bourke TX 77700 rauner551@noway1234.com {Eugene Rauner} {4287 Robin Hood Drive} Nacogdoches TX 77756 mc_cottingham@noway1234.com {Mc Cottingham} {1785 Harbor Landing Circle} Newcastle TX 77302 weible706@noway1234.com {Morris Weible} {11169 Whispering Birch Circle} Townsville TX 77387 minnie821@noway1234.com {Minnie Christensen} {6487 Langman Circle} Independence TX 77052 forest243@noway1234.com {Forest Bates} {7610 Schneiter Circle} Mildura TX 77229 cumbers590@noway1234.com {cumbers Sikyta} {9926 More Lane} {Coober Pedy} TX 77562 cora618@noway1234.com {Cora Dwinell} {10239 Homestead Court} {San Felipe} TX 77895 yates695@noway1234.com {Patsy Yates} {11110 Hannigan Street} {San Felipe} TX 77546 robertson@noway1234.com {Dottie Robertson} {8053 Foothill Circle} Mildura TX 77630 frances_campbell@noway1234.com {Frances Campbell} {9064 Lana Court} {Broken Hill} TX 77756 olsen234@noway1234.com {Vina Olsen} {1092 Sanak Circle} Eucla TX 77511 sewell@noway1234.com {Sewell VanWinkle} {11928 Service Road} Kema TX 77115 saunders351@noway1234.com {Kermit Saunders} {9452 Gill Way} Launceston TX 77156 kettelhake@noway1234.com {Dane Kettelhake} {3108 Diana Circle} Eucla TX 77937 sara22@noway1234.com {Sara Wendell} {8688 Notch Jade Street} {Coober Pedy} TX 77125 charles_beck@noway1234.com {Charles Beck} {6976 East 172nd Avenue} Centerville TX 77538 beethe980@noway1234.com {Edna Beethe} {8627 Totem Road} Galveston TX 77289 nim@noway1234.com {Nim Rother} {2804 West 54th Avenue} {Coober Pedy} TX 77462 redith@noway1234.com {Redith Mason} {11797 Rodeo Circle} Dallas TX 77604 lucy530@noway1234.com {Lucy Pfister} {1297 Frontier Lane} Albany TX 77204 hood@noway1234.com {Tootsie Hood} {7812 Prosperity Drive} {Port Augusta} TX 77774 jimmy_pistol483@noway1234.com {Jimmy"Pistol" Lempka} {5093 Giddeon Circle} Kema TX 77756 gottula585@noway1234.com {Dorthy Gottula} {6009 Our Road} Launceston TX 77061 field228@noway1234.com {Janet Field} {3863 Bayshore Drive} Monaville TX 77458 elaine@noway1234.com {Elaine Hartman} {2269 Briarwood Street} Mildura TX 77804 henrichs558@noway1234.com {Cantrell Henrichs} {6264 Dale Street} Bendigo TX 77248 knox@noway1234.com {Evert Knox} {8569 Eagle Glacier Loop} Mildura TX 77178 skip@noway1234.com {Skip Badertscher} {1015 Whitecap Place} Houston TX 77385 johnson467@noway1234.com {Johnson Lempke} {11292 Mc Lure Circle} Launceston TX 77234 warnke924@noway1234.com {Becky Warnke} {595 West Manor Avenue} Wollongong TX 77619 donard@noway1234.com {Donard Zager} {10566 Brink Court} Burnie TX 77188 xayarath@noway1234.com {Tenney Xayarath} {8682 Hidden View Court} Newcastle TX 77246 wiley@noway1234.com {Wiley Lempke} {5001 East 118th Avenue} Ketherine TX 77398 catherine289@noway1234.com {Catherine Borrenpohl} {2965 Kosina Circle} {Tennant Creek} TX 77789 rommie450@noway1234.com {Rommie Hackbart} {11380 Canton Loop} Kema TX 77469 vaden809@noway1234.com {Vaden Wendell} {1806 East 37th Avenue} Broome TX 77517 h_v34@noway1234.com {H.V. Laue} {8497 Bounty Drive} Nacogdoches TX 77377 w_a237@noway1234.com {W.A. Greeb} {3407 Wallace Street} Dallas TX 77066 wib_mccoy@noway1234.com {Wib Mccoy} {8790 King Circle} {Mount Isa} TX 77003 berg482@noway1234.com {Jean Berg} {5604 Shaun Circle} {Port Augusta} TX 77648 sylvester_gibson@noway1234.com {Sylvester Gibson} {10662 Dawn Lane} Katy TX 77085 plug_campbell@noway1234.com {Plug Campbell} {4349 Lucille Lane} Bathurst TX 77736 buell62@noway1234.com {Buell Diaz} {5723 Stony Brook Drive} Waco TX 77277 betty941@noway1234.com {Betty Wendell} {1052 Clay Products Drive} Pattison TX 77341 ernestine275@noway1234.com {Ernestine Dieckmann} {11827 Hinchey Place} Tamworth TX 77036 clara950@noway1234.com {Clara Soumpholphakdy} {1925 Main Tree Drive} Kema TX 77987 schroder104@noway1234.com {Urban Schroder} {787 East 81st Avenue} Hamilton TX 77664 beula847@noway1234.com {Beula Vrbka} {3060 Mountain Lake Drive} Brookshire TX 77909 arnold@noway1234.com {Arnold Schmidt} {10824 Pauline Street} Galveston TX 77491 beatrice287@noway1234.com {Beatrice Todter} {891 Goshawk Court} Monaville TX 77358 grogg577@noway1234.com {Grogg Agena} {9578 M Street} {Alice Springs} TX 77773 rollyson699@noway1234.com {Rollyson Grosse} {11337 Misty Mountain Circle} {San Antonio} TX 77058 harms_bennett@noway1234.com {Harms Bennett} {640 Saint George Circle} Austin TX 77487 k@noway1234.com {K. Gorton} {3254 East 89th Avenue} Townsville TX 77521 young417@noway1234.com {Young Dirksen} {7895 Marcus Street} Houston TX 77020 reva_wenzel@noway1234.com {Reva Wenzel} {1207 Nystrom Street} {Mount Isa} TX 77557 thom581@noway1234.com {Dawson Thom} {5788 Maho Circle} {Padre Island} TX 77302 young59@noway1234.com {Flava Young} {10478 Brenner Road} Katy TX 77211 hedgmond132@noway1234.com {Hedgmond Seeba} {7230 Mumford Street} Eucla TX 77461 ransom@noway1234.com {Ransom McLaughlin} {6485 Bluffwood Circle} Mildura TX 77541 dorsch48@noway1234.com {Kent Dorsch} {4006 Echo Drive} {Tennant Creek} TX 77980 davis95@noway1234.com {A. Davis} {6414 Markstrom Drive} {Coober Pedy} TX 77048 emma_neukirch@noway1234.com {Emma Neukirch} {11628 Brewery Street} {Broken Hill} TX 77183 keener941@noway1234.com {Keener Wenzl} {1674 Glazanof Drive} Centerville TX 77966 boline829@noway1234.com {Barbara Boline} {6413 Melva Drive} Burnie TX 77041 iris_fritsch@noway1234.com {Iris Fritsch} {3250 Imperial Drive} {Mount Isa} TX 77100 sterlin@noway1234.com {Deloris Sterlin} {11302 Arlene Drive} {Coober Pedy} TX 77342 auline@noway1234.com {Auline Neemann} {527 Hunters Drive} {San Felipe} TX 77672 emily889@noway1234.com {Emily McKinney} {6332 Bedford Street} Broome TX 77359 graff931@noway1234.com {Clifford Graff} {8450 East Northern Lights Boulevard} Townsville TX 77628 rickman485@noway1234.com {Jim Rickman} {5326 Magnaview Drive} Brookshire TX 77850 margie_goings@noway1234.com {Margie Goings} {9087 Mary Avenue} Launceston TX 77866 cawley854@noway1234.com {Emory Cawley} {7180 Stanford Street} Hamilton TX 77040 don866@noway1234.com {Don Neill} {4448 Snow Flake Drive} Katy TX 77856 suydan328@noway1234.com {Catherine Suydan} {4032 Norgaard Road} Launceston TX 77009 edsil@noway1234.com {Edsil Cummins} {6715 Commons Place} Galveston TX 77881 sylvia@noway1234.com {Sylvia Wellensiek} {11755 Bentree Circle} Bathurst TX 77108 amanda797@noway1234.com {Amanda Lehenbauer} {10827 Ladd Lane} {Port Augusta} TX 77827 doris_bane@noway1234.com {Doris Bane} {9137 Inlet Place} Albany TX 77151 lynnette456@noway1234.com {Lynnette Mcalexander} {4073 East 164th Avenue} Bathurst TX 77268 mcpherrin797@noway1234.com {W. McPherrin} {7881 East 31st Avenue} Kema TX 77776 sterling272@noway1234.com {Needra Sterling} {9799 Woodcliff Court} {Mount Gambier} TX 77897 feurer272@noway1234.com {Wilson Feurer} {2291 Road's End Circle} Eucla TX 77803 steam_shovel@noway1234.com {Steam Shovel Stinson} {6889 Mc Gowan Street} Burnie TX 77464 dills191@noway1234.com {Rayburn Dills} {11179 Caribou Street} {Port Hedland} TX 77733 mcdowell446@noway1234.com {Holbert McDowell} {2171 Gambell Street} Pattison TX 77416 rader@noway1234.com {Bud Rader} {8764 Deborah Lane} {Padre Island} TX 77761 laxton_lueders@noway1234.com {Laxton Lueders} {8947 Midland Place} {Broken Hill} TX 77363 paxton684@noway1234.com {Paxton Goers} {8890 Lagoon Circle} {Port Hedland} TX 77649 emily37@noway1234.com {Emily Altman} {6588 Tamir Avenue} {Coober Pedy} TX 77876 bonnie_rauner@noway1234.com {Bonnie Rauner} {3011 Green Tree Circle} Broome TX 77396 ruby_finke@noway1234.com {Ruby Finke} {6754 West 90th Avenue} {Port Hedland} TX 77090 tinnel873@noway1234.com {Tinnel Masur} {9935 Sumac Drive} Austin TX 77068 suhr276@noway1234.com {Flava Suhr} {1853 Stargate Circle} Bourke TX 77018 brockman@noway1234.com {J. Brockman} {3592 Stewart Drive} Independence TX 77009 burns600@noway1234.com {Irvin Burns} {9525 Eklutna Lake Road} Sunnyville TX 77314 ritter@noway1234.com {T. Ritter} {7493 Denmark Circle} Austin TX 77872 benny@noway1234.com {Benny Hitzeman} {7669 Clairmont Circle} Star TX 77993 warden@noway1234.com {Jeanette Warden} {9992 Little Cape Circle} Independence TX 77944 babe211@noway1234.com {Babe Miesbach} {636 Lakehurst Drive} Newcastle TX 77462 c_lintz@noway1234.com {C. Lintz} {5340 Lake View Drive} {Mount Gambier} TX 77325 helen_knox@noway1234.com {Helen Knox} {2801 East 97th Avenue} Queenstown TX 77829 parrish989@noway1234.com {Thelma Parrish} {1242 Kronos Drive} Nacogdoches TX 77933 robinson381@noway1234.com {McQuire Robinson} {2224 Homecrest Place} Galveston TX 77663 michl@noway1234.com {Omer Michl} {9514 Laviento Drive} Eucla TX 77963 rickman810@noway1234.com {Judy Rickman} {3626 Vance Drive} Nacogdoches TX 77521 devorss@noway1234.com {Craft DeVorss} {3172 Wagner Street} Dallas TX 77180 ora689@noway1234.com {Ora Carson} {5308 North Juanita Loop} Bourke TX 77822 maguire@noway1234.com {Steph Maguire} {10910 Ivy Circle} Bourke TX 77216 rine@noway1234.com {Lytal Rine} {10489 Barbara Street} Burnie TX 77017 roy_mitchel@noway1234.com {Roy Mitchel} {10814 Buddy Werner Drive} Monaville TX 77360 mable254@noway1234.com {Mable Rauner} {2432 Firnline Drive} {San Antonio} TX 77503 stephen@noway1234.com {Stephen Geweke} {294 Nash Street} Brookshire TX 77158 mcalexander727@noway1234.com {Lantie Mcalexander} {1240 Randamar Place} Centerville TX 77651 kreiling79@noway1234.com {Leigh Kreiling} {2361 Chain Of Rock Street} Bathurst TX 77439 adkins944@noway1234.com {Adkins Curry} {3574 Mike Street} {Padre Island} TX 77113 urich651@noway1234.com {Donna Urich} {6061 Gilbert Road} Pattison TX 77679 douglas474@noway1234.com {Henderson Douglas} {11340 Carriage Drive} Broome TX 77984 leola_stahl@noway1234.com {Leola Stahl} {10247 East 130th Avenue} Bourke TX 77361 floerke468@noway1234.com {Maxine Floerke} {10560 Boom Circle} Amarillo TX 77221 terry282@noway1234.com {Terry Laue} {3412 Banff Street} Houston TX 77446 staley423@noway1234.com {Credis Staley} {6084 Robert Circle} Wollongong TX 77290 virgil@noway1234.com {Virgil Heidemann} {9031 Robert Circle} Kema TX 77223 gottula28@noway1234.com {Ruby Gottula} {9383 Goff Street} Brookshire TX 77160 arlene_peek@noway1234.com {Arlene Peek} {881 Cherokee Way} Monaville TX 77918 evans@noway1234.com {Fitzwater Evans} {7562 Laona Drive} Nacogdoches TX 77259 ida275@noway1234.com {Ida Hahn} {8561 Aldren Circle} Hamilton TX 77929 devorss844@noway1234.com {Carol DeVorss} {1608 Nicoli Way} Tamworth TX 77365 lambelet508@noway1234.com {Shelton Lambelet} {4117 Windjammer Circle} Austin TX 77080 zillig923@noway1234.com {Gibson Zillig} {3629 Saint Anton Way} Centerville TX 77114 mutt33@noway1234.com {Mutt Kirkman} {4258 Westminster Way} Newcastle TX 77199 s_warden@noway1234.com {S. Warden} {4786 Dawson Street} Cairns TX 77573 burton_hermsmeier@noway1234.com {Burton Hermsmeier} {8277 Rocky Cove Drive} Independence TX 77760 joleen@noway1234.com {Joleen Hershberger} {1267 Dartmouth Drive} {Tennant Creek} TX 77941 pudge551@noway1234.com {Pudge Hartman} {93 West Lake Drive} Centerville TX 77318 cleve879@noway1234.com {Cleve Spence} {11250 Northwood Park Circle} Cairns TX 77512 gibbs86@noway1234.com {Eugene Gibbs} {6033 Basher Drive} Star TX 77366 littlejohn698@noway1234.com {Samples Littlejohn} {8953 Alitak Bay Circle} Katy TX 77182 lynette920@noway1234.com {Lynette Scherrer} {4141 Our Road} Rockhampton TX 77658 johnie316@noway1234.com {Johnie Severns} {6964 Kempton Hills Drive} {San Felipe} TX 77550 hazle238@noway1234.com {Hazle Naber} {7687 Summer Mist Court} Monaville TX 77487 morrow642@noway1234.com {Lois Morrow} {10947 Freebird Circle} Eucla TX 77622 felix858@noway1234.com {Felix Jewell} {4442 San Antonio Street} Dallas TX 77252 g417@noway1234.com {G. Soumpholphakdy} {3413 Mayfair Drive} Star TX 77629 herbie@noway1234.com {Herbie Sterlin} {10339 White Drive} Wollongong TX 77114 ann107@noway1234.com {Ann Hauptman} {8658 Tudortop Circle} Queenstown TX 77350 ann_ruter@noway1234.com {Ann Ruter} {9401 Patterson Court} Cairns TX 77173 ramonia@noway1234.com {Ramonia Arnold} {474 Gardner Street} {Port Augusta} TX 77256 badellino@noway1234.com {Joe Badellino} {4161 Woodgreen Circle} {Mount Isa} TX 77192 givin@noway1234.com {Givin Sobotta} {9997 Duben Avenue} {Port Hedland} TX 77991 mavis@noway1234.com {Mavis Bicknell} {11312 Norm Drive} OOdnadatta TX 77635 c_a_broady@noway1234.com {C.A. Broady} {5275 Shivalik Drive} Bathurst TX 77613 dencil@noway1234.com {Dencil Wiese} {9521 Pavalof Street} Hamilton TX 77671 dr184@noway1234.com {Dr. Repp} {10397 Chirikof Court} {Coober Pedy} TX 77114 harman329@noway1234.com {Delorsis Harman} {11601 Bow Circle} {Coffs Harbour} TX 77765 harrah@noway1234.com {Trossie Harrah} {11141 Stamps Circle} Kema TX 77826 eldon777@noway1234.com {Eldon Reschke} {9702 Fenwick Circle} Galveston TX 77201 gregory187@noway1234.com {Mike Gregory} {147 West 45th Avenue} Launceston TX 77899 rizor547@noway1234.com {Stephane Rizor} {6784 Neva Circle} Hamilton TX 77262 rosalie276@noway1234.com {Rosalie Wenzel} {7184 Centennial Circle} Mildura TX 77317 tagart375@noway1234.com {Butcher Tagart} {7022 Pelican Drive} {Padre Island} TX 77513 glenn_gillette@noway1234.com {Glenn Gillette} {1457 West 78th Avenue} Brookshire TX 77533 jason347@noway1234.com {Jason Cottingham} {2199 Spruce Street} Dallas TX 77782 kavanaugh118@noway1234.com {Torb Kavanaugh} {754 Calais Drive} Bourke TX 77253 reschke486@noway1234.com {Dr. Reschke} {6406 Sutwik Circle} Star TX 77731 sackaly660@noway1234.com {Dirk Sackaly} {2975 Patro Street} Kema TX 77703 chrastil843@noway1234.com {E. Chrastil} {8081 Trappers Trail Road} Kema TX 77833 thurman299@noway1234.com {Thurman Badertscher} {1360 Cange Street} {Mount Isa} TX 77593 halene@noway1234.com {Halene Gates} {11293 Iditarod Circle} Cairns TX 77188 tommy698@noway1234.com {Tommy Hoke} {11739 Bearberry Street} Wollongong TX 77406 mike940@noway1234.com {Mike Rebuck} {4073 Prism Circle} {Broken Hill} TX 77071 willard_diaz@noway1234.com {Willard Diaz} {8557 Lupin Place} {Port Hedland} TX 77296 rex398@noway1234.com {Rex Schultz} {10974 Upper Lowland Avenue} Waco TX 77939 mattheis@noway1234.com {Ron Mattheis} {673 Craig Creek Court} Sunnyville TX 77760 ham@noway1234.com {Samples Ham} {2698 O'brien Avenue} {Coffs Harbour} TX 77768 carlon_horn@noway1234.com {Carlon Horn} {11042 Steamboat Drive} {Mount Gambier} TX 77582 bird500@noway1234.com {Bird Houmann} {2459 Genny Circle} Queenstown TX 77899 hargis29@noway1234.com {Cork Hargis} {5132 Targhee Circle} {San Felipe} TX 77751 bud18@noway1234.com {Bud Polson} {6664 Park Lane} Nacogdoches TX 77250 baum170@noway1234.com {Baum Bates} {8933 Glenn Hill Circle} Sunnyville TX 77896 beam_dirksen@noway1234.com {Beam Dirksen} {4578 East 42nd Avenue} Newcastle TX 77434 mahetable726@noway1234.com {Mahetable Robison} {3496 Baron Drive} {Port Augusta} TX 77922 campbell751@noway1234.com {Lanty Campbell} {5173 Darby Road} {Mount Gambier} TX 77384 keedy504@noway1234.com {Bail Keedy} {565 West Lake Circle} {Mount Isa} TX 77787 mullins_landry@noway1234.com {Mullins Landry} {250 Ranch Road} Bathurst TX 77166 ensor286@noway1234.com {Dodrill Ensor} {6434 West 83rd Avenue} Adelaide TX 77068 hershberger1@noway1234.com {Shartlet Hershberger} {8582 Hope Circle} Bourke TX 77310 icie67@noway1234.com {Icie Knippelmeyer} {11043 Geirinhas Place} Hamilton TX 77963 bogle845@noway1234.com {Homer Bogle} {7574 Nancy Circle} Ketherine TX 77765 millard@noway1234.com {Millard Aust} {7260 Ruth Street} {Alice Springs} TX 77182 hargis781@noway1234.com {Mahetable Hargis} {10450 Girdwood Place} Mildura TX 77268 witte8@noway1234.com {Vernon Witte} {2802 Artemus Street} {Tennant Creek} TX 77764 borrenpohl556@noway1234.com {Haskel Borrenpohl} {5103 Marijane Street} {Mount Gambier} TX 77683 griffith992@noway1234.com {Griffith Gibson} {2912 Terrace Drive} {Alice Springs} TX 77437 decator@noway1234.com {Decator Kavanaugh} {11804 Chesapeake Circle} Newcastle TX 77940 thongkhamvilay164@noway1234.com {Marple Thongkhamvilay} {11696 Gander Street} Launceston TX 77400 aubry243@noway1234.com {Aubry Ullman} {9447 Griffith Street} Albany TX 77054 bobby_lueders@noway1234.com {Bobby Lueders} {1568 Theodore Drive} Broome TX 77752 george@noway1234.com {George Thompson} {9164 Garland Circle} Star TX 77233 ruhl856@noway1234.com {Ruhl Goers} {8784 Kronos Drive} Townsville TX 77904 baughman_wagner@noway1234.com {Baughman Wagner} {9335 Labate Drive} Mildura TX 77654 patti_schafer@noway1234.com {Patti Schafer} {11624 Ira Drive} Rockhampton TX 77135 hood157@noway1234.com {Marple Hood} {5649 Pharaoh Circle} Launceston TX 77440 l_s307@noway1234.com {L.S. Dieckmann} {5253 Holmgren Place} Kema TX 77161 leahy444@noway1234.com {Henderson Leahy} {2257 Trail Circle} Queenstown TX 77224 robert_dwinell@noway1234.com {Robert Dwinell} {9993 Jim Avenue} {Port Hedland} TX 77799 bartholomew151@noway1234.com {Dave Bartholomew} {5966 Communications Avenue} {Broken Hill} TX 77742 helm370@noway1234.com {Norris Helm} {11530 Stephanie Boulevard} {Broken Hill} TX 77899 boline382@noway1234.com {Bernice Boline} {9327 Frank Street} Wollongong TX 77638 viola887@noway1234.com {Viola Rother} {1410 Smith Drive} Burnie TX 77743 jeanie442@noway1234.com {Jeanie Holden} {793 Carousel Circle} Star TX 77385 robinson850@noway1234.com {Helen Robinson} {3935 Hiland Drive} Ketherine TX 77828 louise914@noway1234.com {Louise Butler} {1762 Upper Greatland Drive} Amarillo TX 77246 mike74@noway1234.com {Mike Amos} {943 Chaparral Circle} Rockhampton TX 77015 lintz279@noway1234.com {Young Lintz} {8005 Holden Drive} Townsville TX 77283 phala_hamm@noway1234.com {Phala Hamm} {9892 Emerald Street} Houston TX 77777 g_h@noway1234.com {G.H. Bernadt} {4589 Halligan Street} Monaville TX 77680 leonard595@noway1234.com {Leonard Bane} {3540 Unimak Circle} Kema TX 77952 knippelmeyer334@noway1234.com {Hall Knippelmeyer} {2345 Dallon Court} Dallas TX 77833 iona@noway1234.com {Iona Reschke} {2309 Tom White Circle} Nacogdoches TX 77401 husing231@noway1234.com {Elden Husing} {5586 Scenic Way} Galveston TX 77222 marjorie741@noway1234.com {Marjorie Rothell} {9743 West 39th Avenue} Tamworth TX 77615 leuenberger@noway1234.com {Harland Leuenberger} {2307 Prosperity Drive} Austin TX 77112 hunt292@noway1234.com {Oma Hunt} {1687 Wes Way} Amarillo TX 77054 juilfs331@noway1234.com {Bird-Legs Juilfs} {10415 Karen Lane} {San Antonio} TX 77964 tenney872@noway1234.com {Tenney Hindera} {1928 East 40th Court} Tamworth TX 77771 daisy591@noway1234.com {Daisy Hunt} {8820 North River Circle} Bendigo TX 77129 bail214@noway1234.com {Bail Finke} {299 West 79th Court} Cairns TX 77813 finn304@noway1234.com {Gay Finn} {4713 Stowe Circle} Houston TX 77736 lacey@noway1234.com {Moore Lacey} {9266 Northview Drive} Dallas TX 77540 morrow649@noway1234.com {Kallai Morrow} {7906 Sturbridge Court} Rockhampton TX 77674 schutz280@noway1234.com {Mutt Schutz} {7326 Endicott Street} Nacogdoches TX 77328 gobber@noway1234.com {S. Gobber} {8439 Sandy Place} Rockhampton TX 77735 volkmer652@noway1234.com {Evalena Volkmer} {4132 Kiliak Place} Mildura TX 77338 bonnie_kettelhake@noway1234.com {Bonnie Kettelhake} {3078 Bettles Bay Loop} {Coober Pedy} TX 77897 altman308@noway1234.com {Ida Altman} {7011 Floatplane Drive} Bourke TX 77277 decator_hardin@noway1234.com {Decator Hardin} {4100 Thornton Street} Sunnyville TX 77269 greeb10@noway1234.com {Charles Greeb} {7753 Explorer Circle} Waco TX 77646 gibson986@noway1234.com {Gibson Huttenmeyer} {2058 Vadla Way} Austin TX 77275 basil@noway1234.com {Basil Reilly} {1865 Dane Court} Centerville TX 77809 rose@noway1234.com {Rose Branting} {9408 Alexander Avenue} Adelaide TX 77218 zella@noway1234.com {Zella Lacey} {1948 Wolf Drive} {Coober Pedy} TX 77799 marple87@noway1234.com {Marple Scharton} {6986 East Dimond Circle} Austin TX 77342 thompson780@noway1234.com {Gumm Thompson} {4081 Rendon Drive} Albury TX 77490 percy@noway1234.com {Percy Triplett} {3605 West 28th Court} Amarillo TX 77564 terry_schultz@noway1234.com {Terry Schultz} {6623 Dunsmuir Court} Waco TX 77125 esther737@noway1234.com {Esther Mueller} {1507 Dandelion Wine Circle} {San Antonio} TX 77994 schacht249@noway1234.com {Steam Shovel Schacht} {4319 Linda Lane} Galveston TX 77644 coulter285@noway1234.com {Coulter Hansel} {5759 Circle Drive} Burnie TX 77600 murphy47@noway1234.com {Patrick Murphy} {3233 Crow Creek Highway} {San Felipe} TX 77323 wachosky83@noway1234.com {Arch Wachosky} {5270 May Court Circle} Eucla TX 77437 j822@noway1234.com {J. Bailey} {5211 Waterwood Circle} Brookshire TX 77301 sarah692@noway1234.com {Sarah Brammann} {8169 Pleasant Drive} Dallas TX 77843 h_a_knox@noway1234.com {H.A Knox} {4245 Spring Court} Burnie TX 77289 joy378@noway1234.com {Joy Hendee} {2021 Winterset Drive} Cairns TX 77666 waring872@noway1234.com {Butcher Waring} {8318 Ptarmigan Boulevard} Houston TX 77483 bartholomew69@noway1234.com {Rhunie Bartholomew} {7371 Cross Drive} Centerville TX 77485 walker790@noway1234.com {Walker Kuhl} {6567 Eielson Street} Bendigo TX 77304 sewell416@noway1234.com {Sewell Evans} {4189 Spyglass Drive} {Padre Island} TX 77822 jackie_mommens@noway1234.com {Jackie Mommens} {2820 Gulkana Circle} Rockhampton TX 77034 lang@noway1234.com {Tom Lang} {10319 Henry Circle} Burnie TX 77834 sova175@noway1234.com {Wilson Sova} {138 Colville Street} Houston TX 77701 bossung@noway1234.com {Gladys Bossung} {3287 Alissa Circle} Houston TX 77659 daisy879@noway1234.com {Daisy Brown} {6055 Misty Mountain Road} Kema TX 77891 bartels114@noway1234.com {Eric Bartels} {6346 North A Street} Austin TX 77511 bauers723@noway1234.com {Ones Bauers} {10405 North Eagle River Loop Road} {Mount Gambier} TX 77930 ward_jones@noway1234.com {Ward Jones} {3680 Targhee Circle} Cairns TX 77953 miner148@noway1234.com {Bird-Legs Miner} {8049 Pine Valley Court} Ketherine TX 77107 montz253@noway1234.com {Bubby Montz} {1209 Tidrington Street} {Alice Springs} TX 77701 betzelberger@noway1234.com {Betty Betzelberger} {9674 Windward Circle} Launceston TX 77877 farley992@noway1234.com {Farley Stewart} {3258 Karen Circle} Mildura TX 77860 tab274@noway1234.com {Tab Lyons} {6708 Hidden Point Loop} Bourke TX 77285 lenora859@noway1234.com {Lenora Feurer} {8961 Clint Circle} Launceston TX 77530 sattler414@noway1234.com {Sattler Arnold} {7136 Freebird Circle} {Tennant Creek} TX 77403 denny_smith@noway1234.com {Denny Smith} {10113 Rushing River Circle} {San Felipe} TX 77354 stover865@noway1234.com {Stover Kreiling} {9988 Newby Avenue} {Mount Gambier} TX 77591 thelma_keedy@noway1234.com {Thelma Keedy} {11057 Brantley Place} {Tennant Creek} TX 77793 hazle_philippi@noway1234.com {Hazle Philippi} {11903 Tiros Avenue} Adelaide TX 77745 merlin_dieckmann@noway1234.com {Merlin Dieckmann} {9606 East Tudor Road} Eucla TX 77208 floerke177@noway1234.com {Nettles Floerke} {1135 Tammy Avenue} {Mount Gambier} TX 77022 kerner946@noway1234.com {White Kerner} {11275 Kody Drive} Bathurst TX 77493 tyburtis508@noway1234.com {Tyburtis Behrends} {3964 Claudene Loop} Houston TX 77010 meyer770@noway1234.com {Mickey Meyer} {7116 Angela Place} Houston TX 77003 june_hauptman@noway1234.com {June Hauptman} {10631 West 2nd Avenue} Waco TX 77661 p377@noway1234.com {P. Neukirch} {2454 Via Balboa} {Padre Island} TX 77812 adolf545@noway1234.com {Adolf Esser} {4520 Palos Verdes Circle} {Coffs Harbour} TX 77487 gregory630@noway1234.com {Joe Gregory} {7493 Roehl Circle} Eucla TX 77149 ivan_reiber@noway1234.com {Ivan Reiber} {70 Ruth Street} Bendigo TX 77467 shelton_mercure@noway1234.com {Shelton Mercure} {10684 Devonshire Circle} Tamworth TX 77661 gillette808@noway1234.com {Patty Gillette} {2696 Anvik Circle} Ketherine TX 77450 gwen@noway1234.com {Gwen Bauers} {2120 Northwood Drive} Queenstown TX 77403 mathis374@noway1234.com {Samples Mathis} {4994 Timberlux Circle} Adelaide TX 77747 randy936@noway1234.com {Randy Dittmer} {10923 Halyards Circle} Houston TX 77783 nielsen976@noway1234.com {Bennie Nielsen} {11776 West 36th Avenue} {Coffs Harbour} TX 77435 hazel_hanau@noway1234.com {Hazel Hanau} {6691 Nikita Drive} Broome TX 77174 naomi@noway1234.com {Naomi Aufdenkamp} {2191 Hogan Bay Circle} Tamworth TX 77027 dana432@noway1234.com {Dana Smith} {3103 Woodmont Drive} Rockhampton TX 77863 mozelle288@noway1234.com {Mozelle Soumpholphakdy} {1060 South Creek Road} Albany TX 77133 stahl483@noway1234.com {Huling Stahl} {8109 Targhee Loop} {Mount Gambier} TX 77891 christensen476@noway1234.com {Joanne Christensen} {9678 Vancouver Circle} {Coffs Harbour} TX 77989 given_weinrich@noway1234.com {Given Weinrich} {8967 Sky Mountain Circle} Albury TX 77808 albert589@noway1234.com {Albert Stephens} {9248 Wesleyan Drive} {Port Hedland} TX 77448 ann664@noway1234.com {Ann Holthus} {2432 Mary Esther Drive} Ketherine TX 77199 hamrick722@noway1234.com {Hamrick Severns} {8339 Renee Circle} {Padre Island} TX 77919 wilfong_kettelhake@noway1234.com {Wilfong Kettelhake} {11270 Diggins Drive} {Tennant Creek} TX 77836 urich968@noway1234.com {Jo Urich} {3811 Bridger Place} Ketherine TX 77289 kerr@noway1234.com {Mullins Kerr} {5224 Crescent Hill Circle} Albany TX 77988 keedy611@noway1234.com {Rennie Keedy} {818 Lochwood Circle} Cairns TX 77829 lcie_rubin@noway1234.com {lcie Rubin} {9643 Hill Road} Wollongong TX 77415 ahtelene592@noway1234.com {Ahtelene Clifton} {2750 Aspen Drive} Tamworth TX 77246 anis_beethe@noway1234.com {Anis Beethe} {6917 Leander Circle} {Port Hedland} TX 77672 deloris597@noway1234.com {Deloris Laue} {6586 Valley Forge Circle} Launceston TX 77512 stahl53@noway1234.com {Chester Stahl} {7230 Waterwood Circle} Waco TX 77019 mcculla551@noway1234.com {Faye Mcculla} {7367 Cassius Court} Bourke TX 77965 nedra@noway1234.com {Nedra Broady} {1975 North Cordova Street} Albany TX 77511 dough_belly30@noway1234.com {Dough Belly Rathbun} {8443 Innsbruck Road} Bendigo TX 77039 dillaplain279@noway1234.com {Waveline Dillaplain} {1621 Ruby Drive} {Port Hedland} TX 77506 j_e@noway1234.com {J.E. Berner} {4764 Rebano Drive} OOdnadatta TX 77800 ruth238@noway1234.com {Ruth Rogers} {11294 East 110th Avenue} Cairns TX 77700 hamilton271@noway1234.com {Bertha Hamilton} {6100 West 86th Avenue} {San Antonio} TX 77411 billy_hackbart@noway1234.com {Billy Hackbart} {9035 Glazanof Drive} {Tennant Creek} TX 77511 carol90@noway1234.com {Carol Knock} {10977 Woburn Circle} Dallas TX 77144 kaster586@noway1234.com {Mitchell Kaster} {7058 Delaware Place} Monaville TX 77377 pfister328@noway1234.com {Edna Pfister} {2164 Saint Lawrence Circle} Queenstown TX 77278 rohrs@noway1234.com {Gayle Rohrs} {10737 Nautilus Court} Mildura TX 77135 neemann610@noway1234.com {Leona Neemann} {66 East 101st Avenue} Nacogdoches TX 77846 vicki491@noway1234.com {Vicki Gordon} {1122 Catherine Drive} Albany TX 77313 orvill_mcculla@noway1234.com {Orvill McCulla} {6891 Loretta Lane} Katy TX 77821 p_stewart@noway1234.com {P. Stewart} {10614 Concord Hill Drive} Nacogdoches TX 77461 emmett@noway1234.com {Emmett Kerchal} {1369 Menzies Way} Bendigo TX 77717 delma628@noway1234.com {Delma Schermbeck} {7367 Halley's Comet Circle} Bathurst TX 77790 lester@noway1234.com {Lester Logsdon} {7971 East 101st Avenue} Sunnyville TX 77247 miraih@noway1234.com {Miraih Jochim} {4995 Winfield Circle} {Padre Island} TX 77535 johnny_goracke@noway1234.com {Johnny Goracke} {8588 Division Street} Bathurst TX 77551 patrica_fink@noway1234.com {Patrica Fink} {821 Taku Drive} {San Antonio} TX 77023 p906@noway1234.com {P. Arnold} {5781 Big Spruce Circle} Adelaide TX 77842 knock983@noway1234.com {Calvin Knock} {1211 Mills Bay Drive} Bourke TX 77888 fox826@noway1234.com {Ward Fox} {6590 Mountain Ash Drive} Burnie TX 77928 morris_oldfather@noway1234.com {Morris Oldfather} {2448 Carolina Drive} {San Felipe} TX 77600 coretta@noway1234.com {Coretta Harman} {7442 Main Tree Drive} {Coffs Harbour} TX 77161 donvil_mcalexander@noway1234.com {Donvil McAlexander} {4884 Marmot Circle} Independence TX 77415 kerns_wenzel@noway1234.com {Kerns Wenzel} {5427 Taku Drive} Burnie TX 77990 hothan@noway1234.com {Betty Hothan} {10134 Birchtree Street} Nacogdoches TX 77151 stitt166@noway1234.com {Ethel Stitt} {9225 Barclay Drive} Broome TX 77832 buerstetta973@noway1234.com {Susan Buerstetta} {6223 Taiga Street} {Coober Pedy} TX 77830 jewell893@noway1234.com {Marian Jewell} {7486 Cordova Street} Broome TX 77735 mullins_rowe@noway1234.com {Mullins Rowe} {3326 West Klatt Road} Albany TX 77592 altman753@noway1234.com {Judith Altman} {10946 Arctic Spur Road} Dallas TX 77056 holmstrom322@noway1234.com {Bud Holmstrom} {5822 Winchester Loop} {Mount Isa} TX 77736 rogers252@noway1234.com {s Rogers} {10314 University Lake Drive} Waco TX 77921 harley464@noway1234.com {Harley Harman} {1950 Temple Circle} Broome TX 77640 ranae@noway1234.com {Ranae Peters} {11611 Waverly Circle} Galveston TX 77372 guy203@noway1234.com {Guy Humann} {11521 San Ernesto Avenue} Houston TX 77651 donald588@noway1234.com {Donald Montz} {5414 Westland Circle} Waco TX 77251 jodelle@noway1234.com {Jodelle Pettinger} {2686 A Street} Bendigo TX 77879 shirley632@noway1234.com {Shirley Hinkle} {11769 Refuge Circle} {Alice Springs} TX 77051 dee_schreiner@noway1234.com {Dee Schreiner} {11550 Vassar Drive} Hamilton TX 77768 hoke419@noway1234.com {Tilden Hoke} {1805 Wren Circle} {Coober Pedy} TX 77540 rachelle353@noway1234.com {Rachelle Martin} {11363 Lang Street} Dallas TX 77553 samuel_rau@noway1234.com {Samuel Rau} {518 Lyvona Lane} Independence TX 77753 schreiner10@noway1234.com {Willard Schreiner} {4065 Seagate Court} {Mount Isa} TX 77024 mccain771@noway1234.com {Irene McCain} {2218 West 59th Avenue} Pattison TX 77247 ottie@noway1234.com {Ottie Chard} {4408 Constitution Drive} Albury TX 77970 gene_dills@noway1234.com {Gene Dills} {7699 Lila's Place} {Padre Island} TX 77745 shannon@noway1234.com {Shannon Finn} {8708 Ursa Circle} {Broken Hill} TX 77810 hitzeman797@noway1234.com {Rebecca Hitzeman} {7656 Waiter Place} Newcastle TX 77982 ramsey296@noway1234.com {Ramsey Knippelmeyer} {5919 West 96th Avenue} {Broken Hill} TX 77906 bunk@noway1234.com {Bunk Graff} {11846 Tay Circle} Waco TX 77662 maysel843@noway1234.com {Maysel Robinson} {5835 Cape Noble Circle} Burnie TX 77298 mcdonald890@noway1234.com {Dee McDonald} {11063 Kalgin Street} {Port Hedland} TX 77001 mclaughlin@noway1234.com {Verna McLaughlin} {2467 Gavin Circle} Albury TX 77931 humann671@noway1234.com {Julian Humann} {10589 West Bluff Drive} Centerville TX 77207 rogers840@noway1234.com {Rogers Brinkman} {8633 Gold Kings Circle} Cairns TX 77522 otis@noway1234.com {Otis Thom} {7535 Spruce Street} Bendigo TX 77051 lloyd_johnson@noway1234.com {Lloyd Johnson} {10066 Wapiti Circle} Dallas TX 77907 befty756@noway1234.com {Befty Lawrence} {7277 Birdsong Drive} Nacogdoches TX 77467 brinkman995@noway1234.com {Lou Brinkman} {1345 West Fireweed Lane} Centerville TX 77641 gillispie_fritsch@noway1234.com {Gillispie Fritsch} {5374 East 15th Avenue} Ketherine TX 77390 hazel222@noway1234.com {Hazel Stauffer} {4099 Saint Elias Drive} Bourke TX 77881 dawson_finke@noway1234.com {Dawson Finke} {1764 Dailey Avenue} Kema TX 77116 mattox397@noway1234.com {Ada Mattox} {5215 Sandpiper Court} {Coober Pedy} TX 77831 della@noway1234.com {Della Bossung} {3508 Upper Road} Newcastle TX 77795 sigman633@noway1234.com {Sigman Hartman} {9569 Teshlar Drive} {Port Augusta} TX 77122 mccoy155@noway1234.com {Forrest McCoy} {4398 Otis Place} Townsville TX 77613 ernie@noway1234.com {Ernie Speckmann} {11677 White Spruce Drive} Houston TX 77809 custer@noway1234.com {Custer VanWinkle} {5125 Galactica Drive} Galveston TX 77441 holcomb691@noway1234.com {Holcomb Brinkman} {11035 Lower Terrace Street} Launceston TX 77653 reilly27@noway1234.com {Rome Reilly} {10100 North C Street} Pattison TX 77953 coffman@noway1234.com {Coffman Huttenmeyer} {1967 Alta Drive} Pattison TX 77031 holthus91@noway1234.com {Dorsey Holthus} {11851 Voyles Boulevard} {Tennant Creek} TX 77670 fuller271@noway1234.com {P. Fuller} {10943 Harbor Point Loop} Star TX 77073 brock@noway1234.com {Hanshaw Brock} {1090 Marge Court} Star TX 77571 holben635@noway1234.com {Linda Holben} {9021 Rinner Circle} Townsville TX 77393 barb518@noway1234.com {Barb Evans} {5678 East 102nd Avenue} Broome TX 77775 virginia333@noway1234.com {Virginia Mason} {4948 Queen Victoria Drive} Albury TX 77329 coffman_grove@noway1234.com {Coffman Grove} {1107 Chaparral Circle} {San Antonio} TX 77673 danelle@noway1234.com {Danelle Laug} {3911 Saddler Street} Star TX 77509 colton869@noway1234.com {Harien Colton} {1798 Arlene Street} Adelaide TX 77130 michl845@noway1234.com {Baum Michl} {2916 West 51st Avenue} Mildura TX 77113 jordon@noway1234.com {Jordon Young} {366 Castner Lane} {San Antonio} TX 77425 imogee436@noway1234.com {Imogee Piersol} {2576 East 17th Avenue} Townsville TX 77508 vergie924@noway1234.com {Vergie Bryan} {17 Lipscomb Street} Rockhampton TX 77024 mahler870@noway1234.com {M. Mahler} {5852 Sambar Loop} Bendigo TX 77791 orval_bates@noway1234.com {Orval Bates} {115 Gemini Drive} {Tennant Creek} TX 77236 lou_kaster@noway1234.com {Lou Kaster} {1322 Lower Terrace Street} Nacogdoches TX 77706 claude@noway1234.com {Claude Kirkman} {8047 Larkspur Circle} {San Antonio} TX 77955 bail828@noway1234.com {Bail McNergney} {11829 Henderson Loop} Mildura TX 77013 meyer434@noway1234.com {Macel Meyer} {7181 Ranch Road} Adelaide TX 77752 lorenza883@noway1234.com {Lorenza Dirksen} {11766 Timberlux Circle} OOdnadatta TX 77225 iona_keedy@noway1234.com {Iona Keedy} {4446 Randamar Place} Star TX 77035 hickman243@noway1234.com {Hickman Agena} {4228 Hunter Circle} Monaville TX 77362 teresa377@noway1234.com {Teresa Yoder} {948 Inyo Circle} {San Felipe} TX 77950 hess792@noway1234.com {Hess Sherman} {1130 Chugach Park Drive} Pattison TX 77931 presley955@noway1234.com {Presley Ritter} {3136 Pine Ridge Circle} Austin TX 77046 brommer53@noway1234.com {Reva Brommer} {9462 Seward 34th Ramp} Amarillo TX 77097 lehenbauer99@noway1234.com {Hanshaw Lehenbauer} {6703 Royal Court} Newcastle TX 77966 monkeyballs220@noway1234.com {Frame Monkeyballs} {595 Midori Drive} Adelaide TX 77604 staley467@noway1234.com {Cleve Staley} {2634 Race Circle} {San Felipe} TX 77796 evalene547@noway1234.com {Evalene McCoy} {10011 East 7th Avenue} Austin TX 77099 stangel@noway1234.com {Bernard Stangel} {6203 East 45th Avenue} {Tennant Creek} TX 77190 sova972@noway1234.com {Charlotte Sova} {6196 Breckenridge Circle} {Mount Isa} TX 77514 jeanette539@noway1234.com {Jeanette Purdy} {4965 Midland Place} Bourke TX 77126 wilbert609@noway1234.com {Wilbert Philpott} {2195 Grey Wolf Circle} {Tennant Creek} TX 77092 carlos992@noway1234.com {Carlos Goers} {6766 Antioch Circle} Independence TX 77590 haughton167@noway1234.com {Woods Haughton} {3022 Upper De Armoun Road} {Coffs Harbour} TX 77167 mamie_kerner@noway1234.com {Mamie Kerner} {5049 Kidron Street} Townsville TX 77909 dempsey623@noway1234.com {Dempsey Maguire} {3301 Deborah Lynn Circle} Queenstown TX 77501 rohmeyer23@noway1234.com {Adolf Rohmeyer} {6887 Solomon Avenue} OOdnadatta TX 77495 jack959@noway1234.com {Jack Agena} {8238 Falcon Drive} Launceston TX 77090 georgene159@noway1234.com {Georgene Topp} {10011 Hyatt Street} {Port Hedland} TX 77062 foster@noway1234.com {Foster Rau} {2339 Angela Place} Dallas TX 77999 milton323@noway1234.com {Milton Moslander} {9343 Turnagain Bluff Way} Centerville TX 77391 richard_rosakrans@noway1234.com {Richard Rosakrans} {11682 Oak Drive} {San Felipe} TX 77579 neukirch348@noway1234.com {John Neukirch} {8704 East 102nd Avenue} Katy TX 77052 keener738@noway1234.com {Keener Ruter} {6014 Mars Drive} Star TX 77571 mitchell_altman@noway1234.com {Mitchell Altman} {8845 Hosken Street} Pattison TX 77045 diaz691@noway1234.com {Nadine Diaz} {2936 Silver Chase Court} Sunnyville TX 77222 yoder35@noway1234.com {Otto Yoder} {6880 Thurman Drive} Newcastle TX 77590 mccain466@noway1234.com {Diann McCain} {6316 Barat Circle} Burnie TX 77393 rubin651@noway1234.com {Marcella Rubin} {11299 Eagle Place Loop} {Alice Springs} TX 77234 pope416@noway1234.com {Runion Pope} {8563 Turnagain Street} Kema TX 77806 bennie420@noway1234.com {Bennie Hillyer} {925 Blueberry Road} {Tennant Creek} TX 77306 frances_mcnergney@noway1234.com {Frances McNergney} {3642 Ponderosa Drive} Townsville TX 77263 frame311@noway1234.com {Frame Durman} {9309 Ridgeview Drive} Amarillo TX 77128 lewis477@noway1234.com {Lewis McAlexander} {6674 Valley Park Drive} {Padre Island} TX 77530 clara_goers@noway1234.com {Clara Goers} {4861 Loon Circle} {Tennant Creek} TX 77498 richardson_dumitru@noway1234.com {Richardson Dumitru} {9553 Tundra Court} Pattison TX 77426 conradt372@noway1234.com {Reed Conradt} {2418 Chellie's Circle} Independence TX 77202 p_borrenpohl@noway1234.com {P. Borrenpohl} {2880 Aspen Drive} Hamilton TX 77677 irene331@noway1234.com {Irene Anderson} {11178 Communications Avenue} {San Felipe} TX 77104 foetisch440@noway1234.com {Roy Foetisch} {11391 Tarika Avenue} {Port Augusta} TX 77415 galen@noway1234.com {Galen Warden} {6978 Dunkirk Drive} Queenstown TX 77357 bruce70@noway1234.com {Bruce Neill} {11138 Park Hills Circle} Waco TX 77918 bonita138@noway1234.com {Bonita Weakland} {178 Lionheart Court} Broome TX 77994 paul_mchenry@noway1234.com {Paul McHenry} {11522 Sagan Circle} Nacogdoches TX 77727 ira4@noway1234.com {Ira Phillips} {4738 Antelope Lane} Albury TX 77829 cottrill@noway1234.com {Cottrill Allen} {1957 Baird Circle} Pattison TX 77858 melissa_geweke@noway1234.com {Melissa Geweke} {9318 Schulz Lane} Townsville TX 77026 robertson539@noway1234.com {Earl Robertson} {1227 Charlie Road} {Alice Springs} TX 77038 monk_holden@noway1234.com {Monk Holden} {4170 Chugach Way} Bendigo TX 77261 rodriques@noway1234.com {Auline Rodriques} {10020 Daisy Lane} Independence TX 77908 rommie544@noway1234.com {Rommie Garris} {5934 Hane Street} Hamilton TX 77018 horace@noway1234.com {Horace Puchalla} {4174 Connors Trail Circle} {Tennant Creek} TX 77699 betty834@noway1234.com {Betty Osterhoudt} {122 Tena Street} Pattison TX 77123 riensche243@noway1234.com {Avis Riensche} {4379 Endicott Street} Rockhampton TX 77718 baucke860@noway1234.com {Kae Baucke} {11557 Rhone Street} Monaville TX 77845 nealy@noway1234.com {Nealy Evans} {2749 Floatplane Drive} Eucla TX 77517 karen427@noway1234.com {Karen Fink} {3214 North Klevin Street} Independence TX 77051 hamilton_oldfather@noway1234.com {Hamilton Oldfather} {11405 Dinaaka Drive} {Coober Pedy} TX 77387 wellensiek478@noway1234.com {Hazel Wellensiek} {7046 Vernye Place} Burnie TX 77158 okey_staley@noway1234.com {Okey Staley} {7203 Stolt Lane} Albany TX 77312 carte798@noway1234.com {Carte Schmiegelow} {5032 East 160th Avenue} Newcastle TX 77816 campbell810@noway1234.com {Vergie Campbell} {11966 Chilkat Court} Pattison TX 77878 givin485@noway1234.com {Givin Rexroth} {8969 Autumn Drive} Cairns TX 77461 guenther907@noway1234.com {Guenther Riensche} {7269 Forest Park Drive} Albury TX 77541 meredith_severns@noway1234.com {Meredith Severns} {5320 Jollipan Court} {Port Augusta} TX 77263 morris520@noway1234.com {Morris Scherrer} {6666 Tanada Circle} Launceston TX 77455 dodrill_giittinger@noway1234.com {Dodrill Giittinger} {7155 East 12th Court} Broome TX 77935 neill39@noway1234.com {Irene Neill} {2324 Breakwater Circle} Broome TX 77846 cantrell669@noway1234.com {Cantrell Woltemath} {3441 Ambassador Drive} {Mount Gambier} TX 77130 finney232@noway1234.com {L. Finney} {9950 Folker Circle} Rockhampton TX 77875 elliot@noway1234.com {Elliot Mann} {1847 Aphrodite Drive} {Port Hedland} TX 77451 henrichs349@noway1234.com {Maryaldine Henrichs} {2545 East 151st Avenue} {Tennant Creek} TX 77495 urban15@noway1234.com {Urban Hahn} {1001 Brookview Street} {Port Augusta} TX 77768 gibson925@noway1234.com {Annie Gibson} {9306 Papa Bear Lane} Independence TX 77844 laxton313@noway1234.com {Laxton Ensor} {5260 Harmany Ranch Road} Queenstown TX 77935 dorthy864@noway1234.com {Dorthy Hendee} {2525 Bentzen Circle} Townsville TX 77988 reiber317@noway1234.com {Faye Reiber} {6694 Robinson Road} {Port Hedland} TX 77733 brett@noway1234.com {Brett Leahy} {9085 Eklutna Village Road} Houston TX 77770 zeke_gibson@noway1234.com {Zeke Gibson} {9423 Mineral Circle} {Tennant Creek} TX 77977 baird212@noway1234.com {Charles Baird} {11634 Gander Street} Sunnyville TX 77555 johnson288@noway1234.com {Johnson Rohmeyer} {11441 Gilbert Road} Queenstown TX 77041 reiber986@noway1234.com {Jaime Reiber} {9579 Eide Street} Albury TX 77667 don751@noway1234.com {Don Holden} {11865 Victoria Drive} Tamworth TX 77093 roy833@noway1234.com {Roy Smith} {2699 Seafarer Loop} {Port Augusta} TX 77337 bates808@noway1234.com {Susan Bates} {9182 Eklutna Park Drive} Ketherine TX 77393 piersol885@noway1234.com {Tinney Piersol} {2538 Norway Drive} Austin TX 77761 volkmer768@noway1234.com {Diane Volkmer} {5743 Wilderness Road} Monaville TX 77466 christian77@noway1234.com {Christian Holben} {226 Stewart Street} {Mount Isa} TX 77439 putnam@noway1234.com {Martin Putnam} {11172 Foster Road} Austin TX 77963 herman352@noway1234.com {Delbert Herman} {3197 Papa Bear Lane} Austin TX 77617 roscoe@noway1234.com {Roscoe Agena} {1719 Prospect Place} Amarillo TX 77292 charlotte_kroll@noway1234.com {Charlotte Kroll} {7668 Postmark Drive} {Port Augusta} TX 77938 spier730@noway1234.com {Lynnette Spier} {10922 Ginpole Circle} {San Antonio} TX 77576 harold296@noway1234.com {Harold Putnam} {6202 Our Own Lane} Austin TX 77380 sapp@noway1234.com {G. Sapp} {7844 Ruane Road} Albury TX 77993 gladys_schultz@noway1234.com {Gladys Schultz} {11521 Eau Claire Place} {Broken Hill} TX 77923 ulysses708@noway1234.com {Ulysses Werner} {3921 Button Circle} Townsville TX 77558 schweppe25@noway1234.com {Rod Schweppe} {1074 West 76th Avenue} Albany TX 77975 g713@noway1234.com {G. Frederick} {11792 Hideaway Trail} Rockhampton TX 77711 dieckhoff819@noway1234.com {Sarah Dieckhoff} {1334 Brothers Avenue} {Coober Pedy} TX 77308 herbie930@noway1234.com {Herbie Phillips} {3520 West Cook Avenue} {Port Augusta} TX 77942 belle142@noway1234.com {Belle Koehler} {3518 Flat Top Avenue} Hamilton TX 77339 stephens866@noway1234.com {Bozo Stephens} {4009 East 10th Avenue} Newcastle TX 77318 higgins599@noway1234.com {Givin Higgins} {5377 East 9th Avenue} Bendigo TX 77812 schutz536@noway1234.com {Mary Schutz} {4019 Rosemary Street} {Coffs Harbour} TX 77046 calvin_klein@noway1234.com {Calvin Klein} {4544 Caribou Hill Place} Houston TX 77650 jennie@noway1234.com {Jennie Hardin} {1312 Del Street} Sunnyville TX 77817 huck_kunzman@noway1234.com {Huck Kunzman} {7839 Stonewood Place} {Padre Island} TX 77410 pearl_staley@noway1234.com {Pearl Staley} {10973 Old Klatt Road} Cairns TX 77373 young970@noway1234.com {Margaret Young} {7999 River's Edge Lane} {Padre Island} TX 77314 warnke606@noway1234.com {Roger Warnke} {2908 Flyway Avenue} {San Antonio} TX 77223 samuel736@noway1234.com {Samuel Doty} {7788 East Henkins Road} {Tennant Creek} TX 77600 squire@noway1234.com {Squire Riensche} {8958 Lloyd Drive} Austin TX 77107 reschke782@noway1234.com {Gloria Reschke} {10259 Dinaaka Drive} Bourke TX 77021 patrick_davison@noway1234.com {Patrick Davison} {5638 Birchtree Street} Austin TX 77425 severns401@noway1234.com {Kitzmiller Severns} {9075 Iowa Drive} Pattison TX 77743 finfrock497@noway1234.com {Mamie Finfrock} {4905 Cobblecreek Circle} Sunnyville TX 77398 matheny@noway1234.com {Matheny Nolte} {9376 West 27th Avenue} Eucla TX 77777 gordon783@noway1234.com {James Gordon} {398 Wiley Post Loop} Launceston TX 77994 doil@noway1234.com {Doil Phillips} {66 Rosebud Circle} Bendigo TX 77579 kavanaugh215@noway1234.com {Vena Kavanaugh} {4154 Culross Circle} Independence TX 77841 blishack181@noway1234.com {Blishack Badellino} {3880 Lilac Circle} Mildura TX 77954 allen869@noway1234.com {Charlotte Allen} {5773 Borealis Street} Centerville TX 77422 d_b967@noway1234.com {D.B. Bennett} {5111 Woodstock Circle} Austin TX 77882 mrs@noway1234.com {Mrs. Pieratt} {2058 Hartman Circle} Dallas TX 77788 parrisb536@noway1234.com {Harland Parrisb} {6672 Lipscomb Street} Monaville TX 77344 michl851@noway1234.com {Alice Michl} {4633 H Street} {Mount Isa} TX 77394 harrington939@noway1234.com {Hess Harrington} {5803 Guillemot Circle} Amarillo TX 77801 siske230@noway1234.com {Young Siske} {4916 Westbury Drive} {Tennant Creek} TX 77221 birnie560@noway1234.com {Joe Birnie} {7937 Joy Avenue} Sunnyville TX 77198 dencil451@noway1234.com {Dencil Suydan} {2172 Lincoln Ellsworth Court} Bourke TX 77141 nellie273@noway1234.com {Nellie Chrastil} {10844 Wright Street} {Alice Springs} TX 77877 earhart846@noway1234.com {Sebert Earhart} {9913 Clark's Road} Rockhampton TX 77705 rine713@noway1234.com {Edith Rine} {10921 Parkway Drive} Bourke TX 77414 ruth_mattheis@noway1234.com {Ruth Mattheis} {776 Musket Ball Place} Brookshire TX 77770 morse546@noway1234.com {Kathern Morse} {6507 Denson Lane} Tamworth TX 77344 burke@noway1234.com {Burke Speckmann} {1867 Terrace Drive} Waco TX 77061 rothell328@noway1234.com {Gene Rothell} {8229 Sparkle Drive} Centerville TX 77773 kathryn515@noway1234.com {Kathryn Sorensen} {643 Nickell Circle} Centerville TX 77850 l_s858@noway1234.com {L.S. Branting} {7862 Woodward Drive} {Tennant Creek} TX 77909 reiber771@noway1234.com {Rozella Reiber} {965 West 73rd Avenue} Kema TX 77175 griffith_schermbeck@noway1234.com {Griffith Schermbeck} {8799 Hidden View Court} Kema TX 77219 h_v670@noway1234.com {H.V. Ruter} {673 Victoria Court} OOdnadatta TX 77835 wolken340@noway1234.com {Lewis Wolken} {5893 West Dimond Boulevard} Bathurst TX 77874 betty498@noway1234.com {Betty Hahn} {8717 Bragaw Street} Wollongong TX 77444 otha_phommachack@noway1234.com {Otha Phommachack} {5728 West Circle} Hamilton TX 77523 nealie961@noway1234.com {Nealie Laue} {2731 Sheldon Jackson Street} Pattison TX 77350 johnson507@noway1234.com {Johnson Cary} {9842 Artemus Street} {San Felipe} TX 77488 joyce_sellhorn@noway1234.com {Joyce Sellhorn} {11145 East 81st Avenue} Launceston TX 77276 stoddard425@noway1234.com {Boggs Stoddard} {3299 Saint Moritz Drive} Townsville TX 77359 hinkle360@noway1234.com {Orville Hinkle} {9958 Quick Way} Cairns TX 77985 collins@noway1234.com {Collins Hitzeman} {5263 East Street} Broome TX 77244 pohlman499@noway1234.com {Ida Pohlman} {8587 Macinnes Street} Queenstown TX 77214 janis704@noway1234.com {Janis Mccoy} {4869 East 91st Avenue} Brookshire TX 77453 redith_boardman@noway1234.com {Redith Boardman} {9451 Chaparral Circle} Houston TX 77364 rachel_harman@noway1234.com {Rachel Harman} {11132 Dogwood Street} Newcastle TX 77076 rayburn767@noway1234.com {Rayburn Geiger} {1716 Waxwing Circle} Adelaide TX 77161 badertscher863@noway1234.com {Foster Badertscher} {10112 Snow Goose Circle} {San Antonio} TX 77290 mann653@noway1234.com {Jerold Mann} {11054 Rachel Avenue} Bathurst TX 77652 harvey_helm@noway1234.com {Harvey Helm} {10676 Merganser Avenue} Sunnyville TX 77183 hillie@noway1234.com {Hillie VanLaningham} {9648 Athens Avenue} Bendigo TX 77874 tressie660@noway1234.com {Tressie Hanau} {10515 Dawn Drive} Ketherine TX 77461 melvina_lyons@noway1234.com {Melvina Lyons} {1090 Macalister Drive} {Mount Isa} TX 77959 carmel_kaufman@noway1234.com {Carmel Kaufman} {8838 South Creek Road} Nacogdoches TX 77712 nielsen220@noway1234.com {Morris Nielsen} {3863 Endicott Street} {Port Augusta} TX 77423 coulter_bomar@noway1234.com {Coulter Bomar} {10903 Airport Way} Independence TX 77884 edna_mccain@noway1234.com {Edna McCain} {2174 Wranglers Way} Monaville TX 77212 ann172@noway1234.com {Ann Morrison} {5162 Glacier Pine Street} Sunnyville TX 77211 shartlet908@noway1234.com {Shartlet Zellmer} {7773 Wellsley Court} {San Felipe} TX 77470 dimple546@noway1234.com {Dimple Brinkman} {7002 Sunburst Circle} Star TX 77663 henderson_shaffer@noway1234.com {Henderson Shaffer} {3046 Criswell Circle} Independence TX 77859 mattox387@noway1234.com {Galen Mattox} {9358 Aphrodite Drive} Cairns TX 77517 jeff_sapp@noway1234.com {Jeff Sapp} {1531 Sonora Circle} {Mount Gambier} TX 77950 seeba198@noway1234.com {Mullins Seeba} {8768 Milky Way Circle} Nacogdoches TX 77576 verna_elenga@noway1234.com {Verna Elenga} {10342 Parsons Avenue} {Mount Isa} TX 77781 avis599@noway1234.com {Avis Taylor} {1231 Kimpton Circle} Hamilton TX 77682 rulla@noway1234.com {Carla Rulla} {7481 Pokey Circle} Nacogdoches TX 77530 morris197@noway1234.com {Morris Parrisb} {8880 Demeter Circle} {Mount Gambier} TX 77418 russell239@noway1234.com {Russell Doty} {5852 Tiros Avenue} {Padre Island} TX 77891 keener532@noway1234.com {Keener Greeb} {4409 Nearpoint Drive} Queenstown TX 77221 triplett224@noway1234.com {Triplett Berner} {9217 Vasili Drive} Queenstown TX 77922 d32@noway1234.com {D. Kent} {6293 Honeysuckle Drive} Townsville TX 77110 rosa285@noway1234.com {Rosa Wachosky} {243 Mountain Ash Drive} Eucla TX 77098 lantz358@noway1234.com {Gene Lantz} {7628 Shakespeare Circle} Adelaide TX 77996 philippi217@noway1234.com {IV Philippi} {3123 Freitag Circle} {San Felipe} TX 77772 marple551@noway1234.com {Marple MePherrin} {10123 Seafood Drive} Rockhampton TX 77592 russell579@noway1234.com {Russell Bogle} {9138 Powder Ridge Drive} Albury TX 77782 linn@noway1234.com {Linn Uhrmacher} {2842 Credit Union Drive} Wollongong TX 77189 kellis_bartholomew@noway1234.com {Kellis Bartholomew} {8453 Roe Way} Houston TX 77048 r421@noway1234.com {R. Petersen} {8040 West 89th Court} Waco TX 77414 landis356@noway1234.com {Landis Menard} {2622 Pickwick Place} Dallas TX 77460 helm218@noway1234.com {JoEllen Helm} {8990 Hunterwood Lane} Kema TX 77226 crook@noway1234.com {Crook Norvell} {5978 Lori Drive} Monaville TX 77472 gottula683@noway1234.com {Gwen Gottula} {1027 Ephreta Court} Katy TX 77669 lloyd72@noway1234.com {Lloyd Lofgren} {5300 Oren Street} Albury TX 77230 brockman853@noway1234.com {Rebecca Brockman} {2289 Aurora Street} Launceston TX 77912 wiese16@noway1234.com {Arthur Wiese} {5821 Man O War Road} {Broken Hill} TX 77502 mary57@noway1234.com {Mary Pieratt} {2086 Goose Lake Drive} Eucla TX 77361 triplett141@noway1234.com {Triplett Saunders} {579 Stumpy's Way} Wollongong TX 77613 patrica_fankhauser@noway1234.com {Patrica Fankhauser} {121 L Street} Kema TX 77485 little187@noway1234.com {Pino Little} {9335 Tower Estates Circle} {Tennant Creek} TX 77062 hemmer745@noway1234.com {Melvern Hemmer} {2950 Sportsman Road} Townsville TX 77717 stover982@noway1234.com {Stover Schacht} {4359 South Heather Meadows Loop} {Coober Pedy} TX 77953 lade@noway1234.com {Jackson Lade} {2006 Porcupine Trail Road} {Alice Springs} TX 77020 mclaughlin561@noway1234.com {Mclaughlin Bernadt} {541 Highlands Drive} Bathurst TX 77093 doylene7@noway1234.com {Doylene Schutz} {9792 Jackson Drive} Centerville TX 77561 becoa@noway1234.com {Becoa Morrissey} {11041 Spindrift Loop} Sunnyville TX 77796 pohlman816@noway1234.com {Jenevieve Pohlman} {5186 Ski View Road} Townsville TX 77631 shaffer125@noway1234.com {frame Shaffer} {2774 North Tahiti Loop} {Mount Gambier} TX 77047 norris_pfister@noway1234.com {Norris Pfister} {8848 Kempton Hills Drive} OOdnadatta TX 77241 gardner803@noway1234.com {Gardner Othmer} {2712 West Kanaga Loop} Nacogdoches TX 77934 dahl937@noway1234.com {Nona Dahl} {2860 Foxridge Circle} Austin TX 77599 samuel884@noway1234.com {Samuel Scharton} {6161 North Muldoon Road} {San Antonio} TX 77820 ellis538@noway1234.com {Rosalea Ellis} {11449 East 138th Avenue} Burnie TX 77145 pet459@noway1234.com {Pet Repp} {7607 Golden Spring Circle} Wollongong TX 77324 morrow618@noway1234.com {Pottie Morrow} {5557 Mc Clellan Circle} {Padre Island} TX 77271 neeman@noway1234.com {R. Neeman} {5302 Kronos Drive} Sunnyville TX 77611 nutter_heidemann@noway1234.com {Nutter Heidemann} {8451 Dean Place} Star TX 77086 pershing82@noway1234.com {Pershing Wherry} {6367 Division Street} Mildura TX 77362 nielsen941@noway1234.com {Gladys Nielsen} {6406 Northwood Park Circle} Wollongong TX 77923 w_s@noway1234.com {W.S. Phommachack} {5639 Fergy Circle} {Broken Hill} TX 77630 mapes@noway1234.com {Sandi Mapes} {8892 Jewel Mine Road} Launceston TX 77887 spence133@noway1234.com {Spence Ramsey} {3324 Mile Hi Way} Bourke TX 77731 feurer829@noway1234.com {Maryaldine Feurer} {2038 Delta Drive} Adelaide TX 77629 rudolph@noway1234.com {Rudolph West} {7383 Tony Circle} Broome TX 77647 thom662@noway1234.com {Royal Thom} {11999 Telder Street} Katy TX 77819 cora598@noway1234.com {Cora Lantz} {5051 East 27th Avenue} OOdnadatta TX 77663 nick@noway1234.com {Nick Heideman} {9043 Von Scheben Drive} Pattison TX 77279 todd@noway1234.com {Todd Mercure} {2450 Schneiter Drive} Austin TX 77492 watteyne922@noway1234.com {Holly Watteyne} {11424 East Tree Drive} {Coffs Harbour} TX 77644 aldana746@noway1234.com {Dodrill Aldana} {4620 Telephone Avenue} Nacogdoches TX 77500 hillyer223@noway1234.com {Austin Hillyer} {8883 Misty Mountain Circle} Houston TX 77132 bude219@noway1234.com {Bude Miller} {3583 Irwin Street} Adelaide TX 77367 chatta241@noway1234.com {Chatta Schultz} {1612 Skipper Street} Kema TX 77354 gordon116@noway1234.com {Frances Gordon} {10546 East 84th Court} Eucla TX 77324 babe508@noway1234.com {Babe Schacht} {8956 Wranglers Way} Brookshire TX 77291 melborne210@noway1234.com {Melborne Weakland} {6675 Addenda Circle} Ketherine TX 77730 tootsie403@noway1234.com {Tootsie Clark} {2126 Lori Drive} Galveston TX 77564 jackson_lott@noway1234.com {Jackson Lott} {7777 Gravins Circle} {Tennant Creek} TX 77962 riensche494@noway1234.com {Maxine Riensche} {662 Northfield Drive} {Mount Gambier} TX 77826 field816@noway1234.com {Ida Field} {6350 Ptarmigan Terrace Avenue} Ketherine TX 77343 kim@noway1234.com {Kim Juilfs} {9739 Ronald Place} Independence TX 77054 price@noway1234.com {Price Tejral} {5477 Fassler Circle} {Padre Island} TX 77769 sikyta949@noway1234.com {Dempsey Sikyta} {1416 Hazel Court} Pattison TX 77578 ann276@noway1234.com {Ann Colton} {6770 Marten Street} {Coffs Harbour} TX 77942 sandy@noway1234.com {Sandy Leuenberger} {342 Hartman Circle} Dallas TX 77266 lucinda@noway1234.com {Lucinda Harman} {2883 West Skyline Drive} Bourke TX 77176 garnie@noway1234.com {Garnie Hemmer} {8914 East 56th Avenue} Star TX 77609 chatta996@noway1234.com {Chatta Philippi} {1423 Campbell Creek Road} Bourke TX 77244 butcher939@noway1234.com {Butcher Peters} {9772 Park Circle} {Alice Springs} TX 77522 richard850@noway1234.com {Verelene Richard} {7906 West Lake Circle} Hamilton TX 77782 cox66@noway1234.com {Wibb Cox} {5547 Remington Circle} Tamworth TX 77718 darrel@noway1234.com {Darrel Hoke} {1634 Toakee Circle} {Alice Springs} TX 77511 v@noway1234.com {V. Amsberry} {6413 Challenger Circle} {San Antonio} TX 77600 harrison165@noway1234.com {Harrison Glasson} {8684 Sikorsky Avenue} Burnie TX 77394 stephens528@noway1234.com {Lance Stephens} {6429 Sullins Drive} Houston TX 77402 wendell107@noway1234.com {Kaye Wendell} {7291 Spurr Lane} {San Felipe} TX 77303 spence855@noway1234.com {Patsy Spence} {7950 Young Meadows Circle} Independence TX 77908 ellis379@noway1234.com {George Ellis} {5304 Clipper Ship Drive} Broome TX 77237 coleman@noway1234.com {Coleman Uhrmacher} {98 Jordan Circle} Townsville TX 77459 goose@noway1234.com {Goose Reinhardt} {3026 Foxridge Circle} {Port Hedland} TX 77690 jean_littlejohn@noway1234.com {Jean Littlejohn} {10200 Sumac Drive} Rockhampton TX 77852 cottingham527@noway1234.com {Jacquine Cottingham} {6432 Sherilynn Street} Rockhampton TX 77250 goracke336@noway1234.com {J. Goracke} {5923 West 10th Avenue} Mildura TX 77408 eileen154@noway1234.com {Eileen Bray} {127 Fischer Avenue} Newcastle TX 77683 holmstrom536@noway1234.com {Rona Holmstrom} {11827 Arbor Circle} Brookshire TX 77028 craig178@noway1234.com {Audre Craig} {8659 Ridgewood Circle} {Broken Hill} TX 77417 osterhoudt886@noway1234.com {Dr. Osterhoudt} {10357 New Glenn Highway} Cairns TX 77038 schultz705@noway1234.com {Mardell Schultz} {4938 Shakespeare Circle} Broome TX 77174 cheryle136@noway1234.com {Cheryle Werner} {7562 Vasili Drive} Independence TX 77867 sova606@noway1234.com {Deane Sova} {6800 Ascot Street} Bathurst TX 77119 jeanie_naber@noway1234.com {Jeanie Naber} {8040 Menzies Way} Centerville TX 77630 giittinger203@noway1234.com {Norma Giittinger} {13 Eric Circle} Mildura TX 77437 mccain984@noway1234.com {Bud McCain} {1169 Cedrus Circle} Cairns TX 77230 eugene16@noway1234.com {Eugene Reed} {11651 South Eagle River Loop Road} Hamilton TX 77629 floerke484@noway1234.com {Rhunie Floerke} {11826 East 69th Avenue} Katy TX 77615 carlos464@noway1234.com {Carlos Haughton} {2859 Sleepy Circle} {Port Augusta} TX 77102 karl458@noway1234.com {Karl Finn} {240 East 41st Avenue} Eucla TX 77763 sikyta769@noway1234.com {Molly Sikyta} {1690 Susitna Drive} Burnie TX 77561 berg99@noway1234.com {H.J. Berg} {782 Industrial Way} Queenstown TX 77541 pebble_stinson@noway1234.com {Pebble Stinson} {4672 Draper Drive} Tamworth TX 77355 diane_feese@noway1234.com {Diane Feese} {4436 East 36th Avenue} Queenstown TX 77533 teddy@noway1234.com {Teddy Borrenpohl} {8280 Nicoli Way} Albury TX 77300 annette917@noway1234.com {Annette Swanson} {9638 Old Ridge Road} Eucla TX 77521 koehler812@noway1234.com {McQuire Koehler} {6702 Tanya Circle} Wollongong TX 77741 s109@noway1234.com {S. Bohung} {8853 Pollock Drive} {Mount Gambier} TX 77512 grant@noway1234.com {Grant Aldana} {4025 Halfhitch Circle} Ketherine TX 77272 maggie621@noway1234.com {Maggie Roland} {1165 Smaldon Circle} {Port Hedland} TX 77086 maysel439@noway1234.com {Maysel Douglas} {5305 Kelly Ranch Road} Dallas TX 77541 vaughn287@noway1234.com {Vaughn Ramsey} {9482 Marmot Court} Queenstown TX 77424 pet974@noway1234.com {Pet Pfister} {9350 Wildwater Circle} Centerville TX 77344 georgia146@noway1234.com {Georgia Swanson} {9982 East Klatt Road} Sunnyville TX 77096 hemmer356@noway1234.com {Marian Hemmer} {1668 Toy Drive} {Port Hedland} TX 77871 r_a@noway1234.com {R.A. Hermsmeier} {199 Jumar Avenue} Monaville TX 77839 hazle486@noway1234.com {Hazle Neemann} {11766 Dunbar Lane} {San Antonio} TX 77650 emory192@noway1234.com {Emory Geweke} {10810 Wolf Creek Drive} Mildura TX 77103 august_cummins@noway1234.com {August Cummins} {1046 Citation Road} {Port Augusta} TX 77625 morrow899@noway1234.com {Adkins Morrow} {8631 Middlerock Road} Kema TX 77750 runion446@noway1234.com {Runion Buces} {8970 Lauren Ann Circle} Mildura TX 77746 tony881@noway1234.com {Tony Beck} {10889 Price Island Circle} {Alice Springs} TX 77257 floerke585@noway1234.com {Daisy Floerke} {2664 Cambridge Way} Katy TX 77519 zeke714@noway1234.com {Zeke Bischoff} {3048 Alaska Avenue} Albury TX 77724 cassel@noway1234.com {Cassel Hershberger} {2300 Chilligan Drive} Monaville TX 77649 goodrich@noway1234.com {L. Goodrich} {2918 West 121st Avenue} Star TX 77478 mcalexander73@noway1234.com {C. McAlexander} {161 Yukla Circle} Adelaide TX 77739 olga203@noway1234.com {Olga Thurber} {8811 Brookview Street} Albury TX 77704 elbert@noway1234.com {Elbert Berg} {51 Buckner Drive} {Coffs Harbour} TX 77050 keen@noway1234.com {Keen Schmid} {9442 Swanson Circle} {Coober Pedy} TX 77122 zeke13@noway1234.com {Zeke Warden} {5150 Deborah Lynn Circle} Rockhampton TX 77818 a4@noway1234.com {A. Purdy} {3615 Timberlane Drive} Bathurst TX 77095 beethe858@noway1234.com {Mary Beethe} {550 Ivory Drive} Eucla TX 77945 irene_brinkman@noway1234.com {Irene Brinkman} {5402 Liberty Road} Brookshire TX 77297 vina335@noway1234.com {Vina Staley} {6826 Brenner Circle} {Padre Island} TX 77825 wilson344@noway1234.com {Wilson Esser} {37 Bishop's Castle Circle} Star TX 77178 kaster318@noway1234.com {Aaron Kaster} {8219 Iris Drive} Dallas TX 77704 orvis728@noway1234.com {Orvis Kroll} {4444 Dawn Lane} Brookshire TX 77642 vernell@noway1234.com {Vernell Petersen} {5861 Upper Devils End Drive} {Tennant Creek} TX 77033 wellensiek598@noway1234.com {L.S. Wellensiek} {10194 Pointe Circle} Kema TX 77030 jim481@noway1234.com {Jim Schweppe} {4035 Arcturus Circle} Amarillo TX 77734 dorsey_mattheis@noway1234.com {Dorsey Mattheis} {2656 Bridget Drive} Star TX 77624 gladys_graff@noway1234.com {Gladys Graff} {7030 Mountain Goat Drive} Bathurst TX 77593 hamm296@noway1234.com {Oma Hamm} {9818 Henkins Road} Launceston TX 77151 jackie624@noway1234.com {Jackie Hershberger} {749 Bunnyshoe Circle} {Coffs Harbour} TX 77126 uhrmacher@noway1234.com {Verna Uhrmacher} {1796 White Birch Road} {Tennant Creek} TX 77106 everett739@noway1234.com {Everett Cummins} {7125 Wakefield Circle} Dallas TX 77809 hamrick122@noway1234.com {Hamrick McCain} {2726 Dean Place} Bendigo TX 77001 evans71@noway1234.com {Mell Evans} {11322 Sprucewood Street} Rockhampton TX 77988 barnabas341@noway1234.com {Barnabas Guenther} {3625 Hemlock Street} OOdnadatta TX 77929 wood676@noway1234.com {Wood Juilfs} {3812 Eau Claire Place} Dallas TX 77635 patrica_volkmer@noway1234.com {Patrica Volkmer} {3739 Chalet Place} {Mount Gambier} TX 77700 ralph48@noway1234.com {Ralph Bennett} {5335 East 24th Avenue} {Coober Pedy} TX 77496 kennith511@noway1234.com {Kennith Wright} {281 Kimball Street} Albury TX 77653 margaret210@noway1234.com {Margaret Straube} {3938 Lahr Circle} {Broken Hill} TX 77785 dollarhide702@noway1234.com {Constance Dollarhide} {2911 Albion Circle} {Padre Island} TX 77800 woltemath176@noway1234.com {Alva Woltemath} {8794 Leo Street} {Tennant Creek} TX 77533 jones321@noway1234.com {Galen Jones} {5581 Lake View Circle} Albany TX 77351 jacquelene@noway1234.com {Jacquelene Brott} {8968 Brayton Drive} Albany TX 77817 carl_sobotta@noway1234.com {Carl. Sobotta} {3098 West Loop Road} {Mount Gambier} TX 77336 irene510@noway1234.com {Irene Paden} {10967 Nigh Road} {San Felipe} TX 77903 lantz582@noway1234.com {Claude Lantz} {1042 Maylen Circle} Burnie TX 77922 warren@noway1234.com {Warren Seward} {4817 Merrill Field Drive} Bendigo TX 77043 chittenden2@noway1234.com {Russ Chittenden} {10842 Artemus Avenue} {Port Hedland} TX 77706 mcalexander604@noway1234.com {Darla Mcalexander} {2639 Stargate Circle} {Port Augusta} TX 77946 fink290@noway1234.com {Etta Fink} {4426 East Eagle River Loop Road} Pattison TX 77689 goldie112@noway1234.com {Goldie Sapp} {2121 Lindblad Avenue} Hamilton TX 77556 wheeler385@noway1234.com {Kae Wheeler} {11784 North Cordova Street} Centerville TX 77994 higgins394@noway1234.com {Coffman Higgins} {8809 East 7th Avenue} Monaville TX 77310 theodore@noway1234.com {Theodore Frederick} {3151 Black Bear Circle} Cairns TX 77575 nolan@noway1234.com {Nolan Rathe} {1931 West 28th Court} Hamilton TX 77572 herbie472@noway1234.com {Herbie Amsberry} {1106 Pyrenean Circle} Monaville TX 77825 altman100@noway1234.com {Amanda Altman} {8198 Orbit Circle} {Mount Gambier} TX 77499 horner391@noway1234.com {Chessie Horner} {5713 Falklands Loop} Amarillo TX 77105 boyden450@noway1234.com {Hubert Boyden} {7600 Tower Estates Circle} Waco TX 77190 goings272@noway1234.com {Glen Goings} {3206 Oxford Bluff Circle} Queenstown TX 77193 gregory694@noway1234.com {Shelia Gregory} {11568 Jesters Place} {Padre Island} TX 77983 constance850@noway1234.com {Constance Niemann} {1576 Southpark Loop} Independence TX 77231 hesman850@noway1234.com {Mary Hesman} {7566 Sunshine Loop} Star TX 77895 murphy131@noway1234.com {Dr. Murphy} {5148 Bering Street} Burnie TX 77453 punk_xayaphonesongkham@noway1234.com {Punk Xayaphonesongkham} {4318 Amchitka Circle} Centerville TX 77762 rulla194@noway1234.com {Monk Rulla} {11324 Birch Drive} Mildura TX 77255 houmann52@noway1234.com {Myron Houmann} {3153 Northway Drive} Bathurst TX 77333 ragon368@noway1234.com {Bud Ragon} {6342 Lafayette Circle} Cairns TX 77283 grass272@noway1234.com {Ralph Grass} {6470 George Court} Houston TX 77410 sybil651@noway1234.com {Sybil Stahl} {1403 Poseidon Drive} {Port Hedland} TX 77490 mcdonald93@noway1234.com {Lantie McDonald} {7118 North Klevin Street} Bourke TX 77910 nadine210@noway1234.com {Nadine King} {8238 Loretta Place} {Mount Gambier} TX 77018 geiger340@noway1234.com {Dencil Geiger} {4275 Hidden Point Loop} Bendigo TX 77063 norman209@noway1234.com {Norman Keim} {6426 Ceres Circle} Hamilton TX 77758 harman188@noway1234.com {Marge Harman} {5477 Telequana Circle} Newcastle TX 77870 ahtelene742@noway1234.com {Ahtelene Van} {4211 West 38th Place} Albury TX 77728 kage19@noway1234.com {Baughman Kage} {8869 Shamrock Street} {San Felipe} TX 77829 stauffer866@noway1234.com {Geraldine Stauffer} {3354 Quartz Avenue} {San Felipe} TX 77401 sand658@noway1234.com {Griffith Sand} {4504 Merganser Circle} Eucla TX 77821 mahler342@noway1234.com {Mary Mahler} {4749 Fairkytes Circle} Kema TX 77970 dwinell263@noway1234.com {Thomas Dwinell} {3045 Huot Circle} Broome TX 77591 d421@noway1234.com {D. Luck} {3739 Hilltop Drive} Amarillo TX 77245 morse46@noway1234.com {Morse Bengtsson} {5013 Shaw Circle} Adelaide TX 77583 kavanaugh782@noway1234.com {Johnson Kavanaugh} {9791 Rosalind Street} Bathurst TX 77918 beard_werner@noway1234.com {Beard Werner} {4961 Faith Circle} Sunnyville TX 77467 hamer20@noway1234.com {Aletha Hamer} {3156 Foxridge Circle} Houston TX 77572 rue_rathe@noway1234.com {Rue Rathe} {9359 Strawberry Road} {Broken Hill} TX 77279 dorcas@noway1234.com {Dorcas Blessing} {2486 Camden Circle} {Port Hedland} TX 77320 keedy793@noway1234.com {Bee Keedy} {11492 Kerry Lane} Albany TX 77146 ruby795@noway1234.com {Ruby Laug} {9371 Muldoon Road} Independence TX 77575 hughes_weinrich@noway1234.com {Hughes Weinrich} {4159 Darby Road} {Mount Isa} TX 77402 durst363@noway1234.com {Rose Durst} {98 Andover Circle} OOdnadatta TX 77733 ines_huff@noway1234.com {Ines Huff} {3224 Runamuck Place} Launceston TX 77134 junie327@noway1234.com {Junie Todter} {11925 Goodnews Circle} {Broken Hill} TX 77459 newman_logsdon@noway1234.com {Newman Logsdon} {992 West 72nd Court} Adelaide TX 77277 mccain245@noway1234.com {Garret McCain} {9129 Cyrus Street} {Mount Isa} TX 77916 geanine_bengtsson@noway1234.com {Geanine Bengtsson} {1954 Calais Drive} Hamilton TX 77641 teske60@noway1234.com {Harold Teske} {5180 Beachwood Circle} OOdnadatta TX 77305 landry981@noway1234.com {Virginia Landry} {2057 Betula Drive} {Mount Isa} TX 77462 schlender284@noway1234.com {Early Schlender} {8608 Vista Court} Broome TX 77928 brany@noway1234.com {Brany Volkmer} {4966 East 54th Avenue} Cairns TX 77642 j727@noway1234.com {J. Dittmer} {517 Stylar Circle} Wollongong TX 77505 fricke991@noway1234.com {Ivan Fricke} {2942 Division Street} Star TX 77762 kathryn934@noway1234.com {Kathryn Seeba} {5224 Monarch Circle} Amarillo TX 77797 edith878@noway1234.com {Edith Amos} {5283 Tarwater Avenue} {Broken Hill} TX 77742 kent_diaz@noway1234.com {Kent Diaz} {9250 East 68th Avenue} {Port Hedland} TX 77592 lillian315@noway1234.com {Lillian Hupka} {6769 Lupine Road} {Port Augusta} TX 77772 wherry198@noway1234.com {Sandra Wherry} {9448 Sullins Drive} Bendigo TX 77561 graham@noway1234.com {Graham Carmine} {4417 Luliad Circle} Sunnyville TX 77339 littlejohn122@noway1234.com {s Littlejohn} {4960 Nathaniel Court} Tamworth TX 77543 margaret355@noway1234.com {Margaret Eells} {1119 Majella Circle} {Tennant Creek} TX 77297 bates410@noway1234.com {Helen Bates} {6982 East 13th Avenue} Brookshire TX 77753 garris48@noway1234.com {Brother Garris} {11303 Dawn Drive} Waco TX 77396 gail@noway1234.com {Gail Graff} {6101 West 92nd Avenue} Launceston TX 77196 holbert621@noway1234.com {Holbert Shaffer} {2140 South Tahiti Loop} Houston TX 77975 janice@noway1234.com {Janice McCulla} {3398 East 10th Avenue} {Coffs Harbour} TX 77635 jewell153@noway1234.com {Sarah Jewell} {5372 Kutchin Lane} Newcastle TX 77526 leonard993@noway1234.com {Leonard McNergney} {9849 Honeysuckle Drive} Houston TX 77395 kavanaugh604@noway1234.com {Josephine Kavanaugh} {4004 Mc Gowan Street} Tamworth TX 77088 ted386@noway1234.com {Ted Searcey} {4862 Merlin Loop} Bourke TX 77713 buces945@noway1234.com {Chip Buces} {3513 Stargazer Circle} Independence TX 77667 a839@noway1234.com {A. Bernadt} {5560 Roald Amundsen Avenue} Houston TX 77485 buck891@noway1234.com {Buck Stauffer} {7418 Skyway Drive} {Mount Gambier} TX 77377 pohlman539@noway1234.com {Rozella Pohlman} {3704 Telequana Circle} Amarillo TX 77879 tanner77@noway1234.com {Tanner Bauers} {5217 Lupine Street} {Broken Hill} TX 77170 williams430@noway1234.com {Rosalea Williams} {6833 Snowshoe Lane} Launceston TX 77989 fritsch243@noway1234.com {Iris Fritsch} {11167 Paso Place} Albany TX 77936 mathis819@noway1234.com {Quenton Mathis} {8551 Harrier Circle} Rockhampton TX 77550 donohue_mercure@noway1234.com {Donohue Mercure} {8995 Danner Avenue} {Port Augusta} TX 77890 glen266@noway1234.com {Glen Hester} {8363 Lumbis Avenue} Nacogdoches TX 77281 armknecht2@noway1234.com {Deborah Armknecht} {8387 Tampa Circle} {Padre Island} TX 77534 wenzel209@noway1234.com {G.W. Wenzel} {2312 Darlon Street} Bourke TX 77049 staley288@noway1234.com {Rene Staley} {6696 Florence Circle} Austin TX 77851 higgins814@noway1234.com {Butcher Higgins} {11510 Laurie Circle} Austin TX 77518 lanty651@noway1234.com {Lanty Morse} {904 Walker Circle} {Port Augusta} TX 77142 hasselbalch394@noway1234.com {Nora Hasselbalch} {3483 Krishka Circle} Amarillo TX 77722 naber719@noway1234.com {Violet Naber} {11287 Waterfall Drive} Independence TX 77047 barnette916@noway1234.com {Barnette MePherrin} {8954 Currin Circle} Newcastle TX 77844 doc847@noway1234.com {Doc Montz} {1063 Devin Circle} Galveston TX 77087 smithers803@noway1234.com {Dick Smithers} {6619 Vantage Avenue} Nacogdoches TX 77061 emogene@noway1234.com {Emogene Rothell} {10051 Mc Hugh Lane} Brookshire TX 77693 cora_brammann@noway1234.com {Cora Brammann} {807 Rodeo Circle} Katy TX 77402 moslander716@noway1234.com {Bradley Moslander} {8048 Shane Place} Sunnyville TX 77750 wiley_putnam@noway1234.com {Wiley Putnam} {3515 Happy Lane} Amarillo TX 77618 virginia236@noway1234.com {Virginia Guenther} {11315 Laura Lee Circle} {San Felipe} TX 77495 cary957@noway1234.com {frame Cary} {7044 Tempest Circle} Mildura TX 77549 hamric387@noway1234.com {Hamric DeVorss} {3491 Keuka Court} {San Felipe} TX 77997 june_ellis@noway1234.com {June Ellis} {182 Elim Street} Mildura TX 77312 aldana880@noway1234.com {Dodrill Aldana} {6800 Brown Avenue} Hamilton TX 77272 renae@noway1234.com {Renae Kroeze} {2867 Western Drive} Amarillo TX 77774 warder@noway1234.com {Warder Glasson} {7800 Forest Park Drive} Katy TX 77263 rebuck606@noway1234.com {Rod Rebuck} {6527 Denise Circle} Waco TX 77087 o@noway1234.com {O. Hippen} {1128 Wendy's Way} Townsville TX 77876 hemmer728@noway1234.com {Bryan Hemmer} {5482 Orion Circle} Houston TX 77588 ella_stordahl@noway1234.com {Ella Stordahl} {2214 Freedom Road} {Mount Isa} TX 77903 sobotta863@noway1234.com {Jean Sobotta} {8129 Wodstock Circle} {Mount Isa} TX 77474 littlejohn730@noway1234.com {Gladys Littlejohn} {7930 East Northern Lights Boulevard} Kema TX 77882 waggoner495@noway1234.com {Waggoner Gillette} {5279 Becky Lane} Townsville TX 77188 mavallee68@noway1234.com {Mavallee Kunzman} {9994 Cramer Place} {Mount Isa} TX 77726 paden726@noway1234.com {Goldie Paden} {9339 Balfour Drive} Tamworth TX 77089 lyons828@noway1234.com {Vincent Lyons} {1176 Rhone Circle} Queenstown TX 77420 jacquine211@noway1234.com {Jacquine Berg} {6755 East 58th Court} Albury TX 77888 malone420@noway1234.com {Amanda Malone} {9630 Corral Avenue} Amarillo TX 77523 levy_craig@noway1234.com {Levy Craig} {4268 East 51st Avenue} Albany TX 77990 brinkman159@noway1234.com {Sandra Brinkman} {6190 Hialeah Drive} Galveston TX 77208 amsberry929@noway1234.com {Maryln Amsberry} {6779 Summit View Street} Waco TX 77008 hardway778@noway1234.com {Hardway Fisher} {7020 Woodroe Lane} Austin TX 77562 russell622@noway1234.com {Darrel Russell} {2154 Pleasant View Drive} Star TX 77424 irne249@noway1234.com {Irne Bevard} {4986 Tulik Drive} {Broken Hill} TX 77976 sherman946@noway1234.com {Notinaham Sherman} {11907 Woodward Drive} Newcastle TX 77296 pebble_wiese@noway1234.com {Pebble Wiese} {3610 Oney Circle} Queenstown TX 77308 kunzman539@noway1234.com {Hanshaw Kunzman} {5243 Nabesna Circle} Newcastle TX 77259 lenore@noway1234.com {Lenore Hoke} {4480 Morning Drive} Galveston TX 77496 arlin@noway1234.com {Arlin Morrissey} {7807 Lori Court} Queenstown TX 77787 young_lantz@noway1234.com {Young Lantz} {5034 Homestead Trail} Mildura TX 77144 proctor674@noway1234.com {Butcher Proctor} {11956 Woodpecker Road} Cairns TX 77649 ella614@noway1234.com {Ella Lott} {4866 Blackstone Circle} {Port Hedland} TX 77228 kleine417@noway1234.com {Norman Kleine} {1194 Cordova Street} Mildura TX 77753 ritter379@noway1234.com {Neal Ritter} {9049 Adobe Drive} {Broken Hill} TX 77043 judy_badellino@noway1234.com {Judy Badellino} {10849 Seabreeze Circle} Katy TX 77140 tejral487@noway1234.com {Irne Tejral} {1925 Rockwell Avenue} {San Antonio} TX 77399 carrie57@noway1234.com {Carrie Schultz} {10007 Jennifer Circle} Dallas TX 77400 eltiste608@noway1234.com {Lomas Eltiste} {2948 Klutina Drive} Albany TX 77269 adam@noway1234.com {Adam Harman} {2571 Flintwood Place} Waco TX 77832 abraham@noway1234.com {Abraham Lohmeier} {2154 Brookshire Loop} Dallas TX 77543 gretta163@noway1234.com {Gretta Ritter} {3553 Sprint Circle} {Port Augusta} TX 77040 donna_bryan@noway1234.com {Donna Bryan} {8770 Joseph Street} Amarillo TX 77337 w_c@noway1234.com {W.C. Polson} {5205 Hatcher Circle} Mildura TX 77745 cumbers397@noway1234.com {cumbers Hemmer} {3465 Cedar Street} Bourke TX 77432 paul_lempke@noway1234.com {Paul Lempke} {6217 West 7th Avenue} OOdnadatta TX 77483 agnes@noway1234.com {Agnes Hervey} {2805 East 101st Avenue} {Mount Isa} TX 77030 joe83@noway1234.com {Joe Soumpholphakdy} {7611 Jehovahjireh Street} Amarillo TX 77338 vera_thies@noway1234.com {Vera Thies} {6490 Lone Tree Drive} Townsville TX 77276 audrey@noway1234.com {Audrey Boline} {4466 Kepner Drive} Townsville TX 77621 carolene681@noway1234.com {Carolene Malone} {8915 Joham Circle} {Alice Springs} TX 77223 miraih576@noway1234.com {Miraih Birnie} {8766 Blacktail Circle} Albany TX 77864 mccoy810@noway1234.com {Nelson McCoy} {7158 Campbell Place} Star TX 77205 hubert_brommer@noway1234.com {Hubert Brommer} {136 Avalon Circle} Launceston TX 77734 ferrel_dahl@noway1234.com {Ferrel Dahl} {2314 East 56th Avenue} Bourke TX 77404 site41@noway1234.com {Site Eells} {6177 Ares Circle} OOdnadatta TX 77438 l5@noway1234.com {L. Rine} {3475 Richmond Circle} Bendigo TX 77917 mcculla179@noway1234.com {Alta Mcculla} {6344 North Muldoon Road} {San Antonio} TX 77232 prussia179@noway1234.com {Prussia Cary} {467 Arctic Slope Avenue} Albury TX 77719 woodrow662@noway1234.com {Woodrow Peters} {9961 Shadow Lane} Kema TX 77686 w_l@noway1234.com {W.L. McLaughlin} {1863 Enstrom Circle} {San Antonio} TX 77600 johnson306@noway1234.com {Johnson Petersen} {1345 Wandering Lane} Tamworth TX 77681 vera519@noway1234.com {Vera Doty} {134 Bluebell Drive} Bendigo TX 77699 rosco@noway1234.com {Rosco Horstman} {3996 Star Drive} Galveston TX 77241 maycil@noway1234.com {Maycil Kelley} {5115 Alyeska Avenue} {Mount Gambier} TX 77450 holland@noway1234.com {Holland Jewell} {5907 Carolyn Street} Centerville TX 77278 vaughn928@noway1234.com {Vaughn Rickman} {7736 Side Hill Lane} Star TX 77601 chritton855@noway1234.com {Suflonia Chritton} {7289 Knik Avenue} {Mount Isa} TX 77694 hood985@noway1234.com {Daisy Hood} {6529 Woodcliff Drive} OOdnadatta TX 77070 norvell44@noway1234.com {Vaughn Norvell} {6976 Golden Dawn Circle} {Coober Pedy} TX 77151 white309@noway1234.com {White Hansel} {8583 Newton Court} Broome TX 77605 diana914@noway1234.com {Diana Ramsey} {900 Expedition Circle} Independence TX 77043 anne952@noway1234.com {Anne Berner} {5513 Koehler Street} Star TX 77389 smithers798@noway1234.com {Ray Smithers} {10027 Higher Terrace} Monaville TX 77445 jason_juilfs@noway1234.com {Jason Juilfs} {1047 Soldotna Drive} OOdnadatta TX 77526 joan733@noway1234.com {Joan Henrichs} {2294 Carriage Drive} Bendigo TX 77060 p909@noway1234.com {P. Peters} {5772 East 86th Avenue} {Padre Island} TX 77186 shelia_ensor@noway1234.com {Shelia Ensor} {2501 Northern Raven Drive} {Mount Gambier} TX 77050 ruby611@noway1234.com {Ruby Hayes} {302 Lila's Place} Eucla TX 77045 weakland687@noway1234.com {Juanita Weakland} {11649 Pronghorn Lane} {Mount Isa} TX 77382 butcher_geweke@noway1234.com {Butcher Geweke} {2533 Sky Mountain Lane} Waco TX 77307 ward260@noway1234.com {Ward Ditlevson} {3292 Crescent Avenue} {Port Augusta} TX 77534 behrends302@noway1234.com {Scottie Behrends} {3940 Silver Birch Drive} Kema TX 77541 ernest_rexroth@noway1234.com {Ernest Rexroth} {3065 Mc Intyre Road} Newcastle TX 77233 jeff606@noway1234.com {Jeff Snow} {5835 Rezanof Circle} Cairns TX 77123 doyle@noway1234.com {Doyle Huttenmeyer} {2863 Rudakof Circle} Centerville TX 77793 mcdonald270@noway1234.com {Lou McDonald} {4678 Kensington Circle} {Port Hedland} TX 77212 lomas479@noway1234.com {Lomas Rulla} {9256 Tranquillity Loop} Cairns TX 77848 kerner582@noway1234.com {Georgia Kerner} {2059 Culver Place} Tamworth TX 77839 rene_knock@noway1234.com {Rene Knock} {9266 Oney Circle} Galveston TX 77740 king148@noway1234.com {Ester King} {7256 Milrob Avenue} Centerville TX 77853 hadassah@noway1234.com {Hadassah Chrastil} {3603 Dean Place} Kema TX 77228 ruter251@noway1234.com {Irene Ruter} {9129 Our Own Lane} Tamworth TX 77616 bill300@noway1234.com {Bill Schermbeck} {10389 Park Place} Queenstown TX 77008 dawn111@noway1234.com {Dawn Juilfs} {2340 Greatland Drive} Broome TX 77311 goracke597@noway1234.com {Ora Goracke} {8801 Tall Spruce Drive} Katy TX 77335 nutter114@noway1234.com {Nutter Dillaplain} {206 Dundas Circle} Houston TX 77576 steven915@noway1234.com {Steven King} {7710 Hogan Bay Circle} Broome TX 77114 betty_cottingham@noway1234.com {Betty Cottingham} {10955 Hampshire Boulevard} {Coober Pedy} TX 77888 griffith356@noway1234.com {Griffith Miller} {2180 Tana Circle} Albany TX 77050 keener669@noway1234.com {Keener Mattox} {6290 Sundi Drive} Waco TX 77536 lou_heideman@noway1234.com {Lou Heideman} {5971 Dixie Court} Sunnyville TX 77705 strickland855@noway1234.com {Strickland Taylor} {7957 Wolf Creek Drive} Dallas TX 77835 amanda181@noway1234.com {Amanda Bennett} {9354 East 52nd Avenue} Tamworth TX 77366 mathew@noway1234.com {Mathew Graff} {10996 Lewis Place} Sunnyville TX 77141 logsdon970@noway1234.com {Kermit Logsdon} {9410 Craig Creek Circle} Centerville TX 77091 martha989@noway1234.com {Martha Aldana} {9777 Lower Cranberry Drive} {Mount Gambier} TX 77303 delma363@noway1234.com {Delma Klein} {5181 Idaho Street} Katy TX 77644 lane431@noway1234.com {Lane Phillips} {6391 Aries Court} {Port Augusta} TX 77396 nellie167@noway1234.com {Nellie Clark} {2247 Lois Drive} {Mount Gambier} TX 77477 e_burns_stephens@noway1234.com {E.Burns Stephens} {1370 Stella Place} Ketherine TX 77295 dawson627@noway1234.com {Dawson Mueller} {6452 Elder Drive} Bathurst TX 77371 nora178@noway1234.com {Nora Meister} {4236 East 43rd Place} Eucla TX 77470 jerie517@noway1234.com {Jerie Dittmer} {472 End Street} {Coffs Harbour} TX 77784 triplett90@noway1234.com {Emanuel Triplett} {9535 Katlian Drive} Houston TX 77893 rine508@noway1234.com {Wendell Rine} {9518 Lakewood Court} Ketherine TX 77418 virginia904@noway1234.com {Virginia Rexroth} {9799 Mary Circle} {Coober Pedy} TX 77908 belle_kage@noway1234.com {Belle Kage} {10857 Woodway Circle} {Port Hedland} TX 77591 serena931@noway1234.com {Serena Johnson} {6747 Cumberland Circle} {San Antonio} TX 77000 bryce44@noway1234.com {Bryce Scott} {4704 Dallas Street} {Tennant Creek} TX 77495 virginia828@noway1234.com {Virginia Branting} {10335 Challenger Circle} Pattison TX 77189 morrison330@noway1234.com {Bird Morrison} {2054 Artus Street} Tamworth TX 77979 delbert592@noway1234.com {Delbert Polson} {11319 Westland Circle} OOdnadatta TX 77733 stephens740@noway1234.com {J. Stephens} {11100 Sagwon Avenue} Eucla TX 77745 carson611@noway1234.com {Clara Carson} {5641 Mountain Ash Drive} Monaville TX 77107 charlotte883@noway1234.com {Charlotte Kohout} {910 Revilla Circle} Monaville TX 77123 ramsey188@noway1234.com {Ramsey Zillig} {4475 Bugle Court} Newcastle TX 77018 eunice975@noway1234.com {Eunice Ditlevson} {4965 Brookside Drive} {Padre Island} TX 77198 june491@noway1234.com {June Werner} {11514 Traverse Way} Star TX 77780 punk913@noway1234.com {Punk King} {5902 Yorkshire Lane} Burnie TX 77566 wendell310@noway1234.com {Gumm Wendell} {7897 Lobdell Street} {Port Hedland} TX 77787 cox969@noway1234.com {Lillie Cox} {5373 Kilkenny Circle} Ketherine TX 77625 donzel_sullivan@noway1234.com {Donzel Sullivan} {866 Tyone Court} {San Felipe} TX 77367 paxton_rogers@noway1234.com {Paxton Rogers} {6906 Camelot Circle} Hamilton TX 77311 lucille434@noway1234.com {Lucille Kerr} {6725 Harriet Court} Nacogdoches TX 77335 kettelhake2@noway1234.com {Russell Kettelhake} {7985 Mountain Way} Rockhampton TX 77875 morris699@noway1234.com {Dodrill Morris} {3583 Misty Meadows Drive} Queenstown TX 77669 husing884@noway1234.com {Galford Husing} {11844 Woodcliff Drive} Dallas TX 77794 dallas_meints@noway1234.com {Dallas Meints} {6097 West 70th Circle} OOdnadatta TX 77788 donard261@noway1234.com {Donard Carman} {10585 Kiska Circle} Adelaide TX 77459 huck34@noway1234.com {Huck Rohrs} {4275 Raven Crest Circle} Star TX 77248 dieckmann195@noway1234.com {Bud Dieckmann} {11069 West 32nd Avenue} {Coffs Harbour} TX 77124 dolores@noway1234.com {Dolores Hanau} {790 Spar Avenue} {San Felipe} TX 77113 keedy612@noway1234.com {Rhetta Keedy} {1454 Blue Heron Circle} Hamilton TX 77185 rogers602@noway1234.com {Rogers Blessing} {8493 Tideview Drive} Bathurst TX 77043 schultz468@noway1234.com {Frances Schultz} {11784 Atherton Road} {Padre Island} TX 77483 greeb128@noway1234.com {Steph Greeb} {11023 Porcupine Trail Road} Nacogdoches TX 77281 reufus@noway1234.com {Reufus Wenzel} {2643 Carlina Drive} Newcastle TX 77941 ann174@noway1234.com {Ann Farley} {10410 East 58th Circle} Houston TX 77415 rosilia@noway1234.com {Rosilia Xayaphonesongkham} {1444 Concord Lane} Austin TX 77408 victor640@noway1234.com {Victor Norvell} {4689 Kodiak Street} Hamilton TX 77507 niemann24@noway1234.com {Loring Niemann} {10438 Foster Road} Bathurst TX 77888 rhetta113@noway1234.com {Rhetta Lambelet} {4477 Misty Meadows Drive} {Tennant Creek} TX 77028 paul91@noway1234.com {Paul Blessing} {8577 Roosevelt Drive} Brookshire TX 77455 ora805@noway1234.com {Ora Barden} {8530 Brooks Drive} Rockhampton TX 77670 katherine_sellman@noway1234.com {Katherine Sellman} {737 Lander Place} Burnie TX 77536 shelton726@noway1234.com {Shelton Foetisch} {646 Defiance Street} Townsville TX 77047 karen581@noway1234.com {Karen Reiber} {7271 Wandering Lane} Bourke TX 77745 boline796@noway1234.com {Evelyn Boline} {8593 Anvik Circle} Monaville TX 77664 gertrude@noway1234.com {Gertrude Repp} {10527 Courage Circle} Austin TX 77882 eugene426@noway1234.com {Eugene Ellis} {3908 Price Street} Star TX 77888 goers503@noway1234.com {Dawson Goers} {4111 Linda Lane} Dallas TX 77448 betty293@noway1234.com {Betty Soumpholphakdy} {11239 Jupiter Drive} {Mount Gambier} TX 77121 henrietta586@noway1234.com {Henrietta Lacey} {9433 Helluva Street} Albany TX 77992 doeden963@noway1234.com {Ulysses Doeden} {1847 Castner Circle} Dallas TX 77549 e921@noway1234.com {E. Mahler} {385 Laurel Street} {Alice Springs} TX 77743 zellmer364@noway1234.com {Karen Zellmer} {10599 Morphy Court} {San Antonio} TX 77083 irene_tenhulzen@noway1234.com {Irene TenHulzen} {9806 Okemo Road} Bourke TX 77374 red835@noway1234.com {Red Ham} {9750 Dewey Circle} {Broken Hill} TX 77389 dills294@noway1234.com {Keener Dills} {5631 Falling Water Circle} {Port Augusta} TX 77195 hanau887@noway1234.com {Ottie Hanau} {6029 East 75th Court} Bathurst TX 77403 linda524@noway1234.com {Linda Tucker} {5162 West 86th Avenue} Cairns TX 77180 mcpherrin591@noway1234.com {E. McPherrin} {7436 Lockheed Avenue} {Padre Island} TX 77476 befty982@noway1234.com {Befty Stephens} {10850 Second Street} Mildura TX 77310 todter60@noway1234.com {Daisy Todter} {3005 Eastwood Loop} Brookshire TX 77315 haskel574@noway1234.com {Haskel Leahy} {2858 Baird Circle} Mildura TX 77729 schreiner284@noway1234.com {Chip Schreiner} {904 Cox Drive} {Port Augusta} TX 77388 britt549@noway1234.com {Wilson Britt} {4961 Danny Drive} Tamworth TX 77293 neemann793@noway1234.com {Jefferson Neemann} {4976 Hamilton Drive} Adelaide TX 77280 joann_tucker@noway1234.com {JoAnn Tucker} {6354 Myrtle Drive} {Port Hedland} TX 77155 emogene_meister@noway1234.com {Emogene Meister} {7525 Ticonderoga Place} {Coffs Harbour} TX 77002 nadeen@noway1234.com {Nadeen Ray} {6327 Lakeview Drive} Tamworth TX 77993 mueller414@noway1234.com {Norma Mueller} {2553 Camrose Drive} {Mount Gambier} TX 77826 wendell335@noway1234.com {Wendell Little} {9788 East 162nd Avenue} Houston TX 77528 mutt960@noway1234.com {Mutt Hoke} {2916 Wildwater Circle} Houston TX 77801 buerstetta386@noway1234.com {Charlotte Buerstetta} {6214 Ruane Road} Queenstown TX 77835 oat722@noway1234.com {Oat Proctor} {122 West 48th Avenue} Wollongong TX 77531 severns630@noway1234.com {Triplett Severns} {8859 Lisa Court} Monaville TX 77957 weible699@noway1234.com {Drema Weible} {11353 Holitna Circle} Launceston TX 77572 gordon901@noway1234.com {Graham Gordon} {5771 Holly Lane} Monaville TX 77837 early_finney@noway1234.com {Early Finney} {2100 Macinnes Street} Kema TX 77961 roland162@noway1234.com {Opal Roland} {8108 Alaska Regional Drive} {Port Hedland} TX 77876 rush460@noway1234.com {Rush Clements} {6282 West 44th Place} Katy TX 77127 ben@noway1234.com {Ben Neill} {1711 Benjamin Road} Albury TX 77593 carter302@noway1234.com {Sonny Carter} {9215 Tanadak Circle} Launceston TX 77725 triplett77@noway1234.com {Mctheny Triplett} {8596 Wolverine Street} Ketherine TX 77847 fox292@noway1234.com {Phillips Fox} {9087 Robinson Road} {Mount Gambier} TX 77068 sherwood@noway1234.com {Sherwood Aden} {7057 Bowdoin Circle} Albany TX 77170 lou223@noway1234.com {Lou Bane} {1136 Marble Circle} {Mount Gambier} TX 77206 olive183@noway1234.com {Olive Kage} {2425 E Street} Monaville TX 77746 blessing538@noway1234.com {Ruth Blessing} {1939 Paso Place} {Mount Gambier} TX 77319 diane204@noway1234.com {Diane Mason} {10173 Nickell Circle} Albury TX 77674 tortie638@noway1234.com {Tortie Fricke} {5765 Brookwood Circle} Bathurst TX 77420 kavanaugh473@noway1234.com {Hall Kavanaugh} {2166 Gulf Circle} Bendigo TX 77960 bail554@noway1234.com {Bail Williams} {8374 East 25th Court} Star TX 77451 holmstrom941@noway1234.com {Lois Holmstrom} {8007 Kamkoff Avenue} Broome TX 77517 ammie710@noway1234.com {Ammie Finn} {9960 Prescott Street} Nacogdoches TX 77120 holden948@noway1234.com {Ford Holden} {6449 West 71st Avenue} {Mount Gambier} TX 77769 theodore429@noway1234.com {Theodore Kleine} {4886 Brown Tree Circle} Bendigo TX 77992 hermsmeier625@noway1234.com {Donna Hermsmeier} {8119 Arboretum Street} Eucla TX 77095 nick810@noway1234.com {Nick Keedy} {11518 West Loop Road} {Broken Hill} TX 77620 sears11@noway1234.com {Colluzzi Sears} {10246 Brudne Road} Monaville TX 77525 lois_phommachack@noway1234.com {Lois Phommachack} {10760 Dixie Court} Wollongong TX 77106 diane_putnam@noway1234.com {Diane Putnam} {9894 Betty Street} {San Antonio} TX 77788 mickey504@noway1234.com {Mickey Pluta} {6203 Reeve Boulevard} Rockhampton TX 77675 cottrill_hoke@noway1234.com {Cottrill Hoke} {10373 Park Place Street} Dallas TX 77446 todter881@noway1234.com {T.G. Todter} {10516 Tondi Lane} Monaville TX 77337 jacquine_hardin@noway1234.com {Jacquine Hardin} {4796 Redwood Street} Broome TX 77426 darleen264@noway1234.com {Darleen Rauner} {1367 Dunkirk Drive} Pattison TX 77939 tagart920@noway1234.com {Alice Tagart} {11498 Oomiak Circle} {Tennant Creek} TX 77821 straube993@noway1234.com {Michael Straube} {9827 Temple Drive} OOdnadatta TX 77053 buethe123@noway1234.com {Lucille Buethe} {3065 Concord Hill Circle} Townsville TX 77746 gibson954@noway1234.com {Lana Gibson} {9620 Kershner Avenue} Star TX 77113 person799@noway1234.com {Moore Person} {8153 Susan Circle} Hamilton TX 77833 vergie_belding@noway1234.com {Vergie Belding} {10124 Jewel Terrace Circle} Houston TX 77039 aufdenkamp@noway1234.com {Loring Aufdenkamp} {6812 Ingram Street} Bendigo TX 77261 lena@noway1234.com {Lena DeVorss} {11021 Colonial Court} Hamilton TX 77827 nora_johns@noway1234.com {Nora Johns} {7411 Maytag Street} Burnie TX 77336 aden768@noway1234.com {Mavallee Aden} {606 Hidden Creek Lane} Sunnyville TX 77120 packett560@noway1234.com {Jeanette Packett} {6317 Baylor Way} {San Felipe} TX 77124 nadine20@noway1234.com {Nadine Sackaly} {3856 Needle Circle} Launceston TX 77171 harman995@noway1234.com {Facemire Harman} {3935 Wisteria Street} Katy TX 77837 vincent_schacht@noway1234.com {Vincent Schacht} {5613 Kamishak Bay Circle} Kema TX 77976 reilly148@noway1234.com {Annie Reilly} {11676 Southbluff Circle} Galveston TX 77401 harold666@noway1234.com {Harold Hinkle} {9004 View Heights Way} {Mount Isa} TX 77927 schmiegelow459@noway1234.com {Barnette Schmiegelow} {11414 Tahoe Circle} {San Felipe} TX 77836 eugene450@noway1234.com {Eugene Bernadt} {9143 Cheveley Street} Bathurst TX 77309 bengtsson54@noway1234.com {Lorene Bengtsson} {7312 Lance Circle} {Mount Gambier} TX 77120 greeb399@noway1234.com {L. Greeb} {6054 Takli Circle} Centerville TX 77046 bomar493@noway1234.com {Delsie Bomar} {11367 Lochwood Circle} Broome TX 77253 stump_littlejohn@noway1234.com {Stump Littlejohn} {4822 East 35th Avenue} Katy TX 77051 mcdonald945@noway1234.com {Oran McDonald} {3583 Old Rabbit Creek Road} Dallas TX 77992 jngrid@noway1234.com {Jngrid Spence} {8445 Eula Street} {Coffs Harbour} TX 77811 riley@noway1234.com {Riley Chittenden} {904 Taurus Circle} {Broken Hill} TX 77070 legg878@noway1234.com {Legg Dittmer} {4734 Woodridge Circle} Hamilton TX 77172 satan@noway1234.com {Satan Pan} {7280 Retriever Circle} {San Felipe} TX 77891 dencil847@noway1234.com {Dencil Sikyta} {6844 Upper Bowery Lane} Amarillo TX 77918 alferd553@noway1234.com {Alferd Eells} {5378 Glen Alps Road} Albany TX 77161 karen77@noway1234.com {Karen Smithers} {6293 Astro Circle} Albury TX 77612 patty_taylor@noway1234.com {Patty Taylor} {505 Humble Court} Ketherine TX 77134 rush517@noway1234.com {Rush Huff} {4961 Oren Street} Albury TX 77698 luck172@noway1234.com {Walter Luck} {11893 Dorchester Street} Austin TX 77297 v_lofgren@noway1234.com {V. Lofgren} {8819 Chickweed Lane} Brookshire TX 77156 van378@noway1234.com {Moss Van} {2940 Brittany Circle} Brookshire TX 77031 wib_hoke@noway1234.com {Wib Hoke} {10753 Trena Street} Kema TX 77386 radia_mueller@noway1234.com {Radia Mueller} {11477 Newhaven Loop} Katy TX 77852 koehler775@noway1234.com {Gay Koehler} {11515 Fallow Circle} Brookshire TX 77784 evalena_kuhl@noway1234.com {Evalena Kuhl} {7923 The Sun Loft Drive} Sunnyville TX 77112 ramsey_malone@noway1234.com {Ramsey Malone} {3635 Langnes Court} OOdnadatta TX 77262 betty24@noway1234.com {Betty Tagart} {6720 Country Club Lane} Galveston TX 77386 hildreth@noway1234.com {Hildreth Nielsen} {1675 Liberty Circle} {Mount Gambier} TX 77572 donavon@noway1234.com {Donavon Hayes} {2130 Stern Circle} Brookshire TX 77237 darla591@noway1234.com {Darla Schacht} {1987 Travis Lane} Tamworth TX 77910 neeman658@noway1234.com {Aletha Neeman} {6711 Refuge Circle} OOdnadatta TX 77126 darrell_sayakhoummane@noway1234.com {Darrell Sayakhoummane} {4091 Lowell Circle} Star TX 77812 notinaham29@noway1234.com {Notinaham Geiger} {4550 Essex Circle} Austin TX 77885 birnie662@noway1234.com {Jenny Birnie} {10987 Third Street} Kema TX 77061 hahn772@noway1234.com {Vera Hahn} {95 East 89th Avenue} Pattison TX 77124 mckinney778@noway1234.com {Joan McKinney} {5558 Audubon Drive} {Port Hedland} TX 77724 young580@noway1234.com {Young Bennett} {1217 Sherwood Circle} Star TX 77974 grass311@noway1234.com {Mathew Grass} {5964 Tsusena Circle} Bathurst TX 77814 clark489@noway1234.com {Clark Johnson} {9398 Carla Street} Kema TX 77329 sapp72@noway1234.com {Bowers Sapp} {4681 Davis Street} {Coffs Harbour} TX 77775 bessell@noway1234.com {Bessell Schmidt} {472 College Drive} Eucla TX 77812 verle@noway1234.com {Verle Knock} {6843 West 86th Court} Bendigo TX 77475 tom535@noway1234.com {Tom Bray} {11322 East 48th Avenue} Austin TX 77697 corine_bane@noway1234.com {Corine Bane} {330 Woronzof Drive} Bathurst TX 77338 laug819@noway1234.com {Kennith Laug} {148 Golden Hills Lane} Broome TX 77943 carolyn663@noway1234.com {Carolyn Dillaplain} {6098 Cook Inlet Loop} Sunnyville TX 77429 sullivan115@noway1234.com {Ramsey Sullivan} {6231 Country Lane Circle} {Coffs Harbour} TX 77720 ida745@noway1234.com {Ida Wolf} {292 Tenada Avenue} Bendigo TX 77198 gayelon@noway1234.com {Gayelon Oldfather} {8752 Mc Clellan Circle} Kema TX 77046 rebecca_schafer@noway1234.com {Rebecca Schafer} {3792 Hopa Circle} Burnie TX 77626 bulah_waring@noway1234.com {Bulah Waring} {7940 Cherni Circle} {Tennant Creek} TX 77629 henry429@noway1234.com {Henry Staley} {3600 Khyber Circle} {Port Hedland} TX 77616 wilbur821@noway1234.com {Wilbur Pierce} {11865 Easter Island Circle} {Alice Springs} TX 77349 grace@noway1234.com {Grace Hardin} {5470 Log Cabin Circle} {San Felipe} TX 77590 wetzel_olsen@noway1234.com {Wetzel Olsen} {4863 Hosken Street} Nacogdoches TX 77011 rapp_dills@noway1234.com {Rapp Dills} {9647 Cumulus Road} Houston TX 77725 mike_cary@noway1234.com {Mike Cary} {473 Wooded Acres Drive} Pattison TX 77367 sharon952@noway1234.com {Sharon Reynolds} {9269 Steeple Drive} Townsville TX 77936 gardner_lacey@noway1234.com {Gardner Lacey} {6317 Copperbush Court} {San Felipe} TX 77497 spence247@noway1234.com {Dawson Spence} {9718 Criswell Circle} Wollongong TX 77388 ann836@noway1234.com {Ann Stephens} {877 Karta Circle} {Broken Hill} TX 77054 ragon538@noway1234.com {Pebble Ragon} {7330 Rancho Drive} {Alice Springs} TX 77327 harms157@noway1234.com {Harms Fuller} {10342 Samuel Court} Katy TX 77032 jo258@noway1234.com {Jo Carson} {4409 Caress Circle} Albany TX 77618 bomar972@noway1234.com {Viola Bomar} {511 Birch Trail Circle} Bathurst TX 77847 michl328@noway1234.com {Quenton Michl} {8801 Sunset View Circle} Kema TX 77637 dorsch948@noway1234.com {Mahetable Dorsch} {3838 Illian Lane} Star TX 77645 blanch226@noway1234.com {Blanch Teske} {10936 High Bluff Drive} {San Antonio} TX 77119 harrison961@noway1234.com {Harrison Aden} {6253 Milky Way Drive} Brookshire TX 77834 borrenphol353@noway1234.com {Joe Borrenphol} {4063 Artillery Road} Dallas TX 77741 tony722@noway1234.com {Tony Wendell} {252 Homalo Court} Rockhampton TX 77547 moses266@noway1234.com {Moses Luck} {8267 Romig Place} Houston TX 77883 wolf150@noway1234.com {P. Wolf} {2831 Newcomb Drive} Newcastle TX 77888 reinhardt817@noway1234.com {Ancil Reinhardt} {11495 Wood River Way} Townsville TX 77727 kohout375@noway1234.com {Hunter Kohout} {8558 Shelikof Street} OOdnadatta TX 77270 brott219@noway1234.com {Ronna Brott} {4119 Forelands Circle} Launceston TX 77274 joseph920@noway1234.com {Joseph Belding} {544 Kissee Court} Nacogdoches TX 77571 baird334@noway1234.com {Dawson Baird} {11958 East 89th Avenue} {Port Hedland} TX 77673 fankhauser76@noway1234.com {cumbers Fankhauser} {7831 Turin Drive} {Mount Isa} TX 77661 maycil798@noway1234.com {Maycil Lambelet} {2518 Stowe Circle} Kema TX 77037 mccain704@noway1234.com {Willard McCain} {6658 Parkridge Circle} Hamilton TX 77269 georgia_mercure@noway1234.com {Georgia Mercure} {9773 Atkinson Drive} Hamilton TX 77441 cathy645@noway1234.com {Cathy Weinrich} {9476 Kincaid Estates Drive} Pattison TX 77741 ina522@noway1234.com {Ina Triplett} {10941 Woster Avenue} {Mount Isa} TX 77037 branting426@noway1234.com {Ruhie Branting} {8227 White Hawk Drive} Katy TX 77816 king249@noway1234.com {Marple King} {8439 Friendly Lane} {Mount Isa} TX 77339 ester528@noway1234.com {Ester Kohout} {925 Shadow Lane} Newcastle TX 77632 maxine_soumpholphakdy@noway1234.com {Maxine Soumpholphakdy} {122 Pronghorn Lane} {Mount Isa} TX 77715 hackbart90@noway1234.com {Maryln Hackbart} {1660 Hampton Drive} {Mount Gambier} TX 77666 mickey879@noway1234.com {Mickey Holben} {2372 Service Road} OOdnadatta TX 77093 scott_hahn@noway1234.com {Scott Hahn} {4845 Mountain Goat Drive} Waco TX 77721 glendora_rademacher@noway1234.com {Glendora Rademacher} {9242 Stanton Avenue} {Mount Isa} TX 77071 dawson542@noway1234.com {Dawson Dieckhoff} {4616 Prominence Pointe Drive} {San Antonio} TX 77489 dorlen868@noway1234.com {Dorlen Stahl} {6266 Vaquero Road} Brookshire TX 77354 bevard465@noway1234.com {Adkins Bevard} {8610 Jarvi Drive} Tamworth TX 77870 lyons305@noway1234.com {Darleen Lyons} {11866 Reeve Boulevard} Houston TX 77917 menard691@noway1234.com {Charles Menard} {7012 Le Doux Lane} Katy TX 77959 dempsey528@noway1234.com {Dempsey Walters} {5089 New Smyrna Circle} Waco TX 77274 pohlman717@noway1234.com {Hickman Pohlman} {5405 Paddock Lane} {Coffs Harbour} TX 77090 mercure296@noway1234.com {Ron Mercure} {1034 Eldora Drive} Mildura TX 77986 morrissey905@noway1234.com {Johnson Morrissey} {1721 S Street} Queenstown TX 77350 troeger111@noway1234.com {Roncy Troeger} {473 Mountain Plover Circle} Centerville TX 77393 fletcher754@noway1234.com {Fletcher Zager} {6970 Scenic Drive} {Broken Hill} TX 77942 grable458@noway1234.com {H.H. Grable} {6369 West 27th Avenue} Bendigo TX 77990 virginia740@noway1234.com {Virginia Clifton} {9592 Mila Street} Ketherine TX 77386 florence403@noway1234.com {Florence Rexroth} {3266 Papa Bear Lane} Bathurst TX 77231 rinne@noway1234.com {Grant Rinne} {8962 East 155th Avenue} Monaville TX 77782 reynolds265@noway1234.com {Bessie Reynolds} {10558 Arlene Drive} Bathurst TX 77562 rai@noway1234.com {Rai Putnam} {11998 West 106th Avenue} {Port Hedland} TX 77719 lock99@noway1234.com {Daisy Lock} {294 George Court} Bathurst TX 77822 granny@noway1234.com {Granny Clark} {1541 Dallon Court} Amarillo TX 77648 burke795@noway1234.com {Burke Cummins} {9026 Longbow Drive} Monaville TX 77354 buford@noway1234.com {Buford Harms} {11207 Kip Court} {San Antonio} TX 77085 davison991@noway1234.com {Hazelton Davison} {11321 East 121st Avenue} Monaville TX 77448 chritton370@noway1234.com {Ward Chritton} {4440 Hannigan Street} Cairns TX 77332 donna987@noway1234.com {Donna Krouse} {3112 Belsey Street} Sunnyville TX 77945 hippen236@noway1234.com {Pamela Hippen} {451 Windy Circle} Bendigo TX 77940 evalene_mapes@noway1234.com {Evalene Mapes} {10759 Thunderbrush Circle} {Tennant Creek} TX 77458 c_a_zillig@noway1234.com {C.A. Zillig} {9612 West 2nd Avenue} {Tennant Creek} TX 77670 amos413@noway1234.com {Moses Amos} {8166 Green Garden Drive} Mildura TX 77429 bob974@noway1234.com {Bob Mattox} {10011 O'brien Avenue} Townsville TX 77713 gorton580@noway1234.com {Eunice Gorton} {1603 Boulder Bay Circle} Tamworth TX 77904 p_simer_rinne@noway1234.com {P'simer Rinne} {8816 West 57th Avenue} {Alice Springs} TX 77063 wheeler699@noway1234.com {Hunter Wheeler} {6047 Shelburne Road} Rockhampton TX 77243 jill_belding@noway1234.com {Jill Belding} {11301 Tutna Circle} {Broken Hill} TX 77763 chrastil226@noway1234.com {Mullins Chrastil} {9829 Crow Creek Road} Albury TX 77384 murphy909@noway1234.com {Dwight Murphy} {4343 Ptarmigan Street} Mildura TX 77955 hamilton838@noway1234.com {Trossie Hamilton} {3010 Admiralty Place} Broome TX 77620 ashley448@noway1234.com {Ashley Ullman} {2550 Wildwood Drive} Centerville TX 77795 mcdonald466@noway1234.com {Catherine McDonald} {8357 West 80th Avenue} Cairns TX 77436 virgil_schafer@noway1234.com {Virgil Schafer} {2922 Mills Bay Drive} Hamilton TX 77039 chritton547@noway1234.com {Kerchovel Chritton} {3185 Lesmer Circle} Rockhampton TX 77185 hebner@noway1234.com {Mary Hebner} {5455 Willis Drive} Albury TX 77187 wolf911@noway1234.com {Delia Wolf} {10982 East Manor Avenue} Wollongong TX 77894 dr_lott@noway1234.com {Dr. Lott} {10852 Rock Ptarmigan Street} {Coober Pedy} TX 77712 gray_morrison@noway1234.com {Gray Morrison} {7890 Mink Creek Drive} Bourke TX 77655 kehlenbeck212@noway1234.com {Betsy Kehlenbeck} {15 Tina Street} Wollongong TX 77778 thurman87@noway1234.com {Thurman Young} {197 Alderwood Loop} Pattison TX 77069 hays693@noway1234.com {Hays Dills} {6656 Songbird Drive} Bathurst TX 77399 siske589@noway1234.com {Roy Siske} {3022 Pharaoh Circle} Nacogdoches TX 77896 punk297@noway1234.com {Punk Bennett} {7841 South Lowrie Loop} {Tennant Creek} TX 77737 eunice_betzelberger@noway1234.com {Eunice Betzelberger} {3190 Clare Circle} {San Antonio} TX 77173 tenhulzen370@noway1234.com {Luanne TenHulzen} {5760 Hazen Circle} Rockhampton TX 77223 brockman553@noway1234.com {Mack Brockman} {11509 Leonard Circle} Rockhampton TX 77080 rohmeyer309@noway1234.com {Walker Rohmeyer} {8194 East Midvale Circle} Adelaide TX 77278 spier834@noway1234.com {Myrtle Spier} {7516 Lochenshire Place} Independence TX 77987 mayfield691@noway1234.com {Rubin Mayfield} {10418 Fassler Circle} Dallas TX 77021 lehenbauer311@noway1234.com {Johnson Lehenbauer} {1271 Crystal Street} Galveston TX 77210 dollarhide258@noway1234.com {Claude Dollarhide} {9449 East 136th Avenue} {Port Hedland} TX 77120 kirkman260@noway1234.com {Gwen Kirkman} {8666 Bliss Street} Austin TX 77714 aust443@noway1234.com {Christian Aust} {11992 Douglas Place} Brookshire TX 77630 osterthun985@noway1234.com {Dawn Osterthun} {4735 Dorian Drive} Star TX 77777 mcdowell80@noway1234.com {Mullens McDowell} {4270 Hennings Way} Wollongong TX 77501 neal216@noway1234.com {Neal Ritter} {6265 West 44th Avenue} {Alice Springs} TX 77752 walker_holden@noway1234.com {Walker Holden} {914 Puffin Circle} Bourke TX 77535 bevard202@noway1234.com {Mathew Bevard} {5843 Falke Court} Amarillo TX 77193 mooney388@noway1234.com {Richard Mooney} {9539 More Street} Broome TX 77430 wilson559@noway1234.com {Wilson Yoder} {789 Barclay Road} Albany TX 77356 rosco_mooney@noway1234.com {Rosco Mooney} {8401 West 76th Avenue} Broome TX 77277 stone572@noway1234.com {Norman Stone} {8706 Zircon Circle} Centerville TX 77066 roberts200@noway1234.com {Mildred Roberts} {7686 Friendship Lane} Queenstown TX 77322 haskel160@noway1234.com {Haskel Paden} {901 Zaikof Circle} Centerville TX 77783 mont796@noway1234.com {Mont Roberts} {6811 Business Park Boulevard} Launceston TX 77215 humphries@noway1234.com {Humphries TenHulzen} {11070 Bell Circle} OOdnadatta TX 77493 david_cawley@noway1234.com {David Cawley} {1765 East 72nd Avenue} Hamilton TX 77609 coffman797@noway1234.com {Coffman Gibson} {9057 Irene Way} Rockhampton TX 77827 ernst134@noway1234.com {Ernst Hesman} {5703 West 15th Avenue} Amarillo TX 77847 virginia926@noway1234.com {Virginia Swanson} {9962 Piper Street} Queenstown TX 77597 lillie_rauner@noway1234.com {Lillie Rauner} {11913 Coral Road} {Coffs Harbour} TX 77035 anthony_rizor@noway1234.com {Anthony Rizor} {8324 Bellevue Loop} Adelaide TX 77792 viola952@noway1234.com {Viola Witte} {9782 South Circle} {Tennant Creek} TX 77512 bragg869@noway1234.com {Bragg Reiber} {9374 Adams Lane} {Broken Hill} TX 77743 chrastil849@noway1234.com {Ester Chrastil} {8429 Joy Avenue} Independence TX 77674 tish@noway1234.com {Tish Hervey} {9651 Neher Ridge Drive} {Port Hedland} TX 77163 piersol699@noway1234.com {Clifford Piersol} {10446 Wilma Circle} Independence TX 77173 oldfather375@noway1234.com {Brother Oldfather} {6732 Barrington Loop} Independence TX 77709 charlotte14@noway1234.com {Charlotte Hamilton} {4810 Zelma Circle} {San Antonio} TX 77646 lang184@noway1234.com {Donna Lang} {8850 Musket Ball Place} Austin TX 77426 stover415@noway1234.com {Stover Carson} {3807 Madsen's Place} Katy TX 77634 horn361@noway1234.com {Chelsie Horn} {6763 Alder Place} {San Felipe} TX 77134 neeman362@noway1234.com {Keen Neeman} {4210 Cape Circle} Pattison TX 77325 randall826@noway1234.com {Randall Mahar} {1937 Donington Drive} Tamworth TX 77254 alton_mayfield@noway1234.com {Alton Mayfield} {2777 Brothers Avenue} Dallas TX 77980 brent@noway1234.com {Brent Berner} {1212 Danner Avenue} Houston TX 77369 harold957@noway1234.com {Harold Othmer} {3588 Mentra Street} Nacogdoches TX 77343 david625@noway1234.com {David Rohrs} {9483 Sean Circle} Cairns TX 77426 smithers927@noway1234.com {S. Smithers} {7547 Montego Circle} Tamworth TX 77665 vincent691@noway1234.com {Vincent Bevard} {11431 Mayfair Drive} Newcastle TX 77144 wilhelm929@noway1234.com {Juanita Wilhelm} {446 Delong Drive} Brookshire TX 77920 goodrich967@noway1234.com {Marge Goodrich} {369 Shaun Circle} {Port Augusta} TX 77534 kathleen403@noway1234.com {Kathleen Buethe} {8979 Kushtaka Circle} Pattison TX 77874 strickland_gorton@noway1234.com {Strickland Gorton} {1295 Madison Way} {Port Augusta} TX 77826 irene472@noway1234.com {Irene Cummins} {630 Pinebrook Circle} {Port Hedland} TX 77185 sattler120@noway1234.com {Sattler Todter} {7450 East 75th Court} {Broken Hill} TX 77204 mildred951@noway1234.com {Mildred Colton} {2 Upper Sunny Circle} Rockhampton TX 77079 hedgmond_field@noway1234.com {Hedgmond Field} {10884 Kalgin Drive} Monaville TX 77023 brock442@noway1234.com {Rosilia Brock} {6575 Beechcraft Drive} Galveston TX 77127 colluzzi_baucke@noway1234.com {Colluzzi Baucke} {3342 Cheryl Street} Bourke TX 77046 quentin405@noway1234.com {Quentin Mapes} {6804 Fern Lane} Hamilton TX 77318 irene390@noway1234.com {Irene Morris} {5269 Cook Inlet Loop} Amarillo TX 77783 halley314@noway1234.com {Halley Yates} {10686 Ridge Pointe Drive} Dallas TX 77126 mac725@noway1234.com {Mac Baucke} {2978 Iron Mountain Road} Wollongong TX 77452 richard825@noway1234.com {Richard Krause} {600 Dunlap Court} Cairns TX 77012 morris659@noway1234.com {Bernard Morris} {1692 Rhone Street} {Padre Island} TX 77754 arlene379@noway1234.com {Arlene Cummins} {7636 Wandering Lane} {Mount Isa} TX 77519 hayes848@noway1234.com {D. Hayes} {3328 Shelter Rock Circle} Mildura TX 77465 petersen603@noway1234.com {Halene Petersen} {9131 Cleo Avenue} Albury TX 77303 casto733@noway1234.com {Casto Phillips} {5425 Tulane Street} Queenstown TX 77983 sherman436@noway1234.com {Conner Sherman} {3862 Irene Drive} Bourke TX 77724 dancy_goemann@noway1234.com {Dancy Goemann} {5955 Peterkin Avenue} Kema TX 77375 lucy_noudaranouvong@noway1234.com {Lucy Noudaranouvong} {5114 Wildwood Lane} Queenstown TX 77434 rodriques847@noway1234.com {Steam Shovel Rodriques} {9329 Sher Circle} Waco TX 77860 rine837@noway1234.com {Elna Rine} {7362 Lesmer Circle} Rockhampton TX 77976 sybil555@noway1234.com {Sybil Haughton} {5795 Seward Highway} Galveston TX 77058 cooper@noway1234.com {mollohan Cooper} {7110 Windham Way} {Broken Hill} TX 77939 funkhouser37@noway1234.com {Judi Funkhouser} {619 Denson Lane} Austin TX 77139 patsy582@noway1234.com {Patsy Rebuck} {9188 Hampton Green Loop} Austin TX 77376 sears528@noway1234.com {Walker Sears} {2102 Penny Circle} Waco TX 77019 jo_smith@noway1234.com {Jo Smith} {4697 Merganser Circle} Centerville TX 77590 frame_littlejohn@noway1234.com {Frame Littlejohn} {4886 Eris Drive} Queenstown TX 77547 waitman@noway1234.com {Waitman Dorsch} {9522 Columbia Street} Star TX 77465 john184@noway1234.com {John Hahn} {2365 Brittany Drive} Nacogdoches TX 77520 tinney_reilly@noway1234.com {Tinney Reilly} {3604 Brownie Drive} Star TX 77408 w537@noway1234.com {W. Sand} {1263 Clay Products Drive} Newcastle TX 77841 frances_lawrence@noway1234.com {Frances Lawrence} {11761 Wood River Way} Dallas TX 77316 kaster649@noway1234.com {Rhetta Kaster} {7369 Raven Crest Circle} Sunnyville TX 77932 king842@noway1234.com {Holly King} {4565 Country Woods Drive} Broome TX 77750 hupka160@noway1234.com {Merle Hupka} {1149 Gunnison Drive} {Port Hedland} TX 77892 nina57@noway1234.com {Nina Watteyne} {8304 North Eagle River Loop Road} Monaville TX 77671 walker516@noway1234.com {Walker Robison} {4132 Autumn Ridge Circle} {Coober Pedy} TX 77028 hanau141@noway1234.com {Merton Hanau} {11043 Wendy's Way} Galveston TX 77682 triplett21@noway1234.com {Triplett Mercure} {6352 Boulder Bay Circle} Austin TX 77598 ella377@noway1234.com {Ella Somchay} {8592 Cannoneer Circle} Bathurst TX 77613 pella56@noway1234.com {Delia Pella} {709 Starner Street} {Port Hedland} TX 77782 mathis915@noway1234.com {N. Mathis} {2962 Elaine Drive} Pattison TX 77507 alice895@noway1234.com {Alice Holben} {10141 Dorothy Drive} {San Felipe} TX 77678 chelsie279@noway1234.com {Chelsie Chritton} {11651 Falling Water Circle} Hamilton TX 77677 carolene546@noway1234.com {Carolene Miesbach} {8942 Ivy Circle} Amarillo TX 77180 colleen_douglas@noway1234.com {Colleen Douglas} {6242 Lower Tulwar Loop} Rockhampton TX 77374 duane856@noway1234.com {Duane Roberts} {6580 West 48th Avenue} Pattison TX 77550 mccoy181@noway1234.com {Seibert Mccoy} {2549 Kidron Street} Albury TX 77184 borrenpohl774@noway1234.com {Lee Borrenpohl} {1428 Laurel Street} Newcastle TX 77898 levi691@noway1234.com {Levi Packett} {1150 Third Street} {Tennant Creek} TX 77633 lucille163@noway1234.com {Lucille Taylor} {7932 Megeve Road} Bathurst TX 77922 glasson586@noway1234.com {Sharon Glasson} {5860 Mc Carthy Street} Albany TX 77488 dollarhide195@noway1234.com {Punk Dollarhide} {11900 Boeing Lane} Ketherine TX 77923 rohmeyer636@noway1234.com {Henry Rohmeyer} {2947 Prator Street} Tamworth TX 77115 jewell50@noway1234.com {Peck Jewell} {11717 Slalom Drive} Bathurst TX 77576 fawn_hagelback@noway1234.com {Fawn Hagelback} {11545 Driftwood Street} Newcastle TX 77553 cary968@noway1234.com {Darnell Cary} {8276 Republic Circle} Bendigo TX 77359 marie187@noway1234.com {Marie Wolken} {8237 West 17th Avenue} Cairns TX 77229 jon@noway1234.com {Jon Kerchal} {9280 Songbird Drive} {Coober Pedy} TX 77094 goff_schultz@noway1234.com {Goff Schultz} {2616 Grange Drive} Cairns TX 77314 freddie_mapes@noway1234.com {Freddie Mapes} {2737 Teresa Circle} Eucla TX 77628 ardie604@noway1234.com {Ardie Kaster} {11814 Oak Knoll Drive} Albany TX 77697 mccourtney181@noway1234.com {Dawson McCourtney} {11220 Camino Place} {Coober Pedy} TX 77935 arnold515@noway1234.com {Bud Arnold} {9142 Denise Drive} Rockhampton TX 77489 prussia_rothell@noway1234.com {Prussia Rothell} {2366 Conifer Street} Centerville TX 77464 dieckhoff588@noway1234.com {Hollis Dieckhoff} {8322 Benty Drive} Brookshire TX 77257 annie_knox@noway1234.com {Annie Knox} {362 Rendezvous Circle} {Mount Isa} TX 77421 woodrow_bicknell@noway1234.com {Woodrow Bicknell} {7509 Whitby Circle} Burnie TX 77157 b744@noway1234.com {B. Hasselbalch} {10536 Dawn Street} Albury TX 77654 lyle_searcey@noway1234.com {Lyle Searcey} {2501 Emerald Circle} {Mount Gambier} TX 77701 anna841@noway1234.com {Anna Mason} {490 Mc Cready Circle} Burnie TX 77422 ester_young@noway1234.com {Ester Young} {10748 Kutcher Drive} Galveston TX 77762 hamilton752@noway1234.com {Hamilton Armknecht} {11271 West 71st Circle} {Port Augusta} TX 77712 mahetable812@noway1234.com {Mahetable Mcalexander} {5505 Malcolm Drive} Broome TX 77306 puchalla@noway1234.com {Darrell Puchalla} {5937 Ridd Circle} Austin TX 77842 lilly_senesourinh@noway1234.com {Lilly Senesourinh} {10131 Brittany Drive} Dallas TX 77937 vance135@noway1234.com {Vance Parrish} {6032 Marge Court} Waco TX 77745 abbie290@noway1234.com {Abbie Grove} {6885 Kasilof Boulevard} Waco TX 77596 gaylene988@noway1234.com {Gaylene Anderson} {3602 Newhaven Loop} Bendigo TX 77933 a5@noway1234.com {A. Goosman} {4806 Blue Bell} {Padre Island} TX 77065 maggie54@noway1234.com {Maggie Hershberger} {7654 Rebecca Circle} {Coober Pedy} TX 77426 stone254@noway1234.com {Howard Stone} {1102 Shadetree Circle} Bendigo TX 77868 carte_lofgren@noway1234.com {Carte Lofgren} {2455 Rankin Road} Waco TX 77156 flora_sand@noway1234.com {Flora Sand} {7460 Hemlock Circle} Wollongong TX 77703 aimee@noway1234.com {Aimee Osterthun} {4332 Thuja Circle} Queenstown TX 77186 dominic212@noway1234.com {Dominic Sedersten} {11202 Heavenly Circle} Kema TX 77806 gill388@noway1234.com {Gill Luck} {205 Spenard Road} Wollongong TX 77587 christopher849@noway1234.com {Christopher Morse} {6659 Summerset Drive} Hamilton TX 77486 ford739@noway1234.com {Bonnie Ford} {9220 Foxridge Way} Launceston TX 77068 garnet663@noway1234.com {Garnet Triplett} {8220 Audubon Circle} Houston TX 77214 carsel994@noway1234.com {Carsel Miller} {6014 Hyder Street} {Port Hedland} TX 77557 allan_zager@noway1234.com {Allan Zager} {10825 North Lane Street} {Port Hedland} TX 77077 sharkey@noway1234.com {Sharkey Hupka} {7678 Zermatt Avenue} Star TX 77138 urich401@noway1234.com {Cecilia Urich} {2712 Deerfield Drive} OOdnadatta TX 77506 pella754@noway1234.com {Della Pella} {5412 Upper Tulwar Loop} Adelaide TX 77413 morrison75@noway1234.com {J. Morrison} {2843 Specking Avenue} Galveston TX 77603 dorthea_vance@noway1234.com {Dorthea Vance} {429 Katalla Circle} {San Felipe} TX 77221 rauner221@noway1234.com {Allen Rauner} {11841 West 78th Avenue} Tamworth TX 77565 deloris_douglas@noway1234.com {Deloris Douglas} {11673 Tundra Loop Drive} Independence TX 77315 verna_lott@noway1234.com {Verna Lott} {11070 Back Road} Dallas TX 77767 pat227@noway1234.com {Pat Sayakhoummane} {7033 Terrace Street} Independence TX 77456 mccoy869@noway1234.com {Hazel McCoy} {865 Rakof Avenue} Nacogdoches TX 77937 henry_ruby@noway1234.com {Henry Ruby} {1930 Hillandale Avenue} Bathurst TX 77198 young953@noway1234.com {Lloyd Young} {75 Golovin Street} Kema TX 77303 justine@noway1234.com {Justine Armknecht} {2918 Bonnielaine Road} Eucla TX 77352 bengtsson849@noway1234.com {Griffith Bengtsson} {7462 Thunderbird Place} Rockhampton TX 77139 durst984@noway1234.com {George Durst} {2052 Ferndale Street} Katy TX 77117 soumpholphakdy76@noway1234.com {Jack Soumpholphakdy} {10546 Checkmate Court} Launceston TX 77767 dottie229@noway1234.com {Dottie Kuhl} {7374 Ressel Avenue} {Mount Gambier} TX 77396 robison962@noway1234.com {Dell Robison} {5521 Lois Drive} Wollongong TX 77472 edgar_bischoff@noway1234.com {Edgar Bischoff} {3194 Dandelion Wine Circle} Galveston TX 77522 harold615@noway1234.com {Harold Speckmann} {2162 Carmel Circle} Bendigo TX 77504 wanda_bray@noway1234.com {Wanda Bray} {10867 Draco Drive} Star TX 77720 patronia_robinson@noway1234.com {Patronia Robinson} {1078 View Heights Way} {Broken Hill} TX 77042 frame_steinauer@noway1234.com {Frame Steinauer} {7180 Parkside Circle} {Port Augusta} TX 77395 tinnel_schafer@noway1234.com {Tinnel Schafer} {11896 Knight's Way} {Mount Gambier} TX 77853 hartley341@noway1234.com {Hartley Shuey} {9020 Noak Circle} {San Antonio} TX 77422 snow439@noway1234.com {Young Snow} {3911 Saint Ives Place} Brookshire TX 77932 roena654@noway1234.com {Roena Humann} {1314 Carroll Lane} Broome TX 77027 gaylene749@noway1234.com {Gaylene Lawrence} {319 Brandon Street} {San Felipe} TX 77539 kunzman140@noway1234.com {Eunice Kunzman} {203 Diomede Street} Katy TX 77048 sorensen568@noway1234.com {Ocie Sorensen} {7970 Hunterwood Lane} Brookshire TX 77800 hendee374@noway1234.com {Wilson Hendee} {8643 Eastbrook Drive} Centerville TX 77083 florida@noway1234.com {Florida Dwinell} {4981 Karluk Street} Monaville TX 77190 emily779@noway1234.com {Emily Britt} {3480 Whisper Knoll Circle} Eucla TX 77448 kaufman922@noway1234.com {hamrick Kaufman} {8512 Young Drive} Austin TX 77554 cox966@noway1234.com {Irne Cox} {7882 Denali Street} Albury TX 77065 fricke728@noway1234.com {Flora Fricke} {2644 Brook Hill Court} Eucla TX 77156 buck569@noway1234.com {Buck Stinson} {915 Kester Circle} Houston TX 77846 maxine714@noway1234.com {Maxine Stauffer} {2639 Seawind Drive} Bathurst TX 77801 walker642@noway1234.com {Walker Shaffer} {8629 Stemp Circle} Eucla TX 77847 crook874@noway1234.com {Crook Lott} {5182 Midden Way} Wollongong TX 77721 stettenbenz514@noway1234.com {Becky Stettenbenz} {1973 Tranquillity Loop} Adelaide TX 77840 j_e583@noway1234.com {J.E. Wendell} {3031 North Klatt Road} {Tennant Creek} TX 77826 fuller520@noway1234.com {Vaden Fuller} {8297 Salem Street} Townsville TX 77342 ruth_devorss@noway1234.com {Ruth DeVorss} {7926 Garland Circle} Austin TX 77535 lynette807@noway1234.com {Lynette Neeman} {9469 Juneau Street} Newcastle TX 77864 rieken@noway1234.com {Collison Rieken} {6419 Spalding Circle} Launceston TX 77220 neemann93@noway1234.com {Billy Neemann} {10563 Falklands Loop} Katy TX 77992 virginia_riensche@noway1234.com {Virginia Riensche} {4052 East 12th Avenue} Bendigo TX 77426 bates999@noway1234.com {Gibson Bates} {2711 Blackstone Circle} Hamilton TX 77153 runion734@noway1234.com {Runion Wherry} {4783 Hutson Drive} Bendigo TX 77983 reschke85@noway1234.com {Ulysses Reschke} {11155 Seton Circle} Ketherine TX 77255 lillian690@noway1234.com {Lillian Sorensen} {6335 Homestead Trail} Cairns TX 77649 rebecca321@noway1234.com {Rebecca McCourtney} {6538 Stratton Circle} Dallas TX 77676 barnette671@noway1234.com {Barnette Morrissey} {1134 Pauline Street} Dallas TX 77051 bessie251@noway1234.com {Bessie Harrington} {418 Sorbus Way} Amarillo TX 77964 durman236@noway1234.com {Junior Durman} {1451 Sunset View Circle} {Port Augusta} TX 77086 violet_khanthasene@noway1234.com {Violet Khanthasene} {1474 Lotus Drive} Ketherine TX 77022 kind_miner@noway1234.com {Kind Miner} {8525 Zaikof Circle} {Port Augusta} TX 77086 goodrich460@noway1234.com {Maryln Goodrich} {5284 Klutina Circle} Katy TX 77500 shelby_lang@noway1234.com {Shelby Lang} {1887 South Tahiti Loop} Katy TX 77723 daisy877@noway1234.com {Daisy Johnson} {162 Sheltie Avenue} Nacogdoches TX 77925 nicholas_tenhulzen@noway1234.com {Nicholas TenHulzen} {11005 Ondola Circle} Monaville TX 77752 dow_kage@noway1234.com {Dow Kage} {3114 Eastside Drive} Eucla TX 77796 freddie_gibson@noway1234.com {Freddie Gibson} {2926 Artillery Road} Centerville TX 77446 anna_mccain@noway1234.com {Anna McCain} {2863 Lower Cranberry Drive} OOdnadatta TX 77883 chritton619@noway1234.com {Kitzmiller Chritton} {9038 Ramona Street} Brookshire TX 77668 stone299@noway1234.com {Ramsey Stone} {389 Mount Vernon Court} Waco TX 77642 patton@noway1234.com {Patton Reed} {10739 O'malley Centre Drive} Ketherine TX 77345 effie_waring@noway1234.com {Effie Waring} {5971 Tahoe Road} Ketherine TX 77073 craig947@noway1234.com {Dencil Craig} {1283 Bluegrass Circle} {Coffs Harbour} TX 77161 dodrill312@noway1234.com {Dodrill Bauers} {1371 Sikorsky Avenue} {Port Hedland} TX 77449 kent322@noway1234.com {Clark Kent} {11819 Arboretum Street} {Tennant Creek} TX 77884 lane39@noway1234.com {Lane Kerr} {5217 Poniard Drive} Centerville TX 77558 spence500@noway1234.com {Rosie Spence} {4376 Concourse Street} Eucla TX 77972 dr686@noway1234.com {Dr. Gobber} {9852 Lee Street} Independence TX 77150 policeman429@noway1234.com {policeman Horstman} {2287 Big Sky Drive} OOdnadatta TX 77406 aufdenkamp202@noway1234.com {Willis Aufdenkamp} {9543 Park Place} Ketherine TX 77189 humann477@noway1234.com {Juanita Humann} {3019 West 34th Avenue} Independence TX 77530 cerita@noway1234.com {Cerita Phillips} {2777 Mountain Point Drive} Adelaide TX 77246 credis_urich@noway1234.com {Credis Urich} {9590 Hidden Retreat Place} Bathurst TX 77156 walter332@noway1234.com {Walter Lueders} {3154 Button Circle} Eucla TX 77981 allen387@noway1234.com {W.A. Allen} {9971 Yorktown Circle} Albany TX 77637 pauline_stitt@noway1234.com {Pauline Stitt} {3277 Dunkirk Drive} Broome TX 77992 buck_leahy@noway1234.com {Buck Leahy} {2434 Suncatcher Court} Newcastle TX 77698 adkins559@noway1234.com {Adkins Hendee} {1660 Pago Pago Avenue} Adelaide TX 77227 dirk682@noway1234.com {Dirk Piersol} {937 West 88th Avenue} Dallas TX 77007 hamer628@noway1234.com {Bernadine Hamer} {685 Cope Street} Bendigo TX 77689 olsen258@noway1234.com {Molly Olsen} {4388 Cannoneer Circle} OOdnadatta TX 77550 leuenberger205@noway1234.com {Delma Leuenberger} {6439 California Creek Way} Independence TX 77793 deane209@noway1234.com {Deane Weyers} {6503 Staysail Drive} Bathurst TX 77259 martha893@noway1234.com {Martha Wilhelm} {5904 Klondike Court} Bourke TX 77484 martin698@noway1234.com {Martin Van} {8332 Corona Circle} Albany TX 77936 reba@noway1234.com {Reba Brommer} {83 Cloverleaf Road} Albury TX 77581 radie948@noway1234.com {Radie Rothell} {8762 Adak Circle} Rockhampton TX 77752 polson907@noway1234.com {Jimmie Polson} {6602 Conley Avenue} Independence TX 77915 otha359@noway1234.com {Otha Woltemath} {7917 Mills Bay Drive} {Broken Hill} TX 77908 thurber230@noway1234.com {Lynette Thurber} {5114 Palos Verdes Circle} Nacogdoches TX 77427 felix576@noway1234.com {Felix Holmstrom} {3724 Log Cabin Circle} Houston TX 77928 vrbka687@noway1234.com {Red Vrbka} {1821 Bree Avenue} Houston TX 77656 robinson539@noway1234.com {Rene Robinson} {8311 Chenoweth Street} {Port Augusta} TX 77819 wanda114@noway1234.com {Wanda Steinmeyer} {2213 Magnaview Drive} Cairns TX 77597 policeman_mommens@noway1234.com {policeman Mommens} {707 Frank Street} Broome TX 77095 wilbur_anderson@noway1234.com {Wilbur Anderson} {9275 Stewart Mountain Drive} Adelaide TX 77256 pooch@noway1234.com {Doc Pooch} {3537 Hunt Avenue} Albany TX 77376 lorene_allen@noway1234.com {Lorene Allen} {8100 Tamarack Street} Albury TX 77736 bernard626@noway1234.com {Bernard Pettinger} {2455 Campbell Place} {Alice Springs} TX 77453 hunt_malone@noway1234.com {Hunt Malone} {9132 Boulder Circle} {Coober Pedy} TX 77440 patrica_vrbka@noway1234.com {Patrica Vrbka} {11395 Bern Street} {Padre Island} TX 77969 malcolm832@noway1234.com {Malcolm Rowland} {3455 Beverly Drive} Adelaide TX 77810 wellensiek606@noway1234.com {Biddie Wellensiek} {9325 Borland Drive} Houston TX 77556 pauline155@noway1234.com {Pauline Dills} {5179 Connie Court} Albury TX 77596 ester467@noway1234.com {Ester Ramsey} {3789 C Street} {Port Augusta} TX 77846 sapp312@noway1234.com {Martha Sapp} {7290 Spurr Lane} Katy TX 77502 gail_stordahl@noway1234.com {Gail Stordahl} {6586 Tay Circle} Launceston TX 77456 homer57@noway1234.com {Perry Homer} {5599 Tahoe Drive} {Port Augusta} TX 77406 osterthun816@noway1234.com {hamrick Osterthun} {1231 Sturbridge Court} {Port Augusta} TX 77293 vongsaly911@noway1234.com {Barb Vongsaly} {7876 West 97th Avenue} Burnie TX 77068 eulah755@noway1234.com {Eulah Dahl} {9291 Valley Street} Monaville TX 77617 lou_dumitru@noway1234.com {Lou Dumitru} {6779 Danny Drive} Nacogdoches TX 77523 c_e@noway1234.com {C.E. Dwinell} {5698 Valley Vista Circle} Waco TX 77710 coretta494@noway1234.com {Coretta Earhart} {11738 Jade Street} {Broken Hill} TX 77927 milton_huttenmeyer@noway1234.com {Milton Huttenmeyer} {4927 Brooks Drive} Queenstown TX 77364 phommachan246@noway1234.com {Rayburn Phommachan} {6499 Woodcutter Court} Dallas TX 77966 dump358@noway1234.com {Dump Dillaplain} {8003 Kingfisher Drive} Bathurst TX 77372 spencer91@noway1234.com {Spencer Scott} {7856 Pitcairn Avenue} Launceston TX 77554 levi_fox@noway1234.com {Levi Fox} {10699 Knowles Circle} {San Felipe} TX 77656 mattheis160@noway1234.com {Irvin Mattheis} {10476 West 80th Avenue} Bendigo TX 77385 suhr632@noway1234.com {Louis Suhr} {11830 Iron Mountain Road} Wollongong TX 77358 susan762@noway1234.com {Susan Branting} {11689 Stuart Circle} {Port Hedland} TX 77195 hood511@noway1234.com {Charlene Hood} {1374 Fenwick Circle} {Broken Hill} TX 77877 esser11@noway1234.com {Ramonia Esser} {8235 Woodbourne Circle} {San Antonio} TX 77318 ward308@noway1234.com {Ward Triplett} {8509 Frigate Circle} Houston TX 77346 rademacher869@noway1234.com {Wib Rademacher} {4380 East 42nd Court} Independence TX 77962 gregory_wenzel@noway1234.com {Gregory Wenzel} {6194 Ray Street} {San Antonio} TX 77507 ossian247@noway1234.com {K. Ossian} {2169 Broadwater Drive} Pattison TX 77367 orville572@noway1234.com {Orville Christen} {2878 Banjo Circle} Cairns TX 77255 jasper_smith@noway1234.com {Jasper Smith} {4450 Turnagain Boulevard} Bendigo TX 77991 w_c514@noway1234.com {W.C. Hays} {7429 Nunivak Circle} Cairns TX 77552 vonnie369@noway1234.com {Vonnie Horstman} {5870 Citadel Lane} Sunnyville TX 77416 bohling@noway1234.com {Hickman Bohling} {7091 Stowe Circle} Katy TX 77727 richard136@noway1234.com {Richard Mccoy} {8821 East Stonehill Drive} Austin TX 77534 silas_topp@noway1234.com {Silas Topp} {6814 Wood River Way} {Padre Island} TX 77091 rush484@noway1234.com {Rush Brott} {1858 Mallard Court} Ketherine TX 77533 michl227@noway1234.com {R. Michl} {6123 Brandl Street} Albury TX 77620 lacey137@noway1234.com {Osbome Lacey} {9128 Bradford Drive} Ketherine TX 77121 lillie_glasson@noway1234.com {Lillie Glasson} {9815 Snowshoe Lane} {Tennant Creek} TX 77747 mandery98@noway1234.com {Moss Mandery} {4787 Honey Bear Lane} Burnie TX 77493 evans637@noway1234.com {King Evans} {1227 Maria Court} {Port Augusta} TX 77527 hazel610@noway1234.com {Hazel Vrbka} {1767 North Flower Street} Broome TX 77068 dufield_gates@noway1234.com {Dufield Gates} {9841 Morphy Court} Ketherine TX 77611 ramsey338@noway1234.com {Ramsey Aden} {3072 Lake Otis Parkway} Galveston TX 77992 rapp_harrah@noway1234.com {Rapp Harrah} {1207 Mountainside Village Drive} Waco TX 77606 krause721@noway1234.com {Kae Krause} {529 Springer Street} Ketherine TX 77327 marcia@noway1234.com {Marcia Rickman} {9397 Hidden Point Loop} {Coober Pedy} TX 77488 knox277@noway1234.com {Ruby Knox} {2632 Twolots Circle} Kema TX 77606 rathe676@noway1234.com {Dorthea Rathe} {691 Nancy Street} Townsville TX 77245 verna849@noway1234.com {Verna Stitt} {8037 Papago Place} {Port Hedland} TX 77370 buck582@noway1234.com {Buck Logsdon} {6982 Hollow Street} Kema TX 77088 morrow241@noway1234.com {Morrow Miesbach} {7245 Business Boulevard} Kema TX 77051 carsel81@noway1234.com {Carsel Krontz} {6428 Laughlin Street} Burnie TX 77068 ruter816@noway1234.com {Denice Ruter} {5463 East 150th Avenue} Broome TX 77648 peggy250@noway1234.com {Peggy McAlexander} {10554 Fairwood Circle} Bendigo TX 77808 mildred_rowe@noway1234.com {Mildred Rowe} {2804 Crow Berry Circle} Amarillo TX 77413 williams151@noway1234.com {William Williams} {3318 Tammy Avenue} Queenstown TX 77372 c_p@noway1234.com {C.P. Todter} {3705 Brittany Place} OOdnadatta TX 77659 nealy254@noway1234.com {Nealy Geweke} {5787 Randamar Place} Katy TX 77301 shorty@noway1234.com {Shorty Kaster} {10504 Bluebell Drive} Newcastle TX 77947 winkle480@noway1234.com {Aimee Winkle} {7488 Honey Bear Circle} Ketherine TX 77540 mclaughlin161@noway1234.com {Holland McLaughlin} {10402 Corps Circle} {Mount Isa} TX 77008 lempke53@noway1234.com {Bulah Lempke} {6410 Diomede Street} Austin TX 77150 alice_logsdon@noway1234.com {Alice Logsdon} {10342 Mars Drive} Star TX 77353 delorsis_morse@noway1234.com {Delorsis Morse} {2082 West Harvard Avenue} Queenstown TX 77752 rosakrans627@noway1234.com {H. Rosakrans} {2680 Price Street} Galveston TX 77123 sheryl203@noway1234.com {Sheryl Phillips} {9174 Sagan Circle} Albury TX 77797 vickie976@noway1234.com {Vickie Haney} {10497 Osborn Street} Wollongong TX 77643 janet_stangel@noway1234.com {Janet Stangel} {4001 Klutina Circle} Cairns TX 77646 piersol771@noway1234.com {Pauline Piersol} {10149 Falcon Circle} {Mount Gambier} TX 77248 foster512@noway1234.com {Foster Driskell} {2657 Lancaster Drive} Queenstown TX 77395 brent720@noway1234.com {Brent Tagart} {8967 Bragaw Street} {Coober Pedy} TX 77703 wanda467@noway1234.com {Wanda Neemann} {11572 Merle Circle} Queenstown TX 77367 anderson16@noway1234.com {Vaughn Anderson} {8444 West 86th Court} Adelaide TX 77279 sue635@noway1234.com {Sue Paden} {7963 Copper Drive} Bourke TX 77095 h_j_helm@noway1234.com {H.J. Helm} {5061 East 10th Circle} Launceston TX 77565 goings481@noway1234.com {Hubert Goings} {1129 Rosebud Row Avenue} {Coober Pedy} TX 77374 scott126@noway1234.com {Myrtle Scott} {7437 East Bluff Drive} Bendigo TX 77791 bailey_stangel@noway1234.com {Bailey Stangel} {7790 Hiland Road} Bendigo TX 77650 faye50@noway1234.com {Faye Thies} {9051 Atwood Drive} Centerville TX 77482 trossie_gates@noway1234.com {Trossie Gates} {1700 Agattu Circle} Eucla TX 77427 c36@noway1234.com {C. Riensche} {2736 Weimer Drive} Queenstown TX 77485 elma@noway1234.com {Elma Packwood} {2978 Bristol Drive} {Port Augusta} TX 77889 vaughn_winkle@noway1234.com {Vaughn Winkle} {290 Beaufort Street} {Mount Gambier} TX 77211 ball@noway1234.com {Ball Polson} {995 Armstrong Lane} OOdnadatta TX 77249 norris372@noway1234.com {Norris Philippi} {3814 Johns Road} Brookshire TX 77153 johnson693@noway1234.com {Johnson Sayakhoummane} {6927 Stargate Circle} Albury TX 77126 suflonia_stettenbenz@noway1234.com {Suflonia Stettenbenz} {2273 Maple Avenue} {Broken Hill} TX 77731 ruter104@noway1234.com {Mardell Ruter} {6146 Zermatt Circle} Rockhampton TX 77110 hasselbalch705@noway1234.com {Prussia Hasselbalch} {11333 Mc Cabe Circle} {Mount Isa} TX 77370 daphene@noway1234.com {Daphene Raney} {9869 Songbird Drive} {Tennant Creek} TX 77047 seawall20@noway1234.com {W. Seawall} {3566 Stanford Circle} Brookshire TX 77800 lorraine@noway1234.com {Lorraine Gibson} {10904 Potter Creek Circle} Rockhampton TX 77376 anton327@noway1234.com {Anton Brammann} {5263 Esquire Drive} {Alice Springs} TX 77034 melvina142@noway1234.com {Melvina Rauner} {158 East 46th Court} Galveston TX 77954 annabelle@noway1234.com {Annabelle Borrenphol} {2110 Songbird Drive} Tamworth TX 77447 emerson@noway1234.com {Emerson Bauers} {6781 Tall Spruce Drive} {Port Hedland} TX 77690 ronnie356@noway1234.com {Ronnie Laue} {10877 Basher Drive} OOdnadatta TX 77015 zelma711@noway1234.com {Zelma Borrenphol} {6989 Whispering Birch Drive} {Padre Island} TX 77962 nick801@noway1234.com {Nick Thom} {11739 Lisa Court} Centerville TX 77068 hen@noway1234.com {Hen Phommachack} {10112 Sagwon Avenue} Rockhampton TX 77920 ida448@noway1234.com {Ida Leuder} {9697 Leah Court} Galveston TX 77528 christine@noway1234.com {Christine Horner} {8997 East 101st Avenue} Rockhampton TX 77908 snowden82@noway1234.com {Dorthy Snowden} {5871 Jerry Avenue} Albury TX 77007 gill_feurer@noway1234.com {Gill Feurer} {6963 Parksville Drive} OOdnadatta TX 77741 mary901@noway1234.com {Mary Kaster} {8654 Zarvis Place} Sunnyville TX 77289 murrill@noway1234.com {Murrill McLaughlin} {11996 West 36th Avenue} Monaville TX 77878 lintz763@noway1234.com {Lillie Lintz} {4589 Eagle River Lane} Queenstown TX 77952 crane291@noway1234.com {Patsi Crane} {6940 Dylan Drive} {Mount Gambier} TX 77456 mac676@noway1234.com {Mac Gieser} {413 Mc Kinley Avenue} Nacogdoches TX 77045 staley752@noway1234.com {Scott Staley} {10307 Prince William Circle} Mildura TX 77459 finke458@noway1234.com {Young Finke} {9288 Connors Trail Circle} {Alice Springs} TX 77942 field_mattox@noway1234.com {Field Mattox} {10664 Cleo Avenue} Brookshire TX 77823 wilford@noway1234.com {Wilford Brommer} {4932 Old Lake Otis Parkway} Nacogdoches TX 77019 worthy@noway1234.com {Worthy Mason} {7741 Botanical Circle} Bendigo TX 77784 clarine@noway1234.com {Clarine Richard} {252 Tieszen Avenue} {Mount Gambier} TX 77389 orvin813@noway1234.com {Orvin Piersol} {11397 North Star Street} Houston TX 77832 samples_zellmer@noway1234.com {Samples Zellmer} {4462 Burlwood Street} {Alice Springs} TX 77041 naber587@noway1234.com {Mildred Naber} {7630 Riddell Circle} Houston TX 77178 lempke243@noway1234.com {Annabelle Lempke} {7594 Seachant Circle} {Port Hedland} TX 77695 everett_oestmann@noway1234.com {Everett Oestmann} {2842 East 54th Court} Cairns TX 77584 goemann838@noway1234.com {H.H. Goemann} {11477 Doroshin Avenue} Independence TX 77062 beverly@noway1234.com {Beverly Tejral} {11589 Solarset Circle} OOdnadatta TX 77000 stahl445@noway1234.com {Judy Stahl} {7692 Quail Circle} Burnie TX 77750 lacey779@noway1234.com {Emerald Lacey} {4082 Hidden Retreat Place} {Alice Springs} TX 77577 hothan589@noway1234.com {Carole Hothan} {11053 Park Hills Drive} {Coffs Harbour} TX 77949 woods596@noway1234.com {woods Carpenter} {9041 Chapel Circle} {Mount Gambier} TX 77024 granny_goemann@noway1234.com {Granny Goemann} {2354 Hidden Retreat Place} {San Antonio} TX 77706 kuhl154@noway1234.com {Rae Kuhl} {7378 Natrona Avenue} Sunnyville TX 77663 bill726@noway1234.com {Bill Harman} {3785 Thuja Circle} Houston TX 77763 buethe16@noway1234.com {Nealie Buethe} {2249 Nancy Circle} Mildura TX 77779 harman629@noway1234.com {Hale Harman} {5490 Jensen Circle} {Tennant Creek} TX 77458 hazle239@noway1234.com {Hazle Pooch} {2158 San Ernesto Avenue} Waco TX 77785 carter185@noway1234.com {Bird-Legs Carter} {2764 Inlet Vista Drive} {Coffs Harbour} TX 77118 thelma427@noway1234.com {Thelma Zillig} {2694 All Star Circle} Wollongong TX 77275 murrill26@noway1234.com {Murrill Schafer} {11170 Log Cabin Circle} {Alice Springs} TX 77096 brown775@noway1234.com {Olive Brown} {2007 Wandering Drive} Kema TX 77619 junie915@noway1234.com {Junie Schmidt} {9258 Keri Court} Kema TX 77929 william_osterthun@noway1234.com {William Osterthun} {6316 Cody Court} {Tennant Creek} TX 77033 jay231@noway1234.com {Jay Othmer} {2787 East 80th Avenue} Austin TX 77694 winnie_sapp@noway1234.com {Winnie Sapp} {7793 Covington Court} {Mount Isa} TX 77755 lempke136@noway1234.com {Gregg Lempke} {5440 Finland Street} Albany TX 77186 stangel749@noway1234.com {Mae Stangel} {727 Clark's Road} Katy TX 77174 bennett420@noway1234.com {Ashley Bennett} {8474 Lindblad Avenue} Bourke TX 77437 skip_mandery@noway1234.com {Skip Mandery} {8725 Mountain Lake Drive} Houston TX 77203 wright881@noway1234.com {Glendora Wright} {27 Lost Circle} {Port Augusta} TX 77292 wilbert_pope@noway1234.com {Wilbert Pope} {2185 Loudermilk Circle} Eucla TX 77383 jerome69@noway1234.com {Jerome Finn} {2844 De Armoun Road} {Port Hedland} TX 77612 basil_nielsen@noway1234.com {Basil Nielsen} {4430 Bravo Circle} Star TX 77317 virginia26@noway1234.com {Virginia Stover} {6163 Birch Run Circle} Hamilton TX 77463 barden277@noway1234.com {Nora Barden} {7362 Talon Circle} Brookshire TX 77316 vaughn_bevard@noway1234.com {Vaughn Bevard} {8376 Bering Street} Monaville TX 77423 cottrill_ensor@noway1234.com {Cottrill Ensor} {5537 Laird Circle} Mildura TX 77372 max@noway1234.com {Max Behrends} {6562 Alder Place} {Mount Gambier} TX 77097 paul842@noway1234.com {Paul Mommens} {3070 Ashley Park Lane} Cairns TX 77396 anthony912@noway1234.com {Anthony Ruter} {4338 Town And Country Place} {Broken Hill} TX 77672 rome806@noway1234.com {Rome Christen} {11022 Standish Street} Katy TX 77716 enna@noway1234.com {Enna Vongsaly} {7349 Samuel Court} Burnie TX 77379 laug640@noway1234.com {Presley Laug} {10685 Hyder Street} {Coober Pedy} TX 77832 reed623@noway1234.com {Noralea Reed} {354 Cape Seville Drive} Ketherine TX 77169 wilfong532@noway1234.com {Wilfong Hagelback} {11308 Revere Circle} Cairns TX 77702 loren243@noway1234.com {Loren Dollarhide} {10535 South Creek Road} {San Antonio} TX 77418 jiies@noway1234.com {Jiies LaFrance} {9048 South Lowrie Loop} Queenstown TX 77288 jerome709@noway1234.com {Jerome Stephens} {315 Little Dipper Avenue} Queenstown TX 77941 buster_peterson@noway1234.com {Buster Peterson} {7371 Yorkshire Lane} Mildura TX 77011 lavern@noway1234.com {Lavern Bicknell} {4751 Irene Way} Mildura TX 77789 dirk976@noway1234.com {Dirk Quinn} {333 Rodeo Circle} Star TX 77659 h_a689@noway1234.com {H.A DeLong} {5188 Laughlin Street} Galveston TX 77604 mildred893@noway1234.com {Mildred Davis} {5645 West 6th Avenue} Bourke TX 77163 carte389@noway1234.com {Carte Bomar} {5467 Cobblestone Hill Road} Burnie TX 77551 mike636@noway1234.com {Mike Kroll} {9658 Sweetgale Court} {Alice Springs} TX 77297 mont485@noway1234.com {Mont Shuey} {6474 Winners Circle} Star TX 77355 giittinger208@noway1234.com {Tammy Giittinger} {2971 Fiji Street} {Mount Gambier} TX 77933 riensche840@noway1234.com {Betsy Riensche} {10173 Waters Drive} {Mount Isa} TX 77343 jenny602@noway1234.com {Jenny Anderson} {5352 Birch Lane} Eucla TX 77310 zillig746@noway1234.com {Eleanor Zillig} {6756 J-k Lane} Albury TX 77318 lohmeier629@noway1234.com {Prussia Lohmeier} {1074 Norm Drive} Bathurst TX 77506 bessie371@noway1234.com {Bessie Scholl} {7597 Westminster Way} Launceston TX 77050 douglas298@noway1234.com {Douglas Schroder} {10881 Road's End Circle} Hamilton TX 77650 henry272@noway1234.com {Henry Polson} {6487 Ronald Place} Bathurst TX 77137 lorenza813@noway1234.com {Lorenza Barden} {7327 Cove Circle} Newcastle TX 77872 grace983@noway1234.com {Grace Rader} {11314 Short Street} Nacogdoches TX 77091 rodriques22@noway1234.com {A. Rodriques} {3749 Fountain Drive} Newcastle TX 77856 houmann321@noway1234.com {Dr. Houmann} {11819 Susitna View Court} Independence TX 77186 ham283@noway1234.com {Evert Ham} {9845 East 30th Avenue} Pattison TX 77467 bailey236@noway1234.com {Jiies Bailey} {7231 Larisa Street} Sunnyville TX 77788 horner814@noway1234.com {Wink Horner} {5148 Lake O' The Hills Circle} {Coober Pedy} TX 77102 piersol16@noway1234.com {Huck Piersol} {8929 Galleon Circle} Katy TX 77760 d419@noway1234.com {D. Lacey} {10878 Compass Circle} {Mount Isa} TX 77390 mancil559@noway1234.com {Mancil Lueders} {8844 W Street} Waco TX 77452 baum34@noway1234.com {Baum Behrends} {7651 East 151st Avenue} {Mount Isa} TX 77369 rollyson_krontz@noway1234.com {Rollyson Krontz} {10217 Vine Avenue} Albury TX 77376 clark156@noway1234.com {Nona Clark} {3339 Rushwood Circle} {Port Hedland} TX 77400 lock953@noway1234.com {Rapp Lock} {4768 Fredricks Drive} Star TX 77611 zelma_urich@noway1234.com {Zelma Urich} {3882 Diomede Street} Townsville TX 77522 mcculla872@noway1234.com {Patsi Mcculla} {7067 Portage Circle} Albury TX 77869 lintz546@noway1234.com {Margaret Lintz} {2801 Goose Lake Drive} Townsville TX 77540 wilfong111@noway1234.com {Wilfong Vance} {2533 Reata Drive} Waco TX 77598 reuginia@noway1234.com {Reuginia Knippelmeyer} {1698 West Northern Lights Boulevard} Queenstown TX 77812 richardson_bray@noway1234.com {Richardson Bray} {4542 Chisik Circle} Newcastle TX 77266 carolyn111@noway1234.com {Carolyn Davis} {6508 Roger Drive} Townsville TX 77621 t91@noway1234.com {T. Hahn} {2012 Oneill Lane} Tamworth TX 77051 mccoy857@noway1234.com {April Mccoy} {11804 Bentree Circle} Pattison TX 77327 conradt316@noway1234.com {Bernard Conradt} {2229 Spruce Crest Drive} Austin TX 77878 lock145@noway1234.com {H.A Lock} {3040 Kensington Circle} Waco TX 77677 silas288@noway1234.com {Silas Altman} {5347 Baywind Circle} Bendigo TX 77655 hargis540@noway1234.com {Nick Hargis} {11647 Newcomb Drive} Amarillo TX 77153 casey325@noway1234.com {Casey Ray} {4689 Charlie Circle} Eucla TX 77412 bert_baum@noway1234.com {Bert Baum} {3692 West 99th Avenue} Nacogdoches TX 77928 r_c@noway1234.com {R.C. Rubin} {11605 Mountain Point Circle} Bourke TX 77638 cheryle54@noway1234.com {Cheryle Wellensiek} {9067 Via Balboa} Launceston TX 77901 jefferson686@noway1234.com {Jefferson Goers} {1391 Portage Drive} Pattison TX 77290 martin688@noway1234.com {Martin Gordon} {9517 Price Island Circle} Galveston TX 77781 horstman52@noway1234.com {Sylvester Horstman} {2170 Berryhill Road} Amarillo TX 77975 reufus_robinson@noway1234.com {Reufus Robinson} {3624 Traverse Way} Cairns TX 77358 maggie891@noway1234.com {Maggie Carmine} {10410 Sharon Street} Mildura TX 77041 schlender438@noway1234.com {Befty Schlender} {11349 Dora Avenue} Waco TX 77445 keedy711@noway1234.com {Carrol Keedy} {10966 Eklutna Street} Austin TX 77630 sarah954@noway1234.com {Sarah Armknecht} {560 Constitution Street} Waco TX 77268 kent554@noway1234.com {Clayton Kent} {4237 Trinity Circle} Albany TX 77589 ossian318@noway1234.com {Mary Ossian} {9658 Eastbrook Circle} Townsville TX 77808 jeffrey@noway1234.com {Jeffrey McCoy} {6898 Midori Drive} Bendigo TX 77703 ermine_haney@noway1234.com {Ermine Haney} {906 Warwick Drive} Waco TX 77465 aundrel833@noway1234.com {Aundrel Mattheis} {10191 Kiloana Court} Galveston TX 77434 morrison868@noway1234.com {Ivan Morrison} {605 Westwind Drive} {Mount Isa} TX 77702 lou668@noway1234.com {Lou Bates} {948 Stargate Circle} Newcastle TX 77942 wadie@noway1234.com {Wadie Jewell} {7460 Cambridge Way} Centerville TX 77260 ann642@noway1234.com {Ann Harrah} {4525 Highland Drive} Pattison TX 77204 penny_monkeyballs@noway1234.com {Penny Monkeyballs} {2426 Sherrie Street} {San Felipe} TX 77106 cummins680@noway1234.com {Marie Cummins} {8876 Teri Circle} Monaville TX 77668 andy@noway1234.com {Andy Hupka} {7325 Hillside Drive} Tamworth TX 77081 ramsey_lofgren@noway1234.com {Ramsey Lofgren} {9349 King David Drive} Rockhampton TX 77094 peek108@noway1234.com {Jewell Peek} {7837 Whimbrel Drive} Rockhampton TX 77451 bruce222@noway1234.com {Bruce Finney} {7310 Northfleet Drive} Bendigo TX 77311 colton216@noway1234.com {Teresa Colton} {5268 River Heights Loop} Bendigo TX 77027 cora_peters@noway1234.com {Cora Peters} {365 Mc Cabe Circle} Brookshire TX 77534 sackaly678@noway1234.com {Henline Sackaly} {5996 Kinnikinnick Street} Townsville TX 77225 watteyne220@noway1234.com {Rai Watteyne} {10376 Rosemary Street} Adelaide TX 77663 j_t_elenga@noway1234.com {J.T. Elenga} {7850 Arlon Street} Katy TX 77966 severns379@noway1234.com {Vera Severns} {3710 Thuja Circle} Galveston TX 77504 doy672@noway1234.com {Doy Pooch} {6334 Broaddus Street} Nacogdoches TX 77339 tootsie328@noway1234.com {Tootsie Craig} {3860 Oxford Drive} Rockhampton TX 77044 gregory173@noway1234.com {Gregory Harman} {804 Tayshee Circle} Bourke TX 77119 haymon99@noway1234.com {Haymon Lock} {5540 East Chester Heights Circle} {Mount Isa} TX 77852 sharon649@noway1234.com {Sharon Wilmes} {2809 East Tree Court} {Port Augusta} TX 77802 chrastil672@noway1234.com {Chester Chrastil} {6619 Bernard Drive} Queenstown TX 77537 patsy_proctor@noway1234.com {Patsy Proctor} {2382 Galena Bay Loop} Ketherine TX 77227 allen244@noway1234.com {Butcher Allen} {266 Chipwood Circle} Austin TX 77925 wendel669@noway1234.com {Wendel Finney} {844 Sabrina Street} Mildura TX 77445 wilson_littlejohn@noway1234.com {Wilson Littlejohn} {8698 Ansel Circle} {Alice Springs} TX 77088 gregory_mattheis@noway1234.com {Gregory Mattheis} {1214 Tideview Drive} {Tennant Creek} TX 77240 ahtelene538@noway1234.com {Ahtelene Henrichs} {9494 Evans Circle} {San Antonio} TX 77819 wolf186@noway1234.com {Wiley Wolf} {6073 Emerald Circle} {Broken Hill} TX 77051 dufield96@noway1234.com {Dufield Badellino} {6758 Dunkirk Court} Adelaide TX 77360 graff252@noway1234.com {Forrest Graff} {11662 Leeper Circle} Kema TX 77764 maysel_steinmeyer@noway1234.com {Maysel Steinmeyer} {658 Chandelle Drive} Waco TX 77206 deane_schroder@noway1234.com {Deane Schroder} {6129 Schuss Drive} Centerville TX 77711 greene123@noway1234.com {Goldie Greene} {1167 Askeland Drive} Amarillo TX 77503 clifford_feurer@noway1234.com {Clifford Feurer} {8804 Rocky Bay Circle} {Mount Gambier} TX 77607 oral_bauers@noway1234.com {Oral Bauers} {2239 Evelyn Circle} Adelaide TX 77696 anita@noway1234.com {Anita Colson} {1600 Woburn Circle} OOdnadatta TX 77528 vanwinkle785@noway1234.com {Dencil VanWinkle} {6478 Majella Circle} {Broken Hill} TX 77178 olive_scherrer@noway1234.com {Olive Scherrer} {5941 Howard Avenue} Cairns TX 77171 hester305@noway1234.com {Kermit Hester} {7095 Hendrickson Circle} Brookshire TX 77479 judith_hindera@noway1234.com {Judith Hindera} {1212 West 74th Court} Eucla TX 77596 ruby_fox@noway1234.com {Ruby Fox} {7937 Mariah Drive} Launceston TX 77136 blythe325@noway1234.com {C.A. Blythe} {11361 Peppertree Circle} Rockhampton TX 77021 kallai_hutt@noway1234.com {Kallai Hutt} {3229 Middle Road} Kema TX 77414 huling889@noway1234.com {Huling Murphy} {927 Maywood Circle} {Broken Hill} TX 77691 chapman@noway1234.com {Chapman Kounthapanya} {7195 Trapline Drive} Waco TX 77535 dan@noway1234.com {Dan Sterling} {575 Chesapeake Circle} Houston TX 77151 dennis777@noway1234.com {Dennis Clifton} {1219 Holden Drive} Burnie TX 77125 neal_cooper@noway1234.com {Neal Cooper} {6005 Kobuk Court} Wollongong TX 77947 dorsey888@noway1234.com {Dorsey Buces} {2978 Spindrift Loop} Tamworth TX 77238 gordon89@noway1234.com {Dunlap Gordon} {7929 Whimbrel Drive} {Coober Pedy} TX 77922 andy244@noway1234.com {Andy Watteyne} {7230 Clear Falls Circle} Ketherine TX 77609 tejral682@noway1234.com {Brany Tejral} {5769 Regency Court} {Padre Island} TX 77241 alan772@noway1234.com {Alan Warden} {10672 Pierre Lane} Albury TX 77291 bud_kerchal@noway1234.com {Bud Kerchal} {2163 Hall Circle} Ketherine TX 77356 bernell_houmann@noway1234.com {Bernell Houmann} {5223 West 31st Avenue} Katy TX 77632 lock251@noway1234.com {Betty Lock} {6808 Grover Drive} {Broken Hill} TX 77864 bohung766@noway1234.com {Alva Bohung} {11421 Cervin Circle} Bendigo TX 77345 david429@noway1234.com {David Scholl} {5145 Majestic Drive} {Coffs Harbour} TX 77301 ones361@noway1234.com {Ones Repp} {142 Northwood Drive} Pattison TX 77476 ossian660@noway1234.com {Hughes Ossian} {3659 Roson Court} Amarillo TX 77069 kerner698@noway1234.com {Ranae Kerner} {202 Rezanof Circle} {Mount Isa} TX 77322 warnke503@noway1234.com {Jen Warnke} {1931 Cyrus Street} {Mount Isa} TX 77993 mcpherrin820@noway1234.com {Lavonne McPherrin} {10450 Silverberry Loop} {Coober Pedy} TX 77568 harold859@noway1234.com {Harold Watteyne} {7567 Tanglewood Place} {San Felipe} TX 77500 christine156@noway1234.com {Christine Uhrmacher} {2367 Oak Knoll Drive} {Coffs Harbour} TX 77700 aimee197@noway1234.com {Aimee Hazen} {7833 Steamboat Drive} Adelaide TX 77793 rae402@noway1234.com {Rae Hendee} {1550 Prescott Street} Eucla TX 77912 dorsch753@noway1234.com {Austin Dorsch} {468 West 69th Avenue} Katy TX 77054 christensen918@noway1234.com {Ottie Christensen} {5378 Mere Circle} {Tennant Creek} TX 77972 strickland_puchalla@noway1234.com {Strickland Puchalla} {7641 Omega Court} Star TX 77912 tootsie_gottula@noway1234.com {Tootsie Gottula} {4725 Delong Landing Circle} Ketherine TX 77708 severns833@noway1234.com {Hanshaw Severns} {8417 Fuller Street} {Mount Isa} TX 77150 lena_mccoy@noway1234.com {Lena McCoy} {11849 Hillcrest Circle} Austin TX 77598 j188@noway1234.com {J. Elenga} {10880 Scorpio Circle} Nacogdoches TX 77394 arnita@noway1234.com {Arnita Bossung} {7849 Lucille Lane} Queenstown TX 77676 aldana408@noway1234.com {Bernard Aldana} {1048 Chamber Lane} Nacogdoches TX 77116 graff257@noway1234.com {Horace Graff} {8229 Birch Lane} {Alice Springs} TX 77587 loretta927@noway1234.com {Loretta Hothan} {1280 Viburnum Drive} Nacogdoches TX 77844 r_c129@noway1234.com {R.C. Heideman} {11929 Cimarron Court} {Coober Pedy} TX 77426 campbell274@noway1234.com {Reufus Campbell} {2546 West 16th Avenue} Wollongong TX 77040 tinney951@noway1234.com {Tinney Peek} {6422 Noblewood Street} Nacogdoches TX 77336 abb@noway1234.com {Abb Rohmeyer} {5021 Matterhorn Way} Tamworth TX 77519 alton402@noway1234.com {Alton Burns} {9141 Pago Pago Avenue} Albury TX 77927 warden162@noway1234.com {Given Warden} {2076 Meadow View Drive} {Broken Hill} TX 77076 mathis909@noway1234.com {Jody Mathis} {2778 Tidepool Place} Wollongong TX 77830 urban_luck@noway1234.com {Urban Luck} {857 Roundtop Circle} Albury TX 77644 dirksen612@noway1234.com {Allen Dirksen} {4768 Clogia Circle} Austin TX 77201 mavallee448@noway1234.com {Mavallee Davison} {3887 Atelier Drive} Launceston TX 77640 jochim275@noway1234.com {Mule Jochim} {6486 Garland Circle} Tamworth TX 77106 elmer@noway1234.com {Elmer Wolken} {6087 Scorpio Circle} Townsville TX 77506 alma@noway1234.com {Alma Curry} {3275 Ambler Lane} Albury TX 77600 robert890@noway1234.com {Robert Esser} {3394 Hale Court} Dallas TX 77686 goracke716@noway1234.com {Shelia Goracke} {8819 Gram Circle} Wollongong TX 77065 edsil893@noway1234.com {Edsil Jewell} {10520 North Eagle River Loop Road} Ketherine TX 77550 krontz90@noway1234.com {Dorsel Krontz} {7426 Kirov Circle} Cairns TX 77022 letcher@noway1234.com {Letcher Malone} {10170 Buckner Drive} {Coffs Harbour} TX 77723 ebeler893@noway1234.com {Patronia Ebeler} {5050 Ril Circle} Star TX 77196 p_roberts@noway1234.com {P. Roberts} {9937 Switzerland Drive} Monaville TX 77318 spence874@noway1234.com {Kyle Spence} {9152 North Side Circle} Townsville TX 77740 baum963@noway1234.com {Frankie Baum} {5688 Cleveland Avenue} Nacogdoches TX 77813 wilson_pettinger@noway1234.com {Wilson Pettinger} {4543 Loon Circle} Dallas TX 77958 eunice252@noway1234.com {Eunice Ullman} {463 Talkeetna Street} {Mount Isa} TX 77326 holben284@noway1234.com {Baum Holben} {573 Don Circle} Sunnyville TX 77117 d264@noway1234.com {D. Houmann} {10708 Wagner Street} Eucla TX 77500 collins710@noway1234.com {Collins Ham} {131 West 37th Avenue} OOdnadatta TX 77173 mccoy572@noway1234.com {Irene Mccoy} {8108 Faye Circle} {Broken Hill} TX 77250 francisco@noway1234.com {Francisco Staley} {7745 Terracewood Lane} Albury TX 77352 merlin_borrenpohl@noway1234.com {Merlin Borrenpohl} {6323 Yellowstone Drive} Bourke TX 77192 reiber168@noway1234.com {Brenford Reiber} {5029 Brandywine Avenue} Eucla TX 77655 rodney494@noway1234.com {Rodney Vance} {10187 Lamb Drive} {Alice Springs} TX 77327 werner520@noway1234.com {Mable Werner} {1181 Redcoat Place} Kema TX 77486 howard73@noway1234.com {Howard Rowe} {6343 Mesa Place} OOdnadatta TX 77994 greg@noway1234.com {Greg Wilhelm} {1600 Island Drive} {Coober Pedy} TX 77776 earhart845@noway1234.com {Johnie Earhart} {8701 Queen Victoria Drive} Newcastle TX 77092 thomas_ditlevson@noway1234.com {Thomas Ditlevson} {11989 East 40th Court} Katy TX 77055 dee_kent@noway1234.com {Dee Kent} {2085 Woodmont Drive} Burnie TX 77485 charlie_mitchel@noway1234.com {Charlie Mitchel} {378 Krishka Circle} Monaville TX 77817 joey_mooney@noway1234.com {Joey Mooney} {5877 Mountain Road} {Port Hedland} TX 77930 reinhardt692@noway1234.com {Denny Reinhardt} {4964 Donald Place} Wollongong TX 77745 sedersten803@noway1234.com {Russ Sedersten} {3343 Kulchay Circle} {Port Hedland} TX 77683 bengtsson503@noway1234.com {Bailey Bengtsson} {7854 East Klatt Road} Centerville TX 77143 mayfield70@noway1234.com {Orvin Mayfield} {3120 Wildwood Drive} Adelaide TX 77037 mamie412@noway1234.com {Mamie Repp} {8230 Chaparral Circle} {San Felipe} TX 77006 schmidt931@noway1234.com {Ralph Schmidt} {7336 West 71st Avenue} Monaville TX 77299 doyle857@noway1234.com {Doyle Morrissey} {6741 Lori Drive} Burnie TX 77130 dahl327@noway1234.com {Evette Dahl} {9758 Sunflower Street} Pattison TX 77503 phommachan368@noway1234.com {Leola Phommachan} {3457 Birchwood Loop Road} Pattison TX 77061 h660@noway1234.com {H. Schutz} {2065 Clover Lane} Sunnyville TX 77774 emie955@noway1234.com {Emie Bates} {7523 Hyatt Street} Albany TX 77381 fink395@noway1234.com {Reva Fink} {9088 Gstaad Way} Brookshire TX 77689 hattie@noway1234.com {Hattie Dillaplain} {8976 Monpelier Drive} {Broken Hill} TX 77390 maysel732@noway1234.com {Maysel Leuder} {4946 Meadow Wood Circle} Austin TX 77823 carolyn483@noway1234.com {Carolyn Mccoy} {10929 Clairborne Circle} Brookshire TX 77098 letcher145@noway1234.com {Letcher Helm} {9895 Railroad Avenue} Wollongong TX 77227 j_r752@noway1234.com {J.R. Kuhl} {1033 Evergreen Street} Queenstown TX 77680 brett_sullivan@noway1234.com {Brett Sullivan} {9226 Timber Lane} Kema TX 77842 elaine858@noway1234.com {Elaine Reinhardt} {11731 Dunlap Court} Wollongong TX 77275 nell_mccoy@noway1234.com {Nell Mccoy} {859 Bonanza Avenue} Albany TX 77960 sayakhoummane232@noway1234.com {Frame Sayakhoummane} {173 Lichen Place} Waco TX 77990 little316@noway1234.com {Jane Little} {5091 Dome Circle} Katy TX 77308 menard748@noway1234.com {Kennith Menard} {4626 Snug Harbor Circle} Burnie TX 77040 retha@noway1234.com {Retha Berg} {6635 Griffin Road} Bourke TX 77598 roy683@noway1234.com {Roy Lade} {5290 Hillcrest Drive} Mildura TX 77098 buces916@noway1234.com {Chester Buces} {9779 Arctic Slope Avenue} Amarillo TX 77802 earl513@noway1234.com {Earl Peterson} {6618 West 66th Court} Independence TX 77345 lou577@noway1234.com {Lou Luck} {753 Ridge Place} {San Antonio} TX 77776 horstman65@noway1234.com {Ora Horstman} {310 Spruce Road} Bathurst TX 77089 peters808@noway1234.com {Odis Peters} {3767 Dakota Street} Wollongong TX 77048 amos572@noway1234.com {Betsy Amos} {7286 Brentwood Circle} Ketherine TX 77307 helen_holmstrom@noway1234.com {Helen Holmstrom} {10288 Arne Erickson Circle} {San Felipe} TX 77475 lantie47@noway1234.com {Lantie Nakamura} {3085 Ivy Circle} Centerville TX 77447 brinkman361@noway1234.com {Dr. Brinkman} {949 Galactica Drive} Galveston TX 77612 blake_lanspa@noway1234.com {Blake Lanspa} {6469 Arcturus Circle} Albury TX 77309 maryaldine458@noway1234.com {Maryaldine Altman} {921 Lahr Circle} Tamworth TX 77783 colson160@noway1234.com {Befty Colson} {6028 Flintwood Place} Monaville TX 77502 s91@noway1234.com {S. Christensen} {7732 Capricorn Circle} Dallas TX 77054 giittinger936@noway1234.com {Buell Giittinger} {3630 Concrete Street} Albury TX 77808 ford641@noway1234.com {Ford Parrish} {4209 West 42nd Place} {Coffs Harbour} TX 77476 eva_snow@noway1234.com {Eva Snow} {6580 Delasala Place} {Broken Hill} TX 77289 verle194@noway1234.com {Verle Hunt} {5117 Turpin Street} Star TX 77381 chrastil172@noway1234.com {Hazel Chrastil} {7042 Golden Street} Cairns TX 77626 newt348@noway1234.com {Newt VanWinkle} {10908 Shelli Drive} Brookshire TX 77452 olan@noway1234.com {Olan Phommachan} {4341 Hazel Court} Newcastle TX 77173 johnson_wheeler@noway1234.com {Johnson Wheeler} {10419 Dawson Street} Amarillo TX 77288 gobber442@noway1234.com {Hudson Gobber} {4089 Campbell Place} Newcastle TX 77516 c121@noway1234.com {C. Topp} {5043 Irene Drive} {San Antonio} TX 77398 ernestine_swanson@noway1234.com {Ernestine Swanson} {8053 Denise Circle} Bendigo TX 77591 ellis637@noway1234.com {Ellis Noudaranouvong} {8041 Woodside Street} {Broken Hill} TX 77828 patton318@noway1234.com {Patton DeVorss} {274 Barry Avenue} Launceston TX 77097 inez33@noway1234.com {Inez Hahn} {11762 Ostovia Circle} {San Antonio} TX 77235 wendell115@noway1234.com {Muncey Wendell} {10231 Mountain Place} Broome TX 77528 adrian78@noway1234.com {Adrian Grof} {5664 Rankin Road} Bourke TX 77968 goemann248@noway1234.com {Credis Goemann} {565 Skyhills Drive} Nacogdoches TX 77369 jacobsen516@noway1234.com {Dawson Jacobsen} {8606 Stemp Circle} {San Felipe} TX 77456 humphries795@noway1234.com {Humphries Elenga} {11596 Country Woods Drive} Hamilton TX 77613 preston@noway1234.com {Preston Grable} {8633 Lido Circle} {San Antonio} TX 77753 goodrich18@noway1234.com {Walter Goodrich} {2272 Monroe Avenue} Galveston TX 77403 ramsey794@noway1234.com {Ramsey Grove} {2224 Finley Circle} Galveston TX 77603 morrissey316@noway1234.com {Malissa Morrissey} {1138 Lupine Circle} Galveston TX 77394 fox502@noway1234.com {Amma Fox} {10021 Mariah Drive} {Mount Gambier} TX 77489 haughton115@noway1234.com {Doc Haughton} {8905 Teton Place} Albury TX 77663 wilbert711@noway1234.com {Wilbert Borrenphol} {7899 Riverside Drive} Amarillo TX 77941 wilson30@noway1234.com {Wilson Lacey} {1307 East 76th Court} Bourke TX 77404 wilmes690@noway1234.com {Ruby Wilmes} {3579 Tangle Court} Amarillo TX 77701 coulter108@noway1234.com {Coulter Riensche} {4794 Borland Circle} Adelaide TX 77868 ann_speckmann@noway1234.com {Ann Speckmann} {7910 Corbin Drive} Brookshire TX 77889 holt@noway1234.com {Holt Searcey} {11619 Darby Road} {Coober Pedy} TX 77273 meyer874@noway1234.com {Ovid Meyer} {7973 Snow Bear Drive} Cairns TX 77035 schultz235@noway1234.com {Merlin Schultz} {10435 Armstrong Lane} Broome TX 77899 dominic899@noway1234.com {Dominic Buerstetta} {1066 Emard Street} {Mount Gambier} TX 77829 irene621@noway1234.com {Irene Huff} {1939 Lois Drive} Waco TX 77418 roncy_hahn@noway1234.com {Roncy Hahn} {10360 Evelyn Circle} {Padre Island} TX 77602 harrah51@noway1234.com {Nell Harrah} {9909 West 15th Avenue} Houston TX 77872 hays295@noway1234.com {Hays Vrbka} {3196 Wildwood Street} Dallas TX 77075 hunt637@noway1234.com {Hunt Hanau} {7288 Pronghorn Lane} Hamilton TX 77686 wiese260@noway1234.com {Rhunie Wiese} {3390 Country Woods Drive} Bendigo TX 77350 suzette628@noway1234.com {Suzette Carson} {8414 Happy Lane} Nacogdoches TX 77364 gillette220@noway1234.com {Cantrell Gillette} {3089 Bartlett Drive} {Alice Springs} TX 77224 schafer284@noway1234.com {Sussie Schafer} {6789 West Parkview Terrace Loop} Sunnyville TX 77088 alva_winkle@noway1234.com {Alva Winkle} {3852 West 75th Avenue} Kema TX 77618 robinson54@noway1234.com {Robinson Pope} {11280 Campbell Terrace Place} Waco TX 77027 gobber698@noway1234.com {Clifton Gobber} {947 George Court} Kema TX 77505 daisy_parrisb@noway1234.com {Daisy Parrisb} {192 West 10th Avenue} Hamilton TX 77349 ruby709@noway1234.com {F. Ruby} {3738 Heritage Court} Houston TX 77420 smith890@noway1234.com {Smith Harrington} {7959 Gulf Circle} Galveston TX 77166 june93@noway1234.com {June Sullivan} {9581 Energy Court} Albury TX 77837 connie@noway1234.com {Connie Floerke} {3286 South Gambell Street} Monaville TX 77529 olga_homer@noway1234.com {Olga Homer} {7091 Richardson Drive} {Tennant Creek} TX 77378 kelly777@noway1234.com {Kelly Hasselbalch} {5231 Sundance Circle} Queenstown TX 77273 emerald_delong@noway1234.com {Emerald DeLong} {2269 Katahdin Drive} Sunnyville TX 77409 mac943@noway1234.com {Mac Haughton} {10572 Meadow Ridge Court} Rockhampton TX 77588 gertrude_snow@noway1234.com {Gertrude Snow} {2170 Hideaway Court} {San Felipe} TX 77269 lyman@noway1234.com {Lyman Butler} {7514 Nantucket Circle} Amarillo TX 77176 king784@noway1234.com {Gobbie King} {3341 Beverly Drive} Monaville TX 77546 verelene_betzelberger@noway1234.com {Verelene Betzelberger} {4459 High Land Drive} {Port Augusta} TX 77773 taylor443@noway1234.com {Rayburn Taylor} {9681 Unimak Circle} {San Felipe} TX 77270 tish392@noway1234.com {Tish Thongkhamvilay} {11621 Windflower Circle} {Padre Island} TX 77439 elsie@noway1234.com {Elsie Wilhelm} {2511 Arlene Drive} {Alice Springs} TX 77399 lueders94@noway1234.com {Rhetta Lueders} {8960 Brewery Street} {Coober Pedy} TX 77947 wilson8@noway1234.com {Wilson Piersol} {4287 Warning Drive} {Coffs Harbour} TX 77748 wall301@noway1234.com {Ramsey Wall} {3792 Sherherdia Circle} Queenstown TX 77838 quenton498@noway1234.com {Quenton Nolte} {1852 Highland Park Avenue} Newcastle TX 77554 pooch47@noway1234.com {Kennith Pooch} {6937 Telequana Circle} Albury TX 77431 whiskey_schreiner@noway1234.com {Whiskey Schreiner} {4962 East 14th Avenue} Nacogdoches TX 77191 henderson_badellino@noway1234.com {Henderson Badellino} {6279 Happy Lane} Cairns TX 77083 person660@noway1234.com {Tish Person} {11178 A Street Loop} {Alice Springs} TX 77507 kettelhake124@noway1234.com {James Kettelhake} {7964 Crow Berry Circle} Tamworth TX 77106 schmidt222@noway1234.com {Sweeney Schmidt} {443 Ambergate Drive} {Alice Springs} TX 77511 blythe936@noway1234.com {Monkey Buster Blythe} {6041 Alamosa Drive} Mildura TX 77193 field716@noway1234.com {Norman Field} {2514 Seashore Place} Houston TX 77055 aust3@noway1234.com {Brenford Aust} {9575 Copperbush Court} Houston TX 77852 dencil246@noway1234.com {Dencil Hermsmeier} {19 Hightower Road} Rockhampton TX 77315 barden307@noway1234.com {Field Barden} {6066 Amanda Court} Burnie TX 77689 pudge_montz@noway1234.com {Pudge Montz} {11791 Trena Street} Pattison TX 77276 ovie@noway1234.com {Ovie Jewell} {7772 Southcliff Ridge Circle} Broome TX 77847 sharkey118@noway1234.com {Sharkey Mercure} {4048 Fairweather Drive} Monaville TX 77071 curry275@noway1234.com {Norman Curry} {10479 Travis Street} Cairns TX 77131 mccoy12@noway1234.com {W.B. McCoy} {1414 Sea Parrott Circle} {Padre Island} TX 77784 claire_einstein@noway1234.com {Claire Einstein} {3855 Crystal Creek Drive} Monaville TX 77526 casey_lanspa@noway1234.com {Casey Lanspa} {3536 Pribilof Loop} {Alice Springs} TX 77651 geweke67@noway1234.com {Alfred Geweke} {2350 Chevigny Street} {Mount Gambier} TX 77478 carsel564@noway1234.com {Carsel Puchalla} {1163 Mentra Circle} Sunnyville TX 77409 hargis633@noway1234.com {Lucy Hargis} {4368 Sanderlin Street} Eucla TX 77414 kelly451@noway1234.com {Kelly Troeger} {4355 Lake View Drive} {Port Augusta} TX 77228 hothan205@noway1234.com {Kellis Hothan} {7075 Spruce Lane} Broome TX 77019 david_eltiste@noway1234.com {David Eltiste} {8103 Beacon Hill Drive} Dallas TX 77744 joseph493@noway1234.com {Joseph Horstman} {2724 Leo Circle} Centerville TX 77862 zappa901@noway1234.com {Les Zappa} {7226 East 66th Avenue} Pattison TX 77444 keedy25@noway1234.com {Claudia Keedy} {4407 Galveston Circle} Townsville TX 77626 hartley491@noway1234.com {Hartley Polson} {4078 Loretta Place} Independence TX 77680 lempka251@noway1234.com {Satan Lempka} {9699 East 12th Avenue} Austin TX 77387 rothell911@noway1234.com {Corliss Rothell} {11198 Gannett Circle} Albury TX 77911 lynda@noway1234.com {Lynda McCulla} {10542 Snug Harbor Circle} {Mount Isa} TX 77457 opal356@noway1234.com {Opal Mason} {1829 Freitag Drive} Adelaide TX 77633 garris82@noway1234.com {Everett Garris} {1628 Gunwale Circle} Waco TX 77928 p_guenther@noway1234.com {P. Guenther} {5009 Lower Tulwar Loop} Dallas TX 77137 oltman740@noway1234.com {Dodrill Oltman} {3432 Kiyona Circle} Independence TX 77675 gilbert610@noway1234.com {Gilbert Gobber} {1581 Tonga Drive} Amarillo TX 77904 verna713@noway1234.com {Verna Reschke} {9786 Max Circle} Adelaide TX 77416 pluta673@noway1234.com {Zelma Pluta} {7036 Aquarius Circle} Rockhampton TX 77295 granny298@noway1234.com {Granny Fritsch} {9060 Mc Kinley Avenue} Cairns TX 77154 carpenter915@noway1234.com {Conley Carpenter} {4073 O'malley Centre Court} Bathurst TX 77399 pooey_branting@noway1234.com {Pooey Branting} {4027 Airport Way} OOdnadatta TX 77711 hardin348@noway1234.com {Mike Hardin} {481 Rendon Drive} Burnie TX 77056 margertte@noway1234.com {Margertte Hebner} {4182 Discovery Court} Newcastle TX 77351 sherie605@noway1234.com {Sherie Haughton} {3293 Unalaska Circle} {Coffs Harbour} TX 77509 stephen_mahar@noway1234.com {Stephen Mahar} {9922 Bluegrass Circle} {San Antonio} TX 77513 anderson301@noway1234.com {Custer Anderson} {2113 Crystal Street} Cairns TX 77253 ashley_borrenphol@noway1234.com {Ashley Borrenphol} {11280 Hubbard Place} {Port Hedland} TX 77005 warden583@noway1234.com {Wilma Warden} {6294 North Post Road} Centerville TX 77044 teresa185@noway1234.com {Teresa Morse} {83 East 25th Avenue} Adelaide TX 77597 leo799@noway1234.com {Leo Hunt} {945 Seacloud Circle} {San Felipe} TX 77817 kunzman959@noway1234.com {Thelma Kunzman} {3202 Kuskokwim Street} Bourke TX 77264 barnette_kuhl@noway1234.com {Barnette Kuhl} {8935 Hyatt Street} {Port Augusta} TX 77419 ned339@noway1234.com {Ned Ditlevson} {5867 Colony Place} Burnie TX 77918 osterhoudt594@noway1234.com {Annie Osterhoudt} {8724 Driftwood Street} Nacogdoches TX 77883 jones535@noway1234.com {Lucille Jones} {7455 Staubbach Circle} Austin TX 77950 lueders1@noway1234.com {Boggs Lueders} {1520 Halley's Comet Circle} Adelaide TX 77133 meister672@noway1234.com {L. Meister} {8225 East 87th Avenue} Brookshire TX 77881 lloyd525@noway1234.com {Lloyd Hood} {8436 Windflower Circle} {Coober Pedy} TX 77574 melinda981@noway1234.com {Melinda Mandery} {6157 West 57th Avenue} Adelaide TX 77159 jess65@noway1234.com {Jess Montz} {6887 Lucern Avenue} Austin TX 77785 rader419@noway1234.com {Arlin Rader} {3669 Maylen Way} {Port Hedland} TX 77835 mattheis603@noway1234.com {Backus Mattheis} {2642 Tamarack Street} Newcastle TX 77612 m_gibson@noway1234.com {M. Gibson} {8838 Treeline Court} Tamworth TX 77025 monkeyballs552@noway1234.com {Lou Monkeyballs} {7387 East Henkins Road} Monaville TX 77206 wink215@noway1234.com {Wink Rathbun} {4934 Chris Court} Star TX 77342 tucker_grof@noway1234.com {Tucker Grof} {5318 Viola Circle} Tamworth TX 77429 lyle22@noway1234.com {Lyle Purdy} {303 Cinerama Circle} Cairns TX 77876 pieratt594@noway1234.com {Adkins Pieratt} {9929 Kalgin Street} {San Antonio} TX 77044 morse299@noway1234.com {Morse Rothell} {11812 Fullenwider Circle} {Mount Isa} TX 77609 captain@noway1234.com {Captain McNergney} {4727 Lindsey Circle} Nacogdoches TX 77393 shirley996@noway1234.com {Shirley Reinhardt} {5647 Stewart Drive} Bendigo TX 77673 stewart_ellis@noway1234.com {Stewart Ellis} {10351 Bridle Circle} {San Antonio} TX 77881 delorsis836@noway1234.com {Delorsis Doty} {11694 Carnaby Way} Tamworth TX 77153 reba_chittenden@noway1234.com {Reba Chittenden} {5933 Betty Street} Brookshire TX 77378 puchalla599@noway1234.com {Ruby Puchalla} {8624 Marquez Circle} Rockhampton TX 77068 mudflaps757@noway1234.com {Mudflaps Miner} {2749 Teri Drive} Mildura TX 77768 lillie_bates@noway1234.com {Lillie Bates} {10046 Carnaby Circle} {Port Augusta} TX 77181 barnette702@noway1234.com {Barnette Parrisb} {8500 Ellis Drive} Cairns TX 77209 charlotte952@noway1234.com {Charlotte Montz} {11764 Regency Drive} {Coober Pedy} TX 77142 laue186@noway1234.com {Donald Laue} {8808 Foster Estate Drive} {Coober Pedy} TX 77990 riley346@noway1234.com {Riley Stordahl} {987 Fernhill Avenue} OOdnadatta TX 77366 lonzo@noway1234.com {Lonzo Fuller} {10789 Keyhole Circle} {Coffs Harbour} TX 77163 fred@noway1234.com {Fred DeVorss} {7098 Shady Lane} Queenstown TX 77176 lou671@noway1234.com {Lou Mayfield} {125 Scarlet Place} Cairns TX 77102 odbert624@noway1234.com {Odbert Raney} {9704 Gorsuch Street} Dallas TX 77282 w_a455@noway1234.com {W.A. Blessing} {8322 Matthews Drive} Townsville TX 77148 marvin259@noway1234.com {Marvin Belding} {2318 Papago Place} Adelaide TX 77494 koehler131@noway1234.com {Evert Koehler} {866 Chilligan Drive} Wollongong TX 77044 patty510@noway1234.com {Patty Birnie} {3167 Gillette Drive} Sunnyville TX 77271 edwin888@noway1234.com {Edwin Packett} {3357 Ascot Street} Burnie TX 77222 rosilia862@noway1234.com {Rosilia Staley} {6517 Molanary Drive} {Padre Island} TX 77789 othmer465@noway1234.com {Margaret Othmer} {8607 West Kanaga Loop} Star TX 77344 dancy21@noway1234.com {Dancy Barden} {7815 Solleret Drive} Ketherine TX 77348 olsen713@noway1234.com {Teresa Olsen} {5695 Norman Street} Launceston TX 77186 vic@noway1234.com {Vic Pluta} {11429 Lori Drive} Eucla TX 77519 yvonne@noway1234.com {Yvonne Todter} {7607 East 23rd Avenue} Bendigo TX 77451 wendell182@noway1234.com {Norval Wendell} {7020 End Street} Dallas TX 77361 bunk566@noway1234.com {Bunk Allen} {6750 Easy Street} Wollongong TX 77296 diana_neemann@noway1234.com {Diana Neemann} {6534 Country Club Lane} Houston TX 77839 wellensiek539@noway1234.com {IV Wellensiek} {2056 Essex Park Drive} Kema TX 77046 pfister67@noway1234.com {Lykins Pfister} {9865 Joseph Street} Monaville TX 77917 hickman105@noway1234.com {Hickman Wellensiek} {5525 Mc Manus Drive} {Alice Springs} TX 77061 finn849@noway1234.com {Dr. Finn} {10019 Arca Drive} Newcastle TX 77195 w706@noway1234.com {W. Sterling} {1431 Prince Circle} Katy TX 77856 reba741@noway1234.com {Reba Krause} {4737 Copper Circle} Dallas TX 77668 mullins725@noway1234.com {Mullins Glasson} {2240 Tool Street} Bathurst TX 77147 patronia779@noway1234.com {Patronia Hardin} {11158 Dotberry Drive} Kema TX 77532 naomi791@noway1234.com {Naomi DeLong} {11413 Goff Street} {Port Augusta} TX 77159 judy_ullman@noway1234.com {Judy Ullman} {9245 East 98th Avenue} Bourke TX 77381 earlene@noway1234.com {Earlene Rogers} {9279 Unalaska Circle} {Mount Gambier} TX 77748 terry867@noway1234.com {Terry Bane} {1868 Chickaloon Street} {Tennant Creek} TX 77745 mcdonald455@noway1234.com {Billie McDonald} {5809 Lahonda Drive} Townsville TX 77712 emily244@noway1234.com {Emily Gregory} {1274 Dawnlight Court} {Port Hedland} TX 77429 lintz554@noway1234.com {James Lintz} {1100 Wyoming Drive} {Coffs Harbour} TX 77698 dow777@noway1234.com {Dow Oestmann} {9619 South Lowrie Loop} {Mount Gambier} TX 77879 gobber44@noway1234.com {Chessie Gobber} {5071 Charlotte Place} Townsville TX 77168 ovie_gillette@noway1234.com {Ovie Gillette} {11310 Tanadak Circle} Star TX 77990 frederick_noudaranouvong@noway1234.com {Frederick Noudaranouvong} {8455 Hammond Avenue} {Mount Isa} TX 77003 blanch_delong@noway1234.com {Blanch DeLong} {1814 Dolly Varden Avenue} Dallas TX 77401 conway@noway1234.com {Conway Huff} {1111 K And R Street} Waco TX 77679 lavelle@noway1234.com {Lavelle Phillips} {4567 Crete Street} {San Antonio} TX 77239 micheal@noway1234.com {Micheal Young} {10900 Pauline Street} Rockhampton TX 77020 lempka157@noway1234.com {Peck Lempka} {1035 Duben Avenue} Albany TX 77230 rau377@noway1234.com {Quentin Rau} {11942 Klondike Street} {Tennant Creek} TX 77062 shirlee7@noway1234.com {Shirlee Hahn} {10055 Laona Drive} Broome TX 77761 keith32@noway1234.com {Keith Kaster} {7111 Fairkytes Circle} Eucla TX 77549 dolores495@noway1234.com {Dolores Rulla} {9555 Husky Street} Independence TX 77781 atha993@noway1234.com {Atha Hoke} {10352 Rhyner Court} Mildura TX 77346 buethe122@noway1234.com {Dawn Buethe} {4026 Oxbow Circle} {Coober Pedy} TX 77607 e_burns918@noway1234.com {E.Burns Riensche} {8949 Hillhaven Circle} Galveston TX 77540 adrian_badertscher@noway1234.com {Adrian Badertscher} {7566 Clover Lane} Bathurst TX 77292 peters443@noway1234.com {Osa Peters} {9819 Russell Circle} OOdnadatta TX 77875 hillyer525@noway1234.com {Cantrell Hillyer} {10236 Anogoc Drive} {Coober Pedy} TX 77452 charlotte362@noway1234.com {Charlotte Jewell} {10600 Ocean View Road} Amarillo TX 77142 triplett_pieratt@noway1234.com {Triplett Pieratt} {8150 Cody Court} Queenstown TX 77250 baucke913@noway1234.com {Judy Baucke} {9376 Sanderlin Street} Houston TX 77312 ragon847@noway1234.com {Chip Ragon} {1974 Dunbar Lane} Brookshire TX 77093 flava_urich@noway1234.com {Flava Urich} {11513 Madison Way} Star TX 77275 finn692@noway1234.com {Maysel Finn} {8593 Samoa Street} {San Antonio} TX 77618 quenton_chritton@noway1234.com {Quenton Chritton} {8103 Ken Logan Circle} Waco TX 77860 gibson825@noway1234.com {Pudge Gibson} {1417 Hampton Green Loop} Monaville TX 77077 steinmeyer211@noway1234.com {Woodrow Steinmeyer} {7895 Academy Drive} Eucla TX 77011 omer95@noway1234.com {Omer Naber} {116 Lassen Circle} Tamworth TX 77777 allen543@noway1234.com {Allen Bailey} {9091 Beechcraft Drive} Monaville TX 77342 evelyn227@noway1234.com {Evelyn Little} {890 Rosalind Loop} Monaville TX 77344 gaylene655@noway1234.com {Gaylene Badellino} {9806 Dennis Way} Bendigo TX 77597 patrica131@noway1234.com {Patrica Wellensiek} {460 Tyre Drive} Eucla TX 77451 packwood370@noway1234.com {Paxton Packwood} {4581 Vine Avenue} Rockhampton TX 77768 oat759@noway1234.com {Oat Peterson} {11701 Nathaniel Court} Bendigo TX 77074 bogle828@noway1234.com {Elwood Bogle} {3989 Orchard Place} Dallas TX 77369 sorensen901@noway1234.com {Les Sorensen} {1189 Mirror Lake Drive} Newcastle TX 77579 virginia_hoke@noway1234.com {Virginia Hoke} {10231 East 36th Avenue} {Coober Pedy} TX 77806 thies292@noway1234.com {F. Thies} {1816 West 86th Avenue} Broome TX 77759 betsy_doty@noway1234.com {Betsy Doty} {2741 Pitcairn Avenue} Wollongong TX 77469 moses381@noway1234.com {Moses Durst} {8735 Elaine Drive} Kema TX 77363 ruby_weinrich@noway1234.com {Ruby Weinrich} {1617 Cherokee Way} {San Felipe} TX 77724 tom477@noway1234.com {Tom Fleck} {1931 Laser Circle} {Coober Pedy} TX 77894 cawley233@noway1234.com {Cora Cawley} {7947 Sea Parrott Circle} Bathurst TX 77427 wiese513@noway1234.com {Rosa Wiese} {3785 Alitak Bay Circle} Queenstown TX 77059 mann858@noway1234.com {Noreene Mann} {10366 Cyrus Street} Centerville TX 77501 miesbach610@noway1234.com {Maxine Miesbach} {4324 Staysail Drive} Cairns TX 77235 wilbert238@noway1234.com {Wilbert Davis} {4303 Linden Court} Townsville TX 77491 hardin918@noway1234.com {Mozelle Hardin} {6885 Pintail Street} {Coffs Harbour} TX 77991 shelton_farley@noway1234.com {Shelton Farley} {3220 Ptarmigan Street} Newcastle TX 77998 helen847@noway1234.com {Helen Laue} {8154 Chisana Street} {Mount Gambier} TX 77519 osterthun566@noway1234.com {Strickland Osterthun} {11893 Penland Parkway} Independence TX 77489 newt385@noway1234.com {Newt Knox} {8466 Farrow Circle} Pattison TX 77400 conradt552@noway1234.com {Bessie Conradt} {837 Orca Street} Eucla TX 77254 mann341@noway1234.com {Dorsey Mann} {11748 Athens Avenue} Dallas TX 77088 olan_fankhauser@noway1234.com {Olan Fankhauser} {11873 Thoreau Circle} {San Antonio} TX 77517 jimmy_pistol881@noway1234.com {Jimmy"Pistol" Brinkman} {6645 Panorama Drive} {Coffs Harbour} TX 77446 margaret51@noway1234.com {Margaret Watteyne} {2591 East 115th Avenue} Broome TX 77445 arch297@noway1234.com {Arch Bane} {6042 Southampton Drive} Katy TX 77377 wiese365@noway1234.com {Lloyd Wiese} {1637 East 17th Avenue} Amarillo TX 77884 mary_broady@noway1234.com {Mary Broady} {10503 Hidden Retreat Place} Townsville TX 77192 senesourinh709@noway1234.com {Mamie Senesourinh} {7250 Konrad Circle} Amarillo TX 77550 mozelle_rine@noway1234.com {Mozelle Rine} {2320 Seagate Court} Adelaide TX 77858 donohue547@noway1234.com {Donohue Naber} {345 Lynx Way} Launceston TX 77626 ray144@noway1234.com {Butcher Ray} {11022 Milky Way Circle} Amarillo TX 77859 berne878@noway1234.com {Berne Knippelmeyer} {7859 Becharof Street} Houston TX 77215 shuey830@noway1234.com {Rapp Shuey} {6600 Hilltop Circle} OOdnadatta TX 77805 gene690@noway1234.com {Gene Hershberger} {8213 West 44th Place} Queenstown TX 77880 arnold862@noway1234.com {Wendell Arnold} {7935 Valley Street} {Port Augusta} TX 77883 matthew_brockman@noway1234.com {Matthew Brockman} {9110 Goff Street} OOdnadatta TX 77859 rother701@noway1234.com {Site Rother} {931 Clarbert Court} {San Antonio} TX 77842 r_a55@noway1234.com {R.A. Saunders} {3144 Akula Drive} Newcastle TX 77872 badertscher526@noway1234.com {Lewie Badertscher} {2646 Lincoln Ellsworth Court} Sunnyville TX 77966 wall389@noway1234.com {Bert Wall} {10724 Whispering Birch Circle} Ketherine TX 77817 mundy@noway1234.com {Mundy Gobber} {8107 Posiedon Drive} Bendigo TX 77252 leuenberger839@noway1234.com {White Leuenberger} {11182 Brewster's Drive} Cairns TX 77386 landry648@noway1234.com {Georgene Landry} {11109 Knik Vista Street} Queenstown TX 77996 opten@noway1234.com {Opten Weyers} {2955 Lincoln Ellsworth Court} Houston TX 77826 todter961@noway1234.com {Russell Todter} {10945 Horizon Avenue} {Alice Springs} TX 77258 neemann25@noway1234.com {Sonny Neemann} {5966 Ruby Drive} Bathurst TX 77297 polson663@noway1234.com {Shelton Polson} {3482 Norway Drive} Broome TX 77839 wilson139@noway1234.com {Wilson Fox} {8738 Tamir Avenue} Austin TX 77279 halene394@noway1234.com {Halene Schutz} {4788 Short Street} {Coober Pedy} TX 77383 perry578@noway1234.com {Perry Bevard} {745 Eaglewood Drive} Galveston TX 77118 betty233@noway1234.com {Betty Weyers} {93 Winter Park Place} Sunnyville TX 77239 betty_thongkhamvilay@noway1234.com {Betty Thongkhamvilay} {9433 Breezewood Drive} Newcastle TX 77161 ruby636@noway1234.com {Givin Ruby} {6817 Coachman Circle} Hamilton TX 77112 c127@noway1234.com {C. Branting} {11537 Taurus Circle} {San Antonio} TX 77945 felix428@noway1234.com {Felix Luck} {3099 Orange Leaf Circle} {Port Hedland} TX 77321 blankenship139@noway1234.com {Blankenship Hamm} {7366 Graiff Street} Independence TX 77911 dorlen_brammann@noway1234.com {Dorlen Brammann} {11578 Griffin Road} {Mount Isa} TX 77817 polson351@noway1234.com {Nina Polson} {1918 Albatross Drive} Katy TX 77641 p_simer81@noway1234.com {P'simer Beethe} {3301 Belduque Court} Katy TX 77982 paden683@noway1234.com {Betty Paden} {941 Currin Circle} Bathurst TX 77843 joe53@noway1234.com {Joe Saunders} {10079 Sycamore Loop} Waco TX 77306 broady482@noway1234.com {Imogene Broady} {4980 Golden Eagle Court} Cairns TX 77655 dimple_niemann@noway1234.com {Dimple Niemann} {388 Snowberry Loop} Amarillo TX 77157 i@noway1234.com {I Rathbun} {2498 Mallard Lane} Austin TX 77312 reva543@noway1234.com {Reva Hendee} {11659 Huot Circle} Adelaide TX 77689 sybil_meyer@noway1234.com {Sybil Meyer} {7928 Caress Circle} Bourke TX 77521 frederick86@noway1234.com {Lee Frederick} {9485 Woodbury Court} {Tennant Creek} TX 77648 james665@noway1234.com {James Dumitru} {8166 Juneau Street} Amarillo TX 77002 montz491@noway1234.com {Frances Montz} {1168 Alpine Court} {Tennant Creek} TX 77167 vic803@noway1234.com {Vic Hothan} {7974 Farmer Place} Rockhampton TX 77154 everett_hippen@noway1234.com {Everett Hippen} {6947 Sunset View Circle} Star TX 77188 reynolds991@noway1234.com {Collins Reynolds} {6648 Laurie Circle} {San Felipe} TX 77748 carla_farley@noway1234.com {Carla Farley} {4556 Deborah Lane} {Mount Gambier} TX 77661 koehler620@noway1234.com {Emma Koehler} {8446 Unimak Circle} {Coober Pedy} TX 77571 halene859@noway1234.com {Halene Aufdenkamp} {6951 Crooked Tree Circle} OOdnadatta TX 77154 jochim727@noway1234.com {Goldie Jochim} {11246 Mary Anne Court} {Mount Gambier} TX 77250 lanspa377@noway1234.com {Sarah Lanspa} {6544 East 51st Avenue} {San Antonio} TX 77939 jack938@noway1234.com {Jack Reed} {195 Solar Drive} Hamilton TX 77004 clara639@noway1234.com {Clara Mason} {9253 Taiga Drive} {Port Augusta} TX 77762 hickman289@noway1234.com {Hickman Sackaly} {11565 Windrush Circle} {Mount Gambier} TX 77624 boats@noway1234.com {Boats Kaster} {8405 Woods Pointe Circle} {Alice Springs} TX 77779 spence751@noway1234.com {Spence Lawrence} {2481 Lear Court} Bathurst TX 77820 keedy813@noway1234.com {Delma Keedy} {8648 Sunflower Street} {Mount Gambier} TX 77049 theadore@noway1234.com {Theadore Masur} {1419 Alder Drive} Launceston TX 77518 chrastil251@noway1234.com {Robert Chrastil} {11405 Indian Chief Court} Brookshire TX 77226 soumpholphakdy184@noway1234.com {Tootsie Soumpholphakdy} {10662 London Circle} {Mount Isa} TX 77549 craft826@noway1234.com {Craft Taylor} {369 Irene Drive} {Mount Isa} TX 77925 erma48@noway1234.com {Erma Brown} {3156 Centurion Drive} Adelaide TX 77971 craft_neukirch@noway1234.com {Craft Neukirch} {2094 Barbara Street} {Mount Gambier} TX 77845 piersol191@noway1234.com {Woods Piersol} {3651 Runamuck Place} Houston TX 77338 somchay914@noway1234.com {Amanda Somchay} {9737 Prescot Circle} Sunnyville TX 77989 ramona@noway1234.com {Ramona Rickman} {3452 Hyannis Circle} Albury TX 77259 clara858@noway1234.com {Clara Bogle} {3645 Toilsome Hill Drive} Bathurst TX 77359 helen434@noway1234.com {Helen Lintz} {11157 Delong Drive} OOdnadatta TX 77440 van72@noway1234.com {Timothy Van} {8975 Derby Way} Launceston TX 77795 wheeler425@noway1234.com {Friend Wheeler} {3864 Colleen Circle} Sunnyville TX 77279 melvina631@noway1234.com {Melvina Pfister} {10839 Alatna Avenue} Townsville TX 77146 chittenden425@noway1234.com {Bern Chittenden} {6011 Ida Road} {Mount Gambier} TX 77518 seibert_bischoff@noway1234.com {Seibert Bischoff} {2162 Guam Avenue} Newcastle TX 77470 taylor710@noway1234.com {Sigman Taylor} {2329 Wilma Circle} Centerville TX 77490 mommens447@noway1234.com {Laky Mommens} {360 Rosebud Row Avenue} Ketherine TX 77274 pgtcl-2.8.0/tests/sqlite3.test000066400000000000000000000076471420313073400162740ustar00rootroot00000000000000if {[lsearch [namespace children] ::tcltest] == -1} { package require tcltest 2 namespace import -force ::tcltest::* } package require sqlite3 #tcltest::verbose 100 #tcltest::debug 100 set flist [glob -nocomplain -dir .. libpgtcl*[info sharedlibextension]] set flist [concat $flist [glob -nocomplain libpgtcl*[info sharedlibextension]]] if {[llength $flist] == 0} { puts "\nCan not find a shared lib file\n" exit } puts [list loading [lindex $flist end] ...] load [lindex $flist end] if [file exists $env(HOME)/.conninfo.tcl] { puts [list sourcing $env(HOME)/.conninfo.tcl ...] source $env(HOME)/.conninfo.tcl } elseif [file exists conninfo.tcl] { puts [list sourcing conninfo.tcl ...] source conninfo.tcl } if {[file exists sampledata.txt]} { set ::fprefix "." } elseif {[file exists tests/sampledata.txt]} { set ::fprefix "tests" } puts [list setting up $::fprefix/sampledata.tsv] catch {file delete $::fprefix/sampledata.tsv} set ifp [open $::fprefix/sampledata.txt r] set ofp [open $::fprefix/sampledata.tsv w] while {[gets $ifp line] >= 0} { puts $ofp [join $line "\t"] } close $ofp close $ifp puts [list running tests ...] # # # test pgtcl-sqlite3-1.1 {import postgresql result} -body { sqlite3 sqlite_conn :memory: set pg_conn [pg::connect -connhandle pgsql3 -connlist [array get ::conninfo]] $pg_conn select {select count(*) as count from Pg_class;} row { set pgtcl_count $row(count) } set res [$pg_conn exec "SELECT relname,relnamespace,reltype,relowner FROM Pg_class;"] set rows [ pg_sqlite sqlite_conn import_postgres_result $res -create pg_class \ -as {relname text relnamespace integer reltype integer relowner integer} \ -check -pkey {relname} ] sqlite_conn eval {select count(*) as count from pg_class;} row { set sqlite_count $row(count) } sqlite_conn close expr {$pgtcl_count == $sqlite_count} } -result 1 # test pgtcl-sqlite3-1.2 {import tabsep internal} -body { sqlite3 sqlite_conn :memory: sqlite_conn eval {create table pg_class (relname text primary key, relnamespace integer, reltype integer, relowner integer);} set i 0 foreach name {mike andy eric steve bob} { pg_sqlite sqlite_conn read_tabsep -row "$name\t[incr i]\t[incr i]\t[incr i]" \ -types {text integer integer integer} \ -sql "INSERT INTO pg_class (relname,relnamespace,reltype,relowner) values (?,?,?,?);" } sqlite_conn eval {select relname from pg_class;} row { lappend relname $row(relname) } sqlite_conn close lsort $relname } -result {andy bob eric mike steve} # test pgtcl-sqlite3-1.3 {import tabsep external} -body { sqlite3 sqlite_conn :memory: set fp [open $::fprefix/sampledata.tsv r] pg_sqlite sqlite_conn read_tabsep -file $fp \ -create contacts \ -as {email text fullname text addr text city text state text zip text} \ -pkey {email} sqlite_conn eval {select count(email) as count from contacts;} row { set sqlite_count $row(count) } sqlite_conn eval {select * from contacts where email = 'ethel@noway1234.com';} row { set result [list $row(fullname) $row(addr) $row(city) $row(state) $row(zip)] } sqlite_conn close concat $sqlite_count $result } -result {5000 {Ethel Hitzeman} {3724 Forest Village Drive} Rockhampton TX 77628} # test pgtcl-sqlite3-1.4 {import postgresql result with multiple keys} -body { sqlite3 sqlite_conn :memory: set pg_conn [pg::connect -connhandle pgsql4 -connlist [array get ::conninfo]] $pg_conn select {select count(*) as count from Pg_class;} row { set pgtcl_count $row(count) } set res [$pg_conn exec "SELECT relname,relnamespace,reltype,relowner FROM Pg_class;"] set rows [ pg_sqlite sqlite_conn import_postgres_result $res -create pg_class \ -as {relname text relnamespace integer reltype integer relowner integer} \ -check -pkey {relname relnamespace} ] sqlite_conn eval {select count(*) as count from pg_class;} row { set sqlite_count $row(count) } sqlite_conn close expr {$pgtcl_count == $sqlite_count} } -result 1 pgtcl-2.8.0/win/000077500000000000000000000000001420313073400134245ustar00rootroot00000000000000pgtcl-2.8.0/win/libpgtcl.dsp000066400000000000000000000222361420313073400157410ustar00rootroot00000000000000# Microsoft Developer Studio Project File - Name="libpgtcl3" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 CFG=libpgtcl3 - Win32 Debug Dynamic !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "libpgtcl3.mak". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "libpgtcl3.mak" CFG="libpgtcl3 - Win32 Debug Dynamic" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "libpgtcl3 - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE "libpgtcl3 - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE "libpgtcl3 - Win32 Debug Dynamic" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE "libpgtcl3 - Win32 Release Dynamic" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 1 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe MTL=midl.exe RSC=rc.exe !IF "$(CFG)" == "libpgtcl3 - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "Release" # PROP BASE Intermediate_Dir "Release" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "Release" # PROP Intermediate_Dir "Release" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBPGTCL3_EXPORTS" /YX /FD /c # ADD CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBPGTCL3_EXPORTS" /D "USE_TCL_STUBS" /YX /FD /c # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x409 /d "NDEBUG" # ADD RSC /l 0x409 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib tclstub82.lib libpq.lib wsock32.lib MSVCRT.lib /nologo /dll /incremental:yes /machine:I386 !ELSEIF "$(CFG)" == "libpgtcl3 - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "Debug" # PROP BASE Intermediate_Dir "Debug" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "Debug" # PROP Intermediate_Dir "Debug" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBPGTCL3_EXPORTS" /YX /FD /GZ /c # ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBPGTCL3_EXPORTS" /D "USE_TCL_STUBS" /YX /FD /GZ /c # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x409 /d "_DEBUG" # ADD RSC /l 0x409 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib tclstub82.lib libpq.lib wsock32.lib MSVCRT.lib /nologo /dll /debug /machine:I386 /pdbtype:sept !ELSEIF "$(CFG)" == "libpgtcl3 - Win32 Debug Dynamic" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "libpgtcl3___Win32_Debug_Dynamic" # PROP BASE Intermediate_Dir "libpgtcl3___Win32_Debug_Dynamic" # PROP BASE Ignore_Export_Lib 0 # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "Debug_Dynamic" # PROP Intermediate_Dir "Debug_Dynamic" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBPGTCL3_EXPORTS" /D "USE_TCL_STUBS" /YX /FD /GZ /c # ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBPGTCL3_EXPORTS" /D "USE_TCL_STUBS" /YX /FD /GZ /c # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x409 /d "_DEBUG" # ADD RSC /l 0x409 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib tclstub82.lib libpq.lib wsock32.lib MSVCRT.lib /nologo /dll /debug /machine:I386 /pdbtype:sept # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib tclstub82.lib libpqdll.lib wsock32.lib MSVCRT.lib /nologo /dll /debug /machine:I386 /pdbtype:sept !ELSEIF "$(CFG)" == "libpgtcl3 - Win32 Release Dynamic" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "libpgtcl3___Win32_Release_Dynamic" # PROP BASE Intermediate_Dir "libpgtcl3___Win32_Release_Dynamic" # PROP BASE Ignore_Export_Lib 0 # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "Release_Dynamic" # PROP Intermediate_Dir "Release_Dynamic" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBPGTCL3_EXPORTS" /D "USE_TCL_STUBS" /YX /FD /c # ADD CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBPGTCL3_EXPORTS" /D "USE_TCL_STUBS" /YX /FD /c # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x409 /d "NDEBUG" # ADD RSC /l 0x409 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib tclstub82.lib libpq.lib wsock32.lib MSVCRT.lib /nologo /dll /incremental:yes /machine:I386 # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib tclstub82.lib libpqdll.lib wsock32.lib MSVCRT.lib /nologo /dll /incremental:yes /machine:I386 !ENDIF # Begin Target # Name "libpgtcl3 - Win32 Release" # Name "libpgtcl3 - Win32 Debug" # Name "libpgtcl3 - Win32 Debug Dynamic" # Name "libpgtcl3 - Win32 Release Dynamic" # Begin Group "Source Files" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" # Begin Source File SOURCE="..\..\Documents and Settings\bschwarz\My Documents\C\libpgtcl\generic\pgtcl.c" !IF "$(CFG)" == "libpgtcl3 - Win32 Release" !ELSEIF "$(CFG)" == "libpgtcl3 - Win32 Debug" !ELSEIF "$(CFG)" == "libpgtcl3 - Win32 Debug Dynamic" # PROP Intermediate_Dir "Debug_Dynamic" !ELSEIF "$(CFG)" == "libpgtcl3 - Win32 Release Dynamic" # PROP Intermediate_Dir "Release_Dynamic" !ENDIF # End Source File # Begin Source File SOURCE="..\..\Documents and Settings\bschwarz\My Documents\C\libpgtcl\generic\pgtclCmds.c" !IF "$(CFG)" == "libpgtcl3 - Win32 Release" !ELSEIF "$(CFG)" == "libpgtcl3 - Win32 Debug" !ELSEIF "$(CFG)" == "libpgtcl3 - Win32 Debug Dynamic" # PROP Intermediate_Dir "Debug_Dynamic" !ELSEIF "$(CFG)" == "libpgtcl3 - Win32 Release Dynamic" # PROP Intermediate_Dir "Release_Dynamic" !ENDIF # End Source File # Begin Source File SOURCE="..\..\Documents and Settings\bschwarz\My Documents\C\libpgtcl\generic\pgtclId.c" !IF "$(CFG)" == "libpgtcl3 - Win32 Release" !ELSEIF "$(CFG)" == "libpgtcl3 - Win32 Debug" !ELSEIF "$(CFG)" == "libpgtcl3 - Win32 Debug Dynamic" # PROP Intermediate_Dir "Debug_Dynamic" !ELSEIF "$(CFG)" == "libpgtcl3 - Win32 Release Dynamic" # PROP Intermediate_Dir "Release_Dynamic" !ENDIF # End Source File # End Group # Begin Group "Header Files" # PROP Default_Filter "h;hpp;hxx;hm;inl" # Begin Source File SOURCE="..\..\Documents and Settings\bschwarz\My Documents\C\libpgtcl\generic\libpgtcl.h" # End Source File # Begin Source File SOURCE="..\..\Documents and Settings\bschwarz\My Documents\C\libpgtcl\generic\pgtclCmds.h" # End Source File # Begin Source File SOURCE="..\..\Documents and Settings\bschwarz\My Documents\C\libpgtcl\generic\pgtclId.h" # End Source File # End Group # Begin Group "Resource Files" # PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" # End Group # End Target # End Project pgtcl-2.8.0/win/libpgtcl.dsw000066400000000000000000000010351420313073400157420ustar00rootroot00000000000000Microsoft Developer Studio Workspace File, Format Version 6.00 # WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! ############################################################################### Project: "libpgtcl3"=.\libpgtcl3.dsp - Package Owner=<4> Package=<5> {{{ }}} Package=<4> {{{ }}} ############################################################################### Global: Package=<5> {{{ }}} Package=<3> {{{ }}} ############################################################################### pgtcl-2.8.0/win/makefile.vc000066400000000000000000000327671420313073400155520ustar00rootroot00000000000000# makefile.vc -- -*- Makefile -*- # # Microsoft Visual C++ makefile for use with nmake.exe v1.62+ (VC++ 5.0+) # # This makefile is based upon the Tcl 8.4 Makefile.vc and modified to # make it suitable as a general package makefile. Look for the word EDIT # which marks sections that may need modification. As a minumum you will # need to change the PROJECT, DOTVERSION and DLLOBJS variables to values # relevant to your package. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # # Copyright (c) 1995-1996 Sun Microsystems, Inc. # Copyright (c) 1998-2000 Ajuba Solutions. # Copyright (c) 2001 ActiveState Corporation. # Copyright (c) 2001-2002 David Gravereaux. # Copyright (c) 2003 Pat Thoyts # #------------------------------------------------------------------------- # RCS: @(#)$Id$ #------------------------------------------------------------------------- !if !defined(MSDEVDIR) && !defined(MSVCDIR) && !defined(VCToolkitInstallDir) MSG = ^ You will need to run vcvars32.bat from Developer Studio, first, to setup^ the environment. Jump to this line to read the new instructions. !error $(MSG) !endif #------------------------------------------------------------------------------ # HOW TO USE this makefile: # # 1) It is now necessary to have %MSVCDir% set in the environment. This is # used as a check to see if vcvars32.bat had been run prior to running # nmake or during the installation of Microsoft Visual C++, MSVCDir had # been set globally and the PATH adjusted. Either way is valid. # # You'll need to run vcvars32.bat contained in the MsDev's vc(98)/bin # directory to setup the proper environment, if needed, for your current # setup. This is a needed bootstrap requirement and allows the swapping of # different environments to be easier. # # 2) To use the Platform SDK (not expressly needed), run setenv.bat after # vcvars32.bat according to the instructions for it. This can also turn on # the 64-bit compiler, if your SDK has it. # # 3) Targets are: # all -- Builds everything. # -- Builds the project (eg: nmake sample) # test -- Builds and runs the test suite. # install -- Installs the built binaries and libraries to $(INSTALLDIR) # in an appropriate subdirectory. # clean/realclean/distclean -- varying levels of cleaning. # # 4) Macros usable on the commandline: # INSTALLDIR= # Sets where to install Tcl from the built binaries. # C:\Progra~1\Tcl is assumed when not specified. # # OPTS=static,msvcrt,staticpkg,threads,symbols,profile,loimpact,none # Sets special options for the core. The default is for none. # Any combination of the above may be used (comma separated). # 'none' will over-ride everything to nothing. # # static = Builds a static library of the core instead of a # dll. The shell will be static (and large), as well. # msvcrt = Effects the static option only to switch it from # using libcmt(d) as the C runtime [by default] to # msvcrt(d). This is useful for static embedding # support. # staticpkg = Effects the static option only to switch # tclshXX.exe to have the dde and reg extension linked # inside it. # threads = Turns on full multithreading support. # thrdalloc = Use the thread allocator (shared global free pool). # symbols = Adds symbols for step debugging. # profile = Adds profiling hooks. Map file is assumed. # loimpact = Adds a flag for how NT treats the heap to keep memory # in use, low. This is said to impact alloc performance. # # STATS=memdbg,compdbg,none # Sets optional memory and bytecode compiler debugging code added # to the core. The default is for none. Any combination of the # above may be used (comma separated). 'none' will over-ride # everything to nothing. # # memdbg = Enables the debugging memory allocator. # compdbg = Enables byte compilation logging. # # MACHINE=(IX86|IA64|ALPHA) # Set the machine type used for the compiler, linker, and # resource compiler. This hook is needed to tell the tools # when alternate platforms are requested. IX86 is the default # when not specified. # # TMP_DIR= # OUT_DIR= # Hooks to allow the intermediate and output directories to be # changed. $(OUT_DIR) is assumed to be # $(BINROOT)\(Release|Debug) based on if symbols are requested. # $(TMP_DIR) will de $(OUT_DIR)\ by default. # # TESTPAT= # Reads the tests requested to be run from this file. # # CFG_ENCODING=encoding # name of encoding for configuration information. Defaults # to cp1252 # # 5) Examples: # # Basic syntax of calling nmake looks like this: # nmake [-nologo] -f makefile.vc [target|macrodef [target|macrodef] [...]] # # Standard (no frills) # c:\tcl_src\win\>c:\progra~1\micros~1\vc98\bin\vcvars32.bat # Setting environment for using Microsoft Visual C++ tools. # c:\tcl_src\win\>nmake -f makefile.vc all # c:\tcl_src\win\>nmake -f makefile.vc install INSTALLDIR=c:\progra~1\tcl # # Building for Win64 # c:\tcl_src\win\>c:\progra~1\micros~1\vc98\bin\vcvars32.bat # Setting environment for using Microsoft Visual C++ tools. # c:\tcl_src\win\>c:\progra~1\platfo~1\setenv.bat /pre64 /RETAIL # Targeting Windows pre64 RETAIL # c:\tcl_src\win\>nmake -f makefile.vc MACHINE=IA64 # #------------------------------------------------------------------------------ #============================================================================== ############################################################################### #------------------------------------------------------------------------------ !if !exist("makefile.vc") MSG = ^ You must run this makefile only from the directory it is in.^ Please `cd` to its location first. !error $(MSG) !endif #------------------------------------------------------------------------- # Project specific information (EDIT) # # You should edit this with the name and version of your project. This # information is used to generate the name of the package library and # it's install location. # # For example, the sample extension is going to build sample04.dll and # would install it into $(INSTALLDIR)\lib\sample04 # # You need to specify the object files that need to be linked into your # binary here. # #------------------------------------------------------------------------- PROJECT = sample !include "rules.vc" DOTVERSION = 0.5 VERSION = $(DOTVERSION:.=) STUBPREFIX = $(PROJECT)stub DLLOBJS = \ $(TMP_DIR)\tclsample.obj \ $(TMP_DIR)\sample.obj #------------------------------------------------------------------------- # Target names and paths ( shouldn't need changing ) #------------------------------------------------------------------------- BINROOT = . ROOT = .. PRJIMPLIB = $(OUT_DIR)\$(PROJECT)$(VERSION)$(SUFX).lib PRJLIBNAME = $(PROJECT)$(VERSION)$(SUFX).$(EXT) PRJLIB = $(OUT_DIR)\$(PRJLIBNAME) PRJSTUBLIBNAME = $(STUBPREFIX)$(VERSION).lib PRJSTUBLIB = $(OUT_DIR)\$(PRJSTUBLIBNAME) ### Make sure we use backslash only. PRJ_INSTALL_DIR = $(_INSTALLDIR)\$(PROJECT)$(DOTVERSION) LIB_INSTALL_DIR = $(PRJ_INSTALL_DIR) BIN_INSTALL_DIR = $(PRJ_INSTALL_DIR) DOC_INSTALL_DIR = $(PRJ_INSTALL_DIR) SCRIPT_INSTALL_DIR = $(PRJ_INSTALL_DIR) INCLUDE_INSTALL_DIR = $(_TCLDIR)\include ### The following paths CANNOT have spaces in them. GENERICDIR = $(ROOT)\generic WINDIR = $(ROOT)\win LIBDIR = $(ROOT)\library DOCDIR = $(ROOT)\doc TOOLSDIR = $(ROOT)\tools COMPATDIR = $(ROOT)\compat #--------------------------------------------------------------------- # Compile flags #--------------------------------------------------------------------- !if !$(DEBUG) !if $(OPTIMIZING) ### This cranks the optimization level to maximize speed cdebug = -O2 -Op -Gs !else cdebug = !endif !else if "$(MACHINE)" == "IA64" ### Warnings are too many, can't support warnings into errors. cdebug = -Z7 -Od -GZ !else cdebug = -Z7 -WX -Od -GZ !endif ### Declarations common to all compiler options cflags = -nologo -c -W3 -YX -Fp$(TMP_DIR)^\ !if $(PENT_0F_ERRATA) cflags = $(cflags) -QI0f !endif !if $(ITAN_B_ERRATA) cflags = $(cflags) -QIA64_Bx !endif !if $(MSVCRT) !if $(DEBUG) crt = -MDd !else crt = -MD !endif !else !if $(DEBUG) crt = -MTd !else crt = -MT !endif !endif INCLUDES = $(TCL_INCLUDES) -I"$(WINDIR)" -I"$(GENERICDIR)" BASE_CLFAGS = $(cflags) $(cdebug) $(crt) $(INCLUDES) CON_CFLAGS = $(cflags) $(cdebug) $(crt) -DCONSOLE TCL_CFLAGS = -DUSE_TCL_STUBS -DPACKAGE_VERSION="\"$(DOTVERSION)\"" \ $(BASE_CLFAGS) $(OPTDEFINES) #--------------------------------------------------------------------- # Link flags #--------------------------------------------------------------------- !if $(DEBUG) ldebug = -debug:full -debugtype:cv !else ldebug = -release -opt:ref -opt:icf,3 !endif ### Declarations common to all linker options lflags = -nologo -machine:$(MACHINE) $(ldebug) !if $(PROFILE) lflags = $(lflags) -profile !endif !if $(ALIGN98_HACK) && !$(STATIC_BUILD) ### Align sections for PE size savings. lflags = $(lflags) -opt:nowin98 !else if !$(ALIGN98_HACK) && $(STATIC_BUILD) ### Align sections for speed in loading by choosing the virtual page size. lflags = $(lflags) -align:4096 !endif !if $(LOIMPACT) lflags = $(lflags) -ws:aggressive !endif dlllflags = $(lflags) -dll conlflags = $(lflags) -subsystem:console guilflags = $(lflags) -subsystem:windows baselibs = $(TCLSTUBLIB) #--------------------------------------------------------------------- # TclTest flags #--------------------------------------------------------------------- !IF "$(TESTPAT)" != "" TESTFLAGS = $(TESTFLAGS) -file $(TESTPAT) !ENDIF #--------------------------------------------------------------------- # Project specific targets (EDIT) #--------------------------------------------------------------------- all: setup $(PROJECT) $(PROJECT): setup $(PRJLIB) install: install-binaries install-libraries install-docs # Tests need to ensure we load the right dll file we # have to handle the output differently on Win9x. # !if "$(OS)" == "Windows_NT" || "$(MSVCDIR)" == "IDE" test: setup $(PROJECT) set TCL_LIBRARY=$(ROOT)/library $(TCLSH) << load $(PRJLIB:\=/) cd "$(ROOT)/tests" set argv "$(TESTFLAGS)" source all.tcl << !else test: setup $(PROJECT) echo Please wait while the test results are collected set TCL_LIBRARY=$(ROOT)/library $(TCLSH) << >tests.log load $(PRJLIB:\=/) cd "$(ROOT)/tests" set argv "$(TESTFLAGS)" source all.tcl << type tests.log | more !endif setup: @if not exist $(OUT_DIR)\nul mkdir $(OUT_DIR) @if not exist $(TMP_DIR)\nul mkdir $(TMP_DIR) $(PRJLIB): $(DLLOBJS) $(link32) $(dlllflags) -out:$@ $(baselibs) @<< $** << -@del $*.exp $(PRJSTUBLIB): $(PRJSTUBOBJS) $(lib32) -nologo -out:$@ $(PRJSTUBOBJS) #--------------------------------------------------------------------- # Implicit rules #--------------------------------------------------------------------- {$(WINDIR)}.c{$(TMP_DIR)}.obj:: $(cc32) $(TCL_CFLAGS) -DBUILD_$(PROJECT) -Fo$(TMP_DIR)\ @<< $< << {$(GENERICDIR)}.c{$(TMP_DIR)}.obj:: $(cc32) $(TCL_CFLAGS) -DBUILD_$(PROJECT) -Fo$(TMP_DIR)\ @<< $< << {$(COMPATDIR)}.c{$(TMP_DIR)}.obj:: $(cc32) $(TCL_CFLAGS) -DBUILD_$(PROJECT) -Fo$(TMP_DIR)\ @<< $< << {$(WINDIR)}.rc{$(TMP_DIR)}.res: $(rc32) -fo $@ -r -i "$(GENERICDIR)" -D__WIN32__ \ !if $(DEBUG) -d DEBUG \ !endif !if $(TCL_THREADS) -d TCL_THREADS \ !endif !if $(STATIC_BUILD) -d STATIC_BUILD \ !endif $< .SUFFIXES: .SUFFIXES:.c .rc #--------------------------------------------------------------------- # Installation. (EDIT) # # You may need to modify this section to reflect the final distribution # of your files and possibly to generate documentation. # #--------------------------------------------------------------------- install-binaries: @echo Installing binaries to '$(SCRIPT_INSTALL_DIR)' @if not exist "$(SCRIPT_INSTALL_DIR)" mkdir "$(SCRIPT_INSTALL_DIR)" @$(CPY) $(PRJLIB) "$(SCRIPT_INSTALL_DIR)" >NUL ### Automatic creation of pkgIndex #install-libraries: # @echo Installing library files to '$(SCRIPT_INSTALL_DIR)' # @if exist $(LIBDIR) $(CPY) $(LIBDIR)\*.tcl "$(SCRIPT_INSTALL_DIR)" # @echo cd "$(SCRIPT_INSTALL_DIR:\=/)" ; pkg_mkIndex . | $(TCLSH) ### Manual creation of pkgIndex ### Normally the ifneeded command would be: ### package ifneeded $(PROJECT) $(DOTVERSION) \ ### [list load [file join $$dir $(PROJECT)$(VERSION).$(EXT)]] ### but this project has been named oddly. It has Sample_Init but provides ### the Tclsha1 package. install-libraries: @echo Installing libraries to '$(SCRIPT_INSTALL_DIR)' @if exist $(LIBDIR) $(CPY) $(LIBDIR)\*.tcl "$(SCRIPT_INSTALL_DIR)" @echo Installing package index in '$(SCRIPT_INSTALL_DIR)' @type << >"$(SCRIPT_INSTALL_DIR)\pkgIndex.tcl" # Hand-crafted pkgIndex.tcl package ifneeded Tclsha1 $(DOTVERSION) [list load [file join $$dir $(PROJECT)$(VERSION).$(EXT)] Sample] << install-docs: @echo Installing documentation files to '$(DOC_INSTALL_DIR)' @if exist $(DOCDIR) $(CPY) $(DOCDIR)\*.n "$(DOC_INSTALL_DIR)" #--------------------------------------------------------------------- # Clean up #--------------------------------------------------------------------- clean: @if exist $(TMP_DIR)\nul $(RMDIR) $(TMP_DIR) @if exist $(WINDIR)\version.vc del $(WINDIR)\version.vc realclean: clean @if exist $(OUT_DIR)\nul $(RMDIR) $(OUT_DIR) distclean: realclean @if exist $(WINDIR)\nmakehlp.exe del $(WINDIR)\nmakehlp.exe @if exist $(WINDIR)\nmakehlp.obj del $(WINDIR)\nmakehlp.obj pgtcl-2.8.0/win/nmakehlp.c000066400000000000000000000254761420313073400154050ustar00rootroot00000000000000/* ---------------------------------------------------------------------------- * nmakehlp.c -- * * This is used to fix limitations within nmake and the environment. * * Copyright (c) 2002 by David Gravereaux. * Copyright (c) 2003 by Patrick Thoyts * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * ---------------------------------------------------------------------------- * RCS: @(#) $Id$ * ---------------------------------------------------------------------------- */ #include #include #pragma comment (lib, "user32.lib") #pragma comment (lib, "kernel32.lib") /* protos */ int CheckForCompilerFeature (const char *option); int CheckForLinkerFeature (const char *option); int IsIn (const char *string, const char *substring); DWORD WINAPI ReadFromPipe (LPVOID args); int GetVersionFromHeader(const char *tclh, const char *tkh); /* globals */ typedef struct { HANDLE pipe; char buffer[1000]; } pipeinfo; pipeinfo Out = {INVALID_HANDLE_VALUE, '\0'}; pipeinfo Err = {INVALID_HANDLE_VALUE, '\0'}; /* exitcodes: 0 == no, 1 == yes, 2 == error */ int main (int argc, char *argv[]) { char msg[300]; DWORD dwWritten; int chars; if (argc > 1 && *argv[1] == '-') { switch (*(argv[1]+1)) { case 'c': if (argc != 3) { chars = wsprintf(msg, "usage: %s -c \n" "Tests for whether cl.exe supports an option\n" "exitcodes: 0 == no, 1 == yes, 2 == error\n", argv[0]); WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, chars, &dwWritten, NULL); return 2; } return CheckForCompilerFeature(argv[2]); case 'l': if (argc != 3) { chars = wsprintf(msg, "usage: %s -l \n" "Tests for whether link.exe supports an option\n" "exitcodes: 0 == no, 1 == yes, 2 == error\n", argv[0]); WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, chars, &dwWritten, NULL); return 2; } return CheckForLinkerFeature(argv[2]); case 'f': if (argc == 2) { chars = wsprintf(msg, "usage: %s -f \n" "Find a substring within another\n" "exitcodes: 0 == no, 1 == yes, 2 == error\n", argv[0]); WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, chars, &dwWritten, NULL); return 2; } else if (argc == 3) { /* if the string is blank, there is no match */ return 0; } else { return IsIn(argv[2], argv[3]); } case 'v': if (argc != 4) { chars = wsprintf(msg, "usage: %s -v \n" "Search for versions from the tcl and tk headers.", argv[0]); WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, chars, &dwWritten, NULL); return 0; } return GetVersionFromHeader(argv[2], argv[3]); } } chars = wsprintf(msg, "usage: %s -c|-l|-f ...\n" "This is a little helper app to equalize shell differences between WinNT and\n" "Win9x and get nmake.exe to accomplish its job.\n", argv[0]); WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, chars, &dwWritten, NULL); return 2; } int CheckForCompilerFeature (const char *option) { STARTUPINFO si; PROCESS_INFORMATION pi; SECURITY_ATTRIBUTES sa; DWORD threadID; char msg[300]; BOOL ok; HANDLE hProcess, h, pipeThreads[2]; char cmdline[100]; hProcess = GetCurrentProcess(); ZeroMemory(&pi, sizeof(PROCESS_INFORMATION)); ZeroMemory(&si, sizeof(STARTUPINFO)); si.cb = sizeof(STARTUPINFO); si.dwFlags = STARTF_USESTDHANDLES; si.hStdInput = INVALID_HANDLE_VALUE; ZeroMemory(&sa, sizeof(SECURITY_ATTRIBUTES)); sa.nLength = sizeof(SECURITY_ATTRIBUTES); sa.lpSecurityDescriptor = NULL; sa.bInheritHandle = FALSE; /* create a non-inheritible pipe. */ CreatePipe(&Out.pipe, &h, &sa, 0); /* dupe the write side, make it inheritible, and close the original. */ DuplicateHandle(hProcess, h, hProcess, &si.hStdOutput, 0, TRUE, DUPLICATE_SAME_ACCESS | DUPLICATE_CLOSE_SOURCE); /* Same as above, but for the error side. */ CreatePipe(&Err.pipe, &h, &sa, 0); DuplicateHandle(hProcess, h, hProcess, &si.hStdError, 0, TRUE, DUPLICATE_SAME_ACCESS | DUPLICATE_CLOSE_SOURCE); /* base command line */ strcpy(cmdline, "cl.exe -nologo -c -TC -Fdtemp "); /* append our option for testing */ strcat(cmdline, option); /* filename to compile, which exists, but is nothing and empty. */ strcat(cmdline, " nul"); ok = CreateProcess( NULL, /* Module name. */ cmdline, /* Command line. */ NULL, /* Process handle not inheritable. */ NULL, /* Thread handle not inheritable. */ TRUE, /* yes, inherit handles. */ DETACHED_PROCESS, /* No console for you. */ NULL, /* Use parent's environment block. */ NULL, /* Use parent's starting directory. */ &si, /* Pointer to STARTUPINFO structure. */ &pi); /* Pointer to PROCESS_INFORMATION structure. */ if (!ok) { DWORD err = GetLastError(); int chars = wsprintf(msg, "Tried to launch: \"%s\", but got error [%u]: ", cmdline, err); FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_MAX_WIDTH_MASK, 0L, err, 0, (LPVOID) &msg[chars], (300-chars), 0); WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, strlen(msg), &err, NULL); return 2; } /* close our references to the write handles that have now been inherited. */ CloseHandle(si.hStdOutput); CloseHandle(si.hStdError); WaitForInputIdle(pi.hProcess, 5000); CloseHandle(pi.hThread); /* start the pipe reader threads. */ pipeThreads[0] = CreateThread(NULL, 0, ReadFromPipe, &Out, 0, &threadID); pipeThreads[1] = CreateThread(NULL, 0, ReadFromPipe, &Err, 0, &threadID); /* block waiting for the process to end. */ WaitForSingleObject(pi.hProcess, INFINITE); CloseHandle(pi.hProcess); /* clean up temporary files before returning */ DeleteFile("temp.idb"); DeleteFile("temp.pdb"); /* wait for our pipe to get done reading, should it be a little slow. */ WaitForMultipleObjects(2, pipeThreads, TRUE, 500); CloseHandle(pipeThreads[0]); CloseHandle(pipeThreads[1]); /* look for the commandline warning code in both streams. */ return !(strstr(Out.buffer, "D4002") != NULL || strstr(Err.buffer, "D4002") != NULL); } int CheckForLinkerFeature (const char *option) { STARTUPINFO si; PROCESS_INFORMATION pi; SECURITY_ATTRIBUTES sa; DWORD threadID; char msg[300]; BOOL ok; HANDLE hProcess, h, pipeThreads[2]; char cmdline[100]; hProcess = GetCurrentProcess(); ZeroMemory(&pi, sizeof(PROCESS_INFORMATION)); ZeroMemory(&si, sizeof(STARTUPINFO)); si.cb = sizeof(STARTUPINFO); si.dwFlags = STARTF_USESTDHANDLES; si.hStdInput = INVALID_HANDLE_VALUE; ZeroMemory(&sa, sizeof(SECURITY_ATTRIBUTES)); sa.nLength = sizeof(SECURITY_ATTRIBUTES); sa.lpSecurityDescriptor = NULL; sa.bInheritHandle = TRUE; /* create a non-inheritible pipe. */ CreatePipe(&Out.pipe, &h, &sa, 0); /* dupe the write side, make it inheritible, and close the original. */ DuplicateHandle(hProcess, h, hProcess, &si.hStdOutput, 0, TRUE, DUPLICATE_SAME_ACCESS | DUPLICATE_CLOSE_SOURCE); /* Same as above, but for the error side. */ CreatePipe(&Err.pipe, &h, &sa, 0); DuplicateHandle(hProcess, h, hProcess, &si.hStdError, 0, TRUE, DUPLICATE_SAME_ACCESS | DUPLICATE_CLOSE_SOURCE); /* base command line */ strcpy(cmdline, "link.exe -nologo "); /* append our option for testing */ strcat(cmdline, option); /* filename to compile, which exists, but is nothing and empty. */ // strcat(cmdline, " nul"); ok = CreateProcess( NULL, /* Module name. */ cmdline, /* Command line. */ NULL, /* Process handle not inheritable. */ NULL, /* Thread handle not inheritable. */ TRUE, /* yes, inherit handles. */ DETACHED_PROCESS, /* No console for you. */ NULL, /* Use parent's environment block. */ NULL, /* Use parent's starting directory. */ &si, /* Pointer to STARTUPINFO structure. */ &pi); /* Pointer to PROCESS_INFORMATION structure. */ if (!ok) { DWORD err = GetLastError(); int chars = wsprintf(msg, "Tried to launch: \"%s\", but got error [%u]: ", cmdline, err); FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_MAX_WIDTH_MASK, 0L, err, 0, (LPVOID) &msg[chars], (300-chars), 0); WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, strlen(msg), &err, NULL); return 2; } /* close our references to the write handles that have now been inherited. */ CloseHandle(si.hStdOutput); CloseHandle(si.hStdError); WaitForInputIdle(pi.hProcess, 5000); CloseHandle(pi.hThread); /* start the pipe reader threads. */ pipeThreads[0] = CreateThread(NULL, 0, ReadFromPipe, &Out, 0, &threadID); pipeThreads[1] = CreateThread(NULL, 0, ReadFromPipe, &Err, 0, &threadID); /* block waiting for the process to end. */ WaitForSingleObject(pi.hProcess, INFINITE); CloseHandle(pi.hProcess); /* wait for our pipe to get done reading, should it be a little slow. */ WaitForMultipleObjects(2, pipeThreads, TRUE, 500); CloseHandle(pipeThreads[0]); CloseHandle(pipeThreads[1]); /* look for the commandline warning code in the stderr stream. */ return !(strstr(Out.buffer, "LNK1117") != NULL || strstr(Err.buffer, "LNK1117") != NULL); } DWORD WINAPI ReadFromPipe (LPVOID args) { pipeinfo *pi = (pipeinfo *) args; char *lastBuf = pi->buffer; DWORD dwRead; BOOL ok; again: ok = ReadFile(pi->pipe, lastBuf, 25, &dwRead, 0L); if (!ok || dwRead == 0) { CloseHandle(pi->pipe); return 0; } lastBuf += dwRead; goto again; return 0; /* makes the compiler happy */ } int IsIn (const char *string, const char *substring) { return (strstr(string, substring) != NULL); } static double ReadVersionFromHeader(const char *file, const char *macro) { double d = 0.0; CHAR szBuffer[100]; LPSTR p; DWORD cbBuffer = 100; FILE *fp = fopen(file, "r"); if (fp != NULL) { while (fgets(szBuffer, cbBuffer, fp) != NULL) { if ((p = strstr(szBuffer, macro)) != NULL) { while (*p && !isdigit(*p)) ++p; d = strtod(p, NULL); break; } } fclose(fp); } return d; } int GetVersionFromHeader(const char *tclh, const char *tkh) { double dTcl = 0.0, dTk = 0.0; if (tclh != NULL) dTcl = ReadVersionFromHeader(tclh, "TCL_VERSION"); if (tkh != NULL) dTk = ReadVersionFromHeader(tkh, "TK_VERSION"); if (dTcl > 0 || dTk > 0) { FILE *ofp = fopen("version.vc", "w"); if (dTcl > 0) fprintf(ofp, "TCL_DOTVERSION\t= %0.1f\nTCL_VERSION\t= %u\n", dTcl, (int)(dTcl * 10.0)); if (dTk > 0) fprintf(ofp, "TK_DOTVERSION\t= %0.1f\nTK_VERSION\t= %u\n", dTk, (int)(dTk * 10.0)); fclose(ofp); return 0; } return 1; } pgtcl-2.8.0/win/rules.vc000066400000000000000000000244751420313073400151240ustar00rootroot00000000000000#------------------------------------------------------------------------------ # rules.vc -- # # Microsoft Visual C++ makefile include for decoding the commandline # macros. This file does not need editing to build Tcl. # # This version is modified from the Tcl source version to support # building extensions using nmake. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # # Copyright (c) 2001-2002 David Gravereaux. # Copyright (c) 2003 Patrick Thoyts # #------------------------------------------------------------------------------ # RCS: @(#) $Id$ #------------------------------------------------------------------------------ !ifndef _RULES_VC _RULES_VC = 1 cc32 = $(CC) # built-in default. link32 = link lib32 = lib rc32 = $(RC) # built-in default. !ifndef INSTALLDIR ### Assume the normal default. _INSTALLDIR = C:\Program Files\Tcl !else ### Fix the path separators. _INSTALLDIR = $(INSTALLDIR:/=\) !endif !ifndef MACHINE MACHINE = IX86 !endif !ifndef CFG_ENCODING CFG_ENCODING = \"cp1252\" !endif #---------------------------------------------------------- # Set the proper copy method to avoid overwrite questions # to the user when copying files and selecting the right # "delete all" method. #---------------------------------------------------------- !if "$(OS)" == "Windows_NT" RMDIR = rmdir /S /Q !if ![ver | find "4.0" > nul] CPY = echo y | xcopy /i !else CPY = xcopy /i /y !endif !else CPY = xcopy /i RMDIR = deltree /Y !endif !message =============================================================================== #---------------------------------------------------------- # build the helper app we need to overcome nmake's limiting # environment. #---------------------------------------------------------- !if !exist(nmakehlp.exe) !if [$(cc32) -nologo -ML nmakehlp.c -link -subsystem:console > nul] !endif !endif #---------------------------------------------------------- # Test for compiler features #---------------------------------------------------------- ### test for optimizations !if [nmakehlp -c -Otip] !message *** Compiler has 'Optimizations' OPTIMIZING = 1 !else !message *** Compiler doesn't have 'Optimizations' OPTIMIZING = 0 !endif !if "$(MACHINE)" == "IX86" ### test for pentium errata !if [nmakehlp -c -QI0f] !message *** Compiler has 'Pentium 0x0f fix' PENT_0F_ERRATA = 1 !else !message *** Compiler doesn't have 'Pentium 0x0f fix' PENT_0F_ERRATA = 0 !endif ### test for -align:4096, when align:512 will do. !if [nmakehlp -l -opt:nowin98] !message *** Linker has 'Win98 alignment problem' ALIGN98_HACK = 1 !else !message *** Linker doesn't have 'Win98 alignment problem' ALIGN98_HACK = 0 !endif !else PENT_0F_ERRATA = 0 ALIGN98_HACK = 0 !endif !if "$(MACHINE)" == "IA64" ### test for Itanium errata !if [nmakehlp -c -QIA64_Bx] !message *** Compiler has 'B-stepping errata workarounds' ITAN_B_ERRATA = 1 !else !message *** Compiler doesn't have 'B-stepping errata workarounds' ITAN_B_ERRATA = 0 !endif !else ITAN_B_ERRATA = 0 !endif #---------------------------------------------------------- # Decode the options requested. #---------------------------------------------------------- !if "$(OPTS)" == "" || [nmakehlp -f "$(OPTS)" "none"] STATIC_BUILD = 0 TCL_THREADS = 0 DEBUG = 0 PROFILE = 0 MSVCRT = 0 LOIMPACT = 0 TCL_USE_STATIC_PACKAGES = 0 USE_THREAD_ALLOC = 0 !else !if [nmakehlp -f $(OPTS) "static"] !message *** Doing static STATIC_BUILD = 1 !else STATIC_BUILD = 0 !endif !if [nmakehlp -f $(OPTS) "msvcrt"] !message *** Doing msvcrt MSVCRT = 1 !else MSVCRT = 0 !endif !if [nmakehlp -f $(OPTS) "staticpkg"] !message *** Doing staticpkg TCL_USE_STATIC_PACKAGES = 1 !else TCL_USE_STATIC_PACKAGES = 0 !endif !if [nmakehlp -f $(OPTS) "threads"] !message *** Doing threads TCL_THREADS = 1 !else TCL_THREADS = 0 !endif !if [nmakehlp -f $(OPTS) "symbols"] !message *** Doing symbols DEBUG = 1 !else DEBUG = 0 !endif !if [nmakehlp -f $(OPTS) "profile"] !message *** Doing profile PROFILE = 1 !else PROFILE = 0 !endif !if [nmakehlp -f $(OPTS) "loimpact"] !message *** Doing loimpact LOIMPACT = 1 !else LOIMPACT = 0 !endif !if [nmakehlp -f $(OPTS) "thrdalloc"] !message *** Doing thrdalloc USE_THREAD_ALLOC = 1 !else USE_THREAD_ALLOC = 0 !endif !endif !if !$(STATIC_BUILD) # Make sure we don't build overly fat DLLs. MSVCRT = 1 # We shouldn't statically put the extensions inside the shell when dynamic. TCL_USE_STATIC_PACKAGES = 0 !endif #---------------------------------------------------------- # Figure-out how to name our intermediate and output directories. # We wouldn't want different builds to use the same .obj files # by accident. #---------------------------------------------------------- SUFX = tsgx !if $(DEBUG) BUILDDIRTOP = Debug DBGX = g !else BUILDDIRTOP = Release DBGX = SUFX = $(SUFX:g=) !endif TMP_DIRFULL = .\$(BUILDDIRTOP)\$(PROJECT)_ThreadedDynamicStaticX !if !$(STATIC_BUILD) TMP_DIRFULL = $(TMP_DIRFULL:Static=) SUFX = $(SUFX:s=) EXT = dll !if $(MSVCRT) TMP_DIRFULL = $(TMP_DIRFULL:X=) SUFX = $(SUFX:x=) !endif !else TMP_DIRFULL = $(TMP_DIRFULL:Dynamic=) EXT = lib !if !$(MSVCRT) TMP_DIRFULL = $(TMP_DIRFULL:X=) SUFX = $(SUFX:x=) !endif !endif !if !$(TCL_THREADS) TMP_DIRFULL = $(TMP_DIRFULL:Threaded=) SUFX = $(SUFX:t=) !endif !ifndef TMP_DIR TMP_DIR = $(TMP_DIRFULL) !ifndef OUT_DIR OUT_DIR = .\$(BUILDDIRTOP) !endif !else !ifndef OUT_DIR OUT_DIR = $(TMP_DIR) !endif !endif #---------------------------------------------------------- # Decode the statistics requested. #---------------------------------------------------------- !if "$(STATS)" == "" || [nmakehlp -f "$(STATS)" "none"] TCL_MEM_DEBUG = 0 TCL_COMPILE_DEBUG = 0 !else !if [nmakehlp -f $(STATS) "memdbg"] !message *** Doing memdbg TCL_MEM_DEBUG = 1 !else TCL_MEM_DEBUG = 0 !endif !if [nmakehlp -f $(STATS) "compdbg"] !message *** Doing compdbg TCL_COMPILE_DEBUG = 1 !else TCL_COMPILE_DEBUG = 0 !endif !endif #---------------------------------------------------------- # Set our defines now armed with our options. #---------------------------------------------------------- OPTDEFINES = -DTCL_CFGVAL_ENCODING=$(CFG_ENCODING) !if $(TCL_MEM_DEBUG) OPTDEFINES = -DTCL_MEM_DEBUG !endif !if $(TCL_COMPILE_DEBUG) OPTDEFINES = $(OPTDEFINES) -DTCL_COMPILE_DEBUG -DTCL_COMPILE_STATS !endif !if $(TCL_THREADS) OPTDEFINES = $(OPTDEFINES) -DTCL_THREADS=1 !if $(USE_THREAD_ALLOC) OPTDEFINES = $(OPTDEFINES) -DUSE_THREAD_ALLOC=1 !endif !endif !if $(STATIC_BUILD) OPTDEFINES = $(OPTDEFINES) -DSTATIC_BUILD !endif !if $(DEBUG) OPTDEFINES = $(OPTDEFINES) -DTCL_CFG_DEBUG !elseif $(OPTIMIZING) OPTDEFINES = $(OPTDEFINES) -DTCL_CFG_OPTIMIZED !endif !if $(PROFILE) OPTDEFINES = $(OPTDEFINES) -DTCL_CFG_PROFILED !endif !if "$(MACHINE)" == "IA64" OPTDEFINES = $(OPTDEFINES) -DTCL_CFG_DO64BIT !endif #---------------------------------------------------------- # Get common info used when building extensions. #---------------------------------------------------------- !if "$(PROJECT)" != "tcl" # If INSTALLDIR set to tcl root dir then reset to the lib dir. !if exist("$(_INSTALLDIR)\include\tcl.h") _INSTALLDIR=$(_INSTALLDIR)\lib !endif !if !defined(TCLDIR) !if exist("$(_INSTALLDIR)\..\include\tcl.h") TCLINSTALL = 1 _TCLDIR = $(_INSTALLDIR)\.. _TCL_H = $(_INSTALLDIR)\..\include\tcl.h TCLDIR = $(_INSTALLDIR)\.. !else MSG=^ Failed to find tcl.h. Set the TCLDIR macro. !error $(MSG) !endif !else _TCLDIR = $(TCLDIR:/=\) !if exist("$(_TCLDIR)\include\tcl.h") TCLINSTALL = 1 _TCL_H = $(_TCLDIR)\include\tcl.h !elseif exist("$(_TCLDIR)\generic\tcl.h") TCLINSTALL = 0 _TCL_H = $(_TCLDIR)\generic\tcl.h !else MSG =^ Failed to find tcl.h. The TCLDIR macro does not appear correct. !error $(MSG) !endif !endif !if [nmakehlp -v $(_TCL_H) ""] == 0 !include version.vc !else TCL_DOTVERSION = 8.5 TCL_VERSION = $(TCL_DOTVERSION:.=) !endif !if $(TCLINSTALL) TCLSH = "$(_TCLDIR)\bin\tclsh$(TCL_VERSION)$(SUFX).exe" TCLSTUBLIB = "$(_TCLDIR)\lib\tclstub$(TCL_VERSION).lib" TCLIMPLIB = "$(_TCLDIR)\lib\tcl$(TCL_VERSION)$(SUFX).lib" TCL_LIBRARY = $(_TCLDIR)\lib TCL_INCLUDES = -I"$(_TCLDIR)\include" !else TCLSH = "$(_TCLDIR)\win\$(BUILDDIRTOP)\tclsh$(TCL_VERSION)$(SUFX).exe" TCLSTUBLIB = "$(_TCLDIR)\win\$(BUILDDIRTOP)\tclstub$(TCL_VERSION).lib" TCLIMPLIB = "$(_TCLDIR)\win\$(BUILDDIRTOP)\tcl$(TCL_VERSION)$(SUFX).lib" TCL_LIBRARY = $(_TCLDIR)\library TCL_INCLUDES = -I"$(_TCLDIR)\generic" -I"$(_TCLDIR)\win" !endif !endif #---------------------------------------------------------- # Get Tk info for building extensions. #---------------------------------------------------------- !if "$(PROJECT)" != "tcl" && "$(PROJECT)" != "tk" !if !defined(TKDIR) !if exist("$(_INSTALLDIR)\..\include\tk.h") TKINSTALL = 1 _TKDIR = $(_INSTALLDIR)\.. _TK_H = $(_TKDIR)\include\tk.h TKDIR = $(_TKDIR) !elseif exist("$(_TCLDIR)\include\tk.h") TKINSTALL = 1 _TKDIR = $(_TCLDIR) _TK_H = $(_TKDIR)\include\tk.h TKDIR = $(_TKDIR) !else MSG =^ Failed to find tk.h. Set the TKDIR macro. !error $(MSG) !endif !else _TKDIR = $(TKDIR:/=\) !if exist("$(_TKDIR)\include\tk.h") TKINSTALL = 1 _TK_H = $(_TKDIR)\include\tk.h !elseif exist("$(_TKDIR)\generic\tk.h") TKINSTALL = 0 _TK_H = $(_TKDIR)\generic\tk.h !else MSG =^ Failed to find tk.h. The TKDIR macro does not appear correct. !error $(MSG) !endif !endif !if [nmakehlp -v $(_TCL_H) $(_TK_H)] == 0 !include version.vc !else TK_DOTVERSION = 8.5 TK_VERSION = $(TK_DOTVERSION:.=) !endif !if $(TKINSTALL) WISH = "$(_TKDIR)\bin\wish$(TK_VERSION)$(SUFX).exe" TKSTUBLIB = "$(_TKDIR)\lib\tkstub$(TK_VERSION).lib" TKIMPLIB = "$(_TKDIR)\lib\tk$(TK_VERSION)$(SUFX).lib" TK_INCLUDES = -I"$(_TKDIR)\include" !else WISH = "$(_TKDIR)\win\$(BUILDDIRTOP)\wish$(TCL_VERSION)$(SUFX).exe" TKSTUBLIB = "$(_TKDIR)\win\$(BUILDDIRTOP)\tkstub$(TCL_VERSION).lib" TKIMPLIB = "$(_TKDIR)\win\$(BUILDDIRTOP)\tk$(TCL_VERSION)$(SUFX).lib" TK_INCLUDES = -I"$(_TKDIR)\generic" -I"$(_TKDIR)\win" -I"$(_TKDIR)\xlib" !endif !endif #---------------------------------------------------------- # Display stats being used. #---------------------------------------------------------- !message *** Intermediate directory will be '$(TMP_DIR)' !message *** Output directory will be '$(OUT_DIR)' !message *** Suffix for binaries will be '$(SUFX)' !message *** Optional defines are '$(OPTDEFINES)' !endif pgtcl-2.8.0/win32.mak000066400000000000000000000132331420313073400142650ustar00rootroot00000000000000# Microsoft Developer Studio Generated NMAKE File, Based on libpgtcl_REL7_1_STABLE.dsp !IF "$(CFG)" == "" CFG=libpgtcl - Win32 Release !MESSAGE No configuration specified. Defaulting to libpgtcl - Win32 Release. !ENDIF !IF "$(CFG)" != "libpgtcl - Win32 Release" && "$(CFG)" != "libpgtcl - Win32 Debug" !MESSAGE Invalid configuration "$(CFG)" specified. !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "libpgtcl.mak" CFG="libpgtcl - Win32 Debug" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "libpgtcl - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE "libpgtcl - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE !ERROR An invalid configuration is specified. !ENDIF !IF "$(OS)" == "Windows_NT" NULL= !ELSE NULL=nul !ENDIF CPP=cl.exe MTL=midl.exe RSC=rc.exe TCLBASE=\usr\local\tcltk833 PGINCLUDE=/I ..\..\include /I ..\libpq /I $(TCLBASE)\include !IF "$(CFG)" == "libpgtcl - Win32 Release" OUTDIR=.\Release INTDIR=.\Release # Begin Custom Macros OutDir=.\Release # End Custom Macros ALL : "$(OUTDIR)\libpgtcl.dll" "$(OUTDIR)\libpgtcl.bsc" CLEAN : -@erase "$(INTDIR)\pgtcl.obj" -@erase "$(INTDIR)\pgtcl.sbr" -@erase "$(INTDIR)\pgtclCmds.obj" -@erase "$(INTDIR)\pgtclCmds.sbr" -@erase "$(INTDIR)\pgtclId.obj" -@erase "$(INTDIR)\pgtclId.sbr" -@erase "$(INTDIR)\vc60.idb" -@erase "$(OUTDIR)\libpgtcl.dll" -@erase "$(OUTDIR)\libpgtcl.exp" -@erase "$(OUTDIR)\libpgtcl.lib" -@erase "$(OUTDIR)\libpgtcl.bsc" "$(OUTDIR)" : if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" CPP_PROJ=/nologo /MT /W3 /GX /O2 $(PGINCLUDE) /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /FR"$(INTDIR)\\" /Fp"$(INTDIR)\libpgtcl.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c MTL_PROJ=/nologo /D "NDEBUG" /mktyplib203 /win32 BSC32=bscmake.exe BSC32_FLAGS=/nologo /o"$(OUTDIR)\libpgtcl.bsc" BSC32_SBRS= \ "$(INTDIR)\pgtcl.sbr" \ "$(INTDIR)\pgtclCmds.sbr" \ "$(INTDIR)\pgtclId.sbr" "$(OUTDIR)\libpgtcl.bsc" : "$(OUTDIR)" $(BSC32_SBRS) $(BSC32) @<< $(BSC32_FLAGS) $(BSC32_SBRS) << LINK32=link.exe LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib tcl83.lib libpq.lib /nologo /dll /incremental:no /pdb:"$(OUTDIR)\libpgtcl.pdb" /machine:I386 /def:".\libpgtcl.def" /out:"$(OUTDIR)\libpgtcl.dll" /implib:"$(OUTDIR)\libpgtcl.lib" /libpath:"$(TCLBASE)\lib" /libpath:"..\libpq\Release" DEF_FILE= \ ".\libpgtcl.def" LINK32_OBJS= \ "$(INTDIR)\pgtcl.obj" \ "$(INTDIR)\pgtclCmds.obj" \ "$(INTDIR)\pgtclId.obj" "$(OUTDIR)\libpgtcl.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) $(LINK32) @<< $(LINK32_FLAGS) $(LINK32_OBJS) << !ELSEIF "$(CFG)" == "libpgtcl - Win32 Debug" OUTDIR=.\Debug INTDIR=.\Debug # Begin Custom Macros OutDir=.\Debug # End Custom Macros ALL : "$(OUTDIR)\libpgtcl.dll" "$(OUTDIR)\libpgtcl.bsc" CLEAN : -@erase "$(INTDIR)\pgtcl.obj" -@erase "$(INTDIR)\pgtcl.sbr" -@erase "$(INTDIR)\pgtclCmds.obj" -@erase "$(INTDIR)\pgtclCmds.sbr" -@erase "$(INTDIR)\pgtclId.obj" -@erase "$(INTDIR)\pgtclId.sbr" -@erase "$(INTDIR)\vc60.idb" -@erase "$(INTDIR)\vc60.pdb" -@erase "$(OUTDIR)\libpgtcl.dll" -@erase "$(OUTDIR)\libpgtcl.exp" -@erase "$(OUTDIR)\libpgtcl.ilk" -@erase "$(OUTDIR)\libpgtcl.lib" -@erase "$(OUTDIR)\libpgtcl.pdb" -@erase "$(OUTDIR)\libpgtcl.bsc" "$(OUTDIR)" : if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" CPP_PROJ=/nologo /MTd /W3 /Gm /GX /ZI /Od $(PGINCLUDE) /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /FR"$(INTDIR)\\" /Fp"$(INTDIR)\libpgtcl.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c MTL_PROJ=/nologo /D "_DEBUG" /mktyplib203 /win32 BSC32=bscmake.exe BSC32_FLAGS=/nologo /o"$(OUTDIR)\libpgtcl.bsc" BSC32_SBRS= \ "$(INTDIR)\pgtcl.sbr" \ "$(INTDIR)\pgtclCmds.sbr" \ "$(INTDIR)\pgtclId.sbr" "$(OUTDIR)\libpgtcl.bsc" : "$(OUTDIR)" $(BSC32_SBRS) $(BSC32) @<< $(BSC32_FLAGS) $(BSC32_SBRS) << LINK32=link.exe LINK32_FLAGS=tcl83.lib libpq.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /incremental:yes /pdb:"$(OUTDIR)\libpgtcl.pdb" /debug /machine:I386 /def:".\libpgtcl.def" /out:"$(OUTDIR)\libpgtcl.dll" /implib:"$(OUTDIR)\libpgtcl.lib" /pdbtype:sept /libpath:"$(TCLBASE)\lib" /libpath:"..\libpq\Debug" DEF_FILE= \ ".\libpgtcl.def" LINK32_OBJS= \ "$(INTDIR)\pgtcl.obj" \ "$(INTDIR)\pgtclCmds.obj" \ "$(INTDIR)\pgtclId.obj" "$(OUTDIR)\libpgtcl.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) $(LINK32) @<< $(LINK32_FLAGS) $(LINK32_OBJS) << !ENDIF .c{$(INTDIR)}.obj:: $(CPP) @<< $(CPP_PROJ) $< << .cpp{$(INTDIR)}.obj:: $(CPP) @<< $(CPP_PROJ) $< << .cxx{$(INTDIR)}.obj:: $(CPP) @<< $(CPP_PROJ) $< << .c{$(INTDIR)}.sbr:: $(CPP) @<< $(CPP_PROJ) $< << .cpp{$(INTDIR)}.sbr:: $(CPP) @<< $(CPP_PROJ) $< << .cxx{$(INTDIR)}.sbr:: $(CPP) @<< $(CPP_PROJ) $< << !IF "$(CFG)" == "libpgtcl - Win32 Release" || "$(CFG)" == "libpgtcl - Win32 Debug" SOURCE=pgtcl.c "$(INTDIR)\pgtcl.obj" "$(INTDIR)\pgtcl.sbr" : $(SOURCE) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) SOURCE=pgtclCmds.c "$(INTDIR)\pgtclCmds.obj" "$(INTDIR)\pgtclCmds.sbr" : $(SOURCE) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) SOURCE=pgtclId.c "$(INTDIR)\pgtclId.obj" "$(INTDIR)\pgtclId.sbr" : $(SOURCE) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) !ENDIF