diff --git a/.travis.yml b/.travis.yml index 84f1bc8b..96f02d83 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,6 +3,8 @@ sudo: required os: linux dist: trusty +group: edge + services: - docker @@ -25,16 +27,16 @@ install: script: - docker run -e TRAVIS_JOB_ID -t -d -w $PHPSQLDIR --link $TEST_PHP_SQL_SERVER --name=client msphpsql-dev - docker ps -a - - docker exec client python ./test/setup/setup_dbs.py -dbname $SQLSRV_DBNAME - - docker exec client python ./test/setup/setup_dbs.py -dbname $PDOSQLSRV_DBNAME - - docker exec client php ./source/pdo_sqlsrv/run-tests.php ./test/pdo_sqlsrv/*.phpt - - docker exec client php ./source/sqlsrv/run-tests.php ./test/sqlsrv/*.phpt - - docker exec client bash -c 'for f in ./test/sqlsrv/*.diff; do ls $f 2>/dev/null; cat $f 2>/dev/null; done || true' - - docker exec client bash -c 'for f in ./test/sqlsrv/*.out; do ls $f 2>/dev/null; cat $f 2>/dev/null; done || true' - - docker exec client bash -c 'for f in ./test/pdo_sqlsrv/*.diff; do ls $f 2>/dev/null; cat $f 2>/dev/null; done || true' - - docker exec client bash -c 'for f in ./test/pdo_sqlsrv/*.out; do ls $f 2>/dev/null; cat $f 2>/dev/null; done || true' - - docker exec client python ./test/setup/cleanup_dbs.py -dbname $SQLSRV_DBNAME - - docker exec client python ./test/setup/cleanup_dbs.py -dbname $PDOSQLSRV_DBNAME + - docker exec client python ./test/functional/setup/setup_dbs.py -dbname $SQLSRV_DBNAME + - docker exec client python ./test/functional/setup/setup_dbs.py -dbname $PDOSQLSRV_DBNAME + - docker exec client php ./source/pdo_sqlsrv/run-tests.php ./test/functional/pdo_sqlsrv/*.phpt + - docker exec client php ./source/sqlsrv/run-tests.php ./test/functional/sqlsrv/*.phpt + - docker exec client bash -c 'for f in ./test/functional/sqlsrv/*.diff; do ls $f 2>/dev/null; cat $f 2>/dev/null; done || true' + - docker exec client bash -c 'for f in ./test/functional/sqlsrv/*.out; do ls $f 2>/dev/null; cat $f 2>/dev/null; done || true' + - docker exec client bash -c 'for f in ./test/functional/pdo_sqlsrv/*.diff; do ls $f 2>/dev/null; cat $f 2>/dev/null; done || true' + - docker exec client bash -c 'for f in ./test/functional/pdo_sqlsrv/*.out; do ls $f 2>/dev/null; cat $f 2>/dev/null; done || true' + - docker exec client python ./test/functional/setup/cleanup_dbs.py -dbname $SQLSRV_DBNAME + - docker exec client python ./test/functional/setup/cleanup_dbs.py -dbname $PDOSQLSRV_DBNAME - docker exec client coveralls -e ./source/shared/ --gcov-options '\-lp' - docker stop client - docker ps -a @@ -42,3 +44,4 @@ script: notifications: email: false + diff --git a/CHANGELOG.md b/CHANGELOG.md index 4d041dfc..406bf309 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,24 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/) +## Windows/Linux/MAC 4.3.0-RC1 - 2017-06-21 +Here is the list of updates: + +### Added +- Transparent Network IP Resolution ([TNIR](https://github.com/Microsoft/msphpsql/wiki/Features#TNIR)) feature. + +### Fixed +- Fixed a memory leak in closing connection resources. +- Fixed load ordering issue in MacOS ([issue #417](https://github.com/Microsoft/msphpsql/issues/417)) + +### Limitation +- No support for inout / output params when using sql_variant type + +### Known Issues +- When pooling is enabled in Linux or MAC + - unixODBC <= 2.3.4 (Linux and MAC) might not return proper diagnostics information, such as error messages, warnings and informative messages + - due to this unixODBC bug, fetch large data (such as xml, binary) as streams as a workaround. See the examples [here](https://github.com/Microsoft/msphpsql/wiki/Connection-Pooling-on-Linux-and-Mac) + ## Windows/Linux/MAC 4.2.0-preview - 2017-05-19 Here is the list of updates: diff --git a/Dockerfile-msphpsql b/Dockerfile-msphpsql index e025375c..81ff073f 100644 --- a/Dockerfile-msphpsql +++ b/Dockerfile-msphpsql @@ -67,13 +67,13 @@ WORKDIR $PHPSQLDIR/source/pdo_sqlsrv RUN phpize && ./configure LDFLAGS="-lgcov" CXXFLAGS="-O0 --coverage" && make && make install # set name of sql server host to use -WORKDIR $PHPSQLDIR/test/pdo_sqlsrv +WORKDIR $PHPSQLDIR/test/functional/pdo_sqlsrv RUN sed -i -e 's/TARGET_SERVER/sql/g' MsSetup.inc RUN sed -i -e 's/TARGET_DATABASE/msphpsql_pdosqlsrv/g' MsSetup.inc RUN sed -i -e 's/TARGET_USERNAME/'"$TEST_PHP_SQL_UID"'/g' MsSetup.inc RUN sed -i -e 's/TARGET_PASSWORD/'"$TEST_PHP_SQL_PWD"'/g' MsSetup.inc -WORKDIR $PHPSQLDIR/test/sqlsrv +WORKDIR $PHPSQLDIR/test/functional/sqlsrv RUN sed -i -e 's/TARGET_SERVER/sql/g' MsSetup.inc RUN sed -i -e 's/TARGET_DATABASE/msphpsql_sqlsrv/g' MsSetup.inc RUN sed -i -e 's/TARGET_USERNAME/'"$TEST_PHP_SQL_UID"'/g' MsSetup.inc diff --git a/README.md b/README.md index 9e1cc788..75b2a438 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ SQL Server Team Thank you for taking time to take our February survey. Let us know how we are doing and how you use PHP by taking our March pulse survey: - + ### Status of Most Recent Builds | AppVeyor (Windows) |Travis CI (Linux) | Coverage Status diff --git a/appveyor.yml b/appveyor.yml index 77a06f4e..58d7d91c 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -123,10 +123,10 @@ install: - 7z x -y php-sdk-binary-tools-20110915.zip -o%PHP_SDK% - 7z x -y php.zip -o%PHP_SDK_DIR% - echo update SQL connection string - - ps: (Get-Content ${env:APPVEYOR_BUILD_FOLDER}\test\pdo_sqlsrv\MsSetup.inc) | ForEach-Object { $_ -replace "TARGET_SERVER", ${env:TEST_PHP_SQL_SERVER} -replace "TARGET_DATABASE", ${env:PDOSQLSRV_DBNAME} -replace "TARGET_USERNAME", ${env:TEST_PHP_SQL_UID} -replace "TARGET_PASSWORD", ${env:TEST_PHP_SQL_PWD} } | Set-Content ${env:APPVEYOR_BUILD_FOLDER}\test\pdo_sqlsrv\MsSetup.inc - - ps: Get-Content ${env:APPVEYOR_BUILD_FOLDER}\test\pdo_sqlsrv\MsSetup.inc - - ps: (Get-Content ${env:APPVEYOR_BUILD_FOLDER}\test\sqlsrv\MsSetup.inc) | ForEach-Object { $_ -replace "TARGET_SERVER", ${env:TEST_PHP_SQL_SERVER} -replace "TARGET_DATABASE", ${env:SQLSRV_DBNAME} -replace "TARGET_USERNAME", ${env:TEST_PHP_SQL_UID} -replace "TARGET_PASSWORD", ${env:TEST_PHP_SQL_PWD} } | Set-Content ${env:APPVEYOR_BUILD_FOLDER}\test\sqlsrv\MsSetup.inc - - ps: Get-Content ${env:APPVEYOR_BUILD_FOLDER}\test\sqlsrv\MsSetup.inc + - ps: (Get-Content ${env:APPVEYOR_BUILD_FOLDER}\test\functional\pdo_sqlsrv\MsSetup.inc) | ForEach-Object { $_ -replace "TARGET_SERVER", ${env:TEST_PHP_SQL_SERVER} -replace "TARGET_DATABASE", ${env:PDOSQLSRV_DBNAME} -replace "TARGET_USERNAME", ${env:TEST_PHP_SQL_UID} -replace "TARGET_PASSWORD", ${env:TEST_PHP_SQL_PWD} } | Set-Content ${env:APPVEYOR_BUILD_FOLDER}\test\functional\pdo_sqlsrv\MsSetup.inc + - ps: Get-Content ${env:APPVEYOR_BUILD_FOLDER}\test\functional\pdo_sqlsrv\MsSetup.inc + - ps: (Get-Content ${env:APPVEYOR_BUILD_FOLDER}\test\functional\sqlsrv\MsSetup.inc) | ForEach-Object { $_ -replace "TARGET_SERVER", ${env:TEST_PHP_SQL_SERVER} -replace "TARGET_DATABASE", ${env:SQLSRV_DBNAME} -replace "TARGET_USERNAME", ${env:TEST_PHP_SQL_UID} -replace "TARGET_PASSWORD", ${env:TEST_PHP_SQL_PWD} } | Set-Content ${env:APPVEYOR_BUILD_FOLDER}\test\functional\sqlsrv\MsSetup.inc + - ps: Get-Content ${env:APPVEYOR_BUILD_FOLDER}\test\functional\sqlsrv\MsSetup.inc build_script: - '"C:\\Program Files (x86)\\Microsoft Visual Studio %PHP_VC%.0\\VC\\vcvarsall.bat" %BUILD_PLATFORM%' @@ -163,18 +163,18 @@ test_script: - php -i - python -V - Echo setup test database for SQLSRV tests - %SQLSRV_DBNAME% - - python %APPVEYOR_BUILD_FOLDER%\test\setup\setup_dbs.py -dbname %SQLSRV_DBNAME% + - python %APPVEYOR_BUILD_FOLDER%\test\functional\setup\setup_dbs.py -dbname %SQLSRV_DBNAME% - Echo setup test database for PDO_SQLSRV tests - %PDOSQLSRV_DBNAME% - - python %APPVEYOR_BUILD_FOLDER%\test\setup\setup_dbs.py -dbname %PDOSQLSRV_DBNAME% - - php run-tests.php -p php.exe %APPVEYOR_BUILD_FOLDER%\test\sqlsrv\*.phpt > %APPVEYOR_BUILD_FOLDER%\test\sqlsrv.log 2>&1 - - type %APPVEYOR_BUILD_FOLDER%\test\sqlsrv.log - - php run-tests.php -p php.exe %APPVEYOR_BUILD_FOLDER%\test\pdo_sqlsrv\*.phpt > %APPVEYOR_BUILD_FOLDER%\test\pdo_sqlsrv.log 2>&1 - - type %APPVEYOR_BUILD_FOLDER%\test\pdo_sqlsrv.log - - python %APPVEYOR_BUILD_FOLDER%\test\setup\cleanup_dbs.py -dbname %SQLSRV_DBNAME% - - python %APPVEYOR_BUILD_FOLDER%\test\setup\cleanup_dbs.py -dbname %PDOSQLSRV_DBNAME% + - python %APPVEYOR_BUILD_FOLDER%\test\functional\setup\setup_dbs.py -dbname %PDOSQLSRV_DBNAME% + - php run-tests.php -p php.exe %APPVEYOR_BUILD_FOLDER%\test\functional\sqlsrv\*.phpt > %APPVEYOR_BUILD_FOLDER%\test\functional\sqlsrv.log 2>&1 + - type %APPVEYOR_BUILD_FOLDER%\test\functional\sqlsrv.log + - php run-tests.php -p php.exe %APPVEYOR_BUILD_FOLDER%\test\functional\pdo_sqlsrv\*.phpt > %APPVEYOR_BUILD_FOLDER%\test\functional\pdo_sqlsrv.log 2>&1 + - type %APPVEYOR_BUILD_FOLDER%\test\functional\pdo_sqlsrv.log + - python %APPVEYOR_BUILD_FOLDER%\test\functional\setup\cleanup_dbs.py -dbname %SQLSRV_DBNAME% + - python %APPVEYOR_BUILD_FOLDER%\test\functional\setup\cleanup_dbs.py -dbname %PDOSQLSRV_DBNAME% after_test: - - cd %APPVEYOR_BUILD_FOLDER%\test\ + - cd %APPVEYOR_BUILD_FOLDER%\test\functional\ - python output.py - ps: $difffiles = Get-ChildItem sqlsrv\*.diff - ps: $outfiles = Get-ChildItem sqlsrv\*.out diff --git a/source/pdo_sqlsrv/config.m4 b/source/pdo_sqlsrv/config.m4 index 2b310f92..dd5cd012 100644 --- a/source/pdo_sqlsrv/config.m4 +++ b/source/pdo_sqlsrv/config.m4 @@ -52,8 +52,14 @@ if test "$PHP_PDO_SQLSRV" != "no"; then fi AC_MSG_RESULT($pdo_sqlsrv_inc_path) - + HOST_OS_ARCH=`uname` + if test "${HOST_OS_ARCH}" = "Darwin"; then + MACOSX_DEPLOYMENT_TARGET=`sw_vers -productVersion` + fi + CXXFLAGS="$CXXFLAGS -std=c++11" + CXXFLAGS="$CXXFLAGS -D_FORTIFY_SOURCE=2 -O2" + CXXFLAGS="$CXXFLAGS -fstack-protector" PHP_REQUIRE_CXX() PHP_ADD_LIBRARY(stdc++, 1, PDO_SQLSRV_SHARED_LIBADD) PHP_ADD_LIBRARY(odbc, 1, PDO_SQLSRV_SHARED_LIBADD) diff --git a/source/pdo_sqlsrv/config.w32 b/source/pdo_sqlsrv/config.w32 index 1538dcae..dea793d4 100644 --- a/source/pdo_sqlsrv/config.w32 +++ b/source/pdo_sqlsrv/config.w32 @@ -3,7 +3,7 @@ // // Contents: JScript build configuration used by buildconf.bat // -// Microsoft Drivers 4.2 for PHP for SQL Server +// Microsoft Drivers 4.3 for PHP for SQL Server // Copyright(c) Microsoft Corporation // All rights reserved. // MIT License @@ -34,6 +34,7 @@ if( PHP_PDO_SQLSRV != "no" ) { ADD_FLAG( "CFLAGS_PDO_SQLSRV", "/EHsc" ); ADD_FLAG( "CFLAGS_PDO_SQLSRV", "/GS" ); ADD_FLAG( "CFLAGS_PDO_SQLSRV", "/Zi" ); + ADD_FLAG( "CFLAGS_PDO_SQLSRV", "/O2" ); ADD_FLAG( "CFLAGS_PDO_SQLSRV", "/D ZEND_WIN32_FORCE_INLINE" ); ADD_EXTENSION_DEP('pdo_sqlsrv', 'pdo'); EXTENSION("pdo_sqlsrv", pdo_sqlsrv_src_class, PHP_PDO_SQLSRV_SHARED, "/DZEND_ENABLE_STATIC_TSRMLS_CACHE=1"); diff --git a/source/pdo_sqlsrv/pdo_dbh.cpp b/source/pdo_sqlsrv/pdo_dbh.cpp index 10cc9b7c..96c206ad 100644 --- a/source/pdo_sqlsrv/pdo_dbh.cpp +++ b/source/pdo_sqlsrv/pdo_dbh.cpp @@ -3,7 +3,7 @@ // // Contents: Implements the PDO object for PDO_SQLSRV // -// Microsoft Drivers 4.2 for PHP for SQL Server +// Microsoft Drivers 4.3 for PHP for SQL Server // Copyright(c) Microsoft Corporation // All rights reserved. // MIT License @@ -57,6 +57,7 @@ const char TraceFile[] = "TraceFile"; const char TraceOn[] = "TraceOn"; const char TrustServerCertificate[] = "TrustServerCertificate"; const char TransactionIsolation[] = "TransactionIsolation"; +const char TransparentNetworkIPResolution[] = "TransparentNetworkIPResolution"; const char WSID[] = "WSID"; } @@ -95,18 +96,18 @@ const stmt_option PDO_STMT_OPTS[] = { // boolean connection string struct pdo_bool_conn_str_func { - static void func( connection_option const* option, zval* value, sqlsrv_conn* /*conn*/, std::string& conn_str TSRMLS_DC ); + static void func( _In_ connection_option const* option, _Inout_ zval* value, sqlsrv_conn* /*conn*/, _Out_ std::string& conn_str TSRMLS_DC ); }; struct pdo_txn_isolation_conn_attr_func { - static void func( connection_option const* /*option*/, zval* value_z, sqlsrv_conn* conn, std::string& /*conn_str*/ TSRMLS_DC ); + static void func( connection_option const* /*option*/, _In_ zval* value_z, _Inout_ sqlsrv_conn* conn, std::string& /*conn_str*/ TSRMLS_DC ); }; #ifdef _WIN32 struct pdo_int_conn_str_func { - static void func( connection_option const* option, zval* value, sqlsrv_conn* /*conn*/, std::string& conn_str TSRMLS_DC ) + static void func( _In_ connection_option const* option, _In_ zval* value, sqlsrv_conn* /*conn*/, _Out_ std::string& conn_str TSRMLS_DC ) { TSRMLS_C; SQLSRV_ASSERT( Z_TYPE_P( value ) == IS_STRING, "Wrong zval type for this keyword" ) @@ -124,7 +125,7 @@ struct pdo_int_conn_str_func { template struct pdo_int_conn_attr_func { - static void func( connection_option const* /*option*/, zval* value, sqlsrv_conn* conn, std::string& /*conn_str*/ TSRMLS_DC ) + static void func( connection_option const* /*option*/, _In_ zval* value, _Inout_ sqlsrv_conn* conn, std::string& /*conn_str*/ TSRMLS_DC ) { try { @@ -142,7 +143,7 @@ struct pdo_int_conn_attr_func { template struct pdo_bool_conn_attr_func { - static void func( connection_option const* /*option*/, zval* value, sqlsrv_conn* conn, std::string& /*conn_str*/ TSRMLS_DC ) + static void func( connection_option const* /*option*/, _Inout_ zval* value, _Inout_ sqlsrv_conn* conn, std::string& /*conn_str*/ TSRMLS_DC ) { try { @@ -156,9 +157,9 @@ struct pdo_bool_conn_attr_func { }; // statement options related functions -void add_stmt_option_key( sqlsrv_context& ctx, size_t key, HashTable* options_ht, - zval** data TSRMLS_DC ); -void validate_stmt_options( sqlsrv_context& ctx, zval* stmt_options, _Inout_ HashTable* pdo_stmt_options_ht TSRMLS_DC ); +void add_stmt_option_key( _Inout_ sqlsrv_context& ctx, _In_ size_t key, _Inout_ HashTable* options_ht, + _Inout_ zval** data TSRMLS_DC ); +void validate_stmt_options( _Inout_ sqlsrv_context& ctx, _Inout_ zval* stmt_options, _Inout_ HashTable* pdo_stmt_options_ht TSRMLS_DC ); } // namespace @@ -338,6 +339,15 @@ const connection_option PDO_CONN_OPTS[] = { CONN_ATTR_BOOL, pdo_bool_conn_str_func::func }, + { + PDOConnOptionNames::TransparentNetworkIPResolution, + sizeof(PDOConnOptionNames::TransparentNetworkIPResolution), + SQLSRV_CONN_OPTION_TRANSPARANT_NETWORK_IP_RESOLUTION, + ODBCConnOptions::TransparentNetworkIPResolution, + sizeof(ODBCConnOptions::TransparentNetworkIPResolution), + CONN_ATTR_STRING, + conn_str_append_func::func + }, { PDOConnOptionNames::WSID, sizeof( PDOConnOptionNames::WSID ), @@ -352,34 +362,34 @@ const connection_option PDO_CONN_OPTS[] = { // close the connection -int pdo_sqlsrv_dbh_close( pdo_dbh_t *dbh TSRMLS_DC ); +int pdo_sqlsrv_dbh_close( _Inout_ pdo_dbh_t *dbh TSRMLS_DC ); // execute queries -int pdo_sqlsrv_dbh_prepare( pdo_dbh_t *dbh, const char *sql, - size_t sql_len, pdo_stmt_t *stmt, zval *driver_options TSRMLS_DC ); -zend_long pdo_sqlsrv_dbh_do( pdo_dbh_t *dbh, const char *sql, size_t sql_len TSRMLS_DC ); +int pdo_sqlsrv_dbh_prepare( _Inout_ pdo_dbh_t *dbh, _In_reads_(sql_len) const char *sql, + _Inout_ size_t sql_len, _Inout_ pdo_stmt_t *stmt, _In_ zval *driver_options TSRMLS_DC ); +zend_long pdo_sqlsrv_dbh_do( _Inout_ pdo_dbh_t *dbh, _In_reads_bytes_(sql_len) const char *sql, _In_ size_t sql_len TSRMLS_DC ); // transaction support functions -int pdo_sqlsrv_dbh_commit( pdo_dbh_t *dbh TSRMLS_DC ); -int pdo_sqlsrv_dbh_begin( pdo_dbh_t *dbh TSRMLS_DC ); -int pdo_sqlsrv_dbh_rollback( pdo_dbh_t *dbh TSRMLS_DC ); +int pdo_sqlsrv_dbh_commit( _Inout_ pdo_dbh_t *dbh TSRMLS_DC ); +int pdo_sqlsrv_dbh_begin( _Inout_ pdo_dbh_t *dbh TSRMLS_DC ); +int pdo_sqlsrv_dbh_rollback( _Inout_ pdo_dbh_t *dbh TSRMLS_DC ); // attribute functions -int pdo_sqlsrv_dbh_set_attr( pdo_dbh_t *dbh, zend_long attr, zval *val TSRMLS_DC ); -int pdo_sqlsrv_dbh_get_attr( pdo_dbh_t *dbh, zend_long attr, zval *return_value TSRMLS_DC ); +int pdo_sqlsrv_dbh_set_attr( _Inout_ pdo_dbh_t *dbh, _In_ zend_long attr, _Inout_ zval *val TSRMLS_DC ); +int pdo_sqlsrv_dbh_get_attr( _Inout_ pdo_dbh_t *dbh, _In_ zend_long attr, _Inout_ zval *return_value TSRMLS_DC ); // return more information -int pdo_sqlsrv_dbh_return_error( pdo_dbh_t *dbh, pdo_stmt_t *stmt, - zval *info TSRMLS_DC); +int pdo_sqlsrv_dbh_return_error( _In_ pdo_dbh_t *dbh, _In_opt_ pdo_stmt_t *stmt, + _Out_ zval *info TSRMLS_DC); // return the last id generated by an executed SQL statement -char * pdo_sqlsrv_dbh_last_id( pdo_dbh_t *dbh, const char *name, size_t* len TSRMLS_DC ); +char * pdo_sqlsrv_dbh_last_id( _Inout_ pdo_dbh_t *dbh, _In_z_ const char *name, _Out_ size_t* len TSRMLS_DC ); // additional methods are supported in this function -pdo_sqlsrv_function_entry *pdo_sqlsrv_get_driver_methods( pdo_dbh_t *dbh, int kind TSRMLS_DC ); +pdo_sqlsrv_function_entry *pdo_sqlsrv_get_driver_methods( _Inout_ pdo_dbh_t *dbh, int kind TSRMLS_DC ); // quote a string, meaning put quotes around it and escape any quotes within it -int pdo_sqlsrv_dbh_quote( pdo_dbh_t* dbh, const char* unquoted, size_t unquotedlen, char **quoted, size_t* quotedlen, +int pdo_sqlsrv_dbh_quote( _Inout_ pdo_dbh_t* dbh, _In_reads_(unquotedlen) const char* unquoted, _In_ size_t unquotedlen, _Outptr_result_buffer_(*quotedlen) char **quoted, _Out_ size_t* quotedlen, enum pdo_param_type paramtype TSRMLS_DC ); struct pdo_dbh_methods pdo_sqlsrv_dbh_methods = { @@ -424,7 +434,7 @@ struct pdo_dbh_methods pdo_sqlsrv_dbh_methods = { #endif // constructor for the internal object for connections -pdo_sqlsrv_dbh::pdo_sqlsrv_dbh( SQLHANDLE h, error_callback e, void* driver TSRMLS_DC ) : +pdo_sqlsrv_dbh::pdo_sqlsrv_dbh( _In_ SQLHANDLE h, _In_ error_callback e, _In_ void* driver TSRMLS_DC ) : sqlsrv_conn( h, e, driver, SQLSRV_ENCODING_UTF8 TSRMLS_CC ), stmts( NULL ), direct_query( false ), @@ -454,7 +464,7 @@ pdo_sqlsrv_dbh::pdo_sqlsrv_dbh( SQLHANDLE h, error_callback e, void* driver TSRM // driver_options - A HashTable (within the zval) of options to use when creating the connection. // Return: // 0 for failure, 1 for success. -int pdo_sqlsrv_db_handle_factory(pdo_dbh_t *dbh, zval *driver_options TSRMLS_DC) +int pdo_sqlsrv_db_handle_factory( _Inout_ pdo_dbh_t *dbh, _In_opt_ zval *driver_options TSRMLS_DC) { LOG( SEV_NOTICE, "pdo_sqlsrv_db_handle_factory: entering" ); @@ -556,7 +566,7 @@ int pdo_sqlsrv_db_handle_factory(pdo_dbh_t *dbh, zval *driver_options TSRMLS_DC) // dbh - The PDO managed connection object. // Return: // Always returns 1 for success. -int pdo_sqlsrv_dbh_close( pdo_dbh_t *dbh TSRMLS_DC ) +int pdo_sqlsrv_dbh_close( _Inout_ pdo_dbh_t *dbh TSRMLS_DC ) { LOG( SEV_NOTICE, "pdo_sqlsrv_dbh_close: entering" ); @@ -587,8 +597,8 @@ int pdo_sqlsrv_dbh_close( pdo_dbh_t *dbh TSRMLS_DC ) // driver_options - User provided list of statement options. // Return: // 0 for failure, 1 for success. -int pdo_sqlsrv_dbh_prepare( pdo_dbh_t *dbh, const char *sql, - size_t sql_len, pdo_stmt_t *stmt, zval *driver_options TSRMLS_DC ) +int pdo_sqlsrv_dbh_prepare( _Inout_ pdo_dbh_t *dbh, _In_reads_(sql_len) const char *sql, + _Inout_ size_t sql_len, _Inout_ pdo_stmt_t *stmt, _In_ zval *driver_options TSRMLS_DC ) { PDO_RESET_DBH_ERROR; PDO_VALIDATE_CONN; @@ -725,7 +735,7 @@ int pdo_sqlsrv_dbh_prepare( pdo_dbh_t *dbh, const char *sql, // sql_len - length of sql query // Return // # of rows affected, -1 for an error. -zend_long pdo_sqlsrv_dbh_do( pdo_dbh_t *dbh, const char *sql, size_t sql_len TSRMLS_DC ) +zend_long pdo_sqlsrv_dbh_do( _Inout_ pdo_dbh_t *dbh, _In_reads_bytes_(sql_len) const char *sql, _In_ size_t sql_len TSRMLS_DC ) { PDO_RESET_DBH_ERROR; PDO_VALIDATE_CONN; @@ -743,6 +753,7 @@ zend_long pdo_sqlsrv_dbh_do( pdo_dbh_t *dbh, const char *sql, size_t sql_len TSR try { SQLSRV_ASSERT( sql != NULL, "NULL or empty SQL string passed." ); + SQLSRV_ASSERT( driver_dbh != NULL, "pdo_sqlsrv_dbh_do: driver_data object was NULL."); // temp PDO statement used for error handling if something happens pdo_stmt_t temp_stmt; @@ -813,7 +824,7 @@ zend_long pdo_sqlsrv_dbh_do( pdo_dbh_t *dbh, const char *sql, size_t sql_len TSR // dbh - The PDO managed connection object. // Return: // 0 for failure and 1 for success. -int pdo_sqlsrv_dbh_begin( pdo_dbh_t *dbh TSRMLS_DC ) +int pdo_sqlsrv_dbh_begin( _Inout_ pdo_dbh_t *dbh TSRMLS_DC ) { PDO_RESET_DBH_ERROR; PDO_VALIDATE_CONN; @@ -855,7 +866,7 @@ int pdo_sqlsrv_dbh_begin( pdo_dbh_t *dbh TSRMLS_DC ) // dbh - The PDO managed connection object. // Return: // 0 for failure and 1 for success. -int pdo_sqlsrv_dbh_commit( pdo_dbh_t *dbh TSRMLS_DC ) +int pdo_sqlsrv_dbh_commit( _Inout_ pdo_dbh_t *dbh TSRMLS_DC ) { PDO_RESET_DBH_ERROR; PDO_VALIDATE_CONN; @@ -895,7 +906,7 @@ int pdo_sqlsrv_dbh_commit( pdo_dbh_t *dbh TSRMLS_DC ) // dbh - The PDO managed connection object. // Return: // 0 for failure and 1 for success. -int pdo_sqlsrv_dbh_rollback( pdo_dbh_t *dbh TSRMLS_DC ) +int pdo_sqlsrv_dbh_rollback( _Inout_ pdo_dbh_t *dbh TSRMLS_DC ) { PDO_RESET_DBH_ERROR; PDO_VALIDATE_CONN; @@ -934,13 +945,14 @@ int pdo_sqlsrv_dbh_rollback( pdo_dbh_t *dbh TSRMLS_DC ) // val - The value of the attribute to be set. // Return: // 0 for failure, 1 for success. -int pdo_sqlsrv_dbh_set_attr( pdo_dbh_t *dbh, zend_long attr, zval *val TSRMLS_DC ) +int pdo_sqlsrv_dbh_set_attr( _Inout_ pdo_dbh_t *dbh, _In_ zend_long attr, _Inout_ zval *val TSRMLS_DC ) { PDO_RESET_DBH_ERROR; PDO_VALIDATE_CONN; PDO_LOG_DBH_ENTRY; pdo_sqlsrv_dbh* driver_dbh = static_cast( dbh->driver_data ); + SQLSRV_ASSERT( driver_dbh != NULL, "pdo_sqlsrv_dbh_set_attr: driver_data object was NULL."); try { @@ -1049,13 +1061,14 @@ int pdo_sqlsrv_dbh_set_attr( pdo_dbh_t *dbh, zend_long attr, zval *val TSRMLS_DC // return_value - zval in which to return the attribute value. // Return: // 0 for failure, 1 for success. -int pdo_sqlsrv_dbh_get_attr( pdo_dbh_t *dbh, zend_long attr, zval *return_value TSRMLS_DC ) +int pdo_sqlsrv_dbh_get_attr( _Inout_ pdo_dbh_t *dbh, _In_ zend_long attr, _Inout_ zval *return_value TSRMLS_DC ) { PDO_RESET_DBH_ERROR; PDO_VALIDATE_CONN; PDO_LOG_DBH_ENTRY; pdo_sqlsrv_dbh* driver_dbh = static_cast( dbh->driver_data ); + SQLSRV_ASSERT( driver_dbh != NULL, "pdo_sqlsrv_dbh_get_attr: driver_data object was NULL."); try { @@ -1166,8 +1179,8 @@ int pdo_sqlsrv_dbh_get_attr( pdo_dbh_t *dbh, zend_long attr, zval *return_value // info - zval in which to return the error info. // Return: // 0 for failure, 1 for success. -int pdo_sqlsrv_dbh_return_error( pdo_dbh_t *dbh, pdo_stmt_t *stmt, - zval *info TSRMLS_DC) +int pdo_sqlsrv_dbh_return_error( _In_ pdo_dbh_t *dbh, _In_opt_ pdo_stmt_t *stmt, + _Out_ zval *info TSRMLS_DC) { SQLSRV_ASSERT( dbh != NULL || stmt != NULL, "Either dbh or stmt must not be NULL to dereference the error." ); @@ -1193,7 +1206,7 @@ int pdo_sqlsrv_dbh_return_error( pdo_dbh_t *dbh, pdo_stmt_t *stmt, // len - Length of the name. // Return: // Returns the last insert id as a string. -char * pdo_sqlsrv_dbh_last_id( pdo_dbh_t *dbh, const char *name, _Out_ size_t* len TSRMLS_DC ) +char * pdo_sqlsrv_dbh_last_id( _Inout_ pdo_dbh_t *dbh, _In_z_ const char *name, _Out_ size_t* len TSRMLS_DC ) { PDO_RESET_DBH_ERROR; PDO_VALIDATE_CONN; @@ -1206,6 +1219,7 @@ char * pdo_sqlsrv_dbh_last_id( pdo_dbh_t *dbh, const char *name, _Out_ size_t* l sqlsrv_malloc_auto_ptr driver_stmt; pdo_sqlsrv_dbh* driver_dbh = static_cast( dbh->driver_data ); + SQLSRV_ASSERT( driver_dbh != NULL, "pdo_sqlsrv_dbh_last_id: driver_data object was NULL." ); sqlsrv_malloc_auto_ptr id_str; id_str = reinterpret_cast( sqlsrv_malloc( LAST_INSERT_ID_BUFF_LEN )); @@ -1292,7 +1306,7 @@ char * pdo_sqlsrv_dbh_last_id( pdo_dbh_t *dbh, const char *name, _Out_ size_t* l // quoted_len - Length of the output string. // Return: // 0 for failure, 1 for success. -int pdo_sqlsrv_dbh_quote( pdo_dbh_t* dbh, const char* unquoted, size_t unquoted_len, char **quoted, size_t* quoted_len, +int pdo_sqlsrv_dbh_quote( _Inout_ pdo_dbh_t* dbh, _In_reads_(unquoted_len) const char* unquoted, _In_ size_t unquoted_len, _Outptr_result_buffer_(*quoted_len) char **quoted, _Out_ size_t* quoted_len, enum pdo_param_type /*paramtype*/ TSRMLS_DC ) { PDO_RESET_DBH_ERROR; @@ -1309,15 +1323,16 @@ int pdo_sqlsrv_dbh_quote( pdo_dbh_t* dbh, const char* unquoted, size_t unquoted_ // iterate through parents to find "PDOStatement" bool is_statement = false; - zend_class_entry* curr_class = ( Z_OBJ_P( object ))->ce; - while ( curr_class != NULL ) { - if ( strcmp( reinterpret_cast( curr_class->name->val ), "PDOStatement" ) == 0 ) { - is_statement = true; - break; + if ( object ) { + zend_class_entry* curr_class = ( Z_OBJ_P( object ))->ce; + while ( curr_class != NULL ) { + if ( strcmp( reinterpret_cast( curr_class->name->val ), "PDOStatement" ) == 0 ) { + is_statement = true; + break; + } + curr_class = curr_class->parent; } - curr_class = curr_class->parent; } - // only change the encoding if quote is called from the statement level (which should only be called when a statement // is prepared with emulate prepared on) if ( is_statement ) { @@ -1333,7 +1348,7 @@ int pdo_sqlsrv_dbh_quote( pdo_dbh_t* dbh, const char* unquoted, size_t unquoted_ } // get the placeholder at the current position in driver_stmt->placeholders ht zval* placeholder = NULL; - if (( placeholder = zend_hash_get_current_data( driver_stmt->placeholders )) != NULL && zend_hash_move_forward( driver_stmt->placeholders ) == SUCCESS ) { + if (( placeholder = zend_hash_get_current_data( driver_stmt->placeholders )) != NULL && zend_hash_move_forward( driver_stmt->placeholders ) == SUCCESS && stmt->bound_params != NULL ) { pdo_bound_param_data* param = NULL; if ( Z_TYPE_P( placeholder ) == IS_STRING ) { param = reinterpret_cast( zend_hash_find_ptr( stmt->bound_params, Z_STR_P( placeholder ))); @@ -1425,13 +1440,14 @@ int pdo_sqlsrv_dbh_quote( pdo_dbh_t* dbh, const char* unquoted, size_t unquoted_ } // This method is not implemented by this driver. -pdo_sqlsrv_function_entry *pdo_sqlsrv_get_driver_methods( pdo_dbh_t *dbh, int kind TSRMLS_DC ) +pdo_sqlsrv_function_entry *pdo_sqlsrv_get_driver_methods( _Inout_ pdo_dbh_t *dbh, int kind TSRMLS_DC ) { PDO_RESET_DBH_ERROR; PDO_VALIDATE_CONN; PDO_LOG_DBH_ENTRY; sqlsrv_conn* driver_conn = reinterpret_cast( dbh->driver_data ); + SQLSRV_ASSERT( driver_conn != NULL, "pdo_sqlsrv_get_driver_methods: driver_data object was NULL." ); CHECK_CUSTOM_ERROR( true, driver_conn, PDO_SQLSRV_ERROR_FUNCTION_NOT_IMPLEMENTED ) { return NULL; } @@ -1443,8 +1459,8 @@ namespace { // Maps the PDO driver specific statement option/attribute constants to the core layer // statement option/attribute constants. -void add_stmt_option_key( sqlsrv_context& ctx, size_t key, HashTable* options_ht, - zval* data TSRMLS_DC ) +void add_stmt_option_key( _Inout_ sqlsrv_context& ctx, _In_ size_t key, _Inout_ HashTable* options_ht, + _Inout_ zval* data TSRMLS_DC ) { zend_ulong option_key = -1; switch( key ) { @@ -1507,7 +1523,7 @@ void add_stmt_option_key( sqlsrv_context& ctx, size_t key, HashTable* options_ht // ctx - The current context. // stmt_options - The user provided list of statement options. // pdo_stmt_options_ht - Output hashtable of statement options. -void validate_stmt_options( sqlsrv_context& ctx, zval* stmt_options, _Inout_ HashTable* pdo_stmt_options_ht TSRMLS_DC ) +void validate_stmt_options( _Inout_ sqlsrv_context& ctx, _Inout_ zval* stmt_options, _Inout_ HashTable* pdo_stmt_options_ht TSRMLS_DC ) { try { @@ -1537,7 +1553,7 @@ void validate_stmt_options( sqlsrv_context& ctx, zval* stmt_options, _Inout_ Has } -void pdo_bool_conn_str_func::func(connection_option const* option, zval* value, sqlsrv_conn* /*conn*/, std::string& conn_str TSRMLS_DC ) +void pdo_bool_conn_str_func::func( _In_ connection_option const* option, _Inout_ zval* value, sqlsrv_conn* /*conn*/, _Out_ std::string& conn_str TSRMLS_DC ) { TSRMLS_C; char const* val_str = "no"; @@ -1553,7 +1569,7 @@ void pdo_bool_conn_str_func::func(connection_option const* option, zval* value, conn_str += "};"; } -void pdo_txn_isolation_conn_attr_func::func( connection_option const* /*option*/, zval* value_z, sqlsrv_conn* conn, +void pdo_txn_isolation_conn_attr_func::func( connection_option const* /*option*/, _In_ zval* value_z, _Inout_ sqlsrv_conn* conn, std::string& /*conn_str*/ TSRMLS_DC ) { try { diff --git a/source/pdo_sqlsrv/pdo_init.cpp b/source/pdo_sqlsrv/pdo_init.cpp index 5be8480c..c8076e11 100644 --- a/source/pdo_sqlsrv/pdo_init.cpp +++ b/source/pdo_sqlsrv/pdo_init.cpp @@ -3,7 +3,7 @@ // // Contents: initialization routines for PDO_SQLSRV // -// Microsoft Drivers 4.2 for PHP for SQL Server +// Microsoft Drivers 4.3 for PHP for SQL Server // Copyright(c) Microsoft Corporation // All rights reserved. // MIT License @@ -47,8 +47,8 @@ pdo_driver_t pdo_sqlsrv_driver = { // functions to register SQLSRV constants with the PDO class // (It's in all CAPS so it looks like the Zend macros that do similar work) -void REGISTER_PDO_SQLSRV_CLASS_CONST_LONG( char const* name, long value TSRMLS_DC ); -void REGISTER_PDO_SQLSRV_CLASS_CONST_STRING( char const* name, char const* value TSRMLS_DC ); +void REGISTER_PDO_SQLSRV_CLASS_CONST_LONG( _In_z_ char const* name, _In_ long value TSRMLS_DC ); +void REGISTER_PDO_SQLSRV_CLASS_CONST_STRING( _In_z_ char const* name, _In_z_ char const* value TSRMLS_DC ); struct sqlsrv_attr_pdo_constant { const char *name; @@ -100,7 +100,7 @@ zend_module_entry g_pdo_sqlsrv_module_entry = }; // called by Zend for each parameter in the g_pdo_errors_ht hash table when it is destroyed -void pdo_error_dtor( zval* elem ) { +void pdo_error_dtor( _Inout_ zval* elem ) { pdo_error* error_to_ignore = reinterpret_cast( Z_PTR_P( elem ) ); pefree( error_to_ignore, 1 ); } @@ -252,7 +252,7 @@ namespace { // mimic the functionality of the REGISTER_PDO_CLASS_CONST_LONG. We use this instead of the macro because // we dynamically link the pdo_get_dbh_class function rather than use the static php_pdo_get_dbh_ce (see MINIT) - void REGISTER_PDO_SQLSRV_CLASS_CONST_LONG( char const* name, long value TSRMLS_DC ) + void REGISTER_PDO_SQLSRV_CLASS_CONST_LONG( _In_z_ char const* name, _In_ long value TSRMLS_DC ) { zend_class_entry* zend_class = php_pdo_get_dbh_ce(); @@ -263,7 +263,7 @@ namespace { } } - void REGISTER_PDO_SQLSRV_CLASS_CONST_STRING( char const* name, char const* value TSRMLS_DC ) + void REGISTER_PDO_SQLSRV_CLASS_CONST_STRING( _In_z_ char const* name, _In_z_ char const* value TSRMLS_DC ) { zend_class_entry* zend_class = php_pdo_get_dbh_ce(); diff --git a/source/pdo_sqlsrv/pdo_parser.cpp b/source/pdo_sqlsrv/pdo_parser.cpp index 1b726a07..56292a31 100644 --- a/source/pdo_sqlsrv/pdo_parser.cpp +++ b/source/pdo_sqlsrv/pdo_parser.cpp @@ -5,7 +5,7 @@ // // Copyright Microsoft Corporation // -// Microsoft Drivers 4.2 for PHP for SQL Server +// Microsoft Drivers 4.3 for PHP for SQL Server // Copyright(c) Microsoft Corporation // All rights reserved. // MIT License @@ -22,7 +22,7 @@ #include "php_pdo_sqlsrv.h" // Constructor -conn_string_parser:: conn_string_parser( sqlsrv_context& ctx, const char* dsn, int len, _Inout_ HashTable* conn_options_ht ) +conn_string_parser:: conn_string_parser( _In_ sqlsrv_context& ctx, _In_ const char* dsn, _In_ int len, _In_ HashTable* conn_options_ht ) { this->orig_str = dsn; this->len = len; @@ -33,7 +33,7 @@ conn_string_parser:: conn_string_parser( sqlsrv_context& ctx, const char* dsn, i this->current_key_name = NULL; } -sql_string_parser:: sql_string_parser( sqlsrv_context& ctx, const char* sql_str, int len, _Inout_ HashTable* placeholders_ht ) +sql_string_parser:: sql_string_parser( _In_ sqlsrv_context& ctx, _In_ const char* sql_str, _In_ int len, _In_ HashTable* placeholders_ht ) { this->orig_str = sql_str; this->len = len; @@ -78,7 +78,7 @@ inline bool string_parser::is_eos( void ) } // Check for white space. -inline bool string_parser::is_white_space( char c ) +inline bool string_parser::is_white_space( _In_ char c ) { if( c == ' ' || c == '\r' || c == '\n' || c == '\t' ) { return true; @@ -87,7 +87,7 @@ inline bool string_parser::is_white_space( char c ) } // Discard any trailing white spaces. -int conn_string_parser::discard_trailing_white_spaces( const char* str, int len ) +int conn_string_parser::discard_trailing_white_spaces( _In_reads_(len) const char* str, _Inout_ int len ) { const char* end = str + ( len - 1 ); @@ -118,7 +118,7 @@ bool string_parser::discard_white_spaces() } // Add a key-value pair to the hashtable -void string_parser::add_key_value_pair( const char* value, int len TSRMLS_DC ) +void string_parser::add_key_value_pair( _In_reads_(len) const char* value, _In_ int len TSRMLS_DC ) { zval value_z; ZVAL_UNDEF( &value_z ); @@ -136,7 +136,7 @@ void string_parser::add_key_value_pair( const char* value, int len TSRMLS_DC ) } // Add a key-value pair to the hashtable with int value -void sql_string_parser::add_key_int_value_pair( unsigned int value TSRMLS_DC ) { +void sql_string_parser::add_key_int_value_pair( _In_ unsigned int value TSRMLS_DC ) { zval value_z; ZVAL_LONG( &value_z, value ); @@ -144,7 +144,7 @@ void sql_string_parser::add_key_int_value_pair( unsigned int value TSRMLS_DC ) { } // Validate a given DSN keyword. -void conn_string_parser::validate_key(const char *key, int key_len TSRMLS_DC ) +void conn_string_parser::validate_key( _In_reads_(key_len) const char *key, _Inout_ int key_len TSRMLS_DC ) { int new_len = discard_trailing_white_spaces( key, key_len ); @@ -169,7 +169,7 @@ void conn_string_parser::validate_key(const char *key, int key_len TSRMLS_DC ) THROW_PDO_ERROR( this->ctx, PDO_SQLSRV_ERROR_INVALID_DSN_KEY, static_cast( key_name ) ); } -void conn_string_parser::add_key_value_pair( const char* value, int len TSRMLS_DC ) +void conn_string_parser::add_key_value_pair( _In_reads_(len) const char* value, _In_ int len TSRMLS_DC ) { // if the keyword is 'Authentication', check whether the user specified option is supported bool valid = true; diff --git a/source/pdo_sqlsrv/pdo_stmt.cpp b/source/pdo_sqlsrv/pdo_stmt.cpp index 1421bc85..7edb17dc 100644 --- a/source/pdo_sqlsrv/pdo_stmt.cpp +++ b/source/pdo_sqlsrv/pdo_stmt.cpp @@ -3,7 +3,7 @@ // // Contents: Implements the PDOStatement object for the PDO_SQLSRV // -// Microsoft Drivers 4.2 for PHP for SQL Server +// Microsoft Drivers 4.3 for PHP for SQL Server // Copyright(c) Microsoft Corporation // All rights reserved. // MIT License @@ -37,7 +37,7 @@ SQLSMALLINT odbc_fetch_orientation[] = // max length of a field type const int SQL_SERVER_IDENT_SIZE_MAX = 128; -inline SQLSMALLINT pdo_fetch_ori_to_odbc_fetch_ori (enum pdo_fetch_orientation ori) +inline SQLSMALLINT pdo_fetch_ori_to_odbc_fetch_ori ( _In_ enum pdo_fetch_orientation ori ) { SQLSRV_ASSERT( ori >= PDO_FETCH_ORI_NEXT && ori <= PDO_FETCH_ORI_REL, "Fetch orientation out of range."); #ifdef _WIN32 @@ -49,7 +49,7 @@ inline SQLSMALLINT pdo_fetch_ori_to_odbc_fetch_ori (enum pdo_fetch_orientation o // Returns SQLSRV data type for a given PDO type. See pdo_param_type // for list of supported pdo types. -SQLSRV_PHPTYPE pdo_type_to_sqlsrv_php_type( sqlsrv_stmt* driver_stmt, enum pdo_param_type pdo_type TSRMLS_DC ) +SQLSRV_PHPTYPE pdo_type_to_sqlsrv_php_type( _Inout_ sqlsrv_stmt* driver_stmt, _In_ enum pdo_param_type pdo_type TSRMLS_DC ) { switch( pdo_type ) { @@ -80,7 +80,7 @@ SQLSRV_PHPTYPE pdo_type_to_sqlsrv_php_type( sqlsrv_stmt* driver_stmt, enum pdo_p // Returns a pdo type for a given SQL type. See pdo_param_type // for list of supported pdo types. -inline pdo_param_type sql_type_to_pdo_type( SQLSMALLINT sql_type ) +inline pdo_param_type sql_type_to_pdo_type( _In_ SQLSMALLINT sql_type ) { pdo_param_type return_type = PDO_PARAM_STR; @@ -127,7 +127,7 @@ inline pdo_param_type sql_type_to_pdo_type( SQLSMALLINT sql_type ) // Calls core_sqlsrv_set_scrollable function to set cursor. // PDO supports two cursor types: PDO_CURSOR_FWDONLY, PDO_CURSOR_SCROLL. -void set_stmt_cursors( sqlsrv_stmt* stmt, zval* value_z TSRMLS_DC ) +void set_stmt_cursors( _Inout_ sqlsrv_stmt* stmt, _In_ zval* value_z TSRMLS_DC ) { if( Z_TYPE_P( value_z ) != IS_LONG ) { @@ -154,7 +154,7 @@ void set_stmt_cursors( sqlsrv_stmt* stmt, zval* value_z TSRMLS_DC ) core_sqlsrv_set_scrollable( stmt, odbc_cursor_type TSRMLS_CC ); } -void set_stmt_cursor_scroll_type( sqlsrv_stmt* stmt, zval* value_z TSRMLS_DC ) +void set_stmt_cursor_scroll_type( _Inout_ sqlsrv_stmt* stmt, _In_ zval* value_z TSRMLS_DC ) { if( Z_TYPE_P( value_z ) != IS_LONG ) { @@ -175,7 +175,7 @@ void set_stmt_cursor_scroll_type( sqlsrv_stmt* stmt, zval* value_z TSRMLS_DC ) // Sets the statement encoding. Default encoding on the statement // implies use the connection's encoding. -void set_stmt_encoding( sqlsrv_stmt* stmt, zval* value_z TSRMLS_DC ) +void set_stmt_encoding( _Inout_ sqlsrv_stmt* stmt, _In_ zval* value_z TSRMLS_DC ) { // validate the value if( Z_TYPE_P( value_z ) != IS_LONG ) { @@ -202,7 +202,7 @@ void set_stmt_encoding( sqlsrv_stmt* stmt, zval* value_z TSRMLS_DC ) } // internal helper function to free meta data structures allocated -void meta_data_free( field_meta_data* meta ) +void meta_data_free( _Inout_ field_meta_data* meta ) { if( meta->field_name ) { meta->field_name.reset(); @@ -210,9 +210,10 @@ void meta_data_free( field_meta_data* meta ) sqlsrv_free( meta ); } -zval convert_to_zval( SQLSRV_PHPTYPE sqlsrv_php_type, void** in_val, SQLLEN field_len ) +zval convert_to_zval( _In_ SQLSRV_PHPTYPE sqlsrv_php_type, _Inout_ void** in_val, _In_opt_ SQLLEN field_len ) { zval out_zval; + ZVAL_UNDEF( &out_zval ); switch( sqlsrv_php_type ) { @@ -274,20 +275,20 @@ zval convert_to_zval( SQLSRV_PHPTYPE sqlsrv_php_type, void** in_val, SQLLEN fiel } // namespace -int pdo_sqlsrv_stmt_dtor(pdo_stmt_t *stmt TSRMLS_DC); -int pdo_sqlsrv_stmt_execute(pdo_stmt_t *stmt TSRMLS_DC); -int pdo_sqlsrv_stmt_fetch(pdo_stmt_t *stmt, enum pdo_fetch_orientation ori, - zend_long offset TSRMLS_DC); -int pdo_sqlsrv_stmt_param_hook(pdo_stmt_t *stmt, - struct pdo_bound_param_data *param, enum pdo_param_event event_type TSRMLS_DC); -int pdo_sqlsrv_stmt_describe_col(pdo_stmt_t *stmt, int colno TSRMLS_DC); -int pdo_sqlsrv_stmt_get_col_data(pdo_stmt_t *stmt, int colno, - char **ptr, size_t *len, int *caller_frees TSRMLS_DC); -int pdo_sqlsrv_stmt_set_attr(pdo_stmt_t *stmt, zend_long attr, zval *val TSRMLS_DC); -int pdo_sqlsrv_stmt_get_attr(pdo_stmt_t *stmt, zend_long attr, zval *return_value TSRMLS_DC); -int pdo_sqlsrv_stmt_get_col_meta(pdo_stmt_t *stmt, zend_long colno, zval *return_value TSRMLS_DC); -int pdo_sqlsrv_stmt_next_rowset(pdo_stmt_t *stmt TSRMLS_DC); -int pdo_sqlsrv_stmt_close_cursor(pdo_stmt_t *stmt TSRMLS_DC); +int pdo_sqlsrv_stmt_dtor( _Inout_ pdo_stmt_t *stmt TSRMLS_DC ); +int pdo_sqlsrv_stmt_execute( _Inout_ pdo_stmt_t *stmt TSRMLS_DC ); +int pdo_sqlsrv_stmt_fetch( _Inout_ pdo_stmt_t *stmt, _In_ enum pdo_fetch_orientation ori, + _In_ zend_long offset TSRMLS_DC ); +int pdo_sqlsrv_stmt_param_hook( _Inout_ pdo_stmt_t *stmt, + _Inout_ struct pdo_bound_param_data *param, _In_ enum pdo_param_event event_type TSRMLS_DC ); +int pdo_sqlsrv_stmt_describe_col( _Inout_ pdo_stmt_t *stmt, _In_ int colno TSRMLS_DC ); +int pdo_sqlsrv_stmt_get_col_data( _Inout_ pdo_stmt_t *stmt, _In_ int colno, + _Out_writes_bytes_opt_(*len) char **ptr, _Inout_ size_t *len, _Out_opt_ int *caller_frees TSRMLS_DC ); +int pdo_sqlsrv_stmt_set_attr( _Inout_ pdo_stmt_t *stmt, _In_ zend_long attr, _Inout_ zval *val TSRMLS_DC ); +int pdo_sqlsrv_stmt_get_attr( _Inout_ pdo_stmt_t *stmt, _In_ zend_long attr, _Inout_ zval *return_value TSRMLS_DC ); +int pdo_sqlsrv_stmt_get_col_meta( _Inout_ pdo_stmt_t *stmt, _In_ zend_long colno, _Inout_ zval *return_value TSRMLS_DC ); +int pdo_sqlsrv_stmt_next_rowset( _Inout_ pdo_stmt_t *stmt TSRMLS_DC ); +int pdo_sqlsrv_stmt_close_cursor( _Inout_ pdo_stmt_t *stmt TSRMLS_DC ); struct pdo_stmt_methods pdo_sqlsrv_stmt_methods = { @@ -305,34 +306,34 @@ struct pdo_stmt_methods pdo_sqlsrv_stmt_methods = { }; -void stmt_option_pdo_scrollable:: operator()( sqlsrv_stmt* stmt, stmt_option const* /*opt*/, zval* value_z TSRMLS_DC ) +void stmt_option_pdo_scrollable:: operator()( _Inout_ sqlsrv_stmt* stmt, stmt_option const* /*opt*/, _In_ zval* value_z TSRMLS_DC ) { set_stmt_cursors( stmt, value_z TSRMLS_CC ); } -void stmt_option_encoding:: operator()( sqlsrv_stmt* stmt, stmt_option const* /*opt*/, zval* value_z TSRMLS_DC ) +void stmt_option_encoding:: operator()( _Inout_ sqlsrv_stmt* stmt, stmt_option const* /*opt*/, _In_ zval* value_z TSRMLS_DC ) { set_stmt_encoding( stmt, value_z TSRMLS_CC ); } -void stmt_option_direct_query:: operator()( sqlsrv_stmt* stmt, stmt_option const* /*opt*/, zval* value_z TSRMLS_DC ) +void stmt_option_direct_query:: operator()( _Inout_ sqlsrv_stmt* stmt, stmt_option const* /*opt*/, _In_ zval* value_z TSRMLS_DC ) { pdo_sqlsrv_stmt *pdo_stmt = static_cast( stmt ); pdo_stmt->direct_query = ( zend_is_true( value_z )) ? true : false; } -void stmt_option_cursor_scroll_type:: operator()( sqlsrv_stmt* stmt, stmt_option const* /*opt*/, zval* value_z TSRMLS_DC ) +void stmt_option_cursor_scroll_type:: operator()( _Inout_ sqlsrv_stmt* stmt, stmt_option const* /*opt*/, _In_ zval* value_z TSRMLS_DC ) { set_stmt_cursor_scroll_type( stmt, value_z TSRMLS_CC ); } -void stmt_option_emulate_prepares:: operator()( sqlsrv_stmt* stmt, stmt_option const* /*opt*/, zval* value_z TSRMLS_DC ) +void stmt_option_emulate_prepares:: operator()( _Inout_ sqlsrv_stmt* stmt, stmt_option const* /*opt*/, _In_ zval* value_z TSRMLS_DC ) { pdo_stmt_t *pdo_stmt = static_cast( stmt->driver() ); pdo_stmt->supports_placeholders = ( zend_is_true( value_z )) ? PDO_PLACEHOLDER_NONE : PDO_PLACEHOLDER_POSITIONAL; } -void stmt_option_fetch_numeric:: operator()( sqlsrv_stmt* stmt, stmt_option const* /*opt*/, zval* value_z TSRMLS_DC ) +void stmt_option_fetch_numeric:: operator()( _Inout_ sqlsrv_stmt* stmt, stmt_option const* /*opt*/, _In_ zval* value_z TSRMLS_DC ) { pdo_sqlsrv_stmt *pdo_stmt = static_cast( stmt ); pdo_stmt->fetch_numeric = ( zend_is_true( value_z )) ? true : false; @@ -385,7 +386,7 @@ pdo_sqlsrv_stmt::~pdo_sqlsrv_stmt( void ) // *stmt - Pointer to current statement // Return: // Returns 0 for failure, 1 for success. -int pdo_sqlsrv_stmt_close_cursor(pdo_stmt_t *stmt TSRMLS_DC) +int pdo_sqlsrv_stmt_close_cursor( _Inout_ pdo_stmt_t *stmt TSRMLS_DC ) { PDO_RESET_STMT_ERROR; PDO_VALIDATE_STMT; @@ -402,9 +403,9 @@ int pdo_sqlsrv_stmt_close_cursor(pdo_stmt_t *stmt TSRMLS_DC) // to "close the cursor" means we make the statement ready for execution again. To do this, we // skip all the result sets on the current statement. // If the statement has not been executed there are no next results to iterate over. - if ( driver_stmt->executed == true ) + if ( driver_stmt && driver_stmt->executed == true ) { - while( driver_stmt->past_next_result_end == false ) { + while( driver_stmt && driver_stmt->past_next_result_end == false ) { core_sqlsrv_next_result( driver_stmt TSRMLS_CC ); } } @@ -429,13 +430,14 @@ int pdo_sqlsrv_stmt_close_cursor(pdo_stmt_t *stmt TSRMLS_DC) // colno - Index of the column which requires description. // Return: // 0 for failure, 1 for success. -int pdo_sqlsrv_stmt_describe_col(pdo_stmt_t *stmt, int colno TSRMLS_DC) +int pdo_sqlsrv_stmt_describe_col( _Inout_ pdo_stmt_t *stmt, _In_ int colno TSRMLS_DC) { PDO_RESET_STMT_ERROR; PDO_VALIDATE_STMT; PDO_LOG_STMT_ENTRY; SQLSRV_ASSERT(( colno >= 0 ), "pdo_sqlsrv_stmt_describe_col: Column number should be >= 0." ); + SQLSRV_ASSERT( stmt->driver_data != NULL, "pdo_sqlsrv_stmt_describe_col: driver_data object was NULL." ); sqlsrv_malloc_auto_ptr core_meta_data; @@ -486,7 +488,7 @@ int pdo_sqlsrv_stmt_describe_col(pdo_stmt_t *stmt, int colno TSRMLS_DC) // *stmt - pointer to current statement // Return: // 1 for success. -int pdo_sqlsrv_stmt_dtor( pdo_stmt_t *stmt TSRMLS_DC ) +int pdo_sqlsrv_stmt_dtor( _Inout_ pdo_stmt_t *stmt TSRMLS_DC ) { pdo_sqlsrv_stmt* driver_stmt = reinterpret_cast( stmt->driver_data ); @@ -519,7 +521,7 @@ int pdo_sqlsrv_stmt_dtor( pdo_stmt_t *stmt TSRMLS_DC ) // *stmt - pointer to the current statement. // Return: // 0 for failure, 1 for success. -int pdo_sqlsrv_stmt_execute(pdo_stmt_t *stmt TSRMLS_DC) +int pdo_sqlsrv_stmt_execute( _Inout_ pdo_stmt_t *stmt TSRMLS_DC ) { PDO_RESET_STMT_ERROR; PDO_VALIDATE_STMT; @@ -532,7 +534,7 @@ int pdo_sqlsrv_stmt_execute(pdo_stmt_t *stmt TSRMLS_DC) // prepare for execution by flushing anything remaining in the result set if it wasn't already // done before binding parameters - if( driver_stmt->executed && !driver_stmt->past_next_result_end ) { + if( driver_stmt && driver_stmt->executed && !driver_stmt->past_next_result_end ) { while( driver_stmt->past_next_result_end == false ) { @@ -615,8 +617,8 @@ int pdo_sqlsrv_stmt_execute(pdo_stmt_t *stmt TSRMLS_DC) // offset - For orientations that use it, offset to move to. // Return: // 0 for failure, 1 for success. -int pdo_sqlsrv_stmt_fetch(pdo_stmt_t *stmt, enum pdo_fetch_orientation ori, - zend_long offset TSRMLS_DC) +int pdo_sqlsrv_stmt_fetch( _Inout_ pdo_stmt_t *stmt, _In_ enum pdo_fetch_orientation ori, + _In_ zend_long offset TSRMLS_DC) { PDO_RESET_STMT_ERROR; PDO_VALIDATE_STMT; @@ -709,8 +711,8 @@ int pdo_sqlsrv_stmt_fetch(pdo_stmt_t *stmt, enum pdo_fetch_orientation ori, // freeing the memory. // Return: // 0 for failure, 1 for success. -int pdo_sqlsrv_stmt_get_col_data(pdo_stmt_t *stmt, int colno, - char **ptr, size_t *len, int *caller_frees TSRMLS_DC) +int pdo_sqlsrv_stmt_get_col_data( _Inout_ pdo_stmt_t *stmt, _In_ int colno, + _Out_writes_bytes_opt_(*len) char **ptr, _Inout_ size_t *len, _Out_opt_ int *caller_frees TSRMLS_DC) { PDO_RESET_STMT_ERROR; PDO_VALIDATE_STMT; @@ -787,11 +789,12 @@ int pdo_sqlsrv_stmt_get_col_data(pdo_stmt_t *stmt, int colno, core_sqlsrv_get_field( driver_stmt, colno, sqlsrv_php_type, false, *(reinterpret_cast(ptr)), reinterpret_cast( len ), true, &sqlsrv_phptype_out TSRMLS_CC ); - zval* zval_ptr = reinterpret_cast( sqlsrv_malloc( sizeof( zval ))); - *zval_ptr = convert_to_zval( sqlsrv_phptype_out, reinterpret_cast( ptr ), *len ); - *ptr = reinterpret_cast( zval_ptr ); - - *len = sizeof( zval ); + if ( ptr ) { + zval* zval_ptr = reinterpret_cast( sqlsrv_malloc( sizeof( zval ))); + *zval_ptr = convert_to_zval( sqlsrv_phptype_out, reinterpret_cast( ptr ), *len ); + *ptr = reinterpret_cast( zval_ptr ); + *len = sizeof( zval ); + } return 1; } @@ -812,13 +815,14 @@ int pdo_sqlsrv_stmt_get_col_data(pdo_stmt_t *stmt, int colno, // val - Attribute value. // Return: // 0 for failure, 1 for success. -int pdo_sqlsrv_stmt_set_attr(pdo_stmt_t *stmt, zend_long attr, zval *val TSRMLS_DC) +int pdo_sqlsrv_stmt_set_attr( _Inout_ pdo_stmt_t *stmt, _In_ zend_long attr, _Inout_ zval *val TSRMLS_DC) { PDO_RESET_STMT_ERROR; PDO_VALIDATE_STMT; PDO_LOG_STMT_ENTRY; pdo_sqlsrv_stmt* driver_stmt = static_cast( stmt->driver_data ); + SQLSRV_ASSERT( driver_stmt != NULL, "pdo_sqlsrv_stmt_set_attr: driver_data object was null" ); try { @@ -877,7 +881,7 @@ int pdo_sqlsrv_stmt_set_attr(pdo_stmt_t *stmt, zend_long attr, zval *val TSRMLS_ // return_value - Attribute value. // Return: // 0 for failure, 1 for success. -int pdo_sqlsrv_stmt_get_attr( pdo_stmt_t *stmt, zend_long attr, zval *return_value TSRMLS_DC ) +int pdo_sqlsrv_stmt_get_attr( _Inout_ pdo_stmt_t *stmt, _In_ zend_long attr, _Inout_ zval *return_value TSRMLS_DC ) { PDO_RESET_STMT_ERROR; PDO_VALIDATE_STMT; @@ -961,7 +965,7 @@ int pdo_sqlsrv_stmt_get_attr( pdo_stmt_t *stmt, zend_long attr, zval *return_val // return_value - zval* consisting of the metadata. // Return: // 0 for failure, 1 for success. -int pdo_sqlsrv_stmt_get_col_meta(pdo_stmt_t *stmt, zend_long colno, zval *return_value TSRMLS_DC) +int pdo_sqlsrv_stmt_get_col_meta( _Inout_ pdo_stmt_t *stmt, _In_ zend_long colno, _Inout_ zval *return_value TSRMLS_DC) { PDO_RESET_STMT_ERROR; PDO_VALIDATE_STMT; @@ -975,6 +979,7 @@ int pdo_sqlsrv_stmt_get_col_meta(pdo_stmt_t *stmt, zend_long colno, zval *return sqlsrv_malloc_auto_ptr core_meta_data; sqlsrv_stmt* driver_stmt = static_cast( stmt->driver_data ); + SQLSRV_ASSERT( driver_stmt != NULL, "pdo_sqlsrv_stmt_get_col_meta: stmt->driver_data was null"); SQLSRV_ASSERT( colno >= 0 && colno < stmt->column_count, "pdo_sqlsrv_stmt_get_col_meta: invalid column number." ); @@ -1018,7 +1023,7 @@ int pdo_sqlsrv_stmt_get_col_meta(pdo_stmt_t *stmt, zend_long colno, zval *return &out_buff_len, &field_type_num TSRMLS_CC ); add_assoc_string( return_value, "table", table_name ); - if( stmt->columns[ colno ].param_type == PDO_PARAM_ZVAL ) { + if( stmt->columns && stmt->columns[ colno ].param_type == PDO_PARAM_ZVAL ) { add_assoc_long( return_value, "pdo_type", pdo_type ); } @@ -1048,7 +1053,7 @@ int pdo_sqlsrv_stmt_get_col_meta(pdo_stmt_t *stmt, zend_long colno, zval *return // stmt - PDOStatement object containing the result set. // Return: // 0 for failure, 1 for success. -int pdo_sqlsrv_stmt_next_rowset(pdo_stmt_t *stmt TSRMLS_DC) +int pdo_sqlsrv_stmt_next_rowset( _Inout_ pdo_stmt_t *stmt TSRMLS_DC ) { PDO_RESET_STMT_ERROR; PDO_VALIDATE_STMT; @@ -1103,8 +1108,8 @@ int pdo_sqlsrv_stmt_next_rowset(pdo_stmt_t *stmt TSRMLS_DC) // event_type - Event to bind a parameter // Return: // Returns 0 for failure, 1 for success. -int pdo_sqlsrv_stmt_param_hook(pdo_stmt_t *stmt, - struct pdo_bound_param_data *param, enum pdo_param_event event_type TSRMLS_DC) +int pdo_sqlsrv_stmt_param_hook( _Inout_ pdo_stmt_t *stmt, + _Inout_ struct pdo_bound_param_data *param, _In_ enum pdo_param_event event_type TSRMLS_DC) { PDO_RESET_STMT_ERROR; @@ -1306,7 +1311,7 @@ int pdo_sqlsrv_stmt_param_hook(pdo_stmt_t *stmt, // Returns a sqlsrv_phptype for a given SQL Server data type. -sqlsrv_phptype pdo_sqlsrv_stmt::sql_type_to_php_type( SQLINTEGER sql_type, SQLUINTEGER size, bool prefer_string_over_stream ) +sqlsrv_phptype pdo_sqlsrv_stmt::sql_type_to_php_type( _In_ SQLINTEGER sql_type, _In_ SQLUINTEGER size, _In_ bool prefer_string_over_stream ) { sqlsrv_phptype sqlsrv_phptype; int local_encoding = this->encoding(); diff --git a/source/pdo_sqlsrv/pdo_util.cpp b/source/pdo_sqlsrv/pdo_util.cpp index 63fabfb4..3e05ff1c 100644 --- a/source/pdo_sqlsrv/pdo_util.cpp +++ b/source/pdo_sqlsrv/pdo_util.cpp @@ -3,7 +3,7 @@ // // Contents: Utility functions used by both connection or statement functions // -// Microsoft Drivers 4.2 for PHP for SQL Server +// Microsoft Drivers 4.3 for PHP for SQL Server // Copyright(c) Microsoft Corporation // All rights reserved. // MIT License @@ -43,10 +43,10 @@ char log_msg[ LOG_MSG_SIZE ]; SQLCHAR INTERNAL_FORMAT_ERROR[] = "An internal error occurred. FormatMessage failed writing an error message."; // Returns a sqlsrv_error for a given error code. -sqlsrv_error_const* get_error_message(unsigned int sqlsrv_error_code); +sqlsrv_error_const* get_error_message( _In_opt_ unsigned int sqlsrv_error_code); // build the object and throw the PDO exception -void pdo_sqlsrv_throw_exception( sqlsrv_error_const* error TSRMLS_DC ); +void pdo_sqlsrv_throw_exception( _In_ sqlsrv_error_const* error TSRMLS_DC ); } @@ -385,8 +385,8 @@ pdo_error PDO_ERRORS[] = { }; // PDO error handler for the environment context. -bool pdo_sqlsrv_handle_env_error( sqlsrv_context& ctx, unsigned int sqlsrv_error_code, bool warning TSRMLS_DC, - va_list* print_args ) +bool pdo_sqlsrv_handle_env_error( _Inout_ sqlsrv_context& ctx, _In_opt_ unsigned int sqlsrv_error_code, _In_opt_ bool warning TSRMLS_DC, + _In_opt_ va_list* print_args ) { SQLSRV_ASSERT(( ctx != NULL ), "pdo_sqlsrv_handle_env_error: sqlsrv_context was null" ); pdo_dbh_t* dbh = reinterpret_cast( ctx.driver()); @@ -428,8 +428,8 @@ bool pdo_sqlsrv_handle_env_error( sqlsrv_context& ctx, unsigned int sqlsrv_error } // pdo error handler for the dbh context. -bool pdo_sqlsrv_handle_dbh_error( sqlsrv_context& ctx, unsigned int sqlsrv_error_code, bool warning TSRMLS_DC, - va_list* print_args ) +bool pdo_sqlsrv_handle_dbh_error( _Inout_ sqlsrv_context& ctx, _In_opt_ unsigned int sqlsrv_error_code, _In_opt_ bool warning TSRMLS_DC, + _In_opt_ va_list* print_args ) { pdo_dbh_t* dbh = reinterpret_cast( ctx.driver()); SQLSRV_ASSERT( dbh != NULL, "pdo_sqlsrv_handle_dbh_error: Null dbh passed" ); @@ -481,8 +481,8 @@ bool pdo_sqlsrv_handle_dbh_error( sqlsrv_context& ctx, unsigned int sqlsrv_error } // PDO error handler for the statement context. -bool pdo_sqlsrv_handle_stmt_error( sqlsrv_context& ctx, unsigned int sqlsrv_error_code, bool warning TSRMLS_DC, - va_list* print_args ) +bool pdo_sqlsrv_handle_stmt_error( _Inout_ sqlsrv_context& ctx, _In_opt_ unsigned int sqlsrv_error_code, _In_opt_ bool warning TSRMLS_DC, + _In_opt_ va_list* print_args ) { pdo_stmt_t* pdo_stmt = reinterpret_cast( ctx.driver()); SQLSRV_ASSERT( pdo_stmt != NULL && pdo_stmt->dbh != NULL, "pdo_sqlsrv_handle_stmt_error: Null statement or dbh passed" ); @@ -529,7 +529,7 @@ bool pdo_sqlsrv_handle_stmt_error( sqlsrv_context& ctx, unsigned int sqlsrv_erro // 1, native message // 2, SQLSTATE of the error (driver specific error messages are 'IMSSP') -void pdo_sqlsrv_retrieve_context_error( sqlsrv_error const* last_error, zval* pdo_zval ) +void pdo_sqlsrv_retrieve_context_error( _In_ sqlsrv_error const* last_error, _Out_ zval* pdo_zval ) { if( last_error ) { // SQLSTATE is already present in the zval. @@ -539,7 +539,7 @@ void pdo_sqlsrv_retrieve_context_error( sqlsrv_error const* last_error, zval* pd } // Formats the error message and writes to the php error log. -void pdo_sqlsrv_log( unsigned int severity TSRMLS_DC, const char* msg, va_list* print_args ) +void pdo_sqlsrv_log( _In_opt_ unsigned int severity TSRMLS_DC, _In_opt_ const char* msg, _In_opt_ va_list* print_args ) { if( (severity & PDO_SQLSRV_G( log_severity )) == 0 ) { return; @@ -560,7 +560,7 @@ namespace { // Workaround for name collision problem between the SQLSRV and PDO_SQLSRV drivers on Mac // Place get_error_message into the anonymous namespace in pdo_util.cpp -sqlsrv_error_const* get_error_message(unsigned int sqlsrv_error_code) { +sqlsrv_error_const* get_error_message( _In_opt_ unsigned int sqlsrv_error_code) { sqlsrv_error_const *error_message = NULL; int zr = (error_message = reinterpret_cast(zend_hash_index_find_ptr(g_pdo_errors_ht, sqlsrv_error_code))) != NULL ? SUCCESS : FAILURE; @@ -573,7 +573,7 @@ sqlsrv_error_const* get_error_message(unsigned int sqlsrv_error_code) { return error_message; } -void pdo_sqlsrv_throw_exception( sqlsrv_error_const* error TSRMLS_DC ) +void pdo_sqlsrv_throw_exception( _In_ sqlsrv_error_const* error TSRMLS_DC ) { zval ex_obj; ZVAL_UNDEF( &ex_obj ); diff --git a/source/pdo_sqlsrv/php_pdo_sqlsrv.h b/source/pdo_sqlsrv/php_pdo_sqlsrv.h index 22edd00a..36b0eddf 100644 --- a/source/pdo_sqlsrv/php_pdo_sqlsrv.h +++ b/source/pdo_sqlsrv/php_pdo_sqlsrv.h @@ -6,7 +6,7 @@ // // Contents: Declarations for the extension // -// Microsoft Drivers 4.2 for PHP for SQL Server +// Microsoft Drivers 4.3 for PHP for SQL Server // Copyright(c) Microsoft Corporation // All rights reserved. // MIT License @@ -137,9 +137,9 @@ class string_parser HashTable* element_ht; inline bool next(void); inline bool is_eos(void); - inline bool is_white_space(char c); + inline bool is_white_space( _In_ char c ); bool discard_white_spaces(void); - void add_key_value_pair(const char* value, int len TSRMLS_DC); + void add_key_value_pair( _In_reads_(len) const char* value, _In_ int len TSRMLS_DC ); }; //********************************************************************************************************************************* @@ -162,14 +162,14 @@ class conn_string_parser : private string_parser private: const char* current_key_name; - int discard_trailing_white_spaces(const char* str, int len); - void validate_key(const char *key, int key_len TSRMLS_DC); + int discard_trailing_white_spaces( _In_reads_(len) const char* str, _Inout_ int len ); + void validate_key( _In_reads_(key_len) const char *key, _Inout_ int key_len TSRMLS_DC); protected: - void add_key_value_pair(const char* value, int len TSRMLS_DC); + void add_key_value_pair( _In_reads_(len) const char* value, _In_ int len TSRMLS_DC); public: - conn_string_parser( sqlsrv_context& ctx, const char* dsn, int len, _Inout_ HashTable* conn_options_ht ); + conn_string_parser( _In_ sqlsrv_context& ctx, _In_ const char* dsn, _In_ int len, _In_ HashTable* conn_options_ht ); void parse_conn_string( TSRMLS_D ); }; @@ -183,8 +183,8 @@ class sql_string_parser : private string_parser private: bool is_placeholder_char(char); public: - void add_key_int_value_pair(unsigned int value TSRMLS_DC); - sql_string_parser(sqlsrv_context& ctx, const char* sql_str, int len, _Inout_ HashTable* placeholder_ht); + void add_key_int_value_pair( _In_ unsigned int value TSRMLS_DC ); + sql_string_parser(_In_ sqlsrv_context& ctx, _In_ const char* sql_str, _In_ int len, _In_ HashTable* placeholder_ht); void parse_sql_string(TSRMLS_D); }; @@ -193,7 +193,7 @@ class sql_string_parser : private string_parser //********************************************************************************************************************************* extern const connection_option PDO_CONN_OPTS[]; -int pdo_sqlsrv_db_handle_factory(pdo_dbh_t *dbh, zval *driver_options TSRMLS_DC); +int pdo_sqlsrv_db_handle_factory( _Inout_ pdo_dbh_t *dbh, _In_opt_ zval *driver_options TSRMLS_DC); // a core layer pdo dbh object. This object inherits and overrides the statement factory struct pdo_sqlsrv_dbh : public sqlsrv_conn { @@ -204,7 +204,7 @@ struct pdo_sqlsrv_dbh : public sqlsrv_conn { zend_long client_buffer_max_size; bool fetch_numeric; - pdo_sqlsrv_dbh( SQLHANDLE h, error_callback e, void* driver TSRMLS_DC ); + pdo_sqlsrv_dbh( _In_ SQLHANDLE h, _In_ error_callback e, _In_ void* driver TSRMLS_DC ); }; @@ -214,31 +214,31 @@ struct pdo_sqlsrv_dbh : public sqlsrv_conn { struct stmt_option_encoding : public stmt_option_functor { - virtual void operator()( sqlsrv_stmt* stmt, stmt_option const* /*opt*/, zval* value_z TSRMLS_DC ); + virtual void operator()( _Inout_ sqlsrv_stmt* stmt, stmt_option const* /*opt*/, _In_ zval* value_z TSRMLS_DC ); }; struct stmt_option_pdo_scrollable : public stmt_option_functor { - virtual void operator()( sqlsrv_stmt* stmt, stmt_option const* /*opt*/, zval* value_z TSRMLS_DC ); + virtual void operator()( _Inout_ sqlsrv_stmt* stmt, stmt_option const* /*opt*/, _In_ zval* value_z TSRMLS_DC ); }; struct stmt_option_direct_query : public stmt_option_functor { - virtual void operator()( sqlsrv_stmt* stmt, stmt_option const* /*opt*/, zval* value_z TSRMLS_DC ); + virtual void operator()( _Inout_ sqlsrv_stmt* stmt, stmt_option const* /*opt*/, _In_ zval* value_z TSRMLS_DC ); }; struct stmt_option_cursor_scroll_type : public stmt_option_functor { - virtual void operator()( sqlsrv_stmt* stmt, stmt_option const* /*opt*/, zval* value_z TSRMLS_DC ); + virtual void operator()( _Inout_ sqlsrv_stmt* stmt, stmt_option const* /*opt*/, _In_ zval* value_z TSRMLS_DC ); }; struct stmt_option_emulate_prepares : public stmt_option_functor { - virtual void operator()( sqlsrv_stmt* stmt, stmt_option const* /*opt*/, zval* value_z TSRMLS_DC ); + virtual void operator()( _Inout_ sqlsrv_stmt* stmt, stmt_option const* /*opt*/, _In_ zval* value_z TSRMLS_DC ); }; struct stmt_option_fetch_numeric : public stmt_option_functor { - virtual void operator()( sqlsrv_stmt* stmt, stmt_option const* /*opt*/, zval* value_z TSRMLS_DC ); + virtual void operator()( _Inout_ sqlsrv_stmt* stmt, stmt_option const* /*opt*/, _In_ zval* value_z TSRMLS_DC ); }; extern struct pdo_stmt_methods pdo_sqlsrv_stmt_methods; @@ -246,7 +246,7 @@ extern struct pdo_stmt_methods pdo_sqlsrv_stmt_methods; // a core layer pdo stmt object. This object inherits and overrides the callbacks necessary struct pdo_sqlsrv_stmt : public sqlsrv_stmt { - pdo_sqlsrv_stmt( sqlsrv_conn* c, SQLHANDLE handle, error_callback e, void* drv TSRMLS_DC ) : + pdo_sqlsrv_stmt( _In_ sqlsrv_conn* c, _In_ SQLHANDLE handle, _In_ error_callback e, _In_ void* drv TSRMLS_DC ) : sqlsrv_stmt( c, handle, e, drv TSRMLS_CC ), direct_query( false ), direct_query_subst_string( NULL ), @@ -264,7 +264,7 @@ struct pdo_sqlsrv_stmt : public sqlsrv_stmt { // driver specific conversion rules from a SQL Server/ODBC type to one of the SQLSRV_PHPTYPE_* constants // for PDO, everything is a string, so we return SQLSRV_PHPTYPE_STRING for all SQL types - virtual sqlsrv_phptype sql_type_to_php_type( SQLINTEGER sql_type, SQLUINTEGER size, bool prefer_string_to_stream ); + virtual sqlsrv_phptype sql_type_to_php_type( _In_ SQLINTEGER sql_type, _In_ SQLUINTEGER size, _In_ bool prefer_string_to_stream ); bool direct_query; // flag set if the query should be executed directly or prepared const char* direct_query_subst_string; // if the query is direct, hold the substitution string if using named parameters @@ -292,18 +292,18 @@ struct pdo_error { // called when an error occurs in the core layer. These routines are set as the error_callback in a // context. The context is passed to this function since it contains the function -bool pdo_sqlsrv_handle_env_error( sqlsrv_context& ctx, unsigned int sqlsrv_error_code, bool warning TSRMLS_DC, - va_list* print_args ); -bool pdo_sqlsrv_handle_dbh_error( sqlsrv_context& ctx, unsigned int sqlsrv_error_code, bool warning TSRMLS_DC, - va_list* print_args ); -bool pdo_sqlsrv_handle_stmt_error( sqlsrv_context& ctx, unsigned int sqlsrv_error_code, bool warning TSRMLS_DC, - va_list* print_args ); +bool pdo_sqlsrv_handle_env_error( _Inout_ sqlsrv_context& ctx, _In_opt_ unsigned int sqlsrv_error_code, _In_opt_ bool warning TSRMLS_DC, + _In_opt_ va_list* print_args ); +bool pdo_sqlsrv_handle_dbh_error( _Inout_ sqlsrv_context& ctx, _In_opt_ unsigned int sqlsrv_error_code, _In_opt_ bool warning TSRMLS_DC, + _In_opt_ va_list* print_args ); +bool pdo_sqlsrv_handle_stmt_error( _Inout_ sqlsrv_context& ctx, _In_opt_ unsigned int sqlsrv_error_code, _In_opt_ bool warning TSRMLS_DC, + _In_opt_ va_list* print_args ); // common routine to transfer a sqlsrv_context's error to a PDO zval -void pdo_sqlsrv_retrieve_context_error( sqlsrv_error const* last_error, zval* pdo_zval ); +void pdo_sqlsrv_retrieve_context_error( _In_ sqlsrv_error const* last_error, _Out_ zval* pdo_zval ); // reset the errors from the last operation -inline void pdo_reset_dbh_error( pdo_dbh_t* dbh TSRMLS_DC ) +inline void pdo_reset_dbh_error( _Inout_ pdo_dbh_t* dbh TSRMLS_DC ) { strcpy_s( dbh->error_code, sizeof( dbh->error_code ), "00000" ); // 00000 means no error @@ -328,7 +328,7 @@ inline void pdo_reset_dbh_error( pdo_dbh_t* dbh TSRMLS_DC ) #define PDO_RESET_DBH_ERROR pdo_reset_dbh_error( dbh TSRMLS_CC ); -inline void pdo_reset_stmt_error( pdo_stmt_t* stmt ) +inline void pdo_reset_stmt_error( _Inout_ pdo_stmt_t* stmt ) { strcpy_s( stmt->error_code, sizeof( stmt->error_code ), "00000" ); // 00000 means no error @@ -415,7 +415,7 @@ namespace pdo { } // namespace pdo // logger for pdo_sqlsrv called by the core layer when it wants to log something with the LOG macro -void pdo_sqlsrv_log( unsigned int severity TSRMLS_DC, const char* msg, va_list* print_args ); +void pdo_sqlsrv_log( _In_opt_ unsigned int severity TSRMLS_DC, _In_opt_ const char* msg, _In_opt_ va_list* print_args ); #endif /* PHP_PDO_SQLSRV_H */ diff --git a/source/pdo_sqlsrv/template.rc b/source/pdo_sqlsrv/template.rc index ec61efa6..63326055 100644 --- a/source/pdo_sqlsrv/template.rc +++ b/source/pdo_sqlsrv/template.rc @@ -3,7 +3,7 @@ // // Contents: Version resource // -// Microsoft Drivers 4.2 for PHP for SQL Server +// Microsoft Drivers 4.3 for PHP for SQL Server // Copyright(c) Microsoft Corporation // All rights reserved. // MIT License diff --git a/source/shared/FormattedPrint.cpp b/source/shared/FormattedPrint.cpp index 5b0c5aef..ba5520bd 100644 --- a/source/shared/FormattedPrint.cpp +++ b/source/shared/FormattedPrint.cpp @@ -6,7 +6,7 @@ // Contents: Contains functions for handling Windows format strings // and UTF-16 on non-Windows platforms // -// Microsoft Drivers 4.2 for PHP for SQL Server +// Microsoft Drivers 4.3 for PHP for SQL Server // Copyright(c) Microsoft Corporation // All rights reserved. // MIT License diff --git a/source/shared/FormattedPrint.h b/source/shared/FormattedPrint.h index d1ee9708..d789afa7 100644 --- a/source/shared/FormattedPrint.h +++ b/source/shared/FormattedPrint.h @@ -4,7 +4,7 @@ // Contents: Contains functions for handling Windows format strings // and UTF-16 on non-Windows platforms // -// Microsoft Drivers 4.2 for PHP for SQL Server +// Microsoft Drivers 4.3 for PHP for SQL Server // Copyright(c) Microsoft Corporation // All rights reserved. // MIT License diff --git a/source/shared/StringFunctions.cpp b/source/shared/StringFunctions.cpp index 68016c14..ca2ec89b 100644 --- a/source/shared/StringFunctions.cpp +++ b/source/shared/StringFunctions.cpp @@ -3,7 +3,7 @@ // // Contents: Contains functions for handling UTF-16 on non-Windows platforms // -// Microsoft Drivers 4.2 for PHP for SQL Server +// Microsoft Drivers 4.3 for PHP for SQL Server // Copyright(c) Microsoft Corporation // All rights reserved. // MIT License diff --git a/source/shared/StringFunctions.h b/source/shared/StringFunctions.h index fdec4291..323d308a 100644 --- a/source/shared/StringFunctions.h +++ b/source/shared/StringFunctions.h @@ -3,7 +3,7 @@ // // Contents: Contains functions for handling UTF-16 on non-Windows platforms // -// Microsoft Drivers 4.2 for PHP for SQL Server +// Microsoft Drivers 4.3 for PHP for SQL Server // Copyright(c) Microsoft Corporation // All rights reserved. // MIT License diff --git a/source/shared/core_conn.cpp b/source/shared/core_conn.cpp index a459c16d..4b488b16 100644 --- a/source/shared/core_conn.cpp +++ b/source/shared/core_conn.cpp @@ -3,7 +3,7 @@ // // Contents: Core routines that use connection handles shared between sqlsrv and pdo_sqlsrv // -// Microsoft Drivers 4.1 for PHP for SQL Server +// Microsoft Drivers 4.3 for PHP for SQL Server // Copyright(c) Microsoft Corporation // All rights reserved. // MIT License @@ -63,14 +63,14 @@ const char CONNECTION_OPTION_MARS_ON[] = "MARS_Connection={Yes};"; // *** internal function prototypes *** -void build_connection_string_and_set_conn_attr( sqlsrv_conn* conn, const char* server, const char* uid, const char* pwd, - HashTable* options_ht, const connection_option valid_conn_opts[], +void build_connection_string_and_set_conn_attr( _Inout_ sqlsrv_conn* conn, _Inout_z_ const char* server, _Inout_opt_z_ const char* uid, _Inout_opt_z_ const char* pwd, + _Inout_opt_ HashTable* options_ht, _In_ const connection_option valid_conn_opts[], void* driver,_Inout_ std::string& connection_string TSRMLS_DC ); -void determine_server_version( sqlsrv_conn* conn TSRMLS_DC ); +void determine_server_version( _Inout_ sqlsrv_conn* conn TSRMLS_DC ); const char* get_processor_arch( void ); -void get_server_version( sqlsrv_conn* conn, char** server_version, SQLSMALLINT& len TSRMLS_DC ); -connection_option const* get_connection_option( sqlsrv_conn* conn, const char* key, SQLULEN key_len TSRMLS_DC ); -void common_conn_str_append_func( const char* odbc_name, const char* val, size_t val_len, std::string& conn_str TSRMLS_DC ); +void get_server_version( _Inout_ sqlsrv_conn* conn, _Outptr_result_buffer_(len) char** server_version, _Out_ SQLSMALLINT& len TSRMLS_DC ); +connection_option const* get_connection_option( sqlsrv_conn* conn, _In_ const char* key, _In_ SQLULEN key_len TSRMLS_DC ); +void common_conn_str_append_func( _In_z_ const char* odbc_name, _In_reads_(val_len) const char* val, _Inout_ size_t val_len, _Inout_ std::string& conn_str TSRMLS_DC ); } @@ -89,10 +89,10 @@ void common_conn_str_append_func( const char* odbc_name, const char* val, size_t // Return // A sqlsrv_conn structure. An exception is thrown if an error occurs -sqlsrv_conn* core_sqlsrv_connect( sqlsrv_context& henv_cp, sqlsrv_context& henv_ncp, driver_conn_factory conn_factory, - const char* server, const char* uid, const char* pwd, - HashTable* options_ht, error_callback err, const connection_option valid_conn_opts[], - void* driver, const char* driver_func TSRMLS_DC ) +sqlsrv_conn* core_sqlsrv_connect( _In_ sqlsrv_context& henv_cp, _In_ sqlsrv_context& henv_ncp, _In_ driver_conn_factory conn_factory, + _Inout_z_ const char* server, _Inout_opt_z_ const char* uid, _Inout_opt_z_ const char* pwd, + _Inout_opt_ HashTable* options_ht, _In_ error_callback err, _In_ const connection_option valid_conn_opts[], + _In_ void* driver, _In_z_ const char* driver_func TSRMLS_DC ) { SQLRETURN r; @@ -181,16 +181,16 @@ sqlsrv_conn* core_sqlsrv_connect( sqlsrv_context& henv_cp, sqlsrv_context& henv_ memset( const_cast(conn_str.c_str()), 0, conn_str.size()); memset( wconn_string, 0, wconn_len * sizeof( SQLWCHAR )); // wconn_len is the number of characters, not bytes conn_str.clear(); - if (!SQL_SUCCEEDED(r)) { + if ( !SQL_SUCCEEDED( r )) { SQLCHAR state[SQL_SQLSTATE_BUFSIZE]; SQLSMALLINT len; - SQLRETURN r = SQLGetDiagField(SQL_HANDLE_DBC, conn->handle(), 1, SQL_DIAG_SQLSTATE, state, SQL_SQLSTATE_BUFSIZE, &len); - bool missing_driver_error = (SQL_SUCCEEDED(r) && state[0] == 'I' && state[1] == 'M' && state[2] == '0' && state[3] == '0' && state[4] == '2'); + SQLRETURN sr = SQLGetDiagField( SQL_HANDLE_DBC, conn->handle(), 1, SQL_DIAG_SQLSTATE, state, SQL_SQLSTATE_BUFSIZE, &len ); + bool missing_driver_error = ( SQL_SUCCEEDED( sr ) && state[0] == 'I' && state[1] == 'M' && state[2] == '0' && state[3] == '0' && state[4] == '2' ); // if it's a IM002, meaning that the correct ODBC driver is not installed - CHECK_CUSTOM_ERROR(missing_driver_error && (i == DRIVER_VERSION::MAX), conn, SQLSRV_ERROR_DRIVER_NOT_INSTALLED, get_processor_arch()) { + CHECK_CUSTOM_ERROR(missing_driver_error && ( i == DRIVER_VERSION::MAX ), conn, SQLSRV_ERROR_DRIVER_NOT_INSTALLED, get_processor_arch()) { throw core::CoreException(); } - if (!missing_driver_error) { + if ( !missing_driver_error ) { break; } } @@ -268,7 +268,7 @@ sqlsrv_conn* core_sqlsrv_connect( sqlsrv_context& henv_cp, sqlsrv_context& henv_ // Parameters: // sqlsrv_conn*: The connection with which the transaction is associated. -void core_sqlsrv_begin_transaction( sqlsrv_conn* conn TSRMLS_DC ) +void core_sqlsrv_begin_transaction( _Inout_ sqlsrv_conn* conn TSRMLS_DC ) { try { @@ -291,7 +291,7 @@ void core_sqlsrv_begin_transaction( sqlsrv_conn* conn TSRMLS_DC ) // Parameters: // sqlsrv_conn*: The connection on which the transaction is active. -void core_sqlsrv_commit( sqlsrv_conn* conn TSRMLS_DC ) +void core_sqlsrv_commit( _Inout_ sqlsrv_conn* conn TSRMLS_DC ) { try { @@ -316,7 +316,7 @@ void core_sqlsrv_commit( sqlsrv_conn* conn TSRMLS_DC ) // Parameters: // sqlsrv_conn*: The connection on which the transaction is active. -void core_sqlsrv_rollback( sqlsrv_conn* conn TSRMLS_DC ) +void core_sqlsrv_rollback( _Inout_ sqlsrv_conn* conn TSRMLS_DC ) { try { @@ -337,7 +337,7 @@ void core_sqlsrv_rollback( sqlsrv_conn* conn TSRMLS_DC ) // Called when a connection resource is destroyed by the Zend engine. // Parameters: // conn - The current active connection. -void core_sqlsrv_close( sqlsrv_conn* conn TSRMLS_DC ) +void core_sqlsrv_close( _Inout_opt_ sqlsrv_conn* conn TSRMLS_DC ) { // if the connection wasn't successful, just return. if( conn == NULL ) @@ -371,7 +371,7 @@ void core_sqlsrv_close( sqlsrv_conn* conn TSRMLS_DC ) // sql - T-SQL command to prepare // sql_len - length of the T-SQL string -void core_sqlsrv_prepare( sqlsrv_stmt* stmt, const char* sql, SQLLEN sql_len TSRMLS_DC ) +void core_sqlsrv_prepare( _Inout_ sqlsrv_stmt* stmt, _In_reads_bytes_(sql_len) const char* sql, _In_ SQLLEN sql_len TSRMLS_DC ) { try { @@ -414,7 +414,7 @@ void core_sqlsrv_prepare( sqlsrv_stmt* stmt, const char* sql, SQLLEN sql_len TSR // conn - The connection resource by which the client and server are connected. // *server_version - zval for returning results. -void core_sqlsrv_get_server_version( sqlsrv_conn* conn, _Out_ zval *server_version TSRMLS_DC ) +void core_sqlsrv_get_server_version( _Inout_ sqlsrv_conn* conn, _Inout_ zval* server_version TSRMLS_DC ) { try { @@ -441,7 +441,7 @@ void core_sqlsrv_get_server_version( sqlsrv_conn* conn, _Out_ zval *server_versi // conn - The connection resource by which the client and server are connected. // *server_info - zval for returning results. -void core_sqlsrv_get_server_info( sqlsrv_conn* conn, _Out_ zval *server_info TSRMLS_DC ) +void core_sqlsrv_get_server_info( _Inout_ sqlsrv_conn* conn, _Out_ zval *server_info TSRMLS_DC ) { try { @@ -481,7 +481,7 @@ void core_sqlsrv_get_server_info( sqlsrv_conn* conn, _Out_ zval *server_info TSR // conn - The connection resource by which the client and server are connected. // *client_info - zval for returning the results. -void core_sqlsrv_get_client_info( sqlsrv_conn* conn, _Out_ zval *client_info TSRMLS_DC ) +void core_sqlsrv_get_client_info( _Inout_ sqlsrv_conn* conn, _Out_ zval *client_info TSRMLS_DC ) { try { @@ -527,7 +527,7 @@ void core_sqlsrv_get_client_info( sqlsrv_conn* conn, _Out_ zval *client_info TSR // Properly escaped means that any '}' should be escaped by a prior '}'. It is assumed that // the value will be surrounded by { and } by the caller after it has been validated -bool core_is_conn_opt_value_escaped( const char* value, size_t value_len ) +bool core_is_conn_opt_value_escaped( _Inout_ const char* value, _Inout_ size_t value_len ) { // if the value is already quoted, then only analyse the part inside the quotes and return it as // unquoted since we quote it when adding it to the connection string. @@ -552,7 +552,7 @@ bool core_is_conn_opt_value_escaped( const char* value, size_t value_len ) // core_is_authentication_option_valid // if the option for the authentication is valid, returns true. This returns false otherwise. -bool core_is_authentication_option_valid(const char* value, size_t value_len) +bool core_is_authentication_option_valid( _In_z_ const char* value, _In_ size_t value_len) { if (value_len <= 0) return false; @@ -569,8 +569,8 @@ bool core_is_authentication_option_valid(const char* value, size_t value_len) namespace { -connection_option const* get_connection_option( sqlsrv_conn* conn, SQLULEN key, - const connection_option conn_opts[] TSRMLS_DC ) +connection_option const* get_connection_option( sqlsrv_conn* conn, _In_ SQLULEN key, + _In_ const connection_option conn_opts[] TSRMLS_DC ) { for( int opt_idx = 0; conn_opts[ opt_idx ].conn_option_key != SQLSRV_CONN_OPTION_INVALID; ++opt_idx ) { @@ -589,9 +589,9 @@ connection_option const* get_connection_option( sqlsrv_conn* conn, SQLULEN key, // passed to the connection, and then break them out ourselves and either set attributes or put the // option in the connection string. -void build_connection_string_and_set_conn_attr( sqlsrv_conn* conn, const char* server, const char* uid, const char* pwd, - HashTable* options, const connection_option valid_conn_opts[], - void* driver,_Inout_ std::string& connection_string TSRMLS_DC ) +void build_connection_string_and_set_conn_attr( _Inout_ sqlsrv_conn* conn, _Inout_z_ const char* server, _Inout_opt_z_ const char* uid, _Inout_opt_z_ const char* pwd, + _Inout_opt_ HashTable* options, _In_ const connection_option valid_conn_opts[], + void* driver, _Inout_ std::string& connection_string TSRMLS_DC ) { bool mars_mentioned = false; connection_option const* conn_opt; @@ -682,7 +682,7 @@ void build_connection_string_and_set_conn_attr( sqlsrv_conn* conn, const char* s // get_server_version // Helper function which returns the version of the SQL Server we are connected to. -void get_server_version( sqlsrv_conn* conn, char** server_version, SQLSMALLINT& len TSRMLS_DC ) +void get_server_version( _Inout_ sqlsrv_conn* conn, _Outptr_result_buffer_(len) char** server_version, _Out_ SQLSMALLINT& len TSRMLS_DC ) { try { @@ -752,7 +752,7 @@ const char* get_processor_arch( void ) // Exception is thrown when the server version is either undetermined // or is invalid (< 2000). -void determine_server_version( sqlsrv_conn* conn TSRMLS_DC ) +void determine_server_version( _Inout_ sqlsrv_conn* conn TSRMLS_DC ) { SQLSMALLINT info_len; char p[ INFO_BUFFER_LEN ]; @@ -776,7 +776,7 @@ void determine_server_version( sqlsrv_conn* conn TSRMLS_DC ) conn->server_version = version_major; } -void common_conn_str_append_func( const char* odbc_name, const char* val, size_t val_len, std::string& conn_str TSRMLS_DC ) +void common_conn_str_append_func( _In_z_ const char* odbc_name, _In_reads_(val_len) const char* val, _Inout_ size_t val_len, _Inout_ std::string& conn_str TSRMLS_DC ) { // wrap a connection option in a quote. It is presumed that any character that need to be escaped will // be escaped, such as a closing }. @@ -795,7 +795,7 @@ void common_conn_str_append_func( const char* odbc_name, const char* val, size_t } // namespace // simply add the parsed value to the connection string -void conn_str_append_func::func( connection_option const* option, zval* value, sqlsrv_conn* /*conn*/, std::string& conn_str +void conn_str_append_func::func( _In_ connection_option const* option, _In_ zval* value, sqlsrv_conn* /*conn*/, _Inout_ std::string& conn_str TSRMLS_DC ) { const char* val_str = Z_STRVAL_P( value ); @@ -815,7 +815,7 @@ void conn_null_func::func( connection_option const* /*option*/, zval* /*value*/, // Values = ("true" or "1") are treated as true values. Everything else is treated as false. // Returns 1 for true and 0 for false. -size_t core_str_zval_is_true( zval* value_z ) +size_t core_str_zval_is_true( _Inout_ zval* value_z ) { SQLSRV_ASSERT( Z_TYPE_P( value_z ) == IS_STRING, "core_str_zval_is_true: This function only accepts zval of type string." ); @@ -824,7 +824,7 @@ size_t core_str_zval_is_true( zval* value_z ) // strip any whitespace at the end (whitespace is the same value in ASCII and UTF-8) size_t last_char = val_len - 1; - while( isspace( value_in[ last_char ] )) { + while( isspace(( unsigned char )value_in[ last_char ] )) { value_in[ last_char ] = '\0'; val_len = last_char; --last_char; diff --git a/source/shared/core_init.cpp b/source/shared/core_init.cpp index 4bf80167..89f75a84 100644 --- a/source/shared/core_init.cpp +++ b/source/shared/core_init.cpp @@ -3,7 +3,7 @@ // // Contents: common initialization routines shared by PDO and sqlsrv // -// Microsoft Drivers 4.1 for PHP for SQL Server +// Microsoft Drivers 4.3 for PHP for SQL Server // Copyright(c) Microsoft Corporation // All rights reserved. // MIT License @@ -19,10 +19,9 @@ #include "core_sqlsrv.h" - // module global variables (initialized in minit and freed in mshutdown) HMODULE g_sqlsrv_hmodule = NULL; -OSVERSIONINFO g_osversion; +bool isVistaOrGreater; // core_sqlsrv_minit @@ -35,7 +34,7 @@ OSVERSIONINFO g_osversion; // henv_cp - Environment handle for pooled connection. // henv_ncp - Environment handle for non-pooled connection. // err - Driver specific error handler which handles any errors during initialization. -void core_sqlsrv_minit( sqlsrv_context** henv_cp, sqlsrv_context** henv_ncp, error_callback err, const char* driver_func TSRMLS_DC ) +void core_sqlsrv_minit( _Outptr_ sqlsrv_context** henv_cp, _Inout_ sqlsrv_context** henv_ncp, _In_ error_callback err, _In_z_ const char* driver_func TSRMLS_DC ) { SQLSRV_STATIC_ASSERT( sizeof( sqlsrv_sqltype ) == sizeof( zend_long ) ); SQLSRV_STATIC_ASSERT( sizeof( sqlsrv_phptype ) == sizeof( zend_long )); @@ -47,12 +46,7 @@ void core_sqlsrv_minit( sqlsrv_context** henv_cp, sqlsrv_context** henv_ncp, err #ifdef _WIN32 // get the version of the OS we're running on. For now this governs certain flags used by // WideCharToMultiByte. It might be relevant to other things in the future. - g_osversion.dwOSVersionInfoSize = sizeof( g_osversion ); - BOOL ver_return = GetVersionEx( &g_osversion ); - if( !ver_return ) { - LOG( SEV_ERROR, "Failed to retrieve Windows version information." ); - throw core::CoreException(); - } + isVistaOrGreater = IsWindowsVistaOrGreater( ); #endif //_WIN32 SQLHANDLE henv = SQL_NULL_HANDLE; @@ -142,7 +136,7 @@ void core_sqlsrv_minit( sqlsrv_context** henv_cp, sqlsrv_context** henv_ncp, err // Parameters: // henv_cp - Pooled environment handle. // henv_ncp - Non-pooled environment handle. -void core_sqlsrv_mshutdown( sqlsrv_context& henv_cp, sqlsrv_context& henv_ncp ) +void core_sqlsrv_mshutdown( _Inout_ sqlsrv_context& henv_cp, _Inout_ sqlsrv_context& henv_ncp ) { if( henv_ncp != SQL_NULL_HANDLE ) { @@ -162,7 +156,7 @@ void core_sqlsrv_mshutdown( sqlsrv_context& henv_cp, sqlsrv_context& henv_ncp ) // DllMain for the extension. #ifdef _WIN32 -BOOL WINAPI DllMain( HINSTANCE hinstDLL, DWORD fdwReason, LPVOID ) +BOOL WINAPI DllMain( _In_ HINSTANCE hinstDLL, _In_ DWORD fdwReason, LPVOID ) { switch( fdwReason ) { case DLL_PROCESS_ATTACH: diff --git a/source/shared/core_results.cpp b/source/shared/core_results.cpp index 7c2b1bfd..e28cbbed 100644 --- a/source/shared/core_results.cpp +++ b/source/shared/core_results.cpp @@ -3,7 +3,7 @@ // // Contents: Result sets // -// Microsoft Drivers 4.1 for PHP for SQL Server +// Microsoft Drivers 4.3 for PHP for SQL Server // Copyright(c) Microsoft Corporation // All rights reserved. // MIT License @@ -51,7 +51,7 @@ const int INITIAL_FIELD_STRING_LEN = 256; // base allocation size when retrie // return an integral type rounded up to a certain number template -T align_to( T number ) +T align_to( _In_ T number ) { DEBUG_SQLSRV_ASSERT( (number + align) > number, "Number to align overflowed" ); return ((number % align) == 0) ? number : (number + align - (number % align)); @@ -59,14 +59,14 @@ T align_to( T number ) // return a pointer address aligned to a certain address boundary template -T* align_to( T* ptr ) +T* align_to( _In_ T* ptr ) { size_t p_value = (size_t) ptr; return align_to( p_value ); } // set the nth bit of the bitstream starting at ptr -void set_bit( void* ptr, unsigned int bit ) +void set_bit( _In_ void* ptr, _In_ unsigned int bit ) { unsigned char* null_bits = reinterpret_cast( ptr ); null_bits += bit >> 3; @@ -74,7 +74,7 @@ void set_bit( void* ptr, unsigned int bit ) } // retrieve the nth bit from the bitstream starting at ptr -bool get_bit( void* ptr, unsigned int bit ) +bool get_bit( _In_ void* ptr, _In_ unsigned int bit ) { unsigned char* null_bits = reinterpret_cast( ptr ); null_bits += bit >> 3; @@ -82,13 +82,13 @@ bool get_bit( void* ptr, unsigned int bit ) } // read in LOB field during buffered result creation -SQLPOINTER read_lob_field( sqlsrv_stmt* stmt, SQLUSMALLINT field_index, sqlsrv_buffered_result_set::meta_data& meta, - zend_long mem_used TSRMLS_DC ); +SQLPOINTER read_lob_field( _Inout_ sqlsrv_stmt* stmt, _In_ SQLUSMALLINT field_index, _In_ sqlsrv_buffered_result_set::meta_data& meta, + _In_ zend_long mem_used TSRMLS_DC ); // dtor for each row in the cache -void cache_row_dtor(zval* data); +void cache_row_dtor( _In_ zval* data ); -size_t get_float_precision(SQLLEN buffer_length, size_t unitsize) +size_t get_float_precision( _In_ SQLLEN buffer_length, _In_ size_t unitsize) { SQLSRV_ASSERT(unitsize != 0, "Invalid unit size!"); @@ -121,7 +121,7 @@ size_t get_float_precision(SQLLEN buffer_length, size_t unitsize) #ifndef _WIN32 // copy the number into a char string using the num_put facet template -SQLRETURN get_string_from_stream( Number number_data, std::basic_string &str_num, size_t precision, sqlsrv_error_auto_ptr& last_error) +SQLRETURN get_string_from_stream( _In_ Number number_data, _Out_ std::basic_string &str_num, _In_ size_t precision, _Out_ sqlsrv_error_auto_ptr& last_error) { //std::locale loc( std::locale(""), new std::num_put ); // By default, SQL Server doesn't take user's locale into consideration std::locale loc; @@ -144,7 +144,7 @@ SQLRETURN get_string_from_stream( Number number_data, std::basic_string &s // copy the Char string into the output buffer - check first that it will fit template -SQLRETURN copy_buffer( _Out_ void* buffer, SQLLEN buffer_length, _Out_ SQLLEN* out_buffer_length, std::basic_string &str, sqlsrv_error_auto_ptr& last_error ) +SQLRETURN copy_buffer( _Out_writes_bytes_to_opt_(out_buffer_lenth, out_buffer_length) void* buffer, _In_ SQLLEN buffer_length, _Out_ SQLLEN* out_buffer_length, _In_reads_bytes_opt_(out_buffer_length) std::basic_string &str, _Out_ sqlsrv_error_auto_ptr& last_error ) { *out_buffer_length = str.size() * sizeof( Char ); // NULL terminator is provided subsequently @@ -163,7 +163,7 @@ SQLRETURN copy_buffer( _Out_ void* buffer, SQLLEN buffer_length, _Out_ SQLLEN* o // There is an extra copy here, but given the size is short (usually <20 bytes) and the complications of // subclassing a new streambuf just to avoid the copy, it's easier to do the copy template -SQLRETURN number_to_string( Number* number_data, _Out_ void* buffer, SQLLEN buffer_length, _Out_ SQLLEN* out_buffer_length, sqlsrv_error_auto_ptr& last_error ) +SQLRETURN number_to_string( _In_ Number* number_data, _Out_writes_bytes_to_opt_(buffer_length, *out_buffer_length) void* buffer, _In_ SQLLEN buffer_length, _Inout_ SQLLEN* out_buffer_length, _Inout_ sqlsrv_error_auto_ptr& last_error ) { size_t precision = 0; @@ -239,7 +239,7 @@ SQLRETURN number_to_string( Number* number_data, _Out_ void* buffer, SQLLEN buff #ifndef _WIN32 -std::string getUTF8StringFromString( const SQLWCHAR* source ) +std::string getUTF8StringFromString( _In_z_ const SQLWCHAR* source ) { // convert to regular character string first char c_str[4] = ""; @@ -262,7 +262,7 @@ std::string getUTF8StringFromString( const SQLWCHAR* source ) } -std::string getUTF8StringFromString( const char* source ) +std::string getUTF8StringFromString( _In_z_ const char* source ) { return std::string( source ); } @@ -270,8 +270,8 @@ std::string getUTF8StringFromString( const char* source ) #endif // !_WIN32 template -SQLRETURN string_to_number( Char* string_data, SQLLEN str_len, _Out_ void* buffer, SQLLEN buffer_length, - _Out_ SQLLEN* out_buffer_length, sqlsrv_error_auto_ptr& last_error ) +SQLRETURN string_to_number( _In_z_ Char* string_data, SQLLEN str_len, _Out_writes_bytes_(*out_buffer_length) void* buffer, SQLLEN buffer_length, + _Inout_ SQLLEN* out_buffer_length, _Inout_ sqlsrv_error_auto_ptr& last_error ) { Number* number_data = reinterpret_cast( buffer ); #ifdef _WIN32 @@ -333,13 +333,13 @@ struct row_dtor_closure { sqlsrv_buffered_result_set* results; BYTE* row_data; - row_dtor_closure( sqlsrv_buffered_result_set* st, BYTE* row ) : + row_dtor_closure( _In_ sqlsrv_buffered_result_set* st, _In_ BYTE* row ) : results( st ), row_data( row ) { } }; -sqlsrv_error* odbc_get_diag_rec( sqlsrv_stmt* odbc, SQLSMALLINT record_number ) +sqlsrv_error* odbc_get_diag_rec( _In_ sqlsrv_stmt* odbc, _In_ SQLSMALLINT record_number ) { SQLWCHAR wsql_state[ SQL_SQLSTATE_BUFSIZE ]; SQLWCHAR wnative_message[ SQL_MAX_MESSAGE_LENGTH + 1 ]; @@ -379,7 +379,7 @@ sqlsrv_error* odbc_get_diag_rec( sqlsrv_stmt* odbc, SQLSMALLINT record_number ) // base class result set -sqlsrv_result_set::sqlsrv_result_set( sqlsrv_stmt* stmt ) : +sqlsrv_result_set::sqlsrv_result_set( _In_ sqlsrv_stmt* stmt ) : odbc( stmt ) { } @@ -388,7 +388,7 @@ sqlsrv_result_set::sqlsrv_result_set( sqlsrv_stmt* stmt ) : // ODBC result set // This object simply wraps ODBC function calls -sqlsrv_odbc_result_set::sqlsrv_odbc_result_set( sqlsrv_stmt* stmt ) : +sqlsrv_odbc_result_set::sqlsrv_odbc_result_set( _In_ sqlsrv_stmt* stmt ) : sqlsrv_result_set( stmt ) { } @@ -397,30 +397,30 @@ sqlsrv_odbc_result_set::~sqlsrv_odbc_result_set( void ) { } -SQLRETURN sqlsrv_odbc_result_set::fetch( SQLSMALLINT orientation, SQLLEN offset TSRMLS_DC ) +SQLRETURN sqlsrv_odbc_result_set::fetch( _In_ SQLSMALLINT orientation, _In_ SQLLEN offset TSRMLS_DC ) { SQLSRV_ASSERT( odbc != NULL, "Invalid statement handle" ); return core::SQLFetchScroll( odbc, orientation, offset TSRMLS_CC ); } -SQLRETURN sqlsrv_odbc_result_set::get_data( SQLUSMALLINT field_index, SQLSMALLINT target_type, - _Out_ SQLPOINTER buffer, SQLLEN buffer_length, _Out_ SQLLEN* out_buffer_length, - bool handle_warning TSRMLS_DC ) +SQLRETURN sqlsrv_odbc_result_set::get_data( _In_ SQLUSMALLINT field_index, _In_ SQLSMALLINT target_type, + _Out_writes_opt_(buffer_length) SQLPOINTER buffer, _In_ SQLLEN buffer_length, _Inout_ SQLLEN* out_buffer_length, + _In_ bool handle_warning TSRMLS_DC ) { SQLSRV_ASSERT( odbc != NULL, "Invalid statement handle" ); return core::SQLGetData( odbc, field_index, target_type, buffer, buffer_length, out_buffer_length, handle_warning TSRMLS_CC ); } -SQLRETURN sqlsrv_odbc_result_set::get_diag_field( SQLSMALLINT record_number, SQLSMALLINT diag_identifier, - _Out_ SQLPOINTER diag_info_buffer, SQLSMALLINT buffer_length, - _Out_ SQLSMALLINT* out_buffer_length TSRMLS_DC ) +SQLRETURN sqlsrv_odbc_result_set::get_diag_field( _In_ SQLSMALLINT record_number, _In_ SQLSMALLINT diag_identifier, + _Inout_updates_(buffer_length) SQLPOINTER diag_info_buffer, _In_ SQLSMALLINT buffer_length, + _Inout_ SQLSMALLINT* out_buffer_length TSRMLS_DC ) { SQLSRV_ASSERT( odbc != NULL, "Invalid statement handle" ); return core::SQLGetDiagField( odbc, record_number, diag_identifier, diag_info_buffer, buffer_length, out_buffer_length TSRMLS_CC ); } -sqlsrv_error* sqlsrv_odbc_result_set::get_diag_rec( SQLSMALLINT record_number ) +sqlsrv_error* sqlsrv_odbc_result_set::get_diag_rec( _In_ SQLSMALLINT record_number ) { SQLSRV_ASSERT( odbc != NULL, "Invalid statement handle" ); return odbc_get_diag_rec( odbc, record_number ); @@ -436,7 +436,7 @@ SQLLEN sqlsrv_odbc_result_set::row_count( TSRMLS_D ) // Buffered result set // This class holds a result set in memory -sqlsrv_buffered_result_set::sqlsrv_buffered_result_set( sqlsrv_stmt* stmt TSRMLS_DC ) : +sqlsrv_buffered_result_set::sqlsrv_buffered_result_set( _Inout_ sqlsrv_stmt* stmt TSRMLS_DC ) : sqlsrv_result_set( stmt ), cache(NULL), col_count(0), @@ -770,7 +770,7 @@ sqlsrv_buffered_result_set::~sqlsrv_buffered_result_set( void ) } } -SQLRETURN sqlsrv_buffered_result_set::fetch( SQLSMALLINT orientation, SQLLEN offset TSRMLS_DC ) +SQLRETURN sqlsrv_buffered_result_set::fetch( _Inout_ SQLSMALLINT orientation, _Inout_opt_ SQLLEN offset TSRMLS_DC ) { last_error = NULL; last_field_index = -1; @@ -823,8 +823,8 @@ SQLRETURN sqlsrv_buffered_result_set::fetch( SQLSMALLINT orientation, SQLLEN off return SQL_SUCCESS; } -SQLRETURN sqlsrv_buffered_result_set::get_data( SQLUSMALLINT field_index, SQLSMALLINT target_type, - _Out_ SQLPOINTER buffer, SQLLEN buffer_length, _Out_ SQLLEN* out_buffer_length, +SQLRETURN sqlsrv_buffered_result_set::get_data( _In_ SQLUSMALLINT field_index, _In_ SQLSMALLINT target_type, + _Out_writes_bytes_opt_(buffer_length) SQLPOINTER buffer, _In_ SQLLEN buffer_length, _Inout_ SQLLEN* out_buffer_length, bool handle_warning TSRMLS_DC ) { last_error = NULL; @@ -857,9 +857,9 @@ SQLRETURN sqlsrv_buffered_result_set::get_data( SQLUSMALLINT field_index, SQLSMA out_buffer_length ); } -SQLRETURN sqlsrv_buffered_result_set::get_diag_field( SQLSMALLINT record_number, SQLSMALLINT diag_identifier, - _Out_ SQLPOINTER diag_info_buffer, SQLSMALLINT buffer_length, - _Out_ SQLSMALLINT* out_buffer_length TSRMLS_DC ) +SQLRETURN sqlsrv_buffered_result_set::get_diag_field( _In_ SQLSMALLINT record_number, _In_ SQLSMALLINT diag_identifier, + _Inout_updates_(buffer_length) SQLPOINTER diag_info_buffer, _In_ SQLSMALLINT buffer_length, + _Inout_ SQLSMALLINT* out_buffer_length TSRMLS_DC ) { SQLSRV_ASSERT( record_number == 1, "Only record number 1 can be fetched by sqlsrv_buffered_result_set::get_diag_field" ); SQLSRV_ASSERT( diag_identifier == SQL_DIAG_SQLSTATE, @@ -889,7 +889,7 @@ unsigned char* sqlsrv_buffered_result_set::get_row( void ) return cl_ptr->row_data; } -sqlsrv_error* sqlsrv_buffered_result_set::get_diag_rec( SQLSMALLINT record_number ) +sqlsrv_error* sqlsrv_buffered_result_set::get_diag_rec( _In_ SQLSMALLINT record_number ) { // we only hold a single error if there is one, otherwise return the ODBC error(s) if( last_error == 0 ) { @@ -918,9 +918,9 @@ SQLLEN sqlsrv_buffered_result_set::row_count( TSRMLS_D ) // private functions template -SQLRETURN binary_to_string( SQLCHAR* field_data, SQLLEN& read_so_far, _Out_ void* buffer, - SQLLEN buffer_length, _Out_ SQLLEN* out_buffer_length, - sqlsrv_error_auto_ptr& out_error ) +SQLRETURN binary_to_string( _Inout_ SQLCHAR* field_data, _Inout_ SQLLEN& read_so_far, _Out_writes_z_(*out_buffer_length) void* buffer, + _In_ SQLLEN buffer_length, _Inout_ SQLLEN* out_buffer_length, + _Inout_ sqlsrv_error_auto_ptr& out_error ) { // hex characters for the conversion loop below static char hex_chars[] = "0123456789ABCDEF"; @@ -979,8 +979,8 @@ SQLRETURN binary_to_string( SQLCHAR* field_data, SQLLEN& read_so_far, _Out_ voi return r; } -SQLRETURN sqlsrv_buffered_result_set::binary_to_system_string( SQLSMALLINT field_index, _Out_ void* buffer, SQLLEN buffer_length, - _Out_ SQLLEN* out_buffer_length ) +SQLRETURN sqlsrv_buffered_result_set::binary_to_system_string( _In_ SQLSMALLINT field_index, _Out_writes_z_(*out_buffer_length) void* buffer, _In_ SQLLEN buffer_length, + _Inout_ SQLLEN* out_buffer_length ) { SQLCHAR* row = get_row(); SQLCHAR* field_data = NULL; @@ -997,8 +997,8 @@ SQLRETURN sqlsrv_buffered_result_set::binary_to_system_string( SQLSMALLINT field return binary_to_string( field_data, read_so_far, buffer, buffer_length, out_buffer_length, last_error ); } -SQLRETURN sqlsrv_buffered_result_set::binary_to_wide_string( SQLSMALLINT field_index, _Out_ void* buffer, SQLLEN buffer_length, - _Out_ SQLLEN* out_buffer_length ) +SQLRETURN sqlsrv_buffered_result_set::binary_to_wide_string( _In_ SQLSMALLINT field_index, _Out_writes_z_(*out_buffer_length) void* buffer, _In_ SQLLEN buffer_length, + _Inout_ SQLLEN* out_buffer_length ) { SQLCHAR* row = get_row(); SQLCHAR* field_data = NULL; @@ -1016,8 +1016,8 @@ SQLRETURN sqlsrv_buffered_result_set::binary_to_wide_string( SQLSMALLINT field_i } -SQLRETURN sqlsrv_buffered_result_set::double_to_long( SQLSMALLINT field_index, _Out_ void* buffer, SQLLEN buffer_length, - _Out_ SQLLEN* out_buffer_length ) +SQLRETURN sqlsrv_buffered_result_set::double_to_long( _In_ SQLSMALLINT field_index, _Inout_updates_bytes_(*out_buffer_length) void* buffer, _In_ SQLLEN buffer_length, + _Inout_ SQLLEN* out_buffer_length ) { SQLSRV_ASSERT( meta[ field_index ].c_type == SQL_C_DOUBLE, "Invalid conversion to long" ); SQLSRV_ASSERT( buffer_length >= sizeof(SQLLEN), "Buffer length must be able to find a long in " @@ -1045,8 +1045,8 @@ SQLRETURN sqlsrv_buffered_result_set::double_to_long( SQLSMALLINT field_index, _ return SQL_SUCCESS; } -SQLRETURN sqlsrv_buffered_result_set::double_to_system_string( SQLSMALLINT field_index, _Out_ void* buffer, SQLLEN buffer_length, - _Out_ SQLLEN* out_buffer_length ) +SQLRETURN sqlsrv_buffered_result_set::double_to_system_string( _In_ SQLSMALLINT field_index, _Out_writes_bytes_to_opt_(buffer_length, *out_buffer_length) void* buffer, _In_ SQLLEN buffer_length, + _Inout_ SQLLEN* out_buffer_length ) { SQLSRV_ASSERT( meta[ field_index ].c_type == SQL_C_DOUBLE, "Invalid conversion to system string" ); SQLSRV_ASSERT( buffer_length > 0, "Buffer length must be > 0 in sqlsrv_buffered_result_set::double_to_system_string" ); @@ -1062,8 +1062,8 @@ SQLRETURN sqlsrv_buffered_result_set::double_to_system_string( SQLSMALLINT field return r; } -SQLRETURN sqlsrv_buffered_result_set::double_to_wide_string( SQLSMALLINT field_index, _Out_ void* buffer, SQLLEN buffer_length, - _Out_ SQLLEN* out_buffer_length ) +SQLRETURN sqlsrv_buffered_result_set::double_to_wide_string( _In_ SQLSMALLINT field_index, _Out_writes_bytes_to_opt_(buffer_length, *out_buffer_length) void* buffer, _In_ SQLLEN buffer_length, + _Inout_ SQLLEN* out_buffer_length ) { SQLSRV_ASSERT( meta[ field_index ].c_type == SQL_C_DOUBLE, "Invalid conversion to wide string" ); SQLSRV_ASSERT( buffer_length > 0, "Buffer length must be > 0 in sqlsrv_buffered_result_set::double_to_wide_string" ); @@ -1079,7 +1079,7 @@ SQLRETURN sqlsrv_buffered_result_set::double_to_wide_string( SQLSMALLINT field_i return r; } -SQLRETURN sqlsrv_buffered_result_set::long_to_double( SQLSMALLINT field_index, _Out_ void* buffer, SQLLEN buffer_length, +SQLRETURN sqlsrv_buffered_result_set::long_to_double( _In_ SQLSMALLINT field_index, _Out_writes_bytes_(*out_buffer_length) void* buffer, _In_ SQLLEN buffer_length, _Out_ SQLLEN* out_buffer_length ) { SQLSRV_ASSERT( meta[ field_index ].c_type == SQL_C_LONG, "Invalid conversion to long" ); @@ -1094,8 +1094,8 @@ SQLRETURN sqlsrv_buffered_result_set::long_to_double( SQLSMALLINT field_index, _ return SQL_SUCCESS; } -SQLRETURN sqlsrv_buffered_result_set::long_to_system_string( SQLSMALLINT field_index, _Out_ void* buffer, SQLLEN buffer_length, - _Out_ SQLLEN* out_buffer_length ) +SQLRETURN sqlsrv_buffered_result_set::long_to_system_string( _In_ SQLSMALLINT field_index, _Out_writes_bytes_to_opt_(buffer_length, *out_buffer_length) void* buffer, _In_ SQLLEN buffer_length, + _Inout_ SQLLEN* out_buffer_length ) { SQLSRV_ASSERT( meta[ field_index ].c_type == SQL_C_LONG, "Invalid conversion to system string" ); SQLSRV_ASSERT( buffer_length > 0, "Buffer length must be > 0 in sqlsrv_buffered_result_set::long_to_system_string" ); @@ -1111,8 +1111,8 @@ SQLRETURN sqlsrv_buffered_result_set::long_to_system_string( SQLSMALLINT field_i return r; } -SQLRETURN sqlsrv_buffered_result_set::long_to_wide_string( SQLSMALLINT field_index, _Out_ void* buffer, SQLLEN buffer_length, - _Out_ SQLLEN* out_buffer_length ) +SQLRETURN sqlsrv_buffered_result_set::long_to_wide_string( _In_ SQLSMALLINT field_index, _Out_writes_bytes_to_opt_(buffer_length, *out_buffer_length) void* buffer, _In_ SQLLEN buffer_length, + _Inout_ SQLLEN* out_buffer_length ) { SQLSRV_ASSERT( meta[ field_index ].c_type == SQL_C_LONG, "Invalid conversion to wide string" ); SQLSRV_ASSERT( buffer_length > 0, "Buffer length must be > 0 in sqlsrv_buffered_result_set::long_to_wide_string" ); @@ -1128,8 +1128,8 @@ SQLRETURN sqlsrv_buffered_result_set::long_to_wide_string( SQLSMALLINT field_ind return r; } -SQLRETURN sqlsrv_buffered_result_set::string_to_double( SQLSMALLINT field_index, _Out_ void* buffer, SQLLEN buffer_length, - _Out_ SQLLEN* out_buffer_length ) +SQLRETURN sqlsrv_buffered_result_set::string_to_double( _In_ SQLSMALLINT field_index, _Out_writes_bytes_(*out_buffer_length) void* buffer, _In_ SQLLEN buffer_length, + _Inout_ SQLLEN* out_buffer_length ) { SQLSRV_ASSERT( meta[ field_index ].c_type == SQL_C_CHAR, "Invalid conversion from string to double" ); SQLSRV_ASSERT( buffer_length >= sizeof( double ), "Buffer needs to be big enough to hold a double" ); @@ -1140,8 +1140,8 @@ SQLRETURN sqlsrv_buffered_result_set::string_to_double( SQLSMALLINT field_index, return string_to_number( string_data, meta[ field_index ].length, buffer, buffer_length, out_buffer_length, last_error ); } -SQLRETURN sqlsrv_buffered_result_set::wstring_to_double( SQLSMALLINT field_index, _Out_ void* buffer, SQLLEN buffer_length, - _Out_ SQLLEN* out_buffer_length ) +SQLRETURN sqlsrv_buffered_result_set::wstring_to_double( _In_ SQLSMALLINT field_index, _Out_writes_bytes_(*out_buffer_length) void* buffer, _In_ SQLLEN buffer_length, + _Inout_ SQLLEN* out_buffer_length ) { SQLSRV_ASSERT( meta[ field_index ].c_type == SQL_C_WCHAR, "Invalid conversion from wide string to double" ); SQLSRV_ASSERT( buffer_length >= sizeof( double ), "Buffer needs to be big enough to hold a double" ); @@ -1152,8 +1152,8 @@ SQLRETURN sqlsrv_buffered_result_set::wstring_to_double( SQLSMALLINT field_index return string_to_number( string_data, meta[ field_index ].length, buffer, buffer_length, out_buffer_length, last_error ); } -SQLRETURN sqlsrv_buffered_result_set::string_to_long( SQLSMALLINT field_index, _Out_ void* buffer, SQLLEN buffer_length, - _Out_ SQLLEN* out_buffer_length ) +SQLRETURN sqlsrv_buffered_result_set::string_to_long( _In_ SQLSMALLINT field_index, _Out_writes_bytes_(*out_buffer_length) void* buffer, _In_ SQLLEN buffer_length, + _Inout_ SQLLEN* out_buffer_length ) { SQLSRV_ASSERT( meta[ field_index ].c_type == SQL_C_CHAR, "Invalid conversion from string to long" ); SQLSRV_ASSERT( buffer_length >= sizeof( LONG ), "Buffer needs to be big enough to hold a long" ); @@ -1164,8 +1164,8 @@ SQLRETURN sqlsrv_buffered_result_set::string_to_long( SQLSMALLINT field_index, _ return string_to_number( string_data, meta[ field_index ].length, buffer, buffer_length, out_buffer_length, last_error ); } -SQLRETURN sqlsrv_buffered_result_set::wstring_to_long( SQLSMALLINT field_index, _Out_ void* buffer, SQLLEN buffer_length, - _Out_ SQLLEN* out_buffer_length ) +SQLRETURN sqlsrv_buffered_result_set::wstring_to_long( _In_ SQLSMALLINT field_index, _Out_writes_bytes_(*out_buffer_length) void* buffer, _In_ SQLLEN buffer_length, + _Inout_ SQLLEN* out_buffer_length ) { SQLSRV_ASSERT( meta[ field_index ].c_type == SQL_C_WCHAR, "Invalid conversion from wide string to long" ); SQLSRV_ASSERT( buffer_length >= sizeof( LONG ), "Buffer needs to be big enough to hold a long" ); @@ -1176,7 +1176,7 @@ SQLRETURN sqlsrv_buffered_result_set::wstring_to_long( SQLSMALLINT field_index, return string_to_number( string_data, meta[ field_index ].length, buffer, buffer_length, out_buffer_length, last_error ); } -SQLRETURN sqlsrv_buffered_result_set::system_to_wide_string( SQLSMALLINT field_index, _Out_ void* buffer, SQLLEN buffer_length, +SQLRETURN sqlsrv_buffered_result_set::system_to_wide_string( _In_ SQLSMALLINT field_index, _Out_writes_z_(*out_buffer_length) void* buffer, _In_ SQLLEN buffer_length, _Out_ SQLLEN* out_buffer_length ) { SQLSRV_ASSERT( last_error == 0, "Pending error for sqlsrv_buffered_results_set::system_to_wide_string" ); @@ -1276,7 +1276,7 @@ SQLRETURN sqlsrv_buffered_result_set::system_to_wide_string( SQLSMALLINT field_i return r; } -SQLRETURN sqlsrv_buffered_result_set::to_same_string( SQLSMALLINT field_index, _Out_ void* buffer, SQLLEN buffer_length, +SQLRETURN sqlsrv_buffered_result_set::to_same_string( _In_ SQLSMALLINT field_index, _Out_writes_bytes_to_opt_(buffer_length, *out_buffer_length) void* buffer, _In_ SQLLEN buffer_length, _Out_ SQLLEN* out_buffer_length ) { SQLSRV_ASSERT( last_error == 0, "Pending error for sqlsrv_buffered_results_set::to_same_string" ); @@ -1346,8 +1346,8 @@ SQLRETURN sqlsrv_buffered_result_set::to_same_string( SQLSMALLINT field_index, _ return r; } -SQLRETURN sqlsrv_buffered_result_set::wide_to_system_string( SQLSMALLINT field_index, _Out_ void* buffer, SQLLEN buffer_length, - _Out_ SQLLEN* out_buffer_length ) +SQLRETURN sqlsrv_buffered_result_set::wide_to_system_string( _In_ SQLSMALLINT field_index, _Inout_updates_bytes_to_(buffer_length, *out_buffer_length) void* buffer, _In_ SQLLEN buffer_length, + _Inout_ SQLLEN* out_buffer_length ) { SQLSRV_ASSERT( last_error == 0, "Pending error for sqlsrv_buffered_results_set::wide_to_system_string" ); @@ -1440,13 +1440,13 @@ SQLRETURN sqlsrv_buffered_result_set::wide_to_system_string( SQLSMALLINT field_i } -SQLRETURN sqlsrv_buffered_result_set::to_binary_string( SQLSMALLINT field_index, _Out_ void* buffer, SQLLEN buffer_length, +SQLRETURN sqlsrv_buffered_result_set::to_binary_string( _In_ SQLSMALLINT field_index, _Out_writes_bytes_to_opt_(buffer_length, *out_buffer_length) void* buffer, _In_ SQLLEN buffer_length, _Out_ SQLLEN* out_buffer_length ) { return to_same_string( field_index, buffer, buffer_length, out_buffer_length ); } -SQLRETURN sqlsrv_buffered_result_set::to_long( SQLSMALLINT field_index, _Out_ void* buffer, SQLLEN buffer_length, +SQLRETURN sqlsrv_buffered_result_set::to_long( _In_ SQLSMALLINT field_index, _Out_writes_bytes_to_opt_(buffer_length, *out_buffer_length) void* buffer, _In_ SQLLEN buffer_length, _Out_ SQLLEN* out_buffer_length ) { SQLSRV_ASSERT( meta[ field_index ].c_type == SQL_C_LONG, "Invalid conversion to long" ); @@ -1460,7 +1460,7 @@ SQLRETURN sqlsrv_buffered_result_set::to_long( SQLSMALLINT field_index, _Out_ vo return SQL_SUCCESS; } -SQLRETURN sqlsrv_buffered_result_set::to_double( SQLSMALLINT field_index, _Out_ void* buffer, SQLLEN buffer_length, +SQLRETURN sqlsrv_buffered_result_set::to_double( _In_ SQLSMALLINT field_index, _Out_writes_bytes_to_opt_(buffer_length, *out_buffer_length) void* buffer, _In_ SQLLEN buffer_length, _Out_ SQLLEN* out_buffer_length ) { SQLSRV_ASSERT( meta[ field_index ].c_type == SQL_C_DOUBLE, "Invalid conversion to double" ); @@ -1477,7 +1477,7 @@ SQLRETURN sqlsrv_buffered_result_set::to_double( SQLSMALLINT field_index, _Out_ namespace { // called for each row in the cache when the cache is destroyed in the destructor -void cache_row_dtor( zval* data ) +void cache_row_dtor( _In_ zval* data ) { row_dtor_closure* cl = reinterpret_cast( Z_PTR_P( data ) ); BYTE* row = cl->row_data; @@ -1497,8 +1497,8 @@ void cache_row_dtor( zval* data ) sqlsrv_free( cl ); } -SQLPOINTER read_lob_field( sqlsrv_stmt* stmt, SQLUSMALLINT field_index, sqlsrv_buffered_result_set::meta_data& meta, - zend_long mem_used TSRMLS_DC ) +SQLPOINTER read_lob_field( _Inout_ sqlsrv_stmt* stmt, _In_ SQLUSMALLINT field_index, _In_ sqlsrv_buffered_result_set::meta_data& meta, + _In_ zend_long mem_used TSRMLS_DC ) { SQLSMALLINT extra = 0; SQLULEN* output_buffer_len = NULL; diff --git a/source/shared/core_sqlsrv.h b/source/shared/core_sqlsrv.h index dd3c3bbc..6f904f72 100644 --- a/source/shared/core_sqlsrv.h +++ b/source/shared/core_sqlsrv.h @@ -6,7 +6,7 @@ // // Contents: Core routines and constants shared by the Microsoft Drivers for PHP for SQL Server // -// Microsoft Drivers 4.1 for PHP for SQL Server +// Microsoft Drivers 4.3 for PHP for SQL Server // Copyright(c) Microsoft Corporation // All rights reserved. // MIT License @@ -37,10 +37,12 @@ #include "ext/standard/php_standard.h" #include "ext/standard/info.h" -#ifndef _WIN32 +#ifndef _WIN32 // !_WIN32 #include "FormattedPrint.h" #include "StringFunctions.h" -#endif // !_WIN32 +#else +#include "VersionHelpers.h" +#endif #ifdef HAVE_CONFIG_H #include "config.h" @@ -258,7 +260,7 @@ template struct sqlsrv_static_assert; template <> -struct sqlsrv_static_assert { static const int value = 1; }; +struct sqlsrv_static_assert { _In_ static const int value = 1; }; #define SQLSRV_STATIC_ASSERT( c ) (sqlsrv_static_assert<(c) != 0>() ) @@ -271,13 +273,13 @@ struct sqlsrv_static_assert { static const int value = 1; }; // severity - severity of the message: notice, warning, or error // msg - the message to log in a FormatMessage style formatting // print_args - args to the message -typedef void (*log_callback)( unsigned int severity TSRMLS_DC, const char* msg, va_list* print_args ); +typedef void (*log_callback)( _In_ unsigned int severity TSRMLS_DC, _In_ const char* msg, _In_opt_ va_list* print_args ); // each driver must register a log callback. This should be the first thing a driver does. -void core_sqlsrv_register_logger( log_callback ); +void core_sqlsrv_register_logger( _In_ log_callback ); // a simple wrapper around a PHP error logging function. -void write_to_log( unsigned int severity TSRMLS_DC, const char* msg, ... ); +void write_to_log( _In_ unsigned int severity TSRMLS_DC, _In_ const char* msg, ... ); // a macro to make it convenient to use the function. #define LOG( severity, msg, ...) write_to_log( severity TSRMLS_CC, msg, ## __VA_ARGS__ ) @@ -291,7 +293,7 @@ enum logging_severity { }; // Kill the PHP process and log the message to PHP -void die( const char* msg, ... ); +void die( _In_opt_ const char* msg, ... ); #define DIE( msg, ... ) { die( msg, ## __VA_ARGS__ ); } @@ -312,14 +314,14 @@ void die( const char* msg, ... ); // #define SQLSRV_MEM_DEBUG 1 #if defined( PHP_DEBUG ) && !defined( ZTS ) && defined( SQLSRV_MEM_DEBUG ) -inline void* sqlsrv_malloc_trace( size_t size, const char* file, int line ) +inline void* sqlsrv_malloc_trace( _In_ size_t size, _In_ const char* file, _In_ int line ) { void* ptr = emalloc( size ); LOG( SEV_NOTICE, "emalloc returned %4!08x!: %1!d! bytes at %2!s!:%3!d!", size, file, line, ptr ); return ptr; } -inline void* sqlsrv_malloc_trace( size_t element_count, size_t element_size, size_t extra, const char* file, int line ) +inline void* sqlsrv_malloc_trace( _In_ size_t element_count, _In_ size_t element_size, _In_ size_t extra, _In_ const char* file, _In_ int line ) { OACR_WARNING_SUPPRESS( ALLOC_SIZE_OVERFLOW_IN_ALLOC_WRAPPER, "Overflow verified below" ); @@ -341,14 +343,14 @@ inline void* sqlsrv_malloc_trace( size_t element_count, size_t element_size, siz return ptr; } -inline void* sqlsrv_realloc_trace( void* buffer, size_t size, const char* file, int line ) +inline void* sqlsrv_realloc_trace( void* buffer, _In_ size_t size, _In_ const char* file, _In_ int line ) { void* ptr = erealloc( original, size ); LOG( SEV_NOTICE, "erealloc returned %5!08x! from %4!08x!: %1!d! bytes at %2!s!:%3!d!", size, file, line, ptr, original ); return ptr; } -inline void sqlsrv_free_trace( void* ptr, const char* file, int line ) +inline void sqlsrv_free_trace( _Inout_ void* ptr, _In_ const char* file, _In_ int line ) { LOG( SEV_NOTICE, "efree %1!08x! at %2!s!:%3!d!", ptr, file, line ); efree( ptr ); @@ -361,12 +363,12 @@ inline void sqlsrv_free_trace( void* ptr, const char* file, int line ) #else -inline void* sqlsrv_malloc( size_t size ) +inline void* sqlsrv_malloc( _In_ size_t size ) { return emalloc( size ); } -inline void* sqlsrv_malloc( size_t element_count, size_t element_size, size_t extra ) +inline void* sqlsrv_malloc( _In_ size_t element_count, _In_ size_t element_size, _In_ size_t extra ) { OACR_WARNING_SUPPRESS( ALLOC_SIZE_OVERFLOW_IN_ALLOC_WRAPPER, "Overflow verified below" ); @@ -386,12 +388,12 @@ inline void* sqlsrv_malloc( size_t element_count, size_t element_size, size_t ex return emalloc( element_size * element_count + extra ); } -inline void* sqlsrv_realloc( void* buffer, size_t size ) +inline void* sqlsrv_realloc( _Inout_ void* buffer, _In_ size_t size ) { return erealloc( buffer, size ); } -inline void sqlsrv_free( void* ptr ) +inline void sqlsrv_free( _Inout_ void* ptr ) { efree( ptr ); } @@ -436,24 +438,24 @@ struct sqlsrv_allocator { inline sqlsrv_allocator( sqlsrv_allocator const& ) {} // address (doesn't work if the class defines operator&) - inline pointer address( reference r ) + inline pointer address( _In_ reference r ) { return &r; } - inline const_pointer address( const_reference r ) + inline const_pointer address( _In_ const_reference r ) { return &r; } // memory allocation/deallocation - inline pointer allocate( size_type cnt, + inline pointer allocate( _In_ size_type cnt, typename std::allocator::const_pointer = 0 ) { return reinterpret_cast( sqlsrv_malloc(cnt, sizeof (T), 0)); } - inline void deallocate( pointer p, size_type ) + inline void deallocate( _Inout_ pointer p, size_type ) { sqlsrv_free(p); } @@ -465,12 +467,12 @@ struct sqlsrv_allocator { } // object construction/destruction - inline void construct( pointer p, const T& t ) + inline void construct( _In_ pointer p, _In_ const T& t ) { new(p) T(t); } - inline void destroy(pointer p) + inline void destroy( _Inout_ pointer p ) { p->~T(); } @@ -481,7 +483,7 @@ struct sqlsrv_allocator { return true; } - inline bool operator!=( sqlsrv_allocator const& a ) + inline bool operator!=( _In_ sqlsrv_allocator const& a ) { return !operator==(a); } @@ -535,21 +537,21 @@ public: // there are a number of places where we allocate a block intended to be accessed as // an array of elements, so this operator allows us to treat the memory as such. - T& operator[]( int index ) const + T& operator[]( _In_ int index ) const { return _ptr[ index ]; } // there are a number of places where we allocate a block intended to be accessed as // an array of elements, so this operator allows us to treat the memory as such. - T& operator[]( unsigned int index ) const + T& operator[]( _In_ unsigned int index ) const { return _ptr[ index ]; } // there are a number of places where we allocate a block intended to be accessed as // an array of elements, so this operator allows us to treat the memory as such. - T& operator[]( long index ) const + T& operator[]( _In_ long index ) const { return _ptr[ index ]; } @@ -558,7 +560,7 @@ public: #ifdef __WIN64 // there are a number of places where we allocate a block intended to be accessed as // an array of elements, so this operator allows us to treat the memory as such. - T& operator[](std::size_t index) const + T& operator[]( _In_ std::size_t index ) const { return _ptr[index]; } @@ -566,7 +568,7 @@ public: // there are a number of places where we allocate a block intended to be accessed as // an array of elements, so this operator allows us to treat the memory as such. - T& operator[]( unsigned short index ) const + T& operator[]( _In_ unsigned short index ) const { return _ptr[ index ]; } @@ -593,12 +595,12 @@ public: protected: - sqlsrv_auto_ptr( T* ptr ) : + sqlsrv_auto_ptr( _In_opt_ T* ptr ) : _ptr( ptr ) { } - sqlsrv_auto_ptr( sqlsrv_auto_ptr& src ) + sqlsrv_auto_ptr( _Inout_opt_ sqlsrv_auto_ptr& src ) { if( _ptr ) { static_cast(this)->reset( src._ptr ); @@ -608,7 +610,7 @@ protected: // assign a new pointer to the auto_ptr. It will free the previous memory block // because ownership is deemed finished. - T* operator=( T* ptr ) + T* operator=( _In_opt_ T* ptr ) { static_cast( this )->reset( ptr ); @@ -634,25 +636,25 @@ public: { } - sqlsrv_malloc_auto_ptr( const sqlsrv_malloc_auto_ptr& src ) : + sqlsrv_malloc_auto_ptr( _Inout_opt_ const sqlsrv_malloc_auto_ptr& src ) : sqlsrv_auto_ptr >( src ) { } // free the original pointer and assign a new pointer. Use NULL to simply free the pointer. - void reset( T* ptr = NULL ) + void reset( _In_opt_ T* ptr = NULL ) { if( sqlsrv_auto_ptr >::_ptr ) sqlsrv_free( (void*) sqlsrv_auto_ptr >::_ptr ); sqlsrv_auto_ptr >::_ptr = ptr; } - T* operator=( T* ptr ) + T* operator=( _In_opt_ T* ptr ) { return sqlsrv_auto_ptr >::operator=( ptr ); } - void operator=( sqlsrv_malloc_auto_ptr& src ) + void operator=( _Inout_opt_ sqlsrv_malloc_auto_ptr& src ) { T* p = src.get(); src.transferred(); @@ -661,7 +663,7 @@ public: // DO NOT CALL sqlsrv_realloc with a sqlsrv_malloc_auto_ptr. Use the resize member function. // has the same parameter list as sqlsrv_realloc: new_size is the size in bytes of the newly allocated buffer - void resize( size_t new_size ) + void resize( _In_ size_t new_size ) { sqlsrv_auto_ptr >::_ptr = reinterpret_cast( sqlsrv_realloc( sqlsrv_auto_ptr >::_ptr, new_size )); } @@ -682,7 +684,7 @@ public: } // free the original pointer and assign a new pointer. Use NULL to simply free the pointer. - void reset( HashTable* ptr = NULL ) + void reset( _In_opt_ HashTable* ptr = NULL ) { if( _ptr ) { zend_hash_destroy( _ptr ); @@ -691,16 +693,16 @@ public: _ptr = ptr; } - HashTable* operator=( HashTable* ptr ) + HashTable* operator=( _In_opt_ HashTable* ptr ) { return sqlsrv_auto_ptr::operator=( ptr ); } private: - hash_auto_ptr( HashTable const& hash ); + hash_auto_ptr( _In_ HashTable const& hash ); - hash_auto_ptr( hash_auto_ptr const& hash ); + hash_auto_ptr( _In_ hash_auto_ptr const& hash ); }; @@ -717,14 +719,14 @@ public: } // free the original pointer and assign a new pointer. Use NULL to simply free the pointer. - void reset( zval* ptr = NULL ) + void reset( _In_opt_ zval* ptr = NULL ) { if( _ptr ) zval_ptr_dtor(_ptr ); _ptr = ptr; } - zval* operator=( zval* ptr ) + zval* operator=( _In_opt_ zval* ptr ) { return sqlsrv_auto_ptr::operator=( ptr ); } @@ -732,7 +734,7 @@ public: private: - zval_auto_ptr( const zval_auto_ptr& src ); + zval_auto_ptr( _In_ const zval_auto_ptr& src ); }; #pragma pop_macro( "max" ) @@ -767,7 +769,7 @@ struct sqlsrv_error : public sqlsrv_error_const { format = false; } - sqlsrv_error( SQLCHAR* sql_state, SQLCHAR* message, SQLINTEGER code, bool printf_format = false ) + sqlsrv_error( _In_ SQLCHAR* sql_state, _In_ SQLCHAR* message, _In_ SQLINTEGER code, _In_ bool printf_format = false ) { sqlstate = reinterpret_cast( sqlsrv_malloc( SQL_SQLSTATE_BUFSIZE )); native_message = reinterpret_cast( sqlsrv_malloc( SQL_MAX_MESSAGE_LENGTH + 1 )); @@ -777,7 +779,7 @@ struct sqlsrv_error : public sqlsrv_error_const { format = printf_format; } - sqlsrv_error( sqlsrv_error_const const& prototype ) + sqlsrv_error( _In_ sqlsrv_error_const const& prototype ) { sqlsrv_error( prototype.sqlstate, prototype.native_message, prototype.native_code, prototype.format ); } @@ -804,13 +806,13 @@ public: { } - sqlsrv_error_auto_ptr( sqlsrv_error_auto_ptr const& src ) : + sqlsrv_error_auto_ptr( _Inout_opt_ sqlsrv_error_auto_ptr const& src ) : sqlsrv_auto_ptr( (sqlsrv_error_auto_ptr&) src ) { } // free the original pointer and assign a new pointer. Use NULL to simply free the pointer. - void reset( sqlsrv_error* ptr = NULL ) + void reset( _In_opt_ sqlsrv_error* ptr = NULL ) { if( _ptr ) { _ptr->~sqlsrv_error(); @@ -819,14 +821,14 @@ public: _ptr = ptr; } - sqlsrv_error* operator=( sqlsrv_error* ptr ) + sqlsrv_error* operator=( _In_opt_ sqlsrv_error* ptr ) { return sqlsrv_auto_ptr::operator=( ptr ); } // unlike traditional assignment operators, the chained assignment of an auto_ptr doesn't make much // sense. Only the last one would have anything in it. - void operator=( sqlsrv_error_auto_ptr& src ) + void operator=( _Inout_opt_ sqlsrv_error_auto_ptr& src ) { sqlsrv_error* p = src.get(); src.transferred(); @@ -846,7 +848,7 @@ struct sqlsrv_conn; // a driver specific callback for processing errors. // ctx - the context holding the handles // sqlsrv_error_code - specific error code to return. -typedef bool (*error_callback)( sqlsrv_context& ctx, unsigned int sqlsrv_error_code, bool error TSRMLS_DC, va_list* print_args ); +typedef bool (*error_callback)( _Inout_ sqlsrv_context& ctx, _In_ unsigned int sqlsrv_error_code, _In_ bool error TSRMLS_DC, _In_opt_ va_list* print_args ); // sqlsrv_context // a context holds relevant information to be passed with a connection and statement objects. @@ -855,7 +857,7 @@ class sqlsrv_context { public: - sqlsrv_context( SQLSMALLINT type, error_callback e, void* drv, SQLSRV_ENCODING encoding = SQLSRV_ENCODING_INVALID ) : + sqlsrv_context( _In_opt_ SQLSMALLINT type, _In_ error_callback e, _In_opt_ void* drv, _In_ SQLSRV_ENCODING encoding = SQLSRV_ENCODING_INVALID ) : handle_( SQL_NULL_HANDLE ), handle_type_( type ), name_( NULL ), @@ -866,7 +868,7 @@ class sqlsrv_context { { } - sqlsrv_context( SQLHANDLE h, SQLSMALLINT t, error_callback e, void* drv, SQLSRV_ENCODING encoding = SQLSRV_ENCODING_INVALID ) : + sqlsrv_context( _In_ SQLHANDLE h, _In_opt_ SQLSMALLINT t, _In_ error_callback e, _In_opt_ void* drv, _In_ SQLSRV_ENCODING encoding = SQLSRV_ENCODING_INVALID ) : handle_( h ), handle_type_( t ), name_( NULL ), @@ -877,7 +879,7 @@ class sqlsrv_context { { } - sqlsrv_context( sqlsrv_context const& ctx ) : + sqlsrv_context( _In_ sqlsrv_context const& ctx ) : handle_( ctx.handle_ ), handle_type_( ctx.handle_type_ ), name_( ctx.name_ ), @@ -891,12 +893,12 @@ class sqlsrv_context { { } - void set_func( const char* f ) + void set_func( _In_z_ const char* f ) { name_ = f; } - void set_last_error( sqlsrv_error_auto_ptr& last_error ) + void set_last_error( _In_ sqlsrv_error_auto_ptr& last_error ) { last_error_ = last_error; } @@ -938,7 +940,7 @@ class sqlsrv_context { return driver_; } - void set_driver( void* driver ) + void set_driver( _In_ void* driver ) { this->driver_ = driver; } @@ -963,7 +965,7 @@ class sqlsrv_context { return encoding_; } - void set_encoding( SQLSRV_ENCODING e ) + void set_encoding( _In_ SQLSRV_ENCODING e ) { encoding_ = e; } @@ -988,7 +990,7 @@ struct sqlsrv_encoding { unsigned int code_page; bool not_for_connection; - sqlsrv_encoding( const char* iana, unsigned int code_page, bool not_for_conn = false ): + sqlsrv_encoding( _In_ const char* iana, _In_ unsigned int code_page, _In_ bool not_for_conn = false ): iana( iana ), iana_len( strlen( iana )), code_page( code_page ), not_for_connection( not_for_conn ) { } @@ -1000,18 +1002,18 @@ struct sqlsrv_encoding { //********************************************************************************************************************************* // variables set during initialization -extern OSVERSIONINFO g_osversion; // used to determine which OS we're running in +extern bool isVistaOrGreater; // used to determine if OS is Vista or Greater extern HashTable* g_encodings; // encodings supported by this driver -void core_sqlsrv_minit( sqlsrv_context** henv_cp, sqlsrv_context** henv_ncp, error_callback err, const char* driver_func TSRMLS_DC ); -void core_sqlsrv_mshutdown( sqlsrv_context& henv_cp, sqlsrv_context& henv_ncp ); +void core_sqlsrv_minit( _Outptr_ sqlsrv_context** henv_cp, _Inout_ sqlsrv_context** henv_ncp, _In_ error_callback err, _In_z_ const char* driver_func TSRMLS_DC ); +void core_sqlsrv_mshutdown( _Inout_ sqlsrv_context& henv_cp, _Inout_ sqlsrv_context& henv_ncp ); // environment context used by sqlsrv_connect for when a connection error occurs. struct sqlsrv_henv { sqlsrv_context ctx; - sqlsrv_henv( SQLHANDLE handle, error_callback e, void* drv ) : + sqlsrv_henv( _In_ SQLHANDLE handle, _In_ error_callback e, _In_opt_ void* drv ) : ctx( handle, SQL_HANDLE_ENV, e, drv ) { } @@ -1052,7 +1054,7 @@ struct sqlsrv_conn : public sqlsrv_context { DRIVER_VERSION driver_version; // initialize with default values - sqlsrv_conn( SQLHANDLE h, error_callback e, void* drv, SQLSRV_ENCODING encoding TSRMLS_DC ) : + sqlsrv_conn( _In_ SQLHANDLE h, _In_ error_callback e, _In_opt_ void* drv, _In_ SQLSRV_ENCODING encoding TSRMLS_DC ) : sqlsrv_context( h, SQL_HANDLE_DBC, e, drv, encoding ) { server_version = SERVER_VERSION_UNKNOWN; @@ -1100,6 +1102,7 @@ const char TraceFile[] = "TraceFile"; const char TraceOn[] = "TraceOn"; const char TrustServerCertificate[] = "TrustServerCertificate"; const char TransactionIsolation[] = "TransactionIsolation"; +const char TransparentNetworkIPResolution[] = "TransparentNetworkIPResolution"; const char WSID[] = "WSID"; const char UID[] = "UID"; const char PWD[] = "PWD"; @@ -1128,6 +1131,7 @@ enum SQLSRV_CONN_OPTIONS { SQLSRV_CONN_OPTION_APPLICATION_INTENT, SQLSRV_CONN_OPTION_MULTI_SUBNET_FAILOVER, SQLSRV_CONN_OPTION_AUTHENTICATION, + SQLSRV_CONN_OPTION_TRANSPARANT_NETWORK_IP_RESOLUTION, #ifdef _WIN32 SQLSRV_CONN_OPTION_CONN_RETRY_COUNT, SQLSRV_CONN_OPTION_CONN_RETRY_INTERVAL, @@ -1170,7 +1174,7 @@ struct connection_option { // simply add the parsed value to the connection string struct conn_str_append_func { - static void func( connection_option const* option, zval* value, sqlsrv_conn* /*conn*/, std::string& conn_str TSRMLS_DC ); + static void func( _In_ connection_option const* option, _In_ zval* value, sqlsrv_conn* /*conn*/, _Inout_ std::string& conn_str TSRMLS_DC ); }; struct conn_null_func { @@ -1180,24 +1184,24 @@ struct conn_null_func { }; // factory to create a connection (since they are subclassed to instantiate statements) -typedef sqlsrv_conn* (*driver_conn_factory)( SQLHANDLE h, error_callback e, void* drv TSRMLS_DC ); +typedef sqlsrv_conn* (*driver_conn_factory)( _In_ SQLHANDLE h, _In_ error_callback e, _In_ void* drv TSRMLS_DC ); // *** connection functions *** -sqlsrv_conn* core_sqlsrv_connect( sqlsrv_context& henv_cp, sqlsrv_context& henv_ncp, driver_conn_factory conn_factory, - const char* server, const char* uid, const char* pwd, - HashTable* options_ht, error_callback err, const connection_option driver_conn_opt_list[], - void* driver, const char* driver_func TSRMLS_DC ); -void core_sqlsrv_close( sqlsrv_conn* conn TSRMLS_DC ); -void core_sqlsrv_prepare( sqlsrv_stmt* stmt, const char* sql, SQLLEN sql_len TSRMLS_DC ); -void core_sqlsrv_begin_transaction( sqlsrv_conn* conn TSRMLS_DC ); -void core_sqlsrv_commit( sqlsrv_conn* conn TSRMLS_DC ); -void core_sqlsrv_rollback( sqlsrv_conn* conn TSRMLS_DC ); -void core_sqlsrv_get_server_info( sqlsrv_conn* conn, _Out_ zval* server_info TSRMLS_DC ); -void core_sqlsrv_get_server_version( sqlsrv_conn* conn, _Out_ zval *server_version TSRMLS_DC ); -void core_sqlsrv_get_client_info( sqlsrv_conn* conn, _Out_ zval *client_info TSRMLS_DC ); -bool core_is_conn_opt_value_escaped( const char* value, size_t value_len ); -size_t core_str_zval_is_true( zval* str_zval ); -bool core_is_authentication_option_valid( const char* value, size_t value_len ); +sqlsrv_conn* core_sqlsrv_connect( _In_ sqlsrv_context& henv_cp, _In_ sqlsrv_context& henv_ncp, _In_ driver_conn_factory conn_factory, + _Inout_z_ const char* server, _Inout_opt_z_ const char* uid, _Inout_opt_z_ const char* pwd, + _Inout_opt_ HashTable* options_ht, _In_ error_callback err, _In_ const connection_option valid_conn_opts[], + _In_ void* driver, _In_z_ const char* driver_func TSRMLS_DC ); +void core_sqlsrv_close( _Inout_opt_ sqlsrv_conn* conn TSRMLS_DC ); +void core_sqlsrv_prepare( _Inout_ sqlsrv_stmt* stmt, _In_reads_bytes_(sql_len) const char* sql, _In_ SQLLEN sql_len TSRMLS_DC ); +void core_sqlsrv_begin_transaction( _Inout_ sqlsrv_conn* conn TSRMLS_DC ); +void core_sqlsrv_commit( _Inout_ sqlsrv_conn* conn TSRMLS_DC ); +void core_sqlsrv_rollback( _Inout_ sqlsrv_conn* conn TSRMLS_DC ); +void core_sqlsrv_get_server_info( _Inout_ sqlsrv_conn* conn, _Out_ zval* server_info TSRMLS_DC ); +void core_sqlsrv_get_server_version( _Inout_ sqlsrv_conn* conn, _Inout_ zval *server_version TSRMLS_DC ); +void core_sqlsrv_get_client_info( _Inout_ sqlsrv_conn* conn, _Out_ zval *client_info TSRMLS_DC ); +bool core_is_conn_opt_value_escaped( _Inout_ const char* value, _Inout_ size_t value_len ); +size_t core_str_zval_is_true( _Inout_ zval* str_zval ); +bool core_is_authentication_option_valid( _In_z_ const char* value, _In_ size_t value_len ); //********************************************************************************************************************************* // Statement @@ -1205,22 +1209,22 @@ bool core_is_authentication_option_valid( const char* value, size_t value_len ); struct stmt_option_functor { - virtual void operator()( sqlsrv_stmt* /*stmt*/, stmt_option const* /*opt*/, zval* /*value_z*/ TSRMLS_DC ); + virtual void operator()( _Inout_ sqlsrv_stmt* /*stmt*/, stmt_option const* /*opt*/, _In_ zval* /*value_z*/ TSRMLS_DC ); }; struct stmt_option_query_timeout : public stmt_option_functor { - virtual void operator()( sqlsrv_stmt* stmt, stmt_option const* opt, zval* value_z TSRMLS_DC ); + virtual void operator()( _Inout_ sqlsrv_stmt* stmt, stmt_option const* opt, _In_ zval* value_z TSRMLS_DC ); }; struct stmt_option_send_at_exec : public stmt_option_functor { - virtual void operator()( sqlsrv_stmt* stmt, stmt_option const* opt, zval* value_z TSRMLS_DC ); + virtual void operator()( _Inout_ sqlsrv_stmt* stmt, stmt_option const* opt, _In_ zval* value_z TSRMLS_DC ); }; struct stmt_option_buffered_query_limit : public stmt_option_functor { - virtual void operator()( sqlsrv_stmt* stmt, stmt_option const* opt, zval* value_z TSRMLS_DC ); + virtual void operator()( _Inout_ sqlsrv_stmt* stmt, stmt_option const* opt, _In_ zval* value_z TSRMLS_DC ); }; // used to hold the table for statment options @@ -1242,7 +1246,7 @@ struct sqlsrv_stream { SQLSMALLINT sql_type; sqlsrv_stmt* stmt; - sqlsrv_stream( zval* str_z, SQLSRV_ENCODING enc ) : + sqlsrv_stream( _In_opt_ zval* str_z, _In_ SQLSRV_ENCODING enc ) : stream_z( str_z ), encoding( enc ), field_index( 0 ), sql_type( SQL_UNKNOWN_TYPE ), stmt( NULL ) { } @@ -1272,13 +1276,13 @@ struct sqlsrv_output_param { bool is_bool; // string output param constructor - sqlsrv_output_param( zval* p_z, SQLSRV_ENCODING enc, int num, SQLUINTEGER buffer_len ) : + sqlsrv_output_param( _In_ zval* p_z, _In_ SQLSRV_ENCODING enc, _In_ int num, _In_ SQLUINTEGER buffer_len ) : param_z( p_z ), encoding( enc ), param_num( num ), original_buffer_len( buffer_len ), is_bool( false ) { } // every other type output parameter constructor - sqlsrv_output_param( zval* p_z, int num, bool is_bool ) : + sqlsrv_output_param( _In_ zval* p_z, _In_ int num, _In_ bool is_bool ) : param_z( p_z ), encoding( SQLSRV_ENCODING_INVALID ), param_num( num ), @@ -1327,11 +1331,11 @@ struct sqlsrv_stmt : public sqlsrv_context { zval col_cache; // Used by get_field_as_string not to call SQLColAttribute() after every fetch. zval active_stream; // the currently active stream reading data from the database - sqlsrv_stmt( sqlsrv_conn* c, SQLHANDLE handle, error_callback e, void* drv TSRMLS_DC ); + sqlsrv_stmt( _In_ sqlsrv_conn* c, _In_ SQLHANDLE handle, _In_ error_callback e, _In_opt_ void* drv TSRMLS_DC ); virtual ~sqlsrv_stmt( void ); // driver specific conversion rules from a SQL Server/ODBC type to one of the SQLSRV_PHPTYPE_* constants - virtual sqlsrv_phptype sql_type_to_php_type( SQLINTEGER sql_type, SQLUINTEGER size, bool prefer_string_to_stream ) = 0; + virtual sqlsrv_phptype sql_type_to_php_type( _In_ SQLINTEGER sql_type, _In_ SQLUINTEGER size, _In_ bool prefer_string_to_stream ) = 0; }; @@ -1375,27 +1379,27 @@ const size_t SQLSRV_CURSOR_BUFFERED = 0xfffffffeUL; // arbitrary number that doe typedef sqlsrv_stmt* (*driver_stmt_factory)( sqlsrv_conn* conn, SQLHANDLE h, error_callback e, void* drv TSRMLS_DC ); // *** statement functions *** -sqlsrv_stmt* core_sqlsrv_create_stmt( sqlsrv_conn* conn, driver_stmt_factory stmt_factory, HashTable* options_ht, - const stmt_option valid_stmt_opts[], error_callback const err, void* driver TSRMLS_DC ); -void core_sqlsrv_bind_param( sqlsrv_stmt* stmt, SQLUSMALLINT param_num, SQLSMALLINT direction, zval* param_z, - SQLSRV_PHPTYPE php_out_type, SQLSRV_ENCODING encoding, SQLSMALLINT sql_type, SQLULEN column_size, - SQLSMALLINT decimal_digits TSRMLS_DC ); -SQLRETURN core_sqlsrv_execute( sqlsrv_stmt* stmt TSRMLS_DC, const char* sql = NULL, int sql_len = 0 ); -field_meta_data* core_sqlsrv_field_metadata( sqlsrv_stmt* stmt, SQLSMALLINT colno TSRMLS_DC ); -bool core_sqlsrv_fetch( sqlsrv_stmt* stmt, SQLSMALLINT fetch_orientation, SQLULEN fetch_offset TSRMLS_DC ); -void core_sqlsrv_get_field(sqlsrv_stmt* stmt, SQLUSMALLINT field_index, sqlsrv_phptype sqlsrv_phptype, bool prefer_string, - _Out_ void*& field_value, _Out_ SQLLEN* field_length, bool cache_field, +sqlsrv_stmt* core_sqlsrv_create_stmt( _Inout_ sqlsrv_conn* conn, _In_ driver_stmt_factory stmt_factory, _In_opt_ HashTable* options_ht, + _In_opt_ const stmt_option valid_stmt_opts[], _In_ error_callback const err, _In_opt_ void* driver TSRMLS_DC ); +void core_sqlsrv_bind_param( _Inout_ sqlsrv_stmt* stmt, _In_ SQLUSMALLINT param_num, _In_ SQLSMALLINT direction, _Inout_ zval* param_z, + _In_ SQLSRV_PHPTYPE php_out_type, _In_ SQLSRV_ENCODING encoding, _Inout_ SQLSMALLINT sql_type, _Inout_ SQLULEN column_size, + _Inout_ SQLSMALLINT decimal_digits TSRMLS_DC ); +SQLRETURN core_sqlsrv_execute( _Inout_ sqlsrv_stmt* stmt TSRMLS_DC, _In_reads_bytes_(sql_len) const char* sql = NULL, _In_ int sql_len = 0 ); +field_meta_data* core_sqlsrv_field_metadata( _Inout_ sqlsrv_stmt* stmt, _In_ SQLSMALLINT colno TSRMLS_DC ); +bool core_sqlsrv_fetch( _Inout_ sqlsrv_stmt* stmt, _In_ SQLSMALLINT fetch_orientation, _In_ SQLULEN fetch_offset TSRMLS_DC ); +void core_sqlsrv_get_field( _Inout_ sqlsrv_stmt* stmt, _In_ SQLUSMALLINT field_index, _In_ sqlsrv_phptype sqlsrv_phptype, _In_ bool prefer_string, + _Outref_result_bytebuffer_maybenull_(*field_length) void*& field_value, _Inout_ SQLLEN* field_length, _In_ bool cache_field, _Out_ SQLSRV_PHPTYPE *sqlsrv_php_type_out TSRMLS_DC); -bool core_sqlsrv_has_any_result( sqlsrv_stmt* stmt TSRMLS_DC ); -void core_sqlsrv_next_result( sqlsrv_stmt* stmt TSRMLS_DC, bool finalize_output_params = true, bool throw_on_errors = true ); -void core_sqlsrv_post_param( sqlsrv_stmt* stmt, zend_ulong paramno, zval* param_z TSRMLS_DC ); -void core_sqlsrv_set_scrollable( sqlsrv_stmt* stmt, unsigned long cursor_type TSRMLS_DC ); -void core_sqlsrv_set_query_timeout( sqlsrv_stmt* stmt, long timeout TSRMLS_DC ); -void core_sqlsrv_set_query_timeout( sqlsrv_stmt* stmt, zval* value_z TSRMLS_DC ); -void core_sqlsrv_set_send_at_exec( sqlsrv_stmt* stmt, zval* value_z TSRMLS_DC ); -bool core_sqlsrv_send_stream_packet( sqlsrv_stmt* stmt TSRMLS_DC ); -void core_sqlsrv_set_buffered_query_limit( sqlsrv_stmt* stmt, zval* value_z TSRMLS_DC ); -void core_sqlsrv_set_buffered_query_limit( sqlsrv_stmt* stmt, SQLLEN limit TSRMLS_DC ); +bool core_sqlsrv_has_any_result( _Inout_ sqlsrv_stmt* stmt TSRMLS_DC ); +void core_sqlsrv_next_result( _Inout_ sqlsrv_stmt* stmt TSRMLS_DC, _In_ bool finalize_output_params = true, _In_ bool throw_on_errors = true ); +void core_sqlsrv_post_param( _Inout_ sqlsrv_stmt* stmt, _In_ zend_ulong paramno, zval* param_z TSRMLS_DC ); +void core_sqlsrv_set_scrollable( _Inout_ sqlsrv_stmt* stmt, _In_ unsigned long cursor_type TSRMLS_DC ); +void core_sqlsrv_set_query_timeout( _Inout_ sqlsrv_stmt* stmt, _In_ long timeout TSRMLS_DC ); +void core_sqlsrv_set_query_timeout( _Inout_ sqlsrv_stmt* stmt, _Inout_ zval* value_z TSRMLS_DC ); +void core_sqlsrv_set_send_at_exec( _Inout_ sqlsrv_stmt* stmt, _In_ zval* value_z TSRMLS_DC ); +bool core_sqlsrv_send_stream_packet( _Inout_ sqlsrv_stmt* stmt TSRMLS_DC ); +void core_sqlsrv_set_buffered_query_limit( _Inout_ sqlsrv_stmt* stmt, _In_ zval* value_z TSRMLS_DC ); +void core_sqlsrv_set_buffered_query_limit( _Inout_ sqlsrv_stmt* stmt, _In_ SQLLEN limit TSRMLS_DC ); //********************************************************************************************************************************* @@ -1413,35 +1417,35 @@ struct sqlsrv_result_set { sqlsrv_stmt* odbc; - explicit sqlsrv_result_set( sqlsrv_stmt* ); + explicit sqlsrv_result_set( _In_ sqlsrv_stmt* ); virtual ~sqlsrv_result_set( void ) { } virtual bool cached( int field_index ) = 0; - virtual SQLRETURN fetch( SQLSMALLINT fetch_orientation, SQLLEN fetch_offset TSRMLS_DC ) = 0; - virtual SQLRETURN get_data( SQLUSMALLINT field_index, SQLSMALLINT target_type, - _Out_ void* buffer, SQLLEN buffer_length, _Out_ SQLLEN* out_buffer_length, + virtual SQLRETURN fetch( _Inout_ SQLSMALLINT fetch_orientation, _Inout_opt_ SQLLEN fetch_offset TSRMLS_DC ) = 0; + virtual SQLRETURN get_data( _In_ SQLUSMALLINT field_index, _In_ SQLSMALLINT target_type, + _Out_writes_bytes_opt_(buffer_length) void* buffer, _In_ SQLLEN buffer_length, _Inout_ SQLLEN* out_buffer_length, bool handle_warning TSRMLS_DC )= 0; - virtual SQLRETURN get_diag_field( SQLSMALLINT record_number, SQLSMALLINT diag_identifier, - _Out_ SQLPOINTER diag_info_buffer, SQLSMALLINT buffer_length, - _Out_ SQLSMALLINT* out_buffer_length TSRMLS_DC ) = 0; - virtual sqlsrv_error* get_diag_rec( SQLSMALLINT record_number ) = 0; + virtual SQLRETURN get_diag_field( _In_ SQLSMALLINT record_number, _In_ SQLSMALLINT diag_identifier, + _Inout_updates_(buffer_length) SQLPOINTER diag_info_buffer, _In_ SQLSMALLINT buffer_length, + _Inout_ SQLSMALLINT* out_buffer_length TSRMLS_DC ) = 0; + virtual sqlsrv_error* get_diag_rec( _In_ SQLSMALLINT record_number ) = 0; virtual SQLLEN row_count( TSRMLS_D ) = 0; }; struct sqlsrv_odbc_result_set : public sqlsrv_result_set { - explicit sqlsrv_odbc_result_set( sqlsrv_stmt* ); + explicit sqlsrv_odbc_result_set( _In_ sqlsrv_stmt* ); virtual ~sqlsrv_odbc_result_set( void ); virtual bool cached( int field_index ) { return false; } - virtual SQLRETURN fetch( SQLSMALLINT fetch_orientation, SQLLEN fetch_offset TSRMLS_DC ); - virtual SQLRETURN get_data( SQLUSMALLINT field_index, SQLSMALLINT target_type, - _Out_ void* buffer, SQLLEN buffer_length, _Out_ SQLLEN* out_buffer_length, - bool handle_warning TSRMLS_DC ); - virtual SQLRETURN get_diag_field( SQLSMALLINT record_number, SQLSMALLINT diag_identifier, - _Out_ SQLPOINTER diag_info_buffer, SQLSMALLINT buffer_length, - _Out_ SQLSMALLINT* out_buffer_length TSRMLS_DC ); - virtual sqlsrv_error* get_diag_rec( SQLSMALLINT record_number ); + virtual SQLRETURN fetch( _In_ SQLSMALLINT fetch_orientation, _In_ SQLLEN fetch_offset TSRMLS_DC ); + virtual SQLRETURN get_data( _In_ SQLUSMALLINT field_index, _In_ SQLSMALLINT target_type, + _Out_writes_opt_(buffer_length) void* buffer, _In_ SQLLEN buffer_length, _Inout_ SQLLEN* out_buffer_length, + _In_ bool handle_warning TSRMLS_DC ); + virtual SQLRETURN get_diag_field( _In_ SQLSMALLINT record_number, _In_ SQLSMALLINT diag_identifier, + _Inout_updates_(buffer_length) SQLPOINTER diag_info_buffer, _In_ SQLSMALLINT buffer_length, + _Inout_ SQLSMALLINT* out_buffer_length TSRMLS_DC ); + virtual sqlsrv_error* get_diag_rec( _In_ SQLSMALLINT record_number ); virtual SQLLEN row_count( TSRMLS_D ); private: @@ -1468,18 +1472,18 @@ struct sqlsrv_buffered_result_set : public sqlsrv_result_set { static const zend_long BUFFERED_QUERY_LIMIT_DEFAULT = 10240; // measured in KB static const zend_long BUFFERED_QUERY_LIMIT_INVALID = 0; - explicit sqlsrv_buffered_result_set( sqlsrv_stmt* odbc TSRMLS_DC ); + explicit sqlsrv_buffered_result_set( _Inout_ sqlsrv_stmt* odbc TSRMLS_DC ); virtual ~sqlsrv_buffered_result_set( void ); virtual bool cached( int field_index ) { return true; } - virtual SQLRETURN fetch( SQLSMALLINT fetch_orientation, SQLLEN fetch_offset TSRMLS_DC ); - virtual SQLRETURN get_data( SQLUSMALLINT field_index, SQLSMALLINT target_type, - _Out_ void* buffer, SQLLEN buffer_length, _Out_ SQLLEN* out_buffer_length, + virtual SQLRETURN fetch( _Inout_ SQLSMALLINT fetch_orientation, _Inout_opt_ SQLLEN fetch_offset TSRMLS_DC ); + virtual SQLRETURN get_data( _In_ SQLUSMALLINT field_index, _In_ SQLSMALLINT target_type, + _Out_writes_bytes_opt_(buffer_length) void* buffer, _In_ SQLLEN buffer_length, _Inout_ SQLLEN* out_buffer_length, bool handle_warning TSRMLS_DC ); - virtual SQLRETURN get_diag_field( SQLSMALLINT record_number, SQLSMALLINT diag_identifier, - _Out_ SQLPOINTER diag_info_buffer, SQLSMALLINT buffer_length, - _Out_ SQLSMALLINT* out_buffer_length TSRMLS_DC ); - virtual sqlsrv_error* get_diag_rec( SQLSMALLINT record_number ); + virtual SQLRETURN get_diag_field( _In_ SQLSMALLINT record_number, _In_ SQLSMALLINT diag_identifier, + _Inout_updates_(buffer_length) SQLPOINTER diag_info_buffer, _In_ SQLSMALLINT buffer_length, + _Inout_ SQLSMALLINT* out_buffer_length TSRMLS_DC ); + virtual sqlsrv_error* get_diag_rec( _In_ SQLSMALLINT record_number ); virtual SQLLEN row_count( TSRMLS_D ); // buffered result set specific @@ -1509,55 +1513,55 @@ struct sqlsrv_buffered_result_set : public sqlsrv_result_set { sqlsrv_malloc_auto_ptr temp_string; // temp buffer to hold a converted field while in use SQLLEN temp_length; // number of bytes in the temp conversion buffer - typedef SQLRETURN (sqlsrv_buffered_result_set::*conv_fn)( SQLSMALLINT field_index, _Out_ void* buffer, SQLLEN buffer_length, - _Out_ SQLLEN* out_buffer_length ); + typedef SQLRETURN (sqlsrv_buffered_result_set::*conv_fn)( _In_ SQLSMALLINT field_index, _Out_writes_z_(*out_buffer_length) void* buffer, _In_ SQLLEN buffer_length, + _Inout_ SQLLEN* out_buffer_length ); typedef std::map< SQLINTEGER, std::map< SQLINTEGER, conv_fn > > conv_matrix_t; // two dimentional sparse matrix that holds the [from][to] functions that do conversions static conv_matrix_t conv_matrix; // string conversion functions - SQLRETURN binary_to_wide_string( SQLSMALLINT field_index, _Out_ void* buffer, SQLLEN buffer_length, + SQLRETURN binary_to_wide_string( _In_ SQLSMALLINT field_index, _Out_writes_z_(*out_buffer_length) void* buffer, _In_ SQLLEN buffer_length, + _Inout_ SQLLEN* out_buffer_length ); + SQLRETURN binary_to_system_string( _In_ SQLSMALLINT field_index, _Out_writes_z_(*out_buffer_length) void* buffer, _In_ SQLLEN buffer_length, + _Inout_ SQLLEN* out_buffer_length ); + SQLRETURN system_to_wide_string( _In_ SQLSMALLINT field_index, _Out_writes_z_(*out_buffer_length) void* buffer, _In_ SQLLEN buffer_length, _Out_ SQLLEN* out_buffer_length ); - SQLRETURN binary_to_system_string( SQLSMALLINT field_index, _Out_ void* buffer, SQLLEN buffer_length, - _Out_ SQLLEN* out_buffer_length ); - SQLRETURN system_to_wide_string( SQLSMALLINT field_index, _Out_ void* buffer, SQLLEN buffer_length, - _Out_ SQLLEN* out_buffer_length ); - SQLRETURN to_binary_string( SQLSMALLINT field_index, _Out_ void* buffer, SQLLEN buffer_length, + SQLRETURN to_binary_string( _In_ SQLSMALLINT field_index, _Out_writes_bytes_to_opt_(buffer_length, *out_buffer_length) void* buffer, _In_ SQLLEN buffer_length, _Out_ SQLLEN* out_buffer_length ); - SQLRETURN to_same_string( SQLSMALLINT field_index, _Out_ void* buffer, SQLLEN buffer_length, + SQLRETURN to_same_string( _In_ SQLSMALLINT field_index, _Out_writes_bytes_to_opt_(buffer_length, *out_buffer_length) void* buffer, _In_ SQLLEN buffer_length, _Out_ SQLLEN* out_buffer_length ); - SQLRETURN wide_to_system_string( SQLSMALLINT field_index, _Out_ void* buffer, SQLLEN buffer_length, - _Out_ SQLLEN* out_buffer_length ); + SQLRETURN wide_to_system_string( _In_ SQLSMALLINT field_index, _Inout_updates_bytes_to_(buffer_length, *out_buffer_length) void* buffer, _In_ SQLLEN buffer_length, + _Inout_ SQLLEN* out_buffer_length ); // long conversion functions - SQLRETURN to_long( SQLSMALLINT field_index, _Out_ void* buffer, SQLLEN buffer_length, _Out_ SQLLEN* out_buffer_length ); - SQLRETURN long_to_system_string( SQLSMALLINT field_index, _Out_ void* buffer, SQLLEN buffer_length, - _Out_ SQLLEN* out_buffer_length ); - SQLRETURN long_to_wide_string( SQLSMALLINT field_index, _Out_ void* buffer, SQLLEN buffer_length, - _Out_ SQLLEN* out_buffer_length ); - SQLRETURN long_to_double( SQLSMALLINT field_index, _Out_ void* buffer, SQLLEN buffer_length, + SQLRETURN to_long( _In_ SQLSMALLINT field_index, _Out_writes_bytes_to_opt_(buffer_length, *out_buffer_length) void* buffer, _In_ SQLLEN buffer_length, _Out_ SQLLEN* out_buffer_length ); + SQLRETURN long_to_system_string( _In_ SQLSMALLINT field_index, _Out_writes_bytes_to_opt_(buffer_length, *out_buffer_length) void* buffer, _In_ SQLLEN buffer_length, + _Inout_ SQLLEN* out_buffer_length ); + SQLRETURN long_to_wide_string( _In_ SQLSMALLINT field_index, _Out_writes_bytes_to_opt_(buffer_length, *out_buffer_length) void* buffer, _In_ SQLLEN buffer_length, + _Inout_ SQLLEN* out_buffer_length ); + SQLRETURN long_to_double( _In_ SQLSMALLINT field_index, _Out_writes_bytes_(*out_buffer_length) void* buffer, _In_ SQLLEN buffer_length, _Out_ SQLLEN* out_buffer_length ); // double conversion functions - SQLRETURN to_double( SQLSMALLINT field_index, _Out_ void* buffer, SQLLEN buffer_length, _Out_ SQLLEN* out_buffer_length ); - SQLRETURN double_to_system_string( SQLSMALLINT field_index, _Out_ void* buffer, SQLLEN buffer_length, - _Out_ SQLLEN* out_buffer_length ); - SQLRETURN double_to_wide_string( SQLSMALLINT field_index, _Out_ void* buffer, SQLLEN buffer_length, - _Out_ SQLLEN* out_buffer_length ); - SQLRETURN double_to_long( SQLSMALLINT field_index, _Out_ void* buffer, SQLLEN buffer_length, - _Out_ SQLLEN* out_buffer_length ); + SQLRETURN to_double( _In_ SQLSMALLINT field_index, _Out_writes_bytes_to_opt_(buffer_length, *out_buffer_length) void* buffer, _In_ SQLLEN buffer_length, _Out_ SQLLEN* out_buffer_length ); + SQLRETURN double_to_system_string( _In_ SQLSMALLINT field_index, _Out_writes_bytes_to_opt_(buffer_length, *out_buffer_length) void* buffer, _In_ SQLLEN buffer_length, + _Inout_ SQLLEN* out_buffer_length ); + SQLRETURN double_to_wide_string( _In_ SQLSMALLINT field_index, _Out_writes_bytes_to_opt_(buffer_length, *out_buffer_length) void* buffer, _In_ SQLLEN buffer_length, + _Inout_ SQLLEN* out_buffer_length ); + SQLRETURN double_to_long( _In_ SQLSMALLINT field_index, _Inout_updates_bytes_(*out_buffer_length) void* buffer, _In_ SQLLEN buffer_length, + _Inout_ SQLLEN* out_buffer_length ); // string to number conversion functions // Future: See if these can be converted directly to template member functions - SQLRETURN string_to_double( SQLSMALLINT field_index, _Out_ void* buffer, SQLLEN buffer_length, - _Out_ SQLLEN* out_buffer_length ); - SQLRETURN string_to_long( SQLSMALLINT field_index, _Out_ void* buffer, SQLLEN buffer_length, - _Out_ SQLLEN* out_buffer_length ); - SQLRETURN wstring_to_double( SQLSMALLINT field_index, _Out_ void* buffer, SQLLEN buffer_length, - _Out_ SQLLEN* out_buffer_length ); - SQLRETURN wstring_to_long( SQLSMALLINT field_index, _Out_ void* buffer, SQLLEN buffer_length, - _Out_ SQLLEN* out_buffer_length ); + SQLRETURN string_to_double( _In_ SQLSMALLINT field_index, _Out_writes_bytes_(*out_buffer_length) void* buffer, _In_ SQLLEN buffer_length, + _Inout_ SQLLEN* out_buffer_length ); + SQLRETURN string_to_long( _In_ SQLSMALLINT field_index, _Out_writes_bytes_(*out_buffer_length) void* buffer, _In_ SQLLEN buffer_length, + _Inout_ SQLLEN* out_buffer_length ); + SQLRETURN wstring_to_double( _In_ SQLSMALLINT field_index, _Out_writes_bytes_(*out_buffer_length) void* buffer, _In_ SQLLEN buffer_length, + _Inout_ SQLLEN* out_buffer_length ); + SQLRETURN wstring_to_long( _In_ SQLSMALLINT field_index, _Out_writes_bytes_(*out_buffer_length) void* buffer, _In_ SQLLEN buffer_length, + _Inout_ SQLLEN* out_buffer_length ); // utility functions for conversions unsigned char* get_row( void ); @@ -1575,11 +1579,11 @@ struct sqlsrv_buffered_result_set : public sqlsrv_result_set { #define MEMCHECK_SILENT 1 // utility functions shared by multiple callers across files -bool convert_string_from_utf16_inplace( SQLSRV_ENCODING encoding, char** string, SQLLEN& len); -bool convert_zval_string_from_utf16(SQLSRV_ENCODING encoding, zval* value_z, SQLLEN& len); -bool validate_string(char* string, SQLLEN& len); -bool convert_string_from_utf16( SQLSRV_ENCODING encoding, const SQLWCHAR* inString, SQLINTEGER cchInLen, char** outString, SQLLEN& cchOutLen ); -SQLWCHAR* utf16_string_from_mbcs_string( SQLSRV_ENCODING php_encoding, const char* mbcs_string, unsigned int mbcs_len, _Out_ unsigned int* utf16_len ); +bool convert_string_from_utf16_inplace( _In_ SQLSRV_ENCODING encoding, _Inout_updates_z_(len) char** string, _Inout_ SQLLEN& len); +bool convert_zval_string_from_utf16( _In_ SQLSRV_ENCODING encoding, _Inout_ zval* value_z, _Inout_ SQLLEN& len); +bool validate_string( _In_ char* string, _In_ SQLLEN& len); +bool convert_string_from_utf16( _In_ SQLSRV_ENCODING encoding, _In_reads_bytes_(cchInLen) const SQLWCHAR* inString, _In_ SQLINTEGER cchInLen, _Inout_updates_bytes_(cchOutLen) char** outString, _Out_ SQLLEN& cchOutLen ); +SQLWCHAR* utf16_string_from_mbcs_string( _In_ SQLSRV_ENCODING php_encoding, _In_reads_bytes_(mbcs_len) const char* mbcs_string, _In_ unsigned int mbcs_len, _Out_ unsigned int* utf16_len ); //********************************************************************************************************************************* // Error handling routines and Predefined Errors @@ -1657,24 +1661,24 @@ enum error_handling_flags { // 2/code) driver specific error code // 3/message) driver specific error message // The fetch type determines if the indices are numeric, associative, or both. -bool core_sqlsrv_get_odbc_error( sqlsrv_context& ctx, int record_number, _Out_ sqlsrv_error_auto_ptr& error, - logging_severity severity TSRMLS_DC ); +bool core_sqlsrv_get_odbc_error( _Inout_ sqlsrv_context& ctx, _In_ int record_number, _Inout_ sqlsrv_error_auto_ptr& error, + _In_ logging_severity severity TSRMLS_DC ); // format and return a driver specfic error -void core_sqlsrv_format_driver_error( sqlsrv_context& ctx, sqlsrv_error_const const* custom_error, - sqlsrv_error_auto_ptr& formatted_error, logging_severity severity TSRMLS_DC, va_list* args ); +void core_sqlsrv_format_driver_error( _In_ sqlsrv_context& ctx, _In_ sqlsrv_error_const const* custom_error, + _Out_ sqlsrv_error_auto_ptr& formatted_error, _In_ logging_severity severity TSRMLS_DC, _In_opt_ va_list* args ); // return the message for the HRESULT returned by GetLastError. Some driver errors use this to // return the Windows error, e.g, when a UTF-8 <-> UTF-16 conversion fails. -const char* get_last_error_message( DWORD last_error = 0 ); +const char* get_last_error_message( _Inout_ DWORD last_error = 0 ); // a wrapper around FormatMessage that can take variadic args rather than a a va_arg pointer -DWORD core_sqlsrv_format_message( char* output_buffer, unsigned output_len, const char* format, ... ); +DWORD core_sqlsrv_format_message( _Out_ char* output_buffer, _In_ unsigned output_len, _In_opt_ const char* format, ... ); // convenience functions that overload either a reference or a pointer so we can use // either in the CHECK_* functions. -inline bool call_error_handler( sqlsrv_context& ctx, unsigned long sqlsrv_error_code TSRMLS_DC, bool warning, ... ) +inline bool call_error_handler( _Inout_ sqlsrv_context& ctx, _In_ unsigned long sqlsrv_error_code TSRMLS_DC, _In_ bool warning, ... ) { va_list print_params; va_start( print_params, warning ); @@ -1683,7 +1687,7 @@ inline bool call_error_handler( sqlsrv_context& ctx, unsigned long sqlsrv_error_ return ignored; } -inline bool call_error_handler( sqlsrv_context* ctx, unsigned long sqlsrv_error_code TSRMLS_DC, bool warning, ... ) +inline bool call_error_handler( _Inout_ sqlsrv_context* ctx, _In_ unsigned long sqlsrv_error_code TSRMLS_DC, _In_ bool warning, ... ) { va_list print_params; va_start( print_params, warning ); @@ -1711,7 +1715,7 @@ inline bool call_error_handler( sqlsrv_context* ctx, unsigned long sqlsrv_error_ #endif // check to see if the sqlstate is 01004, truncated field retrieved. Used for retrieving large fields. -inline bool is_truncated_warning( SQLCHAR* state ) +inline bool is_truncated_warning( _In_ SQLCHAR* state ) { #if defined(ZEND_DEBUG) if( state == NULL || strlen( reinterpret_cast( state )) != 5 ) { \ @@ -1796,7 +1800,7 @@ namespace core { } }; - inline void check_for_mars_error( sqlsrv_stmt* stmt, SQLRETURN r TSRMLS_DC ) + inline void check_for_mars_error( _Inout_ sqlsrv_stmt* stmt, _In_ SQLRETURN r TSRMLS_DC ) { // We check for the 'connection busy' error caused by having MultipleActiveResultSets off // and return a more helpful message prepended to the ODBC errors if that error occurs @@ -1828,9 +1832,9 @@ namespace core { // These functions take the sqlsrv_context type. However, since the error handling code can alter // the context to hold the error, they are not passed as const. - inline SQLRETURN SQLGetDiagField( sqlsrv_context* ctx, SQLSMALLINT record_number, SQLSMALLINT diag_identifier, - _Out_ SQLPOINTER diag_info_buffer, SQLSMALLINT buffer_length, - _Out_ SQLSMALLINT* out_buffer_length TSRMLS_DC ) + inline SQLRETURN SQLGetDiagField( _Inout_ sqlsrv_context* ctx, _In_ SQLSMALLINT record_number, _In_ SQLSMALLINT diag_identifier, + _Out_writes_opt_(buffer_length) SQLPOINTER diag_info_buffer, _In_ SQLSMALLINT buffer_length, + _Out_opt_ SQLSMALLINT* out_buffer_length TSRMLS_DC ) { SQLRETURN r = ::SQLGetDiagField( ctx->handle_type(), ctx->handle(), record_number, diag_identifier, diag_info_buffer, buffer_length, out_buffer_length ); @@ -1842,8 +1846,8 @@ namespace core { return r; } - inline void SQLAllocHandle( SQLSMALLINT HandleType, sqlsrv_context& InputHandle, - _Out_writes_(1) SQLHANDLE* OutputHandlePtr TSRMLS_DC ) + inline void SQLAllocHandle( _In_ SQLSMALLINT HandleType, _Inout_ sqlsrv_context& InputHandle, + _Out_ SQLHANDLE* OutputHandlePtr TSRMLS_DC ) { SQLRETURN r; r = ::SQLAllocHandle( HandleType, InputHandle.handle(), OutputHandlePtr ); @@ -1852,16 +1856,16 @@ namespace core { } } - inline void SQLBindParameter( sqlsrv_stmt* stmt, - SQLUSMALLINT ParameterNumber, - SQLSMALLINT InputOutputType, - SQLSMALLINT ValueType, - SQLSMALLINT ParameterType, - SQLULEN ColumnSize, - SQLSMALLINT DecimalDigits, - _Inout_ SQLPOINTER ParameterValuePtr, - SQLLEN BufferLength, - _Inout_ SQLLEN * StrLen_Or_IndPtr + inline void SQLBindParameter( _Inout_ sqlsrv_stmt* stmt, + _In_ SQLUSMALLINT ParameterNumber, + _In_ SQLSMALLINT InputOutputType, + _In_ SQLSMALLINT ValueType, + _In_ SQLSMALLINT ParameterType, + _In_ SQLULEN ColumnSize, + _In_ SQLSMALLINT DecimalDigits, + _Inout_opt_ SQLPOINTER ParameterValuePtr, + _Inout_ SQLLEN BufferLength, + _Inout_ SQLLEN * StrLen_Or_IndPtr TSRMLS_DC ) { SQLRETURN r; @@ -1874,9 +1878,9 @@ namespace core { } - inline void SQLColAttribute( sqlsrv_stmt* stmt, SQLUSMALLINT field_index, SQLUSMALLINT field_identifier, - _Out_ SQLPOINTER field_type_char, SQLSMALLINT buffer_length, - _Out_ SQLSMALLINT* out_buffer_length, _Out_ SQLLEN* field_type_num TSRMLS_DC ) + inline void SQLColAttribute( _Inout_ sqlsrv_stmt* stmt, _In_ SQLUSMALLINT field_index, _In_ SQLUSMALLINT field_identifier, + _Out_writes_bytes_opt_(buffer_length) SQLPOINTER field_type_char, _In_ SQLSMALLINT buffer_length, + _Out_opt_ SQLSMALLINT* out_buffer_length, _Out_opt_ SQLLEN* field_type_num TSRMLS_DC ) { SQLRETURN r = ::SQLColAttribute( stmt->handle(), field_index, field_identifier, field_type_char, buffer_length, out_buffer_length, field_type_num ); @@ -1886,9 +1890,9 @@ namespace core { } } - inline void SQLColAttributeW( sqlsrv_stmt* stmt, SQLUSMALLINT field_index, SQLUSMALLINT field_identifier, - _Out_ SQLPOINTER field_type_char, SQLSMALLINT buffer_length, - _Out_ SQLSMALLINT* out_buffer_length, _Out_ SQLLEN* field_type_num TSRMLS_DC ) + inline void SQLColAttributeW( _Inout_ sqlsrv_stmt* stmt, _In_ SQLUSMALLINT field_index, _In_ SQLUSMALLINT field_identifier, + _Out_writes_bytes_opt_(buffer_length) SQLPOINTER field_type_char, _In_ SQLSMALLINT buffer_length, + _Out_opt_ SQLSMALLINT* out_buffer_length, _Out_opt_ SQLLEN* field_type_num TSRMLS_DC ) { SQLRETURN r = ::SQLColAttributeW( stmt->handle(), field_index, field_identifier, field_type_char, buffer_length, out_buffer_length, field_type_num ); @@ -1898,9 +1902,9 @@ namespace core { } } - inline void SQLDescribeCol( sqlsrv_stmt* stmt, SQLSMALLINT colno, _Out_ SQLCHAR* col_name, SQLSMALLINT col_name_length, - _Out_ SQLSMALLINT* col_name_length_out, SQLSMALLINT* data_type, _Out_ SQLULEN* col_size, - _Out_ SQLSMALLINT* decimal_digits, _Out_ SQLSMALLINT* nullable TSRMLS_DC ) + inline void SQLDescribeCol( _Inout_ sqlsrv_stmt* stmt, _In_ SQLSMALLINT colno, _Out_writes_opt_(col_name_length) SQLCHAR* col_name, _In_ SQLSMALLINT col_name_length, + _Out_opt_ SQLSMALLINT* col_name_length_out, _Out_opt_ SQLSMALLINT* data_type, _Out_opt_ SQLULEN* col_size, + _Out_opt_ SQLSMALLINT* decimal_digits, _Out_opt_ SQLSMALLINT* nullable TSRMLS_DC ) { SQLRETURN r; r = ::SQLDescribeCol( stmt->handle(), colno, col_name, col_name_length, col_name_length_out, @@ -1911,9 +1915,9 @@ namespace core { } } - inline void SQLDescribeColW( sqlsrv_stmt* stmt, SQLSMALLINT colno, _Out_ SQLWCHAR* col_name, SQLSMALLINT col_name_length, - _Out_ SQLSMALLINT* col_name_length_out, SQLSMALLINT* data_type, _Out_ SQLULEN* col_size, - _Out_ SQLSMALLINT* decimal_digits, _Out_ SQLSMALLINT* nullable TSRMLS_DC ) + inline void SQLDescribeColW( _Inout_ sqlsrv_stmt* stmt, _In_ SQLSMALLINT colno, _Out_writes_opt_(col_name_length) SQLWCHAR* col_name, _In_ SQLSMALLINT col_name_length, + _Out_opt_ SQLSMALLINT* col_name_length_out, _Out_opt_ SQLSMALLINT* data_type, _Out_opt_ SQLULEN* col_size, + _Out_opt_ SQLSMALLINT* decimal_digits, _Out_opt_ SQLSMALLINT* nullable TSRMLS_DC ) { SQLRETURN r; r = ::SQLDescribeColW( stmt->handle(), colno, col_name, col_name_length, col_name_length_out, @@ -1924,7 +1928,7 @@ namespace core { } } - inline void SQLEndTran( SQLSMALLINT handleType, sqlsrv_conn* conn, SQLSMALLINT completionType TSRMLS_DC ) + inline void SQLEndTran( _In_ SQLSMALLINT handleType, _Inout_ sqlsrv_conn* conn, _In_ SQLSMALLINT completionType TSRMLS_DC ) { SQLRETURN r = ::SQLEndTran( handleType, conn->handle(), completionType ); @@ -1934,7 +1938,7 @@ namespace core { } // SQLExecDirect returns the status code since it returns either SQL_NEED_DATA or SQL_NO_DATA besides just errors/success - inline SQLRETURN SQLExecDirect( sqlsrv_stmt* stmt, char* sql TSRMLS_DC ) + inline SQLRETURN SQLExecDirect( _Inout_ sqlsrv_stmt* stmt, _In_ char* sql TSRMLS_DC ) { SQLRETURN r = ::SQLExecDirect( stmt->handle(), reinterpret_cast( sql ), SQL_NTS ); @@ -1947,7 +1951,7 @@ namespace core { return r; } - inline SQLRETURN SQLExecDirectW( sqlsrv_stmt* stmt, SQLWCHAR* wsql TSRMLS_DC ) + inline SQLRETURN SQLExecDirectW( _Inout_ sqlsrv_stmt* stmt, _In_ SQLWCHAR* wsql TSRMLS_DC ) { SQLRETURN r; r = ::SQLExecDirectW( stmt->handle(), reinterpret_cast( wsql ), SQL_NTS ); @@ -1961,7 +1965,7 @@ namespace core { } // SQLExecute returns the status code since it returns either SQL_NEED_DATA or SQL_NO_DATA besides just errors/success - inline SQLRETURN SQLExecute( sqlsrv_stmt* stmt TSRMLS_DC ) + inline SQLRETURN SQLExecute( _Inout_ sqlsrv_stmt* stmt TSRMLS_DC ) { SQLRETURN r; r = ::SQLExecute( stmt->handle() ); @@ -1975,7 +1979,7 @@ namespace core { return r; } - inline SQLRETURN SQLFetchScroll( sqlsrv_stmt* stmt, SQLSMALLINT fetch_orientation, SQLLEN fetch_offset TSRMLS_DC ) + inline SQLRETURN SQLFetchScroll( _Inout_ sqlsrv_stmt* stmt, _In_ SQLSMALLINT fetch_orientation, _In_ SQLLEN fetch_offset TSRMLS_DC ) { SQLRETURN r = ::SQLFetchScroll( stmt->handle(), fetch_orientation, fetch_offset ); @@ -1987,16 +1991,16 @@ namespace core { // wrap SQLFreeHandle and report any errors, but don't actually signal an error to the calling routine - inline void SQLFreeHandle( sqlsrv_context& ctx TSRMLS_DC ) + inline void SQLFreeHandle( _Inout_ sqlsrv_context& ctx TSRMLS_DC ) { SQLRETURN r; r = ::SQLFreeHandle( ctx.handle_type(), ctx.handle() ); CHECK_SQL_ERROR_OR_WARNING( r, ctx ) {} } - inline SQLRETURN SQLGetData( sqlsrv_stmt* stmt, SQLUSMALLINT field_index, SQLSMALLINT target_type, - _Out_ void* buffer, SQLLEN buffer_length, _Out_ SQLLEN* out_buffer_length, - bool handle_warning TSRMLS_DC ) + inline SQLRETURN SQLGetData( _Inout_ sqlsrv_stmt* stmt, _In_ SQLUSMALLINT field_index, _In_ SQLSMALLINT target_type, + _Out_writes_opt_(buffer_length) void* buffer, _In_ SQLLEN buffer_length, _Out_opt_ SQLLEN* out_buffer_length, + _In_ bool handle_warning TSRMLS_DC ) { SQLRETURN r = ::SQLGetData( stmt->handle(), field_index, target_type, buffer, buffer_length, out_buffer_length ); @@ -2017,8 +2021,8 @@ namespace core { } - inline void SQLGetInfo( sqlsrv_conn* conn, SQLUSMALLINT info_type, _Out_ SQLPOINTER info_value, SQLSMALLINT buffer_len, - _Out_ SQLSMALLINT* str_len TSRMLS_DC ) + inline void SQLGetInfo( _Inout_ sqlsrv_conn* conn, _In_ SQLUSMALLINT info_type, _Out_writes_bytes_opt_(buffer_len) SQLPOINTER info_value, _In_ SQLSMALLINT buffer_len, + _Out_opt_ SQLSMALLINT* str_len TSRMLS_DC ) { SQLRETURN r; r = ::SQLGetInfo( conn->handle(), info_type, info_value, buffer_len, str_len ); @@ -2029,7 +2033,7 @@ namespace core { } - inline void SQLGetTypeInfo( sqlsrv_stmt* stmt, SQLUSMALLINT data_type TSRMLS_DC ) + inline void SQLGetTypeInfo( _Inout_ sqlsrv_stmt* stmt, _In_ SQLUSMALLINT data_type TSRMLS_DC ) { SQLRETURN r; r = ::SQLGetTypeInfo( stmt->handle(), data_type ); @@ -2041,7 +2045,7 @@ namespace core { // SQLMoreResults returns the status code since it returns SQL_NO_DATA when there is no more data in a result set. - inline SQLRETURN SQLMoreResults( sqlsrv_stmt* stmt TSRMLS_DC ) + inline SQLRETURN SQLMoreResults( _Inout_ sqlsrv_stmt* stmt TSRMLS_DC ) { SQLRETURN r = ::SQLMoreResults( stmt->handle() ); @@ -2052,7 +2056,7 @@ namespace core { return r; } - inline SQLSMALLINT SQLNumResultCols( sqlsrv_stmt* stmt TSRMLS_DC ) + inline SQLSMALLINT SQLNumResultCols( _Inout_ sqlsrv_stmt* stmt TSRMLS_DC ) { SQLRETURN r; SQLSMALLINT num_cols; @@ -2067,7 +2071,7 @@ namespace core { // SQLParamData returns the status code since it returns either SQL_NEED_DATA or SQL_NO_DATA when there are more // parameters or when the parameters are all processed. - inline SQLRETURN SQLParamData( sqlsrv_stmt* stmt, _Out_ SQLPOINTER* value_ptr_ptr TSRMLS_DC ) + inline SQLRETURN SQLParamData( _Inout_ sqlsrv_stmt* stmt, _Out_opt_ SQLPOINTER* value_ptr_ptr TSRMLS_DC ) { SQLRETURN r; r = ::SQLParamData( stmt->handle(), value_ptr_ptr ); @@ -2077,7 +2081,7 @@ namespace core { return r; } - inline void SQLPrepareW( sqlsrv_stmt* stmt, SQLWCHAR * sql, SQLINTEGER sql_len TSRMLS_DC ) + inline void SQLPrepareW( _Inout_ sqlsrv_stmt* stmt, _In_reads_(sql_len) SQLWCHAR * sql, _In_ SQLINTEGER sql_len TSRMLS_DC ) { SQLRETURN r; r = ::SQLPrepareW( stmt->handle(), sql, sql_len ); @@ -2087,7 +2091,7 @@ namespace core { } - inline void SQLPutData( sqlsrv_stmt* stmt, SQLPOINTER data_ptr, SQLLEN strlen_or_ind TSRMLS_DC ) + inline void SQLPutData( _Inout_ sqlsrv_stmt* stmt, _In_reads_(strlen_or_ind) SQLPOINTER data_ptr, _In_ SQLLEN strlen_or_ind TSRMLS_DC ) { SQLRETURN r; r = ::SQLPutData( stmt->handle(), data_ptr, strlen_or_ind ); @@ -2097,7 +2101,7 @@ namespace core { } - inline SQLLEN SQLRowCount( sqlsrv_stmt* stmt TSRMLS_DC ) + inline SQLLEN SQLRowCount( _Inout_ sqlsrv_stmt* stmt TSRMLS_DC ) { SQLRETURN r; SQLLEN rows_affected; @@ -2124,7 +2128,7 @@ namespace core { } - inline void SQLSetConnectAttr( sqlsrv_context& ctx, SQLINTEGER attr, SQLPOINTER value_ptr, SQLINTEGER str_len TSRMLS_DC ) + inline void SQLSetConnectAttr( _Inout_ sqlsrv_context& ctx, _In_ SQLINTEGER attr, _In_reads_bytes_opt_(str_len) SQLPOINTER value_ptr, _In_ SQLINTEGER str_len TSRMLS_DC ) { SQLRETURN r; r = ::SQLSetConnectAttr( ctx.handle(), attr, value_ptr, str_len ); @@ -2135,7 +2139,7 @@ namespace core { } - inline void SQLSetEnvAttr( sqlsrv_context& ctx, SQLINTEGER attr, SQLPOINTER value_ptr, SQLINTEGER str_len TSRMLS_DC ) + inline void SQLSetEnvAttr( _Inout_ sqlsrv_context& ctx, _In_ SQLINTEGER attr, _In_reads_bytes_opt_(str_len) SQLPOINTER value_ptr, _In_ SQLINTEGER str_len TSRMLS_DC ) { SQLRETURN r; r = ::SQLSetEnvAttr( ctx.handle(), attr, value_ptr, str_len ); @@ -2144,7 +2148,7 @@ namespace core { } } - inline void SQLSetConnectAttr( sqlsrv_conn* conn, SQLINTEGER attribute, SQLPOINTER value_ptr, SQLINTEGER value_len TSRMLS_DC ) + inline void SQLSetConnectAttr( _Inout_ sqlsrv_conn* conn, _In_ SQLINTEGER attribute, _In_reads_bytes_opt_(value_len) SQLPOINTER value_ptr, _In_ SQLINTEGER value_len TSRMLS_DC ) { SQLRETURN r = ::SQLSetConnectAttr( conn->handle(), attribute, value_ptr, value_len ); @@ -2153,7 +2157,7 @@ namespace core { } } - inline void SQLSetStmtAttr( sqlsrv_stmt* stmt, SQLINTEGER attr, SQLPOINTER value_ptr, SQLINTEGER str_len TSRMLS_DC ) + inline void SQLSetStmtAttr( _Inout_ sqlsrv_stmt* stmt, _In_ SQLINTEGER attr, _In_reads_(str_len) SQLPOINTER value_ptr, _In_ SQLINTEGER str_len TSRMLS_DC ) { SQLRETURN r; r = ::SQLSetStmtAttr( stmt->handle(), attr, value_ptr, str_len ); @@ -2170,7 +2174,7 @@ namespace core { // wrapper for ZVAL_STRINGL macro. ZVAL_STRINGL always allocates memory when initialzing new string from char string // so allocated memory inside of value_z should be released before assigning it to the new string - inline void sqlsrv_zval_stringl(zval* value_z, const char* str, const std::size_t str_len) + inline void sqlsrv_zval_stringl( _Inout_ zval* value_z, _In_reads_(str_len) const char* str, _In_ const std::size_t str_len) { if (Z_TYPE_P(value_z) == IS_STRING && Z_STR_P(value_z) != NULL) { zend_string* temp_zstr = zend_string_init(str, str_len, 0); @@ -2191,7 +2195,7 @@ namespace core { // If there is a zend function in the source that isn't found here, it is because it returns void and there is no error // that can be thrown from it. - inline void sqlsrv_add_index_zval( sqlsrv_context& ctx, zval* array, zend_ulong index, zval* value TSRMLS_DC) + inline void sqlsrv_add_index_zval( _Inout_ sqlsrv_context& ctx, _Inout_ zval* array, _In_ zend_ulong index, _In_ zval* value TSRMLS_DC) { int zr = ::add_index_zval( array, index, value ); CHECK_ZEND_ERROR( zr, ctx, SQLSRV_ERROR_ZEND_HASH ) { @@ -2199,7 +2203,7 @@ namespace core { } } - inline void sqlsrv_add_next_index_zval( sqlsrv_context& ctx, zval* array, zval* value TSRMLS_DC) + inline void sqlsrv_add_next_index_zval( _Inout_ sqlsrv_context& ctx, _Inout_ zval* array, _In_ zval* value TSRMLS_DC) { int zr = ::add_next_index_zval( array, value ); CHECK_ZEND_ERROR( zr, ctx, SQLSRV_ERROR_ZEND_HASH ) { @@ -2207,7 +2211,7 @@ namespace core { } } - inline void sqlsrv_add_assoc_null( sqlsrv_context& ctx, zval* array_z, const char* key TSRMLS_DC ) + inline void sqlsrv_add_assoc_null( _Inout_ sqlsrv_context& ctx, _Inout_ zval* array_z, _In_ const char* key TSRMLS_DC ) { int zr = ::add_assoc_null( array_z, key ); CHECK_ZEND_ERROR (zr, ctx, SQLSRV_ERROR_ZEND_HASH ) { @@ -2215,7 +2219,7 @@ namespace core { } } - inline void sqlsrv_add_assoc_long( sqlsrv_context& ctx, zval* array_z, const char* key, zend_long val TSRMLS_DC ) + inline void sqlsrv_add_assoc_long( _Inout_ sqlsrv_context& ctx, _Inout_ zval* array_z, _In_ const char* key, _In_ zend_long val TSRMLS_DC ) { int zr = ::add_assoc_long( array_z, key, val ); CHECK_ZEND_ERROR (zr, ctx, SQLSRV_ERROR_ZEND_HASH ) { @@ -2223,7 +2227,7 @@ namespace core { } } - inline void sqlsrv_add_assoc_string( sqlsrv_context& ctx, zval* array_z, const char* key, char* val, bool duplicate TSRMLS_DC ) + inline void sqlsrv_add_assoc_string( _Inout_ sqlsrv_context& ctx, _Inout_ zval* array_z, _In_ const char* key, _Inout_z_ char* val, _In_ bool duplicate TSRMLS_DC ) { int zr = ::add_assoc_string(array_z, key, val); CHECK_ZEND_ERROR (zr, ctx, SQLSRV_ERROR_ZEND_HASH ) { @@ -2234,7 +2238,7 @@ namespace core { } } - inline void sqlsrv_array_init( sqlsrv_context& ctx, _Out_ zval* new_array TSRMLS_DC) + inline void sqlsrv_array_init( _Inout_ sqlsrv_context& ctx, _Out_ zval* new_array TSRMLS_DC) { int zr = ::array_init(new_array); CHECK_ZEND_ERROR( zr, ctx, SQLSRV_ERROR_ZEND_HASH ) { @@ -2242,7 +2246,7 @@ namespace core { } } - inline void sqlsrv_php_stream_from_zval_no_verify( sqlsrv_context& ctx, php_stream*& stream, zval* stream_z TSRMLS_DC ) + inline void sqlsrv_php_stream_from_zval_no_verify( _Inout_ sqlsrv_context& ctx, _Outref_result_maybenull_ php_stream*& stream, _In_opt_ zval* stream_z TSRMLS_DC ) { // this duplicates the macro php_stream_from_zval_no_verify, which we can't use because it has an assignment php_stream_from_zval_no_verify( stream, stream_z ); @@ -2251,7 +2255,7 @@ namespace core { } } - inline void sqlsrv_zend_hash_get_current_data(sqlsrv_context& ctx, HashTable* ht, _Out_ zval*& output_data TSRMLS_DC) + inline void sqlsrv_zend_hash_get_current_data( _In_ sqlsrv_context& ctx, _In_ HashTable* ht, _Outref_result_maybenull_ zval*& output_data TSRMLS_DC) { int zr = (output_data = ::zend_hash_get_current_data(ht)) != NULL ? SUCCESS : FAILURE; CHECK_ZEND_ERROR( zr, ctx, SQLSRV_ERROR_ZEND_HASH ) { @@ -2259,7 +2263,7 @@ namespace core { } } - inline void sqlsrv_zend_hash_get_current_data_ptr(sqlsrv_context& ctx, HashTable* ht, _Out_ void*& output_data TSRMLS_DC) + inline void sqlsrv_zend_hash_get_current_data_ptr( _Inout_ sqlsrv_context& ctx, _In_ HashTable* ht, _Outref_result_maybenull_ void*& output_data TSRMLS_DC) { int zr = (output_data = ::zend_hash_get_current_data_ptr(ht)) != NULL ? SUCCESS : FAILURE; CHECK_ZEND_ERROR(zr, ctx, SQLSRV_ERROR_ZEND_HASH) { @@ -2267,7 +2271,7 @@ namespace core { } } - inline void sqlsrv_zend_hash_index_del( sqlsrv_context& ctx, HashTable* ht, zend_ulong index TSRMLS_DC ) + inline void sqlsrv_zend_hash_index_del( _Inout_ sqlsrv_context& ctx, _Inout_ HashTable* ht, _In_ zend_ulong index TSRMLS_DC ) { int zr = ::zend_hash_index_del( ht, index ); CHECK_ZEND_ERROR( zr, ctx, SQLSRV_ERROR_ZEND_HASH ) { @@ -2275,7 +2279,7 @@ namespace core { } } - inline void sqlsrv_zend_hash_index_update( sqlsrv_context& ctx, HashTable* ht, zend_ulong index, zval* data_z TSRMLS_DC ) + inline void sqlsrv_zend_hash_index_update( _Inout_ sqlsrv_context& ctx, _Inout_ HashTable* ht, _In_ zend_ulong index, _In_ zval* data_z TSRMLS_DC ) { int zr = (data_z = ::zend_hash_index_update(ht, index, data_z)) != NULL ? SUCCESS : FAILURE; CHECK_ZEND_ERROR( zr, ctx, SQLSRV_ERROR_ZEND_HASH ) { @@ -2283,7 +2287,7 @@ namespace core { } } - inline void sqlsrv_zend_hash_index_update_ptr(sqlsrv_context& ctx, HashTable* ht, zend_ulong index, void* pData TSRMLS_DC) + inline void sqlsrv_zend_hash_index_update_ptr( _Inout_ sqlsrv_context& ctx, _Inout_ HashTable* ht, _In_ zend_ulong index, _In_ void* pData TSRMLS_DC) { int zr = (pData = ::zend_hash_index_update_ptr(ht, index, pData)) != NULL ? SUCCESS : FAILURE; CHECK_ZEND_ERROR(zr, ctx, SQLSRV_ERROR_ZEND_HASH) { @@ -2292,7 +2296,7 @@ namespace core { } - inline void sqlsrv_zend_hash_index_update_mem(sqlsrv_context& ctx, HashTable* ht, zend_ulong index, void* pData, std::size_t size TSRMLS_DC) + inline void sqlsrv_zend_hash_index_update_mem( _Inout_ sqlsrv_context& ctx, _Inout_ HashTable* ht, _In_ zend_ulong index, _In_reads_bytes_(size) void* pData, _In_ std::size_t size TSRMLS_DC) { int zr = (pData = ::zend_hash_index_update_mem(ht, index, pData, size)) != NULL ? SUCCESS : FAILURE; CHECK_ZEND_ERROR(zr, ctx, SQLSRV_ERROR_ZEND_HASH) { @@ -2300,7 +2304,7 @@ namespace core { } } - inline void sqlsrv_zend_hash_next_index_insert( sqlsrv_context& ctx, HashTable* ht, zval* data TSRMLS_DC ) + inline void sqlsrv_zend_hash_next_index_insert( _Inout_ sqlsrv_context& ctx, _Inout_ HashTable* ht, _In_ zval* data TSRMLS_DC ) { int zr = (data = ::zend_hash_next_index_insert(ht, data)) != NULL ? SUCCESS : FAILURE; CHECK_ZEND_ERROR( zr, ctx, SQLSRV_ERROR_ZEND_HASH ) { @@ -2308,7 +2312,7 @@ namespace core { } } - inline void sqlsrv_zend_hash_next_index_insert_mem(sqlsrv_context& ctx, HashTable* ht, void* data, uint data_size TSRMLS_DC) + inline void sqlsrv_zend_hash_next_index_insert_mem( _Inout_ sqlsrv_context& ctx, _In_ HashTable* ht, _In_reads_bytes_(data_size) void* data, _In_ uint data_size TSRMLS_DC) { int zr = (data = ::zend_hash_next_index_insert_mem(ht, data, data_size)) != NULL ? SUCCESS : FAILURE; CHECK_ZEND_ERROR(zr, ctx, SQLSRV_ERROR_ZEND_HASH) { @@ -2316,7 +2320,7 @@ namespace core { } } - inline void sqlsrv_zend_hash_next_index_insert_ptr(sqlsrv_context& ctx, HashTable* ht, void* data TSRMLS_DC) + inline void sqlsrv_zend_hash_next_index_insert_ptr( _Inout_ sqlsrv_context& ctx, _Inout_ HashTable* ht, _In_ void* data TSRMLS_DC) { int zr = (data = ::zend_hash_next_index_insert_ptr(ht, data)) != NULL ? SUCCESS : FAILURE; CHECK_ZEND_ERROR(zr, ctx, SQLSRV_ERROR_ZEND_HASH) { @@ -2324,20 +2328,20 @@ namespace core { } } - inline void sqlsrv_zend_hash_init(sqlsrv_context& ctx, HashTable* ht, uint32_t initial_size, - dtor_func_t dtor_fn, zend_bool persistent TSRMLS_DC ) + inline void sqlsrv_zend_hash_init(sqlsrv_context& ctx, _Inout_ HashTable* ht, _Inout_ uint32_t initial_size, + _In_ dtor_func_t dtor_fn, _In_ zend_bool persistent TSRMLS_DC ) { ::zend_hash_init(ht, initial_size, NULL, dtor_fn, persistent); } template -sqlsrv_stmt* allocate_stmt( sqlsrv_conn* conn, SQLHANDLE h, error_callback e, void* driver TSRMLS_DC ) +sqlsrv_stmt* allocate_stmt( _In_ sqlsrv_conn* conn, _In_ SQLHANDLE h, _In_ error_callback e, _In_ void* driver TSRMLS_DC ) { return new ( sqlsrv_malloc( sizeof( Statement ))) Statement( conn, h, e, driver TSRMLS_CC ); } template -sqlsrv_conn* allocate_conn( SQLHANDLE h, error_callback e, void* driver TSRMLS_DC ) +sqlsrv_conn* allocate_conn( _In_ SQLHANDLE h, _In_ error_callback e, _In_ void* driver TSRMLS_DC ) { return new ( sqlsrv_malloc( sizeof( Connection ))) Connection( h, e, driver TSRMLS_CC ); } @@ -2348,7 +2352,7 @@ sqlsrv_conn* allocate_conn( SQLHANDLE h, error_callback e, void* driver TSRMLS_D template struct str_conn_attr_func { - static void func( connection_option const* /*option*/, zval* value, sqlsrv_conn* conn, std::string& /*conn_str*/ TSRMLS_DC ) + static void func( connection_option const* /*option*/, zval* value, _Inout_ sqlsrv_conn* conn, std::string& /*conn_str*/ TSRMLS_DC ) { try { core::SQLSetConnectAttr( conn, Attr, reinterpret_cast( Z_STRVAL_P( value )), diff --git a/source/shared/core_stmt.cpp b/source/shared/core_stmt.cpp index 1ef36ac4..54c44fe5 100644 --- a/source/shared/core_stmt.cpp +++ b/source/shared/core_stmt.cpp @@ -3,7 +3,7 @@ // // Contents: Core routines that use statement handles shared between sqlsrv and pdo_sqlsrv // -// Microsoft Drivers 4.1 for PHP for SQL Server +// Microsoft Drivers 4.3 for PHP for SQL Server // Copyright(c) Microsoft Corporation // All rights reserved. // MIT License @@ -29,7 +29,7 @@ struct field_cache { SQLLEN len; sqlsrv_phptype type; - field_cache( void* field_value, SQLLEN field_len, sqlsrv_phptype t ) + field_cache( _In_reads_bytes_opt_(field_len) void* field_value, _In_ SQLLEN field_len, _In_ sqlsrv_phptype t ) : type( t ) { // if the value is NULL, then just record a NULL pointer @@ -53,7 +53,7 @@ struct col_cache { SQLLEN sql_type; SQLLEN display_size; - col_cache( SQLLEN col_sql_type, SQLLEN col_display_size ) + col_cache( _In_ SQLLEN col_sql_type, _In_ SQLLEN col_display_size ) { sql_type = col_sql_type; display_size = col_display_size; @@ -88,43 +88,43 @@ const size_t DATE_FORMAT_LEN = sizeof( DATE_FORMAT ); // *** internal functions *** // Only declarations are put here. Functions contain the documentation they need at their definition sites. -void calc_string_size( sqlsrv_stmt* stmt, SQLUSMALLINT field_index, SQLLEN sql_type, _Out_ SQLLEN& size TSRMLS_DC ); -size_t calc_utf8_missing( sqlsrv_stmt* stmt, const char* buffer, size_t buffer_end TSRMLS_DC ); -bool check_for_next_stream_parameter( sqlsrv_stmt* stmt TSRMLS_DC ); -bool convert_input_param_to_utf16( zval* input_param_z, zval* convert_param_z ); -void core_get_field_common(_Inout_ sqlsrv_stmt* stmt, SQLUSMALLINT field_index, sqlsrv_phptype - sqlsrv_php_type, _Out_ void*& field_value, _Out_ SQLLEN* field_len TSRMLS_DC); +void calc_string_size( _Inout_ sqlsrv_stmt* stmt, _In_ SQLUSMALLINT field_index, _In_ SQLLEN sql_type, _Inout_ SQLLEN& size TSRMLS_DC ); +size_t calc_utf8_missing( _Inout_ sqlsrv_stmt* stmt, _In_reads_(buffer_end) const char* buffer, _In_ size_t buffer_end TSRMLS_DC ); +bool check_for_next_stream_parameter( _Inout_ sqlsrv_stmt* stmt TSRMLS_DC ); +bool convert_input_param_to_utf16( _In_ zval* input_param_z, _Inout_ zval* convert_param_z ); +void core_get_field_common(_Inout_ sqlsrv_stmt* stmt, _In_ SQLUSMALLINT field_index, _Inout_ sqlsrv_phptype + sqlsrv_php_type, _Inout_updates_bytes_(*field_len) void*& field_value, _Inout_ SQLLEN* field_len TSRMLS_DC); // returns the ODBC C type constant that matches the PHP type and encoding given -SQLSMALLINT default_c_type( sqlsrv_stmt* stmt, SQLULEN paramno, zval const* param_z, SQLSRV_ENCODING encoding TSRMLS_DC ); -void default_sql_size_and_scale( sqlsrv_stmt* stmt, unsigned int paramno, zval* param_z, SQLSRV_ENCODING encoding, +SQLSMALLINT default_c_type( _Inout_ sqlsrv_stmt* stmt, _In_opt_ SQLULEN paramno, _In_ zval const* param_z, _In_ SQLSRV_ENCODING encoding TSRMLS_DC ); +void default_sql_size_and_scale( _Inout_ sqlsrv_stmt* stmt, _In_opt_ unsigned int paramno, _In_ zval* param_z, _In_ SQLSRV_ENCODING encoding, _Out_ SQLULEN& column_size, _Out_ SQLSMALLINT& decimal_digits TSRMLS_DC ); // given a zval and encoding, determine the appropriate sql type, column size, and decimal scale (if appropriate) -void default_sql_type( sqlsrv_stmt* stmt, SQLULEN paramno, zval* param_z, SQLSRV_ENCODING encoding, +void default_sql_type( _Inout_ sqlsrv_stmt* stmt, _In_opt_ SQLULEN paramno, _In_ zval* param_z, _In_ SQLSRV_ENCODING encoding, _Out_ SQLSMALLINT& sql_type TSRMLS_DC ); -void col_cache_dtor( zval* data_z ); -void field_cache_dtor( zval* data_z ); -void finalize_output_parameters( sqlsrv_stmt* stmt TSRMLS_DC ); -void get_field_as_string( sqlsrv_stmt* stmt, SQLUSMALLINT field_index, sqlsrv_phptype sqlsrv_php_type, - _Out_ void*& field_value, _Out_ SQLLEN* field_len TSRMLS_DC ); -stmt_option const* get_stmt_option( sqlsrv_conn const* conn, zend_ulong key, const stmt_option stmt_opts[] TSRMLS_DC ); -bool is_valid_sqlsrv_phptype( sqlsrv_phptype type ); +void col_cache_dtor( _Inout_ zval* data_z ); +void field_cache_dtor( _Inout_ zval* data_z ); +void finalize_output_parameters( _Inout_ sqlsrv_stmt* stmt TSRMLS_DC ); +void get_field_as_string( _Inout_ sqlsrv_stmt* stmt, _In_ SQLUSMALLINT field_index, _Inout_ sqlsrv_phptype sqlsrv_php_type, + _Inout_updates_bytes_(*field_len) void*& field_value, _Inout_ SQLLEN* field_len TSRMLS_DC ); +stmt_option const* get_stmt_option( sqlsrv_conn const* conn, _In_ zend_ulong key, _In_ const stmt_option stmt_opts[] TSRMLS_DC ); +bool is_valid_sqlsrv_phptype( _In_ sqlsrv_phptype type ); // assure there is enough space for the output parameter string -void resize_output_buffer_if_necessary( sqlsrv_stmt* stmt, zval* param_z, SQLULEN paramno, SQLSRV_ENCODING encoding, - SQLSMALLINT c_type, SQLSMALLINT sql_type, SQLULEN column_size, SQLPOINTER& buffer, - SQLLEN& buffer_len TSRMLS_DC ); -void save_output_param_for_later( sqlsrv_stmt* stmt, sqlsrv_output_param& param TSRMLS_DC ); +void resize_output_buffer_if_necessary( _Inout_ sqlsrv_stmt* stmt, _Inout_ zval* param_z, _In_ SQLULEN paramno, SQLSRV_ENCODING encoding, + _In_ SQLSMALLINT c_type, _In_ SQLSMALLINT sql_type, _In_ SQLULEN column_size, _Out_writes_(buffer_len) SQLPOINTER& buffer, + _Out_ SQLLEN& buffer_len TSRMLS_DC ); +void save_output_param_for_later( _Inout_ sqlsrv_stmt* stmt, _Inout_ sqlsrv_output_param& param TSRMLS_DC ); // send all the stream data -void send_param_streams( sqlsrv_stmt* stmt TSRMLS_DC ); +void send_param_streams( _Inout_ sqlsrv_stmt* stmt TSRMLS_DC ); // called when a bound output string parameter is to be destroyed -void sqlsrv_output_param_dtor( zval* data ); +void sqlsrv_output_param_dtor( _Inout_ zval* data ); // called when a bound stream parameter is to be destroyed. -void sqlsrv_stream_dtor( zval* data ); -bool is_streamable_type( SQLINTEGER sql_type ); +void sqlsrv_stream_dtor( _Inout_ zval* data ); +bool is_streamable_type( _In_ SQLINTEGER sql_type ); } // constructor for sqlsrv_stmt. Here so that we can use functions declared earlier. -sqlsrv_stmt::sqlsrv_stmt( sqlsrv_conn* c, SQLHANDLE handle, error_callback e, void* drv TSRMLS_DC ) : +sqlsrv_stmt::sqlsrv_stmt( _In_ sqlsrv_conn* c, _In_ SQLHANDLE handle, _In_ error_callback e, _In_opt_ void* drv TSRMLS_DC ) : sqlsrv_context( handle, SQL_HANDLE_STMT, e, drv, SQLSRV_ENCODING_DEFAULT ), conn( c ), executed( false ), @@ -251,8 +251,8 @@ void sqlsrv_stmt::new_result_set( TSRMLS_D ) // Return // Returns the created statement -sqlsrv_stmt* core_sqlsrv_create_stmt( sqlsrv_conn* conn, driver_stmt_factory stmt_factory, HashTable* options_ht, - const stmt_option valid_stmt_opts[], error_callback const err, void* driver TSRMLS_DC ) +sqlsrv_stmt* core_sqlsrv_create_stmt( _Inout_ sqlsrv_conn* conn, _In_ driver_stmt_factory stmt_factory, _In_opt_ HashTable* options_ht, + _In_opt_ const stmt_option valid_stmt_opts[], _In_ error_callback const err, _In_opt_ void* driver TSRMLS_DC ) { sqlsrv_malloc_auto_ptr stmt; SQLHANDLE stmt_h = SQL_NULL_HANDLE; @@ -271,7 +271,7 @@ sqlsrv_stmt* core_sqlsrv_create_stmt( sqlsrv_conn* conn, driver_stmt_factory stm stmt_h = SQL_NULL_HANDLE; // process the options array given to core_sqlsrv_prepare. - if( options_ht && zend_hash_num_elements( options_ht ) > 0 ) { + if( options_ht && zend_hash_num_elements( options_ht ) > 0 && valid_stmt_opts ) { zend_ulong index = -1; zend_string *key = NULL; zval* value_z = NULL; @@ -336,9 +336,9 @@ sqlsrv_stmt* core_sqlsrv_create_stmt( sqlsrv_conn* conn, driver_stmt_factory stm // The php type of the parameter is taken from the zval. // The sql type is given as a hint if the driver provides it. -void core_sqlsrv_bind_param( sqlsrv_stmt* stmt, SQLUSMALLINT param_num, SQLSMALLINT direction, zval* param_z, - SQLSRV_PHPTYPE php_out_type, SQLSRV_ENCODING encoding, SQLSMALLINT sql_type, SQLULEN column_size, - SQLSMALLINT decimal_digits TSRMLS_DC ) +void core_sqlsrv_bind_param( _Inout_ sqlsrv_stmt* stmt, _In_ SQLUSMALLINT param_num, _In_ SQLSMALLINT direction, _Inout_ zval* param_z, + _In_ SQLSRV_PHPTYPE php_out_type, _In_ SQLSRV_ENCODING encoding, _Inout_ SQLSMALLINT sql_type, _Inout_ SQLULEN column_size, + _Inout_ SQLSMALLINT decimal_digits TSRMLS_DC ) { SQLSMALLINT c_type; SQLPOINTER buffer = NULL; @@ -594,7 +594,7 @@ void core_sqlsrv_bind_param( sqlsrv_stmt* stmt, SQLUSMALLINT param_num, SQLSMALL zend_class_entry *class_entry = Z_OBJCE_P( param_z TSRMLS_CC ); while( class_entry != NULL ) { - + SQLSRV_ASSERT( class_entry->name != NULL, "core_sqlsrv_bind_param: class_entry->name is NULL." ); if( class_entry->name->len == DateTime::DATETIME_CLASS_NAME_LEN && class_entry->name != NULL && stricmp( class_entry->name->val, DateTime::DATETIME_CLASS_NAME ) == 0 ) { valid_class_name_found = true; @@ -676,7 +676,7 @@ void core_sqlsrv_bind_param( sqlsrv_stmt* stmt, SQLUSMALLINT param_num, SQLSMALL // Return: // true if there is data, false if there is not -SQLRETURN core_sqlsrv_execute( sqlsrv_stmt* stmt TSRMLS_DC, const char* sql, int sql_len ) +SQLRETURN core_sqlsrv_execute( _Inout_ sqlsrv_stmt* stmt TSRMLS_DC, _In_reads_bytes_(sql_len) const char* sql, _In_ int sql_len ) { SQLRETURN r = SQL_ERROR; @@ -757,7 +757,7 @@ SQLRETURN core_sqlsrv_execute( sqlsrv_stmt* stmt TSRMLS_DC, const char* sql, int // Nothing, exception thrown if an error. stmt->past_fetch_end is set to true if the // user scrolls past a non-scrollable result set -bool core_sqlsrv_fetch( sqlsrv_stmt* stmt, SQLSMALLINT fetch_orientation, SQLULEN fetch_offset TSRMLS_DC ) +bool core_sqlsrv_fetch( _Inout_ sqlsrv_stmt* stmt, _In_ SQLSMALLINT fetch_orientation, _In_ SQLULEN fetch_offset TSRMLS_DC ) { // pre-condition check SQLSRV_ASSERT( fetch_orientation >= SQL_FETCH_NEXT || fetch_orientation <= SQL_FETCH_RELATIVE, @@ -827,7 +827,7 @@ bool core_sqlsrv_fetch( sqlsrv_stmt* stmt, SQLSMALLINT fetch_orientation, SQLULE // Return: // A field_meta_data* consisting of the field metadata. -field_meta_data* core_sqlsrv_field_metadata( sqlsrv_stmt* stmt, SQLSMALLINT colno TSRMLS_DC ) +field_meta_data* core_sqlsrv_field_metadata( _Inout_ sqlsrv_stmt* stmt, _In_ SQLSMALLINT colno TSRMLS_DC ) { // pre-condition check SQLSRV_ASSERT( colno >= 0, "core_sqlsrv_field_metadata: Invalid column number provided." ); @@ -882,7 +882,7 @@ field_meta_data* core_sqlsrv_field_metadata( sqlsrv_stmt* stmt, SQLSMALLINT coln } // Set the field name lenth - meta_data->field_name_len = field_name_len; + meta_data->field_name_len = static_cast( field_name_len ); field_meta_data* result_field_meta_data = meta_data; meta_data.transferred(); @@ -901,8 +901,8 @@ field_meta_data* core_sqlsrv_field_metadata( sqlsrv_stmt* stmt, SQLSMALLINT coln // Returns: // Nothing, excpetion thrown if an error occurs -void core_sqlsrv_get_field( sqlsrv_stmt* stmt, SQLUSMALLINT field_index, sqlsrv_phptype sqlsrv_php_type_in, bool prefer_string, - _Out_ void*& field_value, _Out_ SQLLEN* field_len, bool cache_field, +void core_sqlsrv_get_field( _Inout_ sqlsrv_stmt* stmt, _In_ SQLUSMALLINT field_index, _In_ sqlsrv_phptype sqlsrv_php_type_in, _In_ bool prefer_string, + _Outref_result_bytebuffer_maybenull_(*field_len) void*& field_value, _Inout_ SQLLEN* field_len, _In_ bool cache_field, _Out_ SQLSRV_PHPTYPE *sqlsrv_php_type_out TSRMLS_DC) { try { @@ -1004,7 +1004,7 @@ void core_sqlsrv_get_field( sqlsrv_stmt* stmt, SQLUSMALLINT field_index, sqlsrv_ // Return: // true if any results are present, false otherwise. -bool core_sqlsrv_has_any_result( sqlsrv_stmt* stmt TSRMLS_DC ) +bool core_sqlsrv_has_any_result( _Inout_ sqlsrv_stmt* stmt TSRMLS_DC ) { // Use SQLNumResultCols to determine if we have rows or not. SQLSMALLINT num_cols = core::SQLNumResultCols( stmt TSRMLS_CC ); @@ -1020,7 +1020,7 @@ bool core_sqlsrv_has_any_result( sqlsrv_stmt* stmt TSRMLS_DC ) // Returns // Nothing, exception thrown if problem occurs -void core_sqlsrv_next_result( sqlsrv_stmt* stmt TSRMLS_DC, bool finalize_output_params, bool throw_on_errors ) +void core_sqlsrv_next_result( _Inout_ sqlsrv_stmt* stmt TSRMLS_DC, _In_ bool finalize_output_params, _In_ bool throw_on_errors ) { try { @@ -1077,7 +1077,7 @@ void core_sqlsrv_next_result( sqlsrv_stmt* stmt TSRMLS_DC, bool finalize_output_ // Returns: // Nothing, exception thrown if problem occurs -void core_sqlsrv_post_param( sqlsrv_stmt* stmt, zend_ulong param_num, zval* param_z TSRMLS_DC ) +void core_sqlsrv_post_param( _Inout_ sqlsrv_stmt* stmt, _In_ zend_ulong param_num, zval* param_z TSRMLS_DC ) { SQLSRV_ASSERT( Z_TYPE( stmt->param_input_strings ) == IS_ARRAY, "Statement input parameter UTF-16 buffers array invalid." ); SQLSRV_ASSERT( Z_TYPE( stmt->param_streams ) == IS_ARRAY, "Statement input parameter streams array invalid." ); @@ -1096,7 +1096,7 @@ void core_sqlsrv_post_param( sqlsrv_stmt* stmt, zend_ulong param_num, zval* para } //Calls SQLSetStmtAttr to set a cursor. -void core_sqlsrv_set_scrollable( sqlsrv_stmt* stmt, unsigned long cursor_type TSRMLS_DC ) +void core_sqlsrv_set_scrollable( _Inout_ sqlsrv_stmt* stmt, _In_ unsigned long cursor_type TSRMLS_DC ) { try { @@ -1140,7 +1140,7 @@ void core_sqlsrv_set_scrollable( sqlsrv_stmt* stmt, unsigned long cursor_type TS } } -void core_sqlsrv_set_buffered_query_limit( sqlsrv_stmt* stmt, zval* value_z TSRMLS_DC ) +void core_sqlsrv_set_buffered_query_limit( _Inout_ sqlsrv_stmt* stmt, _In_ zval* value_z TSRMLS_DC ) { if( Z_TYPE_P( value_z ) != IS_LONG ) { @@ -1150,7 +1150,7 @@ void core_sqlsrv_set_buffered_query_limit( sqlsrv_stmt* stmt, zval* value_z TSRM core_sqlsrv_set_buffered_query_limit( stmt, Z_LVAL_P( value_z ) TSRMLS_CC ); } -void core_sqlsrv_set_buffered_query_limit( sqlsrv_stmt* stmt, SQLLEN limit TSRMLS_DC ) +void core_sqlsrv_set_buffered_query_limit( _Inout_ sqlsrv_stmt* stmt, _In_ SQLLEN limit TSRMLS_DC ) { if( limit <= 0 ) { @@ -1164,7 +1164,7 @@ void core_sqlsrv_set_buffered_query_limit( sqlsrv_stmt* stmt, SQLLEN limit TSRML // Overloaded. Extracts the long value and calls the core_sqlsrv_set_query_timeout // which accepts timeout parameter as a long. If the zval is not of type long // than throws error. -void core_sqlsrv_set_query_timeout( sqlsrv_stmt* stmt, zval* value_z TSRMLS_DC ) +void core_sqlsrv_set_query_timeout( _Inout_ sqlsrv_stmt* stmt, _Inout_ zval* value_z TSRMLS_DC ) { try { @@ -1183,7 +1183,7 @@ void core_sqlsrv_set_query_timeout( sqlsrv_stmt* stmt, zval* value_z TSRMLS_DC ) } // Overloaded. Accepts the timeout as a long. -void core_sqlsrv_set_query_timeout( sqlsrv_stmt* stmt, long timeout TSRMLS_DC ) +void core_sqlsrv_set_query_timeout( _Inout_ sqlsrv_stmt* stmt, _In_ long timeout TSRMLS_DC ) { try { @@ -1212,7 +1212,7 @@ void core_sqlsrv_set_query_timeout( sqlsrv_stmt* stmt, long timeout TSRMLS_DC ) } } -void core_sqlsrv_set_send_at_exec( sqlsrv_stmt* stmt, zval* value_z TSRMLS_DC ) +void core_sqlsrv_set_send_at_exec( _Inout_ sqlsrv_stmt* stmt, _In_ zval* value_z TSRMLS_DC ) { TSRMLS_C; @@ -1232,7 +1232,7 @@ void core_sqlsrv_set_send_at_exec( sqlsrv_stmt* stmt, zval* value_z TSRMLS_DC ) // Returns: // true if more data remains to be sent, false if all data processed -bool core_sqlsrv_send_stream_packet( sqlsrv_stmt* stmt TSRMLS_DC ) +bool core_sqlsrv_send_stream_packet( _Inout_ sqlsrv_stmt* stmt TSRMLS_DC ) { // if there no current parameter to process, get the next one // (probably because this is the first call to sqlsrv_send_stream_data) @@ -1341,7 +1341,7 @@ bool core_sqlsrv_send_stream_packet( sqlsrv_stmt* stmt TSRMLS_DC ) return true; } -void stmt_option_functor::operator()( sqlsrv_stmt* /*stmt*/, stmt_option const* /*opt*/, zval* /*value_z*/ TSRMLS_DC ) +void stmt_option_functor::operator()( _Inout_ sqlsrv_stmt* /*stmt*/, stmt_option const* /*opt*/, _In_ zval* /*value_z*/ TSRMLS_DC ) { TSRMLS_C; @@ -1349,17 +1349,17 @@ void stmt_option_functor::operator()( sqlsrv_stmt* /*stmt*/, stmt_option const* DIE( "Not implemented." ); } -void stmt_option_query_timeout:: operator()( sqlsrv_stmt* stmt, stmt_option const* /**/, zval* value_z TSRMLS_DC ) +void stmt_option_query_timeout:: operator()( _Inout_ sqlsrv_stmt* stmt, stmt_option const* /**/, _In_ zval* value_z TSRMLS_DC ) { core_sqlsrv_set_query_timeout( stmt, value_z TSRMLS_CC ); } -void stmt_option_send_at_exec:: operator()( sqlsrv_stmt* stmt, stmt_option const* /*opt*/, zval* value_z TSRMLS_DC ) +void stmt_option_send_at_exec:: operator()( _Inout_ sqlsrv_stmt* stmt, stmt_option const* /*opt*/, _In_ zval* value_z TSRMLS_DC ) { core_sqlsrv_set_send_at_exec( stmt, value_z TSRMLS_CC ); } -void stmt_option_buffered_query_limit:: operator()( sqlsrv_stmt* stmt, stmt_option const* /*opt*/, zval* value_z TSRMLS_DC ) +void stmt_option_buffered_query_limit:: operator()( _Inout_ sqlsrv_stmt* stmt, stmt_option const* /*opt*/, _In_ zval* value_z TSRMLS_DC ) { core_sqlsrv_set_buffered_query_limit( stmt, value_z TSRMLS_CC ); } @@ -1391,7 +1391,7 @@ void close_active_stream( _Inout_ sqlsrv_stmt* stmt TSRMLS_DC ) namespace { -bool is_streamable_type( SQLLEN sql_type ) +bool is_streamable_type( _In_ SQLLEN sql_type ) { switch( sql_type ) { case SQL_CHAR: @@ -1410,7 +1410,7 @@ bool is_streamable_type( SQLLEN sql_type ) return false; } -void calc_string_size( sqlsrv_stmt* stmt, SQLUSMALLINT field_index, SQLLEN sql_type, _Out_ SQLLEN& size TSRMLS_DC ) +void calc_string_size( _Inout_ sqlsrv_stmt* stmt, _In_ SQLUSMALLINT field_index, _In_ SQLLEN sql_type, _Inout_ SQLLEN& size TSRMLS_DC ) { try { @@ -1471,7 +1471,7 @@ void calc_string_size( sqlsrv_stmt* stmt, SQLUSMALLINT field_index, SQLLEN sql_t // calculates how many characters were cut off from the end of a buffer when reading // in UTF-8 encoded text -size_t calc_utf8_missing( sqlsrv_stmt* stmt, const char* buffer, size_t buffer_end TSRMLS_DC ) +size_t calc_utf8_missing( _Inout_ sqlsrv_stmt* stmt, _In_reads_(buffer_end) const char* buffer, _In_ size_t buffer_end TSRMLS_DC ) { const char* last_char = buffer + buffer_end - 1; size_t need_to_read = 0; @@ -1509,8 +1509,8 @@ size_t calc_utf8_missing( sqlsrv_stmt* stmt, const char* buffer, size_t buffer_e // The memory allocation has to happen in the core layer because otherwise // the driver layer would have to calculate size of the field_value // to decide the amount of memory allocation. -void core_get_field_common( _Inout_ sqlsrv_stmt* stmt, SQLUSMALLINT field_index, sqlsrv_phptype - sqlsrv_php_type, _Out_ void*& field_value, _Out_ SQLLEN* field_len TSRMLS_DC ) +void core_get_field_common( _Inout_ sqlsrv_stmt* stmt, _In_ SQLUSMALLINT field_index, _Inout_ sqlsrv_phptype + sqlsrv_php_type, _Inout_updates_bytes_(*field_len) void*& field_value, _Inout_ SQLLEN* field_len TSRMLS_DC ) { try { @@ -1738,7 +1738,7 @@ bool check_for_next_stream_parameter( _Inout_ sqlsrv_stmt* stmt TSRMLS_DC ) // utility routine to convert an input parameter from UTF-8 to UTF-16 -bool convert_input_param_to_utf16( zval* input_param_z, zval* converted_param_z ) +bool convert_input_param_to_utf16( _In_ zval* input_param_z, _Inout_ zval* converted_param_z ) { SQLSRV_ASSERT( input_param_z == converted_param_z || Z_TYPE_P( converted_param_z ) == IS_NULL, "convert_input_param_z called with invalid parameter states" ); @@ -1795,7 +1795,7 @@ bool convert_input_param_to_utf16( zval* input_param_z, zval* converted_param_z // returns the ODBC C type constant that matches the PHP type and encoding given -SQLSMALLINT default_c_type( sqlsrv_stmt* stmt, SQLULEN paramno, zval const* param_z, SQLSRV_ENCODING encoding TSRMLS_DC ) +SQLSMALLINT default_c_type( _Inout_ sqlsrv_stmt* stmt, _In_opt_ SQLULEN paramno, _In_ zval const* param_z, _In_ SQLSRV_ENCODING encoding TSRMLS_DC ) { SQLSMALLINT sql_c_type = SQL_UNKNOWN_TYPE; int php_type = Z_TYPE_P( param_z ); @@ -1865,7 +1865,7 @@ SQLSMALLINT default_c_type( sqlsrv_stmt* stmt, SQLULEN paramno, zval const* para // given a zval and encoding, determine the appropriate sql type -void default_sql_type( sqlsrv_stmt* stmt, SQLULEN paramno, zval* param_z, SQLSRV_ENCODING encoding, +void default_sql_type( _Inout_ sqlsrv_stmt* stmt, _In_opt_ SQLULEN paramno, _In_ zval* param_z, _In_ SQLSRV_ENCODING encoding, _Out_ SQLSMALLINT& sql_type TSRMLS_DC ) { sql_type = SQL_UNKNOWN_TYPE; @@ -1943,7 +1943,7 @@ void default_sql_type( sqlsrv_stmt* stmt, SQLULEN paramno, zval* param_z, SQLSRV // given a zval and encoding, determine the appropriate column size, and decimal scale (if appropriate) -void default_sql_size_and_scale( sqlsrv_stmt* stmt, unsigned int paramno, zval* param_z, SQLSRV_ENCODING encoding, +void default_sql_size_and_scale( _Inout_ sqlsrv_stmt* stmt, _In_opt_ unsigned int paramno, _In_ zval* param_z, _In_ SQLSRV_ENCODING encoding, _Out_ SQLULEN& column_size, _Out_ SQLSMALLINT& decimal_digits TSRMLS_DC ) { int php_type = Z_TYPE_P( param_z ); @@ -1996,13 +1996,13 @@ void default_sql_size_and_scale( sqlsrv_stmt* stmt, unsigned int paramno, zval* } } -void col_cache_dtor( zval* data_z ) +void col_cache_dtor( _Inout_ zval* data_z ) { col_cache* cache = static_cast( Z_PTR_P( data_z )); sqlsrv_free( cache ); } -void field_cache_dtor( zval* data_z ) +void field_cache_dtor( _Inout_ zval* data_z ) { field_cache* cache = static_cast( Z_PTR_P( data_z )); if( cache->value ) @@ -2019,7 +2019,7 @@ void field_cache_dtor( zval* data_z ) // parameters passed to SQLBindParameter. It also converts output strings from UTF-16 to UTF-8 if necessary. // For integer or float parameters, it sets those to NULL if a NULL was returned by SQL Server -void finalize_output_parameters( sqlsrv_stmt* stmt TSRMLS_DC ) +void finalize_output_parameters( _Inout_ sqlsrv_stmt* stmt TSRMLS_DC ) { if( Z_ISUNDEF(stmt->output_params) ) return; @@ -2127,14 +2127,14 @@ void finalize_output_parameters( sqlsrv_stmt* stmt TSRMLS_DC ) return; } -void get_field_as_string( sqlsrv_stmt* stmt, SQLUSMALLINT field_index, sqlsrv_phptype sqlsrv_php_type, - _Out_ void*& field_value, _Out_ SQLLEN* field_len TSRMLS_DC ) +void get_field_as_string( _Inout_ sqlsrv_stmt* stmt, _In_ SQLUSMALLINT field_index, _Inout_ sqlsrv_phptype sqlsrv_php_type, + _Inout_updates_bytes_(*field_len) void*& field_value, _Inout_ SQLLEN* field_len TSRMLS_DC ) { SQLRETURN r; SQLSMALLINT c_type; SQLLEN sql_field_type = 0; SQLSMALLINT extra = 0; - SQLLEN field_len_temp; + SQLLEN field_len_temp = 0; SQLLEN sql_display_size = 0; char* field_value_temp = NULL; @@ -2205,8 +2205,8 @@ void get_field_as_string( sqlsrv_stmt* stmt, SQLUSMALLINT field_index, sqlsrv_ph if( r == SQL_SUCCESS_WITH_INFO ) { - SQLCHAR state[ SQL_SQLSTATE_BUFSIZE ]; - SQLSMALLINT len; + SQLCHAR state[SQL_SQLSTATE_BUFSIZE] = { 0 }; + SQLSMALLINT len = 0; stmt->current_results->get_diag_field( 1, SQL_DIAG_SQLSTATE, state, SQL_SQLSTATE_BUFSIZE, &len TSRMLS_CC ); @@ -2218,7 +2218,7 @@ void get_field_as_string( sqlsrv_stmt* stmt, SQLUSMALLINT field_index, sqlsrv_ph if( is_truncated_warning( state ) ) { #endif // !_WIN32 - SQLLEN dummy_field_len; + SQLLEN dummy_field_len = 0; // for XML (and possibly other conditions) the field length returned is not the real field length, so // in every pass, we double the allocation size to retrieve all the contents. @@ -2391,7 +2391,7 @@ void get_field_as_string( sqlsrv_stmt* stmt, SQLUSMALLINT field_index, sqlsrv_ph // return the option from the stmt_opts array that matches the key. If no option found, // NULL is returned. -stmt_option const* get_stmt_option( sqlsrv_conn const* conn, zend_ulong key, const stmt_option stmt_opts[] TSRMLS_DC ) +stmt_option const* get_stmt_option( sqlsrv_conn const* conn, _In_ zend_ulong key, _In_ const stmt_option stmt_opts[] TSRMLS_DC ) { for( int i = 0; stmt_opts[ i ].key != SQLSRV_STMT_OPTION_INVALID; ++i ) { @@ -2407,7 +2407,7 @@ stmt_option const* get_stmt_option( sqlsrv_conn const* conn, zend_ulong key, con // is_fixed_size_type // returns true if the SQL data type is a fixed length, as opposed to a variable length data type such as varchar or varbinary -bool is_fixed_size_type( SQLINTEGER sql_type ) +bool is_fixed_size_type( _In_ SQLINTEGER sql_type ) { switch( sql_type ) { @@ -2428,7 +2428,7 @@ bool is_fixed_size_type( SQLINTEGER sql_type ) return true; } -bool is_valid_sqlsrv_phptype( sqlsrv_phptype type ) +bool is_valid_sqlsrv_phptype( _In_ sqlsrv_phptype type ) { switch( type.typeinfo.type ) { @@ -2457,9 +2457,9 @@ bool is_valid_sqlsrv_phptype( sqlsrv_phptype type ) // string is place in the stmt->output_params. param_z is modified to hold the new buffer, and buffer, buffer_len and // stmt->param_ind_ptrs are modified to hold the correct values for SQLBindParameter -void resize_output_buffer_if_necessary( sqlsrv_stmt* stmt, zval* param_z, SQLULEN paramno, SQLSRV_ENCODING encoding, - SQLSMALLINT c_type, SQLSMALLINT sql_type, SQLULEN column_size, SQLPOINTER& buffer, - SQLLEN& buffer_len TSRMLS_DC ) +void resize_output_buffer_if_necessary( _Inout_ sqlsrv_stmt* stmt, _Inout_ zval* param_z, _In_ SQLULEN paramno, SQLSRV_ENCODING encoding, + _In_ SQLSMALLINT c_type, _In_ SQLSMALLINT sql_type, _In_ SQLULEN column_size, _Out_writes_(buffer_len) SQLPOINTER& buffer, + _Out_ SQLLEN& buffer_len TSRMLS_DC ) { SQLSRV_ASSERT( column_size != SQLSRV_UNKNOWN_SIZE, "column size should be set to a known value." ); buffer_len = Z_STRLEN_P( param_z ); @@ -2528,7 +2528,7 @@ void resize_output_buffer_if_necessary( sqlsrv_stmt* stmt, zval* param_z, SQLULE // while the query is executed and processed. They are saved in the statement so that // their reference count may be decremented later (after results are processed) -void save_output_param_for_later( sqlsrv_stmt* stmt, sqlsrv_output_param& param TSRMLS_DC ) +void save_output_param_for_later( _Inout_ sqlsrv_stmt* stmt, _Inout_ sqlsrv_output_param& param TSRMLS_DC ) { HashTable* param_ht = Z_ARRVAL( stmt->output_params ); zend_ulong paramno = static_cast( param.param_num ); @@ -2539,14 +2539,14 @@ void save_output_param_for_later( sqlsrv_stmt* stmt, sqlsrv_output_param& param // send all the stream data -void send_param_streams( sqlsrv_stmt* stmt TSRMLS_DC ) +void send_param_streams( _Inout_ sqlsrv_stmt* stmt TSRMLS_DC ) { while( core_sqlsrv_send_stream_packet( stmt TSRMLS_CC )) { } } // called by Zend for each parameter in the sqlsrv_stmt::output_params hash table when it is cleaned/destroyed -void sqlsrv_output_param_dtor( zval* data ) +void sqlsrv_output_param_dtor( _Inout_ zval* data ) { sqlsrv_output_param *output_param = static_cast( Z_PTR_P( data )); zval_ptr_dtor( output_param->param_z ); // undo the reference to the string we will no longer hold @@ -2554,7 +2554,7 @@ void sqlsrv_output_param_dtor( zval* data ) } // called by Zend for each stream in the sqlsrv_stmt::param_streams hash table when it is cleaned/destroyed -void sqlsrv_stream_dtor( zval* data ) +void sqlsrv_stream_dtor( _Inout_ zval* data ) { sqlsrv_stream* stream_encoding = static_cast( Z_PTR_P( data )); zval_ptr_dtor( stream_encoding->stream_z ); // undo the reference to the stream we will no longer hold diff --git a/source/shared/core_stream.cpp b/source/shared/core_stream.cpp index ad915ad7..b56e58ca 100644 --- a/source/shared/core_stream.cpp +++ b/source/shared/core_stream.cpp @@ -3,7 +3,7 @@ // // Contents: Implementation of PHP streams for reading SQL Server data // -// Microsoft Drivers 4.1 for PHP for SQL Server +// Microsoft Drivers 4.3 for PHP for SQL Server // Copyright(c) Microsoft Corporation // All rights reserved. // MIT License @@ -23,7 +23,7 @@ namespace { // close a stream and free the PHP resources used by it -int sqlsrv_stream_close( php_stream* stream, int /*close_handle*/ TSRMLS_DC ) +int sqlsrv_stream_close( _Inout_ php_stream* stream, int /*close_handle*/ TSRMLS_DC ) { sqlsrv_stream* ss = static_cast( stream->abstract ); SQLSRV_ASSERT( ss != NULL, "sqlsrv_stream_close: sqlsrv_stream* ss was null." ); @@ -44,7 +44,7 @@ int sqlsrv_stream_close( php_stream* stream, int /*close_handle*/ TSRMLS_DC ) // read from a sqlsrv stream into the buffer provided by Zend. The parameters for binary vs. char are // set when sqlsrv_get_field is called by the user specifying which field type they want. -size_t sqlsrv_stream_read( php_stream* stream, _Out_writes_bytes_(count) char* buf, size_t count TSRMLS_DC ) +size_t sqlsrv_stream_read( _Inout_ php_stream* stream, _Out_writes_bytes_(count) char* buf, _Inout_ size_t count TSRMLS_DC ) { SQLLEN read = 0; SQLSMALLINT c_type = SQL_C_CHAR; @@ -106,8 +106,8 @@ size_t sqlsrv_stream_read( php_stream* stream, _Out_writes_bytes_(count) char* b // if it's not a binary encoded field if( r == SQL_SUCCESS_WITH_INFO ) { - SQLCHAR state[ SQL_SQLSTATE_BUFSIZE ]; - SQLSMALLINT len; + SQLCHAR state[SQL_SQLSTATE_BUFSIZE] = { 0 }; + SQLSMALLINT len = 0; ss->stmt->current_results->get_diag_field( 1, SQL_DIAG_SQLSTATE, state, SQL_SQLSTATE_BUFSIZE, &len TSRMLS_CC ); @@ -155,7 +155,7 @@ size_t sqlsrv_stream_read( php_stream* stream, _Out_writes_bytes_(count) char* b // convert to UTF-8 #ifdef _WIN32 DWORD flags = 0; - if( g_osversion.dwMajorVersion >= SQLSRV_OS_VISTA_OR_LATER ) { + if( isVistaOrGreater ) { // Vista (and later) will detect invalid UTF-16 characters and raise an error. flags = WC_ERR_INVALID_CHARS; } @@ -181,7 +181,7 @@ size_t sqlsrv_stream_read( php_stream* stream, _Out_writes_bytes_(count) char* b read = enc_len; } - return read; + return static_cast( read ); } catch( core::CoreException& ) { @@ -211,8 +211,8 @@ php_stream_ops sqlsrv_stream_ops = { // open a stream and return the sqlsrv_stream_ops function table as part of the // return value. There is only one valid way to open a stream, using sqlsrv_get_field on // certain field types. A sqlsrv stream may only be opened in read mode. -static php_stream* sqlsrv_stream_opener( php_stream_wrapper* wrapper, _In_ const char*, _In_ const char* mode, - int options, _In_ zend_string **, php_stream_context* STREAMS_DC TSRMLS_DC ) +static php_stream* sqlsrv_stream_opener( _In_opt_ php_stream_wrapper* wrapper, _In_ const char*, _In_ const char* mode, + _In_opt_ int options, _In_ zend_string **, php_stream_context* STREAMS_DC TSRMLS_DC ) { #if ZEND_DEBUG diff --git a/source/shared/core_util.cpp b/source/shared/core_util.cpp index 4eeeb6d0..61f66bdb 100644 --- a/source/shared/core_util.cpp +++ b/source/shared/core_util.cpp @@ -5,7 +5,7 @@ // // Comments: Mostly error handling and some type handling // -// Microsoft Drivers 4.1 for PHP for SQL Server +// Microsoft Drivers 4.3 for PHP for SQL Server // Copyright(c) Microsoft Corporation // All rights reserved. // MIT License @@ -31,10 +31,10 @@ SQLCHAR INTERNAL_FORMAT_ERROR[] = "An internal error occurred. FormatMessage fa char last_err_msg[ 2048 ]; // 2k to hold the error messages // routine used by utf16_string_from_mbcs_string -unsigned int convert_string_from_default_encoding( unsigned int php_encoding, _In_reads_bytes_(mbcs_len) char const* mbcs_in_string, - unsigned int mbcs_len, +unsigned int convert_string_from_default_encoding( _In_ unsigned int php_encoding, _In_reads_bytes_(mbcs_len) char const* mbcs_in_string, + _In_ unsigned int mbcs_len, _Out_writes_(utf16_len) __transfer( mbcs_in_string ) SQLWCHAR* utf16_out_string, - unsigned int utf16_len ); + _In_ unsigned int utf16_len ); } // SQLSTATE for all internal errors @@ -45,7 +45,7 @@ SQLCHAR SSPWARN[] = "01SSP"; // write to the php log if the severity and subsystem match the filters currently set in the INI or // the script (sqlsrv_configure). -void write_to_log( unsigned int severity TSRMLS_DC, const char* msg, ...) +void write_to_log( _In_ unsigned int severity TSRMLS_DC, _In_ const char* msg, ...) { SQLSRV_ASSERT( !(g_driver_log == NULL), "Must register a driver log function." ); @@ -57,7 +57,7 @@ void write_to_log( unsigned int severity TSRMLS_DC, const char* msg, ...) va_end( args ); } -void core_sqlsrv_register_logger( log_callback driver_logger ) +void core_sqlsrv_register_logger( _In_ log_callback driver_logger ) { g_driver_log = driver_logger; } @@ -68,7 +68,7 @@ void core_sqlsrv_register_logger( log_callback driver_logger ) // utf-16 string is released by this function if no errors occurred. Otherwise the parameters are not changed // and false is returned. -bool convert_string_from_utf16_inplace( SQLSRV_ENCODING encoding, char** string, SQLLEN& len) +bool convert_string_from_utf16_inplace( _In_ SQLSRV_ENCODING encoding, _Inout_updates_z_(len) char** string, _Inout_ SQLLEN& len) { SQLSRV_ASSERT( string != NULL, "String must be specified" ); @@ -91,7 +91,7 @@ bool convert_string_from_utf16_inplace( SQLSRV_ENCODING encoding, char** string, return result; } -bool convert_zval_string_from_utf16(SQLSRV_ENCODING encoding, zval* value_z, SQLLEN& len) +bool convert_zval_string_from_utf16( _In_ SQLSRV_ENCODING encoding, _Inout_ zval* value_z, _Inout_ SQLLEN& len) { char* string = Z_STRVAL_P(value_z); @@ -110,7 +110,7 @@ bool convert_zval_string_from_utf16(SQLSRV_ENCODING encoding, zval* value_z, SQL return result; } -bool validate_string(char* string, SQLLEN& len) +bool validate_string( _In_ char* string, _In_ SQLLEN& len ) { SQLSRV_ASSERT(string != NULL, "String must be specified"); @@ -125,7 +125,7 @@ bool validate_string(char* string, SQLLEN& len) return false; } -bool convert_string_from_utf16( SQLSRV_ENCODING encoding, const SQLWCHAR* inString, SQLINTEGER cchInLen, char** outString, SQLLEN& cchOutLen ) +bool convert_string_from_utf16( _In_ SQLSRV_ENCODING encoding, _In_reads_bytes_(cchInLen) const SQLWCHAR* inString, _In_ SQLINTEGER cchInLen, _Inout_updates_bytes_(cchOutLen) char** outString, _Out_ SQLLEN& cchOutLen ) { SQLSRV_ASSERT( inString != NULL, "Input string must be specified" ); SQLSRV_ASSERT( outString != NULL, "Output buffer pointer must be specified" ); @@ -141,7 +141,7 @@ bool convert_string_from_utf16( SQLSRV_ENCODING encoding, const SQLWCHAR* inStri // flags set to 0 by default, which means that any invalid characters are dropped rather than causing // an error. This happens only on XP. DWORD flags = 0; - if( encoding == CP_UTF8 && g_osversion.dwMajorVersion >= SQLSRV_OS_VISTA_OR_LATER ) { + if( encoding == CP_UTF8 && isVistaOrGreater ) { // Vista (and later) will detect invalid UTF-16 characters and raise an error. flags = WC_ERR_INVALID_CHARS; } @@ -182,8 +182,8 @@ bool convert_string_from_utf16( SQLSRV_ENCODING encoding, const SQLWCHAR* inStri // thin wrapper around convert_string_from_default_encoding that handles // allocation of the destination string. An empty string passed in returns // failure since it's a failure case for convert_string_from_default_encoding. -SQLWCHAR* utf16_string_from_mbcs_string( SQLSRV_ENCODING php_encoding, const char* mbcs_string, unsigned int mbcs_len, - unsigned int* utf16_len ) +SQLWCHAR* utf16_string_from_mbcs_string( _In_ SQLSRV_ENCODING php_encoding, _In_reads_bytes_(mbcs_len) const char* mbcs_string, _In_ unsigned int mbcs_len, + _Out_ unsigned int* utf16_len ) { *utf16_len = (mbcs_len + 1); SQLWCHAR* utf16_string = reinterpret_cast( sqlsrv_malloc( *utf16_len * sizeof( SQLWCHAR ))); @@ -207,7 +207,7 @@ SQLWCHAR* utf16_string_from_mbcs_string( SQLSRV_ENCODING php_encoding, const cha // 3/message) driver specific error message // The fetch type determines if the indices are numeric, associative, or both. -bool core_sqlsrv_get_odbc_error( sqlsrv_context& ctx, int record_number, sqlsrv_error_auto_ptr& error, logging_severity severity +bool core_sqlsrv_get_odbc_error( _Inout_ sqlsrv_context& ctx, _In_ int record_number, _Inout_ sqlsrv_error_auto_ptr& error, _In_ logging_severity severity TSRMLS_DC ) { SQLHANDLE h = ctx.handle(); @@ -284,8 +284,8 @@ bool core_sqlsrv_get_odbc_error( sqlsrv_context& ctx, int record_number, sqlsrv_ } // format and return a driver specfic error -void core_sqlsrv_format_driver_error( sqlsrv_context& ctx, sqlsrv_error_const const* custom_error, - sqlsrv_error_auto_ptr& formatted_error, logging_severity severity TSRMLS_DC, va_list* args ) +void core_sqlsrv_format_driver_error( _In_ sqlsrv_context& ctx, _In_ sqlsrv_error_const const* custom_error, + _Out_ sqlsrv_error_auto_ptr& formatted_error, _In_ logging_severity severity TSRMLS_DC, _In_opt_ va_list* args ) { // allocate space for the formatted message formatted_error = new (sqlsrv_malloc( sizeof( sqlsrv_error ))) sqlsrv_error(); @@ -309,7 +309,7 @@ void core_sqlsrv_format_driver_error( sqlsrv_context& ctx, sqlsrv_error_const co LOG( severity, "%1!s!: message = %2!s!", ctx.func(), formatted_error->native_message ); } -DWORD core_sqlsrv_format_message( char* output_buffer, unsigned output_len, const char* format, ... ) +DWORD core_sqlsrv_format_message( _Out_ char* output_buffer, _In_ unsigned output_len, _In_opt_ const char* format, ... ) { va_list format_args; va_start( format_args, format ); @@ -321,7 +321,7 @@ DWORD core_sqlsrv_format_message( char* output_buffer, unsigned output_len, cons // return an error message for GetLastError using FormatMessage. // this function returns the msg pointer so that it may be used within // another function call such as handle_error -const char* get_last_error_message( DWORD last_error ) +const char* get_last_error_message( _Inout_ DWORD last_error ) { if( last_error == 0 ) { last_error = GetLastError(); @@ -346,7 +346,7 @@ const char* get_last_error_message( DWORD last_error ) // places where we were using the FormatMessage syntax inadvertently with DIE which left messages without // proper information. Rather than convert those messages and try and remember the difference between LOG and // DIE, it is simpler to make the format syntax common between them. -void die( const char* msg, ... ) +void die( _In_opt_ const char* msg, ... ) { va_list format_args; va_start( format_args, msg ); @@ -367,9 +367,9 @@ namespace { // returned in utf16_out_string. An empty string passed in will result as // a failure since MBTWC returns 0 for both an empty string and failure // to convert. -unsigned int convert_string_from_default_encoding( unsigned int php_encoding, _In_reads_bytes_(mbcs_len) char const* mbcs_in_string, - unsigned int mbcs_len, _Out_writes_(utf16_len) __transfer( mbcs_in_string ) SQLWCHAR* utf16_out_string, - unsigned int utf16_len ) +unsigned int convert_string_from_default_encoding( _In_ unsigned int php_encoding, _In_reads_bytes_(mbcs_len) char const* mbcs_in_string, + _In_ unsigned int mbcs_len, _Out_writes_(utf16_len) __transfer( mbcs_in_string ) SQLWCHAR* utf16_out_string, + _In_ unsigned int utf16_len ) { unsigned int win_encoding = CP_ACP; switch( php_encoding ) { diff --git a/source/shared/globalization.h b/source/shared/globalization.h index 60177028..cd8b744f 100644 --- a/source/shared/globalization.h +++ b/source/shared/globalization.h @@ -4,7 +4,7 @@ // Contents: Contains functions for handling Windows format strings // and UTF-16 on non-Windows platforms // -// Microsoft Drivers 4.2 for PHP for SQL Server +// Microsoft Drivers 4.3 for PHP for SQL Server // Copyright(c) Microsoft Corporation // All rights reserved. // MIT License diff --git a/source/shared/interlockedatomic.h b/source/shared/interlockedatomic.h index fdeae014..30941ee0 100644 --- a/source/shared/interlockedatomic.h +++ b/source/shared/interlockedatomic.h @@ -4,7 +4,7 @@ // Contents: Contains a portable abstraction for interlocked, atomic // operations on int32_t and pointer types. // -// Microsoft Drivers 4.2 for PHP for SQL Server +// Microsoft Drivers 4.3 for PHP for SQL Server // Copyright(c) Microsoft Corporation // All rights reserved. // MIT License diff --git a/source/shared/interlockedatomic_gcc.h b/source/shared/interlockedatomic_gcc.h index 99160fb2..e4e4205b 100644 --- a/source/shared/interlockedatomic_gcc.h +++ b/source/shared/interlockedatomic_gcc.h @@ -4,7 +4,7 @@ // Contents: Contains a portable abstraction for interlocked, atomic // operations on int32_t and pointer types. // -// Microsoft Drivers 4.2 for PHP for SQL Server +// Microsoft Drivers 4.3 for PHP for SQL Server // Copyright(c) Microsoft Corporation // All rights reserved. // MIT License diff --git a/source/shared/interlockedslist.h b/source/shared/interlockedslist.h index 2c6ef47f..0a262aeb 100644 --- a/source/shared/interlockedslist.h +++ b/source/shared/interlockedslist.h @@ -4,7 +4,7 @@ // Contents: Contains a portable abstraction for interlocked, singly // linked list. // -// Microsoft Drivers 4.2 for PHP for SQL Server +// Microsoft Drivers 4.3 for PHP for SQL Server // Copyright(c) Microsoft Corporation // All rights reserved. // MIT License diff --git a/source/shared/localization.hpp b/source/shared/localization.hpp index 34384599..a5310650 100644 --- a/source/shared/localization.hpp +++ b/source/shared/localization.hpp @@ -3,7 +3,7 @@ // // Contents: Contains portable classes for localization // -// Microsoft Drivers 4.2 for PHP for SQL Server +// Microsoft Drivers 4.3 for PHP for SQL Server // Copyright(c) Microsoft Corporation // All rights reserved. // MIT License diff --git a/source/shared/localizationimpl.cpp b/source/shared/localizationimpl.cpp index 058029c1..381b9cc5 100644 --- a/source/shared/localizationimpl.cpp +++ b/source/shared/localizationimpl.cpp @@ -5,7 +5,7 @@ // Must be included in one c/cpp file per binary // A build error will occur if this inclusion policy is not followed // -// Microsoft Drivers 4.2 for PHP for SQL Server +// Microsoft Drivers 4.3 for PHP for SQL Server // Copyright(c) Microsoft Corporation // All rights reserved. // MIT License diff --git a/source/shared/msodbcsql.h b/source/shared/msodbcsql.h index e970c0ac..e2a4bf0d 100644 --- a/source/shared/msodbcsql.h +++ b/source/shared/msodbcsql.h @@ -20,7 +20,7 @@ // pecuniary loss) arising out of the use of or inability to use // this SDK, even if Microsoft has been advised of the possibility // of such damages. -// Microsoft Drivers 4.2 for PHP for SQL Server +// Microsoft Drivers 4.3 for PHP for SQL Server // Copyright(c) Microsoft Corporation // All rights reserved. // MIT License diff --git a/source/shared/sal_def.h b/source/shared/sal_def.h index 74725c34..8116f9c1 100644 --- a/source/shared/sal_def.h +++ b/source/shared/sal_def.h @@ -3,7 +3,7 @@ // // Contents: Contains the minimal definitions to build on non-Windows platforms // -// Microsoft Drivers 4.2 for PHP for SQL Server +// Microsoft Drivers 4.3 for PHP for SQL Server // Copyright(c) Microsoft Corporation // All rights reserved. // MIT License @@ -525,7 +525,9 @@ #define _In_opt_z_count_c_(size) #define _In_ptrdiff_count_(size) #define _In_range_(lb,ub) +#define _In_reads_(size) #define _In_reads_bytes_(size) +#define _In_reads_bytes_opt_(size) #define _In_z_ #define _In_z_bytecount_(size) #define _In_z_bytecount_c_(size) @@ -570,6 +572,10 @@ #define _Inout_opt_z_count_(size) #define _Inout_opt_z_count_c_(size) #define _Inout_ptrdiff_count_(size) +#define _Inout_updates_(size) +#define _Inout_updates_bytes_(size) +#define _Inout_updates_bytes_to_(size,count) +#define _Inout_updates_z_(size) #define _Inout_z_ #define _Inout_z_bytecap_(size) #define _Inout_z_bytecap_c_(size) @@ -626,6 +632,10 @@ #define _Out_range_(lb,ub) #define _Out_writes_(size) #define _Out_writes_bytes_(count) +#define _Out_writes_bytes_opt_(size) +#define _Out_writes_bytes_to_opt_(size,count) +#define _Out_writes_opt_(size) +#define _Out_writes_z_(size) #define _Out_z_bytecap_(size) #define _Out_z_bytecap_c_(size) #define _Out_z_bytecap_post_bytecount_(cap,count) @@ -637,6 +647,9 @@ #define _Out_z_cap_post_count_(cap,count) #define _Out_z_cap_x_(size) #define _Out_z_capcount_(capcount) +#define _Outptr_result_buffer_(size) +#define _Outref_result_bytebuffer_maybenull_(size) +#define _Outref_result_maybenull_ #define _Post_bytecap_(size) #define _Post_bytecount_(size) #define _Post_bytecount_c_(size) diff --git a/source/shared/typedefs_for_linux.h b/source/shared/typedefs_for_linux.h index cc6f4f68..9906c9d3 100644 --- a/source/shared/typedefs_for_linux.h +++ b/source/shared/typedefs_for_linux.h @@ -1,7 +1,7 @@ //--------------------------------------------------------------------------------------------------------------------------------- // File: typedefs_for_linux.h // -// Microsoft Drivers 4.2 for PHP for SQL Server +// Microsoft Drivers 4.3 for PHP for SQL Server // Copyright(c) Microsoft Corporation // All rights reserved. // MIT License diff --git a/source/shared/version.h b/source/shared/version.h index 1a0a3b64..ba205053 100644 --- a/source/shared/version.h +++ b/source/shared/version.h @@ -4,7 +4,7 @@ // File: version.h // Contents: Version number constants // -// Microsoft Drivers 4.2 for PHP for SQL Server +// Microsoft Drivers 4.3 for PHP for SQL Server // Copyright(c) Microsoft Corporation // All rights reserved. // MIT License @@ -22,14 +22,21 @@ #define STRINGIFY(a) TOSTRING(a) #define TOSTRING(a) #a + +// Increase Major number with backward incompatible breaking changes. +// Increase Minor with backward compatible new functionalities and API changes. +// Increase Patch for backward compatible fixes. #define SQLVERSION_MAJOR 4 -#define SQLVERSION_MINOR 2 +#define SQLVERSION_MINOR 3 #define SQLVERSION_PATCH 0 #define SQLVERSION_BUILD 0 -// Semantic versioning pre-release, for stable releases should be empty -#define SEMVER_PRERELEASE "preview" -// Semantic versioning build metadata +// Semantic versioning pre-release +// for stable releases should be empty +// "-RC" for release candidates +// "-preview" for ETP +#define SEMVER_PRERELEASE +// Semantic versioning build metadata, build meta data is not counted in precedence order. #define SEMVER_BUILDMETA #if SQLVERSION_BUILD > 0 @@ -37,11 +44,11 @@ #define SEMVER_BUILDMETA "+" STRINGIFY( SQLVERSION_BUILD ) #endif -// Main version +// Main version, dot separated 3 digits, Major.Minor.Patch #define VER_APIVERSION_STR STRINGIFY( SQLVERSION_MAJOR ) "." STRINGIFY( SQLVERSION_MINOR ) "." STRINGIFY( SQLVERSION_PATCH ) // Remove "-" if SEMVER_PRERELEASE is empty (for stable releases) -#define VER_FILEVERSION_STR VER_APIVERSION_STR "-" SEMVER_PRERELEASE SEMVER_BUILDMETA +#define VER_FILEVERSION_STR VER_APIVERSION_STR SEMVER_PRERELEASE SEMVER_BUILDMETA #define _FILEVERSION SQLVERSION_MAJOR,SQLVERSION_MINOR,SQLVERSION_PATCH,SQLVERSION_BUILD // PECL package version macros (can't have '-' or '+') diff --git a/source/shared/xplat.h b/source/shared/xplat.h index 2606e40f..b29689c5 100644 --- a/source/shared/xplat.h +++ b/source/shared/xplat.h @@ -3,7 +3,7 @@ // // Contents: include for definition of Windows types for non-Windows platforms // -// Microsoft Drivers 4.2 for PHP for SQL Server +// Microsoft Drivers 4.3 for PHP for SQL Server // Copyright(c) Microsoft Corporation // All rights reserved. // MIT License diff --git a/source/shared/xplat_intsafe.h b/source/shared/xplat_intsafe.h index df7801a3..1fd43551 100644 --- a/source/shared/xplat_intsafe.h +++ b/source/shared/xplat_intsafe.h @@ -4,7 +4,7 @@ // Contents: This module defines helper functions to prevent // integer overflow bugs. // -// Microsoft Drivers 4.2 for PHP for SQL Server +// Microsoft Drivers 4.3 for PHP for SQL Server // Copyright(c) Microsoft Corporation // All rights reserved. // MIT License diff --git a/source/shared/xplat_winerror.h b/source/shared/xplat_winerror.h index 4734d710..f3f0878b 100644 --- a/source/shared/xplat_winerror.h +++ b/source/shared/xplat_winerror.h @@ -3,7 +3,7 @@ // // Contents: Contains the minimal definitions to build on non-Windows platforms // -// Microsoft Drivers 4.2 for PHP for SQL Server +// Microsoft Drivers 4.3 for PHP for SQL Server // Copyright(c) Microsoft Corporation // All rights reserved. // MIT License diff --git a/source/shared/xplat_winnls.h b/source/shared/xplat_winnls.h index f324a15f..a91dd554 100644 --- a/source/shared/xplat_winnls.h +++ b/source/shared/xplat_winnls.h @@ -3,7 +3,7 @@ // // Contents: Contains the minimal definitions to build on non-Windows platforms // -// Microsoft Drivers 4.2 for PHP for SQL Server +// Microsoft Drivers 4.3 for PHP for SQL Server // Copyright(c) Microsoft Corporation // All rights reserved. // MIT License diff --git a/source/sqlsrv/config.m4 b/source/sqlsrv/config.m4 index 255470d4..00b815ba 100644 --- a/source/sqlsrv/config.m4 +++ b/source/sqlsrv/config.m4 @@ -27,9 +27,16 @@ if test "$PHP_SQLSRV" != "no"; then else AC_MSG_ERROR([Cannot find SQLSRV headers]) fi - AC_MSG_RESULT($sqlsrv_inc_path) - + AC_MSG_RESULT($sqlsrv_inc_path) + + HOST_OS_ARCH=`uname` + if test "${HOST_OS_ARCH}" = "Darwin"; then + MACOSX_DEPLOYMENT_TARGET=`sw_vers -productVersion` + fi + CXXFLAGS="$CXXFLAGS -std=c++11" + CXXFLAGS="$CXXFLAGS -D_FORTIFY_SOURCE=2 -O2" + CXXFLAGS="$CXXFLAGS -fstack-protector" PHP_REQUIRE_CXX() PHP_ADD_LIBRARY(stdc++, 1, SQLSRV_SHARED_LIBADD) PHP_ADD_LIBRARY(odbc, 1, SQLSRV_SHARED_LIBADD) diff --git a/source/sqlsrv/config.w32 b/source/sqlsrv/config.w32 index 5560da4e..811602fe 100644 --- a/source/sqlsrv/config.w32 +++ b/source/sqlsrv/config.w32 @@ -3,7 +3,7 @@ // // Contents: JScript build configuration used by buildconf.bat // -// Microsoft Drivers 4.2 for PHP for SQL Server +// Microsoft Drivers 4.3 for PHP for SQL Server // Copyright(c) Microsoft Corporation // All rights reserved. // MIT License @@ -35,6 +35,7 @@ if( PHP_SQLSRV != "no" ) { ADD_FLAG( "CFLAGS_SQLSRV", "/EHsc" ); ADD_FLAG( "CFLAGS_SQLSRV", "/GS" ); ADD_FLAG( "CFLAGS_SQLSRV", "/Zi" ); + ADD_FLAG( "CFLAGS_SQLSRV", "/O2" ); EXTENSION("sqlsrv", sqlsrv_src_class , PHP_SQLSRV_SHARED, "/DZEND_ENABLE_STATIC_TSRMLS_CACHE=1"); } else { WARNING("sqlsrv not enabled; libraries and headers not found"); diff --git a/source/sqlsrv/conn.cpp b/source/sqlsrv/conn.cpp index b23761b4..8da98f30 100644 --- a/source/sqlsrv/conn.cpp +++ b/source/sqlsrv/conn.cpp @@ -3,7 +3,7 @@ // // Contents: Routines that use connection handles // -// Microsoft Drivers 4.2 for PHP for SQL Server +// Microsoft Drivers 4.3 for PHP for SQL Server // Copyright(c) Microsoft Corporation // All rights reserved. // MIT License @@ -31,7 +31,7 @@ unsigned int current_log_subsystem = LOG_CONN; struct date_as_string_func { - static void func( connection_option const* /*option*/, zval* value, sqlsrv_conn* conn, std::string& /*conn_str*/ TSRMLS_DC ) + static void func( connection_option const* /*option*/, _In_ zval* value, _Inout_ sqlsrv_conn* conn, std::string& /*conn_str*/ TSRMLS_DC ) { TSRMLS_C; // show as used to avoid a warning @@ -48,7 +48,7 @@ struct date_as_string_func { struct conn_char_set_func { - static void func( connection_option const* /*option*/, zval* value, sqlsrv_conn* conn, std::string& /*conn_str*/ TSRMLS_DC ) + static void func( connection_option const* /*option*/, _Inout_ zval* value, _Inout_ sqlsrv_conn* conn, std::string& /*conn_str*/ TSRMLS_DC ) { convert_to_string( value ); const char* encoding = Z_STRVAL_P( value ); @@ -78,7 +78,7 @@ struct conn_char_set_func { struct bool_conn_str_func { - static void func( connection_option const* option, zval* value, sqlsrv_conn* /*conn*/, std::string& conn_str TSRMLS_DC ) + static void func( _In_ connection_option const* option, _In_ zval* value, sqlsrv_conn* /*conn*/, _Out_ std::string& conn_str TSRMLS_DC ) { TSRMLS_C; char const* val_str; @@ -98,7 +98,7 @@ struct bool_conn_str_func { #ifdef _WIN32 struct int_conn_str_func { - static void func( connection_option const* option, zval* value, sqlsrv_conn* /*conn*/, std::string& conn_str TSRMLS_DC ) + static void func( _In_ connection_option const* option, _In_ zval* value, sqlsrv_conn* /*conn*/, _Out_ std::string& conn_str TSRMLS_DC ) { TSRMLS_C; SQLSRV_ASSERT( Z_TYPE_P( value ) == IS_LONG, "An integer is expected for this keyword" ) @@ -116,7 +116,7 @@ struct int_conn_str_func { template struct int_conn_attr_func { - static void func( connection_option const* /*option*/, zval* value, sqlsrv_conn* conn, std::string& /*conn_str*/ TSRMLS_DC ) + static void func( connection_option const* /*option*/, _In_ zval* value, _Inout_ sqlsrv_conn* conn, std::string& /*conn_str*/ TSRMLS_DC ) { try { @@ -131,7 +131,7 @@ struct int_conn_attr_func { template struct bool_conn_attr_func { - static void func( connection_option const* /*option*/, zval* value, sqlsrv_conn* conn, std::string& /*conn_str*/ TSRMLS_DC ) + static void func( connection_option const* /*option*/, _In_ zval* value, _Inout_ sqlsrv_conn* conn, std::string& /*conn_str*/ TSRMLS_DC ) { try { core::SQLSetConnectAttr(conn, Attr, reinterpret_cast((zend_long)zend_is_true(value)), @@ -147,15 +147,15 @@ struct bool_conn_attr_func { //// *** internal functions *** -void sqlsrv_conn_close_stmts( ss_sqlsrv_conn* conn TSRMLS_DC ); -void validate_conn_options( sqlsrv_context& ctx, zval* user_options_z, _Out_ char** uid, _Out_ char** pwd, +void sqlsrv_conn_close_stmts( _Inout_ ss_sqlsrv_conn* conn TSRMLS_DC ); +void validate_conn_options( _Inout_ sqlsrv_context& ctx, _In_ zval* user_options_z, _Inout_ char** uid, _Inout_ char** pwd, _Inout_ HashTable* ss_conn_options_ht TSRMLS_DC ); -void validate_stmt_options( sqlsrv_context& ctx, zval* stmt_options, _Inout_ HashTable* ss_stmt_options_ht TSRMLS_DC ); -void add_conn_option_key( sqlsrv_context& ctx, zend_string* key, size_t key_len, - HashTable* options_ht, zval* data TSRMLS_DC ); -void add_stmt_option_key( sqlsrv_context& ctx, zend_string* key, size_t key_len, HashTable* options_ht, zval* data TSRMLS_DC ); -int get_conn_option_key( sqlsrv_context& ctx, zend_string* key, size_t key_len, zval const* value_z TSRMLS_DC ); -int get_stmt_option_key( zend_string* key, size_t key_len TSRMLS_DC ); +void validate_stmt_options( _Inout_ sqlsrv_context& ctx, _Inout_ zval* stmt_options, _Inout_ HashTable* ss_stmt_options_ht TSRMLS_DC ); +void add_conn_option_key( _Inout_ sqlsrv_context& ctx, _In_ zend_string* key, _In_ size_t key_len, + _Inout_ HashTable* options_ht, _Inout_ zval* data TSRMLS_DC ); +void add_stmt_option_key( _Inout_ sqlsrv_context& ctx, _In_ zend_string* key, _In_ size_t key_len, _Inout_ HashTable* options_ht, _Inout_ zval* data TSRMLS_DC ); +int get_conn_option_key( _Inout_ sqlsrv_context& ctx, _In_ zend_string* key, _In_ size_t key_len, _Inout_ zval const* value_z TSRMLS_DC ); +int get_stmt_option_key( _In_ zend_string* key, _In_ size_t key_len TSRMLS_DC ); } @@ -205,6 +205,7 @@ const char TraceFile[] = "TraceFile"; const char TraceOn[] = "TraceOn"; const char TrustServerCertificate[] = "TrustServerCertificate"; const char TransactionIsolation[] = "TransactionIsolation"; +const char TransparentNetworkIPResolution[] = "TransparentNetworkIPResolution"; const char UID[] = "UID"; const char WSID[] = "WSID"; @@ -420,6 +421,15 @@ const connection_option SS_CONN_OPTS[] = { CONN_ATTR_BOOL, bool_conn_str_func::func }, + { + SSConnOptionNames::TransparentNetworkIPResolution, + sizeof(SSConnOptionNames::TransparentNetworkIPResolution), + SQLSRV_CONN_OPTION_TRANSPARANT_NETWORK_IP_RESOLUTION, + ODBCConnOptions::TransparentNetworkIPResolution, + sizeof(ODBCConnOptions::TransparentNetworkIPResolution), + CONN_ATTR_STRING, + conn_str_append_func::func + }, { SSConnOptionNames::WSID, sizeof( SSConnOptionNames::WSID ), @@ -637,7 +647,7 @@ PHP_FUNCTION( sqlsrv_close ) THROW_CORE_ERROR( error_ctx, SS_SQLSRV_ERROR_INVALID_FUNCTION_PARAMETER, _FN_ ); } } - + SQLSRV_ASSERT( conn_r != NULL, "sqlsrv_close: conn_r was null" ); conn = static_cast( zend_fetch_resource( Z_RES_P( conn_r ) TSRMLS_CC, ss_sqlsrv_conn::resource_name, ss_sqlsrv_conn::descriptor )); // if sqlsrv_close was called on an already closed connection then we just return success. @@ -658,7 +668,11 @@ PHP_FUNCTION( sqlsrv_close ) if( zend_list_close( Z_RES_P( conn_r ) ) == FAILURE ) { LOG( SEV_ERROR, "Failed to remove connection resource %1!d!", Z_RES_HANDLE_P( conn_r )); } - + + // when conn_r is first parsed in zend_parse_parameters, conn_r becomes a zval that points to a zend_resource with a refcount of 2 + // need to DELREF here so the refcount becomes 1 and conn_r can be appropriate destroyed by the garbage collector when it goes out of scope + // zend_list_close only destroy the resource pointed to by Z_RES_P( conn_r ), not the zend_resource itself + Z_TRY_DELREF_P(conn_r); ZVAL_NULL( conn_r ); RETURN_TRUE; @@ -673,7 +687,7 @@ PHP_FUNCTION( sqlsrv_close ) } } -void __cdecl sqlsrv_conn_dtor( zend_resource *rsrc TSRMLS_DC ) +void __cdecl sqlsrv_conn_dtor( _Inout_ zend_resource *rsrc TSRMLS_DC ) { LOG_FUNCTION( "sqlsrv_conn_dtor" ); @@ -1111,7 +1125,7 @@ PHP_FUNCTION( sqlsrv_query ) } } -void free_stmt_resource( zval* stmt_z TSRMLS_DC ) +void free_stmt_resource( _Inout_ zval* stmt_z TSRMLS_DC ) { if( FAILURE == zend_list_close( Z_RES_P( stmt_z ))) { LOG(SEV_ERROR, "Failed to remove stmt resource %1!d!", Z_RES_HANDLE_P(stmt_z)); @@ -1127,7 +1141,7 @@ namespace { // must close all statement handles opened by this connection before closing the connection // no errors are returned, since close should always succeed -void sqlsrv_conn_close_stmts( ss_sqlsrv_conn* conn TSRMLS_DC ) +void sqlsrv_conn_close_stmts( _Inout_ ss_sqlsrv_conn* conn TSRMLS_DC ) { //pre-condition check SQLSRV_ASSERT(( conn->handle() != NULL ), "sqlsrv_conn_close_stmts: Connection handle is NULL. Trying to destroy an " @@ -1175,7 +1189,7 @@ void sqlsrv_conn_close_stmts( ss_sqlsrv_conn* conn TSRMLS_DC ) conn->stmts = NULL; } -int get_conn_option_key( sqlsrv_context& ctx, zend_string* key, size_t key_len, zval const* value_z TSRMLS_DC ) +int get_conn_option_key( _Inout_ sqlsrv_context& ctx, _In_ zend_string* key, _In_ size_t key_len, _Inout_ zval const* value_z TSRMLS_DC ) { for( int i=0; SS_CONN_OPTS[ i ].conn_option_key != SQLSRV_CONN_OPTION_INVALID; ++i ) { @@ -1236,7 +1250,7 @@ int get_conn_option_key( sqlsrv_context& ctx, zend_string* key, size_t key_len, return SQLSRV_CONN_OPTION_INVALID; } -int get_stmt_option_key( zend_string* key, size_t key_len TSRMLS_DC ) +int get_stmt_option_key( _In_ zend_string* key, _In_ size_t key_len TSRMLS_DC ) { for( int i = 0; SS_STMT_OPTS[ i ].key != SQLSRV_STMT_OPTION_INVALID; ++i ) { @@ -1247,8 +1261,8 @@ int get_stmt_option_key( zend_string* key, size_t key_len TSRMLS_DC ) return SQLSRV_STMT_OPTION_INVALID; } -void add_stmt_option_key( sqlsrv_context& ctx, zend_string* key, size_t key_len, - HashTable* options_ht, zval* data TSRMLS_DC ) +void add_stmt_option_key( _Inout_ sqlsrv_context& ctx, _In_ zend_string* key, _In_ size_t key_len, + _Inout_ HashTable* options_ht, _Inout_ zval* data TSRMLS_DC ) { int option_key = ::get_stmt_option_key( key, key_len TSRMLS_CC ); @@ -1261,8 +1275,8 @@ void add_stmt_option_key( sqlsrv_context& ctx, zend_string* key, size_t key_len, core::sqlsrv_zend_hash_index_update( ctx, options_ht, option_key, data TSRMLS_CC ); } -void add_conn_option_key( sqlsrv_context& ctx, zend_string* key, size_t key_len, - HashTable* options_ht, zval* data TSRMLS_DC ) +void add_conn_option_key( _Inout_ sqlsrv_context& ctx, _In_ zend_string* key, _In_ size_t key_len, + _Inout_ HashTable* options_ht, _Inout_ zval* data TSRMLS_DC ) { int option_key = ::get_conn_option_key( ctx, key, key_len, data TSRMLS_CC ); CHECK_CUSTOM_ERROR((option_key == SQLSRV_STMT_OPTION_INVALID ), ctx, SS_SQLSRV_ERROR_INVALID_OPTION, ZSTR_VAL( key ) ) { @@ -1278,7 +1292,7 @@ void add_conn_option_key( sqlsrv_context& ctx, zend_string* key, size_t key_len, // against the list of supported statement options by this driver. After validation // creates a Hashtable of statement options to be sent to the core layer for processing. -void validate_stmt_options( sqlsrv_context& ctx, zval* stmt_options, _Inout_ HashTable* ss_stmt_options_ht TSRMLS_DC ) +void validate_stmt_options( _Inout_ sqlsrv_context& ctx, _Inout_ zval* stmt_options, _Inout_ HashTable* ss_stmt_options_ht TSRMLS_DC ) { try { if( stmt_options ) { @@ -1298,8 +1312,13 @@ void validate_stmt_options( sqlsrv_context& ctx, zval* stmt_options, _Inout_ Has throw core::CoreException(); } } - key_len = ZSTR_LEN(key) + 1; - add_stmt_option_key( ctx, key, key_len, ss_stmt_options_ht, data TSRMLS_CC ); + else if ( key != NULL ) { + key_len = ZSTR_LEN( key ) + 1; + add_stmt_option_key( ctx, key, key_len, ss_stmt_options_ht, data TSRMLS_CC ); + } + else { + DIE( "validate_stmt_options: key was null." ); + } } ZEND_HASH_FOREACH_END(); } } @@ -1313,7 +1332,7 @@ void validate_stmt_options( sqlsrv_context& ctx, zval* stmt_options, _Inout_ Has // against the predefined list of supported connection options by this driver. After validation // creates a Hashtable of connection options to be sent to the core layer for processing. -void validate_conn_options( sqlsrv_context& ctx, zval* user_options_z, _Out_ char** uid, _Out_ char** pwd, _Inout_ HashTable* ss_conn_options_ht TSRMLS_DC ) +void validate_conn_options( _Inout_ sqlsrv_context& ctx, _In_ zval* user_options_z, _Inout_ char** uid, _Inout_ char** pwd, _Inout_ HashTable* ss_conn_options_ht TSRMLS_DC ) { try { @@ -1334,21 +1353,25 @@ void validate_conn_options( sqlsrv_context& ctx, zval* user_options_z, _Out_ cha CHECK_CUSTOM_ERROR(( type != HASH_KEY_IS_STRING ), ctx, SS_SQLSRV_ERROR_INVALID_CONNECTION_KEY ) { throw ss::SSException(); } + if ( key != NULL ) { + // Length of the key string does not include the null terminator in PHP7, +1 has to be added + size_t key_len = ZSTR_LEN( key ) + 1; + if ( key_len == sizeof( SSConnOptionNames::UID ) && !stricmp( ZSTR_VAL( key ), SSConnOptionNames::UID )) { - // Length of the key string does not include the null terminator in PHP7, +1 has to be added - size_t key_len = ZSTR_LEN(key) + 1; - if( key_len == sizeof(SSConnOptionNames::UID) && !stricmp(ZSTR_VAL(key), SSConnOptionNames::UID )) { + *uid = Z_STRVAL_P( data ); + } - *uid = Z_STRVAL_P( data ); - } + else if ( key_len == sizeof( SSConnOptionNames::PWD ) && !stricmp( ZSTR_VAL( key ), SSConnOptionNames::PWD )) { - else if( key_len == sizeof( SSConnOptionNames::PWD ) && !stricmp( ZSTR_VAL( key ), SSConnOptionNames::PWD )) { + *pwd = Z_STRVAL_P( data ); + } + else { - *pwd = Z_STRVAL_P( data ); + ::add_conn_option_key( ctx, key, key_len, ss_conn_options_ht, data TSRMLS_CC ); + } } else { - - ::add_conn_option_key( ctx, key, key_len, ss_conn_options_ht, data TSRMLS_CC ); + DIE( "validate_conn_options: key was null." ); } } ZEND_HASH_FOREACH_END(); } diff --git a/source/sqlsrv/init.cpp b/source/sqlsrv/init.cpp index d87b1a4b..f6626122 100644 --- a/source/sqlsrv/init.cpp +++ b/source/sqlsrv/init.cpp @@ -2,7 +2,7 @@ // File: init.cpp // Contents: initialization routines for the extension // -// Microsoft Drivers 4.2 for PHP for SQL Server +// Microsoft Drivers 4.3 for PHP for SQL Server // Copyright(c) Microsoft Corporation // All rights reserved. // MIT License @@ -37,8 +37,8 @@ HashTable* g_ss_warnings_to_ignore_ht = NULL; HashTable* g_ss_encodings_ht = NULL; // Destructors called by Zend for each element in the hashtable -void sqlsrv_error_const_dtor( zval* element ); -void sqlsrv_encoding_dtor( zval* element ); +void sqlsrv_error_const_dtor( _Inout_ zval* element ); +void sqlsrv_encoding_dtor( _Inout_ zval* element ); // henv context for creating connections sqlsrv_context* g_ss_henv_cp; @@ -569,13 +569,13 @@ PHP_MINIT_FUNCTION(sqlsrv) } // called by Zend for each parameter in the g_ss_warnings_to_ignore_ht and g_ss_errors_ht hash table when it is destroyed -void sqlsrv_error_const_dtor( zval* elem ) { +void sqlsrv_error_const_dtor( _Inout_ zval* elem ) { sqlsrv_error_const* error_to_ignore = static_cast( Z_PTR_P(elem) ); pefree(error_to_ignore, 1); } // called by Zend for each parameter in the g_ss_encodings_ht hash table when it is destroyed -void sqlsrv_encoding_dtor( zval* elem ) { +void sqlsrv_encoding_dtor( _Inout_ zval* elem ) { sqlsrv_encoding* sql_enc = static_cast( Z_PTR_P(elem) ); pefree(sql_enc, 1); } diff --git a/source/sqlsrv/php_sqlsrv.h b/source/sqlsrv/php_sqlsrv.h index ed31aaea..82168296 100644 --- a/source/sqlsrv/php_sqlsrv.h +++ b/source/sqlsrv/php_sqlsrv.h @@ -8,7 +8,7 @@ // // Comments: Also contains "internal" declarations shared across source files. // -// Microsoft Drivers 4.2 for PHP for SQL Server +// Microsoft Drivers 4.3 for PHP for SQL Server // Copyright(c) Microsoft Corporation // All rights reserved. // MIT License @@ -99,7 +99,7 @@ extern HMODULE g_sqlsrv_hmodule; // used for getting the versio extern sqlsrv_context* g_ss_henv_cp; extern sqlsrv_context* g_ss_henv_ncp; -extern OSVERSIONINFO g_osversion; // used to determine which OS we're running in +extern bool isVistaOrGreater; // used to determine if OS is Vista or Greater #define phpext_sqlsrv_ptr &g_sqlsrv_module_entry @@ -138,7 +138,7 @@ struct ss_sqlsrv_conn : sqlsrv_conn static int descriptor; // initialize with default values - ss_sqlsrv_conn( SQLHANDLE h, error_callback e, void* drv TSRMLS_DC ) : + ss_sqlsrv_conn( _In_ SQLHANDLE h, _In_ error_callback e, _In_ void* drv TSRMLS_DC ) : sqlsrv_conn( h, e, drv, SQLSRV_ENCODING_SYSTEM TSRMLS_CC ), stmts( NULL ), date_as_string( false ), @@ -148,7 +148,7 @@ struct ss_sqlsrv_conn : sqlsrv_conn }; // resource destructor -void __cdecl sqlsrv_conn_dtor( zend_resource *rsrc TSRMLS_DC ); +void __cdecl sqlsrv_conn_dtor( _Inout_ zend_resource *rsrc TSRMLS_DC ); //********************************************************************************************************************************* // Statement @@ -162,20 +162,20 @@ struct sqlsrv_fetch_field_name { struct stmt_option_ss_scrollable : public stmt_option_functor { - virtual void operator()( sqlsrv_stmt* stmt, stmt_option const* /*opt*/, zval* value_z TSRMLS_DC ); + virtual void operator()( _Inout_ sqlsrv_stmt* stmt, stmt_option const* /*opt*/, _In_ zval* value_z TSRMLS_DC ); }; // This object inherits and overrides the callbacks necessary struct ss_sqlsrv_stmt : public sqlsrv_stmt { - ss_sqlsrv_stmt( sqlsrv_conn* c, SQLHANDLE handle, error_callback e, void* drv TSRMLS_DC ); + ss_sqlsrv_stmt( _In_ sqlsrv_conn* c, _In_ SQLHANDLE handle, _In_ error_callback e, _In_ void* drv TSRMLS_DC ); virtual ~ss_sqlsrv_stmt( void ); void new_result_set( TSRMLS_D ); // driver specific conversion rules from a SQL Server/ODBC type to one of the SQLSRV_PHPTYPE_* constants - sqlsrv_phptype sql_type_to_php_type( SQLINTEGER sql_type, SQLUINTEGER size, bool prefer_string_to_stream ); + sqlsrv_phptype sql_type_to_php_type( _In_ SQLINTEGER sql_type, _In_ SQLUINTEGER size, _In_ bool prefer_string_to_stream ); bool prepared; // whether the statement has been prepared yet (used for error messages) zend_ulong conn_index; // index into the connection hash that contains this statement structure @@ -200,7 +200,7 @@ struct sqlsrv_stream_encoding { zval* stream_z; unsigned int encoding; - sqlsrv_stream_encoding( zval* str_z, unsigned int enc ) : + sqlsrv_stream_encoding( _In_ zval* str_z, _In_ unsigned int enc ) : stream_z( str_z ), encoding( enc ) { } @@ -223,14 +223,14 @@ PHP_FUNCTION(sqlsrv_rows_affected); PHP_FUNCTION(sqlsrv_send_stream_data); // resource destructor -void __cdecl sqlsrv_stmt_dtor( zend_resource *rsrc TSRMLS_DC ); +void __cdecl sqlsrv_stmt_dtor( _Inout_ zend_resource *rsrc TSRMLS_DC ); // "internal" statement functions shared by functions in conn.cpp and stmt.cpp -void bind_params( ss_sqlsrv_stmt* stmt TSRMLS_DC ); +void bind_params( _Inout_ ss_sqlsrv_stmt* stmt TSRMLS_DC ); bool sqlsrv_stmt_common_execute( sqlsrv_stmt* s, const SQLCHAR* sql_string, int sql_len, bool direct, const char* function TSRMLS_DC ); void free_odbc_resources( ss_sqlsrv_stmt* stmt TSRMLS_DC ); -void free_stmt_resource( zval* stmt_z TSRMLS_DC ); +void free_stmt_resource( _Inout_ zval* stmt_z TSRMLS_DC ); //********************************************************************************************************************************* // Type Functions @@ -358,7 +358,7 @@ enum SS_ERROR_CODES { extern ss_error SS_ERRORS[]; -bool ss_error_handler( sqlsrv_context& ctx, unsigned int sqlsrv_error_code, bool warning TSRMLS_DC, va_list* print_args ); +bool ss_error_handler( _Inout_ sqlsrv_context& ctx, _In_ unsigned int sqlsrv_error_code, _In_ bool warning TSRMLS_DC, _In_opt_ va_list* print_args ); // *** extension error functions *** PHP_FUNCTION(sqlsrv_errors); @@ -367,14 +367,14 @@ PHP_FUNCTION(sqlsrv_errors); // connection option to UTF-16. mbcs_len and utf16_len are sizes in // bytes. The return is the number of UTF-16 characters in the string // returned in utf16_out_string. -unsigned int convert_string_from_default_encoding( unsigned int php_encoding, char const* mbcs_in_string, - unsigned int mbcs_len, _Out_ wchar_t* utf16_out_string, - unsigned int utf16_len ); +unsigned int convert_string_from_default_encoding( _In_ unsigned int php_encoding, _In_reads_bytes_(mbcs_len) char const* mbcs_in_string, + _In_ unsigned int mbcs_len, _Out_writes_(utf16_len) __transfer(mbcs_in_string) wchar_t* utf16_out_string, + _In_ unsigned int utf16_len ); // create a wide char string from the passed in mbcs string. NULL is returned if the string // could not be created. No error is posted by this function. utf16_len is the number of // wchar_t characters, not the number of bytes. -SQLWCHAR* utf16_string_from_mbcs_string( unsigned int php_encoding, const char* mbcs_string, - unsigned int mbcs_len, _Out_ unsigned int* utf16_len ); +SQLWCHAR* utf16_string_from_mbcs_string( _In_ unsigned int php_encoding, _In_reads_bytes_(mbcs_len) const char* mbcs_string, + _In_ unsigned int mbcs_len, _Out_ unsigned int* utf16_len ); // *** internal error macros and functions *** bool handle_error( sqlsrv_context const* ctx, int log_subsystem, const char* function, @@ -420,13 +420,13 @@ public: { } - sqlsrv_context_auto_ptr( const sqlsrv_context_auto_ptr& src ) : + sqlsrv_context_auto_ptr( _Inout_opt_ const sqlsrv_context_auto_ptr& src ) : sqlsrv_auto_ptr< sqlsrv_context, sqlsrv_context_auto_ptr >( src ) { } // free the original pointer and assign a new pointer. Use NULL to simply free the pointer. - void reset( sqlsrv_context* ptr = NULL ) + void reset( _In_opt_ sqlsrv_context* ptr = NULL ) { if( _ptr ) { _ptr->~sqlsrv_context(); @@ -435,12 +435,12 @@ public: _ptr = ptr; } - sqlsrv_context* operator=( sqlsrv_context* ptr ) + sqlsrv_context* operator=( _In_opt_ sqlsrv_context* ptr ) { return sqlsrv_auto_ptr< sqlsrv_context, sqlsrv_context_auto_ptr >::operator=( ptr ); } - void operator=( sqlsrv_context_auto_ptr& src ) + void operator=( _Inout_opt_ sqlsrv_context_auto_ptr& src ) { sqlsrv_context* p = src.get(); src.transferred(); @@ -464,7 +464,7 @@ public: } // logger for ss_sqlsrv called by the core layer when it wants to log something with the LOG macro -void ss_sqlsrv_log( unsigned int severity TSRMLS_DC, const char* msg, va_list* print_args ); +void ss_sqlsrv_log( _In_ unsigned int severity TSRMLS_DC, _In_opt_ const char* msg, _In_opt_ va_list* print_args ); // subsystems that may report log messages. These may be used to filter which systems write to the log to prevent noise. enum logging_subsystems { @@ -490,7 +490,7 @@ namespace ss { } }; - inline void zend_register_resource(_Out_ zval& rsrc_result, void* rsrc_pointer, int rsrc_type, const char* rsrc_name TSRMLS_DC) + inline void zend_register_resource( _Inout_ zval& rsrc_result, _Inout_ void* rsrc_pointer, _In_ int rsrc_type, _In_opt_ const char* rsrc_name TSRMLS_DC) { int zr = (NULL != (Z_RES(rsrc_result) = ::zend_register_resource(rsrc_pointer, rsrc_type)) ? SUCCESS : FAILURE); CHECK_CUSTOM_ERROR(( zr == FAILURE ), reinterpret_cast( rsrc_pointer ), SS_SQLSRV_ERROR_REGISTER_RESOURCE, @@ -508,7 +508,7 @@ namespace ss { // generic function used to validate parameters to a PHP function. // Register an invalid parameter error and returns NULL when parameters don't match the spec given. template -inline H* process_params( INTERNAL_FUNCTION_PARAMETERS, char const* param_spec, const char* calling_func, size_t param_count, ... ) +inline H* process_params( INTERNAL_FUNCTION_PARAMETERS, _In_ char const* param_spec, _In_ const char* calling_func, _In_ size_t param_count, ... ) { SQLSRV_UNUSED( return_value ); diff --git a/source/sqlsrv/stmt.cpp b/source/sqlsrv/stmt.cpp index 2c87ef9c..1155782b 100644 --- a/source/sqlsrv/stmt.cpp +++ b/source/sqlsrv/stmt.cpp @@ -3,7 +3,7 @@ // // Contents: Routines that use statement handles // -// Microsoft Drivers 4.2 for PHP for SQL Server +// Microsoft Drivers 4.3 for PHP for SQL Server // Copyright(c) Microsoft Corporation // All rights reserved. // MIT License @@ -90,23 +90,23 @@ const char SS_SQLSRV_WARNING_PARAM_VAR_NOT_REF[] = "Variable parameter %d not pa /* internal functions */ -void convert_to_zval( sqlsrv_stmt* stmt, SQLSRV_PHPTYPE sqlsrv_php_type, void* in_val, SQLLEN field_len, zval& out_zval ); +void convert_to_zval( _Inout_ sqlsrv_stmt* stmt, _In_ SQLSRV_PHPTYPE sqlsrv_php_type, _In_opt_ void* in_val, _In_ SQLLEN field_len, _Inout_ zval& out_zval ); -void fetch_fields_common( _Inout_ ss_sqlsrv_stmt* stmt, zend_long fetch_type, _Out_ zval& fields, bool allow_empty_field_names +void fetch_fields_common( _Inout_ ss_sqlsrv_stmt* stmt, _In_ zend_long fetch_type, _Out_ zval& fields, _In_ bool allow_empty_field_names TSRMLS_DC ); -bool determine_column_size_or_precision( sqlsrv_stmt const* stmt, sqlsrv_sqltype sqlsrv_type, _Out_ SQLULEN* column_size, +bool determine_column_size_or_precision( sqlsrv_stmt const* stmt, _In_ sqlsrv_sqltype sqlsrv_type, _Inout_ SQLULEN* column_size, _Out_ SQLSMALLINT* decimal_digits ); sqlsrv_phptype determine_sqlsrv_php_type( sqlsrv_stmt const* stmt, SQLINTEGER sql_type, SQLUINTEGER size, bool prefer_string ); -void determine_stmt_has_rows( ss_sqlsrv_stmt* stmt TSRMLS_DC ); -bool is_valid_sqlsrv_phptype( sqlsrv_phptype type ); -bool is_valid_sqlsrv_sqltype( sqlsrv_sqltype type ); -void parse_param_array( ss_sqlsrv_stmt* stmt, _Inout_ zval* param_array, zend_ulong index, _Out_ SQLSMALLINT& direction, +void determine_stmt_has_rows( _Inout_ ss_sqlsrv_stmt* stmt TSRMLS_DC ); +bool is_valid_sqlsrv_phptype( _In_ sqlsrv_phptype type ); +bool is_valid_sqlsrv_sqltype( _In_ sqlsrv_sqltype type ); +void parse_param_array( _Inout_ ss_sqlsrv_stmt* stmt, _Inout_ zval* param_array, zend_ulong index, _Out_ SQLSMALLINT& direction, _Out_ SQLSRV_PHPTYPE& php_out_type, _Out_ SQLSRV_ENCODING& encoding, _Out_ SQLSMALLINT& sql_type, _Out_ SQLULEN& column_size, _Out_ SQLSMALLINT& decimal_digits TSRMLS_DC ); -void type_and_encoding( INTERNAL_FUNCTION_PARAMETERS, int type ); -void type_and_size_calc( INTERNAL_FUNCTION_PARAMETERS, int type ); -void type_and_precision_calc( INTERNAL_FUNCTION_PARAMETERS, int type ); -bool verify_and_set_encoding( const char* encoding_string, _Out_ sqlsrv_phptype& phptype_encoding TSRMLS_DC ); +void type_and_encoding( INTERNAL_FUNCTION_PARAMETERS, _In_ int type ); +void type_and_size_calc( INTERNAL_FUNCTION_PARAMETERS, _In_ int type ); +void type_and_precision_calc( INTERNAL_FUNCTION_PARAMETERS, _In_ int type ); +bool verify_and_set_encoding( _In_ const char* encoding_string, _Inout_ sqlsrv_phptype& phptype_encoding TSRMLS_DC ); } @@ -120,7 +120,7 @@ namespace SSCursorTypes { const char QUERY_OPTION_SCROLLABLE_BUFFERED[] = "buffered"; } -ss_sqlsrv_stmt::ss_sqlsrv_stmt( sqlsrv_conn* c, SQLHANDLE handle, error_callback e, void* drv TSRMLS_DC ) : +ss_sqlsrv_stmt::ss_sqlsrv_stmt( _In_ sqlsrv_conn* c, _In_ SQLHANDLE handle, _In_ error_callback e, _In_ void* drv TSRMLS_DC ) : sqlsrv_stmt( c, handle, e, drv TSRMLS_CC ), prepared( false ), conn_index( -1 ), @@ -166,7 +166,7 @@ void ss_sqlsrv_stmt::new_result_set( TSRMLS_D ) } // Returns a php type for a given sql type. Also sets the encoding wherever applicable. -sqlsrv_phptype ss_sqlsrv_stmt::sql_type_to_php_type( SQLINTEGER sql_type, SQLUINTEGER size, bool prefer_string_to_stream ) +sqlsrv_phptype ss_sqlsrv_stmt::sql_type_to_php_type( _In_ SQLINTEGER sql_type, _In_ SQLUINTEGER size, _In_ bool prefer_string_to_stream ) { sqlsrv_phptype ss_phptype; ss_phptype.typeinfo.type = SQLSRV_PHPTYPE_INVALID; @@ -1168,7 +1168,7 @@ PHP_FUNCTION(SQLSRV_SQLTYPE_VARCHAR) type_and_size_calc( INTERNAL_FUNCTION_PARAM_PASSTHRU, SQL_VARCHAR ); } -void bind_params( ss_sqlsrv_stmt* stmt TSRMLS_DC ) +void bind_params( _Inout_ ss_sqlsrv_stmt* stmt TSRMLS_DC ) { // if there's nothing to do, just return if( stmt->params_z == NULL ) { @@ -1225,6 +1225,7 @@ void bind_params( ss_sqlsrv_stmt* stmt TSRMLS_DC ) value_z = param_z; } // bind the parameter + SQLSRV_ASSERT( value_z != NULL, "bind_params: value_z is null." ); core_sqlsrv_bind_param( stmt, index, direction, value_z, php_out_type, encoding, sql_type, column_size, decimal_digits TSRMLS_CC ); @@ -1282,7 +1283,7 @@ PHP_FUNCTION( sqlsrv_cancel ) } } -void __cdecl sqlsrv_stmt_dtor(zend_resource *rsrc TSRMLS_DC) +void __cdecl sqlsrv_stmt_dtor( _Inout_ zend_resource *rsrc TSRMLS_DC ) { LOG_FUNCTION( "sqlsrv_stmt_dtor" ); @@ -1362,6 +1363,7 @@ PHP_FUNCTION( sqlsrv_free_stmt ) // if sqlsrv_free_stmt was called on an already closed statment then we just return success. // zend_list_close sets the type of the closed statment to -1. + SQLSRV_ASSERT( stmt_r != NULL, "sqlsrv_free_stmt: stmt_r is null." ); if ( Z_RES_TYPE_P( stmt_r ) == RSRC_INVALID_TYPE ) { RETURN_TRUE; } @@ -1376,6 +1378,10 @@ PHP_FUNCTION( sqlsrv_free_stmt ) LOG( SEV_ERROR, "Failed to remove stmt resource %1!d!", Z_RES_P( stmt_r )->handle); } + // when stmt_r is first parsed in zend_parse_parameters, stmt_r becomes a zval that points to a zend_resource with a refcount of 2 + // need to DELREF here so the refcount becomes 1 and stmt_r can be appropriate destroyed by the garbage collector when it goes out of scope + // zend_list_close only destroy the resource pointed to by Z_RES_P( stmt_r ), not the zend_resource itself + Z_TRY_DELREF_P(stmt_r); ZVAL_NULL( stmt_r ); RETURN_TRUE; @@ -1392,7 +1398,7 @@ PHP_FUNCTION( sqlsrv_free_stmt ) } } -void stmt_option_ss_scrollable:: operator()( sqlsrv_stmt* stmt, stmt_option const* /*opt*/, zval* value_z TSRMLS_DC ) +void stmt_option_ss_scrollable:: operator()( _Inout_ sqlsrv_stmt* stmt, stmt_option const* /*opt*/, _In_ zval* value_z TSRMLS_DC ) { CHECK_CUSTOM_ERROR(( Z_TYPE_P( value_z ) != IS_STRING ), stmt, SQLSRV_ERROR_INVALID_OPTION_SCROLLABLE ) { throw ss::SSException(); @@ -1438,7 +1444,7 @@ void stmt_option_ss_scrollable:: operator()( sqlsrv_stmt* stmt, stmt_option cons namespace { -void convert_to_zval(sqlsrv_stmt* stmt, SQLSRV_PHPTYPE sqlsrv_php_type, void* in_val, SQLLEN field_len, zval& out_zval) +void convert_to_zval( _Inout_ sqlsrv_stmt* stmt, _In_ SQLSRV_PHPTYPE sqlsrv_php_type, _In_opt_ void* in_val, _In_ SQLLEN field_len, _Inout_ zval& out_zval) { if ( in_val == NULL ) { ZVAL_NULL( &out_zval); @@ -1494,7 +1500,7 @@ void convert_to_zval(sqlsrv_stmt* stmt, SQLSRV_PHPTYPE sqlsrv_php_type, void* in // put in the column size and scale/decimal digits of the sql server type // these values are taken from the MSDN page at http://msdn2.microsoft.com/en-us/library/ms711786(VS.85).aspx // for SQL_VARBINARY, SQL_VARCHAR, and SQL_WLONGVARCHAR types, see https://msdn.microsoft.com/en-CA/library/ms187993.aspx -bool determine_column_size_or_precision( sqlsrv_stmt const* stmt, sqlsrv_sqltype sqlsrv_type, _Out_ SQLULEN* column_size, +bool determine_column_size_or_precision( sqlsrv_stmt const* stmt, _In_ sqlsrv_sqltype sqlsrv_type, _Inout_ SQLULEN* column_size, _Out_ SQLSMALLINT* decimal_digits ) { *decimal_digits = 0; @@ -1599,7 +1605,7 @@ bool determine_column_size_or_precision( sqlsrv_stmt const* stmt, sqlsrv_sqltype // given a SQL Server type, return a sqlsrv php type -sqlsrv_phptype determine_sqlsrv_php_type( ss_sqlsrv_stmt const* stmt, SQLINTEGER sql_type, SQLUINTEGER size, bool prefer_string ) +sqlsrv_phptype determine_sqlsrv_php_type( _In_ ss_sqlsrv_stmt const* stmt, _In_ SQLINTEGER sql_type, _In_ SQLUINTEGER size, _In_ bool prefer_string ) { sqlsrv_phptype sqlsrv_phptype; sqlsrv_phptype.typeinfo.type = PHPTYPE_INVALID; @@ -1696,7 +1702,7 @@ sqlsrv_phptype determine_sqlsrv_php_type( ss_sqlsrv_stmt const* stmt, SQLINTEGER // The return value simply states whether or not if an error occurred during the determination. // (All errors are posted here before returning.) -void determine_stmt_has_rows( ss_sqlsrv_stmt* stmt TSRMLS_DC ) +void determine_stmt_has_rows( _Inout_ ss_sqlsrv_stmt* stmt TSRMLS_DC ) { SQLRETURN r = SQL_SUCCESS; @@ -1745,7 +1751,7 @@ void determine_stmt_has_rows( ss_sqlsrv_stmt* stmt TSRMLS_DC ) } } -void fetch_fields_common( _Inout_ ss_sqlsrv_stmt* stmt, zend_long fetch_type, _Out_ zval& fields, bool allow_empty_field_names +void fetch_fields_common( _Inout_ ss_sqlsrv_stmt* stmt, _In_ zend_long fetch_type, _Out_ zval& fields, _In_ bool allow_empty_field_names TSRMLS_DC ) { void* field_value = NULL; @@ -1845,7 +1851,7 @@ void fetch_fields_common( _Inout_ ss_sqlsrv_stmt* stmt, zend_long fetch_type, _O } -void parse_param_array( ss_sqlsrv_stmt* stmt, _Inout_ zval* param_array, zend_ulong index, _Out_ SQLSMALLINT& direction, +void parse_param_array( _Inout_ ss_sqlsrv_stmt* stmt, _Inout_ zval* param_array, zend_ulong index, _Out_ SQLSMALLINT& direction, _Out_ SQLSRV_PHPTYPE& php_out_type, _Out_ SQLSRV_ENCODING& encoding, _Out_ SQLSMALLINT& sql_type, _Out_ SQLULEN& column_size, _Out_ SQLSMALLINT& decimal_digits TSRMLS_DC ) @@ -2018,7 +2024,7 @@ void parse_param_array( ss_sqlsrv_stmt* stmt, _Inout_ zval* param_array, zend_ul } } -bool is_valid_sqlsrv_phptype( sqlsrv_phptype type ) +bool is_valid_sqlsrv_phptype( _In_ sqlsrv_phptype type ) { switch( type.typeinfo.type ) { @@ -2043,7 +2049,7 @@ bool is_valid_sqlsrv_phptype( sqlsrv_phptype type ) // return if the type is a valid sql server type not including // size, precision or scale. Use determine_precision_and_scale for that. -bool is_valid_sqlsrv_sqltype( sqlsrv_sqltype sql_type ) +bool is_valid_sqlsrv_sqltype( _In_ sqlsrv_sqltype sql_type ) { switch( sql_type.typeinfo.type ) { case SQL_BIGINT: @@ -2080,21 +2086,23 @@ bool is_valid_sqlsrv_sqltype( sqlsrv_sqltype sql_type ) // verify an encoding given to type_and_encoding by looking through the list // of standard encodings created at module initialization time -bool verify_and_set_encoding( const char* encoding_string, _Out_ sqlsrv_phptype& phptype_encoding TSRMLS_DC ) +bool verify_and_set_encoding( _In_ const char* encoding_string, _Inout_ sqlsrv_phptype& phptype_encoding TSRMLS_DC ) { void* encoding_temp = NULL; zend_ulong index = -1; zend_string* key = NULL; ZEND_HASH_FOREACH_KEY_PTR( g_ss_encodings_ht, index, key, encoding_temp ) { - if ( !encoding_temp ) { - DIE( "Fatal: Error retrieving encoding from encoding hash table." ); - } - sqlsrv_encoding* encoding = reinterpret_cast( encoding_temp ); - encoding_temp = NULL; - if( !stricmp( encoding_string, encoding->iana )) { - phptype_encoding.typeinfo.encoding = encoding->code_page; - return true; - } + if (encoding_temp) { + sqlsrv_encoding* encoding = reinterpret_cast(encoding_temp); + encoding_temp = NULL; + if (!stricmp(encoding_string, encoding->iana)) { + phptype_encoding.typeinfo.encoding = encoding->code_page; + return true; + } + } + else { + DIE("Fatal: Error retrieving encoding from encoding hash table."); + } } ZEND_HASH_FOREACH_END(); return false; @@ -2102,7 +2110,7 @@ bool verify_and_set_encoding( const char* encoding_string, _Out_ sqlsrv_phptype& // called when one of the SQLSRV_SQLTYPE type functions is called. Encodes the type and size // into a sqlsrv_sqltype bit fields (see php_sqlsrv.h). -void type_and_size_calc( INTERNAL_FUNCTION_PARAMETERS, int type ) +void type_and_size_calc( INTERNAL_FUNCTION_PARAMETERS, _In_ int type ) { char* size_p = NULL; size_t size_len = 0; @@ -2112,20 +2120,24 @@ void type_and_size_calc( INTERNAL_FUNCTION_PARAMETERS, int type ) return; } - - if( !strnicmp( "max", size_p, sizeof( "max" ) / sizeof(char)) ) { - size = SQLSRV_SIZE_MAX_TYPE; + if (size_p) { + if (!strnicmp("max", size_p, sizeof("max") / sizeof(char))) { + size = SQLSRV_SIZE_MAX_TYPE; + } + else { +#ifndef _WIN32 + errno = 0; +#else + _set_errno(0); // reset errno for atol +#endif // !_WIN32 + size = atol(size_p); + if (errno != 0) { + size = SQLSRV_INVALID_SIZE; + } + } } else { -#ifndef _WIN32 - errno = 0; -#else - _set_errno(0); // reset errno for atol -#endif // !_WIN32 - size = atol( size_p ); - if( errno != 0 ) { - size = SQLSRV_INVALID_SIZE; - } + DIE("type_and_size_calc: size_p is null."); } int max_size = SQL_SERVER_MAX_FIELD_SIZE; @@ -2150,7 +2162,7 @@ void type_and_size_calc( INTERNAL_FUNCTION_PARAMETERS, int type ) // called when the user gives SQLSRV_SQLTYPE_DECIMAL or SQLSRV_SQLTYPE_NUMERIC sql types as the type of the // field. encodes these into a sqlsrv_sqltype structure (see php_sqlsrv.h) -void type_and_precision_calc( INTERNAL_FUNCTION_PARAMETERS, int type ) +void type_and_precision_calc( INTERNAL_FUNCTION_PARAMETERS, _In_ int type ) { zend_long prec = SQLSRV_INVALID_PRECISION; zend_long scale = SQLSRV_INVALID_SCALE; @@ -2185,7 +2197,7 @@ void type_and_precision_calc( INTERNAL_FUNCTION_PARAMETERS, int type ) // common code for SQLSRV_PHPTYPE_STREAM and SQLSRV_PHPTYPE_STRING php types given as parameters. // encodes the type and encoding into a sqlsrv_phptype structure (see php_sqlsrv.h) -void type_and_encoding( INTERNAL_FUNCTION_PARAMETERS, int type ) +void type_and_encoding( INTERNAL_FUNCTION_PARAMETERS, _In_ int type ) { SQLSRV_ASSERT(( type == SQLSRV_PHPTYPE_STREAM || type == SQLSRV_PHPTYPE_STRING ), "type_and_encoding: Invalid type passed." ); diff --git a/source/sqlsrv/template.rc b/source/sqlsrv/template.rc index 1ea88b29..5502389a 100644 --- a/source/sqlsrv/template.rc +++ b/source/sqlsrv/template.rc @@ -3,7 +3,7 @@ // // Contents: Version resource // -// Microsoft Drivers 4.2 for PHP for SQL Server +// Microsoft Drivers 4.3 for PHP for SQL Server // Copyright(c) Microsoft Corporation // All rights reserved. // MIT License diff --git a/source/sqlsrv/util.cpp b/source/sqlsrv/util.cpp index 26d1f68d..47ff0a01 100644 --- a/source/sqlsrv/util.cpp +++ b/source/sqlsrv/util.cpp @@ -5,7 +5,7 @@ // // Comments: Mostly error handling and some type handling // -// Microsoft Drivers 4.2 for PHP for SQL Server +// Microsoft Drivers 4.3 for PHP for SQL Server // Copyright(c) Microsoft Corporation // All rights reserved. // MIT License @@ -34,15 +34,15 @@ char log_msg[ LOG_MSG_SIZE ]; SQLCHAR INTERNAL_FORMAT_ERROR[] = "An internal error occurred. FormatMessage failed writing an error message."; // *** internal functions *** -sqlsrv_error_const* get_error_message( unsigned int sqlsrv_error_code ); +sqlsrv_error_const* get_error_message( _In_ unsigned int sqlsrv_error_code ); -void copy_error_to_zval( zval* error_z, sqlsrv_error_const* error, zval* reported_chain, zval* ignored_chain, - bool warning TSRMLS_DC ); -bool ignore_warning( char* sql_state, int native_code TSRMLS_DC ); -bool handle_errors_and_warnings( sqlsrv_context& ctx, zval* reported_chain, zval* ignored_chain, logging_severity log_severity, - unsigned int sqlsrv_error_code, bool warning, va_list* print_args TSRMLS_DC ); +void copy_error_to_zval( _Inout_ zval* error_z, _In_ sqlsrv_error_const* error, _Inout_ zval* reported_chain, _Inout_ zval* ignored_chain, + _In_ bool warning TSRMLS_DC ); +bool ignore_warning( _In_ char* sql_state, _In_ int native_code TSRMLS_DC ); +bool handle_errors_and_warnings( _Inout_ sqlsrv_context& ctx, _Inout_ zval* reported_chain, _Inout_ zval* ignored_chain, _In_ logging_severity log_severity, + _In_ unsigned int sqlsrv_error_code, _In_ bool warning, _In_opt_ va_list* print_args TSRMLS_DC ); -int sqlsrv_merge_zend_hash_dtor( zval* dest TSRMLS_DC ); +int sqlsrv_merge_zend_hash_dtor( _Inout_ zval* dest TSRMLS_DC ); bool sqlsrv_merge_zend_hash( _Inout_ zval* dest_z, zval const* src_z TSRMLS_DC ); } @@ -382,7 +382,7 @@ ss_error SS_ERRORS[] = { }; // Formats an error message and finally writes it to the php log. -void ss_sqlsrv_log( unsigned int severity TSRMLS_DC, const char* msg, va_list* print_args ) +void ss_sqlsrv_log( _In_ unsigned int severity TSRMLS_DC, _In_opt_ const char* msg, _In_opt_ va_list* print_args ) { if(( severity & SQLSRV_G( log_severity )) && ( SQLSRV_G( current_subsystem ) & SQLSRV_G( log_subsystems ))) { @@ -398,7 +398,7 @@ void ss_sqlsrv_log( unsigned int severity TSRMLS_DC, const char* msg, va_list* p } } -bool ss_error_handler(sqlsrv_context& ctx, unsigned int sqlsrv_error_code, bool warning TSRMLS_DC, va_list* print_args ) +bool ss_error_handler( _Inout_ sqlsrv_context& ctx, _In_ unsigned int sqlsrv_error_code, _In_ bool warning TSRMLS_DC, _In_opt_ va_list* print_args ) { logging_severity severity = SEV_ERROR; if( warning && !SQLSRV_G( warnings_return_as_errors )) { @@ -528,6 +528,7 @@ PHP_FUNCTION( sqlsrv_configure ) } // WarningsReturnAsErrors + SQLSRV_ASSERT( option[option_len] == '\0', "sqlsrv_configure: option was not null terminated." ); if( !stricmp( option, INI_WARNINGS_RETURN_AS_ERRORS )) { SQLSRV_G( warnings_return_as_errors ) = zend_is_true( value_z ) ? true : false; @@ -645,7 +646,7 @@ PHP_FUNCTION( sqlsrv_get_config ) throw ss::SSException(); } - + SQLSRV_ASSERT( option != NULL, "sqlsrv_get_config: option was null." ); if( !stricmp( option, INI_WARNINGS_RETURN_AS_ERRORS )) { ZVAL_BOOL( return_value, SQLSRV_G( warnings_return_as_errors )); @@ -684,9 +685,7 @@ PHP_FUNCTION( sqlsrv_get_config ) namespace { -// Workaround for name collision problem between the SQLSRV and PDO_SQLSRV drivers on Mac -// Place get_error_message into the anonymous namespace in util.cpp -sqlsrv_error_const* get_error_message( unsigned int sqlsrv_error_code ) { +sqlsrv_error_const* get_error_message( _In_ unsigned int sqlsrv_error_code ) { sqlsrv_error_const *error_message = NULL; @@ -700,8 +699,8 @@ sqlsrv_error_const* get_error_message( unsigned int sqlsrv_error_code ) { return error_message; } -void copy_error_to_zval( zval* error_z, sqlsrv_error_const* error, zval* reported_chain, zval* ignored_chain, - bool warning TSRMLS_DC ) +void copy_error_to_zval( _Inout_ zval* error_z, _In_ sqlsrv_error_const* error, _Inout_ zval* reported_chain, _Inout_ zval* ignored_chain, + _In_ bool warning TSRMLS_DC ) { if( array_init( error_z ) == FAILURE ) { @@ -777,8 +776,8 @@ void copy_error_to_zval( zval* error_z, sqlsrv_error_const* error, zval* reporte } } -bool handle_errors_and_warnings( sqlsrv_context& ctx, zval* reported_chain, zval* ignored_chain, logging_severity log_severity, - unsigned int sqlsrv_error_code, bool warning, va_list* print_args TSRMLS_DC ) +bool handle_errors_and_warnings( _Inout_ sqlsrv_context& ctx, _Inout_ zval* reported_chain, _Inout_ zval* ignored_chain, _In_ logging_severity log_severity, + _In_ unsigned int sqlsrv_error_code, _In_ bool warning, _In_opt_ va_list* print_args TSRMLS_DC ) { bool result = true; bool errors_ignored = false; @@ -865,7 +864,7 @@ bool handle_errors_and_warnings( sqlsrv_context& ctx, zval* reported_chain, zval // return whether or not a warning should be ignored or returned as an error if WarningsReturnAsErrors is true // see RINIT in init.cpp for information about which errors are ignored. -bool ignore_warning( char* sql_state, int native_code TSRMLS_DC ) +bool ignore_warning( _In_ char* sql_state, _In_ int native_code TSRMLS_DC ) { zend_ulong index = -1; zend_string* key = NULL; @@ -886,7 +885,7 @@ bool ignore_warning( char* sql_state, int native_code TSRMLS_DC ) return false; } -int sqlsrv_merge_zend_hash_dtor( zval* dest TSRMLS_DC ) +int sqlsrv_merge_zend_hash_dtor( _Inout_ zval* dest TSRMLS_DC ) { zval_ptr_dtor( dest ); return ZEND_HASH_APPLY_REMOVE; diff --git a/test/bvt/pdo_sqlsrv/msdn_pdo_getAttribute.phpt b/test/bvt/pdo_sqlsrv/msdn_pdo_getAttribute.phpt index a134c797..54aa2e80 100644 --- a/test/bvt/pdo_sqlsrv/msdn_pdo_getAttribute.phpt +++ b/test/bvt/pdo_sqlsrv/msdn_pdo_getAttribute.phpt @@ -35,5 +35,5 @@ Array \[DriverDllName\] => msodbcsql[0-9]{2}\.dll|libmsodbcsql-[0-9]{2}\.[0-9]\.so\.[0-9]\.[0-9] \[DriverODBCVer\] => [0-9]{1,2}\.[0-9]{1,2} \[DriverVer\] => [0-9]{1,2}\.[0-9]{1,2}\.[0-9]{4} - \[ExtensionVer\] => [0-9]\.[0-9]\.[0-9](\-((rc)|(preview))(\.[0-9]+)?)?(\+[0-9]+)? + \[ExtensionVer\] => [0-9].[0-9]\.[0-9](-(RC[0-9]?|preview))?(\.[0-9]+)?(\+[0-9]+)? \) \ No newline at end of file diff --git a/test/bvt/sqlsrv/msdn_sqlsrv_client_info.phpt b/test/bvt/sqlsrv/msdn_sqlsrv_client_info.phpt index b0d42566..d9586d8d 100644 --- a/test/bvt/sqlsrv/msdn_sqlsrv_client_info.phpt +++ b/test/bvt/sqlsrv/msdn_sqlsrv_client_info.phpt @@ -32,4 +32,4 @@ sqlsrv_close( $conn); DriverDllName: msodbcsql[0-9]{2}\.dll|libmsodbcsql-[0-9]{2}\.[0-9]\.so\.[0-9]\.[0-9] DriverODBCVer: [0-9]{1,2}\.[0-9]{1,2} DriverVer: [0-9]{1,2}\.[0-9]{1,2}\.[0-9]{4} -ExtensionVer: [0-9]\.[0-9]\.[0-9](\-((rc)|(preview))(\.[0-9]+)?)?(\+[0-9]+)? \ No newline at end of file +ExtensionVer: [0-9].[0-9]\.[0-9](-(RC[0-9]?|preview))?(\.[0-9]+)?(\+[0-9]+)? \ No newline at end of file diff --git a/test/output.py b/test/functional/output.py similarity index 100% rename from test/output.py rename to test/functional/output.py diff --git a/test/functional/pdo_sqlsrv/MsCommon.inc b/test/functional/pdo_sqlsrv/MsCommon.inc new file mode 100644 index 00000000..d1ec0c43 --- /dev/null +++ b/test/functional/pdo_sqlsrv/MsCommon.inc @@ -0,0 +1,1539 @@ +setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); + create_and_insert_table1($conn); + create_and_insert_table2($conn); + return $conn; + } + + catch( PDOException $e ) + { + var_dump( $e ); + exit; + } + + catch(Exception $e) + { + var_dump( $e ); + exit; + } +} + +// Create and insert +function create_and_insert_table1( $conn ) +{ + global $string_col, $date_col, $large_string_col, $xml_col, $binary_col, $int_col, $decimal_col, $guid_col, $null_col, $comma, $closing_brace, $table1; + + try + { + $create_query = + + "IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'" . $table1 . "') AND type in (N'U')) + DROP TABLE " . $table1 . + + " CREATE TABLE [dbo].[" . $table1 . "]( + [IntCol] [int] NULL, + [CharCol] [char](10) NULL, + [NCharCol] [nchar](10) NULL, + [DateTimeCol] [datetime] NULL, + [VarcharCol] [varchar](50) NULL, + [NVarCharCol] [nvarchar](50) NULL, + [FloatCol] [float] NULL, + [XmlCol] [xml] NULL + ) ON [PRIMARY] + "; + + $conn->query( $create_query ); + + for ($i = 0 ; $i <= 1; ++ $i) + { + $insert_query = + "INSERT INTO PDO_Types_1 VALUES (". + $int_col[$i] . $comma . + $string_col[$i] . $comma . + $string_col[$i] . $comma . + "Convert(datetime, ". $date_col[$i] . ")" . $comma . + $string_col[$i] . $comma . + $string_col[$i] . $comma . + $decimal_col[$i] . $comma . + $xml_col[$i] . + ")"; + + $conn->query ( $insert_query ); + } + } + catch(Exception $e) + { + var_dump( $e); + exit; + } +} + +function create_and_insert_table2( $conn ) +{ + try + { + //Timestamp is not present. + //VARIANT is not supported. + global $string_col, $date_col, $large_string_col, $xml_col, $binary_col, $int_col, $decimal_col, $guid_col, $null_col, $comma, $closing_brace, $table1, $table2; + + $create_query = + "IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'".$table2."') AND type in (N'U')) DROP TABLE " . $table2 . + + " CREATE TABLE " .$table2 . " ( + [BigIntCol] [bigint] NULL, + [BinaryCol] [binary](5) NULL, + [BitCol] [bit] NULL, + [CharCol] [char](10) NULL, + [DateCol] [date] NULL, + [DateTimeCol] [datetime] NULL, + [DateTime2Col] [datetime2](7) NULL, + [DTOffsetCol] [datetimeoffset](7) NULL, + [DecimalCol] [decimal](18, 0) NULL, + [FloatCol] [float] NULL, + [ImageCol] [image] NULL, + [IntCol] [int] NULL, + [MoneyCol] [money] NULL, + [NCharCol] [nchar](10) NULL, + [NTextCol] [ntext] NULL, + [NumCol] [numeric](18, 0) NULL, + [NVarCharCol] [nvarchar](50) NULL, + [NVarCharMaxCol] [nvarchar](max) NULL, + [RealCol] [real] NULL, + [SmallDTCol] [smalldatetime] NULL, + [SmallIntCol] [smallint] NULL, + [SmallMoneyCol] [smallmoney] NULL, + [TextCol] [text] NULL, + [TimeCol] [time](7) NULL, + [TinyIntCol] [tinyint] NULL, + [Guidcol] [uniqueidentifier] NULL, + [VarbinaryCol] [varbinary](50) NULL, + [VarbinaryMaxCol] [varbinary](max) NULL, + [VarcharCol] [varchar](50) NULL, + [VarcharMaxCol] [varchar](max) NULL, + [XmlCol] [xml] NULL + ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] + + "; + + $stmt = $conn->query( $create_query ); + + for ($i =0; $i<= 0 ; ++ $i) + { + $insert_query = + + " INSERT INTO " .$table2 . " VALUES (". + $int_col[$i] . $comma . + $binary_col[$i] . $comma . + "0" . $comma . + $string_col[$i] . $comma . + "Convert(date, ". $date_col[$i] . $closing_brace . + "Convert(datetime, ". $date_col[$i] . $closing_brace . + "Convert(datetime2(7),". $date_col[$i] . $closing_brace . + "Convert(datetimeoffset(7)," . $date_col[$i] . $closing_brace . + $decimal_col[$i] . $comma . + $decimal_col[$i] .$comma . + $binary_col[$i] . $comma . + $int_col[$i] . $comma . + $decimal_col[$i] . $comma . + $string_col[$i]. $comma . + $large_string_col[$i]. $comma. + $int_col[$i]. $comma . + $string_col[$i]. $comma . + $large_string_col[$i]. $comma . + $decimal_col[$i]. $comma . + "Convert(smalldatetime, ". $date_col[$i]. $closing_brace . + $int_col[$i]. $comma . + $decimal_col[$i]. $comma . + $large_string_col[$i]. $comma . + "Convert(time(7), ". $date_col[$i] . $closing_brace . + $int_col[$i] . $comma . + $guid_col[$i] . $comma . + $binary_col[$i] . $comma . + $binary_col[$i] . $comma . + $string_col[$i] . $comma . + $large_string_col[$i] . $comma . + $xml_col[$i] . + ")"; + + $stmt = $conn->query ($insert_query ); + } + + } + catch(Exception $e) + { + var_dump( $e); + exit; + } +} + +function teardown() +{ + // TBD +} + + +function my_print_r( $to_print ) +{ + global $verbose; + if($verbose) + print_r($to_print); +} + + +function TestMode() +{ + $testMode = getenv('PHPT_EXEC'); + return ($testMode ? true : false); +} + +function IsPdoMode() +{ + require 'MsSetup.inc'; + return (($driverType === true) ? true : false); +} + + +function TraceMode() +{ + require 'MsSetup.inc'; + return ((!TestMode() && $traceEnabled) ? true : false); +} + +function IsMarsSupported() +{ + require 'MsSetup.inc'; + return ($marsMode ? true : false); +} + +function IsDaasMode() +{ + require 'MsSetup.inc'; + return ($daasMode ? true : false); +} + +function FatalError($errorMsg) +{ + if (!IsPdoMode()) + { + handle_errors(); + } + die("$errorMsg\n"); +} + +function Trace($msg) +{ + if (TraceMode()) + { + echo $msg; + } +} + +function TraceEx($msg, $exitMode) +{ + if ($exitMode) + { + FatalError($msg); + } + else + { + Trace("$msg\n"); + } +} + +function TraceData($sqlType, $data) +{ + if (TraceMode()) + { + $msg = strtoupper(" $sqlType:"); + echo "$msg\t"; + if (strlen($msg) <= 7) + { + echo "\t"; + } + if (strlen($msg) <= 15) + { + echo "\t"; + } + echo "$data\n" +; + } +} + +function StartTest($testName) +{ + require 'MsSetup.inc'; + + if (TraceMode()) + { + echo "$PhpDriver: starting \"$testName\" test...\n\n"; + } + + if (!extension_loaded(IsPdoMode() ? "pdo" : "sqlsrv")) + { + die("$PhpDriver cannot be loaded."); + } + + // Set timezone + $tz = ini_get('date.timezone'); + if (strcmp($tz, "") == 0) + { + date_default_timezone_set('America/Los_Angeles'); + $tz = date_default_timezone_get(); + } + Trace("Timezone: $tz.\n"); +} + +function EndTest($testName) +{ + require 'MsSetup.inc'; + + if (TraceMode()) + { + echo "\n$PhpDriver: " +; + } + echo "Test \"$testName\" completed successfully.\n" +; +} + + +function Setup() +{ + set_time_limit(0); + + if (IsPdoMode()) + { // PDO setup + } + else + { // PHP setup + sqlsrv_configure('LogSubsystems', SQLSRV_LOG_SYSTEM_ALL); + sqlsrv_configure('LogSeverity', SQLSRV_LOG_SEVERITY_ALL); + sqlsrv_configure('WarningsReturnAsErrors', 1); + } +} + +function Configure($param, $expected) +{ + if (!IsPdoMode()) + { + sqlsrv_configure($param, $expected); + $actual = sqlsrv_get_config($param); + + if ($actual == $expected) + { + Trace("Set configuration parameter $param = $actual.\n"); + } + else + { + die("Failed to set configuration parameter $param = $expected."); + } + } +} + +function GetTempTableName($table = '', $temporary = true) +{ + // A temporary table name with the '#' prefix will be automatically + // dropped once the connection is closed. Otherwise, the caller + // should take care of dropping the temp table afterwards. + + $timestamp = round(microtime(true)*1000); + + $prefix = ''; + if ($temporary) + $prefix = '#'; + + if (strlen($table) == 0) + $table = 'php_test_table'; + + return $prefix . $table . '_' . $timestamp; +} + +function GetTempProcName($proc = '', $temporary = true) +{ + // A temporary stored procedure name with the '#' prefix will be + // automatically dropped once the connection is closed. Otherwise, + // the caller should take care of dropping the temp procedure afterwards. + + $timestamp = round(microtime(true)*1000); + + $prefix = ''; + if ($temporary) + $prefix = '#'; + + if (strlen($proc) == 0) + $proc = 'php_test_proc'; + + return $prefix . $proc . '_' . $timestamp; +} + +function PDOConnect($className, $serverName, $user, $pwd, $exitMode) +{ + require 'MsSetup.inc'; + $conn = null; + + try + { + // simply use $databaseName from MsSetup.inc to facilitate testing in Azure, + // which does not support switching databases + $conn = new $className("sqlsrv:Server=$serverName;Database=$databaseName", $user, $pwd, $connectionOptions); + $conn->setAttribute(PDO::SQLSRV_ATTR_ENCODING, PDO::SQLSRV_ENCODING_SYSTEM); + } + catch (PDOException $e) + { + $conn = null; + TraceEx("\nFailed to connect to $serverName: ".$e->getMessage(), $exitMode); + } + + return ($conn); +} + + +function ExecuteQuery($conn, $tsql) +{ + $stmt = null; + + if (IsPdoMode()) + { // PDO + try + { + $stmt = $conn->query($tsql); + } + catch (PDOException $e) + { + $stmt = null; + FatalError("Query execution failed for $tsql: ".$e->getMessage()); + } + } + else + { // PHP + $stmt = sqlsrv_query($conn, $tsql); + if ($stmt === false) + { + FatalError("Query execution failed for $tsql"); + } + } + return ($stmt); +} + + +function PrepareQuery($conn, $tsql) +{ + $stmt = null; + + if (IsPdoMode()) + { // PDO + try + { + $stmt = $conn->prepare($tsql); + } + catch (PDOException $e) + { + $stmt = null; + FatalError("Query preparation failed for $tsql: ".$e->getMessage()); + } + } + else + { // PHP + $stmt = sqlsrv_prepare($conn, $tsql); + if ($stmt === false) + { + FatalError("Query preparation failed for $tsql"); + } + } + + return ($stmt); +} + + +function ExecuteQueryEx($conn, $tsql, $modeDirect) +{ + $stmt = null; + + if ($modeDirect) + { // direct execution + if (IsPdoMode()) + { // PDO + try + { + $stmt = $conn->query($tsql); + } + catch (PDOException $e) + { + $stmt = null; + } + } + else + { // PHP + $stmt = sqlsrv_query($conn, $tsql); + } + } + else + { + $stmt = PrepareQuery($conn, $tsql); + if (IsPdoMode()) + { + $stmt->execute(); + } + else + { + sqlsrv_execute($stmt); + } + } + + return ($stmt); +} + + +function GetSqlType($k) +{ + switch ($k) + { + case 1: return ("int"); + case 2: return ("tinyint"); + case 3: return ("smallint"); + case 4: return ("bigint"); + case 5: return ("bit"); + case 6: return ("float"); + case 7: return ("real"); + case 8: return ("decimal(28,4)"); + case 9: return ("numeric(32,4)"); + case 10: return ("money"); + case 11: return ("smallmoney"); + case 12: return ("char(512)"); + case 13: return ("varchar(512)"); + case 14: return ("varchar(max)"); + case 15: return ("nchar(512)"); + case 16: return ("nvarchar(512)"); + case 17: return ("nvarchar(max)"); + case 18: return ("text"); + case 19: return ("ntext"); + case 20: return ("binary(512)"); + case 21: return ("varbinary(512)"); + case 22: return ("varbinary(max)"); + case 23: return ("image"); + case 24: return ("uniqueidentifier"); + case 25: return ("datetime"); + case 26: return ("smalldatetime"); + case 27: return ("timestamp"); + case 28: return ("xml"); + default: break; + } + return ("udt"); +} + +function GetDriverType($k, $dataSize) +{ + switch ($k) + { + case 1: return (SQLSRV_SQLTYPE_INT); + case 2: return (SQLSRV_SQLTYPE_TINYINT); + case 3: return (SQLSRV_SQLTYPE_SMALLINT); + case 4: return (SQLSRV_SQLTYPE_BIGINT); + case 5: return (SQLSRV_SQLTYPE_BIT); + case 6: return (SQLSRV_SQLTYPE_FLOAT); + case 7: return (SQLSRV_SQLTYPE_REAL); + case 8: return (SQLSRV_SQLTYPE_DECIMAL(28, 4)); + case 9: return (SQLSRV_SQLTYPE_NUMERIC(32, 4)); + case 10: return (SQLSRV_SQLTYPE_MONEY); + case 11: return (SQLSRV_SQLTYPE_SMALLMONEY); + case 12: return (SQLSRV_SQLTYPE_CHAR($dataSize)); + case 13: return (SQLSRV_SQLTYPE_VARCHAR($dataSize)); + case 14: return (SQLSRV_SQLTYPE_VARCHAR('max')); + case 15: return (SQLSRV_SQLTYPE_NCHAR($dataSize)); + case 16: return (SQLSRV_SQLTYPE_NVARCHAR($dataSize)); + case 17: return (SQLSRV_SQLTYPE_NVARCHAR('max')); + case 18: return (SQLSRV_SQLTYPE_TEXT); + case 19: return (SQLSRV_SQLTYPE_NTEXT); + case 20: return (SQLSRV_SQLTYPE_BINARY($dataSize)); + case 21: return (SQLSRV_SQLTYPE_VARBINARY($dataSize)); + case 22: return (SQLSRV_SQLTYPE_VARBINARY('max')); + case 23: return (SQLSRV_SQLTYPE_IMAGE); + case 24: return (SQLSRV_SQLTYPE_UNIQUEIDENTIFIER); + case 25: return (SQLSRV_SQLTYPE_DATETIME); + case 26: return (SQLSRV_SQLTYPE_SMALLDATETIME); + case 27: return (SQLSRV_SQLTYPE_TIMESTAMP); + case 28: return (SQLSRV_SQLTYPE_XML); + default: break; + } + return (SQLSRV_SQLTYPE_UDT); +} + +function IsStreamable($k) +{ + switch ($k) + { + case 12: return (true); // nchar(512) + case 13: return (true); // varchar(512) + case 14: return (true); // varchar(max) + case 15: return (true); // nchar(512) + case 16: return (true); // nvarchar(512) + case 17: return (true); // nvarchar(max) + case 18: return (true); // text + case 19: return (true); // ntext + case 20: return (true); // binary + case 21: return (true); // varbinary(512) + case 22: return (true); // varbinary(max) + case 23: return (true); // image + case 28: return (true); // xml + default: break; + } + return (false); +} + +function IsNumeric($k) +{ + switch ($k) + { + case 1: return (true); // int + case 2: return (true); // tinyint + case 3: return (true); // smallint + case 4: return (true); // bigint + case 5: return (true); // bit + case 6: return (true); // float + case 7: return (true); // real + case 8: return (true); // decimal(28,4) + case 9: return (true); // numeric(32,4) + case 10: return (true); // money + case 11: return (true); // smallmoney + default: break; + } + return (false); +} + +function IsChar($k) +{ + switch ($k) + { + case 12: return (true); // nchar(512) + case 13: return (true); // varchar(512) + case 14: return (true); // varchar(max) + case 15: return (true); // nchar(512) + case 16: return (true); // nvarchar(512) + case 17: return (true); // nvarchar(max) + case 18: return (true); // text + case 19: return (true); // ntext + case 28: return (true); // xml + default: break; + } + return (false); +} + +function IsBinary($k) +{ + switch ($k) + { + case 20: return (true); // binary + case 21: return (true); // varbinary(512) + case 22: return (true); // varbinary(max) + case 23: return (true); // image + default: break; + } + return (false); +} + +function IsDateTime($k) +{ + switch ($k) + { + case 25: return (true); // datetime + case 26: return (true); // smalldatetime + case 27: return (true); // timestamp + default: break; + } + return (false); +} + +function IsUnicode($k) +{ + switch ($k) + { + case 15: return (true); // nchar(512) + case 16: return (true); // nvarchar(512) + case 17: return (true); // nvarchar(max) + case 19: return (true); // ntext + default: break; + } + return (false); +} + +function IsUpdatable($k) +{ + switch ($k) + { + case 27: return (false); // timestamp + default: break; + } + return (true); +} + +function IsLiteral($k) +{ + switch ($k) + { + case 12: return (true); // nchar(512) + case 13: return (true); // varchar(512) + case 14: return (true); // varchar(max) + case 15: return (true); // nchar(512) + case 16: return (true); // nvarchar(512) + case 17: return (true); // nvarchar(max) + case 18: return (true); // text + case 19: return (true); // ntext + case 24: return (true); // uniqueidentifier + case 25: return (true); // datetime + case 26: return (true); // smalldatetime + case 28: return (true); // xml + default: break; + } + return (false); +} + +function GetMetadata($k, $info) +{ + if (strcasecmp($info, 'Name') == 0) + { + return (getColName($k)); + } + if (strcasecmp($info, 'Size') == 0) + { + return (getColSize($k)); + } + if (strcasecmp($info, 'Precision') == 0) + { + return (getColPrecision($k)); + } + if (strcasecmp($info, 'Scale') == 0) + { + return (getColScale($k)); + } + if (strcasecmp($info, 'Nullable') == 0) + { + return (getColNullable($k)); + } + return (""); +} + +function GetColName($k) +{ + switch ($k) + { + case 1: return ("c1_int"); + case 2: return ("c2_tinyint"); + case 3: return ("c3_smallint"); + case 4: return ("c4_bigint"); + case 5: return ("c5_bit"); + case 6: return ("c6_float"); + case 7: return ("c7_real"); + case 8: return ("c8_decimal"); + case 9: return ("c9_numeric"); + case 10: return ("c10_money"); + case 11: return ("c11_smallmoney"); + case 12: return ("c12_char"); + case 13: return ("c13_varchar"); + case 14: return ("c14_varchar_max"); + case 15: return ("c15_nchar"); + case 16: return ("c16_nvarchar"); + case 17: return ("c17_nvarchar_max"); + case 18: return ("c18_text"); + case 19: return ("c19_ntext"); + case 20: return ("c20_binary"); + case 21: return ("c21_varbinary"); + case 22: return ("c22_varbinary_max"); + case 23: return ("c23_image"); + case 24: return ("c24_uniqueidentifier"); + case 25: return ("c25_datetime"); + case 26: return ("c26_smalldatetime"); + case 27: return ("c27_timestamp"); + case 28: return ("c28_xml"); + default: break; + } + return (""); +} + + +function GetColSize($k) +{ + switch ($k) + { + case 12: return ("512"); + case 13: return ("512"); + case 14: return ("0"); + case 15: return ("512"); + case 16: return ("512"); + case 17: return ("0"); + case 18: return ("2147483647"); + case 19: return ("1073741823"); + case 20: return ("512"); + case 21: return ("512"); + case 22: return ("0)"); + case 23: return ("2147483647"); + case 24: return ("36"); + //case 25: return ("23"); + //case 26: return ("16"); + case 27: return ("8"); + case 28: return ("0"); + default: break; + } + return (""); +} + +function GetColPrecision($k) +{ + switch ($k) + { + case 1: return ("10"); + case 2: return ("3"); + case 3: return ("5"); + case 4: return ("19"); + case 5: return ("1"); + case 6: return ("53"); + case 7: return ("24"); + case 8: return ("28"); + case 9: return ("32"); + case 10: return ("19"); + case 11: return ("10"); + case 25: return ("23"); + case 26: return ("16"); + default: break; + } + return (""); +} + +function GetColScale($k) +{ + switch ($k) + { + case 8: return ("4"); + case 9: return ("4"); + case 10: return ("4"); + case 11: return ("4"); + case 25: return ("3"); + case 26: return ("0"); + default: break; + } + return (""); +} + +function GetColNullable($k) +{ + return (IsUpdatable($k) ? "1" : "0"); +} + +function GetSampleData($k) +{ + switch ($k) + { + case 1: // int + return ("123456789"); + + case 2: // tinyint + return ("234"); + + case 3: // smallint + return ("5678"); + + case 4: // bigint + return ("123456789987654321"); + + + case 5: // bit + return ("1"); + + case 6: // float + return ("123.456"); + + case 7: // real + return ("789.012"); + + case 8: // decimal + return ("12.34"); + + case 9: // numeric + return ("567.89"); + + case 10:// money + return ("321.54"); + + case 11:// smallmoney + return ("67.89"); + + case 12:// char + case 15:// nchar + return ("The quick brown fox jumps over the lazy dog"); + + case 13:// varchar + case 16:// nvarchar + return ("The quick brown fox jumps over the lazy dog 9876543210"); + + case 14:// varchar(max) + case 17:// nvarchar(max) + return ("The quick brown fox jumps over the lazy dog 0123456789"); + + case 18:// text + case 19:// ntext + return ("0123456789 The quick brown fox jumps over the lazy dog"); + + case 20:// binary + return ("0123456789"); + + case 21:// varbinary + return ("01234567899876543210"); + + case 22:// varbinary(max) + return ("98765432100123456789"); + + case 23:// image + return ("01234567899876543210"); + + case 24:// uniqueidentifier + return ("12345678-9012-3456-7890-123456789012"); + + case 25:// datetime + case 26:// smalldatetime + return (date("Y-m-d")); + + case 27:// timestamp + return (null); + + case 28:// xml + return ("The quick brown fox jumps over the lazy dog0123456789"); + + default: + break; + } + + return (null); +} + + +function CreateDB($conn, $dbName) +{ + Trace("Creating database $dbName ..."); + $tsql = "CREATE DATABASE [$dbName]"; + DropDB($conn, $dbName); + + if (IsPdoMode()) + { + $outcome = $conn->exec($tsql); + if ($outcome === false) + { + FatalError("Failed to create test database: $dbName"); + } + } + else + { + $stmt = sqlsrv_query($conn, $tsql); + if ($stmt === false) + { + FatalError("Failed to create test database: $dbName"); + } + sqlsrv_free_stmt($stmt); + } + Trace(" completed successfully.\n"); +} + +function DropDB($conn, $dbName) +{ + $tsql = "DROP DATABASE [$dbName]"; + if (IsPdoMode()) + { + $mode = $conn->getAttribute(PDO::ATTR_ERRMODE); + + $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT); + + $outcome = $conn->exec($tsql); + $conn->setAttribute(PDO::ATTR_ERRMODE, $mode); + + } + else + { + $stmt = sqlsrv_query($conn, $tsql); + if ($stmt === false) + { + } + else + { + sqlsrv_free_stmt($stmt); + } + } +} + + +function CreateTable($conn, $tableName) +{ + $dataType = "[c1_int] int, [c2_tinyint] tinyint, [c3_smallint] smallint, [c4_bigint] bigint, [c5_bit] bit, [c6_float] float, [c7_real] real, [c8_decimal] decimal(28,4), [c9_numeric] numeric(32,4), [c10_money] money, [c11_smallmoney] smallmoney, [c12_char] char(512), [c13_varchar] varchar(512), [c14_varchar_max] varchar(max), [c15_nchar] nchar(512), [c16_nvarchar] nvarchar(512), [c17_nvarchar_max] nvarchar(max), [c18_text] text, [c19_ntext] ntext, [c20_binary] binary(512), [c21_varbinary] varbinary(512), [c22_varbinary_max] varbinary(max), [c23_image] image, [c24_uniqueidentifier] uniqueidentifier, [c25_datetime] datetime, [c26_smalldatetime] smalldatetime, [c27_timestamp] timestamp, [c28_xml] xml"; + CreateTableEx($conn, $tableName, $dataType); + if (IsDaasMode()) + { + $colIndex = "[c1_int], [c2_tinyint], [c3_smallint], [c4_bigint], [c5_bit], [c6_float], [c7_real], [c8_decimal], [c9_numeric]"; + CreateTableIndex($conn, $tableName, $colIndex); + } +} + +function CreateTableEx($conn, $tableName, $dataType) +{ + Trace("Creating table $tableName ..."); + $tsql = "CREATE TABLE [$tableName] ($dataType)"; + DropTable($conn,$tableName); + + if (IsPdoMode()) + { + $outcome = $conn->exec($tsql); + if ($outcome === false) + { + FatalError("Failed to create test table: $tsql"); + } + } + else + { + $stmt = sqlsrv_query($conn, $tsql); + if ($stmt === false) + { + FatalError("Failed to create test table: $tsql"); + } + sqlsrv_free_stmt($stmt); + } + Trace(" completed successfully.\n"); +} + + +function CreateTableIndex($conn, $tableName, $colIndex) +{ + require 'MsSetup.inc'; + CreateTableIndexEx($conn, $tableName, $tableIndex, $colIndex); +} + + +function CreateTableIndexEx($conn, $tableName, $tableIndex, $colIndex) +{ + Trace("Creating table index for $tableName ..."); + $sqlIndex = "CREATE CLUSTERED INDEX [$tableIndex] ON [$tableName]($colIndex)"; + if (IsPdoMode()) + { + $outcome = $conn->exec($sqlIndex); + if ($outcome === false) + { + FatalError("Failed to create clustered index for test table: $sqlIndex"); + } + } + else + { + $stmt = sqlsrv_query($conn, $sqlIndex); + if ($stmt === false) + { + FatalError("Failed to create clustered index for test table: $sqlIndex"); + } + sqlsrv_free_stmt($stmt); + } + Trace(" completed successfully.\n"); +} + +function CreateUniqueIndex($conn, $tableName, $colIndex) +{ + require 'MsSetup.inc'; + CreateUniqueIndexEx($conn, $tableName, $tableIndex, $colIndex); +} + +function CreateUniqueIndexEx($conn, $tableName, $tableIndex, $colIndex) +{ + Trace("Creating unique table index for $tableName ..."); + $sqlIndex = "CREATE UNIQUE INDEX [$tableIndex] ON [$tableName]($colIndex)"; + if (IsPdoMode()) + { + $outcome = $conn->exec($sqlIndex); + if ($outcome === false) + { + FatalError("Failed to create unique index for test table: $sqlIndex"); + } + } + else + { + $stmt = sqlsrv_query($conn, $sqlIndex); + if ($stmt === false) + { + FatalError("Failed to create unique index for test table: $sqlIndex"); + } + sqlsrv_free_stmt($stmt); + } + Trace(" completed successfully.\n"); +} + +function DropTable($conn, $tableName) +{ + $tsql = "DROP TABLE [$tableName]"; + if (IsPdoMode()) + { + $mode = $conn->getAttribute(PDO::ATTR_ERRMODE); + + $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT); + + $outcome = $conn->exec($tsql); + $conn->setAttribute(PDO::ATTR_ERRMODE, $mode); + + } + else + { + $stmt = sqlsrv_query($conn, $tsql); + if ($stmt === false) + { + } + else + { + sqlsrv_free_stmt($stmt); + } + } +} + + +function SelectFromTable($conn, $tableName) +{ + return (SelectFromTableEx($conn, $tableName, null)); +} + +function SelectFromTableEx($conn, $tableName, $cond) +{ + if (($cond != null) && (strlen($cond) > 0)) + { + return (SelectQuery($conn, "SELECT * FROM [$tableName] WHERE $cond")); + } + else + { + return (SelectQuery($conn, "SELECT * FROM [$tableName]")); + } +} + +function SelectQuery($conn, $query) +{ + return (SelectQueryEx($conn, $query, null)); +} + +function SelectQueryEx($conn, $query, $options) +{ + $numFields = 0; + if (IsPDOMode()) + { + $stmt = ExecuteQuery($conn, $query); + $numFields = $stmt->columnCount(); + } + else + { + if ($options != null) + { + $stmt = sqlsrv_query($conn, $query, null, $options); + } + else + { + $stmt = sqlsrv_query($conn, $query); + } + if ($stmt === false) + { + FatalError("Failed to query test table"); + } + + $numFields = sqlsrv_num_fields($stmt); + } + if ($numFields <= 0) + { + die("Unexpected number of fields: .$numFields"); + } + return ($stmt); +} + +function RowCount($stmt) +{ + $rowCount = 0; + if (IsPdoMode()) + { + while ($stmt->fetchColumn()) + { + $rowCount++; + } + } + else + { + while (sqlsrv_fetch($stmt)) + { + $rowCount++; + } + } + return ($rowCount); +} + + +function NumRows($conn, $tableName) +{ + $stmt = SelectFromTable($conn, $tableName); + $rowCount = RowCount($stmt); + if (IsPdoMode()) + { + $stmt = null; + } + else + { + sqlsrv_free_stmt($stmt); + } + + return ($rowCount); +} + + +function InsertQuery($tableName) +{ + include_once 'MsData_UTF8.inc'; + return (InsertQueryExUTF8($tableName, rand(1, 20))); +} + +function InsertRows($conn, $tableName, $rowCount) +{ + Trace("Inserting $rowCount rows into $tableName ..."); + $count = 0; + for($i = 0; $i < $rowCount; $i++) + { + if (InsertRow($conn, $tableName)) + { + $count++; + } + } + Trace(" completed successfully.\n"); + if ($count != $rowCount) + { + die("$count rows inserted instead of $rowCount\n"); + } + return ($count); +} + +function InsertRowsByRange($conn, $tableName, $minIndex, $maxIndex) +{ + $rowCount = $maxIndex - $minIndex + 1; + if ($rowCount > 0) + { + Trace("Inserting $rowCount rows into $tableName ..."); + for($i = $minIndex; $i <= $maxIndex; $i++) + { + InsertRowByIndex($conn, $tableName, $i); + } + Trace(" completed successfully.\n"); + } +} + +function InsertRow($conn, $tableName) +{ + $tsql = InsertQuery($tableName); + $stmt = null; + + if (IsPdoMode()) + { + $stmt = $conn->exec($tsql); + } + else + { + $stmt = sqlsrv_query($conn, $tsql); + } + return (InsertCheck($stmt)); +} + +function InsertRowEx($conn, $tableName, $dataCols, $dataValues, $dataOptions) +{ + $tsql = "INSERT INTO [$tableName] ($dataCols) VALUES ($dataValues)"; + $stmt = null; + + if (IsPdoMode()) + { + $stmt = $conn->exec($tsql); + } + else + { + $stmt = sqlsrv_query($conn, $tsql, $dataOptions); + } + return (InsertCheck($stmt)); +} + +function InsertRowByIndex($conn, $tableName, $index) +{ + $tsql = InsertQueryEx($tableName, $index); + $stmt = null; + + if (IsPdoMode()) + { + $stmt = $conn->exec($tsql); + } + else + { + $stmt = sqlsrv_query($conn, $tsql); + } + return (InsertCheck($stmt)); +} + +function InsertStream($conn, $tableName, $dataCols, $dataValues, $dataOptions, $atExec) +{ + $tsql = "INSERT INTO [$tableName] ($dataCols) VALUES ($dataValues)"; + $stmt = null; + + if (IsPdoMode()) + { + $stmt = $conn->exec($tsql); + } + else + { + if ($atExec) + { + $stmt = sqlsrv_query($conn, $tsql, $dataOptions, array('SendStreamParamsAtExec' => 1)); + } + else + { + $stmt = sqlsrv_query($conn, $tsql, $dataOptions); + if ($stmt) + { + while (sqlsrv_send_stream_data($stmt)) + { + } + } + } + } + + return (InsertCheck($stmt)); +} + + +function InsertCheck($stmt) +{ + $numRows = 0; + + if ($stmt === false) + { + FatalError("Failed to insert row into test table"); + } + if (IsPdoMode()) + { + $numRows = $stmt; + } + else + { + $numRows = sqlsrv_rows_affected($stmt); + sqlsrv_free_stmt($stmt); + } + if ($numRows != 1) + { + die("Unexpected row count at insert: ".$numRows); + } + return (true); +} + +function GetInsertData($rowIndex, $colIndex, $skip) +{ + $query = InsertQueryEx("TestTable", $rowIndex); + $data = strstr($query, "(("); + $pos = 1; + if ($data === false) + { + die("Failed to retrieve data on row $rowIndex"); + } + $data = substr($data, 2); + + while ($pos < ($colIndex - $skip)) + { + $data = strstr($data, ", ("); + $pos++; + if ($data === false) + { + die("Failed to retrieve data on row $rowIndex, column $pos"); + } + $data = substr($data, 3); + } + $pos = strpos($data, ")"); + if ($pos === false) + { + die("Failed to isolate data on row $rowIndex, column $pos"); + } + $data = substr($data, 0, $pos); + if (strcasecmp($data, "null") == 0) + { + $data = ""; + } + if (IsUnicode($colIndex)) + { // N'data' + $data = substr($data, 2, strlen($data) - 3); + } + else if (IsLiteral($colIndex)) + { // 'data' + $data = substr($data, 1, strlen($data) - 2); + } + else if (IsBinary($colIndex)) + { // 0xdata + $data = substr($data, 2); + } + return (trim($data)); +} + +function CreateProc($conn, $procName, $procArgs, $procCode) +{ + DropProc($conn,$procName); + + if (!IsPdoMode()) + { + $stmt = sqlsrv_query($conn, "CREATE PROC [$procName] ($procArgs) AS BEGIN $procCode END"); + if ($stmt === false) + FatalError("Failed to create test procedure"); + sqlsrv_free_stmt($stmt); + } + else + { + $stmt = $conn->query("CREATE PROC [$procName] ($procArgs) AS BEGIN $procCode END"); + } +} + +function DropProc($conn, $procName) +{ + if (!IsPdoMode()) + { + $stmt = sqlsrv_query($conn, "DROP PROC [$procName]"); + sqlsrv_free_stmt($stmt); + } + else + { + + $query = "IF OBJECT_ID('[$procName]', 'P') IS NOT NULL DROP PROCEDURE [$procName]"; + $stmt = $conn->query($query); + } +} + +function CallProc($conn, $procName, $procArgs, $procValues) +{ + $stmt = CallProcEx($conn, $procName, "", $procArgs, $procValues); + sqlsrv_free_stmt($stmt); +} + +function CallProcEx($conn, $procName, $procPrefix, $procArgs, $procValues) +{ + $stmt = sqlsrv_query($conn, "{ $procPrefix CALL [$procName] ($procArgs)}", $procValues); + if ($stmt === false) + { + FatalError("Failed to call test procedure"); + } + return ($stmt); +} + + +function CreateFunc($conn, $funcName, $funcArgs, $retType, $funcCode) +{ + DropFunc($conn,$funcName); + $stmt = sqlsrv_query($conn, "CREATE FUNCTION [$funcName] ($funcArgs) RETURNS $retType AS BEGIN $funcCode END"); + if ($stmt === false) + { + FatalError("Failed to create test function"); + } + sqlsrv_free_stmt($stmt); +} + +function DropFunc($conn, $funcName) +{ + $stmt = sqlsrv_query($conn, "DROP FUNCTION [$funcName]"); + if ($stmt === false) + { + } + else + { + sqlsrv_free_stmt($stmt); + } +} + + +function CallFunc($conn, $funcName, $funcArgs, $funcValues) +{ + $stmt = sqlsrv_query($conn, "{ ? = CALL [$funcName]($funcArgs)}", $funcValues); + if ($stmt === false) + { + FatalError("Failed to call test function"); + } + sqlsrv_free_stmt($stmt); +} + +function handle_errors() +{ + $errors = sqlsrv_errors(SQLSRV_ERR_ERRORS); + $count = count($errors); + if($count == 0) + { + $errors = sqlsrv_errors(SQLSRV_ERR_ALL); + $count = count($errors); + } + if($count > 0) + { + for($i = 0; $i < $count; $i++) + { + Trace($errors[$i]['message']."\n"); + } + } +} + +function str2hex($dataIn) +{ + $dataOut = ""; + $len = strlen($dataIn); + for ($i = 0; $i < $len; $i++) + { + $ch = strtoupper(substr($dataIn, $i, 1)); + if ($ch == "A") + { + $dataOut = $dataOut."41"; + } + else if ($ch == "B") + { + $dataOut = $dataOut."42"; + } + else if ($ch == "C") + { + $dataOut = $dataOut."43"; + } + else if ($ch == "D") + { + $dataOut = $dataOut."44"; + } + else if ($ch == "E") + { + $dataOut = $dataOut."45"; + } + else if ($ch == "F") + { + $dataOut = $dataOut."46"; + } + else + { + $dataOut = $dataOut."3".$ch; + } + + } + return ($dataOut); +} + +function PhpVersionComponents( &$major, &$minor, &$sub ) +{ + $str_version = phpversion(); + + $major = strtok( $str_version, "." ); + $minor = strtok( "." ); + $sub = strtok( "." ); +} +?> diff --git a/test/pdo_sqlsrv/MsData.inc b/test/functional/pdo_sqlsrv/MsData.inc similarity index 100% rename from test/pdo_sqlsrv/MsData.inc rename to test/functional/pdo_sqlsrv/MsData.inc diff --git a/test/functional/pdo_sqlsrv/MsData_UTF8.inc b/test/functional/pdo_sqlsrv/MsData_UTF8.inc new file mode 100644 index 00000000..6f4fa339 --- /dev/null +++ b/test/functional/pdo_sqlsrv/MsData_UTF8.inc @@ -0,0 +1,101 @@ +ªo~äbhîýÃ~åÜB¢ß©+ü~ßÄAZî>öî~C_<ý@:Oåãã/vÄÃ~bA|Ö/o ª :+Ãœ~äÃ*CuzÃ¥rBîU¢/öß@_zbü/UåörbßoZßo¢ß.ðÖåCvö,bðäðÃAuZ©hbZÖ¢bb£ZaZ>UÃ¥z+ĪOüÄb¢ßîOauö_Ah>BªoCv¢v./:äOÜîoÃýZ*_.îÖðBüî>ãÄÖühaovhv:ýð|v~Ö¢hvã<övÃ~bOäUazÄÖ|ÃÄåAÜÖå~Äã*¢ã¢oo:ᛜ*Ö£z+*Ã+bÃ*b ðÜÖübªO>ÄßðÄã/.Ö'), ('Öý.C+.~a<äã+büa_ b|¢:|.ÃÄ~@ð ª*ZÃz @£+_>~âao|©å.ä/ªßAZ/ý/©ãbboU**©Ã£>îü_bbÜð,@oð¢@:OÃ<£Aî@rÄÄ.>_+©ßåðUîüªð>î/|ÄbªåAÄÖüÃUߣ_u|ÃÄZý,ª<ãã>,ðZußýöãZböãu<ðZuvb:zöäurîAöu,öh,u*b,AA©ª,v©Ö:Üð©O:,©rr:bbaåüýªîCß/ýhååOU.äî©r:ÃhCvAð|:raîa AhêÜ+_öaÜÜßzvoU ZÜãªZÖäÃ|ü| UýuÃ¥_oBÄUhZ©>Ä* :é,uäÃCoÃÃ+ãår.ý¢Üß|ðÖBb@Bh>OB|._vßZoC+UBÄß/Äå+ðäÃåð_Ö_ý|*Ã'), ('¢ý¢oüZ¢+Cß>,|:uö© ¢Är¢.@C@î_,abßåü>Ö,~bü£å¢ãCÃ¥:,Üãß+|Z>rÜâbäA*ã ÃB ßZ<.aBÃBÃ¥~.ub>Ö_uÃUª>ã@zß:AüB|Bbb:ððvräzÃœbBýß |üÖ*ÖOååZZbO@î <:ãuCvöB/a~Ö Ä:Ö_><îbuÖßðOOO¢äb©öüZ~UÖÃbªåz*o/|oã_@ÃAývvÄAzðBÃœ:~ððß*/ä>Üß.zrð.©<¢a B ,¢üÄAÃ¥u:Öüã.Ã/u¢rÃýAÃäªÃb*Z*ßzB/+U@Zã¢,üv b:<ÃœOý/ã.Z*b~@av£Ã~ä¢/ä,A<îöß~ aÖ.ßhuZozðýåßBz©ýv|ýÄ+.Ä¢ªbÃÄb>Aãü zOÃÃ¥b+@vö£|bzÃßî©Uªª£*ÃO_h_/U/öAãÖaÄ_U|Ä £ZÃü._å¢CA+@_bªhÜ£ öuCOZ<ðvªÃouý_bb>@îaovÃœb>~BbßÖ@Ä©U~zöB£©h~ã|,b_.ß>UUª¢oÃ:b©Ä+ä<ãr/|ÃüÜh.äUÃ¥~.r©/AÃUz>ZCAbîäå.öZvBa*ö@ß:b+ã++Ö~ZU,U©Ã¢o ð @£bîUýðö¢<,äÃðuurö©îÃZ>¢¢rãßz.¢,ßO.îvOhvAU/£ä/_v,CÃ¥*Ußð©Ã:£:ã¢î,Bu|î£ß @ðOUãU:îb©|/O@voüUÖuß@Ã..*b_¢ä£¢~ß+/b~b/u_~ßvrÄäßb~£î~@aUÖß>OðZuaöã,oãB,O ývöîhu¢rÄ_výÄaZ*OzÖ|Uzv*Ãœ *zÃýür<~~Ub*ª~äýrÃüAuãCߣܢªbÃý~hßäz>Ã|b@h.AZãÄoÄUC_,ÃC@rî*r|Ã¥>îv>ußÄ_>:oî@b.B>ßb:åã|/O,Ã*Cª++>£¢>Öߢî:oÖ£,>uABC,_CBý© ßzßC+/îbÃœ,ä/î ÄOOaÃBðb©o£Uarãv,£üOð<ßßbÃã|ªC*~rßÃ+ðBU~.Ü£©:C/ÃU>au<Ã,u+,ðaU*/|ßbbu@:*Z.+Öoãh özhzCBhC:,:a_oU b*Bä.buOßoÄßBüu+ubýÄBAz:©ð~ßb:ßhobÄßÖZðåBü@ö, A>obÜ©|ã|+Öh©AªaU|£@ã©Ãðv ÖU£öäî@ãüåÃÃOC_vîAöÄ@|u©Ã©Bðý©,ýßOî r¢>ãªßbÄz_+_ü~Ü£ý|ßOAürrß~äZ>Ãäarubv@BCÃ>>*OZ|ü,Ã¥Ãav*Äzu.zAaüÜuª©+ Ö_@CÃ¥/hÃ@ªAîU¢:,ÖÃ~£<ðßäubCÄÄZÃ>ðurä+¢CãuAÜ¢+,Ãœ+@+:ðbÃäãÄ£îß /üUä@ýA.~ah|Ö.:hr<ßvÃO ßß/r++oÃÄZ>ßb_Öä.Ööð+ + z.Ã>Ob_ªU¢.bBߣA/Z.vU¢,ª:¢,@Ãœvü>/Båüã|¢Ãî|/CÃÖ¢Cîhîz|~㣣bUä<ÃbÃ¥ÃÃ¥,ÜÖBbo.îza <£äOAÃœ<üÃÖÃr/<*Öa CüÖb~v@ý,bÃå©ZãzO.+©:î~ðAh£~ ¢Ä,,~rb~,bª©A,.ußb:+hzð,*äu+ãb:¢ö©Ü* >Bb᎚+Ãœa.>OÃubOrrzÃœabÄý©Ã*ªüÄ+¢bîzü,~._|ª /Äroß,:Ã<:| :+Bhý.ÜßZbÃ¥CßîBߢßÜu,Ävv:~@u@ýåo>|ä~Z/.hßßb,ßB*ðZ£BÃÃ*ðÃCß©,Ã¥|vzoâub>>O+£/~©å:*uªðåårü£Ä h~ý:B@>£:BßuZãÜöü>.ªãª,@ä>Ãœ*¢<îß@öð£BýÃ:B@äObÃœZCýo@åýAbüOäz_ÄZ~oßýa@+bß_AÖ:vä_Ãu~ªu~ããu.aU<>O.Ävßz~:ªåÜ©Cöäu~ßC£oböCba üÖª@C|z+¢bO:_öU¢Ãß|:åýaãrhã B:~rßý¢Ãý+©Bß|uo,*|Äð/UZ@_/üÖÖzüÃývo:ý¢_ |¢ h:© Öã/ã~h,£rz©v|£ðubÃ*ßZbÃ,Ãa,+ßðhbÃ¥Crî <,ªªªöo *ý©¢,v:BäAÄhAC|ÃaäZo¢,::aî~zÖr©B_b+AÃÖ,£ÃöaB>Öz*ãä~Ö©aÄö_rª>©h*©*ªªöÃ_av:¢:©,+övªU<åªð/@+.>@oîý|ª*Ãîo*ªZã zA|b|ov*î/©:b.oB| b>C|£îbb¢bBU¢OAZª,ü ã vßý_Ã¥hZ ÃbßZU*uÖ,©ý@_rU©ß>.ÜßÖhu<ÄUz|BaîÖzzA: ðÃbäaZ* Ãœb| Ö,Ä>@üð|ß@CîOZ£bÖUîru:|ÃÄöÃãåoöOÃU*¢rUß BÃ¥@,~oÃâv|_o*CZßýß~uB©©~ðOööAÃ¥@:|B öoo|Uar¢~,A+Cbßr:rCauäß©üÃߪ+bBªvÃœ*©ãU uîbbOåßßäU©bU:BCb*<~@uªU_Z/C Ãh+rååCoߢßOîð+Äýäoo©vz*©ßaZß_Ã¥/Ã/ßv.h@~oÄaª£vuÄbZý:oÄßÃZvzZÃO¢aý*îO>üC,ðÃßö/r+ZäoÖbZZOܪCühãuîýBa¢z*buBo~_<ðåUbîa/_.~ÃÄOh|+aý|Ãßßã/~bðßð£åÃÃÄãÄååußß+|@Zîhu<äBOAã©CAß>ãb¢¢ÜÃAüCÃœÃî/u o©ðÄ b|éîAÃÃb,+ÖOÖßßUö©ð¢*ý,ZöUîÄ£ßð*Z|rý+b/|o.Ä,ýÃÃ.>îÃvÜÄÄ~z+öÜßü/~:,Ã¥Oªßååu+<ðvazu|ß©aãA.UÃœ ZbÃr*Ö©>ßßZ ýCåÜ|£ZðhbÄ+b£_ÃU¢o*bz,ö+:+/z¢oÃœ|oã_hb<ÖöãrU +hÄrövo£ðUÃÄð,Bvã¢>îößîßý~Oh.,UBo¢a ©u++ýh¢îoßr©,>Buà ,_uîu*BAU@a~_z,ܪ¢UhðßOa£o+>ÖîzA.ãU:BÖaavöîBî~vîZ¢î<ü|.~+uvbý~Z uüoÄbð©ã¢UäüîbBbî:uhaßbä/£BÃ¥>üAé|åð.|ä*öbäÃÃ/©zCuo@+o .îzZ,ãß*£uOZ rO¢ ªäOöü*oýüÜÜZß>z@U@h*Cö~ßî>ü+:|oZ.bAbãÄäÜBÄh@bo AuÖã¢ä¢©ãÃýªß|äa:öaA:C£*Ü©+v,ßbÃœÃOðoÃÃ@.ß,r+äCbuuÄÃ|bhäð|,bö<+ZA¢u䢢à Ã/~UbðZ>©¢hAÃB>êzaªZ©|ö/Coãv.~@+üh:îßývî+ * ~öhA ,zUªC@uªoabü.*îZßBßrÄbüCÜßZßÖu_ß~Ü£ÖªbÃ:|öÃ.h~BüUb:¢Ãߪ CßzU.ãö:U+£Ão©Ü,+£Ö+|ýrÃz|ÃÜðhÃœoz.£¢ªCüUbC¢ ©ývßC¢ uaabÃAz.|aüßa<@>Ãß/Aßu/äî|uß*ãboã::+r>zB*o¢Ö_zªäo<|ýÃ~@ý|ooCß>bÃðßý|AhzO@ âªÃzªü*£åvb:Uð:ßb rZäCåßÄzbãao+<+îî+åã|h:ãO<ä*â|*väzAã@Ãäªzî@£ÄåªB*AbîrÃœbãaö.ü+|/v©î@o b,£AUvuðr:ªUv,~Büb|b|:zAB@oh_£<Ööå|£bßBÃüýbU|ß|ð~BåéÜî/ßrÃßýäýBO<Ä*UäbhöãC|,b©ý*Ahãö<öäÃßßߢßßöZÄÖÄÃU|Bu+|Ö/rOãAr@Ã:ßÜboÄ@ÄýB>.aÖüäÖözBðÃ|üÄãCCäoÖ©U Bbî.u/oroüZAbAzbhîZ:ðb,*,¢î>ÄÖ/ÃœUzäÄ@äåb Ä_~©ÃÜBßßaä+Ãœ,A©|A~@©>,@@ÜÖO~_vaUhr@ß©ÃäßÃîÖ~,<ðßbüãz@©uobhîaðuvÖäh£r>äå ÃÄü~¢öhzã*_|.ÃÃ:ý+Ö@ßãî:£aÃvãÄzOB@~ßâ@BaªO|Ãà o.OrhC*_åß@ö¢uär© Öü©|ä£@ObÃýÃüOÃîåoCb_*r/A<.äZ:ã u>Öýö£aߪãvÃî.ü~©öÜ*b¢ß,ÖU@+U©î¢å£<<.Äöuhz:ÃB<_¢@ãO ÃÃ>Ö:¢ZÃAÃU hv@.ªböauÃœO<*Ä/äbÃC:Ö:Äa© ä©.ußÄuUßhÃ¥:oý_UÃ¥Ã|A,ÃO/¢ |Ãœ|Ã_>ÖvrZ~ýö|ý:¢öC<ý~|.._Ä£ZððZýª@BßbC__äCZBÃœ,zð¢AhÄîߪ+@aÖrÃ¥o@,b,ý vªßb<>ªCUab£ßªðßüÜCª~b_:CUîuüåa+.ý©ArBU.r>h@öB.vUÃ/zZ+Ãrb+öuª,h*aÃUßöåªå@Ä.BöA>aã¢üZ:ÃbAU:üãhaßß*Ãœ>vä~ *b_ß~ö£vAäö,ü/äîzªr~<îÜÖ>î¢ÃO@UhUZ¢rîî>B~Oöür¢ã*>är£©aä:zßZà ðB@¢ßhÃß©ý.CCýzüß|Ã¥bvuzz~U,¢bÃßrAzÃ¥U£ÜåÜz* u_:o,îÄ,/@bðUå©,äuOÃýZuzBªîîbýaur© öABýÃ*Z*Ãü+¢*ü+a|h£*ð hbßýß :>ãÄ||Ã+ÃœU/*Ãö@*Äü_öÃü:B| ,¢åArÃ@öårh©bßUýUzÃZ£ýßß*ß/ä¢>AÃouoB<ÃAÄãÃb rbîÖÃÄÄh,vÃ.ãbÃ+z£ +o,>ã£h@>Zý:îð:ªzðÃOðßî î_Öv.b©,O.©Oß|bC|rrä.ßÜ<+<,:ª<,~Ub~ZååC:ª~Z>UvßÃã~¢Ã~AðBÃœvåð©rÜÃaBðÃüßu©BÖUã@ZuC©£ªAä©ýuh>@ªaOÃœ.ߪbÃœUAªÖß*BÄ~:vª©îüãAðßbÖªä_©ðao.bða|UöÖßbÃœCb¢Aüå>¢vhvbÃß@Uö/r©¢vaUåîßOÖUrÃœ<~_ðÜz¢*ßö<ã¢Ä/@/_~v£Cb£bUhbb Ã¥Aö<~Bv~:¢ßãä©ßo¢ObhaÃ¥CÄ ßZ@£oä:*Äß._+CrîB ªZv,ÃœB£ö~,Uüäýã/UüÖ<+ ÃœAa ðª,ãA+ýðÖub,>.ýrvbBÖö/Ãðåuh¢öZ>U,:OA|Ö*äüðuª,ã: åý_ß|ÄhªOb/rüu*Ä¢uÃÖ£ÃÄ.zhî@r,Ö@übö.|Ãüãîbvzã¢ý©ÃÃ|ý|räOvh@/ߢ.ÃœzðUÃ¥Zðoöväã|.,|Ãhuã<ãÖüÜuÖo.O_av©>að+B+Ö~¢ÃÃ*ZÜå~ßZ~ßðö_ö<©_ÃœÃÃœÃã~îî,¢zbãbîrAv.öývã*U.<Ã_:üî.ãüãäaäÖ+ä<ö@UÃÄAÃ>ÃbÃ|>Ã¥.<.BO+ð£,¢aCb*A,©~Cßîãý©ÜÃßüZäÃZ:ü/@/©O>_zC¢Ã~ý,:Z,h/Äü|>Öz>_ü+_ðãbî@üý,¢UªÃ+öOÄ.>ý<_ãÖýäAÃ*Ãö~ð~Ãaöî<ö ,Öß:+ãCßhÃœh<+b+åîbb>Z£Ä©©©oÃöUßö|©BßaZªAîåuîßB|@zCAß//bÃAoÜÄÃ/äåüOðÄü~äª:a~,/ßä~C¢+ßuý>C¢*Üä>î*Ãßu><üva@ß~*ß©,©ß__+båß+ßßäðÄC/@vb.ÖaözZC©äª+ðrßÃA_ðZö/ßýäÃÃB*z.+bBÖv¢©äuvv,ArýåªbU©~@Uz¢ªÜoU¢OÃœ+:U ß/_b+©ÄAÃAÜßäßbAB¢ãäßÜh©ä>¢~bðzðb~O_äîrrAðßUü|oaã©ü/åÃv,|ªCC£¢£Ã/Ã*ðåÜaz©ãBA,ÃœUZAÖBßüåA+ ÜýUÃœb_,vbßvrUhb©©Öb~UaÃœ+ßBî@ßÜ_©ü~BÜÖ@ªZÃÖzüýbߢAoZhýÜBÖuåüü£å:zvªU£AZîhhÖå>Ãß+Ãzv>£<.©r>*|Ã¥|££ßzýÃ+ãhªÖvhýUîªb,>u©+,ßßãðAh©Äa~>CbOÄCaÃ¥o©Ö, //ZîZo,*üv/@oä:ßaðAU| >Ä£,>,>Öu,|¢U@㣩_v|boÖÄhÖüZ:>ðååa<|ÃœC©:öbÃœ@<ª öZrÖßAöv*üðUÃ/uZÃ:©Ãubvä_äߪa+uU@/aývÖCäöÃhªääöAÃÃœbbßåBîA*rüu UüÃÃÃz.uaý*ßß>ð©ý©îÜåU o/£ Cüð|o¢ªUo¢@,Baa_u@Ã¥:~ßBߢî£ÃhîbAbzäBöOCh~.O£hU.ßåbaA£@r<üÃÃUhßCU|<*ßhðªb,Öåo£:Ã,<äßbÃ¥a,@B+CU/åýÖZðb©î¢£ö/ü£î¢Aã@a ÖZaA*_BßÄÖß*ª>ÖCåÄ,A>ärä£ð+<îb_ªuCCÄÖU~@|bîåob+ho>oChýãåbo,/Oªð£urh<,b+¢hä:.ü Ã|_U ,Ã¥.>UÄ©Öª©@ýî>ã~..éBß:Öbü| b/ÄðzÃOßýZÄO|üUrÄu|~:ßüB:ÃÖÃha£CvZO,ߪ©o bªhÄ@Ch_vbä.ýåU:¢:¢ý/£ý£ªîvßä,B_.U,rã,ö|¢OåüßÃZ,ððooboÃ¥,¢>Cªã ÃäözaÃ>AªU@b+vÖAãî¢åäðuö>U*ý~*v ÄZ:vür+BÜÄa+rbýüªzz@:Ã*ýÄb ÃßÄ.A£ðo./bü/~Ããð~vaîý>o ©Zz¢h:_îä¢ZbzýÄvð~@| åðÜî/,/b/Öz|B**¢@vý>b~ü,Öªª|Ãý.ü~ýß*_ÃÄbCä/åý>r¢*£,z_bZzü+oßßäz/* ýC|aBß|ð+Ohb.v.ýrB~B/@Ä<,o~Ã¥vU|ý_©@Bb*_ªÖ¢ÃBoîöî.ߣuäUÃ¥:.bªðu©£h¢o@ÖÃzðä|ü*ß㪠>ü©Äz¢U Ã/AÃaãªÖªßßZuÃÃ@bÃ.AZð üßAäªCüðÜ/Brß~rãaOUªrzðvÃœvh£~rubÖCbåýýý¢¢äbäC@îöäå,ãAzC£åÖB*üz |rb/Ã@zäAr¢ü vbhU*rßÄß+A:ý,au墣z_<£bBu._'), (N''), (N'Ãœ,ߪäýÜ@¢ÖãAýÃhz¢h|ü©ßÜ.bhhßUÃ/ĪBraOªA£åßîÄßAB_ZU+UB/©ýª,@Ääüvð C.å©v:vªh@U:và ðÜho*ð©ð.ß_*åöb.ߢhãa~£@:v+vo,Üß/ß.*bO/oîäbäÄB+£b'), (N'CÃ¥ h¢ÃB|,ÃœAbÖðB_Ä+£rüöh@ßß+åÄObýö©_
BbßöoZC+ÄÖ¢oöOß*ß rärÃbBB+ª:>öoä*/b<üärª~ß*u >ªzvä¢ohÖZ,ýÃäÜ©©äܪÖß>C +öCªv,*ßÖ~ÃœzO¢ ýÃ~o£©b_<Ã¥AOüvý+>U:ªAu*:äCðã+:ÃœrOåÃhUh£öOBv¢zvÃ.~.ÄCa_<ÖÄb+Ã*Ã¥C/Uüß+zuUBß©äCbã_ãrvböÖ©r£.ð/OÜî~zýã+ <*C*OªZ Ã*Ãä_@_BßOÃ~Ãœoü,ßbzîB_hU~ ÃuߣCÃ¥*éCv>åÖÃrZ,b*ABýîb~ð>BýööääüªOüÄü/>£ü+A~£ä,*Ã/uz~uðª@ö䪩o £AÃœCA ©Bð@:A_aav£Ã£u>£_++U+Oa|îüßA,_äÃ+Ab*ZÃœhr,~@©uðAöãa<.ÃÜü>B*¢¢:.îzªOh*ÃœUOäÜ£ *üðär+b:aªb|Uðh£ýåübvz¢.ÜéÃO|îOãÖa£|*ZU+öîÃ|ªå.¢~Oýß~bA*>B>Ä+Z/ÄäÄ>ðh>|+Cåâ/£ðÄ:zÃbß><ÜöOA+ßoãööOv,ÖðBß_v+ü*ä. bbÃý,Or.¢_ö:O|örB©<:©zÄ+ªUvuBߪ ¢AÖbý©_ÜýãÜrü¢¢üzoå©,ö©Ö+ ,oîüzßð¢ßhßår.CÃ<ß_>,üªzîðîöðÃ+ýÄ©Z,äa_öZ*ßßãÖäävöhAz£©Ä v/ ßåý~ª¢äU,:ª.:|<îvA ÃœZã|@h|ð.>.ßr@C~*uðruåª:ß*Ã|ÃoÖ/zö©büz::bÄ:Öý£,î*ýCÃ*ßCå©+ÃœO.ýOvÃü>vãbªbÖ/ã<.BýUßßÃð_BÄzA<ýåßåa||~bvÖZzß|ªäý|>Ã¥a,£Z.Ã¥uaOª ¢aBãAªåöÃåüÃZr>ð+ðUÃÃ@~ü@ÄÖuÃöU<*äu@b<ª|ðÜCvba ¢UªÖßÜ+äðrzaüöUÃœa_ Oa*ä©ÜuÃœ:ðä*/>+hüCO/ÄüaZzÖ:¢¢ÃýBÄÄß Z,ðü~aððbää@ªßv£ãB¢rab_ðzªhÖð֣ébã~rräÃbbr:åöAß/*vªbª uäý£üäoý uhã_ü©:¢uöoðãbA+~ ~Üß*öUb BvãüäZZB>~Ãß©>¢zUöUv> bÃAAU £<ߣ~AbO|.ð©ýZAUÃA@ýo>CaýßßÜuoößAö:aßbU¢:/ÖßA~ZuZßýý@vOh+Ü£Üuvö. *ðüU+v uªÄ<,bßvvªß@U_ßãU_+:v >*u.öb/vurbãÃÃbzî~rhOß,üBßCCýãîåbîC+UüCÖßý+~:.ßhßö¢ßvChÃüU hö Z,zrÖã|Ãbö:/zO.ß@Ãaý brBªöÖ.,a£üß>ÄüvU£ü|Bå© ãßövoâhöauOuªßbhZbz>ªßÜb¢ãî.ßß+ãuý<ãª:~C@Ãœb©:ß©UabßZ©à ý©>¢rCa.*oî_o*z¢ß.Ä*Ã/C~ßO©.ÖAbO<£>oCß,ý@+Ä>_Z@îÃ/aåö,¢__îßA:ª© bÃb>äh@üAÃß ÃªA@©ÜÄ arUBAö¢rý*_îÄ+/ßuaA|îAãu|zßðåz+Ãå zä<ü:î>zü©Oîª*Orz£Ão.ý*A@ÄCÄzÃüäA+b| v_CbªboA£Ã<Ö©aÃöÃð @::ÃßßýZÄ Ã¥UZªäbBªCßðOýäA£ö£ÃUîZ:Ãbåßß UªÜ:ÄÜ:rhၛ*¢B, :~Äoã*~:.ªÜ_|ýUZvÃ¥rhÄZB~/ßãê|©**Ä.uBO,UraZO©©~ßÃ*bÖåv¢o>CÄA@äãäð/rã|aOB<üöÄaððÜuaav<ð:bBvÃü:+à O/UU<ÃvÄoüvð îo~röß>ä|+aüCÖzZu£Cuª@~©©z>ÖZC@£@ÖOChÃœ@|U<ªbUv*ýü.ö oÄÄ,|î@¢zÃ|:ä*/+|Oh/h_ýhð@/.ü>ßåOr>ßAß_UUÃ¥v>îhråãý.Ãœv>OªÃ~:A:C©ßöÃZ©ãª Ü£îOUZßhr:_uä_Au£¢C+zözU*©Äî_ÃÄðbª£ü@Ã¥/hBbbãðaðß@* :îU*b~ãB£ßî~>Ö¢oUÃ¥bÃÖOüvvî< *Öð+r+UAßv~,ÃÜß*r:_bzã©î:£|vðübOB@Ãåå@,h@ª ýZÃaý,¢bß+.a>Bað|ßüBäO.ZObî<Ãb,|Ä@ê֢~äzðUß©>ußä~ß _><ßå,ãð>h+Öüäzý.,OöuBßööªª©ßB¢BUbarAîÃ*Ü£+O_<ãßOU+:.Ã¥C:Ä_ävÃœoC,@v@îãCö@©ßo|â,:Üß>~Ão©*ö_>>A:|¢@ü£ZüðübZäߪÃ_ÄBh,>ý©_©+~oüzª/öCbî£Ouvßa>@|:ubãU©|b<Ã,Ãîhü:<ÖÄ/îåZzÃz,ÃÄ|*<îhA.OÄ¢zý:/,ßB:A/ßuC@C.ãÖZrOBBª*ö*/Ã¥+ßußz/Ä:ü£a+ößu© uüßÄr©î>:råãB::©~£¢ª.ßb.üäCZãuZäðaÄ,¢oOh ãuᛆO_Ä+oªbð.Ã¥+Ö |ª£UðaðbÖbA.<>vBüä~ üðÃhãCväBz@v.ã~Ä©ªzßÃß.>©öÃBßß/aß.*¢å@,ßÖbü:_Ãœa¢î|/+_Ü£o>U:î.obZä>:ý<üãou>b£äüöîðbOU,b:aÃœrC¢b<,~ý©~AzaoöÃZobÃýz@Z_ü*üßîßA:uZãrBÃB<£O,ðªîîU>Bð.ZÜå~*>@bªoÜÜaãßäB@O.üU*hh+öb/ÃzᆛO/,vã~rbÃ¥<,¢ðÖCAhýð>:A/Ö:ý|:ªäãüå+©+<ã©~rî+äÃ>:Oö,ª Ã¥,Ohý¢ßäAÖ:a¢.Ö_bÖ|Zz Z_©~aö_+>rv@BßãbZ*Är¢vZ+ü<|+|böUr<Ã¥Ou¢Cý>~|ßhb_Ãv|Obî£Ä,üäÜ¢ÖåÜ:/:baî£ä©UÄÄAÄ:UîößBaîå _Ãœ>u+äßÜ:Buªb|î.ü11/19/2008 1:26:51 PMThe quick brown fox jumps over the lazy dog0123456789,.;:?[]{}()-+*\%^=~!@#_|/0111/19/2008 1:26:51 PMThe quick brown fox jumps over the lazy dog0123456789,.;:?[]{}()-+*\%^=~!@#_|/00'))"; + break; + + case 2: + $query = "INSERT INTO [$tableName] ([c1_int], [c2_tinyint], [c3_smallint], [c4_bigint], [c5_bit], [c6_float], [c7_real], [c8_decimal], [c9_numeric], [c10_money], [c11_smallmoney], [c12_char], [c13_varchar], [c14_varchar_max], [c15_nchar], [c16_nvarchar], [c17_nvarchar_max], [c18_text], [c19_ntext], [c20_binary], [c21_varbinary], [c22_varbinary_max], [c23_image], [c24_uniqueidentifier], [c25_datetime], [c26_smalldatetime], [c28_xml]) VALUES ((1), (null), (-32768), (192263244), (null), (0), (1), (-1), (0.0782), (0.3209), (0), ('üo+/>ýz,h/+@ª ä/ðb/©vÃœ,vaä<>A@ ÃÖ*¢å>¢Öaüª|uüOîÖvåäî*.zOÃœB.¢>ß*ªC©ÖUÃüðz .Ä£rozãüÃUo©. *b/B.rC>ovöCZ.©bZö|~öãý¢ß~©Ü|OðÃ*.rUÃ¥@Brî_,vAa.z©ürCã+£,:<ªª:êba/öý:ß,/:+bovÃ~Ãœo+C~ýßãüÖßÜ,î>ÖoözUªb.ãã|Ö©: >CÃîã/bªaBr~üU£ba_ü¢åuö>üÄÃ_vAuh,¢vÃA>bb©|ðuAaBOOß|uÄã:voUðCÄ_*ýäbr üüa><îö ZÃ:üª|*<
䢩oü:Uö@|ßC*,>hã oÃ/v¢£bAbýª/rü*/> oªvÃ_CuUBa¢bZßÃßaOb~aABð,U B+ãÜîåOýub.hzb,_b,AÄÜÖ+öO'), ('zC@ *zÃœCäUUÃoBß:êAÖ_ª|büOãÜ¢uUb_ÖÖ.bÜåßÜz+¢@©b:zöv_Cäß~vä¢bCö|zh,:̟̚̚OhOhß |Äräü ¢ª>OåÜBãZ: z ðbÜðrbª£:©©~Uö©:ßðb~ü>ßö@bîãä©ÄßäßåvÜÜýß+ÃOðã~¢ã/+<_vÄ*.Zß.hoÖÜßöäÄ.b.ÃAðvuZ äBð:b.>OO_o:<üö+䣢î+üýårÃœa©:ªaÖîazÃrÄ/ÄýhãåîAhߣUaª:Ãã+räýå/©ü£:b£+|ýðßOÄ:¢B|ýO£BðüîåZoOö@*Ä|Z oO/ã,Ãœu©zO/ÃZrv¢äßu*ÃaÃ|Ö@z:Zbäzvbö©¢UÄuz.Öåý:hß:Ãä *©¢ªå_ߣ/îr©OAr,, >üäý¢h*zZA,>a_O@öª/ ßB.bß.ubÄövÃ.CUÃ¥:*AAaa |ðü Ã+©_Ä>öãUozz C+r£Cð|üüb* /|££ÜÃ:>Ã.uuC~U üCÖßoAbã>.ßa£uÃ>OZöZr::äߣÃhü@@©u¢að~>v_~ßZv© ðåüîCßAuÜî©a,Ä.orr ¢>¢U~u*O>>v©>Ör©ðz+_©aüÖßvZð Ä*:Ä©åßz¢+©Öª@Ä>UoUOb>äߣ©ª_ä/ ð/äÜoßöãå,*ZðÃÜb,<ÖÃßCbO.v+ªa_:OÖa_B£Ã/:CbÃAbãO~ßbîZðUÜî@*ßhÖ,ßß,Ãäh¢ßäÄbz~Ã,aC|Bßßö£ov>u¢~ZÃ¥ZÄÄUð£*üAöauOUª©b@>Uubö~Ã¥hU.*ðar|ßÜ~ä<:+Ö~bäßÃ<î©ãoCBb©uÖh+Ãœ.ö¢Bðߣ+OãhöC O+î|å¢åªîZüå@:ðh£ßî+O@_o_rbªOO|OCªaÄ_ãvAÃœ/U@BÃ*£|ArzAÃh©ãÖaÃ|v/ÄÃßÜð:u~ß|åªÖvAbäã,AhýUh+: åÜß|:>ý_ßzî/r*:.Öhh+,ßÄoäoUzÄ<£,:C ßüý/BÜÄuÖö,r©Ã~übA£/ÖÄAª©~ör:ü~ªhý£h+OvÃzzoãbîðC:/C£bhÃZuÄ_ýýO|*©bboýßuBÜßý©vüßß_ÃoÃÃãåÃrÄî/bÖbbÃ¥*¢a©ZÄh¢/@äz©| @u>Ö:ÜÄb|ßövåßbaÃðßî ßoUýaCZza,@o~ðßvzªB¢~:ä*/Uß,>h,å£aÄbUÃœ/©.Ã_..CzäuÖ/zÃZÃ*Zî_ÃœZåßåa£>~rÖa@o.räî:ð ööOÃÃbO+v+Ãœ U©,_ð£,ܢĩ:ÃîhvbÃ¥/ßýrß Äbrö:C ãüÃZ>A©ðvbhÄuZÃýßðîz+ðü bãbßã:: >,ã~býb,a_ßöîa*U£ýäbߢßuã:UöOZ©ð.Öu<_UaãÜb/ßÃ/ö<Ã+ýv_ä+CbZÖªÃCrÃäå@hßåÃ.üazÃra@,>ÖUßZ.,_,B.v<.B£ãÃðßîß©ßÃ|Z@|¢ðbÖ+Büä.:/>ýÃÄ:.ð|î£å>bÃ<Ãb/CÄhäýÜo+@CzCÃœ/UUðu*o>O©öB.Z+ã<ßAZo+~ ÖÜ*.©î+îöß©,|z|@ZÃœ.Öª_Ãß>uð/bÖ~Aîîo/aÃãvZAhª¢üZoU>a+üßÃrB|ð/üöäOu£<©oC@_öh<~.Bo@öÜO_ÖrbBoü*/ß,z*oö+ý<ªahý:/ã*oßa,,>rÖ /A~,>OÃœbÄ|ãh.:ÄOb Öb_ZÃœuÃýo*b.Ã¥B~ã@*,BCß+îÖåýuÖ*Zr*O:ÄÜov+£>A.AZ©Ã_|ð+ßörðâ_Ã¥u@Ußbãbãåb*BA/ªÜöå:rv©r.î.,ü@Ah¢+hhvu*ruýb©<~ZÖ@ªhÃÖb©üäb+o.©ÃhãöÃÄîz*|ª©UuOaÄ㢣å++Z+_ÃovuärÃœ_vöß_ã|ärv~hBã/ßä _@ÜÜ*Ãœ||OAÖACÃ,îÃüuOOýbÜÃBÃœoZÄU*.îz©aÜîovü©_CohÃ¥Ãro<~©h_<ýBva.Z<Ãœ,ªu,Ãîðbbðu @©@üå.B_ÜÜÖÖÜra©£oäÃOÖÄ_î>azU,@Öðrö ~Zhýrða¢ä<ª_Ã¥U/îb@hÖöüb+.ßz+Uaß~U©b*Aäü£b+ðöv~*ðvbîC|,ö**îÜÄããÖ©äÄCO+h¢<£vîäðuOUUãî/¢ÜvÃ,@/rÄvßrªvB|:O_h:/Ãœ+ü~ª¢:ü/C>Ü©ª*ö>rB::z */+CBð*u¢ßîîbbB*bbîåöÜÄZÃ¥,Ããhªü<Ã:¢Av@ý¢uBÃ¥.a:öUÃößUöÃAý+_@üä_~.>~åê:î/|v¢väZo©BoBbUB@+/,¢ßbÃ¥Uüß+@B>ü+/+ääOäã @|ãåZ_ª<î<.UBãC+©a£:>ÖbOhߣÃ+U*>~bCUuaü.r媪BÄvªv>Oor+ãÖ>£Ö<îîB©hî©AÃÃ¥h©buvªh/b/@b.Ã¥bOzru*Ã|v<@ZÜöCüCUªb|züãÃß| >~~/>ußB_vo.,b©ðã/ÄbðZ+ߢ<|:bAovÃ¥bö~*~zaßA+ãU~zu¢åÖu¢>Uýh@ª+hãü¢ý¢.u.uvÃ¥U:uýÜ.¢åý|ußb<ßaßö/ßüöåýbÃã¢OBß,ªäüOvUuÃÃ¥Ã,|ªo|>ß.,<ß/îz|UðA~aÄîÖãrO@¢Ö|ÃÄöU|z+ðo ßÖà ~oü©ªa OhÃ¥A<ᚔ,ýO£ãÃB>©ÖväaäUrör.UbuãAÃu_|bub>~üÜ*¢Cä~<£Zî h zî©bv,_îohhîªr_/:ÃÜvABî|ã*ßÖ,ðöêîU£,hßBbb¢r>rU,öuãu|äzuaCUð|Ãœ>ur:zÃöîbzåÃuö:Ãb¢B.ßoBÄhêa¢våå@Z~,ýAî_:bO@ å£*Özb¢ßoü h> ~BðvÃœ/aoð+bÄAÃ_üÖý|+vbUU rvb+zUv>Äz:@ß,B ÄÄýêAÃ¥vOr*~Cb@ä©ö|oöߢCßrz.B/üª:b_*v|ÄO+ßOCî©,£ßªãäßö,îBäî,Ä:oÃuÃhb>oªCu+Ãœhª@uh᜛>ªCÃœ>©¢U,©z<ð£:Ã¥o@ h¢aâ/oUz~£Ö~bã©hCü¢,äîr:ðîä>o¢bª>@ý>Ã¥> . ©ÖîÃ.büzÃœråðvÄßvÄ_zÃoü~hb_ãovª¢zý_U:|O<Ãœ@ãääÄ~UvêßßA©oÄoÖ£åußbo|~ðÃ: Ä@b@r BÄ/>z|<£ßãvz+_Zß_ª|ÄÜÄzC£>ß*îvÃ>:ãª/ h~£ . Äz¢*ðAîý:ü<_,.zäßÖCÃ|BÖã@öä<,Aî,++~ßaoÃ¥zavZ_ýZraAZÜîu©Ü¢|ßßüO/ª.bBOAã>ã¢äßÃZßuäuÃã:BUaoêöUu îh~©ä<Ã¥COO@:hA/ö<ß ð~U*ý>Obð>.Ã¥Uªzö©oªöÃüC_£ð£BüÃÃhhðZéÜ~oÃ/öªÜZZããbÜßääªö<ÄÃbäBBrÃœZà z|ZÃ¥|:vzA@Ö+¢ßUîüðvZz vöb@z~ Ãã>_ü@vÜåU.~zðüö /bãrUãa:aýz*ßAh©üZ©vß©výCbÃäÃý.zýÃBuÖh>ý*ßÃb~auUßCö...vzb£rOÃ,_röbo£ãüÜ,Ãœ,:U+Öãh: Ovã~¢/*rüCU£Öüv@C_ã|.ã _£AüAð ßbÃ,rv++.Äz¢a©oC¢<ýä¢zZåî ðZöª< v£zrî*ÖýhÖChvÜã©,@,Öã>ä b/ßUý+**üuvÄýÄäOo¢C>Uî.uýZOöß/bäî£b zîZ.< .zCÃœb*ßzªu++bOaªUÃO._@o.ß £_Ã¥v*ÄAðãã>@|Ã¥zÄ£~UbÜåhÄöÄÄZ/ å© oÃå>A:*zbà îZÖÜuOªÖ:ýo~ý,v_Cßb>üãr.O/r¢hîÖÃrßß©öðbvÃCr*aBîBÖðu<ýO*bB*~ßüü¢|u.,oªª~rÜßÜä¢ã.B@CÃ¥u©vÃa:Ã~ª*UZÖ<£C~ÄÖ>o AÄr.>.Uð>ZãB,åüÃ,Ãäaýã@>a+ýÃã,ܪÄî£|_~üz ©äü:©bÃœoÃ¥ b£h OOÃ.h/@BC>u,>u,hßÃ_à ý|b*Zr|öbÄü||:+äOßåß~Ö:uZ~|ÖÖ@zC:ar¢¢bäUöhbßvßöÖaZªî£äÃUBãbÄ£ßO_.äC_vÖuhü£ä/éö:¢ßÃ<î,:~vö_ßüh~hö>,.Ä,>vb<öaaz_.åªbäbÄ¢a.@vzu.oßbÃßÖz£Uzî_|BC/ÖC*< hbüª>uO<ðÃãAvãZðo@+£ªªAUÃœZÖ/o_br>ªOãhÃ¥Z@hOz¢b@zvß>ª~üßÄ@AÃßu<à +ª¢_©£:ßvUã>/Z,OUý<ª£ö>u©î£ß.bbb,ãðA/ý£ª+Ä**hzvU£||UýCÃ/B.äÖa£,rOßCª**Öv Ã¥Uö~oB*£,oä>ßbvh>öaCåªà oO r£åZßzîCÃ¥Ããöz@Cª<_Ä*Ãã:ä.Ão:Z>¢/ýÖhý>Ã¥AOðö,,£ýĪÖýUß/ߪ+OAäbh/ã+C,ö|+hBª>@.ß:br.A|ÄZvãaooÜß@ZßÖu/_üö|Öß@bãå/ýåaÃ~,ß/>u+:Ch @ÃOÃbîã>hßüUa*aö*~Ãœ,bUAÖoý.åÄA©äO.îÜðÖã@o,äî¢oßb>vAÃ¥ ÖZZÄ.~b<öÜCoBb~:uA~ÖUu©+Chýr*,:aß_.Cªb>OÃœArªÖÖ@Br¢vU:hb_¢ð~v~äh| C*|£<ão@,üuAbª+¢åýÃCu_©:Ã¥>Ã|zr£Ãå,/C|©BÖýhÃZÃœbz+Üüý©/Zða>>@ª+ð,v~ðA>uOBÄäÄã..ZB|hß uývª<.ªbo>,bÖ.ÄäAßoªåvßÄ_Z~bu.AUCbA~£/Aß|A_* ©îaÄ.bÜýr:üO_bOß@äÖAhaäªb|_îð:C£ð:~h*_b:_Ao/<_¢ßÃA,ðßãývv©C*ßUa~<¢/AýßîÖbb>Cã.C_öÃoîbrãB:zåÃ.ãZa~öäBªßðC¢äÖ Ã¥/ã_~.bBC@Zß*|©ðu**,rBU@C|a_B:ß:ª/öoaüobrOßÜ:©¢rCß@u hb+zO@UÃCßU:öÃha_*rð î©öÃb/öß/vð~C<+~ãß:î+B,| @ö:¢ãܪZBvýOvÄ+ª<,äv/ÃÄÄÖîö~Zb.CAO_~ãväÖĪÃýÜv.ß+.>/.CüåÜÖåöãAýbãåhBOßÖr@B_ãöÃö>äOuÃ¥@ý©ßªOäUZªA+o>£uvb+ BÄÖva:rÃ¥Ã.bUßÜU£ubZ>aoaÄ|ð<îý£Z*|©ohÄB_h:>|ßB£/a|U|ÃöîßüývrOã.>bCÄ©C¢Bðh@oA>ªrªî<<*ÖB_,©åOo/Ã¥+Zba<Ã+ý ,: .rÜäZ+Ü©ZÃ+bÃý| aU/ð>UoåýCbübö@ßObîåßUU.+@ZOz uÄu£¢_é<üar¢.OüBh+ª>ZÄîß|h*uo¢ßüOÃ¥*Ö.zýB@|ð媢ãU,/hßÄßöýzäb,+/ OU:@ãr©ß+>ýÄÜArözCßÃ>av*ö*:|U~ÃbUªÃ+o ,rÖz/rãurZ©CBv¢~ßOüB|>ÖC|ᚌ,bÖî/£Ã¢.ðÖAöã*C_ý¢£ªî~ß*~r/zz:ß,ß/ÄußO /ö£~ýBubÃœ+ð:Ahî<<ð_ä/zzC<ö£C,£îÃßZr£vaãv*h£ö,ýÜUðöuZv Ã¥h£@Cb:C©hZ£+ÄvᛆbðuÃäÃO Ã¥u<~zhhB@Ä©.>£ß|ÃðvîÖzUܪ@oÃ.:UOÃ¥>|Ãœ++ <Öö.@b/r@@ <|z,Äö~*Züü/Ãb:<@aBbO*~ÃœoßîÃÄoz£ObüÃä>ܪraB*@zv*b~îr.ãOvuvä_|©CUCUÃðãÄzUä|*+ýÄOA©UZöäüð¢üäÖv,+:O@ä@B~Ãvbzß*ð>ßZ@bãä +O,o böüöAä>CoäCOB/ýýu¢bªýhO~ur_@hß <+Ãœ@ÃZCvðäß öo*ý,Ã¥*o_z_ ðÜ,Ããzýü*@£ß ðvÃC*oÖOßU/Ã¥uo¢Ü£ßOã/~öî+/ªåãü.>_£:¢©bOoÃœoh_öã¢h*rÄÃ<öå*zÃœÃð_ä ßßð |ÄaC~ªabZ/,ö_ß:_£vÃA~ÃœBzÃ¥ vªðß ÃA>b/*bCC:îªðîßOCb Ã|hîÖߪÃUv*.hr@ÄZß@öA+ooüß>/ý*A᎛,+©Ä_OuÃœ:oBåãã¢.hÃßC~ACAo.+B*ýbý|åßhb~v ÄUðabBü£ß|rZýªA+U¢_hßC/:BBzöA>+|<<, CCýb/ÄZÜßÜaüä/Ã¥.AC@ªß:îöÜa¢zr£ß>rÃUh£:ÃBߣ© B*B~ªö@*üÜ@©uAz/Bü~oü>ÖOrÖÜ~..ÃœOß|ä.ðAÃUC:_.O~îªovýäb>+~~ð,äOöð_a*ä©OÃ¥>bv A>ü*ýªäo/o.ðCZOZãa¢ãbO@ý.ãÄu/vÖð~Ã<å¢UðÜaa@ÃœCBu~>îb>//väýüðoî¢Äo,< +ßz£~bäãb£ÖåzªhÃ_rv>o<ªî£zÖå+z*+¢ÖãÜrU:.~ªrruB¢|ÜîoöhýOîr,aZ ü:Öz+U|Ö*@zÖãð_v,©|ÃOC:h,U£~ö|ßuOBªh:îäãbß.,ärzb¢£ßÃ/~häýªðhªýßßÃb|Ö ,ß>ßâ+ÃbZOðªözÖbÃœ~öÖoãýÄuba¢£Ü£|Ãuß ðÄüÜoî ÃraA>b£zýß|Uü>B>|*b/@_+äÃ<.ob¢o~v@U@ub>~a<£Öoýäßßu./B<ßOßhzA¢>u*£ýý:v|v>ã<.bå¢Äê~ äuÄ<ÜÄbÃBÃ<ü>UZBoý,|UöbÃœZO.|.AO+hö@rÖräOÃœ*@ðß~__ÃrAbîzCäÃöÖ@©Obð äoh£ß£++ÃœhUChüÄ¢äßraB<ßߣ<ß/*>~Z~ªð/,îö|£ÃCOåêübåß*äîu, ýzãöAv_ö@@AvUüå£*,*£öðåã+<ÃU/©+_Cbî£ÄÄ©ã£ðu'), (N'ߣßão>hobuö£Ã>ýAÄßî|ãåÜuC_>/ÄãuÄCCv*.+ð/©<ÖUZîB_Ã*+ªBaÄÃ@ZêýÄ/Uau_¢u£ª*î:î*C@öu:üÖ+:ªªB,~ãh¢z:öA@ub*oAöbÃœ.¢/u£ß<Ä~aözªzîäü£Ä¢/åýýaýäÜhh/aüÖß/ðU©Uv CªObýÃ/¢r+U: _¢:u£öÃ|:~ö ä<<öÄý<*CÖ+ßöao*>öbÃœ@.vß_oß/r©<ÃýOÖ+B*|råü+ß<£a.r>@ßÖ*>U©oZrüb|ÃU.B*ߪÖĪÃv.hªî@/vh~äßðßoÃœb|Ãœ|äîÃ*£Özîî_Ã¥uAýUZßUªÖÖÃðýß/>:|ã©/*_Ä+/ßv:*Ã<<~Ã|~+.ßÃZßåÖöüBuÃ<ÃãÃ|ðroß,Ã'), (N'abzUÃUðîBoAüo_©ü/:ÃAÄåb¢Öaß+/|ab*Ãßß/ÃuãZã+@ßÖ.,_O+öAzãhaÃ>Ã/|<@oö¢.Öã@ÃuäÖå>@ßýª/ãUrbbAå£ßÖr>.Ã*ä+Ã¥hý£Ã©¢Äo|ü£<ä>haÃUzbÃ¥~_BAÖ_Ä/a_¢oðäªÜh|~*Ã¥:ða åÃ+.aB|Zý_:_©îBýÃ_.a ð£@u~ÃÃÃýhªbÃåä*Aa/båö oU<©>*oî>aaöbãr..ß_ý,ã:üAu£Ä_ýð/ý +üBaU,ãuBbÃðß>ã~av öðzÃœ@£vÃ:+@b|üÃ/ Ãr/@©ÃåU,u/ üãhßÖhz©zÃ@Ãzý.UãO~Ã¥_ªCÃÖßC.~äö|ýåa_äÖ_<ö|z|,r+ªýz:Uðäö@©AäÃaÃ¥b/ßüÃ.ýä+b£BöüZ|*_/@/Z.â'), (N'<åßîã:b>åÖ/:ö¢Cð+~ãîüuBÃzv>:ÃœaB ª<>ý|Oᜆ<.ßðB<Ã¥z+bCßUýUÃœh~|öªÄä£Bä:CC*OßOA<ßZÃœuߪo.üý_*>Uu/ªuÃvÖ|oßuaÃœOaäzªr>/>**Ãœ*:zå©|>üåîð~|>ÖÄUCüaÜãü.B©ðoýßÃbU:*ß:©>UÄbÃ¥vbZÖC:Ãœr+, a><åÜý¢*übOã Bhöv|¢ÄZÃüà ßðßÃrª*Ãî:ä |î>ª*bßBuö£ü>@£ÃÃAv_ß|öb᜙<ßo.£Z¢Ã©CBö©hªBÃ¥vãrÃü¢aÃ¥Oz_aö/ÜÄz vb@ýÃåãü¢~Bª,O:bßý:b@ro_<üB©Ã©zu+ß A+vo ãýý.Ãœ|ð*|å£ßUußbðü@ÄÜoUöZäU|ã/Ã@ãhu_rÃÜîbÃCäA@ýhavC,Ö/_ÃÃbhî +>hOCüCýväOrª©AA,ðÖåC_~zzÖ,~_ßoªå~©Uý©î|ähÖ,ðroÃœ>£*h+außðßä*|@:<Ä~ aýßAÄaraüßr,BªªbÃ¥:Auä+äzOß|ý*ÃZ©*Ã¥oßĪ¢hOaUaÃ/ÜÖö/|aÃ+<¢C<äî/r©Z@@bu/ß+vßîAãCä~ÖAßbîCvýü.@©uÖÃÃü*ü>u+| Cbzrß ¢>vÃ¥Cä£oÖOU@bßîoh@brb>o*++<<ðãßbr£ßa. £äbß~ßUÃzÖ.üðÜh~UC*î@Ã+oUð+r .aåÖßårovî+CÃbÃböîAðª,©©>ßî>Ã¥|£.b*Ã¥Ã@uhîð.ýrüßã©£BZA*vÃA*uvüüÄZÄvöb Oý_ÃÃœCar.:ÃÃýUãÜv¢bÜ¢ä,ZüoðrCvöaÃ>>£__Uuv_ªî@|ýÃÃ¥>:¢åZÄzªUÜ¢rßbh>©ö<ÃrUÄ,ä>BU<Ãœ,or ¢ß h/ßOAZÜ¢A<<<,äª>ýÃvÃuAߢbC<,:ýCÃœoÄvî+u:ðýÖ*uü+öU<£ãîÜö>U.:uÃ¥Cå©AÃ¥|:¢£ää ,ÃÃð+U_/å£~B©raura>îa~ßBB *.îzªªß>@bu~Ã¥oðÜýUÜ©u.B/rîC>¢Ü/ßý>,à |ãuAäãðvöÃBb£zbv~b/ª©__ä:C¢.:BÄ~.|ð,|¢*~ooUOa/ý:*@./üh©Az+~Ãu@ßäa@£b+ÃÄüÄä:>Z*ãahoböÃZªvîîBrAª*£*,o>ßîb©ß/ÄCÃoÖö@|ªb/äOÃî+O<~>ðC>ßoîr uUb,CU|>~Ãho©r.ª/Ä~Bz@ªªåaäÃr**übÃöo,Ãœ:*.ß:Brª©ÃÜÃÃœ@b>,v*oö:|ã>Ööur>bÄbý* /Ã¥<ð.@_hUU¢z£:>/+Cö¢ABýv ,AÄßö©åßé~zAaß,:ÜüO.,,hÄ._bÃœ@+v,bbãrBu:ß©CCÖ£ð©oÃ*rabbä>rub~ÜãÃ| ãO.h*:ö*>_Ãœ>ÃzÖ£a,Ã¥.a£vhCê+orÃ/<åîzvA*îv©__Bý<îzöÖ:äh rðZaªã|rzã Aã,/+ýbýo CÃACUÃbr/U~ |Ä,ýaÃbÄä~Ãœ.åýýbrUÃ¥+h>ýåªÖÄZÃb+üzð/äîbZoªrr¢£ãà |£rÖC+ðr< býU+ßßrßBü_hOoöÃÖöz+UÃœb,Äbä¢äðýU+|üzðU+,/äÃÃÃœ/:bß,¢üîCBzðä£Üö|öoüzÖªO£ß@|ðð+b ªZ~ßãC@ZÖöü:b:<|hªÄüÃîrª+bÃœ,Üßr/ h/Äß>oà äßo:@CUÃœbBÃœ:oa|£ ~/*C@öÃ_CðAÜã/ü¢ãbboãö@¢ÃÄ/üOhÃ¥b>îÃ,r*Ã¥/î,ruýz: <@O<ªoÖ>ß>ÃœuZ|ößoÄUÃÄ~/~|UC<.äaZ.v@A,©>Ī£Ü>ÄýöîÃã@£ãÜö*O.+ÃO<+ü,~bßzo vÃœ/ü£u©/höýUÖÄ/Aãab*ýbbßÃßßbü>©*ÄB.uu:~|îB+.zAbýé@_ãîu.ZÃœ+ý+Ãœ*b/ Ã¥.Ãåßð|Ã+©|bääC/îBü>ßåýö/bªOCÃzüüÄr|ýßĪZuäÃÃÄ>hU*:ý:ß@ý.ß/Ö +~¢+~Bo£|/B,+r~avrÃ|<ðÖZz@hrrhr*övî¢u*hª*<Ãî*ªB¢ðýo~ÄOã:ß*bböü:.uÖ/BZöÜîbCuauäðÄ/@vrý¢£Ü.:ßåZb£,aZ©ªoý ürU@~üãuü.*£.ÃU.ªC©©ãhî¢ý:ãýöO |/rZaÖCbß~Uä:ö/UÃÖåb<>z>ãzª@CCäZÃœBßru,U£>bäB~Z/Ã|uhUbCãbCÄ:Ãh~ðÃÄüb+huaZ>u|.¢uî|äðüåýªu©UÃB@ö|>ðhO+¢ub_ uãÃã_//îßîßuªAÃCÃ,C.h>*öÄ£Z:ãv ß+£©hÃ¥+hßZrÄbÖZzBÃœCîoýb@|aãü+|u+vzhöÜzr. Oü|,>ãv:ö¢CUu£zhO<Ã:*Ãîb@|¢ýUðr~Ã|ýa>hbo~>.ðCCA©ßߪß<üý/b@äöuvra/@_£©z¢b.|äã ýö,_üO/ +CÃ~_öývCözz,>~|+ý@O_,ðChBb|<,UBÜÃb.ßbC+£Üzª__ö>*ßoü©UÜür¢:/ä.ßÄÃu@Ä/oÖzäh@ÃœBz|ªo~u£Uv.@îBurªÃ>Uüªî aubObäB@Ãaååbävvro<.ßaß ö|ÄO¢Zß<,U~ö@A|,Oîßår*hÖ.uAßC<@a.ÃU@hðå/u,<ßv ÖO~BUîuðhª.öÜ,Uü*ðÃ~@ßÜbUUa+©ßäzÄåýåÖÃv~ßå*©ä~:å£/,îAC:,äãüuö ©ü+îA,uð@ÃœuC,*+v*£/Cbaoî<ª/~aîÖA£ ßãU©ß:ßýb¢hu,,î~vvî|©B@u~ö©Ã~.oäüz._၎bb >Övrã,züz_¢_.ðvba_ßC,¢ ªÖü+Cv,ªC¢u.Ã¥>vÄöovöðäZýüÃ/öOaüßABz>C£/_Äß>ãbßr_Z£ªaöýÜ+>.ßÖªÃrb¢ãrÄÃÄ/Ã*h/ð~ÃîÜ_ ©A>ð<~,.öo¢*bAZððuÄvý£î/ohßb£Z.>vÃzãåru>Ah.ÄüB/.£©ß©bZ*ACbÖ*ß Ö©ÖCB Ã/bÃýuuãuO:bÃ+.ý<Ã:ü,ZÃß/åÄÃ,ÃüãýBÃrªbÃßb>ßöªÃ£.ðÖOa©Cö/ÄUZB@_:+Ãœ~z@bzÃýªbÃÃ+Üübrbüðb|äußßðv:u//Ãa¢< ,ãobrhr|AZÜýC©BZ~ uÃBÄu,<@+ªZA*o<Ãßrßäã.££Ü@hv*|*oCÃ,ÃU©ªÜ~ÃÖ~Zýð¢>+äå<Ä>ßb/öÄUrOßvhî©ÖÖ>h~Avo£b+ܪ@ÖüÄ:©.r~©ßÄî_+>özoBväÖåÄz:/ oabOCÃ:rCß:>å£ÄÖr© £ýbýouüä.©Ä_ßßðzß>Īߩ©rz¢ü_Ã:Uä>Ãœbb_ý åÃ@v.Oö.äAAÃ/rÃߪߣZüU©>ü'), (''), (N'î br,@ /äab_O+ýv¢:_¢UbzuOöÜ@a¢Aã~Ãå£Üªýöooð£u.bz@ÄB~Ã: ãAßA/Ãß.Uüuü>< ßA_AãrubbÖýOî_ö A*ðOüüz.¢B:ãåöZßv |v@zÃœ< ¢bo:_äÄh,ÃÖ,oBî*Uvßb,rZöbA¢ßv_CÃœvh>ßߢª£ÃÖ¢>bÃ¥|b,ã,_ü¢oh¢ör|:ZZÃœ>ö@©ýB@ª©o+¢~ÜäO:|,.h~ᜁ*OÃ¥/br.<äýh+îbzzÜäßU@|ãbaBåîä¢ðhäâð£O¢üühÃÃœÃß|>bB+Äý./ß ß/öz>¢ubý>r/,£ªUãv,ßb*O_,ßÖUrh:vß~äé£:@>Äà *bÃ:ÃœhåÄÃÖ>+,z:arß>Ã_ßåU£|ßaýAr+|bACUCAÄýª£©+Z@ª@zýã.CÃ¥.ÄZîðzåÄÄ|Cß v ÖBÜÜÃðorä+br>ÃA*ü:O¢,ürB.BîðCvßßhb,oÃ¥b zz:ÄBrb£ýÃývãh/r<ßörßÖBv ßuBý>+Aßöªüª_BUavOuOuö£Ääî öã>|rO,vüö£<+ö<î_:ªöÄÃr|~Ã¥bBÃ¥~,hªAbö/bÖ.hãZb¢ÃäUÖbBUvü¢U£öü Cz,+|@Ã¥ ä_:>Ãrßä.hðîaã ßBß@+u~ª|bOÖã@Ab Zü|î.©vðAUý.vîü.@¢ãB>:CUä~ß:£ýÜ:ABaãåýB/_ª üªrZor*zÃ¥Oüãßä AßäßZb<@,oîC@@_,|Ã¥hh¢©z¢vZ©åvbvOý|üv|Özv>bßCUBãß ß,ö©ÃÃ+>U_ý+ªv îÃhö|vßß~ä£|ãr+o:Ã¥_:© >vÃ¥~Ö rzîîß>u@öåubü~*ßBC@zÃ¥+_>bߣ|uÃ¥bü@>ªvüÖÖ*üãu~£<>býÃoÖb//ãÜ.ãaã©zbßv|<üBã*+O*Aoüã~z~~@ÄzîbbÃœ<|îÃ>z_hÖ,ðACåäß,Ã¥B.©ß|vÄvbÃœ+@*<.Oªv/¢ÃAª @Ãœbövß~/ßÄvü.u©_.b£Üª>brÃœ,.~*äüaîB|CãÄýobü©BAbb:UACruböBh£îÄb.@b.ü<@Ü©oö>>ãßüOÄ ö* ÃÜßßo:ýOßvB¢:~©bª_©~äoÃà Zvoärßâåü_vUaåüo*îåA:zuBAä+B~ã ÃÖ|Bo>CäZ>*/|ðýZuh£ðã~_¢ÖvÃœOö _zhu_>:Üß©Ub~_Cå©ob~hööð.îözo£|b|*Ö|ÖêüUÄhu.ü,öAUbbðªã<ªår,:ÖÖ*/£OüåbÜÜüObvUöv.Zo|ÖhUBßOÃ¥AÃœaöäbOC@ãZBhUð rÃ.bAa©ßu<<,£aåüurv@>:ª¢b_/.Bo__Ã/Ī>CrÄ,~ß<>üzäöý.ãÃhßý>|vÄÖZüuC11/19/2008 1:26:51 PMThe quick brown fox jumps over the lazy dog0123456789,.;:?[]{}()-+*\%^=~!@#_|/0111/19/2008 1:26:51 PMThe quick brown fox jumps over the lazy dog0123456789,.;:?[]{}()-+*\%^=~!@#_|/00'))"; + break; + + case 3: + $query = "INSERT INTO [$tableName] ([c1_int], [c2_tinyint], [c3_smallint], [c4_bigint], [c5_bit], [c6_float], [c7_real], [c8_decimal], [c9_numeric], [c10_money], [c11_smallmoney], [c12_char], [c13_varchar], [c14_varchar_max], [c15_nchar], [c16_nvarchar], [c17_nvarchar_max], [c18_text], [c19_ntext], [c20_binary], [c21_varbinary], [c22_varbinary_max], [c23_image], [c24_uniqueidentifier], [c25_datetime], [c26_smalldatetime], [c28_xml]) VALUES ((-1761264475), (255), (20544), (1826608718), (0), (null), (0), (0.7414), (0.5117), (0.3842), (null), ('ý~ý/ý.ÃœZßü///bOrðbðÜ*AvhÃ*öªb:/OAaß©B£ÜbuÄ.ª|¢zÖ*Ö: :ÄrüzäâBvZã_£ª©|CbrvzýBÃzßä+UühªbÃåärÖ.äÄÃåÄrÄÃZCv.CÃ¥ äýz/,Üüb£ä/Bß,Äo£|>hÃbr+r¢zÃÄýÄbO*aååzaBãuãÜ¢îî,CÃœ_+O£ßßöuÃœ:u*£o*î/+ãv '), (null), ('ß*ª~Ã. ~uoÄaÄrböbu¢@z|Ã.Ä:__ã/ýöÜ~ý/ £bbåÖ/ý£îÄOÖ v ÜåÖv©OÃ¥våÜÖßOÖuCr£ª/o~¢_hÃÜßÖ+ß@O£oîãÃÃœhÜßOBa¢ßå©~üCÄßorvrCü.b@>ýuª@~ v<ä:©+.@@>ååho,©ß*>ü¢£ªßÃÄZ©CÃœaZz*z+zUbß,ýî:>ªäðÄ@:îÃzÜÖö|uÃßß+@*bÄ|îbrZ:h:AÜýÄvC,î,üCbO~Ö.ÃA+A|ª+C/Ã¥za©zo/|äÃüüäö|.ðý|ua_üo£ ãÜ:äBߢ£ªßî.* ä'), (N'î*/ýz_B~|ÖA©ðÜ@@uC+OªoZ>uߪüäA<>uuÃ¥*b*_U*Z@A~ü©A+Ã¥hr>ãuÃböÖ<ðCÄ_Z_:ÃåO<ä~Cãz£vîUh~ªüîvý,ýhzB~bzu~ýÖb@ýor.v¢+aîBÃœb> *@Ö£a_bÃÃÃ¥+v@ߪé>äÃo/._¢£ª,bb@bBÄüÄß*Ã>:Z.zbýB|,O/ZOÖOðCra+ðâÃ* OßãåîzÃœ+ZÃ¥aB>£_býîªUä _bª¢ +|Ö©ÃüÄßZÄ>vC@ßßA~+£Zhü,vß,BßOýz|äöª+|äÃðZhÄAu B,./C©ßÃaÃ¥@ߣ/äob|*_.üå.<ÃÃÃaýv*A:ZÄ.Öä£ÜoöÃãÜrUbhboéîh>ýü+ýbÃaªoÖrhoÃzÃÄÜvao|Ã_/©åðC©*_or/ß<£Ã<öCÃAýCî,Ö:üî£C*.vã_.ßb><,£ýüZ@rbbßbAå©_ Öö*å¢*öÖ.Ä~OããUÄýbÃåîã_BAãöýðåü£v_ro©/ va~|Ä_ª,î©vÃrCaãª+AB:¢ö/o+,.ªãÃvz<:.åªhoÄb/:ðA¢ãößåÜ£ å£bo. hOÃœbða/ãªöauÃ¥+,O<>CÖ_:ßöö¢ýªß*ÃOßa_v+_îªîr*äå|Öö<<~£Z~ªÄüCý,:CãUuã.åãhßö~@ä*Cöb,äAh ÃœbîU.ßZv|@oÃœ+B£bhÃ¥C*âbÃœÃUªAA~_.ý@Cü.b>oUý.£vªÃý |>rä*hߣzß|v.Bªzh,ßðv|ãZ<Ã¥aÄäîª@v¢.U|üv*zzBvðåãîß Crðbba£ð,bÃœ*OavAU:bäö©<,ÖuA©Ö|CbUÃœbÃœA©:Ã¥,ruuÄðzäÃ/©/~z~z,ä, hZ¢ª,ä¢h@ö_COZvCb~AÃ¥_ê©BUîðrÖ,OvCÃB|ªßãZo ßå|UZbÃßör_ª>:oa<ü*öUUZÃ¥h,:ß.¢< ZÃœbr/uªÖuo|+ÃœuZ/ßßO_*äÃöv~ýbBöª¢Ão Ã+ü|v+ªÄBÃðBîCaý¢:öý.bhðäu@£v_ö¢¢å|bäuðoÃoªv*>büböýoßOð£UAÄAãö:_ÃzÃ¥zÜÃb_Aab/hß~£að©r+:*îz+CüöÃð©üé:býZÃý+b .AvoZbrÃ¥,:ooß<üBÜð~>£~AOübåß:b@zßu©B b_@,öö,*C|bÃßBA,ß/ßB**äÖü,îaßäaüÃÃÜ/|<*ðZ.zzBîb ÄÃO:_< ðîÃ>|@ß*î.Ã/vZ©hoZî|B@Ö~b.~zb©_/U*ã@ၚ,:b,Ã¥*:ßAAªAO¢îU,oo:hö@ZuÃ¥ZOî:o O>>CACÃ¥u~~_Z:¢+ß C:+£@¢:öÜOabZð~Ã¥Zä©hßuvvöä|.uã~><ãßýÜ©£åAoUöåOz©ö,oÜÄ©_Ã¥OBÄ©bAÄö~>|/C~BªußB£üz,Ö_Ã¥<ã©ßÜßzîß©üüßa/Z++ªå_*Z||ð~åîäÄöCr|Ã¥vÃœÃÖCuÃœ/£UýBrÃöAo© C_CUäU.ýöüaãª/_a~£äÖ |äîzð<ÃuîÃß:ä/*o@ä@ÃUß<¢,,££©+,Zîa|©rððÖÃÖbvu,ÃýräbÃœ bbÃ,Zð_ßA|_Z>|äå©ö~öÖü<Ãœr.a£©:ßzªüãðßZða+ðÄO>ýÄßäC_î<ã|B~öOäîåo~ÖUÃ_Äöb+A~|ãvzZuÃOß|ðîßÜ,Ö äCbB>ÃœC.vzOBðboåîvÃãZ©üoÃBª©ä.îoüªrvüÖað>£ðArhî+,o:_ã,Ahzäîð.rÃÃ.£b££uBîä>,>b|ýCbC©å© o@>ö_£äB>züu¢_BvÃob|Ã*a@bÖäÜäz_ßab<@hÃÃ:AÖýB_ßð:Aß+>ßC¢ß>üåßÜBurÖOr|b|Cb<ª@ð+ðýUß.Öbðbüî/©AOßå©ö_Ãœ *¢+,:© auªÄ/~ý¢ý+*hvÄrzC,_ðuªð|,ª~¢¢/AZ,~AÖzÃU/rOÃ¥zª,>¢ozUýðÃC.ZAzßý*ý| bÃé:a,hBÃAÄ¢öýBü< OA+£<¢:v..:ãr ü_©ßüÃZãäßabÄ£b ÄAå©+zÃBrbýÖýÄ£îã+£, ZaßA*O_£.ðßObÃ.ü@ü©ä|ªðÃ_ähoBu ý©a/AB£Ahh/ßhO|îauö ,ý_Ö©bB<ýöCðoîðahvÖöýo_BÖîª_+bãÖãb:/:ߢãzª>@î:+v£ß,ß>:åÄ..üuuUhöC+BB:<_z¢ð£+£arZ@*î|£AU+OÃAAã,¢b<|._*Zßovbo~ß>b,u©Äå*~ZbhÄîÃ:>:UZ~îBª£ðU_ÃZ~ä£|é£ßo©ÖÄåZ*.£+bÄÖ¢ðzu~üÜ|Ö<*ªZÄroAîb *Ãœ+|o@ :¢å~ÜÖUCßh ð:ä+CÖ.uCzßÃ.B:¢~~ü@|*ðü~@@ããîßÃAÄý¢<ý£¢oð.a©ð<< h£_ᦚ~@îߪu~,u>B©ÃCßhªö*+¢ððZ©AA@ÃUZä/ö,B|rb,|_r>~Uß*>ýbªbýß_ßböaU¢*.Ö U@C*/rbUz|üåÜÃßZb+oÄ/ä/Ã_öB¢@ÃœZzÃœBß.b_vC:ß©u|ðvrrü|üUAÃ¥,B+ß>A>ßzau_aUZÃœCª|Ãœo:äöðu:>>aßaîãav.bÜßvU|O|ÃO£î/©ª/,h>Ö:~Z~azzOr¢OuA*bßÜ@ðî©+rAß~b u|@Ã@@ü<>rvðUý*Ba.Ã¥bªÜ©äu~bb+Uß.vüü£C<Ä@,| |vý£©aCa+ÄüÃ:î£<ð/Ã¥CU.ã©ZAÄü_Ä+ÃA:CªUð.bvU.ÄZU@Ã<ýÜB>:bh/z+£zh:©*vÃaßAuýaßãaah+b@ü<_ðZr|+üOð|ÖÖCßÃ+a_@ö/ÖÜb©¢bhzö C £îÖbbC¢ßäz/UbÄrvÖ*>aabÃœhr@özßåýu£.<åýZö.Ã¥h|:*ߪîäå_~ßC ªCªä|Ozaýzrª£U Z<.bCÃ¥< ß,ðb:ö*..@BäÖ+/+U~C~ohrü£@~boÖa/Cßß:£Cäb£îßB_+~îAAã_Öîo©rü,ð*ZU©@©Öö~üÃCÄböv C.ZöÃAhî<©u¢hvÃÃöÄ+£h~墢 bZÄßÃüî*B_Cü©UCÖbý@z/Äb,Ö*|ªO_@£ +üãr£üvÃßOh¢übC_,@Ã¥BzÃ¥*uzb ,zo_a:£ZZv_,av~£_ðÜÜz:bÃœa£_A>¢ªî~¢ä/¢¢Co ÖãvähåãÄußz_ZAöu+_+ðªß£©¢ß+,oAîߢ/|ªßðåÜÄzvßZ*ZªðrUbÃuÃörªuz>/_Oî>ðã:*.:©ªuZ@ã+Z_Ãœ<üÜßb,Ī.uÃ~vvÃœbîß/:h~Üß.ha/.*uöÖÄü~,B/@CäðrÖB ö@/ð~ãB¢îOý.ð+ZObýÃß|ZOÃß*î Z£|A ßbîý/£C©Bb,.©>oã©åuAZÜ© ÖBuðÖ U¢übhz+r¢ ¢h:ußvhãÖ<¢Ü*aba,|u /rðÜßÜ/ª+ã::vÃ¥,h :_<ü+oZÃ:ªîÃöaÃ+bA¢b*>:|Uð'), ('ýüð¢b@£.îUv_üß+h/üßUðã,~¢A@,üuý*Ã_<£übÃ¥>BöoÃœ+_+ÃB/ßöäuAh|*aAaU/©vîã/ Äo+Bzoýârb©ßz_.A<:>*B¢bã<ã><>:Ãö*+v:ã|bb/ðhö+OöîvU.,ðý¢_ vßza:b:brÃœ@.åýäÃbÃBo|ߪO¢åÃ+B|ß|åýîr@Z|Zz£ðßu*Ãuð£<ü£äb<: ,|,bü£üü_Ã¥B©rßCßäîîßüvr:/:Bãðað/ÃrîaîuÃvãUßßhv/©ããýo~©+C+ð£>|Cb@ö£ðaÃ¥Cî¢r¢üÄ<, oa.abAÖäbãߢü~rÄÄrZä<*/ßÃö*üöÄ££ýª<>oCü>OßãoB>ðbaðU@O@ãß|ªvh©ßî+Oo£+BÃ|ªUß©©>vÄUAzöA:h::ÖÃð_ããß,Ã¥<üöä_üz*£v,äozzîAB+ãåîbÃO¢.ÃœAÖ,üZßAZÃœ,< £©ßäbª~+¢¢ßÃ:_a~ðU©ð|_ åä.|+vah£¢ArubOª|AAo,ü©@'), (N'/+@Ä|ÃœB öý©ArCª>hC. ß>âCÃ¥_+öîråߪߢªöbvBÃ¥Crö_ãð_îß|C.ýö£åª©UÃ,bßÜrªZüåObouî,_Ã|AªãAb¢Ü.¢åýÃ*,a+<£Ä:ÖÃ|hð+ ðü_BÃ¥_<ªäî¢Ã/à zU+/Zðb:ä+*ãzª ßv>/z©üãvv>,o~äövÖ.+ ÜÖv*ÖAð£zzäý£© :ªZÖ_b~ßüü>bz,ª:Cv+>£ßÃCrb,:bo:>¢ÜUöA©B.ðüz,vüªUÄäÖÃvo©©åo_:ÃhÄß@ý/_h©//oü~Ã> äuÃ¥Z_bBA.z|z~ýO|zzý_+<,ßÖü:|ª~ @Uß.ý:|Ã.bÄßCoðåC.>_ߣO.ÃœCb@|ª_/ãýAbÃœ|OCÖ¢|>©©v¢ßB oBA>äb,¢å+ACß>vöhCÃ¥B_U,ßOB©ÖCã:Ã:v+*ßÃý,Äh@öaÜðÃU Ö.¢@bð*£_hîh£öðĪö£B©*Ã*,ÃðÖ:<:©~o.|Ö.uß+ãrä<~>~AzOüAo£,ÃZh+ý~rb©U|>@*örÄãÄãoßåßr*Äoz>¢.>aã@<ðäýöOa¢£ßrzbß*U.ýÃÜðbüÃuî~.aªåý_oäb,u<¢uvÃœ@üzßU,ðrozÄ~.öoÃœbªªªAðrÖåðZär>b|©z/Ãîb*aB,ÄÃß|:Bu:/Aª£ÃªÖ|ðzCba£UoðC>/äüvª@¢r@ðzUCbv©h~ßo~Uöå::ÄÄ@OüªC>u<Ößð b£_z¢ävO+öÄ*ªBýüvabuÖßZbÄåC¢ãßî*£>CöÄ¢UªO_*|<¢ýA@vrÃÄÄ~u*>~Ãã |b*ÃCýAv¢Öå_rÃœ@Cðåbã¢_ÖýåÄÖrB:bªv~>aÃr:Oab¢~aO.U_CöZ_£Uý:ߢ.oÃöaöýÄ£O*b/: ã~ðoýÄz>©ü@Öbª >|î~ba Bª¢a:ÖbOb>ßuߣbZßðC£Aý>rðCzÃÜoä.z@>z_üU_/<îaðãÜÃ/ZC£ö*zBC.B*:,,î£.îzoÖÃã©|u_Bbr<üu,rCäåbbBý+>ð<@©_vü+hÖa¢haaßhîä:ðöBÖ_¢üÜh¢v|UUBBüäýbßÄ,ð<Ãœr*:AB* o~ßC_~Ã:Az©<*bCBAC@îuB©Zý.vvªÜ.Ã:hÄÄOß.ßuãräðýåb¢*ýOo|Cüßå©OAäåOzoÃ_ß.ðUÃÄÃ,åß*a_O£Ußu~Ã¥aÃÃ¥ZhUÃœ+öA_Öz*Zu/Ã>/Ã¥Ãba_££ãr¢,b~ß@b@¢B:öz/äv~ÃOî/ßbÃhav£äÖ<~öo £:O>ßUÃߣA>~zuÃöü<öÖß */ßv,£åªåahCuß.r*©ÖA.Ä£/ü/Cß@Bý,>zCÃÄ|ãAîAo@ ß ÃœZ*Ã¥_uÃœC@örZ.o©Zr+ü/<©vbbß+ZýÖ+Oa¢ªr*Ã_abOß@C,hðübzh++äBavãÄãrbãßo~bAöCC++ðî@ZAA/h*CoC_ª_Ã¥OBa¢ßävO@|ß~£ýAÃœA:ääßßüu~uBýbß@zrÃœZ<¢h©b£ Ö:rã>*B+bbÖ©b+hÃœbªÜvCÄb>,äÄ|oîÜßuAÃÄÖîÃÖ/|@Äð ãbbv+ub.Ä:¢¢@uozö:~ ¢Ö Ã¥A+.üªöåoßuzãÃ_ãUýB vbC+<~hªbC~ÄBÖOUaßBßÖ~<ãzð ª.ª _/bßðaö+< ßbr@ub>zã/îv|êvb_U@r:ÃœvO£Ã+ ýäÄ*/Ãœ.£ßÃvBCÖå/vä+r£ö,höC*vö*|+hüä~rðCîO¢väý.BÃåãîßzo©A<~,z.oÄ:håühîzu Ã:AAÃ_h@A©+C/ÃœbüzßC¢_ß>AðßÄC:öÜ~ª~bäh£*ð/Ã¥vÖܪa+ßaßBrªßðüaCåßAbBåß>äÃuß©a¢ð¢vA+<|/Öa,ýCbö.åÃZ,ª/CÃhOã|Ã:Ãö//ð,ÃvîOüå£Üu|<¢©h|u¢A>@|îOÃîåb|£bâaaO/+u£|:ðî¢UAÃ¥_Ã¥@ .ö.ãÜbOvBßBCOä䪩üCã.,ðb¢a|>åý@©hÄvêO,*rö_Ã+᎙,.u~ÖÃîAa*rÃœ@Ã,Bz.ü:ªoa>|Ö¢<ãrÃßZßB<Üðð:ßuÃvü¢ã@_:/üãUou.ÃAab/rߣ,>Ä~îz+>@£+<Ã@ððBð+ÖÃüA£äbbîð,+Aåª|Chö£oböh<äz*b.h~îÜZvZZîߪ|ÃœCuBä_z//>ävhßhuýUB¢ßr+öÄßzrÄbÃbAßÃãð+aÃœAªý£Ä¢¢©î>ãü¢Ãb>.ðzýðüAhhB|ªhüÃZ >oAüðüÃz>Ãœhhao@,|b~.hrAüA@©öî@ðß_¢h@b@>ü¢Ã/OåýhðAr~ðCÃ¥Ozhbð,ZÃ,üã ~+Aa*A|ªß:Öãbb+ÖîÃöaé:ã,ý~B©åZ<*|.ÖîAã_+>bÃ_züåA_ãÃaã¢îðOª+:<ððoZ<@¢¢ãåä,¢rªÄZbaÃbhb~:>ð@ßÄ.uªßåh*<ÖZa.ãähª|>< <ÜãBãZßzÃ*ÜßaÃBîOz|UöUÃ¥oCª.ÃZbî~v>ßÄ+@üª*AÖ.>r.hÃœu.UöU+uîÃýUäBAÃ:O|>ä+_© üîð><£ðrvðb¢££Ahªß©_ÃÃUabü £ðZ,ÃÖðü /Ä/AbAªoübß_@*v_äh~U£ð/> vZý@+Ã¥ÃÃÃÄå,¢:ÄhBAAoÃœC|aäߢ ÃÃ>ZðÄßÖª¢~obäߢ+hu©åC_Ã¥. _oÄü©_v,öarª<ð©ö@::äBðZö£Ä~ö/¢h¢ä~o¢b£übîÃîß.Ü©Zýö~B/|U¢åÜ üözö ä~ÃåÜAåä>.ö.A:@äAZö>AbOz*@ÖZ aB~Ã|üãAß@öbĪAªãª.U:ð©*/Zß./_UZª_ÃãUÜý:z/hÄ>ð*Aäb.UZvo.ªUv©:OCÄUOhð|ªÃå*ýý+vÄA ö|©.îh+O*vUý@ ýh /< Ãœ.:v,_Ã¥zZÃœoÃ¥uðÃÃ¥>ÄßBßü~z+Ã+AýäAãUÄ_@C.a*UbÃ¥|C*Ãœ~ªC£¢ª+_ßãoåÃoãz/Ãz£@,rÃœbÃ:äÄbarAðÜ/Ã¥u.uäoÃÃü_zO,Ãœ:ßßÄvr,*|öh@ßÃßöäÜ+./u bÃœ*£@ß@+v:ö¢r.z©~A@£îîuÃrÖ,~vÄðäo*ÖUðüüÜh_Ã/*Ã,:Ã¥OÃbýåähðU.oßÃrrZªaBv >éö+*OÃœ,@*öÄBýääv<¢z©|ßö:*_hézr_©A.A@>öoäåßåüBr/Ãê¢Aßhãaîa¢¢£ãbÖo/ü/ãÖý©oß©Ab*¢ª¢Zð©ªBÄCöbª©ã.ÃBOÃaª~o+öOboCBäCªu.ã_aÃœour'), (0xFBB2B8D1429F4CF743301F5AEC311F7C7F1F62D59F958AF667506C36D2FDC59F34F4973B8E17045382F4769C1ED8B2126F4FF2A8F564B86528C26AF2321625466A7F25F89AE4EE681B0E52AA1FEDD88F9E59C7830A1DA9CF3B3112CBAC12216BCF30319EB2BA778A608A8CE7110E453AEADB53D94FA23B4DD556BC69D122BB09EDE6DAEFBC39DCE4E13C228090C2BD2CECD7E1D1BE471C2CF4E4C85BFD0EB83ECF83F92A33567EB0FE6FF71280BABC1398907CF941E94AA5CAADFAD77180E6D283E3B10CC992F8955930D34E5009AC3A28B5C36D91BEFDE5395360855BA73F7D89248E9C09AF490597E7A01016FC55C101C0AFBBBD7941C5E6CBD37532733AB1F155C52B7A1030786BBDD5AA1EECCF3DFD9E849BF884C00FE3C9B53DDBD3D323ACEE1FC1362A47F18F364FFFA396A6F9FC967894EE9FB96D94B647B05AF29C97EAB1FE2FCD0E06D257930BC134C06B4D22BC41455B3E350D35B12C80E297979D99B715F198772CEE90A53D5B93F738D34AFA8D9EB1573CAB7CF0FA1BE186F0C0FB6E287CAA79B5AB8F53B5B601D9793D795835E809F9EB427B6A74A77C100C09B57D6025CFBC29D145E10E5DA285A9A376BDA2885007B60282E50040040D2E7F46AB008479546DBC2F64A327EA8E9FF5C1D131BF6D84B9ADC65DA3E9BBE9CC37B38E16F684242A2250E559EC648E18F3450A7E33DC6F11C2F252BE1BB1830146), (0x745B77A9709CA60E6F872ACC493745AFA4B06A995B437D530432660E71CCE41255F81ABC7C9C9AE28CCD008997250986D601DF50DCFE1030DE23A43E35979DA2A31877511C88320716870C8E43F3BBDE28E0386FED933656E8EADD58F75BACF42F5DE67FAEB7694DCFD73A54F182ECEA67C615555F2EB410E2206932ABDA0FBBDB175EE50D3C307176EAA01558E16566FDF2F03145569401A9D69D8D4E36A2F4C87F79D92306DD2B96A4DF758E9FB700BA0335B8E9DE7684825D3C379EA2233F47AB4DD9688C42F615C59AA0771F72091E9CD24B01EA0BEA09F456C5C9A68CF4819F2DE251DD982EC03EA32343D50D63EA321802CFD73E5DA063D073357C2C6F38A61ED8F28FB84104A48AC246E7A633E7F3DB968D8A24A960CF42EE0C25F8431134EA9CB634715A7AD7FD2B4C7B17B8BC9D8B42A196E1AE827577224DCA34DFAB47B012FC0A7CB282801CB68CF95DE4B88A316F99B6A17B523C1A41BD4E0DB0A21E8005CB04BCB220D9C0217A2A228918926AC398C545F5A535C0C0EF3AF533736B146D795719B3CD7F4EBFF58001271A91292AE34A18DCD98B5F9544FCC2E5E48CAE0E16B40FC079B6F5197785FF253398A65E11CA5028533794EEF8836FD1BC68DB68D2F311658169B02D55FE65538B3A62AC5563D4193C85BADF2021C8F646235C0EAA9652408640DDA81922D354D14162BE21C37B5893C22C4D3832455F), (0xE632A257A9F4E7222515862CFF19B2660DDFBF09D583A7037AE76A050854FB7D065F3CA1B27A976DD6FE9D66D267C2129AD12566A097E5628A9EDCC18AE11AD11A0825A0DD10B492475133D6E540311324586A362F95DD6F79D916139ED5E3F4E4CC4CC9412234891D921E4E630F7D496DC89C3177E3A2852BB62603FAA0F4716E3FF119F467D20223E0189C768E0B695CCCA6D538B17D0029C79D8AFB308F7D9DACE0241E635505F69A0D96CB050E9DAABCA72DFA1F38BCC1F0EF2DCA4706F3519BFFC9ADE64BF977A0DF9EA3E63524B800DF3F8961827E7424622E73273BAE941A45300544EFC371AEB6593F9A18DABACB74C967C669EF18815589831D854F65300989A1041E73101BCDDBAB293ED90B8773A7B27146CDB1551884EF6640542866F40E918F39B6AD00B84BF98E43EF427C7EFBA9DD9CF3EA3BD74CEC9984AADB79B245342F487B4EBDFAB1B9FBD42212284172E844AA4BC9012455B8EDC9137C0E6F7FDBFEBA133402ADECE2EB3AEE66B439C35711C297CF677B330AF2C361F3E635AA8B5447136E2E3EE597BD68DEC635EE03B305BB6A4BD8B074828708413F4BF8FBB58F63126D265529D2DD0011FF9D6CD403C0AEEE2BCB5FB3A4D391E625FCA64BC46C2937D2DC958CAF92976ED79E74E51A343E7E9C0AD0EA30B06D99946F04D636B44C92743502262A213E9833F0DB055EACCBF1BE27AFBA9B3E06216FFBF8408EC1372251E270E53118547ACC37B63FD5673BE8A312180F0592F7352EE1B72E29FD0A72B9B8B47C3BE6BFA5D334EE6388C74C07C00F9D7BA9271DBFEA3BB750612551CE2D43861CB3BEACBC53723CD0A493AC6795AF6D195F8FC9919BF591002F6F44ADE31F3645412F530162E02736EB4C1A578E50BBB1B8376E9D7AF481BE2DAC8DE32E8FED845C6725655B6CB67F6792A64EDA3971DFB492F4ACB199CA4CAE95D4B65343085B5F96FA272A55564C80EF35E74E33E4F33BAE2F9C9A40D3C39CD9B7C697002B248A4AEE443F4AB55E3CA82BC264E3FD7AB0E07BA5146CC11EC3378A509E8FB480C3115D0445A0B4F1F9D160F115115FB9DC3C16B685860F1D88CF8007BF64BFACF4ABFE5285F835102C89AB430CCF09B2D8D0736279FDFA3C013F7B751FAC319411B3FD6A120C34E306058AFBDACC11B9C5CE2FEFF15D33F6B0C151457CC0F07F58173158D29E9FCB9C8F5B7373FF61352EC2AF507D41A3B38007BA50BBEE6746140BA2C39AB8E7272F63536101BF82B05F1C17B910A00117747DD8CBE44E0FAD28155F685D9E9A75DB882119EE42B2C1840AF19FD6AD3574098B4E1CE01C42E054A538EB601A53C181A2DE877FE82932CB1746DA5D70D77BDFEA5FD14F7D94BF4540C54809C66069B62F1D34CFAEF521621C51C9D56882E3CEBC0C75BB8171040D1E413E22E02805B6DD232D52A2AC31F53E6F332CCBEADCBEE17A4CBAEBAE34BE1926B06CB7FE81F34B12F74554902B10DA807D113DD84133657F4066DB4ACB2FEE6F397CFBC53E3FEE3FE0B9F29769514E3CDF6B30228040E57D0737BD1B170047C856E557AF1415423D23FEF78840CD16EF179F6A60FECBEEF8967EBE0682D227DF722A4183F99F27CA28F3FE82495D3C3920CD037896E7C98AF75E1896573BBA51D61815158B93F57877A0370BCD6BAF394184E6B4CEAF498B60B78B9B869173ED38ADAC304726AD8DD78B00F5AFBEBD8CAEDF54D254068226CF8AB5D4075AF2E62C49D21FBE7EF21BD658DC43AF53DBA2F9FEECA73CA098322A8561BC71D9857D9819C966EB9DCE2FEC39FCFC293F777BAF12DA086D4BA98BB0A0F4381D35A9FDD25FAA958A75B65C30BCBA03A49C08EB0EE50D5EFE7D0F4D703DB54BA99512B68FFE29C994E2F1395C7ED7B190A6E71397092A37284AFF554F5C254CBF6BB39BAA0374A5733E562BF4D3027FA55EBDC956A1B39F6ADB8E44FFD37A38BDA47AF0CB3B068C3241A058B2FE4355487FB0F09F5BF61EB71330CF752FA6A0C41E6E4F5912B36957309714015AED6C9739FC7F23899861AE5C38B80B3716029BFF94938FF3FB35CB46986EC3E11C5D25C4373C33267C3A860CA0FDD9FB5E1F19957901C659DCA33DC6B3DDF02A9ECD3FDB924700DACF7482590D8353FE5CD0E779542E671B96CBE793FF6C729F495C6ED3BDFE69171F3FC5047E6C4C59503E6AE3F577D56F652444C65F6DDB6202E30FB1147F415D66D0591568629C2A7F8D42C0028EAAD286FF6D99B9A2B7B16363029B5C9A45D0FC0C7C241EBF0602871A47D22A1A6073383D2A1512A8A3C419A7B2056001CDE54871C3F51186B3C7F86A119F5BE48749028E631E6F2FBE5468B80B760D01A2864C618AB9566B61B189621DA797046934206802D19DAE7518B26F8C597B3DBAF6C88A53F95ACDF2972DB1940C1217BD644FD655A4FED1E89DEC7106E7DE08364CA826DF0CB16FD952766BA4EC1968059BB1270AA4E816F8F7A1B50CE9C70AB8257A4864EC37B0B3DFFC022D932CFC84846B6A36B7FD9164922EE86BFC62F08B6CB27F71D003196300742AA7E5E864CAA530887D5CD40127E8E4D2BE4F45B77D0C77C1E0AD8AB38052073542D3EA7EA9C91EC5CBDA732F97B15788EC315A13BABDAD9B6E27831C1A7D072A559EBE53FE6628F5317FEBA29847292F5501C64EF7F37A84264E0F824502AB4DD248DAF9F2048A850965E23AD10A0326FD54C618B6B8326123392DB056A5AF2FD49ED04F6D303C51774145921040B21B4BE985F03B9296191678D5B8D6D92F64B6B366333AB3B8CD1874A17573A050E38612656C20BEF34107B639F55A837B9D11E0DB5DD97FE19730B7D8C7F120A67527F131C474C244F7BF242B8479C37395F9036492C4F2090731CD3C68E62C4FE70FC3CD6851B7284E9CE49EB4535C1D6D4442CEEDBC13B034E72A92A786DB1092D44474B6F50A4341DB15F5E05455B3D4AFCE24A45E622AFB129980272480C8C1D40CE00FE7677839FF8C12A61DD0E09276BEF8B7B66C34721978A35C891C1C5A4C340B4774A4ED4756EBA4D24F83DE42B8EDB06688110B67D86DF56EC41CAFE36FB759E9C4991DD2D0B161CBC76123969A61A39B6BB6D23B28A36F07AF7E82393BC1629729F47D1FD0DE95D6AF40A076495ED363781377B9E51EC021291623522E278F06FF8B6CA6E484CB8D20FB8CE803F9BD50AA1FC12749A9B20B345CF5B9BA42A888B09976BEF22D7FF348EA98E991D71D2F58D3A80E6567BD56D96171888E11D2DD5203376A82FF5D7CA0CDDF5F10C8795C3EC661E79A9A2248DC20E591BBF7643617BB968EA0B3AC58752B6D97885D4610E71549C8B0EB42B8E0EF8D621ACCC0A968A9485531EBBC8B1908716F2C8AC07EDAD4AAA6AD9C852B78DEADB1254A3EA96BC42FDE15F0DEFC59BEAFA77AD38C552E0E8845221AFBCC231CDC533D0B65CFCAC703675BE169E9F5AD4DEFEDDEB0A451578216C1F88750C862BBF8148BBE4E58DFDDB2CF24F94CA59E5074CD0CDF456C3802E5884E0DD140B39EF92670D56AEFFE970D00FED42C5E357122A81283BC83758CDB89D8C50AD20C711C86002635C9E584CE74D1446D63D58753DDEA282D2FE176B0E3F9E116398C3BF48CB7A65D0F3B59C28EB547B1301E78B351722CE7E344ECA48A7551D0046E94E79650E1AB2E2A43A191659F7A9AC480C4812DC5C760541048CB02D299E989BE1F205F1AE03DCC84272E8B557EA4720AC5F58D4ED6A8CD87423F99E02C57A9B708A7805A3AA99F87B4A89E99D4FE92A359F80DA45C3AE77652D8D8A0A3EB58D084D34CD72417CF1C55059A2D0A34B343ADF587344A045BCEBF090762D1FFE4C850CE1401B1BA7F4128F14F56A0B96C1E2494F3AD6423867F787E171B106D4A5621D1DC3C1FB192F276460B59B5042E059CE83D3D0B36642D48958833A36431BAA6F935CFDC2FFE720200371E172CCA7450117E27300D4AEB6CAFF48A295E4F121451B2BCCF5F296DEACA3A0BFF46151BCB14E391E60A8A99AF4A622C3A7449A3B12509C67A0DA4F1E8103D66D23EEB269AD9BF147BBD2C0AC7190D84FCFC3275809759DA3D4EA0BD6FF1A9D5CC23C6705E3B9261B43527F3F8FEFF610020F4ECDEC7E53BE511E94C3902A48914563DA3529D26C069D1C14B6F66E13E4E3FBC4FFDBDF7053D8B8A4D524627B1909DDFA2C05C0E63F933820C059ACC7F2FAAFDFA46558C575F3865C712D86E23A90FBBD1863F7EF2305855CA3BEA00A3BF0B1DA8492D6B3B11884288F6475121C45E62F5DFFAF8F02C0ACAEDFFC21C7437C20806BBC6DA7CA47FBFFEFCF6FCE8073405DC870AC4C4132C7C3E637E3B4F6BCD50343F4B65FE84E6515F3AF9F4350EE1E6CBBC3FED2DFE43F28E4A9B18264470922EA6C7A8BBCE0658A1B8648919384630819770922CE02236FB58D7B4E8CD2B1BCA67C58F46382AFCB5E74B7499BAD856036A968ED3DD664E8391AD62F7526FD38D49BEB273B6EA486C74DC4494AE9C417F81B07E369D47ED00760CB48BC804637778E750FB26E24D7F4E215F0021B9D4F56BE276A2F19CF001D1B2FCAA36BDA46F79CD1CC74C45599E62FEE87BE7ECDEBD37BE20E58EC085DBF64E2974E5A349917CF086549C0DA92589D73FF3B37419E5D33F72779CBFE0B94740D0FD1CE5B8BFB457FFF7658A202A15FA5BB6809228823444A1A630D2F4BD0FCD0D5C3DAB09A41F803E5B75227F491E4861A2632A38B4184DC8D843118EE26342E8987CC4ED6AF0B7960053CC0D12C45788E8705159E4945844EFE231600DF15CF73339E7CC595AF7B1AC9338614B40B613EC89A67212E803032480FD87BF57890FF7D4DAD8DD8B2E8D789FAD515CF7F8AF2C1D74844AEAE54A35E3A7D95D70F2540A28697666DD36605A18F9723BB2A72D874E5AA1E204C40CEF8FA2F9E3553008AC5846338D81484FE7132A32F1720F833C7A510E15517205635C87D63A3C7C05E7F0C6E26B739F05050BB9CFDA921B7C801FBD690322F25BE640D030FA7214AA97244A00AC2C17C8DB4B080A97A32BD0410B561A7F1301C5FD6AFC2BA36E0B93F60F37B5481BD05308F48DB719E8C34315FFEFEF1CFA2B832384024130EC256C3F7513886B7588253A02128A8549AB15A6B815A37F1C76FCE3B492C4188E221BCF2178A4D53BD89F77C9B419E7A0FDD9D8ED9A77D681EC23FE17A4B6E3C30DACDFF6BB64D106406BE0762CB6675C1442B6B9EB2BF3AA454D3454A6BD9621BBB3BC083AF0E59907D1AD2E975F5536BBA10262FF2AD8E1B835B16D2F7D6082D5BEBA78F95F22235C1DB1197EC413E5F8FE9805BA342191DBDA4F043F78698A712A59D8A5DC3C5B7EDF05E278BE63F321CB7431E45AC7A19D299D1F101DE4E4B327A7536B3A401CC13C87DB2E3F191C775BE3730438A51662B83B7C3E1D4B60FB202E50160F88E78B586FA7D3EC725D0F81A7B43A70DF7B8291F0B2FEC3DDA4F126E00E10C80567D3FCE7ACC8FD437646DD6CBD7597258A41B2CD851FD5E8C77ACBB6AC0C644D467B40E03E8833B2854D7A6C2157202E590155CC5DFA7F48FD131F31FD46966AE190254135B6E6010DFF4837A568C670599C5DABB697EF4BFCF7E32A6901B53EB70F8A9132DFF8A31A53BF5DB247A2944DAFD760E9EBB34AA0D9443DD3BC980B4A098095DE353D7AA3BA9162D79199B4554EDDB9295455CC5B40F0589ABBCF5EBBB413A8C70DB617715DBD2F5951720E3F90E885DEDFE1F5B4B4399D45E5DFE8EA32A7237EF1ED4797C647CC9726720ACDE1190AD24A80DBD21DF412D318D28C7DD44427AA4F904EA2A0ED1797155E8D422FD063CCD5159FB2CB5161FCDB747EF4BB4FC2E14B607D51CA67325C6844BDBE66D0A4486EC0A7BEA574DEFE2F51C72C6F23DCC69BACF7CF5212016EE3434A8693A2960ACF3685FAA7033CD6817F21789F05ED4468F722BAD9D5F55BBE39DB6129586A8CBBBC5D389DE11E976F204ED2F189CEDE55061E9C7FDB31FA402A3B6D28DAAC291594BCE3A8B4A786D88A4BB887226A356BFC0C2339CE0DE08B62F873A5B16F947325BD5CCCEB36A15E98C3F49079731EBF06012BCE88EF4787DC5745BC33E1261BB64462650E6980C66AC4A10A185011EFD9B39FAF43C6EA3575D4F093F0E52BB69CD8D93410B8B19C816563C44E3D6E8C4555E2804277D8F0592CEF3979EDD58599EA6D4076DDDE2102022EDD6226E63866644D9B03AA742500E9DBE3C97723938FDE2A64CF2E156876C17D4048FA8D3246B6D3149F3A82EE76473F8C01FA578ADE9B4D84FC8269384EE424412D34DD055CA89D12A40EF3555C3BED87EE88677B69F361ACAC0936C34D9BC6BB1540C1416A3A30595D44E6CFA7F827C094E149C57DA9D839D230585272D9C5094838401B7AAC1DB4580D1E240D9205B4E1762F6B51003D6C67876F39E1DDE7837FDD876FB70C46E8C4956D6F8AB42C402BA471FBAA5AB748FAD4B3F23DE3D37A269BA5300A95FDD53046A6BC92CEE1B35B2E0E3C6CEBD824253F75E35853ABE1C1F349EF0EFC3595A79CCB63B3FAB52CF300960ED4960D3BC2800ACB20197CDC9BC4FA9F85F1A55FF87995D01F74702A8948EF58BC9C0D2BE50D2D8EF169748D1FEFC8EF0016A7025B37155A003D1C4D0FDF42D82A241FFEB7CEB977C3166D8F0508B12FAC812A73A1EDFD8587B22BA7F1DF7E12279C63FACFC937315C2F3E44C98655F88CECA18EB4CF363C27997705A31186E4985B6869A5B660E24AF91672AFB8BB005C321B053EF05D576526D23652318D4BA95AAB6E1EEC52D58CBE43BBB9C38D6EDD76A870F681A5A7FD10037EE32990186BCBC9550D4DE270E045797FACA29EA2996458DB891C5427B404710DE9D3F1622D2B4FEEFA386190943890B10826FB5B7161E57FD1B58E4F76A1A108DBD4860C5316518152B0A76102C747518BA31F8E08159C88EE7290789C0077599758B4BFB1845DF1D47908C1B9847C0A6D3DC3D3811200C638FE1DE185D9E552384ECAAA1288A007452EB98F0CDACE6AF5860B5E3CA3D78458EE86B2667C6BFA94B6886BBAD2F7E59DBC8D525970B95E2FB3EBFFCE8615957646512301EDA0C8C3BFFB565163AF228E25C17F15842BE7352882B2916B2C0DA0F3F57481D4E4AF1CC58F9975620CCC03C970A8C4967FF11B69EDD86BED375792EDB55D6E3BA1BA41126350F59172D21CB6AFC8FB84490A74035917E60B432E8D380788ADAE5EC827B666B1322EFC89F71ABCB53E6F5B0DA3ABE96AE289D336CE34C3BC89EA256D57E6A0441E97D74607CF20CC4F8EF01DDCFAE401C5F3E59EE230E3FE6A3F000DF44F5D57CF17EF0CD3A263136907E64043A6DF8F0523A764010261EDB4D9DBC7CE13D7FF31994EC50AD82E2390D135DB49A2BAC4607107D0A8F856CDB50157FAC69B455530E70EAA581A842DF584D32FCD86A4111E17675C0B0657384280100980335CF48CDFAA62940F6C46EDDADB242426002E5D46DCAF34E8492A8FD567D7097BACC227DFA2EDDB427D0EAA216F302B33131B80E1AB3A57ACBFA49580D2BEA7953C712E18FC458412521BC9CD04137818FF5CC24C5628CF716B7A1FFE585B6FBE6615E4FD021237CD976E8F907189A8AC2B7C8176FC5B3E13A2BCAD812685BAF7AB0A67EE2E7B16ED25F4B4E8993F00E1D272D2DBDAF9C10AD7D15B4564B5A711B398E46621B97DB066945008A7567A62BCCBAFB3B3DF1DB1495C175D1FD0886F4CA235005A99BF18F5227545A8B9638156F8899806F35ED47A321DC5A21F90950BE1BB05207907230B96BE9069D7098FF996072747EF6959436086287BFA76D591DF39C7FD5D60DCF0658C6F35CD6AA3298DCB0C18694D1B7862C1C0F3DFA71120E9FF899D41929B352A36E163F92475F5E2FEED2E6ABC27921D4F9A9CA0E811BE7B4F4CCEE005E7FB2FD6EE336CB87F3E4BCA11E0B9E2B62CD7F77FF2F7FF95412422E7A9D8A715DC17F2FE93CEF42565CF5C51D5D7300498981FF6E986F4033040AC0E49D0D566A3B534C9C6E3225EE3D21A229BADC06AF41E4F10B8B12B5622EFCD5322E5DC94FAF5AD20A2673EB576C112176CD1678380421A2B81C4ADF289DEA6D715CF3CFEF68528A5009FC78CDF999AF79E14EA50874AD3E0CAB0133648BB96C4C1679FA7851421E6A9C283E07A8E4BE729B65374F4554FCAFC5C334572F15D450802CB78FAF3728AF303A6C5C7F2653C642B0C916721D06B17D4AB29E0DB74B8643DD777C2D3ED3644C981F0AF8A0309F6F6E046E5CBDDE6325F61254849A9178FEE60891AED79913ED54D9DA0DFBC8DD1A132EAFB2DD29960F0456371C7EEFB206960C02A79EE097C4E080F7E404652A3D453A616BE1C621BC72929A8162076E7527D367EFB6258B2296DAC25C31A20AAF2BF9D7347E4614DFEA4624FC461652E91272BC210D3A771FBF4ED516F3C58AC097FB5578203A06E1CE87F570008EDC7077E939BEE5D9A1E172C7853F610DEC14CB64545AB0EAC8E87BDA527545071F2062549F0A9BDBDACE4963F558A4C770C0ABD0A49C3A81CF9D2051331B773CAC7BB854DD0C7ED188EF8996014CF56033A45991C9645272F5D094F1EA4A98CF471CC779A05FFA7451CA57C51294707297B01D8EB1E5634819355EFC677CE74E56BA5EF4858BBFE3A9E5400F0C9D606160226A2A2D0A0D51B97F606AF10E0CE4D3197E58458BFD1BF039E4DCA5643B7BD4FD8C4502CD114CBCFD4B061B54E2ABD85B2BF32F081BE4355E29F32530BC4533E485F371C7D215F821AB4840E6F0AB4739044A48484CDCE1A81FB4932E177C40F5C236CEFF2A0089060AFD6CD3934E6D8EABFC3C620CFB97B911D9B82D82CA1A2F075B24C9DC581EF3C1324D5F600E04C15704822B4FDEE8C69F05DD40485B7330E33DCC4829A3A243DD38A0CABE484903C4F6D67E37FEEF38625E2AD68ACEAB75CF0C6C3241BCA7B3624E4E072E1E1856CCC98B5174F4F8E44E93E5CB78DBC90E9D3B0BB1DC16C2084F231BF9A0E80A4445D409B14349F0CA0387E3ADD6DC3A96754F69F312567AA607731251E8FF3366899185A4C217CB433A31BE5423143172F88584617E0731EF5963A9C037AEE104548D14355695C46D7426C8D0A82682E3419F69537AC1E8826F964B6E6DFB0B9B50AA0FA5FFFC1C52B116ED574E514732E0C68E98358D8982A491D5C05A660F891B2D7FFE26ECF34583069253D491440E4F088DA76C7355D3207D016E165C085B17643C10E1491C03D339153EEB35AE035DD77141E8581CA7C7ACDDA9EB852F26FE473C7055232CF5FC89D4335E26E7FADEFE004EEAC672CF479459347B62184E09FE30A3F92DBE2AAA7B556E83E949A0C4E2DAED84E03C37D47D38B0D9E88A8A6196296FE633F1A13FD5947F61043B6E4AA86F98973AC929B208DF7BF4FD50C1E0DB0CFDBFE9CA80E129BDAF4BCCC6C031DA662178E1E326DD0FADDD6485BC3284D28E96074DAE60EDEEB76D7D19EDF5420F3A2A972F490EE7D610A04BED1C5B7D7B2A693E20B8F42C05439A3A75A9B321B89B654B91AB55998FBE312CFE24F0C25BF001FF74B7114645FE81EBAED4622C6D8E8351B70FEBCFC4CFBE7287C72DE042C7DE85A7B3AD017A1F05931969FABB5C14CF7F91AF1B4C14322AB508AECE8EC0A198D6F5DC74A9D181D7A80A48B66AD503167307BE4EA3BC82716588F808DB4076C277C113B57F90159E1FD76341CB8BCFD005885B770252F51A736B0F10E9890C5783863E99B14DA6D2E2203ECC5940B5E9C9180342F4FFB024CC09320480F4A486DB0BBE455D362EB7E17894E21438C132B52557C185B96283C619CDB80B9251FD8BA7F14D92709C92F94B617C6ADE0093380F5F5BACD30111A92A7F336876AC4F26A7667C3773904498C4D83A57E628E8092A7FFC32F640A896DFA477F1592A82AF1255C377946BB47F1AC2D80AD6C9B301972A4DF6A01C2056CDD557DF28533FAA559B3590556074CEBB8D2823789DC015E1765A2EDC8BFF06257CB9BF03E546C7833DA53B8422AC26B58F3B22E3FCDE200531FDB1F910CDC9AC3F6AD8B6C5BAD63660A03AE89481BECA23795D50DC12289E99A9D1E794CE727FEB9F54C7C37FEFC464EC835CA33770B03EE7C5976078D01D323A1D1BE8EEA1922DCB0D053CF6F6B38998EBEF9EDBFB523921B8AD08DB0F62CF37958952D3EB763AE12ED82A7B7347F1021DD78CE08E564ECAD2C736049952CBAA35F5516D60A5AD75B4ADAD2337CDAE60BBF6CD37D5DEB93F4A980124403657DC1C80358DE683A1682A173BD0B91B831518D548A28583C4673C2212C8A479357E45C116A788207A2845650DCEA2E8763F04EC0B6AEDB55688CBDE41C460E8B3B0E1BD8AE804EB8CF85B105D108605B453ABE3C3B87DCA80907A9DEBB9DEB5B76CB15CDCE55D9E2A296F131FDD6835F2C619FE188D14FB43272CFA6D66FFC3299558F06F3928CEF61DB9AA596AAAB328449B25AFD0AD3A47B619B5B85320B3299BE97A7467C6C99D4B080AC37A91E87C79C228DBDA2358F82EA8B92F630692ECF670BD71204EC08DD18864D8A276DD1431494E8107E75F78908255BF1DAA3A34651DCCF9E4674C2B01AB0A41BE7055A7DB94EE29C811D51F2134E0ADF90170274E207384B9D33FC9FD138F6CED0DBA103CADE378BC107C4348BDD8AF86AE32003AD2F39E0CD0FE0865243CA4927832138AC0714B2DF77B3DB4203BFBFA90434EE18F220A1A2C135BBFEB1397E3C7B0C08BC524C63CE6E23357C5E9EC94F20DC4D0EDC3134628095EBD159B32E3E359EC6F7B70357B8D01FA9CFEA2444226C6BDDD4EB6F5F4AD7A53BBC609275BAF5F746BFD8D1971C85953EBD8765775B51C864EED65953C53E7B2011C79B573EAAEFD9F3DD854A9AD3C04F5531A2C3712EE06A982D87E39CA481805CB18554EA3EFF13978C837DCC7EC91A1509FD939CB7AEE3E730BF10220C3D4F5C05EDE94D6B6517318F2CE5AA629E19636CCE92A6EDE3A503A26DBA7EEFF08A4F3420C790E0CCA9A4E5620C8BC8388491A5ACB63EAAA86E2148E6ABFEAB98429FA1967641D78983A024EDC08BD61A3A6AE828D9423A4CA48CB2A548FA21ABF94D206DE932C242BA1C291519BDE7E34A2EAB401582BFFF6555F2EA8F3140887F79F3736B683008A8A56EBC182432E6A4CE5B194EE095778D2008943FD7B288DBA196A0CA7378E1FDA398701403E640220B45C1D626399EE37CE64A609CC8D0F2E6E0778D911C3056791CAB4725628A3AC8723392F1B1B567F8BD4D8D2D8160DBC87D2E226EB290EF156B5D0A8E56BE195C10982A943E01342B1095D4CEA328F8BBCF7FA83467CB15E1447C8653AA), (0xFE34311DE936468A7BF9F65E1DBB207243654EBED716E4F44482484FC17BE08037F4D69A710A0F8589F42C3B706DF826240A42EE5C19CAE8503DD966EDF7C90018762629E586003856C935E2E9A883D78A222AB638F2241E29ED493431A897922B2B23FA46CF409E0A099892E3E7FEA7B901DBCBCC12C7265108FFF73CCB07AD32A3B6BD858891BBE18CAB2E59923A42EFA27B2FCDCCC51864FDA83ECF49623E02EA5F40304022307020E9406699CCBFCEBD089A50D7E066DD9E5988E053EB98296D2C6E32FA11AE7F4ABFADE285B1CA30E8701240C8EE2A0AF96292E699501D345116F96C5D8DD3AC5A1A0617338457EC8F57F7E3D858617E026438977EC7E6FAA278916FB85DD35B9C66E5ADE812D7750AA65741583A5BF8B47B6AF9543C2D92340B75BAF2E83431849B467172B496EF8CC38DD770A4A1681C98BB3CF3D90660385379DC9D1C82227226BDBDF3E98600E47B6C90AE5622906A0C9E5A2CF73EAA94E6391F3AB9526F416B654AE6E4753212BB58786D76B1E230E971907E27F57BE812280CB066C52B28FD4F43F1D8A986976B48719FC53D1E3556EE5048C1F01976E961D3BC6881ABF52C4F6F266EF15840EBF913DE83DC22D509D75A7774E2670C35CD0776D5CA2EE99D7C7276CDF8C66496105CC7DD3AF20D3FFEB2912733804AE863F1A0EAE16A20CB29410669AB071010F5E164869F2FFADAF936D6179DC269FC288E6A07267AB4A53CFCB3F9ECA393F7A18031521BC34833F6C6F0AB94082D67D80A411D9C09EA7B2CBE49A27C01EE56A2DE751C9117E0644537115F8A091033CE4B20E162765B9896B6265C79A6B7F4D89A08B59311D6C029DDD865F88AF022AD16D330E00CF42C83DD86DBF083EA9E7F1C87F0015AA0BD7560B8849EF59F0BC504AE63D28713CBA6DB32B58AFBCFA6F239E5DC020020537616BA80546F8E8D3D7A15ECD487CBF808BC4A2528EA327A901292640FC308C4E35BECBCCC9377364DA57710E5E3D16B6DEDD346B6FA2A8BE340F042DD297D7A725109789A0F2B754413D883732294AC4026F722F0C20EE83161D98CA235592427FD9D94DA58D15EC15D01A322A718C0AB4301B6325B8AAF43204738359FD30FB9B35B758400D2E855986092C06AC5894818E05E33A3F1CC73EE50B9119828228AF2E96E4BA23CAA70196199FBF7EFD85ABDF01DBE74DC16C28F0296B019D7BC703D08CE81563DA6DC36ED1A4257D17BFE785E53A80B641615D3ACBC9FA5FA5742A429BDEF2157037F49408886C1D36ABE879837BA831464D9F2B8ADAA8106373B96D89D2E138CDC205BD35ECBDB8F54FF41FE180CC29DBE8FC5E3FD69AA59FE42094CF0E9363CAAFABB175FB0B599FD6263AD6883EE2A79F9190D68308F727601D41CC28F9F6AC905541D50AB3D0DDA2BE59A05FCF07B54DED3F6CF28D3796B49A05DDB99), ('90487073-abdb-475d-b891-7e3a184665d6'), ('9999-12-31 23:59:59.997'), ('2079-06-06 23:59:00'), ('11/19/2008 1:26:51 PMThe quick brown fox jumps over the lazy dog0123456789,.;:?[]{}()-+*\%^=~!@#_|/0111/19/2008 1:26:51 PMThe quick brown fox jumps over the lazy dog0123456789,.;:?[]{}()-+*\%^=~!@#_|/00'))"; + break; + + case 4: + $query = "INSERT INTO [$tableName] ([c1_int], [c2_tinyint], [c3_smallint], [c4_bigint], [c5_bit], [c6_float], [c7_real], [c8_decimal], [c9_numeric], [c10_money], [c11_smallmoney], [c12_char], [c13_varchar], [c14_varchar_max], [c15_nchar], [c16_nvarchar], [c17_nvarchar_max], [c18_text], [c19_ntext], [c20_binary], [c21_varbinary], [c22_varbinary_max], [c23_image], [c24_uniqueidentifier], [c25_datetime], [c26_smalldatetime], [c28_xml]) VALUES ((0), (238), (-1), (null), (0), (0), (1), (-100000000000000000000000), (100000000000000000000000), (0.6392), (0.3463), (null), ('ßÄB£Ãrbväî C@öÖö*ö*ZîA>ðoC~*v:|ÃÄÜ~ÃÃ~¢¢Öbýzhuah u,:ãîã_r£ö@OªZ>î,Äßäý@>öuªÜ@OßðC/aAbCäßðb_b¢C/oÖ>.Ö@rZ*Äî>ªZbAaäA,Ö~v:ß@îåß:/äãÜ:aAÃœb.ðh© oªU_äa@uªÄÃ|>Aªu¢z<Ã¥vA©ãßbaUߪ:ªððzOZ*aßöuvCBÃ¥@ýoßߪ£ÜbCö.Äßav.ýUb¢|Ã/ðvZÃöbÖ_Ãð_aBýßäöoÃ¥OUä£rÜÃßZäavövÃî_zöãa*.©Üvýo.o,h<Ã_ObªbðUU<©Ä©~Ö+BZ_ýzäããOåöß@,C<åÜUÄ_ßðUA~ÜäÃüB©uß åähoßÄ*åÄhCÄã+rãî*Aßv*zöÄBüBuÃœv|ÃbuªÖª.aOörBîäð<@Cr rüb@|O/ÃÃU£ðä|üÜoªBZðA£ hrbäo<~C~ð*ÃœaÃb|OÃvöZvu*îo ðAð.OzÃ++h~|v©_*örrÖ:|@CuÖÄAåü'), ('ah£b©@O:vz©/~havÃðZhÃ,Ã¥+>ßr.ªÄ>,/¢|CA<Ã/aÃ>hÃ¥B@BÖ/zöÃ|UªvZ~äzÜä|ßZýö~Ã¥UvUäCüîÃ>.ZC©O,|Äå+öãÃåßCUåð ~B~@ärAÄß:ZÃ_Ãœo~rC©ov~C|¢A>+.ÖäBý.îzÃ~ßü+ãå.BUzöÄUîhrÖbaüaåßÄ©Zb~OÄhåäåªzÃß.ÄÃ:+Ã_£OãÃîu î ÃÄývÄ|ßãð_Obä+Zã>ü©ZZ_>BoaCUäZ<ßü@rîz/Bãîä_ã_:Üß_Ã¥,v©ªbhrîBÃ/|ý¢b+C*O,@bäß,.a£_ÄuzÃüåuh*:bÃ. ,. äîßO*/¢h+ ,äu¢h|*,ÖÖßUbr_>.,ܪ@~ß|ðzÃåÜ*obÄvãbbCbhîb@©:üAA_£uö@_: >Ã@aUaÄ.ªÜ@ß*<:Z ¢ÃbaZðOª£*ßUoÃA +uÃã©/CräCbv oAã rb£@+©BÃœ~ýO~Ãœ/£ö*|.B,ý,äoOãîv> ýðã>ü©ãäbÖåäCAv*¢¢+ß:.Uöu©ß+Oßr@B©r©ðð©Z@Ä+*>hZãåãrvåÄä|©îZZä:©u_+Ö/ߪ.ÃöBvÖbî/b,ü<*ªð¢,ߢýa£,.bAhßC+ãaZ.> ß/C@Ãœ:råîüzª¢Ö+¢rª,b|©rÄîC Ä|öröBªßöÃCr|:>>BÄ_o+ýrß©a:ÖCu,ª©h> öÜ+>Að.öb.ãªbOCý*ööÄ+h@ö£ãÄÄz@_.üO_z*Ah/|vÃvoäÄöC,UÄOÜößU.äOuâ|ä.£å¢ß£ ß@hC,vÜÜhÖªîvßUOuÃbðOöuå¢O,Ãuß zÖðð©¢ã.ý£bb:BÃZbO:©åÃÄhãZv>uäA|z/Zh î|_+ bZCîÖÜåå*|Öo/|bßb,+*Ohª>ÃAß~öh¢îZ|©.aö_<ª ><ßoýÄB_ãOOAhðêOÄüZðrðãååî¢ÜhãåÃä¢CÃ~Ab<.z/ÃU/ÖÃ,Öß>z.Z_üvCß<ÜÄ ZzZZ~ð~©îß@î>B£/hî++A+./*|Äzðva£ªC/ðh:oÃ¥,b䢩©|, ZðåãöarZÖ£ßåZ+©ÄzÃÖîrîÖð|ö>äÃU~/Uvß@bz@hvÃ¥+üÃaB©rî+ýß*~>b*¢A|h©ýOª¢z@ßu|äã£Üå~¢Öh/+BA@¢ðzäî*,bCbU+ßräßä*ÃÄh©Ãߢ:ÃäåCÖ|ü£ýÄa©ååoÃœÃ~_>ß.îz~a*z,üU>u/ª@Oýz©,ouhßO:ä|+öBvh©zö~_Öu©va<>/:v£~ÃväB¢rÖ<,_<ÖaAhUBÖZ~ª/|/ÃÃ¥r©zÖa~îÜrß,AACOBorÖîUý*v ÃübýzÄ.*ÖýBO¢@åãUßzãbÃO,>Z+Ãߢu A/ ªãßîCü©ZCBð@©äbaoA/vüß©>A*Ä_hÜÖorrvý/ðOä,/bz~ÖÃãÖªbZªo+ßOZäÜvho* Ãœz<~b|uä|ä@Ã*ðv£åÜ@Ã:_Aß:ßob.ªvZÃüß/uU©Aã/Azãbß+ªh+*¢£äuZ£hv.o/ü~uA,Cß.¢C<äA>Ãý+ýÜ:Zuî©bC~o~C,ª©ýbÄ¢b/vÜÄÖUhßãÄ_©ÜZ£ÄoÃÃ|ýZ@£ß@ÄärA.a*z|>©|<©@vvä¢ð*Cüöã*AbboÃhîu@v~ßZ@z:ÄhbªUabÃa©AîO~îUrbýzv.Ö_©UhU©<|B¢å,ãåUBaa hbBýbö+ ªu_ýrz+@ðýäßb_BöZZOb*üýüZðvÃ/©rrÃ¥ ä*_¢ÃB:+zBhuvªýoÄÖÖzý£U|ÄvAÃBUß©îéÖ,£ªBªý£åßb£©ÄZü/:|*uBýð.bÃœZbzv,B,:ArîO/+*buã£bßüvîO|ZOabãüã/ bZu+ãå>Cv©oå¢vßb_C*A>*ªbãßu/ü+ð ýbZÖý<ßozäaua©©îuýzä<.ßÄÃh_A©boîÖãî|ýAbb Oã*+bohzuübbä~U|bäöÖ>vÃBvßr<Ö>uÃbü¢rrC.uaäüÜhýh/,vrr:~Ä_A/ýC£åZîã*Ö~ðÄäB __ao£+v£ÜB>Zau>UboÃœhz|h|bößu_>Ã,CåðAÃ+,bÄ:åßߪãCv ã_Büaü./BÄ~bBv,BoCz<_ÄÜÃ/äÃ*Ãœ:C©üu©hzhäö¢vZÃ>©*ª,Ã/ÄßÜÜhÃœ,_oZb©¢ªîbåªUÃœAU*ãZ.BrÖ>böba,äO/_+îªÄ©|~©Bª~ÄÃrÜ£uCªªrbÃ¥:bäå._ÃvÄÖýªOabßoªö,UößÃÄßb/:ýbÃ¥_ÄAövAýðÜ©Üüꪣoz/aU©£@UOoª:OO<|Uözozª|bo/Öß©ð/uZÃBßäîªbA+ã@ߪA<@Üýå.*ý©ruß~z@Ä,ÃZO:b£Ã* UhöÖbv_,vzîö|ßðÃ/¢£bAÖ>©:ã@/~,äb¢_oubðoüvrAuß/h¢vzrÃBßå:ß a£ÄÃ@<©ßßÄZãaÄAräÃãa*u£~ܪöuo,oÖýCCã@ah_+:<ß /Z>Ãîöo¢ßýÜaCðî_:£/|_ãî~r©ä~z¢åÃãU /@v/ýhrC*ß.BUýðßbUß~+ð>UB| OCAoä~|Cð,ý|,£ÜU+vÖ*zÄbê:Öü>Aa*/ßAaz©_>©åa.b©.ö~ÃCý ra:A _.㪪î,£h|¢ÜðÄÄU©/Ä©£ðAß+ßðAAuß|ýüCC©bvBA._ã ßÖ,vb_~Ö*ê+AuÜý*ªðÖbÜü~ª~ªOª£U,r<_b@ÖüÃUߢZ>âãð.oÄ:uO_ÃÄ:~£u@voÃbäöÜÃ<ý/ÃœBu@zÄB:ÖߣðãZ|BoÜ£bh,~ýåBÃß_oÄ©Ãa:BzO.Ö>O<âUäßZäªðãîZ+@U¢uüZîªCüOßã<Üý+î~üðå+£uö@Ã_ßãßÄb|b_OÃœuvÃ¥|£bAüßb¢|ðz :¢äüýAÖub h+CÖîÃ/OC+Ãbzêrýâîuî>+¢ðu|rÃ:bßU>©îrð,r,ßö£, h+ßbbªhBuäÖCü<äü,ð¢ubuðZÜÜuÄãB|Ãuªbr,©,:©hZßoBöð ..Aaovð/@ZZ+/vCzAÃ¥+,£~Ä@o|ððBCÃßz+/Ã@Äb*oÜå,BBuÃ¥o@hr~@©ßÄ>äª ý ,ªî<~übrÄüÃbÃ,ÜßãUa*A_U*ðäUÖB hîva@Ãœ:ÃåÜ,ozbÖoã.v*CßãßboU_|ÄÄ B+ãÜßÃåa+C+uüäuoªÖAã>Örzb<ð+@îOobbbðUü+h_výa:ªßrðBöß©åã O@ÄzÖ><:öroîßZð£,Ã¥ZUÃœOä:£Ä/.ü+>OUÃÖÄUb,AÃœ@bv:ð,£oZ,ܪ~|ý©U£bbb<|Ãý£B_r,*>v:UC~aÃzßvÃýÄ|£oÃœba, üÄb@|:vzBüîbv*CzäbuðÃvßß~ý.aðÜo,öOZÖrªA_:aÃZÜð/u@äîüÜ<~ÄîUð~AU, ß>CBb+BvbÃ:Ã|@a£_O>bäOª:~~äü©/>rª*>Zß*OoÖ¢ðBaäh,uvAäÖ :¢å£><>hªªOUCuaÃäOa*zUU@/Ä:<Ã,.£:Zîä,hãã¢a ðÖÃð+>.ãã.Au++ußAA.ur@ßã o*Ä*zéuðª©ü_CUü|ßAU©>aðb©¢rßh,üîªuoÃ>_Ã*ý:Ãœ_ß>ðOU£ÄÜ~££ ßZ¢bÃO ö|ßîrî£å_£|ßÃ|ABü~:<Ãöªb.b:+/Ã¥Z@@Ãý v+ä*£ao,©|>¢©ö|îuÄ£aüÖ>h:Z:£+bZa|ÃãªÃCß©ßr,ã_ßÃ< ,ZßBü+@äÄå+|>A¢v>býCöOCîürÖ*£~£~ü üÜ<îªzzÃAU/CzOÃœ|bÜÄ++uOîCܪOrCUߪobäÜ~:©ßroä:äî~|b_äå~öÖ~|ÜßÃh@îa£>hCðß: A~obz:väAªh|+ðarZvrߢü£ÃUäß*Ãœ:¢Zb_ãaßÃvC@ü©_,*¢Ã>ðß©~£Ãbö<ß/£îB~ýã<ßba.ªýBZ£zCZÃ¥ubää¢üÄ/ãÜb åß:¢åb_|äߣ<>u©<+AÖßrðr~buüACbüZöBÃo¢£ÜU|ÄA..+*,ZubßAUCö¢å~£C@:ßã*_.>>äÄv>v>îßo©å|ÃåýovÃüÜ_ÖbCCbvu~bãðåÜ+ _@ý¢bßÄîÖ_ß|ß©Bã:ÄüC£h,uU©uBãü©ö@©¢ÃÄ ÃÄAO+~UÃ.îüý:OßUÃ,hÃœ,+ª¢bßåãAhb*CCýUB<Üßü_Uzhä>>CZüuªöð+C.C|Ä,©Zä¢ä O~ou¢ ßäCZýoz@CÃ~ZhbUßðîv ©ðCaå©h|:<ä.uUýoãýuhbr¢/U:bh+zÖ:öÖåöä/ªzaÃb£åobÃ¥bbýöÃCZö,ýßrß|ÃÜäv¢u/+v~äAbä.üãZC/bAÃœBÖuÜãbð.bhz<öO:A>zrÖßh£|¢_/h@b+>ÃýÜ@.:ªz OÜîÖ,:Ãœ,vªhävýöC£oZªßåaÖßßü.öªbÃî/ª+ÃßUB£ÖU:u£.ýã.ÖZzÃ_ZÃœhö~>*:£_/üã+|+ßîrüA£_@O+ü~@äÜ,rî ~~å£~Zzªîß©~¢vAð+CÃ>£u¢Ür_ÜðßÜbÖðbýßöv¢©ÃA¢Ã>ß z>ð,v:.Ã*üC/A@+ßhÃð£~ZUýC>bÖªªåv,r:/ä+ÃœZ@*¢ßãß~h*U>a~oÖAUöZÃœ,£bÖBãAßböðÖü¢Cu£/ozîð.+BäÃU:.OðBýîåväÃýÜÖB,zÖböA@,ßßüå:UÄ©uoß+¢Öa£üÄUöÜÄo@hãab*ßÃrðA+CCC:£|r>ãý,:£ZBbUß~ªC¢:êu¢z..~/ª,Ã¥@äv~+|r _Ö,+ßUÃ>. .v>©+ã.ðîB.,öãU,~uürrbîzîýuäãb©ðOBrC,ã@rh*+OÖ,ª|bã.>rã£CýÃÖ_AÖ,Ãœ,ÖO©Ã:,o,ýüãÖrBBߢ+ãÃ.ööîý,ðÖýO,ü~ßaröߢ/UBuåß+ߣ£Ä.+_býßUÖÖb:..ß|äo.bîåßÖ,:zÃbC¢ªZBZÖa.@ßuöOb|üãÃ,zðr+|Öߪ¢o¢ÃbO£C:ozhb|/£ªäöÄÃO.ªª*ÖO.uÃ*:o,vÃ¥CoÃœ_öBß_|*Ö<|ÜÄßCä/ÃAbÄ.:ÄU/ö©îoOÖ>ÄoOßb¢bAaaÃã:A| Zü_äA:+buä*~î:~zßvý¢öb*CübÃ,ÜäÜ., ªr£å:UßC|uvhä<îhý+ߪ,<ð+~uý:>ãßuC Z|ÄaÄC*ZB|Ã<|.bªüð@>_Ä¢<ß/ð*UýAZa_r /ü©ÄUC++£C£|+åäåâÜ|öuuvrýAB_/:AuÖOaUßv/*vã©ß*ý*hhª+Ö£,rÖ,>Ubvßr©¢*¢Ää£ä+*u©,_<ãaÃü.ãbv|*ýUä a*b/£aoa*£Z>Ãa./Äßrî£u,z.*~+ÃœvêÜ_*ýhUÖ_ ã£AÃðCbäh¢Obö©ßüÜaZ.ßubîÃÄr£.ZU@@££|_ßä|A+u:C@¢|Carî//ähC++äuªh@bîZ~/*hî b,îv~_bOau¢z BbÃœ>/O/a*/uÄ,uUbhÜåz|*Aöå@ã ©u+@uÃßrßððö: ÃüÃ|r ßhä:ÃýÖÃbãªî*C*CbÃ>©,bvrãðäUªbU >@@*îÜuüboö aª üªîýb@ðÖ婪ßh>hü~Z|ã~ßÜhðvà îzåãz@Zýovvß~Ü¢©Züb<öO*A/ÃœÃhãÖbÜãªä~ßÜ@ªuhß aÖvßrBãöru+Äüã,_ßho,r>üüðbÃ¥@:îöÃîC~ªuhªö+üßbü.h@ßZîhu >Äü|*ößÃAÃ¥r/Ã¥uaß@~ªå££Ü©h£öðå_ðb¢._CÃZrAAßÃ+bzãßå,îî¢a~ªÃ/Bð<Ã>Z@/ r.+hüZ©@Ã¥OÃ¥oªhü©,ÄÜ£AvZÖUßOÖ£b|z>b/./abrö<Ã.ßZ>ß@bC|ÃÃœZðhªåoCðåߢ|£_Ä|u+£~Ã|~äööz+u~üý~ÃÃœ>ZßCîBaªåßU¢öBöãÃðobÃ*v©ðãÃÄZã¢ýðÖuZ,vÃ<ÃöÄbà +ZvÖub.£AhaoOb*z AovÃOå©/CU>ßZ ÄuĪOC+.Oub@~¢ªvãA~_ðä,arýCî+ _*ÃðãÖª:£C>U£ß+bã:åã,:uÃ,äßÃ.rý:AäÃÃß©Üä©,,ö¢ªåhßðÖ*ö*a:/@üäöaý*îa+vß*ÄãÖ+ß~ÄäC_ßäßÜÃ,Ã¥>b|äU<¢©Oöuo~UÜÄvaÃzuOZzbzrÖOCÃoÃa.r C*B> |*A _zAo_Öýb£ ÖUßðvÃ¥BýîözåÖUÃozãUãOACãZßã.Zvoäß,|,ªCuZ::.ýßBhÄÖv:|ä>bÃ~ý©ZzöåO*:b+© |Oªö,Ä¢hbr£C©aߪa zãߢ/öý>~u£ aÃœb/ÄZöîC*C:ð<¢OZä,Ã:Ãbã>ðÖ©öåh,<ÄOÃ¥buZ@£BuöÄ+ÃüzßuÄãîåvÃrðß_ZüuuÄüuZÖCb~äB*@hCCUÃœ+o©.||ßîräz<ý+hýÄý.<Ã|©Ohüß@Ö|bß|Öðß_ßo,,+_vÖBÃ¥Ãu@.hÄÖBß<>Z~Özo¢Ü>ðu: /îßabza..AbBZuhöBߣC b_~£Brð©aö>ã.h|*a,*U+ýCBöoä.ß,hª¢+CÃ¥zvýZbüBU.£äbBðîÃob ãÄCî,bäªßårAaÃAÃ,bo,åä©Zzß Ã¥CüåoÃœvÃ¥aª©@©+ä_ªýZO©_*:ßzßîß@Ãœ<:CCî:ðÜ>ܪ.Ã¥*aü©Uh bÃ, üÜ>bãü+b>ßOb_UüBÃuß,bC>ãöAa/B~aBooßhîvä*.ðäb@CvßßÃ<ßBO£/ ãÜu¢¢z£oðýå£uåÜßBÄåOß.o.~@Zî@@z©b:£ÃCÃ>Ã.ßý@äOCa©Uýý@_ZC :O:Ör.üOuO <ãÖ>u*/äA~>C>uv@zo_O_.©@Aür,a*¢aÃœ@ý~U*üU©Zãä**ZCÜãÃÄuU~<|*¢~êaaAAÃœ.ªðrýZÃ:oArzß©Or+Ö_ößvr+hÄ,|bvßãz|Ã¥>ä£Ä/<ß.:+bãî@,£UAâ|+u~Ãbz~.|z._vAbªCãbîO*¢üZÃ|ü,,hÃv¢üÜ¢bªAh¢|hªz<üaZ+O£Ä+a~¢/,ÖªAoOÄZ¢bZübUaÃœ|ß>*ýuªüCAöb_UöOaªrZ@ª,üåAãîÄzZð£ößubv:oo£îhu©Ã+BCöÜ:.B,rvhü+arzý~,UhßU£îî¢:ðh<ð_î|ö£vÃ/ªä_üo>.ªh>î*v£'), (N'|ãå_ߣ,Z*ÖüuÃ,zÃœ./Ä/A¢h@oÜÜ .ªUü <*ªä©Ö>öÄßå|oã rU|,ý| ä|Ä¢+ܪ>Ã¥@aîrbÄîér> ßUöýö:CObãýÖo>AoA,à rð+|v£Z> ßÃÃœbab Ö£/ > ã©ahb_©ÃÄZO+|ßOýußýbßuýð~.ußBO/*/Ã¥ZUh Zðäî@>bã|Ov:o£oÃœ h.>ã©UÃ*A@uhßÃßO~bÃ/öÜ/Ã¥ObßO@b ¢a>ð/:ãã©o_<ýãÄÃ//v||.*,*ü¢£ª/@ãüO~C ß,ÃÖ'), (N'.Z/A< +Öv>Ãœr©C|:ßOUu£Ã@ßUª.¢A@ß *büb@~OvbÃœ~:.+:rvöî|ýã¢ÄÜ¢ÜåðÖÄÃÃ/ä~o>öUýýoäCb,Ã¥hr*bªv*@:UZåßz bãÜý@äbÃœa©|a©ÖªÄuîÃÃ,£h/b hîrb/ããßvZ.+Zh|'), (N'Ã*ãâ|£î~~ð.Ä*îOÄh|öuÃ¥*ãö*/ß_/~ß|rÃÃZ*äªß/<ðÖ<Ãý@|Oübß|A +>zCb|AbÃbu>¢_av,Z.AÃ,u~Ã¥.a>ÃœuhüÖOðã|<ÃÃ¥:äb,:<Ã¥aoÄ£>ha¢üZÄu©|_Z:övÖ:¢oÄð__|ã*ßC,@ý b~£ßÃ_ü|ãUbzð~~:rÃ/,ýýÃöª/ߢ:ªßo|urÃ¥z/A婢U_:öåbroü_åðýÜuß>r:a|väßßv£__ü+,î<ßððã©ßî@O_böhv,,UüåA>üZî£_¢CbB ÖäC,ohÄ.@/,ãUvÄA/UÃ¥O+|ð¢zB>ª.U+AÃ¥+Ã¥U>a<>ZÖüªBhb¢ð>räoðörö>Bb¢CýZb+öä+:_/Ö,å¢~z@obä©ðb>äü.Ãzaî.äoÖÃ_ÃrOU:üÖBÖA ª¢üðAÃœ/bu|>ü:Ão@@*_ÄäåÜßüäªuüZ,CðBb©bý,BÄÃ:üuuÃ|z/UÖu :ÄäoöoouBöO,b*ª<<_ö/ýO.ß~ÖCbð_b¢åª¢*ßåAUö>~@ßßO+üßüÃßß Zzb~rABz|î_@/ÃU©ª>Ä>>~îaÖ~ÖBC|*ßBZ*bÃœZãrãOA¢vzãÄh+OBzßÃ,bã¢Zarý_Ã.o+Oîz©@£ _vÖ/ãB+üroÄß:££Ä:uîãüAB_Ã¥~v@Ub@~£>ohz,Ãœr¢UÃœ+a¢ÄÃ@Oã:ªß*@Ou_vßãÃo£hhö>@.b/ÄrÃvÄ@vÃ¥_abrbýão¢öBã@+ß>¢Ãä<ÖUýÖßAU<ÃZ+ZãÃöªozßä~ rî ,U¢ý©ÜCZaZ.ABr_,<,|hBößÃhÄOö+./~C|u+¢Uýã,@~bBvö+ ÜüâbÃ¥bbU_©©_CCÄB_|äC ýÖz _Ã¥bö~ruö+>r/üð Ä*ªbýOÖh*ðð¢Ãr+bB:CU/v~åßA._AýÖuob¢ãrüåÃÖÃÄA£|>Ãa:Cýã©î:ÖÄUüÜuC+oÃ<©~@äC~.>Ã_|UU@©@~äÜ+>hOB<Äðð_¢*åöBßo<ªý./orîO, ü_..+.©<übrÃZoÃ>býä+ö*övîaÄ<ããBã<¢CZÖbu~ÖörhÄ>rãÃ~£_¢a+¢~h>+ÃO£Cü*r£b.ÖýÖZ¢ahß_.ßåÖUr|u:v>ê|äî|ZbO+z_ß ã£Ü*,+<ߪB|ß/.î.hÃ,_Äo/î+bÄb¢OCUB.,_ÜäbÃ¥aîa:zBhäoÖU|oUªÃuåü*£.o.ýzÃaa*¢v©>@ßoü~Zîäîäö_BãßÄ îåÄUªÃ~<ý*hãßCüå©ÄÜ@vZÃ/ß>zªðÜaBÃü£/CAObªrv:B/BAÃœ<ö_Ãœ,~ð.ßÃöÖÃÖ©Ü.|@ÜßÖoCühOÃßߣ<:ã:ã: *+Äa Uzð/ª©Ãå|vüÄß/ßU.U¢üA:zãzß brhbÃœ/ᄜrÖbCCÜðräÖba@Cü<,*ZÃœabCÃœ*ªÃ.rrZü|hA£O@ãv_Cü|Ãœz|BO~,b@B£h¢ZÃœ@B>ý©îAîà obhzBÄäOAÃ¥z@|>äÖAbZÃ<>U*äv¢üåov,hOäOÜß.ãÖ+bßoOîýCãa*ý|öýäÖ*_î_Ão¢zab@ß|ß_v|åü¢bz@ä¢_bhzBzäÖA:äü~@ OãOã< vußÄýbAU©AabîoB>aîÖ£A@ ©zý+¢:UhÃ+zvß ~Cuã@+.ãî©+u©ãvbßZÃîh,aÄ,Ãœ/î ©ªåZO.ß_ß>oðß.za,Ãœ,äª|a_ðOrB@:Ãð@@ub<ö>.:@aß|üzüÃÄýaAAÃC~ *ýuÄA+ÖU,zrU@:vü,b|uüöåu,ß:ÃÃ¥>ßC£b ~aÃœ:O_Ãb¢£|+*,CýzuîA*î@bÖ+äÖÜ£~îo£+ä/ö¢ðýßäh|Cßr.u:ZÃAý©<ÃÃßÃüZýb£rÄAU_*ªýA@b+@¢|£*|OzOh©Ã+ÃvßUa_Ã¥BððBOo©B©Öý:¢CObUA¢ÃßÖ:bA äßBßÖaýoZªÃ<.aO_Ãb£o£ÃBöZ:¢Z£äÄ.£ªßýrrhýîö@oAÃöýð.h ~+ö_+Öo£B_o/+|äßuO*<ö£UÄuöî|>£*uÃ+ßv£U¢:b<î+ÃœbÃœ<Ã¥hÖÃb£,öhU /ã~h:OöÄaÃ~oý|Ã¥.:Öåðho.Ã*î¢hbüåh.îrª<*:rã+ÜÖZýÖOOuörUzrv/îÜ_|ߢAã/ÖB+vöBz©BÖ,£,+h/öãAÃåBÄðO|~î£AÖÖîãU©ßðZãå|u/åÜ@..CãÜýo|£+/B+@,Aba¢Ö_C<¢A|rßzÃ¥Zb.bO<@OüÖÃZªZ,ßîz>_o.UaüZö>ßuß+UÃœB,© *ð@Ã¥bäaU@Our£åzÜÄäß,bî_A+Ãü+bãOao~ü|aZ*+aÃÖÖvª|îb:bu~ZU:+<>zî¢OÃýubbîÃÖ.@/,*hßÖÖObzªÜü.Ã¥*@r@Ãœb<+_bÖA|>ý âÄoååz|ÃÃhßz~ðAßOÄ,@u¢:öaßbAÄr©býîoUvý:r£ßbî£bühÃu+ܪß:ýUrÃ¥Bu@a_<Ö ©ÜÜ_rvrÃ¥/~|Züãöz<ãå/Ã¥ÃZ+öÃO@,ðA,ÃððUZu@Ä~ZouªÜßO||ÖåCA:Ä¢>:ýA@Ö£,ÃUîÄîOã£výazÃAOåÃoB@BðÃð*ßîA/_>Z,*bß,>:~+h:åýÃ~.+hBäOÃüýĪª.Ã¥>©ä£OzüaB~ÃA@hü:ãð£r>©z/¢CÃ,bBÜåbÃå:ªUß+¢,Z_+ã©_ý_ä©ür,ã*.Ab¢|üaßãüßv>äªBv~B+ÖbÃœ/o,@uCðãZbBOuÖÖb/ZÃ@äãZ<©v|âZ:ª*U¢ãühZåý>b¢ÃzbbýåuoB¢*~ß aªUªßh£ð@¢îã.uU£©ªüðOZßããb bC+uðA£C©¢,©îüßß/oh:ýð/üÖªähÃß,ÖÃß|ßo.ýßÜC|AZöbü+>*Ãâ o©.,äU¢ðb,a¢AO*Ãå+.©ß@îÜu:ÄbC<.hÃö©¢vÄÄߣaý|+ä @*ð/ßUãÜvÄo,@~ß~üäîB>Ä.o©¢Aß_ ,*hrÃOA¢åaZî+||zvbr,ª>üua£@vh¢ÃãUðzßUzåª_*ýåߪ äª*+ý~hÃî,ðOb©Ö+z>ÃœÃaBÃaªr_Zß*Ãß £b+ß>b:/Aã>ãîUß©bBã*BöÃOÃýo.ªß<|ª<*uh|ß/ züvroÃöêÖUîZ_Z<ÃîvðvAhbZö>:<Äðu>u©*ãrhvCrUêýaãÃzv_Ä£AO_ðÖvo©ÖööÄýbåð¢@Üýßbß.:zö£Äo:,@är<ßð/äB/:zÜîýüüß©ÃÖÄãü,h<: >ü~>_OCã,hÄBðî+ª<¢_züÃî>Ä¢ßAuB©:ý@ª<äßUÃäC~©ü£ãß<+î@ðh+ßbBÜð*B¢Z:vB,Zîé,ß/ãBu_bÃœa_ãOo@ãoÃœ.ÖAz+Ãœ>ZrÃ_:@|¢UCBÄ@Ãß|Äo*_ÃœCzÃUU@<ý¢b/©*ßAã@ >ýuöA.h¢A~r oAuÄOîözrýb£ªb©AoîßÃrßã||oZ Cª<åßzî.:£¢CÃ¥uC@î~*ýÖBOäzhU~@v©ãýÃz©ýßz|ah*B o|uß<ª@UA@AÄÄAã@@öäC¢o£åüOrzbo:hB_h|AÃœb£o~öOZüvÃœ:b>O>ýÃað*ßZ.rOäbåªOÃ¥v<ÃîrüAr<~að/ãA©Z¢CãC£ÃöÖUö.BB.*bÃ¥O|Ãœvza©ß:Öß+ý*orßU>*Ö¢ßÜoöaªC+O£ã_©:Ã¥a BozOðh+vªvÃ¥zoãÃC_ÜýC*abÄb~o_:ÃÃzßî.O::å£ßÃ,*ubaßC.CÃîîýbCªB üãßî||@U/_©Bî* ©ªÄÜ©|Ö+|Ö'), ('_|z:.CbÖ¢.Ãœ _h¢zB<ßÃ*Ã+ßCðß:ßüäZ_UÃ¥ ¢å©ÃZßA@boU@ö:vbðz.är>*ßzvzÃußb:|£ãÄüÃz@+ÃÜ*UßACC@O.£ã+ü~*ðU¢ÖbUããär*ß+ßaB~üÜh_>UO~ã£ßÄvÃ¥hªÖb媣@>,ößÖzo+.|v.O:ß/a:O*ªrbhö<©ÜbüuüzU¢o_..v_vUU/ãéßzA//Zðz*ßåZ£+ :*zCöߣå~Aîß ößÃBßýüÃðÜ_A zßÄ_hªoößîhÃÃãh//,@<ª+_hÃœ<©,ª@|Öb¢>ãobîz£,oî_*bhãz>,A_Ãöv~Ö©öÖ*v ,£C*zv,>rãrr¢~/.@|ZAOÄ_Ã¥||~Zu+Ã¥bî~hÄðß_bBåßÄ@Ö£a U.Obuo©CUÃœÃÃBvãöozA/Ã>ÃAUðZåß+ßð|üýöÃý©.<~Ãaß*aªýÖ*:ª|ªÖ©oßzåÜZäüßCCZÃ¥vo¢¢ühßÄuåð©îba*za+uZ_r+_ÃzãAaUÃ¥ B>Oßý~:ööðî,rÃ¥uã¢>CÖbªÄüvBZãüÃu£A ß|ã@ .îZ ¢Zý ßbý.>hhZ>Ãœr|Ã¥z¢ývÃ'), (N'b©aBoÃãÜvBÃZÖ<ÖývÄ>Ã¥bzÜ¢ü/BZZbðaª:Ã.üz*:Z>uÃ@vhßäaýüÜ<ßÖå,CÃ~|>ß+ªbbBbüåC>züZ>Ãß.Uð¢b+_ö ~_Zᎁ:u©_ÖCð äbßßÃC©O+rß~¢|Ã¥ÃýbCÃ>>©b._äêüüÃ>îb_v~ßß©.OBaC Ã¥*ð|Ãarß*.Ã+rUð|,uCBÃ> <,UzbB |bZrý,©.Z©ZbÄC_u¢|ÃãÜåîAª+a:o/ÄhÃaäÃBýv@åüð/ߣßröO¢à U_©hUªª,uväüh*ÃvãC¢zuüßö:uö~ß>ýßüß<:O_ã,£C©Äb<©zBðBba/BZÖéa©A~ÄvbýzäuBZvU£Bzbåý|¢>ä.ðß_ÄrÄ:åãâ_ö:A<*:äãßßÜÜaý©ä©:A_Äz*U/ª£@£./@A|*¢ã@ro£AªhAÖÄrb~r+ÃbߢBÃœAÖß*r,*vÖ:¢AaoväîÃÄuuÃå::bubßöÃÄ_b<:+zãrÜÜýv|A~ACßOCðå|*ä*Ã¥hoZ/ßÄð>ðÃß>~ä>::êå.:rüý֪ܣ@h~a.Ãb< O_£_£ z ~v//C£U<:©ü :bBhã.|ubuåß䣣o *u.< _öAbhÃ¥C:@ÃUÃœbã.Cü:ýhOU~äB©ßîÖÜ¢abîöUh+ßU,ªÄO|b~ßÖu,Ãœ. hZ*oü©Üu ,îÖz|@äî+uUÃ+ZCAãårZÃurOvý|üî,b£Ã*Ã¥zã|<:bZz©Aü©uÃÄ£ß|ð¢oÃ~A|öåaýOªýa,ßrZ.ÖU.î@hz *ZOÃUBßÃĪv@î>oZ >/ü£ßî@++ß©uvo/ÄUªªßUð>oZ©rðÜ>UBh~AÄ ©@,©+Ã¥Zh@::ßß©î_:b|ðß+hÄ~~Ã¥_~B©CÃ,|buoÃ¥buaÖuÃCüã*_©><Ãœ@z,ÃBÜýÖ|/ß b.Bß zr>Äߪðü:ªbOA.O£öäUÃ_bBb:: /.A|Ã_r*ZübÃÄ:Ä¢oö|_aª©h|äCßUC/U Z>_/b £ßbåÃåC_uß/ðCîðzßÖîaä..CO@ß,/üOOCªðÄüÃýU/ îüßO *.üÃß@b:u,ðÄobÃBv£vß>ýr BÖ©~_@: ýr<ý:Z,£boÃzAaãOÄu¢ _+ß*r¢~Aä<îÄöªÄö~Ö£ývªÖ*Zîzbð>Ã¥ îCߪ,CÜßÃ*ß~vý*.zÃ¥~ü|£bð¢ou.ýÃO@~rzCýÃ*oB:+ÃœÃ/Öb<©ß|ÜüB£.>*h©.o,hAz|ÃÜðbîåÖ__ZÃb,oö îªÃ¢B£Ä>,r<ÃZý£ÄCr ÃÖéîr|ChÖZÃ@:ã>@Z©C/:ÄU¢ bü>hz~>Ã*_Ãuv |/Uö|>Ã|u/ãßb@~<<~¢Ubý*ZröbaÖðvaOo|ýuÜ©C¢@Ãbz@@ýhäbCªAU~Böâ/ÃßzOߪîöªvÄî>ª|UZýÃ/bäîäh.oðýîZAbÃöÃ/Ã¥<î¢A_~*rC.à ßöbr+ßå:A.:üüÄý©äß©ßß,>ÜßA z>ðzÖu£B ýä Cäüäb:£bãªÃ*zÃä>,:v, >|öBCÄÖ ª£©a<_üã_/ oü>Äß~ýa*hÄåÃ:ý¢ZAÖüÃîÖuöA ãOî£ãAðu+aäh@CÃ,OîÜö_<ð©ßß:~vuvÖßUoß:<ääßU¢ª.Ã¥Uãb>| Obß*vuãb| üoÖC*vöåöÃAðhzãzvö_ª_Ö£ö~Ä:ß|u£ßZ:v<äz_ýîo|Ã¥Zvö<>öüî@ößr@ß@£ßhzÄbU¢©A+:ö,|Ä+OÜ£ ÖüzªUÖZ*©bübÜåOÖääßb¢v:h>A>öU.AÃoråããÄ:ZöZýü.,o@,ö@zöªÃ<@OCuU CvAuÃ¥~ý ðh,_B*v<ÄBäü|ZåÄß_@.z£~UA¢oÃör>~@bA,ð.@ rb:A*ZÖß,z.*b~Av|o>:O__@~Z:@U>ß,AOrvr_åÖä* ¢Üo@ðaÜßÜðbo©@ð:bßU~î@azÃ¥,ÃœbavÃ~ãrðÃ.Ãœ@><©a<ýA@ÃvBßö¢Ö/BÜä¢@UÄß@O:z:ªObzzÃBu@@ äåAßð/ßübÜßü_hývÜä>Z@ÄbhBb@£å©r~U_Ö£rðåB,>uÃÜu>oz< +aUßhßåÄäîob.|UÃa+ bäü.îA<++ä_+ , ã|aâã uAOU.ßC_<>ßü/<,ª ß©/@ã _ßÃbéÃZÖ>âöU£ª©vß,b|+üä:ü©öö.ß,â/ÃÃ,Ã¥ÃuA<Äã/*ÃOýOÃ/vü:ÄuZÃb*ßBðUUªuåöäö£ã_îUaaªüÖüuBö.©üa>BO©åu+ß~OÖ:zbzÖß//|:ðî*oýU._zãC|Z,@üZ*ßu/ª_ýßC+@_,îüO<|>h>h,B<ª*,ßuA@ªürzbª~Cß*~:ß~_Ã:>.:ýaüîåößÜýü©î ýð/Ä£Bäü,*o_övîb¢ö ß~_ªýZ/hßßCß©ÃCß©BAß.|<~©ß*ö©ðÃ+a*CÖ/ :.uöboZ@<äß:uüªhðUCüðoö><Ã¥CÖßz~++*£ª~:CuÃÃÖå/å¢<,Z<Ä:zö/ö¢rbA*ð¢ªåå<@¢CðZ,o<Ã,*r¢Boßaovauðboã@b,UC¢bßOuý©Orbh<Ã_Za/ðOCª/¢äv~|übÃœ*ÃœUªÜZ,:Ã¥ohßüOäÖu>åãBhrh>O/öî¢/ÄB.Ã+ubÜý¢ýbaüÜ@hÄåuBbOoÄÄaü,v+£äÖ@ßCürhO:ßZ|bðü>ýr Oa~h+ö,äã:hü+ÜäßöÃ,O@ÖA£ZÜA<,bA:ão+/O~ ZÃzßðÜrhAß~Aß/ýðä< ÃBßýÖð za¢|vu~O:z*:üß:£a©ßArAäU@öãäU<Ã_î~:@+:£ýÃ|,>>v/ß öåCZo,bz+Ãðü~ß_+*vh_h/||bO©C:*~ß©.ªa _uýÄðäAhhZoO_îovahö/ãäbbîZ rª>.UCÃðöA,>*ý~~Äð~zrýÃZCub<ÃOðߢ_ß_¢äðbãýrU¢£ª/UZ hzüCräuzaAuUÖB~äßoböãa@:uÃœ>©:¢¢u,äß@©.ª©.|ðA¢Ö:hAßßZO*>hß>î/*_ã+.ýãîzbr+_+@Zb<ã< +¢©ã Ab+©Ão@O äÄ|¢£î_ãý~.Ößßrbz©.CýðO@böß_£ Aä+b©~>ãO~Ãœ@£b/~uuoª.Ä~,Að_ÖzÃÃb:v<>ß ý@Ã¥OªoÃaßba.~Bua*_hz|rzu>äýý_<~äBª>O>ýOov>bB<£'), (0x70BA23A819E1BEADC92E0840F382D7A5DD89EDA9FA12486DCD843FA57FAEC5439F0DE3836E6804ABD214C35672F9552A2CE003709ABB9C5E72B6DA94A2192E1B68C5A0E69F5336758441D7E54EF1FAD32E14799EAA55A9E3708411B88D6F09B8E6A7EDAD586F8BD8A98EEB58E4B61080BC06658DA09070131BBC751A427EE715381EFFA6044C7BBF89A0F41C6A50FFBA7490FB86097B185536DA929BFA70952BA7D520C6B6697C6F8BA604FF9B54A9CABDBBA6B282600CBC06A96F29BADFC4190BC974943038030B138CFB627718BAE130C7DE3EC9E2A846C964C00DF952B5ACE1EBF4D2E0159A84B89B9EF665A945EDEF8EF9F201854F28202ECACC78F611C0D64E818B24E7011B2C59862E43B1E0201ED21D6B59C2AA5C9CCBB1B14ACE0CC289DD1F1628B9C9088CDDC6A8FF20E46F4DAAADA5D8A66714A424EF583550D15E4CC4A56691C9F8650815DF7CFC025D7BE64263A02166E9E2760B7203C971D23B0C685B3A7A7EDD84B1479DC3C7EA18A1C77472F2EC303CE6DBC2EF8657F59C9742A37093A722016765DFEED9C9251B8BF2D13B55FFE04FDB2B755FB88F562CBBAB0581237A84FAA5720A8D0D42621DB5A7639386BA46986154946832C348D80EB2332EC3A4F7116ED696E2F4524199C857A9112CC3A601656D1FCFE51CC7E12A327E5A0F345910AF5225AF2364A30E12FB9FDA1937AB4B0B31C85584282B510E), (null), (0xD4E78A93FE9861D99DF7DD00C910BDEA7CEDC7F286334EDD6C038C8627D3A06EABE03A2B710CDC80D5D1AE1453C78B746B41D521EDC63CA098AC27FA0CDAB2C9576F55E9D691787011461CB4853A8AA477181BE5FE7E81E5A49992C5E4E273FB1FE4BCE472A29ED9C8650FA6AA881B5E218382F4BFCDCBD8ED6F453CFFB28B2FD32195A07EA631D57A421C996EDB3B1B7E34A3615F7E3B5119E3F6025D61D916D9E0D388F37AE07B51AD7A7CB0326A123429BDCB0F29CF54E543879AAF2E77186806BF8D08B2280354270FB204BFA1E679E4CE34A40E06AF117FA3AFF345CC22356214A973DC098200BA77E71A1C5026A1A020CA60437359000F7C890E780F0E5BEC7DA1ABF8739DDA4C33E9971F95F42F7D0E522401C2F2EEBAA9645F807387AA688C2D9FAE7AA92C83EF140F8AC2E179875A916ABDE9592A8AB2F14F0F3D5AD8AC3F2E92685580026525A111ADE364F7C7EAD826E21DED7F320314FC89591D45953B624B934E1131D98E059747487CA74EF987256533F68F51AF60654184790B085C7C7180186379D9A64D54175637EA866DAD90D2F8DF6245D3F9E4EDABF05515F98EEBCB0A2635950D4BBFE6A277FB7776DED3D6E839107C192CAC1F7F8C2DB5F73E1DC74B1E7B4678FAC4AC1F7CA35CFE6D76CD1C7F2CC07E6FB2DE7A1516811D0AEE6359342B58638D5DEE74635C9D8950201215609878125C49DC6B9CCC62E4428E158D4002CA411E698F213E4C1A12145529F4046CBD717650FCEA4EECC6C1FA0A31D44610494D56D0F7F60956D4102EC95747A26DDFD6D1A416EF06DFF231A3CE26331A45CC040CDC9E3375C6681F7CECBC84957F1F8C2A5B03A2F9594777DDC5533B2FA0F5E8FD533AC5CFAC610A3BF77319226D9C23AF9A09BF42290AB2952655AF722DEFDBF6D387424459BD7DFAF86602E62D557029308C959736A6D4488830A956B1970E0797234FE659DF55DC8BC549C207CC67D1E58642A15944BF2CB2F9BC291327496058FA4F0A0589CF5036B90B715D1141BCC8D8712A556DAE5363223360232CC9647BE86A0D7C5DCB5CB6F26AA0384ECEA1B800603BB51E0BEA4CFCA6E2556F2D09EFA6F575A6333F6A0C157463020D1A155392A822CB8DAE5DDC7FC080B7E80647C460B0925859FA84C1F62FA0A9A8E73FE1918EC2C60A3E62F797982773BEB3230E2C9EA25C88BCFA982361D55E0EB43498819E25594380B9224E9AC1C1D31102420B917D0945E259D5942AA2A96804E9E3638EF11F8DCACBABE47F0EEDFA38C5125E93537C372A529F4450C418DD10BA4AB0DD5D441FE3B441C6D124C5D36CDA5C65904AD5B06CAC393C52DA3D05B2CDD4C5C43D1DDA80F37BDE12B665058CCCD87668B34DC5E59944312408CD08773B130350000E2EBD81E49DCFF69EB54633AF8601C69CFF800EE02BF9EBB678257266D6A362B58BBDAAB9E7CEB0F6EEFA8EEBF0584707B09F14834120E235D1CA6B775C90C812E37E23C8570DB430CF18F1316A00C620DE6AB5368EDF736BDB74E71D6239995E327B0771347FAFA2EAE3B3292EB1CAD0044B98F1DA9183030BB8ECE32697CD957E93FEEFF954EB5FBA124CAB2B4A3C2AA9161917A1A783A0F803667C92CC7C53161EAA9BB2DBD7AF5F3837C745D8D8C17BC2390F7EB6F4D70F5EF6F5EE6FCDEE96F9950D9FA177CD3F69B76870BC5B1F2BA400CF936CD45F29D38B54E4E1C0EF6B48314C43CA21DA4B6BD014FE8C665302D7CA496FFD5A292435E3CB1523E85DA8C7FC278B0FDC60822684279CC0609D6D38510D1777806EEE07270DE656C42782736B368F3EC8F2FA69C64978338D64D4465EDDD1DB4531478E3983E7CE7A2C615DA428542A0D2E6F5E12ADB037F6BA7AC339A0F7E756A72D3AEF0105440B2CEF99E71B8E640FAA38306D72C898800F987E092395DA357906FDFB1A3A0C292A53E6BD164FDA2B15B38E67C779E4DE95B9DF69863BE79615646E149169F56F2C07431EE2DA69C0BD52F46F06726D00221E66605AA2A2EF6C4FA8B2E1C59AACBE1E3BC036C5FBBA4F1FAC3347778FA3F66DF272039414896453B29332B7DEF7B848B1E737ADC95C23AB113BF66EA7F4BF05BB73D327A8290AB25BE21268889740B47BFFC5A86C49A4954F5783D992F5ACBED32DFC6A24909F88DD8452E649BA2379FA42F3A82E179871CF3DD751A5301F653654955B9AD590EA603DCAE7F7BD4B953409DE5002038FBB948A9BE6B94DE2AD64ECB0F525C8DE24B10948F04DB17A12F1421D9C51CF6332C4D9C6103AA931125B1D820A0C56706B2AB99EF8BB9E6EE21088F47630465B95887D304B01CEEA08D83595302F6F059BD2B17197316B76256AE3FFB1B5BAE214C1ED818E26246A5CCF962086093EB3A08359A47ED4C3631D070AE11DCE38521D52806E41ED7674AE4715C89B4BF01C2B305F2E5B16643FFD8964871B424C8D9643023388CF71B20CE4F636BFFBC8D216EDB5ED6F0AF707EE4171B889EF586BFB88315848BC945BBEAC2276202D8002C191702E8D5E1D8C4BFA45475EB9281D8B8A3B37C970895A58592FC2E880E6C1C06EF7F77E2ADD9D6AA50C4D774DFD048305EB95F24838500816D5332E5AA4CB148486F0C1309E61AD9DCD23643BE30B5C2A3EE29551CE7835A6EF6755A96E0F014139F3C70C43526689E8547B15ECCC33CAD7041BC135C2B50DBA1B41360C032FBD212301F0444FE7EB7C0B6879FD20BA23348AD26AF3400B773DB95227112F7DE525BDF3C9CA4285871C3044295A3B0F9A611D018130C4C9E1178AB28AFDBFDA4C8E8354402CF059F2054A4EC3FBE21D02A9B8C6F42DFCB460F312B23F90FB895C56F89BD6E7CF6D70C40F7CE67606E5356DB0E045F9E51E91CFF34C1A3E196109C0F16D0346461BD94A55301D80CEEAED2C7CD1E01A446370D90906F3835232AAAE72258498E2EE269506FAA3B5011101085EEEC14781EE7C8EFD293D3F2756F823856F0DA866554A8EAA4A1449BFBAD8F805EB256370622D83A8F59BB8B1E76DB0027F2F910358A208A4329C36DA33CF4251453A3C3094B32242890070BA91DDC3DD6347408B46F4AC481CBF3DC6F6A9752659676BAC317F6DCC0D4F7958324E1255D85976EB8EB70A518EF314D4755C4BE08A49612A7117ABE4D9737DF77A5316CDADE8ED9D328997A15C1A1E3D6A9857B10398CEE8EDE8E3C1AD92121B3912D63ADD47278C6EADAE00B2BFCE56F96D79401CCCF4E1852EDFC4042CEFA0777C684944E4602370CA4255EACD362E198CC74018D1FE6D1EF5B4AF67628742BE0E8835568412150C56CF528A9EF6B7F8B1AB7864AE87A67EFB2A4F2FB1BB0E420097DC4500D79579B234C101ACE380FEFCB6B6B70FDD0F86E1B65B59C3E55B9AC10F89061A72F7D915FEB17AC6A5D218AA5033FA05563222885563497B3BB6CDD9273F9C5979E389BFDCA2112C94C03CE443AF72B260956BDC677EC40FAD5DDA48E4A19E6535BF306DA93B28B321F6F3952765388C431B7891D3BFF1FA1E7A127FC8C947F221D6AE847E0508256CB7BB718B2FE848254D04C8290D9176CD364E2F28A9EB58AE017450B6B30D3D1253241C037F6FEF92C9597AC47EC9144438B648B6D9FCC3CB63C389BB9791723FC6B6D5E875724DC65F9C5E4F71932F37600B7EFCC58738576150A0BCE533FA37E73AFDC8F32BCEC56881573C9D735ACF93525B8B13757A3F7D7D8725D291E02BA2276836956643343DB893432FFCBAEDF5D02893D86E2471C0BD4B76A4A9F3D7A02B9A760A23392C0E264E5BE2361081C3992F01684D523402F776D71BCD9093C5BBA3036144E2D196FB84B11FC88F89ADC9B20A79F16F53D9667312AC62114096BA9526930C1F7FB65D6A6CC8A0143A68ED29521B851AD34C4F2AFBD0CF2534EA431B643368F6A1AA32531B86038A385139AABF38BF2511A0C1D943E123AEE63835818585AF06FFF688A8E831FF4D48C5F2AA972565FC2B1E0AC4718EB3BF86846CE2518105B2A132AAC9AF173DDFA174917EEF7917C1D33856667BEB957043C82164C41CFBC6BF3F08657A9C4D14E12A22FCFD35D00C6CAB0E182B9E37B69C3A85E6F5D81A8478CABEB071B14637EB418550C898720EF815F7190DE39B210751C84016661F08109E843376209BBB64D72CEA18E6ED04C777EEDFE00176952F9CA81FE9062185227C402A143F97D77A3CB436B7B0082064C3789E773F270F27EF04DA777BD15EB6A7C89BA6C3F088DF1665A44C40DD7E9487BB258E820DE2553102253ABD60FE6B568010E86C7AA1D3F0BE60D983C2E7118645F0C0ABCF3399E54674C0CA4D22B66638F5C0CD95270C19529EC3AD08D16E1B14B4776F3EBF864C77032505E108A29CA9734BCD2643F01DE3A6593170EBDC7505A4B699AA4628796E74569202073849FB27039585A1F5D0C4598C976655DB8B27AF003C5208F1624BD25EB2ED5E1BDC6D103549E746EF64AEE6D550BA90121998CA6A5206FBF7F235A04AB34343E2653EB029551F92A3E0BF9B8E6B33A1A8BABF441922F3C9D57219421447FC3C206B036F120966BCFA06268A926B6D8BBF94F88FF4FE29BF7275DBB73CDC7E5CE3837B2267C38E9E54024A13FC68366A048D837F4F6C47224244FD9D2EAE801E87CAA60EEF4A23FB05593BF2B416C3093E70B2AE58FE0D773B58E023C6F170A5812B8B31C2277AB969887AF530556E2B80F45EBDFBD1C689BD2FD3976A003513E99670888A914716F6F945D0831746E6EAB4A2D192B2A9B06502749254E24F6952660C9AE4E5A1EEAD48C7028CF505A6E8ECADB65D638137EDBF23881DB4C213A9DB7D1C0AAC010413B3244AEAA6246FFCCEAA6835990BEFE5D5AD24C219D1F886B358B078E89B3BEAA8A2AA3E364C469BB38B4F0959DD10D08E3634FFDD42F9E22CC4374D73F714326E7D8DF661B0AF8966890F8E81EE2CD548E0E9B1663C0D66A9C7127215F828BB771C9BDB501A6EDD87AB9853326B613D976105920D62CB3270264C9A9E3D746E615317645350852D720C2ABAA3B9333D66D4DAB3F295AD1451686B29CDD43E4A372AF2DF54FCEA47DCD7200138118FB6F30F34C962C07BCBA50213EBE45B609DCDDF8378C753E969EA93D71B74ACDC3FD9B536BEA075E877AF263A51E9FF6281778334588D16EF9F25CADFCFE96057F926D3122F24A1FD58F70CC9A019977FEB3056A3F17783B2C2C59799D595188D4ECF412B15EC325CD686DC61814C4F858D4AF39E92BD6681A2214F6A8D0827C2DE7E7BD0D86C6AFEFEF9CD6B9B22307676110B8AA27AFB9169BF88F49DC8CFCD5E1A8203D17EAD21E0F5A098EFFAE580F0D9F47CFD9C1F6383E96718E37660352AFF0C819F2DA4F763E9AAADDA62A16ED90703C4D452D0C1FA1E80E716943D6A946A6EF0ED64E1C334FC1813F272892047F93EDC729C61D72F4B8780ADBCE1CEAC3F1870F3B1807526408FD73ABCCE87955FA01D5661F8F70896C0A2DD6015781B4A67B35A192C9578C9B5310D899D737CFFEB4E1CC3784B4721675DF1DE98C62B17BCF0551B2D7C320AA58CABC6E97EF84D25DD75C65B57D11C6B38B1CFA49931EF06F6CDAD1D61D26E1C121DEB9F8137E865A4B9BA5064BB641E39AFF4CA62650B5BBCBFF3B14B2FC30A06AA4939E67CEA00C96A00E0769EA23B688EE4B1DDA3B9AC1290E2C144361975F5AF4AB9712B38BCC4F401F8652BE41E1CB749BC4A112D62F09D27559929BB92508AEBC753E9C93D5628EDE9A2C146E7ABC4A48CED5D2AE382E7C8D403E2229B386FA8DB3F1DCA33EE0C66212444C02F5740AAD5842EA4F25F08456C20F539730651B032196BA78EFA709EE0F709BE3E26987CC3384C160ACAB57B37D75D13F9D3F21BD3938E16EC991CDB1490C4FB564907458778763BB93AA66863EF6FB69C5CA50D04EDEAAA988290291B71027A06B924EDD0188C815CB66299ED26B2FC29653FB7EBB6F6695F5CAC05E74C1F47372B61AACB82E584D023B04E8A51BC72CF9300B5324B8F50C2BA8E746B869910961A61C1C40830A780BBE6C705A8DE0D9F3A35534C6A15EC9C11E711F37118498AA0B770F0FBAEC66358357764C74B1ADB80D4315145C42C057424B3211FB30FA29C3C64F16E1DA48C6EF0F3349E87D5C6CD35739CE7F845DC8A6A7BD6FAA543A525D4C88BE6286C632FA5E254D0F867EC4FED54EA3F72BAA4F7886704A1CE91C9AD4D0EC9BF49DFA4C8106D4216F00B92038F860D515865B31A24945EC168C2601318A682E99D2D060DB0212F04778D067CD5001148837754E85BAF9BB581E2604E0C2EFD4988A8656280FFA13735AEA2968DE1EC67B0188FA0529A8DEE91508BCDC1E1F84890BCF32C9AAFC783D61DB2AC0C05289FF6F89DF49E5CF7EE1A77D02F73D37553B65905D0EEBFCD00500BCA34E8E1E18C28EBD7C94303A933C5051123DE980F02A85EF5B3FF57B1362B9DA39391C3063995440788FCAC10B2AFD20BE8ADA921B8FCC78C89EB2E8CD03AA09EA66016A101FFD88E9A908705FC4E43032D4CC888817CEA96CA377C4D66B8374D5B0D6952983009E9D51B872874C1903AA82A5F8371181C2A767FD7CA828A27E2593AAAEEE4F16BFC43DEB366F4C22208A641A53B58B3DC43F03FDB18583E674AF3A5CE3917A156B7BF62409265B635B35DCF2340E5EC89A65E66FDA51552A4047768734FF3E9F004EBED7BF67249DE3A0A27BB891A2764061B28DBB1A4B0A26CBE3C1BFC43E5C073DF1E54F77092341488C29AED971BE94F036C33CB0D3E603B4B0E38352EE1F7256747A9FCD26C9689F3C729E116B5D5A253CBF9D6B1F466A0BE19AC615AFEE6A6CB75854F71ED7D96D6AAD746157E24963995E262E8207373E1093DB9C0342EF5E08316A02F8531654E6200061C208B40F41628C41C83BDAA02126E67AFC3D6A17CE26592678466B3647C1486206D56C07EFDC4AA0C69D95CC56B9E1D17C9B68A8B5E8A3ABAF9D86FAF74609F6F368A94BBADE9B2FE2C95120909CCFCE6499B9AC689FAC2E31C06852554FA970939EC8EE1096169DF048B5FC87730B12CDB8966D9C5D8E63CC8B19FA7648DA931FE09CF1C3D1BDCE732BBC2FD9BF96BEB555849CB94BE436106521857C2C27B77E12DCA6E6195EFC0AC7EA60A16E8A0CE46B4510B43DE9D40C56E15EB0285256F3F4B1B6E2FFD89C069881E1517394A1DB149110D707033038F8AA8F37F03BE275937CACBCD329F482A91A1BBBF88288C23F739B87418FECF1718DEA454964065C9F7BBE06E7E507FA9C8E2DECE774306611CCF87CA06B34138FBB3B453FBF394503CF1C8CD481DA4A6BA0EAB352001A0D4D74338C7B99BC3447AA773CB9C2BAED44D8D92867B3918FF2AE010F7070B18FA13E07CB7BBCD97A02D8353A0AAD90A8E5FD7E7926E19599E2A399CD88ACC3D6E8F78B7BBAFF61880F6F158F7E6775450D581973024868BF987DD8D8230BE166146E51131214EDF68BE679B7DC161B7B2E44B0209340C4908EDBE34D169964F37DBF6B00166222E87A12F71BCEA0D372525DB9DE4BC0C2D399B084463190EFF271864A2CBB0B64CC11D7B67059A8D1EDF860FAB8EF86A7BCEC876665DDECA6D922F4AA4866B6C746F8EDBC740A5289F0EEA65DD0A63712EADE9D4033A50EEE3520ED4D550E89773199B3CFF1CA23A299FD7577378ED622FBD1BF69D96693A1EA0F87532D0534E2552F1C46F2672110BAEAB6362F87B6B64ABA41835F1FADDB0611D5F242D08584C8932208629F3084B09EBEEEB05D725248D10862B3B19335714140E0912EDDEA65217D9C65AE43BB89BCC2B060CF1AA89F73A971C822D1170FEC97114E5FF381C0D4898EEFE5FC9A8D4CD8F6EED2D4B23698511D755C124250668C8917226D39C930EF8C359BB8A9871EF47B49DA282D07D4EAB60EE60C74B2472E895963735ADFAF3DADF3488C9ADFA786666796F8863E6F714247B72AD3347AC9FE6D3F40139BA9AB9A9C7A39BF585FD6575FA61D2B4EA84AF9F2311328745A79788E8E2D906762CACDFB6DE9C435C1E9F7D0D3838E6DAEAFC4F456215A86831641F0B130CA2235FFECDB4F2FE0BE86B420472B47A0D6EB0ADFEE68AC014170377847A7C374812FC5AAD396B31E8ECF166DA1F1136B4B656B05B660EBC999EEAB6B17A79916C33FAF27559CCD4037EC412F423E6F405CCC3CD23CBDCE20440C10F4EB57F6D735FFAA6251EC15AEA82ADDCA1FBC775B8F6B0E5B7AB6DA15617EE3498BD854EFF579F95293FCEE70A69E3A11D004108794B5658049AB6C7F259500E308CC12CFC5FDD4A5C324B7827C9DA4EC7CC8355D6E6BB4C662D4964A0D7A2D0EFC0B77EA7B6A4BD23F6AB4700DD303BBF680025D5FA3749D174C5CF1678A9858F7B8967115CA61028C532DF3B744C89FD0DA538D77DFBF4886DAC33F1D4A7AA4D25B78454C92A62C1EFFC0FC7580E5D273CD209D370AE118095DEA4B0731F531E879115BCC83434E24277E780EB2C305E4F0BB4029ED7DD76A604BFEA85B24ED0A9F140C6F9A05F079E2691F9C7919468AD4660676B5080B0B49E16C475495D8F2817D7FAEC6A65AFABAC647746E3AF146F563D3F52E66458708F115A8A9B9254C901D0AFBA9A7C42E0B1BBBEEB086AD0EE01541E0B1D3C41B27E895C580A25101A0FAE4413FF5AD5DAFA5EA12BA56C6825406C88467349ABC48EFD3B101FEAD68CABA4DC5925BDEEA77F4411BF9B160C112137179E9CC9A6C6037F84021EC5BB1088157F01900EFF837DE1C72E37EC2978F02AEEE8D238EFE1FE1556A639EC88BA88003686960B8013379420BB02778E17560C12F3D6D23E4F259E027BB7594A91580CA637B5A2E1E4AADAB03D1734DE86863F4F2DDA94E3B5C2E761F808045BDE4A8F62F5D15761B42A2D49FC220038F1C07CF478091DB7C329F074CE41E9DCA57ED2F387D1E8B42FDD9B02AC4BE793C1AE6F388B0FE3D42CD89ECCE1E293724150A37D4F0DB020D7C8C59A6D1A0A78425CB31FD1B050959AFDC6AE321CD24C4928C05BA76A44B4FE4F60C349496611CE268A852F74A190000DE2514601EDBAF57950455AAED0D717FE2081508C4B5197B4E00B924D1CD5872F5B9987F26EFC61A6CED0F821B72055B26D31531F4074C190BA9121E128A85D7BBD2A533750258F2420A9BE7B5875FDBFB6E0DFEA8167EFE6D7F738DDDA807D25737D638DCD1E6248A12FFF96B546374494622B48C972F9553B6C5F59ECB249A02C9808DB126FF2977D96495168583191BFF3487854355C00830D5260BF095CEEE55F6A1C3D5C32246F93CA3228A7EDE23BCD99F86AD14BF63C0757041D91D8743A5A6C09ED145462C12408C16B29D7DB206F25F26F6384131373E035042E07DDBA55F8CE3BE3F52779373646C88A8B13307CE3AE6CE605D6D658F57A341E5E931D2B06163109A03C7AFE78372C3E4B89E8CC05884A5870D44F21F7E2ED7BF25AD8A3289D8375E226DCA6346E6DCDA9970D6C916718D649C4BA31C60F11BD4FFF0B1E5F8915AE0573EADFACA324026781775FD580E98B42025A64E252AED2141E5734624F6E20825F671E7C392AA69FB7CA4497B1E8CE157FDC5C2FB1CBB3C417CA8D4BEF9F171357DD7519CB0F08D8B3C42A87693B6336891FE37312F1D193B459646F9C5AB018B23140D472B44A70D3837BECA12B5ADC6757C2D0BCA400650CE26571AA983C581412D538FB8EC3D4D4729F8E75E4F288FF87084498DF5B0D30DAC8904ED9C63A4722D78F5522E1D894EDFC4A0572EF27F0DC722290F7C035B6C70720C63385FAAC6446530C6333DCA630B0AAE31108BEEAA09F7167A3AA5061A2D88E1BC1116068019DA02B9C1A8DA9957C60461652A5BF48362693139308BAF6F16A8BA4C1E51E5042E17367934D8512C7D12749094B5032CED28AEBCC546D94E634ABB00204D49642F6D3703257B5E8A0814BC2E170EDA51958D6EE5A3283EE74DE805EA2D510C2FD90071377DFFF761CA24B4B08ABB376470596A92EE53C0F72E5FC54D75646CB7089C45168D92D39595FD1B7E738E5C82A0A179C3E67941753F8A191E3AB9FC65C7FDA7FE6620E6ED85C4FCF1384273A003329CC3FA98C09F4ADFD6F389B56ADBF0B5B675D66E2C8FCA9C4E117C404CFD16691B082D286B2F3D18A39659E353C06A2100829BFDD995060D096E5AAF230A92D9ED10AA52BEC85A9748BDCA8635D7387DB75B4FCA61189F85F2101EFCC48DF599037FF6432607623827F4A51BDA7FD73235ECF7C7CAC878C47124609EA95DC2CAC82182B5D0E557AFE907926C7383BB7238ECC6E7962DDE3B0731D201A6C38EDA31EA43A8FD2151508557EEB3360C50ED68EE65CC86DB24AA5357AEAF1355F91588B83A89400285179B76623E4F1AF4FAD0E498C86DC24356B5A945A572B23D2F5EC93A8DD1D7AD56694E311078F66B4852B3CE2ECD30B7B674D3C3A6CCDFA4E93932EF75D077190947326F2F8122DDCF4E0D42BEE40E522E1174190E04069989A957E73606E567DBAAC4E79AD1883541F5F468CF9CE5F52AD0B1545C6E1AF53098D576394B97B8589567142F26C75C894EC7081F9DD9FCC352BC5545810B7D9FCFA6F1FC11FBF66E3C002A25C1D6041964DB1D9702E5A2BEE8B2E68F4262C789F9845F7FC5507752D0A9D39DAFD6F18CB84BE0B5FDD68CEA0443136F15671BC948A02C4D7684541463BAC66902050F11B159D6F682018C1307756B824D084D698E0A450FAAB40623F7CC52331013D7FF3401BDBB802537371409360128C1D75B7D5CEAF7C00F66FD53B30EB5BF4902E39D6C5E4B5A81D968C31DFBA18DF50B25F506C5B338D03F24AAB057DD167187CB065263BC739BF0FB737224A203B57F5EB7E8C0B8834FAABD2D2990AA2A0C52419630AB2B914EA26905CA4FB6AB9D20E53109252DB0DF37B6A7A68F49FB56C1772FD31BD31A43CD693657A2B90FE4119008BB6920D72490C6F8E483EABF687DBF08C896D8814DCAFD3BCBF7692C7EA6B394FF413FED90900B4244EA25CFD2A9DDE9E3B0375D391EBAE07BE51B2D379A7A3DC045C0173DC168288B863C63A52D5912298F38CE6F565BD0965F71BB84DE1ABA6FE7FF9CD9C6AC22481ED1B2D2574B4E8C0903B851BBDE79F9EF80EE5FBCA3AD6B81F3BD3DCC3862D316765084A90E3F04332F7BDA6258B41985A2EA35CDC29B6B244750538E00CFC0A0D54B357DE540E141DA2C9D27D309394F93B8294E2D1543EAF56051ADEB86226FBB399D1D7EAB905208F3E3A5FE33514E2703EA58967283CFF74A7884FF435653FA3D7CA97C2BC0F817D74529219DECC20F0386D79BC9C938A5CD1634231B52B5AD9FBBC0B6B), (0x2F230BF3D5A9E595DB675FBBC7EC8206443F3AF059CC50C848F8B91E22C0B57218B9499990A0B4B3ECCD67C9557092EC78B5C72C43305A62D243AADDF0C6731AB1EDA30EA2E976A48A86038C658672D866CCA66CF9892EE85EE7C64CF5D7C325594D1768CD834A8E3F22A1BC2CCEFC4BD1D2772320062028BEBAAFBA2229AFB3C3DD32186E0A0AE282172DD7E771BB90EA7A7B225F9F05522CEFA912D48F6C1673EEF94F9BE4DDC6C795A108D949404CFE1ED0A7AD8C5323D7DFEB7F60F80DF2AB1663F9786CF5059DB55BC9FEFD79E3AE5D14B5BFC469E79AD577BBF95D66CF88AE5CC3E547D391), ('d8e6ab40-06b7-4b36-b51b-f174ada6bd2f'), ('9999-12-31 23:59:59.997'), (null), ('11/19/2008 1:26:51 PMThe quick brown fox jumps over the lazy dog0123456789,.;:?[]{}()-+*\%^=~!@#_|/0111/19/2008 1:26:51 PMThe quick brown fox jumps over the lazy dog0123456789,.;:?[]{}()-+*\%^=~!@#_|/01'))"; + break; + + case 5: + $query = "INSERT INTO [$tableName] ([c1_int], [c2_tinyint], [c3_smallint], [c4_bigint], [c5_bit], [c6_float], [c7_real], [c8_decimal], [c9_numeric], [c10_money], [c11_smallmoney], [c12_char], [c13_varchar], [c14_varchar_max], [c15_nchar], [c16_nvarchar], [c17_nvarchar_max], [c18_text], [c19_ntext], [c20_binary], [c21_varbinary], [c22_varbinary_max], [c23_image], [c24_uniqueidentifier], [c25_datetime], [c26_smalldatetime], [c28_xml]) VALUES ((-1768876553), (7), (-17727), (-1), (0), (0), (1), (0.7719), (0.9405), (0.2463), (0.6339), ('©ýÜßOåÖ|_/Aãª+©ÜÃý©>|a_@_äßb©ÃO@ îýUÃ¥~ÜäÃÜ¢zßöÜ|ß<,£|ª_©/UZzbÄîã'), ('Ä,.îBußßß,uêBUurZ_öÄ*zߢz:ßüåÜbZ/bO,~Z/ÜßÖZr@Ãuß<Ã|Ã_ß*bªvßÖüãîªo/oAbã¢aCOð~AªCªUA.ªbv£Bo|U ©¢+îð,ZbrÃuA@¢zbU>ßv¢Üî>:.¢r/azbZvý*ðä:@abA|Z,B.ü~ã£ÖüÄîÄå/>Ãœb£O+h'), ('öh,bZv~Ã*ubzrUäO© z|B£b.öÖö.äOh¢äÜA/:~:ÄCo*©+r|ãÜýÄß/©@zBüB_zOÃ¥Ob/:.r/Äbä~:öZ,AÃOB¢ä< rOUÃ*<<ð,övO~öÖh£*Z¢öãu~aÃð**u_aÃÃuvoÃCßBýb:Z~ä,*ü©Ä£_h|o.U<äÄ<üovAAý£Äîîåã+ZÃœU/ã äz>Ö/Ã:+AB/¢ö+@bZA_ß.ÄUÜßÖÄÖv,oߢ_ãO<.ß*|ª¢ªuÃ¥AðobÄö©ýÃB¢ðªý,_ ~Ã¥rrUßB¢z_ßUîbåö𪪩CÖ:o+ä>ýÃäZ_ð@¢ªaÃÜCb...äÃßbÖý©,ßärã.bß+ZBö/vv +.vðUß<ªÄ*bZ£b:UÄOåÖbzßrüä,ãü<üoª,.¢>+ÖOzãäUv+>vb¢bü+.£¢U+îÃU£ßÜ£Ãz/ßßzßrÃBaCuÄÜBC*a,bbo©¢vC:bð£aB~@bb+>/~ö+¢åüîåzoA<Öª£@u,/äîðßãOÖrÃßhÜ¢ü_Ãœ ,:/ÖCã©ðÖãäÄBUhAB,ß|o@/CÃœubO+.>uß CÜü©Ãbväb*Ã¥<~|ýÃ@~ÄuOÃ¥azýîÜ<|* £åÖh*b.£ÖZZ/BuZ¢ªouÖ£©ãZÃœzÃAUªß/£©Bðüðå:ðbÄZzzð/,ovªîª.Öß<>ýÃbý©ßA_üßa@ÃZÜã~ü|ý<,z¢b*u@AU*B>.åÖäbb>Ã:îAv,aü>ðbÃÄ/©u:Öå,v,~ãa,Z+.oÄîÖvuO<ª ðCß*ãOÖzoÄr:|ÃCu Ã¥baäC¢| roý:u<Öã/üvUa£aÜãöu:¢CÃãÖvh/ÖÜaü*¢Aö*/ O+UühÃœUbb¢>Uo/Öbb>ÃœvªoöäÃß@Ã¥,ªb..¢bb,h~b@ubßv@ã_ª_ý:|oÄA.+Z U*©<_bß@,©ÃîîÄÖ,BhªOüüZ㢢ävða©aävßo|~vOà oðäb_ä, övÃœB+Zbßäðr|ª+ý©b£åªß>ä.<£ß*ý_Baä~b,uÖî_bÃÃ*ýhÄßöOAåüß>/,+¢Ã<ÃãzãrÃaZª:ZÖ*@bÖ@.*ða.ß>rAbB¢ýãhOb*î/@Ãœ/Ä> ÄÖh¢v.©åöZß: AߢO¢ð£ªªo~vOO a£îu>bBÖb,ß©üCåã+¢Aä¢å~ᚄÃC~_+BU äz+~öUöA_ÜßUÃ<Äzr£ozÄCbB/£ üo@AÄ/¢U~:ß©Üð~*ßý_oU,Z*Äöð¢ÖUZhZðüåaÖCßbUhã.ü,,hÃœUBî>B~Ã¥OzÖ@ý> O£,ãöÄ båÖbaU/ðÖ|@>üarUÜß+ýã/*vBÃß©Ö|_/.:Orh.b /v|rý>_ ü.ªa~Ä>ª_<ýZ:ÃœOOABb@ßýB*Öb|~Ã¥hZ~r<Ã*ö@äÄü~©©/ßå©B+Oî.a>üzvv_oîÄ,O,Bübßu@U+|U .ðüoÃ¥>@ü+oOüÄAÃU _bävÃ:U©,öb|ä>ý£urÃœ:bouA>_î~rv~Äu _/Ä/ßÃ>hb> ÃvÃ+>+,ÃBu|ßäzªãî:C*+*_ö|öÜ+büðBÄÃÜvOuÃîOAhCý¢ähuäªÃðoü+ÃÜß|~AªhZ:Co@ £ÃÖuo u.üöB£hr*Uo|Ã._,.hzo/ýã_>êîuîðÄý¢o ßä:öå,ÃœAZ|.Cßvvªîaîu~//,AUý:z:|BUu~_©*ZAußUöv>Cü¢zßýÄöÃ+/bî¢, Ããý ä~©Äö_ÄäaÃœO*>Ãr,ö|B:ª BbuCÄÜ>OðªÃî¢+ @+@ao©BoZ, u~ab/ßzAor£ßU.:Ö/媪Cßb.O~/:©aåðÄ+|ðoÃ¥Oðª~uhÃ¥_vªÃî©Z©ßu.@~äã+ä+hzÄCää_~_ÃÃa_~ð_¢zãÖÖ*ªvðho,~a _Örbão/.ÃhzC~üÜÃß~Au@_B¢ßÃ:OÃÄha_*ov @B+rîBª/UaZh: ß_Üßý£|ZhÄv©Aaz|uß@*z>©A¢:CÄß.ðZÃ¥CãÃ>üßä£Üoz*ã~ãßuz©vÖza>u|AÃ¥+~üöÖaÖäÃÃ+uÄ,~:Ca©ðZðªBvACßßrv.ÖývOO+ªãßüb@ö:_+Ä_,rÃ¥Bª:ýå©Äåðb_/ü:Ãh,ZÃ.ãBzäboß<ÖCvßb@£+ßrzÃåöåð@BüýßUzv£ßAazªðÄåuCßÜÃ+/ß* rüA@Ã¥r, üOß©@ßaov>£bOZ~ß©ãbhßÃ_r:îCz¢vhßîZö@b_~aÃœ~Cöovhî+uãbhU@U£ªr¢ÃÄ_ý*äoî*bÃCUb+u¢~bOÖrð,/B©©ÖÄå<*üzbbCªZCu| <ÃßbÃ¥z¢b|aä>Ãœh|UO>o£OvÃœvÖzO>ýÖb_¢~ðÃZªß/bßð CßZî|*C¢bðhuö_z|hhbßð äOuäü|ÃÄ|+*/oöavð£¢::Ä:ÄÃÖzuzöÃC,ßöBÃÄ+_ð*+Üä@,*|är/o<äoÃ>Cuv:.ª¢uA*að|uvB_C*©ãu*ü©/ÖzöððÜ*O~oZ:öÖh¢ß/b@@CÃ¥Cöh+©OhbÃœo£Uuý<ÃöhC:o:Buà zvöuðöU£©££:>ª>ª+©*+z> ÃC,,£Ä©äî¢*åäB|UÄa| ßb<¢>ü|B.ä*AßöUC@_~öýßÃßoÄ¢>ß/£+Ão>¢¢Üå©o|/bZzbðã/ÄO.¢ A ©<ß*bZüuüZ£:¢>Ö£ðÜ/*Ã@ã¢Ä£+Ä<öCßãî©£h¢o£.ðvÃaOßü*_:_~ÃoîärßrU//Öö:vðߢߩöé+rBzã¢>ä,@üîhÖÖßößü,ü<>Ãœ|îîoÃÃᦌAÜÃÖåü|Ã~AUý|CobãääüZÄåà ÖöÃ*C©Ã*ýCübbbã,£,:vßýÜÃBåäö£¢ îa/CAã,:*>¢|arýßßa~¢z./@ÖoaUUßßÄ+ßbbªöß_vðCÖo/Ãœ@BBbðbýa<|î*åãhu@ÄðOuhöOãOA+,z©+ ++ýBÜäZß/_::vUzvÃÄ¢CBßbýr_B~ÃœO,~O|: Cªßoö/CäÄ:ü@Ã*ð/|zãCr,*>@+ßð/~ðr/ßã>Z£rÃßr>và aCªv|* Ä.¢äbaÃOA~Ãœ+ä<:aýoðBB ýîbÖr*à oa|Ã¥Ã,u¢U£@|Ö¢Ãîåä|CªC£Uu+.Äßzß*<Ã.ÖßýÃbÃœ*îZ~_|+OOä ß~Äb+ £+ü>ãöãoBbuüBîC<*Ur*£ÃßA_¢/<_åü*,< +BZ@ü:./>orböuzU<äa©ö|ðöu>+¢uBä~ª|Ö,bÃuîUvZÃ¥*_>+ß,ßo Zö./,Cýßzãa.b© ,îvªA.ýü+Ch©äý_© |ü//UÖh~:>|:ýr*Ãœ_UabýAzv/hãÜO©äbUÃ¥hhCa|ð.@,ðÜîzÃ@ªä>_ð:u/äoz£ßvz*v@£Båö:>@b:£,<_ßBU|ß*_z.ðÃUävvªUB~>+©¢¢©,ýaãa|b,¢<||Ä>ýÃuuOrêUvý~,¢¢åo,ZOöobbr/~bÖå:a,£r>O*ªAözî:uª¢C,zÖuzªh:Z U*ä_*äbüOÃ.hÃßßvU£v~ߪß<©:CuÃß@ÃrãCUo,üA,U.îÃvªö/b*>rÄ>£|+äîÃßZ,u©öäÃ_BãÃUO~rîÜ.ãOߣ:a_> :ÃÜ@bZ~üA©a ÖUåö>ßö@ð/£ª:b|A¢ðrh/@uãz ªöª¢OuÃœBBððÄöO~ü.AbObaÄ| B<ååuaA¢Orýîzv/ß+ö¢Cðüa_îªÖäarÃöobÃuãOAö.a:rÃœ|@oªåöZ_ßßB£~ä+ãrB_ð._a*u~ð..ýB*AÃ*BªvhU,, v¢~U ©BuîðZ*a>ß,zaÃ¥hßÃÖªä>ZUöüZ@auÖâ ªÃzÖO/Ö+*~ßäßU@v>|äý+ß,äZö¢Ö ÜÖbÖü,hßb@ ã>oÃ/bhbaÃÄOä£üß*/Bh©aZ:Uv:>v*BZß.î~ð||bðA+Är|ýßZÃCîÃ>äî<ü_/ho¢/bBð+:ĪÄUÃ¥C¢ö..Ãb~aÃ¥<ªBz©rð@AhöÖ.ð£B¢¢*|C.©ß+Uöb|ß+_hÃü:a¢ÄvßBÃCð+rAÃœzB/U:ÃœbðZð.UäörÖ.ªÃüOBaîBÃœaÄ|äabðZvÄöZÃüå@ÃÃZAðh<*@Ö@b~uB@oÃÖ*+.î+z|Ã>ßCðÄb©+z¢bãåUr*v_åÄAª/hau_ozÜðÃ+/ü_,ãßüðäÜåBääCob£ã.ä©î+ýî<_>b@Ä Ãœbo.ðz..ßvOÖ,.ãb.>,+|*vÜð~>håýß/Zý ¢r@+uOb Ur>*Äß@*Oü@_hzßÜr<äßOüÖå+*ð_î,,ß_./ÃœOÖß©h£A|*Ãu£h Oßü<~ Ä©ãB+aB@zä©b>.uÄ£obÃ¥ÃBv¢a|ªbbb*C ðýÜå~£©CäO,ÖäîÜ¢å.åöªî@â *+Ã>ãUb/ðü:,~Z©©b aðÃâ~r.@Bã*aäCUbbC|©oÃ/üßo>ߪZðãr©Ã~¢ÃCz/Äý~|ü~v u~_@£äUZÖã.Ä~'), (N'ð@ßO.£/*aUU/Ää.ã|u>+Ã+z_ß:zäîêãÜO©Ao,ã©ÜU_v,/_/*ýã>,©~/hªî£_~Oa>Z..£ßAããoUßB*+_o/_@ªÖ|ýhÃü,hã@öv>ohb©îüh©©u.Ãœ*Ãœu*>Bb©.ÃÃ/vîã¢Ãa£Z_~ru><@|+öB ~*,Ooß*.î~B..¢,ýh>ü©~CUÃœ|aãa~£:î£U+ö<ÜßåB@.åü/Ã:C¢ªoö ß/Z¢ßaÃœ<>r£,ßåbZüz.ö©äýßC¢Aößî/,Ãã*ßüý/Ãœ+Ã¥C~*+©ª/ÖCÃðÜ¢/ß,ãZaC~ªÜv©ö_uzüå£|ÃœÃ,/Ãö.>bßÃ<öuîA~hoÖvZ@ßBÄÄbu/hßZuãÃ,öB ª¢@ßAÃœÃârÃãÃîz>r|*AU*Z¢£ðrÃ,r¢£bßo¢ÜÃßzýý:aÄzb,î*>ߪbBU Ã¥oB~a*.|BßîéÃ<ÃœAbUîvð*äßßAÄßAýÃîzÃ¥|ÃÃü¢A:ª'), (N'uªaA~aã*büßUÃœOzÃÃbßoã+äîbzb¢äßzãÃoª.ÃÜ:üî|uîÜ:öß Ä|ÄaßãÖCüvöu>U©ö|¢~Ã¥aü~ãvZhöC¢*vz@BÃh©*Ö©~ßOA©büUßå u/ ÖüäÃ_Äßý ð©ðüoðßåvßu/h,ߪroÄzÃAbär*Ãœvößbã~>Öîå,ÖÃ*aO/b~¢ßbð/ªvurÄ,ååü,:bö*Büv¢ößÃÄoÃœ uä£.AãUᚦ_Zzb@ý@ßzåöuBýª*rChÃîC/Ã¥<@U<ð|rvoÃ_Ãü~.ßuðãå,ý֣ߩ£h©bÄ/ã.|ýÖbäÖ©Ãb+/î,ªÃ*<üZ|>'), (N'~©vîbªbaCä_A/AObBrÃð+uÃ¥ZA/zªÃhvðbuO+~ãªbý+zbã~vzZîO*ß|,+Üüä¢Zßߪ¢üýß>C*:u¢b/>/öÖO¢,:ð@./Zo/a©<:,bOäZ¢ß/î|,uãC|ß,aoüå.*©B|_@*© ÃœÃO©+z~©h+r>î_Z| Ä*Aý@@|üÄ@ÖÄBZBuuª<©:O>ß*A~©ð/hßýrßý£*vuªÃ©ßßöAbCZÃðßîä_ãu¢<ðåbZ+üÄåZÃ¥.uãUÃ¥~£,b|©ý|@üåßCA£>Ö>¢_@,Uöðý£ZBðîzbUªO@>*U¢åÃz+rb<¢+£ÄrÃ*O,:h|aÄ:~b|Üå.<ýUo+ð£©ö|ÃðO£ÃvOB*î.ßb+Ãœuð/hUß.Obo+.|ᚎ@:î.¢ãbÄzÃ¥<.üa©öä+hýu@ÃÖzÖh>*äªv~rî*hüh,äÄã+ arbà .z|Baîz.ªßÄîªýävÄz*,Cho.öo£¢üð£ýz/Ãß ª_:hãªbbOÃßböbßoZrZhhoäv©/©hĪoUböBÜåvv_C*Ö/ä~aåãßAu:©r:Ãr:,ðî*~|_ýaöAvaöÃaÃœ,.,B/ßzî~öÜ+Ö£BÃßåªuýoäz~aöß_aZÄ©.bvß*ühª:a¢Ö¢vzö~ObCßßU_B>.ä>*|£bÄ ~ßå:î<ª_oU_üâãüßu~ä¢ßÄÃä_ZBB/üÃîðÃCÄÃh£OUbz|_Ãu£,Ã/<ãÄÖCOª+r>/ÄvãbßîÃvBbö©+Ã,h äb/ÄÄ_ubrüa@CÃœ/Ãß+AÃ:Ã¥zðh¢*@o*AÄbZ@hbÄaêaªöÃÃýz>ý_++,äüÖ>~brÃåãðZ:ßvz¢B*zC:v+r,£baOߣ*£/_,|hð_îCÖa/ZoAr+:AbZ,Ä+zO/h©ÄbZöß,Ãîbö.Ör*@*ÖB,U.ÄÃ>>ÃœzZz@ªzBbOA_bühäîÄ©©/*îîßýð+üðߢvªÄÄ_>ßaüZý£ýÄå_v+>abãb..,<_ÃöCC,,vý ©ÄBv_*©oZªUC©£äAO¢r©Ö~/ ÃäÄ_B:ð|ohÃÄr|ý îÃ| Äa>ÃÄz<+Zz~bvÖ~©£hbßÃÃü_öoߢ¢äÜbAC¢Ã+üãÜý_vä_¢::ý ÃܢãAbüß|<äÖ/_@boCîz©zZãh.Bý Ã*£ZOa/z:ª¢,ovzCßãzA~z bAa< Ã¥>ªöý<ähu:U_bÃÃ@vî@AýÄ*|ßöÖ,A|vo_C.üýÃ.Ã,oî ~ÜöãªßßC>/*OhAoAÃÜý>Ã¥vu£©ß_*BbhAßÃäîb/îuBÃ¥~bBåÃÃ|î>ua.îü_>ýZrÃ¥ÃÃ¥,*hUr*bbåÜ.ýÃo_ÃœCßßO|îA,Üî+|/¢auoéÖÖ:_rã/*UaîZ+üuo,b_ < Ã:zý>ªvÖrãý<ßA£vª*C|ß,å¢ýªu:¢h¢*r.Aaur*ãB<ßbZîOr@Cä>ßoß|vBß,| ðªÃÖO/ä<ÃœZü,å©~Cª+öÜ:ÃœCªªª_>ð|>C@aUÃ|_/vhýohh|î*|rÃœ>Z©Ã|ÃBU/ÃœuA_bO ,@ÖbbAz*ß@U*_¢£Ã_Ãœbh~../,raý£Cöbüu>ãßCÄ:ý ðA<ÖÄßh_>ÃœabÖüC Ãäazé~O,zCßå.b~hU<+ö¢<Ã,b,ß:~b.B:ß~B/arh:ªuð£vb>_:@/£aýbýb :£ubuArî|Cuub_Z/Ã¥vßÃßzzîh@ý/:ã@B*©ÃuAB+/Äý£ö©|ýäräUuÃZ©aC¢@ah.|ýa@@üUÃýbr©r©¢åa+ßðü>ßääBC>C.|+zz.©ðoba¢@äOaABý+uªoOu:boo©.ãÃ|~<ã+îUöüãzßz:¢£ãßaCCîß.Obã*>Ö<¢oåöZÃO£OÖ.vÖã,ðý:@ ã.ê©Üb©Zbî:r+â.@ ö£Oß+Ä¢A~Ãœoãîý.¢r/vv@¢@*hãüb,hÃœ>Z©©~+uZv_äðãO>BbÃ¥<ãubAÖäCÃœbbo@ªÃÃuvüÜ.Zh>orCÃuOÄ©CÃÖBª:vîß:~OuBAvOoöuCvbU<_ãv|.ä|/U¢|ýßãbU.|bOubz@<Ä:ã©ßÃß*äãu@Zuuu~ß*+Äh.að:öabU>_ÖbÃ.ÄÜ:ðÖ£üaßÃC äö£uöhÖ|bãÃ*ÖßZ¢ ÃÜr@ß>ß+.¢bO,Or ªoCªZ~ª C*Ã¥ACOö* Ãhüîßb:ãã@@Ã,££_ah£oAbBoÃ¥,:¢ÜvuÃÄãÄbu/ßC©Ö/bB¢ÃÄu>CbZOz¢Aßa.~ßb~zãü_öªz|*_>v¢AbU©Ö.ZoO,_@ba/.,@ãÃãÖU©rÖ¢O_ÃÃÃbaaÄÖÃã.Ãœ/C//aä~Ã¥oüA£~ÃœZß~<ýÜB¢<©ãz+r©*£a ZbÃÃœUÖüßaãZß<+ßßuªýA££C:hÃ¥.zßßåbåãýßîî|åßÜ@öZ*Að~.:Ö£ü©¢öv£* £ýrüUð¢,aîzACUÃ¥hOOßä>Ã. h.ðo+ã¢vu|hÃœzýb/,_~>oÄ_Ãß>ÃœBã<ãð~åßßa:AoZbß_BCßOh*:öoðO.äO+äb_.ÃÃuO/ou/ö@.uCîý£©Ãªü>AåÖ©Ã,üßboCâbßäö+aîð@/ÖÃb@Ã¥_ÄO:|ðÄã<@ÃÖv¢ä+Z<<ßoÜÄz~b|>:ýü¢åBv+ü©OÃ*ý+/¢v£z©b:u~ÃÄÜýåä@+r+<_CÃ¥o*>,¢zß+Bß© oªîå@+<öo£ßðÜu@+Ãr_BB*üöÜbÄÜäCzã£: |>,oüðz©ÖÄãvöäCÃåU|u᜔C:£ÄBb ýv îüäZA~OßÃuUößÜðÃ//~bu_ð_ZÄzuu¢.Ä|öAÃ¥U,ä©+/B/ÄO©äÜ*¢î.OB+bza vü|bß@+äÖbz+ã£ãö,_..Ã¥A¢OßßCÃä~*>zð,ä©zu Äa,oßî_Ãv:>U~Ã¥Oü ößßA@zö ýO,|Ãß|b>ß©Ãh,B<,öbhÜð.Ã/_Ä@/ZOÃ/ããÄoh|©örbb>vr|Ä ¢~Uß_bÖ£CoBb¢r¢ýUZ|+ U+.r|ã*uo*oßC©ª:£ZÜö>a,~Ã¥~ä:@Aîý a+rᦁu..üßðv@_a@ªaß.ßUüã ýýîÃC:O:CZ.£bz|_Bb|£¢b /a/Ã¥OðOhuýZüu@Äã+Öß.U~Ã¥|ÃUÃ¥ÃO.OÃö£:ÃÃ|ý_ðoO©Ö a+rOîߣbãhÃ¥röA:ößß~A|bAhßÖv:r+äOzÖð*b+h|oü/ðBãAoBüª>ÄÖý:: :ÄÖaÃ¥A*ªboöaðãozCªO£Ã@a**UÖ+:_Ö<Ã¥Ãî.ßhB,~<ßärBbÖ*.¢+ZߪöÄ.££vüo>,ü@ÃœbvÃhhvOaaAð,ObhüÃ+ ã*Bßßb,üuUaãÖBu*aßo|¢£ÃÜ¢b:ÃaÄäâÜÄ¢U£ãÃäUÃß+ZbÃ<,OruöÃO¢zoÃ~Ãö@, rü,ªC*ö<Ã,üö,*aÃr¢@£:ÃB@ýð>BCoZO,bbb*ävßvÖUzu©îßÄã> ýÃÃ¥>åä¢rää+_BÃœ_*Zö, *Ã,Ã:Ãœz aÃ+v©üO£O~Oýåzý_böüîßîZãbãu+ßa_BÃ|*äv@©BÄýåz*hÄ~OoÃüC,ðbað>AüB*~v.zzöCv|vÃ¥OßAý<ðh£O£ ~üZ£vã*A£Cª£Zböã,¢bîhÃUrhbA/~Ã¥ îÄv©/a©ÃZî_ªÖ|oÃö_BÃahÃrÃ¥Ãb@ußî/ÖÜÄöA+>ßÃöÜý~B<¢üzBî>ozÜübÜÃðo::aBãýäuÄ|Avab*êßv:_ðÃýöª:ðüý~ßå~> ý>U<Ãœ'), ('@Ã¥uhU/u:ý/<ª_Ãahu@ðUÄýu+/~AÖB|Ü©ÜzrCÃÖ_ª+.üö~ü+aüã@Ã¥@©äÄ£,<*/©ßãu@î.Öz/>O,ãü:¢/ÃœÃ_ßãU/Ã:åÖ|BZOOĪCÃbbüv£.AÃhßåUAöâåãü~ßã:@ýà uýrh+*î+ÄÖZo/uÃ_¢ý@_h~|Zä¢_ðuª/vðbßÃð©@îC~üä~Ã_+bZß_:rÃœ~~Ã@ZhÖOhÄåOäUöãöüZr_ßvC/br_h üÃÖUBZ+ <v©¢AªßÄB©b,arb:vB.ÃA<Ö ª©ªãé+uvü@:OÃör.::+*oÖßU@_hãäýa@*A+ýýA/zãCbÃ~Z|orZ|A+ü:îß~Ohu+.ý>öß©~u//Ab>AÃB©Uüý£|.ýh,~:O,äZB<ÄbO¢:î~ýãhýz:.uÄððouÄã~@ß/bCAA|ÃüAz¢ðAÃœb.'), (N'výãðoU<<ðhäÜå<©ãaß:öß|v /B~ßåhBßbCz_ü>ðä||£ªCU.ovrÃœUöÃîÃÃ@>b©©~ÃœAbÄÜoCä@î~+Uð£rO©.@Ã+ääzr¢ß:aärîýä~b_£ýh U ++©ÖBz +Uoî,or,~_ .@b,ö_åÄo©<öÃB:.ähb:ßðÃZüî,Ãao©*ßÖ_v£Ä:A©ªvã|/ÃOª©v@üü~/,U@bhOÄýahhý_OÃœo©Aßr£îÄ@Oub*Ã¥o+ãoBÃ¥,O,î<îvã/zâ/îBãöO,ß>@aåðC*BãÖZß/z+ýZC Z+bZu/~£/Ãœ .©Üz+Ã¥O@ý*_Oý©aîOC@C|ßäC./uß/ <ð @*¢bCð>ßÖhüÃrb¢r@.@î©Ü~ß©îö£,b£ä¢ä< +äbOAzßÃå+r*ª~ððüa£ÃÖß,uýã/©CÃ>äÃoýãäÃAðov<ðüÄ£*zß+uª:|ᎄ|>bb@:ÜîoÖCÃ@bªª~öýuîA¢ãrZzvvUªOCýo@äBÃAhb|îU¢zZ¢aäªß<ö_Ã¥uÃ¥uo@£ðhð|@ðBÃ>rüBã<Ä~~ýa£U+a+£b¢££u@åª/£ÖzbÃœ+@v+,ä,Cbo¢zUhÃ¥,_h|ðvð_äã+hüÃ~£ª*z /Ã.uOhÜÄrUßöhuüÄO£Zuäß/ßÜBvZbÃ¥>*h/Ã¥,©@bz+£zªa/ýÃÃä<öbB:£vª:Bä<£zÖ<ßÄ |b£~üär<ßß C@|O._ZbüUhbbý/Ã¥aaä_£v.oßß+Buvo/ßCü*ð:îrOÃÖb.ý~~_ür<öUÃäB.+~OrãÄBÃUöabü_B©*î@*Ãßuß_Ub©<|.Cv@B aýîbýÄÖ£|:a©+ZåÜ Ö©_*,£~£.uÃ@îß:/Ü£*a:*ab~uBU+zr©£Ü>ã_ü¢*z,|>bh©¢|u~¢_Üå,©<Ãœo|*vCaaÃ¥C ªîßaaÃbÃœ>a:|:©oÄ~håîBobO:ßüC:>bU_zö ܪ@bߪo< ªC©C,/Ã¥auu:ã¢|rÃö ýürahÄßðüªßB>ý~ääÃZabboU B>>obz*äZo>C~üüZ<:ZrCÃ:UÖÃ@/ðvðßöÃbr ÜîZ:urãBÖvÄ Ä~ªåbr+bv,*ßîðAUÃoîðÖüÄ_ýÃî@ªha/ßCuà ðî<©hb+_>_ZO~,~+Ãœ|ÃÃ¥bÃ¥zzã/C,ðüßÄ ðÜU.U¢ð ý.*öäöUu_£Ã£U.ðý +ü:a>*hCC>¢©Uu¢>: Z~bÖ|>*zAäÃÄCaãu©/£ÃabrãÖ:¢_Z/ChÃœb¢,Z¢,ö©O Z.,+ªãA_OäÜ r+rýBäßAªÖ|ðA+/ðAbÃAßÖð.*BAÄvåðvýÖ.aB£ZBäoÄ@ä< u.B>hOÖ>::Ü¢aãBÖÄßZðZö.ã,ÖªO©A._åÜßZo,ÃœBUUü|zaZUÖ,aÃ~_AvýUB,|~ã/buÖUAߪ bOÃAýä_+<*.vaÄü*Ã_zðZ,@©.@@bvArößã,ãývhÄÄðro~. v,><>Ãb£©a¢< :C/h<< b|>ÃZor|ß+h£Uî.b*Ãbã©+<*üöývãÄaîCüÜ@B¢oß+ |.£~+~£ªÖ,uãU,Äý@_OB£b+U@vCîüÄ_u: ßbÃ+~.ªUüªÃZÃ,ßBC¢£Z©ßzê|@ßhrbr:rZb>äßÃÃßÄÄããZð~+_~,ý©u@¢B*.uoîåýhðÜ*bßýÄ,C*:u ãCZaO~ .>oãÜba*h î~_öªb.*<_£vü :zO,ZuhÃz©Ä.¢>zÜü*vß:äÃ,uAä£ÃA©o@ß,<åªbðOoZäUO:ðbÄ|zaOÃ¥~¢ßOv*>bvý_îßBãå+Z ªZ~ßoA|ð~ü<+o*ößäb/ß|ÃCaäÃZ©ßußra©|~aߣhÃ/îbߢ+|äZüßð<ÖîO~ö:ÖîC+hv*<Ãœ*ßb/ZBhßArUzÄß_Uav_î©..äO,ßz_ö_Zåß@<ð+£+¢Co+ÃoAB~Chaß~Bð,Ovîzßvb©ü.ðzbz¢¢oZ_UbOA*ÄÃ.ß@,£Z|à au|ªbãvh|ßå>ý|ðzÃäuöa©bCßuߢĢ֣+ßO©+ã©+ ¢vuu,ÃœOüäÜåßä_~|ÖU /*ßöbUhr+UöãOäª+.ãå/:¢£äãåä@UªCª~*ðüãzOýU~ßÄîöÃöUOOÄäßåßÄöCo+¢öÜh Ußð¢_B©åOåßööåOðvb/.ÖÜ:Cvîraªª¢A~~Äåaª¢bbý£aýÜaUý:*ä*Ä~<*ß+¢î£v|Uß**ozî©/*+ÖC:C>îüAoUÖ©äaU@uuýo,ÄbÖr.£b©|Ã/ý*ß*î©äÃöªCz*ðÜ©//OübAÃîBUÃ¥*~| Ã@Oî¢_+vuß~ÃœZBðzhîåvýß+ÖzrÜÜ>bv_Öh.üoAohbOüOîªîC_>röîu©ðýC,üÖ|,oý,ZÖCý~/O© uC¢rßÜäãrOB£¢hªãv+Äzzöb@@zoa|îÖÖuÃ¥/ß+î~rîÃOýåÖ£ª@hzb<+AvACÃ<ªävz.*.ÖÃß:+Ãœ@.~Ãœb¢Ü©_>.~ÃZääoÖvrC~b:Ã¥~_ åðÃÃözüö/>ü<ðßb*ãÄÃb_î@Aro©ð+hî>B/ܪÜã+ î.©ßÜvZ>êoã:ßý.Ä<Ü£A~z~:,>b:~Bb*Ö¢>ãu.Ã¥+/Ã@㢢ÜrbväÄz BB*,ÃœuAB>B>Äo>|h~aîÃ@üoªa£©@ýbZzª~ö~v*<*UÖßÜý.ér/.+B¢B£C_£|ª*îäu_|<Ãœo+ª@~ßZU~ÜåîîÖhãý+ÃoCÃU*ð:@ äUöäuîbbßä>ßß,_Ö֩êÖaUoã £ã>+>Ãö_äZbaåää>Bî Uvãðah::ãîÄOðÜ_:Zß_>O+CãbZ+@©>_ðå/åå©ðå©ß+zz:îU>ÃühhOvöä+:zaÄ£bÖßZ*Ü£*©ªr+Uüu¢£ Ã¥~ªÜ@,>.ãOäöoz|ß*,:u r<ß>©Ãb+bzOOä ý,Üöö<>Ã/åß.ªãO/aÃBßvã£Av B<åãh,üA,b/+vaZÃœuä£ÄîUr¢z¢ß+|.ävv_£zîýUzÃã£Zð¢Cuv*ßBª©bý@_@ü+CO@Ã~bbh_|rß ðÜ/U~a©ozbbO£äª ,/Ã*z~:h_ |AbÄܪzZÖZ_Zö@ZußC:|ör<ßoh©ZßZ,v*ß:_ãCüab:ü.BÜ©@|¢:_Öð*ü¢ahß|*zý¢ZöªßöoÖ@zÃ@ª:ÃUðã¢|uhÃ/:<îßýo:ÃoýßßãbĪ:Äa/Oß+OzîåÃÃÃÖ<_>o A Ö+äA+¢£å,äCaB@CzU¢CÃ@BvÄü.Uzv î,~Cö£|h:Ö@/>AªÃ¢u*UU@uZß©Chbö, ªböÃ.ý|<ÃCo*rbªuCUßaüAb,OZZZ_.b@+Oß.BÃ¥z££å>h*äbÖbÃ¥Aão++~a||hÃZözb£ýAvOhuðh*b@öAzr_u£,u+ýßu._ Oü+örbÄäb>äÖßîaAZbb@UðhbZðßZauAÃœ~îÖOýh ä :ob*î~ *ü>o*aBUßz£ZU.äãðbÄä/~ß@*©>bªîª ~vÃÃO_ð*/hßz<êvöÖ<ßCª©|B¢:+©ÃªZO:>/£¢z,h+/Zß>A¢bUBä/ßrü~oª|b_ÃÖ_>hauoªz/bÃÃO,Ãœ~~ãz.~Ãä,U@ã>AÖ ~©©ÃZ*A,î£Ü.*B'), (0xF77B01558B14390B5D153D199E510EFAB893BA15579A840B599AEDFD103348DC09698ABE87D1D1AC31C3F3CA2063D3205254CBA4DD2F075CF6F5FCF0263BFA2ACD610F34C64F73E6C20DE393A6B9EAF6C6CCABBC67A3FFDA622EC791D5E085F5C9C9FDBF539E5902E1E4E1CF4B73B53D0B062A59903EC2296235D29888E211E288EDCADDBC2BA32872A8DB82C1308EEF788A86CFB62B658B06D45C1DCCC179FFD3FF475DA8D880DF6302E7E762406732A6E320FE5B422C5C883FD6E8CE855BB12EDBAFC2E830469F09A66CB4447E28C66C2A76E8A07BA391D3EAD568019811DDA635B88790A449769C80F5B5D678180917107BA30E7210B3381EEFFE5ADD9D71958E0D0FC5A136C7E1004C2086EDBA5BD2CC51F11D6DCF3324044E71B54A1BBEE28320476A094476DAB3C20E26F02D4A63932C8E8CAC5327BFDAEAC052C41296E48D3D02CD73F1C987DA1769ABC00C34D7030E221E8C313630F8888F1E832315A12B2999B22B7DF0A26306B294E97CFECDB5E94FB5EF78585B07D2D5EB61AA04B601C87F977382AB851E7FBA867FA1467B89C16999D460B1B2D13DAB59A80541B902FB9221FC665A333EC99770BDD2DC658C59619F406AE2A117CDC636D752DD193E0183830F247E2367355B0BC841F4FF6045CD4EA3A1789719F10A2F9F235CEBEC7E31BC4E585667DA3D370A0FD6D9D5D8C7D591858E759D89EB691E1A4E83), (0x1F490F38B008EF657365696D8842173457D84ECB665D09943362EE374C8CBAF3319FB78FC5A016CDA11F1A0F331B632706E6F7AAF50E09C1407B054E19B719E7AB763BE98B886EB7C181294743FA6017FFC73166940FFE2396F64E4A9AC8B3E9053263BDDF7A9C7D7740E973E4C17E461AED4F5186B2539B7818529439241CF9CD40411096A338842BB4EE54268A3ED578082FAD79616352DFC845C72707435323EFA5A47F6DAF77B5CA26D1C4FE75EDD97D1C30F56E7F6CDCEE30CD5E715D24709A3036E49A550A58B7F8AF3B918EE15357EDAAEB125EB57039C7903DE118446D026129CE3E093F2811D83D76D0304A604F7A0783B2385D3C7BC6AAD2C4CD779FB44239306512144DAD82D93A203E9F097D30ED6710C0BAC903EC53775F6C6344609DC28EF61AFB3C65B9D5305E231B3C27A15594DF0F8EF387702D78BF9DEE401E95D9837C10126334B00157EA896AE0D01650BD17CE64510ECE0686EC827DC8CA9511C84998BF168EF2602F0E3709FE054DA7A84C302950318874AD0A8C76B133388C5577A29638563A2F), (0x42D6C508809FDBD47B9A6BC196C023120B017BAEFCD5ABB38663B66F51120103E2FC469DE7010BD6D65EBCF1E9B60BD614442E2DA9C0386C2B12811DE96C83699968DE997A862A0AF6A5D79E18B9CAD058E05A0DE3D35922C4D972D580EDED6ADB535881D7715B8E1A243704E89A547147B1C508117585C60EBCD5A113548A08B76DC3C56148F8E684CBF3BF9B55392A84018DCE28E45865CD92721B9BBA7BC5992F4D7BD68E0FFFB8DE844582C62AB982AA1C11C6BBDFD2145EF8CED5DD4BCA502D256C07BE53F6F18E164A6012E20668B998F19D69FFDE4F7A6678964129DA93BAF455A0BEB1C457261F37A49572027BF1661C455A2CE72E471D8D57DA5FB0653CB6A61D8C66AA08D3997749C739B90864FDA5DA0D95398E0D2759A0246D7CC76FD268DECBE4EF8ABC1371C0B49D660D6384F2DDB9D658A67D1810650C09E4661DB0DAF5D1DA3C800D1A1EF92379D96FC04C3DA07A9E0D9879C161B3D4897EB32F0AA203C3713B884772CF9EB75F82043EA0A4C0CB43EB7EA3417B107989AB849C6BC919D6D5AC4F11B45808CE6EE11A3E5D7434E5BEE7EB1F246081F52B0FBDC64B024C95692D69F354AF17EBE3AF346060D11B14779EDE84DDFAB2742B59E5A49B42836B9584D42F0B40910FD0003C742B21955AF4A94EAD24C8B86F7BF4C8FAC97250A02CC9CBDBFCEC09370DCFB3DCBE3D4809C48BB0F1F3D547CCCC65B3167796455DB09B476256B95D08A017A05514DBB13EABBE353EC15EAD5781FE0F9738F2BF7689562C22F6E6B30B2DA851DC35F2B8F1B3756BB960079B52EEF0E157A9C6CFAD5729CBBDAF8E48C50B2910190CD0218E461EE3C287061682BADA3405045C6267D8A3840C27FA41242DA5AD36F682451DCE52118BE30D2651134903D55942C1AFC7A940684C15674BDCBE94E158DF8B38941736B14AD683CB7D32F8DDF76CCAEBE4FE6F4D41DCD1B8EBC5AE247844F933BECA40420B0F64F02575EB191C8A546FF3A9FD59703DF7B7457DC684285F523839C51F2C2C88DFD49A7E27CBF1B89C61713F30CE47A0C381D388FC8D48DFC8C623B2E0576B27436BC928BFF1152CC58DE16513E82E83F199019D59A38B528CBAB661A83ED844F64AFCC5051EE0D26BA7C26FABE3CCDF979FC14656CDCE9FDF779C043BB38387B59D6EC8EC687ED2B82F32B2E01CA6A8EED6C9087D91EE297B5CE58D82DC96B7233BB90E7403F32F20EF8E269A1CBFC3D1F41665EA7B0924AE454D8F83F14FDB987B8EA4629733EAE29AE78D02C78E5F9D21BB8EC631CDA831945F2EB664AB2F9FB38E1F8D1A6039C02B824F937B22E7B7EDF16135C11566ADE672CD3704347EEEB8EE4F386FD283C081CE9AAE7D14B6727877C8724AF9DE9D2771A7A79301BBF70460DB8DD3AE481B6EA0B3F37AB730D1BC5BBF8D6B0BA4BE10B111FD2ADB2D7F12A2AA1C39289FCA2FAD04A946EA226F41D5EB38422E8CF8BB1C7D219C4AF0937333E0D80D139793BBF45DBD07FB77258EA1BC55EFF53DE416B2601CAB7E2DE4BC703612094A622D3E577C4ED0CEF0C0A55793FB8E9BA37DF6FCC25BB37AE83DC6790196C5651B433F8E169878EE1347C1A07753EA325620CDB81C0D88077AC36F3F8757CD59FB3F3C4FBCFF840A0407E97A99120394529423E0C90C480EBA371453293967BB7A68A437179A76569BC2B314230E6E67C0DBECF234EC90EFF62D9484EB31E1CBA02D00316ECB7CB71ECC45065834EAACC9AD934D4C74878ED7B540E906F26B6AE1E874F60D3DF9F55E35D467A78997C243E8BA3D9D937F2BA57159B88A92B12C61DA256FC0F39E8CB39EEF16A020E74D1E7EA61E372DCC4D6848509CE3406ACB83A806CC6427024F492E8AFFA4688B858A0B9A0BEC93F4340DD70777A302A872332392F7191AE8F67C56D409A2CCA9FFBDCA11D8A65FDFF0B3D1BF8D1F8BAC468517CC80D5936B7022A38F96BEEB91402E08B9D8F1CFCCD344A243485B5BD7F0AA8D848B002829295FA1B602CF4931C8407E5F17D1D355B54BF83C33502314C6CC9EEB3067064006DE90794F19C904FB717B07DCFCBF1FD638CE4007EBF6D93B8CEF36305D00613A3D5838405A069C81F441C2D51B37CA0C7E15F898C6391AE8B73DC22993D39D7019CD9FA386DF7B3232BE12AA330320542529B24808C874043E50891D4372EE21A351BB4D9827859F99C666072670B4B31D6E046921556850599A6536555EEFC0CFF106E248D2BBFEA312AE41626CDECE9BD5FFD56D85004EE96AF4FEC24F4A3BD7A538356AD26B4BB206C50EA726EEEDBB969B7F5F1A5249F1B7F8DDDEBD3C54C8736ABD33A963C96AB42266BFF1A7C37C06422BB3CADCBD52EE44B2D98D6DF4CA704634BB30B91232D215AAF7EC8AFF103561D77A11A0FD97AD6A4565B1EFDD472D9C4EAA72074B4C2FF8E1B531C5666444A1A32C957AB9D0489D0EC674AD81E23763C94F3B549D2E158A4A18BF4865E703E020104BB1B1B3E27E62D5F985D88276FE7DCDFC1729EF0375160A2FA010FF3726C2938C709786B2156CBCF2C83490B2C8A2C0CB98EBECB7310DD59BA684426D629ED2C244F50667F71BE6AA6DFC3B41855866FE50349E3BD5DC5B63C1EB0B912A4E902961CE6ED39B59D47D04424A35D294154E1D431D2D0097EC679AA2A50B0F54801E6B11DFB7EA9362F7602037939226912DD5BC73E6316229CAE10639F9B3C86DAFC22BC9C0B55D648AE126CDDF6059D57311783652E099ED09E714D5E359694397B387D0665DD0777758E9050A944A6A8831C5E73B921ACE283EBFD8A188813077E2352CD8886E164001BEFAF794E2749DA94DB29481080598B8A8289DF7D6EFD7B88D275E1E91FFC2AEA73AD320D7945B4A3BF73ACF9CF5DA30931FE04679482ACE233E06BB157F174DEFE5DACE3177E113CC52BCDFB4081C984C2E8A721F7B355E0F05FC988DA035BBDFEDDFB61B0CFE1B3DCC7A268B4B191B226E6EE7F5A52D73B07BBE2C7B49862B1D01FFC728667C40306E3453010ED2C4ECE1761F324DC639BF6C059F4DD1A0F4464E098A4B51F3BBF12DB68670DA71A2A8FA4099D366F9CF3AC608BC61DDF25ECD400CB30448789AEEBA2D04973FC8E4FA63F653910620DF54394F8549375A143A58B930CDBE9D6081A5AB1939F438FBFD23C1FDE69FCCC6202D5ECAF8F351B75F19CA3E8698163CC596D1EC5B07A66001548825755C2D9B8BF210A05FD2678E54F4B91F2AF975640C853850CEE06B1987FEC9A46A2B4102EC2EB3938876DCF32E4397664D863507DE2419F024DCCDAB87F6186108C22329B2B633FB46E1DB95A945218A4804CB01C8C1C5461251DE1061070B915E7AEA6C1F6EB496533AC1FD488346DEBA4262832A179947FCDC1761D723993ED549372F5BB56BDA5035AE8D00C8FE8E0AFF551FA4886647E0A26F435752BE2FA08227FE4C178305D78833F5680B4633DE8856D8CD7A9A4DE3EF4EB8452882FD767EED7EA1FF42F37C50481C5570DED45B3C65CFFCE66225E8D91B5CC8CBBFAE05367FEA1EC891DE45635B7D327DF872117A5C09C2B3008F1CC795C8E4E62AB19099161FF1F4B693AA8789998AE4F36AE1A94B4E6EB5EB5135EFCE5632C9F95F38AAEC9867D9801DC3C95F3B2A670437D42BE73B9ADB42DBADC4E901265F60E08D2A60E0F75A0307282E8AA456B027CDEB968207E2BEC45D6811EBA2EF7FF664697EAE0007243F7928DF126C509D84FD9C1C168FDC58FECF650278E66F6018A937263BD70127C5C75609DE02AB570CCA8CED05D3696787107FDF9A04AC5909C8C769352A62ACFB75564F39D379FB230DF6AD59815A4440D09E2A57228CC01AFCFF163B4222E168DFF1907C1A2DB49784BB8C0EFE00876D8229658C3755D9E895343DD363BFE1EB1544798FC9C825A2EA93D367FFB21BFC77A8B918BC55308A18A8E6E5F0E034C4D9A1F9BA86F7A4B903C2A1A48171E8E318415BBA06C82EBF14EE7721E140B2095E0F8D5EB961758004FF15FAB38C09A7BF03CDAE8479BE117239A6988083D7C30F974572E48929B7CBDBB606B3340B87E5CF61DE730385E5517CEC80BBDCFF812852EA1B4697C236DA15E3A8C3B75D3E2D1EB3B021F9500B126020679DA9FBEEDC34DE6149F0404D0C2A035D20DC21991EAD529C294E5F2E01DF09E6765B983119F4CC8ED9FCF43DDD65A3F6F6F3EB363F8748EF565EC58ED5B05F6AE65AD7B192D2432C1092C022B915BFC4AA68380EF4D2A7EF13A8DABB2F3DB9299C8A56838EF26423AFBE26ACC72536409F00E46D77517613B3E79EE9F788FDD2D996852EBF3C36B703145E35ACFA28ED719A1B2E594BB14B1342D0A6547A2B27C153D330A0078163CA2C6963F24167B8BFB1775D6CCE788DE53A1B7C6B8F6388E936735827F74C6A18B7632CE24E59D2DB17E6A303CEBAF2DB454B66EC04F73AC9E079BBCD0E90C7640D44B46A4CAB96E048A054A8C0851A7B817DE1ACE67D14C0296301D49D05CD871F3FF58A05888E9AB485A463A391095B5F3F4C90AE1B7D9030F441E8A9C24342D3CC89818F9076F8EE47F861D8B01C975AA5755DB93CD804C165591146A6F0F2416290D60888CBCEC953A167221BB780D7AA8E034CE58896F485BF2A3664B24856051F761F458ED2DAA693669B70E1A6AED9399B18EDA55BD9F9E282C8A19864A058111DFB4060911BBB29A65122FB83A4197C5C2B1630685FC49D26630C09380E2EC5425EC3AA6D79A7805CC3FF09B7FE5FDDAF253B398A28A8BD37A33A2E0FB2F097235CB824E06E0FE38396D4A560BAE627032E5A13D3F53B1AB50672C93E7871AAD268E65A453AFD401657B5F353035D7CBD122AE058DDC42D209E6EDAFC45A40B252AD2F7D38BE2C93119FC7B3F48C6B2A8F50B2C4D9051F5A3B93AA7CC2244D0B3AACE293165A8323061AF3EE049EDD8D7BC32063978BD94D8DC541A503AFC0ED52CC795799D80424DD9FBECE113145ACB62D00FF03E963BED395054118DE1F564A069B481585E393CEFB9607CD1B3C5C7FA4FEE6AED1E96958CA83F4D2B31BFF7058740A960D8720397D3008536BE1B868B8D163EF38B7781D21FF5B01FEC10BEF968764A731B6722DDEAD2191E115ECD8CB9C19E1A8103790FBFD640E2C1E4ABC2428BCD48D1137025F46008B95D63C1C02824652A72A37864FC3AB444263F1C062756DC869185BAA651782620FBC0B15B1580BA9C7F80509F12684B965F2CFFB543029107873B2FA269BED9FA7D57693B89582EA6847F87A6063C7328392447257870DCF82FAAD4DA501732C0A75621BAFE0F0D07FD5930C47BEA004AC707684577B4810C7A710CDE8354556C4CC7FFB01AB9292A1640271F3F187D44A98A1248AEED48F3D5153F8D022E83A803C477B4EA502F0EDD3E2F368C61CD62F3C735F8420CBD5F7E0CDB05799B27E7BC7F1C7BA1C85A585B036B70BD11667348DD993BF98B66F6061836DE7529954116477A0D4551C12B6DDC9C3EA14DA16CA567BD9C02ECED3118267489927BE3326E29597597592EF61C6ECD1DEE2754B976C9380E6BF93F2A5949F41FDD3898F2F86AD078F32BD44C38C780931ED042F1D1BB12C842D5C674E92F1C4E640F18E3D6DB248456DBC64AF5ECD5A479AB0B8907034D2225CFAF23A45B8EC40F85E729AE9CBD43ABBD9AF5F4C8D356FF22FB3E23924761C2F6BE062C00E0FB4C013A6F04ABF5DDEEC8DD4968572D5CFC5823825F50A07C3E8667B8DDB616AADD9FA8F28D6352532C1E505AB5FEF96AC9610AD3DD5E9BFC61BE317D443DFF37B1326BC8AE3ACF9806D055410046C73F8DFCEE7BAC43CD7F04AC91CF32D40FEE1E18A8829230BC8E9272CC0C0859FB1AF6F1F0484E848B6D64ECC301A8FF6532C16722E79D44AD5C4060E83977C077ABB077D840E3C6A09A8D3A1DA66CBAE5930C994BA136147DB2449407EE9B51F6A47418503127244EFAC6885A622606EF857A552DDD75D5749CFA26FC4FBEB1FE3B4479315369B46BE74B51DAAEBA1A8B3DA481734624182E9FA4B4370128FF3B158A1E1EADD49C1CC5E9459223FBC6E2DF9ABFAB3C3DB8172B4A92AFB57D6ABF4C15C5249CFCDE680765AD5CDF860BA3DED157666953FED7D106F26242EC67487F86460D36A146E3BB56A3D7905B38A43FEFD0E3250356F817ED5295097C261BFD65DD5840FD6D3C8A73AB12AF274776CE4D22531B83227B2F4DF6484FB1DA3E3088D92A7EDF6442829458B1584349F0A6DBC6BB59D3FF79426228F30624ECD9996CE2274D1CF7EFE9E0D1872B7022EC0406A173EA1EE55C895FE71CB6713B5DA77E18EB6021A28AE4D7D27902774ED23F3CEF008278EF7A87859EED34DB3878A573E0AC58368BE263178F124C6C5A111015DC79823ADA2E8F9D64DA83B455089E5AD38E97A27908B00C9C6BE9DD2D1A2B8CDD1EFEBFF56A99B11DBAD2B05EAFC18773F298CB796E9CD4C8759E6E45B26F49AFF6D7370ADF6468F5E684BF3600AEEDA961693B825F136E8229F680CC2A6B6B4A880167D78A7C938E2FD693EADC9EC8C6B0C4E34834C74FE369B4E0E9E39BCB7A1974ADFE47151FE4D5AC52897F83A58B2DBA1C65872216C1B1836ED69CAAAA940B18D068F1C97F9BA5FE728775C663E50E54BC297F65F3F65EEC4DC3A749482B02BE7E67B33D9A633A80BF88AF8E4CEA1F88C748EE8114A524D90A047CBCF45CB64785B648FC32D1BA58EFFEA56A46CF9F62A31E81FF3D80AAD942D93395E77E8C63D1680995A22356F68D959215FFBA933A651918D6DAB609040C6FB9589D247070724298DEC60AC07FC78B71A7EE94D98846F830CE65B6891A5E0488326AFD58682421A3BD21B4745A58980E4E44621678953112A4F4A20BBBB87D7FC1818D15C9320982CCF11C669184D575CCA83AD5FCED109D39EBB3748216E804A435B2D9CB83451B3BDF498678CA81201E2D3E137EA782D470F0DCDE7F9400B60918C25BD2FCAA48621E9A1CA489246E69935555D7D486FCB2DE68DBA7679CA7DF927D6008254D2283F5B05F0D6530E7CB6D74EB3FABDF3492C5A8F494CFA1FB81F33D110BC365444532D1E12426EF4DAD800F39F2B16734B349CE437C598DB454B4DD1A281FDB070830A50CD9FD0F6BD65B4613BF6808D08B095DC2F522C7EBA51D8D6F49D4248EA50731C20B5B5AB539636C21137AF4EBAB0C8F1EC11812E568B967BB709F210236B76EB83746C530AEA78891B6A6D82B29A1C33C4505CC8CF44B5951F39E4599416AEA5C0C3CB465475E701A90802FC2E13C92CEDBE5BC31EAE1C3EBEC743C0F61EE504BBB7C1EECEC5EF5E695B2FC741B966FB70B76BD5CADB9712A78C979D32160B8A130E407651DA6E17DEFD69B37E54FCF55048503EA30F49D020AF47323E521C434FA5A43378F0A996595406CD71D394529F923CF9C5CCD713B46055A2832BE98CE11663D8A0B97C5F9EB9D55F088C6E4D0AF4A29C15228D82DE908F18AAF7033D6A89EC6B7FCBA1D615DD5B0BE7780B380208979E794D67BE88E0FA103A63B4A7A6A7E48EAFF2DD4F42CC7647D7719B56854716A26F74B42D122DD28EC191ABB228B3554F838C980F3B584BBCC72FD71745938AE34D123831E3C76C72204E7DB110C41F241C5BD308BF076707290755F256CB392E06B875167B235BCC1025EEECDA8A9C0300B2FAF9C0723435AB2108EC616A2B55054FBA584F08A8F8F016E889288A3C9E6B52F193D04F6D84843F7B4A1A7F5AA60A89D79AD033B3F809F209B989AB1D10F47A710E788784C5E225D41F9D6EDE70BC428EAEB2A1BE379EF999DE45B3FAD9225A55A00E4C2D72F501B8AA5FA46A9B23890D472C7E6E52BC497F8EEDB6803E3B0AFD33193E7260151BA9A0F913D7FA8EFEAABCA6A3ACB3FBF2E3B4DCAE854E718A7F54B73781E5069D3210C4BD69A87174FFFF0BC387875E3937164ABD8366865B2F7E948343576CC5B609719BEF3E994B4367AE9632BDF2E7F67DF06B9A4919CB9A699DFB03EE31A882461D7E15C25A088D0F6A2BB7E028717BAC9CC557012B6CFFA60175A09E3765260613FC9084D22423F7EE8ADEFE13AA411C8F57516C51811AB08E6FB0D457EEC804F5B1DC3BE0E6DA68A16F12908DF1926734841EE003C9A482D1E00662734F9FFFC2C9F851CE053B988CF8BAF26E7A228CDD59AFD3CFE8013C0D4959F0E067F561CF12DDC3F940992F5886530B0EB22467CD8995199FCC3FEAC8CC4474BB3AB8250359234BAC5E839CB0808B4984F62D5B24F23356C2DBC202E2F30B3CFC24741DCE3E07A59ED8CB6F0608691F30E655C29EF95FB907515227971058A95356909C1C7D7B56FE87BC4C36D450CA72A2C1FC9D489E02C4BB067CDBD01E7E80120BBF67CD02C37B0EC4173D137232F097B4E45E6C0C1AB89DC751670E7B1E694DCC24C8A152A59FFE819E7476C5B138D37C342B2A201405F0F6D9F5B16C6C83B5BDEF475D7A4F451F545FDA7DA641C), (0x8838236F34F2DA81EC7BA88AFEE92150ABEC8E669DB692CFF1BD5C049985AA501EF98E8EA5CC26EC1AF4EA294BC6F65CDC562E788E1AC4D2A6547E7695D6E767D0576B055A93ABDFC5A14CA9CB69832AC60028435632C20435BCE7514DB056430C8358F45AF10148AA4FB2ECCD1A063CD053AF95AEA4119E9567CF9EAB5A91154B099C48108FCFD5FEDF98067FD5371AB5AB80FA00C0956771BA5FF221629C4FBE9DA1C47EBD2C4183DA96CE0C0A1EBF30B5E800D997158A7435D7562FDDB39C434848E134739CF87E3F762529C65B679CA0C26C799B762688165048E6D511A627FA8BC4C13C8BBD18F0819A20EF61ADDA6FBA8F1A4722A7D221591D225312A92ECFFE2F3A96A55F140453891ADB0599B5A26E761B818CDFD7E4F1A0E36D9AC5DED86B51F0317243CA5A7A15F3998CF61BBF6880E49B8DAC431E5756A4057CA76A8DAB416FB4A883302BACC10676EB3E57FB8423041AE0424BBE0ED2DA1C9EC5DED2AB65ED4B866717E550B9EFCCA6CC3218FEA98158A350AD68F6B1A6D6A9148CE6E233CB86500C741C0B1ECA26537E18419FC11DF543852F5BB88554D5C1413C3C2D08E97201ACC8F234644D8486861577986436E7F697A35D0470CDCBB79F5BCAE28EF94A95A640F3F92BC0DF38AAD4316FDD3C5C0B544595658B6D91DEFC3A950982A2F88CCAE1F22443EECBD7C3255A9B9B5CDA62FEBF8D4864E50A38AF14FCF02AD5B508DCA5A4FB4A38C76679BEA16613F543A060320BC314AF28E5D7BA742FF1DBACEE7051BEF6B7DE18C5F727CFA543A324B9D15C8FF7C9F1F32D7CBF2390C398749D12B3F5C1364CE8821A46CCEDDF82A13395BB5E944BB4247E5E9179F8BA88015EB2319390AD628284740DDD8324064DFA1EF0FA083AE0525E8E7763A5D2F0C792446E3AAEEF10853238D9203ED6A15957437FDACA8DF923D1DF350236FFDDB184454A3FB6CB9F0B0D6AC8CF60C01387ED1D0C615315FD054A4A69CEB90E4F335B289CF88C61A38BA474CC60C529C311CBAD1519F37B5E6E4845F46C62D051FF1A947438241BFA8B7A80BDDE499D3F218757030BF83540DFC92DB0476D3629D423CD4530B48AEDB0B3899F72BE7F24AB05D3E50BCD4506E454946EF66BB31E4356E8BB7C570E6CFC6952586F96CD214A08044199511D07DDC660DC201BF745FF6B5B1CD5C4A853F667E8A27AEC974E877224ED667284F238E1DDB5F7324CE0710C59043AB14C8660B14A32687B8CF12E1255ADF70ADF8DE669E3F3E6F25BC41B08306E939313D5269E8DB427528ABD55EC86E5DD9EE9672DCC1DD0CE599F6D558617604B1E5D9BFE7F86597C2A6593DF269EF96B76E67C1EC940C7754207CDFE205EA03B2971378EEBE65D1890EA02668AF1A7BAA501DF9F9A4181DD9626BC77B95A5CCCC458B5B4676B809088648EDE3E60EB516012581E7F01), ('99999999-9999-9999-9999-999999999999'), ('2462-01-17 02:21:36.465'), ('1965-09-18 17:12:00'), (null))"; + break; + + case 6: + $query = "INSERT INTO [$tableName] ([c1_int], [c2_tinyint], [c3_smallint], [c4_bigint], [c5_bit], [c6_float], [c7_real], [c8_decimal], [c9_numeric], [c10_money], [c11_smallmoney], [c12_char], [c13_varchar], [c14_varchar_max], [c15_nchar], [c16_nvarchar], [c17_nvarchar_max], [c18_text], [c19_ntext], [c20_binary], [c21_varbinary], [c22_varbinary_max], [c23_image], [c24_uniqueidentifier], [c25_datetime], [c26_smalldatetime], [c28_xml]) VALUES ((-54290834), (128), (7088), (9223372036854775807), (0), (-1.79E+308), (1), (0.2643), (null), (null), (214748.3647), ('Av++ü*+_ãßuÖ+Bã|hªÄh@¢a~r<îý:uýbCãÖ.Z£ýªÄ,Ãœrä@uᎎbÜßã+,vßo>>o o,ÄåÃÜý¢+*¢bCýÖv@aßz:z¢C¢<£ß:ä+êo+ý/@aAröü¢UbÖßv ©Zhß@ öoAhoO@ýð:üªÜãýýÜC>*ýå|Ãã|COb|Ü¢b£>*ýîAÖ/£zªßu<>ÃZ*Äaý bªZZ~b*î*© |C*¢aäbÖî*~öö¢bª<ßub¢b .Öâ:ÃBÖöö:©+obv>¢vBý<©*©>:äBh~Ã>Üðå U¢bß~¢a<öÄ//@Ã/*ü öB*ööuu£ß*Öo~UOöUarZ,ä©äÄßa/~.h*@:ýÜýz©ä~öߣÄßCrv~b@£ßä//zoýðäª_Bßý@ߪäÄ©|~ü_ZÃœ/hß>*B_äîhߣA£¢@_r*ð©CßAC_*O©ooîåbAOÃhä ~OߣÃüßbAAbÖr*Bz Ãœ+ßÖ+OÖýåÖü¢:Ãœ,*a*> o oÄZo¢B,Ä@üÄäöÜb~rýb©ßrä/|v£.Oa~üO:uB:u|£ªOUýîªß¢Z/h>Z<@öãä~+:ü@>+ÖÃ>|ühý/,b¢üå@ü/AhÖåBÃÃðvU~¢Or¢£Öªoðzb ZobÃ¥.îýü*ªð.ãÖ¢Zbý~ZÄ_*Ur/üuv*ACüß:ÄaßvAZvuAUÜÜîC CðÃܪÃßßÃüðÜÄa|ß/AZîvvÃ|a: ý.©bBöUC,OrÄðrCZB>|u:/ êubãOoÃœo.<ßvzãÃÜÜ:/Uß|ýbo::>Ã¥BÃ¥|bð<åå,ðu.bz/+ãüvßß:ýabîAuüÃÃÄvv ~vr,+ßå+@rãÜv_Äz~O©ÄÄr+îoö© ÃÃüZê©åz©o|.ÖÖäÃü©zða|ªzh,/uýäü,hB|O:ý£Ã+rîaBZö:>rOZ+,ÃC*ý|uu©zßrOZ©OÃUüa~|ß©ªrä:ýÄÜ©©AÖ./ßÃåBßðavvßüuZßßå:ÖÜÃÜuü_h@h_vÃåÖ_~båî|ÃœZãOÃðß:,Uð@ýbÃãZÃ*üzÜäª>béCîªÖÖßbßößo|ª:>+orý~ÜÄ@ü_CbrÃ¥bÜêZräävÃœBhåÖîß.Z@av_ß>öÖ* ÃÜö C~<ª*>üaÃœu©£~~@C+bª:öðäbOö Ã~o:@ðü/ª.>**©ã@ªÜ/aðUUü¢o<,rÄ//.oU/ªÖoâhîÃåÄvÃœB,vZÃð.<*rã*:|UîýböO/.îäªÄ,Ãœ*_BîîÄzß:hÃ>ÃÖB.îßvbÃ¥aÄßÜb ©<.©a_£hßBð:Ãv//ã+//à >öß/ Ã¥ ãZhã+¢ b<©öB¢Zzý _ß:|ä/ ¢£*ý:ã~uÖßüßÜ¢+¢C,+Ã< bAOü<î@/ÖüãßrÄZ ~¢BÃ*ßz>rÄoo o<ÖãZªzß>*©ÃzAýüü.£*ÜßÖ~ÖýuÄÃÜÜÃ+Bª>BüîCü_Bv/bAßz@uz@ß|*ÄoBz+~CÄ~ð u/>åý@@,UÄÃß*ߣußa/z£UA,+öOöOCÄÜÃrÄöCðÖaß*ᜁCb~@z©rCuª_îz/+.Uäª.ä/>£:ªOb¢Äöß oUãaýð<ãrßüÄÄZC@büü~b CZz©_ð¢>oZ~OhO_.vðC~©¢_öÃzb@|ÖýUvßh|Äz+|rÄ£©C_oðý£ÃA:<©<Ã*öUäBð.z*ð AüÃü||,üýäãroh_îbüÜÜo£ß++CÄBÃœu+ܪßîAüÄ:îbÃ<Ã¥@ÃBÃ|A+ |ho+hzª/ãzOÖåÄ:Oöã£Aü@ÖäAr:©@å£CAbÃœ@Ã,:CÖ>ABAß©/Ãrr:ü,åÜ/î:ãh©Ä£vr<ßðö:_,@Z<<£ãr@aüz©Oo¢OabßöªýBÃœ,ßß*ä@ÃÖ£b/C,ZÃœbUzCÃ.üBbä£ð墪Ü_OÄBãaä©>u_aCÄ>ÜÄzÖÄZä,*/ÃÜÖ/h*,ZZhßuh _ßßýOÃC<üo@ÜÜÃro|ã/äåo*ßvC_bCßý~/Öü_Ã¥*<_ßý@~î*~Ãbh|ýßv:,:aÃbob+oOö aÄ©vu*Ã¥bî£Öîî_ãýýUaÃœOz~båª/,ܪ+.öa|ý.ä*¢îr|ÖÃCß> b,îOooÄh~,ªð>ZZZ*öîüä|Cî+åüÖß+ÖßðbÄr:ußãäãã:ÃÄ.ðv<*Oð_<>výßZrözr£ßa/~bßChbBaão©*A|Ã¥+~uð:.>¢ð@¢ßðÃü*O£uAä/:Ö¢ãoßo:üObö¢ã*h*ã.O>BãUü>ÃzÃß_aðh:z¢vÃ<:|:ÖýbCýAz@,/vö©ß~O :hv+@ðÄÄåãÃ/üöÃö£bvî+ÄZ,Zo|©Oß@AB+azZbub*.Br|B/>@aaÄ vöÖäåB+*A@BzÃ*ªð.£|ãr|üªBßOÄbhOÜßÄß.v:.ýãÄzîaååÖß~B*:äCÃühÖbî£ZÃ¥ z>ý@O£üU~a>Ubªrö/î>bß ö~C/hÃ+bO./|Ã,îU£ðCCåä¢:î@_B<Ößã@ý_,,Ã>ZÃ¥>ßbß>ðßbrU|ðÄ/bü©_¢hvª/¢~AÄä>ãð.ãu,b_¢,ªÃbv@uðß_:/ÄrÃ¥hªå+:u:uö_* ob©B,ð+Ãœ>îObãz ,ÃÖoã+<Ãä*,Ãœ<ß_ã©¢Ã+bvbüzaC/o>£ªÖ_ßvðåOObärO,BuîÖZªîå~b/uzb~Ãœ:> rbä|rÃœrüa|©ha@+ A,.î:üzª ©aª._o>ü.ß+b ZüB£åzîð.ÄðÃ|,A~Ã¥uÖvu_Ãœ~_:.oo~ÃaUÃC:ßßBýÃ.UZÃÃýÜ<+_~ªßCÃr>B.îÃÖßaî>äv~ÃœbhÖ|ßz<åä<£ÃÜbC,/~,UzÄÃBö£.vßrh>åª<:äUZ/Ä¢UövAüÜî@bvÃ¥ <*:©ªOîuB© hßO|©_Ozö_©<Ããî©¢+Zhå¢_hhýr¢C_>_|ªCußrUüåöðßßåÄßÃ>vãß_:@Zb/© _O.bhîhÄÃå.CzUðÃÖ*vv+ð¢v£ÃAoªöÖÜ|£ Ö>Ö£ü~CaªãÄ>Z@ã_ÃO.ü¢|o,.äýCÖh£|©ðoOýÃZÃvða/ðuÖ¢Ü,bªo©Är**UB~ýU:roã++£_aåÄÄÃ_Äuäzý<ýã_ý£houUh..zßßäüBªBo@ÖßUß,à @Uð>| CðÃ<Ã+Ãœ/_:ý|A£åðh<©Z:UªUäAÃœ/ß OvUßÃ:hÃœ@v<*h/*ðbbåðªüu./U >¢£ª ªuZÄzuö/ß*ö.ßCBoåðýÄ|åÄrbã*/h¢oå©hÃîo£¢ßC/CUaߪ ooªÃ£îÖÃ@b£:ä>zOrbé,rýUzO~CÃœh:~+@îhÃœ:zªåvaC©UähZÃœ:O~ßü,Aß Ãœ@vü+ÃÄÖhOãBCBÃ¥@/Ov|@oß>ÄÃvý~|@CüC_bªZ£+ü<Äü:à BÄv@uÖuߪÄÜv©:ÄO|£ÄCý_ßðo@î~A/ãAA*Ovzbz*ÖZð+ßAüîUzh Ã|*|ð**Ãã¢ßoåÖu Z:ä@ *+ê/CC|ý*ÃZ>ZÖuUhäZbÃ¥+:Öz©BåßÃãUrãöbZî+_Z©>ðv*©äÃ:>©ß/Ã¥Cªb öÃ_ßz@ö:B|Oöu<ÃÃœrÃ¥_<öaUh*rO/Ööã/u~/ãÃär,zî|z|>ZOB©ÃUb~+ð:,:B*@ÄoÄÖãAÃ¥A*©oob:ö~ãða bvª*¢r@, .CAßr.~᚛hr¢*|ð/ <@ߪo*O¢åC,B:@<Äö|C+äb+ÃœbZäh:ðA/rÃ¥AÃ¥@ßöâ|@:.ÃO¢Äð,aßb:.hA@Ã¥BzÃœv¢ußuÃ>ßhZüöÖCzoA:vUb.ãrhZðÄÜ_ZozäO/Böðh+Ã¥ÃvUuhäuÃ~AßbÃãßA©ðßÜA~aߣåðåbb@häoÃ~üðob@Ãr|oubÃÜÖZý¢Ü:,Ö~Uýß@ßvz| @*îhC+:Ä£A|O.a@u~zä>:ýO> C©©ýîöUªå_,åªo¢obß+O.ßýZzuü:bÃ¥_O,ßaÃßÄÖBz~_:h ühU ,oß îzÃ+éüß_aar>ßoð+*bvåãv_oüUãuÃ<++båÄa.Abh>A@:öãoüzöbb_/bAhuÄ/h~ß@¢ß/î:ðü ah+ßÖbrhbäîÜ/zã¢ß©äOz¢ýðraãC.U>,ýÄb.bvZbA~*v©bB ýßBÃœbßA+h/ªÃUbÄã*>ßÄu.__,ßoÄZÃUoî@hªoà OÃÃZ¢©_ãöå@îOU+B|U_,v£ B,O/ãÄöBâoªA@hðåãöußÖßbð@/~*ª b_+ªå/UÃCaÜãva¢*|. ©_z/> ~C>zZ*ÃbzBb©ðv<£oãubð_bZOäoAöÜÖCÃ¥vZ Ã,ã£AÖüî|©£oäa,uaoð,vî/ävZ>v./z¢/|ªåýOÄB¢<£.u:Ã¥>¢ur|rhbb*ᎄ.>~hÄ|hªB¢uß:ßÖÜva¢ß.ý¢rUÖ.z<|@O:ãÃhî>Ä© v.aý+B+,ZÃœ*oð:.ä,îöhßh_BA+ªh¢åÖzü:h~¢rä£AîOßOA_+vv>ªÖ@>Cåîöa>uÃœ.abr:zßuObzCîüÃðaßuÃ¥*+o_/üAÄÃvãoßhÜÜhãbb/Az|:.~ohýðOv*.Aä>Ö>ZC>ðrhzÃœOüßOÖo/zbªBA+ä~Ö £å/ÄÃð£B|Ãœ _,*zCßüoOÖ/BðCüU,Ãh.@Ã~|väb:boBO+BÖ©vßð_î/|~uß@ªÜ©U*/+ßßßßbUÃœ@CA©UÄß*Zý~ß~@Boa : /©+îÃÖaZöä:Ö©Ü+ @îübÄU>é_ãäãß:~î äÃhö>Ä_..@ßhßhÖ£B+,¢rOÃUOîo|ZbaOÖ:@ª,ü<+Oßboã,AÃüaÄBOZC©AîÖ~_ýh+@£++ªoUhÃ¥A/+B_.Üå/~v*îa< ã|>råßrÃÄ¢OA©CßÜ~rhãÃ~<<üÄC,äa¢£îAÖªÖðauUÃ,îuÖrzß>ÜÃä¢~vbauoÄßßÃa_C¢+ra£rðªAO~vu>ß~+Uðßv:<@ÃÃã>/åÃåâ~öªÖa£ðu/:BÖäOå©vü*/Oo<Ã~~ðãýåh/äUî,Aý©r~r/UßðÜ.bðuhC>ã,ªßO.Ãbu|z£åªv>£ZZoãüÄuî£ß@Ãœb©ýz+,@Ãœußv:@üåðoAOh|Zöäü£åÃ,î@ªrZOî @rÖÄ.:AÄ ýßZê£+rÃœÃh*Ä@ã, Z©Uußüªß@ü+ää<ãU åäBoðöãb,Orüß©ð Bo*:BräÃðB©a*ðUZB,£üZo+Ä.o.ß,äÄZ:@Ãœ <ßUÃa.UãvßÄ<ðîä.AöbðÜ£AðßbZb+,|ãoðßzhüüåð_/~/ðå>ýzv><ã_ãÖzîöCO:Ã¥vÃ¥ ýb|vbüoaUr/>äoßbbCb+z,ý_ãbaÖÃb|z|ªå..Ar@zßZ¢ ßAß B,Öu@aªBA/aü,vo£CðvZ+©Að_bö/*ãÃ:_>Ãß.ýÃü¢<äAåÃabZ/Öühðü+ahvÄîhðbÄzª_+ßZÃa<.oåªZ¢u:ÃU_hOý uãCor|b.åÃv/uuÖð<ß<>üUüÃßüÄhÃ¥*v_äU+ßa:/üã@Zu|ðh_ýb ühýUð<*b£ä_.Z+C£:üÃCî>/<_+oÃœ+Cãßöh:ßãZ+Öuäß,Bî©Ã¢ã©|Uö/<Ä>Ã_z|Ã_aÃß b>üvb,ß©hAßå.OCÖO::ðO:~Ãœ_uÃ¥,£arr¢ß<ðZZözO/r|a|uüO¢rüAÃ¥o~ðrÄß@.ACã¢U¢ÄO:Ã¥@oÖÃUaÜýýîuaßUoÖ£åaB~hßÖ.BÃ+zªvýOz:Ã¥C.*î/Ãߪraz~:>üßO+z++a oZ,Ã,¢uã>ÃœZ¢U_B£ãzO|.Ãœhðߣ:ßßab>CBOªbA/ýüOßßoäÄZbÄ:br:ð+o:Ã¥ÃO.a<ÄÜ@o*>ªßäO~uü ÜððoÃC|az©Oß:~oÄß|o*B+*|ð~B£raäÃ.ãÃüßa©îðÄ<äý_bA£o+ab¢u,~+uoaîßZß<,ªîrðßåv/,Ã¥>~,_býb£ã¢ÜªZ,/Ãœ@Ã¥aîrb>h/C:U~hßrß>bÜãªöðãöäªý¢ß>a++.>Ã/BUCö@ßbÄß~ßÜz£ðîöbo|B¢@/>£Ö~Ãœ/Ãœ ߣê>ý,ð~UbArã>ãb:/* C :ÄÃ:Ã¥b<ö+ß:ö©ö .öÃuýä|>u£oî> a/ýÃzuåß_@äBZÃrÃîãîÃA<©Bh<Ã¥u:ßÄoü¢*,:v+Ä/ª.o*Ã¥|Ã¥Z<Ö aÖZ@Üî_ã*©*ÄßÄC©*ßZ¢:OZ/b>Ãvîaðüb,ou ߢ|Ä_+ÃœUÃ+£Üî@ Ãœ> +oý¢.OÃ: b,+C|bUb~£/ubO~z/,ÄUªåbãZÜöZê.å¢CÃœaöbAðöZ/A ã*boÖbßürÄo @ßßCö,üu|~ö,|+**ßz :A@:/îhð_¢ð..¢©.Uußýî<ßÜU,©~,Ä/oî+Äza++uß:.ª¢O_ÖåöCCý /üuÃubU__ãOÖ>Að+,åä~o/brhbãîÃ/~zO~öÃBvh üZî~.åÃ>ã@|uv,oýîaªOr ãBUÃ¥|ðBOvCÃ_ªå@<ßv+*bOÃ¥*bÃœ.üßb©üC£/ß @zÖ.£U/>ÄÜZ:.u*ßãZ©uåãß@C*r:Ãœ.ü:Äovöªö,ð:ä aC@.ã oZ*Ö~:Ã@UZZbüÄzßãÃvü,rååÖÜa>Ãœ,ªö*hªh¢ÃhÄ|/*©BäýÖO¢bäahO~>öCoÃh@|ÄoÖä_u¢:/b©Üð©/äÖC~Ãœu v+öäªð>~*êhßÖ£uOª Öî<~ãÖCîö_öüååâ£|+Ä+ÃhöOßå©u_ðý:.:îß:*@îÜb o__ö¢OüZÖäCv/o£+ö,îUOßhãåßo .Ä<:ýäabh@o.©¢ba~+ßã¢<_ZÃ_zzhrÃväo~~:*@| h>ÖAbýOî|ð>azÄðOOÃœ:_Ãðöãå|@b<|uäU@<üÜU£_C,|vrv|:£.v~ba¢u|ðh<:h.ýÄ£Ößuö,ðhî.Z*©¢¢ab,bZ£ÜUÃ¥v.äCoBýý~|_@ÖuÃA :O~ äåZ@<,Ö*ÃbÃ¥@îü_@ßüß/zÃœCBCUãÃbör~£|,_|~©ÄU£å>©ýãvo>><+oaBÃœr.u_bZÃäZÃ¥*|aöuZBO©îª/C,~@_:Äu<_zÖ+O/OO*h¢+C>Ão_ZOvý*roÃœZãö_ÖZhb,ßvU~bãðýzÖýbýîî+ýo_öÖvr<:aöO¢>o£/Ã¥~©O<ãÄåOßbUZabC¢©z@ÃübÃ|ÄÃO.>.<@rB~|@ãärª~/hUoaäbýßãhÖð@ö¢ÜC@:©,~ÃBî>_Bß/zb,ª~z_Ä *>~£+/Ob¢åbÖÃoîb|@bC+_îa,ã©@î* u,rBoßö*£Ã/ðrÃâî<|Aß<ªöߪ~U_Ü£hv|ã+>bÃUªo/+ö¢ÃZÄuÃœb* @ÖÜUz|uÃßåbZ£¢åzCãà .¢AUaOðZ_ ýªßöbBªUÖOaî*_Z£ýb,,BözaîîÄ@UC£ðo>Ã¥<>Ã~ßÃåb|z>Z<ö+räîhubZÃœAo+bý£_bÖä©ßoZ<ªÄräÖÃ,ªu~åîÜAavãOÄ£/.¢å.AUÖ/ßCrð+z/AO_b¢_oÃœZ*B*ÄÖߪý*ÖA:Ö* o+OýÜ¢höü_Ö/v¢*.üåÄb¢U@îßAA_>Czððää<ß@a£ro,oý+ *a*b|AZÄîãZoêª:'), (N'@.Öä~:Ã¥bä:ä*î:é@hbÃå£oü¢_*vb~Ä_ðoäð~hÖªÃü.Ub>+ÄAðbzß>öäUßUbB¢aZÖ /Ö~ÃœB,,/bîUðîho£uh>,Ã.ra©ÜîÃ@büC<ÃbªCvãÃð*:Aª îCÃ¥:,åÜ*~a|~Cz>ÃðüöC/Ob|@üZß<+üo, åßßb©b Chbb_o@ru/îÃA ð/~ýåuA,OÃœ.ÄåäZäÜzAa>üßÖªvö*|ruÄ~ÃAßö¢ß+ªv| Z vö,Ãb+/bBýã¢.£Cî,ZãOã:Ä©Oª©ý£©: bbã_ößoäv_ªbü uovÄåZßUÃ_/Ä:./@>|+ß|ü|hýîzã©Ãä,>ÄöÜOäö|bzrZÄhßCO@:Öã*Ãà h>rOö~A©buÃ<£ £ªßÜvÖv.ãbO©hUC_hAr/A+Ö+BÄO¢£ðB£@rßhA~.übãCaZ/ß|>BÄvrZZä:©_~£Öðý_oð/ü@_ª'), (N'ã+ßZ+boã,+zî@Z~ðå,.üÄC+~ü_Cbßü|rbävu~ªBªoãaîÃö¢Äãü*a@î©Üaöüb>bªOß*ª@zz<:Ã¥Að,uãª_ÃOO>uC.ßzã*bö¢:|C©oa.a~+Z_ªo+Ã¥C£ /,zäBüÄðßr:ö.@v|*Z_êCêßu©>v:/ÃÃÃ@UoÄaÄ'), (null), ('ßC.äA*ªaª|öÃzÄÄbÃ¥Zr©*ÃœÃv©aa.£vãv@>Ã¥<+*¢o©/ßOÖar_/£C.u,ZA,orA O+*ÄÃrßßu©@£baîü|>£ß<üah.AhräBuoªãuÄüã@~ÄuÃßB/z¢¢ßzÃœoåîÖ©UvhröAB£ýÄ_ öåîzu_*ð~åã,£@¢/ýªOª:AÃ~,+ÃœrªhBÃÃœZÃî,:ö _ãB*/Ö|.,£©,@ðåîo ðäÜoz/ÃœBª*ãÄb_©ãbªö+o¢ß*ßü<Ãrä.ÜÖb_B|,_©| ou~êCÃÃävüÜOZb/**öBîÖðböüa|v©bvßß<~ÖB**ö@ýhßýåUAhArÃ<.,Z@Ö¢Co.rOÃü*ß<©vý~h,ÜÜUöBÖ_h¢å_ .BZu ÃUßBÜüCA_/|:Ãœrh*A¢@Zß_+¢v~zh¢öÃr:ðU**ZýßCî_ üÃã©.ý+:Öö@rÃ¥oãO©ý.ªÄ+aäüßýÖ¢ÃOîýA£|ââ|v/@,bö¢ªÃýÄ¢ýªßbÖ¢rã>v/AUÃœA/ö<:î'), (N'zã_b.b.bäÖîC¢ü/+ÖÜ㢩o*CåÄðO©r_ßZOZý@Äro/:,Ãhhobý|ébÃho<.OÄhu,©uCß:©:äA|ÃOuÜ©ýÃ|äOB<äêbh@B_>AubÃð,ß//hvAZr*+u,_ðÖbzZ_¢a/_ã_*,brbbößîB@¢ýAb,ää+ßÜ/ä~hÃÖO+:îð+|ð+hîZ¢üü:,_Ãz@_¢~©zãÜð_>b*zÃœ//r~U.BÃvö|Ããßüo*Ãüß+~.v zzäöOßAC.ãªO~:>bhvU<ߢêäOhBöß©ªüÄ@o*a|©|Uba©öoªoýuäö*ÄhÄÖOüzbÃî.î¢u~+/OrãªBð_ß*ÃÃ>îÖîZCAB~.ª_+>@O~Ö öaß|A£BÖªuoöãv~|ãh@¢>O>ÃœA~©råß@ää>.Z:hÖ¢+_ß.ÃOå©åðrýrÃßvU_Ä,,uªüÃðbr¢ß©©aå£ý¢|ð:hß ö~@£O©hAî.*Uoöä©ÜhÃAbU@ýzA㢩¢vv|å£+rvÃ¥@>ÜÜv££>AÜîo :ÃœUÄb_ hã>*ZoB©vz>:>vo_z|ÄÄ>Ãà ©î£<îBZßÃv¢£><ßã,*Öhü:AÃ¥zä.¢O|_vAC,vOßuA~oö,ÃßbÖýCB*ürÄ/ªªªuär>ÄB,<*./:ªhÃ_ß@£O<ß©¢b:OZß.ü£~rýO+©uZz Ä _£>uU£åîü/C/O|.UðB£ö:ßå,h|OoZ+Ã¥hB*b/öübO@bÃoB|ýßUý*rÃÖåÖÖBbÃ<â~_ü ã>ýZöb<.,BÃz~~+ðza©: CCß ~Ã¥>ý+Oz/bÃÜ¢üaCO*/b£ªª@Uýý©£b,U|ýC>âuÃœhöv*:/Ä>£îªo©boÄý*va+@©+©/r¢ä>,|C©ðÄ*Ubßv>aÃ:u~>ã,@+*u,¢Zå©AuB£h@Abah/*ÃZ:ÃÃ¥>öî/äÃß:üauÃ¥vZ/<~A~Oäår/O|+,AßBî>@C*üuo@zOo>ßoÖãaÃ¥ovä_A¢Ã*äbå©ÄâAß@+o£ßAü>>ª>üåOîÖý~>Ãœa©ð,ß,ߣ*ðAãU<ßav_BZ.UÃ:ÃÃbCBCÃ¥*£ª@B/Z¢ðåbãa,/aZ¢Ã,ÃðÃÃ+ aÖßCU£å|aÜß.|ýîvßCªh_Bv©ß<+Är/îåhÖ.@ãߣ.ü/+©rÃ¥bÃ<.h¢CUÜî>C Övo+~äövß~,/ýAÄ<Ã¥oßbßßUªUoBüooöb©rî£. ¢ð~Z|O+ãb*Ã>~A+bðßUzO>oßhhßßzzhbb|_Ã¥<@Ubu.bÃU£|îÄ¢vB.ChCÖÜh/+_@Öu£:a><~.|ObÖ..|>|îCÃAA©ö..CÃ+ß©©î >ªr|.uAä_uA,Ä*u£åªB*îAÖ>.äBîüZa>å£O>/ðAÃÜ:ÃðrUbªzªÃö Ã¥hãÜâ@¢/v*åý_O_Ä_||,|/ZãZoß<ª*~boý>*ÄÄz>b*r,AuÃåbªbh,özÄ_ð/:ÃhãîÖßß_©Oýãvbzuuîßb:ð,ýZ:©uÃßßßväÜö@Z£u.hrå¢uäz¢B>¢C+ýßÖã¢Zo~äå+O|.Z+Äðv~© Ä>+bª*ª~zO©îäüO©©+bßv @/£:av,|+@Ä©BU<|©ßýv|O@©_ OAvî@ãb,ýð.o rÖßhrråöOBÃvãaÖ ðüîÃB*Z_Uãhbo_A*oÖhªð/CC<äo,~Öoý. >Üð_ý>¢bÜÜCßbÄABroüO£ýåÃ@B©zo. o¢ãAv/ªÜ¢üä©*ý©ß:+<_aAU©@Ã¥uaîã î*:üOu©Ü©ª+ rÃœ _ÄäZuö©å h,o@+rªåÜ£üzÃ¥A<|Ãœ~ßö¢ÃbÃ¥O*@oª¢+u__ßa£©+Ã:*äöÃ/ Z a©:vovÖãÖrÃ>ªO*öCh>bOÃãÜåOA+_/,:Üã,ß|u,vbOÃ¥<Ãuão>ý~Zãuozß©,ýU,z ßuÃÖß|,åÖuýýß+B£ åä_äB¢|Ãbüåã.AÃå|©<>B*öªÃ_ªuo>:~ã+@Ö<Ä~obê>b*rzCUâou@ðöo_A*_~>zBÖ©ohbüå b¢*B¢r,îbUÜü~.äªßzo|ß@hBrü~_oýoÃÃßOÃ¥~ã_*¢:< Ã*> ß|zÜß _@©åAu+ho.Ãhß<~~Ãaðbo£¢|ÃÖÄoÃ¥bz,îaBoÃ:ð£+£_ý|_Zv@vã*Böu_äBOZ>uUBBzuß,.ãUbvÃ@C¢ah::£¢uüzüÜ|z¢v£ho.:îv >Ã¥B.~vßUÄ.UBAãb~ªähaUaßCrü/h_C©ÃÃßö~_r£Ã<Ãbhb_ußb~ß~Övb*rÃ¥:ÄÃ:.ðÄ£Ãröo£:o£rZrÄA |_£BýrÃAbbB/bo@o *üäCv:ßßöað@rZ|:hooß ð@ðÄCÃ¥bu+ahAüãÖouZbäZbOß@äÜ@üöý++a/:ö.h~Ã||aÃœOAA£ Ä©Ahv/ü|CãuÃ¥>rzhýaßvb@bBĪßz+obo¢Öß~,Ã¥>uýßO+~výð.+OAr+Zrªð/©¢©rüÜbvÃ,ÃÃC@ªvu*Ã@/¢ååaüböU<ªü:/ã~z¢rª>aU_©¢b>ªBbäî,aAÖÜOýÄhAvÜÖv©ÃAö~hBA.+*u+Ã¥_*h.Öbb/ßß@:rî*ýýÖî+.ß|o:Äß+~£.|ßCoßåãaÃruÃ¥r.hðO©/,~za<ÄÜýöbUÃäh,ü£BÃ|BhÖrOOð*ÃzÜ¢Ãhvãvߢ:aîåü:>+Öß:>ã:C*vßBãZÃœ.v£vªýÄå|Ãã:Z_rUßÖ©ßO_vßöO~ßýaOü*©ª¢UÃã@£åUÜ£,O|hAA o>ªåaß /,ðå_@Ã¥Cªö~ýBîooZzA.zªU,Z/,Bðb,ß>ÖoCÖ~üÖ:bC|Ãaa.ª:rðýðaöZv>aüoa@ZZÖßbãßh@ZöU<ÃÃv.ý>:ä:ß~Ãrã>BüÜzAªv.Uu+Ü©b,ÃüÜ:~~uªý©|£ßZOv*CaÜäåuã.¢ýäaðöUB/ãhCÄr|ÃÄO~B~oÄzÖv+ýߪa/|h>Ã>buubZb/bo¢î/boâÖß:Z_v£|UvßßÄ_|Äãr£ö+AzBvv~£<_Ö:zßß A:üß|£ßauª*ªbOªä>ÃvÃ>*AvÃaBÄ>+@îÃUÃ+Uã,Äuzå£ðü~Zöîü|@bß©.ÃC||B>äB/åß>u¢£*_@r<+*Ä.ᚦ,ü,£.aö|ÃßoCßa|>BᚎZzrü|¢Ob .hà îvbð@,,.<ß䢢Ab bÖ.BßßîuzÃ.Üî_/:Ã¥.Z:u+Ã~orÄu<Ãœ@ÃZ|,+¢C|©*ߪãü¢@ð,.ÃrÖªBÄbãðªBÃÖ_oÃ> obßÖãªB,Üã¢_Ãßßbb ö©:Ãzßrü|©bbÃUCOÖ ~ý*o@Äður+îzäÄ<ãßßä<Öa_äb/ Ãh+.>A<:büÜoÖÖb~ãbUß*~ä:z Z~~/>BB+Ubãö,Z+U/äa©CÃÃ/ÄßߢüBZðCOÖîåª<Ãb+>ýÖî©ü.Coý/£u|îhÃÃz:,hßîßr_<+ß, ~ÃuéßCßräðz><üOýÃäÜ+ªý+räbv_r<. u*<¢ö¢öüÖã>ßã,UC~Ä+/<äßvörÃ¥*:oÄ:ÃUBÃ+a.bªzÃß+ý,zÃœ'), (0xE67CD00C1929F775AE525AC74900F156D39556047D95E9AF5A62E48C3F910956E76F38DBEFAFE500EAA8E60464EF10B45BA1DDB20EF506519221B1B6456B351C4903E0DAC7166724B0561AD5AEE54B6B522F319DB45648F168E748CDFD2FBB7E72C9BB600F35ED443AB902B8DB30A2ADD64564153A9868F2BBEE72DFCD9926809A9B63E52AEA5C1C41EC63FA538F1538459BF7B7CBA544DA60C8A520C30D77A092821D40CDBC83EBE948D44E346E9F2BD83A9A32A26FB5F557888461453C583474C268D172D56A88170CCE83D1F5A5F2287947897344FE23CC28E9443821A6ADEF9FD97205CEB902CF121B96A0322361E39239CBF4CEC130C4450449EC2550F5652193311C32EC5AC044B9602968829A048761A5E8DAB921DEA9AEC0C96F16AAC125307F9EF244B0A5DE0BAF1460065BC36A4464C4AA0C8B68725372842C91502E0F9F043702FB1243B0000ACE090C7DA352FD5E2AB1E61718A4172C9ED12C784DBB8005C10223C06E322113AA02BD5E66D5CF322F32257C2988EB93EBCF74718487BD13), (0xA02E3CF0F890D26C16E7B9C5C802FA491A9504DB381790D59EBEB08F2345A9D55F182F03F2422DEB571BD4AB3209AB6E8A3EA27D842B83899D67513AE04249D13DE366AFD2F656D86718841D42E4A294134105E5A22B503395A5658AF0F30B14D2036D4EA3FB9C93E7CA166CA66647B9C4BC279E3D642F1293331A2C90CBE8740C704A3E7754F117A572FDD815E38D2E5EACC533CB6DD76ED45BBB6FE06F021BE1A160361B084170CA0FF9CB6656FCAFA6ECCEE406B4A89F99DC6A1B998137356FE2F674835612566A5568BC730B077D5F0BC9F4A11E152DF8C19C3F9D26D749D7C35B8360872C4FD97779B04BEC2B8DD4ECBC8DB8439451CDC97CC2B9D3B9447D1FE4B0B0831DD7DF7A1B29A464E10C950F6AB06A4990942E0AB6960B699505BE35332C077BDD50CFE5AE3E276AAC68E86F2CAA6808DA348E4F81A5CD86CB75E4156B6E31B5041A3219E1849A526DC45D4DAE9C3DEA), (0xFE9DB7F93783481A395912FF3E37326A11784F26559A3CE2BD487FD82E37F979B51232174D20FA96996A60F95BC41F167B312B724D8F066461D43CEF0470EB025F98492B041B1DF07DB88DEA394287F828685CFD0C872B250CCEB578E40A91287F5E9AC27BF31160143AF494021C2A1F4C43C69B14EEF5D86C231F3665A40C7227646BDBA8C57D3457FBE8D1929723F0A3962CA043F5149168C15557D4DBFA702E816D9DB04F7687C6914418052445D5002E93CE786B2F314FD972E67026607B0178A31029853F5320A4DAB2B0FC8B447C7F56A5482BF8C2523B4ED7DD9017A031C8168D8134AB7AEF3FAED3907D80534D2E6AF0CFBA33D580E0BDEE3768768F8D3A80E7E5FEC347D4DCB6087D2532D5BAFA89AE2627D07795410DA077BD4287C91E4556FC986D4F6B221CF2032B575AAEE8333DDEC76966690952A3F122D0169A2F3F5EDFDBD9228C3A43030ADE736AE9B2F28E8A05A802B5DFECF346CA5D49520558D4ECF97BD20F11B0A483655B8B95E8BA3F2F418C95863CA900EFE5DCC2DCFAB105859E7EF036207F7854047E4F83615D5D101E191078C34EAF507BE32934EDC789B45605F76AC9080FC1134082BD597C8E887EB2BEE1A08DC250CE9FBB3C5644673CF59B2D5B65F34615094F6483CBF1F7FE55A0B63A09A814C843A79B2A4CD36BCFD845C8BE4F32228A6CA8D751283F84DDA8BDE7B58D2C334D866418BE581CC836E394AA852938AE227E2BCE60D0C2A00322BD818FEBB542AC127B37EB1A633250DFA16D9395FEB46F0EC436625ED27CC3C4149C9A9A394A2D52FE73AD01C3081BF87D802F550C6E23091180267FE04E40FE732605C698B5A6563F41968B066E4BBC1B69E0514D6EB7A5789089B823AE72AF32AF8E9C025460C8DAD815CBD79703A2356A63766EEFB0046F5F4D082CEE3291CEE75956E0AEB9C70917767559ECCEE18DE682B94AFB4143FE892DA206589CEBA584FCF03EACC287B19C6D56783BAB82916C7A456B7946D2A51558578116C0B17B8ACFD4F0DDA2E024FB07AE8EEBCBC3DDAA1199DD57802B3D294A29546A059ADCBBDAED6BD692B4CA992070719844BA4A9479D60526D4240AA397C692788CB9F56DD1D210DD5706185DCF433610BAA5E590DEBFF12F95B6E7B6E2C83FCB21510D667A04C671AA6C3D73BEA85790EDFAE9F1E1029ACDC8C6D81BEA59FB8FC74C3B7D36CF96B5DE73E671827D71ED5E57C8E8DE4DEA1EB7409EB32CAA865071ADAC716CD95A1E6433136D1C284A4A54EABC939012B079611CC5F531E28934ED9500D4D1FF8185FCAA83AA3A7D028FF5535E41EDF2BF5EFD320F4F1464EC82AADF808628767855693797E68E053EE41A3500DE834746FAD6A1D79FEF317197BD01005BFD7C677FDA09D8B65BD9D0F7F32B35DE640EFE629985B0869ED96537C6FF288C04E3E79DCE8003796F8F9FFCD1DFABC4FC9233AF039EC277CBE0E001A3A0EF5CB043F20F43970FE30B84F209E6B3B5BE2DA13A33CB798966216FD2EE9F02D6CF9F434C8EEC9B80658350A47EACB891182A21D30265BC9037B98CEED3C5214308AE2269A26727D19221D4B07BD40BB969DEB9C37E2FD469E3B214D460ADACA0610C9BCF894FEEB0034F41E1910B1562ADD285F50B5DC5D9DAB985F0535271E474334E6E393B3019EF09C02EEDF2D8D79DB1278D28B6950347C2F4D0C9FE5DB0DE5C6C5DBDA62971A26B06019D97EBE7E1AE52A12BE4BBBD9E4A2776476050F0AB0F4F91867A1AF787B5EBBDB09366AFD60DEE1BABBC84FAA0AEBF727EB32A421A15568D475A6166935B1976F9FE0D0AE477A039713544EF8B55F0D7BBA878D48AA8A29A3DD8687CAB888750A20E01A2A1B58D0712F0D0E4D16602F16A89ABEAE245EB505B73CC0B0F248DE8ADF44D7C544D36051B71C199D7BDC9D7D6761122DD9D6D5D22B0462DE981F7EE63E836DD19859D1C52A5CF718352789DAAF43598126B0B1086F059A307091C9979D236EF87EBBE50D9F5CF38CDFCD9D038A883F44B5FDCF7DC2656292CF915498836F7B01B8816BE36E5BE1D9CD3438916896B5E86284D1AF63F1360949523E0DF85AF970529B4AF91C4BD66A0BF5B08E2CD12A38EB6C35FE8DDBADC75B529A1C1DE3D1623AB84ECD4BBCCC16BE77937E40A7EC782805128C150AF276FD73ADB9B1BA4C28144E5364925CED2EA02F3016383F86A37621F408C1554D2FC5C7DFC81F0265042B7B59F25477E5CB17F3EBF5DADC4EBDFCFA438FB64356CEF1239EDA8D251F9DBA2BFACCD5945F0E4C38F0DD695754F98911DB14CED54DE8149B0120D91B4DF2E45E3BAEE171E8689B45438D528955A9DEA5416B59FACEE4DE12A84A833E2530EAFDE91B1BA608073972798981C0959B45575233C9E2A8E98F56C0DEC9ADD56D10129254903A8E289D4A21D77135531D8D1CF53BEBF17708550F9BC4D5393D8B9D0C697F3E310B0AC929967FB0C17849F3B351BCA899812EAB8A0F90AEC943640C964A64DBE3DF4C01FA62B26AF757838741C121E780E2F38B4AD3A4317A6C0FD622631A87037E1FD405AABE36DEC3A4327C095CF8218C8BB346E981002B1A978E52EC38843D0C83D3B14DD1D634CCBC872F71B5611F17A495E7673019ED0FA8FB032FD3E28B2FF57F757946E3BAA58E8A3D09E0B965367F4B3792ACD5CC69E6A194D6D304E8C9FBFF8C35FB95C0C0EB31E8B5ECD31EFF95DCB098BAF8832FB30B92955ED3D279A1631DE13D2F4AD97A76A76AED068D03829540F644401EF37C5C72E0032B72176F6F1479C52DC26691E72E34412832AC8E8F12B982DC2551541A74D0BC5AC64F049FFB8DF2034E54D2EA646D21DAB25419D6518418C8848339B315AAB8E1AA3710DF3FA12CB4AA7B30BDD69877B82F895810B6D5F942364C0B78443EED939BF1302D5C429B1137652BD6435AE1FC0B81839C52A82AD43DCEA8F395A4707B8DAD21E5585A6BECFE46D951AA230EDB5A1F6CC2AB5140F3C66BEF9DA9977B92E4B058A6390C93B115A69E0BCED92A1ACFDDA97637BDC02C6C2E1EFC6ACE4356CB466CF9CA68A24D8BBBAD04C33534ED31C4DDCBFDF55B36F02C3A0AEDA74657634730786C3040672B5BFA8C10CB6926F921BA95F07758D5FB35F9AE2E976FE46555917C04BC80F18476A0A20ACF1634B31301BBECB056FBEE6A7D3646923893EC1626CB29FD124CA0B91189D6A6CB3C1FC4FB0B85A3F7A4FE958D9A3F5ABAE23E0CB5F4A85B0AB5F0C51B239EDD25379F411671A73D0E481E71DC846F880D560E3F4BC9F0D683B4CA350AB098D4161170460AEE34394B010E7DD6368E765678C7B5256F816B46B8CD51B762224DBF4A6BBB14198D1F11C4E44ABB72F05D3643EE91F8D3AEA690150F4220D281E8DEC0CE9BCAD3523CFBB893607B36AFC3B8602B73739054DB9BB51AFF1A3AEE3F430B7BFAB4648252E1A19640304E2B59753B89C0B70E653E7BE30005B86322B0CA642D6FCAA51F53DDC881C20A04AB5D99C189DEB12D8834A63D8EC1547CAA8E8ED585DC10BB8EC01C25E2FE8CA3346747B27BF6D9440F9CDBF8C98D165E0F512DF343248ECF3CDE32B9C29B4A89A7F2F92789A200B3A53AD5E8F027E1F1B9CE2681D089601FD878759DB42F8174524240D693FEC45D506A5E085EA5DF14EC310FF464C8B91E92E94F012C62FF85B96196ADD71B6DCAF9C921663B67C132A960B1732F8D0F89993233AAAFC330FD6AC84EED0F213DD0D3450A9B9752E33B281C67BBB18C662C520D14A4E7C31B369833FB7318D4237832D0AFEA8263F2364EF882836B753BEE62229B020C98F90029D4035357602253E8EF88D0DC8BA9EE1AEE55EF4087CB12F80D10F639217BA9E79FB0BE609EDEEED62EAA7BFC6B01D678ACF72E3309CF9208E05B5A5F3C1AC773DEE94CCAEB8D7C0F770911ED5F169CFB3A7D9C2A4D66DDD01EB57033848FAA13D3082D71C50B9D2F7B2ECC00BDB4A9C9BE5F24CE7EAD26781B7CAC360D388AF76EFE1A46F92B362EE07CAF2EAADD126A0BA675356AEBA535E1A566586F57124293D4A1BF9A62C09328F5EE01FDF7DD3E5A323A56B3558C8358E46553C4DDCF895A6C8AD63B62DF98D5E20C64FD9337E9D8280E2D2CBB8F4E482E56B60D7CDE4B3654A7816CF702E7629170D1491785C5AC7B7B9CDFA26C9EED3C8E0D0C299B6903C13EA8EBB67CD11516BA8B3ABE05209891098201316B83F808A42078F5EB48F617CD77E8ECD9E5FE9A77C8E7D1542F376D746B101957D255AAA0D3124C682F3B619522E09D47BBC7138366C9A29C26A474F91B817038ECCFFB123E3BF6D3A232588D864C314EAA15B8A3FC85E108B30E8A2EAD534C9DBB38A852F57B097FC04FE134711515EA73365EF5C8CC4C66DEE26F2FB1C8365EE5BAD25D93EE492F0C38D3AC94AC979DF8AFBB670456D4EEEC3174130BE9CE0819825EB642C84684FD2FE99FF89FC2224AD137120CCF5A9EE5E361526A2623227ADB93025DD14B20593679D46D44F65C7F41C82AB2BBFB4A37CFD06F66F42AC70CC7251D0CBFD4699606C8D6457621A0ED14E3186DF87FBEE048DA9E00DBC9650BB2D7A61FD94FBF7D6E94ABF31504B19E3F72520102691447663CB3E53668CA4D53DA82AE7B8113C5339B0F53C3CBCB4418FFC1596753F959B35EB99C8BCA46F5DA6E9F4A721322BE6E8CDD7769B0839A717FDC369760D60FD138EB1CC7773969540989553C70C1F5DD12EADA7681F002DB1F2B1BEE006E69988F79492805E6F753641350272E6DF0BDD6697475FB894F38E841A84C2D8B43AB1FCCAD0788DDC72BF387126E9FDBACB13A6E0796E9E39D062A003FC44EAB35E8CFB50761B0E924F8A258827476E0990C94F711CF73BCB12C2FA6ED78ADF2ED4841399EEAC44AF041390EE49161288F3977232F4799767512F3DB321A0BBC5AAF6B4A233D41BE4859F6D08664C82FCB0717A3F17AC395AEDAC48BE6E918E6357CB44536270551F7C8EAD550C8E0005AD4102AF257CAEFDBC59B5878C5C75F31009B19B082F9A401C5BC388FFE44E5EAB42112D8EDF3EDB1C469608BBCD922019B94502DD65FC7DA7C292CAB826FED80A56DC494A476530CBD67EC29891844FC9A26E469E4B8145469486CC4C7322F647BEFE64F048D5D254143706E63AE4153D430116B7B839BED49603B6C199E457B3887ADA92205E80CD9CF189137A5E0BAF708E08710C3E8F843F8F59451E11BB30E0535EBF0A821DE580481AC6B0AA5A38F706500BDBE5A749EB555390043BAE8B36593327004CA5ED7023F0C324C9D49435214D18C0B054FAAB14D4B42F8DE0459A8F8F56763237AB61629AB8F4E3252180BE5AE2EE96CA8605397BEB77F0BEE242AB2994397E1D03E9A2B65D159B05C8EFB2337133FE5703C409513DB64C3370A4B77649B991E802A056F94BDF6C706934B3FCC4BC4CAF445425D02F2DE04C9D6E45B95D25BB0E5DCA31D0DC040B245798E708034F6FB4570831F594C0B8D5BF0A5BDD9AB3134378A49EFA8B7CD33F4801789745D8494DFE916155F3C67A9D115C11D2A82E8AA385A38F5FB17528DB34F2AC9348218FE7C10EDE0852BD50B22A01E82F6B01961A77D411A148E99C896886200119E754EFCC29109A4F8151C753DD34AF8CF970335B921B7310EE9FD772549FCB9D4E9843ACF86341F0FBCAF582494E6AB5ECFD6F15ECA586CBE0DFDE8A3928FAE1862A0444F10293962E435FC726F0C69F3421855730B5B0A81178CB1985B6B6D3CF14FC1E4925C4E96AD8E6A946BFA4EF193E5617A2A3B0D07A5C3278377A11788C8CF711F4A7560E5D9CEC57CF066252D3DBFF47609E302C632CA4EDF24BB2EFC76E1DB9C792FB71E747B906B7580174F9E0A55B7ACA17ED5BCBAEC703691B12E9FC9060E9A98B40E08E5F18E429740A2B2FF312A65775FD572F5DFBE4346E7D2BA71DBAC8A08A5054647BEC6AFE083256A49CD375086C92879208BA4B905CAC20E2ED3D0CBA418AA4A3BE41DC899358262BA43F979A08233B8A323698D005C408CECB8811CB259C62112ED14A2BB6FEFEB0931FEB1C1485D9C90281880AF2D49EF9380DBD0B475B0508DD866B36D80FD43437E73DE5D9ECBA45AE47C8A413571F5A3350F2A940F3683819E23F8E1AA3F1F2AC53D30A96B9204C52775CFF9261F485661003871D2BF3437F05CCF6AD2C2B0B56D6F7C08414C37930A656C89669A5B7EEB927099F69D5815F8F8B91EC2A9E264C51A9BB6A3400524C895776D42AAD155F1407F304216BEC017560F488328D0507307C45C0EA4DBAB9D5BD16125EAC34E27532D822AB212AE6BCBAF4D30BC91AFC516FA4AE685575C64D3A2F6454DAA3C92B1213FFB4E35B0F525E032F59E6AD0BA21AC0EF08867A20BD11D471F1C691E1172AA7F9B61A476E13945C0951456C678C24C13A1AB4C0A597F342A20EEA1E8BCC22182E3EB35588D252DB742A70CE77A46DE4CD0557C6636A0261C3D8A45F2876D03C2F2C3E28D8CE3868C8D84C7B2624CAFDA1055185755BB5C43C5292AF2EF2B2FD59339F4B66440BFECCEEFE8A1D863A9E0EA6BE22254BC7D37779EC863C8939D5254E21F2857F975CFA52B8865C2AA6B517F4A187348FD80E6CCCD3ED5884C243B42965CE6447188F0F6128D29240764CD3366F47E7B2A095761386B9ABA904759075D133C5D750CFDB1277D267057B2B55861921157A5B0288CF5851C15FE3655CB3421C6E4287FBE59F6CD53ACD2E71975A63248FE35F151ACFAAF67FFF0E7C2E1275B4C35FBD12FF1E3B760E85C7BBA0E7B966FBBED579532C029F98917CE690EFA628577AAD389D502571A7E9069407EF559846A7806F3CFC60965C1D7A6EA155E61FDE9F63263980C9AA9964D26A256E98A93BE4A0E86E37EB5B1917DC80D6B6CF5203E7B5678B2E5EC5DED6D5D829F670ED85D132BDB5FDB0A7B3070C22A449D4E29480673EB9301D0C85DA0A9861133223A6EEFA0584129D05370DB484223C219401F343A98F323455B32538DBF217469FD5E97BB54ECE5E82E36106AB7B98EA49B875976ED0889374B9A5515FD9C11320C714AE38C06C463394C1C62D2B88D91A3AEE237C80D7CF4C5507FBA97CFFA8214DE5E466EAB2884B2F63D90FC2664831CB3624EB9E96A0EF4562E2B9709CB69518A5DF46A472308766D74D1CFEC08AEFBECADD45DABD82B745F52188D0CEDB92AC43F61D86028C59069C84C74984F085D7F3FAA5BF71BB5B222800AE51A8B797FBBA6FBAC96D69BC3D843F3D38BA6DC1049CB0DCD335D23B889BFA5D01DE075DE4ECCB8F1435BB6A893E673B317D2268BA3FA9B5F8DBC3C5E734322E720BBA5F7CE2594CEFDEACCFE0455295CE97090B7992A2C1345264092805A7DF038CF77E8307BF4F23D679DC92DAD4B2882EF7502A27B5E068F92A2A7D4F23E936CDCB544DD411C6D8B9E7A219C62E5A7DB281FA0E57B4DCD717168ADD95D2D4B28FA5C50E8064B31D3177714012C6A1CAD0ACCACE29DBDF18EF7C35BD86E943E712F08920684BFD4DCDDCDDDF439CC55174C00CE9070689B4C6AD1F032EF6964734892D223C806185AE7D004CFDFFD453B7E448C6DC5AE00C66D45ABA2CFA1FD74695AABA6EA314F45E873A8A053CB6C6D9CB4C49ADCF6ADAA820BB6726A659B45D2805685419E414CF5467551F5607291D93E160AED52A772ACF114EE7ACCDB82D862CDC374E71BFE63779586715BB5218914A92C4F80688FE8E3E8508962C2386AF2798292AF2CF21217A765BD20F1514BF3556623BF33580A4DEA910ECB7500B56D1B8ED2228EE9E7A70A37D8F2C2B7E28704860D5C04BBCF218844B49BF356A296A05005728F19647B7E8CA50B8F078B32AE77B6EF0359585FCFB09A4A255BA3B385324272A27007FB2181DD8806B39280C981ED8B9FB39356F7B5B2CE7F2A4622D8F1764CB508803E6FCBCD717BD0590C1E1970A37E2813C19EFB8AFCBD397C074BBABF054D55CBC101AF1BD3F621DB276CB6B055B992A4A0EDA4ADB98D8371264FB625C11143BEB85DAFA1CF1C4FDB7D2063900689165DA9060E2798B802437E2DE5843FFC1A0618F8080809F0E594A), (0x09929F37AAD39688CBB131C25F04B6C339126BB9B71165D770E710E43B8207989BF8779298AB3385AD77F5EF30CD207CCADCD446DE24DBF82CC7C6C2C2B24C49A99926678D242A8EDEE60C3F1B76A7A3C7931A5FADC0B9771D7E65D1E571C2FB2AAB4597A7B8EFA6B14667F8189BDCB51F22FB2E97ED9CE8DFAE490EBE59A96D231014703010FC0EA474AD6759C15F81A1AFB1C27594633D0F5CB7F86EE1E7579DFAD407866C840F26EC8A233F358F1D4FC86C0EA8E6F78FADD761D458049FC38C56C95FED58FB352BA19B89093FFDDACD99A8A674D9AEB602445AAE0AB0B7224CC797E96B3030F7CC37E3074B6E856DD98706BE5BF84FB3A7135DA8FD4C2A7AE9793C42A8146E9D69B1D93CF5A76B93BEECD583AAF9C75378E34158D388F9800C691ED23243C4C5186955A91E12BE00A8C9E91177A7D0EFB2E8CAC5D216C9E0B859308C8898617B280F6A40A41D34652541AF099EE80964992E1F4978FFF3019F74F1C5E232770F686EE8673D8F4B94B364A09166C042CF50CBF25A791702291C68A12F2B6F83F3C9A0A130FFA12709E38A96145E619BDF322175173F1D96506CBF4BD4EE1B6944E1ACC8C61E11D0AFA3E877EE81EECABACDC1FD0AFA6CB4AB0A50C43F55531BC7215232B298D5C02051C57356A6A7CF7DF591062C1E5E4974F81DBBCD4D90594FCCAFCC2FBB1721F801DCB934F85D046281464AC44CEFA9C208BDB97B19F2D2C06C2389F7DBA0C2DD6F0E2B41A5157C9B18594C07469503DD060926FD5EA6DE0E09F9C8D4D40D87E1846C553DC4681DF3411E62C0A6CB79D720ACF1D179C47FC82F1C37AC4DA7C60BD26B83DA3FC5189DEC33BC3F431E683E7FF1B4281CB567BFED8C0EA73170A69A5757EE3A489F975B9353E546083F8510B4F82C5BF39EEF1C03C3ECB3B6716C7C8D21E8EC302DF6E05A5895C8D021B6AE06FDF238434AA6B968D13784B2E3A421E668B9E65799DF87024C019A09264CE20D3EACB97E3438427B2E835FF6712E76B473E26768D0576D1D6B35F7480CAF418454777336EBA3B230766B28158091901D8BE69544E57A3DE73F9B13FE41FA6F7E42DAA1FABA3FC8D02F37F1642F579DDAA5DABC251AFD9FDA3A8CF74F90B4EF7BFCA9D3A5EF95624B1DC514AD88D8B8E7FE3859663D4964443BC6C02E4878407B4875688584F7EA0F77710754E9F15261D40F51575B883EB2448F6A29D53402A585986512703263064E49EFCC410F5B49745F593927E920BF37B541F58DC13A426E62CF508B3FF0A1AB4B0811987270343320B476DBC97D9B78A5DBBBF16E798D0FAD5DDF3F0BBD346EB88DDCE00F27C4440CC16C0CC367A5E433D7E66435B03DD17A01EA1591F428627F07223BA1BB697E1676E5AD0C804B46B7FA0B33D7D03807500A650D3DAFB31799098DBC446A42786E674EBFCB90C5FAB6A45D96E8F4), ('00000000-0000-0000-0000-000000000000'), ('2705-07-09 05:25:19.800'), ('2062-11-09 17:05:00'), ('1/14/2009 12:03:07 PMThe quick brown fox jumps over the lazy dog0123456789,.;:?[]{}()-+*\%^=~!@#_|/011/14/2009 12:03:07 PMThe quick brown fox jumps over the lazy dog0123456789,.;:?[]{}()-+*\%^=~!@#_|/01'))"; + break; + + case 7: + $query = "INSERT INTO [$tableName] ([c1_int], [c2_tinyint], [c3_smallint], [c4_bigint], [c5_bit], [c6_float], [c7_real], [c8_decimal], [c9_numeric], [c10_money], [c11_smallmoney], [c12_char], [c13_varchar], [c14_varchar_max], [c15_nchar], [c16_nvarchar], [c17_nvarchar_max], [c18_text], [c19_ntext], [c20_binary], [c21_varbinary], [c22_varbinary_max], [c23_image], [c24_uniqueidentifier], [c25_datetime], [c26_smalldatetime], [c28_xml]) VALUES ((-1147400469), (null), (17834), (571339572), (1), (null), (1), (100000000000000000000000), (0.8052), (-922337203685477.5808), (0.4847), ('Oᄎ*aUAZb bv@<Ã¥~üÄa£uUoÜåÃb:>ZauaÃßîUhhýå*/öÃÃœu Zª@Ã¥ZAö|Äöî+Ãœ<+îýOÃ¥ZA,ÃœAoÄu/ C~h~BAå¢Bã©ÃÃ>Ã,zB ö£Ã/aU,z_u_~bãÖ£îÖÜ©:>Zî*u~ Ã¥b£ã¢î>©.oh ÃÃ*,_U¢ãðäߢ@.Ã¥/+ßbß©b.:~Ãöh*buâ:üÃoÃ¥*B~Ã.Ava uabz¢b*©¢zåßäz<>ã¢bab/ov<:ýrð£,O|*ÃCZܪ©vÃœ .Zb<ßBu|,raUÜäßßOBhÃýðÃv>~*rbA,ÃZBÃý/ürCÃbýý_Cöv>ö/|Cb*>~ßürÃA>+ßvö©'), (',rîAAîðÄÄ,¢BÄh~ã¢UÖU,¢aý+©~¢OvovC©_u©Ba/|Ã¥B|~¢z+Üü£Äðå.Örð£* z_/U+ýA~+o@uz©@_/.Ö+rãr¢/ UvÃœAÖ/£Cv £ r£vß.ßC<¢rîuÃœ@îýC: ßßAÃÜß*.B|O.OÃ¥BrCB./,>öÄA*|UU_©aßaã_oî<ýb,Að/ßÄ ÃzÜåÃað ã Ä.UBO_îOªOb|Ar¢/+a:AvU£u|ðÖßzßb@ÃãrbÃüu>avr@ZCv~vv£ðäßb:ÃœA@UÃœCäßC@Ã¥ra_Ã,ßöaýbCð/£O@bhh£äÖÃZÄ:üÃî,,.ÃœUb~Ä|vhðßb.©Cbªª~ߣüåa:vvýößuBª£Ãor~ªß<Ã¥aÃbÃz¢~+*h ~Ã/Ã¥Uªz:~zzÃÃ<ÖüüåaýÜ ÜüoðÖü¢,~Zßöý¢hbåßu©CavCZð /UCߪa_oCö £bhoÃ+,.AA:ð,uöCb|Ãrªz@h£,>Oð/*äu<~_.ããbß~hZß<Ã.uo*©ð@Aüåª*äߪ_:ðA>,zÖ|<Ã¥@ä z¢vüð ãoÃðÃ:¢©ß<ýurb©+Öý*B:~äÜ.©Ã¢~üBåîvÃZUBßð©bÖýîZ©Z£öäv¢ãäUZî@AÖýBã,B ð*,C©o..+ãäåCa.ü£Cßvb,:ý*|ÃœOÃýîªßöÃövßOCu.>,.a,A*a/Ã|ãv@Ã¥,ÃœB+UÃ+ðvbov<ÄßðÄA£îb~ OÖßÃ|OAüÃrbäbBÃü©C*>ä<|rz@öC,Z/:Öö£@OÃœ öÄÜüÖ@öÃZo©<,,+C>|ÃäBzZ:BZrO/@Äa.oov¢+h*,<ð>ýߪßîuî+ßîU¢/zÃ¥: ÃœzÖ:£bUUCð@ß <©aªOob*Ö*~ßÃÖö>/¢U©ßªÜü@BhC/| ÄZo©Ö ä/uÄh@ ß:<ä,ÄbZvo>äîbbbAöîOAä@~BOo|rAüÃb/obªvÄÃrüörðãa,+Öå/@b£z<|ý:ä¢Ãu,ý+b £ðÖUÃöÄAu:bzö@aü,Ã*bßÜ_Ãb¢~UÃßö:öbÃãhrÃœCövUCîhðBÄUýzaý>Ã¥+aOB+>öÜzã@huÄh+Ã+ß©¢rzO*©C¢BÃÃüÃ~©Aö>.z<*ßî*©ubv<öC|ß|::U.~ßaB© />COª.Oav<ߢýAvv@~ªO£:Uo|ðOBå£bÖCZzÖß:uo v/<<Ãü,vCAÄBOÃœA_uaÜ©åößãܪ*£ö@Zr*ABbo¢>öboÃœ~oåîUoÃ_aÜß_ov Ã¥zOÃœ~£>åäB+ä*ª@ᦎOr©åÄC>výv._<ðßãÃOÖZ~hBZaßäz ð>ürãýb£aªbvz©u:zª:b>ä bzCAC,äåvOðbÃœ:*¢öÃrÃ|ÃAZ:äßÄr.UãboîîÃööUhÄßb,¢/aüü> zhÖ+Zã~U~o©äöBý¢|/îýÜö~äåöåã.ßÃuîð@ð,@¢å+Ä£ýAöhz£ß/@b@_+_î>*öÖßÜ//üa|buAßa¢bZªßðß~Oª+ro+,o, öä.hýîv©äå¢ä@üU:ÄOBà O*_ß>ð|öÄî@O@£h_+C~©/ª>ãåbB.a¢h ßaÖ@Ã¥ >üÃÄoýB©azBî b>'), (N'~ãÃö/ãoðbÃœr+>墩b¢¢üÄ/@ÃrbÃœzBzbßÜCO©O,bC_Ãœbrîz>.£|>/ð*zãî_*ßäa¢ðÄöA*u££bÃöz>>ÃhÄ@âä,¢UÃœaCãäÃAüÖb<Ã¥/êZað.Ãýbß*r.£ZC,Ö@BÃU*CßÜ+£ü|.AßÃað:¢öýîvÃOÖ£:AÃä+ ößÖ/vorhAbA<,z,Ä¢+£Öß_r.>o*o ðBrbBað~£z.ßößUvÃœ:vÃ,*rª@,ª öBßbßÄoðZzu+ßbÃ* aª+OU+åî~ö|îª|Ã.~£_<+üU© ý:uåö*¢äv@ßuoÃÃðoUÖ~a©Ö_ür.OåüA+ÄäUî©a¢~öb AîO/öß_uÃ.@Z/ßvhªO£ü*Ä¢ßÜ:* ÖZî¢|örüCî©ývbCZ/ üýbCö:B¢_r@Ã¥Ã>¢zAÄ@oîzOhh¢ü+bÃoªOuýrîaör,/>*üÜ.ý*üb.ÃœZ/©ßîüz>Ã|ãAîÄ>@/.AÖzÖ:ßßO+uüaC¢Ößåß ,ýA¢Ã©ä£zbbð<ð_a£:@üäýêB_Ä:uZbßÃrA.ý'), (N'Bªh@Bzz>b|ªB*+ã:,U._oö./AýUuZîCa_ã/*Ã<¢ZÃœA£îªOÃ:ãÖ£O~~:oOÃ*aÃ|:ã*ä©ã¢ävÃÃðO*£üah_üäabãA ß:|ßbA¢a,ãü£o.Bo>Bvß>~:ðAhZbýuö:ýOÄð/zü+Ã¥Oößý*ühåÃ>ý~ußua¢ÖîÖ_aOÃ¥@©ýÃOÄOCîð ¢¢ð©oorZÃüäÖ*>îß|bª*oÜð:Ãý/ÃýzäÃz>ª+ÄBÖª Ã/î©î¢rZî¢bZ~oãÄ<üOÄ@z/CO:äî@B:zýa/*Aßß+U,b©ß,Ä Ö©UC|åß.ýßéOßßCÖ¢©*ßÄz£AîÃäb_rC_äuröOabzub£:A>îîbÄÃoåÖÖãUÜîbßzBZ/ãv¢o|¢ªA|££Oa.ßöAß<ö©C:>zöuou,Ö|O~©¢ZÃ¥'), (null), ('ãOCb:U+bhß>¢ ÖÄßhä¢,:ßoîBa.Ör©oÃ+.ãð*:äÃäBBªvðãßößoa@ÄBAarö/ã¢ä:£ßUððÜ<©að@*Ä|£oo~ß,@ho£zßîh>.äUu¢ü:Ãðîo £ªªCä o~bZhB~r:ªÄh¢.Ö©:ßbzÃœZý .|îªuä A|O.î+ChAª.Ã/:/ä+.C.,ðî*bÄÄý_ýZ~v,CbU*ÖBÃðZOÃ¥våüCbußÖððB£ã*r£Cªbzß:b +¢A£AÃ:£Ã<ßãÃä>Ö>ã A:r@ uðAb©Uzßrhbhb AAð_+ßhbÃ<äý|Ãœ:BîãÄrOu_Oé@ a@obu,|O|uªaßOUråååZaBÃb*¢ÖUzO¢bvaäðCîåZöv_©uÄ,ýý*zßßUzîßBÃ~£zÃ¥+ª@ÃßzzBýaª Ö_Aã¢UÖvüåßZAÃöBaoz¢¢+ObÃü~ÃÃUzßOî|*ßvB îbð<ÃœUÃB*rBᎁ'), (N'üh©£b~Ä|ABhh~zÃbüÃ~:Ãv:v> BrrOýßC/©ßªªZðCuß@zÄ_||ßÃ*ýbvzC/b@B+©ããU¢ýo.Ão:zaÃåO,êo_Ã*|ðãÃZ,O|ÖßÃ_ö©bb_.oB~î©b~/ðA*îðãö>v ßzäa_~Ãz¢bÖ+¢Ö©UÃœCä:hräîîª:.ÃZU_h_ýuOß/>.ÃÃão:zêbara|,+ß~+_üåßßðvÃvðbß©£öhb<_Ãœ ÃZBAßubÜ©£u@îBOÃ~Ãœ@£ZAuzrZ~ZßC@>ÖzÖÃßÜaÃrüªväZÃœ_Ö,:ÃaCAÃbÜß@¢Öö_hÄÖ~ <ðßÖß/ /ü/ð@A@.£ã<¢vb¢aü>b/abhh@OuZ:£örÃÄvB Ã¥aªU_îZuhzvãðãvÖý *ßz. ßUöýåZö|Ãœ_©b>:rzUÖÖzßãrý+A<äß,orãvOäv¢ªß©rÃ¥U/ürB:hzbðhÃ¥_ÄZ£/OðrOÃrBð~¢Aªoö£~üö|.ã+.©BBZÄ+¢oýýo¢ÃaÄ@UÃ¥v@ãBÃîü>z~ÃœÃUªß@@B¢î+_ö:b¢ýzî|v/ @|ä~|,rzubb+UÃ_ßu>¢å >Ä~+Abî©~à *.ÃböðöÃ/~o<îBßî:<Ãb¢_ýaãZu_ Z£¢*ÄAãý>Ã¥Z_ð/à U©vuO:rå£Ãß.Är©Ä.*oö_hObüîöª._ÄCvêªözoß/ÃÃAu.ZZr|C|ZÜßB>rvv@ªß/hã_ª£,ã.hß<Ã¥>BÃAÃ¥Zãv~b_vvÃCßa+öZa£**éär¢ÃãäÃhBüABzA©@äBzZ*öZb.ÖårääÖ,zu/£¢år©|CªhÖðbî¢<ßUb: ðî~ZBý>vuu£ÜBªaîüî¢Äu*hZ<Ãü|,b>*äå@ÃAªBÃbã+ðChüZª~ß*.ÃB|Ãœzß,aðåoÄzðrBvä+ßö¢+üro*ÃÃüßvoðCßöüÃßÄÃoürrßrÖO Ä/_:Cê|o:£ öbî|+ß.ozh~bv<.Öý hý>¢Bߪ<ýb ,~*b*rÃ¥z£:, AA|ã:r¢ ã~ßz©ß ýbüåß+ßð|uAîZ_:*åÖ£<ª@ýhZ*Ã>ßÖb,@äåu©||ürBa¢/Z*ß+uö_a*Ã:Bãª:£ CßO¢+.£UÃzrÃv>@*ÃýaðC~ß>,Oh.CãüB åýr/ßîðhh_£* BuöÃhª:Är@ý©urvuCã*B*,@zðäBbÜýbOobbð<+Ä*£ª©:rÖ~ãðaÃZvüÃÄ¢ßv@,ðr:ß@oC*ÖÃha/ÖÄbBoZ,.äü+ååB+rã|/ßvÃ:_>_>ZaZ©uC:UöÖuo_~ ©å©/Ö~bbÃî.ãýö*¢Öð©Äö|Ã¥bãð,ßÄoAb£Cß~Ã¥bÜîuöªÜßv:'), (0xE37D2DBAFDC4A6EA81F3B310E32028A4897E78DF620D1F1400E1A6F3B62AAAAEEBEA3BDF65A4DDFE99962161DE684EFC42BDFA2231375ED55D19BA1C1DB23357490525F9E4483FE5A07A45CCECBE359892AAB1F82F887CB38B66814CEAC1E1E762C918D9435517F97E1581B7F192E89FE3228972003B27C088716D7EC6F2FBDE985D6922A55B543C92B8791A06C5C2F87DE268C7376EE726A25751D2E899328C1AA21E9329C6F988CD4DE047C20DB9C3AF7401E48933A72A7642804D0A8154F986EC0064A62ECFB7E8E0FAEA8D9F64949E8E2373984D02E7FBF41DE645AB7D4BF9E7C1D50D551C80A54AFBA938BD9CD6DDEBAF7C5EE06138EA1868B210E9713C62AEF0A6DE8F874871A2CE4E5159AE3D5747085AFC01ED188588EBF4EC6970BCD8BF468ACCF5F84E63660ABB1213E6906A2B5BC9E0164061C1D82055A3935B0832127592132471614EBAF695F6310672A25A89C10EA6DBC17EE4C8F4D4A2AACF0A0289FF9D537C46B9F97A261FAB6B90D1AEB3480A9AFA8B36B3132F5B7C8DAC0F278AF4A706D44EDE4307142CB5A1D378382326EF61C57007FEC9EA404DEA3C6CCE16F82077E8CAD9646AC692E55F81113FB6235966BCAD6119ECA93DEA0E9059CBA85D9EA9B3014F584D8AF6FFDE229E47D80096C6E305116997068B3F8CEE55DA6CC73C01E3688CB5D4011831B6613BC90AF6110EF993E7A24C3511AC750F), (0x351C9216E59D647073E1F1E1ECDFB235CBC13596DD47E0D9DF9AB4AD56E040C535BAFC99CF24E46C91A19B18A106B56D82DCE0B3D93581ED3CB9374BE8B61992A12CAC32E21866A6DDC8043BACC737D9E4472B7AFF8CEBFF380F5D15ED9884DA8708777559838A69763AD51030454175815E66A08B9E931440ADF9D3BB50B945442AB4A34FC17F61BCC104C5B6DACFF2CDE7948F31E34FE8756235AC89B7AE258090CC06919E25BFDE05E4C99ACD5E65DD0705D3BC2A1361DACB2DED8CD3D80513DE44260EC8612FC2D4B02CFE854EA704CFCE82B2DA69567D6A2CC67038330A2DDEB6BB88385715A6D611E779E662547C85E8BD0556533874EEA8A39C9ABE89A1A6FE20CF921ECC78B9DBDBC882DC9607D749EA4F7605D78B7D469A8FB3780B178746D3E84284E9671C444C7A7770F211119CC450D43A2BA12794514C843DC440D0C4403B09AEC55260833331B95D140D53897D17B3BB424D1B32C1AE339DE2DF800BA9B22FB70763D671F05107F9E8C97F44F8FABFAD8C1581F31FD7EC161FC2A054B1ADB361DD9C811A4041CAF146214AF72EEEA5E81FD27F94303C973076BF522DB0B3483A151D665B79A56D4A4A90ACFD8DF5E8311DB834DE2D1E30A00450A380EF9D4093D80FE11087496E7A65344AA08F99A381D7210FF87E6A0DF7EDC5562801EC5AAD4F19257E13D7A9D449B979F8D490116BAD22A9CE8D48146E02), (0xC1F2457978DA9D517574256E00773BAEC5F014225CB4EB7BDF438C1F0705B67C28B3E7E10440001E373E9BF688B4A95751994E7DEDC8C60D07CA99354E7D496FBEA8454C8F5AAA84F0F5EB1D18F5F22B9934CE6EB7388E60ECDADA3AA7CAD0BAF52C38DF6E5CC7F6EFCA8DF8DDA8F411D76E9B19AEDBB8851AE55FB5806FDD26243028ECBC13BC3D6DD77FEDAB968244E6C862382EB70B1A73B3C589FD12767FEC67D3AC800755C4B15EABD75CCBD984621BCEB70DA5F76D250E79094D33405B60FF0044C3D6C3DE729E86D00C34BEA7DA4126E143BF71476F6586728E4C767E1E50765CCA94C08B57F0446F1E2761F14FD12E0C0C5E18A18DB9D55D505150262708B1BCBD61DD45809A89527A022948049422BC1D6972BF37D4CE11BF633B069F1E471575A533EEF4E88C71D4C5278B908C58BB2E9309BD96F184E993CB861C5F82B35CBB13D25F6134C834DD00EA72AC4381320A80D70C15897E83204A5A28616F125212CBCF7CBAF959FACBD4E09506113C4F4A5412DEAAA64731944E3E16D99FD26DEE9860E17304781126DD4040A9E87D0E0D0ADD0D5D34A76B849EE76BBA43202B0172A76DB15BDC45DC01B7CD660688ABD12F08CEC2C510B9F1F45CD51D0C56E3BD153E36410F5CB22E97305C7CD9057D153B998A3A51693C61ED7CBCFE0728CFAAD31050C8516AC2D356A02A94B43D17EFDEBFE273CBA86BAC01D553939FB3276F61B1A8C9B4B5C4D0D7B7E4B03EA8ADB064CD2047465CDE2AA4A4C67C172E33A279BA3202944E3A28FA119B14C4BA6D5927A22FD293DF2905D27E2510EF48B8A98442378475AA1C1592F74D34C1CA66E9366C5475FF600E9A912D2F16282A39B258F28F8183E9E47D8619409C92F44408173BDA82F443A924349CF3477A06ED67BD9BDCCE3AE4664D88D6EEE62071089CE927FEED50B6BD14486B4DE6F69C02802CD8DEF71875CD32D58CF91D54C304C394565D5207FF1707DDC785CF977F57ECD36EBA47921184745ACC18C3BDA0BF85678A519F3EB0782CC0D71951EFFD9A55350D49E608BC3083D2E9F83BE754493C0700680D2EB7AD23F68D87BAF732855C31C38DB057D97CAA59CDCC55B73D456C8EDD49EF958D277D5F25EF7B34758C9F649C0924C699E52D83BDB360EA586CB8481A2C1AE895C7A49C0F5031E90175E4412DF11B3320A6F4F71C6BD7D9C69307B837321A4872B6CED46588B649B4438247CF1EBD66518427743822CC2AEFCBD57C4978B2CF5B9BCF762346CE98EFAB43D8E98F09A8D5A067B20AA50F4FEAA4E599B239FF3B91B3EB334F47430BB58F858DDFF34060C12DA7A811FFC4B68B808B7F6034E6B5AB074736A3D5588D5D5BFC7B20826FF66385D88592572991EE35A7CFBBC4AA81A9CFE1D8AC09BCEBD4194BB60348960910941BDB5C602353DDB5476E2E89D298B07BD250A0964A59C8ECB1790C738EA59E9EBE26A8CE2448AC8EFAF6C24DBD4A47B205877646687A4AC2136FAFAA476A27A1CF8FCBABEFE2568AA4129C53977A2F6632596E062F583644DCE6BBB59902468FCF207E2E7F9BC22331ECA155DDF62A983F4877EDFC2072765887CF0926A1F0A1CC0C8477FC01E796974BD543B7E166E5BC2375508A5993AEAE08D5F7CCB9FC8FFB0088D072B39C3E61E156B14A2EBF7720E94D032BA0177379D5C9F42BEFC9DE4E4548B7589572088636EEA803E1647F485ED7E26CF8645AE815579DEAA7137217776204E5081E8B76447CF4B26E70977149ABCC18E67256E1EECE423ED51EDE237C918B7F5F9A40404C6C277B6FA77AA5C02CA0FC465A30050C23F639DB4CA1259ED036DDE41711AF6A8CCC7A4ADA7146549D7EA87EE2DD226085733BA30664FFCA01DD9F719CC0A81AF192B98DB6BA31B1B0E53ECEF8A7BBF3147D5FA4D50B6328CCB049FDD2D4B7DCD58E8D502494AACA428AF3212530D15921AB5D1F610345E52E90C0057133DFDB2D62F86A1A6BCF7FD294624B1841039CDEEFDC2676987AD248A72193D3A4590EAA17F4C237673FB5DCDE4CCDA0F9CCEC8D24278257B86494E82621724A3BAC2E3B54A0014D406477AF264A984BAC314FDB3406AF7DD6B6F2B35FDA1145CC6BA1321E924C58CB9F4DC0AFD2306ECB493BF4D2971535FCB1649DAE4EED655232E2BBA9662D1AE5F60F95B9EECD038583E7169F1D7235556B356C2DAEAA7DB1E76D7DEF75C5651B200EDC87807C0DE360172B66D7C634BFAD653D31C0ED364C92E4D181501310BE82FA7E0F96ADD5EE2788CC977F16D92038BD420F87335A33D790F49BAA8C934C076CE4DD47252900904E0A38209FCD7C0AB14893D100364E9F4B3706B839449AF57F8F1231FCD81293427F3929221337C37890F943007B0636953DFCEE2347560A6F42A00FBA4A0ED835FF8F80FD257C37FF433FA84B56F50488DB9BBEDC2470FA282FB9E07327082E82200D00EB853970C0C4EEE007ADBF184D9B87DFAE50FC118F9457CD6B9CC4D73A11262A49F41902A22BFD17358FF37B70A092D7A029803124FC71562E6B0423FF17A5F68794CF5882843C8352E4DBFFA1DC5DCB09ED361191F4054C83C2D43626D9171EE9FDF4DBD03A551CECFDDF402071B5510D391A12E09365928F82D5BFAF055C78CCBD15A4E882FACF9719259315C52C110D8329EDBF053E5697614B4D64956DE6A06673625B10688A3E4A7AC66ED17CC956C4B22BDC6EB9C77FBF0C8637AC6B02AC3EF2AE52C9B5FC1A9EAE758A77E7C6E481F7A0E2410A32ADABE39C04E25392DF78192FDECE778C0EB6113DC0443D07D746A1B5B5CA1F6A34C001A7E619F7384B1B95115DB8E7160A6A912C30CC71696DDCC4BD409EDD1459AFFA1DCDD0A6F4BED9F2A4AE2CA91F5E8BAA4A38F339684F9739095539F7AC3E80B8AEBDCA493AC49D6D57D9CDBB4132A55FB5F393DC657592CE35969C9F84E145662D73FA61944170869B85E28E82DCF7D7B0DA41B9ABA452382BFB13A327FDE87593668DCD3844CB74830C40DF93034C599EC5EFAAA08CBA8920C135982DCC5F9D9D6CFA1B4F299E6B0FCD359E6373A527AFBA04610E3ED506AC03AD760E3246B6ADA342260930097426839AD2571C25AD1C0DE873C8FD8E5E97F36F4B7C285DDC877FF0C0307E1E7EB08F3A8BA302AF8FDDFF59004AD2EDB014E48F15C1BDF8FD26BE4BD72C657C9DEE69C238C203BA9444DF6D7DCE5C92B49140AB4CEE09BCF2973C64E5B7D8637882BC11E00FB5ED1029FBD1E2507B2FC92B9645EBB930AEE5ACCFA1869ED5DD6B7BF5FA124AB2A4DC529B23F338DAA21C0D9BB9209277BE520D2C333F136771541E65665A801C7E79F269991E0CBBACD22D8478031BBDD90436A7041E7F64C8EB29CFD5D374489BF01C402D29DEA045527F60128FEE6E38608C6223D81860FA8DA0AEF43DE5D95EE5E887E7DB8FAF259662B19E1E5239FCBB9674461124C2D8BB45A08930AB076DA6022DA667865CD1DC3C8D7666C2DB3B66B139A670924CC026AF2B95EF26F5EA5A44F81C2493953439A36AD5964C71F86964237E7260FC13B56C80B75BC7E1B547A31C22CABF16D21C056DCD28772AD93D332B8A037678F948E566B713DDD972C1B48DF32F4F2EAA4D51626DF32FEA3E42A679279B57B2D02A22D9E5595EBE3E2BFA0B74E936AAEE05813DB2140B0518FA28756D63B1D66A01BDC80C754850EE922341F92476540BFB8B221A1900BB1F1DC0EA30E950DA7A23A0722C6E9D78BC304E1FF1CA0CF484D36A71D88EBC500101A9EFB45E1F054248C6D58303279D5E1366E9CBE1CA5510CC665C7EDE02EC664F712AC5ADC35E1048DDA803377180ACCD13C528D385203653DFE8F7C2866345DA6E3492FDD7B04F07D882032151D95AE5B0B1CB3DC393C951F371CEDB664DC2796329C83CEDAEF5627520FB021C1501058D1111D4980716DB6A410966E273A08AC08ABE28101EF702BC68C7A298C735DE70C84D543BEDE05B12EDD1ACA58F80027F70419157D8F46F1A0F182F3F7443A30C2AF619264C4ED3A96216234D4B5C2DE8C5232785A38797D3DE3A2CD4B01C9EAA2EA07B9966DC33216EE8F4C1D121CFB3EB4779501B1D69A25E45471122FEF84678781EAAE09481E9EF0517BA92D502BC6B78E969A24D8F1037D83A219422FF70F0AE49580224D257C690611506AE1089438AA6AA148FA32BE90E7308595F55CD06A6CAE48CA9B947A592A312EB790989C8B1DE0A7B555B610A1D6EF4B1CAFD663A930E5FE32CFC99D05F0482EC913F7004EA3FA8814A51B14B69D96E3AC595DA953CD7586BAAA59CB445391C50D87479DEFEEFC78A54E5F0425D147A528E5E0BC929EDAFBAE7055A44A3F43C11346172F460903CD5CE4F4057E7160D962B4926E62E5326EBC5BEF6F99582E760A9DE0DFCA185F2FD2235FAD9AC58D3D1F7C4195ACE55E3E13A872FA19943404B68E0AE080811F5A55628C4F8584C3E6DEB2502D0698C9153FB2BC119565064DEF5AF71CCAACAC8E5CF7303A690EA88ED49C1B673416FE2DB4E5A0DDD50DB4F05C4E503A9DB71C2205D1C01F688EBC210A3D4D0949AF09D85CC957E4FBDEB95F323FEE2AAE7DE12D7FF9616246EEB526297FC397C0BBB6BD3487DDC46F3726272870DD38A091829C4C1F89503DA7917E1421BB8C1B118E868920E626A02CCE38C34A39C6018C8587FD375BA122667F9CF65FB03D7BAA0C06E256BF7FBB5BEC2F51409CF36DCB7C87AC339EE3C5ED5412B15930506C80CD193E22D3AADD05DC914B2C4FE1C97C2F2AE32891480B2840F5029CCE621B9BB2D08373B53AE7C1BA9656FD9899AD7259352A056D43FF751E15E1DEA840477A85BF796F5E55B6F443117DFAE11D8FB75790338938062E7EE10E65AF5909197A5EEC77E9103E13F37E25C24BD5F483F0862A87180CBE327F80FA8E4FF0179B39F7F39C0495A697197C400B0233D2A8EC8A65193E72016D90BA085825AFC403669A9853D2588F6AEF937D9BBCA3203BAE51A1C59AFE6CB7F695FB4A9D4E7169A84CA477AB8ED683FAFA399B0475A0FD89CCB9C40E0E68782DE05D3C5D34DD911203E3700EA8902F8B2DDA90B4C1A370E50DC0C094AD6BA9D43C59CB219A26B62C9889008230EEE13C8A48D033D7B35C3CEC575F740D0C7498499BD25ED4FDE0F714642C4892FEB41EDF840A549B760C78FD8E4542D7421F9C047848951C82679C67E91F63971399FD9330947902100CC39F596146A8AE2FD25490342AA61F025D2C6DFCA26698E1D9F457AFA6AD9699F47B74F5B31120E3C9B93D1F06DF7F47842E475C94235A6D0677975250FE8934BE064FBF21294F3C0B7A32F92979DAFA85002B786649F5D11117FF4B89CE92CB300861009FB0266ADF0B5119E061438C9C9CDD40D300CE64006E9E192A03A23CE767B91118DA5AC4E9C0995AF8EBE0BFC462AEFCF141F83F39FD0021120D30DB59142278A83263C23208671277737B248DEE44B764B53B957F89D71BDA39A2DC8FCDF1D4B9680791FEECBAE8EAD5C7C681DBA333C87966A3D88D092E5B47E808658A82A971966B25D6B2B887FA52BA99C20099FE866F1406575E0C2C6ED936A6F4B28350531E44EB707D6D05B0EEB985D26F6C4ABDF971F6767C42239A4EC6FD7C018347CF6A46A3CBAE8E09020E4578A47659FF7CEBF90B308CD9D6CC215121B66F89AF5B61B66828B88F0F6B68F47826D97F13F4C7709018880742906FE79A5D5C529274961D32CFF1D6C45CF99FD79861AFE2A24D3CEEEEF996D36A73C7B8D0F4A21F1651F380CC4C53F2F0BC331EE83FBA3ECFF4E8001F63A38B0F39C84C2A2DE3684780B1366E1F2655F939FE22B687FB3AC998E8DC0C91FFB2AE7881828407D8D2D8DAC7577E73D0A0DE9216D56580C4774E9D729135175BA5810E87E58D93D1E1611B59DBB093BC45B8480D7A8B1A4D2DA40A43E68547ADB17F21C67FFBEB133AB035744A26F8C6AAD13CD8FD09E12A76B15A41834FEB5C297D986C9ECD4C59DD24D2CA55A5F306BB43A915586EB0B78DF75FBEA1A99FEAC4D94ADC8E8C37DD84D2FBC83726D4C0CE43864FA6D5F3BACCE0DE976D8DA83384E7F57C6B26882F0BCB808572E88067229EF05E135043FED5800F9DBDA070072AB8434F31585597BB6733DB457E47D4606774CE9D5A20249406A6DB16FA616B5B895ABAA53135DA4958A2BC2C68A957383B3D463BA169D0981EBB2AA17A80C0F5D88FBC239D3F3F319A8534A774082B5D5FA2EBBD2B3FBA1F7A1296860B28CEC7D1B643E8FD239AFC0E14911C352924068FDD51D7A503DAA8C5ACB98AA8A92671C66CD5BDC432602C07EFBF069EADEA40FE8FF63DD6E722CDEBAB23407A104354EE1F45C85366424D6D25CFB544C40A27B2689C28B2F8AADF4A07C2191F1FB1E79C6A188F5811ED884DB8C0A1176D791790FB8E01842A91F574768E5B94292E5D73E828DABB8ADF907B03DAFA2809B7DC8EAA782381A06361D8231AD19391E4148A633D3F44AE6C161BED86705FA7CD6ACEA1CCF9A10ACBC374B70288700E0CE91FC67FB4CC7897E03E62079419E3122055A012F1D4FA637FA769CA8D9BE3A61DE0AD608938089E4619ECBB4F0337B98194E232CFEB0B042562F01D62BE0A545ABBE9A36C8298F84D01DCE7E84F147C6FB038F8B9A0D632E5994B2637EB3B980F88508329844D0F0BE9E5CE1E232BD64E83ADB27511AAA9E5B6CDC34762C061C634D85FFE8142EB6339ECCFCB0814C27D64E7B44D7912FDEDA6AD72B679C7A92983F7E94ACBE7BD30C24F4B34DADEDD920B45D28B0C245D11EA7247E3D024E96233A647003B77B18D2A837B29D7C912C7DFD0BB23E52E1D6FAAC750499FD9509D65D8F12497CD668394555088A9233A216F70040F79C57D1598E765641777ED5122EDC40EC7EE30026A379F9FCD94B6878D3EEA2FC55123905BEB9BB067F26C2C680F55BB5F3B59814001953225ED47F420DDE6E88DCD9BD1CA23A2EC428FAA77CB7337CE3F0B2851E568EFB3BBE17A7E93978F8A1B839EAA7383F13B887D3EC0672D76B2A589C525B5950324EDD825D8B93458AAF0105C47E48D5ABB09FCC9682A2F5C8E7AC7C909D269C4867069CC9B5E1872441483C046C12ECE182F0A1BC8CB9AFACE7B976DF16B4ED8964BD5C77AC0BF5CE18A7543A65F05CD4BF9A0EAC84E0BBAE57F0E2FC6AA70E8D5BB2A0AEB5753577FBD3A4E4647546F75CA2207CA640058302AE20BB29F9637099C7DFB250AD1F496496B1B13CD74AE1AAEA9FC88791E71AAD1CAC07557A4D016F334A9D9693A6AF82D6170F8F54472B643E113E599AE807DFC505330018F4EA49AF41088CAC4B1644F046B07AD88A59D581A216680EA8D44B43BDD08D73AE6AE22CC5DF123E9EB7F2FAFA6954388D073AAC5E7F75DD813A076DBD49EF7A89D041DBCE4E12AA4797E2EB236E143E7F13B6B596E1142FF404AA8BD8A48055C878712927786A3EF58F65C79C8AB91326C8EDAA9339E4A7BC12E7C9A387D2A2168D22ABFDEA1707A877C0067C4D926A4B976410B7D6C28E94C96D1491A19A6EBDC2B00F670E163CB0E6011B79DD2B6E807D7D0C22C1EB3FCA9417337D027507DC5148B99C83023C80285FD0D4A614B69EFE9414238D4BFCD77044D3F7E2BEAE70F93F279571D1FD7A418BFA621A6B247F60957E6D61E44E064CE22B3E2F459E69B05FDB67ED212D2C9799E1015199BC052053964C40400F14F021488EA6BE4BFCED90B1BB90BC913F6851D5C7034DB5B225261DDBAE52286F50C677CCD89E86D84EE514C0E8017563C156E4EF6B4711A26B956980A0704D9B67416BC945C566CACAFD791D38F4C924B0BA19586D390408B4D46043350638DD987958A796AB1EFCF01A246DCDF36A77CB44CFE656F52D2D3C621570652395C4C59C85BF9B228E049B1C675315963BC06AE977F0365186A34B2A6B3396AE97CC855FA8316EAADBA9B6CA4B3A8DDA18A52754067BACA48D7315E27370B75A6EED859BCEB6EE0951BF0DCD3A6C064C167112C50C41A81B1FE0D1351C8C376AF15C5C5EB4F10B62B71D02466EDE6A216DC8CB015EF14D2C44697BEEE4B8EDC587A2DCDE0FA8982466B00EEF3F61AD4175B0C753C0350C000E2F194A751D7DFE2F3DBECB028C11C530A79BADE35EEDE3BC3A7833F099045295DBCFE08E4DAF483210BF01A3E13EE99E0223199A5F1CB041368E3AA54A0D96396C3626BD3136E2F8527AD39EEC40DBFC8E94EE76EAB736BF1F9E58BF74A3E80229C836AB182C6DCB402147E4491255F5B23E16B51E1F4EB4FF679D92DD2383AE92D07423092FE462262235C97051750C48620C358D33E3097A81ABB08EDBEE1D9D9952799D32EC825AB38EFCEA8444ADF191497A174E205EEC6AA9878433D44B34182CD6FFFC6F167689DBDAA4E71FF63DFDBEFD9173054F78F38C328864FE26DF42C7D1576DAEF52133048D7246B9054BB34A8675D7BAC112DD5E0B703C8D118AB4FB62204D9ECF4FC8DB5D6F78DC313987E7D51A78B1078805BF7A0EA285E5A5F203BE4B57E4FD157A36ACFB5C529A002CD2E955B8F71203F3DA1A8E23C0AD43F6B87C751EE6E2A2EAC0A041050C2BB3247AE2D09C8FEDFAF0BA577DCA6EF1B9896805A4D524E246EF466BF757D0FDE7AE676AA8DEDCA666CB8284638E64D77BCEE6B89C0687DDFF989BE05524F5A320BD70CE630449DAACC19ED853A07EB78A6EEF29701760E027896A1043FC5141D5DE63A51D967477850B0CDA67AE8A5F19E355E635CC32095C90A7D9993897AF705D03743CD899F4FA77A3650B857878FE0BF65FA66A0C09AC5A498DEE9ADD4D735C6A0AAB1622414961ECBD29CCFED7172FDB8E4138090650FAC7E28F0C065F9956F1AE1B6ECCE8E8B515457D4EDFDF5C7176BFBF4E0B3B5263BAB14E3FB13D5B8D23D2DB4FBBA962F3A68B22C489021AE8861D9547A04B4AB65BB7B41B99A804D7EAEF2A0C040DB5CD5CCCA880188EDAB79766B993A813EDD88824F303F54759FD874AD999D70DE37968C8EAD3A2CA9ECDDDFC8333EF702FD6025284DF19B1D81572ABF9CDB440E08A83402BDF291935BE862626F8C3260D161B03968588035FB6EFD561F7D0D0189D1BF9B0AF454FADE91CC559F38BDF514C9DE3B2B1AA5B017FE075F053B83DEDB50E88DCCA765ED0CB56AD68C2AA6C2A1084145AED1E66F2C0F730CED05F5930DED8A4E5020287D63E12E65AFCF23ED5744AE0CFA3E30096A7961CD24590006BFC7C8AEA0587270DFD3E1BDB370CF6CEB95B59857F8A8DFAD80D3D6CE6B490AD127B5E806853CFED23D2D264C8245E9B9F4E19EA377AEB72EE8F12F849BA2748AE6DC8BCAE7665658B6C61ADB82832B3AFA2CD979BA676978FEC91D940D7A368AB89B65A5CA1ED29E8B35ECA183EB9C65C5F48A6ED8FAC08F6302DC1E48C24B4C8F9012E72D8560DB5A3AFE847AC7F5032CA7CE08EFD7B1CDDAD632B742B445B8EAA021F3C8A5383083BF14ADFC4C04AB1DC8F190F4325CB7DE551C4742B988A5E53599CAA5F14A777F8D8530B313C19EC1979989B2B4B4A8536A256398F0FDCA366EB8C6A24A052C8E7A2176BD2BF4CA937D75BB200EE33070E1773BDBD6DE7E9FBB0A445B0AEC87826D0B38834DFB37655AD02B7B32AA378B8845C0C2C950B7ABA2D70221A06F9890EE38B2F3AAAD22F64FC670F6B3036D00C2C8C2B52BC4B91C439CD076E905B4FB478A9D09E733D0DB12CA72F2DFB0E8AF79F15EE79CD375297F96A01DDCBC1D3A0185BF286653199EF7F7A25141B64C92B430FCE7B6DD5E6415739A4083C30E56BD48F15A01B03916E7BFEFA53113D7B95A1D59ABBF258334374B12F2C8D91B34E94B9408C4E280F3F7E60FF6FDA932F19BD0E6666962A797B5BD22C6AD364E1EA4BACBE58FCEE4778C65A3D9258C368E081166E7E2A4DB86A40C4307CFCA56B197F15242ED4D71CCFC7EE9F3BECE72397694BE8BDF662C0FDF3541738BDCA7C20EF2312429F3A0CA9F99FB63CAD7C7D59A09913B1BCAD231C54263A7FC0E412FD717E4BC9D4E0F82E3F3EC457AC844F76D7BE9724B7CB6441FFF6EE79FF8CE9158CB9CA2E31B384C0A0E4717DE9CC6FD0D6C3A7014DED45A61A09C9DEF27F2FB255AFCAF3B920452439D683D259E65833861DA23BE4E7C79E73241427E9A6CD21B5BE283A027C17B57E83C8766A724C34B19658D5DCF3CE6DE72B80950C1E3A9209611D9ABD1D300906ECBD601F513400D7DF75534EF844C1F0BB53D6FC81A95F49366D0855B27693654ECFF0356D4D95F77FBE2CA8E644101C5BA901CA5A0D84425D16E9E42BAB2469E2ED0029548C836EBDDF7CC37CB763F25CECF90875C80B404AADD85664B0CBD499C3C6F843E7C8CF26930D7A91C1C6A6B3F7883FB11CF319E2BFDEA6B32C090C14A729B9F06AAE75232AE1E1BB91AF89E731A36D288C237DCFAD168408211BFA8A0066E9970CB64948131B873A125D511055BF81889BE38884ACE94254296C020EE757BB2AC5F2DA7B5A2415709C42BD50C573B3619A71EE1CDE65EA2373F41FA6197853BAA1264A63E4052E76CE17E8692BF28FB5B9A07475689F4C6007B60865056F5723EF02AE9E294F7D9443784DC67D80F8816569EC7804DD5202D9E95B2EFDC9715FC0C47A2843F08C6923DF32F05186E387BE86FF9C82DE1F11B0ABC53FF44F967906EE06B806CF3D74DD825424AB62B15306D46F76C9D4DCE1A56878982B4C75D449B8E9627F2B80EF498ABFFF8AFA664EFA713920DF1FB0321225139E57A449900D80DAF3784FD4DB53802D3E15DC57AA02299DBA1354F42A08B74F5917E297A4412FF2092072D5AB9D5ECC5FF2711C36CE699B2D078F7CB98BB0EBC1FF7AC371E888FDE6EA4D8A8F54F21CB5889537969B198BAD466A9DB2B2397D6F8714AB229A5A776A74354B80DF0CD81472C730F6785526E5EE152B7DEA4A34B1D01A074046F91B2D1ECD2165CD0ACE3991883FEB0887F632EDC634842FF97F29019AB0C40598CE78AB03D8AB33C018E447F2EB610B48A84924D45280C596FE244DF764325A0934F9BAC73F04AE4BFF2DAD503D3C0D1D1EB8F167A030464DB21505B35D3C5CE5893DBEF2A74309A49AD8D525D27559C1172FD8AB41F26903B36C142AFFFBEEC2D0C8C6FF7E1A76DBAF4DCDC85B207B3CBB439B2D63B0A497D4BA3F3A2EDEA49FEA12540AAF5A42FCB9FDFCF325A1A892F1D86FBB5FC05E20232E2BC4DB3BACD0A92EDD48CC708D61009E7466B4B0723212AD49566FE83F29B333E6802E7E217D512B4AF7C35FC5804A0DBAC04CF86C73BCF8B12EF25561C0EEB494988A0C33827DF61588667A6FB3E7C80C612D7EDCBBC773), (0xF38AFBC989080FCA2DF63EDA384356E2E30C4189FE462949FF9370D7D9D01648FDB5896B19BFDC725FE8BAD2CD87F43A86D8E46682ABCEAD60B2CAF69837F15CDFF5DD83BAEAC9242FCF29168C577B789E355100ECAFC651E6DC0A67F4E6DA28F65EF3D7AA71809C0FC037B281B8200936515862E6F16F2F2F8B9DDEDF612F49F5011F2E64A3CE2CB5B5F12B7813D02DBB0130A28D784105EEC3A81ED4A1BCAD91EEBD7F99F2A592832BAC31FF44B61BBB6F22DD308CBB7DC01A3FA0FBAF5813F8439A8A565094C85B9E1F61CB0F05A90C8C63647FDE7C043240BF7FB30497D3D39939), ('fe509851-b5f5-4080-89ac-17c03e8167ab'), ('2480-06-13 08:55:49.326'), ('2004-09-02 23:50:00'), ('11/19/2008 1:26:51 PMThe quick brown fox jumps over the lazy dog0123456789,.;:?[]{}()-+*\%^=~!@#_|/0011/19/2008 1:26:51 PMThe quick brown fox jumps over the lazy dog0123456789,.;:?[]{}()-+*\%^=~!@#_|/01'))"; + break; + + case 8: + $query = "INSERT INTO [$tableName] ([c1_int], [c2_tinyint], [c3_smallint], [c4_bigint], [c5_bit], [c6_float], [c7_real], [c8_decimal], [c9_numeric], [c10_money], [c11_smallmoney], [c12_char], [c13_varchar], [c14_varchar_max], [c15_nchar], [c16_nvarchar], [c17_nvarchar_max], [c18_text], [c19_ntext], [c20_binary], [c21_varbinary], [c22_varbinary_max], [c23_image], [c24_uniqueidentifier], [c25_datetime], [c26_smalldatetime], [c28_xml]) VALUES ((928353811), (255), (null), (-1475161617), (1), (1), (0), (0.2465), (0.5450), (0.0351), (214748.3647), ('åüäããvzr~ã©U©ÃßäbBÃ~zh¢CßÜ@©£ßöO/ð~A@v<,Öý+u¢ª~zÃ~ö/|Ãßà ÖAbÖ£|Ãœ'), ('ÖoÃœ ߢZã Ãœ.>rrröbä@ªÃBäÄÜU.£C/ªzhßãoüUhßvî<öðUãã_Ä>ð+Ã¥C£Zb||r£ÄîOB+,+býßÄÄ ߢðß@,~B.ð©ðUÃräåÃ~ª¢O~Ößå/<>ÃÃr©|zA+Zbo¢|zü>oCÃOOBChBÄ¢Aoü£üB~©Uª£.ýbä¢v©ÖÃz £|b~äÃýrz,r@ü¢ÃAî/ a©<<ÄC£Ö.îzÃ¥ußvA©,©ãÃOzzUr:BuÃ¥uÖ .Z£oB*:uð~za@ýÄĪb¢u~¢ã+oU@£_@@©__ß>¢ä~bu¢Ö~aZÄrÃ,¢ãª_Öß:Zýãßß©.b¢<ürubÃ<~aüåU*Ã¥@zîoîÃbaßaA äÃu,ö*@,ßÃa@zî*a_ÜðuðCz@î>>,_:OOOÖäÖ*ªa@Äübßz,äa b:ABß,Ö.Ä>:ãhã*|ß*_Aª©ðÖ,>üb@r>£>b>aoB**C £B|Ã~hÃuß*ßÖbCA:,Ãbý.~z~Ö_<ßÖuÃ¥>züv<ãäÖ/+.bA<ý,u>åÄÜß/ª*hä,_Z@Ö|:z/Bä|ª@ö£ªa_vCÃœoUzä@CÃå*ð*ý:rhã©<~o_Z+övOßOߪßäê,buÃ¥b*¢|Ãðr¢bÖ>Ö bÃöuäå+~ Z>bÖCýßÄ,rð.h|¢:.U :£örußa<, :_¢aUðhvðÄCÄ+hrÃO @ß >@.,öâ<*bîvAÃÜã¢Ävb_bÖZ¢B*CUªhO+baAr¢zr>ß|¢r/ ,.ã|¢vÃÃœ.ÖhÜã,@UÃðÃîüÃÖ£a,b|Ö>hbOÖöÃ,b@ð¢Zªvbã:ßý_ãÃ:@+£©r_uOoAî¢b~B/ããÃ.ßZ©h<~oöv~r©/¢©+ZaO>ZÃ:vâýv++oÃhZ£uÃ@rª,Zð~ßur/îÄhß©OCBã./ã~î|Ã¥/>_hü/ÃÜß|Caßä/<.|*©U Aüo|,ZB*A<Äbo Ãb< ©UÃvA:aOÖ+:UÃO,üäbv@¢Uz/oöß@hAaÃzr~£<ßîrvªbouÃ,.Ä~©AÄ*Äð@ªÖ>bobvAror:_,ß_*_z @OÄu©ß|Ãœ| ß>ÖäßöBª +Ä£rÃœb£_U©<+ß.ªa/bv, <><ä*Äé~ä:ÃröªäüðoAZ BböýBoä,îßuaÃ¥uO /*üä©ßA£ª<ýo:CC*Ao..î+ª_ßOü£>rb,©¢>ßb/£Zbz+¢oÄðÜÄäüÄßÜ.bÃ/A<ã,o..ª<ã¢Zzª@C*ªýý+Cvrð¢U*~îr.B¢,o:©oüu|uBh.|*rÃ.ßbÃbðu¢:@oba~¢rr©u*©Ã:AÜßîob>bîoÃ¥<,**|:ðßr¢ßo_¢:öuîCãAÃ+bövAb~ö:vîhCUääBÃœ.ã<ßu¢vvÃCZoÃœzäÖaz,z/äUvo_U.@uB+ß*.rU_ß aÖ+:£z<ªv+u_:ß |~u£©+ãÖ:>*ßß.C|UãvÜ©ÄA@~rrð_O+ä_zvOÖr£bUAÃ~@ÖOßÜ¢Ãö¢B,BãhUߢ¢ýÖv+:ý:bîZOu_£a/aãA+hî>.U:ðo*ªüã.ªAö oZr*ÄÃ,Ãœ._ÃB,h.ÃœUUÄovãv~Zoüß/£ª.|uZªhhaBßÜOA¢BCÄãå,hh/BoOÃbU<£+BßCî¢>Ã¥*Uª <£UürAvCÜÜuZ/ßO/ü.öã CßöãüubOÃœ@h@ßü/ðu_aü+åªä>ÃC:bîözÃœa*ãZCUßröýUbÖ¢ãÃ@ÖäöåüUrb vB¢Cä|ãÖߪª¢BzOÃœ/Ã¥*ßÖbZÄ_oB*Ã¥AC£u၎~ßhÃuýßuhî£|ÖB_*ãZ|rßð|Ã<<äÖ<ö,z Ãœ'), ('uÜî£v:rÃhbÖO> uZîðªOÃßöÜ*ðOöåbUÄoÖ~ðUh~v>öª+Uª¢bbð©Ã£ªü/Ãßî/Ö¢¢ÄvÃä+*Ã+,,ª/*¢©,Äðr_,r.åîÜhu/Uh@äzîC@ÖvÃ*|vzAo¢ßA.O@_bU>ããöªr<ðoUB|AÃ_åü©äßîð£ß~©~OêÄA/ßã£Ãuzbßh_uÖ£BCð~_.Ußuãz>©|~ãUÄ<Ü¢BZÃ¥_>OßýÖ+/bð~Z@zð/zaÃ¥_Ãbî~£ObAb*Ãœh@<ÜßÜ++Ãr|aa<_@ÃCßhß~ðo*ã,:.BªC¢U+Öb@C£ð£h hbÃ¥CB© ðUuö|ªz/ü,îü£ª:,ÖBß11/19/2008 1:26:51 PMThe quick brown fox jumps over the lazy dog0123456789,.;:?[]{}()-+*\%^=~!@#_|/0011/19/2008 1:26:51 PMThe quick brown fox jumps over the lazy dog0123456789,.;:?[]{}()-+*\%^=~!@#_|/01'))"; + break; + + case 9: + $query = "INSERT INTO [$tableName] ([c1_int], [c2_tinyint], [c3_smallint], [c4_bigint], [c5_bit], [c6_float], [c7_real], [c8_decimal], [c9_numeric], [c10_money], [c11_smallmoney], [c12_char], [c13_varchar], [c14_varchar_max], [c15_nchar], [c16_nvarchar], [c17_nvarchar_max], [c18_text], [c19_ntext], [c20_binary], [c21_varbinary], [c22_varbinary_max], [c23_image], [c24_uniqueidentifier], [c25_datetime], [c26_smalldatetime], [c28_xml]) VALUES ((2147483647), (60), (13342), (1746584310), (1), (0), (0), (null), (0.7945), (null), (0), (',hã_aü:Ö.ð/ýåÄ<,Bý~Öä*C~ê<|@Ã¥b£~îü|Ähär*ZA+/o. z£Ã.~.ßO~UCåÃvbZr ¢rß@Ö*_ß O©Ã©ö@ãU@ßÜ|ãu_Ößð|Uz,ýU,ßã©ýî,åÜb¢>î|o+ãa|'), (null), ('ßývÖü/ü|AÜÃ/vC©Ov¢.åÜÖ~bäuÖO,zã>ߢAä.uðüîrbäß:ZAéÖöb_üA,uîéßOÃöO¢£BßÜbÃ:ü~ÄÃu,öÃ>Ã|Ã¥.v£a:OzrZCAzî¢ß£öäîÃv¢|,z©a@ßðZ/ObÃœ+ýB+~Ã>oä_,ß~~ZÜ¢ßä¢ÜÃvÃÜOß,*ã~hãã:©ä>züÜ:Äãðã.ð>o£¢ /ý©Ä.~,öBßaüvüÃC¢ðh>åäzý.ÜöÜäårOüß.äÜö/îðA©©Ãå£ä©ßåu>C/~©ÃZ££¢br~ßý:|Ã¥*©>U~äO£Z@CbBbýýÃä+ãOB£ßUZö>>.:>Ã¥u>.öü.*ÃÖ©ßÃä@~B¢Z_,ßÄZz._.h¢A/,äåu_h©bz@ZoAüÄÄ£î,Ã¥CîCb>rB_.ýubÄu.åýZbüöuUä_|v*ÃßÜuuoz<ÖßÄ AC£ Zr:ß_ãÃ+ã/ðå©U@ööÖä~uaã|îðCO|Ãðã~ð| C:ßãB,+Ãœu/ß>ZÃœ+vvbCZ+îå¢Ä_ßC@Bzérß>üa>ߢb B¢aÖä>Üð,uªößåðu,ÃœO+bßßã<* ü@£££o©Að|<.¢*o/ä*ð@*¢bv@,A:ZãOZ@oß,Ö~öÜCäý©î+_aÃ¥*ö>_ßý*:+CvCrÃB,rî:|ÖÃZ,o,<¢,*oãa|öåÃÃÃO:ö+:éîCîvÄÄbAü/B£ßrÃ:rZBßzãÃ<<*ÃC£ÃÖ|.vu~*v©Öå*C£©Ub¢Ã/aßAuvbO@ã+£Üuh~o a|UUz|ä@.b>Ã¥O£>Ãa+_bÃ¥Zß/ßã, +vüb@ðAbz ãob,*ððÖüoãA.bO©*¢UÄÃÄa*v< >ãü/ßÄ>aAÄãußð:bîÄZ¢ZÖ_£Cv~ªCoÃCåª.ðaÄA ðboü@./ßZ©B£üãbÖZ z@CîååaÄ*O>_br©üÄuª~hÄßßz:bbhA|©¢©,>uaOvüßbUZêîüahßoÃOªÃzª.ãö| ¢ãð+ßoÃÄA ¢ £|@~ähBhÃ¥Ã@ð>Üßð,Ö/auÖ¢:ßUBßZ/ßßbäühßa|Ãä//Ã¥zýåa*ßzvî¢BåöbÖªbZä:öÄä¢ß©C,OÖhßzÖhß+b::C@î:ÖbOÖvü£~~üöªhUr©ÃðBo+CuC|u*ß@ÃCåÜÜr/Ãý/>ýã Ä©ÖO¢@ßÃ*:O ßäbîbu,,UCbb¢hýb.:U>_Ãœ>/ßAÄZÄöÜ.~:,|Ãb*vª:Bª~Ã|>_Ö îuÃÜa*¢Bb@C©Z*©*rz*Ãœu.zå£îåb:¢ªªbðCübÖvýÃ:BBCÖ/©î.ðb£Ab+,:ßåC>äÖbb/|:@Z:A+bÃœzrÖå£>ßOüOÃ|~aßîU_Ãbª©,ðAýüåÜZ>öör|,ðÃOb*ä<@@ªC.îÄ>ÃUrÄ/ UÖ/*O<_ß>.~Ī©Öå_bUaöÖÜö/AaäÖoö¢r.r/£hrî@hbbZa~ACh¢ããªüCðuh><Ãœ,ruÃ¥@OßÄé//üÖª@Bߪ:b@.ýÄ/ÖÃãß.>._ßîuý>Ch.O|Äb>aÜ©hBîÃ.ßã.oÃ¥ÃbåðvðA/öÄzCZ> £ ãZ¢öÃöoÃz~ÃhAbßãª+b_vzÃœbbbb+aß.,Ö:ýC@öahÄuö* zð£hr£Ãß_£+ý<ªAª+A>ªv:ý.ð|b婪>BÃ¥rðv:výCAz.Oª£zaOªå+Z,ZZ+br¢|ßhðhvCZÃÖoCA+|öbßßvUbÄbÃhß<ð¢î+b*_uOBbrý:¢*bäÜAÃß*Ö|Ö<ÃuÃzªüß, ChübhBZAåðÃv_ÃâB<|©ßÜroÖßðh*/h|OAZAAÃ¥|Ou£öÄäöã,ãCuÃ¥@A+vĪÃUä~~ªO,Ö:~auýé*vßo_*©@ZUrvbh£a /rz £b @:O,ßãîUhä©C:_b ~ Z*.î*¢ß|ÃÜß/ Ãr<¢bovÃ: üCr:_|ß,äÄa+ÄðªC|~uoh:Ä@üîüîüOz~ãa/ßhoUýî,ðÄz <_aüªÃ@zr@.©<¢ªå.Ã,.@Ã>ßü,*uvÃ@ýr£/.Ã¥a|¢b_ßð,:ê,aüu îßÜbrýu Zb:ý.<ãrOý.CÖ*ýå|/>ÃÃßUÃœZ©zã£+ÃA*zÃœ>*öýýä.uA|C|_ßî>Ãœ<@ª:ßÃÃÃoý|ßz+Ãœ:|>_¢:@ã ªuuOCÖaÖåð|ãÃzéUUßäã,ÄO Bý *äzö©Zä~<>ª.üßö+ßðÖUßå+rÃýAãAÜÃ,aªªo.:COã.Ã¥A: *. Ã@<>CUÃߣb/©~¢Z/ðÜrÖ*ÜÃâ|ZB/Öo©/ÃAoî@>*<ªßAÖbbܪª@|o£ýüãÜä|üª+îðÖuåªC@.ZäZÃü©ö|>@>ãuª@ÜÄb h£ð,Ã¥UðBýãOoA|öÄ *aÖC u.u:ßýbCÜöÃÃ_Ä/Ã¥vîUCÃœ+Ã¥AÃ¥*b¢,OBäUZ.î|uý~|©ãÃ~ß*a¢Ã~ZÖ£ß,bOãã¢rÃ¥boaÃ/ÃœÃbÃu*ð,î¢~oý|ªbÄðA.A@¢Ã£bbzÜÜ@~BîUå©ãb.Ä.>:ª©äb~ß*Uüz.UC*BhZ¢ªCCýbb Ã.åä¢ÃªAoBýuüÄü.Z¢ß>ýÜ ÃðCBß+*ªªÜÖä,:+ ªßuöUCîzî£Äß+v~ öbhö>ªß£ß>+:uä~üîZOÃÖßb¢aßOo©@u O.îzz/ãaý|CÖÃ:BbbÃîBBî~Ca@ðÃ.£ýzvbvßöv£<:oÃOÄzî_ÄhBðªCUZãÜzß>h~*~ß<©rzBßB/£ðr,.ê+ýZ_bÃhßüüoüãüz|*ªåãu*.AZßO< B/+ªOhhzß>h Ã¥u ðãv: *ãÜ@ä,A|vvU>©<ä@ß*©ãOv|CÖ>*CbB:|ÃhüU£ãÃßC|A_v£©,+ßC<ªªobZ©Ü+bî>OßÃÖ_>ªäü¢äêuAäCãöÖvüüüCýîüüb+ÃrbäÃ|Ã¥håÖöoäÃÃ¥_ãvߣ@BouuãÄ¢_ª£îîUh@_+ZZUÄbazßCUU/bÄo.ä£bã£îäU~vBbvª~+a<ü_.ßaoî.Ä:,C|öÃ<,<:ÄÃ,.ýhßîv_@£å/~êaA¢îðUO,ä:ÄozÃœrCîzÃ~h.©rU£ärß@Ãüuh:*ã|Ãœ>rah©CÃüÖz_ühãh<~+/£v+ý~ ÃœÃöozãv @U,CZaB>ÃBÃ¥v_|hb©åý.î>Cr/ßå,ßß:/ãä/ahr©rärß©BZC_:>îÖª£Ü~Ã*Cᛚ/.zuu,ßh*Ãœ/Bo/¢_~ÃœbbüZB©bÃÖÃßvª*ÃZ_ý.ÃÃüväÃA+Bbu|Öå î,Ã¥:..ª>.äv/ãÃî ã~bîbbÃœCªbZü©_Ob+Z/z,B~ýBu|,~vO©rÄ+ý©ýZߪÜä C¢ãäÃub|UªöÖaBßã@+@ îªÖüor,,ýªÃ¢uUä:,ÃÄ+r¢.ªÜ¢ü~O:zuU_/>åäÃ>ß©|£îz@Öu*/ã©ohvroO_ußu_z<,Ãß*~@ýu__bÜÃ:Bu+ßa<|B,ozÄÃovA:a /ðãöäÜðã/ªªr.<Ä/a/,_ãîZZ¢bäããö@bb:v_Uv>Ab£C<ßüîUüÄv~b<>@¢|zßîBý>B@oürOOÃö*:Oßß>©h¢åC©ðA|öÖîÃöÃhü£ª,ZßöAÃœ_@£ÄAzÄãb£©Zuåßo<ªa:v<ßUu<_O.uÃ¥r~B~hZ _¢Ab£zaãÖÜßußrð|>bÃ,<_Ãœ_.ãÖ<ÄhZÃåob,/rã>U,ÃÃœ,O.Ãva~@.åãýä>£ß_@h¢><ÃÃ>oðvîýÖðä¢ßvÃbÄO*ªª<ÃbA©h+îCbÃhÃœZoa©,>Boðª@OUzÃ:Ãœz+bîÃruåßaCb£äC:|C_ã/ߣ: Ö+bÃ¥~üßß~>übZÃ.Ãuzo.Ã>@~:Cb©A+r<ªzCÖ/h,ªUUr*_+Z,hhr>zoABã©_Ã¥OÃa|ÄåîüÄðÃC:abbîzÃœ<Ã¥C~îåbö©/ ¢u~Ã¥Aª<îvÃÖz*ýäbAZCýO_îbabBCâöu@,z<_~ý/|ýAbÄ~Ö~Aßb£|/hb >äü@+u¢Ü_ÜüÃ,@:z©.r>ã+/z@bä~z£bUuobÄaðrÃœ.vOßÜå£z~ îAö~îðßo,äÜb>C£:ä__/ößzýÃÜî__ÃœCAv©Oäbî|>,ÃÄÖ|öÖvv .>Ãbå£h/ÃävÃr+©öu@+Oª.ébåãBÄ:zbUu*¢zOÃœ@êOÃU©>*B¢ÃUîBÄýÖbAaßAÃv_r>üab¢AÃã:aUb/,+>aBÃboo@+äUoÃœÃÃäîhbO_ AýÃ>b¢ÄÖ⢢za£_uaC£UO+,B+Z¢©ãÖba:£ãã<ÖZÜ£/@äba©ðbzîãO+ä¢+U.,:Uo> +zãv£ÃUᄦÃã@b+¢Ã¢@ärßbÃœrîð_O:ßý+©ßArüuO>z£/¢bzh_ß©,.o<ÖªUbÃBß~©üäß+üÖ.£.öAð.¢|:ªßý,Ãœ.|urA/üîCð:©ßU<ðvbªß ðÜå.<Ã~OCCr<>uão/~B.Ãzv*_ä,Äb>+ZUZb/@AðßßüßÖUUã©..vÜÜ©U>CÖ*v£b*Ãåo~BO>~ÃzªA/î:Ar,üÖ@CÃœ~Ãœ~CO¢ÜOý*>,| £Ö<îã|:O¢ß~©Äoä© ã~B~ß>b öðCª©ð@îÃ_£>ã©| .hÃœ@>ðª zA©ß:ÃßU,~î¢*|üäbÃœaªrOßCCCz©hbÜöÃ,|îZ@îª._ß B+ãC b*B£îu£ÄÄ£ÃaÃ¥hZß,ª© îßÄ<>+ßÃ+¢_üüüÃðÃBßü£ÃÃðü.>~rUbßývBðãUß~A£rb:.brA*BßäÖ@üÖB+öß:zC|ÃýÄåÖb:Zröý>¢<_+z_äovðUÃCOÖääß|*b>Ä/ Zv£>£ß@ÖZ/u¢bCAZz£îBrîÄ+|ÃðbbU.äbýäÃ_>©ã:__ZÃC@u_hBÃÖ ðä,£.|©:ÃAA+~bUZÖßýb££+.£/OÄ@ðh©BÃba*Ã¥bBoaä>U+_:üv,ZÖév<üaý,üðÖî+väýUöäÖåî¢ßåovîÄÖU@ãî.bß_+Ã¥BÄrbB~Ã¥BÃ<à _@åßb<ªßÃb©uÃUb:äßOÄ|ü©oÃ_ÃZvouUAðüzaªýzð|habý,ä@.UÃ¥ZAÖ|äÃC@ßz_|ä/OÖvÖ/vᄚaã£BÄhßÜäð öýo.:Z<<@ªA~oªß¢ªÜýýB.UÖÃr¢.+ý_ã@<î@uaåöU_Ö,©U£bC_b ö¢hªaÃ<ßuÃœbbÃœ>Ãh>ãÖ@ßÄZö/rrA>ÃrßB¢zÃ¥*z><_bÄ<<©ªO|>~vÃœ|@U*roß_/z@~UýhOßßO*ZýÖýß:ܪAb*vhÃÖ<£@zb>uAÄ©¢<ÃZvrZOðÄ~a£oãÃour+Ä.v~ *î/,ðð.b~/ÖÃ~UäbBrüO<ý+:+*aß*öruCöîzãßaßOðbÃBü|ý z¢uZ.ä+_ýa~ð~ãu@¢¢ |rzrOý_ð£*.Ãœa>AzýðÃB_ÜäÜ/åªr/>|*ð©ÜB aC.z:墪ßîbà Uªð_ßÜ*@Ãœz,*Bvü/,äýÖßUßAüüÖã@ü|*Ö*vÜ£ÜÄåC*h åä+åߣ:<ÖOOÃaUßCh+£©,OÃÖarÜ¢oB¢:B.ð*¢CýA,O:oÃœzÃüAa£Ã|vðÃ:_¢hoªrC.<ã:ßvî*ýö¢u|_ý¢ :ãu£@>u>rÃ¥b<ãäÜý*ÃZ:uhÃœCzâ£Ãoî|aßÃÖý<åý¢üª+ßähbãUußÃOB bB Üä~ßbý@¢üOªC>>Ã¥~aBuîßUÃœ:<©ÃÖh>o~uO@Äß©ßäéßr>Ãœho:r a@ß+~*@@ zÃ>:AAÃ¥züOÖ z+rh.|öÄ_~zöOhb,ßö*zo:|üO+o<åßOv/ýÄhªuoÃœ|ßßÄ._Zåü<>Aã/OãßUüA,<ßÃ,A@r/ðÜ~Ãœ|Ö*©ã_¢BZ>,zo/ýßä +vC+býbz,Ab/bÃîUv©ãoüÃ*öCü..Uª@,~~. £OÃ+ª_o~aã:Ä,îozüÃ+©îOvB|©bÃœ@Ãä:Z~ªBý<|/_ÖöZ@Äa /r.Ã¥uÃ.<ð~ßö<+bzüý.ßzb >Cðhouü|ã©Ã*zZýU_oCo,©¢üoã _zOA*åîÖZªvvüaüZÃAÃœaüÃä£rððã>üý<~£A_<Ãa.,uüöîär+Ä*uhî¢*ß/_ã.übvzªßà ý.ßba*¢ÃÜðÃ*Ã_hhÖä|öZUCöä~/ ü£ CoÃ¥,Z|oC|ýªa@ß>Ã/ðh|ÖUÃAÃzäO/îzÃœh~¢Oãhã~~Ãýü©u~o+Ã¥a,ßB~Ã¥/ã£ýÃü©©ÃãåöozäzB|ýaUÃœ+@ÄÄß_îîöbaÖÃý<ãåªb vã*£ýbAÄzvC|¢£@ObÄÜ@OªÃö/CB@ ~Ã¥:ö|>ü>Ä~rUãCU*£:bUüî,ÃZýîAß~üuB¢£/z@o~ ßUî/äî'), (N'|hÃœ>hZãªböÃoÃœA@üor<ßbhZ:îo©ÄU/ã+ßð.OÃöoý©BZÜÜÜäãoU/îU Ãý_¢ÜUC,übAbBåã@ bOOߣ>A,@äýîäßU|.|/+ðªä*äãh b~©o<ªß b@b<>UU,h>BvÃœ>© .h,: ßöß+ÄzöOß.Uüî<î<öäÃ*oÃAãbbAªðu rãbÃœAZÃ¥zÃ¥|©_h>zb@vh£ýrª£rZ*výßÃöß/£ªrð'), (null), (N'vOö__ªU*buåðßÖî_.ªu|.ß rü|:¢Ã_ßüÖö¢z~rÃ¥~uÃBÄvZãåCbßöCzÃ@:Z~ýoªª@.îOÃ¥C~üuÄ£*ÃâöÃÄ|>ÃÄäã/uCäZ¢î.ªh|z*CüÜ@Bªu<übÜã*Ã¥vªCðß_bãaéªßuÃ_o ª~Ößü~C£+rÖÖZ+zÖß/a.Uu>¢@Öz>ßh ÄîÄv>©ÄÃÃ¥O.U*.|zr:AOoBuCU©Ä>r.hý+Ã¥bã|BßBBÄhuãýorö/BbÜüOªÃªAßör_:b.Ã¥:+ÃÖC£ðB:üývv@>|Özbu.Ã/oübýhÃ¥O©O.CÃãuÃý,ääâà Öz/£Ühür:Üð|ÃœA©ßrZZßäoß©*b Ã+_üß<£ ©ÃU,@ru£ðð£ðüÃb©:*ä<ª>ÃœZÃßZãðßBBCÄýBüåÖª£>îÃÃo+üzÃ¥><ªOÄOîöÄÄð+ÄCß|ßvÃüÃ~~vßB~b~_: _bZ¢<öýßOaObÃvᚌh+Cu Oðå**ª~ä+ovªã©ßOBävðßÃ,_||zßh:O*Brä+ÖC~,uz£aÃœb.CüÃb>ãz_>@*ÜßzÃœÃîýð>£ß:/üvåÃhOã,.©>Ü©*ã,*ßb/|Ãaä|ÃœZ@ZbUü¢b /Ãý<ªAª:ßUîz+îð*î B .@oªåÃßbhü>UuÃ/ãßßîv:ÃœO+ooÖÃ+zuªuOîî|+ªðu|zßébÃð@< aðAýzÜßAov@ªZÖ~+B¢~üvCu>+:ob .Av£@/îðO©,o~ãä>zöA*,zð@båÃ@¢ã¢ÜÄÃuUüÜzÃ/ðörß©.~£åoraüaÄ h/|r._ßÜ+äö.ª@@£*î<*ÃÃ.:CåÖÃ/ÖÃÃ@ðã*Ö~abß©uZ £/£Ür:hZo.BhÃ,b<>:bÄ+Zäu<+@uU:öÜ©@Ü£u <ÄAaUî|vßröªzrO|ö*|.zßöîbÄ< :Oª.UOý*Ã+bü©r| Z¢hêC|.bßA©Ühü@/Uߢ~@*hußä~Z~ÖCU¢¢/|ÃÄ*ªr :hz||,__.+öÖÖZa>ÃœUüh>Að/o>_öÃ@vÃœ_£/Oå©.ÄAÖh,£ðÜÃvÃäãýßhZßA>ª_h:Ã¥>_ªýa êC©h£ßÖv*ªîAaZýhÖObu©ÖÃ|@_ ¢b/©~©Üv<*r/©¢Uoý£B/~>,ãßðBAã,CªB:Cuîðz+ua@ß_Ã.~/ªÃî/BÃh©~ä©~Ã.Buª r@avb Ãr~ý~Zb>>ªU£rOaÃý_zb£Ü>~.~ö.ub. ©~ÃåohbZÃœobhO/A.z<@:öý©öÄý|a*©Z/Oîý¢>h|äÄ*.ü__CÖ|ö,©îÃoO|böCä¢üv:,ðoî©ýöÄOu+|ª:ß__Ã¥U@zÃÖý,Z,bo¢B,o@h¢öãîö:üÄ@ܪüªo|zÖÄÃh©OO@+ªå__hý.bzOªÄýZb*aUrÃœzÜîªz ©.+<:Öz@*|/O+ÃœrîzýüªÜ/£ß©öüÃbßüöuß ýÃãÃã,:ö>îßä.~.<ð¢Ä|uÃœ~ß>ß~:_ª>ö_:rr:UCuz>hîãb_h£ bz@vBuCAubßý,î.äzü,uA©@>Uâ©ö/U/ßu_r/Z+ýb.Ab. BU>ýÖ~Ö.Z+ÃœAa*ª/BÜß+OO*r/Aª,hª£:bð£,OüéÃ,ðO..va,¢ UvboîåZ|Ãü*ZÃà öBÄuvhBh©ÜvOßaÖªa>Z,OAÃœÃ>î.öà Cu:b:OZO+rhC++£Ä<_ý+ Ãœ, oð ýÄ*Äo:*£AÃÃ_|zãCBUb£,bß.äüzý*ãCð_ãZ:A<ý©AâýÖý.b>£zbbvöðîöäOh*zrªßaÃa+B¢U,¢£:ᜄ_U>Ã_bãZî+_bªß_Ã/.+üý©bC|©ßãZ:BZý¢å㢣|üÃã£ãaa/äðuA/Ãåår,Cäuo¢ªð:ߢO£ãßÜßavã.Z_£+ßÄb.£ªCÖÃ:>Ãœ ßBUÄ+u,vub.vªÃªAßC~uã ð@>ßO>.ü,zý>rOªÃîzvBª¢©oAð>Ãî î|>:OÄu|AåävÃBZCAv>B.uý+:bBzªb£BÜý£_/O©_@Zu©ýððýZvhAoðãh|uüßä£OäAßzîbßbä~ö~ha ,@oCA ðªöãh@ýrräÃåB*¢o¢Að.,Ö*ÖröZU/uZOv,©*¢Ãö©©<@¢|@|bÃZUhö*hb>î@z,ßr>ðÄåßäÖa/ÜãÃîUÃr©,r>oühUîU¢ãÃr£vävaÃä¢Ürüvß+BªußÜÄãðOzb_Ãœ:ü_uîZuC~å£uA bªa@Ã¥hÃœhzAãba*Ãb|r<î,£UübüªU@Ã~|Ö+ßzOÃœO.a ©@,ãvä,>z/ÖCö,+A:ð__ª~/v £_/îÜAbîbýÄ|uÃÃäA.hߢ/.ðozUä:Ãbbh@¢ üª_,©uÃ¥,©:UußÃ~OZ/ÃrC@Ö<Ãœr/ î£/Ãb.Ã¥.äÖo.|AvÃbAbÃœoîÜÄß/r:äb¢:Ãœ|ä©ýýªU/@ÃœBrᜄ C+.|££|a,îå<©O,¢Z*ãCUÃœov+>¢bB*ãz<£.Cßääh_O.Ãüã:Ob@AzÄbBß hroa>îAb~ýAÃœZß.<Ã|b*.Z@b/ý~z_ª._~ÜéÄCbZ+©,ä/.ßÄ¢ßa>b:îä©B~@ Ä@ü~>r@CÃÃœ~@ÜýÃ婪AOäÃÄ~î¢ b¢öhªzoÃ¥,ý:h~>¢ßÄ,ruouÃß/ü/ÄAAÃœzÄv.ÖÃÄzü£ÜÖöÖ>B*,zZßz.Oßåhãä:ã*uh/ BäbaBu|,:ÃœböäBzÃÖüaZBªä~a©Brð.êbÃœU@UZÃbãß*BBÖÜÖhCªUCoUvÃ¥*bßß<<î_Ãœ@ÖZzö: Zb£äÃî*¢CaOÄöuUýÃ@Ãœ £v|üý_bUÃOðaýüüÄã.r/ÄO©:zrª_ZÃœ|ßohÃA<©äoãBåöBoÄýv_hz *¢:~C©ßö_üü¢CäãZðUO|AªªZÃ+o<ªvÖ¢U<ß@u:+abrZhðzüZåà ZüÖZÃaoãÃ@z vr ,£bzb<äo<ãz:+/,ä~îö:©>Ob@bª¢<Öåað~ðzU|£ã/ßv:/_ß, ©Ä. Ö£å:üßýäUÃÃöZ_Ãœ@BªAvBAÃ¥uãüvuZßA:ÃOöAãvÜ£ýOB@>haaÃ¥UbÃhUÄÖ£à ããöåÄ>ª*ãZî Cã v/buß~*,îB:,ãZ<Ã:vZrÃœz/..£@¢£CÃßðý Ö .z:C¢.aý/@>a~/bã¢|üý©ßObÃÃß,©:ãöÄ+AößbhÃ¥/.üCaªb©ªüz/+Ü£¢C+,墢 ý©|zu,ha_/b|UãbbCÃCÜÄo.|ðÄ.ß/ÃUvßBý:/Zßv<öÖýzu.ÃœbzvO>ãªãUa,@ýz|äOßÖo㪢ãåãzÖ..UÃz¢Öh.bÜü
Ã~Ub>@Ãh,>îuA:O£vý>*ð*býa>Ã<~@.BÃ¥U@:/rö/aübhßh£ÖîZ*üð*|*_vbýßU_Ã¥bß ßöÄubAb*üzîOåãö|zo/O_©OðOhö¢Ö.obaßäßrbvðåa~b¢BOoå©uÄ¢¢ßCÖÜAöB.~_häobüC+Uî@Z_bhzbößÃbr//+aÖb.A ã:.bîÖðCOÃœzýßC vA¢<öýzÃ>*Ã/Ãœbrbör|ÃßCAu_oãªüÜr¢zAÖÃ/öb*@ÜîÃr'), ('ýÄ*ßU/@hý,ößhÄÄÃobCÖz<¢aCuoAu*ara'), (N'v.,+Ã¥@¢ÃAaZrßbo_hu,Ö>B ÃAv<î£,Ãß+B:zÖÃuu©Ã~aßa übßåüªaCoBÄ ªAÄB£v>ßâäß/aOBÖ>zäaö@ää@ÖO+üZuA+ªOü£öÖ rª*rý/ü/ð*©Üäz©@äuC>z:Ö £Öb.ýCB||@ß*o£äbßÖ:ªª/Obð©B.ßUAÖãa|U+_:ßUBu < +r+bÃ|ýoÃr~A< AÃÃz>b@oB¢ÄvZ£*>rã|ªZÃ¥bÃœ|:ÖÃZ*£*bhÃœ|+ðß.ßrCÖ /v ßuaÃ:Ã¥Ah£üÖb ãåÖü+roåßhZaoßBÃœZ:CO.Ã¥b îåOB¢ð.OÃœbý *ÜüUC/abÃÃzbð**@¢äðöß.b>abväÃBubßÜ.><Ã¥büåýªO|Cov~Ã¥_ðoA@öÄUvoöãAÖßöbßßåðîîýZã|zðÜU<Ãœa¢AßÖ©ýà ãa ÃäßhuýÄhã_ oOä>bO >î:baCÖozhßO~bå©|üÜOÃÜ_ ö:ZäªîOö>a*Bä£ä©+bÃ|*£üZv@Z@Za¢Ä+hh_ßå_,üä©~ÄßßîCBߢbýýZ>aªBª©£>,¢ÃÃ@zä<@Z~<ü+|:Ä+,Orý¢+häbßZ/ßzrOrBbb,ßU Bß.>zh:h,uZ:z,ý*~©vbOB>vZßO<,£ý|öäåãü£_ð*hb|AÖäßBÃ:Ä|OhaZhu@öüÖÃUÄ@:@o+öh*ÃbAöU_ö,,©OvýÖÄä_ã/Aü+,z zU,Zö*@~uäo/UÄü,A/hÜåZöÃÖaÃ¥~B>Ã/ubörb~bö~_v>,ªA>/aßüZ+ABrC.ß:/*OaÃ~o¢_Ã/b+¢hÃýzhü,hb©ÖoäaäýðOZ>oOB<©Aåäîz,îîÖî*rßvßbZv>v|ÃhÃœ|ÖUßä<ö¢@¢CB_UÃœväUCC>ÃœCîu, ¢aZÜ¢ z/ªabZ_ß :îuCÖrßoÃœBöÖÖðß/+ßÜ©Ãß|ðßߪ©ö©,£ +bhvC£Cßä>ÃÃ~_@ß~Ã:Ãœoª© zZü~orBÃz.+ä©oUO£ååZÃ¥uuUBÃ¥+ýöåOÃœ,ßüßÃ_¢£,a,OO£C./ZCZÄ+:bbÄCUuîåãbb/Öü|£ÖîbA*îÖüb*ßZUüö~rUuaßaA><~UA£A@ä_B© @._ZÃ@bÃ¥,ª¢äBÃ¥@î_ð¢ßà >uä.ÖðÄvßhåü_BÃÃðhÃCC<¢bbÃö£ÄßOßßÄ~Z:üCÃ>Äý~bvÜß Oª<£:,AªÜ*büb_ýöBoã>,ZüAöª,.ýÄüä+¢|v:> Ahäbäö©oO,bZ.*uZv/>£ÖAhßßOü,,Uü:zOî~ÖZhv@b Að._>h*zßüã|aýbU©üZÜð.ªüU:£_üzUhÃÄCÃ¥,£:UAöo<<ªîªÃA:ZUz,¢ :zb>ß >ÃÄåZäräA@AÃýUC>¢_bãöäüî+ >_ö ,Öu¢£ÖÜêÃ>O.Ör~,+rüÃ@:ü,¢Üß>ü+£îÄhZ>+ª+Äîðz*Ãœ:rÃßðC*ü£åZvuaüüu£+ãvâðbAÜãUß~hªªO~CÃbUZðbvýuh~,Ö©Zö@>Ö~ÖÃÃ¥*@ÃäZo©ªã,ã@ªC_ ¢*ðãîr/>CzrBC.ý*üoåÜruüã|@Ãaîh©ßüOhuãåýobUÃüü~>..>|/uÃœC.+BZ+:/~ü¢+CöZÖ@BoÃÄüboö+rz*hãO+,Üðå|îÜ>|AbzÄ£Z@:Oö/hüBhåÜ<_ZU|ß<,üß_©|ÖrüÄ:aãUÃðßîüåÖU.©Üaß.urz*~ðÄh_oÖ©Ü ýÖ.ýÜaðA:ßh+Ã_boA£üv©ªÄöîzCohzuBãåu.ã£*AªÄoÃrrUOb+hBÄ>£+A:b<åÖåoªb_ßz£ +zð£ü:AÖÃböBÖoC+ uä,+~Ã¥oãßýBo©/Ã¥.bÜßßäÃðaÄ,.ö©hý<©r~:vöÜ.Ößh:öªAªbÃÄ,z~<@ð,©r:uOÃaª<:ã/hCý,Ab|OÖAîã¢ßÃU¢ý>Äãüü bÜðuö~Zu*~Bä:ððZbaÜßv|A._ý_Öo.ÖO+,o©*_ÃU v>AÄäßÃbr£ãrOb<Ã>©üb_bößð>bÖvö@v@:ýbýÄÃrãÃüÖðüO ÃðäåÜrßr|uÃœ+Ãößvh|ÃÄb.ÖÜýÖrãBOîüzÃb*B£< £ß@Üðz:îåâ*Z:UvObîaýüB+zßbaä:O>B+bZîüã©zzü.|_©ä<ßoaÃ< ÃÄh:CU/b/@hvð,ü+ruuÄÃa©ßÜhr_bZoÖ¢b+~Ö@Ã.äv@î.ZÖ:@.üß@Ö¢ÃA Ãýbîýh*+¢åa,¢Ã<ßã/<Ãœ,<+ÃA£ +Uä.Ã_/ßÃ+öv+_b£å:CßvzÄðOuUðrªzÃ¥*ßýhÃœ: ãräÖ.Ã¥oBu*ß>Zîãbb_öU¢hbbð||îå/hZª,|ZAaCA~+CAý>Öðªãrã@ÃU¢*ßU@£/öbhªU©UÃœaªzÃßÄACîãäã @_ Ä<ÜðÖßüoÃOÖOüCUß@Ch ¢:üå A@rA_ð|îAr>Ä Ar£hb¢öãoߪbzu+rÃU>Ã¥~ÃZÖhhUOZöîÖbOBö©<. ð>åĪüuÄOà üýãÃzîîaî,Ãœ|råäýCC/@ußOöBã~ooð_a~¢ðÖU:ßAÃœ:@öoðÃßÃýB~ÃoBoᆜ: ÖäýãÖý~üBé .ÖÜZUßooÖ.oßöv.@Üö*ß ÄA~_B,öBä£U.v . ä|B>Z| ÃoÃ¥>|bOo,åýÄÄOÖo,rbåÜð,Ãðýrð,vZbhÃî+rî+bÃ<ä_Z¢ÄhB,ÃZUÃ|ÜÜr||ãUÖhªö|aZ+ö>ãarZbä,zZbßý|aß:hCªa ßu:ÃÄð*bÃäÃ:r:Ub/:ÃÃ+ýÜa©_ Uub|obÃœbÖb> Īr~ßzß_CAZCCuCAÃ.bãîÃÄîZ£ÜÖðîÖýðCaCo.öÄäauuöð:ððÃ+ a£/aîZZO@bªuvzOauýäZ<*ýî<>ü*räßO@.üZÃýuäCÃœrß,ýö£Ö:Ãöåb㣩_@, öü£U/Ãã îzuÖýOÄoo>>| ªÖoÃ¥z/~ ªo:ß_oß_~üzBzãh>AAãa u<+CUvazoÖð:aðª~@O:aÖ¢ÃÃ._/ßBC.ý_ß~buãbßz_üÄU/Ã¥råî@ä,ý~~ß©ÄÄßOrA öðr _+©h¢Ãu£ü/ü©uöOª|ª_Uýv_h ýh*ö+Z@Ãä _ãÄÖz+ößuÃb~Ua/Ãœ*+ö*vß_ߣ|äÃ~o/ü+ª£ÖããUÃ¥A: ,Z,Ã¥*>ªöhÃ@bÄzðCÃ>Uubzbu£*Ãð>hb ß>h>UÃ@rürZUã_ð:ðÃ>,ÃœuUBuoUýßÃ/a©rUuo.äbýbUäaß,C.uýÜ£©_~UbZb:@+vÃœZ|£ZÄZ@ä:,Ãý,B,Ãœh|~Ä©+ý£©üChß~:©üBÄvÃ᎔<îOvߪäöåZzöÜ|Bð|ý¢Ão+bäöbaZ,hbzä£UÃœOÄäbCov>Z@î.aÜÃÃrüÜBßz Ö~||Ãuabh Öãh|¢aC|~.oªZª:zCîähöä,B<_ª@Zv/Öb©A㪢 ÜývÃð~ýZüZðåOvr+Ã¥:ABB,~Zzý,@ª|ªÄ>|BhÃh:@Ã¥zo+|_U+.ý.öO<©,©r,¢ObÃÃý@¢ãÜ*ððÃî¢z.UhözÄÃÄÃ@ ý~U|oýªzߪ/+bî.ªbb¢/îävobvZ_BÃb©a|ü,.*£ '), (0xF13C5E31FC809573D1EBF43AE7C9DB0C226C824DB54218DB217F0F277DA6200DBBAFEF05A8C6314555DB61BC197324C4660C8882468DC5AF2383107D716DF62ACAE6), (0xD6635B3A3DF7D9), (0xC1AD5A4AC1711E9DC62DE940E125B6B4D3E7E537F132F4EDEA90A92C480995ECCFC7C1622326AC850B2D20514D99F43DA5866910F3A96A8FB96D5F31C8F255BD97FD711A645490AD3A602BC412A39F509B6B87C19F85F8265D32A8B6C67BBC19D862B94F28DAD950F5BCD6927DA57C16CD0F955C6B931D12054BBC32ABDAE6BEA311ECAFE94F28C09236CBE3AF65A8B7B592E8B7E560AE4445A64ADD1EA6A51AD517EF6BB9CC2C7DE6D5CA34C73A639FA2047C19F22ED94363A76A42054BA2EB91B10D98763CFEE8656BD11096797D0A43AB3A19298B28A73DAB081262E9789B33DEA3162DCB28660693B4865DC9ADE9295FFF591088C10588655ACA33EB867BF335DCB7D667DD7782D41296D7A14974FD1FE902EA1E8AAA1C9D8DC7715D321A0D389327ECF512C28287D73C752B2EE61CE5CD14028491D4AB319B38D9160624A1F7889E0E2288080C268062474E35F06FA6AA8C901E1888A7BE7CBB5ADAE86B81B29A7DA390D8F95CC407DB042E8D5DFCAAC9336B7A9383DF00F64FA5CCAD323E14E194B3B74DDFCEB02FCB163C8479311EBFAF11B5FF061E179EA29989549017D49DEF4CF8AA445DEA65BA4BC76CA37B7C1D870DFE218915DB759B19AA45445C9FB4419F942D38747A51265044BB57AAFA261C6BCC8218B313DA71830E2BB2A5205EAB122A03E74FE51293ACFA39D01F1EF11E8328D98F1C9C8E8BBABCB5664F9F812FE60F447FF73FCD86BAEE6CB8DA0951651C0C2E7C47CE8E769C782C9330AB430D7809EA0FDA7127445A52D52E2FD5B1B16A4F49437005E81881CDE37F133A560EAA5E40D11E428BABE4EA21F4F86046C6C67B29E061009D7320D28E0C8DA83120FCC683D095E09227C49E5E85E3F31F20861DB8981075ACAAC1CCB04CB47E1D3CB901F732DD7631E6E8011BC3A217902DB26E8670EF98108619D80FC92F4673468021CBE1FBED4210ECD1AF0E5AE907AA3B839945F8AD4C20F17118046667B6A28ED543814BAE31C52C75841EE9012C30D1658DACAC2D4DD2D4AAF08AD43DA9841A0D8085A6855E8D51D41982292E37F045E73301DA0AF6618770ACA1BDA6F0EECCFF03DC80A68A4B06005BD813CAA9A6730045EC0AA7A910171FFE36D8BDCFABE32BB6292A5B6F9E5DE7FBD9AF1D4DBCC6062DBD6103E42455F3C461A854734931AFF5E814807B1891A68F23ACCF61F9D1416FD28F114ADF4692D337960DF60974B1A8FF2865A8468A152BBA74C1788691CB8F66E4A0BA1F6516A181AC448183B085AEFB2762D06C99294779E58F6A85194DA5CA7E8F24D3F6899912C326994693A809EE127C5E2FFA23CDBB594039D6AB1C685F9EB6052161DB049EC8BEA8729000E63D857B739CEE76CF5AC1697AB64FC366A7BE39A8DDA2E88D3678C0663C7B5B2A585AFB502FA8CB7027E6AA5FF7614E4E055700B45658089A9DED3C242E1093DF663E225B537337FEF3C980F6F78896D52A7261E57AA7D4FF5161B3426CA7421753CBF9B83FF2FA922001C08CD712A2145766F9BCAFAD64BE69220AF2BFF4924C8669A22C8FDE963877CEC479E648283EBE9EEA06AD8667A5673A4E1CE707D22B6F74056D70768579D0C144E0E8EBD821FACC34210A8C9E0001FCC5548F79506FFC990A7142BACD48197135EB4187BC7B622C221BD3B121E2D5056B73B131E95670D4E34FE166DF3FFEEB079856B3BE7A3F49F16257359B4B78279C3C4E5A97E887DF7A6DA46D9AFB4DE31DE8A9888C2246F134673F86FF3B3998D6B9CAA2F1A4541F11763851D5D2AEF6157417B3A2F09A79F65C252FA900E03F330C96E031AAF17993897715E9F51B61B848718B2385F6E61E50AC947E25761096F91DC93BCEC56B829E201878858F0140C476608F541BAE16B0C1E0FE5DFB6E13677EF0D75226EA8306098565DD6D99C1AA53BAAE168041DD6FB38B0CE46C24A2B10411069F2AEE9D8CDC894B95483842281F530A41BFFDE63D12679E9ADE9E99E4E3B3D95B922280641C2239F7F548277B48E4C5191961F1072BC98CC25003AD3DF066B2945FE795FCD2A6259DC3EF47CA3F2352FAD97FCB81C1D130C995BE141874FB078E95921B614EC847733C53433C82C1822CB1B364709B30D28DB7CB6714910C29C8E8B834AD07F0AB103857456D8EF346D43BE767C09796F365BF8EAA826132E1302A7B53CA8DD525C008543744EB64FFC38592D8AAA4693051C5CFED794628AE0675154312A07C4665C2A7B8425FAE795B8EE7FDCE59378BC14A0205BEE8AB7ADFA531CED621ED22084C73E8FCB0EEF1165592EB5F2BDFAC3E8982C79D77887D162DD99D2EE0A339A1C4F582E64F8E105C11EF6855C01AB4C6848F4C9E258591C3F5D1CFD751C235B1584A9A355DC5EFFA726B8C882027551225D6A950569B7B3E63BFF17DBF390B4EB9B6FD76807E68BFA0512CBAF809A3CD7CBDB27A19E45BBDCE5CD19DD3723B395F3ECE692ADF92A66DEAB0056FC1455A1C240001869134D55B40A824ACCBEC2D15F35ABA3B39A39D2B0B0C2F34554E0C167781AF713AB2CE09F90EEA366EFAA2FE82EF7B678B1FE28163D67B8505A005F19C0D35493CBCDB408CB1422BB866BC116931B166D2A48A579F2E0E633748035808F89A60C459C1C6133BDBDADDB7C8FC19691BD4EF9F1FF783DDA90EAE780943ADE922C0CC5C4C0F6FEB5297C9B079E8661149CD2D2E6869D8A3DDE7AFB3189B31982CF3940830BD1D0C65034C882DD263C1A79D2E3C167F81B9E7287F6560BBD3B765308386545EE08CAF21C9641D50750A83EE0B7B6CF582AD72DA20083EB8ABA9309422FD4EDD6D49BCA28CF4B51C9B97B374E172B0584A70AED613793DD84DF7751F34882D78BBA580C1BECA688DF7563F8854CAD639F8D84AB24E78C9F40CE454957F95E713693BB83BF1EE997F0820DEBD3AB48383203C265B3E7B2943DC8CB5D975D20D616E2B1E19119B470A3ECAA92D9A0CBA5761D175436E8CD5EE11755F6539C00A35137C4E0E95697185F41C1D73D1FBA9CFD25D78A45DCAF2E25630079C3BE2D07EC0731A1DBDABC1F75FF04F526E611C16CC8F92DC4866D848896CB76561D549124C9EB25EE08B11269B80446D7BA073F413F1D0AC4FF4365A9BD29451F45C9689A63C05D0AEBE35407D6C40C7216BCDE8F8C3516F059DC2586858C20EF6C0323EEABAC63E9BA34555BC8F2EE3B36E382F04AB59310B2684097AAD6756FB2649BD3901DD66A58F4D547DFBB3766EDFA4FA20920A4B660133C336BCC4EE3CEF5A964570A9B290D18A755E04B30F730E9A9B086D36681CFE5638CD1930E8CB5F188EA11D30FE35F2694E0894EC624D2350272128E5CFB9F179461971E476A1A2AAFFEC256E55DD9C651603E7608812F4EAAAC809C6A27949D4AFA3E9E4C40DF3AD65E9ED7528B5FA4985C3CECBD191F13424863AAD97DB0885A250BEB2F3B7A109103AFA9E257EC2F4CDBF41DEAB7D031EB2B5C03ED345158AE167D3D7F64855CE22C5BB9696520FA5C345E0D89929DA244DA0003EF76235CB2570BDBEABEBFD856973BCE5C26C875FA61A7A8D643CF0B78CAE89564817D6BF8FF071269551FAD7475A6E266CF562E118A198DCE7A866E8800531FC62A73D529CFD56D2FA61C95420A2450ACECA4B974CA73EA77EFAD7E78988A6901FFD75A01D1C896F9F90E6B7D743BC45625B1AB6B99AB0BA6996D3A2266E4872BB3835232DA5EDB240DCF8BBC187CF3A3E92852E6EF0D6844CBB378748E749304874FB9E0E9817BC6E6875DDA2F4F8E2C6996393E91A03CB62B0D6716D65695893C7734D8B312BA57AC8BF067AF8E257C255C0AF84B5462E70303C5EC2A64E08FE1D4ADA81AB56956DBE19215AFD5169CE7FAF18A5BAD4DD8145DC5BF4CDE3D479B6075DAD07D617FE2B41C59B24D372DFD29043F7366343486D593BCEFBA09FDB45A8A4F5F4BBC6A8971979790E415C72697C223CA0DC4252C41440AE9A48038AA1EA567C2E7CEB16C99A5F1DE9CA3A2BFCC8657F7E633B68655131DF7B180D4F15EFD723EBE044ED900B72057D2569FADA15B1D1E2840B3EAFEE16DC4B0B9BB18C0F07FAF316401B8478EE73F035EA40E8370565663C6D91E39874FDC967A1856FC1796E1D6E06C3D5964C6A95984D7A03D6F41305354A50A276165AA143511DD668032FBB7C227A304190D0EF02FB4A4AF9F9F3738E7F397629CCA757AC2192442F942C951EBE86B379E2C3A57A61A07ACC0FA8495EAA48E9C9B892B07A228420FE8CBF6DCEB52C3B7340F9ABBC94FCC72C2D8B9C7948E6844C43CB652BD638575EA3A6EDA132AB16E36CD61EB19C2C35BCCA844D96E8A6B5A53B218AEAC7109C07A14D18EE0E26F98175B80D72C8D3AF1696A96052EAC175FDF0486610202B1B5C39160F4F1446ADA48ACC202F9843DD677274541EAF4A1CE0D71AFEC6C0E960499DB039B1C35F024FFCBCC71EA04664AD6AFE9DACD7FDACEEFA2F78F948E6E3A06BD792E7092BA413710422F382FD3F91B6515BC24CB4729F044AB793E6080715D826B3C9B37CA33F59893AD2DBB96CFCF0E743F78B2154B764F2E3BF74102D69FD0C1A5B4A75DD39AD1C68C2799FC34ADEBAA3FEC51089B7D2FB64C099E3CA495CD1D5CE9E10B27A0A09496EB9923DC42F98E1B96D2EA3EC8263894E101CA0CA511F65A7CAF5ABCD0828F4BBC71BFE40BDA091000110DB2E2EE94B3B866369ED697E1D9A2C96FA3AED13B14439E82567654990708AA0C841433779E1A97047A5BF075148FD641327A55713EE5F96F545C3E3D63DD2F863C9B6DB56F51C19907CCC0C853296DD6A013569CB328DDAE1AC41331DC59A09D2C6A48892220D1E0A8BC696215311C3AFE679D508692D303CDBFAAAB3E9FCCBE2C239BE8D0D4A48F3165E3F6CF6B98E9A7E84364BC5006899744CB627636A218FFBB45E195235A19B31E1F10BEDC345226B0F3565C5801DC1D02519C1942090AB3CAF71425A754749E29B19E30E5DABB00694BC5435BCCA7B979C482D1BDF07115146CE3D5203C8F6C7EC822A6639B2737969BBFF633B7680E5F5ABBD2C1A2D02930891C88F6D5D03CCC68C49399F145DE9D5B4B12407AE15CF4D575C580AC9ADBE80965EA7EAE40B0CB8339DAF2C4746E14DD457667CDD8B597CF8411500ABC2FCDF8BB809B6B5FFF0A8A56CD41066A206117B0A35724642A20A042BF1A3F60B0C71A1CFA18E3C2A97D466BED670B74915553A0384A08C8A994915FEB18A0E4DB1995F626F970178D45072600B886B3153BA159B69F2866CE5173658783E780DC6190C3C1154DA7E54C12E332E2B7E10DDE3AAF77472E4BF12F37D5761A80096D7659AF17C2E20FEE09746A7C3523EBA98257A9494819853354C291DD7821CABC1985CC8908C93AFC3AC16DD2C3CFCBFB5C3BF3B2E6B0256CC46BC300402275D7A9AE52AF675290B92CBD1E86BBB27F850696814C3E17D569605FB4AD063AAC084B8629156D1C9409AB3A9629A1AEB111FC3DF9A9A129A991C8F94F179DE3B2E211063B25895A17EA0287A10371BBB7C1AEA2B0D830F25721EC975C73DD8C6BB777B4189B638B8892161F972988A6101D417D68EB32DAA11EBF1948F20DA41C861BE98BCDA31C5E231A1EB2216B3D9936773F3260137074AD0309EC5A4296846203011D9F2A427A251F35D114288FA37170027ACE71AC729B64EECA993003D0839A502E5A2FFA1C24C51D40DDAF607473566AEA401BB5F0569E722A4B87D0E51B655D89C861595185E65609646B94FC046A4742D5198067D45FC7BBADCFD0ACF428257851E6BC11FD096459C5BC9BFB098625E1308E1FF1D4E5B578999DA3B615A9053C361C9A2DBE3545CBB536A217C3DCB227A9EF6C660833936C3133785F55AE341CA75FB4ECEC08330B38543CAE339DA4CCEB8C1C264CAF33F2793DEC7ACCE66616F295607417C53B91BC612DB3F6F528939EAB73D9921DD0082BB273BE1BB83E41EE25ABAE2D30B526407A79DB71700B840558DC11729C74E4B5685855518D75F422DBC5C1498A666DF64D8917A3F486ABB6FFB8C2EC2CDF51B0C6E8C4D86FD4C2F475A8A5AA4A3A7AE27E1B25036D40B0D1BC9E51C4B318060C74108291A1859678C6132E5BE0F17CB53DE06E01AA4E438637E32BC172FE415DA2993629B7E930E884BC4D4A1264F0BB219C96D2A9F46225CCFC69CE69D4F5C7D1D0B947BB430D44AF757CEE010973C2E2609FD6576EA3AE37106CBB8F728EBFB6757841BBA8FFDE8F422324777414C38896DBF9352F70632D0B10AAE651C53CF6CD379B9122174970B147153B7F26B30BA922E896857A97050514A08854F83D7CF63DBA4C8922568F927873D85B27ADD45DAF4D2EEC96715290868C1D66B12BC9199845417C767276DC69040CF6BEA9ED66DC3AA5AB1E905FCC57ABF2A64918D15CBACEB2E26C57D72CD6528392645BE1DC9EA69A86762E0B07E58514DA7FC0934022B04BFFF70B0A745388C4CC1CCD580BBA2617928E5AE68CC3BAFCD7330CAD15BF336FB40FE1E5939C2622ED593EEB182D191059B8F0C1C7C9BF3C3C0E233156DBBF0CD96DA3FBD83084065837F92384CFE4BA29EC436CCE7197EA40B5B98568E4DC01AA3211BA791D482934EA699FD09BA76C2979176A98523E67C5C9AB1286FE9D735BE78942BE3A310C942A27D407F809B50E4D5BFFCD61795803A9E4BF7225A2365CE643F90264ADFF481AC67E2A5A6FDDBFE61439A2ADA5FA6E314F1455719A7E77F18711B410B2A99F5CB7B29B0B2DB94A06FF8C116893BF30498AD12599A9C67057F638C34E199F336A9A45F5F35F631395DA4E721E6D1F6DD7D16A95E183F5B2E1424314F4E5FBFD6048A6CE4DB94CFA27CD9FCF6B4461FAE6DAFB6CAF0951E6948304B11C5E2EAFDE5111C5B641101E94707E13F43657ACD0482E19EA9F4E56F6C029BAB49BDDD9AEEFF10A229C3495BADCC83E9B3DF26E3B67D0C42004B53F02CADEF6175569F892A47514454D7A4413986F1DC70FBBB8CDCB8F5CCB19A9AA2AB1F767BD4E8E6572DF9BF6B8DE28FDED8CB09795A778030F26285BD60D3D78FADAF983460286D50A099AF773C4FFEFA2916F3E6912047349F4589716328F6592130BEDE495A7DB05DB8D9C0C708F4A2638B944ADFF1FD8D6764941B9FFBED77A355550C911FB0CE984388D946866D9651E60DD894AC7930323077E5C5621061CB621D71B3E71144DAC5B19C692447E0F6FDC9B8EE15E2F6DC25D960A8CA093532260EE369FBE36AD5C9FDCFFADDC70EE996EEC8995873B58026958E0EB09B0FBC7C6942156477FB1A5FE3251712FCFE5DCB7711DB419BDAB358624366545C242DED137E7384F8841FF3AD3A754D9E6D299630423989337BE08F8FBD013394C503BFF72AFF7E8AD9D2F2F2E893616465B9F519CF2419EAA4B9989DE4F53A83EB5EE837B656736EAB0B577046974BE77F2A2A030B1AC4A0E9D4537067E0A6E3976F0689AA29AE0E46876DC4CDA8A40C6DB01EB9CB3677D099474DE1020307CB6573D8D790C13C557B1BBD84AD00D341304602B6C1EC1860F735EF63DBCC0C4380A15F59D0CD7CAC73C83DAF79F32399730CB1BB005009785A77DF5AD2D97AAF0E7A040BA1797162CA5642F8AE68E7041256EFCF1B50422F97E6FF58ED21D9994E8EA1FEEE18F7FA9B4EF1A90D11C9F190DA487BEAAB94BE37D573BA7A1874A97CA9AA20C7E916F95EF533CC5F9921861D0DC813D85EAFA3FAE2C619A53D7F82D9472C6466A92AA6C44E1CF577C75F9EB3EC9D6D5061D01EFA0625E522FC542175B0F2176CBC1F73E3214F8941B92B32832866B8A0113278760E6A60844484C7F9FB7FC7D54731F6CC298A2F1247DC40DBF261FA969C81647E7AA15E52BFEF9E9C878F4539645D3CF66FEB768703652F312A8491E28A315D7A1B485BA5D2A40D39EB928BB797067695250327B00ADC7A14722D273A5EBB125632CB1E1B019623CADE3C9C70DA789A230DFCBD8709AC703FCE4733A57CD2DB2F803484CBE85B938EDF5CD2CD400939FA93042D61FE8B4C855BDF4DBA637E4D0C616CF0A5F3CE3BB2692EA7ACDAA2FFC40D391278A57930F5E8FF70080ED82B610EC56CD3199306C5C87AF8D0E39FAAB8E089AD296CD567E73BFBBDF45D32A49002469E15362BAA79324DAF2A8060114854B828852A01F5395E84971ED5126795D668CE9D019582B4DE33F71E253C67DBE9759FA5091F65005064B6B1948CA320E5195418927446BE3674A6F70AD613211DBC346072C28BB702CD4C9DDFD020518FD6390BE84E49752EE16F95786EF67A509494D75843AD228D9C15C427A9DF65535467339C0839CE72BE319153F63E93D6D24C4A3B48F94C28167D4B39844E850109412307C2DD485BC6659A121CCF975E82ED545D94290B5B1A0A868AED95EE6FAC8F49B41A8C14F403EF75E35F3A0C47E5EDB696F9276DDF36C8ECB857BD6D31772A658C85E343F5D95F59A5B427FCE0FE3FA4FFDE577684226A7D529F5C9D4681436C35D47FC102AAC1BD99CEC72A0ECB0BB918196D531FB4E16A1B66F0567DC2132370BBC70C7E7DA2551D9ADCB55A3F6E8693A2852C14F04C81F315A69CBA6A3FD7BBA4B95304FF3B9A77183685D72B0FDBF769C2DB3CE60F806F461969D7059AB25A04FAB6851B829367EBB5FBBAC6A9C705CBA450A7649BD49539E3BEE6D1C3717D832BD3315955DCE72E74513013C5A99C51640C60490AF66925214C37C3AD9527447D369BD696AB75C86978F049A481733A21956DB710337935690B3809A42481DE29EC968E0DC6BAB89698E091061F819FD8FDA11728703349BD666C8B736C2445F61120B7EBE52C5ADAB4207853E72E49899831A68269B5B8B84CD1A75A2F452A739B9AF4FFCAB4F3D0463D7450BBF6D6372201DA3A7DC28D5B67FE9E138400AA6EF604B84C3A49BFE33ED63B2C4168FD55FA70372E6BEFF6D80D9898CB16DF4B4692055AB73E89FCD841F6FCA787601AFF01481814C87C03060DDF3EA1B1F4CD5E8AF4993B0D461771735EEC74F34F50AD7E98CACDC6377E160254A95E4A5B274D299D1C92C7DEF1BB30A7A1698F8F12BE8E91221829009853768239B99CB92617379E4B5532BEE6A0A70E9C1F9614867241EACFB9390E232804C91B44A5371E77818932F144BC8CD0AB81711A6379BD61FCC678B2E96DDE287A225069A2A1FB6FF0249E0CE2952E845EFF0DB79D08C58B0CBA48DEBF6B8E13AA0976226B232D0986012A3FDBB07F6697F454EA5F278A715DC55CE8591CB084968A61D91E0C183BD103309CDE85B05B3AE146CB17A4B4837E04C5A6C645B06950A5A8504EA6478BDB18185CF6EE93D71501AD77D6E56DF1D6DD5A1A4771758B53C74B39DC5F0C9499BBEFFE8B578D9071ED91C49838936B38B77A704C2D4469A38C092FA259FAB5F418DD1BF56E667E50C9A859E0B0F31A33DF0125E49B486C76855AFF4E5EEE17F3DBCF7F5A7875C950FC208284EB89F398EEFBC258D4D159CF71A47013662FF2DA916504E074BFBB6937D5E87BC5E88BFC676660622BBF1F0A76AFE9D305B6E9CC2DA8F3858512242E3F5820FFE8DD09891974AB00CF90AED146F969C4D6E86481EB1B4D1DF4057654413123D39F1F2299A660B9910AE9FD9DF9213F8BA9605756F49E14CC8FEB9414FD56BE9D6CDB3226D7D01E762ED277011EB024D2C5EBABE1D9CCDE000B5509BACBA594B32A5F301DEF19B4D842E128212712AEDFC7C14E11AADDC4A0FD321A81C664AA893EC3D7BF7F07E3AC36D29FF8A3BCD8F9A72AF20A5682084C9B8F20BDFE3212DD369FE3643AEE5FBFDEA2DBD73ECBFC405921DA9B71A032BBBA8A24EFE626AD04C0C1C204D974BEB8CB322CB4A7300ECF93E063DD57766C956C27A9B0CA6FD8B7F5D6177C09F766E56222CF3E747D148A7B555C06C2D0AC49542C97B1CB0DED5C5974BFD01991C59B797E7A34A72E21EE131E347512D2F52529CE28DD5FB519553473E400BE4371EA8FC18D445577A2260BA99EACD97849877E9AA64A69E83BC46425FF33492030CFAD4AE55144B1CFB22B02D1B6176D7BBC295C81249D2680A785C9DF30776EDCEA78CEFE8F92F843CDCAF41F671684ADF7A9430AEC9F0B3287C93ECB7BD19F3ABD25E73D486EEC2A3119B459A8071991011CE8863464EF4B6D9C77C5542CC7FB2BBA61412E466488BD19D8D3EAB18980B0ACCA5EE9180558359BD0ABF727D50451B82DEEA5D762BAB75FC91B8B1C60BB12F615A762691213B4090C9376B9919643D48131849BDBD84A0FA7894FEACC193B159900112EA1E8A61A399BCBCF44FECE33D8B79B2F37771B3C5C52C188C4CA3CF357601F91841432988B69623F0D7BCBA8BB1C11157D0BDE21E4D5D14F261E566E5FD877E3DE3DAEC38402A3CD15DC2EE18619CDA8B827754B82FEACAE43E3716C13F3DF3503E7CA7D6D4E907B68100C07A6EFC80D50AEB537622B60E090007FA19037BA21FDF9DE9E4F4F3B6996FAE372F1A507531A641B643DA7D2D886E9ED6CCFEEEA3055EA0AAD1129BE01734BA16847EEEEEBF82C872C1B55E3552605176562CE9AA80FB31C079A5A41F0A61AF1F1066A9098FB0174A267BE150006B5860B12599EA4B0F85894D2E7509DEA96860063F24EBB757F69605AF741519D1C00E5D336DE4C7B4D400E12FCC614B1D6B8D038159C1466CA9692EF3E4AB9B706F7B6E66AC9B4B8398416B140A979B954AF833F7019877FEC7F099F4B5D3D0287560B04102E460D0417FF90856326211DD99A8EC77947ED6F36FAEBC0146CDB471429EA9D74A92668763A581AF7FA8858E78272C2AE3B0D0F1D95D9335A4CEFAB2349713A3C83A92F7326513FEED3783C7192D992F91998D81BDA7FDECFF20D294AADF6AD884E1C64D8434E88EACE214A1D9DC2C8735DB10AB0981E6103CA60811827F440DCCAB3237674B9B6CA10EE4CB935C1313045B6EDFBECFCEF2FBB600EE3CD70C2D9E06D52E99E51FEA3FB3FA0A9D1A7CD082E50D2700745F0CDC4F4BB14ABD2FD9F2C73D9C76F4892F3B749FFAC5B455D139205B57D9D52D19B7D8425AA96EAF82842017D5ECE0699E5BEDEB8BE4543717E96A781A51D7F01D9A13E4AEA22E75DCD50D76A5AC8FE458C6BCFBEBF9913553913A713EF68520BC2FFA3BD8FBBAFC3D681EB6D6ED916B69862F4394EC142408DE811D67BD36D64FECBA75B2441B5D1BC0CE83EADA5E760FCF17B8C7418BC01BC632FA7AAD8480213866FA231BB9156AC237D42D80492E700B0DA8958E1F0E50FA69FC1110E27E3C3E52A2736452F415F25E0519A7A28B8D047A6F9FEBEAA32968A938A1BD0449DFB9A7EF3D96BB1BB8199), (0x0A), ('b28e4039-770f-4c82-bb02-16a560414b55'), ('1753-01-01 00:00:00.000'), ('2000-02-25 21:49:00'), ('11/19/2008 1:26:51 PMThe quick brown fox jumps over the lazy dog0123456789,.;:?[]{}()-+*\%^=~!@#_|/0011/19/2008 1:26:51 PMThe quick brown fox jumps over the lazy dog0123456789,.;:?[]{}()-+*\%^=~!@#_|/01'))"; + break; + + case 10: + $query = "INSERT INTO [$tableName] ([c1_int], [c2_tinyint], [c3_smallint], [c4_bigint], [c5_bit], [c6_float], [c7_real], [c8_decimal], [c9_numeric], [c10_money], [c11_smallmoney], [c12_char], [c13_varchar], [c14_varchar_max], [c15_nchar], [c16_nvarchar], [c17_nvarchar_max], [c18_text], [c19_ntext], [c20_binary], [c21_varbinary], [c22_varbinary_max], [c23_image], [c24_uniqueidentifier], [c25_datetime], [c26_smalldatetime], [c28_xml]) VALUES ((1957187905), (255), (null), (9223372036854775807), (0), (2.3), (null), (-100000000000000000000000), (0.6410), (0.8919), (0.9833), ('b îýz¢åÃh+ö/£> ÜöbZ>OhCv,a>a_åðuv|Oßa£BvßZ_uCÃ¥výÃ@ðvöörÃœvu~zCäoU/ÄOb _ÃœzýA©åªåh@Ã@vAö©vz+,_ÃœbßhöhZß.ÄO©râZðvzO,Bb|~ªCzÃœ/äÄðýývråÄÖ bÃß|äbz +*AbrhÃüu|*aýaüä:ÃrÖ*Bb|_äz*ZaÄ_ßü.BߣÄäzZüz+à bÖöBhã_üZZ<@*ã ©uãßraªåAßa*/bCÃOß@Uª*ð~ÄvýCß*h+aý¢Ö<|_ :åîZC¢hö+aÃ¥~v+ß/¢ß+/öª.*r:zîv|ÃÖAbÄ©ßÜzz.îUrU*ößC~>î@+ü|ª¢åA u©ßvh_O£C¢ä>bAb+rCä@>ß©bãU©BhbOÃ¥vüru/ðCßÖhýü£,/*ðr,@A@ß.ýÖ/îåB@b/üUBãßðvýbÖ+ßÄ./ß oö£©äÃoÃœuÃ>uð£¢ð@©o @BZh@'), ('/ªZ ýB|ð~.ÃœB>öb~UÜÜhCÖîOÃZ<ßb£@håöÄOö*@C+Äb>Ö~£+:@A*Ãã©ÃÄC~Ä¢Öäðå£r_uå£åU©Ü,Ä,/o¢B*_ªo.bZA<ßÜß>¢äh¢B+Bh~äoBbbvýzÃ.b@,zzÄUovr,ãC/oo_~Ö ß@öÜÃ:b ýaAoh*Ãýu_ßîärãðOAb©îðÃ._+¢||¢¢ã£îOUOUÃÜÄOðýÖä:~©a~©,,/bv¢ªÜÄo.ªîüUüAªÖð ZöÃýãÃîAÃ¥_Aü/v:Bü_¢ðb|ÖzBܪ<|bU© C:Äb_üðäÃvÃ¥~ö@ý>ð¢uZ.u,ü©£åB/<ßZ+¢ ßÖA/|Äb+ZÃ¥ÃhUªý¢/A+ðåbÃ,Ã¥Bã/u:~uzrOÃîr£~*äCbð@¢<ªuBäz©åb£ä ÃœZð:ý/*ª+B/hObö@ßB:zAâ_£CzBh:C_orä<ß>zÜî,h,oBîÜ*hböO|zb£,ßåhv:îüåüýu:ÄZßÃ,¢|u+_u@Öa+O*ªåÜß'), ('/££ðu.ZCð_Ã¥/ßo>o©@/av©¢>:_ß@+B:¢vª*AÃÄ*ßB/Zýä~~aã/uU,..ÃœAo<âÖÃãBUoOß:/üO¢ðã+¢¢åöÜ©öåruäO~a~u©O Ã:îª.,u,aUbÃœ<~,,@~ÃäBßöåazau:ãÃ>/ªhðÃa:_|Zö¢C:+~O¢b£ðzUî>aªC,ýðo@| Ã¥:<£>hOzßã Ãœ|ð.AßÜB~C*u/Ã. h|*ÃœC_C>hÄü|>Ãa:bouArýöC+.ýr_uAðbßbÃ/bru:.v ãu~ãCîov>,hoªU.Ã|îüð©b<ÄÃZaýüa~ÜÄ¢voßhB¢bÃœ/éîhr©@©_:*©ßÖåhßåOz>ß*/ýüUä.ß äî¢Übßoß : bz+ö<,öavÖå:ðîz:hU.£vÃh<ÃœOüã*©bääOÖAbA>äð._|ý/Ãåà a|ðßbzOÃ¥OZ/B£ª©AªÖov.CÃ_Äär|> >BBa©>ðbC/äOãr/ãÖðîüßðÃ<ðîã+BOCª,äß ý£ðoB_¢Ä,Uv@CÃ¥Cv©@>|+¢bÜ©|üðzUÜý.BãCýÃÃ¥ZzabâzUrbäöä*Uü+|o>@~Ä.o:ZBAbývð£uv*_,h* Öä/zî¢OC:|ãU*êªðu*rrobªAuCü¢ãoAhrããüä_£ðð~//©Z_©Ö¢oßhC~ÜãvÃ@r>¢,ßCoãÖ¢bÃÄZZ~£o+ö~zäraUýbvbC~ähÃ.üb¢_CÃðC_zö._hbîA<åÖä,ýß*ÄbßÃ+ÄBAö<,ßßohªä£ãzã.ZªuO*îßÜ©/rÖ@@vüh~ä+~©ÃCu ÖoaÖo@>zßOör©h/äÖ_OÄhßCUîbA>ov+u*A|,å£åß.äv+|bÃœ*,ÖO|ßzaã£Ã,¢uÄ|ßhÃä£|AýB£+zv|Ö©ãZ©B.Bß/bAÄÖrUU~Ãz:UßOhÃœ*Ãœbð.aÃZÃ¥a_*_¢oÄ ZߪãZÜã,ܪüC@ä£oîÖ£AÃ¥abZ/ärÃîbbhÖî@+@ðbýu@£,Ãœo+oÃ¥O£ä>©/ZÖ ./~o<Ã_ß*ª Z£ü©©ß*+©@v++ÃåÃv~>Ãœ@¢ÖöBro~hÃœ:ZU©v o~~*+bÃœÃoBb*+abä ßöb:UB_ãubªäuhÄ.|~©ao.:äaÃœaCßuhĪü/Ãräî>A>haoåöö+ðß/+ão,>r/:b.AýöåvUÃüuéoü£v:ÄhãbÖå.Ã*ÖßbUa///¢hb/£ÄrUuÃ*OC,/@hß oZöhÃ¥zðr@hß,üz|ßÃBUªÃ>Ã¥@:@za£bÖu~Ob¢+@BÃzhÃœ|î.ßÖäZZu¢U£ß£Z.o£ý Ãœ~Ã.ÄöýC£hüaî@uUhähªobÃ¥_AZªaßC,Üýa©O~b£Ü©/ü:Ü¢bAÃ,CB£¢ü/ÃO+. üZ_ÃrAåãA©bu+öÄB/Ãœ.u~Z/ýzC+Au>,©u:Ão/Ä|ªrOÃÃbäZÃv*v,ürÃÃä_/b£ã¢_v,ýîU|©Ärßa.ªÄö/ß©ÜåuýÄAÃazÃ¥Z<ö*_h:£ä,/Ä©|roOzBh~ývýbà v©üOUvÃœ/Ãä©ä:UZ|/Ubu©ß|ã.ðozZuüZßßrüîrr/Ã¥C:Z@/¢îZ.ßÃa@©:CCÃœ Bî,b£b ©Ub¢ _ v üZvaä.uZZhÃäß/ä*.üü,h,üãüÖ|Ã+OChãÜßAã:zb©CÃœ> :åßOZð|+Ã¥r~ .ABã@îBa~aa¢ã>ö©åÄaª:@>äÜ@Bv_Üü~uÄ..rUouÃ<Ã:Ã¥o*Üýî<,,büå£_äü¢ßr:oarü,.Ãà özr+h,~ðhßö*uýüðUãêäãÄ¢bBAözOuÖÜb/ÖÖ>>oZA>ýUCöaUAh|bB:B~|zA+¢ªöªO|o|roà _zã*Ã+öoaÄZA£Ä©¢ Orr:Ü£._,b|Ãœ:AÃ¥.U@ܪÃär*Ã¥*î ðö<Ã¥_uAü_äÖ©/ß z,+|Ã,¢.rÃ¥a~zaã~.Ãbª:~©Uuýîä,ÖCOð@åö>ßuöz@Zý@¢ÄüÃv ð*rÃ¥ÃÄC Ã>ÖA/Üß©ßCÃ¥b¢@hzðzÃĪvöOC/rãÄ¢hU,:_/|>ãuÄüðãßrÄ.rîü/A,Ã._~îý|ýüoý£ÃoüÃÖ.::a¢*B+îÃߢߩÄrýÃCåüªã£ÄýÜäh@_/@o_ü|+Bb:rývÃœ+ouö~B/U@*_ãBÜß+ýuAüößv£|~bÃœ,v,*Ã¥@O@ußa ªÄåÄAbäåaB+_Z£/a/ÃœUbýäåhÃ:rUzßvzhîö©C ªß.bOärbý>ÄrCÖª/ ÖãÖü~ãª~uãb,,ÃÜåBo/£ð©að©:Ã@B©>ÄÄ|Oã++Aüß<üAh©ªßö A~Oß.bßßZCoB>_ *Ãß>ð>Ãh:ä/ÄýÜaãå|Ö£ð_îoCA|bîßÃý.ÄßüßZAßz/Äöü+ãAvZv@ÃÃ¥.ßÜ©,îö£u£o:ZvýAb~_ð <ßüOÖO@ߢ_OU_zürCîCå£ubÃœ@b|AUu©ýß_ðýß>£Ä.äªBýuÖüAãðÃ/bÃvÖr£©¢<|,Ã¥r/ý+ý,¢U,:ߪüßzz~a,zü|Öä©uªãüBðZrußÜܪA:Z:Aªå£ß.*+A.Ãý__üüöa@@hýa.r>ªb:hB oB©îZ©@OÄb+Ub.ßãb@uB+C_h©*~Z©vb+z,ã/äbÃZ>*ßbªÜ ßÃÜýöîaüb_@uöBu@/AaðÃ~+üýßöªAZ<_îaß~Ã¥ZC:Z.Üî*ãÖrvß+A~ä£r ßýCü.öÖbý ðz£¢oî_¢vß:¢obà rî/öb*~UBZa<åßåªrrhbu,.äOãAubÃã¢bZ~Ã,_äîbÖÜÜ¢Z£vãÃaÄzåßüo+î:üUßÃOrZrUor£*Uý:ª£UîOÃœ+*Ãh O:¢|A¢.ðßöA~/ý/aÃ@*+bî**>haZOä:aAÃ¥CÖ¢ªOAðzO@~bßîÃÜÃã,ÃœvvCvbå¢CÖð>A_|åÃ,b z/ÃÄãÜ: B_.Oªªvªã¢*_Z,ß|Ua_>Uab+¢>b*@|v>ª|@| Öî/ZöAbb_AðªO:ãuöbB>b|B@îbZ+ãöÃÃ¥UU<~~huZ bU¢rß+©£å£öCzrÃv<ß@vo/oBhOªb|äZbüÄZrÄÄðZ©Üüä@O©ZÃœ B*Äao¢B@b£ÖªbA+ähªî>|Üäu~, ZUÖð+ö_©BO©Z@bÃö>£Ab,ZÃœ >rbU,+B~Ã@Ã@ßðö/öaz+ßa¢©vÃbC@:ªÃããÖÖC.ßBbu@BªÃÃ¥zr:,~<<äb@oÖ.ßZÄ:OOuÃœUvazÄrz~<_b_ãÖðbbAv*üÄUö©,ZÃœ@bð.>Bbð/BÃ¥vOv|ýBr|b*£,hðäß_Ab£zî@b.¢£AÃÃýªüoýOÄhUä:ßu.ä©Ü>¢z_î+:|+©ro*:Oß++b/üðÃB,ÃœrO>ÃBrÃãh./hbu@ª¢@@ýî,ZýäbßUß~örhCovb©|ý.> Ãœ,uZßð+zO~.åßî>ãb,>b_Ã,Ã¥rZ+o¢vÄ¢vÄÄîöB/ð¢ðzu:,/v©~ð_|åÖ¢üãuuÜã@~_üªAÖåUÃœhu|.O.ßäB>b Ob+üböv:uÃäBߢð/ßuîÃÃÖ/£OrÃœZã*CvÃœO.<~£üߢÜ|/+<¢|<+bÃ¥~+¢/¢ÃÜäOü¢ä~~zªu:ãOUCbîOaZÄ~uß:zU©.|ýãääC¢£oÄäÜoA A_ä¢|_åÖð:¢rCßÃu.ÜãÃ:aO@ävýB/~_<ýîýß<ö@Ãb/UbÄÄßu>+__zßðÃZ¢¢Z|Ãœ îhrrãðÖ:vB¢AÃœBßo<ܪbAaOrüv@ä uOZBîO~>~,~¢BvuOîüOß:ßßOZzîüau|.îhbð öäðu©å+a.ðÖüAbz Aä.,Bß~Z¢>*ßOÃüuZãöBv~ßð.oÃ¥+hýüovbäv£@uhv£ªo_|ã©ü_©rCub:b<ýöðrh¢@O|BåÃ|Öªßߢý¢,ã r.ª ÃœAba.uo_Zrb>ü£*aÖßZüî~z,::.BhªÃß@zÃo>B:<.u ¢ÖCaýAã|.h£.rã_ößb,©© ß|Ãv©£ :/bzbz©åå_.ä_@à ߣo>C bã îb BÃöbar>*AB¢o~Cß+ߣCßCuåª@ouh+rühU*Ãœh~*ã A zÄAýîa@ÃbÃßvrää _äý*ýßC>ðU £Ü/ßßßßðo~_Urª©hZ*ühðZvßý © <~_b£Ãäîªåý<,öÄÖaªßÖ ©ãhöB.+@£ß:hÖü|>ß+@îaßÖ,h|Z<+üb@*ð@hÄ_aZA|h:ß/*/ßAã/öu<¢ß© AUU,|zßoß/.ßv+Uä/©z~Ãuã©*h£~C:î*Auýbßo|hüZ@ý,u~bÃ+Aö>b£ß,|A/©Ub+_bÖb+rbZCO¢,ÃãZC_~îÖ.üãü|O£UCC:ÃUo:z:_Ã>zÖß /UC|vðîB*Zö~uߪãª_bªOzvÃ¥röäv/ÄZho:äöÖ @uz>åýö,/öbzîüU:î©ö*o/Bð/+,ð >£©bZAäZÃ.vöß@îrhßzåÄ|Oý.OBh,b@ªAbðz.U¢ö,orUÃ,*ðOÃz|BAªö:©£BðÃî¢å©ðÃ~ªßåo*>_*özaßoü£Öö>ý<ýäê@A©v~*a<¢*|ð/,Ö@bª>+¢ZÜÖUåöoðUªÃbZ¢ ßZÃœ~Z@Oß,Ãz_Ö<.,**üUvîAÃ.ã|,ÃßähÖ.ÃÜãðbBBö+>|,,/ßu,Ä ,bðUbO/üßb|Ã¥OÃœ Ü£_/väoz@@hA/C|@/hß+*Ãœ@ÜÖ¢hZäߢ,ªb©O©ö/:UÖ,Ãðhýãu|CÖ+.üýCÜâÃä:ÄåÖ.+:,ä<Ã+hª+ß㪣zbzÃåarB©bÃ¥vßÃ+Z©ãOâ+ãâbýv+¢zöBý.ßoaaÃuZÃœ ýuå¢ÖzÃü©äaðuªbßAðÄbÖöOßz~h©ã/> ª>Ä.O+@bð*Zuü<|_üOÄz|Ä~Abb OOAhu+à Ä£,©h.©üãßaªÃ£ÃrÖåî©+BA*åårbãZoã¢z@bîî~O+BU>o~ <+ÄßCbv¢å*obZäå>b uÖÖ©ßz¢ürr,ö.¢b*ßüvä@/>ð¢|Äýz ©ðvãB©ðã~,OhäbUöö@AðbîUußßUãAuª¢£ä@:©|_+/ü+ä©+|/©ÃªOö,ZÜÃbaz.Bß+ß_b_+_:ußo*ª.Ãv~ÖÖ¢|uü*OabhÃ¥|îå/UOZÃ¥uU >_Bªð/Ö,är/ßA¢ßÖÃoÃ¥@z.|£îvð+u,,*@/hah*.Ãv©vÃhCäß/.~à Äabý/Ä£@+o:ßbv~<ߢ*ÃhU£oÃ¥@Ãœ.Cößß©Aß/bAÄ¢ÜuÃ¥@ßäbãv ¢ßuýr:*ðBðöU,/*£hbavBu~B¢©h:hzßðýüC_Z¢O+Ãœ.Cb:vß*ÃZå©|ý@CÃ,ö/î|ÄÄüa<ýOOOAªO+uh_v£ª>öª£>|Ãuð¢O~UUb@Ba.bhöoUvð£ßC*ßo,hC|Bb<:ÜÜv|ý/+özÃA@ä|<_Ãœ++~ðäB|ßArCC>.a_üZ+êvß|Ã@/zvzߣ|ßÃÃî@î©ÃÃöuvßßvAýåvCäoB_au*©U|Ä+:_ÄÃz¢:+ÃýäzªzåÄoZZ/|_Ä¢£hÃ¥Z|a/OUäßvB~Ä*/Ã¥.äzßöÄ*¢>üvZßîãBAoÖoßÃ|ÃbÃ>ª¢||öý©hä äOoðö>:îöbî/ý__ªvBÃzªÄuuÖýö. ZoÖüÜOý~UäOBßCÃ~o¢aa Ä~.|ÄhüðOö|b|£åh:u+|aAu_rߪ_£~+ð,ý|~*.bba£bîªAu:ß/Ã.£/ Ã*ä*î@/Z~~£©~BzßbOz_+ü ðoªoÃrîüvö©åuaüßüßv|UÃöbÄOr_åäoîZßÃ~£Ão, ©u_ðüraü+ |.>.î/©OAåÜBoªbÄÄ +ou¢åU~>,CÖüO|>@ª>Ãœ+Ãœoý_h>|~bðåU>êuCö_vã,A_/bÃr~£a|ð |rOÃ<+Ãý::>öZ.©ö@@+h:CBß*a,î OC.b.:o~äö|Zð~OUZU*ª.ßObÄ|,| ýb|ðoZ+_Uýrßö©/~oO>¢CÄo|Ãð+ö* ãbªväåý+ÖzßÄbvoß_uüü.îÃÃCOý/CBhB¢ hBî©ðBUuüCÃv+hu/ý.UªoÄob Ä@ vu@ã+¢ä*ªåZåÄrðªýäßär©BÄãao/öã u|îöÖªååÃZäãBC+åüß_b<å©C~Cßý*:..Ö_bzßUoaBüB~*ãa~ßBÜÖCr@UUÃœAýÃÖ,AÃ¥@rr/ßÄåÜ/|/A>Aãß*@ßaª_~,zab/BäZ£bßB Öbý+åý©£BrÖÖOO*U~Avü¢ßhߣ:©~vÜý©ð@bv@:C¢åðZBv Uî@AbA_CÄðöOÃ/zb+zrbã£hbÄCî£BÃ@A_ rÃœbUÄühßßC é ß_ýîr>ªÜ/zöCîAa.ð£,u@ahªUöAãaÖ+,uzZh_h*ãªa¢ðÖãuÖßÄ,à :ßß.,£v:ÖÖ©ð_åªÃååßz|¢@+rã.Ävbz+ÃbÃœ>>ÃhÖzzöuB@ªU_Oh᜙Ãä_ÜÜBzo|baaýðÜ:ö~ö|ðooähªhb©a¢:Ö:î~_: ,:oÖåuB_Ã:bu_äBã|Ä©£oüU<_:_U_arð>v|BÖ.v£bb/~ªÜbª£ª åäßO.r©r/Ããa©voÃZzýbh/A~B@£åÖ+ðªðÃzb©bhîbrãörbÃœz:bÃœz£@O/ßubî_ß/bÖUbüüBbrOBaðªB+AÃ*.Ī¢ö.>äU:aU+ZÜÜrüýß**ý|C|@UãÃãbor+Ä/CZ©,îUA>¢öboîb bà U>,*rßßBaã/Auuzý,ªåÖUb*üvä|ßC>ßÃĪÃ|*Ãz~Boa©rðäö~bð:ß|bOh.B Uüü@AÄz¢<âÄZz©BbÃÜ a¢ub|*ðh@|.ð~ü CO>¢>ªu<ä.ro<îýC:£Ö ¢ÃîüÃÜOBîzÃh ý_î|bZÃÃœh+¢*O/u@:üZߣÃ,v_öÄ.h|_Ãbã>+B|,+A|<+vª> ö~:*. ©Zo¢aC|z£~ãîZ öä/Ã¥~ðÜbuAað/,:|BrzÖOuu<_vßÄðå@+ O,Bh|Ö<_ªbh¢B©Oãb<£~@oâü*zhbo >¢~vý+._/ãr~oBã:ª¢åã.åÜßA©:Ou: .O<©örà ~~_CîÄ>O ð¢äßU îuzý>Ãh.:äüO/.o:©Aü*bZ,,ª|z£ý|C.|¢@©><ö/¢>A.Ãœ h ªaîöbU,/ä¢ýv.O:uÃœ~*uZÄÃz|@Ä_výªZ/üAý©O+ uBßä<©a:bߢrýðbÃ¥Z~,@@ãOÃ¥AÄã:h<|ªuaaOðäßå>v>/*,Z>îoÄbÜãß+ððãÜã| |UAýüîäü.Ãœ>av*Ã_¢. _ýÜ<ß+r£výaAbööðrz. ªArZZvß|aO+r+>a*ßÖuªÜvªü,Ö:bz._uuBÃ@Ãœ|z|©bh£@*~BÃ¥hÄZBh._.B_ª£Ãß,A/:ß+ß/Aßå/Ö.©îåZ:ðª@z_a|Ö*.aÄððUâBåÜÄBÄ©:uÄ£CÃO©zOßråÄå:U¢:aACö>@©bßa@Ããîãä zu ,Ãhbäðu/@B£Ã'), (N''), (N':©+©ß:öZAã_h aßÜÃÄu*<ßh~|ý£ruu>bBÃœOöä©~ZOÖãb©ZOBßîö¢bä©¢_ÃœBßßÃbß*>b|ßåðA'), (N'oÄýbðvß_, vÃ¥auC_.b|ß:/ÃAÃOU¢vðüî>BÃö¢<ããav*Ã_:<ß:Z<ã: <Äaü ÖAOZ<*++î@oîöuÃÃœrBüAýC~bCzrä£r~£uîa~aA,||Aöa_ßb,vÃð@ßð/î|A~.ÜöÜåÄ©*ßb+*aBð<üo~@ uᦁZbãz:Baý:üÜ¢vbzÃ¥:UzÃ¥ î/Ã¥/<Öý>vOö ß~£ßA+ü*+|ChãÄBv£äý@Ä£+¢öäü*a>OßãZ:<©b.Ã¥ @ö*zÖ~Ü£Ãã,r/¢oraÃ¥O,ª Ã¥+ z|Uª~ª/BOOÃA rvrÃZ£Üª,£Zv£OU>Ãrbýü/A_bhUüBv:Crßbü@*zßhã,U@C~ÃrßÜ>ß:äh*î©@vîßÜußÃCvýîãZ¢ãÖ£BUCbüö~AýZÃö𪪩Ü|uAªaÄ/:/uððuO¢BbªÃbB@©¢@Ä©CÃœBCä:+ðC vvᄚr*+>Z,/ÄãäÖ~㣠*£üý@_*raß©>Ã~£/äývB A¢ÄzvÃœA~vÖ|ðvÃœh@ðz<@ßzýb¢~Öýãßr:ßÃA_îð|BCu ýªvUß@ððÃÜ|@Ä¢©©ÃabÃ<_Ch~Ã~¢aÃ+,ªýa/* ö:ðä@ÃuOzîuvÃ¥bb<ä/>h©bðZðü,oîâuz*b~ߪA.î,.Ã,ÖãZzhh~ör©å_¢ö|Zbv~Zaö@a>£U,bUv£UîoCBãܪbZBÃOAO£üUÄããã:<ªðö.Cßß@*ÜßAZÄä.hZüÃ:äAö¢£äO©ü>/*ýZvð|Z.|a_vu/+|//ªß,Uö~¢ü|+îÜß:ß+A+ý>îãÜßh_z:ßZ>/ b*ä:o ßA*Ã¥r~ßrB:ä.ý~ö_ÃœaªC.vOovÃ¥~ããbî_äOª C*:ý>ð_ð.<ýß/.ÖbAOr+*¢bU@Bbßh¢ª+*ubýäu>A*~/î@Ãœ./Zã>©ýuý>zu<,ãÄßÜå¢:r ÃœußÃOAÃœOoÃÖâ_zhö+CU~ãÖBO¢Ü©AÃ¥zrC>ªÃüßrrzo>ÄÃro<£öU*üÖB|b~ý.ý>Cã:>@bÃ/ü|ðAv_oA.ü:zAB¢üU+.A¢,ãÜußA£vrÃCßrüÃ.ð<_.aOaöÃÜrZ*>ßCö_zî䢪ußã_ ý/Üð|Ã@Ä>,ö~ýAa:*<ãév_>Uäýo<üý>z_©ü|oZ¢/@<<_<üb,oubhäÃOÖå+¢Ö+u@./Z:*bÃ¥rruUhßbüÜîîÜ Öî*:äßãuß.Öý|Ä*é:+ÃýCÃœOZ@äöå£ß ©z*,ZÖÄýbh,,OßUß @ßzÃ*üvB,hüöå*oª. v+ü,îÖ,¢äÄ+ý>Zb¢*ã>¢z*bZî¢ÃAOßUÜÖ:ý/*Cî_zÃB|Ä,£ÃîUýzBÃœaîz©>ZA*:b<~UAzªvUöü ~v>|>ýAhðßðÃü:bh©ª¢>övabCo¢+ZýÃ+C:.£ßBazar@v|îv|u<ª¢ :,zU/:**©äöb_|@A/ |ªz>ÃÖÖ@uÃ¥bhß+Cb©bC,+£©ö**~ra Ö@ßhAaaö£|>îu:z@b|ö<î:ðAüðö+o,o_>Ã¥h@*©*CbÄ,_î:.r£ßzAv_/ZªÖoBb¢ßv.ö, Ãœo+rã/Ob,h>>Öà BhZü:äð~>Ub.ðhhöbbåä©ðß.BUuu¢©ªzî:OZ©/Ã¥<ä~åößavðvO/.ää©ozääu¢Ãöã£Ã@:öäZ¢r.ýbAä¢BüZü:uO:Aßaüß|©ão¢bzb>ßý.åßr:ä~h:UÃœU*Ã>ª:Z<£ðå>b_~ã:ý||ªoZ||/ýýorÃ¥@_Ãœ.<.C:äÜaob@+éäAhhå©OBbOðoªß@äu_CrhOa öðÖ|ZÃ¥bß<Ö,@_<,éZrbZrãZ<@Ãý*v ßUÜ©ãßäb>üaAã/ýzÃo,@ãýüAÃBAä@+ý+£ÄOÖr©b+:Bâãäbaý.Bu¢b>Cãäoh>ÃühîArA,~ o~£ýhhB îo©bö*Ã¥B/_Äbã_ßUzU+Ãߣaª.bö¢üb*üÖ_výãªaßaðÜ>Ã@>ªÜ.©åÜ+>Uob©ä,UC+OÃzZZß,ÄU~Äåå>ðå~ ã|+bðvãvãÄåAB/U.ªzOhÃãã~Ã@h©ß,¢|uüåa<_ ~Ã~uîÃ+ <¢ß~ößårîðð*.COU~vvbða.o¢Äß>,C|ÃÜÖåî~aãîðzBÃœBb¢ ªbäß C_Z>ãb,/åÜ~rz©b.vu¢ßO.ý*,Ãœb£ß¢~Z©h@r/ßÄUÃ¥v_/uC+:ßOAåäýoÄ|öBbaÖ£UOz@ooåü:@,öîä_Cv.~㪪Ä.Ãýߢ>Ä¢Uh¢zUð~rzðr|*uÃ¥:ýß.ÃÃaÖrvÃo v@©+ ßÖaAªöObubý_ ÜÄðüCrü.ß Ö,ªAAãÄüÃîüýhð Bªäar|OÖovß+*~Zî|ð>Ö£ýîhu@BZ£*Ãœ~a£a~C.ªÜ|¢:Öu<*+.ý,b¢o©BÃÄÜÃ:îBß>U*Ä~Ãßo Ãra_oðÖoÄä©öÄöãüðî,¢îz©@£vüC£ßÃOUÖîü©|_ßA@ÃA/ãÜz@éÜ._..@<ååö¢@ðC<Äöbäz*+ª~,|¢Bß<©~îhüÜÄ <:O©£ã.aßðühßU©.z.ßöAãî,b,ZbªÜoÃý¢|.hÃÄÖo+ÖÄC©£.ð>ã_üÖz¢_ß~v_+,AÖvhrÃvZªÄbÜ£Brv.ÃÃ¥CCöªÃuzðä*C/rßýÃöä@/Ä©ruãîü©_*@O@©Uvbo_îîÖ,ö>väý£*v.Ã¥zo:îÄÜßv¢,@ßöð@|Ä£ßz¢_üvvÃ|býaObCZu@Ãœ**+ãv+äC|* .öÄ:CvÖOO£ýrÖv¢r/Ä£Äaß*Z.|üvª.oOuÃ~b<¢aA: ~Ä+Oü,£o..î¢z¢~.b_z>~Ãœ<ßüAÃ_Ã᎛UÃr¢îuª|ª/ýÃZ~.öbß*übÖ <,BÃA|rßZä.C,Ä@Oßu@h@Äîu +Ã¥UrzÃ¥/vb|ªBC>ü*öUC£>¢ß|£_Ö_ªßÜ<ä*£©ö~üüýãzhîb©Ä|ß~:Ãœ~ãÃBÃ|Öhî£vßhuÖãZ,*vo©£z££|äAüßrzÃZ@ð~vAuãbOb*Üãîåv,Ur¢îO./býîBðãb>/öUîÄh bz~:vzäÃöhÄ.üBb,*>huA Ão*ýã*î©ý_vîozzÄohOvöür/b,*_î,~ðZÃ~.Cv:@ãZoOhböÜb¢*ýAÃœ+Üüîð:ý*Ãœ~ö*ª.Äåªå©£/£ßAZa/~~uß<@bOa: ,*Ãüö¢ða,Ã¥>@*_ð_Zv~vzÃßã©ãÖ¢@o@ßZäðhßz|*|hv<ÖOÄ£A>bC|Ch ß:ßð+ß..ßv>Ãœ/vUãvzðO< b>hBªAB,u'), (N'ª *>¢ýÜÄã£<©ðrÃœUrävOöä:+zßvr,z/A bãðî*£ o<¢Ã~ßrîßÜå_üaÃœÃåürßÄ~z_r:*Ã¥+ä*ärða~++¢.îb ZBAðhߢ~obCOÃU rÃCz+Aªvß.Ä,Z/ oZ£AUã,r,~a ý~ðÖ/|Z+<öOÖ/ÃvoazðÖ|ü*ß@©ý<ß<ÃÄ+êÃå©vßýbãrBîª@~urB£vÃœAUCuÃœ~ß|ýu:,Ãh~Z ABÖ@CoÄ¢b<î~Z¢bBð~/Ãœ/>Ur<äü£>ä,aðäb_>vîB,ªÄCîýÄ~,Zß_h@Ã¥@ä|AvObhrbå£.|@~£©*+ãÜCZ>o+Urbãå.ü_Ãöu£îz:>AA ZAåÃoäÜhbÖÃZ_CßãðhUaU/Aã£/A/b+ZBvoä*+>îüBvðßö©Ã@B<_*ßaBãýbbÃß b©:£A+U::.Uvîü>UîýÃ> ªãðzUbA+ :ohÖrv Z¢zZ£ahC@CC Ãhbý ý<ß_*ÃœzuBhöbChÃœUðª*/uêÄßÜCöâO.OßÜÃ/Üöãab|äOA,ü*Bß_Ã|BzÃ¥CÃ|©*_:ü_îZ+bßo©>.hCÃ@ß+oª~ߢĢÄ:ä A+O©_Bî¢CCªZz©åOhöOh~öO>Ãö£ ßZ~ðrÃaB¢ßa|UbãÃÃ¥U:~O©b.B,AßvÃ@ððA_aÄA~b_.zÖö/ãîBößba,©b@ðbZÃ¥*z_B/ã*ßO©aö:~,abÜßC/_¢Ü:Ãý>öOBbüüoCÜ©>~>BðvÃœh|ßvb:ovO:ß©Ü£Öäãåý~üü>.Zu,vu¢*¢+ýzCOUäÃðÜß>*/aaÖÄ£uðÃßob,ýãbÃ¥b_COzÃœ ¢Ã~av£rOýbãu+@>ühÃÃoobßvAÃbÃU,ohuÃCAbr£A¢übzhª©+_|ý<¢¢O~î ü|ª:ö~îÄaÃ,<îðb£_Oü_CÃuB/oA<./~ýüb©b/übaª/r__ðZvOuO.Oä+OÃör,oðÃ@Ã_@äÖzOUOßBÄ<+>ÜÃãC+>Ã@uOvãý£åÃö©£ý.Ã@,OÃ¥:©Uª.@ýÖÜã£ß AaAZÃ<©+.@Ã¥UÃhª+ba,+oBa@AÜâA|UAoÃ>ß©ýu.@ÃZ£vã©|äãðüöz/ðßߪÄßA*ävãbb£ßÄbÜüã<ß+UOBCÖO¢ZbäU|ýã+@ª< .+.Ü¢ðbCäOý:üB/|.ªÄZouýÜrßbßäÃv++h,aã.ß@O>OhZäÄu:bßOAܪB~Ã¥:OvA B>hh£ /~ZzAÃœvO<ÜåÖÄ v/Ü£ÃöA üAªvhoB£oÄbîA:@åýý ðBC|/_Ãb£Ä<:ÃZC¢vÃÜ¢CBãªo©ßzßîå£Ã¢Cuä:OÄ/b/ðÃv,¢ðãvru+rßv>.ÖÄ,ZÖããÜboåÖß>bOb£îðîZr,ö£Ã/ /Zö*b/ýbßÃBã< :Ab:ÃoOoo+~>:@a Bh.:¢åö.ÖbbhUüßB.üÖ*Ã¥OývhvC~Ãœ_ýb<Ü£:ðohz+Ö+£rbªBÃœ+ä©,ZoZr:*rb*ðAv<@Ã,a£ßZÄ ßÄA@~:üCß©ßÃOª+U<ßöuaã +Ä_îÃÖÄb,©ü*|OðÖÃCUB+/ß BAÃœOý*< ý+©ßA|v*Bª/auvßb_brCÃœÃüððuß©ý_Bbr£*O@CÃOãåýÜaÃœBãuãöh+_v.Ãåßê+|@,ß~ð¢_/ AvÃ¥ÃrðoCý/UîhîßBbÖÜUî/U>/vªü@îªrr¢CB©@ußÃÃÃoh©+>ý>ãäÖO.~A,zözrªbãbÃ@ßÃ/__ü@uÃb+ÖåCüabÃ/ar@bvuZ>@B© býãÃvbZzß©OåüA_bru~aBª©zv©o U:ýhAÖZÃœb.ÄöÜ.£*a£Bu©UZz>£u:z@.ªîöb ÃbãuÃÖaÃœ@£U©ö Z¢|ð©aoâ,@ß<@aCAß* £üßå<îu@Üã.|@ýUßAüZboa.:ÃðZ>Ãœ.ª.z¢© ß©/ÖÜ£îßüüz>vubb@zo£_*r|¢ÃÃ*UaUÃ¥zîý+@_v>B¢<êßu|*_Ã¥a:AÃœ:<Ã¥hbð|_üÃ.r+uÄ_üA£|îå:üß@OaÄCu/vC@å£.u~@B@ýOªä £ýðüß<Ã¥~aîz_Ö_ãä>ýðUÄßå|ßbAß*<Ãœu©ã+Ärv¢ßUöåÖCÃãüU©>O©ª¢ßC*hÃ:bu_hbäîOC£U+hýÜöh/hub|Ãü~_bu_~ãCÃ¥ rÄ ¢AßößCaUß_ªãäýða>.<_|__ß©£_ßh<ßßbª@, ZU/ÃÄÜa/,©ªîB+ðÄOÃœb>ývo~OC ÃßÜU<@©uoAããÖ@+ZüðîABÃ¥Bîã/î aBã@ª/v¢ª.h,/oÜ© ð ü¢ýO©vBUäÃÃ¥.A¢*ubO U vÖ©_Ãœ@~öB.|ðBðÄAðOU>r.îÃaBÃœBðÃ<ý©aÄåz£îÖ>ZÃœzz<ðâOhaBÖCäãö@©Ö>a+ð|UBrãÃvZ>ýð¢~.@Ob:Öª<îðåäA*Cuýýv,,ÃUß>ß:äÃ~Öruv_a>ÃbvÃœ:©zu*ß+ob>a£ur©Z*|©ZÃÖ OãÜßCÄzöý¢öbðªoübÄ©BÖ_ýbäÄoC+üAà h_ÃA|A*rb£ªv~+Ã.ÃuAbu/h©Äö,|r~aªUÃßb:ð>© îÃå,ßv*/éÖa¢CÃ,A ª¢ßa<¢ýaã|£öÖÄ*Ö ÃvZî©bC>îv~ª¢BÃ/ªåA_îuU,Ãœ/ÜÜÖðA£åÜöhÖ.ð~©>~+,,r<ü@oßzu/@aÃ¥hUv*ÃýuöÃäh_©rü:ä,£åý+uzßuÖr*£ .häZÃzzÖ~h:©* .ãöäã*bÃ¥CåÖAü|@ua~b@Ä.ßðvh|¢bÖ_Äåü++ß*>zZ_aü@£*ÖU+CÃ¥~ߢaAA~ÄÜ/ã+*AoýOh.©BÃœUO.ã,¢ßß+©¢£hb*+ ÜÖß@ãâ¢<>*~Bö/ßß|/ªr£üðýboÃÃîB£ßߣðZU,>ÃœuîC/uZÄOä >îÖhCÜå_ß@åð~.ÃÖZz@>|oößýÖä<ÖÖ/|ã~ªÖb©@h.êüåz ÄÖ:a.©+Ö üðo+ð.ßAb BaßöÄ¢Ü,bÃ¥|üö©/hÃZÖAÃ¥:ßZßC>oraÃ¥|Ã¥_rzîßÖ,¢ZZäÖýý<öÜÃ>vb:¢O@o~C¢ObýýB,:CUð_+,ªoü@ßhar/ ,zãB~h+£ovaCuåÖî~aã_Ööå£ã:uý*:B.ÖÖªÃUzåüäZ,C+>öbÜî_a+Ã¥|/.OUCð+ZÃOª+hu:ðBAäOoZbbÖb<ýÄðÜC<ßÄUvä@rBå¢îî¢ÜoãÜB|>ZCÃœ~u+ßr>äã>uA >r£u@£BZ£oohv oöãr¢OÃö£A>Ãa~AÃœ.©ª:£¢CäbärßC/bU_ä*îýZªã¢|_¢Ãߢ>väÖ<_ßÃ@ßýoÖýåãuövooUCÃœCbÖãBB>hUuÄ|U̻̅oßBahããÃÄ ©:©o*ßßð/:h£¢/AvªÃö*©uð>ÃœzU¢Zä,Abî ÄvaÃ¥>Ã>Ä+OU£bÜäÄðU>OaÖý+b_O¢|bC~ÄC a~ä/ªO@| _£rä.h<ß|Ãzöv¢ßö_ähzb£öö:äCbßåa>O©ã,* u/~ Aýß+ÃüA>bz,UvîÄU.|a.a©Äßܪß/~u£ÄÃêühbCoaZßÃCð,ð©Cð£.o +výªhoªîã©Ã@_ZÖB /ä,ÄãAÃãräÖª|ý~<,z.zZý~*@,îOªÜ ö /ð©Ãr+o:hbÄÃ<ßh_hb_U_OîärOA~>îä>+AÃ~bz|>oÄîA*ÃB+£h/raã~,vUO¢î|Ãœ*¢u*/b|:ß@bbãZÃ¥@:B£ö*<©>@: zãhð~ªö_,C,£zB©ªÃöÜÖC,ÄÄ_U¢.åöÄßüÖv¢Ã~<<Ã¥Ã>,b/*ä©äý|ÖÄrîC., ü@£/.|Ã_ßbðB:Zä,Ã¥z£CîÜÃAüobU_*>ZOh>+bbý@ÖßA¢ðåB:äßAßÖZ/rߢ/a<_£î Ãœ11/19/2008 4:39:16 PMThe quick brown fox jumps over the lazy dog0123456789,.;:?[]{}()-+*\%^=~!@#_|/0111/19/2008 4:39:16 PMThe quick brown fox jumps over the lazy dog0123456789,.;:?[]{}()-+*\%^=~!@#_|/01'))"; + break; + + case 11: + $query = "INSERT INTO [$tableName] ([c1_int], [c2_tinyint], [c3_smallint], [c4_bigint], [c5_bit], [c6_float], [c7_real], [c8_decimal], [c9_numeric], [c10_money], [c11_smallmoney], [c12_char], [c13_varchar], [c14_varchar_max], [c15_nchar], [c16_nvarchar], [c17_nvarchar_max], [c18_text], [c19_ntext], [c20_binary], [c21_varbinary], [c22_varbinary_max], [c23_image], [c24_uniqueidentifier], [c25_datetime], [c26_smalldatetime], [c28_xml]) VALUES ((null), (128), (-22040), (246773244), (1), (null), (0), (0.2401), (0.5885), (922337203685477.5807), (0.8789), ('ÖCrîUZCÄ/UzßßbBA©ãå>BÖýð~Aßo+ÖräüÜýÃ.£>UÄA+Ã¥_ý£üöA:bOAoßãî:bu@bý£ß~<rbÃZuÄã£ð_î@.b |Ã¥bAZbaÖ©AüU|+br*Äâaou<|Öö*ÄÖßr|ÖåvrbU/O Avv:ZvÃ¥*_ßÃ. .©~:_B©bîrÖ©ß>ßýZvCb@Ãœ:ÃœB*v ,ü¢ZÃ'), ('.r©Äru@,ar+ÃÜöö.aðà að+aö©CO'), ('vU£ðz~.ãzvbÖîü||/AuvÜ©AA>᜙@B ªßZB:CA¢ß~b,böov>ªhåðÖrh:räoZ©vÃœoU/ u@bo ZîÜÃ/b:+ãößU_Öðbã¢h:/BÖo,å£ÄObý_ý|¢ä.,ah.ß/Ä:@¢>>U,åöÃåro¢ |.ÖOßövUüCb©/¢ýb££AÃåvorö£CªzÃ/Äßb:㢣Örv£+/~öUö¢U|Cö:zv|uhã©öZÃ+ä+ov,aaZ<ª¢ÜÖ+Ãä£Ã:åªäªo*övvBéCÜü:u Ãœ,Ã<ýz_bö@B>Ã¥ZÃßbåð~b<>~.,BrzrAᦜbb.£rÃua>övüuÄÃÃ¥:uÖÖ££öåäßCî>oa~hªUßÃ.,_CÃv@AðO~ îbäOÖý,h@Ãœ,|z@ ö©ãª<îhbãu¢ð,.äöª_|ªbh,+ªãÃr£ýüßuð~*b|B.ÃœAAüCbaÄ©ãÜAÃðvßv<ý£uð,ãUßÃ<ã>Ã¥b/hßAC/U_ßý_ßrðbz©ÜB~|:rã¢OÄz,_äOöê~BuÃßu:ßU,ª£ Ã,ßb.Z<üöý,ðÃöhZC*ä: >u:Bv+C£ö/A_,~aÃÜÜ©v¢¢BßÖBZz_CAÃOýuO*ýhð+ a_+,**h_*~rrÃäC¢ ObßCß.z+,*ß,ߢÃîz¢|:+ÃðoýÜ:_ýZ*bÄ£üã|uOhbaöýzo_ü:Z,U_Oü/h¢CbüÖ,BýÜ©o£î B:.,*ßöãßu_©_ÃðBhOz¢äý_>,z_üzÃœhᛜrÃœZß<©ÃrävCAhru£ã*,@üb~.aª*©håßru~ö:ü~Ã¥O.oÃaßÖOãzbªoßöAÃOaCÃÜßO,zuUÃ¥b~+ îBUr~zrÃ.@*bZ£,Z|vZöhZhðüÜ£.hBÜ¢O+z@öÃÖ@©uãÃz>ýÖ|~_.:Ã¥:+Ö,ÃœaÃ¥auîßU:Ãœ:ÄrÃ¥Boãð//¢:Üîã||*ozîöÖ_îÖ¢£ýöîbArZã,£ zb_ðzÃœzuýo©*:BoÃ¥>ö£ý*@Oð>_|.|ªaoîaäv+a/Ãœ~@£< ~/üå Üåéýßä¢/Ãœrî©+o>//Uî@>>ä,ßäêîB~_UßC/Uab,Ã|©|ÃäZ ßoaÃýßZ,ävoöoa_©ª*._bbr.O@ÜðãzÃü~+ÜÖBä|._Ã|üãCuÃAýü*/ÃZÃö~_:b*_|~r+ßUÃœ~ÖÜaaz@u~bZbîã *_ãBAß@zB*OOý,£Ö/ÖOauÄZZ*ÜäÖåãÃåboz:ßvB.@,~+Ã¥_ªÜzB¢Ü©ðBhv+b*ð+Uvhr/©ªîîu£Ö<ãCð,ßOB:ÃœuðuoboO:OÖ>oh UÃBðo,O,Cî/UA*ýUOãî:brýZª/Ä:bîv Äß©ÃÃUöbªßßzÄãhã<ö~©U©ZAÄß ÄÃÃ*u£C@U©Z@ðîãäu.©|ÃœzåýCzªbA>¢üððu+ä<~£ªzîoO.©Ö.ßb¢AU|.ßÃUîbb>Ãbz~ý©<ýÃãAü:,Ãßãã©r/að©+ß|hU©~_ßOCäã©Bðß ßaZBabð|vu,ZZA,ðªäîä>o/.£uªöãüÃÃ,Buð+Zß>rÃ.+o@Ã¥b<îbuAüã¢~Ã¥/Ãœ:üÄZ<©îrß:_ b.£ßÖbvh*_:öî@Ä.vª >äaAuýhÃ¥<¢ÃZa+ÃoªzaÃ¥>ªZ/ð@Ö+üö<ðrCbZêävU+îO|UîZÃ¥rb:>bßß/©A|zÃÖB~ªO+~ör|,b~,Ã¥>>öZ üOªAÃœBBÄäA~zö|ªßªüb_Ãða>b::,îðobvýÄ~>_ßbvÃ¥boýBBAÃœbî_åâAOCý ¢Äßðå@AöãAzbhýZßäã@ö*/ªãA¢O_+©.,_~Oªð>©|ÃÃÃ_bÃ¥rUãbrUzB_>U:hvAC||ýoã*à Äh>Ãœ_oßöUåÃaA,bÃ@hýo v_.>ð ¢UÃuä@ü,,ýZU*ÄZuv~Abo@z¢Ã*|a/~bZªßoÄ|£ã>ba£ÄUî¢/bbZã<ãoBöb_>öüüßða¢__|£¢Ã_Aoä~,ßÄCö+zußÖ©bÖ>C _BAäßuvBÃ¥<.©Bðßýu*©ÃÜßaª>Ãråä<ßo>.ýöhaßO_ªu<ü£håð©ã,ß+_Ãb/*Ba,U.©UoÃöåäu|>ro~_£ã| ör£.*häväãÃoo+ßßÄ>/ðbߢã O+h@ß>_Ã/AÃœUîAßÃao|ä*bÜÜÄð*C,î+a~aöoÃ¥ÃöªbãåÜ@AýÃOo©Zîö,vÃ*,©vBÃœh¢£Üvðh©ðßbãU<Ãœou.üÄOÃœ:Uh>U:_ Z*öbÃoÃ¥UÃßb>Ã:äCoÜðrOUZ+ª+o.£Ü©©Cª@ÃåOêvü©h©©Aý,a :_*oAb~:*a:ªüo,,hðoUübzðr~oÄð*oa£/rCÃœ/>¢zÃ+ªß+ÃýZZÃ¥buÖ*.U/ö:îä@aã/ö_övªÃ/_öU©ÃBßåo.£:Bßåbßä*>bÄ/r+Ãœ+.obaÃO¢©ßCÖ| C|Ö/ä_ãb:h.Ur,ß@AZîÃ.ÄC.üZBBuãðä@Ã:Ã¥abauß_zvvÖ媣/©¢ ü/|Ãœr*rß>uhzýÜ,ýÜ~£ã.u+öýUUªªåäaßðÃb¢ßöB~ b/üa:uhCÃÜöaaðAßAüvCÃ¥|îo>ªßOvzä¢ubUÃ¥rößÖ+>rBbÜðßAßÖýß<:>_ß@ä.üã,îzÜöÃoªBh@Ö,*ßCÄ©ýh/_åßÖªÃ*,/ü ,£ßrÖýýhÃ¥u©ãZÄbhÃÃßO/ß.ãA@A ößr£OO*Ã_ª+ÄÃãUuÃ¥A>A_~¢Ã¢Üî|Uüouü©Obaa©B+ ªC B>~|OöýaýÜ+O@A,ZÃœ>|/hÖA£Orä+,©uü>+_Z ýbAOuýîßå>ývß~ßAÃr*<ð,ýB¢ªz_,Ãhoäß+<.Z~*bBZr@AuC:åüZZ_O,ªÄZBÃœ/B +ðÄZb:,åª< >ÃœÃA~/Uö ,rÃ¥ ¢üäÄý<|¢aöãªzöbýßî/Z>oüãZ@bCü*üAzãbhUa£|ðZý,Ãœu|î@oßýU.h+@ð©£üZÃâ©~Zä_vßUÃ¥+uo|bbüO~ß@ýÜåé¢z ý~£ªvÃœC¢vAüîaÖ+bðröäªÃÜÃår£åêOðö:UZĪåßö/Ãh¢å@u.ãÖ<©:ÃzßöÃbhuö£äAü_>b zhðoý£bý©.<ääÄU<Ãö<Üåß©Ä>bZªðüÄ @/o@_~zoîÃ,ÄÖBßhÃœ<ß|~|/>Äî*©å_ÖîvÃ~_B£©|ßAo>u*ðÃ,ð:©ÄUß+ªåªßÃäÃbzÃ¥CÖZC>~ªü¢:|,Czüß+üA_ÃœAÃ¥uöubååöZBr*Uo:Z.Ã¥bâ ßrÃœZßå>ÖbÖBbäbOZ@ÄBÃO:rÃœbß*B_oüü.ßh.<,bÖ:@AüÄÃZ|©_Ã>ðu:*@_/ßbh¢rðª©,v£ªu*vª*,_vZCU:åÜåC@ýo@ö~>ba|ZACaîzað:o©¢CöüZhÃã©Ö.b>o,Bh©¢är~ßC>oZrð:özÄ:ååu_©/ßu ßåýªã@uävãz:AzãðußB*Av>äªaObüUýu@_/ÃÃ~Ã<.ýä~+b_~zZCýÜ¢~|A+vv£U>Ãœ ªü~.ßU£Cªðb.ð<_:ªÖÃhý:åüä£ /ão>bUÃœBöO>b:Ã¥oÄ@oCåÄßb<ߣ ob¢_oî ©ÜÜ_*©Ä:@.v¢©BZO/Ä_/ª£Ü©Ã/ð¢Az¢*hhu+ðýß/Ovv¢uOüuäîrãª:ÄAýBãîÖB.ußð<@åîU/îBv*,o/@<ÃÜhBßé/r,ãhîÃBãAãzÃ/*ö£Öð>r+£ã£ /bzZCýOßB©@.za.O>*zhßA ß< äu.Ã>ßÜhö ACýr>_Ãœ.ü.:ýöã.UåðhÃ¥huZÖß,,Býrî_ßåz+öoà ãrOu@+Ã<Ã:>Üå/:©ªzÄozüB*a£ýý>¢_bv/,_|£åýª_åÄ+îähoäuß+AaörB~ßðüðau|rh¢ @O äßoB>bu:~U£.ÄÄu.:*>UäãÄa* ÃZª@ãüÃoüACußo_uAU@Ãb, *uuü|¢¢:ÄÜÃÃ¥*vüüÃý*äZöZÄB ª©Üß~v*öUZ¢ýo_*~,/bvOöbZßÃÄ@A.ö@Ã¥uaüÃîO<_,A©*Ößß@Ä|ã£ßh©ª>Aã_ãîã*CBö_+Ã¥*O._ýÃÖü_Ã,vÃ¥ üêbßZ>vããü,>ªö>zBßoBãªbî>äÃð:ð+Ã¥:C~uªbu/ßâ ~ß_:/~ ©ÃZ,©Ã©©+:üB<öbî*@Ã*r¢,ÃußöU|ý~:aCãOoÄî<ð,ãýä£o,_îOöÖUCbZ|Oãß/C+Ã¥>b*BäÖ£ªu.ßÜ.Ã¥~©_ãߢÄÜýßîª_bÃ>vvZOðÃ_aðöå/Ößîã|Z:ýÄa.ßaðÖö|o~ aÄüzüª+©Üöuo£BhÃ.<üÃ,vz>ã/+Ãr>:ßC©Bîß~aߪb|Ä~ vrîb*~>ªÃ£+C,@_baU :AUÃCÄ>ob ÄãÃÃ¥oooßooäz@ý/@Är>v_Az,CZA>ß ã.:vüߢuu++uäb:o@Uv~az©Üß©_*ÜåC£Aßz/ãUa¢å<ýhî ouðüÖÜUr _ÖÃßuußaÜüå£rîz*|ý h<_vC<©£Ä .ã>h£ßß*©|:+Üð,Ä+/üäß_<~>aý*+ _~BÃ+C+>|C@aÃ¥/åÜĪå,Bu©ã@ä+ð¢£ß:ü aÃ¥vB|v ååä*ߣbÄÃZ,<ýUzîUo>Ã:åðzbA|.ý@¢bªbu*ß>Ãu uî*.üýbÄüAðb_Ã¥aö_vÖB£Är© åðAüBÃ.v.Uü~îBA<ÃA<ÃübOu,vuühÃ>ébBbbÖåZ>ßC¢A+£OĪöÃÃü+ßÖß|ß>:hÄÃvîßaý.öhOroö_OA¢bU@ÖßüÄÄvzUObßb©.åÜ<ãOÃOý__ÃœrÃ¥r¢_O:rªüðzrBÃÃoÖb,h<@©._ßä@ Öv/ð>,B¢£å*äb/üh¢Ä*_uý,~©vu£ävª ~_CObZ.BÃðvb.:z>ÃœZzÃœA_,£>ÖOßuzªaCC<|>Äß+Ãß+uh<ÖÖÖÄObªbðZBZoCCBäb_£UÃ+£ª¢~aU_oCÃ¥AÖð,BoåÄoÃr:r_Ãv£ö Ã>UA,BB|:~ß,hý,h+OÃÜî£ðBaor,båÖ~~ß.,ÃœÃ_zý~/C *b<ß. büO/A|oAuîÃ<|ãußz|a*¢£+ÃœzußÖ©CÄ~©_©¢.,,ߢà .zBäZC_ÃîßbÄ/~.CßÖ.+COBßAoª,îOrÃðzüüãÖüîAî£ýßüBBbOhAýhz*ð~z åå*Ã¥~_uvãZ|ä*är|,.C:ßߪ@U¢äübhbU/£ah_Ãœ.vÖßvÜ¢v©höÖü@<ä@bZߢö©vuÃUz/Äãba¢ýäÃý@ßîýöÃazO@Ãœ~CðãÄh:ª<ª|_zãüZåà _ªo@_<ð£aöUî@Ä_ã~îuZ<@vu,üvªoý/h|ãýo/ª++ß>:£UÃbßÜý++£:äa*öh~rz
C*©Ã+.ý@ã<ýbªýÃî/ßoªb<ßOz./¢u©Ö|ð>éýü£/ä @*/~uu©hCAb@AC.ýÃaÃ>hà ã£åChüîZzCBO.bÃOröb_Ä@,:¢Uav¢Ä*rÃœa~ð C_OuÖÃ.ðöaðüß@|br¢ v.<åü££ªÖî,,<ßãB.î üÜü@ÃUbZßOßo~,v©ð¢£u|BC©A_ª:Oü/hoå£_zîÜ£å*ã/üÖßarhð:Ö©Öå£z>o¢¢CãÖ£ýÄÃÃ+aäa uvÃÃZêUbAü,|ã:ª>::ü¢OÃœZ>bUhÖ~ß:ÄCÖz_@êöÜýozß bðbrý:äÜ@ÖÃ>ö|ÜßoBüß:bobýÖãaãO¢üÃÄouÃ+ãýä U_äaÖAOüßb*aåýÖauu¢ãö CÄßU,_CßUüöCãªOüaßãå+~¢ÃßO<Ão¢+a,î.or>£¢ãAß+bÃœhhßUrßabü_BC/ub/¢¢~öÃðrAÃœ>orA Ãœv£AA äð.|ý öåbbb._..OÃœCAröß:Ä©ßA¢Üß<,OÖ|ÄrAö.ýzüÃ/ãªð~<@aß,b:ÄîOZ BUªÃußãÄýÃO¢u¢ãÖZðO.Ãr*ö,+*@U>hÃœC©uÃBÃ>ãÜuªÖ*,~ÖuÄ.ýaå¢îî£zä/ :<ª,>|.C©_. £<ªªªýܪZ_boÃœUAzß:/£,/ÖChöåA*BAÃ¥|©uozZAzbãAð,:¢U@BZuBÖðrÄ<:©BÃUr>r~BaÃ¥a@.h|_.ãÄÃz¢@UßßÜßÃA:ßã+r*ªã/rä@U¢BÖßöO+ßåÖÜ*bÖÖv@~|Zªý@@ß:© ,|_aßäåvzÃ¥>ÃoCßÃ:.BÃ~_ðhU|:h a.>UzUÖãÖÄrä>ö¢Bßh>oßb,*öÖã£,Ãœu,Öðz:ý>äåbåÃÄîäBªZb//üü@öAoz_,C:ü<ßB|£OBzv¢Cî+©/B£U* *ß/ß,+.ãrz<ð/ÃuBÖ@öCüCo*ã¢|+ÄuîhÖC¢©+zovÖUCühO<£/* CZU+u£BöÜßbCý.*ozB|Ã:+Ã*Äýru£oðð+åÜã@Ö'), (N'*+<ÄCh_ÃœAo_åªåÖªå£u:äz¢äCÖB£>£|Ã@/Cýu£ªä£/¢ý+bÖaAU¢BO~.bÖª~+AîZ+~ä*oÜÖ,Ub+ß/©¢>baB¢va:@öAbu¢buãÃhU.@Ã~Uvã,bᚁ+CB>*öZA+h*,hÄ_Ãœoß_bz.uý+.ã+.ª,ÄOb©'), (N'|åå:CÃ¥Zoz:_ÄbuUvÄ©üîCCöBð¢ÖâubA/vªö£ªr_ößbüz£*,o::.Är,/ðÜ@>C_@b,>ZߢzªC:.özbýßZv+|OÖ©zuÃ¥oaäbÄ.,Zý|ß*_Üäã*özUb,öýUuÖý Ãrbð:ZÃAÖý|ab.aöÃ~Ä .ÄaüßÜbåã>©.ö©ã~Zªz|BzOzÃb _ýZoöÖã,O:£*Uhðü_aðü~¢ îCÜß<>ß.uÃü¢UãýB£Äa<©¢ßýüªÃÃÄ@|zð©ªAOö+î+A.£v>©h|îZv~o£vZÜãäÖbÄÃC©Ä|uöîÃ*BB¢uoÃ:ð~OßUzÃÖa Ã.C@oz Ã_~ßBîªaªî|ßöÜz<ªh£ß©|ߣ,UÃýZª+Ã~ü..Zãä|a.@Ab_ZÄ|@åÄB>*Cß.Ãv_ªªCßUü+Ã¥rÃ¥>ßv£hZªzÃ,ZÄb>a<:bz< ö~a.ß,uã~îã*£,ðßärãrBaävÃ¥@¢ßÖ> |Ä|_uvU Ã¥,/+/BB£ªä~üÃ|h¢ÃäãU.äÜa@~aObBh£¢+rÃ¥Uu.ü/üZ¢|ua©B,rüAªßýãvOZCöß*ö +*U+v¢î£ ãaÄ_oß+.@rüªöavîr zßhAÃœ@OO<.bîß,ðýU£Oª:uOß©.ý£Ãzܪbz~ãOßUr+ýzö*¢,|©öܪÄ~äBª ++@@/O£<ã>ßbß/.üU<ðU:Aa/üÜ_oÃ¥<:>uä/å©ã_Czäßîêh rÖ ,o+Ã¥ *b_©£<ª*A ãüa@Z.ðßö~UBÄ+¢rühhb äüB@~ZÃ¥<ßv/ä,ÖO ©:ð:+/ZBU+OA/@AoZß@~*îãv:¢ð/OðCÄÃvh_Z+ã|¢+ð©©©îO¢vbªößü,>o£zrÃœz,@Ã¥v,ðÖü ߪCöoðOÃ¥Züß Bã.©î.U Ä@*äb_oÃœ,@UÃ¥ZÄÜ ÄaU|ýÖAUöüZ©<ª<>>¢ªzvUå¢Ü,<ÜÄöA+bbüåO©*ö@~@_/|£A.CßÖö@ü~|/£A/r@v|aöÜöb.: +uBÄA:~Ãã¢î/bUîÄÃÃœB îA:bAüßÖCzvUa~£oß©ªå/~|ªbý_¢o¢ü~ U+ä/:öB@äªO+©.<ªÖåbOuÃ¥ :ãýA.O~> ©îÜußÃ+Ã>*~ý,U.~ba.Ãî.C*b,~<ðÃ*vBãÃÖ¢vßa@*©äz b~~/*ooÃœ/Uß.o,hîßßazÃ¥__£ößr.r|ÖUbà ýå< OB ./öuC/å¢_ääý/@Að>|üÖ|ä>|*.bha <ßu|hCÃÃÃÜ@|AÃ¥,bzßööýÜu Ãœ|ð,äÃ+âr+AÜä,ðuÖäOUýߪoZCUOb*Ä~åß~Ozäa.ßöã@*Z/.AÄuîbBÜà u||C__ã©/Ã¥bßÖðåäÜ/AýBßaÃão*hß_ÃœAãäbz/zU,ýãð,*ªZß*AZ£ÃÖu/|äv+rÄäîCbüåä~/:O£ýUåª*uÃ¥|ßÖvCZB¢£Ã~AÃ¥rZüaZz£,ð֪ߢAo/£r ©BÃœbý,|*ä,z_ÖhÃîÖ,o£bé£<:ýaîöO __~Bbß:ðå*.ß+îC.b<|Zü/C|@,_:ðrüar_¢ãööUÖÃZO¢ý£¢BÃœ@hãüv¢©öuö@ Ã¥~äÜ:Ã,bCAðîöåÄaÃ.ßßî~>Aßß>baªoÃü/:£bÃÃ¥rbuð:Ãî ,ÖC>,Öä îbãü¢O*b>äUö@/bðý_ªÃãA*Ã¥>BzÃ¥CÜðBB_~uÖvaÃo/ª/üßüÃO@äoC£vA>BhbAo,bzã/Ã¥<ÄuZªý@u/îðÃhªÃ~ðÜü/v_éCðÃýA@hC*buÃ.åã¢åÄß BäbU<ßzAÃ,ýãA:©Aýö@O~ýªBÄ~ð a£*u O~CrZÖ|vu¢bZ©ÃürߣðO¢ÖCUü_îåýabbÖ@äå|ãÄröî++_ßAåühua.bÃ.<Ã¥uÃãÃZr|a_oãb£üðÃuÃ,ÖÄO>aîäÜb¢Äã/,©ªü*Uªoß@UÃ¥bÃ¥,ãz,Ãü*ü+üCuöOð¢üA+@üöåå.Ã@|Ã@:OÃzh.|£r>ðCzããßÜýCªäÜbî_:ö/ýa:ÃœUã@ö>¢b>bzßåªä¢Abªî@:C©ÃCßÜ©röðoîUZ¢@@z¢/oðB|Aýr +âC|Äa|ÃœubÖüa+*böh©~@~aZBãüoîß~ðoßvzb*_ZbÖzUÃ¥:o|Ã>bã@ÃäBªß<äA,ä,<ßßrBAaªª,_ÖZÖ.¢Ã..,ÖÖ..öOÃuåÃU©åîÜb£ü:Ã>vuß*ãßb@¢Ã.vb£vÄ@*ÃÖ ý U:Ã¥bã/©U~*uhO/~@ö©,>O:BðÃÄA/+o_ovÃ¥~åöÖrbü/ãðã@BZöãÜbö>oß*ü+C.UÃ¥.ßbäZãÃ|O< _âOBo¢Ö<@+:uÃœÃÃœ_ý+b©Ã|.BÜ©ß/vZªªªü.OOÃ¥u>©Ö+A*ãb|bo~ß.©ßOrbz<ãzuUÜäªß ª*Co~ýüO+ÖöªU+BÄßOöouüB|é*_CvOUv b|ÃBÃœ*:äª:ÃœÃîbýüåB,~AÖßv*ã/O.üa@~ÜÃÃr*>~ß~Cb@Ã<@z:ªbä©ZzÖ/ÃððZ:¢:voh,UÃœ@ªßÜ:£Ãâ+îäü*ð©ð<+ýÖ¢|£_h<ªv~*hb©b:bîã£aÃB|A.<Ã¥ub_ZªOabýuývvö,b_B©ýbßà ªa¢Bbà hvBã::z@ã,+rÃ~_îavîäaOBðªu~rßAo~¢Ã<îZÄ,ÖzÖU:bU¢ððZý,uãã*¢äÃCý¢Äßuß|öC£ªZÃ¥h_vö£ã+ª£Z>AÃœ*ßåhZ/ýZÖ©b/uZ©©ßZ©Ã@bZ~.üa*@ *rÃœ:/Ãœbý*Ozª+Ã¥r>.|Ãðãaã Uv>ZÄz.¢Ö/zä©Üäîªßð<,ðÄ.,î|:©~>**/rovÃœvbÖ©ãö| ã£ÃÜzab+ö |BîßÖüüOðü>U|Ä£ã|åÄÄBÜãbbîÖåZb ~î.oz*£O ðª/ðBz£:ªAßÃä:.,r ÄCvh*z_bªö/.äoäÄ©©~>uÖÜo|:v~Ã:aÖCAöbbßUh,bÃÄaOo£åoÃœÃßÄCö*C|îAö oöÃzãuᜆ.:Cobbo+z¢Ä|Ãvö.ðýÄöu*C/Ã_Ãœ äz.b>îz+~öåZör~,uÖ<©ÃîðuBÄ£b ©/@Zß>ýu£bÜö~ßüC/ýAÖÄrübC~ü,OüßUUAð@*ýhêO~ÃÃÄoBöC£Ä¢z¢:::Ou_~A©v_Ã|Ã¥:Ö:ä o_¢Z,,/ä:b Bªö.:bîßîoAhð/hAªr<*rãZoBãobÜß©Cü*OðÃo.,ã¢üOC,ÃäU+ߣüÄCU ßz¢åãAB<îO~UrZ:ßB>|Ã¥CAÃhzß.üAhvuöªöãß>aªåÄuuCªAb+äår_*rÜ¢<~AªC/Öð*zª ¢ý~>üa,ßäÃÃro.£©@üUh*OZ. ~äZü*Bu~rbÃ¥bÃÃUaü/b|U~ u¢OªCâüo:ð©©ü@>~>ªö+ÖªßuaC+Ãräba@b OaAÃß/ÄOOvBüîaåÃü a>Ã. r¢|Ãðo¢ßüvuAuO:oüÃ:Z.CðÃãZýrvCª*B©ãBvÃßa|:hÃÃü©>@oAßuCðbÄãî£o/_ä©äð_*+Ã¥vÃ¥:ÃöýuAäª<©BbÃœCüÃÖ+.ßoãCîvAßACoovÜðÜ,üb<ßAAÃÜ:ÜåÖüß~ý<:ĪªbÄOuß< @ßzã |Ü©å¢ÜCo*/>obbz|oßzuOßð*z~r_*U£ü+î,>@ª|C+ã+£.rrbß:ö¢£oCýÜAÖðå. äAuðÄÃÃêª.*_Ã:£ ö/Ü£/ä rÃœ.Ã<ä¢Uü>@ªrv<+hÃœ Auß~Zz+.ý:£Ã.oÃ¥ÃðvörÖüO,bOä:b:b¢äCãB,rC/C/'), ('zßC:z_|Br||bb.@C:ð*@+aßZ ß*Äo@Bz +bUb.h@îý/z_ÃœbüÃýýOBC.zýßC@rãðÃCå㪣£Z<ýÃ,ö:CÃüA|zhC+ð@UZOvý,ßbA|z/ZO|@ÃœA©©bCZö:r¢ Zb,Ãö ++ªð ðîßZÃãýÜ*bÄUß*@Ä AÄäv+vuÄã:|öÃUßÃAÜÄ~_¢>ÖîªB¢ZühUUä@ÃœC_ßß@ßuZov©å+ÜÖ|ßhÃœ.uB+Ãœoª/ä zÃåÃA¢>üðbÄ,rª£örv>u|/CbC_aOb¢ð,*üã|Ãœo oUªäbbaa<Äßö*ð£Öå~ߪ<ª îzh bUÃœBobð*üü|AaC@_:U©|:Äröüý_ã_ðÃ|öÃüÜâ£î.~©ßz_ß>öbä©¢|ä '), (N'CO>BßAvaBvoÖãã~ÃœoÃ¥A,£/rbÃ¥<, Ü¢_z/@*ruaBä.üz£OÃý:r üUbÄ+@aü*B+ßB,ä ý©ÄÃvböbüî BÃß>öC:©ZUÄhßrU©ý<~äîÜãÃzÖ@bîZýÖ~ÃœÃäý>U|/ÃÃ.öåAÖ~UzuAöäUb<Ää.zo..ßrACÃœ~ðbh~rã<ßbýöbrh <¢î>Ãœ>ß,oh|Zao©ý£ß£,OÃ¥+©,ªÃ©äãU:ýCßý@ý Z.~ bvªUaÖî¢.bzAöÄUÃœ>h:ßÖÃC_Ããîªuã.ÃBãvvußoöÖ| ob|@¢hrÖãbîð~U aZ|u_îÃ䪣äª*ü_h|uÄî¢ðÃA:aßB|Öý@©*/Ãœzzß*ZzÃœAöÖAr/Zö|ZUhåî,.ªh£z*ßüða@Öãv,*¢ hÄBÄý~£Zß.u/r|äîîrr¢ý/uüßa©©:ÃoöªßÖrZĪ|aa_,Ã<ßöîð+rhý Ã>håýîüãCUZß+ß©ªO~£¢üîßU rÄÜ_züߢ>bÃoᛜAO.h/©/huzOª>+*ß©î_ÃœOOzßZ>råÜü:+üa~ß>©ß©Ü~|uh*Zvhvavvã:ãåªäð:_+Uäߣ>Ãœ|ZaBÃ¥aª¢b©ðuðÖ@öOBC|Ãîîßäuuuz+zÄß>~üaO,ããußðöÄ@ßäz©Ã_öA©,rU©Ü+ Ã+r./o_öaÃvÄ@býäoÃ.+ýÃ~oä:î~ßöÃb<Ã¥h|ÃZB¢z+©Avu@~.*bü+a ýÜb|ýUühböuU¢ö/Cäªßb¢A_å¢ö o:äÖÃ:_hÜÃÃB+ Uªbbýå£ýUu+|öÄüUoðAðß©rr@Ãœbߣ.h>.Ã,.:ߢb©Ou¢+C@ãO__ßb:@|,Ã¥_ußã ßBÃ¥orz|Ãœ ZüU¢:~ß,UU¢CÃ¥ /ürãa|Z.vßä._>ü @¢Ör>BrîBßbhý|urðÜ:ra<_rbåÃ.ÖbA /ðÄa*Ãß ÃœZÃr>h.Ī£<ÃœAÖ bb|o¢,ÃœhbßÖÃbãräUöC/ÄÖ*Äî:üßC|UZê©ðß@röýh©.Ö:*Ã¥,ßUßð ªZÃävo.öA<_,AÖoß.îa¢b*B<ªzÃußãðUh*Ö>o|¢ÄbaÃ:îbäz@rß>ZöÃý@ý å£ß¢hZvUÃa©¢ävz|bª£~_:/êb.örªÖýouÖbU,ªo¢ßozä~öUý,©+Ã¥.Ãœ.rhAbÃ¥zbBUÃ<¢@u ©a<öÃZhãABoüßð+CÖ/ äB*@Z ÖbbOBzÄÖba+,:bCbZaýÄ Uoä~ÃOO*uz>O¢ýub©ðß/rÖðaÄZ,rßß*_~ý>îO~+h@.ãÄårãbåý¢brvC>Uää/ßý_.ööª¢< îb_£îßîuh>/ zßOZ*zÃ¥a£ Ãö _ä/Öðªu~|B|__*z~AÃ+a<©Ãu©ªzÃ:©|*ª +ö<:rîrÃÖâÃßö|/¢~*ðääCrB Zßv+åªÄ~är.ᦁr bbÃ¥CBöCªo_özCã_uvÃ<_ãr£äBobßOCO,ýÃýðB_+|ãr*©.ÃÜAÄ*zoh+ª<Ãœ.~öAUü¢hêðvZ~îaaoð.hvß:Aêo*O¢zBZ¢h,vðoÃ<ßo_ã_@Uüu:vO*hÖ>a@*<Ãœ>ý¢oýüܪÖUÖ©©<£îOOBî+üOAîö>+îU.ßvÃzOðÃ_|:+>©©Cªã v|,@ß~Ub:.Ã>ãö.ýo:ü>¢_/a<ü@.vßUz.b|ÃZÃœ+ />Bb©ý+|bÃ>£¢ ÃÄC,bäbãߢo,bÖ,ÃÃ,B£bh/,*>~ö | ª©B+ã|îÃ@v~Ã:îvî¢O aC_ýv|ZÃA_vC>uz_Äý+|Oߣ|+<:ýAo_a*ð< u,ýäh@£Ãoã*ÃbbbÄv|Ã¥rðß|ßAã@ÜĪßvý£+,C/C:z¢oÃz+.öCãÃÃœAv,.ßrßZýåý|AbÖ.é~ã:/îZ£å<©.|£äåAuÄUü|ðªß:.£ª£Uªav:vî ~+CÜöÃoä.UC©aãAoÃC©u£ý<¢buUb.zrªýâ*hOªr:öAO_ð£,~ã@*ª©Ãªî<ÄÄÃzrÃA_>:ÖÃöZBC|ã<~ßãazaA:©<îÄ*@ðhAu*Oîßüähða£ª,ªh£¢ãzr>,ZOu+b~Ã,oAhbÃ¥r©~ßßýä,a+ãväÖbé¢ö@ãba©/îv,@ã¢: Äðübb>r¢avß+Brã©©>.r_bh©î*ðÃ<äOÖ,öoßB©ªhÃîãßrZ Ã.Ãã uUß©ßzhÃ|¢z ᛌ~r,~*ýA~öauUB ª/£:rb/,*ý_,ß<ÖÃ|Ãüu>A~äÃÖ>Äb¢îzUhߣbü|Ãv/¢,©+öZbr¢ðî.b.~üOªvAbo@>h,a㢪ouöb.rr*ßu£ãýü,ãb,bBÜöü>ª¢@öðu:ü oýðÄ.>obßåß>äÄü|b|ÃœZaÖ@.ßu©öÃö¢ah.+ªäOvä_~<ªhaÃð|+å£Ãà .<>îrãr ãvß*/**ÄäzîÖ.ZîvÃœ<Ã,*bý :Büh*vbA U¢* £Z~u£a*Üðîh|UCÄBßýÜv<î*+u+~UÃ¥.o£|öCroOÃb¢_@Oã~Ch ð@väbãÖörýZ/CÃ¥@Ö<ýza@ö£ZÄ£ð,o_£v/îüååÜ>B+UüO.¢@©ý/*~ßhßüåýo.ð*Ü£*aýrî¢åÄAO|öäÜ|ý~ß_ß@b.Ã¥_ßöOãÃ~_Ä|ðÃ*ᛛ:oðäå Ãî|ðbo|ª@_,Ãœb£>£©z~AUzäߢÜOî +h_auCA¢î©.üBA+*~ÃüCß>¢Zãb,bÖzvý£Zo.ãÖã@Ã¥@vohÃüäª,/ ßåü@ãå/£ßÃýBßðC|vvuÖãÜZî|ªÄß>oouÃà ,@üroßoÄh@o+rª.ª O©OB_ãbbUZß/aüýoab|Ößz¢å*ZUCÃßý:Ã_a©/ABÃÄZßZðªZBbß©ý|¢~ðåzÃv~ö+:z*Ö<ü Äüüãb@< öÖaobÃ¥CýåböBßhzãoÖî+ý|äßhÃBÃaÃ~b/_*ýv/î> z<©@Ã¥_~©h©Z¢C*,îOazß.üh>å£UÃœ ~Ää.A©bOZUr>AÃ¥bZ:zrübb.~Ãð *O£uZß*|ü.rb©zÃåÖCz,Bbr. bßU>zZÄC Ãý£Aî©Ã BäUu@£*O£:,@UvüuÃ¥UaBb£h>ü*|ÃUÃu¢ÄÜü OC@oîz£ßz~B:A.h£©~v/ÃÃvOB¢öîUÜß:z¢bÃœÃärÃazO+UBÃߪ|öC@@~/ã*bv*Ã~_Ö£o,+*ðß,@//_åöýðhzÃßÄöÜAªö,ßð,v㢪öz/U£hÄýBoåü,b r/îÃbÃ+*Ãœ._a:hoÄîv*A¢Äbb©ýöÃåÄüýĪOããî|î~ö©ãBCUäð/ýÃbbÃ>+äbbÖÃÜð:ßo~Ã¥z_Bb|ßßðߪÖh|<_üª+rÃ¥.abbrð||zAoZÄ*ª¢z@rãbð>,bîßAUüã/öÃ>©aZB_z Oà '), (0xEA982235D8DCA9BAEC4C94727937A73EA975D464956D202092BC1530EEE608F1746C4B852A1A1164BC0F5A4ECC2E118A0E1FA5B657E1497C7702A31BC678CC0644A3FE0DEB21138F636FA78613D25363AB8B21CF4152999322CF0E2877F59D4443540A2830049EED0B1652E739C369A5AE3F703B56FCC4F10A6AEA1C13EB176DD16343BEC72A33A6EC34C42BFFB15A5F656979388462ED468F181EC51982DA1FFEE416D57FABDD830CCA4F223899F258108BB6AA72DFE96F76FD2EAF0B6D8D6A5AA52D1A9B84DFBA8BF52BBA13CA0DF525C6B58DCB30AC1EFBA65E827C2E789F3CE4C8936CD8BD8CACFC1E7CB42E5CABEF388945B8009E2AF80E1EF4255D3E5C7D8C7E2E027A894D0928E1CF112F6ACD4AB29343A532E63C469E9B5DB9C8664EBEC1FF27B02DA974AF3B3C8F1ECE18C8A451AA72C9FAB74AA542E764DF2B9440C292114F30421C1D091E946AF6571D7785D2B9671EF384C40AB5816E45449584A6FBCC8BBDC89861348D69AB654C544E246FDE0C712D22CE0E4D457AC1AED7C48910C3FA8A91BABD3A5732918AD95EBE613349D566881279D9FE7D6F831DA086B5A422558859C392B521D21AFA914434EE87198E65015E00FE4A208C134A3A1CB7ACDBE5B70935076FB62044B6F87F48B94980FC031120B44521563E38367E6AE7B5624DB55E7DE552121EAEE01A4A06CBD8D3CAC93D18A58B27A095B2F6CE39), (0x009531925ACB9BAAF1F372D32BD650736063B4A0A99DBCC28EBEE7325B43E5772ABC4A70994578FE2E9326B2195375BF61826ED58315B362D86F049CE4684EAE0DFBA96E8CE0D91BEAB57215760AA83A4828D0D8D50FF31409E7982A41DB1AC54578A51EAA063381A953EACDA39EECCEC6C953BC9875D9FD079465A447AEDA0F9BACD0FE64899042F44F2F822525706BFBC9647788), (0x9FA71715A18E3AFA79DB32F6CDEE693D3811C7484656D8E123FAA87D4A62873D7F015EBD727AA06515350849F37A9D0D60273E7696E48948CF36F2A7E6BCAF1654F577CC8FACCABE716133104D8EEDA95C9B1D232310A69B7816ED3B88F87F5885F2F5FE02D17DB45C800434B078FA4148484B4A9E8CF2434EDB5379BE8F3578E1DA8B5B99EFA68A1D69C7A30B72EAFF1BACF33FAD35B9F9FFB1AF267D04F5CD4A8C52D5ED9EA758A1C02C35C44F38DCF1545E129BF6CBAC21915CE73F800D1974FA597F1F15127C049A9EEC088434AF79D33529A6E23154C0A5B45B42C01921B313C1CAF6B8BCDB42E10E0158DEA49C5CAC6E6B4AE37391C804BE7960B63944817C39F4C26AB9C01759E7C4D430FBE20017FF9551ADD7CFA03001F1F9427A8BA7CA7FDBA5B0DAF2F3AD54F0FCAEBD9808DC7849B7A3F2D4A569549268C7C6D5DE5B1C0AB0203D503D0CA2A458E6D2F17269E81DC931D403D7AB363B5B47892BE67F11A191B3E7E89F280CAA014D7BBE96621FFFDFA90BAD86193205E901F5F58377BDD9D53160BF82FF7EA1252A02892F78A4F8278A4C3C73641A7880E1FF9D3216268A8FA2E86502607DDF2B6A885C16A8D5715DFCCDF82A81657117E73EA000E06E0E0378F98D8F3FF6C70D6D1109DBBE61D80C8E4036492E5F0E3C774E1B22DCDE4BFB79589EAE47E11E0606EBBD6F5C9558866693729F38C5D518EB5117F0DAA5308EC60E6265C229C4AC222F4342A29FE0E2F594BC486CABC2B48386C3F6C92D2B61BB2FA94E32F3C33CCFC57D098292764B7135FB46E8E7211B4BAEE13C65CEE2F403E28773F592AF02D17F79A72DB931F10F77859432E578D30D8E02841186D601E28905A00A0255DE86F874696D7AED917CF02CED484EC11E69B465678F2BF04AA877C4A3B491E60D22A60D39700E6593A071072159E9B894C7E636569CEE4F5B082AC0F6B54ADDEA091FCBA24087AD5A4ED2C71E23CFF0BFBF30DCCD5B90703456B231464E6FDD55931C173A1D16533F39DB08CA26313738390036856D0F8F79AF974B8D56660CDEF5718A07B8B6A2A8DC9C947F88A50D257BF80D4D3857E7848D9D8B85CAC5E9D2CF29D5B4A63080825E8EA9D17B0FF1098925125D59BEA59D8906791B2B1CDD17B3C2B05ED0597F4B778AEFAAAE16087DAB81FBA5B38B781083372A9FB6655741B0921EB95E933830A5C7E6CFCFFBEF73FDFB6FA92138632849A0DB992FDF941232ADFA1BF84F1F1849CBFFEBA5A9418847B7A2BAF6AE20772EF56FBEB79F01C632D49C2100D37AADDC5760553878839F5E5351783DDA1B848D82ED02E06060AACA39B9D00D1F87733CF4DD9E4DCA3EB672CF5F644D888958B817947DE678CD7CF6B58BFFBEB2923FCBDE3B48FC7D36C243368F1000FC5D41AF6118F58B098DC42661A8983F3FF7C03D20986F4D405B3BE0D139AFE8BD7BF95849505D999CB3C15077229BD49E82043FCFD3E064EDF46F05DD14B9CFDDDC69E5AE3FF6EE9A26A06CD61ED51EC066424F357019EA9A956B54E057BC88FAF2739BB9B5265F8C15A4A832748DCF1F514577D26A9A6CC27E4A18D4A10E436A1771E4AA39650A3FE2C31FCC70B726089B358F1145B5905706D83A6A0D8BEA07603D1B02A824E5EC3B37EFA77BA052C7240F386B7F322562E18DA4612AA03257D8176B339C245F7650A3D60EC5E9DB65867246FE527E882E17B9201B8083C19A0598CE63351E2BFFB0C11BDC5C179CF8B13EDAB75933045A8F3D1BE30444F6CCE13B092D1A78306747474D9163ABD2001C286A41A80941D19474D3F80347FB6BCA4EFA200E6EDD380E737012E572F6E36B1AC6DCDAB524D8FA3798A6A43864004BE2C614B1B1F2AE4A313235992EEB217DEF8CE8811E91142A2126D6D63694D60F6FC603ACE232BA281891A883EE3FCB4C7629B4AB7B7E2D50B1EA8F8A1BD7139D5B262967E7759BBDD2C0688DE8913BE25B895F0DDF2B94F199B2FAF7A22F0C407E0B28C8156365018EF7D8BB159F6820AEAC2F927806BD309238CE347BA31AA2B3280EDC6872CCF7245D7FE852D8DBF94AD949F5007AC8784EF736DD953086EBDC3507ED908BB73BE0376E1A86D5DDB95CD4E9A15924A2385F968E713CEE61F3D7930C1CD0ED68BF210D15C80CAEF179197D80C047E491B793CE8DFAFD46FFF1D67A42F2C8C1E86F6B2A804C0EDA2CB1A51457BE6EA1ACF2025489015F6EC1DA0E24F2916BFEB0589511541C6445A8B9A2DC55E8EF408334CE4FF07437E60FFD69A53DEAE79B46A664FE295C4C908EBDACD05F8319D8EBCDA1BDC21B0E3C21AE0157B2BF07BED10695AE84F01626E83EC132C767868CE490B96F482AD82A9828DD7A5BF4DDCEB6EEFE58ED6A54FBB77BD4845ADB74BA28757322069775A72E6B165C139BCBF361F27CD9682D9E793BBEB8CD5554D0BCB32252E581BAC81E78572A8254F8E71BAFE122675E9B51FAD6F9E648DEA852D99B59A8F048E572A72A5E6010031C2443D69D1D7432695E17D0580F87D37F40D00550E7FB4FF7D2CA6E7B3C003B40F6B9D5A272418BDDA731FB911FF0D6EAD3AA1E8F0BB23528F4DFCB5205B72C5DDC8F6155B2310DFE4527A9B500BED7E1F384A891E2AB354484ACAE927538D8F0049DB48F8E8137A19C1F4AE40980273607E95F800F9B7B305A1DD105837B890C4FB9B063094753724C06F5C360513A0384778B8CD957E16921833470B0321E21963E9450D0C42DBF95EC3308A5B8D009E2CD800BEFFC33F7D746418513E2C21AE7D32C22BCEA33C04ACBF6EC23D8C369B32B8DE2B11331990A9D788983A7ACB32A1921D28BAD4CF899C0C0230546D3FF82D7D1E754DF69D3A193181F72AA3DA21F43C20AB6F1DE05DE9548F1520D93C3C97806ABD5C55E4AB04E31F7952D85EF821E04C184C94991F9CC08BF97778093FF5455F9A391CC5AE5775A67C0E66FB10F586E3409D23E002F75B109BC9EB338CD9DF841D78B4CF051AADB0D6FE1D1135C57AF3E094C8A2D1555CA2EE0C29D47C4219922ED2ED9840C7DE25EF631904EA49EAD65EF752F8113CB2B82C11E108E0D94484D47AE252D7D2B318B692B37E3C47C89411538584FF2180F220357C3ED6C535161E84307F5787FE7C343A318E79347BD4594CE79D53CF95B2F9E022A2668431E15DAD5FB817594C99650940B4EFF288EBB9A7E599EDA7B25EEE8D7577554C05BFF85030CBE4C3CCF0005E284A8EE0C2F75746F8CE9EA803A5EB00C989D3D53418F380CC9FC1CD06E5DAE5998F8F77C00DBA8E101E534711404C9AD0D40A332C3B1A1F46FE1433359A3002E3B91E74267330BBCF55B525C5BC6F7C5326EC22EBA7B95E757020C1F9874875DE40536831C8646D935E73D675F4498A9EA7E00EBE0D174C0FB00EB6426EC2380D4F477569073A8AC27E9F9D33E2E87126963341A739B7D139075881B9BE1B348C3BC936ACD421876D554C3F7D8A182CD79D8FAC3B7090D387764C51AEB8D104636B010819B1C45274BBE451ED8853AEFF3BAA2C2E6EF91B9AE5AF3687CFE8A48437DC1279100315C93D378F8C4EE60F129D62630EB4E5F461F56D24028DCAB4C33FDDA5AC3135EF389452E137798F5C0FA023FA5D7595DF51E7B083B2DF033B7282BC4C713052D167833A7A51F4BCE86601246269C0575DAA0E53C480B23C5981277EB4CD32EACF4D4292DA3B1B7D6D2AD81DA1BAA0C1A22B5EA262EC9E50A556D0F92A76081B23165515273D8D128E80E699A8948AAED055CC897E9077E2BEE1ED736A1242E712CCEA8B558BAA74AE3C13E205F4A810CC2228D4B97E9C929E7266355009B87C3DFF86EBA9FF4954BB57EB327C85ECCA49CCB737F97E3DA42047ECE32565149483A7B4067DCC76DCE8C41961835A2618959BFB8), (0x), ('b3c842c5-4b3e-4ea6-aac6-192fe60e28ae'), ('6909-09-02 06:22:18.782'), ('1980-06-08 04:45:00'), ('11/19/2008 4:39:16 PMThe quick brown fox jumps over the lazy dog0123456789,.;:?[]{}()-+*\%^=~!@#_|/0111/19/2008 4:39:16 PMThe quick brown fox jumps over the lazy dog0123456789,.;:?[]{}()-+*\%^=~!@#_|/00'))"; + break; + + case 12: + $query = "INSERT INTO [$tableName] ([c1_int], [c2_tinyint], [c3_smallint], [c4_bigint], [c5_bit], [c6_float], [c7_real], [c8_decimal], [c9_numeric], [c10_money], [c11_smallmoney], [c12_char], [c13_varchar], [c14_varchar_max], [c15_nchar], [c16_nvarchar], [c17_nvarchar_max], [c18_text], [c19_ntext], [c20_binary], [c21_varbinary], [c22_varbinary_max], [c23_image], [c24_uniqueidentifier], [c25_datetime], [c26_smalldatetime], [c28_xml]) VALUES ((-2147483648), (68), (-32768), (1), (0), (-1.79E+308), (1), (0.1342), (0.7331), (922337203685477.5807), (-214748.3648), (':hî+Äh_ÖzüýbBßüa£î/,Uüu:£OO¢Ãv@b:ßrªZz*©ÄÄaÜü+©î£.:@aav<î:Ä_üîbb:ðªvª*à _Ü©@ö:výZßýb/|ÄÃߪßÄߣüzbÃœ'), ('ÃCüu*Ã@/ü/AÃðÜU:äOÄî©îÃÃbåäýo/>CüÃ~ÃaãBßOUäoÃœaååÄãrªÃ.¢Ü,Uo<Ã¥@Z_öðÃuO|:abîÄ.b|öbýýZzuî.|bßzÖâð£ü uäZ£Ão,O@ÜÄuÃßzB<îUýzA>oo+và :üb/Ã*bÖ*ZhðA+¢ããb<:'), (' '), (N'aO+C> åÃäb᜚a:u*CªCbv©ä zZÃœUÖzð¢:ÄOÄ£äöUuO ßrbbAuUA.zðÃ>>ßObC:BÖåAzZv@Ãv©åãb*AhUrÖa@Z> _ü©rã©îCÖB|ðoÖÜÖÄ_ÖÖ.B©o:©öã+:~:+ÃÜz~zäªÖÖbýÜBü<.ýzý_Öî:z>ÃoÄbÖz>C|<ü£_<@öãîz+ÖU/£C+:U£+oÃ¥rðâ:bßüvz©UOÖßuü:_Uz_Ã¥_î+üOU£A¢ªª:ªßå>Ãœb C/~O:*|uZrãð~£bhÃBB¢Ä¢vA£|Zr.büÜoü./üÄA+ãß©aß_£h,©:¢>O__Ã¥b+ßrUbÜ¢u¢OArbOðÃZã,îv,©@B~©ü|rîðÖãbv_ÃUavÃ>oåã>o©üÖ.Zbßî¢ä£Z>üOUOðÃUB£O_~+¢|Ã¥@£vB@Z~:<£ÃAo¢Ãbü>Z@UüüBvbaÃœrãî/UABr,Oü©ªßÄvbuðA>:¢å b¢'), (N'oß,ß|b@ß/ß>AÜã*ÃhOzýCÃœ*z>>/Äh|Öýö<.aubîrOUª bZ/ >bZBßåoaßU@bbÖ>_Ö,*ßähÖã~+|ÄZýo©ð*åýîhÃU.hvb@|Öð,>ÃÃö¢:* :@/ :ÄãbãhÄä>£¢©C,ÃåÃza¢¢ ßU<ÃzÃ¥@©:ªZðü./ýÃ.AbåãCaßUÃ<¢h>ßÃhð~~Cãã*ãOa+r.z:⪪|/öh<ðbhAAzC>uã>ã,~~rÄb©B¢ªß/Aö>îrhÃü:COÜÃzßäîåý|ߪzba,ã,ZAãzUÄaBßrZbh_,v,ß>,UßrÖ¢U¢/¢:åßZz©.vÃ¥_ýzÃbÃ~î/vrA©uî:h>ãB©ýb|<*z>ßãäýa>v>B_Ã>oÃß*uªÜ©îãOO|or|ðÃuÃ+BB~.uaoü,+~Ö ððoÃ*ä~£~ü£Ã.ãZÃ~*zACb¢Uðý~¢Ä@<ª.uUZ,O,+CÃ@hðÄßOävßavÃuäZðß*Zöðb>bZOªaz.ööð,|>zuO.Ö/Ä:*Ãa,ý:+AbOß:£å/¢'), (N'ö,bzßãZߢ~OÃ¥O<*AĪouAãAðåÃ~Cã/ß_ãð>z,AäOBOãÜäOýzBªoß: ßC*o.bUOörߢbvýb£©ÃýhãavbÄÖvaUvüB>B+öU¢ßððU¢üUhÄzbüöÖ_ÄhĪ_Ãü_/o.ý+ÃßZhvAr/oüðuA*UZh/C:b©oCü>vaà ÄOzÖ_AãÜuî|B_OÃœ+>*ÄvzÃz_zb©OoÜÜrÃßUÃðZßr/*rrîüCü ªýîZãö@B¢*öÃã|ßäîuÃœUähãzßÖÖÃb__+AZoÖ*Ü£B:ÃœhB_ÃßA©v/OöÃOz+U©brßAbß|©_.A@h~ÃÜbaÖÜhðÄbßC+. Cã+BC|å©ÃbZüAv¢£ÖzªvîBz¢:_h>ÃUü/o /|£.aaßC*ö<ßC©b.bßÖo.A_Ö¢~/,ö@£ý£,Ã¥<£z,üO~A©v/aÃz_ðvßhu¢bãä/<+£bh~Z Ã|v*,©a<ÖßO©ã.¢|OÃœbÃß@h©/ö<ßöü_ÃoÃüÃv|äohÃÃ¥U£OªbÖBÃ¥*@~@u/ªî:Ou_ÃœZ>@o/Ã¥Zªîî|b¢åav*.AäBOO|oÃZ£©.ýîrBüo©/¢åßv/ªA<~|ª£BÖr©ÃBzöaĪ¢ö>î£ã_îã~îßobãÖ|@©hÃbazUÄ@.äãÃ/ðZozöÃ,¢b£Öbröb¢ã*Ö. |ä~öO©özCAaä<ååî_ßähbBbzöCZ©î|@BzB*.|*ÖA: ðªÖuÃbOÄz_Ã¥ZZ<ÃœZab,Z,|@î_+@: OAãÃÄo<|Ä,rAª|zzÄZ©rßrz_Ã@|¢ßAß*r@ßß,ÄbA£ÜßC:O/U~ |ba/+Äb_hoÜîå*zoßbÃœ@ðaU£_a,OB@B b>:Ö ÃœhbÃã~îvÃÃ¥:ßz**ýBU.>©/ ~äUý¢åooöð©:>|îª*hzÃ¥ bÄßÖ/öß_ +Ã_@uAv~¢~CUã*¢Ãý/O¢b+*_ý>h:Urö+¢ª|öîý*Ã¥*Ö>ÃÃœbU+Ob/@ªðva+ý@Äîß*.£Ö¢ußÃßýbzZzä¢ÜîvÃœZrÖ.ÜÄ*_|î<¢ý@,BBA:A|ä:äzO£v:Ü©z©ÄðbÃ¥/_*ýªaß~ðzðüb_bö~_>_¢~zC¢£rÃäahÃäý_zbªã/ü AAO.:<ª£ß©ãä*ü,ÃäößCÃîorBbaÃåýÃb|z|ZörrÄBrr:Ã¥a¢|ð Ãî¢ä~Cäýz,<äÖßýÜZb.CÜ£ÃBa@ÃÃzB./ß|UÃœ/ÃÄ/.üîßuu:,h.>r@@öª£ð>©ÃßÃ>Üüßåä㢪Üßãb*_¢>bÃœA/_©Ã|ÃÄÃ.ð~~A<ªüö+b¢Zßå.ÃÃåUBzaªöÜZöBvvOoorÃOUß~Ã~©Cühã©výåß:~Cðý£vO©ä©Cå¢å¢ßb£Zãv,+Ã|BÖrª_.bÃaaB£ªb:A_ý@öbß|>/Aä*ä/Ü¢å_o/~ãßÃ,äÃ<ªÃäÜ åÃĪv~äA|aa©¢£>zäoß©Üö_u© £bBåÄoBAýÃba¢öZ.aßßbÃœrUOÖ~bB|öo>öðößöÃzã~ª©Öuä_ä+*ðÄ.ª|:ßîhhCýö:o@<öåAOÃra/b *>aA|Oêh¢O£ßãäååªuà ><:Ö uãAîZZBr ã .uªOö|©b Bß*äªbob@*./ãåvz+Ab©håª.ð~îå_+ðß,/u.>oZuhA©ü/î~**Ã¥~_¢,OrrööAov_h/~b,£ãßrÖß_Cu£ýAa__£ß+rýUAr|uUbÃ¥>_@ãäOÃ>b+ßßäbý|öðaªÄå*b,bh¢¢Uý>Ö©¢©ChoßäA|.~,hOb£ªzU:oªO<:ßbbåã+zbr/z/ßÖrézð:ýðö~ü£ÃvZ>a>¢Ã*ÜßoÃAZ*ðÖÃrß_AÄ£ou~o+ÜÖ£+UbãÃ/Üý+BUUbaî¢Ö+åðUªüb/BýßCªÖß/Ãu<£~Ãðoöé@Uªhzü.aåã,Öva.ª/ýäÜ /ßzß.ýO¢üÖZÃ¥Z_O<äÄ~~_Oý*r*ý><|uðö<Är@~oü*ü@u~UrðaåÃ++Ãœ@vzýâUÃ¥:>åöAü@ðbî_¢u~£ÜÖöob<~åä|oü/Ã¥@î_Ã:@A £uu,bßÜßÃ|ö¢_UÃaB>ý@výZ©Zãü*Ã,uhß,Ã**@*UaßCßUho>Ab|îzÖbUA+üðã~ðhãuhÃÖaC©>ä_rö:Ü©Uã,ßýUãÜ£|>,b,äbÃBîß©oî**ObrbÄîC:~å£OCo~+*br@ĪBý<>ä|üýböb:ßo£Ãð©+ð:@uÃ¥|ðz/ CÄߢ|ürªuA|>~ßÃh©+.ãC_hÃœo~ܪöðU@©üuußur/BÄ¢ß/Ã¥Ã@Öå|åéýOÃã.,/avCzüîã<îäouz_.î *vãvãb+*ßaüb_ýßßaB/@><üîbãA.©,C~v*>o_oouÃühîä.*ä*,z:ü,ãäZöuaaüÃ/Ã¥,ÃœO<£vãðrÃœ_ bA¢@î/|ÖÜ~bîO ¢rA_ZÄBüª<Ãœoa|h~o.vUîußZ:Ãb+bÃoO:*Ã/*z|£ÄÄoaÃÃ/a¢r/¢¢ð.,+ÖB~¢Äîðz~éßÃUäã¢@rbß_ÄUbÃäU@|@ð b~uüaýßUÃhbÃœOöö~Ãœa.u |u+ |ýb©ßAoÃ>¢©¢åª@.ßC,©<åÜî©Ö|CÃý>+ã¢:aÖ|îCÃ¥Aà Zöî,åß>:ßÃä©rhabCZßUo@£UrZß/r:¢ÄãoUÃ¥CbßahOu|ý+~:>Ãb*Öãh+~bßuhÜãb+Ã¥U>OåîðvO<<©| üZbÄä_ª _u_îbU~Ã¥+ OrBCbvªÜoB|*©ÄAÃãðbbý>Ãœ|ÄZ£üä©©zCh>+uärßBb,@ÖO_ãåz,£ßz*©/_,ߢ£ð<.UU_u£>ýÃUüðCUß_Ãßb_ZA<ßÜßð©:.O:hðB@öa¢uß.ð~ /|OÖäbß|,r+Ö/Ö,Ãß_zb@ÃœOhZªÄOäÃÃ¥Cî<*vÖðª**îÖÃÃÖ>Uu>üäª@ߣ+A+©ÄîÄ/*aÃrC.<î_äC_bð£ßr¢ð¢öoå©*Ã¥zÖOCbãuBÃ.voîZ¢*ÃãÜÄåà ªvã_rUåöߪuoü.ãð~ÃöruZ:ð_bÄOÄÄ*B.o|ärzaããöÜý|Bäãöza_obýäAö©übßßßu£O@ÃßUb::ýuaýuA£¢ÜãBßhã:>zãã@Z¢Ã£Ö©B ©uãZð<¢ß©oÖÃvZ|vbvßUu*ru~ýO+>+u_özö|ýßå©u©ãoBCUýb:~<ääCza¢ÄðZvZzörÜö aZU,Ca_@bC:ÖOzAÜébr¢_+Cö+ü+@rî Z£bO*BÖä|ßü>UOCöv_r@ÄÖÄ<îh/ÖAoýãuh:@Uã.£ðu¢ã|ääÖvaCýa,¢_ö~vr£ýß,ßhZCÃ~Ä.C|~abýßß>ð~©~rýö.uA/|ÃA©zÃå:ßo.b©uöü>ß*ßz:ªßýAãî|£bîß<<@£ßÄ+C+a*@>a+vA/ªåUhChu©väýîob>vrÖ.z©BüÃö/vZ>A<¢_r:a~ +,/h/>h:ävaUߪäÄÜ>î_r©äðOU,**ü¢>©ä+aÃ¥_©<|<~ýZvuäÜß/üCbhÄ@>üOCßCî£@|öUãßuß/ýÄbå£ðA_|@@©+¢Ä©<,~<+Ö+©*ÖÃZªðarh©b.¢£ãAo|u~'), (N' '), (0x2A35410DBAA6E4B09FE628A565EF22E4436A2E9FDC8825E0AD0990C7272ABADFA2154FB2D79AB63776DB5FA173C5639E0049259D17D7D8A110605FB1161C88742C49034FA0700DA8B3F6290029836DE7A5F1C7DD051DC7CB3DADA1773A05215A53EA7529C214FD8F3C7CE920AED7788CF2780B2455AA6E0E813812F3CF966EAED4CEAD3E0E432491F437A18933A71C65341484C2FAFD05A87B66A88A020AC0A60D3A4BDF2A397DAF53792F1D09E5DADA1BACBFBA11ABB4D7C905C3A89B9A8FEA76FB7BF95B3D3BFA96D56E80CDE79F968BCE6F554B0694618674162476D514B9EA45A60E69E17EDD70C4233C3C3409E1652C1DCC2A399E70661972E6271683C1C0B5958740912CA95091E586E25724526A34BE4AB8478EB1A635A74F6F97B65941627B879E81A1D4FF737C9954188E0EF41F7CF35739097927E4E00BE9DD39B8DA8B4580DB9DB4E993EA4A44CBF55C8EA7985A4F1BC3010758025FBAA096EB2239C3BEC8D30D33576B925F6DEEC4AD328752635082EA9C17893D27D93EF948FCFE280A073694BA996503E48863931894542D324E329A9F4F27A73F96E65918714A636FC6B9A6FBF397CAEA7F0614B3F524938410C7FACA6388BBE08F5524B30BEA723E002452DAAE313FB668B0204912F3497152D508AA50980B3EFEC56B9E7316DE9494D5B2D1D2B8D5DE874462B36871CD9B0BB36036E2C7EE681814DCE8C6), (0xD18BB53C40779F9A0029230B3658D58CF8CF92BFB6A8B2CCE74AB8BEDCEC18E60110E2DCBC905B9413C635B9A4E231C03E4FF0F60E839A28D9E855F6BEE0BD13103C0A2576F8CF6774FDABF072F9280518F87F8CFB22D77D75B903D33B64D5320821A867D70C494580898111D7AAB5DFBF4FDDC5613118ED658DAFBDF5FC2B102778E85050C12E0CAF3A0C72A1C6A6CB032313EB8710D1D609BA024A5C8C50845D71E95EC2648FFE21D1162625A64C9EE6E4B9D1E83F8817A6114796BFE3AF22EA881430DD47089E9415CAB5F9ABB163), (0x78D37E9B1EE8D1B7B11DF93F3D21F43C9D911CC19FDB1A3CD275D21EFB60E3275C80364F6BECF6470B9057819BD58C94056F14D152A1C49DB842C9A815B3BC5039D1E3BDEAA4D0B09BD4B60E8399A0FDE83E188C4B11D5BABC999728234D3257D40747CAF2CFA9619E63367DEAB5191EA1CBC0D69B2F0428FB2800510DA78D4DA15E3A7C52D60A1895B7EDE8DB57D0077F7887578D5BBCA4021FCEC9CF5853F6D6E8DC8B7A9DCBCBC1A741E3421C4CA458F9D1942036C046A1967A330740493C63F712F37B448CE2ADBB96E619D861E5D22A71D587BFD5A02895E9E32398C4805D04804B095928136CEEE7659FD92CC9349460DDCE74B5A42172CAE55AA9BF14F71589145816DB79015E6998D770004E6820AE8E37E6B1E94FDB2A978E42B8C32FD26E8A5018701EB8E7DB700B1DCCB0727C7D39FA30DD1064A0C57CEC44EBBEA5A568040276FE50B090D5500B41DD310F792512C57EC8FEF55E25B052F43174FB1CCA65B5C7AEFC7D2C89695B8D0422C2936D731FD9F826DD690FA4504EFEBB5F6154EE76787C47CA299499F55EA3685903EDBE86BE552224A4884BB80AAB2F2ECD0AF93816AC491725A8F5445F317EC5A74A4C603F35A00B31CAD2F0308FC07D646A2753A92F4256A3A760155FDDC4720A8610BF5ECFEF986AEE074CDA59E796E878DFF40A2A1B7808F6BC98D48BAB53055FE5AA7E001E957B8EE9BB27F67C4ABFCA2DE6FDCF68DF6A98B7681256C4DE42B3467A733C18E75A4A797B406050117972D8095DC55536F6063FE549B58324CA0A7974B001D682B1468CB356ED9E0A48A5EFA07EBA817D5E0F846DFD339DA5C754B136E6DC61789C55571738A1E00967349CA4C6E2A60F89FB15A07D68857EA8E7EC013C68236C43760429626944BC2F7B05C896F8DEE4AEA1ACEBC6C1FA33CFD96E51B5DECCFE1130614FDE7CAC1FB759700163BCE8B00808539ABC38A6817CD05989FBF20651AE06B765978F0531F48C336C50F9D012F0BE49AD8B3142D88ADFD30D232324C5521F535C058318780221A62F053931820046993CA859C67CC3DEDBB8BCF70DD1686E1931A5740D6DA5D1AB698B13D350AE500DDD8AE71CF959D69826A760BC0A13D5C6971FFFDD8C392B96D7AE5CF1B00B8A0A6BEA3046815120D7CFDBE6C54514A155B64D3C30AE7381A45E50454BFCE5E71B1D56501FE38E4445FF270DB0526651C30D073A63CF595BF8698CE8310CD4DBE9F3CAA8EFC381722708F6318665D051F8FE823EF5AA844CC3FA58B656A613392A4C23BC87BD61FF8B94135AD828D592983BF0328996E63F6F7EE5F46BCA1C81F5BC063A4114CA3A9C82B2609729739A25C51E1BB6E0AF9366E44D09D86D94C17892651C229A508471B59507E485A8450A4ACFA5AC00CA140C72D35DC6C0612FEEF1E705C357788A759AAA004BA8AFE03B08FE8E9EEE1478C7510FAFC7F3BDB0546518F29EA381B3D244301256CAC964C3F221BEC2D391FFDC6F3D7248C8C381DCF9ACE58FBC4298864BBC59BE0221FD88ABECD4D1FFED80D418162F650F6B0981AE355D1DE3D406B0893777173741DA4D40E99CDBEEB0DD0C2B1076A6133377E0B2D80FCCC4DFA4D7E62448C776699CD73BE12425CE2D92FD5850F1D35D5F9C55C097655F310E896045C5F5C9681595C2739F6A320E51118445117373EDD17A8687F206DF043DA52D57C4E00938C89543BB2F5FBDF56A476E85E0191F9A1673744A6F42750EB6BE36F93DDA4A71074B7C7C30B8BE71BC911CAA97592323869241506CBEC9861F34047129C4B790FDFD7D949DA36A5EB4028EDD25CB775C9A1273AA99F9054982F55CFBB34D48F7D98CAC9ADC8E86E228E39C6930EB6154BDA8D617510CF604F73412A7466EAA67BA9604981EDC800B8B9082B65C9B189694073E0A7630A6CC96A8A2A77CDF9BB93835AF99E7C836E028CB8CC08A40A75B1B7B123F2F9FF089EF37027539D88EABF4C87D27EC7FAFCBD05DE2ABA4E5425600468C00CD5C89984425AAB0C6C1A74F3CE0CCC1C2806F9CCC466FD1BC44E509F5AB74F24B8DDE973EE5E2C7D5FF050FB6926FC319809480D7F03486EDB7DBFF40A0BA1A4CB404AE023482DC9DA8C7CD41601A29D521F07417F41A5B5957AA8609E2863444EAC2028EC0C1E4FDB7E32F2867448C9DB12A1EAF45035899A855AA8AFCD3BA219289579D189B15600C776010EB32F2121DE957B86884FEE76969E66B165A01E3280E96DDEDEF841615BEA3CEA247AE7562986C127B02B90D8A7033AFB4A94AB1757CE8DC9C14252E6540A3A9E12F4422BB70097DEDEF68265588527DBBD5626B74F158265FD1D94E723DAC3A5E0F2C5B2B11F443A0CCC48614C18713C1A7738FDE3735EFD71EC2E997BA0BB0422DC7455CF751A9E11ECBA72DD1119D49C68CCBCA1C5C26D93C830D4F0AACE5C11344E7F942B6C956C9AEBF6C8EC2050C24A0D12D40E525D0A06B2073435AD672E5E6198D2AA3070FC374016D9CBA4B7A7E012A69DBB7812E1E1658D69655126ED84D86A7A877E28099C16ACBE4B734E61FA6F4422F6C972D65EB6F134A30796D6192954E33A4D1071FA9D01A4DB54966E272B6EF60D03E6BB65842BC07CE356847FD695221E5B27BD4ED22869C7DE0AFA20831D87A890C90532A98DB6114FF507468D24F4BF645FCC03A1B73ADB8CF3978931AFF9D5DEDBDF0D9FFF74DD71ABFEDD21233AA9063ABC334183F6E98E29A5B5E63CEFA00B2167A145E72F74DAFE8205B85DBA69B8EE72F6E3B6945AE4F58F6659BEE744CC5ED1FFBB89631F0B475852F1E121307F3C0D07B9E8CC449D1CCC4067C91B2C174D49697BBABE2F8B53FB9C6E4158F3D44EF71DB1EF8AD3829D629ECD12B7423C3C4BA4A7B7B4B47DDD7C65FD2FE65BB3C87C28D1FD7A27C265D6EE482F6278ACA9603205B45C1C9A32AFE46314E662B716DAF4969E703EC213D231D0C67C5E6AF3C943BFA4460F7C5F8E9F5D85B4BD8F743731447DE20E29317FE1D22A4BC3C641797F4BA2A302C0CB78470FD0D13C5F24B25C8F3B09FD11BB2A8E34643D5213CAD90C1C4561DCC1347078F59B0E48503392BD67EF348B377C5D907824CE6C9E262344F7D51009B2D59B5ACA80F776BCD23DF0C17FEA24865DC49FF7D154AC6603EADF77C9408B23990A9253E9C0B674D6E3A5E6CD9B2E3C0ECEAA007011D170EEE4B6A6280EE381B2DD387557D09C8D1E2B10FDBEB5A878BC93690AA67AA387292164F51A005CD7F02433F062A8E42E221CE254F0E3C2294C4DE98495E8DB3829A15C266BA7731DCE490D8A81A80613BF3AD889984E86456F4BB8DC16C83207490BC6B15CBDC28A99D486A7D637A79437D5D55B0051AFEB1B16C72FEEA6F70616F64175E144B6F1785DEFC3B7EE6F3794149440E2D706F75BDB9645F6A29BF2DD8090EFE631A2F31ED3E2A261EC233CB79F9BCA12B6134FEF5A1A05AE710AD5C1FCF6375D7F41626191221EE454857FB8698E5706C1D0176D50F09C17AD549DD90CE064F), (0xF384E29588194045B9AC49A5D44F2A3CEF01CDEC9FC7EA55AC43C8435D7742089BC7A5608ED795E7368F565D77D501FAB254DF0481721E2C9A8DE94450FCE7426A41090CA9C9AE186CE6B60F708DDDD742CE9009973D8729A878C600ED509739A814F336CCF450E9A6C7989BBC0EBB0CAF1201826CDEAA2DB9DF633102AD2A1C4E7D675C9AA70B4D7DA763D0A5EC6C99BDBA50DB4E15CDCA6AC67CEC911FE6F89C7B4C3EA75F710806B404C47ADA87CD73C973485C4ECD39B09CF1D42A1FBC5DC16A33299F2DF25D4848D49A10084F903EAF78C7AB9D9C4EAE128E0A6D9DDDE7F7A60210A65E2D45D715FF147A3329A74D61967BA6F4B223CEE57A8C9FE8F0AB6BECA269063FE9DF8233F0959D87D47BE9E6BD0B07624102F4DE42C1E3A0A5EF2554A88D90BFA10E78B6F872041C864610FFA3B82BE4A309AA9F7427FD27FCE28D017048DF46EA2945AE935069CFFED758FBB1E4FCEDC341B09FE2F04A7A1151BA16E403AC3D67CA1479737C5053A0DBA19DCE017618E5A03D2E973F64FADFCB9D429652EBFB2B1B94E7CF837A47F05DFF074FADAB0FDBA23143C57DA527651A9AA8DE0EBD4DF0A671B26D8F486126F53D3A3F5DAA311F8D66F320A735AD766C81B5E9D268E2A0B216A93CF9A24C59CF1DCF406AE8086F688850A7C92C4970C33C000D9378548D5B9A8D4601F526EB1A9A5089656D0B8478458049173AD685CD3878BCA13EC557C942E4D05AC26E7362658D2FDBBF0A56307C954EF70B7521C30878C87D6949DCD4F9C023883B29B5D60DE6B2ADA7A90E2E218B24A87760BECDC30C524AA6F6F91BB05AE2FFE7CDF553DF77EA24C2741C5E6A9A5BDD24335C980256C52ED66B3016ED97FC4CC60E465396D1C80076990A4EF0F3DF0B9A1BF67CFE4AFD9108C67C7346D3372B77CF985B530747536B5C22684B763EE38C247BD1A0804E7C11B54BCF5554B9A362DFD7205B83B893D4A311A1289445918899E72257668BF7811B4A9EBB77FD16A27F066C9F1D87086CE8FCFC6EAC547D6FBA46BC6D974BFB53E09F3F3919D75DA5FBFEA98DD9F16A11DEB56E6A8E88D4C7CC2F013041A80B330A18BE7E47CE53119F5773AEABEF95C8DCAA8EE1DC91C558CB786CE9D52C6352F37582C032ECC90F625DCB3614251CDD993854971A2A56795266B3CF62693B72F320BB356CD495EFE07E7F7FC68E43A55C8F4F9DD7CC38C91F096ECC38FAADF9225843F36AE671C4A264B69CAAD6B3C4230E73D3199E9B27E8F1156266C9B7E6D0855D6D4B4F3A751D8AFA72159C1E4855A9A82A86DADF84BD1B0B79D00E5ED8ADCFCB25794578D3D4FDB58EA328114CD3CD0DBC218C60F5A6D9B02F44C1A40F2C21C446D0F9CE1031D456892551E0940ABEA50301A1B7216FD57EA095488F1258A5618164CB7BDAFEFD8B4C36D7D054F81C25851BA10E8B69A3D7), ('3f0b6545-ccce-4ed9-98ef-40c073e8a80b'), ('9999-12-31 23:59:59.997'), ('1968-12-24 07:01:00'), ('11/19/2008 4:39:16 PMThe quick brown fox jumps over the lazy dog0123456789,.;:?[]{}()-+*\%^=~!@#_|/0011/19/2008 4:39:16 PMThe quick brown fox jumps over the lazy dog0123456789,.;:?[]{}()-+*\%^=~!@#_|/01'))"; + break; + + case 13: + $query = "INSERT INTO [$tableName] ([c1_int], [c2_tinyint], [c3_smallint], [c4_bigint], [c5_bit], [c6_float], [c7_real], [c8_decimal], [c9_numeric], [c10_money], [c11_smallmoney], [c12_char], [c13_varchar], [c14_varchar_max], [c15_nchar], [c16_nvarchar], [c17_nvarchar_max], [c18_text], [c19_ntext], [c20_binary], [c21_varbinary], [c22_varbinary_max], [c23_image], [c24_uniqueidentifier], [c25_datetime], [c26_smalldatetime], [c28_xml]) VALUES ((-504945714), (182), (32767), (9223372036854775807), (0), (1.79E+308), (null), (0.0559), (-1), (922337203685477.5807), (0.8643), ('Z@u:Zßb©CãÜ,bZðOîU|hýAýýouöðAZÃC¢ðrÄ:+/hhb@ß*Öa B~ü¢£Oäv_uZbÃ¥C¢ßo©ÜCBuÄ_ß/ýð>r£,uªã: b:/oý>ß|ü. *ü~Ã¥uvvorã£O@üÃUu@<©äBã+ý,br.üܪ<@ðzª~åðbåöOãvîrUv|A>Ããöh,ÃCÖA©o,ÃAÃahÄCß|Ã¥oߢð,ðh>C<©O +Bªã îöý+vUöªäªã.@Äo¢Ãh@<*Oª_|©Ã>Ä î_åßðªîß_+üÜb_£ÃöüaÄÃüb*ýÄ*/ß~@:î_Äz_Ãß|Äåªo>~CbåäÄÖ<ý¢ö:@ßrU:ýüä@ä_ã huO:ýß*îä.ªZ_ðäÖüîîÖãAð~zvî£ZýÄ|u_Ä>~aaã~_©,ªüîbBB_ü£b>CZ~oÃîÄ¢äÃAbau*OöåbO'), (''), ('**ã_O/Ãðob~uýäZðäðßÄ|îîãÃð~b|Ã¥rÜÖªß+bO/.üBîö¢hObªh *_ß///ýßvä©+väß:,bîäÃ>,Ã:aüuªÖ@Ãœhðýbãrð:zh©uBßîbOh~ Ä>z@*¢Ub~ Z|ã.ßßb_ÃaÖ>:O©ª*ð:ãUÃœ*ob¢ª:ÄrüååýäB+©aCa¢:~|rbhãÃZ ~Ãb@uÃ*or~ã|Ãüä|,~:|ýÄ@*b:.ß+rîva©*:zubv/o,ªßZO:ð,oBCAß_ýv*Ãœ<£ßZOU|bª.vO_rCã ð_ÃœZüåüAßhýãß:bäZßß C/|ÃBä@hý|ððýubÃ~>@ÜäU+C|ußürzU,z>u>übOC*ßAUrbä~+ ZÃœZa<äb:oÃ¥b_ðÃz@ª>a~Ö@ ..ArCî>+u~Ã¥aîzbßå*ð©<+~ß|Ö:Ã¥~:£ö|£>ãüA©ã.Z<£oU¢A*ªhäOuAa¢ß UaUÄ|Ä<öUßuããÃBvOåð£zh.@ýzßÖ ªAÃzu:ä©AðÃÃîCBoðãävoÃoa*, >UZbUåü@¢:ðA£Ãzöb AZZCäÄß@üÄrßz *ýÄbÄOÃCuÖC@z©.|@ãahãÄÃb*O|ß@ÃuAÃvÜÖ<ÃœrAaz:AvÃ¥>@b,r+ßO>£Z£Ä@ªå~<_bßbå©bâüh_v£Ü:©bÃC@äu_Ãœh:ßbÃ/CÄü>rb:¢. <ÃãAö+¢åvä_o<üÃãvvÃuU©ö@aßZo~+r.zßAC+@ßÖßößãåüUýß*ßrÃ¥rBßß Ahbý.,b+rðh|,b£bÃåãUBýä*AÄ@,übªOÄOª<öäÄ>|åߢªÜ<<Ã|£ a/bhhoüÃä©.hzöãu:OhãO*ÃuOuÃUuA£..ZoZB: Üåa¢å<à £övA|/ßh©Ãäüî/Ä<ãaýÄAß|Cýã*öOÄßÃ>îbzöaBýªh<_U>/*o@ßä<üzä+oAÄbäüöðC:a*.@ßðaCÃ¥zAÃ¥>.aÜ©ðöU_~rðßý,îÃO_ªCA.ýÖýüö<ä.|*v@zbbzAýäð.h<Äã@B+ÄÖ.Ö<ýAA©öýÜ©O£~@:bä©å>¢UBaãvvh.+<Ãßö@b Ab¢BýBUu>îr+:UÄãvÃœ>+üOÖ,ß~.r>ã£a.ÖãªU.£oãÜ +bÖüCÜã_Oa©*ãZUZ,©béUOüÄ.BªãC*@Oä,zbªZ/£ZîC>að+,_ z+hÄ£üà ++ߢ*ýßbbr/_~a<Ãa._uÄu¢ÜÄO~Ö+zZ,Ãö>aoO>_>r¢züaÖzÃ¥,Ãu/@ªhÃAîO,bÃÖîAߣ>:|ãðýÄ>ª ßÃ/Zäüªbüu +Zhvzh:@ä,ðuCß.ãäz/ßC@.uuÖBrÃoãb|zCO/|ªãvýÖöî< rv:v@©,îåÜ©ß@öÄbvöîß_ãýb¢Ubrîörî*>ýßðÜZä.zä£*h*C+ z+U£ü+v,£Z¢rýð|Ãœ/aüîo<£A,uü*Ä>åðß~¢ã©Ä_¢__haurzðb|Ä*ob£~@ý/££ðBb:¢O.v~~O@b@ü*,¢¢@,*z|O.h@©>özÃ@ÜÖbzÃÖÖåðÜbäuü©AÄ/Ãî.©hu©O*î~B¢äã_ÃrzböäÜ@/@< rOã¢Ü@ªÜBCªã¢@.äZãorA©u:â>ãhîUªÃ*üobüzCvb:¢~:/.:ðu~+vZ_ü,Ã¥haÜ¢OäaBZ_Ußz@Aöör~Ã¥vrb,uãu:b/r©BoC>/ZÃœ~*oÃ¥rCîb* * ,>ªöð+.>rߣuBbhu*ð:@ðßzðArrCÃœ~Ã¥hÄCßo>ýUýÖhà >hU@rB/AhBÃ¥:ZîÃuöÜz<öÄbüäu.Üîýð~©@zZ*Ã>ßZho¢Ã:uªzAAüßv,Ãœbv£ü©£CooZÜÖ~,ävZ>Oß|/u,aß<åööÖ.h@ubA@h¢Aý:/Ã:AîOÜà b~u¢bvüäOuru_+ªbOÃœuÖ+|Ãœ|üÜÄ_Ãœ|ÄOU. |z~AÃœ|v/ßÜUî äýÃ,_ðü@ß©©v_.Bª@AüCAbÃ~Ö:rBCýÜÃÃ¥+ÃÜã £z:ßÖ£ðÖuhOßvÖZÃœzßUh¢BÃÃ¥,ãåð+OÃzÃœr+£©uzB£ýubðZÄA/CbÃ¥_ÄÃ|~~/îÖý,b,äbb+¢BB>h<¢ä©öBCä>vBãÜb>ßbBÃœ,*£ªO©bu¢£ßaý,,ubÃð¢ ßî>Cö_Ba~_~ýzCßßAÃýåä>rÃUC:,ã/hh<:ª:hãÖUÄ>@bßãä~*©,îîÃÃZvÜär~*öbã£|@.ÃÄ~/_ÄîªCðo/oüðýh* r.@Äý_£+|:Uov O©üß<+aß©häÄÖ.,aBÃzu ýoaªåå**oåÜåCýZüo©ý +Ã+äZÃœUü_*_äAýO@öuª<£:@vBߣ/BbðAzîövßozB£+ßß*îãCßÜaöb@ÃîrCÃœ:hßå_hAðÃßî@ßv£ÃðOü@¢ býüßubb©+äöä> +ã+ÄBÃ¥brA_Ã.UB£CrZ~££uZß//Ör:*ÃZbö/+CÃ¥/*ýoov©z.rö©îÃ.h Ö/ä<Ã*ªÖãÃa>|©Za ãu£ã©/Ã*£ß*ü+Ãh|öý*ÃðbuUbÖ.:zoa|CÃ¥B©/Öa>_ABrA:öî@Uî|zð£ßöUÜðavb<ßßã>ª:hOüäråüAr¢ß@öbv/vruvÄrýBzýu*@¢Z ÃörÃ¥,ðå*¢öa+råö@äß<:/ßoßýüüa,bÃüoý O@ÃAßå>zbhÄz/AÃ<ÃoãîöÜ+î/üåü|uAuu|ÃœaoÜÃ|ðBÃ¥vÃzî:vü:ÄãÜ:ðZüruîhO,ä+OÃ¥|.Ãu|Ãœ|¢ÃývC*bCî©:hß+bUÜ£î~öÄåãðÃ~Ã_Ã>hÃ¥rßUZÄbääavÄ,U*>>Oö|©O¢ðßh ,Ãœ*|oO vª_ãöb~bÄö/O/Ã+br+Üð<Ã~Ã¥/o+ÃB>/B@büÖö©Uîý¢:©>¢Ã£AÃor,vä~a©,ÜÃåör> £*Ä¢h@håöãuð,ß:é,*UÄvu,ÃZv:rB©vOoü ð,|¢b> a*Bvª öu_ävª,hzåãvéãOüÖußCßvãÃOröuA¢a©CvÃ¥C,î|~rª@Ä*+ß<ß,*bßuhöÄCB,:îZvߪ|.öb|ã©UîrÖh+ß,:.£vüåîCð.Zßohz UåÖß,@Öß>,_zör|Ãzaý>¢ýäézA©ZA@Cªä>U¢üýð©ßÖ~ ~oÃã_>hhßÄvAAoB>b_<ä/ÃBÄ C AbãßuZ.boZßÃ@+üßouu~ßî.~vZÄåîba>.OBböîbâBðrvßö><åöh£v_ð~@oBvz *ZîävO<üÃür :*u.aC_,å©ü/Ã*CoBðßðö>~r|A©Z¢~Ãœo/öB~+CoýÃî/©z<.£__äAzb*îãBÃC©A<~ößãOhÄ.ĪZÃåîo,¢/hÃÖäðÃBuuýv_bä/©|᎜U>ãCo/a :ýÃÄC©_*ÄÄABÃöðÄoO_/Zu* ©ýr¢ä£Ã<©ÖÜuz_.+zBöãߢîZ~Cöüå~bu£*bh:ð>ba_.ýOÃ,¢ÖOCrv>@AbðbÃÃÃ~BÄ_|ö>Zî,ªåßUuðBåà uÄ:äüoßab_äÖ+ZüzZ£C/C:ZÄ~,©ZßoãOa+>å¢ã~.h>u+_ã>_Zî¢/ÖZrÖ/Öv|<_OîÃÃÖaßBÃ/bÄz¢UîOÃÃ¥hað@,.ÄoÃ/Ã¥~aö~z ©ãB<ÃOrr+Aü~@@|@Ã*_U+ZvAäb£ßäbÜà îu £,,ßÄ A+Ö~uð bz~bbö,~b¢Ã@, zvUUªZuäZöÄ_bvÃ¥ZZãÃ<ßÖO©vüãÖªÖÄz ýÄC> ª¢BOA£*@îCÄÜ*äßî_|B|ý£:.özã~ðý.£©@ðã|Uu~Ã/:C+åߪ,Öã~UößÄuC,/uhBãauãå_z:ÃC,.o:,Ab>UOOhß,ÄÄr¢:äß*ª ªCobîbbZh<ä_¢Uãb ðüüðÃOßhO Ãaã AßßãvÃ¥aªOBîý*_OBöß+@ä+£.ðð ðÃÃ,ZzhßÄß.|r ßäAÃãZöb+å¢ <£O.ð*_Bä/ĪÃrÄ:Z_UOO@~Ãœ,ubbü©+@£ý©o_,Üߣ:höb,aÃZ>hrbOüÄ__ðîbb@öbr¢ýU/<<Ã¥_äOãÄBh+ßðhCvZü/vba|åÖªðOåäÖA/ãa£ @ ßåã:Ãœ_vC,ãÜð©_ü*:îýßvv©ßu, *bh:öÜ££,U|Ãœ*<<_*BöB<<<|Ö Ãb_rau,rðbU,ãoAî|Bîh£zßÄ ÃZzääª|ĪA~BrU ,o|/Zövßb|ð+£¢Ã/vßåZöB*b/éuC/ß+ä~Ã<Ã*.+:>UZöuðBð~ Zzü+Zß@ýªZA©¢Ö_@bÃ¥rÄî,@ß:äbBuÖ~z@C@bîr:©r*ßB/ߢ@.ÄãuÄå.åÜoð/Ö/ÜãÃÄh>U<¢ä._>|~/+¢U_Ã>ð+ª£Ä£ZÃZaðÜ~ü,ÃÃCZðBýßo+äZ*ÃœZrrÖvð B>ß~rÃ¥~,ªÃüªb£öCUÖ.ð~/vä*öüýßÄAzbb¢O ÃÃu,,|£åÃZC*BöýäýÖ£uðUUîª~åÄ©_ýAÖÜ|Ar_Oå¢ü££ã¢ÃÃœA/bzüö,:BÃýð_ª.vÜ£åä|ßÃ@ÜÄO*aaÖCÃßð>.u_£Äð¢å<ö,Ub©<ýÜBãßÖUbý@åßüåî@UZaßbrðaüo<*.©ýýhÖOýU/¢îZÃîöb*Ã|£~bî¢a*äÃ*O*o_+ýß@©rÃîZß©C@*Züð¢:ðÃãªb+C.zUÃ¥UvÃÖ*îo|Ã<äÃzvU>>a|Ãœ.|Ã¥Uã_,Äh|ß+©,|,+Öý,ß+ðübö@*ãäª,Ã<<Ã+>ðß@:.hÃ/b< aß>|COZãåaßãUîä ªbã¢~A.,î|BABÃ<ß__ß++ßãªýÖü~ßC<ö>uÃ¥*uãÃý,C£|bvÃr@azÃB>üßUu¢ãbß|ßbo@åßh~ÃßãýUhZ_ÃaÖbßßÜãaUbBýuåð|_ä<ðÃä.+.¢åv@Ä©üÃîãZÖÖüZz@¢ÄA~<öî.Ävߢýh*Ã,Oî~<_,hz b¢ßÜåOªuUà ßhö*Bý,obîÄöb+Ãœ,ÃAbzîZhîvªð,¢aÜå©*|büu+_ýýU/ ÃÖ.BßäOO+/_abB>ba_bCßZÄßÃ.>©@zîAÄ||ä@ZßhªÄZîaAðhÃ¥<ý:rz@.b~*++@£b@@Z<@£|ÃÄî@CýßßÄ>*Ãœb :ß.Aoßðð:ÃœBbu,>Ö/¢UîUÖzß,.vÜ£äAÃ~ÃbÃå:*ã£ßUC.bÃœ.zöbÄ_oBÄ>¢£Ã_hv~Ö*:>zßåýv.v/>O+ £ä<Ãßzr/¢+OUߢz>_£+bªvB@bb:Cå£r vzB©©|Ãœ:oaäöª¢O£CÖîãßZÃ+Öö¢Äãb|ýoäý>@¢ãüåðî~.hð:îßaCÖ+>ü|ÄðÄöbªB:åßâ©C>ðöüå,oüªAOßbb:UÃœ+AößÃhaß ßh@*OßU©@rß.ª|.Öz©Üv_Aa£A+~Äzßßðo|~a/vä*|+@v/+Ö:@b,:U_ÜÜCÃ¥ ßu@+Ã,äUbý,zAß.Ão>Ör£¢hrU, êÜßî|öbhAaßä|CÃÖBÖZ©oÄå£@ð£bBoÄO/vÃß*vßbz_Ä£Caî>©b_ßCvãü©CÜÄ¢ÖbC©~©:*üßzÖðAåözå©+oßA¢åbO.ÃœhU>C.|<ªý@*:hÃUubOUöa+uB <ðA>ß>:.*z* ðahß,ßåö<ÖÖa,ßö£:CrAä.|ä©,:©Ü_£bäÜ,:ßuBýª_|ßb|/ß|ßöUC :>/vhý*uoðCÃhª,<äuar.zäÃßBü¢Cüª.ö_zÃ¥a@BB¢,,£Ä+/ß/böÃuîðo£Ä:AaÃCO ÃÖªz>: hî~aîra/©oOAaÃ¥rAªoUzbbBîZu A¢ã>ð¢¢~z îU/Ãa+ä_Bo:>Äýhvovbß©ÃÃåýßã£U,,ZåÄÃðߪbÃu*ObÃ¥_îã+©<+><£o_|Är@rZÃÜoªaZu<_r,~ _£a/ðýZ~ðaß,b_+uîäoAb>vÄðå|hrðoCî ªå_vv_ðÄÖÖ+rüÖãU¢ u|Ub+z@A/h+ýã©>Äð>ã~¢B*Ã@ Ãðßzözãå b|@UÖUBÃœ ÖîÃÄUã*|ýÖª:îzäüÜB£ã/Ãaßo£*ü/î*@ Aýª£aÃüö, bZäOU£Züh:ðîbåî_ª<+CB.bhÃ¥ vzÃœ.©îA+ö>z:Bzoðrb.CðÄÃrÃœub,bß,AßB|ª£bßãbÃÃB¢bU|üî+ª©Ä>£A bhãa@äÖ_Ã¥aB+|Bð~©a£.|Äýa¢Ü+o+~*.öOß/OßvCUª¢ßãb<_ÖaãßOhZABîö_¢>¢<ã,,î*ßZßbO.<.©o~Zß.*Ö@Uጚ väÃ>Öüoý/£~OðÄAÖaÄߪ/Ã*UßBvÄ o~a~<ãÄ/£vb|ª:ÄB, AZ Öý/@hª£a|ð<î.|<:äýaßãA<ähbAðª+ðbßão_bü|bb/B*ª©rÃ¥U£@ A<>Ä@|+B~Ä,Oa,b|.ð,î/üÖ,ðCv<ähÃüä~b* /a>~::*bî*r~¢:zvªîbÄCÃœ.zîu/A. /*ÃUüðå ü>,*AÃœbîUÃ+ÃU©ý¢u£ªO©uAz¢~ðãã+>++Zö_ ÖÖ¢UýýÖ£ÄbÖ+BA zÄ£Ã:BÃ/äubäOa üÄ/z<åýöÃUZ£î>o<Ã*ob©¢ubUazÖAöh|£,CAðß|/ ÖüAö£ >*b:|uðÖCÃa>,C_ößÃÄî©ÃîßO+bv¢¢_ÄÖÜ_~ÃBäCãu+:. |~u+ÄZuéÜ:vvro£CßãÖãr£ä*/OZZä:ßCåßä Ã¥ Cª/ZvªU zZã:O.,Orüßåýß~h@uÜéCü.ª<Äh.ð,UBCäý/.Z,ÄÄ¢î@a*zazÖAã>£r /ãÃÄvÖv~~ÜäöªÃBö,Aö>båªh.hCO*.ª:©©a~~©:ü*zöU<*.ª£b/<ÄÄv_u|Zh¢BuoO.Zö©@+Ä|ýoÖö+£bÄ>@výCÖü,:*a, UBÃœbbb<öCÄÄîÄ|@~äîu.h|üOb© _rO* U£î£OZ~ýU|,|vrA.ååéoÖßZ,UBu ª.*ßZhüäÖÄOAzÃo¢äßb+B*ßöuOãUÄýðUZv*Ãœ+îÖ>©:~£CÃ:ð/b_Z¢ð©ª<Ãð/ßåßh|_©ªh|î~hüÃåß|ãð, h|ª.ÃãÜßUßÖröva*o,h'), (N'ä/+£uÜÜðîaA<ÖU@hßßãzzBßðA.Ã¥:,:ß*AbÃob'), (null), (N'A îÖo:@Ößa~zrýÖÜ¢/¢ßîz@:rÃ/Ä_+BÄrãZýObÖ|îC£+Ã¥Z_Bðr:a,Ãœ >*üö,îZb©äãð¢,~ª/ªÃªoªäb,@ßä:©| ßbîZÃ¥_ä>:<>ä©+ðÄ ~A.ÃoOÃ¥<î_Ã¥B/ªýZ>C_Ãœ:>@ZýðÄ*hä>£:>ÖåÜßCß~/uÃœuÃ¥Cöör~<ÃÃA uÄ~z©< Öªä:_+ᆚzîbßý*Ã~ý<Ö£bUr|rßb©@b obv Ob|~C ßoÜ¢u åýazréÃ*£å _ÃœrUu~îÃÃa__.î¢ Ub/ðü>OÃ@ÃœC.,|ü@oUA C~öOÃ>~ä/<Ã¥ZB*/Zuü*bª@Ã::< ObA+OÃ¥zr©CUr<îzUAåß bh©zråüêã>ÃUo.ß.BÃ.ßoÖOüÖåhZZÃ|¢oZA+ÄOzî|ªã¢@üz>>ßöO.@î+>*/aã:zoðBbÃ¥+/Äî,>u_ð_:ß|£ß:Ã,u£,£ä+ÖzbCZ©Ä/î/CbCAßîZ*:üå£/r£ä._ä/>Ã|*ob/CUUãAÃ¥h@Ã*Ä~ *AOîð@vu:. B_Ãöäb©î@|Ã¥UÄ£*hð//.bÃZ.©a+ö£©Ö ra<©ãüÃh+:öZö£Cä|,*ÃœaaZ*UZväÄÃväß_bÄo©zöÖzA~ßa:aî>+vzüzrÄh/_Ãß/¢rb<,ª.ÃîB,AÄüÄ_ußvör*ý|ãUãýAuÖvðä,+Ã_b,>ß:Oîö~Ua~rÃ/Ã¥UZu>£oÃœ.©© hBä|*ßÃÖä/,îߩ壪ý/aaãb¢Couåî¢BhÜãÖãé£Ü@ü|/ã+.ãÖ>o/u© zbu/r~ßäu*vCöîAðð ©>bvªßÖÃ,h,<£îC@:ß>U:rÄB B|v:öÄ~uC|ovA:/Ã:O©:ÖÄ+ý//U.Ãä:Üöð>ußArð Zåßü,,,ßzÃ¥~åð~_¢ Ã¥.<ýv*,ܪãa ª+:ÖÃ:ö,b_/öO>au~zbaä:hÃœ: A_/OÃœ_+>Ä>ChUC~UZ ý_ßÖ*OOZÖý:hUÃz*/.öäÜå|Ãß>B:bü.¢Oᚌ@vrvý<ß,b|v/ßîÃOz.|CýCüãbÃUß|ãü.î,ßor©äZBo¢uU£¢ovUzÖv©ð,Z+OvUýßrªã@.B@ü¢_vaß<Ö~.Bb_ @uou<.åã<ªAC*.¢,hrbÃvÃrý©Cð_ÜÜoO/>Ã,Ãzö©£hhöUî:bhOZÃ¥aßbßaO|*>*bÄ:ä©äÃUÄßv,BC_vÖÖ£ä.~Ã~Ozb.>+uª î<:¢ªÄöZÖ/ßÄ£ðCa£|ð<~¢bðå@+~o ©OO:Av+ü+ðåhýbvÃC.+U@hhövUCoßÃ.:ü/Ã+äb<ã£ÃOý~/¢A©r,öuðß_bUrßhro©>/O|*åßbö@ªãöh*ãªB>ªZ>£ÃüC/öCobãÖ£_A*OAÄäAÜ¢ÃåU©ðßb©,öÄÖzÃ¥A/ UÃ:U~ßbîrzü:aîh£Äª aß:h/.:ßðÜÄCr,b~C~vÃ/_Ãœ|AãCaCh>ãßä£vß**AðÄ£bZÃœ:*¢,Äß.bbß::Ö:O>ÖÄ<ßßý@|,Ã**üh||Uv+¢ß,b*©vo£Öðß.aý Co.@Ã¥*_ÜÃÃu/©öår>b|Ã+©Co_ßåß<îð*üß/.ßÃÃåÄ :zö/bvýb<ÃzÜßå<ä><+ÖªZ,Ãœz<ÄÄzrðÖ~ªå©äý+|Ö.ß|z~ã|*£O.*~ÃoîOh||vÖZß_OOýßa@BßýO>ã:Ä¢o+©a@.aÃ¥ÃÖ©äßý>£>ÖÜ,£|@£©z@~|£bÄ.ð.Ã¥BvvhOzvb £Zß>@ýbà ýªãA*uÃ¥. bÃü:Ã¥~ª_U>£r Z:zaaÄbA©ýAbößbbîbUÜýr++r.uîüÖ~bC£z+Ä ro*Z.Ãð+ðÜ_< /,/ Bböß~>Obî,üüZ>©+~ãb/ÄÜÃ/ß>/*>/h£ÃzrZÃœ>ª©oU>zü.¢ZÃ¥CÃ~za¢z,>aBbß|@¢*ÃAb£C£ý>@©*îÃoAaA~UÃ¥*oßÃüªz,< ~ÄÜðÜv ßZrOüäAr/ö>ååuîZÃý@U*©@*ªarb£Cß,ÜÃrZAÄ+zÖ>@£ß@ªB©/bðvaüoÖä|ö©ö_zCCCOA¢va¢r<ähä_B.C.ubîCÖÃb_oh/¢ßör_©,/bbOAzb_BaÃ¥z<_|_ Ura*/üBBÃ¥r|£îð åÃüA*Abªbr¢A£ä©åbv¢ü ©býBübhC<Ã¥rB|/ß|@OZOªüoßö/Uuz>,Zöýr£üö,üî>|z/öb.äz|B ßÃÄåOo@ãðßý>îh|uo~~ß vB,ã+ý+ß*ýðZüov>ÖÜÜåCýÃ|ß_ß@OÄÄýzý@¢zbßOoa~ßbröüzÃ.ßßîuZ,ßAãO㣣Zöýü¢¢OÃüªÄB,î>ª~ãr:zîO,ÃœUu .U ¢r +ÖªO,.éüª.Ã:+,,ª>_î~bar©*ÄoªÃ£©Oªo*ªÜüväAä|Ãœ+/hðA¢ãBzÖzÖ,@AÃ@bUöÃ|ãuAÜã_vb_r/.Zî~u~Cß~åäãªrvð~ ý¢¢bߪðîUßzßvrC ýuhBZÖ¢£ÃZuAÃœ@<Ã¥oª|<©UÃC_¢_>ªÜß/üoߢ,b ¢h*@ßuÃbb Bvð* Ääîã|>oh:C C>ÄãÖü /*ÃUäO¢Ä >üu/O> +ðÃu/ê<ßãÄðäaaÖCö>ý~:aÃuão©oUÃo¢o*îAÃÃ¥ÃÖv/A<Ãä >uB<©>Öîðýa~_öz|h_ZéBÄ+bÖUzaüv@ýßOðhuÃ.ðv/îöÄ>ªÄÖ,.ðboZuh©£ß_/+hB*CßoÃœ..ß|åý@A U©>b|:öäUÃ¥/vßB¢+ßbÜä++ß|ýüaCz/UBÄî<äã:+ÃöZu+öö._uC uUzBð*ü*C¢©î¢©©:b,ABªuÃÃ¥BÃrßuboZrCAã,ß|@äBUbv,ªÄv>+oraÃa>/ýrhOhb:,Ã@£ßbuß@u>ü©¢ÄC>@ÃÃabO+A*üß*+ÃüOªäÃBb:/h ©ÜuAãßZb¢©.,:z>hªo_ZÖA|Ãœo_Oü:ü+Ää_UÄUßAvbr~CãÜîBý¢üîåO,>üaÃ¥uãbüBîãßäo/ÃÄhvu_//ö,¢Býßa<ã©hÃÃUîß/ýu>uaöbö_Ã¥Uܪöãb_b>~Öbob/ýoÄ.Ä>ßzãUzöuö:~h:öÜÃuÄZ©rO.UÃîb.ÃœaÃœ @ß+/:ÜÃ_C Cbýª¢uzÖÜ/.Ã@ .bo*U_/ð©v¢¢| u/aÖ|Ã¥b*UbväCAu*îÜzbA,ª*Z~Ã¥r,Ãüa£ü@ .©O¢ZbßbB+/.Ãz+ãz@zãß©<ýaãü@CUrh@åðUª©Öý|_vîo:>b*CÃh©©>ÖrO¢/bzüãOZîß+hU£Ö vZ.|ã_*îoý_b<ã+Ob.Azîv|.Ãä|ÃÃuÃ¥b, .u ¢*BBOhýZCßb/Obߪ/.ýÃaßüý£röB>©h/oä.böuÄh~C¢b>v@hb:öð.< ß+B:ýråß/©¢v ©Ö£uÃäoÃ¥Oð>+ÃßAbÄua©@~ÃäÜÃöÃzr+äaO ÄUýa:*BüUvÄ._ã_<îu.+,vazU£ää¢åöÃßbC@Ã:OUÄCß@Ã_+¢A@£.üCö:UÃÖßð£ã@b~z/:ý@Ã¥Ub:©+vrö@vvhî~ãC~ Ãð*vÃœBãåBÃ¥Ãß,ßä:~z|@|üuÃý£,Ī>ÃräCZª@ýv+ã>O uÄåUð~AO©bßî@vÜî'), ('r¢Ü+|ðîÄh©Äu|rÃÖªüa@/>+,©ößBa+ß©CCöîoîö aäî@öäuÄß>oð/¢bÄv+êhßÄÜäbC:Uß~ÄAÃ>|~ã/ßÃbv>räUC/ðåäb_u|aߢ,aoß@Ã@z.:O_bü¢U~Öü>*|Crä ÄU<.hß ÃœBoBî©b hã.©Ü ÃZ|<ãä@|+@ÖÃýö.rîbzªäbÃ¥||£a/z@/abÃbÄ~:ÃðåB+O>äChCª||ðÜ£_ bö©Zrã@OaoU@OÃ|+Ar:_o/ßOö_ãBA|Zb@+_>a¢ÃUäý<Ãä¢öðaOî~rao¢h>*©ý.o:ärýßhb*,@u©oöCzzªðBã©Ää>uð*@ZaU/ãAß©¢hÜöß>bü ý©AObbbzzßh*>|uÄãC>üuzðZ£©:hoao©åouUz uöOC_U©zh~_Uý,_aC©ÖÖ_+¢ðoz¢<: *ý,@Ã¥|ßBÜê @åªðAÃœhÃ¥b_>|Üä Uüuªrãßu|ã:>ýraÃ¥bouãÖ Uvä*~vß<ãÃAu|h|b,<Ä£Ab|vh©b£/,|a~îÄöÖäv_.BaÄ<Ö£ä ýÖÃhBzOÄ~rîroA/OA¢£.ª _uouöbäß+Ar :£ßä<ª_UO£* vb~@:hý/ér@üå+CãÜßåaß~ß*ohbä*oîäßöå: *UbÖªÜ/zåªU.,,ß< /:ßOZýö|+@z£oð<£@/|ãvuß+bv_ß/üÖb,>>.©obvCOuvC£ÃÃÖÜåüU£bu£/CA/CC,ÖuU©/bü++ZÃbý_U,@äb©bßßÖ/ZÖUAAßýbß>Ã¥,bvÃß@~öðýuBOÄ>~b: ü,>uhzà *<ÃAob*ý:ª+Ã¥|räã/b£bz@Uðª>_>îãC,bOUz*ýßUÖaÄöÖCvÃO:ÃœbÜîb/.Ã¥~ÖOzOOo£AýoÃß~,ªÖÃzßý¢BîAýOC£ðßÜãhbªu¢AZh¢bb,azA+ᚙC~åü£vZOýAýBO,î£>ß+hÄaÃ+_A@A©hÃãob£UvCöü ãZB£ýåýB£_~:£bCî@/¢Öv@äZoöhÖ£,+ä.ßäêÃ_h@ðaªo,>ý_*ÃÃzub /ßUhÖ/huz£Ã_OÃ_ZßU>+v<Ö:/*£ßhbðßãýÄßr©Ãª¢Ahª:OäC©B>|+BüäÖßÃ.Ãœ*bUÃåÄOaÄBh>åÖU hýU>_hA|+.ÃAãb,üzãZüåå|<©Böa+b<*Ä_ªß/ðurAÃ+<üoo¢ÃorbB>@ö rä/ä/b ,©BßaaäÄý:>@äUhrÃ¥ZßbðÃ:|ð©Bou~Aü:Bã~b,ßZoz<ªAbüªaåÖ_£*/@zÖ*¢,Ã<.._bÃœ,|C<<>î¢Uã@äÄzB©zv boÃ¥:ßbr>ürr:Ãœvbh:ßZ:u>ðð_h|îuýCBZß/zª/ßo£AÃ¥>vÃ||/o¢äAßB_UüðÃ>ZvýbCOüãÃ@AaCßrª.£ä|ýB©*Öå/h>~Ãâªãðýîöß bC>ßu¢ßbÄvü©å@ð::/Äý>*üvÃœ.Ö/h<ßövz/ýo__vªbß ÃœAÖBð:@Ö©£>©ü Ä/>Äãð@Ã+rh|äÖªOaýoª~Ö/,o>ÃZCuÃ¥vvhzýb*B+,oBOZýßÃh>¢@>*ÖüýC_ Ou¢h Ã¥ZÄ:¢B©åßr.©vBOÄýo¢~+Öð, aüßÖOo_öä.ÄbZ>,ü¢Äo zÄa+¢Obý|öh+ C¢häCªAåÄ.Ã<¢Ä£u¢ÃAÖbAZö/haB_,îv ÖOÃ¥vC>BC/~z îa.hä@Üü>uð£¢/ýª@C@£Ü/ÃOÄ>b_b©@>OBUßðÖhö©Ü/ýOü££*|îåBZ|îßU.+/UîßÄ/:@rrÃÜü|ýaaÃaÖä/r>Ü£.Ã¥@*üà Ü@/äªZÃ>C/hÃ¥hî@z|Ã¥Cu©@aA.bba~aäua/rb|h,.vvÃýbª£Öå|ü:ã:©U@,:|uÄîC~îåÄÃ<Ö.<Äü,Ãœaýß,zhaA,,_Öü@OÃãr_*¢.hÃöb.ß|ühaÃœA©Zö:_u¢.ý*:Uß ªbuzð_~ãäĪÜvU:uðßÃüu<ªª+u£:îvö£B£AvOBU:ý£bÖð:*o@h_:C+,|¢Ä|zðuêÜüêurAß_Uý|.ä©îå>öÜÄ<_Ãv:£<_ð_Öð:ýüÜÃð BÄîå+ßhÃœb£/.ZöåZ/ü*Ö|_Z¢ÃU£öäÃhh|ª©a~£*: Ã¥.î>C:ü|Ã_ß,oÖ_.ZOhorî*>Zã©ZåÄܪî/Ãh,C~ß©+Oo Ö.äC~Zo_ßaZÃA:Äz._ãA:OÖu:b:v¢î*.z/ @ß~@ZhÃbu,CðbÃUbUA*îOZbãvbåîî©ä/~Cr<ßa_Ã¥ÃC@ß*h+~+ãB+ö_ouÃœÃvUUßo_@© ü>ÖUu<CÃz@b|>üvrÃãzÃ¥z|©C|Z>>ÖãüAa,baªA_ßBUh*ãbðo+bCßbð|b©îÃ~Ã¥ACA|/ÃœBîUª©z>ßb/ Z@+ hÃÄoüBãý*à öîbhBÃœ,vãvC::>_C>£*¢Ou|î.z,<©Uðîî**ªÖð*_îv@baUv©.ü *abhÃ*hÄß,î~~ u_Coö+~zßÄîÃ<Ã¥obÃbÃî~åãr¢Uªu_oa©ðÃßÄo>:ªÖbr+UAäv_ããåÃÖ Äî@ÄÖ+Ö¢ÃuÜÖB:îuªBo_©:üª+*©ß>oßUý:ýUüÖã,Z|©avCobã.uß_r£Uöð*.Ãöh@/@Ü£:©väUÖUBßö Ur~üböýÄÜßÖZA,/Ã*/h|Ã*@¢Oo+_Üö|/a~BrBüb~/ßýãÄ+u:ßbå©©,ªî©üÜð|:ðßUzZ/zuª+,_Cð*©îßöîÃÄbåܪýO_COhAýåoª,BÃœo~:@vhv©_ýbýü£ÄrÖ*_©:CÃ>rv@CArb@ÃOÖov_¢¢ z£_bro+v©,vã/zAåü aªh¢*ð_ZÜî|öuÃî h©ä:Z/Cr.büÃ,rªUuÖo¢ðãBîUaÃãb/zUA.AUUU.Ä@.äÄOöÜ*O©:ßÃÜã©~öuvÄvCýÃÄÄüo+ýý*:C>ü+Ãzu,£.ü>>U~*©ZAhaUzåü:UßOß©<:Z© ÃruîAz¢Ãauu:+ßÄÄüu/äOB,vb.rãÖ>br~U©:bCBâ¢äÃuß/+Cö@Uäßoªßüã¢CÜö@OaäChU©ãCÖu|U£AZüßÄßýß*ßBb©BZ<|ã©*|uðzUÃ¥Z©CB|~+hð|£zbh@+£bAb~~|£r+ååBß*£~ã@zÃvu>Ã@oÄßvÃœ_ßO|äZoZÃC<îrÃ+._ßrr+aßuAãÄo|*zý.A.:/B<ª¢z@ð_..:ß+ußruÃ¥h~ýhobª©öö©_|ðü©ÖuA©*vBöª/U+rC>ßrhZÃ¥:ö _A£~üååã_ãÃ:~O__äöªbrOßÜbAUðÜÜUb/¢/£bv~aÖä|Ãb¢U+üa UÃî~üZðähZ*îbü¢,ÜåBßU*ª *ªCÄ/ÜäöÜ/a @A:+o,/Ä,ö@Ä/U<>Ã¥uBÃ¥C~U*or/+/,hªüzåÖ.Ä¢ãðîð,B.Zrz+b_*CrðÜCrüöbZaßîÖC+Äbo~Uüu©ãUÖðUbbz~vãCöüz>©åãªî|r©oã~ZîöCoüvöä:AÄauÃU¢îa.ÖÜ£ð*CªÜZbBÖ.<Ãœ.¢oÃh©A/b¢Oß,rz|Öh.ã>UAÖA+>£ß+vZ_/Z¢äßð¢U©z¢Ã~+ßÜ©aaoBÃ:ÄßZÄäZ/övzö+A¢ovª< Ã,zUã<ä~+ÖrUߣßb@uÜüU+*,£aÃœo>Ã.ÃÜAb,|ªb,.ã|@BÃ|+ßCÖ+Ä+:aöãA£ÄÄb£ ><Ö|,<îo+_,ßßZö/, ,ýAý,~b/Ã|.ÃÃÜîrªrßß.¢ãu ßbOh_Brz,©£z@bO>öÖ*ÖÃä¢î¢Ãâ~îÜ'), (0x08757ECC341053DABF2569D352C8B231845DD236EF0EF8D319BDB26902F0047C0441746578A98F5C022B6B06EE2005B1319ED0CA132E5CFA7CABB3765DEAD7CE20ECCE11534CB8DACD7633C3A3F2E4F8B7013764203A68D5E57AE8CDF618FF18539CE50251F45EE4E5F5FC9DFB98568AC6BABF5CB273AEE683F82CD863EBE4B5771A70060CE2A6C3A2527F2A3DCBDA4C245E073B59A366E0EEFF7F59C88581F9104726E028507DE314FBB95FF383A9B71EDFB405E3A95BD3B48F180D634DFB1CD18519F5A4FA24D3E123265EE906ED6B55C73AE8D17C1567EC522B99387080C6009C8D6D69B31323BBE024BF82FDEAADA1ACB79C12124B556FB20952CF8B9B70A3605D4D787F01A2B4172DF15756E4EF687DF78BB8E3B3ED5138FEB6A9C0543044B31C229F9C3422AB15E7FBE559FD19CE1AE9519310B8BFAC70FC40814BF8F3C3FCACA439C14FCB49D4E0A2FCB807F73AE4E88FD7039C33FA5C762EA0F4A15F1DF437E8AD59DF0CCA1D07BF3016C3F36805059C62681CC06079AADD4B212B5432808507801F4AE104DCC5B9FBDD03E49882C69BEE04FDB4D8778834AE02C0A9F2B38CB090BC7249BB249886A362C48375C645C95A90662E82D12F09971532021B1BC748505253DC0F7CE0CA6C761075B304BEE8BCF74E614D5E2DBE8C69B2A5F1956B889B7C32237268B9DDB09BC10BC1B95592574A4523CD65FBF224944FA5), (0xD70B88DA36D29A75543D70B1B19C21FDD2131F4DA64F47BA35813FFEDE19131275C2EA0039DF1FBFBDD4F1E65CB4495502977C92AAED3287C4CDA4B5929C973B295D3CEFB221C4F2F46090D15E615E8137E9FB469C8168878F623C6C3B692C213DB6BCFE775AA2E1D28A9D4A5D6028626E227DA9A0509EA8), (0x50E558B78A336F94A8A56009DD46197412E41D292F3AD9FD19EB8380EC171308C2FB52FC7AD21217EECB80BD0D18A06286DC8CC3D88B2F150B5A9E9EAFEEA890915847E1F31DF93FD1063A63B91CF0004B21FA108A503036CB3CF1203473670023EF2CB5D1BF6E69E34DF1D151CC5CEF6A9D538EF4970541271016B62CD80A5E9F3A3FC9F03A2E8BB2902C3D5E5EE5FEE001B69720D90B8BE9EA8DC1A9B73C0A429332178D92FF2F6FC7DB636AC8E3C92A17D62A22733DC52EB3DF05AD6DE2FB5422FACA2CCE714E02862858FDA8202107C49691E112E7CF556CE9D9B2FA8202E4E00F48CE189D5CA587289C4BE5C88692BEFDE8D65019423B2A74BFE5979B070326731D98D853EE273AEC59E94B8470A46247F4FC9A2B94C6CD0CA3A4DD770DEC20982572ABEDB96B0EC19C64C058F0A6041B8250A70B69FADF57CBCBB04A49C2DE6DC8B25FFDF9758D89EED88F2F05741CFC9FC2F5BC44152F2A925421EEBBC378D985538F3E4706210CC31E1D916BAF5157AFB3AA86CC2228B382346BA5549FCD2A60B5AAB2E4DEB599A0E9F926F89EBFE302CA3E0718F10D632BDCBB139B7CB82450F231B5059F72D0FD11E6E32802BAE47487A28960C6116EA846870723A2FE2331D5D5056C0ADD63586E09070A293A2821D69E13DA2EC38AE1C20DBF176AAD5B12C2B2532CB5776AA93E31F1BC09637E0B5EE64C03EA4902114B24AAFC1E4BEDC1AEF44877E7FC6C5E34699BFCD2CED75E8FB3B98460582878AF42E190CD6D8BF344300E151B06246179EECE81AE053E7D4D4C6C6B92696155CCCFC8A41BDC91C6DEA8B8A1C0C143898F570A7289A7CAA903634280002061DACFB8484C3E7F469D5C08A2064D9DBD8B09E3DB3A5EEECC25041EA1B79910C5BE47DED20778F64A0F116C168004C45C66A6B6771C44277BE0EB23471FDE8E044B42E4BE6ECAB5131298CB28F2D84B203FC23B11E299A8791F62F11C55AF2B318268CA3E2005ED9BF1A3658378FE8907A003075CA27D21B29A6A9F0CD898BE626D99A5890E0D003AD49F1F3F33240121D8E97B51A8CF8E054717A3B666E1C358E50216DE5800F99203CD87035EE27E75697D33EE1D6CBA9E0AA042F66949D3F3DCC759300D22C8D8F0E94EDA478BA664982E4DE9ADD43B794878D4B7BE0329B9FA942796884E6746B45BFE331DE0567FF9DD5D3BFCE946088BE0E8954E1119ECBF95E0B26410DC4AC6063451D5075B682154BEE1A6EDBC104E1F0BA765D2F8A34111738700A41BE9001275F5B5F43284848073F9523846D2D8CF64440434E4F30E9110C393D3687D39D4E09378C65B59EC8622E55FFE5008CBA1AF3040D6E4CB2D82E723E46EF0B118F5C07E58B35A11740A577D11FF93104007F8F124373D62EF1465F6DF37757E9671CD6A3DD2B017479DBC357E66BA2EEED7E2DD75FE8CE0B85E8E444D64323C94D9E79F3129D26E56E0AA867B07E3885A37070854980897E5ECB2DE436CCAE36B7FA1A57F1AFCC504738694540664B07B06E9165C29E7FCD14FBA4477F32BEA16C71AFC663E093F3B4203E0117343DE8801633D82B4864197A4D42F5FB74D11489B7E8CEB68493CFCAADA1A2606EA5D0CDBBC7590EE686240D864C26AD9DF83F4F29876F5B6F31FB82640D8D96C1B90BA762284FAD8815A331B4C130387D222CA5625346E746756E89CBC69AD9089D4BDD308F3B75B891C713E42D96AE01B31531D0D8246E722450ECC9C5D1B17ACA3927755307FDF6B6FCD08C230318EEC08808B158F82068DD6B1C2E4EABF2B0159919F47F28AEBB274B19EB53D24F11480E094DC8F021C208CE97F7EBDFB80AFA107699E9146F97D94D9A1DDE3514FB1BFAD630A2B4E7157747EBA080A6DF57831EE1336BA538239E61647B6603E3C3A99CDBF0F9776845295122A138CF07327E328ACF43E19F76C2B29231406BBF63541806F3CAEE5E0BA6AC0A0A8286FADF6A320D2389148FC80D652E46E52704BDA1BF4D10B813679FD47F28A7E784E43BB7B2D71E6E8BDA4F983EE655B017267F974C58C349EA1746CA6D4F09FBD7E07880F28F225FE65F25D50D78892D01EFCD58A9109B3C10F1DD9B9054013CD043C04E7DD4CD980), (null), ('00000000-0000-0000-0000-000000000000'), ('2001-01-01 00:00:01.000'), ('2079-06-06 23:59:00'), ('11/19/2008 4:39:16 PMThe quick brown fox jumps over the lazy dog0123456789,.;:?[]{}()-+*\%^=~!@#_|/0111/19/2008 4:39:16 PMThe quick brown fox jumps over the lazy dog0123456789,.;:?[]{}()-+*\%^=~!@#_|/01'))"; + break; + + case 14: + $query = "INSERT INTO [$tableName] ([c1_int], [c2_tinyint], [c3_smallint], [c4_bigint], [c5_bit], [c6_float], [c7_real], [c8_decimal], [c9_numeric], [c10_money], [c11_smallmoney], [c12_char], [c13_varchar], [c14_varchar_max], [c15_nchar], [c16_nvarchar], [c17_nvarchar_max], [c18_text], [c19_ntext], [c20_binary], [c21_varbinary], [c22_varbinary_max], [c23_image], [c24_uniqueidentifier], [c25_datetime], [c26_smalldatetime], [c28_xml]) VALUES ((844364759), (null), (20280), (-1662199111), (null), (-1.79E+308), (3.4E+38), (0.5650), (0.8713), (0.9650), (214748.3647), ('ÃÖÄZBvbOr@ü/î*ãzZ/aÃœB.U>ÃoîßAZ:Ã,Bîa|ß@Aðýå©r,Z<üîß|©ý¢äãÖ,aZÃöo/©Bb~ãÖ>ðüãC@~Zzä/äC:Ã¥a.:boß.>ÃuAÃu@ZUîho £Ãh@ v:boäããÃ_£Ã~@©öb.uªbß*ÖAª_ÃöCUzvöÄî *Ã¥,rA©å~©+:uUu:@/_îÄb_ BÃ¥|z .¢ßÖªÖb*uåÜ©å/öovÃÃ¥aäÃ@Oý¢Zß_Zz:+_ob_Ī>oCz_ÖUᛦoãoÃZ<ÃB¢ÜýöOAAÃ:Ä~Ãvz© ÖhvAÃßî/ß*ÖBÃhbÃßå|Ī¢,î@.|a<:äU/B*ýã©ýO£uÃßZðüz£äî+ÖöÄCÃ+@Zvîö*>>©£ßBÃ¥CÃ¥+b,ö~¢~:v+ª_<>>+uv|ýß>+äzOoÖðãa_ ßaaov~'), ('O:*hªUã hÖߢÖýh¢bACÄuäðOð@zÖBbðÃ|ãzî@O~îîªÄUÃÃbAÃ¥_O_ÄÃà _orbðbUbßbbð©uBî/rߢh©:UÃ¥COäÄüª£rÃO/brßÃäÃððUüv>Uܪ ðuCªv@ýüß>£aîz¢©:ý¢/z©ßÄ*Ovðäêð*vÃý~~O_uäå*bðAð*~AvooaU.,vBUbBCåã¢~£båßbu:Ãœ/¢.h*~v£*ÖrU<|O bZoÖÜ:*v, Ã@o:bð|<üÜãöî<ã<_ü:,Cbî|ÃßbÃaýZoÖaåÖ<å©vÃa~.bª,,ÜÄbð*ÖßvhÃ¥o,,ß_ªðßö>bãZvbªzBhC@Cåîßä|Ã¥~v©åzö.ÜãÖ:ÃCA*A>ðÖߣ*<@/ÖîOÃœoß/@v_v:ýohzoÄ~ü,uîÖ<.Ã¥CÃœuußo:|bUaÃöaoä>B|>Öª<>¢î_b@ý.ZÖð ÖAz:z_ªBbhA¢üu*.©îîC@ZÃ~å¢.Ab᎔aÃ'), (' '), (null), (N'o@.*ªv~ßO~Ö+ãßß:zÃ|©C~bU.b¢vß@Ub£öüýå+ü¢A~ä:b*Cuåö@/b~ã|Ãßã/©ü|ªZCýÜî||©o~rßî*/ýßãßUßZ¢ßoOÃ/A|Ãœ_@O<ü¢BÄbãåU£ßªª *ä¢ßo ßa>OªÄåh¢~ß©zÄå<*ÃhÃ,öAüý_~+BOðü+r,:::öÃ/ðãü_ObC@b:£ãZB .aîuh@ÃÃ,CãUÄîr©ývöZ_<ðv/åéÜýaär|bäªÃ|îuo~.*ß,ªãÜ©|*ßÜðb¢ÜUßAî,CüAhä bvÄAb,î@î¢Ä,ä Ãœ,A|ÃoÖÃrîb©/£*Ö|B ,öãoÄu>äu Zö~r¢,BuUÃœ|*a hªöCîaö¢b:,ðUz*uz@.å¢CBUAü£*ã_ã~ãß~ª_à ,©äCßÃoßäaöUý/ ßä<ßbߣÃC~Bã¢,üÜî*hö:ßh.zh£ãößBÄbî@.ÖbÃœ*¢Ü@ß@£.UÃ¥@hÃ¥~ãoz/>åð>Aö Uv @|O+ãrª+bAÖbO:Ä*,Ã¥uBC.,/£îðaªãr|vzîÃÃhzÃý:bZÃ.Ã<Ü©_/AouBoÖÄövªÜUãOßå|A©v|_C£ CÖur:UðZÖ_BBß@ö.*/+Ãã:>ªßðÃýZÃ¥Ãß+äöb£ÃÜÖ>ÃãrCÃü>£v¢+_>ðaÃ¥bA_A<öð¢¢aãå+ãäAouv/©+ ~Z,Ää+UäðörªÄUÃAÜð~<ÄhªZ.Ö*,v©|u©ÄöÖBUbU+hîöoUoß.r>@båª/©CzBaäªv+ýðýZýö_ã B|U£Coª_ýbobhÃœC@býðüU@_£|o o>.vü©ÃÃœArAýh>:Ã¥_B ãhåÜðüªåB~a~Böã/b|ßr+.ýbzAýß<Ü£a_u OZÄ>z*ߢraªöAZb.zÃîü/hß<åüß, öab䢩h b<ã|ßßbÃBü>/* Z£UÃ¥A_bCA|Ã¥@vbA|äv©Ö<ß*U/ £Zo:£üUaßCÃœuhß©£Ö/.:Ã_ÃãÖ<üßbÃoîßü|îîvvvîߢCäBßbîßý¢B~ ÄOa*,o Ã>üðäÃO@>O.vßbC+CßÜ|Ã¥uÃ_ßr¢äÃîðäB~bhhðuhÃ¥+zßrßÜZ~ßî_¢ª/@Ö/C©b ߪU_OrýýuO~£Ã>îð ý/*vîý,U>o@,Äß|B_|Ä|©£~ZªªÃüýððªßChUÃbåªäzÃb:~>*a_hðr+©*ãb£zv/v|uî|~à ,<©BÄ*ü@ßaB+ö/ßý.::Ãœ,¢.~ .ACã_Að©Ãh©vC£z, U£uî<ãÜu>ChîöÜbBÖZ ãÃvýOÃvZCÃzßo,b+Ãœ+/ör*ªbðÜÖÃ+¢o*+ý_£ý£Aru_£bub,ð@ð>~ö.oã.+h uÄ£ÃCäªßUäö*.AAäA~Ãœ~£vâoîUîß©>ä£/~Ãoª/ZÃÃܪCZbðhýýî~rr/¢*ý+@:Zr<ÄÄ<¢vÜßööî© /<Ã~bª @ªZ:uoCߪbÖv:|C,~~zäuOö¢z@BOÃ¥vÃœ:äüÃå/vU:oýrÃ¥O¢uÃœzBoýÖÃC ££oÃböî*Zz.<Ã¥Uöz äÄuýb:Ãz äßBßÃCã+ußC_.ubãªärÃîboã©îAÃ¥ ~O<,ÃbCU>¢z£>ahrÃœ/AâªU _uä>A£*+ä<ªÖ.©,ð©>bvÃr@¢ßv,zZ_ã,C>Ã:ªå<îv.<Ãö~îðBBbC@ý£ ÄuÃÜvbbz¢r¢ðýözßAOýZÃß©u*B¢rðªz_Üö~ÃðZ+@b.u¢@o<ÖßãÃZã,/ r,:Ã¥züä£ßßr.au¢ObvÃœ<ªvã ¢ä+bÃ¥aÃ,@U<_ßÜßb~hoýãhO£@öaÃ@.ÃÄ ßð.aýAzUrB©+vOou+_U.höÄoC~ß~ßA|ü>:Ãä,A~Bããb@ZvÖãzß öo|,Z££ã bÖ*åÃ_ß,/v@£ßð Äß~|ªbBhýbvßu©|éÃOÖv:bÃœCß/åßuÄbÃœo>_öîUA|ðrB,~Ö/öü.bî/ÄÖCöî>éOvobýðC|Zßh¢O>Ãzý ZUª| ý+*ßÃ/ýaÖzÃ¥Ãöðzªßz+âðZUrbßü|uv*Ã¥<:©Ö£bÖÖýý<Ã¥@Bhr*UĪÖvý*Ü¢ý:OuÃC<£>>Ã|ÖUBa~ãv*ª@, +v|Öhu< üAbZ~Öv*,媢:Ãœ><>éob/Aß*:Zzäüz.CCîßãßbßüÄüüa+u¢ä¢~+åäýÜÃÃzuãßvßÖ.C:ååÜßOrý:Z_ßýU©/U,ð_UhCCB<ãýh:orªUÖÃýäßr©å_>oð ýO,a/ßäå ÖÖ©z uãýC*rÖ<ð/,~Ãä+ªªüooäßÖ/Ã+Ã+/ýUO>ä:A_,ßÃ~@UöªãBa>ÄhÃœ>o<,b|,ü<,AðrrBä.*buo/|*|ßßåvÃäÄã:à ,böüaãvrÃÃ@zBÃ@Ö<+,BuzO+äUb.hAhÃbðã¢ÃvrÃU>o@©ouýåýÖuÃœ|ÃzÃ¥uv~Oz*£ªãUOîåAuoÄãÄo©ÃÄAB_oZðð>u_Ö@ý¢>ðo>îãîbBýö_bbÄýhu@__BÃœr+ÃðÖö+h@u_rð|©Öäßýý_rÃääÜU,@ý:b.oöhuîoBÃã/ @äß.<<©Ã|BUý¢ßbüÄü¢@Ãœ:ÜÖª_@ö£åvÃÖ.*ýüßðbzÄ> ðü>.ãO,Öuî_bbbßööÄbÃß_Uu:býåb|ubü:ã£ACC<<@:ãäzîðýüC~£ß@+ÃZöÖO>Ä©Ã>B¢roî㪪rzb,*oobÃ¥b:¢.hö:ðÖo*Zýßßo+uZÃãbZüA¢rz öß~Cª¢ubböÃÃUo©vzu>Zuüöå baO£+>Ão~ß+Öo+O~Bzvªa~ðªÄÄ.ÄABüãÄß_¢b.Ã/ö|£ z>oãzÃh©©Z Uzß|@buÄðß ¢£ð/ãåZÄCu<,îîß+Ãa ýð£azAß*rüã@££,+BOBîåUübZÖðî©Ã©<Ã~ã.ý£ª,a_bÖZÄßÖ@@Är£C/Öü~Ã|CðÃ_ÃãÃOräaÖää+b<Ã~Ö/ |zo©.¢ãuýCÃC|/ªbaü:/ÖÃ@Ãö£åäUä.ßbbUO,b/b*ýäåAÃzð//©¢Za|äß:ÄÖÖüüCÄöAb@++ð*©z,AÃOBÃãÃaÜÄBîðßboß>.ß_oðð/üüßbÃ~ãbÃÄb/|@>u,A<êhà uCäU@ãåßv©ÄåîübCvßUBüÄvýð~hC/ußãv>ߪÃ~|ããvOåߢz/ü*/ßå~*>ää ðÃÖ+bãåª,o:,©v,UÄ_+rZvÄobÃœAü©h Öäv¢oBÃ¥hbðAîv@üÜ@<*£ü<©A£ý~zvßîðUßÃ_.£Uhß. Zv+/£Ca@< >+vOuüo@~Ã¥UaB£:ß/+Ã¥Urß|o,ÖZ_öOUZ/~Ö:/*O©b¢U_BvOÄýãã¢Uh©ßBÃœ:â|,¢ö|>îý+bOuo|~AbC~~|C>~©O:B£ |Äü:bãîhéßý:ª<.b~BÃœA©äBb:îAv,bß b@:UÃ>ÃCð/ðÜ|£îCvBÃ¥aäzîäå,ªöäåz¢ý©.bao,b*©BUö >ßaîaZoß<âª+zîßUbCzßîUßCBÄߣrr©î|åÜðöäA:Or©:.ßBO_.AC£@ª~rßî|*ov@öÃß.CäzObãªÄ|*Ãz¢¢Cßo_vAZrÃoöÄý©b©CäbßîîAãBªðÄA<+./ßCðhhU~Ã~Ãœ.ãýzö~/©z<:C+Oîb*_+ý/ßBZr_C_üª:b CªýCZýh~ßbðü©ÖÖUBîb+ª ¢ÖÄC,:îÄÃA.Ãœv|îöb|U,£ÃOz@ß+zåÄ.ÃÄßýU.O~ÃÃB*Ã¥|Ã¥~>oZýöªvAaîßz_ZBÃ¥.ýaö¢++¢ÄÃ:oU|ÄZ£rÃCÄ@¢îå:ZÖoü+ aUzo_/ߢh©vvhBß'), ('© ªüoÃ¥+BbOb¢:Ö hoýv_Ãr,býbv+ÜÜ£ã_£zAÃbB.ß/+ª_>r@ðaößr£Ü:ö_ýC¢ý v_Ubß/Z,BîãÖZßß@<ãÖ/Ößã£îääBObüßßCBbZ/.b£ªäî*î>¢oA>vÃ¥_|:êoö~OuAðböOÄÄuA/©ßhüöZa+uöo|ÄîU_£,©v:<:,ßüzö ð/ß:ãrÖ.<à o~+UbhO£*BÃ¥Cr ÖovÄäBUÃäa.©zÖ B_bÃÃ, .r>åÃr©BbC.ãußß :.C,AÄb:äîaý '), (null), (0xC29E82197DEC94CE552155C089AA21684D34BC1CF1BBDDCA0DEFE4FF4511ABBFD7ECC6A53924BB859B4F53B92DCC8C50B5BB91CD719E0307C1B80B8E089488437696E89CE37B2F28793780A267249C4062934A897FDE4D39E9BFE481182C7C07C6104396E4EF6C398C69543A1D60A09D1BCB2B754AFFC39749AFB22496AE0F4CBA78DC57E0065C732610FD168A131B891E47654D0107BDC74CAB4D343D48A2DD59077FA48448BC156FB84E3901AC0C369329054F48C24AB3BB150A34B82736DE6E1FBD82937604D58B50DD49B883C5A09F17A11342539596BDCCE86E3D875C48826FCBE1EF8AA21C242FC3F7E401FA384F6A95A085229C1A8A26C5C78D969804F495C748B8E3B1147484EE128F9DB2BCD1B01FD3F1BBC25FD3B056C8C4DB8E8E97BF034E3AB17F6BB9802B0033898BED7409F5DD76C41238D36774078DE85099F6607ACF9A63812030B319708FC12C4A256954BBE6B117D2ADCA7BD33C78DED030920AD30EBB521087D5ACC3ABA2A9123A2AE1239494B34448A722CFE8AEE3B8D4483FFDB6593B6A164334100554270B2169981296BB3C9CDFC68A66988328D8F2F4EF6262AB5BE1EE770C515FA23FF48017AE7E16D021180CA31EF0CED4D1931A5C1E1064C5A8750DB6231FAFEA3C3C8695E680D5A9C121D2D655BF8D6B121AA5783703832E8FBA6F387160AD02692266E16939ED50BE709AFD3E8E6FE9E8A2), (0x36B339B858052C119C386074D06C3359AC02D92C54BAC66886F0014A8550CFBDA489336F2C291033C13F213739886E213C903B9FCADC247BECD0316804E18B4C69A3D04639C42C83F1A66B15988F2EFD81DF0EF5142FF2C764B7825BF7A72FE0B3D4CE96B827E87863B8AE23710FE25DA234E624D396383AB008E28141D08B49778A62C3C198445AF795915B81CF5655D425B9C3C10A0D1C9C93E5B0446736922C64ACE6AC1E9B09EF8C2D3D04DCB9E1), (0xAC1B17C8886C7D45272DB394158F5EFF2E1C2270A8B589B0D334DCD018BFDA03FFB8BA1B7B63DB406867F76E555A769DDE05AE9CBF40E4F69167F4548FAD2D6752B0945DD44383CA40E20741BE1A5A79BD3FF112113E43BED3C489146F87B0BB3A8F1CA5C619C89A82E35BDD39A337770D7B9650BB1A56146CD68910BA6F5BB9314C062EFEB4B3A47657902DE26685308C1207F3F160FF20390839EF8FB8E01387A2ABEC9C097858C8F1D96489283106505883A86768C7D14CE6F4F57BC315BE777DA63FBA98948399AE2AFF869B9611D6329E363437AB1FDADA9FB51483DD05DC1AEC0C82F14CB7C4000EB93EC74BB150E31E4824DE8A3FD28664E0F9DE6E16D025236BAF8A8FE4E6E6713429F1E1138FEE65316494E0FD90AD39FB8D6CBEE592F8E818A4DF02C55339623D6C5616E0A551510B793CB23C4425DB015094577A288CA23108C86EAFEB9FDD2A32A3913A9659553B1AB26C5545ACD47F040075BFE2E815E0B4E4D7DDE3A11FD95F8809A194A06BF73E1C5F751F4CEB5CF3EFABEB2A1E474A8DB086B1817858799393F6BDA233EA63957D81C6889FC067F97BE9F3F534AE4040BF13E31AB976C5C3E5E28C562DB9BF044856AD9C81C1EEF01FB8058F64835EE4B57DE2200748DC07BB02A3BD3310CBC229EFADDE01A4BEFE25F2FB0071365E6283A8A1B0D69FFCFF7AA6E17E1E30BC0EED436575D680E310BEE4FB144DDB9685A4403A8B6E1AEB8AF2AE645BC33FE0F436EC132DD0E88C02C590F1F2A4E7B29E0F5BDADDF630A0D258DB83271C874D7E0306DE60C868B4BBB437C6DD28F8E50AFBC54B676503FE054C40D5F56564E53D4373EF9D0951D6A7A71F28BE69C2A95FF5782C573CE6190008D8148792BE555051899AB5094700AAEFA3C045DA3F9B8A967600EC388E015C59EF95313D4E15E8C9D86DE027F456AD7881679826D325C93C89F01CBE6818C2883E5C19B2CF6CA08ED77C02D1BB62A21F5274B626693585C9CCF4B35EF82960C0AA58E9983CFBA814C7094F5723F781274EFC6CF4619B1F08D650E5DAB94295AD1B412762780AE357CCA15F5FE62DA5D5738B0FFCBD6C5E0E39E1C1EC15CD5B8573A13CE1CF1EAE44191427C03CBF21A9AA10662D3299F0AEE318299748F741FE45D9EB45F1C30555DCCBE3A8449DD179BF184105662E53DAB18DFEB6F417FB21D3297A63D4DBB8E60A115066B6476A4547AFD730B53C971786119463C54F61C5D0C1D51B236EA5E3605AFB55DDEC246923B96F443FCA6C979162DCC3475421BBAF8B96F4714F22D80AF4D05B40423A9AEC2B400CDF1C8605553E89C092E29C0B3940A552552FF7D397963A4BFA11564F2841D61C1315DB9304919F33C561462757C421009CE845BC336C7548E13B0B44E73A97500B80F72464124DC390C40E355013F335EF56B340FC19E8A7A093B1C9865B4B8BCAF61BD7CDFD9B899A812C6F5E40F8CE47D55491865753F2975083D160833D3578826A59F71C68F1BA29A57AED7948609AE281B006B90472A2293F7C79CA281644F6F6DBD59ED72B6D63D75DB1D9041D0823367E028C2FBE7DF7B6CDDCEC77EF008F36F6836D8AFC0B5642A2E2A7C1C92521745693AA14B7C7375DDDE7094E81EBE75C22A30D9A9A983A72AC498CDCD636EDA8BA77215C557A7E2F4B0FAD140207C1B7FA4B9F261787D9BD5938686D3B5A87A6FA619409CA8B07A724DD4E8BEA2570A488D5E28B97C690339E63031D1210F4F188061AA073B7ED6F44F70139384DD233C7C3E46578FC0F33D0606B6688E99514E95D03E40ACF31D1E773479FC456FB5090CF554E2B8E798CF7E7D0124C86E75A62ED50DB4AEE29F891137E04B56F6E79651AD6B89446E95AE377ED23FE1E85618CEC3DD7061F06A2A55CBD181074D7877856AD32B02EC51C04F5F7D30106F9738D1C78C8329673451433133788D14A6FA065AAA87153B15E2720D3102832A09F634A8AF3FC0E54E1E2681E7C1A8D9333AB88339B5B51013A6B1AA011C3631CE19373D43E4656739111C9C508353443998DA065A0FE054412484F88E16E421E7F4B3CE9A7B954EC5414A28A928BF90536D6068422FD7CE28D2FC2F6F7CD9122CEAA45BCF84A9CE038B4108B5C7AB1864E4A510B67BEFB81CF595B77F65DF486837FBCE7453C0CEC3A264C6EECF086127D3BA7AD7C86BB10AFC4ED9EEF25EADABF8A08DCBECA40123D65D041718D95DED348F9BAB5470AFCC4AB38814E6DFC153C71AE62E8A954B3FA957016B57A9E212F0ECBA62B2F2478800B181292BFC3CF68BB0500DE32F629F446C020D7F347490D165240A256E90D4C36E2DC9141213BD1A0ADFA759D43FC17A1B1E56E04A08CC4CE057B6C832D11D1F8B3A8501998B324844F36454DD46FD3562800A5049E48955618C23BA5CE4E739B287DEA9BACFD08FDC0EAB5694677F995A8165A2C6CCD596B12FA01D5777EB500C3A924578537A92AF7A743B3932B0FA1C9A5FDB8F3462F5B237E88B2FC33854234B4A69C52A210706D3034C489A6D8E6EA5F0CD281FD0D7C7AC83407AFF72DC422017EDE85724F26958C4BC3126BD17CA5A1C79D26B3C037A62922896D09C175026FA28827F9617810E53CF5B24A6A0EF7B7610D2F8F9E6E4146385C4FC5B98BCAD5C1A2C94954AC404F8D4076CB855CBE1392B6A8B34672D13347E0C105284A2CB12ADC89C745AD62B5CDDF025DF876C1DB9D3B3202E3178E4ED1950274EA3B274214C5A0A8D3F7CDE553F2E6666F743AD11FE567EC1829CD134E3AF6AFABEECA92B8BF4833D51908A66D4DAFF03027DE5D5B315404D33A2AEAF78D5A98001E39642854AEB02B07FB06DDC07ECB7ADDE2265B99547999C6BE7D955E3B48BE6FA54F134AC8DC792E3153354E2612BC5E701AAA333D67C9BFCB6295301ACDCBB3476E1B2EB72F1506AD2D6701444B9FABC136ED219D8B323D86537F6646481464878206B8F78DA74005A4850F00C87B7FC2EA6FE3DFAA15BB3CDDA864B0AEBF65190279C144E6B4348FAC1CF905223DBDD7FFA35CD93085DD6D4B7B19E5439056E520F6FD4FBA3ADB353B54328D1BB5199FEA8CB00B628CE87D9B54F96B9A4E4C1CC614E52B406E1DC4C7279DDC524F5195627AFAB6DF4A83940D80B36641709BEC0716C707D0EE5F7B6FEB433BEE0C2A4C0264092054953C7C91511EBFBBB783568BB1D43C884AC4731A7F47F40648A501556663DD677B9871D94B767FCF9FBFB768ECAF3C37EDC4B89F9505D44E487549AB1C6A5454A6EF101963633DD345A47ABF8F8B199869C968A2AB3DD275C32391D52DD3B3356A63C1FD9E23D48A86E45AF18A15BEBC5BB0425201B2A9691C9B5640D167A671F045542CCA1BFA46F5DD1BC6E3E1EAAE64D4797C916033B8BA58E102CD94B81F3EE80045C091F240B5FB5D2396E2863AB1A7DBFDED29DF90119C72713AF7796125FC88FAE1A4EDD2E239C696021021D7D2A65125B8BB3214096F34241F8105BE82FCFE9A5A8B590DBA081BB362498D017A9A9E94A653A86ACA74F17270C9B2603408130611877D464D446BB09F7EB1BFE133AA85E271172F5393D0E69AE79CF055BA7F593686EFF21C574662E8F7CA4BC231903C1F2D7EC2F1E4B37EB797AC66A77A5AE5FE57885A44B7698A2AB5465BC98423685660D1283BBC6852D3713B85ABE0BA6D9DE54C6AA836F867C3F4983B9D57B53373440F47A932A942EE3686D27CE3DE49FAD9BEE337B8BF2067696447242DB47CBB071167D073C46A3C0A7C72AF25EBDF154E41C498D1FCBA84EFDF40CD621DC181091674D27779861553A72C3C4D70417D8431D6ECF0E4EA0B56E2E193839DD9EDBAF0A50E760D9DD5BAAF442ACF7E377F9EC2483047D591252C697B9597F391B6CD3F815CCA32077793013241A0BF3BD8AA61F5C055A8A6E55F80E20D91083DC61D8E5C90FCDBB46BBBD19C45A350846C2DA3EA36FDD06024999CFD4950F9E58BC36B231263ABDBCFAC8905840B60410FFC75DFED1D06C94D2D37F760DE6B1BC1EB1182382C720982C81B8974CBDC18395AEE4DDB1AF76DBCA1D5E52BB37AF1416E4398FADD09E2896C5D25027D5582501FBE05F01D40A7F3A4C596578DDDCE4D29470587431E5B500BC36FBDD26A3F4C53940CF57501232E9CA55518738BFC8E8ED7D8354FFA0C0062B4E45AD1E92039854903F8D1D8D82823D7EA9EC842DD80C6E02EFB9209FD58880B93C01DC95DB2841C93298704BCB5FEAF1178106D3820D76393F0BA25A77C4CAA70C545180B5A79371AACAFB4F9C22479FCE2F784481AD372E8B9366DF85E7417DCDC94F670E6A4B7FED8538B71226AD0CC4129C584C76255F2D32F51230C3FBB3798D81C2E2D09163D40866FC64701C64F65A0B634AF92147A3E049CB65293F1999754D84A4DA29E3813874341F28EAAD16902BE6B88868705C3A2EF296C60EBAC95D62FF3287C01C2027E21284FD387AF5ACB4D50D5851010CCD387ABB375CCB39B97AB1C5FB6A8EC00FB690A655FB6EF1A3FCEA0129BD60FC61E2755F5560F8CB26E8CB7276B50A322604FD91B05AB6D1D979073A62BA000C09C55408F53F7A9ECDC58F6D2FEC7AFEF2B7EB24BFCF3C073B9375DC69BE686CE8CF68B150F13CE68A5ED3FADB59B1ED0E0847BADEDB4C4A895CDD61C9AE350F6D12745073B9ADF18AF49A50FB413BD1E188DE5176BD9E0D732E37F413DB2CEC29C48DB8D55169446A463FDA40EB5F3810FB7030DFE398BF8466DD5581A9EDAFC7BE3726C382FC801F89F7208DB3CC97DF0FE3185AFC1C362BCE246E7413C2B068800282B428649E0EE01145FC6831C0AA458681C6C544DBA1F0FB055E8E1C0BB736C7FDA139D3A69B45196ADAC649C38C53C42E8D40F9A33B36E0B33D6F3F70D4059EC590442F7071DFE671ABE9F0DBB73778FAC9ED7E763D24C27A4920792C15A886C5378423483453BCAD5A87F7513604FBF5F644A6F68718887B71A5274166CA6C03533BA4330420C67620D11BB53D713444247325D0F1904E1EFBA7C68F3C7B46801BF3FE0A60C8E1D57E30D5B60CC34E0060E32CF3A49B11C2FD95375C5A3749B59A8B99497339E35B815052B0BA88023869C61E495E52EB80D23B1CCB91957B46F7202B7129F49D370FC1625448510865830EF29418F06747901867482D17C9FBD50BB99A5C810E7528E7498CE097488122A7389292E73E06B8E3E1119D5509E7F7767F3CA76E08F1F08D6B21A6DA5708CFD61575DF3758FDCDA2D178AFECD7D3ED61957A180BE9C49E3692157C1C6FEE8CD841B73F8418C01D817EF48C905213A597444544ECF0C3FC50E798A53371B142F2EBD79B10A45958C55C869CF5380DE47E7FE4C82AA9AFE78DCAEEAC701ADA1FBDA199A47A7894E2EAFC7F806A270718E9A426C39CE928494BF00D55C5ACD8AA7276DF43AE5979F5EAF1DD2E3A1F7D56B3C5C2CBF41672D47940688A7B3F2D4E13C50DE357B37A803A20E8AB0BFA1F2C72A691FFEA0CB66BF40ADA5DE0EF8AABC49F1A65118A0F005B3281C32DD7C88F314C17C49D2D54070E91FF4CE91CAF5AA63CD66CEFAA0AE8A791A4A77AF34E2C324B1C94D7C60E974B13667F9AC2273E93372CE1016BAF97412F2D0B88BC8C1B53D30A9E000A82D02E3F21DC338B5DD57A760443D65D1AD6AB7553A8A9031E8E874B2BC7B7892E98B44CB2C239D353B5D1479102A8484506B823F28AB6DA372B109344F86F862DE1477B9F899A48ACD8219DC761721BE64EF6151F8396A3D1DA0597B1A68E6B464B19AFBB2CB8BB6C6F871A691912D5A904AD05F24A76AA5AA399B583F2970649B6577C47D250B9964AA8AFFC7C3AC8C73FEEBCF98868FBD47F450782F33779D880D0A2C1969DD6A3E37FB7A1C6ADEE68D0FE4413EA0CC15D5BA7C88D493693033ED77B9B980730A208090608A15A0DD156AEB1F4E355EE741F5565EEC5495ABCDCB462FF3242D0C9CDA20BD106B8ABF199E736AA74AE1FD8E8F78C329141DCCEBE493BFCF71EAF13CDF837315A1D7D56A97444EE12A0483E948A063AB69E288BD54D12CD8CAF0A8B4822EC7C76EE8ECB8A35892CFCFEAC1DF0FD686D08645D2FCFAB6C0D0AAFDA0A69C995FFB3CBC7B5FB4AB081050B8EE69104CC8F369D82D3C5CCBCCB7271C0DA6B8EB33358AC5A3535B261BDB3CC1AC41C756BF5E34AC3DC36B229F71EFC338979D62586485B9DE4BA8759843BC52009A1F8AF0D05DAE710CAE6FC96825326398EE843DDA6947BC0E7874B5BF13FA071922045265D2673AEEF04BB616EF76257611005438142631D7CEE258E8F8B2F8B468B04520DFFDC587494FE91D91A61E014E3FAD13A5CF04FCD37A97F00E51F53E5201AE3E300496133ACCEEC53C134527C3579AB904E50E98AB494D6566D579F859ABCA8FF7E0D049A899D9D9E03FBFBF346F2CB6B73C396DF31592E6B731AD6453F66C9148B630E38650106A0B35B76C8A8E30F6A9C2401C715D9CE24DE99276EC7485EAD32E767E3F4930672BCF61BD5D265C2801B6BB91B54F20EB194D959CBD997E96B0CC985C18B1B76092D9F1A2FBDF85268D6A7535B9F435840E8A64F1B393A99150CA0D908E00104FFF5BFEDB5E7DEF3AC86F0F532448DDBB97144E8D4DC5ACFE2F5F5130D1F4988D5A26365EF55A26909A2A294384566D08ED51F97AB2820139AE00ABFE2CBF68D4D782F8FD117EC53CEEBEF2229C697AD9F248437FFA1EDBD724FDB0F5AE2763DBC1556C025D70F76E8CBC8BF48FDE9D4485D20CE47BE8D9B8A721D813CECF8EC65A176146FC787B8250D4F33E92E647465F6B70DB1B7F5FD87BB35A3C97E3A0BC2DC599787D56480D578993A7F59B26C0D992B3625FB3ABDAB788CB481D3FEA6C333710CC4DCFC80923628491ECB8E3E08D9A6205303E5C7A1ABEC0F48BFFEF179F2673BE8B59720AC9AA3FFD2E19EEFFA5EBBB82DCE53CF5DA95B28E0ED47D23726CF1C54425543327573B85FE5F4C00CFC14EA0446D3ABAE97EE3F6A6E4FCF52C1C8AC22729BB8096875A85A9B7F77B48B1BE4C85DDDE053137DCC6415E8C435B4559E2D48AD9A606CD0ABD12B510328767ADF525AF704E3E8490EF4CF53E38FA1729635D15A7BED81846B7D320F37B26A93FDAB0971DABD50AA350F9E959118ED1C3FA8CADD471C0EF1C0D69B87B1D9014C9A3B5648762F97D8E537156C4EFBE3428015DF8EF79D5CD1AC17B10421D8F86BFE420B65B2A4A60010E1F8100692A2D4F348F79BF97244FCDE849C6E7E93B70C4EA96E0CE07D9FEB7FDF7E15A54CCB0974DC10D8D15C728BFD1E972E0847818D2AEBC16D2495E475B90C2C1A043F4791C982E99272EE2AF226E20FD1E661D3284DF0FAC97B6DE4DEE79B1FC5205877CDC6F564755DFF0A4CB0DF363296029F5738F3DC03448E265BAE1ABAE7CE65C1DE7A321AF0FD6DDA5EF6AE089C37A238D50BC89C3C7C648948DF18D74344127E5B1D57C853F7AE59DB298D1C96758A13FBD1D5EC05C9955205B8C211E486871AD43FBD8EDFD9D4ED5D6EC102FF57E2D344F4DB716E3668917805C2AB358C754492724866B80B3421FCE88EA6F88262ADD5FEDCEFBB15AC9DC72C06DA0739B7D0E98C608D0F8C1B49B0B98485A7C198E5A314D536BF85998CC5AA9F9BF46A1AB330BDBD7C11D5AE49D3833F018126F605931136F264712163F2E3B754EC8F45569ED144FA041CD3CD768B632C56880BAEB499F8E323284ECF9C59893E1E496D444DE862BFD1FBF1764D797BE91DF50D6AE808A0428662237682856DAA8395AF2D1E1EEE6E154BDCB8A87295B9AC65B1974C2E5605A92ACDDBB4FC3D5C9E46F2A7CA4ECAFF16AF459C3BE79A03DC79CA1CD3C65E654F9983F35102B9291E702A518FEDEF6D9AB280ACD8B9D9C180BA0F4B221088C7F88D6820BAD7AE03E61C8DBBCD4883EE8A6C721145A18C85CFC26297037DF6FDF75268F275BEA2C3047CC6BC3C1DF4383610B0C5AE67824700E260F865070078159FC46AEF8168CBC9BF1CD8EAC059B1CE2A60E2BD315F9FD011F1935DAA6DFD6C4EA69C499958A4B7E50BFF5AB95C3088BF2A3AA62DBAE430349ACD8FD57E1F411F6C9C29BD6834D1BC3AD835603526C5C10A9E8023574E93B26C14FE9B24D276FCAE3B4CC006DB56F568E9E2E2BEDFFF7407CECADF8F2DB82E08675143363697585138C209DA05BA2F478ABA7D5BA1038C257A936617976D70831EB7AF8A03BF22529A81761DF599F2049B8804634AC25763C52DBBA32140C9DB4176BB4E1AA543DB881AB12F9D7E2FE091517C0F691D384C603BC4E5F38F2159C79ADC7EDEB3F9F64428DB200137C656FDDB01DFD4BA72344E6EEDDEE06DD808F96757F2A1B101ED5775CB3032083B38756DE8187D41850D2898307FD62B15E650D236A9DFD3A53CD924885EFF31F23623A5697275BF8BB7E25ACA098092072C6FD4EF6FD1916891C8AB4F48C9261DF6A5FA4C20C1937091467EB78509ABBC471D5BEF1A429254824CC7B9CA7032EECC3CD3538645E66ACC645E1952E9D3981CFEF83B6D46F3A41395B9D409E9A611039FFB48264825F126E112B5F478F1A8692F9CDB78078175393F4FE09C1260E2CE3D05C2FE9B61C4C907047C244DAFAAA4016ADA4CCA990C0E761EF708355514803FE7B7633EA9DDBDD81271030550EB9FA54C8AA7869603A409B4888C7ABC83A1EFFBE465E83765678D1C74B818090915235762E8CA6CF9A9E413697A2151331B8EDF13097C85A76DD7232A7A214B8C00AB63691359AAD772F23A71D4DDFB363BD9592948E5FFA89DBFF501A7428F88989758CEBDF82FC1E40790173203D29FEBECEE90C822431ABBCACB635499202072B1E93D753C8843B997453145E86699ED6525BA63EEB076544E12F33CBC6D5AD77F94702A952AAF64AAE720DD01D4C3543185FF6375CC93F162E937298516FD29FA59D653E66F484A7645B8F78F9942694F9EFB367DE751A3008EB7ABE385DF93E9F6E2A7FE7F7DC23DA4FD30039C61D9A6CDD9F61BC6BC0308334367B79C56E066251D88B69A7AD0213908C8FA219F641CDE0525BBE978234ADFAFCB2C060A915E0CC9EE8EE9230C5309D4D2BDE318D693EF5AD99731348CACEA4DD6EAAFA41B2E677AED67B0D533BAF8D2B214A56557B6D9274CAB310A2CD84D31A49B4C11A355B9B456783B6EE30A271E9E5E72680774E6101178677FFD5D5E151A7F30986ED73F6C5AE11EEF8B6A443284127BCE55D52A2FA52C002AEE39C6F91A264463D99EBFB72F161D26660694A72434FBDAE18FBF454510E342D7047E112A15C56515E068E562B4AF3FC803B9AE9768F6B94DEC079A670F1EB8AB6CE01AA7FBFC40313F8143DC06782CE07F8D415734BB6E0DC4D33E1E3AFE16C1A049F5D48497DC07697D57D7B2DD4773DAA9F781DD5166B1721CE318CE31F6317A722BCC72585BD7A139EDC753965AE79BBA33910684F44ED3345277B4B3493787166D30B17AF1824E1FD0A363AF6DEBB1FB8D03FE653AE58DDCE94DF5E422FDE0B6403D292A2610B8B142F6B450DB23D676C5B926353911EB77A2D481B38C69FCD2B2BD6F20B297C56C4B4D2244313D01C5678F2E69C7AB8D2E51B177518F0534D909D19E2DB4A5B42DF3B9F9EBFF974675D2CC5BFD4B831B173040DF011073ED4618494A6FAEE410C1DAF0760DB1913EBA6AF18EC2B9379D76C676FD73D6A31D8FDCB3D3A65CE6D6FEBB8A125B1D0D65AF1214A61EE51A9CD0BBD3A927F69CEB37D2F6310DBD885D842A90172F153259B9114E61B20CFE9AB216F2EA894DBEF81E9EEA7826DC67E189B711F445037DCB7979E006A83B392AE45B7EE6CA9DD4467B9808802ACA32ECB96CD7FAEB0A45AEA937711F5DA85FD365BF83CB5D7116EBE2DB88BD0AED90BF46F34D3B633E4FEA05C04D932CC4E8C338251A7B36679F4845FC181F8198A3BB96B1C86A6B2470377FA9B58D3383BF1DE2B574E5D32578DF6404E5771620687D2C81FC6AFC8E5803B4E2FB9CA20204B23CFA2CCC13CDD87148F8F6664F09114F414850A1975421646D6120F029DC3D51F0233A1C039C696EA97B220387F1C4ABC1BC5B69A1632AE8D8B86EA29CE8476CBBA4662BCF054BA4DEF1F81C222DEC6BAC853E7D80D3A09D0851334B3DB6C1C123B547E38BA8ECBC60A68ABF6B0EB6BADBF30617B9D9DBE7F3D9136DC1F067282036F87CD608DFF398720CEA48F131F9AA887F4AB0BA0759D96FEFB2857EFA603F528F241649E4D313027F47CCF19EF29729C339812C77763F9E9366191D7E29879CAAE6721DE360A39C27AE4ACF8CE7C0FD2B6BBBB0EF12EB18F477A67EC9F59455C02046A88089465295E504C92B6001ABA51BF2127DC6BD880B59196BBA24D22219F50F5C91286C9215591AFA1E11ED8475FAD9AE0371D7F972BEAD276FEAA86112D2BF3660A51A7CBF6FFD14BBC379E97B94F5BF5B342E981D05E9D28B35223AB0A9D73B62A713C0E05CFE9384C34DBF44B3BBCAE4E915EEB417295ACB37F17A3DC26401EC3E86C47134DF0E358B1349C83A9DC7895745D793F8874B7DC8F5B85B7465C25F3BC3062CF759B00A17A928F3DF9290AA39F0D67C9C6DF3A74B46B83F26A2B12550FA8C6787AA820D85CD8C4F6E47AE36650E21839F45C2CDDF6EE1A09180E364E803A2E50629228F6EC8E6CEE1A448F3A881CA18813D960B37BE9828B8E17C04EA27575AA4B9203BEB9224C66EF3EC3B15EDF81FB6CAD3BA7D97BD4790F9D68D5CE1E4CA4CEE5EFF518E3CFF08CFAC33D26D02CAE95C4E1F43ACED0D0BE8AAE1CBA7697D1F21EE379F08BE289DE4A1ADEB796533F70B93F093C576AFF141E378E34B2361562F14B07EDB3BD0AE15816EFB4F21827376FAC00378D949AB4E365D25454542B14047BC64B4B52BDFC3527E4417B4B22060F57C50636DED55DB053094DEBB58D03EADAB07652DBEB1DEE030265B059389843CB44FC8F24DD25A6689BF8486F117F9AE156A09AABB4336CA71732DC6FAC571A700A1F719173C5FD8ACFE940F2D47FF282CBCF0298FD97171090E80DAA4837BC43DDD765F10D096D90A310DBCBF379D3984059A3DD548173720860008BB85241982DFC14FD190075C26171F5EDBB4B1D1614746AEF94DEEF5C64F2E8AD08E2D850CE439DF664D67E40E4E07BE28C85B6BC42EA7644E752044E0DB8982717C7B97F99A41E78AE27B13EF52A0AB3620CCFDE3C2C6A1E6B93697C3F4FE8AC3D57281D27FC49E7673E0E1B38374EBD4750EB01E9BAEAEB5D9B13053BA1395F3F05019E01ED8C66C2E776FE1D4FE63345AB34EE63E6C3826C3CC08BE843ACC505AFDC3236AFBB5AC4843E0143ECCE0DB5E0C08F6C4AFB58), (null), ('99999999-9999-9999-9999-999999999999'), ('2919-10-10 09:15:51.361'), ('2079-06-06 23:59:00'), (null))"; + break; + + case 15: + $query = "INSERT INTO [$tableName] ([c1_int], [c2_tinyint], [c3_smallint], [c4_bigint], [c5_bit], [c6_float], [c7_real], [c8_decimal], [c9_numeric], [c10_money], [c11_smallmoney], [c12_char], [c13_varchar], [c14_varchar_max], [c15_nchar], [c16_nvarchar], [c17_nvarchar_max], [c18_text], [c19_ntext], [c20_binary], [c21_varbinary], [c22_varbinary_max], [c23_image], [c24_uniqueidentifier], [c25_datetime], [c26_smalldatetime], [c28_xml]) VALUES ((-1278046619), (255), (-2567), (131711043), (0), (0), (0), (null), (0.3913), (0.0664), (0.1968), ('ã©ÃåÖüÃÃbUuý©Ö OaovÄ+îBZuÄ©ðãürrC£¢@Ä+¢,,ª+ß.bzbuðÄ.ð~:£bzÜåBbAäahß:£_ä Ö_ZåÖ@oä_îüv.uÃövÄ|BªÃvÖ,¢o+Uã.Ãb+©,z|î_hð rBÖ/ß/äOðüÜÃAv@>h+ߢÃ>vub|z£ÃßAöÃ,b£¢O+ð,©>Ãv£¢hÃœbÖo Z¢Äã_,uCrßðuö.UÄo o©_<ßãäãz*ÃuüChÃ¥/©Z,aÖB_Br*Ä,:ß*bzÃh>Z aru_vAvßßbbü~.Ö ,~ý,¢>o:ã|+o©,a+h Zrßrã@ã,_¢ >uözü _>îÄ@AÜÃéCh.bÃßUh|_rÖ<_Uö@C* .äÃb:Ã¥UªÖoa>hãÄUh|¢©üßÖ/hßA*<~@£**UU: ªß~¢,,@ê¢ãýßö<Ã+ªCUö©äåhO£+oܪ:ßßößb /*ð/O,@<Ö|o£ý£hr,ööÃ>rÖh@ãA+rAa£ªAOÖ ><:+£.bu>Üü ª,aÃ¥,ß'), ('Üð*+oZÃ|>bö:,äî<>zäß©ðabbAª¢aÃœruöo_~hBu*©@Ä:ã>öÃ>@+bü/ðäîZzCÃC_ÄãÃ>u z .B@Cor|u|Bäh<.hv@u©ÃãÜB©|üa¢BýÄ.OOöü:zÜ©*bÃAßýbzÃ<üa£¢<¢aã_OrðC~+:öZ:oßu:a*ßAbã~åÄð¢aÄÖ|à üªÖ~<.öo£+AÜã_©Ö|£ZÃ~ðýüz>a>|©Ã+~hOr:ä_öãå/<_Bä,üvoCZýÃbªßZý.:ªü©©rÄ*:ZÃC*äÄ>>/r¢ª@z@~B~.hª©~_@,Z:ßåîob@üz>rÃ:ýýÃzzäã©*+/CÃ|>.ßßåuðö.>.oå¢*Zª*ba:böUüªà ý©hAÖãBB>à >@b|uîoýu bÃœbAÃC/:|ãv>~öÃ++,b_UÜîA~<.<Ä ߢ>aðîbýbÄ£¢öäbýöBãä@ÖðÃbväb:uÄüÃUa£ý~Aã +z åªãbý~_z£äßbÃßð©ba_äaÃåÄã.ý*bý_h:ªß:.ßbä©,zÃ¥/ööO£+Ãœ ã/zrÄhu|ªOU'), ('ªbAv>o£|Ãœ*Ã¥hOC_+OUÃãÄä CÃœ<_/B*~Ãœ:Ãö©:.Ã:Ã/>_~©@~©ãCܪÖA.v+ýb.ßî*u*£Öb<ä+b£/rOöðýÖ¢:äãå,~ZZýACä_ü*åªßbð>ðr|~ObÜîã~ý Ãœ b> öb<Ö<ãUuB<ãz Bðãh@£Zzu@@,h:C_Ü¢z,väa:Ã:+z+bªöª>£ß,rAÃ_ü+ +C© ã_ðbuð+,bvýöhî~Ü£übbhßîOUh<>*CýOÃÖÖ,Ã/UhCUÃCub~¢,~Ã.b¢rA¢ÃßB:Ã¥AüZßU,hOBrÄîðåBÜüO_ãCÃœ/~Cb|ÃÖö¢oÃUrÜã.ãr>r>>ÃoÃzöäÜ£_¢Üv_ÃÃrß..o||rézð| îvðåö*vßîoý¢b:öUhÄ£+Bß*öhöa¢¢ðuzrZäýªßÖã|ª@ý|ðhuÃbßäÃöUCðýÖa*¢OüöÃ.ß~ö¢ ößßA>|îOßÄ<Ãœ*|ßî/oÃ|UÃBUBäÃ/¢_oB+b@î+ýߢ.ÃvAãà ð r£@Ãœhä@ãUð¢ä<|U|+.zAî@:+bo|:b.*@ÃœC/å¢zuOabhboÜöha<: Aî/©rhÄýzbÜã~BB+C*ðbOCAã,,uZu/:~öA>ä©ÖÃ<ªUåöZZ¢O:b|båÜ ¢/a<*Ä¢ÖªÜr>b¢ýýCÄ¢br_Ãv ãA@ßî*aOB~ZBCbßöäîuOý||©CüÄ.O ýAÃîa¢ãh*¢@B v:AÃ:ýÜ>ü>ª*ö|CãåOßý©~_Ãœo/Ö._Ãœ:O©ßUrbUv/.ãa_B|bbÄz:/ÃB©Ãðv|aU+öOA.Ãh îÖ£ð*~ß|aê,ÃÃU A:|o_Zß©UrAîã@©äðÃß_ß>+@ãCð|ö¢_ÃÄäýüCýÜ¢öýÃh_ðÃ>aÃ<öäÃ_@bbz.+UÄ¢£*rü@ÄÖðörªßßuýî,._uo~ßa <Ã¥b©*UÃvb:vä<.vbvÜ©av£îÖO O¢@@Öð*o.Ã,äöÃAðß_>ÃörZb©Ä¢vobZ/ÖÜBªåüÄ*> a_£.ãðý*ã+U/,ü :äbZBý :üBO£.AãßouªrÖ,väÄvßUîOz+CZ.C©b. ÃbÃz©Z~za_BrÜÜ~bªO~ßoB_ÜÜß_CªÄobßZ@©Ãör.Ã>u+bCª*Ä*@<<~oª_î@äÃ:Äz+a+>vî+£ýoC©äOéOr.UOêUCðCÃœ. ÃUßðýbÃBbßýå> :>Ã+uäÃ_A:CÃ.h,*ß~U£<ååöO£öbC¢vzOvߪOÖ||£hu ßz£ªÄÃa,¢ää~¢ßr~ðª/,Oß>h*ÃœoAaÃa £_håý**+¢å© .rý,|ý¢bÄãhýß>Uö|ü,öä@ðB£ ~~UbÖzhOÃhßÜB.ß©>Ä<îZîÃu.bߣbßä¢ÖCoß<+îîåCÃ>Ub<ßUBß.ÃããîAU~ýhýÃ~Z:ÖüvaOCß~aOrUý*|ý,üa:ððvvÃœuÜðÖî+Cußz@|UîÃ~Cß©ÃÜvu.oªÖ|ã@ßÄýuö åßCßBArAb.hbzäßB~~ýö_@ªzª_,v>ß~aü*ÄZÄä~Öbr*Ã:ÃvüÄÃC.Uaß+ußr|¢ð_UãhBöo@+ÃýuÃ¥*oääîv.|ÖÃoÜü| bî©aho£Bî ~ ßO*+.aC/r*öZZu+ß_©*h+ß:Ö|äa~¢_aZã/,ü @.,ZÃœ< Z+hÃza*£rÃ:䢣äC A+ãu£ÖääÄ,ýväîo+O:O©+AÖãä_£å ,Ä üߢÃÃbã|:<ÃAßýÖvÄAÃ¥@ýðA>ÃýuBü,>rîA,_r_Ö+ Bî_bÄßåÜ+oz>O bÖCbÃäÖ~bü>CܪubOZ>Oîa<:üo*zªurÃÄÄ ßbã~_~bZ|zýaýa/Av©b~>/ýãÖß.bv.ýÃvý~,Oåð,CbÃzUrÃÃZZ@.,/ah@ýãÃOýaozzÖa.Aä+ÖÃ:/Äê|CÄÜüî|Zãü/äObOrhb~ýö/ÃZU/h©Äü~/ã,Zª:rAUÃaîAýOà |>ã/A£ühî~ýÃ+*ß<Ä|Ãœh:ßöß*roÃîA|,Äv@ã,>>a ðäUC>ZÃ¥@©A¢.îrÄ|Abß|~<£ABa©>Üâ*OBo|£© öîrðÜÖo¢ÄÃAB*Ã+,*z+ªCbÜÖ @z ©~bßÖahr> C+ßãÄOUÃh©ßÄßUZbuÃ¥C:~U/ãöC¢r *|oÃ¥AOýßv*ª>¢,£@üßß_ÃßvBbÃäööî~|b*ßB£ãÜbzUö@@öüäÜ ý ᜛_zbßZzbä+ÃœA/vª_ähaÃU:ãÃ~BÃœao¢ðvÖ.ÃUß~a<ÖU+~Ö<@ÃUu:ãzb.OÃ|>Ã@zÃ¥u:>vA_*ÖZh_üýbvýB~BÖðObüÃý__UBvü:+ohUrba*a:_Ãã@Ãa~Oß+bv©ßÜüaÖUßäOBbUðAà ªüª,C:Crý¢+öÖU+Ãîab>,aÄZîü ¢ö*vߢéÃO+*_+ÃœahåãCðÃ+ îýuöªvz>oh>U£*| A~©>_£>Cªý|,bä.î~a*ß,Ãœb/äär.Ã¥_*Ãœ @B*bäÜv>C ªÃð:zÄ~£¢aÖðU@U¢Ã/bUb¢ßb_ÃœbäÄuBzZ//Ãö,îÄZåÄÜ~~ããßuBß/ävýîãð_©Ãö.î/£ßB@©Z_+öOîa>öðubC+öÖ@ܪä>AuªÃ.C~ýaBÃ>ß<ÃaðÄüî@ö¢ÄÃ@UÃßZ,Ã_Ö|ðÖ >+Oö îBaZîrÖ~b¢üüB~åüåääOÃÃaübîßUªu~Ä~¢Ã¢ÃU*@bà B|Ãœ< Ã¥*ª> ÖªrbArý,>ýäAv,:äUU£@ hA+ð,z/<+UªB+ãA@|ÃA+C_Ä< ýo+£ÜÃBãåß| U_oUÖB@oÃzb*©uÃ¥<¢>£bä@ßåäz@äåZa|bu¢ýOÃÃ¥rýz£©Baü_ߪu,O><ÃÃv+/|£v,z>Z/ªåZåª/B|ähßã ýbZbª+|Öåvî*/¢ AU+~Ä@ðîz ÃœÃ,îä~<_B~ªý ÃCÃÃÄ¢,_OßÜ_ªÜrCßbhüÃã£oãA©/ß bÄAð©<ýãuvðܪð¢+vßv.Z_:a~ä<~ãÃüöÃãÖb>ÃCÃhüßäbüuÄ@:Öäo,b@vA ßý.a_zübÃœO~Ã¥|Ã_ZzÄ~ü¢¢Üb+ðBß*ßUÃœ:+zÖÃüZ|bî:_ð~rO¢CÃß©bÃou*£ªrOÄüðß.r+Ãœ|*.AîÃOuCÃœÃðoub/C,©o_+zÃ*Ã¥r<ªhoaßã_+,¢oüýýUäåZa<î<ÃA@uUrAÄÃa@êý¢ÄC ÃÃb>uÄO|C:ßbäÃ|h/h<~ª* ©ðo:Z+UuoOÃßu/rßßbÃb~ð£hÃœC<_>U@Ä *+|bUÃ¥räu£åoö*ÃU*£_îZÖÖZa©OåÄÃð£ý:äb¢Ã|o>r*ZÖýãÜÜzh~ýßbªªvb~Äzo<ÃuO<<¢ªªB+.b,<@Aß,B.~ ©O.U:+©ü:Obä|_ß*ZoÃ_>ª,ürhÃAÖzrÖå,_abUoUöCðua_ðýu:CöÃbßbÃœ/Az¢¢uhýzüoýßZbý/~,©oö©uÃßzrvAß~îîuC:Ã+ChzÃ*hbªoßÖÃ<ýß_:.O<ä@ußA+BÃœ>b+ÜÃZv@ªîÖ bUäb|r¢~ÄAåÄÜr|:aßÃCýBr©ü>uß/Örå©C Bª>ÜÃZªOÃ¥+ð:¢@h//ߢ ýbrBbüßhüßab©å:ã@Aaß,îzZAb~ZZzÃœbAß A.,ÄÄ::rb+åßÖbzî.ßßðbÃîba,_ä©bðaÃ¥_//CzZ+ðÃUðhUãuý,*vuävz> Ä ðª_a/åðr¢äßB>:a+>ýîÖ_zävãÜAZhðܪü/zou/öܪÃZ ÃœBîð>ða>_aÄuv>£/ðÄã/Ã¥aO, /*©Oß|äîÄo/ÃBOªÖUÃœh©@ýÜ@äîa¢îåBÄ_o>£ã*Oh*+ß>ýuª|b©£UbÄß/~h ð|uaßbÃhðÃöðå~a hrv@¢z:~uUã©ã+bbÃAv|C+ü/vB©äBÃÖ£b,£Uz¢ÃªC£Ü~ubz|¢åUä /rÃœuãU_£~<>Ã¥ ¢rÃ¥A<+oö@OvBa/ääßhO_©üÃOãªAÖ|*va~äýUßßv©oÄðZ ZrÜîu.bz*££:ÄOÃ¥*.,Oðv@o/¢AAÃ¥>,üb:ã_,vã öOÄUr*ßCª+ Ö Ö*bÃœb ZO,OßöÃ~ýå£ÖßUöîUOZ>¢@>BUbÃäÄã<Ã¥Z© ¢AhÃÃ¥Zã©zööhB_ZBãuöÃZ*ýbÃ|ü>¢Ü|ªýäÜ©*ߢ+U©ÃovÃ:rrã©*ýAvbbý A@+ ouܪÖA~|/¢©ßÜýCÖzÃ¥hîvýß@¢vßzAð¢Oßö~u/ªýªbÃœ|.ªuzýr~Ao+:bo.Uü>uZ_>a>aã.îzÃî@ß>/.î,üßB:Ã¥:ß*Ã¥/ßO¢<+ßub.Bu:~ZZ vä¢|Äý*~_.OB¢_éöýBCb.hAv+aßO>ußo|röÄ Äßãböüªh/Ã¥,|>~rOvãĪz*ý@.Ar+ðb*Öö¢ZZvaãZ UB_.,Z>uåãoÄ¢üZ@o:Ü£_£ Ãa'), (N'Uzãr~ö+Ö£ZrãߢäÄ©_,O>uÖAb¢ßªÜã,|ðäü~aöCê_äävöãîܪA:/OhA_ßhühÖüßå¢ðö£ZÃÄ.Ä~ü*îÜCÜåßoßöhÃÃöArßo_ã~bý¢AîU>îzbêO©£aAOvößaö>OuÄU>îvoÃ+zðhbå£ v<Ã¥,h|v,OÜüZîÜAAhãÃ_v..Ãœ|äß*Ãåözª¢__bBb£/äzhZåãªZÃ¥auOCbãbBãvÖð£zß©©Zu>übßAB.CZ>©ArbäåÃh>|Ä:övßî@rýz¢u|+ßîö/ha£ÄߪoU|ãß/B@oÄ@AAÜýh|rhüä/:ßvöðZý<îý©*B_ ©.|uBbããÖåo/a/:~ßÃÃÃœÃ~ã@ß_©ß_+©Ã:ጚ~Ö'), (N'ý@bÖãüA:,ãª+Ãœ~B|A._,Az,r<ýr_©abü*hÖbÜÖü|£*h_b ©ußu_*uýª©häZäÜ>ß,Ü¢a¢ßAßZ:üÃÃOãhhzüÃ:<ÃÖ*_BðîZÃh_ßÖ*ðAå©bÃCåß*O~h/bÃßv|ýAuã@B¢~¢O _ý.rßÃ|£ü©£_:_b©Übrb ZuÃœ Ãr+|:h<Ä:ßOOðª*hoZî >ÃœZ:/ã@/CavÖ£åC@Ob@@oßýÃÃ¥<ã:äîoý /ßðððhªªb~:@/_b>ßöBÃœ+o©ß_~üab|uäv/rbrªvöîðCU@r:ðßüAöbuövoC+*oª@>+~vý aZuÃhä:b/v*CArC@vßb<öîbUîßz,'), (N'ðö:~ß©ßvö*>rÄäauh,.üCßr>,BrüÜ*|b/~ ,©/./ÃaäÃýÃruuãîü£ÖhÖörÃ:ã<~ß.Ãœh@¢_ÃüüvCö>@£îýÖBãBßßr£ÄUÃýã@vî~übÃ~hüöa+£rU/_ß:B+îozüz ýß/Uý.~êöÃãzoöÃÄB.oa.ZÄð@Öh*ÃvýÖ+ªz@ÃAöb@¢>ãüoð/O:u_h |_Ãz:©/ ä©Ãbð_£uabÜßäü*ßÄOZA/ªbbÜÜ,|v¢OÖßoÃ¥U,Üü/obAãÜÃÃ¥*CãÄh~£U<Ã¥>ä/¢>r:zAýÄbC/öuãå+|uvAîA:/ðAOOî.*îî@ß©ä~@ÖÖova.ÜðÃÜåî©uã_~bÃœ_väßߣÖ_AÃAu>ýÃ@vÃÖ/aoC/.a@ébüuªBAvîö*¢UåÖuÄ_+îüÄ|ßãªÖ,h..ßhbäöÄߪ.ö.ª +hrh,Ã¥Ã䣪Äö>o,a £C<_|îööü_BU/Ã,¢ýUÃ|h@*î:|,~bZzhÜߣaCª,ßîãOãUÄĪéäÜý/öãB*ö@+ä©Uü<£A,@,ää£:Ã¥obrãÃü,¢/*ß*Ãoav/z@ßüðåÜb©uOvýî ýb©AhBß.böîUÄ/ªB,|UÄ,ÜÃ@+äªß<îrärý +CUãöüüz@/ÜýöîoÃ|OÃbÃ|Aü>hßßör:¢Uö.Cßbý,@+aðBªä|ÖAî£î ZüÃzAu|zöÃ:ZªA,OAbv|£_ü~rbÃ¥UAÃ¥<î|Ã,ßAߪ +@B>äðhÖA/ß.,*ÃÖýhBý* ZbU_Ãî¢|hr<ðOC/<Ãvîhuªbb@ra¢ßîâýAUaUzrUC:Zªö:o|z@.ãbuCÃýOA@îýÖU<äöoä.u/b©aÖz:Cbb/zz>Ã¥_Öð|Abv© CÃAhb>aÄîZüÖ.r*+@bü<:Ã/Ö~ OUz,oo, Ã¥bv b_bÃ.A@hC_|O>aZrÃ¥/vZ|ÖzÖ,>Cß+b ZBra..Ãv.U:r£©hîoÃ¥r:/ßýÜZUZ*îîÄÖbuZbzýäÜhOäbC_©BUªöðO¢å@Ão.+bªoa.zvöö£Ö|rBzöÜ~/ ßüäZ©£Öß*@/,vÄOaßðÜz¢@oÜü¢öZb_ÃBÃb|BÃÃ¥ Ö|/ª.u*z<îzoäßCÄZßBzbÄ:ÜßÜ ©Ohbvî~aÖOðÖ_¢z:,Ö+Ã¥Zª+vz£|ZAB©Ü£îÃh ßAvZß+_+b_ÃÖvbA/îAbßåÜ¢ zü£@hB£öOC|ÃC~ߢ uCü£> a/zÃœ :_ä+äÃ,:oC*|h,Bð~©£ªîoUA>/zîîC>B>ÃœBö:ä/.>|Ãöå,<äÃv,Ö/@ßßo,ªä ý,+©+©å/.r <ߪ@ÃoÖ@BCoUÃÖ£ýözßbv~B>o v@Ī/ bbv£ðzBý£bÖrßo£ðÄÃðCªCbîÄB*+Ã¥uß<ÃãO©<ýb£rß/Oßå©a©*ßAÃzÄöa+ößöÃB.ZZ>ýýü/Ä¢Zîß©åbß. Ã@/Öß,Cu©BbUÃ:ÃAÃ¥_,ÃAÃðb..,îvCzC,¢b~ý_v|Ãz<ðÃî@bv<,><+ÜÃãr>@öß|ýaUßvhªzîÜ©//äuÄu/häüu@rB@uößýâðÖ<î/bUð©O<Ãßð ã¢bÄÃð©>ðAA@Ã+zZhOurßÃÃœ+oO+ *Ä£ßýoÄ,,*@aa©|ÄÜ.£ã©ÄÜa¢ýöß @Ä©_~üßoC+@¢bbbîAü~_Ão/oo£/rU_ýÖörbBB,ö_ªð|,ÜÃäaüß_ÃhUz:ªröAÃœ>oüö,©ªÄã~BzîÃ>h/r@Ö£ÖvA uAZî©z/ðÖBܪ/+aUZhU:,U|ßzoý.vhÖåðªo£zßOv©+h~Ä_aß@@*ªa~öý:<~>za©ª*åÃãu+ö:üýÜaBüBÃœoOîÖÜhÃ¥ ©oOãu©ö©Ä@UããO~h|î£aßöå>+ß*hBðãrý*obOBuZbBZ~ÃvðýªÖOÃ¥>ä@ÃvÃ:. ß|ßÃAã>a_ü<©*üÄ£zÃœCÃ¥*_ ÃöÄCã/Ãœ>¢ßöU_<åÃ./ýbßÃuhîßbüð*@üvubÖzÄ£|Ö:äã,ÃOo.bÄ:+<_bÄ~uA+ß~Zzýüz/h+ÃÜ.z*ã+Ão¢ð_ã£b~ßÃaAÃ>¢rðå~@.ÜäÃvÃa©üoOr ãb.:ZãU,oª.C£rou,ßÃå/uÖ¢hðva¢v obß>ÃÖÄö<_©£va~aäÜ>Cª/ÖÜö<Ö ~zÃœ>äCBãåååßär*Ãœ|<¢|ð.UChÄÄzA|va+ªîuÃ¥h,îîAOvä~rÃOußv@Ã*£vÃî>ðvBüð/Ä£ÃÃO@oååÜo*aßA|ö©¢ßO+.ßBÖð<|£ðr*/Ã¥|aîÃB:+ /*Bv Uö~/ª© Uäöa~ð<_:¢*Ã_|ãZraãAO >äUO_ b.Z~Ä_Ã¥hoüãäßa+ÄÜ,£+.Ö£oî+BÖ.,o:|a© UýhÖ ä©b :Ããå:Üð/@rðÜh© :hÃÖß+zß*A<ßvîb_B~ã:©Uäö¢UAAßÖ|CzßzOhðUüoÃ¥>ãýü£_<£ãOzu©rvÃœh~*Zý~<*<<~ä.o Ã¥ZÜÖaü£~>|oð+ßBhBð*Ü©ªäîî+¢>OöªU©ä/ðå:vß<ýãÃã©C_+*>öb,©v.å㣠h.|öîv>,OU£©_Z©ÜhbuUBhã:©rvOo>aªª> ~ZÜð.ªorBãZ@Bý+hߢöðê,©OrÃurýrvzao>u/Zö@äÜuîAßC@:AbãÜ£b äð+*a,åßoOAzÃz_r/üuo©ªO¢O.bßÃ+Ã>ߣbÃ/.ZÃö©ÃãÜßãh>ã,ß.ð©vÖÖOª bBß>_Ãuß|or£U _uÄv~uvä~¢oUÃÖð|Obð <ðý* CÜßå£äZßubrîÃ,©ª|Ãœ,hvü<åýýhÄîä¢u+ö<:<ýöÜä.@©Ã£/©UÄðh~rboZîå©Ä~î*:ü_ßðuh~ã¢Zã/ßo*_<OrÖB£ÃA| züîuÃ<Ã_CUBÄ.ý +îªb~<|~ý Uª,UîÃ/¢ªoÃv£~Ãß_oßOÜÖu/ÄÃhýýäÖ+îå<ä*zu>©Bßã¢CUa*Öö,Öß|<,ö@oª:¢Ã.z*ÃœCãß,ßbÃU:C+b/î/ råü<ãýrCüuîOß:::UÃ¥*,+BU+£@AÃœhrv_aü©£b©BÃZÄ.ªh>/ý©îã|_AöC£~ãzü.üÜü*oãÜß.~ß©B©©¢UhbACU+Ãaýa|a<ßÜÃåã£Ü ~uä>UÜåðv/a ÃuözÃ,v*OßußöÖaöuöaý:ß<ßUÖCîCbÖCahh_Ãœ~ýU+/oÜýb_<Üöà .aåîÖhbýZ+uhbBßߢ:o£öܪA£ÄßOr£hO*.ÃýUuߣ@aüaraÃîvÃãzßb,£.äUAzäߣubÜ©,ß|,©>Cðß~ߢAðî:ßß,zAb|,ýÜ ©u Ãœoua>:O:£Zð:äßbªý,ü ã,£<£*UO.îo:Ä<ߣ.a.:Z*OB,|rÖ*+ÜöÄå<+>Ö+huaAÃC:Ö+a,rýü>b>r|bbo>ßACuÖßý/h£¢ZUvz/üößßÃöOÜürßýOöÃZýÄOý¢îÃð+~v_*ÃvÃœOÖ~hv Öåä U|ýaUOü*Z@BzßbvÃ¥/o©¢/Zðbß.'), ('a£üZhZ©Cð+ B~a,Ö©åö@Ã¥,îªuUîö£öuãß. £_ßO_,höbß~A/îo+ð:ä©¢Ã+bî,Ä<ýhubÖðrîª.Ãð©ý,ãC*.ýãAC.v/b<î/* Äî_bbzrß>ý~ ~uaÃ|Buö:Ãœzî,ßßzäÄýob*rÖ: Ößhª<ã:ÜßA.,îßr,äöª¢©v@åöÜa.vuavuU /ßäZ::¢aÖî<ßoö©vU©ÃãA@~Aho©>Ãœ~a£oObvÖý:üã<ªÃÖC,~ão_rªª.C.ÃÖ h©ob<ªý£~u>vrÃa|ðãvAÖb£¢Aßb|ÖöãAUhßoz@vhhÃýª£Zýå~ãr~:Ã~ba_A£|.î£+¢~Ãã*UOZðüÃ~ßa ã|ýü~Zß+/üåCÃ¥<>hÃ@îð|ooÃßÜ:îrU*öUv©ýÜOorßrZÃ¥*ÃC*Ã¥ZUÃ>©>,rZbo>ý~@A+,îAbv_v£ýî:_Ärü.ßCa:zo.Ãœa*äÃhßðã:ýz'), (N'AÃ/ã©~ö©|ärbo:@~bu>UbðÃ|>OüªbÃîÜbABzA:>ßã*Ãœa>b©< åîbÄbÃCaä >¢ ~ßü/ýh*u_ªÃ©.Äh©b/>>vOßßbýZýZoCar>Ööbbb_CC z*A©aü*ßîýCb.ah*ýã+ð,>Ã<îüOªü+ü,oã@:A vAö*uAb: öîÄbÃÃröߢ_ÃœbÃœÃã@aÃî|<Ãz©~*übZÄ.:¢UÄvzZ£üîÃã>_uUu>Äa _ÃœzU¢CÄ,~vÃZ<*ðub/|Ãœ_Ãv@ãO©_ð/î~._¢b,ßZÖbBv©<öv£vÃzßUð£OUß./:O:h*oåðÃäãUoßÃ::ªbåðavUhC <Ã¥/ã~,ãZä¢Cz b î.ãb£.OrÄ£Ö_@/îuaUß,bZAUãz@äã ZÄß~Cä,b:ðzÃÄrãä äü,Cb@©Zª+~u î +,*AÃðzAãðÜåB+~ã,ýü£î/uurhZ><ßãhaýz ãßh,_ð|OZ¢~ðA_Ou*U.ðOhß~£ß|Ab£åCbUý~ä~BüåAð~|*<ð¢ªÜÖ|,oÄa_ÖÃ+@B£Ã:åÜ_ª+Ãœo:AhuuAZ*¢,<Ã¥C_£BZ|zã+ª+ðvãB<Ã,aUýªC*a<Ãœ>:+ÃC¢Ü¢îu©UAböÜã©uö,öߣU,uÃ¥@/ZBßÜß+ýäUZ>uOUahüObßvÃÜ_,|£Ä>Ã,Ã¥B:ð~:UU~Üü/ö/oÖ|¢C.bãÃOªzv,UÄv+>åªCÄz/©Ãð~ðbãbAvr/ÃC+£î*äöª_à ÜvOÜßåð£UÃÜ,üÜAÄ|uz~Ö@Z ªvaößOÖBraÃîü£ßzb@Zäðba,:o+,uC~UüãO|åýßböÃOübCÃî,a@uU/.|Uª<©ß*äB.:ðCA/.Ãäöo|_üz.Ö>ÃhßAã¢oäaavîCü+îîUOª>rÜð|r/äüAuÖöêý/ >a O/,.öãrr¢bbuoa>*Ã¥:£rzîüÜ@ü.*+<~ÖOv Ö,@ª*u© ýo@ßÃC¢|äãßAv<¢åý.ãßoä<ða+£ra_ã,Ã>ýîßêbUÃ.©¢¢/uÃu+~ß,<Ãœ@UÃäBÄÄ*_ä*ßÖÃßUßÜðÜ/ßZ,ö/:ßOU~zAu+|üÃý@AbhÃœv£:a.CßA<Ä Ãö ð£vîOZvbÃœ_*uZbÃœ,Ã,£@hZý:,b/|ß ¢ß vhåä>råî£OãÖUBüöb/r¢£ß>CãÄU:¢Äª£U/Cª>ßað.bßurÃzÃ*ü|O.O©:¢Üaßü/vö|r@ßü+/Z.Zr|aZîo,>B©h.ubÜ£üÃßuüýßã©aO>Üü@ZÃœhýC:*äã.: ªßhü:Az.érA@bÄ<:|ãß~ßÖ*ZÃöä@Ãr:ü>Ã¥,+Bßß@+ß||hBäv.v|zAbvzzðåðbZÃœ:ÖbAO B+ÃœAZrarßo¢BªC:£oð/ªBbOîå:BABßbbÃðzîÜZÖävB@ÖUãö/î:ßü©ab~bOÖ<~oßßüüýÄroU:av@©ªz/Zu©+@ÃäzÄOUaßUv,/+Ãü,>UuÃu ü,>,üÃÖbö©arý_Ä,©>Böãåð.OazB<._*ua_ýA,ý/ürvßZ v¢*hªOZååZööäé,|@C£ýüaÄ+Z@©ü¢ªhhäÃ©Ö ß+b hvbb@UÃœ~¢Öâ*Z¢¢Üz©¢îU©ßßaaý¢uÄÖ~£ãÖ©ZÃœvî,aä:>>/bC|>Ä/.Ã¥~Uv>UÜö,AðbÄ:åü<_,Ã>Uß*z@|ö@©rbhuöo/avaC:ªß@:ßýOobüzÄî£ÜåüýÃß.Ããåî<>Ä_îauUüÃ,>bhZO¢oÃãßävßäãåaÖzoAzOÃåÃ>@ýäbAa~ÃuUßChßäý<~Aߣbhr<©~+OÃ¥.,:@aãߪ/Ã¥|bÃ¥bö¢:ªßßÜaAÖOÃäA>vãäü,ýÃÃ¥Oß..îUªa£Aðrª>+¢*ý|/ZAä£ÖCOAÄboÄðU.|<:b£îhCã¢ÃbÄã:öhbãa_åý£z¢vb£ßbÄ_£AßC<|b*UC+OZ:z_ðÄZ~Ö. rÃ@Ã|,.ÃZ+ZßuÃ¥uÃå¢z<ðã ÃðhO/Ab+ÃhÃœuÜüå>üß.Bßý£b£Äa,ö/ð,*,ßÖ/rý©Ua|©:©:Ãah £@Ö@ÃZb@ÄA£/Zr+ä+OCbÜãÖãß/ýªüvv,ßCZåªäb<*©v¢ª~Z:bßb|îb_ßÖîÃzz:_:Ãœv¢oð>U>B¢ÄB|hUuh@_OOÄ<Ã|b¢~,ýÃ_ß|b|BuarCã|<<*ÃUOßüÖ©ß|_:uä<ÖÖbßUu< r/åê,h+᜙oz+.~Aüäüa@BÃ¥*@:+ßÜUvä.bÖöUovÃOÃß:ÄO+ :Ãœv+> © ý,böÜ~A.>Zîz©£ßß~ZãßZ.£*BA ýüå+b,.öãb ð~Ä,ü.vb©ßý:Ãœr<Ã¥b~ÃÃãÃvA/ªðßðUÃöÃU+Ubî:ubA*>ý@Co~>++C*/C.CbÄ_ãUßhC@£ß,Öbð>Öu/Ã¥ ã,Örð.öBÄ£îð+öß~ *ÃuU~éÜ|¢AäÃrÃ@ßuzÜ£z,raßaî:+CBð/åébUÄB.*ÜðUü/u,~Ä>ß©AzaUÜÃÖ O@ðöz öäÃüªÃuüªZÜã|Ãbß,~CÖã/£ß|+hß*Z.: Ãu~b+Ãa©ððýA,U©ªývhßaÖäa|,AZ>rr*äuU/_u¢>ª Cå©o¢OÃÃAuv¢ ý+|@ü£ÃOÄâOoaubÖ£¢uãý*.Öã~ßoübuîvbýÄ©ãåo,hAý11/19/2008 4:38:05 PMThe quick brown fox jumps over the lazy dog0123456789,.;:?[]{}()-+*\%^=~!@#_|/0011/19/2008 4:38:05 PMThe quick brown fox jumps over the lazy dog0123456789,.;:?[]{}()-+*\%^=~!@#_|/00'))"; + break; + + case 16: + $query = "INSERT INTO [$tableName] ([c1_int], [c2_tinyint], [c3_smallint], [c4_bigint], [c5_bit], [c6_float], [c7_real], [c8_decimal], [c9_numeric], [c10_money], [c11_smallmoney], [c12_char], [c13_varchar], [c14_varchar_max], [c15_nchar], [c16_nvarchar], [c17_nvarchar_max], [c18_text], [c19_ntext], [c20_binary], [c21_varbinary], [c22_varbinary_max], [c23_image], [c24_uniqueidentifier], [c25_datetime], [c26_smalldatetime], [c28_xml]) VALUES ((-2147483648), (81), (-11771), (-1831503069), (0), (-1.79E+308), (0), (0.4471), (null), (922337203685477.5807), (1), ('Öß/Ö>BhüÖ©äv<ÃzhZ<£.öZ/UbÃœbüÃð¢î>_|Zu,|öö~üßZh.,,ßüü<+rÃÃAO<>oo*ãßß~ÄO/A, >©BüÜßbäBåö£/h*Ã¥|rrb:Ãœ.ªö: ßÃu+ð~oä@~ÖU*.¢bZ,r,©UߪußzäÃUuOÃ¥@abvvßZßöã©ãÃhrÖb£~äªhCZZhZBÃðär:OÖ+hC./_ÃœZü£AABZUU㣠v,îÜýh@ObAý<+@,ᛔUo ßãh£vBrß<©A_hð*<*hZî*ÄvýO£@Ã:¢z~>ý/_ÃœhÃA +~*öðU~A*vßüUýC~h<ª~>+ä+:bh<ßÃu,U~üCîbU.ð©B*<¢Uazü££h:ãaÃü>äBCu©b.Ä©aa©buO£ßv@åßßCoäA|vßÖü,ð|+zß:/Zbî~azZ~/ößaÃub©büö+¢bbra+öãäBöð*ü>ÃbÃœ.'), ('uÖä>å©>r,Äü+ðý>Ãœz_©>öoÜý/ÃœZåÜZbÄaOãZ @rz:åîÜ*býåbB+¢.B¢U*Öor/ßb,oZ:@a:ÃÜÃ<ãrßußÜz:<+åÄUªªÄªz*ýå©ß@¢bª:ä~+~ðöv//hð,åü ©>:bãðzä//êo+ZªÖoäªåaZÃœz OZ<+öBî'), ('OaÖ__Ãðou Bbh@ouA*/©r©Ã@Öa+b<ªÃãuZ/Ö. bhbh|üuBhüuÃb_Ã¥<ß>ZUß_+å©¢£vääB.ßÃzZ~bCÃœZ£å.'), (N'@oöÃ<ðöh£übîB< C+oö£oÃœ@,|O: ,ª@aßoð*ãÃ_üu,åßo~ãã¢håÄåZu:b>OrbªÃA/ABö|ýv£¢ü/ÖîÃuý*ªÄvÄßh_ð:v | ðª£ã,C<Ã¥v£äUBîã:|,vOä/î î*©h+ÜîÃb+ãCÃã>B îbb:üZä.ý_UBßðÃ|@A O,Ã¥böüÖrzßãÃ,uB|ªhäãª_£ªB£Bv+©>ãZ >ÃoU©äu| UB*+ÄüUCU+ãaÃß_:@Äî|v_oßoÄ*.+:aªbr.@ÖZ,Zh|U::zÖð¢Üoh abÃö_rý¢ßÃß+uü@,AÄuzª.ÃzÃ*ãö.ߪzäZbhÄ|rB.©zß:Bu*U_ªbðßÄ~+,UO*ArAh<@ðð+Ã:@hîöCåäªh>Äår_,A~:Ãœ aÃ,:vÃü~Z/åäo_ÜðÜ:>@£bã ã~b<*:~*h>,@<ãOÃ¥aã'), (N'AbaªBßaZß©öåbh/BîBöüZ>aA,.Zªz£¢uÃœ>Zß~<+_/z|:_>: .BýðîB_@AüuÃ@,ýhAÃC_ã£@.Ä,@ýð|>åöörr©Ä ©üÜܪUÃAb ./ß,î>Ãœ~|r>||ª:<*Ã|OÃœ< .:~båîOA+<£>hÃßB,ozCîü:ä|öB,öz.å©,OhBîB ßäÃCÖh+ߪ*Oî~ßvbîªB|AZ_ÃA_öÄz©ý>büzAv C.~Zß~h>zÃ¥CCu<ß@z@ übrr£>ö*ÃãªÃýÃ>öª@ubªO/@Ã_£ßÄzUîrðÜäU/©Ä.Ã¥ £ýC_|a,+|ýhb >ãýZö©_< ª.¢Öý:ª|ý¢BACîähzÄ©uzbb,ubðöO_:Ã.£î*©Ã|.ä/vv|vZzãb<ü~ü£@Ä£ÜÖoªã¢_o>>u.zîbCOªhîZîÃÄB||îð/rð_ªß>Cä*<*ýÃýb.Ã~ð<ßb,ß+Ã¥b/>vb¢ubzzäÃC_ýzv£|ZoÄ£©ãýý/£h@ÃUð:Ã*B.ÄÖÃÃÖ|b:+<<ßÃvbÄ*ßã/b£ß,oßh:rBzöouã_._U*îÄ¢@Aãußa©Zýý./>äÖ|O<ðÃrv Ü£Ävb¢öÖýßAãACbÃöÖzvZÃœBC¢£übäýA/UÄb~Bê£AU/££AhßãB/*äbÜÄBA~.ßÃ.Ã+vrãå¢ßÃßOOãåÄ ¢ÃÃärZr+Ãœov>Öhüäo>ãC+ßZðuZÄ@Ãîðß,Äö©BÃ¥u,Oî.êCbªäzA b~öß:ᜌ~ÃÃåu/CAOZÃœZZ/ö:,~ CuC©+äªÜßÖhuZUzß.ä:@éÖ*>AÄbüOU|Ãz.@Üð<Ã¥brýao¢@zB|_/¢ßA>ÖAß++Ä©Oîu>©öB. ©<_ZOýObhAvÃ:îÄ.¢ö© ß.bß@ßBðhä*ýhuÖovà ÖãÄU /öÄý@bAa/B@U/ÖÖ+Ã¥UöZÃZ~uo|hå¢îÃ@ýüäªÜö£h*>ãöðo,@¢/bÄ,ovÜßå<*Ã_@©ã¢å£AÃ¥zUbuUªv:C£üA.v/aCãÃBÜîbüöB.ÜÖß:¢B ß,u|Ãoª+üða|.h£ðÄ©ÄözßrÃœ@£Äbî*:b.Aö.oh/B£:_Cö+©vCãCßîoAaO:AA/@<ª<üo,ruÃœ~u¢Zãvbßhü/öbU©hvýðUÃB.£Cýð£ýuZbÃ¥b@|ZäOÃB¢åbý~.+ßßå.výb<ßüOä*/ãðÃ+baÄBä.ßrhbu ©@~_ão äßåýbÖz© ,©ßü,¢>,©Äö<ªbãaU~ß>U*Ã>/©@öb:>ãÄ~BOO|Ãœu:£*bÃœrzãoz/:ühÄBߪOßbabãö£ZbZZÃZ£ß¢hCîu|ä|hßh>Uð@öÖ,Uh.|bö>zZðoîÄÃOð©h_@rZaBhb_z_b㢣_îzhðbo.ðvö,uB:zzU,.Uröhz/a,rÖrb_voÜåÜÃb+BvAbÃîübýuß:r, öOãÃbhðö*Z,*£ü/ßC.ßßAÃ/ªäÃ,raü¢>ÃÄhü r/ÃhC:/~r.ub>Ã¥C_ö|Bðåß*ÃÄð+£î¢öã:<îüC©ðuýa© Oo>b@öÜobb/+Bü.ObÜÃ|<,~Aýh.Z¢äðäoA||/zhüãÜß,b@äoUÖor BäÜ|:B+@<@Oh|ub.äÃÜ£ÄÃêrý:'), ('åÄÄ@boÃœaürÖ:+Uªv|£rðªhä/hÃ¥B>vß©*aÄr:ü<¢ÃÃÃœhvh>îbuUýUb/ãäbbA~.Oª>>_©Z,O_Ba:rãý~z£ýAZaß.Z~Ã¥*+Ã¥:bz|o£Ö~ߪ©bÄîuªuýä<Ãœ+~+bvb.bß©¢üh¢Ã*ßÄß++UZðOÃ*Ã¥<îBb:ö£_üà ÃO¢Ubvv:ªz>£b|ra©zÖî~Ã_|î||@rüh,h,bOÃýU£ðuÖ|ývA@UðýurÜÖa£b*<ÄÃU¢OC>Ãhð¢Z~ÖbzååbAubÖäã. ý@ߪã.ª,b/öb+ :Ãœuð.Z|*ãu>rßß/bCªz©@ªCA:Oh©u:öý£å¢ü£ßuCÜ£Ã~C¢¢ßüaz*ÃÄßä©O_ðO:.z+Oîåð@ðß_*Äuh~vöbÖz: üüä@ZzªbÄ¢>~ýý_ßööhv£ÄßrÃ¥UÄuªä.oüý,uA*¢uzÃãÄr¢hªÄhCßorÃvo©¢bª+<är ¢a~ ܪzðöîäBývCB@<ÖªaÖZCb+Ä~¢ðvý>Ã¥aCa,*>>uvÃœ.b©+ö>äaBªzäÄ@Äýà £hbUåî|h,@CöªÖðUC@<~Cö.Ãîä>@*rÃœZÄ|Boö,aÄ@C~|Ao£*äv.O@CuÃÄ *A,bßrÖßUA©ÖzÄ@Ãœba+äÄÃro©BÃœ~ܪ*.:ªbýzß~:~Cbîa@hB~ý.obCªöªoZö/ÃœZAhZ>@zßCßUÜß~*vAB@oÃÃU+,:Bb/*@¢AßãAÜÄA¢ÜÜåªîZzA~*CO/vb~ßÖîb/U+ÖZ¢Ãaà >zbî,öߢ:Cobö.üZCðUUvåößZuÜ£ß~Üü¢rr*ÃrzhöCAubðýOhåäÄC+ãUa©Ä©Ãªî¢öhÖö:*ö¢CuýAAãuðbÜüîbî£|/ äraß: r.ZîOAÃßðuªî,ßro:Ü¢î¢ý|b>O>C>Ö¢Z֣ߢ|zÖAbOýßzÃO£CÃÖur|Ärãu.ý_ªzOªzhÃü~ªhA~ä/aÃÖÖaäaßý.brð¢Ü îÖ>/åßuýª/Ã_BªOªÃvOC<£ý©ª>Oruðß*ßvUZB.|u@Öo~O<Ä,u<>£/©ävÜßã+¢aÖ©ª Ãã+î>ZÄü~Ã<,>hÜßýÖ.oîC,ý>Z~Oª>a<üãÃÃ¥azüuö:BhÃœ+ êßAýU:/ª/,,uÄ@+BÃý.£,îÜ©ßrr:Avrhüå~Ãœ:aU@.C:¢îÖ@.Bý.Üö©zÄb*rbUü|oOvUãð~¢ÄÖîUv/oÖbÃÜ*bä.Oz|Ã¥ÃBßOv/|Z/£>Ã>>+ÃAb.AvÃ¥~o+:ª@zÃœBövbä@ð|¢ßÄoÃC_ýZä©O,CÃ¥_¢ã@£ßßßAý£|_/:¢ãÜ:.ª Bo<ª+oÖãh+übÄ.aavÃßý©Ob|a|ãuã.ðÄvu@ÃAA:£brãZ~<ÄA¢ã>Īª£ðBîªß @aÃ:vß>î üUZOð< ßü@äߪaîrC£~~ªC.£ _rCß ©uCZäU/.ÃOªZöbð>îaßUooð Äãߢä+Zrü£ä£Ã h©ÜÃü,ýzO*ÃߣOz~O>zß|a/ß|zî, ZrZß~äo<:r@ .©:îbÃBî+<* îÖCuüh£>~üîh/ýb oBÄzÃœ:o*üî@~ß>ößãöðßÃð> _aÖ/Ö <Ã¥uýÄ@¢Ü Ãœbß_ © bÃ_ð+._ý@©a ©~Zar£©ÜC*Zü:ß©ä>*hößÄrrb@hb u:A@zBÖ£ðZßh~Üý+||ü,ääU/O¢Ã*ÃÃœ> ÄäOÄhÄ:h~U:Ö£Ov*hövv*¢_:@rUZ|hðoß<.êvUãBßߢ.<Ãœa+*rÃœ>uüBzÃrð .äbz+ðu+ C@ªUã~ bbb/Z,ÃO>uv+>h¢,©/Cåß,buz/~ð>ßab¢ªb|>bbAOåßh©äåO>hðßÃÄ>ÃAãhäßÜ©ÃuOÃÃ¥bbîª,BÃö~ð|/_,/+Ã¥r*îC,_£ðOr.uBîUÃrÃ¥ZÄîªäBo:¢ª~©aÄC©Ü£Üä ß|/oß//ü©//@vÃßUãräZ:ãü_.ªý~u*å£+CÄö<:b£Ã>üohoÖAZ.ö/î~äüªîÃO:ãÖ |ÃœhoüåÜ,ou|üåß,väüZß,:ÖßvÖ |ÄåråÖ¢ª+A~b.£|ZÃAÃ¥Bß@ ÃÃää:îa©*©ã¢>UA~©ßböü|@_Ah.Ãz*.@é|~Aa©öh,.Äßå|a_C£ý¢_+COzã < *aUzðßÃ/_©hhß~hßÃh~.hOÃ/îoz/.ÃO*<ßb.<>üà B~ýä<Ãßü*|ÃÃbOozß.Ãœ@UAß<Ü©ý@à UOäBbªÄ~..@:bO<ª.¢åC©bOrbbÃœ>bßÃvUA @åüh_~ua+ýÜü¢aOU+¢¢£oý£aüãu>~©vuAãüÄ:<*@:bßuZBh>î|+¢¢+O_UöoÃ*Ä.ÃÃ|ößb:ßåZBrBO/ÄåÄêAz¢ª£©.<>z£OãC<Ãh /:Ö<*_Ob*ßUZý¢C,,Cüzh¢üz|¢î:/böýÃ+ZhvßZb<~b£vA©|ªvÃ+Öãrß<:îĢģzäU|ª üC|ãîß_| b_ü*ão ~UÃ¥O<©ßî|/ÖðÖÜa:bu¢oo@ãa£vo,+ÖvÃ¥>ýZa©.äzz©vaߢ+ ä>v+öb:¢+Zãh©<ßUªßî£ßåC:zOOAAaZvÖåo©ßað<ÃîbvüAuüüv,aÃÄ_ü,ßbÖä/~*a~,ß h:~ä/ðîãä>vüubܪv_A OZýöOªzzÃU,£.¢ßßßhzߣh@z᚜+ßÃÃb*:hä:£Ãߢ~hªB¢_~UüßCuuÃbÖ©h,öð>ö@ Zü<ü*o:ZäÃbOBÖ ~CZ¢£©Öb¢bß:üoåß©Aî@or+ä|£Oª>üßã/ã£üãuZöbbhbv _Cýå.oOUo+Ã.bý>h|£UýaC>ðü:Ãö:Bb ªUBb¢ª|¢£r©Zu.hz:ð@<ßZz/ªbðü/UßbZ,ßãå/@üB¢ ß/uÃ|z.<@~ª_zð©/~Ã~r.,ªýã~z/A.|+OüÃã@îraðv>.î.ßUäüýý:Bau+*:©buzðO£CBZab.ua,©AzO<<:O/_üÄü~UUzÃöäå~Ö:¢à ¢Z,<îÃðvh*ö¢ß_îü©bÃœ z>ßÖ:r¢@BZä_ÃhãåAbbüA Bî*Bh ýªb,ä.AC>£AÃB.oä>,å©ÃAöªýßZý.î,*bz@>r:à BÃ,,A+å¢oU,ür:¢ü©<.bhbÄ~v©¢Üå©©bÃ||ü¢||ªð£ßo>/oªÃ|ãÄA£rbaßC+ÖBÖ>~*v£å£ CîßCÃAUÃßu@Äß:ÄZãÖý/©£ uv+Ã<©ÄüZªîýð©aZbbBhß@©Ã>Ch*Bã/£ðãöu**ÖbBUUCî<ߢß<ö+|>_ê©r*_*Ã¥/ovbBÄÜðÄzbb_Z|ßA @@¢îbb.zUªÃo.@Ã+ßö£.ÃîA_Ub@:ý.bÃ¥oAaßv_Br¢ßªoª¢¢îCUä/Üî/Ã¥ Ãoühßî:Ä|,+*rîB£©<¢ª.|@A.bvÃÄãÃrªÃüã~ß@öBB/ýh|ð*ÜßB/ßvîC£öÃãÃaéOÃ:ðUbãüÃ@zh@îão'), (0xDC2AC223F37157A0D09697457E8AB44F431D051EEFC9CAA3EFA757FED77AF4CE6EB384F4C9280C3FA538F8A143E7BC82EBC8AB6A8EE32B13601E344B1A58C956A1C9D6CA05BF851B11C579B7D1286007EBD5130ECE8A3F8B887094AAF4C0254C6FA1007A10F17C2B429058C86A734137BE2C604445BA8816894B42952BDB2650A02D482F27E6F6FA59E7CC3D327721142F5CEBC760E006B419EAF0C5AFE700666A07283C2B1210D83565EB5DED4BE3122A2D66CEEF5EEFBF2693163DF5314A71E765D32A4EE4E81C4C1392FAF4A9C7CE06DE9B818131770B17681697FCD2E2041B79768778B9C345444982DBCCF5CB7DCC48371795C9F0B5EEC712E6CD50207A308DDF7B323F564C1B553C37AF9B3E229D99CBB49ACB6E5288C098B0A6DD78F32807AB3E15504A8CF1EAFB408CB8055388EF4934856CDF651F8DF271A6A5A53DDD480EA8F0000D4D4E3FC2AFCF2EC5D0BB4527B794436EBC28451F885ED8E54C45BE6244AA5D6288E2FBE546A92F95F1C821B6617EEEA999D9527FAAE184EE7659766A11CB81255EE29ED4985D2812F8B02DBF3C2284CD5614C86A57DDB8A75D0C6FEC33C4832546FB587EDF1A113CB13F87F9B3C4B254D5A814FD0216CE802AF7768BEE3CDF332C077940C905ED3B028CB81856BEF3985A1A168AB08623302DD754E7A3864D745F53CDAB4B728AD0BAD8FB755EB52A6B04DD30D3255483A6E4), (0xB106977B3F44B802F1474CE79046CFD78BAED178ADE8E3C655794F0BD026C70260991EB4407F3619FC277ABC904943DF84AB1B36779944C822D125C5F4AD32CA804A87F7271B970B77B87C856E26350C366F86240B908BC65456916F5971254FF5AF3B46C24CB769140FBEBE1DBE59FC9B198E85260EBFEFBEC0A2D08927B206922D90BFEBEF49E9B81D0FFBD2CCA996FD95D33FE2A028E6F04B8802AAE6E0EC5DB82CF02D9A10ACCFA5CC09FEC31DF1160BD3F3547224F204A9CF9F66473FD13D229E19A0B969638426703DD31FE82C2E97EB9F13EC98EA9439EB83CA71458865FBCBDB2403505DA26F6E2D02E61FE5C1A271CF5CA0BD508AB48567CEE59813E0E7D7D7530C072A478EFCA37D6AE7AD1905C227FF762CC53D7A50707DE88FBCD75B4D1A0F4792B49A4687CDA31AD320CCD84EC82370136ABB119AD8BB97AC5FFF40CC221DCD9DD1730D8DB9EE5E2223A730A3A599C6986647E25FFEADB9F8039A28CE624DB003FF3A7C5416E35A7B5DEE76308BF407C538A865DB3A6D9F24B914891FC58FC0D5F62C), (0x0F), (0x0F), ('6a468623-10c5-4a47-a600-e88611f1f237'), ('2001-01-01 00:00:01.000'), ('2015-02-10 17:05:00'), ('11/19/2008 4:38:05 PMThe quick brown fox jumps over the lazy dog0123456789,.;:?[]{}()-+*\%^=~!@#_|/0111/19/2008 4:38:05 PMThe quick brown fox jumps over the lazy dog0123456789,.;:?[]{}()-+*\%^=~!@#_|/01'))"; + break; + + case 17: + $query = "INSERT INTO [$tableName] ([c1_int], [c2_tinyint], [c3_smallint], [c4_bigint], [c5_bit], [c6_float], [c7_real], [c8_decimal], [c9_numeric], [c10_money], [c11_smallmoney], [c12_char], [c13_varchar], [c14_varchar_max], [c15_nchar], [c16_nvarchar], [c17_nvarchar_max], [c18_text], [c19_ntext], [c20_binary], [c21_varbinary], [c22_varbinary_max], [c23_image], [c24_uniqueidentifier], [c25_datetime], [c26_smalldatetime], [c28_xml]) VALUES ((-1), (184), (-7764), (893569276), (0), (0), (0), (100000000000000000000000), (0.3273), (0.9028), (0.7661), ('ÖbAüßÃ>ð>aÜãUAîbrýªr@ã*b~ãÃ|îZuä/>b/hüübAåÄð~/ãZCጚUO*îÃü+ööðaußð,Öü:öuA_o£C.h©AB £å©ÖÄAÃß >Uö><ðã+ o~ßÖÜ¢a.bߢZßBðCßrÄ©åu<+,©*b¢¢ð©Ö*Ã¥>_îBbÃzüîoAÃhA,©ÄCÃ/ðC/*Bvüß.äü@/u.~îC£ö~v|r*ýuAuür_bðü,B_ýÜÜ>_Ar@UðªßÖª:Öã©_uýCbð|:£.:@Ua<*CÃ¥obÄ@aãÃZ./rªb bzäå|åÄãöB,Ãœbé~ .<~~Öüauo,Ãœ@hvb h:öoªßUo h¢huÃœaªßCÃœC>Ãz ã£.>ö ßß /ðZÃ.Ä¢U/v¢*åý++oÃA<ðã,hª ö,Örý ßßÜãÃÃ¥.,oÃ¥b<Ãýü£AC᜚ ,ª_hCBÖU:_*oa*ߢÃ>Ã:åã'), ('Öb©Aub>üa.£öÄbo<äãOäý,:b+©åv~oA|az¢+u.v,b,o~Ãåðª*vªA£üî*ª¢©_Ou+ã+bð,/ÃœU/~ßߪUÃ¥*<Övî |ýðA,ZܪÃÃrßazrªö@O~aO:ãozBÃvOßîzbv,oåýoa£Ãä~üªð©Ã@UB ,_bäBOA*|ðz@üAß:b@a|+<ªvrÄOb@£_ßüÃåãbaîýüZhðv:£åãZ:ÄbÖöîðß©,ýüßî,>_uhý,b¢Aªb ÃýÃbZuUrãÄrÜýîv >ýaC壢Oäz:ß+b+AvU|öö+ðýrߣßA<ßåãäãb/¢/bðü+îuhr>ÃÃ+UBü¢< >îBaßo,>|ý>uZª¢ß>AüýaÃœb~oBZB|ßäU+ÖðÃ*bBßý.©oÄv/hÃ/~ö£ãÃäZðÜCvä_©î//ðha~Bîåå£o*hrî~î/Oåär+üÃ>Ã¥A/.Ã¥:ãahA@:Ä¢öªöb'), ('ß|r©öB>A~U|O BrÃ¥/<ÜÄ@CbÃ¥b/Ã_öUUZvÃÄ ßÜ:Üüß/î: h¢/boOö,aÄBðO._u_a<: uÄü+åãuvßrUuZ¢Z*b_>b~Ãý~uU*Öå~äªz£b~b.ª Ãhr@äÄîÜvÃ¥::ý,Ö>Ã+o£>:,u ¢î¢|Ãv©ðo*:@:Ä> |>ýh.ªðî|äÃvüãvÃüOußvr|ªß@ßAZüv££zöö.BðaýÃaã~,ü bÄ_Z<Äb*ö+ åß媪~Aª£î Ã¥vuß@rÃA,|<ü|.ýoöu~aAÖAuCC.U_ßz/Ö,©avÃ¥_or*ö zîAOªä£.zzzCuýÃ.ß><ªUbrOÖüîbÃ.ß©ßÄðrBu¢©hÃ¥C:B_ßZrh+Ää*bUÄä/¢ü~Ãî>¢z@b>z|äß:*ðÖbrOªä_bCß:¢©>ußýÄ|ouü.ÃœuÃ~zC*ã ,Äß|Ãz_bÃœvÃ¥ ê~C:.bÃüövü*Ã, ärýãÄ+¢@ßÃããßb@o: oý>ý.hAߢ֣,:.@avühßzîãß/ðö ª|Ã¥z:ªußo>ßãßîÖåä,u. ßß|a¢AUo©_>rÄubä öärÄäÖOZa.oöübÃ@aßÖzzß~ü£<üz£B©Ãa@/+uªöb,Ä¢ªBrÄ>ßÃÄ,z|Ahvub+Üå£îÃ:ö/ª Z,åÃðªOüä/Ãœ<>ö,Z,:>zBa@|Z>bÃå£vvî:.z@¢¢.öz*£ªz+Ã>:b<öZuZäz,/_:Buo>~A_bÖÜãb*ߣåüýh*u/~ß ªUC:ruOÃ¥>rh>BÄ o.ÃZ¢äð.¢ü .zOU©¢*Oýß.¢|_£rä~>,Ã¥vßrßÃZo:©ß><äßåÃv_>hðÃ_ÃßhÃý©bßh~:h>ý/ð*rÄzüðoÃÖÖ@ªbýUö_v:aª|Oܪý+Ã¥,£,Ãߢoör/|ߢ:ýuo:Ãœh*@ªU@.zßAðÃý|vZB+ßÜ.ãzÖBÄ£+o|ö¢oru_Ã¥bhO, +ðvÃ|U*Oîã ©+zAÖ>@Ã¥boubz_Ãœ Ã,bu£+B:,>+h,aý©BZ<ãð>h_ªz*OhãöOßð¢Üä¢ÃZvã£vh,.î+z*+C,@ÄîÃÃ~b<öý©<ubou¢ã|/ß.hî~b©ZZAOýhÃ|uÃuÃAäåzbãüÄð@vã+*ÜÖ+A@~ÖaÖ|* u*><ð@,o_~ðBbbª+ÃÃœaOߣ+ýrro£öaB üê¢u/~Ã:ußrãvü<ü,Zý_o@~ý>ZÄ*Öu@<~h /ýhzOZÃ~ãOhðUé_ÃBßßuA£Äoä+ÃaZÄvh£AýUüßU/öÖß+*<£b©ß,Ãœ C.*/hzîA||<åܪ©ÃzÖv_+vZã*ß,Ä¢*B*ðr,ubo.übbb@îÖröîB@äu>ÃUa/ruäÃ>hÃ>ªhaoCob¢ßö ãh*AaöAýUC.:or£üOB+|ðß.oböÃü*ߪÃÜîozãOäÖ:h:+O©ãöOðbu,@o~£rß|,@aã:ýªîCbÃ¥vãZª£©rªü,|:@:>ZÃîÖ<Ãœ:AÄv*r@+>î+Cbß,Cî>î/ªßoßb>,öÄäa+~Bßß| z<Ãu<>r*:£Coã,äAO¢ååuãß~©¢îa_üý~_|O/Ö,*©¢ÄbÖã|Aª>_ðOðÃC<©B|ãªOß>£_ªZu.ZÃœZrv>ßbÖBªZ>ýbᜄ:ÄÜ£ã@b/î|CZöÖ+BvhîÃ.ª©¢*:uzÃß/ßåÖß@¢¢öÖhãªUö:oäð,Ãîðð:ãAoZ,ZÖÖbCZ,Oðä:¢rh~~ý/ÃîZ+,Zb@åüzý>< _<+B@C£büöböCÄß åã~<,Bð+:ý~./åð+üZ££r>< Aäz. *üßB¢/oîaö/_a¢@_uªBAÃüßbhh++v/_ß>ACAÃœ ß:Ãœ:ü*rCräöÜßUu,£+hÖö>bÜ£~.£Aý>>ÜîߢUua<äAö@/<¢Z|C+ÃÃ¥a+z.ýß,ð_br+/aî/ªo/+©îð__*oüCBðªÖ¢Ö_>ö>@:ßãÖahhÖª,U@uUUÃBÄ*aî£u*O*ßB>|@ãÖB¢Ä:+ÃœoA©>A:öüÄvßb@o>¢ß~<|© bvAÃ¥,ÃœC¢_ZÄörüUoOÃ¥U+Bß©@ýÃv<ãhüßCãý.åÄ>£Ü,zîß+ýã©Aãb@abhr.ÃÖBrÃ,>ߪÖßüv*©rz U.Ö|__ü+ÖUÖuh/z<üÖ_~©î.ýÜuaÄÖ<, ÄÖîÜ£or|U*£Ub,ª+£ß+ð£Ä© aÜß _U¢vä.>,__ãß_ý* vOð+ª¢büC<Ãýb|Üä+Ã¥aýÃ++£åuãBü|+©**bãä.ÄðO©o,Ã> ýÜü/©ü*ªåßZ<,Üüý|Ca£Ã>öaöoBßbuýî,åä aCÃÃýÖOA|ö hr©ªZÃä~>ãö>>Ã¥__©ß+B>ð¢ý/. £ýzî/aãöª,¢ÄO@z+>b¢rß:r@UOãßr|©oä,uªOö><£ððhAbr~r|hößr_rÜÜ©voAÖAÃ:ãÜzÃO_|h_ä@bvî,CªaBOöZäÜvzãî©££îð|ýCUß*ÄýO*hCÜü.ubv.*.©ª+U.Ã¥ba:¢>vÃ¥uO bÃrv>ðr<ÖBãÄbðüßÄ.b,£ßöÄ¢îãuZ,>ü~ª£îzBðÖ,墪Býr+ªåC:Zb@¢> aÃœ ¢©vð |ªßaßßð,CßBß>à C,ßða+ãO/£aãaðB©¢u~U*C|B£Ã ~äãÄã©+u>ܪzBýrÃr ,O:¢ã:ªð<üýãÄZ bUz~öoO¢ÃªåAî>vo,+ÖU>äüA,CðO.U©b ýAÃÃ¥oUou|Ãœaö/Ã.rߪ:öAßrZZOãuýu:ößÄð:_vuC~AöböBü.>üª¢rCZoã:ªü.ðU* bCÄÜö©_+*+aäC Ou.Ãa¢ßÃÄ.Ö¢B£UãܪÖåýU£_zbväÃZZÄC/ÃaruÄ>*,za ~Ã¥C£Äuv*:rýÜOÄ||åýh:îüu@©/_Ã¥v@~ö¢uÃohrabA+©uÖUA@oö:.o|.ª©ªýv©+Bðªbhüü,/Ãüb/_zýÖ/.Aà bOÃœbßC>@rÖ+£vâÄBb_Ö@Ãœ:BhäZ©ä|䣣Üä/vboãîîår/AîÃäªzU.*~ÄZßU>oÃö|Īhuabuß ößÜÃOªZ/ßCrý>v~ C|Ã¥.+~z_z<ãåéß,<î:_ßABOöb+|Ö~u |åî>*.ö+~ßA@B:Ã|b ¢a£uZA~rýhªÄC@ýuÃ¥Oð>,ã*©öåªðýZ>CCåüýhAý/ß~+oÄC@Z:ßuz¢|öߣüZ,.£uÄ¢<~U_aBär<Ãß:röã+ |öO oÖ~Ao+£@u@ZÃ/Ä*CoÃ¥h*/A:ABob£/ýAZ+©ðBª:@.ßÃÄzb~b:ÄB*©ßßîhz|öýzaBU>a+ÜÜU@Ã*Ä_Özhö>Cªö*£*>_ÜßßA@@Bߪ<ßbuv©:|£ bZhßoª/åÄbÃ~o@ßýý:ÜýA.U£ü£/b£,Öäå£|.Z©ýB<>:|ýýßÃOAÃœ_üªhB|*aßbBOuýZöà ä|v>©@@öãüãÄrÃ¥Z@:ãð©Ob+ u|ÃbC,z:@bZbªhäÃAý*r_¢ß.©OäA¢ª ¢orÄhüðÄz~Obo~rðzüU¢rÃoܪÜv+ð@ZßðÄ©ð,.ÃÄCvAª+_£ß:v|b,ühðý.C+Ã_ßÜz*o/ðZ@Ã¥U@>ö£|.bh:î£üU/ö~Ãöüz+A|:vza,rîOéßå:Ov.abuU£hßbðrãO |~Ã¥>ö<,U.©ð|Ãðz/_<,<@üUhÜðz/UBO+ÃäOBð,@ÄäOª+zÃîu@£+Ä/Ãß~ ÃÄaoöýz>_ßäÃr>oüê +åßBaBðªÄ:ðAA~Ör©>_îOZåÖäbÃOð|*Zvb><åß©ãhbr ããÃz~. h<ä+A:,ðB*/ävßoA.üÃß*.hîOÖZܪÜ,ª@Uuß.Ã:a<ä~>ÄOö@Ãßz*îªüà örZo¢ zöß*A~ ¢Ä>© <ߣrýßÖBß>:>oãä_Z_åãðö*rªãuZ>îÃÖu<,@_ãîC.ÖbãOu ß:ö_B håßÖ~är>£Ü~ßÃZÃ/*a/£Ö.oä@A,>,ß_+~/b~~ÜöüÄ¢Üý>a<ð£+CöB:|ÄÃöU|<ÄBßuuuvuBä|b<ðh£o+>|:ãAĪvhÃ¥*ä£_+Oã¢:ZzBß+:h:äOzÄßä >r¢~ß,O/A£Z||ðäz:ö~ðCUz_ßhßußa|åöO©_Ab£åh£ÜÄo~åözaväv.rvÃ¥bß©|ü¢ab.ª,U v,ZÃß<:ª,rUåîßÖĪ_ü.©üvü OaÖ¢Öü>ÃýÖä|~¢ÃßZ©~.©bãv+ßb.ߣZhz+ª<Ãü£UÖrðbÃ¥hAðUª+z©|£Co>vöîbä :ÃUuaUC A ©zOÄÃ*© ~~oîßðý>bZ*Ã¥Oý+hArÜî£b>@öðª ýah_rr ðrOÄuÄCä_>ðbÃ>~Ö©_Cî. .b~/ö*Ã¥A/OðÃv|ÃöãÖo¢üaaäðß.UbÖhaUaAÃÄ*ÃÃœ*.AÄ>hö¢|/B¢Ö£Ü~ßba,¢:öUÄð~,rÃZÃ|hv,C.v¢ß*öª©@U~U/ð£* oÃ¥:Ãœa~__.ßh*bª,+<,ß+~v@ ~r©ahÜߣ,uý+ð .ÃBvðC:z:£Oäü@äüÖå+Crßî_.£a>üãªA:oýBZz*,ävÖAßvßZÃœ.A¢a+zÃ:bvððCü£ãaÖaÖA|a|r|îãÃ/,ußv_hÜßo:ðý<Ä aðîbZãýÃß öAbßß.îâåÃhä/@brª|ßbbZUr£ýÜ/~,<ýð~BÄý AAväã¢åb:_u¢+OýZåÖã~o.hZA_ÃœUrOzUvà a~ð~|+Ãœ|ü+¢.<£Ö~Ä+ߣ orOð.©Ã>î.ÖühB+Av hÄuîUäCZ~:~~Ã¥/Aaã,ãoÄbbböå/ |+|:bÃðBvözßCBuî @zöhUýZ¢o.£hãZüÃüaBAhãÖCî~/.ãbªäOÃ.|>rz,vßåvZü.£ ChBhäOÃ_ßu©_äÜCßßüCä.OÜÃÄÖzü>ßöoÃœBÄî@Äz|Ãa©ý£ã.bÃœ:>azßðö+,/CäÃbýv>ÖÜbrZb£_h,>ßAä*vOb öãýoÃœ_hZrÃaü©Ähb¢ü|o.+Ö©_/~*|Ö~_a© ©Ü¢z©hÃœ/ãC.ãbîÜÄZ¢åî~b ª öÜÃ:C<üa+:ÃœAZðhÖÖ~:aüÄ+býã:ßÃ.<Ä¢Ääv£oß<Ã: ö.ß|ãU¢îäýÄr£~öOå©ÜßAz ©rv>B.£_uUAC~îB¢|b@¢Äî@r©Äýîßü£Z£bo*|Ö_ö¢<*vÃœArÃ@©ªÜÃbß+/ÖÃUªÖ<>ÖÃbß@b/v,|~r*ÄCÜÜîÖü<,©<ðOA:ÃU*äaä@bü+u¢aâö<Ãý>a+b~î aý_huÄr>Obß,ÃZÃha|ýzoZßÜÜ£ä>ãoü+<Ã¥:UßuåÜ/@__hBaÄÖå*@~ªOÄoÖ+|ããAB/ðßß> Ü©uä¢ÃZ£Ã£oÖüß:ßåÄÖBAä ðÃÃ¥@/ÄOrÃ¥U_|ä+Ã_üäCÃîÃðÃu££bBb,Zð*ZhÖuãð@:Z>.Uª.hoÃœuðo.UßrzßbhBßäU¢@bªßÖArO:..vüAuîözo+Öðbz_îAä+*<£oªB*_*arÃýöß,ð*Öãuo>Ãåå~aZväý ßCöÜB+öå*~Zü£Öýuðª_vaoOüüZÃ> vBor,rãå¢ãýßüå|rÄuCªÜ*£zÄ £ðüßߢ:_b>hÃœv|h*ZÃœ|:AvªÜUbªî_î/ãv¢üCîzbu~~v/ðßbaªa+|Ãœ ªhéöÜýäöã.*ür*+ÄB ÃCßÃüz:>:îZÃöäbîÃb+rßäbÃÃ>ärv/uoOaäAåöý<@*>ã+Ã.Ch/£©ÃC@Ã¥ACaðýAaÃœbå©:*U ýBÖbßß|.b>ýýÜö>bvC>ouuäâ+ãÃa~Cý<ã©Bé¢@Üßãza>îîouªCÃ¥Cßßåßöh+hz~zz£îÜÃöz*bZoîh Bߣ/î:_ývUbzýA@_/¢z*ubuÄrª:¢ðßrhÖåÜîãÄ,hÃœ +©Ã/üZß@ä_ªÜCA~öUzýîb:bö_CvªÃÃUo|îÃ|aÖ£Oß.ö©_üÜÖ î:BhÃ¥vî¢ÖåãaußhZ/ur Að>©ßB£@+,~*@ZßvoAãÜöUäßo~~ß+CÖ|.Zýü/ ܪ,U*Z<>ðAäh._|_b©¢ä£>bÃaZãßBaßZÃÃîb,Äî~ £©|öuÄraÃ¥uz*|©Z_Ãub:Ã.ðu|.Ä¢>o+Ãœb@aã>ÖÜ~¢ÜuÃœ>ðoaª@Ã<ßC¢UÖ +ßý|>Äã@zb©/Aö:>ßîrhÄ¢vÄAý:îüðåÖbo+ü~bZ>öü¢B O<ÖA zÃAª¢Ã_Z_>vö|,oî*ä~<îÖ¢ÃrÃao+ã>Ä䢪oÃ<_¢.Z>Ãœuý.Uö.ߢo_.|C*.Ã¥Ã,ðÃý|böÜaOÃ¥züb¢Uã:r ÃœuöAÃ¥_ rbb,b©åa+ßÜ©ð<:öuðzr:ßzvÃ¥u_öOü©CaÃÃÃößã£bbU/bßZäzZÃC~ Ã¥.ÖÜ>ãCðã.h©£OÖÃý.b©h,|äubðãîU_@ÃäzýOZa@huãz+oCB~ZzAðr<äå_/î.Zöo~oüz/ÖßhbhýOÄ|ãðß~bªö@ª<,:C¢äBBãv©ÄuOß©ã>OüÜrZhzÄ>bãU*ub|<ðü£ovüAoðAä¢ÃAîrBÖ|ßvBzßð*avªî/¢©ÃäÄr îýÖb+B/BÃœbðAU:@Öuã£ãUîöÜ_aªuöAoraÖä|brÄu*ß~ü*|£üCð+>rhÃåÄa<ªöÃaC/<. ý/ü*¢CA|hh£©ä_BÃ*ÄoÃãb¢|o+oU:î¢å©©A__aÃ¥BBOÖ|+ßÖ.~zÜÄ Ä<ðß.OUößBu@ÖaO>|o ãb~©zbO*¢Ö£ohî|öOCÃCã¢hZB@bªß|îAo/Ã¥vhᦙuߢOoöBªrba,ßb>rðZ~Ãœa~_bä¢ýÃAzß+>ýåaaöhh//,Ö_@rBö©*ãUããZ_ _ö.|îu£åão@î¢*ö:<+©ßAýCb©röU@uªðÖà _uzÃÃvªÄbövî~zzObÃœU.£>o+©_Z,,ÖAÄÃAhªO<Ãœu.vbB,z+ðuA@h@zÃbböahüuzzð|o_OÃaªaaa,/bü+O+o+UÃ¥O.*b_u:£vOöÖoãhßÃ@Aîh@zZªýý£ö~böbb+ÖrBoÃœo*Ãß:Ãîhu+¢£ Ö©Bb:_UßÄ©hý©C<+¢£*UÃÜÜ<ãðBä.|ü.ªÃZãh¢¢_+£bÃ:aÜ£äÖýZBªýåªr_/,+hÄÄ+öãÜÄvboîU_©*bß<ãZ@ ªaUª~Z¢ðü@@rÃœ<,åß|:åð.rîßB>.åüO>v¢Üü¢ ðü.UðÄa:~~.ªAÃb:.rß ß<ßuAa*AöoÄ/U<¢>:Ã<<î @îaZð::ßu|oZ@:OOrð+ý@/åü*_B|ýÄà /<üåuÖbÃ¥~CðhZüüOzZ<_BîßbAAð,*åã>ãßäA>zö:ä<.,>ÃÃ,|ðvÃuOu_©åärß©_ÃZ/Z:BðÃý A©¢<.~Z @ß/¢hv£ª *ª:Ö¢röÃBb/UZ£Uv+r@ªbvz|äZãCboo£äÜ|b_|,<©Öz@ãbUOO*ÖbhývBzåå *ߣöîß,@boÄßßAðzöÜÃßb©ðÄ,B>ä><Ü©ÃbCãB+¢AÃÃBA£üZBbüh@hBZÃîö_ßZ_aª,bCÃðbr~oÃB |Ã¥b/ß,ß@ U@~ß.öoãßÖoÄ>£~ã|OýÜ|+:aöhaäBaÃ¥ÃhAÃ*ööªbU<ªUußÖÖåb~ãvözÃßä.Uu>bz¢©äÃßa>b*bÖ+>Ö©ðÃ@v:öBuOÃý|B@+ãÃ.z¢_üaðä|@@ÃU¢*_:©aã/._ýUaöOhCöÄ~,Ã¥'), (N'AaßÃ_îaãh>ßöBBzýB.hý>üoýbÃ¥b_ßCãÃîð.©uBî@@hB@ouba£Ã<üÃ:Bbãß©£ãBð~ã+ã Z<Ä_oh@©î/ /+£*rÃ¥uUÃ¥+.|*ÜÃ,,<>ª@ßß+ühU>bÃ_avÃ¥,h/~+üo>Öüåð*Ãœ<ÃCO,ßߢ_Z+b¢ÄrOß.Z<,_ößC@:AAäb £<*b@~aAÄObð_a£hBb©:ªavZü@a>ÄBÜ¢ð:uîÄ~ãÃrAbý.BðÃhãOUã~ârbB'), (null), (' ª./aBÃœÃ/>uðv~öZåå~z+åî@Ãœ*Ã~Ä£<ßhÃÃ:|üBßî,,©AîzhÃðOu.vh/Ã+OAßa,ß|Ã¥>ÄîÜÜ.ý|v|ß~Z:höbO+*/öB_£hB£bzö|ã:üßð|~Bîã+|Zî£ÄîBu©bðOÃüî¢*ZÄ.>Ãüßã~uðÜ©.boðZßã,Ãöbv@ðZuäA'), (N'r/äå bðb Ã¥zÃ¥+@B~bªß@îü:..:Ã¥:/ÄOý_är£ZAüÃð .bÃœ,h.O£ß.CÄîuý:<äO<¢ªÃ >z:ZA£Bª||+¢a _ ß:<_|oäÖýoöÃ,@/oýãâ bAb~ãUãh:ý~BÜðîZu<ö:ð¢£@ãz©.@ð¢ÖîýÖ/,üÄða¢@o+ªªª@äÜ*Ãœo,/+|Ã@|/ª_+ßOÃœO<îvÖA:zBß<_ö+Bß/OÃ¥.bA|©äZBêßå©ßã©UA>üO.Ã+Ã¥AbªÄÃý£_£îÖ_üßîOböéuÄ,Ö+Z<Ö.ö/ouüb|>ro_uª.Oßî¢ýZ,arªäöüUÃoã vßbCu~¢Uh*b/*î,ßBß~©Ä©. äý:bÃœBðÄöäOßrCÄäAvhAüÜvö|Ohî~O¢~,Övuh|:A/ <>Ä~~ýCÄ¢:_+*bÄ><ªüaCÃœuª./ä<Ã:ßBª¢ZÃœUü~hßå_Oba,O@¢Bãb.rÃvCOhh¢üo£:ÖÃßðv@AßuUub|,b©üC+üAr.~@Cß/aOî,_ªv©,~*~ßUrüZu©Ü/aBO_ðî äß<~ð.ª+Uö£z@O>BbªOýO£+.AßrÄbB|b¢ ©b~@©v£îv ~*vv@ýhöÖðhr/b_CrîZo+~©O>/>_ðð*Z,AãÃ|ðrbüªzÄO<¢@ü|bÖªCüý©bÖb>ªAß~ãß.uä_ZÃuOÖZüýAßý|*ä~ÃZbäaA©üýo_ +äbC~¢ßOßã£+~Ã:*b_Z*äoZ./ãb ð>hOCåðUü©:ÖBaäå.+©ß~ î/äOUzÃ+ ð¢îo©ª|ZÖ£Äao zb|b,*z©bÖUbörr+©C ýaßß<£,oðãCãOÜÜ£aßäBaaU_oðª£*B+ýª©Oz@Ub/ar,ßüðbvo|r~ßa üÖU£|AÃßã~_©|ü¢Z.©~ßhîßbbßbUuza Oäãh*_©/Öv_ª/©öÄ£Ãö£OhZ@a<ß|ðªýð>r<Ãh>öäýhbÃ¥+uª,ã+~<+*hb~ häÃB>ov¢BurU~oßb©bb,oÜä,Ä|a@_ob.Bß+BCî£îªÃC,Oªß/ÃZÃBýrO*ý*+öoÖböoßhÖßÄöÖ.oß.©hvO~ðßßAÃCv_©: £ÃÜO,OzA_v¢ªªbb¢ª¢.uÃo+hÃußCB@ßh~hoO@üãåZß*/Ã¥uü£>£ðvu£©äå@_zÃ*ÜðöäÖbÃ+aý@Ã¥UBZðªh>Ä*o@ª©üubUC,/£b~BÖýUßÖuäð+CaÃ¥zßBýBOrß©~/_C_>Öß/Ãîa vöö¢ªC_î>@ÃO©î ß*ßäZzÖäÄü@äa>b+Båý_hA<|bZÃœBðäöå~.ýböAÃa>BU£BU_..h~Z©+rÜåußý_©öãA£Z~>ý/boübAÜß<ßÖ+©ÜZ£ruuurÄuÃ<ßo.¢:üöî/Ä@hÄ oýbÖýUoýo|+/b+ZÜÄã.<Ã¥_Zö>_üuövªãýbOb+_._ðãÖöîz, ÖhÃÖ¢å@/:|+Ãüv~_OÄü_*oåîö_bß*AOh£århîb+o£¢îübßü~o.Ã~.ßý~UÜßbãÃB.+ubbb:¢B*ßåÃvîäC|<£öz~ÄãîªîhvZ ð_<ªãÃî>ÄÜ£U¢îv ðÃ@+bhCÃœ>Uo:|>ßb:üOÃœzA+£üöo£*Bö£Z|u~Üüã,+ß >ÃboZßroöb_aîzä.hý:/,Z@OýZUZ>Cß.>ÃäððÜäãhöa~Ã| vî|Ã,î+ðuuäoa|ð£ßvh>r/ö>*C¢z:Zð//üý+ö..@hÖ£Ãb¢ävuZOzªbCßöb*vvb<ðZ.Ãb~_Ã,äª*/ßv/Ãv+BOB¢ã+ão/Ã¥bhvBZÃ,¢åß©©~ß:aÃÃAâªýåüzß©~*u.CßzÄ*vhbäßã:Ã.~zoã©ohÃv:h+CýîÃA@~U|Ãœ<Ö©/_üßßÖ@O|Ä@@Ö©bZ+|ä|üooohÃœ Ã¥:ãßß,oU¢oð/Ä¢O|v,rZã_öOu¢rÃZ+ß©b/£ÃÄîÃC~//C:CoöÜ~åÜð><*>£~rr<üU+U,vü:ã*ÃBÃ.BãÃCAÖ|üzUb >îC:OÖrÄåü Ã@BßßbU©ð<Ãö|ZÖ >ãz£rßArO~üîb_,~v~öüöðÖîb~häÜü_o/.Ää~ hö>å£uB*~+bh©ý*Ãœ,|B,~¢©O/uAß:£ß@aö/aãbru>|a<*Ãäuªãî+ð©<Ã*bzåß <¢¢oÖ.ObA|ÄOZ+<<:öß@r+A*uð,©oÖÖz/Ob,äOð:b_ß ©Ö+Buä¢+BvhC~vößa@ðvß.ÃBZB¢va <©|ÃÃ:_z/zh,robüß~uC:@ª__Uavßhu**Öß:_Ã¥~zbÃœA:+~.îaÖãÖ:ý.Cb.u>ãr :åã._ÃhAýrÖ_*,Ãu:Ã¥+aZbC>b~A+Abý<ä:||@OÃ¥OäÄä_Ã/bÃzrܪ:OA.Ãœ *öÃÜýöuZÃîßoÃZarh|r|ߢ@zbãv,a©.oßOßð>BÃî ,ÖOîh>>ªUb:ur@Ã/+ÄoÃãva<©+@:bÄAãZu.ä ,î ÖÜÜ¢üðª©b>C,~u>hÖÄuÜýA__a¢öýCÃ¥Büßßðb>+@ÖÜã,|ª£vbÄZC¢Oh ÄUu¢*ýª_r,hªÖZ:¢+OÖv£Ã/ÃCObZZvýB*Ã/ð övB£*¢AÄäã<Ãœ< ãCýOaaC_Zo@ýßöhý+_/ðu,üðh+oãbbvÃ_'), (0xA82F7923662A496625B3CD58E906DD15019C700D5F48E2AD60858A9437AC118D0E99EFA02BAC0C52A44EB1940E8BEAAC3617AB238573055F4CCBC2E19FB52F78A13F494F173CE9548F1E6911974E9FD59ADE5D1F01EE089B948F545FE92BB2EF1E38F3CE419B95FA2D56936609F4C8FE2CED46C0571077B237AEBB87E8896B646B7AF35E5BD193FF4963F1AA5BA191A0C75533FBE5F2970EC1409693E00D11A4EB2EFA8F0069A35A5A4677F41ECC56961D1BBF92566F7F79E3E59D1A3A001F3B514DBF2DA6019F5DB2D8A19E7AA3EFF4EA0075C44E7F4D7CAE80AC1BCC882059273CA2D00D29EF1B7C61E07DCDE1FF3FF5A8303A8A5AEDD200437E2655839129B848763E001FE7C0105A48EC9ECFAECD816C262358E6CECC4ED0D0CAABC9C5F9D0B7C5846AC03ED5C17029301200333094B0A4E85C6ED0D179), (0x304F1D1447944F1CE70A2A62C02D5162E8BC9EBA4D9CA036FA24DC9C61E6F40BC0D00E85A45BE19CC2E44C26694EE3BB0A0CE814DBEFA194AFE71922B7B2BA01151FA2F01FCBBE8DDA01F8694F7ACCAC41219155FDDF2FD12F79D6BC41BFE50F2A4B104AACF39B3F4E5B39D9F63845351A6DE09520650336EFD0C1A6F4014B1B1CE83F036A81004E865207A2A555DAF634A1A1D4DE4FEEC448D95BDB32F54A4C0F1EBD0DF941CB996C920FCE5E609199F6CA71535F773CCCFA7ABB9026251B9008BA928698CCFDF2D608674B402066E748C1E56783F7ED98E1F0137F853A7347777EC6A4CE0A0029CD7E7C560FF18CD913D448643FB30D10CCFAA5A8B87D6D9C9520D4C15AC2193DC0BC9A047B9688F063396BB0F10E07C371B5D7D36558704F11DFC1EF1CCB7F50BB0AA3831908953572B4457F12BCAA8618104FA4EA45D8684B4AF39BD498D397BA1AF4E76A84AA6920A260B013F13D54353BD70B7BDA6676313B37CE15FA60D9E0ADC5F7C7C31B9466E68448E428555A0C9E6599C1C71CDFB47EB52F4CDB53254187CF652C468C722042A595551D9109E6DDC17694C7181890E542490DEB488A925E075D58EF2EC611F3797E22878997EDAB496F19DD91796EB6D44603436434FA1A02F61534B0F6AEFB64A14E99F6095BAA5B61A2D971B5CD8DEEA21AE7C2CE8E448407849282B9FB52C01E78F02BD5C0CBEA59E7039221), (0x2987450EDBC73896120915EE84C828A2664F18523DDD6219E14FFC69E68BB2625E3869FA73EC76F9E5E1DD21BFD1462230449C4208560F4C252C2C8CCACFAF8757B38F4C5F2E2F7AD91F6D5BFF40591009DA39A1EE705908291CD447BFEA2E163255CA0C41F9C201152269E8E9B34CE4D21C82EF950D99E75987234259E7BAEEF15629A9764DCE1018378CCC07701F75CFEF75A2683F8024BCE2B3BAD57FA72D677AF79289A26E854E72D75D81CCE0E868AD736A721886B1D505ED939A143A98905E648C788CEC2C81EF54F56723A2F002CA52280C3DBA4FF446BC84B5DAEB3A373FCD23675370DBC146E883C3904AB262FD91CFC2128B53A3159832D06777A6041ABE28557F88AE5A7666C654378B63FB0922B8491B7825B37A7F51BB3D0B59CF417EA9D2215DE274E2754BABC5FE6B8A3436C645BE5DE9A29874DBFF36F31C6B0CF712B9E190D9AC3F4366A52C79EE7B14C78606451410E4950739AD81E23DEF59E09ECEECB1A8A35D19067AF643751E8660EB6F6C1525F8E62E24DA562C2B5C05774C4CDA208F621FE2A92B0E95ED51911B2621F7CE8343BAA6E7BE8DCE4C30EEA9757FF7294366D18950896CF9E95140D2483B060A6536F408913438D1D45096783D64206E5A68D7BF506D7EF9D7C0BD957DBB85112AE4443E8AEE980F2DFFB5FFF3F3BC8431D177DF6446B9F7B8FA31D077A35319CB844E5920E1E46CD0C89150B87F06E3043864AB43A5ACE32A4C858FBCC7988AAC9B336EA462644FED0B0F9CB4693F38F44DCB3E3EA7D525D76B2FD45C54AF082F06A41C4B983FA2D415BE3796102EC00C4C9B6FFB594C04C60E9639328FF3995C066CADC523ED5C0E296A29E99E8FC73C6EC70FB8400CD6BA9F563C01056F442124DB8FA480FBE95F3F60D2EE221B287ECFFDC4C7E4E01BF995F225CCB05A08B92607C4C2FF22BB73DEAF79DF3AE798842EBD3208AB7C3D44BF960E8DD51CAEE45719C81A57657FAC4151E934663BBFAE5AA19EF227000EA9CA7F0269132D9DC1019488201F7E2CC83E85C65A9209DD84D66033337EBCBD570B1F50D763159814B32833D1B39E8EDC74D5B3A139B316C1A17E92B3FA694244D73015002E556528EDB2A669D50BD038D157BEA8081B1D57088E35E483E51A49E5EEFA83898EAD1F708BB4870DACEB95AD5AE1A2AB9A3CBB12BDF79F1F80A507985D84E7114DAE42A99F377C67964A5BA39F372903779E4BB13E70CB960EFFF0E6ACEEB028048460AB9FF80B62BF547C739CFB7F497C0420BE3835D2DCE2AB9B9F4796BBA79A329F1BD67D647F92E8F1EAF458FA127FA66AA7CEF1EFCEB284C9F35D6C1B2999D4D9695C6473FEA0A12C5043E7E88AB1881FA02C13D9A843D06951B3702125CCC8511F7E91B61B336B062CC59F8BCA9C3E42D54D7AFD85FB30268BFB214A308006837B95C80B1FD1046DC10CACE3A4459EB5752E4CD851CBCC244E6B2A1F1120D6ACBF1B1034D3322203490D3B794E4D81465D6CD502332D32AFC9A4BDB4A7E45BA035FF23893569E1420B488F438F53D500E9E4C2A54AD47892E9606B2F756E5C64B29B434F29F810F38A92F6EA9DEE2076CEBCCAC221B556608691A0D5FEB2CD9CEC2A91F40F86D7F0D3CF1BB7DE8DF4FA3FF460B8A39943FD45E2C897583BF5D8C559FE725C2C6748E5DAEE529A9E82F99DA595095114F953E793AF2CBD3F9798DA43F2848F819E138D17D2C9AAF063A65FCFFAB3A6EB86B060AB8BC87D3A8BA642567857ACFE691B07827C39422FA8F63008CCEE44E4F2EEBC4123E4F6D596538C2C8753780CFA6165DEAC236F4D6E30029498746D9C615E64899A6ADA852532EC28AC15A8547E240D6B886637CE7F6FD3F2E1613C21E6F0CB28EEEF719086E0B87A3746A05988AE1673670113FA2696092B97E8A3C3F5CA42BC4A7F658EB37DE5A8ADBD9639CF796A334BC8B9E4DCD00258E546F99E3CF5856C03E30E084887C0EA1C6B4D69FFD05C1D7D70782C115EE0797D0DA86C83466CB8372936EB6A62EBC308CFC87183995815EADB20CC7C585BA503958B3BDF5366D5FE9431D69A70B21B85B52442966EF6E4B49282A8269F3CDFCE90E8D5D7B0E4B468F272EE67827B79290547C734190F959FA6864CD0BEAF5F5852070988DC44D4D16FD9A3FB077C3217097F205875AAB4815336302998E3AA421396157A72F14CC172F6C5406B9998295335C73E8E06E3A7528834A613AB388B2E60E87067B7A417325FE67EE57415BA9D06D5631C6BB40CB36D27EABCA5ADC7BD39110BB027C29C90B00B2E2064C2DE727A080DD5D56FC2ACDBBDFA8FBA5A8DB21EC1AB620A09764439D26C5F85EC4EAA4977419CA0F1E7CA4F5ED469C80CD5557E7C01A2167B687192C99B03036226EF6F4F454318F0122CDAE113AB340C7B2CFD16E109EAAB94CE0ED009D656E4C6EC37E5FA78C6913C8D69D4C83567BC3C864D6E05EC811C04C3BB773448E73BD6F61A27734F1102656BDA53A016E35E6652938389E7DEDA6B1AE037BD4F5DF3A62DFDD21A4048ED744A099A112D7CEEE05C10E2B463B1EF1740BB586EDA45160EE6AD721810442609A50F3FDE44C83E9EF156613F7A3F437B0EBADA84EF7F9A05F28B2B7F0AD6CF18EAD90E547211D3777DBA7D83E3D694A76AF6095669A11926743AEBB89DBE931B874955A030EE09FDE76306350116211CF7831513CC79AE48C0E7DF38251BD9BF2661FC9A81F3777BED0C6F069AE3245E18CFC01AA8804E0D9A0DE0480FD1D7CB89470EA01A869A040C9926C00AA8ADDCC2811F565BBF16A613EE0074132E6B1C34A37D53D584449134BB0D0F5A8E03F15F03858EB18170C930688D2B8626F1DE2E098B662B59073E3C8D229FB2074C84EB0E140FA8DD6AB332B3226DF7180B0ECA2FE150029CC606FC4751235FD117291B08407711E135509ED83377369A46248213D48226FC814E480E13618B4754619CF951EFD893FCE8FA90B12A684ECF61002DA14BFC94031F86F12E03CDD3C45784D2DB3D48574BEE17EC88954A57E6FA3EB1615EA6086508F63168E765F81B26CB59A596729119A8E2B233100B6DD42E0B34C41B7266B17B6CD34716EF64891ED062CAF1B14F87AD98B87CF3D555FC885D39DB3034FFB465A82A299F4A02B97E29153FA9A3E37DBBAC1782BAEABDA617D6BEB9B58858EAD1AD65488726E76296FEFECAC01553E57ABC20831D7CF97AEA8411C98B4803F5D02A6EFB3D9AF595C5B4ECBBECF3E60282D93FF967D4CC54B4EA5E03141ED74DFA08F995A758A7DFC68ABE68903D8EF79D0F46B1090A8EFC5D1947533CF280A7DC9EC1E4F9515A2A315F33DD1564C4765B676505D72544F07AFD378E1154A3D409178CF17CAAFD4CB41C80A9D7B1E6F954D0F7D48C7BCFB65AD169FC19CC18DDBC5FD3FED7D2F9B16A1850BBA59A18C9163D39405CCE478E47D597AB400032E803A2ED78DDE72181D7466A732B1410BFB8A0E6DC92D881ED1744B6023B4E706AE667B703ACA0EB2E1BB7691664D36333C4D7F39F1A56562A21006099301F4688D5008DC35C0D1317B5B7C0DA6E6B8844E1833D635BD04F8F108CE2AB4051FDFC70E04064459FD6B6C4DBEA63957BBCB6781CB7ADE1E32D04B0FEB2CF2B67D763B9C4698E2A24FE41AD879E7FE6ECF994D02C332499501A8DB33CB347EC068B5D0486AAD1122D8B531D76FF5A44AE1DC3041EFFFF33B3C968A9DCDBED70B755A6FB417B60422882A2A0DF072350C048041EEF42CE078B2951BC412735529DE36521585E0332BD81DB9B5C5F53ACA617E993D6CF8074869F6F172AA400014C5002FCA102F86145D1616E6632AA2CD6A5162A3DA27CCE62F19AB9EEEB081880DA4E0C5D570AA31F874E046D120D53F44241848DD6C3AAD33399B0683F7259C948EE8BE39ECF7E9A720BB654786150E346C4ACAA848BA917A43829BD5A3AE015F43B2423816F5573C2EA1ACB0C565BD149CC217AC6AF45BD44743F66A5C13F372BA0603C3C2C61D66E38E79970DE0A4EDD57738D19654E44F667DF0D30EFCD00AAE29F6CF51E941C6B4B0C8DC8AB4C6569F0894D4EB11EC6511B46D54D54A67E6BE6EE8D3E9E58BEC35622CD58C07C4A1A79A43F667FB2F8C3D91AD9D7BFCF17A58D22E1BDBF26CA98CA8AF78F516D919FFCBBD3AF6618EB34F5CA65847EE603860B28CB9E9A8D5B52D9A79BF4BA69726C893ADB03FB673E7436ACC7F5C14619E487708428A1F2056E6081D5BF7DF7798C57F8FB440B008BA3E95667EEC66691938DB76D4AE549CA96346CA37A917FF73F323B9DC94BD5D886E5E03E4B8B16A8FAEF4231C5892FA60D2D640F9E5D10126A5E28BB8BC8C748B8DEE664050A7F0B1EC4A88A4E4D31B502948F9BE6C53A29D5CDD3EC635B1D3128FA79E7A3CBA103AE59F1D9B485C31D2C72B8F6392C61F3A3BD8F373692A8C2A7766254D34A1237F28CED8DD36074500AB6C0F0A226F8FB998643E53C6ACC1BB12F323D226E4AE25F8104AD3FD31F42483F2D80D1B71F807E66BB4D062CFB88BFD1DCA42D362D9B6BDE9021224BBCC566009CFD3D4B4AF90FB2BFBBB3FCDB32857BED6EF77B1411119114F326FE5E32AAF5E60590FE4B7387E2957B7771E86F025D9BA65E4ECEEBEB8AEBAB3756D211538C11BD16D5A2873079E714E5999A9FA9A5F0C962B7D45B27FB1905129F3C300F8427EA602A592DBA1476E467B90552F04C02916609AE9CB8B5951ABC9D75903CB6046171AF3E7E4CC30E4D41EFF46EF5C614C69DAACA05D58B32AB953E711D9EE5A7B0B4A4E1400D8345A2FB605AC8C02625F588AFF392ECFE8CE57D93E90E52F1AF5C4843BA51E5D4B81A65270A743169EA6E197B94EFF115C4B517FBC37A9937500AB1FD807C6CD30FB4F6D92CC4F418B413A87BF4D65CBF6A327F0439EA113E802ED7FFC233E96E01456CDFF918E900C1FF46AFD21E427AADF2924EFD689A25A3B759FEEDF456812A3A7AAF697DC552497E433AA3616C62EC5C51CFA09B7099AB463B42BFEB12CCA9C48597A39210302D40047E245F81414AF61190A286E18EC9E004224183935D6C7791DFDCD4BE594C21A25F96F1744BC5FAF7C8D9822922E2F6CEC38EEDEFAAACA712ADCEA2647538B84481E481F8D86CB85D478BCB84E94D6EFCE606FBCB5E32F7B3EFDFC67D22958190213DA83E61FDF656D590A71EE122285F5FA67E6F3CECE54EECCE09F9A53B3AB1093B63ACA5309AE810A4F6CE8AD8D2CCB6671D7C1612533458595192F4FDB19A55F615A6BF7CBA2F0B955F98F617C414FC3C423E1DBE9AF7E72E534BDF07F413F25C7994C32C0D39ACEE7081B3BA3E40953C96B7BA737C965B1EBE91286E4F03A04CA5999E2F50CF2F08912F4E19442DEF12B6A2713D587FE0E239A56E7C113E9E6CE06715A5A265EBC688B1E14C4741DA90A115B7AD9263F325B9BBF6AB61B2F75391E238DC18496F50B6AAB5A69E939AF7CADDDAFB86F0D97D73EFEBE76F4065D5BA8DBB6509FD7858A566F7E8AE4C872620FFE084D8FCCCA008BA69295E88E17645DFEC10D735EECD6582551FF9F1CF2767C5C66F5FE0FDBEC01B5C4E944FF91D8580A2CE60764FEB11131F55A6ADA617EB42C198C1711664E22E4FBBD89F391588389A784E00C6F176DB5E4CC1A71713744562528D605B136A3EEC3127931371D909CD6E122EC8EA7BD022E613CAA23B173B47923CE78827DC870E101495C9E2C8ED72B8D9A800467D78D6BD3D74009F9BB01AEB4C8034F281A5918B1FB8D5E506401E2558E9616E3B0014C410CAE968876E74647BDE9647B8803734177527C5A2F1B7FD56DA47B14EABB04C6B70E1B6BB2904B043716A28AAD76DD7B22D56C6D84F221E12EC11AC27C315CF2D4ADB489E8178ED70768130878E537F6C6FFF2154EA731C4EC3A3CF185789805C9AFA5FFB253931B5695562CDF19784989240B7C3F47A43D6BFFADBDDA9D518ED01D4EC94F3834736CE6BEB94114E5C2B1F368517D1BC6820B6883C2A5E530C933D74CB1CABEFA50EF881F5888EAFC5709DAFBD724F011C446CCCDE6A471CD77A5F58569C8240803090771E50C7E09106C3CB8DAE9699433C5886B0DE113AC6DCA97A28365829EE5D2F8DE1D7E2CC7D8C3BD7A77C8E28E4C5141A44FB8FA11E56B142A64DB75AAD99DD307F08B76B598B0924A33A93494D819662213DE4F2CD8E6E8B26A02630D4E0290D9F5EA9DB0DA9C1B8F16BFDE4C267F424B754386FB5EA62F19A2C45B965D94FC31085AAEFD7BA54787C2B0062908AC9BEAB017880A7B958B4FBB841E1630752181B3AD33CBC054DFCFFBFF389EA00610F63860D6460CF1B572DF6F31F79731575D9E84655B68C01A6B37C80E7C6CFCAFA57317EDCFAEEB74C1F7C0FC6112D838CAA7EB001BA0B58D78567B0E44F33915E2CF8C847F4387AEA30F9363A7C3B9486F8F33D481EC8404BD8A757933DD3FDEBEBB19A19653C977203C5D1C0D51E5A4AD22AEB5BF6483F63B87C6E4DE0E7AD5CFC4A4FCAA07B21BC5BCB4459F67F76BA4C0DC013E8A2F5A2723660E8CD4A911B1875C48ACE8FA957092EFF2B04E56C3906B301D3279A735A55AD58691B38EE1139294181BAECEBBC646809BAA2C99D8CCA26E11A49BEF47D016A3421363F3CD03FEEF1DAA4EA7F1AC8446EBE90B9B78B0FCC9FF456D4C87B35C3804FB7CA85242C387AB4D7C3E8DFA7C751044F35ED47B3A8116AA0477A6B2576A5E06A2F62FDBE4A92573F03B44CE3C04C8E82C32B00D6399C0EB81B84E4BE0F8E611D08747864534605A29607AFF4C586DFFBEBE8624BA50A30925345A3C5AD983074522EDB4BD4292E7D255D4031EC1AF294A4E9D3262C1578FD44E5110EA240F5FDD73BA197AB9426C1B9E52548CAFFA539520F20C4C509483DB5DD07EE1820DAE567425AB1785BE810C2126D47F030334540D7BB931F3038CDF264E1CD8D37A8990A3FE087A4F3C0F7261001B29B014C85AAC2AE416446C5370A8CBE14791B838A6AD43CB050ABA04C16C46D0F2E8531F1175C23CB896634C479A97D1734AC7D0A8C7748C7C59C34FE21622B9FD9B608845ACDFC1DF8B801039F7736A72E891769476282B73D6A2C7B2724A9263B94EAC3A0F9BC67B06012D47544274D658DCF984BC15877345046F0A180F5D30EDAC80A8D730635CCAFB9E74FAD41F842DF169A5511DB7A3B738F50B2CCC6306A3FC69A7C1CBFF2869ACB9B087127860E4EAEC16A5B7EFCFF4ECF19E4B68200E9897C10E7A77B251F2313BA454071CA4B0841631D04C50FC1C99B2E4DA50ED017CBB17FF4179F67D288A24647C3B6BFDC04CEDB751EE2E5C36D4E1D0B4CD7791543A27A8EF2D53369D99194627FC7FD12DC5249D7325AF9E8CCBB87C9815B85B1293004213C30E92F9A729B8D4D8243A5510B2FFA8EA1E3E8A992C1364E6AE87D0BE3384FC3DBD6AB681A3CC0BF6B9A4978E177752C8B23874D1B77A96FB2E030891E816A49F4E275358491746422293DF778BE6CF3725180C0B101A7642C3CB5390C36A0E92FFF84FE0240A7F9AF222AF139B1F6F4733D17CC01AA98F23A110948DB3A58EC8854C8783A6DF032A987118FD7B52A7A45C1C5CF1FD3E8856791C4F0375F1D74CA3E69E5E97EBA054CE4237A99091B84E78E031A7588CCB46C4211A8A900FB49699CC4984C4490C606BF833AB06EEC5D763F09A85C02FF4171B479A66D125C4BE9D910FC448237A2FE3C14B5049204FD56B33169F752ED679D822698CBE959F4633750D65DEF19F30766AA20ED493CDFB07B50BAE0F25496ECA85FC25C9FD714E32052CD412DA0679A3E6190A8CD79534547E84F999E1370E2B9E9B58F5697688E953CCDF76F9D82DBE820A290C3ED1F2F0C7C15B7887B440CE1EA8844EBD743A6F9021390AC5CD6A96673B07E71DF1ECBCA8583DA82B1061AF8C01584153EF011DCFB97C1DA8F82AFA66B5014CAC59B02CBBC796553682447FCF997EB46519427839EA276485DF13A02D3341760F14F322513B958C48BBE74D64FC5E0F7976955D629912B2324B96ECA3F627F340DE70AAA64C633983B63F7E02D9FF89810436B6ADE403760230F00594A8D85283E3FC968BA3692D035BD9BC5994AF584C0D6BAFBF61455CDAFAA8655C5D94DADDECFA2EED690DDD9B09B3421A471C6D8197B9974D3893229E9FCB80FB03D0A5C6FEDE7CAA806AE2FF8E04B5BDF34283EE3AE3B4940D8D9549C7805D9D8CD297390D8B1B68AFC3012CD697BF33ED649B5D37A2C0101C01C9614922D2F01D4572AB6D7CB078271B3E77D287CD65DE616C62E4F065EA12771CFBC1AA2F7CF0010F812503C670B423361C64584D84345392D7C6701B2CEF8898E65FB4B67CFBB177D1784C40CA9AFBAEC1CA4985CA3998B77E1757B68FE5E2919C7AE010FF7CC920A2D06C1BF802D83CDAC159629602DEACC70D3865A40AF7FB95AAA44FBADABF450128D2E9DD7CCF6B3F1ADBBE9C700B99AC3359F234537CA7D870764D5E8881F01204617D2FE4CF4A3DDD26892F495F15AF1AA37780BD10ADAC3B116D06721CB698DBAC981E8E79C7640FB4673CF3789F1160AE43E50A7F54F3C3D0F4C36243CBB07FF0439CC6F72090EC1380F8A960B8B2824B95D3C8D19E6C47945ABD84F401BBF8A6BCF334F25A698DA2F8E6FE5C4A5318324116ADF7F7AE51E75522AC731BE801C50002B3B58D8FF12C5615D8A77DEB5A079542A2EB0DF0BF1E915DAD27CD1A8710E5395C479F62B4C12571A1D1D5BA6969D894DDD93526B70F53A5143FD2C96F4B9EB7C2449F1268228DE1C58C5EED38E6E4435F283CBDDBBE724CE3FA4E84EE5C1266431DF824DAB63CAB4B43512AA0666C3D4B9F7A470ED0EC03C2422E7DE409037979F89A2AEEBF7898FB8162886D57AC8D8E11395ED1DB576231E4628897CEC7424FE7A0B7DC414E9C26E15B8D7E53A67AA5A0EFD2CFA497AEA137E90A5CEFF12CBA104875A6F4A14CC2AD37F08FC9F3EE4DF7E2F6EEF482AB4002069458444F36E02EC35E1B20C3A0FFA300127CA71ED7440ABC54FD0A4DC58D9D35A4EE1CE47E6DF100510695D32D2441F74BE4602EA8E32F505D97EA49D5D10DD07DFB2EC2E2BE91B48B96CDD0AE378F30BB0301E12D7E9CB1BEBC86E673B72A8008C56532057F148D52ABA302255EA22608B98EC2DF2CB2FF6E6D042637AB40D47C3DD7E8D25D3B3BFE748E71DB8A9C601A60DDCA2857A0DC1265D3987AFE55A76ADE85E786B953BB8E52D45A9E3123D3D0A40BC6CD76BC149CFBD66C7992B0F02ED7070CF4A4D9510D224BC583564DD1320FC7D6F28EE9F412715A8AD2E731EB91E42BB73A26DF2BCAAAC9AB2AE69146BE052A79DAEA0DAFFD12EA835A5E7E15E06023AF2A86A71B209C1C47C53EC93BD003DCDDCCC810B7D68BCA174C4BC16C2CA3CACAC2F21C276E1F493ECDC5EACE49BEA34671A059284F6BC8AECC8FDEE4CAA01B11740E68EDF7A57FAD7ED1EA10910BDD9DA87AFA8C4AA27B57297D6AEE3064642DAAC94A4B45C55ECC30BBA96D81B80DB0A2414C4FB58ED6D18311B47A4A917D1A6DCC65D7B18257E32C2E5B9EF90DC5717FAA3BFF2814782BF278C82400E481AF3E8F0FC552260F2FF96923873347D8754C42FA90557DF2494449E538CA23D237ACBC506A0E002F49AB1C05CEF0F0E8BAA042D7CDE9E149C09CB6711840C655C586EBDA76E76E674C23B0F54978335853513A98775C145DCB728FDD578F06F8D4B63038051671C331EB8B9A38EBF048695E2DC7162DEE69629E1F0457910FBD1CB8208337FB534CDF67669BC07A14EF72477409614FE2A6D7C6C566F76D6BA0DBDE8D80BB6D106E0AD0E7AEC752A8F8893F92101D064BCCD579BB6125EC45720BB5BFF1FC84240527060E806833EF852DDCEDC7DB4B83D582B0BB41B1AF481E9B65A30192A6FBF51B8CF916F7CB64919A3643490E8DA6B021DA7F3BD8E25387CDFFF4F280DDE276D0E8BC4E527CDDB75C19B78B5BFF001DCEF2DFC837C02C3939615907C66210BC43CC7815C1586DB50CB7DFBF2AD82BCEEFE7239DFE2A4F10CC8304E113C5F0FA08FB379F86EA4C76852ABB8FF06D0E61458A27EF3E82CE298D57594E437C9136C6E5B63F909C47F5AABD08D36EBF206F84A3AB99AE01BB863D0E022F90FE23188984C91AA6CEC0B93222447179EACADE36F9C9AFC0F788B52A3FF2828A2864AC99E049D9F605B8B5D2F2677BCD3A0C424333E8A724735781FC03E066CC4E2F09CD97E789A0E0D8313113DCDE901CF7E033B03F564FCD781698B7EDF21541E994C35DAE35527291625BB76610A678F1EF1C00331C0EC8CA001FC0F0F902E61BEF2A481B326EC28DB11ECD0A985767702FC5FEE6151EDD860A93AE158181A86F75AB76F66E6DBF70497281FD31CE31A8B850C123040FF6D05CB210AEB0AD0C3F666D84ECD06101C2067E9C929CD0443C61F56D20B0756B75A4A6A9AC5D00CFAC765296D43944C8475F0F2C856364437C6DD44CCB3FDB7EE0F21F4839C76564F5BEF01C4A497FF32D2D25D1A158D60230632D3E78C3F46C9AD3A5D229FC9E7FF9AA26C673480932EDE11F9E1A09DD881C0D07D6AA26FC21BA83716693ADC9209EB5E807321F9EE869FA5097B4664291061DB62CE4C7C5C2BDF51BEFD6929F4017FF0F6421C6560C7E1F7CBFD6547D5440E06085E7AC3BD6E015593CF3AF11C75B008FB566EE7F3FC7A9BED55B15FC5977C7AEE63209587BB328740C7D1908CEFDA554C5D4C7ED527120CE4DED667BCA18FFC53C003B9551A814023E6A62C2AE90EFD7A5C13684BFDA4C75014B1A8E4CBCB9F38D53DCCEC20FF31DC0B5AEF81E6E1FBD0D9ED608E26B0561B3C694069D95B581B06F355AC42115A5CE18C3FA2B5466932B6D70BDD6B111124E6B1B0B7BFC803AF02D47AF28C4E8EC89303AC9A71B365F6FF0EB301507AB0F5E231C59060A29D19898FA0E1CB77A66749434A676476B3334BB9B8B114015F8723850F5A88FD67F0669311E112842A88674CB70C2F48906C7E9245A7EAEC04873019BD46674BDE4CDC5A01D065D120C78F2F49C84A5357DBF4A3DCF6B7C005798E89B0F9C6E4201B6D6A30D547BF06AC717E17BAA23C3CDCC1E251C36FE7951C548742DB202700AA0F2D5AE0238194349C2F8439A84BD7524DD437E4925CAC85D51481C07D2B8B4A7E6CAB75E15CB9404D1C273F625C7309B0EF8E4CEF1B18B281D40B0E00D4B770A43ABA3B9F6170F01AF79775356C2278A0780F8E9D3E5B6354F9F40C51AA3F7965B69B28A138694E7E9D32F784A27D14B1926E88C429D365DE57E6A66D639F6FB81D107ED0FAD7670EC10FFF0C63DFB17BDF5ABF3CB6B53CE236), (0x52C2E11AFEC23F6792FE43B7BA0779031AD4587B78342A8D08E0330167D39C9AB08D154CDFF4014A24771F7D9CA304343DB2220EDDCED11D9753121E8E3EFFBE62A8062DF12D2325D30E570015ADF165DBFFC4B4B18DBDE2BCF7B48CE2E2BBE578601BF39CD7420F8EFC3BCE77D008EA61AC428F7A4A0CD4EB2470FA799743F0527188B492FEC904BCB425B552EE6BECEFCA2A359F2C6B2D54460877664896F7B84A7C0547535863E33ED3C5245682FCB9840AAE6D0E5025055B604BF6519D731E2EFD077265A49B72C6526159A608FDC40BBDE23EE78AA9FA56FFECF30C6D91A05FA6F6597B8A54DF6E3CA6BBEECC5F526286EA93BB3537A3530C1B65B7A76559C0C1F9FF12A349816902CFAAE4EE0B8AA09A908582FDE42A6F52056E6FEF28C7D74DFB2DD26040BF3D692AB9658CBF650191C51D16DFD6C2DDCE90BF9DDB127ADA08D397F2DEB73F59D14819D32BC4E293A06CDE290AB0F776385003CF81216257B0DE5DB9287223D985C34597BCEFB10AAD2BFD6E3350CF58DB20BA8DB36FD8B0E6C2234C67286B2D4904A4476A60B9489EF9225524F3235F0E05DD07B8952615EA95B0FACC65A385C0CF252FAB88ED7B6671EFB94D838CF39FC33D614B6375B3DE8F5CD5AFBF7C39569C9454CDF3B4861862A146A66CC76708BD5B0827413A5D5972511C2C17CBA6F4B562B1EE3725AB0FB749E8C12E0C71C7F4CCF2647412156237FA5BA297590097FA52F1091679D198AFF86FF7519B2B65E054374AD84280A34D4EB63CCA09785D4850C7DC1B67B17BFB5AB47BA21D109CCFF5C24222B6BEB8D24EBCC8C294CEA68011AF01D34F4978A3BB4F7E8D0400303D1A6DD446353B92910F09CDABE9B9668B0EFA916E0FC880AC499F6667402ACD4D8B8AA827FA5F4BD51C6FC4457CCDBA02E8F27E0A6FC22D51EC27FD95D52B51E43C801F5E103E91AFAEBB51A0043B307CE5637E4DACC3DEC95D573AD262B500F11DE008FCAD5BF2A961CF5BB4708D4DB1F780B071AC043878A15601B904BF4CF8BA5F82233233CF8971D4ECDC682A58D00989DAE1058E4419A88F5A565A38A5A18262F9110A297EC3B12600D8175B1077FD31AF7AE46BF32C1B697BA2D9782F382E4A59053147C6E00A162FDF8D6C014C7EE25929892BBD176FCCF6A0ADDBEA39F6C8A9CD010B46B66BCE70CD3B139EAE682F24F61F06AE038D4295645025322E2CF6E8C5C2344A739CA2BEBABAEFDB5B2D47387EB7F31AEF19A63FBF75E165459B41A1452AD8EB34E5B0597C48F4489E67393609ECB47639DCF8AC1CF48AFDBA3C781E794E9630555B049807999DA7245DA1583BAB5C58E6CB6768322CCF3F5AB39F40D0D5CF50D009E1ADE81B6F9F3F5187BE5232C10FDF1F37ADE62DFE288CC43E53FA5CD64F8E518732C9AF70CA5BC829E0A410ED27F18F60B09D2169A30AB82123DD), ('00000000-0000-0000-0000-000000000000'), ('9999-12-31 23:59:59.997'), (null), (null))"; + break; + + case 18: + $query = "INSERT INTO [$tableName] ([c1_int], [c2_tinyint], [c3_smallint], [c4_bigint], [c5_bit], [c6_float], [c7_real], [c8_decimal], [c9_numeric], [c10_money], [c11_smallmoney], [c12_char], [c13_varchar], [c14_varchar_max], [c15_nchar], [c16_nvarchar], [c17_nvarchar_max], [c18_text], [c19_ntext], [c20_binary], [c21_varbinary], [c22_varbinary_max], [c23_image], [c24_uniqueidentifier], [c25_datetime], [c26_smalldatetime], [c28_xml]) VALUES ((null), (253), (2264), (9223372036854775807), (0), (1), (0), (0.5181), (0.0157), (0.2591), (0.4606), ('Ã¥a*|Ä*©ãZ.ÃüBåÃÄÃüî@CðACBãävÃß vUßßýªüauZ>~B@Ã.C +|b|_£üüU<ä>,C:b<ÄZbÃBÃöÃu¢*ö~..Ãö*vvÄÃoãA+ü ýuÄ¢å ª>hªåäZ~>hýO* vß/ªääÜ£BêOb_oÃvÃœ_ähüÄÜbãÄßðäåzo£boßBÃœa|ü,/ýÃßÖ.ßår¢|_:ArU.éb£öu_ý©Z/'), ('hB@br~BB,©A/ü o>Uýäý|aðÄ©ä,<Üßðaßbv/A ÖbüÃBýÄbUrßOA/ AßCoß, O¢ ªÖA£îbÃ:ðUßAåðöaª¢r£ªÖ<©ÜUhvuö.ä**>|.ð.ßrürC*ý.ãÜobzåßÜaÃ'), ('ð.<ü_/îo_î¢Zöüß/üC,zuu¢+O|a@ýÃ>äÜb<,Ãa£Ã:ßåöoäB*b*ßåZ ¢ÄßCÜý.+Oß.Ö>ä<.Äö:Ää.*©u :©:¢ðª|:/ܪªU©vb¢b@,+uä©£ã.~:u+Cî:@Öî_äßOb.ÄßBÄÜ:ßÜZoßöußßýBrýýu,<Äßo@obrÃrzßoä|h¢h©/Büb>ZöC|ܪObOz +ð¢ð¢Äb/¢£/£ö.ö|äzßz>£Zä|b>.CaUªã_ruarbÄa_:ãäZOhãA Ö,ýßÄ¢Ö*|r©zª,ßß.uÄ|©vBzür/aZÃ¥+|bÃ>uãÄ<ªUã<@ Uä:b<ÜîC<£ÜßÃUaö_:>boýoãÃÃÄCOOÃœv~,£ªåå£ãßßÄßbýåÃÄ,:> AZ:/r r/ÖÜuÃ@rZª,b©ß£v*Z*ÜÃäý,ÃœÃvð_BOO©|:,bA:~£r.u,C+vr ßvUîvãb:ö~vÃœoabvðCöÃbü¢öh,ÄBö© ,|ª*ßoÄbªz__Ã¥zäA,hhOUz>vã£zÜåhü>vväu_©UBrA*,>.âv*zöß>bBb >oäör<*AZ¢:£>ÃÃ¥büuüCÃœ/î©>@ßaÄÜOÃœoroBuUßåAZ~ßßÄ.BBZZß<î£UööU*£u¢bãaßhuÃo¢Ã>C~ývðß/AãZÃœ:Ä_A..+ZBAZ£>üßîZÃ¥,h©BýÜbUÃa/ðª+*Z+zvBßZÃœ*ª:ßð£OBC* >@öoÃœ,Ã¥@Ãœ:ðuOa~>o¢|.>/Að£vâUüb ÜÜärßß, < ,üýbA~ðoa:|öãb>ÄUZß+~/,o+Ã*uuðoAbð|uBÄböªÜßößÄÜZîªUAª~,¢£/_<©U A©A.Cövª_rãÜߪ/+©îb ªÃh/<@ö~©OªZ+:ßZÖz£*¢aÃãÖß~ArbÃ¥|ªîÄ*_~ð~aÃö*ª|.*ßoª*vÄĪýZéðî,ªzAÃ:Ö:ÖO+b*öb*UO,UrA:@zÃ¥rB+UîU£BZ b|äüª+..üO+Ãœ|£b>vÃÄ*hÜÄßU©b>vh.v£ÄZ© /£ã¢A_C@/@ÃO.ýü+öOZãbÃðZîoãÜBCã*+OãAäÃCuªZßh*zäh/åÃ@aßvÄÄ|ÄåÄ . Ã+ßUoö@ubbUÖðßðªZÃ*u.z*|îCzzau@vå¢ý<+<:ö|>ጛC~aýOî+aU A¢rrä@ýå:+ðB©Äääöä.ý. .©î£@vÃ~bývZüäoZª/~¢*_Ãaîzh ü@ªvðÃu_ZuýÃOäzöã,Öýãvü.ÜýäüåÃuh+ª_,ý*v£¢ý,/ä:bÃœ|¢,BzßrÖ ÃZC~bö>ßÄßöbabüäZ©zCb+ĪuOÃå£ß,*_Ãî¢|©~vý+£©hÄ||.uaoå¢Z |>+Ã¥vªoÃ¥.~_vO*z¢BAh©ÄA<@¢C:/ßU<î:~bbzÃa+uÖv_OZ+bî,bä>ªª_AãvhoÄbOC¢ßªZvz,AÖ:üÜð* Ö,@.Oª.ãü@a:/Ã¥u>Ãb/_<ÜÜ£BÃãÃo£ÖC>ð,Ãœr£a>rü¢ÜUãöh_övÃ<ßãüªå >ÜÃà Öîü@>:zAbö @hý,UÃÃru,b¢Ãb.oz @Ä@vza*Ã¥/£B£u¢_< ߪ>BÖB<<ðÄZv/bZýÄ_ußUãýb*zAC|o.buÖ~_ßUÖªAß+zbªý~ߣ@bz£bý¢:Ã:b+îÜZrA©<Ão<ᦚ/:ÃüÃz/zî¢ Ö|êð+>z_£îªaä~ Bb>bZÄå¢@ö<ýh¢býhö/:ýåßÜüoî~ð:b/C rUÄbᛙB©Z+ãovß||î,Üößãå:zo_ª.~©b£oaÃ>u/öü,Ã_©a£Ö*îOb*,+,ãª@:r>UÃÃÜ@CßäbÃößü.o ßZ@ßU@.¢ÄUÜ¢ãåÄüÖ@ð>ävo<îßaäÖ©ð_Oãß, bC<îÃbAð.ð@>b*@Ã¥.@ßÃB>ðÃZä:ÃB|ßhZü..ÄðhzzhbCãà *vðß©ðܪaOܢߢ*ãäB,rCöBO>+>,ö.ßä|_B.oÖhu>*,UözzÃüzua:@r,OÖ Z.,©~+ðbZ@ð©BüoÃÜ_ãUObß.¢rß.A Ãu..äßC©ßäAUaOA£CbZß/ä @huªüb,~>AößÃv©C*~CÃýröb¢,ýBÃhrîãîåZ¢Oh¢.Z@ub* +/öðU C*zOoý~bZä+ßbüß+,bB@*ü||hZuÖ<ßðîª,bhOßýäýÜÄ©ÄZ*ߣÃ<ßã©ð~Ö.Öu,äߣUä*>î>C©bu@|Uåããð,CÃœ Cbð<>,ÃœbÃœAuO>äÖÃh.|Ar@ÜãßÜ+£îU~h>ßZAÄ:oü+Uýöü*ä~A,AC¢Bvü~bð@©äðU/bÃÃ|Ãa©Uª£ü_ãä:ðߢ>u<@,@ /¢_£z> Ã>å©oaz+*äA/z/Ãu:~äU.Aü|ZoUZ,hªZo¢ß*üßÜÜzCäª<örîÃ.Bb/UîÄ_ +ýÜaýrvÃZâ,U£ßBðzo*b*ü*~ýb|äîÃBߣ/Ãœazh©*Ö£@vzo/U* ª_OUaA./aoÄä,ö@|ªuAb¢O>a Ä/bvߢz@|h|¢,.Ö~äC>£åU~ÃÃ_rrvÃ/boîzª*oO_,*ãßüðußZ<Öbý+::ä*_Z.BvåÄ>:>BoUÄðüU_.ÖÖß ,ðÜö+bß:ãÃýªîhZböC<:ÃÄCUACACîbB~Ãüao>ö :©AU.UBAãö::£Z ªÃß_îvAÃ_ߣ.åöCC~aÃœaßÃ:Äýöbro:~:z.+z*öbb/ý<:ÜãuBÄãä/äv@îUB_üOß@BuOC<~ßÜ¢üÄ~ßraöhÄý< ~hªAÃ¥:bv.bîª:,U~ÃÖ@Ã¥bub~b~CÖ>uåßý*ßÜ+.ö<ªv*©:*oÖßBaãÄvvîoa£o,h|a~zÃ+Ã¥<ßýZÃÃðh,CÃ/*ö,ubCÃbîª*ÜÜB:Ä*Bh£ßå*za_a@*ÖÜåîÃAroÃœ_rüZüå/u>ªZußzüB¢<ªBr@BrÃoã:äbbv_||ö©>î:åßA,UCü:ðßB|ªb~ABÃœ|ßbü+:|a©uÖA.C|hu.<ÄüªO+_Aö>©<ý_ãîöB.î/|ãu/ÃÄî,ýý<ão_,ßö¢©. @b*rUuO@O<ÄzýîäÃo:©££ü>r¢ßý/Bý:Ã>Äåß>Ö_O¢_bßOaÜ©_|h|.uÖ.OAüßåäbãðüOðÖoý/b£+Ã¥ArZÃÄ/@uÖÃbvö<¢<ÃœÃZÃœh©brz.BC£Ã_¢ã/¢C¢ ðä£ãAAC,v/_¢Ã UörobA~>Ã¥oåßCÃ@oßÃÄÖüýäZ£abîo£|AAu+îu:b~Ã/ý<üUð,Ã¥B£ãðö*UBð@bö©*uªäÖî*¢ð ¢Ca_a+z.b©AbaÄBBäCßzöA£bBÜåCzOAÃ¥bÄãb+/Ãœ|a+ßýß/|öª ý+aU,Oð£å/@+:©©<ãBbß zÖîüO©äãz©hÄ_*b¢ð*ý<é.br<à Ö|båã|hÖ:.ªÄª+ößäZO@üB*©<Ä, ä~ßuöO~ãObZ.*bÄå|Ã/ZbörU:Z_Z*UOª/rbðª+Ö/ßB£ÜaÖOî+ªÄå Ãœaî|rîÜv¢z~üzB_ý+ªß/*©uãvuªäOü ~@ððBÃ*Ãu©A©ª||Ã>~ßhað/üBßbzüZîb£ýa/,O/UAð|Özý¢vÃ>CZ+ã ©bößzÃbÄðÜöA¢|h zh~BB*ãBoᦔb.Aüh¢ü©_öåäCÖa>ßZãCÖ¢*ªÄa~üß.ö+£Zo|OßÃ*b+~ößão+o|Ua_,r/b/UCAýãCa>uãª: ý_壣ªåÖ£ß_Ã¥+öÜrOCÃ,C~A~Ã¥b/|oBý_|Oð~ |¢ZAýÜrÖO>üÄvzÃ¥a__ãuaC_£ßBb*bª.Aªð:bz @A©ab.©vUÃœC@a¢B+ /b¢uåÃäÃ|BðC ããÃuAß|ýbCý|äZU_~Üöuªaü©C£ ß > Öoîðvßߪzß*,ö£©a,ªoýzýåÃßåaB+:ã|ßu.ü*üÄßO£.U¢aA:¢ðrO>aÃœvoC,ßÃuãbÃßo.vAb£/rh*:ßbß*b<£b+B>rr©åÃÃ_<.ª £_<ý/ðßb:ü:bÃAv~Z_Ö,Ãœ|<__vo|.Ãœ~©/hãZäbbÄuz¢@Öhöã:ovö£r_Bbö:OÖv£©,Ü¢~OýÄu*£ÃAãßZZ*£ ¢U>îo>ÜÃ|<ßbãb¢ÃüÃb᜛Bãߪ a|Oã.¢+>~+öÃä äãÖu.ãýuCz~väÃýh©b|oÖC,£,/<_Azaüu<ÜÜ ¢,Ö ß:ävoÜÃ@/ÄåOÃ|Ö:Cãü+:OßZ¢A,îrßb©ßãü©_+u©ÜA~ªhÃœ_îA uÃœ/,墣|¢C,Ãœz£©r,ä~Bðêz~/~rhã<<åå~vU.ö*aüÖCZaÄöðö,à ö.A~Ä¢vr:ßoö:BBCª©BuÖ,Ou*ãÖöüözß+/ö>,AA©:.ÃÖOAAbbýª.A+Ãî, ª¢ªo örrb h+b:£/Ö ©.bzß©åý îßýÃABb.,bzBÃœ_ýýÃöÃðoÖ~ª,uüvzãöZ ¢z,b¢BvýAv+:Uîåb BÄObOhr+zßhßC|CaÖou~öbä/ðC>roh BuýÃuBZ/or© zhOîÃv/<ã<+bäÖhb£ýuo:A~hßîð<Äb,vÃ_zÃrßöÄ£~/ÖªÃ**h,@u/oãBªÜå+@aA~bCzz/,ããA@>äªã_h_~ z|oß|Ärh/ð~O£|ä©<+AîÃ_©Oð£ü>ÃœuÖßö©ÄaðZêUv,ð: äzÃObÖ@Ã~ÜîýîðÖÄ+uoÖUüããÖr£/©å_£rUÃœvðBªÜvUÖî|ÖoÄoß_/ã+ß/䪩|u¢Ä*/ÃÖ.z.ã<@* ý Ca./+C© Cßã/*,z.b|£@.<äaÖ,Ãýbî>AßCÃ~UCã@AazåðýüA@b<ßÃ:î£o.Ãü+©vuZߢU£ÃOöÄC>,oüBÃœ/Ä*>h|aUªãä,ß @ßZ_håðÃå üAßA>:ýoß* zA|o_î,o|ãr:Oü@uª*,Böu*ß:ÖüÖhãê:arßÄ+~ý__z>Ãœ~¢büU+ß.U+B©ÖÃßð£aÄhªýOÃœÃ>uÖ,|.îãAÃ¥CîÜî:Ã¥rr¢BhüÃßbî@ª+O~:ZUÃobaÃürßÄßÃAäCUU,ß_©ª@_ö*£åZ<äZ£ª_Ozßr>£îzväBAb.+CÜßð¢£r¢C£bbî*ä_A.zöð:rZåÜZv©ä ª<ð*b<ÃýîüÃÃ_:~ýö. bªÃüÃh_AÃ.uAüýö¢ZÃœo >rîðÃÃbabª<ª|ª@ Zbªzãð>*/ß ß,Uba|_AªÜýa:rÖß|o/ÄÃåO¢UZUbî+Orªð~+~ãCü+Ä<îZ/äåC>ÃýýB:ü㢩|a/Cuªß,_ª,uÃA<*ý.Z ß.+ö.©rr@<ª@öo_öð~UZ>b vÃZüö@Ã<|_zäh£<Ä_.ªåbýäv|<@.,OaßÖBBrCÄU©Üýbü£z.Z/åÃäåovväa.:ýzB,_ßr£:ü_¢@*Äo.ðC Öb¢©hArã Ä.AA@öb©v@+vö~üªr~Ö*ü @ã_.ß,|:ª+zhvC~>ãÜBãªöBO©©oUh~öv._©ÜrövZrð/îÜã>åÜZåÜ h_Ãß|ð+Z,:CAb:bo.ß~ÃÖ£ªbr,ãoZ:äÃOðvýüü£aîýß:zäÄ+/Ä+>zb~>ö¢¢oBraöª.ähObr:o|ãÖßhÖ*Ã:Ã|b*,C*ÖA* <ðÃýäãîý~r*@î*Ãuã©ßäZ<¢:/äUAÃÃœ.AãC©£hÜüZã*BU,boa£î@Bu>baZU_a~Ã¥vßÜ Ãß©BbbÄ@að++b,ÃU+ßv ß*b©*Ã¥UüÄüBz/_/@ ÃaÃOßÖßAãbîaA îßýßüBäðA/ÃB£*<©ÖA_A¢ ߣ£¢å/Z~aoBý:Ã/Ö<.<ßýZ:ÃB<|Ozä:aÃ|ý*o r/£//|ý©åÜua|C_ß*@Oî@.äBvhÄBZîÃb~huAo_äîÃ/~ßöZz :Ã¥r£ß©vObãbhüß+¢.Ãrî /<¢+_bãbªÃßäî.öU,ßîbÃö>,r>üuob|~Czß_ÜßüðuöéÃÃÃCbB|@~Üü+ãýî_ÃC @ýAZÃ¥ A>o>Ö|+£¢ä£Ö/ý+uzr*Ãœ+ª_ðZ壪ܩCîÖå~hªAߣCÃuhUÃœZhüzÃãöCö.üUuåðÜåöÃÖý_.U¢v+ã£,,©>~@£:üZö¢öoO+ßöÄ*ãv,>ÜÖÄÄÃ/:vÃ¥|,ý:ªu£/¢CröC::*Ü©B,ãbåý,<ßð,££av:@ðhä~oÖ/ÃœCCh_Avü¢£ßð*|:BözA|b@rÜ¢<.zß>o>hhbb/ð¢ýüAzßr@.£A©A~AAÃœbv*:ãÖ|Ã¥+öÜÜhB,|+aä*ö,|ð:b+îªB~ UoUvÄhB,|¢ðã/Ãv_¢B£|O©ßÃÃ/aÃœ+©vv*/_ýãhäUî:ß <Ä>Äßßv@/ao| ||ZC aî*£>ýOZÄ>U.£Äå>uýöZý|,Öß Zý£Z~~C~/åüßu>_@CÃœvA*/©ã*~ ß :@ªßoÄO¢.î©ZbZa@.Ö/ÖýO u,öbuüOÃ<äbo@hvÃZzhvü@Ouz>ÄbÃœ/*hð:ßÃå>>ßà rã~ îub |ßÜß*~£z*¢ýa©av Äßü::ð¢ÃÃœ_~+o ÃC.Ä>Äzãý,*A/¢ÜÄ|BÃÄßBUªä¢rbaßývoaöåªö>|Aäß~C/>ýöbý>Ã:_~äßäå@vãO,bÃ¥.ÃîBª~C©ðZ©|Ã<*aßB¢bÖA¢rA_BZbý+î|ܪzr /ÖzoÃ¥+î@Oð*îZ@öbðå£:/Ã¥Aðbü/~ýðäAß<£åÖ~oUZ@+oöhÃäö>äãÃÃ¥_Ã,Cðö @vbzbßäb Ã,oð@äüîv|¢>bh+B~Bh*Brð.Ãœ ã+|Ö @CC@¢bZöv|öZýîhÄb©UðrÃ>o+b¢BB+Zßöéßß:~ãa~öhðð>¢ªÖÄ ßCã¢üo~:räîvh zU ðªb|ZOC_A:CC:<ª|£bAo¢.UäÄßåaÖ~/OUb>|Ãœ,vb¢Ã,ãÃ'), (N'ðZoühÃ~äªð¢,åªÃÃð@>*Aª+|ÄäZ*Aä¢Ä|_a.*:b_:¢öäÜårAýÄîo@üüzðªvZ.UãÃzîß ~ *::öî,£@Üß©v*zü:rª~Ä<ÃrÃœhußu|Ã¥bä/£+/Ä|b|£.ß/ªhÃ¥@ÜãÃuÃåãªv̧̻/öîÖßßÄö@Ö£@AbbðÜoý v/ÄräC|ßÖOaÖ+ür:ð©ß O~UBAÃÄßÜÃ<@ß**ýUÃî©UîO*ÃîobäªaB*©oÃrªoO,ÖAbÃ<ðAªruuÃœhbv,î+h_£üo©+Ohr£ß¢_ÃZ>Ã¥B£Uüh:£,Ãœ uªåZZUa£ÖÜä,zzßßü.ª©bã|,ZvCO.rzÜîbü_z+@+_b_ÄaÄ öOz>UÃœCv+A>ýAhãu_v*U@~îUhüzä+~ðOýBÄbýßÜ~@ß+~ßObÃö_@OÃ_©Au*Ößa©©îau,bUaÃ~,oÜ£åvÜîUCßîZZßßýöoðBîoOC~~ªÜa:ðßðß~Ãœahü~ä|îåܪÃ.ªbzäß>£:ZhÖvOzãüðv>ßbðO£ß>üðð|rü**ß,@Ãœaãår/><£öuCb.|<ß*h©A bbüßüu:<Äößb_bÄî+BUboo_ä.o£>_aÃÄ>:öÜî,B,ß~üðÄUb~bCðýý¢üAüðv|.zCãA£Z@ZbZßý©©bv@Au.Ãœ.ãåý.:öOüU_ý>:uvêßbÃœb£OýözüÄ.u ý@ÄîÜAUß|BbAvaOrãýã/.*a*rÃý:oý<|arýüÖ >£*ý@©ýªîýÜBhÃ~ጜ@+ÃbAß©|¢@Abau:>~<ß_v*_h~/ÄroðÄBzß|ÖOãu+ðîCb*ýýu@,ü+öh>à ðüb,Ãhü ãà ã/zÃU/¢*u<ߪ/>©Öö*ooZã/vÃ¥hýuÃœoÃ@U©,BBuC>@o>ãC*¢åa+a'), (N'|AýaAãC:,|bÖv*ÃœC~£ÄU££h ~h@@Bu.hÖß©¢,bb,aAC~.BãýãÜ.ÃZÃAðå£/Ã¥zª+ooöý:©oÄ>~ uª_|ð>z_©zß©ãAßÖÃãOb.©ö..+ Ãð~Üðb*ßoýoÄ/äZBîöÄzoßýUZ@Övª~hA|,öÜZüåUã>ßrî_Äö.Büä<_ÃÖU<î,ýUu~ähobð>ßöb<<£aÃœ Ãßßã>¢v|A©r@ßb|Ö>£Ü£*©ß:ð|rbä.<~z|/Öz>îvb¢öü£ÃßBÃ<ßoU/ß.£,Ã:huîrb_ªBbß/aÃ@|ÃÃßßrÖB +~z åÖaCðÖ/CäÃÃðCCÄAðbß.ÃäbÃß~_ÄAî@¢Ãrà b©@UZ,ÄýýîÄbAb, ÖåªaÃzz rÃBörCOî,,ýv_~C*hBÄîå<©ü@räãªÄ£Ã+OA|ZÜÜäÃßãbhÃœOÃœv媪,:Ãbh/ýv*z©ÃUÃ¥*_|b+zãObÃœaÃ¥,.©b ãACüÃz>o*ߪ,>aîßU/£rr>zÃœu,öbUA~~vüãÃhî¢ubîA@Uß|ÃœBbhýaäh Ã*Ö */îzraC@Orà ß.hz<ß@/ßOöOî~|.ã>üÜoZå¢ýÄzUÃAªî+ßrªÃãäöãz@o>Ã.¢/ÄéUðO>_>zÖ©£bßzðb_Ã¥__~u@©~bÃã©:+CßÜÜýîhÃÃ_üãîz:Är£ßBîß*/*ÃÃ¥Uv@ußrvüý_hb£ÃßäAUÃÜv~ü>aä*ªßUä.z,aü_vªCª¢îZZuOßb£r:~C_BC:éÄ>vöî/,_ý+uvð©£üO*_<+Ã_Ob.ãräîäb|ö.B*ö+ãã¢ßÄ.ö_î:|ðÜîrZaüBî<ªO©b@oÃüv_ªUüãÖäãÖCåöÃZýbo+£,hUbîU£öÖrvU|¢ðöÃßu|_oh ܪ£:+b/ý ä.+Ob:ýßB£>ä zß*zvößBuaðvZ~r~ÃÖvðuÖ>~>ÃÃœ|Öb>ßîv*¢AÃœOA@U¢./ðÜäßr.Ã¥UöB_ Öß@OU o@B*AU~_î~U,ýhBh|üîÜ_£ª~üoßzZü£ãZî<î*~êu©>zý|C.uªU|v:Ãœ@î>,Ã¥/vvðö,Bb£rÜýuz_Ã¥hzª.A,b©ÃB~ßCöýäOäoö.~*ª:AÖAßU üîî+ªîüãbO~rãßvüÄuðß*hª:|öaüa¢bã<Öªðu~,üuABÜß+>ÃœObbßî:üßz/ᜆaß/CÖÄBr*ÃCßü~ Aã¢r/uÜð~UðAÜߪÜÜÃbrr©£b£.|ß ðýöä£Ü<ߢr©uîääßÃz.Öü*bÃ¥,C*O|_A£üª£výohahüo_.üzßÜUüBob*~îb<@.ZUbOavZrªß@O.ªar_<.ß_, |ð>Ã¥Ub+öê~ãÃb*,ÃaªO.:ðÃ:*,*|bÄååð@v>,bhUåß|ãÜZCrBÄßðuîCýÜ.å©a+¢îÃöß|bîzö<ö_¢+îÃbvo<*îü©a.ZÃüor©hã<|CO.ä:v+<¢äÃß,ãîZýÃvßoßo*ßýÄA/ÄÜãªÄbZöb@,£ð£äu*b,ªð©.|©.zAbb:| bîBîuÃܪ*öuÃ¥huoZh:ðz.@A+vðzÖvåýbãzÃ¥ÃÃœzC+ªý~ÃOÃ_OoÃðª_Uð@äâz,A*:öoAß*.@ß _Ä.ðzO~+C~_ö+>~,*äbÃßý|£CÃœA£ÄãÖuCZa_>ª|_bðv/ß>|£:.ý_:C@|hÜß_oð©ZãzãB>bîÖz@£åÄhãªr+rZãrÖýÖ:.ÃÃœa,hvü~>©:o.@uuö<¢ãýðr ßÄ+/¢|ã*b¢OüzC@¢Ã_ öÖußÖ¢ýß@hª.ß~©~.Ã¥_öößCBÃœ*vðßüýB:ªv~~ðªß£Ö u/u+,¢@BÖr~,C¢Ca.+bý_h@ör Baî£_ýäZZäUîärhü:îr:|ÖÜbðvOb_@¢<ßÃÃîªbýrh||bvÖ/ÄßÃZßßÖÜUÖ.ªý>uý:ÜöÜbBOzOOÃ¥,öb.u@ÜðîÃO¢ÄAð:hr<ýÃî|CZzý*¢¢.B¢ð*ßO rBu~zvvoUÃo¢ACÄOO>,öhð@.ZZzbýß©BZßa,ÃœCªZãhbUrý~z,:Ãä/urZ|ßZAöOo:bb*uCz,bîBBýäZrzÃaÃ_bߣbªÄãüß| £ýªoh¢+Obb£ü Cr.vªü*ö>ª,v.Zª,.ßzö.Z|+ãu,o,uÃ¥Ã*Öß~ª.£~©rOh_zaCÃ¥Bý/B rBîb,B+ZªAUz |AaåýOÃZrC/ß_rvZZu/£a|ÃÃ|a_r,ªhÃ¥uý:Bärýv+baýZ£:bÃ¥Z,îuu|/ßCÄvÃä>hßbÃœz©uåüî_ZU>*aöbhý*ÃœC/¢~ob..OÜ©U__vCbüð<@©å|zo£*Cî.*|br>äÃ@h:_ÄÜ¢aüßÖßýobäv/|bvý/bzZ* Ã< ÖU*:ÃœAüöBðzrß~ZðvvÃßÜöß:@Ä,U//z >Z<©>ÄBîUb*U ßðOhÖÖur~üß>ýCUîZb>Bhov Ö,uüêãaöýãor©©ä+*_vÄ_Ã*+/äZ,C.|ÃUBOva +ÃÃœAz/à .vÖrCz ö|ÖbÄö/A¢ßuÜ©b~zbÃ_hUA£b©B_äh+r:,îh¢@ðª/ZÖ.>rð©ZãüÃ@|oBðîÃ.¢.~îUªÜ+ÜîöÜCbCä>¢oäÖ/UAo©©åUßuÃß@ýaÄãoî/_Ã¥+îO|//ZªzÃã£OO_Ã~ðåhüÃrüªBCo£:v.r_Ã¥CýBu/öuðaüäßãoC~ü|,ðÃÃuü* höãuUbbh.üO~¢ACaý*ß ,<é/zhÃZOÃœaĪ.Zð_îßb©ãC üÜC/Ä+Ö<ßßÄrßÜðîzäUOOäA¢ßb//ývÄ¢~*<@Az|ßa@ðßÃbCÖüðÖߪöhBÖ>ª£ö >_BB¢_/*@öÄ:h_zãªav_*bü.Ußrh|Ã.+/oa¢brAÜäüÃözzU _åªrÃzî_äoBà Zßß@ Aü_©Ü,ý>©++ACö|Ã¥~©CrÃCv<ÖîC*/~oÃ¥.üZvÜåCurr¢@OãboC:Äh©z¢îÄbðåv£bBr<ªh©ZBÄ_îa><ÃZîãüuýäArB +|ÄüUö|h_zÃUî<ß*ý~Ãœzh/ýÜaAz/buOv>ßzÃ,Özü/*ö.ª©ö<,¢å//ßrö|ðör¢Cbzh/ÃCOBöUvßäß<|O BãA/*ÃᎦ*o<ßC v£ZoðßZz©£o¢ð.:ýÖªCÃœB£ö,ªA@ßð|a.zZ<ýýo ãÃ/bC¢ý@£/üävbahÄ åö~©C_ÃÖ*ZßOÄzvuÃœ.ÃßÄßýî+£ÄåÃ|äÜüðßð_,rr|£<ÄßBböÄ*ÄÃa@¢BüÃZ:ãßbß/brÃœ@ ©+r¢uOÖîUUbäzCßÃað/ |vÄv*/|b©äZä:¢..ZÃœ>,aab ABUrAr¢£ÖvUBö¢¢,©:bö<|COüv.Ä/A _u+uUO+AÖuß_z©ö~übª©ä~ÃÜuü:ö£î u+b>~/@>Ã¥a_îå £ãU<ßh£<|AðB©©ÃÖßããî~Ovo+h/|Ä£ ©ß/~hu:äÜÃÃßA~>ÖäßhOÄbüÃ<~bB£ÃbÜîÄUZub|@*ýbrä*u|Ã¥+|Ö~<ªªãÃC_o*rb¢üî r_ßuªßÃýÜåC+>uvhzr/B£/@üA+aÃœa~Ã¥:Ã¥U©ãÜ@ü£å¢bßýO£hððzÜð£h z+>Ö~v~Ã¥>_CöOäåßýðªäÃîåObAÃß î+OUr£Ã+hZ:Ußobv> B+_>ýAv£,> Ä|@ß|ªOöÄürO.ã£oªäÖßî_â.Ãœ,+hü|UrA/Ãð:v_Ã¥ Ãœ+Ã¥rh£*ä£Ü£©.oäî+ÃœußßÖ,üü+.îUoªrð|Ö Ãu£ÃAvzܪ@¢ZäAb< B_AüðuÖU'), (N'>O/Öä,@ohh<Ãœ@:¢*:ÖhAubCåßAÃ+ßaî>~£ßªoÜÜå*äö*ãza~*|ÜýB...b_ðߣo*Cuýrå£arÃývÃ*hÖb@AoAuUî,ou+_¢ãöuO@ßhãCCð +BýãÄbZ >.ß>CCÃ¥z~A©v<|ãbA>ãz¢r,îuÄãoð|:oBrh.oÃb,ðßvB:©ãßUößrUüÃZAÃ¥Z.vÃ,A|>Ov/.îz:/,ßöZ/|äAîüÖUðC@ã,v/¢Cr.U@ö>~+ßb>Öß~Ã¥ Ã:Ä|uß/v ~bÖ~A¢äßzO,ÄÜC_¢@£ßÃbÃ¥,ýür+/ßÜß.£ö<.>ªüü£Z|Ä>Aß:@hb+ßhÃ/Ãœ,Ö|C¢:îz>~|¢CCîÃãbß ©<ö+îð©Ã.~@rb£Bä,ãaߣ.ý/vß,ao©ýböBBðßrrÄßråðb*~Bb_£@ê:Uö_Obr¢zA/@b+ðUîýh+üaý.ã/zBhohÃozªC¢öãýB+ÃöUÃ.hO㢩,*¢:v_ÄÖÖC>hîÖ+ÖÖߪüoov~vAoBaOîZ_+£,,u©>UBAOu,¢Ã~rrª/:~b~ö@ÃbðZÄ©ý©Ã*Ãœ@bäübÄ£ý¢Ãª*£ÜÃü¢Aß~ß/Ãð/ ß >uÄå+ßÃhÖ<.ä/ªzãhÃv>aÃ+£öÜüb+ð@Äîz<.üÄýäB|uhªðorhäßÖbzzßãböªßªÖßöÄüChîä.Ä,,::ubaªÜö@hÜ£~ý£|îÖ+b<ß.råöAbuý,AÃîä*ªAöýb©U©Ob+h< ü£ ð©bAob|ÃÄ@ÖÃüÃhzöåß,aß_Ãaß|îªîAÃÃ*ýOz~äå/*öÃð:CÃýo+Bãö CCzA >£Bß>AAªÄöa+aöü©äßß|Äåî/@ðåÖAäbý|_+Ãœvhuî.>ýboabåý©UZ>:ª¢Ö£Z|hZ~ãåaß:|O,êîouåäZ@äýÖ+ªÜhÃ~îãÜöß©ýßZ ACäÜCCzÖb£ü:+£v~,ÖbrÄÜ>ðäuo,>¢åîUßz*:Z*üUîv@£uuÜÖaZ+ACbvobªo<äBÖªZßZða,u,Böß@ýZ¢ý+£>*>ähÃœbr.©r>,ß>î*.öãÖªbýöovÃoÖýoBuª.B.©@åßý_Oª|ýabðrb_ååz@ðý@zA£Ãb,orBßöÖ.üöª>ß ~ZÃBãÜB|*ÄC|>Ãa~Ãœ ähr.ÜîUý/¢|ðvßÃ~,U|ðßðöãß>ýU/b.+OZ£©hO>ßãä*:ý./zãîZÃœaã@öO*~vðý_*urÖýob:rÃÖBö|<ä.bÃ._ߣ+*ÖÄ>Ãœ~UåãzýUß©/oß:bbUÖ|+Ã>OuU~a|~ß,U/|©ª<äU£~Ubê@ªbÄ~CªO*ßv.A£Uz.£üvrÄUß<|,>ðÜ::/ªÄýðäýÃÜbBÖ,r:uý O~b:.ß+ZUAÃBv|*ßü.ðv,_£vOüBäBüå©Öaü_îý*Zübv©îÃr>BÄÖUªÜ>ZÃbßð¢ã¢ÃhÃ*C¢.uZ/ýbC.|~<Ãœ~Ö,u¢bý@©ãão/£h.~@O*båÃ>:ߪÃ+Ã¥h:*oABU<>©+ªö|+hý*ðÃãA.CÃÄbîÖß:UhßÄ+ßZªAOCA@ý<öCC ßvßÃbBbu: b*ÄÃuC:oäý ÄÖî@ÄaîhuÜðÜ.ýO::ê ~ßvýß,*zäaÃœvCaC>îO bhbU|C~zÃA©a.U©Ãî<îÃz©ªZrý©£.åÃ_v._O>~ÃäUB£vra+a:vuAýC_ZîÜußÃåÄ/_¢*vöraä,_b_b||aÄ+ª+o*ÖzuBä_ÄCoÃ¥_ÜäZ©~Ã¥B>¢Üýü~U/@㢪üÄ~:a£ãî+Ãœ>ª<,Ä/Ã¥r C>@ä_~Ö*£ä/Aä>_îßO,vAÖüÃÃCo@|äß_ >@C:äAÃ¥vZObðÖ¢Cð<Ã¥U<ðz+@ßh./UßÜAåÃ*ý/:üo@aÃ|ðßü.abbvh>aðböð~ߪaOö,£Äß:ßzoããßv_býuoîÃîrÃ¥bbb>C<ª ý£_©b+ߪ|uÖCz©r©@åö+©ÃvvÃ@~©ÖöÄã|@äoÄåAª/_*>oB~.ã+ýu@U£Z,vö_ßhäª@ð_Üßbö£ã öC*ÖC¢ðoß+üßZÃÃýU_ᛚ/ +rZ_ö¢ozª¢z<£AªuîuZ>Ã*@£/ªÖåBC_Aö¢BBA £hz£åOýrBü¢zî,>ö£AãB Ã¥Zub,+>OýüooýCAoaZý|/~ö@Cbv+ZåÜ ¢@Z¢+a/öÜÄO©åbö<.¢C+ðÖÜ©<üü CCÃ¥Crß@:ß.ßaãAßÄ.Z¢ABßü©Ö,.äÖ¢o,bCã£ãb:b|<£ýãC_îübvr*ðuzhu+ß.£Ärv,öÃOhÃ¥*ß~<ªhüã¢ä>îÃ*übCÃ¥_>¢Ã©£îÜ:Ã/OßÄßOî+Ö:ªoo+ÃðîÖaãZ*ß㣢v©hð~ãÃU.:bßb@/~Z©v, UöÃÃhÖª:B*übrðUUᆚ:ðüZÃ¥CÃ>.Äbh~vZaÄ,r/bBßzBBÄå~O*:ß>ð.v©äª:UOÃAr+ßîî_ã¢/Ä+h£Oß.ßðu+ª*B Ã¥ÃA_~ýßîbZåÄåüã>ã*ß|v¢Ao@zA:Ã¥:B*zb@ãu~äÜýzÜ¢C_<, <ð©äA.,ö@hrßåîBOvOý©ßC,>£äýÄ,büߣh,@.>Z©håÄ:©ýB,Ã:ä+>Ä@+_Ouo.Ã_|ÖÜåz_ð.öã©Öªaör~ öªAýUvCU/ uZzã*Ã¥hÃbÖbC~O©@ß.ÄåvCBoßAb,îÄÃ.ÜÖðÃv£r.|O~ÄCAaÜðßÃýCß O<Ã¥,C/OªßA£*ãUüvOuz B_+bÖAv:BüÖzý.Öu,Ubü+|ÜÃ:Ão_ü_|Üß:U£Bã£BoÄ@ßZ**.<Öåðh ö@ÖÃ~bäÃ>_.ý<@OCC_ªýß©bü.C Öbr£££>@Äå.U~U.rü.zäãu+£ zh>v<ßZ<ÄBÃzåÜ*ýý@©| >ýUuBCÜåhÃîb£üåãÖhöAZ,Bß.UOUu~aÖ|/ãýÃvh|@hª©|aîh*£Ü_ªZACî:ßäö_©_Äo>rCÃ¥B>ý+>oÃœ.U, bÃ¥|ß:hv,ÃBZ/v¢ýÄa<_Z|Ußå vrªa,@ðävbr*CÖvýoÃaýarz,Ö.¢Ä.ÄZzb,u ܪÃ@ßåbzC*Z@¢¢@arä>bÃ¥rvýåu:_ÜåZÃ_öu_A>OChýZ.CCbßOvBrÃ¥h/|*ãª.@@ub|ýÃ.ýüÄÃ+öîðääÖh£*@ßbã,>£r*ä|ê:b |h,,rz+@@r_£>ãå<Ãœoa/ýÄ~OÖÜ¢äC© /Ã¥@Z¢Ãvor._ rüaÃ>üBð::¢*ã|r¢.Ã@.ãåBÜý_UÃ>aßa:,,uÖBCÃ¥aÃäýUO:b@£Ã@îC< äUÄüÄ+//£¢å:Oýä |¢.CaC@ßBOuäZZC ðb+@+oo£z.*¢Zaî_Ãœ,üvÄ+zÖÄîå_h~o*>|@Cª*ö.:Üß~Öå@BZ©bÃ¥ ãª_Ö¢ßÃvaCÄ<Üð/:_ßö|Äýß,ßU<>ZA©öü*ý_ã/Ãœb©ýA¢ýB<,aUüü:Ö>/öîü,ü£>,Ub~OÃÃääU¢Zý *_,©/vã*ÃœzACbßÃ:,ba<£,ð>Z©Z+CÃã<>C~*~Ä@,©A:Ã_b£ðC,ã_v@©üªå,Üü:UA<|ªür,å©_¢ßªðröua+vÄîzrý/¢Ãà Ö.rß.vý:ÃÃÄ@Oý£ÃbA.öOܪO@hO*¢@|£r ßrªß@ðüÖ ¢_OÄz|Z+ªzÖoýßAvZB£ãoob ãr:BU@>ü./ü¢*/äÜ oü*/Oß+~|ußzîo<<ääCCrCBßÜÃ_ä,ðäuÃ¥@ýOÄå©+b@ÃZ©©>v|Ö©CAÃ¥_©/Z@O£+~/,OzÖürÃbÃ/ßhCuv+U/z++îbÃ¥CoOäîö:ªý*Uß©ýb,.ãßüýhÃ¥OßÜ*,Cbuh*©CäübzC©¢ýäÃÃœbý|Cü_BbåüvabCªb<öhB/aÃ¥r.'), (0xC65EA6C2414FB1EFA46B239E5443CA3D7E6A156D618A970F2C26832D4A1C501DF9DE7614D9082648F2E148637803450821AA0A1D83E2063CC697961ACB83A5881B06A476CCB5647544CD7A7F42349628E17B0C9F11329A17D73A4E42720B7C6E3BBF47725FCE3B6B4595D9B66786F992006D3950770576E86C8D9E9267210238500C4482EC24C81240A0597B59E4AF5140BB4104D22CF635495E06D22FA8042492A0655A4277A5DCA5260FD7ABFB8F87DD4D52ABE0FD6524150E398D1EF6E2979C35E9B87E550EC816655FAC1C1F894ECF7EF4E2565843953B4144343E17BDAE43783A7611D609883F89957A9EB807F684EBBEA001004043F2537C3D10DA8AFEA7B168A3E4133CF8756CA2CDC3C9F782394EB053591DAC4338F784BD59CB7764FF97D2EC50631170AFC52B945D7380285CFA03C12A37A48A04256BED8F7E9EA9F53ECE2BF60A32D63C3FA494F217E5C4775B615FC7B53AC7F348E82BF724E03026819F1FA4543252C82D84EA930F97EC3FA675341D3FE13F030638AD2107DE185F736E7077C51F22280E979A305034E3B0FBEB50AEAC13E7A0601C9E1B8430C14F6C8B20A127747A87530B0EA7470EB3D155FC261B8D6AB25F86D017A98107A3DDD64BC4C41441898671C95BA0053F595168CCC6880AA5C102D8C01A565DD0054B6831D1FC4AEEBD13739FAAC30E12594777C640B4411BD33189C2EC53273329), (0x38D46D5D077A0FB2156AFAFEF3C666D2DF968F510A4C5DA072870169EC3F760AFFFFDA85DA19BFC6A48E0668368ACF26EC545392117205EB76CCEA7F78A6C6D5F4F0FEF3EBE1F8C5D7C9AC7C45F569E8B8DB7C97ECE3F98CFAEE0F0D2F3F4DFEC73174468CDB3A0B5B8DBB47C688A5816202C69D292FE811F771F9FDD1EB96977BADB41480235BDDA0703B5E27B1C671488EAA2D79AFD59848624F1AE13C3A70F723CB18D491003FA6E9FDB8F38AE945AB88B54340691ECCD81BCC1ED341FB6336CB6704E5AD9CB78D6A868FB21CA5BE79096E5987F62F8E05FF40B8C5E26C65ED99822723E560FDEBFEB5D6E28E19BC760DA4C9D2A2DC409BD8FFE66DE4F1ABFE21A219997D9B93A9706D894059AB76E58342B73DA2924BBC418C4AE67990070C0AD7C1EC0022F872101F613453FF422D8800E9A13A6D5C8E565C57F151AD30E0667C3581EA8AE561), (0x2C8231166942491C5D79A765D19C7B3295A3CA072162EF81CED6CAC143FE1A8757F541D95D3FF315A73450B63800AB9805B7F442964223C992AF48927788D95F5E1F0EDB5BA2D555B0B45FEC123948CD2B31BB8C09D8F115D27746ADF7609D1F5BF05719F2CF3C63E29E91E2E336B659677A6746CC4D55862EF809E45B275E4F163F9122E12FDB5CF457A96A470F319CC0EC467CF957530E9AD1EAF9C55808BA4041CBA3A49478379F0A5274A3EB3F1FC66D246EE1E256BFEC83870F44E1969C4FEF2A05438EF72B740EDCEE04DE6BAF92CB32583399D95DEB0BB6210D68F2BE73B624B3C039DB3876F8FAD20667BA0E18D87D79AF3E68B615CD1937D7D51E0B1C1E7A4EB9B7EE58F0FAE23B9F06578351A80935EB790F354D6E9DF320A360A0DAEEB6E7EC6B5460E92489B45C2C170E7696E62ECBE920A20F45004B19FB384C994160B0506F96E553A84CC6EF5AD921578F7D8ABC32D4F1CE13D8A76B0947EDEC3C1B1ACC66BE06FF01DA229C59B2B56BDFF48A7EAE8F676C6FE13C96EE7A4A615EDAB33EBF55F0D0768ABB57B1547560233C8B15BD6F3EACB4AD5C85816F108790C13E7EFF76AC8A03B90723D410BA1B6CDC73B2EE34A4EE9C068911F86B4F067A33C6F015F661AC90001103671AD8A4F24118A5FB5E985B1C4FE2F9EC9A92986A00A9A049CA05767AC721EE23A186812EE51EB753A90A1C9B6BD4C51367BFF56E79986771375B283BA12A343CAA387BC860CB077BDB45C0F58C05DEF53F6313072C7FAA081F10F68AF67BB17FD6DFF13358FCB39CB87A9333D871E4317C32FC3D172C102A8D73A950D47C855F93411FAD13AB9D42B0764FB2EC762FAE2BC50DC37E7367AACFC7A5E45362C73BF4339F9651371DD195B98DA0DD5E3D1743FA240F6FC2E11FDA75DD4C06B8EE4DAF13BDB9D6995CF4A73C2DC4E6C7CC71898EA1593EB8CC315280BCDC59D1CBDCCB40F1C9A08440AA9D2F6832941C3912A86CC37717940EF6478B6756DD809AD67051F9A5D603D0044DF7BC0E50999D3546A934ED0D53C53631FA81141DE9CC1C9591C24323933CA49BBE2A1FD800A5ADEE310F334CADC81D8BC274DB81BCE7642A9F79BED75911B36D8F514F29A65D3154D425EBDA99D0E7C9A4B8601F6022DFD6C5F53987E7D6951F5CC5BC5C79F3E5654386AD96FC8991CE92F532A1B1930C6C717863B124A96DFE90CB7DD3148A50B1D3FBDCDA7549DA3C636AF5F2A3F36EC8B94FEA009034409918AE05300BBDB907A481CEB5B732F7289D274DB9B47B5A9C5CB51AC5A04F219EBA42C1C643AA30A6B1ED4D2225B8108657C26268E787E49D5368D356A3F467545F2FFB757030E5F3F7A608C62D3877A4A4936DDDEDB8B7335E2472DAD6D903BC86F8C2F6BD9B1627DD6F71407E1D6F1BF12FB10F878967A777C7164BBE0A1D1DA34B40357681E7087D46007E4777B440B557E9A727F335FD911B7EF584CA68D251539D32DD3AA46F48A8924188E95F0013D696662075F5AF1642A35B02F184B2DD2E2CF3DA81627BB2795F7E61F375A7BB7EE2AE3401B2DB5DED1C9A96496D5624DF635ABD6C2591731BB4A716764D23CDFB9F840FD67EDB7B5095EC65C7E4680C085A828F1BEA4F58503A184D0BC5E6A0F8CD9AAAE8464E6088DE6CD6392CAB364B9A0E1CCA93B211502BBF9B658E708BAE4C6CFA4ABE23C10B21073C7E791F248EE20170B7CAD5651B895ABC87B2FAFA6DE127EDBFB1EC8C764C11A98C7592D60C9B0D828C00D4E47607DEC064663A58270CCF9C513164DCF674FA6AB82CD9A6F683B0ECA5776E6D0C4276B8D32B280F11B8817FA5F685DA36308C1706692C4A2D38C9E1B64EB3AF9E628F0EBBAC09CA4CEA59FFAA5A0000FED6B574EB5767A3162C8A9A624759C305D2E04366761F8A27C1CA1B102C9FD337C8E2E0993FC347FBECF78E216E68059196FAD779BD9A87B62A4C298C4B93EA8DB66399647829C60E9948797E9069B959C5897932C75A792E5B296EF29ABBAF590D016A0ACEA0196C33C8DF75200926C193D0C6C219B7C55CE96B094EBAD474DE9820718FFEAE8B24700DFFFE7A040E5203AD5EC9F4ED40553C0E206397CAB15F5401DCFF9797C2E445A2510BB8C6E1E55CB74B0C75AAEAABE01B52F08D278DA65B9FAA79270EBA6CEB7984529C349C752C3B06E07EA4E9A917301F7B44D1571D14AAAF191B67BD4EFDDE21FB25970FAB7FDCC35221AD27B6B60162F7EF3E281922673DF184835AC57DB8E3A083EE837F2073FC670E04FC6782F9631A05C65EBEB607D8BD5A1E27FB82FED568C98733C77DE3D67B41C00B1E6BD56E8B203FC0B65924E97C15C524024B00E4102E939DFAC69B9D21F0E37CF5FCBA5284AF9CDB433D1F0FA59EB7B1B7BED33041DCFAEFD83874C585A29EC676A7F47F5B73A053AF24A1D20F84F75C0FE9E5631CB33B1901CA7A4B3BD656A09F5898FEAA3756431D80801C3A28DF544017B69BBC3AA9C36BDA7D91F95418D9CE0032B6EBF9B2D793A1469C321FDFD9EA250B2320BAE465AFD592CFB9C54AC867A64D39F528694664DE081AF40C904BFBA3A6D349F4B8131CCD071567E31DCD577D348BD1A5E4C1BCC4BF41B2CA70A34546D4151E777F73ED391D272153DF81C13AC276D7047A55BFE41684357761515C64D0200E07AEE0FEC19D9788BCA068E53D807707FACB40CC7E563A60FA3E76D8CBCBBD83BF72B98BE2781666E2CC0344AE9FF7F7EA4A62988F5390B17480038227BFBDF0E2E526CAC6EB2481B5D9EAB253F5B25B467FED806925F46BE208176275933F220E1262C8792D30FF25E1E3B569DD5D7FCDA73BA8D13D87BDF1BBE7BED4C20B219AC7A34193E9E2194EEE5A88413E0104AA9794CD579650D18AA4D7BE46712B63D5C11AA13A1CECE4C52259E3E2FF7BB2B9E2143C2D3EC90377D2B6EE1124D3DCC3F6B280235FCA8DAAB008343C6DEE8A292504635DEE3697F7162A6865FED2A14F7D1FEC4DFB8E591887927C3594C609E32CC5EC1F6F7ED5C01B880C356227ACDD67E5BF4D023D2D96AA4AD65CBA61634F21843939E681E0FE4A2C31738224B65FE59ECEAF07BBE1EF97567425A87805BA24BC13DDEE73F7E505C102D60CBA14869476761B92B34865A349A1900CBB56D226764EC510D87172A7E8AA46B80AE3DD41EE903102EA277174AE3AA4D267D94A6B30B0956B4E75BB050473AA0802AC9866C34E1D2A24CF3B4EDD51629ECDA03F0F60DB875A4D72F379D52BFE767D687101A23D0E19BB1F466174468EFD121D3863349BA827243D18515AA455F8D1C4D174DF61FC8F912653409426E507E3F567B8F39A42E2C04ADC6425BDBE17CA4D8FB075191EB120A8D10D476792FE58116D653C9D053681EFB49584986AD4673C7647973592CAD7B5974AC8349A58B7DE0B135059DA2D47582E8565882D883EFDA60BF14B67237FA38E8605BA6E4D545BDEA58C56830E6149FF3E060C644E880F0CCB8E8E676C77E894ADCB53278DEAE13009AA87FBE77A97AAA74B281C723E3FFEF6AEA2BEC6F4712DA3C1D5430D21725325DB5BA401132450F7E4BF204ECC226F8B5531DF47236A1538595825A4539C86D9D5F796E39AFCE28951C7E13451DED79F66B7B8EF930B0271456BA7BBFEACA348384779D58B8CF1584E55F55B88E0E77A81863D9CE49645C9F5259D2E54278AA52399FB09650114DAC65FA03D15A6E865842D39786E0764A201AFDF65EFC20427CB5038EFE4DE157F7263D584F508B44E3D37AA27ED11361C355907B521AEEA045B7971C56EF880A618BA060B31DFACF9FB9128B718DC39BA191BBA8BD65F5DC378D1297C96EFE044B7040F330A2BEA55AD0EBA908533EC7E40B7AB523EF5CFB85D429260B52F620CB0E40013CD06AFEE3064DDC8A5CC3E45E5AB3BDE438E06C13456D5C7988A9F7DABAEE0A132D8B03908BC21D917071390044D7A0AF484C821DE3EDF7630E755A6C4601DF6EB9D120DFA01D5876C2CAA2C4245C34B0F958927E5BFC2F3F8390921677B14B7EA1CA5673A6D10F2AE41B4B194B234EB2309962FD6F6112CDA1E14C0F8B41FF117F342259F5C10A1859778A40A115F46051EFD5DE4E5E0F40B788C1C594FF9F921C399A1700E4BC7F9F4AA3F7D6C22C9BFCEBBD9B6C20C32124E1A26CFF448359D7E824677BDD6F6D23564EF3BA0779E56C35D8B941F425FB6678E21F424F805AC74A1FEEADB5101F7C407815D1DF771D77BD00B97BCA17D3C2290102EB402AE3D5F43C7FE78B47A715B93D018C101996F1D4A7854ED6DEFD224C2C74B41D243C15844FED930725EC755993B29D1647A21F6A01169895A4FF153F4DAB6EC2F3088500EBF7D02BF3FAAECB1FE5331C601BF47A654A0C0D938FEF40D863C98A7DA2669B2D8C2A4FD1E3761677DD85BFCBF8CF21B6F46DA8FC876D6C188F538021144D6D8E97FEE3E1A49881D3F585C60A2F74DFA497D38944BDAEA62ECE37428FE5E5638018313409EB30025BEBD4F6F19761E91A73EB9940C428C0E948B5237D55F1EE102245E1FE40D5B957C13D68D8B7B4875C4E380BFA4C12CBEF604AB1261C9505E9E6E6CF517FFAD9AE32417F86CFF831943DD72F1DE5F3C41F8A028DF614834B3C377EE1C0E525DC536E6DC80AA3352F78092CE83565E7F3F322BFD77D7CD389AF06335F410670AF17FADBBF882BB96C44D305ECE7AB05D64F8AFEAE255E6EE69AD429046FD5EE61987DD04A9A387BD76943829A66E6A203F06D0FC617C279C98BE524A3F2B50C6EF4945479CACB3C170F1734E1CBD47FA4322503F2D61859C5F416BEA513D7D4A4472395C29238393530F8C6F09D97FDB7757071DDB10998DC4A8E75A40C86F32742909A983EBD1209EBDEC1DD5159385C19073F9365F6F33D8AB97803B29528A9F59FADFCFD6578C86E67E1D247BB7AE156198AF5575FC15B9D6D0D75350E4756A627D7C1BB3B6EB39E7734FE0510F5CF4E96BDA91A234295CE525F9057F38360209B3C1FE3A9361ABAC766E02AD3468C674E36AE40AE4C72D5420358EBCE6B9AE3D4DD69E4D5EB9550A2EE42CC627AFB0BD32909BCE51F725EB94AA1A5DD2EEC5BCC0C5605DCA79152A14D9DBFF9B662C7184D08A551EDFEB55B1B2B9B49EF837401E6F06614E53F2B97B71BA771C25502D7DA9D80264709EE1D90BAC17C0608B1CA29BE12C60CA2231DDD0DAAC2473388B628B37F51F35DBAED0248843A7DBF91AE59ED5814424CCB286A7249396F2BC65D220B5342996FC6CBF335B3C42DF8A02D7BFC6869EB7463EBE856E78114817DE6822708625C4F14FA168C211C8906FA71D21BBD62B36C71BD97775A327845B761B7CD31F6E03DD13CD77E535F535752E15C65BF08C41B3325B55ACAE4E4D271C0D4BF54BBC4F391944A809B3519126A401478E61296BE9DAC9A1C418562EC47F50C828A93F2971C58D41ABE438FFE1CA2F08AD07BFC6F3A2611B821B8B20C215E4896388687C64D7D6C8D3E7BF05A2CAC0FAE94E81BCC089D5864823A7563A6D7F9600AE9B5861B2A3D531F7F20BE25B79B85B9037739427C8D9B3E234402F7F8D66682805F32E679936ABAB8BC997C9A3ECAAEFFBA9350B02D8E6C1A47F7E62A5B1698CA2BA568689F3F700C8E89BFF42EA3E48963F84E4305D262C0D6CC319B84805D95F0A27E995246607B13542193CE67FBA4036CB662C855B449329781D30DE4880E2C1A037C255B272D97C32FB1B0CEF26ED08D9817C9FADDAAEE2556CAB48D7D3ECC2377A4647F7EB84598CAF5260298739522F2704C6034214C588E0FF46C690A45F0E59D575E0A510EEFD2213FD874EB8CE325918B0CE26BEF46680BE17EB3D93FB0AF351D0B2C4728A1616C8E02F173D3A2731136D78F490E89AE00E5FE7F903BF8F18F294FCE81C6DE78E99B85DDDC54E4283EFBA2A268316636935D1B512A21D1209511625A93D3F14A685E95AD78BBC1AC01C630948956895DB3092B24AB7D4EC7CA6548CAF299946B0A583A09ABB8CDE79B7F5F63F13C973E8814978AA8CC9EEB1FCDD3136306A96821D59A311C8FB20A4B43992C2DDAD69DCE1A42EE0209B23DB95EE9DDE5AA7494C5F7321B926611F8529D3F653362CD44F7455558C3CB5628235C77CD95E41490CEF4662698BB0B57F84A8B74CA4CFA4691A4D690552BD0FA9119F835FE54527E789EA63F0C96AC3C49FD60794FE15DD652213BF10D844BA3236B958EC2C569A3E80D0C2BA6CB49FAF89A5667CB57BABFBC21D3CD186170E452F31BA1012D797493BC9142D5222F96E73108632DE3E7DBB0E5C2A0E19C8B768C17D8B3AFA8F9CB20D1C40EB667DA99F23CE5E7691DC67F1B4FE01B6AD89307311AB6CD597BF74E473D324C1FD915490B38AEA4B6A41D7E4159986FB8DE60584ECCDDABB11D30864597A02BDB8A6F322A97003229EE409CFD387C0FD3978568DCE9FD430B7997FDF8286F1EF3E1A2C6EA663511CE2E2E607C30AE78A120A2BE12375EE18D1C26B10F123A018F31990B95A5157D52639AAECB9CD6CACB1F5CC785A10CBC92C149DE3F7402BBE41CE14AA792E2FC1B255BAEACA015F0455BE5FFC5728BDE34DC78C46B374DEE50EECABEBB8C23383C50BC50555E1FE2AB4998D38E12F671910315CB1A1E90D3D77D4DCDE56734B938BDC364B62B88D6CC961911AE7A504DE8491DA876682E1DBFE878D81051FD4404DFAAD05F81BB658A3EFE73F58F256D2D0FD59C499C32D09FA5A4DDB2B0C67AA8D50CCEDF7FEE668DB82E4769AA1830B30BAB107C510A78ACCA40B9DCEDB2D97883DB2072569DAD217F0E817DFB66E59D741AA705B5FE47CA8422053F3489AFF544DED5CEE7BE5C7DFDEF0D42790AA1535B1C68C31BC3B2858365EE34987DECE56E8C292C9126B5B5CE3907C6F0F5418970A1D41820DCE9811C404B71C027D5700217E3ECE184C23466A304E2BBFB948E2464B3F699D4C481A2A80040EB33E5965387C4D91154A7EBDFAFB17DC806C510BBBD5D6B63EEE63D53524A4984815922CD7E8F2436BB7CCFCCD816FA1346B99BD2FF852DD68A3274A18775CF1A5E675E569EB0597790DA00409D9E9BC7FC1A1C98AE6684FC2B4C433C1A82AF35ADB56E60C89384966024321584ED48EBA6ACB57D69266BF7D2523B426D2D6D1E3ACA92D8202B0F589576388A247F773DF357956DCD31CC8759769E7668322932B723EABA5A60BB7BAD5CD7E2FDD1C362DAFD4F1587FF40F90E0B8EB99C88E0535CF5D30094CCD392AC29B06059D99977B32B9B7AE313BAB7D2E1AC4EE201DF147C8495F80EC2CE1E19BC696E3EE09F2472170660FD7560394B1B2DA31094B09A4AABF3D5439178E06D8D5136AA5C78F24287DCCB0B7E26F7145CBCE3951AFD850BDF1392ECC9E0D09E16037024399EEE923B6098C7E59EDC750CC0E6E4855B428FCC2ADB38E60588A6FC2CF56AB6C2DACDCE5159BA64CD2630471DDFF8F9FC18BAB0E0580EC3B5BC25E7E1CBB8A961CE39E619263401982B0F049AF1C8258FAD00143AA9C67ACC0A089523C272F17D96D54F9612E0C5E4A928B5490A38C3E4006844CB946EB807CF1A1F1D9EEDC5A80D86F41C788F6CCC3A3F81810121B1D144B1236A2E35D9282D47D6F8C1B845CB630D4B8334B76B70FB888164DD36F6AD684DC8EDBA5B89D7ADCBEF30B873FA71E9B61DF3D63E9C9D45B27EA5A4744AF651299073EF6811078373D568C83AB8778E1F7B2718F2C729A13BA807DCE4233970F8DF9EE3869271A51670626933C50B0A071794F923DD6E5266D2B3C0093AAF40ABE7DF6B1994077D0972027264C07D669D0DD5CC8E305D1B714C7CB3DEA19BDBC121BD4BF5AFE0630017FFB1DAEBFDA6554D330B54D2B26B9AB3F9DD2753AE57D626B133032170FD1D72CC76409B40854ED65E917E9076FE6F51B141A6033BBC7997DBA43ABA9323DC35EDE2164C1AFF63649E50F50CD945AFC2D3A1702F470A370FFCB8CF9C5A94332AB548A294D82346B1DE4174EAB76CCE95F477E6E1A3BCEED3BB064F622FC719FA1DCA5790931AEAA06ACE4105854C589FFA39A7E2AD41870859DED9D1D3E48207277ACCED152DF2D98D3686E56BD94E6EADBF77F62F375CCC435F36C44118DC763C39DE0A7F7B8ACC46CE5576CA919C80806B24247C9BE7F02E0099C5F72E98746A00A921FB33FF3234BBBF60D1D601B1B2B643D5E4A809A051EDEC7ED1C4C51825D11CB9E87A854C7BE1FFC0EC771E57FED80340EAC28FB20708D01D5770506FE6973AF0C957D93820F75A02A848C3DACF847FF9B1743D63515AA2DF9A67E4FB918FDA453C1D8EA70ECB1FE3688D19CE44F54DC2F056BE7269D7AF6EA4F9ADC9025E61186E7EAEA1F5D8EAE65449FAC440E49AA51A220B3AD167EB647E2002152D56D10A1BF15FC656ABCD276BD81E1FDCDB2DB05EF8AEE053364706933A33D5D6D5B90D68E0B84F94C45E7E54D3CEF949CB97A2F241C634B7F0B6D5BA49331C77E750962F10A6EC22EE1B8AAA208B7F775DBCD7A290E3851F74457839D2955B9132066D8328CA3914AB7014363B9A9765376E5C8C5B79D703CB86AADB3EA24058CFF9681A1DFC4E8383C2F710DF4EE3E9AE13026438CF45B82F69B7A22F6DE5F93FCB7632228D473B2FD9089872C6348CA2B12D1BAFEC1FF0B3AFEAB444AC5415DCFDE103D8A1B720CBC7446FC6AD4569253AFF6E40CA4943AB758E829292F68374E2BB84E520A40109FC5FE8A7B03A066A818F09ACF5D512B49D686313349E38C0B0EAD3E1C0740496FE64547A60ABFB4B88181103ECE68F1DA8C057C840FDC55E1717E6C55624AA1D8A72AE9180A843E16D179B2C8D34E3DA6BC648F02C4C4600AEF65348C535E5536DF3796A37FD9D008C665B295298D0E2340C599FDBB9E14E2CADE28A44FB2C373237BE89BB79927E393863B5E12CAE06257114B8DC4577B4023B3D9A0B02CB814A23F72AEA4726BA69EB66A3463B6D000FEC64C3E6635AECB00A77704C0873267CE27BBD35731BDE4A6A4EF0EED46DD6DE3D9A1E9DF79AD6D90A7AEFDFB67E6168302663CFAFCA8CC096798C2469FDDB9CA0A20E7E6488754794E42AF83BFE93EBED88BEBE0A173E630D4E077E1EB27F0CAF433F046FE303A7A11C2ABBAF848497E59036D14F2D828973AB7116810738E2752E58F8CF8F8C0A85070CFDEC72C378B96F988E7B9DBD71C0A590C471ED26A9E34846812B9BC856143C4C482094ACF0E7F85D116EAA66D760E72829FEB78897E0531AA43C325D1D97426A4F5175513BF89FDC8990054B38E16F204473AE575CA3B467CD7A08C4A59B3F7A1C401785EB85FC215EEB0F07DB17E1C2CD1208A9F8EB1DABAD1D93B1FFDB36EE509B2EF8C9E934BE778D087194AC8CB59845F78392858121227BD8DDF23A3183A420A74FE8E8F8E3ED4A327BE2AC06F080DE29B9D3B34BDB0A0DC65E0066CC3D5B84CD64054CCCAF4D13964853153E8664E84D141077AFF0D4DC35DB229AD3868DF5106DDE92EB34017A6CC01D0377F4CF4FF92819A81CD3D4DC9F3916F18CA2301FBA5DF4C0B7C1FD1902A61ADFE3D154311BE2A1BB7CD5D84C990203B22D1FFDBA9FFD492A0FFE98273AF0A576B8F4E8BDD4D5E59A0074A2E475A837A5BE3AEBE2A8604FF6883A311D5A7A807C306183941945DD573A53BA1B5A64A457B6E278F014B2CE58B4F235AA94C84F85F426A41414A38C785D84B854B6249C2385E956680180578D933ADF271032B27214241723B090331355F0928FFA799280561214BB61D77473DF2670E9C465582AD24640821D7862F5A6431200EDC78329A85EC10E1DF7003CBFA3549A2F594EE0A877BDB4391072EDAF2F052EC563860793473175A45A1CDB3603C26A13C8D65CF421687619CEF087DBE35EFEF1D1775C1D5D06D817D94C4E5AE28E254E08C9E648A83A93FB1FFDC456A999B10B1DE9649C764CC6C20E451AE52A1B2740CB49D31978A64996E3510D6F32716E4F8B433D091998D7BC03244A631FAED0F4C6839B6FC6A792679FCDB9154F678F8CD6DB59E6DE2E2732621716446BD68734801898BEE5FE78E3A0D5695BDFC27C9B94BD8C4454FA16985C590DAF914E0BC946748536CEC0A6E852763608C4DB529F9A7AAFBE4A42EF95F200628CF0C94262C9A0056B4D45DCD416A3E1DEC40DD371066E05169E5D7F0394EF34CE6E19E78923C34F14C5F75254ADDB97A65100D1F43CE18682C43BC47C3101C65E110E65FCBC58AAF0CEBEAB0F0BB078C2B5D8A2940D30918C9354C4F80EC2E3C43104439F75AAEA0855E1357E36778703C301C6586F3240D07CD9696783B2F1FBCAE6DE077CD94D0AFEAA3E2C0B13461BDDC134FD0C8B54FEB363129C417274A2FF39A35F998F96E9B4BB69C50424D569934D89C27DF4FF3F81DF4419B6A0C97C358B3CC16FF6825E2A4B4841219FFA9E8DB90903F8A2350A3A73CDBA4B8D3303E1FD9F88E803F99CBB3BA822ACAE1DF1E4A58BFDA7C58383463286FC38C802AD18345F240071A689BF7C48BD0A025D9C55CBD595F1356C2C7A0C32B57D0D63F328FB1A684EE9F172FF023E2B8CC68943D4FAA66CF27CABD2D832B9F43EF10CB20855840EE7E54D6BDA6296FEF730AFA372FED08266F6F0BC4F47901C3FFD340E058C2327427A5BFFBD3A929FD5BCDB9783168140108A5B1154D7CFA045212BED2E88F97B1D786108A2E0C52C6460D6926BF899297BE3FD7B3111D26ABAABAA8C0EB5614CC3608A0AA588AD2FB53EACF4013D345C9802713A9B7E4A0BA5F64DF746491DBEFF89CF0B7E8E73E346CDC60264EE697D775DE40C3436B145268E64AF3AB5E96C10EDF4776E38DE198E8DF3CDA84796C79CC08FE855017AC8D889E4F019C4B890E459E176E9E21F3E7FDA7DB632E39CDEE7AD126A25F1170F733BAEE443EDFFC9C552E94E561FDDAAB141688A93C485E4ED06087CB25E6AE342D203AE433AFA91DAB3E0D00A5E88D7CF77A8E4888C7BAEA5C9F74DE5831776F7F60B840C2F578646D6AFEFD3A5DA9E8D20AD3AA5765AB66665088933BCAC47AC69E8144304CB9010229DB1DC8BDAFFEF68B0B4E5DCD1719B451DA726DE429A3A684369CDC64B88550D2A72E8A8E9DA8A0899CAFBE751CF9866790DE7246941D0037774486132292D386FE8A25E98F26B331D2E3487AE430673C1575D4D913093E8A2D521659218C670ADB387791D39DD8692A4074B0D5865346DC49FDACBDFA73F44C9BBB3C0F5910467B3D9EACB9D569789D6AAED2958DB4A7FFCF7DD88FBA4CE1C5824438E19B5AD0302E3497E7A68D06E0840F534BA05FBFE6133D3FDC37B6C0F0BCE736903096010FDEA267581DBF584276F70AABF99625238551), (0x00), (null), ('3753-03-27 04:11:38.361'), ('2023-10-03 16:02:00'), ('11/19/2008 4:38:05 PMThe quick brown fox jumps over the lazy dog0123456789,.;:?[]{}()-+*\%^=~!@#_|/0011/19/2008 4:38:05 PMThe quick brown fox jumps over the lazy dog0123456789,.;:?[]{}()-+*\%^=~!@#_|/01'))"; + break; + + case 19: + $query = "INSERT INTO [$tableName] ([c1_int], [c2_tinyint], [c3_smallint], [c4_bigint], [c5_bit], [c6_float], [c7_real], [c8_decimal], [c9_numeric], [c10_money], [c11_smallmoney], [c12_char], [c13_varchar], [c14_varchar_max], [c15_nchar], [c16_nvarchar], [c17_nvarchar_max], [c18_text], [c19_ntext], [c20_binary], [c21_varbinary], [c22_varbinary_max], [c23_image], [c24_uniqueidentifier], [c25_datetime], [c26_smalldatetime], [c28_xml]) VALUES ((null), (1), (-26881), (-1138956117), (0), (1), (1), (0.3936), (-100000000000000000000000), (-922337203685477.5808), (0.7860), (' '), ('z,B:>£@ä.vzB/ßOCå£ýüuAªh_v a*A>Ãaª .ÄaCäÜö+£az֪éÖCýC_Zßüîu @>+Ãœ~bã<Ãœ,Ã¥@COZ£öCU@ÄvÃZ+ÃîbbªÖBî@v/aÃ¥/uîCöväªäðv¢ãã©Ã¢Ußb,ãOß/O£Üª~îä£bÃA¢~z/.Üåüß.Öî/uîA¢ö<ªACÃÜ¢Býva.ýÜo£bAð+£¢öraA.à ,ÃåuÃ~bý>î@ß ܪü,.ýÖÜhäBUZä£ßC£+åÖ~~COZOb©|h.| ã*U¢ª/ý|UßÜý.Ã/o,Uoð|rAãrhß©C~ÃÃÃüaz~>böîr*Ãœ*rÃ¥:£>OîU¢Ö£ ,.<¢z/©BBZ:ÄC~Ã¥ruA*ãU>aU*A¢.ß/br+ýOB|z~ÜéUî/Ã@îZÄA~.ßbî,uZZßUv£uU h,ߢð:~o|UCߪ>ÄCB.<ß~ðZà aZü/.ª©O,,@äzU+ðão,*ßrörð ýäß:©îå~ößZuB.ÖAB£_CåßüãB:_vß+î¢.£v:>.Ä*îäÃBOðßýÄßÃãOv©äÜ~ßãü¢Ö|î©ß:hz@ÃðruaBå£O¢|_AÃb:oü.Ãð~Ã¥,vCoO@B+ã.výðýA©Öåð£r.BÄåãr©<Ī~BbßüîöÄhbvÄCÖÃh,:ª£ß~£ýzᆎhßz>O@ª>UuÃãä+ý+<ã<ö<£<Ã_:*öuðbvýrZÃAU, ðÖÄß|£©<:,Äß,Ãœzä<:£OäåZã+zZzO¢îübý©rý:åð.ß.BuUärÃ¥/v~~u:b<ä/U++zã>ÃÃ.CBäa|ÃÖb>:BÃœ|UAä:,|ZUzßZö|Ã/ðävbö¢©ãoýb.,u*Ã¥Oå£*.ÃÖbAüß@Ã@ CãO>üüAÄChß_hª,îbb<Äöã,aOBrbýßoB¢£ð~uÃ+îoo@u~rª<£bÃ:Uß+v/ozäÜýÃzýÄî>©ßÃ*Ã~_ßzO/ý>Ã.ðBÃãßZ©ob.>Co.uUäZCßã*+Ü©v~övà +b~ßuZäBrý££ðr<,+Bö|Ä,ð|~ÄîO_ÄÄå BCb~¢ýöaOîßrÄ:~OÃ¥rã OªühAu>+©|>ZÖzãb.ßÖBý__ä|o| ª.@/,¢@ÃœB:Ö ¢b>a©*UA©ðý.ro*ð©u+uî©ðüzhUu@hO©zOz:ßU£ Ãœ_ãßAßðÜðb©ua|ÃA Ã<ÃAAOB©~.ðOÃ/|AÃ¥hhbOZ /~b@/Z¢ª/<|O¢zÃ+ÖC/,ýªu£Brh.|üh.h+~/C~UZÃœzÖrä,.~,Ö bãö*ã+..Uorb: oAvÄzvoÃ¥hª©ãAÜÃß_AߣB|OaÖbÃoýh~vZäÄ*hÃ¥B>ooÄ ©ý*£Ã:¢oUßUªãUöU|aÃ¥aA,|ob £©öz>ðää ÖÃb/_@.A<¢C>îðãöhZÃZZ/O|,ßöuözzÖýîr@@~*>ª+b@üßÖÖB**£o~b _r©ÜChä*,a vZ¢.>aZZO+£oö¢@ÄåCoBð|zßÄ>ßO¢o,_ß+Ã~@|+äo,rÄãbÃhª/ýUuî,ÄýßÄýOC£AüB+|ööOzÖzð@+ªö©ÜÃ|roo åýüªÄä+©bÃoÃÖÃOO©U©>ðüä*+äAu>_:äßÜ<~ý <:+¢åßrärý~>îü<£.îC¢uãßoo>Zzîýrªr ÃœrCZBbo>£b¢a¢>+o*|:+B¢£u<+>åüuÜýz~Ov_CßA:ÃrÖ@oåßðâ£hãuh|åßÃ~v_.Z£ÃbzC¢uÖ/î+/îÄz>ÄüuªCä<*bÄ£ B:rOÃœ:Ã¥:ß<ßC,îÃðäÄ£O>uäZ ßoÃœuÄv,ýî£ýÄO£/ãä©uoBuuo_< b:ßä~îãöZBuBu/h_Ã¥zC¢,/z/ *bªaý©,vãüo+.¢/,Ã¥>Ozv,*@, o:éu>öã.ªav+ðZýÜîöâåÄOrª*ß,îðUýöCä~Z<äð|hvAZ¢/Aüz©@ab ÜÖ£ßvOä:ýAaßߢãÖAbÖbÖ/oðýîß/ªvÃýåÜb㢩ªÖÃÃZýZߣ,h|£/Uý~*ªÃß*,/ãÄzaöa_aC*:a+boo£Ov,Zb¢ZÃÃ¥rÃUîãv*vã|Ãvä£ãh:ZüU¢_O/b£býhßBavbßßÖr@r£Cuª<+zª_oª >v©|ßßrO+Cb<©ýßãA+UÜÜ~@z|öà <:ürÖÃÜßhvö+zaZýOhß,>Ö>ß*|_ðÃ*ýäCåÄðhãÄýuAÃÜ.ä:Öz_h/hzãÄöOãOhãbßvBU/z*ã .ão:bÃ+>Bܪrr|ÄßAýýüa@ã+üî>zªA:öÄßazh+£rß*b+Uä~Ä+/,z+äzÃ¥aÃœ,_.©£ Ãœo©/:hCzßðO¢h|ã>Cz*Ã¥<ýÃýß+OrA_äÖå|/bC>ý@îöb ©að£Ãb£üZ*>+ðîßÄå£ß|Boo¢. _O¢.ýß,O ß/@>üåå:@bbhuÃZ£UhäzU+@< Ã¥+ÃýÃ~aZ+häÃuÄ¢|*O <*ÜéîüßöCZC:,|~o+b,£ÃývCZßaßuÖårOaýC£ABÜÖboBa,Z£C:rZßÃÜ+>ª,BöaÄ+,ðv,~:> üªå¢ßOBÃ¥@*©Ö_~,>uª¢A£ýßÖ*ßÃBhÃ¥b©üäzOßh_z@>~ª*ößß@ÖOüã<ÃýÜhZA>aâvaßÃZuÃbbz@h.u,.üå|+ÄCßý+<Ã¥bvã*UzªuZ@¢Öãöý:rb,arhߪ|>bî*büoBãªuUrb ðîßîrýbrBZðý:©ö/ußÖUÄåU|:©hZ,uöåzÃvuAÄ+@ýÃUÖAO¢aÄoa::ãªA©u/@ãÜßä*b©Ü,Ä.>/uUA¢<_Zbh|uu<.ãªýÖ>Au~~.rÃo<Är~£ä¢rÄoO~U~_AoUb_ßr@~<Ã:rÃ¥<ß*hC*üaZÃ|*zh/ßov:©|.ohh+Zr¢Bð./zu ã:Cu~aÃ¥>>rhüÖ¢ Ãœ/Ãœ@a~båߣ@,+ÖaAÃ/+UÖbvößüZ©,BoCoC¢:r££b.> OB zªU:,@++|ÄoßÃbZ,<Ã<,uvC_ßbÃœ ãvÄBã>©©.ðâÃß_îz+üªÖaaªÃÄCA<ã Öb_zabýr+ªü|Aã£.ÃrU/CO|ßUC,C,¢rÄv+åÃUuîu,Ãœuhb/~ãbÃzv/ur|<Ãbå©äßÖ.Uz£üöO>zAb ö/Üß@|bà ðZbOzr>oa_@ü<ÃßhðåC>ßü.Oä¢büv+CßC.<üU<£Ã© Z<@+:Äü©ª©öO@üäåzÃo_î£/ÄãbUãå:U+ã<©ð£>o ý~Ãœ:äðî@B+Oö~h.£bß@.vö|*v<~*îåbCövÜî*ðîýbß@¢Üîª>h,UýZßîüUÃ_aýz:_,vvu Ö¢>C>ߢ£Ü©Ü+åýÜ*Azî©ÃýB*ߣß +~ü< ÃU©ö+ßbªvÃ+vb:>ÃO*ö*_£Ü@oZãazZrÃzbrÖB.©>äb.UÃbÖOz~OuACßA:hÃœBübZý_ÃüavÖ¢ÜÃ/>:u@ßB@©ÃÄBü©OvoZö¢|_ßß/ÄACÖð|ö._~¢ ßö*Ã|Z*|Ã¥|AÃœÃB:ÃhCåéßßÜýÜÖhÖÃ/b|ö* ªöav:u_oa aãBvv.Ãö£ah~Äß_rßOhörßÃhbrB¢u:U£Ö£Öðb>/a+¢Z OAuuÃU.*AbCrBörb bÄrÖ>ßbA¢ozÃC~~@,öbýååübî¢Ä__ãBZ,ÃZîb~ÃroOCBB¢î<@ÃÃaob/OÃhääC@>ßba*/Z©/ßUãßÄÜåüvÃuaähbh UBOöÄãB¢Ã Abv>C.ÃrA:äåaUAhªZzßB@à ÖCÃuBb©brUZa*ÖÖ+~AÄöýz~åã+A*©bð©>OÖýÄ@BüÜßÃÜüAßä_öUbßà /_ß+Äa ,oz¢@oaÖ£bðÃOr¢ßðß~OßÄßåäÖäz/îo,ü:,@<*@¢äÜZOhb|CßÖå_hã>Ã*/ÖÖzà Öî_ÜÄßB |zö b/¢ÃÃœrÖ<ÃaªUCöÃOA~Özo:_v~zãZÃ. UO@:vÄÃý||u¢ÃzZ£ÜCîZü_£o~Ã¥+o<*:ÖZ©*bª>/<*ªrÖöãßöZ£boßC*Ä_*Ã¥+ _@rC:*büubZÃ.ö+ Ã¥uÖB/äßZZöO ¢@U¢boßBý£<<Ãýbªß<,oý+£hCZî©Ãðß@Oà Ãߣ¢vhZ UÃv*:ßr>ß_a UÃ¥C>Ãœvh,bãüzý£+ßhäCaÄA.,äð:ä>/ýüo,bß©oãaaÃ¥v.Üö+ß/+*ü.ý¢u:Ä£äßvå£ãýoª|_hüaCaßÜý¢î|£/hbA|OÜä*ö@ürÃaª|ÜßÜuîu+özýß/ÖzäåÄoßåZz Ã+Ã¥+|C£*/o,Ãœ*£ä<ýB@Zzðh:Ã|OªÖOö~Zvߣ.o|£,h_ý:ßß@/C,b_îÄhBöý©*Ã¥~Uuß>bãrbã_åîO+oaîÜ©O¢Üäb+|£|:oÃ¥Z>_ZÜ£zÄ©Ub|_£a@Öððbî©Äö<*ÃC>r¢ª©£~,¢B,+~býð|r ,+bî¢@Bý¢ß~ß.îrr<ª:ååb¢å£_|<äÃÜ+vA Ö:Zýb|©üªbzü:,ã@zC / ÖoUbü¢Cðau@,|/ÃOª,zuCaã*~Cbao:vö~aýzbðCö_A~ãÜ|åöB ÄÄaurÃzî>ã|CÃœ_ö~ß_:/hÃZ+©B/a|aUCîßÖ_ð+ßvýo.v+/UbÃ¥rÖ >©ra/£_Czz >ª/röß,£/ÃO/üZaýUã+C*UîªU¢ÖCZßÄöÃßð©öuzv>_ ~ uuÃ/©zvðOüUÄßüzAZ+ªAuÖh+*Aa_C¢ßðzZa,A©ª>/A>ä©öCUýurOÄ|B:b*b¢zÃß_o ,@öðaªÖC~rUZÃ,ðÖ_î/¢rÖr| ©ªýrÄuüà |~zbrª.ªüîrß©ÃÃ_rîC@C£ ,ª*aÜîåüZª*ß ::ÃãuªÜZ*@ýðZ©@zãouðvî<ã~£ÄBððOzä+bÃrZz@äAbb*B>O<Äv<Öoöz@Ã*bêO©¢Ä©A|¢~_Ã¥~/ããÃ|*Ã./üBö~@BªbbÖ@hBÃ¥|UÃã<¢ãhêoÃC<ãoazzOr|Ãhhðö|_Ãœ*:*öv:Ã¥@Uß~ã+ .ßýCUåÖrßîÃý_|Ã|©Z~öUÄ,Or+Z>b@ª*r*Ä*ðãz©Ao¢/vZîzß©hZU/BÄ,ßîä~vCZZ ßrä*¢ßüðîBböðð<ü©.,zCÃœUýöCð:bÃœA*oð>Ã::Azz @a¢:åý,ª~ÄåýuAüä.>Ã¥@ãCbÃßý/ß@u+BýÜUU+Ãhvv_böªäCb<:ߪ<¢@oCrö|brZZaCðªÃÜýÃðÄ©*å©ÖZvOv~aÜä:>Ä.ZÃ|rbvÜð>ð@ êBCÃv+Ãã|CîBb<*/üäbv B|>ÃU//z ÃœOzv*boÄOZ|A+~+COýÃ~,ãäCO>@¢Aaðz_U ÄßßhZZU©ßÃZÃýC|b/ÃÄðö OBã__Ão*v>hU© +ä:zoob/îÜ_>:ö>¢ßz,,ªÄzÃÖ|@//ܪÖ:UÃ~u.ÜÜUÖrbýAurä£ÃßävÄ£_Ä|~£¢aCOßbuvî,,_ªhã@UÖÄ*z~ßBÜår@bA>äOh¢ÖbÃ¥rýýööUzZUCÃ¥CZüãU brA.îäÄräå@*:@B/+_Ä**¢_Ãœ<£b£ðÃ_aöß|_b,£ö_,îv~bª|ra_ã<äUßCÃ¥bãoåß_A*u<öýv_h£vvAo_ß*ä,Ä:ªb@ZvC*@ubO¢oßÃü:bÃœ,aýz'), (N'UvahbÜåª..C:'), (N'z+¢bý.Ã|.ZãýÃÃ.êâÃäBÃà ¢o|oÜ©ÃrhuåßZ¢b|ªÃU:ãÃîîÖabÖ@+Ãœ*ÜÖ*Uo,¢ªBÃœ_<@ä b|Ov*>v<Ã¥U£,Ü¢üÃÜ/_A@Zã,rB¢*br/,å©ýr*C.ä>v:ý@ýãýhBÖAýãßÜÄßbvåð.Ãßv>C¢Ü*©A©@vßãåuU£uü/.,bÃ¥u<_boý~ãÜOU<Ã*+ÖBýzz_üåîãauÃ:U,Ã¥/u.ZߪåÃð.A£¢Ã>Zäu*.bÖ Uª¢rhÖî,_Ãœ+A@ðbööãuåýßÃåOÃo.ÃöAa<Ã¥vÃý+ÃœväZ:,rz+*B£ßbo£ß|*¢Ö,ßb,à C:*a.@~büaÃ*ZÃäzßzBCýããBà +ª+<ßåÖbBäA Ãhuür¢BubðåBýÜz| vªv bhüÄ>uߪuªaZ:¢öåa£raÜÜ@/aü¢ÃðßÃä/Bã:ðåu@.Oã>OßZAãÃubr |CZBh,b~Ä~_ý*~,üBzaîB~ðavr©ªîu~©£B_ÃoãÃã:ßaä*vb£ßv|o/vCÃABÃüüAªÃ¢ ä~|Ã¥aßCahýUCßr©üb* ååýã>UÃrÖ:£å uA.:BðvÃœb.Ch/ðZ_zaüv*Ã:Ã¥Ãb¢v~*_>BðåßÜrÃ¥oB|ß:äÄb :©::êü>|_ÄAZýrÄäªA@A>ÖBhßOßðýaAaZßðåBß>ö,uU<ãäB*C~U©_züî+ ä/O|~@©AaoZãÜß_|£Z>ªZöb/ß,Ãœ+:ýäa>ÖöbÖߢÃßßäöbvß:hü£©,Öbð+ÖÜOÖz~azv Aã>ßߣÜß>Bh+@~zU> O¢ÖÄA©ab:ü>uã¢ßöߪ¢oãAªö_ßU+U~/bb©h£~zßßßÜOßzvv>~~ßê*>haßou.¢ßå_.hO>h+<ßß*bäߣv_ÖߣßÃ<Ãoý£Üo~.OüzvÃ¥hBa:u åßa:Zroå©©ãobßö,a@>~zu,OB__Öh:à /:ä©ÃÄÄ/¢Zîà ßu<öÃb>ö£a£,ß*é,Örð>êðZ£ZßböA ©ãZ bß,,U,ß:rvî*üÜu_Ãßßbª_©bÜÃîÃü Ãüb.ªª*ßÃCöoÃaÖöãvÄ>¢åAuÄ>hzª|ðß_ðßOävUbã>ü>@*zßýZÃoU~vhzðbOzª|OÖß *£+öZý+~/.r@<ãrzBßÜ_ü©£åörbÖUöÜÃÃAüo¢*.oäýßÃB,~ CZ:+ýU*Ãý¢:Ãœ:Ã¥AÃÖ.ª©ýãðß_ªÃ£ö<,Ö>©voo Uv¢zC¢¢C/bªÄü+|*ãbÃ<Z>*o¢uA_höbö/BÄãB>,ÃB:î:¢åý*+î@ªvb ¢rüÄAÃCö~+öö,ÃÄå>¢+.ã~Ã¥_Öu©Ou.:Ã*Öb£hÃœ+bü> BÃ𪩣aAüå©Ü//î*~ÖAîÃZ.|b¢.<£öüöbÃœU:Crßh£,bªv,Ãý/¢<ßu,aZߪÖåo©@b:|ãO:u,öåUzußZ©å.bAö©ßBZAî¢oªðî>@Üýröý*,ªh>>azüoÃAÄÃßrÃ|AÃœ: Bðr¢* îÄ|b<<£/¢ÖCö¢ÃüîCÖ|:>BðÃ:bý+ObÃýü.|©Ö ß©¢bîö|üüBzb~hBCߣÃäbã@vU|ahýroZhÜöîß/rýCv<@,@ÜÖ,+ýüÜ~Zªö+îrUßðbðÖ+ohzà A.@ð.Üß>ar,bv:o+¢bAߣÃbà .ª¢h¢¢Béö+b*ro|,Ob.ãß<ªa_Bvä© +ߪýOo*,|Z,~@ÃœZvãåUU@aZ>ªCAhb@ãßýªývÖrü.bÜÖa+aCo äßý_ vB@hÃœhoÃœb©ü+*Ãß*~ãA*Bü©£@ªðå*åÜ>vîßÃãðrÖÖü/bAa©+*üvüüOUz/ä¢OrZ/Oå©£vªC_~ª@ð|@+¢ß@B©>zýZa|<_vO|îu/z:ªzÃ~CÜãvCU¢Öb_büaß:Ö@,£ÃC~v.bªÄCuðA>ß@_Ä<ÄoÖðÃ>ÄCªî/ý_ör©ý:_>/r@_>@h@|h£r.r+O_:.rvUhýÜub:ðhÖßv+ãhÄÃz/u>Uz|Ã*OÄ+ÖýZbÃ¥/äãb~ü_ZîÖãöb+u<ßhüüÖaß.BäîÖ_+Ãœ@O<,ZåÃÄ<©u |ÃÖzß<îüãzCh.A.üÄbßÃ_ü Ö|üð~C.>Z_©vÃ*|BZ£,ðrb*üv:Äý/Ã¥<Ãœ~,ýÃã_zä.ßãªÖÖâoö@BhbCÃuý©h,/b,båÃZ*ßvà _>+UÖu>ÄBã<++¢@Zz@ãäO:ýÖ/_äb/v ©Üܪ_Ã::ÖO.z~~AÃUoabz.ähB@¢ßu+/Zã@ߪ~Aý_äbbÃÖo.O,ãªî/uAUî¢@AC£U,Ãh:bÖ/BuOz,.v¢îbrÃÃzð|ã£/rü*¢Cð¢baîCä|v©o/Ãœ~o+oCvrÖÜîo@äOhÜÜ©ð ,,Ö UÄßu£.bo<ÃœU>bbãb.*hÃð>bðÄÜ<ýUB,r,bî.<ýC+ßaAbð£ÃÃããðAvA.ãå@äðBð,,bBah.ª/UÖîð<üýbbÖh,O*ö+£OÖ~C>vÃå:ßoö@rABÃ+ü£aüa oãßvB> OÄoÄ|:UhðbÄa/vß|/©Üã*ªÜr@ßOö£/.Üü<ýu+><£rÄÃ/Ö/üz|©ÜåUª:,:ubã.ääv.bß©r.@äz_Ä:<:ßäߢã<¢CUð_| ÃÃýb ä:aĪZChoð~Ãåýîý/rAÃœa,£zßåh¢bßC <+ªa/BU>@ÃzÄ@|b|© Z_öZ <ßÄîÄo+Ã¥_*ö@vzbðÜUã|üÖ>~+ObCrÃO_*b¢üîv*_OÜÜöª/Aa.åð£äª@ ãuÃ¥A:vÃßo,Or©BA@îZ+rü|ýöhAÄ ß_©Ö_zCÃ+zBðBüÜrUß*zä,Ö~u *Zuöå._+ý¢Ã/©*ü h~r:CýÜßà Ã,<.ÃœB@uöã<./©,Äýo<ßoý @vo+Ãœr+>/v|Ãhî|ä¢î:,häÄo_b,a¢ äoÄböoªÄÖa~*AoäöUß.zãðÃ~r£_aãÃß+äB,,abö'), ('h:ßÜß|Z~ß|~ >öÖooÃ/Ã¥+O+_/v~©/+ãÄ/vu _/aaö u©zbä_uBb©/ᦁÃ,ܪa|oß/zã/Z.ªÃÃ.öAüÄU+.b/ ovª£v~o£,ý+o,uýu/vß< öAÃ¥|ýAh,rühß>vbuÃœAß:b*.~Ã¥|üÃÖv.ßh, _£@ h |£ßÖ¢¢.,ãahýýãÖ+/îC>ü:ê.:rüoÖA|Cå¢ãoÄ/ObZðUZão|~Ouªr¢*Bðr*o/:Ubý~äBrîrÄ<ö/©_< |Z¢+ý_.*<@@îü+vêbãUÃüb+©ü>CUr©|/äÜåßbU_|U,|©aU*urᛎU£ªuvÄaAzBZãü:B~+ö_ßZ©:~>éÃoÃ¥b+bãruO£_+u@vhBÃÃ_oÖãvZß.|r'), (N''), (0x1A0BEC66F89701C5BF23A683CB4F47CB7115B598E3CD4F89528BDF6B9086CA95ED897115611686F38D26F520F53E880639B929525D47504DBC62146DB795353958109541DE316A5B8EC20ABDD82E931403D832D65C7738A5392459FE01193BF7F0BCC7E5A84628074FCEC49B3D93758DCE006ADE635FDCE0D8F008B9D86B59758613CC1B67AE6BBCB02A868EB39D68A5AECC3000), (null), (0x90DFE60DB73E6E2FE4744E1429C659251F95AE2E38D94E2D3A88620B0B3A59C6297E3C3C81A1B37E41FBA21965883EDF55A6106B002E5CB791B9D22FDB6323A91B88EBAB8A1CA47EE12FEC3D3634C8B24983B5652AEDC5FB2284ABC8CE84A2DED7F9FEDC9D93543801918AD0411F805CF120E558ADBE7E2DC2F0880671DCB05C8D0E653D35EB14B62E7D639863F4B903034ED6AE9E4A31197AD11AAD0A4EC725E12D4333B94227060B2E29305AE6CACD368502220501BD42DD4BC364D067ACE0B53EB635B18549C127D0A26F2100BF93074D76844CA41FE06F00566D7FC235A482497A1B2F941CB13C41FA345E4E21DC8C2F5D83F02894101ED6C5B02FDB42659BFEEDD886A3647230C5470BAAEB8121DF79E14F65B1B359B469FD59CF6B8160FF95995F604955E9CBEA522BE089663354A3D1B5FAF2FFE94B93231DA50BA2C543E70B155121C09523F7847A5F88792B02CA042B9ACC660C96AF14CC263843BF488DE7F97D51E132E23B91026E848AC21AF71ADB07762A7781FF7EA10DF46FEAB3C432D1A17FAEB1E8D1495E3A639D112551B22F1E68B8D1636F787DD23F25EECCA64FAA51B8219A4868F2352DCB3D1E616C7CBB413FCC4B0B616E320731DEA9AB5A929313F2C06C3017E7B67582A397315A1B65C369AC8DDA039FEF4AEF921689498AD339A90A6FAC0F8B295816D588BDD600AD1579E541AD05B90F53D0224184D02C2CF8D05E8850ACB9B3DE8334C42E163273EEE5001063482534EFFA1BDBED4AA587E9A990EC78775D69BF31632AD0F5E13D9EAE529FCF1BC8B0AB29985591DDC694DEADDA858645FA7687975031E4FA64FA18DD3D3EF705B7CEE0DF414FDE07D8E26BCF4C221B5BB659B3DB1838CA96CBB0C59E3DB3A0879CD8F50BA4A603AB987FBE6EC615AE41DEBC27E38B1BEC7E03491491893FCA2441E432732C0FB71055074398795CD0B60184C0808CBCFC80EC77085A92712258B49A2DE1E23A14CF05178E83D85404A7795D8F057F4A9884E8B187B5075C7DE3E5EBE3DF2EEED3C76FF17A752E78A8977261E134E21CD86A01A8F930B25FC7A999AA9DED7025788A8AC8968ECF23556F09EF43A57A4801C81279DE86F5A2141029D1DB84DABB274CE856AA1A86499ADD528927C31B212E50A8D5DAF646F295E7B48565FE48D1954EC7F6BD249EE742C9DF00336B7B50F407A28ADB05E13105F6C1C26600E49B9581F4D9FB24640AB2C193101746BE296C63915E5CBEF5906C96F0C662DC8141E5436BB277A255D0A297D71A72D01ABF379755026F863ED78B646C64339EA7D640512BD3DA0CB1CA0DC0BBC4E6DA1D9C7C318FCB867ED15E0594261335F09C04F001DA20A546E42AE68BF5AECA7AF0B046D0E8020EDC4FC17FCCCE46E69E941C24B6D4E400FDF7354C64E5FB8822948AA375CD65089AF514B218A0D8789E4447F6D88A14A50CB049D8B2B5AAF753385C3843A271D02F148AC0C031E75C1EBDAE1F9D05B0987FE597C4848C55E44A1C5EDF439F35FBD277C7C4FF53E5DAC8ECBAF5078A594E88C4B85E0BAC4CA2BEA675A3D307187E88B24C263EEC982CFFBCFB97D260DDBFC20F577FE6D6F0262A240559DD4207C1D43B6D543D33109C2B8C5E4EB1B5D05EC8B5E0C3B09898B1C226FB19E63E4EBDB43AC297F288828FFEBA535A78A1757453A690276144103BA3BC911738F7B5EC3EA19A76F2396B403351C4F5443D3821B186C540AD265B702A87F436F66A560704671CD607FE821A3A50F3107F1AF665837065B131753F1746294C6B443549C9FABCF1DD21621AB304AA055D324AF10F918EB38605A4D68F270490DDB217D605072A16C22918432055B2AD866FE1E4FB383CD9B682C2C355E661B61CD23C00ECD4005607342EE6784B923153F7501F462094A5753D20834467C0DCC762264E19B1C0B16F8BDCC70A56616BEF91705E96416FFC3E968BAFB47D11A073511E16244317A1369EB0BA43CC9B1FDCB593B2F6624686F22A10822511FCF27A3C53B8384A46AB79CE27F791B5B971FB6CD3FFE95EA9110A9823F933957B25A1BD400678E2E6916EE739283B4FF43C709F87B93EFD081B9242AEA0274D78E4520156D375B2F818854191012581D6BBA3E689940EC2E7A4B4247435344669216F55D539F820C7BDA66F33FC6B07F5106CF2FC40C3E4D5901AB11F503EC3E33ED77092D0AC9CC2821FCBEE9F8EEB38AD2F63C94249295D8B7F451F4601767FE38BF424FB742464D0307921F7F635012E797121DBF9A1F5AE130751677D7B81A84C0A139AC73D390AFEF912D00865944943F0CD9055A3E9EAFF75E86CD3FD52B4F878ABEB2267673B3716DC008F24A6AD7207238CADF052A821299A5155CC3701A65DD78FBAA927DC8991583FC7E85BDACF3AFACBD9C606082502C9F9CC15E66BDEDA5A314D16F3C9E047021C9813E139CDBF821AD26B28E057CF69B7DF2E0F74ABED60EC8D2A8DB94731EB91C3EA701221902B0D92CB9972B27ADA7EAC3BE9B2378E71AAB2F4ABA332C9D3A180961D6C5F57954F0202E1DF54ED3A134F0E0C0B47385A3479C55F2DE588DAC9F8F7F11B5C6D1E55A699AF35AC9156C4BA975323BCC759483CE8F399F7686A7A2718E65CFC1EB6E1EFB765AE882488E76F9B734D34B70C319EA9DF747A855D3E2E350D94ABF9C89BE071330461AABF18600C2A5CF41D45700BB5BD523F42676A5A277F5316F33C75D2D76CC38307CFF4EAC7136E5A014911F09D88F63C765C9E09C8AA3A2B6B016CCFB5891DB082EC03E5C967782EF91058DE6D63796B46385C7BCEB9BA5D94C97FC5A79EA4772C616EB08410730FE46F10B8525CBD088801897C2DA1E1C932A65000E8B2875B6BE0B10CF4C8E735C54C975FA8020A380B763DA614284A8A80A57EDDBF732631E8B54C71AAB113BF1954B6E00A8220309B18F47274E1464396278C4F4A097652266577F3B5998E5A627D8CC0716980FD844E41A77EB4BD066E09DA8324C37510DE64BAA50B2C7A028A990FF65486D22DA68ECBFCC7CED371A77085ABBF0A369E087CE20DAEDBF258D33F1DE5A5C6B2E737ACDC96F878480F9049FD9AA6CF437F6370EED8A4C57FCB9B722988B1EECCE1BD9D74122E9FA68F33D37C65DD58B104FC9D8234D7D942722D10FB864FBF5DA27D1BDD085A3051C4CA5EA4D14819ED43C1248C146C9709E45B01E41DA3203F7475DAE7C27AA8A9CB4CBE69793471291323B8C42B334835E511F8AD584B3320AA1F305B6D322BC8187BC0C7AE2D90AFE9D7D1F9EB5B14402DA402B082FA5080189DBF5A0315BCE1F8F0ACAF728187B88049C3817A39344F0AF02EC9307A451D2A40AE106E36ABD41BEF01FBAE64CDAB1C492F3936CF05DE686F4F13E7F2B17EAA8E8432D2774A4A9DEF658A3839A0A52282ACE64A0CE65B3ACFA7FEE798ED293E83511FDF9BD9A5FFE59B47697BA62FCEA9F16446CB339DA829F702CF4B6305023C4CB4E881C586A906E664719FF1BF29782F3DA688E2724FB377B6A4D6D6B38295442D2EF1464DE36ABA3FE4CF2B093738D9571C255E7959D965340A0FE2D23032E2DB5AC4903732E1593BCEA28E80886E7F6BFD7F975C37CBD3558C1143D488E70FB1ED50AE73A7A1243ACC22ABB64BE4AC9B9076D5B19B85A48FF03BAA209E84B3E693DC9338BF0BC35B5A5D90141F1C09A765A74411125D1667AB1E836CF6049C476FC5236E5174DC84B279573EF49070D33102BBF640A2D335C62B8CA088576455C049A559F99A56F0CBBF5E9806D8731BAEB03AF449A506CCF1EEA826E83BFC5B15017DAAEA16D997ACCA2A80433A2EEEB870F2D71C700C1A43D8680BF2300890C30383055AC83098D6A3477E7B8589B6BFBA6D7748243EA4F4626712AECEA57BC299BD40B72993EF3F590179288E9FBD4FB14B37C290489EC4DF10F7601EEA08FECCBCE1C848FF95267E38EE23C47C66C3AAC3FC826DB931511F7BD8199C8F216FF87B5CD1BDF406B1B6114458597AFF62A934B55BED8591138A8FA9CD277C8AEF167F2A491F9405B5BC4BCC5C74D8F8A47B756F68D9C58273E949472D4B38893A865541DA4FB543142EFF9EA2B9359EB1970452B20C221551FCB760D64DD76A84C192D51F971E55C5315B39D927DFB9B4AA959647E6D72D643FF0DD97556CC756951AE0275F7E1A79AF8C80B1E83C2A1DFEAB2BB741239DEA6470E0A640BD6FC493E2430CFE92542C7A1C9859567C7B02C6C099AA410F15727CF6C2EF9E7438F11DBB1D05F81D1E6B56FF3D248B4393E8F4DDE08023C48384CDD18F08CF658D06E4A63C9A5E7509A8A12D5441D2F0E73962DAFAC093B8CD58389938278D169CF1713640E407F9897ED337DFF67041B1DCEA56A5F46ACC732CD8E462C53DE21A8B9163D09CB0023269517BED5BD9D7E7F6E75B3D3771A786A5C3140C2296C441F11D53650D71152CE7243BA3EEDF175201FC6BDDE2A5E31AE9DC2AD89CF60FD38C3AFC3E8572DA85D22E5512350497C6ABC10A262AE75E4B39397C30463C90F0146817B4E3D8CD8F21E60BB34FD0E4E545642DDAEBE9A8A5DCB0054BF6A93E959E64FECDECE3E2D2F37B0443DBAAFB695596EBE20FB5042BBF71D832D3829878A87615EAD217F862815AE770E465C931B49CF65FBE5C85E95FD20D7B0BAFFF71E28C9A659511963D9E8960B5CE94465AA7A67E378B39B94CF02C8B00097C57D25B758D58CA639CA305B8C035FCD01ACA8BB3D36431C7E5A9D24E756886963421318E5A5807EE90440ADB32D37884502011C07455A9F2A09390E3867BEE331D6F849E036E75C2C39C238F5A559512304EFE5557C521DE783FEDC7C724681455D7BEC24ED980E2AA4EFDD73219984AFD7DB3387C98DB574DA526C480AEFB9E340E398397D2C356CD1CAB08C849AB5FA6A2C949713097BCFB6675A8B3BC61FB535EA223DF15B32AB95C6A60EDD38E03F9C71DDEE5B12D04767C87305D1BA211BAAFB56AA6887F91EF9F8F14C537CF28D871AEEC9E8316A2309DAC628D82CD9EB958A53D1E235D71478BEE4521193F3FAD5F58EB6CB6723799123A08DB1C036DD2F15A6C91910AB4143CA41294D081175E6DB52D29E13203E66EA30BE954962B87817330BED2AE1C55A4D72F115FA2C99122AA6E66D644F0BE578622EDFECABFA6798A135C50588BBE99D8850902F186CCDA7AC6AA28C4B13C8371674C8B2E56D9178998D48E6D40CA1EAFCDFDBEE6BB65FF56138403157DB4D9D6D9DFF13F326A81ABF27959B23D6D39FC8C79F6B47E9CB5014D351BD2D5020BE4FBB79361D8DE7D637C13F4420B4D19A64A078904BD24583C29EFF2FD4FAFD5EF6E75B685D9D823ADFC93376AA773F6FF1C7487CE790626D65E5737E8EC7F13CD3D04D3969793CC72E3DB0829EDEE95B5F9F2E0DA270676674EDF2682A13AC17C806A2CA2A05F6888A815EB9DFEFDE970C181EFF99F38A5368D6C47B76C4AD1A81A8CA982C1F21599895832121BD96951F5B6C01F4BC7DD47C5F5143318B11C5D444282715467AECF6B556F4606931BB403F5C1B68AB15C53AF61BCCCDDE281D83CD5CED956F7FD8E07F1B3F657964132DA603023EF65D392E52FC2F2AAE2F189D4970A31C5425D0BF733AF99FD66FB19208AF17CB15EE9D6023BF327340BE324FF2A22C08B106D9802242BBCB539947E33A9D21FF174D875AD342F894E36D7EC4F8B99D3443B8D101D597A8C322D20C8A674F38B38C4328A52AC1257E0E349CC4D3E6D2AA0C03AF71BC20298FA4B43801367E3DA424BB48B580F819828362F3A0FAD3FF3BFF627E539FC7076C19A8F0669924379006F8A028AE2D1903FA2CEE493C8884D0B4FC01D3FFDA046DB3DC9BE807A2E96F2B539A0223D68DD2497A6972D8BE3F91141FA19D1263A03CE44264D181310C47337F2DD8EE82ACEE6E2F8A8560818505ACFAC3E7F15C5CB7B36D1DE161BC41086E224F598056B29172C33EE2E92ACC62BD6F24967D2445E72266157174BB8CA1DE72174E423B75463832653E1D69DE98A0BB23F297BA9B49DC58272A31412CB7368D0467138E1081E9DE5E3ABF07C9C8878CC0C9978A0A23E6DD61EA045B04F715BE0790557785229AA218B96C508AC49E6E92A470532FBC72E070361C368D9EC95725010039631007AE2EE57140C786429D5B95C85086B29E5B1D64F74F06642489F0053B89C454FB72ACC2343A3B2228F9F38EDAE7C668D07272B52BFE18C8A7CAC0F750C25AC8D8F6AA45B3C48E541FEB4C0D4B77893CB38724C9070F390D59D41A796943D166AF3AA5E44D70A51BF41EA530B21B8D20318433D99D81B1D9BD9CEBEFAA04FACC19E55E10C1A4FF32D218D4F859F84B4E46EA37D50FF7D91D88DC26A084C561EF23D926DCBD7C5E9C94F0F774BCB97FB541AD98CFDD15BC120C4097F57E5EAE1CB6F5D480D17E80DA8BAB400F005460CF6C715EE72CA2020E1D04C07CD4692E3652EACDC6E4FEE3C31CCE3431D5AD11B7EFC8890CFFC6F004E3D663CCBE13F6127D09BC159699EA7D8D8BCA5E6DD0286FF3188D1BE021368BEAB8E31E9B2704F8C811B4DBF0FC1145EE1B7F73FC919703ADF3C9A596EA325BC3303ADDB6DBE25676D1964C2B5C7F06F7372DD4A1C28F5911DF60975D6F61EDEF5908B0C1339F122918FD2B0B5AD84174C2BE5FBC6DB9F0A0D1CBD76B4B09177FA86CC243BE35B3A81BAB88C5644DC7071F229AA1022171AF181FEF77B7A6EE1FE5BB52EE05FDB68CFAA7A0C2212B4C83F4D04C287E666D86EB233BAE464BF064CD68EFA8FAE8F1117C0DB66A70BF7DECC36B72E76AB5A17F5DDBF2E2C20846AEB74BF4B84B93991BEF2ABC70AFF3063BA55EDAEAD9090A07C7605B2EE60E5F63B717A334BAC5A13FC25708300930CF5AC5C74D633D5BD5AE41FCF0DB487A25D0CB48B9985FD170DFBDAB287200C9FE9690F0692EC0FC366B31F4F2CDD4C5E758312764C087370AE4466DB5823353AD77FE5A3A4801071FDF124E665AEEB30AE7B3C040D9653E0F69F574D85336A427DE577ACF7A8BAF472A1785AE38D0A0059352CDDE6312C402C05AD0429C2EBC987E16880363E3905C147916B1DF9FD699457F350078D5C4CB83780F2FBB5CBAFB6AED301248AC91BFC261C9EA0C0233308436FD1CE9BC2F9851CC7FFBE470A0B7CE1B56E25FB440A8DD853E171BDACF7134DE9B746F9E11BECD97C08C3CA5DB51C1022BE0BB40D0CFF6544F547E188C870CFEB715D52C5820099824C7E3B47C27B9EC4609AEDEB5F3FDDB8E0B5EBD40B51B498F3DFEB58C94B9FBD7232C18EC41D817AA81C272D82E48B31809AE4CC15C576FACAA254E38F46FB15FB2F792D7E4FF4C234702BEF2A86160E53BAD82F67D2A8ACBBC6C321C99DEA62201232526A5EB331A62198A49A87D0438C4590D56ECBAE2886CD72B78BD2F89786C8CE1854C3A4F507A789453A041234F67F95840D15F4556409CB9DEBFBA5D328011DD1B8B8EFC8A09ACEC74269EE82BA3DC10C3D748971D379B34BF707090C01B61C39E6407C3E8FCCE372472D13FB1B49E2AD399895B477ACFD3E04A4D19990C1C58C4CB49B79C1837C71901729A666B82FAD255BD2682068C139433D39EBFA4AE2856787AE66AE68EBB61C2423608256D84B74237434EF5C6BE4F36136844990764634A43EDF0AC9FFBC6F1C4CFB4461B6EC64EE76D6D6AD950B1BC9734C32676C8BADDD2BDE18F940AB24B7C5D3106F9F91AA49205B199F6F870E33C34055B38908AFC04E6736D8D46AADCBB21EE7C2FAAB29E1A1E84611710D6DA3CFE536FF55702EBC234F21385BD275B5AE4EED51A04C3818177311A0C19E4E40FA9209EF34AD7541F02B9EAB89F186CF73916322201B0382AC1DE8E25F8DFA8500E03DC8C8868000D9AB6174AE8D8E25EC422D303B2C20DE8F864216C492E2623119AAA8B3BE06EC10624975BA8ED41F8FC2F51D5FC949D4C05F384144693B46C8FE4395E2E5722E3B411FD8E2AA2400B22287029DC50267CFD5E75486C5A7A62702ACBB4B3F3DAA50C7E11EA971F1163A378F21E239A903FCDBC60CFD1EA8769979B1E0FE68B472E5DCB1D6E3E4BD5DE4D1194E3586C4ED59A9BF707930AC321F6B8430BF1117D1821C3C0587D31F171D68282B04594013B5C38654A944F9B42F7FB6775F8D9ED2B947CB1849BE668689A7521108812DC52B717BFB8AC3283E2387D6081CA7B890C95571BD8E27C9F65D00CB01F2E8ACAE51F14CED11A247F61E8DF5C2E75E6AE2EFC147B20F703703A8849E8AF8274B3ADB27B62A5ACA7F270E7A9E0131060FFF95E81130A1F99EE1BA49458C04BCFEF741BBE7BFA73F8725421FA495D235D1A1759FF40F151B99E189D5701184F222517BA6C0761F4F575661ECEE8155090E8477A41765C7EFE226220536D2CF75A04FFC53192B755B8126479EAD282C178C80C6EB9AE0DABD898CC49A541A198487EB4C9E8402EFE30F1B22F11D2941BAF90A79B50CE3DBBF743FC98C67DB07670DC317C1DB8D928A90E2DC7EBEE9A0604A09A049A06377A3108D294538637B3314BAE35A1180DE6C77EF2429065C008B9F68425D3ABDC6A94B73B04E634D512D67A96A0305454ECA2B34D1B13E4D9DB48C9EA6CF201DF856F33A0F9DCF8F082A9DF7C25DF1FC855919783206EB156BFDD6FCC2C4A6810D49B01310CB35B1FA9B2BA614478B40C28F194CB5A8EBF16ADECE12C7D3CD43841BEA78ACDEECB923687D96DB45002471953932AB59CB645EBEA931FD23E927CDE822F85D1293E4A260284D2A541625DDAAA031999B982A50851AEE34BBBC007F56C8F22208C65F01548F4B307E3A09A783545283B78D3250F7A8D8F8A5AFE7A328CDD38C2402D4E3402F450B4CF9D14A1046B166697CC7C996A22A60EE675CA4A8A707B0667D83807F6E4287472603FED68DE75EFE803AAC060AF581D774F5D9D3A063A5F120E493C330E7FB393F816F9F2C89617FFDA6276D5BAA5C8701A80A7968B3A7C35E0CB6A8539BCD983F72C68886E2ABEB935AD6F93C389676880BC187DD81D18BD9AC4120D3B82B61D88E2DE9E3D3011FFD1FE50EDDAD862575402048D946BBBDA13AAED9A18A18DB2E7421AD0AAD92B40AA289BE9BC2AE2B251BAB9298E38792D37048A924277D73060AE0698CD91BC8AD6B3D37BCFD21DE8C82B485DF85424AEC8FDA9965E990E22416B791E2459F4CFFE2E52CA550D5D54E691CA172F89481C7967CFDFE8163C4DB5B12A64590FC47E36886FCA016A49CB9044BFBCCEE6F2C8135C94CC8A14D7D7E20514A3D2E90BD6DD5BE0A7197E1B1F1E043F93667F7ECEBE6240FC7B07E411B087D7FC5595E8A748D8EF73065BAEA54185AE85E53471628645F560A80F6BD567CEE691961EB9781B985A9D900BC852B3ABBAE5596E3C7C1665661FA0780F496D0A1B37651D0F22CC266A4CE9E3D28A8D92BCFC44767BF9927A8B20A8A9D79389112085F080EDA6AC982932F3EF922292EB820DCB12F4E69E11A4FA91DE7A125EC6C3C8B34C89FCB5064FBC5D4905A2D8589DBD17C9D8762C39F7EEDBE314CE1E06D42D1BC96F56619558C4C33899450BF2224940BCFA84FE5DAC8944AB10C1F181AE4664D8870EE9375B827103A2F390A2D2E9C0CB8D511C4F3ECE2CE601C67486C3418A52D0336B136019616813EAAAB8E891C8370126044D3A25A9C8E1F325851DEA3061694DC29F7EAD6B73FFA42B442373FD6FFE3D85AD4D4D28BA99A2316CE3DC5A39AA394FAADF28C853BA804D85FA65957E05B596D06493242C251805CC7C0E802349F199FA245290D57521E2BCFF92C0341CB3672E4589C517052375C722FBD7BC001A4BF8DBAB59A324B15B32B0772C9247D1BFB8A761EDC03C72E4F0ECD9B2894A26ACD556D7586169B409842E82568E06E37F413C1F149E3C7BCC58B658C64B0ED1F889CA473B70794E5EE36869A1AA2C56F9F95A614D2B121EA8DB0B0FBB00FDBE754C99DCC3BFA7FED7EDC02135C2DA123C5F6ECCE0AD84CD67BBAE506569934DF5B9F455004F933A416B996F6AF0D8D600F8D35BA220CDD7C7DC65080147996E5A723B8BDE8501ECCC247B8504256276D2D85F7C8637ABC4EC1C8D33EA9B38F9C22B14E8B55CF77BE6F69F7DA538C3A269EE2538F81CD812D6669FC207CDF220FB71B2D91079C185D0E3859FA83E2FA358EAD9FC65F001A552F2125EBD357418F46E722375EA91F02CAF581487387A9846EC691CF405CB0B701D861E6762C8AB6F7CAB39BBFC3D7E48D9DFC697FD1E1A877A17D0CC5714FEA376B368648388B9D6BCA51A9D30EC4ABEFAD41A26046372FF6B86ED5AF7DF0857AC963538C519C54115EFDB58037D568DCD11D182FAC8AF134078F8FCAB6EEEED9CB2F09AA701E9E10EC90014881AEBFE305F8DD5FD855CD3F721F85C10D8A5B700FDBB408CBBD6BB37F07421B88A8B258D0ABC4BD108E017561C9385199DC0362359039A6F9B618478C2AE0D112B1B6CA6C2CF162C59D6080DA3EA701851A19A304E0E6F86E0C5F19927D30E5AE3062AF126DE46DEAA09C9730B9CCBA0F16C272113DCD32CBBE5C60CDD8CF486D7AD1AADBF7EE1735ACB863434FC8B540A4097BBBBED4716330E45411849F12D1532AB5E721DE1828AA3D648469EE7CF6A62029CE538DAFA56047AB139A06B00CA691F02412CD1EC5F15310806FECF941685D6A6476437DC67A0F86DA33048DA48C58DED7FE57E4D90163DCFF7C2E35734D69AB3C9B4C95631429AA02464391ECC66CF4170E21431079916213667D494CD9138DC959510840C37BC3D4ADE292BED1F03910391E652C259AC309E982FC96E05D2833B6C7937463B454935E6E6397FFA44176443912BBAD60A3BF8EFF56407E2CF44FB95E07095CC4AC85CAD2CEB7362B0A44408652A74B6C855524D3E6645D1314317A14DDA09D37197F8C8CF1DB92EC8862F412FFF8DA4D044CD9B1E588DE4727B6BD9C3C224E6AA7096CD31ABE7BA9C2374B84704B131C572C1090C6EB5190A045653A1EF6AF6614896BF68B063345D12FEFAE3D5AD7DCA3A1451011BDA3BBB7DC32D559418BCC87E46FE6E01D9050F9CABF97FCA352466D89977CB09F5456E5AF3EAFD45EEC8FA3222759EAF0FB8611F51647FD0CBF1489EB67CFAA0E1CE790190030DEE07B9BDD30F3DA7BF95C7D8D116BBA890D59D9F02926E8F61CE594053FC9D0EFCAA730797B69CD18E4988F8FE94299A3615E83BF2740B4BA93A4C04A5ED43C308B8DC2693B410EA38BC10B9196590DDA4CF1A4E14611C88AF375E6D6A982B9105C5E035C7F2F67204FDF33653423243997E5FE6D2F5AEA7AC53875C65A37FA0907FA343756B15B1C89849166DD6255), (0x3FC3844CE00274889646BAA1C518E52A5E39EEECE3E68AE2E3ABC8849D62E2A575AEF83685BB1932C3CD1A1561E8BF7980B2041BE164C95939A2683539EFEB3463152C1720AFA5A31FBC2915CB7580FBEC4F04EA5EC7C310E49EFDE252E4F9D3E2E5B14CBBA759D10D60FB253AB38DC3216D49E9EB01D59C511B3281B1C2513BC35533E5C3333F44F632DDFDCB9ED6301139C0E49B0FE8E11014FA9F74D81F4A0FC062E480A7FFEE2D04F3B823D8D1B345016F77016CA0B36D52D5AF399FCF1E1392EE0A3CF1B06A3AD2B6961C2FBD3842465A7368A848A21FAF762DD150B48E34D4A590E9C6775351053D2EB609963E959D6CF2455CB56A4A4BEB8C7A8398E91E286147892C4E7CCE0621636A19EC1618389834E3C248D81F3A469DDBEAD9CD6C53108DA74EB4684EF0233E3A51FF305FD47442EB64055BDF89284EE6B0A0E42D53F717085E6ECA832FE5F39E099DCD3A153E067696E2074DB4AD1E2665829E4F3F11E65AE8270166A9BFBB7F12BDD5EC5A13D0729A6D9671EFC953B050A41DAD47A45EF8B67252EE3DA0CCD726873BF7D731CB51B22BB5D27B756A1FD3501605A10E386D5EDD36E8C1E135FAA0BE4A688E5CD81ED9CBFA1BEF8C7C4007331AEC89C636184FCD98F9FBE390D0F5BB31BD2B02907777F72CD5131C7ED261F5E08EC74970D9883219C0C3DE22F53B2A26345BBF1505A2A374919A6004324FC69806030208AC4A5734F8E9D0B399D4369AE9F64A76A2DFDAEB23D4DE3F272EE671FC461CF238217AE9038A1D1BD1EFDBBC63C51A3B044FF6262816E4D76C180DCA035FB652B84362C77C617317C2BF1933F821DB6213AA6CAD4FF5CA223CA27DEB7D5218723988041F6353BFA3DCDE6468FCB0DF4A3CABB658F30903C3783F8AD9E4879A6FA6A7FA6F1DBBFEC0EBC8D0709062258CC332AFD19CC07E308541A723C9E6BF5444F5C154B66F2D80ACF66C2A389232161AFE16B1D8C8D3E629CAE9DC14DAF705097C2C9BA0D0D553052F25A55354F7F30F9008CACF0D7B7C21DB2BEC85516BD2FF6721BC6696764A28C2ABA9A32D93D5D2F6CC84D12C35FB00AF79C4A4E9CEB4C353A6EB323B8D7819BEA10D62D2D9F44756198F84E700D23225BBB61CB1A53FF4F7E55086A7A29669546A138A28992ED6857D4ECF3E30DC52D3B80D80D65B681862186BEC89), ('40862437-f189-4472-8a75-2df2a06f068d'), (null), (null), ('11/19/2008 4:38:05 PMThe quick brown fox jumps over the lazy dog0123456789,.;:?[]{}()-+*\%^=~!@#_|/0111/19/2008 4:38:05 PMThe quick brown fox jumps over the lazy dog0123456789,.;:?[]{}()-+*\%^=~!@#_|/00'))"; + break; + + default: + $query = "INSERT INTO [$tableName] ([c1_int], [c2_tinyint], [c3_smallint], [c4_bigint], [c5_bit], [c6_float], [c7_real], [c8_decimal], [c9_numeric], [c10_money], [c11_smallmoney], [c12_char], [c13_varchar], [c14_varchar_max], [c15_nchar], [c16_nvarchar], [c17_nvarchar_max], [c18_text], [c19_ntext], [c20_binary], [c21_varbinary], [c22_varbinary_max], [c23_image], [c24_uniqueidentifier], [c25_datetime], [c26_smalldatetime], [c28_xml]) VALUES ((0), (127), (null), (393902448), (null), (null), (1), (null), (null), (0.8215), (0.0538), ('Ä+ß+oß,hUö©hbu+@|¢bªßzbð©Ãz +uîo+>_©>@Ãœ/vZZCüu:î_ðv>üÄa,ZäÄ<>bÃœaA>Ö|ÃÃaAä£ _aüü/u.ß/ü.O©>h,¢ßZðr@ZB:<îrãîu£ +<+ îvvbv AªzBb_z,U|ÄhaÃÃ¥>ü rö_ÖÜäZaÖbÄ_Aãðrv_.aÖÃUA_Cª uBüª.ý£©|ÖåZäZ_Ãb£rbAÄ/ îÖ@huß_©¢*ýåî|Z>££Ã£<>:Ãœru©@ßBã/UÄz*ÃÃÃܪAýÄߣÖbbüÜvîÖavuv_/:£©b£_¢rvðßüöîb/@Ãü_:~:ãz~_>ÄAC/hU ü+öbvA|ßhhßzýÄ|ÃZ_ßhz¢hhZ/ß_rývîbªzÜý~.¢>oß~@<+b:£ZuU.UäCzO©b|B_öª,ᚌbäýãîh/Ö¢ýaö:h|AÃAÖaz**hbðäU_ðb|Z_~/U,@C.*Ãr£CBüýðî*bÖªÄ@ãßüZrrÄî:©î_hßz@¢ªö£h>ðßåU¢aÄ>_öåî,ª_ãuhýzO:O/ähªã/o©b+*äh,ö~ÃOöCü©u,Ãüß+ß©ãz:£:,>,Ã¥b+vß_AÖ,/v|ZCU rÖ£Ãðå¢Üä,@A,>ö|bzZäÖÄäÃ*ö|*CU,Äbh/ÃÃÜÃ<ýß+~>îü+ýzv£¢ýßüvbUßzßZ.hZ.©*~©ä.Ö.åÄ_ðßÜ.>ÃOöß/rABßUÃ¥oo_ö/rü:z<ãª_ªU*ÖBÄz<,BbÜÄðäZÃœ+ÃßãvãðÄUÄ>ßÃðßßÃv |>ª.h_>U_:>~CO@BoßÄ ./Aäaß©ÄOUüa©@ÃZÃœv©ZÖª+UÖh,£oߣýýððh:Ö. åßbz><îª:U Ã¥h.~ßbßBÃ¥.a_+ªüAÃ~~ßaä ,ö_bÖZuÃœrð<Üä|*Cb©©_ðåUÃÄ@:Oaä. AßA¢ZüAß©¢ß¢åãB:,'), (null), (N' .@Ãã+UãAÃœ >hÃb_ÃßC¢äåzb¢ßå.ýß_*výÄ,@ð/ªßý¢äßãUUüUhAÃaß,>ãäU:~>bÃœ,bhåüÃ@vZbã+Cüh+ª>åªb*ðäUr£ä~ýÄ/ßC*a>¢Ü,ööa,Ã¥Ãåãbª/ÃAhZ¢bbîb£uv,.@*vv<+üvöýîU>ßå ᚁ_ü,©'), (null), (N'/ÃÄÖÄâý*,ª~~u<:Bo+,|vaÃß/Zã/hÃ/@_öu_rvrª@:>ÄUOÃb>z>:*,OÃýðZ,ß_uÄObbZUðåîoÃœAß@A~v|ÖðßOýOhÖ>|vüßßýUÃœ_OC/ß~.ªZ|++uö AãA¢,_råî_Ö*ªð*üA|Ã>,hCð ,|âÜ,ZªööýÜ*ãU zuîbUßÃð~ ß<:ðåÄBZýü>Uhh:éü+r©Ãvv¢a ÄÖÃ+üå*üÜ.u<ü /bA|ã@üü oäÜ©ðACBÃœ*B_Ã,*<<|:ÃZ©OO/zAýbÃoª©@B:hBbÄ~+ÄhäÜéÃB+ö@UA>Ã~U¢aCabO>Ã¥oZî*+@ÃhðöA £|+zý*rB/<ªÖ_ã.Ä:*©ö+î~+ÃœÃý/ÃœBC_£vªb£ßAÃü,/©Ãoß@CAÃ~ZBöÃüý@U+Ãœ +bBvU*b¢züüü<îâð:zÃ,@U|zäB£Zß ObBZ¢b_ZÜübvzCüvbzî î<~öãß_ö,U.*@£Üî+ªb~+O_Ö vð/ ªA ,:.Īå@_Äé bÃ¥:U üÃðãª~îBªÜuBöbUb/rovbÃœZAu¢@vCvÄ~Bb>Ãߣ|äî,ýCz:ÖÃ.v£ÃZüUr/îªýb¢ý*b¢aÃ¥||vߣz+©ÜOÄÖäããã¢AZCßzUîA~ßv.£A©:Ã¥Cäaãbüª|.vOähußhÄb*Ã¥bvz*Öb@CvhhAzüÄüãÜýz@UåýÄO:|:Zðý |ßä|£bü:Ua<*>ã Aü/ၜ.BUbO*Ã¥Ã/büzîaüUr.~O+OOr£*rª~îCã ,uîÃäCãBÖßö@A~ß*ßÖAußZUîA.ãovo_öCý@ßb>*ZÖb¢,UêÖ,UÃœhB¢_BýaÄ:Z©ßªUa,bbaZz.Ã<Ä©ã£*ßbÖA+.ã>:.ßbßåabvahUZ|Ã+ö<Ä+oã/h+*£rðßUãoÃ¥~£rU>_Ä,:£Ä,bU+,BåÃ<*¢ýÃÃ/Ußo:ÃœZB,übOÃýO£Ö,Ãœ.üZ,ã@Ä*h©_ü£@|bZðUýä.z©Zzu,î@ãªUrvÄhãü¢Ö/o.äa.©hðåÃ>,ðý©¢C@zz:¢ãöÄ/Uäð:ö¢u/våßvî_vý£CBãZvb@Ã:z/ü@~îZü.Zý/Üäo<ÃÜßãªÖb<üÄãåoýß,Ä>zß:Ãzîýöhýýu u©ß_ZÃîã|,<_äb.ß/<ªÄZ|+aý:ðã©¢b>Ö+ªr+/@ÄߣÖ.ýO:ã~hÃ>+>b©zÃœ_ßÜboðzýßZãCvüChüäA.AÃåãua¢¢åb|ähÃ¥uýäß*hãßåBä~Z@@ZÃ¥<Ã*ÃœaîßÜÄuðv/Ãýü+ÖCZo>î|ußßý¢ÃCB~OBoßBrBbb£ðð_:+å¢îÖ.aÃüßÜ_uCßhýBß©U¢ßOv|auBäü£Ã .Baß+Ã~/h*a|üýUî£ßBärÖb/¢r,ߢBßhäåÃÄhOÃCBß<:oÄ~Aüruo_ßC©A|Oozßßb@åÃbZ_ÖÃ//Öb|AÄ./Zv_öü+oäZ£zZäO<@O<.ß©ýåCª,ýC~AýbªuZÃAä ªvbý+O:|vv|,|z~ÃœZ+.*~,AZU£U©£åÖ< oß_~ý@ðhᎄa£/Öa/a*ª>ÃuUßÃÄöÜð+@bb,>brZã©rÃ¥,åß.~zßUßý+î* ö~AvüUÄ>hzü_b_hCrUýîÃ,AA<ãã ãzaOuÄüoîÖ>/bvvC _UrãuÃ*b*uã©<£.BazãbAýb ã:@ýZ~><ÖÃÃᎌ<Ã~£:o*ð¢ãß*ÃuA.Cö£ªÃrü¢zb¢,Ä.Ö¢,CßB<,_åýðß©rðäv:*~ßhCoZÖö +@ürrboöª.ððÄ.Öªß+z/+u+ð+ãö>Zü_*_bo+Aê~Aüvä@.Ã¥,,>*î:>üohAã+h©©£ä~,£U+~bÖÄ.,ö>.öö|Bߪ¢îABauaÃ¥U:*z¢aöaUoaðZoÖB|r£¢å/||Ã¥AUÃ+_uh~O@UbB >:ðÄ,BäzA<ähoüÄO>ðå>ö:höOª£ýUîÃOvãAZ ,aAð+bãÖÃborÄ*>Ã|r©<©*Ö hob+zâB©ãr¢ü @©¢vªîÖoª_a:Ä¢*ߣbvÄßra<:A/b@Ã¥håÜuÃaä,Öã|ü|>+ãýýÖåOo*U@ £hß|<ãÃ,C©<ö ðvz/oã£>Cªb/z¢Ãý@@Ä*+Ä~O+ä ßCUO>A.üðãðBÃÃhAr@A,aA,ªhܪür©CbZ>ß,ä/_,î©Öoª/a©uÃ+© ZUýÄÖðÖ@z:ÄßrA©u.ßü/ð>.êßß<@ªÃÄýý><£zý>Ãuövhaýãbð*o©b.ÜßvCðhvýÄÜaßu@r~Cß:ÖÃ|o~ªãö.ªU@Aö|ã+rb+/UU>hrÃœ Ã¥ U*uZÄu©©>BOä,UßîÖ~_.zböbOh©ª©Ã~¢ý<|ö¢uÄzrüh*ZߢBÖUr©+~ðbb@r¢_A©äv_Ã¥Ur î~ß,>~ã/<îU.|>ähbÄ<Ö:¢h£U~/îü©ßC+~o>ÃÖ>U~bbZ,hߢ©hö>Z<ĪåAßåb£~:ÖBv< ðÄ¢o@ßz£aý¢:vObÄå£uo/©|ßrªö©Ã>au ZÃ/z Ü©,öäAo.Ãœ<@Öå:A Ã¥Uhãüðã£ð>ý,hü/¢,_ä_Ö>ß_¢ßãZ<+äãÖA+bÖvßAî* ~>|+/ªroB+@ðä.uh|ö*ðoaÄa£_CuB_.o~Ãœ|îah*¢bðZv|:_Ä@å©©üUUÃœ+öã ,ß Ãuh,îåhb_ð|Ä@öãðra.ÄuäÖr @Ãœ@bzAuUª~b/b¢ß+ãhÃ,@Äã_A£zýBCß:ðb,C¢ýUî <ð*ßð+ÜÖb:BU~o£ü~OB*:|uöhhî|@ßoÜÜa:u:oÜå*ÄÃh/Ö£_BÃ¥ ©öà î_ª*Ãœ/,rýÃÃ¥B@,<*:£>>ßbÃ|Ãäßý,o>/ãCZBã©+îvÖÄ~A:BüzhÖ~ÖÜ>,Ã¥hÖ£¢,ßãU/U,C,@ßZªub+B_uÖßÃv,ðÃb¢årÃðÄväðå*~uÃäîªöZh_.Aܪ@åßÄ|/ ÃoÃœurßä|*+o>ÖöabüÜ£:¢|@rä.b.ã:o+/aãbî¢ÄßBÃßOv_A©@ßãðîýÄO£~+ÜÖ:ÃîrßbÃBüo bä*îÜ*ðz,.îaªu::z©. vöA£ýîü<UC©r|Ãbvªýhåähaß:ÃUðî_îruZ>u*uªöÜðr.Oä|C¢£v,zöuÄ _ª£oîªÃr:ývräî,,OCöð~£ªoCZUZ@îZbÜåߪößåz>uÃäzðÜÃÃ¥aCãZÜÖîý>A¢*.Ã_Är.üBß/,u¢/+ðÖãr>@,@Ãœ/Öýhîª/Övöb@OoB>ߢB|ê©*,ýU©ãCßaOÃœv/.ãrOa£ü©*ãÃ~ÃÃÄîzübßB£Öð*ÜðoCb*.å£bü/î|B£ýa_U£ðh,ðÄuÄ/*ÃœBZßuÄß_Z> ÄB¢Ö<..üOB£r©ÃäÜÖr*hÃ/zzähb +ß/Äbðöã@£/ZßÃvUhåªh*öb*ð*¢vÃœzÃ¥ *bª+©ðoÖÃAvCÖb üObOý_öý.ÖBÜÃZÃbrÖCöÃhÃ¥~rÃä,zÃö~äA©bÄhîß.bOª|h::býb*£h~ßZ<üUÃ_©Ãß>ð©¢¢ bä _£öZabZ.* ¢ªöÃ/ãÜuo£Cä.:ßbuÜß/£ý> ~ðåa<ðüZr Br|rUÜãCîru©U><öã>~ðãB¢h>üÖÖU©ã£B*ª@a@A~_BZCðÃ+_@B:ÃZ¢:BðbÃßb*©@+Aohä/ßý_ o|ß@uß~ruhuh+:Ã¥>~öÜu>O.ÃœÃÃ¥_uÃBZÃœUª@£ä*a£~vuÄvC©Ö* röU~zb.,OÃ¥::oz:ÃœZö£_ör+ößuã,ª/@Z,ßßbO|äaööüý,båÜ*Ã,:ZC,bÖAääb¢oÃ|ªUv©,~ÄB£~ý'), (N'à bbäAbav.ÖzoÄýözßZ.ÜߢCühÃ*¢@.ã+ªýäðb/aBÃvOðüÜöÄöBÄ*Ä+ÃýîöÃ~/üÃ>£ðOßÖOåÄÃvöUuð,ÃOãA<~ZßuUÃ¥ACÃ.£Ã_©ZbªhöÜrý©//<Öü|ý.ªðUð*Cü|Ã¥hÜývªrÄ|¢ BAîUZ~¢*ÜÜCb_ÃýbßZÖöö£|b£.a,ãuÖr*Uî+éü ÃÃœOÜÜbuUZ|,/ßÃ,::ãªä|u@|aîÄzãª*hz.uo:ßZ~rÃœCZã ,©ã/îäbCÃœ>vªÖä*î,©rUC,b<,ÃöÜOå©>_îãZãÖ ua*|©£*>Zü, ©O£AaB>ߢr_ß/.Äßb b|abhª*äüv_ý©ßß_ýzîåßO öÃa:_Cvö_/öîß ~bA©ohUv£_ÃaÃ¥.,ðO>Ã¥ub,ChßÃÄza|Äîüu.Uär©bB©b<Ã@uã_¢v/A~vröåä./ðvbßßA©aobýãßh+ ¢,Z>äÜ,zvä+örzü U¢o.ü©ð<|ß,|vªr:ååz>~ð|oäÜ_ü©Ãßãb£~rüö*ü<ßöb,ßA©£ðb a<à ba_OCößßa_>¢Aa>ð@ aßü>ÃœbÖåzé<ã~îUCö,oä@üCAãz,¢£/CßÃ:ö+|U>/u£Bh_ÄîÄÜå_@*:<ßä<ðÖ*U©Z|£oCüå|Äîâäåü.o££åb+~~¢öö/büã++O¢b@..|B,¢Äª¢î_ã.:üOÃä>.rÄÃ<ÃÄböOÃ_uÃÃbä¢<:*o ªÜ~b~ao~h@ðoÃœ~roãOC©h+BbaýaÖ:hîÃÃîO¢ð¢hbß~ªAz_î>©<£ZU>rU©>b~ý.hý¢u<Ã¥,|UrbAÃ¥|ÃœbÃœ:b@bý>ª:rÄöö.~_B+/ª,bbABBu:Urª¢:ªÃ~@: o>aÃœZo/ªßª@ö>CO©Ã,b/üÖb+v~B>*Ãaa¢bZC,zᄜ>,ãÄvC@ZðAOz:ßbZ,ªOÃœ<+r£a:|u/©ß_~Ãî©ÖßBßÄUvUuö£Ãu£¢|zvÃ¥AUü@U>Ãã<ÜüÃÖî,@ª@+bUBü/bßåýÜAvuzßå.ÃœZãZü.ß:vrîÜßCAbðr¢ðZ_:/¢Ãb/@Ã.öAüà ©bBãz>oäîBo©ýuZCOühUß.©U**ö_ÜöÖä+Ä+äBᦚ+~@_|,:z/ZÖbß>>U.ä<ü|¢bö zZZã/a,*+äUîh©üî£B>rÄAÃ¥rC:Uz£uÖ@|uUBo:ýZ*Ä:£v*ZO@bî@~Ö¢Z.bÄýÜbÃhBà ð.äÃOCuãý|uöÖObß~zuðß~üÃbÃý>vaz__A*Ö£ Ã.+î¢ÄOhüßÃZCãåß@ :O©/CÄ|üUÃ.ÃßzoU|ß|îüU@öÜOßýî<£Ã@Az<©zz©*£<>Ãua,CävbUª*u£Ä£ðî|bÃœA©rÃœaÃ~v>Ã¥|zÃœAu_O.äAr|>î©bßö©+ÜÜ~Ã:baU+/Za~*bb:¢>BÖ<ÃA~:OzBðä¢~CCÃœÃb|o@öb/ÖOüo㢢O:|¢Zb_CaåÄh/|£.ð~zvCCaßäßvÄ@äv©hÃ¥:,ý,|h,@bÖaß.o¢ýbÃ¥oA|bA©üîîUa.|C<ü£+>_aoä~bUßb,CB_Ãœ+@B ,+ .£Uh@¢rî*/>v<_äýOýaÜåð@Ãœo<¢Oª+£UaOh+ðÄb/båÃöªãbU>@ð ,ª/>h:ýbýazüßUvz,>b:ð~Äau|O .,©b:zä,Ö¢u<ÃA/b~Ão*|Öãa::.ßå/Z~Z£¢ª U@<,ä|ÖZ~Ãîo£.>,ßÖ©_©ªýîb@z*¢rb,ßÄ*rÃüÄObÄäÃ>£uaÃœr:îüb£¢@| *U.£,£@ ðbZÄãA<:öÃv..Zz|/ÃO.ÖbÄ©C£+ð©b<¢ä>ªÄåvoîböãr©@r¢/+|ðý:|@+_ÖOb©hüZ@rzuðr+B¢U<Ävðb©Zaß+îão_u/_ã|rîauoýzî.@orã*uBßBª©>Ü£ ~,©bÖý<£@@/*:£Ob<ö/.*öOb.U©¢Özvo.A>© ðä¢ ü©ðÃîo©. rBz~hÄ*/aCßã*¢<ª::o'), (0xC0A0B025C680B0A23D7885F7C203AD211F679679F97F910F0F1A364ED5C246569A2D2628E432FF5FFAE90153E56BD1809A8475D01906C2400EA015AB4A61CD7B312E5C94DC853DED68377F107E3E2AA348B5B4504C763D946AE519431C5315981B8621B70F3DA415478868E286B2C2CF76716394AD7C2EBBF1C72AF66BF9D01422E6F4F71D72940B119E08C40D5B0DB8234ACCABF080EA9F5866C54713ADA94DB754BF9FBDCAB204DD57830E7369AD96B971D2212D2523A1FC559FB6AC4CF863F5BB0CB99B6DFB5997C8CE99FDDB2BEEB82F8DA1DA882092311EA3672AFB57905F1F19B85CF4FB4B757989645789A4202AB1FD7DBE56896C9A79887CCA942F9B713D3ADEC27291C434422B61FEBB3BA77A833C79FEDAD10896AC1DE36B7E81E14AEEF3194FC65EB81F39487C2A276EDF3EE1024757B59D976C32471554AE58B5C04A1710C72257B4248459C59154DD6E3E3EA48A7C3A8A94505CAD1D7E486371E093BCE00F5E171C894E22D25CD8061754D9D71609CE3985BF83BF6B743A35DC21E8E5FD98FC5EDF2788012D18B837785696C9A5704D67115936218C9EABA74F1845B173F3087E577AF8EF81CD0B6D074B4714DE71906CD481D3A461DBD2417BE0B215D207C3844E17712A785EE5444EC91A415796C9DD87D9DCF220641C7BA8B673A01BF69AFF87C2C6C6FF65F4769B8E5698C191E9E417D48DF92AD164EAFA), (0x0F), (0x29572E1AB994D002DE21E46657910E84BA16CC8F894669A0D5B65DDCCC0AE3328B5665FE69A7D7551415F66B15C379D3DC753B6BF45BBBE2EE8E440336F335D33EB2DB002C0F1B123F777B7450FD8B113C8A0056CE773E309B820FDA63D41E20DF222C62E879A6CC5A282C7CDF4692F00332C6ACF3DF05C673AA65A9FF40AF6B595B952ED02829C3E333FBA64BC15054EF1FD7300D722CFF1D66EF3E13FDCC1A79C02384B1641FDB0903C8C0E35F7AB25910BAE0687F5EE72E95106A39EBAFE666E12D8B9DCCA38BFFFC2709A96C1CBEEB3CE40343ECB1F9623C561B53B5A11E53E2590231EF158D6C2EE16C57543DC278527FFD06ACA37A2F332861758738495A08B5C7121A8CFB265796140A45A10DFE93A30036A417A73EDED2FEC7B417E4F698124E9E76AF5EC683D6AE158E70EA911A62E1E43713B5F10E8833478D34723FB11E7233526F88E4443AB3CE6991AF6EE86DAC513500BE845C5D90ED7B16384E636F6370FEB73EABD9FDA0FC60E6887CD9C55F2088200AB15FEDD6F4DE9B682D01646BF92E3F70312E0178375FC22475D51314B6B718C64265B21010E049CC3E9572FAFB7B8E4E99542EF186A8D2519DC8611ECA87B176E99D28947B2E5F50E43439A2EDC728FA47C57A6289263F9A926072487F2A01B7E4FC115D52F9D26BF4DD0C516E3064D69F66D7050C4EEDC25E8E011BBB17D1BA3382BDF0B5CBA74EF30F6DAB1AED2B62FB9CA81853FBAA950F4EFFC3F7B6AFDD0C521EEB727320D4BE8912FDE141A870639F201F6EB86637D828E167CBE4563C5F909EC7CF3FF0877BD459CAE9ACB4CDA58F6058968F6E54EBE6134A92B808DA32D69E50A3E1A023AF98A39A5E9C4E2B7314C23C84FEA5D0214ADCE92BA6F5C2CB7F98130E6329C4EE3CA9FDEBD4F54F98E7D67DF6CC563330CD2E5905B7F708A3E0CEDF043B1D0FEBFE4E4755A7E44D548D5143CF78CCFF2864E24034D0BE3644A05A0A05164A5CCAC792F87D0EDD88E9E1057866B3392A14CFB69F58DDDA1A3F1702B54DD9483E42F47908E6D48119865A5653CB46D091662FF6365FAB04EDEC77B9660C283B0F99C635713A3144404D9D18FE86874FF846714E1DE312DF96F08B1B6E1B1B0D5E1E47BA04105E5635EBB6E8C19205676527C0209AD91E2C87E79F81AE15D625328FBADF3FCC4BE7E71A19312C291D04EA24B5475AFB7284001A331C71DDA81F1591B632D8262898DBD9387FBFECFF5DCA9A978A5F8ECA371D35DF24992F750A72FA1C9B73EB2BC4FC1C6B81C2F2C4141AD551D7451DBF86C67E14A34603FFAC632E0DC5CF64EADF6FD38D432349742A70CA0AC3DD9EC4543A96D5F4D6887DF81DBE1D93E5FF44B5EB726772907C627D0AE9327CF83BCFC569B88A388EF509E6569425652BE045718654D76A3652C4BE3458EAEC560000E1EF582A2D740C27F569811BFB56FD5129A4C1F5A464648E17F3CC04360B1C9055944375D3B617FC792DE101B536C9673607C147940B5C7D8AC9123AA708F0EA4CF0C66612877D728CC47C768263D9E02965CD2F4AD4FB4A38C6EB0AA3DD55713DF7B4C4706254AF8A4EBBD08EE5FB27EF3210423AC1A077F57B2D4C9B72CEAF6F0A398BAE156FC7101EA5FB192BBB52CBC41A71CD12367C573CCFF534081317800B6184AC7079DAC248311C1CA45ECABFDA80D7575CE15CD3BD3371457A92080A8D7A0DC937A65B4A3FAE84E01A5FB2DE053559873BBF232A05B0EF3C089548B629128E2950008834258C17AD5D7BB95D819240453881CECD57E3C486B71F42AA66CDB708D1888D04AD2561AEA875CD89F791BA7554037EA843C1D26D3B017D054A6D478FC3B18CF9043C97121F2025E1153B8F2565CD56634F0FC50FB520C9ABA85C643A2E3EC64605C070186B6B88229CF157007257A07C16E440B4EB7C43E472EC6AC3BBEAB3D774491FA45C3EF7E386A273C4C8C83951BBE8244AFE125A897D8BA57F01C567B13E7F8B2837FC1FD7EC5C2D49097F1CA9B21908D3C568D962EE9627D19978E1C13AC186483D1019BEC84C5EA1E51080FD6FFBCCE8BD93EBD5A6283AA0D54E3E737A6B0E47F9D36CA1FF490A790A387DDD1629619DACF904A6D5B1A214D678E9790DEA26790138049C8F2AE8738972CA6DAA5C8AACEDA1C681666871473057CB8660916B201104DCDE24C50E8110901D63E7346A79EE3C8C6C23A41299C6BC6B375E6113F806AA5CA680AB8727924571D64A0E60FCED52982304FEFC6CF14217685AD622AE7C255C3CD8C3F942B565DADE333C4FB85B6F4A0CC9F0F307ADEFB53E941ECDBC22C35924B224232958556D9F241D39B4F35F0CEB8C15E48C31548FE90DBBAE96971EBB70E22A06374B20B4738254E290B6004A3511E22F0CDECDF35D943A1B9DA7D6070661C8D2C859D59F6B617009DC71FE320D707885B4EEAF921537A8A2100416CCAC4DDC2EED2E81DC3C43C4AA6DC316EB96070E2D2F515318B236BC91B0328E664BA45D8F95D045DFEE9C48712904245121BC0C09F6E99D5AFAC37BB771F02B09B45D5FC8668656C5C22F3E9208E1EFAE116B70F326857062070395D2548E6DFE703FBDCBA55BEB9B664647C6AA0A5118D3CDA5067F37E22EEDFCC163F0837134C13F22C9232309B57FD58DE03EA9B8FDB17DFE86E8677F385C8EDEA89A88AAE2D512046AE787F4B0C4F086AAAA02F04344C4B17385EA4B5AC0EA6C9545601BF72AAB0A2BA44D152A884EC2F8E0D58E5A9E9A63D6D7375DEAC6A9AAFD1A5F6A63D48F7FFFF7C49EF7AE87EA3627537AEB5B12F7ABFC451FF34D2064FAA2180F28E45E2350558E62D9FB6C27504C26C2732FBEA10768BF668F6F8CB1D760A4549677C252C9302995CCB01DAF901DCFA6265DF1CBE37607C024F793E0C9DD8B79571791D88AD4F9430529D5574A0FD672A0E58A7A6ED8702070012DD19C49CBEF24A458788CF61B5263AEC5BAA1AF7515212140E452110A7EA7706888A628A7BC5DE532A6B65DE5A9C93816C012B57FC08C18AF7A09E79D1399DAD11B8E93AB3B06095DBB7DCF5EC43C961A19FA4A6BF1F1A8FC8E782DB275481F0CDC8BC91B368DDBB90958C343BDB9EA3D73CD83194F6EE029E5961CC2D957E7735DC28139727AE48C1F9062982E653FD58DEF3FA8C406BD6EAA9F359F7118DFB27150E5FA37B1CBF8E9F7F9BF0B48FB80574734EA173EAE5705138ED245441A06B0B026DE80449DDC2447BFCD0CFD6262A4B5472AE3F59A33A18DF52422F8B3A4DCF20E5B211D0012A958C5CF7FE04B07B02C2E90FCF022BB15F33CF24F78B92B941BF119EF064087B434808B2FCBB4C041ED73F6CA22A7EBCF53452EE00DC3309E9A3B63EF3117AAEBA6DBC770968B4A3F7BB16105C361717305499CC112A6A7714FED958F50D110D5C90B2347DF7B38C8FBEF645C612BDB39C9F0EAE77BE8D800335620A9F5BAEEAAA08B3BB73D29938A10D4C523414B0F24125CC65FE72859E0322313895A8FD24000BABBD5EF23FB9F5C5FD6A723B5BEE846FB9799F48EC378315B8519160A308101852287903935EF6026038751B2BD7C652A425EF8384B71F742A4949DE289522F55A59D9237580DC6A838CE8B3B267F9D08B4EBC7D189C939B1904D95A1517E9CB158FC0C1FEA2ED2359850007DE5BB1B24F6952D9D8A5ECCDC64E1A70B772556B931DAE32A737E1E8619923938C9BCCBD43171ABBB51FE26FA302FBB0887C6BD73F9464B0BD8F1B07777A784F8259313A816D2DA06799B6832B4E9F944C315FE52D4C53F8370BFFC3FC03344A97A2DD59D1B13F2B4ECB7F95EDD1957EFF86CB461A831245F54903756D59A454656BFB786135C28AF224A661CCCE0A556680D46547EE301490975498BDB9CDE5172B2081D61D0DB9C44043E5ECA079373EAE0EDC853F0C872BE6E7C9D129CD4866B14AA19D887F59732AA1079A4A27E02E2D5A0FAAF16FD81EA955FF2543D89A730B8F3B55C799B62EB5596A9E04ECD1BF07ABB3CFCD9D65417292E42280243F5216949ECAFC8A5693A3D0F598054A09CC74401DA824CAA56E19E9E334B583AE812A0887705E16B28D45202BECA7DD3C288917AE3006872D4BEF20B1129721DE2032647DFCC2997E6D9D906304AEC8B63CADCABB9DD57E7A92EB3B912D55AFF62341FBBA436F4F55FFA940A27624289D166A7464DC76404AB3E9DB1196F84117FDAA3FB2A31E72DD6E64BBE494DC046EB29E8AC2D13B19BD01A0F659842DCF076828A4DBF465FA07E7A70667BA5BB5E7E57C6EF87D8E36B28082B0F21829593095B48C6C27387A4CA482DB3A34B1F2B5FB1E6417CED689D9F1F24B61B4F7EFCE4DC5C1F5CF49B0BCF21243EAA2FC8DCE800B0709B53171CF2AB27A34ED0897BC930CEC6EFFFCE6A15DB715AC82AF26F5647CD1A9E0D6190C53F2DB0CDF8BDFF98A9747A6002EDE831455ABFE2BC53C8B8B74C06026EDDBCCF3D00AFD21D9D1D1E72C11FB5780E545AE5E959B3A1AE09EB64F815ACB6FC2ACBB8AA22013E1613A73DA170FA34133FA9F7AC1D8583082E8FF7C36D25887067759753FCCEEB531BCED5B175FF3E0EB751B86CB40ADEA448B07B93097BA8EE1ECC39FA62E01771BDA4904FAFD2922F51E90B1C6C1CBB5D97F30B4C525849A025E792A9C543ABD73A47AE10798FF4751D4C42206F8C810210DC636FD4CB1E645BF029C83FE9690D3D34E1256DABE407FE962E0516283098659098E9E03B026F284AB588662C3533E334E23AAB5C9465F75B713E9C184D32BF9063AF517F2C023272FD23F65BA1D260FB22E145F6ED09FB33F184C9C3D30FFC82C9D5C886E26308E008385F716E9BBA9FDEA0F66CEDC9A359B31E8DA8386F9FED267492CC09D919BFD964EDB4AA8AC456CA2AE432199094FF316FD2C3D55FA89999714AFA09EE960487369288DBEEAF285937DE0D8A6DD496DF929A9A0755EA79BC541B3940CA4CDB94DFABE2FD0C2342BFA9699D819A0E2C9DB31A7653FBFD314C18CB87D376E88FEB0279AAC1F199D36E57DA5DEC4CF72245EF9B8CAFD58798E27996E4409C6F49C1D9B27F20646AAB1A4608FC21A0450020A942E4DA5BE0157AE0C8485BB493D2E8919C129A7801E085F07269CD8B77413495C4965A8B6F65F99C043F9C215066B336148F043366A8A7615FE9E97648EF698614C5F0FC775C223618FD74C14463A00BB69777E73D012F1BEFF82C857B825415D6150D8A76B6BEB76DCD1A6834E61DFB49DDC0B17781491295D40D7F309CBA95A95EEA2E551595FFD9C0796FE6C7E708DB303C9EC2A39D55CCFAF4A2A93F87D11384BFD5FBEEA63347C0D7B707DA2CCEEC04A3FF601CD306C195615A21F3569939A85C6207120DEC8A085601CBE54DF2CE25B6A49B8770F6B1B914658D4B12546A3E7E5E7EC9C6D9F7B67558C6D13BDB486F8BFB3DB1FEB13865B04EFEA85F3EF602968D67EE74045FDCADE4111830DF7E381C1DBF1617B83FCC26181977DB4F573761C43BAD745AFB879C610419A01F35D1D0C58B417EDFEADE4D9AC75BEBE7005E8DDAB66CA4D0C4C222387AB6B3262C06E348A616C316B881D95C60D9929F9BB460A68BC569C82C0000C91E4665342A266EC078A240E99A77213493476FEA2F839CC5550D9A669D1A1BA516FAF7721CA4323A6BD126F873760B14A43435E49115999AA99FDF1C8B07235E879AD3A07FAF18EF15347F5E5DA352DE0186C269E5371401615DC87DC415AF64AEC871D9A36B94F41C46CF5D963B3D064D011A0445B9785086D23E22E79A2AFF851BAF9431783A96F1CE4D9F67B76A261FC230C3FBAA1EF54F2152D12C720C811BD0D77A8BA8D4D4C68413776BD9E8CF67180325696704DBFCBA440F2569697FC1CC8396DFF09A76ED5CFD7696A78975398369146FE717B4CCFC7ED164C5AE5D1B93B59F5651EF777E8C380D6A8D445430CED6A2FF5510DAB4CECAE271C81228AD9F5B03F2E91FE793F295E2AF0A4A3EB829A195EE0C5DC583DBEB87870C05B6790F5FCA32416246AFEF0E0CBF2D2BAA848B2A48277D39A142957F16FE985F86EDDF689FAA800C76C65AE6FFFD510555B04103FCE2BC8EFCD6BE889CC14C48178F881FE0C58B00047EB482CC973AA4F08F2A66BD9463A430506BC8EBF870B57A12CE70743225902440FE7D2D3AC2659C19970C97E58B822CE3EE8F59C2140C0EFE07BAC8C92FBE6A9A417C96E576F68E062CD260641E94874C4491439637612CF26F2F32089DD2E9D8A2FDA30EEC466CF801529641ABAAE073327B859E7AD462E04FA37647C385695AE888C121F07860FD244B94E4CBEB47C54FBFD5214C4B5DCE9AC3BF49D025347BE93C5922E8BF82BA1A88792E3F7E15645BB0F803B0470D9C2AF3872DB9172DFE1719FA8E9125DD8F3D1B06C4D22E8E1BAD5AED1F2D30CAA12EBCF8F4385500035A7A17258386D236D368C6954049CAFB646B7F5E290ED1E64E5860D52DE857E81A0369571768972788B74BC56A3561E4F1FC8FCCD5A2D94CA831D72B25FC09EA10DE7B3CDF73E4FBD458D672C20C7C18F77BE430588B12772A1DAEE5916C018BAE61B48BBA24047D1793F87DCB67899CB5BE33AA18D89185CC0312C2C5FF6A67564BC46158F05ED2766619C49395ABC2931230D2385772D6CF2FBFB61142B81729902680A32844C45F6033B2BECDF236574F2EB3CF972EFFD8ED922831A8C134AD029B026E2B1F6BCD6B73D824C017023D885EC1130548926226A7B5961B93B79FFF04BC31EFC82C30C3E5632456DB18D690EAA849FF20A8B9099F47836AD5B2D7BB3825BB5BD04DC032915020E46E0B4B8FDE0530EB6DA0DE5C02285080A8C5EE338C681DB65C7AC09DE7166DCF87D49A93FCF48BCF81EC4E98465F58A7FD408ACC62ED5805EE95326345930356320ED42E8DBC83B3391EB19F1A856FFC22189FA78CA16D9A7B95A566C22789EEE8F765378B291941BCD792443BB9EB682535412DF35BCA91A13AB3F8161CF01194C3B6221F3871F8FE5EEBB50E295EC2A93D418CE65CFA8C2CD4955176212B9FE680AF7802C848EDC3482E9570158378DBF04FD8DB632B37C92AF64BA22081DD324BCE8D79E6C0E0F454C89D2E641C17511D7586D252C4825577AED8D2FD4AA3C750622546F5FEF5306EE4869A8D09640EDEFA85AAFB0BE0874B380237E80EF60A25D6DD01F6D05B1E8056636D3DE7C76D4ACAF302C5F8CB45829DFABDFCBD475FED7C75B72C62170E9E662AA5A7724A637094ED1E1AF3442D0A987F58D59E21C20E047FC0721041E7B2E5645ECE269D0F53974C68D02945F93748AC94E2BE3800456797A3F289F16052056B348FE65EE4FA70043E51B8F1E4BF86882A63AD04F4AD6418668FFA1CCAA5EC16CBBE106A51E9C89972B9F9AE8C75B2E46C01C6FCA40077872BCEF85400543A9865A22626AE1B37419B14923AB3B68CF0DD16AFC9DEEF71CA46883F82F074991E7F6048E94F8B3551C98561906E3CD375410777EAA471BA75315BDF26DCB450267A74BB526DA2A151E05EFF598EE05C09B4C941E8FCAF790DA6D3B7F3AB0F7415353A16F98181079F662509457161E651FED6711273672ACBFAADAC99EAADA5D1EAEA2353CA638833C1A282D6A5349B45EC66F4D59D61A1CE104AFFD3D46EB4B980375B873D93879B4D3E51D1E55325C61266AD84B8CF33884854437F63B45E53EDC8566DD8140759DF59875F10D0E9BD2539C16EC02F01B003D23EE94F073799DFFDE31CFCB7EDFE5E54A55F48D478786A855A2AF2F093BEC7A66905D51E09D721EE7F13EDCDC16D4BC30F6C8AA2682F5AC67EC9AC0DA6EF692455564DE7283F4ACD3D5A54658A9DC4EDDF2FE02633253E3AAB0EA03F2A134790A9C8776B1F639ACF21BD640DDAF53CE005BF2E770E43F13017133C1A9F0AA22912C3BBC22559CD7B94100476C0305FB5D1BF3A6BE5CF8166D747530C268030171A3AFB16397ABAABF2B2E3FE3E7A6FE7B38648DFD03743434255EADE06C15414E0ED5C8535487C57058E7833EB83285DD86B58A0375046E3F6B7D4E48FDCA5305ECF1E501EEAB26A0AF1DA42BE1057BF2D8D059A68B4DD8FA7798E7D7498C828E948D51C64D73FEEB8EE9545760424E66015B601D60AC8A9F28EA8A45B35F67228B159763B3A5A554E17E27A1F9719A354A81C5EE1C651DE7F2B2AD52F9A9283F7221DC4ABAEAA25BA61B3BF284E8A5B750550B318979161607AF610108426B4855E82FC7954F8A6FDF7A4801392B631A0CF602A4ADF6A6091BB6330B79A14363BFE39C9CB8EE1200CA9B521F3114DCDC4C56F4124FB6AA5F4226BBEF1C7EE63E26D441558EC6612EE3F1DA02A496C806D966CF22AD3123F9494D5A822222F44BA513F85CC3874D75E5C53E5DEC97BABB5EB505A5BFC380E5B0580C417BDEFCB0FD8E5D909E7B335219493CE802D61CA1929F337D2D5E9BE18302AC6B8B0BFA16C88D505E4A2A1CE371B39C6686A8E2EA4B5ABEEC9B7F83AEF26C0D9BCEC7D71D4F262F7575CE677882400B79B2255AEA1FC220205D1D7B48F9A16BDE1C7124A9EC7F1760896D647CE3465A4B7419ECCD01238C0CA7A6C031AAD68BC462995C012B619D330DFA60A25DA33D06B32FD4EFC49ECCF8F5180235BEE5C5A2E1901A59EA5910028CA9CF16C2D9AEF479B97E7B019C0FC3CC530C136), (0x824BDC0BD88D32C6A1FC2631ACFA6362B690DCC05775AA15590468D874D0CA32525A6E20518F16B968D046B3F38F504162CE0AA519B7EA0DA0C7B2D3255951D031F4DE528C4211277A2357862FF621CAB42676A6C625199A70607F8ADC42930F7E7581FEB0FEB51FBCE22AF55F63DEAAA5E81FFEE3AA090CDA43E12BC3874B388F4807B9742219B67156EAE3FA233B0C82D5E4F422952CD46B75246C1C8A5C3597F266175B253582CE688D8CC02612B708D5A9EEA25615FA1C334DFFFEAD9AE6FAB44C08BD23B05C9F6225BA089F1345636C6346E16E9240DC6BFB27D8368320CEA6910CD90AFAE4244C4E40315BF27C20079C924A53058C210B2B5128888468DE04EB620E066C58727E22941F520F81797E07D19AF1D67BA004EACDDEA8BC9BC8E6612C6F8F6D199B431FCB31716DCEFCA9D7AA81B3CEED2D70C10A1C9E7ACAC286CC38F1E211E910ED3557D10B492F961CD035D0121A151873FEFFCE63FDFCC95509AAA434DC1A97EE99937D771C2226927300CD44F9B06CB7207EE3121BADF0398D7B019F8A613FB69DE2788697A057DCD83BF0FC2F845B593EED145E3684D2EBA344E9A020870811C116A61737E61F7F27073ADFBDF3090920A8619C4DE07F190F8DE253B7B7BB5033DE3B18DE442157CD94372F4AF22EAF3AE08077266BC4E0978D07A903CBC8704BEAABDFB7F12ADB8609CFB9A94FCF1D5E3319D7374329C81A5B80503D775302CCC6E35F474FF749B5A4F01D9C0A3647BDEA4BD0B2F13908C0E3C45C70D99D0EB5CDEDE26C6FD60F3BCF2192520C2C0F253993532C834FDA8DDB9F638A9BD9DB07E167CE1D53DB4E133B95E3CFA6B5B4B6B536364649E2327D125490CF72859FF5468A70A45DF1D15E443FF1ED6B0BE626EBACD465A294BDFF35510BFE4A7EA1B6F6ED891C440F59C364D80209F04412066D6AE4C5B03A53B1CC716E0CE6D314C59E3BF77E82CAE1DB531100CA92B30FF13E0490DF9ADB05BB9AD74FD3A04CDD91C43C6BB54C9383A38808729F3A881F19617DCDE142342BC2353CE3AB7B0E3A06336E0655485AA5AB80ED569169668112B83671237FFB4E8F11A97F10B0D8277ACD6B6BCB81C9D007D8226055DE9958CEBAD1F3459D1787382077449FDA94FAA8C5DCC3FEFBB690EE65694A5C9BF8B07750B155DEE5E2DCB5E333AB0A85312D4327B89002D55AD2044005DF33CC2A9C27C6CC4E283F1CC2E2FF0E1AC80B8668333C), ('00000000-0000-0000-0000-000000000000'), ('2001-01-01 00:00:00.000'), ('2052-02-01 09:00:00'), (null))"; + break; + } + + return ($query); +} + +?> diff --git a/test/pdo_sqlsrv/MsSetup.inc b/test/functional/pdo_sqlsrv/MsSetup.inc similarity index 100% rename from test/pdo_sqlsrv/MsSetup.inc rename to test/functional/pdo_sqlsrv/MsSetup.inc diff --git a/test/pdo_sqlsrv/PDO100_InsertNulls.phpt b/test/functional/pdo_sqlsrv/PDO100_InsertNulls.phpt similarity index 100% rename from test/pdo_sqlsrv/PDO100_InsertNulls.phpt rename to test/functional/pdo_sqlsrv/PDO100_InsertNulls.phpt diff --git a/test/pdo_sqlsrv/PDO101_LargeColumnName.phpt b/test/functional/pdo_sqlsrv/PDO101_LargeColumnName.phpt similarity index 100% rename from test/pdo_sqlsrv/PDO101_LargeColumnName.phpt rename to test/functional/pdo_sqlsrv/PDO101_LargeColumnName.phpt diff --git a/test/pdo_sqlsrv/PDO101_LargeColumnName_unicode_col_name.phpt b/test/functional/pdo_sqlsrv/PDO101_LargeColumnName_unicode_col_name.phpt similarity index 100% rename from test/pdo_sqlsrv/PDO101_LargeColumnName_unicode_col_name.phpt rename to test/functional/pdo_sqlsrv/PDO101_LargeColumnName_unicode_col_name.phpt diff --git a/test/pdo_sqlsrv/PDO102_MaxOutputParams.phpt b/test/functional/pdo_sqlsrv/PDO102_MaxOutputParams.phpt similarity index 100% rename from test/pdo_sqlsrv/PDO102_MaxOutputParams.phpt rename to test/functional/pdo_sqlsrv/PDO102_MaxOutputParams.phpt diff --git a/test/pdo_sqlsrv/PDO11_Drivers.phpt b/test/functional/pdo_sqlsrv/PDO11_Drivers.phpt similarity index 100% rename from test/pdo_sqlsrv/PDO11_Drivers.phpt rename to test/functional/pdo_sqlsrv/PDO11_Drivers.phpt diff --git a/test/pdo_sqlsrv/PDO12_Info.phpt b/test/functional/pdo_sqlsrv/PDO12_Info.phpt similarity index 100% rename from test/pdo_sqlsrv/PDO12_Info.phpt rename to test/functional/pdo_sqlsrv/PDO12_Info.phpt diff --git a/test/pdo_sqlsrv/PDO21_Connection.phpt b/test/functional/pdo_sqlsrv/PDO21_Connection.phpt similarity index 100% rename from test/pdo_sqlsrv/PDO21_Connection.phpt rename to test/functional/pdo_sqlsrv/PDO21_Connection.phpt diff --git a/test/pdo_sqlsrv/PDO22_ConnPool1.phpt b/test/functional/pdo_sqlsrv/PDO22_ConnPool1.phpt similarity index 100% rename from test/pdo_sqlsrv/PDO22_ConnPool1.phpt rename to test/functional/pdo_sqlsrv/PDO22_ConnPool1.phpt diff --git a/test/pdo_sqlsrv/PDO23_ConnPool2.phpt b/test/functional/pdo_sqlsrv/PDO23_ConnPool2.phpt similarity index 100% rename from test/pdo_sqlsrv/PDO23_ConnPool2.phpt rename to test/functional/pdo_sqlsrv/PDO23_ConnPool2.phpt diff --git a/test/pdo_sqlsrv/PDO24_ErrorCode.phpt b/test/functional/pdo_sqlsrv/PDO24_ErrorCode.phpt similarity index 100% rename from test/pdo_sqlsrv/PDO24_ErrorCode.phpt rename to test/functional/pdo_sqlsrv/PDO24_ErrorCode.phpt diff --git a/test/pdo_sqlsrv/PDO25_ErrorInfo.phpt b/test/functional/pdo_sqlsrv/PDO25_ErrorInfo.phpt similarity index 100% rename from test/pdo_sqlsrv/PDO25_ErrorInfo.phpt rename to test/functional/pdo_sqlsrv/PDO25_ErrorInfo.phpt diff --git a/test/pdo_sqlsrv/PDO26_ConnAttr.phpt b/test/functional/pdo_sqlsrv/PDO26_ConnAttr.phpt similarity index 100% rename from test/pdo_sqlsrv/PDO26_ConnAttr.phpt rename to test/functional/pdo_sqlsrv/PDO26_ConnAttr.phpt diff --git a/test/pdo_sqlsrv/PDO27_ReadOnlyAttr.phpt b/test/functional/pdo_sqlsrv/PDO27_ReadOnlyAttr.phpt similarity index 100% rename from test/pdo_sqlsrv/PDO27_ReadOnlyAttr.phpt rename to test/functional/pdo_sqlsrv/PDO27_ReadOnlyAttr.phpt diff --git a/test/pdo_sqlsrv/PDO28_CaseAttr.phpt b/test/functional/pdo_sqlsrv/PDO28_CaseAttr.phpt similarity index 100% rename from test/pdo_sqlsrv/PDO28_CaseAttr.phpt rename to test/functional/pdo_sqlsrv/PDO28_CaseAttr.phpt diff --git a/test/pdo_sqlsrv/PDO29_ConnInterface.phpt b/test/functional/pdo_sqlsrv/PDO29_ConnInterface.phpt similarity index 100% rename from test/pdo_sqlsrv/PDO29_ConnInterface.phpt rename to test/functional/pdo_sqlsrv/PDO29_ConnInterface.phpt diff --git a/test/pdo_sqlsrv/PDO30_Exec.phpt b/test/functional/pdo_sqlsrv/PDO30_Exec.phpt similarity index 100% rename from test/pdo_sqlsrv/PDO30_Exec.phpt rename to test/functional/pdo_sqlsrv/PDO30_Exec.phpt diff --git a/test/pdo_sqlsrv/PDO31_Statement.phpt b/test/functional/pdo_sqlsrv/PDO31_Statement.phpt similarity index 100% rename from test/pdo_sqlsrv/PDO31_Statement.phpt rename to test/functional/pdo_sqlsrv/PDO31_Statement.phpt diff --git a/test/pdo_sqlsrv/PDO32_StmtInterface.phpt b/test/functional/pdo_sqlsrv/PDO32_StmtInterface.phpt similarity index 100% rename from test/pdo_sqlsrv/PDO32_StmtInterface.phpt rename to test/functional/pdo_sqlsrv/PDO32_StmtInterface.phpt diff --git a/test/pdo_sqlsrv/PDO33_Execute.phpt b/test/functional/pdo_sqlsrv/PDO33_Execute.phpt similarity index 100% rename from test/pdo_sqlsrv/PDO33_Execute.phpt rename to test/functional/pdo_sqlsrv/PDO33_Execute.phpt diff --git a/test/pdo_sqlsrv/PDO34_ColumnCount.phpt b/test/functional/pdo_sqlsrv/PDO34_ColumnCount.phpt similarity index 100% rename from test/pdo_sqlsrv/PDO34_ColumnCount.phpt rename to test/functional/pdo_sqlsrv/PDO34_ColumnCount.phpt diff --git a/test/pdo_sqlsrv/PDO35_ColumnMeta.phpt b/test/functional/pdo_sqlsrv/PDO35_ColumnMeta.phpt similarity index 100% rename from test/pdo_sqlsrv/PDO35_ColumnMeta.phpt rename to test/functional/pdo_sqlsrv/PDO35_ColumnMeta.phpt diff --git a/test/pdo_sqlsrv/PDO36_RowCount.phpt b/test/functional/pdo_sqlsrv/PDO36_RowCount.phpt similarity index 100% rename from test/pdo_sqlsrv/PDO36_RowCount.phpt rename to test/functional/pdo_sqlsrv/PDO36_RowCount.phpt diff --git a/test/pdo_sqlsrv/PDO37_FetchMode.phpt b/test/functional/pdo_sqlsrv/PDO37_FetchMode.phpt similarity index 100% rename from test/pdo_sqlsrv/PDO37_FetchMode.phpt rename to test/functional/pdo_sqlsrv/PDO37_FetchMode.phpt diff --git a/test/pdo_sqlsrv/PDO38_FetchBound.phpt b/test/functional/pdo_sqlsrv/PDO38_FetchBound.phpt similarity index 100% rename from test/pdo_sqlsrv/PDO38_FetchBound.phpt rename to test/functional/pdo_sqlsrv/PDO38_FetchBound.phpt diff --git a/test/pdo_sqlsrv/PDO39_FetchInto.phpt b/test/functional/pdo_sqlsrv/PDO39_FetchInto.phpt similarity index 100% rename from test/pdo_sqlsrv/PDO39_FetchInto.phpt rename to test/functional/pdo_sqlsrv/PDO39_FetchInto.phpt diff --git a/test/pdo_sqlsrv/PDO40_FetchLazy.phpt b/test/functional/pdo_sqlsrv/PDO40_FetchLazy.phpt similarity index 100% rename from test/pdo_sqlsrv/PDO40_FetchLazy.phpt rename to test/functional/pdo_sqlsrv/PDO40_FetchLazy.phpt diff --git a/test/pdo_sqlsrv/PDO41_FetchAssoc.phpt b/test/functional/pdo_sqlsrv/PDO41_FetchAssoc.phpt similarity index 100% rename from test/pdo_sqlsrv/PDO41_FetchAssoc.phpt rename to test/functional/pdo_sqlsrv/PDO41_FetchAssoc.phpt diff --git a/test/pdo_sqlsrv/PDO42_FetchNum.phpt b/test/functional/pdo_sqlsrv/PDO42_FetchNum.phpt similarity index 100% rename from test/pdo_sqlsrv/PDO42_FetchNum.phpt rename to test/functional/pdo_sqlsrv/PDO42_FetchNum.phpt diff --git a/test/pdo_sqlsrv/PDO43_FetchBoth.phpt b/test/functional/pdo_sqlsrv/PDO43_FetchBoth.phpt similarity index 100% rename from test/pdo_sqlsrv/PDO43_FetchBoth.phpt rename to test/functional/pdo_sqlsrv/PDO43_FetchBoth.phpt diff --git a/test/pdo_sqlsrv/PDO44_FetchObj.phpt b/test/functional/pdo_sqlsrv/PDO44_FetchObj.phpt similarity index 100% rename from test/pdo_sqlsrv/PDO44_FetchObj.phpt rename to test/functional/pdo_sqlsrv/PDO44_FetchObj.phpt diff --git a/test/pdo_sqlsrv/PDO45_FetchGroup.phpt b/test/functional/pdo_sqlsrv/PDO45_FetchGroup.phpt similarity index 100% rename from test/pdo_sqlsrv/PDO45_FetchGroup.phpt rename to test/functional/pdo_sqlsrv/PDO45_FetchGroup.phpt diff --git a/test/pdo_sqlsrv/PDO46_FetchUnique.phpt b/test/functional/pdo_sqlsrv/PDO46_FetchUnique.phpt similarity index 100% rename from test/pdo_sqlsrv/PDO46_FetchUnique.phpt rename to test/functional/pdo_sqlsrv/PDO46_FetchUnique.phpt diff --git a/test/pdo_sqlsrv/PDO47_FetchClass.phpt b/test/functional/pdo_sqlsrv/PDO47_FetchClass.phpt similarity index 100% rename from test/pdo_sqlsrv/PDO47_FetchClass.phpt rename to test/functional/pdo_sqlsrv/PDO47_FetchClass.phpt diff --git a/test/pdo_sqlsrv/PDO48_FetchColumn.phpt b/test/functional/pdo_sqlsrv/PDO48_FetchColumn.phpt similarity index 100% rename from test/pdo_sqlsrv/PDO48_FetchColumn.phpt rename to test/functional/pdo_sqlsrv/PDO48_FetchColumn.phpt diff --git a/test/pdo_sqlsrv/PDO48_FetchColumn_unicode_col_name.phpt b/test/functional/pdo_sqlsrv/PDO48_FetchColumn_unicode_col_name.phpt similarity index 100% rename from test/pdo_sqlsrv/PDO48_FetchColumn_unicode_col_name.phpt rename to test/functional/pdo_sqlsrv/PDO48_FetchColumn_unicode_col_name.phpt diff --git a/test/pdo_sqlsrv/PDO49_FetchFunc.phpt b/test/functional/pdo_sqlsrv/PDO49_FetchFunc.phpt similarity index 100% rename from test/pdo_sqlsrv/PDO49_FetchFunc.phpt rename to test/functional/pdo_sqlsrv/PDO49_FetchFunc.phpt diff --git a/test/pdo_sqlsrv/PDO50_FetchObject.phpt b/test/functional/pdo_sqlsrv/PDO50_FetchObject.phpt similarity index 100% rename from test/pdo_sqlsrv/PDO50_FetchObject.phpt rename to test/functional/pdo_sqlsrv/PDO50_FetchObject.phpt diff --git a/test/pdo_sqlsrv/PDO51_FetchLOB.phpt b/test/functional/pdo_sqlsrv/PDO51_FetchLOB.phpt similarity index 100% rename from test/pdo_sqlsrv/PDO51_FetchLOB.phpt rename to test/functional/pdo_sqlsrv/PDO51_FetchLOB.phpt diff --git a/test/pdo_sqlsrv/PDO61_BindColumn1.phpt b/test/functional/pdo_sqlsrv/PDO61_BindColumn1.phpt similarity index 100% rename from test/pdo_sqlsrv/PDO61_BindColumn1.phpt rename to test/functional/pdo_sqlsrv/PDO61_BindColumn1.phpt diff --git a/test/pdo_sqlsrv/PDO62_BindColumn2.phpt b/test/functional/pdo_sqlsrv/PDO62_BindColumn2.phpt similarity index 100% rename from test/pdo_sqlsrv/PDO62_BindColumn2.phpt rename to test/functional/pdo_sqlsrv/PDO62_BindColumn2.phpt diff --git a/test/pdo_sqlsrv/PDO63_BindParam1.phpt b/test/functional/pdo_sqlsrv/PDO63_BindParam1.phpt similarity index 100% rename from test/pdo_sqlsrv/PDO63_BindParam1.phpt rename to test/functional/pdo_sqlsrv/PDO63_BindParam1.phpt diff --git a/test/pdo_sqlsrv/PDO64_BindParam2.phpt b/test/functional/pdo_sqlsrv/PDO64_BindParam2.phpt similarity index 100% rename from test/pdo_sqlsrv/PDO64_BindParam2.phpt rename to test/functional/pdo_sqlsrv/PDO64_BindParam2.phpt diff --git a/test/pdo_sqlsrv/PDO65_BindValue1.phpt b/test/functional/pdo_sqlsrv/PDO65_BindValue1.phpt similarity index 100% rename from test/pdo_sqlsrv/PDO65_BindValue1.phpt rename to test/functional/pdo_sqlsrv/PDO65_BindValue1.phpt diff --git a/test/pdo_sqlsrv/PDO66_BindValue2.phpt b/test/functional/pdo_sqlsrv/PDO66_BindValue2.phpt similarity index 100% rename from test/pdo_sqlsrv/PDO66_BindValue2.phpt rename to test/functional/pdo_sqlsrv/PDO66_BindValue2.phpt diff --git a/test/pdo_sqlsrv/PDO67_BindTruncation.phpt b/test/functional/pdo_sqlsrv/PDO67_BindTruncation.phpt similarity index 100% rename from test/pdo_sqlsrv/PDO67_BindTruncation.phpt rename to test/functional/pdo_sqlsrv/PDO67_BindTruncation.phpt diff --git a/test/pdo_sqlsrv/PDO71_TransExec.phpt b/test/functional/pdo_sqlsrv/PDO71_TransExec.phpt similarity index 100% rename from test/pdo_sqlsrv/PDO71_TransExec.phpt rename to test/functional/pdo_sqlsrv/PDO71_TransExec.phpt diff --git a/test/pdo_sqlsrv/PDO72_TransDisconnect.phpt b/test/functional/pdo_sqlsrv/PDO72_TransDisconnect.phpt similarity index 100% rename from test/pdo_sqlsrv/PDO72_TransDisconnect.phpt rename to test/functional/pdo_sqlsrv/PDO72_TransDisconnect.phpt diff --git a/test/functional/pdo_sqlsrv/PDO81_MemoryCheck.phpt b/test/functional/pdo_sqlsrv/PDO81_MemoryCheck.phpt new file mode 100644 index 00000000..8cc64838 --- /dev/null +++ b/test/functional/pdo_sqlsrv/PDO81_MemoryCheck.phpt @@ -0,0 +1,243 @@ +--TEST-- +Memory Leakage Test +--DESCRIPTION-- +Checks for memory leaks using memory_get_usage(). memory_get_usage() only tracks the memory that is allocated using +emalloc (which only allocate memory in the memory space allocated for the PHP process). +--ENV-- +PHPT_EXEC=true +--SKIPIF-- + +--FILE-- + ".($noRows1 + $noRows2)." rows.\n"); + $conn1 = Connect(); + + CreateTable($conn1, $tableName); + $noRowsInserted = InsertRows($conn1, $tableName, $noRows1); + + // Calibration + $phpLeak = RunTest($noPasses, 0, $tableName, $conn1, false, 0); + Trace("\n0. Calibration\t - PHP memory leak: $phpLeak bytes\n"); + + // Preliminary Execution + Trace("\nPreliminary Execution:\n"); + $drvLeak = 0; + for ($j = 0; $j < 2; $j++) + { + $leak = ExecTest(1, $noRows1, $startStep, $endStep, $tableName, $conn1, (($j % 2) != 0), $phpLeak); + if ($leak > $drvLeak) + { + $drvLeak = $leak; + } + } + $totalLeak = 0; + + // Execution + $noRows = $noRows1; + $prepared = false; + Trace("\nActual Execution:\n"); + for ($j = 0; $j < 4; $j++) + { + switch ($j) + { + case 0: + $prepared = false; + break; + + case 1: + $prepared = false; + InsertRows($conn1, $tableName, $noRows2); + $noRows += $noRows2; + break; + + case 2: + $prepared = true; + break; + + case 3: + $prepared = true; + InsertRows($conn1, $tableName, $noRows2); + $noRows += $noRows2; + break; + + default: + break; + + } + $leak = ExecTest($noPasses, $noRows, $startStep, $endStep, $tableName, $conn1, $prepared, $phpLeak) - $drvLeak; + if ($leak > $totalLeak) + { + $totalLeak = $leak; + } + } + + $conn1 = null; + + $conn2 = Connect(); + DropTable($conn2, $tableName); + $conn2 = null; + + if ($totalLeak > 0) + { + $expectedLeak = min($drvLeak, $leakThreshold) * $noPasses; + Trace("Driver memory leak: $totalLeak bytes (max expected: $expectedLeak)\n"); + if ($totalLeak > $expectedLeak) + { + die("Memory leaks detected: $totalLeak bytes\n"); + } + } + + EndTest($testName); +} + +function ExecTest($noPasses, $noRows, $startStep, $endStep, $tableName, $conn, $prepared, $phpLeak) +{ + $leak = 0; + + // Execution + if ($prepared) + { + Trace("\nPrepared Query Mode\n"); + } + else + { + Trace("\nDirect Query Mode\n"); + } + for ($i = $startStep; $i <= $endStep; $i++) + { + switch ($i) + { + case 0: // Calibration + Trace("$i. Calibration\t - "); + break; + + case 1: // connection only + Trace("$i. Connection\t - "); + break; + + case 2: // query + Trace("$i. Query\t - "); + break; + + case 3: // fetch + Trace("$i. Fetch\t - "); + break; + + default: + break; + } + + $memLeak = RunTest($noPasses, $noRows, $tableName, $conn, $prepared, $i) - $phpLeak; + Trace("Driver memory leak: $memLeak bytes\n"); + if ($memLeak > $leak) + { + $leak = $memLeak; + } + } + + return ($leak); +} + +function RunTest($noPasses, $noRows, $tableName, $conn, $prepared, $mode) +{ + $leak = 0; + for ($k = 1; $k <= $noPasses; $k++) + { + $tsql = "SELECT * FROM [$tableName]"; + $memStart = 0; + $memEnd = 0; + $conn2 = null; + $stmt = null; + $row = null; + $rowCount = 0; + $fldCount = 0; + + $memStart = memory_get_usage(); + switch ($mode) + { + case 0: // calibration + break; + + case 1: // connection + $conn2 = GetConnection(); + unset($conn2); + break; + + case 2: // query + $stmt = ExecuteQueryEx($conn, $tsql, ($prepared ? false : true)); + $fldCount = $stmt->columnCount(); + $stmt->closeCursor(); + unset($stmt); + break; + + case 3: // fetch + $stmt = ExecuteQueryEx($conn, $tsql, ($prepared ? false : true)); + $fldCount = $stmt->columnCount(); + while ($row = $stmt->fetch()) + { + unset($row); + $rowCount++; + } + $stmt->closeCursor(); + unset($stmt); + if ($rowCount != $noRows) + { + die("$rowCount rows retrieved instead of $noRows\n"); + } + break; + + default: + break; + + } + $memEnd = memory_get_usage(); + if ($memEnd > $memStart) + { + $leak += ($memEnd - $memStart); + } + + } + return ($leak); +} + +function GetConnection() +{ + include 'MsSetup.inc'; + $conn = PDOConnect('PDO', $server, $uid, $pwd, true); + return ($conn); +} + + +//-------------------------------------------------------------------- +// Repro +// +//-------------------------------------------------------------------- +function Repro() +{ + try + { + MemCheck(20, 10, 15, 1, 3, 0); + } + catch (Exception $e) + { + echo $e->getMessage(); + } +} + +Repro(); + +?> +--EXPECT-- +Test "Memory Leakage Check" completed successfully. diff --git a/test/pdo_sqlsrv/PDO82_ComplexInsert.phpt b/test/functional/pdo_sqlsrv/PDO82_ComplexInsert.phpt similarity index 100% rename from test/pdo_sqlsrv/PDO82_ComplexInsert.phpt rename to test/functional/pdo_sqlsrv/PDO82_ComplexInsert.phpt diff --git a/test/pdo_sqlsrv/PDO91_Parent.phpt b/test/functional/pdo_sqlsrv/PDO91_Parent.phpt similarity index 100% rename from test/pdo_sqlsrv/PDO91_Parent.phpt rename to test/functional/pdo_sqlsrv/PDO91_Parent.phpt diff --git a/test/pdo_sqlsrv/PDO92_Iterator.phpt b/test/functional/pdo_sqlsrv/PDO92_Iterator.phpt similarity index 100% rename from test/pdo_sqlsrv/PDO92_Iterator.phpt rename to test/functional/pdo_sqlsrv/PDO92_Iterator.phpt diff --git a/test/pdo_sqlsrv/PDO93_Recursive.phpt b/test/functional/pdo_sqlsrv/PDO93_Recursive.phpt similarity index 100% rename from test/pdo_sqlsrv/PDO93_Recursive.phpt rename to test/functional/pdo_sqlsrv/PDO93_Recursive.phpt diff --git a/test/pdo_sqlsrv/PDO94_Extend1.phpt b/test/functional/pdo_sqlsrv/PDO94_Extend1.phpt similarity index 100% rename from test/pdo_sqlsrv/PDO94_Extend1.phpt rename to test/functional/pdo_sqlsrv/PDO94_Extend1.phpt diff --git a/test/pdo_sqlsrv/PDO95_Extend2.phpt b/test/functional/pdo_sqlsrv/PDO95_Extend2.phpt similarity index 100% rename from test/pdo_sqlsrv/PDO95_Extend2.phpt rename to test/functional/pdo_sqlsrv/PDO95_Extend2.phpt diff --git a/test/pdo_sqlsrv/PDO96_Extend3.phpt b/test/functional/pdo_sqlsrv/PDO96_Extend3.phpt similarity index 100% rename from test/pdo_sqlsrv/PDO96_Extend3.phpt rename to test/functional/pdo_sqlsrv/PDO96_Extend3.phpt diff --git a/test/pdo_sqlsrv/PDO97_Extend4.phpt b/test/functional/pdo_sqlsrv/PDO97_Extend4.phpt similarity index 100% rename from test/pdo_sqlsrv/PDO97_Extend4.phpt rename to test/functional/pdo_sqlsrv/PDO97_Extend4.phpt diff --git a/test/pdo_sqlsrv/PDO98_Extend5.phpt b/test/functional/pdo_sqlsrv/PDO98_Extend5.phpt similarity index 100% rename from test/pdo_sqlsrv/PDO98_Extend5.phpt rename to test/functional/pdo_sqlsrv/PDO98_Extend5.phpt diff --git a/test/pdo_sqlsrv/PDO99_QuoteNullTerminated.phpt b/test/functional/pdo_sqlsrv/PDO99_QuoteNullTerminated.phpt similarity index 100% rename from test/pdo_sqlsrv/PDO99_QuoteNullTerminated.phpt rename to test/functional/pdo_sqlsrv/PDO99_QuoteNullTerminated.phpt diff --git a/test/functional/pdo_sqlsrv/PDO_ConnPool_Unix.phpt b/test/functional/pdo_sqlsrv/PDO_ConnPool_Unix.phpt new file mode 100644 index 00000000..e7a95ccd --- /dev/null +++ b/test/functional/pdo_sqlsrv/PDO_ConnPool_Unix.phpt @@ -0,0 +1,63 @@ +--TEST-- +PDO Connection Pooling Test on Unix +--DESCRIPTION-- +This test assumes odbcinst.ini has not been modified. +This test also requires root privileges to modify odbcinst.ini file on Linux. +--SKIPIF-- + +--FILE-- + +--CLEAN-- + +--EXPECT-- +Pooled +Not Pooled + diff --git a/test/functional/pdo_sqlsrv/break_pdo.php b/test/functional/pdo_sqlsrv/break_pdo.php new file mode 100644 index 00000000..0be99e6f --- /dev/null +++ b/test/functional/pdo_sqlsrv/break_pdo.php @@ -0,0 +1,84 @@ +query( $sql ); + + // Insert data + $sql = "INSERT INTO $tableName1 VALUES ( ?, ? )"; + for( $t = 100; $t < 116; $t++ ) + { + $stmt = $conn->prepare( $sql ); + $ts = substr( sha1( $t ),0,5 ); + $params = array( $t,$ts ); + $stmt->execute( $params ); + } + + // Create table + $sql = "CREATE TABLE $tableName2 ( c1 INT, c2 VARCHAR(40) )"; + $stmt = $conn->query( $sql ); + + // Insert data + $sql = "INSERT INTO $tableName2 VALUES ( ?, ? )"; + for( $t = 200; $t < 209; $t++ ) + { + $stmt = $conn->prepare( $sql ); + $ts = substr( sha1( $t ),0,5 ); + $params = array( $t,$ts ); + $stmt->execute( $params ); + } + + $conn = null; +} + +// Break connection by getting the session ID and killing it. +// Note that breaking a connection and testing reconnection requires a +// TCP/IP protocol connection (as opposed to a Shared Memory protocol). +function BreakConnection( $conn, $conn_break ) +{ + $stmt1 = $conn->query( "SELECT @@SPID" ); + $obj = $stmt1->fetch( PDO::FETCH_NUM ); + $spid = $obj[0]; + + $stmt2 = $conn_break->query( "KILL ".$spid ); + sleep(1); +} + +// Remove any databases previously created by GenerateDatabase +function DropTables( $server, $uid, $pwd, $tableName1, $tableName2 ) +{ + global $dbName; + + $conn = new PDO( "sqlsrv:server = $server ; Database = $dbName ;", $uid, $pwd ); + + $query="IF OBJECT_ID('$tableName1', 'U') IS NOT NULL DROP TABLE $tableName1"; + $stmt=$conn->query( $query ); + + $query="IF OBJECT_ID('$tableName2', 'U') IS NOT NULL DROP TABLE $tableName2"; + $stmt=$conn->query( $query ); +} + +DropTables( $server, $uid, $pwd, $tableName1, $tableName2 ); +GenerateTables( $server, $uid, $pwd, $dbName, $tableName1, $tableName2 ); + +?> diff --git a/test/pdo_sqlsrv/isPooled.php b/test/functional/pdo_sqlsrv/isPooled.php similarity index 72% rename from test/pdo_sqlsrv/isPooled.php rename to test/functional/pdo_sqlsrv/isPooled.php index 85bd5f6e..b0be6e0e 100644 --- a/test/pdo_sqlsrv/isPooled.php +++ b/test/functional/pdo_sqlsrv/isPooled.php @@ -1,11 +1,12 @@ ---FILE-- -query($query); -while ( $row = $stmt->fetch(PDO::FETCH_NUM) ){ - echo $row[0]."\n"; -} - -$stmt = $conn->query($query); -while ( $row = $stmt->fetch(PDO::FETCH_ASSOC) ){ - echo $row['']."\n"; -} - -// Free the connection -$conn=null; -echo "Done" -?> - ---EXPECTREGEX-- -APP_PoP_银河 -APP_PoP_银河 -Done +--TEST-- +Connection option APP name unicode +--SKIPIF-- + +--FILE-- +query($query); +while ( $row = $stmt->fetch(PDO::FETCH_NUM) ){ + echo $row[0]."\n"; +} + +$stmt = $conn->query($query); +while ( $row = $stmt->fetch(PDO::FETCH_ASSOC) ){ + echo $row['']."\n"; +} + +// Free the connection +$conn=null; +echo "Done" +?> + +--EXPECTREGEX-- +APP_PoP_银河 +APP_PoP_银河 +Done diff --git a/test/pdo_sqlsrv/pdo_011_quote.phpt b/test/functional/pdo_sqlsrv/pdo_011_quote.phpt similarity index 95% rename from test/pdo_sqlsrv/pdo_011_quote.phpt rename to test/functional/pdo_sqlsrv/pdo_011_quote.phpt index 6cd5a9ca..abfe8816 100644 --- a/test/pdo_sqlsrv/pdo_011_quote.phpt +++ b/test/functional/pdo_sqlsrv/pdo_011_quote.phpt @@ -1,50 +1,50 @@ ---TEST-- -Insert with quoted parameters ---SKIPIF-- - ---FILE-- -quote( $param ); - -// Create a temporary table -$tableName = '#tmpTable'; -$query = "CREATE TABLE $tableName (col1 VARCHAR(10), col2 VARCHAR(20))"; -$stmt = $conn->exec($query); -if( $stmt === false ) { die(); } - -// Inserd data -$query = "INSERT INTO $tableName VALUES( ?, '1' )"; -$stmt = $conn->prepare( $query ); -$stmt->execute(array($param)); - -// Inserd data -$query = "INSERT INTO $tableName VALUES( ?, ? )"; -$stmt = $conn->prepare( $query ); -$stmt->execute(array($param, $param2)); - -// Query -$query = "SELECT * FROM $tableName"; -$stmt = $conn->query($query); -while ( $row = $stmt->fetch( PDO::FETCH_ASSOC ) ){ - print_r( $row['col1'] ." was inserted\n" ); -} - -// Revert the inserts -$query = "delete from $tableName where col1 = ?"; -$stmt = $conn->prepare( $query ); -$stmt->execute(array($param)); - -//free the statement and connection -$stmt=null; -$conn=null; -?> ---EXPECT-- -a ' g was inserted -a ' g was inserted - +--TEST-- +Insert with quoted parameters +--SKIPIF-- + +--FILE-- +quote( $param ); + +// Create a temporary table +$tableName = '#tmpTable'; +$query = "CREATE TABLE $tableName (col1 VARCHAR(10), col2 VARCHAR(20))"; +$stmt = $conn->exec($query); +if( $stmt === false ) { die(); } + +// Inserd data +$query = "INSERT INTO $tableName VALUES( ?, '1' )"; +$stmt = $conn->prepare( $query ); +$stmt->execute(array($param)); + +// Inserd data +$query = "INSERT INTO $tableName VALUES( ?, ? )"; +$stmt = $conn->prepare( $query ); +$stmt->execute(array($param, $param2)); + +// Query +$query = "SELECT * FROM $tableName"; +$stmt = $conn->query($query); +while ( $row = $stmt->fetch( PDO::FETCH_ASSOC ) ){ + print_r( $row['col1'] ." was inserted\n" ); +} + +// Revert the inserts +$query = "delete from $tableName where col1 = ?"; +$stmt = $conn->prepare( $query ); +$stmt->execute(array($param)); + +//free the statement and connection +$stmt=null; +$conn=null; +?> +--EXPECT-- +a ' g was inserted +a ' g was inserted + diff --git a/test/pdo_sqlsrv/pdo_012_bind_param.phpt b/test/functional/pdo_sqlsrv/pdo_012_bind_param.phpt similarity index 100% rename from test/pdo_sqlsrv/pdo_012_bind_param.phpt rename to test/functional/pdo_sqlsrv/pdo_012_bind_param.phpt diff --git a/test/pdo_sqlsrv/pdo_013_row_count.phpt b/test/functional/pdo_sqlsrv/pdo_013_row_count.phpt similarity index 95% rename from test/pdo_sqlsrv/pdo_013_row_count.phpt rename to test/functional/pdo_sqlsrv/pdo_013_row_count.phpt index 887ae835..54014382 100644 --- a/test/pdo_sqlsrv/pdo_013_row_count.phpt +++ b/test/functional/pdo_sqlsrv/pdo_013_row_count.phpt @@ -1,56 +1,56 @@ ---TEST-- -Number of rows in a result set ---SKIPIF-- - ---FILE-- -exec("CREATE TABLE $tableName (c1 VARCHAR(32))"); -$stmt=null; - -// Insert data -$query = "INSERT INTO $tableName VALUES ('Salmon'),('Butterfish'),('Cod'),('NULL'),('Crab')"; -$stmt = $conn->query($query); -$res[] = $stmt->rowCount(); - -// Update data -$query = "UPDATE $tableName SET c1='Salmon' WHERE c1='Cod'"; -$stmt = $conn->query($query); -$res[] = $stmt->rowCount(); - -// Update data -$query = "UPDATE $tableName SET c1='Salmon' WHERE c1='NULL'"; -$stmt = $conn->query($query); -$res[] = $stmt->rowCount(); - -// Update data -$query = "UPDATE $tableName SET c1='Salmon' WHERE c1='NO_NAME'"; -$stmt = $conn->query($query); -$res[] = $stmt->rowCount(); - -// Update data -$query = "UPDATE $tableName SET c1='N/A'"; -$stmt = $conn->query($query); -$res[] = $stmt->rowCount(); - -print_r($res); - -$stmt=null; -$conn=null; -print "Done" -?> ---EXPECT-- -Array -( - [0] => 5 - [1] => 1 - [2] => 1 - [3] => 0 - [4] => 5 -) -Done +--TEST-- +Number of rows in a result set +--SKIPIF-- + +--FILE-- +exec("CREATE TABLE $tableName (c1 VARCHAR(32))"); +$stmt=null; + +// Insert data +$query = "INSERT INTO $tableName VALUES ('Salmon'),('Butterfish'),('Cod'),('NULL'),('Crab')"; +$stmt = $conn->query($query); +$res[] = $stmt->rowCount(); + +// Update data +$query = "UPDATE $tableName SET c1='Salmon' WHERE c1='Cod'"; +$stmt = $conn->query($query); +$res[] = $stmt->rowCount(); + +// Update data +$query = "UPDATE $tableName SET c1='Salmon' WHERE c1='NULL'"; +$stmt = $conn->query($query); +$res[] = $stmt->rowCount(); + +// Update data +$query = "UPDATE $tableName SET c1='Salmon' WHERE c1='NO_NAME'"; +$stmt = $conn->query($query); +$res[] = $stmt->rowCount(); + +// Update data +$query = "UPDATE $tableName SET c1='N/A'"; +$stmt = $conn->query($query); +$res[] = $stmt->rowCount(); + +print_r($res); + +$stmt=null; +$conn=null; +print "Done" +?> +--EXPECT-- +Array +( + [0] => 5 + [1] => 1 + [2] => 1 + [3] => 0 + [4] => 5 +) +Done diff --git a/test/pdo_sqlsrv/pdo_014_integer_custom_formats.phpt b/test/functional/pdo_sqlsrv/pdo_014_integer_custom_formats.phpt similarity index 100% rename from test/pdo_sqlsrv/pdo_014_integer_custom_formats.phpt rename to test/functional/pdo_sqlsrv/pdo_014_integer_custom_formats.phpt diff --git a/test/pdo_sqlsrv/pdo_015_integer_custom_formats_pooling.phpt b/test/functional/pdo_sqlsrv/pdo_015_integer_custom_formats_pooling.phpt similarity index 100% rename from test/pdo_sqlsrv/pdo_015_integer_custom_formats_pooling.phpt rename to test/functional/pdo_sqlsrv/pdo_015_integer_custom_formats_pooling.phpt diff --git a/test/pdo_sqlsrv/pdo_016.phpt b/test/functional/pdo_sqlsrv/pdo_016.phpt similarity index 100% rename from test/pdo_sqlsrv/pdo_016.phpt rename to test/functional/pdo_sqlsrv/pdo_016.phpt diff --git a/test/pdo_sqlsrv/pdo_017.phpt b/test/functional/pdo_sqlsrv/pdo_017.phpt similarity index 100% rename from test/pdo_sqlsrv/pdo_017.phpt rename to test/functional/pdo_sqlsrv/pdo_017.phpt diff --git a/test/pdo_sqlsrv/pdo_018_next_result_set.phpt b/test/functional/pdo_sqlsrv/pdo_018_next_result_set.phpt similarity index 100% rename from test/pdo_sqlsrv/pdo_018_next_result_set.phpt rename to test/functional/pdo_sqlsrv/pdo_018_next_result_set.phpt diff --git a/test/pdo_sqlsrv/pdo_019_next_result_set_pooling.phpt b/test/functional/pdo_sqlsrv/pdo_019_next_result_set_pooling.phpt similarity index 100% rename from test/pdo_sqlsrv/pdo_019_next_result_set_pooling.phpt rename to test/functional/pdo_sqlsrv/pdo_019_next_result_set_pooling.phpt diff --git a/test/pdo_sqlsrv/pdo_020_bind_params_array.phpt b/test/functional/pdo_sqlsrv/pdo_020_bind_params_array.phpt similarity index 100% rename from test/pdo_sqlsrv/pdo_020_bind_params_array.phpt rename to test/functional/pdo_sqlsrv/pdo_020_bind_params_array.phpt diff --git a/test/pdo_sqlsrv/pdo_021_extended_ascii.phpt b/test/functional/pdo_sqlsrv/pdo_021_extended_ascii.phpt similarity index 100% rename from test/pdo_sqlsrv/pdo_021_extended_ascii.phpt rename to test/functional/pdo_sqlsrv/pdo_021_extended_ascii.phpt diff --git a/test/pdo_sqlsrv/pdo_022_xml_bind_value.phpt b/test/functional/pdo_sqlsrv/pdo_022_xml_bind_value.phpt similarity index 100% rename from test/pdo_sqlsrv/pdo_022_xml_bind_value.phpt rename to test/functional/pdo_sqlsrv/pdo_022_xml_bind_value.phpt diff --git a/test/pdo_sqlsrv/pdo_023.phpt b/test/functional/pdo_sqlsrv/pdo_023.phpt similarity index 100% rename from test/pdo_sqlsrv/pdo_023.phpt rename to test/functional/pdo_sqlsrv/pdo_023.phpt diff --git a/test/pdo_sqlsrv/pdo_033_binary_unicode.phpt b/test/functional/pdo_sqlsrv/pdo_033_binary_unicode.phpt similarity index 100% rename from test/pdo_sqlsrv/pdo_033_binary_unicode.phpt rename to test/functional/pdo_sqlsrv/pdo_033_binary_unicode.phpt diff --git a/test/pdo_sqlsrv/pdo_035_binary_encoding_error_bound_by_name.phpt b/test/functional/pdo_sqlsrv/pdo_035_binary_encoding_error_bound_by_name.phpt similarity index 100% rename from test/pdo_sqlsrv/pdo_035_binary_encoding_error_bound_by_name.phpt rename to test/functional/pdo_sqlsrv/pdo_035_binary_encoding_error_bound_by_name.phpt diff --git a/test/pdo_sqlsrv/pdo_040_error_information.phpt b/test/functional/pdo_sqlsrv/pdo_040_error_information.phpt similarity index 100% rename from test/pdo_sqlsrv/pdo_040_error_information.phpt rename to test/functional/pdo_sqlsrv/pdo_040_error_information.phpt diff --git a/test/pdo_sqlsrv/pdo_060_prepare_execute_fetch_pooling_default.phpt b/test/functional/pdo_sqlsrv/pdo_060_prepare_execute_fetch_pooling_default.phpt similarity index 100% rename from test/pdo_sqlsrv/pdo_060_prepare_execute_fetch_pooling_default.phpt rename to test/functional/pdo_sqlsrv/pdo_060_prepare_execute_fetch_pooling_default.phpt diff --git a/test/pdo_sqlsrv/pdo_061_prepare_execute_fetch_pooling_enabled.phpt b/test/functional/pdo_sqlsrv/pdo_061_prepare_execute_fetch_pooling_enabled.phpt similarity index 100% rename from test/pdo_sqlsrv/pdo_061_prepare_execute_fetch_pooling_enabled.phpt rename to test/functional/pdo_sqlsrv/pdo_061_prepare_execute_fetch_pooling_enabled.phpt diff --git a/test/pdo_sqlsrv/pdo_062_prepare_execute_fetch_pooling_disabled.phpt b/test/functional/pdo_sqlsrv/pdo_062_prepare_execute_fetch_pooling_disabled.phpt similarity index 100% rename from test/pdo_sqlsrv/pdo_062_prepare_execute_fetch_pooling_disabled.phpt rename to test/functional/pdo_sqlsrv/pdo_062_prepare_execute_fetch_pooling_disabled.phpt diff --git a/test/pdo_sqlsrv/pdo_065_construct_persistent.phpt b/test/functional/pdo_sqlsrv/pdo_065_construct_persistent.phpt similarity index 100% rename from test/pdo_sqlsrv/pdo_065_construct_persistent.phpt rename to test/functional/pdo_sqlsrv/pdo_065_construct_persistent.phpt diff --git a/test/pdo_sqlsrv/pdo_065_construct_prefetch.phpt b/test/functional/pdo_sqlsrv/pdo_065_construct_prefetch.phpt similarity index 100% rename from test/pdo_sqlsrv/pdo_065_construct_prefetch.phpt rename to test/functional/pdo_sqlsrv/pdo_065_construct_prefetch.phpt diff --git a/test/pdo_sqlsrv/pdo_069_fetch_empty_nvarchar_buffered.phpt b/test/functional/pdo_sqlsrv/pdo_069_fetch_empty_nvarchar_buffered.phpt similarity index 100% rename from test/pdo_sqlsrv/pdo_069_fetch_empty_nvarchar_buffered.phpt rename to test/functional/pdo_sqlsrv/pdo_069_fetch_empty_nvarchar_buffered.phpt diff --git a/test/pdo_sqlsrv/pdo_092_emulate_prepare_statement_utf8.phpt b/test/functional/pdo_sqlsrv/pdo_092_emulate_prepare_statement_utf8.phpt similarity index 100% rename from test/pdo_sqlsrv/pdo_092_emulate_prepare_statement_utf8.phpt rename to test/functional/pdo_sqlsrv/pdo_092_emulate_prepare_statement_utf8.phpt diff --git a/test/pdo_sqlsrv/pdo_138_unicode_column_name.phpt b/test/functional/pdo_sqlsrv/pdo_138_unicode_column_name.phpt similarity index 100% rename from test/pdo_sqlsrv/pdo_138_unicode_column_name.phpt rename to test/functional/pdo_sqlsrv/pdo_138_unicode_column_name.phpt diff --git a/test/pdo_sqlsrv/pdo_140_emulate_prepare_mix_binary.phpt b/test/functional/pdo_sqlsrv/pdo_140_emulate_prepare_mix_binary.phpt similarity index 100% rename from test/pdo_sqlsrv/pdo_140_emulate_prepare_mix_binary.phpt rename to test/functional/pdo_sqlsrv/pdo_140_emulate_prepare_mix_binary.phpt diff --git a/test/pdo_sqlsrv/pdo_140_emulate_prepare_pos_placehodlers.phpt b/test/functional/pdo_sqlsrv/pdo_140_emulate_prepare_pos_placehodlers.phpt similarity index 100% rename from test/pdo_sqlsrv/pdo_140_emulate_prepare_pos_placehodlers.phpt rename to test/functional/pdo_sqlsrv/pdo_140_emulate_prepare_pos_placehodlers.phpt diff --git a/test/pdo_sqlsrv/pdo_228_setAttribute_clientbuffermaxkbsize.phpt b/test/functional/pdo_sqlsrv/pdo_228_setAttribute_clientbuffermaxkbsize.phpt similarity index 100% rename from test/pdo_sqlsrv/pdo_228_setAttribute_clientbuffermaxkbsize.phpt rename to test/functional/pdo_sqlsrv/pdo_228_setAttribute_clientbuffermaxkbsize.phpt diff --git a/test/pdo_sqlsrv/pdo_267_closeCursor.phpt b/test/functional/pdo_sqlsrv/pdo_267_closeCursor.phpt similarity index 100% rename from test/pdo_sqlsrv/pdo_267_closeCursor.phpt rename to test/functional/pdo_sqlsrv/pdo_267_closeCursor.phpt diff --git a/test/pdo_sqlsrv/pdo_270_fetch_binary.phpt b/test/functional/pdo_sqlsrv/pdo_270_fetch_binary.phpt similarity index 100% rename from test/pdo_sqlsrv/pdo_270_fetch_binary.phpt rename to test/functional/pdo_sqlsrv/pdo_270_fetch_binary.phpt diff --git a/test/pdo_sqlsrv/pdo_308_empty_output_param.phpt b/test/functional/pdo_sqlsrv/pdo_308_empty_output_param.phpt similarity index 100% rename from test/pdo_sqlsrv/pdo_308_empty_output_param.phpt rename to test/functional/pdo_sqlsrv/pdo_308_empty_output_param.phpt diff --git a/test/pdo_sqlsrv/pdo_336_pho_exec_empty_result_set_error.phpt b/test/functional/pdo_sqlsrv/pdo_336_pho_exec_empty_result_set_error.phpt similarity index 100% rename from test/pdo_sqlsrv/pdo_336_pho_exec_empty_result_set_error.phpt rename to test/functional/pdo_sqlsrv/pdo_336_pho_exec_empty_result_set_error.phpt diff --git a/test/pdo_sqlsrv/pdo_378_out_param_error.phpt b/test/functional/pdo_sqlsrv/pdo_378_out_param_error.phpt similarity index 100% rename from test/pdo_sqlsrv/pdo_378_out_param_error.phpt rename to test/functional/pdo_sqlsrv/pdo_378_out_param_error.phpt diff --git a/test/functional/pdo_sqlsrv/pdo_TNIR.phpt b/test/functional/pdo_sqlsrv/pdo_TNIR.phpt new file mode 100644 index 00000000..436c033d --- /dev/null +++ b/test/functional/pdo_sqlsrv/pdo_TNIR.phpt @@ -0,0 +1,60 @@ +--TEST-- +Test the TNIR keyword with enabled and disabled options and the MultiSubnetFailover keyword with true and false options +--SKIPIF-- + +--FILE-- + PDO::ERRMODE_EXCEPTION)); + echo "Connection successful with TNIR $TNIRValue and MultiSubnetFailover $MSFValueStr.\n"; + $connect_time = round(microtime(true) - $start, 2); + echo "Time to connect is $connect_time sec.\n\n"; + $conn = NULL; + } + catch(PDOException $e) { + echo "Connection failed with TNIR $TNIRValue and MultiSubnetFailover $MSFValueStr.\n"; + print_r($e->errorInfo); + } +} + +test_tnir("Enabled", false); // case temd (TNIR enabled; MultiSubnetFailover disabled) +test_tnir("Enabled", true); // case teme +test_tnir("Disabled", false); // case tdmd +test_tnir("Disabled", true); // case tdme + +// Interpreting output +// If the first resolved IP address can be connected, then the time to connect for all these cases is similar +// else if the second resolved IP address can be connected, then temd ~= tdmd > teme ~= tdme +// else tdmd > temd > teme ~= tdme +// note: the first test takes a bit longer since time is needed for the DNS to resolve the IP addresses of the server host name +?> + +--EXPECTREGEX-- +Connection successful with TNIR Enabled and MultiSubnetFailover false\. +Time to connect is [0-9]+.?[0-9]* sec\. + +Connection successful with TNIR Enabled and MultiSubnetFailover true\. +Time to connect is [0-9]+.?[0-9]* sec\. + +Connection successful with TNIR Disabled and MultiSubnetFailover false\. +Time to connect is [0-9]+.?[0-9]* sec\. + +Connection successful with TNIR Disabled and MultiSubnetFailover true\. +Time to connect is [0-9]+.?[0-9]* sec\. \ No newline at end of file diff --git a/test/pdo_sqlsrv/pdo_azure_ad_authentication.phpt b/test/functional/pdo_sqlsrv/pdo_azure_ad_authentication.phpt similarity index 99% rename from test/pdo_sqlsrv/pdo_azure_ad_authentication.phpt rename to test/functional/pdo_sqlsrv/pdo_azure_ad_authentication.phpt index 9ec93b1b..6bccfe55 100644 --- a/test/pdo_sqlsrv/pdo_azure_ad_authentication.phpt +++ b/test/functional/pdo_sqlsrv/pdo_azure_ad_authentication.phpt @@ -96,4 +96,3 @@ array(2) { Could not connect with Authentication=ActiveDirectoryIntegrated. SQLSTATE[IMSSP]: Invalid option for the Authentication keyword. Only SqlPassword or ActiveDirectoryPassword is supported. %s with Authentication=ActiveDirectoryPassword. - diff --git a/test/pdo_sqlsrv/pdo_bindparam_inout_binary_encoding.phpt b/test/functional/pdo_sqlsrv/pdo_bindparam_inout_binary_encoding.phpt similarity index 100% rename from test/pdo_sqlsrv/pdo_bindparam_inout_binary_encoding.phpt rename to test/functional/pdo_sqlsrv/pdo_bindparam_inout_binary_encoding.phpt diff --git a/test/pdo_sqlsrv/pdo_connection_quote.phpt b/test/functional/pdo_sqlsrv/pdo_connection_quote.phpt similarity index 100% rename from test/pdo_sqlsrv/pdo_connection_quote.phpt rename to test/functional/pdo_sqlsrv/pdo_connection_quote.phpt diff --git a/test/functional/pdo_sqlsrv/pdo_connection_resiliency.phpt b/test/functional/pdo_sqlsrv/pdo_connection_resiliency.phpt new file mode 100644 index 00000000..cc847487 --- /dev/null +++ b/test/functional/pdo_sqlsrv/pdo_connection_resiliency.phpt @@ -0,0 +1,248 @@ +--TEST-- +Connection recovery test +--DESCRIPTION-- +Connect and execute a command, kill the connection, execute another command. +Then do it again without a buffered result set, by freeing the statement before +killing the connection and then not freeing it. The latter case is the only one +that should fail. Finally, execute two queries in two threads on a recovered +non-MARS connection. This should fail too. +--SKIPIF-- + +--FILE-- +setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); +} +catch( PDOException $e ) +{ + echo "Could not connect.\n"; + print_r( $e->getMessage() ); +} + +$query1 = "SELECT * FROM $tableName1"; + +try +{ + $stmt1 = $conn->prepare( $query1, array( PDO::ATTR_CURSOR=> PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE=> PDO::SQLSRV_CURSOR_BUFFERED ) ); + if ( $stmt1->execute() ) echo "Statement 1 successful.\n"; + + $rowcount = $stmt1->rowCount(); + echo $rowcount." rows in result set.\n"; +} +catch( PDOException $e ) +{ + echo "Error executing statement 1.\n"; + print_r( $e->getMessage() ); +} + +BreakConnection( $conn, $conn_break ); + +$query2 = "SELECT * FROM $tableName2"; + +try +{ + $stmt2 = $conn->prepare( $query2, array( PDO::ATTR_CURSOR=> PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE=> PDO::SQLSRV_CURSOR_BUFFERED ) ); + if ( $stmt2->execute() ) echo "Statement 2 successful.\n"; + + $rowcount = $stmt2->rowCount(); + echo $rowcount." rows in result set.\n"; +} +catch( PDOException $e ) +{ + echo "Error executing statement 2.\n"; + print_r( $e->getMessage() ); +} + +$conn = null; + +/////////////////////////////////////////////////////////////////////////////// +// Part 2 +// Expected to successfully execute second query because first statement is +// freed before breaking connection +/////////////////////////////////////////////////////////////////////////////// + +try +{ + $conn = new PDO( "sqlsrv:server = $server ; Database = $dbName ; $connectionInfo", $uid, $pwd ); + $conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); +} +catch( PDOException $e ) +{ + echo "Could not connect.\n"; + print_r( $e->getMessage() ); +} + +$query1 = "SELECT * FROM $tableName1"; + +try +{ + $stmt3 = $conn->query( $query1 ); + if ( $stmt3 ) echo "Statement 3 successful.\n"; + + $rowcount = $stmt3->rowCount(); + echo $rowcount." rows in result set.\n"; +} +catch( PDOException $e ) +{ + echo "Error executing statement 3.\n"; + print_r( $e->getMessage() ); +} + +$stmt3 = null; + +BreakConnection( $conn, $conn_break ); + +$query2 = "SELECT * FROM $tableName2"; + +try +{ + $stmt4 = $conn->query( $query2 ); + if ( $stmt4 ) echo "Statement 4 successful.\n"; + + $rowcount = $stmt4->rowCount(); + echo $rowcount." rows in result set.\n"; +} +catch( PDOException $e ) +{ + echo "Error executing statement 4.\n"; + print_r( $e->getMessage() ); +} + +$conn = null; + +/////////////////////////////////////////////////////////////////////////////// +// Part 3 +// Expected to fail executing second query because default cursor for first +// query is still active when connection is broken +/////////////////////////////////////////////////////////////////////////////// + +try +{ + $conn = new PDO( "sqlsrv:server = $server ; Database = $dbName ; $connectionInfo", $uid, $pwd ); + $conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); +} +catch( PDOException $e ) +{ + echo "Could not connect.\n"; + print_r( $e->getMessage() ); +} + +$query1 = "SELECT * FROM $tableName1"; + +try +{ + $stmt5 = $conn->query( $query1 ); + if ( $stmt5 ) echo "Statement 5 successful.\n"; + + $rowcount = $stmt5->rowCount(); + echo $rowcount." rows in result set.\n"; +} +catch( PDOException $e ) +{ + echo "Error executing statement 5.\n"; + print_r( $e->getMessage() ); +} + +BreakConnection( $conn, $conn_break ); + +$query2 = "SELECT * FROM $tableName2"; + +try +{ + $stmt6 = $conn->query( $query2 ); + if ( $stmt6 ) echo "Statement 6 successful.\n"; + + $rowcount = $stmt6->rowCount(); + echo $rowcount." rows in result set.\n"; +} +catch( PDOException $e ) +{ + echo "Error executing statement 6.\n"; + print_r( $e->getMessage() ); +} + +$conn = null; + +/////////////////////////////////////////////////////////////////////////////// +// Part 4 +// Expected to trigger an error because there are two active statements with +// pending results and MARS is off +/////////////////////////////////////////////////////////////////////////////// + +$connectionInfo = "ConnectRetryCount = 10; ConnectRetryInterval = 10; MultipleActiveResultSets = false;"; + +try +{ + $conn = new PDO( "sqlsrv:server = $server ; Database = $dbName ; $connectionInfo", $uid, $pwd ); + $conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); +} +catch( PDOException $e ) +{ + echo "Could not connect.\n"; + print_r( $e->getMessage() ); +} + +BreakConnection( $conn, $conn_break ); + +try +{ + $stmt7 = $conn->query( "SELECT * FROM $tableName1" ); + if ( $stmt7 ) echo "Statement 7 successful.\n"; +} +catch( PDOException $e ) +{ + echo "Error executing statement 7.\n"; + print_r( $e->getMessage() ); +} + +try +{ + $stmt8 = $conn->query( "SELECT * FROM $tableName2" ); + if ( $stmt8 ) echo "Statement 8 successful.\n"; +} +catch( PDOException $e ) +{ + echo "Error executing statement 8.\n"; + print_r( $e->getMessage() ); +} + +$conn = null; +$conn_break = null; + +?> +--EXPECTREGEX-- +Statement 1 successful. +16 rows in result set. +Statement 2 successful. +9 rows in result set. +Statement 3 successful. +-1 rows in result set. +Statement 4 successful. +-1 rows in result set. +Statement 5 successful. +-1 rows in result set. +Error executing statement 6. +SQLSTATE\[08S02\]: \[Microsoft\]\[ODBC Driver 1[1-9] for SQL Server\]TCP Provider: An existing connection was forcibly closed by the remote host. +Statement 7 successful. +Error executing statement 8. +SQLSTATE\[IMSSP\]: The connection cannot process this operation because there is a statement with pending results. To make the connection available for other queries, either fetch all results or cancel or free the statement. For more information, see the product documentation about the MultipleActiveResultSets connection option. diff --git a/test/pdo_sqlsrv/pdo_connection_resiliency_keywords.phpt b/test/functional/pdo_sqlsrv/pdo_connection_resiliency_keywords.phpt similarity index 100% rename from test/pdo_sqlsrv/pdo_connection_resiliency_keywords.phpt rename to test/functional/pdo_sqlsrv/pdo_connection_resiliency_keywords.phpt diff --git a/test/functional/pdo_sqlsrv/pdo_connection_resiliency_prepare_transact.phpt b/test/functional/pdo_sqlsrv/pdo_connection_resiliency_prepare_transact.phpt new file mode 100644 index 00000000..d2bcb198 --- /dev/null +++ b/test/functional/pdo_sqlsrv/pdo_connection_resiliency_prepare_transact.phpt @@ -0,0 +1,216 @@ +--TEST-- +Test connection resiliency with a prepared statement and transaction. +--DESCRIPTION-- +Prepare a statement, break the connection, and execute the statement. Then +test transactions by breaking the connection before beginning a transaction +and in the middle of the transaction. The latter case should fail. +--SKIPIF-- + +--FILE-- +setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); +} +catch( PDOException $e ) +{ + echo "Could not connect.\n"; + print_r( $e->getMessage() ); +} + +try +{ + $stmt1 = $conn->prepare( "SELECT * FROM $tableName1" ); + if ( $stmt1 ) echo "Statement 1 prepared.\n"; + else echo "Error preparing statement 1.\n"; +} +catch( PDOException $e ) +{ + echo "Exception preparing statement 1.\n"; + print_r( $e->getMessage() ); +} + +BreakConnection( $conn, $conn_break ); + +try +{ + if ( $stmt1->execute() ) echo "Statement 1 executed.\n"; + else echo "Statement 1 failed.\n"; +} +catch( PDOException $e ) +{ + echo "Exception executing statement 1.\n"; + print_r( $e->getMessage() ); +} + +$conn = null; + +/////////////////////////////////////////////////////////////////////////////// +// Part 2 +// Transaction should be committed because connection is broken before +// transaction begins +/////////////////////////////////////////////////////////////////////////////// + +try +{ + $conn = new PDO( "sqlsrv:server = $server ; Database = $dbName ; $connectionInfo", $uid, $pwd ); + $conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); +} +catch( PDOException $e ) +{ + echo "Could not connect.\n"; + print_r( $e->getMessage() ); +} + +BreakConnection( $conn, $conn_break ); + +try +{ + if ( $conn->beginTransaction() ) echo "Transaction begun.\n"; + else echo "Could not begin transaction.\n"; +} +catch( PDOException $e ) +{ + print_r( $e->getMessage() ); + echo "Exception: could not begin transaction.\n"; +} + +$tsql = "INSERT INTO $tableName1 VALUES ( 700, 'zyxwv' )"; + +try +{ + $stmt2 = $conn->query( $tsql ); + + if ( $stmt2 ) + { + if ( $conn->commit() ) + { + echo "Transaction was committed.\n"; + } + else + { + echo "Statement valid but commit failed.\n"; + print_r( sqlsrv_errors() ); + } + } + else + { + if ( $conn->rollBack() ) + { + echo "Transaction was rolled back.\n"; + } + else + { + echo "Statement not valid and rollback failed.\n"; + print_r( sqlsrv_errors() ); + } + } +} +catch ( PDOException $e ) +{ + print_r( $e->getMessage() ); +} + +$conn = null; + +/////////////////////////////////////////////////////////////////////////////// +// Part 3 +// Expected to trigger an error because connection is interrupted in the middle +// of a transaction +/////////////////////////////////////////////////////////////////////////////// + +try +{ + $conn = new PDO( "sqlsrv:server = $server ; Database = $dbName ; $connectionInfo", $uid, $pwd ); + $conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); +} +catch( PDOException $e ) +{ + echo "Could not connect.\n"; + print_r( $e->getMessage() ); +} + +try +{ + if ( $conn->beginTransaction() ) echo "Transaction begun.\n"; + else echo "Could not begin transaction.\n"; +} +catch( PDOException $e ) +{ + print_r( $e->getMessage() ); + echo "Exception: could not begin transaction.\n"; +} + +BreakConnection( $conn, $conn_break ); + +$tsql = "INSERT INTO $tableName1 VALUES ( 700, 'zyxwv' )"; + +try +{ + $stmt2 = $conn->query( $tsql ); + + if ( $stmt2 ) + { + if ( $conn->commit() ) + { + echo "Transaction was committed.\n"; + } + else + { + echo "Statement valid but commit failed.\n"; + print_r( sqlsrv_errors() ); + } + } + else + { + if ( $conn->rollBack() ) + { + echo "Transaction was rolled back.\n"; + } + else + { + echo "Statement not valid and rollback failed.\n"; + print_r( sqlsrv_errors() ); + } + } +} +catch ( PDOException $e ) +{ + print_r( $e->getMessage() ); +} + +// This try catch block prevents an Uncaught PDOException error that occurs +// when trying to free the connection. +try +{ + $conn = null; +} +catch ( PDOException $e ) +{ + print_r( $e->getMessage() ); +} + +$conn_break = null; + +?> +--EXPECTREGEX-- +Statement 1 prepared. +Statement 1 executed. +Transaction begun. +Transaction was committed. +Transaction begun. +SQLSTATE\[08S02\]: \[Microsoft\]\[ODBC Driver 1[1-9] for SQL Server\]TCP Provider: An existing connection was forcibly closed by the remote host. +SQLSTATE\[08S01\]: \[Microsoft\]\[ODBC Driver 1[1-9] for SQL Server\]Communication link failure diff --git a/test/functional/pdo_sqlsrv/pdo_connection_resiliency_timeouts.phpt b/test/functional/pdo_sqlsrv/pdo_connection_resiliency_timeouts.phpt new file mode 100644 index 00000000..31ee64c9 --- /dev/null +++ b/test/functional/pdo_sqlsrv/pdo_connection_resiliency_timeouts.phpt @@ -0,0 +1,87 @@ +--TEST-- +Test connection resiliency timeouts +--DESCRIPTION-- +1. Connect with ConnectRetryCount equal to 0. +2. Reconnect with the default value of ConnectRetryCount(1). +--SKIPIF-- + +--FILE-- +setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); +} +catch( PDOException $e ) +{ + echo "Could not connect.\n"; + print_r( $e->getMessage() ); +} + +BreakConnection( $conn, $conn_break ); + +try +{ + $stmt1 = $conn->query( "SELECT * FROM $tableName1" ); + if ( $stmt1 ) echo "Query successfully executed.\n"; +} +catch( PDOException $e ) +{ + echo "Error executing statement 1.\n"; + print_r( $e->getMessage() ); +} + +$conn = null; + +/////////////////////////////////////////////////////////////////////////////// +// Part 2 +// Expected to succeed with a single reconnection attempt +/////////////////////////////////////////////////////////////////////////////// + +$connectionInfo = "ConnectRetryInterval = 10;"; + +try +{ + $conn = new PDO( "sqlsrv:server = $server ; Database = $dbName ; $connectionInfo", $uid, $pwd ); + $conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); +} +catch( PDOException $e ) +{ + echo "Could not connect.\n"; + print_r( $e->getMessage() ); +} + +BreakConnection( $conn, $conn_break ); + +try +{ + $stmt2 = $conn->query( "SELECT * FROM $tableName1" ); + if ( $stmt2 ) echo "Query successfully executed.\n"; +} +catch( PDOException $e ) +{ + echo "Error executing statement 2.\n"; + print_r( $e->getMessage() ); +} + +$conn = null; +$conn_break = null; + +DropTables( $server, $uid, $pwd, $tableName1, $tableName2 ); + +?> +--EXPECTREGEX-- +Error executing statement 1. +SQLSTATE\[08S02\]: \[Microsoft\]\[ODBC Driver 1[1-9] for SQL Server\]TCP Provider: An existing connection was forcibly closed by the remote host. +Query successfully executed. diff --git a/test/pdo_sqlsrv/pdo_construct.phpt b/test/functional/pdo_sqlsrv/pdo_construct.phpt similarity index 100% rename from test/pdo_sqlsrv/pdo_construct.phpt rename to test/functional/pdo_sqlsrv/pdo_construct.phpt diff --git a/test/pdo_sqlsrv/pdo_construct_TransactionIsolation.phpt b/test/functional/pdo_sqlsrv/pdo_construct_TransactionIsolation.phpt similarity index 100% rename from test/pdo_sqlsrv/pdo_construct_TransactionIsolation.phpt rename to test/functional/pdo_sqlsrv/pdo_construct_TransactionIsolation.phpt diff --git a/test/pdo_sqlsrv/pdo_construct_attr.phpt b/test/functional/pdo_sqlsrv/pdo_construct_attr.phpt similarity index 100% rename from test/pdo_sqlsrv/pdo_construct_attr.phpt rename to test/functional/pdo_sqlsrv/pdo_construct_attr.phpt diff --git a/test/pdo_sqlsrv/pdo_construct_conn_options.phpt b/test/functional/pdo_sqlsrv/pdo_construct_conn_options.phpt similarity index 100% rename from test/pdo_sqlsrv/pdo_construct_conn_options.phpt rename to test/functional/pdo_sqlsrv/pdo_construct_conn_options.phpt diff --git a/test/pdo_sqlsrv/pdo_construct_dsn_error.phpt b/test/functional/pdo_sqlsrv/pdo_construct_dsn_error.phpt similarity index 100% rename from test/pdo_sqlsrv/pdo_construct_dsn_error.phpt rename to test/functional/pdo_sqlsrv/pdo_construct_dsn_error.phpt diff --git a/test/pdo_sqlsrv/pdo_error.phpt b/test/functional/pdo_sqlsrv/pdo_error.phpt similarity index 100% rename from test/pdo_sqlsrv/pdo_error.phpt rename to test/functional/pdo_sqlsrv/pdo_error.phpt diff --git a/test/pdo_sqlsrv/pdo_errorMode.phpt b/test/functional/pdo_sqlsrv/pdo_errorMode.phpt similarity index 100% rename from test/pdo_sqlsrv/pdo_errorMode.phpt rename to test/functional/pdo_sqlsrv/pdo_errorMode.phpt diff --git a/test/pdo_sqlsrv/pdo_errorinfo_emulateprepare.phpt b/test/functional/pdo_sqlsrv/pdo_errorinfo_emulateprepare.phpt similarity index 100% rename from test/pdo_sqlsrv/pdo_errorinfo_emulateprepare.phpt rename to test/functional/pdo_sqlsrv/pdo_errorinfo_emulateprepare.phpt diff --git a/test/pdo_sqlsrv/pdo_exec.phpt b/test/functional/pdo_sqlsrv/pdo_exec.phpt similarity index 100% rename from test/pdo_sqlsrv/pdo_exec.phpt rename to test/functional/pdo_sqlsrv/pdo_exec.phpt diff --git a/test/pdo_sqlsrv/pdo_exec_invalid_query.phpt b/test/functional/pdo_sqlsrv/pdo_exec_invalid_query.phpt similarity index 100% rename from test/pdo_sqlsrv/pdo_exec_invalid_query.phpt rename to test/functional/pdo_sqlsrv/pdo_exec_invalid_query.phpt diff --git a/test/pdo_sqlsrv/pdo_fetch_bindcolumn_fetchmode.phpt b/test/functional/pdo_sqlsrv/pdo_fetch_bindcolumn_fetchmode.phpt similarity index 100% rename from test/pdo_sqlsrv/pdo_fetch_bindcolumn_fetchmode.phpt rename to test/functional/pdo_sqlsrv/pdo_fetch_bindcolumn_fetchmode.phpt diff --git a/test/pdo_sqlsrv/pdo_fetch_columns_fetchmode.phpt b/test/functional/pdo_sqlsrv/pdo_fetch_columns_fetchmode.phpt similarity index 100% rename from test/pdo_sqlsrv/pdo_fetch_columns_fetchmode.phpt rename to test/functional/pdo_sqlsrv/pdo_fetch_columns_fetchmode.phpt diff --git a/test/pdo_sqlsrv/pdo_fetch_complex_transactions.phpt b/test/functional/pdo_sqlsrv/pdo_fetch_complex_transactions.phpt similarity index 100% rename from test/pdo_sqlsrv/pdo_fetch_complex_transactions.phpt rename to test/functional/pdo_sqlsrv/pdo_fetch_complex_transactions.phpt diff --git a/test/pdo_sqlsrv/pdo_fetch_cursorBuffered_binary.phpt b/test/functional/pdo_sqlsrv/pdo_fetch_cursorBuffered_binary.phpt similarity index 97% rename from test/pdo_sqlsrv/pdo_fetch_cursorBuffered_binary.phpt rename to test/functional/pdo_sqlsrv/pdo_fetch_cursorBuffered_binary.phpt index ed59de5b..a9c3e965 100644 --- a/test/pdo_sqlsrv/pdo_fetch_cursorBuffered_binary.phpt +++ b/test/functional/pdo_sqlsrv/pdo_fetch_cursorBuffered_binary.phpt @@ -1,105 +1,105 @@ ---TEST-- -prepare with cursor buffered and fetch a varbinary column ---SKIPIF-- - ---FILE-- -setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); -$sample = 'asdgasdgasdgsadg'; - -$query = 'CREATE TABLE #TESTTABLE (exist varbinary(max))'; -$stmt = $conn->exec($query); -$query = 'INSERT INTO #TESTTABLE VALUES(:p0)'; -$stmt = $conn->prepare($query); -$stmt->bindParam(':p0', $sample, PDO::PARAM_LOB, 0, PDO::SQLSRV_ENCODING_BINARY); -$stmt->execute(); - -$query = 'SELECT TOP 1 * FROM #TESTTABLE'; - -//prepare with no buffered cursor -print "no buffered cursor, stringify off, fetch_numeric off\n"; //stringify and fetch_numeric is off by default -$stmt = $conn->prepare($query); -$stmt->execute(); -$value = $stmt->fetchColumn(); -var_dump ($value); - -print "\nno buffered cursor, stringify off, fetch_numeric on\n"; -$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, true); -$stmt = $conn->prepare($query); -$stmt->execute(); -$value = $stmt->fetchColumn(); -var_dump ($value); - -print "\nno buffered cursor, stringify on, fetch_numeric on\n"; -$conn->setAttribute( PDO::ATTR_STRINGIFY_FETCHES, true); -$stmt = $conn->prepare($query); -$stmt->execute(); -$value = $stmt->fetchColumn(); -var_dump ($value); - -print "\nno buffered cursor, stringify on, fetch_numeric off\n"; -$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, false); -$stmt = $conn->prepare($query); -$stmt->execute(); -$value = $stmt->fetchColumn(); -var_dump ($value); - -//prepare with client buffered cursor -print "\nbuffered cursor, stringify off, fetch_numeric off\n"; -$conn->setAttribute( PDO::ATTR_STRINGIFY_FETCHES, false); -$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); -$stmt->execute(); -$value = $stmt->fetchColumn(); -var_dump ($value); - -print "\nbuffered cursor, stringify off, fetch_numeric on\n"; -$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, true); -$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); -$stmt->execute(); -$value = $stmt->fetchColumn(); -var_dump ($value); - -print "\nbuffered cursor, stringify on, fetch_numeric on\n"; -$conn->setAttribute( PDO::ATTR_STRINGIFY_FETCHES, true); -$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); -$stmt->execute(); -$value = $stmt->fetchColumn(); -var_dump ($value); - -print "\nbuffered cursor, stringify on, fetch_numeric off\n"; -$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, false); -$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); -$stmt->execute(); -$value = $stmt->fetchColumn(); -var_dump ($value); - -$stmt = null; -$conn = null; - -?> ---EXPECT-- -no buffered cursor, stringify off, fetch_numeric off -string(16) "asdgasdgasdgsadg" - -no buffered cursor, stringify off, fetch_numeric on -string(16) "asdgasdgasdgsadg" - -no buffered cursor, stringify on, fetch_numeric on -string(16) "asdgasdgasdgsadg" - -no buffered cursor, stringify on, fetch_numeric off -string(16) "asdgasdgasdgsadg" - -buffered cursor, stringify off, fetch_numeric off -string(16) "asdgasdgasdgsadg" - -buffered cursor, stringify off, fetch_numeric on -string(16) "asdgasdgasdgsadg" - -buffered cursor, stringify on, fetch_numeric on -string(16) "asdgasdgasdgsadg" - -buffered cursor, stringify on, fetch_numeric off -string(16) "asdgasdgasdgsadg" +--TEST-- +prepare with cursor buffered and fetch a varbinary column +--SKIPIF-- + +--FILE-- +setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); +$sample = 'asdgasdgasdgsadg'; + +$query = 'CREATE TABLE #TESTTABLE (exist varbinary(max))'; +$stmt = $conn->exec($query); +$query = 'INSERT INTO #TESTTABLE VALUES(:p0)'; +$stmt = $conn->prepare($query); +$stmt->bindParam(':p0', $sample, PDO::PARAM_LOB, 0, PDO::SQLSRV_ENCODING_BINARY); +$stmt->execute(); + +$query = 'SELECT TOP 1 * FROM #TESTTABLE'; + +//prepare with no buffered cursor +print "no buffered cursor, stringify off, fetch_numeric off\n"; //stringify and fetch_numeric is off by default +$stmt = $conn->prepare($query); +$stmt->execute(); +$value = $stmt->fetchColumn(); +var_dump ($value); + +print "\nno buffered cursor, stringify off, fetch_numeric on\n"; +$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, true); +$stmt = $conn->prepare($query); +$stmt->execute(); +$value = $stmt->fetchColumn(); +var_dump ($value); + +print "\nno buffered cursor, stringify on, fetch_numeric on\n"; +$conn->setAttribute( PDO::ATTR_STRINGIFY_FETCHES, true); +$stmt = $conn->prepare($query); +$stmt->execute(); +$value = $stmt->fetchColumn(); +var_dump ($value); + +print "\nno buffered cursor, stringify on, fetch_numeric off\n"; +$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, false); +$stmt = $conn->prepare($query); +$stmt->execute(); +$value = $stmt->fetchColumn(); +var_dump ($value); + +//prepare with client buffered cursor +print "\nbuffered cursor, stringify off, fetch_numeric off\n"; +$conn->setAttribute( PDO::ATTR_STRINGIFY_FETCHES, false); +$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); +$stmt->execute(); +$value = $stmt->fetchColumn(); +var_dump ($value); + +print "\nbuffered cursor, stringify off, fetch_numeric on\n"; +$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, true); +$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); +$stmt->execute(); +$value = $stmt->fetchColumn(); +var_dump ($value); + +print "\nbuffered cursor, stringify on, fetch_numeric on\n"; +$conn->setAttribute( PDO::ATTR_STRINGIFY_FETCHES, true); +$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); +$stmt->execute(); +$value = $stmt->fetchColumn(); +var_dump ($value); + +print "\nbuffered cursor, stringify on, fetch_numeric off\n"; +$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, false); +$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); +$stmt->execute(); +$value = $stmt->fetchColumn(); +var_dump ($value); + +$stmt = null; +$conn = null; + +?> +--EXPECT-- +no buffered cursor, stringify off, fetch_numeric off +string(16) "asdgasdgasdgsadg" + +no buffered cursor, stringify off, fetch_numeric on +string(16) "asdgasdgasdgsadg" + +no buffered cursor, stringify on, fetch_numeric on +string(16) "asdgasdgasdgsadg" + +no buffered cursor, stringify on, fetch_numeric off +string(16) "asdgasdgasdgsadg" + +buffered cursor, stringify off, fetch_numeric off +string(16) "asdgasdgasdgsadg" + +buffered cursor, stringify off, fetch_numeric on +string(16) "asdgasdgasdgsadg" + +buffered cursor, stringify on, fetch_numeric on +string(16) "asdgasdgasdgsadg" + +buffered cursor, stringify on, fetch_numeric off +string(16) "asdgasdgasdgsadg" diff --git a/test/pdo_sqlsrv/pdo_fetch_cursorBuffered_char.phpt b/test/functional/pdo_sqlsrv/pdo_fetch_cursorBuffered_char.phpt similarity index 97% rename from test/pdo_sqlsrv/pdo_fetch_cursorBuffered_char.phpt rename to test/functional/pdo_sqlsrv/pdo_fetch_cursorBuffered_char.phpt index 7c2c808d..5c501003 100644 --- a/test/pdo_sqlsrv/pdo_fetch_cursorBuffered_char.phpt +++ b/test/functional/pdo_sqlsrv/pdo_fetch_cursorBuffered_char.phpt @@ -1,105 +1,105 @@ ---TEST-- -prepare with cursor buffered and fetch a varchar column ---SKIPIF-- - ---FILE-- -setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); -$sample = "eight"; - -$query = 'CREATE TABLE #TESTTABLE (exist varchar(10))'; -$stmt = $conn->exec($query); -$query = 'INSERT INTO #TESTTABLE VALUES(:p0)'; -$stmt = $conn->prepare($query); -$stmt->bindValue(':p0', $sample, PDO::PARAM_STR); -$stmt->execute(); - -$query = 'SELECT TOP 1 * FROM #TESTTABLE'; - -//prepare with no buffered cursor -print "no buffered cursor, stringify off, fetch_numeric off\n"; //stringify and fetch_numeric is off by default -$stmt = $conn->prepare($query); -$stmt->execute(); -$value = $stmt->fetchColumn(); -var_dump ($value); - -print "\nno buffered cursor, stringify off, fetch_numeric on\n"; -$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, true); -$stmt = $conn->prepare($query); -$stmt->execute(); -$value = $stmt->fetchColumn(); -var_dump ($value); - -print "\nno buffered cursor, stringify on, fetch_numeric on\n"; -$conn->setAttribute( PDO::ATTR_STRINGIFY_FETCHES, true); -$stmt = $conn->prepare($query); -$stmt->execute(); -$value = $stmt->fetchColumn(); -var_dump ($value); - -print "\nno buffered cursor, stringify on, fetch_numeric off\n"; -$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, false); -$stmt = $conn->prepare($query); -$stmt->execute(); -$value = $stmt->fetchColumn(); -var_dump ($value); - -//prepare with client buffered cursor -print "\nbuffered cursor, stringify off, fetch_numeric off\n"; -$conn->setAttribute( PDO::ATTR_STRINGIFY_FETCHES, false); -$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); -$stmt->execute(); -$value = $stmt->fetchColumn(); -var_dump ($value); - -print "\nbuffered cursor, stringify off, fetch_numeric on\n"; -$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, true); -$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); -$stmt->execute(); -$value = $stmt->fetchColumn(); -var_dump ($value); - -print "\nbuffered cursor, stringify on, fetch_numeric on\n"; -$conn->setAttribute( PDO::ATTR_STRINGIFY_FETCHES, true); -$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); -$stmt->execute(); -$value = $stmt->fetchColumn(); -var_dump ($value); - -print "\nbuffered cursor, stringify on, fetch_numeric off\n"; -$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, false); -$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); -$stmt->execute(); -$value = $stmt->fetchColumn(); -var_dump ($value); - -$stmt = null; -$conn = null; - -?> ---EXPECT-- -no buffered cursor, stringify off, fetch_numeric off -string(5) "eight" - -no buffered cursor, stringify off, fetch_numeric on -string(5) "eight" - -no buffered cursor, stringify on, fetch_numeric on -string(5) "eight" - -no buffered cursor, stringify on, fetch_numeric off -string(5) "eight" - -buffered cursor, stringify off, fetch_numeric off -string(5) "eight" - -buffered cursor, stringify off, fetch_numeric on -string(5) "eight" - -buffered cursor, stringify on, fetch_numeric on -string(5) "eight" - -buffered cursor, stringify on, fetch_numeric off -string(5) "eight" +--TEST-- +prepare with cursor buffered and fetch a varchar column +--SKIPIF-- + +--FILE-- +setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); +$sample = "eight"; + +$query = 'CREATE TABLE #TESTTABLE (exist varchar(10))'; +$stmt = $conn->exec($query); +$query = 'INSERT INTO #TESTTABLE VALUES(:p0)'; +$stmt = $conn->prepare($query); +$stmt->bindValue(':p0', $sample, PDO::PARAM_STR); +$stmt->execute(); + +$query = 'SELECT TOP 1 * FROM #TESTTABLE'; + +//prepare with no buffered cursor +print "no buffered cursor, stringify off, fetch_numeric off\n"; //stringify and fetch_numeric is off by default +$stmt = $conn->prepare($query); +$stmt->execute(); +$value = $stmt->fetchColumn(); +var_dump ($value); + +print "\nno buffered cursor, stringify off, fetch_numeric on\n"; +$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, true); +$stmt = $conn->prepare($query); +$stmt->execute(); +$value = $stmt->fetchColumn(); +var_dump ($value); + +print "\nno buffered cursor, stringify on, fetch_numeric on\n"; +$conn->setAttribute( PDO::ATTR_STRINGIFY_FETCHES, true); +$stmt = $conn->prepare($query); +$stmt->execute(); +$value = $stmt->fetchColumn(); +var_dump ($value); + +print "\nno buffered cursor, stringify on, fetch_numeric off\n"; +$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, false); +$stmt = $conn->prepare($query); +$stmt->execute(); +$value = $stmt->fetchColumn(); +var_dump ($value); + +//prepare with client buffered cursor +print "\nbuffered cursor, stringify off, fetch_numeric off\n"; +$conn->setAttribute( PDO::ATTR_STRINGIFY_FETCHES, false); +$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); +$stmt->execute(); +$value = $stmt->fetchColumn(); +var_dump ($value); + +print "\nbuffered cursor, stringify off, fetch_numeric on\n"; +$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, true); +$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); +$stmt->execute(); +$value = $stmt->fetchColumn(); +var_dump ($value); + +print "\nbuffered cursor, stringify on, fetch_numeric on\n"; +$conn->setAttribute( PDO::ATTR_STRINGIFY_FETCHES, true); +$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); +$stmt->execute(); +$value = $stmt->fetchColumn(); +var_dump ($value); + +print "\nbuffered cursor, stringify on, fetch_numeric off\n"; +$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, false); +$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); +$stmt->execute(); +$value = $stmt->fetchColumn(); +var_dump ($value); + +$stmt = null; +$conn = null; + +?> +--EXPECT-- +no buffered cursor, stringify off, fetch_numeric off +string(5) "eight" + +no buffered cursor, stringify off, fetch_numeric on +string(5) "eight" + +no buffered cursor, stringify on, fetch_numeric on +string(5) "eight" + +no buffered cursor, stringify on, fetch_numeric off +string(5) "eight" + +buffered cursor, stringify off, fetch_numeric off +string(5) "eight" + +buffered cursor, stringify off, fetch_numeric on +string(5) "eight" + +buffered cursor, stringify on, fetch_numeric on +string(5) "eight" + +buffered cursor, stringify on, fetch_numeric off +string(5) "eight" diff --git a/test/pdo_sqlsrv/pdo_fetch_cursorBuffered_datetime.phpt b/test/functional/pdo_sqlsrv/pdo_fetch_cursorBuffered_datetime.phpt similarity index 97% rename from test/pdo_sqlsrv/pdo_fetch_cursorBuffered_datetime.phpt rename to test/functional/pdo_sqlsrv/pdo_fetch_cursorBuffered_datetime.phpt index 6fcfc6d0..c698f14b 100644 --- a/test/pdo_sqlsrv/pdo_fetch_cursorBuffered_datetime.phpt +++ b/test/functional/pdo_sqlsrv/pdo_fetch_cursorBuffered_datetime.phpt @@ -1,105 +1,105 @@ ---TEST-- -prepare with cursor buffered and fetch a datetime column ---SKIPIF-- - ---FILE-- -setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); -$sample = '2012-06-18 10:34:09'; - -$query = 'CREATE TABLE #TESTTABLE (exist datetime)'; -$stmt = $conn->exec($query); -$query = 'INSERT INTO #TESTTABLE VALUES(:p0)'; -$stmt = $conn->prepare($query); -$stmt->bindParam(':p0', $sample, PDO::PARAM_LOB); -$stmt->execute(); - -$query = 'SELECT TOP 1 * FROM #TESTTABLE'; - -//prepare with no buffered cursor -print "no buffered cursor, stringify off, fetch_numeric off\n"; //stringify and fetch_numeric is off by default -$stmt = $conn->prepare($query); -$stmt->execute(); -$value = $stmt->fetchColumn(); -var_dump ($value); - -print "\nno buffered cursor, stringify off, fetch_numeric on\n"; -$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, true); -$stmt = $conn->prepare($query); -$stmt->execute(); -$value = $stmt->fetchColumn(); -var_dump ($value); - -print "\nno buffered cursor, stringify on, fetch_numeric on\n"; -$conn->setAttribute( PDO::ATTR_STRINGIFY_FETCHES, true); -$stmt = $conn->prepare($query); -$stmt->execute(); -$value = $stmt->fetchColumn(); -var_dump ($value); - -print "\nno buffered cursor, stringify on, fetch_numeric off\n"; -$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, false); -$stmt = $conn->prepare($query); -$stmt->execute(); -$value = $stmt->fetchColumn(); -var_dump ($value); - -//prepare with client buffered cursor -print "\nbuffered cursor, stringify off, fetch_numeric off\n"; -$conn->setAttribute( PDO::ATTR_STRINGIFY_FETCHES, false); -$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); -$stmt->execute(); -$value = $stmt->fetchColumn(); -var_dump ($value); - -print "\nbuffered cursor, stringify off, fetch_numeric on\n"; -$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, true); -$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); -$stmt->execute(); -$value = $stmt->fetchColumn(); -var_dump ($value); - -print "\nbuffered cursor, stringify on, fetch_numeric on\n"; -$conn->setAttribute( PDO::ATTR_STRINGIFY_FETCHES, true); -$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); -$stmt->execute(); -$value = $stmt->fetchColumn(); -var_dump ($value); - -print "\nbuffered cursor, stringify on, fetch_numeric off\n"; -$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, false); -$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); -$stmt->execute(); -$value = $stmt->fetchColumn(); -var_dump ($value); - -$stmt = null; -$conn = null; - -?> ---EXPECT-- -no buffered cursor, stringify off, fetch_numeric off -string(23) "2012-06-18 10:34:09.000" - -no buffered cursor, stringify off, fetch_numeric on -string(23) "2012-06-18 10:34:09.000" - -no buffered cursor, stringify on, fetch_numeric on -string(23) "2012-06-18 10:34:09.000" - -no buffered cursor, stringify on, fetch_numeric off -string(23) "2012-06-18 10:34:09.000" - -buffered cursor, stringify off, fetch_numeric off -string(23) "2012-06-18 10:34:09.000" - -buffered cursor, stringify off, fetch_numeric on -string(23) "2012-06-18 10:34:09.000" - -buffered cursor, stringify on, fetch_numeric on -string(23) "2012-06-18 10:34:09.000" - -buffered cursor, stringify on, fetch_numeric off -string(23) "2012-06-18 10:34:09.000" +--TEST-- +prepare with cursor buffered and fetch a datetime column +--SKIPIF-- + +--FILE-- +setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); +$sample = '2012-06-18 10:34:09'; + +$query = 'CREATE TABLE #TESTTABLE (exist datetime)'; +$stmt = $conn->exec($query); +$query = 'INSERT INTO #TESTTABLE VALUES(:p0)'; +$stmt = $conn->prepare($query); +$stmt->bindParam(':p0', $sample, PDO::PARAM_LOB); +$stmt->execute(); + +$query = 'SELECT TOP 1 * FROM #TESTTABLE'; + +//prepare with no buffered cursor +print "no buffered cursor, stringify off, fetch_numeric off\n"; //stringify and fetch_numeric is off by default +$stmt = $conn->prepare($query); +$stmt->execute(); +$value = $stmt->fetchColumn(); +var_dump ($value); + +print "\nno buffered cursor, stringify off, fetch_numeric on\n"; +$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, true); +$stmt = $conn->prepare($query); +$stmt->execute(); +$value = $stmt->fetchColumn(); +var_dump ($value); + +print "\nno buffered cursor, stringify on, fetch_numeric on\n"; +$conn->setAttribute( PDO::ATTR_STRINGIFY_FETCHES, true); +$stmt = $conn->prepare($query); +$stmt->execute(); +$value = $stmt->fetchColumn(); +var_dump ($value); + +print "\nno buffered cursor, stringify on, fetch_numeric off\n"; +$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, false); +$stmt = $conn->prepare($query); +$stmt->execute(); +$value = $stmt->fetchColumn(); +var_dump ($value); + +//prepare with client buffered cursor +print "\nbuffered cursor, stringify off, fetch_numeric off\n"; +$conn->setAttribute( PDO::ATTR_STRINGIFY_FETCHES, false); +$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); +$stmt->execute(); +$value = $stmt->fetchColumn(); +var_dump ($value); + +print "\nbuffered cursor, stringify off, fetch_numeric on\n"; +$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, true); +$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); +$stmt->execute(); +$value = $stmt->fetchColumn(); +var_dump ($value); + +print "\nbuffered cursor, stringify on, fetch_numeric on\n"; +$conn->setAttribute( PDO::ATTR_STRINGIFY_FETCHES, true); +$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); +$stmt->execute(); +$value = $stmt->fetchColumn(); +var_dump ($value); + +print "\nbuffered cursor, stringify on, fetch_numeric off\n"; +$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, false); +$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); +$stmt->execute(); +$value = $stmt->fetchColumn(); +var_dump ($value); + +$stmt = null; +$conn = null; + +?> +--EXPECT-- +no buffered cursor, stringify off, fetch_numeric off +string(23) "2012-06-18 10:34:09.000" + +no buffered cursor, stringify off, fetch_numeric on +string(23) "2012-06-18 10:34:09.000" + +no buffered cursor, stringify on, fetch_numeric on +string(23) "2012-06-18 10:34:09.000" + +no buffered cursor, stringify on, fetch_numeric off +string(23) "2012-06-18 10:34:09.000" + +buffered cursor, stringify off, fetch_numeric off +string(23) "2012-06-18 10:34:09.000" + +buffered cursor, stringify off, fetch_numeric on +string(23) "2012-06-18 10:34:09.000" + +buffered cursor, stringify on, fetch_numeric on +string(23) "2012-06-18 10:34:09.000" + +buffered cursor, stringify on, fetch_numeric off +string(23) "2012-06-18 10:34:09.000" diff --git a/test/pdo_sqlsrv/pdo_fetch_cursorBuffered_decimal.phpt b/test/functional/pdo_sqlsrv/pdo_fetch_cursorBuffered_decimal.phpt similarity index 97% rename from test/pdo_sqlsrv/pdo_fetch_cursorBuffered_decimal.phpt rename to test/functional/pdo_sqlsrv/pdo_fetch_cursorBuffered_decimal.phpt index 975f53d7..173fd6d8 100644 --- a/test/pdo_sqlsrv/pdo_fetch_cursorBuffered_decimal.phpt +++ b/test/functional/pdo_sqlsrv/pdo_fetch_cursorBuffered_decimal.phpt @@ -1,105 +1,105 @@ ---TEST-- -prepare with cursor buffered and fetch a decimal column ---SKIPIF-- - ---FILE-- -setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); -$sample = 1234567890.1234; - -$query = 'CREATE TABLE #TESTTABLE (exist decimal(16, 6))'; -$stmt = $conn->exec($query); -$query = 'INSERT INTO #TESTTABLE VALUES(:p0)'; -$stmt = $conn->prepare($query); -$stmt->bindValue(':p0', $sample, PDO::PARAM_INT); -$stmt->execute(); - -$query = 'SELECT TOP 1 * FROM #TESTTABLE'; - -//prepare with no buffered cursor -print "no buffered cursor, stringify off, fetch_numeric off\n"; //stringify and fetch_numeric is off by default -$stmt = $conn->prepare($query); -$stmt->execute(); -$value = $stmt->fetchColumn(); -var_dump ($value); - -print "\nno buffered cursor, stringify off, fetch_numeric on\n"; -$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, true); -$stmt = $conn->prepare($query); -$stmt->execute(); -$value = $stmt->fetchColumn(); -var_dump ($value); - -print "\nno buffered cursor, stringify on, fetch_numeric on\n"; -$conn->setAttribute( PDO::ATTR_STRINGIFY_FETCHES, true); -$stmt = $conn->prepare($query); -$stmt->execute(); -$value = $stmt->fetchColumn(); -var_dump ($value); - -print "\nno buffered cursor, stringify on, fetch_numeric off\n"; -$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, false); -$stmt = $conn->prepare($query); -$stmt->execute(); -$value = $stmt->fetchColumn(); -var_dump ($value); - -//prepare with client buffered cursor -print "\nbuffered cursor, stringify off, fetch_numeric off\n"; -$conn->setAttribute( PDO::ATTR_STRINGIFY_FETCHES, false); -$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); -$stmt->execute(); -$value = $stmt->fetchColumn(); -var_dump ($value); - -print "\nbuffered cursor, stringify off, fetch_numeric on\n"; -$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, true); -$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); -$stmt->execute(); -$value = $stmt->fetchColumn(); -var_dump ($value); - -print "\nbuffered cursor, stringify on, fetch_numeric on\n"; -$conn->setAttribute( PDO::ATTR_STRINGIFY_FETCHES, true); -$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); -$stmt->execute(); -$value = $stmt->fetchColumn(); -var_dump ($value); - -print "\nbuffered cursor, stringify on, fetch_numeric off\n"; -$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, false); -$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); -$stmt->execute(); -$value = $stmt->fetchColumn(); -var_dump ($value); - -$stmt = null; -$conn = null; - -?> ---EXPECT-- -no buffered cursor, stringify off, fetch_numeric off -string(17) "1234567890.123400" - -no buffered cursor, stringify off, fetch_numeric on -string(17) "1234567890.123400" - -no buffered cursor, stringify on, fetch_numeric on -string(17) "1234567890.123400" - -no buffered cursor, stringify on, fetch_numeric off -string(17) "1234567890.123400" - -buffered cursor, stringify off, fetch_numeric off -string(17) "1234567890.123400" - -buffered cursor, stringify off, fetch_numeric on -string(17) "1234567890.123400" - -buffered cursor, stringify on, fetch_numeric on -string(17) "1234567890.123400" - -buffered cursor, stringify on, fetch_numeric off -string(17) "1234567890.123400" +--TEST-- +prepare with cursor buffered and fetch a decimal column +--SKIPIF-- + +--FILE-- +setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); +$sample = 1234567890.1234; + +$query = 'CREATE TABLE #TESTTABLE (exist decimal(16, 6))'; +$stmt = $conn->exec($query); +$query = 'INSERT INTO #TESTTABLE VALUES(:p0)'; +$stmt = $conn->prepare($query); +$stmt->bindValue(':p0', $sample, PDO::PARAM_INT); +$stmt->execute(); + +$query = 'SELECT TOP 1 * FROM #TESTTABLE'; + +//prepare with no buffered cursor +print "no buffered cursor, stringify off, fetch_numeric off\n"; //stringify and fetch_numeric is off by default +$stmt = $conn->prepare($query); +$stmt->execute(); +$value = $stmt->fetchColumn(); +var_dump ($value); + +print "\nno buffered cursor, stringify off, fetch_numeric on\n"; +$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, true); +$stmt = $conn->prepare($query); +$stmt->execute(); +$value = $stmt->fetchColumn(); +var_dump ($value); + +print "\nno buffered cursor, stringify on, fetch_numeric on\n"; +$conn->setAttribute( PDO::ATTR_STRINGIFY_FETCHES, true); +$stmt = $conn->prepare($query); +$stmt->execute(); +$value = $stmt->fetchColumn(); +var_dump ($value); + +print "\nno buffered cursor, stringify on, fetch_numeric off\n"; +$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, false); +$stmt = $conn->prepare($query); +$stmt->execute(); +$value = $stmt->fetchColumn(); +var_dump ($value); + +//prepare with client buffered cursor +print "\nbuffered cursor, stringify off, fetch_numeric off\n"; +$conn->setAttribute( PDO::ATTR_STRINGIFY_FETCHES, false); +$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); +$stmt->execute(); +$value = $stmt->fetchColumn(); +var_dump ($value); + +print "\nbuffered cursor, stringify off, fetch_numeric on\n"; +$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, true); +$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); +$stmt->execute(); +$value = $stmt->fetchColumn(); +var_dump ($value); + +print "\nbuffered cursor, stringify on, fetch_numeric on\n"; +$conn->setAttribute( PDO::ATTR_STRINGIFY_FETCHES, true); +$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); +$stmt->execute(); +$value = $stmt->fetchColumn(); +var_dump ($value); + +print "\nbuffered cursor, stringify on, fetch_numeric off\n"; +$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, false); +$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); +$stmt->execute(); +$value = $stmt->fetchColumn(); +var_dump ($value); + +$stmt = null; +$conn = null; + +?> +--EXPECT-- +no buffered cursor, stringify off, fetch_numeric off +string(17) "1234567890.123400" + +no buffered cursor, stringify off, fetch_numeric on +string(17) "1234567890.123400" + +no buffered cursor, stringify on, fetch_numeric on +string(17) "1234567890.123400" + +no buffered cursor, stringify on, fetch_numeric off +string(17) "1234567890.123400" + +buffered cursor, stringify off, fetch_numeric off +string(17) "1234567890.123400" + +buffered cursor, stringify off, fetch_numeric on +string(17) "1234567890.123400" + +buffered cursor, stringify on, fetch_numeric on +string(17) "1234567890.123400" + +buffered cursor, stringify on, fetch_numeric off +string(17) "1234567890.123400" diff --git a/test/pdo_sqlsrv/pdo_fetch_cursorBuffered_decimal_bindColumn_int.phpt b/test/functional/pdo_sqlsrv/pdo_fetch_cursorBuffered_decimal_bindColumn_int.phpt similarity index 97% rename from test/pdo_sqlsrv/pdo_fetch_cursorBuffered_decimal_bindColumn_int.phpt rename to test/functional/pdo_sqlsrv/pdo_fetch_cursorBuffered_decimal_bindColumn_int.phpt index e2ac5b4d..9a5d8c33 100644 --- a/test/pdo_sqlsrv/pdo_fetch_cursorBuffered_decimal_bindColumn_int.phpt +++ b/test/functional/pdo_sqlsrv/pdo_fetch_cursorBuffered_decimal_bindColumn_int.phpt @@ -1,113 +1,113 @@ ---TEST-- -prepare with cursor buffered and fetch a decimal column with the column bound and specified to pdo type int ---SKIPIF-- - ---FILE-- -setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); -$sample = 1234567890.1234; - -$query = 'CREATE TABLE #TESTTABLE (exist decimal(18, 8))'; -$stmt = $conn->exec($query); -$query = 'INSERT INTO #TESTTABLE VALUES(:p0)'; -$stmt = $conn->prepare($query); -$stmt->bindValue(':p0', $sample, PDO::PARAM_INT); -$stmt->execute(); - -$query = 'SELECT exist FROM #TESTTABLE'; - -//prepare with no buffered cursor -print "no buffered cursor, stringify off, fetch_numeric off\n"; //stringify and fetch_numeric is off by default -$stmt = $conn->prepare($query); -$stmt->execute(); -$stmt->bindColumn('exist', $decimal_col, PDO::PARAM_INT); -$value = $stmt->fetch( PDO::FETCH_BOUND ); -var_dump ($decimal_col); - -print "\nno buffered cursor, stringify off, fetch_numeric on\n"; -$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, true); -$stmt = $conn->prepare($query); -$stmt->execute(); -$stmt->bindColumn('exist', $decimal_col, PDO::PARAM_INT); -$value = $stmt->fetch(PDO::FETCH_BOUND); -var_dump ($decimal_col); - -print "\nno buffered cursor, stringify on, fetch_numeric on\n"; -$conn->setAttribute( PDO::ATTR_STRINGIFY_FETCHES, true); -$stmt = $conn->prepare($query); -$stmt->execute(); -$stmt->bindColumn('exist', $decimal_col, PDO::PARAM_INT); -$value = $stmt->fetch(PDO::FETCH_BOUND); -var_dump ($decimal_col); - -print "\nno buffered cursor, stringify on, fetch_numeric off\n"; -$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, false); -$stmt = $conn->prepare($query); -$stmt->execute(); -$stmt->bindColumn('exist', $decimal_col, PDO::PARAM_INT); -$value = $stmt->fetch(PDO::FETCH_BOUND); -var_dump ($decimal_col); - -//prepare with client buffered cursor -print "\nbuffered cursor, stringify off, fetch_numeric off\n"; -$conn->setAttribute( PDO::ATTR_STRINGIFY_FETCHES, false); -$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); -$stmt->execute(); -$stmt->bindColumn('exist', $decimal_col, PDO::PARAM_INT); -$value = $stmt->fetch(PDO::FETCH_BOUND); -var_dump ($decimal_col); - -print "\nbuffered cursor, stringify off, fetch_numeric on\n"; -$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, true); -$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); -$stmt->execute(); -$stmt->bindColumn('exist', $decimal_col, PDO::PARAM_INT); -$value = $stmt->fetch(PDO::FETCH_BOUND); -var_dump ($decimal_col); - -print "\nbuffered cursor, stringify on, fetch_numeric on\n"; -$conn->setAttribute( PDO::ATTR_STRINGIFY_FETCHES, true); -$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); -$stmt->execute(); -$stmt->bindColumn('exist', $decimal_col, PDO::PARAM_INT); -$value = $stmt->fetch(PDO::FETCH_BOUND); -var_dump ($decimal_col); - -print "\nbuffered cursor, stringify on, fetch_numeric off\n"; -$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, false); -$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); -$stmt->execute(); -$stmt->bindColumn('exist', $decimal_col, PDO::PARAM_INT); -$value = $stmt->fetch(PDO::FETCH_BOUND); -var_dump ($decimal_col); - -$stmt = null; -$conn = null; - -?> ---EXPECT-- -no buffered cursor, stringify off, fetch_numeric off -int(1234567890) - -no buffered cursor, stringify off, fetch_numeric on -int(1234567890) - -no buffered cursor, stringify on, fetch_numeric on -string(10) "1234567890" - -no buffered cursor, stringify on, fetch_numeric off -string(10) "1234567890" - -buffered cursor, stringify off, fetch_numeric off -int(1234567890) - -buffered cursor, stringify off, fetch_numeric on -int(1234567890) - -buffered cursor, stringify on, fetch_numeric on -string(10) "1234567890" - -buffered cursor, stringify on, fetch_numeric off -string(10) "1234567890" +--TEST-- +prepare with cursor buffered and fetch a decimal column with the column bound and specified to pdo type int +--SKIPIF-- + +--FILE-- +setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); +$sample = 1234567890.1234; + +$query = 'CREATE TABLE #TESTTABLE (exist decimal(18, 8))'; +$stmt = $conn->exec($query); +$query = 'INSERT INTO #TESTTABLE VALUES(:p0)'; +$stmt = $conn->prepare($query); +$stmt->bindValue(':p0', $sample, PDO::PARAM_INT); +$stmt->execute(); + +$query = 'SELECT exist FROM #TESTTABLE'; + +//prepare with no buffered cursor +print "no buffered cursor, stringify off, fetch_numeric off\n"; //stringify and fetch_numeric is off by default +$stmt = $conn->prepare($query); +$stmt->execute(); +$stmt->bindColumn('exist', $decimal_col, PDO::PARAM_INT); +$value = $stmt->fetch( PDO::FETCH_BOUND ); +var_dump ($decimal_col); + +print "\nno buffered cursor, stringify off, fetch_numeric on\n"; +$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, true); +$stmt = $conn->prepare($query); +$stmt->execute(); +$stmt->bindColumn('exist', $decimal_col, PDO::PARAM_INT); +$value = $stmt->fetch(PDO::FETCH_BOUND); +var_dump ($decimal_col); + +print "\nno buffered cursor, stringify on, fetch_numeric on\n"; +$conn->setAttribute( PDO::ATTR_STRINGIFY_FETCHES, true); +$stmt = $conn->prepare($query); +$stmt->execute(); +$stmt->bindColumn('exist', $decimal_col, PDO::PARAM_INT); +$value = $stmt->fetch(PDO::FETCH_BOUND); +var_dump ($decimal_col); + +print "\nno buffered cursor, stringify on, fetch_numeric off\n"; +$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, false); +$stmt = $conn->prepare($query); +$stmt->execute(); +$stmt->bindColumn('exist', $decimal_col, PDO::PARAM_INT); +$value = $stmt->fetch(PDO::FETCH_BOUND); +var_dump ($decimal_col); + +//prepare with client buffered cursor +print "\nbuffered cursor, stringify off, fetch_numeric off\n"; +$conn->setAttribute( PDO::ATTR_STRINGIFY_FETCHES, false); +$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); +$stmt->execute(); +$stmt->bindColumn('exist', $decimal_col, PDO::PARAM_INT); +$value = $stmt->fetch(PDO::FETCH_BOUND); +var_dump ($decimal_col); + +print "\nbuffered cursor, stringify off, fetch_numeric on\n"; +$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, true); +$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); +$stmt->execute(); +$stmt->bindColumn('exist', $decimal_col, PDO::PARAM_INT); +$value = $stmt->fetch(PDO::FETCH_BOUND); +var_dump ($decimal_col); + +print "\nbuffered cursor, stringify on, fetch_numeric on\n"; +$conn->setAttribute( PDO::ATTR_STRINGIFY_FETCHES, true); +$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); +$stmt->execute(); +$stmt->bindColumn('exist', $decimal_col, PDO::PARAM_INT); +$value = $stmt->fetch(PDO::FETCH_BOUND); +var_dump ($decimal_col); + +print "\nbuffered cursor, stringify on, fetch_numeric off\n"; +$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, false); +$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); +$stmt->execute(); +$stmt->bindColumn('exist', $decimal_col, PDO::PARAM_INT); +$value = $stmt->fetch(PDO::FETCH_BOUND); +var_dump ($decimal_col); + +$stmt = null; +$conn = null; + +?> +--EXPECT-- +no buffered cursor, stringify off, fetch_numeric off +int(1234567890) + +no buffered cursor, stringify off, fetch_numeric on +int(1234567890) + +no buffered cursor, stringify on, fetch_numeric on +string(10) "1234567890" + +no buffered cursor, stringify on, fetch_numeric off +string(10) "1234567890" + +buffered cursor, stringify off, fetch_numeric off +int(1234567890) + +buffered cursor, stringify off, fetch_numeric on +int(1234567890) + +buffered cursor, stringify on, fetch_numeric on +string(10) "1234567890" + +buffered cursor, stringify on, fetch_numeric off +string(10) "1234567890" diff --git a/test/pdo_sqlsrv/pdo_fetch_cursorBuffered_float.phpt b/test/functional/pdo_sqlsrv/pdo_fetch_cursorBuffered_float.phpt similarity index 97% rename from test/pdo_sqlsrv/pdo_fetch_cursorBuffered_float.phpt rename to test/functional/pdo_sqlsrv/pdo_fetch_cursorBuffered_float.phpt index 6a74d163..f8c9ba08 100644 --- a/test/pdo_sqlsrv/pdo_fetch_cursorBuffered_float.phpt +++ b/test/functional/pdo_sqlsrv/pdo_fetch_cursorBuffered_float.phpt @@ -1,141 +1,141 @@ ---TEST-- -prepare with cursor buffered and fetch a float column ---SKIPIF-- - ---FILE-- -setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); -$sample = 1234567890.1234; - -$query = 'CREATE TABLE #TESTTABLE (exist float(53))'; -$stmt = $conn->exec($query); -$query = 'INSERT INTO #TESTTABLE VALUES(:p0)'; -$stmt = $conn->prepare($query); -$stmt->bindValue(':p0', $sample, PDO::PARAM_INT); -$stmt->execute(); - -$query = 'SELECT TOP 1 * FROM #TESTTABLE'; - -//prepare with no buffered cursor -print "no buffered cursor, stringify off, fetch_numeric off\n"; //stringify and fetch_numeric is off by default -$stmt = $conn->prepare($query); -$stmt->execute(); -$value = $stmt->fetchColumn(); -var_dump ($value); -$ok = FlatsAreEqual($sample, $value) ? 'TRUE' : 'FALSE'; -print "\nFetched value = Input? $ok\n\n"; - -print "no buffered cursor, stringify off, fetch_numeric on\n"; -$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, true); -$stmt = $conn->prepare($query); -$stmt->execute(); -$value = $stmt->fetchColumn(); -var_dump ($value); -$ok = FlatsAreEqual($sample, $value) ? 'TRUE' : 'FALSE'; -print "\nFetched value = Input? $ok\n\n"; - -print "no buffered cursor, stringify on, fetch_numeric on\n"; -$conn->setAttribute( PDO::ATTR_STRINGIFY_FETCHES, true); -$stmt = $conn->prepare($query); -$stmt->execute(); -$value = $stmt->fetchColumn(); -var_dump ($value); -$ok = FlatsAreEqual($sample, $value) ? 'TRUE' : 'FALSE'; -print "\nFetched value = Input? $ok\n\n"; - -print "no buffered cursor, stringify on, fetch_numeric off\n"; -$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, false); -$stmt = $conn->prepare($query); -$stmt->execute(); -$value = $stmt->fetchColumn(); -var_dump ($value); -$ok = FlatsAreEqual($sample, $value) ? 'TRUE' : 'FALSE'; -print "\nFetched value = Input? $ok\n\n"; - -//prepare with client buffered cursor -print "buffered cursor, stringify off, fetch_numeric off\n"; -$conn->setAttribute( PDO::ATTR_STRINGIFY_FETCHES, false); -$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); -$stmt->execute(); -$value = $stmt->fetchColumn(); -var_dump ($value); -$ok = FlatsAreEqual($sample, $value) ? 'TRUE' : 'FALSE'; -print "\nFetched value = Input? $ok\n\n"; - -print "buffered cursor, stringify off, fetch_numeric on\n"; -$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, true); -$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); -$stmt->execute(); -$value = $stmt->fetchColumn(); -var_dump ($value); -$ok = FlatsAreEqual($sample, $value) ? 'TRUE' : 'FALSE'; -print "\nFetched value = Input? $ok\n\n"; - -print "buffered cursor, stringify on, fetch_numeric on\n"; -$conn->setAttribute( PDO::ATTR_STRINGIFY_FETCHES, true); -$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); -$stmt->execute(); -$value = $stmt->fetchColumn(); -var_dump ($value); -$ok = FlatsAreEqual($sample, $value) ? 'TRUE' : 'FALSE'; -print "\nFetched value = Input? $ok\n\n"; - -print "buffered cursor, stringify on, fetch_numeric off\n"; -$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, false); -$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); -$stmt->execute(); -$value = $stmt->fetchColumn(); -var_dump ($value); -$ok = FlatsAreEqual($sample, $value) ? 'TRUE' : 'FALSE'; -print "\nFetched value = Input? $ok\n\n"; - -$stmt = null; -$conn = null; - -?> ---EXPECT-- -no buffered cursor, stringify off, fetch_numeric off -string(15) "1234567890.1234" - -Fetched value = Input? TRUE - -no buffered cursor, stringify off, fetch_numeric on -float(1234567890.1234) - -Fetched value = Input? TRUE - -no buffered cursor, stringify on, fetch_numeric on -string(15) "1234567890.1234" - -Fetched value = Input? TRUE - -no buffered cursor, stringify on, fetch_numeric off -string(15) "1234567890.1234" - -Fetched value = Input? TRUE - -buffered cursor, stringify off, fetch_numeric off -string(15) "1234567890.1234" - -Fetched value = Input? TRUE - -buffered cursor, stringify off, fetch_numeric on -float(1234567890.1234) - -Fetched value = Input? TRUE - -buffered cursor, stringify on, fetch_numeric on -string(15) "1234567890.1234" - -Fetched value = Input? TRUE - -buffered cursor, stringify on, fetch_numeric off -string(15) "1234567890.1234" - -Fetched value = Input? TRUE +--TEST-- +prepare with cursor buffered and fetch a float column +--SKIPIF-- + +--FILE-- +setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); +$sample = 1234567890.1234; + +$query = 'CREATE TABLE #TESTTABLE (exist float(53))'; +$stmt = $conn->exec($query); +$query = 'INSERT INTO #TESTTABLE VALUES(:p0)'; +$stmt = $conn->prepare($query); +$stmt->bindValue(':p0', $sample, PDO::PARAM_INT); +$stmt->execute(); + +$query = 'SELECT TOP 1 * FROM #TESTTABLE'; + +//prepare with no buffered cursor +print "no buffered cursor, stringify off, fetch_numeric off\n"; //stringify and fetch_numeric is off by default +$stmt = $conn->prepare($query); +$stmt->execute(); +$value = $stmt->fetchColumn(); +var_dump ($value); +$ok = FlatsAreEqual($sample, $value) ? 'TRUE' : 'FALSE'; +print "\nFetched value = Input? $ok\n\n"; + +print "no buffered cursor, stringify off, fetch_numeric on\n"; +$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, true); +$stmt = $conn->prepare($query); +$stmt->execute(); +$value = $stmt->fetchColumn(); +var_dump ($value); +$ok = FlatsAreEqual($sample, $value) ? 'TRUE' : 'FALSE'; +print "\nFetched value = Input? $ok\n\n"; + +print "no buffered cursor, stringify on, fetch_numeric on\n"; +$conn->setAttribute( PDO::ATTR_STRINGIFY_FETCHES, true); +$stmt = $conn->prepare($query); +$stmt->execute(); +$value = $stmt->fetchColumn(); +var_dump ($value); +$ok = FlatsAreEqual($sample, $value) ? 'TRUE' : 'FALSE'; +print "\nFetched value = Input? $ok\n\n"; + +print "no buffered cursor, stringify on, fetch_numeric off\n"; +$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, false); +$stmt = $conn->prepare($query); +$stmt->execute(); +$value = $stmt->fetchColumn(); +var_dump ($value); +$ok = FlatsAreEqual($sample, $value) ? 'TRUE' : 'FALSE'; +print "\nFetched value = Input? $ok\n\n"; + +//prepare with client buffered cursor +print "buffered cursor, stringify off, fetch_numeric off\n"; +$conn->setAttribute( PDO::ATTR_STRINGIFY_FETCHES, false); +$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); +$stmt->execute(); +$value = $stmt->fetchColumn(); +var_dump ($value); +$ok = FlatsAreEqual($sample, $value) ? 'TRUE' : 'FALSE'; +print "\nFetched value = Input? $ok\n\n"; + +print "buffered cursor, stringify off, fetch_numeric on\n"; +$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, true); +$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); +$stmt->execute(); +$value = $stmt->fetchColumn(); +var_dump ($value); +$ok = FlatsAreEqual($sample, $value) ? 'TRUE' : 'FALSE'; +print "\nFetched value = Input? $ok\n\n"; + +print "buffered cursor, stringify on, fetch_numeric on\n"; +$conn->setAttribute( PDO::ATTR_STRINGIFY_FETCHES, true); +$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); +$stmt->execute(); +$value = $stmt->fetchColumn(); +var_dump ($value); +$ok = FlatsAreEqual($sample, $value) ? 'TRUE' : 'FALSE'; +print "\nFetched value = Input? $ok\n\n"; + +print "buffered cursor, stringify on, fetch_numeric off\n"; +$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, false); +$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); +$stmt->execute(); +$value = $stmt->fetchColumn(); +var_dump ($value); +$ok = FlatsAreEqual($sample, $value) ? 'TRUE' : 'FALSE'; +print "\nFetched value = Input? $ok\n\n"; + +$stmt = null; +$conn = null; + +?> +--EXPECT-- +no buffered cursor, stringify off, fetch_numeric off +string(15) "1234567890.1234" + +Fetched value = Input? TRUE + +no buffered cursor, stringify off, fetch_numeric on +float(1234567890.1234) + +Fetched value = Input? TRUE + +no buffered cursor, stringify on, fetch_numeric on +string(15) "1234567890.1234" + +Fetched value = Input? TRUE + +no buffered cursor, stringify on, fetch_numeric off +string(15) "1234567890.1234" + +Fetched value = Input? TRUE + +buffered cursor, stringify off, fetch_numeric off +string(15) "1234567890.1234" + +Fetched value = Input? TRUE + +buffered cursor, stringify off, fetch_numeric on +float(1234567890.1234) + +Fetched value = Input? TRUE + +buffered cursor, stringify on, fetch_numeric on +string(15) "1234567890.1234" + +Fetched value = Input? TRUE + +buffered cursor, stringify on, fetch_numeric off +string(15) "1234567890.1234" + +Fetched value = Input? TRUE diff --git a/test/pdo_sqlsrv/pdo_fetch_cursorBuffered_float_bindColumn_lob.phpt b/test/functional/pdo_sqlsrv/pdo_fetch_cursorBuffered_float_bindColumn_lob.phpt similarity index 97% rename from test/pdo_sqlsrv/pdo_fetch_cursorBuffered_float_bindColumn_lob.phpt rename to test/functional/pdo_sqlsrv/pdo_fetch_cursorBuffered_float_bindColumn_lob.phpt index 8f6ecc3e..3e387cc8 100644 --- a/test/pdo_sqlsrv/pdo_fetch_cursorBuffered_float_bindColumn_lob.phpt +++ b/test/functional/pdo_sqlsrv/pdo_fetch_cursorBuffered_float_bindColumn_lob.phpt @@ -1,117 +1,117 @@ ---TEST-- -prepare with cursor buffered and fetch a float column with the column bound and specified to type LOB ---SKIPIF-- - ---FILE-- -setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); -$sample = 1234567890.1234; - -$query = 'CREATE TABLE #TESTTABLE (exist float(53))'; -$stmt = $conn->exec($query); -$query = 'INSERT INTO #TESTTABLE VALUES(:p0)'; -$stmt = $conn->prepare($query); -$stmt->bindValue(':p0', $sample, PDO::PARAM_INT); -$stmt->execute(); - -$query = 'SELECT exist FROM #TESTTABLE'; - -//prepare with no buffered cursor -print "no buffered cursor, stringify off, fetch_numeric off\n"; //stringify and fetch_numeric is off by default -$stmt = $conn->prepare($query); -$stmt->execute(); -$stmt->bindColumn('exist', $float_col, PDO::PARAM_LOB); -$value = $stmt->fetch(); -var_dump ($float_col); - -print "\nno buffered cursor, stringify off, fetch_numeric on\n"; -$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, true); -$stmt = $conn->prepare($query); -$stmt->execute(); -$stmt->bindColumn('exist', $float_col, PDO::PARAM_LOB); -$value = $stmt->fetch(); -var_dump ($float_col); - -print "\nno buffered cursor, stringify on, fetch_numeric on\n"; -$conn->setAttribute( PDO::ATTR_STRINGIFY_FETCHES, true); -$stmt = $conn->prepare($query); -$stmt->execute(); -$stmt->bindColumn('exist', $float_col, PDO::PARAM_LOB); -$value = $stmt->fetch(); -var_dump ($float_col); - -print "\nno buffered cursor, stringify on, fetch_numeric off\n"; -$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, false); -$stmt = $conn->prepare($query); -$stmt->execute(); -$stmt->bindColumn('exist', $float_col, PDO::PARAM_LOB); -$value = $stmt->fetch(); -var_dump ($float_col); - -//prepare with client buffered cursor -print "\nbuffered cursor, stringify off, fetch_numeric off\n"; -$conn->setAttribute( PDO::ATTR_STRINGIFY_FETCHES, false); -$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); -$stmt->execute(); -$stmt->bindColumn('exist', $float_col, PDO::PARAM_LOB); -$value = $stmt->fetch(); -var_dump ($float_col); - -print "\nbuffered cursor, stringify off, fetch_numeric on\n"; -$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, true); -$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); -$stmt->execute(); -$stmt->bindColumn('exist', $float_col, PDO::PARAM_LOB); -$value = $stmt->fetch(); -var_dump ($float_col); - -print "\nbuffered cursor, stringify on, fetch_numeric on\n"; -$conn->setAttribute( PDO::ATTR_STRINGIFY_FETCHES, true); -$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); -$stmt->execute(); -$stmt->bindColumn('exist', $float_col, PDO::PARAM_LOB); -$value = $stmt->fetch(); -var_dump ($float_col); - -print "\nbuffered cursor, stringify on, fetch_numeric off\n"; -$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, false); -$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); -$stmt->execute(); -$stmt->bindColumn('exist', $float_col, PDO::PARAM_LOB); -$value = $stmt->fetch(); -var_dump ($float_col); - -$stmt = null; -$conn = null; - -?> ---EXPECT-- -no buffered cursor, stringify off, fetch_numeric off -string(15) "1234567890.1234" - -no buffered cursor, stringify off, fetch_numeric on -string(15) "1234567890.1234" - -no buffered cursor, stringify on, fetch_numeric on -string(15) "1234567890.1234" - -no buffered cursor, stringify on, fetch_numeric off -string(15) "1234567890.1234" - -buffered cursor, stringify off, fetch_numeric off -string(15) "1234567890.1234" - -buffered cursor, stringify off, fetch_numeric on -string(15) "1234567890.1234" - -buffered cursor, stringify on, fetch_numeric on -string(15) "1234567890.1234" - -buffered cursor, stringify on, fetch_numeric off -string(15) "1234567890.1234" +--TEST-- +prepare with cursor buffered and fetch a float column with the column bound and specified to type LOB +--SKIPIF-- + +--FILE-- +setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); +$sample = 1234567890.1234; + +$query = 'CREATE TABLE #TESTTABLE (exist float(53))'; +$stmt = $conn->exec($query); +$query = 'INSERT INTO #TESTTABLE VALUES(:p0)'; +$stmt = $conn->prepare($query); +$stmt->bindValue(':p0', $sample, PDO::PARAM_INT); +$stmt->execute(); + +$query = 'SELECT exist FROM #TESTTABLE'; + +//prepare with no buffered cursor +print "no buffered cursor, stringify off, fetch_numeric off\n"; //stringify and fetch_numeric is off by default +$stmt = $conn->prepare($query); +$stmt->execute(); +$stmt->bindColumn('exist', $float_col, PDO::PARAM_LOB); +$value = $stmt->fetch(); +var_dump ($float_col); + +print "\nno buffered cursor, stringify off, fetch_numeric on\n"; +$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, true); +$stmt = $conn->prepare($query); +$stmt->execute(); +$stmt->bindColumn('exist', $float_col, PDO::PARAM_LOB); +$value = $stmt->fetch(); +var_dump ($float_col); + +print "\nno buffered cursor, stringify on, fetch_numeric on\n"; +$conn->setAttribute( PDO::ATTR_STRINGIFY_FETCHES, true); +$stmt = $conn->prepare($query); +$stmt->execute(); +$stmt->bindColumn('exist', $float_col, PDO::PARAM_LOB); +$value = $stmt->fetch(); +var_dump ($float_col); + +print "\nno buffered cursor, stringify on, fetch_numeric off\n"; +$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, false); +$stmt = $conn->prepare($query); +$stmt->execute(); +$stmt->bindColumn('exist', $float_col, PDO::PARAM_LOB); +$value = $stmt->fetch(); +var_dump ($float_col); + +//prepare with client buffered cursor +print "\nbuffered cursor, stringify off, fetch_numeric off\n"; +$conn->setAttribute( PDO::ATTR_STRINGIFY_FETCHES, false); +$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); +$stmt->execute(); +$stmt->bindColumn('exist', $float_col, PDO::PARAM_LOB); +$value = $stmt->fetch(); +var_dump ($float_col); + +print "\nbuffered cursor, stringify off, fetch_numeric on\n"; +$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, true); +$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); +$stmt->execute(); +$stmt->bindColumn('exist', $float_col, PDO::PARAM_LOB); +$value = $stmt->fetch(); +var_dump ($float_col); + +print "\nbuffered cursor, stringify on, fetch_numeric on\n"; +$conn->setAttribute( PDO::ATTR_STRINGIFY_FETCHES, true); +$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); +$stmt->execute(); +$stmt->bindColumn('exist', $float_col, PDO::PARAM_LOB); +$value = $stmt->fetch(); +var_dump ($float_col); + +print "\nbuffered cursor, stringify on, fetch_numeric off\n"; +$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, false); +$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); +$stmt->execute(); +$stmt->bindColumn('exist', $float_col, PDO::PARAM_LOB); +$value = $stmt->fetch(); +var_dump ($float_col); + +$stmt = null; +$conn = null; + +?> +--EXPECT-- +no buffered cursor, stringify off, fetch_numeric off +string(15) "1234567890.1234" + +no buffered cursor, stringify off, fetch_numeric on +string(15) "1234567890.1234" + +no buffered cursor, stringify on, fetch_numeric on +string(15) "1234567890.1234" + +no buffered cursor, stringify on, fetch_numeric off +string(15) "1234567890.1234" + +buffered cursor, stringify off, fetch_numeric off +string(15) "1234567890.1234" + +buffered cursor, stringify off, fetch_numeric on +string(15) "1234567890.1234" + +buffered cursor, stringify on, fetch_numeric on +string(15) "1234567890.1234" + +buffered cursor, stringify on, fetch_numeric off +string(15) "1234567890.1234" diff --git a/test/pdo_sqlsrv/pdo_fetch_cursorBuffered_int.phpt b/test/functional/pdo_sqlsrv/pdo_fetch_cursorBuffered_int.phpt similarity index 97% rename from test/pdo_sqlsrv/pdo_fetch_cursorBuffered_int.phpt rename to test/functional/pdo_sqlsrv/pdo_fetch_cursorBuffered_int.phpt index 4d377301..b56b31d3 100644 --- a/test/pdo_sqlsrv/pdo_fetch_cursorBuffered_int.phpt +++ b/test/functional/pdo_sqlsrv/pdo_fetch_cursorBuffered_int.phpt @@ -1,105 +1,105 @@ ---TEST-- -prepare with cursor buffered and fetch a int column ---SKIPIF-- - ---FILE-- -setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); -$sample = 1234567890; - -$query = 'CREATE TABLE #TESTTABLE (exist int)'; -$stmt = $conn->exec($query); -$query = 'INSERT INTO #TESTTABLE VALUES(:p0)'; -$stmt = $conn->prepare($query); -$stmt->bindValue(':p0', $sample, PDO::PARAM_INT); -$stmt->execute(); - -$query = 'SELECT TOP 1 * FROM #TESTTABLE'; - -//prepare with no buffered cursor -print "no buffered cursor, stringify off, fetch_numeric off\n"; //stringify and fetch_numeric is off by default -$stmt = $conn->prepare($query); -$stmt->execute(); -$value = $stmt->fetchColumn(); -var_dump ($value); - -print "\nno buffered cursor, stringify off, fetch_numeric on\n"; -$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, true); -$stmt = $conn->prepare($query); -$stmt->execute(); -$value = $stmt->fetchColumn(); -var_dump ($value); - -print "\nno buffered cursor, stringify on, fetch_numeric on\n"; -$conn->setAttribute( PDO::ATTR_STRINGIFY_FETCHES, true); -$stmt = $conn->prepare($query); -$stmt->execute(); -$value = $stmt->fetchColumn(); -var_dump ($value); - -print "\nno buffered cursor, stringify on, fetch_numeric off\n"; -$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, false); -$stmt = $conn->prepare($query); -$stmt->execute(); -$value = $stmt->fetchColumn(); -var_dump ($value); - -//prepare with client buffered cursor -print "\nbuffered cursor, stringify off, fetch_numeric off\n"; -$conn->setAttribute( PDO::ATTR_STRINGIFY_FETCHES, false); -$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); -$stmt->execute(); -$value = $stmt->fetchColumn(); -var_dump ($value); - -print "\nbuffered cursor, stringify off, fetch_numeric on\n"; -$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, true); -$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); -$stmt->execute(); -$value = $stmt->fetchColumn(); -var_dump ($value); - -print "\nbuffered cursor, stringify on, fetch_numeric on\n"; -$conn->setAttribute( PDO::ATTR_STRINGIFY_FETCHES, true); -$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); -$stmt->execute(); -$value = $stmt->fetchColumn(); -var_dump ($value); - -print "\nbuffered cursor, stringify on, fetch_numeric off\n"; -$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, false); -$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); -$stmt->execute(); -$value = $stmt->fetchColumn(); -var_dump ($value); - -$stmt = null; -$conn = null; - -?> ---EXPECT-- -no buffered cursor, stringify off, fetch_numeric off -string(10) "1234567890" - -no buffered cursor, stringify off, fetch_numeric on -int(1234567890) - -no buffered cursor, stringify on, fetch_numeric on -string(10) "1234567890" - -no buffered cursor, stringify on, fetch_numeric off -string(10) "1234567890" - -buffered cursor, stringify off, fetch_numeric off -string(10) "1234567890" - -buffered cursor, stringify off, fetch_numeric on -int(1234567890) - -buffered cursor, stringify on, fetch_numeric on -string(10) "1234567890" - -buffered cursor, stringify on, fetch_numeric off -string(10) "1234567890" +--TEST-- +prepare with cursor buffered and fetch a int column +--SKIPIF-- + +--FILE-- +setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); +$sample = 1234567890; + +$query = 'CREATE TABLE #TESTTABLE (exist int)'; +$stmt = $conn->exec($query); +$query = 'INSERT INTO #TESTTABLE VALUES(:p0)'; +$stmt = $conn->prepare($query); +$stmt->bindValue(':p0', $sample, PDO::PARAM_INT); +$stmt->execute(); + +$query = 'SELECT TOP 1 * FROM #TESTTABLE'; + +//prepare with no buffered cursor +print "no buffered cursor, stringify off, fetch_numeric off\n"; //stringify and fetch_numeric is off by default +$stmt = $conn->prepare($query); +$stmt->execute(); +$value = $stmt->fetchColumn(); +var_dump ($value); + +print "\nno buffered cursor, stringify off, fetch_numeric on\n"; +$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, true); +$stmt = $conn->prepare($query); +$stmt->execute(); +$value = $stmt->fetchColumn(); +var_dump ($value); + +print "\nno buffered cursor, stringify on, fetch_numeric on\n"; +$conn->setAttribute( PDO::ATTR_STRINGIFY_FETCHES, true); +$stmt = $conn->prepare($query); +$stmt->execute(); +$value = $stmt->fetchColumn(); +var_dump ($value); + +print "\nno buffered cursor, stringify on, fetch_numeric off\n"; +$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, false); +$stmt = $conn->prepare($query); +$stmt->execute(); +$value = $stmt->fetchColumn(); +var_dump ($value); + +//prepare with client buffered cursor +print "\nbuffered cursor, stringify off, fetch_numeric off\n"; +$conn->setAttribute( PDO::ATTR_STRINGIFY_FETCHES, false); +$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); +$stmt->execute(); +$value = $stmt->fetchColumn(); +var_dump ($value); + +print "\nbuffered cursor, stringify off, fetch_numeric on\n"; +$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, true); +$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); +$stmt->execute(); +$value = $stmt->fetchColumn(); +var_dump ($value); + +print "\nbuffered cursor, stringify on, fetch_numeric on\n"; +$conn->setAttribute( PDO::ATTR_STRINGIFY_FETCHES, true); +$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); +$stmt->execute(); +$value = $stmt->fetchColumn(); +var_dump ($value); + +print "\nbuffered cursor, stringify on, fetch_numeric off\n"; +$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, false); +$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); +$stmt->execute(); +$value = $stmt->fetchColumn(); +var_dump ($value); + +$stmt = null; +$conn = null; + +?> +--EXPECT-- +no buffered cursor, stringify off, fetch_numeric off +string(10) "1234567890" + +no buffered cursor, stringify off, fetch_numeric on +int(1234567890) + +no buffered cursor, stringify on, fetch_numeric on +string(10) "1234567890" + +no buffered cursor, stringify on, fetch_numeric off +string(10) "1234567890" + +buffered cursor, stringify off, fetch_numeric off +string(10) "1234567890" + +buffered cursor, stringify off, fetch_numeric on +int(1234567890) + +buffered cursor, stringify on, fetch_numeric on +string(10) "1234567890" + +buffered cursor, stringify on, fetch_numeric off +string(10) "1234567890" diff --git a/test/pdo_sqlsrv/pdo_fetch_cursorBuffered_int_bindColumn_int.phpt b/test/functional/pdo_sqlsrv/pdo_fetch_cursorBuffered_int_bindColumn_int.phpt similarity index 97% rename from test/pdo_sqlsrv/pdo_fetch_cursorBuffered_int_bindColumn_int.phpt rename to test/functional/pdo_sqlsrv/pdo_fetch_cursorBuffered_int_bindColumn_int.phpt index 25ecc66b..be84ad13 100644 --- a/test/pdo_sqlsrv/pdo_fetch_cursorBuffered_int_bindColumn_int.phpt +++ b/test/functional/pdo_sqlsrv/pdo_fetch_cursorBuffered_int_bindColumn_int.phpt @@ -1,114 +1,114 @@ ---TEST-- -prepare with cursor buffered and fetch a int column with the column bound and specified as pdo type int ---SKIPIF-- - ---FILE-- -setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); - -$sample = 1234567890; - -$query = 'CREATE TABLE #TESTTABLE (exist int)'; -$stmt = $conn->exec($query); -$query = 'INSERT INTO #TESTTABLE VALUES(:p0)'; -$stmt = $conn->prepare($query); -$stmt->bindValue(':p0', $sample, PDO::PARAM_INT); -$stmt->execute(); - -$query = 'SELECT exist FROM #TESTTABLE'; - -//prepare with no buffered cursor -print "no buffered cursor, stringify off, fetch_numeric off\n"; //stringify and fetch_numeric is off by default -$stmt = $conn->prepare($query); -$stmt->execute(); -$stmt->bindColumn('exist', $int_col, PDO::PARAM_INT); -$value = $stmt->fetch( PDO::FETCH_BOUND ); -var_dump ($int_col); - -print "\nno buffered cursor, stringify off, fetch_numeric on\n"; -$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, true); -$stmt = $conn->prepare($query); -$stmt->execute(); -$stmt->bindColumn('exist', $int_col, PDO::PARAM_INT); -$value = $stmt->fetch( PDO::FETCH_BOUND ); -var_dump ($int_col); - -print "\nno buffered cursor, stringify on, fetch_numeric on\n"; -$conn->setAttribute( PDO::ATTR_STRINGIFY_FETCHES, true); -$stmt = $conn->prepare($query); -$stmt->execute(); -$stmt->bindColumn('exist', $int_col, PDO::PARAM_INT); -$value = $stmt->fetch( PDO::FETCH_BOUND ); -var_dump ($int_col); - -print "\nno buffered cursor, stringify on, fetch_numeric off\n"; -$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, false); -$stmt = $conn->prepare($query); -$stmt->execute(); -$stmt->bindColumn('exist', $int_col, PDO::PARAM_INT); -$value = $stmt->fetch( PDO::FETCH_BOUND ); -var_dump ($int_col); - -//prepare with client buffered cursor -print "\nbuffered cursor, stringify off, fetch_numeric off\n"; -$conn->setAttribute( PDO::ATTR_STRINGIFY_FETCHES, false); -$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); -$stmt->execute(); -$stmt->bindColumn('exist', $int_col, PDO::PARAM_INT); -$value = $stmt->fetch( PDO::FETCH_BOUND ); -var_dump ($int_col); - -print "\nbuffered cursor, stringify off, fetch_numeric on\n"; -$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, true); -$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); -$stmt->execute(); -$stmt->bindColumn('exist', $int_col, PDO::PARAM_INT); -$value = $stmt->fetch( PDO::FETCH_BOUND ); -var_dump ($int_col); - -print "\nbuffered cursor, stringify on, fetch_numeric on\n"; -$conn->setAttribute( PDO::ATTR_STRINGIFY_FETCHES, true); -$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); -$stmt->execute(); -$stmt->bindColumn('exist', $int_col, PDO::PARAM_INT); -$value = $stmt->fetch( PDO::FETCH_BOUND ); -var_dump ($int_col); - -print "\nbuffered cursor, stringify on, fetch_numeric off\n"; -$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, false); -$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); -$stmt->execute(); -$stmt->bindColumn('exist', $int_col, PDO::PARAM_INT); -$value = $stmt->fetch( PDO::FETCH_BOUND ); -var_dump ($int_col); - -$stmt = null; -$conn = null; - -?> ---EXPECT-- -no buffered cursor, stringify off, fetch_numeric off -int(1234567890) - -no buffered cursor, stringify off, fetch_numeric on -int(1234567890) - -no buffered cursor, stringify on, fetch_numeric on -string(10) "1234567890" - -no buffered cursor, stringify on, fetch_numeric off -string(10) "1234567890" - -buffered cursor, stringify off, fetch_numeric off -int(1234567890) - -buffered cursor, stringify off, fetch_numeric on -int(1234567890) - -buffered cursor, stringify on, fetch_numeric on -string(10) "1234567890" - -buffered cursor, stringify on, fetch_numeric off -string(10) "1234567890" +--TEST-- +prepare with cursor buffered and fetch a int column with the column bound and specified as pdo type int +--SKIPIF-- + +--FILE-- +setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); + +$sample = 1234567890; + +$query = 'CREATE TABLE #TESTTABLE (exist int)'; +$stmt = $conn->exec($query); +$query = 'INSERT INTO #TESTTABLE VALUES(:p0)'; +$stmt = $conn->prepare($query); +$stmt->bindValue(':p0', $sample, PDO::PARAM_INT); +$stmt->execute(); + +$query = 'SELECT exist FROM #TESTTABLE'; + +//prepare with no buffered cursor +print "no buffered cursor, stringify off, fetch_numeric off\n"; //stringify and fetch_numeric is off by default +$stmt = $conn->prepare($query); +$stmt->execute(); +$stmt->bindColumn('exist', $int_col, PDO::PARAM_INT); +$value = $stmt->fetch( PDO::FETCH_BOUND ); +var_dump ($int_col); + +print "\nno buffered cursor, stringify off, fetch_numeric on\n"; +$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, true); +$stmt = $conn->prepare($query); +$stmt->execute(); +$stmt->bindColumn('exist', $int_col, PDO::PARAM_INT); +$value = $stmt->fetch( PDO::FETCH_BOUND ); +var_dump ($int_col); + +print "\nno buffered cursor, stringify on, fetch_numeric on\n"; +$conn->setAttribute( PDO::ATTR_STRINGIFY_FETCHES, true); +$stmt = $conn->prepare($query); +$stmt->execute(); +$stmt->bindColumn('exist', $int_col, PDO::PARAM_INT); +$value = $stmt->fetch( PDO::FETCH_BOUND ); +var_dump ($int_col); + +print "\nno buffered cursor, stringify on, fetch_numeric off\n"; +$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, false); +$stmt = $conn->prepare($query); +$stmt->execute(); +$stmt->bindColumn('exist', $int_col, PDO::PARAM_INT); +$value = $stmt->fetch( PDO::FETCH_BOUND ); +var_dump ($int_col); + +//prepare with client buffered cursor +print "\nbuffered cursor, stringify off, fetch_numeric off\n"; +$conn->setAttribute( PDO::ATTR_STRINGIFY_FETCHES, false); +$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); +$stmt->execute(); +$stmt->bindColumn('exist', $int_col, PDO::PARAM_INT); +$value = $stmt->fetch( PDO::FETCH_BOUND ); +var_dump ($int_col); + +print "\nbuffered cursor, stringify off, fetch_numeric on\n"; +$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, true); +$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); +$stmt->execute(); +$stmt->bindColumn('exist', $int_col, PDO::PARAM_INT); +$value = $stmt->fetch( PDO::FETCH_BOUND ); +var_dump ($int_col); + +print "\nbuffered cursor, stringify on, fetch_numeric on\n"; +$conn->setAttribute( PDO::ATTR_STRINGIFY_FETCHES, true); +$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); +$stmt->execute(); +$stmt->bindColumn('exist', $int_col, PDO::PARAM_INT); +$value = $stmt->fetch( PDO::FETCH_BOUND ); +var_dump ($int_col); + +print "\nbuffered cursor, stringify on, fetch_numeric off\n"; +$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, false); +$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); +$stmt->execute(); +$stmt->bindColumn('exist', $int_col, PDO::PARAM_INT); +$value = $stmt->fetch( PDO::FETCH_BOUND ); +var_dump ($int_col); + +$stmt = null; +$conn = null; + +?> +--EXPECT-- +no buffered cursor, stringify off, fetch_numeric off +int(1234567890) + +no buffered cursor, stringify off, fetch_numeric on +int(1234567890) + +no buffered cursor, stringify on, fetch_numeric on +string(10) "1234567890" + +no buffered cursor, stringify on, fetch_numeric off +string(10) "1234567890" + +buffered cursor, stringify off, fetch_numeric off +int(1234567890) + +buffered cursor, stringify off, fetch_numeric on +int(1234567890) + +buffered cursor, stringify on, fetch_numeric on +string(10) "1234567890" + +buffered cursor, stringify on, fetch_numeric off +string(10) "1234567890" diff --git a/test/pdo_sqlsrv/pdo_fetch_cursorBuffered_money.phpt b/test/functional/pdo_sqlsrv/pdo_fetch_cursorBuffered_money.phpt similarity index 97% rename from test/pdo_sqlsrv/pdo_fetch_cursorBuffered_money.phpt rename to test/functional/pdo_sqlsrv/pdo_fetch_cursorBuffered_money.phpt index 930f0d89..6a0c2ba4 100644 --- a/test/pdo_sqlsrv/pdo_fetch_cursorBuffered_money.phpt +++ b/test/functional/pdo_sqlsrv/pdo_fetch_cursorBuffered_money.phpt @@ -1,105 +1,105 @@ ---TEST-- -prepare with cursor buffered and fetch a money column ---SKIPIF-- - ---FILE-- -setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); -$sample = 1234567890.1234; - -$query = 'CREATE TABLE #TESTTABLE (exist money)'; -$stmt = $conn->exec($query); -$query = 'INSERT INTO #TESTTABLE VALUES(:p0)'; -$stmt = $conn->prepare($query); -$stmt->bindValue(':p0', $sample, PDO::PARAM_INT); -$stmt->execute(); - -$query = 'SELECT TOP 1 * FROM #TESTTABLE'; - -//prepare with no buffered cursor -print "no buffered cursor, stringify off, fetch_numeric off\n"; //stringify and fetch_numeric is off by default -$stmt = $conn->prepare($query); -$stmt->execute(); -$value = $stmt->fetchColumn(); -var_dump ($value); - -print "\nno buffered cursor, stringify off, fetch_numeric on\n"; -$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, true); -$stmt = $conn->prepare($query); -$stmt->execute(); -$value = $stmt->fetchColumn(); -var_dump ($value); - -print "\nno buffered cursor, stringify on, fetch_numeric on\n"; -$conn->setAttribute( PDO::ATTR_STRINGIFY_FETCHES, true); -$stmt = $conn->prepare($query); -$stmt->execute(); -$value = $stmt->fetchColumn(); -var_dump ($value); - -print "\nno buffered cursor, stringify on, fetch_numeric off\n"; -$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, false); -$stmt = $conn->prepare($query); -$stmt->execute(); -$value = $stmt->fetchColumn(); -var_dump ($value); - -//prepare with client buffered cursor -print "\nbuffered cursor, stringify off, fetch_numeric off\n"; -$conn->setAttribute( PDO::ATTR_STRINGIFY_FETCHES, false); -$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); -$stmt->execute(); -$value = $stmt->fetchColumn(); -var_dump ($value); - -print "\nbuffered cursor, stringify off, fetch_numeric on\n"; -$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, true); -$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); -$stmt->execute(); -$value = $stmt->fetchColumn(); -var_dump ($value); - -print "\nbuffered cursor, stringify on, fetch_numeric on\n"; -$conn->setAttribute( PDO::ATTR_STRINGIFY_FETCHES, true); -$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); -$stmt->execute(); -$value = $stmt->fetchColumn(); -var_dump ($value); - -print "\nbuffered cursor, stringify on, fetch_numeric off\n"; -$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, false); -$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); -$stmt->execute(); -$value = $stmt->fetchColumn(); -var_dump ($value); - -$stmt = null; -$conn = null; - -?> ---EXPECT-- -no buffered cursor, stringify off, fetch_numeric off -string(15) "1234567890.1234" - -no buffered cursor, stringify off, fetch_numeric on -string(15) "1234567890.1234" - -no buffered cursor, stringify on, fetch_numeric on -string(15) "1234567890.1234" - -no buffered cursor, stringify on, fetch_numeric off -string(15) "1234567890.1234" - -buffered cursor, stringify off, fetch_numeric off -string(15) "1234567890.1234" - -buffered cursor, stringify off, fetch_numeric on -string(15) "1234567890.1234" - -buffered cursor, stringify on, fetch_numeric on -string(15) "1234567890.1234" - -buffered cursor, stringify on, fetch_numeric off -string(15) "1234567890.1234" +--TEST-- +prepare with cursor buffered and fetch a money column +--SKIPIF-- + +--FILE-- +setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); +$sample = 1234567890.1234; + +$query = 'CREATE TABLE #TESTTABLE (exist money)'; +$stmt = $conn->exec($query); +$query = 'INSERT INTO #TESTTABLE VALUES(:p0)'; +$stmt = $conn->prepare($query); +$stmt->bindValue(':p0', $sample, PDO::PARAM_INT); +$stmt->execute(); + +$query = 'SELECT TOP 1 * FROM #TESTTABLE'; + +//prepare with no buffered cursor +print "no buffered cursor, stringify off, fetch_numeric off\n"; //stringify and fetch_numeric is off by default +$stmt = $conn->prepare($query); +$stmt->execute(); +$value = $stmt->fetchColumn(); +var_dump ($value); + +print "\nno buffered cursor, stringify off, fetch_numeric on\n"; +$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, true); +$stmt = $conn->prepare($query); +$stmt->execute(); +$value = $stmt->fetchColumn(); +var_dump ($value); + +print "\nno buffered cursor, stringify on, fetch_numeric on\n"; +$conn->setAttribute( PDO::ATTR_STRINGIFY_FETCHES, true); +$stmt = $conn->prepare($query); +$stmt->execute(); +$value = $stmt->fetchColumn(); +var_dump ($value); + +print "\nno buffered cursor, stringify on, fetch_numeric off\n"; +$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, false); +$stmt = $conn->prepare($query); +$stmt->execute(); +$value = $stmt->fetchColumn(); +var_dump ($value); + +//prepare with client buffered cursor +print "\nbuffered cursor, stringify off, fetch_numeric off\n"; +$conn->setAttribute( PDO::ATTR_STRINGIFY_FETCHES, false); +$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); +$stmt->execute(); +$value = $stmt->fetchColumn(); +var_dump ($value); + +print "\nbuffered cursor, stringify off, fetch_numeric on\n"; +$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, true); +$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); +$stmt->execute(); +$value = $stmt->fetchColumn(); +var_dump ($value); + +print "\nbuffered cursor, stringify on, fetch_numeric on\n"; +$conn->setAttribute( PDO::ATTR_STRINGIFY_FETCHES, true); +$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); +$stmt->execute(); +$value = $stmt->fetchColumn(); +var_dump ($value); + +print "\nbuffered cursor, stringify on, fetch_numeric off\n"; +$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, false); +$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); +$stmt->execute(); +$value = $stmt->fetchColumn(); +var_dump ($value); + +$stmt = null; +$conn = null; + +?> +--EXPECT-- +no buffered cursor, stringify off, fetch_numeric off +string(15) "1234567890.1234" + +no buffered cursor, stringify off, fetch_numeric on +string(15) "1234567890.1234" + +no buffered cursor, stringify on, fetch_numeric on +string(15) "1234567890.1234" + +no buffered cursor, stringify on, fetch_numeric off +string(15) "1234567890.1234" + +buffered cursor, stringify off, fetch_numeric off +string(15) "1234567890.1234" + +buffered cursor, stringify off, fetch_numeric on +string(15) "1234567890.1234" + +buffered cursor, stringify on, fetch_numeric on +string(15) "1234567890.1234" + +buffered cursor, stringify on, fetch_numeric off +string(15) "1234567890.1234" diff --git a/test/pdo_sqlsrv/pdo_fetch_cursorBuffered_money_bindColumn_int.phpt b/test/functional/pdo_sqlsrv/pdo_fetch_cursorBuffered_money_bindColumn_int.phpt similarity index 97% rename from test/pdo_sqlsrv/pdo_fetch_cursorBuffered_money_bindColumn_int.phpt rename to test/functional/pdo_sqlsrv/pdo_fetch_cursorBuffered_money_bindColumn_int.phpt index f8d18868..09a6114b 100644 --- a/test/pdo_sqlsrv/pdo_fetch_cursorBuffered_money_bindColumn_int.phpt +++ b/test/functional/pdo_sqlsrv/pdo_fetch_cursorBuffered_money_bindColumn_int.phpt @@ -1,115 +1,115 @@ ---TEST-- -prepare with cursor buffered and fetch a money column with the column bound and specified as pdo type int ---SKIPIF-- - ---FILE-- -setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); - -$sample = 1234567890.1234; - -$query = 'CREATE TABLE #TESTTABLE (exist money)'; -$stmt = $conn->exec($query); -$query = 'INSERT INTO #TESTTABLE VALUES(:p0)'; -$stmt = $conn->prepare($query); -$stmt->bindValue(':p0', $sample, PDO::PARAM_INT); -$stmt->execute(); - -$query = 'SELECT exist FROM #TESTTABLE'; - -//prepare with no buffered cursor -print "no buffered cursor, stringify off, fetch_numeric off\n"; //stringify and fetch_numeric is off by default -$stmt = $conn->prepare($query); -$stmt->execute(); -$stmt->bindColumn('exist', $money_col, PDO::PARAM_INT); -$value = $stmt->fetch(PDO::FETCH_BOUND); -var_dump ($money_col); - -print "\nno buffered cursor, stringify off, fetch_numeric on\n"; -$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, true); -$stmt = $conn->prepare($query); -$stmt->execute(); -$stmt->bindColumn('exist', $money_col, PDO::PARAM_INT); -$value = $stmt->fetch(PDO::FETCH_BOUND); -var_dump ($money_col); - -print "\nno buffered cursor, stringify on, fetch_numeric on\n"; -$conn->setAttribute( PDO::ATTR_STRINGIFY_FETCHES, true); -$stmt = $conn->prepare($query); -$stmt->execute(); -$stmt->bindColumn('exist', $money_col, PDO::PARAM_INT); -$value = $stmt->fetch(PDO::FETCH_BOUND); -var_dump ($money_col); - -print "\nno buffered cursor, stringify on, fetch_numeric off\n"; -$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, false); -$stmt = $conn->prepare($query); -$stmt->execute(); -$stmt->bindColumn('exist', $money_col, PDO::PARAM_INT); -$value = $stmt->fetch(PDO::FETCH_BOUND); -var_dump ($money_col); - -//prepare with client buffered cursor -print "\nbuffered cursor, stringify off, fetch_numeric off\n"; -$conn->setAttribute( PDO::ATTR_STRINGIFY_FETCHES, false); -$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); -$stmt->execute(); -$stmt->bindColumn('exist', $money_col, PDO::PARAM_INT); -$value = $stmt->fetch(PDO::FETCH_BOUND); -var_dump ($money_col); - -print "\nbuffered cursor, stringify off, fetch_numeric on\n"; -$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, true); -$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); -$stmt->execute(); -$stmt->bindColumn('exist', $money_col, PDO::PARAM_INT); -$value = $stmt->fetch(PDO::FETCH_BOUND); -var_dump ($money_col); - -print "\nbuffered cursor, stringify on, fetch_numeric on\n"; -$conn->setAttribute( PDO::ATTR_STRINGIFY_FETCHES, true); -$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); -$stmt->execute(); -$stmt->bindColumn('exist', $money_col, PDO::PARAM_INT); -$value = $stmt->fetch(PDO::FETCH_BOUND); -var_dump ($money_col); - -print "\nbuffered cursor, stringify on, fetch_numeric off\n"; -$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, false); -$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); -$stmt->execute(); -$stmt->bindColumn('exist', $money_col, PDO::PARAM_INT); -$value = $stmt->fetch(PDO::FETCH_BOUND); -var_dump ($money_col); - - -$stmt = null; -$conn = null; - -?> ---EXPECT-- -no buffered cursor, stringify off, fetch_numeric off -int(1234567890) - -no buffered cursor, stringify off, fetch_numeric on -int(1234567890) - -no buffered cursor, stringify on, fetch_numeric on -string(10) "1234567890" - -no buffered cursor, stringify on, fetch_numeric off -string(10) "1234567890" - -buffered cursor, stringify off, fetch_numeric off -int(1234567890) - -buffered cursor, stringify off, fetch_numeric on -int(1234567890) - -buffered cursor, stringify on, fetch_numeric on -string(10) "1234567890" - -buffered cursor, stringify on, fetch_numeric off -string(10) "1234567890" +--TEST-- +prepare with cursor buffered and fetch a money column with the column bound and specified as pdo type int +--SKIPIF-- + +--FILE-- +setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); + +$sample = 1234567890.1234; + +$query = 'CREATE TABLE #TESTTABLE (exist money)'; +$stmt = $conn->exec($query); +$query = 'INSERT INTO #TESTTABLE VALUES(:p0)'; +$stmt = $conn->prepare($query); +$stmt->bindValue(':p0', $sample, PDO::PARAM_INT); +$stmt->execute(); + +$query = 'SELECT exist FROM #TESTTABLE'; + +//prepare with no buffered cursor +print "no buffered cursor, stringify off, fetch_numeric off\n"; //stringify and fetch_numeric is off by default +$stmt = $conn->prepare($query); +$stmt->execute(); +$stmt->bindColumn('exist', $money_col, PDO::PARAM_INT); +$value = $stmt->fetch(PDO::FETCH_BOUND); +var_dump ($money_col); + +print "\nno buffered cursor, stringify off, fetch_numeric on\n"; +$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, true); +$stmt = $conn->prepare($query); +$stmt->execute(); +$stmt->bindColumn('exist', $money_col, PDO::PARAM_INT); +$value = $stmt->fetch(PDO::FETCH_BOUND); +var_dump ($money_col); + +print "\nno buffered cursor, stringify on, fetch_numeric on\n"; +$conn->setAttribute( PDO::ATTR_STRINGIFY_FETCHES, true); +$stmt = $conn->prepare($query); +$stmt->execute(); +$stmt->bindColumn('exist', $money_col, PDO::PARAM_INT); +$value = $stmt->fetch(PDO::FETCH_BOUND); +var_dump ($money_col); + +print "\nno buffered cursor, stringify on, fetch_numeric off\n"; +$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, false); +$stmt = $conn->prepare($query); +$stmt->execute(); +$stmt->bindColumn('exist', $money_col, PDO::PARAM_INT); +$value = $stmt->fetch(PDO::FETCH_BOUND); +var_dump ($money_col); + +//prepare with client buffered cursor +print "\nbuffered cursor, stringify off, fetch_numeric off\n"; +$conn->setAttribute( PDO::ATTR_STRINGIFY_FETCHES, false); +$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); +$stmt->execute(); +$stmt->bindColumn('exist', $money_col, PDO::PARAM_INT); +$value = $stmt->fetch(PDO::FETCH_BOUND); +var_dump ($money_col); + +print "\nbuffered cursor, stringify off, fetch_numeric on\n"; +$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, true); +$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); +$stmt->execute(); +$stmt->bindColumn('exist', $money_col, PDO::PARAM_INT); +$value = $stmt->fetch(PDO::FETCH_BOUND); +var_dump ($money_col); + +print "\nbuffered cursor, stringify on, fetch_numeric on\n"; +$conn->setAttribute( PDO::ATTR_STRINGIFY_FETCHES, true); +$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); +$stmt->execute(); +$stmt->bindColumn('exist', $money_col, PDO::PARAM_INT); +$value = $stmt->fetch(PDO::FETCH_BOUND); +var_dump ($money_col); + +print "\nbuffered cursor, stringify on, fetch_numeric off\n"; +$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, false); +$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); +$stmt->execute(); +$stmt->bindColumn('exist', $money_col, PDO::PARAM_INT); +$value = $stmt->fetch(PDO::FETCH_BOUND); +var_dump ($money_col); + + +$stmt = null; +$conn = null; + +?> +--EXPECT-- +no buffered cursor, stringify off, fetch_numeric off +int(1234567890) + +no buffered cursor, stringify off, fetch_numeric on +int(1234567890) + +no buffered cursor, stringify on, fetch_numeric on +string(10) "1234567890" + +no buffered cursor, stringify on, fetch_numeric off +string(10) "1234567890" + +buffered cursor, stringify off, fetch_numeric off +int(1234567890) + +buffered cursor, stringify off, fetch_numeric on +int(1234567890) + +buffered cursor, stringify on, fetch_numeric on +string(10) "1234567890" + +buffered cursor, stringify on, fetch_numeric off +string(10) "1234567890" diff --git a/test/pdo_sqlsrv/pdo_fetch_cursorBuffered_multicolumns.phpt b/test/functional/pdo_sqlsrv/pdo_fetch_cursorBuffered_multicolumns.phpt similarity index 95% rename from test/pdo_sqlsrv/pdo_fetch_cursorBuffered_multicolumns.phpt rename to test/functional/pdo_sqlsrv/pdo_fetch_cursorBuffered_multicolumns.phpt index 9a56f36d..3028c37a 100644 --- a/test/pdo_sqlsrv/pdo_fetch_cursorBuffered_multicolumns.phpt +++ b/test/functional/pdo_sqlsrv/pdo_fetch_cursorBuffered_multicolumns.phpt @@ -1,271 +1,271 @@ ---TEST-- -prepare with cursor buffered and fetch from numeric columns. ---DESCRIPTION-- -Uses buffered cursor to fetch from float, int, and decimal columns that have positive, negative and zero value. ---SKIPIF-- - ---FILE-- -setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); -$sample = 1234567890.1234; -$sample1 = -1234567890.1234; -$sample2 = 1; -$sample3 = -1; -$sample4 = 0.5; -$sample5 = -0.55; - -$query = 'CREATE TABLE #TESTTABLE (a float(53), neg_a float(53), b int, neg_b int, c decimal(16, 6), neg_c decimal(16, 6), zero int, zerof float(53), zerod decimal(16,6))'; -$stmt = $conn->exec($query); -$query = 'INSERT INTO #TESTTABLE VALUES(:p0, :p1, :p2, :p3, :p4, :p5, 0, 0, 0)'; -$stmt = $conn->prepare($query); -$stmt->bindValue(':p0', $sample, PDO::PARAM_INT); -$stmt->bindValue(':p1', $sample1, PDO::PARAM_INT); -$stmt->bindValue(':p2', $sample2, PDO::PARAM_INT); -$stmt->bindValue(':p3', $sample3, PDO::PARAM_INT); -$stmt->bindValue(':p4', $sample4, PDO::PARAM_INT); -$stmt->bindValue(':p5', $sample5, PDO::PARAM_INT); -$stmt->execute(); - -$query = 'SELECT TOP 1 * FROM #TESTTABLE'; - -//prepare with no buffered cursor -print "\nno buffered cursor, stringify off, fetch_numeric off\n"; //stringify and fetch_numeric is off by default -$stmt = $conn->prepare($query); -$stmt->execute(); -$value = $stmt->fetch(PDO::FETCH_NUM); -var_dump ($value); - -print "\nno buffered cursor, stringify off, fetch_numeric on\n"; -$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, true); -$stmt = $conn->prepare($query); -$stmt->execute(); -$value = $stmt->fetch(PDO::FETCH_NUM); -var_dump ($value); - -print "\nno buffered cursor, stringify on, fetch_numeric on\n"; -$conn->setAttribute( PDO::ATTR_STRINGIFY_FETCHES, true); -$stmt = $conn->prepare($query); -$stmt->execute(); -$value = $stmt->fetch(PDO::FETCH_NUM); -var_dump ($value); - -print "\nno buffered cursor, stringify on, fetch_numeric off\n"; -$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, false); -$stmt = $conn->prepare($query); -$stmt->execute(); -$value = $stmt->fetch(PDO::FETCH_NUM); -var_dump ($value); - -//prepare with client buffered cursor -print "\nbuffered cursor, stringify off, fetch_numeric off\n"; -$conn->setAttribute( PDO::ATTR_STRINGIFY_FETCHES, false); -$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); -$stmt->execute(); -$value = $stmt->fetch(PDO::FETCH_NUM); -var_dump ($value); - -print "\nbuffered cursor, stringify off, fetch_numeric on\n"; -$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, true); -$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); -$stmt->execute(); -$value = $stmt->fetch(PDO::FETCH_NUM); -var_dump ($value); - -print "\nbuffered cursor, stringify on, fetch_numeric on\n"; -$conn->setAttribute( PDO::ATTR_STRINGIFY_FETCHES, true); -$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); -$stmt->execute(); -$value = $stmt->fetch(PDO::FETCH_NUM); -var_dump ($value); - -print "\nbuffered cursor, stringify on, fetch_numeric off\n"; -$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, false); -$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); -$stmt->execute(); -$value = $stmt->fetch(PDO::FETCH_NUM); -var_dump ($value); - -$stmt = null; -$conn = null; - -?> ---EXPECT-- -no buffered cursor, stringify off, fetch_numeric off -array(9) { - [0]=> - string(15) "1234567890.1234" - [1]=> - string(16) "-1234567890.1234" - [2]=> - string(1) "1" - [3]=> - string(2) "-1" - [4]=> - string(7) ".500000" - [5]=> - string(8) "-.550000" - [6]=> - string(1) "0" - [7]=> - string(3) "0.0" - [8]=> - string(7) ".000000" -} - -no buffered cursor, stringify off, fetch_numeric on -array(9) { - [0]=> - float(1234567890.1234) - [1]=> - float(-1234567890.1234) - [2]=> - int(1) - [3]=> - int(-1) - [4]=> - string(7) ".500000" - [5]=> - string(8) "-.550000" - [6]=> - int(0) - [7]=> - float(0) - [8]=> - string(7) ".000000" -} - -no buffered cursor, stringify on, fetch_numeric on -array(9) { - [0]=> - string(15) "1234567890.1234" - [1]=> - string(16) "-1234567890.1234" - [2]=> - string(1) "1" - [3]=> - string(2) "-1" - [4]=> - string(7) ".500000" - [5]=> - string(8) "-.550000" - [6]=> - string(1) "0" - [7]=> - string(1) "0" - [8]=> - string(7) ".000000" -} - -no buffered cursor, stringify on, fetch_numeric off -array(9) { - [0]=> - string(15) "1234567890.1234" - [1]=> - string(16) "-1234567890.1234" - [2]=> - string(1) "1" - [3]=> - string(2) "-1" - [4]=> - string(7) ".500000" - [5]=> - string(8) "-.550000" - [6]=> - string(1) "0" - [7]=> - string(3) "0.0" - [8]=> - string(7) ".000000" -} - -buffered cursor, stringify off, fetch_numeric off -array(9) { - [0]=> - string(15) "1234567890.1234" - [1]=> - string(16) "-1234567890.1234" - [2]=> - string(1) "1" - [3]=> - string(2) "-1" - [4]=> - string(7) ".500000" - [5]=> - string(8) "-.550000" - [6]=> - string(1) "0" - [7]=> - string(1) "0" - [8]=> - string(7) ".000000" -} - -buffered cursor, stringify off, fetch_numeric on -array(9) { - [0]=> - float(1234567890.1234) - [1]=> - float(-1234567890.1234) - [2]=> - int(1) - [3]=> - int(-1) - [4]=> - string(7) ".500000" - [5]=> - string(8) "-.550000" - [6]=> - int(0) - [7]=> - float(0) - [8]=> - string(7) ".000000" -} - -buffered cursor, stringify on, fetch_numeric on -array(9) { - [0]=> - string(15) "1234567890.1234" - [1]=> - string(16) "-1234567890.1234" - [2]=> - string(1) "1" - [3]=> - string(2) "-1" - [4]=> - string(7) ".500000" - [5]=> - string(8) "-.550000" - [6]=> - string(1) "0" - [7]=> - string(1) "0" - [8]=> - string(7) ".000000" -} - -buffered cursor, stringify on, fetch_numeric off -array(9) { - [0]=> - string(15) "1234567890.1234" - [1]=> - string(16) "-1234567890.1234" - [2]=> - string(1) "1" - [3]=> - string(2) "-1" - [4]=> - string(7) ".500000" - [5]=> - string(8) "-.550000" - [6]=> - string(1) "0" - [7]=> - string(1) "0" - [8]=> - string(7) ".000000" -} - +--TEST-- +prepare with cursor buffered and fetch from numeric columns. +--DESCRIPTION-- +Uses buffered cursor to fetch from float, int, and decimal columns that have positive, negative and zero value. +--SKIPIF-- + +--FILE-- +setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); +$sample = 1234567890.1234; +$sample1 = -1234567890.1234; +$sample2 = 1; +$sample3 = -1; +$sample4 = 0.5; +$sample5 = -0.55; + +$query = 'CREATE TABLE #TESTTABLE (a float(53), neg_a float(53), b int, neg_b int, c decimal(16, 6), neg_c decimal(16, 6), zero int, zerof float(53), zerod decimal(16,6))'; +$stmt = $conn->exec($query); +$query = 'INSERT INTO #TESTTABLE VALUES(:p0, :p1, :p2, :p3, :p4, :p5, 0, 0, 0)'; +$stmt = $conn->prepare($query); +$stmt->bindValue(':p0', $sample, PDO::PARAM_INT); +$stmt->bindValue(':p1', $sample1, PDO::PARAM_INT); +$stmt->bindValue(':p2', $sample2, PDO::PARAM_INT); +$stmt->bindValue(':p3', $sample3, PDO::PARAM_INT); +$stmt->bindValue(':p4', $sample4, PDO::PARAM_INT); +$stmt->bindValue(':p5', $sample5, PDO::PARAM_INT); +$stmt->execute(); + +$query = 'SELECT TOP 1 * FROM #TESTTABLE'; + +//prepare with no buffered cursor +print "\nno buffered cursor, stringify off, fetch_numeric off\n"; //stringify and fetch_numeric is off by default +$stmt = $conn->prepare($query); +$stmt->execute(); +$value = $stmt->fetch(PDO::FETCH_NUM); +var_dump ($value); + +print "\nno buffered cursor, stringify off, fetch_numeric on\n"; +$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, true); +$stmt = $conn->prepare($query); +$stmt->execute(); +$value = $stmt->fetch(PDO::FETCH_NUM); +var_dump ($value); + +print "\nno buffered cursor, stringify on, fetch_numeric on\n"; +$conn->setAttribute( PDO::ATTR_STRINGIFY_FETCHES, true); +$stmt = $conn->prepare($query); +$stmt->execute(); +$value = $stmt->fetch(PDO::FETCH_NUM); +var_dump ($value); + +print "\nno buffered cursor, stringify on, fetch_numeric off\n"; +$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, false); +$stmt = $conn->prepare($query); +$stmt->execute(); +$value = $stmt->fetch(PDO::FETCH_NUM); +var_dump ($value); + +//prepare with client buffered cursor +print "\nbuffered cursor, stringify off, fetch_numeric off\n"; +$conn->setAttribute( PDO::ATTR_STRINGIFY_FETCHES, false); +$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); +$stmt->execute(); +$value = $stmt->fetch(PDO::FETCH_NUM); +var_dump ($value); + +print "\nbuffered cursor, stringify off, fetch_numeric on\n"; +$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, true); +$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); +$stmt->execute(); +$value = $stmt->fetch(PDO::FETCH_NUM); +var_dump ($value); + +print "\nbuffered cursor, stringify on, fetch_numeric on\n"; +$conn->setAttribute( PDO::ATTR_STRINGIFY_FETCHES, true); +$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); +$stmt->execute(); +$value = $stmt->fetch(PDO::FETCH_NUM); +var_dump ($value); + +print "\nbuffered cursor, stringify on, fetch_numeric off\n"; +$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, false); +$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); +$stmt->execute(); +$value = $stmt->fetch(PDO::FETCH_NUM); +var_dump ($value); + +$stmt = null; +$conn = null; + +?> +--EXPECT-- +no buffered cursor, stringify off, fetch_numeric off +array(9) { + [0]=> + string(15) "1234567890.1234" + [1]=> + string(16) "-1234567890.1234" + [2]=> + string(1) "1" + [3]=> + string(2) "-1" + [4]=> + string(7) ".500000" + [5]=> + string(8) "-.550000" + [6]=> + string(1) "0" + [7]=> + string(3) "0.0" + [8]=> + string(7) ".000000" +} + +no buffered cursor, stringify off, fetch_numeric on +array(9) { + [0]=> + float(1234567890.1234) + [1]=> + float(-1234567890.1234) + [2]=> + int(1) + [3]=> + int(-1) + [4]=> + string(7) ".500000" + [5]=> + string(8) "-.550000" + [6]=> + int(0) + [7]=> + float(0) + [8]=> + string(7) ".000000" +} + +no buffered cursor, stringify on, fetch_numeric on +array(9) { + [0]=> + string(15) "1234567890.1234" + [1]=> + string(16) "-1234567890.1234" + [2]=> + string(1) "1" + [3]=> + string(2) "-1" + [4]=> + string(7) ".500000" + [5]=> + string(8) "-.550000" + [6]=> + string(1) "0" + [7]=> + string(1) "0" + [8]=> + string(7) ".000000" +} + +no buffered cursor, stringify on, fetch_numeric off +array(9) { + [0]=> + string(15) "1234567890.1234" + [1]=> + string(16) "-1234567890.1234" + [2]=> + string(1) "1" + [3]=> + string(2) "-1" + [4]=> + string(7) ".500000" + [5]=> + string(8) "-.550000" + [6]=> + string(1) "0" + [7]=> + string(3) "0.0" + [8]=> + string(7) ".000000" +} + +buffered cursor, stringify off, fetch_numeric off +array(9) { + [0]=> + string(15) "1234567890.1234" + [1]=> + string(16) "-1234567890.1234" + [2]=> + string(1) "1" + [3]=> + string(2) "-1" + [4]=> + string(7) ".500000" + [5]=> + string(8) "-.550000" + [6]=> + string(1) "0" + [7]=> + string(1) "0" + [8]=> + string(7) ".000000" +} + +buffered cursor, stringify off, fetch_numeric on +array(9) { + [0]=> + float(1234567890.1234) + [1]=> + float(-1234567890.1234) + [2]=> + int(1) + [3]=> + int(-1) + [4]=> + string(7) ".500000" + [5]=> + string(8) "-.550000" + [6]=> + int(0) + [7]=> + float(0) + [8]=> + string(7) ".000000" +} + +buffered cursor, stringify on, fetch_numeric on +array(9) { + [0]=> + string(15) "1234567890.1234" + [1]=> + string(16) "-1234567890.1234" + [2]=> + string(1) "1" + [3]=> + string(2) "-1" + [4]=> + string(7) ".500000" + [5]=> + string(8) "-.550000" + [6]=> + string(1) "0" + [7]=> + string(1) "0" + [8]=> + string(7) ".000000" +} + +buffered cursor, stringify on, fetch_numeric off +array(9) { + [0]=> + string(15) "1234567890.1234" + [1]=> + string(16) "-1234567890.1234" + [2]=> + string(1) "1" + [3]=> + string(2) "-1" + [4]=> + string(7) ".500000" + [5]=> + string(8) "-.550000" + [6]=> + string(1) "0" + [7]=> + string(1) "0" + [8]=> + string(7) ".000000" +} + diff --git a/test/pdo_sqlsrv/pdo_fetch_cursorBuffered_strings_to_integers.phpt b/test/functional/pdo_sqlsrv/pdo_fetch_cursorBuffered_strings_to_integers.phpt similarity index 96% rename from test/pdo_sqlsrv/pdo_fetch_cursorBuffered_strings_to_integers.phpt rename to test/functional/pdo_sqlsrv/pdo_fetch_cursorBuffered_strings_to_integers.phpt index cc33cbfa..3df828a9 100644 --- a/test/pdo_sqlsrv/pdo_fetch_cursorBuffered_strings_to_integers.phpt +++ b/test/functional/pdo_sqlsrv/pdo_fetch_cursorBuffered_strings_to_integers.phpt @@ -1,232 +1,232 @@ ---TEST-- -prepare with cursor buffered and fetch various columns with the column bound and specified to pdo type int ---SKIPIF-- - ---FILE-- -setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); - - $decimal = -2345209.3103; - $numeric = 987234.9919; - $salary = "3456789.15"; - $debt = "98765.99"; - - $query = 'CREATE TABLE #TESTTABLE ([c_decimal] decimal(28,4), [c_numeric] numeric(32,4), [c_varchar] varchar(20), [c_nvarchar] nvarchar(20))'; - - $stmt = $conn->exec($query); - - $query = 'INSERT INTO #TESTTABLE VALUES(:p0, :p1, :p2, :p3)'; - $stmt = $conn->prepare($query); - $stmt->bindValue(':p0', $decimal); - $stmt->bindValue(':p1', $numeric); - $stmt->bindValue(':p2', $salary); - $stmt->bindValue(':p3', $debt); - $stmt->execute(); - - $decimal2 = $decimal * 2; - $numeric2 = $numeric * 2; - $salary2 = $salary * 2; - $debt2 = $debt * 2; - - $stmt->bindValue(':p0', $decimal2); - $stmt->bindValue(':p1', $numeric2); - $stmt->bindValue(':p2', $salary2); - $stmt->bindValue(':p3', $debt2); - $stmt->execute(); - - $decimal3 = $decimal * 3; - $numeric3 = $numeric * 3; - $salary3 = $salary * 3; - $debt3 = $debt * 3; - - $stmt->bindValue(':p0', $decimal3); - $stmt->bindValue(':p1', $numeric3); - $stmt->bindValue(':p2', $salary3); - $stmt->bindValue(':p3', $debt3); - $stmt->execute(); - - $stmt = null; - - echo ("Input values:\n\torginal:$decimal\t$numeric\t$salary\t$debt\n\tdoubles:$decimal2\t$numeric2\t$salary2\t$debt2\n\ttriples:$decimal3\t$numeric3\t$salary3\t$debt3\n"); - - $query = 'SELECT * FROM #TESTTABLE'; - - // prepare with no buffered cursor - echo "\n\nComparing results (stringify off, fetch_numeric on):\n"; - // no buffered cursor, stringify off, fetch_numeric on - $conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, true); - $stmt1 = $conn->prepare($query); - $stmt1->execute(); - - // buffered cursor, stringify off, fetch_numeric on - $conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, true); - $stmt2 = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); - $stmt2->execute(); - - compareResults($stmt1, $stmt2); - - $stmt1 = null; - $stmt2 = null; - - echo "\n\nComparing results (stringify off, fetch_numeric off):\n"; - // no buffered cursor, stringify off, fetch_numeric off - $conn->setAttribute( PDO::ATTR_STRINGIFY_FETCHES, false); - $conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, false); - $stmt1 = $conn->prepare($query); - $stmt1->execute(); - - // buffered cursor, stringify off, fetch_numeric off - $conn->setAttribute( PDO::ATTR_STRINGIFY_FETCHES, false); - $conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, false); - $stmt2 = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); - $stmt2->execute(); - - compareResults($stmt1, $stmt2); - - $stmt1 = null; - $stmt2 = null; - - $conn = null; -} - -function compareResults($stmt1, $stmt2) -{ - $stmt1->bindColumn('c_decimal', $decimal_col1, PDO::PARAM_INT); - $stmt1->bindColumn('c_numeric', $numeric_col1, PDO::PARAM_INT); - $stmt1->bindColumn('c_varchar', $salary_col1, PDO::PARAM_INT); - $stmt1->bindColumn('c_nvarchar', $debt_col1, PDO::PARAM_INT); - - $stmt2->bindColumn('c_decimal', $decimal_col2, PDO::PARAM_INT); - $stmt2->bindColumn('c_numeric', $numeric_col2, PDO::PARAM_INT); - $stmt2->bindColumn('c_varchar', $salary_col2, PDO::PARAM_INT); - $stmt2->bindColumn('c_nvarchar', $debt_col2, PDO::PARAM_INT); - - $numRows = 3; - for ($i = 1; $i <= $numRows; $i++) - { - echo "\nreading row " . $i . "\n"; - - $value1 = $stmt1->fetch( PDO::FETCH_BOUND ); - $value2 = $stmt2->fetch( PDO::FETCH_BOUND ); - - compareData($decimal_col1, $decimal_col2); - compareData($numeric_col1, $numeric_col2); - compareData($salary_col1, $salary_col2); - compareData($debt_col1, $debt_col2); - } -} - -function compareData($data1, $data2) -{ - if ($data1 != $data2) - echo "Not matched!\n"; - else - echo "Matched!\n"; - - echo ("\tExpected: "); var_dump ($data1); - echo ("\tActual: "); var_dump ($data2); -} - -test(); - -?> ---EXPECT-- -Input values: - orginal:-2345209.3103 987234.9919 3456789.15 98765.99 - doubles:-4690418.6206 1974469.9838 6913578.3 197531.98 - triples:-7035627.9309 2961704.9757 10370367.45 296297.97 - - -Comparing results (stringify off, fetch_numeric on): - -reading row 1 -Matched! - Expected: int(-2345209) - Actual: int(-2345209) -Matched! - Expected: int(987234) - Actual: int(987234) -Matched! - Expected: int(3456789) - Actual: int(3456789) -Matched! - Expected: int(98765) - Actual: int(98765) - -reading row 2 -Matched! - Expected: int(-4690418) - Actual: int(-4690418) -Matched! - Expected: int(1974469) - Actual: int(1974469) -Matched! - Expected: int(6913578) - Actual: int(6913578) -Matched! - Expected: int(197531) - Actual: int(197531) - -reading row 3 -Matched! - Expected: int(-7035627) - Actual: int(-7035627) -Matched! - Expected: int(2961704) - Actual: int(2961704) -Matched! - Expected: int(10370367) - Actual: int(10370367) -Matched! - Expected: int(296297) - Actual: int(296297) - - -Comparing results (stringify off, fetch_numeric off): - -reading row 1 -Matched! - Expected: int(-2345209) - Actual: int(-2345209) -Matched! - Expected: int(987234) - Actual: int(987234) -Matched! - Expected: int(3456789) - Actual: int(3456789) -Matched! - Expected: int(98765) - Actual: int(98765) - -reading row 2 -Matched! - Expected: int(-4690418) - Actual: int(-4690418) -Matched! - Expected: int(1974469) - Actual: int(1974469) -Matched! - Expected: int(6913578) - Actual: int(6913578) -Matched! - Expected: int(197531) - Actual: int(197531) - -reading row 3 -Matched! - Expected: int(-7035627) - Actual: int(-7035627) -Matched! - Expected: int(2961704) - Actual: int(2961704) -Matched! - Expected: int(10370367) - Actual: int(10370367) -Matched! - Expected: int(296297) - Actual: int(296297) +--TEST-- +prepare with cursor buffered and fetch various columns with the column bound and specified to pdo type int +--SKIPIF-- + +--FILE-- +setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); + + $decimal = -2345209.3103; + $numeric = 987234.9919; + $salary = "3456789.15"; + $debt = "98765.99"; + + $query = 'CREATE TABLE #TESTTABLE ([c_decimal] decimal(28,4), [c_numeric] numeric(32,4), [c_varchar] varchar(20), [c_nvarchar] nvarchar(20))'; + + $stmt = $conn->exec($query); + + $query = 'INSERT INTO #TESTTABLE VALUES(:p0, :p1, :p2, :p3)'; + $stmt = $conn->prepare($query); + $stmt->bindValue(':p0', $decimal); + $stmt->bindValue(':p1', $numeric); + $stmt->bindValue(':p2', $salary); + $stmt->bindValue(':p3', $debt); + $stmt->execute(); + + $decimal2 = $decimal * 2; + $numeric2 = $numeric * 2; + $salary2 = $salary * 2; + $debt2 = $debt * 2; + + $stmt->bindValue(':p0', $decimal2); + $stmt->bindValue(':p1', $numeric2); + $stmt->bindValue(':p2', $salary2); + $stmt->bindValue(':p3', $debt2); + $stmt->execute(); + + $decimal3 = $decimal * 3; + $numeric3 = $numeric * 3; + $salary3 = $salary * 3; + $debt3 = $debt * 3; + + $stmt->bindValue(':p0', $decimal3); + $stmt->bindValue(':p1', $numeric3); + $stmt->bindValue(':p2', $salary3); + $stmt->bindValue(':p3', $debt3); + $stmt->execute(); + + $stmt = null; + + echo ("Input values:\n\torginal:$decimal\t$numeric\t$salary\t$debt\n\tdoubles:$decimal2\t$numeric2\t$salary2\t$debt2\n\ttriples:$decimal3\t$numeric3\t$salary3\t$debt3\n"); + + $query = 'SELECT * FROM #TESTTABLE'; + + // prepare with no buffered cursor + echo "\n\nComparing results (stringify off, fetch_numeric on):\n"; + // no buffered cursor, stringify off, fetch_numeric on + $conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, true); + $stmt1 = $conn->prepare($query); + $stmt1->execute(); + + // buffered cursor, stringify off, fetch_numeric on + $conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, true); + $stmt2 = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); + $stmt2->execute(); + + compareResults($stmt1, $stmt2); + + $stmt1 = null; + $stmt2 = null; + + echo "\n\nComparing results (stringify off, fetch_numeric off):\n"; + // no buffered cursor, stringify off, fetch_numeric off + $conn->setAttribute( PDO::ATTR_STRINGIFY_FETCHES, false); + $conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, false); + $stmt1 = $conn->prepare($query); + $stmt1->execute(); + + // buffered cursor, stringify off, fetch_numeric off + $conn->setAttribute( PDO::ATTR_STRINGIFY_FETCHES, false); + $conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, false); + $stmt2 = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); + $stmt2->execute(); + + compareResults($stmt1, $stmt2); + + $stmt1 = null; + $stmt2 = null; + + $conn = null; +} + +function compareResults($stmt1, $stmt2) +{ + $stmt1->bindColumn('c_decimal', $decimal_col1, PDO::PARAM_INT); + $stmt1->bindColumn('c_numeric', $numeric_col1, PDO::PARAM_INT); + $stmt1->bindColumn('c_varchar', $salary_col1, PDO::PARAM_INT); + $stmt1->bindColumn('c_nvarchar', $debt_col1, PDO::PARAM_INT); + + $stmt2->bindColumn('c_decimal', $decimal_col2, PDO::PARAM_INT); + $stmt2->bindColumn('c_numeric', $numeric_col2, PDO::PARAM_INT); + $stmt2->bindColumn('c_varchar', $salary_col2, PDO::PARAM_INT); + $stmt2->bindColumn('c_nvarchar', $debt_col2, PDO::PARAM_INT); + + $numRows = 3; + for ($i = 1; $i <= $numRows; $i++) + { + echo "\nreading row " . $i . "\n"; + + $value1 = $stmt1->fetch( PDO::FETCH_BOUND ); + $value2 = $stmt2->fetch( PDO::FETCH_BOUND ); + + compareData($decimal_col1, $decimal_col2); + compareData($numeric_col1, $numeric_col2); + compareData($salary_col1, $salary_col2); + compareData($debt_col1, $debt_col2); + } +} + +function compareData($data1, $data2) +{ + if ($data1 != $data2) + echo "Not matched!\n"; + else + echo "Matched!\n"; + + echo ("\tExpected: "); var_dump ($data1); + echo ("\tActual: "); var_dump ($data2); +} + +test(); + +?> +--EXPECT-- +Input values: + orginal:-2345209.3103 987234.9919 3456789.15 98765.99 + doubles:-4690418.6206 1974469.9838 6913578.3 197531.98 + triples:-7035627.9309 2961704.9757 10370367.45 296297.97 + + +Comparing results (stringify off, fetch_numeric on): + +reading row 1 +Matched! + Expected: int(-2345209) + Actual: int(-2345209) +Matched! + Expected: int(987234) + Actual: int(987234) +Matched! + Expected: int(3456789) + Actual: int(3456789) +Matched! + Expected: int(98765) + Actual: int(98765) + +reading row 2 +Matched! + Expected: int(-4690418) + Actual: int(-4690418) +Matched! + Expected: int(1974469) + Actual: int(1974469) +Matched! + Expected: int(6913578) + Actual: int(6913578) +Matched! + Expected: int(197531) + Actual: int(197531) + +reading row 3 +Matched! + Expected: int(-7035627) + Actual: int(-7035627) +Matched! + Expected: int(2961704) + Actual: int(2961704) +Matched! + Expected: int(10370367) + Actual: int(10370367) +Matched! + Expected: int(296297) + Actual: int(296297) + + +Comparing results (stringify off, fetch_numeric off): + +reading row 1 +Matched! + Expected: int(-2345209) + Actual: int(-2345209) +Matched! + Expected: int(987234) + Actual: int(987234) +Matched! + Expected: int(3456789) + Actual: int(3456789) +Matched! + Expected: int(98765) + Actual: int(98765) + +reading row 2 +Matched! + Expected: int(-4690418) + Actual: int(-4690418) +Matched! + Expected: int(1974469) + Actual: int(1974469) +Matched! + Expected: int(6913578) + Actual: int(6913578) +Matched! + Expected: int(197531) + Actual: int(197531) + +reading row 3 +Matched! + Expected: int(-7035627) + Actual: int(-7035627) +Matched! + Expected: int(2961704) + Actual: int(2961704) +Matched! + Expected: int(10370367) + Actual: int(10370367) +Matched! + Expected: int(296297) + Actual: int(296297) diff --git a/test/pdo_sqlsrv/pdo_fetch_cursorBuffered_unicode.phpt b/test/functional/pdo_sqlsrv/pdo_fetch_cursorBuffered_unicode.phpt similarity index 97% rename from test/pdo_sqlsrv/pdo_fetch_cursorBuffered_unicode.phpt rename to test/functional/pdo_sqlsrv/pdo_fetch_cursorBuffered_unicode.phpt index 6a38f729..83259f63 100644 --- a/test/pdo_sqlsrv/pdo_fetch_cursorBuffered_unicode.phpt +++ b/test/functional/pdo_sqlsrv/pdo_fetch_cursorBuffered_unicode.phpt @@ -1,105 +1,105 @@ ---TEST-- -prepare with cursor buffered and fetch a nvarchar column ---SKIPIF-- - ---FILE-- -setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); -$sample = "ê°€ê°"; - -$query = 'CREATE TABLE #TESTTABLE (exist nvarchar(10))'; -$stmt = $conn->exec($query); -$query = 'INSERT INTO #TESTTABLE VALUES(:p0)'; -$stmt = $conn->prepare($query); -$stmt->bindValue(':p0', $sample, PDO::PARAM_STR); -$stmt->execute(); - -$query = 'SELECT TOP 1 * FROM #TESTTABLE'; - -//prepare with no buffered cursor -print "no buffered cursor, stringify off, fetch_numeric off\n"; //stringify and fetch_numeric is off by default -$stmt = $conn->prepare($query); -$stmt->execute(); -$value = $stmt->fetchColumn(); -var_dump ($value); - -print "\nno buffered cursor, stringify off, fetch_numeric on\n"; -$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, true); -$stmt = $conn->prepare($query); -$stmt->execute(); -$value = $stmt->fetchColumn(); -var_dump ($value); - -print "\nno buffered cursor, stringify on, fetch_numeric on\n"; -$conn->setAttribute( PDO::ATTR_STRINGIFY_FETCHES, true); -$stmt = $conn->prepare($query); -$stmt->execute(); -$value = $stmt->fetchColumn(); -var_dump ($value); - -print "\nno buffered cursor, stringify on, fetch_numeric off\n"; -$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, false); -$stmt = $conn->prepare($query); -$stmt->execute(); -$value = $stmt->fetchColumn(); -var_dump ($value); - -//prepare with client buffered cursor -print "\nbuffered cursor, stringify off, fetch_numeric off\n"; -$conn->setAttribute( PDO::ATTR_STRINGIFY_FETCHES, false); -$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); -$stmt->execute(); -$value = $stmt->fetchColumn(); -var_dump ($value); - -print "\nbuffered cursor, stringify off, fetch_numeric on\n"; -$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, true); -$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); -$stmt->execute(); -$value = $stmt->fetchColumn(); -var_dump ($value); - -print "\nbuffered cursor, stringify on, fetch_numeric on\n"; -$conn->setAttribute( PDO::ATTR_STRINGIFY_FETCHES, true); -$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); -$stmt->execute(); -$value = $stmt->fetchColumn(); -var_dump ($value); - -print "\nbuffered cursor, stringify on, fetch_numeric off\n"; -$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, false); -$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); -$stmt->execute(); -$value = $stmt->fetchColumn(); -var_dump ($value); - -$stmt = null; -$conn = null; - -?> ---EXPECT-- -no buffered cursor, stringify off, fetch_numeric off -string(6) "ê°€ê°" - -no buffered cursor, stringify off, fetch_numeric on -string(6) "ê°€ê°" - -no buffered cursor, stringify on, fetch_numeric on -string(6) "ê°€ê°" - -no buffered cursor, stringify on, fetch_numeric off -string(6) "ê°€ê°" - -buffered cursor, stringify off, fetch_numeric off -string(6) "ê°€ê°" - -buffered cursor, stringify off, fetch_numeric on -string(6) "ê°€ê°" - -buffered cursor, stringify on, fetch_numeric on -string(6) "ê°€ê°" - -buffered cursor, stringify on, fetch_numeric off -string(6) "ê°€ê°" +--TEST-- +prepare with cursor buffered and fetch a nvarchar column +--SKIPIF-- + +--FILE-- +setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); +$sample = "ê°€ê°"; + +$query = 'CREATE TABLE #TESTTABLE (exist nvarchar(10))'; +$stmt = $conn->exec($query); +$query = 'INSERT INTO #TESTTABLE VALUES(:p0)'; +$stmt = $conn->prepare($query); +$stmt->bindValue(':p0', $sample, PDO::PARAM_STR); +$stmt->execute(); + +$query = 'SELECT TOP 1 * FROM #TESTTABLE'; + +//prepare with no buffered cursor +print "no buffered cursor, stringify off, fetch_numeric off\n"; //stringify and fetch_numeric is off by default +$stmt = $conn->prepare($query); +$stmt->execute(); +$value = $stmt->fetchColumn(); +var_dump ($value); + +print "\nno buffered cursor, stringify off, fetch_numeric on\n"; +$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, true); +$stmt = $conn->prepare($query); +$stmt->execute(); +$value = $stmt->fetchColumn(); +var_dump ($value); + +print "\nno buffered cursor, stringify on, fetch_numeric on\n"; +$conn->setAttribute( PDO::ATTR_STRINGIFY_FETCHES, true); +$stmt = $conn->prepare($query); +$stmt->execute(); +$value = $stmt->fetchColumn(); +var_dump ($value); + +print "\nno buffered cursor, stringify on, fetch_numeric off\n"; +$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, false); +$stmt = $conn->prepare($query); +$stmt->execute(); +$value = $stmt->fetchColumn(); +var_dump ($value); + +//prepare with client buffered cursor +print "\nbuffered cursor, stringify off, fetch_numeric off\n"; +$conn->setAttribute( PDO::ATTR_STRINGIFY_FETCHES, false); +$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); +$stmt->execute(); +$value = $stmt->fetchColumn(); +var_dump ($value); + +print "\nbuffered cursor, stringify off, fetch_numeric on\n"; +$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, true); +$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); +$stmt->execute(); +$value = $stmt->fetchColumn(); +var_dump ($value); + +print "\nbuffered cursor, stringify on, fetch_numeric on\n"; +$conn->setAttribute( PDO::ATTR_STRINGIFY_FETCHES, true); +$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); +$stmt->execute(); +$value = $stmt->fetchColumn(); +var_dump ($value); + +print "\nbuffered cursor, stringify on, fetch_numeric off\n"; +$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, false); +$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED)); +$stmt->execute(); +$value = $stmt->fetchColumn(); +var_dump ($value); + +$stmt = null; +$conn = null; + +?> +--EXPECT-- +no buffered cursor, stringify off, fetch_numeric off +string(6) "ê°€ê°" + +no buffered cursor, stringify off, fetch_numeric on +string(6) "ê°€ê°" + +no buffered cursor, stringify on, fetch_numeric on +string(6) "ê°€ê°" + +no buffered cursor, stringify on, fetch_numeric off +string(6) "ê°€ê°" + +buffered cursor, stringify off, fetch_numeric off +string(6) "ê°€ê°" + +buffered cursor, stringify off, fetch_numeric on +string(6) "ê°€ê°" + +buffered cursor, stringify on, fetch_numeric on +string(6) "ê°€ê°" + +buffered cursor, stringify on, fetch_numeric off +string(6) "ê°€ê°" diff --git a/test/pdo_sqlsrv/pdo_fetch_cursor_scroll_random.phpt b/test/functional/pdo_sqlsrv/pdo_fetch_cursor_scroll_random.phpt similarity index 100% rename from test/pdo_sqlsrv/pdo_fetch_cursor_scroll_random.phpt rename to test/functional/pdo_sqlsrv/pdo_fetch_cursor_scroll_random.phpt diff --git a/test/pdo_sqlsrv/pdo_fetch_fetchinto_query_args.phpt b/test/functional/pdo_sqlsrv/pdo_fetch_fetchinto_query_args.phpt similarity index 100% rename from test/pdo_sqlsrv/pdo_fetch_fetchinto_query_args.phpt rename to test/functional/pdo_sqlsrv/pdo_fetch_fetchinto_query_args.phpt diff --git a/test/pdo_sqlsrv/pdo_fetch_variants_diff_styles.phpt b/test/functional/pdo_sqlsrv/pdo_fetch_variants_diff_styles.phpt similarity index 100% rename from test/pdo_sqlsrv/pdo_fetch_variants_diff_styles.phpt rename to test/functional/pdo_sqlsrv/pdo_fetch_variants_diff_styles.phpt diff --git a/test/pdo_sqlsrv/pdo_getAttribute_clientInfo.phpt b/test/functional/pdo_sqlsrv/pdo_getAttribute_clientInfo.phpt similarity index 86% rename from test/pdo_sqlsrv/pdo_getAttribute_clientInfo.phpt rename to test/functional/pdo_sqlsrv/pdo_getAttribute_clientInfo.phpt index a27ddcde..894721b8 100644 --- a/test/pdo_sqlsrv/pdo_getAttribute_clientInfo.phpt +++ b/test/functional/pdo_sqlsrv/pdo_getAttribute_clientInfo.phpt @@ -18,5 +18,5 @@ Array \[(DriverDllName|DriverName)\] => (msodbcsql1[1-9].dll|libmsodbcsql-[1-9]{2}.[0-9].so.[0-9].[0-9]) \[DriverODBCVer\] => [0-9]{1,2}\.[0-9]{1,2} \[DriverVer\] => [0-9]{1,2}\.[0-9]{1,2}\.[0-9]{4} - \[ExtensionVer\] => [0-9]\.[0-9]\.[0-9](\-((rc)|(preview))(\.[0-9]+)?)?(\+[0-9]+)? + \[ExtensionVer\] => [0-9].[0-9]\.[0-9](-(RC[0-9]?|preview))?(\.[0-9]+)?(\+[0-9]+)? \) \ No newline at end of file diff --git a/test/pdo_sqlsrv/pdo_getAvailableDrivers.phpt b/test/functional/pdo_sqlsrv/pdo_getAvailableDrivers.phpt similarity index 100% rename from test/pdo_sqlsrv/pdo_getAvailableDrivers.phpt rename to test/functional/pdo_sqlsrv/pdo_getAvailableDrivers.phpt diff --git a/test/pdo_sqlsrv/pdo_get_attr_invalid.phpt b/test/functional/pdo_sqlsrv/pdo_get_attr_invalid.phpt similarity index 100% rename from test/pdo_sqlsrv/pdo_get_attr_invalid.phpt rename to test/functional/pdo_sqlsrv/pdo_get_attr_invalid.phpt diff --git a/test/pdo_sqlsrv/pdo_get_set_attr.phpt b/test/functional/pdo_sqlsrv/pdo_get_set_attr.phpt similarity index 98% rename from test/pdo_sqlsrv/pdo_get_set_attr.phpt rename to test/functional/pdo_sqlsrv/pdo_get_set_attr.phpt index 7651b479..4aac8bd4 100644 --- a/test/pdo_sqlsrv/pdo_get_set_attr.phpt +++ b/test/functional/pdo_sqlsrv/pdo_get_set_attr.phpt @@ -145,7 +145,7 @@ array\(4\) { \["DriverVer"\]=> string\(10\) "[0-9]{2}.[0-9]{2}.[0-9]{4}" \["ExtensionVer"\]=> - string\([0-9]*\) \"[0-9]\.[0-9]\.[0-9](\-((rc)|(preview))(\.[0-9]+)?)?(\+[0-9]+)?\" + string\([0-9]*\) \"[0-9].[0-9]\.[0-9](-(RC[0-9]?|preview))?(\.[0-9]+)?(\+[0-9]+)?\" } Test_6: diff --git a/test/pdo_sqlsrv/pdo_insertDataType.phpt b/test/functional/pdo_sqlsrv/pdo_insertDataType.phpt similarity index 100% rename from test/pdo_sqlsrv/pdo_insertDataType.phpt rename to test/functional/pdo_sqlsrv/pdo_insertDataType.phpt diff --git a/test/pdo_sqlsrv/pdo_invalid_conn_opt.phpt b/test/functional/pdo_sqlsrv/pdo_invalid_conn_opt.phpt similarity index 100% rename from test/pdo_sqlsrv/pdo_invalid_conn_opt.phpt rename to test/functional/pdo_sqlsrv/pdo_invalid_conn_opt.phpt diff --git a/test/pdo_sqlsrv/pdo_katmai_special_types.phpt b/test/functional/pdo_sqlsrv/pdo_katmai_special_types.phpt similarity index 100% rename from test/pdo_sqlsrv/pdo_katmai_special_types.phpt rename to test/functional/pdo_sqlsrv/pdo_katmai_special_types.phpt diff --git a/test/pdo_sqlsrv/pdo_lastInsertId.phpt b/test/functional/pdo_sqlsrv/pdo_lastInsertId.phpt similarity index 100% rename from test/pdo_sqlsrv/pdo_lastInsertId.phpt rename to test/functional/pdo_sqlsrv/pdo_lastInsertId.phpt diff --git a/test/pdo_sqlsrv/pdo_nested_query_mars.phpt b/test/functional/pdo_sqlsrv/pdo_nested_query_mars.phpt similarity index 100% rename from test/pdo_sqlsrv/pdo_nested_query_mars.phpt rename to test/functional/pdo_sqlsrv/pdo_nested_query_mars.phpt diff --git a/test/pdo_sqlsrv/pdo_output_decimal.phpt b/test/functional/pdo_sqlsrv/pdo_output_decimal.phpt similarity index 100% rename from test/pdo_sqlsrv/pdo_output_decimal.phpt rename to test/functional/pdo_sqlsrv/pdo_output_decimal.phpt diff --git a/test/pdo_sqlsrv/pdo_param_output_select_variant.phpt b/test/functional/pdo_sqlsrv/pdo_param_output_select_variant.phpt similarity index 100% rename from test/pdo_sqlsrv/pdo_param_output_select_variant.phpt rename to test/functional/pdo_sqlsrv/pdo_param_output_select_variant.phpt diff --git a/test/pdo_sqlsrv/pdo_param_output_variants.phpt b/test/functional/pdo_sqlsrv/pdo_param_output_variants.phpt similarity index 100% rename from test/pdo_sqlsrv/pdo_param_output_variants.phpt rename to test/functional/pdo_sqlsrv/pdo_param_output_variants.phpt diff --git a/test/pdo_sqlsrv/pdo_passwords.phpt b/test/functional/pdo_sqlsrv/pdo_passwords.phpt similarity index 63% rename from test/pdo_sqlsrv/pdo_passwords.phpt rename to test/functional/pdo_sqlsrv/pdo_passwords.phpt index a843ac4d..cadcf9ae 100644 --- a/test/pdo_sqlsrv/pdo_passwords.phpt +++ b/test/functional/pdo_sqlsrv/pdo_passwords.phpt @@ -3,8 +3,7 @@ Test password with non alphanumeric characters --DESCRIPTION-- The first three cases should have no problem connecting. Only the last case fails because the right curly brace should be escaped with another right brace. -In Azure we can't set DEFAULT_DATABASE for a login user. For this test to psss must connect -to the test database defined in MsSetup.inc +In Azure for this test to pass do not specify any particular database when connecting --SKIPIF-- --FILE-- @@ -14,7 +13,7 @@ require 'MsSetup.inc'; try{ // Test 1 - $conn = new PDO( "sqlsrv:Server=$server;Database=$databaseName;ConnectionPooling=false;" , "test_password", "! ;4triou"); + $conn = new PDO( "sqlsrv:Server=$server;ConnectionPooling=false;" , "test_password", "! ;4triou"); if(!$conn) { echo "Test 1: Should have connected."; @@ -26,7 +25,7 @@ catch(PDOException $e){ } try{ // Test 2 - $conn = new PDO( "sqlsrv:Server=$server;Database=$databaseName;ConnectionPooling=false;" , "test_password2", "!}} ;4triou"); + $conn = new PDO( "sqlsrv:Server=$server;ConnectionPooling=false;" , "test_password2", "!}} ;4triou"); if(!$conn) { echo "Test 2: Should have connected."; @@ -38,7 +37,7 @@ catch(PDOException $e){ } try{ // Test 3 - $conn = new PDO( "sqlsrv:Server=$server;Database=$databaseName;ConnectionPooling=false;" , "test_password3", "! ;4triou}}"); + $conn = new PDO( "sqlsrv:Server=$server;ConnectionPooling=false;" , "test_password3", "! ;4triou}}"); if(!$conn) { echo "Test 3: Should have connected."; @@ -52,7 +51,7 @@ catch(PDOException $e){ try { // Test 4 - $conn = new PDO( "sqlsrv:Server=$server;Database=$databaseName;ConnectionPooling=false;" , "test_password3", "! ;4triou}"); + $conn = new PDO( "sqlsrv:Server=$server;ConnectionPooling=false;" , "test_password3", "! ;4triou}"); } catch( PDOException $e ) { print_r( $e->getMessage() ); diff --git a/test/pdo_sqlsrv/pdo_prepare.phpt b/test/functional/pdo_sqlsrv/pdo_prepare.phpt similarity index 100% rename from test/pdo_sqlsrv/pdo_prepare.phpt rename to test/functional/pdo_sqlsrv/pdo_prepare.phpt diff --git a/test/pdo_sqlsrv/pdo_prepare_attribute.phpt b/test/functional/pdo_sqlsrv/pdo_prepare_attribute.phpt similarity index 100% rename from test/pdo_sqlsrv/pdo_prepare_attribute.phpt rename to test/functional/pdo_sqlsrv/pdo_prepare_attribute.phpt diff --git a/test/pdo_sqlsrv/pdo_prepare_emulatePrepare_binary.phpt b/test/functional/pdo_sqlsrv/pdo_prepare_emulatePrepare_binary.phpt similarity index 100% rename from test/pdo_sqlsrv/pdo_prepare_emulatePrepare_binary.phpt rename to test/functional/pdo_sqlsrv/pdo_prepare_emulatePrepare_binary.phpt diff --git a/test/pdo_sqlsrv/pdo_prepare_emulatePrepare_char.phpt b/test/functional/pdo_sqlsrv/pdo_prepare_emulatePrepare_char.phpt similarity index 100% rename from test/pdo_sqlsrv/pdo_prepare_emulatePrepare_char.phpt rename to test/functional/pdo_sqlsrv/pdo_prepare_emulatePrepare_char.phpt diff --git a/test/pdo_sqlsrv/pdo_prepare_emulatePrepare_datetime.phpt b/test/functional/pdo_sqlsrv/pdo_prepare_emulatePrepare_datetime.phpt similarity index 100% rename from test/pdo_sqlsrv/pdo_prepare_emulatePrepare_datetime.phpt rename to test/functional/pdo_sqlsrv/pdo_prepare_emulatePrepare_datetime.phpt diff --git a/test/pdo_sqlsrv/pdo_prepare_emulatePrepare_decimal.phpt b/test/functional/pdo_sqlsrv/pdo_prepare_emulatePrepare_decimal.phpt similarity index 100% rename from test/pdo_sqlsrv/pdo_prepare_emulatePrepare_decimal.phpt rename to test/functional/pdo_sqlsrv/pdo_prepare_emulatePrepare_decimal.phpt diff --git a/test/pdo_sqlsrv/pdo_prepare_emulatePrepare_float.phpt b/test/functional/pdo_sqlsrv/pdo_prepare_emulatePrepare_float.phpt similarity index 100% rename from test/pdo_sqlsrv/pdo_prepare_emulatePrepare_float.phpt rename to test/functional/pdo_sqlsrv/pdo_prepare_emulatePrepare_float.phpt diff --git a/test/pdo_sqlsrv/pdo_prepare_emulatePrepare_int.phpt b/test/functional/pdo_sqlsrv/pdo_prepare_emulatePrepare_int.phpt similarity index 100% rename from test/pdo_sqlsrv/pdo_prepare_emulatePrepare_int.phpt rename to test/functional/pdo_sqlsrv/pdo_prepare_emulatePrepare_int.phpt diff --git a/test/pdo_sqlsrv/pdo_prepare_emulatePrepare_money.phpt b/test/functional/pdo_sqlsrv/pdo_prepare_emulatePrepare_money.phpt similarity index 100% rename from test/pdo_sqlsrv/pdo_prepare_emulatePrepare_money.phpt rename to test/functional/pdo_sqlsrv/pdo_prepare_emulatePrepare_money.phpt diff --git a/test/pdo_sqlsrv/pdo_prepare_emulatePrepare_unicode.phpt b/test/functional/pdo_sqlsrv/pdo_prepare_emulatePrepare_unicode.phpt similarity index 100% rename from test/pdo_sqlsrv/pdo_prepare_emulatePrepare_unicode.phpt rename to test/functional/pdo_sqlsrv/pdo_prepare_emulatePrepare_unicode.phpt diff --git a/test/pdo_sqlsrv/pdo_prepare_invalid_cursor.phpt b/test/functional/pdo_sqlsrv/pdo_prepare_invalid_cursor.phpt similarity index 100% rename from test/pdo_sqlsrv/pdo_prepare_invalid_cursor.phpt rename to test/functional/pdo_sqlsrv/pdo_prepare_invalid_cursor.phpt diff --git a/test/pdo_sqlsrv/pdo_prepare_invalid_encoding.phpt b/test/functional/pdo_sqlsrv/pdo_prepare_invalid_encoding.phpt similarity index 100% rename from test/pdo_sqlsrv/pdo_prepare_invalid_encoding.phpt rename to test/functional/pdo_sqlsrv/pdo_prepare_invalid_encoding.phpt diff --git a/test/pdo_sqlsrv/pdo_prepare_invalid_option_key.phpt b/test/functional/pdo_sqlsrv/pdo_prepare_invalid_option_key.phpt similarity index 100% rename from test/pdo_sqlsrv/pdo_prepare_invalid_option_key.phpt rename to test/functional/pdo_sqlsrv/pdo_prepare_invalid_option_key.phpt diff --git a/test/pdo_sqlsrv/pdo_prepare_invalid_scrollable_cursor.phpt b/test/functional/pdo_sqlsrv/pdo_prepare_invalid_scrollable_cursor.phpt similarity index 100% rename from test/pdo_sqlsrv/pdo_prepare_invalid_scrollable_cursor.phpt rename to test/functional/pdo_sqlsrv/pdo_prepare_invalid_scrollable_cursor.phpt diff --git a/test/pdo_sqlsrv/pdo_prepare_options.phpt b/test/functional/pdo_sqlsrv/pdo_prepare_options.phpt similarity index 100% rename from test/pdo_sqlsrv/pdo_prepare_options.phpt rename to test/functional/pdo_sqlsrv/pdo_prepare_options.phpt diff --git a/test/pdo_sqlsrv/pdo_query.phpt b/test/functional/pdo_sqlsrv/pdo_query.phpt similarity index 100% rename from test/pdo_sqlsrv/pdo_query.phpt rename to test/functional/pdo_sqlsrv/pdo_query.phpt diff --git a/test/pdo_sqlsrv/pdo_query_timeout.phpt b/test/functional/pdo_sqlsrv/pdo_query_timeout.phpt similarity index 100% rename from test/pdo_sqlsrv/pdo_query_timeout.phpt rename to test/functional/pdo_sqlsrv/pdo_query_timeout.phpt diff --git a/test/pdo_sqlsrv/pdo_quote.phpt b/test/functional/pdo_sqlsrv/pdo_quote.phpt similarity index 100% rename from test/pdo_sqlsrv/pdo_quote.phpt rename to test/functional/pdo_sqlsrv/pdo_quote.phpt diff --git a/test/pdo_sqlsrv/pdo_set_attr_invalid.phpt b/test/functional/pdo_sqlsrv/pdo_set_attr_invalid.phpt similarity index 100% rename from test/pdo_sqlsrv/pdo_set_attr_invalid.phpt rename to test/functional/pdo_sqlsrv/pdo_set_attr_invalid.phpt diff --git a/test/pdo_sqlsrv/pdo_set_attr_invalid_encoding.phpt b/test/functional/pdo_sqlsrv/pdo_set_attr_invalid_encoding.phpt similarity index 100% rename from test/pdo_sqlsrv/pdo_set_attr_invalid_encoding.phpt rename to test/functional/pdo_sqlsrv/pdo_set_attr_invalid_encoding.phpt diff --git a/test/pdo_sqlsrv/pdo_simple_update_variants.phpt b/test/functional/pdo_sqlsrv/pdo_simple_update_variants.phpt similarity index 100% rename from test/pdo_sqlsrv/pdo_simple_update_variants.phpt rename to test/functional/pdo_sqlsrv/pdo_simple_update_variants.phpt diff --git a/test/pdo_sqlsrv/pdo_statement_rowcount_query.phpt b/test/functional/pdo_sqlsrv/pdo_statement_rowcount_query.phpt similarity index 100% rename from test/pdo_sqlsrv/pdo_statement_rowcount_query.phpt rename to test/functional/pdo_sqlsrv/pdo_statement_rowcount_query.phpt diff --git a/test/pdo_sqlsrv/pdo_stored_proc_fetch_datatypes.phpt b/test/functional/pdo_sqlsrv/pdo_stored_proc_fetch_datatypes.phpt similarity index 100% rename from test/pdo_sqlsrv/pdo_stored_proc_fetch_datatypes.phpt rename to test/functional/pdo_sqlsrv/pdo_stored_proc_fetch_datatypes.phpt diff --git a/test/pdo_sqlsrv/pdo_testDataType.phpt b/test/functional/pdo_sqlsrv/pdo_testDataType.phpt similarity index 100% rename from test/pdo_sqlsrv/pdo_testDataType.phpt rename to test/functional/pdo_sqlsrv/pdo_testDataType.phpt diff --git a/test/pdo_sqlsrv/pdo_tools.inc b/test/functional/pdo_sqlsrv/pdo_tools.inc similarity index 100% rename from test/pdo_sqlsrv/pdo_tools.inc rename to test/functional/pdo_sqlsrv/pdo_tools.inc diff --git a/test/pdo_sqlsrv/pdo_transaction.phpt b/test/functional/pdo_sqlsrv/pdo_transaction.phpt similarity index 100% rename from test/pdo_sqlsrv/pdo_transaction.phpt rename to test/functional/pdo_sqlsrv/pdo_transaction.phpt diff --git a/test/pdo_sqlsrv/pdo_transactions.phpt b/test/functional/pdo_sqlsrv/pdo_transactions.phpt similarity index 100% rename from test/pdo_sqlsrv/pdo_transactions.phpt rename to test/functional/pdo_sqlsrv/pdo_transactions.phpt diff --git a/test/pdo_sqlsrv/pdo_utf8_conn.phpt b/test/functional/pdo_sqlsrv/pdo_utf8_conn.phpt similarity index 100% rename from test/pdo_sqlsrv/pdo_utf8_conn.phpt rename to test/functional/pdo_sqlsrv/pdo_utf8_conn.phpt diff --git a/test/pdo_sqlsrv/pdo_utf8_stored_proc_unicode_chars.phpt b/test/functional/pdo_sqlsrv/pdo_utf8_stored_proc_unicode_chars.phpt similarity index 100% rename from test/pdo_sqlsrv/pdo_utf8_stored_proc_unicode_chars.phpt rename to test/functional/pdo_sqlsrv/pdo_utf8_stored_proc_unicode_chars.phpt diff --git a/test/pdo_sqlsrv/pdo_warnings.phpt b/test/functional/pdo_sqlsrv/pdo_warnings.phpt similarity index 100% rename from test/pdo_sqlsrv/pdo_warnings.phpt rename to test/functional/pdo_sqlsrv/pdo_warnings.phpt diff --git a/test/pdo_sqlsrv/pdostatement_Buffqry.phpt b/test/functional/pdo_sqlsrv/pdostatement_Buffqry.phpt similarity index 100% rename from test/pdo_sqlsrv/pdostatement_Buffqry.phpt rename to test/functional/pdo_sqlsrv/pdostatement_Buffqry.phpt diff --git a/test/pdo_sqlsrv/pdostatement_GetDataType.phpt b/test/functional/pdo_sqlsrv/pdostatement_GetDataType.phpt similarity index 100% rename from test/pdo_sqlsrv/pdostatement_GetDataType.phpt rename to test/functional/pdo_sqlsrv/pdostatement_GetDataType.phpt diff --git a/test/pdo_sqlsrv/pdostatement_bindColumn.phpt b/test/functional/pdo_sqlsrv/pdostatement_bindColumn.phpt similarity index 100% rename from test/pdo_sqlsrv/pdostatement_bindColumn.phpt rename to test/functional/pdo_sqlsrv/pdostatement_bindColumn.phpt diff --git a/test/pdo_sqlsrv/pdostatement_bindParam.phpt b/test/functional/pdo_sqlsrv/pdostatement_bindParam.phpt similarity index 100% rename from test/pdo_sqlsrv/pdostatement_bindParam.phpt rename to test/functional/pdo_sqlsrv/pdostatement_bindParam.phpt diff --git a/test/pdo_sqlsrv/pdostatement_bindValue.phpt b/test/functional/pdo_sqlsrv/pdostatement_bindValue.phpt similarity index 100% rename from test/pdo_sqlsrv/pdostatement_bindValue.phpt rename to test/functional/pdo_sqlsrv/pdostatement_bindValue.phpt diff --git a/test/pdo_sqlsrv/pdostatement_bindcolumn_odd_types.phpt b/test/functional/pdo_sqlsrv/pdostatement_bindcolumn_odd_types.phpt similarity index 100% rename from test/pdo_sqlsrv/pdostatement_bindcolumn_odd_types.phpt rename to test/functional/pdo_sqlsrv/pdostatement_bindcolumn_odd_types.phpt diff --git a/test/pdo_sqlsrv/pdostatement_closeCursor.phpt b/test/functional/pdo_sqlsrv/pdostatement_closeCursor.phpt similarity index 100% rename from test/pdo_sqlsrv/pdostatement_closeCursor.phpt rename to test/functional/pdo_sqlsrv/pdostatement_closeCursor.phpt diff --git a/test/pdo_sqlsrv/pdostatement_columnCount.phpt b/test/functional/pdo_sqlsrv/pdostatement_columnCount.phpt similarity index 100% rename from test/pdo_sqlsrv/pdostatement_columnCount.phpt rename to test/functional/pdo_sqlsrv/pdostatement_columnCount.phpt diff --git a/test/pdo_sqlsrv/pdostatement_debugDumpParams.phpt b/test/functional/pdo_sqlsrv/pdostatement_debugDumpParams.phpt similarity index 100% rename from test/pdo_sqlsrv/pdostatement_debugDumpParams.phpt rename to test/functional/pdo_sqlsrv/pdostatement_debugDumpParams.phpt diff --git a/test/pdo_sqlsrv/pdostatement_error.phpt b/test/functional/pdo_sqlsrv/pdostatement_error.phpt similarity index 100% rename from test/pdo_sqlsrv/pdostatement_error.phpt rename to test/functional/pdo_sqlsrv/pdostatement_error.phpt diff --git a/test/pdo_sqlsrv/pdostatement_execute.phpt b/test/functional/pdo_sqlsrv/pdostatement_execute.phpt similarity index 100% rename from test/pdo_sqlsrv/pdostatement_execute.phpt rename to test/functional/pdo_sqlsrv/pdostatement_execute.phpt diff --git a/test/pdo_sqlsrv/pdostatement_fetchAll.phpt b/test/functional/pdo_sqlsrv/pdostatement_fetchAll.phpt similarity index 100% rename from test/pdo_sqlsrv/pdostatement_fetchAll.phpt rename to test/functional/pdo_sqlsrv/pdostatement_fetchAll.phpt diff --git a/test/pdo_sqlsrv/pdostatement_fetchColumn.phpt b/test/functional/pdo_sqlsrv/pdostatement_fetchColumn.phpt similarity index 100% rename from test/pdo_sqlsrv/pdostatement_fetchColumn.phpt rename to test/functional/pdo_sqlsrv/pdostatement_fetchColumn.phpt diff --git a/test/pdo_sqlsrv/pdostatement_fetchObject.phpt b/test/functional/pdo_sqlsrv/pdostatement_fetchObject.phpt similarity index 100% rename from test/pdo_sqlsrv/pdostatement_fetchObject.phpt rename to test/functional/pdo_sqlsrv/pdostatement_fetchObject.phpt diff --git a/test/pdo_sqlsrv/pdostatement_fetch_orientation.phpt b/test/functional/pdo_sqlsrv/pdostatement_fetch_orientation.phpt similarity index 100% rename from test/pdo_sqlsrv/pdostatement_fetch_orientation.phpt rename to test/functional/pdo_sqlsrv/pdostatement_fetch_orientation.phpt diff --git a/test/pdo_sqlsrv/pdostatement_fetch_style.phpt b/test/functional/pdo_sqlsrv/pdostatement_fetch_style.phpt similarity index 100% rename from test/pdo_sqlsrv/pdostatement_fetch_style.phpt rename to test/functional/pdo_sqlsrv/pdostatement_fetch_style.phpt diff --git a/test/pdo_sqlsrv/pdostatement_fetchmode_emulate_prepare.phpt b/test/functional/pdo_sqlsrv/pdostatement_fetchmode_emulate_prepare.phpt similarity index 100% rename from test/pdo_sqlsrv/pdostatement_fetchmode_emulate_prepare.phpt rename to test/functional/pdo_sqlsrv/pdostatement_fetchmode_emulate_prepare.phpt diff --git a/test/pdo_sqlsrv/pdostatement_getColumnMeta.phpt b/test/functional/pdo_sqlsrv/pdostatement_getColumnMeta.phpt similarity index 100% rename from test/pdo_sqlsrv/pdostatement_getColumnMeta.phpt rename to test/functional/pdo_sqlsrv/pdostatement_getColumnMeta.phpt diff --git a/test/pdo_sqlsrv/pdostatement_getColumnMeta_unicode_col_name.phpt b/test/functional/pdo_sqlsrv/pdostatement_getColumnMeta_unicode_col_name.phpt similarity index 100% rename from test/pdo_sqlsrv/pdostatement_getColumnMeta_unicode_col_name.phpt rename to test/functional/pdo_sqlsrv/pdostatement_getColumnMeta_unicode_col_name.phpt diff --git a/test/pdo_sqlsrv/pdostatement_get_set_attr.phpt b/test/functional/pdo_sqlsrv/pdostatement_get_set_attr.phpt similarity index 100% rename from test/pdo_sqlsrv/pdostatement_get_set_attr.phpt rename to test/functional/pdo_sqlsrv/pdostatement_get_set_attr.phpt diff --git a/test/pdo_sqlsrv/pdostatement_nextRowset.phpt b/test/functional/pdo_sqlsrv/pdostatement_nextRowset.phpt similarity index 100% rename from test/pdo_sqlsrv/pdostatement_nextRowset.phpt rename to test/functional/pdo_sqlsrv/pdostatement_nextRowset.phpt diff --git a/test/pdo_sqlsrv/pdostatement_rowCount.phpt b/test/functional/pdo_sqlsrv/pdostatement_rowCount.phpt similarity index 100% rename from test/pdo_sqlsrv/pdostatement_rowCount.phpt rename to test/functional/pdo_sqlsrv/pdostatement_rowCount.phpt diff --git a/test/pdo_sqlsrv/pdostatement_setFetchMode.phpt b/test/functional/pdo_sqlsrv/pdostatement_setFetchMode.phpt similarity index 100% rename from test/pdo_sqlsrv/pdostatement_setFetchMode.phpt rename to test/functional/pdo_sqlsrv/pdostatement_setFetchMode.phpt diff --git a/test/pdo_sqlsrv/skipif.inc b/test/functional/pdo_sqlsrv/skipif.inc similarity index 100% rename from test/pdo_sqlsrv/skipif.inc rename to test/functional/pdo_sqlsrv/skipif.inc diff --git a/test/pdo_sqlsrv/skipif_azure.inc b/test/functional/pdo_sqlsrv/skipif_azure.inc similarity index 61% rename from test/pdo_sqlsrv/skipif_azure.inc rename to test/functional/pdo_sqlsrv/skipif_azure.inc index f91bd45b..aec21ea5 100644 --- a/test/pdo_sqlsrv/skipif_azure.inc +++ b/test/functional/pdo_sqlsrv/skipif_azure.inc @@ -2,9 +2,7 @@ if (!extension_loaded("pdo") || !extension_loaded('pdo_sqlsrv')) die("PDO driver cannot be loaded; skipping test.\n"); -include 'MsCommon.inc'; -if ( IsDaasMode() ) { - die("skip test in Azure"); -} - +require 'MsSetup.inc'; +if ($daasMode) die("skip test not applicable in Azure\n"); + ?> diff --git a/test/functional/pdo_sqlsrv/skipif_protocol_not_tcp.inc b/test/functional/pdo_sqlsrv/skipif_protocol_not_tcp.inc new file mode 100644 index 00000000..47a0d8d7 --- /dev/null +++ b/test/functional/pdo_sqlsrv/skipif_protocol_not_tcp.inc @@ -0,0 +1,35 @@ +query( "SELECT @@SPID" ); +if ( $stmt ) +{ + $spid = $stmt->fetch(PDO::FETCH_NUM)[0]; +} +else +{ + die( "skip Could not fetch SPID during SKIPIF."); +} + +$stmt = $conn->query( "SELECT * FROM sys.dm_exec_connections WHERE session_id = ".$spid); +$prot = $stmt->fetchColumn(3); + +if ($prot != 'TCP') +{ + die("skip Not using a TCP protocol." ); +} +?> diff --git a/test/pdo_sqlsrv/skipif_unix.inc b/test/functional/pdo_sqlsrv/skipif_unix.inc similarity index 100% rename from test/pdo_sqlsrv/skipif_unix.inc rename to test/functional/pdo_sqlsrv/skipif_unix.inc diff --git a/test/functional/pdo_sqlsrv/test_encoding_UTF8_emulate_prepare.phpt b/test/functional/pdo_sqlsrv/test_encoding_UTF8_emulate_prepare.phpt new file mode 100644 index 00000000..1d3d7eff --- /dev/null +++ b/test/functional/pdo_sqlsrv/test_encoding_UTF8_emulate_prepare.phpt @@ -0,0 +1,113 @@ +--TEST-- +Test UTF8 Encoding with emulate prepare +--SKIPIF-- + +--FILE-- +setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); + $conn->setAttribute( PDO::SQLSRV_ATTR_ENCODING, PDO::SQLSRV_ENCODING_SYSTEM); + $stmt1 = $conn->query("IF OBJECT_ID('Table_UTF', 'U') IS NOT NULL DROP TABLE [Table_UTF]"); + $stmt1 = null; + + $stmt2 = $conn->query("CREATE TABLE [Table_UTF] ([c1_int] int PRIMARY KEY, [c2_char] char(512))"); + $stmt2 = null; + + $stmt3 = $conn->prepare("INSERT INTO [Table_UTF] (c1_int, c2_char) VALUES (:var1, :var2)"); + $stmt3->setAttribute(constant('PDO::SQLSRV_ATTR_ENCODING'), PDO::SQLSRV_ENCODING_UTF8); + $stmt3->bindParam(2, $inValue1); + $stmt3->bindValue(1, 1); + $stmt3->execute(); + $stmt3->bindValue(1, 2); + $stmt3->execute(); + $stmt3->bindValue(1, 3); + $stmt3->execute(); + $stmt3->bindValue(1, 4); + $stmt3->execute(); + $stmt3->bindValue(1, 5); + $stmt3->execute(); + $stmt3 = null; + + $stmt4 = $conn->prepare("SELECT * FROM [Table_UTF]"); + $stmt4->setAttribute(constant('PDO::SQLSRV_ATTR_ENCODING'), PDO::SQLSRV_ENCODING_UTF8); + $outValue1 = null; + $stmt4->execute(); + $row1 = $stmt4->fetch(); + $count1 = count($row1); + echo ("Number of rows: $count1\n"); + $v0 = $row1[0]; + $outValue1 = $row1[1]; + if (strncmp($inValue1, $outValue1, $inValueLen) == 0) { + echo "outValue is the same as inValue.\n"; + } + $outValue1 = null; + + $value1 = $stmt4->fetchcolumn(1); + $outValue1 = $value1; + if (strncmp($inValue1, $outValue1, $inValueLen) == 0) { + echo "outValue is the same as inValue.\n"; + } + $outvalue1 = null; + + $value2 = $stmt4->fetchColumn(1); + $outValue1 = $value2; + if (strncmp($inValue1, $outValue1, $inValueLen) == 0) { + echo "outValue is the same as inValue.\n"; + } + $outValue1 = null; + + $value3 = $stmt4->fetchColumn(1); + $outValue1 = $value3; + if (strncmp($inValue1, $outValue1, $inValueLen) == 0) { + echo "outValue is the same as inValue.\n"; + } + $outValue1 = null; + + $value4 = $stmt4->fetchColumn(1); + $outValue1 = $value4; + if (strncmp($inValue1, $outValue1, $inValueLen) == 0) { + echo "outValue is the same as inValue.\n"; + } + $stmt4 = null; + + $stmt5 = $conn->prepare( "SELECT ? = c2_char FROM [Table_UTF]", array(PDO::ATTR_EMULATE_PREPARES => true) ); + $stmt5->setAttribute(constant('PDO::SQLSRV_ATTR_ENCODING'), PDO::SQLSRV_ENCODING_UTF8); + $outValue1 = "hello"; + $stmt5->bindParam( 1, $outValue1, PDO::PARAM_STR, 1024); + $stmt5->execute(); + if (strncmp($inValue1, $outValue1, $inValueLen) == 0) { + echo "outValue is the same as inValue.\n"; + } else { + echo "outValue is $outValue1\n"; + } + $stmt5 = null; + + $stmt6 = $conn->query("DROP TABLE [Table_UTF]"); + $stmt6 = null; + + $conn = null; +} +catch (PDOexception $e){ + print_r( ($e->errorInfo)[2] ); + echo "\n"; +} +?> +--EXPECT-- +Number of rows: 4 +outValue is the same as inValue. +outValue is the same as inValue. +outValue is the same as inValue. +outValue is the same as inValue. +outValue is the same as inValue. +Statement with emulate prepare on does not support output or input_output parameters. + + + + diff --git a/test/setup/168256.dat b/test/functional/setup/168256.dat similarity index 100% rename from test/setup/168256.dat rename to test/functional/setup/168256.dat diff --git a/test/setup/168256.fmt b/test/functional/setup/168256.fmt similarity index 98% rename from test/setup/168256.fmt rename to test/functional/setup/168256.fmt index f5b3f474..69786dfd 100644 --- a/test/setup/168256.fmt +++ b/test/functional/setup/168256.fmt @@ -1,13 +1,13 @@ -9.0 -11 -1 SQLINT 0 4 "" 1 SalesOrderID "" -2 SQLINT 0 4 "" 2 SalesOrderDetailID "" -3 SQLNCHAR 2 50 "" 3 CarrierTrackingNumber Latin1_General_CS_AS -4 SQLSMALLINT 0 2 "" 4 OrderQty "" -5 SQLINT 0 4 "" 5 ProductID "" -6 SQLINT 0 4 "" 6 SpecialOfferID "" -7 SQLMONEY 0 8 "" 7 UnitPrice "" -8 SQLMONEY 0 8 "" 8 UnitPriceDiscount "" -9 SQLNUMERIC 1 19 "" 9 LineTotal "" -10 SQLUNIQUEID 1 16 "" 10 rowguid "" -11 SQLDATETIME 0 8 "" 11 ModifiedDate "" +9.0 +11 +1 SQLINT 0 4 "" 1 SalesOrderID "" +2 SQLINT 0 4 "" 2 SalesOrderDetailID "" +3 SQLNCHAR 2 50 "" 3 CarrierTrackingNumber Latin1_General_CS_AS +4 SQLSMALLINT 0 2 "" 4 OrderQty "" +5 SQLINT 0 4 "" 5 ProductID "" +6 SQLINT 0 4 "" 6 SpecialOfferID "" +7 SQLMONEY 0 8 "" 7 UnitPrice "" +8 SQLMONEY 0 8 "" 8 UnitPriceDiscount "" +9 SQLNUMERIC 1 19 "" 9 LineTotal "" +10 SQLUNIQUEID 1 16 "" 10 rowguid "" +11 SQLDATETIME 0 8 "" 11 ModifiedDate "" diff --git a/test/setup/168256.sql b/test/functional/setup/168256.sql similarity index 96% rename from test/setup/168256.sql rename to test/functional/setup/168256.sql index 0b2048c9..82dbe487 100644 --- a/test/setup/168256.sql +++ b/test/functional/setup/168256.sql @@ -1,24 +1,24 @@ -USE $(dbname) -GO - -IF EXISTS (SELECT * FROM sys.objects -WHERE object_id = OBJECT_ID(N'[dbo].[168256]') AND type in (N'U')) - -BEGIN -DROP TABLE [168256] -END -GO - -CREATE TABLE [168256] ( - [SalesOrderID] [int] NOT NULL, - [SalesOrderDetailID] [int] IDENTITY(1,1) NOT NULL, - [CarrierTrackingNumber] [nvarchar](25) NULL, - [OrderQty] [smallint] NOT NULL, - [ProductID] [int] NOT NULL, - [SpecialOfferID] [int] NOT NULL, - [UnitPrice] [money] NOT NULL, - [UnitPriceDiscount] [money] NOT NULL DEFAULT ((0.0)), - [LineTotal] AS (isnull(([UnitPrice]*((1.0)-[UnitPriceDiscount]))*[OrderQty],(0.0))), - [rowguid] [uniqueidentifier] ROWGUIDCOL NOT NULL DEFAULT (newid()), - [ModifiedDate] [datetime] NOT NULL DEFAULT (getdate())); -GO +USE $(dbname) +GO + +IF EXISTS (SELECT * FROM sys.objects +WHERE object_id = OBJECT_ID(N'[dbo].[168256]') AND type in (N'U')) + +BEGIN +DROP TABLE [168256] +END +GO + +CREATE TABLE [168256] ( + [SalesOrderID] [int] NOT NULL, + [SalesOrderDetailID] [int] IDENTITY(1,1) NOT NULL, + [CarrierTrackingNumber] [nvarchar](25) NULL, + [OrderQty] [smallint] NOT NULL, + [ProductID] [int] NOT NULL, + [SpecialOfferID] [int] NOT NULL, + [UnitPrice] [money] NOT NULL, + [UnitPriceDiscount] [money] NOT NULL DEFAULT ((0.0)), + [LineTotal] AS (isnull(([UnitPrice]*((1.0)-[UnitPriceDiscount]))*[OrderQty],(0.0))), + [rowguid] [uniqueidentifier] ROWGUIDCOL NOT NULL DEFAULT (newid()), + [ModifiedDate] [datetime] NOT NULL DEFAULT (getdate())); +GO diff --git a/test/setup/cd_info.dat b/test/functional/setup/cd_info.dat similarity index 100% rename from test/setup/cd_info.dat rename to test/functional/setup/cd_info.dat diff --git a/test/setup/cd_info.fmt b/test/functional/setup/cd_info.fmt similarity index 98% rename from test/setup/cd_info.fmt rename to test/functional/setup/cd_info.fmt index 7e0171de..df277bb9 100644 --- a/test/setup/cd_info.fmt +++ b/test/functional/setup/cd_info.fmt @@ -1,12 +1,12 @@ -9.0 -10 -1 SQLCHAR 2 10 "" 1 asin SQL_Latin1_General_CP1_CI_AS -2 SQLCHAR 2 12 "" 2 upc SQL_Latin1_General_CP1_CI_AS -3 SQLCHAR 2 50 "" 3 title SQL_Latin1_General_CP1_CI_AS -4 SQLCHAR 2 50 "" 4 artist SQL_Latin1_General_CP1_CI_AS -5 SQLCHAR 2 12 "" 5 rel_date SQL_Latin1_General_CP1_CI_AS -6 SQLCHAR 2 50 "" 6 label SQL_Latin1_General_CP1_CI_AS -7 SQLCHAR 2 500 "" 7 image SQL_Latin1_General_CP1_CI_AS -8 SQLCHAR 2 500 "" 8 med_image SQL_Latin1_General_CP1_CI_AS -9 SQLCHAR 8 0 "" 9 review1 SQL_Latin1_General_CP1_CI_AS -10 SQLCHAR 8 0 "" 10 review2 SQL_Latin1_General_CP1_CI_AS +9.0 +10 +1 SQLCHAR 2 10 "" 1 asin SQL_Latin1_General_CP1_CI_AS +2 SQLCHAR 2 12 "" 2 upc SQL_Latin1_General_CP1_CI_AS +3 SQLCHAR 2 50 "" 3 title SQL_Latin1_General_CP1_CI_AS +4 SQLCHAR 2 50 "" 4 artist SQL_Latin1_General_CP1_CI_AS +5 SQLCHAR 2 12 "" 5 rel_date SQL_Latin1_General_CP1_CI_AS +6 SQLCHAR 2 50 "" 6 label SQL_Latin1_General_CP1_CI_AS +7 SQLCHAR 2 500 "" 7 image SQL_Latin1_General_CP1_CI_AS +8 SQLCHAR 2 500 "" 8 med_image SQL_Latin1_General_CP1_CI_AS +9 SQLCHAR 8 0 "" 9 review1 SQL_Latin1_General_CP1_CI_AS +10 SQLCHAR 8 0 "" 10 review2 SQL_Latin1_General_CP1_CI_AS diff --git a/test/setup/cd_info.sql b/test/functional/setup/cd_info.sql similarity index 94% rename from test/setup/cd_info.sql rename to test/functional/setup/cd_info.sql index 064f83d9..40d3bb04 100644 --- a/test/setup/cd_info.sql +++ b/test/functional/setup/cd_info.sql @@ -1,47 +1,47 @@ -USE $(dbname) -GO - -IF EXISTS (SELECT * FROM sys.objects -WHERE object_id = OBJECT_ID(N'[dbo].[tracks]') AND type in (N'U')) - -BEGIN -ALTER TABLE $(dbname)..[tracks] DROP CONSTRAINT [FK__tracks__asin__7F60ED59] -END - -GO - -IF EXISTS (SELECT * FROM sys.objects -WHERE object_id = OBJECT_ID(N'[dbo].[cd_info]') AND type in (N'U')) - -BEGIN -DROP TABLE [cd_info] -END - -GO - -/****** Object: Table [dbo].[cd_info] Script Date: 09/26/2007 11:26:52 ******/ -SET ANSI_NULLS ON -GO -SET QUOTED_IDENTIFIER ON -GO -SET ANSI_PADDING ON -GO -CREATE TABLE [dbo].[cd_info]( - [asin] [char](10) NOT NULL, - [upc] [char](12) NULL, - [title] [varchar](50) NULL, - [artist] [varchar](50) NULL, - [rel_date] [varchar](12) NOT NULL CONSTRAINT [DF_cd_info_rel_date] DEFAULT ((0)), - [label] [varchar](50) NULL, - [image] [varchar](500) NULL, - [med_image] [varchar](500) NULL, - [review1] [varchar](max) NULL, - [review2] [varchar](max) NULL, - CONSTRAINT [PK_cd_info] PRIMARY KEY CLUSTERED -( - [asin] ASC -)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) -) - -GO +USE $(dbname) +GO + +IF EXISTS (SELECT * FROM sys.objects +WHERE object_id = OBJECT_ID(N'[dbo].[tracks]') AND type in (N'U')) + +BEGIN +ALTER TABLE $(dbname)..[tracks] DROP CONSTRAINT [FK__tracks__asin__7F60ED59] +END + +GO + +IF EXISTS (SELECT * FROM sys.objects +WHERE object_id = OBJECT_ID(N'[dbo].[cd_info]') AND type in (N'U')) + +BEGIN +DROP TABLE [cd_info] +END + +GO + +/****** Object: Table [dbo].[cd_info] Script Date: 09/26/2007 11:26:52 ******/ +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO +SET ANSI_PADDING ON +GO +CREATE TABLE [dbo].[cd_info]( + [asin] [char](10) NOT NULL, + [upc] [char](12) NULL, + [title] [varchar](50) NULL, + [artist] [varchar](50) NULL, + [rel_date] [varchar](12) NOT NULL CONSTRAINT [DF_cd_info_rel_date] DEFAULT ((0)), + [label] [varchar](50) NULL, + [image] [varchar](500) NULL, + [med_image] [varchar](500) NULL, + [review1] [varchar](max) NULL, + [review2] [varchar](max) NULL, + CONSTRAINT [PK_cd_info] PRIMARY KEY CLUSTERED +( + [asin] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) +) + +GO SET ANSI_PADDING OFF \ No newline at end of file diff --git a/test/setup/cleanup_dbs.py b/test/functional/setup/cleanup_dbs.py similarity index 100% rename from test/setup/cleanup_dbs.py rename to test/functional/setup/cleanup_dbs.py diff --git a/test/setup/create_db.sql b/test/functional/setup/create_db.sql similarity index 92% rename from test/setup/create_db.sql rename to test/functional/setup/create_db.sql index e82c21ad..d8dee7ac 100644 --- a/test/setup/create_db.sql +++ b/test/functional/setup/create_db.sql @@ -1,13 +1,13 @@ -USE [master] -GO - -IF EXISTS (SELECT name FROM sys.databases WHERE name = '$(dbname)' ) - -BEGIN -DROP DATABASE $(dbname) -END - -CREATE DATABASE $(dbname) - -GO - +USE [master] +GO + +IF EXISTS (SELECT name FROM sys.databases WHERE name = '$(dbname)' ) + +BEGIN +DROP DATABASE $(dbname) +END + +CREATE DATABASE $(dbname) + +GO + diff --git a/test/setup/drop_db.sql b/test/functional/setup/drop_db.sql similarity index 93% rename from test/setup/drop_db.sql rename to test/functional/setup/drop_db.sql index 465b25b7..d45743f5 100644 --- a/test/setup/drop_db.sql +++ b/test/functional/setup/drop_db.sql @@ -1,8 +1,8 @@ -USE [master] -GO - -IF EXISTS (SELECT name FROM sys.databases WHERE name = '$(dbname)' ) - -BEGIN -DROP DATABASE $(dbname) -END +USE [master] +GO + +IF EXISTS (SELECT name FROM sys.databases WHERE name = '$(dbname)' ) + +BEGIN +DROP DATABASE $(dbname) +END diff --git a/test/setup/exec_sql_scripts.py b/test/functional/setup/exec_sql_scripts.py similarity index 100% rename from test/setup/exec_sql_scripts.py rename to test/functional/setup/exec_sql_scripts.py diff --git a/test/setup/setup_dbs.py b/test/functional/setup/setup_dbs.py similarity index 100% rename from test/setup/setup_dbs.py rename to test/functional/setup/setup_dbs.py diff --git a/test/setup/test_password.sql b/test/functional/setup/test_password.sql similarity index 96% rename from test/setup/test_password.sql rename to test/functional/setup/test_password.sql index da37f970..683556c8 100644 --- a/test/setup/test_password.sql +++ b/test/functional/setup/test_password.sql @@ -1,31 +1,31 @@ ---first, create new logins (user id / password pair) if not yet created -USE master; -GO - -IF NOT EXISTS (SELECT name FROM master..syslogins WHERE name = 'test_password') -BEGIN - CREATE LOGIN test_password WITH PASSWORD='! ;4triou'; -END -GO - -IF NOT EXISTS (SELECT name FROM master..syslogins WHERE name = 'test_password2') -BEGIN - CREATE LOGIN test_password2 WITH PASSWORD='!} ;4triou'; -END -GO - -IF NOT EXISTS (SELECT name FROM master..syslogins WHERE name = 'test_password3') -BEGIN - CREATE LOGIN test_password3 WITH PASSWORD='! ;4triou}'; -END -GO - ---the following users will be granted access to the test database -USE $(dbname); -GO - -CREATE USER test_password FROM LOGIN test_password; -CREATE USER test_password2 FROM LOGIN test_password2; -CREATE USER test_password3 FROM LOGIN test_password3; -GO - +--first, create new logins (user id / password pair) if not yet created +USE master; +GO + +IF NOT EXISTS (SELECT name FROM master..syslogins WHERE name = 'test_password') +BEGIN + CREATE LOGIN test_password WITH PASSWORD='! ;4triou'; +END +GO + +IF NOT EXISTS (SELECT name FROM master..syslogins WHERE name = 'test_password2') +BEGIN + CREATE LOGIN test_password2 WITH PASSWORD='!} ;4triou'; +END +GO + +IF NOT EXISTS (SELECT name FROM master..syslogins WHERE name = 'test_password3') +BEGIN + CREATE LOGIN test_password3 WITH PASSWORD='! ;4triou}'; +END +GO + +--the following users will be granted access to the test database +USE $(dbname); +GO + +CREATE USER test_password FROM LOGIN test_password; +CREATE USER test_password2 FROM LOGIN test_password2; +CREATE USER test_password3 FROM LOGIN test_password3; +GO + diff --git a/test/setup/test_streamable_types.dat b/test/functional/setup/test_streamable_types.dat similarity index 100% rename from test/setup/test_streamable_types.dat rename to test/functional/setup/test_streamable_types.dat diff --git a/test/setup/test_streamable_types.fmt b/test/functional/setup/test_streamable_types.fmt similarity index 98% rename from test/setup/test_streamable_types.fmt rename to test/functional/setup/test_streamable_types.fmt index 6e34b824..4a21d438 100644 --- a/test/setup/test_streamable_types.fmt +++ b/test/functional/setup/test_streamable_types.fmt @@ -1,15 +1,15 @@ -9.0 -13 -1 SQLCHAR 8 0 "" 1 varchar_type SQL_Latin1_General_CP1_CI_AS -2 SQLNCHAR 8 0 "" 2 nvarchar_type SQL_Latin1_General_CP1_CI_AS -3 SQLBINARY 8 0 "" 3 varbinary_type "" -4 SQLCHAR 4 0 "" 4 text_type SQL_Latin1_General_CP1_CI_AS -5 SQLNCHAR 4 0 "" 5 ntext_type SQL_Latin1_General_CP1_CI_AS -6 SQLIMAGE 4 0 "" 6 image_type "" -7 SQLNCHAR 8 0 "" 7 xml_type "" -8 SQLCHAR 2 256 "" 8 char_short_type SQL_Latin1_General_CP1_CI_AS -9 SQLCHAR 2 256 "" 9 varchar_short_type SQL_Latin1_General_CP1_CI_AS -10 SQLNCHAR 2 512 "" 10 nchar_short_type SQL_Latin1_General_CP1_CI_AS -11 SQLNCHAR 2 512 "" 11 nvarchar_short_type SQL_Latin1_General_CP1_CI_AS -12 SQLBINARY 2 256 "" 12 binary_short_type "" -13 SQLBINARY 2 256 "" 13 varbinary_short_type "" +9.0 +13 +1 SQLCHAR 8 0 "" 1 varchar_type SQL_Latin1_General_CP1_CI_AS +2 SQLNCHAR 8 0 "" 2 nvarchar_type SQL_Latin1_General_CP1_CI_AS +3 SQLBINARY 8 0 "" 3 varbinary_type "" +4 SQLCHAR 4 0 "" 4 text_type SQL_Latin1_General_CP1_CI_AS +5 SQLNCHAR 4 0 "" 5 ntext_type SQL_Latin1_General_CP1_CI_AS +6 SQLIMAGE 4 0 "" 6 image_type "" +7 SQLNCHAR 8 0 "" 7 xml_type "" +8 SQLCHAR 2 256 "" 8 char_short_type SQL_Latin1_General_CP1_CI_AS +9 SQLCHAR 2 256 "" 9 varchar_short_type SQL_Latin1_General_CP1_CI_AS +10 SQLNCHAR 2 512 "" 10 nchar_short_type SQL_Latin1_General_CP1_CI_AS +11 SQLNCHAR 2 512 "" 11 nvarchar_short_type SQL_Latin1_General_CP1_CI_AS +12 SQLBINARY 2 256 "" 12 binary_short_type "" +13 SQLBINARY 2 256 "" 13 varbinary_short_type "" diff --git a/test/setup/test_types.sql b/test/functional/setup/test_types.sql similarity index 97% rename from test/setup/test_types.sql rename to test/functional/setup/test_types.sql index 75e9c552..eef114de 100644 --- a/test/setup/test_types.sql +++ b/test/functional/setup/test_types.sql @@ -1,67 +1,67 @@ -USE $(dbname) -GO - -CREATE TABLE [test_types] ([bigint_type] BIGINT null, - [int_type] INT null, - [smallint_type] SMALLINT null, - [tinyint_type] TINYINT null, - [bit_type] BIT null, - [decimal_type] DECIMAL(38,0) null, - [money_type] MONEY null, - [smallmoney_type] SMALLMONEY null, - [float_type] FLOAT(53) null, - [real_type] REAL null, - [datetime_type] DATETIME null, - [smalldatetime_type] SMALLDATETIME null ); -GO - --- maximum test -INSERT INTO $(dbname)..[test_types] (bigint_type, int_type, smallint_type, tinyint_type, bit_type, decimal_type, datetime_type, money_type, smallmoney_type, float_type, real_type) - VALUES (9223372036854775807, 2147483647, 32767, 255, 1, 9999999999999999999999999999999999999, '12/12/1968 16:20', 922337203685477.5807, 214748.3647, 1.79E+308, 1.18E-38 ) --- minimum test -INSERT INTO $(dbname)..[test_types] (bigint_type, int_type, smallint_type, tinyint_type, bit_type, decimal_type, datetime_type, money_type, smallmoney_type, float_type, real_type) - VALUES (-9223372036854775808, -2147483648, -32768, 0, 0, -10000000000000000000000000000000000001,'12/12/1968 16:20', -922337203685477.5808, -214748.3648, -1.79E+308, -1.18E-38 ) --- zero test -INSERT INTO $(dbname)..[test_types] (bigint_type, int_type, smallint_type, tinyint_type, bit_type, decimal_type, datetime_type, money_type, smallmoney_type, float_type, real_type) - VALUES (0, 0, 0, 0, 0, 0, '12/12/1968 16:20', 0, 0, 0, 0) - -GO - -CREATE TABLE [test_streamable_types] ( - [varchar_type] VARCHAR(MAX) null, - [nvarchar_type] NVARCHAR(MAX) null, - [varbinary_type] VARBINARY(MAX) null, - [text_type] TEXT null, - [ntext_type] NTEXT null, - [image_type] IMAGE null, - [xml_type] XML null, - [char_short_type] CHAR(256) null, - [varchar_short_type] VARCHAR(256) null, - [nchar_short_type] NCHAR(256) null, - [nvarchar_short_type] NVARCHAR(256) null, - [binary_short_type] BINARY(256) null, - [varbinary_short_type] VARBINARY(256) null ); -GO - -CREATE TABLE [155671] ([cat_id] [int] IDENTITY (1,1) NOT NULL, [cat_title] [varchar](50) NOT NULL, [cat_order][int] NOT NULL) ON [PRIMARY]; -GO - -CREATE TABLE [159137] ([xml_type][xml] null) ON [PRIMARY]; -GO - -IF EXISTS ( SELECT * - FROM sys.objects - WHERE object_id = OBJECT_ID(N'test_out') - AND type IN ( N'P', N'PC' ) ) -BEGIN -DROP proc test_out -END -GO - -create proc test_out @p1 integer, @p2 integer, @p3 integer output -as -begin - select @p3 = @p1 + @p2 - print @p3 -end -go +USE $(dbname) +GO + +CREATE TABLE [test_types] ([bigint_type] BIGINT null, + [int_type] INT null, + [smallint_type] SMALLINT null, + [tinyint_type] TINYINT null, + [bit_type] BIT null, + [decimal_type] DECIMAL(38,0) null, + [money_type] MONEY null, + [smallmoney_type] SMALLMONEY null, + [float_type] FLOAT(53) null, + [real_type] REAL null, + [datetime_type] DATETIME null, + [smalldatetime_type] SMALLDATETIME null ); +GO + +-- maximum test +INSERT INTO $(dbname)..[test_types] (bigint_type, int_type, smallint_type, tinyint_type, bit_type, decimal_type, datetime_type, money_type, smallmoney_type, float_type, real_type) + VALUES (9223372036854775807, 2147483647, 32767, 255, 1, 9999999999999999999999999999999999999, '12/12/1968 16:20', 922337203685477.5807, 214748.3647, 1.79E+308, 1.18E-38 ) +-- minimum test +INSERT INTO $(dbname)..[test_types] (bigint_type, int_type, smallint_type, tinyint_type, bit_type, decimal_type, datetime_type, money_type, smallmoney_type, float_type, real_type) + VALUES (-9223372036854775808, -2147483648, -32768, 0, 0, -10000000000000000000000000000000000001,'12/12/1968 16:20', -922337203685477.5808, -214748.3648, -1.79E+308, -1.18E-38 ) +-- zero test +INSERT INTO $(dbname)..[test_types] (bigint_type, int_type, smallint_type, tinyint_type, bit_type, decimal_type, datetime_type, money_type, smallmoney_type, float_type, real_type) + VALUES (0, 0, 0, 0, 0, 0, '12/12/1968 16:20', 0, 0, 0, 0) + +GO + +CREATE TABLE [test_streamable_types] ( + [varchar_type] VARCHAR(MAX) null, + [nvarchar_type] NVARCHAR(MAX) null, + [varbinary_type] VARBINARY(MAX) null, + [text_type] TEXT null, + [ntext_type] NTEXT null, + [image_type] IMAGE null, + [xml_type] XML null, + [char_short_type] CHAR(256) null, + [varchar_short_type] VARCHAR(256) null, + [nchar_short_type] NCHAR(256) null, + [nvarchar_short_type] NVARCHAR(256) null, + [binary_short_type] BINARY(256) null, + [varbinary_short_type] VARBINARY(256) null ); +GO + +CREATE TABLE [155671] ([cat_id] [int] IDENTITY (1,1) NOT NULL, [cat_title] [varchar](50) NOT NULL, [cat_order][int] NOT NULL) ON [PRIMARY]; +GO + +CREATE TABLE [159137] ([xml_type][xml] null) ON [PRIMARY]; +GO + +IF EXISTS ( SELECT * + FROM sys.objects + WHERE object_id = OBJECT_ID(N'test_out') + AND type IN ( N'P', N'PC' ) ) +BEGIN +DROP proc test_out +END +GO + +create proc test_out @p1 integer, @p2 integer, @p3 integer output +as +begin + select @p3 = @p1 + @p2 + print @p3 +end +go diff --git a/test/setup/tracks.dat b/test/functional/setup/tracks.dat similarity index 100% rename from test/setup/tracks.dat rename to test/functional/setup/tracks.dat diff --git a/test/setup/tracks.fmt b/test/functional/setup/tracks.fmt similarity index 97% rename from test/setup/tracks.fmt rename to test/functional/setup/tracks.fmt index 1c925160..7186668a 100644 --- a/test/setup/tracks.fmt +++ b/test/functional/setup/tracks.fmt @@ -1,4 +1,4 @@ -9.0 -2 -1 SQLCHAR 2 100 "" 1 track SQL_Latin1_General_CP1_CI_AS -2 SQLCHAR 2 10 "" 2 asin SQL_Latin1_General_CP1_CI_AS +9.0 +2 +1 SQLCHAR 2 100 "" 1 track SQL_Latin1_General_CP1_CI_AS +2 SQLCHAR 2 10 "" 2 asin SQL_Latin1_General_CP1_CI_AS diff --git a/test/setup/tracks.sql b/test/functional/setup/tracks.sql similarity index 94% rename from test/setup/tracks.sql rename to test/functional/setup/tracks.sql index 63e73acd..2ba3b793 100644 --- a/test/setup/tracks.sql +++ b/test/functional/setup/tracks.sql @@ -1,32 +1,32 @@ -USE $(dbname) -GO - -IF EXISTS (SELECT * FROM sys.objects -WHERE object_id = OBJECT_ID(N'[dbo].[tracks]') AND type in (N'U')) - -BEGIN -DROP TABLE [tracks] -END -GO - -/****** Object: Table [dbo].[tracks] Script Date: 09/26/2007 11:33:41 ******/ -SET ANSI_NULLS ON -GO -SET QUOTED_IDENTIFIER ON -GO -SET ANSI_PADDING ON -GO -CREATE TABLE [dbo].[tracks]( - [track] [varchar](100) NULL, - [asin] [char](10) NOT NULL -) ON [PRIMARY] -GO - -SET ANSI_PADDING OFF -GO - -ALTER TABLE [dbo].[tracks] WITH NOCHECK ADD CONSTRAINT [FK__tracks__asin__7F60ED59] FOREIGN KEY([asin]) -REFERENCES [dbo].[cd_info] ([asin]) -GO - +USE $(dbname) +GO + +IF EXISTS (SELECT * FROM sys.objects +WHERE object_id = OBJECT_ID(N'[dbo].[tracks]') AND type in (N'U')) + +BEGIN +DROP TABLE [tracks] +END +GO + +/****** Object: Table [dbo].[tracks] Script Date: 09/26/2007 11:33:41 ******/ +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO +SET ANSI_PADDING ON +GO +CREATE TABLE [dbo].[tracks]( + [track] [varchar](100) NULL, + [asin] [char](10) NOT NULL +) ON [PRIMARY] +GO + +SET ANSI_PADDING OFF +GO + +ALTER TABLE [dbo].[tracks] WITH NOCHECK ADD CONSTRAINT [FK__tracks__asin__7F60ED59] FOREIGN KEY([asin]) +REFERENCES [dbo].[cd_info] ([asin]) +GO + ALTER TABLE [dbo].[tracks] CHECK CONSTRAINT [FK__tracks__asin__7F60ED59] \ No newline at end of file diff --git a/test/setup/xml.dat b/test/functional/setup/xml.dat similarity index 100% rename from test/setup/xml.dat rename to test/functional/setup/xml.dat diff --git a/test/setup/xml.fmt b/test/functional/setup/xml.fmt similarity index 97% rename from test/setup/xml.fmt rename to test/functional/setup/xml.fmt index 12ce6baa..3a4e86f5 100644 --- a/test/setup/xml.fmt +++ b/test/functional/setup/xml.fmt @@ -1,3 +1,3 @@ -9.0 -1 -1 SQLBINARY 8 0 "" 1 xml_type "" +9.0 +1 +1 SQLBINARY 8 0 "" 1 xml_type "" diff --git a/test/sqlsrv/0013.phpt b/test/functional/sqlsrv/0013.phpt similarity index 100% rename from test/sqlsrv/0013.phpt rename to test/functional/sqlsrv/0013.phpt diff --git a/test/sqlsrv/0020.phpt b/test/functional/sqlsrv/0020.phpt similarity index 100% rename from test/sqlsrv/0020.phpt rename to test/functional/sqlsrv/0020.phpt diff --git a/test/sqlsrv/0022.phpt b/test/functional/sqlsrv/0022.phpt similarity index 100% rename from test/sqlsrv/0022.phpt rename to test/functional/sqlsrv/0022.phpt diff --git a/test/sqlsrv/0052.phpt b/test/functional/sqlsrv/0052.phpt similarity index 100% rename from test/sqlsrv/0052.phpt rename to test/functional/sqlsrv/0052.phpt diff --git a/test/sqlsrv/0053.phpt b/test/functional/sqlsrv/0053.phpt similarity index 100% rename from test/sqlsrv/0053.phpt rename to test/functional/sqlsrv/0053.phpt diff --git a/test/sqlsrv/0060.phpt b/test/functional/sqlsrv/0060.phpt similarity index 100% rename from test/sqlsrv/0060.phpt rename to test/functional/sqlsrv/0060.phpt diff --git a/test/sqlsrv/0061.phpt b/test/functional/sqlsrv/0061.phpt similarity index 100% rename from test/sqlsrv/0061.phpt rename to test/functional/sqlsrv/0061.phpt diff --git a/test/sqlsrv/0065.phpt b/test/functional/sqlsrv/0065.phpt similarity index 100% rename from test/sqlsrv/0065.phpt rename to test/functional/sqlsrv/0065.phpt diff --git a/test/sqlsrv/0066.phpt b/test/functional/sqlsrv/0066.phpt similarity index 100% rename from test/sqlsrv/0066.phpt rename to test/functional/sqlsrv/0066.phpt diff --git a/test/sqlsrv/0067.phpt b/test/functional/sqlsrv/0067.phpt similarity index 100% rename from test/sqlsrv/0067.phpt rename to test/functional/sqlsrv/0067.phpt diff --git a/test/sqlsrv/0068.phpt b/test/functional/sqlsrv/0068.phpt similarity index 100% rename from test/sqlsrv/0068.phpt rename to test/functional/sqlsrv/0068.phpt diff --git a/test/sqlsrv/0069.phpt b/test/functional/sqlsrv/0069.phpt similarity index 100% rename from test/sqlsrv/0069.phpt rename to test/functional/sqlsrv/0069.phpt diff --git a/test/sqlsrv/0072.phpt b/test/functional/sqlsrv/0072.phpt similarity index 100% rename from test/sqlsrv/0072.phpt rename to test/functional/sqlsrv/0072.phpt diff --git a/test/sqlsrv/0073.phpt b/test/functional/sqlsrv/0073.phpt similarity index 100% rename from test/sqlsrv/0073.phpt rename to test/functional/sqlsrv/0073.phpt diff --git a/test/sqlsrv/0074.phpt b/test/functional/sqlsrv/0074.phpt similarity index 100% rename from test/sqlsrv/0074.phpt rename to test/functional/sqlsrv/0074.phpt diff --git a/test/sqlsrv/0075.phpt b/test/functional/sqlsrv/0075.phpt similarity index 100% rename from test/sqlsrv/0075.phpt rename to test/functional/sqlsrv/0075.phpt diff --git a/test/sqlsrv/0076.phpt b/test/functional/sqlsrv/0076.phpt similarity index 100% rename from test/sqlsrv/0076.phpt rename to test/functional/sqlsrv/0076.phpt diff --git a/test/sqlsrv/0078.phpt b/test/functional/sqlsrv/0078.phpt similarity index 100% rename from test/sqlsrv/0078.phpt rename to test/functional/sqlsrv/0078.phpt diff --git a/test/sqlsrv/0079.phpt b/test/functional/sqlsrv/0079.phpt similarity index 100% rename from test/sqlsrv/0079.phpt rename to test/functional/sqlsrv/0079.phpt diff --git a/test/sqlsrv/53_0021.phpt b/test/functional/sqlsrv/53_0021.phpt similarity index 100% rename from test/sqlsrv/53_0021.phpt rename to test/functional/sqlsrv/53_0021.phpt diff --git a/test/sqlsrv/MsCommon.inc b/test/functional/sqlsrv/MsCommon.inc similarity index 98% rename from test/sqlsrv/MsCommon.inc rename to test/functional/sqlsrv/MsCommon.inc index ce6d83d4..e87e8018 100644 --- a/test/sqlsrv/MsCommon.inc +++ b/test/functional/sqlsrv/MsCommon.inc @@ -159,22 +159,6 @@ function Connect($options = array()) return ($conn); } -function ConnectSpecial($options = array()) -{ - require 'MsSetup.inc'; - - if (!isset($options['UID']) && !isset($options['uid'])) { - $options['UID'] = $uid; - } - if (!isset($options['pwd']) && !isset($options['PWD'])) { - $options['pwd'] = $pwd; - } - if (!isset($options['Database'])) { - $options['Database'] = $database; - } - return sqlsrv_connect($server, $options); -} - function GetTempTableName($table = '', $temporary = true) { // A temporary table name with the '#' prefix will be automatically diff --git a/test/sqlsrv/MsData.inc b/test/functional/sqlsrv/MsData.inc similarity index 100% rename from test/sqlsrv/MsData.inc rename to test/functional/sqlsrv/MsData.inc diff --git a/test/sqlsrv/MsData_UTF8.inc b/test/functional/sqlsrv/MsData_UTF8.inc similarity index 100% rename from test/sqlsrv/MsData_UTF8.inc rename to test/functional/sqlsrv/MsData_UTF8.inc diff --git a/test/sqlsrv/MsSetup.inc b/test/functional/sqlsrv/MsSetup.inc similarity index 100% rename from test/sqlsrv/MsSetup.inc rename to test/functional/sqlsrv/MsSetup.inc diff --git a/test/sqlsrv/TC11_Info.phpt b/test/functional/sqlsrv/TC11_Info.phpt similarity index 100% rename from test/sqlsrv/TC11_Info.phpt rename to test/functional/sqlsrv/TC11_Info.phpt diff --git a/test/sqlsrv/TC12_Setup.phpt b/test/functional/sqlsrv/TC12_Setup.phpt similarity index 100% rename from test/sqlsrv/TC12_Setup.phpt rename to test/functional/sqlsrv/TC12_Setup.phpt diff --git a/test/sqlsrv/TC21_Connection.phpt b/test/functional/sqlsrv/TC21_Connection.phpt similarity index 100% rename from test/sqlsrv/TC21_Connection.phpt rename to test/functional/sqlsrv/TC21_Connection.phpt diff --git a/test/sqlsrv/TC22_ClientInfo.phpt b/test/functional/sqlsrv/TC22_ClientInfo.phpt similarity index 100% rename from test/sqlsrv/TC22_ClientInfo.phpt rename to test/functional/sqlsrv/TC22_ClientInfo.phpt diff --git a/test/sqlsrv/TC23_ServerInfo.phpt b/test/functional/sqlsrv/TC23_ServerInfo.phpt similarity index 100% rename from test/sqlsrv/TC23_ServerInfo.phpt rename to test/functional/sqlsrv/TC23_ServerInfo.phpt diff --git a/test/sqlsrv/TC24_Close.phpt b/test/functional/sqlsrv/TC24_Close.phpt similarity index 100% rename from test/sqlsrv/TC24_Close.phpt rename to test/functional/sqlsrv/TC24_Close.phpt diff --git a/test/sqlsrv/TC31_SimpleQuery.phpt b/test/functional/sqlsrv/TC31_SimpleQuery.phpt similarity index 100% rename from test/sqlsrv/TC31_SimpleQuery.phpt rename to test/functional/sqlsrv/TC31_SimpleQuery.phpt diff --git a/test/sqlsrv/TC32_DeleteQuery.phpt b/test/functional/sqlsrv/TC32_DeleteQuery.phpt similarity index 100% rename from test/sqlsrv/TC32_DeleteQuery.phpt rename to test/functional/sqlsrv/TC32_DeleteQuery.phpt diff --git a/test/sqlsrv/TC33_ComplexQuery.phpt b/test/functional/sqlsrv/TC33_ComplexQuery.phpt similarity index 100% rename from test/sqlsrv/TC33_ComplexQuery.phpt rename to test/functional/sqlsrv/TC33_ComplexQuery.phpt diff --git a/test/sqlsrv/TC34_PrepAndExec.phpt b/test/functional/sqlsrv/TC34_PrepAndExec.phpt similarity index 100% rename from test/sqlsrv/TC34_PrepAndExec.phpt rename to test/functional/sqlsrv/TC34_PrepAndExec.phpt diff --git a/test/sqlsrv/TC35_Cancel.phpt b/test/functional/sqlsrv/TC35_Cancel.phpt similarity index 100% rename from test/sqlsrv/TC35_Cancel.phpt rename to test/functional/sqlsrv/TC35_Cancel.phpt diff --git a/test/sqlsrv/TC36_Close.phpt b/test/functional/sqlsrv/TC36_Close.phpt similarity index 100% rename from test/sqlsrv/TC36_Close.phpt rename to test/functional/sqlsrv/TC36_Close.phpt diff --git a/test/sqlsrv/TC37_QueryTimeout.phpt b/test/functional/sqlsrv/TC37_QueryTimeout.phpt similarity index 100% rename from test/sqlsrv/TC37_QueryTimeout.phpt rename to test/functional/sqlsrv/TC37_QueryTimeout.phpt diff --git a/test/sqlsrv/TC38_InvalidQuery.phpt b/test/functional/sqlsrv/TC38_InvalidQuery.phpt similarity index 100% rename from test/sqlsrv/TC38_InvalidQuery.phpt rename to test/functional/sqlsrv/TC38_InvalidQuery.phpt diff --git a/test/sqlsrv/TC39_Cursors.phpt b/test/functional/sqlsrv/TC39_Cursors.phpt similarity index 100% rename from test/sqlsrv/TC39_Cursors.phpt rename to test/functional/sqlsrv/TC39_Cursors.phpt diff --git a/test/sqlsrv/TC41_FetchMetadata.phpt b/test/functional/sqlsrv/TC41_FetchMetadata.phpt similarity index 100% rename from test/sqlsrv/TC41_FetchMetadata.phpt rename to test/functional/sqlsrv/TC41_FetchMetadata.phpt diff --git a/test/sqlsrv/TC42_FetchField.phpt b/test/functional/sqlsrv/TC42_FetchField.phpt similarity index 100% rename from test/sqlsrv/TC42_FetchField.phpt rename to test/functional/sqlsrv/TC42_FetchField.phpt diff --git a/test/sqlsrv/TC43_FetchData.phpt b/test/functional/sqlsrv/TC43_FetchData.phpt similarity index 100% rename from test/sqlsrv/TC43_FetchData.phpt rename to test/functional/sqlsrv/TC43_FetchData.phpt diff --git a/test/sqlsrv/TC44_FetchArray.phpt b/test/functional/sqlsrv/TC44_FetchArray.phpt similarity index 100% rename from test/sqlsrv/TC44_FetchArray.phpt rename to test/functional/sqlsrv/TC44_FetchArray.phpt diff --git a/test/sqlsrv/TC45_FetchObject.phpt b/test/functional/sqlsrv/TC45_FetchObject.phpt similarity index 100% rename from test/sqlsrv/TC45_FetchObject.phpt rename to test/functional/sqlsrv/TC45_FetchObject.phpt diff --git a/test/sqlsrv/TC46_FetchNextResult.phpt b/test/functional/sqlsrv/TC46_FetchNextResult.phpt similarity index 100% rename from test/sqlsrv/TC46_FetchNextResult.phpt rename to test/functional/sqlsrv/TC46_FetchNextResult.phpt diff --git a/test/sqlsrv/TC47_ParamQuery.phpt b/test/functional/sqlsrv/TC47_ParamQuery.phpt similarity index 100% rename from test/sqlsrv/TC47_ParamQuery.phpt rename to test/functional/sqlsrv/TC47_ParamQuery.phpt diff --git a/test/sqlsrv/TC48_FetchScrollable.phpt b/test/functional/sqlsrv/TC48_FetchScrollable.phpt similarity index 100% rename from test/sqlsrv/TC48_FetchScrollable.phpt rename to test/functional/sqlsrv/TC48_FetchScrollable.phpt diff --git a/test/sqlsrv/TC51_StreamRead.phpt b/test/functional/sqlsrv/TC51_StreamRead.phpt similarity index 100% rename from test/sqlsrv/TC51_StreamRead.phpt rename to test/functional/sqlsrv/TC51_StreamRead.phpt diff --git a/test/sqlsrv/TC52_StreamSend.phpt b/test/functional/sqlsrv/TC52_StreamSend.phpt similarity index 100% rename from test/sqlsrv/TC52_StreamSend.phpt rename to test/functional/sqlsrv/TC52_StreamSend.phpt diff --git a/test/sqlsrv/TC53_StreamCancel.phpt b/test/functional/sqlsrv/TC53_StreamCancel.phpt similarity index 100% rename from test/sqlsrv/TC53_StreamCancel.phpt rename to test/functional/sqlsrv/TC53_StreamCancel.phpt diff --git a/test/sqlsrv/TC54_StreamPrepared.phpt b/test/functional/sqlsrv/TC54_StreamPrepared.phpt similarity index 100% rename from test/sqlsrv/TC54_StreamPrepared.phpt rename to test/functional/sqlsrv/TC54_StreamPrepared.phpt diff --git a/test/sqlsrv/TC55_StreamScrollable.phpt b/test/functional/sqlsrv/TC55_StreamScrollable.phpt similarity index 100% rename from test/sqlsrv/TC55_StreamScrollable.phpt rename to test/functional/sqlsrv/TC55_StreamScrollable.phpt diff --git a/test/sqlsrv/TC61_TransactionExecution.phpt b/test/functional/sqlsrv/TC61_TransactionExecution.phpt similarity index 100% rename from test/sqlsrv/TC61_TransactionExecution.phpt rename to test/functional/sqlsrv/TC61_TransactionExecution.phpt diff --git a/test/sqlsrv/TC62_TransactionDisconnect.phpt b/test/functional/sqlsrv/TC62_TransactionDisconnect.phpt similarity index 100% rename from test/sqlsrv/TC62_TransactionDisconnect.phpt rename to test/functional/sqlsrv/TC62_TransactionDisconnect.phpt diff --git a/test/sqlsrv/TC63_TransactionBounds.phpt b/test/functional/sqlsrv/TC63_TransactionBounds.phpt similarity index 100% rename from test/sqlsrv/TC63_TransactionBounds.phpt rename to test/functional/sqlsrv/TC63_TransactionBounds.phpt diff --git a/test/sqlsrv/TC64_TransactionProc.phpt b/test/functional/sqlsrv/TC64_TransactionProc.phpt similarity index 100% rename from test/sqlsrv/TC64_TransactionProc.phpt rename to test/functional/sqlsrv/TC64_TransactionProc.phpt diff --git a/test/sqlsrv/TC71_StoredProc.phpt b/test/functional/sqlsrv/TC71_StoredProc.phpt similarity index 100% rename from test/sqlsrv/TC71_StoredProc.phpt rename to test/functional/sqlsrv/TC71_StoredProc.phpt diff --git a/test/sqlsrv/TC72_StoredFunc.phpt b/test/functional/sqlsrv/TC72_StoredFunc.phpt similarity index 100% rename from test/sqlsrv/TC72_StoredFunc.phpt rename to test/functional/sqlsrv/TC72_StoredFunc.phpt diff --git a/test/sqlsrv/TC73_ProcCall.phpt b/test/functional/sqlsrv/TC73_ProcCall.phpt similarity index 100% rename from test/sqlsrv/TC73_ProcCall.phpt rename to test/functional/sqlsrv/TC73_ProcCall.phpt diff --git a/test/sqlsrv/TC74_ProcQuery.phpt b/test/functional/sqlsrv/TC74_ProcQuery.phpt similarity index 100% rename from test/sqlsrv/TC74_ProcQuery.phpt rename to test/functional/sqlsrv/TC74_ProcQuery.phpt diff --git a/test/sqlsrv/TC75_ProcRoundtrip.phpt b/test/functional/sqlsrv/TC75_ProcRoundtrip.phpt similarity index 100% rename from test/sqlsrv/TC75_ProcRoundtrip.phpt rename to test/functional/sqlsrv/TC75_ProcRoundtrip.phpt diff --git a/test/sqlsrv/TC76_StoredProcNull.phpt b/test/functional/sqlsrv/TC76_StoredProcNull.phpt similarity index 100% rename from test/sqlsrv/TC76_StoredProcNull.phpt rename to test/functional/sqlsrv/TC76_StoredProcNull.phpt diff --git a/test/sqlsrv/TC78_RegressionVSTS611146.phpt b/test/functional/sqlsrv/TC78_RegressionVSTS611146.phpt similarity index 100% rename from test/sqlsrv/TC78_RegressionVSTS611146.phpt rename to test/functional/sqlsrv/TC78_RegressionVSTS611146.phpt diff --git a/test/sqlsrv/TC79_RegressionVSTS846501.phpt b/test/functional/sqlsrv/TC79_RegressionVSTS846501.phpt similarity index 100% rename from test/sqlsrv/TC79_RegressionVSTS846501.phpt rename to test/functional/sqlsrv/TC79_RegressionVSTS846501.phpt diff --git a/test/functional/sqlsrv/TC81_MemoryCheck.phpt b/test/functional/sqlsrv/TC81_MemoryCheck.phpt new file mode 100644 index 00000000..088e0bfb --- /dev/null +++ b/test/functional/sqlsrv/TC81_MemoryCheck.phpt @@ -0,0 +1,393 @@ +--TEST-- +Memory Leakage Test +--DESCRIPTION-- +Checks for memory leaks using memory_get_usage(). memory_get_usage() only tracks the memory that is allocated using +emalloc (which only allocate memory in the memory space allocated for the PHP process). +--ENV-- +PHPT_EXEC=true +--SKIPIF-- + +--FILE-- + ".($noRows1 + $noRows2)." rows.\n"); + + // The data added into the table has some UTF-8 characters in it. + // The fetch functions in the switch block below fail if we don't + // set the encoding to UTF-8. We can set the UTF-8 option elsewhere + // (in the options for sqlsrv_fetch for example) but it is easier + // to simply call ConnectUTF8(). + $conn1 = ConnectUTF8(); + SetUTF8Data(true); + + CreateTable($conn1, $tableName); + $noRowsInserted = InsertRows($conn1, $tableName, $noRows1); + + + // Calibration + // when fetching DateTime in the test, the DateTime PHP extension is used, and memory is allocated when this + // is extension is first used. Thus create a new DateTime and release it in the calibration step so it won't + // appear to be a leak in the testing step. + $date = new DateTime(); + unset($date); + $phpLeak = RunTest($noPasses, 0, $tableName, $conn1, false, true, 0); + Trace("\n0. Calibration\t - PHP memory leak: $phpLeak bytes\n"); + + // Preliminary Execution + Trace("\nPreliminary Execution:\n"); + $drvLeak = ExecTest(1, $noRows1, $startStep, $endStep, $tableName, $conn1, false, true, $phpLeak); + $totalLeak = 0; + + // Connection & Query + $start = Max($startStep, 1); + $end = Min($endStep, 3); + Trace("\nConnection & Direct Query Execution:\n"); + $leak = ExecTest($noPasses, $noRows1, $start, $end, $tableName, $conn1, false, true, $phpLeak) - $drvLeak; + if ($leak > $totalLeak) + { + $totalLeak = $leak; + } + + Trace("\nPrepared Query Execution:\n"); + $start = Max($startStep, 2); + $leak = ExecTest($noPasses, $noRows1, $start, $end, $tableName, $conn1, true, true, $phpLeak) - $drvLeak; + if ($leak > $totalLeak) + { + $totalLeak = $leak; + } + + // Execution + $noRows = $noRows1; + $start = Max($startStep, 4); + $end = Min($endStep, 7); + $prepared = false; + $release = false; + for ($j = 0; $j < 8; $j++) + { + switch ($j) + { + case 0: + $prepared = false; + $release = true; + break; + + case 1: + $prepared = true; + $release = true; + break; + + case 2: + $prepared = false; + $release = false; + break; + + case 3: + $prepared = true; + $release = false; + break; + + case 4: + InsertRows($conn1, $tableName, $noRows2); + $noRows = $noRows1 + $noRows2; + $prepared = false; + $release = false; + break; + + case 5: + $prepared = true; + $release = false; + break; + + case 6: + $prepared = false; + $release = true; + break; + + case 7: + $prepared = true; + $release = true; + break; + + default: + break; + + } + if ($prepared) + { + Trace("\nPrepared Query"); + } + else + { + Trace("\nDirect Query"); + } + if ($release) + { + Trace(" with statement release:\n"); + } + else + { + Trace(" without statement release:\n"); + } + $leak = ExecTest($noPasses, $noRows, $start, $end, $tableName, $conn1, $prepared, $release, $phpLeak) - $drvLeak; + if ($leak > $totalLeak) + { + $totalLeak = $leak; + } + } + + sqlsrv_close($conn1); + + $conn2 = Connect(); + DropTable($conn2, $tableName); + sqlsrv_close($conn2); + SetUTF8Data(false); + + if ($totalLeak > 0) + { + die("Memory leaks detected: $totalLeak bytes\n"); + } + + EndTest($testName); +} + +function GetConnection() +{ + include 'MsSetup.inc'; + $conn = sqlsrv_connect($server, $connectionOptions); + return ($conn); +} + +function ExecQuery($conn, $tableName, $prepared) +{ + $selectQuery = "SELECT * FROM [$tableName]"; + $stmt = null; + + if ($prepared) + { + $stmt = sqlsrv_prepare($conn, $selectQuery); + } + else + { + $stmt = sqlsrv_query($conn, $selectQuery); + } + if ($stmt === false) + { + FatalError("Query execution failed: $selectQuery"); + } + if ($prepared) + { + if (!sqlsrv_execute($stmt)) + { + FatalError("Query execution failed: $selectQuery"); + } + } + + return ($stmt); +} + +function ExecTest($noPasses, $noRows, $startStep, $endStep, $tableName, $conn, $prepared, $release, $phpLeak) +{ + $leak = 0; + + // Execution + for ($i = $startStep; $i <= $endStep; $i++) + { + switch ($i) + { + case 1: // connection only + Trace("$i. Connection\t - "); + break; + + case 2: // query with no release + Trace("$i. Query\t - "); + break; + + case 3: // query with release + Trace("$i. Query Freed\t - "); + break; + + case 4: // fetch + Trace("$i. Simple Fetch\t - "); + break; + + case 5: // fetch fields + Trace("$i. Fetch Fields\t - "); + break; + + case 6: // fetch array + Trace("$i. Fetch Array\t - "); + break; + + case 7: // fetch object + Trace("$i. Fetch Object\t - "); + break; + + default: + break; + } + $memLeak = RunTest($noPasses, $noRows, $tableName, $conn, $prepared, $release, $i) - $phpLeak; + Trace("Driver memory leak: $memLeak bytes\n"); + if ($memLeak > 0) + { + if ($leak <= 0) + { + $leak = $memLeak; + echo intval($leak) . " leaking\n"; + } + } + } + + return ($leak); +} + +function RunTest($noPasses, $noRows, $tableName, $conn, $prepared, $release, $mode) +{ + $memStart = memory_get_usage(); + for ($k = 1; $k <= $noPasses; $k++) + { + $conn2 = null; + $stmt = null; + $fld = null; + $rowCount = 0; + $numFields = 0; + $i = 0; + + switch ($mode) + { + case 0: // calibration + break; + + case 1: // no release + $conn2 = GetConnection(); + sqlsrv_close($conn2); + break; + + case 2: // query with no release + $stmt = ExecQuery($conn, $tableName, $prepared); + break; + + case 3: // query with release + $stmt = ExecQuery($conn, $tableName, $prepared); + sqlsrv_free_stmt($stmt); + break; + + case 4: // fetch + $stmt = ExecQuery($conn, $tableName, $prepared); + while (sqlsrv_fetch($stmt)) + { + $rowCount++; + } + if ($release) + { + sqlsrv_free_stmt($stmt); + } + if ($rowCount != $noRows) + { + die("$rowCount rows retrieved instead of $noRows\n"); + } + break; + + case 5: // fetch fields + $stmt = ExecQuery($conn, $tableName, $prepared); + $numFields = sqlsrv_num_fields($stmt); + while (sqlsrv_fetch($stmt)) + { + $rowCount++; + for ($i = 0; $i < $numFields; $i++) + { + $fld = sqlsrv_get_field($stmt, $i); + if ($fld === false) + { + die("Field $i of row $rowCount is missing"); + } + unset($fld); + } + } + if ($release) + { + sqlsrv_free_stmt($stmt); + } + if ($rowCount != $noRows) + { + die("$rowCount rows retrieved instead of $noRows\n"); + } + break; + + case 6: // fetch array + $stmt = ExecQuery($conn, $tableName, $prepared); + While (sqlsrv_fetch_array($stmt)) + { + $rowCount++; + } + if ($release) + { + sqlsrv_free_stmt($stmt); + } + if ($rowCount != $noRows) + { + die("$rowCount rows retrieved instead of $noRows\n"); + } + break; + + case 7: // fetch object + $stmt = ExecQuery($conn, $tableName, $prepared); + While (sqlsrv_fetch_object($stmt)) + { + $rowCount++; + } + if ($release) + { + sqlsrv_free_stmt($stmt); + } + if ($rowCount != $noRows) + { + die("$rowCount rows retrieved instead of $noRows\n"); + } + break; + + default: + break; + + } + // need unset to trigger the destruction of a zval with refcount of 0 + unset($conn2); + unset($stmt); + } + $memEnd = memory_get_usage(); + Trace( intval($memEnd) . " - " . intval($memStart) . "\n" ); + return ($memEnd - $memStart); +} + + +//-------------------------------------------------------------------- +// Repro +// +//-------------------------------------------------------------------- +function Repro() +{ + try + { + MemCheck(20, 10, 15, 1, 7); + } + catch (Exception $e) + { + echo $e->getMessage(); + } +} + +Repro(); + +?> +--EXPECT-- +Test "Memory Leakage Check" completed successfully. diff --git a/test/sqlsrv/TC82_StoredProcRS.phpt b/test/functional/sqlsrv/TC82_StoredProcRS.phpt similarity index 100% rename from test/sqlsrv/TC82_StoredProcRS.phpt rename to test/functional/sqlsrv/TC82_StoredProcRS.phpt diff --git a/test/sqlsrv/TC83_ComplexInsert.phpt b/test/functional/sqlsrv/TC83_ComplexInsert.phpt similarity index 100% rename from test/sqlsrv/TC83_ComplexInsert.phpt rename to test/functional/sqlsrv/TC83_ComplexInsert.phpt diff --git a/test/sqlsrv/TC84_LargeColumnName.phpt b/test/functional/sqlsrv/TC84_LargeColumnName.phpt similarity index 100% rename from test/sqlsrv/TC84_LargeColumnName.phpt rename to test/functional/sqlsrv/TC84_LargeColumnName.phpt diff --git a/test/sqlsrv/TC84_LargeColumnName_unicode.phpt b/test/functional/sqlsrv/TC84_LargeColumnName_unicode.phpt similarity index 100% rename from test/sqlsrv/TC84_LargeColumnName_unicode.phpt rename to test/functional/sqlsrv/TC84_LargeColumnName_unicode.phpt diff --git a/test/sqlsrv/TC84_LargeColumnName_unicode_col_name.phpt b/test/functional/sqlsrv/TC84_LargeColumnName_unicode_col_name.phpt similarity index 100% rename from test/sqlsrv/TC84_LargeColumnName_unicode_col_name.phpt rename to test/functional/sqlsrv/TC84_LargeColumnName_unicode_col_name.phpt diff --git a/test/sqlsrv/TC85_MaxOutputParams.phpt b/test/functional/sqlsrv/TC85_MaxOutputParams.phpt similarity index 100% rename from test/sqlsrv/TC85_MaxOutputParams.phpt rename to test/functional/sqlsrv/TC85_MaxOutputParams.phpt diff --git a/test/sqlsrv/TC86_InsertNulls.phpt b/test/functional/sqlsrv/TC86_InsertNulls.phpt similarity index 100% rename from test/sqlsrv/TC86_InsertNulls.phpt rename to test/functional/sqlsrv/TC86_InsertNulls.phpt diff --git a/test/sqlsrv/bind_param_null.phpt b/test/functional/sqlsrv/bind_param_null.phpt similarity index 100% rename from test/sqlsrv/bind_param_null.phpt rename to test/functional/sqlsrv/bind_param_null.phpt diff --git a/test/functional/sqlsrv/break.php b/test/functional/sqlsrv/break.php new file mode 100644 index 00000000..97abcccf --- /dev/null +++ b/test/functional/sqlsrv/break.php @@ -0,0 +1,90 @@ +$dbName, "uid"=>$uid, "pwd"=>$pwd ); + + $conn = sqlsrv_connect( $server, $connectionInfo ); + if ( $conn === false ) + { + die ( print_r( sqlsrv_errors() ) ); + } + + // Create table + $sql = "CREATE TABLE $tableName1 ( c1 INT, c2 VARCHAR(40) )"; + $stmt = sqlsrv_query( $conn, $sql ); + + // Insert data + $sql = "INSERT INTO $tableName1 VALUES ( ?, ? )"; + for( $t = 100; $t < 116; $t++ ) + { + $ts = substr( sha1( $t ),0,5 ); + $params = array( $t,$ts ); + $stmt = sqlsrv_prepare( $conn, $sql, $params ); + sqlsrv_execute( $stmt ); + } + + // Create table + $sql = "CREATE TABLE $tableName2 ( c1 INT, c2 VARCHAR(40) )"; + $stmt = sqlsrv_query( $conn, $sql ); + + // Insert data + $sql = "INSERT INTO $tableName2 VALUES ( ?, ? )"; + for( $t = 200; $t < 209; $t++ ) + { + $ts = substr( sha1( $t ),0,5 ); + $params = array( $t,$ts ); + $stmt = sqlsrv_prepare( $conn, $sql, $params ); + sqlsrv_execute( $stmt ); + } + + sqlsrv_close( $conn ); +} + +// Break connection by getting the session ID and killing it. +// Note that breaking a connection and testing reconnection requires a +// TCP/IP protocol connection (as opposed to a Shared Memory protocol). +function BreakConnection( $conn, $conn_break ) +{ + $stmt1 = sqlsrv_query( $conn, "SELECT @@SPID" ); + if ( sqlsrv_fetch( $stmt1 ) ) + { + $spid=sqlsrv_get_field( $stmt1, 0 ); + } + + $stmt2 = sqlsrv_prepare( $conn_break, "KILL ".$spid ); + sqlsrv_execute( $stmt2 ); + sleep(1); +} + +// Remove the tables generated by GenerateTables +function DropTables( $server, $uid, $pwd, $tableName1, $tableName2 ) +{ + global $dbName; + + $connectionInfo = array( "Database"=>$dbName, "UID"=>$uid, "PWD"=>$pwd ); + $conn = sqlsrv_connect( $server, $connectionInfo ); + + $query="IF OBJECT_ID('$tableName1', 'U') IS NOT NULL DROP TABLE $tableName1"; + $stmt=sqlsrv_query( $conn, $query ); + + $query="IF OBJECT_ID('$tableName2', 'U') IS NOT NULL DROP TABLE $tableName2"; + $stmt=sqlsrv_query( $conn, $query ); +} + +DropTables( $server, $uid, $pwd, $tableName1, $tableName2 ); +GenerateTables( $server, $uid, $pwd, $dbName, $tableName1, $tableName2 ); + +?> diff --git a/test/sqlsrv/bug_611146.phpt b/test/functional/sqlsrv/bug_611146.phpt similarity index 100% rename from test/sqlsrv/bug_611146.phpt rename to test/functional/sqlsrv/bug_611146.phpt diff --git a/test/sqlsrv/bug_close.phpt b/test/functional/sqlsrv/bug_close.phpt similarity index 100% rename from test/sqlsrv/bug_close.phpt rename to test/functional/sqlsrv/bug_close.phpt diff --git a/test/sqlsrv/bug_errors.phpt b/test/functional/sqlsrv/bug_errors.phpt similarity index 100% rename from test/sqlsrv/bug_errors.phpt rename to test/functional/sqlsrv/bug_errors.phpt diff --git a/test/sqlsrv/bugfix_dataCorruption.phpt b/test/functional/sqlsrv/bugfix_dataCorruption.phpt similarity index 100% rename from test/sqlsrv/bugfix_dataCorruption.phpt rename to test/functional/sqlsrv/bugfix_dataCorruption.phpt diff --git a/test/functional/sqlsrv/connection_resiliency.phpt b/test/functional/sqlsrv/connection_resiliency.phpt new file mode 100644 index 00000000..a73548e8 --- /dev/null +++ b/test/functional/sqlsrv/connection_resiliency.phpt @@ -0,0 +1,262 @@ +--TEST-- +Connection recovery test +--DESCRIPTION-- +Connect and execute a command, kill the connection, execute another command. +Then do it again without a buffered result set, by freeing the statement before +killing the connection and then not freeing it. The latter case is the only one +that should fail. Finally, execute two queries in two threads on a recovered +non-MARS connection. This should fail too. +--SKIPIF-- + +--FILE-- +$dbName, "UID"=>$uid, "PWD"=>$pwd) ); + +/////////////////////////////////////////////////////////////////////////////// +// Part 1 +// Expected to successfully execute second query because buffered cursor for +// first query means connection is idle when broken +/////////////////////////////////////////////////////////////////////////////// + +$connectionInfo = array( "Database"=>$dbName, "UID"=>$uid, "PWD"=>$pwd, "ConnectionPooling"=>false, + "ConnectRetryCount"=>10, "ConnectRetryInterval"=>10 ); + +$conn = sqlsrv_connect( $server, $connectionInfo ); +if( $conn === false ) +{ + echo "Could not connect.\n"; + print_r( sqlsrv_errors() ); +} + +$stmt1 = sqlsrv_query( $conn, "SELECT * FROM $tableName1", array(), array( "Scrollable"=>"buffered" ) ); +if( $stmt1 === false ) +{ + echo "Error in statement 1.\n"; + print_r( sqlsrv_errors() ); +} +else +{ + echo "Statement 1 successful.\n"; + $rowcount = sqlsrv_num_rows( $stmt1 ); + echo $rowcount." rows in result set.\n"; +} + +BreakConnection( $conn, $conn_break ); + +$stmt2 = sqlsrv_query( $conn, "SELECT * FROM $tableName2", array(), array( "Scrollable"=>"buffered" ) ); +if( $stmt2 === false ) +{ + echo "Error in statement 2.\n"; + print_r( sqlsrv_errors() ); +} +else +{ + echo "Statement 2 successful.\n"; + $rowcount = sqlsrv_num_rows( $stmt2 ); + echo $rowcount." rows in result set.\n"; +} + +sqlsrv_close( $conn ); + +/////////////////////////////////////////////////////////////////////////////// +// Part 2 +// Expected to successfully execute second query because first statement is +// freed before breaking connection +/////////////////////////////////////////////////////////////////////////////// + +$conn = sqlsrv_connect( $server, $connectionInfo ); +if( $conn === false ) +{ + echo "Could not connect.\n"; + print_r( sqlsrv_errors() ); +} + +$stmt3 = sqlsrv_query( $conn, "SELECT * FROM $tableName1" ); +if( $stmt3 === false ) +{ + echo "Error in statement 3.\n"; + print_r( sqlsrv_errors() ); +} +else +{ + echo "Statement 3 successful.\n"; + $rowcount = sqlsrv_num_rows( $stmt3 ); + echo $rowcount." rows in result set.\n"; +} + +sqlsrv_free_stmt( $stmt3 ); + +BreakConnection( $conn, $conn_break ); + +$stmt4 = sqlsrv_query( $conn, "SELECT * FROM $tableName2" ); +if( $stmt4 === false ) +{ + echo "Error in statement 4.\n"; + print_r( sqlsrv_errors() ); +} +else +{ + echo "Statement 4 successful.\n"; + $rowcount = sqlsrv_num_rows( $stmt4 ); + echo $rowcount." rows in result set.\n"; +} + +sqlsrv_close( $conn ); + +/////////////////////////////////////////////////////////////////////////////// +// Part 3 +// Expected to fail executing second query because default cursor for first +// query is still active when connection is broken +/////////////////////////////////////////////////////////////////////////////// + +$conn = sqlsrv_connect( $server, $connectionInfo ); +if( $conn === false ) +{ + echo "Could not connect.\n"; + print_r( sqlsrv_errors() ); +} + +$stmt5 = sqlsrv_query( $conn, "SELECT * FROM $tableName1" ); +if( $stmt5 === false ) +{ + echo "Error in statement 5.\n"; + print_r( sqlsrv_errors() ); +} +else +{ + echo "Statement 5 successful.\n"; + $rowcount = sqlsrv_num_rows( $stmt5 ); + echo $rowcount." rows in result set.\n"; +} + +BreakConnection( $conn, $conn_break ); + +$stmt6 = sqlsrv_query( $conn, "SELECT * FROM $tableName2" ); +if( $stmt6 === false ) +{ + echo "Error in statement 6.\n"; + print_r( sqlsrv_errors() ); +} +else +{ + echo "Statement 6 successful.\n"; + $rowcount = sqlsrv_num_rows( $stmt6 ); + echo $rowcount." rows in result set.\n"; +} + +sqlsrv_close( $conn ); + +/////////////////////////////////////////////////////////////////////////////// +// Part 4 +// Expected to trigger an error because there are two active statements with +// pending results and MARS is off +/////////////////////////////////////////////////////////////////////////////// + +$connectionInfo = array( "Database"=>$dbName, "UID"=>$uid, "PWD"=>$pwd, + "ConnectRetryCount"=>10, "ConnectRetryInterval"=>10, "MultipleActiveResultSets"=>false ); + +$conn = sqlsrv_connect( $server, $connectionInfo ); +if( $conn === false ) +{ + echo "Could not connect.\n"; + print_r( sqlsrv_errors() ); +} + +BreakConnection( $conn, $conn_break ); + +$stmt7 = sqlsrv_query( $conn, "SELECT * FROM $tableName1" ); +if( $stmt7 === false ) +{ + echo "Error in statement 7.\n"; + print_r( sqlsrv_errors() ); +} +else +{ + echo "Statement 7 successful.\n"; +} + +$stmt8 = sqlsrv_query( $conn, "SELECT * FROM $tableName2" ); +if( $stmt8 === false ) +{ + echo "Error in statement 8.\n"; + print_r( sqlsrv_errors() ); +} +else +{ + echo "Statement 8 successful.\n"; +} + +sqlsrv_close( $conn ); +sqlsrv_close( $conn_break ); + +?> +--EXPECTREGEX-- +Statement 1 successful. +16 rows in result set. +Statement 2 successful. +9 rows in result set. +Statement 3 successful. + rows in result set. +Statement 4 successful. + rows in result set. +Statement 5 successful. + rows in result set. +Error in statement 6. +Array +\( + \[0\] => Array + \( + \[0\] => 08S01 + \[SQLSTATE\] => 08S01 + \[1\] => 10054 + \[code\] => 10054 + \[2\] => \[Microsoft\]\[ODBC Driver 1[1-9] for SQL Server\]TCP Provider: An existing connection was forcibly closed by the remote host. + + \[message\] => \[Microsoft\]\[ODBC Driver 1[1-9] for SQL Server\]TCP Provider: An existing connection was forcibly closed by the remote host. + + \) + + \[1\] => Array + \( + \[0\] => 08S01 + \[SQLSTATE\] => 08S01 + \[1\] => 10054 + \[code\] => 10054 + \[2\] => \[Microsoft\]\[ODBC Driver 1[1-9] for SQL Server\]Communication link failure + \[message\] => \[Microsoft\]\[ODBC Driver 1[1-9] for SQL Server\]Communication link failure + \) + +\) +Statement 7 successful. +Error in statement 8. +Array +\( + \[0\] => Array + \( + \[0\] => IMSSP + \[SQLSTATE\] => IMSSP + \[1\] => -44 + \[code\] => -44 + \[2\] => The connection cannot process this operation because there is a statement with pending results. To make the connection available for other queries, either fetch all results or cancel or free the statement. For more information, see the product documentation about the MultipleActiveResultSets connection option. + \[message\] => The connection cannot process this operation because there is a statement with pending results. To make the connection available for other queries, either fetch all results or cancel or free the statement. For more information, see the product documentation about the MultipleActiveResultSets connection option. + \) + + \[1\] => Array + \( + \[0\] => HY000 + \[SQLSTATE\] => HY000 + \[1\] => 0 + \[code\] => 0 + \[2\] => \[Microsoft\]\[ODBC Driver 1[1-9] for SQL Server\]Connection is busy with results for another command + \[message\] => \[Microsoft\]\[ODBC Driver 1[1-9] for SQL Server\]Connection is busy with results for another command + \) + +\) diff --git a/test/sqlsrv/connection_resiliency_keywords.phpt b/test/functional/sqlsrv/connection_resiliency_keywords.phpt similarity index 100% rename from test/sqlsrv/connection_resiliency_keywords.phpt rename to test/functional/sqlsrv/connection_resiliency_keywords.phpt diff --git a/test/functional/sqlsrv/connection_resiliency_prepare_transact.phpt b/test/functional/sqlsrv/connection_resiliency_prepare_transact.phpt new file mode 100644 index 00000000..7bb6ac81 --- /dev/null +++ b/test/functional/sqlsrv/connection_resiliency_prepare_transact.phpt @@ -0,0 +1,207 @@ +--TEST-- +Test connection resiliency with a prepared statement and transaction. +--DESCRIPTION-- +Prepare a statement, break the connection, and execute the statement. Then +test transactions by breaking the connection before beginning a transaction +and in the middle of the transaction. The latter case should fail (i.e., the +transaction should be rolled back). +--SKIPIF-- + +--FILE-- +$dbName, "UID"=>$uid, "PWD"=>$pwd) ); + +/////////////////////////////////////////////////////////////////////////////// +// Part 1 +// Statement expected to be executed because the connection is idle after +// statement has been prepared +/////////////////////////////////////////////////////////////////////////////// + +$connectionInfo = array( "Database"=>$dbName, "UID"=>$uid, "PWD"=>$pwd, "ConnectionPooling"=>false, + "ConnectRetryCount"=>10, "ConnectRetryInterval"=>10 ); + +$conn = sqlsrv_connect( $server, $connectionInfo ); +if( $conn === false ) +{ + echo "Could not connect.\n"; + print_r( sqlsrv_errors() ); +} + +$stmt1 = sqlsrv_prepare( $conn, "SELECT * FROM $tableName1" ); +if( $stmt1 === false ) +{ + echo "Error in statement preparation.\n"; + print_r( sqlsrv_errors() ); +} +else +{ + echo "Statement 1 prepared.\n"; +} + +BreakConnection( $conn, $conn_break ); + +if( sqlsrv_execute( $stmt1 ) ) +{ + echo "Statement 1 executed.\n"; +} +else +{ + echo "Statement 1 could not be executed.\n"; + print_r( sqlsrv_errors() ); +} + +sqlsrv_close( $conn ); + +/////////////////////////////////////////////////////////////////////////////// +// Part 2 +// Transaction should be committed because connection is broken before +// transaction begins +/////////////////////////////////////////////////////////////////////////////// + +$conn = sqlsrv_connect( $server, $connectionInfo ); +if( $conn === false ) +{ + echo "Could not connect.\n"; + print_r( sqlsrv_errors() ); +} + +BreakConnection( $conn, $conn_break ); + +if ( sqlsrv_begin_transaction( $conn ) === false ) +{ + echo "Could not begin transaction.\n"; + print_r( sqlsrv_errors() ); +} +else +{ + echo "Transaction begun.\n"; +} + +$number = 700; +$string = 'zxywv'; + +$tsql = "INSERT INTO $tableName1 VALUES ( ?, ? )"; +$params = array( $number, $string ); +$stmt2 = sqlsrv_query( $conn, $tsql, $params ); + +if( $stmt2 ) +{ + if ( sqlsrv_commit( $conn ) ) + { + echo "Transaction was committed.\n"; + } + else + { + echo "Statement valid but commit failed.\n"; + print_r( sqlsrv_errors() ); + } +} +else +{ + if ( sqlsrv_rollback( $conn ) ) + { + echo "Transaction was rolled back.\n"; + } + else + { + echo "Statement not valid and rollback failed.\n"; + print_r( sqlsrv_errors() ); + } +} + +sqlsrv_close( $conn ); + +/////////////////////////////////////////////////////////////////////////////// +// Part 3 +// Expected to trigger an error because connection is interrupted in the middle +// of a transaction +/////////////////////////////////////////////////////////////////////////////// + +$conn = sqlsrv_connect( $server, $connectionInfo ); +if( $conn === false ) +{ + echo "Could not connect.\n"; + print_r( sqlsrv_errors() ); +} + +if ( sqlsrv_begin_transaction( $conn ) === false ) +{ + echo "Could not begin transaction.\n"; + print_r( sqlsrv_errors() ); +} +else +{ + echo "Transaction begun.\n"; +} + +BreakConnection( $conn, $conn_break ); + +$number = 700; +$string = 'zxywv'; + +$tsql = "INSERT INTO $tableName1 VALUES ( ?, ? )"; +$params = array( $number, $string ); +$stmt2 = sqlsrv_query( $conn, $tsql, $params ); + +if( $stmt2 ) +{ + if ( sqlsrv_commit( $conn ) ) + { + echo "Transaction was committed.\n"; + } + else + { + echo "Statement valid but commit failed.\n"; + print_r( sqlsrv_errors() ); + } +} +else +{ + if ( sqlsrv_rollback( $conn ) ) + { + echo "Transaction was rolled back.\n"; + } + else + { + echo "Statement not valid and rollback failed.\n"; + print_r( sqlsrv_errors() ); + } +} + +sqlsrv_close( $conn ); +sqlsrv_close( $conn_break ); +?> +--EXPECTREGEX-- +Statement 1 prepared. +Statement 1 executed. +Transaction begun. +Transaction was committed. +Transaction begun. +Statement not valid and rollback failed. +Array +\( + \[0\] => Array + \( + \[0\] => 08S02 + \[SQLSTATE\] => 08S02 + \[1\] => 10054 + \[code\] => 10054 + \[2\] => \[Microsoft\]\[ODBC Driver 1[1-9] for SQL Server\]TCP Provider: An existing connection was forcibly closed by the remote host. + + \[message\] => \[Microsoft\]\[ODBC Driver 1[1-9] for SQL Server\]TCP Provider: An existing connection was forcibly closed by the remote host. + + \) + + \[1\] => Array + \( + \[0\] => 08S02 + \[SQLSTATE\] => 08S02 + \[1\] => 10054 + \[code\] => 10054 + \[2\] => \[Microsoft\]\[ODBC Driver 1[1-9] for SQL Server\]Unable to open a logical session + \[message\] => \[Microsoft\]\[ODBC Driver 1[1-9] for SQL Server\]Unable to open a logical session + \) + +\) diff --git a/test/functional/sqlsrv/connection_resiliency_timeouts.phpt b/test/functional/sqlsrv/connection_resiliency_timeouts.phpt new file mode 100644 index 00000000..ced10353 --- /dev/null +++ b/test/functional/sqlsrv/connection_resiliency_timeouts.phpt @@ -0,0 +1,105 @@ +--TEST-- +Test connection resiliency timeouts +--DESCRIPTION-- +1. Connect with ConnectRetryCount equal to 0. +2. Reconnect with the default value of ConnectRetryCount (the default is 1). +--SKIPIF-- + +--FILE-- +$dbName, "UID"=>$uid, "PWD"=>$pwd) ); + +/////////////////////////////////////////////////////////////////////////////// +// Part 1 +// Expected to error out because ConnectRetryCount equals 0 +/////////////////////////////////////////////////////////////////////////////// + +$connectionInfo = array( "Database"=>$dbName, "UID"=>$uid, "PWD"=>$pwd, + "ConnectRetryCount"=>0 ); + +$conn = sqlsrv_connect( $server, $connectionInfo ); +if( $conn === false ) +{ + echo "Could not connect.\n"; + print_r( sqlsrv_errors() ); +} + +BreakConnection( $conn, $conn_break ); + +$stmt1 = sqlsrv_query( $conn, "SELECT * FROM $tableName1" ); +if( $stmt1 === false ) +{ + echo "Error in statement 1.\n"; + print_r( sqlsrv_errors() ); +} +else +{ + echo "Statement 1 successful.\n"; +} + +sqlsrv_close( $conn ); + +/////////////////////////////////////////////////////////////////////////////// +// Part 2 +// Expected to succeed with a single reconnection attempt +/////////////////////////////////////////////////////////////////////////////// + +$connectionInfo = array( "Database"=>$dbName, "UID"=>$uid, "PWD"=>$pwd, + "ConnectRetryInterval"=>10 ); + +$conn = sqlsrv_connect( $server, $connectionInfo ); +if( $conn === false ) +{ + echo "Could not connect.\n"; + print_r( sqlsrv_errors() ); +} + +BreakConnection( $conn, $conn_break ); + +$stmt2 = sqlsrv_query( $conn, "SELECT * FROM $tableName1" ); +if( $stmt2 === false ) +{ + echo "Error in statement 2.\n"; + print_r( sqlsrv_errors() ); +} +else +{ + echo "Statement 2 successful.\n"; +} + +sqlsrv_close( $conn ); +sqlsrv_close( $conn_break ); + +DropTables( $server, $uid, $pwd, $tableName1, $tableName2 ) + +?> +--EXPECTREGEX-- +Error in statement 1. +Array +\( + \[0\] => Array + \( + \[0\] => 08S01 + \[SQLSTATE\] => 08S01 + \[1\] => 10054 + \[code\] => 10054 + \[2\] => \[Microsoft\]\[ODBC Driver 1[1-9] for SQL Server\]TCP Provider: An existing connection was forcibly closed by the remote host. + + \[message\] => \[Microsoft\]\[ODBC Driver 1[1-9] for SQL Server\]TCP Provider: An existing connection was forcibly closed by the remote host. + + \) + + \[1\] => Array + \( + \[0\] => 08S01 + \[SQLSTATE\] => 08S01 + \[1\] => 10054 + \[code\] => 10054 + \[2\] => \[Microsoft\]\[ODBC Driver 1[1-9] for SQL Server\]Communication link failure + \[message\] => \[Microsoft\]\[ODBC Driver 1[1-9] for SQL Server\]Communication link failure + \) + +\) +Statement 2 successful. diff --git a/test/sqlsrv/datetime_inheritence.phpt b/test/functional/sqlsrv/datetime_inheritence.phpt similarity index 100% rename from test/sqlsrv/datetime_inheritence.phpt rename to test/functional/sqlsrv/datetime_inheritence.phpt diff --git a/test/sqlsrv/fix_test_168256-2.phpt b/test/functional/sqlsrv/fix_test_168256-2.phpt similarity index 100% rename from test/sqlsrv/fix_test_168256-2.phpt rename to test/functional/sqlsrv/fix_test_168256-2.phpt diff --git a/test/sqlsrv/fix_test_168256.phpt b/test/functional/sqlsrv/fix_test_168256.phpt similarity index 100% rename from test/sqlsrv/fix_test_168256.phpt rename to test/functional/sqlsrv/fix_test_168256.phpt diff --git a/test/sqlsrv/fix_test_182741.phpt b/test/functional/sqlsrv/fix_test_182741.phpt similarity index 100% rename from test/sqlsrv/fix_test_182741.phpt rename to test/functional/sqlsrv/fix_test_182741.phpt diff --git a/test/sqlsrv/isPooled.php b/test/functional/sqlsrv/isPooled.php similarity index 96% rename from test/sqlsrv/isPooled.php rename to test/functional/sqlsrv/isPooled.php index fd9628d2..9e5fc64d 100644 --- a/test/sqlsrv/isPooled.php +++ b/test/functional/sqlsrv/isPooled.php @@ -6,6 +6,7 @@ sqlsrv_close($conn1); $conn2 = Connect(); $connId2 = ConnectionID($conn2); +sqlsrv_close($conn2); if ($connId1 === $connId2){ echo "Pooled\n"; diff --git a/test/sqlsrv/issue_52.phpt b/test/functional/sqlsrv/issue_52.phpt similarity index 100% rename from test/sqlsrv/issue_52.phpt rename to test/functional/sqlsrv/issue_52.phpt diff --git a/test/sqlsrv/php.gif b/test/functional/sqlsrv/php.gif similarity index 100% rename from test/sqlsrv/php.gif rename to test/functional/sqlsrv/php.gif diff --git a/test/sqlsrv/skipif.inc b/test/functional/sqlsrv/skipif.inc similarity index 100% rename from test/sqlsrv/skipif.inc rename to test/functional/sqlsrv/skipif.inc diff --git a/test/sqlsrv/skipif_azure.inc b/test/functional/sqlsrv/skipif_azure.inc similarity index 50% rename from test/sqlsrv/skipif_azure.inc rename to test/functional/sqlsrv/skipif_azure.inc index c0450a67..81c557a1 100644 --- a/test/sqlsrv/skipif_azure.inc +++ b/test/functional/sqlsrv/skipif_azure.inc @@ -4,9 +4,7 @@ if (!extension_loaded("sqlsrv")) { die("skip extension not loaded"); } -include 'MsCommon.inc'; -if ( IsDaasMode() ) { - die("skip test in Azure"); -} +require 'MsSetup.inc'; +if ($daasMode) die("skip test not applicable in Azure\n"); ?> \ No newline at end of file diff --git a/test/functional/sqlsrv/skipif_protocol_not_tcp.inc b/test/functional/sqlsrv/skipif_protocol_not_tcp.inc new file mode 100644 index 00000000..4dc4921e --- /dev/null +++ b/test/functional/sqlsrv/skipif_protocol_not_tcp.inc @@ -0,0 +1,39 @@ +$userName, "PWD"=>$userPassword ); + +$conn = sqlsrv_connect( $server, $connectionInfo ); +if( $conn === false ) +{ + die( "skip Could not connect during SKIPIF." ); +} + +// Get process ID. Not the same as the one during the actual test, but +// we only need to know the protocol for a particular connection. +$stmt = sqlsrv_query( $conn, "SELECT @@SPID" ); +if ( sqlsrv_fetch( $stmt ) ) +{ + $spid = sqlsrv_get_field( $stmt, 0 ); +} +else +{ + die("skip Could not fetch SPID."); +} + +$stmt = sqlsrv_query( $conn, "SELECT * FROM sys.dm_exec_connections WHERE session_id = $spid"); +if ( sqlsrv_fetch( $stmt ) ) +{ + $prot = sqlsrv_get_field( $stmt, 3 ); + if ($prot != 'TCP') + { + die( "skip Not using a TCP protocol." ); + } +} +?> diff --git a/test/sqlsrv/skipif_unix.inc b/test/functional/sqlsrv/skipif_unix.inc similarity index 100% rename from test/sqlsrv/skipif_unix.inc rename to test/functional/sqlsrv/skipif_unix.inc diff --git a/test/sqlsrv/sqlsrv_2008_dataTypes.phpt b/test/functional/sqlsrv/sqlsrv_2008_dataTypes.phpt similarity index 97% rename from test/sqlsrv/sqlsrv_2008_dataTypes.phpt rename to test/functional/sqlsrv/sqlsrv_2008_dataTypes.phpt index 2b7a1f89..308bd47e 100644 --- a/test/sqlsrv/sqlsrv_2008_dataTypes.phpt +++ b/test/functional/sqlsrv/sqlsrv_2008_dataTypes.phpt @@ -20,8 +20,6 @@ if( !$conn ) { FatalError("Could not connect"); } -print_r( sqlsrv_client_info( $conn )); - $stmt = sqlsrv_query( $conn, "IF OBJECT_ID('2008_date_types', 'U') IS NOT NULL DROP TABLE [2008_date_types]" ); $stmt = sqlsrv_query( $conn, "CREATE TABLE [2008_date_types] (id int, [c1_date] date, [c2_time] time, [c3_datetimeoffset] datetimeoffset, [c4_datetime2] datetime2)" ); @@ -104,13 +102,6 @@ sqlsrv_close( $conn ); ?> --EXPECTREGEX-- -Array -\( - \[(DriverDllName|DriverName)\] => msodbcsql[0-9]{2}\.dll|libmsodbcsql-[0-9]{2}\.[0-9]\.so\.[0-9]\.[0-9] - \[DriverODBCVer\] => [0-9]{1,2}\.[0-9]{1,2} - \[DriverVer\] => [0-9]{1,2}\.[0-9]{1,2}\.[0-9]{4} - \[ExtensionVer\] => [0-9]\.[0-9]\.[0-9](\-((rc)|(preview))(\.[0-9]+)?)?(\+[0-9]+)? -\) field 0 = [0-9]{1,5} field 1 = [0-9]{4}\-[0-9]{2}\-[0-9]{2} field 2 = [0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{7} diff --git a/test/sqlsrv/sqlsrv_378_out_param_error.phpt b/test/functional/sqlsrv/sqlsrv_378_out_param_error.phpt similarity index 100% rename from test/sqlsrv/sqlsrv_378_out_param_error.phpt rename to test/functional/sqlsrv/sqlsrv_378_out_param_error.phpt diff --git a/test/functional/sqlsrv/sqlsrv_ConnPool_Unix.phpt b/test/functional/sqlsrv/sqlsrv_ConnPool_Unix.phpt new file mode 100644 index 00000000..20645a70 --- /dev/null +++ b/test/functional/sqlsrv/sqlsrv_ConnPool_Unix.phpt @@ -0,0 +1,63 @@ +--TEST-- +SQLSRV Connection Pooling Test on Unix +--DESCRIPTION-- +This test assumes odbcinst.ini has not been modified. +This test also requires root privileges to modify odbcinst.ini file on Linux. +--SKIPIF-- + +--FILE-- + +--CLEAN-- + +--EXPECT-- +Pooled +Not Pooled + diff --git a/test/sqlsrv/sqlsrv_LOB.phpt b/test/functional/sqlsrv/sqlsrv_LOB.phpt similarity index 100% rename from test/sqlsrv/sqlsrv_LOB.phpt rename to test/functional/sqlsrv/sqlsrv_LOB.phpt diff --git a/test/functional/sqlsrv/sqlsrv_TNIR.phpt b/test/functional/sqlsrv/sqlsrv_TNIR.phpt new file mode 100644 index 00000000..498199d5 --- /dev/null +++ b/test/functional/sqlsrv/sqlsrv_TNIR.phpt @@ -0,0 +1,60 @@ +--TEST-- +Test the TNIR keyword with enabled and disabled options and the MultiSubnetFailover keyword with true and false options +--SKIPIF-- + +--FILE-- + $GLOBALS['uid'], "PWD" => $GLOBALS['pwd'], "TransparentNetworkIPResolution" => $TNIRValue, "MultiSubnetFailover" => $MSFValue]; + $MSFValueStr = ($MSFValue) ? 'true' : 'false'; + $start = microtime(true); + $conn = sqlsrv_connect($GLOBALS['server'], $connectionInfo); + if ($conn === false) { + echo "Connection failed with TNIR $TNIRValue and MultiSubnetFailover $MSFValueStr.\n"; + print_r(sqlsrv_errors()); + } + else { + echo "Connection successful with TNIR $TNIRValue and MultiSubnetFailover $MSFValueStr.\n"; + $connect_time = round(microtime(true) - $start, 2); + echo "Time to connect is $connect_time sec.\n\n"; + } + sqlsrv_close($conn); +} + +test_tnir("Enabled", false); // case temd (TNIR enabled; MultiSubnetFailover disabled) +test_tnir("Enabled", true); // case teme +test_tnir("Disabled", false); // case tdmd +test_tnir("Disabled", true); // case tdme + +// Interpreting output +// If the first resolved IP address can be connected, then the time to connect for all these cases is similar +// else if the second resolved IP address can be connected, then temd ~= tdmd > teme ~= tdme +// else tdmd > temd > teme ~= tdme +// note: the first test takes a bit longer since time is needed for the DNS to resolve the IP addresses of the server host name +?> + +--EXPECTREGEX-- +Connection successful with TNIR Enabled and MultiSubnetFailover false\. +Time to connect is [0-9]+.?[0-9]* sec\. + +Connection successful with TNIR Enabled and MultiSubnetFailover true\. +Time to connect is [0-9]+.?[0-9]* sec\. + +Connection successful with TNIR Disabled and MultiSubnetFailover false\. +Time to connect is [0-9]+.?[0-9]* sec\. + +Connection successful with TNIR Disabled and MultiSubnetFailover true\. +Time to connect is [0-9]+.?[0-9]* sec\. \ No newline at end of file diff --git a/test/sqlsrv/sqlsrv_azure_ad_authentication.phpt b/test/functional/sqlsrv/sqlsrv_azure_ad_authentication.phpt similarity index 99% rename from test/sqlsrv/sqlsrv_azure_ad_authentication.phpt rename to test/functional/sqlsrv/sqlsrv_azure_ad_authentication.phpt index b23a9f1c..11a65e80 100644 --- a/test/sqlsrv/sqlsrv_azure_ad_authentication.phpt +++ b/test/functional/sqlsrv/sqlsrv_azure_ad_authentication.phpt @@ -107,4 +107,3 @@ Array [message] => Invalid option for the Authentication keyword. Only SqlPassword or ActiveDirectoryPassword is supported. ) %s with Authentication=ActiveDirectoryPassword. - diff --git a/test/sqlsrv/sqlsrv_bind_output_param.phpt b/test/functional/sqlsrv/sqlsrv_bind_output_param.phpt similarity index 100% rename from test/sqlsrv/sqlsrv_bind_output_param.phpt rename to test/functional/sqlsrv/sqlsrv_bind_output_param.phpt diff --git a/test/sqlsrv/sqlsrv_bind_param_out_string.phpt b/test/functional/sqlsrv/sqlsrv_bind_param_out_string.phpt similarity index 100% rename from test/sqlsrv/sqlsrv_bind_param_out_string.phpt rename to test/functional/sqlsrv/sqlsrv_bind_param_out_string.phpt diff --git a/test/sqlsrv/sqlsrv_buffered.phpt b/test/functional/sqlsrv/sqlsrv_buffered.phpt similarity index 100% rename from test/sqlsrv/sqlsrv_buffered.phpt rename to test/functional/sqlsrv/sqlsrv_buffered.phpt diff --git a/test/sqlsrv/sqlsrv_buffered_result_set_extended_ascii.phpt b/test/functional/sqlsrv/sqlsrv_buffered_result_set_extended_ascii.phpt similarity index 100% rename from test/sqlsrv/sqlsrv_buffered_result_set_extended_ascii.phpt rename to test/functional/sqlsrv/sqlsrv_buffered_result_set_extended_ascii.phpt diff --git a/test/sqlsrv/sqlsrv_bug_boolean_cast.phpt b/test/functional/sqlsrv/sqlsrv_bug_boolean_cast.phpt similarity index 100% rename from test/sqlsrv/sqlsrv_bug_boolean_cast.phpt rename to test/functional/sqlsrv/sqlsrv_bug_boolean_cast.phpt diff --git a/test/sqlsrv/sqlsrv_bug_boolean_cast_in_bit.phpt b/test/functional/sqlsrv/sqlsrv_bug_boolean_cast_in_bit.phpt similarity index 100% rename from test/sqlsrv/sqlsrv_bug_boolean_cast_in_bit.phpt rename to test/functional/sqlsrv/sqlsrv_bug_boolean_cast_in_bit.phpt diff --git a/test/sqlsrv/sqlsrv_bug_boolean_cast_in_bool.phpt b/test/functional/sqlsrv/sqlsrv_bug_boolean_cast_in_bool.phpt similarity index 100% rename from test/sqlsrv/sqlsrv_bug_boolean_cast_in_bool.phpt rename to test/functional/sqlsrv/sqlsrv_bug_boolean_cast_in_bool.phpt diff --git a/test/sqlsrv/sqlsrv_bug_boolean_cast_inout_bit.phpt b/test/functional/sqlsrv/sqlsrv_bug_boolean_cast_inout_bit.phpt similarity index 100% rename from test/sqlsrv/sqlsrv_bug_boolean_cast_inout_bit.phpt rename to test/functional/sqlsrv/sqlsrv_bug_boolean_cast_inout_bit.phpt diff --git a/test/sqlsrv/sqlsrv_bug_boolean_cast_inout_bool.phpt b/test/functional/sqlsrv/sqlsrv_bug_boolean_cast_inout_bool.phpt similarity index 100% rename from test/sqlsrv/sqlsrv_bug_boolean_cast_inout_bool.phpt rename to test/functional/sqlsrv/sqlsrv_bug_boolean_cast_inout_bool.phpt diff --git a/test/sqlsrv/sqlsrv_bug_boolean_cast_out_bit.phpt b/test/functional/sqlsrv/sqlsrv_bug_boolean_cast_out_bit.phpt similarity index 100% rename from test/sqlsrv/sqlsrv_bug_boolean_cast_out_bit.phpt rename to test/functional/sqlsrv/sqlsrv_bug_boolean_cast_out_bit.phpt diff --git a/test/sqlsrv/sqlsrv_bug_boolean_cast_out_bool.phpt b/test/functional/sqlsrv/sqlsrv_bug_boolean_cast_out_bool.phpt similarity index 100% rename from test/sqlsrv/sqlsrv_bug_boolean_cast_out_bool.phpt rename to test/functional/sqlsrv/sqlsrv_bug_boolean_cast_out_bool.phpt diff --git a/test/sqlsrv/sqlsrv_client_info.phpt b/test/functional/sqlsrv/sqlsrv_client_info.phpt similarity index 86% rename from test/sqlsrv/sqlsrv_client_info.phpt rename to test/functional/sqlsrv/sqlsrv_client_info.phpt index 3eb80627..1b8f7b31 100644 --- a/test/sqlsrv/sqlsrv_client_info.phpt +++ b/test/functional/sqlsrv/sqlsrv_client_info.phpt @@ -21,5 +21,5 @@ array\(4\) { \[\"DriverVer\"\]=> string\(10\) \"[0-9]{1,2}\.[0-9]{1,2}\.[0-9]{4}\" \[\"ExtensionVer\"\]=> - string\([0-9]+\) \"[0-9]\.[0-9]\.[0-9](\-((rc)|(preview))(\.[0-9]+)?)?(\+[0-9]+)?" + string\([0-9]+\) \"[0-9].[0-9]\.[0-9](-(RC[0-9]?|preview))?(\.[0-9]+)?(\+[0-9]+)?\" } \ No newline at end of file diff --git a/test/sqlsrv/sqlsrv_close.phpt b/test/functional/sqlsrv/sqlsrv_close.phpt similarity index 100% rename from test/sqlsrv/sqlsrv_close.phpt rename to test/functional/sqlsrv/sqlsrv_close.phpt diff --git a/test/sqlsrv/sqlsrv_close_twice.phpt b/test/functional/sqlsrv/sqlsrv_close_twice.phpt similarity index 100% rename from test/sqlsrv/sqlsrv_close_twice.phpt rename to test/functional/sqlsrv/sqlsrv_close_twice.phpt diff --git a/test/sqlsrv/sqlsrv_commit.phpt b/test/functional/sqlsrv/sqlsrv_commit.phpt similarity index 100% rename from test/sqlsrv/sqlsrv_commit.phpt rename to test/functional/sqlsrv/sqlsrv_commit.phpt diff --git a/test/sqlsrv/sqlsrv_complex_query.phpt b/test/functional/sqlsrv/sqlsrv_complex_query.phpt similarity index 100% rename from test/sqlsrv/sqlsrv_complex_query.phpt rename to test/functional/sqlsrv/sqlsrv_complex_query.phpt diff --git a/test/sqlsrv/sqlsrv_configure.phpt b/test/functional/sqlsrv/sqlsrv_configure.phpt similarity index 100% rename from test/sqlsrv/sqlsrv_configure.phpt rename to test/functional/sqlsrv/sqlsrv_configure.phpt diff --git a/test/sqlsrv/sqlsrv_configure_logs_only.phpt b/test/functional/sqlsrv/sqlsrv_configure_logs_only.phpt similarity index 100% rename from test/sqlsrv/sqlsrv_configure_logs_only.phpt rename to test/functional/sqlsrv/sqlsrv_configure_logs_only.phpt diff --git a/test/sqlsrv/sqlsrv_connStr.phpt b/test/functional/sqlsrv/sqlsrv_connStr.phpt similarity index 96% rename from test/sqlsrv/sqlsrv_connStr.phpt rename to test/functional/sqlsrv/sqlsrv_connStr.phpt index 7639c8e0..be8ffce8 100644 --- a/test/sqlsrv/sqlsrv_connStr.phpt +++ b/test/functional/sqlsrv/sqlsrv_connStr.phpt @@ -23,7 +23,7 @@ sqlsrv_configure( 'WarningsReturnAsErrors', 0 ); sqlsrv_configure( 'LogSeverity', SQLSRV_LOG_SEVERITY_ALL ); // test an invalid encoding -$c = connect(array( 'CharacterSet' => 'jibberish' )); +$c = connect(array( 'CharacterSet' => 'gibberish' )); if( $c !== false ) { FatalError( "Should have errored on an invalid encoding." ); } @@ -88,8 +88,8 @@ Array [SQLSTATE] => IMSSP [1] => -48 [code] => -48 - [2] => The encoding 'jibberish' is not a supported encoding for the CharacterSet connection option. - [message] => The encoding 'jibberish' is not a supported encoding for the CharacterSet connection option. + [2] => The encoding 'gibberish' is not a supported encoding for the CharacterSet connection option. + [message] => The encoding 'gibberish' is not a supported encoding for the CharacterSet connection option. ) ) diff --git a/test/sqlsrv/sqlsrv_connect.phpt b/test/functional/sqlsrv/sqlsrv_connect.phpt similarity index 100% rename from test/sqlsrv/sqlsrv_connect.phpt rename to test/functional/sqlsrv/sqlsrv_connect.phpt diff --git a/test/sqlsrv/sqlsrv_custom_numeric_formats.phpt b/test/functional/sqlsrv/sqlsrv_custom_numeric_formats.phpt similarity index 100% rename from test/sqlsrv/sqlsrv_custom_numeric_formats.phpt rename to test/functional/sqlsrv/sqlsrv_custom_numeric_formats.phpt diff --git a/test/sqlsrv/sqlsrv_data_to_str.phpt b/test/functional/sqlsrv/sqlsrv_data_to_str.phpt similarity index 100% rename from test/sqlsrv/sqlsrv_data_to_str.phpt rename to test/functional/sqlsrv/sqlsrv_data_to_str.phpt diff --git a/test/sqlsrv/sqlsrv_data_types_explict_fetch.phpt b/test/functional/sqlsrv/sqlsrv_data_types_explict_fetch.phpt similarity index 100% rename from test/sqlsrv/sqlsrv_data_types_explict_fetch.phpt rename to test/functional/sqlsrv/sqlsrv_data_types_explict_fetch.phpt diff --git a/test/sqlsrv/sqlsrv_data_types_fetch_binary_stream.phpt b/test/functional/sqlsrv/sqlsrv_data_types_fetch_binary_stream.phpt similarity index 100% rename from test/sqlsrv/sqlsrv_data_types_fetch_binary_stream.phpt rename to test/functional/sqlsrv/sqlsrv_data_types_fetch_binary_stream.phpt diff --git a/test/sqlsrv/sqlsrv_errors.phpt b/test/functional/sqlsrv/sqlsrv_errors.phpt similarity index 100% rename from test/sqlsrv/sqlsrv_errors.phpt rename to test/functional/sqlsrv/sqlsrv_errors.phpt diff --git a/test/sqlsrv/sqlsrv_execute_twice.phpt b/test/functional/sqlsrv/sqlsrv_execute_twice.phpt similarity index 100% rename from test/sqlsrv/sqlsrv_execute_twice.phpt rename to test/functional/sqlsrv/sqlsrv_execute_twice.phpt diff --git a/test/sqlsrv/sqlsrv_fetch_array_unicode_col_name.phpt b/test/functional/sqlsrv/sqlsrv_fetch_array_unicode_col_name.phpt similarity index 100% rename from test/sqlsrv/sqlsrv_fetch_array_unicode_col_name.phpt rename to test/functional/sqlsrv/sqlsrv_fetch_array_unicode_col_name.phpt diff --git a/test/sqlsrv/sqlsrv_fetch_complex_transactions.phpt b/test/functional/sqlsrv/sqlsrv_fetch_complex_transactions.phpt similarity index 100% rename from test/sqlsrv/sqlsrv_fetch_complex_transactions.phpt rename to test/functional/sqlsrv/sqlsrv_fetch_complex_transactions.phpt diff --git a/test/sqlsrv/sqlsrv_fetch_cursor_static_scroll.phpt b/test/functional/sqlsrv/sqlsrv_fetch_cursor_static_scroll.phpt similarity index 100% rename from test/sqlsrv/sqlsrv_fetch_cursor_static_scroll.phpt rename to test/functional/sqlsrv/sqlsrv_fetch_cursor_static_scroll.phpt diff --git a/test/sqlsrv/sqlsrv_fetch_cursor_types.phpt b/test/functional/sqlsrv/sqlsrv_fetch_cursor_types.phpt similarity index 100% rename from test/sqlsrv/sqlsrv_fetch_cursor_types.phpt rename to test/functional/sqlsrv/sqlsrv_fetch_cursor_types.phpt diff --git a/test/sqlsrv/sqlsrv_fetch_datetime_as_strings.phpt b/test/functional/sqlsrv/sqlsrv_fetch_datetime_as_strings.phpt similarity index 100% rename from test/sqlsrv/sqlsrv_fetch_datetime_as_strings.phpt rename to test/functional/sqlsrv/sqlsrv_fetch_datetime_as_strings.phpt diff --git a/test/sqlsrv/sqlsrv_fetch_field_twice_data_types.phpt b/test/functional/sqlsrv/sqlsrv_fetch_field_twice_data_types.phpt similarity index 100% rename from test/sqlsrv/sqlsrv_fetch_field_twice_data_types.phpt rename to test/functional/sqlsrv/sqlsrv_fetch_field_twice_data_types.phpt diff --git a/test/sqlsrv/sqlsrv_fetch_invalid_types.phpt b/test/functional/sqlsrv/sqlsrv_fetch_invalid_types.phpt similarity index 96% rename from test/sqlsrv/sqlsrv_fetch_invalid_types.phpt rename to test/functional/sqlsrv/sqlsrv_fetch_invalid_types.phpt index f91863ab..c08f127d 100644 --- a/test/sqlsrv/sqlsrv_fetch_invalid_types.phpt +++ b/test/functional/sqlsrv/sqlsrv_fetch_invalid_types.phpt @@ -6,10 +6,10 @@ include 'MsCommon.inc'; function PopulateTestTable($conn, $tableName) { - $stmt = sqlsrv_query($conn, "CREATE TABLE $tableName ([c1_int] int, [c2_tinyint] tinyint, [c3_smallint] smallint, [c4_bigint] bigint, [c5_bit] bit, [c6_float] float, [c7_real] real, [c8_decimal] decimal(28,4), [c9_numeric] numeric(32,4), [c10_money] money, [c11_smallmoney] smallmoney, [c12_char] char(512), [c13_varchar] varchar(512), [c14_varchar_max] varchar(max), [c15_nchar] nchar(512), [c16_nvarchar] nvarchar(512), [c17_nvarchar_max] nvarchar(max), [c18_text] text, [c19_ntext] ntext, [c20_binary] binary(512), [c21_varbinary] varbinary(512), [c22_varbinary_max] varbinary(max), [c23_image] image, [c24_uniqueidentifier] uniqueidentifier, [c25_datetime] datetime, [c26_smalldatetime] smalldatetime, [c27_timestamp] timestamp, [c28_xml] xml, [c29_time] time, [c30_date] date, [c31_datetime2] datetime2, [c32_datetimeoffset] datetimeoffset)"); + $stmt = sqlsrv_query($conn, "CREATE TABLE $tableName ([c1_int] int, [c2_tinyint] tinyint, [c3_smallint] smallint, [c4_bigint] bigint, [c5_bit] bit, [c6_float] float, [c7_real] real, [c8_decimal] decimal(28,4), [c9_numeric] numeric(32,4), [c10_money] money, [c11_smallmoney] smallmoney, [c12_char] char(512), [c13_varchar] varchar(512), [c14_varchar_max] varchar(max), [c15_nchar] nchar(512), [c16_nvarchar] nvarchar(512), [c17_nvarchar_max] nvarchar(max), [c18_text] text, [c19_ntext] ntext, [c20_binary] binary(512), [c21_varbinary] varbinary(512), [c22_varbinary_max] varbinary(max), [c23_image] image, [c24_uniqueidentifier] uniqueidentifier, [c25_datetime] datetime, [c26_smalldatetime] smalldatetime, [c27_xml] xml, [c28_time] time, [c29_date] date, [c30_datetime2] datetime2, [c31_datetimeoffset] datetimeoffset)"); sqlsrv_free_stmt($stmt); - $query = "INSERT INTO $tableName ([c1_int], [c2_tinyint], [c3_smallint], [c4_bigint], [c5_bit], [c6_float], [c7_real], [c8_decimal], [c9_numeric], [c10_money], [c11_smallmoney], [c12_char], [c13_varchar], [c14_varchar_max], [c15_nchar], [c16_nvarchar], [c17_nvarchar_max], [c18_text], [c19_ntext], [c20_binary], [c21_varbinary], [c22_varbinary_max], [c23_image], [c24_uniqueidentifier], [c25_datetime], [c26_smalldatetime], [c28_xml], [c29_time], [c30_date], [c31_datetime2], [c32_datetimeoffset]) VALUES ((-568632370), (210), (null), (-283756280), (0), (0), (1), (null), (0.1356), (0.4940), (null), ('oz@v|~_Ã¥CAC@OBhÜßUÃÃœBð~,Býh+Ä,öha_©hÃœUOßüðaAîª<Ã¥A+ÃU.Ö£/aa~bîßOð|>@_U**ÄÃÖvb/.£b¢,ßÖvððCßövzO£©AOããA/uu|aª+>:_a/£¢|.ÄßZýª@UzßBra/~röðU@Äîv:/a¢ÖööãÃ~bv*,_ä:ðüîÖî.+bä*b@.Cä>:+åüüÖz,ü/£öoUß.bᦙuªª¢OUz£bîA_aväOr:+ubÃ¥@*|üãªobauhhv£:_zßU>ãCbý~£ß:ÃœU:Z*Bvbu.Ã<ýîß.Ã¥auÃÃh|ýªhäu<üUü+¢uüÃãð'), (''), ('_aÖÃz©C~.bÜ£Ä<ÄOuAªUoÖC+©ãÃAbÄ_uAo:~,hîßã©~väªvuhÃZhããußî.b>öB@Ä|_ª_aCßBCß.>Oã@b~@Ã¥*..,rð©Ãýb/äÖoÃ¥ÃzýÃrAöraA/Ö¢bîað:uoZhh.¢*/ßAÄö©zZCObãZã.r,+ÃœOb£Bb@.@a~~oªCäªhozbÃœ/zðÄöbh,ÃœBÜߣ/ZßÄýO|hzÃ|a<Ä:uvAbvýÖÖÄ.B:vhU>ß,ÄvÄUah¢ärb@Bª*+£,ßÄUZob_©£ðÖªbChãÖ_/£¢ãCý|*uözÃ¥+zA¢öaä¢:äBß/uß|bu£Örð++/OÖ©r/,A>ååv/Ä,ß*ð'), (N'âCÃ¥/vhäÃ*CböOü+ÃÖ£@ÖßýðåruörzbÖ@£uÃCÃ¥b__å¢~öüªî:|îê£Üð£OarAO£.U+|züUUßÃBýåO.ýîª*>£/.hääzbðåã>*urz~.ZößrzOÃ.a>büãb_ÜãßOoz>oßZãz£©AÃ*ßãhªr~oö~öoßÃuãÃohZBZAvCãað>Ã¥'), (N''), (N'Öoaðð~v©Uª+z,Cbý~<@âAÃœ~AÃœr©©b@OOaðbãßU~a/b:îß:åä@Z~UUhÄ,/îo,¢ýObOh,OýhÃœrðÃOý*ÃuzzßoÖðööåuÃ/îBr.:ä+ãbÃä+_,z@öÃbÖ©äbßß/our@üZÃäBÃzÖCüüªu¢ößu|¢/ð@£ÃUUhª¢:r>:~Ã~£Ãvªrrªbßb¢:äarª¢ß~<£A¢ä~ÃCÃÖ_>ߢößö.ßýÜ/CÖ£BðBýuåÖðüö.ÃZ¢ªß@,ÃZüubbÃ¥büuüîu*ðü,©ã~Ü¢Ü~ãÃ_B£ßuovA/:ÃåäbBhî_öbÃbÃœzUðýö¢b_.,._Ãœ/oaߣOî>Z>ßß<¢ÃU¢ßö<*z|ZO*/,ðv><_zÃÃ_h/_oZAÖCr<ý*vܪ:b:C¢Ä¢zÃœ@|aý*vhîýÃ>+/ZbZßoýä/b£@îA<åªCß@BÖ£ÃaÜßð*b+_vuaÖ,ãã_£:+<ð>BzßUZåîýUãzvA,b_+ÄBU©aÄ>ÃœvZä©.Oß@©>hbÃœ>£Zü*Bb|ßoªðýÖßU/ZbÃœ_ª¢Cªv<@Ö+îî:~u<üÄ©¢/u>hUÃ./aUUObzUÃ¥ao+b£|ß:vÃåååA@@BÄãh**:ß*ªüä/AÃ¥~výå©ö||ªüöß_Z>OªbZ*|ãzbrî@,A><Ã¥bªZ¢åhã||oUO.|î@ã/+ßhÄzÃöîÃÜ:o_B>bÃöýåZub+:,:äÖ/Z¢ÖÄOäbhÃ+£îz,~@vr+ýCoýb¢ßhÄß|©_>Ä>z©Ã+*OorÜß,©a£Aªü<¢baý*:OÖ|uaA|öåO/ã,>Oª£ýOöÄý£~*>¢zÃ¥ÃîbÖä,z©b,ߢr.:~CðöOðÖ+öbýÄ>O_©<_ýUä:b_Cåö|ª.*>ªrau|ÃC'), (null), (null), (0x67BA39352C997C2AD4F838AEB77E41F5F8BA5AE8ADC431BCC669BF7EDD2F017479C06C748AA6C6A278C4B7CCD7BD1C4B4EA8DF38F474E3A3897D6FC3DAFD4CA5F6C434F611CD6B52F4B770E90D64E4084D732F344FC87F04DCC9EA0C3702C87A7712D5138925398139D2DB82F326EEBFC5765BADC4C132E20F0845790C3CDF7DEC3E622658BBD317EB36FC496D8C242842352DE23C82E7260B537E35E28EF1CA11), (0x553BE86540AB8F786FDB0D8DE0F03AD4815EADB43A8BB79F3D89833474C163DCEF9B97816045BE2F68AED271618FAD41241C48B32E1832C9834828B6275B04AD78319D4559B8743CA07E4C8CB9463EADDC420F5778AFADD769CDFE171D07070CA924F830F168E86CA80C13AFCCA5103C0A7ADAE54CAD35C883C6DB8CB95D1E99773FE3954E0EBB7359A2AE6B9CFE0AC3BDC20CA22C21C0FBEF2FAC2B8C54741E0B50278DD4A39902E64E2AC56B387E3339122E48D2DA220C1CB08AC8A3448735080B783A4BDDDAEA95264166B58390411F3C069F25F8CD324459A7C8E2659E5398405C2CDD3E6B20808A97728162F7A8A0135CE213A4F4F79654F05082639571E9EECD74276464E0D0E61E9B605AB1E161FF28CF08BC40F34C6496894E1B9E1DF42589939483803CAF7B112D8658973BA30FEF823BC6692DADDA28C3CDDC38FA724EDED033A5A72C0A71DD102D3A0BA7CE45234A4A100A421561FE5E9F250361C993375AD53C7461A0BFBBC9BB91A1362AB0D), (0x8FEB052348CCAD1A7589CD56E7B469A02B0D291C0C1999A64408673B0C823DE597608DAD2E526486192BA5812D65B405B073369EE39BC875525EDF3F64710DF24BE8BF8627BB72D9A8A202E0741779DE54628B994C9F01FC97175BCF722522A81DB23644A62DDEF4015DF64098E7013AE501EA02E674A6ACE7C2EF0F5FA26683805AC3C1E1343727849698EEA8C063AF1620E9713A1FC1A90C895DE43DCE955EF773C03D243F59B0C9C37E50DCB703265E3FF83FB8F449609819B557D752E9B50139F63500268BD7C738A776A171CC54853685FED655A503295FA40A8902D976D9C94FA2C0CD2638B420777F4CD2BF274D60D1A1CDEBDEAB93F30CA181804DC45F309DD8222993B5AE683E06857AF8408DC03C385662F1936F3FE433DF61E75E76F5363B734B98B4A7B8D584617DC757FFBF7F38BDF99E23E80070DE8C85364D80DF908F43BCCD412887909D8C6D32F2778D3420E2AFA17C56135373DAB9272282880381ED371343F23D0F356901967BCE7E66FF50166BD13D133930685A666E606E1B0469B0054079F02DA49F6B12557CD8A45C5228D16C1C3144D9FDE3DA97D6A0D5FBE592111D78268560E8C732D101E4B390B50A1C), ('e9428c59-d5df-465a-ace1-966de0e6fbfc'), (null), ('1900-01-01 00:00:00'), ('3/30/2017 12:56:46 PMThe quick brown fox jumps over the lazy dog0123456789,.;:?[]{}()-+*\%^=~!@#_|/003/30/2017 12:56:46 PMThe quick brown fox jumps over the lazy dog0123456789,.;:?[]{}()-+*\%^=~!@#_|/00'), ('07:59:20.5782606'), ('0001-01-01'), ('5069-08-25 07:44:15.8923898'), ('2001-01-01 12:00:01.0000000+00:00'))"; + $query = "INSERT INTO $tableName ([c1_int], [c2_tinyint], [c3_smallint], [c4_bigint], [c5_bit], [c6_float], [c7_real], [c8_decimal], [c9_numeric], [c10_money], [c11_smallmoney], [c12_char], [c13_varchar], [c14_varchar_max], [c15_nchar], [c16_nvarchar], [c17_nvarchar_max], [c18_text], [c19_ntext], [c20_binary], [c21_varbinary], [c22_varbinary_max], [c23_image], [c24_uniqueidentifier], [c25_datetime], [c26_smalldatetime], [c27_xml], [c28_time], [c29_date], [c30_datetime2], [c31_datetimeoffset]) VALUES ((-568632370), (210), (null), (-283756280), (0), (0), (1), (null), (0.1356), (0.4940), (null), ('oz@v|~_Ã¥CAC@OBhÜßUÃÃœBð~,Býh+Ä,öha_©hÃœUOßüðaAîª<Ã¥A+ÃU.Ö£/aa~bîßOð|>@_U**ÄÃÖvb/.£b¢,ßÖvððCßövzO£©AOããA/uu|aª+>:_a/£¢|.ÄßZýª@UzßBra/~röðU@Äîv:/a¢ÖööãÃ~bv*,_ä:ðüîÖî.+bä*b@.Cä>:+åüüÖz,ü/£öoUß.bᦙuªª¢OUz£bîA_aväOr:+ubÃ¥@*|üãªobauhhv£:_zßU>ãCbý~£ß:ÃœU:Z*Bvbu.Ã<ýîß.Ã¥auÃÃh|ýªhäu<üUü+¢uüÃãð'), (''), ('_aÖÃz©C~.bÜ£Ä<ÄOuAªUoÖC+©ãÃAbÄ_uAo:~,hîßã©~väªvuhÃZhããußî.b>öB@Ä|_ª_aCßBCß.>Oã@b~@Ã¥*..,rð©Ãýb/äÖoÃ¥ÃzýÃrAöraA/Ö¢bîað:uoZhh.¢*/ßAÄö©zZCObãZã.r,+ÃœOb£Bb@.@a~~oªCäªhozbÃœ/zðÄöbh,ÃœBÜߣ/ZßÄýO|hzÃ|a<Ä:uvAbvýÖÖÄ.B:vhU>ß,ÄvÄUah¢ärb@Bª*+£,ßÄUZob_©£ðÖªbChãÖ_/£¢ãCý|*uözÃ¥+zA¢öaä¢:äBß/uß|bu£Örð++/OÖ©r/,A>ååv/Ä,ß*ð'), (N'âCÃ¥/vhäÃ*CböOü+ÃÖ£@ÖßýðåruörzbÖ@£uÃCÃ¥b__å¢~öüªî:|îê£Üð£OarAO£.U+|züUUßÃBýåO.ýîª*>£/.hääzbðåã>*urz~.ZößrzOÃ.a>büãb_ÜãßOoz>oßZãz£©AÃ*ßãhªr~oö~öoßÃuãÃohZBZAvCãað>Ã¥'), (N''), (N'Öoaðð~v©Uª+z,Cbý~<@âAÃœ~AÃœr©©b@OOaðbãßU~a/b:îß:åä@Z~UUhÄ,/îo,¢ýObOh,OýhÃœrðÃOý*ÃuzzßoÖðööåuÃ/îBr.:ä+ãbÃä+_,z@öÃbÖ©äbßß/our@üZÃäBÃzÖCüüªu¢ößu|¢/ð@£ÃUUhª¢:r>:~Ã~£Ãvªrrªbßb¢:äarª¢ß~<£A¢ä~ÃCÃÖ_>ߢößö.ßýÜ/CÖ£BðBýuåÖðüö.ÃZ¢ªß@,ÃZüubbÃ¥büuüîu*ðü,©ã~Ü¢Ü~ãÃ_B£ßuovA/:ÃåäbBhî_öbÃbÃœzUðýö¢b_.,._Ãœ/oaߣOî>Z>ßß<¢ÃU¢ßö<*z|ZO*/,ðv><_zÃÃ_h/_oZAÖCr<ý*vܪ:b:C¢Ä¢zÃœ@|aý*vhîýÃ>+/ZbZßoýä/b£@îA<åªCß@BÖ£ÃaÜßð*b+_vuaÖ,ãã_£:+<ð>BzßUZåîýUãzvA,b_+ÄBU©aÄ>ÃœvZä©.Oß@©>hbÃœ>£Zü*Bb|ßoªðýÖßU/ZbÃœ_ª¢Cªv<@Ö+îî:~u<üÄ©¢/u>hUÃ./aUUObzUÃ¥ao+b£|ß:vÃåååA@@BÄãh**:ß*ªüä/AÃ¥~výå©ö||ªüöß_Z>OªbZ*|ãzbrî@,A><Ã¥bªZ¢åhã||oUO.|î@ã/+ßhÄzÃöîÃÜ:o_B>bÃöýåZub+:,:äÖ/Z¢ÖÄOäbhÃ+£îz,~@vr+ýCoýb¢ßhÄß|©_>Ä>z©Ã+*OorÜß,©a£Aªü<¢baý*:OÖ|uaA|öåO/ã,>Oª£ýOöÄý£~*>¢zÃ¥ÃîbÖä,z©b,ߢr.:~CðöOðÖ+öbýÄ>O_©<_ýUä:b_Cåö|ª.*>ªrau|ÃC'), (null), (null), (0x67BA39352C997C2AD4F838AEB77E41F5F8BA5AE8ADC431BCC669BF7EDD2F017479C06C748AA6C6A278C4B7CCD7BD1C4B4EA8DF38F474E3A3897D6FC3DAFD4CA5F6C434F611CD6B52F4B770E90D64E4084D732F344FC87F04DCC9EA0C3702C87A7712D5138925398139D2DB82F326EEBFC5765BADC4C132E20F0845790C3CDF7DEC3E622658BBD317EB36FC496D8C242842352DE23C82E7260B537E35E28EF1CA11), (0x553BE86540AB8F786FDB0D8DE0F03AD4815EADB43A8BB79F3D89833474C163DCEF9B97816045BE2F68AED271618FAD41241C48B32E1832C9834828B6275B04AD78319D4559B8743CA07E4C8CB9463EADDC420F5778AFADD769CDFE171D07070CA924F830F168E86CA80C13AFCCA5103C0A7ADAE54CAD35C883C6DB8CB95D1E99773FE3954E0EBB7359A2AE6B9CFE0AC3BDC20CA22C21C0FBEF2FAC2B8C54741E0B50278DD4A39902E64E2AC56B387E3339122E48D2DA220C1CB08AC8A3448735080B783A4BDDDAEA95264166B58390411F3C069F25F8CD324459A7C8E2659E5398405C2CDD3E6B20808A97728162F7A8A0135CE213A4F4F79654F05082639571E9EECD74276464E0D0E61E9B605AB1E161FF28CF08BC40F34C6496894E1B9E1DF42589939483803CAF7B112D8658973BA30FEF823BC6692DADDA28C3CDDC38FA724EDED033A5A72C0A71DD102D3A0BA7CE45234A4A100A421561FE5E9F250361C993375AD53C7461A0BFBBC9BB91A1362AB0D), (0x8FEB052348CCAD1A7589CD56E7B469A02B0D291C0C1999A64408673B0C823DE597608DAD2E526486192BA5812D65B405B073369EE39BC875525EDF3F64710DF24BE8BF8627BB72D9A8A202E0741779DE54628B994C9F01FC97175BCF722522A81DB23644A62DDEF4015DF64098E7013AE501EA02E674A6ACE7C2EF0F5FA26683805AC3C1E1343727849698EEA8C063AF1620E9713A1FC1A90C895DE43DCE955EF773C03D243F59B0C9C37E50DCB703265E3FF83FB8F449609819B557D752E9B50139F63500268BD7C738A776A171CC54853685FED655A503295FA40A8902D976D9C94FA2C0CD2638B420777F4CD2BF274D60D1A1CDEBDEAB93F30CA181804DC45F309DD8222993B5AE683E06857AF8408DC03C385662F1936F3FE433DF61E75E76F5363B734B98B4A7B8D584617DC757FFBF7F38BDF99E23E80070DE8C85364D80DF908F43BCCD412887909D8C6D32F2778D3420E2AFA17C56135373DAB9272282880381ED371343F23D0F356901967BCE7E66FF50166BD13D133930685A666E606E1B0469B0054079F02DA49F6B12557CD8A45C5228D16C1C3144D9FDE3DA97D6A0D5FBE592111D78268560E8C732D101E4B390B50A1C), ('e9428c59-d5df-465a-ace1-966de0e6fbfc'), (null), ('1900-01-01 00:00:00'), ('3/30/2017 12:56:46 PMThe quick brown fox jumps over the lazy dog0123456789,.;:?[]{}()-+*\%^=~!@#_|/003/30/2017 12:56:46 PMThe quick brown fox jumps over the lazy dog0123456789,.;:?[]{}()-+*\%^=~!@#_|/00'), ('07:59:20.5782606'), ('0001-01-01'), ('5069-08-25 07:44:15.8923898'), ('2001-01-01 12:00:01.0000000+00:00'))"; $stmt = sqlsrv_query($conn, $query); } @@ -95,7 +95,6 @@ Failed in field 27 Failed in field 28 Failed in field 29 Failed in field 30 -Failed in field 31 Fetch all as floats... Failed in field 11 Failed in field 13 @@ -114,7 +113,6 @@ Failed in field 27 Failed in field 28 Failed in field 29 Failed in field 30 -Failed in field 31 Fetch all as datetimes... Failed in field 0 Failed in field 1 @@ -129,7 +127,6 @@ Failed in field 21 Failed in field 22 Failed in field 23 Failed in field 26 -Failed in field 27 Done Test "sqlsrv_fetch_invalid_types" completed successfully. \ No newline at end of file diff --git a/test/sqlsrv/sqlsrv_fetch_missing_row.phpt b/test/functional/sqlsrv/sqlsrv_fetch_missing_row.phpt similarity index 100% rename from test/sqlsrv/sqlsrv_fetch_missing_row.phpt rename to test/functional/sqlsrv/sqlsrv_fetch_missing_row.phpt diff --git a/test/sqlsrv/sqlsrv_fetch_object.phpt b/test/functional/sqlsrv/sqlsrv_fetch_object.phpt similarity index 100% rename from test/sqlsrv/sqlsrv_fetch_object.phpt rename to test/functional/sqlsrv/sqlsrv_fetch_object.phpt diff --git a/test/sqlsrv/sqlsrv_fetch_object_2.phpt b/test/functional/sqlsrv/sqlsrv_fetch_object_2.phpt similarity index 100% rename from test/sqlsrv/sqlsrv_fetch_object_2.phpt rename to test/functional/sqlsrv/sqlsrv_fetch_object_2.phpt diff --git a/test/sqlsrv/sqlsrv_fetch_object_class.phpt b/test/functional/sqlsrv/sqlsrv_fetch_object_class.phpt similarity index 100% rename from test/sqlsrv/sqlsrv_fetch_object_class.phpt rename to test/functional/sqlsrv/sqlsrv_fetch_object_class.phpt diff --git a/test/sqlsrv/sqlsrv_fetch_object_unicode_col_name1.phpt b/test/functional/sqlsrv/sqlsrv_fetch_object_unicode_col_name1.phpt similarity index 100% rename from test/sqlsrv/sqlsrv_fetch_object_unicode_col_name1.phpt rename to test/functional/sqlsrv/sqlsrv_fetch_object_unicode_col_name1.phpt diff --git a/test/sqlsrv/sqlsrv_fetch_object_unicode_col_name2.phpt b/test/functional/sqlsrv/sqlsrv_fetch_object_unicode_col_name2.phpt similarity index 100% rename from test/sqlsrv/sqlsrv_fetch_object_unicode_col_name2.phpt rename to test/functional/sqlsrv/sqlsrv_fetch_object_unicode_col_name2.phpt diff --git a/test/sqlsrv/sqlsrv_get_config.phpt b/test/functional/sqlsrv/sqlsrv_get_config.phpt similarity index 100% rename from test/sqlsrv/sqlsrv_get_config.phpt rename to test/functional/sqlsrv/sqlsrv_get_config.phpt diff --git a/test/sqlsrv/sqlsrv_get_field.phpt b/test/functional/sqlsrv/sqlsrv_get_field.phpt similarity index 100% rename from test/sqlsrv/sqlsrv_get_field.phpt rename to test/functional/sqlsrv/sqlsrv_get_field.phpt diff --git a/test/sqlsrv/sqlsrv_input_param_unknown_encoding.phpt b/test/functional/sqlsrv/sqlsrv_input_param_unknown_encoding.phpt similarity index 100% rename from test/sqlsrv/sqlsrv_input_param_unknown_encoding.phpt rename to test/functional/sqlsrv/sqlsrv_input_param_unknown_encoding.phpt diff --git a/test/sqlsrv/sqlsrv_katmai_special_types.phpt b/test/functional/sqlsrv/sqlsrv_katmai_special_types.phpt similarity index 100% rename from test/sqlsrv/sqlsrv_katmai_special_types.phpt rename to test/functional/sqlsrv/sqlsrv_katmai_special_types.phpt diff --git a/test/sqlsrv/sqlsrv_metadata.phpt b/test/functional/sqlsrv/sqlsrv_metadata.phpt similarity index 100% rename from test/sqlsrv/sqlsrv_metadata.phpt rename to test/functional/sqlsrv/sqlsrv_metadata.phpt diff --git a/test/sqlsrv/sqlsrv_metadata_unicode_col_name1.phpt b/test/functional/sqlsrv/sqlsrv_metadata_unicode_col_name1.phpt similarity index 100% rename from test/sqlsrv/sqlsrv_metadata_unicode_col_name1.phpt rename to test/functional/sqlsrv/sqlsrv_metadata_unicode_col_name1.phpt diff --git a/test/sqlsrv/sqlsrv_metadata_unicode_col_name2.phpt b/test/functional/sqlsrv/sqlsrv_metadata_unicode_col_name2.phpt similarity index 100% rename from test/sqlsrv/sqlsrv_metadata_unicode_col_name2.phpt rename to test/functional/sqlsrv/sqlsrv_metadata_unicode_col_name2.phpt diff --git a/test/sqlsrv/sqlsrv_num_fields.phpt b/test/functional/sqlsrv/sqlsrv_num_fields.phpt similarity index 100% rename from test/sqlsrv/sqlsrv_num_fields.phpt rename to test/functional/sqlsrv/sqlsrv_num_fields.phpt diff --git a/test/sqlsrv/sqlsrv_num_rows.phpt b/test/functional/sqlsrv/sqlsrv_num_rows.phpt similarity index 100% rename from test/sqlsrv/sqlsrv_num_rows.phpt rename to test/functional/sqlsrv/sqlsrv_num_rows.phpt diff --git a/test/sqlsrv/sqlsrv_param_floats.phpt b/test/functional/sqlsrv/sqlsrv_param_floats.phpt similarity index 100% rename from test/sqlsrv/sqlsrv_param_floats.phpt rename to test/functional/sqlsrv/sqlsrv_param_floats.phpt diff --git a/test/sqlsrv/sqlsrv_param_input_variants.phpt b/test/functional/sqlsrv/sqlsrv_param_input_variants.phpt similarity index 100% rename from test/sqlsrv/sqlsrv_param_input_variants.phpt rename to test/functional/sqlsrv/sqlsrv_param_input_variants.phpt diff --git a/test/sqlsrv/sqlsrv_param_ints_with_deletes.phpt b/test/functional/sqlsrv/sqlsrv_param_ints_with_deletes.phpt similarity index 100% rename from test/sqlsrv/sqlsrv_param_ints_with_deletes.phpt rename to test/functional/sqlsrv/sqlsrv_param_ints_with_deletes.phpt diff --git a/test/sqlsrv/sqlsrv_param_output_variants.phpt b/test/functional/sqlsrv/sqlsrv_param_output_variants.phpt similarity index 100% rename from test/sqlsrv/sqlsrv_param_output_variants.phpt rename to test/functional/sqlsrv/sqlsrv_param_output_variants.phpt diff --git a/test/sqlsrv/sqlsrv_param_query_array_inputs.phpt b/test/functional/sqlsrv/sqlsrv_param_query_array_inputs.phpt similarity index 100% rename from test/sqlsrv/sqlsrv_param_query_array_inputs.phpt rename to test/functional/sqlsrv/sqlsrv_param_query_array_inputs.phpt diff --git a/test/sqlsrv/sqlsrv_param_query_data_types.phpt b/test/functional/sqlsrv/sqlsrv_param_query_data_types.phpt similarity index 100% rename from test/sqlsrv/sqlsrv_param_query_data_types.phpt rename to test/functional/sqlsrv/sqlsrv_param_query_data_types.phpt diff --git a/test/sqlsrv/sqlsrv_param_query_errors.phpt b/test/functional/sqlsrv/sqlsrv_param_query_errors.phpt similarity index 100% rename from test/sqlsrv/sqlsrv_param_query_errors.phpt rename to test/functional/sqlsrv/sqlsrv_param_query_errors.phpt diff --git a/test/sqlsrv/sqlsrv_param_query_invalid_inputs.phpt b/test/functional/sqlsrv/sqlsrv_param_query_invalid_inputs.phpt similarity index 100% rename from test/sqlsrv/sqlsrv_param_query_invalid_inputs.phpt rename to test/functional/sqlsrv/sqlsrv_param_query_invalid_inputs.phpt diff --git a/test/sqlsrv/sqlsrv_prepare.phpt b/test/functional/sqlsrv/sqlsrv_prepare.phpt similarity index 100% rename from test/sqlsrv/sqlsrv_prepare.phpt rename to test/functional/sqlsrv/sqlsrv_prepare.phpt diff --git a/test/sqlsrv/sqlsrv_prepareAndExecute.phpt b/test/functional/sqlsrv/sqlsrv_prepareAndExecute.phpt similarity index 100% rename from test/sqlsrv/sqlsrv_prepareAndExecute.phpt rename to test/functional/sqlsrv/sqlsrv_prepareAndExecute.phpt diff --git a/test/sqlsrv/sqlsrv_query.phpt b/test/functional/sqlsrv/sqlsrv_query.phpt similarity index 100% rename from test/sqlsrv/sqlsrv_query.phpt rename to test/functional/sqlsrv/sqlsrv_query.phpt diff --git a/test/sqlsrv/sqlsrv_readStream.phpt b/test/functional/sqlsrv/sqlsrv_readStream.phpt similarity index 100% rename from test/sqlsrv/sqlsrv_readStream.phpt rename to test/functional/sqlsrv/sqlsrv_readStream.phpt diff --git a/test/sqlsrv/sqlsrv_rowsAffected.phpt b/test/functional/sqlsrv/sqlsrv_rowsAffected.phpt similarity index 100% rename from test/sqlsrv/sqlsrv_rowsAffected.phpt rename to test/functional/sqlsrv/sqlsrv_rowsAffected.phpt diff --git a/test/sqlsrv/sqlsrv_send_stream_data.phpt b/test/functional/sqlsrv/sqlsrv_send_stream_data.phpt similarity index 100% rename from test/sqlsrv/sqlsrv_send_stream_data.phpt rename to test/functional/sqlsrv/sqlsrv_send_stream_data.phpt diff --git a/test/sqlsrv/sqlsrv_serverInfo.phpt b/test/functional/sqlsrv/sqlsrv_serverInfo.phpt similarity index 100% rename from test/sqlsrv/sqlsrv_serverInfo.phpt rename to test/functional/sqlsrv/sqlsrv_serverInfo.phpt diff --git a/test/sqlsrv/sqlsrv_simple_fetch_variants.phpt b/test/functional/sqlsrv/sqlsrv_simple_fetch_variants.phpt similarity index 100% rename from test/sqlsrv/sqlsrv_simple_fetch_variants.phpt rename to test/functional/sqlsrv/sqlsrv_simple_fetch_variants.phpt diff --git a/test/sqlsrv/sqlsrv_simple_update_variants.phpt b/test/functional/sqlsrv/sqlsrv_simple_update_variants.phpt similarity index 100% rename from test/sqlsrv/sqlsrv_simple_update_variants.phpt rename to test/functional/sqlsrv/sqlsrv_simple_update_variants.phpt diff --git a/test/sqlsrv/sqlsrv_statement_cancel.phpt b/test/functional/sqlsrv/sqlsrv_statement_cancel.phpt similarity index 100% rename from test/sqlsrv/sqlsrv_statement_cancel.phpt rename to test/functional/sqlsrv/sqlsrv_statement_cancel.phpt diff --git a/test/sqlsrv/sqlsrv_statement_query_timeout.phpt b/test/functional/sqlsrv/sqlsrv_statement_query_timeout.phpt similarity index 100% rename from test/sqlsrv/sqlsrv_statement_query_timeout.phpt rename to test/functional/sqlsrv/sqlsrv_statement_query_timeout.phpt diff --git a/test/sqlsrv/sqlsrv_statement_query_timeout_transaction.phpt b/test/functional/sqlsrv/sqlsrv_statement_query_timeout_transaction.phpt similarity index 100% rename from test/sqlsrv/sqlsrv_statement_query_timeout_transaction.phpt rename to test/functional/sqlsrv/sqlsrv_statement_query_timeout_transaction.phpt diff --git a/test/sqlsrv/sqlsrv_stmt_option_invalid_key.phpt b/test/functional/sqlsrv/sqlsrv_stmt_option_invalid_key.phpt similarity index 100% rename from test/sqlsrv/sqlsrv_stmt_option_invalid_key.phpt rename to test/functional/sqlsrv/sqlsrv_stmt_option_invalid_key.phpt diff --git a/test/sqlsrv/sqlsrv_stored_proc_varchar.phpt b/test/functional/sqlsrv/sqlsrv_stored_proc_varchar.phpt similarity index 100% rename from test/sqlsrv/sqlsrv_stored_proc_varchar.phpt rename to test/functional/sqlsrv/sqlsrv_stored_proc_varchar.phpt diff --git a/test/sqlsrv/sqlsrv_str_streams.phpt b/test/functional/sqlsrv/sqlsrv_str_streams.phpt similarity index 100% rename from test/sqlsrv/sqlsrv_str_streams.phpt rename to test/functional/sqlsrv/sqlsrv_str_streams.phpt diff --git a/test/sqlsrv/sqlsrv_streams_empty_char.phpt b/test/functional/sqlsrv/sqlsrv_streams_empty_char.phpt similarity index 100% rename from test/sqlsrv/sqlsrv_streams_empty_char.phpt rename to test/functional/sqlsrv/sqlsrv_streams_empty_char.phpt diff --git a/test/sqlsrv/sqlsrv_streams_null_binary.phpt b/test/functional/sqlsrv/sqlsrv_streams_null_binary.phpt similarity index 100% rename from test/sqlsrv/sqlsrv_streams_null_binary.phpt rename to test/functional/sqlsrv/sqlsrv_streams_null_binary.phpt diff --git a/test/sqlsrv/sqlsrv_streams_null_nchar.phpt b/test/functional/sqlsrv/sqlsrv_streams_null_nchar.phpt similarity index 100% rename from test/sqlsrv/sqlsrv_streams_null_nchar.phpt rename to test/functional/sqlsrv/sqlsrv_streams_null_nchar.phpt diff --git a/test/functional/sqlsrv/sqlsrv_testConnection.phpt b/test/functional/sqlsrv/sqlsrv_testConnection.phpt new file mode 100644 index 00000000..9d6da98c --- /dev/null +++ b/test/functional/sqlsrv/sqlsrv_testConnection.phpt @@ -0,0 +1,306 @@ +--TEST-- +variety of connection parameters. +--SKIPIF-- + +--FILE-- + '', 'PWD' => '')); + + if( !$conn ) { + var_dump( sqlsrv_errors() ); + } + sqlsrv_close( $conn ); + + echo "Test sqlsrv_connect( , array( 'UID' => 'sa', 'PWD' ))\n"; + $conn = connect(array( 'UID' => 'sa' )); + + if( !$conn ) { + var_dump( sqlsrv_errors() ); + } + sqlsrv_close( $conn ); + + echo "Test sqlsrv_connect( , array( 'UID' => 'sa', 'PWD', 'Driver' => 'SQL Server Native Client 11.0' ))\n"; + $conn = connect(array( 'UID' => 'sa', 'PWD' => '', 'Driver' => 'SQL Server Native Client 11.0' )); + + if( !$conn ) { + var_dump( sqlsrv_errors() ); + } + else { + sqlsrv_close( $conn ); + die( "Shouldn't have opened the connection." ); + } + + echo "Test sqlsrv_connect with driver injection\n"; + + $conn = sqlsrv_connect( $server, array( "UID" => "sa", "PWD" => "$pwd;Driver={SQL Server Native Client 11.0}}" )); + + if( !$conn ) { + var_dump( sqlsrv_errors() ); + } + else { + sqlsrv_close( $conn ); + die( "Shouldn't have opened the connection." ); + } + + echo "Test sqlsrv_connect with driver injection (2)\n"; + $conn = sqlsrv_connect( $server, array( "UID" => "sa", "PWD" => "{$pwd};Driver={SQL Server Native Client 11.0}" )); + + if( !$conn ) { + var_dump( sqlsrv_errors() ); + } + else { + sqlsrv_close( $conn ); + die( "Shouldn't have opened the connection." ); + } + + echo "Test sqlsrv_connect with driver injection (3)\n"; + $conn = sqlsrv_connect( $server, array( "UID" => "sa", "PWD" => "{$pwd}};Driver={SQL Server Native Client 11.0}" )); + + if( !$conn ) { + var_dump( sqlsrv_errors() ); + } + else { + sqlsrv_close( $conn ); + die( "Shouldn't have opened the connection." ); + } + + // Test a bunch of options. The Failover_Partner keyword does not work + // on Unix, so we replace it with MultiSubnetFailover instead. + $conn_options_all = array( "APP" => "PHP Unit Test", + "ConnectionPooling" => true, + "Database" => $databaseName, + "Encrypt" => 0, + "LoginTimeout" => 120, + "MultipleActiveResultSets" => false, + "QuotedId" => false, + "TraceOn" => true, + "TraceFile" => "trace.odbc", + "TransactionIsolation" => SQLSRV_TXN_READ_COMMITTED, + "TrustServerCertificate" => 1, + "WSID" => "JAYKINT1" ); + $conn_options_int = array( "APP" => "PHP Unit Test", + "ConnectionPooling" => false, + "Database" => $databaseName, + "Encrypt" => 0, + "LoginTimeout" => 120, + "MultipleActiveResultSets" => false, + "QuotedId" => true, + "TraceOn" => true, + "TraceFile" => "trace.odbc", + "TransactionIsolation" => SQLSRV_TXN_READ_COMMITTED, + "TrustServerCertificate" => 1, + "WSID" => "JAYKINT1" ); + + if ( strtoupper( substr( php_uname( 's' ),0,3 ) ) === 'WIN' ) + { + echo "Test sqlsrv_connect with all options\n"; + $conn_options_all['Failover_Partner'] = "(local)"; + $conn = connect($conn_options_all); + print_r( sqlsrv_errors()[0] ); + print_r( sqlsrv_errors()[1] ); + if( $conn === false ) { + die( print_r( sqlsrv_errors(), true )); + } + + echo "Test sqlsrv_connect with all options and integrated auth\n"; + $conn_options_int['Failover_Partner'] = "(local)"; + $conn = connect($conn_options_int); + print_r( sqlsrv_errors()[0] ); + print_r( sqlsrv_errors()[1] ); + if( $conn === false ) { + die( print_r( sqlsrv_errors(), true )); + } + } + else + { + echo "Test sqlsrv_connect with all options\n"; + $conn_options_all['MultiSubnetFailover'] = true; + $conn = connect($conn_options_all); + print_r( sqlsrv_errors()[0] ); + print_r( sqlsrv_errors()[1] ); + if( $conn === false ) { + die( print_r( sqlsrv_errors(), true )); + } + + echo "Test sqlsrv_connect with all options and integrated auth\n"; + $conn_options_int['MultiSubnetFailover'] = true; + $conn = connect($conn_options_int); + print_r( sqlsrv_errors()[0] ); + print_r( sqlsrv_errors()[1] ); + if( $conn === false ) { + die( print_r( sqlsrv_errors(), true )); + } + } + + + // test brackets around a value + $conn = connect(array( 'APP' => '{Ltm.exe}' )); + if( $conn === false ) { + die( print_r( sqlsrv_errors(), true )); + } + + sqlsrv_close( $conn ); + echo "Test succeeded.\n"; +?> +--EXPECTREGEX-- +Test sqlsrv_connect with integrated authentication +Test sqlsrv_connect with integrated authentication and parameters +Test sqlsrv_connect\( .*, array\( 'UID' => '.*', 'PWD' \)\) +Test sqlsrv_connect\( .*, array\( 'UID' => '.*', 'PWD', 'Driver' => '.*' \)\) +array\(1\) \{ + \[0\]=> + array\(6\) \{ + \[0\]=> + string\(5\) "IMSSP" + \["SQLSTATE"\]=> + string\(5\) "IMSSP" + \[1\]=> + int\(-1\) + \["code"\]=> + int\(-1\) + \[2\]=> + string\([0-9]+\) "Invalid option .* was passed to sqlsrv_connect." + \["message"\]=> + string\([0-9]+\) "Invalid option .* was passed to sqlsrv_connect." + \} +\} +Test sqlsrv_connect with driver injection +array\(2\) \{ + \[0\]=> + array\(6\) \{ + \[0\]=> + string\(5\) "28000" + \["SQLSTATE"\]=> + string\(5\) "28000" + \[1\]=> + int\(18456\) + \["code"\]=> + int\(18456\) + \[2\]=> + string\(81\) ".*Login failed for user 'sa'." + \["message"\]=> + string\(81\) ".*Login failed for user 'sa'." + \} + \[1\]=> + array\(6\) \{ + \[0\]=> + string\(5\) "28000" + \["SQLSTATE"\]=> + string\(5\) "28000" + \[1\]=> + int\(18456\) + \["code"\]=> + int\(18456\) + \[2\]=> + string\(81\) ".*Login failed for user 'sa'." + \["message"\]=> + string\(81\) ".*Login failed for user 'sa'." + } +} +Test sqlsrv_connect with driver injection \(2\) +array\(1\) \{ + \[0\]=> + array\(6\) \{ + \[0\]=> + string\(5\) "IMSSP" + \["SQLSTATE"\]=> + string\(5\) "IMSSP" + \[1\]=> + int\(-4\) + \["code"\]=> + int\(-4\) + \[2\]=> + string\(140\) "An unescaped right brace \(\}\) was found in either the user name or password. All right braces must be escaped with another right brace \(\}\}\)." + \["message"\]=> + string\(140\) "An unescaped right brace \(\}\) was found in either the user name or password. All right braces must be escaped with another right brace \(\}\}\)." + \} +\} +Test sqlsrv_connect with driver injection \(3\) +array\(1\) \{ + \[0\]=> + array\(6\) \{ + \[0\]=> + string\(5\) "IMSSP" + \["SQLSTATE"\]=> + string\(5\) "IMSSP" + \[1\]=> + int\(-4\) + \["code"\]=> + int\(-4\) + \[2\]=> + string\(140\) "An unescaped right brace \(\}\) was found in either the user name or password. All right braces must be escaped with another right brace \(\}\}\)." + \["message"\]=> + string\(140\) "An unescaped right brace \(\}\) was found in either the user name or password. All right braces must be escaped with another right brace \(\}\}\)." + \} +\} +Test sqlsrv_connect with all options +Array +\( + \[0\] => 01000 + \[SQLSTATE\] => 01000 + \[1\] => 5701 + \[code\] => 5701 + \[2\] => .*Changed database context to '.*'. + \[message\] => .*Changed database context to '.*'. +\) +Array +\( + \[0\] => 01000 + \[SQLSTATE\] => 01000 + \[1\] => 5703 + \[code\] => 5703 + \[2\] => .*Changed language setting to us_english. + \[message\] => .*Changed language setting to us_english. +\) +Test sqlsrv_connect with all options and integrated auth +Array +\( + \[0\] => 01000 + \[SQLSTATE\] => 01000 + \[1\] => 5701 + \[code\] => 5701 + \[2\] => .*Changed database context to '.*'. + \[message\] => .*Changed database context to '.*'. +\) +Array +\( + \[0\] => 01000 + \[SQLSTATE\] => 01000 + \[1\] => 5703 + \[code\] => 5703 + \[2\] => .*Changed language setting to us_english. + \[message\] => .*Changed language setting to us_english. +\) +Test succeeded. diff --git a/test/sqlsrv/sqlsrv_test_base.inc b/test/functional/sqlsrv/sqlsrv_test_base.inc similarity index 100% rename from test/sqlsrv/sqlsrv_test_base.inc rename to test/functional/sqlsrv/sqlsrv_test_base.inc diff --git a/test/sqlsrv/srv_001.phpt b/test/functional/sqlsrv/srv_001.phpt similarity index 100% rename from test/sqlsrv/srv_001.phpt rename to test/functional/sqlsrv/srv_001.phpt diff --git a/test/sqlsrv/srv_002.phpt b/test/functional/sqlsrv/srv_002.phpt similarity index 100% rename from test/sqlsrv/srv_002.phpt rename to test/functional/sqlsrv/srv_002.phpt diff --git a/test/sqlsrv/srv_007_login_timeout.phpt b/test/functional/sqlsrv/srv_007_login_timeout.phpt similarity index 100% rename from test/sqlsrv/srv_007_login_timeout.phpt rename to test/functional/sqlsrv/srv_007_login_timeout.phpt diff --git a/test/sqlsrv/srv_009_connect_app_unicode.phpt b/test/functional/sqlsrv/srv_009_connect_app_unicode.phpt similarity index 100% rename from test/sqlsrv/srv_009_connect_app_unicode.phpt rename to test/functional/sqlsrv/srv_009_connect_app_unicode.phpt diff --git a/test/sqlsrv/srv_011_temporary_table.phpt b/test/functional/sqlsrv/srv_011_temporary_table.phpt similarity index 100% rename from test/sqlsrv/srv_011_temporary_table.phpt rename to test/functional/sqlsrv/srv_011_temporary_table.phpt diff --git a/test/sqlsrv/srv_012_sqlsrv_fetch_array.phpt b/test/functional/sqlsrv/srv_012_sqlsrv_fetch_array.phpt similarity index 100% rename from test/sqlsrv/srv_012_sqlsrv_fetch_array.phpt rename to test/functional/sqlsrv/srv_012_sqlsrv_fetch_array.phpt diff --git a/test/sqlsrv/srv_013_sqlsrv_get_field.phpt b/test/functional/sqlsrv/srv_013_sqlsrv_get_field.phpt similarity index 100% rename from test/sqlsrv/srv_013_sqlsrv_get_field.phpt rename to test/functional/sqlsrv/srv_013_sqlsrv_get_field.phpt diff --git a/test/sqlsrv/srv_014_sqlsrv_get_field.phpt b/test/functional/sqlsrv/srv_014_sqlsrv_get_field.phpt similarity index 100% rename from test/sqlsrv/srv_014_sqlsrv_get_field.phpt rename to test/functional/sqlsrv/srv_014_sqlsrv_get_field.phpt diff --git a/test/sqlsrv/srv_019_char.phpt b/test/functional/sqlsrv/srv_019_char.phpt similarity index 100% rename from test/sqlsrv/srv_019_char.phpt rename to test/functional/sqlsrv/srv_019_char.phpt diff --git a/test/sqlsrv/srv_020_unicode_strings.phpt b/test/functional/sqlsrv/srv_020_unicode_strings.phpt similarity index 100% rename from test/sqlsrv/srv_020_unicode_strings.phpt rename to test/functional/sqlsrv/srv_020_unicode_strings.phpt diff --git a/test/sqlsrv/srv_021_extended_ascii_strings_fetch_array.phpt b/test/functional/sqlsrv/srv_021_extended_ascii_strings_fetch_array.phpt similarity index 100% rename from test/sqlsrv/srv_021_extended_ascii_strings_fetch_array.phpt rename to test/functional/sqlsrv/srv_021_extended_ascii_strings_fetch_array.phpt diff --git a/test/sqlsrv/srv_028_data_conversion_nvarchar.phpt b/test/functional/sqlsrv/srv_028_data_conversion_nvarchar.phpt similarity index 100% rename from test/sqlsrv/srv_028_data_conversion_nvarchar.phpt rename to test/functional/sqlsrv/srv_028_data_conversion_nvarchar.phpt diff --git a/test/sqlsrv/srv_029_data_conversion_varchar_datetime.phpt b/test/functional/sqlsrv/srv_029_data_conversion_varchar_datetime.phpt similarity index 100% rename from test/sqlsrv/srv_029_data_conversion_varchar_datetime.phpt rename to test/functional/sqlsrv/srv_029_data_conversion_varchar_datetime.phpt diff --git a/test/sqlsrv/srv_031_sqlsrv_field_metadata.phpt b/test/functional/sqlsrv/srv_031_sqlsrv_field_metadata.phpt similarity index 100% rename from test/sqlsrv/srv_031_sqlsrv_field_metadata.phpt rename to test/functional/sqlsrv/srv_031_sqlsrv_field_metadata.phpt diff --git a/test/sqlsrv/srv_033_binary_unicode.phpt b/test/functional/sqlsrv/srv_033_binary_unicode.phpt similarity index 100% rename from test/sqlsrv/srv_033_binary_unicode.phpt rename to test/functional/sqlsrv/srv_033_binary_unicode.phpt diff --git a/test/sqlsrv/srv_034_field_metadata_unicode.phpt b/test/functional/sqlsrv/srv_034_field_metadata_unicode.phpt similarity index 100% rename from test/sqlsrv/srv_034_field_metadata_unicode.phpt rename to test/functional/sqlsrv/srv_034_field_metadata_unicode.phpt diff --git a/test/sqlsrv/srv_036_transaction_commit.phpt b/test/functional/sqlsrv/srv_036_transaction_commit.phpt similarity index 100% rename from test/sqlsrv/srv_036_transaction_commit.phpt rename to test/functional/sqlsrv/srv_036_transaction_commit.phpt diff --git a/test/sqlsrv/srv_037_sqlsrv_has_rows.phpt b/test/functional/sqlsrv/srv_037_sqlsrv_has_rows.phpt similarity index 100% rename from test/sqlsrv/srv_037_sqlsrv_has_rows.phpt rename to test/functional/sqlsrv/srv_037_sqlsrv_has_rows.phpt diff --git a/test/sqlsrv/srv_037_transaction_rollback.phpt b/test/functional/sqlsrv/srv_037_transaction_rollback.phpt similarity index 100% rename from test/sqlsrv/srv_037_transaction_rollback.phpt rename to test/functional/sqlsrv/srv_037_transaction_rollback.phpt diff --git a/test/sqlsrv/srv_047_stream_nvarchar.phpt b/test/functional/sqlsrv/srv_047_stream_nvarchar.phpt similarity index 100% rename from test/sqlsrv/srv_047_stream_nvarchar.phpt rename to test/functional/sqlsrv/srv_047_stream_nvarchar.phpt diff --git a/test/sqlsrv/srv_048_stream_nvarchar.phpt b/test/functional/sqlsrv/srv_048_stream_nvarchar.phpt similarity index 100% rename from test/sqlsrv/srv_048_stream_nvarchar.phpt rename to test/functional/sqlsrv/srv_048_stream_nvarchar.phpt diff --git a/test/sqlsrv/srv_049_stream_nvarchar_utf8.phpt b/test/functional/sqlsrv/srv_049_stream_nvarchar_utf8.phpt similarity index 100% rename from test/sqlsrv/srv_049_stream_nvarchar_utf8.phpt rename to test/functional/sqlsrv/srv_049_stream_nvarchar_utf8.phpt diff --git a/test/sqlsrv/srv_050_error_conversion_varchar_int.phpt b/test/functional/sqlsrv/srv_050_error_conversion_varchar_int.phpt similarity index 100% rename from test/sqlsrv/srv_050_error_conversion_varchar_int.phpt rename to test/functional/sqlsrv/srv_050_error_conversion_varchar_int.phpt diff --git a/test/sqlsrv/srv_051_error_conversion_nchar.phpt b/test/functional/sqlsrv/srv_051_error_conversion_nchar.phpt similarity index 100% rename from test/sqlsrv/srv_051_error_conversion_nchar.phpt rename to test/functional/sqlsrv/srv_051_error_conversion_nchar.phpt diff --git a/test/sqlsrv/srv_052_mars.phpt b/test/functional/sqlsrv/srv_052_mars.phpt similarity index 100% rename from test/sqlsrv/srv_052_mars.phpt rename to test/functional/sqlsrv/srv_052_mars.phpt diff --git a/test/sqlsrv/srv_053_mars_disabled_error_checks.phpt b/test/functional/sqlsrv/srv_053_mars_disabled_error_checks.phpt similarity index 100% rename from test/sqlsrv/srv_053_mars_disabled_error_checks.phpt rename to test/functional/sqlsrv/srv_053_mars_disabled_error_checks.phpt diff --git a/test/sqlsrv/srv_064_sqlsrv_column_name_unicode.phpt b/test/functional/sqlsrv/srv_064_sqlsrv_column_name_unicode.phpt similarity index 100% rename from test/sqlsrv/srv_064_sqlsrv_column_name_unicode.phpt rename to test/functional/sqlsrv/srv_064_sqlsrv_column_name_unicode.phpt diff --git a/test/sqlsrv/srv_066_sqlsrv_field_metadata.phpt b/test/functional/sqlsrv/srv_066_sqlsrv_field_metadata.phpt similarity index 100% rename from test/sqlsrv/srv_066_sqlsrv_field_metadata.phpt rename to test/functional/sqlsrv/srv_066_sqlsrv_field_metadata.phpt diff --git a/test/sqlsrv/srv_069_fetch_empty_nvarchar_buffered.phpt b/test/functional/sqlsrv/srv_069_fetch_empty_nvarchar_buffered.phpt similarity index 100% rename from test/sqlsrv/srv_069_fetch_empty_nvarchar_buffered.phpt rename to test/functional/sqlsrv/srv_069_fetch_empty_nvarchar_buffered.phpt diff --git a/test/sqlsrv/srv_073_database.phpt b/test/functional/sqlsrv/srv_073_database.phpt similarity index 100% rename from test/sqlsrv/srv_073_database.phpt rename to test/functional/sqlsrv/srv_073_database.phpt diff --git a/test/sqlsrv/srv_074_create_existing_database.phpt b/test/functional/sqlsrv/srv_074_create_existing_database.phpt similarity index 100% rename from test/sqlsrv/srv_074_create_existing_database.phpt rename to test/functional/sqlsrv/srv_074_create_existing_database.phpt diff --git a/test/sqlsrv/srv_074_database.phpt b/test/functional/sqlsrv/srv_074_database.phpt similarity index 100% rename from test/sqlsrv/srv_074_database.phpt rename to test/functional/sqlsrv/srv_074_database.phpt diff --git a/test/sqlsrv/srv_074_database_wide_string.phpt b/test/functional/sqlsrv/srv_074_database_wide_string.phpt similarity index 100% rename from test/sqlsrv/srv_074_database_wide_string.phpt rename to test/functional/sqlsrv/srv_074_database_wide_string.phpt diff --git a/test/sqlsrv/srv_075_database.phpt b/test/functional/sqlsrv/srv_075_database.phpt similarity index 100% rename from test/sqlsrv/srv_075_database.phpt rename to test/functional/sqlsrv/srv_075_database.phpt diff --git a/test/sqlsrv/srv_075_database_wide_string.phpt b/test/functional/sqlsrv/srv_075_database_wide_string.phpt similarity index 100% rename from test/sqlsrv/srv_075_database_wide_string.phpt rename to test/functional/sqlsrv/srv_075_database_wide_string.phpt diff --git a/test/sqlsrv/srv_223_sqlsrv_fetch_absolute.phpt b/test/functional/sqlsrv/srv_223_sqlsrv_fetch_absolute.phpt similarity index 100% rename from test/sqlsrv/srv_223_sqlsrv_fetch_absolute.phpt rename to test/functional/sqlsrv/srv_223_sqlsrv_fetch_absolute.phpt diff --git a/test/sqlsrv/srv_228_sqlsrv_clientbuffermaxkbsize.phpt b/test/functional/sqlsrv/srv_228_sqlsrv_clientbuffermaxkbsize.phpt similarity index 100% rename from test/sqlsrv/srv_228_sqlsrv_clientbuffermaxkbsize.phpt rename to test/functional/sqlsrv/srv_228_sqlsrv_clientbuffermaxkbsize.phpt diff --git a/test/sqlsrv/srv_230_sqlsrv_buffered_numeric_types.phpt b/test/functional/sqlsrv/srv_230_sqlsrv_buffered_numeric_types.phpt similarity index 95% rename from test/sqlsrv/srv_230_sqlsrv_buffered_numeric_types.phpt rename to test/functional/sqlsrv/srv_230_sqlsrv_buffered_numeric_types.phpt index 5493e309..fdb9c6e9 100644 --- a/test/sqlsrv/srv_230_sqlsrv_buffered_numeric_types.phpt +++ b/test/functional/sqlsrv/srv_230_sqlsrv_buffered_numeric_types.phpt @@ -1,201 +1,201 @@ ---TEST-- -Read numeric types from SQLSRV with buffered query. ---DESCRIPTION-- -Test numeric conversion (number to string, string to number) functionality for buffered queries with SQLSRV. ---SKIPIF-- ---FILE-- -"utf-8")); -if( !$conn ) { - PrintErrors("Connection could not be established.\n"); -} - -$sample = 1234567890.1234; -$sample1 = -1234567890.1234; -$sample2 = 1; -$sample3 = -1; -$sample4 = 0.5; -$sample5 = -0.55; - -$query = 'CREATE TABLE #TESTTABLE (a float(53), neg_a float(53), b int, neg_b int, c decimal(16, 6), neg_c decimal(16, 6), zero int, zerof float(53), zerod decimal(16,6))'; - -// Create table -$stmt = sqlsrv_query( $conn, $query ); -if( $stmt === false ) { - die( print_r( sqlsrv_errors(), true )); -} - -$query = 'INSERT INTO #TESTTABLE (a, neg_a, b, neg_b, c, neg_c, zero, zerof, zerod) VALUES(?, ?, ?, ?, ?, ?, 0, 0, 0)'; -$params = array($sample, $sample1, $sample2, $sample3, $sample4, $sample5); - -$stmt = sqlsrv_query( $conn, $query, $params ); -if( $stmt === false ) { - die( print_r( sqlsrv_errors(), true )); -} -$params = array($sample4, $sample5, 100000, -1234567, $sample, $sample1); -$stmt = sqlsrv_query( $conn, $query, $params ); -if( $stmt === false ) { - die( print_r( sqlsrv_errors(), true )); -} - -$query = 'SELECT TOP 2 * FROM #TESTTABLE'; -$stmt = sqlsrv_query( $conn, $query, array(), array("Scrollable"=>SQLSRV_CURSOR_CLIENT_BUFFERED)); -if(!$stmt) -{ - echo "Statement could not be prepared.\n"; - die( print_r( sqlsrv_errors(),true)); -} -sqlsrv_execute( $stmt ); - -$array = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_NUMERIC ); -var_dump($array); -$array = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_NUMERIC ); -var_dump($array); - -$numFields = sqlsrv_num_fields( $stmt ); -$meta = sqlsrv_field_metadata( $stmt ); -$rowcount = sqlsrv_num_rows( $stmt); -for($i = 0; $i < $rowcount; $i++){ - sqlsrv_fetch( $stmt, SQLSRV_SCROLL_ABSOLUTE, $i ); - for($j = 0; $j < $numFields; $j++) { - $name = $meta[$j]["Name"]; - print("\ncolumn: $name\n"); - $field = sqlsrv_get_field( $stmt, $j, SQLSRV_PHPTYPE_STRING(SQLSRV_ENC_CHAR) ); - var_dump($field); - if ($meta[$j]["Type"] == SQLSRV_SQLTYPE_INT) - { - $field = sqlsrv_get_field( $stmt, $j, SQLSRV_PHPTYPE_INT ); - var_dump($field); - } - $field = sqlsrv_get_field( $stmt, $j, SQLSRV_PHPTYPE_FLOAT); - var_dump($field); - } -} - -sqlsrv_free_stmt($stmt); -sqlsrv_close($conn); - -?> ---EXPECT-- -array(9) { - [0]=> - float(1234567890.1234) - [1]=> - float(-1234567890.1234) - [2]=> - int(1) - [3]=> - int(-1) - [4]=> - string(7) ".500000" - [5]=> - string(8) "-.550000" - [6]=> - int(0) - [7]=> - float(0) - [8]=> - string(7) ".000000" -} -array(9) { - [0]=> - float(0.5) - [1]=> - float(-0.55) - [2]=> - int(100000) - [3]=> - int(-1234567) - [4]=> - string(17) "1234567890.123400" - [5]=> - string(18) "-1234567890.123400" - [6]=> - int(0) - [7]=> - float(0) - [8]=> - string(7) ".000000" -} - -column: a -string(15) "1234567890.1234" -float(1234567890.1234) - -column: neg_a -string(16) "-1234567890.1234" -float(-1234567890.1234) - -column: b -string(1) "1" -int(1) -float(1) - -column: neg_b -string(2) "-1" -int(-1) -float(-1) - -column: c -string(7) ".500000" -float(0.5) - -column: neg_c -string(8) "-.550000" -float(-0.55) - -column: zero -string(1) "0" -int(0) -float(0) - -column: zerof -string(1) "0" -float(0) - -column: zerod -string(7) ".000000" -float(0) - -column: a -string(3) "0.5" -float(0.5) - -column: neg_a -string(5) "-0.55" -float(-0.55) - -column: b -string(6) "100000" -int(100000) -float(100000) - -column: neg_b -string(8) "-1234567" -int(-1234567) -float(-1234567) - -column: c -string(17) "1234567890.123400" -float(1234567890.1234) - -column: neg_c -string(18) "-1234567890.123400" -float(-1234567890.1234) - -column: zero -string(1) "0" -int(0) -float(0) - -column: zerof -string(1) "0" -float(0) - -column: zerod -string(7) ".000000" -float(0) - +--TEST-- +Read numeric types from SQLSRV with buffered query. +--DESCRIPTION-- +Test numeric conversion (number to string, string to number) functionality for buffered queries with SQLSRV. +--SKIPIF-- +--FILE-- +"utf-8")); +if( !$conn ) { + PrintErrors("Connection could not be established.\n"); +} + +$sample = 1234567890.1234; +$sample1 = -1234567890.1234; +$sample2 = 1; +$sample3 = -1; +$sample4 = 0.5; +$sample5 = -0.55; + +$query = 'CREATE TABLE #TESTTABLE (a float(53), neg_a float(53), b int, neg_b int, c decimal(16, 6), neg_c decimal(16, 6), zero int, zerof float(53), zerod decimal(16,6))'; + +// Create table +$stmt = sqlsrv_query( $conn, $query ); +if( $stmt === false ) { + die( print_r( sqlsrv_errors(), true )); +} + +$query = 'INSERT INTO #TESTTABLE (a, neg_a, b, neg_b, c, neg_c, zero, zerof, zerod) VALUES(?, ?, ?, ?, ?, ?, 0, 0, 0)'; +$params = array($sample, $sample1, $sample2, $sample3, $sample4, $sample5); + +$stmt = sqlsrv_query( $conn, $query, $params ); +if( $stmt === false ) { + die( print_r( sqlsrv_errors(), true )); +} +$params = array($sample4, $sample5, 100000, -1234567, $sample, $sample1); +$stmt = sqlsrv_query( $conn, $query, $params ); +if( $stmt === false ) { + die( print_r( sqlsrv_errors(), true )); +} + +$query = 'SELECT TOP 2 * FROM #TESTTABLE'; +$stmt = sqlsrv_query( $conn, $query, array(), array("Scrollable"=>SQLSRV_CURSOR_CLIENT_BUFFERED)); +if(!$stmt) +{ + echo "Statement could not be prepared.\n"; + die( print_r( sqlsrv_errors(),true)); +} +sqlsrv_execute( $stmt ); + +$array = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_NUMERIC ); +var_dump($array); +$array = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_NUMERIC ); +var_dump($array); + +$numFields = sqlsrv_num_fields( $stmt ); +$meta = sqlsrv_field_metadata( $stmt ); +$rowcount = sqlsrv_num_rows( $stmt); +for($i = 0; $i < $rowcount; $i++){ + sqlsrv_fetch( $stmt, SQLSRV_SCROLL_ABSOLUTE, $i ); + for($j = 0; $j < $numFields; $j++) { + $name = $meta[$j]["Name"]; + print("\ncolumn: $name\n"); + $field = sqlsrv_get_field( $stmt, $j, SQLSRV_PHPTYPE_STRING(SQLSRV_ENC_CHAR) ); + var_dump($field); + if ($meta[$j]["Type"] == SQLSRV_SQLTYPE_INT) + { + $field = sqlsrv_get_field( $stmt, $j, SQLSRV_PHPTYPE_INT ); + var_dump($field); + } + $field = sqlsrv_get_field( $stmt, $j, SQLSRV_PHPTYPE_FLOAT); + var_dump($field); + } +} + +sqlsrv_free_stmt($stmt); +sqlsrv_close($conn); + +?> +--EXPECT-- +array(9) { + [0]=> + float(1234567890.1234) + [1]=> + float(-1234567890.1234) + [2]=> + int(1) + [3]=> + int(-1) + [4]=> + string(7) ".500000" + [5]=> + string(8) "-.550000" + [6]=> + int(0) + [7]=> + float(0) + [8]=> + string(7) ".000000" +} +array(9) { + [0]=> + float(0.5) + [1]=> + float(-0.55) + [2]=> + int(100000) + [3]=> + int(-1234567) + [4]=> + string(17) "1234567890.123400" + [5]=> + string(18) "-1234567890.123400" + [6]=> + int(0) + [7]=> + float(0) + [8]=> + string(7) ".000000" +} + +column: a +string(15) "1234567890.1234" +float(1234567890.1234) + +column: neg_a +string(16) "-1234567890.1234" +float(-1234567890.1234) + +column: b +string(1) "1" +int(1) +float(1) + +column: neg_b +string(2) "-1" +int(-1) +float(-1) + +column: c +string(7) ".500000" +float(0.5) + +column: neg_c +string(8) "-.550000" +float(-0.55) + +column: zero +string(1) "0" +int(0) +float(0) + +column: zerof +string(1) "0" +float(0) + +column: zerod +string(7) ".000000" +float(0) + +column: a +string(3) "0.5" +float(0.5) + +column: neg_a +string(5) "-0.55" +float(-0.55) + +column: b +string(6) "100000" +int(100000) +float(100000) + +column: neg_b +string(8) "-1234567" +int(-1234567) +float(-1234567) + +column: c +string(17) "1234567890.123400" +float(1234567890.1234) + +column: neg_c +string(18) "-1234567890.123400" +float(-1234567890.1234) + +column: zero +string(1) "0" +int(0) +float(0) + +column: zerof +string(1) "0" +float(0) + +column: zerod +string(7) ".000000" +float(0) + diff --git a/test/sqlsrv/srv_231_string_truncation_varchar_max.phpt b/test/functional/sqlsrv/srv_231_string_truncation_varchar_max.phpt similarity index 100% rename from test/sqlsrv/srv_231_string_truncation_varchar_max.phpt rename to test/functional/sqlsrv/srv_231_string_truncation_varchar_max.phpt diff --git a/test/sqlsrv/srv_308_empty_output_param.phpt b/test/functional/sqlsrv/srv_308_empty_output_param.phpt similarity index 100% rename from test/sqlsrv/srv_308_empty_output_param.phpt rename to test/functional/sqlsrv/srv_308_empty_output_param.phpt diff --git a/test/sqlsrv/srv_330_numrow_null_buffered_result_set.phpt b/test/functional/sqlsrv/srv_330_numrow_null_buffered_result_set.phpt similarity index 100% rename from test/sqlsrv/srv_330_numrow_null_buffered_result_set.phpt rename to test/functional/sqlsrv/srv_330_numrow_null_buffered_result_set.phpt diff --git a/test/sqlsrv/test_XML_retrieve.phpt b/test/functional/sqlsrv/test_XML_retrieve.phpt similarity index 100% rename from test/sqlsrv/test_XML_retrieve.phpt rename to test/functional/sqlsrv/test_XML_retrieve.phpt diff --git a/test/sqlsrv/test_closeConnection.phpt b/test/functional/sqlsrv/test_closeConnection.phpt similarity index 100% rename from test/sqlsrv/test_closeConnection.phpt rename to test/functional/sqlsrv/test_closeConnection.phpt diff --git a/test/sqlsrv/test_concurrent_transac.phpt b/test/functional/sqlsrv/test_concurrent_transac.phpt similarity index 100% rename from test/sqlsrv/test_concurrent_transac.phpt rename to test/functional/sqlsrv/test_concurrent_transac.phpt diff --git a/test/sqlsrv/test_conn_execute.phpt b/test/functional/sqlsrv/test_conn_execute.phpt similarity index 100% rename from test/sqlsrv/test_conn_execute.phpt rename to test/functional/sqlsrv/test_conn_execute.phpt diff --git a/test/sqlsrv/test_connectionOption.phpt b/test/functional/sqlsrv/test_connectionOption.phpt similarity index 95% rename from test/sqlsrv/test_connectionOption.phpt rename to test/functional/sqlsrv/test_connectionOption.phpt index ae5dba0c..30da4c52 100644 --- a/test/sqlsrv/test_connectionOption.phpt +++ b/test/functional/sqlsrv/test_connectionOption.phpt @@ -11,7 +11,7 @@ Test MultipleActiveResultSets connection setting off require( 'MsCommon.inc' ); - $conn = ConnectSpecial(array( 'MultipleActiveResultSets' => false )); + $conn = Connect(array( 'MultipleActiveResultSets' => false )); if( $conn === false ) { die( print_r( sqlsrv_errors(), true )); } diff --git a/test/sqlsrv/test_datetime_objects.phpt b/test/functional/sqlsrv/test_datetime_objects.phpt similarity index 100% rename from test/sqlsrv/test_datetime_objects.phpt rename to test/functional/sqlsrv/test_datetime_objects.phpt diff --git a/test/sqlsrv/test_decimal_money.phpt b/test/functional/sqlsrv/test_decimal_money.phpt similarity index 100% rename from test/sqlsrv/test_decimal_money.phpt rename to test/functional/sqlsrv/test_decimal_money.phpt diff --git a/test/sqlsrv/test_emptyResult.phpt b/test/functional/sqlsrv/test_emptyResult.phpt similarity index 100% rename from test/sqlsrv/test_emptyResult.phpt rename to test/functional/sqlsrv/test_emptyResult.phpt diff --git a/test/sqlsrv/test_emptyStream.phpt b/test/functional/sqlsrv/test_emptyStream.phpt similarity index 100% rename from test/sqlsrv/test_emptyStream.phpt rename to test/functional/sqlsrv/test_emptyStream.phpt diff --git a/test/sqlsrv/test_error_encoding.phpt b/test/functional/sqlsrv/test_error_encoding.phpt similarity index 100% rename from test/sqlsrv/test_error_encoding.phpt rename to test/functional/sqlsrv/test_error_encoding.phpt diff --git a/test/sqlsrv/test_fetch.phpt b/test/functional/sqlsrv/test_fetch.phpt similarity index 100% rename from test/sqlsrv/test_fetch.phpt rename to test/functional/sqlsrv/test_fetch.phpt diff --git a/test/sqlsrv/test_fetch2.phpt b/test/functional/sqlsrv/test_fetch2.phpt similarity index 100% rename from test/sqlsrv/test_fetch2.phpt rename to test/functional/sqlsrv/test_fetch2.phpt diff --git a/test/sqlsrv/test_insert_null.phpt b/test/functional/sqlsrv/test_insert_null.phpt similarity index 100% rename from test/sqlsrv/test_insert_null.phpt rename to test/functional/sqlsrv/test_insert_null.phpt diff --git a/test/sqlsrv/test_insert_nullStr.phpt b/test/functional/sqlsrv/test_insert_nullStr.phpt similarity index 100% rename from test/sqlsrv/test_insert_nullStr.phpt rename to test/functional/sqlsrv/test_insert_nullStr.phpt diff --git a/test/sqlsrv/test_integer_max_min_zero_date_types.phpt b/test/functional/sqlsrv/test_integer_max_min_zero_date_types.phpt similarity index 100% rename from test/sqlsrv/test_integer_max_min_zero_date_types.phpt rename to test/functional/sqlsrv/test_integer_max_min_zero_date_types.phpt diff --git a/test/sqlsrv/test_largeData.phpt b/test/functional/sqlsrv/test_largeData.phpt similarity index 100% rename from test/sqlsrv/test_largeData.phpt rename to test/functional/sqlsrv/test_largeData.phpt diff --git a/test/sqlsrv/test_newError_msg.phpt b/test/functional/sqlsrv/test_newError_msg.phpt similarity index 100% rename from test/sqlsrv/test_newError_msg.phpt rename to test/functional/sqlsrv/test_newError_msg.phpt diff --git a/test/sqlsrv/test_non_alpha_password.phpt b/test/functional/sqlsrv/test_non_alpha_password.phpt similarity index 61% rename from test/sqlsrv/test_non_alpha_password.phpt rename to test/functional/sqlsrv/test_non_alpha_password.phpt index d532c548..ffd138c9 100644 --- a/test/sqlsrv/test_non_alpha_password.phpt +++ b/test/functional/sqlsrv/test_non_alpha_password.phpt @@ -3,8 +3,7 @@ password with non alphanumeric characters --DESCRIPTION-- The first three cases should have no problem connecting. Only the last case fails because the right curly brace should be escaped with another right brace. -In Azure we can't set DEFAULT_DATABASE for a login user. For this test to psss must connect -to the test database defined in MsSetup.inc +In Azure for this test to pass do not specify any particular database when connecting --SKIPIF-- --FILE-- @@ -12,9 +11,16 @@ to the test database defined in MsSetup.inc sqlsrv_configure( 'WarningsReturnAsErrors', 0 ); sqlsrv_configure( 'LogSeverity', SQLSRV_LOG_SEVERITY_ALL ); -require( 'MsCommon.inc' ); +require 'MsSetup.inc'; +function toConnect($options = array()) +{ + global $server; + + // this function makes a connection to the server WITHOUT specifying the database + return sqlsrv_connect($server, $options); +} -$conn = ConnectSpecial(array( "UID" => "test_password", "pwd" => "! ;4triou" )); +$conn = toConnect(array( "UID" => "test_password", "pwd" => "! ;4triou" )); if (!$conn) { $errors = sqlsrv_errors(); @@ -22,7 +28,7 @@ if (!$conn) } sqlsrv_close( $conn ); -$conn = ConnectSpecial(array( "UID" => "test_password2", "pwd" => "!}} ;4triou" )); +$conn = toConnect(array( "UID" => "test_password2", "pwd" => "!}} ;4triou" )); if (!$conn) { $errors = sqlsrv_errors(); @@ -30,7 +36,7 @@ if (!$conn) } sqlsrv_close( $conn ); -$conn = ConnectSpecial(array( "UID" => "test_password3", "pwd" => "! ;4triou}}" )); +$conn = toConnect(array( "UID" => "test_password3", "pwd" => "! ;4triou}}" )); if (!$conn) { $errors = sqlsrv_errors(); @@ -38,7 +44,7 @@ if (!$conn) } sqlsrv_close( $conn ); -$conn = ConnectSpecial(array( "UID" => "test_password3", "pwd" => "! ;4triou}" )); +$conn = toConnect(array( "UID" => "test_password3", "pwd" => "! ;4triou}" )); if ($conn) { echo( "Shouldn't have connected" ); @@ -51,5 +57,5 @@ print "Test successful"; ?> --EXPECTREGEX-- An unescaped right brace \(}\) was found in either the user name or password. All right braces must be escaped with another right brace \(}}\)\. -Warning: sqlsrv_close\(\) expects parameter 1 to be resource, boolean given in .+(\/|\\)test_non_alpha_password\.php on line 38 +Warning: sqlsrv_close\(\) expects parameter 1 to be resource, boolean given in .+(\/|\\)test_non_alpha_password\.php on line 45 Test successful diff --git a/test/sqlsrv/test_precision_size.phpt b/test/functional/sqlsrv/test_precision_size.phpt similarity index 100% rename from test/sqlsrv/test_precision_size.phpt rename to test/functional/sqlsrv/test_precision_size.phpt diff --git a/test/sqlsrv/test_scrollable.phpt b/test/functional/sqlsrv/test_scrollable.phpt similarity index 100% rename from test/sqlsrv/test_scrollable.phpt rename to test/functional/sqlsrv/test_scrollable.phpt diff --git a/test/sqlsrv/test_sqlsrv_phptype_stream.phpt b/test/functional/sqlsrv/test_sqlsrv_phptype_stream.phpt similarity index 100% rename from test/sqlsrv/test_sqlsrv_phptype_stream.phpt rename to test/functional/sqlsrv/test_sqlsrv_phptype_stream.phpt diff --git a/test/sqlsrv/test_stream.phpt b/test/functional/sqlsrv/test_stream.phpt similarity index 100% rename from test/sqlsrv/test_stream.phpt rename to test/functional/sqlsrv/test_stream.phpt diff --git a/test/sqlsrv/test_stream_large_data.inc b/test/functional/sqlsrv/test_stream_large_data.inc similarity index 100% rename from test/sqlsrv/test_stream_large_data.inc rename to test/functional/sqlsrv/test_stream_large_data.inc diff --git a/test/sqlsrv/test_stream_large_data.phpt b/test/functional/sqlsrv/test_stream_large_data.phpt similarity index 100% rename from test/sqlsrv/test_stream_large_data.phpt rename to test/functional/sqlsrv/test_stream_large_data.phpt diff --git a/test/sqlsrv/test_stream_large_data_UTF8.inc b/test/functional/sqlsrv/test_stream_large_data_UTF8.inc similarity index 100% rename from test/sqlsrv/test_stream_large_data_UTF8.inc rename to test/functional/sqlsrv/test_stream_large_data_UTF8.inc diff --git a/test/sqlsrv/test_timeout.phpt b/test/functional/sqlsrv/test_timeout.phpt similarity index 100% rename from test/sqlsrv/test_timeout.phpt rename to test/functional/sqlsrv/test_timeout.phpt diff --git a/test/sqlsrv/test_warning_errors.phpt b/test/functional/sqlsrv/test_warning_errors.phpt similarity index 77% rename from test/sqlsrv/test_warning_errors.phpt rename to test/functional/sqlsrv/test_warning_errors.phpt index a921cc2c..935901ac 100644 --- a/test/sqlsrv/test_warning_errors.phpt +++ b/test/functional/sqlsrv/test_warning_errors.phpt @@ -1,7 +1,7 @@ --TEST-- warnings as errors --SKIPIF-- - + --FILE-- Array - ( - [0] => 01000 - [SQLSTATE] => 01000 - [1] => 5701 - [code] => 5701 - [2] => %SChanged database context to '%S'. - [message] => %SChanged database context to '%S'. - ) - - [1] => Array - ( - [0] => 01000 - [SQLSTATE] => 01000 - [1] => 5703 - [code] => 5703 - [2] => %SChanged language setting to us_english. - [message] => %SChanged language setting to us_english. - ) - + [0] => 01000 + [SQLSTATE] => 01000 + [1] => 5701 + [code] => 5701 + [2] => %SChanged database context to '%S'. + [message] => %SChanged database context to '%S'. +) +Array +( + [0] => 01000 + [SQLSTATE] => 01000 + [1] => 5703 + [code] => 5703 + [2] => %SChanged language setting to us_english. + [message] => %SChanged language setting to us_english. ) Errors from sqlsrv_connect: Errors from raiserror diff --git a/test/sqlsrv/test_warning_errors2.phpt b/test/functional/sqlsrv/test_warning_errors2.phpt similarity index 87% rename from test/sqlsrv/test_warning_errors2.phpt rename to test/functional/sqlsrv/test_warning_errors2.phpt index 69583cbc..3372ca89 100644 --- a/test/sqlsrv/test_warning_errors2.phpt +++ b/test/functional/sqlsrv/test_warning_errors2.phpt @@ -1,7 +1,7 @@ --TEST-- warnings as errors --SKIPIF-- - + --FILE-- Array - ( - [0] => IMSSP - [SQLSTATE] => IMSSP - [1] => -11 - [code] => -11 - [2] => The statement must be executed before results can be retrieved. - [message] => The statement must be executed before results can be retrieved. - ) - + [0] => IMSSP + [SQLSTATE] => IMSSP + [1] => -11 + [code] => -11 + [2] => The statement must be executed before results can be retrieved. + [message] => The statement must be executed before results can be retrieved. ) Test successful diff --git a/test/sqlsrv/test_warning_errors3.phpt b/test/functional/sqlsrv/test_warning_errors3.phpt similarity index 100% rename from test/sqlsrv/test_warning_errors3.phpt rename to test/functional/sqlsrv/test_warning_errors3.phpt diff --git a/test/sqlsrv/tools.inc b/test/functional/sqlsrv/tools.inc similarity index 100% rename from test/sqlsrv/tools.inc rename to test/functional/sqlsrv/tools.inc diff --git a/test/pdo_sqlsrv/MsCommon.inc b/test/pdo_sqlsrv/MsCommon.inc deleted file mode 100644 index 10634abe..00000000 --- a/test/pdo_sqlsrv/MsCommon.inc +++ /dev/null @@ -1,1628 +0,0 @@ -setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); - create_and_insert_table1($conn); - create_and_insert_table2($conn); - return $conn; - } - - catch( PDOException $e ) - { - var_dump( $e ); - exit; - } - - catch(Exception $e) - { - var_dump( $e ); - exit; - } -} - -// Create and insert -function create_and_insert_table1( $conn ) -{ - global $string_col, $date_col, $large_string_col, $xml_col, $binary_col, $int_col, $decimal_col, $guid_col, $null_col, $comma, $closing_brace, $table1; - - try - { - $create_query = - - "IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'" . $table1 . "') AND type in (N'U')) - DROP TABLE " . $table1 . - - " CREATE TABLE [dbo].[" . $table1 . "]( - [IntCol] [int] NULL, - [CharCol] [char](10) NULL, - [NCharCol] [nchar](10) NULL, - [DateTimeCol] [datetime] NULL, - [VarcharCol] [varchar](50) NULL, - [NVarCharCol] [nvarchar](50) NULL, - [FloatCol] [float] NULL, - [XmlCol] [xml] NULL - ) ON [PRIMARY] - "; - - $conn->query( $create_query ); - - for ($i = 0 ; $i <= 1; ++ $i) - { - $insert_query = - "INSERT INTO PDO_Types_1 VALUES (". - $int_col[$i] . $comma . - $string_col[$i] . $comma . - $string_col[$i] . $comma . - "Convert(datetime, ". $date_col[$i] . ")" . $comma . - $string_col[$i] . $comma . - $string_col[$i] . $comma . - $decimal_col[$i] . $comma . - $xml_col[$i] . - ")"; - - $conn->query ( $insert_query ); - } - } - catch(Exception $e) - { - var_dump( $e); - exit; - } -} - -function create_and_insert_table2( $conn ) -{ - try - { - //Timestamp is not present. - //VARIANT is not supported. - global $string_col, $date_col, $large_string_col, $xml_col, $binary_col, $int_col, $decimal_col, $guid_col, $null_col, $comma, $closing_brace, $table1, $table2; - - $create_query = - "IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'".$table2."') AND type in (N'U')) DROP TABLE " . $table2 . - - " CREATE TABLE " .$table2 . " ( - [BigIntCol] [bigint] NULL, - [BinaryCol] [binary](5) NULL, - [BitCol] [bit] NULL, - [CharCol] [char](10) NULL, - [DateCol] [date] NULL, - [DateTimeCol] [datetime] NULL, - [DateTime2Col] [datetime2](7) NULL, - [DTOffsetCol] [datetimeoffset](7) NULL, - [DecimalCol] [decimal](18, 0) NULL, - [FloatCol] [float] NULL, - [ImageCol] [image] NULL, - [IntCol] [int] NULL, - [MoneyCol] [money] NULL, - [NCharCol] [nchar](10) NULL, - [NTextCol] [ntext] NULL, - [NumCol] [numeric](18, 0) NULL, - [NVarCharCol] [nvarchar](50) NULL, - [NVarCharMaxCol] [nvarchar](max) NULL, - [RealCol] [real] NULL, - [SmallDTCol] [smalldatetime] NULL, - [SmallIntCol] [smallint] NULL, - [SmallMoneyCol] [smallmoney] NULL, - [TextCol] [text] NULL, - [TimeCol] [time](7) NULL, - [TinyIntCol] [tinyint] NULL, - [Guidcol] [uniqueidentifier] NULL, - [VarbinaryCol] [varbinary](50) NULL, - [VarbinaryMaxCol] [varbinary](max) NULL, - [VarcharCol] [varchar](50) NULL, - [VarcharMaxCol] [varchar](max) NULL, - [XmlCol] [xml] NULL - ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] - - "; - - $stmt = $conn->query( $create_query ); - - for ($i =0; $i<= 0 ; ++ $i) - { - $insert_query = - - " INSERT INTO " .$table2 . " VALUES (". - $int_col[$i] . $comma . - $binary_col[$i] . $comma . - "0" . $comma . - $string_col[$i] . $comma . - "Convert(date, ". $date_col[$i] . $closing_brace . - "Convert(datetime, ". $date_col[$i] . $closing_brace . - "Convert(datetime2(7),". $date_col[$i] . $closing_brace . - "Convert(datetimeoffset(7)," . $date_col[$i] . $closing_brace . - $decimal_col[$i] . $comma . - $decimal_col[$i] .$comma . - $binary_col[$i] . $comma . - $int_col[$i] . $comma . - $decimal_col[$i] . $comma . - $string_col[$i]. $comma . - $large_string_col[$i]. $comma. - $int_col[$i]. $comma . - $string_col[$i]. $comma . - $large_string_col[$i]. $comma . - $decimal_col[$i]. $comma . - "Convert(smalldatetime, ". $date_col[$i]. $closing_brace . - $int_col[$i]. $comma . - $decimal_col[$i]. $comma . - $large_string_col[$i]. $comma . - "Convert(time(7), ". $date_col[$i] . $closing_brace . - $int_col[$i] . $comma . - $guid_col[$i] . $comma . - $binary_col[$i] . $comma . - $binary_col[$i] . $comma . - $string_col[$i] . $comma . - $large_string_col[$i] . $comma . - $xml_col[$i] . - ")"; - - $stmt = $conn->query ($insert_query ); - } - - } - catch(Exception $e) - { - var_dump( $e); - exit; - } -} - -function teardown() -{ - // TBD -} - - -function my_print_r( $to_print ) -{ - global $verbose; - if($verbose) - print_r($to_print); -} - - -function TestMode() -{ - $testMode = getenv('PHPT_EXEC'); - return ($testMode ? true : false); -} - -function IsPdoMode() -{ - require 'MsSetup.inc'; - return (($driverType === true) ? true : false); -} - - -function TraceMode() -{ - require 'MsSetup.inc'; - return ((!TestMode() && $traceEnabled) ? true : false); -} - -function IsMarsSupported() -{ - require 'MsSetup.inc'; - return ($marsMode ? true : false); -} - -function IsDaasMode() -{ - require 'MsSetup.inc'; - return ($daasMode ? true : false); -} - -function FatalError($errorMsg) -{ - if (!IsPdoMode()) - { - handle_errors(); - } - die("$errorMsg\n"); -} - -function Trace($msg) -{ - if (TraceMode()) - { - echo $msg; - } -} - -function TraceEx($msg, $exitMode) -{ - if ($exitMode) - { - FatalError($msg); - } - else - { - Trace("$msg\n"); - } -} - -function TraceData($sqlType, $data) -{ - if (TraceMode()) - { - $msg = strtoupper(" $sqlType:"); - echo "$msg\t"; - if (strlen($msg) <= 7) - { - echo "\t"; - } - if (strlen($msg) <= 15) - { - echo "\t"; - } - echo "$data\n" -; - } -} - -function StartTest($testName) -{ - require 'MsSetup.inc'; - - if (TraceMode()) - { - echo "$PhpDriver: starting \"$testName\" test...\n\n"; - } - - if (!extension_loaded(IsPdoMode() ? "pdo" : "sqlsrv")) - { - die("$PhpDriver cannot be loaded."); - } - - // Set timezone - $tz = ini_get('date.timezone'); - if (strcmp($tz, "") == 0) - { - date_default_timezone_set('America/Los_Angeles'); - $tz = date_default_timezone_get(); - } - Trace("Timezone: $tz.\n"); -} - -function EndTest($testName) -{ - require 'MsSetup.inc'; - - if (TraceMode()) - { - echo "\n$PhpDriver: " -; - } - echo "Test \"$testName\" completed successfully.\n" -; -} - - -function Setup() -{ - set_time_limit(0); - - if (IsPdoMode()) - { // PDO setup - } - else - { // PHP setup - sqlsrv_configure('LogSubsystems', SQLSRV_LOG_SYSTEM_ALL); - sqlsrv_configure('LogSeverity', SQLSRV_LOG_SEVERITY_ALL); - sqlsrv_configure('WarningsReturnAsErrors', 1); - } -} - -function Configure($param, $expected) -{ - if (!IsPdoMode()) - { - sqlsrv_configure($param, $expected); - $actual = sqlsrv_get_config($param); - - if ($actual == $expected) - { - Trace("Set configuration parameter $param = $actual.\n"); - } - else - { - die("Failed to set configuration parameter $param = $expected."); - } - } -} - -function GetTempTableName($table = '', $temporary = true) -{ - // A temporary table name with the '#' prefix will be automatically - // dropped once the connection is closed. Otherwise, the caller - // should take care of dropping the temp table afterwards. - - $timestamp = round(microtime(true)*1000); - - $prefix = ''; - if ($temporary) - $prefix = '#'; - - if (strlen($table) == 0) - $table = 'php_test_table'; - - return $prefix . $table . '_' . $timestamp; -} - -function GetTempProcName($proc = '', $temporary = true) -{ - // A temporary stored procedure name with the '#' prefix will be - // automatically dropped once the connection is closed. Otherwise, - // the caller should take care of dropping the temp procedure afterwards. - - $timestamp = round(microtime(true)*1000); - - $prefix = ''; - if ($temporary) - $prefix = '#'; - - if (strlen($proc) == 0) - $proc = 'php_test_proc'; - - return $prefix . $proc . '_' . $timestamp; -} - -function PDOConnect($className, $serverName, $user, $pwd, $exitMode) -{ - require 'MsSetup.inc'; - $conn = null; - - try - { - // simply use $databaseName from MsSetup.inc to facilitate testing in Azure, - // which does not support switching databases - $conn = new $className("sqlsrv:Server=$serverName;Database=$databaseName", $user, $pwd, $connectionOptions); - $conn->setAttribute(PDO::SQLSRV_ATTR_ENCODING, PDO::SQLSRV_ENCODING_SYSTEM); - } - catch (PDOException $e) - { - $conn = null; - TraceEx("\nFailed to connect to $serverName: ".$e->getMessage(), $exitMode); - } - - return ($conn); -} - - -function ExecuteQuery($conn, $tsql) -{ - $stmt = null; - - if (IsPdoMode()) - { // PDO - try - { - $stmt = $conn->query($tsql); - } - catch (PDOException $e) - { - $stmt = null; - FatalError("Query execution failed for $tsql: ".$e->getMessage()); - } - } - else - { // PHP - $stmt = sqlsrv_query($conn, $tsql); - if ($stmt === false) - { - FatalError("Query execution failed for $tsql"); - } - } - return ($stmt); -} - - -function PrepareQuery($conn, $tsql) -{ - $stmt = null; - - if (IsPdoMode()) - { // PDO - try - { - $stmt = $conn->prepare($tsql); - } - catch (PDOException $e) - { - $stmt = null; - FatalError("Query preparation failed for $tsql: ".$e->getMessage()); - } - } - else - { // PHP - $stmt = sqlsrv_prepare($conn, $tsql); - if ($stmt === false) - { - FatalError("Query preparation failed for $tsql"); - } - } - - return ($stmt); -} - - -function ExecuteQueryEx($conn, $tsql, $modeDirect) -{ - $stmt = null; - - if ($modeDirect) - { // direct execution - if (IsPdoMode()) - { // PDO - try - { - $stmt = $conn->query($tsql); - } - catch (PDOException $e) - { - $stmt = null; - } - } - else - { // PHP - $stmt = sqlsrv_query($conn, $tsql); - } - } - else - { - $stmt = PrepareQuery($conn, $tsql); - if (IsPdoMode()) - { - $stmt->execute(); - } - else - { - sqlsrv_execute($stmt); - } - } - - return ($stmt); -} - - -function GetSqlType($k) -{ - switch ($k) - { - case 1: return ("int"); - case 2: return ("tinyint"); - case 3: return ("smallint"); - case 4: return ("bigint"); - case 5: return ("bit"); - case 6: return ("float"); - case 7: return ("real"); - case 8: return ("decimal(28,4)"); - case 9: return ("numeric(32,4)"); - case 10: return ("money"); - case 11: return ("smallmoney"); - case 12: return ("char(512)"); - case 13: return ("varchar(512)"); - case 14: return ("varchar(max)"); - case 15: return ("nchar(512)"); - case 16: return ("nvarchar(512)"); - case 17: return ("nvarchar(max)"); - case 18: return ("text"); - case 19: return ("ntext"); - case 20: return ("binary(512)"); - case 21: return ("varbinary(512)"); - case 22: return ("varbinary(max)"); - case 23: return ("image"); - case 24: return ("uniqueidentifier"); - case 25: return ("datetime"); - case 26: return ("smalldatetime"); - case 27: return ("timestamp"); - case 28: return ("xml"); - default: break; - } - return ("udt"); -} - -function GetDriverType($k, $dataSize) -{ - switch ($k) - { - case 1: return (SQLSRV_SQLTYPE_INT); - case 2: return (SQLSRV_SQLTYPE_TINYINT); - case 3: return (SQLSRV_SQLTYPE_SMALLINT); - case 4: return (SQLSRV_SQLTYPE_BIGINT); - case 5: return (SQLSRV_SQLTYPE_BIT); - case 6: return (SQLSRV_SQLTYPE_FLOAT); - case 7: return (SQLSRV_SQLTYPE_REAL); - case 8: return (SQLSRV_SQLTYPE_DECIMAL(28, 4)); - case 9: return (SQLSRV_SQLTYPE_NUMERIC(32, 4)); - case 10: return (SQLSRV_SQLTYPE_MONEY); - case 11: return (SQLSRV_SQLTYPE_SMALLMONEY); - case 12: return (SQLSRV_SQLTYPE_CHAR($dataSize)); - case 13: return (SQLSRV_SQLTYPE_VARCHAR($dataSize)); - case 14: return (SQLSRV_SQLTYPE_VARCHAR('max')); - case 15: return (SQLSRV_SQLTYPE_NCHAR($dataSize)); - case 16: return (SQLSRV_SQLTYPE_NVARCHAR($dataSize)); - case 17: return (SQLSRV_SQLTYPE_NVARCHAR('max')); - case 18: return (SQLSRV_SQLTYPE_TEXT); - case 19: return (SQLSRV_SQLTYPE_NTEXT); - case 20: return (SQLSRV_SQLTYPE_BINARY($dataSize)); - case 21: return (SQLSRV_SQLTYPE_VARBINARY($dataSize)); - case 22: return (SQLSRV_SQLTYPE_VARBINARY('max')); - case 23: return (SQLSRV_SQLTYPE_IMAGE); - case 24: return (SQLSRV_SQLTYPE_UNIQUEIDENTIFIER); - case 25: return (SQLSRV_SQLTYPE_DATETIME); - case 26: return (SQLSRV_SQLTYPE_SMALLDATETIME); - case 27: return (SQLSRV_SQLTYPE_TIMESTAMP); - case 28: return (SQLSRV_SQLTYPE_XML); - default: break; - } - return (SQLSRV_SQLTYPE_UDT); -} - -function IsStreamable($k) -{ - switch ($k) - { - case 12: return (true); // nchar(512) - case 13: return (true); // varchar(512) - case 14: return (true); // varchar(max) - case 15: return (true); // nchar(512) - case 16: return (true); // nvarchar(512) - case 17: return (true); // nvarchar(max) - case 18: return (true); // text - case 19: return (true); // ntext - case 20: return (true); // binary - case 21: return (true); // varbinary(512) - case 22: return (true); // varbinary(max) - case 23: return (true); // image - case 28: return (true); // xml - default: break; - } - return (false); -} - -function IsNumeric($k) -{ - switch ($k) - { - case 1: return (true); // int - case 2: return (true); // tinyint - case 3: return (true); // smallint - case 4: return (true); // bigint - case 5: return (true); // bit - case 6: return (true); // float - case 7: return (true); // real - case 8: return (true); // decimal(28,4) - case 9: return (true); // numeric(32,4) - case 10: return (true); // money - case 11: return (true); // smallmoney - default: break; - } - return (false); -} - -function IsChar($k) -{ - switch ($k) - { - case 12: return (true); // nchar(512) - case 13: return (true); // varchar(512) - case 14: return (true); // varchar(max) - case 15: return (true); // nchar(512) - case 16: return (true); // nvarchar(512) - case 17: return (true); // nvarchar(max) - case 18: return (true); // text - case 19: return (true); // ntext - case 28: return (true); // xml - default: break; - } - return (false); -} - -function IsBinary($k) -{ - switch ($k) - { - case 20: return (true); // binary - case 21: return (true); // varbinary(512) - case 22: return (true); // varbinary(max) - case 23: return (true); // image - default: break; - } - return (false); -} - -function IsDateTime($k) -{ - switch ($k) - { - case 25: return (true); // datetime - case 26: return (true); // smalldatetime - case 27: return (true); // timestamp - default: break; - } - return (false); -} - -function IsUnicode($k) -{ - switch ($k) - { - case 15: return (true); // nchar(512) - case 16: return (true); // nvarchar(512) - case 17: return (true); // nvarchar(max) - case 19: return (true); // ntext - default: break; - } - return (false); -} - -function IsUpdatable($k) -{ - switch ($k) - { - case 27: return (false); // timestamp - default: break; - } - return (true); -} - -function IsLiteral($k) -{ - switch ($k) - { - case 12: return (true); // nchar(512) - case 13: return (true); // varchar(512) - case 14: return (true); // varchar(max) - case 15: return (true); // nchar(512) - case 16: return (true); // nvarchar(512) - case 17: return (true); // nvarchar(max) - case 18: return (true); // text - case 19: return (true); // ntext - case 24: return (true); // uniqueidentifier - case 25: return (true); // datetime - case 26: return (true); // smalldatetime - case 28: return (true); // xml - default: break; - } - return (false); -} - -function GetMetadata($k, $info) -{ - if (strcasecmp($info, 'Name') == 0) - { - return (getColName($k)); - } - if (strcasecmp($info, 'Size') == 0) - { - return (getColSize($k)); - } - if (strcasecmp($info, 'Precision') == 0) - { - return (getColPrecision($k)); - } - if (strcasecmp($info, 'Scale') == 0) - { - return (getColScale($k)); - } - if (strcasecmp($info, 'Nullable') == 0) - { - return (getColNullable($k)); - } - return (""); -} - -function GetColName($k) -{ - switch ($k) - { - case 1: return ("c1_int"); - case 2: return ("c2_tinyint"); - case 3: return ("c3_smallint"); - case 4: return ("c4_bigint"); - case 5: return ("c5_bit"); - case 6: return ("c6_float"); - case 7: return ("c7_real"); - case 8: return ("c8_decimal"); - case 9: return ("c9_numeric"); - case 10: return ("c10_money"); - case 11: return ("c11_smallmoney"); - case 12: return ("c12_char"); - case 13: return ("c13_varchar"); - case 14: return ("c14_varchar_max"); - case 15: return ("c15_nchar"); - case 16: return ("c16_nvarchar"); - case 17: return ("c17_nvarchar_max"); - case 18: return ("c18_text"); - case 19: return ("c19_ntext"); - case 20: return ("c20_binary"); - case 21: return ("c21_varbinary"); - case 22: return ("c22_varbinary_max"); - case 23: return ("c23_image"); - case 24: return ("c24_uniqueidentifier"); - case 25: return ("c25_datetime"); - case 26: return ("c26_smalldatetime"); - case 27: return ("c27_timestamp"); - case 28: return ("c28_xml"); - default: break; - } - return (""); -} - - -function GetColSize($k) -{ - switch ($k) - { - case 12: return ("512"); - case 13: return ("512"); - case 14: return ("0"); - case 15: return ("512"); - case 16: return ("512"); - case 17: return ("0"); - case 18: return ("2147483647"); - case 19: return ("1073741823"); - case 20: return ("512"); - case 21: return ("512"); - case 22: return ("0)"); - case 23: return ("2147483647"); - case 24: return ("36"); - //case 25: return ("23"); - //case 26: return ("16"); - case 27: return ("8"); - case 28: return ("0"); - default: break; - } - return (""); -} - -function GetColPrecision($k) -{ - switch ($k) - { - case 1: return ("10"); - case 2: return ("3"); - case 3: return ("5"); - case 4: return ("19"); - case 5: return ("1"); - case 6: return ("53"); - case 7: return ("24"); - case 8: return ("28"); - case 9: return ("32"); - case 10: return ("19"); - case 11: return ("10"); - case 25: return ("23"); - case 26: return ("16"); - default: break; - } - return (""); -} - -function GetColScale($k) -{ - switch ($k) - { - case 8: return ("4"); - case 9: return ("4"); - case 10: return ("4"); - case 11: return ("4"); - case 25: return ("3"); - case 26: return ("0"); - default: break; - } - return (""); -} - -function GetColNullable($k) -{ - return (IsUpdatable($k) ? "1" : "0"); -} - -function GetSampleData($k) -{ - switch ($k) - { - case 1: // int - return ("123456789"); - - case 2: // tinyint - return ("234"); - - case 3: // smallint - return ("5678"); - - case 4: // bigint - return ("123456789987654321"); - - - case 5: // bit - return ("1"); - - case 6: // float - return ("123.456"); - - case 7: // real - return ("789.012"); - - case 8: // decimal - return ("12.34"); - - case 9: // numeric - return ("567.89"); - - case 10:// money - return ("321.54"); - - case 11:// smallmoney - return ("67.89"); - - case 12:// char - case 15:// nchar - return ("The quick brown fox jumps over the lazy dog"); - - case 13:// varchar - case 16:// nvarchar - return ("The quick brown fox jumps over the lazy dog 9876543210"); - - case 14:// varchar(max) - case 17:// nvarchar(max) - return ("The quick brown fox jumps over the lazy dog 0123456789"); - - case 18:// text - case 19:// ntext - return ("0123456789 The quick brown fox jumps over the lazy dog"); - - case 20:// binary - return ("0123456789"); - - case 21:// varbinary - return ("01234567899876543210"); - - case 22:// varbinary(max) - return ("98765432100123456789"); - - case 23:// image - return ("01234567899876543210"); - - case 24:// uniqueidentifier - return ("12345678-9012-3456-7890-123456789012"); - - case 25:// datetime - case 26:// smalldatetime - return (date("Y-m-d")); - - case 27:// timestamp - return (null); - - case 28:// xml - return ("The quick brown fox jumps over the lazy dog0123456789"); - - default: - break; - } - - return (null); -} - - -function CreateDB($conn, $dbName) -{ - Trace("Creating database $dbName ..."); - $tsql = "CREATE DATABASE [$dbName]"; - DropDB($conn, $dbName); - - if (IsPdoMode()) - { - $outcome = $conn->exec($tsql); - if ($outcome === false) - { - FatalError("Failed to create test database: $dbName"); - } - } - else - { - $stmt = sqlsrv_query($conn, $tsql); - if ($stmt === false) - { - FatalError("Failed to create test database: $dbName"); - } - sqlsrv_free_stmt($stmt); - } - Trace(" completed successfully.\n"); -} - -function DropDB($conn, $dbName) -{ - $tsql = "DROP DATABASE [$dbName]"; - if (IsPdoMode()) - { - $mode = $conn->getAttribute(PDO::ATTR_ERRMODE); - - $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT); - - $outcome = $conn->exec($tsql); - $conn->setAttribute(PDO::ATTR_ERRMODE, $mode); - - } - else - { - $stmt = sqlsrv_query($conn, $tsql); - if ($stmt === false) - { - } - else - { - sqlsrv_free_stmt($stmt); - } - } -} - - -function CreateTable($conn, $tableName) -{ - $dataType = "[c1_int] int, [c2_tinyint] tinyint, [c3_smallint] smallint, [c4_bigint] bigint, [c5_bit] bit, [c6_float] float, [c7_real] real, [c8_decimal] decimal(28,4), [c9_numeric] numeric(32,4), [c10_money] money, [c11_smallmoney] smallmoney, [c12_char] char(512), [c13_varchar] varchar(512), [c14_varchar_max] varchar(max), [c15_nchar] nchar(512), [c16_nvarchar] nvarchar(512), [c17_nvarchar_max] nvarchar(max), [c18_text] text, [c19_ntext] ntext, [c20_binary] binary(512), [c21_varbinary] varbinary(512), [c22_varbinary_max] varbinary(max), [c23_image] image, [c24_uniqueidentifier] uniqueidentifier, [c25_datetime] datetime, [c26_smalldatetime] smalldatetime, [c27_timestamp] timestamp, [c28_xml] xml"; - CreateTableEx($conn, $tableName, $dataType); - if (IsDaasMode()) - { - $colIndex = "[c1_int], [c2_tinyint], [c3_smallint], [c4_bigint], [c5_bit], [c6_float], [c7_real], [c8_decimal], [c9_numeric]"; - CreateTableIndex($conn, $tableName, $colIndex); - } -} - -function CreateTableEx($conn, $tableName, $dataType) -{ - Trace("Creating table $tableName ..."); - $tsql = "CREATE TABLE [$tableName] ($dataType)"; - DropTable($conn,$tableName); - - if (IsPdoMode()) - { - $outcome = $conn->exec($tsql); - if ($outcome === false) - { - FatalError("Failed to create test table: $tsql"); - } - } - else - { - $stmt = sqlsrv_query($conn, $tsql); - if ($stmt === false) - { - FatalError("Failed to create test table: $tsql"); - } - sqlsrv_free_stmt($stmt); - } - Trace(" completed successfully.\n"); -} - - -function CreateTableIndex($conn, $tableName, $colIndex) -{ - require 'MsSetup.inc'; - CreateTableIndexEx($conn, $tableName, $tableIndex, $colIndex); -} - - -function CreateTableIndexEx($conn, $tableName, $tableIndex, $colIndex) -{ - Trace("Creating table index for $tableName ..."); - $sqlIndex = "CREATE CLUSTERED INDEX [$tableIndex] ON [$tableName]($colIndex)"; - if (IsPdoMode()) - { - $outcome = $conn->exec($sqlIndex); - if ($outcome === false) - { - FatalError("Failed to create clustered index for test table: $sqlIndex"); - } - } - else - { - $stmt = sqlsrv_query($conn, $sqlIndex); - if ($stmt === false) - { - FatalError("Failed to create clustered index for test table: $sqlIndex"); - } - sqlsrv_free_stmt($stmt); - } - Trace(" completed successfully.\n"); -} - -function CreateUniqueIndex($conn, $tableName, $colIndex) -{ - require 'MsSetup.inc'; - CreateUniqueIndexEx($conn, $tableName, $tableIndex, $colIndex); -} - -function CreateUniqueIndexEx($conn, $tableName, $tableIndex, $colIndex) -{ - Trace("Creating unique table index for $tableName ..."); - $sqlIndex = "CREATE UNIQUE INDEX [$tableIndex] ON [$tableName]($colIndex)"; - if (IsPdoMode()) - { - $outcome = $conn->exec($sqlIndex); - if ($outcome === false) - { - FatalError("Failed to create unique index for test table: $sqlIndex"); - } - } - else - { - $stmt = sqlsrv_query($conn, $sqlIndex); - if ($stmt === false) - { - FatalError("Failed to create unique index for test table: $sqlIndex"); - } - sqlsrv_free_stmt($stmt); - } - Trace(" completed successfully.\n"); -} - -function DropTable($conn, $tableName) -{ - $tsql = "DROP TABLE [$tableName]"; - if (IsPdoMode()) - { - $mode = $conn->getAttribute(PDO::ATTR_ERRMODE); - - $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT); - - $outcome = $conn->exec($tsql); - $conn->setAttribute(PDO::ATTR_ERRMODE, $mode); - - } - else - { - $stmt = sqlsrv_query($conn, $tsql); - if ($stmt === false) - { - } - else - { - sqlsrv_free_stmt($stmt); - } - } -} - - -function SelectFromTable($conn, $tableName) -{ - return (SelectFromTableEx($conn, $tableName, null)); -} - -function SelectFromTableEx($conn, $tableName, $cond) -{ - if (($cond != null) && (strlen($cond) > 0)) - { - return (SelectQuery($conn, "SELECT * FROM [$tableName] WHERE $cond")); - } - else - { - return (SelectQuery($conn, "SELECT * FROM [$tableName]")); - } -} - -function SelectQuery($conn, $query) -{ - return (SelectQueryEx($conn, $query, null)); -} - -function SelectQueryEx($conn, $query, $options) -{ - $numFields = 0; - if (IsPDOMode()) - { - $stmt = ExecuteQuery($conn, $query); - $numFields = $stmt->columnCount(); - } - else - { - if ($options != null) - { - $stmt = sqlsrv_query($conn, $query, null, $options); - } - else - { - $stmt = sqlsrv_query($conn, $query); - } - if ($stmt === false) - { - FatalError("Failed to query test table"); - } - - $numFields = sqlsrv_num_fields($stmt); - } - if ($numFields <= 0) - { - die("Unexpected number of fields: .$numFields"); - } - return ($stmt); -} - -function RowCount($stmt) -{ - $rowCount = 0; - if (IsPdoMode()) - { - while ($stmt->fetchColumn()) - { - $rowCount++; - } - } - else - { - while (sqlsrv_fetch($stmt)) - { - $rowCount++; - } - } - return ($rowCount); -} - - -function NumRows($conn, $tableName) -{ - $stmt = SelectFromTable($conn, $tableName); - $rowCount = RowCount($stmt); - if (IsPdoMode()) - { - $stmt = null; - } - else - { - sqlsrv_free_stmt($stmt); - } - - return ($rowCount); -} - - -function InsertQuery($tableName) -{ - return (InsertQueryEx($tableName, rand(1, 20))); -} - -function InsertRows($conn, $tableName, $rowCount) -{ - Trace("Inserting $rowCount rows into $tableName ..."); - $count = 0; - for($i = 0; $i < $rowCount; $i++) - { - if (InsertRow($conn, $tableName)) - { - $count++; - } - } - Trace(" completed successfully.\n"); - if ($count != $rowCount) - { - die("$count rows inserted instead of $rowCount\n"); - } - return ($count); -} - -function InsertRowsByRange($conn, $tableName, $minIndex, $maxIndex) -{ - $rowCount = $maxIndex - $minIndex + 1; - if ($rowCount > 0) - { - Trace("Inserting $rowCount rows into $tableName ..."); - for($i = $minIndex; $i <= $maxIndex; $i++) - { - InsertRowByIndex($conn, $tableName, $i); - } - Trace(" completed successfully.\n"); - } -} - -function InsertRow($conn, $tableName) -{ - $tsql = InsertQuery($tableName); - $stmt = null; - - if (IsPdoMode()) - { - $stmt = $conn->exec($tsql); - } - else - { - $stmt = sqlsrv_query($conn, $tsql); - } - return (InsertCheck($stmt)); -} - -function InsertRowEx($conn, $tableName, $dataCols, $dataValues, $dataOptions) -{ - $tsql = "INSERT INTO [$tableName] ($dataCols) VALUES ($dataValues)"; - $stmt = null; - - if (IsPdoMode()) - { - $stmt = $conn->exec($tsql); - } - else - { - $stmt = sqlsrv_query($conn, $tsql, $dataOptions); - } - return (InsertCheck($stmt)); -} - -function InsertRowByIndex($conn, $tableName, $index) -{ - $tsql = InsertQueryEx($tableName, $index); - $stmt = null; - - if (IsPdoMode()) - { - $stmt = $conn->exec($tsql); - } - else - { - $stmt = sqlsrv_query($conn, $tsql); - } - return (InsertCheck($stmt)); -} - -function InsertStream($conn, $tableName, $dataCols, $dataValues, $dataOptions, $atExec) -{ - $tsql = "INSERT INTO [$tableName] ($dataCols) VALUES ($dataValues)"; - $stmt = null; - - if (IsPdoMode()) - { - $stmt = $conn->exec($tsql); - } - else - { - if ($atExec) - { - $stmt = sqlsrv_query($conn, $tsql, $dataOptions, array('SendStreamParamsAtExec' => 1)); - } - else - { - $stmt = sqlsrv_query($conn, $tsql, $dataOptions); - if ($stmt) - { - while (sqlsrv_send_stream_data($stmt)) - { - } - } - } - } - - return (InsertCheck($stmt)); -} - - -function InsertCheck($stmt) -{ - $numRows = 0; - - if ($stmt === false) - { - FatalError("Failed to insert row into test table"); - } - if (IsPdoMode()) - { - $numRows = $stmt; - } - else - { - $numRows = sqlsrv_rows_affected($stmt); - sqlsrv_free_stmt($stmt); - } - if ($numRows != 1) - { - die("Unexpected row count at insert: ".$numRows); - } - return (true); -} - -function GetInsertData($rowIndex, $colIndex, $skip) -{ - $query = InsertQueryEx("TestTable", $rowIndex); - $data = strstr($query, "(("); - $pos = 1; - if ($data === false) - { - die("Failed to retrieve data on row $rowIndex"); - } - $data = substr($data, 2); - - while ($pos < ($colIndex - $skip)) - { - $data = strstr($data, ", ("); - $pos++; - if ($data === false) - { - die("Failed to retrieve data on row $rowIndex, column $pos"); - } - $data = substr($data, 3); - } - $pos = strpos($data, ")"); - if ($pos === false) - { - die("Failed to isolate data on row $rowIndex, column $pos"); - } - $data = substr($data, 0, $pos); - if (strcasecmp($data, "null") == 0) - { - $data = ""; - } - if (IsUnicode($colIndex)) - { // N'data' - $data = substr($data, 2, strlen($data) - 3); - } - else if (IsLiteral($colIndex)) - { // 'data' - $data = substr($data, 1, strlen($data) - 2); - } - else if (IsBinary($colIndex)) - { // 0xdata - $data = substr($data, 2); - } - return (trim($data)); -} - -function CreateProc($conn, $procName, $procArgs, $procCode) -{ - DropProc($conn,$procName); - - if (!IsPdoMode()) - { - $stmt = sqlsrv_query($conn, "CREATE PROC [$procName] ($procArgs) AS BEGIN $procCode END"); - if ($stmt === false) - FatalError("Failed to create test procedure"); - sqlsrv_free_stmt($stmt); - } - else - { - $stmt = $conn->query("CREATE PROC [$procName] ($procArgs) AS BEGIN $procCode END"); - } -} - -function DropProc($conn, $procName) -{ - if (!IsPdoMode()) - { - $stmt = sqlsrv_query($conn, "DROP PROC [$procName]"); - sqlsrv_free_stmt($stmt); - } - else - { - - $query = "IF OBJECT_ID('[$procName]', 'P') IS NOT NULL DROP PROCEDURE [$procName]"; - $stmt = $conn->query($query); - } -} - -function CallProc($conn, $procName, $procArgs, $procValues) -{ - $stmt = CallProcEx($conn, $procName, "", $procArgs, $procValues); - sqlsrv_free_stmt($stmt); -} - -function CallProcEx($conn, $procName, $procPrefix, $procArgs, $procValues) -{ - $stmt = sqlsrv_query($conn, "{ $procPrefix CALL [$procName] ($procArgs)}", $procValues); - if ($stmt === false) - { - FatalError("Failed to call test procedure"); - } - return ($stmt); -} - - -function CreateFunc($conn, $funcName, $funcArgs, $retType, $funcCode) -{ - DropFunc($conn,$funcName); - $stmt = sqlsrv_query($conn, "CREATE FUNCTION [$funcName] ($funcArgs) RETURNS $retType AS BEGIN $funcCode END"); - if ($stmt === false) - { - FatalError("Failed to create test function"); - } - sqlsrv_free_stmt($stmt); -} - -function DropFunc($conn, $funcName) -{ - $stmt = sqlsrv_query($conn, "DROP FUNCTION [$funcName]"); - if ($stmt === false) - { - } - else - { - sqlsrv_free_stmt($stmt); - } -} - - -function CallFunc($conn, $funcName, $funcArgs, $funcValues) -{ - $stmt = sqlsrv_query($conn, "{ ? = CALL [$funcName]($funcArgs)}", $funcValues); - if ($stmt === false) - { - FatalError("Failed to call test function"); - } - sqlsrv_free_stmt($stmt); -} - -function handle_errors() -{ - $errors = sqlsrv_errors(SQLSRV_ERR_ERRORS); - $count = count($errors); - if($count == 0) - { - $errors = sqlsrv_errors(SQLSRV_ERR_ALL); - $count = count($errors); - } - if($count > 0) - { - for($i = 0; $i < $count; $i++) - { - Trace($errors[$i]['message']."\n"); - } - } -} - -function str2hex($dataIn) -{ - $dataOut = ""; - $len = strlen($dataIn); - for ($i = 0; $i < $len; $i++) - { - $ch = strtoupper(substr($dataIn, $i, 1)); - if ($ch == "A") - { - $dataOut = $dataOut."41"; - } - else if ($ch == "B") - { - $dataOut = $dataOut."42"; - } - else if ($ch == "C") - { - $dataOut = $dataOut."43"; - } - else if ($ch == "D") - { - $dataOut = $dataOut."44"; - } - else if ($ch == "E") - { - $dataOut = $dataOut."45"; - } - else if ($ch == "F") - { - $dataOut = $dataOut."46"; - } - else - { - $dataOut = $dataOut."3".$ch; - } - - } - return ($dataOut); -} - -function PhpVersionComponents( &$major, &$minor, &$sub ) -{ - $str_version = phpversion(); - - $major = strtok( $str_version, "." ); - $minor = strtok( "." ); - $sub = strtok( "." ); -} - -function InsertQueryEx($tableName, $index) -{ - $query = ""; - switch ($index) - { - case 1: - $query = "INSERT INTO [$tableName] ([c1_int], [c2_tinyint], [c3_smallint], [c4_bigint], [c5_bit], [c6_float], [c7_real], [c8_decimal], [c9_numeric], [c10_money], [c11_smallmoney], [c12_char], [c13_varchar], [c14_varchar_max], [c15_nchar], [c16_nvarchar], [c17_nvarchar_max], [c18_text], [c19_ntext], [c20_binary], [c21_varbinary], [c22_varbinary_max], [c23_image], [c24_uniqueidentifier], [c25_datetime], [c26_smalldatetime], [c28_xml]) VALUES ((0), (113), (-1), (-293433712), (0), (0), (-3.4E+38), (100000000000000000000000), (null), (0.4204), (0.5017), ('Ð ¢î ãbýýüzbo>ªo~äbhîýÐ~åÜB¢ß©+ü~ßÄAZî>öî~C_<ý@:Oåãã/vÄÐ~bA|Ö/o ª :+Ü~äÃ*CuzårBîU¢/öß@_zbü/UåörbßoZßo¢ß.ðÖåCvö,bðäðÃAuZ©hbZÖ¢bb£ZaZ>Uåz+ĪOüÄb¢ßîOauö_Ah>BªoCv¢v./:äOÜîoÐýZ*_.îÖðBüî>ãÄÖühaovhv:ýð|v~Ö¢hvã<övÃ~bOäUazÄÖ|ÐÄåAÜÖå~Äã*¢ã¢oo:ߢ£*Ö£z+*Ð+bÃ*b ðÜÖübªO>ÄßðÄã/.Ö'), ('Öý.C+.~a<äã+büa_ b|¢:|.ÃÄ~@ð ª*ZÃz @£+_>~âao|©å.ä/ªßAZ/ý/©ãbboU**©Ð£>îü_bbÜð,@oð¢@:OÐ<£Aî@rÄÄ.>_+©ßåðUîüªð>î/|ÄbªåAÄÖüÃUߣ_u|ÐÄZý,ª<ãУ>,ðZußýöãZböãu<ðZuvb:zöäurîAöu,öh,u*b,AA©ª,v©Ö:Üð©O:,©rr:bbaåüýªîCß/ýhååOU.äî©r:ÐhCvAð|:raîa AhêÜ+_öaÜÜßzvoU ZÜãªZÖäÐ|ü| Uýuå_oBÄUhZ©>Ä* :Щ,uäÐCoÐÐ+ãår.ý¢Üß|ðÖBb@Bh>OB|._vßZoC+UBÄß/Äå+ðäÃåð_Ö_ý|*Ã'), ('¢ý¢oüZ¢+Cß>,|:uö© ¢Är¢.@C@î_,abßåü>Ö,~bü£å¢ãCå:,Üãß+|Z>rÜТbäA*ã ÐB ßZ<.aBÐBå~.ub>Ö_uÃUª>ã@zß:AüB|Bbb:ððvräzÜbBýß |üÖ*ÖOååZZbO@î <:ãuCvöB/a~Ö Ä:Ö_><îbuÖßðOOO¢äb©öüZ~UÖÃbªåz*o/|oã_@ÃAývvÄAzðBÜ:~ððß*/ä>Üß.zrð.©<¢a B ,¢üÄAåu:Öüã.Ð/u¢rÐýAÐäªÃb*Z*ßzB/+U@Zã¢,üv b:<ÜOý/ã.Z*b~@av£Ã~ä¢/ä,A<îöß~ aÖ.ßhuZozðýåßBz©ýv|ýÄ+.Ä¢ªbÐÄb>Aãü zOÐåb+@vö£|bzÐßî©Uªª£*ÃO_h_/U/öAãÖaÄ_U|Ä £ZÐü._å¢CA+@_bªhÜ£ öuCOZ<ðvªÐouý_bb>@îaovÜb>~BbßÖ@Ä©U~zöB£©h~ã|,b_.ß>UUª¢oÃ:b©Ä+ä<ãr/|ÐüÜh.äUå~.r©/AÃUz>ZCAbîäå.öZvBa*ö@ß:b+ã++Ö~ZU,U©Ã¢o ð @£bîUýðö¢<,äÐðuurö©îÐZ>¢¢rãßz.¢,ßO.îvOhvAU/£ä/_v,Cå*Ußð©Ã:£:ã¢î,Bu|î£ß @ðOUãU:îb©|/O@voüUÖuß@Ã..*b_¢ä£¢~ß+/b~b/u_~ßvrÄäßb~£î~@aUÖß>OðZuaöã,oãB,O ývöîhu¢rÄ_výÄaZ*OzÖ|Uzv*Ü *zÃýür<~~Ub*ª~äýrÐüAuãCߣܢªbÃý~hßäz>Ð|b@h.AZãÄoÄUC_,ÐC@rî*r|å>îv>ußÄ_>:oî@b.B>ßb:åã|/O,Ã*Cª++>£¢>Öߢî:oÖ£,>uABC,_CBý© ßzßC+/îbÜ,ä/î ÄOOaÐBðb©o£Uarãv,£üOð<ßßbÐã|ªC*~rßÃ+ðBU~.Ü£©:C/ÃU>au<Ð,u+,ðaU*/|ßbbu@:*Z.+Öoãh özhzCBhC:,:a_oU b*Bä.buOßoÄßBüu+ubýÄBAz:©ð~ßb:ßhobÄßÖZðåBü@ö, A>obÜ©|ã|+Öh©AªaU|£@ã©Ãðv ÖU£öäî@ãüåÃÃOC_vîAöÄ@|u©Ð©Bðý©,ýßOî r¢>ãªßbÄz_+_ü~Ü£ý|ßOAürrß~äZ>Ãäarubv@BCÃ>>*OZ|ü,åÐav*Äzu.zAaüÜuª©+ Ö_@Cå/hÃ@ªAîU¢:,ÖÃ~£<ðßäubCÄÄZÐ>ðurä+¢CãuAÜ¢+,Ü+@+:ðbÐäãÄ£îß /üUä@ýA.~ah|Ö.:hr<ßvÐO ßß/r++oÐÄZ>ßb_Öä.Ööð+ + z.Ã>Ob_ªU¢.bBߣA/Z.vU¢,ª:¢,@Üvü>/Båüã|¢Ðî|/CÃÖ¢Cîhîz|~㣣bUä<ÃbåÐå,ÜÖBbo.îza <£äOAÜ<üÃÖÐr/<*Öa CüÖb~v@ý,bÐå©ZãzO.+©:î~ðAh£~ ¢Ä,,~rb~,bª©A,.ußb:+hzð,*äu+ãb:¢ö©Ü* >BbßÄÜ+Üa.>OÃubOrrzÜabÄý©Ð*ªüÄ+¢bîzü,~._|ª /Äroß,:Ð<:| :+Bhý.ÜßZbåCßîBߢßÜu,Ävv:~@u@ýåo>|ä~Z/.hßßb,ßB*ðZ£BÃÃ*ðÐCß©,å|vzoТub>>O+£/~©å:*uªðåårü£Ä h~ý:B@>£:BßuZãÜöü>.ªãª,@ä>Ü*¢<îß@öð£BýÐ:B@äObÜZCýo@åýAbüOäz_ÄZ~oßýa@+bß_AÖ:vä_Ãu~ªu~ããu.aU<>O.Ävßz~:ªåÜ©Cöäu~ßC£oböCba üÖª@C|z+¢bO:_öU¢Ãß|:åýaãrhã B:~rßý¢Ãý+©Bß|uo,*|Äð/UZ@_/üÖÖzüÐývo:ý¢_ |¢ h:© Öã/ã~h,£rz©v|£ðubÃ*ßZbÃ,Ða,+ßðhbåCrî <,ªªªöo *ý©¢,v:BäAÄhAC|ÐaäZo¢,::aî~zÖr©B_b+AÐÖ,£ÃöaB>Öz*ãä~Ö©aÄö_rª>©h*©*ªªöÐ_av:¢:©,+övªU<åªð/@+.>@oîý|ª*Ðîo*ªZã zA|b|ov*î/©:b.oB| b>C|£îbb¢bBU¢OAZª,ü ã vßý_åhZ ÐbßZU*uÖ,©ý@_rU©ß>.ÜßÖhu<ÄUz|BaîÖzzA: ðÃbäaZ* Üb| Ö,Ä>@üð|ß@CîOZ£bÖUîru:|ÐÄöÐãåoöOÐU*¢rUß Bå@,~oÃТv|_o*CZßýß~uB©©~ðOööAå@:|B öoo|Uar¢~,A+Cbßr:rCauäß©üÐߪ+bBªvÜ*©ãU uîbbOåßßäU©bU:BCb*<~@uªU_Z/C Ðh+rååCoߢßOîð+Äýäoo©vz*©ßaZß_å/Ã/ßv.h@~oÄaª£vuÄbZý:oÄßÃZvzZÃO¢aý*îO>üC,ðÃßö/r+ZäoÖbZZOܪCühãuîýBa¢z*buBo~_<ðåUbîa/_.~ÐÄOh|+aý|Ãßßã/~bðßð£åÃÐÄãÄååußß+|@Zîhu<äBOAã©CAß>ãb¢¢ÜÃAüCÜÐî/u o©ðÄ b|éîAÐÃb,+ÖOÖßßUö©ð¢*ý,ZöUîÄ£ßð*Z|rý+b/|o.Ä,ýÐÃ.>îÐvÜÄÄ~z+öÜßü/~:,åOªßååu+<ðvazu|ß©aãA.UÜ ZbÐr*Ö©>ßßZ ýCåÜ|£ZðhbÄ+b£_ÐU¢o*bz,ö+:+/z¢oÜ|oã_hb<ÖöãrU +hÄrövo£ðUÃÄð,Bvã¢>îößîßý~Oh.,UBo¢a ©u++ýh¢îoßr©,>Buà ,_uîu*BAU@a~_z,ܪ¢UhðßOa£o+>ÖîzA.ãU:BÖaavöîBî~vîZ¢î<ü|.~+uvbý~Z uüoÄbð©ã¢UäüîbBbî:uhaßbä/£Bå>üAé|åð.|ä*öbäÐÃ/©zCuo@+o .îzZ,ãß*£uOZ rO¢ ªäOöü*oýüÜÜZß>z@U@h*Cö~ßî>ü+:|oZ.bAbãÄäÜBÄh@bo AuÖã¢ä¢©ãÃýªß|äa:öaA:C£*Ü©+v,ßbÜÐOðoÃÐ@.ß,r+äCbuuÄÃ|bhäð|,bö<+ZA¢u䢢à Ð/~UbðZ>©¢hAÃB>ЪzaªZ©|ö/CoУv.~@+üh:îßývî+ * ~öhA ,zUªC@uªoabü.*îZßBßrÄbüCÜßZßÖu_ß~Ü£ÖªbÃ:|öÃ.h~BüUb:¢Ãߪ CßzU.ãö:U+£Ão©Ü,+£Ö+|ýrÃz|ÃÜðhÜoz.£¢ªCüUbC¢ ©ývßC¢ uaabÃAz.|aüßa<@>Ãß/Aßu/äî|uß*ãboã::+r>zB*o¢Ö_zªäo<|ýÃ~@ý|ooCß>bÐðßý|AhzO@ âªÃzªü*£åvb:Uð:ßb rZäCåßÄzbãao+<+îî+åã|h:ãO<ä*Т|*väzAã@Ðäªzî@£ÄåªB*AbîrÜbãaö.ü+|/v©î@o b,£AUvuðr:ªUv,~Büb|b|:zAB@oh_£<Ööå|£bßBÐüýbU|ß|ð~BåЩÜî/ßrÐßýäýBO<Ä*UäbhöãC|,b©ý*Ahãö<öäÃßßߢßßöZÄÖÄÃU|Bu+|Ö/rOãAr@Ã:ßÜboÄ@ÄýB>.aÖüäÖözBðÃ|üÄãCCäoÖ©U Bbî.u/oroüZAbAzbhîZ:ðb,*,¢î>ÄÖ/ÜUzäÄ@äåb Ä_~©ÃÜBßßaä+Ü,A©|A~@©>,@@ÜÖO~_vaUhr@ß©ÃäßÃîÖ~,<ðßbüãz@©uobhîaðuvÖäh£r>äå ÐÄü~¢öhzã*_|.ÃÐ:ý+Ö@ßãî:£aÐvãÄjkl@~ßâ@BaªO|Ãà o.OrhC*_åß@ö¢uär© Öü©|ä£@ObÐýÃüOÃîåoCb_*r/A<.äZ:ã u>Öýö£aߪãvÐî.ü~©öÜ*b¢ß,ÖU@+U©î¢å£<<.Äöuhz:ÃB<_¢@ãO ÃÐ>Ö:¢ZÃAÃU hv@.ªböauÜO<*Ä/äbÃC:Ö:Äa© ä©.ußÄuUßhå:oý_UåÐ|A,ÐO/¢ |Ü|Ã_>ÖvrZ~ýö|ý:¢öC<ý~|.._Ä£ZððZýª@BßbC__äCZBÜ,zð¢AhÄîߪ+@aÖråo@,b,ý vªßb<>ªCUab£ßªðßüÜCª~b_:CUîuüåa+.ý©ArBU.r>h@öB.vUÃ/zZ+Ðrb+öuª,h*aÃUßöåªå@Ä.BöA>aã¢üZ:ÃbAU:üãhaßß*Ü>vä~ *b_ß~ö£vAäö,ü/äîzªr~<îÜÖ>î¢ÐO@UhUZ¢rîî>B~Oöür¢ã*>är£©aä:zßZà ðB@¢ßhÃß©ý.CCýzüß|åbvuzz~U,¢bÃßrAzåU£ÜåÜz* u_:o,îÄ,/@bðUå©,äuOÃýZuzBªîîbýaur© öABýÐ*Z*Ãü+¢*ü+a|h£*ð hbßýß :>ãÄ||Ð+ÜU/*Ãö@*Äü_öÃü:B| ,¢åArÐ@öårh©bßUýUzÃZ£ýßß*ß/ä¢>AÐouoB<ÐAÄãÐb rbîÖÃÄÄh,vÃ.ãbÃ+z£ +o,>ã£h@>Zý:îð:ªzðÃOðßî î_Öv.b©,O.©Oß|bC|rrä.ßÜ<+<,:ª<,~Ub~ZååC:ª~Z>UvßÐã~¢Ð~AðBÜvåð©rÜÃaBðÐüßu©BÖUã@ZuC©£ªAä©ýuh>@ªaOÜ.ߪbÜUAªÖß*BÄ~:vª©îüãAðßbÖªä_©ðao.bða|UöÖßbÜCb¢Aüå>¢vhvbÃß@Uö/r©¢vaUåîßOÖUrÜ<~_ðÜz¢*ßö<ã¢Ä/@/_~v£Cb£bUhbb åAö<~Bv~:¢ßãä©ßo¢ObhaåCÄ ßZ@£oä:*Äß._+CrîB ªZv,ÜB£ö~,Uüäýã/UüÖ<+ ÜAa ðª,ãA+ýðÖub,>.ýrvbBÖö/Ãðåuh¢öZ>U,:OA|Ö*äüðuª,ã: åý_ß|ÄhªOb/rüu*Ä¢uÃÖ£ÃÄ.zhî@r,Ö@übö.|Ãüãîbvzã¢ý©ÃÐ|ý|räOvh@/ߢ.ÜzðUåZðoöväã|.,|Ãhuã<ãÖüÜuÖo.O_av©>að+B+Ö~¢ÐÃ*ZÜå~ßZ~ßðö_ö<©_ÜÐÜÐã~îî,¢zbãbîrAv.öývã*U.<Ð_:üî.ãüãäaäÖ+ä<ö@UÐÄAÐ>ÃbÐ|>å.<.BO+ð£,¢aCb*A,©~Cßîãý©ÜÃßüZäÃZ:ü/@/©O>_zC¢Ð~ý,:Z,h/Äü|>Öz>_ü+_ðУbî@üý,¢UªÐ+öOÄ.>ý<_ãÖýäAÃ*Ãö~ð~Ãaöî<ö ,Öß:+ãCßhÜh<+b+åîbb>Z£Ä©©©oÃöUßö|©BßaZªAîåuîßB|@zCAß//bÐAoÜÄÃ/äåüOðÄü~äª:a~,/ßä~C¢+ßuý>C¢*Üä>î*Ãßu><üva@ß~*ß©,©ß__+båß+ßßäðÄC/@vb.ÖaözZC©äª+ðrßÃA_ðZö/ßýäÃÃB*z.+bBÖv¢©äuvv,ArýåªbU©~@Uz¢ªÜoU¢OÜ+:U ß/_b+©ÄAÃAÜßäßbAB¢ãäßÜh©ä>¢~bðzðb~O_äîrrAðßUü|oaã©ü/åÃv,|ªCC£¢£Ð/Ã*ðåÜaz©ãBA,ÜUZAÖBßüåA+ ÜýUÜb_,vbßvrUhb©©Öb~UaÜ+ßBî@ßÜ_©ü~BÜÖ@ªZÃÖzüýbߢAoZhýÜBÖuåüü£å:zvªU£AZîhhÖå>Ãß+Ðzv>£<.©r>*|å|££ßzýÃ+ãhªÖvhýUîªb,>u©+,ßßãðAh©Äa~>CbOÄCaåo©Ö, //ZîZo,*üv/@oä:ßaðAU| >Ä£,>,>Öu,|¢U@㣩_v|boÖÄhÖüZ:>ðååa<|ÜC©:öbÜ@<ª öZrÖßAöv*üðUÐ/uZÐ:©Ðubvä_äߪa+uU@/aývÖCäöÐhªääöAÐÜbbßåBîA*rüu UüÐÃÐz.uaý*ßß>ð©ý©îÜåU o/£ Cüð|o¢ªUo¢@,Baa_u@å:~ßBߢî£ÃhîbAbzäBöOCh~.O£hU.ßåbaA£@r<üÃÐUhßCU|<*ßhðªb,Öåo£:Ã,<äßbåa,@B+CU/åýÖZðb©î¢£ö/ü£î¢Aã@a ÖZaA*_BßÄÖß*ª>ÖCåÄ,A>ärä£ð+<îb_ªuCCÄÖU~@|bîåob+ho>oChýãåbo,/Oªð£urh<,b+¢hä:.ü Ã|_U ,å.>UÄ©Öª©@ýî>ã~..éBß:Öbü| b/ÄðzÐOßýZÄO|üUrÄu|~:ßüB:ÃÖÐha£CvZO,ߪ©o bªhÄ@Ch_vbä.ýåU:¢:¢ý/£ý£ªîvßä,B_.U,rã,ö|¢OåüßÃZ,ððooboå,¢>Cªã ÃäözaÐ>AªU@b+vÖAãî¢åäðuö>U*ý~*v ÄZ:vür+BÜÄa+rbýüªzz@:Ð*ýÄb ÐßÄ.A£ðo./bü/~Ããð~vaîý>o ©Zz¢h:_îä¢ZbzýÄvð~@| åðÜî/,/b/Öz|B**¢@vý>b~ü,Öªª|Ðý.ü~ýß*_ÐÄbCä/åý>r¢*£,z_bZzü+oßßäz/* ýC|aBß|ð+Ohb.v.ýrB~B/@Ä<,o~åvU|ý_©@Bb*_ªÖ¢ÃBoîöî.ߣuäUå:.bªðu©£h¢o@ÖÐzðä|ü*ß㪠>ü©Äz¢U Ã/AÃaãªÖªßßZuÐÃ@bÐ.AZð üßAäªCüðÜ/Brß~rãaOUªrzðvÜvh£~rubÖCbåýýý¢¢äbäC@îöäå,ãAzC£åÖB*üz |rb/Ã@zäAr¢ü vbhU*rßÄß+A:ý,au墣z_<£bBu._'), (N''), (N'Ü,ߪäýÜ@¢ÖãAýÃhz¢h|ü©ßÜ.bhhßUÃ/ĪBraOªA£åßîÄßAB_ZU+UB/©ýª,@Ääüvð C.å©v:vªh@U:vÐ ðÜho*ð©ð.ß_*åöb.ߢhãa~£@:v+vo,Üß/ß.*bO/oîäbäÄB+£b'), (N'Cå h¢ÃB|,ÜAbÖðB_Ä+£rüöh@ßß+åÄObýö©_
BbßöoZC+ÄÖ¢oöOß*ß rärÃbBB+ª:>öoä*/b<üärª~ß*u >ªzvä¢ohÖZ,ýÐäÜ©©äܪÖß>C +öCªv,*ßÖ~ÜzO¢ ýÐ~o£©b_<åAOüvý+>U:ªAu*:äCðã+:ÜrOåÃhUh£öOBv¢zvÐ.~.ÄCa_<ÖÄb+Ð*åC/Uüß+zuUBß©äCbã_ãrvböÖ©r£.ð/OÜî~zýã+ <*C*OªZ Ã*Ãä_@_BßOÃ~Üoü,ßbzîB_hU~ ÃuߣCå*éCv>åÖÐrZ,b*ABýîb~ð>BýööääüªOüÄü/>£ü+A~£ä,*Ð/uz~uðª@ö䪩o £AÜCA ©Bð@:A_aav£Ã£u>£_++U+Oa|îüßA,_äÐ+Ab*ZÜhr,~@©uðAöãa<.ÐÜü>B*¢¢:.îzªOh*ÜUOäÜ£ *üðär+b:aªb|Uðh£ýåübvz¢.ÜéÃO|îOãÖa£|*ZU+öîÃ|ªå.¢~Oýß~bA*>B>Ä+Z/ÄäÄ>ðh>|+CåТ/£ðÄ:zÃbß><ÜöOA+ßoãööOv,ÖðBß_v+ü*ä. bbÃý,Or.¢_ö:O|örB©<:©zÄ+ªUvuBߪ ¢AÖbý©_ÜýãÜrü¢¢üzoå©,ö©Ö+ ,oîüzßð¢ßhßår.CÃ<ß_>,üªzîðîöðÃ+ýÄ©Z,äa_öZ*ßßãÖäävöhAz£©Ä v/ ßåý~ª¢äU,:ª.:|<îvA ÜZã|@h|ð.>.ßr@C~*uðruåª:ß*Ð|ÐoÖ/zö©büz::bÄ:Öý£,î*ýCÃ*ßCå©+ÜO.ýOvÐü>vãbªbÖ<.BýUßßÐð_BÄzA<ýåßåa||~bvÖZzß|ªäý|>åa,£Z.åuaOª ¢aBãAªåöÐåüÐZr>ð+ðUÐÐ@~ü@ÄÖuÐöU<*äu@b<ª|ðÜCvba ¢UªÖßÜ+äðrzaüöUÜa_ Oa*ä©ÜuÜ:ðä*/>+hüCO/ÄüaZzÖ:¢¢ÃýBÄÄß Z,ðü~aððbää@ªßv£ãB¢rab_ðzªhÖð֣Щbã~rräÃbbr:åöAß/*vªbª uäý£üäoý uhã_ü©:¢uöoðãbA+~ ~Üß*öUb BvãüäZZB>~Ãß©>¢zUöUv> bÃAAU £<ߣ~AbO|.ð©ýZAUÃA@ýo>CaýßßÜuoößAö:aßbU¢:/ÖßA~ZuZßýý@vOh+Ü£Üuvö. *ðüU+v uªÄ<,bßvvªß@U_ßãU_+:v >*u.öb/vurbãÐÃbzî~rhOß,üBßCCýãîåbîC+UüCÖßý+~:.ßhßö¢ßvChÃüU hö Z,zrÖã|Ãbö:/zO.ß@Ãaý brBªöÖ.,a£üß>ÄüvU£ü|Bå© ãßövoТhöauOuªßbhZbz>ªßÜb¢ãî.ßß+ãuý<ãª:~C@Üb©:ß©UabßZ©Ð ý©>¢rCa.*oî_o*z¢ß.Ä*Ã/C~ßO©.ÖAbO<£>oCß,ý@+Ä>_Z@îÃ/aåö,¢__îßA:ª© bÐb>äh@üAÐß ÐªA@©ÜÄ arUBAö¢rý*_îÄ+/ßuaA|îAãu|zßðåz+Ãå zä<ü:î>zü©Oîª*Orz£Ðo.ý*A@ÄCÄzÃüäA+b| v_CbªboA£Ã<Ö©aÐöÐð @::ÐßßýZÄ åUZªäbBªCßðOýäA£ö£ÃUîZ:Ðbåßß UªÜ:ÄÜ:rhßü¢*¢B, :~Äoã*~:.ªÜ_|ýUZvårhÄZB~/ßãЪ|©**Ä.uBO,UraZO©©~ßÐ*bÖåv¢o>CÄA@äãäð/rã|aOB<üöÄaððÜuaav<ð:bBvÐü:+Ð O/UU<ÐvÄoüvð îo~röß>ä|+aüCÖzZu£Cuª@~©©z>ÖZC@£@ÖOChÜ@|U<ªbUv*ýü.ö oÄÄ,|î@¢zÐ|:ä*/+|Oh/h_ýhð@/.ü>ßåOr>ßAß_UUåv>îhråãý.Üv>OªÐ~:A:C©ßöÃZ©ãª Ü£îOUZßhr:_uä_Au£¢C+zözU*©Äî_ÃÄðbª£ü@å/hBbbãðaðß@* :îU*b~ãB£ßî~>Ö¢oUåbÃÖOüvvî< *Öð+r+UAßv~,ÃÜß*r:_bzã©î:£|vðübOB@Ðåå@,h@ª ýZÃaý,¢bß+.a>Bað|ßüBäO.jklî<Ãb,|Ä@ê֢~äzðUß©>ußä~ß _><ßå,ãð>h+Öüäzý.,OöuBßööªª©ßB¢BUbarAîÐ*Ü£+O_<ãßOU+:.åC:Ä_ävÜoC,@v@îãCö@©ßo|Т,:Üß>~Ðo©*ö_>>A:|¢@ü£ZüðübZäߪÐ_ÄBh,>ý©_©+~oüzª/öCbî£Ouvßa>@|:ubãU©|b<Ã,Ãîhü:<ÖÄ/îåZzÐz,ÐÄ|*<îhA.OÄ¢zý:/,ßB:A/ßuC@C.ãÖZrOBBª*ö*/å+ßußz/Ä:ü£a+ößu© uüßÄr©î>:råãB::©~£¢ª.ßb.üäCZãuZäðaÄ,¢oOh ãuߢåO_Ä+oªbð.å+Ö |ª£UðaðbÖbA.<>vBüä~ üðÐhãCväBz@v.ã~Ä©ªzßÃß.>©öÃBßß/aß.*¢å@,ßÖbü:_Üa¢î|/+_Ü£o>U:î.obZä>:ý<üãou>b£äüöîðbOU,b:aÜrC¢b<,~ý©~AzaoöÐjklÐýz@Z_ü*üßîßA:uZãrBÐB<£O,ðªîîU>Bð.ZÜå~*>@bªoÜÜaãßäB@O.üU*hh+öb/Ðzßå¢O/,vã~rbå<,¢ðÖCAhýð>:A/Ö:ý|:ªäãüå+©+<ã©~rî+äÐ>:Oö,ª å,Ohý¢ßäAÖ:a¢.Ö_bÖ|Zz Z_©~aö_+>rv@BßãbZ*Är¢vZ+ü<|+|böUr<åOu¢Cý>~|ßhb_Ðv|Obî£Ä,üäÜ¢ÖåÜ:/:baî£ä©UÄÄAÄ:UîößBaîå _Ü>u+äßÜ:Buªb|î.ü11/19/2008 1:26:51 PMThe quick brown fox jumps over the lazy dog0123456789,.;:?[]{}()-+*\%^=~!@#_|/0111/19/2008 1:26:51 PMThe quick brown fox jumps over the lazy dog0123456789,.;:?[]{}()-+*\%^=~!@#_|/00'))"; - break; - - case 2: - $query = "INSERT INTO [$tableName] ([c1_int], [c2_tinyint], [c3_smallint], [c4_bigint], [c5_bit], [c6_float], [c7_real], [c8_decimal], [c9_numeric], [c10_money], [c11_smallmoney], [c12_char], [c13_varchar], [c14_varchar_max], [c15_nchar], [c16_nvarchar], [c17_nvarchar_max], [c18_text], [c19_ntext], [c20_binary], [c21_varbinary], [c22_varbinary_max], [c23_image], [c24_uniqueidentifier], [c25_datetime], [c26_smalldatetime], [c28_xml]) VALUES ((1), (null), (-32768), (192263244), (null), (0), (1), (-1), (0.0782), (0.3209), (0), ('üo+/>ýz,h/+@ª ä/ðb/©vÜ,vaä<>A@ ÃÖ*¢å>¢Öaüª|uüOîÖvåäî*.zOÜB.¢>ß*ªC©ÖUÃüðz .Ä£rozãüÐUo©. *b/B.rC>ovöCZ.©bZö|~öãý¢ß~©Ü|OðÃ*.rUå@Brî_,vAa.z©ürCã+£,:<ªª:Ъba/öý:ß,/:+bovÐ~Üo+C~ýßãüÖßÜ,î>ÖoözUªb.ãã|Ö©: >CÐîã/bªaBr~üU£ba_ü¢åuö>üÄÐ_vAuh,¢vÃA>bb©|ðuAaBOOß|uÄã:voUðCÄ_*ýäbr üüa><îö ZÐ:üª|*<
䢩oü:Uö@|ßC*,>hã oÃ/v¢£bAbýª/rü*/> oªvÐ_CuUBa¢bZßÃßaOb~aABð,U B+ãÜîåOýub.hzb,_b,AÄÜÖ+öO'), ('zC@ *zÜCäUUÐoBß:ЪAÖ_ª|büOãÜ¢uUb_ÖÖ.bÜåßÜz+¢@©b:zöv_Cäß~vä¢bCö|zh,:ÃüÃöÃöOhOhß |Äräü ¢ª>OåÜBãZ: z ðbÜðrbª£:©©~Uö©:ßðb~ü>ßö@bîãä©ÄßäßåvÜÜýß+ÃOðã~¢ã/+<_vÄ*.Zß.hoÖÜßöäÄ.b.ÃAðvuZ äBð:b.>OO_o:<üö+䣢î+üýårÜa©:ªaÖîazÐrÄ/ÄýhãåîAhߣUaª:Ðã+räýå/©ü£:b£+|ýðßOÄ:¢B|ýO£BðüîåZoOö@*Ä|Z oO/ã,Üu©zO/ÐZrv¢äßu*ÐaÐ|Ö@z:Zbäzvbö©¢UÄuz.Öåý:hß:Ðä *©¢ªå_ߣ/îr©OAr,, >üäý¢h*zZA,>a_O@öª/ ßB.bß.ubÄövÐ.CUå:*AAaa |ðü Ã+©_Ä>öãUozz C+r£Cð|üüb* /|££ÜÃ:>Ã.uuC~U üCÖßoAbã>.ßa£uÃ>OZöZr::äߣÃhü@@©u¢að~>v_~ßZv© ðåüîCßAuÜî©a,Ä.orr ¢>¢U~u*O>>v©>Ör©ðz+_©aüÖßvZð Ä*:Ä©åßz¢+©Öª@Ä>UoUOb>äߣ©ª_ä/ ð/äÜoßöãå,*ZðÃÜb,<ÖÃßCbO.v+ªa_:OÖa_B£Ã/:CbÐAbãO~ßbîZðUÜî@*ßhÖ,ßß,Ãäh¢ßäÄbz~Ð,aC|Bßßö£ov>u¢~ZåZÄÄUð£*üAöauOUª©b@>Uubö~åhU.*ðar|ßÜ~ä<:+Ö~bäßÐ<î©ãoCBb©uÖh+Ü.ö¢Bðߣ+OãhöC O+î|å¢åªîZüå@:ðh£ßî+O@_o_rbªOO|OCªaÄ_ãvAÜ/U@BÃ*£|ArzAÐh©ãÖaÃ|v/ÄÐßÜð:u~ß|åªÖvAbäã,AhýUh+: åÜß|:>ý_ßzî/r*:.Öhh+,ßÄoäoUzÄ<£,:C ßüý/BÜÄuÖö,r©Ã~übA£/ÖÄAª©~ör:ü~ªhý£h+OvÐzzoãbîðC:/C£bhÐZuÄ_ýýO|*©bboýßuBÜßý©vüßß_ÃoÐÐãåÃrÄî/bÖbbå*¢a©ZÄh¢/@äz©| @u>Ö:ÜÄb|ßövåßbaÐðßî ßoUýaCZza,@o~ðßvzªB¢~:ä*/Uß,>h,å£aÄbUÜ/©.Ð_..CzäuÖ/zÃZÐ*Zî_ÜZåßåa£>~rÖa@o.räî:ð ööOÐÃbO+v+Ü U©,_ð£,ܢĩ:Ðîhvbå/ßýrß Äbrö:C ãüÃZ>A©ðvbhÄuZÐýßðîz+ðü bãbßã:: >,ã~býb,a_ßöîa*U£ýäbߢßuã:UöOZ©ð.Öu<_UaãÜb/ßÃ/ö<Ã+ýv_ä+CbZÖªÐCrÐäå@hßåÃ.üazÐra@,>ÖUßZ.,_,B.v<.B£ãÃðßîß©ßÃ|Z@|¢ðbÖ+Büä.:/>ýÐÄ:.ð|î£å>bÐ<Ãb/CÄhäýÜo+@CzCÜ/UUðu*o>O©öB.Z+ã<ßAZo+~ ÖÜ*.©î+îöß©,|z|@ZÜ.Öª_Ãß>uð/bÖ~Aîîo/aÐãvZAhª¢üZoU>a+üßÐrB|ð/üöäOu£<©oC@_öh<~.Bo@öÜO_ÖrbBoü*/ß,z*oö+ý<ªahý:/ã*oßa,,>rÖ /A~,>OÜbÄ|ãh.:ÄOb Öb_ZÜuÐýo*b.åB~ã@*,BCß+îÖåýuÖ*Zr*O:ÄÜov+£>A.AZ©Ð_|ð+ßörðâ_åu@Ußbãbãåb*BA/ªÜöå:rv©r.î.,ü@Ah¢+hhvu*ruýb©<~ZÖ@ªhÐÖb©üäb+o.©ÐhãöÐÄîz*|ª©UuOaÄ㢣å++Z+_ÃovuärÜ_vöß_ã|ärv~hBã/ßä _@ÜÜ*Ü||OAÖACÃ,îÃüuOOýbÜÃBÜoZÄU*.îz©aÜîovü©_CohåÐro<~©h_<ýBva.Z<Ü,ªu,Ðîðbbðu @©@üå.B_ÜÜÖÖÜra©£oäÃOÖÄ_î>azU,@Öðrö ~Zhýrða¢ä<ª_åU/îb@hÖöüb+.ßz+Uaß~U©b*Aäü£b+ðöv~*ðvbîC|,ö**îÜÄããÖ©äÄCO+h¢<£vîäðuOUUãî/¢ÜvÃ,@/rÄvßrªvB|:O_h:/Ü+ü~ª¢:ü/C>Ü©ª*ö>rB::z */+CBð*u¢ßîîbbB*bbîåöÜÄZå,Ðãhªü<Ð:¢Av@ý¢uBå.a:öUÐößUöÐAý+_@üä_~.>~åê:î/|v¢väZo©BoBbUB@+/,¢ßbåUüß+@B>ü+/+ääOäã @|ãåZ_ª<î<.UBãC+©a£:>ÖbOhߣÃ+U*>~bCUuaü.r媪BÄvªv>Oor+ãÖ>£Ö<îîB©hî©AÐåh©buvªh/b/@b.åbOzru*Ð|v<@ZÜöCüCUªb|züãÃß| >~~/>ußB_vo.,b©ðã/ÄbðZ+ߢ<|:bAovåbö~*~zaßA+ãU~zu¢åÖu¢>Uýh@ª+hãü¢ý¢.u.uvåU:uýÜ.¢åý|ußb<ßaßö/ßüöåýbÐã¢OBß,ªäüOvUuÐåÐ,|ªo|>ß.,<ß/îz|UðA~aÄîÖãrO@¢Ö|ÐÄöU|z+ðo ßÖà ~oü©ªa OhåA<ßÜö,ýO£ãÐB>©ÖväaäUrör.UbuãAÐu_|bub>~üÜ*¢Cä~<£Zî h zî©bv,_îohhîªr_/:ÃÜvABî|ã*ßÖ,ðöêîU£,hßBbb¢r>rU,öuãu|äzuaCUð|Ü>ur:zÃöîbzåÃuö:Ãb¢B.ßoBÄhЪa¢våå@Z~,ýAî_:bO@ å£*Özb¢ßoü h> ~BðvÜ/aoð+bÄAÐ_üÖý|+vbUU rvb+zUv>Äz:@ß,B ÄÄýêAåvOr*~Cb@ä©ö|oöߢCßrz.B/üª:b_*v|ÄO+ßOCî©,£ßªãäßö,îBäî,Ä:oÐuÐhb>oªCu+Ühª@uhߣ¢>ªCÜ>©¢U,©z<ð£:åo@ h¢aТ/oUz~£Ö~bã©hCü¢,äîr:ðîä>o¢bª>@ý>å> . ©ÖîÐ.büzÜråðvÄßvÄ_zÐoü~hb_ãovª¢zý_U:|O<Ü@ãääÄ~UvêßßA©oÄoÖ£åußbo|~ðÐ: Ä@b@r BÄ/>z|<£ßãvz+_Zß_ª|ÄÜÄzC£>ß*îvÐ>:ãª/ h~£ . Äz¢*ðAîý:ü<_,.zäßÖCÐ|BÖã@öä<,Aî,++~ßaoåzavZ_ýZraAZÜîu©Ü¢|ßßüO/ª.bBOAã>ã¢äßÐZßuäuÐã:BUaoêöUu îh~©ä<åCOO@:hA/ö<ß ð~U*ý>Obð>.åUªzö©oªöÐüC_£ð£BüÐÐhhðZЩÜ~oÃ/öªÜZZããbÜßääªö<ÄÃbäBBrÜZÐ z|Zå|:vzA@Ö+¢ßUîüðvZz vöb@z~ Ðã>_ü@vÜåU.~zðüö /bãrUãa:aýz*ßAh©üZ©vß©výCbÃäÃý.zýÐBuÖh>ý*ßÐb~auUßCö...vzb£rOÐ,_röbo£ãüÜ,Ü,:U+Öãh: Ovã~¢/*rüCU£Öüv@C_ã|.ã _£AüAð ßbÐ,rv++.Äz¢a©oC¢<ýä¢zZåî ðZöª< v£zrî*ÖýhÖChvÜã©,@,Öã>ä b/ßUý+**üuvÄýÄäOo¢C>Uî.uýZOöß/bäî£b zîZ.< .zCÜb*ßzªu++bOaªUÃO._@o.ß £_åv*ÄAðãã>@|åzÄ£~UbÜåhÄöÄÄZ/ å© oÃå>A:*zbà îZÖÜuOªÖ:ýo~ý,v_Cßb>üãr.O/r¢hîÖÐrßß©öðbvÐCr*aBîBÖðu<ýO*bB*~ßüü¢|u.,oªª~rÜßÜä¢ã.B@Cåu©vÐa:Ð~ª*UZÖ<£C~ÄÖ>o AÄr.>.Uð>ZãB,åüÃ,Ãäaýã@>a+ýÐã,ܪÄî£|_~üz ©äü:©bÜoå b£h OOÃ.h/@BC>u,>u,hßÐ_à ý|b*Zr|öbÄü||:+äOßåß~Ö:uZ~|ÖÖ@zC:ar¢¢bäUöhbßvßöÖaZªî£äÐUBãbÄ£ßO_.äC_vÖuhü£ä/éö:¢ßÐ<î,:~vö_ßüh~hö>,.Ä,>vb<öaaz_.åªbäbÄ¢a.@vzu.oßbÐßÖz£Uzî_|BC/ÖC*< hbüª>uO<ðÃãAvãZðo@+£ªªAUÜZÖ/o_br>ªOãhåZ@hOz¢b@zvß>ª~üßÄ@AÐßu<Ð +ª¢_©£:ßvUã>/Z,OUý<ª£ö>u©î£ß.bbb,ãðA/ý£ª+Ä**hzvU£||UýCÃ/B.äÖa£,rOßCª**Öv åUö~oB*£,oä>ßbvh>öaCåªÐ oO r£åZßzîCåÐãöz@Cª<_Ä*Ðã:ä.Ðo:Z>¢/ýÖhý>åAOðö,,£ýĪÖýUß/ߪ+OAäbh/ã+C,ö|+hBª>@.ß:br.A|ÄZvãaooÜß@ZßÖu/_üö|Öß@bãå/ýåaÐ~,ß/>u+:Ch @ÐOÐbîã>hßüUa*aö*~Ü,bUAÖoý.åÄA©äO.îÜðÖã@o,äî¢oßb>vAå ÖZZÄ.~b<öÜCoBb~:uA~ÖUu©+Chýr*,:aß_.Cªb>OÜArªÖÖ@Br¢vU:hb_¢ð~v~äh| C*|£<ão@,üuAbª+¢åýÐCu_©:å>Ã|zr£Ãå,/C|©BÖýhÃZÜbz+Üüý©/Zða>>@ª+ð,v~ðA>uOBÄäÄУ..ZB|hß uývª<.ªbo>,bÖ.ÄäAßoªåvßÄ_Z~bu.AUCbA~£/Aß|A_* ©îaÄ.bÜýr:üO_bOß@äÖAhaäªb|_îð:C£ð:~h*_b:_Ao/<_¢ßÐA,ðßãývv©C*ßUa~<¢/AýßîÖbb>Cã.C_öÐoîbrãB:zåÃ.УZa~öäBªßðC¢äÖ å/ã_~.bBC@Zß*|©ðu**,rBU@C|a_B:ß:ª/öoaüobrOßÜ:©¢rCß@u hb+zO@UÃCßU:öÐha_*rð î©öÐb/öß/vð~C<+~ãß:î+B,| @ö:¢ãܪZBvýOvÄ+ª<,äv/ÃÄÄÖîö~Zb.CAO_~ãväÖĪÐýÜv.ß+.>/.CüåÜÖåöãAýbãåhBOßÖr@B_ãöÐö>äOuå@ý©ßªOäUZªA+o>£uvb+ BÄÖva:råÐ.bUßÜU£ubZ>aoaÄ|ð<îý£Z*|©ohÄB_h:>|ßB£/a|U|ÐöîßüývrOã.>bCÄ©C¢Bðh@oA>ªrªî<<*ÖB_,©åOo/å+Zba<Ã+ý ,: .rÜäZ+Ü©ZÃ+bÐý| aU/ð>UoåýCbübö@ßObîåßUU.+@ZOz uÄu£¢_Щ<üar¢.OüBh+ª>ZÄîß|h*uo¢ßüOå*Ö.zýB@|ð媢ãU,/hßÄßöýzäb,+/ OU:@ãr©ß+>ýÄÜArözCßÐ>av*ö*:|U~ÐbUªÃ+o ,rÖz/rãurZ©CBv¢~ßOüB|>ÖC|ßÜî,bÖî/£Ð¢.ðÖAöã*C_ý¢£ªî~ß*~r/zz:ß,ß/ÄußO /ö£~ýBubÜ+ð:Ahî<<ð_ä/zzC<ö£C,£îÐßZr£vaãv*h£ö,ýÜUðöuZv åh£@Cb:C©hZ£+ÄvߢåbðuÐäÃO åu<~zhhB@Ä©.>£ß|ÐðvîÖzUܪ@oÃ.:UOå>|Ü++ <Öö.@b/r@@ <|z,Äö~*Züü/Ãb:<@aBbO*~ÜoßîÐÄoz£ObüÃä>ܪraB*@zv*b~îr.ãOvuvä_|©CUCUÃðãÄzUä|*+ýÄOA©UZöäüð¢üäÖv,+:O@ä@B~Ãvbzß*ð>ßZ@bãä +O,o böüöAä>CoäCOB/ýýu¢bªýhO~ur_@hß <+Ü@ÐZCvðäß öo*ý,å*o_z_ ðÜ,Ðãzýü*@£ß ðvÃC*oÖOßU/åuo¢Ü£ßOã/~öî+/ªåãü.>_£:¢©bOoÜoh_öã¢h*rÄÐ<öå*zÜÐð_ä ßßð |ÄaC~ªabZ/,ö_ß:_£vÃA~ÜBzå vªðß ÐA>b/*bCC:îªðîßOCb Ã|hîÖߪÃUv*.hr@ÄZß@öA+ooüß>/ý*AßÄ¢,+©Ä_OuÜ:oBåãã¢.hÐßC~ACAo.+B*ýbý|åßhb~v ÄUðabBü£ß|rZýªA+U¢_hßC/:BBzöA>+|<<, CCýb/ÄZÜßÜaüä/å.AC@ªß:îöÜa¢zr£ß>rÃUh£:ÃBߣ© B*B~ªö@*üÜ@©uAz/Bü~oü>ÖOrÖÜ~..ÜOß|ä.ðAÃUC:_.O~îªovýäb>+~~ð,äOöð_a*ä©Oå>bv A>ü*ýªäo/o.ðCZOZãa¢ãbO@ý.ãÄu/vÖð~Ð<å¢UðÜaa@ÜCBu~>îb>//väýüðoî¢Äo,< +ßz£~bäãb£ÖåzªhÐ_rv>o<ªî£zÖå+z*+¢ÖãÜrU:.~ªrruB¢|ÜîoöhýOîr,aZ ü:Öz+U|Ö*@zÖãð_v,©|ÃOC:h,U£~ö|ßuOBªh:îäãbß.,ärzb¢£ßÐ/~häýªðhªýßßÐb|Ö ,ß>ßТ+ÃbZOðªözÖbÜ~öÖoãýÄuba¢£Ü£|Ðuß ðÄüÜoî ÐraA>b£zýß|Uü>B>|*b/@_+äÐ<.ob¢o~v@U@ub>~a<£Öoýäßßu./B<ßOßhzA¢>u*£ýý:v|v>ã<.bå¢ÄЪ~ äuÄ<ÜÄbÃBÐ<ü>UZBoý,|UöbÜZO.|.AO+hö@rÖräOÜ*@ðß~__ÐrAbîzCäÐöÖ@©Obð äoh£ß£++ÜhUChüÄ¢äßraB<ßߣ<ß/*>~Z~ªð/,îö|£ÃCOåЪübåß*äîu, ýzãöAv_ö@@AvUüå£*,*£öðåã+<ÃU/©+_Cbî£ÄÄ©ã£ðu'), (N'ߣßão>hobuö£Ð>ýAÄßî|ãåÜuC_>/ÄãuÄCCv*.+ð/©<ÖUZîB_Ã*+ªBaÄÃ@ZЪýÄ/Uau_¢u£ª*î:î*C@öu:üÖ+:ªªB,~ãh¢z:öA@ub*oAöbÜ.¢/u£ß<Ä~aözªzîäü£Ä¢/åýýaýäÜhh/aüÖß/ðU©Uv CªObýÃ/¢r+U: _¢:u£öÃ|:~ö ä<<öÄý<*CÖ+ßöao*>öbÜ@.vß_oß/r©<ÃýOÖ+B*|råü+ß<£a.r>@ßÖ*>U©oZrüb|ÃU.B*ߪÖĪÃv.hªî@/vh~äßðßoÜb|Ü|äîÃ*£Özîî_åuAýUZßUªÖÖÃðýß/>:|ã©/*_Ä+/ßv:*Ð<<~Ð|~+.ßÃZßåÖöüBuÐ<ÃãÐ|ðroß,Ð'), (N'abzUÐUðîBoAüo_©ü/:ÃAÄåb¢Öaß+/|ab*Ðßß/ÃuãZã+@ßÖ.,_O+öAzãhaÃ>Ð/|<@oö¢.Öã@ÐuäÖå>@ßýª/ãUrbbAå£ßÖr>.Ð*ä+åhý£Ã©¢Äo|ü£<ä>haÐUzbå~_BAÖ_Ä/a_¢oðäªÜh|~*å:ða åÃ+.aB|Zý_:_©îBýÐ_.a ð£@u~ÃÐÐýhªbÃåä*Aa/båö oU<©>*oî>aaöbãr..ß_ý,ã:üAu£Ä_ýð/ý +üBaU,ãuBbÃðß>ã~av öðzÜ@£vÃ:+@b|üÐ/ Ðr/@©ÃåU,u/ üãhßÖhz©zÐ@Ðzý.UãO~å_ªCÐÖßC.~äö|ýåa_äÖ_<ö|z|,r+ªýz:Uðäö@©AäÃaåb/ßüÐ.ýä+b£BöüZ|*_/@/Z.â'), (N'<åßîã:b>åÖ/:ö¢Cð+~ãîüuBÃzv>:ÜaB ª<>ý|Oߣå<.ßðB<åz+bCßUýUÜh~|öªÄä£Bä:CC*OßOA<ßZÜuߪo.üý_*>Uu/ªuÃvÖ|oßuaÜOaäzªr>/>**Ü*:zå©|>üåîð~|>ÖÄUCüaÜãü.B©ðoýßÐbU:*ß:©>UÄbåvbZÖC:Ür+, a><åÜý¢*übOã Bhöv|¢ÄZÐüà ßðßÃrª*Ãî:ä |î>ª*bßBuö£ü>@£ÐÃAv_ß|öbߣÖ<ßo.£Z¢Ã©CBö©hªBåvãrÃü¢aåOz_aö/ÜÄz vb@ýÃåãü¢~Bª,O:bßý:b@ro_<üB©Ð©zu+ß A+vo ãýý.Ü|ð*|å£ßUußbðü@ÄÜoUöZäU|ã/Ã@ãhu_rÐÜîbÐCäA@ýhavC,Ö/_ÃÐbhî +>hOCüCýväOrª©AA,ðÖåC_~zzÖ,~_ßoªå~©Uý©î|ähÖ,ðroÜ>£*h+außðßä*|@:<Ä~ aýßAÄaraüßr,Bªªbå:Auä+äzOß|ý*ÃZ©*åoßĪ¢hOaUaÐ/ÜÖö/|aÃ+<¢C<äî/r©Z@@bu/ß+vßîAãCä~ÖAßbîCvýü.@©uÖÐÃü*ü>u+| Cbzrß ¢>våCä£oÖOU@bßîoh@brb>o*++<<ðãßbr£ßa. £äbß~ßUÃzÖ.üðÜh~UC*î@Ð+oUð+r .aåÖßårovî+CÃbÐböîAðª,©©>ßî>å|£.b*åÐ@uhîð.ýrüßã©£BZA*vÐA*uvüüÄZÄvöb Oý_ÐÜCar.:ÃÃýUãÜv¢bÜ¢ä,ZüoðrCvöaÐ>>£__Uuv_ªî@|ýÐå>:¢åZÄzªUÜ¢rßbh>©ö<ÐrUÄ,ä>BU<Ü,or ¢ß h/ßOAZÜ¢A<<<,äª>ýÃvÐuAߢbC<,:ýCÜoÄvî+u:ðýÖ*uü+öU<£ãîÜö>U.:uåCå©Aå|:¢£ää ,ÃÐð+U_/å£~B©raura>îa~ßBB *.îzªªß>@bu~åoðÜýUÜ©u.B/rîC>¢Ü/ßý>,Ð |ãuAäãðvöÐBb£zbv~b/ª©__ä:C¢.:BÄ~.|ð,|¢*~ooUOa/ý:*@./üh©Az+~Ðu@ßäa@£b+ÃÄüÄä:>Z*ãahoböÃZªvîîBrAª*£*,o>ßîb©ß/ÄCÃoÖö@|ªb/äOÐî+O<~>ðC>ßoîr uUb,CU|>~Ðho©r.ª/Ä~Bz@ªªåaäÐr**übÐöo,Ü:*.ß:Brª©ÃÜÐÜ@b>,v*oö:|ã>Ööur>bÄbý* /å<ð.@_hUU¢z£:>/+Cö¢ABýv ,AÄßö©åßé~zAaß,:ÜüO.,,hÄ._bÜ@+v,bbãrBu:ß©CCÖ£ð©oÃ*rabbä>rub~ÜãÐ| ãO.h*:ö*>_Ü>ÐzÖ£a,å.a£vhCЪ+orÃ/<åîzvA*îv©__Bý<îzöÖ:äh rðZaªã|rzã Aã,/+ýbýo CÐACUÃbr/U~ |Ä,ýaÐbÄä~Ü.åýýbrUå+h>ýåªÖÄZÃb+üzð/äîbZoªrr¢£ãà |£rÖC+ðr< býU+ßßrßBü_hOoöÐÖöz+UÜb,Äbä¢äðýU+|üzðU+,/äÐÐÜ/:bß,¢üîCBzðä£Üö|öoüzÖªO£ß@|ðð+b ªZ~ßãC@ZÖöü:b:<|hªÄüÃîrª+bÜ,Üßr/ h/Äß>oÐ äßo:@CUÜbBÜ:oa|£ ~/*C@öÐ_CðAÜУ/ü¢ãbboãö@¢ÐÄ/üOhåb>îÐ,r*å/î,ruýz: <@O<ªoÖ>ß>ÜuZ|ößoÄUÐÄ~/~|UC<.äaZ.v@A,©>Ī£Ü>ÄýöîÐã@£ãÜö*O.+ÃO<+ü,~bßzo vÜ/ü£u©/höýUÖÄ/Aãab*ýbbßÃßßbü>©*ÄB.uu:~|îB+.zAbýЩ@_ãîu.ZÜ+ý+Ü*b/ å.Ðåßð|Ã+©|bääC/îBü>ßåýö/bªOCÐzüüÄr|ýßĪZuäÐÐÄ>hU*:ý:ß@ý.ß/Ö +~¢+~Bo£|/B,+r~avrÐ|<ðÖZz@hrrhr*övî¢u*hª*<Ãî*ªB¢ðýo~ÄOã:ß*bböü:.uÖ/BZöÜîbCuauäðÄ/@vrý¢£Ü.:ßåZb£,aZ©ªoý ürU@~üãuü.*£.ÃU.ªC©©ãhî¢ý:ãýöO |/rZaÖCbß~Uä:ö/UÃÖåb<>z>ãzª@CCäZÜBßru,U£>bäB~Z/Ã|uhUbCãbCÄ:Ãh~ðÃÄüb+huaZ>u|.¢uî|äðüåýªu©UÐB@ö|>ðhO+¢ub_ uãÐã_//îßîßuªAÃCÐ,C.h>*öÄ£Z:ãv ß+£©hå+hßZrÄbÖZzBÜCîoýb@|aãü+|u+vzhöÜzr. Oü|,>ãv:ö¢CUu£zhO<Ð:*Ðîb@|¢ýUðr~Ã|ýa>hbo~>.ðCCA©ßߪß<üý/b@äöuvra/@_£©z¢b.|äã ýö,_üO/ +CÐ~_öývCözz,>~|+ý@O_,ðChBb|<,UBÜÃb.ßbC+£Üzª__ö>*ßoü©UÜür¢:/ä.ßÄÃu@Ä/oÖzäh@ÜBz|ªo~u£Uv.@îBurªÃ>Uüªî aubObäB@Ðaååbävvro<.ßaß ö|ÄO¢Zß<,U~ö@A|,Oîßår*hÖ.uAßC<@a.ÐU@hðå/u,<ßv ÖO~BUîuðhª.öÜ,Uü*ðÐ~@ßÜbUUa+©ßäzÄåýåÖÐv~ßå*©ä~:å£/,îAC:,äãüuö ©ü+îA,uð@ÜuC,*+v*£/Cbaoî<ª/~aîÖA£ ßãU©ß:ßýb¢hu,,î~vvî|©B@u~ö©Ã~.oäüz._ßüÄbb >Övrã,züz_¢_.ðvba_ßC,¢ ªÖü+Cv,ªC¢u.å>vÄöovöðäZýüÐ/öOaüßABz>C£/_Äß>ãbßr_Z£ªaöýÜ+>.ßÖªÐrb¢ãrÄÐÄ/Ð*h/ð~ÐîÜ_ ©A>ð<~,.öo¢*bAZððuÄvý£î/ohßb£Z.>vÐzãåru>Ah.ÄüB/.£©ß©bZ*ACbÖ*ß Ö©ÖCB Ð/bÐýuuãuO:bÃ+.ý<Ð:ü,ZÐß/åÄÃ,ÐüãýBÃrªbÃßb>ßöªÃ£.ðÖOa©Cö/ÄUZB@_:+Ü~z@bzÐýªbÐÐ+Üübrbüðb|äußßðv:u//Ãa¢< ,ãobrhr|AZÜýC©BZ~ uÐBÄu,<@+ªZA*o<Ðßrßäã.££Ü@hv*|*oCÃ,ÐU©ªÜ~ÃÖ~Zýð¢>+äå<Ä>ßb/öÄUrOßvhî©ÖÖ>h~Avo£b+ܪ@ÖüÄ:©.r~©ßÄî_+>öjklväÖåÄz:/ oabOCÐ:rCß:>å£ÄÖr© £ýbýouüä.©Ä_ßßðzß>Īߩ©rz¢ü_Ã:Uä>Übb_ý åÃ@v.Oö.äAAÐ/rÃߪߣZüU©>ü'), (''), (N'î br,@ /äab_O+ýv¢:_¢UbzuOöÜ@a¢Aã~Ãå£Üªýöooð£u.bz@ÄB~Ã: ãAßA/Ðß.Uüuü>< ßA_AãrubbÖýOî_ö A*ðOüüz.¢B:ãåöZßv |v@zÜ< ¢bo:_äÄh,ÐÖ,oBî*Uvßb,rZöbA¢ßv_CÜvh>ßߢª£ÃÖ¢>bå|b,ã,_ü¢oh¢ör|:ZZÜ>ö@©ýB@ª©o+¢~ÜäO:|,.h~ߣü*Oå/br.<äýh+îbzzÜäßU@|ãbaBåîä¢ðhäâð£O¢üühÐÜÐß|>bB+Äý./ß ß/öz>¢ubý>r/,£ªUãv,ßb*O_,ßÖUrh:vß~äЩ£:@>ÄÐ *bÃ:ÜhåÄÐÖ>+,z:arß>Ð_ßåU£|ßaýAr+|bAlkjhÄýª£©+Z@ª@zýã.Cå.ÄZîðzåÄÄ|Cß v ÖBÜÜÐðorä+br>ÃA*ü:O¢,ürB.BîðCvßßhb,oåb zz:ÄBrb£ýÐývãh/r<ßörßÖBv ßuBý>+Aßöªüª_BUavOuOuö£Ääî öã>|rO,vüö£<+ö<î_:ªöÄÃr|~åbBå~,hªAbö/bÖ.hãZb¢ÃäUÖbBUvü¢U£öü Cz,+|@å ä_:>Ãrßä.hðîaã ßBß@+u~ª|bOÖã@Ab Zü|î.©vðAUý.vîü.@¢ãB>:CUä~ß:£ýÜ:ABaãåýB/_ª üªrZor*zåOüãßä AßäßZb<@,oîC@@_,|åhh¢©z¢vZ©åvbvOý|üv|Özv>bßCUBãß ß,ö©ÐÃ+>U_ý+ªv îÐhö|vßß~ä£|ãr+o:å_:© >vå~Ö rzîîß>u@öåubü~*ßBC@zå+_>bߣ|uåbü@>ªvüÖÖ*üãu~£<>býÃoÖb//ãÜ.ãaã©zbßv|<üBã*+O*Aoüã~z~~@ÄzîbbÜ<|îÐ>z_hÖ,ðACåäß,åB.©ß|vÄvbÜ+@*<.Oªv/¢ÃAª @Übövß~/ßÄvü.u©_.b£Üª>brÜ,.~*äüaîB|CãÄýobü©BAbb:UACruböBh£îÄb.@b.ü<@Ü©oö>>УßüOÄ ö* ÐÜßßo:ýOßvB¢:~©bª_©~äoÃÐ Zvoärßâåü_vUaåüo*îåA:zuBAä+B~ã ÐÖ|Bo>CäZ>*/|ðýZuh£ðã~_¢ÖvÜOö _zhu_>:Üß©Ub~_Cå©ob~hööð.îözo£|b|*Ö|ÖêüUÄhu.ü,öAUbbðªã<ªår,:ÖÖ*/£OüåbÜÜüObvUöv.Zo|ÖhUBßOåAÜaöäbOC@ãZBhUð rÐ.bAa©ßu<<,£aåüurv@>:ª¢b_/.Bo__Ð/Ī>CrÄ,~ß<>üzäöý.ãÐhßý>|vÄÖZüuC11/19/2008 1:26:51 PMThe quick brown fox jumps over the lazy dog0123456789,.;:?[]{}()-+*\%^=~!@#_|/0111/19/2008 1:26:51 PMThe quick brown fox jumps over the lazy dog0123456789,.;:?[]{}()-+*\%^=~!@#_|/00'))"; - break; - - case 3: - $query = "INSERT INTO [$tableName] ([c1_int], [c2_tinyint], [c3_smallint], [c4_bigint], [c5_bit], [c6_float], [c7_real], [c8_decimal], [c9_numeric], [c10_money], [c11_smallmoney], [c12_char], [c13_varchar], [c14_varchar_max], [c15_nchar], [c16_nvarchar], [c17_nvarchar_max], [c18_text], [c19_ntext], [c20_binary], [c21_varbinary], [c22_varbinary_max], [c23_image], [c24_uniqueidentifier], [c25_datetime], [c26_smalldatetime], [c28_xml]) VALUES ((-1761264475), (255), (20544), (1826608718), (0), (null), (0), (0.7414), (0.5117), (0.3842), (null), ('ý~ý/ý.ÜZßü///bOrðbðÜ*AvhÐ*öªb:/OAaß©B£ÜbuÄ.ª|¢zÖ*Ö: :ÄrüzäâBvZã_£ª©|CbrvzýBÐzßä+UühªbÃåärÖ.äÄÃåÄrÄÃZCv.Cå äýz/,Üüb£ä/Bß,Äo£|>hÃbr+r¢zÐÄýÄbO*aååzaBУuãÜ¢îî,CÜ_+O£ßßöuÜ:u*£o*î/+ãv '), (null), ('ß*ª~Ð. ~uoÄaÄrböbu¢@z|Ã.Ä:__ã/ýöÜ~ý/ £bbåÖ/ý£îÄOÖ v ÜåÖv©OåvåÜÖßOÖuCr£ª/o~¢_hÃÜßÖ+ß@O£oîãÐÜhÜßOBa¢ßå©~üCÄßorvrCü.b@>ýuª@~ v<ä:©+.@@>ååho,©ß*>ü¢£ªßÐÄZ©CÜaZz*z+zUbß,ýî:>ªäðÄ@:îÃzÜÖö|uÃßß+@*bÄ|îbrZ:h:AÜýÄvC,î,üCbO~Ö.ÐA+A|ª+C/åza©zo/|äÐüüäö|.ðý|ua_üo£ ãÜ:äBߢ£ªßî.* ä'), (N'î*/ýz_B~|ÖA©ðÜ@@uC+OªoZ>uߪüäA<>uuå*b*_U*Z@A~ü©A+åhr>ãuÐböÖ<ðCÄ_Z_:ÃåO<ä~Cãz£vîUh~ªüîvý,ýhzB~bzu~ýÖb@ýor.v¢+aîBÜb> *@Ö£a_bÃÐå+v@ߪЩ>äÐo/._¢£ª,bb@bBÄüÄß*Ð>:Z.zbýB|,O/ZOÖOðCra+ðâÃ* OßãåîzÜ+ZåaB>£_býîªUä _bª¢ +|Ö©ÐüÄßZÄ>vC@ßßA~+£Zhü,vß,BßOýz|äöª+|äÃðZhÄAu B,./C©ßÃaå@ߣ/äob|*_.üå.<ÐÃÐaýv*A:ZÄ.Öä£ÜoöÐãÜrUbhboéîh>ýü+ýbÃaªoÖrhoÐzÃÄÜvao|Ã_/©åðC©*_or/ß<£Ã<öCÃAýCî,Ö:üî£C*.vã_.ßb><,£ýüZ@rbbßbAå©_ Öö*å¢*öÖ.Ä~OããUÄýbÐåîã_BAãöýðåü£v_ro©/ va~|Ä_ª,î©vÐrCaãª+AB:¢ö/o+,.ªãÐvz<:.åªhoÄb/:ðA¢ãößåÜ£ å£bo. hOÜbða/Уªöauå+,O<>CÖ_:ßöö¢ýªß*ÐOßa_v+_îªîr*äå|Öö<<~£Z~ªÄüCý,:CãUuã.åãhßö~@ä*Cöb,äAh ÜbîU.ßZv|@oÜ+B£bhåC*âbÜÐUªAA~_.ý@Cü.b>oUý.£vªÐý |>rä*hߣzß|v.Bªzh,ßðv|ãZ<åaÄäîª@v¢.U|üv*zzBvðåãîß Crðbba£ð,bÜ*OavAU:bäö©<,ÖuA©Ö|CbUÜbÜA©:å,ruuÄðzäÐ/©/~z~z,ä, hZ¢ª,ä¢h@ö_COZvCb~Aå_ê©BUîðrÖ,OvCÐB|ªßãZo ßå|UZbÃßör_ª>:oa<ü*öUUZåh,:ß.¢< ZÜbr/uªÖuo|+ÜuZ/ßßO_*äÃöv~ýbBöª¢Ðo Ð+ü|v+ªÄBÃðBîCaý¢:öý.bhðäu@£v_ö¢¢å|bäuðoÐoªv*>büböýoßOð£UAÄAãö:_ÐzåzÜÃb_Aab/hß~£að©r+:*îz+CüöÐð©üЩ:býZÐý+b .AvoZbrå,:ooß<üBÜð~>£~AOübåß:b@zßu©B b_@,öö,*C|bÐßBA,ß/ßB**äÖü,îaßäaüÐÃÜ/|<*ðZ.zzBîb ÄÐO:_< ðîÐ>|@ß*î.Ð/vZ©hoZî|B@Ö~b.~zb©_/U*ã@ßüÜ,:b,å*:ßAAªAO¢îU,oo:hö@ZuåZOî:o O>>CACåu~~_Z:¢+ß C:+£@¢:öÜOabZð~åZä©hßuvvöä|.uã~><ãßýÜ©£åAoUöåOz©ö,oÜÄ©_åOBÄ©bAÄö~>|/C~BªußB£üz,Ö_å<ã©ßÜßzîß©üüßa/Z++ªå_*Z||ð~åîäÄöCr|åvÜÐÖCuÜ/£UýBrÃöAo© C_CUäU.ýöüaãª/_a~£äÖ |äîzð<ÃuîÃß:ä/*o@ä@ÃUß<¢,,££©+,Zîa|©rððÖÐÖbvu,ÐýräbÜ bbÐ,Zð_ßA|_Z>|äå©ö~öÖü<Ür.a£©:ßzªüãðßZða+ðÄO>ýÄßäC_î<ã|B~öOäîåo~ÖUÃ_Äöb+A~|ãvzZuÃOß|ðîßÜ,Ö äCbB>ÜC.vjklðboåîvÐãZ©üoÐBª©ä.îoüªrvüÖað>£ðArhî+,o:_ã,Ahzäîð.rÃÃ.£b££uBîä>,>b|ýCbC©å© o@>ö_£äB>züu¢_BvÐob|Ã*a@bÖäÜäz_ßab<@hÃÃ:AÖýB_ßð:Aß+>ßC¢ß>üåßÜBurÖOr|b|Cb<ª@ð+ðýUß.Öbðbüî/©AOßå©ö_Ü *¢+,:© auªÄ/~ý¢ý+*hvÄrzC,_ðuªð|,ª~¢¢/AZ,~AÖzÐU/rOåzª,>¢ozUýðÐC.ZAzßý*ý| bÐé:a,hBÐAÄ¢öýBü< OA+£<¢:v..:ãr ü_©ßüÃZãäßabÄ£b ÄAå©+zÃBrbýÖýÄ£îã+£, ZaßA*O_£.ðßObÃ.ü@ü©ä|ªðÃ_ähoBu ý©a/AB£Ahh/ßhO|îauö ,ý_Ö©bB<ýöCðoîðahvÖöýo_BÖîª_+bãÖãb:/:ߢãzª>@î:+v£ß,ß>:åÄ..üuuUhöC+BB:<_z¢ð£+£arZ@*î|£AU+OÐAAã,¢b<|._*Zßovbo~ß>b,u©Äå*~ZbhÄîÐ:>:UZ~îBª£ðU_ÐZ~ä£|é£ßo©ÖÄåZ*.£+bÄÖ¢ðzu~üÜ|Ö<*ªZÄroAîb *Ü+|o@ :¢å~ÜÖUCßh ð:ä+CÖ.uCzßÃ.B:¢~~ü@|*ðü~@@ããîßÃAÄý¢<ý£¢oð.a©ð<< h£_ߪÜ~@îߪu~,u>B©ÃCßhªö*+¢ððZ©AA@ÃUZä/ö,B|rb,|_r>~Uß*>ýbªbýß_ßböaU¢*.Ö U@C*/rbUz|üåÜÐßZb+oÄ/ä/Ð_öB¢@ÜZzÜBß.b_vC:ß©u|ðvrrü|üUAå,B+ß>A>ßzau_aUZÜCª|Üo:äöðu:>>aßaîãav.bÜßvU|O|ÐO£î/©ª/,h>Ö:~Z~azzOr¢OuA*bßÜ@ðî©+rAß~b u|@Ã@@ü<>rvðUý*Ba.åbªÜ©äu~bb+Uß.vüü£C<Ä@,| |vý£©aCa+ÄüÐ:î£<ð/åCU.ã©ZAÄü_Ä+ÃA:CªUð.bvU.ÄZU@Ð<ýÜB>:bh/z+£zh:©*vÃaßAuýaßãaah+b@ü<_ðZr|+üOð|ÖÖCßÐ+a_@ö/ÖÜb©¢bhzö C £îÖbbC¢ßäz/UbÄrvÖ*>aabÜhr@özßåýu£.<åýZö.åh|:*ߪîäå_~ßC ªCªä|Ozaýzrª£U Z<.bCå< ß,ðb:ö*..@BäÖ+/+U~C~ohrü£@~boÖa/Cßß:£Cäb£îßB_+~îAAã_Öîo©rü,ð*ZU©@©Öö~üÐCÄböv C.ZöÃAhî<©u¢hvÃÐöÄ+£h~墢 bZÄßÃüî*B_Cü©UCÖbý@z/Äb,Ö*|ªO_@£ +üãr£üvÐßOh¢übC_,@åBzå*uzb ,zo_a:£ZZv_,av~£_ðÜÜz:bÜa£_A>¢ªî~¢ä/¢¢Co ÖãvähåãÄußz_ZAöu+_+ðªß£©¢ß+,oAîߢ/|ªßðåÜÄzvßZ*ZªðrUbÐuÐörªuz>/_Oî>ðã:*.:©ªuZ@ã+Z_Ü<üÜßb,Ī.uÃ~vvÜbîß/:h~Üß.ha/.*uöÖÄü~,B/@CäðrÖB ö@/ð~ãB¢îOý.ð+jklýÐß|ZOÃß*î Z£|A ßbîý/£C©Bb,.©>oã©åuAZÜ© ÖBuðÖ U¢übhz+r¢ ¢h:ußvhãÖ<¢Ü*aba,|u /rðÜßÜ/ª+ã::vå,h :_<ü+oZÃ:ªîÃöaÐ+bA¢b*>:|Uð'), ('ýüð¢b@£.îUv_üß+h/üßUðã,~¢A@,üuý*Ã_<£übå>BöoÜ+_+ÃB/ßöäuAh|*aAaU/©vîã/ Äo+Bzoýârb©ßz_.A<:>*B¢bã<ã><>:Ãö*+v:ã|bb/ðhö+OöîvU.,ðý¢_ vßza:b:brÜ@.åýäÐbÃBo|ߪO¢åÃ+B|ß|åýîr@Z|Zz£ðßu*Ãuð£<ü£äb<: ,|,bü£üü_åB©rßCßäîîßüvr:/:Bãðað/ÐrîaîuÃvãUßßhv/©ããýo~©+C+ð£>|Cb@ö£ðaåCî¢r¢üÄ<, oa.abAÖäbãߢü~rÄÄrZä<*/ßÐö*üöÄ££ýª<>oCü>OßãoB>ðbaðU@O@ãß|ªvh©ßî+Oo£+BÃ|ªUß©©>vÄUAzöA:h::ÖÃð_ããß,å<üöä_üz*£v,äozzîAB+ãåîbÃO¢.ÜAÖ,üZßAZÜ,< £©ßäbª~+¢¢ßÐ:_a~ðU©ð|_ åä.|+vah£¢ArubOª|AAo,ü©@'), (N'/+@Ä|ÜB öý©ArCª>hC. ß>ТCå_+öîråߪߢªöbvBåCrö_ãð_îß|C.ýö£åª©UÐ,bßÜrªZüåObouî,_Ã|AªãAb¢Ü.¢åýÐ*,a+<£Ä:ÖÃ|hð+ ðü_Bå_<ªäî¢Ã/à zU+/Zðb:ä+*ãzª ßv>/z©üãvv>,o~äövÖ.+ ÜÖv*ÖAð£zzäý£© :ªZÖ_b~ßüü>bz,ª:Cv+>£ßÐCrb,:bo:>¢ÜUöA©B.ðüz,vüªUÄäÖÐvo©©åo_:ÃhÄß@ý/_h©//oü~Ã> äuåZ_bBA.z|z~ýO|zzý_+<,ßÖü:|ª~ @Uß.ý:|Ã.bÄßCoðåC.>_ߣO.ÜCb@|ª_/ãýAbÜ|OCÖ¢|>©©v¢ßB oBA>äb,¢å+ACß>vöhCåB_U,ßOB©ÖCã:Ã:v+*ßÐý,Äh@öaÜðÃU Ö.¢@bð*£_hîh£öðĪö£B©*Ã*,ÃðÖ:<:©~o.|Ö.uß+ãrä<~>~AzOüAo£,ÐZh+ý~rb©U|>@*örÄãÄãoßåßr*Äoz>¢.>aã@<ðäýöOa¢£ßrzbß*U.ýÃÜðbüÃuî~.aªåý_oäb,u<¢uvÜ@üzßU,ðrozÄ~.öoÜbªªªAðrÖåðZär>b|©z/Ðîb*aB,ÄÃß|:Bu:/Aª£ÐªÖ|ðzCba£UoðC>/äüvª@¢r@ðzUCbv©h~ßo~Uöå::ÄÄ@OüªC>u<Ößð b£_z¢ävO+öÄ*ªBýüvabuÖßZbÄåC¢ãßî*£>CöÄ¢UªO_*|<¢ýA@vrÐÄÄ~u*>~ÐУ |b*ÃCýAv¢Öå_rÜ@Cðåbã¢_ÖýåÄÖrB:bªv~>aÃr:Oab¢~aO.U_CöZ_£Uý:ߢ.oÃöaöýÄ£O*b/: ã~ðoýÄz>©ü@Öbª >|î~ba Bª¢a:ÖbOb>ßuߣbZßðC£Aý>rðCzÃÜoä.z@>z_üU_/<îaðãÜÃ/ZC£ö*zBC.B*:,,î£.îzoÖÐã©|u_Bbr<üu,rCäåbbBý+>ð<@©_vü+hÖa¢haaßhîä:ðöBÖ_¢üÜh¢v|UUBBüäýbßÄ,ð<Ür*:AB* o~ßC_~Ð:Az©<*bCBAC@îuB©Zý.vvªÜ.Ð:hÄÄOß.ßuãräðýåb¢*ýOo|Cüßå©OAäåOzoÃ_ß.ðUÃÄÃ,åß*a_O£Ußu~åaÐåZhUÜ+öA_Öz*Zu/Ð>/åÐba_££ãr¢,b~ß@b@¢B:öz/äv~ÃOî/ßbÐhav£äÖ<~öo £:O>ßUÃߣA>~zuÐöü<öÖß */ßv,£åªåahCuß.r*©ÖA.Ä£/ü/Cß@Bý,>zCÐÄ|ãAîAo@ ß ÜZ*å_uÜC@örZ.o©Zr+ü/<©vbbß+ZýÖ+Oa¢ªr*Ã_abOß@C,hðübzh++äBavãÄãrbãßo~bAöCC++ðî@ZAA/h*CoC_ª_åOBa¢ßävO@|ß~£ýAÜA:ääßßüu~uBýbß@zrÜZ<¢h©b£ Ö:rã>*B+bbÖ©b+hÜbªÜvCÄb>,äÄ|oîÜßuAÐÄÖîÃÖ/|@Äð ãbbv+ub.Ä:¢¢@uozö:~ ¢Ö åA+.üªöåoßuzãÃ_ãUýB vbC+<~hªbC~ÄBÖOUaßBßÖ~<ãzð ª.ª _/bßðaö+< ßbr@ub>zã/îv|êvb_U@r:ÜvO£Ã+ ýäÄ*/Ü.£ßÃvBCÖå/vä+r£ö,höC*vö*|+hüä~rðCîO¢väý.BÃåãîßzo©A<~,z.oÄ:håühîzu Ð:AAÃ_h@A©+C/ÜbüzßC¢_ß>AðßÄC:öÜ~ª~bäh£*ð/åvÖܪa+ßaßBrªßðüaCåßAbBåß>äÐuß©a¢ð¢vA+<|/Öa,ýCbö.åÃZ,ª/CÃhOУ|Ã:Ðö//ð,ÃvîOüå£Üu|<¢©h|u¢A>@|îOÐîåb|£bâaaO/+u£|:ðî¢UAå_å@ .ö.ãÜbOvBßBCOä䪩üCã.,ðb¢a|>åý@©hÄvêO,*rö_Ð+ßÄÖ,.u~ÖÃîAa*rÜ@Ã,Bz.ü:ªoa>|Ö¢<ãrÃßZßB<Üðð:ßuÃvü¢ã@_:/üãUou.ÐAab/rߣ,>Ä~îz+>@£+<Ð@ððBð+ÖÐüA£äbbîð,+Aåª|Chö£oböh<äz*b.h~îÜZvZZîߪ|ÜCuBä_z//>ävhßhuýUB¢ßr+öÄßzrÄbÐbAßÐãð+aÜAªý£Ä¢¢©î>ãü¢Ãb>.ðzýðüAhhB|ªhüÃZ >oAüðüÃz>Ühhao@,|b~.hrAüA@©öî@ðß_¢h@b@>ü¢Ã/OåýhðAr~ðCåOzhbð,ZÐ,üã ~+Aa*A|ªß:Öãbb+ÖîÃöaé:ã,ý~B©åZ<*|.ÖîAã_+>bÐ_züåA_ãÃaã¢îðOª+:<ððoZ<@¢¢ãåä,¢rªÄZbaÃbhb~:>ð@ßÄ.uªßåh*<ÖZa.ãähª|>< <ÜãBãZßzÐ*ÜßaÃBîOz|UöUåoCª.ÃZbî~v>ßÄ+@üª*AÖ.>r.hÜu.UöU+uîÃýUäBAÃ:O|>ä+_© üîð><£ðrvðb¢££Ahªß©_ÐÐUabü £ðZ,ÃÖðü /Ä/AbAªoübß_@*v_äh~U£ð/> vZý@+åÐÃÃÄå,¢:ÄhBAAoÜC|aäߢ ÐÃ>ZðÄßÖª¢~obäߢ+hu©åC_å. _oÄü©_v,öarª<ð©ö@::äBðZö£Ä~ö/¢h¢ä~o¢b£übîÃîß.Ü©Zýö~B/|U¢åÜ üözö ä~ÐåÜAåä>.ö.A:@äAZö>AbOz*@ÖZ aB~Ð|üãAß@öbĪAªãª.U:ð©*/Zß./_UZª_ÃãUÜý:z/hÄ>ð*Aäb.UZvo.ªUv©:OCÄUOhð|ªÃå*ýý+vÄA ö|©.îh+O*vUý@ ýh /< Ü.:v,_åzZÜoåuðÐå>ÄßBßü~z+Ã+AýäAãUÄ_@C.a*Ubå|C*Ü~ªC£¢ª+_ßãoåÃoãz/Ðz£@,rÜbÃ:äÄbarAðÜ/åu.uäoÐÃü_zO,Ü:ßßÄvr,*|öh@ßÐßöäÜ+./u bÜ*£@ß@+v:ö¢r.z©~A@£îîuÐrÖ,~vÄðäo*ÖUðüüÜh_Ð/*Ã,:åOÐbýåähðU.oßÃrrZªaBv >éö+*OÜ,@*öÄBýääv<¢z©|ßö:*_hЩzr_©A.A@>öoäåßåüBr/ÐЪ¢Aßhãaîa¢¢£ãbÖo/ü/ãÖý©oß©Ab*¢ª¢Zð©ªBÄCöbª©ã.ÐBOÐaª~o+öOboCBäCªu.ã_aÜour'), (0xFBB2B8D1429F4CF743301F5AEC311F7C7F1F62D59F958AF667506C36D2FDC59F34F4973B8E17045382F4769C1ED8B2126F4FF2A8F564B86528C26AF2321625466A7F25F89AE4EE681B0E52AA1FEDD88F9E59C7830A1DA9CF3B3112CBAC12216BCF30319EB2BA778A608A8CE7110E453AEADB53D94FA23B4DD556BC69D122BB09EDE6DAEFBC39DCE4E13C228090C2BD2CECD7E1D1BE471C2CF4E4C85BFD0EB83ECF83F92A33567EB0FE6FF71280BABC1398907CF941E94AA5CAADFAD77180E6D283E3B10CC992F8955930D34E5009AC3A28B5C36D91BEFDE5395360855BA73F7D89248E9C09AF490597E7A01016FC55C101C0AFBBBD7941C5E6CBD37532733AB1F155C52B7A1030786BBDD5AA1EECCF3DFD9E849BF884C00FE3C9B53DDBD3D323ACEE1FC1362A47F18F364FFFA396A6F9FC967894EE9FB96D94B647B05AF29C97EAB1FE2FCD0E06D257930BC134C06B4D22BC41455B3E350D35B12C80E297979D99B715F198772CEE90A53D5B93F738D34AFA8D9EB1573CAB7CF0FA1BE186F0C0FB6E287CAA79B5AB8F53B5B601D9793D795835E809F9EB427B6A74A77C100C09B57D6025CFBC29D145E10E5DA285A9A376BDA2885007B60282E50040040D2E7F46AB008479546DBC2F64A327EA8E9FF5C1D131BF6D84B9ADC65DA3E9BBE9CC37B38E16F684242A2250E559EC648E18F3450A7E33DC6F11C2F252BE1BB1830146), (0x745B77A9709CA60E6F872ACC493745AFA4B06A995B437D530432660E71CCE41255F81ABC7C9C9AE28CCD008997250986D601DF50DCFE1030DE23A43E35979DA2A31877511C88320716870C8E43F3BBDE28E0386FED933656E8EADD58F75BACF42F5DE67FAEB7694DCFD73A54F182ECEA67C615555F2EB410E2206932ABDA0FBBDB175EE50D3C307176EAA01558E16566FDF2F03145569401A9D69D8D4E36A2F4C87F79D92306DD2B96A4DF758E9FB700BA0335B8E9DE7684825D3C379EA2233F47AB4DD9688C42F615C59AA0771F72091E9CD24B01EA0BEA09F456C5C9A68CF4819F2DE251DD982EC03EA32343D50D63EA321802CFD73E5DA063D073357C2C6F38A61ED8F28FB84104A48AC246E7A633E7F3DB968D8A24A960CF42EE0C25F8431134EA9CB634715A7AD7FD2B4C7B17B8BC9D8B42A196E1AE827577224DCA34DFAB47B012FC0A7CB282801CB68CF95DE4B88A316F99B6A17B523C1A41BD4E0DB0A21E8005CB04BCB220D9C0217A2A228918926AC398C545F5A535C0C0EF3AF533736B146D795719B3CD7F4EBFF58001271A91292AE34A18DCD98B5F9544FCC2E5E48CAE0E16B40FC079B6F5197785FF253398A65E11CA5028533794EEF8836FD1BC68DB68D2F311658169B02D55FE65538B3A62AC5563D4193C85BADF2021C8F646235C0EAA9652408640DDA81922D354D14162BE21C37B5893C22C4D3832455F), (0xE632A257A9F4E7222515862CFF19B2660DDFBF09D583A7037AE76A050854FB7D065F3CA1B27A976DD6FE9D66D267C2129AD12566A097E5628A9EDCC18AE11AD11A0825A0DD10B492475133D6E540311324586A362F95DD6F79D916139ED5E3F4E4CC4CC9412234891D921E4E630F7D496DC89C3177E3A2852BB62603FAA0F4716E3FF119F467D20223E0189C768E0B695CCCA6D538B17D0029C79D8AFB308F7D9DACE0241E635505F69A0D96CB050E9DAABCA72DFA1F38BCC1F0EF2DCA4706F3519BFFC9ADE64BF977A0DF9EA3E63524B800DF3F8961827E7424622E73273BAE941A45300544EFC371AEB6593F9A18DABACB74C967C669EF18815589831D854F65300989A1041E73101BCDDBAB293ED90B8773A7B27146CDB1551884EF6640542866F40E918F39B6AD00B84BF98E43EF427C7EFBA9DD9CF3EA3BD74CEC9984AADB79B245342F487B4EBDFAB1B9FBD42212284172E844AA4BC9012455B8EDC9137C0E6F7FDBFEBA133402ADECE2EB3AEE66B439C35711C297CF677B330AF2C361F3E635AA8B5447136E2E3EE597BD68DEC635EE03B305BB6A4BD8B074828708413F4BF8FBB58F63126D265529D2DD0011FF9D6CD403C0AEEE2BCB5FB3A4D391E625FCA64BC46C2937D2DC958CAF92976ED79E74E51A343E7E9C0AD0EA30B06D99946F04D636B44C92743502262A213E9833F0DB055EACCBF1BE27AFBA9B3E06216FFBF8408EC1372251E270E53118547ACC37B63FD5673BE8A312180F0592F7352EE1B72E29FD0A72B9B8B47C3BE6BFA5D334EE6388C74C07C00F9D7BA9271DBFEA3BB750612551CE2D43861CB3BEACBC53723CD0A493AC6795AF6D195F8FC9919BF591002F6F44ADE31F3645412F530162E02736EB4C1A578E50BBB1B8376E9D7AF481BE2DAC8DE32E8FED845C6725655B6CB67F6792A64EDA3971DFB492F4ACB199CA4CAE95D4B65343085B5F96FA272A55564C80EF35E74E33E4F33BAE2F9C9A40D3C39CD9B7C697002B248A4AEE443F4AB55E3CA82BC264E3FD7AB0E07BA5146CC11EC3378A509E8FB480C3115D0445A0B4F1F9D160F115115FB9DC3C16B685860F1D88CF8007BF64BFACF4ABFE5285F835102C89AB430CCF09B2D8D0736279FDFA3C013F7B751FAC319411B3FD6A120C34E306058AFBDACC11B9C5CE2FEFF15D33F6B0C151457CC0F07F58173158D29E9FCB9C8F5B7373FF61352EC2AF507D41A3B38007BA50BBEE6746140BA2C39AB8E7272F63536101BF82B05F1C17B910A00117747DD8CBE44E0FAD28155F685D9E9A75DB882119EE42B2C1840AF19FD6AD3574098B4E1CE01C42E054A538EB601A53C181A2DE877FE82932CB1746DA5D70D77BDFEA5FD14F7D94BF4540C54809C66069B62F1D34CFAEF521621C51C9D56882E3CEBC0C75BB8171040D1E413E22E02805B6DD232D52A2AC31F53E6F332CCBEADCBEE17A4CBAEBAE34BE1926B06CB7FE81F34B12F74554902B10DA807D113DD84133657F4066DB4ACB2FEE6F397CFBC53E3FEE3FE0B9F29769514E3CDF6B30228040E57D0737BD1B170047C856E557AF1415423D23FEF78840CD16EF179F6A60FECBEEF8967EBE0682D227DF722A4183F99F27CA28F3FE82495D3C3920CD037896E7C98AF75E1896573BBA51D61815158B93F57877A0370BCD6BAF394184E6B4CEAF498B60B78B9B869173ED38ADAC304726AD8DD78B00F5AFBEBD8CAEDF54D254068226CF8AB5D4075AF2E62C49D21FBE7EF21BD658DC43AF53DBA2F9FEECA73CA098322A8561BC71D9857D9819C966EB9DCE2FEC39FCFC293F777BAF12DA086D4BA98BB0A0F4381D35A9FDD25FAA958A75B65C30BCBA03A49C08EB0EE50D5EFE7D0F4D703DB54BA99512B68FFE29C994E2F1395C7ED7B190A6E71397092A37284AFF554F5C254CBF6BB39BAA0374A5733E562BF4D3027FA55EBDC956A1B39F6ADB8E44FFD37A38BDA47AF0CB3B068C3241A058B2FE4355487FB0F09F5BF61EB71330CF752FA6A0C41E6E4F5912B36957309714015AED6C9739FC7F23899861AE5C38B80B3716029BFF94938FF3FB35CB46986EC3E11C5D25C4373C33267C3A860CA0FDD9FB5E1F19957901C659DCA33DC6B3DDF02A9ECD3FDB924700DACF7482590D8353FE5CD0E779542E671B96CBE793FF6C729F495C6ED3BDFE69171F3FC5047E6C4C59503E6AE3F577D56F652444C65F6DDB6202E30FB1147F415D66D0591568629C2A7F8D42C0028EAAD286FF6D99B9A2B7B16363029B5C9A45D0FC0C7C241EBF0602871A47D22A1A6073383D2A1512A8A3C419A7B2056001CDE54871C3F51186B3C7F86A119F5BE48749028E631E6F2FBE5468B80B760D01A2864C618AB9566B61B189621DA797046934206802D19DAE7518B26F8C597B3DBAF6C88A53F95ACDF2972DB1940C1217BD644FD655A4FED1E89DEC7106E7DE08364CA826DF0CB16FD952766BA4EC1968059BB1270AA4E816F8F7A1B50CE9C70AB8257A4864EC37B0B3DFFC022D932CFC84846B6A36B7FD9164922EE86BFC62F08B6CB27F71D003196300742AA7E5E864CAA530887D5CD40127E8E4D2BE4F45B77D0C77C1E0AD8AB38052073542D3EA7EA9C91EC5CBDA732F97B15788EC315A13BABDAD9B6E27831C1A7D072A559EBE53FE6628F5317FEBA29847292F5501C64EF7F37A84264E0F824502AB4DD248DAF9F2048A850965E23AD10A0326FD54C618B6B8326123392DB056A5AF2FD49ED04F6D303C51774145921040B21B4BE985F03B9296191678D5B8D6D92F64B6B366333AB3B8CD1874A17573A050E38612656C20BEF34107B639F55A837B9D11E0DB5DD97FE19730B7D8C7F120A67527F131C474C244F7BF242B8479C37395F9036492C4F2090731CD3C68E62C4FE70FC3CD6851B7284E9CE49EB4535C1D6D4442CEEDBC13B034E72A92A786DB1092D44474B6F50A4341DB15F5E05455B3D4AFCE24A45E622AFB129980272480C8C1D40CE00FE7677839FF8C12A61DD0E09276BEF8B7B66C34721978A35C891C1C5A4C340B4774A4ED4756EBA4D24F83DE42B8EDB06688110B67D86DF56EC41CAFE36FB759E9C4991DD2D0B161CBC76123969A61A39B6BB6D23B28A36F07AF7E82393BC1629729F47D1FD0DE95D6AF40A076495ED363781377B9E51EC021291623522E278F06FF8B6CA6E484CB8D20FB8CE803F9BD50AA1FC12749A9B20B345CF5B9BA42A888B09976BEF22D7FF348EA98E991D71D2F58D3A80E6567BD56D96171888E11D2DD5203376A82FF5D7CA0CDDF5F10C8795C3EC661E79A9A2248DC20E591BBF7643617BB968EA0B3AC58752B6D97885D4610E71549C8B0EB42B8E0EF8D621ACCC0A968A9485531EBBC8B1908716F2C8AC07EDAD4AAA6AD9C852B78DEADB1254A3EA96BC42FDE15F0DEFC59BEAFA77AD38C552E0E8845221AFBCC231CDC533D0B65CFCAC703675BE169E9F5AD4DEFEDDEB0A451578216C1F88750C862BBF8148BBE4E58DFDDB2CF24F94CA59E5074CD0CDF456C3802E5884E0DD140B39EF92670D56AEFFE970D00FED42C5E357122A81283BC83758CDB89D8C50AD20C711C86002635C9E584CE74D1446D63D58753DDEA282D2FE176B0E3F9E116398C3BF48CB7A65D0F3B59C28EB547B1301E78B351722CE7E344ECA48A7551D0046E94E79650E1AB2E2A43A191659F7A9AC480C4812DC5C760541048CB02D299E989BE1F205F1AE03DCC84272E8B557EA4720AC5F58D4ED6A8CD87423F99E02C57A9B708A7805A3AA99F87B4A89E99D4FE92A359F80DA45C3AE77652D8D8A0A3EB58D084D34CD72417CF1C55059A2D0A34B343ADF587344A045BCEBF090762D1FFE4C850CE1401B1BA7F4128F14F56A0B96C1E2494F3AD6423867F787E171B106D4A5621D1DC3C1FB192F276460B59B5042E059CE83D3D0B36642D48958833A36431BAA6F935CFDC2FFE720200371E172CCA7450117E27300D4AEB6CAFF48A295E4F121451B2BCCF5F296DEACA3A0BFF46151BCB14E391E60A8A99AF4A622C3A7449A3B12509C67A0DA4F1E8103D66D23EEB269AD9BF147BBD2C0AC7190D84FCFC3275809759DA3D4EA0BD6FF1A9D5CC23C6705E3B9261B43527F3F8FEFF610020F4ECDEC7E53BE511E94C3902A48914563DA3529D26C069D1C14B6F66E13E4E3FBC4FFDBDF7053D8B8A4D524627B1909DDFA2C05C0E63F933820C059ACC7F2FAAFDFA46558C575F3865C712D86E23A90FBBD1863F7EF2305855CA3BEA00A3BF0B1DA8492D6B3B11884288F6475121C45E62F5DFFAF8F02C0ACAEDFFC21C7437C20806BBC6DA7CA47FBFFEFCF6FCE8073405DC870AC4C4132C7C3E637E3B4F6BCD50343F4B65FE84E6515F3AF9F4350EE1E6CBBC3FED2DFE43F28E4A9B18264470922EA6C7A8BBCE0658A1B8648919384630819770922CE02236FB58D7B4E8CD2B1BCA67C58F46382AFCB5E74B7499BAD856036A968ED3DD664E8391AD62F7526FD38D49BEB273B6EA486C74DC4494AE9C417F81B07E369D47ED00760CB48BC804637778E750FB26E24D7F4E215F0021B9D4F56BE276A2F19CF001D1B2FCAA36BDA46F79CD1CC74C45599E62FEE87BE7ECDEBD37BE20E58EC085DBF64E2974E5A349917CF086549C0DA92589D73FF3B37419E5D33F72779CBFE0B94740D0FD1CE5B8BFB457FFF7658A202A15FA5BB6809228823444A1A630D2F4BD0FCD0D5C3DAB09A41F803E5B75227F491E4861A2632A38B4184DC8D843118EE26342E8987CC4ED6AF0B7960053CC0D12C45788E8705159E4945844EFE231600DF15CF73339E7CC595AF7B1AC9338614B40B613EC89A67212E803032480FD87BF57890FF7D4DAD8DD8B2E8D789FAD515CF7F8AF2C1D74844AEAE54A35E3A7D95D70F2540A28697666DD36605A18F9723BB2A72D874E5AA1E204C40CEF8FA2F9E3553008AC5846338D81484FE7132A32F1720F833C7A510E15517205635C87D63A3C7C05E7F0C6E26B739F05050BB9CFDA921B7C801FBD690322F25BE640D030FA7214AA97244A00AC2C17C8DB4B080A97A32BD0410B561A7F1301C5FD6AFC2BA36E0B93F60F37B5481BD05308F48DB719E8C34315FFEFEF1CFA2B832384024130EC256C3F7513886B7588253A02128A8549AB15A6B815A37F1C76FCE3B492C4188E221BCF2178A4D53BD89F77C9B419E7A0FDD9D8ED9A77D681EC23FE17A4B6E3C30DACDFF6BB64D106406BE0762CB6675C1442B6B9EB2BF3AA454D3454A6BD9621BBB3BC083AF0E59907D1AD2E975F5536BBA10262FF2AD8E1B835B16D2F7D6082D5BEBA78F95F22235C1DB1197EC413E5F8FE9805BA342191DBDA4F043F78698A712A59D8A5DC3C5B7EDF05E278BE63F321CB7431E45AC7A19D299D1F101DE4E4B327A7536B3A401CC13C87DB2E3F191C775BE3730438A51662B83B7C3E1D4B60FB202E50160F88E78B586FA7D3EC725D0F81A7B43A70DF7B8291F0B2FEC3DDA4F126E00E10C80567D3FCE7ACC8FD437646DD6CBD7597258A41B2CD851FD5E8C77ACBB6AC0C644D467B40E03E8833B2854D7A6C2157202E590155CC5DFA7F48FD131F31FD46966AE190254135B6E6010DFF4837A568C670599C5DABB697EF4BFCF7E32A6901B53EB70F8A9132DFF8A31A53BF5DB247A2944DAFD760E9EBB34AA0D9443DD3BC980B4A098095DE353D7AA3BA9162D79199B4554EDDB9295455CC5B40F0589ABBCF5EBBB413A8C70DB617715DBD2F5951720E3F90E885DEDFE1F5B4B4399D45E5DFE8EA32A7237EF1ED4797C647CC9726720ACDE1190AD24A80DBD21DF412D318D28C7DD44427AA4F904EA2A0ED1797155E8D422FD063CCD5159FB2CB5161FCDB747EF4BB4FC2E14B607D51CA67325C6844BDBE66D0A4486EC0A7BEA574DEFE2F51C72C6F23DCC69BACF7CF5212016EE3434A8693A2960ACF3685FAA7033CD6817F21789F05ED4468F722BAD9D5F55BBE39DB6129586A8CBBBC5D389DE11E976F204ED2F189CEDE55061E9C7FDB31FA402A3B6D28DAAC291594BCE3A8B4A786D88A4BB887226A356BFC0C2339CE0DE08B62F873A5B16F947325BD5CCCEB36A15E98C3F49079731EBF06012BCE88EF4787DC5745BC33E1261BB64462650E6980C66AC4A10A185011EFD9B39FAF43C6EA3575D4F093F0E52BB69CD8D93410B8B19C816563C44E3D6E8C4555E2804277D8F0592CEF3979EDD58599EA6D4076DDDE2102022EDD6226E63866644D9B03AA742500E9DBE3C97723938FDE2A64CF2E156876C17D4048FA8D3246B6D3149F3A82EE76473F8C01FA578ADE9B4D84FC8269384EE424412D34DD055CA89D12A40EF3555C3BED87EE88677B69F361ACAC0936C34D9BC6BB1540C1416A3A30595D44E6CFA7F827C094E149C57DA9D839D230585272D9C5094838401B7AAC1DB4580D1E240D9205B4E1762F6B51003D6C67876F39E1DDE7837FDD876FB70C46E8C4956D6F8AB42C402BA471FBAA5AB748FAD4B3F23DE3D37A269BA5300A95FDD53046A6BC92CEE1B35B2E0E3C6CEBD824253F75E35853ABE1C1F349EF0EFC3595A79CCB63B3FAB52CF300960ED4960D3BC2800ACB20197CDC9BC4FA9F85F1A55FF87995D01F74702A8948EF58BC9C0D2BE50D2D8EF169748D1FEFC8EF0016A7025B37155A003D1C4D0FDF42D82A241FFEB7CEB977C3166D8F0508B12FAC812A73A1EDFD8587B22BA7F1DF7E12279C63FACFC937315C2F3E44C98655F88CECA18EB4CF363C27997705A31186E4985B6869A5B660E24AF91672AFB8BB005C321B053EF05D576526D23652318D4BA95AAB6E1EEC52D58CBE43BBB9C38D6EDD76A870F681A5A7FD10037EE32990186BCBC9550D4DE270E045797FACA29EA2996458DB891C5427B404710DE9D3F1622D2B4FEEFA386190943890B10826FB5B7161E57FD1B58E4F76A1A108DBD4860C5316518152B0A76102C747518BA31F8E08159C88EE7290789C0077599758B4BFB1845DF1D47908C1B9847C0A6D3DC3D3811200C638FE1DE185D9E552384ECAAA1288A007452EB98F0CDACE6AF5860B5E3CA3D78458EE86B2667C6BFA94B6886BBAD2F7E59DBC8D525970B95E2FB3EBFFCE8615957646512301EDA0C8C3BFFB565163AF228E25C17F15842BE7352882B2916B2C0DA0F3F57481D4E4AF1CC58F9975620CCC03C970A8C4967FF11B69EDD86BED375792EDB55D6E3BA1BA41126350F59172D21CB6AFC8FB84490A74035917E60B432E8D380788ADAE5EC827B666B1322EFC89F71ABCB53E6F5B0DA3ABE96AE289D336CE34C3BC89EA256D57E6A0441E97D74607CF20CC4F8EF01DDCFAE401C5F3E59EE230E3FE6A3F000DF44F5D57CF17EF0CD3A263136907E64043A6DF8F0523A764010261EDB4D9DBC7CE13D7FF31994EC50AD82E2390D135DB49A2BAC4607107D0A8F856CDB50157FAC69B455530E70EAA581A842DF584D32FCD86A4111E17675C0B0657384280100980335CF48CDFAA62940F6C46EDDADB242426002E5D46DCAF34E8492A8FD567D7097BACC227DFA2EDDB427D0EAA216F302B33131B80E1AB3A57ACBFA49580D2BEA7953C712E18FC458412521BC9CD04137818FF5CC24C5628CF716B7A1FFE585B6FBE6615E4FD021237CD976E8F907189A8AC2B7C8176FC5B3E13A2BCAD812685BAF7AB0A67EE2E7B16ED25F4B4E8993F00E1D272D2DBDAF9C10AD7D15B4564B5A711B398E46621B97DB066945008A7567A62BCCBAFB3B3DF1DB1495C175D1FD0886F4CA235005A99BF18F5227545A8B9638156F8899806F35ED47A321DC5A21F90950BE1BB05207907230B96BE9069D7098FF996072747EF6959436086287BFA76D591DF39C7FD5D60DCF0658C6F35CD6AA3298DCB0C18694D1B7862C1C0F3DFA71120E9FF899D41929B352A36E163F92475F5E2FEED2E6ABC27921D4F9A9CA0E811BE7B4F4CCEE005E7FB2FD6EE336CB87F3E4BCA11E0B9E2B62CD7F77FF2F7FF95412422E7A9D8A715DC17F2FE93CEF42565CF5C51D5D7300498981FF6E986F4033040AC0E49D0D566A3B534C9C6E3225EE3D21A229BADC06AF41E4F10B8B12B5622EFCD5322E5DC94FAF5AD20A2673EB576C112176CD1678380421A2B81C4ADF289DEA6D715CF3CFEF68528A5009FC78CDF999AF79E14EA50874AD3E0CAB0133648BB96C4C1679FA7851421E6A9C283E07A8E4BE729B65374F4554FCAFC5C334572F15D450802CB78FAF3728AF303A6C5C7F2653C642B0C916721D06B17D4AB29E0DB74B8643DD777C2D3ED3644C981F0AF8A0309F6F6E046E5CBDDE6325F61254849A9178FEE60891AED79913ED54D9DA0DFBC8DD1A132EAFB2DD29960F0456371C7EEFB206960C02A79EE097C4E080F7E404652A3D453A616BE1C621BC72929A8162076E7527D367EFB6258B2296DAC25C31A20AAF2BF9D7347E4614DFEA4624FC461652E91272BC210D3A771FBF4ED516F3C58AC097FB5578203A06E1CE87F570008EDC7077E939BEE5D9A1E172C7853F610DEC14CB64545AB0EAC8E87BDA527545071F2062549F0A9BDBDACE4963F558A4C770C0ABD0A49C3A81CF9D2051331B773CAC7BB854DD0C7ED188EF8996014CF56033A45991C9645272F5D094F1EA4A98CF471CC779A05FFA7451CA57C51294707297B01D8EB1E5634819355EFC677CE74E56BA5EF4858BBFE3A9E5400F0C9D606160226A2A2D0A0D51B97F606AF10E0CE4D3197E58458BFD1BF039E4DCA5643B7BD4FD8C4502CD114CBCFD4B061B54E2ABD85B2BF32F081BE4355E29F32530BC4533E485F371C7D215F821AB4840E6F0AB4739044A48484CDCE1A81FB4932E177C40F5C236CEFF2A0089060AFD6CD3934E6D8EABFC3C620CFB97B911D9B82D82CA1A2F075B24C9DC581EF3C1324D5F600E04C15704822B4FDEE8C69F05DD40485B7330E33DCC4829A3A243DD38A0CABE484903C4F6D67E37FEEF38625E2AD68ACEAB75CF0C6C3241BCA7B3624E4E072E1E1856CCC98B5174F4F8E44E93E5CB78DBC90E9D3B0BB1DC16C2084F231BF9A0E80A4445D409B14349F0CA0387E3ADD6DC3A96754F69F312567AA607731251E8FF3366899185A4C217CB433A31BE5423143172F88584617E0731EF5963A9C037AEE104548D14355695C46D7426C8D0A82682E3419F69537AC1E8826F964B6E6DFB0B9B50AA0FA5FFFC1C52B116ED574E514732E0C68E98358D8982A491D5C05A660F891B2D7FFE26ECF34583069253D491440E4F088DA76C7355D3207D016E165C085B17643C10E1491C03D339153EEB35AE035DD77141E8581CA7C7ACDDA9EB852F26FE473C7055232CF5FC89D4335E26E7FADEFE004EEAC672CF479459347B62184E09FE30A3F92DBE2AAA7B556E83E949A0C4E2DAED84E03C37D47D38B0D9E88A8A6196296FE633F1A13FD5947F61043B6E4AA86F98973AC929B208DF7BF4FD50C1E0DB0CFDBFE9CA80E129BDAF4BCCC6C031DA662178E1E326DD0FADDD6485BC3284D28E96074DAE60EDEEB76D7D19EDF5420F3A2A972F490EE7D610A04BED1C5B7D7B2A693E20B8F42C05439A3A75A9B321B89B654B91AB55998FBE312CFE24F0C25BF001FF74B7114645FE81EBAED4622C6D8E8351B70FEBCFC4CFBE7287C72DE042C7DE85A7B3AD017A1F05931969FABB5C14CF7F91AF1B4C14322AB508AECE8EC0A198D6F5DC74A9D181D7A80A48B66AD503167307BE4EA3BC82716588F808DB4076C277C113B57F90159E1FD76341CB8BCFD005885B770252F51A736B0F10E9890C5783863E99B14DA6D2E2203ECC5940B5E9C9180342F4FFB024CC09320480F4A486DB0BBE455D362EB7E17894E21438C132B52557C185B96283C619CDB80B9251FD8BA7F14D92709C92F94B617C6ADE0093380F5F5BACD30111A92A7F336876AC4F26A7667C3773904498C4D83A57E628E8092A7FFC32F640A896DFA477F1592A82AF1255C377946BB47F1AC2D80AD6C9B301972A4DF6A01C2056CDD557DF28533FAA559B3590556074CEBB8D2823789DC015E1765A2EDC8BFF06257CB9BF03E546C7833DA53B8422AC26B58F3B22E3FCDE200531FDB1F910CDC9AC3F6AD8B6C5BAD63660A03AE89481BECA23795D50DC12289E99A9D1E794CE727FEB9F54C7C37FEFC464EC835CA33770B03EE7C5976078D01D323A1D1BE8EEA1922DCB0D053CF6F6B38998EBEF9EDBFB523921B8AD08DB0F62CF37958952D3EB763AE12ED82A7B7347F1021DD78CE08E564ECAD2C736049952CBAA35F5516D60A5AD75B4ADAD2337CDAE60BBF6CD37D5DEB93F4A980124403657DC1C80358DE683A1682A173BD0B91B831518D548A28583C4673C2212C8A479357E45C116A788207A2845650DCEA2E8763F04EC0B6AEDB55688CBDE41C460E8B3B0E1BD8AE804EB8CF85B105D108605B453ABE3C3B87DCA80907A9DEBB9DEB5B76CB15CDCE55D9E2A296F131FDD6835F2C619FE188D14FB43272CFA6D66FFC3299558F06F3928CEF61DB9AA596AAAB328449B25AFD0AD3A47B619B5B85320B3299BE97A7467C6C99D4B080AC37A91E87C79C228DBDA2358F82EA8B92F630692ECF670BD71204EC08DD18864D8A276DD1431494E8107E75F78908255BF1DAA3A34651DCCF9E4674C2B01AB0A41BE7055A7DB94EE29C811D51F2134E0ADF90170274E207384B9D33FC9FD138F6CED0DBA103CADE378BC107C4348BDD8AF86AE32003AD2F39E0CD0FE0865243CA4927832138AC0714B2DF77B3DB4203BFBFA90434EE18F220A1A2C135BBFEB1397E3C7B0C08BC524C63CE6E23357C5E9EC94F20DC4D0EDC3134628095EBD159B32E3E359EC6F7B70357B8D01FA9CFEA2444226C6BDDD4EB6F5F4AD7A53BBC609275BAF5F746BFD8D1971C85953EBD8765775B51C864EED65953C53E7B2011C79B573EAAEFD9F3DD854A9AD3C04F5531A2C3712EE06A982D87E39CA481805CB18554EA3EFF13978C837DCC7EC91A1509FD939CB7AEE3E730BF10220C3D4F5C05EDE94D6B6517318F2CE5AA629E19636CCE92A6EDE3A503A26DBA7EEFF08A4F3420C790E0CCA9A4E5620C8BC8388491A5ACB63EAAA86E2148E6ABFEAB98429FA1967641D78983A024EDC08BD61A3A6AE828D9423A4CA48CB2A548FA21ABF94D206DE932C242BA1C291519BDE7E34A2EAB401582BFFF6555F2EA8F3140887F79F3736B683008A8A56EBC182432E6A4CE5B194EE095778D2008943FD7B288DBA196A0CA7378E1FDA398701403E640220B45C1D626399EE37CE64A609CC8D0F2E6E0778D911C3056791CAB4725628A3AC8723392F1B1B567F8BD4D8D2D8160DBC87D2E226EB290EF156B5D0A8E56BE195C10982A943E01342B1095D4CEA328F8BBCF7FA83467CB15E1447C8653AA), (0xFE34311DE936468A7BF9F65E1DBB207243654EBED716E4F44482484FC17BE08037F4D69A710A0F8589F42C3B706DF826240A42EE5C19CAE8503DD966EDF7C90018762629E586003856C935E2E9A883D78A222AB638F2241E29ED493431A897922B2B23FA46CF409E0A099892E3E7FEA7B901DBCBCC12C7265108FFF73CCB07AD32A3B6BD858891BBE18CAB2E59923A42EFA27B2FCDCCC51864FDA83ECF49623E02EA5F40304022307020E9406699CCBFCEBD089A50D7E066DD9E5988E053EB98296D2C6E32FA11AE7F4ABFADE285B1CA30E8701240C8EE2A0AF96292E699501D345116F96C5D8DD3AC5A1A0617338457EC8F57F7E3D858617E026438977EC7E6FAA278916FB85DD35B9C66E5ADE812D7750AA65741583A5BF8B47B6AF9543C2D92340B75BAF2E83431849B467172B496EF8CC38DD770A4A1681C98BB3CF3D90660385379DC9D1C82227226BDBDF3E98600E47B6C90AE5622906A0C9E5A2CF73EAA94E6391F3AB9526F416B654AE6E4753212BB58786D76B1E230E971907E27F57BE812280CB066C52B28FD4F43F1D8A986976B48719FC53D1E3556EE5048C1F01976E961D3BC6881ABF52C4F6F266EF15840EBF913DE83DC22D509D75A7774E2670C35CD0776D5CA2EE99D7C7276CDF8C66496105CC7DD3AF20D3FFEB2912733804AE863F1A0EAE16A20CB29410669AB071010F5E164869F2FFADAF936D6179DC269FC288E6A07267AB4A53CFCB3F9ECA393F7A18031521BC34833F6C6F0AB94082D67D80A411D9C09EA7B2CBE49A27C01EE56A2DE751C9117E0644537115F8A091033CE4B20E162765B9896B6265C79A6B7F4D89A08B59311D6C029DDD865F88AF022AD16D330E00CF42C83DD86DBF083EA9E7F1C87F0015AA0BD7560B8849EF59F0BC504AE63D28713CBA6DB32B58AFBCFA6F239E5DC020020537616BA80546F8E8D3D7A15ECD487CBF808BC4A2528EA327A901292640FC308C4E35BECBCCC9377364DA57710E5E3D16B6DEDD346B6FA2A8BE340F042DD297D7A725109789A0F2B754413D883732294AC4026F722F0C20EE83161D98CA235592427FD9D94DA58D15EC15D01A322A718C0AB4301B6325B8AAF43204738359FD30FB9B35B758400D2E855986092C06AC5894818E05E33A3F1CC73EE50B9119828228AF2E96E4BA23CAA70196199FBF7EFD85ABDF01DBE74DC16C28F0296B019D7BC703D08CE81563DA6DC36ED1A4257D17BFE785E53A80B641615D3ACBC9FA5FA5742A429BDEF2157037F49408886C1D36ABE879837BA831464D9F2B8ADAA8106373B96D89D2E138CDC205BD35ECBDB8F54FF41FE180CC29DBE8FC5E3FD69AA59FE42094CF0E9363CAAFABB175FB0B599FD6263AD6883EE2A79F9190D68308F727601D41CC28F9F6AC905541D50AB3D0DDA2BE59A05FCF07B54DED3F6CF28D3796B49A05DDB99), ('90487073-abdb-475d-b891-7e3a184665d6'), ('9999-12-31 23:59:59.997'), ('2079-06-06 23:59:00'), ('11/19/2008 1:26:51 PMThe quick brown fox jumps over the lazy dog0123456789,.;:?[]{}()-+*\%^=~!@#_|/0111/19/2008 1:26:51 PMThe quick brown fox jumps over the lazy dog0123456789,.;:?[]{}()-+*\%^=~!@#_|/00'))"; - break; - - case 4: - $query = "INSERT INTO [$tableName] ([c1_int], [c2_tinyint], [c3_smallint], [c4_bigint], [c5_bit], [c6_float], [c7_real], [c8_decimal], [c9_numeric], [c10_money], [c11_smallmoney], [c12_char], [c13_varchar], [c14_varchar_max], [c15_nchar], [c16_nvarchar], [c17_nvarchar_max], [c18_text], [c19_ntext], [c20_binary], [c21_varbinary], [c22_varbinary_max], [c23_image], [c24_uniqueidentifier], [c25_datetime], [c26_smalldatetime], [c28_xml]) VALUES ((0), (238), (-1), (null), (0), (0), (1), (-100000000000000000000000), (100000000000000000000000), (0.6392), (0.3463), (null), ('ßÄB£Ãrbväî C@öÖö*ö*ZîA>ðoC~*v:|ÃÄÜ~ÐÐ~¢¢Öbýzhuah u,:ãîã_r£ö@OªZ>î,Äßäý@>öuªÜ@OßðC/aAbCäßðb_b¢C/oÖ>.Ö@rZ*Äî>ªZbAaäA,Ö~v:ß@îåß:/äãÜ:aAÜb.ðh© oªU_äa@uªÄÃ|>Aªu¢z<åvA©ãßbaUߪ:ªððzOZ*aßöuvCBå@ýoßߪ£ÜbCö.Äßav.ýUb¢|Ð/ðvZÃöbÖ_Ðð_aBýßäöoåOUä£rÜÃßZäavövÐî_zöãa*.©Üvýo.o,h<Ã_ObªbðUU<©Ä©~Ö+BZ_ýzäããOåöß@,C<åÜUÄ_ßðUA~ÜäÐüB©uß åähoßÄ*åÄhCÄã+rãî*Aßv*zöÄBüBuÜv|ÐbuªÖª.aOörBîäð<@Cr rüb@|O/ÐÐU£ðä|üÜoªBZðA£ hrbäo<~C~ð*ÜaÃb|OÃvöZvu*îo ðAð.OzÐ++h~|v©_*örrÖ:|@CuÖÄAåü'), ('ah£b©@O:vz©/~havÐðZhÃ,å+>ßr.ªÄ>,/¢|CA<Ã/aÐ>håB@BÖ/zöÃ|UªvZ~äzÜä|ßZýö~åUvUäCüîÐ>.ZC©O,|Äå+öãÐåßCUåð ~B~@ärAÄß:ZÃ_Üo~rC©ov~C|¢A>+.ÖäBý.îzÃ~ßü+ãå.BUzöÄUîhrÖbaüaåßÄ©Zb~OÄhåäåªzÃß.ÄÃ:+Ð_£OãÐîu î ÃÄývÄ|ßãð_Obä+Zã>ü©ZZ_>BoaCUäZ<ßü@rîz/Bãîä_ã_:Üß_å,v©ªbhrîBÃ/|ý¢b+C*O,@bäß,.a£_ÄuzÃüåuh*:bÃ. ,. äîßO*/¢h+ ,äu¢h|*,ÖÖßUbr_>.,ܪ@~ß|ðzÐåÜ*obÄvãbbCbhîb@©:üAA_£uö@_: >Ð@aUaÄ.ªÜ@ß*<:Z ¢ÃbaZðOª£*ßUoÃA +uÐã©/CräCbv oAã rb£@+©BÜ~ýO~Ü/£ö*|.B,ý,äoOãîv> ýðã>ü©ãäbÖåäCAv*¢¢+ß:.Uöu©ß+Oßr@B©r©ðð©Z@Ä+*>hZãåãrvåÄä|©îZZä:©u_+Ö/ߪ.ÃöBvÖbî/b,ü<*ªð¢,ߢýa£,.bAhßC+ãaZ.> ß/C@Ü:råîüzª¢Ö+¢rª,b|©rÄîC Ä|öröBªßöÃCr|:>>BÄ_o+ýrß©a:ÖCu,ª©h> öÜ+>Að.öb.ãªbOCý*ööÄ+h@ö£ãÄÄz@_.üO_z*Ah/|vÐvoäÄöC,UÄOÜößU.äOuâ|ä.£å¢ß£ ß@hC,vÜÜhÖªîvßUOuÐbðOöuå¢O,Ðuß zÖðð©¢ã.ý£bb:BÐZbO:©åÐÄhãZv>uäA|z/Zh î|_+ bZCîÖÜåå*|Öo/|bßb,+*Ohª>ÐAß~öh¢îZ|©.aö_<ª ><ßoýÄB_ãOOAhðêOÄüZðrðãååî¢ÜhãåÐä¢CÃ~Ab<.z/ÐU/ÖÐ,Öß>z.Z_üvCß<ÜÄ ZzZZ~ð~©îß@î>B£/hî++A+./*|Äzðva£ªC/ðh:oå,b䢩©|, ZðåãöarZÖ£ßåZ+©ÄzÃÖîrîÖð|ö>äÃU~/Uvß@bz@hvå+üÃaB©rî+ýß*~>b*¢A|h©ýOª¢z@ßu|äã£Üå~¢Öh/+BA@¢ðzäî*,bCbU+ßräßä*ÐÄh©Ãߢ:ÐäåCÖ|ü£ýÄa©ååoÜÐ~_>ß.îz~a*z,üU>u/ª@Oýz©,ouhßO:ä|+öBvh©zö~_Öu©va<>/:v£~ÐväB¢rÖ<,_<ÖaAhUBÖZ~ª/|/Ðår©zÖa~îÜrß,AACOBorÖîUý*v ÃübýzÄ.*ÖýBO¢@åãUßzãbÐO,>Z+Ãߢu A/ ªãßîCü©ZCBð@©äbaoA/vüß©>A*Ä_hÜÖorrvý/ðOä,/bz~ÖÃãÖªbZªo+ßOZäÜvho* Üz<~b|uä|ä@Ð*ðv£åÜ@Ã:_Aß:ßob.ªvZÃüß/uU©Aã/Azãbß+ªh+*¢£äuZ£hv.o/ü~uA,Cß.¢C<äA>Ðý+ýÜ:Zuî©bC~o~C,ª©ýbÄ¢b/vÜÄÖUhßãÄ_©ÜZ£ÄoÐÃ|ýZ@£ß@ÄärA.a*z|>©|<©@vvä¢ð*Cüöã*AbboÐhîu@v~ßZ@z:ÄhbªUabÐa©AîO~îUrbýzv.Ö_©UhU©<|B¢å,ãåUBaa hbBýbö+ ªu_ýrz+@ðýäßb_BöZjkl*üýüZðvÃ/©rrå ä*_¢ÃB:+zBhuvªýoÄÖÖzý£U|ÄvAÃBUß©îЩÖ,£ªBªý£åßb£©ÄZü/:|*uBýð.bÜZbzv,B,:ArîO/+*buã£bßüvîO|ZOabãüã/ bZu+ãå>Cv©oå¢vßb_C*A>*ªbãßu/ü+ð ýbZÖý<ßozäaua©©îuýzä<.ßÄÃh_A©boîÖãî|ýAbb OУ*+bohzuübbä~U|bäöÖ>vÃBvßr<Ö>uÃbü¢rrC.uaäüÜhýh/,vrr:~Ä_A/ýC£åZîã*Ö~ðÄäB __ao£+v£ÜB>Zau>UboÜhz|h|bößu_>Ã,CåðAÃ+,bÄ:åßߪãCv ã_Büaü./BÄ~bBv,BoCz<_ÄÜÃ/äÃ*Ü:C©üu©hzhäö¢vZÃ>©*ª,Ã/ÄßÜÜhÜ,_oZb©¢ªîbåªUÜAU*ãZ.BrÖ>böba,äO/_+îªÄ©|~©Bª~ÄÃrÜ£uCªªrbå:bäå._ÃvÄÖýªOabßoªö,UößÃÄßb/:ýbå_ÄAövAýðÜ©Üüꪣoz/aU©£@UOoª:OO<|Uözozª|bo/Öß©ð/uZÐBßäîªbA+ã@ߪA<@Üýå.*ý©ruß~z@Ä,ÃZO:b£Ã* UhöÖbv_,vzîö|ßðÐ/¢£bAÖ>©:ã@/~,äb¢_oubðoüvrAuß/h¢vzrÐBßå:ß a£ÄÃ@<©ßßÄZãaÄAräÐãa*u£~ܪöuo,oÖýCCã@ah_+:<ß /Z>Ãîöo¢ßýÜaCðî_:£/|_ãî~r©ä~z¢åÐãU /@v/ýhrC*ß.BUýðßbUß~+ð>UB| OCAoä~|Cð,ý|,£ÜU+vÖ*zÄbê:Öü>Aa*/ßAaz©_>©åa.b©.ö~ÃCý ra:A _.㪪î,£h|¢ÜðÄÄU©/Ä©£ðAß+ßðAAuß|ýüCC©bvBA._ã ßÖ,vb_~Ö*ê+AuÜý*ªðÖbÜü~ª~ªOª£U,r<_b@ÖüÃUߢZ>Тãð.oÄ:uO_ÃÄ:~£u@voÃbäöÜÃ<ý/ÜBu@zÄB:ÖߣðãZ|BoÜ£bh,~ýåBÐß_oÄ©Ða:BzO.Ö>O<âUäßZäªðãîZ+@U¢uüZîªCüOßã<Üý+î~üðå+£uö@Ã_ßãßÄb|b_OÜuvå|£bAüßb¢|ðz :¢äüýAÖub h+CÖîÃ/OC+ÃbzЪrýâîuî>+¢ðu|rÐ:bßU>©îrð,r,ßö£, h+ßbbªhBuäÖCü<äü,ð¢ubuðZÜÜuÄãB|Ðuªbr,©,:©hZßoBöð ..Aaovð/@ZZ+/vCzAå+,£~Ä@o|ððBCÃßz+/Ã@Äb*oÜå,BBuåo@hr~@©ßÄ>äª ý ,ªî<~übrÄüÃbÃ,ÜßãUa*A_U*ðäUÖB hîva@Ü:ÐåÜ,ozbÖoã.v*CßãßboU_|ÄÄ B+ãÜßÃåa+C+uüäuoªÖAã>Örzb<ð+@îOobbbðUü+h_výa:ªßrðBöß©åã O@ÄzÖ><:öroîßZð£,åZUÜOä:£Ä/.ü+>OUÐÖÄUb,AÜ@bv:ð,£oZ,ܪ~|ý©U£bbb<|Ãý£B_r,*>v:UC~aÐzßvÃýÄ|£oÜba, üÄb@|:vzBüîbv*CzäbuðÐvßß~ý.aðÜo,öOZÖrªA_:aÃZÜð/u@äîüÜ<~ÄîUð~AU, ß>CBb+BvbÃ:Ð|@a£_O>bäOª:~~äü©/>rª*>Zß*OoÖ¢ðBaäh,uvAäÖ :¢å£><>hªªOUCuaÐäOa*zUU@/Ä:<Ð,.£:Zîä,hãã¢a ðÖÐð+>.ãã.Au++ußAA.ur@ßã o*Ä*zéuðª©ü_CUü|ßAU©>aðb©¢rßh,üîªuoÃ>_Ð*ý:Ü_ß>ðOU£ÄÜ~££ ßZ¢bÃO ö|ßîrî£å_£|ßÐ|ABü~:<Ãöªb.b:+/åZ@@Ðý v+ä*£ao,©|>¢©ö|îuÄ£aüÖ>h:Z:£+bZa|ÃãªÐCß©ßr,ã_ßÃ< ,ZßBü+@äÄå+|>A¢v>býCöOCîürÖ*£~£~ü üÜ<îªzzÐAU/CzOÜ|bÜÄ++uOîCܪOrCUߪobäÜ~:©ßroä:äî~|b_äå~öÖ~|ÜßÃh@îa£>hCðß: A~obz:väAªh|+ðarZvrߢü£ÃUäß*Ü:¢Zb_ãaßÃvC@ü©_,*¢Ð>ðß©~£Ãbö<ß/£îB~ýã<ßba.ªýBZ£zCZåubää¢üÄ/ãÜb åß:¢åb_|äߣ<>u©<+AÖßrðr~buüACbüZöBÐo¢£ÜU|ÄA..+*,ZubßAUCö¢å~£C@:ßã*_.>>äÄv>v>îßo©å|ÐåýovÃüÜ_ÖbCCbvu~bãðåÜ+ _@ý¢bßÄîÖ_ß|ß©Bã:ÄüC£h,uU©uBãü©ö@©¢ÐÄ ÐÄAO+~UÃ.îüý:OßUÃ,hÜ,+ª¢bßåãAhb*CCýUB<Üßü_Uzhä>>CZüuªöð+C.C|Ä,©Zä¢ä O~ou¢ ßäCZýoz@CÐ~ZhbUßðîv ©ðCaå©h|:<ä.uUýoãýuhbr¢/U:bh+zÖ:öÖåöä/ªzaÐb£åobåbbýöÃCZö,ýßrß|ÐÜäv¢u/+v~äAbä.üãZC/bAÜBÖuÜãbð.bhz<öO:A>zrÖßh£|¢_/h@b+>ÃýÜ@.:ªz OÜîÖ,:Ü,vªhävýöC£oZªßåaÖßßü.öªbÃî/ª+ÐßUB£ÖU:u£.ýã.ÖZzÃ_ZÜhö~>*:£_/üã+|+ßîrüA£_@O+ü~@äÜ,rî ~~å£~Zzªîß©~¢vAð+CÐ>£u¢Ür_ÜðßÜbÖðbýßöv¢©ÐA¢Ð>ß z>ð,v:.Ã*üC/A@+ßhÐð£~ZUýC>bÖªªåv,r:/ä+ÜZ@*¢ßãß~h*U>a~oÖAUöZÜ,£bÖBãAßböðÖü¢Cu£/ozîð.+BäÃU:.OðBýîåväÐýÜÖB,zÖböA@,ßßüå:UÄ©uoß+¢Öa£üÄUöÜÄo@hãab*ßÐrðA+CCC:£|r>ãý,:£ZBbUß~ªC¢:Ъu¢z..~/ª,å@äv~+|r _Ö,+ßUÐ>. .v>©+ã.ðîB.,öãU,~uürrbîzîýuäãb©ðOBrC,ã@rh*+OÖ,ª|bã.>rã£CýÐÖ_AÖ,Ü,ÖO©Ð:,o,ýüãÖrBBߢ+ãÃ.ööîý,ðÖýO,ü~ßaröߢ/UBuåß+ߣ£Ä.+_býßUÖÖb:..ß|äo.bîåßÖ,:zÐbC¢ªZBZÖa.@ßuöOb|üãÃ,zðr+|Öߪ¢o¢ÃbO£C:ozhb|/£ªäöÄÐO.ªª*ÖO.uÐ*:o,våCoÜ_öBß_|*Ö<|ÜÄßCä/ÐAbÄ.:ÄU/ö©îoOÖ>ÄoOßb¢bAaaÃã:A| Zü_äA:+buä*~î:~zßvý¢öb*CübÃ,ÜäÜ., ªr£å:UßC|uvhä<îhý+ߪ,<ð+~uý:>ãßuC Z|ÄaÄC*ZB|Ð<|.bªüð@>_Ä¢<ß/ð*UýAZa_r /ü©ÄUC++£C£|+åäåâÜ|öuuvrýAB_/:AuÖOaUßv/*vã©ß*ý*hhª+Ö£,rÖ,>Ubvßr©¢*¢Ää£ä+*u©,_<ãaÃü.ãbv|*ýUä a*b/£aoa*£Z>Ða./Äßrî£u,z.*~+ÜvЪÜ_*ýhUÖ_ ã£AÃðCbäh¢Obö©ßüÜaZ.ßubîÃÄr£.ZU@@££|_ßä|A+u:C@¢|Carî//ähC++äuªh@bîZ~/*hî b,îv~_bOau¢z BbÜ>/O/a*/uÄ,uUbhÜåz|*Aöå@ã ©u+@uÐßrßððö: ÐüÃ|r ßhä:ÐýÖÐbãªî*C*CbÃ>©,bvrãðäUªbU >@@*îÜuüboö aª üªîýb@ðÖ婪ßh>hü~Z|ã~ßÜhðvà îzåãz@Zýovvß~Ü¢©Züb<öO*A/ÜÐhãÖbÜãªä~ßÜ@ªuhß aÖvßrBãöru+Äüã,_ßho,r>üüðbå@:îöÐîC~ªuhªö+üßbü.h@ßZîhu >Äü|*ößÐAår/åuaß@~ªå££Ü©h£öðå_ðb¢._CÃZrAAßÐ+bzãßå,îî¢a~ªÃ/Bð<Ð>Z@/ r.+hüZ©@åOåoªhü©,ÄÜ£AvZÖUßOÖ£b|z>b/./abrö<Ã.ßZ>ß@bC|ÐÜZðhªåoCðåߢ|£_Ä|u+£~Ã|~äööz+u~üý~ÐÜ>ZßCîBaªåßU¢öBöãÐðobÐ*v©ðãÐÄZã¢ýðÖuZ,vÐ<ÃöÄbà +ZvÖub.£AhaoOb*z AovÃOå©/CU>ßZ ÄuĪOC+.Oub@~¢ªvãA~_ðä,arýCî+ _*ÃðãÖª:£C>U£ß+bã:åã,:uÐ,äßÃ.rý:AäÃÐß©Üä©,,ö¢ªåhßðÖ*ö*a:/@üäöaý*îa+vß*ÄãÖ+ß~ÄäC_ßäßÜÐ,å>b|äU<¢©Oöuo~UÜÄvaÐzuOZzbzrÖOCÃoÐa.r C*B> |*A _zAo_Öýb£ ÖUßðvåBýîözåÖUÐozãUãOACãZßã.Zvoäß,|,ªCuZ::.ýßBhÄÖv:|ä>bÐ~ý©ZzöåO*:b+© |Oªö,Ä¢hbr£C©aߪa zãߢ/öý>~u£ aÜb/ÄZöîC*C:ð<¢OZä,Ð:Ðbã>ðÖ©öåh,<ÄOåbuZ@£BuöÄ+ÃüzßuÄãîåvÃrðß_ZüuuÄüuZÖCb~äB*@hCCUÜ+o©.||ßîräz<ý+hýÄý.<Ã|©Ohüß@Ö|bß|Öðß_ßo,,+_vÖBåÐu@.hÄÖBß<>Z~Özo¢Ü>ðu: /îßabza..AbBZuhöBߣC b_~£Brð©aö>ã.h|*a,*U+ýCBöoä.ß,hª¢+CåzvýZbüBU.£äbBðîÃob ãÄCî,bäªßårAaÃAÐ,bo,åä©Zzß åCüåoÜvåaª©@©+ä_ªýZO©_*:ßzßîß@Ü<:CCî:ðÜ>ܪ.å*aü©Uh bÃ, üÜ>bãü+b>ßOb_UüBÃuß,bC>ãöAa/B~aBooßhîvä*.ðäb@CvßßÐ<ßBO£/ ãÜu¢¢z£oðýå£uåÜßBÄåOß.o.~@Zî@@z©b:£ÐCÃ>Ð.ßý@äOCa©Uýý@_ZC :O:Ör.üOuO <ãÖ>u*/äA~>C>uv@zo_O_.©@Aür,a*¢aÜ@ý~U*üU©Zãä**ZCÜãÃÄuU~<|*¢~êaaAAÜ.ªðrýZÐ:oArzß©Or+Ö_ößvr+hÄ,|bvßãz|å>ä£Ä/<ß.:+bãî@,£UAâ|+u~Ðbz~.|z._vAbªCãbîO*¢üZÃ|ü,,hÃv¢üÜ¢bªAh¢|hªz<üaZ+O£Ä+a~¢/,ÖªAoOÄZ¢bZübUaÜ|ß>*ýuªüCAöb_UöOaªrZ@ª,üåAãîÄzZð£ößubv:oo£îhu©Ð+BCöÜ:.B,rvhü+arzý~,UhßU£îî¢:ðh<ð_î|ö£vÃ/ªä_üo>.ªh>î*v£'), (N'|ãå_ߣ,Z*ÖüuÃ,zÜ./Ä/A¢h@oÜÜ .ªUü <*ªä©Ö>öÄßå|oã rU|,ý| ä|Ä¢+ܪ>å@aîrbÄîЩr> ßUöýö:CObãýÖo>AoA,Ð rð+|v£Z> ßÐÜbab Ö£/ > ã©ahb_©ÐÄZO+|ßOýußýbßuýð~.ußBO/*/åZUh Zðäî@>bã|Ov:o£oÜ h.>ã©UÃ*A@uhßÐßO~bÐ/öÜ/åObßO@b ¢a>ð/:ãã©o_<ýãÄÐ//v||.*,*ü¢£ª/@ãüO~C ß,ÐÖ'), (N'.Z/A< +Öv>Ür©C|:ßOUu£Ã@ßUª.¢A@ß *büb@~OvbÜ~:.+:rvöî|ýã¢ÄÜ¢ÜåðÖÄÐÃ/ä~o>öUýýoäCb,åhr*bªv*@:UZåßz bãÜý@äbÜa©|a©ÖªÄuîÐÐ,£h/b hîrb/ããßvZ.+Zh|'), (N'Ã*ãâ|£î~~ð.Ä*îOÄh|öuå*ãö*/ß_/~ß|rÐÐZ*äªß/<ðÖ<Ãý@|Oübß|A +>zCb|AbÃbu>¢_av,Z.AÃ,u~å.a>ÜuhüÖOðã|<Ðå:äb,:<åaoÄ£>ha¢üZÄu©|_Z:övÖ:¢oÄð__|ã*ßC,@ý b~£ßÐ_ü|ãUbzð~~:rÐ/,ýýÐöª/ߢ:ªßo|uråz/A婢U_:öåbroü_åðýÜuß>r:a|väßßv£__ü+,î<ßððã©ßî@O_böhv,,UüåA>üZî£_¢CbB ÖäC,ohÄ.@/,ãUvÄA/UåO+|ð¢zB>ª.U+Aå+åU>a<>ZÖüªBhb¢ð>räoðörö>Bb¢CýZb+öä+:_/Ö,å¢~z@obä©ðb>äü.Ãzaî.äoÖÃ_ÐrOU:üÖBÖA ª¢üðAÜ/bu|>ü:Ão@@*_ÄäåÜßüäªuüZ,CðBb©bý,BÄÃ:üuuÐ|z/UÖu :ÄäoöoouBöO,b*ª<<_ö/ýO.ß~ÖCbð_b¢åª¢*ßåAUö>~@ßßO+üßüÃßß Zzb~rABz|î_@/ÐU©ª>Ä>>~îaÖ~ÖBC|*ßBZ*bÜZãrãOA¢vzУÄh+OBzßÃ,bã¢Zarý_Ð.o+Oîz©@£ _vÖ/ãB+üroÄß:££Ä:uîãüAB_å~v@Ub@~£>ohz,Ür¢UÜ+a¢ÄÐ@Oã:ªß*@Ou_vßãÐo£hhö>@.b/ÄrÐvÄ@vå_abrbýão¢öBã@+ß>¢Ðä<ÖUýÖßAU<ÃZ+ZãÃöªozßä~ rî ,U¢ý©ÜCZaZ.ABr_,<,|hBößÃhÄOö+./~C|u+¢Uýã,@~bBvö+ ÜüâbåbbU_©©_CCÄB_|äC ýÖz _åbö~ruö+>r/üð Ä*ªbýOÖh*ðð¢Ðr+bB:CU/v~åßA._AýÖuob¢ãrüåÃÖÐÄA£|>Ða:Cýã©î:ÖÄUüÜuC+oÃ<©~@äC~.>Ã_|UU@©@~äÜ+>hOB<Äðð_¢*åöBßo<ªý./orîO, ü_..+.©<übrÃZoÃ>býä+ö*övîaÄ<ããBã<¢CZÖbu~ÖörhÄ>rãÐ~£_¢a+¢~h>+ÃO£Cü*r£b.ÖýÖZ¢ahß_.ßåÖUr|u:v>ê|äî|ZbO+z_ß ã£Ü*,+<ߪB|ß/.î.hÐ,_Äo/î+bÄb¢OCUB.,_Üäbåaîa:zBhäoÖU|oUªÃuåü*£.o.ýzÐaa*¢v©>@ßoü~Zîäîäö_BãßÄ îåÄUªÐ~<ý*hãßCüå©ÄÜ@vZÃ/ß>zªðÜaBÐü£/CAObªrv:B/BAÜ<ö_Ü,~ð.ßÃöÖÃÖ©Ü.|@ÜßÖoCühOÃßߣ<:ã:ã: *+Äa Uzð/ª©Ãå|vüÄß/ßU.U¢üA:zãzß brhbÜ/ßä£rÖbCCÜðräÖba@Cü<,*ZÜabCÜ*ªÃ.rrZü|hA£O@ãv_Cü|Üz|BO~,b@B£h¢ZÜ@B>ý©îAîÐ obhzBÄäOAåz@|>äÖAbZÐ<>U*äv¢üåov,hOäOÜß.ãÖ+bßoOîýCãa*ý|öýäÖ*_î_Ão¢zab@ß|ß_v|åü¢bz@ä¢_bhzBzäÖA:äü~@ OãOã< vußÄýbAU©AabîoB>aîÖ£A@ ©zý+¢:UhÃ+zvß ~Cuã@+.ãî©+u©ãvbßZÐîh,aÄ,Ü/î ©ªåZO.ß_ß>oðß.za,Ü,äª|a_ðOrB@:Ðð@@ub<ö>.:@aß|üzüÃÄýaAAÐC~ *ýuÄA+ÖU,zrU@:vü,b|uüöåu,ß:Ðå>ßC£b ~aÜ:O_Ðb¢£|+*,CýzuîA*î@bÖ+äÖÜ£~îo£+ä/ö¢ðýßäh|Cßr.u:ZÐAý©<ÃÃßÃüZýb£rÄAU_*ªýA@b+@¢|£*|OzOh©Ã+ÐvßUa_åBððBOo©B©Öý:¢CObUA¢ÐßÖ:bA äßBßÖaýoZªÃ<.aO_Ãb£o£ÐBöZ:¢Z£äÄ.£ªßýrrhýîö@oAÐöýð.h ~+ö_+Öo£B_o/+|äßuO*<ö£UÄuöî|>£*uÐ+ßv£U¢:b<î+ÜbÜ<åhÖÐb£,öhU /ã~h:OöÄaÐ~oý|å.:Öåðho.Ã*î¢hbüåh.îrª<*:rã+ÜÖZýÖOOuörUzrv/îÜ_|ߢAã/ÖB+vöBz©BÖ,£,+h/öãAÃåBÄðO|~î£AÖÖîãU©ßðZãå|u/åÜ@..CãÜýo|£+/B+@,Aba¢Ö_C<¢A|rßzåZb.bO<@OüÖÐZªZ,ßîz>_o.UaüZö>ßuß+UÜB,© *ð@åbäaU@Our£åzÜÄäß,bî_A+Ðü+bãOao~ü|aZ*+aÐÖÖvª|îb:bu~ZU:+<>zî¢OÃýubbîÐÖ.@/,*hßÖÖObzªÜü.å*@r@Üb<+_bÖA|>ý âÄoååz|ÐÐhßz~ðAßOÄ,@u¢:öaßbAÄr©býîoUvý:r£ßbî£bühÐu+ܪß:ýUråBu@a_<Ö ©ÜÜ_rvrå/~|Züãöz<ãå/åÐZ+öÃO@,ðA,ÃððUZu@Ä~ZouªÜßO||ÖåCA:Ä¢>:ýA@Ö£,ÃUîÄîOã£výazÐAOåÃoB@BðÐð*ßîA/_>Z,*bß,>:~+h:åýÃ~.+hBäOÃüýĪª.å>©ä£OzüaB~ÐA@hü:ãð£r>©z/¢CÃ,bBÜåbÃå:ªUß+¢,Z_+ã©_ý_ä©ür,ã*.Ab¢|üaßãüßv>äªBv~B+ÖbÜ/o,@uCðãZbBOuÖÖb/ZÐ@äãZ<©v|âZ:ª*U¢ãühZåý>b¢ÐzbbýåuoB¢*~ß aªUªßh£ð@¢îã.uU£©ªüðOZßããb bC+uðA£C©¢,©îüßß/oh:ýð/üÖªähÐß,ÖÐß|ßo.ýßÜC|AZöbü+>*Ãâ o©.,äU¢ðb,a¢AO*Ãå+.©ß@îÜu:ÄbC<.hÐö©¢vÄÄߣaý|+ä @*ð/ßUУÜvÄo,@~ß~üäîB>Ä.o©¢Aß_ ,*hrÃOA¢åaZî+||zvbr,ª>üua£@vh¢ÃãUðzßUzåª_*ýåߪ äª*+ý~hÐî,ðOb©Ö+z>ÜÐaBÃaªr_Zß*Ðß £b+ß>b:/Aã>ãîUß©bBã*BöÃOÐýo.ªß<|ª<*uh|ß/ züvroÃöЪÖUîZ_Z<ÐîvðvAhbZö>:<Äðu>u©*ãrhvCrUЪýaãÐzv_Ä£AO_ðÖvo©ÖööÄýbåð¢@Üýßbß.:zö£Äo:,@är<ßð/äB/:zÜîýüüß©ÐÖÄãü,h<: >ü~>_OCã,hÄBðî+ª<¢_züÃî>Ä¢ßAuB©:ý@ª<äßUÐäC~©ü£ãß<+î@ðh+ßbBÜð*B¢Z:vB,ZîЩ,ß/ãBu_bÜa_ãOo@ãoÜ.ÖAz+Ü>ZrÃ_:@|¢UCBÄ@Ðß|Äo*_ÜCzÐUU@<ý¢b/©*ßAã@ >ýuöA.h¢A~r oAuÄOîözrýb£ªb©AoîßÐrßã||oZ Cª<åßzî.:£¢CåuC@î~*ýÖBOäzhU~@v©ãýÃz©ýßz|ah*B o|uß<ª@UA@AÄÄAã@@öäC¢o£åüOrzbo:hB_h|AÜb£o~öOZüvÜ:b>O>ýÃað*ßZ.rOäbåªOåv<ÐîrüAr<~að/ãA©Z¢CãC£ÃöÖUö.BB.*båO|Üvza©ß:Öß+ý*orßU>*Ö¢ßÜoöaªC+O£ã_©:åa BozOðh+vªvåzoãÐC_ÜýC*abÄb~o_:ÃÃzßî.O::å£ßÃ,*ubaßC.CÃîîýbCªB üãßî||@U/_©Bî* ©ªÄÜ©|Ö+|Ö'), ('_|z:.CbÖ¢.Ü _h¢zB<ßÐ*Ã+ßCðß:ßüäZ_Uå ¢å©ÐZßA@boU@ö:vbðz.är>*ßzvzÃußb:|£ãÄüÃz@+ÃÜ*UßACC@O.£ã+ü~*ðU¢ÖbUããär*ß+ßaB~üÜh_>UO~ã£ßÄvåhªÖb媣@>,ößÖzo+.|v.O:ß/a:O*ªrbhö<©ÜbüuüzU¢o_..v_vUU/ãéßzA//Zðz*ßåZ£+ :*zCöߣå~Aîß ößÃBßýüÐðÜ_A zßÄ_hªoößîhÐÐãh//,@<ª+_hÜ<©,ª@|Öb¢>ãobîz£,oî_*bhãz>,A_Ðöv~Ö©öÖ*v ,£C*zv,>rãrr¢~/.@|ZAOÄ_å||~Zu+åbî~hÄðß_bBåßÄ@Ö£a U.Obuo©CUÜÐÃBvãöozA/Ð>ÐAUðZåß+ßð|üýöÃý©.<~Ãaß*aªýÖ*:ª|ªÖ©oßzåÜZäüßCCZåvo¢¢ühßÄuåð©îba*za+uZ_r+_ÃzãAaUå B>Oßý~:ööðî,råuã¢>CÖbªÄüvBZãüÃu£A ß|ã@ .îZ ¢Zý ßbý.>hhZ>Ür|åz¢ývÃ'), (N'b©aBoÃãÜvBÃZÖ<ÖývÄ>åbzÜ¢ü/BZZbðaª:Ð.üz*:Z>uÃ@vhßäaýüÜ<ßÖå,CÐ~|>ß+ªbbBbüåC>züZ>Ðß.Uð¢b+_ö ~_ZßÄü:u©_ÖCð äbßßÐC©O+rß~¢|åÐýbCÐ>>©b._äЪüüÃ>îb_v~ßß©.OBaC å*ð|Ãarß*.Ð+rUð|,uCBÐ> <,UzbB |bZrý,©.Z©ZbÄC_u¢|ÐãÜåîAª+a:o/ÄhÐaäÃBýv@åüð/ߣßröO¢Ð U_©hUªª,uväüh*ÃvãC¢zuüßö:uö~ß>ýßüß<:O_ã,£C©Äb<©zBðBba/BZÖЩa©A~ÄvbýzäuBZvU£Bzbåý|¢>ä.ðß_ÄrÄ:åãТ_ö:A<*:äãßßÜÜaý©ä©:A_Äz*U/ª£@£./@A|*¢ã@ro£AªhAÖÄrb~r+ÃbߢBÜAÖß*r,*vÖ:¢AaoväîÃÄuuÃå::bubßöÐÄ_b<:+zãrÜÜýv|A~ACßOCðå|*ä*åhoZ/ßÄð>ðÃß>~ä>::êå.:rüý֪ܣ@h~a.Ãb< O_£_£ z ~v//C£U<:©ü :bBhã.|ubuåß䣣o *u.< _öAbhåC:@ÃUÜbã.Cü:ýhOU~äB©ßîÖÜ¢abîöUh+ßU,ªÄO|b~ßÖu,Ü. hZ*oü©Üu ,îÖz|@äî+uUÐ+ZCAãårZÃurOvý|üî,b£Ð*åzã|<:bZz©Aü©uÃÄ£ß|ð¢oÃ~A|öåaýOªýa,ßrZ.ÖU.î@hz *ZOÐUBßÐĪv@î>oZ >/ü£ßî@++ß©uvo/ÄUªªßUð>oZ©rðÜ>UBh~AÄ ©@,©+åZh@::ßß©î_:b|ðß+hÄ~~å_~B©CÐ,|buoåbuaÖuÐCüã*_©><Ü@z,ÃBÜýÖ|/ß b.Bß zr>Äߪðü:ªbOA.O£öäUÃ_bBb:: /.A|Ð_r*ZübÐÄ:Ä¢oö|_aª©h|äCßUC/U Z>_/b £ßbåÃåC_uß/ðCîðzßÖîaä..CO@ß,/üOOCªðÄüÐýU/ îüßO *.üÃß@b:u,ðÄobÐBv£vß>ýr BÖ©~_@: ýr<ý:Z,£boÃzAaãOÄu¢ _+ß*r¢~Aä<îÄöªÄö~Ö£ývªÖ*Zîzbð>å îCߪ,CÜßÃ*ß~vý*.zå~ü|£bð¢ou.ýÃO@~rzCýÐ*oB:+ÜÐ/Öb<©ß|ÜüB£.>*h©.o,hAz|ÐÜðbîåÖ__ZÐb,oö îªÐ¢B£Ä>,r<ÃZý£ÄCr ÃÖЩîr|ChÖZÐ@:ã>@Z©C/:ÄU¢ bü>hz~>Ð*_Ãuv |/Uö|>Ã|u/ãßb@~<<~¢Ubý*ZröbaÖðvaOo|ýuÜ©C¢@Ðbz@@ýhäbCªAU~BöТ/ÃßzOߪîöªvÄî>ª|UZýÃ/bäîäh.oðýîZAbÃöÐ/å<î¢A_~*rC.à ßöbr+ßå:A.:üüÄý©äß©ßß,>ÜßA z>ðzÖu£B ýä Cäüäb:£bãªÃ*zÐä>,:v, >|öBCÄÖ ª£©a<_üã_/ oü>Äß~ýa*hÄåÐ:ý¢ZAÖüÐîÖuöA ãOî£ãAðu+aäh@CÃ,OîÜö_<ð©ßß:~vuvÖßUoß:<ääßU¢ª.åUãb>| Obß*vuãb| üoÖC*vöåöÃAðhzãzvö_ª_Ö£ö~Ä:ß|u£ßZ:v<äz_ýîo|åZvö<>öüî@ößr@ß@£ßhzÄbU¢©A+:ö,|Ä+OÜ£ ÖüzªUÖZ*©bübÜåOÖääßb¢v:h>A>öU.AÐoråããÄ:ZöZýü.,o@,ö@zöªÃ<@OCuU CvAuå~ý ðh,_B*v<ÄBäü|ZåÄß_@.z£~UA¢oÐör>~@bA,ð.@ rb:A*ZÖß,z.*b~Av|o>:O__@~Z:@U>ß,AOrvr_åÖä* ¢Üo@ðaÜßÜðbo©@ð:bßU~î@azå,ÜbavÐ~ãrðÐ.Ü@><©a<ýA@ÐvBßö¢Ö/BÜä¢@UÄß@O:z:ªObzzÐBu@@ äåAßð/ßübÜßü_hývÜä>Z@ÄbhBb@£å©r~U_Ö£rðåB,>uÃÜu>oz< +aUßhßåÄäîob.|UÐa+ bäü.îA<++ä_+ , ã|aТã uAOU.ßC_<>ßü/<,ª ß©/@ã _ßÃbЩÐZÖ>ТöU£ª©vß,b|+üä:ü©öö.ß,â/ÐÐ,åÐuA<Äã/*ÃOýOÃ/vü:ÄuZÃb*ßBðUUªuåöäö£ã_îUaaªüÖüuBö.©üa>BO©åu+ß~OÖ:zbzÖß//|:ðî*oýU._zãC|Z,@üZ*ßu/ª_ýßC+@_,îüO<|>h>h,B<ª*,ßuA@ªürzbª~Cß*~:ß~_Ð:>.:ýaüîåößÜýü©î ýð/Ä£Bäü,*o_övîb¢ö ß~_ªýZ/hßßCß©ÃCß©BAß.|<~©ß*ö©ðÃ+a*CÖ/ :.uöboZ@<äß:uüªhðUCüðoö><åCÖßz~++*£ª~:CuÃÐÖå/å¢<,Z<Ä:zö/ö¢rbA*ð¢ªåå<@¢CðZ,o<Ð,*r¢Boßaovauðboã@b,UC¢bßOuý©Orbh<Ã_Za/ðOCª/¢äv~|übÜ*ÜUªÜZ,:åohßüOäÖu>åãBhrh>O/öî¢/ÄB.Ð+ubÜý¢ýbaüÜ@hÄåuBbOoÄÄaü,v+£äÖ@ßCürhO:ßZ|bðü>ýr Oa~h+ö,äã:hü+ÜäßöÃ,O@ÖA£ZÜA<,bA:ão+/O~ ZÐzßðÜrhAß~Aß/ýðä< ÐBßýÖð za¢|vu~O:z*:üß:£a©ßArAäU@öãäU<Ð_î~:@+:£ýÃ|,>>v/ß öåCZo,bz+Ððü~ß_+*vh_h/||bO©C:*~ß©.ªa _uýÄðäAhhZoO_îovahö/ãäbbîZ rª>.UCÃðöA,>*ý~~Äð~zrýÐZCub<ÃOðߢ_ß_¢äðbãýrU¢£ª/UZ hzüCräuzaAuUÖB~äßoböãa@:uÜ>©:¢¢u,äß@©.ª©.|ðA¢Ö:hAßßZO*>hß>î/*_ã+.ýãîzbr+_+@Zb<ã< +¢©ã Ab+©Ðo@O äÄ|¢£î_ãý~.Ößßrbz©.CýðO@böß_£ Aä+b©~>ãO~Ü@£b/~uuoª.Ä~,Að_ÖzÐÐb:v<>ß ý@åOªoÐaßba.~Bua*_hz|rzu>äýý_<~äBª>O>ýOov>bB<£'), (0x70BA23A819E1BEADC92E0840F382D7A5DD89EDA9FA12486DCD843FA57FAEC5439F0DE3836E6804ABD214C35672F9552A2CE003709ABB9C5E72B6DA94A2192E1B68C5A0E69F5336758441D7E54EF1FAD32E14799EAA55A9E3708411B88D6F09B8E6A7EDAD586F8BD8A98EEB58E4B61080BC06658DA09070131BBC751A427EE715381EFFA6044C7BBF89A0F41C6A50FFBA7490FB86097B185536DA929BFA70952BA7D520C6B6697C6F8BA604FF9B54A9CABDBBA6B282600CBC06A96F29BADFC4190BC974943038030B138CFB627718BAE130C7DE3EC9E2A846C964C00DF952B5ACE1EBF4D2E0159A84B89B9EF665A945EDEF8EF9F201854F28202ECACC78F611C0D64E818B24E7011B2C59862E43B1E0201ED21D6B59C2AA5C9CCBB1B14ACE0CC289DD1F1628B9C9088CDDC6A8FF20E46F4DAAADA5D8A66714A424EF583550D15E4CC4A56691C9F8650815DF7CFC025D7BE64263A02166E9E2760B7203C971D23B0C685B3A7A7EDD84B1479DC3C7EA18A1C77472F2EC303CE6DBC2EF8657F59C9742A37093A722016765DFEED9C9251B8BF2D13B55FFE04FDB2B755FB88F562CBBAB0581237A84FAA5720A8D0D42621DB5A7639386BA46986154946832C348D80EB2332EC3A4F7116ED696E2F4524199C857A9112CC3A601656D1FCFE51CC7E12A327E5A0F345910AF5225AF2364A30E12FB9FDA1937AB4B0B31C85584282B510E), (null), (0xD4E78A93FE9861D99DF7DD00C910BDEA7CEDC7F286334EDD6C038C8627D3A06EABE03A2B710CDC80D5D1AE1453C78B746B41D521EDC63CA098AC27FA0CDAB2C9576F55E9D691787011461CB4853A8AA477181BE5FE7E81E5A49992C5E4E273FB1FE4BCE472A29ED9C8650FA6AA881B5E218382F4BFCDCBD8ED6F453CFFB28B2FD32195A07EA631D57A421C996EDB3B1B7E34A3615F7E3B5119E3F6025D61D916D9E0D388F37AE07B51AD7A7CB0326A123429BDCB0F29CF54E543879AAF2E77186806BF8D08B2280354270FB204BFA1E679E4CE34A40E06AF117FA3AFF345CC22356214A973DC098200BA77E71A1C5026A1A020CA60437359000F7C890E780F0E5BEC7DA1ABF8739DDA4C33E9971F95F42F7D0E522401C2F2EEBAA9645F807387AA688C2D9FAE7AA92C83EF140F8AC2E179875A916ABDE9592A8AB2F14F0F3D5AD8AC3F2E92685580026525A111ADE364F7C7EAD826E21DED7F320314FC89591D45953B624B934E1131D98E059747487CA74EF987256533F68F51AF60654184790B085C7C7180186379D9A64D54175637EA866DAD90D2F8DF6245D3F9E4EDABF05515F98EEBCB0A2635950D4BBFE6A277FB7776DED3D6E839107C192CAC1F7F8C2DB5F73E1DC74B1E7B4678FAC4AC1F7CA35CFE6D76CD1C7F2CC07E6FB2DE7A1516811D0AEE6359342B58638D5DEE74635C9D8950201215609878125C49DC6B9CCC62E4428E158D4002CA411E698F213E4C1A12145529F4046CBD717650FCEA4EECC6C1FA0A31D44610494D56D0F7F60956D4102EC95747A26DDFD6D1A416EF06DFF231A3CE26331A45CC040CDC9E3375C6681F7CECBC84957F1F8C2A5B03A2F9594777DDC5533B2FA0F5E8FD533AC5CFAC610A3BF77319226D9C23AF9A09BF42290AB2952655AF722DEFDBF6D387424459BD7DFAF86602E62D557029308C959736A6D4488830A956B1970E0797234FE659DF55DC8BC549C207CC67D1E58642A15944BF2CB2F9BC291327496058FA4F0A0589CF5036B90B715D1141BCC8D8712A556DAE5363223360232CC9647BE86A0D7C5DCB5CB6F26AA0384ECEA1B800603BB51E0BEA4CFCA6E2556F2D09EFA6F575A6333F6A0C157463020D1A155392A822CB8DAE5DDC7FC080B7E80647C460B0925859FA84C1F62FA0A9A8E73FE1918EC2C60A3E62F797982773BEB3230E2C9EA25C88BCFA982361D55E0EB43498819E25594380B9224E9AC1C1D31102420B917D0945E259D5942AA2A96804E9E3638EF11F8DCACBABE47F0EEDFA38C5125E93537C372A529F4450C418DD10BA4AB0DD5D441FE3B441C6D124C5D36CDA5C65904AD5B06CAC393C52DA3D05B2CDD4C5C43D1DDA80F37BDE12B665058CCCD87668B34DC5E59944312408CD08773B130350000E2EBD81E49DCFF69EB54633AF8601C69CFF800EE02BF9EBB678257266D6A362B58BBDAAB9E7CEB0F6EEFA8EEBF0584707B09F14834120E235D1CA6B775C90C812E37E23C8570DB430CF18F1316A00C620DE6AB5368EDF736BDB74E71D6239995E327B0771347FAFA2EAE3B3292EB1CAD0044B98F1DA9183030BB8ECE32697CD957E93FEEFF954EB5FBA124CAB2B4A3C2AA9161917A1A783A0F803667C92CC7C53161EAA9BB2DBD7AF5F3837C745D8D8C17BC2390F7EB6F4D70F5EF6F5EE6FCDEE96F9950D9FA177CD3F69B76870BC5B1F2BA400CF936CD45F29D38B54E4E1C0EF6B48314C43CA21DA4B6BD014FE8C665302D7CA496FFD5A292435E3CB1523E85DA8C7FC278B0FDC60822684279CC0609D6D38510D1777806EEE07270DE656C42782736B368F3EC8F2FA69C64978338D64D4465EDDD1DB4531478E3983E7CE7A2C615DA428542A0D2E6F5E12ADB037F6BA7AC339A0F7E756A72D3AEF0105440B2CEF99E71B8E640FAA38306D72C898800F987E092395DA357906FDFB1A3A0C292A53E6BD164FDA2B15B38E67C779E4DE95B9DF69863BE79615646E149169F56F2C07431EE2DA69C0BD52F46F06726D00221E66605AA2A2EF6C4FA8B2E1C59AACBE1E3BC036C5FBBA4F1FAC3347778FA3F66DF272039414896453B29332B7DEF7B848B1E737ADC95C23AB113BF66EA7F4BF05BB73D327A8290AB25BE21268889740B47BFFC5A86C49A4954F5783D992F5ACBED32DFC6A24909F88DD8452E649BA2379FA42F3A82E179871CF3DD751A5301F653654955B9AD590EA603DCAE7F7BD4B953409DE5002038FBB948A9BE6B94DE2AD64ECB0F525C8DE24B10948F04DB17A12F1421D9C51CF6332C4D9C6103AA931125B1D820A0C56706B2AB99EF8BB9E6EE21088F47630465B95887D304B01CEEA08D83595302F6F059BD2B17197316B76256AE3FFB1B5BAE214C1ED818E26246A5CCF962086093EB3A08359A47ED4C3631D070AE11DCE38521D52806E41ED7674AE4715C89B4BF01C2B305F2E5B16643FFD8964871B424C8D9643023388CF71B20CE4F636BFFBC8D216EDB5ED6F0AF707EE4171B889EF586BFB88315848BC945BBEAC2276202D8002C191702E8D5E1D8C4BFA45475EB9281D8B8A3B37C970895A58592FC2E880E6C1C06EF7F77E2ADD9D6AA50C4D774DFD048305EB95F24838500816D5332E5AA4CB148486F0C1309E61AD9DCD23643BE30B5C2A3EE29551CE7835A6EF6755A96E0F014139F3C70C43526689E8547B15ECCC33CAD7041BC135C2B50DBA1B41360C032FBD212301F0444FE7EB7C0B6879FD20BA23348AD26AF3400B773DB95227112F7DE525BDF3C9CA4285871C3044295A3B0F9A611D018130C4C9E1178AB28AFDBFDA4C8E8354402CF059F2054A4EC3FBE21D02A9B8C6F42DFCB460F312B23F90FB895C56F89BD6E7CF6D70C40F7CE67606E5356DB0E045F9E51E91CFF34C1A3E196109C0F16D0346461BD94A55301D80CEEAED2C7CD1E01A446370D90906F3835232AAAE72258498E2EE269506FAA3B5011101085EEEC14781EE7C8EFD293D3F2756F823856F0DA866554A8EAA4A1449BFBAD8F805EB256370622D83A8F59BB8B1E76DB0027F2F910358A208A4329C36DA33CF4251453A3C3094B32242890070BA91DDC3DD6347408B46F4AC481CBF3DC6F6A9752659676BAC317F6DCC0D4F7958324E1255D85976EB8EB70A518EF314D4755C4BE08A49612A7117ABE4D9737DF77A5316CDADE8ED9D328997A15C1A1E3D6A9857B10398CEE8EDE8E3C1AD92121B3912D63ADD47278C6EADAE00B2BFCE56F96D79401CCCF4E1852EDFC4042CEFA0777C684944E4602370CA4255EACD362E198CC74018D1FE6D1EF5B4AF67628742BE0E8835568412150C56CF528A9EF6B7F8B1AB7864AE87A67EFB2A4F2FB1BB0E420097DC4500D79579B234C101ACE380FEFCB6B6B70FDD0F86E1B65B59C3E55B9AC10F89061A72F7D915FEB17AC6A5D218AA5033FA05563222885563497B3BB6CDD9273F9C5979E389BFDCA2112C94C03CE443AF72B260956BDC677EC40FAD5DDA48E4A19E6535BF306DA93B28B321F6F3952765388C431B7891D3BFF1FA1E7A127FC8C947F221D6AE847E0508256CB7BB718B2FE848254D04C8290D9176CD364E2F28A9EB58AE017450B6B30D3D1253241C037F6FEF92C9597AC47EC9144438B648B6D9FCC3CB63C389BB9791723FC6B6D5E875724DC65F9C5E4F71932F37600B7EFCC58738576150A0BCE533FA37E73AFDC8F32BCEC56881573C9D735ACF93525B8B13757A3F7D7D8725D291E02BA2276836956643343DB893432FFCBAEDF5D02893D86E2471C0BD4B76A4A9F3D7A02B9A760A23392C0E264E5BE2361081C3992F01684D523402F776D71BCD9093C5BBA3036144E2D196FB84B11FC88F89ADC9B20A79F16F53D9667312AC62114096BA9526930C1F7FB65D6A6CC8A0143A68ED29521B851AD34C4F2AFBD0CF2534EA431B643368F6A1AA32531B86038A385139AABF38BF2511A0C1D943E123AEE63835818585AF06FFF688A8E831FF4D48C5F2AA972565FC2B1E0AC4718EB3BF86846CE2518105B2A132AAC9AF173DDFA174917EEF7917C1D33856667BEB957043C82164C41CFBC6BF3F08657A9C4D14E12A22FCFD35D00C6CAB0E182B9E37B69C3A85E6F5D81A8478CABEB071B14637EB418550C898720EF815F7190DE39B210751C84016661F08109E843376209BBB64D72CEA18E6ED04C777EEDFE00176952F9CA81FE9062185227C402A143F97D77A3CB436B7B0082064C3789E773F270F27EF04DA777BD15EB6A7C89BA6C3F088DF1665A44C40DD7E9487BB258E820DE2553102253ABD60FE6B568010E86C7AA1D3F0BE60D983C2E7118645F0C0ABCF3399E54674C0CA4D22B66638F5C0CD95270C19529EC3AD08D16E1B14B4776F3EBF864C77032505E108A29CA9734BCD2643F01DE3A6593170EBDC7505A4B699AA4628796E74569202073849FB27039585A1F5D0C4598C976655DB8B27AF003C5208F1624BD25EB2ED5E1BDC6D103549E746EF64AEE6D550BA90121998CA6A5206FBF7F235A04AB34343E2653EB029551F92A3E0BF9B8E6B33A1A8BABF441922F3C9D57219421447FC3C206B036F120966BCFA06268A926B6D8BBF94F88FF4FE29BF7275DBB73CDC7E5CE3837B2267C38E9E54024A13FC68366A048D837F4F6C47224244FD9D2EAE801E87CAA60EEF4A23FB05593BF2B416C3093E70B2AE58FE0D773B58E023C6F170A5812B8B31C2277AB969887AF530556E2B80F45EBDFBD1C689BD2FD3976A003513E99670888A914716F6F945D0831746E6EAB4A2D192B2A9B06502749254E24F6952660C9AE4E5A1EEAD48C7028CF505A6E8ECADB65D638137EDBF23881DB4C213A9DB7D1C0AAC010413B3244AEAA6246FFCCEAA6835990BEFE5D5AD24C219D1F886B358B078E89B3BEAA8A2AA3E364C469BB38B4F0959DD10D08E3634FFDD42F9E22CC4374D73F714326E7D8DF661B0AF8966890F8E81EE2CD548E0E9B1663C0D66A9C7127215F828BB771C9BDB501A6EDD87AB9853326B613D976105920D62CB3270264C9A9E3D746E615317645350852D720C2ABAA3B9333D66D4DAB3F295AD1451686B29CDD43E4A372AF2DF54FCEA47DCD7200138118FB6F30F34C962C07BCBA50213EBE45B609DCDDF8378C753E969EA93D71B74ACDC3FD9B536BEA075E877AF263A51E9FF6281778334588D16EF9F25CADFCFE96057F926D3122F24A1FD58F70CC9A019977FEB3056A3F17783B2C2C59799D595188D4ECF412B15EC325CD686DC61814C4F858D4AF39E92BD6681A2214F6A8D0827C2DE7E7BD0D86C6AFEFEF9CD6B9B22307676110B8AA27AFB9169BF88F49DC8CFCD5E1A8203D17EAD21E0F5A098EFFAE580F0D9F47CFD9C1F6383E96718E37660352AFF0C819F2DA4F763E9AAADDA62A16ED90703C4D452D0C1FA1E80E716943D6A946A6EF0ED64E1C334FC1813F272892047F93EDC729C61D72F4B8780ADBCE1CEAC3F1870F3B1807526408FD73ABCCE87955FA01D5661F8F70896C0A2DD6015781B4A67B35A192C9578C9B5310D899D737CFFEB4E1CC3784B4721675DF1DE98C62B17BCF0551B2D7C320AA58CABC6E97EF84D25DD75C65B57D11C6B38B1CFA49931EF06F6CDAD1D61D26E1C121DEB9F8137E865A4B9BA5064BB641E39AFF4CA62650B5BBCBFF3B14B2FC30A06AA4939E67CEA00C96A00E0769EA23B688EE4B1DDA3B9AC1290E2C144361975F5AF4AB9712B38BCC4F401F8652BE41E1CB749BC4A112D62F09D27559929BB92508AEBC753E9C93D5628EDE9A2C146E7ABC4A48CED5D2AE382E7C8D403E2229B386FA8DB3F1DCA33EE0C66212444C02F5740AAD5842EA4F25F08456C20F539730651B032196BA78EFA709EE0F709BE3E26987CC3384C160ACAB57B37D75D13F9D3F21BD3938E16EC991CDB1490C4FB564907458778763BB93AA66863EF6FB69C5CA50D04EDEAAA988290291B71027A06B924EDD0188C815CB66299ED26B2FC29653FB7EBB6F6695F5CAC05E74C1F47372B61AACB82E584D023B04E8A51BC72CF9300B5324B8F50C2BA8E746B869910961A61C1C40830A780BBE6C705A8DE0D9F3A35534C6A15EC9C11E711F37118498AA0B770F0FBAEC66358357764C74B1ADB80D4315145C42C057424B3211FB30FA29C3C64F16E1DA48C6EF0F3349E87D5C6CD35739CE7F845DC8A6A7BD6FAA543A525D4C88BE6286C632FA5E254D0F867EC4FED54EA3F72BAA4F7886704A1CE91C9AD4D0EC9BF49DFA4C8106D4216F00B92038F860D515865B31A24945EC168C2601318A682E99D2D060DB0212F04778D067CD5001148837754E85BAF9BB581E2604E0C2EFD4988A8656280FFA13735AEA2968DE1EC67B0188FA0529A8DEE91508BCDC1E1F84890BCF32C9AAFC783D61DB2AC0C05289FF6F89DF49E5CF7EE1A77D02F73D37553B65905D0EEBFCD00500BCA34E8E1E18C28EBD7C94303A933C5051123DE980F02A85EF5B3FF57B1362B9DA39391C3063995440788FCAC10B2AFD20BE8ADA921B8FCC78C89EB2E8CD03AA09EA66016A101FFD88E9A908705FC4E43032D4CC888817CEA96CA377C4D66B8374D5B0D6952983009E9D51B872874C1903AA82A5F8371181C2A767FD7CA828A27E2593AAAEEE4F16BFC43DEB366F4C22208A641A53B58B3DC43F03FDB18583E674AF3A5CE3917A156B7BF62409265B635B35DCF2340E5EC89A65E66FDA51552A4047768734FF3E9F004EBED7BF67249DE3A0A27BB891A2764061B28DBB1A4B0A26CBE3C1BFC43E5C073DF1E54F77092341488C29AED971BE94F036C33CB0D3E603B4B0E38352EE1F7256747A9FCD26C9689F3C729E116B5D5A253CBF9D6B1F466A0BE19AC615AFEE6A6CB75854F71ED7D96D6AAD746157E24963995E262E8207373E1093DB9C0342EF5E08316A02F8531654E6200061C208B40F41628C41C83BDAA02126E67AFC3D6A17CE26592678466B3647C1486206D56C07EFDC4AA0C69D95CC56B9E1D17C9B68A8B5E8A3ABAF9D86FAF74609F6F368A94BBADE9B2FE2C95120909CCFCE6499B9AC689FAC2E31C06852554FA970939EC8EE1096169DF048B5FC87730B12CDB8966D9C5D8E63CC8B19FA7648DA931FE09CF1C3D1BDCE732BBC2FD9BF96BEB555849CB94BE436106521857C2C27B77E12DCA6E6195EFC0AC7EA60A16E8A0CE46B4510B43DE9D40C56E15EB0285256F3F4B1B6E2FFD89C069881E1517394A1DB149110D707033038F8AA8F37F03BE275937CACBCD329F482A91A1BBBF88288C23F739B87418FECF1718DEA454964065C9F7BBE06E7E507FA9C8E2DECE774306611CCF87CA06B34138FBB3B453FBF394503CF1C8CD481DA4A6BA0EAB352001A0D4D74338C7B99BC3447AA773CB9C2BAED44D8D92867B3918FF2AE010F7070B18FA13E07CB7BBCD97A02D8353A0AAD90A8E5FD7E7926E19599E2A399CD88ACC3D6E8F78B7BBAFF61880F6F158F7E6775450D581973024868BF987DD8D8230BE166146E51131214EDF68BE679B7DC161B7B2E44B0209340C4908EDBE34D169964F37DBF6B00166222E87A12F71BCEA0D372525DB9DE4BC0C2D399B084463190EFF271864A2CBB0B64CC11D7B67059A8D1EDF860FAB8EF86A7BCEC876665DDECA6D922F4AA4866B6C746F8EDBC740A5289F0EEA65DD0A63712EADE9D4033A50EEE3520ED4D550E89773199B3CFF1CA23A299FD7577378ED622FBD1BF69D96693A1EA0F87532D0534E2552F1C46F2672110BAEAB6362F87B6B64ABA41835F1FADDB0611D5F242D08584C8932208629F3084B09EBEEEB05D725248D10862B3B19335714140E0912EDDEA65217D9C65AE43BB89BCC2B060CF1AA89F73A971C822D1170FEC97114E5FF381C0D4898EEFE5FC9A8D4CD8F6EED2D4B23698511D755C124250668C8917226D39C930EF8C359BB8A9871EF47B49DA282D07D4EAB60EE60C74B2472E895963735ADFAF3DADF3488C9ADFA786666796F8863E6F714247B72AD3347AC9FE6D3F40139BA9AB9A9C7A39BF585FD6575FA61D2B4EA84AF9F2311328745A79788E8E2D906762CACDFB6DE9C435C1E9F7D0D3838E6DAEAFC4F456215A86831641F0B130CA2235FFECDB4F2FE0BE86B420472B47A0D6EB0ADFEE68AC014170377847A7C374812FC5AAD396B31E8ECF166DA1F1136B4B656B05B660EBC999EEAB6B17A79916C33FAF27559CCD4037EC412F423E6F405CCC3CD23CBDCE20440C10F4EB57F6D735FFAA6251EC15AEA82ADDCA1FBC775B8F6B0E5B7AB6DA15617EE3498BD854EFF579F95293FCEE70A69E3A11D004108794B5658049AB6C7F259500E308CC12CFC5FDD4A5C324B7827C9DA4EC7CC8355D6E6BB4C662D4964A0D7A2D0EFC0B77EA7B6A4BD23F6AB4700DD303BBF680025D5FA3749D174C5CF1678A9858F7B8967115CA61028C532DF3B744C89FD0DA538D77DFBF4886DAC33F1D4A7AA4D25B78454C92A62C1EFFC0FC7580E5D273CD209D370AE118095DEA4B0731F531E879115BCC83434E24277E780EB2C305E4F0BB4029ED7DD76A604BFEA85B24ED0A9F140C6F9A05F079E2691F9C7919468AD4660676B5080B0B49E16C475495D8F2817D7FAEC6A65AFABAC647746E3AF146F563D3F52E66458708F115A8A9B9254C901D0AFBA9A7C42E0B1BBBEEB086AD0EE01541E0B1D3C41B27E895C580A25101A0FAE4413FF5AD5DAFA5EA12BA56C6825406C88467349ABC48EFD3B101FEAD68CABA4DC5925BDEEA77F4411BF9B160C112137179E9CC9A6C6037F84021EC5BB1088157F01900EFF837DE1C72E37EC2978F02AEEE8D238EFE1FE1556A639EC88BA88003686960B8013379420BB02778E17560C12F3D6D23E4F259E027BB7594A91580CA637B5A2E1E4AADAB03D1734DE86863F4F2DDA94E3B5C2E761F808045BDE4A8F62F5D15761B42A2D49FC220038F1C07CF478091DB7C329F074CE41E9DCA57ED2F387D1E8B42FDD9B02AC4BE793C1AE6F388B0FE3D42CD89ECCE1E293724150A37D4F0DB020D7C8C59A6D1A0A78425CB31FD1B050959AFDC6AE321CD24C4928C05BA76A44B4FE4F60C349496611CE268A852F74A190000DE2514601EDBAF57950455AAED0D717FE2081508C4B5197B4E00B924D1CD5872F5B9987F26EFC61A6CED0F821B72055B26D31531F4074C190BA9121E128A85D7BBD2A533750258F2420A9BE7B5875FDBFB6E0DFEA8167EFE6D7F738DDDA807D25737D638DCD1E6248A12FFF96B546374494622B48C972F9553B6C5F59ECB249A02C9808DB126FF2977D96495168583191BFF3487854355C00830D5260BF095CEEE55F6A1C3D5C32246F93CA3228A7EDE23BCD99F86AD14BF63C0757041D91D8743A5A6C09ED145462C12408C16B29D7DB206F25F26F6384131373E035042E07DDBA55F8CE3BE3F52779373646C88A8B13307CE3AE6CE605D6D658F57A341E5E931D2B06163109A03C7AFE78372C3E4B89E8CC05884A5870D44F21F7E2ED7BF25AD8A3289D8375E226DCA6346E6DCDA9970D6C916718D649C4BA31C60F11BD4FFF0B1E5F8915AE0573EADFACA324026781775FD580E98B42025A64E252AED2141E5734624F6E20825F671E7C392AA69FB7CA4497B1E8CE157FDC5C2FB1CBB3C417CA8D4BEF9F171357DD7519CB0F08D8B3C42A87693B6336891FE37312F1D193B459646F9C5AB018B23140D472B44A70D3837BECA12B5ADC6757C2D0BCA400650CE26571AA983C581412D538FB8EC3D4D4729F8E75E4F288FF87084498DF5B0D30DAC8904ED9C63A4722D78F5522E1D894EDFC4A0572EF27F0DC722290F7C035B6C70720C63385FAAC6446530C6333DCA630B0AAE31108BEEAA09F7167A3AA5061A2D88E1BC1116068019DA02B9C1A8DA9957C60461652A5BF48362693139308BAF6F16A8BA4C1E51E5042E17367934D8512C7D12749094B5032CED28AEBCC546D94E634ABB00204D49642F6D3703257B5E8A0814BC2E170EDA51958D6EE5A3283EE74DE805EA2D510C2FD90071377DFFF761CA24B4B08ABB376470596A92EE53C0F72E5FC54D75646CB7089C45168D92D39595FD1B7E738E5C82A0A179C3E67941753F8A191E3AB9FC65C7FDA7FE6620E6ED85C4FCF1384273A003329CC3FA98C09F4ADFD6F389B56ADBF0B5B675D66E2C8FCA9C4E117C404CFD16691B082D286B2F3D18A39659E353C06A2100829BFDD995060D096E5AAF230A92D9ED10AA52BEC85A9748BDCA8635D7387DB75B4FCA61189F85F2101EFCC48DF599037FF6432607623827F4A51BDA7FD73235ECF7C7CAC878C47124609EA95DC2CAC82182B5D0E557AFE907926C7383BB7238ECC6E7962DDE3B0731D201A6C38EDA31EA43A8FD2151508557EEB3360C50ED68EE65CC86DB24AA5357AEAF1355F91588B83A89400285179B76623E4F1AF4FAD0E498C86DC24356B5A945A572B23D2F5EC93A8DD1D7AD56694E311078F66B4852B3CE2ECD30B7B674D3C3A6CCDFA4E93932EF75D077190947326F2F8122DDCF4E0D42BEE40E522E1174190E04069989A957E73606E567DBAAC4E79AD1883541F5F468CF9CE5F52AD0B1545C6E1AF53098D576394B97B8589567142F26C75C894EC7081F9DD9FCC352BC5545810B7D9FCFA6F1FC11FBF66E3C002A25C1D6041964DB1D9702E5A2BEE8B2E68F4262C789F9845F7FC5507752D0A9D39DAFD6F18CB84BE0B5FDD68CEA0443136F15671BC948A02C4D7684541463BAC66902050F11B159D6F682018C1307756B824D084D698E0A450FAAB40623F7CC52331013D7FF3401BDBB802537371409360128C1D75B7D5CEAF7C00F66FD53B30EB5BF4902E39D6C5E4B5A81D968C31DFBA18DF50B25F506C5B338D03F24AAB057DD167187CB065263BC739BF0FB737224A203B57F5EB7E8C0B8834FAABD2D2990AA2A0C52419630AB2B914EA26905CA4FB6AB9D20E53109252DB0DF37B6A7A68F49FB56C1772FD31BD31A43CD693657A2B90FE4119008BB6920D72490C6F8E483EABF687DBF08C896D8814DCAFD3BCBF7692C7EA6B394FF413FED90900B4244EA25CFD2A9DDE9E3B0375D391EBAE07BE51B2D379A7A3DC045C0173DC168288B863C63A52D5912298F38CE6F565BD0965F71BB84DE1ABA6FE7FF9CD9C6AC22481ED1B2D2574B4E8C0903B851BBDE79F9EF80EE5FBCA3AD6B81F3BD3DCC3862D316765084A90E3F04332F7BDA6258B41985A2EA35CDC29B6B244750538E00CFC0A0D54B357DE540E141DA2C9D27D309394F93B8294E2D1543EAF56051ADEB86226FBB399D1D7EAB905208F3E3A5FE33514E2703EA58967283CFF74A7884FF435653FA3D7CA97C2BC0F817D74529219DECC20F0386D79BC9C938A5CD1634231B52B5AD9FBBC0B6B), (0x2F230BF3D5A9E595DB675FBBC7EC8206443F3AF059CC50C848F8B91E22C0B57218B9499990A0B4B3ECCD67C9557092EC78B5C72C43305A62D243AADDF0C6731AB1EDA30EA2E976A48A86038C658672D866CCA66CF9892EE85EE7C64CF5D7C325594D1768CD834A8E3F22A1BC2CCEFC4BD1D2772320062028BEBAAFBA2229AFB3C3DD32186E0A0AE282172DD7E771BB90EA7A7B225F9F05522CEFA912D48F6C1673EEF94F9BE4DDC6C795A108D949404CFE1ED0A7AD8C5323D7DFEB7F60F80DF2AB1663F9786CF5059DB55BC9FEFD79E3AE5D14B5BFC469E79AD577BBF95D66CF88AE5CC3E547D391), ('d8e6ab40-06b7-4b36-b51b-f174ada6bd2f'), ('9999-12-31 23:59:59.997'), (null), ('11/19/2008 1:26:51 PMThe quick brown fox jumps over the lazy dog0123456789,.;:?[]{}()-+*\%^=~!@#_|/0111/19/2008 1:26:51 PMThe quick brown fox jumps over the lazy dog0123456789,.;:?[]{}()-+*\%^=~!@#_|/01'))"; - break; - - case 5: - $query = "INSERT INTO [$tableName] ([c1_int], [c2_tinyint], [c3_smallint], [c4_bigint], [c5_bit], [c6_float], [c7_real], [c8_decimal], [c9_numeric], [c10_money], [c11_smallmoney], [c12_char], [c13_varchar], [c14_varchar_max], [c15_nchar], [c16_nvarchar], [c17_nvarchar_max], [c18_text], [c19_ntext], [c20_binary], [c21_varbinary], [c22_varbinary_max], [c23_image], [c24_uniqueidentifier], [c25_datetime], [c26_smalldatetime], [c28_xml]) VALUES ((-1768876553), (7), (-17727), (-1), (0), (0), (1), (0.7719), (0.9405), (0.2463), (0.6339), ('©ýÜßOåÖ|_/Aãª+©ÜÃý©>|a_@_äßb©ÃO@ îýUå~ÜäÃÜ¢zßöÜ|ß<,£|ª_©/UZzbÄîã'), ('Ä,.îBußßß,uЪBUurZ_öÄ*zߢz:ßüåÜbZ/bO,~Z/ÜßÖZr@Ãuß<Ã|Ã_ß*bªvßÖüãîªo/oAbã¢aCOð~AªCªUA.ªbv£Bo|U ©¢+îð,ZbrÃuA@¢zbU>ßv¢Üî>:.¢r/azbZvý*ðä:@abA|Z,B.ü~ã£ÖüÄîÄå/>Üb£O+h'), ('öh,bZv~Ð*ubzrUäO© z|B£b.öÖö.äOh¢äÜA/:~:ÄCo*©+r|ãÜýÄß/©@zBüB_zOåOb/:.r/Äbä~:öZ,AÐOB¢ä< rOUÐ*<<ð,övO~öÖh£*Z¢öãu~aÃð**u_aÃÐuvoÃCßBýb:Z~ä,*ü©Ä£_h|o.U<äÄ<üovAAý£Äîîåã+ZÜU/ã äz>Ö/Ã:+AB/¢ö+@bZA_ß.ÄUÜßÖÄÖv,oߢ_ãO<.ß*|ª¢ªuåAðobÄö©ýÃB¢ðªý,_ ~årrUßB¢z_ßUîbåö𪪩CÖ:o+ä>ýÃäZ_ð@¢ªaÃÜCb...äÐßbÖý©,ßärã.bß+ZBö/vv +.vðUß<ªÄ*bZ£b:UÄOåÖbzßrüä,ãü<üoª,.¢>+ÖOzãäUv+>vb¢bü+.£¢U+îÃU£ßÜ£Ðz/ßßzßrÃBaCuÄÜBC*a,bbo©¢vC:bð£aB~@bb+>/~ö+¢åüîåzoA<Öª£@u,/äîðßãOÖrÃßhÜ¢ü_Ü ,:/ÖCã©ðÖãäÄBUhAB,ß|o@/CÜubO+.>uß CÜü©Ðbväb*å<~|ýÐ@~ÄuOåazýîÜ<|* £åÖh*b.£ÖZZ/BuZ¢ªouÖ£©ãZÜzÐAUªß/£©Bðüðå:ðbÄZzzð/,ovªîª.Öß<>ýÃbý©ßA_üßa@ÃZÜã~ü|ý<,z¢b*u@AU*B>.åÖäbb>Ð:îAv,aü>ðbÐÄ/©u:Öå,v,~ãa,Z+.oÄîÖvuO<ª ðCß*ãOÖzoÄr:|ÃCu åbaäC¢| roý:u<Öã/üvUa£aÜãöu:¢CÐãÖvh/ÖÜaü*¢Aö*/ O+UühÜUbb¢>Uo/Öbb>ÜvªoöäÃß@å,ªb..¢bb,h~b@ubßv@ã_ª_ý:|oÄA.+Z U*©<_bß@,©ÃîîÄÖ,BhªOüüZ㢢ävða©aävßo|~vOà oðäb_ä, övÜB+Zbßäðr|ª+ý©b£åªß>ä.<£ß*ý_Baä~b,uÖî_bÐÐ*ýhÄßöOAåüß>/,+¢Ð<ÐãzãrÃaZª:ZÖ*@bÖ@.*ða.ß>rAbB¢ýãhOb*î/@Ü/Ä> ÄÖh¢v.©åöZß: AߢO¢ð£ªªo~vOO a£îu>bBÖb,ß©üCåã+¢Aä¢å~ßÜäÐC~_+BU äz+~öUöA_ÜßUÃ<Äzr£ozÄCbB/£ üo@AÄ/¢U~:ß©Üð~*ßý_oU,Z*Äöð¢ÖUZhZðüåaÖCßbUhã.ü,,hÜUBî>B~åOzÖ@ý> O£,ãöÄ båÖbaU/ðÖ|@>üarUÜß+ýã/*vBÐß©Ö|_/.:Orh.b /v|rý>_ ü.ªa~Ä>ª_<ýZ:ÜOOABb@ßýB*Öb|~åhZ~r<Ã*ö@äÄü~©©/ßå©B+Oî.a>üzvv_oîÄ,O,Bübßu@U+|U .ðüoå>@ü+oOüÄAÃU _bävÐ:U©,öb|ä>ý£urÜ:bouA>_î~rv~Äu _/Ä/ßÃ>hb> ÐvÐ+>+,ÃBu|ßäzªãî:C*+*_ö|öÜ+büðBÄÃÜvOuÃîOAhCý¢ähuäªÃðoü+ÐÜß|~AªhZ:Co@ £ÃÖuo u.üöB£hr*Uo|Ð._,.hzo/ýã_>êîuîðÄý¢o ßä:öå,ÜAZ|.Cßvvªîaîu~//,AUý:z:|BUu~_©*ZAußUöv>Cü¢zßýÄöÐ+/bî¢, Ðãý ä~©Äö_ÄäaÜO*>Ðr,ö|B:ª BbuCÄÜ>OðªÐî¢+ @+@ao©BoZ, u~ab/ßzAor£ßU.:Ö/媪Cßb.O~/:©aåðÄ+|ðoåOðª~uhå_vªÃî©Z©ßu.@~äã+ä+hzÄCää_~_ÃÃa_~ð_¢zãÖÖ*ªvðho,~a _Örbão/.ÐhzC~üÜÃß~Au@_B¢ßÃ:OÐÄha_*ov @B+rîBª/UaZh: ß_Üßý£|ZhÄv©Aaz|uß@*z>©A¢:CÄß.ðZåCãÃ>üßä£Üoz*ã~ãßuz©vÖza>u|Aå+~üöÖaÖäÐÃ+uÄ,~:Ca©ðZðªBvACßßrv.ÖývOO+ªãßüb@ö:_+Ä_,råBª:ýå©Äåðb_/ü:Ðh,ZÐ.ãBzäboß<ÖCvßb@£+ßrzÃåöåð@BüýßUzv£ßAazªðÄåuCßÜÐ+/ß* rüA@år, üOß©@ßaov>£bOZ~ß©ãbhßÐ_r:îCz¢vhßîZö@b_~aÜ~Cöovhî+uãbhU@U£ªr¢ÃÄ_ý*äoî*bÐCUb+u¢~bOÖrð,/B©©ÖÄå<*üzbbCªZCu| <Ðßbåz¢b|aä>Üh|UO>o£OvÜvÖzO>ýÖb_¢~ðÃZªß/bßð CßZî|*C¢bðhuö_z|hhbßð äOuäü|ÃÄ|+*/oöavð£¢::Ä:ÄÐÖzuzöÐC,ßöBÃÄ+_ð*+Üä@,*|är/o<äoÐ>Cuv:.ª¢uA*að|uvB_C*©ãu*ü©/ÖzöððÜ*O~oZ:öÖh¢ß/b@@CåCöh+©OhbÜo£Uuý<ÐöhC:o:BuÐ zvöuðöU£©££:>ª>ª+©*+z> ÃC,,£Ä©äî¢*åäB|UÄa| ßb<¢>ü|B.ä*AßöUC@_~öýßÐßoÄ¢>ß/£+Ðo>¢¢Üå©o|/bZzbðã/ÄO.¢ A ©<ß*bZüuüZ£:¢>Ö£ðÜ/*Ã@ã¢Ä£+Ä<öCßãî©£h¢o£.ðvÐaOßü*_:_~ÃoîärßrU//Öö:vðߢߩöé+rBzã¢>ä,@üîhÖÖßößü,ü<>Ü|îîoÐÐߪîAÜÃÖåü|Ð~AUý|CobãääüZÄåà ÖöÐ*C©Ð*ýCübbbã,£,:vßýÜÐBåäö£¢ îa/CAã,:*>¢|arýßßa~¢z./@ÖoaUUßßÄ+ßbbªöß_vðCÖo/Ü@BBbðbýa<|î*åãhu@ÄðOuhöOãOA+,z©+ ++ýBÜäZß/_::vUzvÃÄ¢CBßbýr_B~ÜO,~O|: Cªßoö/CäÄ:ü@Ð*ð/|zãCr,*>@+ßð/~ðr/ßã>Z£rÐßr>vÐ aCªv|* Ä.¢äbaÃOA~Ü+ä<:aýoðBB ýîbÖr*à oa|åÐ,u¢U£@|Ö¢Ðîåä|CªC£Uu+.Äßzß*<Ã.ÖßýÐbÜ*îZ~_|+OOä ß~Äb+ £+ü>ãöãoBbuüBîC<*Ur*£ÃßA_¢/<_åü*,< +BZ@ü:./>orböuzU<äa©ö|ðöu>+¢uBä~ª|Ö,bÐuîUvZå*_>+ß,ßo Zö./,Cýßzãa.b© ,îvªA.ýü+Ch©äý_© |ü//UÖh~:>|:ýr*Ü_UabýAzv/hãÜO©äbUåhhCa|ð.@,ðÜîzÐ@ªä>_ð:u/äoz£ßvz*v@£Båö:>@b:£,<_ßBU|ß*_z.ðÃUävvªUB~>+©¢¢©,ýaãa|b,¢<||Ä>ýÐuuOrêUvý~,¢¢åo,ZOöobbr/~bÖå:a,£r>O*ªAözî:uª¢C,zÖuzªh:Z U*ä_*äbüOÐ.hÃßßvU£v~ߪß<©:CuÃß@ÐrãCUo,üA,U.îÃvªö/b*>rÄ>£|+äîÐßZ,u©öäÃ_BãÃUO~rîÜ.ãOߣ:a_> :ÃÜ@bZ~üA©a ÖUåö>ßö@ð/£ª:b|A¢ðrh/@uãz ªöª¢OuÜBBððÄöO~ü.AedfgÄ| B<ååuaA¢Orýîzv/ß+ö¢Cðüa_îªÖäarÃöobÐuãOAö.a:rÜ|@oªåöZ_ßßB£~ä+ãrB_ð._a*u~ð..ýB*AÐ*BªvhU,, v¢~U ©BuîðZ*a>ß,zaåhßÃÖªä>ZUöüZ@auÖТ ªÐzÖO/Ö+*~ßäßU@v>|äý+ß,äZö¢Ö ÜÖbÖü,hßb@ ã>oÃ/bhbaÐÄOä£üß*/Bh©aZ:Uv:>v*BZß.î~ð||bðA+Är|ýßZÐCîÃ>äî<ü_/ho¢/bBð+:ĪÄUåC¢ö..Ðb~aå<ªBz©rð@AhöÖ.ð£B¢¢*|C.©ß+Uöb|ß+_hÐü:a¢ÄvßBÃCð+rAÜzB/U:ÜbðZð.UäörÖ.ªÃüOBaîBÜaÄ|äabðZvÄöZÃüå@ÐÃZAðh<*@Ö@b~uB@oÃÖ*+.î+z|Ã>ßCðÄb©+z¢bãåUr*v_åÄAª/hau_ozÜðÐ+/ü_,ãßüðäÜåBääCob£ã.ä©î+ýî<_>b@Ä Übo.ðz..ßvOÖ,.ãb.>,+|*vÜð~>håýß/Zý ¢r@+uOb Ur>*Äß@*Oü@_hzßÜr<äßOüÖå+*ð_î,,ß_./ÜOÖß©h£A|*Ãu£h Oßü<~ Ä©ãB+aB@zä©b>.uÄ£obåÐBv¢a|ªbbb*C ðýÜå~£©CäO,ÖäîÜ¢å.åöªî@â *+Ã>ãUb/ðü:,~Z©©b aðÐТ~r.@Bã*aäCUbbC|©oÃ/üßo>ߪZðãr©Ã~¢ÐCz/Äý~|ü~v u~_@£äUZÖã.Ä~'), (N'ð@ßO.£/*aUU/Ää.ã|u>+Ã+z_ß:zäîêãÜO©Ao,ã©ÜU_v,/_/*ýã>,©~/hªî£_~Oa>Z..£ßAããoUßB*+_o/_@ªÖ|ýhÐü,hã@öv>ohb©îüh©©u.Ü*Üu*>Bb©.ÐÐ/vîã¢Ãa£Z_~ru><@|+öB ~*,Ooß*.î~B..¢,ýh>ü©~CUÜ|aãa~£:î£U+ö<ÜßåB@.åü/Ð:C¢ªoö ß/Z¢ßaÜ<>r£,ßåbZüz.ö©äýßC¢Aößî/,Ðã*ßüý/Ü+åC~*+©ª/ÖCÃðÜ¢/ß,ãZaC~ªÜv©ö_uzüå£|ÜÐ,/Ðö.>bßÐ<öuîA~hoÖvZ@ßBÄÄbu/hßZuãÃ,öB ª¢@ßAÜÐТrÐãÐîz>r|*AU*Z¢£ðrÐ,r¢£bßo¢ÜÐßzýý:aÄzb,î*>ߪbBU åoB~a*.|BßîЩÐ<ÜAbUîvð*äßßAÄßAýÐîzå|ÃÐü¢A:ª'), (N'uªaA~aã*büßUÜOzÃÐbßoã+äîbzb¢äßzãÃoª.ÃÜ:üî|uîÜ:öß Ä|ÄaßãÖCüvöu>U©ö|¢~åaü~ãvZhöC¢*vz@BÐh©*Ö©~ßOA©büUßå u/ ÖüäÐ_Äßý ð©ðüoðßåvßu/h,ߪroÄzÐAbär*Üvößbã~>Öîå,ÖÃ*aO/b~¢ßbð/ªvurÄ,ååü,:bö*Büv¢ößÐÄoÜ uä£.AãUßܪ_Zzb@ý@ßzåöuBýª*rChÃîC/å<@U<ð|rvoÐ_Ãü~.ßuðãå,ý֣ߩ£h©bÄ/ã.|ýÖbäÖ©Ãb+/î,ªÃ*<üZ|>'), (N'~©vîbªbaCä_A/AObBrÃð+uåZA/zªÐhvðbuO+~ãªbý+zbã~vzZîO*ß|,+Üüä¢Zßߪ¢üýß>C*:u¢b/>/öÖO¢,:ð@./Zo/a©<:,bOäZ¢ß/î|,uãC|ß,aoüå.*©B|_@*© ÜÐO©+z~©h+r>î_Z| Ä*Aý@@|üÄ@ÖÄBZBuuª<©:O>ß*A~©ð/hßýrßý£*vuªÃ©ßßöAbCZÃðßîä_ãu¢<ðåbZ+üÄåZå.uãUå~£,b|©ý|@üåßCA£>Ö>¢_@,Uöðý£ZBðîzbUªO@>*U¢åÐz+rb<¢+£ÄrÃ*O,:h|aÄ:~b|Üå.<ýUo+ð£©ö|ÐðO£ÐvOB*î.ßb+Üuð/hUß.Obo+.|ßÜÄ@:î.¢ãbÄzå<.üa©öä+hýu@ÃÖzÖh>*äªv~rî*hüh,äÄã+ arbà .z|Baîz.ªßÄîªýävÄz*,Cho.öo£¢üð£ýz/Ðß ª_:hãªbbOÐßböbßoZrZhhoäv©/©hĪoUböBÜåvv_C*Ö/ä~aåãßAu:©r:Ãr:,ðî*~|_ýaöAvaöÐaÜ,.,B/ßzî~öÜ+Ö£BÃßåªuýoäz~aöß_aZÄ©.bvß*ühª:a¢Ö¢vzö~ObCßßU_B>.ä>*|£bÄ ~ßå:î<ª_oU_üТãüßu~ä¢ßÄÃä_ZBB/üÃîðÐCÄÐh£OUbz|_Ãu£,Ð/<ãÄÖCOª+r>/ÄvãbßîÐvBbö©+Ð,h äb/ÄÄ_ubrüa@CÜ/Ãß+AÐ:åzðh¢*@o*AÄbZ@hbÄaЪaªöÐÐýz>ý_++,äüÖ>~brÃåãðZ:ßvz¢B*zC:v+r,£baOߣ*£/_,|hð_îCÖa/ZoAr+:AbZ,Ä+zO/h©ÄbZöß,Ðîbö.Ör*@*ÖB,U.ÄÐ>>ÜzZz@ªzBbOA_bühäîÄ©©/*îîßýð+üðߢvªÄÄ_>ßaüZý£ýÄå_v+>abãb..,<_ÃöCC,,vý ©ÄBv_*©oZªUC©£äAO¢r©Ö~/ ÃäÄ_B:ð|ohÃÄr|ý îÃ| Äa>ÐÄz<+Zz~bvÖ~©£hbßÃÃü_öoߢ¢äÜbAC¢Ã+üãÜý_vä_¢::ý ÃܢУAbüß|<äÖ/_@boCîz©zZãh.Bý Ã*£ZOa/z:ª¢,ovzCßãzA~z bAa< å>ªöý<ähu:U_bÐÃ@vî@AýÄ*|ßöÖ,A|vo_C.üýÃ.Ã,oî ~ÜöãªßßC>/*OhAoAÐÜý>åvu£©ß_*BbhAßÃäîb/îuBå~bBåÃÐ|î>ua.îü_>ýZråÐå,*hUr*bbåÜ.ýÃo_ÜCßßO|îA,Üî+|/¢auoéÖÖ:_rã/*UaîZ+üuo,b_ < Ð:zý>ªvÖrãý<ßA£vª*C|ß,å¢ýªu:¢h¢*r.Aaur*ãB<ßbZîOr@Cä>ßoß|vBß,| ðªÐÖO/ä<ÜZü,å©~Cª+öÜ:ÜCªªª_>ð|>C@aUÐ|_/vhýohh|î*|rÜ>Z©Ð|ÐBU/ÜuA_bO ,@ÖbbAz*ß@U*_¢£Ã_Übh~../,raý£Cöbüu>ãßCÄ:ý ðA<ÖÄßh_>ÜabÖüC Ãäazé~O,zCßå.b~hU<+ö¢<Ð,b,ß:~b.B:ß~B/arh:ªuð£vb>_:@/£aýbýb :£ubuArî|Cuub_Z/åvßÐßzzîh@ý/:ã@B*©ÐuAB+/Äý£ö©|ýäräUuÃZ©aC¢@ah.|ýa@@üUÃýbr©r©¢åa+ßðü>ßääBC>C.|+zz.©ðoba¢@äOaABý+uªoOu:boo©.ãÐ|~<ã+îUöüãzßz:¢£ãßaCCîß.Obã*>Ö<¢oåöZÃO£OÖ.vÖã,ðý:@ ã.Ъ©Üb©Zbî:r+â.@ ö£Oß+Ä¢A~Üoãîý.¢r/vv@¢@*hãüb,hÜ>Z©©~+uZv_äðãO>Bbå<ãubAÖäCÜbbo@ªÐÃuvüÜ.Zh>orCÃuOÄ©CÐÖBª:vîß:~OuBAvOoöuCvbU<_ãv|.ä|/U¢|ýßãbU.|bOubz@<Ä:ã©ßÃß*äãu@Zuuu~ß*+Äh.að:öabU>_ÖbÃ.ÄÜ:ðÖ£üaßÐC äö£uöhÖ|bãÐ*ÖßZ¢ ÃÜr@ß>ß+.¢bO,Or ªoCªZ~ª C*åACOö* Ãhüîßb:ãã@@Ã,££_ah£oAbBoå,:¢ÜvuÃÄãÄbu/ßC©Ö/bB¢ÐÄu>CbZOz¢Aßa.~ßb~zãü_öªz|*_>v¢AbU©Ö.ZoO,_@ba/.,@ãÃãÖU©rÖ¢O_ÃÐÃbaaÄÖÐã.Ü/C//aä~åoüA£~ÜZß~<ýÜB¢<©ãz+r©*£a ZbÐÜUÖüßaãZß<+ßßuªýA££C:hå.zßßåbåãýßîî|åßÜ@öZ*Að~.:Ö£ü©¢öv£* £ýrüUð¢,aîzACUåhOOßä>Ð. h.ðo+ã¢vu|hÜzýb/,_~>oÄ_Ðß>ÜBã<ãð~åßßa:AoZbß_BCßOh*:öoðO.äO+äb_.ÐÐuO/ou/ö@.uCîý£©Ãªü>AåÖ©Ã,üßboCТbßäö+aîð@/ÖÃb@å_ÄO:|ðÄã<@ÐÖv¢ä+Z<<ßoÜÄz~b|>:ýü¢åBv+ü©OÃ*ý+/¢v£z©b:u~ÃÄÜýåä@+r+<_Cåo*>,¢zß+Bß© oªîå@+<öo£ßðÜu@+Ãr_BB*üöÜbÄÜäCzã£: |>,oüðz©ÖÄãvöäCÃåU|uߣöC:£ÄBb ýv îüäZA~OßÃuUößÜðÐ//~bu_ð_ZÄzuu¢.Ä|öAåU,ä©+/B/ÄO©äÜ*¢î.OB+bza vü|bß@+äÖbz+ã£ãö,_..åA¢OßßCÐä~*>zð,ä©zu Äa,oßî_Ãv:>U~åOü ößßA@zö ýO,|Ãß|b>ß©Ãh,B<,öbhÜð.Ð/_Ä@/ZOÃ/ããÄoh|©örbb>vr|Ä ¢~Uß_bÖ£CoBb¢r¢ýUZ|+ U+.r|ã*uo*oßC©ª:£ZÜö>a,~å~ä:@Aîý a+rߪüu..üßðv@_a@ªaß.ßUüã ýýîÃC:O:CZ.£bz|_Bb|£¢b /a/åOðOhuýZüu@Äã+Öß.U~å|ÃUåÐO.OÃö£:ÃÃ|ý_ðoO©Ö a+rOîߣbãhåröA:ößß~A|bAhßÖv:r+äOzÖð*b+h|oü/ðBãAoBüª>ÄÖý:: :ÄÖaåA*ªboöaðãozCªO£Ð@a**UÖ+:_Ö<åÐî.ßhB,~<ßärBbÖ*.¢+ZߪöÄ.££vüo>,ü@ÜbvÐhhvOaaAð,ObhüÃ+ ã*Bßßb,üuUaãÖBu*aßo|¢£ÐÜ¢b:ÃaÄäâÜÄ¢U£ãÃäUÃß+ZbÐ<,OruöÃO¢zoÐ~Ãö@, rü,ªC*ö<Ã,üö,*aÐr¢@£:ÃB@ýð>BCoZO,bbb*ävßvÖUzu©îßÄã> ýÐå>åä¢rää+_BÜ_*Zö, *Ã,Ã:Üz aÃ+v©üO£O~Oýåzý_böüîßîZãbãu+ßa_BÃ|*äv@©BÄýåz*hÄ~OoÃüC,ðbað>AüB*~v.zzöCv|våOßAý<ðh£O£ ~üZ£vã*A£Cª£Zböã,¢bîhÃUrhbA/~å îÄv©/a©ÃZî_ªÖ|oÐö_BÐahÐråÐb@ußî/ÖÜÄöA+>ßÐöÜý~B<¢üzBî>ozÜübÜÃðo::aBãýäuÄ|Avab*Ъßv:_ðÐýöª:ðüý~ßå~> ý>U<Ü'), ('@åuhU/u:ý/<ª_Ðahu@ðUÄýu+/~AÖB|Ü©ÜzrCÐÖ_ª+.üö~ü+aüã@å@©äÄ£,<*/©ßãu@î.Öz/>O,ãü:¢/ÜÐ_ßãU/Ã:åÖ|BZOOĪCÐbbüv£.AÃhßåUAöâåãü~ßã:@ýÐ uýrh+*î+ÄÖZo/uÐ_¢ý@_h~|Zä¢_ðuª/vðbßÃð©@îC~üä~Ã_+bZß_:rÜ~~Ã@ZhÖOhÄåOäUöãöüZr_ßvC/br_h üÐÖUBZ+ <v©¢AªßÄB©b,arb:vB.ÃA<Ö ª©ªãé+uvü@:OÃör.::+*oÖßU@_hãäýa@*A+ýýA/zãCbÃ~Z|orZ|A+ü:îß~Ohu+.ý>öß©~u//Ab>AÃB©Uüý£|.ýh,~:O,äZB<ÄbO¢:î~ýãhýz:.uÄððouÄã~@ß/bCAA|ÐüAz¢ðAÜb.'), (N'výãðoU<<ðhäÜå<©ãaß:öß|v /B~ßåhBßbCz_ü>ðä||£ªCU.ovrÜUöÐîÃÐ@>b©©~ÜAbÄÜoCä@î~+Uð£rO©.@Ã+ääzr¢ß:aärîýä~b_£ýh U ++©ÖBz +Uoî,or,~_ .@b,ö_åÄo©<öÐB:.ähb:ßðÐZüî,Ãao©*ßÖ_v£Ä:A©ªvã|/ÐOª©v@üü~/,U@bhOÄýahhý_OÜo©Aßr£îÄ@Oub*åo+ãoBå,O,î<îvã/zТ/îBãöO,ß>@aåðC*BãÖZß/z+ýZC Z+bZu/~£/Ü .©Üz+åO@ý*_Oý©aîOC@C|ßäC./uß/ <ð @*¢bCð>ßÖhüÐrb¢r@.@î©Ü~ß©îö£,b£ä¢ä< +äbOAzßÃå+r*ª~ððüa£ÐÖß,uýã/©CÃ>äÃoýãäÐAðov<ðüÄ£*zß+uª:|ßÄä|>bb@:ÜîoÖCÃ@bªª~öýuîA¢ãrZzvvUªOCýo@äBÐAhb|îU¢zZ¢aäªß<ö_åuåuo@£ðhð|@ðBÐ>rüBã<Ä~~ýa£U+a+£b¢££u@åª/£ÖzbÜ+@v+,ä,Cbo¢zUhå,_h|ðvð_äã+hüÃ~£ª*z /Ã.uOhÜÄrUßöhuüÄO£Zuäß/ßÜBvZbå>*h/å,©@bz+£zªa/ýÐÐä<öbB:£vª:Bä<£zÖ<ßÄ |b£~üär<ßß C@|O._ZbüUhbbý/åaaä_£v.oßß+Buvo/ßCü*ð:îrOÐÖb.ý~~_ür<öUÃäB.+~OrãÄBÃUöabü_B©*î@*Ðßuß_Ub©<|.Cv@B aýîbýÄÖ£|:a©+ZåÜ Ö©_*,£~£.uÃ@îß:/Ü£*a:*ab~uBU+zr©£Ü>ã_ü¢*z,|>bh©¢|u~¢_Üå,©<Üo|*vCaaåC ªîßaaÃbÜ>a:|:©oÄ~håîhjik:ßüC:>bU_zö ܪ@bߪo< ªC©C,/åauu:ã¢|rÐö ýürahÄßðüªßB>ý~ääÃZabboU B>>obz*äZo>C~üüZ<:ZrCÐ:UÖÃ@/ðvðßöÃbr ÜîZ:urãBÖvÄ Ä~ªåbr+bv,*ßîðAUÃoîðÖüÄ_ýÐî@ªha/ßCuà ðî<©hb+_>_ZO~,~+Ü|Ðåbåzzã/C,ðüßÄ ðÜU.U¢ð ý.*öäöUu_£Ð£U.ðý +ü:a>*hCC>¢©Uu¢>: Z~bÖ|>*zAäÃÄCaãu©/£ÃabrãÖ:¢_Z/ChÜb¢,Z¢,ö©O Z.,+ªãA_OäÜ r+rýBäßAªÖ|ðA+/ðAbÃAßÖð.*BAÄvåðvýÖ.aB£ZBäoÄ@ä< u.B>hOÖ>::Ü¢aãBÖÄßZðZö.ã,ÖªO©A._åÜßZo,ÜBUUü|zaZUÖ,aÃ~_AvýUB,|~ã/buÖUAߪ bOÃAýä_+<*.vaÄü*Ð_zðZ,@©.@@bvArößã,ãývhÄÄðro~. v,><>Ãb£©a¢< :C/h<< b|>ÐZor|ß+h£Uî.b*Ãbã©+<*üöývãÄaîCüÜ@B¢oß+ |.£~+~£ªÖ,uãU,Äý@_OB£b+U@vCîüÄ_u: ßbÃ+~.ªUüªÃZÐ,ßBC¢£Z©ßzê|@ßhrbr:rZb>äßÐÐßÄÄããZð~+_~,ý©u@¢B*.uoîåýhðÜ*bßýÄ,C*:u ãCZaO~ .>oãÜba*h î~_öªb.*<_£vü :zO,ZuhÐz©Ä.¢>zÜü*vß:äÃ,uAä£ÃA©o@ß,<åªbðOoZäUO:ðbÄ|zaOå~¢ßOv*>bvý_îßBãå+Z ªZ~ßoA|ð~ü<+o*ößäb/ß|ÃCaäÃZ©ßußra©|~aߣhÃ/îbߢ+|äZüßð<ÖîO~ö:ÖîC+hv*<Ü*ßb/ZBhßArUzÄß_Uav_î©..äO,ßz_ö_Zåß@<ð+£+¢Co+ÃoAB~Chaß~Bð,Ovîzßvb©ü.ðzbz¢¢oZ_UbOA*ÄÐ.ß@,£Z|à au|ªbãvh|ßå>ý|ðzÃäuöa©bCßuߢĢ֣+ßO©+ã©+ ¢vuu,ÜOüäÜåßä_~|ÖU /*ßöbUhr+UöãOäª+.ãå/:¢£äãåä@UªCª~*ðüãzOýU~ßÄîöÃöUOOÄäßåßÄöCo+¢öÜh Ußð¢_B©åOåßööåOðvb/.ÖÜ:Cvîraªª¢A~~Äåaª¢bbý£aýÜaUý:*ä*Ä~<*ß+¢î£v|Uß**ozî©/*+ÖC:C>îüAoUÖ©äaU@uuýo,ÄbÖr.£b©|Ã/ý*ß*î©äÐöªCz*ðÜ©//OübAÃîBUå*~| Ã@Oî¢_+vuß~ÜZBðzhîåvýß+ÖzrÜÜ>bv_Öh.üoAohbOüOîªîC_>röîu©ðýC,üÖ|,oý,ZÖCý~/O© uC¢rßÜäãrOB£¢hªãv+Äzzöb@@zoa|îÖÖuå/ß+î~rîÐOýåÖ£ª@hzb<+AvACÃ<ªävz.*.ÖÃß:+Ü@.~Üb¢Ü©_>.~ÃZääoÖvrC~b:å~_ åðÐÃözüö/>ü<ðßb*ãÄÐb_î@Aro©ð+hî>B/ܪÜУ+ î.©ßÜvZ>êoã:ßý.Ä<Ü£A~z~:,>b:~Bb*Ö¢>ãu.å+/Ã@У¢¢ÜrbväÄz BB*,ÜuAB>B>Äo>|h~aîÐ@üoªa£©@ýbZzª~ö~v*<*UÖßÜý.ér/.+B¢B£C_£|ª*îäu_|<Üo+ª@~ßZU~ÜåîîÖhãý+ÐoCÃU*ð:@ äUöäuîbbßä>ßß,_Ö֩êÖaUoã £ã>+>Ðö_äZbaåää>Bî Uvãðah::ãîÄOðÜ_:Zß_>O+CãbZ+@©>_ðå/åå©ðå©ß+zz:îU>ÃühhOvöä+:zaÄ£bÖßZ*Ü£*©ªr+Uüu¢£ å~ªÜ@,>.ãOäöoz|ß*,:u r<ß>©Ðb+bzOOä ý,Üöö<>Ð/åß.ªãO/aÃBßvã£Av B<åãh,üA,b/+vaZÜuä£ÄîUr¢z¢ß+|.ävv_£zîýUzÃã£Zð¢Cuv*ßBª©bý@_@ü+CO@Ð~bbh_|rß ðÜ/U~a©ozbbO£äª ,/Ð*z~:h_ |AbÄܪzZÖZ_Zö@ZußC:|ör<ßoh©ZßZ,v*ß:_ãCüab:ü.BÜ©@|¢:_Öð*ü¢ahß|*zý¢ZöªßöoÖ@zÐ@ª:ÃUðã¢|uhÐ/:<îßýo:ÃoýßßãbĪ:Äa/Oß+OzîåÐÐÐÖ<_>o A Ö+äA+¢£å,äCaB@CzU¢CÐ@BvÄü.Uzv î,~Cö£|h:Ö@/>AªÐ¢u*UU@uZß©Chbö, ªböÐ.ý|<ÐCo*rbªuCUßaüAb,OZZZ_.b@+Oß.Båz££å>h*äbÖbåAão++~a||hÃZözb£ýAvOhuðh*b@öAzr_u£,u+ýßu._ Oü+örbÄäb>äÖßîaAZbb@UðhbZðßZauAÜ~îÖOýh ä :ob*î~ *ü>o*aBUßz£ZU.äãðbÄä/~ß@*©>bªîª ~vÐÃO_ð*/hßz<ЪvöÖ<ßCª©|B¢:+©ÃªZO:>/£¢z,h+/Zß>A¢bUBä/ßrü~oª|b_ÃÖ_>hauoªz/bÃÐO,Ü~~ãz.~Ðä,U@ã>AÖ ~©©ÐZ*A,î£Ü.*B'), (0xF77B01558B14390B5D153D199E510EFAB893BA15579A840B599AEDFD103348DC09698ABE87D1D1AC31C3F3CA2063D3205254CBA4DD2F075CF6F5FCF0263BFA2ACD610F34C64F73E6C20DE393A6B9EAF6C6CCABBC67A3FFDA622EC791D5E085F5C9C9FDBF539E5902E1E4E1CF4B73B53D0B062A59903EC2296235D29888E211E288EDCADDBC2BA32872A8DB82C1308EEF788A86CFB62B658B06D45C1DCCC179FFD3FF475DA8D880DF6302E7E762406732A6E320FE5B422C5C883FD6E8CE855BB12EDBAFC2E830469F09A66CB4447E28C66C2A76E8A07BA391D3EAD568019811DDA635B88790A449769C80F5B5D678180917107BA30E7210B3381EEFFE5ADD9D71958E0D0FC5A136C7E1004C2086EDBA5BD2CC51F11D6DCF3324044E71B54A1BBEE28320476A094476DAB3C20E26F02D4A63932C8E8CAC5327BFDAEAC052C41296E48D3D02CD73F1C987DA1769ABC00C34D7030E221E8C313630F8888F1E832315A12B2999B22B7DF0A26306B294E97CFECDB5E94FB5EF78585B07D2D5EB61AA04B601C87F977382AB851E7FBA867FA1467B89C16999D460B1B2D13DAB59A80541B902FB9221FC665A333EC99770BDD2DC658C59619F406AE2A117CDC636D752DD193E0183830F247E2367355B0BC841F4FF6045CD4EA3A1789719F10A2F9F235CEBEC7E31BC4E585667DA3D370A0FD6D9D5D8C7D591858E759D89EB691E1A4E83), (0x1F490F38B008EF657365696D8842173457D84ECB665D09943362EE374C8CBAF3319FB78FC5A016CDA11F1A0F331B632706E6F7AAF50E09C1407B054E19B719E7AB763BE98B886EB7C181294743FA6017FFC73166940FFE2396F64E4A9AC8B3E9053263BDDF7A9C7D7740E973E4C17E461AED4F5186B2539B7818529439241CF9CD40411096A338842BB4EE54268A3ED578082FAD79616352DFC845C72707435323EFA5A47F6DAF77B5CA26D1C4FE75EDD97D1C30F56E7F6CDCEE30CD5E715D24709A3036E49A550A58B7F8AF3B918EE15357EDAAEB125EB57039C7903DE118446D026129CE3E093F2811D83D76D0304A604F7A0783B2385D3C7BC6AAD2C4CD779FB44239306512144DAD82D93A203E9F097D30ED6710C0BAC903EC53775F6C6344609DC28EF61AFB3C65B9D5305E231B3C27A15594DF0F8EF387702D78BF9DEE401E95D9837C10126334B00157EA896AE0D01650BD17CE64510ECE0686EC827DC8CA9511C84998BF168EF2602F0E3709FE054DA7A84C302950318874AD0A8C76B133388C5577A29638563A2F), (0x42D6C508809FDBD47B9A6BC196C023120B017BAEFCD5ABB38663B66F51120103E2FC469DE7010BD6D65EBCF1E9B60BD614442E2DA9C0386C2B12811DE96C83699968DE997A862A0AF6A5D79E18B9CAD058E05A0DE3D35922C4D972D580EDED6ADB535881D7715B8E1A243704E89A547147B1C508117585C60EBCD5A113548A08B76DC3C56148F8E684CBF3BF9B55392A84018DCE28E45865CD92721B9BBA7BC5992F4D7BD68E0FFFB8DE844582C62AB982AA1C11C6BBDFD2145EF8CED5DD4BCA502D256C07BE53F6F18E164A6012E20668B998F19D69FFDE4F7A6678964129DA93BAF455A0BEB1C457261F37A49572027BF1661C455A2CE72E471D8D57DA5FB0653CB6A61D8C66AA08D3997749C739B90864FDA5DA0D95398E0D2759A0246D7CC76FD268DECBE4EF8ABC1371C0B49D660D6384F2DDB9D658A67D1810650C09E4661DB0DAF5D1DA3C800D1A1EF92379D96FC04C3DA07A9E0D9879C161B3D4897EB32F0AA203C3713B884772CF9EB75F82043EA0A4C0CB43EB7EA3417B107989AB849C6BC919D6D5AC4F11B45808CE6EE11A3E5D7434E5BEE7EB1F246081F52B0FBDC64B024C95692D69F354AF17EBE3AF346060D11B14779EDE84DDFAB2742B59E5A49B42836B9584D42F0B40910FD0003C742B21955AF4A94EAD24C8B86F7BF4C8FAC97250A02CC9CBDBFCEC09370DCFB3DCBE3D4809C48BB0F1F3D547CCCC65B3167796455DB09B476256B95D08A017A05514DBB13EABBE353EC15EAD5781FE0F9738F2BF7689562C22F6E6B30B2DA851DC35F2B8F1B3756BB960079B52EEF0E157A9C6CFAD5729CBBDAF8E48C50B2910190CD0218E461EE3C287061682BADA3405045C6267D8A3840C27FA41242DA5AD36F682451DCE52118BE30D2651134903D55942C1AFC7A940684C15674BDCBE94E158DF8B38941736B14AD683CB7D32F8DDF76CCAEBE4FE6F4D41DCD1B8EBC5AE247844F933BECA40420B0F64F02575EB191C8A546FF3A9FD59703DF7B7457DC684285F523839C51F2C2C88DFD49A7E27CBF1B89C61713F30CE47A0C381D388FC8D48DFC8C623B2E0576B27436BC928BFF1152CC58DE16513E82E83F199019D59A38B528CBAB661A83ED844F64AFCC5051EE0D26BA7C26FABE3CCDF979FC14656CDCE9FDF779C043BB38387B59D6EC8EC687ED2B82F32B2E01CA6A8EED6C9087D91EE297B5CE58D82DC96B7233BB90E7403F32F20EF8E269A1CBFC3D1F41665EA7B0924AE454D8F83F14FDB987B8EA4629733EAE29AE78D02C78E5F9D21BB8EC631CDA831945F2EB664AB2F9FB38E1F8D1A6039C02B824F937B22E7B7EDF16135C11566ADE672CD3704347EEEB8EE4F386FD283C081CE9AAE7D14B6727877C8724AF9DE9D2771A7A79301BBF70460DB8DD3AE481B6EA0B3F37AB730D1BC5BBF8D6B0BA4BE10B111FD2ADB2D7F12A2AA1C39289FCA2FAD04A946EA226F41D5EB38422E8CF8BB1C7D219C4AF0937333E0D80D139793BBF45DBD07FB77258EA1BC55EFF53DE416B2601CAB7E2DE4BC703612094A622D3E577C4ED0CEF0C0A55793FB8E9BA37DF6FCC25BB37AE83DC6790196C5651B433F8E169878EE1347C1A07753EA325620CDB81C0D88077AC36F3F8757CD59FB3F3C4FBCFF840A0407E97A99120394529423E0C90C480EBA371453293967BB7A68A437179A76569BC2B314230E6E67C0DBECF234EC90EFF62D9484EB31E1CBA02D00316ECB7CB71ECC45065834EAACC9AD934D4C74878ED7B540E906F26B6AE1E874F60D3DF9F55E35D467A78997C243E8BA3D9D937F2BA57159B88A92B12C61DA256FC0F39E8CB39EEF16A020E74D1E7EA61E372DCC4D6848509CE3406ACB83A806CC6427024F492E8AFFA4688B858A0B9A0BEC93F4340DD70777A302A872332392F7191AE8F67C56D409A2CCA9FFBDCA11D8A65FDFF0B3D1BF8D1F8BAC468517CC80D5936B7022A38F96BEEB91402E08B9D8F1CFCCD344A243485B5BD7F0AA8D848B002829295FA1B602CF4931C8407E5F17D1D355B54BF83C33502314C6CC9EEB3067064006DE90794F19C904FB717B07DCFCBF1FD638CE4007EBF6D93B8CEF36305D00613A3D5838405A069C81F441C2D51B37CA0C7E15F898C6391AE8B73DC22993D39D7019CD9FA386DF7B3232BE12AA330320542529B24808C874043E50891D4372EE21A351BB4D9827859F99C666072670B4B31D6E046921556850599A6536555EEFC0CFF106E248D2BBFEA312AE41626CDECE9BD5FFD56D85004EE96AF4FEC24F4A3BD7A538356AD26B4BB206C50EA726EEEDBB969B7F5F1A5249F1B7F8DDDEBD3C54C8736ABD33A963C96AB42266BFF1A7C37C06422BB3CADCBD52EE44B2D98D6DF4CA704634BB30B91232D215AAF7EC8AFF103561D77A11A0FD97AD6A4565B1EFDD472D9C4EAA72074B4C2FF8E1B531C5666444A1A32C957AB9D0489D0EC674AD81E23763C94F3B549D2E158A4A18BF4865E703E020104BB1B1B3E27E62D5F985D88276FE7DCDFC1729EF0375160A2FA010FF3726C2938C709786B2156CBCF2C83490B2C8A2C0CB98EBECB7310DD59BA684426D629ED2C244F50667F71BE6AA6DFC3B41855866FE50349E3BD5DC5B63C1EB0B912A4E902961CE6ED39B59D47D04424A35D294154E1D431D2D0097EC679AA2A50B0F54801E6B11DFB7EA9362F7602037939226912DD5BC73E6316229CAE10639F9B3C86DAFC22BC9C0B55D648AE126CDDF6059D57311783652E099ED09E714D5E359694397B387D0665DD0777758E9050A944A6A8831C5E73B921ACE283EBFD8A188813077E2352CD8886E164001BEFAF794E2749DA94DB29481080598B8A8289DF7D6EFD7B88D275E1E91FFC2AEA73AD320D7945B4A3BF73ACF9CF5DA30931FE04679482ACE233E06BB157F174DEFE5DACE3177E113CC52BCDFB4081C984C2E8A721F7B355E0F05FC988DA035BBDFEDDFB61B0CFE1B3DCC7A268B4B191B226E6EE7F5A52D73B07BBE2C7B49862B1D01FFC728667C40306E3453010ED2C4ECE1761F324DC639BF6C059F4DD1A0F4464E098A4B51F3BBF12DB68670DA71A2A8FA4099D366F9CF3AC608BC61DDF25ECD400CB30448789AEEBA2D04973FC8E4FA63F653910620DF54394F8549375A143A58B930CDBE9D6081A5AB1939F438FBFD23C1FDE69FCCC6202D5ECAF8F351B75F19CA3E8698163CC596D1EC5B07A66001548825755C2D9B8BF210A05FD2678E54F4B91F2AF975640C853850CEE06B1987FEC9A46A2B4102EC2EB3938876DCF32E4397664D863507DE2419F024DCCDAB87F6186108C22329B2B633FB46E1DB95A945218A4804CB01C8C1C5461251DE1061070B915E7AEA6C1F6EB496533AC1FD488346DEBA4262832A179947FCDC1761D723993ED549372F5BB56BDA5035AE8D00C8FE8E0AFF551FA4886647E0A26F435752BE2FA08227FE4C178305D78833F5680B4633DE8856D8CD7A9A4DE3EF4EB8452882FD767EED7EA1FF42F37C50481C5570DED45B3C65CFFCE66225E8D91B5CC8CBBFAE05367FEA1EC891DE45635B7D327DF872117A5C09C2B3008F1CC795C8E4E62AB19099161FF1F4B693AA8789998AE4F36AE1A94B4E6EB5EB5135EFCE5632C9F95F38AAEC9867D9801DC3C95F3B2A670437D42BE73B9ADB42DBADC4E901265F60E08D2A60E0F75A0307282E8AA456B027CDEB968207E2BEC45D6811EBA2EF7FF664697EAE0007243F7928DF126C509D84FD9C1C168FDC58FECF650278E66F6018A937263BD70127C5C75609DE02AB570CCA8CED05D3696787107FDF9A04AC5909C8C769352A62ACFB75564F39D379FB230DF6AD59815A4440D09E2A57228CC01AFCFF163B4222E168DFF1907C1A2DB49784BB8C0EFE00876D8229658C3755D9E895343DD363BFE1EB1544798FC9C825A2EA93D367FFB21BFC77A8B918BC55308A18A8E6E5F0E034C4D9A1F9BA86F7A4B903C2A1A48171E8E318415BBA06C82EBF14EE7721E140B2095E0F8D5EB961758004FF15FAB38C09A7BF03CDAE8479BE117239A6988083D7C30F974572E48929B7CBDBB606B3340B87E5CF61DE730385E5517CEC80BBDCFF812852EA1B4697C236DA15E3A8C3B75D3E2D1EB3B021F9500B126020679DA9FBEEDC34DE6149F0404D0C2A035D20DC21991EAD529C294E5F2E01DF09E6765B983119F4CC8ED9FCF43DDD65A3F6F6F3EB363F8748EF565EC58ED5B05F6AE65AD7B192D2432C1092C022B915BFC4AA68380EF4D2A7EF13A8DABB2F3DB9299C8A56838EF26423AFBE26ACC72536409F00E46D77517613B3E79EE9F788FDD2D996852EBF3C36B703145E35ACFA28ED719A1B2E594BB14B1342D0A6547A2B27C153D330A0078163CA2C6963F24167B8BFB1775D6CCE788DE53A1B7C6B8F6388E936735827F74C6A18B7632CE24E59D2DB17E6A303CEBAF2DB454B66EC04F73AC9E079BBCD0E90C7640D44B46A4CAB96E048A054A8C0851A7B817DE1ACE67D14C0296301D49D05CD871F3FF58A05888E9AB485A463A391095B5F3F4C90AE1B7D9030F441E8A9C24342D3CC89818F9076F8EE47F861D8B01C975AA5755DB93CD804C165591146A6F0F2416290D60888CBCEC953A167221BB780D7AA8E034CE58896F485BF2A3664B24856051F761F458ED2DAA693669B70E1A6AED9399B18EDA55BD9F9E282C8A19864A058111DFB4060911BBB29A65122FB83A4197C5C2B1630685FC49D26630C09380E2EC5425EC3AA6D79A7805CC3FF09B7FE5FDDAF253B398A28A8BD37A33A2E0FB2F097235CB824E06E0FE38396D4A560BAE627032E5A13D3F53B1AB50672C93E7871AAD268E65A453AFD401657B5F353035D7CBD122AE058DDC42D209E6EDAFC45A40B252AD2F7D38BE2C93119FC7B3F48C6B2A8F50B2C4D9051F5A3B93AA7CC2244D0B3AACE293165A8323061AF3EE049EDD8D7BC32063978BD94D8DC541A503AFC0ED52CC795799D80424DD9FBECE113145ACB62D00FF03E963BED395054118DE1F564A069B481585E393CEFB9607CD1B3C5C7FA4FEE6AED1E96958CA83F4D2B31BFF7058740A960D8720397D3008536BE1B868B8D163EF38B7781D21FF5B01FEC10BEF968764A731B6722DDEAD2191E115ECD8CB9C19E1A8103790FBFD640E2C1E4ABC2428BCD48D1137025F46008B95D63C1C02824652A72A37864FC3AB444263F1C062756DC869185BAA651782620FBC0B15B1580BA9C7F80509F12684B965F2CFFB543029107873B2FA269BED9FA7D57693B89582EA6847F87A6063C7328392447257870DCF82FAAD4DA501732C0A75621BAFE0F0D07FD5930C47BEA004AC707684577B4810C7A710CDE8354556C4CC7FFB01AB9292A1640271F3F187D44A98A1248AEED48F3D5153F8D022E83A803C477B4EA502F0EDD3E2F368C61CD62F3C735F8420CBD5F7E0CDB05799B27E7BC7F1C7BA1C85A585B036B70BD11667348DD993BF98B66F6061836DE7529954116477A0D4551C12B6DDC9C3EA14DA16CA567BD9C02ECED3118267489927BE3326E29597597592EF61C6ECD1DEE2754B976C9380E6BF93F2A5949F41FDD3898F2F86AD078F32BD44C38C780931ED042F1D1BB12C842D5C674E92F1C4E640F18E3D6DB248456DBC64AF5ECD5A479AB0B8907034D2225CFAF23A45B8EC40F85E729AE9CBD43ABBD9AF5F4C8D356FF22FB3E23924761C2F6BE062C00E0FB4C013A6F04ABF5DDEEC8DD4968572D5CFC5823825F50A07C3E8667B8DDB616AADD9FA8F28D6352532C1E505AB5FEF96AC9610AD3DD5E9BFC61BE317D443DFF37B1326BC8AE3ACF9806D055410046C73F8DFCEE7BAC43CD7F04AC91CF32D40FEE1E18A8829230BC8E9272CC0C0859FB1AF6F1F0484E848B6D64ECC301A8FF6532C16722E79D44AD5C4060E83977C077ABB077D840E3C6A09A8D3A1DA66CBAE5930C994BA136147DB2449407EE9B51F6A47418503127244EFAC6885A622606EF857A552DDD75D5749CFA26FC4FBEB1FE3B4479315369B46BE74B51DAAEBA1A8B3DA481734624182E9FA4B4370128FF3B158A1E1EADD49C1CC5E9459223FBC6E2DF9ABFAB3C3DB8172B4A92AFB57D6ABF4C15C5249CFCDE680765AD5CDF860BA3DED157666953FED7D106F26242EC67487F86460D36A146E3BB56A3D7905B38A43FEFD0E3250356F817ED5295097C261BFD65DD5840FD6D3C8A73AB12AF274776CE4D22531B83227B2F4DF6484FB1DA3E3088D92A7EDF6442829458B1584349F0A6DBC6BB59D3FF79426228F30624ECD9996CE2274D1CF7EFE9E0D1872B7022EC0406A173EA1EE55C895FE71CB6713B5DA77E18EB6021A28AE4D7D27902774ED23F3CEF008278EF7A87859EED34DB3878A573E0AC58368BE263178F124C6C5A111015DC79823ADA2E8F9D64DA83B455089E5AD38E97A27908B00C9C6BE9DD2D1A2B8CDD1EFEBFF56A99B11DBAD2B05EAFC18773F298CB796E9CD4C8759E6E45B26F49AFF6D7370ADF6468F5E684BF3600AEEDA961693B825F136E8229F680CC2A6B6B4A880167D78A7C938E2FD693EADC9EC8C6B0C4E34834C74FE369B4E0E9E39BCB7A1974ADFE47151FE4D5AC52897F83A58B2DBA1C65872216C1B1836ED69CAAAA940B18D068F1C97F9BA5FE728775C663E50E54BC297F65F3F65EEC4DC3A749482B02BE7E67B33D9A633A80BF88AF8E4CEA1F88C748EE8114A524D90A047CBCF45CB64785B648FC32D1BA58EFFEA56A46CF9F62A31E81FF3D80AAD942D93395E77E8C63D1680995A22356F68D959215FFBA933A651918D6DAB609040C6FB9589D247070724298DEC60AC07FC78B71A7EE94D98846F830CE65B6891A5E0488326AFD58682421A3BD21B4745A58980E4E44621678953112A4F4A20BBBB87D7FC1818D15C9320982CCF11C669184D575CCA83AD5FCED109D39EBB3748216E804A435B2D9CB83451B3BDF498678CA81201E2D3E137EA782D470F0DCDE7F9400B60918C25BD2FCAA48621E9A1CA489246E69935555D7D486FCB2DE68DBA7679CA7DF927D6008254D2283F5B05F0D6530E7CB6D74EB3FABDF3492C5A8F494CFA1FB81F33D110BC365444532D1E12426EF4DAD800F39F2B16734B349CE437C598DB454B4DD1A281FDB070830A50CD9FD0F6BD65B4613BF6808D08B095DC2F522C7EBA51D8D6F49D4248EA50731C20B5B5AB539636C21137AF4EBAB0C8F1EC11812E568B967BB709F210236B76EB83746C530AEA78891B6A6D82B29A1C33C4505CC8CF44B5951F39E4599416AEA5C0C3CB465475E701A90802FC2E13C92CEDBE5BC31EAE1C3EBEC743C0F61EE504BBB7C1EECEC5EF5E695B2FC741B966FB70B76BD5CADB9712A78C979D32160B8A130E407651DA6E17DEFD69B37E54FCF55048503EA30F49D020AF47323E521C434FA5A43378F0A996595406CD71D394529F923CF9C5CCD713B46055A2832BE98CE11663D8A0B97C5F9EB9D55F088C6E4D0AF4A29C15228D82DE908F18AAF7033D6A89EC6B7FCBA1D615DD5B0BE7780B380208979E794D67BE88E0FA103A63B4A7A6A7E48EAFF2DD4F42CC7647D7719B56854716A26F74B42D122DD28EC191ABB228B3554F838C980F3B584BBCC72FD71745938AE34D123831E3C76C72204E7DB110C41F241C5BD308BF076707290755F256CB392E06B875167B235BCC1025EEECDA8A9C0300B2FAF9C0723435AB2108EC616A2B55054FBA584F08A8F8F016E889288A3C9E6B52F193D04F6D84843F7B4A1A7F5AA60A89D79AD033B3F809F209B989AB1D10F47A710E788784C5E225D41F9D6EDE70BC428EAEB2A1BE379EF999DE45B3FAD9225A55A00E4C2D72F501B8AA5FA46A9B23890D472C7E6E52BC497F8EEDB6803E3B0AFD33193E7260151BA9A0F913D7FA8EFEAABCA6A3ACB3FBF2E3B4DCAE854E718A7F54B73781E5069D3210C4BD69A87174FFFF0BC387875E3937164ABD8366865B2F7E948343576CC5B609719BEF3E994B4367AE9632BDF2E7F67DF06B9A4919CB9A699DFB03EE31A882461D7E15C25A088D0F6A2BB7E028717BAC9CC557012B6CFFA60175A09E3765260613FC9084D22423F7EE8ADEFE13AA411C8F57516C51811AB08E6FB0D457EEC804F5B1DC3BE0E6DA68A16F12908DF1926734841EE003C9A482D1E00662734F9FFFC2C9F851CE053B988CF8BAF26E7A228CDD59AFD3CFE8013C0D4959F0E067F561CF12DDC3F940992F5886530B0EB22467CD8995199FCC3FEAC8CC4474BB3AB8250359234BAC5E839CB0808B4984F62D5B24F23356C2DBC202E2F30B3CFC24741DCE3E07A59ED8CB6F0608691F30E655C29EF95FB907515227971058A95356909C1C7D7B56FE87BC4C36D450CA72A2C1FC9D489E02C4BB067CDBD01E7E80120BBF67CD02C37B0EC4173D137232F097B4E45E6C0C1AB89DC751670E7B1E694DCC24C8A152A59FFE819E7476C5B138D37C342B2A201405F0F6D9F5B16C6C83B5BDEF475D7A4F451F545FDA7DA641C), (0x8838236F34F2DA81EC7BA88AFEE92150ABEC8E669DB692CFF1BD5C049985AA501EF98E8EA5CC26EC1AF4EA294BC6F65CDC562E788E1AC4D2A6547E7695D6E767D0576B055A93ABDFC5A14CA9CB69832AC60028435632C20435BCE7514DB056430C8358F45AF10148AA4FB2ECCD1A063CD053AF95AEA4119E9567CF9EAB5A91154B099C48108FCFD5FEDF98067FD5371AB5AB80FA00C0956771BA5FF221629C4FBE9DA1C47EBD2C4183DA96CE0C0A1EBF30B5E800D997158A7435D7562FDDB39C434848E134739CF87E3F762529C65B679CA0C26C799B762688165048E6D511A627FA8BC4C13C8BBD18F0819A20EF61ADDA6FBA8F1A4722A7D221591D225312A92ECFFE2F3A96A55F140453891ADB0599B5A26E761B818CDFD7E4F1A0E36D9AC5DED86B51F0317243CA5A7A15F3998CF61BBF6880E49B8DAC431E5756A4057CA76A8DAB416FB4A883302BACC10676EB3E57FB8423041AE0424BBE0ED2DA1C9EC5DED2AB65ED4B866717E550B9EFCCA6CC3218FEA98158A350AD68F6B1A6D6A9148CE6E233CB86500C741C0B1ECA26537E18419FC11DF543852F5BB88554D5C1413C3C2D08E97201ACC8F234644D8486861577986436E7F697A35D0470CDCBB79F5BCAE28EF94A95A640F3F92BC0DF38AAD4316FDD3C5C0B544595658B6D91DEFC3A950982A2F88CCAE1F22443EECBD7C3255A9B9B5CDA62FEBF8D4864E50A38AF14FCF02AD5B508DCA5A4FB4A38C76679BEA16613F543A060320BC314AF28E5D7BA742FF1DBACEE7051BEF6B7DE18C5F727CFA543A324B9D15C8FF7C9F1F32D7CBF2390C398749D12B3F5C1364CE8821A46CCEDDF82A13395BB5E944BB4247E5E9179F8BA88015EB2319390AD628284740DDD8324064DFA1EF0FA083AE0525E8E7763A5D2F0C792446E3AAEEF10853238D9203ED6A15957437FDACA8DF923D1DF350236FFDDB184454A3FB6CB9F0B0D6AC8CF60C01387ED1D0C615315FD054A4A69CEB90E4F335B289CF88C61A38BA474CC60C529C311CBAD1519F37B5E6E4845F46C62D051FF1A947438241BFA8B7A80BDDE499D3F218757030BF83540DFC92DB0476D3629D423CD4530B48AEDB0B3899F72BE7F24AB05D3E50BCD4506E454946EF66BB31E4356E8BB7C570E6CFC6952586F96CD214A08044199511D07DDC660DC201BF745FF6B5B1CD5C4A853F667E8A27AEC974E877224ED667284F238E1DDB5F7324CE0710C59043AB14C8660B14A32687B8CF12E1255ADF70ADF8DE669E3F3E6F25BC41B08306E939313D5269E8DB427528ABD55EC86E5DD9EE9672DCC1DD0CE599F6D558617604B1E5D9BFE7F86597C2A6593DF269EF96B76E67C1EC940C7754207CDFE205EA03B2971378EEBE65D1890EA02668AF1A7BAA501DF9F9A4181DD9626BC77B95A5CCCC458B5B4676B809088648EDE3E60EB516012581E7F01), ('99999999-9999-9999-9999-999999999999'), ('2462-01-17 02:21:36.465'), ('1965-09-18 17:12:00'), (null))"; - break; - - case 6: - $query = "INSERT INTO [$tableName] ([c1_int], [c2_tinyint], [c3_smallint], [c4_bigint], [c5_bit], [c6_float], [c7_real], [c8_decimal], [c9_numeric], [c10_money], [c11_smallmoney], [c12_char], [c13_varchar], [c14_varchar_max], [c15_nchar], [c16_nvarchar], [c17_nvarchar_max], [c18_text], [c19_ntext], [c20_binary], [c21_varbinary], [c22_varbinary_max], [c23_image], [c24_uniqueidentifier], [c25_datetime], [c26_smalldatetime], [c28_xml]) VALUES ((-54290834), (128), (7088), (9223372036854775807), (0), (-1.79E+308), (1), (0.2643), (null), (null), (214748.3647), ('Av++ü*+_ãßuÖ+Bã|hªÄh@¢a~r<îý:uýbCãÖ.Z£ýªÄ,Ürä@ußÄÄbÜßã+,vßo>>o o,ÄåÃÜý¢+*¢bCýÖv@aßz:z¢C¢<£ß:ä+êo+ý/@aAröü¢UbÖßv ©Zhß@ öoAhoO@ýð:üªÜãýýÜC>*ýå|Ðã|COb|Ü¢b£>*ýîAÖ/£zªßu<>ÃZ*Äaý bªZZ~b*î*© |C*¢aäbÖî*~öö¢bª<ßub¢b .Öâ:ÃBÖöö:©+obv>¢vBý<©*©>:äBh~Ã>Üðå U¢bß~¢a<öÄ//@Ð/*ü öB*ööuu£ß*Öo~UOöUarZ,ä©äÄßa/~.h*@:ýÜýz©ä~öߣÄßCrv~b@£ßä//zoýðäª_BßýªäÄ©|~ü_ZÜ/hß>*B_äîhߣA£¢@_r*ð©CßAC_*O©ooîåbAOÐhä ~OߣÃüßbAAbÖr*Bz Ü+ßÖ+OÖýåÖü¢:Ü,*a*> o oÄZo¢B,Ä@üÄäöÜb~rýb©ßrä/|v£.Oa~üO:uB:u|£ªOUýîªß¢Z/h>Z<@öãä~+:ü@>+ÖÃ>|ühý/,b¢üå@ü/AhÖåBÃÃðvU~¢Or¢£Öªoðzb jklå.îýü*ªð.ãÖ¢Zbý~ZÄ_*Ur/üuv*ACüß:ÄaßvAZvuAUÜÜîC CðÐܪÐßßÃüðÜÄa|ß/AZîvvÐ|a: ý.©bBöUC,OrÄðrCZB>|u:/ ЪubãOoÜo.<ßvzãÃÜÜ:/Uß|ýbo::>åBå|bð<åå,ðu.bz/+ãüvßß:ýabîAuüÃÐÄvv ~vr,+ßå+@rãÜv_Äz~O©ÄÄr+îoö© ÃÃüZê©åz©o|.ÖÖäÃü©zða|ªzh,/uýäü,hB|O:ý£Ð+rîaBZö:>rOZ+,ÃC*ý|uu©zßrOZ©OÃUüa~|ß©ªrä:ýÄÜ©©AÖ./ßÃåBßðavvßüuZßßå:ÖÜÃÜuü_h@h_vÐåÖ_~båî|ÜZãOÐðß:,Uð@ýbÃУZÐ*üzÜäª>bЩCîªÖÖßbßößo|ª:>+orý~ÜÄ@ü_CbråbÜêZräävÜBhåÖîß.Z@av_ß>öÖ* ÃÜö C~<ª*>üaÜu©£~~@C+bª:öðäbOö Ð~o:@ðü/ª.>**©ã@ªÜ/aðUUü¢o<,rÄ//.oU/ªÖoТhîÃåÄvÜB,vZÐð.<*rã*:|UîýböO/.îäªÄ,Ü*_BîîÄzß:hÃ>ÐÖB.îßvbåaÄßÜb ©<.©a_£hßBð:Ðv//ã+//à >öß/ å ãZhã+¢ b<©öB¢Zzý _ß:|ä/ ¢£*ý:ã~uÖßüßÜ¢+¢C,+Ã< bAOü<î@/ÖüãßrÄZ ~¢BÐ*ßz>rÄoo o<ÖãZªzß>*©ÃzAýüü.£*ÜßÖ~ÖýuÄÃÜÜÐ+Bª>BüîCü_Bv/bAßz@uz@ß|*ÄoBz+~CÄ~ð u/>åý@@,UÄÐß*ߣußa/z£UA,+öOöOCÄÜÃrÄöCðÖaß*ߣüCb~@z©rCuª_îz/+.Uäª.ä/>£:ªOb¢Äöß oUãaýð<ãrßüÄÄZC@büü~b CZz©_ð¢>oZ~OhO_.vðC~©¢_öÐzb@|ÖýUvßh|Äz+|rÄ£©C_oðý£ÃA:<©<Ð*öUäBð.z*ð AüÃü||,üýäãroh_îbüÜÜo£ß++CÄBÜu+ܪßîAüÄ:îbÃ<å@ÐBÐ|A+ |ho+hzª/ãzOÖåÄ:Oöã£Aü@ÖäAr:©@å£CAbÜ@Ð,:CÖ>ABAß©/Ãrr:ü,åÜ/î:ãh©Ä£vr<ßðö:_,@Z<<£ãr@aüz©Oo¢OabßöªýBÜ,ßß*ä@ÐÖ£b/C,ZÜbUzCÃ.üBbä£ð墪Ü_OÄBãaä©>u_aCÄ>ÜÄzÖÄZä,*/ÐÜÖ/h*,ZZhßuh _ßßýOÃC<üo@ÜÜÃro|ã/äåo*ßvC_bCßý~/Öü_å*<_ßý@~î*~Ãbh|ýßv:,:aÐbob+oOö aÄ©vu*åbî£Öîî_ãýýUaÜOz~båª/,ܪ+.öa|ý.ä*¢îr|ÖÃCß> b,îOooÄh~,ªð>ZZZ*öîüä|Cî+åüÖß+ÖßðbÄr:ußãäãã:ÐÄ.ðv<*Oð_<>výßZrözr£ßa/~bßChbBaУo©*A|å+~uð:.>¢ð@¢ßðÃü*O£uAä/:Ö¢ãoßo:üObö¢ã*h*ã.O>BãUü>ÃzÃß_aðh:z¢vÃ<:|:ÖýbCýAz@,/vö©ß~O :hv+@ðÄÄåãÐ/üöÐö£bvî+ÄZ,Zo|©Oß@AB+azZbub*.Br|B/>@aaÄ vöÖäåB+*A@BzÃ*ªð.£|ãr|üªBßOÄbhOÜßÄß.v:.ýãÄzîaååÖß~B*:äCÃühÖbî£Zå z>ý@O£üU~a>Ubªrö/î>bß ö~C/hÃ+bO./|Ã,îU£ðCCåä¢:î@_B<Ößã@ý_,,Ð>Zå>ßbß>ðßbrU|ðÄ/bü©_¢hvª/¢~AÄä>ãð.ãu,b_¢,ªÐbv@uðß_:/Äråhªå+:u:uö_* ob©B,ð+Ü>îObãz ,ÃÖoã+<Ðä*,Ü<ß_ã©¢Ã+bvbüzaC/o>£ªÖ_ßvðåOObärO,BuîÖZªîå~b/uzb~Ü:> rbä|rÜrüa|©ha@+ A,.î:üzª ©aª._o>ü.ß+b ZüB£åzîð.ÄðÐ|,A~åuÖvu_Ü~_:.oo~ÃaUÃC:ßßBýÃ.UZÃÃýÜ<+_~ªßCÐr>B.îÐÖßaî>äv~ÜbhÖ|ßz<åä<£ÃÜbC,/~,UzÄÃBö£.vßrh>åª<:äUZ/Ä¢UövAüÜî@bvå <*:©ªOîuB© hßO|©_Ozö_©<Ðãî©¢+Zhå¢_hhýr¢C_>_|ªCußrUüåöðßßåÄßÃ>vãß_:@Zb/© _O.bhîhÄÃå.CzUðÃÖ*vv+ð¢v£ÐAoªöÖÜ|£ Ö>Ö£ü~CaªãÄ>Z@ã_ÃO.ü¢|o,.äýCÖh£|©ðoOýÃZÃvða/ðuÖ¢Ü,bªo©Är**UB~ýU:roã++£_aåÄÄÃ_Äuäzý<ýã_ý£houUh..zßßäüBªBo@ÖßUß,à @Uð>| CðÐ<Ã+Ü/_:ý|A£åðh<©Z:UªUäAÜ/ß OvUßÃ:hÜ@v<*h/*ðbbåðªüu./U >¢£ª ªuZÄzuö/ß*ö.ßCBoåðýÄ|åÄrbã*/h¢oå©hÐîo£¢ßC/CUaߪ ooªÃ£îÖÐ@b£:ä>zOrbЩ,rýUzO~CÜh:~+@îhÜ:zªåvaC©UähZÜ:O~ßü,Aß Ü@vü+ÐÄÖhOãBCBå@/Ov|@oß>ÄÃvý~|@CüC_bªZ£+ü<Äü:à BÄv@uÖuߪÄÜv©:ÄO|£ÄCý_ßðo@î~A/ãAA*Ovzbz*ÖZð+ßAüîUzh Ð|*|ð**Ãã¢ßoåÖu Z:ä@ *+ê/CC|ý*ÐZ>ZÖuUhäZbå+:Öz©BåßÃãUrãöbZî+_Z©>ðv*©äÐ:>©ß/åCªb öÃ_ßz@ö:B|Oöu<ÐÜrå_<öaUh*rO/Ööã/u~/ãÐär,zî|z|>jkl©ÃUb~+ð:,:B*@ÄoÄÖУAåA*©oob:ö~ãða bvª*¢r@, .CAßr.~ßÜ¢hr¢*|ð/ <@ߪo*O¢åC,B:@<Äö|C+äb+ÜbZäh:ðA/råAå@ßöâ|@:.ÃO¢Äð,aßb:.hA@åBzÜv¢ußuÐ>ßhZüöÖCzoA:vUb.ãrhZðÄÜ_ZozäO/Böðh+åÐvUuhäuÐ~AßbÐãßA©ðßÜA~aߣåðåbb@häoÃ~üðob@Ãr|oubÐÜÖZý¢Ü:,Ö~Uýß@ßvz| @*îhC+:Ä£A|O.a@u~zä>:ýO> C©©ýîöUªå_,åªo¢obß+O.ßýZzuü:bå_O,ßaÃßÄÖBz~_:h ühU ,oß îzÃ+éüß_aar>ßoð+*bvåãv_oüUãuÐ<++båÄa.Abh>A@:öãoüzöbb_/bAhuÄ/h~ß@¢ß/î:ðü ah+ßÖbrhbäîÜ/zã¢ß©äOz¢ýðraãC.U>,ýÄb.bvZbA~*v©bB ýßBÜbßA+h/ªÐUbÄã*>ßÄu.__,ßoÄZÐUoî@hªoÐ OÃÃZ¢©_ãöå@îOU+B|U_,v£ B,O/ãÄöBâoªA@hðåãöußÖßbð@/~*ª b_+ªå/UÃCaÜãva¢*|. ©_z/> ~C>zZ*ÐbzBb©ðv<£oãubð_bZOäoAöÜÖCåvZ Ð,ã£AÖüî|©£oäa,uaoð,vî/ävZ>v./z¢/|ªåýOÄB¢<£.u:å>¢ur|rhbb*ßÄä.>~hÄ|hªB¢uß:ßÖÜva¢ß.ý¢rUÖ.z<|@O:ãÃhî>Ä© v.aý+B+,ZÜ*oð:.ä,îöhßh_BA+ªh¢åÖzü:h~¢rä£AîOßOA_+vv>ªÖ@>Cåîöa>uÜ.abr:zßuObzCîüÐðaßuå*+o_/üAÄÐvãoßhÜÜhãbb/Az|:.~ohýðOv*.Aä>Ö>ZC>ðrhzÜOüßOÖo/zbªBA+ä~Ö £å/ÄÐð£B|Ü _,*zCßüoOÖ/BðCüU,Ðh.@Ð~|väb:hjik+BÖ©vßð_î/|~uß@ªÜ©U*/+ßßßßbUÜ@CA©UÄß*Zý~ß~@Boa : /©+îÐÖaZöä:Ö©Ü+ @îübÄU>é_ãäУß:~î äÐhö>Ä_..@ßhßhÖ£B+,¢rOÃUOîo|ZbaOÖ:@ª,ü<+Oßboã,AÐüaÄBOZC©AîÖ~_ýh+@£++ªoUhåA/+B_.Üå/~v*îa< ã|>råßrÃÄ¢OA©CßÜ~rhãÐ~<<üÄC,äa¢£îAÖªÖðauUÃ,îuÖrzß>ÜÃä¢~vbauoÄßßÃa_C¢+ra£rðªAO~vu>ß~+Uðßv:<@ÐÃã>/åÃåâ~öªÖa£ðu/:BÖäOå©vü*/Oo<Ã~~ðãýåh/äUî,Aý©r~r/UßðÜ.bðuhC>ã,ªßO.Ðbu|z£åªv>£ZZoãüÄuî£ß@Üb©ýz+,@Üußv:@üåðoAOh|Zöäü£åÃ,î@ªrZOî @rÖÄ.:AÄ ýßZЪ£+rÜÐh*Ä@ã, Z©Uußüªß@ü+ää<ãU åäBoðöãb,Orüß©ð Bo*:BräÃðB©a*ðUZB,£üZo+Ä.o.ß,äÄZ:@Ü <ßUÃa.UãvßÄ<ðîä.AöbðÜ£AðßbZb+,|ãoðßzhüüåð_/~/ðå>ýzv><ã_ãÖzîöCO:åvå ýb|vbüoaUr/>äoßbbCb+z,ý_ãbaÖÐb|z|ªå..Ar@zßZ¢ ßAß B,Öu@aªBA/aü,vo£CðvZ+©Að_bö/*ãÃ:_>Ðß.ýÐü¢<äAåÃabZ/Öühðü+ahvÄîhðbÄzª_+ßZÐa<.oåªZ¢u:ÐU_hOý uãCor|b.åÃv/uuÖð<ß<>üUüÃßüÄhå*v_äU+ßa:/üã@Zu|ðh_ýb ühýUð<*b£ä_.Z+C£:üÐCî>/<_+oÜ+Cãßöh:ßãZ+Öuäß,Bî©Ð¢ã©|Uö/<Ä>Ã_z|Ã_aÐß b>üvb,ß©hAßå.OCÖO::ðO:~Ü_uå,£arr¢ß<ðZZözO/r|a|uüO¢rüAåo~ðrÄß@.ACã¢U¢ÄO:å@oÖÐUaÜýýîuaßUoÖ£åaB~hßÖ.BÐ+zªvýOz:åC.*î/Ðߪraz~:>üßO+z++a oZ,Ã,¢uã>ÜZ¢U_B£ãzO|.Ühðߣ:ßßab>CBOªbA/ýüOßßoäÄZbÄ:br:ð+o:åÐO.a<ÄÜ@o*>ªßäO~uü ÜððoÐC|az©Oß:~oÄß|o*B+*|ð~B£raäÃ.ãÃüßa©îðÄ<äý_bA£o+ab¢u,~+uoaîßZß<,ªîrðßåv/,å>~,_býb£ã¢ÜªZ,/Ü@åaîrb>h/C:U~hßrß>bÜãªöðУöäªý¢ß>a++.>Ã/BUCö@ßbÄß~ßÜz£ðîöbo|B¢@/>£Ö~Ü/Ü ß£Ãª>ý,ð~UbArã>ãb:/* C :ÄÃ:åb<ö+ß:ö©ö .öÃuýä|>u£oî> a/ýÃzuåß_@äBZÃrÐîãîÐA<©Bh<åu:ßÄoü¢*,:v+Ä/ª.o*å|åZ<Ö aÖZ@Üî_ã*©*ÄßÄC©*ßZ¢:OZ/b>Ðvîaðüb,ou ߢ|Ä_+ÜUÃ+£Üî@ Ü> +oý¢.OÃ: b,+C|bUb~£/ubO~z/,ÄUªåbãZÜöZê.å¢CÜaöbAðöZ/A ã*boÖbßürÄo @ßßCö,üu|~ö,|+**ßz :A@:/îhð_¢ð..¢©.Uußýî<ßÜU,©~,Ä/oî+Äza++uß:.ª¢O_ÖåöCCý /üuÐubU__ãOÖ>Að+,åä~o/brhbãîÃ/~zO~öÐBvh üZî~.åÃ>ã@|uv,oýîaªOr ãBUå|ðBOvCÐ_ªå@<ßv+*bOå*bÜ.üßb©üC£/ß @zÖ.£U/>ÄÜZ:.u*ßãZ©uåãß@C*r:Ü.ü:Äovöªö,ð:ä aC@.ã oZ*Ö~:Ã@UZZbüÄzßãÐvü,rååÖÜa>Ü,ªö*hªh¢ÃhÄ|/*©BäýÖO¢bäahO~>öCoÃh@|ÄoÖä_u¢:/b©Üð©/äÖC~Üu v+öäªð>~*ЪhßÖ£uOª Öî<~УÖCîö_öüååâ£|+Ä+ÐhöOßå©u_ðý:.:îß:*@îÜb o__ö¢OüZÖäCv/o£+ö,îUOßhãåßo .Ä<:ýäabh@o.©¢ba~+ßã¢<_ZÃ_zzhrÃväo~~:*@| h>ÖAbýOî|ð>azÄðOOÜ:_Ãðöãå|@b<|uäU@<üÜU£_C,|vrv|:£.v~ba¢u|ðh<:h.ýÄ£Ößuö,ðhî.Z*©¢¢ab,bZ£ÜUåv.äCoBýý~|_@ÖuÃA :O~ äåZ@<,Ö*Ãbå@îü_@ßüß/zÜCBCUãÃbör~£|,_|~©ÄU£å>©ýãvo>><+oaBÜr.u_bZÐäZå*|aöuZBO©îª/C,~@_:Äu<_zÖ+O/OO*h¢+C>Ão_ZOvý*roÜZãö_ÖZhb,ßvU~bãðýzÖýbýîî+ýo_öÖvr<:aöO¢>o£/å~©O<ãÄåOßbUZabC¢©z@ÃübÐ|ÄÐO.>.<@rB~|@ãärª~/hUoaäbýßãhÖð@ö¢ÜC@:©,~ÐBî>_Bß/zb,ª~z_Ä *>~£+/Ob¢åbÖÃoîb|@bC+_îa,ã©@î* u,rBoßö*£Ð/ðrÐâî<|Aß<ªöߪ~U_Ü£hv|ã+>bÐUªo/+ö¢ÃZÄuÜb* @ÖÜUz|uÃßåbZ£¢åzCãÐ .¢AUaOðZ_ ýªßöbBªUÖOaî*_Z£ýb,,BözaîîÄ@UC£ðo>å<>Ã~ßÃåb|z>Z<ö+räîhubZÜAo+bý£_bÖä©ßoZ<ªÄräÖÃ,ªu~åîÜAavãOÄ£/.¢å.AUÖ/ßCrð+z/AO_b¢_oÜZ*B*ÄÖߪý*ÖA:Ö* o+OýÜ¢höü_Ö/v¢*.üåÄb¢U@îßAA_>Czððää<ß@a£ro,oý+ *a*b|AZÄîãZoЪª:'), (N'@.Öä~:åbä:ä*î:é@hbÐå£oü¢_*vb~Ä_ðoäð~hÖªÃü.Ub>+ÄAðbzß>öäUßUbB¢aZÖ /Ö~ÜB,,/bîUðîho£uh>,Ð.ra©ÜîÃ@büC<ÐbªCvãÃð*:Aª îCå:,åÜ*~a|~Cz>ÃðüöC/Ob|@üZß<+üo, åßßb©b Chbb_o@ru/îÐA ð/~ýåuA,OÜ.ÄåäZäÜzAa>üßÖªvö*|ruÄ~ÃAßö¢ß+ªv| Z vö,Ðb+/bBýã¢.£Cî,ZãOã:Ä©Oª©ý£©: bbã_ößoäv_ªbü uovÄåZßUÐ_/Ä:./@>|+ß|ü|hýîzã©Ãä,>ÄöÜOäö|bzrZÄhßCO@:Öã*ÃÐ h>rOö~A©buÐ<£ £ªßÜvÖv.ãbO©hUC_hAr/A+Ö+BÄO¢£ðB£@rßhA~.übУCaZ/ß|>BÄvrZZä:©_~£Öðý_oð/ü@_ª'), (N'У+ßZ+boã,+zî@Z~ðå,.üÄC+~ü_Cbßü|rbävu~ªBªoãaîÃö¢Äãü*a@î©Üaöüb>bªOß*ª@zz<:åAð,uãª_ÃOO>uC.ßzã*bö¢:|C©oa.a~+Z_ªo+åC£ /,zäBüÄðßr:ö.@v|*Z_êCêßu©>v:/ÐÃÐ@UoÄaÄ'), (null), ('ßC.äA*ªaª|öÐzÄÄbåZr©*ÜÐv©aa.£vãv@>å<+*¢o©/ßOÖar_/£C.u,ZA,orA O+*ÄÃrßßu©@£baîü|>£ß<üah.AhräBuoªãuÄüã@~ÄuÃßB/z¢¢ßzÜoåîÖ©UvhröAB£ýÄ_ öåîzu_*ð~åã,£@¢/ýªOª:AÐ~,+ÜrªhBÐÜZÃî,:ö _ãB*/Ö|.,£©,@ðåîo ðäÜoz/ÜBª*ãÄb_©ãbªö+o¢ß*ßü<Ãrä.ÜÖb_B|,_©| ou~êCÐÃävüÜOZb/**öBîÖðböüa|v©bvßß<~ÖB**ö@ýhßýåUAhArÐ<.,Z@Ö¢Co.rOÃü*ß<©vý~h,ÜÜUöBÖ_h¢å_ .BZu ÐUßBÜüCA_/|:Ürh*A¢@Zß_+¢v~zh¢öÐr:ðU**ZýßCî_ üÃã©.ý+:Öö@råoãO©ý.ªÄ+aäüßýÖ¢ÃOîýA£|ТТ|v/@,bö¢ªÃýÄ¢ýªßbÖ¢rã>v/AUÜA/ö<:î'), (N'zã_b.b.bäÖîC¢ü/+ÖÜ㢩o*CåÄðO©r_ßZOZý@Äro/:,Ãhhobý|ЩbÃho<.OÄhu,©uCß:©:äA|ÃOuÜ©ýÐ|äOB<äЪbh@B_>AubÐð,ß//hvAZr*+u,_ðÖbzZ_¢a/_ã_*,brbbößîB@¢ýAb,ää+ßÜ/ä~hÐÖO+:îð+|ð+hîZ¢üü:,_Ãz@_¢~©zãÜð_>b*zÜ//r~U.BÃvö|Ðãßüo*Ãüß+~.v zzäöOßAC.ãªO~:>bhvU<ߢЪäOhBöß©ªüÄ@o*a|©|Uba©öoªoýuäö*ÄhÄÖOüzbÐî.î¢u~+/OrãªBð_ß*ÃÐ>îÖîZCAB~.ª_+>@O~Ö öaß|A£BÖªuoöãv~|ãh@¢>O>ÜA~©råß@ää>.Z:hÖ¢+_ß.ÃOå©åðrýrÃßvU_Ä,,uªüÐðbr¢ß©©aå£ý¢|ð:hß ö~@£O©hAî.*Uoöä©ÜhÃAbU@ýzA㢩¢vv|å£+rvå@>ÜÜv££>AÜîo :ÜUÄb_ hã>*jkl©vz>:>vo_z|ÄÄ>ÃÐ ©î£<îBZßÃv¢£><ßã,*Öhü:Aåzä.¢O|_vAC,vOßuA~oö,ÃßbÖýCB*ürÄ/ªªªuär>ÄB,<*./:ªhÐ_ß@£O<ß©¢b:OZß.ü£~rýO+©uZz Ä _£>uU£åîü/C/O|.UðB£ö:ßå,h|OoZ+åhB*b/öübO@bÃoB|ýßUý*rÃÖåÖÖBbÃ<Т~_ü ã>ýZöb<.,BÐz~~+ðza©: CCß ~å>ý+Oz/bÃÜ¢üaCO*/b£ªª@Uýý©£b,U|ýC>ТuÜhöv*:/Ä>£îªo©boÄý*va+@©+©/r¢ä>,|C©ðÄ*Ubßv>aÐ:u~>ã,@+*u,¢Zå©AuB£h@Abah/*ÐZ:Ðå>öî/äÃß:üauåvZ/<~A~Oäår/O|+,AßBî>@C*üuo@zOo>ßoÖãaåovä_A¢Ð*äbå©ÄâAß@+o£ßAü>>ª>üåOîÖý~>Üa©ð,ß,ߣ*ðAãU<ßav_BZ.UÃ:ÃÃbCBCå*£ª@B/Z¢ðåbãa,/aZ¢Ð,ÃðÐÐ+ aÖßCU£å|aÜß.|ýîvßCªh_Bv©ß<+Är/îåhÖ.@ãߣ.ü/+©råbÐ<.h¢CUÜî>C Övo+~äövß~,/ýAÄ<åoßbßßUªUoBüooöb©rî£. ¢ð~Z|O+ãb*Ð>~A+bðßUzO>oßhhßßzzhbb|_å<@Ubu.bÐU£|îÄ¢vB.ChCÖÜh/+_@Öu£:a><~.|ObÖ..|>|îCÃAA©ö..CÃ+ß©©î >ªr|.uAä_uA,Ä*u£åªB*îAÖ>.äBîüZa>å£O>/ðAÃÜ:ÐðrUbªzªÃö åhãÜТ@¢/v*åý_O_Ä_||,|/ZãZoß<ª*~boý>*ÄÄz>b*r,AuÃåbªbh,özÄ_ð/:ÐhãîÖßß_©Oýãvbzuuîßb:ð,ýZ:©uÃßßßväÜö@Z£u.hrå¢uäz¢B>¢C+ýßÖã¢Zo~äå+O|.Z+Äðv~© Ä>+bª*ª~zO©îäüO©©+bßv @/£:av,|+@Ä©BU<|©ßýv|O@©_ OAvî@ãb,ýð.o rÖßhrråöOBÃvãaÖ ðüîÃB*Z_Uãhbo_A*oÖhªð/CC<äo,~Öoý. >Üð_ý>¢bÜÜCßbÄABroüO£ýåÃ@B©zo. o¢ãAv/ªÜ¢üä©*ý©ß:+<_aAU©@åuaîã î*:üOu©Ü©ª+ rÜ _ÄäZuö©å h,o@+rªåÜ£üzåA<|Ü~ßö¢ÃbåO*@oª¢+u__ßa£©+Ð:*äöÃ/ Z a©:vovÖãÖrÃ>ªO*öCh>bOÃãÜåOA+_/,:Üã,ß|u,vbOå<Ãuão>ý~Zãuozß©,ýU,z ßuÐÖß|,åÖuýýß+B£ åä_äB¢|Ãbüåã.AÃå|©<>B*öªÃ_ªuo>:~У+@Ö<Ä~obЪ>b*rzCUâou@ðöo_A*_~>zBÖ©ohbüå b¢*B¢r,îbUÜü~.äªßzo|ß@hBrü~_oýoÐÐßOå~ã_*¢:< Ð*> ß|zÜß _@©åAu+ho.Ãhß<~~Ãaðbo£¢|ÃÖÄoåbz,îaBoÐ:ð£+£_ý|_Zv@vã*Böu_äBOZ>uUBBzuß,.ãUbvÃ@C¢ah::£¢uüzüÜ|z¢v£ho.:îv >åB.~vßUÄ.UBAãb~ªähaUaßCrü/h_C©ÐÐßö~_r£Ã<Ðbhb_ußb~ß~Övb*rå:ÄÃ:.ðÄ£Ðröo£:o£rZrÄA |_£BýrÐAbbB/bo@o *üäCv:ßßöað@rZ|:hooß ð@ðÄCåbu+ahAüãÖouZbäZbOß@äÜ@üöý++a/:ö.h~Ð||aÜOAA£ Ä©Ahv/ü|Cãuå>rzhýaßvb@bBĪßz+obo¢Öß~,å>uýßO+~výð.+OAr+Zrªð/©¢©rüÜbvÐ,ÐÐC@ªvu*Ã@/¢ååaüböU<ªü:/ã~z¢rª>aU_©¢b>ªBbäî,aAÖÜOýÄhAvÜÖv©ÃAö~hBA.+*u+å_*h.Öbb/ßß@:rî*ýýÖî+.ß|o:Äß+~£.|ßCoßåãaÃruår.hðO©/,~za<ÄÜýöbUÃäh,ü£BÐ|BhÖrOOð*ÐzÜ¢Ãhvãvߢ:aîåü:>+Öß:>ã:C*vßBãZÜ.v£vªýÄå|Ãã:Z_rUßÖ©ßO_vßöO~ßýaOü*©ª¢UÃã@£åUÜ£,O|hAA o>ªåaß /,ðå_@åCªö~ýBîooZzA.zªU,Z/,Bðb,ß>ÖoCÖ~üÖ:bC|Ãaa.ª:rðýðaöZv>aüoa@ZZÖßbãßh@ZöU<ÃÃv.ý>:ä:ß~Ðrã>BüÜzAªv.Uu+Ü©b,ÃüÜ:~~uªý©|£ßZOv*CaÜäåuã.¢ýäaðöUB/ãhCÄr|ÃÄO~B~oÄzÖv+ýߪa/|h>Ð>buubZb/bo¢î/boâÖß:Z_v£|UvßßÄ_|Äãr£ö+AzBvv~£<_Ö:zßß A:üß|£ßauª*ªbOªä>ÐvÐ>*AvÃaBÄ>+@îÐUÃ+Uã,Äuzå£ðü~Zöîü|@bß©.ÃC||B>äB/åß>u¢£*_@r<+*Ä.ßܪ,ü,£.aö|ÐßoCßa|>BßÜÄZzrü|¢Ob .hÐ îvbð@,,.<ß䢢Ab bÖ.BßßîuzÃ.Üî_/:å.Z:u+Ã~orÄu<Ü@ÃZ|,+¢C|©*ߪãü¢@ð,.ÐrÖªBÄbãðªBÃÖ_oÐ> obßÖãªB,Üã¢_Ãßßbb ö©:Ãzßrü|©bbÃUCOÖ ~ý*o@Äður+îzäÄ<ãßßä<Öa_äb/ Ãh+.>A<:büÜoÖÖb~ãbUß*~ä:z Z~~/>BB+Ubãö,Z+U/äa©CÐÃ/ÄßߢüBZðCOÖîåª<Ãb+>ýÖî©ü.Coý/£u|îhÐÃz:,hßîßr_<+ß, ~ÐuéßCßräðz><üOýÐäÜ+ªý+räbv_r<. u*<¢ö¢öüÖã>ßУ,UC~Ä+/<äßvörå*:oÄ:ÐUBÃ+a.bªzÃß+ý,zÜ'), (0xE67CD00C1929F775AE525AC74900F156D39556047D95E9AF5A62E48C3F910956E76F38DBEFAFE500EAA8E60464EF10B45BA1DDB20EF506519221B1B6456B351C4903E0DAC7166724B0561AD5AEE54B6B522F319DB45648F168E748CDFD2FBB7E72C9BB600F35ED443AB902B8DB30A2ADD64564153A9868F2BBEE72DFCD9926809A9B63E52AEA5C1C41EC63FA538F1538459BF7B7CBA544DA60C8A520C30D77A092821D40CDBC83EBE948D44E346E9F2BD83A9A32A26FB5F557888461453C583474C268D172D56A88170CCE83D1F5A5F2287947897344FE23CC28E9443821A6ADEF9FD97205CEB902CF121B96A0322361E39239CBF4CEC130C4450449EC2550F5652193311C32EC5AC044B9602968829A048761A5E8DAB921DEA9AEC0C96F16AAC125307F9EF244B0A5DE0BAF1460065BC36A4464C4AA0C8B68725372842C91502E0F9F043702FB1243B0000ACE090C7DA352FD5E2AB1E61718A4172C9ED12C784DBB8005C10223C06E322113AA02BD5E66D5CF322F32257C2988EB93EBCF74718487BD13), (0xA02E3CF0F890D26C16E7B9C5C802FA491A9504DB381790D59EBEB08F2345A9D55F182F03F2422DEB571BD4AB3209AB6E8A3EA27D842B83899D67513AE04249D13DE366AFD2F656D86718841D42E4A294134105E5A22B503395A5658AF0F30B14D2036D4EA3FB9C93E7CA166CA66647B9C4BC279E3D642F1293331A2C90CBE8740C704A3E7754F117A572FDD815E38D2E5EACC533CB6DD76ED45BBB6FE06F021BE1A160361B084170CA0FF9CB6656FCAFA6ECCEE406B4A89F99DC6A1B998137356FE2F674835612566A5568BC730B077D5F0BC9F4A11E152DF8C19C3F9D26D749D7C35B8360872C4FD97779B04BEC2B8DD4ECBC8DB8439451CDC97CC2B9D3B9447D1FE4B0B0831DD7DF7A1B29A464E10C950F6AB06A4990942E0AB6960B699505BE35332C077BDD50CFE5AE3E276AAC68E86F2CAA6808DA348E4F81A5CD86CB75E4156B6E31B5041A3219E1849A526DC45D4DAE9C3DEA), (0xFE9DB7F93783481A395912FF3E37326A11784F26559A3CE2BD487FD82E37F979B51232174D20FA96996A60F95BC41F167B312B724D8F066461D43CEF0470EB025F98492B041B1DF07DB88DEA394287F828685CFD0C872B250CCEB578E40A91287F5E9AC27BF31160143AF494021C2A1F4C43C69B14EEF5D86C231F3665A40C7227646BDBA8C57D3457FBE8D1929723F0A3962CA043F5149168C15557D4DBFA702E816D9DB04F7687C6914418052445D5002E93CE786B2F314FD972E67026607B0178A31029853F5320A4DAB2B0FC8B447C7F56A5482BF8C2523B4ED7DD9017A031C8168D8134AB7AEF3FAED3907D80534D2E6AF0CFBA33D580E0BDEE3768768F8D3A80E7E5FEC347D4DCB6087D2532D5BAFA89AE2627D07795410DA077BD4287C91E4556FC986D4F6B221CF2032B575AAEE8333DDEC76966690952A3F122D0169A2F3F5EDFDBD9228C3A43030ADE736AE9B2F28E8A05A802B5DFECF346CA5D49520558D4ECF97BD20F11B0A483655B8B95E8BA3F2F418C95863CA900EFE5DCC2DCFAB105859E7EF036207F7854047E4F83615D5D101E191078C34EAF507BE32934EDC789B45605F76AC9080FC1134082BD597C8E887EB2BEE1A08DC250CE9FBB3C5644673CF59B2D5B65F34615094F6483CBF1F7FE55A0B63A09A814C843A79B2A4CD36BCFD845C8BE4F32228A6CA8D751283F84DDA8BDE7B58D2C334D866418BE581CC836E394AA852938AE227E2BCE60D0C2A00322BD818FEBB542AC127B37EB1A633250DFA16D9395FEB46F0EC436625ED27CC3C4149C9A9A394A2D52FE73AD01C3081BF87D802F550C6E23091180267FE04E40FE732605C698B5A6563F41968B066E4BBC1B69E0514D6EB7A5789089B823AE72AF32AF8E9C025460C8DAD815CBD79703A2356A63766EEFB0046F5F4D082CEE3291CEE75956E0AEB9C70917767559ECCEE18DE682B94AFB4143FE892DA206589CEBA584FCF03EACC287B19C6D56783BAB82916C7A456B7946D2A51558578116C0B17B8ACFD4F0DDA2E024FB07AE8EEBCBC3DDAA1199DD57802B3D294A29546A059ADCBBDAED6BD692B4CA992070719844BA4A9479D60526D4240AA397C692788CB9F56DD1D210DD5706185DCF433610BAA5E590DEBFF12F95B6E7B6E2C83FCB21510D667A04C671AA6C3D73BEA85790EDFAE9F1E1029ACDC8C6D81BEA59FB8FC74C3B7D36CF96B5DE73E671827D71ED5E57C8E8DE4DEA1EB7409EB32CAA865071ADAC716CD95A1E6433136D1C284A4A54EABC939012B079611CC5F531E28934ED9500D4D1FF8185FCAA83AA3A7D028FF5535E41EDF2BF5EFD320F4F1464EC82AADF808628767855693797E68E053EE41A3500DE834746FAD6A1D79FEF317197BD01005BFD7C677FDA09D8B65BD9D0F7F32B35DE640EFE629985B0869ED96537C6FF288C04E3E79DCE8003796F8F9FFCD1DFABC4FC9233AF039EC277CBE0E001A3A0EF5CB043F20F43970FE30B84F209E6B3B5BE2DA13A33CB798966216FD2EE9F02D6CF9F434C8EEC9B80658350A47EACB891182A21D30265BC9037B98CEED3C5214308AE2269A26727D19221D4B07BD40BB969DEB9C37E2FD469E3B214D460ADACA0610C9BCF894FEEB0034F41E1910B1562ADD285F50B5DC5D9DAB985F0535271E474334E6E393B3019EF09C02EEDF2D8D79DB1278D28B6950347C2F4D0C9FE5DB0DE5C6C5DBDA62971A26B06019D97EBE7E1AE52A12BE4BBBD9E4A2776476050F0AB0F4F91867A1AF787B5EBBDB09366AFD60DEE1BABBC84FAA0AEBF727EB32A421A15568D475A6166935B1976F9FE0D0AE477A039713544EF8B55F0D7BBA878D48AA8A29A3DD8687CAB888750A20E01A2A1B58D0712F0D0E4D16602F16A89ABEAE245EB505B73CC0B0F248DE8ADF44D7C544D36051B71C199D7BDC9D7D6761122DD9D6D5D22B0462DE981F7EE63E836DD19859D1C52A5CF718352789DAAF43598126B0B1086F059A307091C9979D236EF87EBBE50D9F5CF38CDFCD9D038A883F44B5FDCF7DC2656292CF915498836F7B01B8816BE36E5BE1D9CD3438916896B5E86284D1AF63F1360949523E0DF85AF970529B4AF91C4BD66A0BF5B08E2CD12A38EB6C35FE8DDBADC75B529A1C1DE3D1623AB84ECD4BBCCC16BE77937E40A7EC782805128C150AF276FD73ADB9B1BA4C28144E5364925CED2EA02F3016383F86A37621F408C1554D2FC5C7DFC81F0265042B7B59F25477E5CB17F3EBF5DADC4EBDFCFA438FB64356CEF1239EDA8D251F9DBA2BFACCD5945F0E4C38F0DD695754F98911DB14CED54DE8149B0120D91B4DF2E45E3BAEE171E8689B45438D528955A9DEA5416B59FACEE4DE12A84A833E2530EAFDE91B1BA608073972798981C0959B45575233C9E2A8E98F56C0DEC9ADD56D10129254903A8E289D4A21D77135531D8D1CF53BEBF17708550F9BC4D5393D8B9D0C697F3E310B0AC929967FB0C17849F3B351BCA899812EAB8A0F90AEC943640C964A64DBE3DF4C01FA62B26AF757838741C121E780E2F38B4AD3A4317A6C0FD622631A87037E1FD405AABE36DEC3A4327C095CF8218C8BB346E981002B1A978E52EC38843D0C83D3B14DD1D634CCBC872F71B5611F17A495E7673019ED0FA8FB032FD3E28B2FF57F757946E3BAA58E8A3D09E0B965367F4B3792ACD5CC69E6A194D6D304E8C9FBFF8C35FB95C0C0EB31E8B5ECD31EFF95DCB098BAF8832FB30B92955ED3D279A1631DE13D2F4AD97A76A76AED068D03829540F644401EF37C5C72E0032B72176F6F1479C52DC26691E72E34412832AC8E8F12B982DC2551541A74D0BC5AC64F049FFB8DF2034E54D2EA646D21DAB25419D6518418C8848339B315AAB8E1AA3710DF3FA12CB4AA7B30BDD69877B82F895810B6D5F942364C0B78443EED939BF1302D5C429B1137652BD6435AE1FC0B81839C52A82AD43DCEA8F395A4707B8DAD21E5585A6BECFE46D951AA230EDB5A1F6CC2AB5140F3C66BEF9DA9977B92E4B058A6390C93B115A69E0BCED92A1ACFDDA97637BDC02C6C2E1EFC6ACE4356CB466CF9CA68A24D8BBBAD04C33534ED31C4DDCBFDF55B36F02C3A0AEDA74657634730786C3040672B5BFA8C10CB6926F921BA95F07758D5FB35F9AE2E976FE46555917C04BC80F18476A0A20ACF1634B31301BBECB056FBEE6A7D3646923893EC1626CB29FD124CA0B91189D6A6CB3C1FC4FB0B85A3F7A4FE958D9A3F5ABAE23E0CB5F4A85B0AB5F0C51B239EDD25379F411671A73D0E481E71DC846F880D560E3F4BC9F0D683B4CA350AB098D4161170460AEE34394B010E7DD6368E765678C7B5256F816B46B8CD51B762224DBF4A6BBB14198D1F11C4E44ABB72F05D3643EE91F8D3AEA690150F4220D281E8DEC0CE9BCAD3523CFBB893607B36AFC3B8602B73739054DB9BB51AFF1A3AEE3F430B7BFAB4648252E1A19640304E2B59753B89C0B70E653E7BE30005B86322B0CA642D6FCAA51F53DDC881C20A04AB5D99C189DEB12D8834A63D8EC1547CAA8E8ED585DC10BB8EC01C25E2FE8CA3346747B27BF6D9440F9CDBF8C98D165E0F512DF343248ECF3CDE32B9C29B4A89A7F2F92789A200B3A53AD5E8F027E1F1B9CE2681D089601FD878759DB42F8174524240D693FEC45D506A5E085EA5DF14EC310FF464C8B91E92E94F012C62FF85B96196ADD71B6DCAF9C921663B67C132A960B1732F8D0F89993233AAAFC330FD6AC84EED0F213DD0D3450A9B9752E33B281C67BBB18C662C520D14A4E7C31B369833FB7318D4237832D0AFEA8263F2364EF882836B753BEE62229B020C98F90029D4035357602253E8EF88D0DC8BA9EE1AEE55EF4087CB12F80D10F639217BA9E79FB0BE609EDEEED62EAA7BFC6B01D678ACF72E3309CF9208E05B5A5F3C1AC773DEE94CCAEB8D7C0F770911ED5F169CFB3A7D9C2A4D66DDD01EB57033848FAA13D3082D71C50B9D2F7B2ECC00BDB4A9C9BE5F24CE7EAD26781B7CAC360D388AF76EFE1A46F92B362EE07CAF2EAADD126A0BA675356AEBA535E1A566586F57124293D4A1BF9A62C09328F5EE01FDF7DD3E5A323A56B3558C8358E46553C4DDCF895A6C8AD63B62DF98D5E20C64FD9337E9D8280E2D2CBB8F4E482E56B60D7CDE4B3654A7816CF702E7629170D1491785C5AC7B7B9CDFA26C9EED3C8E0D0C299B6903C13EA8EBB67CD11516BA8B3ABE05209891098201316B83F808A42078F5EB48F617CD77E8ECD9E5FE9A77C8E7D1542F376D746B101957D255AAA0D3124C682F3B619522E09D47BBC7138366C9A29C26A474F91B817038ECCFFB123E3BF6D3A232588D864C314EAA15B8A3FC85E108B30E8A2EAD534C9DBB38A852F57B097FC04FE134711515EA73365EF5C8CC4C66DEE26F2FB1C8365EE5BAD25D93EE492F0C38D3AC94AC979DF8AFBB670456D4EEEC3174130BE9CE0819825EB642C84684FD2FE99FF89FC2224AD137120CCF5A9EE5E361526A2623227ADB93025DD14B20593679D46D44F65C7F41C82AB2BBFB4A37CFD06F66F42AC70CC7251D0CBFD4699606C8D6457621A0ED14E3186DF87FBEE048DA9E00DBC9650BB2D7A61FD94FBF7D6E94ABF31504B19E3F72520102691447663CB3E53668CA4D53DA82AE7B8113C5339B0F53C3CBCB4418FFC1596753F959B35EB99C8BCA46F5DA6E9F4A721322BE6E8CDD7769B0839A717FDC369760D60FD138EB1CC7773969540989553C70C1F5DD12EADA7681F002DB1F2B1BEE006E69988F79492805E6F753641350272E6DF0BDD6697475FB894F38E841A84C2D8B43AB1FCCAD0788DDC72BF387126E9FDBACB13A6E0796E9E39D062A003FC44EAB35E8CFB50761B0E924F8A258827476E0990C94F711CF73BCB12C2FA6ED78ADF2ED4841399EEAC44AF041390EE49161288F3977232F4799767512F3DB321A0BBC5AAF6B4A233D41BE4859F6D08664C82FCB0717A3F17AC395AEDAC48BE6E918E6357CB44536270551F7C8EAD550C8E0005AD4102AF257CAEFDBC59B5878C5C75F31009B19B082F9A401C5BC388FFE44E5EAB42112D8EDF3EDB1C469608BBCD922019B94502DD65FC7DA7C292CAB826FED80A56DC494A476530CBD67EC29891844FC9A26E469E4B8145469486CC4C7322F647BEFE64F048D5D254143706E63AE4153D430116B7B839BED49603B6C199E457B3887ADA92205E80CD9CF189137A5E0BAF708E08710C3E8F843F8F59451E11BB30E0535EBF0A821DE580481AC6B0AA5A38F706500BDBE5A749EB555390043BAE8B36593327004CA5ED7023F0C324C9D49435214D18C0B054FAAB14D4B42F8DE0459A8F8F56763237AB61629AB8F4E3252180BE5AE2EE96CA8605397BEB77F0BEE242AB2994397E1D03E9A2B65D159B05C8EFB2337133FE5703C409513DB64C3370A4B77649B991E802A056F94BDF6C706934B3FCC4BC4CAF445425D02F2DE04C9D6E45B95D25BB0E5DCA31D0DC040B245798E708034F6FB4570831F594C0B8D5BF0A5BDD9AB3134378A49EFA8B7CD33F4801789745D8494DFE916155F3C67A9D115C11D2A82E8AA385A38F5FB17528DB34F2AC9348218FE7C10EDE0852BD50B22A01E82F6B01961A77D411A148E99C896886200119E754EFCC29109A4F8151C753DD34AF8CF970335B921B7310EE9FD772549FCB9D4E9843ACF86341F0FBCAF582494E6AB5ECFD6F15ECA586CBE0DFDE8A3928FAE1862A0444F10293962E435FC726F0C69F3421855730B5B0A81178CB1985B6B6D3CF14FC1E4925C4E96AD8E6A946BFA4EF193E5617A2A3B0D07A5C3278377A11788C8CF711F4A7560E5D9CEC57CF066252D3DBFF47609E302C632CA4EDF24BB2EFC76E1DB9C792FB71E747B906B7580174F9E0A55B7ACA17ED5BCBAEC703691B12E9FC9060E9A98B40E08E5F18E429740A2B2FF312A65775FD572F5DFBE4346E7D2BA71DBAC8A08A5054647BEC6AFE083256A49CD375086C92879208BA4B905CAC20E2ED3D0CBA418AA4A3BE41DC899358262BA43F979A08233B8A323698D005C408CECB8811CB259C62112ED14A2BB6FEFEB0931FEB1C1485D9C90281880AF2D49EF9380DBD0B475B0508DD866B36D80FD43437E73DE5D9ECBA45AE47C8A413571F5A3350F2A940F3683819E23F8E1AA3F1F2AC53D30A96B9204C52775CFF9261F485661003871D2BF3437F05CCF6AD2C2B0B56D6F7C08414C37930A656C89669A5B7EEB927099F69D5815F8F8B91EC2A9E264C51A9BB6A3400524C895776D42AAD155F1407F304216BEC017560F488328D0507307C45C0EA4DBAB9D5BD16125EAC34E27532D822AB212AE6BCBAF4D30BC91AFC516FA4AE685575C64D3A2F6454DAA3C92B1213FFB4E35B0F525E032F59E6AD0BA21AC0EF08867A20BD11D471F1C691E1172AA7F9B61A476E13945C0951456C678C24C13A1AB4C0A597F342A20EEA1E8BCC22182E3EB35588D252DB742A70CE77A46DE4CD0557C6636A0261C3D8A45F2876D03C2F2C3E28D8CE3868C8D84C7B2624CAFDA1055185755BB5C43C5292AF2EF2B2FD59339F4B66440BFECCEEFE8A1D863A9E0EA6BE22254BC7D37779EC863C8939D5254E21F2857F975CFA52B8865C2AA6B517F4A187348FD80E6CCCD3ED5884C243B42965CE6447188F0F6128D29240764CD3366F47E7B2A095761386B9ABA904759075D133C5D750CFDB1277D267057B2B55861921157A5B0288CF5851C15FE3655CB3421C6E4287FBE59F6CD53ACD2E71975A63248FE35F151ACFAAF67FFF0E7C2E1275B4C35FBD12FF1E3B760E85C7BBA0E7B966FBBED579532C029F98917CE690EFA628577AAD389D502571A7E9069407EF559846A7806F3CFC60965C1D7A6EA155E61FDE9F63263980C9AA9964D26A256E98A93BE4A0E86E37EB5B1917DC80D6B6CF5203E7B5678B2E5EC5DED6D5D829F670ED85D132BDB5FDB0A7B3070C22A449D4E29480673EB9301D0C85DA0A9861133223A6EEFA0584129D05370DB484223C219401F343A98F323455B32538DBF217469FD5E97BB54ECE5E82E36106AB7B98EA49B875976ED0889374B9A5515FD9C11320C714AE38C06C463394C1C62D2B88D91A3AEE237C80D7CF4C5507FBA97CFFA8214DE5E466EAB2884B2F63D90FC2664831CB3624EB9E96A0EF4562E2B9709CB69518A5DF46A472308766D74D1CFEC08AEFBECADD45DABD82B745F52188D0CEDB92AC43F61D86028C59069C84C74984F085D7F3FAA5BF71BB5B222800AE51A8B797FBBA6FBAC96D69BC3D843F3D38BA6DC1049CB0DCD335D23B889BFA5D01DE075DE4ECCB8F1435BB6A893E673B317D2268BA3FA9B5F8DBC3C5E734322E720BBA5F7CE2594CEFDEACCFE0455295CE97090B7992A2C1345264092805A7DF038CF77E8307BF4F23D679DC92DAD4B2882EF7502A27B5E068F92A2A7D4F23E936CDCB544DD411C6D8B9E7A219C62E5A7DB281FA0E57B4DCD717168ADD95D2D4B28FA5C50E8064B31D3177714012C6A1CAD0ACCACE29DBDF18EF7C35BD86E943E712F08920684BFD4DCDDCDDDF439CC55174C00CE9070689B4C6AD1F032EF6964734892D223C806185AE7D004CFDFFD453B7E448C6DC5AE00C66D45ABA2CFA1FD74695AABA6EA314F45E873A8A053CB6C6D9CB4C49ADCF6ADAA820BB6726A659B45D2805685419E414CF5467551F5607291D93E160AED52A772ACF114EE7ACCDB82D862CDC374E71BFE63779586715BB5218914A92C4F80688FE8E3E8508962C2386AF2798292AF2CF21217A765BD20F1514BF3556623BF33580A4DEA910ECB7500B56D1B8ED2228EE9E7A70A37D8F2C2B7E28704860D5C04BBCF218844B49BF356A296A05005728F19647B7E8CA50B8F078B32AE77B6EF0359585FCFB09A4A255BA3B385324272A27007FB2181DD8806B39280C981ED8B9FB39356F7B5B2CE7F2A4622D8F1764CB508803E6FCBCD717BD0590C1E1970A37E2813C19EFB8AFCBD397C074BBABF054D55CBC101AF1BD3F621DB276CB6B055B992A4A0EDA4ADB98D8371264FB625C11143BEB85DAFA1CF1C4FDB7D2063900689165DA9060E2798B802437E2DE5843FFC1A0618F8080809F0E594A), (0x09929F37AAD39688CBB131C25F04B6C339126BB9B71165D770E710E43B8207989BF8779298AB3385AD77F5EF30CD207CCADCD446DE24DBF82CC7C6C2C2B24C49A99926678D242A8EDEE60C3F1B76A7A3C7931A5FADC0B9771D7E65D1E571C2FB2AAB4597A7B8EFA6B14667F8189BDCB51F22FB2E97ED9CE8DFAE490EBE59A96D231014703010FC0EA474AD6759C15F81A1AFB1C27594633D0F5CB7F86EE1E7579DFAD407866C840F26EC8A233F358F1D4FC86C0EA8E6F78FADD761D458049FC38C56C95FED58FB352BA19B89093FFDDACD99A8A674D9AEB602445AAE0AB0B7224CC797E96B3030F7CC37E3074B6E856DD98706BE5BF84FB3A7135DA8FD4C2A7AE9793C42A8146E9D69B1D93CF5A76B93BEECD583AAF9C75378E34158D388F9800C691ED23243C4C5186955A91E12BE00A8C9E91177A7D0EFB2E8CAC5D216C9E0B859308C8898617B280F6A40A41D34652541AF099EE80964992E1F4978FFF3019F74F1C5E232770F686EE8673D8F4B94B364A09166C042CF50CBF25A791702291C68A12F2B6F83F3C9A0A130FFA12709E38A96145E619BDF322175173F1D96506CBF4BD4EE1B6944E1ACC8C61E11D0AFA3E877EE81EECABACDC1FD0AFA6CB4AB0A50C43F55531BC7215232B298D5C02051C57356A6A7CF7DF591062C1E5E4974F81DBBCD4D90594FCCAFCC2FBB1721F801DCB934F85D046281464AC44CEFA9C208BDB97B19F2D2C06C2389F7DBA0C2DD6F0E2B41A5157C9B18594C07469503DD060926FD5EA6DE0E09F9C8D4D40D87E1846C553DC4681DF3411E62C0A6CB79D720ACF1D179C47FC82F1C37AC4DA7C60BD26B83DA3FC5189DEC33BC3F431E683E7FF1B4281CB567BFED8C0EA73170A69A5757EE3A489F975B9353E546083F8510B4F82C5BF39EEF1C03C3ECB3B6716C7C8D21E8EC302DF6E05A5895C8D021B6AE06FDF238434AA6B968D13784B2E3A421E668B9E65799DF87024C019A09264CE20D3EACB97E3438427B2E835FF6712E76B473E26768D0576D1D6B35F7480CAF418454777336EBA3B230766B28158091901D8BE69544E57A3DE73F9B13FE41FA6F7E42DAA1FABA3FC8D02F37F1642F579DDAA5DABC251AFD9FDA3A8CF74F90B4EF7BFCA9D3A5EF95624B1DC514AD88D8B8E7FE3859663D4964443BC6C02E4878407B4875688584F7EA0F77710754E9F15261D40F51575B883EB2448F6A29D53402A585986512703263064E49EFCC410F5B49745F593927E920BF37B541F58DC13A426E62CF508B3FF0A1AB4B0811987270343320B476DBC97D9B78A5DBBBF16E798D0FAD5DDF3F0BBD346EB88DDCE00F27C4440CC16C0CC367A5E433D7E66435B03DD17A01EA1591F428627F07223BA1BB697E1676E5AD0C804B46B7FA0B33D7D03807500A650D3DAFB31799098DBC446A42786E674EBFCB90C5FAB6A45D96E8F4), ('00000000-0000-0000-0000-000000000000'), ('2705-07-09 05:25:19.800'), ('2062-11-09 17:05:00'), ('1/14/2009 12:03:07 PMThe quick brown fox jumps over the lazy dog0123456789,.;:?[]{}()-+*\%^=~!@#_|/011/14/2009 12:03:07 PMThe quick brown fox jumps over the lazy dog0123456789,.;:?[]{}()-+*\%^=~!@#_|/01'))"; - break; - - case 7: - $query = "INSERT INTO [$tableName] ([c1_int], [c2_tinyint], [c3_smallint], [c4_bigint], [c5_bit], [c6_float], [c7_real], [c8_decimal], [c9_numeric], [c10_money], [c11_smallmoney], [c12_char], [c13_varchar], [c14_varchar_max], [c15_nchar], [c16_nvarchar], [c17_nvarchar_max], [c18_text], [c19_ntext], [c20_binary], [c21_varbinary], [c22_varbinary_max], [c23_image], [c24_uniqueidentifier], [c25_datetime], [c26_smalldatetime], [c28_xml]) VALUES ((-1147400469), (null), (17834), (571339572), (1), (null), (1), (100000000000000000000000), (0.8052), (-922337203685477.5808), (0.4847), ('OßäÄ*aUAZb bv@<å~üÄa£uUoÜåÐb:>ZauaÐßîUhhýå*/öÐÜu Zª@åZAö|Äöî+Ü<+îýOåZA,ÜAoÄu/ C~h~BAå¢Bã©ÃÃ>Ã,zB ö£Ã/aU,z_u_~bãÖ£îÖÜ©:>Zî*u~ åb£ã¢î>©.oh ÃÐ*,_U¢ãðäߢ@.å/+ßbß©b.:~Ãöh*buТ:üÐoå*B~Ð.Ava uabz¢b*©¢zåßäz<>ã¢bab/ov<:ýrð£,O|*ÐCZܪ©vÜ .Zb<ßBu|,raUÜäßßOBhÐýðÃv>~*rbA,ÐZBÐý/ürCÃbýý_Cöv>ö/|Cb*>~ßürÐA>+ßvö©'), (',rîAAîðÄÄ,¢BÄh~ã¢UÖU,¢aý+©~¢OvovC©_u©Ba/|åB|~¢z+Üü£Äðå.Örð£* z_/U+ýA~+o@uz©@_/.Ö+rãr¢/ UvÜAÖ/£Cv £ r£vß.ßC<¢rîuÜ@îýC: ßßAÐÜß*.B|O.OåBrCB./,>öÄA*|UU_©aßaã_oî<ýb,Að/ßÄ ÃzÜåÃað ã Ä.UBO_îOªOb|Ar¢/+a:AvU£u|ðÖßzßb@ÃãrbÐüu>avr@ZCv~vv£ðäßb:ÜA@UÜCäßC@åra_Ã,ßöaýbCð/£O@bhh£äÖÐZÄ:üÐî,,.ÜUb~Ä|vhðßb.©Cbªª~ߣüåa:vvýößuBª£Ãor~ªß<åaÐbÃz¢~+*h ~Ð/åUªz:~zzÃÃ<ÖüüåaýÜ ÜüoðÖü¢,~Zßöý¢hbåßu©CavCZð /UCߪa_oCö £bhoÐ+,.AA:ð,uöCb|Ãrªz@h£,>Oð/*äu<~_.ããbß~hZß<Ð.uo*©ð@Aüåª*äߪ_:ðA>,zÖ|<å@ä z¢vüð ãoÃðÃ:¢©ß<ýurb©+Öý*B:~äÜ.©Ã¢~üBåîvÃZUBßð©bÖýîZ©Z£öäv¢ãäUZî@AÖýBã,B ð*,C©o..+ãäåCa.ü£Cßvb,:ý*|ÜOÃýîªßöÐövßOCu.>,.a,A*a/Ð|ãv@å,ÜB+UÐ+ðvbov<ÄßðÄA£îb~ OÖßÃ|OAüÃrbäbBÐü©C*>ä<|rz@öC,Z/:Öö£@OÜ öÄÜüÖ@öÐZo©<,,+C>|ÃäBzZ:BZrO/@Äa.oov¢+h*,<ð>ýߪßîuî+ßîU¢/zå: ÜzÖ:£bUUCð@ß <©aªOob*Ö*~ßÐÖö>/¢U©ßªÜü@BhC/| ÄZo©Ö ä/uÄh@ ß:<ä,ÄbZvo>äîbbbAöîOAä@~BOo|rAüÃb/obªvÄÐrüörðãa,+Öå/@b£z<|ý:ä¢Ðu,ý+b £ðÖUÐöÄAu:bzö@aü,Ã*bßÜ_Ðb¢~UÐßö:öbÐãhrÜCövUCîhðBÄUýzaý>å+aOB+>öÜzã@huÄh+Ð+ß©¢rzO*©C¢BÃÐüÐ~©Aö>.z<*ßî*©ubv<öC|ß|::U.~ßaB© />COª.Oav<ߢýAvv@~ªO£:Uo|ðOBå£bÖCZzÖß:uo v/<<Ãü,vCAÄBOÜA_uaÜ©åößãܪ*£ö@Zr*ABbo¢>öboÜ~oåîUoÃ_aÜß_ov åzOÜ~£>åäB+ä*ª@ߪÄOr©åÄC>výv._<ðßãÐOÖZ~hBZaßäz ð>ürãýb£aªbvz©u:zª:b>ä bzCAC,äåvOðbÜ:*¢öÐrÐ|ÃAZ:äßÄr.UãboîîÐööUhÄßb,¢/aüü> zhÖ+Zã~U~o©äöBý¢|/îýÜö~äåöåã.ßÐuîð@ð,@¢å+Ä£ýAöhz£ß/@b@_+_î>*öÖßÜ//üa|buAßa¢bZªßðß~Oª+ro+,o, öä.hýîv©äå¢ä@üU:ÄOBà O*_ß>ð|öÄî@O@£h_+C~©/ª>ãåbB.a¢h ßaÖ@å >üÃÄoýB©azBî b>'), (N'~ãÃö/ãoðbÜr+>墩b¢¢üÄ/@ÐrbÜzBzbßÜCO©O,bC_Übrîz>.£|>/ð*zãî_*ßäa¢ðÄöA*u££bÃöz>>ÃhÄ@Тä,¢UÜaCãäÃAüÖb<å/êZað.Ðýbß*r.£ZC,Ö@BÃU*CßÜ+£ü|.AßÃað:¢öýîvÐOÖ£:AÐä+ ößÖ/vorhAbA<,z,Ä¢+£Öß_r.>o*o ðBrbBað~£z.ßößUvÜ:vÐ,*rª@,ª öBßbßÄoðZzu+ßbÐ* aª+OU+åî~ö|îª|Ã.~£_<+üU© ý:uåö*¢äv@ßuoÃÐðoUÖ~a©Ö_ür.OåüA+ÄäUî©a¢~öb AîO/öß_uÐ.@Z/ßvhªO£ü*Ä¢ßÜ:* ÖZî¢|örüCî©ývbCZ/ üýbCö:B¢_r@åÐ>¢zAÄ@oîzOhh¢ü+bÃoªOuýrîaör,/>*üÜ.ý*üb.ÜZ/©ßîüz>Ð|ãAîÄ>@/.AÖzÖ:ßßO+uüaC¢Ößåß ,ýA¢Ã©ä£zbbð<ð_a£:@üäýЪB_Ä:uZbßÃrA.ý'), (N'Bªh@Bzz>b|ªB*+ã:,U._oö./AýUuZîCa_ã/*Ð<¢ZÜA£îªOÐ:ãÖ£O~~:oOÃ*aÐ|:ã*ä©ã¢ävÃÃðO*£üah_üäabãA ß:|ßbA¢a,ãü£o.Bo>Bvß>~:ðAhZbýuö:ýOÄð/zü+åOößý*ühåÃ>ý~ußua¢ÖîÖ_aOå@©ýÃOÄOCîð ¢¢ð©oorZÐüäÖ*>îß|bª*oÜð:Ãý/ÃýzäÃz>ª+ÄBÖª Ð/î©î¢rZî¢bZ~oãÄ<üOÄ@z/CO:äî@B:zýa/*Aßß+U,b©ß,Ä Ö©UC|åß.ýßéOßßCÖ¢©*ßÄz£AîÐäb_rC_äuröOabzub£:A>îîbÄÐoåÖÖãUÜîbßzBZ/ãv¢o|¢ªA|££Oa.ßöAß<ö©C:>zöuou,Ö|O~©¢Zå'), (null), ('ãOCb:U+bhß>¢ ÖÄßhä¢,:ßoîBa.Ör©oÃ+.ãð*:äÃäBBªvðãßößoa@ÄBAarö/ã¢ä:£ßUððÜ<©að@*Ä|£oo~ß,@ho£zßîh>.äUu¢ü:Ãðîo £ªªCä o~bZhB~r:ªÄh¢.Ö©:ßbzÜZý .|îªuä A|O.î+ChAª.Ð/:/ä+.C.,ðî*bÄÄý_ýZ~v,CbU*ÖBÃðZOåvåüCbußÖððB£ã*r£Cªbzß:b +¢A£AÐ:£Ð<ßãÐä>Ö>ã A:r@ uðAb©Uzßrhbhb AAð_+ßhbÃ<äý|Ü:BîãÄrOu_Oé@ a@obu,|O|uªaßOUråååZaBÃb*¢ÖUzO¢bvaäðCîåZöv_©uÄ,ýý*zßßUzîßBÐ~£zå+ª@ÐßzzBýaª Ö_Aã¢UÖvüåßZAÃöBaoz¢¢+ObÃü~ÃÃUzßOî|*ßvB îbð<ÜUÃB*rBßÄü'), (N'üh©£b~Ä|ABhh~zÐbüÐ~:Ãv:v> BrrOýßC/©ßªªZðCuß@zÄ_||ßÐ*ýbvzC/b@B+©ããU¢ýo.Ðo:zaÃåO,êo_Ð*|ðãÃZ,O|ÖßÐ_ö©bb_.oB~î©b~/ðA*îðãö>v ßzäa_~Ãz¢bÖ+¢Ö©UÜCä:hräîîª:.ÐZU_h_ýuOß/>.ÐÐão:zЪbara|,+ß~+_üåßßðvÐvðbß©£öhb<_Ü ÐZBAßubÜ©£u@îBOÐ~Ü@£ZAuzrZ~ZßC@>ÖzÖÃßÜaÃrüªväZÜ_Ö,:ÃaCAÃbÜß@¢Öö_hÄÖ~ <ðßÖß/ /ü/ð@A@.£ã<¢vb¢aü>b/abhh@OuZ:£örÃÄvB åaªU_îZuhzvãðãvÖý *ßz. ßUöýåZö|Ü_©b>:rzUÖÖzßãrý+A<äß,orãvOäv¢ªß©råU/ürB:hzbðhå_ÄZ£/OðrOÐrBð~¢Aªoö£~üö|.ã+.©BBZÄ+¢oýýo¢ÐaÄ@Uåv@ãBÃîü>z~ÜÐUªß@@B¢î+_ö:b¢ýzî|v/ @|ä~|,rzubb+UÐ_ßu>¢å >Ä~+Abî©~Ð *.ÐböðöÃ/~o<îBßî:<Ãb¢_ýaãZu_ Z£¢*ÄAãý>åZ_ð/Ð U©vuO:rå£Ãß.Är©Ä.*oö_hObüîöª._ÄCvêªözoß/ÐÃAu.ZZr|C|ZÜßB>rvv@ªß/hã_ª£,ã.hß<å>BÐAåZãv~b_vvÃCßa+öZa£**Щär¢ÃãäÃhBüABzA©@äBzZ*öZb.ÖårääÖ,zu/£¢år©|CªhÖðbî¢<ßUb: ðî~ZBý>vuu£ÜBªaîüî¢Äu*hZ<Ãü|,b>*äå@ÐAªBÃbã+ðChüZª~ß*.ÐB|Üzß,aðåoÄzðrBvä+ßö¢+üro*ÐÃüßvoðCßöüÐßÄÃoürrßrÖO Ä/_:CЪ|o:£ öbî|+ß.ozh~bv<.Öý hý>¢Bߪ<ýb ,~*b*råz£:, AA|ã:r¢ ã~ßz©ß ýbüåß+ßð|uAîZ_:*åÖ£<ª@ýhZ*Ð>ßÖb,@äåu©||ürBa¢/Z*ß+uö_a*Ð:Bãª:£ CßO¢+.£UÃzrÃv>@*ÃýaðC~ß>,Oh.CãüB åýr/ßîðhh_£* BuöÐhª:Är@ý©urvuCã*B*,@zðäBbÜýbOobbð<+Ä*£ª©:rÖ~ãðaÃZvüÃÄ¢ßv@,ðr:ß@oC*ÖÐha/ÖÄbBoZ,.äü+ååB+rã|/ßvÃ:_>_>ZaZ©uC:UöÖuo_~ ©å©/Ö~bbÃî.ãýö*¢Öð©Äö|åbãð,ßÄoAb£Cß~åbÜîuöªÜßv:'), (0xE37D2DBAFDC4A6EA81F3B310E32028A4897E78DF620D1F1400E1A6F3B62AAAAEEBEA3BDF65A4DDFE99962161DE684EFC42BDFA2231375ED55D19BA1C1DB23357490525F9E4483FE5A07A45CCECBE359892AAB1F82F887CB38B66814CEAC1E1E762C918D9435517F97E1581B7F192E89FE3228972003B27C088716D7EC6F2FBDE985D6922A55B543C92B8791A06C5C2F87DE268C7376EE726A25751D2E899328C1AA21E9329C6F988CD4DE047C20DB9C3AF7401E48933A72A7642804D0A8154F986EC0064A62ECFB7E8E0FAEA8D9F64949E8E2373984D02E7FBF41DE645AB7D4BF9E7C1D50D551C80A54AFBA938BD9CD6DDEBAF7C5EE06138EA1868B210E9713C62AEF0A6DE8F874871A2CE4E5159AE3D5747085AFC01ED188588EBF4EC6970BCD8BF468ACCF5F84E63660ABB1213E6906A2B5BC9E0164061C1D82055A3935B0832127592132471614EBAF695F6310672A25A89C10EA6DBC17EE4C8F4D4A2AACF0A0289FF9D537C46B9F97A261FAB6B90D1AEB3480A9AFA8B36B3132F5B7C8DAC0F278AF4A706D44EDE4307142CB5A1D378382326EF61C57007FEC9EA404DEA3C6CCE16F82077E8CAD9646AC692E55F81113FB6235966BCAD6119ECA93DEA0E9059CBA85D9EA9B3014F584D8AF6FFDE229E47D80096C6E305116997068B3F8CEE55DA6CC73C01E3688CB5D4011831B6613BC90AF6110EF993E7A24C3511AC750F), (0x351C9216E59D647073E1F1E1ECDFB235CBC13596DD47E0D9DF9AB4AD56E040C535BAFC99CF24E46C91A19B18A106B56D82DCE0B3D93581ED3CB9374BE8B61992A12CAC32E21866A6DDC8043BACC737D9E4472B7AFF8CEBFF380F5D15ED9884DA8708777559838A69763AD51030454175815E66A08B9E931440ADF9D3BB50B945442AB4A34FC17F61BCC104C5B6DACFF2CDE7948F31E34FE8756235AC89B7AE258090CC06919E25BFDE05E4C99ACD5E65DD0705D3BC2A1361DACB2DED8CD3D80513DE44260EC8612FC2D4B02CFE854EA704CFCE82B2DA69567D6A2CC67038330A2DDEB6BB88385715A6D611E779E662547C85E8BD0556533874EEA8A39C9ABE89A1A6FE20CF921ECC78B9DBDBC882DC9607D749EA4F7605D78B7D469A8FB3780B178746D3E84284E9671C444C7A7770F211119CC450D43A2BA12794514C843DC440D0C4403B09AEC55260833331B95D140D53897D17B3BB424D1B32C1AE339DE2DF800BA9B22FB70763D671F05107F9E8C97F44F8FABFAD8C1581F31FD7EC161FC2A054B1ADB361DD9C811A4041CAF146214AF72EEEA5E81FD27F94303C973076BF522DB0B3483A151D665B79A56D4A4A90ACFD8DF5E8311DB834DE2D1E30A00450A380EF9D4093D80FE11087496E7A65344AA08F99A381D7210FF87E6A0DF7EDC5562801EC5AAD4F19257E13D7A9D449B979F8D490116BAD22A9CE8D48146E02), (0xC1F2457978DA9D517574256E00773BAEC5F014225CB4EB7BDF438C1F0705B67C28B3E7E10440001E373E9BF688B4A95751994E7DEDC8C60D07CA99354E7D496FBEA8454C8F5AAA84F0F5EB1D18F5F22B9934CE6EB7388E60ECDADA3AA7CAD0BAF52C38DF6E5CC7F6EFCA8DF8DDA8F411D76E9B19AEDBB8851AE55FB5806FDD26243028ECBC13BC3D6DD77FEDAB968244E6C862382EB70B1A73B3C589FD12767FEC67D3AC800755C4B15EABD75CCBD984621BCEB70DA5F76D250E79094D33405B60FF0044C3D6C3DE729E86D00C34BEA7DA4126E143BF71476F6586728E4C767E1E50765CCA94C08B57F0446F1E2761F14FD12E0C0C5E18A18DB9D55D505150262708B1BCBD61DD45809A89527A022948049422BC1D6972BF37D4CE11BF633B069F1E471575A533EEF4E88C71D4C5278B908C58BB2E9309BD96F184E993CB861C5F82B35CBB13D25F6134C834DD00EA72AC4381320A80D70C15897E83204A5A28616F125212CBCF7CBAF959FACBD4E09506113C4F4A5412DEAAA64731944E3E16D99FD26DEE9860E17304781126DD4040A9E87D0E0D0ADD0D5D34A76B849EE76BBA43202B0172A76DB15BDC45DC01B7CD660688ABD12F08CEC2C510B9F1F45CD51D0C56E3BD153E36410F5CB22E97305C7CD9057D153B998A3A51693C61ED7CBCFE0728CFAAD31050C8516AC2D356A02A94B43D17EFDEBFE273CBA86BAC01D553939FB3276F61B1A8C9B4B5C4D0D7B7E4B03EA8ADB064CD2047465CDE2AA4A4C67C172E33A279BA3202944E3A28FA119B14C4BA6D5927A22FD293DF2905D27E2510EF48B8A98442378475AA1C1592F74D34C1CA66E9366C5475FF600E9A912D2F16282A39B258F28F8183E9E47D8619409C92F44408173BDA82F443A924349CF3477A06ED67BD9BDCCE3AE4664D88D6EEE62071089CE927FEED50B6BD14486B4DE6F69C02802CD8DEF71875CD32D58CF91D54C304C394565D5207FF1707DDC785CF977F57ECD36EBA47921184745ACC18C3BDA0BF85678A519F3EB0782CC0D71951EFFD9A55350D49E608BC3083D2E9F83BE754493C0700680D2EB7AD23F68D87BAF732855C31C38DB057D97CAA59CDCC55B73D456C8EDD49EF958D277D5F25EF7B34758C9F649C0924C699E52D83BDB360EA586CB8481A2C1AE895C7A49C0F5031E90175E4412DF11B3320A6F4F71C6BD7D9C69307B837321A4872B6CED46588B649B4438247CF1EBD66518427743822CC2AEFCBD57C4978B2CF5B9BCF762346CE98EFAB43D8E98F09A8D5A067B20AA50F4FEAA4E599B239FF3B91B3EB334F47430BB58F858DDFF34060C12DA7A811FFC4B68B808B7F6034E6B5AB074736A3D5588D5D5BFC7B20826FF66385D88592572991EE35A7CFBBC4AA81A9CFE1D8AC09BCEBD4194BB60348960910941BDB5C602353DDB5476E2E89D298B07BD250A0964A59C8ECB1790C738EA59E9EBE26A8CE2448AC8EFAF6C24DBD4A47B205877646687A4AC2136FAFAA476A27A1CF8FCBABEFE2568AA4129C53977A2F6632596E062F583644DCE6BBB59902468FCF207E2E7F9BC22331ECA155DDF62A983F4877EDFC2072765887CF0926A1F0A1CC0C8477FC01E796974BD543B7E166E5BC2375508A5993AEAE08D5F7CCB9FC8FFB0088D072B39C3E61E156B14A2EBF7720E94D032BA0177379D5C9F42BEFC9DE4E4548B7589572088636EEA803E1647F485ED7E26CF8645AE815579DEAA7137217776204E5081E8B76447CF4B26E70977149ABCC18E67256E1EECE423ED51EDE237C918B7F5F9A40404C6C277B6FA77AA5C02CA0FC465A30050C23F639DB4CA1259ED036DDE41711AF6A8CCC7A4ADA7146549D7EA87EE2DD226085733BA30664FFCA01DD9F719CC0A81AF192B98DB6BA31B1B0E53ECEF8A7BBF3147D5FA4D50B6328CCB049FDD2D4B7DCD58E8D502494AACA428AF3212530D15921AB5D1F610345E52E90C0057133DFDB2D62F86A1A6BCF7FD294624B1841039CDEEFDC2676987AD248A72193D3A4590EAA17F4C237673FB5DCDE4CCDA0F9CCEC8D24278257B86494E82621724A3BAC2E3B54A0014D406477AF264A984BAC314FDB3406AF7DD6B6F2B35FDA1145CC6BA1321E924C58CB9F4DC0AFD2306ECB493BF4D2971535FCB1649DAE4EED655232E2BBA9662D1AE5F60F95B9EECD038583E7169F1D7235556B356C2DAEAA7DB1E76D7DEF75C5651B200EDC87807C0DE360172B66D7C634BFAD653D31C0ED364C92E4D181501310BE82FA7E0F96ADD5EE2788CC977F16D92038BD420F87335A33D790F49BAA8C934C076CE4DD47252900904E0A38209FCD7C0AB14893D100364E9F4B3706B839449AF57F8F1231FCD81293427F3929221337C37890F943007B0636953DFCEE2347560A6F42A00FBA4A0ED835FF8F80FD257C37FF433FA84B56F50488DB9BBEDC2470FA282FB9E07327082E82200D00EB853970C0C4EEE007ADBF184D9B87DFAE50FC118F9457CD6B9CC4D73A11262A49F41902A22BFD17358FF37B70A092D7A029803124FC71562E6B0423FF17A5F68794CF5882843C8352E4DBFFA1DC5DCB09ED361191F4054C83C2D43626D9171EE9FDF4DBD03A551CECFDDF402071B5510D391A12E09365928F82D5BFAF055C78CCBD15A4E882FACF9719259315C52C110D8329EDBF053E5697614B4D64956DE6A06673625B10688A3E4A7AC66ED17CC956C4B22BDC6EB9C77FBF0C8637AC6B02AC3EF2AE52C9B5FC1A9EAE758A77E7C6E481F7A0E2410A32ADABE39C04E25392DF78192FDECE778C0EB6113DC0443D07D746A1B5B5CA1F6A34C001A7E619F7384B1B95115DB8E7160A6A912C30CC71696DDCC4BD409EDD1459AFFA1DCDD0A6F4BED9F2A4AE2CA91F5E8BAA4A38F339684F9739095539F7AC3E80B8AEBDCA493AC49D6D57D9CDBB4132A55FB5F393DC657592CE35969C9F84E145662D73FA61944170869B85E28E82DCF7D7B0DA41B9ABA452382BFB13A327FDE87593668DCD3844CB74830C40DF93034C599EC5EFAAA08CBA8920C135982DCC5F9D9D6CFA1B4F299E6B0FCD359E6373A527AFBA04610E3ED506AC03AD760E3246B6ADA342260930097426839AD2571C25AD1C0DE873C8FD8E5E97F36F4B7C285DDC877FF0C0307E1E7EB08F3A8BA302AF8FDDFF59004AD2EDB014E48F15C1BDF8FD26BE4BD72C657C9DEE69C238C203BA9444DF6D7DCE5C92B49140AB4CEE09BCF2973C64E5B7D8637882BC11E00FB5ED1029FBD1E2507B2FC92B9645EBB930AEE5ACCFA1869ED5DD6B7BF5FA124AB2A4DC529B23F338DAA21C0D9BB9209277BE520D2C333F136771541E65665A801C7E79F269991E0CBBACD22D8478031BBDD90436A7041E7F64C8EB29CFD5D374489BF01C402D29DEA045527F60128FEE6E38608C6223D81860FA8DA0AEF43DE5D95EE5E887E7DB8FAF259662B19E1E5239FCBB9674461124C2D8BB45A08930AB076DA6022DA667865CD1DC3C8D7666C2DB3B66B139A670924CC026AF2B95EF26F5EA5A44F81C2493953439A36AD5964C71F86964237E7260FC13B56C80B75BC7E1B547A31C22CABF16D21C056DCD28772AD93D332B8A037678F948E566B713DDD972C1B48DF32F4F2EAA4D51626DF32FEA3E42A679279B57B2D02A22D9E5595EBE3E2BFA0B74E936AAEE05813DB2140B0518FA28756D63B1D66A01BDC80C754850EE922341F92476540BFB8B221A1900BB1F1DC0EA30E950DA7A23A0722C6E9D78BC304E1FF1CA0CF484D36A71D88EBC500101A9EFB45E1F054248C6D58303279D5E1366E9CBE1CA5510CC665C7EDE02EC664F712AC5ADC35E1048DDA803377180ACCD13C528D385203653DFE8F7C2866345DA6E3492FDD7B04F07D882032151D95AE5B0B1CB3DC393C951F371CEDB664DC2796329C83CEDAEF5627520FB021C1501058D1111D4980716DB6A410966E273A08AC08ABE28101EF702BC68C7A298C735DE70C84D543BEDE05B12EDD1ACA58F80027F70419157D8F46F1A0F182F3F7443A30C2AF619264C4ED3A96216234D4B5C2DE8C5232785A38797D3DE3A2CD4B01C9EAA2EA07B9966DC33216EE8F4C1D121CFB3EB4779501B1D69A25E45471122FEF84678781EAAE09481E9EF0517BA92D502BC6B78E969A24D8F1037D83A219422FF70F0AE49580224D257C690611506AE1089438AA6AA148FA32BE90E7308595F55CD06A6CAE48CA9B947A592A312EB790989C8B1DE0A7B555B610A1D6EF4B1CAFD663A930E5FE32CFC99D05F0482EC913F7004EA3FA8814A51B14B69D96E3AC595DA953CD7586BAAA59CB445391C50D87479DEFEEFC78A54E5F0425D147A528E5E0BC929EDAFBAE7055A44A3F43C11346172F460903CD5CE4F4057E7160D962B4926E62E5326EBC5BEF6F99582E760A9DE0DFCA185F2FD2235FAD9AC58D3D1F7C4195ACE55E3E13A872FA19943404B68E0AE080811F5A55628C4F8584C3E6DEB2502D0698C9153FB2BC119565064DEF5AF71CCAACAC8E5CF7303A690EA88ED49C1B673416FE2DB4E5A0DDD50DB4F05C4E503A9DB71C2205D1C01F688EBC210A3D4D0949AF09D85CC957E4FBDEB95F323FEE2AAE7DE12D7FF9616246EEB526297FC397C0BBB6BD3487DDC46F3726272870DD38A091829C4C1F89503DA7917E1421BB8C1B118E868920E626A02CCE38C34A39C6018C8587FD375BA122667F9CF65FB03D7BAA0C06E256BF7FBB5BEC2F51409CF36DCB7C87AC339EE3C5ED5412B15930506C80CD193E22D3AADD05DC914B2C4FE1C97C2F2AE32891480B2840F5029CCE621B9BB2D08373B53AE7C1BA9656FD9899AD7259352A056D43FF751E15E1DEA840477A85BF796F5E55B6F443117DFAE11D8FB75790338938062E7EE10E65AF5909197A5EEC77E9103E13F37E25C24BD5F483F0862A87180CBE327F80FA8E4FF0179B39F7F39C0495A697197C400B0233D2A8EC8A65193E72016D90BA085825AFC403669A9853D2588F6AEF937D9BBCA3203BAE51A1C59AFE6CB7F695FB4A9D4E7169A84CA477AB8ED683FAFA399B0475A0FD89CCB9C40E0E68782DE05D3C5D34DD911203E3700EA8902F8B2DDA90B4C1A370E50DC0C094AD6BA9D43C59CB219A26B62C9889008230EEE13C8A48D033D7B35C3CEC575F740D0C7498499BD25ED4FDE0F714642C4892FEB41EDF840A549B760C78FD8E4542D7421F9C047848951C82679C67E91F63971399FD9330947902100CC39F596146A8AE2FD25490342AA61F025D2C6DFCA26698E1D9F457AFA6AD9699F47B74F5B31120E3C9B93D1F06DF7F47842E475C94235A6D0677975250FE8934BE064FBF21294F3C0B7A32F92979DAFA85002B786649F5D11117FF4B89CE92CB300861009FB0266ADF0B5119E061438C9C9CDD40D300CE64006E9E192A03A23CE767B91118DA5AC4E9C0995AF8EBE0BFC462AEFCF141F83F39FD0021120D30DB59142278A83263C23208671277737B248DEE44B764B53B957F89D71BDA39A2DC8FCDF1D4B9680791FEECBAE8EAD5C7C681DBA333C87966A3D88D092E5B47E808658A82A971966B25D6B2B887FA52BA99C20099FE866F1406575E0C2C6ED936A6F4B28350531E44EB707D6D05B0EEB985D26F6C4ABDF971F6767C42239A4EC6FD7C018347CF6A46A3CBAE8E09020E4578A47659FF7CEBF90B308CD9D6CC215121B66F89AF5B61B66828B88F0F6B68F47826D97F13F4C7709018880742906FE79A5D5C529274961D32CFF1D6C45CF99FD79861AFE2A24D3CEEEEF996D36A73C7B8D0F4A21F1651F380CC4C53F2F0BC331EE83FBA3ECFF4E8001F63A38B0F39C84C2A2DE3684780B1366E1F2655F939FE22B687FB3AC998E8DC0C91FFB2AE7881828407D8D2D8DAC7577E73D0A0DE9216D56580C4774E9D729135175BA5810E87E58D93D1E1611B59DBB093BC45B8480D7A8B1A4D2DA40A43E68547ADB17F21C67FFBEB133AB035744A26F8C6AAD13CD8FD09E12A76B15A41834FEB5C297D986C9ECD4C59DD24D2CA55A5F306BB43A915586EB0B78DF75FBEA1A99FEAC4D94ADC8E8C37DD84D2FBC83726D4C0CE43864FA6D5F3BACCE0DE976D8DA83384E7F57C6B26882F0BCB808572E88067229EF05E135043FED5800F9DBDA070072AB8434F31585597BB6733DB457E47D4606774CE9D5A20249406A6DB16FA616B5B895ABAA53135DA4958A2BC2C68A957383B3D463BA169D0981EBB2AA17A80C0F5D88FBC239D3F3F319A8534A774082B5D5FA2EBBD2B3FBA1F7A1296860B28CEC7D1B643E8FD239AFC0E14911C352924068FDD51D7A503DAA8C5ACB98AA8A92671C66CD5BDC432602C07EFBF069EADEA40FE8FF63DD6E722CDEBAB23407A104354EE1F45C85366424D6D25CFB544C40A27B2689C28B2F8AADF4A07C2191F1FB1E79C6A188F5811ED884DB8C0A1176D791790FB8E01842A91F574768E5B94292E5D73E828DABB8ADF907B03DAFA2809B7DC8EAA782381A06361D8231AD19391E4148A633D3F44AE6C161BED86705FA7CD6ACEA1CCF9A10ACBC374B70288700E0CE91FC67FB4CC7897E03E62079419E3122055A012F1D4FA637FA769CA8D9BE3A61DE0AD608938089E4619ECBB4F0337B98194E232CFEB0B042562F01D62BE0A545ABBE9A36C8298F84D01DCE7E84F147C6FB038F8B9A0D632E5994B2637EB3B980F88508329844D0F0BE9E5CE1E232BD64E83ADB27511AAA9E5B6CDC34762C061C634D85FFE8142EB6339ECCFCB0814C27D64E7B44D7912FDEDA6AD72B679C7A92983F7E94ACBE7BD30C24F4B34DADEDD920B45D28B0C245D11EA7247E3D024E96233A647003B77B18D2A837B29D7C912C7DFD0BB23E52E1D6FAAC750499FD9509D65D8F12497CD668394555088A9233A216F70040F79C57D1598E765641777ED5122EDC40EC7EE30026A379F9FCD94B6878D3EEA2FC55123905BEB9BB067F26C2C680F55BB5F3B59814001953225ED47F420DDE6E88DCD9BD1CA23A2EC428FAA77CB7337CE3F0B2851E568EFB3BBE17A7E93978F8A1B839EAA7383F13B887D3EC0672D76B2A589C525B5950324EDD825D8B93458AAF0105C47E48D5ABB09FCC9682A2F5C8E7AC7C909D269C4867069CC9B5E1872441483C046C12ECE182F0A1BC8CB9AFACE7B976DF16B4ED8964BD5C77AC0BF5CE18A7543A65F05CD4BF9A0EAC84E0BBAE57F0E2FC6AA70E8D5BB2A0AEB5753577FBD3A4E4647546F75CA2207CA640058302AE20BB29F9637099C7DFB250AD1F496496B1B13CD74AE1AAEA9FC88791E71AAD1CAC07557A4D016F334A9D9693A6AF82D6170F8F54472B643E113E599AE807DFC505330018F4EA49AF41088CAC4B1644F046B07AD88A59D581A216680EA8D44B43BDD08D73AE6AE22CC5DF123E9EB7F2FAFA6954388D073AAC5E7F75DD813A076DBD49EF7A89D041DBCE4E12AA4797E2EB236E143E7F13B6B596E1142FF404AA8BD8A48055C878712927786A3EF58F65C79C8AB91326C8EDAA9339E4A7BC12E7C9A387D2A2168D22ABFDEA1707A877C0067C4D926A4B976410B7D6C28E94C96D1491A19A6EBDC2B00F670E163CB0E6011B79DD2B6E807D7D0C22C1EB3FCA9417337D027507DC5148B99C83023C80285FD0D4A614B69EFE9414238D4BFCD77044D3F7E2BEAE70F93F279571D1FD7A418BFA621A6B247F60957E6D61E44E064CE22B3E2F459E69B05FDB67ED212D2C9799E1015199BC052053964C40400F14F021488EA6BE4BFCED90B1BB90BC913F6851D5C7034DB5B225261DDBAE52286F50C677CCD89E86D84EE514C0E8017563C156E4EF6B4711A26B956980A0704D9B67416BC945C566CACAFD791D38F4C924B0BA19586D390408B4D46043350638DD987958A796AB1EFCF01A246DCDF36A77CB44CFE656F52D2D3C621570652395C4C59C85BF9B228E049B1C675315963BC06AE977F0365186A34B2A6B3396AE97CC855FA8316EAADBA9B6CA4B3A8DDA18A52754067BACA48D7315E27370B75A6EED859BCEB6EE0951BF0DCD3A6C064C167112C50C41A81B1FE0D1351C8C376AF15C5C5EB4F10B62B71D02466EDE6A216DC8CB015EF14D2C44697BEEE4B8EDC587A2DCDE0FA8982466B00EEF3F61AD4175B0C753C0350C000E2F194A751D7DFE2F3DBECB028C11C530A79BADE35EEDE3BC3A7833F099045295DBCFE08E4DAF483210BF01A3E13EE99E0223199A5F1CB041368E3AA54A0D96396C3626BD3136E2F8527AD39EEC40DBFC8E94EE76EAB736BF1F9E58BF74A3E80229C836AB182C6DCB402147E4491255F5B23E16B51E1F4EB4FF679D92DD2383AE92D07423092FE462262235C97051750C48620C358D33E3097A81ABB08EDBEE1D9D9952799D32EC825AB38EFCEA8444ADF191497A174E205EEC6AA9878433D44B34182CD6FFFC6F167689DBDAA4E71FF63DFDBEFD9173054F78F38C328864FE26DF42C7D1576DAEF52133048D7246B9054BB34A8675D7BAC112DD5E0B703C8D118AB4FB62204D9ECF4FC8DB5D6F78DC313987E7D51A78B1078805BF7A0EA285E5A5F203BE4B57E4FD157A36ACFB5C529A002CD2E955B8F71203F3DA1A8E23C0AD43F6B87C751EE6E2A2EAC0A041050C2BB3247AE2D09C8FEDFAF0BA577DCA6EF1B9896805A4D524E246EF466BF757D0FDE7AE676AA8DEDCA666CB8284638E64D77BCEE6B89C0687DDFF989BE05524F5A320BD70CE630449DAACC19ED853A07EB78A6EEF29701760E027896A1043FC5141D5DE63A51D967477850B0CDA67AE8A5F19E355E635CC32095C90A7D9993897AF705D03743CD899F4FA77A3650B857878FE0BF65FA66A0C09AC5A498DEE9ADD4D735C6A0AAB1622414961ECBD29CCFED7172FDB8E4138090650FAC7E28F0C065F9956F1AE1B6ECCE8E8B515457D4EDFDF5C7176BFBF4E0B3B5263BAB14E3FB13D5B8D23D2DB4FBBA962F3A68B22C489021AE8861D9547A04B4AB65BB7B41B99A804D7EAEF2A0C040DB5CD5CCCA880188EDAB79766B993A813EDD88824F303F54759FD874AD999D70DE37968C8EAD3A2CA9ECDDDFC8333EF702FD6025284DF19B1D81572ABF9CDB440E08A83402BDF291935BE862626F8C3260D161B03968588035FB6EFD561F7D0D0189D1BF9B0AF454FADE91CC559F38BDF514C9DE3B2B1AA5B017FE075F053B83DEDB50E88DCCA765ED0CB56AD68C2AA6C2A1084145AED1E66F2C0F730CED05F5930DED8A4E5020287D63E12E65AFCF23ED5744AE0CFA3E30096A7961CD24590006BFC7C8AEA0587270DFD3E1BDB370CF6CEB95B59857F8A8DFAD80D3D6CE6B490AD127B5E806853CFED23D2D264C8245E9B9F4E19EA377AEB72EE8F12F849BA2748AE6DC8BCAE7665658B6C61ADB82832B3AFA2CD979BA676978FEC91D940D7A368AB89B65A5CA1ED29E8B35ECA183EB9C65C5F48A6ED8FAC08F6302DC1E48C24B4C8F9012E72D8560DB5A3AFE847AC7F5032CA7CE08EFD7B1CDDAD632B742B445B8EAA021F3C8A5383083BF14ADFC4C04AB1DC8F190F4325CB7DE551C4742B988A5E53599CAA5F14A777F8D8530B313C19EC1979989B2B4B4A8536A256398F0FDCA366EB8C6A24A052C8E7A2176BD2BF4CA937D75BB200EE33070E1773BDBD6DE7E9FBB0A445B0AEC87826D0B38834DFB37655AD02B7B32AA378B8845C0C2C950B7ABA2D70221A06F9890EE38B2F3AAAD22F64FC670F6B3036D00C2C8C2B52BC4B91C439CD076E905B4FB478A9D09E733D0DB12CA72F2DFB0E8AF79F15EE79CD375297F96A01DDCBC1D3A0185BF286653199EF7F7A25141B64C92B430FCE7B6DD5E6415739A4083C30E56BD48F15A01B03916E7BFEFA53113D7B95A1D59ABBF258334374B12F2C8D91B34E94B9408C4E280F3F7E60FF6FDA932F19BD0E6666962A797B5BD22C6AD364E1EA4BACBE58FCEE4778C65A3D9258C368E081166E7E2A4DB86A40C4307CFCA56B197F15242ED4D71CCFC7EE9F3BECE72397694BE8BDF662C0FDF3541738BDCA7C20EF2312429F3A0CA9F99FB63CAD7C7D59A09913B1BCAD231C54263A7FC0E412FD717E4BC9D4E0F82E3F3EC457AC844F76D7BE9724B7CB6441FFF6EE79FF8CE9158CB9CA2E31B384C0A0E4717DE9CC6FD0D6C3A7014DED45A61A09C9DEF27F2FB255AFCAF3B920452439D683D259E65833861DA23BE4E7C79E73241427E9A6CD21B5BE283A027C17B57E83C8766A724C34B19658D5DCF3CE6DE72B80950C1E3A9209611D9ABD1D300906ECBD601F513400D7DF75534EF844C1F0BB53D6FC81A95F49366D0855B27693654ECFF0356D4D95F77FBE2CA8E644101C5BA901CA5A0D84425D16E9E42BAB2469E2ED0029548C836EBDDF7CC37CB763F25CECF90875C80B404AADD85664B0CBD499C3C6F843E7C8CF26930D7A91C1C6A6B3F7883FB11CF319E2BFDEA6B32C090C14A729B9F06AAE75232AE1E1BB91AF89E731A36D288C237DCFAD168408211BFA8A0066E9970CB64948131B873A125D511055BF81889BE38884ACE94254296C020EE757BB2AC5F2DA7B5A2415709C42BD50C573B3619A71EE1CDE65EA2373F41FA6197853BAA1264A63E4052E76CE17E8692BF28FB5B9A07475689F4C6007B60865056F5723EF02AE9E294F7D9443784DC67D80F8816569EC7804DD5202D9E95B2EFDC9715FC0C47A2843F08C6923DF32F05186E387BE86FF9C82DE1F11B0ABC53FF44F967906EE06B806CF3D74DD825424AB62B15306D46F76C9D4DCE1A56878982B4C75D449B8E9627F2B80EF498ABFFF8AFA664EFA713920DF1FB0321225139E57A449900D80DAF3784FD4DB53802D3E15DC57AA02299DBA1354F42A08B74F5917E297A4412FF2092072D5AB9D5ECC5FF2711C36CE699B2D078F7CB98BB0EBC1FF7AC371E888FDE6EA4D8A8F54F21CB5889537969B198BAD466A9DB2B2397D6F8714AB229A5A776A74354B80DF0CD81472C730F6785526E5EE152B7DEA4A34B1D01A074046F91B2D1ECD2165CD0ACE3991883FEB0887F632EDC634842FF97F29019AB0C40598CE78AB03D8AB33C018E447F2EB610B48A84924D45280C596FE244DF764325A0934F9BAC73F04AE4BFF2DAD503D3C0D1D1EB8F167A030464DB21505B35D3C5CE5893DBEF2A74309A49AD8D525D27559C1172FD8AB41F26903B36C142AFFFBEEC2D0C8C6FF7E1A76DBAF4DCDC85B207B3CBB439B2D63B0A497D4BA3F3A2EDEA49FEA12540AAF5A42FCB9FDFCF325A1A892F1D86FBB5FC05E20232E2BC4DB3BACD0A92EDD48CC708D61009E7466B4B0723212AD49566FE83F29B333E6802E7E217D512B4AF7C35FC5804A0DBAC04CF86C73BCF8B12EF25561C0EEB494988A0C33827DF61588667A6FB3E7C80C612D7EDCBBC773), (0xF38AFBC989080FCA2DF63EDA384356E2E30C4189FE462949FF9370D7D9D01648FDB5896B19BFDC725FE8BAD2CD87F43A86D8E46682ABCEAD60B2CAF69837F15CDFF5DD83BAEAC9242FCF29168C577B789E355100ECAFC651E6DC0A67F4E6DA28F65EF3D7AA71809C0FC037B281B8200936515862E6F16F2F2F8B9DDEDF612F49F5011F2E64A3CE2CB5B5F12B7813D02DBB0130A28D784105EEC3A81ED4A1BCAD91EEBD7F99F2A592832BAC31FF44B61BBB6F22DD308CBB7DC01A3FA0FBAF5813F8439A8A565094C85B9E1F61CB0F05A90C8C63647FDE7C043240BF7FB30497D3D39939), ('fe509851-b5f5-4080-89ac-17c03e8167ab'), ('2480-06-13 08:55:49.326'), ('2004-09-02 23:50:00'), ('11/19/2008 1:26:51 PMThe quick brown fox jumps over the lazy dog0123456789,.;:?[]{}()-+*\%^=~!@#_|/0011/19/2008 1:26:51 PMThe quick brown fox jumps over the lazy dog0123456789,.;:?[]{}()-+*\%^=~!@#_|/01'))"; - break; - - case 8: - $query = "INSERT INTO [$tableName] ([c1_int], [c2_tinyint], [c3_smallint], [c4_bigint], [c5_bit], [c6_float], [c7_real], [c8_decimal], [c9_numeric], [c10_money], [c11_smallmoney], [c12_char], [c13_varchar], [c14_varchar_max], [c15_nchar], [c16_nvarchar], [c17_nvarchar_max], [c18_text], [c19_ntext], [c20_binary], [c21_varbinary], [c22_varbinary_max], [c23_image], [c24_uniqueidentifier], [c25_datetime], [c26_smalldatetime], [c28_xml]) VALUES ((928353811), (255), (null), (-1475161617), (1), (1), (0), (0.2465), (0.5450), (0.0351), (214748.3647), ('åüäããvzr~ã©U©ÐßäbBÃ~zh¢CßÜ@©£ßöO/ð~A@v<,Öý+u¢ª~zÐ~ö/|ÐßÐ ÖAbÖ£|Ü'), ('ÖoÜ ß¢Zã Ü.>rrröbä@ªÃBäÄÜU.£C/ªzhßãoüUhßvî<öðUãã_Ä>ð+åC£Zb||r£ÄîOB+,+býßÄÄ ß¢ðß@,~B.ð©ðUÃräåÃ~ª¢O~Ößå/<>ÐÃr©|zA+Zbo¢|zü>oCÃOOBChBÄ¢Aoü£üB~©Uª£.ýbä¢v©ÖÐz £|b~äÃýrz,r@ü¢ÐAî/ a©<<ÄC£Ö.îzåußvA©,©ãÃOzzUr:BuåuÖ .Z£oB*:uð~za@ýÄĪb¢u~¢ã+oU@£_@@©__ß>¢ä~bu¢Ö~aZÄrÐ,¢ãª_Öß:Zýãßß©.b¢<ürubÐ<~aüåU*å@zîoîÃbaßaA äÐu,ö*@,ßÐa@zî*a_ÜðuðCz@î>>,_:OOOÖäÖ*ªa@Äübßz,äa b:ABß,Ö.Ä>:ãhã*|ß*_Aª©ðÖ,>üb@r>£>b>aoB**C £B|Ã~hÃuß*ßÖbCA:,Ãbý.~z~Ö_<ßÖuå>züv<ãäÖ/+.bA<ý,u>åÄÜß/ª*hä,_Z@Ö|:z/Bä|ª@ö£ªa_vCÜoUzä@CÃå*ð*ý:rhã©<~o_Z+övOßOߪßäЪ,buåb*¢|Ððr¢bÖ>Ö bÃöuäå+~ Z>bÖCýßÄ,rð.h|¢:.U :£örußa<, :_¢aUðhvðÄCÄ+hrÃO @ß >@.,öТ<*bîvAÐÜã¢Ävb_bÖZ¢B*CUªhO+baAr¢zr>ß|¢r/ ,.ã|¢vÐÜ.ÖhÜã,@UÐðÐîüÐÖ£a,b|Ö>hbOÖöÃ,b@ð¢Zªvbã:ßý_ãÃ:@+£©r_uOoAî¢b~B/ããÃ.ßZ©h<~oöv~r©/¢©+ZaO>ZÐ:vâýv++oÃhZ£uÃ@rª,Zð~ßur/îÄhß©OCBã./ã~î|å/>_hü/ÃÜß|Caßä/<.|*©U Aüo|,ZB*A<Äbo Ãb< ©UÃvA:aOÖ+:UÐO,üäbv@¢Uz/oöß@hAaÐzr~£<ßîrvªbouÃ,.Ä~©AÄ*Äð@ªÖ>bobvAror:_,ß_*_z @OÄu©ß|Ü| ß>ÖäßöBª +Ä£rÜb£_U©<+ß.ªa/bv, <><ä*Äé~ä:ÐröªäüðoAZ BböýBoä,îßuaåuO /*üä©ßA£ª<ýo:CC*Ao..î+ª_ßOü£>rb,©¢>ßb/£Zbz+¢oÄðÜÄäüÄßÜ.bÐ/A<ã,o..ª<ã¢Zzª@C*ªýý+Cvrð¢U*~îr.B¢,o:©oüu|uBh.|*rÃ.ßbÐbðu¢:@oba~¢rr©u*©Ã:AÜßîob>bîoå<,**|:ðßr¢ßo_¢:öuîCãAÐ+bövAb~ö:vîhCUääBÜ.ã<ßu¢vvÃCZoÜzäÖaz,z/äUvo_U.@uB+ß*.rU_ß aÖ+:£z<ªv+u_:ß |~u£©+ãÖ:>*ßß.C|UãvÜ©ÄA@~rrð_O+ä_zvOÖr£bUAÃ~@ÖOßÜ¢Ãö¢B,BãhUߢ¢ýÖv+:ý:bîZOu_£a/aãA+hî>.U:ðo*ªüã.ªAö oZr*ÄÐ,Ü._ÐB,h.ÜUUÄovãv~Zoüß/£ª.|uZªhhaBßÜOA¢BCÄãå,hh/BoOÐbU<£+BßCî¢>å*Uª <£UürAvCÜÜuZ/ßO/ü.öã CßöãüubOÜ@h@ßü/ðu_aü+åªä>ÃC:bîözÜa*ãZCUßröýUbÖ¢ãÐ@ÖäöåüUrb vB¢Cä|ãÖߪª¢BzOÜ/å*ßÖbZÄ_oB*åAC£ußüÄ~ßhÃuýßuhî£|ÖB_*ãZ|rßð|Ã<<äÖ<ö,z Ü'), ('uÜî£v:rÐhbÖO> uZîðªOÐßöÜ*ðOöåbUÄoÖ~ðUh~v>öª+Uª¢bbð©Ã£ªü/Ãßî/Ö¢¢ÄvÐä+*Ã+,,ª/*¢©,Äðr_,r.åîÜhu/Uh@äzîC@ÖvÐ*|vzAo¢ßA.O@_bU>ããöªr<ðoUB|AÐ_åü©äßîð£ß~©~OêÄA/ßã£Ðuzbßh_uÖ£BCð~_.Ußuãz>©|~ãUÄ<Ü¢BZå_>OßýÖ+/bð~Z@zð/zaå_Ãbî~£ObAb*Üh@<ÜßÜ++Ðr|aa<_@ÐCßhß~ðo*ã,:.BªC¢U+Öb@C£ð£h hbåCB© ðUuö|ªz/ü,îü£ª:,ÖBß11/19/2008 1:26:51 PMThe quick brown fox jumps over the lazy dog0123456789,.;:?[]{}()-+*\%^=~!@#_|/0011/19/2008 1:26:51 PMThe quick brown fox jumps over the lazy dog0123456789,.;:?[]{}()-+*\%^=~!@#_|/01'))"; - break; - - case 9: - $query = "INSERT INTO [$tableName] ([c1_int], [c2_tinyint], [c3_smallint], [c4_bigint], [c5_bit], [c6_float], [c7_real], [c8_decimal], [c9_numeric], [c10_money], [c11_smallmoney], [c12_char], [c13_varchar], [c14_varchar_max], [c15_nchar], [c16_nvarchar], [c17_nvarchar_max], [c18_text], [c19_ntext], [c20_binary], [c21_varbinary], [c22_varbinary_max], [c23_image], [c24_uniqueidentifier], [c25_datetime], [c26_smalldatetime], [c28_xml]) VALUES ((2147483647), (60), (13342), (1746584310), (1), (0), (0), (null), (0.7945), (null), (0), (',hã_aü:Ö.ð/ýåÄ<,Bý~Öä*C~ê<|@åb£~îü|Ähär*ZA+/o. z£Ð.~.ßO~UCåÃvbZr ¢rß@Ö*_ß O©Ã©ö@ãU@ßÜ|ãu_Ößð|Uz,ýU,ßã©ýî,åÜb¢>î|o+ãa|'), (null), ('ßývÖü/ü|AÜÃ/vC©Ov¢.åÜÖ~bäuÖO,zã>ߢAä.uðüîrbäß:ZAéÖöb_üA,uîЩßOÐöO¢£BßÜbÃ:ü~ÄÐu,öÐ>Ð|å.v£a:OzrZCAzî¢ß£öäîÃv¢|,z©a@ßðZ/ObÜ+ýB+~Ð>oä_,ß~~ZÜ¢ßä¢ÜÃvÃÜOß,*ã~hãã:©ä>züÜ:Äãðã.ð>o£¢ /ý©Ä.~,öBßaüvüÐC¢ðh>åäzý.ÜöÜäårOüß.äÜö/îðA©©Ãå£ä©ßåu>C/~©ÃZ££¢br~ßý:|å*©>U~äO£Z@CbBbýýÃä+ãOB£ßUZö>>.:>åu>.öü.*ÃÖ©ßÐä@~B¢Z_,ßÄZz._.h¢A/,äåu_h©bz@ZoAüÄÄ£î,åCîCb>rB_.ýubÄu.åýZbüöuUä_|v*ÃßÜuuoz<ÖßÄ AC£ Zr:ß_ãÐ+ã/ðå©U@ööÖä~uaã|îðCO|Ððã~ð| C:ßãB,+Üu/ß>ZÜ+vvbCZ+îå¢Ä_ßC@BzЩrß>üa>ߢb B¢aÖä>Üð,uªößåðu,ÜO+bßßã<* ü@£££o©Að|<.¢*o/ä*ð@*¢bv@,A:ZãOZ@oß,Ö~öÜCäý©î+_aå*ö>_ßý*:+CvCrÐB,rî:|ÖÃZ,o,<¢,*oãa|öåÃÐÃO:ö+:éîCîvÄÄbAü/B£ßrÃ:rZBßzãÃ<<*ÐC£ÃÖ|.vu~*v©Öå*C£©Ub¢Ð/aßAuvbO@ã+£Üuh~o a|UUz|ä@.b>åO£>Ãa+_båZß/ßã, +vüb@ðAbz ãob,*ððÖüoãA.bO©*¢UÄÐÄa*v< >ãü/ßÄ>aAÄãußð:bîÄZ¢ZÖ_£Cv~ªCoÃCåª.ðaÄA ðboü@./ßZ©B£üãbÖZ z@CîååaÄ*O>_br©üÄuª~hÄßßz:bbhA|©¢©,>uaOvüßbUZЪîüahßoÃOªÃzª.ãö| ¢ãð+ßoÐÄA ¢ £|@~ähBhåÐ@ð>Üßð,Ö/auÖ¢:ßUBßZ/ßßbäühßa|Ãä//åzýåa*ßzvî¢BåöbÖªbZä:öÄä¢ß©C,OÖhßzÖhß+b::C@î:ÖbOÖvü£~~üöªhUr©ÃðBo+CuC|u*ß@ÃCåÜÜr/Ðý/>ýã Ä©ÖO¢@ßÐ*:O ßäbîbu,,UCbb¢hýb.:U>_Ü>/ßAÄZÄöÜ.~:,|Ãb*vª:Bª~Ã|>_Ö îuÃÜa*¢Bb@C©Z*©*rz*Üu.zå£îåb:¢ªªbðCübÖvýÐ:BBCÖ/©î.ðb£Ab+,:ßåC>äÖbb/|:@Z:A+bÜzrÖå£>ßOüOÃ|~aßîU_Ãbª©,ðAýüåÜZ>öör|,ðÃOb*ä<@@ªC.îÄ>ÐUrÄ/ UÖ/*O<_ß>.~Ī©Öå_bUaöÖÜö/AaäÖoö¢r.r/£hrî@hbbZa~ACh¢ããªüCðuh><Ü,ruå@OßÄЩ//üÖª@Bߪ:b@.ýÄ/ÖÐãß.>._ßîuý>Ch.O|Äb>aÜ©hBîÐ.ßã.oåÐbåðvðA/öÄzCZ> £ ãZ¢öÐöoÃz~ÃhAbßãª+b_vzÜbbbb+aß.,Ö:ýC@öahÄuö* zð£hr£Ãß_£+ý<ªAª+A>ªv:ý.ð|b婪>Bårðv:výCAz.Oª£zaOªå+Z,ZZ+br¢|ßhðhvCZÃÖoCA+|öbßßvUbÄbÐhß<ð¢î+b*_uOBbrý:¢*bäÜAÃß*Ö|Ö<ÐuÐzªüß, ChübhBZAåðÃv_ÃТB<|©ßÜroÖßðh*/h|OAZAAå|Ou£öÄäöã,ãCuå@A+vĪÃUä~~ªO,Ö:~auýЩ*vßo_*©@ZUrvbh£a /rz £b @:O,ßãîUhä©C:_b ~ Z*.î*¢ß|ÃÜß/ Ãr<¢bovÐ: üCr:_|ß,äÄa+ÄðªC|~uoh:Ä@üîüîüOz~ãa/ßhoUýî,ðÄz <_aüªÃ@zr@.©<¢ªå.Ã,.@Ã>ßü,*uvÐ@ýr£/.åa|¢b_ßð,:ê,aüu îßÜbrýu Zb:ý.<ãrOý.CÖ*ýå|/>ÃÐßUÜZ©zã£+ÃA*zÜ>*öýýä.uA|C|_ßî>Ü<@ª:ßÃÃÐoý|ßz+Ü:|>_¢:@ã ªuuOCÖaÖåð|ãÃzéUUßäã,ÄO Bý *äzö©Zä~<>ª.üßö+ßðÖUßå+rÃýAãAÜÃ,aªªo.:COУ.åA: *. Ð@<>CUÃߣb/©~¢Z/ðÜrÖ*ÜÃâ|ZB/Öo©/ÃAoî@>*<ªßAÖbbܪª@|o£ýüãÜä|üª+îðÖuåªC@.ZäZÐü©ö|>@>ãuª@ÜÄb h£ð,åUðBýãOoA|öÄ *aÖC u.u:ßýbCÜöÐÃ_Ä/åvîUCÜ+åAå*b¢,OBäUZ.î|uý~|©ãÃ~ß*a¢Ð~ZÖ£ß,bOãã¢råboaÐ/ÜÐbÐu*ð,î¢~oý|ªbÄðA.A@¢Ã£bbzÜÜ@~BîUå©ãb.Ä.>:ª©äb~ß*Uüz.UC*BhZ¢ªCCýbb Ð.åä¢ÃªAoBýuüÄü.Z¢ß>ýÜ ÐðCBß+*ªªÜÖä,:+ ªßuöUCîzî£Äß+v~ öbhö>ªß£ß>+:uä~üîZOÃÖßb¢aßOo©@u O.îzz/ãaý|CÖÐ:BbbÐîBBî~Ca@ðÃ.£ýzvbvßöv£<:oÃOÄzî_ÄhBðªCUZãÜzß>h~*~ß<©rzBßB/£ðr,.ê+ýZ_bÃhßüüoüãüz|*ªåãu*.AZßO< B/+ªOhhzß>h åu ðãv: *ãÜ@ä,A|vvU>©<ä@ß*©ãOv|CÖ>*CbB:|ÐhüU£ãÐßC|A_v£©,+ßC<ªªobZ©Ü+bî>OßÃÖ_>ªäü¢äЪuAäCãöÖvüüüCýîüüb+ÐrbäÐ|åhåÖöoäÐå_ãvߣ@BouuãÄ¢_ª£îîUh@_+ZZUÄbazßCUU/bÄo.ä£bã£îäU~vBbvª~+a<ü_.ßaoî.Ä:,C|öÐ<,<:ÄÐ,.ýhßîv_@£å/~ЪaA¢îðUO,ä:ÄozÜrCîzÐ~h.©rU£ärß@Ãüuh:*ã|Ü>rah©CÐüÖz_ühãh<~+/£v+ý~ ÜÐöozãv @U,CZaB>ÃBåv_|hb©åý.î>Cr/ßå,ßß:/ãä/ahr©rärß©BZC_:>îÖª£Ü~Ã*CߢÜ/.zuu,ßh*Ü/Bo/¢_~ÜbbüZB©bÐÖÐßvª*ÃZ_ý.ÃÐüväÃA+Bbu|Öå î,å:..ª>.äv/ãÃî ã~bîbbÜCªbZü©_Ob+Z/z,B~ýBu|,~vO©rÄ+ý©ýZߪÜä C¢ãäÃub|UªöÖaBßã@+@ îªÖüor,,ýªÃ¢uUä:,ÃÄ+r¢.ªÜ¢ü~O:zuU_/>åäÃ>ß©|£îz@Öu*/ã©ohvroO_ußu_z<,Ãß*~@ýu__bÜÃ:Bu+ßa<|B,ozÄÃovA:a /ðãöäÜðã/ªªr.<Ä/a/,_ãîZZ¢bäããö@bb:v_Uv>Ab£C<ßüîUüÄv~b<>@¢|zßîBý>B@oürOOÐö*:Oßß>©h¢åC©ðA|öÖîÃöÃhü£ª,ZßöAÜ_@£ÄAzÄãb£©Zuåßo<ªa:v<ßUu<_O.uår~B~hZ _¢Ab£zaãÖÜßußrð|>bÐ,<_Ü_.ãÖ<ÄhZÃåob,/rã>U,ÐÜ,O.Ãva~@.åãýä>£ß_@h¢><ÐÃ>oðvîýÖðä¢ßvÐbÄO*ªª<ÐbA©h+îCbÐhÜZoa©,>Boðª@OUzÐ:Üz+bîÃruåßaCb£äC:|C_ã/ߣ: Ö+bå~üßß~>übZÐ.Ãuzo.Ð>@~:Cb©A+r<ªzCÖ/h,ªUUr*_+Z,hhr>zoABã©_åOÃa|ÄåîüÄðÃC:abbîzÜ<åC~îåbö©/ ¢u~åAª<îvÐÖz*ýäbAZCýO_îbabBCâöu@,z<_~ý/|ýAbÄ~Ö~Aßb£|/hb >äü@+u¢Ü_ÜüÃ,@:z©.r>ã+/z@bä~z£bUuobÄaðrÜ.vOßÜå£z~ îAö~îðßo,äÜb>C£:ä__/ößzýÐÜî__ÜCAv©Oäbî|>,ÃÄÖ|öÖvv .>Ðbå£h/ÐävÐr+©öu@+Oª.ЩbåãBÄ:zbUu*¢zOÜ@ЪOÃU©>*B¢ÐUîBÄýÖbAaßAÐv_r>üab¢AÐã:aUb/,+>aBÐboo@+äUoÜÐÃäîhbO_ AýÃ>b¢ÄÖ⢢za£_uaC£UO+,B+Z¢©ãÖba:£ãã<ÖZÜ£/@äba©ðbzîãO+ä¢+U.,:Uo> +zãv£ÐUßäªÐã@b+¢Ã¢@ärßbÜrîð_O:ßý+©ßArüuO>z£/¢bzh_ß©,.o<ÖªUbÐBß~©üäß+üÖ.£.öAð.¢|:ªßý,Ü.|urA/üîCð:©ßU<ðvbªß ðÜå.<Ã~OCCr<>uão/~B.Ãzv*_ä,Äb>+ZUZb/@AðßßüßÖUUã©..vÜÜ©U>CÖ*v£b*Ãåo~BO>~ÃzªA/î:Ar,üÖ@CÜ~Ü~CO¢ÜOý*>,| £Ö<îã|:O¢ß~©Äoä© ã~B~ß>b öðCª©ð@îÃ_£>ã©| .hÜ@>ðª zA©ß:ÐßU,~î¢*|üäbÜaªrOßCCCz©hbÜöÐ,|îZ@îª._ß B+ãC b*B£îu£ÄÄ£ÐaåhZß,ª© îßÄ<>+ßÃ+¢_üüüÃðÃBßü£ÃÃðü.>~rUbßývBðãUß~A£rb:.brA*BßäÖ@üÖB+öß:zC|ÐýÄåÖb:Zröý>¢<_+z_äovðUÐCOÖääß|*b>Ä/ Zv£>£ß@ÖZ/u¢bCAZz£îBrîÄ+|ÃðbbU.äbýäÐ_>©ã:__ZÐC@u_hBÐÖ ðä,£.|©:ÃAA+~bUZÖßýb££+.£/OÄ@ðh©BÐba*åbBoaä>U+_:üv,ZÖév<üaý,üðÖî+väýUöäÖåî¢ßåovîÄÖU@ãî.bß_+åBÄrbB~åBÃ<Ð _@åßb<ªßÐb©uÃUb:äßOÄ|ü©oÃ_ÃZvouUAðüzaªýzð|habý,ä@.UåZAÖ|äÐC@ßz_|ä/OÖvÖ/vßäÜaã£BÄhßÜäð öýo.:Z<<@ªA~oªß¢ªÜýýB.UÖÐr¢.+ý_ã@<î@uaåöU_Ö,©U£bC_b ö¢hªaÐ<ßuÜbbÜ>Ãh>ãÖ@ßÄZö/rrA>ÃrßB¢zå*z><_bÄ<<©ªO|>~vÜ|@U*roß_/z@~UýhOßßO*ZýÖýß:ܪAb*vhÃÖ<£@zb>uAÄ©¢<ÃZvrZOðÄ~a£oãÃour+Ä.v~ *î/,ðð.b~/ÖÐ~UäbBrüO<ý+:+*aß*öruCöîzãßaßOðbÐBü|ý z¢uZ.ä+_ýa~ð~Уu@¢¢ |rzrOý_ð£*.Üa>AzýðÃB_ÜäÜ/åªr/>|*ð©ÜB aC.z:墪ßîbà Uªð_ßÜ*@Üz,*Bvü/,äýÖßUßAüüÖã@ü|*Ö*vÜ£ÜÄåC*h åä+åߣ:<ÖOOÐaUßCh+£©,OÐÖarÜ¢oB¢:B.ð*¢CýA,O:oÜzÃüAa£Ð|vðÐ:_¢hoªrC.<ã:ßvî*ýö¢u|_ý¢ :ãu£@>u>råb<ãäÜý*ÐZ:uhÜCzТ£Ãoî|aßÃÖý<åý¢üª+ßähbãUußÃOB bB Üä~ßbý@¢üOªC>>å~aBuîßUÜ:<©ÐÖh>o~uO@Äß©ßäéßr>Üho:r a@ß+~*@@ zÐ>:AAåzüOÖ z+rh.|öÄ_~zöOhb,ßö*zo:|üO+o<åßOv/ýÄhªuoÜ|ßßÄ._Zåü<>Aã/OãßUüA,<ßÐ,A@r/ðÜ~Ü|Ö*©ã_¢BZ>,zo/ýßä +vC+býbz,Ab/bÃîUv©ãoüÃ*öCü..Uª@,~~. £OÃ+ª_o~aã:Ä,îozüÃ+©îOvB|©bÜ@Ãä:Z~ªBý<|/_ÖöZ@Äa /r.åuÐ.<ð~ßö<+bzüý.ßzb >Cðhouü|ã©Ð*zZýU_oCo,©¢üoã _zOA*åîÖZªvvüaüZÐAÜaüÐä£rððã>üý<~£A_<Ãa.,uüöîär+Ä*uhî¢*ß/_ã.übvzªßà ý.ßba*¢ÐÜðÐ*Ð_hhÖä|öZUCöä~/ ü£ Coå,Z|oC|ýªa@ß>Ã/ðh|ÖUÐAÐzäO/îzÜh~¢Oãhã~~Ðýü©u~o+åa,ßB~å/ã£ýÃü©©ÃãåöozäzB|ýaUÜ+@ÄÄß_îîöbaÖÐý<ãåªb vã*£ýbAÄzvC|¢£@ObÄÜ@OªÃö/CB@ ~å:ö|>ü>Ä~rUãCU*£:bUüî,ÐZýîAß~üuB¢£/z@o~ ßUî/äî'), (N'|hÜ>hZãªböÃoÜA@üor<ßbhZ:îo©ÄU/ã+ßð.OÃöoý©BZÜÜÜäãoU/îU Ðý_¢ÜUC,übAbBåã@ bOOߣ>A,@äýîäßU|.|/+ðªä*äãh b~©o<ªß b@b<>UU,h>BvÜ>© .h,: ßöß+ÄzöOß.Uüî<î<öäÃ*oÐAãbbAªðu rãbÜAZåzå|©_h>zb@vh£ýrª£rZ*výßÃöß/£ªrð'), (null), (N'vOö__ªU*buåðßÖî_.ªu|.ß rü|:¢Ð_ßüÖö¢z~rå~uÐBÄvZãåCbßöCzÐ@:Z~ýoªª@.îOåC~üuÄ£*ÃТöÃÄ|>ÃÄäã/uCäZ¢î.ªh|z*CüÜ@Bªu<übÜã*åvªCðß_bУaЩªßuÐ_o ª~Ößü~C£+rÖÖZ+zÖß/a.Uu>¢@Öz>ßh ÄîÄv>©ÄÐåO.U*.|zr:AOoBuCU©Ä>r.hý+åbã|BßBBÄhuãýorö/BbÜüOªÃªAßör_:b.å:+ÐÖC£ðB:üývv@>|Özbu.Ã/oübýhåO©O.CÃãuÃý,ääТà Öz/£Ühür:Üð|ÜA©ßrZZßäoß©*b Ã+_üß<£ ©ÃU,@ru£ðð£ðüÐb©:*ä<ª>ÜZÃßZãðßBBCÄýBüåÖª£>îÐÃo+üzå><ªOÄOîöÄÄð+ÄCß|ßvÐüÃ~~vßB~b~_: _bZ¢<öýßOaObÃvßÜîh+Cu Oðå**ª~ä+ovªã©ßOBävðßÃ,_||zßh:O*Brä+ÖC~,uz£aÜb.CüÐb>ãz_>@*ÜßzÜÐîýð>£ß:/üvåÃhOã,.©>Ü©*ã,*ßb/|Ðaä|ÜZ@ZbUü¢b /Ðý<ªAª:ßUîz+îð*î B .@oªåÃßbhü>UuÃ/ãßßîv:ÜO+ooÖÃ+zuªuOîî|+ªðu|zßЩbÃð@< aðAýzÜßAov@ªZÖ~+B¢~üvCu>+:ob .Av£@/îðO©,o~ãä>zöA*,zð@båÃ@¢ã¢ÜÄÐuUüÜzÃ/ðörß©.~£åoraüaÄ h/|r._ßÜ+äö.ª@@£*î<*ÐÃ.:CåÖÃ/ÖÐÐ@ðã*Ö~abß©uZ £/£Ür:hZo.BhÃ,b<>:bÄ+Zäu<+@uU:öÜ©@Ü£u <ÄAaUî|vßröªzrO|ö*|.zßöîbÄ< :Oª.UOý*Ã+bü©r| Z¢hЪC|.bßA©Ühü@/Uߢ~@*hußä~Z~ÖCU¢¢/|ÐÄ*ªr :hz||,__.+öÖÖZa>ÜUüh>Að/o>_öÃ@vÜ_£/Oå©.ÄAÖh,£ðÜÐvÃäãýßhZßA>ª_h:å>_ªýa êC©h£ßÖv*ªîAaZýhÖObu©ÖÐ|@_ ¢b/©~©Üv<*r/©¢Uoý£B/~>,ãßðBAã,CªB:Cuîðz+ua@ß_Ð.~/ªÐî/BÐh©~ä©~Ð.Buª r@avb Ðr~ý~Zb>>ªU£rOaÐý_zb£Ü>~.~ö.ub. ©~ÃåohbZÜobhO/A.z<@:öý©öÄý|a*©Z/Oîý¢>h|äÄ*.ü__CÖ|ö,©îÐoO|böCä¢üv:,ðoî©ýöÄOu+|ª:ß__åU@zÐÖý,Z,bo¢B,o@h¢öãîö:üÄ@ܪüªo|zÖÄÐh©OO@+ªå__hý.bzOªÄýZb*aUrÜzÜîªz ©.+<:Öz@*|/O+ÜrîzýüªÜ/£ß©öüÐbßüöuß ýÃãÐã,:ö>îßä.~.<ð¢Ä|uÜ~ß>ß~:_ª>ö_:rr:UCuz>hîãb_h£ bz@vBuCAubßý,î.äzü,uA©@>UТ©ö/U/ßu_r/Z+ýb.Ab. BU>ýÖ~Ö.Z+ÜAa*ª/BÜß+OO*r/Aª,hª£:bð£,OüéÃ,ðO..va,¢ UvboîåZ|Ðü*ZÃÐ öBÄuvhBh©ÜvOßaÖªa>Z,OAÜÐ>î.öà Cu:b:OZO+rhC++£Ä<_ý+ Ü, oð ýÄ*Äo:*£AÐÐ_|zãCBUb£,bß.äüzý*ãCð_ãZ:A<ý©AТýÖý.b>£zbbvöðîöäOh*zrªßaÐa+B¢U,¢£:ߣä_U>Ã_bãZî+_bªß_Ã/.+üý©bC|©ßãZ:BZý¢å㢣|üÐã£ãaa/äðuA/Ãåår,Cäuo¢ªð:ߢO£ãßÜßavã.Z_£+ßÄb.£ªCÖÃ:>Ü ßBUÄ+u,vub.vªÃªAßC~uã ð@>ßO>.ü,zý>rOªÃîzvBª¢©oAð>Ðî î|>:OÄu|AåävÃBZCAv>B.uý+:bBzªb£BÜý£_/O©_@Zu©ýððýZvhAoðãh|uüßä£OäAßzîbßbä~ö~ha ,@oCA ðªöãh@ýrräÃåB*¢o¢Að.,Ö*ÖröZU/uZOv,©*¢Ðö©©<@¢|@|bÐZUhö*hb>î@z,ßr>ðÄåßäÖa/ÜãÐîUÐr©,r>oühUîU¢ãÐr£vävaÃä¢Ürüvß+BªußÜÄãðOzb_Ü:ü_uîZuC~å£uA bªa@åhÜhzAãba*Ðb|r<î,£UübüªU@Ð~|Ö+ßzOÜO.a ©@,ãvä,>z/ÖCö,+A:ð__ª~/v £_/îÜAbîbýÄ|uÃÐäA.hߢ/.ðozUä:Ðbbh@¢ üª_,©uå,©:UußÃ~OZ/ÃrC@Ö<Ür/ î£/Ãb.å.äÖo.|AvÃbAbÜoîÜÄß/r:äb¢:Ü|ä©ýýªU/@ÜBrߣä C+.|££|a,îå<©O,¢Z*ãCUÜov+>¢bB*ãz<£.Cßääh_O.Ðüã:Ob@AzÄbBß hroa>îAb~ýAÜZß.<Ã|b*.Z@b/ý~z_ª._~ÜéÄCbZ+©,ä/.ßÄ¢ßa>b:îä©B~@ Ä@ü~>r@CÐÜ~@ÜýÐ婪AOäÃÄ~î¢ b¢öhªzoå,ý:h~>¢ßÄ,ruouÐß/ü/ÄAAÜzÄv.ÖÐÄzü£ÜÖöÖ>B*,zZßz.Oßåhãä:ã*uh/ BäbaBu|,:ÜböäBzÐÖüaZBªä~a©Brð.ЪbÜU@UZÐbãß*BBÖÜÖhCªUCoUvå*bßß<<î_Ü@ÖZzö: Zb£äÃî*¢CaOÄöuUýÐ@Ü £v|üý_bUÐOðaýüüÄã.r/ÄO©:zrª_ZÜ|ßohÃA<©äoãBåöBoÄýv_hz *¢:~C©ßö_üü¢CäãZðUO|AªªZÐ+o<ªvÖ¢U<ß@u:+abrZhðzüZåà ZüÖZÐaoãÐ@z vr ,£bzb<äo<ãz:+/,ä~îö:©>Ob@bª¢<Öåað~ðzU|£ã/ßv:/_ß, ©Ä. Ö£å:üßýäUÃÐöZ_Ü@BªAvBAåuУüvuZßA:ÃOöAãvÜ£ýOB@>haaåUbÃhUÄ֣РãУöåÄ>ª*ãZî Cã v/buß~*,îB:,ãZ<Ã:vZrÜz/..£@¢£CÃßðý Ö .z:C¢.aý/@>a~/bã¢|üý©ßObÐÐß,©:ãöÄ+Aößbhå/.üCaªb©ªüz/+Ü£¢C+,墢 ý©|zu,ha_/b|UãbbCÃCÜÄo.|ðÄ.ß/ÃUvßBý:/Zßv<öÖýzu.ÜbzvO>ãªãUa,@ýz|äOßÖo㪢ãåãzÖ..UÃz¢Öh.bÜü
Ã~Ub>@Ðh,>îuA:O£vý>*ð*býa>Ã<~@.BåU@:/rö/aübhßh£ÖîZ*üð*|*_vbýßU_åbß ßöÄubAb*üzîOåãö|zo/O_©OðOhö¢Ö.obaßäßrbvðåa~b¢BOoå©uÄ¢¢ßCÖÜAöB.~_häobüC+Uî@Z_bhzbößÐbr//+aÖb.A ã:.bîÖðCOÜzýßC vA¢<öýzÃ>*Ã/Übrbör|ÃßCAu_oãªüÜr¢zAÖÐ/öb*@ÜîÃr'), ('ýÄ*ßU/@hý,ößhÄÄÐobCÖz<¢aCuoAu*ara'), (N'v.,+å@¢ÐAaZrßbo_hu,Ö>B ÃAv<î£,Ðß+B:zÖÃuu©Ð~aßa übßåüªaCoBÄ ªAÄB£v>ßТäß/aOBÖ>zäaö@ää@ÖO+üZuA+ªOü£öÖ rª*rý/ü/ð*©Üäz©@äuC>z:Ö £Öb.ýCB||@ß*o£äbßÖ:ªª/Obð©B.ßUAÖãa|U+_:ßUBu < +r+bÃ|ýoÐr~A< AÃÐz>b@oB¢ÄvZ£*>rã|ªZåbÜ|:ÖÃZ*£*bhÜ|+ðß.ßrCÖ /v ßuaÐ:åAh£üÖb ãåÖü+roåßhZaoßBÜZ:CO.åb îåOB¢ð.OÜbý *ÜüUC/abÐÐzbð**@¢äðöß.b>abväÐBubßÜ.><åbüåýªO|Cov~å_ðoA@öÄUvoöãAÖßöbßßåðîîýZã|zðÜU<Üa¢AßÖ©ýà ãa ÐäßhuýÄhã_ oOä>bO >î:baCÖozhßO~bå©|üÜOÃÜ_ ö:ZäªîOö>a*Bä£ä©+bÃ|*£üZv@Z@Za¢Ä+hh_ßå_,üä©~ÄßßîCBߢbýýZ>aªBª©£>,¢ÐÐ@zä<@Z~<ü+|:Ä+,Orý¢+häbßZ/ßzrOrBbb,ßU Bß.>zh:h,uZ:z,ý*~©vbOB>vZßO<,£ý|öäåãü£_ð*hb|AÖäßBÐ:Ä|OhaZhu@öüÖÐUÄ@:@o+öh*ÃbAöU_ö,,©OvýÖÄä_ã/Aü+,z zU,Zö*@~uäo/UÄü,A/hÜåZöÃÖaå~B>Ð/ubörb~bö~_v>,ªA>/aßüZ+ABrC.ß:/*OaÐ~o¢_Ã/b+¢hÐýzhü,hb©ÖoäaäýðOZ>oOB<©Aåäîz,îîÖî*rßvßbZv>v|ÐhÜ|ÖUßä<ö¢@¢CB_UÜväUCC>ÜCîu, ¢aZÜ¢ z/ªabZ_ß :îuCÖrßoÜBöÖÖðß/+ßÜ©Ðß|ðßߪ©ö©,£ +bhvC£Cßä>ÃÃ~_@ß~Ã:Üoª© zZü~orBÃz.+ä©oUO£ååZåuuUBå+ýöåOÜ,ßüßÃ_¢£,a,OO£C./ZCZÄ+:bbÄCUuîåãbb/Öü|£ÖîbA*îÖüb*ßZUüö~rUuaßaA><~UA£A@ä_B© @._ZÃ@bå,ª¢äBå@î_ð¢ßà >uä.ÖðÄvßhåü_BÃÐðhÃCC<¢bbÃö£ÄßOßßÄ~Z:üCÐ>Äý~bvÜß Oª<£:,AªÜ*büb_ýöBoã>,ZüAöª,.ýÄüä+¢|v:> Ahäbäö©oO,bZ.*uZv/>£ÖAhßßOü,,Uü:zOî~ÖZhv@b Að._>h*zßüã|aýbU©üZÜð.ªüU:£_üzUhÃÄCå,£:UAöo<<ªîªÃA:ZUz,¢ :zb>ß >ÐÄåZäräA@AÐýUC>¢_bãöäüî+ >_ö ,Öu¢£ÖÜЪÐ>O.Ör~,+rüÃ@:ü,¢Üß>ü+£îÄhZ>+ª+Äîðz*Ü:rÃßðC*ü£åZvuaüüu£+ãvâðbAÜãUß~hªªO~CÃbUZðbvýuh~,Ö©Zö@>Ö~ÖÐå*@ÐäZo©ªã,ã@ªC_ ¢*ðãîr/>CzrBC.ý*üoåÜruüã|@Ðaîh©ßüOhuãåýobUÐüü~>..>|/uÜC.+BZ+:/~ü¢+CöZÖ@BoÐÄüboö+rz*hãO+,Üðå|îÜ>|AbzÄ£Z@:Oö/hüBhåÜ<_ZU|ß<,üß_©|ÖrüÄ:aãUÐðßîüåÖU.©Üaß.urz*~ðÄh_oÖ©Ü ýÖ.ýÜaðA:ßh+Ã_boA£üv©ªÄöîzCohzuBãåu.ã£*AªÄoÃrrUOb+hBÄ>£+A:b<åÖåoªb_ßz£ +zð£ü:AÖÃböBÖoC+ uä,+~åoãßýBo©/å.bÜßßäÃðaÄ,.ö©hý<©r~:vöÜ.Ößh:öªAªbÃÄ,z~<@ð,©r:uOÃaª<:ã/hCý,Ab|OÖAîã¢ßÐU¢ý>Äãüü bÜðuö~Zu*~Bä:ððZbaÜßv|A._ý_Öo.ÖO+,o©*_ÐU v>AÄäßÃbr£ãrOb<Ð>©üb_bößð>bÖvö@v@:ýbýÄÃrãÃüÖðüO ÃðäåÜrßr|uÜ+Ðößvh|ÃÄb.ÖÜýÖrãBOîüzÐb*B£< £ß@Üðz:îåâ*Z:UvObîaýüB+zßbaä:O>B+bZîüã©zzü.|_©ä<ßoaÐ< ÃÄh:CU/b/@hvð,ü+ruuÄÃa©ßÜhr_bZoÖ¢b+~Ö@Ð.äv@î.ZÖ:@.üß@Ö¢ÃA Ãýbîýh*+¢åa,¢Ã<ßã/<Ü,<+ÐA£ +Uä.Ã_/ßÐ+öv+_b£å:CßvzÄðOuUðrªzå*ßýhÜ: ãräÖ.åoBu*ß>Zîãbb_öU¢hbbð||îå/hZª,|ZAaCA~+CAý>Öðªãrã@ÃU¢*ßU@£/öbhªU©UÜaªzÐßÄACîãäã @_ Ä<ÜðÖßüoÃOÖOüCUß@Ch ¢:üå A@rA_ð|îAr>Ä Ar£hb¢öãoߪbzu+rÃU>å~ÐZÖhhUOZöîÖbOBö©<. ð>åĪüuÄOà üýãÐzîîaî,Ü|råäýCC/@ußOöBã~ooð_a~¢ðÖU:ßAÜ:@öoðÃßÐýB~ÐoBoßå£: ÖäýãÖý~üBЩ .ÖÜZUßooÖ.oßöv.@Üö*ß ÄA~_B,öBä£U.v . ä|B>Z| Ãoå>|bOo,åýÄÄOÖo,rbåÜð,Ãðýrð,vZbhÃî+rî+bÃ<ä_Z¢ÄhB,ÃZUÃ|ÜÜr||ãUÖhªö|aZ+ö>ãarZbä,zZbßý|aß:hCªa ßu:ÐÄð*bÃäÐ:r:Ub/:ÐÐ+ýÜa©_ Uub|obÜbÖb> Īr~ßzß_CAZClkjhÃ.bãîÃÄîZ£ÜÖðîÖýðCaCo.öÄäauuöð:ððÐ+ a£/aîZZO@bªuvzOauýäZ<*ýî<>ü*räßO@.üZÃýuäCÜrß,ýö£Ö:Ãöåb㣩_@, öü£U/Ãã îzuÖýOÄoo>>| ªÖoåz/~ ªo:ß_oß_~üzBzãh>AAãa u<+CUvazoÖð:aðª~@O:aÖ¢ÃÃ._/ßBC.ý_ß~buãbßz_üÄU/åråî@ä,ý~~ß©ÄÄßOrA öðr _+©h¢Ãu£ü/ü©uöOª|ª_Uýv_h ýh*ö+Z@Ãä _ãÄÖz+ößuÐb~Ua/Ü*+ö*vß_ߣ|äÃ~o/ü+ª£ÖããUåA: ,Z,å*>ªöhÐ@bÄzðCÐ>Uubzbu£*Ãð>hb ß>h>UÃ@rürZUã_ð:ðÐ>,ÜuUBuoUýßÃ/a©rUuo.äbýbUäaß,C.uýÜ£©_~UbZb:@+vÜZ|£ZÄZ@ä:,Ðý,B,Üh|~Ä©+ý£©üChß~:©üBÄvÐßÄö<îOvߪäöåZzöÜ|Bð|ý¢Ðo+bäöbaZ,hbzä£UÜOÄäbCov>Z@î.aÜÃÐrüÜBßz Ö~||Ðuabh Öãh|¢aC|~.oªZª:zCîähöä,B<_ª@Zv/Öb©A㪢 ÜývÐð~ýZüZðåOvr+å:ABB,~Zzý,@ª|ªÄ>|BhÃh:@åzo+|_U+.ý.öO<©,©r,¢ObÃÐý@¢ãÜ*ððÐî¢z.UhözÄÐÄÐ@ ý~U|oýªzߪ/+bî.ªbb¢/îävobvZ_BÃb©a|ü,.*£ '), (0xF13C5E31FC809573D1EBF43AE7C9DB0C226C824DB54218DB217F0F277DA6200DBBAFEF05A8C6314555DB61BC197324C4660C8882468DC5AF2383107D716DF62ACAE6), (0xD6635B3A3DF7D9), (0xC1AD5A4AC1711E9DC62DE940E125B6B4D3E7E537F132F4EDEA90A92C480995ECCFC7C1622326AC850B2D20514D99F43DA5866910F3A96A8FB96D5F31C8F255BD97FD711A645490AD3A602BC412A39F509B6B87C19F85F8265D32A8B6C67BBC19D862B94F28DAD950F5BCD6927DA57C16CD0F955C6B931D12054BBC32ABDAE6BEA311ECAFE94F28C09236CBE3AF65A8B7B592E8B7E560AE4445A64ADD1EA6A51AD517EF6BB9CC2C7DE6D5CA34C73A639FA2047C19F22ED94363A76A42054BA2EB91B10D98763CFEE8656BD11096797D0A43AB3A19298B28A73DAB081262E9789B33DEA3162DCB28660693B4865DC9ADE9295FFF591088C10588655ACA33EB867BF335DCB7D667DD7782D41296D7A14974FD1FE902EA1E8AAA1C9D8DC7715D321A0D389327ECF512C28287D73C752B2EE61CE5CD14028491D4AB319B38D9160624A1F7889E0E2288080C268062474E35F06FA6AA8C901E1888A7BE7CBB5ADAE86B81B29A7DA390D8F95CC407DB042E8D5DFCAAC9336B7A9383DF00F64FA5CCAD323E14E194B3B74DDFCEB02FCB163C8479311EBFAF11B5FF061E179EA29989549017D49DEF4CF8AA445DEA65BA4BC76CA37B7C1D870DFE218915DB759B19AA45445C9FB4419F942D38747A51265044BB57AAFA261C6BCC8218B313DA71830E2BB2A5205EAB122A03E74FE51293ACFA39D01F1EF11E8328D98F1C9C8E8BBABCB5664F9F812FE60F447FF73FCD86BAEE6CB8DA0951651C0C2E7C47CE8E769C782C9330AB430D7809EA0FDA7127445A52D52E2FD5B1B16A4F49437005E81881CDE37F133A560EAA5E40D11E428BABE4EA21F4F86046C6C67B29E061009D7320D28E0C8DA83120FCC683D095E09227C49E5E85E3F31F20861DB8981075ACAAC1CCB04CB47E1D3CB901F732DD7631E6E8011BC3A217902DB26E8670EF98108619D80FC92F4673468021CBE1FBED4210ECD1AF0E5AE907AA3B839945F8AD4C20F17118046667B6A28ED543814BAE31C52C75841EE9012C30D1658DACAC2D4DD2D4AAF08AD43DA9841A0D8085A6855E8D51D41982292E37F045E73301DA0AF6618770ACA1BDA6F0EECCFF03DC80A68A4B06005BD813CAA9A6730045EC0AA7A910171FFE36D8BDCFABE32BB6292A5B6F9E5DE7FBD9AF1D4DBCC6062DBD6103E42455F3C461A854734931AFF5E814807B1891A68F23ACCF61F9D1416FD28F114ADF4692D337960DF60974B1A8FF2865A8468A152BBA74C1788691CB8F66E4A0BA1F6516A181AC448183B085AEFB2762D06C99294779E58F6A85194DA5CA7E8F24D3F6899912C326994693A809EE127C5E2FFA23CDBB594039D6AB1C685F9EB6052161DB049EC8BEA8729000E63D857B739CEE76CF5AC1697AB64FC366A7BE39A8DDA2E88D3678C0663C7B5B2A585AFB502FA8CB7027E6AA5FF7614E4E055700B45658089A9DED3C242E1093DF663E225B537337FEF3C980F6F78896D52A7261E57AA7D4FF5161B3426CA7421753CBF9B83FF2FA922001C08CD712A2145766F9BCAFAD64BE69220AF2BFF4924C8669A22C8FDE963877CEC479E648283EBE9EEA06AD8667A5673A4E1CE707D22B6F74056D70768579D0C144E0E8EBD821FACC34210A8C9E0001FCC5548F79506FFC990A7142BACD48197135EB4187BC7B622C221BD3B121E2D5056B73B131E95670D4E34FE166DF3FFEEB079856B3BE7A3F49F16257359B4B78279C3C4E5A97E887DF7A6DA46D9AFB4DE31DE8A9888C2246F134673F86FF3B3998D6B9CAA2F1A4541F11763851D5D2AEF6157417B3A2F09A79F65C252FA900E03F330C96E031AAF17993897715E9F51B61B848718B2385F6E61E50AC947E25761096F91DC93BCEC56B829E201878858F0140C476608F541BAE16B0C1E0FE5DFB6E13677EF0D75226EA8306098565DD6D99C1AA53BAAE168041DD6FB38B0CE46C24A2B10411069F2AEE9D8CDC894B95483842281F530A41BFFDE63D12679E9ADE9E99E4E3B3D95B922280641C2239F7F548277B48E4C5191961F1072BC98CC25003AD3DF066B2945FE795FCD2A6259DC3EF47CA3F2352FAD97FCB81C1D130C995BE141874FB078E95921B614EC847733C53433C82C1822CB1B364709B30D28DB7CB6714910C29C8E8B834AD07F0AB103857456D8EF346D43BE767C09796F365BF8EAA826132E1302A7B53CA8DD525C008543744EB64FFC38592D8AAA4693051C5CFED794628AE0675154312A07C4665C2A7B8425FAE795B8EE7FDCE59378BC14A0205BEE8AB7ADFA531CED621ED22084C73E8FCB0EEF1165592EB5F2BDFAC3E8982C79D77887D162DD99D2EE0A339A1C4F582E64F8E105C11EF6855C01AB4C6848F4C9E258591C3F5D1CFD751C235B1584A9A355DC5EFFA726B8C882027551225D6A950569B7B3E63BFF17DBF390B4EB9B6FD76807E68BFA0512CBAF809A3CD7CBDB27A19E45BBDCE5CD19DD3723B395F3ECE692ADF92A66DEAB0056FC1455A1C240001869134D55B40A824ACCBEC2D15F35ABA3B39A39D2B0B0C2F34554E0C167781AF713AB2CE09F90EEA366EFAA2FE82EF7B678B1FE28163D67B8505A005F19C0D35493CBCDB408CB1422BB866BC116931B166D2A48A579F2E0E633748035808F89A60C459C1C6133BDBDADDB7C8FC19691BD4EF9F1FF783DDA90EAE780943ADE922C0CC5C4C0F6FEB5297C9B079E8661149CD2D2E6869D8A3DDE7AFB3189B31982CF3940830BD1D0C65034C882DD263C1A79D2E3C167F81B9E7287F6560BBD3B765308386545EE08CAF21C9641D50750A83EE0B7B6CF582AD72DA20083EB8ABA9309422FD4EDD6D49BCA28CF4B51C9B97B374E172B0584A70AED613793DD84DF7751F34882D78BBA580C1BECA688DF7563F8854CAD639F8D84AB24E78C9F40CE454957F95E713693BB83BF1EE997F0820DEBD3AB48383203C265B3E7B2943DC8CB5D975D20D616E2B1E19119B470A3ECAA92D9A0CBA5761D175436E8CD5EE11755F6539C00A35137C4E0E95697185F41C1D73D1FBA9CFD25D78A45DCAF2E25630079C3BE2D07EC0731A1DBDABC1F75FF04F526E611C16CC8F92DC4866D848896CB76561D549124C9EB25EE08B11269B80446D7BA073F413F1D0AC4FF4365A9BD29451F45C9689A63C05D0AEBE35407D6C40C7216BCDE8F8C3516F059DC2586858C20EF6C0323EEABAC63E9BA34555BC8F2EE3B36E382F04AB59310B2684097AAD6756FB2649BD3901DD66A58F4D547DFBB3766EDFA4FA20920A4B660133C336BCC4EE3CEF5A964570A9B290D18A755E04B30F730E9A9B086D36681CFE5638CD1930E8CB5F188EA11D30FE35F2694E0894EC624D2350272128E5CFB9F179461971E476A1A2AAFFEC256E55DD9C651603E7608812F4EAAAC809C6A27949D4AFA3E9E4C40DF3AD65E9ED7528B5FA4985C3CECBD191F13424863AAD97DB0885A250BEB2F3B7A109103AFA9E257EC2F4CDBF41DEAB7D031EB2B5C03ED345158AE167D3D7F64855CE22C5BB9696520FA5C345E0D89929DA244DA0003EF76235CB2570BDBEABEBFD856973BCE5C26C875FA61A7A8D643CF0B78CAE89564817D6BF8FF071269551FAD7475A6E266CF562E118A198DCE7A866E8800531FC62A73D529CFD56D2FA61C95420A2450ACECA4B974CA73EA77EFAD7E78988A6901FFD75A01D1C896F9F90E6B7D743BC45625B1AB6B99AB0BA6996D3A2266E4872BB3835232DA5EDB240DCF8BBC187CF3A3E92852E6EF0D6844CBB378748E749304874FB9E0E9817BC6E6875DDA2F4F8E2C6996393E91A03CB62B0D6716D65695893C7734D8B312BA57AC8BF067AF8E257C255C0AF84B5462E70303C5EC2A64E08FE1D4ADA81AB56956DBE19215AFD5169CE7FAF18A5BAD4DD8145DC5BF4CDE3D479B6075DAD07D617FE2B41C59B24D372DFD29043F7366343486D593BCEFBA09FDB45A8A4F5F4BBC6A8971979790E415C72697C223CA0DC4252C41440AE9A48038AA1EA567C2E7CEB16C99A5F1DE9CA3A2BFCC8657F7E633B68655131DF7B180D4F15EFD723EBE044ED900B72057D2569FADA15B1D1E2840B3EAFEE16DC4B0B9BB18C0F07FAF316401B8478EE73F035EA40E8370565663C6D91E39874FDC967A1856FC1796E1D6E06C3D5964C6A95984D7A03D6F41305354A50A276165AA143511DD668032FBB7C227A304190D0EF02FB4A4AF9F9F3738E7F397629CCA757AC2192442F942C951EBE86B379E2C3A57A61A07ACC0FA8495EAA48E9C9B892B07A228420FE8CBF6DCEB52C3B7340F9ABBC94FCC72C2D8B9C7948E6844C43CB652BD638575EA3A6EDA132AB16E36CD61EB19C2C35BCCA844D96E8A6B5A53B218AEAC7109C07A14D18EE0E26F98175B80D72C8D3AF1696A96052EAC175FDF0486610202B1B5C39160F4F1446ADA48ACC202F9843DD677274541EAF4A1CE0D71AFEC6C0E960499DB039B1C35F024FFCBCC71EA04664AD6AFE9DACD7FDACEEFA2F78F948E6E3A06BD792E7092BA413710422F382FD3F91B6515BC24CB4729F044AB793E6080715D826B3C9B37CA33F59893AD2DBB96CFCF0E743F78B2154B764F2E3BF74102D69FD0C1A5B4A75DD39AD1C68C2799FC34ADEBAA3FEC51089B7D2FB64C099E3CA495CD1D5CE9E10B27A0A09496EB9923DC42F98E1B96D2EA3EC8263894E101CA0CA511F65A7CAF5ABCD0828F4BBC71BFE40BDA091000110DB2E2EE94B3B866369ED697E1D9A2C96FA3AED13B14439E82567654990708AA0C841433779E1A97047A5BF075148FD641327A55713EE5F96F545C3E3D63DD2F863C9B6DB56F51C19907CCC0C853296DD6A013569CB328DDAE1AC41331DC59A09D2C6A48892220D1E0A8BC696215311C3AFE679D508692D303CDBFAAAB3E9FCCBE2C239BE8D0D4A48F3165E3F6CF6B98E9A7E84364BC5006899744CB627636A218FFBB45E195235A19B31E1F10BEDC345226B0F3565C5801DC1D02519C1942090AB3CAF71425A754749E29B19E30E5DABB00694BC5435BCCA7B979C482D1BDF07115146CE3D5203C8F6C7EC822A6639B2737969BBFF633B7680E5F5ABBD2C1A2D02930891C88F6D5D03CCC68C49399F145DE9D5B4B12407AE15CF4D575C580AC9ADBE80965EA7EAE40B0CB8339DAF2C4746E14DD457667CDD8B597CF8411500ABC2FCDF8BB809B6B5FFF0A8A56CD41066A206117B0A35724642A20A042BF1A3F60B0C71A1CFA18E3C2A97D466BED670B74915553A0384A08C8A994915FEB18A0E4DB1995F626F970178D45072600B886B3153BA159B69F2866CE5173658783E780DC6190C3C1154DA7E54C12E332E2B7E10DDE3AAF77472E4BF12F37D5761A80096D7659AF17C2E20FEE09746A7C3523EBA98257A9494819853354C291DD7821CABC1985CC8908C93AFC3AC16DD2C3CFCBFB5C3BF3B2E6B0256CC46BC300402275D7A9AE52AF675290B92CBD1E86BBB27F850696814C3E17D569605FB4AD063AAC084B8629156D1C9409AB3A9629A1AEB111FC3DF9A9A129A991C8F94F179DE3B2E211063B25895A17EA0287A10371BBB7C1AEA2B0D830F25721EC975C73DD8C6BB777B4189B638B8892161F972988A6101D417D68EB32DAA11EBF1948F20DA41C861BE98BCDA31C5E231A1EB2216B3D9936773F3260137074AD0309EC5A4296846203011D9F2A427A251F35D114288FA37170027ACE71AC729B64EECA993003D0839A502E5A2FFA1C24C51D40DDAF607473566AEA401BB5F0569E722A4B87D0E51B655D89C861595185E65609646B94FC046A4742D5198067D45FC7BBADCFD0ACF428257851E6BC11FD096459C5BC9BFB098625E1308E1FF1D4E5B578999DA3B615A9053C361C9A2DBE3545CBB536A217C3DCB227A9EF6C660833936C3133785F55AE341CA75FB4ECEC08330B38543CAE339DA4CCEB8C1C264CAF33F2793DEC7ACCE66616F295607417C53B91BC612DB3F6F528939EAB73D9921DD0082BB273BE1BB83E41EE25ABAE2D30B526407A79DB71700B840558DC11729C74E4B5685855518D75F422DBC5C1498A666DF64D8917A3F486ABB6FFB8C2EC2CDF51B0C6E8C4D86FD4C2F475A8A5AA4A3A7AE27E1B25036D40B0D1BC9E51C4B318060C74108291A1859678C6132E5BE0F17CB53DE06E01AA4E438637E32BC172FE415DA2993629B7E930E884BC4D4A1264F0BB219C96D2A9F46225CCFC69CE69D4F5C7D1D0B947BB430D44AF757CEE010973C2E2609FD6576EA3AE37106CBB8F728EBFB6757841BBA8FFDE8F422324777414C38896DBF9352F70632D0B10AAE651C53CF6CD379B9122174970B147153B7F26B30BA922E896857A97050514A08854F83D7CF63DBA4C8922568F927873D85B27ADD45DAF4D2EEC96715290868C1D66B12BC9199845417C767276DC69040CF6BEA9ED66DC3AA5AB1E905FCC57ABF2A64918D15CBACEB2E26C57D72CD6528392645BE1DC9EA69A86762E0B07E58514DA7FC0934022B04BFFF70B0A745388C4CC1CCD580BBA2617928E5AE68CC3BAFCD7330CAD15BF336FB40FE1E5939C2622ED593EEB182D191059B8F0C1C7C9BF3C3C0E233156DBBF0CD96DA3FBD83084065837F92384CFE4BA29EC436CCE7197EA40B5B98568E4DC01AA3211BA791D482934EA699FD09BA76C2979176A98523E67C5C9AB1286FE9D735BE78942BE3A310C942A27D407F809B50E4D5BFFCD61795803A9E4BF7225A2365CE643F90264ADFF481AC67E2A5A6FDDBFE61439A2ADA5FA6E314F1455719A7E77F18711B410B2A99F5CB7B29B0B2DB94A06FF8C116893BF30498AD12599A9C67057F638C34E199F336A9A45F5F35F631395DA4E721E6D1F6DD7D16A95E183F5B2E1424314F4E5FBFD6048A6CE4DB94CFA27CD9FCF6B4461FAE6DAFB6CAF0951E6948304B11C5E2EAFDE5111C5B641101E94707E13F43657ACD0482E19EA9F4E56F6C029BAB49BDDD9AEEFF10A229C3495BADCC83E9B3DF26E3B67D0C42004B53F02CADEF6175569F892A47514454D7A4413986F1DC70FBBB8CDCB8F5CCB19A9AA2AB1F767BD4E8E6572DF9BF6B8DE28FDED8CB09795A778030F26285BD60D3D78FADAF983460286D50A099AF773C4FFEFA2916F3E6912047349F4589716328F6592130BEDE495A7DB05DB8D9C0C708F4A2638B944ADFF1FD8D6764941B9FFBED77A355550C911FB0CE984388D946866D9651E60DD894AC7930323077E5C5621061CB621D71B3E71144DAC5B19C692447E0F6FDC9B8EE15E2F6DC25D960A8CA093532260EE369FBE36AD5C9FDCFFADDC70EE996EEC8995873B58026958E0EB09B0FBC7C6942156477FB1A5FE3251712FCFE5DCB7711DB419BDAB358624366545C242DED137E7384F8841FF3AD3A754D9E6D299630423989337BE08F8FBD013394C503BFF72AFF7E8AD9D2F2F2E893616465B9F519CF2419EAA4B9989DE4F53A83EB5EE837B656736EAB0B577046974BE77F2A2A030B1AC4A0E9D4537067E0A6E3976F0689AA29AE0E46876DC4CDA8A40C6DB01EB9CB3677D099474DE1020307CB6573D8D790C13C557B1BBD84AD00D341304602B6C1EC1860F735EF63DBCC0C4380A15F59D0CD7CAC73C83DAF79F32399730CB1BB005009785A77DF5AD2D97AAF0E7A040BA1797162CA5642F8AE68E7041256EFCF1B50422F97E6FF58ED21D9994E8EA1FEEE18F7FA9B4EF1A90D11C9F190DA487BEAAB94BE37D573BA7A1874A97CA9AA20C7E916F95EF533CC5F9921861D0DC813D85EAFA3FAE2C619A53D7F82D9472C6466A92AA6C44E1CF577C75F9EB3EC9D6D5061D01EFA0625E522FC542175B0F2176CBC1F73E3214F8941B92B32832866B8A0113278760E6A60844484C7F9FB7FC7D54731F6CC298A2F1247DC40DBF261FA969C81647E7AA15E52BFEF9E9C878F4539645D3CF66FEB768703652F312A8491E28A315D7A1B485BA5D2A40D39EB928BB797067695250327B00ADC7A14722D273A5EBB125632CB1E1B019623CADE3C9C70DA789A230DFCBD8709AC703FCE4733A57CD2DB2F803484CBE85B938EDF5CD2CD400939FA93042D61FE8B4C855BDF4DBA637E4D0C616CF0A5F3CE3BB2692EA7ACDAA2FFC40D391278A57930F5E8FF70080ED82B610EC56CD3199306C5C87AF8D0E39FAAB8E089AD296CD567E73BFBBDF45D32A49002469E15362BAA79324DAF2A8060114854B828852A01F5395E84971ED5126795D668CE9D019582B4DE33F71E253C67DBE9759FA5091F65005064B6B1948CA320E5195418927446BE3674A6F70AD613211DBC346072C28BB702CD4C9DDFD020518FD6390BE84E49752EE16F95786EF67A509494D75843AD228D9C15C427A9DF65535467339C0839CE72BE319153F63E93D6D24C4A3B48F94C28167D4B39844E850109412307C2DD485BC6659A121CCF975E82ED545D94290B5B1A0A868AED95EE6FAC8F49B41A8C14F403EF75E35F3A0C47E5EDB696F9276DDF36C8ECB857BD6D31772A658C85E343F5D95F59A5B427FCE0FE3FA4FFDE577684226A7D529F5C9D4681436C35D47FC102AAC1BD99CEC72A0ECB0BB918196D531FB4E16A1B66F0567DC2132370BBC70C7E7DA2551D9ADCB55A3F6E8693A2852C14F04C81F315A69CBA6A3FD7BBA4B95304FF3B9A77183685D72B0FDBF769C2DB3CE60F806F461969D7059AB25A04FAB6851B829367EBB5FBBAC6A9C705CBA450A7649BD49539E3BEE6D1C3717D832BD3315955DCE72E74513013C5A99C51640C60490AF66925214C37C3AD9527447D369BD696AB75C86978F049A481733A21956DB710337935690B3809A42481DE29EC968E0DC6BAB89698E091061F819FD8FDA11728703349BD666C8B736C2445F61120B7EBE52C5ADAB4207853E72E49899831A68269B5B8B84CD1A75A2F452A739B9AF4FFCAB4F3D0463D7450BBF6D6372201DA3A7DC28D5B67FE9E138400AA6EF604B84C3A49BFE33ED63B2C4168FD55FA70372E6BEFF6D80D9898CB16DF4B4692055AB73E89FCD841F6FCA787601AFF01481814C87C03060DDF3EA1B1F4CD5E8AF4993B0D461771735EEC74F34F50AD7E98CACDC6377E160254A95E4A5B274D299D1C92C7DEF1BB30A7A1698F8F12BE8E91221829009853768239B99CB92617379E4B5532BEE6A0A70E9C1F9614867241EACFB9390E232804C91B44A5371E77818932F144BC8CD0AB81711A6379BD61FCC678B2E96DDE287A225069A2A1FB6FF0249E0CE2952E845EFF0DB79D08C58B0CBA48DEBF6B8E13AA0976226B232D0986012A3FDBB07F6697F454EA5F278A715DC55CE8591CB084968A61D91E0C183BD103309CDE85B05B3AE146CB17A4B4837E04C5A6C645B06950A5A8504EA6478BDB18185CF6EE93D71501AD77D6E56DF1D6DD5A1A4771758B53C74B39DC5F0C9499BBEFFE8B578D9071ED91C49838936B38B77A704C2D4469A38C092FA259FAB5F418DD1BF56E667E50C9A859E0B0F31A33DF0125E49B486C76855AFF4E5EEE17F3DBCF7F5A7875C950FC208284EB89F398EEFBC258D4D159CF71A47013662FF2DA916504E074BFBB6937D5E87BC5E88BFC676660622BBF1F0A76AFE9D305B6E9CC2DA8F3858512242E3F5820FFE8DD09891974AB00CF90AED146F969C4D6E86481EB1B4D1DF4057654413123D39F1F2299A660B9910AE9FD9DF9213F8BA9605756F49E14CC8FEB9414FD56BE9D6CDB3226D7D01E762ED277011EB024D2C5EBABE1D9CCDE000B5509BACBA594B32A5F301DEF19B4D842E128212712AEDFC7C14E11AADDC4A0FD321A81C664AA893EC3D7BF7F07E3AC36D29FF8A3BCD8F9A72AF20A5682084C9B8F20BDFE3212DD369FE3643AEE5FBFDEA2DBD73ECBFC405921DA9B71A032BBBA8A24EFE626AD04C0C1C204D974BEB8CB322CB4A7300ECF93E063DD57766C956C27A9B0CA6FD8B7F5D6177C09F766E56222CF3E747D148A7B555C06C2D0AC49542C97B1CB0DED5C5974BFD01991C59B797E7A34A72E21EE131E347512D2F52529CE28DD5FB519553473E400BE4371EA8FC18D445577A2260BA99EACD97849877E9AA64A69E83BC46425FF33492030CFAD4AE55144B1CFB22B02D1B6176D7BBC295C81249D2680A785C9DF30776EDCEA78CEFE8F92F843CDCAF41F671684ADF7A9430AEC9F0B3287C93ECB7BD19F3ABD25E73D486EEC2A3119B459A8071991011CE8863464EF4B6D9C77C5542CC7FB2BBA61412E466488BD19D8D3EAB18980B0ACCA5EE9180558359BD0ABF727D50451B82DEEA5D762BAB75FC91B8B1C60BB12F615A762691213B4090C9376B9919643D48131849BDBD84A0FA7894FEACC193B159900112EA1E8A61A399BCBCF44FECE33D8B79B2F37771B3C5C52C188C4CA3CF357601F91841432988B69623F0D7BCBA8BB1C11157D0BDE21E4D5D14F261E566E5FD877E3DE3DAEC38402A3CD15DC2EE18619CDA8B827754B82FEACAE43E3716C13F3DF3503E7CA7D6D4E907B68100C07A6EFC80D50AEB537622B60E090007FA19037BA21FDF9DE9E4F4F3B6996FAE372F1A507531A641B643DA7D2D886E9ED6CCFEEEA3055EA0AAD1129BE01734BA16847EEEEEBF82C872C1B55E3552605176562CE9AA80FB31C079A5A41F0A61AF1F1066A9098FB0174A267BE150006B5860B12599EA4B0F85894D2E7509DEA96860063F24EBB757F69605AF741519D1C00E5D336DE4C7B4D400E12FCC614B1D6B8D038159C1466CA9692EF3E4AB9B706F7B6E66AC9B4B8398416B140A979B954AF833F7019877FEC7F099F4B5D3D0287560B04102E460D0417FF90856326211DD99A8EC77947ED6F36FAEBC0146CDB471429EA9D74A92668763A581AF7FA8858E78272C2AE3B0D0F1D95D9335A4CEFAB2349713A3C83A92F7326513FEED3783C7192D992F91998D81BDA7FDECFF20D294AADF6AD884E1C64D8434E88EACE214A1D9DC2C8735DB10AB0981E6103CA60811827F440DCCAB3237674B9B6CA10EE4CB935C1313045B6EDFBECFCEF2FBB600EE3CD70C2D9E06D52E99E51FEA3FB3FA0A9D1A7CD082E50D2700745F0CDC4F4BB14ABD2FD9F2C73D9C76F4892F3B749FFAC5B455D139205B57D9D52D19B7D8425AA96EAF82842017D5ECE0699E5BEDEB8BE4543717E96A781A51D7F01D9A13E4AEA22E75DCD50D76A5AC8FE458C6BCFBEBF9913553913A713EF68520BC2FFA3BD8FBBAFC3D681EB6D6ED916B69862F4394EC142408DE811D67BD36D64FECBA75B2441B5D1BC0CE83EADA5E760FCF17B8C7418BC01BC632FA7AAD8480213866FA231BB9156AC237D42D80492E700B0DA8958E1F0E50FA69FC1110E27E3C3E52A2736452F415F25E0519A7A28B8D047A6F9FEBEAA32968A938A1BD0449DFB9A7EF3D96BB1BB8199), (0x0A), ('b28e4039-770f-4c82-bb02-16a560414b55'), ('1753-01-01 00:00:00.000'), ('2000-02-25 21:49:00'), ('11/19/2008 1:26:51 PMThe quick brown fox jumps over the lazy dog0123456789,.;:?[]{}()-+*\%^=~!@#_|/0011/19/2008 1:26:51 PMThe quick brown fox jumps over the lazy dog0123456789,.;:?[]{}()-+*\%^=~!@#_|/01'))"; - break; - - case 10: - $query = "INSERT INTO [$tableName] ([c1_int], [c2_tinyint], [c3_smallint], [c4_bigint], [c5_bit], [c6_float], [c7_real], [c8_decimal], [c9_numeric], [c10_money], [c11_smallmoney], [c12_char], [c13_varchar], [c14_varchar_max], [c15_nchar], [c16_nvarchar], [c17_nvarchar_max], [c18_text], [c19_ntext], [c20_binary], [c21_varbinary], [c22_varbinary_max], [c23_image], [c24_uniqueidentifier], [c25_datetime], [c26_smalldatetime], [c28_xml]) VALUES ((1957187905), (255), (null), (9223372036854775807), (0), (2.3), (null), (-100000000000000000000000), (0.6410), (0.8919), (0.9833), ('b îýz¢åÃh+ö/£> ÜöbZ>OhCv,a>a_åðuv|Oßa£BvßZ_uCåvýÐ@ðvöörÜvu~zCäoU/ÄOb _ÜzýA©åªåh@Ð@vAö©vz+,_ÜbßhöhZß.ÄO©rТZðvzO,Bb|~ªCzÜ/äÄðýývråÄÖ bÐß|äbz +*AbrhÃüu|*aýaüä:ÐrÖ*Bb|_äz*ZaÄ_ßü.BߣÄäzZüz+Ð bÖöBhã_üZZ<@*ã ©uãßraªåAßa*/bCÐOß@Uª*ð~ÄvýCß*h+aý¢Ö<|_ :åîZC¢hö+aå~v+ß/¢ß+/öª.*r:zîv|ÐÖAbÄ©ßÜzz.îUrU*ößC~>î@+ü|ª¢åA u©ßvh_O£C¢ä>bAb+rCä@>ß©bãU©BhbOåvüru/ðCßÖhýü£,/*ðr,@A@ß.ýÖ/îåB@b/üUBãßðvýbÖ+ßÄ./ß oö£©äÐoÜuÃ>uð£¢ð@©o @BZh@'), ('/ªZ ýB|ð~.ÜB>öb~UÜÜhCÖîOÐZ<ßb£@håöÄOö*@C+Äb>Ö~£+:@A*Ðã©ÃÄC~Ä¢Öäðå£r_uå£åU©Ü,Ä,/o¢B*_ªo.bZA<ßÜß>¢äh¢B+Bh~äoBbbvýzÃ.b@,zzÄUovr,ãC/oo_~Ö ß@öÜÃ:b ýaAoh*Ðýu_ßîärãðOAb©îðÐ._+¢||¢¢ã£îOUOUÃÜÄOðýÖä:~©a~©,,/bv¢ªÜÄo.ªîüUüAªÖð ZöÐýУÃîAå_Aü/v:Bü_¢ðb|ÖzBܪ<|bU© C:Äb_üðäÃvå~ö@ý>ð¢uZ.u,ü©£åB/<ßZ+¢ ßÖA/|Äb+ZåÐhUªý¢/A+ðåbÐ,åBã/u:~uzrOÐîr£~*äCbð@¢<ªuBäz©åb£ä ÜZð:ý/*ª+B/hObö@ßB:zAâ_£CzBh:C_orä<ß>zÜî,h,oBîÜ*hböO|zb£,ßåhv:îüåüýu:ÄZßÃ,¢|u+_u@Öa+O*ªåÜß'), ('/££ðu.ZCð_å/ßo>o©@/av©¢>:_ß@+B:¢vª*AÐÄ*ßB/Zýä~~aã/uU,..ÜAo<âÖÐãBUoOß:/üO¢ðã+¢¢åöÜ©öåruäO~a~u©O Ã:îª.,u,aUbÜ<~,,@~ÐäBßöåazau:ãÐ>/ªhðÐa:_|Zö¢C:+~O¢b£ðzUî>aªC,ýðo@| å:<£>hOzßã Ü|ð.AßÜB~C*u/Ð. h|*ÜC_C>hÄü|>Ða:bouArýöC+.ýr_uAðbßbÐ/bru:.v ãu~ãCîov>,hoªU.Ã|îüð©b<ÄÃZaýüa~ÜÄ¢voßhB¢bÜ/éîhr©@©_:*©ßÖåhßåOz>ß*/ýüUä.ß äî¢Übßoß : bz+ö<,öavÖå:ðîz:hU.£vÐh<ÜOüã*©bääOÖAbA>äð._|ý/ÃåÐ a|ðßbzOåOZ/B£ª©AªÖov.CÐ_Äär|> >BBa©>ðbC/äOãr/ãÖðîüßðÐ<ðîã+BOCª,äß ý£ðoB_¢Ä,Uv@CåCv©@>|+¢bÜ©|üðzUÜý.BãCýÐåZzabâzUrbäöä*Uü+|o>@~Ä.o:ZBAbývð£uv*_,h* Öä/zî¢OC:|ãU*êªðu*rrobªAuCü¢ãoAhrããüä_£ðð~//©Z_©Ö¢oßhC~ÜãvÃ@r>¢,ßCoãÖ¢bÃÄZZ~£o+ö~zäraUýbvbC~ähÐ.üb¢_CÃðC_zö._hbîA<åÖä,ýß*ÄbßÃ+ÄBAö<,ßßohªä£ãzã.ZªuO*îßÜ©/rÖ@@vüh~ä+~©ÃCu ÖoaÖo@>zßOör©h/äÖ_OÄhßCUîbA>ov+u*A|,å£åß.äv+|bÜ*,ÖO|ßzaã£Ã,¢uÄ|ßhÐä£|AýB£+zv|Ö©ãZ©B.Bß/bAÄÖrUU~Ãz:UßOhÜ*Übð.aÐZåa_*_¢oÄ ZߪãZÜã,ܪüC@ä£oîÖ£AåabZ/ärÃîbbhÖî@+@ðbýu@£,Üo+oåO£ä>©/ZÖ ./~o<Ð_ß*ª Z£ü©©ß*+©@v++ÃåÐv~>Ü@¢ÖöBro~hÜ:ZU©v o~~*+bÜÐoBb*+abä ßöb:UB_ãubªäuhÄ.|~©ao.:äaÜaCßuhĪü/Ðräî>A>haoåöö+ðß/+ão,>r/:b.AýöåvUÃüuéoü£v:ÄhãbÖå.Ã*ÖßbUa///¢hb/£ÄrUuÐ*OC,/@hß oZöhåzðr@hß,üz|ßÐBUªÃ>å@:@za£bÖu~Ob¢+@BÃzhÜ|î.ßÖäZZu¢U£ß£Z.o£ý Ü~Ð.ÄöýC£hüaî@uUhähªobå_AZªaßC,Üýa©O~b£Ü©/ü:Ü¢bAÐ,CB£¢ü/ÃO+. üZ_ÐrAåãA©bu+öÄB/Ü.u~Z/ýzC+Au>,©u:Ão/Ä|ªrOÃÐbäZÃv*v,ürÐÃä_/b£ã¢_v,ýîU|©Ärßa.ªÄö/ß©ÜåuýÄAÐazåZ<ö*_h:£ä,/Ä©|roOzBh~ývýbÐ v©üOUvÜ/Ðä©ä:UZ|/Ubu©ß|ã.ðozZuüZßßrüîrr/åC:Z@/¢îZ.ßÐa@©:CCÜ Bî,b£b ©Ub¢ _ v üZvaä.uZZhÐäß/ä*.üü,h,üãüÖ|Ã+OChãÜßAã:zb©CÜ> :åßOZð|+år~ .ABã@îBa~aa¢ã>ö©åÄaª:@>äÜ@Bv_Üü~uÄ..rUouÃ<Ð:åo*Üýî<,,büå£_äü¢ßr:oarü,.Ðà özr+h,~ðhßö*uýüðUãêäãÄ¢bBAözOuÖÜb/ÖÖ>>oZA>ýUCöaUAh|bB:B~|zA+¢ªöªO|o|roÐ _zã*Ð+öoaÄZA£Ä©¢ Orr:Ü£._,b|Ü:Aå.U@ܪÐär*å*î ðö<å_uAü_äÖ©/ß z,+|Ã,¢.råa~zaã~.Ðbª:~©Uuýîä,ÖCOð@åö>ßuöz@Zý@¢ÄüÃv ð*råÐÄC Ã>ÖA/Üß©ßCåb¢@hzðzÃĪvöOC/rãÄ¢hU,:_/|>ãuÄüðãßrÄ.rîü/A,Ð._~îý|ýüoý£ÃoüÃÖ.::a¢*B+îÐߢߩÄrýÐCåüªã£ÄýÜäh@_/@o_ü|+Bb:rývÜ+ouö~B/U@*_ãBÜß+ýuAüößv£|~bÜ,v,*å@O@ußa ªÄåÄAbäåaB+_Z£/a/ÜUbýäåhÐ:rUzßvzhîö©C ªß.bOärbý>ÄrCÖª/ ÖãÖü~ãª~uãb,,ÃÜåBo/£ð©að©:Ã@B©>ÄÄ|Oã++Aüß<üAh©ªßö A~Oß.bßßZCoB>_ *Ãß>ð>Ðh:ä/ÄýÜaãå|Ö£ð_îoCA|bîßÃý.ÄßüßZAßz/Äöü+ãAvZv@Ðå.ßÜ©,îö£u£o:ZvýAb~_ð <ßüOÖO@ߢ_OU_zürCîCå£ubÜ@b|AUu©ýß_ðýß>£Ä.äªBýuÖüAãðÃ/bÃvÖr£©¢<|,år/ý+ý,¢U,:ߪüßzz~a,zü|Öä©uªãüBðZrußÜܪA:Z:Aªå£ß.*+A.Ðý__üüöa@@hýa.r>ªb:hB oB©îZ©@OÄb+Ub.ßãb@uB+C_h©*~Z©vb+z,ã/äbÃZ>*ßbªÜ ßÃÜýöîaüb_@uöBu@/AaðÃ~+üýßöªAZ<_îaß~åZC:Z.Üî*ãÖrvß+A~ä£r ßýCü.öÖbý ðz£¢oî_¢vß:¢obÐ rî/öb*~UBZa<åßåªrrhbu,.äOãAubÐã¢bZ~Ð,_äîbÖÜÜ¢Z£vãÐaÄzåßüo+î:üUßÐOrZrUor£*Uý:ª£UîOÜ+*Ðh O:¢|A¢.ðßöA~/ý/aÃ@*+bî**>haZOä:aAåCÖ¢ªOAðzO@~bßîÐÜÃã,ÜvvCvbå¢CÖð>A_|åÃ,b z/ÐÄãÜ: B_.Oªªvªã¢*_Z,ß|Ua_>Uab+¢>b*@|v>ª|@| Öî/ZöAbb_AðªO:ãuöbB>b|B@îbZ+ãöÐåUU<~~huZ bU¢rß+©£å£öCzrÃv<ß@vo/oBhOªb|äZbüÄZrÄÄðZ©Üüä@O©ZÜ B*Äao¢B@b£ÖªbA+ähªî>|Üäu~, ZUÖð+ö_©BO©Z@bÃö>£Ab,ZÜ >rbU,+B~Ã@Ã@ßðö/öaz+ßa¢©vÐbC@:ªÐããÖÖC.ßBbu@BªÐåzr:,~<<äb@oÖ.ßZÄ:OOuÜUvazÄrz~<_b_ãÖðbbAv*üÄUö©,ZÜ@bð.>Bbð/BåvOv|ýBr|b*£,hðäß_Ab£zî@b.¢£AÐÃýªüoýOÄhUä:ßu.ä©Ü>¢z_î+:|+©ro*:Oß++b/üðÃB,ÜrO>ÃBrÐãh./hbu@ª¢@@ýî,ZýäbßUß~örhCovb©|ý.> Ü,uZßð+zO~.åßî>ãb,>b_Ð,årZ+o¢vÄ¢vÄÄîöB/ð¢ðzu:,/v©~ð_|åÖ¢üãuuÜã@~_üªAÖåUÜhu|.O.ßäB>b Ob+üböv:uÃäBߢð/ßuîÃÃÖ/£OrÜZã*CvÜO.<~£üߢÜ|/+<¢|<+bå~+¢/¢ÐÜäOü¢ä~~zªu:ãOUCbîOaZÄ~uß:zU©.|ýãääC¢£oÄäÜoA A_ä¢|_åÖð:¢rCßÐu.ÜãÃ:aO@ävýB/~_<ýîýß<ö@Ðb/UbÄÄßu>+__zßðÐZ¢¢Z|Ü îhrrãðÖ:vB¢AÜBßo<ܪbAaOrüv@ä uOZBîO~>~,~¢BvuOîüOß:ßßOZzîüau|.îhbð öäðu©å+a.ðÖüAbz Aä.,Bß~Z¢>*ßOÐüuZãöBv~ßð.oå+hýüovbäv£@uhv£ªo_|ã©ü_©rCub:b<ýöðrh¢@O|BåÃ|Öªßߢý¢,ã r.ª ÜAba.uo_Zrb>ü£*aÖßZüî~z,::.BhªÐß@zÐo>B:<.u ¢ÖCaýAã|.h£.rУ_ößb,©© ß|Ãv©£ :/bzbz©åå_.ä_@à ߣo>C bã îb BÐöbar>*AB¢o~Cß+ߣCßCuåª@ouh+rühU*Üh~*ã A zÄAýîa@ÃbÃßvrää _äý*ýßC>ðU £Ü/ßßßßðo~_Urª©hZ*ühðZvßý © <~_b£Ãäîªåý<,öÄÖaªßÖ ©ãhöB.+@£ß:hÖü|>ß+@îaßÖ,h|Z<+üb@*ð@hÄ_aZA|h:ß/*/ßAã/öu<¢ß© AUU,|zßoß/.ßv+Uä/©z~Ãuã©*h£~C:î*Auýbßo|hüZ@ý,u~bÃ+Aö>b£ß,|A/©Ub+_bÖb+rbZCO¢,ÃãZC_~îÖ.üãü|O£UCC:ÐUo:z:_Ã>zÖß /UC|vðîB*Zö~uߪãª_bªOzvåröäv/ÄZho:äöÖ @uz>åýö,/öbzîüU:î©ö*o/Bð/+,ð >£©bZAäZÃ.vöß@îrhßzåÄ|Oý.OBh,b@ªAbðz.U¢ö,orUÃ,*ðOÐz|BAªö:©£BðÐî¢å©ðÐ~ªßåo*>_*özaßoü£Öö>ý<ýäЪ@A©v~*a<¢*|ð/,Ö@bª>+¢ZÜÖUåöoðUªÐbZ¢ ßZÜ~Z@Oß,Ðz_Ö<.,**üUvîAÃ.ã|,ÐßähÖ.ÃÜãðbBBö+>|,,/ßu,Ä ,bðUbO/üßb|åOÜ Ü£_/väoz@@hA/C|@/hß+*Ü@ÜÖ¢hZäߢ,ªb©O©ö/:UÖ,Ððhýãu|CÖ+.üýCÜâÐä:ÄåÖ.+:,ä<Ã+hª+ß㪣zbzÃåarB©båvßÐ+Z©ãOТ+ãâbýv+¢zöBý.ßoaaÐuZÜ ýuå¢ÖzÃü©äaðuªbßAðÄbÖöOßz~h©ã/> ª>Ä.O+@bð*Zuü<|_üOÄz|Ä~Abb OOAhu+à Ä£,©h.©üãßaªÃ£ÐrÖåî©+BA*åårbãZoã¢z@bîî~O+BU>o~ <+ÄßCbv¢å*obZäå>b uÖÖ©ßz¢ürr,ö.¢b*ßüvä@/>ð¢|Äýz ©ðvãB©ðã~,OhäbUöö@AðbîUußßUãAuª¢£ä@:©|_+/ü+ä©+|/©ÃªOö,ZÜÃbaz.Bß+ß_b_+_:ußo*ª.Ãv~ÖÖ¢|uü*Oabhå|îå/UOZåuU >_Bªð/Ö,är/ßA¢ßÖÃoå@z.|£îvð+u,,*@/hah*.Ðv©vÃhCäß/.~Ð Äabý/Ä£@+o:ßbv~<ߢ*ÐhU£oå@Ü.Cößß©Aß/bAÄ¢Üuå@ßäbãv ¢ßuýr:*ðBðöU,/*£hbavBu~B¢©h:hzßðýüC_Z¢O+Ü.Cb:vß*ÃZå©|ý@CÃ,ö/î|ÄÄüa<ýOOOAªO+uh_v£ª>öª£>|Ãuð¢O~UUb@Ba.bhöoUvð£ßC*ßo,hC|Bb<:ÜÜv|ý/+özÃA@ä|<_Ü++~ðäB|ßArCC>.a_üZ+êvß|Ã@/zvzߣ|ßÐÃî@î©ÃÐöuvßßvAýåvCäoB_au*©U|Ä+:_ÄÃz¢:+ÃýäzªzåÄoZZ/|_Ä¢£håZ|a/OUäßvB~Ä*/å.äzßöÄ*¢>üvZßîãBAoÖoßÃ|ÃbÐ>ª¢||öý©hä äOoðö>:îöbî/ý__ªvBÐzªÄuuÖýö. ZoÖüÜOý~UäOBßCÃ~o¢aa Ä~.|ÄhüðOö|b|£åh:u+|aAu_rߪ_£~+ð,ý|~*.bba£bîªAu:ß/Ã.£/ Ã*ä*î@/Z~~£©~BzßbOz_+ü ðoªoÐrîüvö©åuaüßüßv|UÐöbÄOr_åäoîZßÃ~£Ðo, ©u_ðüraü+ |.>.î/©OAåÜBoªbÄÄ +ou¢åU~>,CÖüO|>@ª>Ü+Üoý_h>|~bðåU>êuCö_vã,A_/bÃr~£a|ð |rOÃ<+Ãý::>öZ.©ö@@+h:CBß*a,î OC.b.:o~äö|Zð~OUZU*ª.ßObÄ|,| ýb|ðoZ+_Uýrßö©/~oO>¢CÄo|Ðð+ö* ãbªväåý+ÖzßÄbvoß_uüü.îÐÐCOý/CBhB¢ hBî©ðBUuüCÐv+hu/ý.UªoÄob Ä@ vu@ã+¢ä*ªåZåÄrðªýäßär©BÄãao/öã u|îöÖªååÐZäãBC+åüß_b<å©C~Cßý*:..Ö_bzßUoaBüB~*ãa~ßBÜÖCr@UUÜAýÃÖ,Aå@rr/ßÄåÜ/|/A>Aãß*@ßaª_~,zab/BäZ£bßB Öbý+åý©£BrÖÖOO*U~Avü¢ßhߣ:©~vÜý©ð@bv@:C¢åðZBv Uî@AbA_CÄðöOÐ/zb+zrbã£hbÄCî£BÃ@A_ rÜbUÄühßßC Щ ß_ýîr>ªÜ/zöCîAa.ð£,u@ahªUöAãaÖ+,uzZh_h*ãªa¢ðÖãuÖßÄ,à :ßß.,£v:ÖÖ©ð_åªÐååßz|¢@+rã.Ävbz+ÃbÜ>>ÐhÖzzöuB@ªU_OhߣÖÐä_ÜÜBzo|baaýðÜ:ö~ö|ðooähªhb©a¢:Ö:î~_: ,:oÖåuB_Ã:bu_äBã|Ä©£oüU<_:_U_arð>v|BÖ.v£bb/~ªÜbª£ª åäßO.r©r/Ããa©voÐZzýbh/A~B@£åÖ+ðªðÃzb©bhîbrãörbÜz:bÜz£@O/ßubî_ß/bÖUbüüBbrOBaðªB+AÐ*.Ī¢ö.>äU:aU+ZÜÜrüýß**ý|C|@UãÐãbor+Ä/CZ©,îUA>¢öboîb bà U>,*rßßBaã/Auuzý,ªåÖUb*üvä|ßC>ßÐĪÐ|*Ãz~Boa©rðäö~bð:ß|bOh.B Uüü@AÄz¢<ТÄZz©BbÃÜ a¢ub|*ðh@|.ð~ü CO>¢>ªu<ä.ro<îýC:£Ö ¢ÐîüÃÜOBîzÃh ý_î|bZÐÜh+¢*O/u@:üZߣÃ,v_öÄ.h|_Ðbã>+B|,+A|<+vª> ö~:*. ©Zo¢aC|z£~ãîZ öä/å~ðÜbuAað/,:|BrzÖOuu<_vßÄðå@+ O,Bh|Ö<_ªbh¢B©Oãb<£~@oТü*zhbo >¢~vý+._/ãr~oBã:ª¢åã.åÜßA©:Ou: .O<©örÐ ~~_CîÄ>O ð¢äßU îuzý>Ðh.:äüO/.o:©Aü*bZ,,ª|z£ý|C.|¢@©><ö/¢>A.Ü h ªaîöbU,/ä¢ýv.O:uÜ~*uZÄÐz|@Ä_výªZ/üAý©O+ uBßä<©a:bߢrýðbåZ~,@@ãOåAÄã:h<|ªuaaOðäßå>v>/*,Z>îoÄbÜãß+ððãÜã| |UAýüîäü.Ü>av*Ð_¢. _ýÜ<ß+r£výaAbööðrz. ªArZZvß|aO+r+>a*ßÖuªÜvªü,Ö:bz._uuBÐ@Ü|z|©bh£@*~BåhÄZBh._.B_ª£Ðß,A/:ß+ß/Aßå/Ö.©îåZ:ðª@z_a|Ö*.aÄððUТBåÜÄBÄ©:uÄ£CÐO©zOßråÄå:U¢:aACö>@©bßa@Ðãîãä zu ,Ðhbäðu/@B£Ã'), (N''), (N':©+©ß:öZAã_h aßÜÃÄu*<ßh~|ý£ruu>bBÜOöä©~ZOÖãb©jklßîö¢bä©¢_ÜBßßÐbß*>b|ßåðA'), (N'oÄýbðvß_, våauC_.b|ß:/ÃAÐOU¢vðüî>BÃö¢<ããav*Ð_:<ß:Z<ã: <Äaü ÖAOZ<*++î@oîöuÐÜrBüAýC~bCzrä£r~£uîa~aA,||Aöa_ßb,vÃð@ßð/î|A~.ÜöÜåÄ©*ßb+*aBð<üo~@ uߪüZbãz:Baý:üÜ¢vbzå:Uzå î/å/<Öý>vOö ß~£ßA+ü*+|ChãÄBv£äý@Ä£+¢öäü*a>OßãZ:<©b.å @ö*zÖ~Ü£Ðã,r/¢oraåO,ª å+ z|Uª~ª/BOOÃA rvrÃZ£Üª,£Zv£OU>Ðrbýü/A_bhUüBv:Crßbü@*zßhã,U@C~ÃrßÜ>ß:äh*î©@vîßÜußÃCvýîãZ¢ãÖ£BUCbüö~AýZÐö𪪩Ü|uAªaÄ/:/uððuO¢BbªÐbB@©¢@Ä©CÜBCä:+ðC vvßäÜr*+>Z,/ÄãäÖ~㣠*£üý@_*raß©>Ã~£/äývB A¢ÄzvÜA~vÖ|ðvÜh@ðz<@ßzýb¢~Öýãßr:ßÃA_îð|BCu ýªvUß@ððÃÜ|@Ä¢©©ÃabÐ<_Ch~Ð~¢aÐ+,ªýa/* ö:ðä@ÃuOzîuvåbb<ä/>h©bðZðü,oîТuz*b~ߪA.î,.Ã,ÖãZzhh~ör©å_¢ö|Zbv~Zaö@a>£U,bUv£UîoCBãܪbZBÃOAO£üUÄããã:<ªðö.Cßß@*ÜßAZÄä.hZüÐ:äAö¢£äO©ü>/*ýZvð|Z.|a_vu/+|//ªß,Uö~¢ü|+îÜß:ß+A+ý>îãÜßh_z:ßZ>/ b*ä:o ßA*år~ßrB:ä.ý~ö_ÜaªC.vOovå~ããbî_äOª C*:ý>ð_ð.<ýß/.ÖbAOr+*¢bU@Bbßh¢ª+*ubýäu>A*~/î@Ü./Zã>©ýuý>zu<,ãÄßÜå¢:r ÜußÃOAÜOoÐÖâ_zhö+CU~ãÖBO¢Ü©AåzrC>ªÃüßrrzo>ÄÃro<£öU*üÖB|b~ý.ý>Cã:>@bÃ/ü|ðAv_oA.ü:zAB¢üU+.A¢,ãÜußA£vrÃCßrüÃ.ð<_.aOaöÃÜrZ*>ßCö_zî䢪ußã_ ý/Üð|Ð@Ä>,ö~ýAa:*<ãév_>Uäýo<üý>z_©ü|oZ¢/@<<_<üb,oubhäÃOÖå+¢Ö+u@./Z:*bårruUhßbüÜîîÜ Öî*:äßãuß.Öý|Ä*é:+ÃýCÜOZ@äöå£ß ©z*,ZÖÄýbh,,OßUß @ßzÃ*üvB,hüöå*oª. v+ü,îÖ,¢äÄ+ý>Zb¢*ã>¢z*bZî¢ÐAOßUÜÖ:ý/*Cî_zÐB|Ä,£ÃîUýzBÜaîz©>ZA*:b<~UAzªvUöü ~v>|>ýAhðßðÃü:bh©ª¢>övabCo¢+ZýÐ+C:.£ßBazar@v|îv|u<ª¢ :,zU/:**©äöb_|@A/ |ªz>ÐÖÖ@uåbhß+Cb©bC,+£©ö**~ra Ö@ßhAaaö£|>îu:z@b|ö<î:ðAüðö+o,o_>åh@*©*CbÄ,_î:.r£ßzAv_/ZªÖoBb¢ßv.ö, Üo+rã/Ob,h>>ÖÐ BhZü:äð~>Ub.ðhhöbbåä©ðß.BUuu¢©ªzî:OZ©/å<ä~åößavðvO/.ää©ozääu¢Ãöã£Ð@:öäZ¢r.ýbAä¢BüZü:uO:Aßaüß|©ão¢bzb>ßý.åßr:ä~h:UÜU*Ð>ª:Z<£ðå>b_~ã:ý||ªoZ||/ýýorå@_Ü.<.C:äÜaob@+ЩäAhhå©OBbOðoªß@äu_CrhOa öðÖ|Zåbß<Ö,@_<,ЩZrbZrãZ<@Ðý*v ßUÜ©ãßäb>üaAã/ýzÐo,@ãýüAÐBAä@+ý+£ÄOÖr©b+:BТãäbaý.Bu¢b>Cãäoh>ÃühîArA,~ o~£ýhhB îo©bö*åB/_Äbã_ßUzU+Ðߣaª.bö¢üb*üÖ_výãªaßaðÜ>Ã@>ªÜ.©åÜ+>Uob©ä,UC+OÐzZZß,ÄU~Äåå>ðå~ ã|+bðvãvãÄåAB/U.ªzOhÃãã~Ã@h©ß,¢|uüåa<_ ~Ð~uîÃ+ <¢ß~ößårîðð*.COU~vvbða.o¢Äß>,C|ÐÜÖåî~aãîðzBÜBb¢ ªbäß C_Z>ãb,/åÜ~rz©b.vu¢ßO.ý*,Üb£ß¢~Z©h@r/ßÄUåv_/uC+:ßOAåäýoÄ|öBbaÖ£UOz@ooåü:@,öîä_Cv.~㪪Ä.Ãýߢ>Ä¢Uh¢zUð~rzðr|*uå:ýß.ÐÃaÖrvÐo v@©+ ßÖaAªöObubý_ ÜÄðüCrü.ß Ö,ªAAãÄüÃîüýhð Bªäar|OÖovß+*~Zî|ð>Ö£ýîhu@BZ£*Ü~a£a~C.ªÜ|¢:Öu<*+.ý,b¢o©BÃÄÜÃ:îBß>U*Ä~Ãßo Ðra_oðÖoÄä©öÄöãüðî,¢îz©@£vüC£ßÐOUÖîü©|_ßA@ÐA/ãÜz@ЩÜ._..@<ååö¢@ðC<Äöbäz*+ª~,|¢Bß<©~îhüÜÄ <:O©£ã.aßðühßU©.z.ßöAãî,b,ZbªÜoÃý¢|.hÃÄÖo+ÖÄC©£.ð>ã_üÖz¢_ß~v_+,AÖvhrÃvZªÄbÜ£Brv.ÐåCCöªÐuzðä*C/rßýÐöä@/Ä©ruãîü©_*@O@©Uvbo_îîÖ,ö>väý£*v.åzo:îÄÜßv¢,@ßöð@|Ä£ßz¢_üvvÐ|býaObCZu@Ü**+Уv+äC|* .öÄ:CvÖOO£ýrÖv¢r/Ä£Äaß*Z.|üvª.oOuÐ~b<¢aA: ~Ä+Oü,£o..î¢z¢~.b_z>~Ü<ßüAÃ_ÐßÄ¢UÃr¢îuª|ª/ýÐZ~.öbß*übÖ <,BÃA|rßZä.C,Ä@Oßu@h@Äîu +åUrzå/vb|ªBC>ü*öUC£>¢ß|£_Ö_ªßÜ<ä*£©ö~üüýãzhîb©Ä|ß~:Ü~ãÐBÃ|Öhî£vßhuÖãZ,*vo©£z££|äAüßrzÃZ@ð~vAuãbOb*Üãîåv,Ur¢îO./býîBðãb>/öUîÄh bz~:vzäÐöhÄ.üBb,*>huA Ðo*ýã*î©ý_vîozzÄohOvöür/b,*_î,~ðZÐ~.Cv:@ãZoOhböÜb¢*ýAÜ+Üüîð:ý*Ü~ö*ª.Äåªå©£/£ßAZa/~~uß<@bOa: ,*Ðüö¢ða,å>@*_ð_Zv~vzÐßã©ãÖ¢@o@ßZäðhßz|*|hv<ÖOÄ£A>bC|Ch ß:ßð+ß..ßv>Ü/vUãvzðO< b>hBªAB,u'), (N'ª *>¢ýÜÄã£<©ðrÜUrävOöä:+zßvr,z/A bãðî*£ o<¢Ã~ßrîßÜå_üaÜÐåürßÄ~z_r:*å+ä*ärða~++¢.îb ZBAðhߢ~obCOÃU rÃCz+Aªvß.Ä,Z/ oZ£AUã,r,~a ý~ðÖ/|Z+<öOÖ/ÐvoazðÖ|ü*ß@©ý<ß<ÐÄ+êÃå©vßýbãrBîª@~urB£vÜAUCuÜ~ß|ýu:,Ðh~Z ABÖ@CoÄ¢b<î~Z¢bBð~/Ü/>Ur<äü£>ä,aðäb_>vîB,ªÄCîýÄ~,Zß_h@å@ä|AvObhrbå£.|@~£©*+ãÜCZ>o+Urbãå.ü_Ãöu£îz:>AA ZAåÃoäÜhbÖÐZ_CßãðhUaU/Aã£/A/b+ZBvoä*+>îüBvðßö©Ã@B<_*ßaBãýbbÐß b©:£A+U::.Uvîü>UîýÐ> ªãðzUbA+ :ohÖrv Z¢zZ£ahC@CC Ðhbý ý<ß_*ÜzuBhöbChÜUðª*/uêÄßÜCöâO.OßÜÐ/Üöãab|äOA,ü*Bß_Ã|BzåCÐ|©*_:ü_îZ+bßo©>.hCÐ@ß+oª~ߢĢÄ:ä A+O©_Bî¢CCªZz©åOhöOh~öO>Ðö£ ßZ~ðrÐaB¢ßa|UbãÐåU:~O©b.B,AßvÐ@ððA_aÄA~b_.zÖö/ãîBößba,©b@ðbZå*z_B/ã*ßO©aö:~,abÜßC/_¢Ü:Ãý>öOBbüüoCÜ©>~>BðvÜh|ßvb:ovO:ß©Ü£Öäãåý~üü>.Zu,vu¢*¢+ýzCOUäÐðÜß>*/aaÖÄ£uðÃßob,ýãbåb_COzÜ ¢Ã~av£rOýbãu+@>ühÃÃoobßvAÃbÐU,ohuÃCAbr£A¢übzhª©+_|ý<¢¢O~î ü|ª:ö~îÄaÃ,<îðb£_Oü_CÐuB/oA<./~ýüb©b/übaª/r__ðZvOuO.Oä+OÃör,oðÃ@Ã_@äÖzOUOßBÄ<+>ÜÃãC+>Ã@uOvãý£åÃö©£ý.Ã@,Oå:©Uª.@ýÖÜã£ß AaAZÃ<©+.@åUÐhª+ba,+oBa@AÜâA|UAoÃ>ß©ýu.@ÃZ£vã©|äãðüöz/ðßߪÄßA*ävãbb£ßÄbÜüã<ß+UOBCÖO¢ZbäU|ýã+@ª< .+.Ü¢ðbCäOý:üB/|.ªÄZouýÜrßbßäÃv++h,aã.ß@O>OhZäÄu:bßOAܪB~å:OvA B>hh£ /~ZzAÜvO<ÜåÖÄ v/Ü£ÃöA üAªvhoB£oÄbîA:@åýý ðBC|/_Ãb£Ä<:ÃZC¢vÃÜ¢CBãªo©ßzßîå£Ã¢Cuä:OÄ/b/ðÃv,¢ðãvru+rßv>.ÖÄ,ZÖããÜboåÖß>bOb£îðîZr,ö£Ã/ /Zö*b/ýbßÃBã< :Ab:ÃoOoo+~>:@a Bh.:¢åö.ÖbbhUüßB.üÖ*åOývhvC~Ü_ýb<Ü£:ðohz+Ö+£rbªBÜ+ä©,ZoZr:*rb*ðAv<@Ã,a£ßZÄ ßÄA@~:üCß©ßÃOª+U<ßöuaã +Ä_îÃÖÄb,©ü*|OðÖÐCUB+/ß BAÜOý*< ý+©ßA|v*Bª/auvßb_brCÜÐüððuß©ý_Bbr£*O@CÐOãåýÜaÜBãuУöh+_v.ÐåßЪ+|@,ß~ð¢_/ AvåÐrðoCý/UîhîßBbÖÜUî/U>/vªü@îªrr¢CB©@ußÐÃÐoh©+>ý>ãäÖO.~A,zözrªbãbÃ@ßÐ/__ü@uÃb+ÖåCüabÐ/ar@bvuZ>@B© býãÃvbZzß©OåüA_bru~aBª©zv©o U:ýhAÖZÜb.ÄöÜ.£*a£Bu©UZz>£u:z@.ªîöb ÃbãuÐÖaÜ@£U©ö Z¢|ð©aoâ,@ß<@aCAß* £üßå<îu@Üã.|@ýUßAüZboa.:ÃðZ>Ü.ª.z¢© ß©/ÖÜ£îßüüz>vubb@zo£_*r|¢ÐÐ*UaUåzîý+@_v>B¢<Ъßu|*_åa:AÜ:<åhbð|_üÐ.r+uÄ_üA£|îå:üß@OaÄCu/vC@å£.u~@B@ýOªä £ýðüß<å~aîz_Ö_ãä>ýðUÄßå|ßbAß*<Üu©ã+Ärv¢ßUöåÖCÃãüU©>O©ª¢ßC*hÐ:bu_hbäîOC£U+hýÜöh/hub|Ãü~_bu_~ãCå rÄ ¢AßößCaUß_ªãäýða>.<_|__ß©£_ßh<ßßbª@, ZU/ÃÄÜa/,©ªîB+ðÄOÜb>ývo~OC ÐßÜU<@©uoAããÖ@+ZüðîABåBîã/î aBã@ª/v¢ª.h,/oÜ© ð ü¢ýO©vBUäÐå.A¢*ubO U vÖ©_Ü@~öB.|ðBðÄAðOU>r.îÐaBÜBðÐ<ý©aÄåz£îÖ>ZÜzz<ðâOhaBÖCäãö@©Ö>a+ð|UBrãÐvZ>ýð¢~.@Ob:Öª<îðåäA*Cuýýv,,ÐUß>ß:äÐ~Öruv_a>ÃbvÜ:©zu*ß+ob>a£ur©Z*|©ZÐÖ OãÜßCÄzöý¢öbðªoübÄ©BÖ_ýbäÄoC+üAà h_ÃA|A*rb£ªv~+Ð.ÃuAbu/h©Äö,|r~aªUÐßb:ð>© îÃå,ßv*/éÖa¢CÃ,A ª¢ßa<¢ýaã|£öÖÄ*Ö ÐvZî©bC>îv~ª¢BÃ/ªåA_îuU,Ü/ÜÜÖðA£åÜöhÖ.ð~©>~+,,r<ü@oßzu/@aåhUv*ÐýuöÐäh_©rü:ä,£åý+uzßuÖr*£ .häZÃzzÖ~h:©* .ãöäã*båCåÖAü|@ua~b@Ä.ßðvh|¢bÖ_Äåü++ß*>zZ_aü@£*ÖU+Cå~ߢaAA~ÄÜ/ã+*AoýOh.©BÜUO.ã,¢ßß+©¢£hb*+ ÜÖß@ãâ¢<>*~Bö/ßß|/ªr£üðýboÐÃîB£ßߣðZU,>ÜuîC/uZÄOä >îÖhCÜå_ß@åð~.ÃÖZz@>|oößýÖä<ÖÖ/|ã~ªÖb©@h.êüåz ÄÖ:a.©+Ö üðo+ð.ßAb BaßöÄ¢Ü,bå|üö©/hÐZÖAå:ßZßC>oraå|å_rzîßÖ,¢ZZäÖýý<öÜÃ>vb:¢O@o~C¢ObýýB,:CUð_+,ªoü@ßhar/ ,zãB~h+£ovaCuåÖî~aã_Ööå£ã:uý*:B.ÖÖªÃUzåüäZ,C+>öbÜî_a+å|/.OUCð+ZÃOª+hu:ðBAäOoZbbÖb<ýÄðÜC<ßÄUvä@rBå¢îî¢ÜoãÜB|>ZCÜ~u+ßr>äã>uA >r£u@£BZ£oohv oöãr¢OÃö£A>Ãa~AÜ.©ª:£¢CäbärßC/bU_ä*îýZªã¢|_¢Ðߢ>väÖ<_ßÃ@ßýoÖýåãuövooUCÜCbÖãBB>hUuÄ|UêÃÖoßBahããÐÄ ©:©o*ßßð/:h£¢/AvªÐö*©uð>ÜzU¢Zä,Abî Ävaå>Ð>Ä+OU£bÜäÄðU>OaÖý+b_O¢|bC~ÄC a~ä/ªO@| _£rä.h<ß|Ðzöv¢ßö_ähzb£öö:äCbßåa>O©ã,* u/~ Aýß+ÐüA>bz,UvîÄU.|a.a©Äßܪß/~u£ÄÐЪühbCoaZßÃCð,ð©Cð£.o +výªhoªîã©Ã@_ZÖB /ä,ÄãAÃãräÖª|ý~<,z.zZý~*@,îOªÜ ö /ð©Ðr+o:hbÄÐ<ßh_hb_U_OîärOA~>îä>+AÐ~bz|>oÄîA*ÐB+£h/raã~,vUO¢î|Ü*¢u*/b|:ß@bbãZå@:B£ö*<©>@: zãhð~ªö_,C,£zB©ªÃöÜÖC,ÄÄ_U¢.åöÄßüÖv¢Ã~<<åÐ>,b/*ä©äý|ÖÄrîC., ü@£/.|Ã_ßbðB:Zä,åz£CîÜÐAüobU_*>ZOh>+bbý@ÖßA¢ðåB:äßAßÖZ/rߢ/a<_£î Ü11/19/2008 4:39:16 PMThe quick brown fox jumps over the lazy dog0123456789,.;:?[]{}()-+*\%^=~!@#_|/0111/19/2008 4:39:16 PMThe quick brown fox jumps over the lazy dog0123456789,.;:?[]{}()-+*\%^=~!@#_|/01'))"; - break; - - case 11: - $query = "INSERT INTO [$tableName] ([c1_int], [c2_tinyint], [c3_smallint], [c4_bigint], [c5_bit], [c6_float], [c7_real], [c8_decimal], [c9_numeric], [c10_money], [c11_smallmoney], [c12_char], [c13_varchar], [c14_varchar_max], [c15_nchar], [c16_nvarchar], [c17_nvarchar_max], [c18_text], [c19_ntext], [c20_binary], [c21_varbinary], [c22_varbinary_max], [c23_image], [c24_uniqueidentifier], [c25_datetime], [c26_smalldatetime], [c28_xml]) VALUES ((null), (128), (-22040), (246773244), (1), (null), (0), (0.2401), (0.5885), (922337203685477.5807), (0.8789), ('ÖCrîUZCÄ/UzßßbBA©ãå>BÖýð~Aßo+ÖräüÜýÃ.£>UÄA+å_ý£üöA:bOAoßãî:bu@bý£ß~<rbÃZuÄã£ð_î@.b |åbAZbaÖ©AüU|+br*ÄТaou<|Öö*ÄÖßr|ÖåvrbU/O Avv:Zvå*_ßÃ. .©~:_B©bîrÖ©ß>ßýZvCb@Ü:ÜB*v ,ü¢ZÃ'), ('.r©Äru@,ar+ÃÜöö.aðà að+aö©CO'), ('vU£ðz~.ãzvbÖîü||/AuvÜ©AA>ߣÖ@B ªßZB:CA¢ß~b,böov>ªhåðÖrh:räoZ©vÜoU/ u@bo ZîÜÐ/b:+ãößU_Öðbã¢h:/BÖo,å£ÄObý_ý|¢ä.,ah.ß/Ä:@¢>>U,åöÃåro¢ |.ÖOßövUüCb©/¢ýb££AÃåvorö£CªzÃ/Äßb:У¢£Örv£+/~öUö¢U|Cö:zv|uhã©öZÃ+ä+ov,aaZ<ª¢ÜÖ+Ãä£Ã:åªäªo*övvBéCÜü:u Ü,Ð<ýz_bö@B>åZÃßbåð~b<>~.,BrzrAߪ£bb.£rÃua>övüuÄÐå:uÖÖ££öåäßCî>oa~hªUßÐ.,_CÐv@AðO~ îbäOÖý,h@Ü,|z@ ö©ãª<îhbãu¢ð,.äöª_|ªbh,+ªãÃr£ýüßuð~*b|B.ÜAAüCbaÄ©ãÜAÐðvßv<ý£uð,ãUßÃ<ã>åb/hßAC/U_ßý_ßrðbz©ÜB~|:rã¢OÄz,_äOöЪ~BuÃßu:ßU,ª£ Ð,ßb.Z<üöý,ðÐöhZC*ä: >u:Bv+C£ö/A_,~aÐÜÜ©v¢¢BßÖBZz_CAÐOýuO*ýhð+ a_+,**h_*~rrÃäC¢ ObßCß.z+,*ß,ߢÐîz¢|:+ÐðoýÜ:_ýZ*bÄ£üã|uOhbaöýzo_ü:Z,U_Oü/h¢CbüÖ,BýÜ©o£î B:.,*ßöãßu_©_ÃðBhOz¢äý_>,z_üzÜhߢ£rÜZß<©ÃrävCAhru£ã*,@üb~.aª*©håßru~ö:ü~åO.oÐaßÖOãzbªoßöAÃOaCÃÜßO,zuUåb~+ îBUr~zrÐ.@*bZ£,Z|vZöhZhðüÜ£.hBÜ¢O+z@öÃÖ@©uãÃz>ýÖ|~_.:å:+Ö,ÜaåauîßU:Ü:ÄråBoãð//¢:Üîã||*ozîöÖ_îÖ¢£ýöîbArZã,£ zb_ðzÜzuýo©*:Boå>ö£ý*@Oð>_|.|ªaoîaäv+a/Ü~@£< ~/üå ÜåЩýßä¢/Ürî©+o>//Uî@>>ä,ßäêîB~_UßC/Uab,Ð|©|ÃäZ ßoaÐýßZ,ävoöoa_©ª*._bbr.O@ÜðãzÃü~+ÜÖBä|._Ð|üãCuÐAýü*/ÐZÐö~_:b*_|~r+ßUÜ~ÖÜaaz@u~bZbîã *_ãBAß@zB*OOý,£Ö/ÖOauÄZZ*ÜäÖåãÃåboz:ßvB.@,~+å_ªÜzB¢Ü©ðBhv+b*ð+Uvhr/©ªîîu£Ö<ãCð,ßOB:ÜuðuoboO:OÖ>oh UÃBðo,O,Cî/UA*ýUOãî:brýZª/Ä:bîv Äß©ÃÐUöbªßßzÄãhã<ö~©U©ZAÄß ÄÃÐ*u£C@U©Z@ðîãäu.©|ÜzåýCzªbA>¢üððu+ä<~£ªzîoO.©Ö.ßb¢AU|.ßÐUîbb>Ðbz~ý©<ýÐãAü:,Ðßãã©r/að©+ß|hU©~_ßOCäã©Bðß ßaZBabð|vu,ZZA,ðªäîä>o/.£uªöãüÐÐ,Buð+Zß>rÃ.+o@åb<îbuAüã¢~å/Ü:üÄZ<©îrß:_ b.£ßÖbvh*_:öî@Ä.vª >äaAuýhå<¢ÃZa+Ðoªzaå>ªZ/ð@Ö+üö<ðrCbZêävU+îO|UîZårb:>bßß/©A|zÃÖB~ªO+~ör|,b~,å>>öZ üOªAÜBBÄäA~zö|ªßªüb_Ãða>b::,îðobvýÄ~>_ßbvåboýBBAÜbî_åТAOCý ¢Äßðå@AöãAzbhýZßäã@ö*/ªãA¢O_+©.,_~Oªð>©|ÐÃÃ_bårUãbrUzB_>U:hvAC||ýoã*Ð Äh>Ü_oßöUåÃaA,bÃ@hýo v_.>ð ¢UÃuä@ü,,ýZU*ÄZuv~Abo@z¢Ã*|a/~bZªßoÄ|£ã>ba£ÄUî¢/bbZã<ãoBöb_>öüüßða¢__|£¢Ð_Aoä~,ßÄCö+zußÖ©bÖ>C _BAäßuvBå<.©Bðßýu*©ÐÜßaª>Ãråä<ßo>.ýöhaßO_ªu<ü£håð©ã,ß+_Ðb/*Ba,U.©UoÃöåäu|>ro~_£ã| ör£.*häväãÃoo+ßßÄ>/ðbߢã O+h@ß>_Ã/AÜUîAßÃao|ä*bÜÜÄð*C,î+a~aöoåÐöªbãåÜ@AýÐOo©Zîö,vÃ*,©vBÜh¢£Üvðh©ðßbãU<Üou.üÄOÜ:Uh>U:_ Z*öbÐoåUÐßb>Ð:äCoÜðrOUZ+ª+o.£Ü©©Cª@ÃåOЪvü©h©©Aý,a :_*oAb~:*a:ªüo,,hðoUübzðr~oÄð*oa£/rCÜ/>¢zÐ+ªß+ÃýZZåbuÖ*.U/ö:îä@aã/ö_övªÃ/_öU©ÃBßåo.£:Bßåbßä*>bÄ/r+Ü+.obaÃO¢©ßCÖ| C|Ö/ä_Уb:h.Ur,ß@AZîÐ.ÄC.üZBBuãðä@Ã:åabauß_zvvÖ媣/©¢ ü/|Ür*rß>uhzýÜ,ýÜ~£ã.u+öýUUªªåäaßðÐb¢ßöB~ b/üa:uhCÃÜöaaðAßAüvCå|îo>ªßOvzä¢ubUårößÖ+>rBbÜðßAßÖýß<:>_ß@ä.üã,îzÜöÃoªBh@Ö,*ßCÄ©ýh/_åßÖªÐ*,/ü ,£ßrÖýýhåu©ãZÄbhÐÃßO/ß.ãA@A ößr£OO*Ð_ª+ÄÃãUuåA>A_~¢Ã¢Üî|Uüouü©Obaa©B+ ªC B>~|OöýaýÜ+O@A,ZÜ>|/hÖA£Orä+,©uü>+_Z ýbAOuýîßå>ývß~ßAÃr*<ð,ýB¢ªz_,Ãhoäß+<.Z~*bBZr@AuC:åüZZ_O,ªÄZBÜ/B +ðÄZb:,åª< >ÜÐA~/Uö ,rå ¢üäÄý<|¢aöãªzöbýßî/Z>oüãZ@bCü*üAzãbhUa£|ðZý,Üu|î@oßýU.h+@ð©£üZÃТ©~Zä_vßUå+uo|bbüO~ß@ýÜåé¢z ý~£ªvÜC¢vAüîaÖ+bðröäªÃÜÃår£åêOðö:UZĪåßö/Ãh¢å@u.ãÖ<©:ÐzßöÐbhuö£äAü_>b zhðoý£bý©.<ääÄU<Ðö<Üåß©Ä>bZªðüÄ @/o@_~zoîÐ,ÄÖBßhÜ<ß|~|/>Äî*©å_ÖîvÃ~_B£©|ßAo>u*ðÐ,ð:©ÄUß+ªåªßÃäÐbzåCÖZC>~ªü¢:|,Czüß+üA_ÜAåuöubååöZBr*Uo:Z.åbТ ßrÜZßå>ÖbÖBbäbOZ@ÄBÃO:rÜbß*B_oüü.ßh.<,bÖ:@AüÄÃZ|©_Ã>ðu:*@_/ßbh¢rðª©,v£ªu*vª*,_vZCU:åÜåC@ýo@ö~>ba|ZACaîzað:o©¢CöüZhÃã©Ö.b>o,Bh©¢är~ßC>oZrð:özÄ:ååu_©/ßu ßåýªã@uävãz:AzãðußB*Av>äªaObüUýu@_/ÃÃ~Ã<.ýä~+b_~zZCýÜ¢~|A+vv£U>Ü ªü~.ßU£Cªðb.ð<_:ªÖÃhý:åüä£ /ão>bUÜBöO>b:åoÄ@oCåÄßb<ߣ ob¢_oî ©ÜÜ_*©Ä:@.v¢©BZO/Ä_/ª£Ü©Ã/ð¢Az¢*hhu+ðýß/Ovv¢uOüuäîrãª:ÄAýBãîÖB.ußð<@åîU/îBv*,o/@<ÃÜhBßЩ/r,ãhîÃBãAãzÃ/*ö£Öð>r+£ã£ /bzZCýOßB©@.za.O>*zhßA ß< äu.Ð>ßÜhö ACýr>_Ü.ü.:ýöã.UåðhåhuZÖß,,Býrî_ßåz+öoÐ ãrOu@+Ã<Ã:>Üå/:©ªzÄozüB*a£ýý>¢_bv/,_|£åýª_åÄ+îähoäuß+AaörB~ßðüðau|rh¢ @O äßoB>bu:~U£.ÄÄu.:*>UäãÄa* ÐZª@ãüÐoüACußo_uAU@Ðb, *uuü|¢¢:ÄÜÐå*vüüÐý*äZöZÄB ª©Üß~v*öUZ¢ýo_*~,/bvOöbZßÐÄ@A.ö@åuaüÃîO<_,A©*Ößß@Ä|ã£ßh©ª>Aã_ãîã*CBö_+å*O._ýÐÖü_Ã,vå üЪbßZ>vããü,>ªö>zBßoBãªbî>äÃð:ð+å:C~uªbu/ßТ ~ß_:/~ ©ÃZ,©Ð©©+:üB<öbî*@Ã*r¢,ÐußöU|ý~:aCãOoÄî<ð,ãýä£o,_îOöÖUCbZ|Oãß/C+å>b*BäÖ£ªu.ßÜ.å~©_ãߢÄÜýßîª_bÃ>vvZOðÃ_aðöå/Ößîã|Z:ýÄa.ßaðÖö|o~ aÄüzüª+©Üöuo£BhÐ.<üÐ,vz>ã/+Ðr>:ßC©Bîß~aߪb|Ä~ vrîb*~>ªÃ£+C,@_baU :AUÃCÄ>ob ÄãÐåoooßooäz@ý/@Är>v_Az,CZA>ß ã.:vüߢuu++uäb:o@Uv~az©Üß©_*ÜåC£Aßz/ãUa¢å<ýhî ouðüÖÜUr _ÖÃßuußaÜüå£rîz*|ý h<_vC<©£Ä .ã>h£ßß*©|:+Üð,Ä+/üäß_<~>aý*+ _~BÃ+C+>|C@aå/åÜĪå,Bu©ã@ä+ð¢£ß:ü aåvB|v ååä*ߣbÄÐZ,<ýUzîUo>Ð:åðzbA|.ý@¢bªbu*ß>Ðu uî*.üýbÄüAðb_åaö_vÖB£Är© åðAüBÐ.v.Uü~îBA<ÃA<ÃübOu,vuühÃ>ébBbbÖåZ>ßC¢A+£OĪöÃÐü+ßÖß|ß>:hÄÐvîßaý.öhOroö_OA¢bU@ÖßüÄÄvzUObßb©.åÜ<ãOÐOý__Ürår¢_O:rªüðzrBÐÃoÖb,h<@©._ßä@ Öv/ð>,B¢£å*äb/üh¢Ä*_uý,~©vu£ävª ~_CObZ.BÃðvb.:z>ÜZzÜA_,£>ÖOßuzªaCC<|>Äß+Ðß+uh<ÖÖÖÄObªbðZBZoCCBäb_£UÐ+£ª¢~aU_oCåAÖð,BoåÄoÐr:r_Ãv£ö Ã>UA,BB|:~ß,hý,h+OÃÜî£ðBaor,båÖ~~ß.,ÜÐ_zý~/C *b<ß. büO/A|oAuîÃ<|ãußz|a*¢£+ÜzußÖ©CÄ~©_©¢.,,ߢà .zBäZC_ÐîßbÄ/~.CßÖ.+COBßAoª,îOrÐðzüüãÖüîAî£ýßüBBbOhAýhz*ð~z åå*å~_uvãZ|ä*är|,.C:ßߪ@U¢äübhbU/£ah_Ü.vÖßvÜ¢v©höÖü@<ä@bZߢö©vuÃUz/Äãba¢ýäÃý@ßîýöÐazO@Ü~CðãÄh:ª<ª|_zãüZåÐ _ªo@_<ð£aöUî@Ä_ã~îuZ<@vu,üvªoý/h|ãýo/ª++ß>:£UÃbßÜý++£:äa*öh~rz
C*©Ð+.ý@ã<ýbªýÃî/ßoªb<ßOz./¢u©Ö|ð>Щýü£/ä @*/~uu©hCAb@AC.ýÃaÐ>hÐ ã£åChüîZzCBO.bÐOröb_Ä@,:¢Uav¢Ä*rÜa~ð C_OuÖÐ.ðöaðüß@|br¢ v.<åü££ªÖî,,<ßãB.î üÜü@ÃUbZßOßo~,v©ð¢£u|BC©A_ª:Oü/hoå£_zîÜ£å*ã/üÖßarhð:Ö©Öå£z>o¢¢CãÖ£ýÄÐÐ+aäa uvÃÃZЪUbAü,|ã:ª>::ü¢OÜZ>bUhÖ~ß:ÄCÖz_@êöÜýozß bðbrý:äÜ@ÖÃ>ö|ÜßoBüß:bobýÖãaãO¢üÃÄouÃ+ãýä U_äaÖAOüßb*aåýÖauu¢ãö CÄßU,_CßUüöCãªOüaßãå+~¢ÃßO<Ão¢+a,î.or>£¢ãAß+bÜhhßUrßabü_BC/ub/¢¢~öÐðrAÜ>orA Üv£AA äð.|ý öåbbb._..OÜCAröß:Ä©ßA¢Üß<,OÖ|ÄrAö.ýzüÃ/Уªð~<@aß,b:ÄîOZ BUªÃußãÄýÐO¢u¢ãÖZðO.Ãr*ö,+*@U>hÜC©uÐBÐ>ãÜuªÖ*,~ÖuÄ.ýaå¢îî£zä/ :<ª,>|.C©_. £<ªªªýܪZ_boÜUAzß:/£,/ÖChöåA*BAå|©uozZAzbãAð,:¢U@BZuBÖðrÄ<:©BÐUr>r~Baåa@.h|_.ãÄÃz¢@UßßÜßÐA:ßã+r*ªã/rä@U¢BÖßöO+ßåÖÜ*bÖÖv@~|Zªý@@ß:© ,|_aßäåvzå>ÐoCßÐ:.BÐ~_ðhU|:h a.>UzUÖãÖÄrä>ö¢Bßh>oßb,*öÖã£,Üu,Öðz:ý>äåbåÃÄîäBªZb//üü@öAoz_,C:ü<ßB|£OBzv¢Cî+©/B£U* *ß/ß,+.ãrz<ð/ÐuBÖ@öCüCo*ã¢|+ÄuîhÖC¢©+zovÖUCühO<£/* CZU+u£BöÜßbCý.*ozB|Ð:+Ã*Äýru£oðð+åÜã@Ö'), (N'*+<ÄCh_ÜAo_åªåÖªå£u:äz¢äCÖB£>£|Ã@/Cýu£ªä£/¢ý+bÖaAU¢BO~.bÖª~+AîZ+~ä*oÜÖ,Ub+ß/©¢>baB¢va:@öAbu¢buãÐhU.@Ã~Uvã,bßÜü+CB>*öZA+h*,hÄ_Üoß_bz.uý+.ã+.ª,ÄOb©'), (N'|åå:CåZoz:_ÄbuUvÄ©üîCCöBð¢ÖТubA/vªö£ªr_ößbüz£*,o::.Är,/ðÜ@>C_@b,>ZߢzªC:.özbýßZv+|OÖ©zuåoaäbÄ.,Zý|ß*_Üäã*özUb,öýUuÖý Ðrbð:ZÐAÖý|ab.aöÐ~Ä .ÄaüßÜbåã>©.ö©ã~Zªz|BzOzÃb _ýZoöÖã,O:£*Uhðü_aðü~¢ îCÜß<>ß.uÃü¢UãýB£Äa<©¢ßýüªÐÐÄ@|zð©ªAOö+î+A.£v>©h|îZv~o£vZÜãäÖbÄÃC©Ä|uöîÃ*BB¢uoÐ:ð~OßUzÐÖa Ð.C@oz Ð_~ßBîªaªî|ßöÜz<ªh£ß©|ߣ,UÃýZª+Ð~ü..ZУä|a.@Ab_ZÄ|@åÄB>*Cß.Ãv_ªªCßUü+årå>ßv£hZªzÃ,ZÄb>a<:bz< ö~a.ß,uã~îã*£,ðßärãrBaävå@¢ßÖ> |Ä|_uvU å,/+/BB£ªä~üÐ|h¢ÃäãU.äÜa@~aObBh£¢+råUu.ü/üZ¢|ua©B,rüAªßýãvOZCöß*ö +*U+v¢î£ ãaÄ_oß+.@rüªöavîr zßhAÜ@OO<.bîß,ðýU£Oª:uOß©.ý£Ðzܪbz~ãOßUr+ýzö*¢,|©öܪÄ~äBª ++@@/O£<ã>ßbß/.üU<ðU:Aa/üÜ_oå<:>uä/å©ã_CzäßîЪh rÖ ,o+å *b_©£<ª*A ãüa@Z.ðßö~UBÄ+¢rühhb äüB@~Zå<ßv/ä,ÖO ©:ð:+/ZBU+OA/@AoZß@~*îãv:¢ð/OðCÄÐvh_Z+ã|¢+ð©©©îO¢vbªößü,>o£zrÜz,@åv,ðÖü ߪCöoðOåZüß Bã.©î.U Ä@*äb_oÜ,@UåZÄÜ ÄaU|ýÖAUöüZ©<ª<>>¢ªzvUå¢Ü,<ÜÄöA+bbüåO©*ö@~@_/|£A.CßÖö@ü~|/£A/r@v|aöÜöb.: +uBÄA:~Ãã¢î/bUîÄÐÜB îA:bAüßÖCzvUa~£oß©ªå/~|ªbý_¢o¢ü~ U+ä/:öB@äªO+©.<ªÖåbOuå :ãýA.O~> ©îÜußÐ+Ð>*~ý,U.~ba.Ðî.C*b,~<ðÃ*vBãÃÖ¢vßa@*©äz b~~/*ooÜ/Uß.o,hîßßazå__£ößr.r|ÖUbÐ ýå< OB ./öuC/å¢_ääý/@Að>|üÖ|ä>|*.bha <ßu|hCÃÐÃÜ@|Aå,bzßööýÜu Ü|ð,äÃ+Тr+AÜä,ðuÖäOUýߪoZCUOb*Ä~åß~Ozäa.ßöã@*Z/.AÄuîbBÜÐ u||C__ã©/åbßÖðåäÜ/AýBßaÃão*hß_ÜAãäbz/zU,ýãð,*ªZß*AZ£ÐÖu/|äv+rÄäîCbüåä~/:O£ýUåª*uå|ßÖvCZB¢£Ð~AårZüaZz£,ð֪ߢAo/£r ©BÜbý,|*ä,z_ÖhÐîÖ,o£bé£<:ýaîöO __~Bbß:ðå*.ß+îC.b<|Zü/C|@,_:ðrüar_¢ãööUÖÃZO¢ý£¢BÜ@hãüv¢©öuö@ å~äÜ:Ã,bCAðîöåÄaÐ.ßßî~>Aßß>baªoÃü/:£bÐårbuð:Ãî ,ÖC>,Öä îbãü¢O*b>äUö@/bðý_ªÐãA*å>BzåCÜðBB_~uÖvaÐo/ª/üßüÃO@äoC£vA>BhbAo,bzã/å<ÄuZªý@u/îðÃhªÃ~ðÜü/v_ЩCðÃýA@hC*buÐ.åã¢åÄß BäbU<ßzAÐ,ýãA:©Aýö@O~ýªBÄ~ð a£*u O~CrZÖ|vu¢bZ©ÃürߣðO¢ÖCUü_îåýabbÖ@äå|ãÄröî++_ßAåühua.bÃ.<åuÐãÃZr|a_oãb£üðÐuÐ,ÖÄO>aîäÜb¢Äã/,©ªü*Uªoß@Uåbå,ãz,Ãü*ü+üCuöOð¢üA+@üöåå.Ã@|Ð@:OÐzh.|£r>ðCzããßÜýCªäÜbî_:ö/ýa:ÜUã@ö>¢b>bzßåªä¢Abªî@:C©ÃCßÜ©röðoîUZ¢@@z¢/oðB|Aýr +âC|Äa|ÜubÖüa+*böh©~@~aZBãüoîß~ðoßvzb*_ZbÖzUå:o|Ð>bã@ÐäBªß<äA,ä,<ßßrBAaªª,_ÖZÖ.¢Ã..,ÖÖ..öOÃuåÃU©åîÜb£ü:Ã>vuß*ãßb@¢Ã.vb£vÄ@*ÐÖ ý U:åbã/©U~*uhO/~@ö©,>O:BðÃÄA/+o_ovå~åöÖrbü/ãðã@BZöãÜbö>oß*ü+C.Uå.ßbäZãÃ|O< _ТOBo¢Ö<@+:uÜÐÜ_ý+b©Ð|.BÜ©ß/vZªªªü.OOåu>©Ö+A*ãb|bo~ß.©ßOrbz<ãzuUÜäªß ª*Co~ýüO+ÖöªU+BÄßOöouüB|Щ*_CvOUv b|ÃBÜ*:äª:ÜÐîbýüåB,~AÖßv*ã/O.üa@~ÜÃÐr*>~ß~Cb@Ð<@z:ªbä©ZzÖ/ÐððZ:¢:voh,UÜ@ªßÜ:£ÐТ+îäü*ð©ð<+ýÖ¢|£_h<ªv~*hb©b:bîã£aÃB|A.<åub_ZªOabýuývvö,b_B©ýbßà ªa¢BbÐ hvBã::z@ã,+rÃ~_îavîäaOBðªu~rßAo~¢Ð<îZÄ,ÖzÖU:bU¢ððZý,uãã*¢äÐCý¢Äßuß|öC£ªZåh_vö£ã+ª£Z>AÜ*ßåhZ/ýZÖ©b/uZ©©ßZ©Ã@bZ~.üa*@ *rÜ:/Übý*Ozª+år>.|Ãðãaã Uv>ZÄz.¢Ö/zä©Üäîªßð<,ðÄ.,î|:©~>**/rovÜvbÖ©ãö| ã£ÃÜzab+ö |BîßÖüüOðü>U|Ä£ã|åÄÄBÜãbbîÖåZb ~î.oz*£O ðª/ðBz£:ªAßÐä:.,r ÄCvh*z_bªö/.äoäÄ©©~>uÖÜo|:v~Ð:aÖCAöbbßUh,bÃÄaOo£åoÜÐßÄCö*C|îAö oöÃzãuߣå.:Cobbo+z¢Ä|Ãvö.ðýÄöu*C/Ð_Ü äz.b>îz+~öåZör~,uÖ<©ÐîðuBÄ£b ©/@Zß>ýu£bÜö~ßüC/ýAÖÄrübC~ü,OüßUUAð@*ýhêO~ÃÃÄoBöC£Ä¢z¢:::Ou_~A©v_Ã|å:Ö:ä o_¢Z,,/ä:b Bªö.:bîßîoAhð/hAªr<*rãjklãobÜß©Cü*OðÐo.,ã¢üOC,ÃäU+ߣüÄCU ßz¢åãAB<îO~UrZ:ßB>|åCAÃhzß.üAhvuöªöãß>aªåÄuuCªAb+äår_*rÜ¢<~AªC/Öð*zª ¢ý~>üa,ßäÃÐro.£©@üUh*OZ. ~äZü*Bu~rbåbÐÐUaü/b|U~ u¢OªCâüo:ð©©ü@>~>ªö+ÖªßuaC+Ðräba@b OaAÐß/ÄOOvBüîaåÃü a>Ã. r¢|Ððo¢ßüvuAuO:oüÃ:Z.CðÐãZýrvCª*B©ãBvÃßa|:hÃÃü©>@oAßuCðbÄãî£o/_ä©äð_*+åvå:ÐöýuAäª<©BbÜCüÐÖ+.ßoãCîvAßACoovÜðÜ,üb<ßAAÃÜ:ÜåÖüß~ý<:ĪªbÄOuß< @ßzã |Ü©å¢ÜCo*/>obbz|oßzuOßð*z~r_*U£ü+î,>@ª|C+ã+£.rrbß:ö¢£oCýÜAÖðå. äAuðÄÃÃêª.*_Ã:£ ö/Ü£/ä rÜ.Ð<ä¢Uü>@ªrv<+hÜ Auß~Zz+.ý:£Ã.oåÐðvörÖüO,bOä:b:b¢äCãB,rC/C/'), ('zßC:z_|Br||bb.@C:ð*@+aßZ ß*Äo@Bz +bUb.h@îý/z_ÜbüÃýýOBC.zýßC@rãðÃCå㪣£Z<ýÐ,ö:CÐüA|zhC+ð@UZOvý,ßbA|z/ZO|@ÜA©©bCZö:r¢ Zb,Ðö ++ªð ðîßZÃãýÜ*bÄUß*@Ä AÄäv+vuÄã:|öÐUßÐAÜÄ~_¢>ÖîªB¢ZühUUä@ÜC_ßß@ßuZov©å+ÜÖ|ßhÜ.uB+Üoª/ä zÃåÐA¢>üðbÄ,rª£örv>u|/CbC_aOb¢ð,*üã|Üo oUªäbbaa<Äßö*ð£Öå~ߪ<ª îzh bUÜBobð*üü|AaC@_:U©|:Äröüý_ã_ðÃ|öÐüÜâ£î.~©ßz_ß>öbä©¢|ä '), (N'CO>BßAvaBvoÖãã~ÜoåA,£/rbå<, Ü¢_z/@*ruaBä.üz£OÃý:r üUbÄ+@aü*B+ßB,ä ý©ÄÃvböbüî BÃß>öC:©ZUÄhßrU©ý<~äîÜãÃzÖ@bîZýÖ~ÜÐäý>U|/ÐÃ.öåAÖ~UzuAöäUb<Ää.zo..ßrACÜ~ðbh~rã<ßbýöbrh <¢î>Ü>ß,oh|Zao©ý£ß£,Oå+©,ªÃ©äãU:ýCßý@ý Z.~ bvªUaÖî¢.bzAöÄUÜ>h:ßÖÐC_Ããîªuã.ÃBãvvußoöÖ| ob|@¢hrÖãbîð~U aZ|u_îÃ䪣äª*ü_h|uÄî¢ðÐA:aßB|Öý@©*/Üzzß*ZzÜAöÖAr/Zö|ZUhåî,.ªh£z*ßüða@Öãv,*¢ hÄBÄý~£Zß.u/r|äîîrr¢ý/uüßa©©:ÃoöªßÖrZĪ|aa_,Ð<ßöîð+rhý Ã>håýîüãCUZß+ß©ªO~£¢üîßU rÄÜ_züߢ>bÃoߢ£AO.h/©/huzOª>+*ß©î_ÜOOzßZ>råÜü:+üa~ß>©ß©Ü~|uh*Zvhvavvã:ãåªäð:_+Uäߣ>Ü|ZaBåaª¢b©ðuðÖ@öOBC|Ðîîßäuuuz+zÄß>~üaO,ããußðöÄ@ßäz©Ð_öA©,rU©Ü+ Ã+r./o_öaÃvÄ@býäoÃ.+ýÃ~oä:î~ßöÐb<åh|ÐZB¢z+©Avu@~.*bü+a ýÜb|ýUühböuU¢ö/Cäªßb¢A_å¢ö o:äÖÃ:_hÜÃÐB+ Uªbbýå£ýUu+|öÄüUoðAðß©rr@Übߣ.h>.Ð,.:ߢb©Ou¢+C@ãO__ßb:@|,å_ußã ßBåorz|Ü ZüU¢:~ß,UU¢Cå /ürãa|Z.vßä._>ü @¢Ör>BrîBßbhý|urðÜ:ra<_rbåÃ.ÖbA /ðÄa*Ãß ÜZÐr>h.Ī£<ÜAÖ bb|o¢,ÜhbßÖÃbãräUöC/ÄÖ*Äî:üßC|UZê©ðß@röýh©.Ö:*å,ßUßð ªZÐävo.öA<_,AÖoß.îa¢b*B<ªzÐußãðUh*Ö>o|¢ÄbaÐ:îbäz@rß>ZöÐý@ý å£ß¢hZvUÃa©¢ävz|bª£~_:/êb.örªÖýouÖbU,ªo¢ßozä~öUý,©+å.Ü.rhAbåzbBUÃ<¢@u ©a<öÐZhãABoüßð+CÖ/ äB*@Z ÖbbOBzÄÖba+,:bCbZaýÄ Uoä~ÐOO*uz>O¢ýub©ðß/rÖðaÄZ,rßß*_~ý>îO~+h@.ãÄårãbåý¢brvC>Uää/ßý_.ööª¢< îb_£îßîuh>/ zßOZ*zåa£ Ðö _ä/Öðªu~|B|__*z~AÐ+a<©Ðu©ªzÐ:©|*ª +ö<:rîrÐÖТÐßö|/¢~*ðääCrB Zßv+åªÄ~är.ߪür bbåCBöCªo_özCã_uvÐ<_ãr£äBobßOCO,ýÃýðB_+|ãr*©.ÃÜAÄ*zoh+ª<Ü.~öAUü¢hêðvZ~îaaoð.hvß:AЪo*O¢zBZ¢h,vðoÐ<ßo_ã_@Uüu:vO*hÖ>a@*<Ü>ý¢oýüܪÖUÖ©©<£îOOBî+üOAîö>+îU.ßvÃzOðÃ_|:+>©©Cªã v|,@ß~Ub:.Ã>ãö.ýo:ü>¢_/a<ü@.vßUz.b|ÃZÜ+ />Bb©ý+|bÃ>£¢ ÃÄC,bäbãߢo,bÖ,ÐÃ,B£bh/,*>~ö | ª©B+ã|îÐ@v~Ã:îvî¢O aC_ýv|ZÐA_vC>uz_Äý+|Oߣ|+<:ýAo_a*ð< u,ýäh@£Ãoã*ÐbbbÄv|årðß|ßAã@ÜĪßvý£+,C/C:z¢oÃz+.öCãÐÜAv,.ßrßZýåý|AbÖ.é~ã:/îZ£å<©.|£äåAuÄUü|ðªß:.£ª£Uªav:vî ~+CÜöÐoä.UC©aãAoÐC©u£ý<¢buUb.zrªýâ*hOªr:öAO_ð£,~ã@*ª©Ãªî<ÄÄÃzrÃA_>:ÖÃöZBC|ã<~ßãazaA:©<îÄ*@ðhAu*Oîßüähða£ª,ªh£¢ãzr>,ZOu+b~Ð,oAhbår©~ßßýä,a+ãväÖbЩ¢ö@ãba©/îv,@ã¢: Äðübb>r¢avß+Brã©©>.r_bh©î*ðÐ<äOÖ,öoßB©ªhÐîãßrZ Ã.Ðã uUß©ßzhÃ|¢z ߢî~r,~*ýA~öauUB ª/£:rb/,*ý_,ß<ÖÃ|Ðüu>A~äÐÖ>Äb¢îzUhߣbü|Ðv/¢,©+öZbr¢ðî.b.~üOªvAbo@>h,a㢪ouöb.rr*ßu£ãýü,ãb,bBÜöü>ª¢@öðu:ü oýðÄ.>obßåß>äÄü|b|ÜZaÖ@.ßu©öÐö¢ah.+ªäOvä_~<ªhaÐð|+å£Ãà .<>îrãr ãvß*/**ÄäzîÖ.ZîvÜ<Ð,*bý :Büh*vbA U¢* £Z~u£a*Üðîh|UCÄBßýÜv<î*+u+~Uå.o£|öCroOÃb¢_@Oã~Ch ð@väbãÖörýZ/Cå@Ö<ýza@ö£ZÄ£ð,o_£v/îüååÜ>B+UüO.¢@©ý/*~ßhßüåýo.ð*Ü£*aýrî¢åÄAO|öäÜ|ý~ß_ß@b.å_ßöOãÐ~_Ä|ðÐ*ߢ¢:oðäå Ãî|ðbo|ª@_,Üb£>£©z~AUzäߢÜOî +h_auCA¢î©.üBA+*~ÐüCß>¢Zãb,bÖzvý£Zo.ãÖã@å@vohÐüäª,/ ßåü@ãå/£ßÐýBßðC|vvuÖãÜZî|ªÄß>oouÐÐ ,@üroßoÄh@o+rª.ª O©OB_ãbbUZß/aüýoab|Ößz¢å*ZUCÃßý:Ã_a©/ABÐÄZßZðªZBbß©ý|¢~ðåzÐv~ö+:z*Ö<ü Äüüãb@< öÖaobåCýåböBßhzãoÖî+ý|äßhÐBÃaÐ~b/_*ýv/î> z<©@å_~©h©Z¢C*,îOazß.üh>å£UÜ ~Ää.A©bOZUr>AåbZ:zrübb.~Ãð *O£uZß*|ü.rb©zÐåÖCz,Bbr. bßU>zZÄC Ðý£Aî©Ã BäUu@£*O£:,@UvüuåUaBb£h>ü*|ÐUÐu¢ÄÜü OC@oîz£ßz~B:A.h£©~v/ÐÐvOB¢öîUÜß:z¢bÜÐärÐazO+UBÃߪ|öC@@~/ã*bv*Ð~_Ö£o,+*ðß,@//_åöýðhzÃßÄöÜAªö,ßð,vУ¢ªöz/U£hÄýBoåü,b r/îÐbÃ+*Ü._a:hoÄîv*A¢Äbb©ýöÃåÄüýĪOããî|î~ö©ãBCUäð/ýÃbbÃ>+äbbÖÃÜð:ßo~åz_Bb|ßßðߪÖh|<_üª+rå.abbrð||zAoZÄ*ª¢z@rãbð>,bîßAUüã/öÃ>©aZB_z OÐ '), (0xEA982235D8DCA9BAEC4C94727937A73EA975D464956D202092BC1530EEE608F1746C4B852A1A1164BC0F5A4ECC2E118A0E1FA5B657E1497C7702A31BC678CC0644A3FE0DEB21138F636FA78613D25363AB8B21CF4152999322CF0E2877F59D4443540A2830049EED0B1652E739C369A5AE3F703B56FCC4F10A6AEA1C13EB176DD16343BEC72A33A6EC34C42BFFB15A5F656979388462ED468F181EC51982DA1FFEE416D57FABDD830CCA4F223899F258108BB6AA72DFE96F76FD2EAF0B6D8D6A5AA52D1A9B84DFBA8BF52BBA13CA0DF525C6B58DCB30AC1EFBA65E827C2E789F3CE4C8936CD8BD8CACFC1E7CB42E5CABEF388945B8009E2AF80E1EF4255D3E5C7D8C7E2E027A894D0928E1CF112F6ACD4AB29343A532E63C469E9B5DB9C8664EBEC1FF27B02DA974AF3B3C8F1ECE18C8A451AA72C9FAB74AA542E764DF2B9440C292114F30421C1D091E946AF6571D7785D2B9671EF384C40AB5816E45449584A6FBCC8BBDC89861348D69AB654C544E246FDE0C712D22CE0E4D457AC1AED7C48910C3FA8A91BABD3A5732918AD95EBE613349D566881279D9FE7D6F831DA086B5A422558859C392B521D21AFA914434EE87198E65015E00FE4A208C134A3A1CB7ACDBE5B70935076FB62044B6F87F48B94980FC031120B44521563E38367E6AE7B5624DB55E7DE552121EAEE01A4A06CBD8D3CAC93D18A58B27A095B2F6CE39), (0x009531925ACB9BAAF1F372D32BD650736063B4A0A99DBCC28EBEE7325B43E5772ABC4A70994578FE2E9326B2195375BF61826ED58315B362D86F049CE4684EAE0DFBA96E8CE0D91BEAB57215760AA83A4828D0D8D50FF31409E7982A41DB1AC54578A51EAA063381A953EACDA39EECCEC6C953BC9875D9FD079465A447AEDA0F9BACD0FE64899042F44F2F822525706BFBC9647788), (0x9FA71715A18E3AFA79DB32F6CDEE693D3811C7484656D8E123FAA87D4A62873D7F015EBD727AA06515350849F37A9D0D60273E7696E48948CF36F2A7E6BCAF1654F577CC8FACCABE716133104D8EEDA95C9B1D232310A69B7816ED3B88F87F5885F2F5FE02D17DB45C800434B078FA4148484B4A9E8CF2434EDB5379BE8F3578E1DA8B5B99EFA68A1D69C7A30B72EAFF1BACF33FAD35B9F9FFB1AF267D04F5CD4A8C52D5ED9EA758A1C02C35C44F38DCF1545E129BF6CBAC21915CE73F800D1974FA597F1F15127C049A9EEC088434AF79D33529A6E23154C0A5B45B42C01921B313C1CAF6B8BCDB42E10E0158DEA49C5CAC6E6B4AE37391C804BE7960B63944817C39F4C26AB9C01759E7C4D430FBE20017FF9551ADD7CFA03001F1F9427A8BA7CA7FDBA5B0DAF2F3AD54F0FCAEBD9808DC7849B7A3F2D4A569549268C7C6D5DE5B1C0AB0203D503D0CA2A458E6D2F17269E81DC931D403D7AB363B5B47892BE67F11A191B3E7E89F280CAA014D7BBE96621FFFDFA90BAD86193205E901F5F58377BDD9D53160BF82FF7EA1252A02892F78A4F8278A4C3C73641A7880E1FF9D3216268A8FA2E86502607DDF2B6A885C16A8D5715DFCCDF82A81657117E73EA000E06E0E0378F98D8F3FF6C70D6D1109DBBE61D80C8E4036492E5F0E3C774E1B22DCDE4BFB79589EAE47E11E0606EBBD6F5C9558866693729F38C5D518EB5117F0DAA5308EC60E6265C229C4AC222F4342A29FE0E2F594BC486CABC2B48386C3F6C92D2B61BB2FA94E32F3C33CCFC57D098292764B7135FB46E8E7211B4BAEE13C65CEE2F403E28773F592AF02D17F79A72DB931F10F77859432E578D30D8E02841186D601E28905A00A0255DE86F874696D7AED917CF02CED484EC11E69B465678F2BF04AA877C4A3B491E60D22A60D39700E6593A071072159E9B894C7E636569CEE4F5B082AC0F6B54ADDEA091FCBA24087AD5A4ED2C71E23CFF0BFBF30DCCD5B90703456B231464E6FDD55931C173A1D16533F39DB08CA26313738390036856D0F8F79AF974B8D56660CDEF5718A07B8B6A2A8DC9C947F88A50D257BF80D4D3857E7848D9D8B85CAC5E9D2CF29D5B4A63080825E8EA9D17B0FF1098925125D59BEA59D8906791B2B1CDD17B3C2B05ED0597F4B778AEFAAAE16087DAB81FBA5B38B781083372A9FB6655741B0921EB95E933830A5C7E6CFCFFBEF73FDFB6FA92138632849A0DB992FDF941232ADFA1BF84F1F1849CBFFEBA5A9418847B7A2BAF6AE20772EF56FBEB79F01C632D49C2100D37AADDC5760553878839F5E5351783DDA1B848D82ED02E06060AACA39B9D00D1F87733CF4DD9E4DCA3EB672CF5F644D888958B817947DE678CD7CF6B58BFFBEB2923FCBDE3B48FC7D36C243368F1000FC5D41AF6118F58B098DC42661A8983F3FF7C03D20986F4D405B3BE0D139AFE8BD7BF95849505D999CB3C15077229BD49E82043FCFD3E064EDF46F05DD14B9CFDDDC69E5AE3FF6EE9A26A06CD61ED51EC066424F357019EA9A956B54E057BC88FAF2739BB9B5265F8C15A4A832748DCF1F514577D26A9A6CC27E4A18D4A10E436A1771E4AA39650A3FE2C31FCC70B726089B358F1145B5905706D83A6A0D8BEA07603D1B02A824E5EC3B37EFA77BA052C7240F386B7F322562E18DA4612AA03257D8176B339C245F7650A3D60EC5E9DB65867246FE527E882E17B9201B8083C19A0598CE63351E2BFFB0C11BDC5C179CF8B13EDAB75933045A8F3D1BE30444F6CCE13B092D1A78306747474D9163ABD2001C286A41A80941D19474D3F80347FB6BCA4EFA200E6EDD380E737012E572F6E36B1AC6DCDAB524D8FA3798A6A43864004BE2C614B1B1F2AE4A313235992EEB217DEF8CE8811E91142A2126D6D63694D60F6FC603ACE232BA281891A883EE3FCB4C7629B4AB7B7E2D50B1EA8F8A1BD7139D5B262967E7759BBDD2C0688DE8913BE25B895F0DDF2B94F199B2FAF7A22F0C407E0B28C8156365018EF7D8BB159F6820AEAC2F927806BD309238CE347BA31AA2B3280EDC6872CCF7245D7FE852D8DBF94AD949F5007AC8784EF736DD953086EBDC3507ED908BB73BE0376E1A86D5DDB95CD4E9A15924A2385F968E713CEE61F3D7930C1CD0ED68BF210D15C80CAEF179197D80C047E491B793CE8DFAFD46FFF1D67A42F2C8C1E86F6B2A804C0EDA2CB1A51457BE6EA1ACF2025489015F6EC1DA0E24F2916BFEB0589511541C6445A8B9A2DC55E8EF408334CE4FF07437E60FFD69A53DEAE79B46A664FE295C4C908EBDACD05F8319D8EBCDA1BDC21B0E3C21AE0157B2BF07BED10695AE84F01626E83EC132C767868CE490B96F482AD82A9828DD7A5BF4DDCEB6EEFE58ED6A54FBB77BD4845ADB74BA28757322069775A72E6B165C139BCBF361F27CD9682D9E793BBEB8CD5554D0BCB32252E581BAC81E78572A8254F8E71BAFE122675E9B51FAD6F9E648DEA852D99B59A8F048E572A72A5E6010031C2443D69D1D7432695E17D0580F87D37F40D00550E7FB4FF7D2CA6E7B3C003B40F6B9D5A272418BDDA731FB911FF0D6EAD3AA1E8F0BB23528F4DFCB5205B72C5DDC8F6155B2310DFE4527A9B500BED7E1F384A891E2AB354484ACAE927538D8F0049DB48F8E8137A19C1F4AE40980273607E95F800F9B7B305A1DD105837B890C4FB9B063094753724C06F5C360513A0384778B8CD957E16921833470B0321E21963E9450D0C42DBF95EC3308A5B8D009E2CD800BEFFC33F7D746418513E2C21AE7D32C22BCEA33C04ACBF6EC23D8C369B32B8DE2B11331990A9D788983A7ACB32A1921D28BAD4CF899C0C0230546D3FF82D7D1E754DF69D3A193181F72AA3DA21F43C20AB6F1DE05DE9548F1520D93C3C97806ABD5C55E4AB04E31F7952D85EF821E04C184C94991F9CC08BF97778093FF5455F9A391CC5AE5775A67C0E66FB10F586E3409D23E002F75B109BC9EB338CD9DF841D78B4CF051AADB0D6FE1D1135C57AF3E094C8A2D1555CA2EE0C29D47C4219922ED2ED9840C7DE25EF631904EA49EAD65EF752F8113CB2B82C11E108E0D94484D47AE252D7D2B318B692B37E3C47C89411538584FF2180F220357C3ED6C535161E84307F5787FE7C343A318E79347BD4594CE79D53CF95B2F9E022A2668431E15DAD5FB817594C99650940B4EFF288EBB9A7E599EDA7B25EEE8D7577554C05BFF85030CBE4C3CCF0005E284A8EE0C2F75746F8CE9EA803A5EB00C989D3D53418F380CC9FC1CD06E5DAE5998F8F77C00DBA8E101E534711404C9AD0D40A332C3B1A1F46FE1433359A3002E3B91E74267330BBCF55B525C5BC6F7C5326EC22EBA7B95E757020C1F9874875DE40536831C8646D935E73D675F4498A9EA7E00EBE0D174C0FB00EB6426EC2380D4F477569073A8AC27E9F9D33E2E87126963341A739B7D139075881B9BE1B348C3BC936ACD421876D554C3F7D8A182CD79D8FAC3B7090D387764C51AEB8D104636B010819B1C45274BBE451ED8853AEFF3BAA2C2E6EF91B9AE5AF3687CFE8A48437DC1279100315C93D378F8C4EE60F129D62630EB4E5F461F56D24028DCAB4C33FDDA5AC3135EF389452E137798F5C0FA023FA5D7595DF51E7B083B2DF033B7282BC4C713052D167833A7A51F4BCE86601246269C0575DAA0E53C480B23C5981277EB4CD32EACF4D4292DA3B1B7D6D2AD81DA1BAA0C1A22B5EA262EC9E50A556D0F92A76081B23165515273D8D128E80E699A8948AAED055CC897E9077E2BEE1ED736A1242E712CCEA8B558BAA74AE3C13E205F4A810CC2228D4B97E9C929E7266355009B87C3DFF86EBA9FF4954BB57EB327C85ECCA49CCB737F97E3DA42047ECE32565149483A7B4067DCC76DCE8C41961835A2618959BFB8), (0x), ('b3c842c5-4b3e-4ea6-aac6-192fe60e28ae'), ('6909-09-02 06:22:18.782'), ('1980-06-08 04:45:00'), ('11/19/2008 4:39:16 PMThe quick brown fox jumps over the lazy dog0123456789,.;:?[]{}()-+*\%^=~!@#_|/0111/19/2008 4:39:16 PMThe quick brown fox jumps over the lazy dog0123456789,.;:?[]{}()-+*\%^=~!@#_|/00'))"; - break; - - case 12: - $query = "INSERT INTO [$tableName] ([c1_int], [c2_tinyint], [c3_smallint], [c4_bigint], [c5_bit], [c6_float], [c7_real], [c8_decimal], [c9_numeric], [c10_money], [c11_smallmoney], [c12_char], [c13_varchar], [c14_varchar_max], [c15_nchar], [c16_nvarchar], [c17_nvarchar_max], [c18_text], [c19_ntext], [c20_binary], [c21_varbinary], [c22_varbinary_max], [c23_image], [c24_uniqueidentifier], [c25_datetime], [c26_smalldatetime], [c28_xml]) VALUES ((-2147483648), (68), (-32768), (1), (0), (-1.79E+308), (1), (0.1342), (0.7331), (922337203685477.5807), (-214748.3648), (':hî+Äh_ÖzüýbBßüa£î/,Uüu:£OO¢Ãv@b:ßrªZz*©ÄÄaÜü+©î£.:@aav<î:Ä_üîbb:ðªvª*Ð _Ü©@ö:výZßýb/|ÄÃߪßÄߣüzbÜ'), ('ÃCüu*Ð@/ü/AÃðÜU:äOÄî©îÐÐbåäýo/>CüÃ~ÃaãBßOUäoÜaååÄãrªÃ.¢Ü,Uo<å@Z_öðÐuO|:abîÄ.b|öbýýZzuî.|bßzÖâð£ü uäZ£Ão,O@ÜÄuÐßzB<îUýzA>oo+và :üb/Ð*bÖ*ZhðA+¢ããb<:'), (' '), (N'aO+C> åÃäbߣÜa:u*CªCbv©ä zZÜUÖzð¢:ÄOÄ£äöUuO ßrbbAuUA.zðÐ>>ßObC:BÖåAzZv@Ãv©åãb*AhUrÖa@Z> _ü©rã©îCÖB|ðoÖÜÖÄ_ÖÖ.B©o:©öã+:~:+ÃÜz~zäªÖÖbýÜBü<.ýzý_Öî:z>ÐoÄbÖz>C|<ü£_<@öãîz+ÖU/£C+:U£+oårðâ:bßüvz©UOÖßuü:_Uz_å_î+üOU£A¢ªª:ªßå>Üb C/~O:*|uZrãð~£bhÐBB¢Ä¢vA£|Zr.büÜoü./üÄA+ãß©aß_£h,©:¢>O__åb+ßrUbÜ¢u¢OArbOðÐZã,îv,©@B~©ü|rîðÖãbv_ÐUavÃ>oåã>o©üÖ.Zbßî¢ä£Z>üOUOðÐUB£O_~+¢|å@£vB@Z~:<£ÃAo¢Ãbü>Z@UüüBvbaÜrãî/UABr,Oü©ªßÄvbuðA>:¢å b¢'), (N'oß,ß|b@ß/ß>AÜã*ÐhOzýCÜ*z>>/Äh|Öýö<.aubîrOUª bZ/ >bZBßåoaßU@bbÖ>_Ö,*ßähÖã~+|ÄZýo©ð*åýîhÐU.hvb@|Öð,>ÐÃö¢:* :@/ :ÄãbãhÄä>£¢©C,ÐåÃza¢¢ ßU<Ðzå@©:ªZðü./ýÃ.AbåãCaßUÐ<¢h>ßÃhð~~Cãã*ãOa+r.z:⪪|/öh<ðbhAAzC>uã>ã,~~rÄb©B¢ªß/Aö>îrhÃü:COÜÃzßäîåý|ߪzba,ã,ZAãzUÄaBßrZbh_,v,ß>,UßrÖ¢U¢/¢:åßZz©.vå_ýzÃbÃ~î/vrA©uî:h>ãB©ýb|<*z>ßãäýa>v>B_Ð>oÐß*uªÜ©îãOO|or|ðÐuÃ+BB~.uaoü,+~Ö ððoÐ*ä~£~ü£Ã.ãZÃ~*zACb¢Uðý~¢Ä@<ª.uUZ,O,+CÐ@hðÄßOävßavÐuäZðß*Zöðb>bZOªaz.ööð,|>zuO.Ö/Ä:*Ãa,ý:+AbOß:£å/¢'), (N'ö,bzßãZߢ~OåO<*AĪouAãAðåÐ~Cã/ß_ãð>z,AäOBOãÜäOýzBªoß: ßC*o.bUOörߢbvýb£©ÐýhãavbÄÖvaUvüB>B+öU¢ßððU¢üUhÄzbüöÖ_ÄhĪ_Ãü_/o.ý+ÐßZhvAr/oüðuA*UZh/C:b©oCü>vaÐ ÄOzÖ_AãÜuî|B_OÜ+>*ÄvzÐz_zb©OoÜÜrÃßUÐðZßr/*rrîüCü ªýîZãö@B¢*öÃã|ßäîuÜUähãzßÖÖÐb__+AZoÖ*Ü£B:ÜhB_ÃßA©v/OöÃOz+U©brßAbß|©_.A@h~ÃÜbaÖÜhðÄbßC+. Cã+BC|å©ÐbZüAv¢£ÖzªvîBz¢:_h>ÐUü/o /|£.aaßC*ö<ßC©b.bßÖo.A_Ö¢~/,ö@£ý£,å<£z,üO~A©v/aÃz_ðvßhu¢bãä/<+£bh~Z Ð|v*,©a<ÖßO©ã.¢|OÜbÃß@h©/ö<ßöü_ÃoÃüÐv|äohÐåU£OªbÖBå*@~@u/ªî:Ou_ÜZ>@o/åZªîî|b¢åav*.AäBOO|oÐZ£©.ýîrBüo©/¢åßv/ªA<~|ª£BÖr©ÃBzöaĪ¢ö>î£ã_îã~îßobãÖ|@©hÐbazUÄ@.äãÐ/ðZozöÃ,¢b£Öbröb¢ã*Ö. |ä~öO©özCAaä<ååî_ßähbBbzöCZ©î|@BzB*.|*ÖA: ðªÖuÐbOÄz_åZZ<ÜZab,Z,|@î_+@: OAãÃÄo<|Ä,rAª|zzÄZ©rßrz_Ã@|¢ßAß*r@ßß,ÄbA£ÜßC:O/U~ |ba/+Äb_hoÜîå*zoßbÜ@ðaU£_a,OB@B b>:Ö ÜhbÐã~îvÐå:ßz**ýBU.>©/ ~äUý¢åooöð©:>|îª*hzå bÄßÖ/öß_ +Ð_@uAv~¢~CUã*¢Ãý/O¢b+*_ý>h:Urö+¢ª|öîý*å*Ö>ÐÜbU+Ob/@ªðva+ý@Äîß*.£Ö¢ußÃßýbzZzä¢ÜîvÜZrÖ.ÜÄ*_|î<¢ý@,BBA:A|ä:äzO£v:Ü©z©Äðbå/_*ýªaß~ðzðüb_bö~_>_¢~zC¢£rÃäahÐäý_zbªã/ü AAO.:<ª£ß©ãä*ü,ÐäößCÐîorBbaÐåýÃb|z|ZörrÄBrr:åa¢|ð Ðî¢ä~Cäýz,<äÖßýÜZb.CÜ£ÐBa@ÃÃzB./ß|UÜ/ÃÄ/.üîßuu:,h.>r@@öª£ð>©ÐßÐ>Üüßåä㢪Üßãb*_¢>bÜA/_©Ã|ÃÄÃ.ð~~A<ªüö+b¢Zßå.ÃÃåUBzaªöÜZöBvvOoorÃOUß~Ð~©CühУ©výåß:~Cðý£vO©ä©Cå¢å¢ßb£Zãv,+Ã|BÖrª_.bÐaaB£ªb:A_ý@öbß|>/Aä*ä/Ü¢å_o/~ãßÐ,äÐ<ªÐäÜ åÃĪv~äA|aa©¢£>zäoß©Üö_u© £bBåÄoBAýÐba¢öZ.aßßbÜrUOÖ~bB|öo>öðößöÃzã~ª©Öuä_ä+*ðÄ.ª|:ßîhhCýö:o@<öåAOÐra/b *>aA|OЪh¢O£ßãäååªuÐ ><:Ö uãAîZZBr ã .uªOö|©b Bß*äªbob@*./ãåvz+Ab©håª.ð~îå_+ðß,/u.>oZuhA©ü/î~**å~_¢,OrrööAov_h/~b,£ãßrÖß_Cu£ýAa__£ß+rýUAr|uUbå>_@ãäOÃ>b+ßßäbý|öðaªÄå*b,bh¢¢Uý>Ö©¢©ChoßäA|.~,hOb£ªzU:oªO<:ßbbåã+zbr/z/ßÖrЩzð:ýðö~ü£ÃvZ>a>¢Ã*ÜßoÐAZ*ðÖÐrß_AÄ£ou~o+ÜÖ£+UbãÃ/Üý+BUUbaî¢Ö+åðUªüb/BýßCªÖß/Ðu<£~ÐðoöЩ@Uªhzü.aåã,Öva.ª/ýäÜ /ßzß.ýO¢üÖZåZ_O<äÄ~~_Oý*r*ý><|uðö<Är@~oü*ü@u~UrðaåÃ++Ü@vzýâUå:>åöAü@ðbî_¢u~£ÜÖöob<~åä|oü/å@î_Ð:@A £uu,bßÜßÐ|ö¢_UÐaB>ý@výZ©Zãü*Ã,uhß,Ã**@*UaßCßUho>Ab|îzÖbUA+üðã~ðhãuhÃÖaC©>ä_rö:Ü©Uã,ßýUãÜ£|>,b,äbÃBîß©oî**ObrbÄîC:~å£OCo~+*br@ĪBý<>ä|üýböb:ßo£Ãð©+ð:@uå|ðz/ CÄߢ|ürªuA|>~ßÃh©+.УC_hÜo~ܪöðU@©üuußur/BÄ¢ß/åÐ@Öå|åéýOÃã.,/avCzüîã<îäouz_.î *vãvãb+*ßaüb_ýßßaB/@><üîbãA.©,C~v*>o_oouÐühîä.*ä*,z:ü,ãäZöuaaüÃ/å,ÜO<£vãðrÜ_ bA¢@î/|ÖÜ~bîO ¢rA_ZÄBüª<Üoa|h~o.vUîußZ:Ãb+bÃoO:*Ð/*z|£ÄÄoaÐÐ/a¢r/¢¢ð.,+ÖB~¢Äîðz~éßÃUäã¢@rbß_ÄUbÐäU@|@ð b~uüaýßUÃhbÜOöö~Üa.u |u+ |ýb©ßAoÐ>¢©¢åª@.ßC,©<åÜî©Ö|CÃý>+ã¢:aÖ|îCåAà Zöî,åß>:ßÃä©rhabCZßUo@£UrZß/r:¢ÄãoUåCbßahOu|ý+~:>Ãb*Öãh+~bßuhÜãb+åU>OåîðvO<<©| üZbÄä_ª _u_îbU~å+ OrBCbvªÜoB|*©ÄAÐãðbbý>Ü|ÄZ£üä©©zCh>+uärßBb,@ÖO_ãåz,£ßz*©/_,ߢ£ð<.UU_u£>ýÐUüðCUß_Ðßb_ZA<ßÜßð©:.O:hðB@öa¢uß.ð~ /|OÖäbß|,r+Ö/Ö,Ðß_zb@ÜOhZªÄOäÐåCî<*vÖðª**îÖÐÐÖ>Uu>üäª@ߣ+A+©ÄîÄ/*aÐrC.<î_äC_bð£ßr¢ð¢öoå©*åzÖOCbãuBÐ.voîZ¢*ÃãÜÄåà ªvã_rUåöߪuoü.ãð~ÃöruZ:ð_bÄOÄÄ*B.o|ärzaããöÜý|Bäãöza_obýäAö©übßßßu£O@ÐßUb::ýuaýuA£¢ÜãBßhã:>zãã@Z¢Ð£Ö©B ©uãZð<¢ß©oÖÐvZ|vbvßUu*ru~ýO+>+u_özö|ýßå©u©ãoBCUýb:~<ääCza¢ÄðZvZzörÜö aZU,Ca_@bC:ÖOzAÜЩbr¢_+Cö+ü+@rî Z£bO*BÖä|ßü>UOCöv_r@ÄÖÄ<îh/ÖAoýãuh:@Uã.£ðu¢ã|ääÖvaCýa,¢_ö~vr£ýß,ßhZCÐ~Ä.C|~abýßß>ð~©~rýö.uA/|ÐA©zÃå:ßo.b©uöü>ß*ßz:ªßýAãî|£bîß<<@£ßÄ+C+a*@>a+vA/ªåUhChu©väýîob>vrÖ.z©BüÃö/vZ>A<¢_r:a~ +,/h/>h:ävaUߪäÄÜ>î_r©äðOU,**ü¢>©ä+aå_©<|<~ýZvuäÜß/üCbhÄ@>üOCßCî£@|öUãßuß/ýÄbå£ðA_|@@©+¢Ä©<,~<+Ö+©*ÖÃZªðarh©b.¢£ãAo|u~'), (N' '), (0x2A35410DBAA6E4B09FE628A565EF22E4436A2E9FDC8825E0AD0990C7272ABADFA2154FB2D79AB63776DB5FA173C5639E0049259D17D7D8A110605FB1161C88742C49034FA0700DA8B3F6290029836DE7A5F1C7DD051DC7CB3DADA1773A05215A53EA7529C214FD8F3C7CE920AED7788CF2780B2455AA6E0E813812F3CF966EAED4CEAD3E0E432491F437A18933A71C65341484C2FAFD05A87B66A88A020AC0A60D3A4BDF2A397DAF53792F1D09E5DADA1BACBFBA11ABB4D7C905C3A89B9A8FEA76FB7BF95B3D3BFA96D56E80CDE79F968BCE6F554B0694618674162476D514B9EA45A60E69E17EDD70C4233C3C3409E1652C1DCC2A399E70661972E6271683C1C0B5958740912CA95091E586E25724526A34BE4AB8478EB1A635A74F6F97B65941627B879E81A1D4FF737C9954188E0EF41F7CF35739097927E4E00BE9DD39B8DA8B4580DB9DB4E993EA4A44CBF55C8EA7985A4F1BC3010758025FBAA096EB2239C3BEC8D30D33576B925F6DEEC4AD328752635082EA9C17893D27D93EF948FCFE280A073694BA996503E48863931894542D324E329A9F4F27A73F96E65918714A636FC6B9A6FBF397CAEA7F0614B3F524938410C7FACA6388BBE08F5524B30BEA723E002452DAAE313FB668B0204912F3497152D508AA50980B3EFEC56B9E7316DE9494D5B2D1D2B8D5DE874462B36871CD9B0BB36036E2C7EE681814DCE8C6), (0xD18BB53C40779F9A0029230B3658D58CF8CF92BFB6A8B2CCE74AB8BEDCEC18E60110E2DCBC905B9413C635B9A4E231C03E4FF0F60E839A28D9E855F6BEE0BD13103C0A2576F8CF6774FDABF072F9280518F87F8CFB22D77D75B903D33B64D5320821A867D70C494580898111D7AAB5DFBF4FDDC5613118ED658DAFBDF5FC2B102778E85050C12E0CAF3A0C72A1C6A6CB032313EB8710D1D609BA024A5C8C50845D71E95EC2648FFE21D1162625A64C9EE6E4B9D1E83F8817A6114796BFE3AF22EA881430DD47089E9415CAB5F9ABB163), (0x78D37E9B1EE8D1B7B11DF93F3D21F43C9D911CC19FDB1A3CD275D21EFB60E3275C80364F6BECF6470B9057819BD58C94056F14D152A1C49DB842C9A815B3BC5039D1E3BDEAA4D0B09BD4B60E8399A0FDE83E188C4B11D5BABC999728234D3257D40747CAF2CFA9619E63367DEAB5191EA1CBC0D69B2F0428FB2800510DA78D4DA15E3A7C52D60A1895B7EDE8DB57D0077F7887578D5BBCA4021FCEC9CF5853F6D6E8DC8B7A9DCBCBC1A741E3421C4CA458F9D1942036C046A1967A330740493C63F712F37B448CE2ADBB96E619D861E5D22A71D587BFD5A02895E9E32398C4805D04804B095928136CEEE7659FD92CC9349460DDCE74B5A42172CAE55AA9BF14F71589145816DB79015E6998D770004E6820AE8E37E6B1E94FDB2A978E42B8C32FD26E8A5018701EB8E7DB700B1DCCB0727C7D39FA30DD1064A0C57CEC44EBBEA5A568040276FE50B090D5500B41DD310F792512C57EC8FEF55E25B052F43174FB1CCA65B5C7AEFC7D2C89695B8D0422C2936D731FD9F826DD690FA4504EFEBB5F6154EE76787C47CA299499F55EA3685903EDBE86BE552224A4884BB80AAB2F2ECD0AF93816AC491725A8F5445F317EC5A74A4C603F35A00B31CAD2F0308FC07D646A2753A92F4256A3A760155FDDC4720A8610BF5ECFEF986AEE074CDA59E796E878DFF40A2A1B7808F6BC98D48BAB53055FE5AA7E001E957B8EE9BB27F67C4ABFCA2DE6FDCF68DF6A98B7681256C4DE42B3467A733C18E75A4A797B406050117972D8095DC55536F6063FE549B58324CA0A7974B001D682B1468CB356ED9E0A48A5EFA07EBA817D5E0F846DFD339DA5C754B136E6DC61789C55571738A1E00967349CA4C6E2A60F89FB15A07D68857EA8E7EC013C68236C43760429626944BC2F7B05C896F8DEE4AEA1ACEBC6C1FA33CFD96E51B5DECCFE1130614FDE7CAC1FB759700163BCE8B00808539ABC38A6817CD05989FBF20651AE06B765978F0531F48C336C50F9D012F0BE49AD8B3142D88ADFD30D232324C5521F535C058318780221A62F053931820046993CA859C67CC3DEDBB8BCF70DD1686E1931A5740D6DA5D1AB698B13D350AE500DDD8AE71CF959D69826A760BC0A13D5C6971FFFDD8C392B96D7AE5CF1B00B8A0A6BEA3046815120D7CFDBE6C54514A155B64D3C30AE7381A45E50454BFCE5E71B1D56501FE38E4445FF270DB0526651C30D073A63CF595BF8698CE8310CD4DBE9F3CAA8EFC381722708F6318665D051F8FE823EF5AA844CC3FA58B656A613392A4C23BC87BD61FF8B94135AD828D592983BF0328996E63F6F7EE5F46BCA1C81F5BC063A4114CA3A9C82B2609729739A25C51E1BB6E0AF9366E44D09D86D94C17892651C229A508471B59507E485A8450A4ACFA5AC00CA140C72D35DC6C0612FEEF1E705C357788A759AAA004BA8AFE03B08FE8E9EEE1478C7510FAFC7F3BDB0546518F29EA381B3D244301256CAC964C3F221BEC2D391FFDC6F3D7248C8C381DCF9ACE58FBC4298864BBC59BE0221FD88ABECD4D1FFED80D418162F650F6B0981AE355D1DE3D406B0893777173741DA4D40E99CDBEEB0DD0C2B1076A6133377E0B2D80FCCC4DFA4D7E62448C776699CD73BE12425CE2D92FD5850F1D35D5F9C55C097655F310E896045C5F5C9681595C2739F6A320E51118445117373EDD17A8687F206DF043DA52D57C4E00938C89543BB2F5FBDF56A476E85E0191F9A1673744A6F42750EB6BE36F93DDA4A71074B7C7C30B8BE71BC911CAA97592323869241506CBEC9861F34047129C4B790FDFD7D949DA36A5EB4028EDD25CB775C9A1273AA99F9054982F55CFBB34D48F7D98CAC9ADC8E86E228E39C6930EB6154BDA8D617510CF604F73412A7466EAA67BA9604981EDC800B8B9082B65C9B189694073E0A7630A6CC96A8A2A77CDF9BB93835AF99E7C836E028CB8CC08A40A75B1B7B123F2F9FF089EF37027539D88EABF4C87D27EC7FAFCBD05DE2ABA4E5425600468C00CD5C89984425AAB0C6C1A74F3CE0CCC1C2806F9CCC466FD1BC44E509F5AB74F24B8DDE973EE5E2C7D5FF050FB6926FC319809480D7F03486EDB7DBFF40A0BA1A4CB404AE023482DC9DA8C7CD41601A29D521F07417F41A5B5957AA8609E2863444EAC2028EC0C1E4FDB7E32F2867448C9DB12A1EAF45035899A855AA8AFCD3BA219289579D189B15600C776010EB32F2121DE957B86884FEE76969E66B165A01E3280E96DDEDEF841615BEA3CEA247AE7562986C127B02B90D8A7033AFB4A94AB1757CE8DC9C14252E6540A3A9E12F4422BB70097DEDEF68265588527DBBD5626B74F158265FD1D94E723DAC3A5E0F2C5B2B11F443A0CCC48614C18713C1A7738FDE3735EFD71EC2E997BA0BB0422DC7455CF751A9E11ECBA72DD1119D49C68CCBCA1C5C26D93C830D4F0AACE5C11344E7F942B6C956C9AEBF6C8EC2050C24A0D12D40E525D0A06B2073435AD672E5E6198D2AA3070FC374016D9CBA4B7A7E012A69DBB7812E1E1658D69655126ED84D86A7A877E28099C16ACBE4B734E61FA6F4422F6C972D65EB6F134A30796D6192954E33A4D1071FA9D01A4DB54966E272B6EF60D03E6BB65842BC07CE356847FD695221E5B27BD4ED22869C7DE0AFA20831D87A890C90532A98DB6114FF507468D24F4BF645FCC03A1B73ADB8CF3978931AFF9D5DEDBDF0D9FFF74DD71ABFEDD21233AA9063ABC334183F6E98E29A5B5E63CEFA00B2167A145E72F74DAFE8205B85DBA69B8EE72F6E3B6945AE4F58F6659BEE744CC5ED1FFBB89631F0B475852F1E121307F3C0D07B9E8CC449D1CCC4067C91B2C174D49697BBABE2F8B53FB9C6E4158F3D44EF71DB1EF8AD3829D629ECD12B7423C3C4BA4A7B7B4B47DDD7C65FD2FE65BB3C87C28D1FD7A27C265D6EE482F6278ACA9603205B45C1C9A32AFE46314E662B716DAF4969E703EC213D231D0C67C5E6AF3C943BFA4460F7C5F8E9F5D85B4BD8F743731447DE20E29317FE1D22A4BC3C641797F4BA2A302C0CB78470FD0D13C5F24B25C8F3B09FD11BB2A8E34643D5213CAD90C1C4561DCC1347078F59B0E48503392BD67EF348B377C5D907824CE6C9E262344F7D51009B2D59B5ACA80F776BCD23DF0C17FEA24865DC49FF7D154AC6603EADF77C9408B23990A9253E9C0B674D6E3A5E6CD9B2E3C0ECEAA007011D170EEE4B6A6280EE381B2DD387557D09C8D1E2B10FDBEB5A878BC93690AA67AA387292164F51A005CD7F02433F062A8E42E221CE254F0E3C2294C4DE98495E8DB3829A15C266BA7731DCE490D8A81A80613BF3AD889984E86456F4BB8DC16C83207490BC6B15CBDC28A99D486A7D637A79437D5D55B0051AFEB1B16C72FEEA6F70616F64175E144B6F1785DEFC3B7EE6F3794149440E2D706F75BDB9645F6A29BF2DD8090EFE631A2F31ED3E2A261EC233CB79F9BCA12B6134FEF5A1A05AE710AD5C1FCF6375D7F41626191221EE454857FB8698E5706C1D0176D50F09C17AD549DD90CE064F), (0xF384E29588194045B9AC49A5D44F2A3CEF01CDEC9FC7EA55AC43C8435D7742089BC7A5608ED795E7368F565D77D501FAB254DF0481721E2C9A8DE94450FCE7426A41090CA9C9AE186CE6B60F708DDDD742CE9009973D8729A878C600ED509739A814F336CCF450E9A6C7989BBC0EBB0CAF1201826CDEAA2DB9DF633102AD2A1C4E7D675C9AA70B4D7DA763D0A5EC6C99BDBA50DB4E15CDCA6AC67CEC911FE6F89C7B4C3EA75F710806B404C47ADA87CD73C973485C4ECD39B09CF1D42A1FBC5DC16A33299F2DF25D4848D49A10084F903EAF78C7AB9D9C4EAE128E0A6D9DDDE7F7A60210A65E2D45D715FF147A3329A74D61967BA6F4B223CEE57A8C9FE8F0AB6BECA269063FE9DF8233F0959D87D47BE9E6BD0B07624102F4DE42C1E3A0A5EF2554A88D90BFA10E78B6F872041C864610FFA3B82BE4A309AA9F7427FD27FCE28D017048DF46EA2945AE935069CFFED758FBB1E4FCEDC341B09FE2F04A7A1151BA16E403AC3D67CA1479737C5053A0DBA19DCE017618E5A03D2E973F64FADFCB9D429652EBFB2B1B94E7CF837A47F05DFF074FADAB0FDBA23143C57DA527651A9AA8DE0EBD4DF0A671B26D8F486126F53D3A3F5DAA311F8D66F320A735AD766C81B5E9D268E2A0B216A93CF9A24C59CF1DCF406AE8086F688850A7C92C4970C33C000D9378548D5B9A8D4601F526EB1A9A5089656D0B8478458049173AD685CD3878BCA13EC557C942E4D05AC26E7362658D2FDBBF0A56307C954EF70B7521C30878C87D6949DCD4F9C023883B29B5D60DE6B2ADA7A90E2E218B24A87760BECDC30C524AA6F6F91BB05AE2FFE7CDF553DF77EA24C2741C5E6A9A5BDD24335C980256C52ED66B3016ED97FC4CC60E465396D1C80076990A4EF0F3DF0B9A1BF67CFE4AFD9108C67C7346D3372B77CF985B530747536B5C22684B763EE38C247BD1A0804E7C11B54BCF5554B9A362DFD7205B83B893D4A311A1289445918899E72257668BF7811B4A9EBB77FD16A27F066C9F1D87086CE8FCFC6EAC547D6FBA46BC6D974BFB53E09F3F3919D75DA5FBFEA98DD9F16A11DEB56E6A8E88D4C7CC2F013041A80B330A18BE7E47CE53119F5773AEABEF95C8DCAA8EE1DC91C558CB786CE9D52C6352F37582C032ECC90F625DCB3614251CDD993854971A2A56795266B3CF62693B72F320BB356CD495EFE07E7F7FC68E43A55C8F4F9DD7CC38C91F096ECC38FAADF9225843F36AE671C4A264B69CAAD6B3C4230E73D3199E9B27E8F1156266C9B7E6D0855D6D4B4F3A751D8AFA72159C1E4855A9A82A86DADF84BD1B0B79D00E5ED8ADCFCB25794578D3D4FDB58EA328114CD3CD0DBC218C60F5A6D9B02F44C1A40F2C21C446D0F9CE1031D456892551E0940ABEA50301A1B7216FD57EA095488F1258A5618164CB7BDAFEFD8B4C36D7D054F81C25851BA10E8B69A3D7), ('3f0b6545-ccce-4ed9-98ef-40c073e8a80b'), ('9999-12-31 23:59:59.997'), ('1968-12-24 07:01:00'), ('11/19/2008 4:39:16 PMThe quick brown fox jumps over the lazy dog0123456789,.;:?[]{}()-+*\%^=~!@#_|/0011/19/2008 4:39:16 PMThe quick brown fox jumps over the lazy dog0123456789,.;:?[]{}()-+*\%^=~!@#_|/01'))"; - break; - - case 13: - $query = "INSERT INTO [$tableName] ([c1_int], [c2_tinyint], [c3_smallint], [c4_bigint], [c5_bit], [c6_float], [c7_real], [c8_decimal], [c9_numeric], [c10_money], [c11_smallmoney], [c12_char], [c13_varchar], [c14_varchar_max], [c15_nchar], [c16_nvarchar], [c17_nvarchar_max], [c18_text], [c19_ntext], [c20_binary], [c21_varbinary], [c22_varbinary_max], [c23_image], [c24_uniqueidentifier], [c25_datetime], [c26_smalldatetime], [c28_xml]) VALUES ((-504945714), (182), (32767), (9223372036854775807), (0), (1.79E+308), (null), (0.0559), (-1), (922337203685477.5807), (0.8643), ('Z@u:Zßb©CãÜ,bZðOîU|hýAýýouöðAZÃC¢ðrÄ:+/hhb@ß*Öa B~ü¢£Oäv_uZbåC¢ßo©ÜCBuÄ_ß/ýð>r£,uªã: b:/oý>ß|ü. *ü~åuvvorã£O@üÐUu@<©äBã+ý,br.üܪ<@ðzª~åðbåöOãvîrUv|A>Ðãöh,ÐCÖA©o,ÃAÃahÄCß|åoߢð,ðh>C<©O +Bªã îöý+vUöªäªã.@Äo¢Ãh@<*Oª_|©Ð>Ä î_åßðªîß_+üÜb_£ÃöüaÄÃüb*ýÄ*/ß~@:î_Äz_Ðß|Äåªo>~CbåäÄÖ<ý¢ö:@ßrU:ýüä@ä_ã huO:ýß*îä.ªZ_ðäÖüîîÖãAð~zvî£ZýÄ|u_Ä>~aaã~_©,ªüîbBB_ü£b>CZ~oÐîÄ¢äÃAbau*OöåbO'), (''), ('**ã_O/Ððob~uýäZðäðßÄ|îîãÐð~b|årÜÖªß+bO/.üBîö¢hObªh *_ß///ýßvä©+väß:,bîäÃ>,Ð:aüuªÖ@Ühðýbãrð:zh©uBßîbOh~ Ä>z@*¢Ub~ Z|ã.ßßb_ÃaÖ>:O©ª*ð:ãUÜ*ob¢ª:ÄrüååýäB+©aCa¢:~|rbhãÐZ ~Ðb@uÃ*or~ã|Ðüä|,~:|ýÄ@*b:.ß+rîva©*:zubv/o,ªßZO:ð,oBCAß_ýv*Ü<£ßZOU|bª.vO_rCã ð_ÜZüåüAßhýãß:bäZßß C/|ÐBä@hý|ððýubÐ~>@ÜäU+C|ußürzU,z>u>übOC*ßAUrbä~+ ZÜZa<äb:oåb_ðÃz@ª>a~Ö@ ..ArCî>+u~åaîzbßå*ð©<+~ß|Ö:å~:£ö|£>ãüA©ã.Z<£oU¢A*ªhäOuAa¢ß UaUÄ|Ä<öUßuããÃBvOåð£zh.@ýzßÖ ªAÃzu:ä©AðÃÐîCBoðãävoÐoa*, >UZbUåü@¢:ðA£Ðzöb AZZCäÄß@üÄrßz *ýÄbÄOÃCuÖC@z©.|@ãahãÄÃb*O|ß@ÐuAÐvÜÖ<ÜrAaz:Avå>@b,r+ßO>£Z£Ä@ªå~<_bßbå©bТüh_v£Ü:©bÐC@äu_Üh:ßbÃ/CÄü>rb:¢. <ÐãAö+¢åvä_o<üÃãvvÐuU©ö@aßZo~+r.zßAC+@ßÖßößãåüUýß*ßrårBßß Ahbý.,b+rðh|,b£bÃåãUBýä*AÄ@,übªOÄOª<öäÄ>|åߢªÜ<<Ð|£ a/bhhoüÃä©.hzöãu:OhãO*ÃuOuÐUuA£..ZoZB: Üåa¢å<à £övA|/ßh©Ðäüî/Ä<ãaýÄAß|Cýã*öOÄßÐ>îbzöaBýªh<_U>/*o@ßä<üzä+oAÄbäüöðC:a*.@ßðaCåzAå>.aÜ©ðöU_~rðßý,îÐO_ªCA.ýÖýüö<ä.|*v@zbbzAýäð.h<Äã@B+ÄÖ.Ö<ýAA©öýÜ©O£~@:bä©å>¢UBaãvvh.+<Ãßö@b Ab¢BýBUu>îr+:UÄãvÜ>+üOÖ,ß~.r>ã£a.ÖãªU.£oãÜ +bÖüCÜã_Oa©*ãZUZ,©bЩUOüÄ.BªãC*@Oä,zbªZ/£ZîC>að+,_ z+hÄ£üÐ ++ߢ*ýßbbr/_~a<Ða._uÄu¢ÜÄO~Ö+zZ,Ðö>aoO>_>r¢züaÖzå,Ãu/@ªhÐAîO,bÃÖîAߣ>:|ãðýÄ>ª ßÃ/Zäüªbüu +Zhvzh:@ä,ðuCß.ãäz/ßC@.uuÖBrÐoãb|zCO/|ªãvýÖöî< rv:v@©,îåÜ©ß@öÄbvöîß_ãýb¢Ubrîörî*>ýßðÜZä.zä£*h*C+ z+U£ü+v,£Z¢rýð|Ü/aüîo<£A,uü*Ä>åðß~¢ã©Ä_¢__haurzðb|Ä*ob£~@ý/££ðBb:¢O.v~~O@b@ü*,¢¢@,*z|O.h@©>özÃ@ÜÖbzÃÖÖåðÜbäuü©AÄ/Ãî.©hu©O*î~B¢äã_ÐrzböäÜ@/@< rOã¢Ü@ªÜBCªã¢@.äZãorA©u:Т>ãhîUªÐ*üobüzCvb:¢~:/.:ðu~+vZ_ü,åhaÜ¢OäaBZ_Ußz@Aöör~åvrb,uãu:b/r©BoC>/ZÜ~*oårCîb* * ,>ªöð+.>rߣuBbhu*ð:@ðßzðArrCÜ~åhÄCßo>ýUýÖhÐ >hU@rB/AhBå:ZîÃuöÜz<öÄbüäu.Üîýð~©@zZ*Ã>ßZho¢Ð:uªzAAüßv,Übv£ü©£CooZÜÖ~,ävZ>Oß|/u,aß<åööÖ.h@ubA@h¢Aý:/Ã:AîOÜà b~u¢bvüäOuru_+ªbOÜuÖ+|Ü|üÜÄ_Ü|ÄOU. |z~AÜ|v/ßÜUî äýÐ,_ðü@ß©©v_.Bª@AüCAbÐ~Ö:rBCýÜÐå+ÃÜã £z:ßÖ£ðÖuhOßvÖZÜzßUh¢BÐå,ãåð+OÐzÜr+£©uzB£ýubðZÄA/Cbå_ÄÃ|~~/îÖý,b,äbb+¢BB>h<¢ä©öBCä>vBãÜb>ßbBÜ,*£ªO©bu¢£ßaý,,ubÃð¢ ßî>Cö_Ba~_~ýzCßßAÃýåä>rÃUC:,ã/hh<:ª:hãÖUÄ>@bßãä~*©,îîÐÐZvÜär~*öbã£|@.ÃÄ~/_ÄîªCðo/oüðýh* r.@Äý_£+|:Uov O©üß<+aß©häÄÖ.,aBÃzu ýoaªåå**oåÜåCýZüo©ý +Ð+äZÜUü_*_äAýO@öuª<£:@vBߣ/BbðAzîövßozB£+ßß*îãCßÜaöb@ÃîrCÜ:hßå_hAðÐßî@ßv£ÐðOü@¢ býüßubb©+äöä> +ã+ÄBåbrA_Ã.UB£CrZ~££uZß//Ör:*ÐZbö/+Cå/*ýoov©z.rö©îÐ.h Ö/ä<Ã*ªÖãÃa>|©Za ãu£ã©/Ð*£ß*ü+Ãh|öý*ÐðbuUbÖ.:zoa|CåB©/Öa>_ABrA:öî@Uî|zð£ßöUÜðavb<ßßã>ª:hOüäråüAr¢ß@öbv/vruvÄrýBzýu*@¢Z Ðörå,ðå*¢öa+råö@äß<:/ßoßýüüa,bÐüoý O@ÃAßå>zbhÄz/AÃ<ÃoãîöÜ+î/üåü|uAuu|ÜaoÜÃ|ðBåvÃzî:vü:ÄãÜ:ðZüruîhO,ä+Oå|.Ðu|Ü|¢ÃývC*bCî©:hß+bUÜ£î~öÄåãðÐ~Ã_Ð>hårßUZÄbääavÄ,U*>>Oö|©O¢ðßh ,Ü*|oO vª_ãöb~bÄö/O/Ã+br+Üð<Ã~å/o+ÃB>/B@büÖö©Uîý¢:©>¢Ã£AÃor,vä~a©,ÜÃåör> £*Ä¢h@håöãuð,ß:Щ,*UÄvu,ÐZv:rB©vOoü ð,|¢b> a*Bvª öu_ävª,hzåãvéãOüÖußCßvãÐOröuA¢a©CvåC,î|~rª@Ä*+ß<ß,*bßuhöÄCB,:îZvߪ|.öb|ã©UîrÖh+ß,:.£vüåîCð.Zßohz UåÖß,@Öß>,_zör|Ðzaý>¢ýäЩzA©ZA@Cªä>U¢üýð©ßÖ~ ~oÐã_>hhßÄvAAoB>b_<ä/ÃBÄ C AbãßuZ.boZßÐ@+üßouu~ßî.~vZÄåîba>.OBböîbТBðrvßö><åöh£v_ð~@oBvz *ZîävO<üÐür :*u.aC_,å©ü/Ã*CoBðßðö>~r|A©Z¢~Üo/öB~+CoýÐî/©z<.£__äAzb*îãBÐC©A<~ößãOhÄ.ĪZÐåîo,¢/hÃÖäðÃBuuýv_bä/©|ßÄ£U>ãCo/a :ýÃÄC©_*ÄÄABÐöðÄoO_/Zu* ©ýr¢ä£Ã<©ÖÜuz_.+zBöãߢîZ~Cöüå~bu£*bh:ð>ba_.ýOÃ,¢ÖOCrv>@AbðbÐÃÐ~BÄ_|ö>Zî,ªåßUuðBåÐ uÄ:äüoßab_äÖ+ZüzZ£C/C:ZÄ~,©ZßoãOa+>å¢ã~.h>u+_ã>_Zî¢/ÖZrÖ/Öv|<_OîÃÃÖaßBÃ/bÄz¢UîOÐåhað@,.ÄoÐ/å~aö~z ©ãB<ÐOrr+Aü~@@|@Ã*_U+ZvAäb£ßäbÜÐ îu £,,ßÄ A+Ö~uð bz~bbö,~b¢Ã@, zvUUªZuäZöÄ_bvåZZãÐ<ßÖO©vüãÖªÖÄz ýÄC> ª¢BOA£*@îCÄÜ*äßî_|B|ý£:.özã~ðý.£©@ðã|Uu~Ð/:C+åߪ,Öã~UößÄuC,/uhBãauãå_z:ÃC,.o:,Ab>UOOhß,ÄÄr¢:äß*ª ªCobîbbZh<ä_¢Uãb ðüüðÃOßhO Ãaã AßßãvåaªOBîý*_OBöß+@ä+£.ðð ðÐÐ,ZzhßÄß.|r ßäAÃãZöb+å¢ <£O.ð*_Bä/ĪÃrÄ:Z_UOO@~Ü,ubbü©+@£ý©o_,Üߣ:höb,aÃZ>hrbOüÄ__ðîbb@öbr¢ýU/<<å_äOãÄBh+ßðhCvZü/vba|åÖªðOåäÖA/ãa£ @ ßåã:Ü_vC,ãÜð©_ü*:îýßvv©ßu, *bh:öÜ££,U|Ü*<<_*BöB<<<|Ö Ðb_rau,rðbU,ãoAî|Bîh£zßÄ ÐZzääª|ĪA~BrU ,o|/Zövßb|ð+£¢Ã/vßåZöB*b/éuC/ß+ä~Ð<Ð*.+:>UZöuðBð~ Zzü+Zß@ýªZA©¢Ö_@bårÄî,@ß:äbBuÖ~z@C@bîr:©r*ßB/ߢ@.ÄãuÄå.åÜoð/Ö/ÜãÃÄh>U<¢ä._>|~/+¢U_Ã>ð+ª£Ä£ZÐZaðÜ~ü,ÐÃCZðBýßo+äZ*ÜZrrÖvð B>ß~rå~,ªÐüªb£öCUÖ.ð~/vä*öüýßÄAzbb¢O ÃÐu,,|£åÃZC*BöýäýÖ£uðUUîª~åÄ©_ýAÖÜ|Ar_Oå¢ü££ã¢ÐÜA/bzüö,:BÃýð_ª.vÜ£åä|ßÃ@ÜÄO*aaÖCÐßð>.u_£Äð¢å<ö,Ub©<ýÜBãßÖUbý@åßüåî@UZaßbrðaüo<*.©ýýhÖOýU/¢îZÐîöb*Ã|£~bî¢a*äÐ*O*o_+ýß@©rÃîZß©C@*Züð¢:ðÃãªb+C.zUåUvÐÖ*îo|Ã<äÐzvU>>a|Ü.|åUã_,Äh|ß+©,|,+Öý,ß+ðübö@*ãäª,Ð<<Ã+>ðß@:.hÃ/b< aß>|COZãåaßãUîä ªbã¢~A.,î|BABÃ<ß__ß++ßãªýÖü~ßC<ö>uå*uãÐý,C£|bvÐr@azÃB>üßUu¢ãbß|ßbo@åßh~ÃßãýUhZ_ÐaÖbßßÜãaUbBýuåð|_ä<ðÐä.+.¢åv@Ä©üÃîãZÖÖüZz@¢ÄA~<öî.Ävߢýh*Ã,Oî~<_,hz b¢ßÜåOªuUà ßhö*Bý,obîÄöb+Ü,ÐAbzîZhîvªð,¢aÜå©*|büu+_ýýU/ ÃÖ.BßäOO+/_abB>ba_bCßZÄßÐ.>©@zîAÄ||ä@ZßhªÄZîaAðhå<ý:rz@.b~*++@£b@@Z<@£|ÐÄî@CýßßÄ>*Üb :ß.Aoßðð:ÜBbu,>Ö/¢UîUÖzß,.vÜ£äAÐ~ÐbÃå:*ã£ßUC.bÜ.zöbÄ_oBÄ>¢£Ð_hv~Ö*:>zßåýv.v/>O+ £ä<Ãßzr/¢+OUߢz>_£+bªvB@bb:Cå£r vzB©©|Ü:oaäöª¢O£CÖîãßZÐ+Öö¢Äãb|ýoäý>@¢ãüåðî~.hð:îßaCÖ+>ü|ÄðÄöbªB:åßТ©C>ðöüå,oüªAOßbb:UÜ+AößÃhaß ßh@*OßU©@rß.ª|.Öz©Üv_Aa£A+~Äzßßðo|~a/vä*|+@v/+Ö:@b,:U_ÜÜCå ßu@+Ð,äUbý,zAß.Ão>Ör£¢hrU, êÜßî|öbhAaßä|CÃÖBÖZ©oÄå£@ð£bBoÄO/vÐß*vßbz_Ä£Caî>©b_ßCvãü©CÜÄ¢ÖbC©~©:*üßzÖðAåözå©+oßA¢åbO.ÜhU>C.|<ªý@*:hÃUubOUöa+uB <ðA>ß>:.*z* ðahß,ßåö<ÖÖa,ßö£:CrAä.|ä©,:©Ü_£bäÜ,:ßuBýª_|ßb|/ß|ßöUC :>/vhý*uoðCÃhª,<äuar.zäÐßBü¢Cüª.ö_zåa@BB¢,,£Ä+/ß/böÐuîðo£Ä:AaÐCO ÃÖªz>: hî~aîra/©oOAaårAªoUzbbBîZu A¢ã>ð¢¢~z îU/Ãa+ä_Bo:>Äýhvovbß©ÐÃåýßã£U,,ZåÄÃðߪbÃu*Obå_îã+©<+><£o_|Är@rZÃÜoªaZu<_r,~ _£a/ðýZ~ðaß,b_+uîäoAb>vÄðå|hrðoCî ªå_vv_ðÄÖÖ+rüÖãU¢ u|Ub+z@A/h+ýã©>Äð>ã~¢B*Ð@ Ððßzözãå b|@UÖUBÜ ÖîÃÄUã*|ýÖª:îzäüÜB£ã/Ãaßo£*ü/î*@ Aýª£aÃüö, bZäOU£Züh:ðîbåî_ª<+CB.bhå vzÜ.©îA+ö>z:Bzoðrb.CðÄÐrÜub,bß,AßB|ª£bßãbÃÃB¢bU|üî+ª©Ä>£A bhãa@äÖ_åaB+|Bð~©a£.|Äýa¢Ü+o+~*.öOß/OßvCUª¢ßãb<_ÖaãßOhZABîö_¢>¢<ã,,î*ßZßbO.<.©o~Zß.*Ö@UßîÜ väÐ>Öüoý/£~OðÄAÖaÄߪ/Ð*UßBvÄ o~a~<ãÄ/£vb|ª:ÄB, AZ Öý/@hª£a|ð<î.|<:äýaßãA<ähbAðª+ðbßão_bü|bb/B*ª©råU£@ A<>Ä@|+B~Ä,Oa,b|.ð,î/üÖ,ðCv<ähÃüä~b* /a>~::*bî*r~¢:zvªîbÄCÜ.zîu/A. /*ÐUüðå ü>,*AÜbîUÃ+ÃU©ý¢u£ªO©uAz¢~ðãã+>++Zö_ ÖÖ¢UýýÖ£ÄbÖ+BA zÄ£Ð:BÐ/äubäOa üÄ/z<åýöÃUZ£î>o<Ð*ob©¢ubUazÖAöh|£,CAðß|/ ÖüAö£ >*b:|uðÖCÐa>,C_ößÐÄî©ÐîßO+bv¢¢_ÄÖÜ_~ÐBäCãu+:. |~u+ÄZuЩÜ:vvro£CßãÖãr£ä*/OZZä:ßCåßä å Cª/ZvªU zZã:O.,Orüßåýß~h@uÜЩCü.ª<Äh.ð,UBCäý/.Z,ÄÄ¢î@a*zazÖAã>£r /ãÃÄvÖv~~ÜäöªÃBö,Aö>båªh.hCO*.ª:©©a~~©:ü*zöU<*.ª£b/<ÄÄv_u|Zh¢BuoO.Zö©@+Ä|ýoÖö+£bÄ>@výCÖü,:*a, UBÜbbb<öCÄÄîÄ|@~äîu.h|üOb© _rO* U£î£OZ~ýU|,|vrA.ååЩoÖßZ,UBu ª.*ßZhüäÖÄOAzÃo¢äßb+B*ßöuOãUÄýðUZv*Ü+îÖ>©:~£CÐ:ð/b_Z¢ð©ª<Ðð/ßåßh|_©ªh|î~hüÃåß|ãð, h|ª.ÐãÜßUßÖröva*o,h'), (N'ä/+£uÜÜðîaA<ÖU@hßßãzzBßðA.å:,:ß*AbÃob'), (null), (N'A îÖo:@Ößa~zrýÖÜ¢/¢ßîz@:rÃ/Ä_+BÄrãZýObÖ|îC£+åZ_Bðr:a,Ü >*üö,îZb©äãð¢,~ª/ªÃªoªäb,@ßä:©| ßbîZå_ä>:<>ä©+ðÄ ~A.ÃoOå<î_åB/ªýZ>C_Ü:>@ZýðÄ*hä>£:>ÖåÜßCß~/uÜuåCöör~<ÃÃA uÄ~z©< Öªä:_+ßåÜzîbßý*Ð~ý<Ö£bUr|rßb©@b obv Ob|~C ßoÜ¢u åýazrЩÃ*£å _ÜrUu~îÐÐa__.î¢ Ub/ðü>OÃ@ÜC.,|ü@oUA C~öOÐ>~ä/<åZB*/Zuü*bª@Ð::< ObA+Oåzr©CUr<îzUAåß bh©zråüЪã>ÐUo.ß.BÃ.ßoÖOüÖåhZZÃ|¢oZA+ÄOzî|ªã¢@üz>>ßöO.@î+>*/aã:zoðBbå+/Äî,>u_ð_:ß|£ß:Ð,u£,£ä+ÖzbCZ©Ä/î/CbCAßîZ*:üå£/r£ä._ä/>Ð|*ob/CUUãAåh@Ð*Ä~ *AOîð@vu:. B_Ãöäb©î@|åUÄ£*hð//.bÐZ.©a+ö£©Ö ra<©ãüÃh+:öZö£Cä|,*ÜaaZ*UZväÄÐväß_bÄo©zöÖzA~ßa:aî>+vzüzrÄh/_Ãß/¢rb<,ª.ÃîB,AÄüÄ_ußvör*ý|ãUãýAuÖvðä,+Ð_b,>ß:Oîö~Ua~rÐ/åUZu>£oÜ.©© hBä|*ßÃÖä/,îߩ壪ý/aaãb¢Couåî¢BhÜãÖãЩ£Ü@ü|/ã+.ãÖ>o/u© zbu/r~ßäu*vCöîAðð ©>bvªßÖÐ,h,<£îC@:ß>U:rÄB B|v:öÄ~uC|ovA:/Ã:O©:ÖÄ+ý//U.Ãä:Üöð>ußArð Zåßü,,,ßzå~åð~_¢ å.<ýv*,ܪãa ª+:ÖÃ:ö,b_/öO>au~zbaä:hÜ: A_/OÜ_+>Ä>ChUC~UZ ý_ßÖ*OOZÖý:hUÃz*/.öäÜå|Ãß>B:bü.¢OßÜî@vrvý<ß,b|v/ßîÃOz.|CýCüãbÐUß|ãü.î,ßor©äZBo¢uU£¢ovUzÖv©ð,Z+OvUýßrªã@.B@ü¢_vaß<Ö~.Bb_ @uou<.åã<ªAC*.¢,hrbÐvÃrý©Cð_ÜÜoO/>Ã,Ãzö©£hhöUî:bhOZåaßbßaO|*>*bÄ:ä©äÐUÄßv,BC_vÖÖ£ä.~Ð~Ozb.>+uª î<:¢ªÄöZÖ/ßÄ£ðCa£|ð<~¢bðå@+~o ©OO:Av+ü+ðåhýbvÃC.+U@hhövUCoßÃ.:ü/Ã+äb<ã£ÃOý~/¢A©r,öuðß_bUrßhro©>/O|*åßbö@ªãöh*ãªB>ªZ>£ÐüC/öCobãÖ£_A*OAÄäAÜ¢ÃåU©ðßb©,öÄÖzåA/ UÃ:U~ßbîrzü:aîh£Äª aß:h/.:ßðÜÄCr,b~C~vÃ/_Ü|AãCaCh>ãßä£vß**AðÄ£bZÜ:*¢,Äß.bbß::Ö:O>ÖÄ<ßßý@|,Ð**üh||Uv+¢ß,b*©vo£Öðß.aý Co.@å*_ÜÃÐu/©öår>b|Ã+©Co_ßåß<îð*üß/.ßÐÃåÄ :zö/bvýb<ÐzÜßå<ä><+ÖªZ,Üz<ÄÄzrðÖ~ªå©äý+|Ö.ß|z~ã|*£O.*~ÐoîOh||vÖZß_OOýßa@BßýO>ã:Ä¢o+©a@.aåÐÖ©äßý>£>ÖÜ,£|@£©z@~|£bÄ.ð.åBvvhOzvb £Zß>@ýbà ýªãA*uå. bÃü:å~ª_U>£r Z:zaaÄbA©ýAbößbbîbUÜýr++r.uîüÖ~bC£z+Ä ro*Z.Ãð+ðÜ_< /,/ Bböß~>Obî,üüZ>©+~ãb/ÄÜÃ/ß>/*>/h£ÃzrZÜ>ª©oU>zü.¢ZåCÐ~za¢z,>aBbß|@¢*ÃAb£C£ý>@©*îÐoAaA~Uå*oßÃüªz,< ~ÄÜðÜv ßZrOüäAr/ö>ååuîZÐý@U*©@*ªarb£Cß,ÜÃrZAÄ+zÖ>@£ß@ªB©/bðvaüoÖä|ö©ö_zCCCOA¢va¢r<ähä_B.C.ubîCÖÐb_oh/¢ßör_©,/bbOAzb_Baåz<_|_ Ura*/üBBår|£îð åÃüA*Abªbr¢A£ä©åbv¢ü ©býBübhC<årB|/ß|@OZOªüoßö/Uuz>,Zöýr£üö,üî>|z/öb.äz|B ßÐÄåOo@ãðßý>îh|uo~~ß vB,ã+ý+ß*ýðZüov>ÖÜÜåCýÃ|ß_ß@OÄÄýzý@¢zbßOoa~ßbröüzÐ.ßßîuZ,ßAãO㣣Zöýü¢¢OÃüªÄB,î>ª~ãr:zîO,ÜUu .U ¢r +ÖªO,.éüª.Ð:+,,ª>_î~bar©*ÄoªÐ£©Oªo*ªÜüväAä|Ü+/hðA¢ãBzÖzÖ,@AÃ@bUöÐ|ãuAÜã_vb_r/.Zî~u~Cß~åäãªrvð~ ý¢¢bߪðîUßzßvrC ýuhBZÖ¢£ÐZuAÜ@<åoª|<©UÃC_¢_>ªÜß/üoߢ,b ¢h*@ßuÃbb Bvð* Ääîã|>oh:C C>ÄãÖü /*ÐUäO¢Ä >üu/O> +ðÐu/ê<ßãÄðäaaÖCö>ý~:aÐuão©oUÃo¢o*îAÐåÐÖv/A<Ãä >uB<©>Öîðýa~_öz|h_ZéBÄ+bÖUzaüv@ýßOðhuÐ.ðv/îöÄ>ªÄÖ,.ðboZuh©£ß_/+hB*CßoÜ..ß|åý@A U©>b|:öäUå/vßB¢+ßbÜä++ß|ýüaCz/UBÄî<äã:+ÃöZu+öö._uC uUzBð*ü*C¢©î¢©©:b,ABªuÐåBÐrßuboZrCAã,ß|@äBUbv,ªÄv>+oraÐa>/ýrhOhb:,Ã@£ßbuß@u>ü©¢ÄC>@ÐÃabO+A*üß*+ÃüOªäÃBb:/h ©ÜuAãßZb¢©.,:z>hªo_ZÖA|Üo_Oü:ü+Ää_UÄUßAvbr~CãÜîBý¢üîåO,>üaåuãbüBîãßäo/ÐÄhvu_//ö,¢Býßa<ã©hÐÐUîß/ýu>uaöbö_åUܪöãb_b>~Öbob/ýoÄ.Ä>ßzãUzöuö:~h:öÜÃuÄZ©rO.UÃîb.ÜaÜ @ß+/:ÜÃ_C Cbýª¢uzÖÜ/.Ð@ .bo*U_/ð©v¢¢| u/aÖ|åb*UbväCAu*îÜzbA,ª*Z~år,Ðüa£ü@ .©O¢ZbßbB+/.Ãz+ãz@zãß©<ýaãü@CUrh@åðUª©Öý|_vîo:>b*CÃh©©>ÖrO¢/bzüãOZîß+hU£Ö vZ.|ã_*îoý_b<ã+Ob.Azîv|.Ðä|ÃÃuåb, .u ¢*BBOhýZCßb/Obߪ/.ýÐaßüý£röB>©h/oä.böuÄh~C¢b>v@hb:öð.< ß+B:ýråß/©¢v ©Ö£uÃäoåOð>+ÃßAbÄua©@~ÃäÜÐöÃzr+äaO ÄUýa:*BüUvÄ._ã_<îu.+,vazU£ää¢åöÃßbC@Ð:OUÄCß@Ð_+¢A@£.üCö:UÃÖßð£ã@b~z/:ý@åUb:©+vrö@vvhî~ãC~ Ãð*vÜBãåBåÐß,ßä:~z|@|üuÐý£,Ī>ÐräCZª@ýv+ã>O uÄåUð~AO©bßî@vÜî'), ('r¢Ü+|ðîÄh©Äu|rÃÖªüa@/>+,©ößBa+ß©CCöîoîö aäî@öäuÄß>oð/¢bÄv+êhßÄÜäbC:Uß~ÄAÃ>|~ã/ßÐbv>räUC/ðåäb_u|aߢ,aoß@Ã@z.:O_bü¢U~Öü>*|Crä ÄU<.hß ÜBoBî©b hã.©Ü ÃZ|<ãä@|+@ÖÐýö.rîbzªäbå||£a/z@/abÃbÄ~:ÃðåB+O>äChCª||ðÜ£_ bö©Zrã@OaoU@OÃ|+Ar:_o/ßOö_ãBA|Zb@+_>a¢ÃUäý<Ãä¢öðaOî~rao¢h>*©ý.o:ärýßhb*,@u©oöCzzªðBã©Ää>uð*@ZaU/ãAß©¢hÜöß>bü ý©AObbbzzßh*>|uÄãC>üuzðZ£©:hoao©åouUz uöOC_U©zh~_Uý,_aC©ÖÖ_+¢ðoz¢<: *ý,@å|ßBÜê @åªðAÜhåb_>|Üä Uüuªrãßu|ã:>ýraåbouãÖ Uvä*~vß<ãÐAu|h|b,<Ä£Ab|vh©b£/,|a~îÄöÖäv_.BaÄ<Ö£ä ýÖÐhBzOÄ~rîroA/OA¢£.ª _uouöbäß+Ar :£ßä<ª_UO£* vb~@:hý/Щr@üå+CãÜßåaß~ß*ohbä*oîäßöå: *UbÖªÜ/zåªU.,,ß< /:ßOZýö|+@z£oð<£@/|ãvuß+bv_ß/üÖb,>>.©obvCOuvC£ÐÃÖÜåüU£bu£/CA/CC,ÖuU©/bü++ZÐbý_U,@äb©bßßÖ/ZÖUAAßýbß>å,bvÃß@~öðýuBOÄ>~b: ü,>uhzÐ *<ÐAob*ý:ª+å|räã/b£bz@Uðª>_>îãC,bOUz*ýßUÖaÄöÖCvÐO:ÜbÜîb/.å~ÖOzOOo£AýoÐß~,ªÖÐzßý¢BîAýOC£ðßÜãhbªu¢AZh¢bb,azA+ßÜÖC~åü£vZOýAýBO,î£>ß+hÄaÃ+_A@A©hÐãob£UvCöü ãZB£ýåýB£_~:£bCî@/¢Öv@äZoöhÖ£,+ä.ßäЪÐ_h@ðaªo,>ý_*ÐÃzub /ßUhÖ/huz£Ã_OÐ_ZßU>+v<Ö:/*£ßhbðßãýÄßr©Ðª¢Ahª:OäC©B>|+BüäÖßÃ.Ü*bUÐåÄOaÄBh>åÖU hýU>_hA|+.ÐAãb,üzãZüåå|<©Böa+b<*Ä_ªß/ðurAÃ+<üoo¢ÃorbB>@ö rä/ä/b ,©BßaaäÄý:>@äUhråZßbðÐ:|ð©Bou~Aü:Bã~b,ßZoz<ªAbüªaåÖ_£*/@zÖ*¢,Ã<.._bÜ,|C<<>î¢Uã@äÄzB©zv boå:ßbr>ürr:Üvbh:ßZ:u>ðð_h|îuýCBZß/zª/ßo£Aå>vÃ||/o¢äAßB_UüðÃ>ZvýbCOüãÐ@AaCßrª.£ä|ýB©*Öå/h>~Ðâªãðýîöß bC>ßu¢ßbÄvü©å@ð::/Äý>*üvÜ.Ö/h<ßövz/ýo__vªbß ÜAÖBð:@Ö©£>©ü Ä/>Äãð@Ð+rh|äÖªOaýoª~Ö/,o>ÐZCuåvvhzýb*B+,oBOZýßÐh>¢@>*ÖüýC_ Ou¢h åZÄ:¢B©åßr.©vBOÄýo¢~+Öð, aüßÖOo_öä.ÄbZ>,ü¢Äo zÄa+¢Obý|öh+ C¢häCªAåÄ.Ã<¢Ä£u¢ÐAÖbAZö/haB_,îv ÖOåvC>BC/~z îa.hä@Üü>uð£¢/ýª@C@£Ü/ÃOÄ>b_b©@>OBUßðÖhö©Ü/ýOü££*|îåBZ|îßU.+/UîßÄ/:@rrÃÜü|ýaaÃaÖä/r>Ü£.å@*üà Ü@/äªZÐ>C/håhî@z|åCu©@aA.bba~aäua/rb|h,.vvÐýbª£Öå|ü:ã:©U@,:|uÄîC~îåÄÃ<Ö.<Äü,Üaýß,zhaA,,_Öü@OÃãr_*¢.hÐöb.ß|ühaÜA©Zö:_u¢.ý*:Uß ªbuzð_~ãäĪÜvU:uðßÃüu<ªª+u£:îvö£B£AvOBU:ý£bÖð:*o@h_:C+,|¢Ä|zðuЪÜüêurAß_Uý|.ä©îå>öÜÄ<_Ðv:£<_ð_Öð:ýüÜÐð BÄîå+ßhÜb£/.ZöåZ/ü*Ö|_Z¢ÃU£öäÃhh|ª©a~£*: å.î>C:ü|Ã_ß,oÖ_.ZOhorî*>Zã©ZåÄܪî/Ãh,C~ß©+Oo Ö.äC~Zo_ßaZÐA:Äz._ãA:OÖu:b:v¢î*.z/ @ß~@ZhÐbu,CðbÃUbUA*îOZbãvbåîî©ä/~Cr<ßa_åÐC@ß*h+~+ãB+ö_ouÜÐvUUßo_@© ü>ÖUu<CÃz@b|>üvrÃãzåz|©C|Z>>ÖãüAa,baªA_ßBUh*ãbðo+bCßbð|b©îÃ~åACA|/ÜBîUª©z>ßb/ Z@+ hÃÄoüBãý*à öîbhBÜ,vãvC::>_C>£*¢Ou|î.z,<©Uðîî**ªÖð*_îv@baUv©.ü *abhÐ*hÄß,î~~ u_Coö+~zßÄîÃ<åobÐbÃî~åãr¢Uªu_oa©ðÐßÄo>:ªÖbr+UAäv_УãåÃÖ Äî@ÄÖ+Ö¢ÃuÜÖB:îuªBo_©:üª+*©ß>oßUý:ýUüÖã,Z|©avCobã.uß_r£Uöð*.Ãöh@/@Ü£:©väUÖUBßö Ur~üböýÄÜßÖZA,/Ã*/h|Ð*@¢Oo+_Üö|/a~BrBüb~/ßýãÄ+u:ßbå©©,ªî©üÜð|:ðßUzZ/zuª+,_Cð*©îßöîÐÄbåܪýO_COhAýåoª,BÜo~:@vhv©_ýbýü£ÄrÖ*_©:CÃ>rv@CArb@ÃOÖov_¢¢ z£_bro+v©,vã/zAåü aªh¢*ð_ZÜî|öuÐî h©ä:Z/Cr.büÐ,rªUuÖo¢ðãBîUaÐãb/zUA.AUUU.Ä@.äÄOöÜ*O©:ßÐÜã©~öuvÄvCýÐÄÄüo+ýý*:C>ü+Ðzu,£.ü>>U~*©ZAhaUzåü:UßOß©<:Z© ÃruîAz¢Ãauu:+ßÄÄüu/äOB,vb.rãÖ>br~U©:bCBâ¢äÐuß/+Cö@Uäßoªßüã¢CÜö@OaäChU©ãCÖu|U£AZüßÄßýß*ßBb©BZ<|ã©*|uðzUåZ©CB|~+hð|£zbh@+£bAb~~|£r+ååBß*£~ã@zÃvu>Ã@oÄßvÜ_ßO|äZoZÃC<îrÃ+._ßrr+aßuAãÄo|*zý.A.:/B<ª¢z@ð_..:ß+ußruåh~ýhobª©öö©_|ðü©ÖuA©*vBöª/U+rC>ßrhZå:ö _A£~üååã_ãÃ:~O__äöªbrOßÜbAUðÜÜUb/¢/£bv~aÖä|Ãb¢U+üa UÐî~üZðähZ*îbü¢,ÜåBßU*ª *ªCÄ/ÜäöÜ/a @A:+o,/Ä,ö@Ä/U<>åuBåC~U*or/+/,hªüzåÖ.Ä¢ãðîð,B.Zrz+b_*CrðÜCrüöbZaßîÖC+Äbo~Uüu©ãUÖðUbbz~vãCöüz>©åãªî|r©oã~ZîöCoüvöä:AÄauÃU¢îa.ÖÜ£ð*CªÜZbBÖ.<Ü.¢oÃh©A/b¢Oß,rz|Öh.ã>UAÖA+>£ß+vZ_/Z¢äßð¢U©z¢Ã~+ßÜ©aaoBÐ:ÄßZÄäZ/övzö+A¢ovª< Ã,zUã<ä~+ÖrUߣßb@uÜüU+*,£aÜo>Ð.ÃÜAb,|ªb,.ã|@BÃ|+ßCÖ+Ä+:aöãA£ÄÄb£ ><Ö|,<îo+_,ßßZö/, ,ýAý,~b/Ð|.ÃÃÜîrªrßß.¢ãu ßbOh_Brz,©£z@bO>öÖ*ÖÃä¢î¢ÃТ~îÜ'), (0x08757ECC341053DABF2569D352C8B231845DD236EF0EF8D319BDB26902F0047C0441746578A98F5C022B6B06EE2005B1319ED0CA132E5CFA7CABB3765DEAD7CE20ECCE11534CB8DACD7633C3A3F2E4F8B7013764203A68D5E57AE8CDF618FF18539CE50251F45EE4E5F5FC9DFB98568AC6BABF5CB273AEE683F82CD863EBE4B5771A70060CE2A6C3A2527F2A3DCBDA4C245E073B59A366E0EEFF7F59C88581F9104726E028507DE314FBB95FF383A9B71EDFB405E3A95BD3B48F180D634DFB1CD18519F5A4FA24D3E123265EE906ED6B55C73AE8D17C1567EC522B99387080C6009C8D6D69B31323BBE024BF82FDEAADA1ACB79C12124B556FB20952CF8B9B70A3605D4D787F01A2B4172DF15756E4EF687DF78BB8E3B3ED5138FEB6A9C0543044B31C229F9C3422AB15E7FBE559FD19CE1AE9519310B8BFAC70FC40814BF8F3C3FCACA439C14FCB49D4E0A2FCB807F73AE4E88FD7039C33FA5C762EA0F4A15F1DF437E8AD59DF0CCA1D07BF3016C3F36805059C62681CC06079AADD4B212B5432808507801F4AE104DCC5B9FBDD03E49882C69BEE04FDB4D8778834AE02C0A9F2B38CB090BC7249BB249886A362C48375C645C95A90662E82D12F09971532021B1BC748505253DC0F7CE0CA6C761075B304BEE8BCF74E614D5E2DBE8C69B2A5F1956B889B7C32237268B9DDB09BC10BC1B95592574A4523CD65FBF224944FA5), (0xD70B88DA36D29A75543D70B1B19C21FDD2131F4DA64F47BA35813FFEDE19131275C2EA0039DF1FBFBDD4F1E65CB4495502977C92AAED3287C4CDA4B5929C973B295D3CEFB221C4F2F46090D15E615E8137E9FB469C8168878F623C6C3B692C213DB6BCFE775AA2E1D28A9D4A5D6028626E227DA9A0509EA8), (0x50E558B78A336F94A8A56009DD46197412E41D292F3AD9FD19EB8380EC171308C2FB52FC7AD21217EECB80BD0D18A06286DC8CC3D88B2F150B5A9E9EAFEEA890915847E1F31DF93FD1063A63B91CF0004B21FA108A503036CB3CF1203473670023EF2CB5D1BF6E69E34DF1D151CC5CEF6A9D538EF4970541271016B62CD80A5E9F3A3FC9F03A2E8BB2902C3D5E5EE5FEE001B69720D90B8BE9EA8DC1A9B73C0A429332178D92FF2F6FC7DB636AC8E3C92A17D62A22733DC52EB3DF05AD6DE2FB5422FACA2CCE714E02862858FDA8202107C49691E112E7CF556CE9D9B2FA8202E4E00F48CE189D5CA587289C4BE5C88692BEFDE8D65019423B2A74BFE5979B070326731D98D853EE273AEC59E94B8470A46247F4FC9A2B94C6CD0CA3A4DD770DEC20982572ABEDB96B0EC19C64C058F0A6041B8250A70B69FADF57CBCBB04A49C2DE6DC8B25FFDF9758D89EED88F2F05741CFC9FC2F5BC44152F2A925421EEBBC378D985538F3E4706210CC31E1D916BAF5157AFB3AA86CC2228B382346BA5549FCD2A60B5AAB2E4DEB599A0E9F926F89EBFE302CA3E0718F10D632BDCBB139B7CB82450F231B5059F72D0FD11E6E32802BAE47487A28960C6116EA846870723A2FE2331D5D5056C0ADD63586E09070A293A2821D69E13DA2EC38AE1C20DBF176AAD5B12C2B2532CB5776AA93E31F1BC09637E0B5EE64C03EA4902114B24AAFC1E4BEDC1AEF44877E7FC6C5E34699BFCD2CED75E8FB3B98460582878AF42E190CD6D8BF344300E151B06246179EECE81AE053E7D4D4C6C6B92696155CCCFC8A41BDC91C6DEA8B8A1C0C143898F570A7289A7CAA903634280002061DACFB8484C3E7F469D5C08A2064D9DBD8B09E3DB3A5EEECC25041EA1B79910C5BE47DED20778F64A0F116C168004C45C66A6B6771C44277BE0EB23471FDE8E044B42E4BE6ECAB5131298CB28F2D84B203FC23B11E299A8791F62F11C55AF2B318268CA3E2005ED9BF1A3658378FE8907A003075CA27D21B29A6A9F0CD898BE626D99A5890E0D003AD49F1F3F33240121D8E97B51A8CF8E054717A3B666E1C358E50216DE5800F99203CD87035EE27E75697D33EE1D6CBA9E0AA042F66949D3F3DCC759300D22C8D8F0E94EDA478BA664982E4DE9ADD43B794878D4B7BE0329B9FA942796884E6746B45BFE331DE0567FF9DD5D3BFCE946088BE0E8954E1119ECBF95E0B26410DC4AC6063451D5075B682154BEE1A6EDBC104E1F0BA765D2F8A34111738700A41BE9001275F5B5F43284848073F9523846D2D8CF64440434E4F30E9110C393D3687D39D4E09378C65B59EC8622E55FFE5008CBA1AF3040D6E4CB2D82E723E46EF0B118F5C07E58B35A11740A577D11FF93104007F8F124373D62EF1465F6DF37757E9671CD6A3DD2B017479DBC357E66BA2EEED7E2DD75FE8CE0B85E8E444D64323C94D9E79F3129D26E56E0AA867B07E3885A37070854980897E5ECB2DE436CCAE36B7FA1A57F1AFCC504738694540664B07B06E9165C29E7FCD14FBA4477F32BEA16C71AFC663E093F3B4203E0117343DE8801633D82B4864197A4D42F5FB74D11489B7E8CEB68493CFCAADA1A2606EA5D0CDBBC7590EE686240D864C26AD9DF83F4F29876F5B6F31FB82640D8D96C1B90BA762284FAD8815A331B4C130387D222CA5625346E746756E89CBC69AD9089D4BDD308F3B75B891C713E42D96AE01B31531D0D8246E722450ECC9C5D1B17ACA3927755307FDF6B6FCD08C230318EEC08808B158F82068DD6B1C2E4EABF2B0159919F47F28AEBB274B19EB53D24F11480E094DC8F021C208CE97F7EBDFB80AFA107699E9146F97D94D9A1DDE3514FB1BFAD630A2B4E7157747EBA080A6DF57831EE1336BA538239E61647B6603E3C3A99CDBF0F9776845295122A138CF07327E328ACF43E19F76C2B29231406BBF63541806F3CAEE5E0BA6AC0A0A8286FADF6A320D2389148FC80D652E46E52704BDA1BF4D10B813679FD47F28A7E784E43BB7B2D71E6E8BDA4F983EE655B017267F974C58C349EA1746CA6D4F09FBD7E07880F28F225FE65F25D50D78892D01EFCD58A9109B3C10F1DD9B9054013CD043C04E7DD4CD980), (null), ('00000000-0000-0000-0000-000000000000'), ('2001-01-01 00:00:01.000'), ('2079-06-06 23:59:00'), ('11/19/2008 4:39:16 PMThe quick brown fox jumps over the lazy dog0123456789,.;:?[]{}()-+*\%^=~!@#_|/0111/19/2008 4:39:16 PMThe quick brown fox jumps over the lazy dog0123456789,.;:?[]{}()-+*\%^=~!@#_|/01'))"; - break; - - case 14: - $query = "INSERT INTO [$tableName] ([c1_int], [c2_tinyint], [c3_smallint], [c4_bigint], [c5_bit], [c6_float], [c7_real], [c8_decimal], [c9_numeric], [c10_money], [c11_smallmoney], [c12_char], [c13_varchar], [c14_varchar_max], [c15_nchar], [c16_nvarchar], [c17_nvarchar_max], [c18_text], [c19_ntext], [c20_binary], [c21_varbinary], [c22_varbinary_max], [c23_image], [c24_uniqueidentifier], [c25_datetime], [c26_smalldatetime], [c28_xml]) VALUES ((844364759), (null), (20280), (-1662199111), (null), (-1.79E+308), (3.4E+38), (0.5650), (0.8713), (0.9650), (214748.3647), ('ÃÖÄZBvbOr@ü/î*ãzZ/aÜB.U>ÃoîßAZ:Ã,Bîa|ß@Aðýå©r,Z<üîß|©ý¢äãÖ,aZÃöo/©Bb~ãÖ>ðüãC@~Zzä/äC:åa.:boß.>ÐuAÐu@ZUîho £Ãh@ v:boäããÃ_£Ã~@©öb.uªbß*ÖAª_ÐöCUzvöÄî *å,rA©å~©+:uUu:@/_îÄb_ Bå|z .¢ßÖªÖb*uåÜ©å/öovÐåaäÐ@Oý¢Zß_Zz:+_ob_Ī>oCz_ÖUߢªoãoÃZ<ÃB¢ÜýöOAAÃ:Ä~Ãvz© ÖhvAÃßî/ß*ÖBÐhbÐßå|Ī¢,î@.|a<:äU/B*ýã©ýO£uÃßZðüz£äî+ÖöÄCÐ+@Zvîö*>>©£ßBåCå+b,ö~¢~:v+ª_<>>+uv|ýß>+äzOoÖðãa_ ßaaov~'), ('O:*hªUã hÖߢÖýh¢bACÄuäðOð@zÖBbðÐ|ãzî@O~îîªÄUÐÃbAå_O_ÄÃÐ _orbðbUbßbbð©uBî/rߢh©:UåCOäÄüª£rÃO/brßÃäÐððUüv>Uܪ ðuCªv@ýüß>£aîz¢©:ý¢/z©ßÄ*Ovðäêð*vÐý~~O_uäå*bðAð*~AvooaU.,vBUbBCåУ¢~£båßbu:Ü/¢.h*~v£*ÖrU<|O bZoÖÜ:*v, Ã@o:bð|<üÜãöî<ã<_ü:,Cbî|ÐßbÃaýZoÖaåÖ<å©vÃa~.bª,,ÜÄbð*Ößvhåo,,ß_ªðßö>bãZvbªzBhC@Cåîßä|å~v©åzö.ÜãÖ:ÃCA*A>ðÖߣ*<@/ÖîOÜoß/@v_v:ýohzoÄ~ü,uîÖ<.åCÜuußo:|bUaÃöaoä>B|>Öª<>¢î_b@ý.ZÖð ÖAz:z_ªBbhA¢üu*.©îîC@ZÐ~å¢.AbßÄöaÃ'), (' '), (null), (N'o@.*ªv~ßO~Ö+ãßß:zÐ|©C~bU.b¢vß@Ub£öüýå+ü¢A~ä:b*Cuåö@/b~ã|Ãßã/©ü|ªZCýÜî||©o~rßî*/ýßãßUßZ¢ßoOÃ/A|Ü_@O<ü¢BÄbãåU£ßªª *ä¢ßo ßa>OªÄåh¢~ß©zÄå<*ÃhÐ,öAüý_~+BOðü+r,:::öÃ/ðãü_ObC@b:£ãZB .aîuh@ÃÃ,CãUÄîr©ývöZ_<ðv/åéÜýaär|bäªÐ|îuo~.*ß,ªãÜ©|*ßÜðb¢ÜUßAî,CüAhä bvÄAb,î@î¢Ä,ä Ü,A|ÐoÖÐrîb©/£*Ö|B ,öãoÄu>äu Zö~r¢,BuUÜ|*a hªöCîaö¢b:,ðUz*uz@.å¢CBUAü£*ã_ã~ãß~ª_Ð ,©äCßÃoßäaöUý/ ßä<ßbߣÃC~Bã¢,üÜî*hö:ßh.zh£ãößBÄbî@.ÖbÜ*¢Ü@ß@£.Uå@hå~ãoz/>åð>Aö Uv @|O+ãrª+bAÖbO:Ä*,åuBC.,/£îðaªãr|vzîÃÃhzÃý:bZÃ.Ã<Ü©_/AouBoÖÄövªÜUãOßå|A©v|_C£ CÖur:UðZÖ_BBß@ö.*/+Ãã:>ªßðÐýZåÐß+äöb£ÐÜÖ>ÐãrCÐü>£v¢+_>ðaåbA_A<öð¢¢aãå+ãäAouv/©+ ~Z,Ää+UäðörªÄUÐAÜð~<ÄhªZ.Ö*,v©|u©ÄöÖBUbU+hîöoUoß.r>@båª/©CzBaäªv+ýðýZýö_ã B|U£Coª_ýbobhÜC@býðüU@_£|o o>.vü©ÐÜArAýh>:å_B ãhåÜðüªåB~a~Böã/b|ßr+.ýbzAýß<Ü£a_u OZÄ>z*ߢraªöAZb.zÐîü/hß<åüß, öab䢩h b<ã|ßßbÃBü>/* Z£UåA_bCA|å@vbA|äv©Ö<ß*U/ £Zo:£üUaßCÜuhß©£Ö/.:Ã_ÃãÖ<üßbÐoîßü|îîvvvîߢCäBßbîßý¢B~ ÄOa*,o Ð>üðäÃO@>O.vßbC+CßÜ|åuÐ_ßr¢äÐîðäB~bhhðuhå+zßrßÜZ~ßî_¢ª/@Ö/C©b ߪU_OrýýuO~£Ã>îð ý/*vîý,U>o@,Äß|B_|Ä|©£~ZªªÐüýððªßChUÃbåªäzÃb:~>*a_hðr+©*ãb£zv/v|uî|~à ,<©BÄ*ü@ßaB+ö/ßý.::Ü,¢.~ .ACã_Að©Ãh©vC£z, U£uî<ãÜu>ChîöÜbBÖZ ãÃvýOÃvZCÐzßo,b+Ü+/ör*ªbðÜÖÐ+¢o*+ý_£ý£Aru_£bub,ð@ð>~ö.oã.+h uÄ£ÃCäªßUäö*.AAäA~Ü~£vâoîUîß©>ä£/~Ðoª/ZÐÐܪCZbðhýýî~rr/¢*ý+@:Zr<ÄÄ<¢vÜßööî© /<Ð~bª @ªZ:uoCߪbÖv:|C,~~zäuOö¢z@BOåvÜ:äüÃå/vU:oýråO¢uÜzBoýÖÐC ££oÃböî*Zz.<åUöz äÄuýb:Ãz äßBßÃCã+ußC_.ubãªärÐîboã©îAå ~O<,ÐbCU>¢z£>ahrÜ/AТªU _uä>A£*+ä<ªÖ.©,ð©>bvÃr@¢ßv,zZ_ã,C>Ã:ªå<îv.<Ðö~îðBBbC@ý£ ÄuÃÜvbbz¢r¢ðýözßAOýZÐß©u*B¢rðªz_Üö~ÃðZ+@b.u¢@o<ÖßãÐZã,/ r,:åzüä£ßßr.au¢ObvÜ<ªvã ¢ä+båaÃ,@U<_ßÜßb~hoýãhO£@öaÃ@.ÐÄ ßð.aýAzUrB©+vOou+_U.höÄoC~ß~ßA|ü>:Ãä,A~BãУb@ZvÖãzß öo|,Z££ã bÖ*åÃ_ß,/v@£ßð Äß~|ªbBhýbvßu©|éÃOÖv:bÜCß/åßuÄbÜo>_öîUA|ðrB,~Ö/öü.bî/ÄÖCöî>ЩOvobýðC|Zßh¢O>Ãzý ZUª| ý+*ßÐ/ýaÖzåÐöðzªßz+âðZUrbßü|uv*å<:©Ö£bÖÖýý<å@Bhr*UĪÖvý*Ü¢ý:OuÐC<£>>Ð|ÖUBa~ãv*ª@, +v|Öhu< üAbZ~Öv*,媢:Ü><>Щob/Aß*:Zzäüz.CCîßãßbßüÄüüa+u¢ä¢~+åäýÜÃÐzuãßvßÖ.C:ååÜßOrý:Z_ßýU©/U,ð_UhCCB<ãýh:orªUÖÐýäßr©å_>oð ýO,a/ßäå ÖÖ©z uãýC*rÖ<ð/,~Ðä+ªªüooäßÖ/Ð+Ð+/ýUO>ä:A_,ßÐ~@UöªãBa>ÄhÜ>o<,b|,ü<,AðrrBä.*buo/|*|ßßåvÐäÄã:à ,böüaãvrÃÐ@zBÐ@Ö<+,BuzO+äUb.hAhÃbðã¢ÐvrÃU>o@©ouýåýÖuÜ|Ãzåuv~Oz*£ªãUOîåAuoÄãÄo©ÃÄAB_oZðð>u_Ö@ý¢>ðo>îãîbBýö_bbÄýhu@__BÜr+ÃðÖö+h@u_rð|©Öäßýý_rÐääÜU,@ý:b.oöhuîoBÐã/ @äß.<<©Ð|BUý¢ßbüÄü¢@Ü:ÜÖª_@ö£åvÃÖ.*ýüßðbzÄ> ðü>.ãO,Öuî_bbbßööÄbÃß_Uu:býåb|ubü:ã£ACC<<@:ãäzîðýüC~£ß@+ÐZöÖO>Ä©Ã>B¢roî㪪rzb,*oobåb:¢.hö:ðÖo*Zýßßo+uZÐãbZüA¢rz öß~Cª¢ubböÃÐUo©vzu>Zuüöå baO£+>Ðo~ß+Öo+O~Bzvªa~ðªÄÄ.ÄABüãÄß_¢b.Ã/ö|£ z>oãzÃh©©Z Uzß|@buÄðß ¢£ð/ãåZÄCu<,îîß+Ða ýð£azAß*rüã@££,+BOBîåUübZÖðî©Ð©<Ã~ã.ý£ª,a_bÖZÄßÖ@@Är£C/Öü~Ð|CðÃ_ÐãÃOräaÖää+b<Ã~Ö/ |zo©.¢ãuýCÐC|/ªbaü:/ÖÃ@Ãö£åäUä.ßbbUO,b/b*ýäåAÐzð//©¢Za|äß:ÄÖÖüüCÄöAb@++ð*©z,AÐOBÃãÐaÜÄBîðßboß>.ß_oðð/üüßbÐ~ãbÃÄb/|@>u,A<êhà uCäU@ãåßv©ÄåîübCvßUBüÄvýð~hC/ußãv>ߪÐ~|ããvOåߢz/ü*/ßå~*>ää ðÃÖ+bãåª,o:,©v,UÄ_+rZvÄobÜAü©h Öäv¢oBåhbðAîv@üÜ@<*£ü<©A£ý~zvßîðUßÃ_.£Uhß. Zv+/£Ca@< >+vOuüo@~åUaB£:ß/+åUrß|o,ÖZ_öOUZ/~Ö:/*O©b¢U_BvOÄýãã¢Uh©ßBÜ:â|,¢ö|>îý+bOuo|~AbC~~|C>~©O:B£ |Äü:bãîhéßý:ª<.b~BÜA©äBb:îAv,bß b@:UÃ>ÐCð/ðÜ|£îCvBåaäzîäå,ªöäåz¢ý©.bao,b*©BUö >ßaîaZoß<Тª+zîßUbCzßîUßCBÄߣrr©î|åÜðöäA:Or©:.ßBO_.AC£@ª~rßî|*ov@öÃß.CäjklãªÄ|*Ãz¢¢Cßo_vAZrÐoöÄý©b©CäbßîîAãBªðÄA<+./ßCðhhU~Ð~Ü.ãýzö~/©z<:C+Oîb*_+ý/ßBZr_C_üª:b CªýCZýh~ßbðü©ÖÖUBîb+ª ¢ÖÄC,:îÄÃA.Üv|îöb|U,£ÐOz@ß+zåÄ.ÃÄßýU.O~ÃÃB*å|å~>oZýöªvAaîßz_ZBå.ýaö¢++¢ÄÃ:oU|ÄZ£rÃCÄ@¢îå:ZÖoü+ aUzo_/ߢh©vvhBß'), ('© ªüoå+BbOb¢:Ö hoýv_Ðr,býbv+ÜÜ£ã_£zAÐbB.ß/+ª_>r@ðaößr£Ü:ö_ýC¢ý v_Ubß/Z,BîãÖZßß@<ãÖ/Ößã£îääBObüßßCBbZ/.b£ªäî*î>¢oA>vå_|:êoö~OuAðböOÄÄuA/©ßhüöZa+uöo|ÄîU_£,©v:<:,ßüzö ð/ß:ãrÖ.<Ð o~+UbhO£*BåCr ÖovÄäBUÃäa.©zÖ B_bÐÃ, .r>åÃr©BbC.ãußß :.C,AÄb:äîaý '), (null), (0xC29E82197DEC94CE552155C089AA21684D34BC1CF1BBDDCA0DEFE4FF4511ABBFD7ECC6A53924BB859B4F53B92DCC8C50B5BB91CD719E0307C1B80B8E089488437696E89CE37B2F28793780A267249C4062934A897FDE4D39E9BFE481182C7C07C6104396E4EF6C398C69543A1D60A09D1BCB2B754AFFC39749AFB22496AE0F4CBA78DC57E0065C732610FD168A131B891E47654D0107BDC74CAB4D343D48A2DD59077FA48448BC156FB84E3901AC0C369329054F48C24AB3BB150A34B82736DE6E1FBD82937604D58B50DD49B883C5A09F17A11342539596BDCCE86E3D875C48826FCBE1EF8AA21C242FC3F7E401FA384F6A95A085229C1A8A26C5C78D969804F495C748B8E3B1147484EE128F9DB2BCD1B01FD3F1BBC25FD3B056C8C4DB8E8E97BF034E3AB17F6BB9802B0033898BED7409F5DD76C41238D36774078DE85099F6607ACF9A63812030B319708FC12C4A256954BBE6B117D2ADCA7BD33C78DED030920AD30EBB521087D5ACC3ABA2A9123A2AE1239494B34448A722CFE8AEE3B8D4483FFDB6593B6A164334100554270B2169981296BB3C9CDFC68A66988328D8F2F4EF6262AB5BE1EE770C515FA23FF48017AE7E16D021180CA31EF0CED4D1931A5C1E1064C5A8750DB6231FAFEA3C3C8695E680D5A9C121D2D655BF8D6B121AA5783703832E8FBA6F387160AD02692266E16939ED50BE709AFD3E8E6FE9E8A2), (0x36B339B858052C119C386074D06C3359AC02D92C54BAC66886F0014A8550CFBDA489336F2C291033C13F213739886E213C903B9FCADC247BECD0316804E18B4C69A3D04639C42C83F1A66B15988F2EFD81DF0EF5142FF2C764B7825BF7A72FE0B3D4CE96B827E87863B8AE23710FE25DA234E624D396383AB008E28141D08B49778A62C3C198445AF795915B81CF5655D425B9C3C10A0D1C9C93E5B0446736922C64ACE6AC1E9B09EF8C2D3D04DCB9E1), (0xAC1B17C8886C7D45272DB394158F5EFF2E1C2270A8B589B0D334DCD018BFDA03FFB8BA1B7B63DB406867F76E555A769DDE05AE9CBF40E4F69167F4548FAD2D6752B0945DD44383CA40E20741BE1A5A79BD3FF112113E43BED3C489146F87B0BB3A8F1CA5C619C89A82E35BDD39A337770D7B9650BB1A56146CD68910BA6F5BB9314C062EFEB4B3A47657902DE26685308C1207F3F160FF20390839EF8FB8E01387A2ABEC9C097858C8F1D96489283106505883A86768C7D14CE6F4F57BC315BE777DA63FBA98948399AE2AFF869B9611D6329E363437AB1FDADA9FB51483DD05DC1AEC0C82F14CB7C4000EB93EC74BB150E31E4824DE8A3FD28664E0F9DE6E16D025236BAF8A8FE4E6E6713429F1E1138FEE65316494E0FD90AD39FB8D6CBEE592F8E818A4DF02C55339623D6C5616E0A551510B793CB23C4425DB015094577A288CA23108C86EAFEB9FDD2A32A3913A9659553B1AB26C5545ACD47F040075BFE2E815E0B4E4D7DDE3A11FD95F8809A194A06BF73E1C5F751F4CEB5CF3EFABEB2A1E474A8DB086B1817858799393F6BDA233EA63957D81C6889FC067F97BE9F3F534AE4040BF13E31AB976C5C3E5E28C562DB9BF044856AD9C81C1EEF01FB8058F64835EE4B57DE2200748DC07BB02A3BD3310CBC229EFADDE01A4BEFE25F2FB0071365E6283A8A1B0D69FFCFF7AA6E17E1E30BC0EED436575D680E310BEE4FB144DDB9685A4403A8B6E1AEB8AF2AE645BC33FE0F436EC132DD0E88C02C590F1F2A4E7B29E0F5BDADDF630A0D258DB83271C874D7E0306DE60C868B4BBB437C6DD28F8E50AFBC54B676503FE054C40D5F56564E53D4373EF9D0951D6A7A71F28BE69C2A95FF5782C573CE6190008D8148792BE555051899AB5094700AAEFA3C045DA3F9B8A967600EC388E015C59EF95313D4E15E8C9D86DE027F456AD7881679826D325C93C89F01CBE6818C2883E5C19B2CF6CA08ED77C02D1BB62A21F5274B626693585C9CCF4B35EF82960C0AA58E9983CFBA814C7094F5723F781274EFC6CF4619B1F08D650E5DAB94295AD1B412762780AE357CCA15F5FE62DA5D5738B0FFCBD6C5E0E39E1C1EC15CD5B8573A13CE1CF1EAE44191427C03CBF21A9AA10662D3299F0AEE318299748F741FE45D9EB45F1C30555DCCBE3A8449DD179BF184105662E53DAB18DFEB6F417FB21D3297A63D4DBB8E60A115066B6476A4547AFD730B53C971786119463C54F61C5D0C1D51B236EA5E3605AFB55DDEC246923B96F443FCA6C979162DCC3475421BBAF8B96F4714F22D80AF4D05B40423A9AEC2B400CDF1C8605553E89C092E29C0B3940A552552FF7D397963A4BFA11564F2841D61C1315DB9304919F33C561462757C421009CE845BC336C7548E13B0B44E73A97500B80F72464124DC390C40E355013F335EF56B340FC19E8A7A093B1C9865B4B8BCAF61BD7CDFD9B899A812C6F5E40F8CE47D55491865753F2975083D160833D3578826A59F71C68F1BA29A57AED7948609AE281B006B90472A2293F7C79CA281644F6F6DBD59ED72B6D63D75DB1D9041D0823367E028C2FBE7DF7B6CDDCEC77EF008F36F6836D8AFC0B5642A2E2A7C1C92521745693AA14B7C7375DDDE7094E81EBE75C22A30D9A9A983A72AC498CDCD636EDA8BA77215C557A7E2F4B0FAD140207C1B7FA4B9F261787D9BD5938686D3B5A87A6FA619409CA8B07A724DD4E8BEA2570A488D5E28B97C690339E63031D1210F4F188061AA073B7ED6F44F70139384DD233C7C3E46578FC0F33D0606B6688E99514E95D03E40ACF31D1E773479FC456FB5090CF554E2B8E798CF7E7D0124C86E75A62ED50DB4AEE29F891137E04B56F6E79651AD6B89446E95AE377ED23FE1E85618CEC3DD7061F06A2A55CBD181074D7877856AD32B02EC51C04F5F7D30106F9738D1C78C8329673451433133788D14A6FA065AAA87153B15E2720D3102832A09F634A8AF3FC0E54E1E2681E7C1A8D9333AB88339B5B51013A6B1AA011C3631CE19373D43E4656739111C9C508353443998DA065A0FE054412484F88E16E421E7F4B3CE9A7B954EC5414A28A928BF90536D6068422FD7CE28D2FC2F6F7CD9122CEAA45BCF84A9CE038B4108B5C7AB1864E4A510B67BEFB81CF595B77F65DF486837FBCE7453C0CEC3A264C6EECF086127D3BA7AD7C86BB10AFC4ED9EEF25EADABF8A08DCBECA40123D65D041718D95DED348F9BAB5470AFCC4AB38814E6DFC153C71AE62E8A954B3FA957016B57A9E212F0ECBA62B2F2478800B181292BFC3CF68BB0500DE32F629F446C020D7F347490D165240A256E90D4C36E2DC9141213BD1A0ADFA759D43FC17A1B1E56E04A08CC4CE057B6C832D11D1F8B3A8501998B324844F36454DD46FD3562800A5049E48955618C23BA5CE4E739B287DEA9BACFD08FDC0EAB5694677F995A8165A2C6CCD596B12FA01D5777EB500C3A924578537A92AF7A743B3932B0FA1C9A5FDB8F3462F5B237E88B2FC33854234B4A69C52A210706D3034C489A6D8E6EA5F0CD281FD0D7C7AC83407AFF72DC422017EDE85724F26958C4BC3126BD17CA5A1C79D26B3C037A62922896D09C175026FA28827F9617810E53CF5B24A6A0EF7B7610D2F8F9E6E4146385C4FC5B98BCAD5C1A2C94954AC404F8D4076CB855CBE1392B6A8B34672D13347E0C105284A2CB12ADC89C745AD62B5CDDF025DF876C1DB9D3B3202E3178E4ED1950274EA3B274214C5A0A8D3F7CDE553F2E6666F743AD11FE567EC1829CD134E3AF6AFABEECA92B8BF4833D51908A66D4DAFF03027DE5D5B315404D33A2AEAF78D5A98001E39642854AEB02B07FB06DDC07ECB7ADDE2265B99547999C6BE7D955E3B48BE6FA54F134AC8DC792E3153354E2612BC5E701AAA333D67C9BFCB6295301ACDCBB3476E1B2EB72F1506AD2D6701444B9FABC136ED219D8B323D86537F6646481464878206B8F78DA74005A4850F00C87B7FC2EA6FE3DFAA15BB3CDDA864B0AEBF65190279C144E6B4348FAC1CF905223DBDD7FFA35CD93085DD6D4B7B19E5439056E520F6FD4FBA3ADB353B54328D1BB5199FEA8CB00B628CE87D9B54F96B9A4E4C1CC614E52B406E1DC4C7279DDC524F5195627AFAB6DF4A83940D80B36641709BEC0716C707D0EE5F7B6FEB433BEE0C2A4C0264092054953C7C91511EBFBBB783568BB1D43C884AC4731A7F47F40648A501556663DD677B9871D94B767FCF9FBFB768ECAF3C37EDC4B89F9505D44E487549AB1C6A5454A6EF101963633DD345A47ABF8F8B199869C968A2AB3DD275C32391D52DD3B3356A63C1FD9E23D48A86E45AF18A15BEBC5BB0425201B2A9691C9B5640D167A671F045542CCA1BFA46F5DD1BC6E3E1EAAE64D4797C916033B8BA58E102CD94B81F3EE80045C091F240B5FB5D2396E2863AB1A7DBFDED29DF90119C72713AF7796125FC88FAE1A4EDD2E239C696021021D7D2A65125B8BB3214096F34241F8105BE82FCFE9A5A8B590DBA081BB362498D017A9A9E94A653A86ACA74F17270C9B2603408130611877D464D446BB09F7EB1BFE133AA85E271172F5393D0E69AE79CF055BA7F593686EFF21C574662E8F7CA4BC231903C1F2D7EC2F1E4B37EB797AC66A77A5AE5FE57885A44B7698A2AB5465BC98423685660D1283BBC6852D3713B85ABE0BA6D9DE54C6AA836F867C3F4983B9D57B53373440F47A932A942EE3686D27CE3DE49FAD9BEE337B8BF2067696447242DB47CBB071167D073C46A3C0A7C72AF25EBDF154E41C498D1FCBA84EFDF40CD621DC181091674D27779861553A72C3C4D70417D8431D6ECF0E4EA0B56E2E193839DD9EDBAF0A50E760D9DD5BAAF442ACF7E377F9EC2483047D591252C697B9597F391B6CD3F815CCA32077793013241A0BF3BD8AA61F5C055A8A6E55F80E20D91083DC61D8E5C90FCDBB46BBBD19C45A350846C2DA3EA36FDD06024999CFD4950F9E58BC36B231263ABDBCFAC8905840B60410FFC75DFED1D06C94D2D37F760DE6B1BC1EB1182382C720982C81B8974CBDC18395AEE4DDB1AF76DBCA1D5E52BB37AF1416E4398FADD09E2896C5D25027D5582501FBE05F01D40A7F3A4C596578DDDCE4D29470587431E5B500BC36FBDD26A3F4C53940CF57501232E9CA55518738BFC8E8ED7D8354FFA0C0062B4E45AD1E92039854903F8D1D8D82823D7EA9EC842DD80C6E02EFB9209FD58880B93C01DC95DB2841C93298704BCB5FEAF1178106D3820D76393F0BA25A77C4CAA70C545180B5A79371AACAFB4F9C22479FCE2F784481AD372E8B9366DF85E7417DCDC94F670E6A4B7FED8538B71226AD0CC4129C584C76255F2D32F51230C3FBB3798D81C2E2D09163D40866FC64701C64F65A0B634AF92147A3E049CB65293F1999754D84A4DA29E3813874341F28EAAD16902BE6B88868705C3A2EF296C60EBAC95D62FF3287C01C2027E21284FD387AF5ACB4D50D5851010CCD387ABB375CCB39B97AB1C5FB6A8EC00FB690A655FB6EF1A3FCEA0129BD60FC61E2755F5560F8CB26E8CB7276B50A322604FD91B05AB6D1D979073A62BA000C09C55408F53F7A9ECDC58F6D2FEC7AFEF2B7EB24BFCF3C073B9375DC69BE686CE8CF68B150F13CE68A5ED3FADB59B1ED0E0847BADEDB4C4A895CDD61C9AE350F6D12745073B9ADF18AF49A50FB413BD1E188DE5176BD9E0D732E37F413DB2CEC29C48DB8D55169446A463FDA40EB5F3810FB7030DFE398BF8466DD5581A9EDAFC7BE3726C382FC801F89F7208DB3CC97DF0FE3185AFC1C362BCE246E7413C2B068800282B428649E0EE01145FC6831C0AA458681C6C544DBA1F0FB055E8E1C0BB736C7FDA139D3A69B45196ADAC649C38C53C42E8D40F9A33B36E0B33D6F3F70D4059EC590442F7071DFE671ABE9F0DBB73778FAC9ED7E763D24C27A4920792C15A886C5378423483453BCAD5A87F7513604FBF5F644A6F68718887B71A5274166CA6C03533BA4330420C67620D11BB53D713444247325D0F1904E1EFBA7C68F3C7B46801BF3FE0A60C8E1D57E30D5B60CC34E0060E32CF3A49B11C2FD95375C5A3749B59A8B99497339E35B815052B0BA88023869C61E495E52EB80D23B1CCB91957B46F7202B7129F49D370FC1625448510865830EF29418F06747901867482D17C9FBD50BB99A5C810E7528E7498CE097488122A7389292E73E06B8E3E1119D5509E7F7767F3CA76E08F1F08D6B21A6DA5708CFD61575DF3758FDCDA2D178AFECD7D3ED61957A180BE9C49E3692157C1C6FEE8CD841B73F8418C01D817EF48C905213A597444544ECF0C3FC50E798A53371B142F2EBD79B10A45958C55C869CF5380DE47E7FE4C82AA9AFE78DCAEEAC701ADA1FBDA199A47A7894E2EAFC7F806A270718E9A426C39CE928494BF00D55C5ACD8AA7276DF43AE5979F5EAF1DD2E3A1F7D56B3C5C2CBF41672D47940688A7B3F2D4E13C50DE357B37A803A20E8AB0BFA1F2C72A691FFEA0CB66BF40ADA5DE0EF8AABC49F1A65118A0F005B3281C32DD7C88F314C17C49D2D54070E91FF4CE91CAF5AA63CD66CEFAA0AE8A791A4A77AF34E2C324B1C94D7C60E974B13667F9AC2273E93372CE1016BAF97412F2D0B88BC8C1B53D30A9E000A82D02E3F21DC338B5DD57A760443D65D1AD6AB7553A8A9031E8E874B2BC7B7892E98B44CB2C239D353B5D1479102A8484506B823F28AB6DA372B109344F86F862DE1477B9F899A48ACD8219DC761721BE64EF6151F8396A3D1DA0597B1A68E6B464B19AFBB2CB8BB6C6F871A691912D5A904AD05F24A76AA5AA399B583F2970649B6577C47D250B9964AA8AFFC7C3AC8C73FEEBCF98868FBD47F450782F33779D880D0A2C1969DD6A3E37FB7A1C6ADEE68D0FE4413EA0CC15D5BA7C88D493693033ED77B9B980730A208090608A15A0DD156AEB1F4E355EE741F5565EEC5495ABCDCB462FF3242D0C9CDA20BD106B8ABF199E736AA74AE1FD8E8F78C329141DCCEBE493BFCF71EAF13CDF837315A1D7D56A97444EE12A0483E948A063AB69E288BD54D12CD8CAF0A8B4822EC7C76EE8ECB8A35892CFCFEAC1DF0FD686D08645D2FCFAB6C0D0AAFDA0A69C995FFB3CBC7B5FB4AB081050B8EE69104CC8F369D82D3C5CCBCCB7271C0DA6B8EB33358AC5A3535B261BDB3CC1AC41C756BF5E34AC3DC36B229F71EFC338979D62586485B9DE4BA8759843BC52009A1F8AF0D05DAE710CAE6FC96825326398EE843DDA6947BC0E7874B5BF13FA071922045265D2673AEEF04BB616EF76257611005438142631D7CEE258E8F8B2F8B468B04520DFFDC587494FE91D91A61E014E3FAD13A5CF04FCD37A97F00E51F53E5201AE3E300496133ACCEEC53C134527C3579AB904E50E98AB494D6566D579F859ABCA8FF7E0D049A899D9D9E03FBFBF346F2CB6B73C396DF31592E6B731AD6453F66C9148B630E38650106A0B35B76C8A8E30F6A9C2401C715D9CE24DE99276EC7485EAD32E767E3F4930672BCF61BD5D265C2801B6BB91B54F20EB194D959CBD997E96B0CC985C18B1B76092D9F1A2FBDF85268D6A7535B9F435840E8A64F1B393A99150CA0D908E00104FFF5BFEDB5E7DEF3AC86F0F532448DDBB97144E8D4DC5ACFE2F5F5130D1F4988D5A26365EF55A26909A2A294384566D08ED51F97AB2820139AE00ABFE2CBF68D4D782F8FD117EC53CEEBEF2229C697AD9F248437FFA1EDBD724FDB0F5AE2763DBC1556C025D70F76E8CBC8BF48FDE9D4485D20CE47BE8D9B8A721D813CECF8EC65A176146FC787B8250D4F33E92E647465F6B70DB1B7F5FD87BB35A3C97E3A0BC2DC599787D56480D578993A7F59B26C0D992B3625FB3ABDAB788CB481D3FEA6C333710CC4DCFC80923628491ECB8E3E08D9A6205303E5C7A1ABEC0F48BFFEF179F2673BE8B59720AC9AA3FFD2E19EEFFA5EBBB82DCE53CF5DA95B28E0ED47D23726CF1C54425543327573B85FE5F4C00CFC14EA0446D3ABAE97EE3F6A6E4FCF52C1C8AC22729BB8096875A85A9B7F77B48B1BE4C85DDDE053137DCC6415E8C435B4559E2D48AD9A606CD0ABD12B510328767ADF525AF704E3E8490EF4CF53E38FA1729635D15A7BED81846B7D320F37B26A93FDAB0971DABD50AA350F9E959118ED1C3FA8CADD471C0EF1C0D69B87B1D9014C9A3B5648762F97D8E537156C4EFBE3428015DF8EF79D5CD1AC17B10421D8F86BFE420B65B2A4A60010E1F8100692A2D4F348F79BF97244FCDE849C6E7E93B70C4EA96E0CE07D9FEB7FDF7E15A54CCB0974DC10D8D15C728BFD1E972E0847818D2AEBC16D2495E475B90C2C1A043F4791C982E99272EE2AF226E20FD1E661D3284DF0FAC97B6DE4DEE79B1FC5205877CDC6F564755DFF0A4CB0DF363296029F5738F3DC03448E265BAE1ABAE7CE65C1DE7A321AF0FD6DDA5EF6AE089C37A238D50BC89C3C7C648948DF18D74344127E5B1D57C853F7AE59DB298D1C96758A13FBD1D5EC05C9955205B8C211E486871AD43FBD8EDFD9D4ED5D6EC102FF57E2D344F4DB716E3668917805C2AB358C754492724866B80B3421FCE88EA6F88262ADD5FEDCEFBB15AC9DC72C06DA0739B7D0E98C608D0F8C1B49B0B98485A7C198E5A314D536BF85998CC5AA9F9BF46A1AB330BDBD7C11D5AE49D3833F018126F605931136F264712163F2E3B754EC8F45569ED144FA041CD3CD768B632C56880BAEB499F8E323284ECF9C59893E1E496D444DE862BFD1FBF1764D797BE91DF50D6AE808A0428662237682856DAA8395AF2D1E1EEE6E154BDCB8A87295B9AC65B1974C2E5605A92ACDDBB4FC3D5C9E46F2A7CA4ECAFF16AF459C3BE79A03DC79CA1CD3C65E654F9983F35102B9291E702A518FEDEF6D9AB280ACD8B9D9C180BA0F4B221088C7F88D6820BAD7AE03E61C8DBBCD4883EE8A6C721145A18C85CFC26297037DF6FDF75268F275BEA2C3047CC6BC3C1DF4383610B0C5AE67824700E260F865070078159FC46AEF8168CBC9BF1CD8EAC059B1CE2A60E2BD315F9FD011F1935DAA6DFD6C4EA69C499958A4B7E50BFF5AB95C3088BF2A3AA62DBAE430349ACD8FD57E1F411F6C9C29BD6834D1BC3AD835603526C5C10A9E8023574E93B26C14FE9B24D276FCAE3B4CC006DB56F568E9E2E2BEDFFF7407CECADF8F2DB82E08675143363697585138C209DA05BA2F478ABA7D5BA1038C257A936617976D70831EB7AF8A03BF22529A81761DF599F2049B8804634AC25763C52DBBA32140C9DB4176BB4E1AA543DB881AB12F9D7E2FE091517C0F691D384C603BC4E5F38F2159C79ADC7EDEB3F9F64428DB200137C656FDDB01DFD4BA72344E6EEDDEE06DD808F96757F2A1B101ED5775CB3032083B38756DE8187D41850D2898307FD62B15E650D236A9DFD3A53CD924885EFF31F23623A5697275BF8BB7E25ACA098092072C6FD4EF6FD1916891C8AB4F48C9261DF6A5FA4C20C1937091467EB78509ABBC471D5BEF1A429254824CC7B9CA7032EECC3CD3538645E66ACC645E1952E9D3981CFEF83B6D46F3A41395B9D409E9A611039FFB48264825F126E112B5F478F1A8692F9CDB78078175393F4FE09C1260E2CE3D05C2FE9B61C4C907047C244DAFAAA4016ADA4CCA990C0E761EF708355514803FE7B7633EA9DDBDD81271030550EB9FA54C8AA7869603A409B4888C7ABC83A1EFFBE465E83765678D1C74B818090915235762E8CA6CF9A9E413697A2151331B8EDF13097C85A76DD7232A7A214B8C00AB63691359AAD772F23A71D4DDFB363BD9592948E5FFA89DBFF501A7428F88989758CEBDF82FC1E40790173203D29FEBECEE90C822431ABBCACB635499202072B1E93D753C8843B997453145E86699ED6525BA63EEB076544E12F33CBC6D5AD77F94702A952AAF64AAE720DD01D4C3543185FF6375CC93F162E937298516FD29FA59D653E66F484A7645B8F78F9942694F9EFB367DE751A3008EB7ABE385DF93E9F6E2A7FE7F7DC23DA4FD30039C61D9A6CDD9F61BC6BC0308334367B79C56E066251D88B69A7AD0213908C8FA219F641CDE0525BBE978234ADFAFCB2C060A915E0CC9EE8EE9230C5309D4D2BDE318D693EF5AD99731348CACEA4DD6EAAFA41B2E677AED67B0D533BAF8D2B214A56557B6D9274CAB310A2CD84D31A49B4C11A355B9B456783B6EE30A271E9E5E72680774E6101178677FFD5D5E151A7F30986ED73F6C5AE11EEF8B6A443284127BCE55D52A2FA52C002AEE39C6F91A264463D99EBFB72F161D26660694A72434FBDAE18FBF454510E342D7047E112A15C56515E068E562B4AF3FC803B9AE9768F6B94DEC079A670F1EB8AB6CE01AA7FBFC40313F8143DC06782CE07F8D415734BB6E0DC4D33E1E3AFE16C1A049F5D48497DC07697D57D7B2DD4773DAA9F781DD5166B1721CE318CE31F6317A722BCC72585BD7A139EDC753965AE79BBA33910684F44ED3345277B4B3493787166D30B17AF1824E1FD0A363AF6DEBB1FB8D03FE653AE58DDCE94DF5E422FDE0B6403D292A2610B8B142F6B450DB23D676C5B926353911EB77A2D481B38C69FCD2B2BD6F20B297C56C4B4D2244313D01C5678F2E69C7AB8D2E51B177518F0534D909D19E2DB4A5B42DF3B9F9EBFF974675D2CC5BFD4B831B173040DF011073ED4618494A6FAEE410C1DAF0760DB1913EBA6AF18EC2B9379D76C676FD73D6A31D8FDCB3D3A65CE6D6FEBB8A125B1D0D65AF1214A61EE51A9CD0BBD3A927F69CEB37D2F6310DBD885D842A90172F153259B9114E61B20CFE9AB216F2EA894DBEF81E9EEA7826DC67E189B711F445037DCB7979E006A83B392AE45B7EE6CA9DD4467B9808802ACA32ECB96CD7FAEB0A45AEA937711F5DA85FD365BF83CB5D7116EBE2DB88BD0AED90BF46F34D3B633E4FEA05C04D932CC4E8C338251A7B36679F4845FC181F8198A3BB96B1C86A6B2470377FA9B58D3383BF1DE2B574E5D32578DF6404E5771620687D2C81FC6AFC8E5803B4E2FB9CA20204B23CFA2CCC13CDD87148F8F6664F09114F414850A1975421646D6120F029DC3D51F0233A1C039C696EA97B220387F1C4ABC1BC5B69A1632AE8D8B86EA29CE8476CBBA4662BCF054BA4DEF1F81C222DEC6BAC853E7D80D3A09D0851334B3DB6C1C123B547E38BA8ECBC60A68ABF6B0EB6BADBF30617B9D9DBE7F3D9136DC1F067282036F87CD608DFF398720CEA48F131F9AA887F4AB0BA0759D96FEFB2857EFA603F528F241649E4D313027F47CCF19EF29729C339812C77763F9E9366191D7E29879CAAE6721DE360A39C27AE4ACF8CE7C0FD2B6BBBB0EF12EB18F477A67EC9F59455C02046A88089465295E504C92B6001ABA51BF2127DC6BD880B59196BBA24D22219F50F5C91286C9215591AFA1E11ED8475FAD9AE0371D7F972BEAD276FEAA86112D2BF3660A51A7CBF6FFD14BBC379E97B94F5BF5B342E981D05E9D28B35223AB0A9D73B62A713C0E05CFE9384C34DBF44B3BBCAE4E915EEB417295ACB37F17A3DC26401EC3E86C47134DF0E358B1349C83A9DC7895745D793F8874B7DC8F5B85B7465C25F3BC3062CF759B00A17A928F3DF9290AA39F0D67C9C6DF3A74B46B83F26A2B12550FA8C6787AA820D85CD8C4F6E47AE36650E21839F45C2CDDF6EE1A09180E364E803A2E50629228F6EC8E6CEE1A448F3A881CA18813D960B37BE9828B8E17C04EA27575AA4B9203BEB9224C66EF3EC3B15EDF81FB6CAD3BA7D97BD4790F9D68D5CE1E4CA4CEE5EFF518E3CFF08CFAC33D26D02CAE95C4E1F43ACED0D0BE8AAE1CBA7697D1F21EE379F08BE289DE4A1ADEB796533F70B93F093C576AFF141E378E34B2361562F14B07EDB3BD0AE15816EFB4F21827376FAC00378D949AB4E365D25454542B14047BC64B4B52BDFC3527E4417B4B22060F57C50636DED55DB053094DEBB58D03EADAB07652DBEB1DEE030265B059389843CB44FC8F24DD25A6689BF8486F117F9AE156A09AABB4336CA71732DC6FAC571A700A1F719173C5FD8ACFE940F2D47FF282CBCF0298FD97171090E80DAA4837BC43DDD765F10D096D90A310DBCBF379D3984059A3DD548173720860008BB85241982DFC14FD190075C26171F5EDBB4B1D1614746AEF94DEEF5C64F2E8AD08E2D850CE439DF664D67E40E4E07BE28C85B6BC42EA7644E752044E0DB8982717C7B97F99A41E78AE27B13EF52A0AB3620CCFDE3C2C6A1E6B93697C3F4FE8AC3D57281D27FC49E7673E0E1B38374EBD4750EB01E9BAEAEB5D9B13053BA1395F3F05019E01ED8C66C2E776FE1D4FE63345AB34EE63E6C3826C3CC08BE843ACC505AFDC3236AFBB5AC4843E0143ECCE0DB5E0C08F6C4AFB58), (null), ('99999999-9999-9999-9999-999999999999'), ('2919-10-10 09:15:51.361'), ('2079-06-06 23:59:00'), (null))"; - break; - - case 15: - $query = "INSERT INTO [$tableName] ([c1_int], [c2_tinyint], [c3_smallint], [c4_bigint], [c5_bit], [c6_float], [c7_real], [c8_decimal], [c9_numeric], [c10_money], [c11_smallmoney], [c12_char], [c13_varchar], [c14_varchar_max], [c15_nchar], [c16_nvarchar], [c17_nvarchar_max], [c18_text], [c19_ntext], [c20_binary], [c21_varbinary], [c22_varbinary_max], [c23_image], [c24_uniqueidentifier], [c25_datetime], [c26_smalldatetime], [c28_xml]) VALUES ((-1278046619), (255), (-2567), (131711043), (0), (0), (0), (null), (0.3913), (0.0664), (0.1968), ('ã©ÐåÖüÃÐbUuý©Ö OaovÄ+îBZuÄ©ðãürrC£¢@Ä+¢,,ª+ß.bzbuðÄ.ð~:£bzÜåBbAäahß:£_ä Ö_ZåÖ@oä_îüv.uÃövÄ|BªÐvÖ,¢o+Uã.Ãb+©,z|î_hð rBÖ/ß/äOðüÜÐAv@>h+ߢÃ>vub|z£ÃßAöÃ,b£¢O+ð,©>Ðv£¢hÜbÖo Z¢Äã_,uCrßðuö.UÄo o©_<ßãäãz*ÐuüChå/©Z,aÖB_Br*Ä,:ß*bzÐh>Z aru_vAvßßbbü~.Ö ,~ý,¢>o:ã|+o©,a+h Zrßrã@ã,_¢ >uözü _>îÄ@AÜÃéCh.bÃßUh|_rÖ<_Uö@C* .äÃb:åUªÖoa>hãÄUh|¢©üßÖ/hßA*<~@£**UU: ªß~¢,,@ê¢ãýßö<Ã+ªCUö©äåhO£+oܪ:ßßößb /*ð/O,@<Ö|o£ý£hr,ööÃ>rÖh@ãA+rAa£ªAOÖ ><:+£.bu>Üü ª,aå,ß'), ('Üð*+oZÐ|>bö:,äî<>zäß©ðabbAª¢aÜruöo_~hBu*©@Ä:ã>öÐ>@+bü/ðäîZzCÃC_ÄãÐ>u z .B@Cor|u|Bäh<.hv@u©ÃãÜB©|üa¢BýÄ.OOöü:zÜ©*bÐAßýbzÃ<üa£¢<¢aã_OrðC~+:öZ:oßu:a*ßAbã~åÄð¢aÄÖ|à üªÖ~<.öo£+AÜã_©Ö|£ZÃ~ðýüz>a>|©Ã+~hOr:ä_öãå/<_Bä,üvoCZýÐbªßZý.:ªü©©rÄ*:ZÃC*äÄ>>/r¢ª@z@~B~.hª©~_@,Z:ßåîob@üz>rÐ:ýýÐzzäã©*+/CÃ|>.ßßåuðö.>.oå¢*Zª*ba:böUüªÐ ý©hAÖãBB>à >@b|uîoýu bÜbAÃC/:|ãv>~öÐ++,b_UÜîA~<.<Ä ß¢>aðîbýbÄ£¢öäbýöBãä@ÖðÃbväb:uÄüÐUa£ý~Aã +z åªãbý~_z£äßbÃßð©ba_äaÃåÄã.ý*bý_h:ªß:.ßbä©,zå/ööO£+Ü ã/zrÄhu|ªOU'), ('ªbAv>o£|Ü*åhOC_+OUÃãÄä CÜ<_/B*~Ü:Ðö©:.Ã:Ð/>_~©@~©ãCܪÖA.v+ýb.ßî*u*£Öb<ä+b£/rOöðýÖ¢:äãå,~ZZýACä_ü*åªßbð>ðr|~ObÜîã~ý Ü b> öb<Ö<ãUuB<ãz Bðãh@£Zzu@@,h:C_Ü¢z,väa:Ð:+z+bªöª>£ß,rAÐ_ü+ +C© ã_ðbuð+,bvýöhî~Ü£übbhßîOUh<>*CýOÃÖÖ,Ã/UhCUÐCub~¢,~Ã.b¢rA¢ÐßB:åAüZßU,hOBrÄîðåBÜüO_ãCÜ/~Cb|ÐÖö¢oÃUrÜã.ãr>r>>ÃoÃzöäÜ£_¢Üv_ÃÃrß..o||rézð| îvðåö*vßîoý¢b:öUhÄ£+Bß*öhöa¢¢ðuzrZäýªßÖã|ª@ý|ðhuÐbßäÃöUCðýÖa*¢OüöÃ.ß~ö¢ ößßA>|îOßÄ<Ü*|ßî/oÃ|UÐBUBäÃ/¢_oB+b@î+ýߢ.ÃvAãÐ ð r£@Ühä@ãUð¢ä<|U|+.zAî@:+bo|:b.*@ÜC/å¢zuOabhboÜöha<: Aî/©rhÄýzbÜã~BB+C*ðbOCAã,,uZu/:~öA>ä©ÖÃ<ªUåöZZ¢O:b|båÜ ¢/a<*Ä¢ÖªÜr>b¢ýýCÄ¢br_Ðv ãA@ßî*aOB~ZBCbßöäîuOý||©CüÄ.O ýAÃîa¢ãh*¢@B v:AÐ:ýÜ>ü>ª*ö|CãåOßý©~_Üo/Ö._Ü:O©ßUrbUv/.ãa_B|bbÄz:/ÐB©Ãðv|aU+öOA.Ãh îÖ£ð*~ß|aê,ÃÃU A:|o_Zß©UrAîã@©äðÐß_ß>+@ãCð|ö¢_ÃÄäýüCýÜ¢öýÃh_ðÐ>aÐ<öäÃ_@bbz.+UÄ¢£*rü@ÄÖðörªßßuýî,._uo~ßa <åb©*UÃvb:vä<.vbvÜ©av£îÖO O¢@@Öð*o.Ð,äöÐAðß_>ÐörZb©Ä¢vobZ/ÖÜBªåüÄ*> a_£.ãðý*ã+U/,ü :äbZBý :üBO£.AãßouªrÖ,väÄvßUîOz+CZ.C©b. ÃbÃz©Z~za_BrÜÜ~bªO~ßoB_ÜÜß_CªÄobßZ@©Ãör.Ã>u+bCª*Ä*@<<~oª_î@äÐ:Äz+a+>vî+£ýoC©äOéOr.UOêUCðCÜ. ÃUßðýbÐBbßýå> :>Ð+uäÃ_A:CÃ.h,*ß~U£<ååöO£öbC¢vzOvߪOÖ||£hu ßz£ªÄÐa,¢ää~¢ßr~ðª/,Oß>h*ÜoAaÃa £_håý**+¢å© .rý,|ý¢bÄãhýß>Uö|ü,öä@ðB£ ~~UbÖzhOÐhßÜB.ß©>Ä<îZîÐu.bߣbßä¢ÖCoß<+îîåCÃ>Ub<ßUBß.ÃããîAU~ýhýÐ~Z:ÖüvaOCß~aOrUý*|ý,üa:ððvvÜuÜðÖî+Cußz@|UîÃ~Cß©ÃÜvu.oªÖ|ã@ßÄýuö åßCßBArAb.hbzäßB~~ýö_@ªzª_,v>ß~aü*ÄZÄä~Öbr*Ð:ÃvüÄÐC.Uaß+ußr|¢ð_UãhBöo@+Ðýuå*oääîv.|ÖÃoÜü| bî©aho£Bî ~ ßO*+.aC/r*öZZu+ß_©*h+ß:Ö|äa~¢_aZã/,ü @.,ZÜ< Z+hÃza*£rÐ:䢣äC A+ãu£ÖääÄ,ýväîo+O:O©+AÖУä_£å ,Ä üߢÐÐbã|:<ÃAßýÖvÄAå@ýðA>ÃýuBü,>rîA,_r_Ö+ Bî_bÄßåÜ+oz>O bÖCbÐäÖ~bü>CܪubOZ>Oîa<:üo*zªurÃÄÄ ßbã~_~bZ|zýaýa/Av©b~>/ýãÖß.bv.ýÃvý~,Oåð,CbÐzUrÃÃZZ@.,/ah@ýãÐOýaozzÖa.Aä+ÖÃ:/Äê|CÄÜüî|Zãü/äObOrhb~ýö/ÃZU/h©Äü~/ã,Zª:rAUÐaîAýOà |>ã/A£ühî~ýÐ+*ß<Ä|Üh:ßöß*roÃîA|,Äv@ã,>>a ðäUC>Zå@©A¢.îrÄ|Abß|~<£ABa©>ÜТ*OBo|£© öîrðÜÖo¢ÄÃAB*Ã+,*z+ªCbÜÖ @z ©~bßÖahr> C+ßãÄOUÃh©ßÄßUZbuåC:~U/ãöC¢r *|oåAOýßv*ª>¢,£@üßß_ÃßvBbÐäööî~|b*ßB£ãÜbzUö@@öüäÜ ý ߣ¢_zbßZzbä+ÜA/vª_ähaÐU:ãÐ~BÜao¢ðvÖ.ÐUß~a<ÖU+~Ö<@ÃUu:ãzb.OÃ|>Ð@zåu:>vA_*ÖZh_üýbvýB~BÖðObüÃý__UBvü:+ohUrba*a:_Ãã@Ða~Oß+bv©ßÜüaÖUßäOBbUðAÐ ªüª,C:Crý¢+öÖU+Ãîab>,aÄZîü ¢ö*vߢЩÃO+*_+ÜahåãCðÐ+ îýuöªvz>oh>U£*| A~©>_£>Cªý|,bä.î~a*ß,Üb/äär.å_*Ü @B*bäÜv>C ªÃð:zÄ~£¢aÖðU@U¢Ã/bUb¢ßb_ÜbäÄuBzZ//Ðö,îÄZåÄÜ~~ããßuBß/ävýîãð_©Ðö.î/£ßB@©Z_+öOîa>öðubC+öÖ@ܪä>AuªÃ.C~ýaBÐ>ß<ÐaðÄüî@ö¢ÄÐ@UÐßZ,Ð_Ö|ðÖ >+Oö îBaZîrÖ~b¢üüB~åüåääOÐÃaübîßUªu~Ä~¢Ð¢ÐU*@bà B|Ü< å*ª> ÖªrbArý,>ýäAv,:äUU£@ hA+ð,z/<+UªB+ãA@|ÃA+C_Ä< ýo+£ÜÃBãåß| U_oUÖB@oÃzb*©uå<¢>£bä@ßåäz@äåZa|bu¢ýOÐårýz£©Baü_ߪu,O><ÐÐv+/|£v,z>Z/ªåZåª/B|ähßã ýbZbª+|Öåvî*/¢ AU+~Ä@ðîz ÜÐ,îä~<_B~ªý ÃCÐÃÄ¢,_OßÜ_ªÜrCßbhüÐã£oãA©/ß bÄAð©<ýãuvðܪð¢+vßv.Z_:a~ä<~ãÃüöÐãÖb>ÃCÐhüßäbüuÄ@:Öäo,b@vA ßý.a_zübÜO~å|Ã_ZzÄ~ü¢¢Üb+ðBß*ßUÜ:+zÖÐüZ|bî:_ð~rO¢CÐß©bÃou*£ªrOÄüðß.r+Ü|*.AîÐOuCÜÐðoub/C,©o_+zÃ*år<ªhoaßã_+,¢oüýýUäåZa<î<ÃA@uUrAÄÃa@êý¢ÄC ÃÃb>uÄO|C:ßbäÐ|h/h<~ª* ©ðo:Z+UuoOÃßu/rßßbÃb~ð£hÜC<_>U@Ä *+|bUåräu£åoö*ÃU*£_îZÖÖZa©OåÄÐð£ý:äb¢Ð|o>r*ZÖýãÜÜzh~ýßbªªvb~Äzo<ÐuO<<¢ªªB+.b,<@Aß,B.~ ©O.U:+©ü:Obä|_ß*ZoÃ_>ª,ürhÐAÖzrÖå,_abUoUöCðua_ðýu:CöÐbßbÜ/Az¢¢uhýzüoýßZbý/~,©oö©uÐßzrvAß~îîuC:Ð+ChzÐ*hbªoßÖÐ<ýß_:.O<ä@ußA+BÜ>b+ÜÃZv@ªîÖ bUäb|r¢~ÄAåÄÜr|:aßÃCýBr©ü>uß/Örå©C Bª>ÜÃZªOå+ð:¢@h//ߢ ýbrBbüßhüßab©å:ã@Aaß,îzZAb~ZZzÜbAß A.,ÄÄ::rb+åßÖbzî.ßßðbÐîba,_ä©bðaå_//CzZ+ðÃUðhUãuý,*vuävz> Ä ðª_a/åðr¢äßB>:a+>ýîÖ_zävãÜAZhðܪü/zou/öܪÐZ ÜBîð>ða>_aÄuv>£/ðÄУ/åaO, /*©Oß|äîÄo/ÃBOªÖUÜh©@ýÜ@äîa¢îåBÄ_o>£ã*Oh*+ß>ýuª|b©£UbÄß/~h ð|uaßbÐhðÃöðå~a hrv@¢z:~uUã©ã+bbÃAv|C+ü/vB©äBÐÖ£b,£Uz¢ÃªC£Ü~ubz|¢åUä /rÜuãU_£~<>å ¢råA<+oö@OvBa/ääßhO_©üÐOãªAÖ|*va~äýUßßv©oÄðZ ZrÜîu.bz*££:ÄOå*.,Oðv@o/¢AAå>,üb:ã_,vã öOÄUr*ßCª+ Ö Ö*bÜb ZO,OßöÃ~ýå£ÖßUöîUOZ>¢@>BUbÃäÄã<åZ© ¢AhÐåZã©zööhB_ZBãuöÃZ*ýbÐ|ü>¢Ü|ªýäÜ©*ߢ+U©ÃovÐ:rrУ©*ýAvbbý A@+ ouܪÖA~|/¢©ßÜýCÖzåhîvýß@¢vßzAð¢Oßö~u/ªýªbÜ|.ªuzýr~Ao+:bo.Uü>uZ_>a>aã.îzÃî@ß>/.î,üßB:å:ß*å/ßO¢<+ßub.Bu:~ZZ vä¢|Äý*~_.OB¢_éöýBCb.hAv+aßO>ußo|röÄ Äßãböüªh/å,|>~rOvãĪz*ý@.Ar+ðb*Öö¢ZZvaãZ UB_.,Z>uåãoÄ¢üZ@o:Ü£_£ Ãa'), (N'Uzãr~ö+Ö£ZrãߢäÄ©_,O>uÖAb¢ßªÜã,|ðäü~aöCê_äävöãîܪA:/OhA_ßhühÖüßå¢ðö£ZÃÄ.Ä~ü*îÜCÜåßoßöhÐÐöArßo_ã~bý¢AîU>îzbЪO©£aAOvößaö>OuÄU>îvoÐ+zðhbå£ v<å,h|v,OÜüZîÜAAhãÃ_v..Ü|äß*Ðåözª¢__bBb£/äzhZåãªZåauOCbãbBãvÖð£zß©©Zu>übßAB.CZ>©ArbäåÐh>|Ä:övßî@rýz¢u|+ßîö/ha£ÄߪoU|ãß/B@oÄ@AAÜýh|rhüä/:ßvöðZý<îý©*B_ ©.|uBbããÖåo/a/:~ßÐÐÜÐ~ã@ß_©ß_+©Ã:ßîÜ~Ö'), (N'ý@bÖãüA:,ãª+Ü~B|A._,Az,r<ýr_©abü*hÖbÜÖü|£*h_b ©ußu_*uýª©häZäÜ>ß,Ü¢a¢ßAßZ:üÐÃOãhhzüÐ:<ÐÖ*_BðîZÐh_ßÖ*ðAå©bÐCåß*O~h/bÃßv|ýAuã@B¢~¢O _ý.rßÐ|£ü©£_:_b©Übrb ZuÜ Ãr+|:h<Ä:ßOOðª*hoZî >ÜZ:/ã@/CavÖ£åC@Ob@@oßýÐå<ã:äîoý /ßðððhªªb~:@/_b>ßöBÜ+o©ß_~üab|uäv/rbrªvöîðCU@r:ðßüAöbuövoC+*oª@>+~vý aZuÃhä:b/v*CArC@vßb<öîbUîßz,'), (N'ðö:~ß©ßvö*>rÄäauh,.üCßr>,BrüÜ*|b/~ ,©/./ÃaäÃýÐruuãîü£ÖhÖörÃ:ã<~ß.Üh@¢_ÃüüvCö>@£îýÖBãBßßr£ÄUÐýã@vî~übÃ~hüöa+£rU/_ß:B+îozüz ýß/Uý.~êöÃãzoöÐÄB.oa.ZÄð@Öh*ÐvýÖ+ªz@ÃAöb@¢>ãüoð/O:u_h |_Ðz:©/ ä©Ãbð_£uabÜßäü*ßÄOZA/ªbbÜÜ,|v¢OÖßoåU,Üü/obAãÜÐå*CãÄh~£U<å>ä/¢>r:zAýÄbC/öuãå+|uvAîA:/ðAOOî.*îî@ß©ä~@ÖÖova.ÜðÐÜåî©uã_~bÜ_väßߣÖ_AÃAu>ýÃ@vÐÖ/aoC/.a@ébüuªBAvîö*¢UåÖuÄ_+îüÄ|ßãªÖ,h..ßhbäöÄߪ.ö.ª +hrh,åÐ䣪Äö>o,a £C<_|îööü_BU/Ã,¢ýUÃ|h@*î:|,~bZzhÜߣaCª,ßîãOãUÄĪéäÜý/öãB*ö@+ä©Uü<£A,@,ää£:åobrãÃü,¢/*ß*Ãoav/z@ßüðåÜb©uOvýî ýb©AhBß.böîUÄ/ªB,|UÄ,ÜÃ@+äªß<îrärý +CUãöüüz@/ÜýöîoÐ|OÐbÐ|Aü>hßßör:¢Uö.Cßbý,@+aðBªä|Ö£î ZüÐzAu|zöÐ:ZªA,OAbv|£_ü~rbåUAå<î|Ã,ßAߪ +@B>äðhÖA/ß.,*ÃÖýhBý* ZbU_Ðî¢|hr<ðOC/<Ðvîhuªbb@ra¢ßîТýAUaUzrUC:Zªö:o|z@.ãbuCÃýOA@îýÖU<äöoä.u/b©aÖz:Cbb/zz>å_Öð|Abv© CÃAhb>aÄîZüÖ.r*+@bü<:Ã/Ö~ OUz,oo, åbv b_bÐ.A@hC_|O>aZrå/vZ|ÖzÖ,>Cß+b ZBra..Ðv.U:r£©hîoår:/ßýÜZUZ*îîÄÖbuZbzýäÜhOäbC_©BUªöðO¢å@Ão.+bªoa.zvöö£Ö|rBzöÜ~/ ßüäZ©£Öß*@/,vÄOaßðÜz¢@oÜü¢öZb_ÐBÐb|BÐå Ö|/ª.u*z<îzoäßCÄZßBzbÄ:ÜßÜ ©Ohbvî~aÖOðÖ_¢z:,Ö+åZª+vz£|ZAB©Ü£îÃh ßAvZß+_+b_ÃÖvbA/îAbßåÜ¢ zü£@hB£öOC|ÐC~ߢ uCü£> a/zÜ :_ä+äÐ,:oC*|h,Bð~©£ªîoUA>/zîîC>B>ÜBö:ä/.>|Ãöå,<äÐv,Ö/@ßßo,ªä ý,+©+©å/.r <ߪ@ÃoÖ@BCoUÐÖ£ýözßbv~B>o v@Ī/ bbv£ðzBý£bÖrßo£ðÄÃðCªCbîÄB*+åuß<ÃãO©<ýb£rß/Oßå©a©*ßAÃzÄöa+ößöÐB.ZZ>ýýü/Ä¢Zîß©åbß. Ã@/Öß,Cu©BbUÃ:ÃAå_,ÃAÃðb..,îvCzC,¢b~ý_v|Ðz<ðÃî@bv<,><+ÜÃãr>@öß|ýaUßvhªzîÜ©//äuÄu/häüu@rB@uößýТðÖ<î/bUð©O<Ðßð ã¢bÄÐð©>ðAA@Ã+zZhOurßÐÜ+oO+ *Ä£ßýoÄ,,*@aa©|ÄÜ.£ã©ÄÜa¢ýöß @Ä©_~üßoC+@¢bbbîAü~_Ðo/oo£/rU_ýÖörbBB,ö_ªð|,ÜÃäaüß_ÃhUz:ªröAÜ>oüö,©ªÄã~BzîÃ>h/r@Ö£ÖvA uAZî©z/ðÖBܪ/+aUZhU:,U|ßzoý.vhÖåðªo£zßOv©+h~Ä_aß@@*ªa~öý:<~>za©ª*åÃãu+ö:üýÜaBüBÜoOîÖÜhå ©oOãu©ö©Ä@UããO~h|î£aßöå>+ß*hBðãrý*obOBuZbBZ~ÐvðýªÖOå>ä@ÐvÃ:. ß|ßÃAã>a_ü<©*üÄ£zÜCå*_ ÐöÄCã/Ü>¢ßöU_<åÃ./ýbßÃuhîßbüð*@üvubÖzÄ£|Ö:äã,ÐOo.bÄ:+<_bÄ~uA+ß~Zzýüz/h+ÃÜ.z*ã+Ðo¢ð_ã£b~ßÃaAÐ>¢rðå~@.ÜäÐvÃa©üoOr ãb.:ZУU,oª.C£rou,ßÃå/uÖ¢hðva¢v obß>ÐÖÄö<_©£va~aäÜ>Cª/ÖÜö<Ö ~zÜ>äCBãåååßär*Ü|<¢|ð.UChÄÄzA|va+ªîuåh,îîAOvä~rÐOußv@Ã*£vÐî>ðvBüð/Ä£ÐÃO@oååÜo*aßA|ö©¢ßO+.ßBÖð<|£ðr*/å|aîÐB:+ /*Bv Uö~/ª© Uäöa~ð<_:¢*Ð_|ãZraãAO >äUO_ b.Z~Ä_åhoüãäßa+ÄÜ,£+.Ö£oî+BÖ.,o:|a© UýhÖ ä©b :Ããå:Üð/@rðÜh© :hÐÖß+zß*A<ßvîb_B~ã:©Uäö¢UAAßÖ|CzßzOhðUüoå>ãýü£_<£ãOzu©rvÜh~*Zý~<*<<~ä.o åZÜÖaü£~>|oð+ßBhBð*Ü©ªäîî+¢>OöªU©ä/ðå:vß<ýãÐã©C_+*>öb,©v.å㣠h.|öîv>,OU£©_Z©ÜhbuUBhã:©rvOo>aªª> ~ZÜð.ªorBãZ@Bý+hߢöðЪ,©OrÃurýrvzao>u/Zö@äÜuîAßC@:AbãÜ£b äð+*a,åßoOAzÃz_r/üuo©ªO¢O.bßÐ+Ã>ߣbÐ/.ZÃö©ÐãÜßãh>ã,ß.ð©vÖÖOª bBß>_Ãuß|or£U _uÄv~uvä~¢oUÐÖð|Obð <ðý* CÜßå£äZßubrîÐ,©ª|Ü,hvü<åýýhÄîä¢u+ö<:<ýöÜä.@©Ð£/©UÄðh~rboZîå©Ä~î*:ü_ßðuh~ã¢Zã/ßo*_<OrÖB£ÐA| züîuÐ<Ð_CUBÄ.ý +îªb~<|~ý Uª,UîÐ/¢ªoÃv£~Ãß_oßOÜÖu/ÄÐhýýäÖ+îå<ä*zu>©Bßã¢CUa*Öö,Öß|<,ö@oª:¢Ð.z*ÜCãß,ßbÃU:C+b/î/ råü<ãýrCüuîOß:::Uå*,+BU+£@AÜhrv_aü©£b©BÃZÄ.ªh>/ý©îã|_AöC£~ãzü.üÜü*oãÜß.~ß©B©©¢UhbACU+Ãaýa|a<ßÜÐåУ£Ü ~uä>UÜåðv/a ÃuözÐ,v*OßußöÖaöuöaý:ß<ßUÖCîCbÖCahh_Ü~ýU+/oÜýb_<Üöà .aåîÖhbýZ+uhbBßߢ:o£öܪA£ÄßOr£hO*.ÃýUuߣ@aüaraÃîvÐãzßb,£.äUAzäߣubÜ©,ß|,©>Cðß~ߢAðî:ßß,zAb|,ýÜ ©u Üoua>:O:£Zð:äßbªý,ü ã,£<£*UO.îo:Ä<ߣ.a.:Z*OB,|rÖ*+ÜöÄå<+>Ö+huaAÐC:Ö+a,rýü>b>r|bbo>ßACuÖßý/h£¢ZUvz/üößßÐöOÜürßýOöÃZýÄOý¢îÃð+~v_*ÃvÜOÖ~hv Öåä U|ýaUOü*Z@Bzßbvå/o©¢/Zðbß.'), ('a£üZhZ©Cð+ B~a,Ö©åö@å,îªuUîö£öuãß. £_ßO_,höbß~A/îo+ð:ä©¢Ð+bî,Ä<ýhubÖðrîª.Ãð©ý,ãC*.ýãAC.v/b<î/* Äî_bbzrß>ý~ ~uaÃ|Buö:Üzî,ßßzäÄýob*rÖ: Ößhª<ã:ÜßA.,îßr,äöª¢©v@åöÜa.vuavuU /ßäZ::¢aÖî<ßoö©vU©ÃãA@~Aho©>Ü~a£oObvÖý:üã<ªÐÖC,~ão_rªª.C.ÐÖ h©ob<ªý£~u>vrÐa|ðãvAÖb£¢Aßb|ÖöãAUhßoz@vhhÐýª£Zýå~ãr~:Ð~ba_A£|.î£+¢~Ðã*UOZðüÐ~ßa ã|ýü~Zß+/üåCå<>hÃ@îð|ooÐßÜ:îrU*öUv©ýÜOorßrZå*ÃC*åZUÃ>©>,rZbo>ý~@A+,îAbv_v£ýî:_Ärü.ßCa:zo.Üa*äÃhßðã:ýz'), (N'AÃ/ã©~ö©|ärbo:@~bu>UbðÃ|>OüªbÐîÜbABzA:>ßã*Üa>b©< åîbÄbÐCaä >¢ ~ßü/ýh*u_ªÐ©.Äh©b/>>vOßßbýZýZoCar>Ööbbb_CC z*A©aü*ßîýCb.ah*ýã+ð,>Ð<îüOªü+ü,oã@:A vAö*uAb: öîÄbÃÐröߢ_ÜbÜÐã@aÐî|<Ãz©~*übZÄ.:¢UÄvzZ£üîÐã>_uUu>Äa _ÜzU¢CÄ,~vÐZ<*ðub/|Ü_Ðv@ãO©_ð/î~._¢b,ßZÖbBv©<öv£vÃzßUð£OUß./:O:h*oåðÐäãUoßÐ::ªbåðavUhC <å/ã~,ãZä¢Cz b î.ãb£.OrÄ£Ö_@/îuaUß,bZAUãz@äã ZÄß~Cä,b:ðzÃÄrãä äü,Cb@©Zª+~u î +,*AÐðzAãðÜåB+~ã,ýü£î/uurhZ><ßãhaýz ãßh,_ð|OZ¢~ðA_Ou*U.ðOhß~£ß|Ab£åCbUý~ä~BüåAð~|*<ð¢ªÜÖ|,oÄa_ÖÐ+@B£Ð:åÜ_ª+Üo:AhuuAZ*¢,<åC_£BZ|zã+ª+ðvãB<Ã,aUýªC*a<Ü>:+ÐC¢Ü¢îu©UAböÜã©uö,öߣU,uå@/ZBßÜß+ýäUZ>uOUahüObßvÃÜ_,|£Ä>Ð,åB:ð~:UU~Üü/ö/oÖ|¢C.bãÃOªzv,UÄv+>åªCÄz/©Ðð~ðbãbAvr/ÃC+£î*äöª_à ÜvOÜßåð£UÃÜ,üÜAÄ|uz~Ö@Z ªvaößOÖBraÃîü£ßzb@Zäðba,:o+,uC~UüãO|åýßböÃOübCÐî,a@uU/.|Uª<©ß*äB.:ðCA/.Ãäöo|_üz.Ö>ÃhßAã¢oäaavîCü+îîUOª>rÜð|r/äüAuÖöêý/ >a O/,.öãrr¢bbuoa>*å:£rzîüÜ@ü.*+<~ÖOv Ö,@ª*u© ýo@ßÃC¢|äãßAv<¢åý.ãßoä<ða+£ra_ã,Ã>ýîßêbUÐ.©¢¢/uÐu+~ß,<Ü@UÐäBÄÄ*_ä*ßÖÐßUßÜðÜ/ßZ,ö/:ßOU~zAu+|üÐý@AbhÜv£:a.CßA<Ä Ðö ð£vîOZvbÜ_*uZbÜ,Ð,£@hZý:,b/|ß î£¢¢ß vhåä>råî£OãÖUBüöb/r¢£ß>CãÄU:¢Äª£U/Cª>ßað.bßurÃzÐ*ü|O.O©:¢Üaßü/vö|r@ßü+/Z.Zr|aZîo,>B©h.ubÜ£üÐßuüýßã©aO>Üü@ZÜhýC:*äã.: ªßhü:Az.érA@bÄ<:|ãß~ßÖ*ZÐöä@Ðr:ü>å,+Bßß@+ß||hBäv.v|zAbvzzðåðbZÜ:ÖbAO B+ÜAZrarßo¢BªC:£oð/ªBbOîå:BABßbbÃðzîÜZÖävB@ÖUãö/î:ßü©ab~bOÖ<~oßßüüýÄroU:av@©ªz/Zu©+@ÐäzÄOUaßUv,/+Ðü,>UuÐu ü,>,üÐÖbö©arý_Ä,©>Böãåð.OazB<._*ua_ýA,ý/ürvßZ v¢*hªOZååZööäЩ,|@C£ýüaÄ+Z@©ü¢ªhhäÐ©Ö ß+b hvbb@UÜ~¢Öâ*Z¢¢Üz©¢îU©ßßaaý¢uÄÖ~£ãÖ©ZÜvî,aä:>>/bC|>Ä/.å~Uv>UÜö,AðbÄ:åü<_,Ð>Uß*z@|ö@©rbhuöo/avaC:ªß@:ßýOobüzÄî£ÜåüýÃß.Ðãåî<>Ä_îauUüÐ,>bhZO¢oÃãßävßäãåaÖzoAzOÐåÃ>@ýäbAa~ÃuUßChßäý<~Aߣbhr<©~+Oå.,:@aãߪ/å|båbö¢:ªßßÜaAÖOÐäA>vãäü,ýÐåOß..îUªa£Aðrª>+¢*ý|/ZAä£ÖCOAÄboÄðU.|<:b£îhCã¢ÐbÄã:öhbãa_åý£z¢vb£ßbÄ_£AßC<|b*UC+OZ:z_ðÄZ~Ö. rÐ@Ã|,.ÃZ+ZßuåuÃå¢z<ðã ÐðhO/Ab+ÐhÜuÜüå>üß.Bßý£b£Äa,ö/ð,*,ßÖ/rý©Ua|©:©:Ðah £@Ö@ÐZb@ÄA£/Zr+ä+OCbÜãÖãß/ýªüvv,ßCZåªäb<*©v¢ª~Z:bßb|îb_ßÖîÐzz:_:Üv¢oð>U>B¢ÄB|hUuh@_OOÄ<Ð|b¢~,ýÐ_ß|b|BuarCã|<<*ÐUOßüÖ©ß|_:uä<ÖÖbßUu< r/åЪ,h+ߣÖoz+.~Aüäüa@Bå*@:+ßÜUvä.bÖöUovÃOÐß:ÄO+ :Üv+> © ý,böÜ~A.>Zîz©£ßß~ZãßZ.£*BA ýüå+b,.öãb ð~Ä,ü.vb©ßý:Ür<åb~ÐÐãÐvA/ªðßðUÃöÐU+Ubî:ubA*>ý@Co~>++C*/C.CbÄ_ãUßhC@£ß,Öbð>Öu/å ã,Örð.öBÄ£îð+öß~ *ÃuU~éÜ|¢AäÐrÃ@ßuzÜ£z,raßaî:+CBð/åЩbUÄB.*ÜðUü/u,~Ä>ß©AzaUÜÃÖ O@ðöz öäÐüªÃuüªZÜã|Ãbß,~CÖã/£ß|+hß*Z.: Ðu~b+Ãa©ððýA,U©ªývhßaÖäa|,AZ>rr*äuU/_u¢>ª Cå©o¢OÃÃAuv¢ ý+|@ü£ÐOÄТOoaubÖ£¢uãý*.Öã~ßoübuîvbýÄ©ãåo,hAý11/19/2008 4:38:05 PMThe quick brown fox jumps over the lazy dog0123456789,.;:?[]{}()-+*\%^=~!@#_|/0011/19/2008 4:38:05 PMThe quick brown fox jumps over the lazy dog0123456789,.;:?[]{}()-+*\%^=~!@#_|/00'))"; - break; - - case 16: - $query = "INSERT INTO [$tableName] ([c1_int], [c2_tinyint], [c3_smallint], [c4_bigint], [c5_bit], [c6_float], [c7_real], [c8_decimal], [c9_numeric], [c10_money], [c11_smallmoney], [c12_char], [c13_varchar], [c14_varchar_max], [c15_nchar], [c16_nvarchar], [c17_nvarchar_max], [c18_text], [c19_ntext], [c20_binary], [c21_varbinary], [c22_varbinary_max], [c23_image], [c24_uniqueidentifier], [c25_datetime], [c26_smalldatetime], [c28_xml]) VALUES ((-2147483648), (81), (-11771), (-1831503069), (0), (-1.79E+308), (0), (0.4471), (null), (922337203685477.5807), (1), ('Öß/Ö>BhüÖ©äv<ÐzhZ<£.öZ/UbÜbüÃð¢î>_|Zu,|öö~üßZh.,,ßüü<+rÃÐAO<>oo*ãßß~ÄO/A, >©BüÜßbäBåö£/h*å|rrb:Ü.ªö: ßÃu+ð~oä@~ÖU*.¢bZ,r,©UߪußzäÐUuOå@abvvßZßöã©ãÃhrÖb£~äªhCZZhZBÐðär:OÖ+hC./_ÜZü£AABZUU㣠v,îÜýh@ObAý<+@,ߢöUo ßãh£vBrß<©A_hð*<*hZî*ÄvýO£@Ã:¢z~>ý/_ÜhÐA +~*öðU~A*vßüUýC~h<ª~>+ä+:bh<ßÃu,U~üCîbU.ð©B*<¢Uazü££h:ãaÐü>äBCu©b.Ä©aa©buO£ßv@åßßCoäA|vßÖü,ð|+zß:/Zbî~azZ~/ößaÐub©büö+¢bbra+öãäBöð*ü>ÃbÜ.'), ('uÖä>å©>r,Äü+ðý>Üz_©>öoÜý/ÜZåÜZbÄaOãZ @rz:åîÜ*býåbB+¢.B¢U*Öor/ßb,oZ:@a:ÐÜÃ<ãrßußÜz:<+åÄUªªÄªz*ýå©ß@¢bª:ä~+~ðöv//hð,åü ©>:bãðzä//êo+ZªÖoäªåaZÜz OZ<+öBî'), ('OaÖ__Ððou Bbh@ouA*/©r©Ð@Öa+b<ªÃãuZ/Ö. bhbh|üuBhüuÐb_å<ß>ZUß_+å©¢£vääB.ßÃzZ~bCÜZ£å.'), (N'@oöÐ<ðöh£übîB< C+oö£oÜ@,|O: ,ª@aßoð*ãÐ_üu,åßo~ãã¢håÄåZu:b>OrbªÐA/ABö|ýv£¢ü/ÖîÃuý*ªÄvÄßh_ð:v | ðª£ã,C<åv£äUBîã:|,vOä/î î*©h+ÜîÐb+ãCÃã>B îbb:üZä.ý_UBßðÃ|@A O,åböüÖrzßãÃ,uB|ªhäãª_£ªB£Bv+©>ãZ >ÐoU©äu| UB*+ÄüUCU+ãaÐß_:@Äî|v_oßoÄ*.+:aªbr.@ÖZ,Zh|U::zÖð¢Üoh abÃö_rý¢ßÐß+uü@,AÄuzª.ÃzÃ*ãö.ߪzäZbhÄ|rB.©zß:Bu*U_ªbðßÄ~+,UO*ArAh<@ðð+Ã:@hîöCåäªh>Äår_,A~:Ü aÐ,:vÃü~Z/åäo_ÜðÜ:>@£bã ã~b<*:~*h>,@<ãOåaã'), (N'AbaªBßaZß©öåbh/BîBöüZ>aA,.Zªz£¢uÜ>Zß~<+_/z|:_>: .BýðîB_@AüuÃ@,ýhAÐC_ã£@.Ä,@ýð|>åöörr©Ä ©üÜܪUÃAb ./ß,î>Ü~|r>||ª:<*Ð|OÜ< .:~båîOA+<£>hÃßB,ozCîü:ä|öB,öz.å©,OhBîB ßäÃCÖh+ߪ*Oî~ßvbîªB|AZ_ÐA_öÄz©ý>büzAv C.~Zß~h>zåCCu<ß@z@ übrr£>ö*ÃãªÃýÐ>öª@ubªO/@Ã_£ßÄzUîrðÜäU/©Ä.å £ýC_|a,+|ýhb >ãýZö©_< ª.¢Öý:ª|ý¢BACîähzÄ©uzbb,ubðöO_:Ã.£î*©Ã|.ä/vv|vZzãb<ü~ü£@Ä£ÜÖoªã¢_o>>u.zîbCOªhîZîÃÄB||îð/rð_ªß>Cä*<*ýÐýb.Ð~ð<ßb,ß+åb/>vb¢ubzzäÃC_ýzv£|ZoÄ£©ãýý/£h@ÐUð:Ã*B.ÄÖÃÃÖ|b:+<<ßÐvbÄ*ßã/b£ß,oßh:rBzöouã_._U*îÄ¢@Aãußa©Zýý./>äÖ|O<ðÃrv Ü£Ävb¢öÖýßAãACbÐöÖzvZÜBC¢£übäýA/UÄb~BЪ£AU/££AhßãB/*äbÜÄBA~.ßÐ.Ã+vrãå¢ßÐßOOãåÄ ¢ÐÐärZr+Üov>Öhüäo>ãC+ßZðuZÄ@Ãîðß,Äö©Båu,Oî.êCbªäzA b~öß:ߣî~ÃÃåu/CAOZÜZZ/ö:,~ CuC©+äªÜßÖhuZUzß.ä:@éÖ*>AÄbüOU|Ðz.@Üð<åbrýao¢@zB|_/¢ßA>ÖAß++Ä©Oîu>©öB. ©<_ZOýObhAvÐ:îÄ.¢ö© ß.bß@ßBðhä*ýhuÖovÐ ÖãÄU /öÄý@bAa/B@U/ÖÖ+åUöZÃZ~uo|hå¢îÐ@ýüäªÜö£h*>ãöðo,@¢/bÄ,ovÜßå<*Ð_@©ã¢å£AåzUbuUªv:C£üA.v/aCãÃBÜîbüöB.ÜÖß:¢B ß,u|Ãoª+üða|.h£ðÄ©ÄözßrÜ@£Äbî*:b.Aö.oh/B£:_Cö+©vCãCßîoAaO:AA/@<ª<üo,ruÜ~u¢Zãvbßhü/öbU©hvýðUÃB.£Cýð£ýuZbåb@|ZäOÐB¢åbý~.+ßßå.výb<ßüOä*/ãðÃ+baÄBä.ßrhbu ©@~_ão äßåýbÖz© ,©ßü,¢>,©Äö<ªbãaU~ß>U*Ð>/©@öb:>ãÄ~BOO|Üu:£*bÜrzãoz/:ühÄBߪOßbabãö£ZbZZÐZ£ß¢hCîu|ä|hßh>Uð@öÖ,Uh.|bö>zZðoîÄÃOð©h_@rZaBhb_z_b㢣_îzhðbo.ðvö,uB:zzU,.Uröhz/a,rÖrb_voÜåÜÐb+BvAbÃîübýuß:r, öOãÃbhðö*Z,*£ü/ßC.ßßAÃ/ªäÐ,raü¢>ÐÄhü r/ÃhC:/~r.ub>åC_ö|Bðåß*ÐÄð+£î¢öã:<îüC©ðuýa© Oo>b@öÜobb/+Bü.ObÜÃ|<,~Aýh.Z¢äðäoA||/zhüãÜß,b@äoUÖor BäÜ|:B+@<@Oh|ub.äÐÜ£ÄÐêrý:'), ('åÄÄ@boÜaürÖ:+Uªv|£rðªhä/håB>vß©*aÄr:ü<¢ÐÐÜhvh>îbuUýUb/ãäbbA~.Oª>>_©Z,O_Ba:rãý~z£ýAZaß.Z~å*+å:bz|o£Ö~ߪ©bÄîuªuýä<Ü+~+bvb.bß©¢üh¢Ã*ßÄß++UZðOÃ*å<îBb:ö£_üà ÐO¢Ubvv:ªz>£b|ra©zÖî~Ð_|î||@rüh,h,bOÐýU£ðuÖ|ývA@UðýurÜÖa£b*<ÄÐU¢OC>Ãhð¢Z~ÖbzååbAubÖäУ. ý@ߪã.ª,b/öb+ :Üuð.Z|*ãu>rßß/bCªz©@ªCA:Oh©u:öý£å¢ü£ßuCÜ£Ã~C¢¢ßüaz*ÐÄßä©O_ðO:.z+Oîåð@ðß_*Äuh~vöbÖz: üüä@ZzªbÄ¢>~ýý_ßööhv£ÄßråUÄuªä.oüý,uA*¢uzÐãÄr¢hªÄhCßorÃvo©¢bª+<är ¢a~ ܪzðöîäBývCB@<ÖªaÖZCb+Ä~¢ðvý>åaCa,*>>uvÜ.b©+ö>äaBªzäÄ@Äýà £hbUåî|h,@CöªÖðUC@<~Cö.Ðîä>@*rÜZÄ|Boö,aÄ@C~|Ao£*äv.O@CuÃÄ *A,bßrÖßUA©ÖzÄ@Üba+äÄÐro©BÜ~ܪ*.:ªbýzß~:~Cbîa@hB~ý.obCªöªoZö/ÜZAhZ>@zßCßUÜß~*vAB@oÐÃU+,:Bb/*@¢AßãAÜÄA¢ÜÜåªîZzA~*CO/vb~ßÖîb/U+ÖZ¢ÐaÐ >zbî,öߢ:Cobö.üZCðUUvåößZuÜ£ß~Üü¢rr*ÃrzhöCAubðýOhåäÄC+ãUa©Ä©Ãªî¢öhÖö:*ö¢CuýAAãuðbÜüîbî£|/ äraß: r.ZîOAÐßðuªî,ßro:Ü¢î¢ý|b>O>C>Ö¢Z֣ߢ|zÖAbOýßzÐO£CÃÖur|Ärãu.ý_ªzOªzhÐü~ªhA~ä/aÐÖÖaäaßý.brð¢Ü îÖ>/åßuýª/Ã_BªOªÃvOC<£ý©ª>Oruðß*ßvUZB.|u@Öo~O<Ä,u<>£/©ävÜßã+¢aÖ©ª Ðã+î>ZÄü~Ð<,>hÜßýÖ.oîC,ý>Z~Oª>a<üãÐåazüuö:BhÜ+ êßAýU:/ª/,,uÄ@+BÐý.£,îÜ©ßrr:Avrhüå~Ü:aU@.C:¢îÖ@.Bý.Üö©zÄb*rbUü|oOvUãð~¢ÄÖîUv/oÖbÃÜ*bä.Oz|åÐBßOv/|Z/£>Ã>>+ÃAb.Avå~o+:ª@zÜBövbä@ð|¢ßÄoÐC_ýZä©O,Cå_¢ã@£ßßßAý£|_/:¢ãÜ:.ª Bo<ª+oÖãh+übÄ.aavÐßý©Ob|a|ãuã.ðÄvu@ÃAA:£brãZ~<ÄA¢ã>Īª£ðBîªß @aÐ:vß>î üUZOð< ßü@äߪaîrC£~~ªC.£ _rCß ©uCZäU/.ÃOªZöbð>îaßUooð Äãߢä+Zrü£ä£Ã h©ÜÃü,ýzO*ÐߣOz~O>zß|a/ß|zî, ZrZß~äo<:r@ .©:îbÐBî+<* îÖCuüh£>~üîh/ýb oBÄzÜ:o*üî@~ß>ößãöðßÐð> _aÖ/Ö <åuýÄ@¢Ü Übß_ © bÃ_ð+._ý@©a ©~Zar£©ÜC*Zü:ß©ä>*hößÄrrb@hb u:A@zBÖ£ðZßh~Üý+||ü,ääU/O¢Ã*ÐÜ> ÄäOÄhÄ:h~U:Ö£Ov*hövv*¢_:@rUZ|hðoß<.ЪvUãBßߢ.<Üa+*rÜ>uüBzÐrð .äbz+ðu+ C@ªUã~ bbb/Z,ÃO>uv+>h¢,©/Cåß,buz/~ð>ßab¢ªb|>bbAOåßh©äåO>hðßÐÄ>ÃAãhäßÜ©ÃuOÐåbbîª,BÃö~ð|/_,/+år*îC,_£ðOr.uBîUÃråZÄîªäBo:¢ª~©aÄC©Ü£Üä ß|/oß//ü©//@vÃßUãräZ:ãü_.ªý~u*å£+CÄö<:b£Ð>üohoÖAZ.ö/î~äüªîÐO:ãÖ |ÜhoüåÜ,ou|üåß,väüZß,:ÖßvÖ |ÄåråÖ¢ª+A~b.£|ZÃAåBß@ ÃÃää:îa©*©ã¢>UA~©ßböü|@_Ah.Ãz*.@é|~Aa©öh,.Äßå|a_C£ý¢_+COzã < *aUzðßÃ/_©hhß~hßÐh~.hOÃ/îoz/.ÐO*<ßb.<>üÐ B~ýä<Ðßü*|ÃÐbOozß.Ü@UAß<Ü©ý@Ð UOäBbªÄ~..@:bO<ª.¢åC©bOrbbÜ>bßÐvUA @åüh_~ua+ýÜü¢aOU+¢¢£oý£aüãu>~©vuAãüÄ:<*@:bßuZBh>î|+¢¢+O_UöoÃ*Ä.ÃÐ|ößb:ßåZBrBO/ÄåÄЪAz¢ª£©.<>z£OУC<Ðh /:Ö<*_Ob*ßUZý¢C,,Cüzh¢üz|¢î:/böýÐ+ZhvßZb<~b£vA©|ªvÐ+Öãrß<:îĢģzäU|ª üC|ãîß_| b_ü*ão ~UåO<©ßî|/ÖðÖÜa:bu¢oo@ãa£vo,+Övå>ýZa©.äzz©vaߢ+ ä>v+öb:¢+Zãh©<ßUªßî£ßåC:zOOAAaZvÖåo©ßað<ÐîbvüAuüüv,aÐÄ_ü,ßbÖä/~*a~,ß h:~ä/ðîãä>vüubܪv_A OZýöOªzzÃU,£.¢ßßßhzߣh@zßÜ£+ßÐÐb*:hä:£Ãߢ~hªB¢_~UüßCuuÃbÖ©h,öð>ö@ Zü<ü*o:ZäÃbOBÖ ~CZ¢£©Öb¢bß:üoåß©Aî@or+ä|£Oª>üßã/ã£üãuZöbbhbv _Cýå.oOUo+Ð.bý>h|£UýaC>ðü:Ðö:Bb ªUBb¢ª|¢£r©Zu.hz:ð@<ßZz/ªbðü/UßbZ,ßãå/@üB¢ ß/uÃ|z.<@~ª_zð©/~Ã~r.,ªýã~z/A.|+OüÃã@îraðv>.î.ßUäüýý:Bau+*:©buzðO£CBZab.ua,©AzO<<:O/_üÄü~UUzÐöäå~Ö:¢Ð ¢Z,<îÐðvh*ö¢ß_îü©bÜ z>ßÖ:r¢@BZä_ÐhãåAbbüA Bî*Bh ýªb,ä.AC>£AÃB.oä>,å©ÃAöªýßZý.î,*bz@>r:à BÐ,,A+å¢oU,ür:¢ü©<.bhbÄ~v©¢Üå©©bÃ||ü¢||ªð£ßo>/oªÃ|ãÄA£rbaßC+ÖBÖ>~*v£å£ CîßCÐAUÐßu@Äß:ÄZãÖý/©£ uv+Ã<©ÄüZªîýð©aZbbBhß@©Ã>Ch*Bã/£ðãöu**ÖbBUUCî<ߢß<ö+|>_ê©r*_*å/ovbBÄÜðÄzbb_Z|ßA @@¢îbb.zUªÃo.@Ð+ßö£.ÃîA_Ub@:ý.båoAaßv_Br¢ßªoª¢¢îCUä/Üî/å Ãoühßî:Ä|,+*rîB£©<¢ª.|@A.bvÐÄãÐrªÐüã~ß@öBB/ýh|ð*ÜßB/ßvîC£öÐУÐaЩOÐ:ðUbãüÃ@zh@îão'), (0xDC2AC223F37157A0D09697457E8AB44F431D051EEFC9CAA3EFA757FED77AF4CE6EB384F4C9280C3FA538F8A143E7BC82EBC8AB6A8EE32B13601E344B1A58C956A1C9D6CA05BF851B11C579B7D1286007EBD5130ECE8A3F8B887094AAF4C0254C6FA1007A10F17C2B429058C86A734137BE2C604445BA8816894B42952BDB2650A02D482F27E6F6FA59E7CC3D327721142F5CEBC760E006B419EAF0C5AFE700666A07283C2B1210D83565EB5DED4BE3122A2D66CEEF5EEFBF2693163DF5314A71E765D32A4EE4E81C4C1392FAF4A9C7CE06DE9B818131770B17681697FCD2E2041B79768778B9C345444982DBCCF5CB7DCC48371795C9F0B5EEC712E6CD50207A308DDF7B323F564C1B553C37AF9B3E229D99CBB49ACB6E5288C098B0A6DD78F32807AB3E15504A8CF1EAFB408CB8055388EF4934856CDF651F8DF271A6A5A53DDD480EA8F0000D4D4E3FC2AFCF2EC5D0BB4527B794436EBC28451F885ED8E54C45BE6244AA5D6288E2FBE546A92F95F1C821B6617EEEA999D9527FAAE184EE7659766A11CB81255EE29ED4985D2812F8B02DBF3C2284CD5614C86A57DDB8A75D0C6FEC33C4832546FB587EDF1A113CB13F87F9B3C4B254D5A814FD0216CE802AF7768BEE3CDF332C077940C905ED3B028CB81856BEF3985A1A168AB08623302DD754E7A3864D745F53CDAB4B728AD0BAD8FB755EB52A6B04DD30D3255483A6E4), (0xB106977B3F44B802F1474CE79046CFD78BAED178ADE8E3C655794F0BD026C70260991EB4407F3619FC277ABC904943DF84AB1B36779944C822D125C5F4AD32CA804A87F7271B970B77B87C856E26350C366F86240B908BC65456916F5971254FF5AF3B46C24CB769140FBEBE1DBE59FC9B198E85260EBFEFBEC0A2D08927B206922D90BFEBEF49E9B81D0FFBD2CCA996FD95D33FE2A028E6F04B8802AAE6E0EC5DB82CF02D9A10ACCFA5CC09FEC31DF1160BD3F3547224F204A9CF9F66473FD13D229E19A0B969638426703DD31FE82C2E97EB9F13EC98EA9439EB83CA71458865FBCBDB2403505DA26F6E2D02E61FE5C1A271CF5CA0BD508AB48567CEE59813E0E7D7D7530C072A478EFCA37D6AE7AD1905C227FF762CC53D7A50707DE88FBCD75B4D1A0F4792B49A4687CDA31AD320CCD84EC82370136ABB119AD8BB97AC5FFF40CC221DCD9DD1730D8DB9EE5E2223A730A3A599C6986647E25FFEADB9F8039A28CE624DB003FF3A7C5416E35A7B5DEE76308BF407C538A865DB3A6D9F24B914891FC58FC0D5F62C), (0x0F), (0x0F), ('6a468623-10c5-4a47-a600-e88611f1f237'), ('2001-01-01 00:00:01.000'), ('2015-02-10 17:05:00'), ('11/19/2008 4:38:05 PMThe quick brown fox jumps over the lazy dog0123456789,.;:?[]{}()-+*\%^=~!@#_|/0111/19/2008 4:38:05 PMThe quick brown fox jumps over the lazy dog0123456789,.;:?[]{}()-+*\%^=~!@#_|/01'))"; - break; - - case 17: - $query = "INSERT INTO [$tableName] ([c1_int], [c2_tinyint], [c3_smallint], [c4_bigint], [c5_bit], [c6_float], [c7_real], [c8_decimal], [c9_numeric], [c10_money], [c11_smallmoney], [c12_char], [c13_varchar], [c14_varchar_max], [c15_nchar], [c16_nvarchar], [c17_nvarchar_max], [c18_text], [c19_ntext], [c20_binary], [c21_varbinary], [c22_varbinary_max], [c23_image], [c24_uniqueidentifier], [c25_datetime], [c26_smalldatetime], [c28_xml]) VALUES ((-1), (184), (-7764), (893569276), (0), (0), (0), (100000000000000000000000), (0.3273), (0.9028), (0.7661), ('ÖbAüßÃ>ð>aÜãUAîbrýªr@ã*b~ãÐ|îZuä/>b/hüübAåÄð~/ãZCßîÜUO*îÐü+ööðaußð,Öü:öuA_o£C.h©AB £å©ÖÄAÃß >Uö><ðã+ o~ßÖÜ¢a.bߢZßBðCßrÄ©åu<+,©*b¢¢ð©Ö*å>_îBbÐzüîoAÃhA,©ÄCÃ/ðC/*Bvüß.äü@/u.~îC£ö~v|r*ýuAuür_bðü,B_ýÜÜ>_Ar@UðªßÖª:Öã©_uýCbð|:£.:@Ua<*CåobÄ@aãÐZ./rªb bzäå|åÄãöB,ÜbЩ~ .<~~Öüauo,Ü@hvb h:öoªßUo h¢huÜaªßCÜC>Ðz ã£.>ö ßß /ðZÐ.Ä¢U/v¢*åý++oÃA<ðã,hª ö,Örý ßßÜãÐå.,oåb<Ãýü£AC᜚ ,ª_hCBÖU:_*oa*ߢÃ>Ð:åã'), ('Öb©Aub>üa.£öÄbo<äãOäý,:b+©åv~oA|az¢+u.v,b,o~Ãåðª*vªA£üî*ª¢©_Ou+ã+bð,/ÜU/~ßߪUå*<Övî |ýðA,ZܪÐÐrßazrªö@O~aO:ãozBÐvOßîzbv,oåýoa£Ãä~üªð©Ð@UB ,_bäBOA*|ðz@üAß:b@a|+<ªvrÄOb@£_ßüÐåãbaîýüZhðv:£åãZ:ÄbÖöîðß©,ýüßî,>_uhý,b¢Aªb ÃýÐbZuUrãÄrÜýîv >ýaC壢Oäz:ß+b+AvU|öö+ðýrߣßA<ßåãäãb/¢/bðü+îuhr>ÐÐ+UBü¢< >îBaßo,>|ý>uZª¢ß>AüýaÜb~oBZB|ßäU+ÖðÐ*bBßý.©oÄv/hÐ/~ö£ãÐäZðÜCvä_©î//ðha~Bîåå£o*hrî~î/Oåär+üÃ>åA/.å:ãahA@:Ä¢öªöb'), ('ß|r©öB>A~U|O Brå/<ÜÄ@Cbåb/Ð_öUUZvÐÄ ßÜ:Üüß/î: h¢/boOö,aÄBðO._u_a<: uÄü+åãuvßrUuZ¢Z*b_>b~Ðý~uU*Öå~äªz£b~b.ª Ðhr@äÄîÜvå::ý,Ö>Ð+o£>:,u ¢î¢|Ãv©ðo*:@:Ä> |>ýh.ªðî|äÃvüãvÐüOußvr|ªß@ßAZüv££zöö.BðaýÐaã~,ü bÄ_Z<Äb*ö+ åß媪~Aª£î åvuß@rÐA,|<ü|.ýoöu~aAÖAuCC.U_ßz/Ö,©avå_or*ö zîAOªä£.zzzCuýÃ.ß><ªUbrOÖüîbÃ.ß©ßÄðrBu¢©håC:B_ßZrh+Ää*bUÄä/¢ü~Ðî>¢z@b>z|äß:*ðÖbrOªä_bCß:¢©>ußýÄ|ouü.ÜuÐ~zC*ã ,Äß|Ðz_bÜvå ê~C:.bÐüövü*Ã, ärýãÄ+¢@ßÃããßb@o: oý>ý.hAߢ֣,:.@avühßzîãß/ðö ª|åz:ªußo>ßãßîÖåä,u. ßß|a¢AUo©_>rÄubä öärÄäÖOZa.oöübÃ@aßÖzzß~ü£<üz£B©Ãa@/+uªöb,Ä¢ªBrÄ>ßÃÄ,z|Ahvub+Üå£îÐ:ö/ª Z,åÃðªOüä/Ü<>ö,Z,:>zBa@|Z>bÐå£vvî:.z@¢¢.öz*£ªz+Ã>:b<öZuZäz,/_:Buo>~A_bÖÜãb*ߣåüýh*u/~ß ªUC:ruOå>rh>BÄ o.ÃZ¢äð.¢ü .zOU©¢*Oýß.¢|_£rä~>,åvßrßÐZo:©ß><äßåÃv_>hðÐ_ÐßhÐý©bßh~:h>ý/ð*rÄzüðoÃÖÖ@ªbýUö_v:aª|Oܪý+å,£,Ãߢoör/|ߢ:ýuo:Üh*@ªU@.zßAðÃý|vZB+ßÜ.ãzÖBÄ£+o|ö¢oru_åbhO, +ðvÐ|U*Oîã ©+zAÖ>@åboubz_Ü Ð,bu£+B:,>+h,aý©BZ<ãð>h_ªz*OhãöOßð¢Üä¢ÃZvã£vh,.î+z*+C,@ÄîÐÃ~b<öý©<ubou¢ã|/ß.hî~b©ZZAOýhÐ|uÃuÃAäåzbãüÄð@vã+*ÜÖ+A@~ÖaÖ|* u*><ð@,o_~ðBbbª+ÐÜaOߣ+ýrro£öaB üЪ¢u/~Ð:ußrãvü<ü,Zý_o@~ý>ZÄ*Öu@<~h /ýhzOZÐ~ãOhðUé_ÐBßßuA£Äoä+ÃaZÄvh£AýUüßU/öÖß+*<£b©ß,Ü C.*/hzîA||<åܪ©ÃzÖv_+vZã*ß,Ä¢*B*ðr,ubo.übbb@îÖröîB@äu>ÐUa/ruäÃ>hÃ>ªhaoCob¢ßö ãh*AaöAýUC.:or£üOB+|ðß.oböÐü*ߪÃÜîozãOäÖ:h:+O©ãöOðbu,@o~£rß|,@aã:ýªîCbåvãZª£©rªü,|:@:>ZÐîÖ<Ü:AÄv*r@+>î+Cbß,Cî>î/ªßoßb>,öÄäa+~Bßß| z<Ãu<>r*:£Coã,äAO¢ååuãß~©¢îa_üý~_|O/Ö,*©¢ÄbÖã|Aª>_ðOðÃC<©B|ãªOß>£_ªZu.ZÜZrv>ßbÖBªZ>ýbߣä:ÄÜ£ã@b/î|CZöÖ+BvhîÐ.ª©¢*:uzÃß/ßåÖß@¢¢öÖhãªUö:oäð,Ðîðð:ãAoZ,ZÖÖbCZ,Oðä:¢rh~~ý/ÃîZ+,Zb@åüzý>< _<+B@C£büöböCÄß åã~<,Bð+:ý~./åð+üZ££r>< Aäz. *üßB¢/oîaö/_a¢@_uªBAÃüßbhh++v/_ß>ACAÜ ß:Ü:ü*rCräöÜßUu,£+hÖö>bÜ£~.£Aý>>ÜîߢUua<äAö@/<¢Z|C+Ðåa+z.ýß,ð_br+/aî/ªo/+©îð__*oüCBðªÖ¢Ö_>@:ßãÖahhÖª,U@uUUÐBÄ*aî£u*O*ßB>|@ãÖB¢Ä:+ÜoA©>A:öüÄvßb@o>¢ß~<|© bvAå,ÜC¢_ZÄörüUoOåU+Bß©@ýÃv<ãhüßCãý.åÄ>£Ü,zîß+ýã©Aãb@abhr.ÐÖBrÐ,>ߪÖßüv*©rz U.Ö|__ü+ÖUÖuh/z<üÖ_~©î.ýÜuaÄÖ<, ÄÖîÜ£or|U*£Ub,ª+£ß+ð£Ä© aÜß _U¢vä.>,__ãß_ý* vOð+ª¢büC<Ãýb|Üä+åaýÐ++£åuãBü|+©**bãä.ÄðO©o,Ð> ýÜü/©ü*ªåßZ<,Üüý|Ca£Ð>öaöoBßbuýî,åä aCÃÃýÖOA|ö hr©ªZÐä~>ãö>>å__©ß+B>ð¢ý/. £ýzî/aãöª,¢ÄO@z+>b¢rß:r@UOãßr|©oä,uªOö><£ððhAbr~r|hößr_rÜÜ©voAÖAÐ:ãÜzÃO_|h_ä@bvî,CªaBOöZäÜvzãî©££îð|ýCUß*ÄýO*hCÜü.ubv.*.©ª+U.åba:¢>våuO bÐrv>ðr<ÖBãÄbðüßÄ.b,£ßöÄ¢îãuZ,>ü~ª£îzBðÖ,墪Býr+ªåC:Zb@¢> aÜ ¢©vð |ªßaßßð,CßBß>Ð C,ßða+ãO/£aãaðB©¢u~U*C|B£Ã ~äãÄã©+u>ܪzBýrÐr ,O:¢ã:ªð<üýãÄZ bUz~öoO¢ÃªåAî>vo,+ÖU>äüA,CðO.U©b ýAÐåoUou|Üaö/Ã.rߪ:öAßrZZOãuýu:ößÄð:_vuC~AöböBü.>üª¢rCZoã:ªü.ðU* bCÄÜö©_+*+aäC Ou.Ða¢ßÐÄ.Ö¢B£UãܪÖåýU£_zbväÐZZÄC/ÐaruÄ>*,za ~åC£Äuv*:rýÜOÄ||åýh:îüu@©/_åv@~ö¢uÐohrabA+©uÖUA@oö:.o|.ª©ªýv©+Bðªbhüü,/Ãüb/_zýÖ/.AÐ bOÜbßC>@rÖ+£vТÄBb_Ö@Ü:BhäZ©ä|䣣Üä/vboãîîår/AîÃäªzU.*~ÄZßU>oÃö|Īhuabuß ößÜÃOªZ/ßCrý>v~ C|å.+~z_z<ãåéß,<î:_ßABOöb+|Ö~u |åî>*.ö+~ßA@B:Ã|b ¢a£uZA~rýhªÄC@ýuåOð>,ã*©öåªðýZ>CCåüýhAý/ß~+oÄC@Z:ßuz¢|öߣüZ,.£uÄ¢<~U_aBär<Ãß:röã+ |öO oÖ~Ao+£@u@ZÐ/Ä*Coåh*/A:ABob£/ýAZ+©ðBª:@.ßÃÄzb~b:ÄB*©ßßîhz|öýzaBU>a+ÜÜU@Ã*Ä_Özhö>Cªö*£*>_ÜßßA@@Bߪ<ßbuv©:|£ bZhßoª/åÄbÐ~o@ßýý:ÜýA.U£ü£/b£,Öäå£|.Z©ýB<>:|ýýßÐOAÜ_üªhB|*aßbBOuýZöà ä|v>©@@öãüãÄråZ@:ãð©Ob+ u|ÃbC,z:@bZbªhäÃAý*r_¢ß.©OäA¢ª ¢orÄhüðÄz~Obo~rðzüU¢rÃoܪÜv+ð@ZßðÄ©ð,.ÐÄCvAª+_£ß:v|b,ühðý.C+Ã_ßÜz*o/ðZ@åU@>ö£|.bh:î£üU/ö~Ðöüz+A|:vza,rîOЩßå:Ov.abuU£hßbðrãO |~å>ö<,U.©ð|Ððz/_<,<@üUhÜðz/UBO+ÐäOBð,@ÄäOª+zÃîu@£+Ä/Ãß~ ÐÄaoöýz>_ßäÐr>oüê +åßBaBðªÄ:ðAA~Ör©>_îOZåÖäbÃOð|*Zvb><åß©ãhbr ããÐz~. h<ä+A:,ðB*/ävßoA.üÃß*.hîOÖZܪÜ,ª@Uuß.Ã:a<ä~>ÄOö@Ãßz*îªüÐ örZo¢ zöß*A~ ¢Ä>© <ߣrýßÖBß>:>oãä_Z_åãðö*rªãuZ>îÃÖu<,@_ãîC.ÖbãOu ß:ö_B håßÖ~är>£Ü~ßÃZÃ/*a/£Ö.oä@A,>,ß_+~/b~~ÜöüÄ¢Üý>a<ð£+CöB:|ÄÐöU|<ÄBßuuuvuBä|b<ðh£o+>|:ãAĪvhå*ä£_+OУ¢:ZzBß+:h:äOzÄßä >r¢~ß,O/A£Z||ðäz:ö~ðCUz_ßhßußa|åöO©_Ab£åh£ÜÄo~åözaväv.rvåbß©|ü¢ab.ª,U v,ZÃß<:ª,rUåîßÖĪ_ü.©üvü OaÖ¢Öü>ÃýÖä|~¢ÐßZ©~.©bãv+ßb.ߣZhz+ª<Ãü£UÖrðbåhAðUª+z©|£Co>vöîbä :ÐUuaUC A ©zOÄÃ*© ~~oîßðý>bZ*åOý+hArÜî£b>@öðª ýah_rr ðrOÄuÄCä_>ðbÃ>~Ö©_Cî. .b~/ö*åA/OðÃv|ÐöãÖo¢üaaäðß.UbÖhaUaAÐÄ*ÐÜ*.AÄ>hö¢|/B¢Ö£Ü~ßba,¢:öUÄð~,rÐZÐ|hv,C.v¢ß*öª©@U~U/ð£* oå:Üa~__.ßh*bª,+<,ß+~v@ ~r©ahÜߣ,uý+ð .ÃBvðC:z:£Oäü@äüÖå+Crßî_.£a>üãªA:oýBZz*,ävÖAßvßZÜ.A¢a+zÐ:bvððCü£ãaÖaÖA|a|r|îãÐ/,ußv_hÜßo:ðý<Ä aðîbZãýÐß öAbßß.îТåÃhä/@brª|ßbbZUr£ýÜ/~,<ýð~BÄý AAväã¢åb:_u¢+OýZåÖã~o.hZA_ÜUrOzUvà a~ð~|+Ü|ü+¢.<£Ö~Ä+ߣ orOð.©Ã>î.ÖühB+Av hÄuîUäCZ~:~~å/Aaã,УoÄbbböå/ |+|:bÃðBvözßCBuî @zöhUýZ¢o.£hãZüÃüaBAhãÖCî~/.ãbªäOÐ.|>rz,vßåvZü.£ ChBhäOÃ_ßu©_äÜCßßüCä.OÜÃÄÖzü>ßöoÜBÄî@Äz|Ða©ý£ã.bÜ:>azßðö+,/CäÐbýv>ÖÜbrZb£_h,>ßAä*vOb öãýoÜ_hZrÃaü©Ähb¢ü|o.+Ö©_/~*|Ö~_a© ©Ü¢z©hÜ/ãC.ãbîÜÄZ¢åî~b ª öÜÐ:C<üa+:ÜAZðhÖÖ~:aüÄ+býУ:ßÃ.<Ä¢Ääv£oß<Ð: ö.ß|ãU¢îäýÄr£~öOå©ÜßAz ©rv>B.£_uUAC~îB¢|b@¢Äî@r©Äýîßü£Z£bo*|Ö_ö¢<*vÜArÐ@©ªÜÃbß+/ÖÐUªÖ<>ÖÐbß@b/v,|~r*ÄCÜÜîÖü<,©<ðOA:ÐU*äaä@bü+u¢aТö<Ãý>a+b~î aý_huÄr>Obß,ÃZÐha|ýzoZßÜÜ£ä>ãoü+<å:UßuåÜ/@__hBaÄÖå*@~ªOÄoÖ+|ããAB/ðßß> Ü©uä¢ÐZ£Ã£oÖüß:ßåÄÖBAä ðÐå@/ÄOråU_|ä+Ð_üäCÃîÃðÃu££bBb,Zð*ZhÖuãð@:Z>.Uª.hoÜuðo.UßrzßbhBßäU¢@bªßÖArO:..vüAuîözo+Öðbz_îAä+*<£oªB*_*arÐýöß,ð*Öãuo>Ãåå~aZväý ßCöÜB+öå*~Zü£Öýuðª_vaoOüüZÐ> vBor,rãå¢ãýßüå|rÄuCªÜ*£zÄ £ðüßߢ:_b>hÜv|h*ZÜ|:AvªÜUbªî_î/ãv¢üCîzbu~~v/ðßbaªa+|Ü ªhéöÜýäöУ.*ür*+ÄB ÐCßÐüz:>:îZÃöäbîÐb+rßäbÃÐ>ärv/uoOaäAåöý<@*>ã+Ð.Ch/£©ÐC@åACaðýAaÜbå©:*U ýBÖbßß|.b>ýýÜö>bvC>ouuäТ+ãÐa~Cý<ã©Bé¢@Üßãza>îîouªCåCßßåßöh+hz~zz£îÜÐöz*bZoîh Bߣ/î:_ývUbzýA@_/¢z*ubuÄrª:¢ðßrhÖåÜîãÄ,hÜ +©Ã/üZß@ä_ªÜCA~öUzýîb:bö_CvªÃÐUo|îÃ|aÖ£Oß.ö©_üÜÖ î:Bhåvî¢ÖåãaußhZ/ur Að>©ßB£@+,~*@ZßvoAãÜöUäßo~~ß+CÖ|.Zýü/ ܪ,U*Z<>ðAäh._|_b©¢ä£>bÃaZãßBaßZÐÃîb,Äî~ £©|öuÄraåuz*|©Z_Ãub:Ã.ðu|.Ä¢>o+Üb@aã>ÖÜ~¢ÜuÜ>ðoaª@Ã<ßC¢UÖ +ßý|>Äã@zb©/Aö:>ßîrhÄ¢vÄAý:îüðåÖbo+ü~bZ>öü¢B O<ÖA zÐAª¢Ð_Z_>vö|,oî*ä~<îÖ¢ÃrÐao+ã>Ä䢪oÐ<_¢.Z>Üuý.Uö.ߢo_.|C*.åÐ,ðÃý|böÜaOåzüb¢Uã:r ÜuöAå_ rbb,b©åa+ßÜ©ð<:öuðzr:ßzvåu_öOü©CaÐÐÐößã£bbU/bßZäzZÐC~ å.ÖÜ>ãCðã.h©£OÖÐý.b©h,|äubðãîU_@ÃäzýOZa@huãz+oCB~ZzAðr<äå_/î.Zöo~oüz/ÖßhbhýOÄ|ãðß~bªö@ª<,:C¢äBBãv©ÄuOß©ã>OüÜrZhzÄ>bãU*ub|<ðü£ovüAoðAä¢ÐAîrBÖ|ßvBzßð*avªî/¢©ÃäÄr îýÖb+B/BÜbðAU:@Öuã£ãUîöÜ_aªuöAoraÖä|brÄu*ß~ü*|£üCð+>rhÐåÄa<ªöÃaC/<. ý/ü*¢CA|hh£©ä_BÃ*ÄoÃãb¢|o+oU:î¢å©©A__aåBBOÖ|+ßÖ.~zÜÄ Ä<ðß.OUößBu@ÖaO>|o ãb~©zbO*¢Ö£ohî|öOCÐCã¢hZB@bªß|îAo/åvhߪÖuߢOoöBªrba,ßb>rðZ~Üa~_bä¢ýÃAzß+>ýåaaöhh//,Ö_@rBö©*ãUãУZ_ _ö.|îu£åão@î¢*ö:<+©ßAýCb©röU@uªðÖÐ _uzÃÃvªÄbövî~zjklÜU.£>o+©_Z,,ÖAÄÐAhªO<Üu.vbB,z+ðuA@h@zÃbböahüuzzð|o_OÃaªaaa,/bü+O+o+UåO.*b_u:£vOöÖoãhßÐ@Aîh@zZªýý£ö~böbb+ÖrBoÜo*Ðß:Ãîhu+¢£ Ö©Bb:_UßÄ©hý©C<+¢£*UÐÜÜ<ãðBä.|ü.ªÐZãh¢¢_+£bÃ:aÜ£äÖýZBªýåªr_/,+hÄÄ+öãÜÄvboîU_©*bß<ãZ@ ªaUª~Z¢ðü@@rÜ<,åß|:åð.rîßB>.åüO>v¢Üü¢ ðü.UðÄa:~~.ªAÐb:.rß ß<ßuAa*AöoÄ/U<¢>:Ã<<î @îaZð::ßu|oZ@:OOrð+ý@/åü*_B|ýÄÐ /<üåuÖbå~CðhZüüOzZ<_BîßbAAð,*åã>ãßäA>zö:ä<.,>ÐÃ,|ðvÃuOu_©åärß©_ÃZ/Z:BðÃý A©¢<.~Z @ß/¢hv£ª *ª:Ö¢röÐBb/UZ£Uv+r@ªbvz|äZãCboo£äÜ|b_|,<©Öz@ãbUOO*ÖbhývBzåå *ߣöîß,@boÄßßAðzöÜÐßb©ðÄ,B>ä><Ü©ÃbCãB+¢AÃÐBA£üZBbüh@hBZÃîö_ßZ_aª,bCÐðbr~oÃB |åb/ß,ß@ U@~ß.öoãßÖoÄ>£~ã|OýÜ|+:aöhaäBaåÐhAÐ*ööªbU<ªUußÖÖåb~ãvözÐßä.Uu>bz¢©äÐßa>b*bÖ+>Ö©ðÐ@v:öBuOÐý|B@+ãÐ.z¢_üaðä|@@ÃU¢*_:©aã/._ýUaöOhCöÄ~,å'), (N'AaßÐ_îaãh>ßöBBzýB.hý>üoýbåb_ßCãÐîð.©uBî@@hB@ouba£Ð<üÐ:Bbãß©£ãBð~ã+У Z<Ä_oh@©î/ /+£*råuUå+.|*ÜÃ,,<>ª@ßß+ühU>bÃ_avå,h/~+üo>Öüåð*Ü<ÐCO,ßߢ_Z+b¢ÄrOß.Z<,_ößC@:AAäb £<*b@~aAÄObð_a£hBb©:ªavZü@a>ÄBÜ¢ð:uîÄ~ãÐrAbý.BðÃhãOUã~ТrbB'), (null), (' ª./aBÜÐ/>uðv~öZåå~z+åî@Ü*Ð~Ä£<ßhÃÃ:|üBßî,,©AîzhÃðOu.vh/Ã+OAßa,ß|å>ÄîÜÜ.ý|v|ß~Z:höbO+*/öB_£hB£bzö|ã:üßð|~Bîã+|Zî£ÄîBu©bðOÐüî¢*ZÄ.>ÃüßУ~uðÜ©.boðZßã,Ðöbv@ðZuäA'), (N'r/äå bðb åzå+@B~bªß@îü:..:å:/ÄOý_är£ZAüÐð .bÜ,h.O£ß.CÄîuý:<äO<¢ªÃ >z:ZA£Bª||+¢a _ ß:<_|oäÖýoöÃ,@/oýãТ bAb~ãUãh:ý~BÜðîZu<ö:ð¢£@ãz©.@ð¢ÖîýÖ/,üÄða¢@o+ªªª@äÜ*Üo,/+|Ð@|/ª_+ßOÜO<îvÖA:zBß<_ö+Bß/Oå.bA|©äZBêßå©ßã©UA>üO.Ð+åAbªÄÐý£_£îÖ_üßîOböЩuÄ,Ö+Z<Ö.ö/ouüb|>ro_uª.Oßî¢ýZ,arªäöüUÐoã vßbCu~¢Uh*b/*î,ßBß~©Ä©. äý:bÜBðÄöäOßrCÄäAvhAüÜvö|Ohî~O¢~,Övuh|:A/ <>Ä~~ýCÄ¢:_+*bÄ><ªüaCÜuª./ä<Ð:ßBª¢ZÜUü~hßå_Oba,O@¢Bãb.rÃvCOhh¢üo£:ÖÐßðv@AßuUub|,b©üC+üAr.~@Cß/aOî,_ªv©,~*~ßUrüZu©Ü/aBO_ðî äß<~ð.ª+Uö£z@O>BbªOýO£+.AßrÄbB|b¢ ©b~@©v£îv ~*vv@ýhöÖðhr/b_CrîZo+~©O>/>_ðð*Z,AãÃ|ðrbüªzÄO<¢@ü|bÖªCüý©bÖb>ªAß~ãß.uä_ZÃuOÖZüýAßý|*ä~ÃZbäaA©üýo_ +äbC~¢ßOßã£+~Ã:*b_Z*äoZ./ãb ð>hOCåðUü©:ÖBaäå.+©ß~ î/äOUzÃ+ ð¢îo©ª|ZÖ£Äao zb|b,*z©bÖUbörr+©C ýaßß<£,oðãCãOÜÜ£aßäBaaU_oðª£*B+ýª©Oz@Ub/ar,ßüðbvo|r~ßa üÖU£|AÐßã~_©|ü¢Z.©~ßhîßbbßbUuza Oäãh*_©/Öv_ª/©öÄ£Ðö£OhZ@a<ß|ðªýð>r<Ãh>öäýhbå+uª,ã+~<+*hb~ häÐB>ov¢BurU~oßb©bb,oÜä,Ä|a@_ob.Bß+BCî£îªÐC,Oªß/ÃZÃBýrO*ý*+öoÖböoßhÖßÄöÖ.oß.©hvO~ðßßAÐCv_©: £ÃÜO,OzA_v¢ªªbb¢ª¢.uÃo+hÐußCB@ßh~hoO@üãåZß*/åuü£>£ðvu£©äå@_zÃ*ÜðöäÖbÐ+aý@åUBZðªh>Ä*o@ª©üubUC,/£b~BÖýUßÖuäð+CaåzßBýBOrß©~/_C_>Öß/Ðîa vöö¢ªC_î>@ÃO©î ß*ßäZzÖäÄü@äa>b+Båý_hA<|bZÜBðäöå~.ýböAÐa>BU£BU_..h~Z©+rÜåußý_©öãA£Z~>ý/boübAÜß<ßÖ+©ÜZ£ruuurÄuÐ<ßo.¢:üöî/Ä@hÄ oýbÖýUoýo|+/b+ZÜÄã.<å_Zö>_üuövªãýbOb+_._ðãÖöîz, ÖhÃÖ¢å@/:|+Ðüv~_OÄü_*oåîö_bß*AOh£århîb+o£¢îübßü~o.Ð~.ßý~UÜßbãÐB.+ubbb:¢B*ßåÐvîäC|<£öz~ÄãîªîhvZ ð_<ªãÐî>ÄÜ£U¢îv ðÃ@+bhCÜ>Uo:|>ßb:üOÜzA+£üöo£*Bö£Z|u~Üüã,+ß >ÐboZßroöb_aîzä.hý:/,Z@OýZUZ>Cß.>ÃäððÜäãhöa~Ð| vî|Ã,î+ðuuäoa|ð£ßvh>r/ö>*C¢z:Zð//üý+ö..@hÖ£Ãb¢ävuZOzªbCßöb*vvb<ðZ.Ðb~_Ã,äª*/ßv/Ðv+BOB¢ã+ão/åbhvBZÐ,¢åß©©~ß:aÃÃAâªýåüzß©~*u.CßzÄ*vhbäßã:Ã.~zoã©ohÐv:h+CýîÐA@~U|Ü<Ö©/_üßßÖ@O|Ä@@Ö©bZ+|ä|üooohÜ å:ãßß,oU¢oð/Ä¢O|v,rZã_öOu¢rÃZ+ß©b/£ÐÄîÃC~//C:CoöÜ~åÜð><*>£~rr<üU+U,vü:ã*ÃBÃ.BãÐCAÖ|üzUb >îC:OÖrÄåü Ð@BßßbU©ð<Ðö|ZÖ >ãz£rßArO~üîb_,~v~öüöðÖîb~häÜü_o/.Ää~ hö>å£uB*~+bh©ý*Ü,|B,~¢©O/uAß:£ß@aö/aãbru>|a<*Ãäuªãî+ð©<Ã*bzåß <¢¢oÖ.ObA|ÄOZ+<<:öß@r+A*uð,©oÖÖz/Ob,äOð:b_ß ©Ö+Buä¢+BvhC~vößa@ðvß.ÐBZB¢va <©|ÃÃ:_z/zh,robüß~uC:@ª__Uavßhu**Öß:_å~zbÜA:+~.îaÖãÖ:ý.Cb.u>ãr :åã._ÐhAýrÖ_*,Ðu:å+aZbC>b~A+Abý<ä:||@OåOäÄä_Ã/bÐzrܪ:OA.Ü *öÃÜýöuZÃîßoÃZarh|r|ߢ@zbãv,a©.oßOßð>BÐî ,ÖOîh>>ªUb:ur@Ð/+ÄoÃãva<©+@:bÄAãZu.ä ,î ÖÜÜ¢üðª©b>C,~u>hÖÄuÜýA__a¢öýCåBüßßðb>+@ÖÜã,|ª£vbÄZC¢Oh ÄUu¢*ýª_r,hªÖZ:¢+OÖv£Ð/ÃCObZZvýB*Ð/ð övB£*¢AÄäã<Ü< ãCýOaaC_Zo@ýßöhý+_/ðu,üðh+oãbbvÐ_'), (0xA82F7923662A496625B3CD58E906DD15019C700D5F48E2AD60858A9437AC118D0E99EFA02BAC0C52A44EB1940E8BEAAC3617AB238573055F4CCBC2E19FB52F78A13F494F173CE9548F1E6911974E9FD59ADE5D1F01EE089B948F545FE92BB2EF1E38F3CE419B95FA2D56936609F4C8FE2CED46C0571077B237AEBB87E8896B646B7AF35E5BD193FF4963F1AA5BA191A0C75533FBE5F2970EC1409693E00D11A4EB2EFA8F0069A35A5A4677F41ECC56961D1BBF92566F7F79E3E59D1A3A001F3B514DBF2DA6019F5DB2D8A19E7AA3EFF4EA0075C44E7F4D7CAE80AC1BCC882059273CA2D00D29EF1B7C61E07DCDE1FF3FF5A8303A8A5AEDD200437E2655839129B848763E001FE7C0105A48EC9ECFAECD816C262358E6CECC4ED0D0CAABC9C5F9D0B7C5846AC03ED5C17029301200333094B0A4E85C6ED0D179), (0x304F1D1447944F1CE70A2A62C02D5162E8BC9EBA4D9CA036FA24DC9C61E6F40BC0D00E85A45BE19CC2E44C26694EE3BB0A0CE814DBEFA194AFE71922B7B2BA01151FA2F01FCBBE8DDA01F8694F7ACCAC41219155FDDF2FD12F79D6BC41BFE50F2A4B104AACF39B3F4E5B39D9F63845351A6DE09520650336EFD0C1A6F4014B1B1CE83F036A81004E865207A2A555DAF634A1A1D4DE4FEEC448D95BDB32F54A4C0F1EBD0DF941CB996C920FCE5E609199F6CA71535F773CCCFA7ABB9026251B9008BA928698CCFDF2D608674B402066E748C1E56783F7ED98E1F0137F853A7347777EC6A4CE0A0029CD7E7C560FF18CD913D448643FB30D10CCFAA5A8B87D6D9C9520D4C15AC2193DC0BC9A047B9688F063396BB0F10E07C371B5D7D36558704F11DFC1EF1CCB7F50BB0AA3831908953572B4457F12BCAA8618104FA4EA45D8684B4AF39BD498D397BA1AF4E76A84AA6920A260B013F13D54353BD70B7BDA6676313B37CE15FA60D9E0ADC5F7C7C31B9466E68448E428555A0C9E6599C1C71CDFB47EB52F4CDB53254187CF652C468C722042A595551D9109E6DDC17694C7181890E542490DEB488A925E075D58EF2EC611F3797E22878997EDAB496F19DD91796EB6D44603436434FA1A02F61534B0F6AEFB64A14E99F6095BAA5B61A2D971B5CD8DEEA21AE7C2CE8E448407849282B9FB52C01E78F02BD5C0CBEA59E7039221), (0x2987450EDBC73896120915EE84C828A2664F18523DDD6219E14FFC69E68BB2625E3869FA73EC76F9E5E1DD21BFD1462230449C4208560F4C252C2C8CCACFAF8757B38F4C5F2E2F7AD91F6D5BFF40591009DA39A1EE705908291CD447BFEA2E163255CA0C41F9C201152269E8E9B34CE4D21C82EF950D99E75987234259E7BAEEF15629A9764DCE1018378CCC07701F75CFEF75A2683F8024BCE2B3BAD57FA72D677AF79289A26E854E72D75D81CCE0E868AD736A721886B1D505ED939A143A98905E648C788CEC2C81EF54F56723A2F002CA52280C3DBA4FF446BC84B5DAEB3A373FCD23675370DBC146E883C3904AB262FD91CFC2128B53A3159832D06777A6041ABE28557F88AE5A7666C654378B63FB0922B8491B7825B37A7F51BB3D0B59CF417EA9D2215DE274E2754BABC5FE6B8A3436C645BE5DE9A29874DBFF36F31C6B0CF712B9E190D9AC3F4366A52C79EE7B14C78606451410E4950739AD81E23DEF59E09ECEECB1A8A35D19067AF643751E8660EB6F6C1525F8E62E24DA562C2B5C05774C4CDA208F621FE2A92B0E95ED51911B2621F7CE8343BAA6E7BE8DCE4C30EEA9757FF7294366D18950896CF9E95140D2483B060A6536F408913438D1D45096783D64206E5A68D7BF506D7EF9D7C0BD957DBB85112AE4443E8AEE980F2DFFB5FFF3F3BC8431D177DF6446B9F7B8FA31D077A35319CB844E5920E1E46CD0C89150B87F06E3043864AB43A5ACE32A4C858FBCC7988AAC9B336EA462644FED0B0F9CB4693F38F44DCB3E3EA7D525D76B2FD45C54AF082F06A41C4B983FA2D415BE3796102EC00C4C9B6FFB594C04C60E9639328FF3995C066CADC523ED5C0E296A29E99E8FC73C6EC70FB8400CD6BA9F563C01056F442124DB8FA480FBE95F3F60D2EE221B287ECFFDC4C7E4E01BF995F225CCB05A08B92607C4C2FF22BB73DEAF79DF3AE798842EBD3208AB7C3D44BF960E8DD51CAEE45719C81A57657FAC4151E934663BBFAE5AA19EF227000EA9CA7F0269132D9DC1019488201F7E2CC83E85C65A9209DD84D66033337EBCBD570B1F50D763159814B32833D1B39E8EDC74D5B3A139B316C1A17E92B3FA694244D73015002E556528EDB2A669D50BD038D157BEA8081B1D57088E35E483E51A49E5EEFA83898EAD1F708BB4870DACEB95AD5AE1A2AB9A3CBB12BDF79F1F80A507985D84E7114DAE42A99F377C67964A5BA39F372903779E4BB13E70CB960EFFF0E6ACEEB028048460AB9FF80B62BF547C739CFB7F497C0420BE3835D2DCE2AB9B9F4796BBA79A329F1BD67D647F92E8F1EAF458FA127FA66AA7CEF1EFCEB284C9F35D6C1B2999D4D9695C6473FEA0A12C5043E7E88AB1881FA02C13D9A843D06951B3702125CCC8511F7E91B61B336B062CC59F8BCA9C3E42D54D7AFD85FB30268BFB214A308006837B95C80B1FD1046DC10CACE3A4459EB5752E4CD851CBCC244E6B2A1F1120D6ACBF1B1034D3322203490D3B794E4D81465D6CD502332D32AFC9A4BDB4A7E45BA035FF23893569E1420B488F438F53D500E9E4C2A54AD47892E9606B2F756E5C64B29B434F29F810F38A92F6EA9DEE2076CEBCCAC221B556608691A0D5FEB2CD9CEC2A91F40F86D7F0D3CF1BB7DE8DF4FA3FF460B8A39943FD45E2C897583BF5D8C559FE725C2C6748E5DAEE529A9E82F99DA595095114F953E793AF2CBD3F9798DA43F2848F819E138D17D2C9AAF063A65FCFFAB3A6EB86B060AB8BC87D3A8BA642567857ACFE691B07827C39422FA8F63008CCEE44E4F2EEBC4123E4F6D596538C2C8753780CFA6165DEAC236F4D6E30029498746D9C615E64899A6ADA852532EC28AC15A8547E240D6B886637CE7F6FD3F2E1613C21E6F0CB28EEEF719086E0B87A3746A05988AE1673670113FA2696092B97E8A3C3F5CA42BC4A7F658EB37DE5A8ADBD9639CF796A334BC8B9E4DCD00258E546F99E3CF5856C03E30E084887C0EA1C6B4D69FFD05C1D7D70782C115EE0797D0DA86C83466CB8372936EB6A62EBC308CFC87183995815EADB20CC7C585BA503958B3BDF5366D5FE9431D69A70B21B85B52442966EF6E4B49282A8269F3CDFCE90E8D5D7B0E4B468F272EE67827B79290547C734190F959FA6864CD0BEAF5F5852070988DC44D4D16FD9A3FB077C3217097F205875AAB4815336302998E3AA421396157A72F14CC172F6C5406B9998295335C73E8E06E3A7528834A613AB388B2E60E87067B7A417325FE67EE57415BA9D06D5631C6BB40CB36D27EABCA5ADC7BD39110BB027C29C90B00B2E2064C2DE727A080DD5D56FC2ACDBBDFA8FBA5A8DB21EC1AB620A09764439D26C5F85EC4EAA4977419CA0F1E7CA4F5ED469C80CD5557E7C01A2167B687192C99B03036226EF6F4F454318F0122CDAE113AB340C7B2CFD16E109EAAB94CE0ED009D656E4C6EC37E5FA78C6913C8D69D4C83567BC3C864D6E05EC811C04C3BB773448E73BD6F61A27734F1102656BDA53A016E35E6652938389E7DEDA6B1AE037BD4F5DF3A62DFDD21A4048ED744A099A112D7CEEE05C10E2B463B1EF1740BB586EDA45160EE6AD721810442609A50F3FDE44C83E9EF156613F7A3F437B0EBADA84EF7F9A05F28B2B7F0AD6CF18EAD90E547211D3777DBA7D83E3D694A76AF6095669A11926743AEBB89DBE931B874955A030EE09FDE76306350116211CF7831513CC79AE48C0E7DF38251BD9BF2661FC9A81F3777BED0C6F069AE3245E18CFC01AA8804E0D9A0DE0480FD1D7CB89470EA01A869A040C9926C00AA8ADDCC2811F565BBF16A613EE0074132E6B1C34A37D53D584449134BB0D0F5A8E03F15F03858EB18170C930688D2B8626F1DE2E098B662B59073E3C8D229FB2074C84EB0E140FA8DD6AB332B3226DF7180B0ECA2FE150029CC606FC4751235FD117291B08407711E135509ED83377369A46248213D48226FC814E480E13618B4754619CF951EFD893FCE8FA90B12A684ECF61002DA14BFC94031F86F12E03CDD3C45784D2DB3D48574BEE17EC88954A57E6FA3EB1615EA6086508F63168E765F81B26CB59A596729119A8E2B233100B6DD42E0B34C41B7266B17B6CD34716EF64891ED062CAF1B14F87AD98B87CF3D555FC885D39DB3034FFB465A82A299F4A02B97E29153FA9A3E37DBBAC1782BAEABDA617D6BEB9B58858EAD1AD65488726E76296FEFECAC01553E57ABC20831D7CF97AEA8411C98B4803F5D02A6EFB3D9AF595C5B4ECBBECF3E60282D93FF967D4CC54B4EA5E03141ED74DFA08F995A758A7DFC68ABE68903D8EF79D0F46B1090A8EFC5D1947533CF280A7DC9EC1E4F9515A2A315F33DD1564C4765B676505D72544F07AFD378E1154A3D409178CF17CAAFD4CB41C80A9D7B1E6F954D0F7D48C7BCFB65AD169FC19CC18DDBC5FD3FED7D2F9B16A1850BBA59A18C9163D39405CCE478E47D597AB400032E803A2ED78DDE72181D7466A732B1410BFB8A0E6DC92D881ED1744B6023B4E706AE667B703ACA0EB2E1BB7691664D36333C4D7F39F1A56562A21006099301F4688D5008DC35C0D1317B5B7C0DA6E6B8844E1833D635BD04F8F108CE2AB4051FDFC70E04064459FD6B6C4DBEA63957BBCB6781CB7ADE1E32D04B0FEB2CF2B67D763B9C4698E2A24FE41AD879E7FE6ECF994D02C332499501A8DB33CB347EC068B5D0486AAD1122D8B531D76FF5A44AE1DC3041EFFFF33B3C968A9DCDBED70B755A6FB417B60422882A2A0DF072350C048041EEF42CE078B2951BC412735529DE36521585E0332BD81DB9B5C5F53ACA617E993D6CF8074869F6F172AA400014C5002FCA102F86145D1616E6632AA2CD6A5162A3DA27CCE62F19AB9EEEB081880DA4E0C5D570AA31F874E046D120D53F44241848DD6C3AAD33399B0683F7259C948EE8BE39ECF7E9A720BB654786150E346C4ACAA848BA917A43829BD5A3AE015F43B2423816F5573C2EA1ACB0C565BD149CC217AC6AF45BD44743F66A5C13F372BA0603C3C2C61D66E38E79970DE0A4EDD57738D19654E44F667DF0D30EFCD00AAE29F6CF51E941C6B4B0C8DC8AB4C6569F0894D4EB11EC6511B46D54D54A67E6BE6EE8D3E9E58BEC35622CD58C07C4A1A79A43F667FB2F8C3D91AD9D7BFCF17A58D22E1BDBF26CA98CA8AF78F516D919FFCBBD3AF6618EB34F5CA65847EE603860B28CB9E9A8D5B52D9A79BF4BA69726C893ADB03FB673E7436ACC7F5C14619E487708428A1F2056E6081D5BF7DF7798C57F8FB440B008BA3E95667EEC66691938DB76D4AE549CA96346CA37A917FF73F323B9DC94BD5D886E5E03E4B8B16A8FAEF4231C5892FA60D2D640F9E5D10126A5E28BB8BC8C748B8DEE664050A7F0B1EC4A88A4E4D31B502948F9BE6C53A29D5CDD3EC635B1D3128FA79E7A3CBA103AE59F1D9B485C31D2C72B8F6392C61F3A3BD8F373692A8C2A7766254D34A1237F28CED8DD36074500AB6C0F0A226F8FB998643E53C6ACC1BB12F323D226E4AE25F8104AD3FD31F42483F2D80D1B71F807E66BB4D062CFB88BFD1DCA42D362D9B6BDE9021224BBCC566009CFD3D4B4AF90FB2BFBBB3FCDB32857BED6EF77B1411119114F326FE5E32AAF5E60590FE4B7387E2957B7771E86F025D9BA65E4ECEEBEB8AEBAB3756D211538C11BD16D5A2873079E714E5999A9FA9A5F0C962B7D45B27FB1905129F3C300F8427EA602A592DBA1476E467B90552F04C02916609AE9CB8B5951ABC9D75903CB6046171AF3E7E4CC30E4D41EFF46EF5C614C69DAACA05D58B32AB953E711D9EE5A7B0B4A4E1400D8345A2FB605AC8C02625F588AFF392ECFE8CE57D93E90E52F1AF5C4843BA51E5D4B81A65270A743169EA6E197B94EFF115C4B517FBC37A9937500AB1FD807C6CD30FB4F6D92CC4F418B413A87BF4D65CBF6A327F0439EA113E802ED7FFC233E96E01456CDFF918E900C1FF46AFD21E427AADF2924EFD689A25A3B759FEEDF456812A3A7AAF697DC552497E433AA3616C62EC5C51CFA09B7099AB463B42BFEB12CCA9C48597A39210302D40047E245F81414AF61190A286E18EC9E004224183935D6C7791DFDCD4BE594C21A25F96F1744BC5FAF7C8D9822922E2F6CEC38EEDEFAAACA712ADCEA2647538B84481E481F8D86CB85D478BCB84E94D6EFCE606FBCB5E32F7B3EFDFC67D22958190213DA83E61FDF656D590A71EE122285F5FA67E6F3CECE54EECCE09F9A53B3AB1093B63ACA5309AE810A4F6CE8AD8D2CCB6671D7C1612533458595192F4FDB19A55F615A6BF7CBA2F0B955F98F617C414FC3C423E1DBE9AF7E72E534BDF07F413F25C7994C32C0D39ACEE7081B3BA3E40953C96B7BA737C965B1EBE91286E4F03A04CA5999E2F50CF2F08912F4E19442DEF12B6A2713D587FE0E239A56E7C113E9E6CE06715A5A265EBC688B1E14C4741DA90A115B7AD9263F325B9BBF6AB61B2F75391E238DC18496F50B6AAB5A69E939AF7CADDDAFB86F0D97D73EFEBE76F4065D5BA8DBB6509FD7858A566F7E8AE4C872620FFE084D8FCCCA008BA69295E88E17645DFEC10D735EECD6582551FF9F1CF2767C5C66F5FE0FDBEC01B5C4E944FF91D8580A2CE60764FEB11131F55A6ADA617EB42C198C1711664E22E4FBBD89F391588389A784E00C6F176DB5E4CC1A71713744562528D605B136A3EEC3127931371D909CD6E122EC8EA7BD022E613CAA23B173B47923CE78827DC870E101495C9E2C8ED72B8D9A800467D78D6BD3D74009F9BB01AEB4C8034F281A5918B1FB8D5E506401E2558E9616E3B0014C410CAE968876E74647BDE9647B8803734177527C5A2F1B7FD56DA47B14EABB04C6B70E1B6BB2904B043716A28AAD76DD7B22D56C6D84F221E12EC11AC27C315CF2D4ADB489E8178ED70768130878E537F6C6FFF2154EA731C4EC3A3CF185789805C9AFA5FFB253931B5695562CDF19784989240B7C3F47A43D6BFFADBDDA9D518ED01D4EC94F3834736CE6BEB94114E5C2B1F368517D1BC6820B6883C2A5E530C933D74CB1CABEFA50EF881F5888EAFC5709DAFBD724F011C446CCCDE6A471CD77A5F58569C8240803090771E50C7E09106C3CB8DAE9699433C5886B0DE113AC6DCA97A28365829EE5D2F8DE1D7E2CC7D8C3BD7A77C8E28E4C5141A44FB8FA11E56B142A64DB75AAD99DD307F08B76B598B0924A33A93494D819662213DE4F2CD8E6E8B26A02630D4E0290D9F5EA9DB0DA9C1B8F16BFDE4C267F424B754386FB5EA62F19A2C45B965D94FC31085AAEFD7BA54787C2B0062908AC9BEAB017880A7B958B4FBB841E1630752181B3AD33CBC054DFCFFBFF389EA00610F63860D6460CF1B572DF6F31F79731575D9E84655B68C01A6B37C80E7C6CFCAFA57317EDCFAEEB74C1F7C0FC6112D838CAA7EB001BA0B58D78567B0E44F33915E2CF8C847F4387AEA30F9363A7C3B9486F8F33D481EC8404BD8A757933DD3FDEBEBB19A19653C977203C5D1C0D51E5A4AD22AEB5BF6483F63B87C6E4DE0E7AD5CFC4A4FCAA07B21BC5BCB4459F67F76BA4C0DC013E8A2F5A2723660E8CD4A911B1875C48ACE8FA957092EFF2B04E56C3906B301D3279A735A55AD58691B38EE1139294181BAECEBBC646809BAA2C99D8CCA26E11A49BEF47D016A3421363F3CD03FEEF1DAA4EA7F1AC8446EBE90B9B78B0FCC9FF456D4C87B35C3804FB7CA85242C387AB4D7C3E8DFA7C751044F35ED47B3A8116AA0477A6B2576A5E06A2F62FDBE4A92573F03B44CE3C04C8E82C32B00D6399C0EB81B84E4BE0F8E611D08747864534605A29607AFF4C586DFFBEBE8624BA50A30925345A3C5AD983074522EDB4BD4292E7D255D4031EC1AF294A4E9D3262C1578FD44E5110EA240F5FDD73BA197AB9426C1B9E52548CAFFA539520F20C4C509483DB5DD07EE1820DAE567425AB1785BE810C2126D47F030334540D7BB931F3038CDF264E1CD8D37A8990A3FE087A4F3C0F7261001B29B014C85AAC2AE416446C5370A8CBE14791B838A6AD43CB050ABA04C16C46D0F2E8531F1175C23CB896634C479A97D1734AC7D0A8C7748C7C59C34FE21622B9FD9B608845ACDFC1DF8B801039F7736A72E891769476282B73D6A2C7B2724A9263B94EAC3A0F9BC67B06012D47544274D658DCF984BC15877345046F0A180F5D30EDAC80A8D730635CCAFB9E74FAD41F842DF169A5511DB7A3B738F50B2CCC6306A3FC69A7C1CBFF2869ACB9B087127860E4EAEC16A5B7EFCFF4ECF19E4B68200E9897C10E7A77B251F2313BA454071CA4B0841631D04C50FC1C99B2E4DA50ED017CBB17FF4179F67D288A24647C3B6BFDC04CEDB751EE2E5C36D4E1D0B4CD7791543A27A8EF2D53369D99194627FC7FD12DC5249D7325AF9E8CCBB87C9815B85B1293004213C30E92F9A729B8D4D8243A5510B2FFA8EA1E3E8A992C1364E6AE87D0BE3384FC3DBD6AB681A3CC0BF6B9A4978E177752C8B23874D1B77A96FB2E030891E816A49F4E275358491746422293DF778BE6CF3725180C0B101A7642C3CB5390C36A0E92FFF84FE0240A7F9AF222AF139B1F6F4733D17CC01AA98F23A110948DB3A58EC8854C8783A6DF032A987118FD7B52A7A45C1C5CF1FD3E8856791C4F0375F1D74CA3E69E5E97EBA054CE4237A99091B84E78E031A7588CCB46C4211A8A900FB49699CC4984C4490C606BF833AB06EEC5D763F09A85C02FF4171B479A66D125C4BE9D910FC448237A2FE3C14B5049204FD56B33169F752ED679D822698CBE959F4633750D65DEF19F30766AA20ED493CDFB07B50BAE0F25496ECA85FC25C9FD714E32052CD412DA0679A3E6190A8CD79534547E84F999E1370E2B9E9B58F5697688E953CCDF76F9D82DBE820A290C3ED1F2F0C7C15B7887B440CE1EA8844EBD743A6F9021390AC5CD6A96673B07E71DF1ECBCA8583DA82B1061AF8C01584153EF011DCFB97C1DA8F82AFA66B5014CAC59B02CBBC796553682447FCF997EB46519427839EA276485DF13A02D3341760F14F322513B958C48BBE74D64FC5E0F7976955D629912B2324B96ECA3F627F340DE70AAA64C633983B63F7E02D9FF89810436B6ADE403760230F00594A8D85283E3FC968BA3692D035BD9BC5994AF584C0D6BAFBF61455CDAFAA8655C5D94DADDECFA2EED690DDD9B09B3421A471C6D8197B9974D3893229E9FCB80FB03D0A5C6FEDE7CAA806AE2FF8E04B5BDF34283EE3AE3B4940D8D9549C7805D9D8CD297390D8B1B68AFC3012CD697BF33ED649B5D37A2C0101C01C9614922D2F01D4572AB6D7CB078271B3E77D287CD65DE616C62E4F065EA12771CFBC1AA2F7CF0010F812503C670B423361C64584D84345392D7C6701B2CEF8898E65FB4B67CFBB177D1784C40CA9AFBAEC1CA4985CA3998B77E1757B68FE5E2919C7AE010FF7CC920A2D06C1BF802D83CDAC159629602DEACC70D3865A40AF7FB95AAA44FBADABF450128D2E9DD7CCF6B3F1ADBBE9C700B99AC3359F234537CA7D870764D5E8881F01204617D2FE4CF4A3DDD26892F495F15AF1AA37780BD10ADAC3B116D06721CB698DBAC981E8E79C7640FB4673CF3789F1160AE43E50A7F54F3C3D0F4C36243CBB07FF0439CC6F72090EC1380F8A960B8B2824B95D3C8D19E6C47945ABD84F401BBF8A6BCF334F25A698DA2F8E6FE5C4A5318324116ADF7F7AE51E75522AC731BE801C50002B3B58D8FF12C5615D8A77DEB5A079542A2EB0DF0BF1E915DAD27CD1A8710E5395C479F62B4C12571A1D1D5BA6969D894DDD93526B70F53A5143FD2C96F4B9EB7C2449F1268228DE1C58C5EED38E6E4435F283CBDDBBE724CE3FA4E84EE5C1266431DF824DAB63CAB4B43512AA0666C3D4B9F7A470ED0EC03C2422E7DE409037979F89A2AEEBF7898FB8162886D57AC8D8E11395ED1DB576231E4628897CEC7424FE7A0B7DC414E9C26E15B8D7E53A67AA5A0EFD2CFA497AEA137E90A5CEFF12CBA104875A6F4A14CC2AD37F08FC9F3EE4DF7E2F6EEF482AB4002069458444F36E02EC35E1B20C3A0FFA300127CA71ED7440ABC54FD0A4DC58D9D35A4EE1CE47E6DF100510695D32D2441F74BE4602EA8E32F505D97EA49D5D10DD07DFB2EC2E2BE91B48B96CDD0AE378F30BB0301E12D7E9CB1BEBC86E673B72A8008C56532057F148D52ABA302255EA22608B98EC2DF2CB2FF6E6D042637AB40D47C3DD7E8D25D3B3BFE748E71DB8A9C601A60DDCA2857A0DC1265D3987AFE55A76ADE85E786B953BB8E52D45A9E3123D3D0A40BC6CD76BC149CFBD66C7992B0F02ED7070CF4A4D9510D224BC583564DD1320FC7D6F28EE9F412715A8AD2E731EB91E42BB73A26DF2BCAAAC9AB2AE69146BE052A79DAEA0DAFFD12EA835A5E7E15E06023AF2A86A71B209C1C47C53EC93BD003DCDDCCC810B7D68BCA174C4BC16C2CA3CACAC2F21C276E1F493ECDC5EACE49BEA34671A059284F6BC8AECC8FDEE4CAA01B11740E68EDF7A57FAD7ED1EA10910BDD9DA87AFA8C4AA27B57297D6AEE3064642DAAC94A4B45C55ECC30BBA96D81B80DB0A2414C4FB58ED6D18311B47A4A917D1A6DCC65D7B18257E32C2E5B9EF90DC5717FAA3BFF2814782BF278C82400E481AF3E8F0FC552260F2FF96923873347D8754C42FA90557DF2494449E538CA23D237ACBC506A0E002F49AB1C05CEF0F0E8BAA042D7CDE9E149C09CB6711840C655C586EBDA76E76E674C23B0F54978335853513A98775C145DCB728FDD578F06F8D4B63038051671C331EB8B9A38EBF048695E2DC7162DEE69629E1F0457910FBD1CB8208337FB534CDF67669BC07A14EF72477409614FE2A6D7C6C566F76D6BA0DBDE8D80BB6D106E0AD0E7AEC752A8F8893F92101D064BCCD579BB6125EC45720BB5BFF1FC84240527060E806833EF852DDCEDC7DB4B83D582B0BB41B1AF481E9B65A30192A6FBF51B8CF916F7CB64919A3643490E8DA6B021DA7F3BD8E25387CDFFF4F280DDE276D0E8BC4E527CDDB75C19B78B5BFF001DCEF2DFC837C02C3939615907C66210BC43CC7815C1586DB50CB7DFBF2AD82BCEEFE7239DFE2A4F10CC8304E113C5F0FA08FB379F86EA4C76852ABB8FF06D0E61458A27EF3E82CE298D57594E437C9136C6E5B63F909C47F5AABD08D36EBF206F84A3AB99AE01BB863D0E022F90FE23188984C91AA6CEC0B93222447179EACADE36F9C9AFC0F788B52A3FF2828A2864AC99E049D9F605B8B5D2F2677BCD3A0C424333E8A724735781FC03E066CC4E2F09CD97E789A0E0D8313113DCDE901CF7E033B03F564FCD781698B7EDF21541E994C35DAE35527291625BB76610A678F1EF1C00331C0EC8CA001FC0F0F902E61BEF2A481B326EC28DB11ECD0A985767702FC5FEE6151EDD860A93AE158181A86F75AB76F66E6DBF70497281FD31CE31A8B850C123040FF6D05CB210AEB0AD0C3F666D84ECD06101C2067E9C929CD0443C61F56D20B0756B75A4A6A9AC5D00CFAC765296D43944C8475F0F2C856364437C6DD44CCB3FDB7EE0F21F4839C76564F5BEF01C4A497FF32D2D25D1A158D60230632D3E78C3F46C9AD3A5D229FC9E7FF9AA26C673480932EDE11F9E1A09DD881C0D07D6AA26FC21BA83716693ADC9209EB5E807321F9EE869FA5097B4664291061DB62CE4C7C5C2BDF51BEFD6929F4017FF0F6421C6560C7E1F7CBFD6547D5440E06085E7AC3BD6E015593CF3AF11C75B008FB566EE7F3FC7A9BED55B15FC5977C7AEE63209587BB328740C7D1908CEFDA554C5D4C7ED527120CE4DED667BCA18FFC53C003B9551A814023E6A62C2AE90EFD7A5C13684BFDA4C75014B1A8E4CBCB9F38D53DCCEC20FF31DC0B5AEF81E6E1FBD0D9ED608E26B0561B3C694069D95B581B06F355AC42115A5CE18C3FA2B5466932B6D70BDD6B111124E6B1B0B7BFC803AF02D47AF28C4E8EC89303AC9A71B365F6FF0EB301507AB0F5E231C59060A29D19898FA0E1CB77A66749434A676476B3334BB9B8B114015F8723850F5A88FD67F0669311E112842A88674CB70C2F48906C7E9245A7EAEC04873019BD46674BDE4CDC5A01D065D120C78F2F49C84A5357DBF4A3DCF6B7C005798E89B0F9C6E4201B6D6A30D547BF06AC717E17BAA23C3CDCC1E251C36FE7951C548742DB202700AA0F2D5AE0238194349C2F8439A84BD7524DD437E4925CAC85D51481C07D2B8B4A7E6CAB75E15CB9404D1C273F625C7309B0EF8E4CEF1B18B281D40B0E00D4B770A43ABA3B9F6170F01AF79775356C2278A0780F8E9D3E5B6354F9F40C51AA3F7965B69B28A138694E7E9D32F784A27D14B1926E88C429D365DE57E6A66D639F6FB81D107ED0FAD7670EC10FFF0C63DFB17BDF5ABF3CB6B53CE236), (0x52C2E11AFEC23F6792FE43B7BA0779031AD4587B78342A8D08E0330167D39C9AB08D154CDFF4014A24771F7D9CA304343DB2220EDDCED11D9753121E8E3EFFBE62A8062DF12D2325D30E570015ADF165DBFFC4B4B18DBDE2BCF7B48CE2E2BBE578601BF39CD7420F8EFC3BCE77D008EA61AC428F7A4A0CD4EB2470FA799743F0527188B492FEC904BCB425B552EE6BECEFCA2A359F2C6B2D54460877664896F7B84A7C0547535863E33ED3C5245682FCB9840AAE6D0E5025055B604BF6519D731E2EFD077265A49B72C6526159A608FDC40BBDE23EE78AA9FA56FFECF30C6D91A05FA6F6597B8A54DF6E3CA6BBEECC5F526286EA93BB3537A3530C1B65B7A76559C0C1F9FF12A349816902CFAAE4EE0B8AA09A908582FDE42A6F52056E6FEF28C7D74DFB2DD26040BF3D692AB9658CBF650191C51D16DFD6C2DDCE90BF9DDB127ADA08D397F2DEB73F59D14819D32BC4E293A06CDE290AB0F776385003CF81216257B0DE5DB9287223D985C34597BCEFB10AAD2BFD6E3350CF58DB20BA8DB36FD8B0E6C2234C67286B2D4904A4476A60B9489EF9225524F3235F0E05DD07B8952615EA95B0FACC65A385C0CF252FAB88ED7B6671EFB94D838CF39FC33D614B6375B3DE8F5CD5AFBF7C39569C9454CDF3B4861862A146A66CC76708BD5B0827413A5D5972511C2C17CBA6F4B562B1EE3725AB0FB749E8C12E0C71C7F4CCF2647412156237FA5BA297590097FA52F1091679D198AFF86FF7519B2B65E054374AD84280A34D4EB63CCA09785D4850C7DC1B67B17BFB5AB47BA21D109CCFF5C24222B6BEB8D24EBCC8C294CEA68011AF01D34F4978A3BB4F7E8D0400303D1A6DD446353B92910F09CDABE9B9668B0EFA916E0FC880AC499F6667402ACD4D8B8AA827FA5F4BD51C6FC4457CCDBA02E8F27E0A6FC22D51EC27FD95D52B51E43C801F5E103E91AFAEBB51A0043B307CE5637E4DACC3DEC95D573AD262B500F11DE008FCAD5BF2A961CF5BB4708D4DB1F780B071AC043878A15601B904BF4CF8BA5F82233233CF8971D4ECDC682A58D00989DAE1058E4419A88F5A565A38A5A18262F9110A297EC3B12600D8175B1077FD31AF7AE46BF32C1B697BA2D9782F382E4A59053147C6E00A162FDF8D6C014C7EE25929892BBD176FCCF6A0ADDBEA39F6C8A9CD010B46B66BCE70CD3B139EAE682F24F61F06AE038D4295645025322E2CF6E8C5C2344A739CA2BEBABAEFDB5B2D47387EB7F31AEF19A63FBF75E165459B41A1452AD8EB34E5B0597C48F4489E67393609ECB47639DCF8AC1CF48AFDBA3C781E794E9630555B049807999DA7245DA1583BAB5C58E6CB6768322CCF3F5AB39F40D0D5CF50D009E1ADE81B6F9F3F5187BE5232C10FDF1F37ADE62DFE288CC43E53FA5CD64F8E518732C9AF70CA5BC829E0A410ED27F18F60B09D2169A30AB82123DD), ('00000000-0000-0000-0000-000000000000'), ('9999-12-31 23:59:59.997'), (null), (null))"; - break; - - case 18: - $query = "INSERT INTO [$tableName] ([c1_int], [c2_tinyint], [c3_smallint], [c4_bigint], [c5_bit], [c6_float], [c7_real], [c8_decimal], [c9_numeric], [c10_money], [c11_smallmoney], [c12_char], [c13_varchar], [c14_varchar_max], [c15_nchar], [c16_nvarchar], [c17_nvarchar_max], [c18_text], [c19_ntext], [c20_binary], [c21_varbinary], [c22_varbinary_max], [c23_image], [c24_uniqueidentifier], [c25_datetime], [c26_smalldatetime], [c28_xml]) VALUES ((null), (253), (2264), (9223372036854775807), (0), (1), (0), (0.5181), (0.0157), (0.2591), (0.4606), ('åa*|Ä*©ãZ.ÐüBåÃÄÃüî@CðACBãävÐß vUßßýªüauZ>~B@Ã.C +|b|_£üüU<ä>,C:b<ÄZbÃBÐöÃu¢*ö~..Ðö*vvÄÃoãA+ü ýuÄ¢å ª>hªåäZ~>hýO* vß/ªääÜ£BêOb_oÃvÜ_ähüÄÜbãÄßðäåzo£boßBÜa|ü,/ýÃßÖ.ßår¢|_:ArU.Щb£öu_ý©Z/'), ('hB@br~BB,©A/ü o>Uýäý|aðÄ©ä,<Üßðaßbv/A ÖbüÃBýÄbUrßOA/ AßCoß, O¢ ªÖA£îbÐ:ðUßAåðöaª¢r£ªÖ<©ÜUhvuö.ä**>|.ð.ßrürC*ý.ãÜobzåßÜaÃ'), ('ð.<ü_/îo_î¢Zöüß/üC,zuu¢+O|a@ýÐ>äÜb<,Ða£Ã:ßåöoäB*b*ßåZ ¢ÄßCÜý.+Oß.Ö>ä<.Äö:Ää.*©u :©:¢ðª|:/ܪªU©vb¢b@,+uä©£ã.~:u+Cî:@Öî_äßOb.ÄßBÄÜ:ßÜZoßöußßýBrýýu,<Äßo@obrÐrzßoä|h¢h©/Büb>ZöC|ܪObOz +ð¢ð¢Äb/¢£/£ö.ö|äzßz>£Zä|b>.CaUªã_ruarbÄa_:ãäZOhãA Ö,ýßÄ¢Ö*|r©zª,ßß.uÄ|©vBzür/aZå+|bÃ>uãÄ<ªUã<@ Uä:b<ÜîC<£ÜßÃUaö_:>boýoãÃÐÄCOOÜv~,£ªåå£ãßßÄßbýåÐÄ,:> AZ:/r r/ÖÜuÐ@rZª,b©ß£v*Z*ÜÃäý,ÜÐvð_BOO©|:,bA:~£r.u,C+vr ßvUîvãb:ö~vÜoabvðCöÃbü¢öh,ÄBö© ,|ª*ßoÄbªz__åzäA,hhOUz>vã£zÜåhü>vväu_©UBrA*,>.Тv*zöß>bBb >oäör<*AZ¢:£>ÐåbüuüCÜ/î©>@ßaÄÜOÜoroBuUßåAZ~ßßÄ.BBZZß<î£UööU*£u¢bãaßhuÃo¢Ã>C~ývðß/AãZÜ:Ä_A..+ZBAZ£>üßîZå,h©BýÜbUÃa/ðª+*Z+zvBßZÜ*ª:ßð£OBC* >@öoÜ,å@Ü:ðuOa~>o¢|.>/Að£vâUüb ÜÜärßß, < ,üýbA~ðoa:|öãb>ÄUZß+~/,o+Ã*uuðoAbð|uBÄböªÜßößÄÜZîªUAª~,¢£/_<©U A©A.Cövª_rãÜߪ/+©îb ªÃh/<@ö~©OªZ+:ßZÖz£*¢aÃãÖß~Arbå|ªîÄ*_~ð~aÃö*ª|.*ßoª*vÄĪýZéðî,ªzAÃ:Ö:ÖO+b*öb*UO,UrA:@zårB+UîU£BZ b|äüª+..üO+Ü|£b>vÃÄ*hÜÄßU©b>vh.v£ÄZ© /£ã¢A_C@/@ÐO.ýü+öOZãbÐðZîoãÜBCã*+OãAäÐCuªZßh*zäh/åÃ@aßvÄÄ|ÄåÄ . Ã+ßUoö@ubbUÖðßðªZÃ*u.z*|îCzzau@vå¢ý<+<:ö|>ßî¢C~aýOî+aU A¢rrä@ýå:+ðB©Äääöä.ý. .©î£@vÃ~bývZüäoZª/~¢*_Ãaîzh ü@ªvðÃu_ZuýÐOäzöã,Öýãvü.ÜýäüåÐuh+ª_,ý*v£¢ý,/ä:bÜ|¢,BzßrÖ ÃZC~bö>ßÄßöbabüäZ©zCb+ĪuOÃå£ß,*_Ðî¢|©~vý+£©hÄ||.uaoå¢Z |>+åvªoå.~_vO*z¢BAh©ÄA<@¢C:/ßU<î:~bbzÃa+uÖv_OZ+bî,bä>ªª_AãvhoÄbOC¢ßªZvz,AÖ:üÜð* Ö,@.Oª.ãü@a:/åu>Ãb/_<ÜÜ£BÃãÐo£ÖC>ð,Ür£a>rü¢ÜUãöh_övÃ<ßãüªå >ÜÃà Öîü@>:zAbö @hý,UÐÃru,b¢Ãb.oz @Ä@vza*å/£B£u¢_< ߪ>BÖB<<ðÄZv/bZýÄ_ußUãýb*zAC|o.buÖ~_ßUÖªAß+zbªý~ߣ@bz£bý¢:Ð:b+îÜZrA©<Ðo<ߪÜ/:ÃüÐz/zî¢ Ö|êð+>z_£îªaä~ Bb>bZÄå¢@ö<ýh¢býhö/:ýåßÜüoî~ð:b/C rUÄbߢÖB©Z+ãovß||î,Üößãå:zo_ª.~©b£oaÃ>u/öü,Ã_©a£Ö*îOb*,+,ãª@:r>UÃÃÜ@CßäbÃößü.o ßZ@ßU@.¢ÄUÜ¢ãåÄüÖ@ð>ävo<îßaäÖ©ð_Oãß, bC<îÃbAð.ð@>b*@å.@ßÃB>ðÃZä:ÃB|ßhZü..ÄðhzzhbCãÐ *vðß©ðܪaOܢߢ*ãäB,rCöBO>+>,ö.ßä|_B.oÖhu>*,UözzÃüzua:@r,OÖ Z.,©~+ðbZ@ð©BüoÃÜ_ãUObß.¢rß.A Ãu..äßC©ßäAUaOA£CbZß/ä @huªüb,~>AößÃv©C*~CÐýröb¢,ýBÐhrîãîåZ¢Oh¢.Z@ub* +/öðU C*zOoý~bZä+ßbüß+,bB@*ü||hZuÖ<ßðîª,bhOßýäýÜÄ©ÄZ*ߣÃ<ßã©ð~Ö.Öu,äߣUä*>î>C©bu@|Uåããð,CÜ Cbð<>,ÜbÜAuO>äÖÐh.|Ar@ÜãßÜ+£îU~h>ßZAÄ:oü+Uýöü*ä~A,AC¢Bvü~bð@©äðU/bÃÃ|Ða©Uª£ü_ãä:ðߢ>u<@,@ /¢_£z> Ð>å©oaz+*äA/z/Ðu:~äU.Aü|ZoUZ,hªZo¢ß*üßÜÜzCäª<örîÃ.Bb/UîÄ_ +ýÜaýrvÐZâ,U£ßBðzo*b*ü*~ýb|äîÐBߣ/Üazh©*Ö£@vzo/U* ª_OUaA./aoÄä,ö@|ªuAb¢O>a Ä/bvߢz@|h|¢,.Ö~äC>£åU~ÐÐ_rrvÃ/boîzª*oO_,*ãßüðußZ<Öbý+::ä*_Z.BvåÄ>:>BoUÄðüU_.ÖÖß ,ðÜö+bß:ãÐýªîhZböC<:ÐÄCUACACîbB~Ðüao>ö :©AU.UBAãö::£Z ªÃß_îvAÃ_ߣ.åöCC~aÜaßÃ:Äýöbro:~:z.+z*öbb/ý<:ÜãuBÄãä/äv@îUB_üOß@BuOC<~ßÜ¢üÄ~ßraöhÄý< ~hªAå:bv.bîª:,U~ÐÖ@åbub~b~CÖ>uåßý*ßÜ+.ö<ªv*©:*oÖßBaãÄvvîoa£o,h|a~zÃ+å<ßýZÃÐðh,CÐ/*ö,ubCÐbîª*ÜÜB:Ä*Bh£ßå*za_a@*ÖÜåîÐAroÜ_rüZüå/u>ªZußzüB¢<ªBr@BrÐoã:äbbv_||ö©>î:åßA,UCü:ðßB|ªb~ABÜ|ßbü+:|a©uÖA.C|hu.<ÄüªO+_Aö>©<ý_ãîöB.î/|ãu/ÐÄî,ýý<ão_,ßö¢©. @b*rUuO@O<ÄzýîäÐo:©££ü>r¢ßý/Bý:Ð>Äåß>Ö_O¢_bßOaÜ©_|h|.uÖ.OAüßåäbãðüOðÖoý/b£+åArZÐÄ/@uÖÃbvö<¢<ÜÐZÜh©brz.BC£Ð_¢ã/¢C¢ ðä£ãAAC,v/_¢Ã UörobA~>åoåßCÐ@oßÃÄÖüýäZ£abîo£|AAu+îu:b~Ð/ý<üUð,åB£ãðö*UBð@bö©*uªäÖî*¢ð ¢Ca_a+z.b©AbaÄBBäCßzöA£bBÜåCzOAåbÄãb+/Ü|a+ßýß/|öª ý+aU,Oð£å/@+:©©<ãBbß zÖîüO©äãz©hÄ_*b¢ð*ý<é.br<à Ö|båã|hÖ:.ªÄª+ößäZO@üB*©<Ä, ä~ßuöO~ãObZ.*bÄå|Ð/ZbörU:Z_Z*UOª/rbðª+Ö/ßB£ÜaÖOî+ªÄå Üaî|rîÜv¢z~üzB_ý+ªß/*©uãvuªäOü ~@ððBÐ*Ãu©A©ª||Ð>~ßhað/üBßbzüZîb£ýa/,O/UAð|Özý¢vÃ>CZ+ã ©bößzÃbÄðÜöA¢|h zh~BB*ãBoߪöb.Aüh¢ü©_öåäCÖa>ßZãCÖ¢*ªÄa~üß.ö+£Zo|OßÐ*b+~ößão+o|Ua_,r/b/UCAýãCa>uãª: ý_壣ªåÖ£ß_å+öÜjklÐ,C~A~åb/|oBý_|Oð~ |¢ZAýÜrÖO>üÄvzåa__ãuaC_£ßBb*bª.Aªð:bz @A©ab.©vUÜC@a¢B+ /b¢uåÃäÃ|BðC ããÃuAß|ýbCý|äZU_~Üöuªaü©C£ ß > Öoîðvßߪzß*,ö£©a,ªoýzýåÐßåaB+:У|ßu.ü*üÄßO£.U¢aA:¢ðrO>aÜvoC,ßÃuãbÃßo.vAb£/rh*:ßbß*b<£b+B>rr©åÐÐ_<.ª £_<ý/ðßb:ü:bÐAv~Z_Ö,Ü|<__vo|.Ü~©/hãZäbbÄuz¢@Öhöã:ovö£r_Bbö:OÖv£©,Ü¢~OýÄu*£ÃAãßZZ*£ ¢U>îo>ÜÃ|<ßbãb¢ÃüÃbߣ¢Bãߪ a|Oã.¢+>~+öÐä äãÖu.ãýuCz~väÃýh©b|oÖC,£,/<_Azaüu<ÜÜ ¢,Ö ß:ävoÜÃ@/ÄåOÃ|Ö:Cãü+:OßZ¢A,îrßb©ßãü©_+u©ÜA~ªhÜ_îA uÜ/,墣|¢C,Üz£©r,ä~BðЪz~/~rhã<<åå~vU.ö*aüÖCZaÄöðö,à ö.A~Ä¢vr:ßoö:BBCª©BuÖ,Ou*ãÖöüözß+/ö>,AA©:.ÐÖOAAbbýª.A+Ðî, ª¢ªo örrb h+b:£/Ö ©.bzß©åý îßýÃABb.,bzBÜ_ýýÃöÃðoÖ~ª,uüvzãöZ ¢z,b¢BvýAv+:Uîåb BÄObOhr+zßhßC|CaÖou~öbä/ðC>roh BuýÐuBZ/or© zhOîÃv/<У<+bäÖhb£ýuo:A~hßîð<Äb,vÐ_zÐrßöÄ£~/ÖªÃ**h,@u/oãBªÜå+@aA~bCzz/,ããA@>äªã_h_~ z|oß|Ärh/ð~O£|ä©<+AîÐ_©Oð£ü>ÜuÖßö©ÄaðZЪUv,ð: äzÐObÖ@Ã~ÜîýîðÖÄ+uoÖUüããÖr£/©å_£rUÜvðBªÜvUÖî|ÖoÄoß_/ã+ß/䪩|u¢Ä*/ÃÖ.z.ã<@* ý Ca./+C© Cßã/*,z.b|£@.<äaÖ,Ðýbî>AßCÐ~UCã@AazåðýüA@b<ßÃ:î£o.Ãü+©vuZߢU£ÐOöÄC>,oüBÜ/Ä*>h|aUªãä,ß @ßZ_håðÃå üAßA>:ýoß* zA|o_î,o|ãr:Oü@uª*,Böu*ß:ÖüÖhãê:arßÄ+~ý__z>Ü~¢büU+ß.U+B©ÖÃßð£aÄhªýOÜÐ>uÖ,|.îãAåCîÜî:årr¢BhüÃßbî@ª+O~:ZUÐobaÃürßÄßÃAäCUU,ß_©ª@_ö*£åZ<äZ£ª_Ozßr>£îzväBAb.+CÜßð¢£r¢C£bbî*ä_A.zöð:rZåÜZv©ä ª<ð*b<ÐýîüÃÃ_:~ýö. bªÐüÃh_AÐ.uAüýö¢ZÜo >rîðÃÐbabª<ª|ª@ Zbªzãð>*/ß ß,Uba|_AªÜýa:rÖß|o/ÄÃåO¢UZUbî+Orªð~+~ãCü+Ä<îZ/äåC>ÃýýB:ü㢩|a/Cuªß,_ª,uÐA<*ý.Z ß.+ö.©rr@<ª@öo_öð~UZ>b vÐZüö@Ð<|_zäh£<Ä_.ªåbýäv|<@.,OaßÖBBrCÄU©Üýbü£z.Z/åÃäåovväa.:ýzB,_ßr£:ü_¢@*Äo.ðC Öb¢©hArã Ä.AA@öb©v@+vö~üªr~Ö*ü @ã_.ß,|:ª+zhvC~>ãÜBУªöBO©©oUh~öv._©ÜrövZrð/îÜã>åÜZåÜ h_Ãß|ð+Z,:CAb:bo.ß~ÐÖ£ªbr,ãoZ:äÃOðvýüü£aîýß:zäÄ+/Ä+>zb~>ö¢¢oBraöª.ähObr:o|ãÖßhÖ*Ã:Ð|b*,C*ÖA* <ðÃýäãîý~r*@î*Ðuã©ßäZ<¢:/äUAÐÜ.AãC©£hÜüZã*BU,boa£î@Bu>baZU_a~åvßÜ Ãß©BbbÄ@að++b,ÃU+ßv ß*b©*åUüÄüBz/_/@ ÐaÐOßÖßAãbîaA îßýßüBäðA/ÐB£*<©ÖA_A¢ ߣ£¢å/Z~aoBý:Ã/Ö<.<ßýZ:ÐB<|Ozä:aÃ|ý*o r/£//|ý©åÜua|C_ß*@Oî@.äBvhÄBZîÃb~huAo_äîÐ/~ßöZz :år£ß©vObãbhüß+¢.Ãrî /<¢+_bãbªÃßäî.öU,ßîbÐö>,r>üuob|~Czß_ÜßüðuöéÐÐÃCbB|@~Üü+ãýî_ÐC @ýAZå A>o>Ö|+£¢ä£Ö/ý+uzr*Ü+ª_ðZ壪ܩCîÖå~hªAߣCÐuhUÜZhüzÃãöCö.üUuåðÜåöÐÖý_.U¢v+ã£,,©>~@£:üZö¢öoO+ßöÄ*ãv,>ÜÖÄÄÃ/:vå|,ý:ªu£/¢CröC::*Ü©B,ãbåý,<ßð,££av:@ðhä~oÖ/ÜCCh_Avü¢£ßð*|:BözA|b@rÜ¢<.zß>o>hhbb/ð¢ýüAzßr@.£A©A~AAÜbv*:ãÖ|å+öÜÜhB,|+aä*ö,|ð:b+îªB~ UoUvÄhB,|¢ðã/Ðv_¢B£|O©ßÃÃ/aÜ+©vv*/_ýãhäUî:ß <Ä>Äßßv@/ao| ||ZC aî*£>ýOZÄ>U.£Äå>uýöZý|,Öß Zý£Z~~C~/åüßu>_@CÜvA*/©ã*~ ß :@ªßoÄO¢.î©ZbZa@.Ö/ÖýO u,öbuüOÐ<äbo@hvÃZzhvü@Ouz>ÄbÜ/*hð:ßÃå>>ßà rã~ îub |ßÜß*~£z*¢ýa©av Äßü::ð¢ÐÜ_~+o ÃC.Ä>Äzãý,*A/¢ÜÄ|BÃÄßBUªä¢rbaßývoaöåªö>|Aäß~C/>ýöbý>Ã:_~äßäå@vãO,bå.ÃîBª~C©ðZ©|Ã<*aßB¢bÖA¢rA_BZbý+î|ܪzr /Özoå+î@Oð*îZ@öbðå£:/åAðbü/~ýðäAß<£åÖ~oUZ@+oöhÃäö>äУÐå_Ð,Cðö @vbzbßäb Ð,oð@äüîv|¢>bh+B~Bh*Brð.Ü ã+|Ö @CC@¢bZöv|öZýîhÄb©UðrÃ>o+b¢BB+Zßöéßß:~ãa~öhðð>¢ªÖÄ ßCã¢üo~:räîvh zU ðªb|ZOC_A:CC:<ª|£bAo¢.UäÄßåaÖ~/OUb>|Ü,vb¢Ð,ãÃ'), (N'ðZoühÃ~äªð¢,åªÐÃð@>*Aª+|ÄäZ*Aä¢Ä|_a.*:b_:¢öäÜårAýÄîo@üüzðªvZ.UãÐzîß ~ *::öî,£@Üß©v*zü:rª~Ä<ÐrÜhußu|åbä/£+/Ä|b|£.ß/ªhå@ÜãÃuÐåãªvÃßê/öîÖßßÄö@Ö£@AbbðÜoý v/ÄräC|ßÖOaÖ+ür:ð©ß O~UBAÃÄßÜÃ<@ß**ýUÃî©UîO*ÐîobäªaB*©oÃrªoO,ÖAbÃ<ðAªruuÜhbv,î+h_£üo©+Ohr£ß¢_ÐZ>åB£Uüh:£,Ü uªåZZUa£ÖÜä,zzßßü.ª©bã|,ZvCO.rzÜîbü_z+@+_b_ÄaÄ öOz>UÜCv+A>ýAhãu_v*U@~îUhüzä+~ðOýBÄbýßÜ~@ß+~ßObÃö_@OÐ_©Au*Ößa©©îau,bUaÐ~,oÜ£åvÜîUCßîZZßßýöoðBîoOC~~ªÜa:ðßðß~Üahü~ä|îåܪÐ.ªbzäß>£:ZhÖvOzãüðv>ßbðO£ß>üðð|rü**ß,@Üaãår/><£öuCb.|<ß*h©A bbüßüu:<Äößb_bÄî+BUboo_ä.o£>_aÃÄ>:öÜî,B,ß~üðÄUb~bCðýý¢üAüðv|.zCУA£Z@ZbZßý©©bv@Au.Ü.ãåý.:öOüU_ý>:uvêßbÜb£OýözüÄ.u ý@ÄîÜAUß|BbAvaOrãýã/.*a*rÃý:oý<|arýüÖ >£*ý@©ýªîýÜBhÐ~ßî£@+ÃbAß©|¢@Abau:>~<ß_v*_h~/ÄroðÄBzß|ÖOãu+ðîCb*ýýu@,ü+öh>Ð ðüb,Ãhü ãÐ ã/zÐU/¢*u<ߪ/>©Öö*ooZã/våhýuÜoÐ@U©,BBuC>@o>ãC*¢åa+a'), (N'|AýaAãC:,|bÖv*ÜC~£ÄU££h ~h@@Bu.hÖß©¢,bb,aAC~.BãýãÜ.ÐZÐAðå£/åzª+ooöý:©oÄ>~ uª_|ð>z_©zß©ãAßÖÐУOb.©ö..+ Ðð~Üðb*ßoýoÄ/äZBîöÄzoßýUZ@Övª~hA|,öÜZüåUã>ßrî_Äö.Büä<_ÐÖU<î,ýUu~ähobð>ßöb<<£aÜ Ðßßã>¢v|A©r@ßb|Ö>£Ü£*©ß:ð|rbä.<~z|/Öz>îvb¢öü£ÐßBÐ<ßoU/ß.£,Ð:huîrb_ªBbß/aÐ@|ÐÐßßrÖB +~z åÖaCðÖ/CäÐÐðCCÄAðbß.ÐäbÃß~_ÄAî@¢ÐrÐ b©@UZ,ÄýýîÄbAb, ÖåªaÃzz rÐBörCOî,,ýv_~C*hBÄîå<©ü@räãªÄ£Ð+OA|ZÜÜäÐßãbhÜOÜv媪,:Ðbh/ýv*z©ÐUå*_|b+zãObÜaå,.©b ãACüÐz>o*ߪ,>aîßU/£rr>zÜu,öbUA~~vüãÃhî¢ubîA@Uß|ÜBbhýaäh Ð*Ö */îzraC@Orà ß.hz<ß@/ßOöOî~|.ã>üÜoZå¢ýÄzUÃAªî+ßrªÐãäöãz@o>Ð.¢/ÄéUðO>_>zÖ©£bßzðb_å__~u@©~bÃã©:+CßÜÜýîhÐÃ_üãîz:Är£ßBîß*/*ÐåUv@ußrvüý_hb£ÐßäAUÃÜv~ü>aä*ªßUä.z,aü_vªCª¢îZZuOßb£r:~C_BC:éÄ>vöî/,_ý+uvð©£üO*_<+Ã_Ob.ãräîäb|ö.B*ö+ãã¢ßÄ.ö_î:|ðÜîrZaüBî<ªO©b@oÃüv_ªUüãÖäãÖCåöÐZýbo+£,hUbîU£öÖrvU|¢ðöÃßu|_oh ܪ£:+b/ý ä.+Ob:ýßB£>ä zß*zvößBuaðvZ~r~ÃÖvðuÖ>~>ÐÜ|Öb>ßîv*¢AÜOA@U¢./ðÜäßr.åUöB_ Öß@OU o@B*AU~_î~U,ýhBh|üîÜ_£ª~üoßzZü£ãZî<î*~Ъu©>zý|C.uªU|v:Ü@î>,å/vvðö,Bb£rÜýuz_åhzª.A,b©ÐB~ßCöýäOäoö.~*ª:AÖAßU üîî+ªîüãbO~rãßvüÄuðß*hª:|öaüa¢bã<Öªðu~,üuABÜß+>ÜObbßî:üßz/ߣåaß/CÖÄBr*ÐCßü~ Aã¢r/uÜð~UðAÜߪÜÜÐbrr©£b£.|ß ðýöä£Ü<ߢr©uîääßÃz.Öü*bå,C*O|_A£üª£výohahüo_.üzßÜUüBob*~îb<@.ZUbOavZrªß@O.ªar_<.ß_, |ð>åUb+öê~ãÐb*,ÃaªO.:ðÐ:*,*|bÄååð@v>,bhUåß|ãÜZCrBÄßðuîCýÜ.å©a+¢îÃöß|bîzö<ö_¢+îÃbvo<*îü©a.ZÐüor©hã<|CO.ä:v+<¢äÐß,ãîZýÐvßoßo*ßýÄA/ÄÜãªÄbZöb@,£ð£äu*b,ªð©.|©.zAbb:| bîBîuÃܪ*öuåhuoZh:ðz.@A+vðzÖvåýbãzåÐÜzC+ªý~ÐOÃ_OoÐðª_Uð@äТz,A*:öoAß*.@ß _Ä.ðzO~+C~_ö+>~,*äbÃßý|£CÜA£ÄãÖuCZa_>ª|_bðv/ß>|£:.ý_:C@|hÜß_oð©ZãzãB>bîÖz@£åÄhãªr+rZãrÖýÖ:.ÐÜa,hvü~>©:o.@uuö<¢ãýðr ßÄ+/¢|ã*b¢OüzC@¢Ð_ öÖußÖ¢ýß@hª.ß~©~.å_öößCBÜ*vðßüýB:ªv~~ðªß£Ö u/u+,¢@BÖr~,C¢Ca.+bý_h@ör Baî£_ýäZZäUîärhü:îr:|ÖÜbðvOb_@¢<ßÃÃîªbýrh||bvÖ/ÄßÐZßßÖÜUÖ.ªý>uý:ÜöÜbBOzOOå,öb.u@ÜðîÐO¢ÄAð:hr<ýÃî|CZzý*¢¢.B¢ð*ßO rBu~zvvoUÐo¢ACÄOO>,öhð@.ZZzbýß©BZßa,ÜCªZãhbUrý~z,:Ðä/urZ|ßZAöOo:bb*uCz,bîBBýäZrzÃaÃ_bߣbªÄãüß| £ýªoh¢+Obb£ü Cr.vªü*ö>ª,v.Zª,.ßzö.Z|+ãu,o,uåÐ*Öß~ª.£~©rOh_zaCåBý/B rBîb,B+ZªAUz |AaåýOÐZrC/ß_rvZZu/£a|ÃÃ|a_r,ªhåuý:Bärýv+baýZ£:båZ,îuu|/ßCÄvÃä>hßbÜz©uåüî_ZU>*aöbhý*ÜC/¢~ob..OÜ©U__vCbüð<@©å|zo£*Cî.*|br>äÐ@h:_ÄÜ¢aüßÖßýobäv/|bvý/bzZ* Ã< ÖU*:ÜAüöBðzrß~ZðvvÃßÜöß:@Ä,U//z >Z<©>ÄBîUb*U ßðOhÖÖur~üß>ýCUîZb>Bhov Ö,uüЪãaöýãor©©ä+*_vÄ_Ã*+/äZ,C.|ÃUBOva +ÐÜAz/à .vÖrCz ö|ÖbÄö/A¢ßuÜ©b~zbÃ_hUA£b©B_äh+r:,îh¢@ðª/ZÖ.>rð©ZãüÃ@|oBðîÃ.¢.~îUªÜ+ÜîöÜCbCä>¢oäÖ/UAo©©åUßuÐß@ýaÄãoî/_å+îO|//ZªzÐã£OO_Ð~ðåhüÃrüªBCo£:v.r_åCýBu/öuðaüäßãoC~ü|,ðÃÃuü* höãuUbbh.üO~¢ACaý*ß ,<é/zhÐZOÜaĪ.Zð_îßb©ãC üÜC/Ä+Ö<ßßÄrßÜðîzäUOOäA¢ßb//ývÄ¢~*<@Az|ßa@ðßÃbCÖüðÖߪöhBÖ>ª£ö >_BB¢_/*@öÄ:h_zãªav_*bü.Ußrh|Ð.+/oa¢brAÜäüÃözzU _åªrÃzî_äoBà Zßß@ Aü_©Ü,ý>©++ACö|å~©CrÃCv<ÖîC*/~oå.üZvÜåCurr¢@OãboC:Äh©z¢îÄbðåv£bBr<ªh©ZBÄ_îa><ÐZîãüuýäArB +|ÄüUö|h_zÃUî<ß*ý~Üzh/ýÜaAz/buOv>ßzÐ,Özü/*ö.ª©ö<,¢å//ßrö|ðör¢Cbzh/ÐCOBöUvßäß<|O BãA/*ÐßĪ*o<ßC v£ZoðßZz©£o¢ð.:ýÖªCÜB£ö,ªA@ßð|a.zZ<ýýo ãÐ/bC¢ý@£/üävbahÄ åö~©C_ÃÖ*ZßOÄzvuÜ.ÃßÄßýî+£ÄåÃ|äÜüðßð_,rr|£<ÄßBböÄ*ÄÐa@¢BüÃZ:ãßbß/brÜ@ ©+r¢uOÖîUUbäzCßÐað/ |vÄv*/|b©äZä:¢..ZÜ>,aab ABUrAr¢£ÖvUBö¢¢,©:bö<|COüv.Ä/A _u+uUO+AÖuß_z©ö~übª©ä~ÃÜuü:ö£î u+b>~/@>åa_îå £ãU<ßh£<|AðB©©ÃÖßããî~Ovo+h/|Ä£ ©ß/~hu:äÜÃÐßA~>ÖäßhOÄbüÐ<~bB£ÃbÜîÄUZub|@*ýbrä*u|å+|Ö~<ªªãÃC_o*rb¢üî r_ßuªßÐýÜåC+>uvhzr/B£/@üA+aÜa~å:åU©ãÜ@ü£å¢bßýO£hððzÜð£h z+>Ö~v~å>_CöOäåßýðªäÃîåObAÐß î+OUr£Ã+hZ:Ußobv> B+_>ýAv£,> Ä|@ß|ªOöÄürO.ã£oªäÖßî_â.Ü,+hü|UrA/Ðð:v_å Ü+årh£*ä£Ü£©.oäî+ÜußßÖ,üü+.îUoªrð|Ö Ðu£ÐAvzܪ@¢ZäAb< B_AüðuÖU'), (N'>O/Öä,@ohh<Ü@:¢*:ÖhAubCåßAÐ+ßaî>~£ßªoÜÜå*äö*ãza~*|ÜýB...b_ðߣo*Cuýrå£arÃývÃ*hÖb@AoAuUî,ou+_¢ãöuO@ßhãCCð +BýãÄbZ >.ß>CCåz~A©v<|ãbA>ãz¢r,îuÄãoð|:oBrh.oÐb,ðßvB:©ãßUößrUüÃZAåZ.vÐ,A|>Ov/.îz:/,ßöZ/|äAîüÖUðC@ã,v/¢Cr.U@ö>~+ßb>Öß~å Ð:Ä|uß/v ~bÖ~A¢äßzO,ÄÜC_¢@£ßÐbå,ýür+/ßÜß.£ö<.>ªüü£Z|Ä>Aß:@hb+ßhÐ/Ü,Ö|C¢:îz>~|¢CCîÃãbß ©<ö+îð©Ã.~@rb£Bä,ãaߣ.ý/vß,ao©ýböBBðßrrÄßråðb*~Bb_£@Ъ:Uö_Obr¢zA/@b+ðUîýh+üaý.ã/zBhohÃozªC¢öãýB+ÐöUÐ.hO㢩,*¢:v_ÄÖÖC>hîÖ+ÖÖߪüoov~vAoBaOîZ_+£,,u©>UBAOu,¢Ð~rrª/:~b~ö@ÐbðZÄ©ý©Ð*Ü@bäübÄ£ý¢Ãª*£ÜÃü¢Aß~ß/Ãð/ ß >uÄå+ßÃhÖ<.ä/ªzãhÃv>aÃ+£öÜüb+ð@Äîz<.üÄýäB|uhªðorhäßÖbzzßãböªßªÖßöÄüChîä.Ä,,::ubaªÜö@hÜ£~ý£|îÖ+b<ß.råöAbuý,AÃîä*ªAöýb©U©Ob+h< ü£ ð©bAob|ÃÄ@ÖÐüÃhzöåß,aß_Ðaß|îªîAÐÃ*ýOz~äå/*öÐð:CÃýo+Bãö CCzA >£Bß>AAªÄöa+aöü©äßß|Äåî/@ðåÖAäbý|_+Üvhuî.>ýboabåý©UZ>:ª¢Ö£Z|hZ~ãåaß:|O,ЪîouåäZ@äýÖ+ªÜhÐ~îãÜöß©ýßZ ACäÜCCzÖb£ü:+£v~,ÖbrÄÜ>ðäuo,>¢åîUßz*:Z*üUîv@£uuÜÖaZ+ACbvobªo<äBÖªZßZða,u,Böß@ýZ¢ý+£>*>ähÜbr.©r>,ß>î*.öãÖªbýöovÐoÖýoBuª.B.©@åßý_Oª|ýabðrb_ååz@ðý@zA£Ãb,orBßöÖ.üöª>ß ~ZÐBãÜB|*ÄC|>Ãa~Ü ähr.ÜîUý/¢|ðvßÐ~,U|ðßðöãß>ýU/b.+OZ£©hO>ßãä*:ý./zãîZÜaã@öO*~vðý_*urÖýob:rÐÖBö|<ä.bÃ._ߣ+*ÖÄ>Ü~UåãzýUß©/oß:bbUÖ|+Ã>OuU~a|~ß,U/|©ª<äU£~UbЪ@ªbÄ~CªO*ßv.A£Uz.£üvrÄUß<|,>ðÜ::/ªÄýðäýÃÜbBÖ,r:uý O~b:.ß+ZUAÐBv|*ßü.ðv,_£vOüBäBüå©Öaü_îý*Zübv©îÃr>BÄÖUªÜ>ZÃbßð¢ã¢ÃhÐ*C¢.uZ/ýbC.|~<Ü~Ö,u¢bý@©ãão/£h.~@O*båÃ>:ߪÐ+åh:*oABU<>©+ªö|+hý*ðÃãA.CÃÄbîÖß:UhßÄ+ßZªAOCA@ý<öCC ßvßÃbBbu: b*ÄÃuC:oäý ÄÖî@ÄaîhuÜðÜ.ýO::Ъ ~ßvýß,*zäaÜvCaC>îO bhbU|C~zÃA©a.U©Ðî<îÃz©ªZrý©£.åÃ_v._O>~ÃäUB£vra+a:vuAýC_ZîÜußÐåÄ/_¢*vöraä,_b_b||aÄ+ª+o*ÖzuBä_ÄCoå_ÜäZ©~åB>¢Üýü~U/@㢪üÄ~:a£ãî+Ü>ª<,Ä/år C>@ä_~Ö*£ä/Aä>_îßO,vAÖüÐÐCo@|äß_ >@C:äAåvjklðÖ¢Cð<åU<ðz+@ßh./UßÜAåÃ*ý/:üo@aÐ|ðßü.abbvh>aðböð~ߪaOö,£Äß:ßzoããßv_býuoîÐîråbbb>C<ª ý£_©b+ߪ|uÖCz©r©@åö+©ÃvvÐ@~©ÖöÄã|@äoÄåAª/_*>oB~.ã+ýu@U£Z,vö_ßhäª@ð_Üßbö£ã öC*ÖC¢ðoß+üßZÃÐýU_ߢÜ/ +rZ_ö¢ozª¢z<£AªuîuZ>Ã*@£/ªÖåBC_Aö¢BBA £hz£åOýrBü¢zî,>ö£AãB åZub,+>OýüooýCAoaZý|/~ö@Cbv+ZåÜ ¢@Z¢+a/öÜÄO©åbö<.¢C+ðÖÜ©<üü CCåCrß@:ß.ßaãAßÄ.Z¢ABßü©Ö,.äÖ¢o,bCã£ãb:b|<£ýãC_îübvr*ðuzhu+ß.£Ärv,öÐOhå*ß~<ªhüã¢ä>îÃ*übCå_>¢Ã©£îÜ:Ð/OßÄßOî+Ö:ªoo+ÐðîÖaãZ*ß㣢v©hð~ãÃU.:bßb@/~Z©v, UöÐÐhÖª:B*übrðUUßåÜ:ðüZåCÃ>.Äbh~vZaÄ,r/bBßzBBÄå~O*:ß>ð.v©äª:UOÐAr+ßîî_ã¢/Ä+h£Oß.ßðu+ª*B åÐA_~ýßîbZåÄåüã>ã*ß|v¢Ao@zA:å:B*zb@ãu~äÜýzÜ¢C_<, <ð©äA.,ö@hrßåîBOvOý©ßC,>£äýÄ,büߣh,@.>Z©håÄ:©ýB,Ã:ä+>Ä@+_Ouo.Ã_|ÖÜåz_ð.öã©Öªaör~ öªAýUvCU/ uZzã*åhÃbÖbC~O©@ß.ÄåvCBoßAb,îÄÐ.ÜÖðÃv£r.|O~ÄCAaÜðßÐýCß O<å,C/OªßA£*ãUüvOuz B_+bÖAv:BüÖzý.Öu,Ubü+|ÜÃ:Ão_ü_|Üß:U£Bã£BoÄ@ßZ**.<Öåðh ö@ÖÃ~bäÐ>_.ý<@OCC_ªýß©bü.C Öbr£££>@Äå.U~U.rü.zäãu+£ zh>v<ßZ<ÄBÃzåÜ*ýý@©| >ýUuBCÜåhÐîb£üåãÖhöAZ,Bß.UOUu~aÖ|/ãýÐvh|@hª©|aîh*£Ü_ªZACî:ßäö_©_Äo>rCåB>ý+>oÜ.U, bå|ß:hv,ÐBZ/v¢ýÄa<_Z|Ußå vrªa,@ðävbr*CÖvýoÐaýarz,Ö.¢Ä.ÄZzb,u ܪÃ@ßåbzC*Z@¢¢@arä>bårvýåu:_ÜåZÐ_öu_A>OChýZ.CCbßOvBråh/|*ãª.@@ub|ýÃ.ýüÄÃ+öîðääÖh£*@ßbã,>£r*ä|ê:b |h,,rz+@@r_£>ãå<Üoa/ýÄ~OÖÜ¢äC© /å@Z¢Ðvor._ rüaÃ>üBð::¢*ã|r¢.Ã@.ãåBÜý_UÐ>aßa:,,uÖBCåaÐäýUO:b@£Ð@îC< äUÄüÄ+//£¢å:Oýä |¢.CaC@ßBOuäZZC ðb+@+oo£z.*¢Zaî_Ü,üvÄ+zÖÄîå_h~o*>|@Cª*ö.:Üß~Öå@BZ©bå ãª_Ö¢ßÐvaCÄ<Üð/:_ßö|Äýß,ßU<>ZA©öü*ý_У/Üb©ýA¢ýB<,aUüü:Ö>/öîü,ü£>,Ub~OÐÐääU¢Zý *_,©/vã*ÜzACbßÐ:,ba<£,ð>Z©Z+CÐã<>C~*~Ä@,©A:Ð_b£ðC,ã_v@©üªå,Üü:UA<|ªür,å©_¢ßªðröua+vÄîzrý/¢Ðà Ö.rß.vý:ÃÐÄ@Oý£ÃbA.öOܪO@hO*¢@|£r ßrªß@ðüÖ ¢_OÄz|Z+ªzÖoýßAvZB£ãoob ãr:BU@>ü./ü¢*/äÜ oü*/Oß+~|ußzîo<<ääCCrCBßÜÐ_ä,ðäuå@ýOÄå©+b@ÃZ©©>v|Ö©CAå_©/Z@O£+~/,OzÖürÐbÃ/ßhCuv+U/z++îbåCoOäîö:ªý*Uß©ýb,.ãßüýhåOßÜ*,Cbuh*©CäübzC©¢ýäÐÜbý|Cü_BbåüvabCªb<öhB/aår.'), (0xC65EA6C2414FB1EFA46B239E5443CA3D7E6A156D618A970F2C26832D4A1C501DF9DE7614D9082648F2E148637803450821AA0A1D83E2063CC697961ACB83A5881B06A476CCB5647544CD7A7F42349628E17B0C9F11329A17D73A4E42720B7C6E3BBF47725FCE3B6B4595D9B66786F992006D3950770576E86C8D9E9267210238500C4482EC24C81240A0597B59E4AF5140BB4104D22CF635495E06D22FA8042492A0655A4277A5DCA5260FD7ABFB8F87DD4D52ABE0FD6524150E398D1EF6E2979C35E9B87E550EC816655FAC1C1F894ECF7EF4E2565843953B4144343E17BDAE43783A7611D609883F89957A9EB807F684EBBEA001004043F2537C3D10DA8AFEA7B168A3E4133CF8756CA2CDC3C9F782394EB053591DAC4338F784BD59CB7764FF97D2EC50631170AFC52B945D7380285CFA03C12A37A48A04256BED8F7E9EA9F53ECE2BF60A32D63C3FA494F217E5C4775B615FC7B53AC7F348E82BF724E03026819F1FA4543252C82D84EA930F97EC3FA675341D3FE13F030638AD2107DE185F736E7077C51F22280E979A305034E3B0FBEB50AEAC13E7A0601C9E1B8430C14F6C8B20A127747A87530B0EA7470EB3D155FC261B8D6AB25F86D017A98107A3DDD64BC4C41441898671C95BA0053F595168CCC6880AA5C102D8C01A565DD0054B6831D1FC4AEEBD13739FAAC30E12594777C640B4411BD33189C2EC53273329), (0x38D46D5D077A0FB2156AFAFEF3C666D2DF968F510A4C5DA072870169EC3F760AFFFFDA85DA19BFC6A48E0668368ACF26EC545392117205EB76CCEA7F78A6C6D5F4F0FEF3EBE1F8C5D7C9AC7C45F569E8B8DB7C97ECE3F98CFAEE0F0D2F3F4DFEC73174468CDB3A0B5B8DBB47C688A5816202C69D292FE811F771F9FDD1EB96977BADB41480235BDDA0703B5E27B1C671488EAA2D79AFD59848624F1AE13C3A70F723CB18D491003FA6E9FDB8F38AE945AB88B54340691ECCD81BCC1ED341FB6336CB6704E5AD9CB78D6A868FB21CA5BE79096E5987F62F8E05FF40B8C5E26C65ED99822723E560FDEBFEB5D6E28E19BC760DA4C9D2A2DC409BD8FFE66DE4F1ABFE21A219997D9B93A9706D894059AB76E58342B73DA2924BBC418C4AE67990070C0AD7C1EC0022F872101F613453FF422D8800E9A13A6D5C8E565C57F151AD30E0667C3581EA8AE561), (0x2C8231166942491C5D79A765D19C7B3295A3CA072162EF81CED6CAC143FE1A8757F541D95D3FF315A73450B63800AB9805B7F442964223C992AF48927788D95F5E1F0EDB5BA2D555B0B45FEC123948CD2B31BB8C09D8F115D27746ADF7609D1F5BF05719F2CF3C63E29E91E2E336B659677A6746CC4D55862EF809E45B275E4F163F9122E12FDB5CF457A96A470F319CC0EC467CF957530E9AD1EAF9C55808BA4041CBA3A49478379F0A5274A3EB3F1FC66D246EE1E256BFEC83870F44E1969C4FEF2A05438EF72B740EDCEE04DE6BAF92CB32583399D95DEB0BB6210D68F2BE73B624B3C039DB3876F8FAD20667BA0E18D87D79AF3E68B615CD1937D7D51E0B1C1E7A4EB9B7EE58F0FAE23B9F06578351A80935EB790F354D6E9DF320A360A0DAEEB6E7EC6B5460E92489B45C2C170E7696E62ECBE920A20F45004B19FB384C994160B0506F96E553A84CC6EF5AD921578F7D8ABC32D4F1CE13D8A76B0947EDEC3C1B1ACC66BE06FF01DA229C59B2B56BDFF48A7EAE8F676C6FE13C96EE7A4A615EDAB33EBF55F0D0768ABB57B1547560233C8B15BD6F3EACB4AD5C85816F108790C13E7EFF76AC8A03B90723D410BA1B6CDC73B2EE34A4EE9C068911F86B4F067A33C6F015F661AC90001103671AD8A4F24118A5FB5E985B1C4FE2F9EC9A92986A00A9A049CA05767AC721EE23A186812EE51EB753A90A1C9B6BD4C51367BFF56E79986771375B283BA12A343CAA387BC860CB077BDB45C0F58C05DEF53F6313072C7FAA081F10F68AF67BB17FD6DFF13358FCB39CB87A9333D871E4317C32FC3D172C102A8D73A950D47C855F93411FAD13AB9D42B0764FB2EC762FAE2BC50DC37E7367AACFC7A5E45362C73BF4339F9651371DD195B98DA0DD5E3D1743FA240F6FC2E11FDA75DD4C06B8EE4DAF13BDB9D6995CF4A73C2DC4E6C7CC71898EA1593EB8CC315280BCDC59D1CBDCCB40F1C9A08440AA9D2F6832941C3912A86CC37717940EF6478B6756DD809AD67051F9A5D603D0044DF7BC0E50999D3546A934ED0D53C53631FA81141DE9CC1C9591C24323933CA49BBE2A1FD800A5ADEE310F334CADC81D8BC274DB81BCE7642A9F79BED75911B36D8F514F29A65D3154D425EBDA99D0E7C9A4B8601F6022DFD6C5F53987E7D6951F5CC5BC5C79F3E5654386AD96FC8991CE92F532A1B1930C6C717863B124A96DFE90CB7DD3148A50B1D3FBDCDA7549DA3C636AF5F2A3F36EC8B94FEA009034409918AE05300BBDB907A481CEB5B732F7289D274DB9B47B5A9C5CB51AC5A04F219EBA42C1C643AA30A6B1ED4D2225B8108657C26268E787E49D5368D356A3F467545F2FFB757030E5F3F7A608C62D3877A4A4936DDDEDB8B7335E2472DAD6D903BC86F8C2F6BD9B1627DD6F71407E1D6F1BF12FB10F878967A777C7164BBE0A1D1DA34B40357681E7087D46007E4777B440B557E9A727F335FD911B7EF584CA68D251539D32DD3AA46F48A8924188E95F0013D696662075F5AF1642A35B02F184B2DD2E2CF3DA81627BB2795F7E61F375A7BB7EE2AE3401B2DB5DED1C9A96496D5624DF635ABD6C2591731BB4A716764D23CDFB9F840FD67EDB7B5095EC65C7E4680C085A828F1BEA4F58503A184D0BC5E6A0F8CD9AAAE8464E6088DE6CD6392CAB364B9A0E1CCA93B211502BBF9B658E708BAE4C6CFA4ABE23C10B21073C7E791F248EE20170B7CAD5651B895ABC87B2FAFA6DE127EDBFB1EC8C764C11A98C7592D60C9B0D828C00D4E47607DEC064663A58270CCF9C513164DCF674FA6AB82CD9A6F683B0ECA5776E6D0C4276B8D32B280F11B8817FA5F685DA36308C1706692C4A2D38C9E1B64EB3AF9E628F0EBBAC09CA4CEA59FFAA5A0000FED6B574EB5767A3162C8A9A624759C305D2E04366761F8A27C1CA1B102C9FD337C8E2E0993FC347FBECF78E216E68059196FAD779BD9A87B62A4C298C4B93EA8DB66399647829C60E9948797E9069B959C5897932C75A792E5B296EF29ABBAF590D016A0ACEA0196C33C8DF75200926C193D0C6C219B7C55CE96B094EBAD474DE9820718FFEAE8B24700DFFFE7A040E5203AD5EC9F4ED40553C0E206397CAB15F5401DCFF9797C2E445A2510BB8C6E1E55CB74B0C75AAEAABE01B52F08D278DA65B9FAA79270EBA6CEB7984529C349C752C3B06E07EA4E9A917301F7B44D1571D14AAAF191B67BD4EFDDE21FB25970FAB7FDCC35221AD27B6B60162F7EF3E281922673DF184835AC57DB8E3A083EE837F2073FC670E04FC6782F9631A05C65EBEB607D8BD5A1E27FB82FED568C98733C77DE3D67B41C00B1E6BD56E8B203FC0B65924E97C15C524024B00E4102E939DFAC69B9D21F0E37CF5FCBA5284AF9CDB433D1F0FA59EB7B1B7BED33041DCFAEFD83874C585A29EC676A7F47F5B73A053AF24A1D20F84F75C0FE9E5631CB33B1901CA7A4B3BD656A09F5898FEAA3756431D80801C3A28DF544017B69BBC3AA9C36BDA7D91F95418D9CE0032B6EBF9B2D793A1469C321FDFD9EA250B2320BAE465AFD592CFB9C54AC867A64D39F528694664DE081AF40C904BFBA3A6D349F4B8131CCD071567E31DCD577D348BD1A5E4C1BCC4BF41B2CA70A34546D4151E777F73ED391D272153DF81C13AC276D7047A55BFE41684357761515C64D0200E07AEE0FEC19D9788BCA068E53D807707FACB40CC7E563A60FA3E76D8CBCBBD83BF72B98BE2781666E2CC0344AE9FF7F7EA4A62988F5390B17480038227BFBDF0E2E526CAC6EB2481B5D9EAB253F5B25B467FED806925F46BE208176275933F220E1262C8792D30FF25E1E3B569DD5D7FCDA73BA8D13D87BDF1BBE7BED4C20B219AC7A34193E9E2194EEE5A88413E0104AA9794CD579650D18AA4D7BE46712B63D5C11AA13A1CECE4C52259E3E2FF7BB2B9E2143C2D3EC90377D2B6EE1124D3DCC3F6B280235FCA8DAAB008343C6DEE8A292504635DEE3697F7162A6865FED2A14F7D1FEC4DFB8E591887927C3594C609E32CC5EC1F6F7ED5C01B880C356227ACDD67E5BF4D023D2D96AA4AD65CBA61634F21843939E681E0FE4A2C31738224B65FE59ECEAF07BBE1EF97567425A87805BA24BC13DDEE73F7E505C102D60CBA14869476761B92B34865A349A1900CBB56D226764EC510D87172A7E8AA46B80AE3DD41EE903102EA277174AE3AA4D267D94A6B30B0956B4E75BB050473AA0802AC9866C34E1D2A24CF3B4EDD51629ECDA03F0F60DB875A4D72F379D52BFE767D687101A23D0E19BB1F466174468EFD121D3863349BA827243D18515AA455F8D1C4D174DF61FC8F912653409426E507E3F567B8F39A42E2C04ADC6425BDBE17CA4D8FB075191EB120A8D10D476792FE58116D653C9D053681EFB49584986AD4673C7647973592CAD7B5974AC8349A58B7DE0B135059DA2D47582E8565882D883EFDA60BF14B67237FA38E8605BA6E4D545BDEA58C56830E6149FF3E060C644E880F0CCB8E8E676C77E894ADCB53278DEAE13009AA87FBE77A97AAA74B281C723E3FFEF6AEA2BEC6F4712DA3C1D5430D21725325DB5BA401132450F7E4BF204ECC226F8B5531DF47236A1538595825A4539C86D9D5F796E39AFCE28951C7E13451DED79F66B7B8EF930B0271456BA7BBFEACA348384779D58B8CF1584E55F55B88E0E77A81863D9CE49645C9F5259D2E54278AA52399FB09650114DAC65FA03D15A6E865842D39786E0764A201AFDF65EFC20427CB5038EFE4DE157F7263D584F508B44E3D37AA27ED11361C355907B521AEEA045B7971C56EF880A618BA060B31DFACF9FB9128B718DC39BA191BBA8BD65F5DC378D1297C96EFE044B7040F330A2BEA55AD0EBA908533EC7E40B7AB523EF5CFB85D429260B52F620CB0E40013CD06AFEE3064DDC8A5CC3E45E5AB3BDE438E06C13456D5C7988A9F7DABAEE0A132D8B03908BC21D917071390044D7A0AF484C821DE3EDF7630E755A6C4601DF6EB9D120DFA01D5876C2CAA2C4245C34B0F958927E5BFC2F3F8390921677B14B7EA1CA5673A6D10F2AE41B4B194B234EB2309962FD6F6112CDA1E14C0F8B41FF117F342259F5C10A1859778A40A115F46051EFD5DE4E5E0F40B788C1C594FF9F921C399A1700E4BC7F9F4AA3F7D6C22C9BFCEBBD9B6C20C32124E1A26CFF448359D7E824677BDD6F6D23564EF3BA0779E56C35D8B941F425FB6678E21F424F805AC74A1FEEADB5101F7C407815D1DF771D77BD00B97BCA17D3C2290102EB402AE3D5F43C7FE78B47A715B93D018C101996F1D4A7854ED6DEFD224C2C74B41D243C15844FED930725EC755993B29D1647A21F6A01169895A4FF153F4DAB6EC2F3088500EBF7D02BF3FAAECB1FE5331C601BF47A654A0C0D938FEF40D863C98A7DA2669B2D8C2A4FD1E3761677DD85BFCBF8CF21B6F46DA8FC876D6C188F538021144D6D8E97FEE3E1A49881D3F585C60A2F74DFA497D38944BDAEA62ECE37428FE5E5638018313409EB30025BEBD4F6F19761E91A73EB9940C428C0E948B5237D55F1EE102245E1FE40D5B957C13D68D8B7B4875C4E380BFA4C12CBEF604AB1261C9505E9E6E6CF517FFAD9AE32417F86CFF831943DD72F1DE5F3C41F8A028DF614834B3C377EE1C0E525DC536E6DC80AA3352F78092CE83565E7F3F322BFD77D7CD389AF06335F410670AF17FADBBF882BB96C44D305ECE7AB05D64F8AFEAE255E6EE69AD429046FD5EE61987DD04A9A387BD76943829A66E6A203F06D0FC617C279C98BE524A3F2B50C6EF4945479CACB3C170F1734E1CBD47FA4322503F2D61859C5F416BEA513D7D4A4472395C29238393530F8C6F09D97FDB7757071DDB10998DC4A8E75A40C86F32742909A983EBD1209EBDEC1DD5159385C19073F9365F6F33D8AB97803B29528A9F59FADFCFD6578C86E67E1D247BB7AE156198AF5575FC15B9D6D0D75350E4756A627D7C1BB3B6EB39E7734FE0510F5CF4E96BDA91A234295CE525F9057F38360209B3C1FE3A9361ABAC766E02AD3468C674E36AE40AE4C72D5420358EBCE6B9AE3D4DD69E4D5EB9550A2EE42CC627AFB0BD32909BCE51F725EB94AA1A5DD2EEC5BCC0C5605DCA79152A14D9DBFF9B662C7184D08A551EDFEB55B1B2B9B49EF837401E6F06614E53F2B97B71BA771C25502D7DA9D80264709EE1D90BAC17C0608B1CA29BE12C60CA2231DDD0DAAC2473388B628B37F51F35DBAED0248843A7DBF91AE59ED5814424CCB286A7249396F2BC65D220B5342996FC6CBF335B3C42DF8A02D7BFC6869EB7463EBE856E78114817DE6822708625C4F14FA168C211C8906FA71D21BBD62B36C71BD97775A327845B761B7CD31F6E03DD13CD77E535F535752E15C65BF08C41B3325B55ACAE4E4D271C0D4BF54BBC4F391944A809B3519126A401478E61296BE9DAC9A1C418562EC47F50C828A93F2971C58D41ABE438FFE1CA2F08AD07BFC6F3A2611B821B8B20C215E4896388687C64D7D6C8D3E7BF05A2CAC0FAE94E81BCC089D5864823A7563A6D7F9600AE9B5861B2A3D531F7F20BE25B79B85B9037739427C8D9B3E234402F7F8D66682805F32E679936ABAB8BC997C9A3ECAAEFFBA9350B02D8E6C1A47F7E62A5B1698CA2BA568689F3F700C8E89BFF42EA3E48963F84E4305D262C0D6CC319B84805D95F0A27E995246607B13542193CE67FBA4036CB662C855B449329781D30DE4880E2C1A037C255B272D97C32FB1B0CEF26ED08D9817C9FADDAAEE2556CAB48D7D3ECC2377A4647F7EB84598CAF5260298739522F2704C6034214C588E0FF46C690A45F0E59D575E0A510EEFD2213FD874EB8CE325918B0CE26BEF46680BE17EB3D93FB0AF351D0B2C4728A1616C8E02F173D3A2731136D78F490E89AE00E5FE7F903BF8F18F294FCE81C6DE78E99B85DDDC54E4283EFBA2A268316636935D1B512A21D1209511625A93D3F14A685E95AD78BBC1AC01C630948956895DB3092B24AB7D4EC7CA6548CAF299946B0A583A09ABB8CDE79B7F5F63F13C973E8814978AA8CC9EEB1FCDD3136306A96821D59A311C8FB20A4B43992C2DDAD69DCE1A42EE0209B23DB95EE9DDE5AA7494C5F7321B926611F8529D3F653362CD44F7455558C3CB5628235C77CD95E41490CEF4662698BB0B57F84A8B74CA4CFA4691A4D690552BD0FA9119F835FE54527E789EA63F0C96AC3C49FD60794FE15DD652213BF10D844BA3236B958EC2C569A3E80D0C2BA6CB49FAF89A5667CB57BABFBC21D3CD186170E452F31BA1012D797493BC9142D5222F96E73108632DE3E7DBB0E5C2A0E19C8B768C17D8B3AFA8F9CB20D1C40EB667DA99F23CE5E7691DC67F1B4FE01B6AD89307311AB6CD597BF74E473D324C1FD915490B38AEA4B6A41D7E4159986FB8DE60584ECCDDABB11D30864597A02BDB8A6F322A97003229EE409CFD387C0FD3978568DCE9FD430B7997FDF8286F1EF3E1A2C6EA663511CE2E2E607C30AE78A120A2BE12375EE18D1C26B10F123A018F31990B95A5157D52639AAECB9CD6CACB1F5CC785A10CBC92C149DE3F7402BBE41CE14AA792E2FC1B255BAEACA015F0455BE5FFC5728BDE34DC78C46B374DEE50EECABEBB8C23383C50BC50555E1FE2AB4998D38E12F671910315CB1A1E90D3D77D4DCDE56734B938BDC364B62B88D6CC961911AE7A504DE8491DA876682E1DBFE878D81051FD4404DFAAD05F81BB658A3EFE73F58F256D2D0FD59C499C32D09FA5A4DDB2B0C67AA8D50CCEDF7FEE668DB82E4769AA1830B30BAB107C510A78ACCA40B9DCEDB2D97883DB2072569DAD217F0E817DFB66E59D741AA705B5FE47CA8422053F3489AFF544DED5CEE7BE5C7DFDEF0D42790AA1535B1C68C31BC3B2858365EE34987DECE56E8C292C9126B5B5CE3907C6F0F5418970A1D41820DCE9811C404B71C027D5700217E3ECE184C23466A304E2BBFB948E2464B3F699D4C481A2A80040EB33E5965387C4D91154A7EBDFAFB17DC806C510BBBD5D6B63EEE63D53524A4984815922CD7E8F2436BB7CCFCCD816FA1346B99BD2FF852DD68A3274A18775CF1A5E675E569EB0597790DA00409D9E9BC7FC1A1C98AE6684FC2B4C433C1A82AF35ADB56E60C89384966024321584ED48EBA6ACB57D69266BF7D2523B426D2D6D1E3ACA92D8202B0F589576388A247F773DF357956DCD31CC8759769E7668322932B723EABA5A60BB7BAD5CD7E2FDD1C362DAFD4F1587FF40F90E0B8EB99C88E0535CF5D30094CCD392AC29B06059D99977B32B9B7AE313BAB7D2E1AC4EE201DF147C8495F80EC2CE1E19BC696E3EE09F2472170660FD7560394B1B2DA31094B09A4AABF3D5439178E06D8D5136AA5C78F24287DCCB0B7E26F7145CBCE3951AFD850BDF1392ECC9E0D09E16037024399EEE923B6098C7E59EDC750CC0E6E4855B428FCC2ADB38E60588A6FC2CF56AB6C2DACDCE5159BA64CD2630471DDFF8F9FC18BAB0E0580EC3B5BC25E7E1CBB8A961CE39E619263401982B0F049AF1C8258FAD00143AA9C67ACC0A089523C272F17D96D54F9612E0C5E4A928B5490A38C3E4006844CB946EB807CF1A1F1D9EEDC5A80D86F41C788F6CCC3A3F81810121B1D144B1236A2E35D9282D47D6F8C1B845CB630D4B8334B76B70FB888164DD36F6AD684DC8EDBA5B89D7ADCBEF30B873FA71E9B61DF3D63E9C9D45B27EA5A4744AF651299073EF6811078373D568C83AB8778E1F7B2718F2C729A13BA807DCE4233970F8DF9EE3869271A51670626933C50B0A071794F923DD6E5266D2B3C0093AAF40ABE7DF6B1994077D0972027264C07D669D0DD5CC8E305D1B714C7CB3DEA19BDBC121BD4BF5AFE0630017FFB1DAEBFDA6554D330B54D2B26B9AB3F9DD2753AE57D626B133032170FD1D72CC76409B40854ED65E917E9076FE6F51B141A6033BBC7997DBA43ABA9323DC35EDE2164C1AFF63649E50F50CD945AFC2D3A1702F470A370FFCB8CF9C5A94332AB548A294D82346B1DE4174EAB76CCE95F477E6E1A3BCEED3BB064F622FC719FA1DCA5790931AEAA06ACE4105854C589FFA39A7E2AD41870859DED9D1D3E48207277ACCED152DF2D98D3686E56BD94E6EADBF77F62F375CCC435F36C44118DC763C39DE0A7F7B8ACC46CE5576CA919C80806B24247C9BE7F02E0099C5F72E98746A00A921FB33FF3234BBBF60D1D601B1B2B643D5E4A809A051EDEC7ED1C4C51825D11CB9E87A854C7BE1FFC0EC771E57FED80340EAC28FB20708D01D5770506FE6973AF0C957D93820F75A02A848C3DACF847FF9B1743D63515AA2DF9A67E4FB918FDA453C1D8EA70ECB1FE3688D19CE44F54DC2F056BE7269D7AF6EA4F9ADC9025E61186E7EAEA1F5D8EAE65449FAC440E49AA51A220B3AD167EB647E2002152D56D10A1BF15FC656ABCD276BD81E1FDCDB2DB05EF8AEE053364706933A33D5D6D5B90D68E0B84F94C45E7E54D3CEF949CB97A2F241C634B7F0B6D5BA49331C77E750962F10A6EC22EE1B8AAA208B7F775DBCD7A290E3851F74457839D2955B9132066D8328CA3914AB7014363B9A9765376E5C8C5B79D703CB86AADB3EA24058CFF9681A1DFC4E8383C2F710DF4EE3E9AE13026438CF45B82F69B7A22F6DE5F93FCB7632228D473B2FD9089872C6348CA2B12D1BAFEC1FF0B3AFEAB444AC5415DCFDE103D8A1B720CBC7446FC6AD4569253AFF6E40CA4943AB758E829292F68374E2BB84E520A40109FC5FE8A7B03A066A818F09ACF5D512B49D686313349E38C0B0EAD3E1C0740496FE64547A60ABFB4B88181103ECE68F1DA8C057C840FDC55E1717E6C55624AA1D8A72AE9180A843E16D179B2C8D34E3DA6BC648F02C4C4600AEF65348C535E5536DF3796A37FD9D008C665B295298D0E2340C599FDBB9E14E2CADE28A44FB2C373237BE89BB79927E393863B5E12CAE06257114B8DC4577B4023B3D9A0B02CB814A23F72AEA4726BA69EB66A3463B6D000FEC64C3E6635AECB00A77704C0873267CE27BBD35731BDE4A6A4EF0EED46DD6DE3D9A1E9DF79AD6D90A7AEFDFB67E6168302663CFAFCA8CC096798C2469FDDB9CA0A20E7E6488754794E42AF83BFE93EBED88BEBE0A173E630D4E077E1EB27F0CAF433F046FE303A7A11C2ABBAF848497E59036D14F2D828973AB7116810738E2752E58F8CF8F8C0A85070CFDEC72C378B96F988E7B9DBD71C0A590C471ED26A9E34846812B9BC856143C4C482094ACF0E7F85D116EAA66D760E72829FEB78897E0531AA43C325D1D97426A4F5175513BF89FDC8990054B38E16F204473AE575CA3B467CD7A08C4A59B3F7A1C401785EB85FC215EEB0F07DB17E1C2CD1208A9F8EB1DABAD1D93B1FFDB36EE509B2EF8C9E934BE778D087194AC8CB59845F78392858121227BD8DDF23A3183A420A74FE8E8F8E3ED4A327BE2AC06F080DE29B9D3B34BDB0A0DC65E0066CC3D5B84CD64054CCCAF4D13964853153E8664E84D141077AFF0D4DC35DB229AD3868DF5106DDE92EB34017A6CC01D0377F4CF4FF92819A81CD3D4DC9F3916F18CA2301FBA5DF4C0B7C1FD1902A61ADFE3D154311BE2A1BB7CD5D84C990203B22D1FFDBA9FFD492A0FFE98273AF0A576B8F4E8BDD4D5E59A0074A2E475A837A5BE3AEBE2A8604FF6883A311D5A7A807C306183941945DD573A53BA1B5A64A457B6E278F014B2CE58B4F235AA94C84F85F426A41414A38C785D84B854B6249C2385E956680180578D933ADF271032B27214241723B090331355F0928FFA799280561214BB61D77473DF2670E9C465582AD24640821D7862F5A6431200EDC78329A85EC10E1DF7003CBFA3549A2F594EE0A877BDB4391072EDAF2F052EC563860793473175A45A1CDB3603C26A13C8D65CF421687619CEF087DBE35EFEF1D1775C1D5D06D817D94C4E5AE28E254E08C9E648A83A93FB1FFDC456A999B10B1DE9649C764CC6C20E451AE52A1B2740CB49D31978A64996E3510D6F32716E4F8B433D091998D7BC03244A631FAED0F4C6839B6FC6A792679FCDB9154F678F8CD6DB59E6DE2E2732621716446BD68734801898BEE5FE78E3A0D5695BDFC27C9B94BD8C4454FA16985C590DAF914E0BC946748536CEC0A6E852763608C4DB529F9A7AAFBE4A42EF95F200628CF0C94262C9A0056B4D45DCD416A3E1DEC40DD371066E05169E5D7F0394EF34CE6E19E78923C34F14C5F75254ADDB97A65100D1F43CE18682C43BC47C3101C65E110E65FCBC58AAF0CEBEAB0F0BB078C2B5D8A2940D30918C9354C4F80EC2E3C43104439F75AAEA0855E1357E36778703C301C6586F3240D07CD9696783B2F1FBCAE6DE077CD94D0AFEAA3E2C0B13461BDDC134FD0C8B54FEB363129C417274A2FF39A35F998F96E9B4BB69C50424D569934D89C27DF4FF3F81DF4419B6A0C97C358B3CC16FF6825E2A4B4841219FFA9E8DB90903F8A2350A3A73CDBA4B8D3303E1FD9F88E803F99CBB3BA822ACAE1DF1E4A58BFDA7C58383463286FC38C802AD18345F240071A689BF7C48BD0A025D9C55CBD595F1356C2C7A0C32B57D0D63F328FB1A684EE9F172FF023E2B8CC68943D4FAA66CF27CABD2D832B9F43EF10CB20855840EE7E54D6BDA6296FEF730AFA372FED08266F6F0BC4F47901C3FFD340E058C2327427A5BFFBD3A929FD5BCDB9783168140108A5B1154D7CFA045212BED2E88F97B1D786108A2E0C52C6460D6926BF899297BE3FD7B3111D26ABAABAA8C0EB5614CC3608A0AA588AD2FB53EACF4013D345C9802713A9B7E4A0BA5F64DF746491DBEFF89CF0B7E8E73E346CDC60264EE697D775DE40C3436B145268E64AF3AB5E96C10EDF4776E38DE198E8DF3CDA84796C79CC08FE855017AC8D889E4F019C4B890E459E176E9E21F3E7FDA7DB632E39CDEE7AD126A25F1170F733BAEE443EDFFC9C552E94E561FDDAAB141688A93C485E4ED06087CB25E6AE342D203AE433AFA91DAB3E0D00A5E88D7CF77A8E4888C7BAEA5C9F74DE5831776F7F60B840C2F578646D6AFEFD3A5DA9E8D20AD3AA5765AB66665088933BCAC47AC69E8144304CB9010229DB1DC8BDAFFEF68B0B4E5DCD1719B451DA726DE429A3A684369CDC64B88550D2A72E8A8E9DA8A0899CAFBE751CF9866790DE7246941D0037774486132292D386FE8A25E98F26B331D2E3487AE430673C1575D4D913093E8A2D521659218C670ADB387791D39DD8692A4074B0D5865346DC49FDACBDFA73F44C9BBB3C0F5910467B3D9EACB9D569789D6AAED2958DB4A7FFCF7DD88FBA4CE1C5824438E19B5AD0302E3497E7A68D06E0840F534BA05FBFE6133D3FDC37B6C0F0BCE736903096010FDEA267581DBF584276F70AABF99625238551), (0x00), (null), ('3753-03-27 04:11:38.361'), ('2023-10-03 16:02:00'), ('11/19/2008 4:38:05 PMThe quick brown fox jumps over the lazy dog0123456789,.;:?[]{}()-+*\%^=~!@#_|/0011/19/2008 4:38:05 PMThe quick brown fox jumps over the lazy dog0123456789,.;:?[]{}()-+*\%^=~!@#_|/01'))"; - break; - - case 19: - $query = "INSERT INTO [$tableName] ([c1_int], [c2_tinyint], [c3_smallint], [c4_bigint], [c5_bit], [c6_float], [c7_real], [c8_decimal], [c9_numeric], [c10_money], [c11_smallmoney], [c12_char], [c13_varchar], [c14_varchar_max], [c15_nchar], [c16_nvarchar], [c17_nvarchar_max], [c18_text], [c19_ntext], [c20_binary], [c21_varbinary], [c22_varbinary_max], [c23_image], [c24_uniqueidentifier], [c25_datetime], [c26_smalldatetime], [c28_xml]) VALUES ((null), (1), (-26881), (-1138956117), (0), (1), (1), (0.3936), (-100000000000000000000000), (-922337203685477.5808), (0.7860), (' '), ('z,B:>£@ä.vzB/ßOCå£ýüuAªh_v a*A>Ðaª .ÄaCäÜö+£az֪ЩÖCýC_Zßüîu @>+Ü~bã<Ü,å@COZ£öCU@ÄvÃZ+ÐîbbªÖBî@v/aå/uîCöväªäðv¢ãã©Ã¢Ußb,ãOß/O£Üª~îä£bÃA¢~z/.Üåüß.Öî/uîA¢ö<ªACÃÜ¢Býva.ýÜo£bAð+£¢öraA.Ð ,ÃåuÃ~bý>î@ß Üªü,.ýÖÜhäBUZä£ßC£+åÖ~~COjkl©|h.| ã*U¢ª/ý|UßÜý.Ð/o,Uoð|rAãrhß©C~ÐÃÃüaz~>böîr*Ü*rå:£>OîU¢Ö£ ,.<¢z/©BBZ:ÄC~åruA*ãU>aU*A¢.ß/br+ýOB|z~ÜéUî/Ð@îZÄA~.ßbî,uZZßUv£uU h,ߢð:~o|UCߪ>ÄCB.<ß~ðZà aZü/.ª©O,,@äzU+ðУo,*ßrörð ýäß:©îå~ößZuB.ÖAB£_CåßüãB:_vß+î¢.£v:>.Ä*îäÐBOðßýÄßÃãOv©äÜ~ßãü¢Ö|î©ß:hz@ÃðruaBå£O¢|_AÃb:oü.Ãð~å,vCoO@B+ã.výðýA©Öåð£r.BÄåãr©<Ī~BbßüîöÄhbvÄCÖÃh,:ª£ß~£ýzßåÄhßz>O@ª>UuÃãä+ý+<ã<ö<£<Ã_:*öuðbvýrZÐAU, ðÖÄß|£©<:,Äß,Üzä<:£OäåZã+zZzO¢îübý©rý:åð.ß.BuUärå/v~~u:b<ä/U++zã>ÐÐ.CBäa|ÐÖb>:BÜ|UAä:,|ZUzßZö|Ð/ðävbö¢©ãoýb.,u*åOå£*.ÐÖbAüß@Ð@ CãO>üüAÄChß_hª,îbb<Äöã,aOBrbýßoB¢£ð~uÐ+îoo@u~rª<£bÐ:Uß+v/ozäÜýÐzýÄî>©ßÃ*Ã~_ßzO/ý>Ð.ðBÃãßZ©ob.>Co.uUäZCßã*+Ü©v~övÐ +b~ßuZäBrý££ðr<,+Bö|Ä,ð|~ÄîO_ÄÄå BCb~¢ýöaOîßrÄ:~Oårã OªühAu>+©|>ZÖzãb.ßÖBý__ä|o| ª.@/,¢@ÜB:Ö ¢b>a©*UA©ðý.ro*ð©u+uî©ðüzhUu@hO©zOz:ßU£ Ü_ãßAßðÜðb©ua|ÃA Ã<ÃAAOB©~.ðOÃ/|AåhhbOZ /~b@/Z¢ª/<|O¢zÐ+ÖC/,ýªu£Brh.|üh.h+~/C~UZÜzÖrä,.~,Ö bãö*ã+..Uorb: oAvÄzvoåhª©ãAÜÃß_AߣB|OaÖbÃoýh~vZäÄ*håB>ooÄ ©ý*£Ð:¢oUßUªãUöU|aåaA,|ob £©öz>ðää ÖÐb/_@.A<¢C>îðãöhZÃZZ/O|,ßöuözzÖýîr@@~*>ª+b@üßÖÖB**£o~b _r©ÜChä*,a vZ¢.>aZZO+£oö¢@ÄåCoBð|zßÄ>ßO¢o,_ß+Ã~@|+äo,rÄãbÐhª/ýUuî,ÄýßÄýOC£AüB+|ööOzÖzð@+ªö©ÜÃ|roo åýüªÄä+©bÐoÐÖÃOO©U©>ðüä*+äAu>_:äßÜ<~ý <:+¢åßrärý~>îü<£.îC¢uãßoo>Zzîýrªr ÜrCZBbo>£b¢a¢>+o*|:+B¢£u<+>åüuÜýz~Ov_CßA:ÐrÖ@oåßðТ£hãuh|åßÐ~v_.Z£ÃbzC¢uÖ/î+/îÄz>ÄüuªCä<*bÄ£ B:rOÜ:å:ß<ßC,îÃðäÄ£O>uäZ ßoÜuÄv,ýî£ýÄO£/ãä©uoBuuo_< b:ßä~îãöZBuBu/h_åzC¢,/z/ *bªaý©,vãüo+.¢/,å>Ozv,*@, o:éu>öã.ªav+ðZýÜîöâåÄOrª*ß,îðUýöCä~Z<äð|hvAZ¢/Aüz©@ab ÜÖ£ßvOä:ýAaßߢãÖAbÖbÖ/oðýîß/ªvÐýåÜb㢩ªÖÃÃZýZߣ,h|£/Uý~*ªÐß*,/ãÄzaöa_aC*:a+boo£Ov,Zb¢ZÐårÐUîãv*vã|Ãvä£ãh:ZüU¢_O/b£býhßBavbßßÖr@r£Cuª<+zª_oª >v©|ßßrO+Cb<©ýßãA+UÜÜ~@z|öà <:ürÖÃÜßhvö+zaZýOhß,>Ö>ß*|_ðÐ*ýäCåÄðhãÄýuAÃÜ.ä:Öz_h/hzãÄöOãOhãbßvBU/z*ã .ão:bÐ+>Bܪrr|ÄßAýýüa@ã+üî>zªA:öÄßazh+£rß*b+Uä~Ä+/,z+äzåaÜ,_.©£ Üo©/:hCzßðO¢h|ã>Cz*å<ýÐýß+OrA_äÖå|/bC>ý@îöb ©að£Ãb£üZ*>+ðîßÄå£ß|Boo¢. _O¢.ýß,O ß/@>üåå:@bbhuÃZ£UhäzU+@< å+ÃýÐ~aZ+häÃuÄ¢|*O <*ÜЩîüßöCZC:,|~o+b,£ÃývCZßaßuÖårOaýC£ABÜÖedfg,Z£C:rZßÃÜ+>ª,BöaÄ+,ðv,~:> üªå¢ßOBå@*©Ö_~,>uª¢A£ýßÖ*ßÃBhåb©üäzOßh_z@>~ª*ößß@ÖOüã<ÃýÜhZA>aТvaßÃZuÃbbz@h.u,.üå|+ÄCßý+<åbvã*UzªuZ@¢Öãöý:rb,arhߪ|>bî*büoBãªuUrb ðîßîrýbrBZðý:©ö/ußÖUÄåU|:©hZ,uöåzÃvuAÄ+@ýÃUÖAO¢aÄoa::ãªA©u/@ãÜßä*b©Ü,Ä.>/uUA¢<_Zbh|uu<.ãªýÖ>Au~~.rÃo<Är~£ä¢rÄoO~U~_AoUb_ßr@~<Ð:rå<ß*hC*üaZÐ|*zh/ßov:©|.ohh+Zr¢Bð./zu ã:Cu~aå>>rhüÖ¢ Ü/Ü@a~båߣ@,+ÖaAÐ/+UÖbvößüZ©,BoCoC¢:r££b.> OB zªU:,@++|ÄoßÃbZ,<Ð<,uvC_ßbÜ ãvÄBã>©©.ðâÐß_îz+üªÖaaªÃÄCA<ã Öb_zabýr+ªü|Aã£.ÐrU/CO|ßUC,C,¢rÄv+åÃUuîu,Üuhb/~ãbÃzv/ur|<Ðbå©äßÖ.Uz£üöO>zAb ö/Üß@|bà ðZbOzr>oa_@ü<ÐßhðåC>ßü.Oä¢büv+CßC.<üU<£Ð© Z<@+:Äü©ª©öO@üäåzÃo_î£/ÄãbUãå:U+ã<©ð£>o ý~Ü:äðî@B+Oö~h.£bß@.vö|*v<~*îåbCövÜî*ðîýbß@¢Üîª>h,UýZßîüUÐ_aýz:_,vvu Ö¢>C>ߢ£Ü©Ü+åýÜ*Azî©ÃýB*ß£ß +~ü< ÃU©ö+ßbªvÐ+vb:>ÐO*ö*_£Ü@oZãazZrÃzbrÖB.©>äb.UÐbÖOz~OuACßA:hÜBübZý_ÃüavÖ¢ÜÃ/>:u@ßB@©ÃÄBü©OvoZö¢|_ßß/ÄACÖð|ö._~¢ ßö*Ã|Z*|å|AÜÐB:ÃhCåéßßÜýÜÖhÖÃ/b|ö* ªöav:u_oa aãBvv.Ãö£ah~Äß_rßOhörßÐhbrB¢u:U£Ö£Öðb>/a+¢Z OAuuÐU.*AbCrBörb bÄrÖ>ßbA¢ozÐC~~@,öbýååübî¢Ä__ãBZ,ÃZîb~ÃroOCBB¢î<@ÃÃaob/OÐhääC@>ßba*/Z©/ßUãßÄÜåüvÐuaähbh UBOöÄãB¢Ã Abv>C.ÐrA:äåaUAhªZzßB@à ÖCÃuBb©brUZa*ÖÖ+~AÄöýz~åã+A*©bð©>OÖýÄ@BüÜßÃÜüAßä_öUbßÐ /_ß+Äa ,oz¢@oaÖ£bðÐOr¢ßðß~OßÄßåäÖäz/îo,ü:,@<*@¢äÜZOhb|CßÖå_hã>Ã*/ÖÖzà Öî_ÜÄßB |zö b/¢ÐÜrÖ<ÃaªUCöÃOA~Özo:_v~zãZÐ. UO@:vÄÃý||u¢ÐzZ£ÜCîZü_£o~å+o<*:ÖZ©*bª>/<*ªrÖöãßöZ£boßC*Ä_*å+ _@rC:*büubZÃ.ö+ åuÖB/äßZZöO ¢@U¢boßBý£<<Ðýbªß<,oý+£hCZî©Ãðß@OÐ Ãߣ¢vhZ UÐv*:ßr>ß_a UåC>Üvh,bãüzý£+ßhäCaÄA.,äð:ä>/ýüo,bß©oãaaåv.Üö+ß/+*ü.ý¢u:Ä£äßvå£ãýoª|_hüaCaßÜý¢î|£/hbA|OÜä*ö@ürÐaª|ÜßÜuîu+özýß/ÖzäåÄoßåZz Ã+å+|C£*/o,Ü*£ä<ýB@Zzðh:Ð|OªÖOö~Zvߣ.o|£,h_ý:ßß@/C,b_îÄhBöý©*å~Uuß>bãrbã_åîO+oaîÜ©O¢Üäb+|£|:oåZ>_ZÜ£zÄ©Ub|_£a@Öððbî©Äö<*ÐC>r¢ª©£~,¢B,+~býð|r ,+bî¢@Bý¢ß~ß.îrr<ª:ååb¢å£_|<äÃÜ+vA Ö:Zýb|©üªbzü:,ã@zC / ÖoUbü¢Cðau@,|/ÐOª,zuCaã*~Cbao:vö~aýzbðCö_A~ãÜ|åöB ÄÄaurÐzî>ã|CÜ_ö~ß_:/hÃZ+©B/a|aUCîßÖ_ð+ßvýo.v+/UbårÖ >©ra/£_Czz >ª/röß,£/ÐO/üZaýUã+C*UîªU¢ÖCZßÄöÃßð©öuzv>_ ~ uuÐ/©zvðOüUÄßüzAZ+ªAuÖh+*Aa_C¢ßðzZa,A©ª>/A>ä©öCUýurOÄ|B:b*b¢zÐß_o ,@öðaªÖC~rUZÃ,ðÖ_î/¢rÖr| ©ªýrÄuüà |~zbrª.ªüîrß©ÃÃ_rîC@C£ ,ª*aÜîåüZª*ß ::ÃãuªÜZ*@ýðZ©@zãouðvî<ã~£ÄBððOzä+bÐrZz@äAbb*B>O<Äv<Öoöz@Ð*bЪO©¢Ä©A|¢~_å~/ããÃ|*Ð./üBö~@BªbbÖ@hBå|UÃã<¢ãhЪoÐC<ãoazzOr|Ãhhðö|_Ü*:*öv:å@Uß~ã+ .ßýCUåÖrßîÃý_|Ã|©Z~öUÄ,Or+Z>b@ª*r*Ä*ðãz©Ao¢/vZîzß©hZU/BÄ,ßîä~vCZZ ßrä*¢ßüðîBböðð<ü©.,zCÜUýöCð:bÜA*oð>Ã::Azz @a¢:åý,ª~ÄåýuAüä.>å@ãCbÐßý/ß@u+BýÜUU+Ãhvv_böªäCb<:ߪ<¢@oCrö|brZZaCðªÐÜýÃðÄ©*å©ÖZvOv~aÜä:>Ä.ZÐ|rbvÜð>ð@ êBCÐv+Ðã|CîBb<*/üäbv B|>ÃU//z ÜOzv*boÄOZ|A+~+COýÐ~,ãäCO>@¢Aaðz_U ÄßßhZZU©ßÃZÐýC|b/ÃÄðö OBã__Ão*v>hU© +ä:zoob/îÜ_>:ö>¢ßz,,ªÄzÐÖ|@//ܪÖ:UÃ~u.ÜÜUÖrbýAurä£ÃßävÄ£_Ä|~£¢aCOßbuvî,,_ªhã@UÖÄ*z~ßBÜår@bA>äOh¢ÖbårýýööUzZUCåCZüãU brA.îäÄräå@*:@B/+_Ä**¢_Ü<£b£ðÐ_aöß|_b,£ö_,îv~bª|ra_ã<äUßCåbãoåß_A*u<öýv_h£vvAo_ß*ä,Ä:ªb@ZvC*@ubO¢oßÃü:bÜ,aýz'), (N'UvahbÜåª..C:'), (N'z+¢bý.Ð|.ZãýÃÃ.êâÐäBÐÐ ¢o|oÜ©ÐrhuåßZ¢b|ªÐU:ãÐîîÖabÖ@+Ü*ÜÖ*Uo,¢ªBÜ_<@ä b|Ov*>v<åU£,Ü¢üÃÜ/_A@Zã,rB¢*br/,å©ýr*C.ä>v:ý@ýãýhBÖAýãßÜÄßbvåð.Ãßv>C¢Ü*©A©@vßãåuU£uü/.,båu<_boý~ãÜOU<Ð*+ÖBýzz_üåîãauÃ:U,å/u.ZߪåÃð.A£¢Ð>Zäu*.bÖ Uª¢rhÖî,_Ü+A@ðbööãuåýßÃåOÃo.ÐöAa<åvÃý+ÜväZ:,rz+*B£ßbo£ß|*¢Ö,ßb,à C:*a.@~büaÃ*ZÃäzßzBCýããBà +ª+<ßåÖbBäA Ãhuür¢BubðåBýÜz| vªv bhüÄ>uߪuªaZ:¢öåa£raÜÜ@/aü¢ÐðßÐä/Bã:ðåu@.Oã>OßZAãÃubr |CZBh,b~Ä~_ý*~,üBzaîB~ðavr©ªîu~©£B_ÐoãÐã:ßaä*vb£ßv|o/vCÃABÐüüAªÃ¢ ä~|åaßCahýUCßr©üb* ååýã>UÐrÖ:£å uA.:BðvÜb.Ch/ðZ_zaüv*Ð:åÐb¢v~*_>BðåßÜråoB|ß:äÄb :©::êü>|_ÄAZýrÄäªA@A>ÖBhßOßðýaAaZßðåBß>ö,uU<ãäB*C~U©_züî+ ä/O|~@©AaoZãÜß_|£Z>ªZöb/ß,Ü+:ýäa>ÖöbÖߢÐßßäöbvß:hü£©,Öbð+ÖÜOÖz~azv Aã>ßߣÜß>Bh+@~zU> O¢ÖÄA©ab:ü>uã¢ßöߪ¢oãAªö_ßU+U~/bb©h£~zßßßÜOßzvv>~~ßê*>haßou.¢ßå_.hO>h+<ßß*bäߣv_ÖߣßÐ<Ðoý£Üo~.OüzvåhBa:u åßa:Zroå©©ãobßö,a@>~zu,OB__Öh:Ð /:ä©ÐÄÄ/¢ZîÐ ßu<öÐb>ö£a£,ß*Щ,Örð>ЪðZ£ZßböA ©ãZ bß,,U,ß:rvî*üÜu_Ãßßbª_©bÜÃîÃü Ðüb.ªª*ßÃCöoÐaÖöãvÄ>¢åAuÄ>hzª|ðß_ðßOävUbã>ü>@*zßýZÃoU~vhzðbOzª|OÖß *£+öZý+~/.r@<ãrzBßÜ_ü©£åörbÖUöÜÐÐAüo¢*.oäýßÐB,~ CZ:+ýU*Ãý¢:Ü:åAÃÖ.ª©ýãðß_ªÐ£ö<,Ö>©voo Uv¢zC¢¢C/bªÄü+|*ãbÃ<Z>*o¢uA_höbö/BÄãB>,ÐB:î:¢åý*+î@ªvb ¢rüÄAÃCö~+öö,ÃÄå>¢+.ã~å_Öu©Ou.:Ã*Öb£hÜ+bü> BÃ𪩣aAüå©Ü//î*~ÖAîÃZ.|b¢.<£öüöbÜU:Crßh£,bªv,Ðý/¢<ßu,aZߪÖåo©@b:|ãO:u,öåUzußZ©å.bAö©ßBZAî¢oªðî>@Üýröý*,ªh>>azüoÃAÄÃßrÐ|AÜ: Bðr¢* îÄ|b<<£/¢ÖCö¢ÐüîCÖ|:>BðÃ:bý+ObÐýü.|©Ö ß©¢bîö|üüBzb~hBCߣÐäbã@vU|ahýroZhÜöîß/rýCv<@,@ÜÖ,+ýüÜ~Zªö+îrUßðbðÖ+ohzà A.@ð.Üß>ar,bv:o+¢bAߣÃbà .ª¢h¢¢Béö+b*ro|,Ob.ãß<ªa_Bvä© +ߪýOo*,|Z,~@ÜZvãåUU@aZ>ªCAhb@ãßýªývÖrü.bÜÖa+aCo äßý_ vB@hÜhoÜb©ü+*Ðß*~ãA*Bü©£@ªðå*åÜ>vîßÐãðrÖÖü/bAa©+*üvüüOUz/ä¢OrZ/Oå©£vªC_~ª@ð|@+¢ß@B©>zýZa|<_vO|îu/z:ªzÃ~CÜãvCU¢Öb_büaß:Ö@,£ÃC~v.bªÄCuðA>ß@_Ä<ÄoÖðÐ>ÄCªî/ý_ör©ý:_>/r@_>@h@|h£r.r+O_:.rvUhýÜub:ðhÖßv+ãhÄÐz/u>Uz|Ã*OÄ+ÖýZbå/äãb~ü_ZîÖãöb+u<ßhüüÖaß.BäîÖ_+Ü@O<,ZåÃÄ<©u |ÐÖzß<îüãzCh.A.üÄbßÐ_ü Ö|üð~C.>Z_©vÃ*|BZ£,ðrb*üv:Äý/å<Ü~,ýÐã_zä.ßãªÖÖТoö@BhbCÃuý©h,/b,båÃZ*ßvÐ _>+UÖu>ÄBã<++¢@Zz@ãäO:ýÖ/_äb/v ©Üܪ_Ð::ÖO.z~~AÃUoabz.ähB@¢ßu+/Zã@ߪ~Aý_äbbÃÖo.O,ãªî/uAUî¢@AC£U,Ðh:bÖ/BuOz,.v¢îbrÃÐzð|ã£/rü*¢Cð¢baîCä|v©o/Ü~o+oCvrÖÜîo@äOhÜÜ©ð ,,Ö UÄßu£.bo<ÜU>bbãb.*hÐð>bðÄÜ<ýUB,r,bî.<ýC+ßaAbð£ÐÐããðAvA.Уå@äðBð,,bBah.ª/UÖîð<üýbbÖh,O*ö+£OÖ~C>vÃå:ßoö@rABÐ+ü£aüa oãßvB> OÄoÄ|:UhðbÄa/vß|/©Üã*ªÜr@ßOö£/.Üü<ýu+><£rÄÐ/Ö/üz|©ÜåUª:,:ubã.ääv.bß©r.@äz_Ä:<:ßäߢã<¢CUð_| ÐÐýb ä:aĪZChoð~Ãåýîý/rAÜa,£zßåh¢bßC <+ªa/BU>@ÃzÄ@|b|© Z_öZ <ßÄîÄo+å_*ö@vzbðÜUã|üÖ>~+ObCrÐO_*b¢üîv*_OÜÜöª/Aa.åð£äª@ ãuåA:vÃßo,Or©BA@îZ+rü|ýöhAÄ ß_©Ö_zCÃ+zBðBüÜrUß*zä,Ö~u *Zuöå._+ý¢Ð/©*ü h~r:CýÜßà Ã,<.ÜB@uöã<./©,Äýo<ßoý @vo+Ür+>/v|Ðhî|ä¢î:,häÄo_b,a¢ äoÄböoªÄÖa~*AoäöUß.zãðÃ~r£_aãÃß+äB,,abö'), ('h:ßÜß|Z~ß|~ >öÖooÐ/å+O+_/v~©/+ãÄ/vu _/aaö u©zbä_uBb©/ߪüÐ,ܪa|oß/zã/Z.ªÐÐ.öAüÄU+.b/ ovª£v~o£,ý+o,uýu/vß< öAå|ýAh,rühß>vbuÜAß:b*.~å|üÃÖv.ßh, _£@ h |£ßÖ¢¢.,ãahýýãÖ+/îC>ü:Ъ.:rüoÖA|Cå¢ãoÄ/ObZðUZão|~Ouªr¢*Bðr*o/:Ubý~äBrîrÄ<ö/©_< |Z¢+ý_.*<@@îü+vЪbãUÃüb+©ü>CUr©|/äÜåßbU_|U,|©aU*urߢÄU£ªuvÄaAzBZãü:B~+ö_ßZ©:~>éÐoåb+bãruO£_+u@vhBÐÃ_oÖãvZß.|r'), (N''), (0x1A0BEC66F89701C5BF23A683CB4F47CB7115B598E3CD4F89528BDF6B9086CA95ED897115611686F38D26F520F53E880639B929525D47504DBC62146DB795353958109541DE316A5B8EC20ABDD82E931403D832D65C7738A5392459FE01193BF7F0BCC7E5A84628074FCEC49B3D93758DCE006ADE635FDCE0D8F008B9D86B59758613CC1B67AE6BBCB02A868EB39D68A5AECC3000), (null), (0x90DFE60DB73E6E2FE4744E1429C659251F95AE2E38D94E2D3A88620B0B3A59C6297E3C3C81A1B37E41FBA21965883EDF55A6106B002E5CB791B9D22FDB6323A91B88EBAB8A1CA47EE12FEC3D3634C8B24983B5652AEDC5FB2284ABC8CE84A2DED7F9FEDC9D93543801918AD0411F805CF120E558ADBE7E2DC2F0880671DCB05C8D0E653D35EB14B62E7D639863F4B903034ED6AE9E4A31197AD11AAD0A4EC725E12D4333B94227060B2E29305AE6CACD368502220501BD42DD4BC364D067ACE0B53EB635B18549C127D0A26F2100BF93074D76844CA41FE06F00566D7FC235A482497A1B2F941CB13C41FA345E4E21DC8C2F5D83F02894101ED6C5B02FDB42659BFEEDD886A3647230C5470BAAEB8121DF79E14F65B1B359B469FD59CF6B8160FF95995F604955E9CBEA522BE089663354A3D1B5FAF2FFE94B93231DA50BA2C543E70B155121C09523F7847A5F88792B02CA042B9ACC660C96AF14CC263843BF488DE7F97D51E132E23B91026E848AC21AF71ADB07762A7781FF7EA10DF46FEAB3C432D1A17FAEB1E8D1495E3A639D112551B22F1E68B8D1636F787DD23F25EECCA64FAA51B8219A4868F2352DCB3D1E616C7CBB413FCC4B0B616E320731DEA9AB5A929313F2C06C3017E7B67582A397315A1B65C369AC8DDA039FEF4AEF921689498AD339A90A6FAC0F8B295816D588BDD600AD1579E541AD05B90F53D0224184D02C2CF8D05E8850ACB9B3DE8334C42E163273EEE5001063482534EFFA1BDBED4AA587E9A990EC78775D69BF31632AD0F5E13D9EAE529FCF1BC8B0AB29985591DDC694DEADDA858645FA7687975031E4FA64FA18DD3D3EF705B7CEE0DF414FDE07D8E26BCF4C221B5BB659B3DB1838CA96CBB0C59E3DB3A0879CD8F50BA4A603AB987FBE6EC615AE41DEBC27E38B1BEC7E03491491893FCA2441E432732C0FB71055074398795CD0B60184C0808CBCFC80EC77085A92712258B49A2DE1E23A14CF05178E83D85404A7795D8F057F4A9884E8B187B5075C7DE3E5EBE3DF2EEED3C76FF17A752E78A8977261E134E21CD86A01A8F930B25FC7A999AA9DED7025788A8AC8968ECF23556F09EF43A57A4801C81279DE86F5A2141029D1DB84DABB274CE856AA1A86499ADD528927C31B212E50A8D5DAF646F295E7B48565FE48D1954EC7F6BD249EE742C9DF00336B7B50F407A28ADB05E13105F6C1C26600E49B9581F4D9FB24640AB2C193101746BE296C63915E5CBEF5906C96F0C662DC8141E5436BB277A255D0A297D71A72D01ABF379755026F863ED78B646C64339EA7D640512BD3DA0CB1CA0DC0BBC4E6DA1D9C7C318FCB867ED15E0594261335F09C04F001DA20A546E42AE68BF5AECA7AF0B046D0E8020EDC4FC17FCCCE46E69E941C24B6D4E400FDF7354C64E5FB8822948AA375CD65089AF514B218A0D8789E4447F6D88A14A50CB049D8B2B5AAF753385C3843A271D02F148AC0C031E75C1EBDAE1F9D05B0987FE597C4848C55E44A1C5EDF439F35FBD277C7C4FF53E5DAC8ECBAF5078A594E88C4B85E0BAC4CA2BEA675A3D307187E88B24C263EEC982CFFBCFB97D260DDBFC20F577FE6D6F0262A240559DD4207C1D43B6D543D33109C2B8C5E4EB1B5D05EC8B5E0C3B09898B1C226FB19E63E4EBDB43AC297F288828FFEBA535A78A1757453A690276144103BA3BC911738F7B5EC3EA19A76F2396B403351C4F5443D3821B186C540AD265B702A87F436F66A560704671CD607FE821A3A50F3107F1AF665837065B131753F1746294C6B443549C9FABCF1DD21621AB304AA055D324AF10F918EB38605A4D68F270490DDB217D605072A16C22918432055B2AD866FE1E4FB383CD9B682C2C355E661B61CD23C00ECD4005607342EE6784B923153F7501F462094A5753D20834467C0DCC762264E19B1C0B16F8BDCC70A56616BEF91705E96416FFC3E968BAFB47D11A073511E16244317A1369EB0BA43CC9B1FDCB593B2F6624686F22A10822511FCF27A3C53B8384A46AB79CE27F791B5B971FB6CD3FFE95EA9110A9823F933957B25A1BD400678E2E6916EE739283B4FF43C709F87B93EFD081B9242AEA0274D78E4520156D375B2F818854191012581D6BBA3E689940EC2E7A4B4247435344669216F55D539F820C7BDA66F33FC6B07F5106CF2FC40C3E4D5901AB11F503EC3E33ED77092D0AC9CC2821FCBEE9F8EEB38AD2F63C94249295D8B7F451F4601767FE38BF424FB742464D0307921F7F635012E797121DBF9A1F5AE130751677D7B81A84C0A139AC73D390AFEF912D00865944943F0CD9055A3E9EAFF75E86CD3FD52B4F878ABEB2267673B3716DC008F24A6AD7207238CADF052A821299A5155CC3701A65DD78FBAA927DC8991583FC7E85BDACF3AFACBD9C606082502C9F9CC15E66BDEDA5A314D16F3C9E047021C9813E139CDBF821AD26B28E057CF69B7DF2E0F74ABED60EC8D2A8DB94731EB91C3EA701221902B0D92CB9972B27ADA7EAC3BE9B2378E71AAB2F4ABA332C9D3A180961D6C5F57954F0202E1DF54ED3A134F0E0C0B47385A3479C55F2DE588DAC9F8F7F11B5C6D1E55A699AF35AC9156C4BA975323BCC759483CE8F399F7686A7A2718E65CFC1EB6E1EFB765AE882488E76F9B734D34B70C319EA9DF747A855D3E2E350D94ABF9C89BE071330461AABF18600C2A5CF41D45700BB5BD523F42676A5A277F5316F33C75D2D76CC38307CFF4EAC7136E5A014911F09D88F63C765C9E09C8AA3A2B6B016CCFB5891DB082EC03E5C967782EF91058DE6D63796B46385C7BCEB9BA5D94C97FC5A79EA4772C616EB08410730FE46F10B8525CBD088801897C2DA1E1C932A65000E8B2875B6BE0B10CF4C8E735C54C975FA8020A380B763DA614284A8A80A57EDDBF732631E8B54C71AAB113BF1954B6E00A8220309B18F47274E1464396278C4F4A097652266577F3B5998E5A627D8CC0716980FD844E41A77EB4BD066E09DA8324C37510DE64BAA50B2C7A028A990FF65486D22DA68ECBFCC7CED371A77085ABBF0A369E087CE20DAEDBF258D33F1DE5A5C6B2E737ACDC96F878480F9049FD9AA6CF437F6370EED8A4C57FCB9B722988B1EECCE1BD9D74122E9FA68F33D37C65DD58B104FC9D8234D7D942722D10FB864FBF5DA27D1BDD085A3051C4CA5EA4D14819ED43C1248C146C9709E45B01E41DA3203F7475DAE7C27AA8A9CB4CBE69793471291323B8C42B334835E511F8AD584B3320AA1F305B6D322BC8187BC0C7AE2D90AFE9D7D1F9EB5B14402DA402B082FA5080189DBF5A0315BCE1F8F0ACAF728187B88049C3817A39344F0AF02EC9307A451D2A40AE106E36ABD41BEF01FBAE64CDAB1C492F3936CF05DE686F4F13E7F2B17EAA8E8432D2774A4A9DEF658A3839A0A52282ACE64A0CE65B3ACFA7FEE798ED293E83511FDF9BD9A5FFE59B47697BA62FCEA9F16446CB339DA829F702CF4B6305023C4CB4E881C586A906E664719FF1BF29782F3DA688E2724FB377B6A4D6D6B38295442D2EF1464DE36ABA3FE4CF2B093738D9571C255E7959D965340A0FE2D23032E2DB5AC4903732E1593BCEA28E80886E7F6BFD7F975C37CBD3558C1143D488E70FB1ED50AE73A7A1243ACC22ABB64BE4AC9B9076D5B19B85A48FF03BAA209E84B3E693DC9338BF0BC35B5A5D90141F1C09A765A74411125D1667AB1E836CF6049C476FC5236E5174DC84B279573EF49070D33102BBF640A2D335C62B8CA088576455C049A559F99A56F0CBBF5E9806D8731BAEB03AF449A506CCF1EEA826E83BFC5B15017DAAEA16D997ACCA2A80433A2EEEB870F2D71C700C1A43D8680BF2300890C30383055AC83098D6A3477E7B8589B6BFBA6D7748243EA4F4626712AECEA57BC299BD40B72993EF3F590179288E9FBD4FB14B37C290489EC4DF10F7601EEA08FECCBCE1C848FF95267E38EE23C47C66C3AAC3FC826DB931511F7BD8199C8F216FF87B5CD1BDF406B1B6114458597AFF62A934B55BED8591138A8FA9CD277C8AEF167F2A491F9405B5BC4BCC5C74D8F8A47B756F68D9C58273E949472D4B38893A865541DA4FB543142EFF9EA2B9359EB1970452B20C221551FCB760D64DD76A84C192D51F971E55C5315B39D927DFB9B4AA959647E6D72D643FF0DD97556CC756951AE0275F7E1A79AF8C80B1E83C2A1DFEAB2BB741239DEA6470E0A640BD6FC493E2430CFE92542C7A1C9859567C7B02C6C099AA410F15727CF6C2EF9E7438F11DBB1D05F81D1E6B56FF3D248B4393E8F4DDE08023C48384CDD18F08CF658D06E4A63C9A5E7509A8A12D5441D2F0E73962DAFAC093B8CD58389938278D169CF1713640E407F9897ED337DFF67041B1DCEA56A5F46ACC732CD8E462C53DE21A8B9163D09CB0023269517BED5BD9D7E7F6E75B3D3771A786A5C3140C2296C441F11D53650D71152CE7243BA3EEDF175201FC6BDDE2A5E31AE9DC2AD89CF60FD38C3AFC3E8572DA85D22E5512350497C6ABC10A262AE75E4B39397C30463C90F0146817B4E3D8CD8F21E60BB34FD0E4E545642DDAEBE9A8A5DCB0054BF6A93E959E64FECDECE3E2D2F37B0443DBAAFB695596EBE20FB5042BBF71D832D3829878A87615EAD217F862815AE770E465C931B49CF65FBE5C85E95FD20D7B0BAFFF71E28C9A659511963D9E8960B5CE94465AA7A67E378B39B94CF02C8B00097C57D25B758D58CA639CA305B8C035FCD01ACA8BB3D36431C7E5A9D24E756886963421318E5A5807EE90440ADB32D37884502011C07455A9F2A09390E3867BEE331D6F849E036E75C2C39C238F5A559512304EFE5557C521DE783FEDC7C724681455D7BEC24ED980E2AA4EFDD73219984AFD7DB3387C98DB574DA526C480AEFB9E340E398397D2C356CD1CAB08C849AB5FA6A2C949713097BCFB6675A8B3BC61FB535EA223DF15B32AB95C6A60EDD38E03F9C71DDEE5B12D04767C87305D1BA211BAAFB56AA6887F91EF9F8F14C537CF28D871AEEC9E8316A2309DAC628D82CD9EB958A53D1E235D71478BEE4521193F3FAD5F58EB6CB6723799123A08DB1C036DD2F15A6C91910AB4143CA41294D081175E6DB52D29E13203E66EA30BE954962B87817330BED2AE1C55A4D72F115FA2C99122AA6E66D644F0BE578622EDFECABFA6798A135C50588BBE99D8850902F186CCDA7AC6AA28C4B13C8371674C8B2E56D9178998D48E6D40CA1EAFCDFDBEE6BB65FF56138403157DB4D9D6D9DFF13F326A81ABF27959B23D6D39FC8C79F6B47E9CB5014D351BD2D5020BE4FBB79361D8DE7D637C13F4420B4D19A64A078904BD24583C29EFF2FD4FAFD5EF6E75B685D9D823ADFC93376AA773F6FF1C7487CE790626D65E5737E8EC7F13CD3D04D3969793CC72E3DB0829EDEE95B5F9F2E0DA270676674EDF2682A13AC17C806A2CA2A05F6888A815EB9DFEFDE970C181EFF99F38A5368D6C47B76C4AD1A81A8CA982C1F21599895832121BD96951F5B6C01F4BC7DD47C5F5143318B11C5D444282715467AECF6B556F4606931BB403F5C1B68AB15C53AF61BCCCDDE281D83CD5CED956F7FD8E07F1B3F657964132DA603023EF65D392E52FC2F2AAE2F189D4970A31C5425D0BF733AF99FD66FB19208AF17CB15EE9D6023BF327340BE324FF2A22C08B106D9802242BBCB539947E33A9D21FF174D875AD342F894E36D7EC4F8B99D3443B8D101D597A8C322D20C8A674F38B38C4328A52AC1257E0E349CC4D3E6D2AA0C03AF71BC20298FA4B43801367E3DA424BB48B580F819828362F3A0FAD3FF3BFF627E539FC7076C19A8F0669924379006F8A028AE2D1903FA2CEE493C8884D0B4FC01D3FFDA046DB3DC9BE807A2E96F2B539A0223D68DD2497A6972D8BE3F91141FA19D1263A03CE44264D181310C47337F2DD8EE82ACEE6E2F8A8560818505ACFAC3E7F15C5CB7B36D1DE161BC41086E224F598056B29172C33EE2E92ACC62BD6F24967D2445E72266157174BB8CA1DE72174E423B75463832653E1D69DE98A0BB23F297BA9B49DC58272A31412CB7368D0467138E1081E9DE5E3ABF07C9C8878CC0C9978A0A23E6DD61EA045B04F715BE0790557785229AA218B96C508AC49E6E92A470532FBC72E070361C368D9EC95725010039631007AE2EE57140C786429D5B95C85086B29E5B1D64F74F06642489F0053B89C454FB72ACC2343A3B2228F9F38EDAE7C668D07272B52BFE18C8A7CAC0F750C25AC8D8F6AA45B3C48E541FEB4C0D4B77893CB38724C9070F390D59D41A796943D166AF3AA5E44D70A51BF41EA530B21B8D20318433D99D81B1D9BD9CEBEFAA04FACC19E55E10C1A4FF32D218D4F859F84B4E46EA37D50FF7D91D88DC26A084C561EF23D926DCBD7C5E9C94F0F774BCB97FB541AD98CFDD15BC120C4097F57E5EAE1CB6F5D480D17E80DA8BAB400F005460CF6C715EE72CA2020E1D04C07CD4692E3652EACDC6E4FEE3C31CCE3431D5AD11B7EFC8890CFFC6F004E3D663CCBE13F6127D09BC159699EA7D8D8BCA5E6DD0286FF3188D1BE021368BEAB8E31E9B2704F8C811B4DBF0FC1145EE1B7F73FC919703ADF3C9A596EA325BC3303ADDB6DBE25676D1964C2B5C7F06F7372DD4A1C28F5911DF60975D6F61EDEF5908B0C1339F122918FD2B0B5AD84174C2BE5FBC6DB9F0A0D1CBD76B4B09177FA86CC243BE35B3A81BAB88C5644DC7071F229AA1022171AF181FEF77B7A6EE1FE5BB52EE05FDB68CFAA7A0C2212B4C83F4D04C287E666D86EB233BAE464BF064CD68EFA8FAE8F1117C0DB66A70BF7DECC36B72E76AB5A17F5DDBF2E2C20846AEB74BF4B84B93991BEF2ABC70AFF3063BA55EDAEAD9090A07C7605B2EE60E5F63B717A334BAC5A13FC25708300930CF5AC5C74D633D5BD5AE41FCF0DB487A25D0CB48B9985FD170DFBDAB287200C9FE9690F0692EC0FC366B31F4F2CDD4C5E758312764C087370AE4466DB5823353AD77FE5A3A4801071FDF124E665AEEB30AE7B3C040D9653E0F69F574D85336A427DE577ACF7A8BAF472A1785AE38D0A0059352CDDE6312C402C05AD0429C2EBC987E16880363E3905C147916B1DF9FD699457F350078D5C4CB83780F2FBB5CBAFB6AED301248AC91BFC261C9EA0C0233308436FD1CE9BC2F9851CC7FFBE470A0B7CE1B56E25FB440A8DD853E171BDACF7134DE9B746F9E11BECD97C08C3CA5DB51C1022BE0BB40D0CFF6544F547E188C870CFEB715D52C5820099824C7E3B47C27B9EC4609AEDEB5F3FDDB8E0B5EBD40B51B498F3DFEB58C94B9FBD7232C18EC41D817AA81C272D82E48B31809AE4CC15C576FACAA254E38F46FB15FB2F792D7E4FF4C234702BEF2A86160E53BAD82F67D2A8ACBBC6C321C99DEA62201232526A5EB331A62198A49A87D0438C4590D56ECBAE2886CD72B78BD2F89786C8CE1854C3A4F507A789453A041234F67F95840D15F4556409CB9DEBFBA5D328011DD1B8B8EFC8A09ACEC74269EE82BA3DC10C3D748971D379B34BF707090C01B61C39E6407C3E8FCCE372472D13FB1B49E2AD399895B477ACFD3E04A4D19990C1C58C4CB49B79C1837C71901729A666B82FAD255BD2682068C139433D39EBFA4AE2856787AE66AE68EBB61C2423608256D84B74237434EF5C6BE4F36136844990764634A43EDF0AC9FFBC6F1C4CFB4461B6EC64EE76D6D6AD950B1BC9734C32676C8BADDD2BDE18F940AB24B7C5D3106F9F91AA49205B199F6F870E33C34055B38908AFC04E6736D8D46AADCBB21EE7C2FAAB29E1A1E84611710D6DA3CFE536FF55702EBC234F21385BD275B5AE4EED51A04C3818177311A0C19E4E40FA9209EF34AD7541F02B9EAB89F186CF73916322201B0382AC1DE8E25F8DFA8500E03DC8C8868000D9AB6174AE8D8E25EC422D303B2C20DE8F864216C492E2623119AAA8B3BE06EC10624975BA8ED41F8FC2F51D5FC949D4C05F384144693B46C8FE4395E2E5722E3B411FD8E2AA2400B22287029DC50267CFD5E75486C5A7A62702ACBB4B3F3DAA50C7E11EA971F1163A378F21E239A903FCDBC60CFD1EA8769979B1E0FE68B472E5DCB1D6E3E4BD5DE4D1194E3586C4ED59A9BF707930AC321F6B8430BF1117D1821C3C0587D31F171D68282B04594013B5C38654A944F9B42F7FB6775F8D9ED2B947CB1849BE668689A7521108812DC52B717BFB8AC3283E2387D6081CA7B890C95571BD8E27C9F65D00CB01F2E8ACAE51F14CED11A247F61E8DF5C2E75E6AE2EFC147B20F703703A8849E8AF8274B3ADB27B62A5ACA7F270E7A9E0131060FFF95E81130A1F99EE1BA49458C04BCFEF741BBE7BFA73F8725421FA495D235D1A1759FF40F151B99E189D5701184F222517BA6C0761F4F575661ECEE8155090E8477A41765C7EFE226220536D2CF75A04FFC53192B755B8126479EAD282C178C80C6EB9AE0DABD898CC49A541A198487EB4C9E8402EFE30F1B22F11D2941BAF90A79B50CE3DBBF743FC98C67DB07670DC317C1DB8D928A90E2DC7EBEE9A0604A09A049A06377A3108D294538637B3314BAE35A1180DE6C77EF2429065C008B9F68425D3ABDC6A94B73B04E634D512D67A96A0305454ECA2B34D1B13E4D9DB48C9EA6CF201DF856F33A0F9DCF8F082A9DF7C25DF1FC855919783206EB156BFDD6FCC2C4A6810D49B01310CB35B1FA9B2BA614478B40C28F194CB5A8EBF16ADECE12C7D3CD43841BEA78ACDEECB923687D96DB45002471953932AB59CB645EBEA931FD23E927CDE822F85D1293E4A260284D2A541625DDAAA031999B982A50851AEE34BBBC007F56C8F22208C65F01548F4B307E3A09A783545283B78D3250F7A8D8F8A5AFE7A328CDD38C2402D4E3402F450B4CF9D14A1046B166697CC7C996A22A60EE675CA4A8A707B0667D83807F6E4287472603FED68DE75EFE803AAC060AF581D774F5D9D3A063A5F120E493C330E7FB393F816F9F2C89617FFDA6276D5BAA5C8701A80A7968B3A7C35E0CB6A8539BCD983F72C68886E2ABEB935AD6F93C389676880BC187DD81D18BD9AC4120D3B82B61D88E2DE9E3D3011FFD1FE50EDDAD862575402048D946BBBDA13AAED9A18A18DB2E7421AD0AAD92B40AA289BE9BC2AE2B251BAB9298E38792D37048A924277D73060AE0698CD91BC8AD6B3D37BCFD21DE8C82B485DF85424AEC8FDA9965E990E22416B791E2459F4CFFE2E52CA550D5D54E691CA172F89481C7967CFDFE8163C4DB5B12A64590FC47E36886FCA016A49CB9044BFBCCEE6F2C8135C94CC8A14D7D7E20514A3D2E90BD6DD5BE0A7197E1B1F1E043F93667F7ECEBE6240FC7B07E411B087D7FC5595E8A748D8EF73065BAEA54185AE85E53471628645F560A80F6BD567CEE691961EB9781B985A9D900BC852B3ABBAE5596E3C7C1665661FA0780F496D0A1B37651D0F22CC266A4CE9E3D28A8D92BCFC44767BF9927A8B20A8A9D79389112085F080EDA6AC982932F3EF922292EB820DCB12F4E69E11A4FA91DE7A125EC6C3C8B34C89FCB5064FBC5D4905A2D8589DBD17C9D8762C39F7EEDBE314CE1E06D42D1BC96F56619558C4C33899450BF2224940BCFA84FE5DAC8944AB10C1F181AE4664D8870EE9375B827103A2F390A2D2E9C0CB8D511C4F3ECE2CE601C67486C3418A52D0336B136019616813EAAAB8E891C8370126044D3A25A9C8E1F325851DEA3061694DC29F7EAD6B73FFA42B442373FD6FFE3D85AD4D4D28BA99A2316CE3DC5A39AA394FAADF28C853BA804D85FA65957E05B596D06493242C251805CC7C0E802349F199FA245290D57521E2BCFF92C0341CB3672E4589C517052375C722FBD7BC001A4BF8DBAB59A324B15B32B0772C9247D1BFB8A761EDC03C72E4F0ECD9B2894A26ACD556D7586169B409842E82568E06E37F413C1F149E3C7BCC58B658C64B0ED1F889CA473B70794E5EE36869A1AA2C56F9F95A614D2B121EA8DB0B0FBB00FDBE754C99DCC3BFA7FED7EDC02135C2DA123C5F6ECCE0AD84CD67BBAE506569934DF5B9F455004F933A416B996F6AF0D8D600F8D35BA220CDD7C7DC65080147996E5A723B8BDE8501ECCC247B8504256276D2D85F7C8637ABC4EC1C8D33EA9B38F9C22B14E8B55CF77BE6F69F7DA538C3A269EE2538F81CD812D6669FC207CDF220FB71B2D91079C185D0E3859FA83E2FA358EAD9FC65F001A552F2125EBD357418F46E722375EA91F02CAF581487387A9846EC691CF405CB0B701D861E6762C8AB6F7CAB39BBFC3D7E48D9DFC697FD1E1A877A17D0CC5714FEA376B368648388B9D6BCA51A9D30EC4ABEFAD41A26046372FF6B86ED5AF7DF0857AC963538C519C54115EFDB58037D568DCD11D182FAC8AF134078F8FCAB6EEEED9CB2F09AA701E9E10EC90014881AEBFE305F8DD5FD855CD3F721F85C10D8A5B700FDBB408CBBD6BB37F07421B88A8B258D0ABC4BD108E017561C9385199DC0362359039A6F9B618478C2AE0D112B1B6CA6C2CF162C59D6080DA3EA701851A19A304E0E6F86E0C5F19927D30E5AE3062AF126DE46DEAA09C9730B9CCBA0F16C272113DCD32CBBE5C60CDD8CF486D7AD1AADBF7EE1735ACB863434FC8B540A4097BBBBED4716330E45411849F12D1532AB5E721DE1828AA3D648469EE7CF6A62029CE538DAFA56047AB139A06B00CA691F02412CD1EC5F15310806FECF941685D6A6476437DC67A0F86DA33048DA48C58DED7FE57E4D90163DCFF7C2E35734D69AB3C9B4C95631429AA02464391ECC66CF4170E21431079916213667D494CD9138DC959510840C37BC3D4ADE292BED1F03910391E652C259AC309E982FC96E05D2833B6C7937463B454935E6E6397FFA44176443912BBAD60A3BF8EFF56407E2CF44FB95E07095CC4AC85CAD2CEB7362B0A44408652A74B6C855524D3E6645D1314317A14DDA09D37197F8C8CF1DB92EC8862F412FFF8DA4D044CD9B1E588DE4727B6BD9C3C224E6AA7096CD31ABE7BA9C2374B84704B131C572C1090C6EB5190A045653A1EF6AF6614896BF68B063345D12FEFAE3D5AD7DCA3A1451011BDA3BBB7DC32D559418BCC87E46FE6E01D9050F9CABF97FCA352466D89977CB09F5456E5AF3EAFD45EEC8FA3222759EAF0FB8611F51647FD0CBF1489EB67CFAA0E1CE790190030DEE07B9BDD30F3DA7BF95C7D8D116BBA890D59D9F02926E8F61CE594053FC9D0EFCAA730797B69CD18E4988F8FE94299A3615E83BF2740B4BA93A4C04A5ED43C308B8DC2693B410EA38BC10B9196590DDA4CF1A4E14611C88AF375E6D6A982B9105C5E035C7F2F67204FDF33653423243997E5FE6D2F5AEA7AC53875C65A37FA0907FA343756B15B1C89849166DD6255), (0x3FC3844CE00274889646BAA1C518E52A5E39EEECE3E68AE2E3ABC8849D62E2A575AEF83685BB1932C3CD1A1561E8BF7980B2041BE164C95939A2683539EFEB3463152C1720AFA5A31FBC2915CB7580FBEC4F04EA5EC7C310E49EFDE252E4F9D3E2E5B14CBBA759D10D60FB253AB38DC3216D49E9EB01D59C511B3281B1C2513BC35533E5C3333F44F632DDFDCB9ED6301139C0E49B0FE8E11014FA9F74D81F4A0FC062E480A7FFEE2D04F3B823D8D1B345016F77016CA0B36D52D5AF399FCF1E1392EE0A3CF1B06A3AD2B6961C2FBD3842465A7368A848A21FAF762DD150B48E34D4A590E9C6775351053D2EB609963E959D6CF2455CB56A4A4BEB8C7A8398E91E286147892C4E7CCE0621636A19EC1618389834E3C248D81F3A469DDBEAD9CD6C53108DA74EB4684EF0233E3A51FF305FD47442EB64055BDF89284EE6B0A0E42D53F717085E6ECA832FE5F39E099DCD3A153E067696E2074DB4AD1E2665829E4F3F11E65AE8270166A9BFBB7F12BDD5EC5A13D0729A6D9671EFC953B050A41DAD47A45EF8B67252EE3DA0CCD726873BF7D731CB51B22BB5D27B756A1FD3501605A10E386D5EDD36E8C1E135FAA0BE4A688E5CD81ED9CBFA1BEF8C7C4007331AEC89C636184FCD98F9FBE390D0F5BB31BD2B02907777F72CD5131C7ED261F5E08EC74970D9883219C0C3DE22F53B2A26345BBF1505A2A374919A6004324FC69806030208AC4A5734F8E9D0B399D4369AE9F64A76A2DFDAEB23D4DE3F272EE671FC461CF238217AE9038A1D1BD1EFDBBC63C51A3B044FF6262816E4D76C180DCA035FB652B84362C77C617317C2BF1933F821DB6213AA6CAD4FF5CA223CA27DEB7D5218723988041F6353BFA3DCDE6468FCB0DF4A3CABB658F30903C3783F8AD9E4879A6FA6A7FA6F1DBBFEC0EBC8D0709062258CC332AFD19CC07E308541A723C9E6BF5444F5C154B66F2D80ACF66C2A389232161AFE16B1D8C8D3E629CAE9DC14DAF705097C2C9BA0D0D553052F25A55354F7F30F9008CACF0D7B7C21DB2BEC85516BD2FF6721BC6696764A28C2ABA9A32D93D5D2F6CC84D12C35FB00AF79C4A4E9CEB4C353A6EB323B8D7819BEA10D62D2D9F44756198F84E700D23225BBB61CB1A53FF4F7E55086A7A29669546A138A28992ED6857D4ECF3E30DC52D3B80D80D65B681862186BEC89), ('40862437-f189-4472-8a75-2df2a06f068d'), (null), (null), ('11/19/2008 4:38:05 PMThe quick brown fox jumps over the lazy dog0123456789,.;:?[]{}()-+*\%^=~!@#_|/0111/19/2008 4:38:05 PMThe quick brown fox jumps over the lazy dog0123456789,.;:?[]{}()-+*\%^=~!@#_|/00'))"; - break; - - default: - $query = "INSERT INTO [$tableName] ([c1_int], [c2_tinyint], [c3_smallint], [c4_bigint], [c5_bit], [c6_float], [c7_real], [c8_decimal], [c9_numeric], [c10_money], [c11_smallmoney], [c12_char], [c13_varchar], [c14_varchar_max], [c15_nchar], [c16_nvarchar], [c17_nvarchar_max], [c18_text], [c19_ntext], [c20_binary], [c21_varbinary], [c22_varbinary_max], [c23_image], [c24_uniqueidentifier], [c25_datetime], [c26_smalldatetime], [c28_xml]) VALUES ((0), (127), (null), (393902448), (null), (null), (1), (null), (null), (0.8215), (0.0538), ('Ä+ß+oß,hUö©hbu+@|¢bªßzbð©Ãz +uîo+>_©>@Ü/vZZCüu:î_ðv>üÄa,ZäÄ<>bÜaA>Ö|ÃÃaAä£ _aüü/u.ß/ü.O©>h,¢ßZðr@ZB:<îrãîu£ +<+ îvvbv AªzBb_z,U|ÄhaÐå>ü rö_ÖÜäZaÖbÄ_Aãðrv_.aÖÃUA_Cª uBüª.ý£©|ÖåZäZ_Ðb£rbAÄ/ îÖ@huß_©¢*ýåî|Z>££Ã£<>:Üru©@ßBã/UÄz*ÃÃÃܪAýÄߣÖbbüÜvîÖavuv_/:£©b£_¢rvðßüöîb/@Ðü_:~:ãz~_>ÄAC/hU ü+öbvA|ßhhßzýÄ|ÐZ_ßhz¢hhZ/ß_rývîbªzÜý~.¢>oß~@<+b:£ZuU.UäCzO©b|B_öª,ßÜîbäýãîh/Ö¢ýaö:h|AÃAÖaz**hbðäU_ðb|Z_~/U,@C.*Ãr£CBüýðî*bÖªÄ@ãßüZrrÄî:©î_hßz@¢ªö£h>ðßåU¢aÄ>_öåî,ª_ãuhýzO:O/ähªã/o©b+*äh,ö~ÃOöCü©u,Ãüß+ß©ãz:£:,>,åb+vß_AÖ,/v|ZCU rÖ£Ððå¢Üä,@A,>ö|bzZäÖÄäÃ*ö|*CU,Äbh/ÃÐÜÃ<ýß+~>îü+ýzv£¢ýßüvbUßzßZ.hZ.©*~©ä.Ö.åÄ_ðßÜ.>ÃOöß/rABßUåoo_ö/rü:z<ãª_ªU*ÖBÄz<,BbÜÄðäZÜ+ÃßãvãðÄUÄ>ßÃðßßÃv |>ª.h_>U_:>~CO@BoßÄ ./Aäaß©ÄOUüa©@ÐZÜv©ZÖª+UÖh,£oߣýýððh:Ö. åßbz><îª:U åh.~ßbßBå.a_+ªüAÐ~~ßaä ,ö_bÖZuÜrð<Üä|*Cb©©_ðåUÃÄ@:Oaä. AßA¢ZüAß©¢ß¢åãB:,'), (null), (N' .@Ãã+UãAÜ >hÐb_ÐßC¢äåzb¢ßå.ýß_*výÄ,@ð/ªßý¢äßãUUüUhAÃaß,>ãäU:~>bÜ,bhåüÐ@vZbã+Cüh+ª>åªb*ðäUr£ä~ýÄ/ßC*a>¢Ü,ööa,åÐåãbª/ÐAhZ¢bbîb£uv,.@*vv<+üvöýîU>ßå ßÜü_ü,©'), (null), (N'/ÐÄÖÄâý*,ª~~u<:Bo+,|vaÐß/Zã/hÃ/@_öu_rvrª@:>ÄUOÐb>z>:*,OÐýðZ,ß_uÄObbZUðåîoÜAß@A~v|ÖðßOýOhÖ>|vüßßýUÜ_OC/ß~.ªZ|++uö AãA¢,_råî_Ö*ªð*üA|Ð>,hCð ,|âÜ,ZªööýÜ*ãU zuîbUßÃð~ ß<:ðåÄBZýü>Uhh:Щü+r©Ðvv¢a ÄÖÐ+üå*üÜ.u<ü /bA|ã@üü oäÜ©ðACBÜ*B_Ã,*<<|:ÐZ©OO/zAýbÐoª©@B:hBbÄ~+ÄhäÜЩÃB+ö@UA>Ã~U¢aCabO>åoZî*+@ÐhðöA £|+zý*rB/<ªÖ_ã.Ä:*©ö+î~+ÜÐý/ÜBC_£vªb£ßAÃü,/©Ãoß@CAÃ~ZBöÐüý@U+Ü +bBvU*b¢züüü<îâð:zÐ,@U|zäB£Zß ObBZ¢b_ZÜübvzCüvbzî î<~öãß_ö,U.*@£Üî+ªb~+O_Ö vð/ ªA ,:.Īå@_ÄЩ bå:U üÐðãª~îBªÜuBöbUb/rovbÜZAu¢@vCvÄ~Bb>Ãߣ|äî,ýCz:ÖÃ.v£ÃZüUr/îªýb¢ý*b¢aå||vߣz+©ÜOÄÖäããã¢AZCßzUîA~ßv.£A©:åCäaãbüª|.vOähußhÄb*åbvz*Öb@CvhhAzüÄüãÜýz@UåýÄO:|:Zðý |ßä|£bü:Ua<*>ã Aü/ßü£.BUbO*åÐ/büzîaüUr.~O+OOr£*rª~îCã ,uîÐäCãBÖßö@A~ß*ßÖAußZUîA.ãovo_öCý@ßb>*ZÖb¢,UêÖ,UÜhB¢_BýaÄ:Z©ßªUa,bbaZz.Ð<Ä©ã£*ßbÖA+.ã>:.ßbßåabvahUZ|Ã+ö<Ä+oã/h+*£rðßUãoå~£rU>_Ä,:£Ä,bU+,BåÃ<*¢ýÃÃ/Ußo:ÜZB,übOÃýO£Ö,Ü.üZ,ã@Ä*h©_ü£@|bZðUýä.z©Zzu,î@ãªUrvÄhãü¢Ö/o.äa.©hðåÐ>,ðý©¢C@zz:¢ãöÄ/Uäð:ö¢u/våßvî_vý£CBãZvb@Ð:z/ü@~îZü.Zý/Üäo<ÐÜßãªÖb<üÄãåoýß,Ä>zß:Ðzîýöhýýu u©ß_ZÃîã|,<_äb.ß/<ªÄZ|+aý:ðã©¢b>Ö+ªr+/@ÄߣÖ.ýO:ã~hÃ>+>b©zÜ_ßÜboðzýßZãCvüChüäA.AÃåãua¢¢åb|ähåuýäß*hãßåBä~Z@@Zå<Ã*ÜaîßÜÄuðv/Ðýü+ÖCZo>î|ußßý¢ÐCB~OBoßBrBbb£ðð_:+å¢îÖ.aÐüßÜ_uCßhýBß©U¢ßOv|auBäü£Ã .Baß+Ã~/h*a|üýUî£ßBärÖb/¢r,ߢBßhäåÃÄhOÐCBß<:oÄ~Aüruo_ßC©A|Oozßßb@åÃbZ_ÖÐ//Öb|AÄ./Zv_öü+oäZ£zZäO<@O<.ß©ýåCª,ýC~AýbªuZÐAä ªvbý+O:|vv|,|z~ÜZ+.*~,AZU£U©£åÖ< oß_~ý@ðhßÄäa£/Öa/a*ª>ÐuUßÐÄöÜð+@bb,>brZã©rå,åß.~zßUßý+î* ö~AvüUÄ>hzü_b_hCrUýîÐ,AA<ãã ãzaOuÄüoîÖ>/bvvC _UrãuÐ*b*uã©<£.BazãbAýb ã:@ýZ~><ÖÃÐßÄî<Ð~£:o*ð¢ãß*ÐuA.Cö£ªÐrü¢zb¢,Ä.Ö¢,CßB<,_åýðß©rðäv:*~ßhCoZÖö +@ürrboöª.ððÄ.Öªß+z/+u+ð+ãö>Zü_*_bo+AЪ~Aüvä@.å,,>*î:>üohAã+h©©£ä~,£U+~bÖÄ.,ö>.öö|Bߪ¢îABauaåU:*z¢aöaUoaðZoÖB|r£¢å/||åAUÃ+_uh~O@UbB >:ðÄ,BäzA<ähoüÄO>ðå>ö:höOª£ýUîÐOvãAZ ,aAð+bãÖÐborÄ*>Ð|r©<©*Ö hob+zâB©ãr¢ü @©¢vªîÖoª_a:Ä¢*ߣbvÄßra<:A/b@åhåÜuÃaä,Öã|ü|>+ãýýÖåOo*U@ £hß|<ãÐ,C©<ö ðvz/oã£>Cªb/z¢Ãý@@Ä*+Ä~O+ä ßCUO>A.üðãðBÃÃhAr@A,aA,ªhܪür©CbZ>ß,ä/_,î©Öoª/a©uÃ+© ZUýÄÖðÖ@z:ÄßrA©u.ßü/ð>.Ъßß<@ªÃÄýý><£zý>Ãuövhaýãbð*o©b.ÜßvCðhvýÄÜaßu@r~Cß:ÖÃ|o~ªãö.ªU@Aö|У+rb+/UU>hrÜ å U*uZÄu©©>BOä,UßîÖ~_.zböbOh©ª©Ã~¢ý<|ö¢uÄzrüh*ZߢBÖUr©+~ðbb@r¢_A©äv_åUr î~ß,>~ã/<îU.|>ähbÄ<Ö:¢h£U~/îü©ßC+~o>ÃÖ>U~bbZ,hߢ©hö>Z<ĪåAßåb£~:ÖBv< ðÄ¢o@ßz£aý¢:vObÄå£uo/©|ßrªö©Ð>au ZÐ/z Ü©,öäAo.Ü<@Öå:A åUhãüðã£ð>ý,hü/¢,_ä_Ö>ß_¢ßãZ<+äãÖA+bÖvßAî* ~>|+/ªroB+@ðä.uh|ö*ðoaÄa£_CuB_.o~Ü|îah*¢bðZv|:_Ä@å©©üUUÜ+öã ,ß Ãuh,îåhb_ð|Ä@öãðra.ÄuäÖr @Ü@bzAuUª~b/b¢ß+ãhÐ,@Äã_A£zýBCß:ðb,C¢ýUî <ð*ßð+ÜÖb:BU~o£ü~OB*:|uöhhî|@ßoÜÜa:u:oÜå*ÄÃh/Ö£_Bå ©öà î_ª*Ü/,rýÐåB@,<*:£>>ßbÃ|Ãäßý,o>/ãCZBã©+îvÖÄ~A:BüzhÖ~ÖÜ>,åhÖ£¢,ßãU/U,C,@ßZªub+B_uÖßÃv,ðÃb¢årÃðÄväðå*~uÃäîªöZh_.Aܪ@åßÄ|/ ÐoÜurßä|*+o>ÖöabüÜ£:¢|@rä.b.ã:o+/aãbî¢ÄßBÐßOv_A©@ßãðîýÄO£~+ÜÖ:ÐîrßbÐBüo bä*îÜ*ðz,.îaªu::z©. vöA£ýîü<UC©r|Ãbvªýhåähaß:ÐUðî_îruZ>u*uªöÜðr.Oä|C¢£v,zöuÄ _ª£oîªÃr:ývräî,,OCöð~£ªoCZUZ@îZbÜåߪößåz>uÐäzðÜÐåaCãZÜÖîý>A¢*.Ã_Är.üBß/,u¢/+ðÖãr>@,@Ü/Öýhîª/Övöb@OoB>ߢB|Ъ©*,ýU©ãCßaOÜv/.ãrOa£ü©*ãÐ~ÐÃÄîzübßB£Öð*ÜðoCb*.å£bü/î|B£ýa_U£ðh,ðÄuÄ/*ÜBZßuÄß_Z> ÄB¢Ö<..üOB£r©ÃäÜÖr*hÃ/zzähb +ß/Äbðöã@£/ZßÐvUhåªh*öb*ð*¢vÜzå *bª+©ðoÖÐAvCÖb üObOý_öý.ÖBÜÃZÃbrÖCöÐhå~rÐä,zÃö~äA©bÄhîß.bOª|h::býb*£h~ßZ<üUÃ_©Ðß>ð©¢¢ bä _£öZabZ.* ¢ªöÐ/ãÜuo£Cä.:ßbuÜß/£ý> ~ðåa<ðüZr Br|rUÜãCîru©U><öã>~ðãB¢h>üÖÖU©ã£B*ª@a@A~_BZCðÃ+_@B:ÃZ¢:BðbÐßb*©@+Aohä/ßý_ o|ß@uß~ruhuh+:å>~öÜu>O.ÜÐå_uÃBZÜUª@£ä*a£~vuÄvC©Ö* röU~zb.,Oå::oz:ÜZö£_ör+ößuã,ª/@Z,ßßbO|äaööüý,båÜ*Ð,:ZC,bÖAääb¢oÃ|ªUv©,~ÄB£~ý'), (N'Ð bbäAbav.ÖzoÄýözßZ.ÜߢCühÃ*¢@.ã+ªýäðb/aBÃvOðüÜöÄöBÄ*Ä+ÐýîöÃ~/üÐ>£ðOßÖOåÄÃvöUuð,ÃOãA<~ZßuUåACÐ.£Ð_©ZbªhöÜrý©//<Öü|ý.ªðUð*Cü|åhÜývªrÄ|¢ BAîUZ~¢*ÜÜCb_ÐýbßZÖöö£|b£.a,ãuÖr*Uî+éü ÐÜOÜÜbuUZ|,/ßÃ,::ãªä|u@|aîÄzãª*hz.uo:ßZ~rÜCZã ,©ã/îäbCÜ>vªÖä*î,©rUC,b<,ÃöÜOå©>_îãZãÖ ua*|©£*>Zü, ©O£AaB>ߢr_ß/.Äßb b|abhª*äüv_ý©ßß_ýzîåßO öÃa:_Cvö_/öîß ~bA©ohUv£_Ðaå.,ðO>åub,ChßÐÄza|Äîüu.Uär©bB©b<Ð@uã_¢v/A~vröåä./ðvbßßA©aobýãßh+ ¢,Z>äÜ,zvä+örzü U¢o.ü©ð<|ß,|vªr:ååz>~ð|oäÜ_ü©Ðßãb£~rüö*ü<ßöb,ßA©£ðb a<Ð ba_OCößßa_>¢Aa>ð@ aßü>ÜbÖåzЩ<ã~îUCö,oä@üCAãz,¢£/CßÃ:ö+|U>/u£Bh_ÄîÄÜå_@*:<ßä<ðÖ*U©Z|£oCüå|ÄîТäåü.o££åb+~~¢öö/büã++O¢b@..|B,¢Äª¢î_ã.:üOÐä>.rÄÐ<ÃÄböOÐ_uÃÃbä¢<:*o ªÜ~b~ao~h@ðoÜ~roãOC©h+BbaýaÖ:hîÃÃîO¢ð¢hbß~ªAz_î>©<£ZU>rU©>b~ý.hý¢u<å,|UrbAå|ÜbÜ:b@bý>ª:rÄöö.~_B+/ª,bbABBu:Urª¢:ªÐ~@: o>aÜZo/ªßª@ö>CO©Ã,b/üÖb+v~B>*Ãaa¢bZC,zßä£>,ãÄvC@ZðAOz:ßbZ,ªOÜ<+r£a:|u/©ß_~Ãî©ÖßBßÄUvUuö£Ãu£¢|zvåAUü@U>Ðã<ÜüÐÖî,@ª@+bUBü/bßåýÜAvuzßå.ÜZãZü.ß:vrîÜßCAbðr¢ðZ_:/¢Ðb/@Ð.öAüÐ ©bBãz>oäîBo©ýuZCOühUß.©U**ö_ÜöÖä+Ä+äBߪÜ+~@_|,:z/ZÖbß>>U.ä<ü|¢bö zZZã/a,*+äUîh©üî£B>rÄAårC:Uz£uÖ@|uUBo:ýZ*Ä:£v*ZO@bî@~Ö¢Z.bÄýÜbÃhBÐ ð.äÐOCuãý|uöÖObß~zuðß~üÃbÐý>vaz__A*Ö£ Ð.+î¢ÄOhüßÃZCãåß@ :O©/CÄ|üUÃ.ÐßzoU|ß|îüU@öÜOßýî<£Ð@Az<©zz©*£<>Ðua,CävbUª*u£Ä£ðî|bÜA©rÜaÃ~v>å|zÜAu_O.äAr|>î©bßö©+ÜÜ~Ã:baU+/Za~*bb:¢>BÖ<ÃA~:OzBðä¢~CCÜÐb|o@öb/ÖOüo㢢O:|¢Zb_CaåÄh/|£.ð~zvCCaßäßvÄ@äv©hå:,ý,|h,@bÖaß.o¢ýbåoA|bA©üîîUa.|C<ü£+>_aoä~bUßb,CB_Ü+@B ,+ .£Uh@¢rî*/>v<_äýOýaÜåð@Üo<¢Oª+£UaOh+ðÄb/båÃöªãbU>@ð ,ª/>h:ýbýazüßUvz,>b:ð~Äau|O .,©b:zä,Ö¢u<ÐA/b~Ðo*|Öãa::.ßå/Z~Z£¢ª U@<,ä|ÖZ~Ðîo£.>,ßÖ©_©ªýîb@z*¢rb,ßÄ*rÃüÄObÄäÐ>£uaÜr:îüb£¢@| *U.£,£@ ðbZÄãA<:öÐv..Zz|/ÐO.ÖbÄ©C£+ð©b<¢ä>ªÄåvoîböãr©@r¢/+|ðý:|@+_ÖOb©hüZ@rzuðr+B¢U<Ävðb©Zaß+îão_u/_ã|rîauoýzî.@orã*uBßBª©>Ü£ ~,©bÖý<£@@/*:£Ob<ö/.*öOb.U©¢Özvo.A>© ðä¢ ü©ðÐîo©. rBz~hÄ*/aCßã*¢<ª::o'), (0xC0A0B025C680B0A23D7885F7C203AD211F679679F97F910F0F1A364ED5C246569A2D2628E432FF5FFAE90153E56BD1809A8475D01906C2400EA015AB4A61CD7B312E5C94DC853DED68377F107E3E2AA348B5B4504C763D946AE519431C5315981B8621B70F3DA415478868E286B2C2CF76716394AD7C2EBBF1C72AF66BF9D01422E6F4F71D72940B119E08C40D5B0DB8234ACCABF080EA9F5866C54713ADA94DB754BF9FBDCAB204DD57830E7369AD96B971D2212D2523A1FC559FB6AC4CF863F5BB0CB99B6DFB5997C8CE99FDDB2BEEB82F8DA1DA882092311EA3672AFB57905F1F19B85CF4FB4B757989645789A4202AB1FD7DBE56896C9A79887CCA942F9B713D3ADEC27291C434422B61FEBB3BA77A833C79FEDAD10896AC1DE36B7E81E14AEEF3194FC65EB81F39487C2A276EDF3EE1024757B59D976C32471554AE58B5C04A1710C72257B4248459C59154DD6E3E3EA48A7C3A8A94505CAD1D7E486371E093BCE00F5E171C894E22D25CD8061754D9D71609CE3985BF83BF6B743A35DC21E8E5FD98FC5EDF2788012D18B837785696C9A5704D67115936218C9EABA74F1845B173F3087E577AF8EF81CD0B6D074B4714DE71906CD481D3A461DBD2417BE0B215D207C3844E17712A785EE5444EC91A415796C9DD87D9DCF220641C7BA8B673A01BF69AFF87C2C6C6FF65F4769B8E5698C191E9E417D48DF92AD164EAFA), (0x0F), (0x29572E1AB994D002DE21E46657910E84BA16CC8F894669A0D5B65DDCCC0AE3328B5665FE69A7D7551415F66B15C379D3DC753B6BF45BBBE2EE8E440336F335D33EB2DB002C0F1B123F777B7450FD8B113C8A0056CE773E309B820FDA63D41E20DF222C62E879A6CC5A282C7CDF4692F00332C6ACF3DF05C673AA65A9FF40AF6B595B952ED02829C3E333FBA64BC15054EF1FD7300D722CFF1D66EF3E13FDCC1A79C02384B1641FDB0903C8C0E35F7AB25910BAE0687F5EE72E95106A39EBAFE666E12D8B9DCCA38BFFFC2709A96C1CBEEB3CE40343ECB1F9623C561B53B5A11E53E2590231EF158D6C2EE16C57543DC278527FFD06ACA37A2F332861758738495A08B5C7121A8CFB265796140A45A10DFE93A30036A417A73EDED2FEC7B417E4F698124E9E76AF5EC683D6AE158E70EA911A62E1E43713B5F10E8833478D34723FB11E7233526F88E4443AB3CE6991AF6EE86DAC513500BE845C5D90ED7B16384E636F6370FEB73EABD9FDA0FC60E6887CD9C55F2088200AB15FEDD6F4DE9B682D01646BF92E3F70312E0178375FC22475D51314B6B718C64265B21010E049CC3E9572FAFB7B8E4E99542EF186A8D2519DC8611ECA87B176E99D28947B2E5F50E43439A2EDC728FA47C57A6289263F9A926072487F2A01B7E4FC115D52F9D26BF4DD0C516E3064D69F66D7050C4EEDC25E8E011BBB17D1BA3382BDF0B5CBA74EF30F6DAB1AED2B62FB9CA81853FBAA950F4EFFC3F7B6AFDD0C521EEB727320D4BE8912FDE141A870639F201F6EB86637D828E167CBE4563C5F909EC7CF3FF0877BD459CAE9ACB4CDA58F6058968F6E54EBE6134A92B808DA32D69E50A3E1A023AF98A39A5E9C4E2B7314C23C84FEA5D0214ADCE92BA6F5C2CB7F98130E6329C4EE3CA9FDEBD4F54F98E7D67DF6CC563330CD2E5905B7F708A3E0CEDF043B1D0FEBFE4E4755A7E44D548D5143CF78CCFF2864E24034D0BE3644A05A0A05164A5CCAC792F87D0EDD88E9E1057866B3392A14CFB69F58DDDA1A3F1702B54DD9483E42F47908E6D48119865A5653CB46D091662FF6365FAB04EDEC77B9660C283B0F99C635713A3144404D9D18FE86874FF846714E1DE312DF96F08B1B6E1B1B0D5E1E47BA04105E5635EBB6E8C19205676527C0209AD91E2C87E79F81AE15D625328FBADF3FCC4BE7E71A19312C291D04EA24B5475AFB7284001A331C71DDA81F1591B632D8262898DBD9387FBFECFF5DCA9A978A5F8ECA371D35DF24992F750A72FA1C9B73EB2BC4FC1C6B81C2F2C4141AD551D7451DBF86C67E14A34603FFAC632E0DC5CF64EADF6FD38D432349742A70CA0AC3DD9EC4543A96D5F4D6887DF81DBE1D93E5FF44B5EB726772907C627D0AE9327CF83BCFC569B88A388EF509E6569425652BE045718654D76A3652C4BE3458EAEC560000E1EF582A2D740C27F569811BFB56FD5129A4C1F5A464648E17F3CC04360B1C9055944375D3B617FC792DE101B536C9673607C147940B5C7D8AC9123AA708F0EA4CF0C66612877D728CC47C768263D9E02965CD2F4AD4FB4A38C6EB0AA3DD55713DF7B4C4706254AF8A4EBBD08EE5FB27EF3210423AC1A077F57B2D4C9B72CEAF6F0A398BAE156FC7101EA5FB192BBB52CBC41A71CD12367C573CCFF534081317800B6184AC7079DAC248311C1CA45ECABFDA80D7575CE15CD3BD3371457A92080A8D7A0DC937A65B4A3FAE84E01A5FB2DE053559873BBF232A05B0EF3C089548B629128E2950008834258C17AD5D7BB95D819240453881CECD57E3C486B71F42AA66CDB708D1888D04AD2561AEA875CD89F791BA7554037EA843C1D26D3B017D054A6D478FC3B18CF9043C97121F2025E1153B8F2565CD56634F0FC50FB520C9ABA85C643A2E3EC64605C070186B6B88229CF157007257A07C16E440B4EB7C43E472EC6AC3BBEAB3D774491FA45C3EF7E386A273C4C8C83951BBE8244AFE125A897D8BA57F01C567B13E7F8B2837FC1FD7EC5C2D49097F1CA9B21908D3C568D962EE9627D19978E1C13AC186483D1019BEC84C5EA1E51080FD6FFBCCE8BD93EBD5A6283AA0D54E3E737A6B0E47F9D36CA1FF490A790A387DDD1629619DACF904A6D5B1A214D678E9790DEA26790138049C8F2AE8738972CA6DAA5C8AACEDA1C681666871473057CB8660916B201104DCDE24C50E8110901D63E7346A79EE3C8C6C23A41299C6BC6B375E6113F806AA5CA680AB8727924571D64A0E60FCED52982304FEFC6CF14217685AD622AE7C255C3CD8C3F942B565DADE333C4FB85B6F4A0CC9F0F307ADEFB53E941ECDBC22C35924B224232958556D9F241D39B4F35F0CEB8C15E48C31548FE90DBBAE96971EBB70E22A06374B20B4738254E290B6004A3511E22F0CDECDF35D943A1B9DA7D6070661C8D2C859D59F6B617009DC71FE320D707885B4EEAF921537A8A2100416CCAC4DDC2EED2E81DC3C43C4AA6DC316EB96070E2D2F515318B236BC91B0328E664BA45D8F95D045DFEE9C48712904245121BC0C09F6E99D5AFAC37BB771F02B09B45D5FC8668656C5C22F3E9208E1EFAE116B70F326857062070395D2548E6DFE703FBDCBA55BEB9B664647C6AA0A5118D3CDA5067F37E22EEDFCC163F0837134C13F22C9232309B57FD58DE03EA9B8FDB17DFE86E8677F385C8EDEA89A88AAE2D512046AE787F4B0C4F086AAAA02F04344C4B17385EA4B5AC0EA6C9545601BF72AAB0A2BA44D152A884EC2F8E0D58E5A9E9A63D6D7375DEAC6A9AAFD1A5F6A63D48F7FFFF7C49EF7AE87EA3627537AEB5B12F7ABFC451FF34D2064FAA2180F28E45E2350558E62D9FB6C27504C26C2732FBEA10768BF668F6F8CB1D760A4549677C252C9302995CCB01DAF901DCFA6265DF1CBE37607C024F793E0C9DD8B79571791D88AD4F9430529D5574A0FD672A0E58A7A6ED8702070012DD19C49CBEF24A458788CF61B5263AEC5BAA1AF7515212140E452110A7EA7706888A628A7BC5DE532A6B65DE5A9C93816C012B57FC08C18AF7A09E79D1399DAD11B8E93AB3B06095DBB7DCF5EC43C961A19FA4A6BF1F1A8FC8E782DB275481F0CDC8BC91B368DDBB90958C343BDB9EA3D73CD83194F6EE029E5961CC2D957E7735DC28139727AE48C1F9062982E653FD58DEF3FA8C406BD6EAA9F359F7118DFB27150E5FA37B1CBF8E9F7F9BF0B48FB80574734EA173EAE5705138ED245441A06B0B026DE80449DDC2447BFCD0CFD6262A4B5472AE3F59A33A18DF52422F8B3A4DCF20E5B211D0012A958C5CF7FE04B07B02C2E90FCF022BB15F33CF24F78B92B941BF119EF064087B434808B2FCBB4C041ED73F6CA22A7EBCF53452EE00DC3309E9A3B63EF3117AAEBA6DBC770968B4A3F7BB16105C361717305499CC112A6A7714FED958F50D110D5C90B2347DF7B38C8FBEF645C612BDB39C9F0EAE77BE8D800335620A9F5BAEEAAA08B3BB73D29938A10D4C523414B0F24125CC65FE72859E0322313895A8FD24000BABBD5EF23FB9F5C5FD6A723B5BEE846FB9799F48EC378315B8519160A308101852287903935EF6026038751B2BD7C652A425EF8384B71F742A4949DE289522F55A59D9237580DC6A838CE8B3B267F9D08B4EBC7D189C939B1904D95A1517E9CB158FC0C1FEA2ED2359850007DE5BB1B24F6952D9D8A5ECCDC64E1A70B772556B931DAE32A737E1E8619923938C9BCCBD43171ABBB51FE26FA302FBB0887C6BD73F9464B0BD8F1B07777A784F8259313A816D2DA06799B6832B4E9F944C315FE52D4C53F8370BFFC3FC03344A97A2DD59D1B13F2B4ECB7F95EDD1957EFF86CB461A831245F54903756D59A454656BFB786135C28AF224A661CCCE0A556680D46547EE301490975498BDB9CDE5172B2081D61D0DB9C44043E5ECA079373EAE0EDC853F0C872BE6E7C9D129CD4866B14AA19D887F59732AA1079A4A27E02E2D5A0FAAF16FD81EA955FF2543D89A730B8F3B55C799B62EB5596A9E04ECD1BF07ABB3CFCD9D65417292E42280243F5216949ECAFC8A5693A3D0F598054A09CC74401DA824CAA56E19E9E334B583AE812A0887705E16B28D45202BECA7DD3C288917AE3006872D4BEF20B1129721DE2032647DFCC2997E6D9D906304AEC8B63CADCABB9DD57E7A92EB3B912D55AFF62341FBBA436F4F55FFA940A27624289D166A7464DC76404AB3E9DB1196F84117FDAA3FB2A31E72DD6E64BBE494DC046EB29E8AC2D13B19BD01A0F659842DCF076828A4DBF465FA07E7A70667BA5BB5E7E57C6EF87D8E36B28082B0F21829593095B48C6C27387A4CA482DB3A34B1F2B5FB1E6417CED689D9F1F24B61B4F7EFCE4DC5C1F5CF49B0BCF21243EAA2FC8DCE800B0709B53171CF2AB27A34ED0897BC930CEC6EFFFCE6A15DB715AC82AF26F5647CD1A9E0D6190C53F2DB0CDF8BDFF98A9747A6002EDE831455ABFE2BC53C8B8B74C06026EDDBCCF3D00AFD21D9D1D1E72C11FB5780E545AE5E959B3A1AE09EB64F815ACB6FC2ACBB8AA22013E1613A73DA170FA34133FA9F7AC1D8583082E8FF7C36D25887067759753FCCEEB531BCED5B175FF3E0EB751B86CB40ADEA448B07B93097BA8EE1ECC39FA62E01771BDA4904FAFD2922F51E90B1C6C1CBB5D97F30B4C525849A025E792A9C543ABD73A47AE10798FF4751D4C42206F8C810210DC636FD4CB1E645BF029C83FE9690D3D34E1256DABE407FE962E0516283098659098E9E03B026F284AB588662C3533E334E23AAB5C9465F75B713E9C184D32BF9063AF517F2C023272FD23F65BA1D260FB22E145F6ED09FB33F184C9C3D30FFC82C9D5C886E26308E008385F716E9BBA9FDEA0F66CEDC9A359B31E8DA8386F9FED267492CC09D919BFD964EDB4AA8AC456CA2AE432199094FF316FD2C3D55FA89999714AFA09EE960487369288DBEEAF285937DE0D8A6DD496DF929A9A0755EA79BC541B3940CA4CDB94DFABE2FD0C2342BFA9699D819A0E2C9DB31A7653FBFD314C18CB87D376E88FEB0279AAC1F199D36E57DA5DEC4CF72245EF9B8CAFD58798E27996E4409C6F49C1D9B27F20646AAB1A4608FC21A0450020A942E4DA5BE0157AE0C8485BB493D2E8919C129A7801E085F07269CD8B77413495C4965A8B6F65F99C043F9C215066B336148F043366A8A7615FE9E97648EF698614C5F0FC775C223618FD74C14463A00BB69777E73D012F1BEFF82C857B825415D6150D8A76B6BEB76DCD1A6834E61DFB49DDC0B17781491295D40D7F309CBA95A95EEA2E551595FFD9C0796FE6C7E708DB303C9EC2A39D55CCFAF4A2A93F87D11384BFD5FBEEA63347C0D7B707DA2CCEEC04A3FF601CD306C195615A21F3569939A85C6207120DEC8A085601CBE54DF2CE25B6A49B8770F6B1B914658D4B12546A3E7E5E7EC9C6D9F7B67558C6D13BDB486F8BFB3DB1FEB13865B04EFEA85F3EF602968D67EE74045FDCADE4111830DF7E381C1DBF1617B83FCC26181977DB4F573761C43BAD745AFB879C610419A01F35D1D0C58B417EDFEADE4D9AC75BEBE7005E8DDAB66CA4D0C4C222387AB6B3262C06E348A616C316B881D95C60D9929F9BB460A68BC569C82C0000C91E4665342A266EC078A240E99A77213493476FEA2F839CC5550D9A669D1A1BA516FAF7721CA4323A6BD126F873760B14A43435E49115999AA99FDF1C8B07235E879AD3A07FAF18EF15347F5E5DA352DE0186C269E5371401615DC87DC415AF64AEC871D9A36B94F41C46CF5D963B3D064D011A0445B9785086D23E22E79A2AFF851BAF9431783A96F1CE4D9F67B76A261FC230C3FBAA1EF54F2152D12C720C811BD0D77A8BA8D4D4C68413776BD9E8CF67180325696704DBFCBA440F2569697FC1CC8396DFF09A76ED5CFD7696A78975398369146FE717B4CCFC7ED164C5AE5D1B93B59F5651EF777E8C380D6A8D445430CED6A2FF5510DAB4CECAE271C81228AD9F5B03F2E91FE793F295E2AF0A4A3EB829A195EE0C5DC583DBEB87870C05B6790F5FCA32416246AFEF0E0CBF2D2BAA848B2A48277D39A142957F16FE985F86EDDF689FAA800C76C65AE6FFFD510555B04103FCE2BC8EFCD6BE889CC14C48178F881FE0C58B00047EB482CC973AA4F08F2A66BD9463A430506BC8EBF870B57A12CE70743225902440FE7D2D3AC2659C19970C97E58B822CE3EE8F59C2140C0EFE07BAC8C92FBE6A9A417C96E576F68E062CD260641E94874C4491439637612CF26F2F32089DD2E9D8A2FDA30EEC466CF801529641ABAAE073327B859E7AD462E04FA37647C385695AE888C121F07860FD244B94E4CBEB47C54FBFD5214C4B5DCE9AC3BF49D025347BE93C5922E8BF82BA1A88792E3F7E15645BB0F803B0470D9C2AF3872DB9172DFE1719FA8E9125DD8F3D1B06C4D22E8E1BAD5AED1F2D30CAA12EBCF8F4385500035A7A17258386D236D368C6954049CAFB646B7F5E290ED1E64E5860D52DE857E81A0369571768972788B74BC56A3561E4F1FC8FCCD5A2D94CA831D72B25FC09EA10DE7B3CDF73E4FBD458D672C20C7C18F77BE430588B12772A1DAEE5916C018BAE61B48BBA24047D1793F87DCB67899CB5BE33AA18D89185CC0312C2C5FF6A67564BC46158F05ED2766619C49395ABC2931230D2385772D6CF2FBFB61142B81729902680A32844C45F6033B2BECDF236574F2EB3CF972EFFD8ED922831A8C134AD029B026E2B1F6BCD6B73D824C017023D885EC1130548926226A7B5961B93B79FFF04BC31EFC82C30C3E5632456DB18D690EAA849FF20A8B9099F47836AD5B2D7BB3825BB5BD04DC032915020E46E0B4B8FDE0530EB6DA0DE5C02285080A8C5EE338C681DB65C7AC09DE7166DCF87D49A93FCF48BCF81EC4E98465F58A7FD408ACC62ED5805EE95326345930356320ED42E8DBC83B3391EB19F1A856FFC22189FA78CA16D9A7B95A566C22789EEE8F765378B291941BCD792443BB9EB682535412DF35BCA91A13AB3F8161CF01194C3B6221F3871F8FE5EEBB50E295EC2A93D418CE65CFA8C2CD4955176212B9FE680AF7802C848EDC3482E9570158378DBF04FD8DB632B37C92AF64BA22081DD324BCE8D79E6C0E0F454C89D2E641C17511D7586D252C4825577AED8D2FD4AA3C750622546F5FEF5306EE4869A8D09640EDEFA85AAFB0BE0874B380237E80EF60A25D6DD01F6D05B1E8056636D3DE7C76D4ACAF302C5F8CB45829DFABDFCBD475FED7C75B72C62170E9E662AA5A7724A637094ED1E1AF3442D0A987F58D59E21C20E047FC0721041E7B2E5645ECE269D0F53974C68D02945F93748AC94E2BE3800456797A3F289F16052056B348FE65EE4FA70043E51B8F1E4BF86882A63AD04F4AD6418668FFA1CCAA5EC16CBBE106A51E9C89972B9F9AE8C75B2E46C01C6FCA40077872BCEF85400543A9865A22626AE1B37419B14923AB3B68CF0DD16AFC9DEEF71CA46883F82F074991E7F6048E94F8B3551C98561906E3CD375410777EAA471BA75315BDF26DCB450267A74BB526DA2A151E05EFF598EE05C09B4C941E8FCAF790DA6D3B7F3AB0F7415353A16F98181079F662509457161E651FED6711273672ACBFAADAC99EAADA5D1EAEA2353CA638833C1A282D6A5349B45EC66F4D59D61A1CE104AFFD3D46EB4B980375B873D93879B4D3E51D1E55325C61266AD84B8CF33884854437F63B45E53EDC8566DD8140759DF59875F10D0E9BD2539C16EC02F01B003D23EE94F073799DFFDE31CFCB7EDFE5E54A55F48D478786A855A2AF2F093BEC7A66905D51E09D721EE7F13EDCDC16D4BC30F6C8AA2682F5AC67EC9AC0DA6EF692455564DE7283F4ACD3D5A54658A9DC4EDDF2FE02633253E3AAB0EA03F2A134790A9C8776B1F639ACF21BD640DDAF53CE005BF2E770E43F13017133C1A9F0AA22912C3BBC22559CD7B94100476C0305FB5D1BF3A6BE5CF8166D747530C268030171A3AFB16397ABAABF2B2E3FE3E7A6FE7B38648DFD03743434255EADE06C15414E0ED5C8535487C57058E7833EB83285DD86B58A0375046E3F6B7D4E48FDCA5305ECF1E501EEAB26A0AF1DA42BE1057BF2D8D059A68B4DD8FA7798E7D7498C828E948D51C64D73FEEB8EE9545760424E66015B601D60AC8A9F28EA8A45B35F67228B159763B3A5A554E17E27A1F9719A354A81C5EE1C651DE7F2B2AD52F9A9283F7221DC4ABAEAA25BA61B3BF284E8A5B750550B318979161607AF610108426B4855E82FC7954F8A6FDF7A4801392B631A0CF602A4ADF6A6091BB6330B79A14363BFE39C9CB8EE1200CA9B521F3114DCDC4C56F4124FB6AA5F4226BBEF1C7EE63E26D441558EC6612EE3F1DA02A496C806D966CF22AD3123F9494D5A822222F44BA513F85CC3874D75E5C53E5DEC97BABB5EB505A5BFC380E5B0580C417BDEFCB0FD8E5D909E7B335219493CE802D61CA1929F337D2D5E9BE18302AC6B8B0BFA16C88D505E4A2A1CE371B39C6686A8E2EA4B5ABEEC9B7F83AEF26C0D9BCEC7D71D4F262F7575CE677882400B79B2255AEA1FC220205D1D7B48F9A16BDE1C7124A9EC7F1760896D647CE3465A4B7419ECCD01238C0CA7A6C031AAD68BC462995C012B619D330DFA60A25DA33D06B32FD4EFC49ECCF8F5180235BEE5C5A2E1901A59EA5910028CA9CF16C2D9AEF479B97E7B019C0FC3CC530C136), (0x824BDC0BD88D32C6A1FC2631ACFA6362B690DCC05775AA15590468D874D0CA32525A6E20518F16B968D046B3F38F504162CE0AA519B7EA0DA0C7B2D3255951D031F4DE528C4211277A2357862FF621CAB42676A6C625199A70607F8ADC42930F7E7581FEB0FEB51FBCE22AF55F63DEAAA5E81FFEE3AA090CDA43E12BC3874B388F4807B9742219B67156EAE3FA233B0C82D5E4F422952CD46B75246C1C8A5C3597F266175B253582CE688D8CC02612B708D5A9EEA25615FA1C334DFFFEAD9AE6FAB44C08BD23B05C9F6225BA089F1345636C6346E16E9240DC6BFB27D8368320CEA6910CD90AFAE4244C4E40315BF27C20079C924A53058C210B2B5128888468DE04EB620E066C58727E22941F520F81797E07D19AF1D67BA004EACDDEA8BC9BC8E6612C6F8F6D199B431FCB31716DCEFCA9D7AA81B3CEED2D70C10A1C9E7ACAC286CC38F1E211E910ED3557D10B492F961CD035D0121A151873FEFFCE63FDFCC95509AAA434DC1A97EE99937D771C2226927300CD44F9B06CB7207EE3121BADF0398D7B019F8A613FB69DE2788697A057DCD83BF0FC2F845B593EED145E3684D2EBA344E9A020870811C116A61737E61F7F27073ADFBDF3090920A8619C4DE07F190F8DE253B7B7BB5033DE3B18DE442157CD94372F4AF22EAF3AE08077266BC4E0978D07A903CBC8704BEAABDFB7F12ADB8609CFB9A94FCF1D5E3319D7374329C81A5B80503D775302CCC6E35F474FF749B5A4F01D9C0A3647BDEA4BD0B2F13908C0E3C45C70D99D0EB5CDEDE26C6FD60F3BCF2192520C2C0F253993532C834FDA8DDB9F638A9BD9DB07E167CE1D53DB4E133B95E3CFA6B5B4B6B536364649E2327D125490CF72859FF5468A70A45DF1D15E443FF1ED6B0BE626EBACD465A294BDFF35510BFE4A7EA1B6F6ED891C440F59C364D80209F04412066D6AE4C5B03A53B1CC716E0CE6D314C59E3BF77E82CAE1DB531100CA92B30FF13E0490DF9ADB05BB9AD74FD3A04CDD91C43C6BB54C9383A38808729F3A881F19617DCDE142342BC2353CE3AB7B0E3A06336E0655485AA5AB80ED569169668112B83671237FFB4E8F11A97F10B0D8277ACD6B6BCB81C9D007D8226055DE9958CEBAD1F3459D1787382077449FDA94FAA8C5DCC3FEFBB690EE65694A5C9BF8B07750B155DEE5E2DCB5E333AB0A85312D4327B89002D55AD2044005DF33CC2A9C27C6CC4E283F1CC2E2FF0E1AC80B8668333C), ('00000000-0000-0000-0000-000000000000'), ('2001-01-01 00:00:00.000'), ('2052-02-01 09:00:00'), (null))"; - break; - } - - return ($query); -} - -?> diff --git a/test/pdo_sqlsrv/PDO_ConnPool_Unix.phpt b/test/pdo_sqlsrv/PDO_ConnPool_Unix.phpt deleted file mode 100644 index 458526e0..00000000 --- a/test/pdo_sqlsrv/PDO_ConnPool_Unix.phpt +++ /dev/null @@ -1,35 +0,0 @@ ---TEST-- -PDO Connection Pooling Test on Unix ---DESCRIPTION-- -This test assumes odbcinst.ini has not been modified. -This test also requires root privileges to modify odbcinst.ini file on Linux. ---SKIPIF-- - ---EXPECT-- -Pooled -Not Pooled - - diff --git a/test/sqlsrv/sqlsrv_ConnPool_Unix.phpt b/test/sqlsrv/sqlsrv_ConnPool_Unix.phpt deleted file mode 100644 index faa5fd93..00000000 --- a/test/sqlsrv/sqlsrv_ConnPool_Unix.phpt +++ /dev/null @@ -1,35 +0,0 @@ ---TEST-- -SQLSRV Connection Pooling Test on Unix ---DESCRIPTION-- -This test assumes odbcinst.ini has not been modified. -This test also requires root privileges to modify odbcinst.ini file on Linux. ---SKIPIF-- - ---FILE-- - ---EXPECT-- -Pooled -Not Pooled - -