From eb1a4df6ebf72d4efedca19d243e545ad7ea857c Mon Sep 17 00:00:00 2001 From: jinhosong Date: Thu, 22 Mar 2018 10:23:27 +0900 Subject: [PATCH] add libraries zmq,qlibc,oci,microhttpd --- .../AIX-00FB437F4C00/include/microhttpd.h | 3456 +++ .../AIX-00FB437F4C00/libmicrohttpd.a.12 | Bin 0 -> 1478052 bytes .../0.9.55/Linux-x86_64/include/microhttpd.h | 3456 +++ .../Linux-x86_64/libmicrohttpd.so.12.43.0 | Bin 0 -> 370892 bytes .../4.4.0/AIX-00FB437F4C00/include/ocilib.h | 19176 ++++++++++++++++ ocilib/4.4.0/AIX-00FB437F4C00/libocilib.a.4 | Bin 0 -> 2767351 bytes ocilib/4.4.0/Linux-x86_64/include/ocilib.h | 19176 ++++++++++++++++ ocilib/4.4.0/Linux-x86_64/libocilib.so.4 | Bin 0 -> 1857424 bytes .../include/qlibc/containers/qgrow.h | 99 + .../include/qlibc/containers/qhasharr.h | 174 + .../include/qlibc/containers/qhashtbl.h | 135 + .../include/qlibc/containers/qlist.h | 161 + .../include/qlibc/containers/qlisttbl.h | 180 + .../include/qlibc/containers/qqueue.h | 116 + .../include/qlibc/containers/qstack.h | 116 + .../include/qlibc/containers/qtreetbl.h | 182 + .../include/qlibc/containers/qvector.h | 160 + .../include/qlibc/extensions/qaconf.h | 229 + .../include/qlibc/extensions/qconfig.h | 57 + .../include/qlibc/extensions/qdatabase.h | 140 + .../include/qlibc/extensions/qhttpclient.h | 127 + .../include/qlibc/extensions/qlog.h | 91 + .../include/qlibc/extensions/qtokenbucket.h | 140 + .../AIX-00FB437F4C00/include/qlibc/ipc/qsem.h | 56 + .../AIX-00FB437F4C00/include/qlibc/ipc/qshm.h | 52 + .../AIX-00FB437F4C00/include/qlibc/qlibc.h | 65 + .../AIX-00FB437F4C00/include/qlibc/qlibcext.h | 45 + .../include/qlibc/utilities/qcount.h | 54 + .../include/qlibc/utilities/qencode.h | 59 + .../include/qlibc/utilities/qfile.h | 69 + .../include/qlibc/utilities/qhash.h | 61 + .../include/qlibc/utilities/qio.h | 60 + .../include/qlibc/utilities/qsocket.h | 56 + .../include/qlibc/utilities/qstring.h | 78 + .../include/qlibc/utilities/qsystem.h | 49 + .../include/qlibc/utilities/qtime.h | 67 + qlibc/0.0.0/AIX-00FB437F4C00/libqlibc.a.1 | Bin 0 -> 1449054 bytes qlibc/0.0.0/AIX-00FB437F4C00/libqlibcext.a.1 | Bin 0 -> 781274 bytes .../include/qlibc/containers/qgrow.h | 99 + .../include/qlibc/containers/qhasharr.h | 174 + .../include/qlibc/containers/qhashtbl.h | 135 + .../include/qlibc/containers/qlist.h | 161 + .../include/qlibc/containers/qlisttbl.h | 180 + .../include/qlibc/containers/qqueue.h | 116 + .../include/qlibc/containers/qstack.h | 116 + .../include/qlibc/containers/qtreetbl.h | 182 + .../include/qlibc/containers/qvector.h | 160 + .../include/qlibc/extensions/qaconf.h | 229 + .../include/qlibc/extensions/qconfig.h | 57 + .../include/qlibc/extensions/qdatabase.h | 140 + .../include/qlibc/extensions/qhttpclient.h | 127 + .../include/qlibc/extensions/qlog.h | 91 + .../include/qlibc/extensions/qtokenbucket.h | 140 + .../Linux-x86_64/include/qlibc/ipc/qsem.h | 56 + .../Linux-x86_64/include/qlibc/ipc/qshm.h | 52 + .../0.0.0/Linux-x86_64/include/qlibc/qlibc.h | 65 + .../Linux-x86_64/include/qlibc/qlibcext.h | 45 + .../include/qlibc/utilities/qcount.h | 54 + .../include/qlibc/utilities/qencode.h | 59 + .../include/qlibc/utilities/qfile.h | 69 + .../include/qlibc/utilities/qhash.h | 61 + .../include/qlibc/utilities/qio.h | 60 + .../include/qlibc/utilities/qsocket.h | 56 + .../include/qlibc/utilities/qstring.h | 78 + .../include/qlibc/utilities/qsystem.h | 49 + .../include/qlibc/utilities/qtime.h | 67 + qlibc/0.0.0/Linux-x86_64/libqlibc.so.1 | Bin 0 -> 379705 bytes qlibc/0.0.0/Linux-x86_64/libqlibcext.so.1 | Bin 0 -> 123120 bytes zmq/3.2.5/Linux-x86_64/include/zmq.h | 402 + zmq/3.2.5/Linux-x86_64/include/zmq_utils.h | 64 + zmq/3.2.5/Linux-x86_64/libzmq.so.3.0.0 | Bin 0 -> 2689565 bytes zmq/4.3.5/AIX-00FB437F4C00/include/zmq.h | 708 + .../AIX-00FB437F4C00/include/zmq_utils.h | 48 + zmq/4.3.5/AIX-00FB437F4C00/libzmq.a | Bin 0 -> 3292170 bytes 74 files changed, 52242 insertions(+) create mode 100755 microhttpd/0.9.55/AIX-00FB437F4C00/include/microhttpd.h create mode 100755 microhttpd/0.9.55/AIX-00FB437F4C00/libmicrohttpd.a.12 create mode 100755 microhttpd/0.9.55/Linux-x86_64/include/microhttpd.h create mode 100755 microhttpd/0.9.55/Linux-x86_64/libmicrohttpd.so.12.43.0 create mode 100755 ocilib/4.4.0/AIX-00FB437F4C00/include/ocilib.h create mode 100755 ocilib/4.4.0/AIX-00FB437F4C00/libocilib.a.4 create mode 100755 ocilib/4.4.0/Linux-x86_64/include/ocilib.h create mode 100755 ocilib/4.4.0/Linux-x86_64/libocilib.so.4 create mode 100755 qlibc/0.0.0/AIX-00FB437F4C00/include/qlibc/containers/qgrow.h create mode 100755 qlibc/0.0.0/AIX-00FB437F4C00/include/qlibc/containers/qhasharr.h create mode 100755 qlibc/0.0.0/AIX-00FB437F4C00/include/qlibc/containers/qhashtbl.h create mode 100755 qlibc/0.0.0/AIX-00FB437F4C00/include/qlibc/containers/qlist.h create mode 100755 qlibc/0.0.0/AIX-00FB437F4C00/include/qlibc/containers/qlisttbl.h create mode 100755 qlibc/0.0.0/AIX-00FB437F4C00/include/qlibc/containers/qqueue.h create mode 100755 qlibc/0.0.0/AIX-00FB437F4C00/include/qlibc/containers/qstack.h create mode 100755 qlibc/0.0.0/AIX-00FB437F4C00/include/qlibc/containers/qtreetbl.h create mode 100755 qlibc/0.0.0/AIX-00FB437F4C00/include/qlibc/containers/qvector.h create mode 100755 qlibc/0.0.0/AIX-00FB437F4C00/include/qlibc/extensions/qaconf.h create mode 100755 qlibc/0.0.0/AIX-00FB437F4C00/include/qlibc/extensions/qconfig.h create mode 100755 qlibc/0.0.0/AIX-00FB437F4C00/include/qlibc/extensions/qdatabase.h create mode 100755 qlibc/0.0.0/AIX-00FB437F4C00/include/qlibc/extensions/qhttpclient.h create mode 100755 qlibc/0.0.0/AIX-00FB437F4C00/include/qlibc/extensions/qlog.h create mode 100755 qlibc/0.0.0/AIX-00FB437F4C00/include/qlibc/extensions/qtokenbucket.h create mode 100755 qlibc/0.0.0/AIX-00FB437F4C00/include/qlibc/ipc/qsem.h create mode 100755 qlibc/0.0.0/AIX-00FB437F4C00/include/qlibc/ipc/qshm.h create mode 100755 qlibc/0.0.0/AIX-00FB437F4C00/include/qlibc/qlibc.h create mode 100755 qlibc/0.0.0/AIX-00FB437F4C00/include/qlibc/qlibcext.h create mode 100755 qlibc/0.0.0/AIX-00FB437F4C00/include/qlibc/utilities/qcount.h create mode 100755 qlibc/0.0.0/AIX-00FB437F4C00/include/qlibc/utilities/qencode.h create mode 100755 qlibc/0.0.0/AIX-00FB437F4C00/include/qlibc/utilities/qfile.h create mode 100755 qlibc/0.0.0/AIX-00FB437F4C00/include/qlibc/utilities/qhash.h create mode 100755 qlibc/0.0.0/AIX-00FB437F4C00/include/qlibc/utilities/qio.h create mode 100755 qlibc/0.0.0/AIX-00FB437F4C00/include/qlibc/utilities/qsocket.h create mode 100755 qlibc/0.0.0/AIX-00FB437F4C00/include/qlibc/utilities/qstring.h create mode 100755 qlibc/0.0.0/AIX-00FB437F4C00/include/qlibc/utilities/qsystem.h create mode 100755 qlibc/0.0.0/AIX-00FB437F4C00/include/qlibc/utilities/qtime.h create mode 100755 qlibc/0.0.0/AIX-00FB437F4C00/libqlibc.a.1 create mode 100755 qlibc/0.0.0/AIX-00FB437F4C00/libqlibcext.a.1 create mode 100755 qlibc/0.0.0/Linux-x86_64/include/qlibc/containers/qgrow.h create mode 100755 qlibc/0.0.0/Linux-x86_64/include/qlibc/containers/qhasharr.h create mode 100755 qlibc/0.0.0/Linux-x86_64/include/qlibc/containers/qhashtbl.h create mode 100755 qlibc/0.0.0/Linux-x86_64/include/qlibc/containers/qlist.h create mode 100755 qlibc/0.0.0/Linux-x86_64/include/qlibc/containers/qlisttbl.h create mode 100755 qlibc/0.0.0/Linux-x86_64/include/qlibc/containers/qqueue.h create mode 100755 qlibc/0.0.0/Linux-x86_64/include/qlibc/containers/qstack.h create mode 100755 qlibc/0.0.0/Linux-x86_64/include/qlibc/containers/qtreetbl.h create mode 100755 qlibc/0.0.0/Linux-x86_64/include/qlibc/containers/qvector.h create mode 100755 qlibc/0.0.0/Linux-x86_64/include/qlibc/extensions/qaconf.h create mode 100755 qlibc/0.0.0/Linux-x86_64/include/qlibc/extensions/qconfig.h create mode 100755 qlibc/0.0.0/Linux-x86_64/include/qlibc/extensions/qdatabase.h create mode 100755 qlibc/0.0.0/Linux-x86_64/include/qlibc/extensions/qhttpclient.h create mode 100755 qlibc/0.0.0/Linux-x86_64/include/qlibc/extensions/qlog.h create mode 100755 qlibc/0.0.0/Linux-x86_64/include/qlibc/extensions/qtokenbucket.h create mode 100755 qlibc/0.0.0/Linux-x86_64/include/qlibc/ipc/qsem.h create mode 100755 qlibc/0.0.0/Linux-x86_64/include/qlibc/ipc/qshm.h create mode 100755 qlibc/0.0.0/Linux-x86_64/include/qlibc/qlibc.h create mode 100755 qlibc/0.0.0/Linux-x86_64/include/qlibc/qlibcext.h create mode 100755 qlibc/0.0.0/Linux-x86_64/include/qlibc/utilities/qcount.h create mode 100755 qlibc/0.0.0/Linux-x86_64/include/qlibc/utilities/qencode.h create mode 100755 qlibc/0.0.0/Linux-x86_64/include/qlibc/utilities/qfile.h create mode 100755 qlibc/0.0.0/Linux-x86_64/include/qlibc/utilities/qhash.h create mode 100755 qlibc/0.0.0/Linux-x86_64/include/qlibc/utilities/qio.h create mode 100755 qlibc/0.0.0/Linux-x86_64/include/qlibc/utilities/qsocket.h create mode 100755 qlibc/0.0.0/Linux-x86_64/include/qlibc/utilities/qstring.h create mode 100755 qlibc/0.0.0/Linux-x86_64/include/qlibc/utilities/qsystem.h create mode 100755 qlibc/0.0.0/Linux-x86_64/include/qlibc/utilities/qtime.h create mode 100755 qlibc/0.0.0/Linux-x86_64/libqlibc.so.1 create mode 100755 qlibc/0.0.0/Linux-x86_64/libqlibcext.so.1 create mode 100755 zmq/3.2.5/Linux-x86_64/include/zmq.h create mode 100755 zmq/3.2.5/Linux-x86_64/include/zmq_utils.h create mode 100755 zmq/3.2.5/Linux-x86_64/libzmq.so.3.0.0 create mode 100755 zmq/4.3.5/AIX-00FB437F4C00/include/zmq.h create mode 100755 zmq/4.3.5/AIX-00FB437F4C00/include/zmq_utils.h create mode 100755 zmq/4.3.5/AIX-00FB437F4C00/libzmq.a diff --git a/microhttpd/0.9.55/AIX-00FB437F4C00/include/microhttpd.h b/microhttpd/0.9.55/AIX-00FB437F4C00/include/microhttpd.h new file mode 100755 index 0000000..40a723d --- /dev/null +++ b/microhttpd/0.9.55/AIX-00FB437F4C00/include/microhttpd.h @@ -0,0 +1,3456 @@ +/* + This file is part of libmicrohttpd + Copyright (C) 2006-2017 Christian Grothoff (and other contributing authors) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/** + * @file microhttpd.h + * @brief public interface to libmicrohttpd + * @author Christian Grothoff + * @author Karlson2k (Evgeny Grin) + * @author Chris GauthierDickey + * + * All symbols defined in this header start with MHD. MHD is a small + * HTTP daemon library. As such, it does not have any API for logging + * errors (you can only enable or disable logging to stderr). Also, + * it may not support all of the HTTP features directly, where + * applicable, portions of HTTP may have to be handled by clients of + * the library. + * + * The library is supposed to handle everything that it must handle + * (because the API would not allow clients to do this), such as basic + * connection management; however, detailed interpretations of headers + * -- such as range requests -- and HTTP methods are left to clients. + * The library does understand HEAD and will only send the headers of + * the response and not the body, even if the client supplied a body. + * The library also understands headers that control connection + * management (specifically, "Connection: close" and "Expect: 100 + * continue" are understood and handled automatically). + * + * MHD understands POST data and is able to decode certain formats + * (at the moment only "application/x-www-form-urlencoded" and + * "mulitpart/formdata"). Unsupported encodings and large POST + * submissions may require the application to manually process + * the stream, which is provided to the main application (and thus can be + * processed, just not conveniently by MHD). + * + * The header file defines various constants used by the HTTP protocol. + * This does not mean that MHD actually interprets all of these + * values. The provided constants are exported as a convenience + * for users of the library. MHD does not verify that transmitted + * HTTP headers are part of the standard specification; users of the + * library are free to define their own extensions of the HTTP + * standard and use those with MHD. + * + * All functions are guaranteed to be completely reentrant and + * thread-safe (with the exception of #MHD_set_connection_value, + * which must only be used in a particular context). + * + * + * @defgroup event event-loop control + * MHD API to start and stop the HTTP server and manage the event loop. + * @defgroup response generation of responses + * MHD API used to generate responses. + * @defgroup request handling of requests + * MHD API used to access information about requests. + * @defgroup authentication HTTP authentication + * MHD API related to basic and digest HTTP authentication. + * @defgroup logging logging + * MHD API to mange logging and error handling + * @defgroup specialized misc. specialized functions + * This group includes functions that do not fit into any particular + * category and that are rarely used. + */ + +#ifndef MHD_MICROHTTPD_H +#define MHD_MICROHTTPD_H + +#ifdef __cplusplus +extern "C" +{ +#if 0 /* keep Emacsens' auto-indent happy */ +} +#endif +#endif + +/* While we generally would like users to use a configure-driven + build process which detects which headers are present and + hence works on any platform, we use "standard" includes here + to build out-of-the-box for beginning users on common systems. + + If generic headers don't work on your platform, include headers + which define 'va_list', 'size_t', 'ssize_t', 'intptr_t', + 'uint16_t', 'uint32_t', 'uint64_t', 'off_t', 'struct sockaddr', + 'socklen_t', 'fd_set' and "#define MHD_PLATFORM_H" before + including "microhttpd.h". Then the following "standard" + includes won't be used (which might be a good idea, especially + on platforms where they do not exist). + */ +#ifndef MHD_PLATFORM_H +#include +#include +#include +#if defined(_WIN32) && !defined(__CYGWIN__) +#include +#if defined(_MSC_FULL_VER) && !defined (_SSIZE_T_DEFINED) +#define _SSIZE_T_DEFINED +typedef intptr_t ssize_t; +#endif /* !_SSIZE_T_DEFINED */ +#else +#include +#include +#include +#endif +#endif + +#if defined(__CYGWIN__) && !defined(_SYS_TYPES_FD_SET) +/* Do not define __USE_W32_SOCKETS under Cygwin! */ +#error Cygwin with winsock fd_set is not supported +#endif + +/** + * Current version of the library. + * 0x01093001 = 1.9.30-1. + */ +#define MHD_VERSION 0x00095500 + +/** + * MHD-internal return code for "YES". + */ +#define MHD_YES 1 + +/** + * MHD-internal return code for "NO". + */ +#define MHD_NO 0 + +/** + * MHD digest auth internal code for an invalid nonce. + */ +#define MHD_INVALID_NONCE -1 + +/** + * Constant used to indicate unknown size (use when + * creating a response). + */ +#ifdef UINT64_MAX +#define MHD_SIZE_UNKNOWN UINT64_MAX +#else +#define MHD_SIZE_UNKNOWN ((uint64_t) -1LL) +#endif + +#ifdef SIZE_MAX +#define MHD_CONTENT_READER_END_OF_STREAM SIZE_MAX +#define MHD_CONTENT_READER_END_WITH_ERROR (SIZE_MAX - 1) +#else +#define MHD_CONTENT_READER_END_OF_STREAM ((size_t) -1LL) +#define MHD_CONTENT_READER_END_WITH_ERROR (((size_t) -1LL) - 1) +#endif + +#ifndef _MHD_EXTERN +#if defined(_WIN32) && defined(MHD_W32LIB) +#define _MHD_EXTERN extern +#elif defined (_WIN32) && defined(MHD_W32DLL) +/* Define MHD_W32DLL when using MHD as W32 .DLL to speed up linker a little */ +#define _MHD_EXTERN __declspec(dllimport) +#else +#define _MHD_EXTERN extern +#endif +#endif + +#ifndef MHD_SOCKET_DEFINED +/** + * MHD_socket is type for socket FDs + */ +#if !defined(_WIN32) || defined(_SYS_TYPES_FD_SET) +#define MHD_POSIX_SOCKETS 1 +typedef int MHD_socket; +#define MHD_INVALID_SOCKET (-1) +#else /* !defined(_WIN32) || defined(_SYS_TYPES_FD_SET) */ +#define MHD_WINSOCK_SOCKETS 1 +#include +typedef SOCKET MHD_socket; +#define MHD_INVALID_SOCKET (INVALID_SOCKET) +#endif /* !defined(_WIN32) || defined(_SYS_TYPES_FD_SET) */ +#define MHD_SOCKET_DEFINED 1 +#endif /* MHD_SOCKET_DEFINED */ + +/** + * Define MHD_NO_DEPRECATION before including "microhttpd.h" to disable deprecation messages + */ +#ifdef MHD_NO_DEPRECATION +#define _MHD_DEPR_MACRO(msg) +#define _MHD_NO_DEPR_IN_MACRO 1 +#define _MHD_DEPR_IN_MACRO(msg) +#define _MHD_NO_DEPR_FUNC 1 +#define _MHD_DEPR_FUNC(msg) +#endif /* MHD_NO_DEPRECATION */ + +#ifndef _MHD_DEPR_MACRO +#if defined(_MSC_FULL_VER) && _MSC_VER+0 >= 1500 +/* VS 2008 or later */ +/* Stringify macros */ +#define _MHD_INSTRMACRO(a) #a +#define _MHD_STRMACRO(a) _MHD_INSTRMACRO(a) +/* deprecation message */ +#define _MHD_DEPR_MACRO(msg) __pragma(message(__FILE__ "(" _MHD_STRMACRO(__LINE__)"): warning: " msg)) +#define _MHD_DEPR_IN_MACRO(msg) _MHD_DEPR_MACRO(msg) +#elif defined(__clang__) || defined (__GNUC_PATCHLEVEL__) +/* clang or GCC since 3.0 */ +#define _MHD_GCC_PRAG(x) _Pragma (#x) +#if __clang_major__+0 >= 5 || \ + (!defined(__apple_build_version__) && (__clang_major__+0 > 3 || (__clang_major__+0 == 3 && __clang_minor__ >= 3))) || \ + __GNUC__+0 > 4 || (__GNUC__+0 == 4 && __GNUC_MINOR__+0 >= 8) +/* clang >= 3.3 (or XCode's clang >= 5.0) or + GCC >= 4.8 */ +#define _MHD_DEPR_MACRO(msg) _MHD_GCC_PRAG(GCC warning msg) +#define _MHD_DEPR_IN_MACRO(msg) _MHD_DEPR_MACRO(msg) +#else /* older clang or GCC */ +/* clang < 3.3, XCode's clang < 5.0, 3.0 <= GCC < 4.8 */ +#define _MHD_DEPR_MACRO(msg) _MHD_GCC_PRAG(message msg) +#if (__clang_major__+0 > 2 || (__clang_major__+0 == 2 && __clang_minor__ >= 9)) /* FIXME: clang >= 2.9, earlier versions not tested */ +/* clang handles inline pragmas better than GCC */ +#define _MHD_DEPR_IN_MACRO(msg) _MHD_DEPR_MACRO(msg) +#endif /* clang >= 2.9 */ +#endif /* older clang or GCC */ +/* #elif defined(SOMEMACRO) */ /* add compiler-specific macros here if required */ +#endif /* clang || GCC >= 3.0 */ +#endif /* !_MHD_DEPR_MACRO */ + +#ifndef _MHD_DEPR_MACRO +#define _MHD_DEPR_MACRO(msg) +#endif /* !_MHD_DEPR_MACRO */ + +#ifndef _MHD_DEPR_IN_MACRO +#define _MHD_NO_DEPR_IN_MACRO 1 +#define _MHD_DEPR_IN_MACRO(msg) +#endif /* !_MHD_DEPR_IN_MACRO */ + +#ifndef _MHD_DEPR_FUNC +#if defined(_MSC_FULL_VER) && _MSC_VER+0 >= 1400 +/* VS 2005 or later */ +#define _MHD_DEPR_FUNC(msg) __declspec(deprecated(msg)) +#elif defined(_MSC_FULL_VER) && _MSC_VER+0 >= 1310 +/* VS .NET 2003 deprecation do not support custom messages */ +#define _MHD_DEPR_FUNC(msg) __declspec(deprecated) +#elif (__GNUC__+0 >= 5) || (defined (__clang__) && \ + (__clang_major__+0 > 2 || (__clang_major__+0 == 2 && __clang_minor__ >= 9))) /* FIXME: earlier versions not tested */ +/* GCC >= 5.0 or clang >= 2.9 */ +#define _MHD_DEPR_FUNC(msg) __attribute__((deprecated(msg))) +#elif defined (__clang__) || __GNUC__+0 > 3 || (__GNUC__+0 == 3 && __GNUC_MINOR__+0 >= 1) +/* 3.1 <= GCC < 5.0 or clang < 2.9 */ +/* old GCC-style deprecation do not support custom messages */ +#define _MHD_DEPR_FUNC(msg) __attribute__((__deprecated__)) +/* #elif defined(SOMEMACRO) */ /* add compiler-specific macros here if required */ +#endif /* clang < 2.9 || GCC >= 3.1 */ +#endif /* !_MHD_DEPR_FUNC */ + +#ifndef _MHD_DEPR_FUNC +#define _MHD_NO_DEPR_FUNC 1 +#define _MHD_DEPR_FUNC(msg) +#endif /* !_MHD_DEPR_FUNC */ + +/** + * Not all architectures and `printf()`'s support the `long long` type. + * This gives the ability to replace `long long` with just a `long`, + * standard `int` or a `short`. + */ +#ifndef MHD_LONG_LONG +/** + * @deprecated use #MHD_UNSIGNED_LONG_LONG instead! + */ +#define MHD_LONG_LONG long long +#define MHD_UNSIGNED_LONG_LONG unsigned long long +#else /* MHD_LONG_LONG */ +_MHD_DEPR_MACRO("Macro MHD_LONG_LONG is deprecated, use MHD_UNSIGNED_LONG_LONG") +#endif +/** + * Format string for printing a variable of type #MHD_LONG_LONG. + * You should only redefine this if you also define #MHD_LONG_LONG. + */ +#ifndef MHD_LONG_LONG_PRINTF +/** + * @deprecated use #MHD_UNSIGNED_LONG_LONG_PRINTF instead! + */ +#define MHD_LONG_LONG_PRINTF "ll" +#define MHD_UNSIGNED_LONG_LONG_PRINTF "%llu" +#else /* MHD_LONG_LONG_PRINTF */ +_MHD_DEPR_MACRO("Macro MHD_LONG_LONG_PRINTF is deprecated, use MHD_UNSIGNED_LONG_LONG_PRINTF") +#endif + + +/** + * @defgroup httpcode HTTP response codes. + * These are the status codes defined for HTTP responses. + * @{ + */ +/* See http://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml */ + +#define MHD_HTTP_CONTINUE 100 +#define MHD_HTTP_SWITCHING_PROTOCOLS 101 +#define MHD_HTTP_PROCESSING 102 + +#define MHD_HTTP_OK 200 +#define MHD_HTTP_CREATED 201 +#define MHD_HTTP_ACCEPTED 202 +#define MHD_HTTP_NON_AUTHORITATIVE_INFORMATION 203 +#define MHD_HTTP_NO_CONTENT 204 +#define MHD_HTTP_RESET_CONTENT 205 +#define MHD_HTTP_PARTIAL_CONTENT 206 +#define MHD_HTTP_MULTI_STATUS 207 +#define MHD_HTTP_ALREADY_REPORTED 208 + +#define MHD_HTTP_IM_USED 226 + +#define MHD_HTTP_MULTIPLE_CHOICES 300 +#define MHD_HTTP_MOVED_PERMANENTLY 301 +#define MHD_HTTP_FOUND 302 +#define MHD_HTTP_SEE_OTHER 303 +#define MHD_HTTP_NOT_MODIFIED 304 +#define MHD_HTTP_USE_PROXY 305 +#define MHD_HTTP_SWITCH_PROXY 306 +#define MHD_HTTP_TEMPORARY_REDIRECT 307 +#define MHD_HTTP_PERMANENT_REDIRECT 308 + +#define MHD_HTTP_BAD_REQUEST 400 +#define MHD_HTTP_UNAUTHORIZED 401 +#define MHD_HTTP_PAYMENT_REQUIRED 402 +#define MHD_HTTP_FORBIDDEN 403 +#define MHD_HTTP_NOT_FOUND 404 +#define MHD_HTTP_METHOD_NOT_ALLOWED 405 +#define MHD_HTTP_NOT_ACCEPTABLE 406 +/** @deprecated */ +#define MHD_HTTP_METHOD_NOT_ACCEPTABLE \ + _MHD_DEPR_IN_MACRO("Value MHD_HTTP_METHOD_NOT_ACCEPTABLE is deprecated, use MHD_HTTP_NOT_ACCEPTABLE") 406 +#define MHD_HTTP_PROXY_AUTHENTICATION_REQUIRED 407 +#define MHD_HTTP_REQUEST_TIMEOUT 408 +#define MHD_HTTP_CONFLICT 409 +#define MHD_HTTP_GONE 410 +#define MHD_HTTP_LENGTH_REQUIRED 411 +#define MHD_HTTP_PRECONDITION_FAILED 412 +#define MHD_HTTP_PAYLOAD_TOO_LARGE 413 +/** @deprecated */ +#define MHD_HTTP_REQUEST_ENTITY_TOO_LARGE \ + _MHD_DEPR_IN_MACRO("Value MHD_HTTP_REQUEST_ENTITY_TOO_LARGE is deprecated, use MHD_HTTP_PAYLOAD_TOO_LARGE") 413 +#define MHD_HTTP_URI_TOO_LONG 414 +/** @deprecated */ +#define MHD_HTTP_REQUEST_URI_TOO_LONG \ + _MHD_DEPR_IN_MACRO("Value MHD_HTTP_REQUEST_URI_TOO_LONG is deprecated, use MHD_HTTP_URI_TOO_LONG") 414 +#define MHD_HTTP_UNSUPPORTED_MEDIA_TYPE 415 +#define MHD_HTTP_RANGE_NOT_SATISFIABLE 416 +/** @deprecated */ +#define MHD_HTTP_REQUESTED_RANGE_NOT_SATISFIABLE \ + _MHD_DEPR_IN_MACRO("Value MHD_HTTP_REQUESTED_RANGE_NOT_SATISFIABLE is deprecated, use MHD_HTTP_RANGE_NOT_SATISFIABLE") 416 +#define MHD_HTTP_EXPECTATION_FAILED 417 + +#define MHD_HTTP_MISDIRECTED_REQUEST 421 +#define MHD_HTTP_UNPROCESSABLE_ENTITY 422 +#define MHD_HTTP_LOCKED 423 +#define MHD_HTTP_FAILED_DEPENDENCY 424 +#define MHD_HTTP_UNORDERED_COLLECTION 425 +#define MHD_HTTP_UPGRADE_REQUIRED 426 + +#define MHD_HTTP_PRECONDITION_REQUIRED 428 +#define MHD_HTTP_TOO_MANY_REQUESTS 429 +#define MHD_HTTP_REQUEST_HEADER_FIELDS_TOO_LARGE 431 + +#define MHD_HTTP_NO_RESPONSE 444 + +#define MHD_HTTP_RETRY_WITH 449 +#define MHD_HTTP_BLOCKED_BY_WINDOWS_PARENTAL_CONTROLS 450 +#define MHD_HTTP_UNAVAILABLE_FOR_LEGAL_REASONS 451 + +#define MHD_HTTP_INTERNAL_SERVER_ERROR 500 +#define MHD_HTTP_NOT_IMPLEMENTED 501 +#define MHD_HTTP_BAD_GATEWAY 502 +#define MHD_HTTP_SERVICE_UNAVAILABLE 503 +#define MHD_HTTP_GATEWAY_TIMEOUT 504 +#define MHD_HTTP_HTTP_VERSION_NOT_SUPPORTED 505 +#define MHD_HTTP_VARIANT_ALSO_NEGOTIATES 506 +#define MHD_HTTP_INSUFFICIENT_STORAGE 507 +#define MHD_HTTP_LOOP_DETECTED 508 +#define MHD_HTTP_BANDWIDTH_LIMIT_EXCEEDED 509 +#define MHD_HTTP_NOT_EXTENDED 510 +#define MHD_HTTP_NETWORK_AUTHENTICATION_REQUIRED 511 + +/** @} */ /* end of group httpcode */ + +/** + * Returns the string reason phrase for a response code. + * + * If we don't have a string for a status code, we give the first + * message in that status code class. + */ +_MHD_EXTERN const char * +MHD_get_reason_phrase_for (unsigned int code); + + +/** + * Flag to be or-ed with MHD_HTTP status code for + * SHOUTcast. This will cause the response to begin + * with the SHOUTcast "ICY" line instad of "HTTP". + * @ingroup specialized + */ +#define MHD_ICY_FLAG ((uint32_t)(((uint32_t)1) << 31)) + +/** + * @defgroup headers HTTP headers + * These are the standard headers found in HTTP requests and responses. + * See: http://www.iana.org/assignments/message-headers/message-headers.xml + * Registry Version 2017-01-27 + * @{ + */ + +/* Main HTTP headers. */ +/* Standard. RFC7231, Section 5.3.2 */ +#define MHD_HTTP_HEADER_ACCEPT "Accept" +/* Standard. RFC7231, Section 5.3.3 */ +#define MHD_HTTP_HEADER_ACCEPT_CHARSET "Accept-Charset" +/* Standard. RFC7231, Section 5.3.4; RFC7694, Section 3 */ +#define MHD_HTTP_HEADER_ACCEPT_ENCODING "Accept-Encoding" +/* Standard. RFC7231, Section 5.3.5 */ +#define MHD_HTTP_HEADER_ACCEPT_LANGUAGE "Accept-Language" +/* Standard. RFC7233, Section 2.3 */ +#define MHD_HTTP_HEADER_ACCEPT_RANGES "Accept-Ranges" +/* Standard. RFC7234, Section 5.1 */ +#define MHD_HTTP_HEADER_AGE "Age" +/* Standard. RFC7231, Section 7.4.1 */ +#define MHD_HTTP_HEADER_ALLOW "Allow" +/* Standard. RFC7235, Section 4.2 */ +#define MHD_HTTP_HEADER_AUTHORIZATION "Authorization" +/* Standard. RFC7234, Section 5.2 */ +#define MHD_HTTP_HEADER_CACHE_CONTROL "Cache-Control" +/* Reserved. RFC7230, Section 8.1 */ +#define MHD_HTTP_HEADER_CLOSE "Close" +/* Standard. RFC7230, Section 6.1 */ +#define MHD_HTTP_HEADER_CONNECTION "Connection" +/* Standard. RFC7231, Section 3.1.2.2 */ +#define MHD_HTTP_HEADER_CONTENT_ENCODING "Content-Encoding" +/* Standard. RFC7231, Section 3.1.3.2 */ +#define MHD_HTTP_HEADER_CONTENT_LANGUAGE "Content-Language" +/* Standard. RFC7230, Section 3.3.2 */ +#define MHD_HTTP_HEADER_CONTENT_LENGTH "Content-Length" +/* Standard. RFC7231, Section 3.1.4.2 */ +#define MHD_HTTP_HEADER_CONTENT_LOCATION "Content-Location" +/* Standard. RFC7233, Section 4.2 */ +#define MHD_HTTP_HEADER_CONTENT_RANGE "Content-Range" +/* Standard. RFC7231, Section 3.1.1.5 */ +#define MHD_HTTP_HEADER_CONTENT_TYPE "Content-Type" +/* Standard. RFC7231, Section 7.1.1.2 */ +#define MHD_HTTP_HEADER_DATE "Date" +/* Standard. RFC7232, Section 2.3 */ +#define MHD_HTTP_HEADER_ETAG "ETag" +/* Standard. RFC7231, Section 5.1.1 */ +#define MHD_HTTP_HEADER_EXPECT "Expect" +/* Standard. RFC7234, Section 5.3 */ +#define MHD_HTTP_HEADER_EXPIRES "Expires" +/* Standard. RFC7231, Section 5.5.1 */ +#define MHD_HTTP_HEADER_FROM "From" +/* Standard. RFC7230, Section 5.4 */ +#define MHD_HTTP_HEADER_HOST "Host" +/* Standard. RFC7232, Section 3.1 */ +#define MHD_HTTP_HEADER_IF_MATCH "If-Match" +/* Standard. RFC7232, Section 3.3 */ +#define MHD_HTTP_HEADER_IF_MODIFIED_SINCE "If-Modified-Since" +/* Standard. RFC7232, Section 3.2 */ +#define MHD_HTTP_HEADER_IF_NONE_MATCH "If-None-Match" +/* Standard. RFC7233, Section 3.2 */ +#define MHD_HTTP_HEADER_IF_RANGE "If-Range" +/* Standard. RFC7232, Section 3.4 */ +#define MHD_HTTP_HEADER_IF_UNMODIFIED_SINCE "If-Unmodified-Since" +/* Standard. RFC7232, Section 2.2 */ +#define MHD_HTTP_HEADER_LAST_MODIFIED "Last-Modified" +/* Standard. RFC7231, Section 7.1.2 */ +#define MHD_HTTP_HEADER_LOCATION "Location" +/* Standard. RFC7231, Section 5.1.2 */ +#define MHD_HTTP_HEADER_MAX_FORWARDS "Max-Forwards" +/* Standard. RFC7231, Appendix A.1 */ +#define MHD_HTTP_HEADER_MIME_VERSION "MIME-Version" +/* Standard. RFC7234, Section 5.4 */ +#define MHD_HTTP_HEADER_PRAGMA "Pragma" +/* Standard. RFC7235, Section 4.3 */ +#define MHD_HTTP_HEADER_PROXY_AUTHENTICATE "Proxy-Authenticate" +/* Standard. RFC7235, Section 4.4 */ +#define MHD_HTTP_HEADER_PROXY_AUTHORIZATION "Proxy-Authorization" +/* Standard. RFC7233, Section 3.1 */ +#define MHD_HTTP_HEADER_RANGE "Range" +/* Standard. RFC7231, Section 5.5.2 */ +#define MHD_HTTP_HEADER_REFERER "Referer" +/* Standard. RFC7231, Section 7.1.3 */ +#define MHD_HTTP_HEADER_RETRY_AFTER "Retry-After" +/* Standard. RFC7231, Section 7.4.2 */ +#define MHD_HTTP_HEADER_SERVER "Server" +/* Standard. RFC7230, Section 4.3 */ +#define MHD_HTTP_HEADER_TE "TE" +/* Standard. RFC7230, Section 4.4 */ +#define MHD_HTTP_HEADER_TRAILER "Trailer" +/* Standard. RFC7230, Section 3.3.1 */ +#define MHD_HTTP_HEADER_TRANSFER_ENCODING "Transfer-Encoding" +/* Standard. RFC7230, Section 6.7 */ +#define MHD_HTTP_HEADER_UPGRADE "Upgrade" +/* Standard. RFC7231, Section 5.5.3 */ +#define MHD_HTTP_HEADER_USER_AGENT "User-Agent" +/* Standard. RFC7231, Section 7.1.4 */ +#define MHD_HTTP_HEADER_VARY "Vary" +/* Standard. RFC7230, Section 5.7.1 */ +#define MHD_HTTP_HEADER_VIA "Via" +/* Standard. RFC7235, Section 4.1 */ +#define MHD_HTTP_HEADER_WWW_AUTHENTICATE "WWW-Authenticate" +/* Standard. RFC7234, Section 5.5 */ +#define MHD_HTTP_HEADER_WARNING "Warning" + +/* Additional HTTP headers. */ +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_A_IM "A-IM" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_ACCEPT_ADDITIONS "Accept-Additions" +/* Informational. RFC7089 */ +#define MHD_HTTP_HEADER_ACCEPT_DATETIME "Accept-Datetime" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_ACCEPT_FEATURES "Accept-Features" +/* No category. RFC5789 */ +#define MHD_HTTP_HEADER_ACCEPT_PATCH "Accept-Patch" +/* Standard. RFC7639, Section 2 */ +#define MHD_HTTP_HEADER_ALPN "ALPN" +/* Standard. RFC7838 */ +#define MHD_HTTP_HEADER_ALT_SVC "Alt-Svc" +/* Standard. RFC7838 */ +#define MHD_HTTP_HEADER_ALT_USED "Alt-Used" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_ALTERNATES "Alternates" +/* No category. RFC4437 */ +#define MHD_HTTP_HEADER_APPLY_TO_REDIRECT_REF "Apply-To-Redirect-Ref" +/* Experimental. RFC8053, Section 4 */ +#define MHD_HTTP_HEADER_AUTHENTICATION_CONTROL "Authentication-Control" +/* Standard. RFC7615, Section 3 */ +#define MHD_HTTP_HEADER_AUTHENTICATION_INFO "Authentication-Info" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_C_EXT "C-Ext" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_C_MAN "C-Man" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_C_OPT "C-Opt" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_C_PEP "C-PEP" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_C_PEP_INFO "C-PEP-Info" +/* Standard. RFC7809, Section 7.1 */ +#define MHD_HTTP_HEADER_CALDAV_TIMEZONES "CalDAV-Timezones" +/* Obsoleted. RFC2068; RFC2616 */ +#define MHD_HTTP_HEADER_CONTENT_BASE "Content-Base" +/* Standard. RFC6266 */ +#define MHD_HTTP_HEADER_CONTENT_DISPOSITION "Content-Disposition" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_CONTENT_ID "Content-ID" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_CONTENT_MD5 "Content-MD5" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_CONTENT_SCRIPT_TYPE "Content-Script-Type" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_CONTENT_STYLE_TYPE "Content-Style-Type" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_CONTENT_VERSION "Content-Version" +/* Standard. RFC6265 */ +#define MHD_HTTP_HEADER_COOKIE "Cookie" +/* Obsoleted. RFC2965; RFC6265 */ +#define MHD_HTTP_HEADER_COOKIE2 "Cookie2" +/* Standard. RFC5323 */ +#define MHD_HTTP_HEADER_DASL "DASL" +/* Standard. RFC4918 */ +#define MHD_HTTP_HEADER_DAV "DAV" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_DEFAULT_STYLE "Default-Style" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_DELTA_BASE "Delta-Base" +/* Standard. RFC4918 */ +#define MHD_HTTP_HEADER_DEPTH "Depth" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_DERIVED_FROM "Derived-From" +/* Standard. RFC4918 */ +#define MHD_HTTP_HEADER_DESTINATION "Destination" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_DIFFERENTIAL_ID "Differential-ID" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_DIGEST "Digest" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_EXT "Ext" +/* Standard. RFC7239 */ +#define MHD_HTTP_HEADER_FORWARDED "Forwarded" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_GETPROFILE "GetProfile" +/* Experimental. RFC7486, Section 6.1.1 */ +#define MHD_HTTP_HEADER_HOBAREG "Hobareg" +/* Standard. RFC7540, Section 3.2.1 */ +#define MHD_HTTP_HEADER_HTTP2_SETTINGS "HTTP2-Settings" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_IM "IM" +/* Standard. RFC4918 */ +#define MHD_HTTP_HEADER_IF "If" +/* Standard. RFC6638 */ +#define MHD_HTTP_HEADER_IF_SCHEDULE_TAG_MATCH "If-Schedule-Tag-Match" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_KEEP_ALIVE "Keep-Alive" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_LABEL "Label" +/* No category. RFC5988 */ +#define MHD_HTTP_HEADER_LINK "Link" +/* Standard. RFC4918 */ +#define MHD_HTTP_HEADER_LOCK_TOKEN "Lock-Token" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_MAN "Man" +/* Informational. RFC7089 */ +#define MHD_HTTP_HEADER_MEMENTO_DATETIME "Memento-Datetime" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_METER "Meter" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_NEGOTIATE "Negotiate" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_OPT "Opt" +/* Experimental. RFC8053, Section 3 */ +#define MHD_HTTP_HEADER_OPTIONAL_WWW_AUTHENTICATE "Optional-WWW-Authenticate" +/* Standard. RFC4229 */ +#define MHD_HTTP_HEADER_ORDERING_TYPE "Ordering-Type" +/* Standard. RFC6454 */ +#define MHD_HTTP_HEADER_ORIGIN "Origin" +/* Standard. RFC4918 */ +#define MHD_HTTP_HEADER_OVERWRITE "Overwrite" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_P3P "P3P" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_PEP "PEP" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_PICS_LABEL "PICS-Label" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_PEP_INFO "Pep-Info" +/* Standard. RFC4229 */ +#define MHD_HTTP_HEADER_POSITION "Position" +/* Standard. RFC7240 */ +#define MHD_HTTP_HEADER_PREFER "Prefer" +/* Standard. RFC7240 */ +#define MHD_HTTP_HEADER_PREFERENCE_APPLIED "Preference-Applied" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_PROFILEOBJECT "ProfileObject" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_PROTOCOL "Protocol" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_PROTOCOL_INFO "Protocol-Info" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_PROTOCOL_QUERY "Protocol-Query" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_PROTOCOL_REQUEST "Protocol-Request" +/* Standard. RFC7615, Section 4 */ +#define MHD_HTTP_HEADER_PROXY_AUTHENTICATION_INFO "Proxy-Authentication-Info" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_PROXY_FEATURES "Proxy-Features" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_PROXY_INSTRUCTION "Proxy-Instruction" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_PUBLIC "Public" +/* Standard. RFC7469 */ +#define MHD_HTTP_HEADER_PUBLIC_KEY_PINS "Public-Key-Pins" +/* Standard. RFC7469 */ +#define MHD_HTTP_HEADER_PUBLIC_KEY_PINS_REPORT_ONLY "Public-Key-Pins-Report-Only" +/* No category. RFC4437 */ +#define MHD_HTTP_HEADER_REDIRECT_REF "Redirect-Ref" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_SAFE "Safe" +/* Standard. RFC6638 */ +#define MHD_HTTP_HEADER_SCHEDULE_REPLY "Schedule-Reply" +/* Standard. RFC6638 */ +#define MHD_HTTP_HEADER_SCHEDULE_TAG "Schedule-Tag" +/* Standard. RFC6455 */ +#define MHD_HTTP_HEADER_SEC_WEBSOCKET_ACCEPT "Sec-WebSocket-Accept" +/* Standard. RFC6455 */ +#define MHD_HTTP_HEADER_SEC_WEBSOCKET_EXTENSIONS "Sec-WebSocket-Extensions" +/* Standard. RFC6455 */ +#define MHD_HTTP_HEADER_SEC_WEBSOCKET_KEY "Sec-WebSocket-Key" +/* Standard. RFC6455 */ +#define MHD_HTTP_HEADER_SEC_WEBSOCKET_PROTOCOL "Sec-WebSocket-Protocol" +/* Standard. RFC6455 */ +#define MHD_HTTP_HEADER_SEC_WEBSOCKET_VERSION "Sec-WebSocket-Version" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_SECURITY_SCHEME "Security-Scheme" +/* Standard. RFC6265 */ +#define MHD_HTTP_HEADER_SET_COOKIE "Set-Cookie" +/* Obsoleted. RFC2965; RFC6265 */ +#define MHD_HTTP_HEADER_SET_COOKIE2 "Set-Cookie2" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_SETPROFILE "SetProfile" +/* Standard. RFC5023 */ +#define MHD_HTTP_HEADER_SLUG "SLUG" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_SOAPACTION "SoapAction" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_STATUS_URI "Status-URI" +/* Standard. RFC6797 */ +#define MHD_HTTP_HEADER_STRICT_TRANSPORT_SECURITY "Strict-Transport-Security" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_SURROGATE_CAPABILITY "Surrogate-Capability" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_SURROGATE_CONTROL "Surrogate-Control" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_TCN "TCN" +/* Standard. RFC4918 */ +#define MHD_HTTP_HEADER_TIMEOUT "Timeout" +/* Standard. RFC8030, Section 5.4 */ +#define MHD_HTTP_HEADER_TOPIC "Topic" +/* Standard. RFC8030, Section 5.2 */ +#define MHD_HTTP_HEADER_TTL "TTL" +/* Standard. RFC8030, Section 5.3 */ +#define MHD_HTTP_HEADER_URGENCY "Urgency" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_URI "URI" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_VARIANT_VARY "Variant-Vary" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_WANT_DIGEST "Want-Digest" +/* Informational. RFC7034 */ +#define MHD_HTTP_HEADER_X_FRAME_OPTIONS "X-Frame-Options" + +/* Some provisional headers. */ +#define MHD_HTTP_HEADER_ACCESS_CONTROL_ALLOW_ORIGIN "Access-Control-Allow-Origin" +/** @} */ /* end of group headers */ + +/** + * @defgroup versions HTTP versions + * These strings should be used to match against the first line of the + * HTTP header. + * @{ + */ +#define MHD_HTTP_VERSION_1_0 "HTTP/1.0" +#define MHD_HTTP_VERSION_1_1 "HTTP/1.1" + +/** @} */ /* end of group versions */ + +/** + * @defgroup methods HTTP methods + * HTTP methods (as strings). + * See: http://www.iana.org/assignments/http-methods/http-methods.xml + * Registry Version 2015-05-19 + * @{ + */ +/* Main HTTP methods. */ +/* Not safe. Not idempotent. RFC7231, Section 4.3.6. */ +#define MHD_HTTP_METHOD_CONNECT "CONNECT" +/* Not safe. Idempotent. RFC7231, Section 4.3.5. */ +#define MHD_HTTP_METHOD_DELETE "DELETE" +/* Safe. Idempotent. RFC7231, Section 4.3.1. */ +#define MHD_HTTP_METHOD_GET "GET" +/* Safe. Idempotent. RFC7231, Section 4.3.2. */ +#define MHD_HTTP_METHOD_HEAD "HEAD" +/* Safe. Idempotent. RFC7231, Section 4.3.7. */ +#define MHD_HTTP_METHOD_OPTIONS "OPTIONS" +/* Not safe. Not idempotent. RFC7231, Section 4.3.3. */ +#define MHD_HTTP_METHOD_POST "POST" +/* Not safe. Idempotent. RFC7231, Section 4.3.4. */ +#define MHD_HTTP_METHOD_PUT "PUT" +/* Safe. Idempotent. RFC7231, Section 4.3.8. */ +#define MHD_HTTP_METHOD_TRACE "TRACE" + +/* Additional HTTP methods. */ +/* Not safe. Idempotent. RFC3744, Section 8.1. */ +#define MHD_HTTP_METHOD_ACL "ACL" +/* Not safe. Idempotent. RFC3253, Section 12.6. */ +#define MHD_HTTP_METHOD_BASELINE_CONTROL "BASELINE-CONTROL" +/* Not safe. Idempotent. RFC5842, Section 4. */ +#define MHD_HTTP_METHOD_BIND "BIND" +/* Not safe. Idempotent. RFC3253, Section 4.4, Section 9.4. */ +#define MHD_HTTP_METHOD_CHECKIN "CHECKIN" +/* Not safe. Idempotent. RFC3253, Section 4.3, Section 8.8. */ +#define MHD_HTTP_METHOD_CHECKOUT "CHECKOUT" +/* Not safe. Idempotent. RFC4918, Section 9.8. */ +#define MHD_HTTP_METHOD_COPY "COPY" +/* Not safe. Idempotent. RFC3253, Section 8.2. */ +#define MHD_HTTP_METHOD_LABEL "LABEL" +/* Not safe. Idempotent. RFC2068, Section 19.6.1.2. */ +#define MHD_HTTP_METHOD_LINK "LINK" +/* Not safe. Not idempotent. RFC4918, Section 9.10. */ +#define MHD_HTTP_METHOD_LOCK "LOCK" +/* Not safe. Idempotent. RFC3253, Section 11.2. */ +#define MHD_HTTP_METHOD_MERGE "MERGE" +/* Not safe. Idempotent. RFC3253, Section 13.5. */ +#define MHD_HTTP_METHOD_MKACTIVITY "MKACTIVITY" +/* Not safe. Idempotent. RFC4791, Section 5.3.1. */ +#define MHD_HTTP_METHOD_MKCALENDAR "MKCALENDAR" +/* Not safe. Idempotent. RFC4918, Section 9.3. */ +#define MHD_HTTP_METHOD_MKCOL "MKCOL" +/* Not safe. Idempotent. RFC4437, Section 6. */ +#define MHD_HTTP_METHOD_MKREDIRECTREF "MKREDIRECTREF" +/* Not safe. Idempotent. RFC3253, Section 6.3. */ +#define MHD_HTTP_METHOD_MKWORKSPACE "MKWORKSPACE" +/* Not safe. Idempotent. RFC4918, Section 9.9. */ +#define MHD_HTTP_METHOD_MOVE "MOVE" +/* Not safe. Idempotent. RFC3648, Section 7. */ +#define MHD_HTTP_METHOD_ORDERPATCH "ORDERPATCH" +/* Not safe. Not idempotent. RFC5789, Section 2. */ +#define MHD_HTTP_METHOD_PATCH "PATCH" +/* Safe. Idempotent. RFC7540, Section 3.5. */ +#define MHD_HTTP_METHOD_PRI "PRI" +/* Safe. Idempotent. RFC4918, Section 9.1. */ +#define MHD_HTTP_METHOD_PROPFIND "PROPFIND" +/* Not safe. Idempotent. RFC4918, Section 9.2. */ +#define MHD_HTTP_METHOD_PROPPATCH "PROPPATCH" +/* Not safe. Idempotent. RFC5842, Section 6. */ +#define MHD_HTTP_METHOD_REBIND "REBIND" +/* Safe. Idempotent. RFC3253, Section 3.6. */ +#define MHD_HTTP_METHOD_REPORT "REPORT" +/* Safe. Idempotent. RFC5323, Section 2. */ +#define MHD_HTTP_METHOD_SEARCH "SEARCH" +/* Not safe. Idempotent. RFC5842, Section 5. */ +#define MHD_HTTP_METHOD_UNBIND "UNBIND" +/* Not safe. Idempotent. RFC3253, Section 4.5. */ +#define MHD_HTTP_METHOD_UNCHECKOUT "UNCHECKOUT" +/* Not safe. Idempotent. RFC2068, Section 19.6.1.3. */ +#define MHD_HTTP_METHOD_UNLINK "UNLINK" +/* Not safe. Idempotent. RFC4918, Section 9.11. */ +#define MHD_HTTP_METHOD_UNLOCK "UNLOCK" +/* Not safe. Idempotent. RFC3253, Section 7.1. */ +#define MHD_HTTP_METHOD_UPDATE "UPDATE" +/* Not safe. Idempotent. RFC4437, Section 7. */ +#define MHD_HTTP_METHOD_UPDATEREDIRECTREF "UPDATEREDIRECTREF" +/* Not safe. Idempotent. RFC3253, Section 3.5. */ +#define MHD_HTTP_METHOD_VERSION_CONTROL "VERSION-CONTROL" + +/** @} */ /* end of group methods */ + +/** + * @defgroup postenc HTTP POST encodings + * See also: http://www.w3.org/TR/html4/interact/forms.html#h-17.13.4 + * @{ + */ +#define MHD_HTTP_POST_ENCODING_FORM_URLENCODED "application/x-www-form-urlencoded" +#define MHD_HTTP_POST_ENCODING_MULTIPART_FORMDATA "multipart/form-data" + +/** @} */ /* end of group postenc */ + + +/** + * @brief Handle for the daemon (listening on a socket for HTTP traffic). + * @ingroup event + */ +struct MHD_Daemon; + +/** + * @brief Handle for a connection / HTTP request. + * + * With HTTP/1.1, multiple requests can be run over the same + * connection. However, MHD will only show one request per TCP + * connection to the client at any given time. + * @ingroup request + */ +struct MHD_Connection; + +/** + * @brief Handle for a response. + * @ingroup response + */ +struct MHD_Response; + +/** + * @brief Handle for POST processing. + * @ingroup response + */ +struct MHD_PostProcessor; + + +/** + * @brief Flags for the `struct MHD_Daemon`. + * + * Note that MHD will run automatically in background thread(s) only + * if #MHD_USE_INTERNAL_POLLING_THREAD is used. Otherwise caller (application) + * must use #MHD_run() or #MHD_run_from_select() to have MHD processed + * network connections and data. + * + * Starting the daemon may also fail if a particular option is not + * implemented or not supported on the target platform (i.e. no + * support for TLS, epoll or IPv6). + */ +enum MHD_FLAG +{ + /** + * No options selected. + */ + MHD_NO_FLAG = 0, + + /** + * Print errors messages to custom error logger or to `stderr` if + * custom error logger is not set. + * @sa ::MHD_OPTION_EXTERNAL_LOGGER + */ + MHD_USE_ERROR_LOG = 1, + + /** + * Run in debug mode. If this flag is used, the library should + * print error messages and warnings to `stderr`. + */ + MHD_USE_DEBUG = 1, + + /** + * Run in HTTPS mode. The modern protocol is called TLS. + */ + MHD_USE_TLS = 2, + + /** @deprecated */ + MHD_USE_SSL = 2, +#if 0 + /* let's do this later once versions that define MHD_USE_TLS a more widely deployed. */ +#define MHD_USE_SSL \ + _MHD_DEPR_IN_MACRO("Value MHD_USE_SSL is deprecated, use MHD_USE_TLS") \ + MHD_USE_TLS +#endif + + /** + * Run using one thread per connection. + * Must be used only with #MHD_USE_INTERNAL_POLLING_THREAD. + */ + MHD_USE_THREAD_PER_CONNECTION = 4, + + /** + * Run using an internal thread (or thread pool) for sockets sending + * and receiving and data processing. Without this flag MHD will not + * run automatically in background thread(s). + * If this flag is set, #MHD_run() and #MHD_run_from_select() couldn't + * be used. + * This flag is set explicitly by #MHD_USE_POLL_INTERNAL_THREAD and + * by #MHD_USE_EPOLL_INTERNAL_THREAD. + */ + MHD_USE_INTERNAL_POLLING_THREAD = 8, + + /** @deprecated */ + MHD_USE_SELECT_INTERNALLY = 8, +#if 0 /* Will be marked for real deprecation later. */ +#define MHD_USE_SELECT_INTERNALLY \ + _MHD_DEPR_IN_MACRO("Value MHD_USE_SELECT_INTERNALLY is deprecated, use MHD_USE_INTERNAL_POLLING_THREAD instead") \ + MHD_USE_INTERNAL_POLLING_THREAD +#endif /* 0 */ + + /** + * Run using the IPv6 protocol (otherwise, MHD will just support + * IPv4). If you want MHD to support IPv4 and IPv6 using a single + * socket, pass #MHD_USE_DUAL_STACK, otherwise, if you only pass + * this option, MHD will try to bind to IPv6-only (resulting in + * no IPv4 support). + */ + MHD_USE_IPv6 = 16, + + /** + * Be pedantic about the protocol (as opposed to as tolerant as + * possible). Specifically, at the moment, this flag causes MHD to + * reject HTTP 1.1 connections without a "Host" header. This is + * required by the standard, but of course in violation of the "be + * as liberal as possible in what you accept" norm. It is + * recommended to turn this ON if you are testing clients against + * MHD, and OFF in production. + */ + MHD_USE_PEDANTIC_CHECKS = 32, +#if 0 /* Will be marked for real deprecation later. */ +#define MHD_USE_PEDANTIC_CHECKS \ + _MHD_DEPR_IN_MACRO("Flag MHD_USE_PEDANTIC_CHECKS is deprecated, use option MHD_OPTION_STRICT_FOR_CLIENT instead") \ + 32 +#endif /* 0 */ + + /** + * Use `poll()` instead of `select()`. This allows sockets with `fd >= + * FD_SETSIZE`. This option is not compatible with using an + * 'external' polling mode (as there is no API to get the file + * descriptors for the external poll() from MHD) and must also not + * be used in combination with #MHD_USE_EPOLL. + * @sa ::MHD_FEATURE_POLL, #MHD_USE_POLL_INTERNAL_THREAD + */ + MHD_USE_POLL = 64, + + /** + * Run using an internal thread (or thread pool) doing `poll()`. + * @sa ::MHD_FEATURE_POLL, #MHD_USE_POLL, #MHD_USE_INTERNAL_POLLING_THREAD + */ + MHD_USE_POLL_INTERNAL_THREAD = MHD_USE_POLL | MHD_USE_INTERNAL_POLLING_THREAD, + + /** @deprecated */ + MHD_USE_POLL_INTERNALLY = MHD_USE_POLL | MHD_USE_INTERNAL_POLLING_THREAD, +#if 0 /* Will be marked for real deprecation later. */ +#define MHD_USE_POLL_INTERNALLY \ + _MHD_DEPR_IN_MACRO("Value MHD_USE_POLL_INTERNALLY is deprecated, use MHD_USE_POLL_INTERNAL_THREAD instead") \ + MHD_USE_POLL_INTERNAL_THREAD +#endif /* 0 */ + + /** + * Suppress (automatically) adding the 'Date:' header to HTTP responses. + * This option should ONLY be used on systems that do not have a clock + * and that DO provide other mechanisms for cache control. See also + * RFC 2616, section 14.18 (exception 3). + */ + MHD_USE_SUPPRESS_DATE_NO_CLOCK = 128, + + /** @deprecated */ + MHD_SUPPRESS_DATE_NO_CLOCK = 128, +#if 0 /* Will be marked for real deprecation later. */ +#define MHD_SUPPRESS_DATE_NO_CLOCK \ + _MHD_DEPR_IN_MACRO("Value MHD_SUPPRESS_DATE_NO_CLOCK is deprecated, use MHD_USE_SUPPRESS_DATE_NO_CLOCK instead") \ + MHD_USE_SUPPRESS_DATE_NO_CLOCK +#endif /* 0 */ + + /** + * Run without a listen socket. This option only makes sense if + * #MHD_add_connection is to be used exclusively to connect HTTP + * clients to the HTTP server. This option is incompatible with + * using a thread pool; if it is used, #MHD_OPTION_THREAD_POOL_SIZE + * is ignored. + */ + MHD_USE_NO_LISTEN_SOCKET = 256, + + /** + * Use `epoll()` instead of `select()` or `poll()` for the event loop. + * This option is only available on some systems; using the option on + * systems without epoll will cause #MHD_start_daemon to fail. Using + * this option is not supported with #MHD_USE_THREAD_PER_CONNECTION. + * @sa ::MHD_FEATURE_EPOLL + */ + MHD_USE_EPOLL = 512, + + /** @deprecated */ + MHD_USE_EPOLL_LINUX_ONLY = 512, +#if 0 /* Will be marked for real deprecation later. */ +#define MHD_USE_EPOLL_LINUX_ONLY \ + _MHD_DEPR_IN_MACRO("Value MHD_USE_EPOLL_LINUX_ONLY is deprecated, use MHD_USE_EPOLL") \ + MHD_USE_EPOLL +#endif /* 0 */ + + /** + * Run using an internal thread (or thread pool) doing `epoll()`. + * This option is only available on certain platforms; using the option on + * platform without `epoll` support will cause #MHD_start_daemon to fail. + * @sa ::MHD_FEATURE_EPOLL, #MHD_USE_EPOLL, #MHD_USE_INTERNAL_POLLING_THREAD + */ + MHD_USE_EPOLL_INTERNAL_THREAD = MHD_USE_EPOLL | MHD_USE_INTERNAL_POLLING_THREAD, + + /** @deprecated */ + MHD_USE_EPOLL_INTERNALLY = MHD_USE_EPOLL | MHD_USE_INTERNAL_POLLING_THREAD, + /** @deprecated */ + MHD_USE_EPOLL_INTERNALLY_LINUX_ONLY = MHD_USE_EPOLL | MHD_USE_INTERNAL_POLLING_THREAD, +#if 0 /* Will be marked for real deprecation later. */ +#define MHD_USE_EPOLL_INTERNALLY \ + _MHD_DEPR_IN_MACRO("Value MHD_USE_EPOLL_INTERNALLY is deprecated, use MHD_USE_EPOLL_INTERNAL_THREAD") \ + MHD_USE_EPOLL_INTERNAL_THREAD + /** @deprecated */ +#define MHD_USE_EPOLL_INTERNALLY_LINUX_ONLY \ + _MHD_DEPR_IN_MACRO("Value MHD_USE_EPOLL_INTERNALLY_LINUX_ONLY is deprecated, use MHD_USE_EPOLL_INTERNAL_THREAD") \ + MHD_USE_EPOLL_INTERNAL_THREAD +#endif /* 0 */ + + /** + * Use inter-thread communication channel. + * #MHD_USE_ITC can be used with #MHD_USE_INTERNAL_POLLING_THREAD + * and is ignored with any "external" mode. + * It's required for use of #MHD_quiesce_daemon + * or #MHD_add_connection. + * This option is enforced by #MHD_ALLOW_SUSPEND_RESUME or + * #MHD_USE_NO_LISTEN_SOCKET. + * #MHD_USE_ITC is always used automatically on platforms + * where select()/poll()/other ignore shutdown of listen + * socket. + */ + MHD_USE_ITC = 1024, + + /** @deprecated */ + MHD_USE_PIPE_FOR_SHUTDOWN = 1024, +#if 0 /* Will be marked for real deprecation later. */ +#define MHD_USE_PIPE_FOR_SHUTDOWN \ + _MHD_DEPR_IN_MACRO("Value MHD_USE_PIPE_FOR_SHUTDOWN is deprecated, use MHD_USE_ITC") \ + MHD_USE_ITC +#endif /* 0 */ + + /** + * Use a single socket for IPv4 and IPv6. + */ + MHD_USE_DUAL_STACK = MHD_USE_IPv6 | 2048, + + /** + * Enable `turbo`. Disables certain calls to `shutdown()`, + * enables aggressive non-blocking optimistic reads and + * other potentially unsafe optimizations. + * Most effects only happen with #MHD_USE_EPOLL. + */ + MHD_USE_TURBO = 4096, + + /** @deprecated */ + MHD_USE_EPOLL_TURBO = 4096, +#if 0 /* Will be marked for real deprecation later. */ +#define MHD_USE_EPOLL_TURBO \ + _MHD_DEPR_IN_MACRO("Value MHD_USE_EPOLL_TURBO is deprecated, use MHD_USE_TURBO") \ + MHD_USE_TURBO +#endif /* 0 */ + + /** + * Enable suspend/resume functions, which also implies setting up + * ITC to signal resume. + */ + MHD_ALLOW_SUSPEND_RESUME = 8192 | MHD_USE_ITC, + + /** @deprecated */ + MHD_USE_SUSPEND_RESUME = 8192 | MHD_USE_ITC, +#if 0 /* Will be marked for real deprecation later. */ +#define MHD_USE_SUSPEND_RESUME \ + _MHD_DEPR_IN_MACRO("Value MHD_USE_SUSPEND_RESUME is deprecated, use MHD_ALLOW_SUSPEND_RESUME instead") \ + MHD_ALLOW_SUSPEND_RESUME +#endif /* 0 */ + + /** + * Enable TCP_FASTOPEN option. This option is only available on Linux with a + * kernel >= 3.6. On other systems, using this option cases #MHD_start_daemon + * to fail. + */ + MHD_USE_TCP_FASTOPEN = 16384, + + /** + * You need to set this option if you want to use HTTP "Upgrade". + * "Upgrade" may require usage of additional internal resources, + * which we do not want to use unless necessary. + */ + MHD_ALLOW_UPGRADE = 32768, + + /** + * Automatically use best available polling function. + * Choice of polling function is also depend on other daemon options. + * If #MHD_USE_INTERNAL_POLLING_THREAD is specified then epoll, poll() or + * select() will be used (listed in decreasing preference order, first + * function available on system will be used). + * If #MHD_USE_THREAD_PER_CONNECTION is specified then poll() or select() + * will be used. + * If those flags are not specified then epoll or select() will be + * used (as the only suitable for MHD_get_fdset()) + */ + MHD_USE_AUTO = 65536, + + /** + * Run using an internal thread (or thread pool) with best available on + * system polling function. + * This is combination of #MHD_USE_AUTO and #MHD_USE_INTERNAL_POLLING_THREAD + * flags. + */ + MHD_USE_AUTO_INTERNAL_THREAD = MHD_USE_AUTO | MHD_USE_INTERNAL_POLLING_THREAD + +}; + + +/** + * Type of a callback function used for logging by MHD. + * + * @param cls closure + * @param fm format string (`printf()`-style) + * @param ap arguments to @a fm + * @ingroup logging + */ +typedef void +(*MHD_LogCallback)(void *cls, + const char *fm, + va_list ap); + + +/** + * @brief MHD options. + * + * Passed in the varargs portion of #MHD_start_daemon. + */ +enum MHD_OPTION +{ + + /** + * No more options / last option. This is used + * to terminate the VARARGs list. + */ + MHD_OPTION_END = 0, + + /** + * Maximum memory size per connection (followed by a `size_t`). + * Default is 32 kb (#MHD_POOL_SIZE_DEFAULT). + * Values above 128k are unlikely to result in much benefit, as half + * of the memory will be typically used for IO, and TCP buffers are + * unlikely to support window sizes above 64k on most systems. + */ + MHD_OPTION_CONNECTION_MEMORY_LIMIT = 1, + + /** + * Maximum number of concurrent connections to + * accept (followed by an `unsigned int`). + */ + MHD_OPTION_CONNECTION_LIMIT = 2, + + /** + * After how many seconds of inactivity should a + * connection automatically be timed out? (followed + * by an `unsigned int`; use zero for no timeout). + */ + MHD_OPTION_CONNECTION_TIMEOUT = 3, + + /** + * Register a function that should be called whenever a request has + * been completed (this can be used for application-specific clean + * up). Requests that have never been presented to the application + * (via #MHD_AccessHandlerCallback) will not result in + * notifications. + * + * This option should be followed by TWO pointers. First a pointer + * to a function of type #MHD_RequestCompletedCallback and second a + * pointer to a closure to pass to the request completed callback. + * The second pointer maybe NULL. + */ + MHD_OPTION_NOTIFY_COMPLETED = 4, + + /** + * Limit on the number of (concurrent) connections made to the + * server from the same IP address. Can be used to prevent one + * IP from taking over all of the allowed connections. If the + * same IP tries to establish more than the specified number of + * connections, they will be immediately rejected. The option + * should be followed by an `unsigned int`. The default is + * zero, which means no limit on the number of connections + * from the same IP address. + */ + MHD_OPTION_PER_IP_CONNECTION_LIMIT = 5, + + /** + * Bind daemon to the supplied `struct sockaddr`. This option should + * be followed by a `struct sockaddr *`. If #MHD_USE_IPv6 is + * specified, the `struct sockaddr*` should point to a `struct + * sockaddr_in6`, otherwise to a `struct sockaddr_in`. + */ + MHD_OPTION_SOCK_ADDR = 6, + + /** + * Specify a function that should be called before parsing the URI from + * the client. The specified callback function can be used for processing + * the URI (including the options) before it is parsed. The URI after + * parsing will no longer contain the options, which maybe inconvenient for + * logging. This option should be followed by two arguments, the first + * one must be of the form + * + * void * my_logger(void *cls, const char *uri, struct MHD_Connection *con) + * + * where the return value will be passed as + * (`* con_cls`) in calls to the #MHD_AccessHandlerCallback + * when this request is processed later; returning a + * value of NULL has no special significance (however, + * note that if you return non-NULL, you can no longer + * rely on the first call to the access handler having + * `NULL == *con_cls` on entry;) + * "cls" will be set to the second argument following + * #MHD_OPTION_URI_LOG_CALLBACK. Finally, uri will + * be the 0-terminated URI of the request. + * + * Note that during the time of this call, most of the connection's + * state is not initialized (as we have not yet parsed the headers). + * However, information about the connecting client (IP, socket) + * is available. + * + * The specified function is called only once per request, therefore some + * programmers may use it to instantiate their own request objects, freeing + * them in the notifier #MHD_OPTION_NOTIFY_COMPLETED. + */ + MHD_OPTION_URI_LOG_CALLBACK = 7, + + /** + * Memory pointer for the private key (key.pem) to be used by the + * HTTPS daemon. This option should be followed by a + * `const char *` argument. + * This should be used in conjunction with #MHD_OPTION_HTTPS_MEM_CERT. + */ + MHD_OPTION_HTTPS_MEM_KEY = 8, + + /** + * Memory pointer for the certificate (cert.pem) to be used by the + * HTTPS daemon. This option should be followed by a + * `const char *` argument. + * This should be used in conjunction with #MHD_OPTION_HTTPS_MEM_KEY. + */ + MHD_OPTION_HTTPS_MEM_CERT = 9, + + /** + * Daemon credentials type. + * Followed by an argument of type + * `gnutls_credentials_type_t`. + */ + MHD_OPTION_HTTPS_CRED_TYPE = 10, + + /** + * Memory pointer to a `const char *` specifying the + * cipher algorithm (default: "NORMAL"). + */ + MHD_OPTION_HTTPS_PRIORITIES = 11, + + /** + * Pass a listen socket for MHD to use (systemd-style). If this + * option is used, MHD will not open its own listen socket(s). The + * argument passed must be of type `MHD_socket` and refer to an + * existing socket that has been bound to a port and is listening. + */ + MHD_OPTION_LISTEN_SOCKET = 12, + + /** + * Use the given function for logging error messages. This option + * must be followed by two arguments; the first must be a pointer to + * a function of type #MHD_LogCallback and the second a pointer + * `void *` which will be passed as the first argument to the log + * callback. + * + * Note that MHD will not generate any log messages + * if it was compiled without the "--enable-messages" + * flag being set. + */ + MHD_OPTION_EXTERNAL_LOGGER = 13, + + /** + * Number (`unsigned int`) of threads in thread pool. Enable + * thread pooling by setting this value to to something + * greater than 1. Currently, thread model must be + * #MHD_USE_INTERNAL_POLLING_THREAD if thread pooling is enabled + * (#MHD_start_daemon returns NULL for an unsupported thread + * model). + */ + MHD_OPTION_THREAD_POOL_SIZE = 14, + + /** + * Additional options given in an array of `struct MHD_OptionItem`. + * The array must be terminated with an entry `{MHD_OPTION_END, 0, NULL}`. + * An example for code using #MHD_OPTION_ARRAY is: + * + * struct MHD_OptionItem ops[] = { + * { MHD_OPTION_CONNECTION_LIMIT, 100, NULL }, + * { MHD_OPTION_CONNECTION_TIMEOUT, 10, NULL }, + * { MHD_OPTION_END, 0, NULL } + * }; + * d = MHD_start_daemon (0, 8080, NULL, NULL, dh, NULL, + * MHD_OPTION_ARRAY, ops, + * MHD_OPTION_END); + * + * For options that expect a single pointer argument, the + * second member of the `struct MHD_OptionItem` is ignored. + * For options that expect two pointer arguments, the first + * argument must be cast to `intptr_t`. + */ + MHD_OPTION_ARRAY = 15, + + /** + * Specify a function that should be called for unescaping escape + * sequences in URIs and URI arguments. Note that this function + * will NOT be used by the `struct MHD_PostProcessor`. If this + * option is not specified, the default method will be used which + * decodes escape sequences of the form "%HH". This option should + * be followed by two arguments, the first one must be of the form + * + * size_t my_unescaper(void *cls, + * struct MHD_Connection *c, + * char *s) + * + * where the return value must be "strlen(s)" and "s" should be + * updated. Note that the unescape function must not lengthen "s" + * (the result must be shorter than the input and still be + * 0-terminated). "cls" will be set to the second argument + * following #MHD_OPTION_UNESCAPE_CALLBACK. + */ + MHD_OPTION_UNESCAPE_CALLBACK = 16, + + /** + * Memory pointer for the random values to be used by the Digest + * Auth module. This option should be followed by two arguments. + * First an integer of type `size_t` which specifies the size + * of the buffer pointed to by the second argument in bytes. + * Note that the application must ensure that the buffer of the + * second argument remains allocated and unmodified while the + * deamon is running. + */ + MHD_OPTION_DIGEST_AUTH_RANDOM = 17, + + /** + * Size of the internal array holding the map of the nonce and + * the nonce counter. This option should be followed by an `unsigend int` + * argument. + */ + MHD_OPTION_NONCE_NC_SIZE = 18, + + /** + * Desired size of the stack for threads created by MHD. Followed + * by an argument of type `size_t`. Use 0 for system default. + */ + MHD_OPTION_THREAD_STACK_SIZE = 19, + + /** + * Memory pointer for the certificate (ca.pem) to be used by the + * HTTPS daemon for client authentification. + * This option should be followed by a `const char *` argument. + */ + MHD_OPTION_HTTPS_MEM_TRUST = 20, + + /** + * Increment to use for growing the read buffer (followed by a + * `size_t`). Must fit within #MHD_OPTION_CONNECTION_MEMORY_LIMIT. + */ + MHD_OPTION_CONNECTION_MEMORY_INCREMENT = 21, + + /** + * Use a callback to determine which X.509 certificate should be + * used for a given HTTPS connection. This option should be + * followed by a argument of type `gnutls_certificate_retrieve_function2 *`. + * This option provides an + * alternative to #MHD_OPTION_HTTPS_MEM_KEY, + * #MHD_OPTION_HTTPS_MEM_CERT. You must use this version if + * multiple domains are to be hosted at the same IP address using + * TLS's Server Name Indication (SNI) extension. In this case, + * the callback is expected to select the correct certificate + * based on the SNI information provided. The callback is expected + * to access the SNI data using `gnutls_server_name_get()`. + * Using this option requires GnuTLS 3.0 or higher. + */ + MHD_OPTION_HTTPS_CERT_CALLBACK = 22, + + /** + * When using #MHD_USE_TCP_FASTOPEN, this option changes the default TCP + * fastopen queue length of 50. Note that having a larger queue size can + * cause resource exhaustion attack as the TCP stack has to now allocate + * resources for the SYN packet along with its DATA. This option should be + * followed by an `unsigned int` argument. + */ + MHD_OPTION_TCP_FASTOPEN_QUEUE_SIZE = 23, + + /** + * Memory pointer for the Diffie-Hellman parameters (dh.pem) to be used by the + * HTTPS daemon for key exchange. + * This option must be followed by a `const char *` argument. + */ + MHD_OPTION_HTTPS_MEM_DHPARAMS = 24, + + /** + * If present and set to true, allow reusing address:port socket + * (by using SO_REUSEPORT on most platform, or platform-specific ways). + * If present and set to false, disallow reusing address:port socket + * (does nothing on most plaform, but uses SO_EXCLUSIVEADDRUSE on Windows). + * This option must be followed by a `unsigned int` argument. + */ + MHD_OPTION_LISTENING_ADDRESS_REUSE = 25, + + /** + * Memory pointer for a password that decrypts the private key (key.pem) + * to be used by the HTTPS daemon. This option should be followed by a + * `const char *` argument. + * This should be used in conjunction with #MHD_OPTION_HTTPS_MEM_KEY. + * @sa ::MHD_FEATURE_HTTPS_KEY_PASSWORD + */ + MHD_OPTION_HTTPS_KEY_PASSWORD = 26, + + /** + * Register a function that should be called whenever a connection is + * started or closed. + * + * This option should be followed by TWO pointers. First a pointer + * to a function of type #MHD_NotifyConnectionCallback and second a + * pointer to a closure to pass to the request completed callback. + * The second pointer maybe NULL. + */ + MHD_OPTION_NOTIFY_CONNECTION = 27, + + /** + * Allow to change maximum length of the queue of pending connections on + * listen socket. If not present than default platform-specific SOMAXCONN + * value is used. This option should be followed by an `unsigned int` + * argument. + */ + MHD_OPTION_LISTEN_BACKLOG_SIZE = 28, + + /** + * If set to 1 - be strict about the protocol (as opposed to as + * tolerant as possible). Specifically, at the moment, this flag + * causes MHD to reject HTTP 1.1 connections without a "Host" header. + * This is required by the standard, but of course in violation of + * the "be as liberal as possible in what you accept" norm. It is + * recommended to set this to 1 if you are testing clients against + * MHD, and 0 in production. + * if set to -1 - be opposite to strict and be permissive about the + * protocol, allowing slight deviations that are technically not + * allowed by the RFC. Specifically, at the moment, this flag + * causes MHD to allow spaces in header field names. This is + * disallowed by the standard. + * It is not recommended to set it to -1 on publicly available + * servers as it may potentially lower level of protection. + * This option should be followed by an `int` argument. + */ + MHD_OPTION_STRICT_FOR_CLIENT = 29 +}; + + +/** + * Entry in an #MHD_OPTION_ARRAY. + */ +struct MHD_OptionItem +{ + /** + * Which option is being given. Use #MHD_OPTION_END + * to terminate the array. + */ + enum MHD_OPTION option; + + /** + * Option value (for integer arguments, and for options requiring + * two pointer arguments); should be 0 for options that take no + * arguments or only a single pointer argument. + */ + intptr_t value; + + /** + * Pointer option value (use NULL for options taking no arguments + * or only an integer option). + */ + void *ptr_value; + +}; + + +/** + * The `enum MHD_ValueKind` specifies the source of + * the key-value pairs in the HTTP protocol. + */ +enum MHD_ValueKind +{ + + /** + * Response header + * @deprecated + */ + MHD_RESPONSE_HEADER_KIND = 0, +#define MHD_RESPONSE_HEADER_KIND \ + _MHD_DEPR_IN_MACRO("Value MHD_RESPONSE_HEADER_KIND is deprecated and not used") \ + MHD_RESPONSE_HEADER_KIND + + /** + * HTTP header (request/response). + */ + MHD_HEADER_KIND = 1, + + /** + * Cookies. Note that the original HTTP header containing + * the cookie(s) will still be available and intact. + */ + MHD_COOKIE_KIND = 2, + + /** + * POST data. This is available only if a content encoding + * supported by MHD is used (currently only URL encoding), + * and only if the posted content fits within the available + * memory pool. Note that in that case, the upload data + * given to the #MHD_AccessHandlerCallback will be + * empty (since it has already been processed). + */ + MHD_POSTDATA_KIND = 4, + + /** + * GET (URI) arguments. + */ + MHD_GET_ARGUMENT_KIND = 8, + + /** + * HTTP footer (only for HTTP 1.1 chunked encodings). + */ + MHD_FOOTER_KIND = 16 +}; + + +/** + * The `enum MHD_RequestTerminationCode` specifies reasons + * why a request has been terminated (or completed). + * @ingroup request + */ +enum MHD_RequestTerminationCode +{ + + /** + * We finished sending the response. + * @ingroup request + */ + MHD_REQUEST_TERMINATED_COMPLETED_OK = 0, + + /** + * Error handling the connection (resources + * exhausted, other side closed connection, + * application error accepting request, etc.) + * @ingroup request + */ + MHD_REQUEST_TERMINATED_WITH_ERROR = 1, + + /** + * No activity on the connection for the number + * of seconds specified using + * #MHD_OPTION_CONNECTION_TIMEOUT. + * @ingroup request + */ + MHD_REQUEST_TERMINATED_TIMEOUT_REACHED = 2, + + /** + * We had to close the session since MHD was being + * shut down. + * @ingroup request + */ + MHD_REQUEST_TERMINATED_DAEMON_SHUTDOWN = 3, + + /** + * We tried to read additional data, but the other side closed the + * connection. This error is similar to + * #MHD_REQUEST_TERMINATED_WITH_ERROR, but specific to the case where + * the connection died because the other side did not send expected + * data. + * @ingroup request + */ + MHD_REQUEST_TERMINATED_READ_ERROR = 4, + + /** + * The client terminated the connection by closing the socket + * for writing (TCP half-closed); MHD aborted sending the + * response according to RFC 2616, section 8.1.4. + * @ingroup request + */ + MHD_REQUEST_TERMINATED_CLIENT_ABORT = 5 + +}; + + +/** + * The `enum MHD_ConnectionNotificationCode` specifies types + * of connection notifications. + * @ingroup request + */ +enum MHD_ConnectionNotificationCode +{ + + /** + * A new connection has been started. + * @ingroup request + */ + MHD_CONNECTION_NOTIFY_STARTED = 0, + + /** + * A connection is closed. + * @ingroup request + */ + MHD_CONNECTION_NOTIFY_CLOSED = 1 + +}; + + +/** + * Information about a connection. + */ +union MHD_ConnectionInfo +{ + + /** + * Cipher algorithm used, of type "enum gnutls_cipher_algorithm". + */ + int /* enum gnutls_cipher_algorithm */ cipher_algorithm; + + /** + * Protocol used, of type "enum gnutls_protocol". + */ + int /* enum gnutls_protocol */ protocol; + + /** + * The suspended status of a connection. + */ + int /* MHD_YES or MHD_NO */ suspended; + + /** + * Amount of second that connection could spend in idle state + * before automatically disconnected. + * Zero for no timeout (unlimited idle time). + */ + unsigned int connection_timeout; + + /** + * Connect socket + */ + MHD_socket connect_fd; + + /** + * Size of the client's HTTP header. + */ + size_t header_size; + + /** + * GNUtls session handle, of type "gnutls_session_t". + */ + void * /* gnutls_session_t */ tls_session; + + /** + * GNUtls client certificate handle, of type "gnutls_x509_crt_t". + */ + void * /* gnutls_x509_crt_t */ client_cert; + + /** + * Address information for the client. + */ + struct sockaddr *client_addr; + + /** + * Which daemon manages this connection (useful in case there are many + * daemons running). + */ + struct MHD_Daemon *daemon; + + /** + * Socket-specific client context. Points to the same address as + * the "socket_context" of the #MHD_NotifyConnectionCallback. + */ + void *socket_context; +}; + + +/** + * Values of this enum are used to specify what + * information about a connection is desired. + * @ingroup request + */ +enum MHD_ConnectionInfoType +{ + /** + * What cipher algorithm is being used. + * Takes no extra arguments. + * @ingroup request + */ + MHD_CONNECTION_INFO_CIPHER_ALGO, + + /** + * + * Takes no extra arguments. + * @ingroup request + */ + MHD_CONNECTION_INFO_PROTOCOL, + + /** + * Obtain IP address of the client. Takes no extra arguments. + * Returns essentially a `struct sockaddr **` (since the API returns + * a `union MHD_ConnectionInfo *` and that union contains a `struct + * sockaddr *`). + * @ingroup request + */ + MHD_CONNECTION_INFO_CLIENT_ADDRESS, + + /** + * Get the gnuTLS session handle. + * @ingroup request + */ + MHD_CONNECTION_INFO_GNUTLS_SESSION, + + /** + * Get the gnuTLS client certificate handle. Dysfunctional (never + * implemented, deprecated). Use #MHD_CONNECTION_INFO_GNUTLS_SESSION + * to get the `gnutls_session_t` and then call + * gnutls_certificate_get_peers(). + */ + MHD_CONNECTION_INFO_GNUTLS_CLIENT_CERT, + + /** + * Get the `struct MHD_Daemon *` responsible for managing this connection. + * @ingroup request + */ + MHD_CONNECTION_INFO_DAEMON, + + /** + * Request the file descriptor for the connection socket. + * No extra arguments should be passed. + * @ingroup request + */ + MHD_CONNECTION_INFO_CONNECTION_FD, + + /** + * Returns the client-specific pointer to a `void *` that was (possibly) + * set during a #MHD_NotifyConnectionCallback when the socket was + * first accepted. Note that this is NOT the same as the "con_cls" + * argument of the #MHD_AccessHandlerCallback. The "con_cls" is + * fresh for each HTTP request, while the "socket_context" is fresh + * for each socket. + */ + MHD_CONNECTION_INFO_SOCKET_CONTEXT, + + /** + * Check whether the connection is suspended. + * @ingroup request + */ + MHD_CONNECTION_INFO_CONNECTION_SUSPENDED, + + /** + * Get connection timeout + * @ingroup request + */ + MHD_CONNECTION_INFO_CONNECTION_TIMEOUT, + + /** + * Return length of the client's HTTP request header. + * @ingroup request + */ + MHD_CONNECTION_INFO_REQUEST_HEADER_SIZE +}; + + +/** + * Values of this enum are used to specify what + * information about a deamon is desired. + */ +enum MHD_DaemonInfoType +{ + /** + * No longer supported (will return NULL). + */ + MHD_DAEMON_INFO_KEY_SIZE, + + /** + * No longer supported (will return NULL). + */ + MHD_DAEMON_INFO_MAC_KEY_SIZE, + + /** + * Request the file descriptor for the listening socket. + * No extra arguments should be passed. + */ + MHD_DAEMON_INFO_LISTEN_FD, + + /** + * Request the file descriptor for the external epoll. + * No extra arguments should be passed. + */ + MHD_DAEMON_INFO_EPOLL_FD_LINUX_ONLY, + MHD_DAEMON_INFO_EPOLL_FD = MHD_DAEMON_INFO_EPOLL_FD_LINUX_ONLY, + + /** + * Request the number of current connections handled by the daemon. + * No extra arguments should be passed. + * Note: when using MHD in external polling mode, this type of request + * could be used only when #MHD_run()/#MHD_run_from_select is not + * working in other thread at the same time. + */ + MHD_DAEMON_INFO_CURRENT_CONNECTIONS, + + /** + * Request the daemon flags. + * No extra arguments should be passed. + * Note: flags may differ from original 'flags' specified for + * daemon, especially if #MHD_USE_AUTO was set. + */ + MHD_DAEMON_INFO_FLAGS +}; + + +/** + * Callback for serious error condition. The default action is to print + * an error message and `abort()`. + * + * @param cls user specified value + * @param file where the error occured + * @param line where the error occured + * @param reason error detail, may be NULL + * @ingroup logging + */ +typedef void +(*MHD_PanicCallback) (void *cls, + const char *file, + unsigned int line, + const char *reason); + +/** + * Allow or deny a client to connect. + * + * @param cls closure + * @param addr address information from the client + * @param addrlen length of @a addr + * @return #MHD_YES if connection is allowed, #MHD_NO if not + */ +typedef int +(*MHD_AcceptPolicyCallback) (void *cls, + const struct sockaddr *addr, + socklen_t addrlen); + + +/** + * A client has requested the given url using the given method + * (#MHD_HTTP_METHOD_GET, #MHD_HTTP_METHOD_PUT, + * #MHD_HTTP_METHOD_DELETE, #MHD_HTTP_METHOD_POST, etc). The callback + * must call MHD callbacks to provide content to give back to the + * client and return an HTTP status code (i.e. #MHD_HTTP_OK, + * #MHD_HTTP_NOT_FOUND, etc.). + * + * @param cls argument given together with the function + * pointer when the handler was registered with MHD + * @param url the requested url + * @param method the HTTP method used (#MHD_HTTP_METHOD_GET, + * #MHD_HTTP_METHOD_PUT, etc.) + * @param version the HTTP version string (i.e. + * #MHD_HTTP_VERSION_1_1) + * @param upload_data the data being uploaded (excluding HEADERS, + * for a POST that fits into memory and that is encoded + * with a supported encoding, the POST data will NOT be + * given in upload_data and is instead available as + * part of #MHD_get_connection_values; very large POST + * data *will* be made available incrementally in + * @a upload_data) + * @param upload_data_size set initially to the size of the + * @a upload_data provided; the method must update this + * value to the number of bytes NOT processed; + * @param con_cls pointer that the callback can set to some + * address and that will be preserved by MHD for future + * calls for this request; since the access handler may + * be called many times (i.e., for a PUT/POST operation + * with plenty of upload data) this allows the application + * to easily associate some request-specific state. + * If necessary, this state can be cleaned up in the + * global #MHD_RequestCompletedCallback (which + * can be set with the #MHD_OPTION_NOTIFY_COMPLETED). + * Initially, `*con_cls` will be NULL. + * @return #MHD_YES if the connection was handled successfully, + * #MHD_NO if the socket must be closed due to a serios + * error while handling the request + */ +typedef int +(*MHD_AccessHandlerCallback) (void *cls, + struct MHD_Connection *connection, + const char *url, + const char *method, + const char *version, + const char *upload_data, + size_t *upload_data_size, + void **con_cls); + + +/** + * Signature of the callback used by MHD to notify the + * application about completed requests. + * + * @param cls client-defined closure + * @param connection connection handle + * @param con_cls value as set by the last call to + * the #MHD_AccessHandlerCallback + * @param toe reason for request termination + * @see #MHD_OPTION_NOTIFY_COMPLETED + * @ingroup request + */ +typedef void +(*MHD_RequestCompletedCallback) (void *cls, + struct MHD_Connection *connection, + void **con_cls, + enum MHD_RequestTerminationCode toe); + +/** + * Signature of the callback used by MHD to notify the + * application about started/stopped connections + * + * @param cls client-defined closure + * @param connection connection handle + * @param socket_context socket-specific pointer where the + * client can associate some state specific + * to the TCP connection; note that this is + * different from the "con_cls" which is per + * HTTP request. The client can initialize + * during #MHD_CONNECTION_NOTIFY_STARTED and + * cleanup during #MHD_CONNECTION_NOTIFY_CLOSED + * and access in the meantime using + * #MHD_CONNECTION_INFO_SOCKET_CONTEXT. + * @param toe reason for connection notification + * @see #MHD_OPTION_NOTIFY_CONNECTION + * @ingroup request + */ +typedef void +(*MHD_NotifyConnectionCallback) (void *cls, + struct MHD_Connection *connection, + void **socket_context, + enum MHD_ConnectionNotificationCode toe); + + +/** + * Iterator over key-value pairs. This iterator + * can be used to iterate over all of the cookies, + * headers, or POST-data fields of a request, and + * also to iterate over the headers that have been + * added to a response. + * + * @param cls closure + * @param kind kind of the header we are looking at + * @param key key for the value, can be an empty string + * @param value corresponding value, can be NULL + * @return #MHD_YES to continue iterating, + * #MHD_NO to abort the iteration + * @ingroup request + */ +typedef int +(*MHD_KeyValueIterator) (void *cls, + enum MHD_ValueKind kind, + const char *key, + const char *value); + + +/** + * Callback used by libmicrohttpd in order to obtain content. The + * callback is to copy at most @a max bytes of content into @a buf. The + * total number of bytes that has been placed into @a buf should be + * returned. + * + * Note that returning zero will cause libmicrohttpd to try again. + * Thus, returning zero should only be used in conjunction + * with MHD_suspend_connection() to avoid busy waiting. + * + * @param cls extra argument to the callback + * @param pos position in the datastream to access; + * note that if a `struct MHD_Response` object is re-used, + * it is possible for the same content reader to + * be queried multiple times for the same data; + * however, if a `struct MHD_Response` is not re-used, + * libmicrohttpd guarantees that "pos" will be + * the sum of all non-negative return values + * obtained from the content reader so far. + * @param buf where to copy the data + * @param max maximum number of bytes to copy to @a buf (size of @a buf) + * @return number of bytes written to @a buf; + * 0 is legal unless we are running in internal select mode (since + * this would cause busy-waiting); 0 in external select mode + * will cause this function to be called again once the external + * select calls MHD again; + * #MHD_CONTENT_READER_END_OF_STREAM (-1) for the regular + * end of transmission (with chunked encoding, MHD will then + * terminate the chunk and send any HTTP footers that might be + * present; without chunked encoding and given an unknown + * response size, MHD will simply close the connection; note + * that while returning #MHD_CONTENT_READER_END_OF_STREAM is not technically + * legal if a response size was specified, MHD accepts this + * and treats it just as #MHD_CONTENT_READER_END_WITH_ERROR; + * #MHD_CONTENT_READER_END_WITH_ERROR (-2) to indicate a server + * error generating the response; this will cause MHD to simply + * close the connection immediately. If a response size was + * given or if chunked encoding is in use, this will indicate + * an error to the client. Note, however, that if the client + * does not know a response size and chunked encoding is not in + * use, then clients will not be able to tell the difference between + * #MHD_CONTENT_READER_END_WITH_ERROR and #MHD_CONTENT_READER_END_OF_STREAM. + * This is not a limitation of MHD but rather of the HTTP protocol. + */ +typedef ssize_t +(*MHD_ContentReaderCallback) (void *cls, + uint64_t pos, + char *buf, + size_t max); + + +/** + * This method is called by libmicrohttpd if we + * are done with a content reader. It should + * be used to free resources associated with the + * content reader. + * + * @param cls closure + * @ingroup response + */ +typedef void +(*MHD_ContentReaderFreeCallback) (void *cls); + + +/** + * Iterator over key-value pairs where the value + * maybe made available in increments and/or may + * not be zero-terminated. Used for processing + * POST data. + * + * @param cls user-specified closure + * @param kind type of the value, always #MHD_POSTDATA_KIND when called from MHD + * @param key 0-terminated key for the value + * @param filename name of the uploaded file, NULL if not known + * @param content_type mime-type of the data, NULL if not known + * @param transfer_encoding encoding of the data, NULL if not known + * @param data pointer to @a size bytes of data at the + * specified offset + * @param off offset of data in the overall value + * @param size number of bytes in @a data available + * @return #MHD_YES to continue iterating, + * #MHD_NO to abort the iteration + */ +typedef int +(*MHD_PostDataIterator) (void *cls, + enum MHD_ValueKind kind, + const char *key, + const char *filename, + const char *content_type, + const char *transfer_encoding, + const char *data, + uint64_t off, + size_t size); + +/* **************** Daemon handling functions ***************** */ + +/** + * Start a webserver on the given port. + * + * @param flags combination of `enum MHD_FLAG` values + * @param port port to bind to (in host byte order) + * @param apc callback to call to check which clients + * will be allowed to connect; you can pass NULL + * in which case connections from any IP will be + * accepted + * @param apc_cls extra argument to apc + * @param dh handler called for all requests (repeatedly) + * @param dh_cls extra argument to @a dh + * @param ap list of options (type-value pairs, + * terminated with #MHD_OPTION_END). + * @return NULL on error, handle to daemon on success + * @ingroup event + */ +_MHD_EXTERN struct MHD_Daemon * +MHD_start_daemon_va (unsigned int flags, + uint16_t port, + MHD_AcceptPolicyCallback apc, void *apc_cls, + MHD_AccessHandlerCallback dh, void *dh_cls, + va_list ap); + + +/** + * Start a webserver on the given port. Variadic version of + * #MHD_start_daemon_va. + * + * @param flags combination of `enum MHD_FLAG` values + * @param port port to bind to + * @param apc callback to call to check which clients + * will be allowed to connect; you can pass NULL + * in which case connections from any IP will be + * accepted + * @param apc_cls extra argument to apc + * @param dh handler called for all requests (repeatedly) + * @param dh_cls extra argument to @a dh + * @return NULL on error, handle to daemon on success + * @ingroup event + */ +_MHD_EXTERN struct MHD_Daemon * +MHD_start_daemon (unsigned int flags, + uint16_t port, + MHD_AcceptPolicyCallback apc, void *apc_cls, + MHD_AccessHandlerCallback dh, void *dh_cls, + ...); + + +/** + * Stop accepting connections from the listening socket. Allows + * clients to continue processing, but stops accepting new + * connections. Note that the caller is responsible for closing the + * returned socket; however, if MHD is run using threads (anything but + * external select mode), it must not be closed until AFTER + * #MHD_stop_daemon has been called (as it is theoretically possible + * that an existing thread is still using it). + * + * Note that some thread modes require the caller to have passed + * #MHD_USE_ITC when using this API. If this daemon is + * in one of those modes and this option was not given to + * #MHD_start_daemon, this function will return #MHD_INVALID_SOCKET. + * + * @param daemon daemon to stop accepting new connections for + * @return old listen socket on success, #MHD_INVALID_SOCKET if + * the daemon was already not listening anymore + * @ingroup specialized + */ +_MHD_EXTERN MHD_socket +MHD_quiesce_daemon (struct MHD_Daemon *daemon); + + +/** + * Shutdown an HTTP daemon. + * + * @param daemon daemon to stop + * @ingroup event + */ +_MHD_EXTERN void +MHD_stop_daemon (struct MHD_Daemon *daemon); + + +/** + * Add another client connection to the set of connections managed by + * MHD. This API is usually not needed (since MHD will accept inbound + * connections on the server socket). Use this API in special cases, + * for example if your HTTP server is behind NAT and needs to connect + * out to the HTTP client, or if you are building a proxy. + * + * If you use this API in conjunction with a internal select or a + * thread pool, you must set the option + * #MHD_USE_ITC to ensure that the freshly added + * connection is immediately processed by MHD. + * + * The given client socket will be managed (and closed!) by MHD after + * this call and must no longer be used directly by the application + * afterwards. + * + * Per-IP connection limits are ignored when using this API. + * + * @param daemon daemon that manages the connection + * @param client_socket socket to manage (MHD will expect + * to receive an HTTP request from this socket next). + * @param addr IP address of the client + * @param addrlen number of bytes in @a addr + * @return #MHD_YES on success, #MHD_NO if this daemon could + * not handle the connection (i.e. `malloc()` failed, etc). + * The socket will be closed in any case; `errno` is + * set to indicate further details about the error. + * @ingroup specialized + */ +_MHD_EXTERN int +MHD_add_connection (struct MHD_Daemon *daemon, + MHD_socket client_socket, + const struct sockaddr *addr, + socklen_t addrlen); + + +/** + * Obtain the `select()` sets for this daemon. + * Daemon's FDs will be added to fd_sets. To get only + * daemon FDs in fd_sets, call FD_ZERO for each fd_set + * before calling this function. FD_SETSIZE is assumed + * to be platform's default. + * + * This function should only be called in when MHD is configured to + * use external select with @code{select()} or with @code{epoll()}. + * In the latter case, it will only add the single @code{epoll()} file + * descriptor used by MHD to the sets. + * + * This function must be called only for daemon started + * without #MHD_USE_INTERNAL_POLLING_THREAD flag. + * + * @param daemon daemon to get sets from + * @param read_fd_set read set + * @param write_fd_set write set + * @param except_fd_set except set + * @param max_fd increased to largest FD added (if larger + * than existing value); can be NULL + * @return #MHD_YES on success, #MHD_NO if this + * daemon was not started with the right + * options for this call or any FD didn't + * fit fd_set. + * @ingroup event + */ +_MHD_EXTERN int +MHD_get_fdset (struct MHD_Daemon *daemon, + fd_set *read_fd_set, + fd_set *write_fd_set, + fd_set *except_fd_set, + MHD_socket *max_fd); + + +/** + * Obtain the `select()` sets for this daemon. + * Daemon's FDs will be added to fd_sets. To get only + * daemon FDs in fd_sets, call FD_ZERO for each fd_set + * before calling this function. + * + * Passing custom FD_SETSIZE as @a fd_setsize allow usage of + * larger/smaller than platform's default fd_sets. + * + * This function should only be called in when MHD is configured to + * use external select with @code{select()} or with @code{epoll()}. + * In the latter case, it will only add the single @code{epoll()} file + * descriptor used by MHD to the sets. + * + * This function must be called only for daemon started + * without #MHD_USE_INTERNAL_POLLING_THREAD flag. + * + * @param daemon daemon to get sets from + * @param read_fd_set read set + * @param write_fd_set write set + * @param except_fd_set except set + * @param max_fd increased to largest FD added (if larger + * than existing value); can be NULL + * @param fd_setsize value of FD_SETSIZE + * @return #MHD_YES on success, #MHD_NO if this + * daemon was not started with the right + * options for this call or any FD didn't + * fit fd_set. + * @ingroup event + */ +_MHD_EXTERN int +MHD_get_fdset2 (struct MHD_Daemon *daemon, + fd_set *read_fd_set, + fd_set *write_fd_set, + fd_set *except_fd_set, + MHD_socket *max_fd, + unsigned int fd_setsize); + + +/** + * Obtain the `select()` sets for this daemon. + * Daemon's FDs will be added to fd_sets. To get only + * daemon FDs in fd_sets, call FD_ZERO for each fd_set + * before calling this function. Size of fd_set is + * determined by current value of FD_SETSIZE. + * + * This function could be called only for daemon started + * without #MHD_USE_INTERNAL_POLLING_THREAD flag. + * + * @param daemon daemon to get sets from + * @param read_fd_set read set + * @param write_fd_set write set + * @param except_fd_set except set + * @param max_fd increased to largest FD added (if larger + * than existing value); can be NULL + * @return #MHD_YES on success, #MHD_NO if this + * daemon was not started with the right + * options for this call or any FD didn't + * fit fd_set. + * @ingroup event + */ +#define MHD_get_fdset(daemon,read_fd_set,write_fd_set,except_fd_set,max_fd) \ + MHD_get_fdset2((daemon),(read_fd_set),(write_fd_set),(except_fd_set),(max_fd),FD_SETSIZE) + + +/** + * Obtain timeout value for `select()` for this daemon (only needed if + * connection timeout is used). The returned value is how many milliseconds + * `select()` or `poll()` should at most block, not the timeout value set for + * connections. This function MUST NOT be called if MHD is running with + * #MHD_USE_THREAD_PER_CONNECTION. + * + * @param daemon daemon to query for timeout + * @param timeout set to the timeout (in milliseconds) + * @return #MHD_YES on success, #MHD_NO if timeouts are + * not used (or no connections exist that would + * necessiate the use of a timeout right now). + * @ingroup event + */ +_MHD_EXTERN int +MHD_get_timeout (struct MHD_Daemon *daemon, + MHD_UNSIGNED_LONG_LONG *timeout); + + +/** + * Run webserver operations (without blocking unless in client + * callbacks). This method should be called by clients in combination + * with #MHD_get_fdset if the client-controlled select method is used. + * + * This function is a convenience method, which is useful if the + * fd_sets from #MHD_get_fdset were not directly passed to `select()`; + * with this function, MHD will internally do the appropriate `select()` + * call itself again. While it is always safe to call #MHD_run (if + * #MHD_USE_INTERNAL_POLLING_THREAD is not set), you should call + * #MHD_run_from_select if performance is important (as it saves an + * expensive call to `select()`). + * + * @param daemon daemon to run + * @return #MHD_YES on success, #MHD_NO if this + * daemon was not started with the right + * options for this call. + * @ingroup event + */ +_MHD_EXTERN int +MHD_run (struct MHD_Daemon *daemon); + + +/** + * Run webserver operations. This method should be called by clients + * in combination with #MHD_get_fdset if the client-controlled select + * method is used. + * + * You can use this function instead of #MHD_run if you called + * `select()` on the result from #MHD_get_fdset. File descriptors in + * the sets that are not controlled by MHD will be ignored. Calling + * this function instead of #MHD_run is more efficient as MHD will + * not have to call `select()` again to determine which operations are + * ready. + * + * This function cannot be used with daemon started with + * #MHD_USE_INTERNAL_POLLING_THREAD flag. + * + * @param daemon daemon to run select loop for + * @param read_fd_set read set + * @param write_fd_set write set + * @param except_fd_set except set + * @return #MHD_NO on serious errors, #MHD_YES on success + * @ingroup event + */ +_MHD_EXTERN int +MHD_run_from_select (struct MHD_Daemon *daemon, + const fd_set *read_fd_set, + const fd_set *write_fd_set, + const fd_set *except_fd_set); + + + + +/* **************** Connection handling functions ***************** */ + +/** + * Get all of the headers from the request. + * + * @param connection connection to get values from + * @param kind types of values to iterate over, can be a bitmask + * @param iterator callback to call on each header; + * maybe NULL (then just count headers) + * @param iterator_cls extra argument to @a iterator + * @return number of entries iterated over + * @ingroup request + */ +_MHD_EXTERN int +MHD_get_connection_values (struct MHD_Connection *connection, + enum MHD_ValueKind kind, + MHD_KeyValueIterator iterator, + void *iterator_cls); + + +/** + * This function can be used to add an entry to the HTTP headers of a + * connection (so that the #MHD_get_connection_values function will + * return them -- and the `struct MHD_PostProcessor` will also see + * them). This maybe required in certain situations (see Mantis + * #1399) where (broken) HTTP implementations fail to supply values + + * needed by the post processor (or other parts of the application). + * + * This function MUST only be called from within the + * #MHD_AccessHandlerCallback (otherwise, access maybe improperly + * synchronized). Furthermore, the client must guarantee that the key + * and value arguments are 0-terminated strings that are NOT freed + * until the connection is closed. (The easiest way to do this is by + * passing only arguments to permanently allocated strings.). + * + * @param connection the connection for which a + * value should be set + * @param kind kind of the value + * @param key key for the value + * @param value the value itself + * @return #MHD_NO if the operation could not be + * performed due to insufficient memory; + * #MHD_YES on success + * @ingroup request + */ +_MHD_EXTERN int +MHD_set_connection_value (struct MHD_Connection *connection, + enum MHD_ValueKind kind, + const char *key, + const char *value); + + +/** + * Sets the global error handler to a different implementation. @a cb + * will only be called in the case of typically fatal, serious + * internal consistency issues. These issues should only arise in the + * case of serious memory corruption or similar problems with the + * architecture. While @a cb is allowed to return and MHD will then + * try to continue, this is never safe. + * + * The default implementation that is used if no panic function is set + * simply prints an error message and calls `abort()`. Alternative + * implementations might call `exit()` or other similar functions. + * + * @param cb new error handler + * @param cls passed to @a cb + * @ingroup logging + */ +_MHD_EXTERN void +MHD_set_panic_func (MHD_PanicCallback cb, void *cls); + + +/** + * Process escape sequences ('%HH') Updates val in place; the + * result should be UTF-8 encoded and cannot be larger than the input. + * The result must also still be 0-terminated. + * + * @param val value to unescape (modified in the process) + * @return length of the resulting val (`strlen(val)` may be + * shorter afterwards due to elimination of escape sequences) + */ +_MHD_EXTERN size_t +MHD_http_unescape (char *val); + + +/** + * Get a particular header value. If multiple + * values match the kind, return any one of them. + * + * @param connection connection to get values from + * @param kind what kind of value are we looking for + * @param key the header to look for, NULL to lookup 'trailing' value without a key + * @return NULL if no such item was found + * @ingroup request + */ +_MHD_EXTERN const char * +MHD_lookup_connection_value (struct MHD_Connection *connection, + enum MHD_ValueKind kind, + const char *key); + + +/** + * Queue a response to be transmitted to the client (as soon as + * possible but after #MHD_AccessHandlerCallback returns). + * + * @param connection the connection identifying the client + * @param status_code HTTP status code (i.e. #MHD_HTTP_OK) + * @param response response to transmit + * @return #MHD_NO on error (i.e. reply already sent), + * #MHD_YES on success or if message has been queued + * @ingroup response + */ +_MHD_EXTERN int +MHD_queue_response (struct MHD_Connection *connection, + unsigned int status_code, + struct MHD_Response *response); + + +/** + * Suspend handling of network data for a given connection. This can + * be used to dequeue a connection from MHD's event loop for a while. + * + * If you use this API in conjunction with a internal select or a + * thread pool, you must set the option #MHD_USE_ITC to + * ensure that a resumed connection is immediately processed by MHD. + * + * Suspended connections continue to count against the total number of + * connections allowed (per daemon, as well as per IP, if such limits + * are set). Suspended connections will NOT time out; timeouts will + * restart when the connection handling is resumed. While a + * connection is suspended, MHD will not detect disconnects by the + * client. + * + * The only safe time to suspend a connection is from the + * #MHD_AccessHandlerCallback. + * + * Finally, it is an API violation to call #MHD_stop_daemon while + * having suspended connections (this will at least create memory and + * socket leaks or lead to undefined behavior). You must explicitly + * resume all connections before stopping the daemon. + * + * @param connection the connection to suspend + */ +_MHD_EXTERN void +MHD_suspend_connection (struct MHD_Connection *connection); + + +/** + * Resume handling of network data for suspended connection. It is + * safe to resume a suspended connection at any time. Calling this + * function on a connection that was not previously suspended will + * result in undefined behavior. + * + * If you are using this function in ``external'' select mode, you must + * make sure to run #MHD_run() afterwards (before again calling + * #MHD_get_fdset(), as otherwise the change may not be reflected in + * the set returned by #MHD_get_fdset() and you may end up with a + * connection that is stuck until the next network activity. + * + * @param connection the connection to resume + */ +_MHD_EXTERN void +MHD_resume_connection (struct MHD_Connection *connection); + + +/* **************** Response manipulation functions ***************** */ + + +/** + * Flags for special handling of responses. + */ +enum MHD_ResponseFlags +{ + /** + * Default: no special flags. + */ + MHD_RF_NONE = 0, + + /** + * Only respond in conservative HTTP 1.0-mode. In particular, + * do not (automatically) sent "Connection" headers and always + * close the connection after generating the response. + */ + MHD_RF_HTTP_VERSION_1_0_ONLY = 1 + +}; + + +/** + * MHD options (for future extensions). + */ +enum MHD_ResponseOptions +{ + /** + * End of the list of options. + */ + MHD_RO_END = 0 +}; + + +/** + * Set special flags and options for a response. + * + * @param response the response to modify + * @param flags to set for the response + * @param ... #MHD_RO_END terminated list of options + * @return #MHD_YES on success, #MHD_NO on error + */ +_MHD_EXTERN int +MHD_set_response_options (struct MHD_Response *response, + enum MHD_ResponseFlags flags, + ...); + + +/** + * Create a response object. The response object can be extended with + * header information and then be used any number of times. + * + * @param size size of the data portion of the response, #MHD_SIZE_UNKNOWN for unknown + * @param block_size preferred block size for querying crc (advisory only, + * MHD may still call @a crc using smaller chunks); this + * is essentially the buffer size used for IO, clients + * should pick a value that is appropriate for IO and + * memory performance requirements + * @param crc callback to use to obtain response data + * @param crc_cls extra argument to @a crc + * @param crfc callback to call to free @a crc_cls resources + * @return NULL on error (i.e. invalid arguments, out of memory) + * @ingroup response + */ +_MHD_EXTERN struct MHD_Response * +MHD_create_response_from_callback (uint64_t size, + size_t block_size, + MHD_ContentReaderCallback crc, void *crc_cls, + MHD_ContentReaderFreeCallback crfc); + + +/** + * Create a response object. The response object can be extended with + * header information and then be used any number of times. + * + * @param size size of the @a data portion of the response + * @param data the data itself + * @param must_free libmicrohttpd should free data when done + * @param must_copy libmicrohttpd must make a copy of @a data + * right away, the data maybe released anytime after + * this call returns + * @return NULL on error (i.e. invalid arguments, out of memory) + * @deprecated use #MHD_create_response_from_buffer instead + * @ingroup response + */ +_MHD_DEPR_FUNC("MHD_create_response_from_data() is deprecated, use MHD_create_response_from_buffer()") \ +_MHD_EXTERN struct MHD_Response * +MHD_create_response_from_data (size_t size, + void *data, + int must_free, + int must_copy); + + +/** + * Specification for how MHD should treat the memory buffer + * given for the response. + * @ingroup response + */ +enum MHD_ResponseMemoryMode +{ + + /** + * Buffer is a persistent (static/global) buffer that won't change + * for at least the lifetime of the response, MHD should just use + * it, not free it, not copy it, just keep an alias to it. + * @ingroup response + */ + MHD_RESPMEM_PERSISTENT, + + /** + * Buffer is heap-allocated with `malloc()` (or equivalent) and + * should be freed by MHD after processing the response has + * concluded (response reference counter reaches zero). + * @ingroup response + */ + MHD_RESPMEM_MUST_FREE, + + /** + * Buffer is in transient memory, but not on the heap (for example, + * on the stack or non-`malloc()` allocated) and only valid during the + * call to #MHD_create_response_from_buffer. MHD must make its + * own private copy of the data for processing. + * @ingroup response + */ + MHD_RESPMEM_MUST_COPY + +}; + + +/** + * Create a response object. The response object can be extended with + * header information and then be used any number of times. + * + * @param size size of the data portion of the response + * @param buffer size bytes containing the response's data portion + * @param mode flags for buffer management + * @return NULL on error (i.e. invalid arguments, out of memory) + * @ingroup response + */ +_MHD_EXTERN struct MHD_Response * +MHD_create_response_from_buffer (size_t size, + void *buffer, + enum MHD_ResponseMemoryMode mode); + + +/** + * Create a response object. The response object can be extended with + * header information and then be used any number of times. + * + * @param size size of the data portion of the response + * @param fd file descriptor referring to a file on disk with the + * data; will be closed when response is destroyed; + * fd should be in 'blocking' mode + * @return NULL on error (i.e. invalid arguments, out of memory) + * @ingroup response + */ +_MHD_EXTERN struct MHD_Response * +MHD_create_response_from_fd (size_t size, + int fd); + + +/** + * Create a response object. The response object can be extended with + * header information and then be used any number of times. + * + * @param size size of the data portion of the response; + * sizes larger than 2 GiB may be not supported by OS or + * MHD build; see ::MHD_FEATURE_LARGE_FILE + * @param fd file descriptor referring to a file on disk with the + * data; will be closed when response is destroyed; + * fd should be in 'blocking' mode + * @return NULL on error (i.e. invalid arguments, out of memory) + * @ingroup response + */ +_MHD_EXTERN struct MHD_Response * +MHD_create_response_from_fd64 (uint64_t size, + int fd); + + +/** + * Create a response object. The response object can be extended with + * header information and then be used any number of times. + * + * @param size size of the data portion of the response + * @param fd file descriptor referring to a file on disk with the + * data; will be closed when response is destroyed; + * fd should be in 'blocking' mode + * @param offset offset to start reading from in the file; + * Be careful! `off_t` may have been compiled to be a + * 64-bit variable for MHD, in which case your application + * also has to be compiled using the same options! Read + * the MHD manual for more details. + * @return NULL on error (i.e. invalid arguments, out of memory) + * @ingroup response + */ +_MHD_DEPR_FUNC("Function MHD_create_response_from_fd_at_offset() is deprecated, use MHD_create_response_from_fd_at_offset64()") \ +_MHD_EXTERN struct MHD_Response * +MHD_create_response_from_fd_at_offset (size_t size, + int fd, + off_t offset); + +#if !defined(_MHD_NO_DEPR_IN_MACRO) || defined(_MHD_NO_DEPR_FUNC) +/* Substitute MHD_create_response_from_fd_at_offset64() instead of MHD_create_response_from_fd_at_offset() + to minimize potential problems with different off_t sizes */ +#define MHD_create_response_from_fd_at_offset(size,fd,offset) \ + _MHD_DEPR_IN_MACRO("Usage of MHD_create_response_from_fd_at_offset() is deprecated, use MHD_create_response_from_fd_at_offset64()") \ + MHD_create_response_from_fd_at_offset64((size),(fd),(offset)) +#endif /* !_MHD_NO_DEPR_IN_MACRO || _MHD_NO_DEPR_FUNC */ + + +/** + * Create a response object. The response object can be extended with + * header information and then be used any number of times. + * + * @param size size of the data portion of the response; + * sizes larger than 2 GiB may be not supported by OS or + * MHD build; see ::MHD_FEATURE_LARGE_FILE + * @param fd file descriptor referring to a file on disk with the + * data; will be closed when response is destroyed; + * fd should be in 'blocking' mode + * @param offset offset to start reading from in the file; + * reading file beyond 2 GiB may be not supported by OS or + * MHD build; see ::MHD_FEATURE_LARGE_FILE + * @return NULL on error (i.e. invalid arguments, out of memory) + * @ingroup response + */ +_MHD_EXTERN struct MHD_Response * +MHD_create_response_from_fd_at_offset64 (uint64_t size, + int fd, + uint64_t offset); + + +/** + * Enumeration for actions MHD should perform on the underlying socket + * of the upgrade. This API is not finalized, and in particular + * the final set of actions is yet to be decided. This is just an + * idea for what we might want. + */ +enum MHD_UpgradeAction +{ + + /** + * Close the socket, the application is done with it. + * + * Takes no extra arguments. + */ + MHD_UPGRADE_ACTION_CLOSE = 0 + +}; + + +/** + * Handle given to the application to manage special + * actions relating to MHD responses that "upgrade" + * the HTTP protocol (i.e. to WebSockets). + */ +struct MHD_UpgradeResponseHandle; + + +/** + * This connection-specific callback is provided by MHD to + * applications (unusual) during the #MHD_UpgradeHandler. + * It allows applications to perform 'special' actions on + * the underlying socket from the upgrade. + * + * @param urh the handle identifying the connection to perform + * the upgrade @a action on. + * @param action which action should be performed + * @param ... arguments to the action (depends on the action) + * @return #MHD_NO on error, #MHD_YES on success + */ +_MHD_EXTERN int +MHD_upgrade_action (struct MHD_UpgradeResponseHandle *urh, + enum MHD_UpgradeAction action, + ...); + + +/** + * Function called after a protocol "upgrade" response was sent + * successfully and the socket should now be controlled by some + * protocol other than HTTP. + * + * Any data already received on the socket will be made available in + * @e extra_in. This can happen if the application sent extra data + * before MHD send the upgrade response. The application should + * treat data from @a extra_in as if it had read it from the socket. + * + * Note that the application must not close() @a sock directly, + * but instead use #MHD_upgrade_action() for special operations + * on @a sock. + * + * Data forwarding to "upgraded" @a sock will be started as soon + * as this function return. + * + * Except when in 'thread-per-connection' mode, implementations + * of this function should never block (as it will still be called + * from within the main event loop). + * + * @param cls closure, whatever was given to #MHD_create_response_for_upgrade(). + * @param connection original HTTP connection handle, + * giving the function a last chance + * to inspect the original HTTP request + * @param con_cls last value left in `con_cls` of the `MHD_AccessHandlerCallback` + * @param extra_in if we happened to have read bytes after the + * HTTP header already (because the client sent + * more than the HTTP header of the request before + * we sent the upgrade response), + * these are the extra bytes already read from @a sock + * by MHD. The application should treat these as if + * it had read them from @a sock. + * @param extra_in_size number of bytes in @a extra_in + * @param sock socket to use for bi-directional communication + * with the client. For HTTPS, this may not be a socket + * that is directly connected to the client and thus certain + * operations (TCP-specific setsockopt(), getsockopt(), etc.) + * may not work as expected (as the socket could be from a + * socketpair() or a TCP-loopback). The application is expected + * to perform read()/recv() and write()/send() calls on the socket. + * The application may also call shutdown(), but must not call + * close() directly. + * @param urh argument for #MHD_upgrade_action()s on this @a connection. + * Applications must eventually use this callback to (indirectly) + * perform the close() action on the @a sock. + */ +typedef void +(*MHD_UpgradeHandler)(void *cls, + struct MHD_Connection *connection, + void *con_cls, + const char *extra_in, + size_t extra_in_size, + MHD_socket sock, + struct MHD_UpgradeResponseHandle *urh); + + +/** + * Create a response object that can be used for 101 UPGRADE + * responses, for example to implement WebSockets. After sending the + * response, control over the data stream is given to the callback (which + * can then, for example, start some bi-directional communication). + * If the response is queued for multiple connections, the callback + * will be called for each connection. The callback + * will ONLY be called after the response header was successfully passed + * to the OS; if there are communication errors before, the usual MHD + * connection error handling code will be performed. + * + * Setting the correct HTTP code (i.e. MHD_HTTP_SWITCHING_PROTOCOLS) + * and setting correct HTTP headers for the upgrade must be done + * manually (this way, it is possible to implement most existing + * WebSocket versions using this API; in fact, this API might be useful + * for any protocol switch, not just WebSockets). Note that + * draft-ietf-hybi-thewebsocketprotocol-00 cannot be implemented this + * way as the header "HTTP/1.1 101 WebSocket Protocol Handshake" + * cannot be generated; instead, MHD will always produce "HTTP/1.1 101 + * Switching Protocols" (if the response code 101 is used). + * + * As usual, the response object can be extended with header + * information and then be used any number of times (as long as the + * header information is not connection-specific). + * + * @param upgrade_handler function to call with the "upgraded" socket + * @param upgrade_handler_cls closure for @a upgrade_handler + * @return NULL on error (i.e. invalid arguments, out of memory) + */ +_MHD_EXTERN struct MHD_Response * +MHD_create_response_for_upgrade (MHD_UpgradeHandler upgrade_handler, + void *upgrade_handler_cls); + + +/** + * Destroy a response object and associated resources. Note that + * libmicrohttpd may keep some of the resources around if the response + * is still in the queue for some clients, so the memory may not + * necessarily be freed immediatley. + * + * @param response response to destroy + * @ingroup response + */ +_MHD_EXTERN void +MHD_destroy_response (struct MHD_Response *response); + + +/** + * Add a header line to the response. + * + * @param response response to add a header to + * @param header the header to add + * @param content value to add + * @return #MHD_NO on error (i.e. invalid header or content format), + * or out of memory + * @ingroup response + */ +_MHD_EXTERN int +MHD_add_response_header (struct MHD_Response *response, + const char *header, + const char *content); + + +/** + * Add a footer line to the response. + * + * @param response response to remove a header from + * @param footer the footer to delete + * @param content value to delete + * @return #MHD_NO on error (i.e. invalid footer or content format). + * @ingroup response + */ +_MHD_EXTERN int +MHD_add_response_footer (struct MHD_Response *response, + const char *footer, + const char *content); + + +/** + * Delete a header (or footer) line from the response. + * + * @param response response to remove a header from + * @param header the header to delete + * @param content value to delete + * @return #MHD_NO on error (no such header known) + * @ingroup response + */ +_MHD_EXTERN int +MHD_del_response_header (struct MHD_Response *response, + const char *header, + const char *content); + + +/** + * Get all of the headers (and footers) added to a response. + * + * @param response response to query + * @param iterator callback to call on each header; + * maybe NULL (then just count headers) + * @param iterator_cls extra argument to @a iterator + * @return number of entries iterated over + * @ingroup response + */ +_MHD_EXTERN int +MHD_get_response_headers (struct MHD_Response *response, + MHD_KeyValueIterator iterator, void *iterator_cls); + + +/** + * Get a particular header (or footer) from the response. + * + * @param response response to query + * @param key which header to get + * @return NULL if header does not exist + * @ingroup response + */ +_MHD_EXTERN const char * +MHD_get_response_header (struct MHD_Response *response, + const char *key); + + +/* ********************** PostProcessor functions ********************** */ + +/** + * Create a `struct MHD_PostProcessor`. + * + * A `struct MHD_PostProcessor` can be used to (incrementally) parse + * the data portion of a POST request. Note that some buggy browsers + * fail to set the encoding type. If you want to support those, you + * may have to call #MHD_set_connection_value with the proper encoding + * type before creating a post processor (if no supported encoding + * type is set, this function will fail). + * + * @param connection the connection on which the POST is + * happening (used to determine the POST format) + * @param buffer_size maximum number of bytes to use for + * internal buffering (used only for the parsing, + * specifically the parsing of the keys). A + * tiny value (256-1024) should be sufficient. + * Do NOT use a value smaller than 256. For good + * performance, use 32 or 64k (i.e. 65536). + * @param iter iterator to be called with the parsed data, + * Must NOT be NULL. + * @param iter_cls first argument to @a iter + * @return NULL on error (out of memory, unsupported encoding), + * otherwise a PP handle + * @ingroup request + */ +_MHD_EXTERN struct MHD_PostProcessor * +MHD_create_post_processor (struct MHD_Connection *connection, + size_t buffer_size, + MHD_PostDataIterator iter, void *iter_cls); + + +/** + * Parse and process POST data. Call this function when POST data is + * available (usually during an #MHD_AccessHandlerCallback) with the + * "upload_data" and "upload_data_size". Whenever possible, this will + * then cause calls to the #MHD_PostDataIterator. + * + * @param pp the post processor + * @param post_data @a post_data_len bytes of POST data + * @param post_data_len length of @a post_data + * @return #MHD_YES on success, #MHD_NO on error + * (out-of-memory, iterator aborted, parse error) + * @ingroup request + */ +_MHD_EXTERN int +MHD_post_process (struct MHD_PostProcessor *pp, + const char *post_data, size_t post_data_len); + + +/** + * Release PostProcessor resources. + * + * @param pp the PostProcessor to destroy + * @return #MHD_YES if processing completed nicely, + * #MHD_NO if there were spurious characters / formatting + * problems; it is common to ignore the return + * value of this function + * @ingroup request + */ +_MHD_EXTERN int +MHD_destroy_post_processor (struct MHD_PostProcessor *pp); + + +/* ********************* Digest Authentication functions *************** */ + + +/** + * Constant to indicate that the nonce of the provided + * authentication code was wrong. + * @ingroup authentication + */ +#define MHD_INVALID_NONCE -1 + + +/** + * Get the username from the authorization header sent by the client + * + * @param connection The MHD connection structure + * @return NULL if no username could be found, a pointer + * to the username if found + * @ingroup authentication + */ +_MHD_EXTERN char * +MHD_digest_auth_get_username (struct MHD_Connection *connection); + + +/** + * Authenticates the authorization header sent by the client + * + * @param connection The MHD connection structure + * @param realm The realm presented to the client + * @param username The username needs to be authenticated + * @param password The password used in the authentication + * @param nonce_timeout The amount of time for a nonce to be + * invalid in seconds + * @return #MHD_YES if authenticated, #MHD_NO if not, + * #MHD_INVALID_NONCE if nonce is invalid + * @ingroup authentication + */ +_MHD_EXTERN int +MHD_digest_auth_check (struct MHD_Connection *connection, + const char *realm, + const char *username, + const char *password, + unsigned int nonce_timeout); + + +/** + * Queues a response to request authentication from the client + * + * @param connection The MHD connection structure + * @param realm The realm presented to the client + * @param opaque string to user for opaque value + * @param response reply to send; should contain the "access denied" + * body; note that this function will set the "WWW Authenticate" + * header and that the caller should not do this + * @param signal_stale #MHD_YES if the nonce is invalid to add + * 'stale=true' to the authentication header + * @return #MHD_YES on success, #MHD_NO otherwise + * @ingroup authentication + */ +_MHD_EXTERN int +MHD_queue_auth_fail_response (struct MHD_Connection *connection, + const char *realm, + const char *opaque, + struct MHD_Response *response, + int signal_stale); + + +/** + * Get the username and password from the basic authorization header sent by the client + * + * @param connection The MHD connection structure + * @param password a pointer for the password + * @return NULL if no username could be found, a pointer + * to the username if found + * @ingroup authentication + */ +_MHD_EXTERN char * +MHD_basic_auth_get_username_password (struct MHD_Connection *connection, + char** password); + + +/** + * Queues a response to request basic authentication from the client + * The given response object is expected to include the payload for + * the response; the "WWW-Authenticate" header will be added and the + * response queued with the 'UNAUTHORIZED' status code. + * + * @param connection The MHD connection structure + * @param realm the realm presented to the client + * @param response response object to modify and queue + * @return #MHD_YES on success, #MHD_NO otherwise + * @ingroup authentication + */ +_MHD_EXTERN int +MHD_queue_basic_auth_fail_response (struct MHD_Connection *connection, + const char *realm, + struct MHD_Response *response); + +/* ********************** generic query functions ********************** */ + + +/** + * Obtain information about the given connection. + * + * @param connection what connection to get information about + * @param info_type what information is desired? + * @param ... depends on @a info_type + * @return NULL if this information is not available + * (or if the @a info_type is unknown) + * @ingroup specialized + */ +_MHD_EXTERN const union MHD_ConnectionInfo * +MHD_get_connection_info (struct MHD_Connection *connection, + enum MHD_ConnectionInfoType info_type, + ...); + + +/** + * MHD connection options. Given to #MHD_set_connection_option to + * set custom options for a particular connection. + */ +enum MHD_CONNECTION_OPTION +{ + + /** + * Set a custom timeout for the given connection. Specified + * as the number of seconds, given as an `unsigned int`. Use + * zero for no timeout. + * If timeout was set to zero (or unset) before, setup of new value by + * MHD_set_connection_option() will reset timeout timer. + */ + MHD_CONNECTION_OPTION_TIMEOUT + +}; + + +/** + * Set a custom option for the given connection, overriding defaults. + * + * @param connection connection to modify + * @param option option to set + * @param ... arguments to the option, depending on the option type + * @return #MHD_YES on success, #MHD_NO if setting the option failed + * @ingroup specialized + */ +_MHD_EXTERN int +MHD_set_connection_option (struct MHD_Connection *connection, + enum MHD_CONNECTION_OPTION option, + ...); + + +/** + * Information about an MHD daemon. + */ +union MHD_DaemonInfo +{ + /** + * Size of the key, no longer supported. + * @deprecated + */ + size_t key_size; + + /** + * Size of the mac key, no longer supported. + * @deprecated + */ + size_t mac_key_size; + + /** + * Socket, returned for #MHD_DAEMON_INFO_LISTEN_FD. + */ + MHD_socket listen_fd; + + /** + * epoll FD, returned for #MHD_DAEMON_INFO_EPOLL_FD. + */ + int epoll_fd; + + /** + * Number of active connections, for #MHD_DAEMON_INFO_CURRENT_CONNECTIONS. + */ + unsigned int num_connections; + + /** + * Combination of #MHD_FLAG values, for #MHD_DAEMON_INFO_FLAGS. + * This value is actually a bitfield. + * Note: flags may differ from original 'flags' specified for + * daemon, especially if #MHD_USE_AUTO was set. + */ + enum MHD_FLAG flags; +}; + + +/** + * Obtain information about the given daemon + * (not fully implemented!). + * + * @param daemon what daemon to get information about + * @param info_type what information is desired? + * @param ... depends on @a info_type + * @return NULL if this information is not available + * (or if the @a info_type is unknown) + * @ingroup specialized + */ +_MHD_EXTERN const union MHD_DaemonInfo * +MHD_get_daemon_info (struct MHD_Daemon *daemon, + enum MHD_DaemonInfoType info_type, + ...); + + +/** + * Obtain the version of this library + * + * @return static version string, e.g. "0.9.9" + * @ingroup specialized + */ +_MHD_EXTERN const char* +MHD_get_version (void); + + +/** + * Types of information about MHD features, + * used by #MHD_is_feature_supported(). + */ +enum MHD_FEATURE +{ + /** + * Get whether messages are supported. If supported then in debug + * mode messages can be printed to stderr or to external logger. + */ + MHD_FEATURE_MESSAGES = 1, + + /** + * Get whether HTTPS is supported. If supported then flag + * #MHD_USE_TLS and options #MHD_OPTION_HTTPS_MEM_KEY, + * #MHD_OPTION_HTTPS_MEM_CERT, #MHD_OPTION_HTTPS_MEM_TRUST, + * #MHD_OPTION_HTTPS_MEM_DHPARAMS, #MHD_OPTION_HTTPS_CRED_TYPE, + * #MHD_OPTION_HTTPS_PRIORITIES can be used. + */ + MHD_FEATURE_TLS = 2, + MHD_FEATURE_SSL = 2, + + /** + * Get whether option #MHD_OPTION_HTTPS_CERT_CALLBACK is + * supported. + */ + MHD_FEATURE_HTTPS_CERT_CALLBACK = 3, + + /** + * Get whether IPv6 is supported. If supported then flag + * #MHD_USE_IPv6 can be used. + */ + MHD_FEATURE_IPv6 = 4, + + /** + * Get whether IPv6 without IPv4 is supported. If not supported + * then IPv4 is always enabled in IPv6 sockets and + * flag #MHD_USE_DUAL_STACK if always used when #MHD_USE_IPv6 is + * specified. + */ + MHD_FEATURE_IPv6_ONLY = 5, + + /** + * Get whether `poll()` is supported. If supported then flag + * #MHD_USE_POLL can be used. + */ + MHD_FEATURE_POLL = 6, + + /** + * Get whether `epoll()` is supported. If supported then Flags + * #MHD_USE_EPOLL and + * #MHD_USE_EPOLL_INTERNAL_THREAD can be used. + */ + MHD_FEATURE_EPOLL = 7, + + /** + * Get whether shutdown on listen socket to signal other + * threads is supported. If not supported flag + * #MHD_USE_ITC is automatically forced. + */ + MHD_FEATURE_SHUTDOWN_LISTEN_SOCKET = 8, + + /** + * Get whether socketpair is used internally instead of pipe to + * signal other threads. + */ + MHD_FEATURE_SOCKETPAIR = 9, + + /** + * Get whether TCP Fast Open is supported. If supported then + * flag #MHD_USE_TCP_FASTOPEN and option + * #MHD_OPTION_TCP_FASTOPEN_QUEUE_SIZE can be used. + */ + MHD_FEATURE_TCP_FASTOPEN = 10, + + /** + * Get whether HTTP Basic authorization is supported. If supported + * then functions #MHD_basic_auth_get_username_password and + * #MHD_queue_basic_auth_fail_response can be used. + */ + MHD_FEATURE_BASIC_AUTH = 11, + + /** + * Get whether HTTP Digest authorization is supported. If + * supported then options #MHD_OPTION_DIGEST_AUTH_RANDOM, + * #MHD_OPTION_NONCE_NC_SIZE and + * #MHD_digest_auth_check() can be used. + */ + MHD_FEATURE_DIGEST_AUTH = 12, + + /** + * Get whether postprocessor is supported. If supported then + * functions #MHD_create_post_processor(), #MHD_post_process() and + * #MHD_destroy_post_processor() can + * be used. + */ + MHD_FEATURE_POSTPROCESSOR = 13, + + /** + * Get whether password encrypted private key for HTTPS daemon is + * supported. If supported then option + * ::MHD_OPTION_HTTPS_KEY_PASSWORD can be used. + */ + MHD_FEATURE_HTTPS_KEY_PASSWORD = 14, + + /** + * Get whether reading files beyond 2 GiB boundary is supported. + * If supported then #MHD_create_response_from_fd(), + * #MHD_create_response_from_fd64 #MHD_create_response_from_fd_at_offset() + * and #MHD_create_response_from_fd_at_offset64() can be used with sizes and + * offsets larger than 2 GiB. If not supported value of size+offset is + * limited to 2 GiB. + */ + MHD_FEATURE_LARGE_FILE = 15, + + /** + * Get whether MHD set names on generated threads. + */ + MHD_FEATURE_THREAD_NAMES = 16, + MHD_THREAD_NAMES = 16, + + /** + * Get whether HTTP "Upgrade" is supported. + * If supported then #MHD_ALLOW_UPGRADE, #MHD_upgrade_action() and + * #MHD_create_response_for_upgrade() can be used. + */ + MHD_FEATURE_UPGRADE = 17, + + /** + * Get whether it's safe to use same FD for multiple calls of + * #MHD_create_response_from_fd() and whether it's safe to use single + * response generated by #MHD_create_response_from_fd() with multiple + * connections at same time. + * If #MHD_is_feature_supported() return #MHD_NO for this feature then + * usage of responses with same file FD in multiple parallel threads may + * results in incorrect data sent to remote client. + * It's always safe to use same file FD in multiple responses if MHD + * is run in any single thread mode. + */ + MHD_FEATURE_RESPONSES_SHARED_FD = 18 +}; + + +/** + * Get information about supported MHD features. + * Indicate that MHD was compiled with or without support for + * particular feature. Some features require additional support + * by kernel. Kernel support is not checked by this function. + * + * @param feature type of requested information + * @return #MHD_YES if feature is supported by MHD, #MHD_NO if + * feature is not supported or feature is unknown. + * @ingroup specialized + */ +_MHD_EXTERN int +MHD_is_feature_supported (enum MHD_FEATURE feature); + + +#if 0 /* keep Emacsens' auto-indent happy */ +{ +#endif +#ifdef __cplusplus +} +#endif + +#endif diff --git a/microhttpd/0.9.55/AIX-00FB437F4C00/libmicrohttpd.a.12 b/microhttpd/0.9.55/AIX-00FB437F4C00/libmicrohttpd.a.12 new file mode 100755 index 0000000000000000000000000000000000000000..335090c9ec4857e2bebd58e8fc35c201bcf7b027 GIT binary patch literal 1478052 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℞b zEg>2~-B5D8x{*85%t!vG>V|hs%~opQ%C~7Ivn$t^6aU0t*>5SAH2nF@pah#1>r}aB z36Atz$`NIf<9S2Q`&&omdr5J`O5y}9#n~?6>)Vnyx=Lz9OF1A!(_(whLCNv*%4=w4 zME@#p81o5N6cKE!h+WZ~5MxE`3c5lNhseBUiy=dXbv&{){U5Y1UGB})xW%1t|ix?bsl|a4a?yK8gfp-dS6N+Sc@_|AGDpL7wg=GtaHJk?F#24sJtuW z1glfwwl`<(y+)rPYx<&XFNYJ@-kjH;D||T#YI|D42u=f^9ibufPmQHMSDu-M(VRfT z7P-vNbPeGiiKhOy@X~3~EG(5wqwQ+JZFj>R{hpw8uL?Ow2f2r~ofhMC?lms)x$>-S zFOTEL-WL0$95*7>SjOeJ-?J#>w5&rM{j8W05r6Rrib&T;MnptfD8$jQ)~4imc_n0T zVI3+W<+xGQ{YkA9t93@dSk!I=H3A6`*<<{Um0}%@TMp8;hpoeA)h64g8@5v~{32cL z<}a4|Mc95f*$(TlN{(l{ToJVoWxKhHpciqBbw*{ovCdfjDmk-sp|&&@(!*vQL6)u+ zPH|AmvFT*#II{E}scD3zPtwD6n%n)3l;hW^>_sxQd8id<)yw!LXtr*@X0}nIFSll9 zZ#HGf|FU`~MVn4W>1-sOe<7V$$=@S%{y>P9t8AT>9ItfTdj+KgeJGucT6cw9iB~HK zeCJi0?b`Mn@`8P2l_W*mT&}Y-Tf|>#PdYy(x#2p`rT)LwOj~Cq$J05781|ubHr7g% zpZ)$l7=5)H!E`RRrI4R5ND6v378{df+(0_7rTs>iN_K?Kv7Y3r=ycsk3s`08WC z(6XW4cCpC1F)7&N(bcXB)* z?d@f|@O>D}&nJQ%R}qq{vQ#(tT3C{sGERM;laSZD>M$e+mbM?mQU#I|6c3rs;T-B6 zwCCGTXL4@w^OR>MCzO*|YRFMB-1Gdc5pqH~iRFfzU(|jB~q@moC$2PT<21 zeYG4XxZX+7Rlj?Ld%nYLmMW+%iNAA?MQ|SBmUdwCei^^{dCIdcopLyV6&-mU^FxD3 zJi+C3tfO@nL3>qsX*s2gbCj=7;%P$;vps6e-*E+#(aTjotzV&QQr(pYT*48j^Wm5VWtvj!JOeGyLloy<%!D+}?CpGuzpYn(vC&beAcU3=4ltJ?6gh)6{} zvo4EpPJ$w=wxV;5u-r{c%i(A%cwD{M_n3UQ3DYN>lVRx7Nb4gadg0EYoU|N6PJ1RN zq8IKQ%1NtY$mz@EMD)U)=Q9pPQ++VodAm5pXQa{isY1>nhCYjRUK!ndIr7ZPG@7H! zi}yQPp9Y3L;hg$LUaKmhPc%pCvqQ@fNBVZ9H5P21wxqXv6`(CWme;5eek#)&<#2-B zk8Q4Vci$!@Wu&$6C5E@bV|m@6R^=XPM|1zs-L}*wz0qL6kxXXAFPfuQZ(WXmm3^$@ zxL4VkLGS72C_l4qN{TL>NKP;_;G8YuuTT`JqM~QS)gR4)bb_mFCC9&FU8D2xzo|J8 zWm!L?xX{rA7_rJ~EL*KkB`Uw*+=s2mZ znpX2xVc2Spw^!dyr-rBg?)_jy)NKUItBaq5JZpWr@rZQ1&!M|XE9RW(v;V6)FJd|e z`Y4^XUD2GNop#$1CMT`buq&K1;lF5CpilQ)rVm{_yGPm>-nzTjVH|V(tmPClPM<&y z&FkqX(S2YTM{@sr96#E)dAV&cFSxSv^`dC=bW(JmPWlAvU+D`){MG$*U)E&F3U7l~ zRu!VletWJ-$?@7?mCJP={x^&^SJIr7e;1ps^W9l5BWO(F9%&2xZ&w~e-;6n;D^DiG zxYy%KdC_C+F21si5N~|Q?sW5`R#1XHSP51MR*KW832O}_I9Koz?9p16vX(U|$7D&FCzImlQmhR#A8l_i)Uhenk+&yG9oz>d0KW(6Df-%Ra zYC;WJdjrmkl*+3utZsPwF0{vv6I$mgjolpGPsXXiIMi$Fqf(rp+>h&|

(dx<}gc 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 (H#})%an2x3@LgIRLx2lYBW32l@!w$2Rv~AY~>? z)r1vE$}m%X$fzMxGinT)y|Bb$2|DFw5r~*1jb;5YC-AKbIW6o4MocnZCbngrI}=@I zK!_z>vZl$8X&o1)FsJIgcvrqxuK8h@T8)c$$0W0cr)ITIW!7-n9FOGcCOurH0>XcD zEX{gf7d+Ke;nC^iU49^ZIyrc)_x3@{Ee`v;2lQFm2+eWRHY{g@!avjJ;a&sn*CsgY zjECB6)Z0JYDnOtgu0Pm{q?M-XSqaMWLlYvqa924Z+P0^@FZ3$nBWXuqb{zC=t1h*1 z`D%*T}42{qgz$=HO~F*_DxkJrzZO-zu^5>W0faQ^_`b zSRiKI-v#TROqjOvT1v+`3VgRAw`Wdf;p|)sRm)!<^!9TESG}N-?{gO3weL~{#{eU3 z=rlsAts;%4_D37o{i;bPb z{f8)^d@TJV=wbN?52qn^a3iM_d63gvN#n6GaE!3MoMcP@XCzsxEx+?NH;?GZwbGcF z>fBLDauuf;8%A|PH7^l9$yk*hnRLd|?f$)dX(;ZMD5%#rd5^*P=5VmnZR^Ic%?+Vn z4u;w}iJPu|?g}>Cs#9Kc+EC5;Xs6rH#3@vN4trpFk6u0GCi{VP8K~mwGTUhWEIwpM zr1%Q>il(26YWZ^QtYmxymr~@$)^3lHORt@l(*E&Pr%(faEcu$c#7XTjc9MznxYB$_ zZQ>)0s=b7+_2px$IqVbl{=+d_qc%>~c&(`exyo_H-dFGKZw)ur`_(;^yQelj%_L)V z?U4D||3_O^T*Y#sO2em{orL9^#=F&yn${wc@J(eI+p=jxI}ca`lf0idMb6l^6KSXO z^(7BxRY6~tko+X_=vKdz%ZhC;=3kjR&IO5{(+42IKA69HQ5?`cnRjXxwQ7fLc`Z8U zPG;uJ_2Y7aCp=MFf7^*(2w7CRy{SgR**3&bHQcD{XkUWHzXySuJ7oOpVv9+$Gl zPMD+9^*?!8lV!EXr;fy?+-Za48AjG8teKNJ8yuE5%X(za9A}`zV7zK>zO7>r-#!wX zv&VM2afk`}p57Zi7^o5)L^&kIZd#AbnPWrcG|dI1ObyEY^MDs*fxngjWAxZD0mCkO z_HI$Kknkg$4ymzwDo?qk3hICc7_qm%!PY8Wns(~gC}Xc+!RH;+bZx~Wz_!Topm?f= z$LVModt{b2=G-*=Xw}Mdt!0|M7s>A~A*|H@cY~eR! z_Y_n9un>wTmNyh!Q>;2Pd$@Br+T?jHR%(cH1MFPW!u8Q1h~gXC8;x!&@j4jBJ>+s* zw1AM;vNgU0OXu0~y@Xt_AD{*|kS_I>8Ki4-L{K4WpNVywi)q?XKq zF2flAXvcazRRB=iTG!p43(c{_7w(HiOPX_T(n@ zagMykY&3#h)rGE}^yBs>tEO=oP5r5&ZB}2?%70_<;81LwuF0i<#FU^dQ-XGBN?@1U z_t%HKJ8tcIu!W}^s%mLsxegl+;cmdh9R`209E0u(o1AO}F62ZjDAYxHanrH$2cBtS zh?MV^0|UBCDbDE&AdH)rj9uzul!h2usmC^3iQY=_lgzC!>W80p_w;E8D$Vgw%)9pN z0L}Zr6QA3WjyYh=zg0QwaCSq#-=5mDSaH!Sw{*85@& zZDFa~?Q+@H5LOVqVRwtOmYRE(Ym@}-{(`MmbcDscs*$oRn;7K{4nEE(>zKI>w_Ipd8LPj-HLpp}OCOGo`%6q-9n$_MsF4yrYD3x;1+(x3g+qYHSRIM_U}Yz{UI z#WBwfF-v1xL9S2eUqY34*F0glM)l>!;)Q`!8}M6YX*AOuKq|=fLX@}pQ9-U3n7p^W zf?Urb-;wyM$n_lZeR@`q>*4yS%@}fh#{M#J^$K!5?Xgyu0QKH>j$tE)O-sF)H(dO6YcttCdhfw`XRaD52XElE6fUZWj!E%(e{OE+BZDZ5g^< zIPg~WNdvXFN{D4`PpLq+=Y~v_(CxIqYgR(H1CnjrGX~wBz!Arw+cEC2npB|M0gA?s z!%-3vbURjAZA(`|w_~H_E`%caU}BQxtdpVJRbMSq=M!{0`@fe{LbrqDXic9eq1zK* zmC)^prwm%%IXlBP2$VfYX$54I5{bU{?#a;YSfY3}mC9=_D-=srg>FwXWTJ#_r>}jO zfZ}44z@TJ=!HLsK==Rjp8M-~Q$|UZmn|KwHO{<=L^1O`BL_xjm9bu5{Mxxt&AdTdW z6cD^+yl6yk0LBqMkP{_zd+PiWx*gC)`$C3pPko=E+W`gj6bZT=08Jx|LAL`vXrp*O zpxZ&v?08$~WL2DddvDA60B+~9+*|UEgxk(lc!RrdA=orBY$v6pN`6o!M1bL>rEJkZO_=635VTBiQ{fs2EAk-rv?|N&S@!m(78l)dJVRn zA+vS82HVcS8My-6o*I{7+fm$jR>2kkOl>9zsHKBnYq0Hll*Yzz47R-#AgZwKT!3)< zYyQ**+s=)LjpHe}D zcF=P~?^R*j)k`+c8Ff7)SR<$iApR+^?d$*AUC9Zf8C&IR)AB-ep zu~zkgDoLCPv%Yqw%xHXPadLYfo+Fpgt6BKt{)Y% z9X$mQfBNt|18lqAzCorLhiwn^yc28utg!7E%r^}0j_w%tqt=+mpI+-{gl&g~glyLa zTmAkZmF@2goLKRALrwaEc=hjC*meoO7>kX;wg;%$iA6shwjEh2IPEytcD=4+Yt7|x z*mgEcBOedjo@C-N*mi9)CZO4SocRB;*8I-D$60|#YUp|S{FH9OMm_-^Y3v=(1~&ez ztJQZrDU796D^z|t(>C-(B%1 z%>dxQl&BbRg}^l-$!Bb>Kes-3K)@GWR4K!(bkeeonX@q_6X4_G!QkLAimdWdI~-Kb za>tFz#fm$hH7B8i`NO#1^snz9#Lc&qsF8gVzd!9>ZPv?&SRQJJ`${dBU4ZyidL`#e z+!Cg&%Jl`z*=e=k18yGd$Mc2F{3V$<$fOE2&WP+k7}8^jr|^rW#YY1Jmk< zy7l#(LSK{;PET06O#6i#H{Js&{_Ot2V@wOo&Ec~n)cWczgR+sjv*a1~w;rZR?47m} zopu2W5mz&>;Gm`wE+&fIC577Zi(*~G<|DRoZi!0e}94Z-UWpdr74ft-;0XFV0 zr6RctQ}bUCA825Wjn8i$_#97@Bs9PlX&UNSd(Lw|M=k`IfYN!LSuEGYG@p2)InT6n z7FhA~!xwd_Snbzz%gn^H8l8`lxKnZh+x^G3IDU-bhA&qK+=$0Sy^t6=H{wg`|3iCZ zwHPx$Df`EgRJzaWU>`{%JYni)Ck=c-JC_=*j(bC2Ia-9Rkg1HbmciMZvBc=q7tk=l z82D3Bnb~$mBQ7N4&eidqtVitfqsHWBIdZFw8VtT@!52Q|QS@vdIAY%l{?V$aqdkrD za-bI6@~XWQ!IhS8T(%|pWlQedNIIz{{t$Zw<0%)%zKE2zKjgkIE^Tw3JfdMalqXDO zg|}72*WfgwpI1|DKZ&*3dCA%5k^<)LvH}V(yR!Arxq)w#wt{9>ygxAXsVXa;9qqyG zUetMGj>`Ia0#}%wPwJ}tdH?VWT*GpI6qEX#?oM(*IAkescBB7s`tDiVpu7%exjRkt z7Y*Nwz00Fs*m~IG9wI_^sWR}*=0!apT8a}F)*o>Xwyv!$W+#4Hj1$`nH(dk1>%%PZ|~(y@JpOX{!+SZ9r&^wa*GXzUol0( zKi;sd4j1234BV%5fUqU!GNwym)T9alfn{s<3y{IXie7*9a3Af-W+5L>=NS2SiuKQ> zuPGn|EpNmh95WTUp1uCiqnqFo47(q+?U-}oWXvb zGs;DEp8JdCpGUoWdXgIC zfLg(82l=C&YPPU-n-lFWH$xh#B12y*qVa`?p-V3M4BB~>Zr=hUoHwtK7=@?L6JskVILH^9wnNK5Y4@^?O` zEoK>Cw-{!4V@(n%2g0dx=P`pNyPWPleAL5@BE7aV?sAa}hhLNF)&0awqJ^Oq);k)> z9L3FdGOikHDdcR(X&qqAC3ToqrGCk6CMwLTQq<9gD~&^VJ_(Wd^vNW78UqSzeXMSF zOAVWal~qu+_N-b!+58@Hp9@1kWFG9#|U zLVM1}WW}q0u}2NL<)M|rnsDOe*kRNiqhB#vrPJvyJ3+i4THZ^(AX#&7eYCL?TZx}k zr&341gkAo24?~Tp%uB<=Z3~B4%OA!5=!Xy?L#Fz_)f*1h-)f|S&Q~k0=09Hw3nuVN z2r{Ph8rVtOWgX3o^!lQWPG=+c>#kM9f5sgdg1<92odE`jyv~I3>`!IhpFy+ zX)nmzX$*!7NM^U9>61Bp$w z-ciRepD90`MQ!zG92hRy3`A~N-+v&H#^;DtJ}hXC)ZUZS9Q^e#*>9%&V&yz#elR_r zP4^`*!Dn&s=O)GgPeCI~cEID9pLkqYOUE%k!#(m-%unsl@Kjp+zVt#T=Fmr1Y({L`}BqD2W#8H>rDh}^dh1Zv*oaKd%2En4g^Zjd?@InvTtOlpg(Bn4dzHDghu2 z-BWOfU> zKqFAWAc%^6QUk6f{ zLr!wGa-=X|v*Na@1_y=%tu9wgh^Zkb)BMU5S{3ZXNpXC~%J&iC;>x09zTReUK4Q0mY1YT|>%RWOPvX^xW2Aoqc+ zC>EFJ4IFt*4h>wVl`!!p#mW1=D{C$uh3NGkwE@YG*USj%B?vhwo4*=+qx~qcmL2}c z8vaKgZ1;hvA8p?{+_z_MmJbMR4c7E_*hq%+T-BR`vfw4Jc?S)|Aa78pj(}$Jynrn0 zhwYv)e5`6#@RzY~2Q;ZT7Pl^$cO^FqjPT9v;)2iw@t2SvmfJ9&OBB`Nk~u|$C&Vxn zat=dDS$dh8cG6^j{bi0PR_aARh17`H^a_C5JafoxDa`{8BSeEX5TcwgGsCLu(t3lh zV3Lg|fxuYZi0y%yf$Vr0!)()#iR8KtUc&2l^3Q~VPz(V2Kv<;X7?)9eHDCxblR2-q4m-6AiW z^1W&!1A4eb-IX@aOI>NsnQh@EAD>E;+Io5GiQfF8u$)8Wi-I2ltCSM-keAnO!V|eQ zT^O~8IiI(LfcYO-=tZ&SZU(nHOQ+y1W{rH!pf?$i^*xwiy)TQr07!oEV8jE1e0SPX z(%oTPX|GAwo83u+c(LAWHR7d8BNTofH-+eo*9;N#*c!YLHE>5qL#u*UZHX_iI@K4w zwTatoaL+3w`^6PN>hv){#MTE`ZfZ$nZ4v3^ZJ9V51)f5O9rTHP99ZP{#3jNN|Lhm? zNKBs$aA^1J=uOX?^ul>Z|Cg=S$8w3(qAk zxsVR5vJkaC4M#67Qo_+IoS4y(l8*owuwwm)UV_w#`aJdpVIxzp8hzRK!sQpfd8@Ub9ey`HQ`WjUiAgbDpn+ z^RfV+)6-CuWC06%&P~Fdjh@F5B)azb$N8tGuy`D$l#TK8qerANEA9)UM>c10Mhwbj zu#UOEN;crvcq&EQYOptYZFJD)+UcP?1%WeTFsnvXD)Td|O*XnfQT8sCdN<_>`lS?J z0r3;i4EKh7m3hzP#431`{n7lrk|UCwM&tJ-b7@TlBnH3ez$@6q%fE=~>hob{yt^Aq zeYXF;u(u8nonbYucul{q9%$trI01Mh`enl2rE_^D_OwYOIU;8=RlaC6z5UYLe3FQj zPlrYGd0ck9N24D~H!QE4m#xi~^*z4#l17k=JOC(dsGj$*TKzd|ihfOqxyR>bE;~m4 zENlUP+InOwwkHoCdiEBJF}b5Y+hZ*28;DKYm-J;aqzPpO1juL+)8bZerW=k&z=n)f zub)%JWcs|d#XR&qzXXw6F{xhghd5U9)`|nvipz!P1kk&J&RreyQiA7ALdNEf;%te0 zadW3?&i)e8Lz`RBbe@}GR6Z5IJAa~nX+!+|90z93gI-49MVA2Ad) zYfZnPF*O;T6jr!V@F3~sPhTo!KS_u0IzyT_tl|FhK8t~_*8MBYu{WnU+}C9HG_5R% zyy0gC)c_xfU3K}98hs_s6)An4gAfTw`a$PioxyaJfO zF@LU|2=7#T8LGss1R^DkY{IPsrpjaxyoo{Yb2y(so~qzhW^}ZP61TEM(j#l2U?wEJ z3T`FfR6gS>xRrQY#4=XJtpr8L#Vmb8!X?;3@`kY0rHWfw!ig!RY%rBlEwQc3pcN~) zm0*hbq#-eDKOm5STd7uw(O=0C-UA>_`J#FRw^A^O&fxm87iK7)n1Y{xTZw)6Nw}2> z3o>Jn`-3IZ3&W?dN(C4m=Z zYgPV&1Epc_=Yv*ehzLNC^1umrQ)48cDEsa>Ze<$daokGUYF%B!tz?+3BICG~8PczY zTd5&7rqCFVp;P8D)<}-UFv#|WI&LM1A2Iqza4S)J#CL$x%3!tVJR-xyV?30MO;L7u z=^4OQkd$7>3QQ$+u#TEMEMY47yswDHdvs?8Pby(5IZH=j6_`qKlXYbUrZV;JLGBI=s zQ^~Wa{>3UxCCuz~EnzC@Yh$R%3QT2U;}WJa^>l`*6z_WVOPEUWiqSGmC8|4L(@1tm`V^Seew%K zT+aG%E2xwKW|?3rXRmi`Zk|stl?jzH!&FL}C{Ac5m`Y((3ZYVavNd71HTPP$6ebJUW63>EtQ|q|M;P47a$3Gq5}l>)?$iHg1Z> zjbk_75c(h;yaukJp)*P;76^$a7gGaBT*wfH6mt{|@#Jz^*GwawLB;NUB6z@)%RPb) zxRwe=^fge^2B7sPp#z>=?h$anT&^MP!>2rpOu5H{1D;s!QEb2uQ+IgJohVQ$-J{a_T*5hl=WIi4m@Z_S~aFc7i0~s*GI}RR88n#NKFFpww@Whgj z0t21|<>xc%zvY2q6cKBV+t=iw7Afy}Wt9tnnQObn;~l((jexJbQHCGG_x@OfZq9cL zS=Y?z;SLWz+6Eh>!GmEQ#8H?7Uk9&zf81l&T;mmX5PwtnU$k0SqtO;p7cD+x7=0k^ zJu61vjD#K*Ydjl3pUW)IbFI?>yi3UY7hoP}ks#S#q6s4+Xk6QP zI^D|$4WM3kRpHUBxPT|OX=H$N;60|mbAZTLJHG((-~;Z&E(jTOx#5;X6u&zn$pci% zBDhH-1e9)4p>PgEQaN>#nYuls}6|lG^`wYw^y4QnKu!)ERa%&DDgo18yWm?4TMD}6PKu&J5( zb$^U}tpSGkup_7>)yH^G?~q&l#faAD6Y+96Z}`xGCXl_kn+iabV{&>4)u+t0I##Y& zCnLkC(Lv7Z*rxy1Zdr=GCic`)E~Xq5!(h4)^a?UTvCex)TwrP3J4qg#CPG{K8t)5X zG(YSS@R4V@eAXL@V@z(n8vNX6$ml8@700H=BlKYO4tbiJ2QdzEVhF}=Wq(02)Gs>F zS5pYFy2kA46={Kp*+ro&Ooz7QYF*Lv_m{mvzs#@yLb}gGIa1aqPJ={)z%-(Hws07W zLao2ujXaH>tATWT+Pu_e3Fp9qbAfIBPid{tfY8;^g~>&Tt)86rq6xd)1F^oKWga#+%6iH*t2 zkM?wZnA4_JWa44!nFI`SX5wM$nym1mPxFw1vF`l^U+&ok;WbL5G6A}ky~)$$z>ryW z<9^>;u9sZ=^a|@Zmp1XKb}iB*y59#@oE~rS&h9?i)6Jz*d2#~f6-zR66Uze*G%P%} zsuT&iiHE`~EAu~E-yHVWF@{jD;aJ-Q1l{1h?a88UJKjT2#WnF(J#86j%wE$M`GB5Q zvl;u^qrKh!gUURT?rY9i@y~$d+d^dRt~J3)A2P$JWq%!9#cmUw*J&SW0h?qSj%?oi zLl;wNqb7cZlqmkWAkba4jrY22SU&Tg1GYXK4S6k;&vF(T^86fYB##O6Q7(O;rRD44 zU+(n(NX%`3JSfEA{1(JBcMuIs_7q~4+2OR{4`=nxX!4-pN*+du&A8k_F zQ+9Dd`;i5)lD)qWke> z47f335sAnh&|*dLgzGTEVeUzneWYL@h84)?n-+Gku%g)R554@5Ek)TnRMRC_s_EMt z=Xl8#%G{J*?uLKw(Y5sy5W@WU?s|2-Xd!`73}{%lp86ZtNI2Of{pqaE#6l zu!C*a2khapd@D5mNQKFu5=cBbPlzaN<#wTyKIi*zV98%VyL4zp}YuQ;t)06LT&=_gR%O zACN#}4OdV{9((UkJpm!__L@&fLBR!-fcZ24T2mz&_LgaK8NpvJ z4&HDQGs;?TGwO-axQ2FG;(x5j(%NYCO|KZ|adTgSJeEEaF|A7zFHJ@4nS9pS*L*HA z3ovr?2^W)51idy{TY4~QEAjV6tctw{V?EE3&J)PcHwuB6vlwRC*@z+Y87PQkJ|i9? zQv;S}XOL(%`J-HTk}tBNVf+@4h%6SxqrE3-TSSlF#JbEjK-P22#8O8cYjptk$Sza| zXJg)fWrgLhtu^%;0^J6g`G9KUw9;UnCjB;bRgX_P|FZ0$^gk_=uRO0>KKFfL6M4T%m(68q=JYHw2zC{`$@HFoNCA|@}Ss!tg4o5 zbzE^;WRX)g3eW;bwYRT6mnD8dEraFZ{n6qG7f^6Zk z{Uxn0wrOc*b@DEzZObU-MrPgD3D)$DjK1r@Fy5c*dyysYZLAgRG0{8a4!5lh)yfVf z3eDN(Hp*#vpX;+yTB?AtzxmVjrO{FFn(rQdOFnjQqp8iR1;;-$?XH$-Z%VNy*}J%^K3eqy#X9X zAM`eS37YjK+PIxN(nuhI68#bF)YN*jC_+%AIyp@pR!UWkyT6c*h2YoVjCYfUXOEgm49~_>;#>vXwgPRcHE+k;*BM~eo{ZaE~HK0 zV~pVNR2L#lkIG}$$kemUd1(@SqQ6rO~4%+9YbCq5S7GaO)B719SzNBw<^MP*JtG0Aoa= zTph%yP_U|*&{el*>~;8Jf>>RTIglsM#2Gbac6xQZrc z+74rvxJX#v^_1vx;!&3OWKfb{g2k}ydJ{E{?XP9bv%dw~l49Sqa#&TW7~bi@y0BY$ zwnxvrfl_LR$TVDk+EYF|(5^L6{4g%nS9>Un`K4VvzuF^`R+PN8FNH1nsELNCi9%@D zVT;9Dy|~{S$+Gjb%}$9piCJu*s=XPJzlBD+G(%5hD#D#Y$r5+ z#+q>(z*y3>jfipf*@!r2oBH*`)<@kp&B4nLg?W_|k@>($ku|g1am{qAayYNW1qrrPB9 zX47g015t&!E8=z!OY1H!DOq|E)ttaZw0Ry$H~jr#wrluQJ*1Rs0Pe9_r*1S)NcC-D zVfC;wxiYkqvc!YPy*o%WHjEs z-oYc?=CycFl37nEu3XZQP!u^Tzz%*6wr;v4E9=awXfSQRZL)zpK%`m2iH2#s%jrVM z#texKF*lSR55XszFZog_ukZDCO>^2p(dn;$?&uqK3a31~h#;X=MV`T2QKf8M@?4cz z1;uQ{TfB;$c9`P?<_4GMEZWS@qzn7k>04}d?tH*EwGP7X?4!f6?{X%#>gMlS3bwWe zl&733(wFTpPr0s6Xyp4Xeaj9JEgsA~xeaIo1yAl{Ifba{-1{%!Z9UyV<>7{QN38DP z{%JT9Mg7>CGIzU}d<-V2lNj02>!xLoIUhNL!pwa7id#!7#p>;QYd4p^!TTK5=$rT8NFX-n-|IG~VA+&y?cU1YXi(`E zo~o$s@pCYNS~Klms_hP|#yZ7KjX|z`3My?pF$NthK)p{vr9TCgKFS$FA6>q&y84Z! z6%Ld$)dT_OTLS!Y%CE-XSzKLPxLdr#QgmnO-C}j|FBUk*R#U95tt`&3**^{R`2RRzBs&t@$ zmP}U!8-6lWY4Z)9&;Fr{x|dwzvB&>FsM2vvsiI0F+L~Tz3{^VG(&1FSv4tIGzCsJ4 zom*NM1Ar?Xwv6Ec$kT=pF$Q=t6qns}cUk|8P9Zp%h2F0$)R^)|NFt;!hK_$!L{1jkm zBu*KN2#q?@KMhzKs}H2L8SSv60GJh--_78tM3alq0IfTguCafcdR zbUd(hycO`<0hW#>>RExMxgX7fz+WS$Zh0d<1(xQe2u;Y; z5r6A|rE71^$$0-ad~1$7+mn@@sBoY0tvN1v8!fkl*8r{EUg7v4z01m4v9fe;ZIMS$ z(fV<%+rq-0xyvRL_i2XOvB$OE6Qz(Rq$33I9x*TO4a`;%G_PDhRI8851 zS7GQW{dgr;hfJrNSIIh5lCCnz^xOW`M)l9KUc863Iq(j;BpA}nsve$TO(Cun>NGwq zBQV{9i4?uj3hlp0|9ER~K&q#h0M1^+5V3Oo@J}k$nxS6Ym2#g)c{8<&&7_)<-);z$ z#A-$-<%*GN_u#SFUg7-bR})rPR9L52?@(nQZX9rL%Y_zcLnUs9*=CQ6*YL?`aZ%gi zPL|#>?+H|gwnWQ|gWr{=%=NZSMb87GTUcoD45l(cbOKjywjf6;*|k`wF9mY&5bVgfi{*LVvSxdK{L_qf`RS;$b3pC0(j)(?%uf^Y3GaSzb{N5usqh< zTuU3O2YIY*=@QkZG_xG5Ci<0IRhge^+FK_X{L||Edu!7B7Vj)A-C>Pw>n_`*TZ5Fc z=v5vSG?kRaG#WlgycsTV^szPKxeYaC1rJK>E;+fkx$KnJqg}~pM`Y%sNZLWmd+~{6u zb3+@as;{nL4L;oKjjGA;=Hc#?WE=+V@b%drYRpQ#3!}zm;*g&5nZ*_26)4V$=B)r2 zTUzk2g!<6nnPbEh9|Sk9DwRTM)P854D}c{rtjTa3qm~NGi@mMU&H)|=7*Sw!K~moL zroHSnZEkiRazh<9nh7_FlwqOyaBHj2GK;qdCbh}S)j;&(Wdf20pN&0O06Aewo2`n4 zozGY~@qrUTR+-es_ivWN#8|R9k(pZJrpot9CJe{cYFs>6!0{`&7*y+2W|b)$-yM&{ zVKw>qsDOkKJ>W6vA|`+kLB~^tD?&{fiPN-oGjar2d00~vhyC4ybN6{TDoU1wXm&bD-&Cdz#F-)k=kl|OoW zWcFj9J_vW5W1l`?S@t!coJvCz9q0s?eChgX+-SY$F9_(cqOk%ol*MMN3KUx@A%utH zQ{}Qkj!gKeTBhv#AwVR0P9Kf|`v-$PTy|QiajdFr`3?Vo2v{#QU^T%Gdafsd9p4{dSIPM)hU}5F!r#^rnF*LS2#BX6T zbF)?MZeuSXK!4f`2+A9qTmRr7L``j%v7s5Ux4*&8r<0q-I6nt?tl6lSJ8|q?4pYp* zFcm3LGPbZR49p=du$l-8(ZCba5Ei8zY`dET;l$bH46CHFmtvG^Tor386CZG@c5MkJ z?7BEbU{x)F7873ER>4l}a!Q+WIbyhTINHQb1ZLob)xd(abM5i^un165rkv4jnOq0H zuZJ+}YoQpYQ(GT(zV5g%zP>Bz=3@+l_c!zU2?h)CWy3heNipC~ZY4QBV{xu4sl>(1 zmJu(uJ+_k^?bcHsKwu!M4NgMe=my{y@Q>4yx6fg*jpH)Fu@opnE+;xnh|W2!X`~m8T)m{sQRWJ!Y=*0}FP95} z!^k7dl_fFen!K9GWi<7tigpq?!`L}B*gP@ z(hQ+v!U*3_8*c2Hp0@<%luZfg*5q#Qd;92@RG7d^8FLlb-x;7eQBQ)PI&0u=!1ZI= z5Kywyo^IG(m8LY|BOhl-i(XcWRK9HR0@K@w^98~P%)P1HQtLHO^iu`bjAuEeW}F7< zd{D`V`t`JoGdbgoCV%ylXlPH%39MCovORiyQ2nBOQckWa z2ztn4xqHz5rf;Uw|MLBt)APC)wR1v zzQUHZakz_%o46XyOS%pNs9r~SGuB^e8ehK@2gVg31`E5@sSQ~#IcXbfYd=&OK-s%kp>u)vFu$^CAUAgfVKK{J(Va0>m zuhB~%f1Wjy*9q*y`zqA$L(WRKGw{(oi!)6Ay>Bq|_TevU!Kp5!T71~(cxnK@jav?x z@y8g^i=%|{q^CH-M?h7OWqM_hl<56*a}fcEq!q# zn8JfsK01J>%-#NEo?>tEk^Z`N8E*PdY0p$s&W-xg`E){87l?3Whqp}h%F1ck@%QxX zy!C+;|3tO3Inc6t@2n5uO%YFD3#L;sdh8)hQ6E!=y@zLjYVXkk4A9+W$X$?-N^jmgRY6bkB5Gbyr11W_D%G^q(2c04>PQ8p6-d4u^we z+Tn0yx--I#v0p@FcB6Ut&$Gjowx82~A~K2|X&MO)Y(Ovq1QLHX^fZiM!;TeV7PDl* z28j(4V#5{*76^&Y_x!oP`+M*C*%?_i)TpbJ74kdx{_fv%?>+b2bI#Y+K7V&up!T=* zUad{SuaoG@%DQt)&QYNW=tuoLq@5i6(F!Z)*9* zrBa-qTuMzmv6G+QFFD^t;8f-)QHI^EHzK%}Uj&ph{MMfCIo<#aU=)`w$nrYA(HCNK(^d1 zIChklF@5WR*$k}vw<*qV23^W1Id#BnURSMk7FkAAJG z33D9mo0dc#TxDqfsr??$3JLk9^FgxFeMgnFt z&BjjcfY~LuFwWo?sDbyR6`Eq(a5cxHVXOtRH57BIUwla2+I{3)(>l!hC;E&B|jjjh#45N)Eqc{xoG?Q|Wy)dbN_)@p)iCtKA) zv>9#hI6496ckWU_YJzAp)+LuWllzf3vk9WjeaJ~w5N$;T+J5#dEGWF--)f zNm}j)O%UxI=@LYn*88;G#!b+piz%|A(@GHS65UPbmhFz1jl@J6$vcTzi1(-tqK%P9 zG`0lMRm`z{Jb$B;+6aNi3oXLe<_;wHw2m}fwpfSu`;zH6q-B6_PuR% zNP{hN&*lLtSz#x7H&dRoTT!}E6YefUMuK`XZ?;|B!T`psoOp$ac6^`fss=%Crstml|D zUJCYm8ofcyqloSn3le2swAk$XE-!dIock9!7VU8E?EUCNFo|MGo+bTx$K$zw zo`tvKxx+$SrHMa80LIfS+dTEBlsy*Ey~K*I1G>XkTzStHDEjnu7JbD+8;|Jz!TG5o zZWc~MlnPG!%bsG^O_=`K3={0l+3I~yOfqMsEuzWs;ZrJR+xp2M_7?)9g?!cu&2IYM zh{KX9Uw&da#9gx;$GH^>B0|pBfmmkdwP&)rn?Nig>9#4N?Ro#TxzBSC9im{@1^A3h zD+;0B4Drakadp^wS20MV zx4OLi?&Y5d+6sL{eq>-<6AMRyWyQW<4Haf3n}o)ph8s7|&)*0fhY&1^Y0yR4Kajp% zfxh(q!tXB+6qttx8vn_;iy@byIp}?dbe?y334p-kh7nL-oH~UwDkwuB-pInUkr4*N zJ^vkrZl8W>zflAD2fX?k0TqN1cJ;z*6yBPQa(Z%l?6vS9VwAl@;Cd_%Z~sPlt-crq z&4p18Wd>ywg3UlOUOGIFAy6QYc?I#0E?U7&2d&h8(>)&n2+=zqfPQw)d(ZCSeY3t> zeP>OD9P?CII_DKOo%I@=vSM+HYYyV%zGeEwRS9G8m z$mpgGW?=SNdViGd7tgOJa=+F_EK-3oz)puYronZ*Q}TeRsAOTG@w0_AK;Y9%O%Wt@ z1j($UNaD8&q5+bkYm_QW#P~LvM+|FH5yHk2iYrcI zyIoeAN9=C=D6XLT5cYDW`8Je{2z;}4Kd&{93QRq!c|@X%*3_Cu-sz&u5zQmA+GNcm z0^DTHBhPL=0;8J82CQvV^N755iRMvCDI1e9&0|4r8`C@@p+#TXnn$UqY>0~f&&Qny zi&@(O3f=Eqh-0&M#~sl;3LVbqje;=>!YRk(rY0du!qaY&<`E5+Pg?VV%TuVanu$xz zBQlofZfPFzgA6wx-3*WSy+%}7J_&8jBVtepe4aUKD;q#t^N0sy4CJWh5vRkLW9jT_ z%_B~QUc;#7(X?N-7maBi@jr}uYRw}tM042`s6Gq`y!1-*i1C2a$_oeHT=`{r2WgaH z7m53anL)0>qKrfvHlmC~85UI*WhA<=Xm5kwCuNxLv_S)p*t%ys&P~SL%c2Xmlip-voB}|k?PCp;AHq%OuP!|{ zCukTAJJtuH)-WQc#1s?_V+JdGr`9kcxy0ZGyp**L*~O`C4Py~sQe_x(Q6Mzh8b(AJ z=c>#elZ1TZ^tOf(S;vF5wl$21GEQzZj0H<0HH=6b^TwEM4Wqy`j69-Ylr&*O*3vMV zKw;z>j}V!nrMN?&xKgmWRKbYkG2_QtTfr#k3?XH_rGgQmL`tWTb|Qus*{W7BBA9sZ z8>B>o%LpAH(#X^fUaDU-&6274YxG3vnmD0ddFl8Mm$En7+1X3gi%2jiu5?@YVXB9U zrUeJ%BjWghw zQW5#aQ;LSJQ7R(i%%D4JD-|6Z;PRmx(!u0^q4-e zD1|G1BGMCf$1LYspNOb5t>kfa;txjDiAYw?Vw1Fq60v*-Y-tlEW*K>+HW7i#H{x2G zD4EOevJIS^wx;XC$;tQKH|z>dPJW8+%8VGm#-v9!A=0(gkQJPqeBx~{uHod&xA_~v z$)VU?a1#w)WLj`?jF*)U{#(My&9~s>u#j}8lF4Xte}V7h@@?lOlAnOsSg`=Lk?>Y% za#-t!Jr9K_g!BxaoVwYgKT)xl;mOfZne;HE05AeioL~CKn*9yE07T5Waa4tZ0QVIfYQw%#gfA#K6;K(I5})tQA6r*QxIRU zI#FFo(`0%l(|Fx#P~TEc9D$R&8?qb_U-@Q_k$y167@Sjixs>N`CTJR>a0s-CnT8nbl-muQoVwyKZ8e;n`eM`yPL8fvt1CD;Cdiss z!O7+HG;ngd4B8M>aB_&g{^h$hoE)=~y{+KnQlh_I!O5j?Si{NX#cC8zE_aa%PA>Va zf|JV&dkapEDX|8Pz{%yTG;nfAyMFE9^9D{Xr{s18Cx?_`99hB1iN$QNTX1q+VAK@e z9l0#w*1W zlS5j$XCqX>$?2_?l}9TRPHwvRas`|mdPYA08#uXO<6r()6#u=z$w{|e!O3Bj1g2bW zUk#ibmhYXew&K`k6Hbl@m_li=iZhLm{xm*dF+&k-JY>gDO8e!KfE z7km2|4tEC4Ln_ncT@o;le!FM4!|?FCiKPFPk{h%gjxqgqpSgs`fl_dGz7d`rwYKr( z8aBgvcpOjeio>jXpO(l0kHLWREd+Z&vt25<2E0s!6A)6I@PsI56i-g1@PJb;!;>?b z`(_CMWhe0DL>|SH6KxDn&WOofEj+pD%K$t%eL8|ChpVkHCYVb)?|5_D zPB+qPfF$v18ZsY;%ufF*I5|gHZ=jh*;N-v&<<{zo2_hg*XJB#96>xI$#4d1h7L07# zA_B^ev!e|scLf7~8#uZ7tKsCZL!Gy0m~l8cML251$u(?s_2Mw;VFH{S_iS+K5Z%V% zgAu!O6}3Y~bXkp9#FD>!Eo@ zQpXfHIU#Y`eY*uG$Fi9YC#O3rCp70%GK2R0V26N{Ll8q+vAa6igg7V`8HJN0?7<~) za?_UUPXSI&@AKF8@>1 z6=uvQtTuZfFhYi@Ux={ZPUPRWhm+Hd0_~D%OX3RQrA9~yslW@I9L6G;U#2$5wqA#m zBjWt^;p9-_bQb&`S;5J1V%k0OU2OXboLs8K{|y2l5_19!H#2j_8$^-CiQ;DFMTh;@ zFBOeT1h+53qYi^444tIh;=lWceV)otco~q9{eHD)N*#A_GY>q42?H1`MgcS^Tw9Ic z$}j8gyVeltPv472drVE-}uMU+UEfs|y!$RLL?}9b^5nd@kbqA7HpDor@{20)yl-!t z^j)@CHo|0+V7z!24{dlK3oR%`h3Ni%P=rJ`BMTt*YAF?Q>5s}e;dQ@*a^`^tiaHI_ z7J~qYgYOg)prIWlO*g}!30KYX={6X&cvZx1eKv1_d~LA{gapbV4Fh=1%y>pLRL~S} zpx6MI$$Oy&WkSSRqPSlph3&%!B9v}oLI$QFc65U8o2rJmbDs|_92g;l)Ge-n=fghc zm7**3zPG~0#CUC%(pqZ8NYlWql>X3v|Eb0*FU`4Yl%!>BkWX%dnk#+XAP>Q^I*n@iwrHFQ& z#s!ojd>{kq8cGq>o>M%!3`QrHZyk5;Tn|bSBb7FkV%A$hDSEv~yas>>lp;1P(`r^s zaJE72#sbdfE8DIKa;p6X=FXBjie)vWq)VU_|4SB!Lla^gQ$s1{Y-;f+o`s|s;1*SD zEImU~#C8Vg7mjlF=~!x0krXL5&Tw0m#DD=`G0TpZF{Kp!*(E@VvOTVW6fGDy4g0A9 zDPrVf9QwXoDLfJ*yDUaN_8i*+Qsm*o&=r0Gq-b~n0uKBIkm4_Z6qla$*88h#z=o{} zr_?|S7J;uuGPM)opV7){g`5-y)~ta^Vfm)3B$uKQAVrMdY^?>Z2!XWm&Qd`^sGvu{ zQ(52mqW^gH$!ZU8t;v}@)#22}i;(Zu`m^5RZ2k4xdT;g77yae+Cr=-*^j03?z*Uuv z16P0bDXD8~E6csr^|ffgT%BoC{$)!KA8stRK<%DwtoDUgw+y1Xkm~}~DcbdEulIDb zFO(Q?@fKTHc1_YRfE0fLq*!yBbH@KqK#GrTU7S=vih9j&fD{S+X@b1Rl<#K5R|UFp z64F8l7Pe!I;V34u*v87{)1O-$MNAL^JbpViBOnNeg-Qm@Pf)n4Q53UGt&|&= zgD7G`Jv#Wm08v~=O8LC^a}A=1xx3BVpCb@O4E2dj&7!~@KcvCwAc}YbVPOxVpkdWX zrEW*z(#{S+h&>2<3xN=66N`EB7lgp8KosQ$hzSUv5EDK8?ymw-#6+I3yZWZVg1ihw z5hH_HEZqSuY~w((%Qc{gO^kM78_r_EPJZlAJNAljC5R$s>a$p;^GyQ;Y3-Q=qKLx+ zPvC^xH2_Er=|m7ktjPV0dqmiTHAPI&-VCIoQZ++6x(Wi#$!N$x$~T=ctFQZ_dqk5F8K)xD;<7x{fG zzgd0yYCbMuHOX1c?_EikULx*XNm?6EkEr)TH5TbKV4bl^{bWk=N&{5*H%={XGFE#1qSS32s(@f2sKeE$iu^f z9V7Y!i&M*EnJ@>hQkdE!C+{czY-GS&;qBy5ABKIXU^=GavkAHkM3HB6VG({PY{5PE zYZ<{%#68CWyxJIw?3`}k9*BVUO2eDAn?6?7>f7ejmfsW8bi@h_6mj~57=!C z#jb2J^ioz~DDt#Cb)@dzpG|wQ_zDa~JQ}8bgh_M>(LD`A(O;o~7qs{9RD|=hU?_$L z9#UW^%97OHgk!{LOUC6;IgX)-3-Gk&feUGmK2k>87>;2m+It@5Ifi1>u!5lo$({xZ zh9ZMh8dhN_;sO{9s+=yv+Y`S}LkmNZy!CTl8$8NpB# zaGl;?F2hj7n7jJ8!B8}GyMm!eF1xZc7>Yuy`>=fcHW-SO&@%2Q7>ZrqZMpvkhGJIT zU?}QCZ}T(^Mb?Py3F7E^r@>I{;)1Q+#bFM!_y$9zU@9P{E@Pt4IdCpb?x;)KJ-7;`c zh&5+({=cb=6=6YcVgh6Eg(3Nws34r(-b(-3nm~8I2uZh2F)&_Fbggrp_+n#~k3H2T zpE`AQt-oSv{gsCZDy~=_&0udUn?)R{lQ*AjB6B=MC(VXs-SEuT;+2h!^$l!U7F>M% z_m$pgPgaCz`FJ=yaapp<2e+o51miuk4|nE0ib4@>O-zx>O_$jy6;txv&M z#+|gfNUg5%6yySVMSZsM7`9$sS$(dBW9z0${gh?So6b`M*UntNbjNaSHs$ygWkQap z8|%y5hRVB9m4!dS?tZq?7eMUl+9yN+9O+w~qZb#Ms(=UU55H)d;CGrT`O*41uW=(? z@rR_bTvb>6c2ni>A=xa=j62Tc9K5}ajp^F@#uMHIqq*8fF<~3&YMm!HTikO-axH)Q zZ0)m^hpnP~+pJpC%2di48(eD+Lr;r+_pFNWp{u%l$>3TJ3K$zzVoGYx*-l1!z@DEQ zAUlB)xfR#%hsLyE-i>@0YKTQvl5Lw4z+f>g>0%TD9AeQ9O#*{e{1fac$cB2tl}NS+ z>u~rC_|heVFJ(bhnu-3CXPaEe)hYQjXWMw1TzR_mn3co<`58CpYPI!c7*Ntf2lN;J z8~d~<@maT+Q#7!%ya)p<7#qLC&K6&M?b4vk@;i3OfSnb=ZEYJZdhU_|wgIBX&HxlA zq4`NVaS<4-u)*nBN$UqNU)d=Y^Un~CyLzM+4q><-3U^H)Wom0z7?7r(dMaufrltB{ ziabz{=u%jxjiAnw&<365M5sY$c|kKo#tERaozr?UIjX<0J21ruCrBi9C<#b|K~=q#yk4?4@! zX$PBb;qC#vO7yfdts}Go9dQEDQa!NDkB0>B%mfSj z$t7NRtC5#$0C9ScDS&YE7ohoA2@IkvoF#a3f>R{NJq_@X#9&OFV0gYaM5ssb!3{o-%60Hekgkj+_N;UvtHHXohWM(GBL1#<&kVe{{jF$^C zoM|{%OaZmb^ua%uz1Xtn^(E~JY_g4;5lmtxxj(K!v?3)hyT?X7WbXGd^tdDKT6!`O`D+EUAOTw8eRr-Ezy&uiyjI^DkzIP)qI__xl% z>0LYrJ`kuI-3b~~g7^0X*;;U}(^}v=f{zct$=iDepwH{963nRIyuJf67T}Z?ndv)d zOcn!D^gFm@@wfRl{t7sip8Gu)o)&v5zV>ZYzCn zI25*aq<=4dW-F|`UC_I-^#Pig`G3uBhNs-+WTEgonk5GU_WN3aSd8Lt9>ml!5%UrI zIw!N5p6_ZZvQR-aerhuX&3kcKJ&TWG@V?7id>J_79fv9%=|%s1_$6Lk08;XyMH2c; znS-xoZX!_1FS&23cfW4AOR+coW4TZScbF{)0OCTb&2svCr{JC!W~3ftr0?2}8{Brw zyd8ZLj-tLRog-sph9%!im1J=5ubBptRAZcmu}-6K8y*25l|~S1|A6~*&f2fLlgCED zD*x&h(5l|9@0*W+#(J^a0E6{T6IN5|LP z_p&Gi0!@RhgG-uKN-z`miJ8pns8nRXVpwk;0aDL=4GNH_Q+9?YFq3oMKX++I0wp<1 z{`L5sQ)cdn47j~}oBd?!h9jz7tPmiHU&3O(4Sg@t_|Eo(+m(pKWE)rhb+xEW^x*5k z4q9a{UHhkOZUy?g{*twAUw$u?G^ev&`~98MZ6@CbeR4n9a--lf&_BqU{C)ovrgfLF zzci9y!cUBbW9^P?Wd#}Kuc}7}$IPBK`=)QK2nNZTdQ({*VzFN+A4F#uI_cfGUwnx} zgZPCl?eqwb>V$0d!B4U81O$>&$ajdrlt{_H!kTc5*$-6N%k%S-eu{&M(DL0=+o(L- zcVAaOew9rNrH<-1NOpiQKt!i_JHXD$ynGiDr%r&`?rdx7t%pCT0cs&)2;uIef+@|I z^NJR1eQd>?SFB*$8CqzU!YZ(m+cD?4$%dP19dn-RUwGuUW6mowu#f6!%y|J9Sn=a% zmnFol2f(NO9_E=jib}>}&ePqfr;a%<>;h-q2JKR?1!nD0#he#lfzb+xhJXsHacqJqgJWF3nlaG@h&J$8#-%hyD# z$3D^RX_|=jm@7IjWyE?R2-xZHeF6ih=LE=&av*rPZ|oMM97x_O1-$jsiunHKH!ZLL zYrF+=j}McH6pKDc8CX%V=z~;ZDv~RTCm^yF-$bm(?9WM7eq>{1c%MtedZ7h4|1=Tn zg%)761|~B{y1-M?VQi8P`&Rv}}( zu_aP{feR=wnM7mtp)N3)Irar66Z}ORn(rq}Cb*eKXu)KHo#|p{#Hh!D$z${um`ob( z6CV-kg%V)B?G>2JyB`y@V(XNk3XYO_@7`PB?@S0`F9ZP}*)~XK&dRM4!oJ{U)*!d{UB+%dKdh6&dhvyOzY$M(Ye(F$RY<9Uo^9l~Dz5s0RhJRZz`3>#A@tj1%LqS;H7GFE%P70tdtW=@P|Z}0|MJ9RXBB&!h0 zW+S}D404ssJBP0bmJY5W&G2UxQFPs(OIt~MM|rP`uK@~V1k5k-H4OOR?c!?)7t;-; ztN0o-2yV14;%lH|Z^zf*n^t@cVIxePh>UVUfIi>L|B?EmH)d>(hNoNm2GD6iAAp?e zb41t>M7<@xM%J5AF=jC3xMCyBn%nU;ERL{r?^#lZlBTVIOX6$%!;G&ngE(5p*C^9j z2iRcZs8dg6qB7AS39{G13fidEoS>`oiWG|yJu*vAM<@+rlX(77-XJT#3fGfQd~ijC z4FiU#B5deu`}Uhe*r+YyXK?Fr6h%>OW|7-xaNe0Qk*~3cpTX0nSj3aT>oqQ~EaG{Y zHVzEaYr;E?Sj016e!evp@iRE!Ok+c=$BA{-`f7nGm^SakhT$WNAg7}=KDNgG{ldZr z$3R6Y79lH!&eyEV&#;J3-c=5>h-bujR^dM+7#}g(5}1%iGK+ZdC$8!f%M-4Gd#qU_ z7V$H3$>=N;i}+m2vR{vu=?RUe2g~9uKio}tDX zUi>y`Rm)u1P%^1ElMt2v?EDDUlyk{HWx=b2%`rOkxQqDOZH69FYv>y{2;p~7 zz)N=)fHmx?wQ++Gw8w{qW8TIMf)b3!bKw;?h#5J@6gP;hx^aWhhgS3bDQ*zj7$>_y z07syng&RZ`-?%|E#b4?M!ADx1+49N_Lf|8f8$=e~xIr|9U*ZPwKWSeu8y@%$*8ds0 zK_DS%^65p(4Wj8>xlQW1&xQkHrpJfl;{N5@WK# z3x*Wa*8m1LbLU{e5~E_$ezrit9ds6#Z_4N=q>UIs3cg*Cf-#JXh<6EAg=HNRculaX z4$cjHpi4smtLn&A;hTU}VYEjf_88EBRbjGsty11SJls7nO=}1B2VbczKOn?!1yW(=QaF8H;Eb5L6WD9=S%onNGNhskZ#+qEI!}Z25^P%Dj#nw3wFOsAqOzVL=@~NG%0Zs#}@<5n&aBxq!46F(p#_6m>(0n)t ziHZo~CS&}23`0D+F@$Wm61wd5jvy$F16p8J!s-c~ZUa`uy(sdIfK_$S#(3@utO_km*KPy9(FUtRGvkL6=erEnro89A%0)bAItDlUQ+SlZzP-@>ZmE}SDY39E`5ZzfNClbtXc*F}wO~~l4J&UG&l{{Nkw>wrL>t4Z zGGa1Uja6k3lb0*g!K%`yZLBJJV@Tz}Tr!b{`7-q~kJxxu#f)K9afhEaVw16|{*If` z>c+s09#jG8+4Y)s(rAzMQ)aeBdkmqd0z)ziuqq25F=YUlH5Z)t%=Vj6uqtlQ6<8IQ z-mALg&v|!D6{|I*_r3IP`8ffrviK7|D3idd&^P=v!K%<4y%kuMF6q~RV8Me8&X>%` zzIr8C75kuew9CM%xXcS%zz)DyIJiyc;48tZ3|t_=sstEt1@m;crUSon$540-B2Op* z(>~IZ6;985A;DXiJYWin5{gMEr)T&O8LgZE6iuvcJdg0IY$SF;M;(1_>h?JGgik;p zbk>f7RSBq|4OS)afoV-`Be~hxJ`Pqj%XOZjsc;mmYSu3K1+0puX{fNIwqActcO0y! z2CJe;I)Zp!_w{(_%kj?{SQYE}o{aHh5YCVEpdtrO2a{rW6qfxQsYV`aL6owbJ(LI+ z!`H_g=1%5*XJmYIgw`-^x~~ORHH)5wi4}uYU{!#DXxG1oMkls)J%e!F?e|a5UhNWa z-kj!w<3TPHGicv$gH?45dLeGM0;@6>X@gbKfJ?xt@O7Bdzi$mzHH-d;eyZmcSe3yU zaPao~EwCzfEqMJhu&P-Zom^w5Y;MO>cFF*&q9G$2Weco|DEhSCgzy$v)htS$Yk^f= z)s`BpN+J8prk!9_v#5@U+RvN|j0VAp1QQ*w741v_t3s|-el8YR)uy0zzH|OH8qfWM z9qCWtjNmf%N1zCr&3`&r)hya1TB50}z^Vj_APu(At0EMz_FrR1C-U#xf>q7RC4N>e z@zR!v^%(&#HJrREuqwP@&;ZN7sZxgvtZEje&h^2nW>Mnsg}V8#2L_d}1nA@2Vo<@> z9Nnzz!~R4FDsEEIHAkS*@2U$80M#tYBif>-wSlA*jh(}M{8h}~kxX>RN3l^Lsaf<* zd{3D-{s(Q1j2Fr$#XiBdU06=@5q6570+K@Y?jkt9%|;!dDK%eey2O#fMOIom2aVF+ zwm8Sm1w%G4Qc~{GN&iYPJrc)Y948ov6cvZQn1U|@k)rvwYG^_MkrGW;wxAh^lxVu9 z1+9QcvBk#qj7kzjir7}y0FjbRQ95oQQYK~C;-WBtNQqE-iOs!(NX?>@n|7vP{KJRl z&NvDpB|7_Q43k|C#4h1nXwt^NSwSLM5O0G-%4l^l)EYIM>_W}z>}hyNIz`PTdvtEE zhlXTsepa@%r3Hpmti9gF+<}L6DI8`|ExI*u8w?5UVwmfAUN@4&L(PpOZ+u*VA)#Ds zgCUtR2WH|Rm0`u6fguTI*!jz;7BxXchLoXj;uJ6>b5ysvRhbEfByT=f9f*2pU`VWY z=?^H>Xs3#{AlfJt60g^xSWrHPLK4k4ZqXbH30k9IP|lwQ6w+Vo%Sl0TN}mhz;W-gv zmixUgo~|$_C}!tOxzyH(su^9AEj{F6S#uJ+PQ}DEi zo}kZDocxaDP@!$@J8}q`b%wYp%Tj*uw#(zYQr{KUndh)r!zNZ(ZSKF`C%%*|;e+G- zQsl2GtrTjmB2DgtCT5fIQ+?Q>rvxGxXxS1|Kil%)ZYlHs539(GW%SY|TE5;hs zez-%%({q}PWhCblBPPI?j68g>2hdU%H9=PJ!?pArXLOODroyJuF=_SG|*`TFnJlpnm)#_bY(H zTdgU07)r4(P7>#C8_qc%+G|L$wMkQLYv9&J7RJe(ej}wc&Sv);xvgwb96EPjAfiQi zvfDO(ybVpPr`?w5##YC>%9un2y|(2AO@I!{Se#7EQ7Eb66f5&L$ck+gcyiWjJ?~hr ze^BV&cYESd*-e5sx$Gq$lrOy9%~Q`0)W*6JdTH%6hapdhTIj0@Y*k8BldthVYzm8d zv^K0S@2eU)NO@Q2xpl?5D00*RY^_ONh3+-*5)`3kt%g#LyoIc_-i@XpUWI0j9h!tF zi2&hdC|+vtmMW0BO?JLx_mD($e z7bCBs zEoq#!&+Q4xdVKQ&0a&HT6Uhetwo|lXcu#WLEu*Py-ie$o-wl%GOJ4PSvmNp!lX^bq z2A+SsyIzO2M2pf`_B|`mM@;@mPOTi;ibIn55vg7tc5;6y-fKMT#945Gla+fLWjAg& zu4+8%jJT@tG?R_fWLWu{1#8@`;+Dn(M3i6L(s*8&w_LSb8tQw`=S1(9;xF5<-`YtF zR5b1GO2O=z-2tj|cX)1G($J(Y*xWQOX(-2?k<%p&Wp~>p4Sjc%Q(V$e9!ELFB@Ioj zmvb{+($J$u!{vtM6E`E@BWw8W;*&OmhBau#DGl*HX~ipT2HmMwfe%`EssZyEw0BjB z56+A8FA8u8W{Zqb@4c^Y|RZWW4n$clRxQdEKBD~TuyuYw{oRJnwB?oWGQdta^dYW5KrCTj9JWMfC)G`6!!yYV z(kS7-h96J#s*?_EGYBs;=p7_eNR*iLzX|SX2p}2*tJq^u+lWO-g#D^H& zxW-z0(E&KM?Vctf!lpL;&4NuONEp5Cp2pSGIWV&aH*k}5dfPn>iDJQqt?i!1tu&eN8HmSN_cy1|B6X!%tbyyFQlsk3XBoEex^I8as8k;vB6!hAchZL#?(%02q+Y#!hd)YQH6>>8nQ^ol71_bTJCBHC7xWo+1lP} zh$o(2yxB&a)euxXL-A${pQq9Sgci@ya#fSa;^IfPEB8N%ES56CRSls<{xoe@HKdZM zvwaO$HRKrixU^l>5M8F0dkt4Ld0ivjv|ZH@ZKjobT~{@^kH~DM<*H_eGMDe2*K}2r z>$Xf|x;T_=pY{nxh1Y_a#!M;tTCQpcQu5kpyQ(2KO&t(cRd|5i@%8!x_c<#ph5?PU z*d$LiiCe}`@3%bFip(|9Qw>uP-=6>F{#O^M_3>fR=44CNOgg3v1kDY9HQQWnS^?*B zcAyZg(pxgRv&{yfEH+_`=C+QB5b0#jQ(LrHc%{=lcl^jZVofM_0MFf66UxHhgVVIF z2{BRsc;4DjSrf`8KP8i5O(;wHBo=EzS->apM9NZcZIN~`2TW^1q&7e8YimNpHb0_T z)`SRdPOYp75#0Q9ayHh4h;F6OVog~5#fvo|Z_FWSq%|Q@n^SHVYeGqFA^lg@guE7~ z*j=m%5!}3ejWr=+TL?TSySxQ)Zgddad@66IH6eN`7mI6aLS#1ovbH8fWOHK6nh>Ea z=C!dVlnTmDr^=eJsGvry38jd#yp1)X)KEdnp+R5RtnNG z4aQtptLypJ?%B!Kj(D>t^I$gLtwX#F7UzW%qX#dyDMY@Ty6fQE=G7IO!uOk!&t+Cj z>8kKWkgcOsiLf-k;8iY!8Dv&DU2?*Vkq`W_B{sUcXzIi)+?5@_*MG9nU+VQXT*pkU zfEGO1+FimAoxs!24^GdQ%n8jSWPi}gO+hk-G&%D^1wCGRu!7QB+GryYO3JpyAGYhIP0XO<2L1O3Cx<)R=yy+uJ!H4x4pM9fiIv0d z=+y1hS*AXn5bWJX1ZNIqImb@HU-uX8^ZRgXdw`M{3Thjp9CH!kA>l`|tCKsCa)sG| z*~*DjUYI(_#nYGt@l0x1f06UCpr4l*?SBz~#vPZ6ct_NR!))9RUSe~Jv< zal7Z6X@81HT{gZ`mzQOe?Wg5!yX#67g5g%s-u1h#5fP(ZKXCim@xd}04KgAg$5!>M z_h`10)K2UIH%;@Qd>l%yrFF%JNV)Y9Dh2Nc2yAgbn`ynfE=r;odScJS?+vb@|fJi=BQRa!+?{=9F` z@v%M|)#7i6{Zb={g?MKFz!|eik)&blNvxSI?&&e|MfAOWcre_y2jUKLuP-_^@w|AW zcN7B2%lKgMM$tRZcV5nHdpmj2u+p29PNbm1vsK=tbRz|Aw`qHtlm$)_vbTNtz><1|GHm&=ge>4eJuUsPlm@ts*vUB*~0lx`bU5O zoDa@k6J)SBx2~)OKEa>GqaB{Nb6XIa5#Le-_-#9X1geDU~b%KLiO#_!voWd%dj!F zuX)i9tWw(#EDJyk^k1q@?j=Uy<rn-^&gY77Gv$3N0LqMBB}LVId^iS<=G8NCo0Wd&r(c zfng3L;?|D~(d~gC9-qA?@UAk3J&;Otix;DY-x1W|h1tP4)xD2Y=-K|+F;@r*2=g{4 zp6>lzB_P*`Ni%~v+vvN4x=$1WVP=1{Vuz? zBo{2Z1v}rwc))eUHH;SZK}wF4Dr_B>IMThw9LOjf1Cg``$i1EN9zU@cs za8P7_J~7Ax4UHXYT8sy}mrD%SkIP~_$h5-DQ{+!uPjayDspe(C=%{@Js#fW|-DpcQ1j z`ymvc+4RlEHWhsoe(Ej-nG4C@0qTt6na%8j@@@`L9H$HSw}E+qALLIZ&nbB%ky}4y z+%HHjG!vT7u&SQqZhe3j3%|(N_T(n2U%uhtz$ceU45c}X@L1zV>~M0j)-T`M6UKGd@)W3$^6SH-+~R(z

%%$V%beXsrMDgZ1t7kSWF7 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

#93#DK2r7E!0{`obM`PI|dL;P~#jAHfml#x?( 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 DTk|d8 literal 0 HcmV?d00001 diff --git a/microhttpd/0.9.55/Linux-x86_64/include/microhttpd.h b/microhttpd/0.9.55/Linux-x86_64/include/microhttpd.h new file mode 100755 index 0000000..40a723d --- /dev/null +++ b/microhttpd/0.9.55/Linux-x86_64/include/microhttpd.h @@ -0,0 +1,3456 @@ +/* + This file is part of libmicrohttpd + Copyright (C) 2006-2017 Christian Grothoff (and other contributing authors) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/** + * @file microhttpd.h + * @brief public interface to libmicrohttpd + * @author Christian Grothoff + * @author Karlson2k (Evgeny Grin) + * @author Chris GauthierDickey + * + * All symbols defined in this header start with MHD. MHD is a small + * HTTP daemon library. As such, it does not have any API for logging + * errors (you can only enable or disable logging to stderr). Also, + * it may not support all of the HTTP features directly, where + * applicable, portions of HTTP may have to be handled by clients of + * the library. + * + * The library is supposed to handle everything that it must handle + * (because the API would not allow clients to do this), such as basic + * connection management; however, detailed interpretations of headers + * -- such as range requests -- and HTTP methods are left to clients. + * The library does understand HEAD and will only send the headers of + * the response and not the body, even if the client supplied a body. + * The library also understands headers that control connection + * management (specifically, "Connection: close" and "Expect: 100 + * continue" are understood and handled automatically). + * + * MHD understands POST data and is able to decode certain formats + * (at the moment only "application/x-www-form-urlencoded" and + * "mulitpart/formdata"). Unsupported encodings and large POST + * submissions may require the application to manually process + * the stream, which is provided to the main application (and thus can be + * processed, just not conveniently by MHD). + * + * The header file defines various constants used by the HTTP protocol. + * This does not mean that MHD actually interprets all of these + * values. The provided constants are exported as a convenience + * for users of the library. MHD does not verify that transmitted + * HTTP headers are part of the standard specification; users of the + * library are free to define their own extensions of the HTTP + * standard and use those with MHD. + * + * All functions are guaranteed to be completely reentrant and + * thread-safe (with the exception of #MHD_set_connection_value, + * which must only be used in a particular context). + * + * + * @defgroup event event-loop control + * MHD API to start and stop the HTTP server and manage the event loop. + * @defgroup response generation of responses + * MHD API used to generate responses. + * @defgroup request handling of requests + * MHD API used to access information about requests. + * @defgroup authentication HTTP authentication + * MHD API related to basic and digest HTTP authentication. + * @defgroup logging logging + * MHD API to mange logging and error handling + * @defgroup specialized misc. specialized functions + * This group includes functions that do not fit into any particular + * category and that are rarely used. + */ + +#ifndef MHD_MICROHTTPD_H +#define MHD_MICROHTTPD_H + +#ifdef __cplusplus +extern "C" +{ +#if 0 /* keep Emacsens' auto-indent happy */ +} +#endif +#endif + +/* While we generally would like users to use a configure-driven + build process which detects which headers are present and + hence works on any platform, we use "standard" includes here + to build out-of-the-box for beginning users on common systems. + + If generic headers don't work on your platform, include headers + which define 'va_list', 'size_t', 'ssize_t', 'intptr_t', + 'uint16_t', 'uint32_t', 'uint64_t', 'off_t', 'struct sockaddr', + 'socklen_t', 'fd_set' and "#define MHD_PLATFORM_H" before + including "microhttpd.h". Then the following "standard" + includes won't be used (which might be a good idea, especially + on platforms where they do not exist). + */ +#ifndef MHD_PLATFORM_H +#include +#include +#include +#if defined(_WIN32) && !defined(__CYGWIN__) +#include +#if defined(_MSC_FULL_VER) && !defined (_SSIZE_T_DEFINED) +#define _SSIZE_T_DEFINED +typedef intptr_t ssize_t; +#endif /* !_SSIZE_T_DEFINED */ +#else +#include +#include +#include +#endif +#endif + +#if defined(__CYGWIN__) && !defined(_SYS_TYPES_FD_SET) +/* Do not define __USE_W32_SOCKETS under Cygwin! */ +#error Cygwin with winsock fd_set is not supported +#endif + +/** + * Current version of the library. + * 0x01093001 = 1.9.30-1. + */ +#define MHD_VERSION 0x00095500 + +/** + * MHD-internal return code for "YES". + */ +#define MHD_YES 1 + +/** + * MHD-internal return code for "NO". + */ +#define MHD_NO 0 + +/** + * MHD digest auth internal code for an invalid nonce. + */ +#define MHD_INVALID_NONCE -1 + +/** + * Constant used to indicate unknown size (use when + * creating a response). + */ +#ifdef UINT64_MAX +#define MHD_SIZE_UNKNOWN UINT64_MAX +#else +#define MHD_SIZE_UNKNOWN ((uint64_t) -1LL) +#endif + +#ifdef SIZE_MAX +#define MHD_CONTENT_READER_END_OF_STREAM SIZE_MAX +#define MHD_CONTENT_READER_END_WITH_ERROR (SIZE_MAX - 1) +#else +#define MHD_CONTENT_READER_END_OF_STREAM ((size_t) -1LL) +#define MHD_CONTENT_READER_END_WITH_ERROR (((size_t) -1LL) - 1) +#endif + +#ifndef _MHD_EXTERN +#if defined(_WIN32) && defined(MHD_W32LIB) +#define _MHD_EXTERN extern +#elif defined (_WIN32) && defined(MHD_W32DLL) +/* Define MHD_W32DLL when using MHD as W32 .DLL to speed up linker a little */ +#define _MHD_EXTERN __declspec(dllimport) +#else +#define _MHD_EXTERN extern +#endif +#endif + +#ifndef MHD_SOCKET_DEFINED +/** + * MHD_socket is type for socket FDs + */ +#if !defined(_WIN32) || defined(_SYS_TYPES_FD_SET) +#define MHD_POSIX_SOCKETS 1 +typedef int MHD_socket; +#define MHD_INVALID_SOCKET (-1) +#else /* !defined(_WIN32) || defined(_SYS_TYPES_FD_SET) */ +#define MHD_WINSOCK_SOCKETS 1 +#include +typedef SOCKET MHD_socket; +#define MHD_INVALID_SOCKET (INVALID_SOCKET) +#endif /* !defined(_WIN32) || defined(_SYS_TYPES_FD_SET) */ +#define MHD_SOCKET_DEFINED 1 +#endif /* MHD_SOCKET_DEFINED */ + +/** + * Define MHD_NO_DEPRECATION before including "microhttpd.h" to disable deprecation messages + */ +#ifdef MHD_NO_DEPRECATION +#define _MHD_DEPR_MACRO(msg) +#define _MHD_NO_DEPR_IN_MACRO 1 +#define _MHD_DEPR_IN_MACRO(msg) +#define _MHD_NO_DEPR_FUNC 1 +#define _MHD_DEPR_FUNC(msg) +#endif /* MHD_NO_DEPRECATION */ + +#ifndef _MHD_DEPR_MACRO +#if defined(_MSC_FULL_VER) && _MSC_VER+0 >= 1500 +/* VS 2008 or later */ +/* Stringify macros */ +#define _MHD_INSTRMACRO(a) #a +#define _MHD_STRMACRO(a) _MHD_INSTRMACRO(a) +/* deprecation message */ +#define _MHD_DEPR_MACRO(msg) __pragma(message(__FILE__ "(" _MHD_STRMACRO(__LINE__)"): warning: " msg)) +#define _MHD_DEPR_IN_MACRO(msg) _MHD_DEPR_MACRO(msg) +#elif defined(__clang__) || defined (__GNUC_PATCHLEVEL__) +/* clang or GCC since 3.0 */ +#define _MHD_GCC_PRAG(x) _Pragma (#x) +#if __clang_major__+0 >= 5 || \ + (!defined(__apple_build_version__) && (__clang_major__+0 > 3 || (__clang_major__+0 == 3 && __clang_minor__ >= 3))) || \ + __GNUC__+0 > 4 || (__GNUC__+0 == 4 && __GNUC_MINOR__+0 >= 8) +/* clang >= 3.3 (or XCode's clang >= 5.0) or + GCC >= 4.8 */ +#define _MHD_DEPR_MACRO(msg) _MHD_GCC_PRAG(GCC warning msg) +#define _MHD_DEPR_IN_MACRO(msg) _MHD_DEPR_MACRO(msg) +#else /* older clang or GCC */ +/* clang < 3.3, XCode's clang < 5.0, 3.0 <= GCC < 4.8 */ +#define _MHD_DEPR_MACRO(msg) _MHD_GCC_PRAG(message msg) +#if (__clang_major__+0 > 2 || (__clang_major__+0 == 2 && __clang_minor__ >= 9)) /* FIXME: clang >= 2.9, earlier versions not tested */ +/* clang handles inline pragmas better than GCC */ +#define _MHD_DEPR_IN_MACRO(msg) _MHD_DEPR_MACRO(msg) +#endif /* clang >= 2.9 */ +#endif /* older clang or GCC */ +/* #elif defined(SOMEMACRO) */ /* add compiler-specific macros here if required */ +#endif /* clang || GCC >= 3.0 */ +#endif /* !_MHD_DEPR_MACRO */ + +#ifndef _MHD_DEPR_MACRO +#define _MHD_DEPR_MACRO(msg) +#endif /* !_MHD_DEPR_MACRO */ + +#ifndef _MHD_DEPR_IN_MACRO +#define _MHD_NO_DEPR_IN_MACRO 1 +#define _MHD_DEPR_IN_MACRO(msg) +#endif /* !_MHD_DEPR_IN_MACRO */ + +#ifndef _MHD_DEPR_FUNC +#if defined(_MSC_FULL_VER) && _MSC_VER+0 >= 1400 +/* VS 2005 or later */ +#define _MHD_DEPR_FUNC(msg) __declspec(deprecated(msg)) +#elif defined(_MSC_FULL_VER) && _MSC_VER+0 >= 1310 +/* VS .NET 2003 deprecation do not support custom messages */ +#define _MHD_DEPR_FUNC(msg) __declspec(deprecated) +#elif (__GNUC__+0 >= 5) || (defined (__clang__) && \ + (__clang_major__+0 > 2 || (__clang_major__+0 == 2 && __clang_minor__ >= 9))) /* FIXME: earlier versions not tested */ +/* GCC >= 5.0 or clang >= 2.9 */ +#define _MHD_DEPR_FUNC(msg) __attribute__((deprecated(msg))) +#elif defined (__clang__) || __GNUC__+0 > 3 || (__GNUC__+0 == 3 && __GNUC_MINOR__+0 >= 1) +/* 3.1 <= GCC < 5.0 or clang < 2.9 */ +/* old GCC-style deprecation do not support custom messages */ +#define _MHD_DEPR_FUNC(msg) __attribute__((__deprecated__)) +/* #elif defined(SOMEMACRO) */ /* add compiler-specific macros here if required */ +#endif /* clang < 2.9 || GCC >= 3.1 */ +#endif /* !_MHD_DEPR_FUNC */ + +#ifndef _MHD_DEPR_FUNC +#define _MHD_NO_DEPR_FUNC 1 +#define _MHD_DEPR_FUNC(msg) +#endif /* !_MHD_DEPR_FUNC */ + +/** + * Not all architectures and `printf()`'s support the `long long` type. + * This gives the ability to replace `long long` with just a `long`, + * standard `int` or a `short`. + */ +#ifndef MHD_LONG_LONG +/** + * @deprecated use #MHD_UNSIGNED_LONG_LONG instead! + */ +#define MHD_LONG_LONG long long +#define MHD_UNSIGNED_LONG_LONG unsigned long long +#else /* MHD_LONG_LONG */ +_MHD_DEPR_MACRO("Macro MHD_LONG_LONG is deprecated, use MHD_UNSIGNED_LONG_LONG") +#endif +/** + * Format string for printing a variable of type #MHD_LONG_LONG. + * You should only redefine this if you also define #MHD_LONG_LONG. + */ +#ifndef MHD_LONG_LONG_PRINTF +/** + * @deprecated use #MHD_UNSIGNED_LONG_LONG_PRINTF instead! + */ +#define MHD_LONG_LONG_PRINTF "ll" +#define MHD_UNSIGNED_LONG_LONG_PRINTF "%llu" +#else /* MHD_LONG_LONG_PRINTF */ +_MHD_DEPR_MACRO("Macro MHD_LONG_LONG_PRINTF is deprecated, use MHD_UNSIGNED_LONG_LONG_PRINTF") +#endif + + +/** + * @defgroup httpcode HTTP response codes. + * These are the status codes defined for HTTP responses. + * @{ + */ +/* See http://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml */ + +#define MHD_HTTP_CONTINUE 100 +#define MHD_HTTP_SWITCHING_PROTOCOLS 101 +#define MHD_HTTP_PROCESSING 102 + +#define MHD_HTTP_OK 200 +#define MHD_HTTP_CREATED 201 +#define MHD_HTTP_ACCEPTED 202 +#define MHD_HTTP_NON_AUTHORITATIVE_INFORMATION 203 +#define MHD_HTTP_NO_CONTENT 204 +#define MHD_HTTP_RESET_CONTENT 205 +#define MHD_HTTP_PARTIAL_CONTENT 206 +#define MHD_HTTP_MULTI_STATUS 207 +#define MHD_HTTP_ALREADY_REPORTED 208 + +#define MHD_HTTP_IM_USED 226 + +#define MHD_HTTP_MULTIPLE_CHOICES 300 +#define MHD_HTTP_MOVED_PERMANENTLY 301 +#define MHD_HTTP_FOUND 302 +#define MHD_HTTP_SEE_OTHER 303 +#define MHD_HTTP_NOT_MODIFIED 304 +#define MHD_HTTP_USE_PROXY 305 +#define MHD_HTTP_SWITCH_PROXY 306 +#define MHD_HTTP_TEMPORARY_REDIRECT 307 +#define MHD_HTTP_PERMANENT_REDIRECT 308 + +#define MHD_HTTP_BAD_REQUEST 400 +#define MHD_HTTP_UNAUTHORIZED 401 +#define MHD_HTTP_PAYMENT_REQUIRED 402 +#define MHD_HTTP_FORBIDDEN 403 +#define MHD_HTTP_NOT_FOUND 404 +#define MHD_HTTP_METHOD_NOT_ALLOWED 405 +#define MHD_HTTP_NOT_ACCEPTABLE 406 +/** @deprecated */ +#define MHD_HTTP_METHOD_NOT_ACCEPTABLE \ + _MHD_DEPR_IN_MACRO("Value MHD_HTTP_METHOD_NOT_ACCEPTABLE is deprecated, use MHD_HTTP_NOT_ACCEPTABLE") 406 +#define MHD_HTTP_PROXY_AUTHENTICATION_REQUIRED 407 +#define MHD_HTTP_REQUEST_TIMEOUT 408 +#define MHD_HTTP_CONFLICT 409 +#define MHD_HTTP_GONE 410 +#define MHD_HTTP_LENGTH_REQUIRED 411 +#define MHD_HTTP_PRECONDITION_FAILED 412 +#define MHD_HTTP_PAYLOAD_TOO_LARGE 413 +/** @deprecated */ +#define MHD_HTTP_REQUEST_ENTITY_TOO_LARGE \ + _MHD_DEPR_IN_MACRO("Value MHD_HTTP_REQUEST_ENTITY_TOO_LARGE is deprecated, use MHD_HTTP_PAYLOAD_TOO_LARGE") 413 +#define MHD_HTTP_URI_TOO_LONG 414 +/** @deprecated */ +#define MHD_HTTP_REQUEST_URI_TOO_LONG \ + _MHD_DEPR_IN_MACRO("Value MHD_HTTP_REQUEST_URI_TOO_LONG is deprecated, use MHD_HTTP_URI_TOO_LONG") 414 +#define MHD_HTTP_UNSUPPORTED_MEDIA_TYPE 415 +#define MHD_HTTP_RANGE_NOT_SATISFIABLE 416 +/** @deprecated */ +#define MHD_HTTP_REQUESTED_RANGE_NOT_SATISFIABLE \ + _MHD_DEPR_IN_MACRO("Value MHD_HTTP_REQUESTED_RANGE_NOT_SATISFIABLE is deprecated, use MHD_HTTP_RANGE_NOT_SATISFIABLE") 416 +#define MHD_HTTP_EXPECTATION_FAILED 417 + +#define MHD_HTTP_MISDIRECTED_REQUEST 421 +#define MHD_HTTP_UNPROCESSABLE_ENTITY 422 +#define MHD_HTTP_LOCKED 423 +#define MHD_HTTP_FAILED_DEPENDENCY 424 +#define MHD_HTTP_UNORDERED_COLLECTION 425 +#define MHD_HTTP_UPGRADE_REQUIRED 426 + +#define MHD_HTTP_PRECONDITION_REQUIRED 428 +#define MHD_HTTP_TOO_MANY_REQUESTS 429 +#define MHD_HTTP_REQUEST_HEADER_FIELDS_TOO_LARGE 431 + +#define MHD_HTTP_NO_RESPONSE 444 + +#define MHD_HTTP_RETRY_WITH 449 +#define MHD_HTTP_BLOCKED_BY_WINDOWS_PARENTAL_CONTROLS 450 +#define MHD_HTTP_UNAVAILABLE_FOR_LEGAL_REASONS 451 + +#define MHD_HTTP_INTERNAL_SERVER_ERROR 500 +#define MHD_HTTP_NOT_IMPLEMENTED 501 +#define MHD_HTTP_BAD_GATEWAY 502 +#define MHD_HTTP_SERVICE_UNAVAILABLE 503 +#define MHD_HTTP_GATEWAY_TIMEOUT 504 +#define MHD_HTTP_HTTP_VERSION_NOT_SUPPORTED 505 +#define MHD_HTTP_VARIANT_ALSO_NEGOTIATES 506 +#define MHD_HTTP_INSUFFICIENT_STORAGE 507 +#define MHD_HTTP_LOOP_DETECTED 508 +#define MHD_HTTP_BANDWIDTH_LIMIT_EXCEEDED 509 +#define MHD_HTTP_NOT_EXTENDED 510 +#define MHD_HTTP_NETWORK_AUTHENTICATION_REQUIRED 511 + +/** @} */ /* end of group httpcode */ + +/** + * Returns the string reason phrase for a response code. + * + * If we don't have a string for a status code, we give the first + * message in that status code class. + */ +_MHD_EXTERN const char * +MHD_get_reason_phrase_for (unsigned int code); + + +/** + * Flag to be or-ed with MHD_HTTP status code for + * SHOUTcast. This will cause the response to begin + * with the SHOUTcast "ICY" line instad of "HTTP". + * @ingroup specialized + */ +#define MHD_ICY_FLAG ((uint32_t)(((uint32_t)1) << 31)) + +/** + * @defgroup headers HTTP headers + * These are the standard headers found in HTTP requests and responses. + * See: http://www.iana.org/assignments/message-headers/message-headers.xml + * Registry Version 2017-01-27 + * @{ + */ + +/* Main HTTP headers. */ +/* Standard. RFC7231, Section 5.3.2 */ +#define MHD_HTTP_HEADER_ACCEPT "Accept" +/* Standard. RFC7231, Section 5.3.3 */ +#define MHD_HTTP_HEADER_ACCEPT_CHARSET "Accept-Charset" +/* Standard. RFC7231, Section 5.3.4; RFC7694, Section 3 */ +#define MHD_HTTP_HEADER_ACCEPT_ENCODING "Accept-Encoding" +/* Standard. RFC7231, Section 5.3.5 */ +#define MHD_HTTP_HEADER_ACCEPT_LANGUAGE "Accept-Language" +/* Standard. RFC7233, Section 2.3 */ +#define MHD_HTTP_HEADER_ACCEPT_RANGES "Accept-Ranges" +/* Standard. RFC7234, Section 5.1 */ +#define MHD_HTTP_HEADER_AGE "Age" +/* Standard. RFC7231, Section 7.4.1 */ +#define MHD_HTTP_HEADER_ALLOW "Allow" +/* Standard. RFC7235, Section 4.2 */ +#define MHD_HTTP_HEADER_AUTHORIZATION "Authorization" +/* Standard. RFC7234, Section 5.2 */ +#define MHD_HTTP_HEADER_CACHE_CONTROL "Cache-Control" +/* Reserved. RFC7230, Section 8.1 */ +#define MHD_HTTP_HEADER_CLOSE "Close" +/* Standard. RFC7230, Section 6.1 */ +#define MHD_HTTP_HEADER_CONNECTION "Connection" +/* Standard. RFC7231, Section 3.1.2.2 */ +#define MHD_HTTP_HEADER_CONTENT_ENCODING "Content-Encoding" +/* Standard. RFC7231, Section 3.1.3.2 */ +#define MHD_HTTP_HEADER_CONTENT_LANGUAGE "Content-Language" +/* Standard. RFC7230, Section 3.3.2 */ +#define MHD_HTTP_HEADER_CONTENT_LENGTH "Content-Length" +/* Standard. RFC7231, Section 3.1.4.2 */ +#define MHD_HTTP_HEADER_CONTENT_LOCATION "Content-Location" +/* Standard. RFC7233, Section 4.2 */ +#define MHD_HTTP_HEADER_CONTENT_RANGE "Content-Range" +/* Standard. RFC7231, Section 3.1.1.5 */ +#define MHD_HTTP_HEADER_CONTENT_TYPE "Content-Type" +/* Standard. RFC7231, Section 7.1.1.2 */ +#define MHD_HTTP_HEADER_DATE "Date" +/* Standard. RFC7232, Section 2.3 */ +#define MHD_HTTP_HEADER_ETAG "ETag" +/* Standard. RFC7231, Section 5.1.1 */ +#define MHD_HTTP_HEADER_EXPECT "Expect" +/* Standard. RFC7234, Section 5.3 */ +#define MHD_HTTP_HEADER_EXPIRES "Expires" +/* Standard. RFC7231, Section 5.5.1 */ +#define MHD_HTTP_HEADER_FROM "From" +/* Standard. RFC7230, Section 5.4 */ +#define MHD_HTTP_HEADER_HOST "Host" +/* Standard. RFC7232, Section 3.1 */ +#define MHD_HTTP_HEADER_IF_MATCH "If-Match" +/* Standard. RFC7232, Section 3.3 */ +#define MHD_HTTP_HEADER_IF_MODIFIED_SINCE "If-Modified-Since" +/* Standard. RFC7232, Section 3.2 */ +#define MHD_HTTP_HEADER_IF_NONE_MATCH "If-None-Match" +/* Standard. RFC7233, Section 3.2 */ +#define MHD_HTTP_HEADER_IF_RANGE "If-Range" +/* Standard. RFC7232, Section 3.4 */ +#define MHD_HTTP_HEADER_IF_UNMODIFIED_SINCE "If-Unmodified-Since" +/* Standard. RFC7232, Section 2.2 */ +#define MHD_HTTP_HEADER_LAST_MODIFIED "Last-Modified" +/* Standard. RFC7231, Section 7.1.2 */ +#define MHD_HTTP_HEADER_LOCATION "Location" +/* Standard. RFC7231, Section 5.1.2 */ +#define MHD_HTTP_HEADER_MAX_FORWARDS "Max-Forwards" +/* Standard. RFC7231, Appendix A.1 */ +#define MHD_HTTP_HEADER_MIME_VERSION "MIME-Version" +/* Standard. RFC7234, Section 5.4 */ +#define MHD_HTTP_HEADER_PRAGMA "Pragma" +/* Standard. RFC7235, Section 4.3 */ +#define MHD_HTTP_HEADER_PROXY_AUTHENTICATE "Proxy-Authenticate" +/* Standard. RFC7235, Section 4.4 */ +#define MHD_HTTP_HEADER_PROXY_AUTHORIZATION "Proxy-Authorization" +/* Standard. RFC7233, Section 3.1 */ +#define MHD_HTTP_HEADER_RANGE "Range" +/* Standard. RFC7231, Section 5.5.2 */ +#define MHD_HTTP_HEADER_REFERER "Referer" +/* Standard. RFC7231, Section 7.1.3 */ +#define MHD_HTTP_HEADER_RETRY_AFTER "Retry-After" +/* Standard. RFC7231, Section 7.4.2 */ +#define MHD_HTTP_HEADER_SERVER "Server" +/* Standard. RFC7230, Section 4.3 */ +#define MHD_HTTP_HEADER_TE "TE" +/* Standard. RFC7230, Section 4.4 */ +#define MHD_HTTP_HEADER_TRAILER "Trailer" +/* Standard. RFC7230, Section 3.3.1 */ +#define MHD_HTTP_HEADER_TRANSFER_ENCODING "Transfer-Encoding" +/* Standard. RFC7230, Section 6.7 */ +#define MHD_HTTP_HEADER_UPGRADE "Upgrade" +/* Standard. RFC7231, Section 5.5.3 */ +#define MHD_HTTP_HEADER_USER_AGENT "User-Agent" +/* Standard. RFC7231, Section 7.1.4 */ +#define MHD_HTTP_HEADER_VARY "Vary" +/* Standard. RFC7230, Section 5.7.1 */ +#define MHD_HTTP_HEADER_VIA "Via" +/* Standard. RFC7235, Section 4.1 */ +#define MHD_HTTP_HEADER_WWW_AUTHENTICATE "WWW-Authenticate" +/* Standard. RFC7234, Section 5.5 */ +#define MHD_HTTP_HEADER_WARNING "Warning" + +/* Additional HTTP headers. */ +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_A_IM "A-IM" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_ACCEPT_ADDITIONS "Accept-Additions" +/* Informational. RFC7089 */ +#define MHD_HTTP_HEADER_ACCEPT_DATETIME "Accept-Datetime" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_ACCEPT_FEATURES "Accept-Features" +/* No category. RFC5789 */ +#define MHD_HTTP_HEADER_ACCEPT_PATCH "Accept-Patch" +/* Standard. RFC7639, Section 2 */ +#define MHD_HTTP_HEADER_ALPN "ALPN" +/* Standard. RFC7838 */ +#define MHD_HTTP_HEADER_ALT_SVC "Alt-Svc" +/* Standard. RFC7838 */ +#define MHD_HTTP_HEADER_ALT_USED "Alt-Used" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_ALTERNATES "Alternates" +/* No category. RFC4437 */ +#define MHD_HTTP_HEADER_APPLY_TO_REDIRECT_REF "Apply-To-Redirect-Ref" +/* Experimental. RFC8053, Section 4 */ +#define MHD_HTTP_HEADER_AUTHENTICATION_CONTROL "Authentication-Control" +/* Standard. RFC7615, Section 3 */ +#define MHD_HTTP_HEADER_AUTHENTICATION_INFO "Authentication-Info" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_C_EXT "C-Ext" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_C_MAN "C-Man" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_C_OPT "C-Opt" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_C_PEP "C-PEP" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_C_PEP_INFO "C-PEP-Info" +/* Standard. RFC7809, Section 7.1 */ +#define MHD_HTTP_HEADER_CALDAV_TIMEZONES "CalDAV-Timezones" +/* Obsoleted. RFC2068; RFC2616 */ +#define MHD_HTTP_HEADER_CONTENT_BASE "Content-Base" +/* Standard. RFC6266 */ +#define MHD_HTTP_HEADER_CONTENT_DISPOSITION "Content-Disposition" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_CONTENT_ID "Content-ID" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_CONTENT_MD5 "Content-MD5" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_CONTENT_SCRIPT_TYPE "Content-Script-Type" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_CONTENT_STYLE_TYPE "Content-Style-Type" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_CONTENT_VERSION "Content-Version" +/* Standard. RFC6265 */ +#define MHD_HTTP_HEADER_COOKIE "Cookie" +/* Obsoleted. RFC2965; RFC6265 */ +#define MHD_HTTP_HEADER_COOKIE2 "Cookie2" +/* Standard. RFC5323 */ +#define MHD_HTTP_HEADER_DASL "DASL" +/* Standard. RFC4918 */ +#define MHD_HTTP_HEADER_DAV "DAV" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_DEFAULT_STYLE "Default-Style" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_DELTA_BASE "Delta-Base" +/* Standard. RFC4918 */ +#define MHD_HTTP_HEADER_DEPTH "Depth" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_DERIVED_FROM "Derived-From" +/* Standard. RFC4918 */ +#define MHD_HTTP_HEADER_DESTINATION "Destination" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_DIFFERENTIAL_ID "Differential-ID" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_DIGEST "Digest" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_EXT "Ext" +/* Standard. RFC7239 */ +#define MHD_HTTP_HEADER_FORWARDED "Forwarded" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_GETPROFILE "GetProfile" +/* Experimental. RFC7486, Section 6.1.1 */ +#define MHD_HTTP_HEADER_HOBAREG "Hobareg" +/* Standard. RFC7540, Section 3.2.1 */ +#define MHD_HTTP_HEADER_HTTP2_SETTINGS "HTTP2-Settings" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_IM "IM" +/* Standard. RFC4918 */ +#define MHD_HTTP_HEADER_IF "If" +/* Standard. RFC6638 */ +#define MHD_HTTP_HEADER_IF_SCHEDULE_TAG_MATCH "If-Schedule-Tag-Match" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_KEEP_ALIVE "Keep-Alive" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_LABEL "Label" +/* No category. RFC5988 */ +#define MHD_HTTP_HEADER_LINK "Link" +/* Standard. RFC4918 */ +#define MHD_HTTP_HEADER_LOCK_TOKEN "Lock-Token" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_MAN "Man" +/* Informational. RFC7089 */ +#define MHD_HTTP_HEADER_MEMENTO_DATETIME "Memento-Datetime" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_METER "Meter" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_NEGOTIATE "Negotiate" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_OPT "Opt" +/* Experimental. RFC8053, Section 3 */ +#define MHD_HTTP_HEADER_OPTIONAL_WWW_AUTHENTICATE "Optional-WWW-Authenticate" +/* Standard. RFC4229 */ +#define MHD_HTTP_HEADER_ORDERING_TYPE "Ordering-Type" +/* Standard. RFC6454 */ +#define MHD_HTTP_HEADER_ORIGIN "Origin" +/* Standard. RFC4918 */ +#define MHD_HTTP_HEADER_OVERWRITE "Overwrite" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_P3P "P3P" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_PEP "PEP" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_PICS_LABEL "PICS-Label" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_PEP_INFO "Pep-Info" +/* Standard. RFC4229 */ +#define MHD_HTTP_HEADER_POSITION "Position" +/* Standard. RFC7240 */ +#define MHD_HTTP_HEADER_PREFER "Prefer" +/* Standard. RFC7240 */ +#define MHD_HTTP_HEADER_PREFERENCE_APPLIED "Preference-Applied" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_PROFILEOBJECT "ProfileObject" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_PROTOCOL "Protocol" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_PROTOCOL_INFO "Protocol-Info" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_PROTOCOL_QUERY "Protocol-Query" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_PROTOCOL_REQUEST "Protocol-Request" +/* Standard. RFC7615, Section 4 */ +#define MHD_HTTP_HEADER_PROXY_AUTHENTICATION_INFO "Proxy-Authentication-Info" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_PROXY_FEATURES "Proxy-Features" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_PROXY_INSTRUCTION "Proxy-Instruction" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_PUBLIC "Public" +/* Standard. RFC7469 */ +#define MHD_HTTP_HEADER_PUBLIC_KEY_PINS "Public-Key-Pins" +/* Standard. RFC7469 */ +#define MHD_HTTP_HEADER_PUBLIC_KEY_PINS_REPORT_ONLY "Public-Key-Pins-Report-Only" +/* No category. RFC4437 */ +#define MHD_HTTP_HEADER_REDIRECT_REF "Redirect-Ref" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_SAFE "Safe" +/* Standard. RFC6638 */ +#define MHD_HTTP_HEADER_SCHEDULE_REPLY "Schedule-Reply" +/* Standard. RFC6638 */ +#define MHD_HTTP_HEADER_SCHEDULE_TAG "Schedule-Tag" +/* Standard. RFC6455 */ +#define MHD_HTTP_HEADER_SEC_WEBSOCKET_ACCEPT "Sec-WebSocket-Accept" +/* Standard. RFC6455 */ +#define MHD_HTTP_HEADER_SEC_WEBSOCKET_EXTENSIONS "Sec-WebSocket-Extensions" +/* Standard. RFC6455 */ +#define MHD_HTTP_HEADER_SEC_WEBSOCKET_KEY "Sec-WebSocket-Key" +/* Standard. RFC6455 */ +#define MHD_HTTP_HEADER_SEC_WEBSOCKET_PROTOCOL "Sec-WebSocket-Protocol" +/* Standard. RFC6455 */ +#define MHD_HTTP_HEADER_SEC_WEBSOCKET_VERSION "Sec-WebSocket-Version" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_SECURITY_SCHEME "Security-Scheme" +/* Standard. RFC6265 */ +#define MHD_HTTP_HEADER_SET_COOKIE "Set-Cookie" +/* Obsoleted. RFC2965; RFC6265 */ +#define MHD_HTTP_HEADER_SET_COOKIE2 "Set-Cookie2" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_SETPROFILE "SetProfile" +/* Standard. RFC5023 */ +#define MHD_HTTP_HEADER_SLUG "SLUG" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_SOAPACTION "SoapAction" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_STATUS_URI "Status-URI" +/* Standard. RFC6797 */ +#define MHD_HTTP_HEADER_STRICT_TRANSPORT_SECURITY "Strict-Transport-Security" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_SURROGATE_CAPABILITY "Surrogate-Capability" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_SURROGATE_CONTROL "Surrogate-Control" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_TCN "TCN" +/* Standard. RFC4918 */ +#define MHD_HTTP_HEADER_TIMEOUT "Timeout" +/* Standard. RFC8030, Section 5.4 */ +#define MHD_HTTP_HEADER_TOPIC "Topic" +/* Standard. RFC8030, Section 5.2 */ +#define MHD_HTTP_HEADER_TTL "TTL" +/* Standard. RFC8030, Section 5.3 */ +#define MHD_HTTP_HEADER_URGENCY "Urgency" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_URI "URI" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_VARIANT_VARY "Variant-Vary" +/* No category. RFC4229 */ +#define MHD_HTTP_HEADER_WANT_DIGEST "Want-Digest" +/* Informational. RFC7034 */ +#define MHD_HTTP_HEADER_X_FRAME_OPTIONS "X-Frame-Options" + +/* Some provisional headers. */ +#define MHD_HTTP_HEADER_ACCESS_CONTROL_ALLOW_ORIGIN "Access-Control-Allow-Origin" +/** @} */ /* end of group headers */ + +/** + * @defgroup versions HTTP versions + * These strings should be used to match against the first line of the + * HTTP header. + * @{ + */ +#define MHD_HTTP_VERSION_1_0 "HTTP/1.0" +#define MHD_HTTP_VERSION_1_1 "HTTP/1.1" + +/** @} */ /* end of group versions */ + +/** + * @defgroup methods HTTP methods + * HTTP methods (as strings). + * See: http://www.iana.org/assignments/http-methods/http-methods.xml + * Registry Version 2015-05-19 + * @{ + */ +/* Main HTTP methods. */ +/* Not safe. Not idempotent. RFC7231, Section 4.3.6. */ +#define MHD_HTTP_METHOD_CONNECT "CONNECT" +/* Not safe. Idempotent. RFC7231, Section 4.3.5. */ +#define MHD_HTTP_METHOD_DELETE "DELETE" +/* Safe. Idempotent. RFC7231, Section 4.3.1. */ +#define MHD_HTTP_METHOD_GET "GET" +/* Safe. Idempotent. RFC7231, Section 4.3.2. */ +#define MHD_HTTP_METHOD_HEAD "HEAD" +/* Safe. Idempotent. RFC7231, Section 4.3.7. */ +#define MHD_HTTP_METHOD_OPTIONS "OPTIONS" +/* Not safe. Not idempotent. RFC7231, Section 4.3.3. */ +#define MHD_HTTP_METHOD_POST "POST" +/* Not safe. Idempotent. RFC7231, Section 4.3.4. */ +#define MHD_HTTP_METHOD_PUT "PUT" +/* Safe. Idempotent. RFC7231, Section 4.3.8. */ +#define MHD_HTTP_METHOD_TRACE "TRACE" + +/* Additional HTTP methods. */ +/* Not safe. Idempotent. RFC3744, Section 8.1. */ +#define MHD_HTTP_METHOD_ACL "ACL" +/* Not safe. Idempotent. RFC3253, Section 12.6. */ +#define MHD_HTTP_METHOD_BASELINE_CONTROL "BASELINE-CONTROL" +/* Not safe. Idempotent. RFC5842, Section 4. */ +#define MHD_HTTP_METHOD_BIND "BIND" +/* Not safe. Idempotent. RFC3253, Section 4.4, Section 9.4. */ +#define MHD_HTTP_METHOD_CHECKIN "CHECKIN" +/* Not safe. Idempotent. RFC3253, Section 4.3, Section 8.8. */ +#define MHD_HTTP_METHOD_CHECKOUT "CHECKOUT" +/* Not safe. Idempotent. RFC4918, Section 9.8. */ +#define MHD_HTTP_METHOD_COPY "COPY" +/* Not safe. Idempotent. RFC3253, Section 8.2. */ +#define MHD_HTTP_METHOD_LABEL "LABEL" +/* Not safe. Idempotent. RFC2068, Section 19.6.1.2. */ +#define MHD_HTTP_METHOD_LINK "LINK" +/* Not safe. Not idempotent. RFC4918, Section 9.10. */ +#define MHD_HTTP_METHOD_LOCK "LOCK" +/* Not safe. Idempotent. RFC3253, Section 11.2. */ +#define MHD_HTTP_METHOD_MERGE "MERGE" +/* Not safe. Idempotent. RFC3253, Section 13.5. */ +#define MHD_HTTP_METHOD_MKACTIVITY "MKACTIVITY" +/* Not safe. Idempotent. RFC4791, Section 5.3.1. */ +#define MHD_HTTP_METHOD_MKCALENDAR "MKCALENDAR" +/* Not safe. Idempotent. RFC4918, Section 9.3. */ +#define MHD_HTTP_METHOD_MKCOL "MKCOL" +/* Not safe. Idempotent. RFC4437, Section 6. */ +#define MHD_HTTP_METHOD_MKREDIRECTREF "MKREDIRECTREF" +/* Not safe. Idempotent. RFC3253, Section 6.3. */ +#define MHD_HTTP_METHOD_MKWORKSPACE "MKWORKSPACE" +/* Not safe. Idempotent. RFC4918, Section 9.9. */ +#define MHD_HTTP_METHOD_MOVE "MOVE" +/* Not safe. Idempotent. RFC3648, Section 7. */ +#define MHD_HTTP_METHOD_ORDERPATCH "ORDERPATCH" +/* Not safe. Not idempotent. RFC5789, Section 2. */ +#define MHD_HTTP_METHOD_PATCH "PATCH" +/* Safe. Idempotent. RFC7540, Section 3.5. */ +#define MHD_HTTP_METHOD_PRI "PRI" +/* Safe. Idempotent. RFC4918, Section 9.1. */ +#define MHD_HTTP_METHOD_PROPFIND "PROPFIND" +/* Not safe. Idempotent. RFC4918, Section 9.2. */ +#define MHD_HTTP_METHOD_PROPPATCH "PROPPATCH" +/* Not safe. Idempotent. RFC5842, Section 6. */ +#define MHD_HTTP_METHOD_REBIND "REBIND" +/* Safe. Idempotent. RFC3253, Section 3.6. */ +#define MHD_HTTP_METHOD_REPORT "REPORT" +/* Safe. Idempotent. RFC5323, Section 2. */ +#define MHD_HTTP_METHOD_SEARCH "SEARCH" +/* Not safe. Idempotent. RFC5842, Section 5. */ +#define MHD_HTTP_METHOD_UNBIND "UNBIND" +/* Not safe. Idempotent. RFC3253, Section 4.5. */ +#define MHD_HTTP_METHOD_UNCHECKOUT "UNCHECKOUT" +/* Not safe. Idempotent. RFC2068, Section 19.6.1.3. */ +#define MHD_HTTP_METHOD_UNLINK "UNLINK" +/* Not safe. Idempotent. RFC4918, Section 9.11. */ +#define MHD_HTTP_METHOD_UNLOCK "UNLOCK" +/* Not safe. Idempotent. RFC3253, Section 7.1. */ +#define MHD_HTTP_METHOD_UPDATE "UPDATE" +/* Not safe. Idempotent. RFC4437, Section 7. */ +#define MHD_HTTP_METHOD_UPDATEREDIRECTREF "UPDATEREDIRECTREF" +/* Not safe. Idempotent. RFC3253, Section 3.5. */ +#define MHD_HTTP_METHOD_VERSION_CONTROL "VERSION-CONTROL" + +/** @} */ /* end of group methods */ + +/** + * @defgroup postenc HTTP POST encodings + * See also: http://www.w3.org/TR/html4/interact/forms.html#h-17.13.4 + * @{ + */ +#define MHD_HTTP_POST_ENCODING_FORM_URLENCODED "application/x-www-form-urlencoded" +#define MHD_HTTP_POST_ENCODING_MULTIPART_FORMDATA "multipart/form-data" + +/** @} */ /* end of group postenc */ + + +/** + * @brief Handle for the daemon (listening on a socket for HTTP traffic). + * @ingroup event + */ +struct MHD_Daemon; + +/** + * @brief Handle for a connection / HTTP request. + * + * With HTTP/1.1, multiple requests can be run over the same + * connection. However, MHD will only show one request per TCP + * connection to the client at any given time. + * @ingroup request + */ +struct MHD_Connection; + +/** + * @brief Handle for a response. + * @ingroup response + */ +struct MHD_Response; + +/** + * @brief Handle for POST processing. + * @ingroup response + */ +struct MHD_PostProcessor; + + +/** + * @brief Flags for the `struct MHD_Daemon`. + * + * Note that MHD will run automatically in background thread(s) only + * if #MHD_USE_INTERNAL_POLLING_THREAD is used. Otherwise caller (application) + * must use #MHD_run() or #MHD_run_from_select() to have MHD processed + * network connections and data. + * + * Starting the daemon may also fail if a particular option is not + * implemented or not supported on the target platform (i.e. no + * support for TLS, epoll or IPv6). + */ +enum MHD_FLAG +{ + /** + * No options selected. + */ + MHD_NO_FLAG = 0, + + /** + * Print errors messages to custom error logger or to `stderr` if + * custom error logger is not set. + * @sa ::MHD_OPTION_EXTERNAL_LOGGER + */ + MHD_USE_ERROR_LOG = 1, + + /** + * Run in debug mode. If this flag is used, the library should + * print error messages and warnings to `stderr`. + */ + MHD_USE_DEBUG = 1, + + /** + * Run in HTTPS mode. The modern protocol is called TLS. + */ + MHD_USE_TLS = 2, + + /** @deprecated */ + MHD_USE_SSL = 2, +#if 0 + /* let's do this later once versions that define MHD_USE_TLS a more widely deployed. */ +#define MHD_USE_SSL \ + _MHD_DEPR_IN_MACRO("Value MHD_USE_SSL is deprecated, use MHD_USE_TLS") \ + MHD_USE_TLS +#endif + + /** + * Run using one thread per connection. + * Must be used only with #MHD_USE_INTERNAL_POLLING_THREAD. + */ + MHD_USE_THREAD_PER_CONNECTION = 4, + + /** + * Run using an internal thread (or thread pool) for sockets sending + * and receiving and data processing. Without this flag MHD will not + * run automatically in background thread(s). + * If this flag is set, #MHD_run() and #MHD_run_from_select() couldn't + * be used. + * This flag is set explicitly by #MHD_USE_POLL_INTERNAL_THREAD and + * by #MHD_USE_EPOLL_INTERNAL_THREAD. + */ + MHD_USE_INTERNAL_POLLING_THREAD = 8, + + /** @deprecated */ + MHD_USE_SELECT_INTERNALLY = 8, +#if 0 /* Will be marked for real deprecation later. */ +#define MHD_USE_SELECT_INTERNALLY \ + _MHD_DEPR_IN_MACRO("Value MHD_USE_SELECT_INTERNALLY is deprecated, use MHD_USE_INTERNAL_POLLING_THREAD instead") \ + MHD_USE_INTERNAL_POLLING_THREAD +#endif /* 0 */ + + /** + * Run using the IPv6 protocol (otherwise, MHD will just support + * IPv4). If you want MHD to support IPv4 and IPv6 using a single + * socket, pass #MHD_USE_DUAL_STACK, otherwise, if you only pass + * this option, MHD will try to bind to IPv6-only (resulting in + * no IPv4 support). + */ + MHD_USE_IPv6 = 16, + + /** + * Be pedantic about the protocol (as opposed to as tolerant as + * possible). Specifically, at the moment, this flag causes MHD to + * reject HTTP 1.1 connections without a "Host" header. This is + * required by the standard, but of course in violation of the "be + * as liberal as possible in what you accept" norm. It is + * recommended to turn this ON if you are testing clients against + * MHD, and OFF in production. + */ + MHD_USE_PEDANTIC_CHECKS = 32, +#if 0 /* Will be marked for real deprecation later. */ +#define MHD_USE_PEDANTIC_CHECKS \ + _MHD_DEPR_IN_MACRO("Flag MHD_USE_PEDANTIC_CHECKS is deprecated, use option MHD_OPTION_STRICT_FOR_CLIENT instead") \ + 32 +#endif /* 0 */ + + /** + * Use `poll()` instead of `select()`. This allows sockets with `fd >= + * FD_SETSIZE`. This option is not compatible with using an + * 'external' polling mode (as there is no API to get the file + * descriptors for the external poll() from MHD) and must also not + * be used in combination with #MHD_USE_EPOLL. + * @sa ::MHD_FEATURE_POLL, #MHD_USE_POLL_INTERNAL_THREAD + */ + MHD_USE_POLL = 64, + + /** + * Run using an internal thread (or thread pool) doing `poll()`. + * @sa ::MHD_FEATURE_POLL, #MHD_USE_POLL, #MHD_USE_INTERNAL_POLLING_THREAD + */ + MHD_USE_POLL_INTERNAL_THREAD = MHD_USE_POLL | MHD_USE_INTERNAL_POLLING_THREAD, + + /** @deprecated */ + MHD_USE_POLL_INTERNALLY = MHD_USE_POLL | MHD_USE_INTERNAL_POLLING_THREAD, +#if 0 /* Will be marked for real deprecation later. */ +#define MHD_USE_POLL_INTERNALLY \ + _MHD_DEPR_IN_MACRO("Value MHD_USE_POLL_INTERNALLY is deprecated, use MHD_USE_POLL_INTERNAL_THREAD instead") \ + MHD_USE_POLL_INTERNAL_THREAD +#endif /* 0 */ + + /** + * Suppress (automatically) adding the 'Date:' header to HTTP responses. + * This option should ONLY be used on systems that do not have a clock + * and that DO provide other mechanisms for cache control. See also + * RFC 2616, section 14.18 (exception 3). + */ + MHD_USE_SUPPRESS_DATE_NO_CLOCK = 128, + + /** @deprecated */ + MHD_SUPPRESS_DATE_NO_CLOCK = 128, +#if 0 /* Will be marked for real deprecation later. */ +#define MHD_SUPPRESS_DATE_NO_CLOCK \ + _MHD_DEPR_IN_MACRO("Value MHD_SUPPRESS_DATE_NO_CLOCK is deprecated, use MHD_USE_SUPPRESS_DATE_NO_CLOCK instead") \ + MHD_USE_SUPPRESS_DATE_NO_CLOCK +#endif /* 0 */ + + /** + * Run without a listen socket. This option only makes sense if + * #MHD_add_connection is to be used exclusively to connect HTTP + * clients to the HTTP server. This option is incompatible with + * using a thread pool; if it is used, #MHD_OPTION_THREAD_POOL_SIZE + * is ignored. + */ + MHD_USE_NO_LISTEN_SOCKET = 256, + + /** + * Use `epoll()` instead of `select()` or `poll()` for the event loop. + * This option is only available on some systems; using the option on + * systems without epoll will cause #MHD_start_daemon to fail. Using + * this option is not supported with #MHD_USE_THREAD_PER_CONNECTION. + * @sa ::MHD_FEATURE_EPOLL + */ + MHD_USE_EPOLL = 512, + + /** @deprecated */ + MHD_USE_EPOLL_LINUX_ONLY = 512, +#if 0 /* Will be marked for real deprecation later. */ +#define MHD_USE_EPOLL_LINUX_ONLY \ + _MHD_DEPR_IN_MACRO("Value MHD_USE_EPOLL_LINUX_ONLY is deprecated, use MHD_USE_EPOLL") \ + MHD_USE_EPOLL +#endif /* 0 */ + + /** + * Run using an internal thread (or thread pool) doing `epoll()`. + * This option is only available on certain platforms; using the option on + * platform without `epoll` support will cause #MHD_start_daemon to fail. + * @sa ::MHD_FEATURE_EPOLL, #MHD_USE_EPOLL, #MHD_USE_INTERNAL_POLLING_THREAD + */ + MHD_USE_EPOLL_INTERNAL_THREAD = MHD_USE_EPOLL | MHD_USE_INTERNAL_POLLING_THREAD, + + /** @deprecated */ + MHD_USE_EPOLL_INTERNALLY = MHD_USE_EPOLL | MHD_USE_INTERNAL_POLLING_THREAD, + /** @deprecated */ + MHD_USE_EPOLL_INTERNALLY_LINUX_ONLY = MHD_USE_EPOLL | MHD_USE_INTERNAL_POLLING_THREAD, +#if 0 /* Will be marked for real deprecation later. */ +#define MHD_USE_EPOLL_INTERNALLY \ + _MHD_DEPR_IN_MACRO("Value MHD_USE_EPOLL_INTERNALLY is deprecated, use MHD_USE_EPOLL_INTERNAL_THREAD") \ + MHD_USE_EPOLL_INTERNAL_THREAD + /** @deprecated */ +#define MHD_USE_EPOLL_INTERNALLY_LINUX_ONLY \ + _MHD_DEPR_IN_MACRO("Value MHD_USE_EPOLL_INTERNALLY_LINUX_ONLY is deprecated, use MHD_USE_EPOLL_INTERNAL_THREAD") \ + MHD_USE_EPOLL_INTERNAL_THREAD +#endif /* 0 */ + + /** + * Use inter-thread communication channel. + * #MHD_USE_ITC can be used with #MHD_USE_INTERNAL_POLLING_THREAD + * and is ignored with any "external" mode. + * It's required for use of #MHD_quiesce_daemon + * or #MHD_add_connection. + * This option is enforced by #MHD_ALLOW_SUSPEND_RESUME or + * #MHD_USE_NO_LISTEN_SOCKET. + * #MHD_USE_ITC is always used automatically on platforms + * where select()/poll()/other ignore shutdown of listen + * socket. + */ + MHD_USE_ITC = 1024, + + /** @deprecated */ + MHD_USE_PIPE_FOR_SHUTDOWN = 1024, +#if 0 /* Will be marked for real deprecation later. */ +#define MHD_USE_PIPE_FOR_SHUTDOWN \ + _MHD_DEPR_IN_MACRO("Value MHD_USE_PIPE_FOR_SHUTDOWN is deprecated, use MHD_USE_ITC") \ + MHD_USE_ITC +#endif /* 0 */ + + /** + * Use a single socket for IPv4 and IPv6. + */ + MHD_USE_DUAL_STACK = MHD_USE_IPv6 | 2048, + + /** + * Enable `turbo`. Disables certain calls to `shutdown()`, + * enables aggressive non-blocking optimistic reads and + * other potentially unsafe optimizations. + * Most effects only happen with #MHD_USE_EPOLL. + */ + MHD_USE_TURBO = 4096, + + /** @deprecated */ + MHD_USE_EPOLL_TURBO = 4096, +#if 0 /* Will be marked for real deprecation later. */ +#define MHD_USE_EPOLL_TURBO \ + _MHD_DEPR_IN_MACRO("Value MHD_USE_EPOLL_TURBO is deprecated, use MHD_USE_TURBO") \ + MHD_USE_TURBO +#endif /* 0 */ + + /** + * Enable suspend/resume functions, which also implies setting up + * ITC to signal resume. + */ + MHD_ALLOW_SUSPEND_RESUME = 8192 | MHD_USE_ITC, + + /** @deprecated */ + MHD_USE_SUSPEND_RESUME = 8192 | MHD_USE_ITC, +#if 0 /* Will be marked for real deprecation later. */ +#define MHD_USE_SUSPEND_RESUME \ + _MHD_DEPR_IN_MACRO("Value MHD_USE_SUSPEND_RESUME is deprecated, use MHD_ALLOW_SUSPEND_RESUME instead") \ + MHD_ALLOW_SUSPEND_RESUME +#endif /* 0 */ + + /** + * Enable TCP_FASTOPEN option. This option is only available on Linux with a + * kernel >= 3.6. On other systems, using this option cases #MHD_start_daemon + * to fail. + */ + MHD_USE_TCP_FASTOPEN = 16384, + + /** + * You need to set this option if you want to use HTTP "Upgrade". + * "Upgrade" may require usage of additional internal resources, + * which we do not want to use unless necessary. + */ + MHD_ALLOW_UPGRADE = 32768, + + /** + * Automatically use best available polling function. + * Choice of polling function is also depend on other daemon options. + * If #MHD_USE_INTERNAL_POLLING_THREAD is specified then epoll, poll() or + * select() will be used (listed in decreasing preference order, first + * function available on system will be used). + * If #MHD_USE_THREAD_PER_CONNECTION is specified then poll() or select() + * will be used. + * If those flags are not specified then epoll or select() will be + * used (as the only suitable for MHD_get_fdset()) + */ + MHD_USE_AUTO = 65536, + + /** + * Run using an internal thread (or thread pool) with best available on + * system polling function. + * This is combination of #MHD_USE_AUTO and #MHD_USE_INTERNAL_POLLING_THREAD + * flags. + */ + MHD_USE_AUTO_INTERNAL_THREAD = MHD_USE_AUTO | MHD_USE_INTERNAL_POLLING_THREAD + +}; + + +/** + * Type of a callback function used for logging by MHD. + * + * @param cls closure + * @param fm format string (`printf()`-style) + * @param ap arguments to @a fm + * @ingroup logging + */ +typedef void +(*MHD_LogCallback)(void *cls, + const char *fm, + va_list ap); + + +/** + * @brief MHD options. + * + * Passed in the varargs portion of #MHD_start_daemon. + */ +enum MHD_OPTION +{ + + /** + * No more options / last option. This is used + * to terminate the VARARGs list. + */ + MHD_OPTION_END = 0, + + /** + * Maximum memory size per connection (followed by a `size_t`). + * Default is 32 kb (#MHD_POOL_SIZE_DEFAULT). + * Values above 128k are unlikely to result in much benefit, as half + * of the memory will be typically used for IO, and TCP buffers are + * unlikely to support window sizes above 64k on most systems. + */ + MHD_OPTION_CONNECTION_MEMORY_LIMIT = 1, + + /** + * Maximum number of concurrent connections to + * accept (followed by an `unsigned int`). + */ + MHD_OPTION_CONNECTION_LIMIT = 2, + + /** + * After how many seconds of inactivity should a + * connection automatically be timed out? (followed + * by an `unsigned int`; use zero for no timeout). + */ + MHD_OPTION_CONNECTION_TIMEOUT = 3, + + /** + * Register a function that should be called whenever a request has + * been completed (this can be used for application-specific clean + * up). Requests that have never been presented to the application + * (via #MHD_AccessHandlerCallback) will not result in + * notifications. + * + * This option should be followed by TWO pointers. First a pointer + * to a function of type #MHD_RequestCompletedCallback and second a + * pointer to a closure to pass to the request completed callback. + * The second pointer maybe NULL. + */ + MHD_OPTION_NOTIFY_COMPLETED = 4, + + /** + * Limit on the number of (concurrent) connections made to the + * server from the same IP address. Can be used to prevent one + * IP from taking over all of the allowed connections. If the + * same IP tries to establish more than the specified number of + * connections, they will be immediately rejected. The option + * should be followed by an `unsigned int`. The default is + * zero, which means no limit on the number of connections + * from the same IP address. + */ + MHD_OPTION_PER_IP_CONNECTION_LIMIT = 5, + + /** + * Bind daemon to the supplied `struct sockaddr`. This option should + * be followed by a `struct sockaddr *`. If #MHD_USE_IPv6 is + * specified, the `struct sockaddr*` should point to a `struct + * sockaddr_in6`, otherwise to a `struct sockaddr_in`. + */ + MHD_OPTION_SOCK_ADDR = 6, + + /** + * Specify a function that should be called before parsing the URI from + * the client. The specified callback function can be used for processing + * the URI (including the options) before it is parsed. The URI after + * parsing will no longer contain the options, which maybe inconvenient for + * logging. This option should be followed by two arguments, the first + * one must be of the form + * + * void * my_logger(void *cls, const char *uri, struct MHD_Connection *con) + * + * where the return value will be passed as + * (`* con_cls`) in calls to the #MHD_AccessHandlerCallback + * when this request is processed later; returning a + * value of NULL has no special significance (however, + * note that if you return non-NULL, you can no longer + * rely on the first call to the access handler having + * `NULL == *con_cls` on entry;) + * "cls" will be set to the second argument following + * #MHD_OPTION_URI_LOG_CALLBACK. Finally, uri will + * be the 0-terminated URI of the request. + * + * Note that during the time of this call, most of the connection's + * state is not initialized (as we have not yet parsed the headers). + * However, information about the connecting client (IP, socket) + * is available. + * + * The specified function is called only once per request, therefore some + * programmers may use it to instantiate their own request objects, freeing + * them in the notifier #MHD_OPTION_NOTIFY_COMPLETED. + */ + MHD_OPTION_URI_LOG_CALLBACK = 7, + + /** + * Memory pointer for the private key (key.pem) to be used by the + * HTTPS daemon. This option should be followed by a + * `const char *` argument. + * This should be used in conjunction with #MHD_OPTION_HTTPS_MEM_CERT. + */ + MHD_OPTION_HTTPS_MEM_KEY = 8, + + /** + * Memory pointer for the certificate (cert.pem) to be used by the + * HTTPS daemon. This option should be followed by a + * `const char *` argument. + * This should be used in conjunction with #MHD_OPTION_HTTPS_MEM_KEY. + */ + MHD_OPTION_HTTPS_MEM_CERT = 9, + + /** + * Daemon credentials type. + * Followed by an argument of type + * `gnutls_credentials_type_t`. + */ + MHD_OPTION_HTTPS_CRED_TYPE = 10, + + /** + * Memory pointer to a `const char *` specifying the + * cipher algorithm (default: "NORMAL"). + */ + MHD_OPTION_HTTPS_PRIORITIES = 11, + + /** + * Pass a listen socket for MHD to use (systemd-style). If this + * option is used, MHD will not open its own listen socket(s). The + * argument passed must be of type `MHD_socket` and refer to an + * existing socket that has been bound to a port and is listening. + */ + MHD_OPTION_LISTEN_SOCKET = 12, + + /** + * Use the given function for logging error messages. This option + * must be followed by two arguments; the first must be a pointer to + * a function of type #MHD_LogCallback and the second a pointer + * `void *` which will be passed as the first argument to the log + * callback. + * + * Note that MHD will not generate any log messages + * if it was compiled without the "--enable-messages" + * flag being set. + */ + MHD_OPTION_EXTERNAL_LOGGER = 13, + + /** + * Number (`unsigned int`) of threads in thread pool. Enable + * thread pooling by setting this value to to something + * greater than 1. Currently, thread model must be + * #MHD_USE_INTERNAL_POLLING_THREAD if thread pooling is enabled + * (#MHD_start_daemon returns NULL for an unsupported thread + * model). + */ + MHD_OPTION_THREAD_POOL_SIZE = 14, + + /** + * Additional options given in an array of `struct MHD_OptionItem`. + * The array must be terminated with an entry `{MHD_OPTION_END, 0, NULL}`. + * An example for code using #MHD_OPTION_ARRAY is: + * + * struct MHD_OptionItem ops[] = { + * { MHD_OPTION_CONNECTION_LIMIT, 100, NULL }, + * { MHD_OPTION_CONNECTION_TIMEOUT, 10, NULL }, + * { MHD_OPTION_END, 0, NULL } + * }; + * d = MHD_start_daemon (0, 8080, NULL, NULL, dh, NULL, + * MHD_OPTION_ARRAY, ops, + * MHD_OPTION_END); + * + * For options that expect a single pointer argument, the + * second member of the `struct MHD_OptionItem` is ignored. + * For options that expect two pointer arguments, the first + * argument must be cast to `intptr_t`. + */ + MHD_OPTION_ARRAY = 15, + + /** + * Specify a function that should be called for unescaping escape + * sequences in URIs and URI arguments. Note that this function + * will NOT be used by the `struct MHD_PostProcessor`. If this + * option is not specified, the default method will be used which + * decodes escape sequences of the form "%HH". This option should + * be followed by two arguments, the first one must be of the form + * + * size_t my_unescaper(void *cls, + * struct MHD_Connection *c, + * char *s) + * + * where the return value must be "strlen(s)" and "s" should be + * updated. Note that the unescape function must not lengthen "s" + * (the result must be shorter than the input and still be + * 0-terminated). "cls" will be set to the second argument + * following #MHD_OPTION_UNESCAPE_CALLBACK. + */ + MHD_OPTION_UNESCAPE_CALLBACK = 16, + + /** + * Memory pointer for the random values to be used by the Digest + * Auth module. This option should be followed by two arguments. + * First an integer of type `size_t` which specifies the size + * of the buffer pointed to by the second argument in bytes. + * Note that the application must ensure that the buffer of the + * second argument remains allocated and unmodified while the + * deamon is running. + */ + MHD_OPTION_DIGEST_AUTH_RANDOM = 17, + + /** + * Size of the internal array holding the map of the nonce and + * the nonce counter. This option should be followed by an `unsigend int` + * argument. + */ + MHD_OPTION_NONCE_NC_SIZE = 18, + + /** + * Desired size of the stack for threads created by MHD. Followed + * by an argument of type `size_t`. Use 0 for system default. + */ + MHD_OPTION_THREAD_STACK_SIZE = 19, + + /** + * Memory pointer for the certificate (ca.pem) to be used by the + * HTTPS daemon for client authentification. + * This option should be followed by a `const char *` argument. + */ + MHD_OPTION_HTTPS_MEM_TRUST = 20, + + /** + * Increment to use for growing the read buffer (followed by a + * `size_t`). Must fit within #MHD_OPTION_CONNECTION_MEMORY_LIMIT. + */ + MHD_OPTION_CONNECTION_MEMORY_INCREMENT = 21, + + /** + * Use a callback to determine which X.509 certificate should be + * used for a given HTTPS connection. This option should be + * followed by a argument of type `gnutls_certificate_retrieve_function2 *`. + * This option provides an + * alternative to #MHD_OPTION_HTTPS_MEM_KEY, + * #MHD_OPTION_HTTPS_MEM_CERT. You must use this version if + * multiple domains are to be hosted at the same IP address using + * TLS's Server Name Indication (SNI) extension. In this case, + * the callback is expected to select the correct certificate + * based on the SNI information provided. The callback is expected + * to access the SNI data using `gnutls_server_name_get()`. + * Using this option requires GnuTLS 3.0 or higher. + */ + MHD_OPTION_HTTPS_CERT_CALLBACK = 22, + + /** + * When using #MHD_USE_TCP_FASTOPEN, this option changes the default TCP + * fastopen queue length of 50. Note that having a larger queue size can + * cause resource exhaustion attack as the TCP stack has to now allocate + * resources for the SYN packet along with its DATA. This option should be + * followed by an `unsigned int` argument. + */ + MHD_OPTION_TCP_FASTOPEN_QUEUE_SIZE = 23, + + /** + * Memory pointer for the Diffie-Hellman parameters (dh.pem) to be used by the + * HTTPS daemon for key exchange. + * This option must be followed by a `const char *` argument. + */ + MHD_OPTION_HTTPS_MEM_DHPARAMS = 24, + + /** + * If present and set to true, allow reusing address:port socket + * (by using SO_REUSEPORT on most platform, or platform-specific ways). + * If present and set to false, disallow reusing address:port socket + * (does nothing on most plaform, but uses SO_EXCLUSIVEADDRUSE on Windows). + * This option must be followed by a `unsigned int` argument. + */ + MHD_OPTION_LISTENING_ADDRESS_REUSE = 25, + + /** + * Memory pointer for a password that decrypts the private key (key.pem) + * to be used by the HTTPS daemon. This option should be followed by a + * `const char *` argument. + * This should be used in conjunction with #MHD_OPTION_HTTPS_MEM_KEY. + * @sa ::MHD_FEATURE_HTTPS_KEY_PASSWORD + */ + MHD_OPTION_HTTPS_KEY_PASSWORD = 26, + + /** + * Register a function that should be called whenever a connection is + * started or closed. + * + * This option should be followed by TWO pointers. First a pointer + * to a function of type #MHD_NotifyConnectionCallback and second a + * pointer to a closure to pass to the request completed callback. + * The second pointer maybe NULL. + */ + MHD_OPTION_NOTIFY_CONNECTION = 27, + + /** + * Allow to change maximum length of the queue of pending connections on + * listen socket. If not present than default platform-specific SOMAXCONN + * value is used. This option should be followed by an `unsigned int` + * argument. + */ + MHD_OPTION_LISTEN_BACKLOG_SIZE = 28, + + /** + * If set to 1 - be strict about the protocol (as opposed to as + * tolerant as possible). Specifically, at the moment, this flag + * causes MHD to reject HTTP 1.1 connections without a "Host" header. + * This is required by the standard, but of course in violation of + * the "be as liberal as possible in what you accept" norm. It is + * recommended to set this to 1 if you are testing clients against + * MHD, and 0 in production. + * if set to -1 - be opposite to strict and be permissive about the + * protocol, allowing slight deviations that are technically not + * allowed by the RFC. Specifically, at the moment, this flag + * causes MHD to allow spaces in header field names. This is + * disallowed by the standard. + * It is not recommended to set it to -1 on publicly available + * servers as it may potentially lower level of protection. + * This option should be followed by an `int` argument. + */ + MHD_OPTION_STRICT_FOR_CLIENT = 29 +}; + + +/** + * Entry in an #MHD_OPTION_ARRAY. + */ +struct MHD_OptionItem +{ + /** + * Which option is being given. Use #MHD_OPTION_END + * to terminate the array. + */ + enum MHD_OPTION option; + + /** + * Option value (for integer arguments, and for options requiring + * two pointer arguments); should be 0 for options that take no + * arguments or only a single pointer argument. + */ + intptr_t value; + + /** + * Pointer option value (use NULL for options taking no arguments + * or only an integer option). + */ + void *ptr_value; + +}; + + +/** + * The `enum MHD_ValueKind` specifies the source of + * the key-value pairs in the HTTP protocol. + */ +enum MHD_ValueKind +{ + + /** + * Response header + * @deprecated + */ + MHD_RESPONSE_HEADER_KIND = 0, +#define MHD_RESPONSE_HEADER_KIND \ + _MHD_DEPR_IN_MACRO("Value MHD_RESPONSE_HEADER_KIND is deprecated and not used") \ + MHD_RESPONSE_HEADER_KIND + + /** + * HTTP header (request/response). + */ + MHD_HEADER_KIND = 1, + + /** + * Cookies. Note that the original HTTP header containing + * the cookie(s) will still be available and intact. + */ + MHD_COOKIE_KIND = 2, + + /** + * POST data. This is available only if a content encoding + * supported by MHD is used (currently only URL encoding), + * and only if the posted content fits within the available + * memory pool. Note that in that case, the upload data + * given to the #MHD_AccessHandlerCallback will be + * empty (since it has already been processed). + */ + MHD_POSTDATA_KIND = 4, + + /** + * GET (URI) arguments. + */ + MHD_GET_ARGUMENT_KIND = 8, + + /** + * HTTP footer (only for HTTP 1.1 chunked encodings). + */ + MHD_FOOTER_KIND = 16 +}; + + +/** + * The `enum MHD_RequestTerminationCode` specifies reasons + * why a request has been terminated (or completed). + * @ingroup request + */ +enum MHD_RequestTerminationCode +{ + + /** + * We finished sending the response. + * @ingroup request + */ + MHD_REQUEST_TERMINATED_COMPLETED_OK = 0, + + /** + * Error handling the connection (resources + * exhausted, other side closed connection, + * application error accepting request, etc.) + * @ingroup request + */ + MHD_REQUEST_TERMINATED_WITH_ERROR = 1, + + /** + * No activity on the connection for the number + * of seconds specified using + * #MHD_OPTION_CONNECTION_TIMEOUT. + * @ingroup request + */ + MHD_REQUEST_TERMINATED_TIMEOUT_REACHED = 2, + + /** + * We had to close the session since MHD was being + * shut down. + * @ingroup request + */ + MHD_REQUEST_TERMINATED_DAEMON_SHUTDOWN = 3, + + /** + * We tried to read additional data, but the other side closed the + * connection. This error is similar to + * #MHD_REQUEST_TERMINATED_WITH_ERROR, but specific to the case where + * the connection died because the other side did not send expected + * data. + * @ingroup request + */ + MHD_REQUEST_TERMINATED_READ_ERROR = 4, + + /** + * The client terminated the connection by closing the socket + * for writing (TCP half-closed); MHD aborted sending the + * response according to RFC 2616, section 8.1.4. + * @ingroup request + */ + MHD_REQUEST_TERMINATED_CLIENT_ABORT = 5 + +}; + + +/** + * The `enum MHD_ConnectionNotificationCode` specifies types + * of connection notifications. + * @ingroup request + */ +enum MHD_ConnectionNotificationCode +{ + + /** + * A new connection has been started. + * @ingroup request + */ + MHD_CONNECTION_NOTIFY_STARTED = 0, + + /** + * A connection is closed. + * @ingroup request + */ + MHD_CONNECTION_NOTIFY_CLOSED = 1 + +}; + + +/** + * Information about a connection. + */ +union MHD_ConnectionInfo +{ + + /** + * Cipher algorithm used, of type "enum gnutls_cipher_algorithm". + */ + int /* enum gnutls_cipher_algorithm */ cipher_algorithm; + + /** + * Protocol used, of type "enum gnutls_protocol". + */ + int /* enum gnutls_protocol */ protocol; + + /** + * The suspended status of a connection. + */ + int /* MHD_YES or MHD_NO */ suspended; + + /** + * Amount of second that connection could spend in idle state + * before automatically disconnected. + * Zero for no timeout (unlimited idle time). + */ + unsigned int connection_timeout; + + /** + * Connect socket + */ + MHD_socket connect_fd; + + /** + * Size of the client's HTTP header. + */ + size_t header_size; + + /** + * GNUtls session handle, of type "gnutls_session_t". + */ + void * /* gnutls_session_t */ tls_session; + + /** + * GNUtls client certificate handle, of type "gnutls_x509_crt_t". + */ + void * /* gnutls_x509_crt_t */ client_cert; + + /** + * Address information for the client. + */ + struct sockaddr *client_addr; + + /** + * Which daemon manages this connection (useful in case there are many + * daemons running). + */ + struct MHD_Daemon *daemon; + + /** + * Socket-specific client context. Points to the same address as + * the "socket_context" of the #MHD_NotifyConnectionCallback. + */ + void *socket_context; +}; + + +/** + * Values of this enum are used to specify what + * information about a connection is desired. + * @ingroup request + */ +enum MHD_ConnectionInfoType +{ + /** + * What cipher algorithm is being used. + * Takes no extra arguments. + * @ingroup request + */ + MHD_CONNECTION_INFO_CIPHER_ALGO, + + /** + * + * Takes no extra arguments. + * @ingroup request + */ + MHD_CONNECTION_INFO_PROTOCOL, + + /** + * Obtain IP address of the client. Takes no extra arguments. + * Returns essentially a `struct sockaddr **` (since the API returns + * a `union MHD_ConnectionInfo *` and that union contains a `struct + * sockaddr *`). + * @ingroup request + */ + MHD_CONNECTION_INFO_CLIENT_ADDRESS, + + /** + * Get the gnuTLS session handle. + * @ingroup request + */ + MHD_CONNECTION_INFO_GNUTLS_SESSION, + + /** + * Get the gnuTLS client certificate handle. Dysfunctional (never + * implemented, deprecated). Use #MHD_CONNECTION_INFO_GNUTLS_SESSION + * to get the `gnutls_session_t` and then call + * gnutls_certificate_get_peers(). + */ + MHD_CONNECTION_INFO_GNUTLS_CLIENT_CERT, + + /** + * Get the `struct MHD_Daemon *` responsible for managing this connection. + * @ingroup request + */ + MHD_CONNECTION_INFO_DAEMON, + + /** + * Request the file descriptor for the connection socket. + * No extra arguments should be passed. + * @ingroup request + */ + MHD_CONNECTION_INFO_CONNECTION_FD, + + /** + * Returns the client-specific pointer to a `void *` that was (possibly) + * set during a #MHD_NotifyConnectionCallback when the socket was + * first accepted. Note that this is NOT the same as the "con_cls" + * argument of the #MHD_AccessHandlerCallback. The "con_cls" is + * fresh for each HTTP request, while the "socket_context" is fresh + * for each socket. + */ + MHD_CONNECTION_INFO_SOCKET_CONTEXT, + + /** + * Check whether the connection is suspended. + * @ingroup request + */ + MHD_CONNECTION_INFO_CONNECTION_SUSPENDED, + + /** + * Get connection timeout + * @ingroup request + */ + MHD_CONNECTION_INFO_CONNECTION_TIMEOUT, + + /** + * Return length of the client's HTTP request header. + * @ingroup request + */ + MHD_CONNECTION_INFO_REQUEST_HEADER_SIZE +}; + + +/** + * Values of this enum are used to specify what + * information about a deamon is desired. + */ +enum MHD_DaemonInfoType +{ + /** + * No longer supported (will return NULL). + */ + MHD_DAEMON_INFO_KEY_SIZE, + + /** + * No longer supported (will return NULL). + */ + MHD_DAEMON_INFO_MAC_KEY_SIZE, + + /** + * Request the file descriptor for the listening socket. + * No extra arguments should be passed. + */ + MHD_DAEMON_INFO_LISTEN_FD, + + /** + * Request the file descriptor for the external epoll. + * No extra arguments should be passed. + */ + MHD_DAEMON_INFO_EPOLL_FD_LINUX_ONLY, + MHD_DAEMON_INFO_EPOLL_FD = MHD_DAEMON_INFO_EPOLL_FD_LINUX_ONLY, + + /** + * Request the number of current connections handled by the daemon. + * No extra arguments should be passed. + * Note: when using MHD in external polling mode, this type of request + * could be used only when #MHD_run()/#MHD_run_from_select is not + * working in other thread at the same time. + */ + MHD_DAEMON_INFO_CURRENT_CONNECTIONS, + + /** + * Request the daemon flags. + * No extra arguments should be passed. + * Note: flags may differ from original 'flags' specified for + * daemon, especially if #MHD_USE_AUTO was set. + */ + MHD_DAEMON_INFO_FLAGS +}; + + +/** + * Callback for serious error condition. The default action is to print + * an error message and `abort()`. + * + * @param cls user specified value + * @param file where the error occured + * @param line where the error occured + * @param reason error detail, may be NULL + * @ingroup logging + */ +typedef void +(*MHD_PanicCallback) (void *cls, + const char *file, + unsigned int line, + const char *reason); + +/** + * Allow or deny a client to connect. + * + * @param cls closure + * @param addr address information from the client + * @param addrlen length of @a addr + * @return #MHD_YES if connection is allowed, #MHD_NO if not + */ +typedef int +(*MHD_AcceptPolicyCallback) (void *cls, + const struct sockaddr *addr, + socklen_t addrlen); + + +/** + * A client has requested the given url using the given method + * (#MHD_HTTP_METHOD_GET, #MHD_HTTP_METHOD_PUT, + * #MHD_HTTP_METHOD_DELETE, #MHD_HTTP_METHOD_POST, etc). The callback + * must call MHD callbacks to provide content to give back to the + * client and return an HTTP status code (i.e. #MHD_HTTP_OK, + * #MHD_HTTP_NOT_FOUND, etc.). + * + * @param cls argument given together with the function + * pointer when the handler was registered with MHD + * @param url the requested url + * @param method the HTTP method used (#MHD_HTTP_METHOD_GET, + * #MHD_HTTP_METHOD_PUT, etc.) + * @param version the HTTP version string (i.e. + * #MHD_HTTP_VERSION_1_1) + * @param upload_data the data being uploaded (excluding HEADERS, + * for a POST that fits into memory and that is encoded + * with a supported encoding, the POST data will NOT be + * given in upload_data and is instead available as + * part of #MHD_get_connection_values; very large POST + * data *will* be made available incrementally in + * @a upload_data) + * @param upload_data_size set initially to the size of the + * @a upload_data provided; the method must update this + * value to the number of bytes NOT processed; + * @param con_cls pointer that the callback can set to some + * address and that will be preserved by MHD for future + * calls for this request; since the access handler may + * be called many times (i.e., for a PUT/POST operation + * with plenty of upload data) this allows the application + * to easily associate some request-specific state. + * If necessary, this state can be cleaned up in the + * global #MHD_RequestCompletedCallback (which + * can be set with the #MHD_OPTION_NOTIFY_COMPLETED). + * Initially, `*con_cls` will be NULL. + * @return #MHD_YES if the connection was handled successfully, + * #MHD_NO if the socket must be closed due to a serios + * error while handling the request + */ +typedef int +(*MHD_AccessHandlerCallback) (void *cls, + struct MHD_Connection *connection, + const char *url, + const char *method, + const char *version, + const char *upload_data, + size_t *upload_data_size, + void **con_cls); + + +/** + * Signature of the callback used by MHD to notify the + * application about completed requests. + * + * @param cls client-defined closure + * @param connection connection handle + * @param con_cls value as set by the last call to + * the #MHD_AccessHandlerCallback + * @param toe reason for request termination + * @see #MHD_OPTION_NOTIFY_COMPLETED + * @ingroup request + */ +typedef void +(*MHD_RequestCompletedCallback) (void *cls, + struct MHD_Connection *connection, + void **con_cls, + enum MHD_RequestTerminationCode toe); + +/** + * Signature of the callback used by MHD to notify the + * application about started/stopped connections + * + * @param cls client-defined closure + * @param connection connection handle + * @param socket_context socket-specific pointer where the + * client can associate some state specific + * to the TCP connection; note that this is + * different from the "con_cls" which is per + * HTTP request. The client can initialize + * during #MHD_CONNECTION_NOTIFY_STARTED and + * cleanup during #MHD_CONNECTION_NOTIFY_CLOSED + * and access in the meantime using + * #MHD_CONNECTION_INFO_SOCKET_CONTEXT. + * @param toe reason for connection notification + * @see #MHD_OPTION_NOTIFY_CONNECTION + * @ingroup request + */ +typedef void +(*MHD_NotifyConnectionCallback) (void *cls, + struct MHD_Connection *connection, + void **socket_context, + enum MHD_ConnectionNotificationCode toe); + + +/** + * Iterator over key-value pairs. This iterator + * can be used to iterate over all of the cookies, + * headers, or POST-data fields of a request, and + * also to iterate over the headers that have been + * added to a response. + * + * @param cls closure + * @param kind kind of the header we are looking at + * @param key key for the value, can be an empty string + * @param value corresponding value, can be NULL + * @return #MHD_YES to continue iterating, + * #MHD_NO to abort the iteration + * @ingroup request + */ +typedef int +(*MHD_KeyValueIterator) (void *cls, + enum MHD_ValueKind kind, + const char *key, + const char *value); + + +/** + * Callback used by libmicrohttpd in order to obtain content. The + * callback is to copy at most @a max bytes of content into @a buf. The + * total number of bytes that has been placed into @a buf should be + * returned. + * + * Note that returning zero will cause libmicrohttpd to try again. + * Thus, returning zero should only be used in conjunction + * with MHD_suspend_connection() to avoid busy waiting. + * + * @param cls extra argument to the callback + * @param pos position in the datastream to access; + * note that if a `struct MHD_Response` object is re-used, + * it is possible for the same content reader to + * be queried multiple times for the same data; + * however, if a `struct MHD_Response` is not re-used, + * libmicrohttpd guarantees that "pos" will be + * the sum of all non-negative return values + * obtained from the content reader so far. + * @param buf where to copy the data + * @param max maximum number of bytes to copy to @a buf (size of @a buf) + * @return number of bytes written to @a buf; + * 0 is legal unless we are running in internal select mode (since + * this would cause busy-waiting); 0 in external select mode + * will cause this function to be called again once the external + * select calls MHD again; + * #MHD_CONTENT_READER_END_OF_STREAM (-1) for the regular + * end of transmission (with chunked encoding, MHD will then + * terminate the chunk and send any HTTP footers that might be + * present; without chunked encoding and given an unknown + * response size, MHD will simply close the connection; note + * that while returning #MHD_CONTENT_READER_END_OF_STREAM is not technically + * legal if a response size was specified, MHD accepts this + * and treats it just as #MHD_CONTENT_READER_END_WITH_ERROR; + * #MHD_CONTENT_READER_END_WITH_ERROR (-2) to indicate a server + * error generating the response; this will cause MHD to simply + * close the connection immediately. If a response size was + * given or if chunked encoding is in use, this will indicate + * an error to the client. Note, however, that if the client + * does not know a response size and chunked encoding is not in + * use, then clients will not be able to tell the difference between + * #MHD_CONTENT_READER_END_WITH_ERROR and #MHD_CONTENT_READER_END_OF_STREAM. + * This is not a limitation of MHD but rather of the HTTP protocol. + */ +typedef ssize_t +(*MHD_ContentReaderCallback) (void *cls, + uint64_t pos, + char *buf, + size_t max); + + +/** + * This method is called by libmicrohttpd if we + * are done with a content reader. It should + * be used to free resources associated with the + * content reader. + * + * @param cls closure + * @ingroup response + */ +typedef void +(*MHD_ContentReaderFreeCallback) (void *cls); + + +/** + * Iterator over key-value pairs where the value + * maybe made available in increments and/or may + * not be zero-terminated. Used for processing + * POST data. + * + * @param cls user-specified closure + * @param kind type of the value, always #MHD_POSTDATA_KIND when called from MHD + * @param key 0-terminated key for the value + * @param filename name of the uploaded file, NULL if not known + * @param content_type mime-type of the data, NULL if not known + * @param transfer_encoding encoding of the data, NULL if not known + * @param data pointer to @a size bytes of data at the + * specified offset + * @param off offset of data in the overall value + * @param size number of bytes in @a data available + * @return #MHD_YES to continue iterating, + * #MHD_NO to abort the iteration + */ +typedef int +(*MHD_PostDataIterator) (void *cls, + enum MHD_ValueKind kind, + const char *key, + const char *filename, + const char *content_type, + const char *transfer_encoding, + const char *data, + uint64_t off, + size_t size); + +/* **************** Daemon handling functions ***************** */ + +/** + * Start a webserver on the given port. + * + * @param flags combination of `enum MHD_FLAG` values + * @param port port to bind to (in host byte order) + * @param apc callback to call to check which clients + * will be allowed to connect; you can pass NULL + * in which case connections from any IP will be + * accepted + * @param apc_cls extra argument to apc + * @param dh handler called for all requests (repeatedly) + * @param dh_cls extra argument to @a dh + * @param ap list of options (type-value pairs, + * terminated with #MHD_OPTION_END). + * @return NULL on error, handle to daemon on success + * @ingroup event + */ +_MHD_EXTERN struct MHD_Daemon * +MHD_start_daemon_va (unsigned int flags, + uint16_t port, + MHD_AcceptPolicyCallback apc, void *apc_cls, + MHD_AccessHandlerCallback dh, void *dh_cls, + va_list ap); + + +/** + * Start a webserver on the given port. Variadic version of + * #MHD_start_daemon_va. + * + * @param flags combination of `enum MHD_FLAG` values + * @param port port to bind to + * @param apc callback to call to check which clients + * will be allowed to connect; you can pass NULL + * in which case connections from any IP will be + * accepted + * @param apc_cls extra argument to apc + * @param dh handler called for all requests (repeatedly) + * @param dh_cls extra argument to @a dh + * @return NULL on error, handle to daemon on success + * @ingroup event + */ +_MHD_EXTERN struct MHD_Daemon * +MHD_start_daemon (unsigned int flags, + uint16_t port, + MHD_AcceptPolicyCallback apc, void *apc_cls, + MHD_AccessHandlerCallback dh, void *dh_cls, + ...); + + +/** + * Stop accepting connections from the listening socket. Allows + * clients to continue processing, but stops accepting new + * connections. Note that the caller is responsible for closing the + * returned socket; however, if MHD is run using threads (anything but + * external select mode), it must not be closed until AFTER + * #MHD_stop_daemon has been called (as it is theoretically possible + * that an existing thread is still using it). + * + * Note that some thread modes require the caller to have passed + * #MHD_USE_ITC when using this API. If this daemon is + * in one of those modes and this option was not given to + * #MHD_start_daemon, this function will return #MHD_INVALID_SOCKET. + * + * @param daemon daemon to stop accepting new connections for + * @return old listen socket on success, #MHD_INVALID_SOCKET if + * the daemon was already not listening anymore + * @ingroup specialized + */ +_MHD_EXTERN MHD_socket +MHD_quiesce_daemon (struct MHD_Daemon *daemon); + + +/** + * Shutdown an HTTP daemon. + * + * @param daemon daemon to stop + * @ingroup event + */ +_MHD_EXTERN void +MHD_stop_daemon (struct MHD_Daemon *daemon); + + +/** + * Add another client connection to the set of connections managed by + * MHD. This API is usually not needed (since MHD will accept inbound + * connections on the server socket). Use this API in special cases, + * for example if your HTTP server is behind NAT and needs to connect + * out to the HTTP client, or if you are building a proxy. + * + * If you use this API in conjunction with a internal select or a + * thread pool, you must set the option + * #MHD_USE_ITC to ensure that the freshly added + * connection is immediately processed by MHD. + * + * The given client socket will be managed (and closed!) by MHD after + * this call and must no longer be used directly by the application + * afterwards. + * + * Per-IP connection limits are ignored when using this API. + * + * @param daemon daemon that manages the connection + * @param client_socket socket to manage (MHD will expect + * to receive an HTTP request from this socket next). + * @param addr IP address of the client + * @param addrlen number of bytes in @a addr + * @return #MHD_YES on success, #MHD_NO if this daemon could + * not handle the connection (i.e. `malloc()` failed, etc). + * The socket will be closed in any case; `errno` is + * set to indicate further details about the error. + * @ingroup specialized + */ +_MHD_EXTERN int +MHD_add_connection (struct MHD_Daemon *daemon, + MHD_socket client_socket, + const struct sockaddr *addr, + socklen_t addrlen); + + +/** + * Obtain the `select()` sets for this daemon. + * Daemon's FDs will be added to fd_sets. To get only + * daemon FDs in fd_sets, call FD_ZERO for each fd_set + * before calling this function. FD_SETSIZE is assumed + * to be platform's default. + * + * This function should only be called in when MHD is configured to + * use external select with @code{select()} or with @code{epoll()}. + * In the latter case, it will only add the single @code{epoll()} file + * descriptor used by MHD to the sets. + * + * This function must be called only for daemon started + * without #MHD_USE_INTERNAL_POLLING_THREAD flag. + * + * @param daemon daemon to get sets from + * @param read_fd_set read set + * @param write_fd_set write set + * @param except_fd_set except set + * @param max_fd increased to largest FD added (if larger + * than existing value); can be NULL + * @return #MHD_YES on success, #MHD_NO if this + * daemon was not started with the right + * options for this call or any FD didn't + * fit fd_set. + * @ingroup event + */ +_MHD_EXTERN int +MHD_get_fdset (struct MHD_Daemon *daemon, + fd_set *read_fd_set, + fd_set *write_fd_set, + fd_set *except_fd_set, + MHD_socket *max_fd); + + +/** + * Obtain the `select()` sets for this daemon. + * Daemon's FDs will be added to fd_sets. To get only + * daemon FDs in fd_sets, call FD_ZERO for each fd_set + * before calling this function. + * + * Passing custom FD_SETSIZE as @a fd_setsize allow usage of + * larger/smaller than platform's default fd_sets. + * + * This function should only be called in when MHD is configured to + * use external select with @code{select()} or with @code{epoll()}. + * In the latter case, it will only add the single @code{epoll()} file + * descriptor used by MHD to the sets. + * + * This function must be called only for daemon started + * without #MHD_USE_INTERNAL_POLLING_THREAD flag. + * + * @param daemon daemon to get sets from + * @param read_fd_set read set + * @param write_fd_set write set + * @param except_fd_set except set + * @param max_fd increased to largest FD added (if larger + * than existing value); can be NULL + * @param fd_setsize value of FD_SETSIZE + * @return #MHD_YES on success, #MHD_NO if this + * daemon was not started with the right + * options for this call or any FD didn't + * fit fd_set. + * @ingroup event + */ +_MHD_EXTERN int +MHD_get_fdset2 (struct MHD_Daemon *daemon, + fd_set *read_fd_set, + fd_set *write_fd_set, + fd_set *except_fd_set, + MHD_socket *max_fd, + unsigned int fd_setsize); + + +/** + * Obtain the `select()` sets for this daemon. + * Daemon's FDs will be added to fd_sets. To get only + * daemon FDs in fd_sets, call FD_ZERO for each fd_set + * before calling this function. Size of fd_set is + * determined by current value of FD_SETSIZE. + * + * This function could be called only for daemon started + * without #MHD_USE_INTERNAL_POLLING_THREAD flag. + * + * @param daemon daemon to get sets from + * @param read_fd_set read set + * @param write_fd_set write set + * @param except_fd_set except set + * @param max_fd increased to largest FD added (if larger + * than existing value); can be NULL + * @return #MHD_YES on success, #MHD_NO if this + * daemon was not started with the right + * options for this call or any FD didn't + * fit fd_set. + * @ingroup event + */ +#define MHD_get_fdset(daemon,read_fd_set,write_fd_set,except_fd_set,max_fd) \ + MHD_get_fdset2((daemon),(read_fd_set),(write_fd_set),(except_fd_set),(max_fd),FD_SETSIZE) + + +/** + * Obtain timeout value for `select()` for this daemon (only needed if + * connection timeout is used). The returned value is how many milliseconds + * `select()` or `poll()` should at most block, not the timeout value set for + * connections. This function MUST NOT be called if MHD is running with + * #MHD_USE_THREAD_PER_CONNECTION. + * + * @param daemon daemon to query for timeout + * @param timeout set to the timeout (in milliseconds) + * @return #MHD_YES on success, #MHD_NO if timeouts are + * not used (or no connections exist that would + * necessiate the use of a timeout right now). + * @ingroup event + */ +_MHD_EXTERN int +MHD_get_timeout (struct MHD_Daemon *daemon, + MHD_UNSIGNED_LONG_LONG *timeout); + + +/** + * Run webserver operations (without blocking unless in client + * callbacks). This method should be called by clients in combination + * with #MHD_get_fdset if the client-controlled select method is used. + * + * This function is a convenience method, which is useful if the + * fd_sets from #MHD_get_fdset were not directly passed to `select()`; + * with this function, MHD will internally do the appropriate `select()` + * call itself again. While it is always safe to call #MHD_run (if + * #MHD_USE_INTERNAL_POLLING_THREAD is not set), you should call + * #MHD_run_from_select if performance is important (as it saves an + * expensive call to `select()`). + * + * @param daemon daemon to run + * @return #MHD_YES on success, #MHD_NO if this + * daemon was not started with the right + * options for this call. + * @ingroup event + */ +_MHD_EXTERN int +MHD_run (struct MHD_Daemon *daemon); + + +/** + * Run webserver operations. This method should be called by clients + * in combination with #MHD_get_fdset if the client-controlled select + * method is used. + * + * You can use this function instead of #MHD_run if you called + * `select()` on the result from #MHD_get_fdset. File descriptors in + * the sets that are not controlled by MHD will be ignored. Calling + * this function instead of #MHD_run is more efficient as MHD will + * not have to call `select()` again to determine which operations are + * ready. + * + * This function cannot be used with daemon started with + * #MHD_USE_INTERNAL_POLLING_THREAD flag. + * + * @param daemon daemon to run select loop for + * @param read_fd_set read set + * @param write_fd_set write set + * @param except_fd_set except set + * @return #MHD_NO on serious errors, #MHD_YES on success + * @ingroup event + */ +_MHD_EXTERN int +MHD_run_from_select (struct MHD_Daemon *daemon, + const fd_set *read_fd_set, + const fd_set *write_fd_set, + const fd_set *except_fd_set); + + + + +/* **************** Connection handling functions ***************** */ + +/** + * Get all of the headers from the request. + * + * @param connection connection to get values from + * @param kind types of values to iterate over, can be a bitmask + * @param iterator callback to call on each header; + * maybe NULL (then just count headers) + * @param iterator_cls extra argument to @a iterator + * @return number of entries iterated over + * @ingroup request + */ +_MHD_EXTERN int +MHD_get_connection_values (struct MHD_Connection *connection, + enum MHD_ValueKind kind, + MHD_KeyValueIterator iterator, + void *iterator_cls); + + +/** + * This function can be used to add an entry to the HTTP headers of a + * connection (so that the #MHD_get_connection_values function will + * return them -- and the `struct MHD_PostProcessor` will also see + * them). This maybe required in certain situations (see Mantis + * #1399) where (broken) HTTP implementations fail to supply values + + * needed by the post processor (or other parts of the application). + * + * This function MUST only be called from within the + * #MHD_AccessHandlerCallback (otherwise, access maybe improperly + * synchronized). Furthermore, the client must guarantee that the key + * and value arguments are 0-terminated strings that are NOT freed + * until the connection is closed. (The easiest way to do this is by + * passing only arguments to permanently allocated strings.). + * + * @param connection the connection for which a + * value should be set + * @param kind kind of the value + * @param key key for the value + * @param value the value itself + * @return #MHD_NO if the operation could not be + * performed due to insufficient memory; + * #MHD_YES on success + * @ingroup request + */ +_MHD_EXTERN int +MHD_set_connection_value (struct MHD_Connection *connection, + enum MHD_ValueKind kind, + const char *key, + const char *value); + + +/** + * Sets the global error handler to a different implementation. @a cb + * will only be called in the case of typically fatal, serious + * internal consistency issues. These issues should only arise in the + * case of serious memory corruption or similar problems with the + * architecture. While @a cb is allowed to return and MHD will then + * try to continue, this is never safe. + * + * The default implementation that is used if no panic function is set + * simply prints an error message and calls `abort()`. Alternative + * implementations might call `exit()` or other similar functions. + * + * @param cb new error handler + * @param cls passed to @a cb + * @ingroup logging + */ +_MHD_EXTERN void +MHD_set_panic_func (MHD_PanicCallback cb, void *cls); + + +/** + * Process escape sequences ('%HH') Updates val in place; the + * result should be UTF-8 encoded and cannot be larger than the input. + * The result must also still be 0-terminated. + * + * @param val value to unescape (modified in the process) + * @return length of the resulting val (`strlen(val)` may be + * shorter afterwards due to elimination of escape sequences) + */ +_MHD_EXTERN size_t +MHD_http_unescape (char *val); + + +/** + * Get a particular header value. If multiple + * values match the kind, return any one of them. + * + * @param connection connection to get values from + * @param kind what kind of value are we looking for + * @param key the header to look for, NULL to lookup 'trailing' value without a key + * @return NULL if no such item was found + * @ingroup request + */ +_MHD_EXTERN const char * +MHD_lookup_connection_value (struct MHD_Connection *connection, + enum MHD_ValueKind kind, + const char *key); + + +/** + * Queue a response to be transmitted to the client (as soon as + * possible but after #MHD_AccessHandlerCallback returns). + * + * @param connection the connection identifying the client + * @param status_code HTTP status code (i.e. #MHD_HTTP_OK) + * @param response response to transmit + * @return #MHD_NO on error (i.e. reply already sent), + * #MHD_YES on success or if message has been queued + * @ingroup response + */ +_MHD_EXTERN int +MHD_queue_response (struct MHD_Connection *connection, + unsigned int status_code, + struct MHD_Response *response); + + +/** + * Suspend handling of network data for a given connection. This can + * be used to dequeue a connection from MHD's event loop for a while. + * + * If you use this API in conjunction with a internal select or a + * thread pool, you must set the option #MHD_USE_ITC to + * ensure that a resumed connection is immediately processed by MHD. + * + * Suspended connections continue to count against the total number of + * connections allowed (per daemon, as well as per IP, if such limits + * are set). Suspended connections will NOT time out; timeouts will + * restart when the connection handling is resumed. While a + * connection is suspended, MHD will not detect disconnects by the + * client. + * + * The only safe time to suspend a connection is from the + * #MHD_AccessHandlerCallback. + * + * Finally, it is an API violation to call #MHD_stop_daemon while + * having suspended connections (this will at least create memory and + * socket leaks or lead to undefined behavior). You must explicitly + * resume all connections before stopping the daemon. + * + * @param connection the connection to suspend + */ +_MHD_EXTERN void +MHD_suspend_connection (struct MHD_Connection *connection); + + +/** + * Resume handling of network data for suspended connection. It is + * safe to resume a suspended connection at any time. Calling this + * function on a connection that was not previously suspended will + * result in undefined behavior. + * + * If you are using this function in ``external'' select mode, you must + * make sure to run #MHD_run() afterwards (before again calling + * #MHD_get_fdset(), as otherwise the change may not be reflected in + * the set returned by #MHD_get_fdset() and you may end up with a + * connection that is stuck until the next network activity. + * + * @param connection the connection to resume + */ +_MHD_EXTERN void +MHD_resume_connection (struct MHD_Connection *connection); + + +/* **************** Response manipulation functions ***************** */ + + +/** + * Flags for special handling of responses. + */ +enum MHD_ResponseFlags +{ + /** + * Default: no special flags. + */ + MHD_RF_NONE = 0, + + /** + * Only respond in conservative HTTP 1.0-mode. In particular, + * do not (automatically) sent "Connection" headers and always + * close the connection after generating the response. + */ + MHD_RF_HTTP_VERSION_1_0_ONLY = 1 + +}; + + +/** + * MHD options (for future extensions). + */ +enum MHD_ResponseOptions +{ + /** + * End of the list of options. + */ + MHD_RO_END = 0 +}; + + +/** + * Set special flags and options for a response. + * + * @param response the response to modify + * @param flags to set for the response + * @param ... #MHD_RO_END terminated list of options + * @return #MHD_YES on success, #MHD_NO on error + */ +_MHD_EXTERN int +MHD_set_response_options (struct MHD_Response *response, + enum MHD_ResponseFlags flags, + ...); + + +/** + * Create a response object. The response object can be extended with + * header information and then be used any number of times. + * + * @param size size of the data portion of the response, #MHD_SIZE_UNKNOWN for unknown + * @param block_size preferred block size for querying crc (advisory only, + * MHD may still call @a crc using smaller chunks); this + * is essentially the buffer size used for IO, clients + * should pick a value that is appropriate for IO and + * memory performance requirements + * @param crc callback to use to obtain response data + * @param crc_cls extra argument to @a crc + * @param crfc callback to call to free @a crc_cls resources + * @return NULL on error (i.e. invalid arguments, out of memory) + * @ingroup response + */ +_MHD_EXTERN struct MHD_Response * +MHD_create_response_from_callback (uint64_t size, + size_t block_size, + MHD_ContentReaderCallback crc, void *crc_cls, + MHD_ContentReaderFreeCallback crfc); + + +/** + * Create a response object. The response object can be extended with + * header information and then be used any number of times. + * + * @param size size of the @a data portion of the response + * @param data the data itself + * @param must_free libmicrohttpd should free data when done + * @param must_copy libmicrohttpd must make a copy of @a data + * right away, the data maybe released anytime after + * this call returns + * @return NULL on error (i.e. invalid arguments, out of memory) + * @deprecated use #MHD_create_response_from_buffer instead + * @ingroup response + */ +_MHD_DEPR_FUNC("MHD_create_response_from_data() is deprecated, use MHD_create_response_from_buffer()") \ +_MHD_EXTERN struct MHD_Response * +MHD_create_response_from_data (size_t size, + void *data, + int must_free, + int must_copy); + + +/** + * Specification for how MHD should treat the memory buffer + * given for the response. + * @ingroup response + */ +enum MHD_ResponseMemoryMode +{ + + /** + * Buffer is a persistent (static/global) buffer that won't change + * for at least the lifetime of the response, MHD should just use + * it, not free it, not copy it, just keep an alias to it. + * @ingroup response + */ + MHD_RESPMEM_PERSISTENT, + + /** + * Buffer is heap-allocated with `malloc()` (or equivalent) and + * should be freed by MHD after processing the response has + * concluded (response reference counter reaches zero). + * @ingroup response + */ + MHD_RESPMEM_MUST_FREE, + + /** + * Buffer is in transient memory, but not on the heap (for example, + * on the stack or non-`malloc()` allocated) and only valid during the + * call to #MHD_create_response_from_buffer. MHD must make its + * own private copy of the data for processing. + * @ingroup response + */ + MHD_RESPMEM_MUST_COPY + +}; + + +/** + * Create a response object. The response object can be extended with + * header information and then be used any number of times. + * + * @param size size of the data portion of the response + * @param buffer size bytes containing the response's data portion + * @param mode flags for buffer management + * @return NULL on error (i.e. invalid arguments, out of memory) + * @ingroup response + */ +_MHD_EXTERN struct MHD_Response * +MHD_create_response_from_buffer (size_t size, + void *buffer, + enum MHD_ResponseMemoryMode mode); + + +/** + * Create a response object. The response object can be extended with + * header information and then be used any number of times. + * + * @param size size of the data portion of the response + * @param fd file descriptor referring to a file on disk with the + * data; will be closed when response is destroyed; + * fd should be in 'blocking' mode + * @return NULL on error (i.e. invalid arguments, out of memory) + * @ingroup response + */ +_MHD_EXTERN struct MHD_Response * +MHD_create_response_from_fd (size_t size, + int fd); + + +/** + * Create a response object. The response object can be extended with + * header information and then be used any number of times. + * + * @param size size of the data portion of the response; + * sizes larger than 2 GiB may be not supported by OS or + * MHD build; see ::MHD_FEATURE_LARGE_FILE + * @param fd file descriptor referring to a file on disk with the + * data; will be closed when response is destroyed; + * fd should be in 'blocking' mode + * @return NULL on error (i.e. invalid arguments, out of memory) + * @ingroup response + */ +_MHD_EXTERN struct MHD_Response * +MHD_create_response_from_fd64 (uint64_t size, + int fd); + + +/** + * Create a response object. The response object can be extended with + * header information and then be used any number of times. + * + * @param size size of the data portion of the response + * @param fd file descriptor referring to a file on disk with the + * data; will be closed when response is destroyed; + * fd should be in 'blocking' mode + * @param offset offset to start reading from in the file; + * Be careful! `off_t` may have been compiled to be a + * 64-bit variable for MHD, in which case your application + * also has to be compiled using the same options! Read + * the MHD manual for more details. + * @return NULL on error (i.e. invalid arguments, out of memory) + * @ingroup response + */ +_MHD_DEPR_FUNC("Function MHD_create_response_from_fd_at_offset() is deprecated, use MHD_create_response_from_fd_at_offset64()") \ +_MHD_EXTERN struct MHD_Response * +MHD_create_response_from_fd_at_offset (size_t size, + int fd, + off_t offset); + +#if !defined(_MHD_NO_DEPR_IN_MACRO) || defined(_MHD_NO_DEPR_FUNC) +/* Substitute MHD_create_response_from_fd_at_offset64() instead of MHD_create_response_from_fd_at_offset() + to minimize potential problems with different off_t sizes */ +#define MHD_create_response_from_fd_at_offset(size,fd,offset) \ + _MHD_DEPR_IN_MACRO("Usage of MHD_create_response_from_fd_at_offset() is deprecated, use MHD_create_response_from_fd_at_offset64()") \ + MHD_create_response_from_fd_at_offset64((size),(fd),(offset)) +#endif /* !_MHD_NO_DEPR_IN_MACRO || _MHD_NO_DEPR_FUNC */ + + +/** + * Create a response object. The response object can be extended with + * header information and then be used any number of times. + * + * @param size size of the data portion of the response; + * sizes larger than 2 GiB may be not supported by OS or + * MHD build; see ::MHD_FEATURE_LARGE_FILE + * @param fd file descriptor referring to a file on disk with the + * data; will be closed when response is destroyed; + * fd should be in 'blocking' mode + * @param offset offset to start reading from in the file; + * reading file beyond 2 GiB may be not supported by OS or + * MHD build; see ::MHD_FEATURE_LARGE_FILE + * @return NULL on error (i.e. invalid arguments, out of memory) + * @ingroup response + */ +_MHD_EXTERN struct MHD_Response * +MHD_create_response_from_fd_at_offset64 (uint64_t size, + int fd, + uint64_t offset); + + +/** + * Enumeration for actions MHD should perform on the underlying socket + * of the upgrade. This API is not finalized, and in particular + * the final set of actions is yet to be decided. This is just an + * idea for what we might want. + */ +enum MHD_UpgradeAction +{ + + /** + * Close the socket, the application is done with it. + * + * Takes no extra arguments. + */ + MHD_UPGRADE_ACTION_CLOSE = 0 + +}; + + +/** + * Handle given to the application to manage special + * actions relating to MHD responses that "upgrade" + * the HTTP protocol (i.e. to WebSockets). + */ +struct MHD_UpgradeResponseHandle; + + +/** + * This connection-specific callback is provided by MHD to + * applications (unusual) during the #MHD_UpgradeHandler. + * It allows applications to perform 'special' actions on + * the underlying socket from the upgrade. + * + * @param urh the handle identifying the connection to perform + * the upgrade @a action on. + * @param action which action should be performed + * @param ... arguments to the action (depends on the action) + * @return #MHD_NO on error, #MHD_YES on success + */ +_MHD_EXTERN int +MHD_upgrade_action (struct MHD_UpgradeResponseHandle *urh, + enum MHD_UpgradeAction action, + ...); + + +/** + * Function called after a protocol "upgrade" response was sent + * successfully and the socket should now be controlled by some + * protocol other than HTTP. + * + * Any data already received on the socket will be made available in + * @e extra_in. This can happen if the application sent extra data + * before MHD send the upgrade response. The application should + * treat data from @a extra_in as if it had read it from the socket. + * + * Note that the application must not close() @a sock directly, + * but instead use #MHD_upgrade_action() for special operations + * on @a sock. + * + * Data forwarding to "upgraded" @a sock will be started as soon + * as this function return. + * + * Except when in 'thread-per-connection' mode, implementations + * of this function should never block (as it will still be called + * from within the main event loop). + * + * @param cls closure, whatever was given to #MHD_create_response_for_upgrade(). + * @param connection original HTTP connection handle, + * giving the function a last chance + * to inspect the original HTTP request + * @param con_cls last value left in `con_cls` of the `MHD_AccessHandlerCallback` + * @param extra_in if we happened to have read bytes after the + * HTTP header already (because the client sent + * more than the HTTP header of the request before + * we sent the upgrade response), + * these are the extra bytes already read from @a sock + * by MHD. The application should treat these as if + * it had read them from @a sock. + * @param extra_in_size number of bytes in @a extra_in + * @param sock socket to use for bi-directional communication + * with the client. For HTTPS, this may not be a socket + * that is directly connected to the client and thus certain + * operations (TCP-specific setsockopt(), getsockopt(), etc.) + * may not work as expected (as the socket could be from a + * socketpair() or a TCP-loopback). The application is expected + * to perform read()/recv() and write()/send() calls on the socket. + * The application may also call shutdown(), but must not call + * close() directly. + * @param urh argument for #MHD_upgrade_action()s on this @a connection. + * Applications must eventually use this callback to (indirectly) + * perform the close() action on the @a sock. + */ +typedef void +(*MHD_UpgradeHandler)(void *cls, + struct MHD_Connection *connection, + void *con_cls, + const char *extra_in, + size_t extra_in_size, + MHD_socket sock, + struct MHD_UpgradeResponseHandle *urh); + + +/** + * Create a response object that can be used for 101 UPGRADE + * responses, for example to implement WebSockets. After sending the + * response, control over the data stream is given to the callback (which + * can then, for example, start some bi-directional communication). + * If the response is queued for multiple connections, the callback + * will be called for each connection. The callback + * will ONLY be called after the response header was successfully passed + * to the OS; if there are communication errors before, the usual MHD + * connection error handling code will be performed. + * + * Setting the correct HTTP code (i.e. MHD_HTTP_SWITCHING_PROTOCOLS) + * and setting correct HTTP headers for the upgrade must be done + * manually (this way, it is possible to implement most existing + * WebSocket versions using this API; in fact, this API might be useful + * for any protocol switch, not just WebSockets). Note that + * draft-ietf-hybi-thewebsocketprotocol-00 cannot be implemented this + * way as the header "HTTP/1.1 101 WebSocket Protocol Handshake" + * cannot be generated; instead, MHD will always produce "HTTP/1.1 101 + * Switching Protocols" (if the response code 101 is used). + * + * As usual, the response object can be extended with header + * information and then be used any number of times (as long as the + * header information is not connection-specific). + * + * @param upgrade_handler function to call with the "upgraded" socket + * @param upgrade_handler_cls closure for @a upgrade_handler + * @return NULL on error (i.e. invalid arguments, out of memory) + */ +_MHD_EXTERN struct MHD_Response * +MHD_create_response_for_upgrade (MHD_UpgradeHandler upgrade_handler, + void *upgrade_handler_cls); + + +/** + * Destroy a response object and associated resources. Note that + * libmicrohttpd may keep some of the resources around if the response + * is still in the queue for some clients, so the memory may not + * necessarily be freed immediatley. + * + * @param response response to destroy + * @ingroup response + */ +_MHD_EXTERN void +MHD_destroy_response (struct MHD_Response *response); + + +/** + * Add a header line to the response. + * + * @param response response to add a header to + * @param header the header to add + * @param content value to add + * @return #MHD_NO on error (i.e. invalid header or content format), + * or out of memory + * @ingroup response + */ +_MHD_EXTERN int +MHD_add_response_header (struct MHD_Response *response, + const char *header, + const char *content); + + +/** + * Add a footer line to the response. + * + * @param response response to remove a header from + * @param footer the footer to delete + * @param content value to delete + * @return #MHD_NO on error (i.e. invalid footer or content format). + * @ingroup response + */ +_MHD_EXTERN int +MHD_add_response_footer (struct MHD_Response *response, + const char *footer, + const char *content); + + +/** + * Delete a header (or footer) line from the response. + * + * @param response response to remove a header from + * @param header the header to delete + * @param content value to delete + * @return #MHD_NO on error (no such header known) + * @ingroup response + */ +_MHD_EXTERN int +MHD_del_response_header (struct MHD_Response *response, + const char *header, + const char *content); + + +/** + * Get all of the headers (and footers) added to a response. + * + * @param response response to query + * @param iterator callback to call on each header; + * maybe NULL (then just count headers) + * @param iterator_cls extra argument to @a iterator + * @return number of entries iterated over + * @ingroup response + */ +_MHD_EXTERN int +MHD_get_response_headers (struct MHD_Response *response, + MHD_KeyValueIterator iterator, void *iterator_cls); + + +/** + * Get a particular header (or footer) from the response. + * + * @param response response to query + * @param key which header to get + * @return NULL if header does not exist + * @ingroup response + */ +_MHD_EXTERN const char * +MHD_get_response_header (struct MHD_Response *response, + const char *key); + + +/* ********************** PostProcessor functions ********************** */ + +/** + * Create a `struct MHD_PostProcessor`. + * + * A `struct MHD_PostProcessor` can be used to (incrementally) parse + * the data portion of a POST request. Note that some buggy browsers + * fail to set the encoding type. If you want to support those, you + * may have to call #MHD_set_connection_value with the proper encoding + * type before creating a post processor (if no supported encoding + * type is set, this function will fail). + * + * @param connection the connection on which the POST is + * happening (used to determine the POST format) + * @param buffer_size maximum number of bytes to use for + * internal buffering (used only for the parsing, + * specifically the parsing of the keys). A + * tiny value (256-1024) should be sufficient. + * Do NOT use a value smaller than 256. For good + * performance, use 32 or 64k (i.e. 65536). + * @param iter iterator to be called with the parsed data, + * Must NOT be NULL. + * @param iter_cls first argument to @a iter + * @return NULL on error (out of memory, unsupported encoding), + * otherwise a PP handle + * @ingroup request + */ +_MHD_EXTERN struct MHD_PostProcessor * +MHD_create_post_processor (struct MHD_Connection *connection, + size_t buffer_size, + MHD_PostDataIterator iter, void *iter_cls); + + +/** + * Parse and process POST data. Call this function when POST data is + * available (usually during an #MHD_AccessHandlerCallback) with the + * "upload_data" and "upload_data_size". Whenever possible, this will + * then cause calls to the #MHD_PostDataIterator. + * + * @param pp the post processor + * @param post_data @a post_data_len bytes of POST data + * @param post_data_len length of @a post_data + * @return #MHD_YES on success, #MHD_NO on error + * (out-of-memory, iterator aborted, parse error) + * @ingroup request + */ +_MHD_EXTERN int +MHD_post_process (struct MHD_PostProcessor *pp, + const char *post_data, size_t post_data_len); + + +/** + * Release PostProcessor resources. + * + * @param pp the PostProcessor to destroy + * @return #MHD_YES if processing completed nicely, + * #MHD_NO if there were spurious characters / formatting + * problems; it is common to ignore the return + * value of this function + * @ingroup request + */ +_MHD_EXTERN int +MHD_destroy_post_processor (struct MHD_PostProcessor *pp); + + +/* ********************* Digest Authentication functions *************** */ + + +/** + * Constant to indicate that the nonce of the provided + * authentication code was wrong. + * @ingroup authentication + */ +#define MHD_INVALID_NONCE -1 + + +/** + * Get the username from the authorization header sent by the client + * + * @param connection The MHD connection structure + * @return NULL if no username could be found, a pointer + * to the username if found + * @ingroup authentication + */ +_MHD_EXTERN char * +MHD_digest_auth_get_username (struct MHD_Connection *connection); + + +/** + * Authenticates the authorization header sent by the client + * + * @param connection The MHD connection structure + * @param realm The realm presented to the client + * @param username The username needs to be authenticated + * @param password The password used in the authentication + * @param nonce_timeout The amount of time for a nonce to be + * invalid in seconds + * @return #MHD_YES if authenticated, #MHD_NO if not, + * #MHD_INVALID_NONCE if nonce is invalid + * @ingroup authentication + */ +_MHD_EXTERN int +MHD_digest_auth_check (struct MHD_Connection *connection, + const char *realm, + const char *username, + const char *password, + unsigned int nonce_timeout); + + +/** + * Queues a response to request authentication from the client + * + * @param connection The MHD connection structure + * @param realm The realm presented to the client + * @param opaque string to user for opaque value + * @param response reply to send; should contain the "access denied" + * body; note that this function will set the "WWW Authenticate" + * header and that the caller should not do this + * @param signal_stale #MHD_YES if the nonce is invalid to add + * 'stale=true' to the authentication header + * @return #MHD_YES on success, #MHD_NO otherwise + * @ingroup authentication + */ +_MHD_EXTERN int +MHD_queue_auth_fail_response (struct MHD_Connection *connection, + const char *realm, + const char *opaque, + struct MHD_Response *response, + int signal_stale); + + +/** + * Get the username and password from the basic authorization header sent by the client + * + * @param connection The MHD connection structure + * @param password a pointer for the password + * @return NULL if no username could be found, a pointer + * to the username if found + * @ingroup authentication + */ +_MHD_EXTERN char * +MHD_basic_auth_get_username_password (struct MHD_Connection *connection, + char** password); + + +/** + * Queues a response to request basic authentication from the client + * The given response object is expected to include the payload for + * the response; the "WWW-Authenticate" header will be added and the + * response queued with the 'UNAUTHORIZED' status code. + * + * @param connection The MHD connection structure + * @param realm the realm presented to the client + * @param response response object to modify and queue + * @return #MHD_YES on success, #MHD_NO otherwise + * @ingroup authentication + */ +_MHD_EXTERN int +MHD_queue_basic_auth_fail_response (struct MHD_Connection *connection, + const char *realm, + struct MHD_Response *response); + +/* ********************** generic query functions ********************** */ + + +/** + * Obtain information about the given connection. + * + * @param connection what connection to get information about + * @param info_type what information is desired? + * @param ... depends on @a info_type + * @return NULL if this information is not available + * (or if the @a info_type is unknown) + * @ingroup specialized + */ +_MHD_EXTERN const union MHD_ConnectionInfo * +MHD_get_connection_info (struct MHD_Connection *connection, + enum MHD_ConnectionInfoType info_type, + ...); + + +/** + * MHD connection options. Given to #MHD_set_connection_option to + * set custom options for a particular connection. + */ +enum MHD_CONNECTION_OPTION +{ + + /** + * Set a custom timeout for the given connection. Specified + * as the number of seconds, given as an `unsigned int`. Use + * zero for no timeout. + * If timeout was set to zero (or unset) before, setup of new value by + * MHD_set_connection_option() will reset timeout timer. + */ + MHD_CONNECTION_OPTION_TIMEOUT + +}; + + +/** + * Set a custom option for the given connection, overriding defaults. + * + * @param connection connection to modify + * @param option option to set + * @param ... arguments to the option, depending on the option type + * @return #MHD_YES on success, #MHD_NO if setting the option failed + * @ingroup specialized + */ +_MHD_EXTERN int +MHD_set_connection_option (struct MHD_Connection *connection, + enum MHD_CONNECTION_OPTION option, + ...); + + +/** + * Information about an MHD daemon. + */ +union MHD_DaemonInfo +{ + /** + * Size of the key, no longer supported. + * @deprecated + */ + size_t key_size; + + /** + * Size of the mac key, no longer supported. + * @deprecated + */ + size_t mac_key_size; + + /** + * Socket, returned for #MHD_DAEMON_INFO_LISTEN_FD. + */ + MHD_socket listen_fd; + + /** + * epoll FD, returned for #MHD_DAEMON_INFO_EPOLL_FD. + */ + int epoll_fd; + + /** + * Number of active connections, for #MHD_DAEMON_INFO_CURRENT_CONNECTIONS. + */ + unsigned int num_connections; + + /** + * Combination of #MHD_FLAG values, for #MHD_DAEMON_INFO_FLAGS. + * This value is actually a bitfield. + * Note: flags may differ from original 'flags' specified for + * daemon, especially if #MHD_USE_AUTO was set. + */ + enum MHD_FLAG flags; +}; + + +/** + * Obtain information about the given daemon + * (not fully implemented!). + * + * @param daemon what daemon to get information about + * @param info_type what information is desired? + * @param ... depends on @a info_type + * @return NULL if this information is not available + * (or if the @a info_type is unknown) + * @ingroup specialized + */ +_MHD_EXTERN const union MHD_DaemonInfo * +MHD_get_daemon_info (struct MHD_Daemon *daemon, + enum MHD_DaemonInfoType info_type, + ...); + + +/** + * Obtain the version of this library + * + * @return static version string, e.g. "0.9.9" + * @ingroup specialized + */ +_MHD_EXTERN const char* +MHD_get_version (void); + + +/** + * Types of information about MHD features, + * used by #MHD_is_feature_supported(). + */ +enum MHD_FEATURE +{ + /** + * Get whether messages are supported. If supported then in debug + * mode messages can be printed to stderr or to external logger. + */ + MHD_FEATURE_MESSAGES = 1, + + /** + * Get whether HTTPS is supported. If supported then flag + * #MHD_USE_TLS and options #MHD_OPTION_HTTPS_MEM_KEY, + * #MHD_OPTION_HTTPS_MEM_CERT, #MHD_OPTION_HTTPS_MEM_TRUST, + * #MHD_OPTION_HTTPS_MEM_DHPARAMS, #MHD_OPTION_HTTPS_CRED_TYPE, + * #MHD_OPTION_HTTPS_PRIORITIES can be used. + */ + MHD_FEATURE_TLS = 2, + MHD_FEATURE_SSL = 2, + + /** + * Get whether option #MHD_OPTION_HTTPS_CERT_CALLBACK is + * supported. + */ + MHD_FEATURE_HTTPS_CERT_CALLBACK = 3, + + /** + * Get whether IPv6 is supported. If supported then flag + * #MHD_USE_IPv6 can be used. + */ + MHD_FEATURE_IPv6 = 4, + + /** + * Get whether IPv6 without IPv4 is supported. If not supported + * then IPv4 is always enabled in IPv6 sockets and + * flag #MHD_USE_DUAL_STACK if always used when #MHD_USE_IPv6 is + * specified. + */ + MHD_FEATURE_IPv6_ONLY = 5, + + /** + * Get whether `poll()` is supported. If supported then flag + * #MHD_USE_POLL can be used. + */ + MHD_FEATURE_POLL = 6, + + /** + * Get whether `epoll()` is supported. If supported then Flags + * #MHD_USE_EPOLL and + * #MHD_USE_EPOLL_INTERNAL_THREAD can be used. + */ + MHD_FEATURE_EPOLL = 7, + + /** + * Get whether shutdown on listen socket to signal other + * threads is supported. If not supported flag + * #MHD_USE_ITC is automatically forced. + */ + MHD_FEATURE_SHUTDOWN_LISTEN_SOCKET = 8, + + /** + * Get whether socketpair is used internally instead of pipe to + * signal other threads. + */ + MHD_FEATURE_SOCKETPAIR = 9, + + /** + * Get whether TCP Fast Open is supported. If supported then + * flag #MHD_USE_TCP_FASTOPEN and option + * #MHD_OPTION_TCP_FASTOPEN_QUEUE_SIZE can be used. + */ + MHD_FEATURE_TCP_FASTOPEN = 10, + + /** + * Get whether HTTP Basic authorization is supported. If supported + * then functions #MHD_basic_auth_get_username_password and + * #MHD_queue_basic_auth_fail_response can be used. + */ + MHD_FEATURE_BASIC_AUTH = 11, + + /** + * Get whether HTTP Digest authorization is supported. If + * supported then options #MHD_OPTION_DIGEST_AUTH_RANDOM, + * #MHD_OPTION_NONCE_NC_SIZE and + * #MHD_digest_auth_check() can be used. + */ + MHD_FEATURE_DIGEST_AUTH = 12, + + /** + * Get whether postprocessor is supported. If supported then + * functions #MHD_create_post_processor(), #MHD_post_process() and + * #MHD_destroy_post_processor() can + * be used. + */ + MHD_FEATURE_POSTPROCESSOR = 13, + + /** + * Get whether password encrypted private key for HTTPS daemon is + * supported. If supported then option + * ::MHD_OPTION_HTTPS_KEY_PASSWORD can be used. + */ + MHD_FEATURE_HTTPS_KEY_PASSWORD = 14, + + /** + * Get whether reading files beyond 2 GiB boundary is supported. + * If supported then #MHD_create_response_from_fd(), + * #MHD_create_response_from_fd64 #MHD_create_response_from_fd_at_offset() + * and #MHD_create_response_from_fd_at_offset64() can be used with sizes and + * offsets larger than 2 GiB. If not supported value of size+offset is + * limited to 2 GiB. + */ + MHD_FEATURE_LARGE_FILE = 15, + + /** + * Get whether MHD set names on generated threads. + */ + MHD_FEATURE_THREAD_NAMES = 16, + MHD_THREAD_NAMES = 16, + + /** + * Get whether HTTP "Upgrade" is supported. + * If supported then #MHD_ALLOW_UPGRADE, #MHD_upgrade_action() and + * #MHD_create_response_for_upgrade() can be used. + */ + MHD_FEATURE_UPGRADE = 17, + + /** + * Get whether it's safe to use same FD for multiple calls of + * #MHD_create_response_from_fd() and whether it's safe to use single + * response generated by #MHD_create_response_from_fd() with multiple + * connections at same time. + * If #MHD_is_feature_supported() return #MHD_NO for this feature then + * usage of responses with same file FD in multiple parallel threads may + * results in incorrect data sent to remote client. + * It's always safe to use same file FD in multiple responses if MHD + * is run in any single thread mode. + */ + MHD_FEATURE_RESPONSES_SHARED_FD = 18 +}; + + +/** + * Get information about supported MHD features. + * Indicate that MHD was compiled with or without support for + * particular feature. Some features require additional support + * by kernel. Kernel support is not checked by this function. + * + * @param feature type of requested information + * @return #MHD_YES if feature is supported by MHD, #MHD_NO if + * feature is not supported or feature is unknown. + * @ingroup specialized + */ +_MHD_EXTERN int +MHD_is_feature_supported (enum MHD_FEATURE feature); + + +#if 0 /* keep Emacsens' auto-indent happy */ +{ +#endif +#ifdef __cplusplus +} +#endif + +#endif diff --git a/microhttpd/0.9.55/Linux-x86_64/libmicrohttpd.so.12.43.0 b/microhttpd/0.9.55/Linux-x86_64/libmicrohttpd.so.12.43.0 new file mode 100755 index 0000000000000000000000000000000000000000..a317dea853896b4255170d509739f58a103dc83f GIT binary patch literal 370892 zcmce47LJgEIrP z?W|Ee@Wz|5R5_~m4OjkcRQTj;w#pa3GA}-TF zspPUs5shC}b41&QfJSfpU2yS4&l?lZiXPgyrleop`lHTxx?o=WetRsdIEm@_qg*K3 zw6uX)Pp0F}>uJDOdQIjb>7I}W>||sW9_mf&@12^FcCANGA3XZ_w8d$mi*s`ez0=0_ zPtSkemvLBD9%v#V4)G4uh9^CTE zp_R`&-~DvN_D3szvtvh1zhLLvyAHnR_H!<|F=N_0bvu52|C^kG<9>edt7&?_Cq{mH z|65P?+PrD~(QV5oO!pOZF zw_msV_B+DkzkTwZ54Qj3yhZIVyg$$W>*1d~_1Xv5Pda+YAzO}H{l#53MLIJ^3?9;V z`vaeT>N~aUw0~b+cKy~DzxzG=KZ|mGV~XGXcK$!_y(qNyt4$4=c^95|@q34Vc}nE* z@K-Ho-81>63p1X3Q~&s~SB`x(_QS!lWe5K5jh@_iM$fcsF;EWei4xGQDewlA{6P6H zPmzBks2wQ(W6;k7;Xh7+KMZuT1ZO?JPJm(`h|X0h_^C$m1Lc1yMZ1Qlz^_X|XF&>n zK1h-O_!RUXPQia>3jA#;>aD~;KTvzyQt&e@1)Vce@OgiV{;E#F=d={~2U67AlA_-J zDd;?v0-uutKP?6Q8&k+>as2@D9!O6v0sTV`Kxb8o z_P!?gKgd&dnJkoz^89=$>OIKg8H^10^ilXI?ho}Gn&>d#Ltlj-I5?l%Q`M&nc^>4cc}LmA`PO%xI|mN2vTw-%14iL4LgbBtOfJlXME?#q+D8Q`Ro?QNH36$16TpD)h6e zU0DxHgc7Ug7FBOsFG=8TmETtFElFzcFN#jXa+&c#m4B;}XM@t8Hx&L!kfl7Elmf={ zUmnl@y3F`K>f`5Hv^T?(>1n(5c!^No52|+Ms`dgDpE)XjM!0AGPgMRAl^@x}=T*gj z#v>Aj#*5EdmA^14zoYnHrurqWS7Q|ag{x)x(V)vuOI*&6Ntix6Kg~+cHA){ADTON+ z{2%^@_SPwWnv|ZU5Vg)$}OEU6_M0;inz51iS?I|t2 zW>)p=(mG>mtx;O)DXp9_dxodfKVe+y^orVwYi86L6}1z_jhR_JyJEuBX)`Ni+JRF_ z%j>6-z|@&DZbZfl=agQiD2$mowXUwB&Qn)m)K!;XS6yRxuIauVrx&5NI-|DwhSJ)K zx|-_Qbrqf(qpG%I>h#iCL8GF+bS6qAp@Opoa&GMm1C^Cl)Yi_fX1=M$jOy7QP@7qS z%j}xk8MBQ_59>gc3Hqf~AYM`HnN=~Xyyga1^3*zrqo%5MYF$NXWpynHF~c>pj2W{k zN^282%d2P4t|(_+rE{jv45D$Y0u3xpP7w(+tE;aI*8DN8t}19uubwLyF0T^Rp(Uud zqNaN0%+hjW=7DOQF}t$*K=nbeY&$Po0UL^URVLqpo6VZF!YvYI%7@ zjWHZqrcO^tp>jH8d{$3TKy|^o8gT6ru|PutL3CVqr+6q>ku-JsA97Pg*wNKNLp5#g z)ER~(6r3$3R)+?aCvYO|`rr)6qoQ>B)C!CyfvPjAYvOQET~?~Da&g?rV$dVcoJysy zJ&Ryaf}c4R(B$c!X%y>Bj?8#X-82MIHbRl?p(r&|XU`}vtqjgCPh^`@QCk<+m>G4Y zl~9miZAEEau%-rGSTWr*Yu3~n&#d5VajBRE*|QVNuj62%pb~=;QmJ$S#_Xw(`s|tn zYN}z>mWp=7n505 z8rS>yFsJ(Wz*kmR!?FoEKtcbIpQB#s`vI(m9P0-hPSoUSXn^cpx51HP^ZzJXIlXkM zQCeMD2_c|ODMze3-~W~C|4RG6=ue+&OciB=HP_U_NS00&X70e`s%uMCHd;#jcW0}q zt}{w&YOBjD>gr(9*djMdAmWDKogmHbY?yKqogFvO(`Q_RS)z1m(5Mo&JXlvzOEr^p zT#4mX73cv`RCS`XhN5KU)EV9VEs9Q?T8DA*2ePF#n6&0r*Gk(XDY&xsq%(8IG^MU* z)>WUGi}5+FoOkDVN-KmwOG~HK)ya7lC^3Sk&6-hOTTOd9omunF@>~$`j~-KcmizXs zGe;!Q1&O5&X!uRuda)G+*&U@j> z_4nMNaKR&IAgJ8i^8jFeylCB(Dvj_FGiD6(z`uH0;SLw@0M7~q4;FB`r%}Oo3;O*$ z8x&l71nKwnyrtj1Dik%I3NaGK|91xtQ#Owvn75~ z62490%aZVg3Li?s-`3IB+~FHOQfuJFr}@J}oJ@+ADT3cn%={||+4 zO2WUS@EeoxD;2&q3E!yj+mrBX6uvD9zfR%pBz&{N?@q#RR`|{&{1%1x+<3g`pm=|6 zQ~2~G{Cf(Yk%a$H;WLx)pDKJ#622`@_G5k$zDeyv=}Gvun~@Eeox0flc(!dEE#_9T40>X)`8e67lFC*f~V_}xi(OW`|{@DC}xXP)fOxcr}1 z`1B4Cs!xFrrNA#v!r!UrHzeVoQuw7w_(p|a zmV{rc@XM3%Z!7$YB)qNgtCH~Xb~Pp8e^L22CgHVQ*}ttx_&A;I$@sYbC*zeo?G*Uk zDe#>s@E&Ei;`$%wCp`r|BLzM)1wJbUJ|_h}Hw8XF1->u|f4q{jo`jFLt0V<}QVM)o z3Vc-({tQ)bO%i^U>c{#de7?#bO2S{R@Qai1*C>2L68>3bPnIU(Z&3M{CE>#gzdQ-w zpzte_@DC{bswDg~3g483Z&diUB>evr-cG`|D*Wyw{C0)!Ou~Pr@E$ck$Mv>L;nS1w z1C;zTlJJ=dpP7WuQTVJR{0N25Ny5kVDmMi_KLx%p1zt~qFG+!)lmcIt0$-H^Uy}k~ zp8_9BfnS^g-;e^oGzETH3jFdE_!UX`v8unClJFNR{Kh2w6$;;)guhPVwXDRJS+ zYy30Gg^$|;rj@zyTwljORW5vduZ3wfF8siFW?buCcr0)epO6dhKFqV&g^%y;u~35x z?@v(ic$T{G@jW~yFLU9`T=|!~@a}!w6)wDc-*=S@KiEa5$%P-{!f$lphq~~sE_{5? ziOJht_`_ZK+g$kgo)eR87e3RKf42*NgbUy4!XN3vdlq!-?NKg#x(k1_3!mY_&vM~2 zUHD^M_$(LxSQkFWg+I=P&voImT=;w!UUDoG3tjjVT={hu{zMnP#D&jx;U~H9@jY55 zm$~qUD}R*>f07Gda-m$>jD7v62h7Q65{uKW!ye0=Ym$xB`MVXpkkT=-L6 z_~kDAX)gQ<7yfh?ew7PR) zJ{P{;g?G=VAs2p(EB|5_zQ~1daN&b4{8ATwtP8J)zfISzKEGdjyho2V8GY;@F$?SA z4e9G$nQ+@R;?T>E_jH{!1mD_mg}5VJ#Y|3H7d|HqAnYaFD&Ss(Ii)*I0^WxzsyLN9 zD+IiUFsEu~nSgf^<`nHT2>5ftoSL1GfIlQmHFRnOyp1rYVy8^Nn+ekea!LfejxeWW zr%=F+ggF&ExdMKPFsEQAOTf<(=G5zC2>5ZroN^tHfFB^tsn*%OABdCgBFw4OX%p~m zggI3@tpdK4FsDeTNx(M}=G5q{5O6JFPKnMk0bfg)Q=!u!;Aw<81v()C|CKPOKBq>& zml5XF=9CHeLc*NVoDu<#Cd{eKDHQOZ33Cc_as_-AVNP96mVi$s%&E!A5bz0vIVCwB z0Ut@2Q<1a#ceejf!dZmd1U!H+ryi$Oz`Y1_%5jry6I4fcFsQ6yq!t@J_;< zDx3xZe@>WFgcB0*hlDu=I5h&^Mwq7GDHHH!!ZhtpiGbG;rb%}S1>8uOrrgOD@Jobg z!ksJuKTDXV+sP2{J}@fKMe%)8=Fd_yodq`5ljdk0eYJ=j{Gf^grQ3!fgT` zK$s@YX%%oU!Zc-0lYsYK0+=SuSs~y(glW2*WdhzwxR`K*fIlZpQ{{vN{2}2B2-gUB z8)2PrnSeJF_7g4<@H)a55-t>QBjJk(=L+~G!U4ir0)Cb-r(!2Vz>gEYn6O8{4-lqn z;_Tih`k!zK;Wof}Y>=}H+dz$<0;9)9Y}k*BHR@et>Kgh!zAMkvj*B481M`ViJFA!D zL4^daL67yhAH?*QK93+XKf2lHQQSH&J%fx)uK}dTMoq(IqCTusH^0)uod?hDHDx^v z`0#)<;CrTYwb4E!e}T+@mMj0-&fdDYPG7t8eBIlsZ|w|nr(5Gzi5Ci&4xt z8O%Kc0-RlroQU$L0u5SSty7#UKtMY##MU|&;l8_g!^H8r`Kz3q?psA^M7Qa&XZg5F z@L=7#AXm4RcM`qzJKcJDG4HH-CA#U@XFtWvO~$dh85Vf+IZ+-{+T>MUWSp{I$Omv< z(_{i6AU)&rnq-9;dbF#hD4XX$J-Bj$@EE%FMh*~qERa3W$0MwsMy9Xf^khHwOIMe* zI-Z`c(mB(~^aV(dHfeV^X)BvBvt~?2ot}w#O{#^N2dc2-j}>+k%}F;> zlt0=OOt(-FV!uX@&CE`d;z*W6ao(5gq3b(Y!l&K6!JQ2$E}4!Kd8EvWj&BoUo8r65 z#s6#U08v@{D#+6}VdD7E8@U1r#j&b$wI~&&c@c45-I}jM&c-17Y*5x)#^^}%1Y%F= zNDY|Z*aKnX&`HtL;IV{OFD4x=@&>+jYYcj*NsHVCoNkTJ(9MzzAR#m$V-lGOWG1N6 z9l#hKlgVpySdh`J;@mh&H&HHpb3SOFC`uy9oP^R-a=}D%xPkRHhed4P{y=tObPbRl z(I@epX5?6}hj0__>N1XjmFe37O=N%BfxT!JIQrWYfFO^_loqb4VDMtyiY`S-y&#;) zi!~-ki@;!UtZ0#A1!{a2nvsR1EP?!msn+-$Aal@wEP!lVj=099@(__drD9A5;(!tn zo)c8C2n-+9(bW~sKS+yQhJim>H+P{qcYN#dHTW$kNV_V+mGgCTG%VRFCr(?pNx07|#=f%pW7t_$?po z%o)^uu5Tg+hHm~mUYOEohcP+y7msndZk6Wy&36K^Gp;AA(T@zDl5fYDOs{deZq=m+ z3cfeM`KU{f!=ClH$Ai&57*;kTV1BNf-`jtNrbU{919a;s5C}G-M%Yy9oo~vI>&J)R z2!XFIG*gQ#!W~9nJz2U1!oyH(GWvIf*br}UCM5Q=jY`sGB}IV02h1ZJ9^Kqw(_fD? zff-fuJUv{W<1vOK-xlOUmPW1{>~!P{@AksXPR5ituO8|DBHa~_k@?_2+I`r3Y5!v* z9#dtxMzH^jZk>#h@%g}ah3|4Dyx+&`3%=z_2J=pRh-3E|R99p@T8Q4W7O@X~3%)?z z^TVC}wa8{n3cfcoKos_FHHvuz`XHE0-I}Pwz|!eL;&-?eOKM#6iNZC9*XE+^vpwP0 zL%8iShIRn!)gtGCQcG0eP*ss-Wakv4KL_gJ^@CXuT!5#U*^tVZ%;M;Gx>mfs$eNH1 zEgW-nk#$w}$bfZfF=kQVbr@@1_iitaenfCw^gE*zs2m6{+~!?el%1um1P=glU)T=8 zdB$0@Jj{1)aly@*!5>05WoJPUTTrXtx;fn*^kY{SZZiC4^M$di&Q7y`+tby>GP-v? ziUl`;3mD;>OY*kC#n4TVwF@4GM50Xuvb4y}=@8WG6eeVNFuK0T3b2WrV8!$4C z(Jn3eJnxO{{Ah<3oy7Y<_DJU8^Fgq*dcev-eOlyJh(k0&NXi%P@S-)o@YifnPWym{ zczdSE_7q1tg2$mzIi6r98wAz4;%lfy@KLIc7UgazrIzKl#-;1#r{k<*jE$jRB2Qr0 z*B8b{X5}^6Rq-}2^?Nt4)lVcE^c6Hlly4jab*mh04$1O|H}vusd~6&KGw~1jM0uMU zE14@c;+3zMndajW;9)*kv2H$0GoiOcTXEq>H=`UtOfAIyM%)WCpfA`!ZIvU@ceSsS z^FVRrJ1zPe7BXn$+32~~ATOy-R2*j=QiNSXa-m0yo`T_^>IFcsFHCj*ZyHBy*P-`{>oP?R5C*EJkh5>R2SKix%M%3f%*z z*!;dZTEsR}C-m_AvMw#c!~Bt^E?+9)=1gUJNrg12Q zKmojshgkIRjXBaPptvv@T9k`6wBB9<|0~>yu{BYLy9BEOBZd(*+*u82bk7GuhXNQm zkov!}+d!L28!-2b^ZsOOXoj-}1e5aXjT368&aT7pbp6#cif5NsPoFV6;BABE9<7@h zdgC>J&ML18&c04JbqtDAi4;EQ;RQTijXtv%5dsRz7TaG7OBt!s9OsQFT9sbFgeB>>*gxVyjrAyHZnG1 z&u18u4?Q3U^fAJ2PSl-p==e-~uMhwmk~uk!b`F(WU?`IjmVmyojz9ZPa5AWtVxGYv?J!7n|GHcmU=# ziRv(?`^}H-!@lEGhtce_hGawS(qgxE?ccwD@3!MxPYU5kpM5Tv6>>U`kQ}@2@9D$DR*4IGH$Sw<* z9UNlzwDztpjI)&09IygOdXL}xj`Jou0_%TFfLR>6lo>oQdoo1hY)7^69>Y~Q0Wbl= zfp8kRBoJ0~MC*>Y#oF+#&osg0 z^dK|>UUK=ifHkny+}OAz+kclT;N84-AF{;K-bHTDuvT-k$e$te>&TC)+K>dLc^OyO zxlCZb1O~SmxP?o{+jQLigxfwd;YgTi*_fRFvs0;(lMenH;!=~MdK-%oh$$-qS41u zR8DPPu#*pN5)P$vZ_hNcN_Al#=SHMKzu=lrQ7-RzE)TdU(0%4le)Cx#!=xny>th$Ah-zr$@uhux!2eAE^J*8+X-Sp@UCgcU6A#8P3=Ffg4@~!S47$` z-$cLpKi>o_LWFgmX#Tt=3*2-^eX!igT!OY@rEqq@EJFoV8D1m9$$!%kddRC zy|Ab*ltw(U{#f6@wFu)oT#eBGL8kmf#`bqbd$00MKm)NndNxd+jB(bBgkPswW%%k4riHYS6$qREVib;rXHvuY7*1#SVf zETX!=^m;l%PvI`Z==USIEP`DZfhI2bJDkEs!P8-vv6$jgh(k@*51U!@nkSKD9jJ-(hd zv%;@;0`E1Z>(-JGa}4`|%Y40HtFB$JnS;Bl)o*UlV}-pCaE7NDCBZr4#zhg%8&ef9 z%j<)f-sk1Fh*^>U2nez<1ju@zjT?r=zp3lJc*Yi3Ee+}&GA;5F3wy(Y z2D+#YW6TP(u5jmIBXe$LxHEljWoWf>%Q?OnM-sh=fLq)?+ZWN=SxZ(4R$eBx_Jz=Q z`|Qt@UKszSF0_R0YvSsF!8B*8eF8j%_Gq~CFylGh3d`~q%eyx=VkKVtN|@mGMateZ zhslt44HwPOEXKe?xb>__lL-4ia5J26=LBBV&8ccYjT@nPDc!?_r} zk1{|HUQ3Uod`JU!jJnzq?bWSCLcp;R4xF{dBUme(HE(lb&}gO&0`}Q$Xn%gV>mXxz zxGT;0lYQBj6x8?{*ckd-UqD%Ob1kNr84JNaim*NQKrl@?Po5$qEkpktXJasgxUzW} zIm4^TUfIcEj{=x;TQ?jljnnpmb6v}z(QixHCPfvXU^Ip1Cd zlR#D{qe`|(mrHd-S4hqZi^8WBS0N3KV?E{9yBO0zT!thC!>g!mh9Z&L*`Nl~t1aFF z)&kxq1Qk$k6t3fVa3u*_mzB})0b|iupwlfvr^R`MG0aVpt)XXpVK?Z~z_aGK05R zchFZ0|Kc^~MK=Yj!=HPD*IG-s)UsZ$$G2{NCbYICEgOrCkdB3an*9kHg8A=CX`;PG zmVMeMY??g*y$I$%C3ogJ%wbUcnlL;<(LMAHDUmZ_Q1hCEyyd=KL-_MvhS~l@V*G_I zGMFw}(f*;>AN~M6s+)@@k*8RnqoD7AxLgD@DxHKERRNNIW_bSqZISQ~5XJlui=+;{ zJnbdjyN=tx7-urB9V_`Ryw5x5+HhyDITd@I+<;ShNd==kJ#h1$(K@DA8_WF18!SCMYgwov30iNvgQfE}<{QFaa7xAY8>fTx0R zCqrGh%Y;jUeLb0*r$^bY)rK95!IHP zoPX;*TI5ky$s{=k*R(&*^-hUg?@0OC*DWSn!cTBMz)({2gJ|qcqI}XG*kECl)D(O$ z0MQR(s_)4GJb;Vb9)NRvcgcF^9Z?smo>DIkX2t7`@1H%2^u**ppCvi@zk)&hcNnzB z&2S%~uMeLo2Js6($w7QK5MmHN!(87WSNnGN`U?J2-gio4ur=F-g&LNJ{iHj7D5R4i zm!ptQ2(6Fr+n7ILb0&C}2(WTOGS2K+L^BZ5B0nIPFZ^4DaTLbucUu_{$otOT03W)2 zMP&o$@=fi}=;r%W&UE|s2goVzip(bp*}W!w^G3|rjNxL1kHj&#G7{BGi(;n3i0{NV zvLb0719ZlbsOSr}SWw)DOjtdUX3+0j@EaGta|&_uU)&hy;)bDR<4kG5(~K)atHr+Y z>m;c~`wP+Tu*bk5aDIc(mHo9wmq9H!X|%tI@g}(d>y0u+>2 z@Va24o3N@0hXjfc`#K+-AtSaCxuZXIJL+^Teis1dHq-aI*N$HzykPYF6iH!r9c z=M3ZiAXdS<%`LjQRn#mNYU%dg_gI6u-Z*5n=y$9W%QJ{y{dIJSpgKdG>z;s`zV1RM5e%@+2 zso1e26+|A=^_F7X0&uN+^w_0dCZ_4;I1dUAGEVX}d*LQ5A#eIH=_n6d(xl1>DPZ2w zV*@i#O>mpY4L z2!Fk6L9-AZwI*V-^3^(U*YwLMGOw@ z>u>xN+LvYQV&#W3Lu{hh*bJCoWAl^j+bcrIA8mr`rbXyiBMhA5k6rG?lHPvueMW;t zFhf{>S|)0gZ;J0~&VPtwM4&X*ealb~G;QuUKr1f^o#zQ2$=r!aLlsf;ulXspI`}x;Sq?%vW0q(;do?7XxB`-3!om4nSmRwP!sVh-xZkgbx@<= z0B3qp zf@Pa-IRW4_-@o@Oa%5PAx;ijwDMp<=V#z>8pH;N{3KRUW1($g#_z8&--t&y zCh|$E*J3l|1O4jP94>-*ya{BqW+B8s{sBgYp6unKzrkX#0F*CU(}-%~DbW`I$jbX6(b@uMeuBy&gr(v;mL#U^1Efx4r z`{;M2-Fym54l$KtCmd|Q2?8?PAtKwvw`I0j$R_zjUnFW6h8p7XME})uB8Jv?+YoW~ zAcPW--#pzf>-Wdz=i3jxBMJ8gVUcECP$o2$?~6wqWjD%j?HZX37{Z6*V(dcr-w$N^ zm|WkQ!?0S@7p$Te#oK^3b_MU-j}q%990$$YhCMiY+l?r|vGN?oiht|({_y_!bK5W& zE*10k4*L)XZ1ZSQxIPoY+{>C{_4)Rd+obrv7KlM-Zh+(YB5RNJ*?*#NPY(u4x~D$_ z(UrmV3l=Lo?5jJ~xSNka1dj|wZ%2z4rc{w9fNk%wVw1(mPBm42FVG-P`)T;qBH|FR8`GeD4u;5JTY zY@8Xi>tZOanABCfu0@+Us?WkmW!to94(Ij%Gw}Gtlw2BkKn66y!vU~w_ zo@h2|S^+-j3s!BxmB)l*HC|D(y|Nyy5W<0?As2SB?9t2x=LotJFuUv@-y(W{`v5gA z!_Dvm`eK^?IRa*WN8WkdUsGQS`BeJpUgaWM8d28=w<=sR*$ zWkc|5U+9*uEPrflSMVggV0Uen9=p7&eNenVq5H-lJ#2fMv6=|wXBpoYYb*ca!|ODC zp{`L{Gf>vzlpxWcnHK2sBR$@t%u0_woNcls7x{SDfM(ROOtXDV{v&GI0z(B}S zzrw4z>Z-)qJT!r|JV*rqoAzjM6=zWozuthN9%GQ&5YwW)p~&IYAt1d$U}cy$@;Pdd zLoqDEmGesMQ|Ewi%a{_Dhin$}iVtpA$vfUQsoVILTFaP8#2`hi^l;k}CZqg-SiZUz z%BxtG@m5a8EJl}$AKaECZpTzf)R-ETBpM}iZ6pdG6lj%qyxp#D<7T3|gVHSGDgkqX z7RiG03%fl1e^Q4uj+xk?f;TWom%->ceG#M+@~2YJcsZwmMne8lS>P+hjes+d$=&{= zw(=G)o!~+$=2$UITFuV9O=|u?Xf1;SX#*&5AiajG&)nn-|KJ^Yf=?^jIF_VCbatnrL95$1a}>S)3-~ApU|4+U?U|f)WS3_hQ62 zdB8LzT&5)mG{&XmM{<0Ai;Y;Y4wRr-pSg0JB62{EOjr(I$JsA19$z!&t5`i*zQyZY z%rU3@90UvuhKDBLn9O^dsHC{laWV_h@S$%1ZBwCe{gqKE?@k z4)cE#E?V?`%pqi;1*VHLT?=8g7&=dK?OqIpuy}QPlMc$zzHuNz8|y(#&GNj1+AQT2 zAKWezH{!NU-OA-N0o_{MDK2t7=XxSzt7GFOf)I}wFrp$WB=T;xfn0@B&Rb+x`gh;I z4g-^zr;BPchXaYUUjRK}xK#y=%8 zqHT$cS;!bbv-LGuz+$cqSap!{x&Rh_Iri=rkYNYjhmM9?2h4d@ftc^7vg+rKd2rr5S`gIY1Y@lG%+zh7%O_lu! zm=3w)MXIrfsRuikAr*I8#E%=57W|%=h366z^I?U$8EezPu+7-z#M=L@HRq!p@+jL` z;9j0!GuMtY-|~motU#K_I9ta_x7@gTm|H|{zqN)ct(zbEy6$B@9cSNiRq-*Cuq$um zFbu-zNNmviIBYe}Y+FN_V=T)04xNRXd14N;wsCBn>PBPe@-A zzNZ2A&c~e0V?(b3rG%Yq-zYmZdb2nKEB5mGVYZO$aDq_lG5gMIMcpSLF>l)&Zz9G1 z$D1h3BYrpvzD@)w?DLxGp6s=kY{1y%xmwwuaHgDX7{2!8&9vKU5wsb~Co96bHqq_} za70ns0E~*)eApHbuS2VL&w6bsaVVo+skRFc$1B z>~seT_Fy%%$KQJ{&Xd#+!0AK#bVwX4pZ&0+7(cj!fw&Y(gZaM<^Z!`fa(NXAV0`-* zUpWDNjxN#-e zjaADjhd&dfq7JumT8ToXggr_qOWlV+H;Yq}efqru!3=xrqS%mrv>VQP)TJ8T;>pEH ze*kPRdYO%cXnD(K^W!%!D06y4#| zMSH#v;{)B~P|1Em>p87IWP{D)B%5VuVcsU>B$EiAI{Dpv`ePUWAvY%q3g4Fj_rF*u1rJg#8<& zB~5tw2?cECvDVm#HG-WTE-8HZK3e=U?1SIjDdZy3L}cbyl!wwb;o`iF9CU260yOcv z=m+H6`PU-@B$FS&JRZFdSp{Bfi8?I*gto$^CdWxN;PtTF=*rp?MW2fa>2goxWDVlfdR zB5sg~2Z^wVsFH}=h!H`O7f}jYWFIbm zo`NpU>+m&4B$`haY7XWfc*!ArqbJ%!s~cE?rxkJ4t?M%J94-;q@I6#pd0~14uHH>R zgl_EbG3H{>39nY^tHX(x# zhnGda$3`r}Oe&v#zPM2itUI1T4!h}9*gZa4d_N#qu~loRfZxD2_btQF;1g&hpXt27 z+@r6dT8IDv20caUyvQ7AUm4n-BilYEi;c(8hf`#N5?`6~nxa-OsFAKNn$Ekb_Kz^g zw!Q#1M=-n<8}S0-8h9F+W!{SlGAOr~$byxw@7OrIswZxQJs ze8=S#KhK&O*<`(#k49+Gzk_pmcnPbH^Yc1*gsHwT(qZJ|(Zo@q)u$sDo}#suFngH$ z!Yx3AKmR?vZ(#5kn7pnfWk_l7PklzY;5>noqh@?=sBtj~1dr*sl_NYYI3&DU#O8tr zHQ&l4uNVjF{8D6_5lN6t&~a*^a^3!web`oXm=zXPpdj*1R`0VwxMX10l1U(&C~R4* zPK-FrGy_GT1j-`q(I4xQ?G(8X$4WfvAl@>OVTn^q+{cMb15tI@6meZv2-9G`t3$=a zXTGlKJ8^hB7YE*D)8R?H2}$4>Arul(8H>&y;_c_@m?O=vU-cBi!#rvgwQhrb;wzZ; zqF-7W+Ts<+7AW{??!186#=Y0LDd0XZ;tV+6u+4Zayt)(Fyup`sOZd*#OSiL_Ra>T; zzv#U$tkD)X0O23DA1)aq5rOP?<)0VCT4l{kJEXrJ#Av((n@;-@mutq3o%G zof||)6hgW?1;6k?W`NTqwhEyq2O0mtS^21r0xg~@&}AO9z{PzL+I!wgrei9Ccfl6$ zBj5Mne8pjRlt{l0SiJ=k17^!#h)x6A%0Mk}H-m@!*M4_CY@TtjViV8g(6b2dOEZQd z5O_#6Pc)#;1QuxpgE|m?9LqOTN7fq1%1CMaCS0YXFEE%MfPp71i>ucROR~rV0 zO&b=-F4Klh$ga_bJ(L|nc5T>`;u#8U*z?)T1pKdT_L?^Awd^Kb^;rCQBq91DbqFke zEDYCyxy*)|GHtGj@oX;HSl__s%LDND{)0IXkHY-U^Zc9q_Oh zjOsuC3Q1oDEXTW|_X*-!E_#AaC+IlCd*++iGoNl@RTNzYE)|_)4wSwe=}tSk8RJCd zJ4p&4-el}t9MKfs=mqx%Yh6Q~5Ozl8|GDoU`Qy^bxm%D;wBxIu`6Pez#+~bW)ZeFP z{W4!V^Ns0|@1C?j*1Mb8j_z6S&_B>)gc#l4*VzM)uChV3qoQX%3vpAlnJXhL!l%ha zkMTG8e3p2F$ntb8@;1QbI9L03I-xkui#`|;fa(V=})?S1$_=}SrHBjMY|^G!+S8)~(b zeE&;iEA&9a>Gfc7^gKvfy~CZkTDY3jaR_^SMz|^6>}~aeENfWm7L@9tKWFr$FWb{e zKF0UpqxeAWwn0+0XV8JtSFlQ+SMSzuKBk-856hVCODyGG{qQFG&XrH{)!Hq;*n!e% zk(>twp*UYZ_skct@_p9fd_>AXHoVsYRwsa^^`b{nRE#TgtG|5U-vZtrx;}G{Gycr$ zANZjKRqda0p!8Mb=OD=s9=%L2&TDEs1~@SUq^h2QKn`>}c!Dpy!CQpsGnQ89kEONH z)@hNqmk&)Gf&xPmOiI@7lEo3*K(6)$-T9DZ6RT`rBIb8N&&g5tko>f-?5;01x-;C_ zdk)O|5aUFQ(vK0tk>+;vL~svd-s6-7;}6#-vK)7yEK+~n6NvLJu+Y^%=Knbb{r{!NKTFtxKhhbI0{>MC`k$nr|8NRA6)Et24vcqO+2{k{ z0m6UsCDA|jljETummu(SAi4HQA;15nXvcRc^8Y&p{*x5-K9vIB2da7?K8L2jf3^3( z`Hx9Ke@cpWo#e)kheLySf;lGLv7{_lA&Mb&{qoB&bG3;1jLPVAbO>R;0b$F*HUb$i zW$}Fx=!ExCP~wk~_+G#(y*J-?7QaaLBcvqW7luQ}2;rw=G<}<4e}qK%|8SNgJCJUP zN5srO21-G8^v9eVKVQGTRSHif_tH%@AmU;%6nW+0T);yziW$ar>m+ z6Z>lxJhY8G*1QLttYkSWA8b4XR_${^ROu7_TfezqJ?33({&!-)d~>`y_WW(8^#6UovdYm;klT*jPRWV_`Wm&r!1r-{P6==~@ih&{2JL}Eini%sWmc=q|+Br&QJ^@@-Huxq4V$bNvlX$%SL(xlGUu-q6QrBs zeRw=%{v#M?G_(X1;tvbq911rKo}1|k@SDEinY64})YaHS;uus)RJ*P@Oo z`G_6M^F(L`;=4%U^NIk_L3r;Je#@v&0jEd7H%6fV~9`B?IjsDTTFHY@&4MNBt0Gu`XT? zE&M~gskOM!i3xTJF&}WC7_&Q!rpIlhrz&-B@n-CUXO z6X|1Qx}VK?R;Fjj^y5YPi86f%%kwqaXzuQ3M033&y|+xyWcoj4daF$TtdrvS0^g|r zbOtvcmFX*F`dX2`9^dZg3&h*@#I}JYPRZa!Up})L`vn@_+Lp#WgN_YZIPL-!^T(dg z=1`>GPJoG^WcipA-*Fba7oiGmV*WE>~$mQ**{JGoC%EhaNL_zhpG zcaq30$1{o?mKcsJg$~M`I3Kag9-%t+OVrBhqhAR_P$*a+K`p}79)s*6NXmnUYG`jo zPHbM_xl@sXcr7vpVlS{|YdDao+kIZ6Ztt>Zsjh!b6vAmOE3}lnxZmb^KM{~cgvTQ> zG_x=?v!GX50{IbB<8Sk%vM0aMlO>;)nR;5V1rmvX)F0n*ist}xxm%%LYAQBQ1uFhh z(_QwV7@nlPQ;wf+?uA0EKLpI+afGMH)2J04RG63W4O}@4FqM6>&NN}|nhVpta)ZSi z-x$IpH=-BN-y|#ZiFR_cOIul(j__bp`-|vo>F=?#7Nei3D|S6Y=#r<8sD&I^O8Fy${-SY zCFe%B`U-qPFy1nwX!LHk?EI+^h;%WCClT#N`m@x%Ru?KpR3erUHm0tt!-$LbH)3)au+7k-M-`u#3H%Kn0Rc(Sf7{O5y= zPel^?+x`#mEuQOWH)K4$eN)fpx47ehmpSpBNB_m^mejMdIl6U+%|d)%434vStVc6Y zC9K}%=I*?0ML4m$_s7`qvwh~<{5y+;ZW8@Kxd!Y*}-=Wy~9-jGvdcCvXYSS|Gy z$9OiuF~@t`@Cw>fAU>bj(!Q;-0Y{d4dpx&f>=lzoAuOO4Sq==&M3LDr-6FsFX>fp( z4=nc|oBh_pHqmnUtv+j^bX>LQ`NDdJLo&%Yy@)$1MP^zyo;-zDuo(D&`F&R_Bdsk( z7VtQUhp_6+pu2`fS-dtbQOX{T){0JTc4fY-4;4#n?R4kNyny|H4V$qguB=aCW`ltv z9dfim(ZRb_~q6vyi{Y8kk*d zK20ysXZ|Ax7r%LRZt>#3aaYhj^FqQ4sRYDG^!{jlokGagbs{a!y5i9N?j4)PS7?XVyHkvhH0UbIXa=pPWFmi49u z|LnKM=AaVnIs@ysE*H}pkaAl42~7kNwyz||-!e7}9C>if5m#%h@cSYwAVOpk(;7<3 z-T%Kyq?p!FB14tLzy^n4=C4pk(Z`sXMJ2bC*e8!Ap*0kWr3&3o-$xZ30Jg+-s4 z>x_XFe1k-~`!x%cM8CG+=`TTj9Ue*Mv_2LK7{2>0(PPsg7k_LGmq*>@YtUcrT+u7Z zPi*CG(uxf|(F#|&qz!Pb}>j{L{~Q8NR^yf z?1y147h!y(?2EX^bkOuY&E-0Lch8R^obcikr2VP~+}e{R_345-Y(@M1N`r=@@s$ns zM}UR3pjwLeeS(*B;<;as=Uxa}-HLV&+Tc9)tB{xNN1lX?oc>@J&E&WW#KeIkd--c@ zai2Uyr64qnhZ+b3h^EiDmAkMWko}I(aFWrYJa8RX+fy*%mL(L?gtms~Re7{X2l6l} zVAkODZXHGqj+L~G6q{7S4eh$JT zg-PfhhzK@w6f&)h=u9H4blYEqx-5az z!R-KF_u?+#y~Ew@k|AuWy$NSy z**al=9X~l}M!_Po&|HLLH#UR?t-I+#7Z+)gi$Mu4{sJx>G`pLNL%>C``4`qa2Q}N* zgD4thVN0LY-X*D??56sUQKD_HKmgrsYwtmIHMsR#upyuO0?KAtaCcf_o zrU}+)Or|pn8Y=7*JZtA7066PJOAX7wMJb%9?-0d7)7CtIfRwr0zWO2tU5x8xM?2a3 zL0Ux@1KAnoPH{*AyU`i2zM%j%mWSBq30}46p`fdJKHcGKpFy^CnPl<(k@8xK!(`Av z`*5)Abb=o!K&CStmd>8QRw&8TWALN2iPDK)zZ)bR?xp0=+8*J;pjOAhAqfF@JMbz}x4Xe&}}qSpdqMuTT-B6TS_U zBT_`?-4AZ8QGuPbITzy_=@Wo!d|uk5qh$K&BK=H!+j(e)ebYVN?OJxf;Nw)w)vnjh z11rCD3Q_1zJB$bD{Cc!*zftlX zmg#qk^m}FcLoB~qmM@p-hDe_y({Ez>MKXPiOrIdqFPG_8G5so;exghtF4E7D=@+s7 z99e&FnLb3MA12fLG5uJX{>6QweLvZ3UkAR~e&8DC$n^Cx{T-419=@S7RZf2>kMI}8 zyY-b1nlGclJS}lF)PXPbg*ACBVR?uJTr!dKj2q;sOf(`K{n`%zZZW4s>z{UGBg%p?E6 zkcZ}-@(AjW2ii9maG?CwWlSi-is!$eh!Lmz!Z&;R2YqOK7Z?7%F~=@b5aVDLn13Efqk+Qo{qO zP`?fioWqbA{(kuP8CrCJxDQbh?f;SfF$!D?uJf9j!wdo9!4|x43+1p$@+k&)_xeOe z=lR;s|6--`F1kXz1*2KKt_iOp4WTq7ZJZvv;QVNpxli-Atlf9q+MP$P?d+?UZ;YiK z9&S5-SgURg*`jMttkZ7Y2`=D9bB^SLN(|@UE5iBMkcBu916e2n9l`2xuyf-OBR;r& zdV-&ErtPyr^h3v4Rfx}b8DnBK=ffuWci+!S_xHt{HT3chzcuow@Mq@_!z(f-{0tcn z|51OtEBuXDe|w+)_I~phyq*g$`43wzSc*Fi98WtV{DU*gD_Rcv+h`bO=ialRxy^e<-i8I$d)>{+hiM$2hE<@WH zyB&oWIN9?PS6vRw=hNBcR zRX8e3g`@a5GeZ`LPyr>vQCadAdA#vBcbPo3x;)J&MwK$qy+IUl2f81ZOr&FlkuD1) z#ks?6zse)8I9wAY|KW`p62Z{O;Jbu-EKZwH@#6a-2lzQ2n{B5nt;s6Ew<~}*KqAFT zM@Z-Z0lerIPT(puB(5MAN6PpS&(K2e)q!Plc>SG%!^qX>PS~-rVc4-{(unWBlL8#2 zeL*{R2)+~JRmQhvh(8|Xw(pQl{SfVl9|+zn4#D$z^C>w_y{J2cWZ|)1_lJ1c(PSYW z4?7${qCQ|D4*dSkw~~LAtKRt`0i%ZyKff{#%lP>@0xYCXv3yzk5;XDrThYV^WfPB* zO+5W`Ht|e+BYh0h|0~mfZ4e?DDAEs>=~vLyH_P;oWcs(CvHbV=2Fpb#Vs`S)$?|Pt zS$I!%coi+Ghp)sPu>(E_408S1SYIXLlP%6h=|$Xt)RM-ZCHb2q`IsPo2fo!fSMeph z`!`n_jx1vy_RzSlW}l9deHwidRW?T%0)b7$4@}7*-h9zfc#UD)Clg#<`UF~)jskYq z?dXPR(=G1z&Rz!`yfOn;X9t?_q-X*a+WF^MXl`uKg}^ipK8W`tn(q)od%sQ0fA~iF z_aUSoF4Lcu>92_NS7rLMOqai-G-9DlzfYv!k8hlp%-bX*SUf7pU*y^DWgVrt@=b*_ zS$KeYW_C#+_GES|T2W-Z%=w1LDDiaDzp_gdknUUieP8|(44#{zrR7UFuI$B03vU_X z6T809>x+TM8QaxMarIkK_8i{n%%M3w4JGh`px zBeylhi#s^!<9NVUX-2oABh(#V>YvVgoX#U9xHYFk>E$`g3wv|*eG|U1+pR@@6)g7F zqTHaxPqW~3FkgN)-GckuQmlht%)YO40_ChdKzRK27vg>w&3Frop(mJjGa5h+z8$k!YdS-@O#VSlgv_uJq%T@AY2U$75a4Ef?c!3a{2H&qu@U?Qv{ z_TQy$i^Cf9?N1l}2K|;yI|Hk4{>ljMgMVRfpeJ6&Vhtf~)6jg7c93(EwJ>V*LTYIzWuUGqm`AYay!{aY=iU0xqoy>tM zc{>}tVOat8=A4meX}EI;B1m*Gj|006!h&E4We><7(+wAXptMBCZ*hY23=s6R5w zJun_a+$7$9h-TOep|n(u+H1YFXV*CrMAdCQhkf$j792yn-QOSmR12oh=VPT@9zk!r{ za4-WL*j{E3BQ1I_s&4;8iLK3q7>iCvhyIRid^=sw{bO@WVuOP}>hQa{cf1|MGF`lJ z@d|PDNP2!5!C^l01IQFnSk7SBOeivc@U5c$aOBw%{s(F`ZV9_? zm;L%_SaLOT-(`H1&1tabp^eD!EsiINB_mJ9-^W~d+aBx}ABMwICY+HNhx-au#ou5) zkYTvv@YbzDkAZDjDv;|n`3ZmVg8ICVuuTL;j%xS8elHcK(EGONJKZW|kQ{!7)sTrg zxW;IYY%;b7tPu10%@4*6TN^0YeDk{jbA9_pl)s>g1?IX6To>6C1RN*KnKRu!k+VB~ zKY?dlwL7Mu2lZj=^;Nr`X};)O(}$$>bEoJtKH>x*1gM+GI$SZu?HA%V5DA2F+o>Rg zB^V|mu3t6 ztq!qSZ`7lynEtfLAy8i|Ko^M#9xkw#u=QvS(#@aob_^qnsq(a0a0pI@H6X<&_q4QI zD>3IG{XV8MAJ6RZ)px7WNWAqadL7f1Yo|r`abo-(Pe%M5Xqf9E>_EN)u@LVVd~+eP zszo&)1HmkTCr!iyA-sb(kH|6FkMm<>9xJRNjUkq&yzR>|6hzztZ?QTQ)zAZBe{=Rm zpgxeD8HiP-`S21c9)Q+kr!Q!qEay9`fw5fky~5CzQ26sSa|OX*9^M^*IkJ#m9@G>M zG~(AP@X9l!i4=1*9_PEDFua(#)5w=U{N_M^0nSzAi#)}`ao-szXv6dK#1vppqY1=( z*2LdB)*TsK)UnQMOqI1;i|N#u?}fK`F%=08aDvHN%=~)6;#IiJISb4M&p0q!GenhO zxF=hz3Z>+4aKzgg-qI_)iq&~#MR?2`O2cf?0^Eq_?8O?Iio!vkcmyT_HrSoTzh!FC zLCCxMAi(W8QjSTg5$5v47kWb+uhOCnsW32lCIY1NnWFy#BHZo`Zj8$fA@cvUxE8x0`5ueVXi9|{qAMeh}Xl5A=9>u!ZKP6jKo zedumo{34RLxfl55XhtQ(fE81^aCw_WdH0g|8G-3}_6twh_B{TjMTdb3-ds^nn>C>Q zNVP74Dd8_iv~)Gl*P$@lAr%;-kAjD`pB$fm`0m&vAQOlJneiwhGs{emR2yb=w>) z8IY^}4pgmZJqL>J^eZ5|Kd`efB)zfg**~#Cr{G|0<1HCzZEVE&TiMH_roYW4S0%n> z|FRcF*G@qFy49P*+o4-4VmxI2E-1wRWA5GKqb#n+|J__5AY?;DO}*3wg9Zi6s?>yw zX2}M2WdjI7u&5A{1tK9ElU)K{Lz95pb#2l*STtMX@ODC9#g0Vlw z>uv7IB)-iytpnvXJUWUvt$*V*8yiPDx}RPdq<(w{Nc~15wRMd`>ZRR+)XV(J4cY|| zSLjEH1rmD2crgBan^Y}0)TFL8dVq3`&u$U!8s7m&>bS81aB;>?$Wx5fXHc^L+{p^x zfJ% z8E@YTd1T=Li`TPB?F_f%NlocGY%S*l3?8k|lbW%&p4w*#*3zL}r@F=Usxqp^Mf(G+ zb2zANA@-|yBCZ`c0Y5{7SwlH;$6^LQ?g5V7rHpl3KLVsjx*_pkR+X}1B-S%p$%pOx zBZ+f1AE6;+>8Es?>os@Slk1d2LP&p!D;$!+iYwIai3FsWY`%yxBbzn&xcvP0nXLV3gdZP24b5Y5r0zOS&BpmVnJ$`DMvr*Ovp(XaAIX z+BUc3#q9yvm*io*3S3CEj`Xc>dc(Kn25!TE?m2Zyn;gE>;4IpU{>p8*o_4|vU`ZsS zAbgjgtjJQ76MWtFNZkMj3sRW6IML{K35r1`)rUwmdj1UlQmHh(_EXVG-qY2NSj~Ty zWo5+z!|09%SUKzq>vK28=#n<6>fJZOW`ssbPrp8_n3I)Yh&#ffF56GHh2H9Y!#E$I z5ZnJ*5%4eB!Eo61;knS_k3wLP2cdz=Esmc5&!F9Fz$bC(`p!Qrg*XPkT^{t8eh!cc;T8E=@vy`$+880ydzt32H zi>c!WQDae$xl(u3qx{;Yc0~`7BRM`dCMNML7EQK*{NOn&70<@A)ll7dYL(i#+=Frz zK5x>m|KK%w+5u?j4*YLOL3AP@pF)OF3~E9)HJx3j`+=kz_$5UPJe26`H!BQQ+?+zG z&%UE5bpu5)no1o{#qYmXb98Gy+$g-$_O$3v)VtQ7YHCi|#3T^^o89@SL^?xJ-St^6abz9Nn=V8-bw-)F3BoP({Uo5_}SDPTCT#j zRx@LI5rUCVWs)vUHVBmGWh92mJq#SheBKVIa9C+auIkO_=ubYx0%xZ#6tlI+F`!M4 zn<6S`s>AlwY5H=2N6QZCVlMT-{v{r@flOrJlJUx|dLPN?I|~jZoQy$SW~)XJsl7Hb zFSm-dl!##PVrO%&wWmO}FC)D%ZqG!G^KMcc8+((~)79Mv^nS2k|lO1L&QYUR7Kb&sk3NLRg^WA3W_yI(XVzE(J_{ zElKd+==DH}mltv3ZnAkg)a)SFdTOVWwL|9WI#`iN(wO^|cJ~O^t9Et1M!Y}k$E2wY zn9Vg;b0q^8xMMyk9vfGj$;e-NE=4DzI&_rD{0k&n76a>gNi8z;q*OneS3Re+V(Vd2 zs*8LRcre})rZm%TrLwK(lR}1AS?(<__0D$!9-qN%1Amt`rbET<4l@ zi=77!`(@oB^OG!>LRJNebXtIS!BhP~d!^;RNk%=gxW^qDo@YGpNSyTH;dyekS+RK- z?*KW-D)csYfY&_F#mk0V)@b4%8Gq#aA}VCJpUwk%JI9>D>^7$`U7B3XWHM`=r*A}y z=ZF4x=?>8i2X+T94BvGh(tdbbRxt1Iw&K8fCV!y%KsJR$K2wMo?;}pSJ2w3^j>AnK zqy>i=PaI7|=ypB*0Q7!7L2tGGK~@N3sLCNp(pq&F+$fDqIf_PQWrz)z#i~KRxx?!W zNT`Nn*^=h29DZfHvxSg7**(|EcoN4}dPEY2A6vzDnG6`(^q3xGw8}hu_^~GQyG%u0 zgHuiS7lRw95|ciqPT5jj^gDrWTYH}r8EzGTuF!jKmH@l0dv`X8LW$3#2E*?3dlhP- z*L!|#%B?Z6o_551(Sr;LVrwX5@wbF41Ul!f^y7gIt~AV%tJ1{4WNDv^d}nVeG2IB`6Ygu#D7o6H|Y2l6~C6>!K)ky?#Pqv^1P8MNJCS{6i1%4%eVFBw-TvU z8m$t+u`4k}sO}`lWh_s;EXDeyo_!Q~?BSURc&Jitx2kI1F z7FAA~l#@8$+?cNLJ1MZ4Jg?nCo*td&ah>P+4yntF{AzlsCh&tK&s#C|^sOmEsb2z2 z-7^WWI{~m|j|Nt&f!(Hnt>KsWnS$UuI(~+ZU#Q|MbbOk`zpmrQ>G;c4yi>>b3jA&z zpRME1R`DZr{A&`Q^=(DCkNk=Nv39A9RmZ<1@uPM8i#q;o75@&u;P-&U=j-^t>iDNr ze20$zp~Ro7kWXl_wU(tbfcsou zT7I~*i5=%0*v!^iJ}W<~I<;l*DA^q{S#J?JLvp;a=G_cFtvM>cww8hFTl2f#=A*^j zKFPP;ho$Q@!YMHQSvfLL+NB5GnfIn>%>ftRt)CQ-5aDIkdQFLbvU z6`{QyMkWU+<}u3sy_oR$dCNk7Z6bjuG|m}XD~k(QXYPKAiT2Q~`0wtdui_wtwK9U1 zf2=-lCvb-|%b&1IL>m!bfSspvZ66VqCiMu?xbfBF-N~F?d?e>ZI%g9Rf+RrtcqAi{ zQovrGLVKILhj7)Mt>qsB&^Fsy;B*0%Y}yBre<@XADmib1WWn5GJ$o@{ zfqjriFtHfvOuj4oS}$?Bo+ zk6+KtR+F6Wj(x1|>C-0oKrZ>^UP$s7kJOmVSoZ7p};$@fJ5+Rlqy=D>Z?a7#4a zTZ5#8tx^L-DJw|vKhwqI4fzphI>W!LBT}8CF2^Ke#-7h$T?UXpR@kY$Yd)7vN47gB zlA^a$NmT2FJfmX%RWBXB8hwV|kkx}>n}V|bdch#zHqNM4`YcHGhCW?G6F3d4fQ(_D z(S7$kDNXE`{F?eTGX6n^fk48)aXGL|JBwPZ5=1fcGL1_CE+>%l!C1ZwT2STflp|H{ zf)*qec1z;3jKK<%;BXD!2$Np*eQyj@#Te)FfnF6wx-8{%xA^%vO)up|H>#mUi!d9? z1a}|aj-Y(XOY?KZ(O31j<8UYA#yxZZO)q7bG866OwYO7*ll|G5LON+v0WUlkCgACF z>gZrm^S+G0nNZ~~iMp3$GtL`;z-qjOv;|L?A|))LK|Mjq5$=m8iI_bw96%pJwM^q}#*Gn9O`{ul_xlg!}AK8UA{_h2*m z4&6w0ah;3&#D+)>@O~P9UySCm z$fO)6Ee1?%t*1jK>E~>%ePrMXKiD3gSYEWdBbvT3<5TzV0)xV*hEChUSIfqPd01_s(TXPkO_#%X1tN4iM?DFgxe=jl{qNqLN`U|WkEzv_r>l{NFm zy`l|d!MviLtz`^K!P%>LRt&OSu}k8~TKnCnn#lO0tKuz77LPJ@C3H9LW0a=sW83gw~aQ0A5_-N^U*RQaE8mh!*kSC!wq zFUQ!35eY3q+ifj_=og*MTb12oYqf;2IjS^jTnF-$eES9> zbqc<2p_kLgyMo&!GsV@CLMxAr>|47La=V!`k=5S2rOc4(w@2k58fvalLz^t`TW||m zwvOh9Cwd4naxl?J z*fsKqNTDn4lt;6AP|C8Eb}wMQui>}8AyC4b`$)ytF`C_>-}b_88%Z?p#v|(R?m8Ll z$9Z=p4S^ir(-deKj2N2SiIExUXsx1hAD=2U9`EHD>A3d4g*yxRjrWJ4Ls17gNj?Au zZW#=(NPd=1K29YsP{~_BTg8O}aXEd7s_3Q|G%K?WS}Wt|W>5gRC-wK16;hqzMW*yF z)cCz$Nr9JZ>A9b0@O$!M!S5-4P5i>Aa^GNvyLo3uvyl;+_eJy+)izl@DiLW!q%|99 zOG5LGML(uZv@wGa8l#rSO}!wL-Ki-%d$A;% zT=|et*2k~b3lCkVWow7=Isydd?=l`_jjGf3$g5fleVn1>>!=C(Pq;SKt|nXSuf)q4 z89EBcTVB!f^%yJO{#ovUa|8rX=5_dD;D9T+mvUwJj=r@d05i%Y!=V+)wAqsDVF7n zQ^c#BZ>j}#TBh-9K*Pvq5n0GlB16v5w&;y9@LQ{+9?(%z?>KJ8b4YyjPWEgW6*|!m zbRtV?qTfrRiNf+pI+0H&`lX_|X??AcL`P|h#%U^%=F>!-@V@r$*D6zF)TiZ9Xe!z6yPj?dBY zBUJo3I({_Yw!Eq14=z;jttviU;!VxV$SAIPwFb@ML-a9Zluo#XXYw&XEO3e@RU9jj zZ*p!Y94nM(wOX`bNyjd{OX%PwsOF2*;`uo1mTQUkECQc>=c3BZv07Y_z zJcMUTC^7jG!~Pwt;Sywq$rCA@8=4dTCk!B&sSRA*e2gXfKO=VKna#&C0_Qa!%jD)} z>G*@EvG6j^5AHwVa~+=pQJM3JUrpxc>S=*3^ExGAWiWQClRo%{IUBf;1K8Xh-Gkhb zJJQ5#b+l_cEB*W8n{abS9v|IB&xX|Y@F1>p^&pct0=RDKQUDv5I>9qVbAFy(aU2It6U}6^5;UCR-^waGr_2<5;2cS%6=5^#( zC518<@))g0^Dk+OPNx@5CT~le2d?f+FPHlr{@)x4?$l?(bD1Pu+6yA)d>5?l<_)f9 z<>+vT;x6-_S)T9~NhzFWtBME$Pr1(6kGtfn38uflU#5+=UO=?5`)aBUXU zJ1uq{^@xrN?iX+9arb%mTPnrn=L5y@e20`5S;(%@FU49L(qoUyi(K2o5jAoR`t2ph zY@4k}{&aWfg-N5_kus~?4_pS&n0LE`mZL`Zx*k0#AH@iWJvNdITj+XW&__neRf1x=T*WIF zDK`ERh(foX`=tVzb7jiB=b<)!{+haeCa#Y!4NtSvICI@$?qUmHZUh83uC<6h#|)6n ztMRR!NA>Ly^{ol$D9Gd5JL}Ng7fj2Ef>^n>nDqoiQ|JwAIFxf-zV9SkgF-)t_I z5Z7NPEBvo^hi}Po7aeUp*&7x;aD+wrWf2rt(V;+@yXY0J!dS_TA+NiwN9xB?czwP* z{TAs%Xsf|;cc_dejT2E#{+spyp51%EX8{IHBFY8Ht*=Xd1E7+vq06yMwdnBi-S- zApWX5G&dJKIq7PMCsIbO-+>%u9Ka$IT;|!X$^KHBI92kFeiuw0fKNR;wB7ce$Vd2E zOV7rnv{J7*Pton5%s$NN%zXL}c3~-W`@mQ~M}`!^0(UqguQT&c#He(k%wO>6h#5~) zNp~o-l{YZSN%WKCeJTSO#vBdcYz?5Abn=-j-{Z08$+*6j^z?WZ{jMsLBZS$#xT>-l*Qv6iJZFe^H zecKh8@|10AN8}3iW}EtQVOMYjV?>(gPOIw2g3mhIUeED<@U~sc-vuzGrVRE8dA+VG$72#vk5xY|^+&eOeUsqOpa9`7rF@bkI zXxqq{r}bRg<}Bo%Q&;5br(6*yg!ug1r96YquG08B&#uB}g6DfUI>%jvyTcZ63iOs| zI74l4aO(nf9A-IwG)`Z!Q2_*^G+ zzgn2idW?v>3lcZZb~YOYvT@F{C61P}xi7PEHrH&11e>zTc6ZTE)T?{tIFXKl2n2YM z^=!%NEqZz7iyDu(evRYh4h>fL#pQsc!9ODZJ$sI8Kj7yT{HED9pN5F*T03D?yAVv# zggf#&-pO!T5kDQjvQ!!a^vP_T#*;9%eGMMFm~G`tj&{Xg;wNRUbVjcD6>S0s=; z#P*&GlJetQu?>V`U4X! zHVzyP+z6iPtUu1x^n_k4V?EC$Qti-oQSWaCMsqr!x(PG%Ivb&Z>g`rGR$;wdrF)! z;iqIgZTuQ!I-BKDnyXX~y}@{wJI7@yYWmE&RaeSzUMGkA?yZuLe{wYJ9!@(j?(|CI zYG+4W=QajWF}KY__AV*b?Ei?695PmJq9g`9I$@|wmlwD1F-S!HjNZeu9q-g zK1m#Jnu(Abpl)Ttop5-bjMTG?)8k-==LP>N(c(>2{k4 z4arkT1%E7QG;}^Gq@PHpv9eDjQV7>gx}*@i`su46{eW{mn$@sL`BtE z3L*6_uA%5G5*@E^)KF$RTtn3aO5EYIJ)vWwVhR~Q^<>F;w*LTGFWgW{_L#y4rOxO_ zPLDib^nf1{#JEAu?+?BtveQp%=>AF6V!>3Y@J%_!c|34eAz1=;PY8n@9-l0cA=sfKuJ zs1*`7*PZ&6a!ujTrEweTyfzAL3CKpw7A?W%malS<7o}z8quYX z)1`BM@J%p7E`>Bc=M#&`hnZDnv3?W0*DfRc5~{{0=znB@t6U&pqW!$+dGNHg{D9o< z$mY8VxKB{6P&50ac43(k=D@Pfrnn+6f$ZYA91hGyl(_2HxZLz9%E|E_iMDpFa(W|~7paMdQ>GKJ zFZi>q7TTy0aVe4p?4gayXBwJc=MEJoB`e`)!3y3l_Gok>x-o^Hj@{AG@+D3$-oKst zuG)WSkGV|%OGw>QD%%yg*7|994y}gheMnn{g^J(C9*q`z6iG%1|03%QGZzqT7aB*=H#Tb!Ive7i0&okH13i~)v5xqKJHn|qy zCw7O%rI^|3Ef_FtijlU~dv&C7A*_%rzmRu1pO4yKC@#iWSI>F6 zJxe#mW>8U}#)iuwkn~4)$pc0HP<^=8BC40$h|Cq~(N%nowm58;Wk-+q0$;0JqFv1 z3p5U=H|rvV(W?|2f@6~;Iv2FIxHO4QrvZa$i6E>i|5M0t{Gsv=RMd?$5Xw*h{} z_u!j;*fk%{m*y&0C^N5RYw?PNMy7E}+xUM2*%SHo2f5fb&R_J%nx_SHN+%@s?o{c?Ld#_Umylmi(LZc!D{$(2BIReHT|RgW zL^wL^t)>Z+gQrEWBu2IOrb&Y*yCY7k_%J*0rF*&XfcdlVEsI!&T;!fuI=}HAclynF zcDAga1q(6ZInls)0j`KaSl~`CTU1u`1)k(Z_?x&K#J)4*B*p5^(nW%nG38%Mh&@cR z8HbDExxyG~VzZalNs?$cxS8#ebuQrBbaZIoBpf(g(%qUNa-#A`4OCN(9>ikQ?Zz9v zWtp0TSL<~+{NK0;)TlkcmkDr%w{7k9kPi3fq;qX8E*>Xw`}ZUXhq4-skWH#u!;OBU z=ex?EGFc{e_4ZlZ2?LsrkaHRsG#w%9W$Ixl;?8Pc2QSip7Ioo1%MI>$OmcchAHlEh z#wkf(K1mRf88hZ$Gy%C+qR_Y<`PD?UKIgR_;hs6Y<m^g|#}C zo)M^&*MDedTiBK_gdCCai)TxfMb$jR_gIby$17#4WBO@Y_+Ba_3k2tpjUBZP6m zogvIjaTI@P=p|#oMCp{g3?|j75P{LnkBfTajEtKJw3C2`uex+t5ApbKh*0~>_o(CV zw@eUNu5dQsyrezg;ZF;Mo;=d_BQ&=qL0k$5L+{OT0`v z7Xw+kV&+fy<>s>MW#Su~pdXe!#dII|MBLDbIhAn8>7bV?AtJaIFkRRpqn` z(Iwr$@%}{ixtmu|O4)}PHAQ~4K~VsoqMS-3oMix#j{+|gK21_xlpLt#j+COoX-S^Q zv&Psh9f2@Rd_OIdGrx&Y3s_P?XNtRVc{d&nZHX zl79lZpL3y2)N_G4g-iESo}$|MffwS4+FIwMIeLDOA}^dz&gh4cEStBL^XjuX#vi^b zO8o%a8hTDj*sV8V1b<{q(lUz=Byjqarb*{a4!-X#>In>Jx+!K4zCrJCj&)=}oo6df z((P?mL~71S+d5KkMZE3=ut@yd!bsdGqu*n695a@R)XC0+0f8MmUAf0--gAyoTAXN% zc%rXds`R7S|J)F{0f0$UIegn9(Ntcx`AGzQ#llI00}GVVW1fd)+k8i+#5Elm8dy$W z%KS+PW3_}SyT0JN?uoa|4-AKz30KW_Zd#jf34W+`FByf_$HfNTUDDRsDzYLfDD+d| zilh>>b*sT1#*ztakvjj~Ywd0-92&q!JbCwYh7}0$DdZ3*#U6T5l1!k`0#w}Z{+sXS zDxv0EiYU%8;Z{lbI3J6}B2^#v8Lvy{spc*ta|`%>q4~W-zFz~7e)@;= z0$&pKjt@#NAxb#%xjIU!wYEqavW#vD)C2C7^W-6N$^ZZ>Po2ySdib(pSbev(q$`*=oeaV+5pOhWc-)UiLT{vQkQ?15 zT6oLFWCU26N|3inV(~%kTrN%F#Xpkso)+Eve>n z@r%8)Nu)~t!Ryp+kp3w%x>ngcBUA;)*Lws>v3FkQdn_mVkaP-({y_5g(-6{Ir1lr_ z{hsQwWqRXR7{y>4Fpjt+FE9l@;Q$R3%BmMAeVD=&2aLRKAwLIUsdKhG;gu3STcU*# zMy84me%tYH5Gagq^-no}i+x)gNQkyuBx_UidA2we4szm(s5@~><;zp9(Ait`dE>W~ zFHY9?m&$2=aY#c`Gxz8$D7G2Q?$3As}lkc7ejLM94Zfjqx zoBl0P-dJ1fmu3~>^^`6=wVsNE@&1N`6xCY2USklO??OAG520@KdD`*(LPaw_2q>#d z$Yplg(H#_rKdjg2JA@&wIW>eV($(h+tuzIr_iEy_5Tyh%-}xw2vOJc}kJt)0XM2s| zy-MBWm^D=f2?(_%fPqMK4vr;B8UUC2=U19T6zD*3}S_t#v{(aWC)1bT{*P z!&QtpWZTwes)tzG*2$(l)iR=+lIc9nw-$)_i9s*_0gO)Ya-J5nDD{*=t=x4`%D<|I2Z^Co5>h` zRI|<{e7jYRXwE|4M|oG9nv7fD)QR^2L2+D5L6*Fl3^JRM$VBufN%~S9vEu~MEd%+9 z7Aiyq$|`WR>w9LLk4k-`3zO|a;uWqsfl8_pfjc5%eDR4iV^aX5BPmd~OZ4}!HA=7l zD1+KY#{XA|R9f`9mG9{FA4A3d@=wvG{HG~B5q*X3TM;5M{!OwQKP*ta5BHtr+gfH3 ziQ{09@fciF)|PyoU}n)|Fz&rT^B3x<5u9<)m_*wdOmS=uZ6Zk4U=jJDRlK{>hf|97 z6>_6??X2Vz{gihhQ(U8$EQ*enY9#w7h6~E$o+T1>W3!sc%?MmA{Ra2A(eZ@d?o^{z zO69&pQ~~2sC4QO4!Si{;A7@C2O{8X!&2|)4gE7ayxikcoTx?svqvv5|Cq>3TYKN!7 zSmS{YF?ZH0y(sxjn<`~>hO94>`Tc2$@tZ91Xpd&FqGKLwrV3b^RLYs1uG=%FNKErP zHu);Ci5S-uR?Km@V$s3iww)REvYQ~K{s}|r(A>}qdcrA;zZZw=(4IN8KXZP~U9>zm z_$hOY7!CW3bub0n=RL07VcR|vkAfoyPIG^;j$s*7qB?qpEAG#eh`2p~;fQ^4Q;sG0 z^PU$?x;e4mUX$_MVdq@63cO5iG3EFqj;4cT?#MM9{;$oOw+(*|X0K6vdrjWSYCP6q zrESKC+SVeSdj~+hgjkC|P+g<3J|WWxEd4rQ${wa4>RYtAK1KcoKLC z`81c{A2805!emUvS*7Ctw{4zfbw}n~n~vIprzYE<_yug6Pv&djP}9+oww7knZXLsq zkm{{`DXEhs{L&F3d$i>PM*bcVzd)AP`aVZi2Uf~j_K7Nwu<%dhk?{_Ta+U$Q*gDB> zYb{qA620tZLRt`?M0p_J>Lr3U*4%ITzLLxBR&&_+wlPnG1e3rknC@1!I8H{;rA(zM zhopEj7*gT~W^SMiQ?+NSnV1y95eWA+>CAqQT|i7~OLA*zwW0jcT3=OH5E+Ei^7 zXaef1VE%b-0!+wIZaBrhBt7Hn3B(hkScrBD^{SbHD=ES~xk-4j?lXSF4;{49|I_D5 z_vEx~9g-)jMBDjT7V37iYkMu!;h{pbEXOXAaH+~WS*}65Sj+mpV|VXiW>h1?+r5!7 zvpgN|r+Xt0Np5fYpGB1kGw!85NpIQ0yE>Xh_G^@dSzulCrS1Fc1edk1^XrM+g2&+l zV=R=G^gH+lk-V%;Z0@_kTQ%!gPGd{qO2tbXLz`ZrQqEdIZloOIrJg@>i%&d9XbXv58&XY~_2YFiQ& z@{B&##u*BWfFBGFaT36m2f!dI_Lc5eg$R8RUXNA84+LJX30~@| zw`-rninv}0XN%M=L5Sg_ko?Y4{mrbnz`9?-3ZAPCGWu7uoKVy?`iSQhUsm*=7z$zx z`Uyd5p&<2JLF!-n!};>z7xF=Vew8v9e+h;sUwGhUp*KvieWj=XfFE8K{N6bG8eL?{o0hWA6r37>2~-sT+LRchPX z$HBP)yFO1-0G#+dO`0DYDfFa)adw`N@Q%E0Okr`|<(QSiW2iKu7iV5%=*Ee3?zJwCxH68RVXctzz2A1V%WSvC!6XEexeYkxq7`%Iaj} zJiSe!KIh&YX~~-vM+Qif1=1P_ElVn}RTSRE#-$o2heQiFacL?Tp62~Sy%*pKEn`?V zdYdOQ`*Zi2qZSxtTc?DBf{Nud)pB**v{#&_95rn1GX}gWZ0lo@C!f?MQZ1B>JaWj$ zf9*nqHzHdqz47KtOrPAGSFVyetzSCDlW{7QbrrEFll2@4 zAipS1`(cvMrYI)0lfGq#Fs;By(-{Ly5R5-iB(>vwu5+YFUF(5OH|H&~1hI%))TYlk z#9gG_I^2X9=Rv;lP@lpB@RGeScs5|yQMe|WuM?s*&`CR+UqS&$Zw=TkRed>OG%_?G zU||gz%JbYNYYUBQG+2&Xq~>s^JP(J>N5+m4c&rHC~|7%;Bqiw$`_0>=UWSC*CXFz1x^U{UN5%h&*mvi#|L-WB6vFwEIru8DSDi zyG2hZ>m$icgmaAN7@^R?%Ix$ru}@e4_>ns-_kQ-`B)pQY@qpoh9S~=d0(U@L#^d=W zyVm#VTyzbj^n^Y%vl*x8JXxuEtnv-2;BS&#f^n`Cc)*Q-w25u7=St{n9=olUkT7mSlae@l!y6^X-@N8OVU!XRMKLBCN^si$D3R z)WIxwk^}?+#hNjYb1PM$w zs&ABK3Qj!99&8~>s27r`coV7Ta1iJZ+!Xm;vpU9q^VQ5kJ210|32Wy1spO(v)d_IQ zQi>y-d&yYM$fkzTR9x}h$Q*y$Ye#QSVCFd=P zoU6^R1#tq35DA?M`Z0F4B#VqMjpq{)x=g;AEku)t^R%0!4z!aIW+c+w%_m9!k@}=b zE$=TfKIQa_T`GD%MyWIQvvyvPiaJxkL;zrEoRRmOsXC~ewqCCC959xjCAw(x@NWrr znC$dvw$h_U#&=9jz=|^ko-wwlsV8Ja9NMNj46$P;JuMx9+`wzRe1@pE53K>V*Nkt0 zuUhq8zfDpcF#bk#bcLw1$oOLrLC1Q{*!2=STgPrp#Ev62I!V5UOBkfK2TpEYm75jJ zYQA6HgTM^}mL8+|3H4$L-cB*}_l6r-!Z(!jN5*s1k6y&KzBBr%>RnKZoI6Gl^kpx0 z0H1Z=VpPTLkc(#@%8PvQ}<#@E=w5#CFspDv}#?Gndg>E6kone z9?22+94JS=w%h4Uz*|`X!~wH7k5wt}A@i7*}}4kZ|pp&d|>ARLFfRiv-RM&&Y6v zuN&^-y7TZ=c2~Ie5{UXQ7cBZPd|e^A3c@QV!K3c*v>_Ky%Q}ZL%kvC${Gsrr7f&1F z3f1HtbcOv{QzGlnU3K5}uZ0_jSi8dWvM!#N(Xs2>>C-YI4`*NXNT)F^a{u@@>+E?W zwp~1rGmry$eb!IHjTs%!4!3S|>>RP@;zl-}eFUV8ju&m#J<}o&5B=!HCp)&^}B zaqM)B_=q3tVc0q9Po0~i9WQ?k`4L57X^3B#?wuFBX&%QwB$}HIvRu0u5=QZ7?e6ba$0xN zB_P%>o>^-BD6&3n&EXr?DU4i>gH~A&0yj^Av54@Z)J#$Cuuk9{R)~!Xt7M zc{qR3^v4fVH03!CPNBTIC!X5svhEk5-x=xxMT#+;R+{QTh4n!SP;K`9%$>LX0uu`j zAVNxWxPRo)^M1WQ^hw9AGhL2PV19OM!GTw;2OZm-*1w0gQU6mMpE#{MC>($cO8zC_ zg#r(snt9gk8Pbrz>=WxJAW~S=_3G`rAioq?iqwQtv_}9)eC&E*!sRR z^eUBq;Z$eutG&CWF?A234TnCm?(N+}ANjA2UBj%#Alhh)<(5MSV#0zqr1PYXCrM$E zI|jdeZA+_^MZxQb{`mPJKXisVD9qXWa)|PJ|Lz?0ama8wUJiXyYJItPw+kXt<7ZBF zT0h1?Cwyq17HJvQ{lS=Hl;*PT8U#U~wLXjO0E;OFrp&x`qu&*J#u?h(`?9ll_n?;@ z9oCOgSkIi^yT|(Spcfr`=ub}n^{}iN&d_r%>rNMPJiNsETbEFs%Dn>0A6j1=bP(sD zwcQok>!c_rT53?cDZSkk<)W-Rtlz(NPH*TSN^$%r6Q1nt8r0=-v|D$%LLFdP@c8c6 z&hOZDdhg5Du0b7+m#rUDk;o<1(969q5Bk{A!Cq)cHQ`6EtnCSHOCQ+r%rL0>@t|iN zpM(a6r_p0=OK%(^mD-g)Gt0UyG%q96I3zSvt%ONzmTZzP+nicRtPbJw`gu8z7Zbzo z5Uv;AFL!=4cVF%f&EuYr?W`?obYmU`8$Hcm;)lG8gx=7tOMh_T33yc!a8Wq#}NDEB$MGiDe>aKZxT7fzGgl{vH)RAlEdrXs*d*O@`)!1kW_ z`3CxXGZ)Md)pJ+d&U8s+{oB0gDzY;F$5dKpTJwHD&OD~(9hM}FQJGJa^{l7loTml* zn9SyVrktiMrBkzc#sx?W0?fK*DL*p#%h9-OW!6}^Y;AXS;2?FpS@?3WmdV)x#`EGQ zk>LQ-HtR{X6+aS5JB>Lu1xMyUDrGeKY5e_Zj&LOnGa>HL1|sg^rCz2b{!_4JF!SAq$v~mElCfup8F!_Q zJDs?m2PJlq#QwpI{fUnK;vt>WMVyR~ClN-QAZ>iUvH$u*wSd$(55Fn1M>YXEJ%?u@ z2 zYRex>6ZQN6t>SN^1RTdg^%~hyn7a37J=vSTv<9CL0x^!|{3SJN5p5Rjr9cyZvxpZ! z2|8s<5vl-I$zCV(tJ2<$c~p8MSIW!!H}o4P!rfeKHEz(%v9%a{=B$WxImx6&)(+V= z&ta}^Xg5G@n{P^=YTKH@1!|km97aSM2RfwLHeWJ~HIf;8D{`?5XkS4`EWuj-tobJL2o&4uj59e31y*e#VxVGV%z3=rlq%K*tSk863`Al z9P8MZ#`A2_UE*Lq`^;gbp*Nh(?-n>aj%GLq9Tn)Mw_lkaIKPZ@Eir^bZ#$d2Cw1)0 zaCY>iQGC&?%?L1}3Q_mqyZ<%ZGgtqm(<-(KUdTy9?x4ER=!8*Hic*Vg(f1J(Z8ag~;2nqY0eR3(X27I%61 ztP36E9F}0+()x-jpQWQ>T2Ye$2Q!ELk&^WqwM?ryIN~o?4`i2fB z#zSfKwG}mXUwys5ez2vaqNYa3f?6}6VBzQvZZih7H)uAXqURP9~$lp~7A*wI3T;R`08*B5uWs zU~P4!Ld;&dtb(L9COqL9B)GU?jD1wWMX>T>I9hNC54=rC{Me_Jl~W&!Wwx)<2lK1! zD=KQ>$O@ins%w4r{8~Td)c9*hkF%E`GO#`cCnVAQ=d7!%iDOa^FX{t8P}nATHO4M7 z_cZ{%3frDvaUz(C?e?X$b1^9KX=GPi4?)9al%Z{gfo z(`GwerFMUv2olmR|5E7|Y)~{?Sy5A6Wp4;n1cD8~uJS3Ylf~8h8tVMD4bool#z`x% z*VX$geGQ7X@tWpK6QbTat%g&rT6MluX!JMm^F;j64NDqZCGr>WC7~}v9DVh|g|D`6 zs9)#zt2Rng^&_o5yG~F3N`HNos>h^dffY5EO_GSqCZShqe3#8Oc^2^d?Tf3IPP$Nk zo^+v3wAf#@`m(G2!Fs!@sR^>Nq5%X|21T~OGGAQL(3Bbi^%V$ZgS4!`GRV>BTioEQ zU+JqKH|atJ5a@!4<$u5@(L%lfqc|r7rH0kDfeQ3>B_vplKvHiiA2`0$Z=hdYMSX)0 zR*DvD&;pcbw~7cT_=Kp(1#pq5yYozvCmQSt>UZu9L4RPPq@JK3lWe*nSY7X{I$?c1 zwVM7EJtkgu1N{_@jcV2e5#I{?*MS~mub`2xPB1YQ|C)+Q^s~JoSh)-cn!R78SF-(T z;w+NRBH0}!>iu=fD?z^mS9Nvb%*$UaidOd(bX>ag`yblQJm>5go*C07C?2nea8P)40Yk^PfOY56usU+1e&G{1Si#dZ^l zXqAe3-;$s-5Y@d&mT5EQ(hsHf##R2x;0hS5JH3j@uBfQ3Sn87mO0*V>Jwz|@ z6~W0F8H*kNw{gT*zuC=n8_jTjO1@>xP9G0L-tS}Og#3BUP@b>huZq7K{sR2n!QUAE z+Bu6L>*82!7Jr-gtGh53>*gUj~Y%KONf8Cepu!}f(pXDIVeBLxZ7AxRg zzN=ULD7I;J~?$XZf2%KKT}pi@!@4|0dx@z>@w-CY$Bo+}h=}{>Iv* zIW|YBQM>AoR4?EW=@&*|A5B60r=j>8v4tdIb*0Zfx3*#>mRiN)8lT0CvzJ$|@WD`J z{@Jhc)i=;l+NDdG6RguVh2^S>`sxa}>#S+;+h_Qe`UBMfZUB*n;F2ZPmDR%fIRSq? zVqo$5{dIO1ZLm^fQCrnmT@_en_g1f{W-ZRDN}rDwr_e23h1!r8!PV?~sAWZvZoIzw zMj~catX6U*k)jSQQ~mXetE;es6@aP!U~QG9%t!hvg|n01uF-_@$N z^-y8%Y>!>N`LWyQLMM}!_A*~pb%nirb)C;LyP|ffPm`LK)v%;m;i`>e-PBC*Wz`K; zlr02JA(N@wB$K^Vj|;rCJRy=Ez_@%$yVX{%1_L^M9|Xj(uc-l&nALOju;gp1mLQK* zqpYHKb-d^XNYAr2axAlb0R|NFu)KtGap|(dC%f0Tlrh6>^buBor3~d-jd^n?Y36iGiL#ukELtFxbkvR&VL-@4r>*qaJ+)$hE22y7kO1k>s9b|Dka(L_QIFu) zB;Hkx#?Dbjqs3Vx3RG}08;z&T4&qf7fh8j;6L~S8!9U=~!f&wfWEzpQ?-{;8qrZOn zH_EA7S$_7Z)xMgl1}$Yu=B9|^g`|sxAGKBf#s)hmQx6m8dMPpGpSGGA%tF+KD=O-j zL-=Ihe!ZWbu!2rR>cyB(#;*1TDFKsS2^fZrHibvyrLT$QZhRgWQ980BuuBfWA zPj!h=yQFF%6pq8G3f2n@8C6cOi^V+HBG3IsmkmA<-+rHxI9Dnpr@Fu_`LT*YNWFix z-BVt2!te3%y`WoD-2me)@+g))Y7+FM(hMN_l_@ENS&*z?T+z7k%yWyh&`tKUGQdTgNMvBw$v`q2#I?B#lht40od7Yj*-M+y5i0e_@p^&~o9-S>>LYGZvP+ zg+dEw&7A37ILGt7_`uB$I?0+WHivj~=aeq=%qTCNJ;UiGi`R=0XhN_rsi{~hxs;g~ zr-50MDSo=6|DaH@7$upM6GyCc_CnL!0=l{snphG!DIx{5*E6TQbjHFtGfSqImM2pw zW~2;S6UEG!xv+m0RS)Dv;7*k~#SxlS>T=E~_mnIwahH}%pCffO8EIeatE_-=7-Liv z%Wtu7Sq09N`s1j$TEQ|2Kc{@Qr=)ygiPuv)quituMJdC4jyZg`k3w`R8f3&w)0J4f zA$7`E79aS?h-eOWwd(Ce#^s-tF*UI=*OiyWkY80P} zTImee<;pTX&h4bMx}#sK)a6aZ0b%;8#G3!AJ&QMDR50OQNNI;lP@9Yyd{8UcP_ue0 zii*m5X4!e5apK&Pe^>xtm%zS^=2eMRLcOFN-$+Z0lOd&?dfXNCI_SV9_5Kywj~3So zT7DV={Bv&>i3) zQ2<7oUX-elsaCwGDrqfBhpI+DM=N{uXJvhL9p;_AM*5k0SXF`P<61bUv|Jh~l&rE} z#*bOkr0Nw#5A~AxY1&Xul@E`eHecamNmV1ZV$%6lUCWT8-|$UIXtEsBHxloy zOx7mjP5oNyYfLTWKXdMli+6I$oRt14iKs5fja^%(J90ZjYFJGlvO^bErxkckjvu%*EmkhyV+$+8m8m&(&FM9*FksT9WTAV6F6!pAn@xNmDEDkoT zCKh&s78cC$Ws6@%)PbK~WktnO(-o4i(#&@LpW=^qI$3p`oZ^)e1FRaZbBzCDUuy9Eg`7TNke~e7Kj{!uT#EIb` zfTfBv=6b#37_eX)rYgH&((ab3mf);Sj`~yUlJFe*YB8s!5`u$vAAJx=@J*GG*2E*$@8sGv zx=gz&e^k}zxb2nFejszLzcxOyx33TnDZ?Mtpla0cPg{mbrAj@&lE1nZ$;RZC5zE(t zFolx*9+aMpAVm9_J&ux#fF7}$+9tIeQ?F_(?(5X+anl#leEN4HCH`PdmC}X&#eoWX z5L1mRdBlQF#*2P43o|Wagi$2}{o~TXXUxzVdZcffPDt3sNVmWdS*#D%E|k6ksTceA z|3jmw^3lPGM>t{F%~eipDTP5c%HC&oJkoh8kFDZWy&i%$sHUMzuksSjf)qaMc@z`O ze>!`zL=RUXohirv%luy{KhfX)r!7IKoGM2q9{)=?8cK>CE+qYW<5Br*Q4L~a)0j}A zVnrp%dt%FWoV}kJ_;vQL8hD8Hasn+JN9*hI`c}!j67vD8bz4l**X(D%S%mxPfhA(K zq*xK6BflAh()2zCxGO4FRj&xHuwz69u^QMB7Psg1C#7>|l<4t-%tI(Eg@j4G%>im+ zT0$^DpH=$C)>Z<)PNNH5Ohq8trdnB1HH@NClFC$YLhnd=b6QZwOww&=HZm?`n&UrU z=JD;vq_3$<1WT=50G&e7WW5%Py$Y`4a$xe1N`flIf%yJ&}G-lx`0E zb8R}}HCq1~x|!A0Jc-vbRSr!0 z>Vf-zAcGpl)Dy_>e+=U5#aQ(EiRG;lAAW7HE`?`$5rQdsNxqr&(Q|!j^q#DBTpN8g zY?>I0WElG_N*YpbIti|7XA-ZG5Seeqds4*Ds*2yWcE2>xF;^d$APt3LOcQbz< z-p})&W3fy43vPy=kMRCDJ4N`r$NU>Z_>V0dlg{5I{N2Of^N%rC!(SeMhaQc^QYduc zs=yc07Oy}I8D*`oR4T=9 zxxrs&k!+UQN+L{WHvUJ;imLHr8yM@$gJle`YkZSO2I_;pk(PP$<|)511eZw!pH!TG zc!25P6j(-bdQHbTyWL~XcQ2zJzFPc%41NM*l-HwyWeS*>aC0%nu$r6(Ib1fvdU4F@ z*}6E;iu(ErvoDtNq?#rQG6$iBXAJ60yII6M2JIDfB5(M#69)A+{cn?g-kYKP6& zl#@tAX>c!qA)w1j+V}OorQ#4ajRku?Lv`VhX0_sq=9aj5E*~8yv?+K>+$N74)i81l z!ZvxN5MtyQl~;fD*Hy4WMm>)b$Nc|XKSjs5q?!ahz8{qFh*`Qyu4nKEGr!hQU1>Li zBwoTi{%I$E6>b7qWri0*5=;K1kg0++l>QNlQ?=)*`Cv6xI&Z>xjLKOUP=UkfEBM71 zqok}u6OSUjDbAz+p#Jd+DZEqCQ|}~p{fMJd{$KxGM$XGG8UNi&3yUU9oWv0h7Cj@I zmY$J0U|`mu!6ywFnr+J&_N|kLpK|JHx!=|WoqoodXMN{v`-qX}3>~7M~Q0brEhL%;M0mZr0!y z6Xvkoc9XobUZ9X2w*?%+GK+8%XS!@4>^>jcgs^=Kt9RLv+(o#Ea1rzNP4bS-lM6k& z2@42wu$h(-785oR)?q&xgko1^vBz8N6uX2I!H=-+GHf!!Vvcs-Mc73smkTeNK|Epi zOzb1V;wz~qVZm(58^$|ffrN9xhj0VoD#Es_u=NNxT>~8U`Odl)ya_j42R?+Gs-Od* z<$CISGUczJd_qetwjAL>!h?j1{FF1C^f!P9VcSaL3GM5kvwSDa75TXx_#!`qiwN5Y zR}pR^Y$NO<+(_6>c#v>I2>zVPJ7GRy+YhiyCAwE+X7? zCww6+{vq@rw6~Ey7rGGI3F`=p37ZJ#6Lu5U5ia@>^&~9*G4vtqBJ3ip`w9FZELe~I zNV9Gyl;+*`Q_3f_|BUhp>j;|&bM7J^VLPGwbl}|$UW9FgO@!Tq8|3@XsSn{I!al+- z!rU`>{{`s@>j+m7HW9WF7T-fU!VQFlXTpzr!JDv+a3kTOUsBJrfKO;Aob@Z@lyDK@ zGQv8-Cc-Ady9wJjP@nIRo-miN;MdfLFy}XCBW${#dJz`ZS)J3{+b@XRBguz=9c;TcVY1<&w(6!;M45+3Y=ZiHPglTY3WcM)#dja(77zXCqz zQr_RepRk*7ue|dQaaI4UH_o$^7jRQ8_D+2 zcGmWt&%f}ZWY+MifOimhx5)>}ilmha9bop_47bn$CaoR}EX5{`%#@Q{d?`u!;!=zg zzC8>)`=`fZRRRzE?npzl)~36J-?xEOE=c9Lo);RGns1<}#7@ckA@a{6f1%_z|A`z8 zNw-*5@x4~QCGk}JqTUM6w0ZsU6ghB_Zxi`ONX*-$5J|Iv zO;rU6U9KU0elL4hB)yj3pCY-co&xV?;^)h~?eHT7e+5q(tpJ=Rs1W^s*n9Kns*3Dw z_|%0ykoqLI8mc>$q#!ZF)fs>55OhS&y)miO$t6h_cIRq_dx#==sP3te~AAU_#?po+D9TCguf>6 zbMvw1YS)N7Loycy-i1EVB3j0584wM?LJQ$(G_1QV{t&;fvudzM+j*j%V9er=#-~=R z*5Zmk+K75DVNZ9Ma*3VP+jU@jQo%!_#;ewQGi?vAQhw|Or?bB3XB71Vdl-kx{#Y*X zv!oJvL)e>g4_R);soov}*QQilq$PlHpsx#2w*vLHVb9st^z$S?0V7-+8IoBUxHw(B z4MsM_+sp#8N@i0MIW!um&MX;tB2whM9N+h&y-9((x|gxHp?zCoFl!2&h~R0B6WSS*6`bUXOj2-{NJa9m0Pze;dScA}w|IKk(*VwoOu09z%I64tXELy2UNR#J$8U)w6s8wAZmmmKl^B?&6z+X$` zkjx`0a7EHDUJuktlpjX<0-Q~>zF-K~a9!9G8k`)@YCWDcfw7H_*`R3fXb2@Ik8@Qt z@LZ#VIUtHD*vKH$(Xc;p$g`&idp6|#567bm@VkNUV)VL^`y8`hI6boj<52Go^eAe6 zb5L(b$GWkHxgpWf$-KXe$~c6;XFuv+4L&L3Ap0k= zLm7vG+74#~evNTBdDVn*Qf1{)qTAY6y8NBzpv>gvXs z`qyy3WcFX8545iR>IWygP}4Jx-+SOQsS;;6*_L+{Xn}X?b}U1YBPczF#*a?_H#oi$Q=B=3Vw%2 zBTz2(0a`B&_=z2x^=DDw&PKTni3Z!Tos(C`q}-*rv)PZkl)1@uPW*O*^M+&%bSmmo*=6M|LY)1LBESK}lEGTGLbQHe(M+2Cl zb~TL|-+KKAec@vKG@tb5Bl92lJm6E;QR0^Xp9MUww2~j1Tbp!sOYfS(Y6Cg2zQ<(xWgPkdKvF&GPqcx?9-#5 z1)BQl0=h|{!*(M1A$}0>HNcNdV$J;r@Ed@ChIr`B?3ZBlIQLG`k_^tYhen4Yk9Lta zvryOHj{5d;#Dg&P&AkEYoBI=-{FXPEMdo@(=KFh;7xh12eVOmrTCUQ5+27Dp{t)hT zvsUP1C`tLDz2pOL17Ar5TAdGl42q6Q>Z1bXMJT8H_CMq|4){Xg$NEU5#4iMXKJbfE z@LiC<9QcF4zeD_Rt{;IF&*Sz&a@Dxdz+rPBzFAB@kAlATqPn^(h%g`GUj_a+@YnfB zq{M$j`iqU-n=;~m0>0=H<9Ac=aTM+V{yBqVLi#TFnzZsn`cmKr0e=wqAtaP>mUF9| z_M z4#uSvHUnZ`D^YG=+IV>>s%%GjIm#!R`sTg^mN*?+)#v#E(OG_$RKoWV>dinsT$!78 z>+hq)|C{o2SUxs0YZ;`%eUFR_WsSoz??L^mjh{-Lx7b3+a+|#O=pTi%;GP^445RFC ztf`l2;B$O6o@uZh^C5l-@W&e9=K#ME_@lr-PTK#v&YAJ63~-!IKB*6ho(=rTyBFh! zE5Q0&v{PAY^on*;*Js(Evy<2voN)bU>T_I5asMy_^+!`q@vpFV@vrbk)Po$wfvdmn zmV1_ksJ8+2WZiAhuD`DcTp(whdm+u?+YQH;&1i3iY*OI5Nqk+C=@^& zMBZN(Wq-i`*RUV;{eAFyo-fx1hh-L;!xx%0<}Uqihi7!wy1KekLb|=wd$;;~E%SU~ zb2xyz;70VWk8th4VhQ;1ndi00Yrn|TFb+r~@onxiu1C>!&{bcFd6u*T+`guskLvAy zNM;T1bQ(JxiJw2&PvHI*jW$waSQHl<4e?mC^Z}paRtm?Ob(PT{>>%~|LtvoR|8Q1F zS@3Ar3sJ8c^&U_5N6u&Uc3t0};aKnVE#=8w!iIGiBy6lpdR;w)c6MByx?e>*n}XHJ z=Qn5v&u<{<3DIyqUa~d7oS|FP z&J8#FI800eDs^)B2Yu>mJK8P6v+dhY)K`Oh8Gk(w_T@42WOWUQE@@0z;Li`|b%@W1 z@$7tQ@*LjSdA3U5|11jN7}SXJ&HWGU1OL$6+JR@~v|&B3(PRBQl-8kFg=&bES0!r& z$>R9ihe;A?=tk~r}@7|)Ho*IysPUAcaah&}WPiX7JX12ppc7X0`O zpZ`fwuP60(Sbq*N_gzO+uv#^yR|=!=9R}e5wts6~-NQ+Kjp@&f(~Q7pjSdt1^_eJu zX*ReI*Pe)S-;Z|kwjs8JIhUuNpBng~VYpv!LVGxQmgpl!7x4Ru{BFiO0_+HU=Gs6_ z=4QD~&<7+ONw`&$58Ln33j1HsUqM`hby)N^l=u6?X(z)nci4gcjrK>bJ*<^ru@d~Y z-GTKo*`NAxXt2%=%EY;TaN`C(EK0>S)=^IJMrH&xN_+bW?HBE=tLuck{~3f#yb${% z;IHI@-JqZKa>+S0xHRpg0TWi#*EI0ia37vS5CcBu9<%;l4U-jq=mPB(U^Ae>77~6_ zV@CLx5&E9te(=k~I~F+BB|ltGUMR$Q3;4an$~f}XgPZh0&zvYZFTViYKF|edr?TGq z^O6TpAh7Pi4A-Opdi`sS`GR*k_zy|7KIFNR`0ZiI=M?7tr800!qr-0GmCuaO9O>mc=4&}sna7Stu(2|p8UPF9TzXl zy4j?+n)D8n-euBzP5PioeNKA~{J2S|lWOU3 zj_s~XVYCZ#L=OCVk4J#;i_C{%Fb% zn)I+q|7OxUlcpQF@=RJ}(lV3&@9OFQRQ)O=kKfUe2A*irb4+^J%uj6J03+d(6OnO+!B#Snk42+y8$`ju<;>C{v`X z#<(VJZ_-{StupBZlg=~gGLx=1=~k28Wzxq@dcdS_oAeWtes9u9H`BgJ+ncnPNvljc z!KCv{y3C~OO}f>jcbW8YlO8bX+a~?Qq~Dt~QexUSX?v6QGHI1bCzy1eNtc;)y-By4 z^e&S=ZqfrLecPm;nDl#-M!K8!P1@e1y-ZqV(g`M=XVPURU2oE@CcVp~kDK&>N#8c< zCno*gq>&z`eUr8~X)lvjnRJ3l=b3bwN!Ocnt4Z%N>Ek9nVA8iu`iV)uH)+J|n`*Tf z|DV5y3>?_Eun1wnIu@38E$>=Z*rTL-SxK)RJqwEvNwTmSp_&9=T-s5d8R&Vey}%5! zd6|4_S&0SKT_(?wY03EYoN0$?Er#xW1E* zznAoVra>nYElI6e+y#yIqC&=(eZNNPgM(`O_2)|i~+E<~G;KsATA}|8a#)F%f1-C5J4-CatA$UD8 zVLNa&8Vf!~AY$J~A{E&Pwt-yY4?u1!ErQ`c9QwW=lwtP)z@eGoNM8MT?fP~x1!+5rK|ohMm6C_tri zZzh1S0M$;{LI4o~YMh<0l~9@hlboL*V#raiLBtsj12~1E>JWhW&S10_%21Sek#m#` zvISV;>?P1tEkel(XEHPz@>CUoT4zvO0C{R0fHe;HZ=q)DU2t3Lti>)W)KYy8V1x5G z8MIfIfNZm~nG$qU+W>5Ho{a%05nzXNBTKpqu-mznKo0@-IJ*e+RK=*X&*?@@m5FTo zoeH2rz11@$#eMlfsH`yi_`QqW*F6u7_+jFmHr*)-~; z$eDJ8wbl@QCY!MA4>FLS&eD*56Ex|}Al|lDz#g4h#5b|uiXuOc_$+%E@$;FF+tC6QNdZtIi@w!9HgR|4px9a({`3oGE7fC zkBZnmP@EN@Qq#NBAOkU+MbdjxoWMtrCcQURk?lcy(HylG`J5%^TIKe-W2k7;FzhQR zqh&t~t=Jow57}*CZ1$DR+x7m9dp# zTJ|#m)>z-S_z)w?Z%^Phu=<(ZoVn1Jh@7kfMn^~2=PGD5)<=Lv&Om4>Rw=-W7Bd&k zwqjM`iDDB0nRhNpQ233j;7fH!W&JxzC4RhulbgJ3_SSKZi z9S6Iy*wta`{fIMzvTYXNs560eZV<9#PG?wc?B*~>`gs05=t%4~0W6jO08A^kQy^RA z^T(XAd%`0?n59}SI(v>4doa8kddyS#gV@1G!jAwdRQb=cQ%?$1t@0mby=THSt3@im zlx@Epo&_#TRDKMH@z|dPTA}iraiHD`Gs444)e>>!t=Q+`5uB1LzdJSX&oJNgyj=Y^6q4M8J0O}Mu3w_wB@@Mx3)Gg8z&F)tDXR)`XGM(;M`CqjG zbY+BoVUKEg9^yg8u8F(@S@x;?$1&uwUqz^;{VIPmlGrwxVn-nhdvuGmcTD9om`7}v zK;NqTLxk=V=(vKT;q1<>z*i{qsYquGS^Q~e)r#K*qgCJ%@>ffs*gWrtBE zb9~xtp*g#ZaJN49J2+mou@b+XA6+!OsA616ClqyjXGW~K%p~{ zbyf;ct3lsN4&0IUxT0-th+8>ZOR0#rI5_6M*zFbZu~JB&INyE!lgK#jAE zF5->==l&#z4ls6~05hByp@7()z%G=`Z-HoI_=kuAc6E`%h$^wCrDTP(m35vE6{T6BXdF!^I$$Ex-{cjmGE&hhlV(I++SU zfdI#xe%J-XP6?Kw3&-=1b53@VI+n_xOGX%e=|FM#>PdIvevvdp|YRUmkh4_I$N zkj7T1^0&|f4GnTGw^RA$EUO99lN71^%jlxVOIa6{pGp0lAyBc(zZGk0Y?eS>RsL33 zer&!#-BkW>sE+dlDpC3W;b1Qb&P79|Dt~@IKo!t)ho&m9NNiyFfK6zn7Rsa2fhAN##$Z4el0bhRQ#iWe*B8 zU*+FI5A;azS+u@L`+}bXTA^Aly>Px2`(2RhR;|kC5+3_VTHm1Z-=z2bEI11S z!mEk@`%21iu#VWpKu2s^X7=MC%)BYB1tw6$ZjEo3t5C{B~kR*?-1xW=8Edh5pa@c0clIt=x++5~0kWonL^8ug09R;um2!l$ARlKqzxc zdI6LczaHjo#mAu?6`uy32CQuUqAl~(XeSg$>=JytRBwtps5C7%$I|LW zn15ERQ|NjC&efeT3f*NlVmTf*j32JRn@x`cCr{cH31J(wtLWU^9D)TO7 z9genD{5!N1i2nsGh2mR4wcm>Gf;hD*{vzb54a9GThpP?6p9LfA&3^&89e)5i%Zks3 z+1G;peiq>qh;M^H%!T3}?0`AjY8`^c?D(i0P`6pM#g~FU5dQ;gKNK&8k=pSrs4pu% zjA~O>;Y9Q+6npqN*87(0So~MefQo+wGYiD`VW5Ln+G@1FE%x5mY?Pac52YLSD|C0C zF>l+C4M6@YQe^29T>y>AiLTaaH5@%Hj48#{OfQWQ$y+jCVo|xsv7KAVBTIlR=N$+W za}{T89!#C=TKydsv@KSk=o+0bY2ED&AF35HirTczkmHe0#B z!H9%nTNFKSyb}bq;&U+>RQwAd0`XZe{$Ttr4s-kfhA)4R%yxs z{6}arm%kgeTr2xeXeQPr@CQf{v0ulx_(`q^Ui}WL7_?S)SFS641K$hjPd+KP6PlDE zXS6rXod7XHu>k=t)bUTDq1Ex`@GVyS8|^kPL)SyG) zVvk2@Pz5HSf8y=AzDZLkwz^z)kVQQ(9O?tP4O3%L*ii~Uuvyx1Y#|Dd*ff2s=wc{ReWchsb$gQXBc10O zq&`+`wBuvwkNQOCFM-O{r(%?y5Lwq!pXtdHvF`?p4DN4>5)e{tkyTv1l4QIks0I8P zmZcui0%oG)TEIs{z)lw;w7+`H<|5h&0nRP;xUBk}JI%fDLQCzpyP^P3OTMPeR=Q}Q zOOl6`E-iF<33jilbm=w8(kdw}=FV4Dr_&^KYeUo7TGz!O)UBMAF0Gh0uNOYW2YDj7 zAzgfy)uk_{v-*!*Gpd8h7XFhVO8$vT{wae~wWGB5a|T;0=GI(UncSLNMgOFJuaUEs z%7JBSEnE{Jhi>Q0y~tA6%F(MM{h8XV^K@rwOGJ#ID272)5%B`5BFQ15$N@dW(AZLF zm9&J7sow|HW>R?r1)%wLoIrjDWNTY|Ii-FnxC1oB9Vy%&f{!8J3IAHrQhy50fU$JK z*c_DYEsj~x8EM5kN30C;79=YPGHPY)LcV(kE+Hz!vGN~QoQ*s`YI|!avWHlx()$fy zd(K)q&r(6TPFV`L^uo3v4TU&~p2uI=Ev5Lz=iZ@~)k}>DEJMEcVSK5rY~`RSJ{Ng@ z)bvDRSyI$Pr2k`5)VH*#leDPsXlPoZHbsV!VAVj5X-3pLQpl1dx;K-IsNHSO;&%FR zf+7E7Qp|Cf4tm_$iNW#irKhO0gVeYRaD`~GNNL%|Ra^w&RVPIi1h!17_zdTF)miZ* z71%N@k?lX!OO%w#^i7X)`Ywg>_xr7>)_#~}B@P*&9KaJI)%d_l;Lqx< zd5#1APbv884SoUe-{@XA!OiA{Fq&4m)o*aQu6q?|PMd9j8vwL|c<7T8JZj!Nv?`1H zXj(yg5`Bw^{#+g^P1yuZg8r=lg8_X}^eH+rpb8n@0F_;22+h1wC1AiMWQW1mCK(LD z!Z~0LingNOfR)H_fgi8|nHFLEhnMS-8N@iH>A_QtFt-hUrhyy-NN^U&rQWZYA*Yv_ zA#eU@^rT8vWL*x^OnhV5-4BiM4A4uB53E8jB7L=(2Y`n<;2oe(4hBB`??>%IL-3@g zgFbq~6bJkkMN`3e2+^;xgT(yErWTnR)Z5*rsl|E-Mw{+&%z9g8+fpbgkfEBKLWQ}M zm}JN(`;A87OKij`pvBd!9cJj<}t`r^7$?lm-8k5O?4o0r9)`2hA*l39$iyKKD@GY3o5FP!fyqHE9Hh;bqei*L|xMX%lg(i#PzKurd{bH z+`3}F2P=IPa8K;QRdI-C8wMgO{T!Q1)m2WT!>|=CJ;eFkP2gI>{IQZM5x53DE8WHJ zbr*JBv5hI++Zr&Qm4W>n!hfTK>M07lnQ$90QKbTJ!ird`up3ro0#~Bx(iLpKm%uGh zRLxcRm4P%L%lcj?mYNb;QV3fbkFsHqZvdZ=osZ1mhLl5j)`uEb4qYdieU}X78O#aR zn)d^To-5#f118=xO??g{>Wntb1W5eL;KRcaIzr=vTlQT7BO-UJ?6E;wwi1-VGB)__82mm4Ze>9T`+xK7^^HB z{>G58;lVzs?}4mDw4ZL6#dG{(f7)1yl9b}LCl}8&#p@yVqkgf^T;#2v=3`Wum8ear z@NuIR{I)56Un{ZARG^=Uwb7$P_XX!r&w4ajr=O;K@;GGaDwLqP!&g^glPRXVt4cDm z60aNl>!`+?Ot7X+K={C=a7+6tHCGPnWx80Epip(U5}o=R-GSvzDJ);`@zCi$UB?MN zoRs7{Q~VWJzNxE)G1k|ItVG)Zh9hczt&5ys(#s_lm||K-VC*na4AOgCLA#k8c8>kJ8XaDgTX(fYJ5R#6u#p^K*t88y6F$e`gh$$tIaOd_tw z5BbFhlf_L2>%LL=zvxD^qLUNt$t3MaLrbgtx28>949+pd6r>qEtC+(Te(ka=Q))}m zO@5KSLZLI3{dk>*$NTVVYj_uEUCogV+d;!-zLpy+#6Li&H$ih`i?F6|N^Fxlm8N)gQmW;r_)={XsjdSTE!9mTRr6f@V>mfK-7E*zI{^2PGt{pI?gaDI zQrsd^>;+sl-!wzJhYkaFp*DJJ_yL}To|BsU4bhyWEMFyMc}`@B;UuVKd0u3h3RuhX zf^gs?bKUj*0&+TBLccxte zEPEI5sQIQ^0VV;ugV~FVhANb1@Oj(FOQYyhO<<9sIxormha~eFVg56i^|%ifi7COW z^r6lC#>UD6rW**q%SCmZJW1LIII+pFrE-1;hV0W~;O{VaZkPXT@aSvhs|HWKb9#>s zE}1@*c5|F>3IbpiaFen{24@v2Mkdk z3}jOfP?swyFf7z6doHCkS)%%&UWb&D;V0JXYn2^0rPP|XIB;}=^OGz8sSz};E=|ia z!kv@s>bGE~eZr+_JQz)dUMeQSOjK=JF{p5M9yZU^dP5r4gE|?@NMJdOk=PtzoHh)d zFNWDF?@o#_`m}2enDY1#V&?V;|J4JKI#Q~1vrf5e6R*_dZ@8weGQQ@eSK`9-{_ZXN=zp! zx!L4LG>7le+F_j!8&~f-HHNxCX)3k7M`wSS-gRg(r5ID~u-QaqeydEiiLmp; z{RZGsI)K{Rw5>!o3i;vKHLu54o@Ve3G+g9B1L`t;&$s~e`iAW?nWDx2fJ;zo<(|>p z^Ic=^7W?x~a*^RVIN6WQT`)4OQ1mhc9>-qYXJ{5dCY7Gvodg4cFDk@15Lq<}(3yaS z><5&I@~UaT+zre)j!eY}pz%3|KXtv$cfj?ijOVEId&m@XOssyz29j|Y_PlAEkIMB( zSp7z((py6cA^I8=i_qT}La~1}m1tyBQz|Yu6?yD0+m*t_ALDVj-GU{U628P{_2;eY zeuI%t}#j?9vcC9JYFN1@RIPKL_HfT4X*(MrOc7LyRMueAF}P ztHD}UgmzfnWR2iI*(jT1C{LaSJ`XM$iK0=O5iN8lI8jf_;6=&}o?h~4gU8Z0Y_`E4 ztj8sm862(oXbO+52G2pV&?kR%r_|^+rTa?^!0uN*Y=8##U(KtZYfOir3i+t3(k}*6 zx$-%OUFRjxwe0$RhLTrb_2Zs^sgln-rt}~*tzJ*x<@4C<^LPsxP5QMVwE`eLlKzoT zdfX??$G)=c--fEbIq0dCK^{jPzu&72j{dUWW2wOJjiy+V2pJ`CUiIt7>R8dT{p+zr zD^pCZPLN`~DJe<8pO=EKOu?_O$CuTl;Ejan_wcnb^mTwd4%lxfUegN4oS0kUd%ywm zeBdY8#QQNNrp9yk-e!lcU zjkkv1j54(*;}DAWn+m^9Rv=baSYs;m$Y=ukwHbdwmk*)K6R{_K7gQO1_jC9}7CtQ+ zoH0goX$O_?qqcAD?rZRAVV1#t_X5`VZ3bUhxDN2dNi!GW0Z~RY$V-%MtF?xICmQ}1 z<%ydNTTa@^V8~vt1isH$-3%w<1@-uTy9}OdQsuI7nyA4X>(8f4n@!nH%ng3j_E&mf zX5EIOvtW$_?nCAPGfyCM0X%!v^T>>Vj~KEDUA&gWEV>sMA#RO5gj8RE%ox%PWQ|08 zyl&tQNR*FS=s|GHq==Q6X9{?PNJs&U|1^KB6Azf;w7ytibUoRTs|lJPt6k_<8{}6j z>zq<7{T}KUp_QLZr)gvl`gM=+rC5H-J~d6USn6)}i>y-*H-(Na4p$oX*b2%=ZEu2A zMsF@JmX}g@p!+?3Dg^Z<@~&p06X59}Rx88YB0mpU@9-`S^8s5M*lXf4!AC;fQRjwhY)c>%#&rT-Vg#jK{)&XSRc73%KNFs zSXvSrC+UuJCxd@xD)KCb)jneIerM!3il;2eUUcu(8k~DOvrvD(A@*-u)b^6zzHGf^ ztNRGr(&xZ(hrOADg+yNu^l^B_9f0>Mf_gr!=+*pOc{GDs*G!NycI_QSw zz&n-Rj*6ZF zLI77f>Ugr{E5#&=KMSMaYB}NSHxV{E@+JcQbFZZ~3BJ?Z^XA~y0LfcLm1ti*px+Z% zQ||ZU0Wtng^XK5Dh==6efKIa);hlj!V)XjOjE8l8@$9*l+AI0uscpdQ5uG2!N%N@A zkHZ?H9@F&aFGTB)NA5#6ihs%k{t0OuQLQOSww%V*{Ygo(zIUOb{13hvapF5*<$DFak|EA_Zb^w_z0bRK{QHBli}clD6Y-UP0RAJLzkogZIF0YTbS~~r?ooNcgrio} zjE7h+C^mCADZ3}{t>||}ng!*}6nR0Rd64#_N3n&xVpJ^8&+_&A6i>0$mO=6BkAxLhZ1Z}Itccd|iY6!-6{U#BCgTeq z`PWBC)%NL_(|Q3NC6BF_(qYJB>(TPqdO0Roso4IQC}qDHaD~|a*eKf#ZrQzBU!jbX z7DDj%<2ck`o2GWqPQHxxslW>HB=E~XFowvg-vjCnS6cNtGN)jQSN#>4+hG1fYG5~Q zQKRZ}VDiw_q2D7D+_GnNRRGWx_#47E1$yDIQPmyLz4)t2;Oj+nziJ3F>rpgj4``~! z0qO;2W#x+?Fg|adp5ib<*!b}o6z=m^!%tc@w=NVS`FS#PN7i;^pPA17~Z> zziUb-=wJVE$x9z?!`(W;rT(TWQEt+41E|G z8Mfad6FCj)-FS}Xi=C@{UIM?WS5Vp!rDczrQm!D}d0h&c#DiyQQeL%xtb2(96!Y=j zpG+b9m=0;^;mx&RUS~4`i6&-D`Di6!i1ekX@Nt4$j7quBTMe3arUK;{D;2opS;G#W zYeW&;n82k=a4t1w)j-RYe(Nxr{m|EIs8YIkAhg*kgD?M|j{YXPOw;^$d$8XKCeo`O zR=)@4=t3SRtZ`pLN53wGtU# z6U{`X>}NxH(!E9EGrz^+Uz_81_K4Quq2CRy2)jY?{ zXk-QrLgox)_)NU&Y-E06W+^gL24hGE8sRx7IW96MkNLZi#6(j}Mf^^RjlG_{15WIm zq4mHASpP_+<(VGp9g%bd`wS(wZb5XCV|FQodBxy4b(#xa9?ZUIzZbiiWQdHj z8*eCic>E!?Nwe*hVLHPQ@r)XS9s9O$(BLU=AA{GvMq5+;s{sEnl->yZYA4A70tFWz zRaTilNbHVCS?I4gn04H6&NW`Gmb32pXga3OfL{UM0RuON$g0}_tp${L)3_lH*7MR7 zbX@;d({QtbQRXijk$I-CHe9T8E)a^qb4+Y)Mxr7nKmR4roD!M=}V^S2~2Bb69rai zNj{%~n|@xppb7VCQ&6>E-Yi|n5!Ri%#bAx-u>Irhl zWISkQaiMO_QY)gDlPMRI&rww-V`epY{MAsNG#SV7fa}fI4ECqN9F|764@T9=z;{R0 z0V9xkjG6w(j6@H|kgRGhAf7j?E**H@+8eYOmoN3Bx(8A@W z1wDz%WpC!+vGCQ?m5}o?Ll2V_FEg6k3-Fn5R&qWFel*F)N^CHAUh%w|g1^Jy`SSBe zDfmgoG|A_u6nw40b2_wuA)1*&J5lVR%aYHmM|`Eypj#E$G)N<)@{Vv+=$&w9u4nTEoH#rjU)V zPAxQz|^Wk{kqN5^!Ksl z83v$@trjBq?&OVc;tywOTHfH?SkEKzZ3_OOdi=02%v5W z(CGVv4gYpJ-%F@}7dwO336lq5qNMF+Ae+hmZi4JRl3kmDMR`7dwm!KvZiQm!ZUd_+ zXMs!JbY}UAy2oEt>!1A;1EqhsG-YCI{95Wmjyzv?_n1lfl3zHDL%Y_L7r`v&J(d?j z&J-G{!bUt6;8_akr}kHP(0pN(^Vj3Ok~OUrq-*vsxwRQdEWbd_Uu90avJhoIN!fyA z*|hibaT{@-;zb7^F6lPwe{^-m7cisz9<5P)=2g%|>^M!v8qCSTT+OVFL>vw8dSak4~m)D2!y0OgdD0r(Z#ex9oM-*!Ctmpc)g@D%<)%Kov{ zaJ&MKKkpQNF^3NE_bCy(GXOb|O}ig0rLB>d$hbGH{|&AYa@rdpXmPdtkck^=BVZ2< zbY3;}%C|iA;K{hLH`cVvTy%JuTp!)Xa`{U3PY-Uyei%g={DIlDH$b2Hn8275+$rmHFeTa_NOFJX6XU@Dx|}*vSnW?ciIk^aEqJd*N=SSs0pT=jzuMY z0eipQN7i%qh=bbs#PZBf@m0`{`(9&uU1R9P4_-qMJ6bWi!?GHc4i=uY$3sok$x zENT>869iYzyeXqwL8`7|=ukq6qDW~?fv>fiU&cJQ37UsgpK?iCRGh|&T;4rVF1w)z zX<9Rm z-VAi!DiOJ{$#3;Vze3hvjK7KH_6hgh3$xa1G-_Nw)vsjS_UB9 z$)Vb=1*IRVjd?#*8}ojsHs+I|+6W{=wGl{$Y9o*g)kYv0s*ON0R2zY0s5S!0P;KKO zVlq_QQ~>|yLbc5Vw`8cc3jj18s%;a*Nrq}8kPOvEAQ`HS!2gR-ZOhTl3s(A(bXZ3+ zq#8SELaH(Ahg4&C8-`Tl^YVzj9Yj$MD8+6f-h>krfMBoiu?(rU2|$Jnz7Csa;)kX2 z4UH^y%kNQ~DL=xztr!gT&&kyeqHWav18b9CjNVG^VYZ85X%CDO^rNR|u%=KZd`bj5$bx99J+G9VpdVK~qq9#r*QacbNDFO2 z+2vxP^dqikjQ1(8^(k#D`(siL+bNWOEcOgWV3XFL^eKB<*-w*l!fQh5M`_Qv$EW0VWfzljR~ulQV4;chp7Ap%bGYdU@8(eFaMKaK zhgqw|rSu-X;i-)GxU+}$9t`{7e?E;RJqI?t3=H?b69sZESePh~%$^tpQVQSf2=rEF zlK~+KMC`q!KOrC__B&SK1;`vK`4h6*;e@}hLEpsTgny93hQx*p|8ze{w8IJi%)E9u z;a`~74kuj4ymmNYOA*ixC#(d}4ksKCKs%gpPyp?4!eIfl!wE+O&<-b@CV+N0VMk&q zYKIe!s_!AMb~xb-MTvE6$Z)m*IyPjusal8<9UC(2sR00VY{+n)ssW&5Lx!8FpTJE! zoN!Ck1cR>~PPn~V4l*4ZGTcqw20%NUaESog;e@*jpdC)QhXC5)gnKHCjEM~yE)&^w zY{+nL#i)*OI2@uGXg|6JnV==HA|plT0F!fCDV@2w` zjun|^QBoZ%Qs+&q$gpv2;oFaq2V+Hs?_gFtw(y-)t9ESRyQx*iihLHhh)rV=S*ac) zP{gJvf^Fkt>DY<@WUyZmoBET8k)cuSWMCB5{m@LoGI(TY-t9uhw*26c%$wkmS0bDC zQ&-606l?`k`?j8#r-ejY_E4zSX?;Djh?iOfL3+{XGi%c;A1CcOU4RCP+|LB?Qf(}j@*%9zeNt(*&oCE~8|zP;>?V`?;=pG3R@h)VxH5 z4R9wOUAYewW*N#p1YI}zIPe`%I%Z=IDPv*03!nT#NiGoaz^qOf@{$AyB<^KK_W{f@ z?qx<#_Eh3tX7px@fsWmPT~2`|1ZHNAdJ_5EJtz#hdAEU|J08*~cQpnz;LgLDH|P#R zKIHOczOb8l3Pf`6hh3z*v*F5WYYW|8D6h@Zfh%MAY+VPg%)0(hU?_nrv$m4A4qTaa zBhd(4Ni+QbST@3erqJC2 z%zlJ&g!r|}eGw(K0e23ekh>LXskPm%gtFW-(G!T;nh&l7EDgBn&`?gDuyD@ojXYu_kcX4i8Guq;za$_S9RM4ME4*Q|VB%Mq|XXr#{MT0Q|G3QbAc~3jsTt zwOg>`nJq*=v!~8r_8urUd+IsN-Xyfkm|YIJv!`Ch>^aa+_SB8YLeK=H%HW9Mmq5&N z#3J@+W;tRJdm6JGF$6tfmLnFiFJzXQkJzi2rN$!m24<--L_%Sf8jIKrRhB`GMeKW+ zrN$!mqs&rcaOBL2#v)K&_KZIPhQ_9!nj*`X**YW7D@WD;k@AC$pll=?^k18k_zkvUoWQqtf)^ zdGN2zRzbd|T+z^n3z3%~SMlMm(+&R_qYyv;CSW7>ZTQY1-Gj*r5?eO+F*>g15?eO+ z!r-0hm{1a1*4^EPll;s=ewRQ;0rz3~KH8d7eHQYzE3swWFTgU(mDsYbjxFoz*s|`k z7}S?6mrr;xmvwAeSI3rhb!=Jp0N7z(>)5icjxFmRfCt_Xa&>H3SI3rhb!=Hz$Ch<( zg<$X(Cbq0=V#~TFwyZm&EsEhcOl(=#k1d;>2RqMQA9@HKjo6RjyV)!F5*0S(Lfw=g zinzCE{w&-^D0g${IvktbNtoZ3yHb4L^RViGJ0HA)t^y|HmVh+uo`!tH9ff(F=DvW* zWxFkbaoj6l`swZ@Ovb4Dw<4?^ZY~BV!|e+WnQmKfj=7~BsKysK58Zo#$#FY?PgD2p zP8de_KDdHh_t)Uyx_5w^=MIMqdG6Q1H*+rqeRKCXWN6`@4?g)W0u@^=tri8Ske7Qn z{33eb@V(^R_rr|JY)LSx+>gTpFhsV~0&V2}BTNIyvYJbH-P~`(KcbQ=;dNaJuj@Wj z$Zkt`UAGy1A3T@Tknp;>?IWGhf-B*5T?w!29uu39@Vc&q*L6R~G!0wLZ5T}`cSd9| zYe;xqSBKZl*THPPKZmx(ASPeV^*#s{XQ3epX6t)8V6V76X{06Lhh*ED=*oTq&Tv-R=>(7|lI zPC}-G*?Qdt(7|lIJ_6`qwqB(GD_Sy`tydKepiv#n)*CKr*THPP(P2i`)WK}M2~whi z*&;69Cn(XuY`vLMqJ!Cb3&PuQ9Mi#Uz4N6+2eb8-gc-VC2eb7qk`f)v)~gM32Iye6 z-a0AK!EC*&!_@l`31;hU7C;BH^==R{9n99dIouJWaJ=9i*ob$V0G29XFk5e@K(;F2 zvEREVJd`$~S}|Ov_h5J}20l*}Fqp0PNcgE-Y!g%ggV}md3RJBM9%a2}!gN)OQ~`t8 zdM}6Rr~z+krCTjAyC2s z*D69syiFA>WZ5ZFwnG&#n61|-@+A7OQx(j{+URwQw8muHtqK^-)+>#$NB66Oui5~* zGD7FGN3~)wTko34SCD0&Dqt{M?^h9OX}>C9Fk5e1q$BDbg)HpREz;gGRls1j-Y$W@ zRRs)Y>)j`i1heHVYyNLIo=|R9+S_32F2Ibp-0Bj#_a*Q}0rw~PtDyTnHe5lMk6uIW z=iN9}C1`E#kTeFTi`Yl;-Hg_o;xefmah^J8ZSMHAOb|p6iVt3lz2xlG^jt)nj({3; z(AwNJa;}Kjr}?Cujha+);*uMDJqYzReH344VmZk3b#Y<(2d(uk3vf>8ptaumz*Jb44qEG7Er1SM>unCq z!?5X~wcgEv3jpY#wcZ^8`Yau^*1J!D84|SC+Y`7SCG!z_bfM)v9$;5>&|2?lDbYb| zz2^g6z)c6O^m3$A2d(w~CV&oF>wOyFj&HYwl=i+1a2D#Iwcd9D z8k7!N>-|Rn9kdo#)-2IMYrU`lI%usI6+j2A^|A%fL2ErP*c+p(gVuTl0_dQ%-YLP; z(S_p$3|i}Tkvi}gb7}qEgER?S6)HNs_( zDqzrBZ>#8`S`{#8t+!pE8dbocwcZ`UO%QjIDqzrBZ?`}*Q~`t5dJhUTUllNDt@lXq zZM42f6)vv5_2~9XJX@?6rBJshHuIaXl>RBPwn)T9*NxOFxd=ib(Y>|19rzf0%2cIDpNge|t_T9x}y6KcOT z-z>^~w8>EB85cA6=_XtotmgYb6w3Xe34OfV6RVAKzknyk?hG$r^vBP` zPlw%EXf5LY0(_d=1C+LV12B%epgs4P8^Iy!UWJ`t6E_c~8ScgK;+gJV;A3ucd}q1s zz%9$|4i4GwT|F@-mITDj8_4UCz*yAHX~h$2+MR4Rr%;}4?gjgtHou3I&{im?6VJ1* z1kH6NXs#w0)l+tbYehxaU32hDZMFnj)PxjJaBn*(F~!g7aUYFw^d9W>X~L33Rb zG&e8?TF+U=WjB_UbLarLWqs8dsJA7{-_+$Cew)}YnEmr7$U=u8C(_)9rL#Iq1WvQk zsT!Wy1xEDPf-Yc?^M+gol#}~kwv&&Qp1>D>mu)I~p=No#0lLFL#Cw@L&?xR@awW8H z^CJEl&mCS!3-}H-1FnSjb#-W8cNdg~LzE8f>*~p5$ z4(;1~JVn)^eVb2g3J)iteVb1vwI!i_n@^Ebf)%KS#kFWx3Vhl#__kYg7zz4zXs1O- zwxg@I=rj@8ko`4`tVL($BbG!3&VQLifq%kE^LdkR0tB}#rduYLmfeJll`8>)y|r}7 zt^^2nB|xyd6owaYB|xw%0fJo#5bO?1r#`J*2@vc(%)p24w=gNol>ou+SLjQ?O$`w2 zz30H~x8nxwLs5nV2=+c>UIz&Fz9Izz1n&i(X2{CO*IF$kK(MD2cMcLD*o#PB2MG3} za+|LM1bbNm=m5cj1&t7)76?0|a{$6}zbe1bb%)paTSZvjorq zg1z~2sjmYBd*=$E0|a}E)lev9LraXAw?c0Fb%0=Rl^O{FHe1alK(Mz(ag}o=K(IR( z`vLevln2~dnCL-Q0tCAfAlSVJ?keI+fM8bw1iJ^}eH>Q;1iKO-*p&dm?ix&<3|9gK zyAmMSy#UKomOCBF&2}X~uqy$AT?r8E{s?X6x^Pf_fMBmn;O`I%`(J#^8phSPY5i`M zwy6UIdwl~LD2v!l@hzm>x@l6m92U~%5+K+c5a6cB{S;GlwJQOF-EUxt3U3ae>mjdo zkXuSu0tCCXDh3Fi2~)_^0fHBz)C35Yoi_Ip(iF%pMgA17T@oPJdp5Ka`G|clzU3;2 zXG6Va$_86D%n~5j`(ua!AtUx%B&E1Kj-)KFT(D8hIpc*2@^av--D|KoDR(yx4s>l# zp%z>lqFw*4J4&+#VkJ=rcz2pLDuL`D=s>NsUZ?Od_{1!b*mE$))zii&z@@4`l5fcV z8+4=I7z*;Z)&2<3en%DPz>k} zC1@0%dspBM!VOC`&{yKDn*S8tmp|M(C)$@k+$!%0cPF1jZzK3)sCX|p_mwx5twi_5 zn&5TdpG(1CXBzqx_)i3ncP)!dtQoYS%B}Jph9>PIydn9N0dfH373v07q8U`1?~74U zZ6qEd1SmS1Ds`Eb+G=a0?lb?tc5t00ZReBXSsBJZgVW;F^_*+xg*aTB4FeOj7Q^)d z7LR`7FV2$*wHI0~W$*=czHIMD)Bt{x-e8fy{JD4O?Y#hBAn;>=_3$m07Q8VSzGW<5 zBIWA|m(ZS;30yc9C&SN;7;Vuw6%Uz6gagV`0QjhDi*WiqNR?pY5DOHk{!KHn$yj626|}`+&gCB+IINq7d-Iw){VjE!By;mun%1K{+>r zAB;7yr5f`AZ%SL`r@)^1q0N?0O98AznW=alir$rq{0$zfFT?j3gmkR5%1<>!V)LJ- z)QCVM4QL0avhRNdjqEtPyTjnI@stmo2r3Vl*&XFn-no+q^{~{Bgzf?~kn^3N>mVCO zh(n91g=8G(;vgK6ZlzXkm9>A5A--1Efz^M;;SwixYYv^%2jE#clU90L4$JZ;<9B9* zXX0o5cjWLzOZ>|A(!t`S?i7xyrm8nu=I5UvN1LRehvib!b1%F0giux*vISW6_)*&< zm`u9uC#3DsXiK-fPulK01*XELpUim$8kr5S?EFOt$@rTbKA<>tD&d*%+BxKO^BDkP zSij8~3ho~gTDr_q&j?rv?IvOuOT!i&(d}^IH0V|MhPT;PW(+uS_>y{}11Az4DfNlg zqKEu&bUsNX3T@ek-|i+pNGXp%1<967dBN)X`khZI?~5Sdcd647T;y;9tcrucQn!GuUg1~8Y44qI*ifsb%<9=3 zqNuwB*l##>F*;P+i;H|~y-RBH=OUF7^k{edD-XwyEj48n_ntWSb(f)Z2>bA&VYCBX zQ}@L$#2%u09q>c#k`Ir~EouAL3Z*C4q;a}~FRg@LXQjw*3>3dvp}sV^+Q&=gAJ7a4$!CpH;? zjsMGVHUhM6XY^KnOKSDIQmR)yl~O%L_GDFScmXt{)*Lf*v=e^R_Lnde1H?Ag&@^tI zf!{D6V98n@Q{E&ffdVcc3S_I909%%zbRA320howijskr0;Srt!Gf~=pqcr+3ai0?Z z1CtTZ7^}RQsnd^MWCTwag$C0hX(JCn#_CNddIGIf--L`i3mN{SWB%-|`e9^#X6CoZ zteK6>%gCh7ffc-k%wA^xhD__Z$b5;+0%m?h<`HBPx0?p5Ai_*E1+m3}nRSRi^D2Kg zg(mT13UFQH6{=2MC#tZ>G`UQXl{F$82ZDzGt6pud1EY~GQ55+%zi;c)y{G0NT1?ru z1?=}_vzgqsStEGNsWA=q(X}w1>v77cE<@30=;f%hO?jayKNqDVSsKFHc3Yn-P4UUC zeJ-ul@BFG}7*cLwVPO%}Z@VLaj`8rc*%VGmijfO{G;#%s)cBE?GZ{B>Gn3Jy_8D62 zB<1rKL>l%G%F5>ft~qRqb4>AQ*3L4O4abv+#@tTc*#B5#KRgAwT6N5@`NgnN+bt}_ zdWEc2^j1^RT&W!8E|a6&-Gt>hw?>Y0`Dei=<&oRvif6UJmdaiOO98Hv6W$gS_qqc! zRjpUNt$!5oI3D5Tzb2zqG$9|gLG6Pws+*$ha}ZfWXbKhUb?Fhhvg=eDc3)x#YHXs~ z6!8#o3^nPx7DLrlUzq~VjPW!VZgCN8(4aXGt-yzdC!WaQ&w()x6a0AKY3H)va)SO2 z$x2*rNN)h?QbWq^SRI8RQquK^y{ zAA+89g|33(m5*B5WFyR^dL+saH^!=INHA;)N^U|)`4y%r^?*T$7?6X;NRV{GnD>bh z2G423NRS3!zS-appnAo#2KY<}_`5;+&BaHMjKPs3ambW&QYkFJWP-y&`Opno?03MV ze5L_DBe1{#vd~;%0E(KpHU$`Acww9pHyS)UFxTMOfv*g{4wY95p1&Xnmp;yDn2&k3mYZBSCi-VFm_oHzDoD^*Nu|TZz#+uhWwRA$scYYOrODq{N!%l zrb#FH6U1u&23^w5Y?Y5?xPut=PT9nDmXpU_+4ODJ*l%D;s##u*Vf9hU0(ISs~!Ep=V*W{)oKW}j%9?cN`M;W*k2;BS}oFcOv{9YOD_j;xi3IYJ{c%&Zx&%OfdLs z1=rAZJ)bSICM_yqZ_;8m!>Q-)WZPDsiT|~`do+ur4MUcVX22*TpOTrWo;YamoxnWU zLneemNRFuK5=CzzXdSF@UrLwwl+$PPn!$564>N2q1>ZMlwmPexd_sHEC9a*9Xgm+a zR>c>l;9kw6!StWsU>FlW8S>Y#20mx_)4Ajr)e!$~J-(v1!84EfeZ$yaIeq#0EFV90;pDEVm(gz4j5``;$RRSh^> zBc8|NQ)uYTZWOECW7w2bA41Xcg~%L1rjD5}kePWdhME6+=g-KD+H9)Eb&J+oR2<2Q zYJyZNJI_=*51E>V)Dy|4{075=3kwEtvH=Iv=D`kwWv)wP+R?w4uS%^_vw_UD6N1BD2NLpiy*iF3IZxiD=xT$q9V4+;D+nqzAMbAqt3W5qcb|< zE^dPx?)txPL{#T2Pp9ai>39%Zl0DUMyNJnzFk-nc@6wP4X*lIGP( zhf;s+(3kjl5|80Tjo{4&i;>BQZ3vWMCpaR8cHS3(@je2wNzLbl+RM+~$30>oh`32z z3QFCi9)5{pLo^-EQFuUmDEFPYIfmeTaS38Ey?9HoMXi2&wWi<}6>fBlY$l}RekF7F zb#fytnj6+PHCoS(bYmJ@ill3eW+{@UP*YA|OGUhvY{fMfa@63x*tej49@!hun4YgpqTj#H+4Q3eOhur=z$I#i@SZ8ku7- zx77fiBD6=2C?meWSrvEc;#V}X&61lRCpfuUlPGQ(57o4~ue5mCJ&un6xpNHQ$o+$) zpj$Qa$HTt^r2`MeyWyd!-`YAgv6affLq1O_p^9u=rIOx6MnG~Nt0TsT+a?Q8jcHIUdU#jkN6KQp3C%~8sn>fw0OP+R3{^1 zobw~VHO|_fpe$hBIQ3CDgUHM`PFAefZUo$imj0p*G7pRG=SaF zAs4B8q&q$~nol7jgN=p*y2Yg`m+Yo77Eh5n)#BMrGaKV;ZnAjZ5D6j0q!5uGtZ)@J zamaY-Xn-8+4K#o~^pxdjJ=8P*Zjl>eMC_r>Ml_$&Wbv$Gyk`4VoNP3lUfLNAdUvDYILp-;z$P1I2`Cj8 zTl~+bLUBgpy(Js4*kCy9Yn>(IV9q)f9~@`O*RB?;6_#377{FToQFF0c_A(4>`AU@0 zw70%6TE`d>zX*RXL@2%47h$F(%w_~Tx%XQqChAA86zsZkK#bbMh07ynGKCe9c}pPEp<)H}@AC z`QFTeQcb$4L9taZ=YUb_Qn}s+oyM&N^6HN%D2xh0&gZP?bAo#Jr@HO z1-8C%DzH6CSd`eR;=@tO&fsv^G_+s8IGOQQZeB8$AGzwUQWh%moQ#j}4OZmC)pDef zPg%Dxz>izcF~HAVUoyZCU@ey-z)xa>5E$J&xAFY!HU1qu^S68m(PXcL}sJ<-Aovr z!>{g&%x;KHL}}sGTJaM7hqH?@!_abia4AMV{7$buabt`yB`iI0lfd2U z0ZUKZ9Ai&R0le1^R!loc1M15YD==l}68JX;Lk|BA)X$NJU`RphB#w)(F5#fMytvZR z{}@v~-G*E1P>j6MUtY`+a3zWvC~RL*%mMZz;M{JOjJwJkQ7<<2BE(OBDT(a2S-)$G4Q+jrC?t{tt{{KIf#wwu+J%@&lJAC0_z zyX1dsR`TGsf6$VD&*YOz+IVU`;b@A{*5XP_a;T<+1RStWzG=5g)7G7qZ`!YliF+UL z!TVY=%2yhZQetJ!)m#of#L$$cj)Im>cLtwqh~IPgt#bH!K~80&oKT4&;$}+fE#1Eh zY+kuE?% zYvRGdI%SCMPzsKuUhDJiP}9fIwRuz%$;qlV-=qThC?lV}UGmn=l>Y|LHuB#$X3J(O zg-$<@Bk7AIB{{!aE=?-$ZbOd)(3aGoH;Mz6VSN#8!L6cQOjt+Pmr0JU+X%Pp1NyJT zit|0d!%oEX`gKyL*NuyYEdcmU9$YMw@3(nyNo_q3>$WAin0YH377d#RWv1_vCwQ{8 zSu|kYd?-eJpCn(@Oc*e0_5!GdiKXefGf@_>UQu6Qy_IVh4cre)ky}(Ww-UDx13R#R zqFqwNy^Vhs&hFmn4tQj0$+cSFK^w5$d24?Viq36VM77x$K&Wb`Wkm~-QJb?dsaIlN zJbxqzYw;@Mo+&w=OT-EwN=D=-=Cg|?B4?eLHS7%92#VeXiscas4LgIjf?`yG;+zPD zhMiGcuTzF|`p?+}YTcr3EaDceY&jO^Z;eQ{XeHMxDYs}1pvH`sSou9&I@fhJRAEK< z*u)O2ywTuWq!FEjY4UwZpFd6F7i#%9_?eL`uEhGUMd1Asr$RSq(Oii-kCc&s+h0#j z^2HoI%o$!zA8s)^^0AlFrM>ZmSMTQ{+00b5?zf_u)Fp3hEDX}0-@7#ybk#J0^3s&Z=0%7hppE<$}F!Vk(YLEU+LV%?A#-bh@Fc&e631Xqj#2o9K9P~ zS-%KPOg-4#euiexT&8IDO!Y|?&y%;@{RTXOJRWK!%5Ajx=Mc{;A-Pr}aZNAlkFO=p zG;+Mfujj>KAHyHC4@LyWl%=a4XYu5`dVn0KfjZn1`$j4z$6+m!~!oEv-0sg2h|wU}Mawu6U;kytaW%%%rf(UDgA+-7W8g zD~yvXO+271I|`GuY;o?E1#azf!19sg9(k=RI|s156W&|Gk0fUhmUqJY{Eo%*t%u$q!S#Q%WuxqEwIn|veHj>KMG?$-H!1&Y&_Nb2 zdMr4>sc{uooiQSjm2v|pD|Ou?$(f}kP34n1`_ssxuThP(4Bdu-qp>gV3)GBr5vW0+ z-Feu2?~B0rv3yM8<2XD9RknZ;D#=OpH&98s9_QoZ4N)VQ=6paSnC@o=n6~`|2r&JP z2n?zRVF~gWaWZ1QM2u7Yx$&eL%yk2AZfplxu9p|8Fl16^^!kW!A}H#OER$4nw_(;n z`CcCpa_QaqLcn6UF;Y^T1z2ANM~B=9e{d0|Ie8TvBXBj2-D^AcK?w(j%nPpW=ju0( zgF^epF?ZnJy?`Gp`Ax$Cc6jE1a>3h|xtStrcs3o^+61-{3Z!=Qrl=^JQ^^%{TsxL4i5wt)m$vLxl@e2#g%9yA>`K{ zr{*LpVnAbD?o*5V3Iab~Gv(_7@4>evxAc!%EI-Q6wv?!F?i7n>%9YzoS+mY4HY&E+ zQQeXd1*E+V`3mNqGja~9w+jV9UMU4m&7cj+hkuY%y;*MSn&&po$jRQWnnb^xNyTu4 zHP@*=)@YHteG0Hzw;knk==79fGfl#MdOp}2L<@b60Xi%@S;%|Jj`0-DrVD55Q#HPf zBW97t4`cjd3HQK8b%{@A#6)hX&r!0=V8UVt@`6vfboyXy;9TY-pJPSG$w!hNxMYf} zM7I}qMyCDMkZW6^a{VKQTmuBj5(fpOP+qGgw&z&3&ESAl?kT+Prt!jSPE%69yCx70 z|5@Phs36MW2|*)=CrBz=#ggN!A6#euiy=KLtoL}m5`R!@J_J+iwLrC5g}@&Xa4yAH z?ZZ*hJx070GlzRou(ID{wpFIbgQ|TfNw@B7+wgATsy|1M)IxhF$09 zH!IGlqwmoy+gZ+i!TW)4B4=#%mX7}zfx0C|lAr2;u&FM0!(Ez;8#@HWaTfw#Gw>J!S2l1C2mXF^*nxjT468EYbp&|CH{x9cDy~N03j_{e z;70_0WFU#^-hnsF5oHJrSc^bA1l~emRHZdSz6Z`94{R@ByW(xSx{G0@2L>3x9>@(h zfIYAPX|$rUf);wAZj2G-zvyFjc1B%fk?piCoM({wz}-+HTX=jO0(CbSNug)h^s)%$ zR$3GCbND+_?pQ2NxeM;p+}L3$v=7-4Bb$;X&RnOXby;ulj6b$MW^}+ zE0UswU%$8eKyV(EW8uw~nD;mHhaJg;{Ep;7IieYk9@HJlLy}@WU_BgoMBv^yrI5pc zN97IP-_?-(wb5CDNsKbq1Ldo4^N;^v=o&-+V&rr7mz?spI-*6a{3(L)j>|5=P|(3 z=bIVe>GNg=c>3H5FI&TzL$ed-{SdDw&JW+O{5L;w<~~DS?L~|aVRIKwU!75h+^4B} zTIK2HO*d3~$-;F8@~=L^h(z#a8X$tV*nqs?*?0D<3e#t9b-ukYybng^98X5&46)sO z?j9rJ8{r}$D!lNMTYD$$W`*&caBY;TP(OHHF&chednQ_(zF|fvw;Cl!#JdGbCwG{& zBY8BwJwbi9oUp;-#k&>TSmmmpwKuxM!+Z?&>150yx5P8 zen5NZeCsH;VdN2c3p1s-5nZK6crS`VGU0u=QqQoYqbY!|m3{+GWOe=;1hQWD#LITw z6Gp{#zQ6~+d*x0w48I4pK%t6ta_cOfuVUQ`@n|oks=m#T+!WNkZUFVCEwyv_s%~KC zY#B704gXQ0a+gfZPeEtP6f_wu>PL#@^119o!t#;g9D!Hi?NmQfoGb8-H(^TR=b-a# z(%HOZ)SL%3`${V%i!#*W`5NKkKBUQ=VnnReuT3h|*Qq-(J&~;* zFkKOu5j5=N`WQ6@^hi(^ni>M?cKw4m3Sh_HUcruSbsIX;eN>Vx9O3X;9FwKEjaF%cmQ#IiFLLIzOrU-Wv*Se7liTS^qmtLeYJ}qN&?Z z{YE7J>Yt;S#AC|3ER>xM=(iYY_A`K6!RiwXklap*rnx4Hc{q|L_mlz5?cymi*1Y)} zJ$NmPAa2Pc*2ZvP7ePFpM?4jC4ldrPT#}c!3_%NnT!kSxO@FHh&Pvr?ES|GcuG#=H z-*&1Fde(55#Y?NtGT>k#Xf8g9HZryfsxs9lMblnwz{T55n`xFd_g5pQxZImh(o9_b zWi;&7XO#xMT9e%5$nWQTvL>?egUUw1i< zS;?O$kQe<)+pu=Kwejim*sW29eXccbnJfBGKN$e z0QWB~2L9`o*MPo$1Mo-TLZfe5@@Cju@KV`-XcwTr74+kHF`USoA-1*T%@EMp9>$BF zzHiBLy_IJy)qUI#!rgm#KO4wP7u_GlH2*womTSN24)~{*yd2(JxngPU&xC(zshVSJ zm)6P^7{9gTR{{@y(Fe*`0;imsV;5uN%PH3_XU)C>G;sg^NF6KZb&VVD2YhH}z+U-M za5Mh_oHl$z_|w+QpV0O>q>Nj)ms{`tjKYKJv9laG6A62D1!7ifX1wG2k_Q{);zZR9MQRdKBXD)c7s{iyl^A26!AY={BTS#7ifHZ<<=$gISdPK z*QYfZb%~x-w6}D1OnSewT?`>JO@8xC?NR3Yo+X@(d_UBL{G>G2l)`eARxz%lB{P&C zDj;Jb3-@xh(CS`BB(wMc12{M2c79$-n0!RjlrMD~>QgPDD%p~3Bu(SgTx*z@B)0k7`($frk-`wG?);)MD}3}cK=|0h09KcTACF&gVqL)^E|Sx-K!6To`Aq)K5NFT};Nb@pG2qA}apG`Q ztDz|Qp@#%sn1}xb*cs$t77X zcHTdu<)po+(SRP*%V+x{pxoX@{Sl~p7pR@;F%~bw z>Tm<3DQ6qNraaD4*rc(s(3JCyh)sD$W41LnS^QlR*SsmeY$Y99n1gFxH}ZG4OJ3Y; zL!bLH!dlS@O?tU;KKsdtIHo!%k&UVBbB#lCuqEeAS84GglEV!+NeG(PV2@_Pkh|N+ z*;;Fwvh;mn0BkfO8MIGDfX50cU{-4J?AOl=+%=ITZoh43vCXKZ|9&w*`mgkPttC0? zbz+l7D(o(*tBgpJR~sP7_lqPywrTP?`R=d2Et>qkX!7SH$?tBOe61yilqMHB#qxRa zH6y1S{msZZB-1ZwC4Q2)=DqN8GdZd*H*%>?I|HOTeGOo1?1r4Tx7VuPEt-5-H2H)` za(tn-;+nU!*Zh6`2_xr4rBXtZlZ7cdI12msnh%V8 z({{;+G$&8Iq}AHGUGjf68+tYO7+VesW(*m+s2bEf{ofg`UK)mL|44vP=Nrd(g$gEGFlUjkTP-NQ1z zy8n%Md37(9JEIei*sFV48DHIZ2dJ;^SwSxVymzfA>9rCL+|hEqWb4B9l68xXCmwyG zW<|J+jRSGF*aEzZug8At@DV&o$hCP0tgbL(JFG(m7^_-y`oPldWfi{-srXiZaGT+Xc?2|0_5QCIvN!%GQ=34N`BzIAUHrKRayz-rXu~5@ z`MC|w0vt?Cg`&#IZRkVC9XC;~sXL_&4>jDe&XKdb;s5eByoqj-rA`%6AO1vFU~g_S z5ixTN+p2&agS`9yz^=Qw4INCpLmu~kcqg=h(IO~6oWFo}((M-QE+OF)z;3V@bfXbo zOTv3BIz_?>AMK1HR<<48PiY!6{TQ^9S>EqZE89+*W#m$rGvV)@C6iilp=BsyD05B7CDX15ZtY6f>iISDZXtMw*KYG`u-h(2~TNF|`Yh*P3RHGSr-7#}TSvFY#bf@S0>X>{Hcr`}s=dzGa@RhA>znQ<#B-}Nl^ z>bazmdP`^v`VD2SKx~HS8HbbdTn4#RD&^hi{;W_QldVRn@48PCM)SG7UkB_#viRMXgS&Wzj8Wu;fKTY0{r7%~>=*6Ghwf$10Jni<|lVgm6A`mO6} zq~+;K^O{bdfQ(zbEQxrJh32QCG`2sg+?TcGDlC(98d&l}|^MbM(M6 z)TkR@pS4Cass_Ova3w3>Wf3Cf!S2;!E<^)p^CnZv5S|go7%%;qw( zB1xR1XSYR-R#N}pYE*;a*=a24d3Qw(?pM_ z5RybQT4SJ=enK?YgT~yQUxL^e`zehu?sQZ#9qPRbpD$z;%6cYa}m#AQy1}!DfopakWAe| zq9%Uf_eYF6gO6|99qWuZgO7hV1<{T;gOC4wJ%cHF)QJDWusVZ}|H`mBgOC5lusVZ} zJ1zlr1|N3?P-pP*m;mYwKJE#i&fwz-0n{0MJSl)WgO3*ppw8gqY4sLtTyCGIN# z)ERs{3ox#T|u&v2EgO9gy|AE}p8GL+4_Y(l> z3_jk~#YAAv;NyMV)d18Pe7vs!>I^*VkGW7_cV#*Ag!x&1Y$cn@|kZFmf z^Y4{U2NFA`Jk7P5c1NQVJ#;XJN^c2Rc1NQWE z#;XJN^bCg80egDpOk`Q%_}$Wn{f1CL2khy&^BAN9_Vhf7#eCqTPvXGR<_IuvNpqM3 z_Vj#mW^UD!shxoi#Y=i|6{S$Tq!;%iJK`n1co3UHT%(tixpy-9M=ZrH+L2hDnrBv> ziA=<)dFHZl2&z-_%;k)RQ*$=|r3eZa8MN3W0Lj!J@XRnMZjt?aSktnl?a(~_iQbjy zh3uFRQCV?|oSj&Sxi8xn?HS98TjZ>`Mb3&_9$toj6Q^>=a-3*LxdKq;e7;Nb1}qX?@{;NbnZ z4D9szSoeZ0@mMi9NWY1J6?`Fp`UDQX7C?Oh2j2^zK7oT@1W=#AK`g-x)F*I|5CvcEW4D<22BtC(I3IWt7aL_}@)F*IIC4l+_4h9RLK7oT;0T#CAr}CgKaS7_9 zK7oUg3D!q_0taIfBQc=VCvb4EVALmYFd?x381)GpOcsp#1P+c#JcHV+PvBs-VALmY zFfZ{fFzORHI9V|26F8_(P|npSaB!wz)F*IoUV`neK7oT30;o^m;8Gz|pTNPIL~n5Y zeFc322iFMTxD~gdBZKP%O1TyE2^`#%;D`?0HuMP`+@9bU@(Qx4xUbMkj`@}=w~r_UZ90;1$_bsuO=v+i`+K!2^@Tq zxD0vLyA|Aa2meky0o)mG1$_bs+XOn(t#}ey2fsc>)nc@S=;_e*63EZ;){-e&Pj3zgt0{z`-R+w$etoVg<%! zusX?x{}{ZmMpsFBTiuF}K@waq&^KkU@KR-=2>UvID`b}az)*Bh*har~*j-ryDi)L(C~A$C15Gg{MMZ*XsnRh^Tb zgp|RD3H!JlIj5vTrogJ%Sz{(6HK1W-0n}e_@KKD5)cV#kLOzdi zgs8vX;M*8GTmAJ0KMA1zdIQHJM*Z~$2?5k!Z%`tD`s)o!1yFyzL2GY!l%xK7gPjCW zf4xB$ZwadKeFgpX2E8PW<5tjLZ&2k?BvNh#{q+WeJW6|LvOh#1jAr`l4TgIAgQZHh zg8q7g;U33RXSag>dV|p(M{_r~;xufVgK>iEg`t0UvDr)pk3UG%PIiP z5U7t^L4Uo$EP?vE6+c0kf_dKUXsP~g#f;qno#M^G@Thhx=&v_e>U{`YjazX6SPIS* z&T8EX`s)oYlw9_9E9kE`xJ=q%U$??#o(%$xb}Q(wH(2LAhB_SLR*dIZTQATgw_+x7 zw+l4Gt+RdjcGSBS^w%4_FQqScE9kE`*y3>v zVrG#!=nKJ#zuw-6PNpcC;;+}gqG&w$OQw#%vn5x8$Ux+HE9YXZ{(Aj8i+DJeOr1m8 zYqvwoWm^69`ac!@QE2bMvu!K%?aKvv3QIXhKzVOG)L*Y(l6qU{Kftr));ujd@t|en z{x9ibR5dFOe6uH`d0j^w`1(UiS^<$vwZpR|nQFTJf)sEl%3bS71ZCG+ zZw^HR7uId4*@Kkeq=eO>Xiy?=gz8WfJ{Z|y>QFRj-PiUzy8ln`|&8q~S$Z*?ddjFgu=btoDf=yK6g zhoZrFm(^5I9`DI^jwq{%ysuiwU)O=p9Kr$jZqzn z28&(F;0mWq9Et`jT@J&nI26rJ!-VB#KZ78|vQscfy{tGC&5A?O>`mY(nf)B(MOkqu zntg$A9YLRK7#X2qds_5_@3gjsPYniYql+2hf`+3fk4+*)SE zp=cJ3?6h)9pGPr4uUJczlT5Y6QwABQhw{edv^Qwgp=hvMY!4wFmM7)fqNE*=l@7(S zgVDC}U}%i9c2*pUX2qdsRvn6#orbE%gAN|oyzC7k(08H;ZUrs@r#tbuESb6*SaT>U zTLDgXQWS6-5N^-0Bo0M`$KtOcoJ?__-IfEE8%rI-vICG6T^x!A&&FNMfyq=6o^4q( z?qwpwodOCp$4u#3&VlTcN;PS)lmFI+tbm8(~m$CYd{*;PC_>A$S47e*^4Q54r0!>!joH z;in(uCAMwgbw-9;$+=foTbvUmF z3D_eiZvyyt%yjNU>=E}*0MCRlxet?r!2r8X#YeM8x}q(gBl7TaARlEe$v=Zz>7$L@ zv0X@T6kfXBO-%ZCf=gMKKN0NrI9l^T-9{TR zv;QuV{ZxxDMYWl-kbSpfBPqHIR_+q)y~N`8YLWs1xy!|d5r$5%BoT(BBMTgT9?72v zt=d>HNP1l>d~K8bQQ>YW!>|qySqhZfdk2euwMhzc)W%y9mMnc@5iGsA@wW&(v1W&(v1W&(v1W&(v1W&(v1W&(v1W&(v1 z=5b)LaKd~zfdB7Km?tB*!U^*U0JeX^d;!=goG=q8oG=q8oG=skPn<9>Ksk>)#hWpi zHJ${sl6DfzVE!bS)op$f%tMW2ssThL>`=1Z;w%Ih%kGrev-7dp{6TNw*z-!DGDTc~ zyScl503h`V9#87kW2naw&(u%$<%5!^#b?>>QZzhyQseo4T@8su5b zx2bMU+1f}vZ^&T$e9(Vx@mY+tRT}U1&0^M@50Wu%zbq6CQysG~HAw%K#nrKWot7nU z2s_T6NWyF|4>{%h2?I&e`mp3`B zM@JBC4vhdPQz)>9u129Zvnl2n9*dIv+=l&8a9b((W@(&p*brlyav#0`1ocLKK!N<; z0{O#A-b%Xh5oW&klgR2F_SmCS0J>v#5TC0XnbQrxmHvsiO(cC2pc5R8mtc1b(Jxp* zk0Q*U+b{_oqYbi!1&#g-x^(t&kc>}A|0%#$&oaADnce)S0G`+h;AaHgr|}9PWq(29 zsQ|U?e-rx{z_JDZKnTC%(Y6PoD0C(Ja|~Q6jG61Sb6THi1m}XlX}5;kfSxXMTVaT0 zOpc%1@DbAQC{5VYC9fwu1NbR2*Gp2oK=?Jny=9|6^sj)0+g$|y3*a*MpPC&RdLz$} z(>i0(!p2TqKoaXYRCnS6lDLV%_WWv|d{K&`cviBKP6ym;fsZTXm;zYIfM6=8Fx2>% z1JLP6b%Er&E=5g9oemXDFGG(kHKunuwFidTktdCp+|FV~oyWAtc-}=ylgFjtP&sn` zh+y1#7P~fErKTbyu2Pj&$-cG~+u9qeRH~>7S;gGcGK}0{M?33$f5W(roD(I?)NuLt@B{UzVc>3v6Yir)K~+} zM++Vd;tZ@y24*n(fY}xk40$<_#~ZS*(_(QX&AArcKcD8d2=Ycl4l<x*8E{)Cqt2va2kfm0{U^ zF*J5z%Z$7R*`>YjPwybvmVLv>(JU|RZOun+V&s7u`LRW2=ONNN*k%8(M6P0s*ODQp zJVka|^&JX=jZAeb@q7S9*trsaai=48jV7`+=ue95XyX$@KzB!FS$)c z)+7><&s9ohy&&rGktoomsow93gyLQX(^A}--pJmq#@-}juK_a&f8UTj_dgglO_+@b zZ9v{{3KH6gi@%SOVuR)}Mr#@8F4B92G4XS;9>vc`D?0K0u`7*Vz#!;25V;$?g`lY( zXzhw}h)SlgFgrzpO%<`Wsbo96T_(1TK^LS4BiF=tBy`fdS0b$12x)2~BvczAJq^Vr zR2v~Zpf$p(jZoYwgRp5M6wgE_B}^Nk_*kYkZG_?nnB24xif_jDIbqre#k;UT(?%%1 z4#J%e3{0oE2@PE3^m>x-`@u&V$Yih03IqMxWU++W;>Ej2)R+gMzKY!ZXq zTTss9P6_vli7Qj-3T!zNe_$ok53u&@7{rkz!`HI9sdTy);Tu_7Y7HEMID9_=)PfyK zwlfU~FqYjZu@B{AvyOi%1$+3bi1GLcU{*VvDIqB_&T;-VB$z4$+l*kU5ctc9xrkve zgpe?)K#qSeF%Od`uZLkCmNen}XaIK)sdIjC9K_P_a~rbQ)s$Y!w0p=!1RrAtE?q;o zR^XkU#Wb`53s-h3yxQ;WQf|j0E;|)&?S~0?7r>U}bM~8(sk0g6@b>i**eIuh#IGP| z#RkX|piKF>E6e|iXyUQyV-}}a79oZhvXJDoo{;2uWV7UX>x%GovVDYhuH`dV3qnO( zVm_#liXP!I?2fCDYED#WY(;W6L>?(};*QBewRp0GSE2N>TCgJxFimRwFT_a$Oc#*$ zuhIaYSgG~o{uuXVFe){e0|Kc*o}gI`h_?pVW?ArL4p~U@OY+I{$Y#lj=dXx+$naEd zEtk5Kp4zu0-ub)!Lo0N|gwSU0JordhD&2c8l2+Wq6!rObI2DtDdz!UF*=E)pjj>!J zJ_C7Kh)Fj)7m~L^YCj2*pT##>ccp-r0hGo#(+aNzxqF$r8Er1LNxf)|ktb+Y8{(}o zR$3NwGz&>ilU-@cJhEBxyh*PUvhUsdh40FLX$zdK|IiR`7aHPzX^1Jvwjx6jc)%sj z9ou$IDgHfV!je6ax9dFY&O{C$g0|(GXx|=|?OO8psLQj6^3M=|*h`?=;RVD#jHq@u zP%a;LA3)^A#O%nlM_F3Tb@FqcbtUZ=q`=Iqqu*ANJM|wbawX(Xg)$R+6tQ0* zjWX}Yh|Bjy7}J5PRVj^)2kn`!<~b^haq=sE4VB^4c$gKlf|aR=9f^F(D-mA{f>!K+ zJVBuY9+k=x5AkCb^DK)Om__H9B)=2r_Dr5fhAn~Aq{QKuOp&pW$5(DnsvK@+JiY+x zKU8@<+DZE^Csoe(U5(JY)^|g+`Z62sA()>~gjT;+s(<|7@eU#KwWm~H`0l$|%c&)6 z`zYV{fl#VF#*kbMHeees05F=$>-%MWGaJ|A~H{%oHUqafDk79~sHveByhuG~XqYe*#=V#>*{h zY_H_!X59`*-{x50z6Vj8NeJwK4Mf{6MmZ6S;|_9EhryRmeljB4_BRUZQ0`zybVd6j zH{8yPTy`uce-Ef(}5zV0etMgM1;|0jHQtP;k35jjRo1xb2Ni((s-E zv=8Gt(>TKIE{fG#jp$ay^XE3O*~_JYy1Q(lS5V7x5t<$%T_<8;DVG-O>9WZ>Z3Zk& z)=PSP6W}h=X1zrsj(jICF=Jfz(Jz2IwR;aK@#_pmi?mMgeA}tcq7MKam2y~pt?FV{ zHSOi+1J-yh@;S~DP!dL40>rmF)8g3>PS*;^W8y)nFXbo0L6xb;!`XQVdM#1rGNv03 z(~918*<(5qyN)1sCrL;HtPCG$M0Rr5zY;fJaO^F?W!NB2*9M|G2#Ou1$-4i@*pDeV zDR7mMhtCjag8a}YBgquE3PmiX2aUIqyK-{q$@9XZ7o|h@C$X*~l?L>;eYO zZh^-H=MuDIIXzt%PTF(3;W3c3MfLI8hw(pkY%fF&V-OQ+10H|FU-7AU1Wx?Z?m&*b z5rBP&F#YqA4QSMOs-h?A(qde1)Uw4=WF2cUeP@ui*qg<)mni zS3IY_zOuzY;Oj#tV@DJ`C6dosiSLjV!n;=@<cv;$nqwM--%@x?PF^I*X}ssom$u4}iFwQeKeu5q=t`ll0|F*@$Cb{VHjfJ?5$@PB@td~L zT}Eh3R{YnU><&fJx_9wNrYOD16qAOu!*W+iIhF4t8o#~uA9qM`tia14`=B88dL(Zt z7nWTvDRz7hGiV=6HVR|w&i*Z@`~ZFP<*0=i(~v&RCjR7 ze~nOaF)2{FRZ7v?M`rx77Zi)l2DhO_>nUw*^pie=ZHIw{^cphELU&+59_^eRsg+ZF zVj-px2gL*=jbo941KB z0JReH@SPMGwG#7MyBG&%CFWJQwE#{}bJFwLxJM#4{f6)D=*|Y9-|)Sz?j(?{NORKj z`nV?o&~Nx&Ujg(RzE>rHe#7^66+pk?d;Q$gkmmk0Cp~X~@TOK`-XQlRlw;rUJ+tQW z{=iDgr01<;P$xa_T2@ylJ?}==mXlsb#3fT}0F|(($##ol5nwF4Q)17|$70gsNq>Bh z$bcTiW@yo#-0xb@xIQTZ3VmWdOAGWfB!kW@{KcJrG>Y#+6W`cCi0}V_ZzIm)&MeVs zgIeo=X*)y*Or;IgkMQ=&Uwd+3pAhY(PQOmryWjqxF%Gx;nip^KiP7Wt4)6RqNaXQ* zhj)Pl`Nh#&#b6@korhyH?;Zk8K7V-SjDK=0;`4ej5zEV&i2k2wdHFANZ$U4Ht876p zh8!0xF9{SZFBbqPSYC3vD_CA04nW5gEH61-7W8812ehCUb2`X$O#Q#Kyc~)QbWFkW zlDrixFS+t#Ox=Pwz95u9P7&p`fwUyLQI?Bm;=w;bp|8vm^9DqjB__KtZ;8q9f7%k0 zjcNKf4CeK3WFM1C*CMAI$t=h2ZNNt?G1)xEP%=eUqy{{rlUQ0}a#tXhm|i6+Q#6Xz z^UgH!o5cvT{e)%s2mmpfE}E&FcXqQy=1) zVbJ4VG`NR+srhDbqQ{R3|CgI@euyfz{0R?Ls-~=$6GYQ+c&hnk@J*s0MCrd^z8Q2) zPGgGyy!mD@DY=v>wqw2-z7c;Zjgdq1&G7AbAFes+Z?TkzQS;4kOMEUcYQ7nMA%L21 zhF=Sy=9}U70;u_B_=^B)z8S_6%s|aI!;}DOz8Pi&Q1i_&o7g458=;tQh7|&+`DWNd z$kco@tP()YH^adKsQG4CD}b7BhINTJ3RUyXFlxRTj!8V6;S4>EHI15Yh7%GW1Ec1f zVbpvxJSK4$PRP`JGmM&VhVv5t0!Ga@!>IXYSf8MrtNCUaHQx-+OR(KHrzf#pR|ufy zn_<*^GhCAxiXKt(&F~rl95vqzuM;Sx=9}S73C=%ez8T)0n2C0T!57Up!@Cmm09C5_ zX83?WFr=dSX8360Q;bj;MA3XRd^*8FYUZ2a^8zhY^Ud(p#KowknQw-lB$gu2dNtn+ z|DCuUI5Xc2w+UqCo8fPg&dfK%c#^r8`DPdh1S2b&Z-y=DtSN848MYBySbhSv*Z=9}Ry0*U!1M_K7j=+R)GqW96g$g@iAh=)H9qIV{$e145td9rk>$U0o2qpoF#yodWH)GP*cxv zkpODy8J-rSY^$kfcvftF=$NTzc%A@i>KU$xod!`*Q_pZs?0f)f>KR5&J;SJ}XBaj0 z4DXGxs%q*PMom4#Kgae#ZffcoMom4#sHtZdHT4Xmrk>$PF)nCo>KT3><7iS-&+ywA z1w&0e!=D6DQ_m2eLx53J&oCi?ntFyM0;s8HSSo;;dWNmNWhh5YJ;R*@P*cyai+41t zpr)Q-FG=I5sb^T_Q6y4o>KP95I5I*TCqo3n$fv1iIMk!CRjR3HINamdGgHrSw8xR( zO-((+ae^~b&+rI=%+xcSB9NJShBE{*Q_pagKz-HJGo0sLj+Qc0&+ruQP`oiztEp$W z)O#K{GxZG56wYeZ)HA$LaxqiS@G@zKebv-6Y!GO)ntF!oy!EKVA!_Owt`}&MntFz} z3p7JbJ;S@aFH!m&HT4Yd_u3(ynRmP@)*x+5^b zQ$>~dmrQlVQ|5!c3-m6iWa_Z_qpTz7e=4G%q-2W5W^Jn=3-b!}6fQLlCG%<;8kD4H zp^2}3c(z=br!~{i;Ft6*h-zXQTGj=xrtzS(_%UL3;EASFHUo_t4-PASn{lf;Au7w; z)!giamfRGUorxEdc<^EI*Tf%=3{d=D*lz|yN`6CBGL=9Nv}89#nr$_xw0`8boB~=- z5|H=DKQ%E8d&D^&#l$qMl3j+Hn1*ZOT!z%dG`u5DX-_-y(Xn*opQ?ZaNjXEQM|4VO_?v;Soi)9{XOnC?F|F%94Bj2V$8rr~?+AT==!w=k?G zrr{T)FcZ`M2+Gd7-b_qG*X5KdCZ=Ih!fIj~Momn^sEKLV%BASg#FW{oiD|f#%ke2D zreRmhhhI6vsEKJ9H8BmVT?(U`n1;K%lr%Ll4eMO?w3?WPQ4`bfK$i=vnwW;;T~<>~ zOv57tP!rQ|iU4Y28qSa-W;HPlj~75qOvAZy`;nNKh70A@SWQgB#V%zzZ(jO#ev1t&A%Zn18_B~!cPNx7ye=?Q4Vav@a{({N~v ztHuA)#5C;Sajk7;V!8;TU?!$#18cgAGUafRm7-Ao6$rQISP~P{@Ub{=u1Thzz*9_2 zx%t&GEISX`Nr;JQ_-yB$+vdjHeWVm0?5tmGH%v9cpX~iAJLFkSLRfqTXBuuW= zjb>Mh{w*OnAgcJ=hRw594lxZ$P_{BNU@?qH|tx(If7Q|u6@ z>d^@H=%(1+oT~Q>8+O8NcUEGm(y98%;=3Y#bz>^0dpTO3KO(@MxAKrApsIgc3zEZU zjUFiDur9*Gr;WK0JH+WeA%bO=R=zI$3_h`+2 zG5{7(>Z`s0D1%@j!NmakkG4G6Cb05v47`_y@22W0Q*ncezCQ`EB0+{3f#3UHlO5PRuwp1Lp{SvNw#8vk71n&ko=(0RhT7Yu{UWKc>vL3e& zMO5|Gg<$vVjkKndO5}Vr-dOtGaR%LFs1}yXhlN}=H0C0~?)NmyWigUeZMH~C|F1|( zfk(z&w?yK*{}KU6Fc&Fzjgi0S*jAMonEZ{`e`u?Q*Z8hjCG|s(X(S4qK%Vh*p z9RR+-4b{5kBS_#lIVfo~I*Owp$?q_W5dc#6+0MX$6?aMG(Ciygwt3=+U44^+3;r; z%2IwpBeV4!OR%ZH@0r-=*N8!3ADRC@ zBtPG=6Z;B3hiwD@yr;vhl1v0k1o(q2B=>(GGAw*;m~ISl6ckQewC7!T$y; zb~X4s2nC|IIJ(Dr^H;l0)!T->3)ne|jm@p*4A9r$nIF&tC(d@< z!(F~p>Ry`&u>$ z%?-_wM&BrNA4`Y&KN)jdq_+D2ROUW$yP`Gf0rwwZxv(iC%*b5KDH%g5cRE|7w^X3k z$cqYv9#<%|x12RRkS}x>X_2p3$Ugs3A?SK1cX@7u%{#_Bz7mCDtQrO4v$34QehQu6PwS&dKjrdIx&)I@A1F_YH<$!v_QekSZnql!jBh{CMqMSW0 zws;hp_WBOfofwzM;uB+##FV5;Ks*RAuMd{W^C~{RUCZ^~_FaqpTRNrPrfIoD(_iqjPfBIZoA7Bce=gQX-je-CC#W62o;y1>Ud> zAQ!a{Sp1I?$6HA-%~05&sw#`k+eR=D30bOaH`3m|`BI%d_k?h`mGP}c7^vNuEX1E%*%-g4#ZzF{HO6zwNKqbYgddlM2l%pHt_xQo$o3-lR)PQNZ-#oTdhHL6D zRr}&M`(di~CBbDG%zrap$1F08-WkH<*{F5ARKLY!S>O25Sw53I*UcM(*j4hL$_h%X zzSa)~y8Lt!?L$T4@^@XnFA2`sm!=Ypm&I_h)w4d$l$yQeFUqSlU%m8rqwYD#M62?| z^~jOCb3OOm_a3ZgN#`*Q@P)~q=1nS`F1i) zUdJo>%U>2gC>g?sF~ck1E8dq$>N%q1@d`pX#NeS~GW8Dt8Ge=@!JGQogd9}bHgaeK zmQe<8n6J>;j?txQ52yzr2zDj_jDEIO>TBiH{R@C9J$%OByzKRi&aMK_24zn4PQlFif4OQBvldDWoIq+}Z`8rxG1^52Lbm&TDjRfGJu z<4+^3szH8KHOSu*&tNdCYLNeh0IC|~e=UHj2KnC$psGRsF9N7)kRMAh162+3Qv#@J zke?AiRfGI&;tK5gR5i%25I|Lf{2oH4szH900IC|~4;DaGgZx?nR5i%2OI(fmsA`ZO zRSojTBo5BxRfGJfYLGu6aXK)n8stY+gZyI>ow21*)gV8r8syJQi~>eggZ!v!kYAsm zoU3Y(A5{(V&r7h~RW-<8A%Lm|`BBv%KYFvf-{fX@zsb$+ev_Ns{o50-pdFzgK-D1s zt^{A$DpfVee?TC7c&BQR|7hY&j8J?)r)rSj$6)gZsg&F+4ao8A5P$rz@#)v6lg zH@Vr}?~z=AI+$vZ-zQlHXuYZi`Au$i_s>ak6q;&~e_`?z@N&PZ2KkpH*-9H#HOOyr zv%BBqW_Q2I&F+5WW_OMf2IJc8syIsKvjeM1p=sQkiSR(RSoh_i&3^!HON0J_EEr*&neG8 zPXJX7@>j&Z!eXteLH-)~WU8t`epEHckE#awQPm*--WaQ@szH8KHOT*S?0#geszH8K zHOP;u2KiCdAU~=aPm^cHwOdJDWCy#?NH z?d^ziR5i%oNdQ$1^1FDiqYA1TXykU!5$p|edj z$Unt<2B#I(sv6`k^=g4L)gZsgE%5$@l8dPZ`IkvM?5nCleuF@xRW-<8=e0o{4pG%0 zf4xAHR5i%IU7#7N8sy*QO+f=GnDxyJrQ{{(HRn5pUjYwW2A^Vc(!D_M%sa`rP(v9a!On| zNx;!H_@}x)evdc@nCSZWRkCeRT_1l6}`uKOmDZX}{d@wQtsh8{I!@al{FL_Lgqqj*@t08qv;Sp{AODVNO!psa{P=HP%0i*>g3&X1M z<9|VlP&driBPbi@yvC33x|}IRU)%fvSx$H!0{4hJ!`0;mgIqXE^ z$M0(S@EG2YYW(<7jUT_-rA(^EkH5Q1fm4kizs_Z^tHzHX)%fubbh%!t#*aVVWi?gf z$3H><)%fwJ2%s82@FqwxP>mlyda1l0xm4bdUMlY|mhWhJjURud%TfJ5P2%xsa;Hk3TfVMc{v_@#A;!xP&&- z`1u^7U>ZN)0~@_mo^z)Z1y+j@ZqE@V8bAJH@xBNrQ}iz>8b93A>PVIig=`Q+^pcCXV)RVB5R$$KA}4z>h}`VA2*1SDS~mPjk49%bIkIMt@wiL%jh&U0a^AI|MuxgNJ7^%*n0giTkO`help zY?f}ROBue3;l8Qwna?_gt5dJnB77smwW&Xo=2nLHP0a+m?wvnjh8vyQ3`X4h*y4wz zwxTxf!wgSKC2A4g#PE#Nt<3XDj>b8uOL0o*{+00yQ-_e|1%~TW50K^`oEev==&!|n zyB_^>eySJaKVo04NKIw@=Zs&K>PH^FX5+4QDu)o^$C%n(4u(4PXDVOzVjURa1~IbU z;kH_Yao&Jg!l~@UR9|W;4@blu=is~EmoWxAd`ZHuWINhHn(b@NOxXV>MxHwyR0*1I zW8|m9MCP?k!kt9->U$}$^A_gwgV1+^uGo)~3j~o}-KCs~X2;wGEL>8}7JNt1HkhL& zc4ZDH2+N(%XSL=^eCM0l0P{3Fiy57y;R6_+FC}(9h~WhicDnk^XtK*j%Ad4$L6`97 zHe8RFvYlD~$u8?ZJAuzTN7Vu|MQ-PPiSS zluq|gDGo;qd=BBQ-as>$#IUw=aSy;*u-LIuG6u%J0`wz?Wswp*X~C05lEH^iF}djHNxV5 zK>Sr2A78nGDQ=Hs`a~YH{L~~ekFQ+K|6`~})9aA08VjfIu-@*tqLrXq8ZG`hBVzF} zuni(fe22xe__mGlyL@5sVptpMnAGjyGH@@h_SsDT%bKHf>HT<2b zDbwEN_E8Txc*Q@vl7Z9bawB7tff=jO*xzxk`+<9rS>LmmZOo}UnY}m8tNn&BK7;8$ zh)zX?i4OMb5S@L|Rl8nlR6%Db^jseW?ui0VL;$DjtXh;%CFAi0LyU2?7`WDeR)q*? zl?>1qP)au$n7fMDzg7ZR24_DJ_mgl(9mOX4G@~!-PP%JR)jJQ z&OzzTU58$v?&Mg?&?4w7ZZ@h~+3P5gWm)sM4$-)&lG<5#zCfVYp_bxEWV=ucXLh}gw)m3}e_0`(Ma~6wZX^{okH`>G?YhX~uRtoN zA1Bkb7ISZ*bDqPe`~Ft|HMI7Aa#SVpomQSLbTA45Q;E5bj4>!UqMeH9jAJS89`DuNNZC2d zlr-(#*w{JwbYtB9POs?^V%kX{-=ewB%GFDgm^?7h*DvKj$0UL;TZ4k{l?h-lBKa|W zu9F{lPQNr{ev(n#ri7eNcR-7@0_tv5qkl&Py0=1L7X+?GU?4qLWLqOphrnzG4n*L7 z1|}l#PX>-bpmPOU;bhC69XcEtTi5hjW$}MR{A7t2rLtZxS^P7IUs|9S+3M)@+G5y` zfxXcD{8)*xD~)wpWw2%@cZ{6F7w&b{xxB(`?_+TZWrDEFQ5 zJ^Q=P_k7R26WD8t|Cl!zga5+J`)86EJL`;n_IiKVM-$`EBr)zrCl#^%ToT*OJuG6o zOA^TIPcPG$$n*HIZs{$A&1YQvZU{MLDZTY1mUDoo^;rZw z43@w%nZUD{z%!V@vzNd#7gzI@9FD=r$uqVMPn@Ekuu%d;77q~FvY~;ayQ1aiUHox* z*|MvTZg~<1xaHjlco^*aTfV&YmLCtaOofke=O!|N57p4~x#?fKa=2-x<>TBUQ}-7f zV0s^c_p8O_Yj9?W7*;4fV^_sx!ONHWyuKJ*jLs#^}(4__&Zn6p+-VaE_ ztN`z(WA*BKjvr$MCeoB@Z8YL{bB$5*jQncEhfAlwZnA~Q{y-|J?RJ+c%Xp4U3DHBw z_i1DEwBrmV#zK}^X=gu(9nh+x~ zmopy;;SMa<{q?&M!Jm24cLOw&c_f7OiW;n!Qb`{T;a+{qaoMxSLbzwk;2krOk?K`l z(-B7c7ee--nz8pF{b2x%WrwS?9Jm32^9F*H8SMOr5nF-S`6m%LjKJhq5TMG3O3wcs z0x5%#^+yEmKw!$B5eWHK_R^SQMjOVb->Jxm3%*eSW}!{UV2s#?r5d53Ct|63^p_X` z)r)1!MWOu5at54vj;@FGu2Bk%-z+%dM>?Ga{{lN5g{7b}M!c-^S?FwPC4aAB%6@UZ zSJ?T+=z}_)wX_jYrUGJh?m-&}dZTV+n$BkecunSmnfAA_dVx9F81ZXI9U+)^X1lD^ zs5)4GJ)ia0QATX2OSN{MghEY0C|Vh!^wkklH5d~}iUn$u#^}X5n{|`X1vIhFix@1j#Tb}xD2C6ki++?92;E$@FJIPxS_Av+08x~N2uor-&*wrEF&>}GVt;v>RI%^feN zS1Iyb^XO=uE|+ttBeFdJ6t_aBtNvl)I|1AI5BZ)u8R%WUhFAHQ}C3!sK zsyf!1$!~a%oX=qUI5F_x-WVO2qs(BRuPEj7#R#WL&R9AH^<5yhp{!5^EYrp;b}VaS ze}#+{DwWI47&F+hEL=I3v3$|pI{_0^hkHZ0LFU}b%4XZWjT!6)7OvdD7++;6RdhCg zCMF`52kw|`*?;4Wao|bD$I&qVsJA+GpQfCucIfrqg;nFf-czuf`=3*l5u(3f5z4QJ z4AEb(2#t+KM1R2|lwS`CL&j~GHT!F4|8uIsYzT1)G2$~O{?Dn3=c5Qr^FQTOQq5H5y`U$vzDsraijp<~iHmEXGbgIudFL4De_%7dWgTE)rQwThhpY}cxp zh~QQ~o*g*YnrqdLHsD+fa0FyT+&KVpE@D|UKjY!A=8CvSK0km?5fZTyVG*&gCqMrH zY128P3iKHr@teNzgD@fh(}Q!e(Jg#I53UK#Axwz0oGuLE8;3h#T_9LCr}-J zMgnqANJJIz6+b5ciJ#k1@eUEO7@ft>bnJ>MI!8o|nh|8P_VNGRw7!ovQFMZagCy3zdE*c>uFsrAc;a0~Q09H4ZPzM}*sfK~Q*GC(ClUGAxmJ~+ zwtvdCiUpeOTE*1#Z*r}QK|8i<6-R8>Dn5Jv9@i>H3GolORxz~&T&tM!huW@HoELDd z;#k17iemxSDvkwQt2h>KyH>q`nF_d8RYJfAT&vn*?Z3~pifakDR`EQ{v0bY;Hs5xw z;;%>rT&p;?+;*+vSg!3_H4HIuHtkw<5n=(?Di$p}Y}YDoeb4u}R&ibhzjbM(Bq5gN zmTMI|Rk=kTo{=my9E8a97R7?ycCFecVQ*mA`&)r!k#4(IJtkpK;3?fS8f|!z z*s01bzQ8lm#JFTX0v=JlkkqP2)DUD~Sa?SAbU3;nP*_HyTTzTCQ49j`CHS#DqL?l$ zk0@pUwnr2T0NW#qXYl(xqQbhPZWbj{c_iC6it(s5-zdhRh=0I0Y6O@2TfR|C0Hl1Q zc%m)eC=Oe`Q4FDdqt+qV+&7B3o8=qD;UC}|br49xzENDA?Hk2(WBEp@dj6(w6eE@G z8^su7`$qBlx9%Io0?+o1;$hmpQ5>;-qd4-<_(m~KI((y;EdL9AqsF0IZjpeeBsyjn zQH;}yESL^#->BshG{*vES))MN14fxCb63fed7QRF&(qnN?T zrqI=w5bnpcW%)*ZiLhJnTb-nD6f32w^HL*_^lAA<4M3h-@LQdvZxri64)VW^2kRD0 zGhGf~_tY`1?S-;H1{YX~%*|Xt&Q3tvU`#gJ9-9XC9Nvpx+a%p~!u#BTT z8I?K(pqPxz~IvV&~%x=o$4>&YSC9__LsNz z`^lpm8YsjKJz_vW^nEbfZxZ19`XQp^nMu}$4x#UgS|QUAO{C;+5q>NU&z#_2O#w! znd;BSClHUy)DO6ZIvIS2+c?H!9J+q>IKzCHXLxAt3iRj^Zg^N0*ZZgp-pa)u`vR#( z*kn97BxkRa^3rhQ%uL3k!2}p~t8}3;uR(f$dBC>Sm&9c4HVqb!w`43Cj-wYgu;cZ__kjS9oH zX&iTCo%tR5FnGnfH3-XbXK?a*8C=LC%#*>3W+1ph24x>N%AlOuO)_{b!{!I3%crLc zi{s}xf^QI4oNgIAFGLdm;d@H3(2iKS7Q;&Cpt*2_#F4p7;O0dma3HeQHC?)qT!DC8HPE@WHxg;) zA|5X({p17U6 z6XIgDpvo7ECvN0;8`nCS|5&l-pdQ65n4qcPc05T1c#Y6$o&E=;ueQ_2;$*iFFzhwr z`N#oswG$+iey$I~7;=>1IjbStj=}qbG$c;)JZ2j;cihO6&Kmff&lBay{n(k?qW+N% z$Vgbh)F8OCCEQsY*%jl$`&0+iBqvmh`jRyy_ji$o#M*lnJ8JMbYjAPyrHnK6bFI$qgKm9p7sD`lCXu4jzyqN1X4KA1p$1l+DPhy zzzPlwMc_paj6q;>JOYyt_$30K?rzm2uU#Yzrx=1dvh^hCoF&K^t#TwX!^bSi@RT}o z=j&V^Gjc~5p6hk)R+KGtmX&q$)baW~=%{0#hAOt}2yLr+#_iu5+`<6Elcsa4k^7<} zSNgtr*6Cax)dzO2F=nq$KZbM*>y@`$0t><;I(w>1aXRy+t9xS^VvyBm6ec|mfo%v( z>V|;(D}L4_dGK6^mj)%xLf~c&EI{BR4lG4r$ruFIB2b0E=ruwO%HqbiV3{ZTkvn-O z9%Bl0w#9$9cjg&oF6?>1F{EQCrO?&zOxH!;#E^ca)0rLA==86U{!t)(%5yrMKdOex zL#cL_Mmo=+P!-}LePuQuz#E=9j`Z^#>8o^l=dp&7rPC!2;6*{RtxC6PpwR%@qJivT zjoIg@nn#4@jHxr3>HbO{of+`dfzZp|Pf+RJT{8RG4@tv-Ad& z;i&S{;%V}2e5a*ENCfP3rnk|$TFklpGv6_<0KBBC%K;?m>^=@K<$c5frp3}00E$xMBdnerwx)lFuKn=Gk~DQ(Ow-5%3D4|6k5y-VyE%P&xR!CC-Jbyp3ThS|Cw zJpwSliU!c;D3DDk9kqbRT&O|U0aVqgUnIb9b&|}c#EAZUDkfvC)HlpAeJz!4tyC}i z?*gECiBu)jD?rytwISwHp8xeyX2xW(-jnBIWoDrCm)amJGp3$kpaU|pQTOC>ts$5< z-4SOk(gE32GA2%m=7X}iJ2@`ZxtnD?fq0H{ITs5q`G~Vi~C8Hj}=W|jkeas zFNpxo6it*G_92(Tp(B^gkjnRAS-mkqs`YofSd*s8iY*hJJ##-2k@r(HGz(D%zxe2O@F0!{J(7c1BBAS#;qDfG2l zhC&WVO=p4hoqB76Y0Qj_=cW=O(#;7SAA-)DeM?5t!2x0cby4lLjNO)MFaS_{NH)6UH^qSRE-vBpVeo z@=3BcCopGc9RgTwskdWIZ%E~*n;}dm>vH#^+;&~A1jNy#)0vG(j&%JT)f$@goP$p? z|FIN!C|WhPoxxmUvf)|eDEfxZl@cVBUbHG1v&_*h_jNm}lUyJIZrl79DW90ACG?a2 znhWg3uq79Gode7Tj0DXECLl1bdD$Pr1%~MMEG{6&0f|@yjR9I0CP~iRR~CumwK%*D zi`T`D@LFcm$bsnMjY!|g9eM+SlN@*%ff0!aJdHpO2iQOQ00-_t;3*E=j=+#4EId~= z=L5uendh99fls%1X6lw$yX`+fPPSgVH9Ch?&nYTLDFfh63k=U?j_gaE*)4Rr8y%2W zI3ZEdMTX~YNA`Wr>=qTh>VW)}hTO)85mNal#<7# z)K&{EiG<%;tKbQPH$VUJtc+8zvW{Llo#%u-sTj9p546rd#qh*AKuVn;Erv7S0eQ0% zGNkfA5r(tck^ihSzeP>E9FTu-LWWfC;F>CQK2Ja;wlF-LSRYsGes)QBab zVj5<#q2+)Edy8>$9bG#FILWW7z5>{lco>0Sa^QLdI!r>~#|TX4Kq&&3abPn74{%@| z0-tbT1p>n+Bd`d8RS3-H%I6$KOk(MiDo`}%1sQm&XwGXg0K9!d_l8&Kj2e>0+jn&i zuhCx|IRQNRivwcFAUSAFiqMUkZOnRgR+zxG%?^f@Tbj{2pQm=Ml@Dx`tw|m@TSM^l zUL6b}CmAbYcot|N9?qQ>kSw0-=)jAP9NB>4BQ6nbc#0ixUkAgr7}U)U*uH~tz z6&^EP16tcYiAoB=G4dnm;Z4Iaa+suFc0H|B*6mV*nXL;#Pm_PR0kQ&+dhoAm5vB$| zV2Wv^N=3$;#G4s>>b_`P^9p{*Ok}q{6L?p#88j7E^XS>^Pca5H{4tMHiOX2aKF zoTZi4)UMVL=c!@hey?jb!g`#)4I1YXj8iW1PPxcGLv&p8@;_vlN1G25a#$|-&Y)3R zjiYBXqp`i)g?_1#_HYoX3Xi!47Yq5%CQ@Cet&-lL0kC10e`X&VfenJ(nEnnUk!U<@ zDgwNcMI7L@ycdCS&CC9fK|Y|{Yk}3lgM8CchV*(op^Mq;(Vt$ly7>q06x*rBPSf4I zmIK_)=Mfm!yzCF@=EuR^1V_M1n3IDR;@v#~Zj-75A zV_dl5$$u6F$_7H|L%UANXTmkqe5|uMl#ZfSxiUGZLJs*b2Y6*V&(K4jgTQQt{~^On z()HV`0fET_oe?z9kL^yWZOmF-%3h3-v^v%%j?Xl-Vgmco9R~+|8_{vi%m0v`?rYvt zEp3`{L#uJjtmh7gY2#}2k2$;AHa4?tcr13#*1J0uq*mwJ>2-}5XBa1B&P8(5$@^-< zGg#;HM)D)wf|g7NEPGV)I1MxbRd`Bugil_&fw7Lo_p8Bu_?9L}(vzh}$rUEbY_?Eg zMMCLSt3uCR8fZEyT%~}dro+5~(FmsGhtRnbj=J^)*9G?#iG27tfd*phFUm{(D~-*J zm?>@DVY7m??sQb9WR?dqK2*g|Tk-FVspqBvPw%CbTs!W~@?RU5{DC3us?nB>=3e5{ zrk*n`8_j*vmcTay<5qGF_sjS;AX3~rQxSiF_#pazj!&76_=B>AKOjCznus2f@t{CNHv@?WS>>pA(bB#gIf4y`N=91yJ@+z@k%_)z{U^&ytdfrcxLDtSjp&s9snI> z4Tk5q&bbwJPf$71sDV}Qp;sNvNKO5Oqmua=6dL@PZ*{tD(kRkh!WGN9$N+vhX(*`@LZ;gGOnCaMddgbnDGi_iUIVn2I6@-4-1Y_ zn(>%Me*A!$>b%X^jtkRx$$I>-q4MiIo<)wKrN|mFFGsB5d9HM1ueGubD|^gub@r3! z4>JHsP1LTEH3v+xVWbCc5Tyrh5T%zvhw7MH6bgXA4WhaHLghB{h02WLyj^nKubEd4 z+zcQ59;fmH=dgV2H!qx%M=)=Z$x(c=tNbwLJ1+mQ(ykmY=Uv7H#*g6y`OuZ|dG6eM zk=MpJj^}NNvXM%;T=Btk)C43MbAzw>@QH}(BzM_Z5V%?N6V3@dAX|W#T+ap8MJYbD zP@WgkcVst1%#D#f7^!=}rvS}+FrVM89Hm}W@;T@81GB*|nVNq^G!nj+W?V*Al{b&y z*WB?>LpVV`xEmLu$Ves@_FP@i79Ohmm{1cr3qpm2ixlnn2@bR>o&iRga zW3vTOr}h8=bX?JvC#5#H6t@vI8!H#Z8R$eho)_`GuWoOfY`>9HVl3eIXGbP+1-#2q zbIkoV=JQpmZt5x(Z)VhDFZcskS;RFA&(b6Sue0wMkLvE>RTyn&b1aIZ=mnc|7xs+6 z*`bGDSGV9EOi1KQ46!m8o}++ggYJC3p4ClV&ti&{O=;Y#6@V(0&KJyh0-k%aXBQgt zT}hbN9bw#Irk*I~!GT^Ii#%YZ9i9l~d^P7hPZA0!+7{O%jBRLLU-0@I_;N)Q^pq&Y zDoY^%_^)9GWX-?%f>#^i7W>f_neHE<*|vNV^=il$eXv$yBBnCrOCEzECPgFs^)(z6 zPk_mVe8b_+A{(d@@-2tEi*Ya!g?z{1=+Lem5QeoIk)fe$futd(jKqgt%B5X0G9mOR z7bh8+V%^{3GIOl^TO65h-QVJfeSd2qx@f-?I}4G2-Al1opf>xZ*qab({iWDHMt80c zeY6vX5N~qiKvUDZ36d=+Q?TqD>pHBua5yO-Nf8|IH=sj+L%!Y*9?;RqQJk+PN1+={u-h&|MzwQ)X(1oHF7(9aIpSeS}v6ZXlC9AgD_$2~EnnOFH0^R$-zc6tfuaAp1O4zjG%^j#Y)uqIU;=@(lzi( z@{$)I1MgqQbHFLCWeC%CVB|y9XF-@b4OO27;ovZy-XEjPaQWDeq~W^}#oHN}`5QOD z1gZt$fEh{<9_Xi*huIeYT{!#SF9==9kzj`V)}pyK!gUqoIX%D;x3~*WEgoG_oPHu5 zDVC(1gg&++DQ^RaB`G;a^m8~?lM3}O>M0ongId_Kau>HK?8&)@sGh>IX4^quB`2wHcVIa%LnUX7sSh5WgQ zI7HlHBc2^N*xH@uOWHtX_<#FO^F|CYau*(siv=9T)G!CLKNs;ZPsQK$xrk4=#NYL~ zh)^Km_uOe-0;7U;r}@VSw|=MjCFIz5nmJL zIkXPnnC`_mnwe-&5v@eNUMq_B~~e*!Pq zVs{m|r+f@~-*-=$YYE&_=6RT7-&5w;eEXjAK0pTUDRXSOeNUNVx%NHfH_$q`)ky4l z@d*flyudwW78g5A>k|;%`kwE(r_6a3t>04~3>UQLnuB0aah9Nk7wkg7Hr_2@);zxdQbUX zS?nV&#?#^G{`KgLvX_qJ5F<(ygJ85h@nhdpX1cKMDKi7G?`xd3vqe$sD$BCo_b;og9sz)LnNNy;3o*XneVW zd75=QnZrNecJftNZoZw&)!Da`nOdyd$*P{ec{`a=$-bS;cw*m9=2dU~b~1}D`*t!9 z)4rX|5&L#BNB)`H$&87P+sRCf|An`cKSa0O;uAb2sWFp?VoX-VFcOPt-%gH19`GMe z3Ca>ifyxsm32NU?X5RhRZYQ(kYj!(17pS0bCl?^sc{`cenrsT~^XujMF-2LolkY;< zE$+cn-cDxqQgvSH0g@`M+sO?Q^fwI3-DQo&LG-urVBLagCVIjQ*pK2k#WME5*$O0j>=0Y z<2W~biD|?;mG9xSoc7A^f{1kbqox;)iLOE4S5$JV>(1@n;|04=wgK^46ief z5z|NKzKPs->|7&enj`%$I=uv)$k6GZ13m)d8ZsOowT)dy1Z$m?}px zcKx-A-R>y1)++X?bAEQ(&TEr`whh^w5FNbd7Me4T{QR&REmC^QLM2AS770-ZB|2 zFwE^7eG}0EgQlU@Vn(sZixHLBP{Iqm6w#PJ>-L9Y4*9Lix{EPw`m1T2g!IdGI?wq~ zoqiG0AJXXsa%FjaaWa2KPvk)OFkq}PNxA?p-ivktBW9jX=f(R(repE$w5Ky)XZw-e z6GgdS#oSK7mjTVOl{IFYqlM8L6zM~MqSN=IiVT&`)^gOr=k_Qqt>uI7b#z45Uu1Q{ z7#29w9~L;%AMQ9PW^7k{hlPlg(#CnKK~mwJc#0q6Y+g2FMDS@kqrQ^qyiUe&K3k4Z z@8IN#Qe{T+S#jjsCQp%M4Mwaw-{z~(QS!lc$AM48Af*HEVurITK$Ln9D6gHWX*i!G zN2-%#UO9DiJKS+}%kvyiW@M>2d_p~Nbj!0C#VDt`Ee93vJi3*PIvsQgDk+GqDall5Wh$+T6(}Ox>7| zwfPwbyEChBD^|f3_TZ5kJ(*RseMz3g_u#>z&MxMljuBzhu~)|~W_a7qa9wb9HK?N} zEFmlzqK*a{VPTVy4;0fu)Z7Ly>VW@_n|~OpZG=f3!@{_biKysc*DwKKp*q?oIfA3@ zOfxxx!NU3*$q{i#X>YZN#T<+@Y$Lmwf$BO1s>AkRFnZlZ7eI|z1~e`L&=DbyqPRgo z9ea1c^oCeHY{N}=jWUPy;6S%Fvc2wjIB1;g``}pg zou{5#ik8KPw6PZeIH>d61oDUJd^vx^$JzseKOQ@nkBBuV_fVq>l!2R-HBi_n!c3mM zIMk!(0=9`jJE|9>0tv|xj9pW@UpGz8`shIW{1KrsfgW&lY@j8Mj=Q4N1e%UQd*@$S zY8tNYmD6zAKHfR(pxUtxYC@7Dxco$2JLZz39$h;}QB8tXJC7&P(K7Oq0s{zYU=qq0 zsz;Mm@%__!jFLD#Ma6MpJQh6;DmAT*F-rDe`d9>Dg^_VIGcyds3x~tSEY9FQ;s(UR zZrq_ceRM6}undVd$r1#GQdC0>lp4HTL5-#4DYaM&>$;1r?g-7!)i*s(akh zg204WD|)S3(F?f8U}!w1-ayiexZ@Wf&Fc6<&cUlV94n75Eyh2?s}~5^$SaZ&SfI&0 z7|%29j!G0ylqi&CCjzfk(h_GDwqiq6~eTB4W$%M368S7v! zU`FH6F+C*acjpKC${LE@I{uF+AAdvL!j3g~P5+j%Wi1hA z$*F818g9)vk2S)vYLQk3l#{@8HA9K6!6?xUWwdPTu8P|`l^%{bkkwHRXw)khC3@TK zfnhXT`aZfOYwzfO-{wo(FSx8?UD1lX`rCPq^&Ma*+T1BdB{{j%KpRRI{T{>!*e@(o z2J9Ch)^f7_pp8wOlKkA7sI|V-Hkdet#VJCa?FUh1yTAeg{4nzma;)qH|Fr_W`dp65;Ab~Z>Oiq8zOsE$yc(>wM zz*dce0WsP^A#BHB1aO!KdBu6Br@1Rfy9DDyc*`Znt}n1di43Tz7N67WCSmjnbPdcF zlXy2oE!so0yK~~XG}ce8dd~oj_i~VaZzO9j-6xm^Z6e}ocm?$ymRs$o7nCJEqP&6* zsnXxViUEPeWNeACy1+FCm}pCeGRT21s2)~E=iW?lkRdk7%kpfj!PYSVr=W(}Ne;d; z+%9VK@AGUpySBf^Il#v)md@5`Cl0n^pAHy^n_H(Xw$RRE3t_=5zrDrsI|Sn$OMG4q z&1pJW9r)XP!@?CTN4Q>7P0JQ8YCMY!#wzZx=O>)fBRlWu`pKUl;O#-iGd+YV=s6bSXF=*2l2sy z!JKK3UV2S4g9FTTNT33XnQPn1P~DC$tGLayw-$f-SDu+#^+ThzLXrTArEyU&u4$0tE96kS};ffE@(PA2Mg4 z#v>US6krCb66@TwB_;6jsU@R92}6SkV_2Y8*1H_XryR8`A*uRyYiHoWTpm}f%l`>wn0ZySR&Q) zn^uW4?L>$25?~HNL?2)ewu0HJw6`ehf0V0K*?+C&QfbI7rG4v^tJP_2On@|+0%5w; zl#6xLl&k3zLJjW@*3>B@mRy$+i%?}`IG;H|pj+xk5H3Tk+j}SAF1tE#>nO-19UI^r z&D03?f6#qqz<6B^(>|i30)yb_=zzE$6QKC94xTVhL4a%nEe7>-yrVtzlcm1Jrx0aF z2dg)TdaOp6$3XBmV-^tiiZvuzJOam7ifc$B{(d3fY!aq9n#C}uH{bnQ!X2|Bg}bFP z&1%kjq}Ky{9xN7;tXLK6St;B#E}bd^z|l0GH+@W$u6uy>Qu;!`wIPTl%yY62#Zl(l zNm{=1WWmiLpa)p`!UZbPsV`iJSvD@Rfl-61bYaWA?II@>SNT1AkN+??!hXu`s7-Fc zHZhHYlBgV}YiwoJPAp(*L0RMd$N|#6kVd?I!_TW1=4DKw@b=9;5{5Ubtf3Yf~Ya>GRfZhJvoZ=_ApHiLph3otmvv*MVS1&-l#TmPM0 zip72qpK7*V4u-|+g?GqVG{?~{mH^^25(lA2SZl;{8R=L@HoIw^+cNwzSHgs`;Wvny z!KMP6VM}s=Q*n<2mbbv<_QG8xmk|f&T+{pu42mZHc+T;EoWCGHZr$3IacfqsiYuCM z{>A5y9hslKI(LO{*j4D6QQ%v>Iy)yem;313vN5{=L3AG-UAqB6 z_!U_k|VgX{=42AIewX5BZ``nsizA7PD-cKVwZ2ssTV2*QB1u=Dy?#UfmW>-W==Svpk%`%n zwfT4q_$%<`ug&ABLPmCeejd*t4+kx--;lTA;#J&B1)85-uyI3P0Z*Fz3w13Yt3tF> znEMWHiaR4lXZZ^kXZ&Ogm2IgWN=31kO(-v?9HO{u}d$c$O;dy zT&y`|xI$d+dOXci4%#8peU2i0GFMbv*`|9Q2R;1o%g4$6{BwvO-%)5CEiJ7&oqQ>x zE_Ved%1Yf&ifuB~bn}4KgK^mpXf&e?Kile39Y*`Q~F8^rI4yQYELBx`@QPKil;& zJ#L7UkLix$CUH)znw<5!^d%zW#ltkBRupF3FS?63x}yZx@Moh`Bpo|RWhK@0jZu2Z z4tmva#h7B(L@E-A;_lg0rJCv-m|?jJhVs zIY$qCC+UQNgmjT2GLx&0(#<89l&q$+Vkusmi6uhayudCB6LQJOpQxg|bS~HVUHNAg zKZ^K~&yUP|Gf=EHkG?itai++mIj(6Y)fWqiAhb@@0m>A~^j&eo;tXn6N*ytf2fh@2 z3okq)zHy!3own9dnJH4}9#cf0qen^_#Ul^WGKCcxs-DlD{rnd370vMNq%rjcG`Ez# z-O||gqANtds`4amAcG&TTtw}wsh}d6I(n&p#leM>7w+1dnVOnZcwJIj25o4fEnxVy{y(uwvWcF9F^Ck)I;NLo)34RexG0qSy#M0fgZ3ibK@ z+)Eev8pzjlG9hUc{;iJxbOiZ)?@?3=y}eB&?gGtHe#MT$-|ZFI6qfQHJyGa8lFC$W zp5#Zt-m2uK*KM9CrtRKHont+zsiTr>IKy4xrbQy0V!f0nVv|!VZx*vT{ZoEW$2vM3 z1{B#RBEB3ymBM2uEs86o_4R%V_tM4`)I@nX^kspUu5MpX`(47DUXqkHiXtj#WA(AU z=R_{5`93})vl_V_Mc#}|CT(@$i&Y3b!;e+`I6+;TK(`!p=eYONx7$QhrWgaVq0k(9 z-{s>4Xb%?G1LK(2M7y>NpZ_4;?n|WC!b+)=mp%tfZ!dka4WIk;Qz-#%|0Wc;rV~26 zX)=Z7P$$<2b5lWC!lhM(H`B9*$f55x_~^;b0KKxL=@h-Tt%5!x*8ua>-ejuWR!^Uh z55GP-Orko~pM0%fM2K!js3S_|dvU=dPDD`W3cskTqNv6yDo2sMAt+Cmm!Ny}mVugo zUeZKQ8%>l`?-!%#Vo^&y>Zq!XYnVy>qv>LAS=!0N*_o-!g~y+9?cPP==9;ogX>}>} zXey-k6%nUT1HBR>s6U8#H09NQUS3{)^6<%fFf}>%3|o@A_Kc8diZ$Nb8h4g6TI&8v z9J(9TeK~6hC(wqRz0V;41XTRr4IG>kPfM!BWimOy!W$G=4i|HiPlR&-NH2dj%AY4y zk`w@Rsf46Hb=1u@7R)aZWOI29J!bf5nuxw;*o3`RUKU-FLOpyZGYZmA zCO>DbEZ&xZ*m4iNBH~VZd&Q30bsH# zQm9`ny-dPO$F{`MQ*Iyap%nVlwiL`k9R_pS?WL2&EJ9YTa z2k2$9ahIQJHdW9`Lp0EWdiqsI5u2aM{liQ@Ur5&!G>RBH)kf5v#ynE*(t<@7HS zoXSFc&lJ?qC$4HL&2OSFJ2Z+&>I6Q6DL}K^o66`n>+0#Ah}zGtILtFaTq`kur(7}R z3?06tntl@{e1DRS)wydhhriz9`BK5GJ`iO84&c{X_4JxH2 zDKs#a8jD3VG8tI$GTObq;&W;bf$$pnDw5VxSw!QzvMz;!ZdzDJ-xQ0w1HcvY`xLHk~6=TA4WRblEBEnA{>UD|B56bwi!U{2Y z;^ehEMa;y>sA-3|F1hGz*{NB_QZHScDynv5rKa92682QlsuX(E2Mj&cwKUChc**R8 zJE>j8GiCI3J_Z+mGMS@M<(=!YI?DtDOF4n*%^!XCedBR6?79MYSPYKbYn*d z0H7}UQp#%3^v$lJ-RRfbMa5?n+DOkCsOD>|5bZ7!(RaHB_oS=MoQDd3ktO;uy|in% zc;-}b>zc}<{G_Bc2k5EdYWj--1*yCQ46sp@iu1AFXN$e^7nAb9W-o0iT_BburKVRV ztf@)Pz8ku4rl^{;M8wa@+M7OM%ESxAqwf{EhIGwLN)vyo5xeM0(9f^8fK2v;y5hm& zAK4-*ga@m{ zE=a%6B}$WPGTx(xbzbU`cxvahQ_?owoJ{TOZf9B*7mKa5HD{UFEMf|i{d8Bj?-1C3 zSGp4NzlX@lOG-$(l#cr9SzY=?L@9l=9v!?XR77v~B-2$z70>2lQLhcJpkwQW*T0#L zwZ+QqE-s~CqGA7tq&akLQ7L^OL_@|p(Qk^#+&1YD^{$;XC->|w+FCzpHGWe+qz({fah+TNW)l+xKE%+pPOtb#pSkf24!pK+Z;?3}r*x|U0gLwX%x5oyypamQ9F5Z}%zXE%#AHLJI_OrO< z>UwOG-jE%^<;W=;3tfY|WR|-^(D%Oh+^@^{IktBH=5YjB0ls%r-_jUhtX_dl>tEmE z^R`@X@qf^6Kd{BuAq>ADdmW4k*u!Fz-s;95H6vG95&ljifW3{E1_0E8z5B*>D||T{ z^4BAVO?^v4fYWXO09A$D*rNpc+tQHWup3x50>D{89+om3AoN2F2ib+$dA=MrTc8#$ zU|SJdSPhz61RMqfhml6v6|(bI=d4}F#sc)iX=NzLUXi~l7wK$@XlADf^aX_&p*!bm zgg(^O97kJxA8an!RsQZp)2l>}qzy%>=(FAdC6}#7SnKI298~gWH$zO|$2orZ30{8; zCm6=8a4(}2spvr2r+TB}EOn@WCdUlIf^o|&??eXAN zy_6woiD;s1A-4ulTVUE~QafkYfN=L~5@L?<-X`$T5^hND9#rw0WoDS#1S-1%EmB>4 z(SS`M2mdb5#~v7>fwso3%ca6)m@R@0ZEP zN=nl!#n=Nh(MPjWXksGG#x|&W&AT*Mwf>nS2}amKBzmRyoSF-=s9y}?^XBNc$1hI-3$=S-q$ z4K%ox?tyvW5GB+Vil{C5dne@=&X55 zK%Zz6kSZk=m7QE`A@uO(&{g#L_Lg;0nTuC8sPzN1tVLQCJ=(HIhn3+;H6@K*Be<@@ zJT{hLeIcuFFKMN!tEgp1T6SXR_7+83nSwkAkekA4=`^bxavg#ORRzi4Vonaw@0>Hp z`KG&-MjkD8w4$J@=oRyCkK%TUZc%d5U6Y|CmleyMUr--gX}Q)_N@GAz*O#P-G-@;| zC^{CFqePkq6^wd93z?QeQ23!d&TOKMP4p2cxm`U>m*KNU)22G=!~q@`Yxq)|fF(i^ zYfZ5Vh$5N)4HR1$_!3)t8Td}8h6Dyu~pp{R%fomev<1Es`XvL@NWX1PGW?>xmvRc&$o(wcs6XWkD$YC znkdUhgS?cLvSh+&iq9c`4(t(Joit7rq|pE`t!TW-pFtgJv;9l5{X6^_*TWV->uVQ{ z9xis%Ebk)h7OQjV%;MU#{7LwHM5Viq+CkNWHrhFbHs(;5ij19L1Y$1rsjb8_vwAm- zRh_+JU4FbLbM++3@zSpiFWpxH4DE;h&M(c5TTBl@XHGr4mVIbE8@eIe~s-)=^9~EpMckitFehQzRCMyh&RQh?rgEucxg*mQzuv zYSgCmi7^-;G38dY@w;k6;^yvT1*QBeetMC*pVFExNZu(=oaLMCOOpvAPmF zN7|c@9{!|*?)-S{@ZRBZiMQqGrs?!&cr0&S3|kY6Q4{^TPE5La!j!QYo57<0OzTSN zNfTxFaPF4}gkL0!j9B^y_AOujeuZ)i&?#*LVxDlvuqO+9XYUeJy z5XWT`U=M@2ZKNqu6H+O>(f^JgR_1zf=^TGya^Z0r@1tZNRhYHM#9ZChYn#rTb*#PQ zTT(+Qb$l}|_-K|dLyG@IKTT*55vp^R!Hl~Ny+oPM zWZmha@GR&uyn)(PXHvI{as|O$+AMX?_tUB3+C}jmAr&sPU2~?qkPdAqowTEn?(ZyO z4~rwR9?nUk?xhDtOme_hmPs=o-DQ@-iiJJk0M{5(^eqF&sHbn&*S|0A3iQh^^^ksr zR#B;HWmkPyd4{W|ahiu+Cu4UO13M0zIHLf(OldET{3g9Gg{?`c8js!rl1PAGqKFJs zSme@0Cp>F`6zYUmfqN44E`ZVrYM{>bE6c?D6D282EGeLb6dDvux0cjm#~qC`1q$P1 z1yklGrytD9$`Ci_a*DgoP2>4oV;Rk?e&$wL@n&p?addHY;U40bgEth8=M-S2#=wRQh7ma65WL_VsZ&>s1uKfBzk|FXo#RcbZSaXo-Ee9fYT$iqcK!7I)$@>b!n&R zyRb@0S&7-r`P(W6ejmDN>E5&Ct^Gc8?v)HiMN&WiiZ;1o)p?z}$ql3!W(vtA>Cz?~ zCCF|`^k#Z8-8eLqg{@V)RIia=Y15;yQp~~60|h0e?LCOu_LpuP2y;i{=F}>&rZB-@ z$>rq~f47{rR3Cg~7HyUdhz~eN{ElAV49&iGEWRZw24G>T>9!JY2F`d&>2=eGGb}HC zTP%ma2L)VEpjl7fQd%e%j}60Iv z9zX_J9!DtDTjVShNBM|gO%r`sT$dr1P`kQH@-~(4q0olPN_xd;D%?w78er+yXBLQo z^fR^(^#D(cjeQRG&<#_?P31RaPMR=j(u9Np91fK70y5ei0AfYcRv(3xj-QuB^D1aR zBXl>O=@{7WX^U%uNpBk9)-}|pfktEWZ*6a^ItG-kqoDvzhRuJ1mu@oaYiLVO4K)!zXDVSraHtxFym|NA7IidG#@efqxCjDoDgdoo^2dcSZHO>YD*Z=mTZ zloTtCyD3zVLLFjhea_R=slJGgyBql=@;xb^Pjk&XQ(?oD1ITR0Rdn{oM^d+$A zeKxBl{M}WD3RHfMn~sD0u5!iF9xy$zO~@mnU#l{(iC$bm>nrFpqgov+)K|Ettx8Bu zO~@E|&s|wHRY12|C7Z}26=&Fzxlc5tLSdgo#O8EJ>wOZavm8BbY^3O%)Z_jiV~?hq zX>@1$E9v*e6*u{_pqx#U;O^tym&!u4m&t zy;lql7TQFcOV?&GQ?I3nYC5l;W{bv$z}VYYJjp8H-r{PUTs*|4)U7#UaOK9h+@*`t zJz4RfO$zg+#br)R8<~+g`8w)V%BKydw~Lf(U#Uz@pw6W=2}w{iMZ}Mj%3$5ynUR(R z#7mkLm$7stQ(dQe%m-^Bn|!B4|L19Q1@)@C2V@aFet%rTqoRApz7c8ILl-Xbq%E2v z#>|F{Jyy~{Tbt-pqv_QHu;G`|zLFIB1N6#Sjmv1OcN)OQqT(+rN0wvD0HrbdeP{|I zJb|7ot``{}uJNR1WG2w_NGjZm$-A_X_7yi}KqHM!rk-_A@24R+LGxcLc9&6Ss2k;A z8as+b?P5@`j}Bm#cv9{whOxDyNX)OSEEkoczld2~zMmQ{Eu{w|8y{Xp-6T&^qM#p+ z8F9nfoo|qgk++acbM9zh<%jr!zvz`flZF$-Lg~xWrJZE;2m>L5EM#*KI{?3=ScGaT(5L zLTah7^zgx?opE=&hW6M+w{0#RJ^c8&Q`F82>ezdjR)8(_i`|HWqQ;tpxC|<&`$E*P z%^{_K;dzn(BpPOC;l$BPyFx_tl{i%@9kDzMKRB&4o1XPE+mh&e)-8MPzMT928L+DU zFzdsjP(;d+brQ8TJsA!kcToSgyU<(T68OMX=Y&jz?0jG@I9 zdsk(#2!|k{m)k=WJ-he!=lRu^>kD^-dy9DB)LAk164_LdNU5O?XzFwEjG{_x1jJTZ zD~J4)kF8~Aj9zYA)%knDZaZJ#83}$I`GQ9)T&{Oh zBxIf0Q~>q*_#;9|Pi#Cs+Rh{X6A9n3i;w+DDnKk_Z@jFbjNT7Pq{^+}-5r|d?E|XT zvQBH#F0+xY)Eli*_n}=`BI>Z%BGN^aoNO+>Z<}khiSuwscBLb}%OwlSs$8SGKr%|b zR`fq>!MnyOeOq|lk6jOco9i<@5}hvLx<(|@MTz``%5`tS2V9YKQ`os5I9pHC`80L& zq#fn13%mLc9ex$Y1ZDHU8Q48qkB6$0*ieVond(8U|wzn3+kZ&w#%_R13C*j*s9VJwAXD@(sLz>z-WGwm>6#$6dd zO&XbyhN^SGIS(8|+(r6I?*YU+I4Fba zRqOI}E%yj4X#?GWBkG8R=%jdx#-ZJEAD;p*shtiJ_9*HfOKW4VeKecV!X*y!^C^Bz z=EthBTPdf4diq%M4=cqfE{v?~oAA9}Z<>0B$Rhm0& z;#>p=A@UE0cfZ!F__krb56@|LD6#P_@13j2m#Ml0PgTT?y}jGNV5bgQ-0% zIt>SRiAU0Y&K`T+M9w5yQ%~{LV%_-U{r>k)?o7&nN|;=JbD0=L%b>yk(tv6#O4AZj zGsGw)3MoG6NC|J0;IIfT26IR)_W6l0uiszN2tu=gp+B;C%Ai$V6m<#U%N@WPm+=z% z|8K^f7N?8OBcvaWJk}{94ixRF(<(lM+W4wonA3)tzAy_;ZfmJ)MOi}9 zn5|`L;FZf7U^;4~4%M`!qKsC1X>^k${UR{Hq<%O_hTSr$A9hSl5oK_|>zXR%5<5L) zU7SP(-ZJ>`(B_;q$uuCRC{-C0E8J3*mTdJE*x$;rFeY^HC8-HXqvv7kM?*`sljo|s z-3h62P%Lt&Pm_?0PCgQ{_M~~zMrRzyrZ)$!iau8umghLe;xe+ncd5SLf!kmtb{ql9 z>9#zO*%wo+g=al~vWf3aisrID=MfKQ{{6LgdJuTx=k7h-W1>a%;q*J50&L z2meNe<*uf^QzpPGJRRGvD7llCHX$6+vDU}Nl2@T4h0~Hm7MJ05UAY;$W4kinyylV` zKi$4vnw{v3D{+}5i|>}ECMDAi+f(QRcu8)~NrGc7m;4j8Yf7T1dRdKIR^q0wx2aL@ zA~njtY*V$BQ_971Z~N0r(~>7oWPWSX?{(&Ws-VK0G%CU#wn>>HLDhYPuN%Fzt(wjl zKB;Kai#V{1^wQ(oQs^ipCeev)iO5XJm6%Mg;kXG_xu{sWcDuK*M!Z7ry5N%clkGY5 z4RjXS&0CoHezgsgu!p27ELCo~V9ByeTcik}YB>xSYA?+_fZkQprh3}3y%a%s?3Q+= zuP<}->vlcZFz;9N$IDXa>X5`#`s^}i=kA76DOMYu`{g#D>|7n8b5Cx|Veh>_=Q8P* zZFTg9>YU_JEjxGeGM;0rbMJEJFrd4(mD0P^B;8S_0IOZbQ{PL0{|wOuk+7sd>*|F? zh4%H4mJT4y<1BC~nS-1l91ago(ZTd-yv=k9E^~#;9E&sX*lDBaq2h`qbi%AnP1@CO z4YclCOPa*KtV1K?aA03ZQ9j<5?Wc{t!z1Fyyam<=Au>pW?-7|WU%>L#l$1ITXGfXf z-{HsRQBD)}tfe(@D21_^^_tP=#T2l;Ss zh(#^bF&ci+%a((I<*^g#rbL$8U1Moo_3PuuQ2W@uu23w+A#~^m2$z3)SpssS*`!-C z1e3%LQ`S8u4r}Krt&M8clP?0h3|tRuiAT86hiP{iPoRm`k?bEtsg~EnoKzdf7}tu6 zn0*6j6*?Obq3E22e~_lZ!~c7>305T-a!bbGoXUUTN?4oLJh_4x4KIqrwM(y2^Bsfj zoaN*{%Drkd))V8G#AWR(g18rxO!T`vb*v1L89n(>4IKET0}pJYT~bzIbKbi&i@MfQ zZUZf8qC~iKZm)p%YBl`aGcu}ho25qsq+sPoFy4=)wbf#A)zhzv#rXf!({Mq5RXiu= zr}|T=OJf8KIQ&m^eRj*)3M_oE zN~F04L>`<|IIS$sLb@G?$^1hVe+`{ zMi{r-ncSr?oZZ3Yy)<>VxF>T>Y8ozXF)K;MA=wiK2H6$=dNhekZkU@Z4rbRpiu1K) zsc8wb?}3YHbouk5yFZyW!`2H%vmD1Voh$NX-*M&_gG&Sv*i1Ec&77RIIb9!GbWd4L zUMRdNbIX=eMD5AB^sZS!w-=|-Yi2Cf6gRy?VcvHWlH!x-37C%`DNcm@cWqixmb5-% z!*&Y}6@CVdVsDj5%Jn>V@@(a6ew-3P_Xw>>P8!LoLT7bQppF6_=KcujpeD~oUZ!~s zqb6o$avRjH@h_>VWd|0+sQ2KKKBM3UQ$~*&rTvp}_Fd_h7Pw7Z{c*IE{y345g z_w$QZ*u%yR1-^~>8&+i(6l@5n+_tc{$UB%v{9kcDv=wI1lKz!k3?ly^#=zv?`BP2) z@3`PV7|Ztb_9DfTiJd1cPq~o~gqJtE21Q|$7E3#D7O6DXtqql|{KEi|11G}Q#hS{5 z)cC4|vW%qU%$hR#ol$o`q~iV>c-%LMWfS%+%1tO^HQ6Ofjwe@Eeje{AB8$vv^I}shZi7sWZrAc6vGvBqNmt?u%j=F=Am&g}Zi@ zc;=TBk3&p&c{jZZCr*)Ap2}x(v=UdQU~zv0dz5IoV}cd_TG>J?zq8?FvpF#Xjw9;d zZ?@Nto+SqEKaYmy(1qAQxAVE;d$1GGkZO23@u|S_Is~k_hF+71xCdQ{Yrj*(ua37H3y= zG`NXyT=@WQA+kN90QWb2i<2J5C5q3Ft>?=O1=V8hNmwxAE2nO!UbU$O`zs4lnIE~> zDB;?fQ9gSKk9b)M4TvSLuaE{?!}Wp(R^Sjghj4!jchS6w>zD5;NaCZtaC#X>WQQS2 z-Ztt_fdf5ITuV=Zf##tfo%qx}MQoyHw!z6qTq`oJmA6ntkvNimtf~x#6kZg`z!xho z*=qOh)SGElEcH!H|0eyG^hL99m7-=&dg=j6X`=J_2;dKH(O9*p40u>Begj)OZpp>c zJ=;ajp{i^T{mJywkBS>k?@!HsrZPDxZQ>GtLaHApoD_#X{0axt(fc3AlAL!pb;>Ev z-~*Q7iS(RVQT5!4hbyn4pJD>jV4O%?OiOENU?Q9WQ{bZ%Zvu9GErln-{*9C?;53#& zskJmVF)crn9yIIA;6Jem2i+gh4Sf9hlG#`;`dv=v3GW;GDaMQA#Ja_Y;tu)C_&>No zG$b6#fV09FOuz!xGz<6Kz9SqTj${6nsGq=WZ4Q3Z7s4p9dRAZvz!)$n8Oe<@t zUm_pmeeOwHSLsR1o4YbIxh&%@ItUkAYJjiaW||}t_h!PK_PomyYBDM_%9G`(7cPMD ztY`B>CM3`nc<|zMigy@Z7lD~SD3!mX{}E=sdhMF*0^bV1FV{An{6EUc*RLL@G;zhP zTVdltT3irMcS-@~{0{S+ZCBnwSU^_!UNFqApZi6eUyQ#FH$mai9V0R`&oKtbjeK(E z&IRC6pc0W_;Rt-Sn?PS%z01l*Wn466LTcrtMUy;fSz@xlznU}Z_wI#vUwUDtNIxgi z>GwEB0YiY>BX5wZkBdmLJ2~~;6iG+@$11Y59<0 z-U9zwJ}C*SUvm_`0O!h5Vd$=#lP&6xmz5oZ z&6MUgP-H2HES&G|L1r`#dSKoyVzlrtE#o_(*xJeab?|-5^HO*U<@pXJ-z%aH zEMp*CPjJ6MU2u@=8q?J^F>2{MRj$#I7#tMzd0w~>;O=RAufTaBFIE9Iry?RDNxVrn zZmkfht^rY4mZ*sj68DDyf*=}tE$q5PpSX|sGuO&fEol9fslk5 zVw9p%Ns1&@cTN>l)uE_Vl7ghFs3C&^5};8)R3;T|;UW%=Ad09B4I&6mC=PAQ=d3uO zsMw$_ZQD-YyY^o1+NaJw3E1D)|NlSF&!ctTz3$p;+G~$z-U9_3LT}3rr<~aPrJ>gEoR0%CEKbo3 zYnCp@%p~_J24>G&)pE!Ik4O{l-g43`{0;=7diLylB&5GZ7#Gf3H4ov!R}scBL{%=r zs5Ymy<21>hb-#t`WBRX_n;yMCeY)j27`e7!k=K%Z2wDF>ylqXS_dfgWsO`oxo!++P zZh`h9?W{-7+UJam*G^C463S0+LMkl9*P5|MyQmdcIQQvUhL^a*Yo{;lT{UlEZ?m&^ z_S#j`vlrdEXzrrvRlT#9-@0hwysM0IJxUjYy!QI#a~EB_YVGVrq^#S%@g9_yty|WM-zu1W(dmD^Z5ZD~zhvRbyE2mzWY5VZMp`F*U{N$ zyD|H;-L`&U_A3rNrgg*r!b{oLzvfunM(Syu##iG%B!5Tm#_Teub|i)=^29 zcXlmKq}<-!)z#5n>+J4I>!qcYw#6MYe+nv12iK3R9Zk~d(do(I)ki0(eBp3(EJ;&c zFr^!&r-nDDlXyuyIXSp?7{73Y-+9`SuESra0{*2_W9c-8<>QY{lc^2qff8w=TqsdRYr z)Wl$V*7TY+!}6m`Nk^%B#fnm;(}RvmMZPCFG`__QNHs`Xy>&>hzKDA972--Gh!Z(_FRpVFTb zt;vSz$*B}Soh3ggH94H5lk3JNrVxr`axh&pxM5`dmUPNh&)Cpia*bc>T-niGuO*vc zDgrIPYL&_xUdN8}&@_?u9G;kj<3qzE8;9`*XK-YFGJMX+dhb`YjyCD2R@238wT`r_ zJ8fUl-M-w_cWsbXYx2RWN+{f8*A^TPXNM++5R6G{#QI|2iv9&iGPZGeV$J%o zO({;W@&Dn$WO`x*2gGaBp~3a*&l(&$$JI{PtRGxEnT!ukOb#PQ$IclUcIl1m5EtNe zX=TUCbY;C-OP5qSI*?my)5*b&!(Qg-Fru|!{(MPq{M_0!S|%M^vqsxOvL^3Kf+);s zpW}Y|ZO+m27aTYL_@j@Rb690~^_*pcQ=UHe*jLY)yJ2d2ba>I);ZY>}5Q_4x-$nQp zxw*$5J7@0NIdi*@o--F?%A&QS(6=g6dOq z(bX}tjiTO~QfGT2HcHm&+ak0ZZRu-?SIKO?zw+1P7mO3!LR8rwu+`Xzxy86iE z>Peq->k+rrKfESNQDkckZQFsQ=&B`yQ|bDV z4I@)Y#V2CBwp3=^O68Ws*z{DodV0f#E%Jd2d#WRp_IS95YYcn~A<43ScyJUZy2O@- zjhlu&T820sWTYuYj?aX0y#q;r?!U6L3+XNc?8?%L4nf_^@%8(uLEo*cN4k2M{^&YE zrd+L8OC4Q{JN$4h7Ri8SLkyB#6fbt)>z8{vGPJ>wQAh4*AY$o??(PyQpmUw-x}>(J zA1_DowfVvInE}(;IJn*q;^P>1WfVPUcz7JyfsDpDi4?*R?1xQ1(58dq!pTsio!uH^ z5c3YUFROPgM>yQ5=f?qbhfT;}U4vmb#Y-(_Aq874EZC=TaDxFI9u=a%gZIojcp@nF1J(yc6~tiJh37YWP(| zb`8leOgxTDnuw#4Ypc$#rA(XDy?hE&&$_|M)Iyt?QoZjcu3BATBUmT8Su(m|aPk~) zQ<%T~)LzAK)ZWqA(1a<7f)4dE2DdK*n~P&d&55fFpF52St~NZeVPter=0i6>*EK%Y z*CaHVB&BNCLFF?ye;~r^@v?1j%FiMgWH6~tvg>1MxgINqG{Nt2$SC9A)1_yR;Rh)( z+K-N7`kq>oxPij|@IvZ-xgfzpK{9x3d`hNrrh2-7N=?WcM+}5!Y(=kTr!I4-$mQ~%A?ApP} z5dAuQ$sAc<*@2EWiPa>gG02(VT1S>amftJedR*nw;ONMZwV^nivED5uY~=Ry&{QJB zj=bE}iM1g0y%%AE;xbYO>6|zblnkvKhB!actsWcod0h8vFTduRkTHGOjaoSyGksz) zh5+YOru|*hr^yh8QXfz4GHyze)fesvP7H5A^II%u4E$k8IcEfeET-Dmi-Eezo=VoZ z(b(0^&jOMyxDC8!%)R$cHla`YM9eH8Wim!)4v!9vxd|Yby?$|=j$noCRKV(Na-(lD zO*5_LMtmD07O&{`LCKrvR){_~meorM7UvU#Q)7OqB`GCKY^O9MI=hl~^FXp@WCHVt zU$n|C1}q0;nK9w|lUr)&yd5U1@u`Vum1}v~(be8oN^pI38nY$mB3mhh;iN-;>1D;( z*tpCQ80oPMK@erxIE|*1sy zcVt_&Qikui|%R$>`{iUo~LIJ%|ms=+U)wMiORF>?`Cm?g^P; z=!kAls9ix=Tq7@+VS}x)xV;^*#M&GCe0{r*RvVq(km40lW?_OU+5O_OTb(&|*yt@; z(Y920CWbdA!yE9mOVQCGKaf;)2^Y4devX#Wa_!W*#J_z?1aNmj^La=)5`MS2GyL+=pR!lQowdY#>?D!!XjrBFq}rJKe5N zyeKfl2C!wdS}9%T)*FfZD0Pa>q|MH3g_Z8dmsawSqp}1$=O?p);h7|S-HOC@xX@RMpO`a7p}8N72=bamG{m-Na>Km|J@Hq+oHY`taF zkV_@-#dTs`4r0i{3~VEm3>LNaQo5wATI7)NhDB|^_$bngjnK^64FVx?VZsd z{MH9+7&r3C&Iyw`mf=X2QQ2I?jpmQu5*&DqPGU!#y6iEJ{Z!(%)d;E|>vbZKq~qR& z+rY2|#Bs;;=@x?`=>WurLF6}PK`aBNvUxW$E2(?i!Gz8C3U)RHCYylDw}2Q#%7 z2&3Fr;v}N`;*rtRjmwC;`&oOG(WFD`CK7j^HpkYm7!0wXm1EIVMoK@xPBLz;7ph1X z(6Du$w{C31@I3UIwe#e>?JP|9>*lphoYTIz-TihyZdXnWPHd5X79jlO{mjzb`A3~} z)N#i-_P~=!%sP^_8)Si!`Xy5)*)>|Sud$JTrJig0!!4YHP0N}S{kx`FWovMe-6J`< zNgBZ&Vc|S?N)H0O>{-{elDRozCID>8TUgVCmojKx@>_0KS&0G>&D`mP) z{y=KUVzGA%eqa!*y7VlZ2yx(cUS$W%>=F?(pPMin9Thp)O&6r|{aG!#m)l0@*`gC7 z>ERCh<;;J|H=%@U2WQOM%i@vD2@_x3Dsy>9N2zTEjz$t`Ew@!V=4d3a1g+Y>yq03c zg=4Ai6)7g8;f)>W@6*^gZ1VdvznEm=CW9L>%MQvxnDF{NYr&3lRcCD(j;3ULENZ%> zKXeTta#I)(E!>$ts*6E))FJD zvJofGKBXg*!a)|_MfiZprl;LjHr%%-@(K zCMJ`~b5ab5XRXJ{Le6|FE4ZVHKEb)Id)d|Ay&{aRG8DR{qd%O;oIz)TqA&Yq&U#|n zlFk(!{xBa$`P>7vEt8JDZfx4m8yPw7uqe|f@mgigP=dwvAjUSCn%&5!%>v9McpT#&$NI-{KF3zIE$_f0a(MGNHdUUqvKpPF=&a@f;gn#u zPMvW$&gCJaj(1qjx&?WO@9eU}RXA#=+1MOng^4XPlSCRv8hmjb@9nUR)fZeLKi#fh z#xtwJGdx-AVHJlN7OzTY9wWH9Ojj=s`w7&&!}Nm$21#B1RN$U zZSL)d9D4Xomt>{%g&htJK7plc)jE1=x-^o*0-1^Bymn$3$*k+hp{eyrJR|yJh)wHo za)bE=d+`mrGQ|!(teJHxV5b~(SW9(Za;N3FEXia6*; zGlk7nVGuay=zg)_XoGrqwcJg^?i@@0Zzwo z=ssg?>t5d3;TJZcg=8Jhtnb7NUjMrGXg$mGc_21Uh5L2w@1q$@r(2YfBOK3Yn6;q7OAC`4sWj)U%@apJYl^-Jdu@k zCOmGdJQ?+9XY}MSHX&nZl0@uw(}75kjy5^D%-^Ii+1%ynpy~uLqS)LA4`tbex0g$2 zylX_Sn_4%vIsF&!sUl}Utm~T3n?Ij&8edrm=kEP>9tUp@NjU!IOuvG8^dS|KK9pA5B=d&Ht@#}{t#?TPh z)Z@|-4rkm7(Y=7*Fz!!YIGo7YK5H7N)i?l#^48{6iacaQ1Ig zCUI7kVEL1-YU`}wnuQ!A`ZLcU+(ien-B^o|h#0J1MzDZLp*Y(%ZTHCTp}4f3vo>*U6i!jcrT=7M<&xXIGCTFz-i_5xU_)l z6nZpmLXL*Z@-}AD{c48X2SHqMzeVptIgR>8(61-zm5S{C!wBxTH=2=kyrIE6ppLX1 zo%~c;`eia3X^ps4sx_ZiT<>aC-5f|I3}+#c-AMut8gc6GI^8Iyr}3m?31*QM-5ot0 z2(h@U$%5^+grPv*N$WKGVv=l9vW5<$1N)(kdGA)D_PzwYJsVU>7HsNz{Oui9@z$2wI{je* z;*yL_VfpGZ!kU0%0J2al5KG2JSL4_p8zr={>+#ybulSYY?HhTcb|8=_trRj+u+`R$W_zhWlJiI(^w10X_TyW{n{(rM`u`o>!#hf=GfU$ z)jJUoF(cfPsE~x2BQwd&5FuAag70heGK{N-xfKz>j4?8b+!*oek#L1+(}Y~c!l7w8 zeY_h!PfT>MbS_GdM9-7aAKOv?G7l}{gCV)%1EIG<-ThU+(e(|;H{TolJf=3+E1j}V z%NUG&bU#1flM@RB6<|r~aCHIoE-eSM&ukFH>r5zQym?W=~@p=VDiwAOD)R{1u zpx0p##(W~}iU8p>d8KtSc)A7Cx%etAmhA~T6W|b4M)_*T%C^$7Zmh&DRWXpD>8ywa z6vmbHTuX>Jc9Kq9?eRybLe<5-d$pE|yPaJfxLzU`jIjI7o_OILDl^>au(@Jvt*y^R zoXt$;g*G)e6>?1Kx^%|aLG&{n1(iEYr72JKWTnKzkx98@D%PNv`HiTqb$nP$m@oBW znmV0ruEm{8<*p^JgDgucxGvqj(tRq!3&wCi0;ZC5z-|SAMRPW^tJlL;S)BQWg&HI9rs74V?=yxbiH3E&gic)=qz4_leV^%xW15SKa3nR=LJ7V$%t5Lt5#Qa zR~BdavFP&bk^$(ddILePIb_|>gmy*eN?kzd44Th6Id+?|mO;XH;-sxtGHqb- z?-XbgceSm=0Olt}Z^nXTWPIbXjwhSbE8E(!ancdq_lJ(Mwp~c%QOx9il$jjD?F`Hx zPEav8>7g4UKjbZ05EGQ@eW#2iDC*sJ46c1V}ix(&e#jz^#Kv$S1s zrsJ73)_KKddJCR(tc){AYPneH=BV6?UZyO`cT;`L(V2=ksCF;lLrk3v$3c5$w0?HH zK{iy|(B+a*EYabyIF8AGLca5X5nbMP`EHw?7i}{FZq21lgIJ|x1)thh#nm6_$2iiK zJr_2rQ`o)DOpp~=r{I3MoLpn@bw41L;zgXBM)0yTya@|yR~%OO!xWz*g@Mr9+1by+ zGQwZn#30b!eQK7&CAs90-$D5UPrsaSU$e;e=$(y;n$SL%u&R_rWi~Q$G9b5;@O_A7 zZL&+oyn(eDcHcY=l1pE*g-qAT1s1967HG&1S8%Vj+V|8iOZSt0lHpCf@28mrDYc~9QOR~4T&Ei9On`o3_4Nz(yMrOcZ+yiA8Yev ztdY}E?c44pz4(R1wi@|egZQ2umHZkF0h148)x$ZIiv>M~nz=3quXg#iN~NvWCAnN% zbJA@Gp*vDtWy@z;36XZJu{(~eTm@5rys@?v&hla~XvYhtc22gd=OZq7YZAtW@D&ER zJB^H-9F@yyGV70R!nV#hv5HOnP=_%bEn2JeBCEW??EUicSg%@X>+utQt0VuWE6jEH zW=5)gTs8>$hS{x{C*51j%&THEYBjdx`dSRxH6b@8-ItfVfpW@VtRv%o$1x*{GVx;a zaUsj>{H0B3Iq&ZmWk>c~L)mG2e6!BOIsuOk;u@o#h4=|tl=|0-WM~!cNZIXKUb`IWY$nCX6PR9Kk zj^*`~Ts~dy%#r=xj8ELcHUF!p5<6IfjUpynL`_;EbC*osKw=H5m$A`$Ba?%Z zLn9+NtU?M*jk$vKPTVP)nm}isnmC#~IJd_9D1ii3X2P+}judXHfo{nm->B4t$-nc| zuL@?lkxH^4mH|zU!(>4$l{Lq8qvhqvfay<%B=y4y3|5$HY$N6NP;MX>b|?^ zVXQxMbS`<3lbYqKpmT8$?96{#skxo)9 z>K2ei$Z@`oj*BjTx}ZwY16Gg8tm%I#(QW^*7Cv6`TQ0A;<4o6PZrLslN(sZDA~#D< zso!;f&8-a=B6P{EEg&xkarYQ2IO)l2R=dN8>?JguExXo6>liP$O!5JiVc`S+CQr6F z%iPNyKki8CT3yfLKd5x4GJRnbTwpJ7_^L+kZtUFD6r;c2%)w|e1q;5QXU!O{U;Cql z9k?obk9K-zRK)SE3}o`fR_q!S$)UdRPfe_z_5q26;_{{1p16&;A1fofG(?PtwogTy z!5;@<73p7*`IiYY-pO@yyi37STlS9Xn4XZOZT{=j7+SEsz~!JpX-3f;87YnIu43-+ zQ&YA>4y-{e@=2u&-vpdocQh6Oc+IOf3S{Eo-HZ)5aT!5>tP+zkjz7n zJLNnYM-&>{RC=DUcj3(vX4(?In2Tw1C2pz7D@}Q2o8@*_Uh&n6@J$K0zGND!UVKwc z>YLqSftS@TU*=iK0AzI)SU7nOb}kcGP2n3HBb%KcD#d?E)HNu-3yuimNYYEuFRElo zK5t}_#g#j`wu3`0^mE_qN~o(LLRENCb_fG_NxXU+P!<$y{)~;B* z7#E0fOzOXwGb%}d&WQhcsV=8w0~eY>Gc#i%TSen3=2!^P4<~W^1%XEvVOa6mi7VAe z#-PHD78(DfL%KA=YghMPas&a8+X|8czI7Vzx_2hcGUVFWsZ4e-_-2q7@G~Q2Jt!|V zQ(a=5?eW=AqmiBZ%~PfgvFRLjx8sHp{q?w-eHLoCoX1LLQku|PgNhyQ`willh*>PH zuP?eWR1DdGE6p)FgxSJhx8=27tjW=Xm59`FcXL&M{+`J?X-xl-Te4-PuNz$8^WObz znE&F2j2+mIPq@I3jSu1yPcpO-Z!I>vGdCpc2He0wVZ*qS>Sg15pdgOpnvMHX_~i6i zIsmO3JX*NLnQ8o^-ncs~RwgSKAJ;B}uztr@jdI@{aUSA@Il7>Z=IbzN;GUsewK~h$ z>#uG)Zg~wHq6D#Z_vM>p$m^ML<$F}VOYP{~;IAE(TbsDLDc_>PDiR)Gd|$u8mBgoH z0{QCKAuhVyb3)M)bSf;j79Z#Ordx(eY_Okq-|3V+HU2NrmvFjnh&e7Z`H$i|s@Nxt zq8hfglqJ+~>j9917y$KF~y%#5caf z7wzWT#@`s z5Axrvq(R8qUfNwIO@A>?Sbd%FcUz|2X_TRrQ~0 zvKkcsr$8e7i`jABUFSDhYBBNkSYwpck1F@R_|and4{b+yoRO-8$17!dwlhq*1%6c|Nlqu`u zCaaGyE2|tiG^`cKy+_iz=n$XiJLILZSxJ#z-;UugHH2E`Ih7WSc5y8WG;0+Hnia`a zkmZcXBNnVW;p=wuhNBkYDN6F{SUMvx686ntWNA7u5^kBn7$W7-pVTVq-=Qh_irZD} z!=|xLxOjKE)gWA{B<~hW?awtv!WBlU6JGK><05>Mk?Mq_FEB0-!e82T-*d=P{gT3k zW@`foY&H1A=uDI8`ke>RnJw(0L@DJ zVzc^|M`m%(_k!?uy}JAbi$Xu6@JX|@|I-SCQT>w|qwia+`jbu+x8_BCA{xxjpc~hks51!v8boc6 zM4hO4dYL|96(jRdXxzL33^DtIERl)#2pyI^;y@KHY{V}M3JFiPVWginu*aY;veVF0 zkeDuuER*`#5KJC$F-} zNWV@E-R7FD^lXE62gjNB%@OmhwWrQChuNG{swfOGiAIfE)bf7~9h4Zo~6mx7MXmlnamau ztu&b(R%pZ-lds*%0$WKK*+?8&g~oJe8wrg~6kPk;T7xqJV)t%yjXCFtEO7c3t;C!> z9OJX}_uc02wDuX1NX!^GiTRnv5g7$~?uabhr^zWIiJ84JDG~21TxV;)prY1f_Vy^l z$#jJ>?~+_~|JEi;tXi;M8rNawDjRv~gkMpTUt+WLt-zS?X0faqWqsCa^$}8_h_5wS z3gT2O;(A@mIM+7^#>9mWw#`gC*~Xd zOl99})#`+wR+1Q6Z?g26!1&CvYLxXctJO#N@r?LdlcoCuBOx`59kl{GqVXv9sZ2XQ zV&WTw)GXr5X2+)jBVpE#a)BM?d^{#q#)nN-mCEi7q{A(^#hL z;{%ECG9y(9-(jQ@;k%7gB@A{(y{)R;b*oh(95hmSox*V=l?b;QsZ4m0kxGQL7l+hQ zLn!xsR;y0<86#B*KdU6)&MY1HA|^yNFMf`Gbdj;t34daw2I0??e0QMwWgQ z81qrSQa^f^v6KkkYoszYe%wgWSo?bY=!3@6V6D#tQfyHpZxL(JB`hHcSzB{R#qPwr zJC)@Dv!Fy7-wvd_1yAWm&)=WfQzzWZNL9jpl;n+K>G>~a-KgnXwZh&es}a{~{dO7cdrRF{7s8UGcm$|>vJLDpv#?xfa`vP@g85^FsiNPnkl7nu4e zd%mjN-wU+}f1#vZlJTD>&C^symp(n!yA}S@o{Tq7sTdlA7|dYy3h z1H3-eB7C8eeAHP=4>HDJp+{3Y7Qagn|11Q(Pr1)Lkh&UAD-7zRoVridKWyHW_S9N0 zGC?K64kPt_P~oSHRHC{g%-g=Q!eBu(cz#tif8Q*q=VSCI)v=EWj#!>h@BhnURw8WC z+Iu9EPtDqGY(lylAhR=PAgQqg4A!eYPYEBUO2x0x_3p^{dU9T0SH( zOEk!ARKKs)XG?NwWK5o?z?d^N=(mL66F%=HOtmWEUP|)$&(cwWG4IHPihaJZG~!xO z+McQ0Pg|`T;UASG7Q`#l{ylDs!8o$xYqn{c6#>V${RF)j}> zeWeDZbdv{Zzvf=2L_4-^?euYeJt+Gz|?xI?|F%&nKqVf_nz@ z)!#0CBC>>aBUK4|mEln_JZt+La8vVp`2iyCE2sBH-35uQ8=GE$Y0Ci>=OX^tta64D;e$Wnh`B+ObD_v+ZXGOeR>(NJ!(w5w?-6EcSA z{)AbjarZw@{r;T!-$(deBb5lBGEyInIK+(Tqvsa{QoaQk+s92%)Cb9Ov$2#2L#_V2 z;5(K3zEF!W)Edawx>7Cux>;N&{QN6DGbVMyhn2KTa{kTRnk@Z`Qg_FFyKTGev24~s zO_F}}Dw9F@GbMQ$Ed5HU85tzq_iB?t_!%X687w`d)Qk+0dKZ}t55nI&qX$hzr7Px_EPaZQl$pOu7*^p7W5c4-L9^E;bhMZt`in|c#1wjx>(_M^SRno$Z&v* z5qUCjE!K?PN#^!wCIr(5V$%m=(+6n!+s*WWk0=b@48-0H(3?BW!GQ-O2M6fj9p=rz zLy^w|vCjjs&(U~ww)%X&K4n%W{)+XCl<-#>HsZO~4^l!#P^85nO!FZWwtNhQmJg!P z@=+8T!}uNxW6ChTR0Ab!#4D6GJGmg4f0TS#iWFv*aOa~gw0ziwmXEv8@_`qcPv!8J z*~S)_m7Gq<@Zq#2j$R`lJ#aC2_u7cjxL@HFmXnQqI8iYlO^_JOt1Xxf#`VL2L>Myn zbcTGcrD=n3k&#X(WT>H$k^YczH3%Ox(&>!-!$xW_^p6EnKJpMBLhcdM`w+|9zBtN# zE29zWj5vOM4Awg=GJSb<|Djzbs5>Li^1s+@+E$V-vlLHS`=x~E8>ugDKg;~XEGT`9 zInx|R7=+!*B`S#3$(?~spp#f7iU>KlMwpJLF``9!qZ0*oP$U(WNpPZ`Rmdxvv zFa)B9$@fibh#o?^iffVAZQF^D!J(emp`N@$PFjIW`L@kB+5yStFmhzkhQ~c7nYvjFtlVD&i-XP^YUZh4X)+ctxgx4Brfbd5~N(rA-Qfsnps<~B-4wjZ;O9x_0qxro{ z!?w!8SBeAkEP|dg=$8e{@*H~8oQFlu0(6ulhuVWb7de_7X{!$YVU()cjWCn z{b-r7L00?=eS)-jzR!v=eHI)QQves?$RsYhDG;R3%=Lm^b(DXC z)E~*Na)lmNMIaHjXtrZc zzH%E2A#-YMpO87VI8CBH|6Voz0du)V7%Uy2r6G3*Xlbxu;8|G^HO;rRU;IL!m{SPn zSQL5)4>wXu3%+2a9>QQ$8pj}dLqZEeJCrG#!55=c4MUH1xU`@h%FjaKuQb>pJxYx5 z&n*h2SWqe7$@kNwVshbdgn}3_kmwAf0}^E)Ve5t{tr-|g1ss>N32Q9Er`wO0i7`KBbxc4d*1s5}pQBxg<-!`{x5IFPtJRzx=_v&F-~m-_E1oV3M{gR>y67Y8I(6D&r_i4PTdgm zG;>zcL-5!Y8!0qaFX21&BiE=b zeBK(hm+*gO`C`L*^M>IUQ1(7_mTTFlpMFhU{i!~&y(FYrvyz=#7^0Lu3u9zdWSG7Y zwwZ(>6?^lkct{kvO02Jvul07V#dyL&LdFxX(g-u5y>i$s)o!Z`@8}va`5(j@8u|EyEwoLt!nz4@!`o`z$ z)IvHT)rfB~>jwzg0x~ZV2ag8wts!jB#wFp)`y{ky~#X^oKfc!?}+3565X7uj5H#x|FWY%ZJ4y=F?8kXDK*{q|{+V_!43K}hFz zT$vp78S4x}`V5l^>9B;ZT;P6#Zu7~uevLU+A`I^LU96wprcdd9#B6bl3xsTLEF$Uq ze&%~0Aw5Gy!XuPR@gXV0V@D?RW-qoXpSzNJJR58BXc)N-{ev7vO11#a| zlvJ!Su2?Io7;8L5#jXt+3GX*jKjCL*7{Ss%T|jI53GY#ox0a>Lw;3bhTb1M)S-LGS z65cU`k)>NMGKn69zp-aEdd6BfB)Ch(?yO#!_3p8VR0$aavA^78>7y2rDj{Rw8Ckl- z9IX;E2A+|nn*$>uW8fKCqHkDK2cJB;M9sg!+$i6s@QZ=8@9RDH0s6#P@fwAv2GS)8 zFAt~GP zf%G)C%ic<<~2`Jdk`G!r$Mh zHwT&pDZTknAkp-OsY`)7Ty;N@5>ASur}rG`fS0^aT7BG3Ksmg ztKT0p|LcTzDM@-^y_wg?ig#MY8ez6#JTAu-%S9FA&DQ;@>0#4YC!Bq;HxEMt;d7Pb zt!L?pz?gUFXDaqjCceyChg+>^CGq+HS);zA;{Vf(DiH=d8?H;e$ph5&qmr z4MK(m$MFBzk`K&N%KyB-XOQcJf2XA46k)|ZtYVFDA0w3sv$Eo>p{&+Wk&ptg&LPao ziW7;l5|dRSqyW6@Ak4~&_vdp|Mu*9&6P|0N0m6Bg_z?Pdv9wgFSU2WlPw_)0t47$O zwOW!*3GrS^!}NdqHWsKx7>QqFDrE#b%Ug1|_-`2MfoW_%b2I7p_cV`4!6F z!$kEH?xiG&Vx`Fvb>lY+36HV56+)U(@XLm=5j`~G5et8V@Y_Zz6Ygf}8iX`XOzkmK zgAvg#E;gb!Hli;!qCz8Pn-P74StEMQ2nGpTJ3^)c-sunqQ==JYtw!Khi$qHJF(VBS z{=rBo;a`k2Koe;RUJ>SVkbQ^((OW*H0(L4W>Qjv8t`?~(AYkW#S`mex3*zyL?jER$Q ze&-uQXDX?$ecmz0p(3 zoxG7vT_?QgGLjmEf3Kun68YT;mM$@>q##Qjms|C`kNc>y=A~q*zE|OernE{yj|I}M zDl^EAHhbs9viDN~>w_T5et#f+R$)fnE1p^1gsOW(CVn}0ODg3&3rL;tC2wW``UqcP zq&nd%mE`*zOHUYMAK@R3R43g3t)?MoR`Ln8r*Q>Ys{g2Pe-l)ty1N5u)?0jqRr*9) zZBqEnK>EGHU_sPYV`{;{DqFt9Bmd~pQB7)P_c#0c zS4H;q=VjldvTxNV9HneV3M2~JWU?bim#A^9jaoGBc_FTJn#O|b1eHl0AmxobEt1`! z?EOr3BbMEWWk*BU9L=7&mPK{KF(WkyCzRy#l%>l9BjKB8FtYT%z?k=ucJvrajgYlP zX|2i9wSke4;yvSzG}NqOnQ()Wq++>Ax2VZeS)ww`L4;Yo@jQ~Ma4Nytf*Q^q2FiqF!U+tt25nw@pRw_NE%F7c{2S-Se2o{GFCyhBNz zk)?(2GRAzwI)ln2aJS2u(~zE_N!?`gYYHSc#>FKYqB&? zsfak?l54FlVXu*Dgtd1V7vZRqyatvoxXu^}?^cp$WT|2iZV*mnB8(7dDMUCL1{mR= zTZGGm8!Srwgp8@!f&QWl3@f%)gbXV>3n2ptEq%5(AUhN z3gJ2CP#+;(5Qi$}P!J#OeJK8QCaZ@qE33z3T^bk(86;8KWBrA3!U+T+s)Vi>Ur!{-qBV1#F$LTcEP@sff|21yYRr<6u#3) zCBhqxH1JD>-?2er;4cc<+admkIt(0b9e;ow|LQ>cderNqo$$A{bL^?fDF@QTf2XwF zlGo#=#X(J$4>bC?qqBUh(w_tBoY&)RB?%{41urOMibpLv7l?#I8T*&MwUuuN`sKrdB%KX?^4O1GYus|%9OK2729FrON0~;uDomp zlD;8F>Ci__U38R|cMxm4yelB(b=|L)J!Tfx2|x30HqQXzXO-mJk)?gFH^v=_-_K;# z2=6sgm5>5Oe67h+5MSMq_}`fIWx`LH_y!>big>)lSB4;dhrvlqR)z3>BlQtdpop&& zi0{i={}PpPw8<(BD13h)QSA2uiSR#^)S6uIRP?6m6#a0i)$1Xw8mXT!DD3%wetK)* z%3J=o$);0SoDuFs_8iToie*)u@byNj5?-JrpOGxhzQJ2uFtWtrYZSl6#5V{j&}Sq| z{}dPrKX0TOVK5>}tk{S$ji5lEq%3{U#Fq&v9`BI8a6!I-s9?hCRcQQM0_iG+?+K(> zVTB5Rqg+0}S)v)(`|ZdGx`y^Aq#BXc(`1R7z(`2(@RIi+f*N{BsaUxZQlu#8El|)~ zpx}E^7~`1r2JIfjEIrT665T~+$-+h}7|dgqXvEC36x}Y~TYJv|){E+d2P#Rz z8efBmE7poC#wRdw#d1-__&h1DSShL)zp9Qa_7qj@i8eiRGy=zk;1C|K%oueDPgatT z7fT1c$EQfa@N}4pJ;7u(2v0Iu@-`xt6^}Bi=2fPyPS|dw65%o>c~eqj>P7Q)Ak)FAwolDz9I&Ay4P z)F9kTNuH6VR~uuUaLhQP9uWGsLzip_k*Dp z;Xl8ZKK2uSN=e>FmM*;681u2dT*ZFeWL4u@kx{>VpO^DHeIjq(`hHKkS)T=Gyt}B5 zm+DhC>BJY9{vPT-*o60-qwq$3N=@STD@~UA=QUZnB~-p&;iH+##E;FW%o5$hR5qyY zY}BV{CcemA?HT=m_x`Q=L`}lmm4r#~((_pOa^NHUNtTa=UH{R`g*?I+D9OoV;Z=d} zTMGXgNM1(xJFQ-aAeHid7BnBz?jCEZ0X9`guz{e(Bi3T$<8Bin+gxHwNi<1l#CNK> zsLHlXGR;BL83U=Bs`Ctn%#_3ojPMcDfub4pm)b>WE;jhI_6W;>lvYqu!7;#ZRL~18 zfTh^Q5>3C%+OI?__q2XoBAlzCaXsHu#x%*sRoO3 zLh2BWwI)kJV_!a;vBokre#bQS6H*P@g^)T#W4SP~-PZ;{YMmpi2{GHC75V zMkC974S0_QzD{_yl6(uX^h97JJopyxhi7EzIHlt3hVZpB7+E?yFcNN^!I+OyY; z=2|nhxt6yX|E|V5T0GATsS(mfpEE4cOe7Z}Ef#rsd!MBl|JS6~^G^DPiRIVx)_cYs z*}qMjUPdS4H(EMWFIRYPAU&?|FM&iWmRqo+h0(8-d$zGehp$u0@~8?&3$HDg=SC5XzyK=wFYSjrp z{~@meb12~#l;oS4r8nPhjCrFde%7sIsS&O)QiJg08S(h1a<%kNW=De&_MVTq7K1Gs`g9&J?3>_bIM=DT%Nq<_d4 zN@R9{#4&^c1Bv56=)2J*^<(X*d#G=_CMQqgy*P_6HS$6svpCntjyvzvTQvmNStz2H zTvzG{^Q4V5b;9Kz_44pSjj*C5KjO1AXpD8jOFm|G39nF+uglU4K5mSJFE>)1@LnVJ z5q`!b(KeV7J3w2|iDF@{b^j`1h*%>wtnn-jYs7{{6DAFN zq1jL-WVW>?=RMVuSBWzLX40LSQI0R)B-`}ED{Nqh#{ZoRZXdYA%R|pTPDixLjz>0d z<;SqUd9?Z$wbKtmEcL{r)msDUR)rkEpfn$b*vDr-Pvr-2Oop+WJDZf42B?@HYYT3w zaAG-EGeWu}@f$5ms+7by6s=a)DEoOYQe$q^_o9l)TbCre3|9LK-_l**mqWIPnVj+9Ngsun|=SM z89w6BqXwA&90Up$_IX>~;7?;Yyd#X)ZOfbMh+ z&+sr3AjKB+vmHNT<9mrPjPKF>PNRMh?2Iia(E`SzU?_T(sy)`!*YoZ2sD5c1qVKew9`0q0Qe>lCTl~P-*_PF-vp}?^_?b%WK_NU6RVg zhnbtveW5`$?K*u*HR7_FmJ-t0U9rMn@Tw+@=LgPw1BgI67R*fvXRF!5M%<<}%vyw7 zGi=0H2DY~;e3!8;Xc99pqJcOBBqe0K3tPVZ9@OBl9dW2kxVL(aAMkjpvpLJgfVDRf{wP zm8E;kz8*r_=^39%35L9UbAj~Cwff>((dINC42Zdd&s0n1>wLAMclN0! z%({>`dC?{9!-LkB>xADmQkC#~O7f#?UKT4(DwmjahvLs?XwOs+TitxMg5B?Y#A%|ME3RRvN zNQCQ^gk{^eE?{9x;ERo@(1?#KmsneAvP9Dm@q8{a+!vep5+T(TtlPe(+%5N5E)u@L zNL9iYDoKp0H(5G7FcKaygOQ~Z0%P9#->4m}%2G7zkcS4M-w?7|L2o-nCBDs+*9m{{ zNjlvi{E3phhb$d=uQ3w7&Pa8_i;NWI??pKy#64Q^Mzf;tER_%>MWc63B|T!b`f24t z)89`>)9?oQsg_eC>HYa;xKdd@VWR2=@3$DtQnV$hJ$;XeSml$J%@K7Vw32!h` zgYZ@()d|-=khuQ}lKHc0^{!T{KenKMzJ5v_m{?=kQDnZWvVW~lX+h$PK1GwNgx4rZ z*oYV3N4CDTpZ4(Q`Ybr!8CO4BA7rgM;U7QiNj}IdwSJC_Rl-*osZRLZ&u8nh^kSu= zOA$W(^(>>u;V-TGi?v3LkoJgmwI)l{kCBUz$~_}X)DK3&tSRyRb(->JGo?)U&#oy2dO!O7AmGMvOu&*1caguijB^e|O!x31qH%w|fD zWy&emeH(<#4hc?AlO-kyCLY3UUi4UAu+M^#kiEuBWQiRIjD+kpo{=SX9551Q0~3Ey zCJsz51H*oU!vw-?V0tYu>^Jyg7a>D|x`Ye`xCq~?JqTQc*+BJLpx9}^NXQ-|{`WRn zVxIvcAv=s`WQkn{jD+kjo{=T?7%&pDyLd*H*kQm($ll@^Sz>(ZHO%q{>)~=fwOXOH3(2+~V*7A)IrSR!Ovf$Phv`Ej$LM95SD z7xQDj&4VRE<_Wl%9PG#-OKfVW63$W5 zZs47L%E3*R*;mlU92xhqHFfnN4dUY#%&3j&#cR~Q-ICuvDyN7nvw!ZAjK8n7$r5|( zF3AO;(jgi{87$K>&&?A1G`U%3$M)PTv2WvN8KIFSc5lzi5_|YA$rN~5Vt@C%`Jsuq zIBLU5iI6END~bGnakX;38V+F|zaU?aGM7B$Kfzert1x7~O*(W8T!fd}a8f7aWCX6b ze?-#_xZ?g{Q^+OOKcYDR74zP_PuJR9Hx#^&jai}&b-MO7_Pv6)Ukzm;D_96atw?b4 zuioJE^oiXj;U!9v88H5Cb6l}jR59Kg#udv&72{1vT(MGAG5&6IT(PI9V!ULFEA|#u zjDHF0N)6qeA*zI5HBy!EYeuRQ&i@8;ze>13Nf>Q@cV3gFQvxGln~~~--A1bB^OL3? zW-K*A>W~DenZ^}?k&xm&V_w74>fRn&QKqsy&$xazX~OG-Z&1<>(oiK`t54)Fp?={4 z|6b={|2B{)pW2lXqO3>!>ogW~rz@r_te z^a^5E6|lPrDiKZ^X@IgrkOyMf(KjOYPyzd!pc3J*kSl?XZGU^75?Q{W;D7Q{)b z+`5C1F`iIYcpy~?bTU{qc9;BZU64Ov7q;kiq(Jm-!uMFkDk0Ss=Q16l8e|^fl*#HN zq#B>KEL{^A3Eyp`G9m3K$b;C33XR}IjO7L))%wI{iJHMkNX^J~!eB(SdSP1}r$Dx2 zor*VRXvCY1wxCJ;0i(@t65njJ1x@1b7!9{X75~s^3pf)iB|MH%h)zhz2^ploHxr#; zwQ7W+R&6G4lFU}Z!B(q8NS!VC7hH)c5wvYfwF;#RU;e*6m2iYUk#K}T)Kn6Sn#xN` z_EHMXlbKLS^Ykee#G+!WSdXS;tO}x@omFS5YT7G#M0}TihKzhj;lBowB72M~Vr|?M zzEDXw=o2Kpy^&BLNG3r+ET}|5x0s+31w9Z*c|n&eA)`Le!jCe7^DK`l;ZOQR>Jr{L z%hL+7`DOZ1mp*6XH@2tT*HuV4T|bdu-^M3RmWQGm7b@kBTn#nI9@Ke~@}b@GLP0Wi z1+2vd7v47#($p51NZe52pl#!PPLokJZ>zB7HNHYcWbDkd@FQB1G3vBnK)zPOIsO+G zfjS|VGU#@MyXdgrnv8F2vcTyTe23`ghuic}CtPBrQr?Jfs%|Ql9!2~Iv#U%D(YOk0I(BT7dS(WVmuSKcN% z##-{Pm6AQ!G@cL#_o5UXRV~}imHAEL%Yy}k*C}b&WI{s9;vIqW0fj#fq`dh%)A<&w zRwASlmrE=Jjip#)lsKtMWi4s2dzAJieG2Vg6w~;khUJ=$s}M99VNl_!mk;HV{6cB$o{= z9I%U*DkHPP*96kvqA^J7i6up0r=7nsJ1c|~q+K8u7Pb5-YVp}-d7W^|NF~Axl;q;T zLNoBaSK$LjsuMnDq|(1B{IijwUU8a!L|Y_}w<;~@tK{_w8x>LudIcdB3Y+0w*@{tY z&QOIHnVmiFifo9Qho;j^$z$62Nt0A2{I!yVEpI0hH*aQ9uZSC>90wtiRM0C9&{)jZ zr^Jc4!{SsTT&5(K4J>R7d>1QxcOd0^#m+PaNjy_kV#1eP;2ngY0p{^o(P~#S3sS#dlqy`~%h{jrz zrJIbgMi?|UOqGIIW0@MSGeP}?)FB$nrjd@JzYzwF{m-niLXGb-jRS;PjgzsuG6yv4NB) zNuE;leA_|P30E1ZkC2D?J}X(;92g0=DakXk^!LVCCw%t|Ml(wRtvk>v)(GoHY7o*M zpTR6`42*=d$1}1-lW^gH@S0GUFl%sp2O&1NOoMw(RzD$46g$dImR=ti32CBdWQkUy zrx0eXi_h<4>ngPF3{yHlNP9$S#jHCoFcQ)p&&U!@!g_)*Yh8TyA6wT$>-Yi-H@gV4 z*7cZm7npS^A?*?CdYUZJBraFddX?L1LGU1AlhgxyNo4?iq6 z9}O-)zV_qDrwLRdG-8U9b$nhH%X=t5ry@MSNL9iEl~mk5bM(`btYV#zix*#! zr8fmeMfRAZXo)^Cdl9m>$f`A23bJY@M8O<=zEYn^WbOb_bf*piZ`eG=p?EP2$ZyO5p4|i#7hP+YbqB3FDka+&B}YOJ^&j z)`A?HqbzgvIU6qnrk_gi3;v|gbT~#iG^C)@U#W8L)hF_dFf8L5gpVtiPZyT|dptXf*mIA#MKuu>G47 z+8>PlpU%I06mb=UMlkpVw=?2ejks2H@DSIkKBNuy9ZQiC;eIykRS9WP3;u27{C{(l zeV$dT6V6wXA69o%@d&F}BcuTIWx}kicxOo?UTLz*gcN}6Cd|r;_ksNMbtbD$c*;&4 zV#S44u|`M%aELG~D|U#ojyG9lLJELGgjrd!L;RF4{m?lHc`*rJq9o+>&${{hQe_ zK=_*(!C>h>0%N|xV>@cJvCu)a)5q3U>78Oq(GlHECun=1|T-I9EEl?vc_Y-Di#e;h+%iiBo z00uL{tgLvC_j3&nxiQq_+qIrgOrq%DBa2l|59+*T*E|mx$ zGg6h1YA{|AQcXd2&e4z$S?KG8*X}gMSn&+2SRV$t*k{|n6YTeD( z#UM%eTqP9`lGN}6(@-P)4kyQEjL-B zCalj1sk9)?exhRONI^^Pt#R5ngplw>I}Kr6u~t+u4nthATvRb0cIK!(uMDOVzG|nY z#uaNt6=PH9tJvd%M#2+zsxhuuE2*CBzO%8k$QWyc!TfmR zq?)#v#xmiDj5H9NI*>P2hQqy7^()PU0YX~m`zT8^5Pg&|*cx3#V5n&zcFTkmh;Ji* zavKX22|hwfcYOJ#+^!B^Z;qD;zhR`5kTJnXL3n`qo#qu5{6xp&D)YZgc8Rr?nxIl- zq<-`^W2qCqT}eK7pSfbKsAAmFwyW5;n8q?;R%1L0-KZ75YZdE+zf@AOsjT=zt5_q< zR*X%(St~qf70X{zNC8N-d}MCR)oMx3ozH6D($9pJulJOGw#RJ$3FcJ7{gveXW9g{C zNcaIG^$~t>MqQRZ6BwV_jvDQFfz_%K(ikzV)@13ufsv4!JtIrOj%Xt>OJz_w7UmS+ zY2q8PplDDc_k`6d5x&nzQLVaubhEKU$1`8kkA7h+b;8Nr*@z9oO-8B{ZdQ_SSC-yt zj19soXE3t#Xkg4Y;wk#kps_^pW$oV?OP#PwU(F)qgf%63Q&}1ejD%}vFtT)BV9c9J zJN{sH)Cj9qtB;VHeHyXU9~cR#*)y^f?1;{pc2OC7o2(MyN+VTcjn!Co6zlCO;0hB| zC;X_9s)TnasWsWStjWU1l;|6PrJsk|`M9#YTmi-t!mUPX5dOWAW+zu&xplYMHy+d^ zbqDB?Gn~9?ZLJIUP!V<5%fsybc-7R@WmVzBoM~v+#(~k4a)jmRM7V+f* zH>1qBQDr=+PdNu8=B*j53ii-Iy;Pq?$7LT>*S@Du;UVUiim(KDou0FF>l37pD10oC zT2&Dhi!dr@w2F*)rTW1b2@h|^l+`e7YL@9SZAqWA@rCcJZrqAj^Q7=gBw*&ZE@&o5 zwDc*nxJvjtCE*8fW;Ly#?iB2&ZcwXe64pP2RkKcP+m^h%Ny>$G%v>SlmyL04jfc_q z7*~lfxRtUY=pGakzQNq8T&eIHBc+5P9zBF?F38HaR>8XNXtgi%{V+l{1D2mRZe@Yq zqa*J)9`u1$LN6h$EcoUVO<{cG$9lF>6ze%6o1Pi!h?;fwU>b5Igd`_q_M+aE9HFe< ze9e;+Enn({JoQ5g5%Sv#e%xf~EmpTm_*Nx(MwadijAnp>`}Lz=7)zay=V7pekcU!U zJWKU({y>;2$uqKaTVN#oxG`Sv=>M+mOW@UY zVUkQjN|WABlSvbr%uHwL!qNs1K}0FEEN)Ch#Dby~L<*t=6h%d;h*Cf$E=X~K`U!r> z#|QuS-19u=-Z^)!g%AJpgTC*1&byuWtoP2nlQm_Q?zgD^PK2dD1?pt~W(Bo6OaEn2 ztr3ZJ`dbY>SSgsm#(nfgoA7#R#(Wmq3s#+hPP+3R)J~;iD~UtJbo% zDlKbc%T7QXvZy??mIaO?S?AWD|$H#S*f>#A%?ZfDf0(%^_Po5uyORuu$giQ{jy z1m1G6R1j!EKt`M;w$q9e;NoY*S>oa+Uu%$MgRKPuT>p#(mbm_j1+vV9wLpNWF&5mO z-+~7H#%4M}#diXz7Aq=k$>!%8s)NXMyZE+{%~+_F>_vcdFSe9fx;zjhdsT(tj-4jy zwBOolruoYPXvc;cX^6MkWCbHjgF5;~8~w+u`F675=%e?D)|_ghhk!lCLQP~JwUEblebBbc zW1xoy(2-z+*gdyPU+0vtwi7f&?J8?f0){)RuNJajwNMAyuLCmkgr$E3f@J@T}>@<3_H|n&JPQPYtEh0-d+G%5%rPl*NvSFvu^=dg3 zF0qP@T_hLzZsko(nx+VGTtdntBvfKei%~ttyME zz;J@>T~@1|?f82Dxn0j&s!v12|Akx@wpzUwvaf{YSa{2V%SV)54+^&#C)nGKEo8ea z)JnD+ko+pWTqLp7Yf-(|vUGW%PWGc#P^+_al|{8WOLqk7WH(wtt0gM}2nCQ#Oc3vNULB z9ZR$+-^Gxnc_ZjHa~D`#3Iy19B1@JXXJrYnqePZ0d&$ZY__J+gJK1qa zSFKthJ045SueCs+%VxKoY|wmdA+Gty!nNMT$j`UoB*->esF`fLg%Zq9E@X^(_*4jE zd%qi~lHCmr@NWjPRcwL}x-DR){u{>RM!Eb6cbEw@1>BM52UN`u@FQCh1L3+I*^#bx z{R`x3ZAZL}TY7j%S-<>l!k|0SmFOOIBd3LM-Hz;pBBy$l$k{ENbCU5HWzIIX+y`BM zuBI4w_1=X)Y0*#ET30<>=XyU7gW^a~$?fB+%+d^?vT~4R1C3yuIZ9QDoE|A6(LKk= zU2}u*|E!Iph3p%<7-8{1_8ma-w1*-;VJyX3$ev`OcCs@8>E$r`M=+vMBpJnBHi}lV zU$arHv{CGBT_(vMW}(QpMp1u_^!KLq*Flyo)z7$)-_06tBzv-jI>?4w9X)zQqiA9j zZ`&w5vh*xbj3>Xdb=gF=!9pI{a1_zUEANFX+N^Q}{|5%gSQ}M>>|+*cCQCyS=mhq` z2{x+8A@N@@J{6YqUO@h2YrTc+DS%{E-m}cYxmGSg_F4-qB6}ks?SW(Itw4-yDE>Nk zy0k-lsZ~pmr5E`cj>hk?QcYxOT&{Ve*RBa<>2jN`7P8;4&?2&r0y0yIrN{Q*bc{T1 zMDrJ0TS>C_0n)d>$A2Hsrx7)E4IY+Reuc4uOPLV&w z`tweY`19y5=(EU;f~fJS)_A)$-a(e_(=o7tuR+X@3;cLHa60P2o&>5N_9M^SXjKL~ z3(3(K`SUF{wM?E#)N;&X2ePR#^8FT@S|)$H#io?WZ?@RfGWo{cP48%X9&wR7nN1i_C-}a=qUNU(lPH$EKfz5s>A_XvKSnn>yR59WM4*A z^#e~-F-gVmLs6zC*&l{%CCe;57YLI5O@$y!45i9ZaWNF=T#lh+e_+jbkfmp{WV7_^ zK#(jw8$p(WI69zW$zpJHE}JOXM^PnDf{~?XZNACoV{0HtmY$6uOF0@0 z46yp}V2n507?WffmRQ@omeG7Ch-ULz7QPQqzH24>yoFlHGD=xW$<_t|Z(hs7E&#fYNjAx5Y|h&m%WndRK54$ng8n+B_pm*XaMMlq2U^3e$AjgwW)czE zu0V>Ig%hfwUdS9!RAR9#BU5DBrO$oAJwu&CvyDem=6yLM0^4tR>7!zob4I)@{ zBWizVr53Tl!O)3ZyYQj5bM4Scl5Mw74YZTxTZVcXCd(`>=U05uJC9NGjWmC(HQ!2h zJ|Hv8S!xOd$r18yaI5FlfbrNx0DSvJ-Px?^(|(zw8e(#+_n zSmh%3+t6Z*<@+&e@hviePDL<*p~%$eg`tZ<^@*7LHNa$=ligsU1vi7`&pC?}UDI#1 zONA8F_(ROH$GU0)xmj|E?M@}-d&0NT33|ZQibHW=d zX?-Rl_d(ab54!Uu>Y>f`AnOC2(T`4iTbU((b1#Bq*%wC8b$S3&m9{BcL|as>axd&~ zNb?;)Sw}7bG++%S$POXV((3IitE6IkYP3 zjj!#;YH-x`SFaj1X~v{7(HW>6=hv=QlYD_wCY4#S5CXd!^;<-pBCPW4g8>&^TxMYf zK)L!R`|+?G3!4CrR@&@wlOogdY9#RvJ8BbTc_&sno!Q;hPLc%KVBSPFloD>0T?H!L zN%j*Kirmh54HhDN91I@dexRLr9|Ar1=JkjWl}8@Vzc zHm=&So*h>lOfs(Aa0PM=Z9;2bLqeoQqvx3G^s=iSu8Xt7ZyaTpTDQ8)(ueKc_XT9> z&~KjWscM_uP(^59RTa&FNVckI4p!3~jMY3f=!`ca>mJRI3${J76D^b^%ZBTfUEYqx zC|e0?(75bw<=9lMWdCHLB-yZs#;P8om+5REb@hSLjjh@tlX?>|ex%=rR+m|#HT|Bh z)6gon9cU}idN(7OTBqAFmLz-kzw0&X(VGmXb=3yNy2zlYqWLZdVinD+tNFb8-S~W$ zL%531jn#Zc7a4BW6)PB*7xt&5EqW55=9ld@-$a(%y&O=+jk&B$bBsr> zP%ev{Xrh|33P&{sbepgU&HXW`H21}SlL}iGXQv-_q+iL>^!v(y~C1Y^Fkxr7HtLcW^M^ zFWP{UWWR3%ZY9eQ&3T8VJ*@dwvJBA(vUF%5NR}ZQL6(AmBliXvFw-jCOqNZ92f1QObaUElk507h_Q*0NMv$c=13|J(i4kOpO|5co zo6k2eBz^uPztwhW^Gvup!@5k6^(+**Ts$2H&bEdUWV%HCD?4X z#+P$DfX{W@9O#j~+d?g5LoT~CAc!lkyA39_L$wnYZe6a;oDs9f}sC@{v6Z-?yHoN@F+Fmd0$TJ-k%Ap?0D!9bQr!Y7e?Z9W?gp zg*P5CY2IFY9e8lvA!GF)f0(%MK8Egd=wvN_P??7K6Y=8Xv#|Z9{Z2Qr3%>hV$*-JL zVgM|E?N}6F2b8j3g(NNn`>O!rw@##v|PX&U10DEe1wk6BEe6{Lg(PimME0`dAjfEP?@&~Vs z-?*M1g>*~L*OI@`c0tF*VE-6E+rcidz0#2e`?COg4(u%31s&&sy*Gd!2D`uQf{ru6 zeky?O1iRfr$(@nv`uy+*=ZJPC%X`kyoMvmW@&>JY$UtU3g$$R zrAIBgLQt082-L~)1-x4Mi{Eu+maYhTkQY0*0{WngoR7rJr@Z_YNnGFlDVWt`$OnH1 zE6G2N@UZRM>n(Y;7i-5 z*p6JpH@3eWK#zev(Iz-C6YO;XbT`5GA2 zT=Jg|l0TOGRGaBWvJHUleVUDor1WMqxKYwnDFC(Vu-dIyym z{2f8N?gKm74j22k)o%=-L9qO?TTV*+y_bvZ2x`0%EPuO4q}~CPw!@_{3wBEYZ3X*b zJ6sz1+XmNIsAD5o{=BH%%p}Vf!R4OP%@{%aQOgl(0ogfr6eP*cvrvNU*??;0jfy(^ z4Nb-hHj(|Tg(BafwqYusudiKyGK(JIJv7|3zIM_2+6C)tS1uNrqgj`M%%q6S zLJ{p+U)w6ub(Fdc(i5vmLzXiC4cQ45vg>QbE+i@OC1iX*NUmJv2O1Wo$VjApe|=Na zZ&Vdw3hfTz1Ea#Ceehm35DI3XaPYrT(3+F{oIrRD=;205*GmI!Sk{wOq{0p8*rOtf zT6Cpj%_V zuxcTDhK1V6o&`vsE?deh@k=lHrk^a|ayEi2m8``UvbS0&@;yp4v?N2@*=j8!d$NU^ z$s}J2gsbOSqh?$JbT0Fe~ARkVn&uB%K}7pqV?EH_F(IA zg}l$l65A##71=pfw}Z`01rXVwnf4X*ivuaLY?y9lW0|F(nUSx5wxN0dvdv78WqkUo zk9-hCf`ft?mZQDvuiEzoufh>CCl4jiQV?e3VsQ{n<*W8`GlVQ(AU8vmrF(2{B42<; zZ6&MOO4>L016z@WK5DD6nyuj100LW$b`FCXLdbLN&9xS?ODxn(wiA$PHcR3 z=|z^l2vh{gPO{(fwURvmkkMu7@<7lHH5x~fajdrMvk*|#ic(6o@H zzjM=LvJY6Ol?Gl5Aj{gs zBu0P@8WXuqT7ZE|tf2(iz@0~TF9uR%ty|@diMZo=7ivmf0q)ws5ZS<8I}MEsnnE^c zO5{kw3!wQ{tA*_S7V04TARsfUSo*I(kn9^4Y9aft3SE{a*h{JovIhV%PHYyyFyJ=p zAxV~3ZgOfP%Mi^tW$8t$+fJ787(tfyvC*}Y4M!J!btM{IBcpr3I$cDT@o1-wWtLtG z1j#aovMrEhh(?#CNjBg`WWxbRA9COyoaf)Q)GH79du<@CWErDOuxC*Fyp>9j{ey)f zQ|D?_(XSYy&7WJX$o%d=)h$+}m0Ao#j*m>jUN#94_sd{lz#2-B-DII=+Wvh2(e|#^ zc7p7l7UH7ij#-6sjFQ!i>~VH7H;Iv#{QRt4Eeu_%1+s;F|2Sfn05w1tz0Li82dJ%LsJ=*;+J7 zc2~4 z=qAv|L9h6T!3Rz@^sAt+g3dn0;0r)aDfo9s@vcO?2P58NK>yS6e+}*UUQB!LL3@7m zA8y~Tkl#y@&v)zp+5b>}>2E9A9rTRhK7sh$I5{2|2m9OAe+1+12cWwiX(Y0syPROk zuYx{+aralyk??;6XbP0$lH>3hb^ZSwepkWol%tKrV))(iVN+&1 zh8(}wW8RNH-pI9s{sfeHXB=_<)&J4|82F+89r@eo2ou40P_9!KBVQZ``^Ajs`>}o; ziFPy39Cyq!$C=ySRe6Kd6%1_yO%zReF=!6-VbCK=roIRCYEXj)|K?X3{&CQ{Ri@kk zdOql_pn<00et5Z|Pk?R#9R__E_a0v0JqX9Z$saR70`z6jS3n(c_4#WIvI(>mH!?PX zp8qLRzY^5dKl2j?p`QArDUSi20y+eG0_@PPYj0?sL4FH*zJ=!9>Y@)4k`K!-q=-e>Bs05zrH-!|A?1$&o(UiLoyJQd^bD#zcB+OgGX z$91q9XFvZf)3(b%2REDYL!d#+4cGI4p#{**pj$v)`FW2U6}Gid#fjLey!jPL(|OZZUKK^ajwIKwbIS$ip1aR?rJ#@-sefEZq0Bq2rG=bSh{9Gy~cI zdIqTLf3mqBq)r9pk2$SH*_9sy-~`YFXp<|5@;K0mpdSQ{x!hE7az{bWC20UXpcjIE z9drmZCY|aU)ML9=*bddLz+Dn27qdL7H(+21^4SCW^_cwD0jKokd!%yqF;_An+^HWehKKWFPeco-a9cfJM4q68~1+)Rwb?5=_1m$zLy)p6`;Maq0 z0KEnDPSDMuTS0#h>iT~Z_%1c3W-e$CDE~y=Aj+=(UcmX2ItQS9A}Hm!+plF^CHTwl{o#& zW8|kGjv1i*iJ2_QSA*UH>iWw97y#V_`XZ=Hwh_R1=be2%NRIpIYX6w=^xK_{fj@x$ z8FV}7zz0nI22i>qr5u0iya#gpjd9A6PCz|>KD!xZ{hl4?$^{KR!q`6ZZL>7N2o)<&OjKNl@Mfc$0$8I^%wYL@`V2 z3#m()mJf zHd9gXq%NQCOKAmgxxS*R@6Ghezs2+_`L|mNQkU&Y6;rA{-Q#uVQ~hbLr%QBMG8$eg zpHHne8ssnR6fv!;{fHGmrc{4#r^JyJ>+(;%@6woGQYfhU&TM~wIwO@`=_RG5Vkwnb znikv?do$hIim6(%B%fZvQeST-O*$oLj@==v&f59NX@e zS11NpD(ZHQTGem!vkpGPkBpuY1^3i^^59&|QpnMwSf2~6QbFsFP z{+)AJWb_B&n1cK}SN@lG<81sV?Q5z?c{XPJ^h4Sr;%|raXCN@rA!9BQKVa1*4BMu$ zH=s{CV^VJy#ycX5&5VvVgJJinI0x}msFkW@aGySXbtwKI@suw zzHmfXTB*9qqPjuKVg2E=jXr6u(|*_gprgMnVf0Dgnq29S{YUgJVf41l@iBL`QJA~h z*m3ja>g!uJddg704f<{GQvXrW)t;!|1N|Q8yZ+qr4;}ph=np`Dv6HYmkq>|LEe1Vy z>3{fA)BfR0P5Xxp@#mP+@ig@?^rtxT^h@}k!e~#f9QBW; zAgGDT=xFF2`JWg>d@}Y5gXS0*DqY##1aL7eddbHO`odk6wUs5MCJNwUT7ThG<9Mxe zQ^u7&B1Zo?{H^nkou#b>A6I`m^xga|#?Q`PH#^YP9Q8?0gMOuyQm_8S#Q)PyN*amE zl2ZEG&c(FkL+6==r@>jkU0HpEbh^lQ^j5FYZ*vr!qVL-o;=X=c(dci(Gad&E`k4IB z@rP|r>Gipq|Arfk{#dWLDIe`mfBNNr?ROLK>wHwn4=NbEVYLA+#DVQv%3p49#`AgLL%@%Q z-+O^?zrx6W$Po1i@Vbv0;Bd(Q8aU_6WXQh`JaMG~P6WQQ=;`>^0lxsa{!I>zZwLN1 zaGfU~|Cj+67(;J3N-hx*fpLM=`bbUBRaKF9IcSNTHA9U~*;KL5S%(oxRcN3LT z7x{Q}z4`*|)J;d=Ab0!n(RJ?$!K=0FS=d<&JH4>;3h*t!^*qrZeQ#g4m(MD$G_X1p z_|S0%_$hGx10Py`-SGzairCd3&g*rUxSU6=w2uMaYQ&ZPy9nCOAn*a;Hvz9Z$pGkP zbtmv);ICkO>Yo%Dq4rcmIL|MJogV?`I`X=OuaD6iY@7z_&U0IWhJZ#^C7~ zydbz9C+hbm4h%b`zniHR|4lLYU<`hD48B=#?YHhl|s4*Buhjr~KBXuYm$zYVV$ocr(oz_$Qzg#8ZzpYl&5ztj+=f80ge83g_<$S(oD z_zfd?H{@3WACHN<0rJ-iUM>DxAwN)K1e;;!OTdSLe;oKXfama~S045s0ls}F1AGIx z{(A$aD}B(C57Ml@1AJ({!QVl}v%rV98T?8^)LXze9boM50eqA!6gvJo zbjVe}_XExsb3bU*)Um+V0T>Bf{{n)xllzr1@H+5D;=eOE^P_($LCbGJJj_Fe@^g&5 zzAvjk9|gYdX;bFO{*%DBWBvK6saAIY9~?Hoqre{oz6o|@n){#c0p~L`#D{?o{n5x_ zyHalwhaJXWv$JW}5c;bC`v(B8d)@%(eswbN!9N(h2>J5_*ZbO5>{EbMJMAY7@-tMd z2EGaXcmr_#2D{%c*wAhVek<_0XAN*V@UIiU)c|}(;tAS89%e)SCCWSaJHQ+CjY0W5 zV~Emk#q0e`T`}25B#r*(LxSr#$N$ZgkybSa_!NwX8IbP;o5#%#AuL(XvMX$U6 z7xLpV-;ad-on$N3`5EKnNB>~Dwx2+QIR1|WJ|5$(0d{6n9`oWx;O7&Eye!N9Coi~O zhu!PeDtG#NxvF?q>syfeWuY_3)NXM@*d?8&uGZ&zdP*5`IZ4nNZhqCcFHmM zcVh6TV(^y)uR{!BQnPFI_U`NByQtv@jPy%T(tldFT7FKA!CPS`hlwa7!2e`{E4&BH zze;#*jGb}}{y+@=1nh7BoAEaun@0W%kRK^u=2UC%1Rs~{yNyO3 zm+|T-;C1@Oh7SX_{k1M>^!0r){W;Xf4IlpZM98aG4f;7$ zE{KuW&)jJHIULZglsNR~a>46-uJWJjW9-}xI|E-Z@^G&njFI0GgTESskB~`GZC>o{ z2e1cuCaTG#impzSq!?z8n?Fs(iXok_Yz+r9v*9=}LEbo!Lw#-C2}}0t?EUKX-SP!sa!FgSH40{id}iJ)Gw83CI1xC zUN&cJR+PLIDOJj(3!SN4TAZYEIk8bl7fU%Woy&@^V%F>HEfmuk)!(CiWqLckLa|Hr zX2e@2)#oiu7rpK-QJGdRmW%aM8A4~alqq`hnBOu}F|D$ql+jhh{CLIJvh->~eZBp? zMXxK}=L4O6=~PCd3TLOYFDvcR8408Lbms~uDK=Pf6OvWMo_sph<@Kj}Ge~NF~DFJYc9 zLGmSV(e;+*vnxG6vrD8kdO%4}%P=VvWq^3{_-a1onVR0r(#pzAHohj`FYOBSq9a0e z_M|(P$uRCMrlpmcba+JeWwXm<{PakN>pW(cr88b886q9PZiSsiloa0nc^!X8Dg)L>B^_OlqA&h#g*BBmsu3l zbZ1L>Th*;|Nqx>7anUb}Uw(Bio9)vDSy&{YS)DdnECjFxPadESmHYvu3abl7)C?$H z_7|W+??pO%ZBCvu24`kjK}s2UKDrCD&S=WW^o9M=sYP^2R$FlX@>!Gu6D@4FZmRCS zB`I0Fx_kT5{y-N?I`b679Fjq#hnDXCtd2*QJ@!B;-AAkl*~gtpZZh9&K`858PZeiu#zq+rS&RJjr!g~J|(NLKM`dJ_ySyk>Ab(xSM1fx zHLMm?SFb$GT}+jVJrZc=iegWCl`0Ct(Ijo|EcK;iVr8hC&E%+8;ETuV;2G0e*;Dlv2R?0M(TQA<*V-cI-yK7IUjkv5Dcf%O(;C-ly2 znmPXr?~HS2%Zg~0N5ku7TKapHPC`k>*s;^RjOVYpy_wE@T0gTMbWC2Nh|258l6rD= z%e32(r)SG@ylxO%ope|O7Nmoct4wSp{2{<+9BCs>TlIR-hk zUNKmZCh1VU7e6s>&JEdpU=`)+pIDY!E+gMDaMjJl5B5R9Sp{m8C*EX`Foyh2gP*1Ig{!w z!K_a*M3VDoaru~Y&UvTLJjXll%rl$MNP5Ycr=N31C}EQCw3!utL&XJ~inYTXv*A!| zXZdGC|IqGhNh)m>kK%eaX=s>p&b-rSdDH5r)gLEYP3MYAgvz0$`b)aXq0wf{MwKw{ ztW!UpZnGGKcOsQqlFb(@^*w#WkR93YVYw2itd%*D>CCOJ0`})BL2q7izAOy`zll-Ji(xtugj_EcT5yp)!m zQtvWecdEC~_J->2%oO`74f!V#eQ8td?GN?P)Dx6{5~~!}#<5TYM!mG{dUQlM=W;GA z^puKS*_BRewJql&MMJ?wmhv|tojf@{MB~t_p;dVLg z(8EyoO;5fO<9O?r6=)S3Tq#n>aOk?ulcTLNXRt~Oa;;+4M=oK`I;9g{acvXo zFWry+rI#IZ$glr4XvH9w#7NURm+2k3G62)@y>bsqF53OOVyak3r(^-Dl=D1!4b}9Q z>ep9Gp%m+knyI-m)f-w0^xV{UVk#{yiEJp+`~BG!PGC7bSHs<`y|7VoTCK9onX4$X z$@n)T{KOQB*&Lfj{R^|b&hqV@wZdz{O`TbC_Akgyo)xjf*_q&e!gVJ7;~EcnHd=oj zK?hgnLhEQ-dW2?671sishvqI>m-C22i z+T6l4D}jGqSZ&MJQHLsZ14;#bKT@V%PExlroA0uXH?v0{CZqnfrfsJg*#(Rwvmj0l zbWW5tqjObCZ@_Y2#2v=|GOd>^`7h834;d4OOxIk5D5$XUpzxY`buAslMu WPOK!h(ww>3R*7jB;jtM`nEHRBr#+zn literal 0 HcmV?d00001 diff --git a/ocilib/4.4.0/AIX-00FB437F4C00/include/ocilib.h b/ocilib/4.4.0/AIX-00FB437F4C00/include/ocilib.h new file mode 100755 index 0000000..84dbb1f --- /dev/null +++ b/ocilib/4.4.0/AIX-00FB437F4C00/include/ocilib.h @@ -0,0 +1,19176 @@ +/* + * OCILIB - C Driver for Oracle (C Wrapper for Oracle OCI) + * + * Website: http://www.ocilib.net + * + * Copyright (c) 2007-2017 Vincent ROGIER + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* IMPORTANT NOTICE + * + * This file contains explanations about Oracle and OCI technologies. + * OCILIB is a wrapper around OCI and thus exposes OCI features. + * The OCILIB documentation intends to explain Oracle / OCI concepts + * and is naturally based on the official Oracle OCI documentation. + * + * Some parts of OCILIB documentation may include some informations + * taken and adapted from the following Oracle documentations : + * - Oracle Call Interface Programmer's Guide + * - Oracle Streams - Advanced Queuing User's Guide + */ + +#ifndef OCILIB_H_INCLUDED +#define OCILIB_H_INCLUDED + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + + +/** + * @defgroup OcilibCApi C API + * @{ + * + */ + +/* --------------------------------------------------------------------------------------------- * + * Platform configuration + * --------------------------------------------------------------------------------------------- */ + +#ifdef HAVE_CONFIG_H + #include +#endif + +/* --------------------------------------------------------------------------------------------- * + * C headers + * --------------------------------------------------------------------------------------------- */ + +#include +#include +#include +#include +#include +#include +#include +#include + +/* --------------------------------------------------------------------------------------------- * + * MS Windows platform detection + * --------------------------------------------------------------------------------------------- */ + +#ifndef _WINDOWS + #if defined(_WIN32)|| defined(WIN32) || defined(_WIN64) || defined(WIN64) || defined(_WIN32_WINNT) + #define _WINDOWS + #endif +#endif + +#ifdef _WINDOWS + #ifdef boolean + #undef boolean + #endif + #include + #ifdef boolean + #undef boolean + #endif +#endif + +/* --------------------------------------------------------------------------------------------- * + * OCILIB version information + * --------------------------------------------------------------------------------------------- */ + +#define OCILIB_MAJOR_VERSION 4 +#define OCILIB_MINOR_VERSION 4 +#define OCILIB_REVISION_VERSION 0 + +/* Import mode */ + +#define OCI_IMPORT_MODE_LINKAGE 1 +#define OCI_IMPORT_MODE_RUNTIME 2 + +#ifdef OCI_IMPORT_RUNTIME + #undef OCI_IMPORT_LINKAGE +#endif + +#ifdef OCI_IMPORT_LINKAGE + #undef OCI_IMPORT_RUNTIME +#endif + +#if !defined(OCI_IMPORT_RUNTIME) && !defined(OCI_IMPORT_LINKAGE) + #define OCI_IMPORT_LINKAGE +#endif + +#ifdef OCI_IMPORT_RUNTIME + #define OCI_IMPORT_MODE OCI_IMPORT_MODE_RUNTIME +#else + #define OCI_IMPORT_MODE OCI_IMPORT_MODE_LINKAGE +#endif + +/* Charset modes */ + +#ifdef OCI_CHARSET_UNICODE + #define OCI_CHARSET_WIDE +#endif + +#ifdef OCI_CHARSET_WIDE + #undef OCI_CHARSET_ANSI +#endif + +#ifdef OCI_CHARSET_ANSI + #undef OCI_CHARSET_ANSI +#endif + +#if !defined(OCI_CHARSET_ANSI) && !defined(OCI_CHARSET_WIDE) + #define OCI_CHARSET_ANSI +#endif + +/* Calling convention */ + +#ifndef OCI_API + #ifdef _MSC_VER + #define OCI_API __stdcall + #else + #define OCI_API + #endif +#endif + +/* Build mode */ + +#ifndef OCI_EXPORT + #define OCI_EXPORT +#endif + +/** + * @defgroup OcilibCApiSupportedCharsets Character sets + * @{ + * + * OCILIB supports both ANSI and Unicode. + * + * Oracle started a real Unicode support with Oracle8i but only for bind and fetch data. + * All SQL and PL/SQ/ statements, database objects names were still only supported in ANSI. + * + * With Oracle 9i, Oracle provides a full Unicode support. + * + * So depending on the compile time Oracle library or the runtime loaded library, Unicode support differs. + * + * OCILIB supports: + * + * - ANSI (char) + * - Unicode (wchar_t) + * - UTF8 strings + * + * OCILIB uses the character type 'otext' that is a define around char and wchar_t depending on the charset mode. + * + * @par Option OCI_CHARSET_ANSI + * + * - otext --> char + * - OTEXT(x) --> x + * + * @par Option OCI_CHARSET_WIDE + * + * - otext --> wchar_t + * - OTEXT(x) --> L ## x + * + * @par Unicode and ISO C + * + * Well, ISO C: + * - doesn't know anything about Unicode. + * - makes wide characters support tricky because wide character size is not defined and is freely adaptable by implementations. + * + * OCILIB uses char/wchar_t strings for both public interface and internal storage. + * + * Unicode builds of OCILIB initialize OCI in UTF16 Unicode mode. + * Oracle implements this mode with a 2 bytes (fixed length) UTF16 encoding. + * + * @warning + * When using Unicode builds of OCILIB, make sure that the target + * Database charset is also using an Unicode charset or is a superset of UTF16. + * If not, strings may be converted with substitution characters by the Oracle client ! + * + * So, on systems implementing wchar_t as 2 bytes based UTF16 (e.g. Ms Windows), + * strings are directly passed to Oracle and taken back from it. + * + * On other systems (most of the Unix systems) that use UTF32 as encoding, (4 bytes based wchar_t), OCILIB uses: + * - temporary buffers for statements and object names + * - buffer expansion from UTF16 to UTF32 for fetch and bind string: + * - allocation based on sizeof(wchar_t) + * - data filling based on sizeof(short) -> (UTF16 2 bytes) + * - data expansion to sizeof(wchar_t). + * + * Buffer expansion is done in place and has the advantage of not requiring extra buffer. + * That reduces the cost of the Unicode/ISO C handling overhead on Unix systems. + * + * @par UTF8 strings + * + * OCILIB fully supports UTF8 strings : + * - Within OCI_CHARSET_ANSI builds + * - NLS_LANG environment variable must be set to any valid UTF8 Oracle charset string + * + * @par Charset mapping macros + * + * OCILIB main header file provides macro around most common string functions of + * the C standard library. + * + * these macros are based on the model: ostr[libc function name]() + * + * xxx is the standard C library string function name without the character type prefix (str/wcs). + * + * List of available macros: + * - ostrdup + * - ostrcpy + * - ostrncpy + * - ostrcat + * - ostrncat + * - ostrlen + * - ostrcmp + * - ostrcasecmp + * - osprintf + * - ostol + * +**/ + +#if defined(__cplusplus) && defined(_MSC_VER) && (_MSC_VER < 1300) +extern "C++" { +#endif + +#include + +#if defined(__cplusplus) && defined(_MSC_VER) && (_MSC_VER < 1300) +} +#endif + +/* Charset macros */ + +#define OCI_CHAR_ANSI 1 +#define OCI_CHAR_WIDE 2 + +#ifdef OCI_CHARSET_ANSI + typedef char otext; + #define OTEXT(x) x + #define OCI_CHAR_TEXT OCI_CHAR_ANSI +#else + typedef wchar_t otext; + #define OTEXT(x) L ## x + #define OCI_CHAR_TEXT OCI_CHAR_WIDE +#endif + +/* + For ISO conformance, strdup/wcsdup/stricmp/strncasecmp are not used. + All wide char routines are part of the 1995 Normative Addendum 1 to the ISO C90 standard. + OCILIB also needs an ANSI equivalent to swprintf => ocisprintf + Thus OCILIB exports the following helper functions + +*/ + +OCI_EXPORT int ocisprintf +( + char *str, + int size, + const char *format, + ... +); + +OCI_EXPORT char * ocistrdup +( + const char * src +); + +OCI_EXPORT int ocistrcasecmp +( + const char *str1, + const char *str2 +); + +OCI_EXPORT wchar_t * ociwcsdup +( + const wchar_t * src +); + +OCI_EXPORT int ociwcscasecmp +( + const wchar_t *str1, + const wchar_t *str2 +); + +/* special defines for Microsoft C runtime that is not C ISO compliant */ + +#ifdef _WINDOWS + + #define vsnprintf _vsnprintf + #define swprintf _snwprintf + +#endif + +/* helpers mapping macros */ + +#ifdef OCI_CHARSET_ANSI + #define ostrdup ocistrdup + #define ostrcpy strcpy + #define ostrncpy strncpy + #define ostrcat strcat + #define ostrncat strncat + #define ostrlen strlen + #define ostrcmp strcmp + #define ostrcasecmp ocistrcasecmp + #define osprintf ocisprintf + #define ostrtol strtol + #define osscanf sscanf + #define otoupper toupper + #define oisdigit isdigit +#else + #define ostrdup ociwcsdup + #define ostrcpy wcscpy + #define ostrncpy wcsncpy + #define ostrcat wcscat + #define ostrncat wcsncat + #define ostrlen wcslen + #define ostrcmp wcscmp + #define ostrcasecmp ociwcscasecmp + #define osprintf swprintf + #define ostrtol wcstol + #define osscanf swscanf + #define otoupper towupper + #define oisdigit iswdigit + +#endif + +/* string size macros */ + +#define otextsize(s) (ostrlen(s) * sizeof(otext)) + +/** + * @} + */ + +/** + * @defgroup OcilibCApiDatatypes Data types + * @{ + * + * OCILIB implements: + * + * - Oracle Scalar data types through scalar C data types + * - Oracle opaque/complex objects though opaque library handles + * - Library objects for manipulating the database: connections, transactions, statements... + * + * @par Supported Oracle data types + * + * - All Database types are supported excluding REFs. + * + * Here is a summary of the supported data types: + * + * - Scalar types CHAR/NCHAR, VARCHAR2/NVARCHAR2, NUMBER, FLOAT, REAL, RAW, ... + * - Binary types: RAW, LONG RAW, VARRAW, .. + * - Larges Objects (Lobs and Files) : BLOB, CLOB, NCLOB, BFILE + * - LONG types: LONG, VAR LONG + * - Date, Timestamps et Intervals: DATE, TIMESTAMP, INTERVAL + * - PL/SQL types: Ref cursors, PL/SQL Tables + * - Named Types (by value): Built-in system objects and User defined objects + * - VARRAYs and Nested Tables + * - ROWIDs + * + * @par OCILIB library objects + * + * The public OCILIB library interface implements encapsulation for + * representing database objects (such as connections, statements ...) through + * opaque structures (pointers to structures whose definition is kept private) + * + * Instead of directly manipulating the structures and their members, the library + * has functions to access the underlying members. + * + * It's designed to make the user code as more independent as possible of + * the library details. + * +**/ + +/** + * @typedef OCI_Pool + * + * @brief + * Pool object (session or connection) + * + * A pool is a set of pooled objects + * + */ + +typedef struct OCI_Pool OCI_Pool; + +/** + * @typedef OCI_Connection + * + * @brief + * Oracle physical connection. + * + * It holds all information about a connection such as error handling, associated statements, ... + * Error handling and transactions are embedded within a connection object. + * + * @warning + * Multi threaded applications that use multiple connections should use one connection per thread + * as all statements associated with a connection share the same context. + * + */ + +typedef struct OCI_Connection OCI_Connection; + +/** + * @typedef OCI_Statement + * + * @brief + * Oracle SQL or PL/SQL statement. + * + * A Statement object allows users to prepare, execute SQL orders or PL/SQL blocks + * + */ + +typedef struct OCI_Statement OCI_Statement; + +/** + * @typedef OCI_Bind + * + * @brief + * Internal bind representation. + * + * A bind object is an object that holds all information about an Oracle statement binding operation + * + */ + +typedef struct OCI_Bind OCI_Bind; + +/** + * @typedef OCI_Resultset + * + * @brief + * Collection of output columns from a select statement. + * + * A resultset object is the result of 'select' SQL Statement. + * + * It's a set of data (ordered in columns) that can be fetched row by row + * to get data returned by the SQL statement + * + */ + +typedef struct OCI_Resultset OCI_Resultset; + +/** + * @typedef OCI_Column + * + * @brief + * Oracle SQL Column and Type member representation. + * + * A column object represents an output column from a select statement + * + */ + +typedef struct OCI_Column OCI_Column; + +/** + * @typedef OCI_Lob + * + * @brief + * Oracle Internal Large objects: + * + * The following internal Larges Objects are supported: + * + * - BLOBs : Binary large objects + * - CLOBs / NCLOBs : Character large objects + * + * LOBs were introduced by OCI8 to replace Long data types. + * + * It's designed to store really larges objects (buffer, files) inside the database + * + * Oracle encourages programmers to use those objects instead of LONG, LONG RAW, ... + * + * OCILIB supports both LOBs and LONGs + * + */ + +typedef struct OCI_Lob OCI_Lob; + +/** + * @typedef OCI_File + * + * @brief + * Oracle External Large objects: + * + * The following external Larges Objects are supported: + * + * - BFILEs : Binary files + * - CFILEs : Character files + * + * FILEs were introduced by OCI8 in order to store references to files located outside the database. + * + * @warning + * Only Read-only access is allowed on BFILEs + * + * Two way to use FILEs : + * + * - within statement context (query, binding) + * - without statement context (server files reading) through OCI_File properties functions + * + */ + +typedef struct OCI_File OCI_File; + +/** + * @typedef OCI_Transaction + * + * @brief + * Oracle Transaction. + * + * A transaction can be: + * + * - Local: it's implicitly created by OCILIB + * - Global: it's explicitly created by the program + * + */ + +typedef struct OCI_Transaction OCI_Transaction; + +/** + * @typedef OCI_Long + * + * @brief Oracle Long data type. + * + * The following long Objects are supported: + * + * - LONG RAW : Binary long objects + * - LONG : Character long objects + * + * Those types were used in older versions of Oracle (before Oracle8i) to store + * large chunks of data in the database. + * + * It's now depreciated by Oracle that recommends using LOBs + * + * Many databases and applications are still designed to use LONGs that's why + * OCILIB supports Long Objects and piecewise operations + * + */ + +typedef struct OCI_Long OCI_Long; + +/** +* @typedef OCI_Number +* +* @brief +* Oracle NUMBER representation. +* +*/ +typedef struct OCI_Number OCI_Number; + +/** + * @typedef OCI_Date + * + * @brief + * Oracle internal date representation. + * + */ + +typedef struct OCI_Date OCI_Date; + +/** + * @typedef OCI_Timestamp + * + * @brief + * Oracle internal timestamp representation. + * + */ + +typedef struct OCI_Timestamp OCI_Timestamp; + +/** + * @typedef OCI_Interval + * + * @brief + * Oracle internal interval representation. + * + */ + +typedef struct OCI_Interval OCI_Interval; + +/** + * @typedef OCI_Object + * + * @brief + * Oracle Named types representation. + * + */ + +typedef struct OCI_Object OCI_Object; + +/** + * @typedef OCI_Coll + * + * @brief + * Oracle Collections (VARRAYs and Nested Tables) representation. + * + */ + +typedef struct OCI_Coll OCI_Coll; + +/** + * @typedef OCI_Elem + * + * @brief + * Oracle Collection item representation. + * + */ + +typedef struct OCI_Elem OCI_Elem; + +/** + * @typedef OCI_Iter + * + * @brief + * Oracle Collection iterator representation. + * + */ +typedef struct OCI_Iter OCI_Iter; + +/** + * @typedef OCI_TypeInfo + * + * @brief + * Type info metadata handle. + * + */ + +/** + * @typedef OCI_Ref + * + * @brief + * Oracle REF type representation. + * + */ + +typedef struct OCI_Ref OCI_Ref; + +/** + * @typedef OCI_TypeInfo + * + * @brief + * Type info meta data handle. + * + */ + +typedef struct OCI_TypeInfo OCI_TypeInfo; + +/** + * @typedef OCI_HashTable + * + * @brief + * OCILIB implementation of hash tables. + * + */ + +typedef struct OCI_HashTable OCI_HashTable; + +/** + * @typedef OCI_Error + * + * @brief + * Encapsulates an Oracle or OCILIB exception. + * + * The error object is used to raise internal or oracle errors. + * When an error occurs, if the application has provided an error handler, an + * error object is constructed and passed to the handler + * + */ + +typedef struct OCI_Error OCI_Error; + +/** + * @typedef OCI_Mutex + * + * @brief + * OCILIB encapsulation of OCI mutexes. + * + */ + +typedef struct OCI_Mutex OCI_Mutex; + +/** + * @typedef OCI_Thread + * + * @brief + * OCILIB encapsulation of OCI Threads. + * + */ + +typedef struct OCI_Thread OCI_Thread; + +/** + * @typedef OCI_DirPath + * + * @brief + * OCILIB encapsulation of OCI Direct Path handle. + * + */ + +typedef struct OCI_DirPath OCI_DirPath; + +/** + * @typedef OCI_Subscription + * + * @brief + * OCILIB encapsulation of Oracle DCN notification + * + */ + +typedef struct OCI_Subscription OCI_Subscription; + +/** + * @typedef OCI_Event + * + * @brief + * OCILIB encapsulation of Oracle DCN event + * + */ + +typedef struct OCI_Event OCI_Event; + +/** + * @typedef OCI_Msg + * + * @brief + * OCILIB encapsulation of A/Q message + * + */ + +typedef struct OCI_Msg OCI_Msg; + +/** + * @typedef OCI_Agent + * + * @brief + * OCILIB encapsulation of A/Q Agent + * + */ + +typedef struct OCI_Agent OCI_Agent; + +/** + * @typedef OCI_Dequeue + * + * @brief + * OCILIB encapsulation of A/Q dequeuing operations + * + */ + +typedef struct OCI_Dequeue OCI_Dequeue; + +/** + * @typedef OCI_Enqueue + * + * @brief + * OCILIB encapsulation of A/Q enqueuing operations + * + */ + +typedef struct OCI_Enqueue OCI_Enqueue; + +/** + * @var POCI_ERROR + * + * @brief + * Error procedure prototype + * + * @param err - Error handle + * + */ + +typedef void (*POCI_ERROR) +( + OCI_Error *err +); + +/** + * @var POCI_THREAD + * + * @brief + * Thread procedure prototype + * + * @param thread - Thread handle + * @param arg - Pointer passed to OCI_ThreadRun() + * + */ + +typedef void (*POCI_THREAD) +( + OCI_Thread *thread, + void *arg +); + +/** + * @var POCI_THREADKEYDEST + * + * @brief + * Thread key destructor prototype. + * + * @param data - Thread Key current pointer value + * + */ + +typedef void (*POCI_THREADKEYDEST) +( + void *data +); + +/** + * @var POCI_NOTIFY + * + * @brief + * Database Change Notification User callback prototype. + * + * @param event - Event handle + * + */ + +typedef void (*POCI_NOTIFY) +( + OCI_Event *event +); + +/** + * @var POCI_NOTIFY_AQ + * + * @brief + * AQ notification callback prototype. + * + * @param dequeue - dequeue handle + * + */ + +typedef void (*POCI_NOTIFY_AQ) +( + OCI_Dequeue *dequeue +); + +/** + * @var POCI_TAF_HANDLER + * + * @brief + * Failover Notification User callback prototype. + * + * @param con - Connection handle related to the event + * @param type - Event type + * @param event - Event code + * + * @note + * Possible values for parameter 'type' : + * - OCI_FOT_NONE + * - OCI_FOT_SESSION + * - OCI_FOT_SELECT + * + * @note + * Possible values for parameter 'event' : + * - OCI_FOE_END + * - OCI_FOE_ABORT + * - OCI_FOE_REAUTH + * - OCI_FOE_BEGIN + * - OCI_FOE_ERROR + * + * @return + * User callback should return one of the following value : + * - OCI_FOC_OK + * - OCI_FOC_RETRY + * + */ + +typedef unsigned int (*POCI_TAF_HANDLER) +( + OCI_Connection *con, + unsigned int type, + unsigned int event +); + +/** + * @var POCI_HA_HANDLER + * + * @brief + * HA (High Availability) events Notification User callback prototype. + * + * @param con - Connection handle related to the event + * @param source - source of the event + * @param event - type of the event + * @param time - Timestamp of the event + * + * @note + * Currently, Oracle only send HA down events + * + * @note + * Possible values for parameter 'source' : + * - OCI_HES_INSTANCE + * - OCI_HES_DATABASE + * - OCI_HES_NODE + * - OCI_HES_SERVICE + * - OCI_HES_SERVICE_MEMBER + * - OCI_HES_ASM_INSTANCE + * - OCI_HES_PRECONNECT + * + * @note + * Possible values for parameter 'event' : + * - OCI_HET_DOWN : HA event type down + * - OCI_HET_UP : HA event type up + * + */ + +typedef void (*POCI_HA_HANDLER) +( + OCI_Connection *con, + unsigned int source, + unsigned int event, + OCI_Timestamp *time +); + +/* public structures */ + +/** + * @typedef OCI_XID + * + * @brief + * Global transaction identifier + * + */ + +typedef struct OCI_XID { + long formatID; + long gtrid_length; + long bqual_length; + char data[128]; +} OCI_XID; + +/** + * @typedef OCI_Variant + * + * @brief + * Internal Variant type based on union C type. + * + * @note + * Helpful for generic buffer, it reduces the amount of casts + * + */ + +typedef union OCI_Variant { + /* integers */ + int num; + + /* raw data */ + unsigned char *p_bytes; + + /* pointer to c natives types */ + void *p_void; + int *p_int; + float *p_float; + double *p_double; + otext *p_text; + + /* ocilib object types */ + OCI_Date *p_date; + OCI_Interval *p_interval; + OCI_Timestamp *p_timestamp; + OCI_Long *p_long; + OCI_Lob *p_lob; + OCI_File *p_file; + OCI_Statement *p_stmt; + OCI_Column *p_col; + OCI_Object *p_obj; + OCI_Coll *p_coll; + OCI_Iter *p_iter; + OCI_Elem *p_elem; +} OCI_Variant; + +/** +* @typedef OCI_HashValue +* +* @brief +* Hash table entry value +* +* OCILIB implementation of hash tables uses chaining method for dealing with collisions +* +*/ + +typedef struct OCI_HashValue { + OCI_Variant value; + struct OCI_HashValue *next; +} OCI_HashValue; + +/** + * @typedef OCI_HashEntry + * + * @brief + * Hash table entry + * + */ + +typedef struct OCI_HashEntry { + otext *key; + struct OCI_HashValue *values; + struct OCI_HashEntry *next; +} OCI_HashEntry; + +/** + * @typedef big_int + * + * @brief + * big_int is a C scalar integer (32 or 64 bits) depending on compiler support for 64bits integers. + * big_uint is an unsigned big_int + * + */ + +/* check for long long support */ + +#if defined(_LONGLONG) || defined(LONG_LONG_MAX) || defined(LLONG_MAX) || defined(__LONG_LONG_MAX__) + +/* C99 long long supported */ + +typedef long long big_int; +typedef unsigned long long big_uint; + + #define OCI_BIG_UINT_ENABLED + +#elif defined(_WINDOWS) + +/* Microsoft extension supported */ + +typedef __int64 big_int; +typedef unsigned __int64 big_uint; + + #define OCI_BIG_UINT_ENABLED + +#else + +typedef int big_int; +typedef unsigned int big_uint; + +#endif + +/** + * @} + */ + +/* boolean values */ + +#ifndef TRUE + #define TRUE 1 + #define FALSE 0 +#endif + +#ifndef boolean + #define boolean int +#endif + +/* oracle OCI key versions*/ + +#define OCI_8_0 800 +#define OCI_8_1 810 +#define OCI_9_0 900 +#define OCI_9_2 920 +#define OCI_10_1 1010 +#define OCI_10_2 1020 +#define OCI_11_1 1110 +#define OCI_11_2 1120 +#define OCI_12_1 1210 +#define OCI_12_2 1220 + +/* versions extract macros */ + +#define OCI_VER_MAJ(v) (unsigned int) (v/100) +#define OCI_VER_MIN(v) (unsigned int) ((v/10) - ((v/100)*10)) +#define OCI_VER_REV(v) (unsigned int) ((v) - ((v/10)*10)) + +/* OCILIB Error types */ + +#define OCI_ERR_ORACLE 1 +#define OCI_ERR_OCILIB 2 +#define OCI_ERR_WARNING 3 + +/* OCILIB Error codes */ + +#define OCI_ERR_NONE 0 +#define OCI_ERR_NOT_INITIALIZED 1 +#define OCI_ERR_LOADING_SHARED_LIB 2 +#define OCI_ERR_LOADING_SYMBOLS 3 +#define OCI_ERR_MULTITHREADED 4 +#define OCI_ERR_MEMORY 5 +#define OCI_ERR_NOT_AVAILABLE 6 +#define OCI_ERR_NULL_POINTER 7 +#define OCI_ERR_DATATYPE_NOT_SUPPORTED 8 +#define OCI_ERR_PARSE_TOKEN 9 +#define OCI_ERR_MAP_ARGUMENT 10 +#define OCI_ERR_OUT_OF_BOUNDS 11 +#define OCI_ERR_UNFREED_DATA 12 +#define OCI_ERR_MAX_BIND 13 +#define OCI_ERR_ATTR_NOT_FOUND 14 +#define OCI_ERR_MIN_VALUE 15 +#define OCI_ERR_NOT_COMPATIBLE 16 +#define OCI_ERR_STMT_STATE 17 +#define OCI_ERR_STMT_NOT_SCROLLABLE 18 +#define OCI_ERR_BIND_ALREADY_USED 19 +#define OCI_ERR_BIND_ARRAY_SIZE 20 +#define OCI_ERR_COLUMN_NOT_FOUND 21 +#define OCI_ERR_DIRPATH_STATE 22 +#define OCI_ERR_CREATE_OCI_ENVIRONMENT 23 +#define OCI_ERR_REBIND_BAD_DATATYPE 24 +#define OCI_ERR_TYPEINFO_DATATYPE 25 +#define OCI_ERR_ITEM_NOT_FOUND 26 +#define OCI_ERR_ARG_INVALID_VALUE 27 +#define OCI_ERR_XA_ENV_FROM_STRING 28 +#define OCI_ERR_XA_CONN_FROM_STRING 29 + +#define OCI_ERR_COUNT 30 + + +/* allocated bytes types */ + +#define OCI_MEM_ORACLE 1 +#define OCI_MEM_OCILIB 2 +#define OCI_MEM_ALL OCI_MEM_ORACLE | OCI_MEM_OCILIB + +/* binding */ + +#define OCI_BIND_BY_POS 0 +#define OCI_BIND_BY_NAME 1 +#define OCI_BIND_SIZE 6 +#define OCI_BIND_MAX 65535 + +/* fetching */ + +#define OCI_FETCH_SIZE 20 +#define OCI_PREFETCH_SIZE 20 +#define OCI_LONG_EXPLICIT 1 +#define OCI_LONG_IMPLICIT 2 + +/* unknown value */ + +#define OCI_UNKNOWN 0 + +/* C Data Type mapping */ + +#define OCI_CDT_NUMERIC 1 +#define OCI_CDT_DATETIME 3 +#define OCI_CDT_TEXT 4 +#define OCI_CDT_LONG 5 +#define OCI_CDT_CURSOR 6 +#define OCI_CDT_LOB 7 +#define OCI_CDT_FILE 8 +#define OCI_CDT_TIMESTAMP 9 +#define OCI_CDT_INTERVAL 10 +#define OCI_CDT_RAW 11 +#define OCI_CDT_OBJECT 12 +#define OCI_CDT_COLLECTION 13 +#define OCI_CDT_REF 14 +#define OCI_CDT_BOOLEAN 15 + +/* Data Type codes for OCI_ImmediateXXX() calls */ + +#define OCI_ARG_SHORT 1 +#define OCI_ARG_USHORT 2 +#define OCI_ARG_INT 3 +#define OCI_ARG_UINT 4 +#define OCI_ARG_BIGINT 5 +#define OCI_ARG_BIGUINT 6 +#define OCI_ARG_DOUBLE 7 +#define OCI_ARG_DATETIME 8 +#define OCI_ARG_TEXT 9 +#define OCI_ARG_LOB 10 +#define OCI_ARG_FILE 11 +#define OCI_ARG_TIMESTAMP 12 +#define OCI_ARG_INTERVAL 13 +#define OCI_ARG_RAW 14 +#define OCI_ARG_OBJECT 15 +#define OCI_ARG_COLLECTION 16 +#define OCI_ARG_REF 17 +#define OCI_ARG_FLOAT 18 +#define OCI_ARG_NUMBER 19 + +/* statement types */ + +#define OCI_CST_SELECT 1 +#define OCI_CST_UPDATE 2 +#define OCI_CST_DELETE 3 +#define OCI_CST_INSERT 4 +#define OCI_CST_CREATE 5 +#define OCI_CST_DROP 6 +#define OCI_CST_ALTER 7 +#define OCI_CST_BEGIN 8 +#define OCI_CST_DECLARE 9 +#define OCI_CST_CALL 10 + +/* environment modes */ + +#define OCI_ENV_DEFAULT 0 +#define OCI_ENV_THREADED 1 +#define OCI_ENV_CONTEXT 2 +#define OCI_ENV_EVENTS 4 + +/* sessions modes */ + +#define OCI_SESSION_DEFAULT 0x00000000 /* any version */ +#define OCI_SESSION_SYSDBA 0x00000002 /* any version */ +#define OCI_SESSION_SYSOPER 0x00000004 /* any version */ +#define OCI_SESSION_SYSASM 0x00008000 /* From 11gR1 */ +#define OCI_SESSION_SYSBKP 0x00020000 /* From 12cR1 */ +#define OCI_SESSION_SYSDGD 0x00040000 /* From 12cR1 */ +#define OCI_SESSION_SYSKMT 0x00080000 /* From 12cR1 */ +#define OCI_SESSION_SYSRAC 0x00100000 /* From 12cR2 */ + +#define OCI_SESSION_XA 0x00000001 +#define OCI_SESSION_PRELIM_AUTH 0x00000008 + +/* change notification types */ + +#define OCI_CNT_OBJECTS 1 +#define OCI_CNT_ROWS 2 +#define OCI_CNT_DATABASES 4 +#define OCI_CNT_ALL OCI_CNT_OBJECTS | OCI_CNT_ROWS | OCI_CNT_DATABASES + +/* event notification types */ + +#define OCI_ENT_STARTUP 1 +#define OCI_ENT_SHUTDOWN 2 +#define OCI_ENT_SHUTDOWN_ANY 3 +#define OCI_ENT_DROP_DATABASE 4 +#define OCI_ENT_DEREGISTER 5 +#define OCI_ENT_OBJECT_CHANGED 6 + +/* event object notification types */ + +#define OCI_ONT_INSERT 0x2 +#define OCI_ONT_UPDATE 0x4 +#define OCI_ONT_DELETE 0x8 +#define OCI_ONT_ALTER 0x10 +#define OCI_ONT_DROP 0x20 +#define OCI_ONT_GENERIC 0x40 + +/* database startup modes */ + +#define OCI_DB_SPM_START 1 +#define OCI_DB_SPM_MOUNT 2 +#define OCI_DB_SPM_OPEN 4 +#define OCI_DB_SPM_FULL OCI_DB_SPM_START | OCI_DB_SPM_MOUNT | OCI_DB_SPM_OPEN + +/* database startup flags */ + +#define OCI_DB_SPF_DEFAULT 0 +#define OCI_DB_SPF_FORCE 1 +#define OCI_DB_SPF_RESTRICT 2 + +/* database shutdown modes */ + +#define OCI_DB_SDM_SHUTDOWN 1 +#define OCI_DB_SDM_CLOSE 2 +#define OCI_DB_SDM_DISMOUNT 4 +#define OCI_DB_SDM_FULL OCI_DB_SDM_SHUTDOWN | OCI_DB_SDM_CLOSE | OCI_DB_SDM_DISMOUNT + +/* database shutdown flags */ + +#define OCI_DB_SDF_DEFAULT 0 +#define OCI_DB_SDF_TRANS 1 +#define OCI_DB_SDF_TRANS_LOCAL 2 +#define OCI_DB_SDF_IMMEDIATE 3 +#define OCI_DB_SDF_ABORT 4 + +/* charset form types */ + +#define OCI_CSF_NONE 0 +#define OCI_CSF_DEFAULT 1 +#define OCI_CSF_NATIONAL 2 + +/* statement fetch mode */ + +#define OCI_SFM_DEFAULT 0 +#define OCI_SFM_SCROLLABLE 0x08 + +/* statement fetch direction */ + +#define OCI_SFD_ABSOLUTE 0x20 +#define OCI_SFD_RELATIVE 0x40 + +/* bind allocation mode */ + +#define OCI_BAM_EXTERNAL 1 +#define OCI_BAM_INTERNAL 2 + +/* bind direction mode */ + +#define OCI_BDM_IN 1 +#define OCI_BDM_OUT 2 +#define OCI_BDM_IN_OUT (OCI_BDM_IN | OCI_BDM_OUT) + +/* Column property flags */ + +#define OCI_CPF_NONE 0 +#define OCI_CPF_IS_IDENTITY 1 +#define OCI_CPF_IS_GEN_ALWAYS 2 +#define OCI_CPF_IS_GEN_BY_DEFAULT_ON_NULL 4 + +/* Column collation IDs */ + +#define OCI_CCI_NONE 0x00000000 +#define OCI_CCI_NLS_COMP 0x00003FFE +#define OCI_CCI_NLS_SORT 0x00003FFD +#define OCI_CCI_NLS_SORT_CI 0x00003FFC +#define OCI_CCI_NLS_SORT_AI 0x00003FFB +#define OCI_CCI_NLS_SORT_CS 0x00003FFA +#define OCI_CCI_NLS_SORT_VAR1 0x00003FF9 +#define OCI_CCI_NLS_SORT_VAR1_CI 0x00003FF8 +#define OCI_CCI_NLS_SORT_VAR1_AI 0x00003FF7 +#define OCI_CCI_NLS_SORT_VAR1_CS 0x00003FF6 +#define OCI_CCI_BINARY 0x00003FFF +#define OCI_CCI_BINARY_CI 0x00023FFF +#define OCI_CCI_BINARY_AI 0x00013FFF + + +/* Integer sign flag */ + +#define OCI_NUM_UNSIGNED 2 + +/* External Integer types */ + +#define OCI_NUM_SHORT 4 +#define OCI_NUM_INT 8 +#define OCI_NUM_BIGINT 16 +#define OCI_NUM_FLOAT 32 +#define OCI_NUM_DOUBLE 64 +#define OCI_NUM_NUMBER 128 + +#define OCI_NUM_USHORT (OCI_NUM_SHORT | OCI_NUM_UNSIGNED) +#define OCI_NUM_UINT (OCI_NUM_INT | OCI_NUM_UNSIGNED) +#define OCI_NUM_BIGUINT (OCI_NUM_BIGINT | OCI_NUM_UNSIGNED) + +/* timestamp types */ + +#define OCI_TIMESTAMP 1 +#define OCI_TIMESTAMP_TZ 2 +#define OCI_TIMESTAMP_LTZ 3 + +/* interval types */ + +#define OCI_INTERVAL_YM 1 +#define OCI_INTERVAL_DS 2 + +/* long types */ + +#define OCI_BLONG 1 +#define OCI_CLONG 2 + +/* lob types */ + +#define OCI_BLOB 1 +#define OCI_CLOB 2 +#define OCI_NCLOB 3 + +/* lob opening mode */ + +#define OCI_LOB_READONLY 1 +#define OCI_LOB_READWRITE 2 + +/* file types */ + +#define OCI_BFILE 1 +#define OCI_CFILE 2 + +/* lob browsing mode */ + +#define OCI_SEEK_SET 1 +#define OCI_SEEK_END 2 +#define OCI_SEEK_CUR 3 + +/* type info types */ + +#define OCI_TIF_TABLE 1 +#define OCI_TIF_VIEW 2 +#define OCI_TIF_TYPE 3 + +/* object type */ + +#define OCI_OBJ_PERSISTENT 1 +#define OCI_OBJ_TRANSIENT 2 +#define OCI_OBJ_VALUE 3 + +/* collection types */ + +#define OCI_COLL_VARRAY 1 +#define OCI_COLL_NESTED_TABLE 2 +#define OCI_COLL_INDEXED_TABLE 3 + +/* pool types */ + +#define OCI_POOL_CONNECTION 1 +#define OCI_POOL_SESSION 2 + +/* AQ message state */ + +#define OCI_AMS_READY 1 +#define OCI_AMS_WAITING 2 +#define OCI_AMS_PROCESSED 3 +#define OCI_AMS_EXPIRED 4 + +/* AQ sequence deviation */ + +#define OCI_ASD_BEFORE 2 +#define OCI_ASD_TOP 3 + +/* AQ message visibility */ + +#define OCI_AMV_IMMEDIATE 1 +#define OCI_AMV_ON_COMMIT 2 + +/* AQ dequeue mode */ + +#define OCI_ADM_BROWSE 1 +#define OCI_ADM_LOCKED 2 +#define OCI_ADM_REMOVE 3 +#define OCI_ADM_REMOVE_NODATA 4 + +/* AQ dequeue navigation */ + +#define OCI_ADN_FIRST_MSG 1 +#define OCI_ADN_NEXT_TRANSACTION 2 +#define OCI_ADN_NEXT_MSG 3 + +/* AQ queue table purge mode */ + +#define OCI_APM_BUFFERED 1 +#define OCI_APM_PERSISTENT 2 +#define OCI_APM_ALL (OCI_APM_BUFFERED | OCI_APM_PERSISTENT) + +/* AQ queue table grouping mode */ + +#define OCI_AGM_NONE 0 +#define OCI_AGM_TRANSACTIONNAL 1 + +/* AQ queue table type */ + +#define OCI_AQT_NORMAL 0 +#define OCI_AQT_EXCEPTION 1 +#define OCI_AQT_NON_PERSISTENT 2 + +/* direct path processing return status */ + +#define OCI_DPR_COMPLETE 1 +#define OCI_DPR_ERROR 2 +#define OCI_DPR_FULL 3 +#define OCI_DPR_PARTIAL 4 +#define OCI_DPR_EMPTY 5 + +/* direct path conversion modes */ + +#define OCI_DCM_DEFAULT 1 +#define OCI_DCM_FORCE 2 + +/* trace size constants */ + +#define OCI_SIZE_TRACE_ID 64 +#define OCI_SIZE_TRACE_MODULE 48 +#define OCI_SIZE_TRACE_ACTION 32 +#define OCI_SIZE_TRACE_INFO 64 + +/* trace types */ + +#define OCI_TRC_IDENTITY 1 +#define OCI_TRC_MODULE 2 +#define OCI_TRC_ACTION 3 +#define OCI_TRC_DETAIL 4 + +/* HA event type */ + +#define OCI_HET_DOWN 0 +#define OCI_HET_UP 1 + +/* HA event source */ +#define OCI_HES_INSTANCE 0 +#define OCI_HES_DATABASE 1 +#define OCI_HES_NODE 2 +#define OCI_HES_SERVICE 3 +#define OCI_HES_SERVICE_MEMBER 4 +#define OCI_HES_ASM_INSTANCE 5 +#define OCI_HES_PRECONNECT 6 + +/* Fail over types */ + +#define OCI_FOT_NONE 1 +#define OCI_FOT_SESSION 2 +#define OCI_FOT_SELECT 4 + +/* fail over notifications */ + +#define OCI_FOE_END 1 +#define OCI_FOE_ABORT 2 +#define OCI_FOE_REAUTH 4 +#define OCI_FOE_BEGIN 8 +#define OCI_FOE_ERROR 16 + +/* fail over callback return code */ + +#define OCI_FOC_OK 0 +#define OCI_FOC_RETRY 25410 + +/* hash tables support */ + +#define OCI_HASH_STRING 1 +#define OCI_HASH_INTEGER 2 +#define OCI_HASH_POINTER 3 + +/* transaction types */ + +#define OCI_TRS_NEW 0x00000001 +#define OCI_TRS_READONLY 0x00000100 +#define OCI_TRS_READWRITE 0x00000200 +#define OCI_TRS_SERIALIZABLE 0x00000400 +#define OCI_TRS_LOOSE 0x00010000 +#define OCI_TRS_TIGHT 0x00020000 + +/* format types */ + +#define OCI_FMT_DATE 1 +#define OCI_FMT_TIMESTAMP 2 +#define OCI_FMT_NUMERIC 3 +#define OCI_FMT_BINARY_DOUBLE 4 +#define OCI_FMT_BINARY_FLOAT 5 + +/* sql function codes */ + +#define OCI_SFC_CREATE_TABLE 1 +#define OCI_SFC_SET_ROLE 2 +#define OCI_SFC_INSERT 3 +#define OCI_SFC_SELECT 4 +#define OCI_SFC_UPDATE 5 +#define OCI_SFC_DROP_ROLE 6 +#define OCI_SFC_DROP_VIEW 7 +#define OCI_SFC_DROP_TABLE 8 +#define OCI_SFC_DELETE 9 +#define OCI_SFC_CREATE_VIEW 10 +#define OCI_SFC_DROP_USER 11 +#define OCI_SFC_CREATE_ROLE 12 +#define OCI_SFC_CREATE_SEQUENCE 13 +#define OCI_SFC_ALTER_SEQUENCE 14 + +#define OCI_SFC_DROP_SEQUENCE 16 +#define OCI_SFC_CREATE_SCHEMA 17 +#define OCI_SFC_CREATE_CLUSTER 18 +#define OCI_SFC_CREATE_USER 19 +#define OCI_SFC_CREATE_INDEX 20 +#define OCI_SFC_DROP_INDEX 21 +#define OCI_SFC_DROP_CLUSTER 22 +#define OCI_SFC_VALIDATE_INDEX 23 +#define OCI_SFC_CREATE_PROCEDURE 24 +#define OCI_SFC_ALTER_PROCEDURE 25 +#define OCI_SFC_ALTER_TABLE 26 +#define OCI_SFC_EXPLAIN 27 +#define OCI_SFC_GRANT 28 +#define OCI_SFC_REVOKE 29 +#define OCI_SFC_CREATE_SYNONYM 30 +#define OCI_SFC_DROP_SYNONYM 31 +#define OCI_SFC_ALTER_SYSTEM_SWITCHLOG 32 +#define OCI_SFC_SET_TRANSACTION 33 +#define OCI_SFC_PLSQL_EXECUTE 34 +#define OCI_SFC_LOCK 35 +#define OCI_SFC_NOOP 36 +#define OCI_SFC_RENAME 37 +#define OCI_SFC_COMMENT 38 +#define OCI_SFC_AUDIT 39 +#define OCI_SFC_NO_AUDIT 40 +#define OCI_SFC_ALTER_INDEX 41 +#define OCI_SFC_CREATE_EXTERNAL_DATABASE 42 +#define OCI_SFC_DROP_EXTERNALDATABASE 43 +#define OCI_SFC_CREATE_DATABASE 44 +#define OCI_SFC_ALTER_DATABASE 45 +#define OCI_SFC_CREATE_ROLLBACK_SEGMENT 46 +#define OCI_SFC_ALTER_ROLLBACK_SEGMENT 47 +#define OCI_SFC_DROP_ROLLBACK_SEGMENT 48 +#define OCI_SFC_CREATE_TABLESPACE 49 +#define OCI_SFC_ALTER_TABLESPACE 50 +#define OCI_SFC_DROP_TABLESPACE 51 +#define OCI_SFC_ALTER_SESSION 52 +#define OCI_SFC_ALTER_USER 53 +#define OCI_SFC_COMMIT_WORK 54 +#define OCI_SFC_ROLLBACK 55 +#define OCI_SFC_SAVEPOINT 56 +#define OCI_SFC_CREATE_CONTROL_FILE 57 +#define OCI_SFC_ALTER_TRACING 58 +#define OCI_SFC_CREATE_TRIGGER 59 +#define OCI_SFC_ALTER_TRIGGER 60 +#define OCI_SFC_DROP_TRIGGER 61 +#define OCI_SFC_ANALYZE_TABLE 62 +#define OCI_SFC_ANALYZE_INDEX 63 +#define OCI_SFC_ANALYZE_CLUSTER 64 +#define OCI_SFC_CREATE_PROFILE 65 +#define OCI_SFC_DROP_PROFILE 66 +#define OCI_SFC_ALTER_PROFILE 67 +#define OCI_SFC_DROP_PROCEDURE 68 + +#define OCI_SFC_ALTER_RESOURCE_COST 70 +#define OCI_SFC_CREATE_SNAPSHOT_LOG 71 +#define OCI_SFC_ALTER_SNAPSHOT_LOG 72 +#define OCI_SFC_DROP_SNAPSHOT_LOG 73 +#define OCI_SFC_DROP_SUMMARY 73 +#define OCI_SFC_CREATE_SNAPSHOT 74 +#define OCI_SFC_ALTER_SNAPSHOT 75 +#define OCI_SFC_DROP_SNAPSHOT 76 +#define OCI_SFC_CREATE_TYPE 77 +#define OCI_SFC_DROP_TYPE 78 +#define OCI_SFC_ALTER_ROLE 79 +#define OCI_SFC_ALTER_TYPE 80 +#define OCI_SFC_CREATE_TYPE_BODY 81 +#define OCI_SFC_ALTER_TYPE_BODY 82 +#define OCI_SFC_DROP_TYPE_BODY 83 +#define OCI_SFC_DROP_LIBRARY 84 +#define OCI_SFC_TRUNCATE_TABLE 85 +#define OCI_SFC_TRUNCATE_CLUSTER 86 +#define OCI_SFC_CREATE_BITMAPFILE 87 +#define OCI_SFC_ALTER_VIEW 88 +#define OCI_SFC_DROP_BITMAPFILE 89 +#define OCI_SFC_SET_CONSTRAINTS 90 +#define OCI_SFC_CREATE_FUNCTION 91 +#define OCI_SFC_ALTER_FUNCTION 92 +#define OCI_SFC_DROP_FUNCTION 93 +#define OCI_SFC_CREATE_PACKAGE 94 +#define OCI_SFC_ALTER_PACKAGE 95 +#define OCI_SFC_DROP_PACKAGE 96 +#define OCI_SFC_CREATE_PACKAGE_BODY 97 +#define OCI_SFC_ALTER_PACKAGE_BODY 98 +#define OCI_SFC_DROP_PACKAGE_BODY 99 +#define OCI_SFC_CREATE_DIRECTORY 157 +#define OCI_SFC_DROP_DIRECTORY 158 +#define OCI_SFC_CREATE_LIBRARY 159 +#define OCI_SFC_CREATE_JAVA 160 +#define OCI_SFC_ALTER_JAVA 161 +#define OCI_SFC_DROP_JAVA 162 +#define OCI_SFC_CREATE_OPERATOR 163 +#define OCI_SFC_CREATE_INDEXTYPE 164 +#define OCI_SFC_DROP_INDEXTYPE 165 +#define OCI_SFC_ALTER_INDEXTYPE 166 +#define OCI_SFC_DROP_OPERATOR 167 +#define OCI_SFC_ASSOCIATE_STATISTICS 168 +#define OCI_SFC_DISASSOCIATE_STATISTICS 169 +#define OCI_SFC_CALL_METHOD 170 +#define OCI_SFC_CREATE_SUMMARY 171 +#define OCI_SFC_ALTER_SUMMARY 172 +#define OCI_SFC_CREATE_DIMENSION 174 +#define OCI_SFC_ALTER_DIMENSION 175 +#define OCI_SFC_DROP_DIMENSION 176 +#define OCI_SFC_CREATE_CONTEXT 177 +#define OCI_SFC_DROP_CONTEXT 178 +#define OCI_SFC_ALTER_OUTLINE 179 +#define OCI_SFC_CREATE_OUTLINE 180 +#define OCI_SFC_DROP_OUTLINE 181 +#define OCI_SFC_UPDATE_INDEXES 182 +#define OCI_SFC_ALTER_OPERATOR 183 + +/* size constants */ + +#define OCI_SIZE_FORMAT 64 +#define OCI_SIZE_BUFFER 512 +#define OCI_SIZE_LONG (64*1024)-1 +#define OCI_SIZE_DATE 45 +#define OCI_SIZE_TIMESTAMP 54 +#define OCI_SIZE_FORMAT_TODATE 14 +#define OCI_SIZE_NULL 4 +#define OCI_SIZE_PRECISION 10 +#define OCI_SIZE_ROWID 23 +#define OCI_SIZE_DIRECTORY 30 +#define OCI_SIZE_FILENAME 255 +#define OCI_SIZE_FORMAT_NUMS 40 +#define OCI_SIZE_FORMAT_NUML 65 +#define OCI_SIZE_OBJ_NAME 128 + +#define OCI_HASH_DEFAULT_SIZE 256 + +/* string constants */ + +#define OCILIB_DRIVER_NAME OTEXT("OCILIB") +#define OCI_STRING_NULL OTEXT("NULL") +#define OCI_STRING_EMPTY OTEXT("") +#define OCI_STRING_FORMAT_DATE OTEXT("YYYY-MM-DD") +#define OCI_STRING_FORMAT_TIME OTEXT("HH24:MI:SS") +#define OCI_STRING_FORMAT_DATETIME OTEXT("YYYY-MM-DD HH24:MI:SS") +#define OCI_STRING_FORMAT_TIMESTAMP OTEXT("YYYY-MM-DD HH24:MI:SS.FF") +#define OCI_STRING_DEFAULT_PREC 3 +#define OCI_STRING_FORMAT_NUM \ + OTEXT("FM99999999999999999999999999999999999990.999999999999999999999999") +#define OCI_STRING_FORMAT_NUM_BDOUBLE OTEXT("%lf") +#define OCI_STRING_FORMAT_NUM_BFLOAT OTEXT("%f") +#define OCI_STRING_FORMAT_NUM_SHORT OTEXT("%hd") +#define OCI_STRING_FORMAT_NUM_INT OTEXT("%d") +#define OCI_STRING_TRUE OTEXT("TRUE") +#define OCI_STRING_FALSE OTEXT("FALSE") +#define OCI_STRING_TRUE_SIZE 4 +#define OCI_STRING_FALSE_SIZE 5 + +#ifdef _WINDOWS + #define OCI_CHAR_SLASH '\\' +#else + #define OCI_CHAR_SLASH '/' +#endif + +/** + * @defgroup OcilibCApiInitialization Initializing the library + * @{ + * + * To use OCILIB, it first needs to be initialized through a call to OCI_Initialize(). + * + * Then, the application connects to server, executes queries... + * + * Finally, OCILIB resources must be released by OCI_Cleanup() + * + * @note + * + * The following objects are automatically freed by the library: + * - Connections + * - pools + * - Statements + * - Type info objects + * - Thread keys + * + * @warning + * + * All other standalone object instances (mutexes, threads, dates, lobs, ...) ARE NOT freed. + * + */ + +/** + * @brief + * Initialize the library + * + * @param err_handler - Pointer to error handler procedure (optional) + * @param lib_path - Oracle shared library path (optional) + * @param mode - Environment mode + * + * Possible values for parameter mode: + * - OCI_ENV_DEFAULT : default mode + * - OCI_ENV_THREADED : multi-threading support + * - OCI_ENV_CONTEXT : thread contextual error handling + * - OCI_ENV_EVENTS : enables events for subscription, HA Events, AQ notifications + * + * @note + * This function must be called before any OCILIB library function. + * + * @warning + * - The parameter 'libpath' is only used if OCILIB has been built with the option OCI_IMPORT_RUNTIME + * - If the parameter 'lib_path' is NULL, the Oracle library is loaded from system environment variables + * + * @warning + * OCI_Initialize() should be called ONCE per application + * + * @return + * TRUE on success otherwise FALSE (only with Oracle runtime loading mode + * if the oracle shared libraries can't be loaded or if OCI subsystem cannot be initialized) + * + */ + +OCI_EXPORT boolean OCI_API OCI_Initialize +( + POCI_ERROR err_handler, + const otext *lib_path, + unsigned int mode +); + +/** + * @brief + * Clean up all resources allocated by the library + * + * @note + * * This function must be the last OCILIB library function call. + * - It deallocates objects not explicitly freed by the program (connections, statements, ...) + * - It unloads the Oracle shared library if it has been dynamically loaded + * + * @warning + * OCI_Cleanup() should be called ONCE per application + * + * @return TRUE + */ + +OCI_EXPORT boolean OCI_API OCI_Cleanup +( + void +); + +/** + * @brief + * Return the version of OCI used for compilation + * + * @note + * - with linkage build option, the version is determined from the oci.h header through different ways + * - with runtime loading build option, the version is set to the highest version + * of OCI needed by OCILIB, not necessarily the real OCI version + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_GetOCICompileVersion +( + void +); + +/** + * @brief + * Return the version of OCI used at runtime + * + * @note + * - with linkage build option, the version is determined from the oci.h header + * through different ways + * - with runtime loading build option, the version determined from the symbols + * dynamically loaded. + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_GetOCIRuntimeVersion +( + void +); + +/** + * @brief + * Return the Oracle shared library import mode + * + * @note + * Possible values are: + * - OCI_IMPORT_MODE_LINKAGE + * - OCI_IMPORT_MODE_RUNTIME + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_GetImportMode +( + void +); + +/** + * @brief + * Return the OCILIB charset type + * + * @note + * Possible values are: + * - OCI_CHAR_ANSI + * - OCI_CHAR_WIDE + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_GetCharset +( + void +); + +/** +* @brief +* Return the current number of bytes allocated internally in the library +* +* @param mem_type : type of memory to request +* +* @note +* Possible values are: +* - OCI_MEM_ORACLE : bytes allocated by Oracle client library +* - OCI_MEM_OCILIB : bytes allocated by OCILIB library +* - OCI_MEM_ORACLE : bytes allocated by all libraries +* +*/ + +OCI_EXPORT big_uint OCI_API OCI_GetAllocatedBytes +( + unsigned int mem_type +); + +/** + * @brief + * Enable or disable Oracle warning notifications + * + * @param value - enable/disable warnings + * + * @note + * Default value is FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_EnableWarnings +( + boolean value +); + +/** + * @brief + * Set the global error user handler + * + * @param handler - Pointer to error handler procedure + * + * @note + * Use this call to change or remove the user callback error handler installed by OCI_Initialize() + * + */ + +OCI_EXPORT boolean OCI_API OCI_SetErrorHandler +( + POCI_ERROR handler +); + +/** + * @brief + * Set the High availability (HA) user handler + * + * @param handler - Pointer to HA handler procedure + * + * @note + * See POCI_HA_HANDLER documentation for more details + * + * @note + * OCI_ENV_EVENTS flag must be passed to OCI_Initialize() to be able to use + * HA events + * + * @warning + * This call is supported from Oracle 10gR2. + * For previous versions, it returns FALSE without throwing any exception. + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_SetHAHandler +( + POCI_HA_HANDLER handler +); + +/** + * @} + */ + +/** + * @defgroup OcilibCApiErrorHandling Error handling + * @{ + * + * OCILIB provides two mechanisms for error handling: + * + * - Global error handling through callbacks. + * - Contextual thread error handling + * + * Exceptions are raised: + * + * - On Oracle OCI API call error + * - On Oracle SQL statement error + * - On Internal OCILIB error (type checking, memory allocations ...) + * - On Oracle warnings (OCI API or SQL) + * + * If an error handler was provided to OCI_Initialize(), when an error occurs, the + * library generates an OCI_Error handle and pass it to the error handler. + * + * In order to use the thread contextual error handling, you must call + * OCI_Initialize() with the flag OCI_ENV_CONTEXT for the mode parameter. When + * activated, error handles are stored per thread and the last error within a + * thread can be retrieved with OCI_GetLastError() + * + * Exception properties are accessible through a set of functions + * + * @note + * The two ways to handle errors are not exclusive and can be mixed. + * + * @note + * Thread contextual error is also available for single thread based applications + * + * @par Oracle Warnings + * + * Oracle warnings are raised through OCI_Error API. + * Such error handles have their error type property (OCI_ErrorGetType()) set to OCI_ERR_WARNING. + * Warning handing is disabled by default. To activate/deactivate it, use OCI_EnableWarnings() + * + * @par Example with callbacks + * @include err.c + * + * @par Example with thread context + * @include err_ctx.c + * + *@par Example of warning handling + * @include err_warning.c + * + */ + +/** + * @brief + * Retrieve the last error or warning occurred within the last OCILIB call + * + * @note + * OCI_GetLastError() is based on thread context and thus OCILIB must be + * initialized with the flag OCI_ENV_CONTEXT + * + * @warning + * OCILIB functions that returns a boolean value to indicate their success : + * - return TRUE if no error occurred OR if a warning occurred + * - return FALSE if an error occurred + * + */ + +OCI_EXPORT OCI_Error * OCI_API OCI_GetLastError +( + void +); + +/** + * @brief + * Retrieve error message from error handle + * + * @param err - Error handle + * + */ + +OCI_EXPORT const otext * OCI_API OCI_ErrorGetString +( + OCI_Error *err +); + +/** + * @brief + * Retrieve the type of error from error handle + * + * @param err - Error handle + * + * @note + * Returns one of the following values: + * + * - OCI_ERR_ORACLE + * - OCI_ERR_OCILIB + * - OCI_ERR_WARNING + * + * @return + * Object type or OCI_UNKNOWN the input handle is NULL + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_ErrorGetType +( + OCI_Error *err +); + +/** + * @brief + * Retrieve Oracle Error code from error handle + * + * @param err - Error handle + * + */ + +OCI_EXPORT int OCI_API OCI_ErrorGetOCICode +( + OCI_Error *err +); + +/** + * @brief + * Retrieve Internal Error code from error handle + * + * @param err - Error handle + * + */ + +OCI_EXPORT int OCI_API OCI_ErrorGetInternalCode +( + OCI_Error *err +); + +/** + * @brief + * Retrieve connection handle within the error occurred + * + * @param err - Error handle + * + */ + +OCI_EXPORT OCI_Connection * OCI_API OCI_ErrorGetConnection +( + OCI_Error *err +); + +/** + * @brief + * Retrieve statement handle within the error occurred + * + * @param err - Error handle + * + * @note + * If the error occurred outside of a statement context, it returns NULL + * + */ + +OCI_EXPORT OCI_Statement * OCI_API OCI_ErrorGetStatement +( + OCI_Error *err +); + +/** + * @brief + * Return the row index which caused an error during statement execution + * + * @param err - Error handle + * + * @warning + * Row index start at 1. + * + * @return + * 0 is the error is not related to array DML otherwise the index of the given + * row which caused the error + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_ErrorGetRow +( + OCI_Error *err +); + +/** + * @} + */ + +/** + * @defgroup OcilibCApiConnections Connecting to Database + * @{ + * + * Connecting to a database server is done with one call to OCI_ConnectionCreate(). + * + * OCI_ConnectionFree() closes the established connection. + * + * Connection properties are accessible through a set of functions + * + * @par Example + * @include conn.c + * + */ + +/** + * @brief + * Create a physical connection to an Oracle database server + * + * @param db - Oracle Service Name + * @param user - Oracle User name + * @param pwd - Oracle User password + * @param mode - Session mode + * + * Possible values for parameter mode : + * - OCI_SESSION_DEFAULT + * - OCI_SESSION_SYSDBA + * - OCI_SESSION_SYSOPER + * - OCI_SESSION_XA + * + * @note + * External credentials are supported by supplying a null value for the + * 'user' and 'pwd' parameters. + * If the param 'db' is NULL then a connection to the default local DB is done + * + * @note + * For parameter 'mode', the possible values are exclusive and cannot be combined + * + * @par Oracle XA support + * + * OCILIB supports Oracle XA connectivity. In order to get a connection using + * the XA interface : + * - For parameter 'db' : pass the value of the 'DB' parameter of the given + * XA connection string passed to the Transaction Processing Monitor (TPM) + * - Pass NULL to the 'user' and 'pwd' parameters + * - Pass the value OCI_SESSION_XA to parameter 'mode' + * + * @par Oracle XA Connection String + * + * The XA connection string used in a transaction monitor to connect to Oracle must + * be compatible with OCILIB : + * + * - the XA parameter 'Objects' MUST be set to 'true' + * - If OCI_ENV_THREADED is passed to OCI_Initialize(), the XA parameter 'Threads' must + * be set to 'true', otherwise to 'false' + * - If OCI_ENV_EVENTS is passed to OCI_Initialize(), the XA parameter 'Events' must + * be set to 'true', otherwise to 'false' + * - As Oracle does not support Unicode UTF16 character set through the XA interface, + * Only OCI_CHARSET_ANSI builds of OCILIB can be used + * - You still can use UTF8 if the NLS_LANG environment variable is set with a valid + * UTF8 NLS value + * - DO NOT USE OCI_CHARSET_WIDE OCILIB builds with XA connections + * + * @note + * On success, a local transaction is automatically created and started ONLY for regular + * standalone connections and connections retrieved from connection pools. + * No transaction is created for a XA connection or q connection retrieved from session pools. + * + * @return + * Connection handle on success or NULL on failure + * + */ + +OCI_EXPORT OCI_Connection * OCI_API OCI_ConnectionCreate +( + const otext *db, + const otext *user, + const otext *pwd, + unsigned int mode +); + +/** + * @brief + * Close a physical connection to an Oracle database server + * + * @param con - Connection handle + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ConnectionFree +( + OCI_Connection *con +); + +/** + * @brief + * Returns TRUE is the given connection is still connected otherwise FALSE + * + * @param con - Connection handle + * + */ + +OCI_EXPORT boolean OCI_API OCI_IsConnected +( + OCI_Connection *con +); + +/** + * @brief + * Return the pointer to user data previously associated with the connection + * + * @param con - Connection handle + * + */ + +OCI_EXPORT void * OCI_API OCI_GetUserData +( + OCI_Connection *con +); + +/** + * @brief + * Associate a pointer to user data to the given connection + * + * @param con - Connection handle + * @param data - User data pointer + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_SetUserData +( + OCI_Connection *con, + void *data +); + +/** + * @brief + * Associate a tag to the given connection/session + * + * @param con - Connection handle + * @param tag - user tag string + * + * @note + * Use this call only for connections retrieved from a session pool + * See OCI_PoolGetConnection() for more details + * + * @note + * To untag a session, call OCI_SetSessionTag() with 'tag' parameter set to NULL + * + * @warning + * No error is raised if the connection is a standalone connection or retrieved from a connection + * pool + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_SetSessionTag +( + OCI_Connection *con, + const otext *tag +); + +/** + * @brief + * Return the tag associated the given connection + * + * @param con - Connection handle + * + */ + +OCI_EXPORT const otext * OCI_API OCI_GetSessionTag +( + OCI_Connection *con +); + +/** + * @brief + * Return the name of the connected database/service name + * + * @param con - Connection handle + * + */ + +OCI_EXPORT const otext * OCI_API OCI_GetDatabase +( + OCI_Connection *con +); + +/** + * @brief + * Return the current logged user name + * + * @param con - Connection handle + * + */ + +OCI_EXPORT const otext * OCI_API OCI_GetUserName +( + OCI_Connection *con +); + +/** + * @brief + * Return the current logged user password + * + * @param con - Connection handle + * + */ + +OCI_EXPORT const otext * OCI_API OCI_GetPassword +( + OCI_Connection *con +); + +/** + * @brief + * Change the password of the logged user + * + * @param con - Connection handle + * @param password - New password + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_SetPassword +( + OCI_Connection *con, + const otext *password +); + +/** + * @brief + * Change the password of the given user on the given database + * + * @param db - Oracle Service Name + * @param user - Oracle User name + * @param pwd - Oracle User password + * @param new_pwd - Oracle User New password + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_SetUserPassword +( + const otext *db, + const otext *user, + const otext *pwd, + const otext *new_pwd +); + +/** + * @brief + * Return the current session mode + * + * @param con - Connection handle + * + * @note + * See OCI_ConnectionCreate() for possible values + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_GetSessionMode +( + OCI_Connection *con +); + +/** + * @brief + * Return the connected database server version + * + * @param con - Connection handle + * + */ + +OCI_EXPORT const otext * OCI_API OCI_GetVersionServer +( + OCI_Connection *con +); + +/** + * @brief + * Return the major version number of the connected database server + * + * @param con - Connection handle + * + * @return + * Version number or 0 on failure + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_GetServerMajorVersion +( + OCI_Connection *con +); + +/** + * @brief + * Return the minor version number of the connected database server + * + * @param con - Connection handle + * + * @return + * Version number or 0 on failure + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_GetServerMinorVersion +( + OCI_Connection *con +); + +/** + * @brief + * Return the revision version number of the connected database server + * + * @param con - Connection handle + * + * @return + * Version number or 0 on failure + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_GetServerRevisionVersion +( + OCI_Connection *con +); + +/** + * @brief + * Set the format string for implicit string conversions of the given type + * + * @param con - Connection handle (optional) + * @param type - Type of format + * @param format - Format string + * + * Formats can set at 2 levels: + * - Library level: by passing a NULL Connection handle + * - Connection level: by passing a valid Connection handle + * + * When the library needs to perform a string conversion, it search for a valid format using the + * following order: + * - Connection format + * - Library format + * - Default format + * + * @note + * Possible values of parameter 'type' : + * + * - OCI_FMT_DATE : format used to convert DATE to string + * - OCI_FMT_TIMESTAMP : format used to convert TIMESTAMP to string + * - OCI_FMT_NUMERIC : format used to convert numeric types to string + * - OCI_FMT_BINARY_DOUBLE : format used to convert BINARY_DOUBLE to string + * - OCI_FMT_BINARY FLOAT : format used to convert BINARY_FLOAT to string + * + * @note + * Default format values are : + * - OCI_FMT_DATE : constant OCI_STRING_FORMAT_DATE + * - OCI_FMT_TIMESTAMP : constant OCI_STRING_FORMAT_TIMESTAMP + * - OCI_FMT_NUMERIC : constant OCI_STRING_FORMAT_NUMERIC + * - OCI_FMT_BINARY_DOUBLE : constant OCI_STRING_FORMAT_BINARY_DOUBLE + * - OCI_FMT_BINARY FLOAT : constant OCI_STRING_FORMAT_BINARY_FLOAT + * + * @note + * Conversions are performed by Oracle built-in functions whenever possible. + * For DATE, TIMESTAMP and numeric types, see documentation of Oracle SQL to_char() function for more details + * For BINARY_DOUBLE and BINARY_FLOAT, refer to the C Standard Library printf() family documentation + * + */ + +OCI_EXPORT boolean OCI_API OCI_SetFormat +( + OCI_Connection *con, + unsigned int type, + const otext *format +); + +/** + * @brief + * Return the format string for implicit string conversions of the given type + * + * @param con - Connection handle + * @param type - Type of format + * + * @note + * See OCI_SetFormat() for possible values + * + */ + +OCI_EXPORT const otext * OCI_API OCI_GetFormat +( + OCI_Connection *con, + unsigned int type +); + +/** + * @brief + * Return the current transaction of the connection + * + * @param con - Connection handle + * + * @note + * From v3.9.4, no more default transaction object is created for a new connection + * + */ + +OCI_EXPORT OCI_Transaction * OCI_API OCI_GetTransaction +( + OCI_Connection *con +); + +/** + * @brief + * Set a transaction to a connection + * + * @param con - Connection handle + * @param trans - Transaction handle to assign + * + * @note + * The current transaction (if any) is automatically stopped but the newly assigned is not + * started or resumed + * + * @warning + * Do not set transaction object to XA connection or connection retrieved from a session pool + * + */ + +OCI_EXPORT boolean OCI_API OCI_SetTransaction +( + OCI_Connection *con, + OCI_Transaction *trans +); + +/** + * @brief + * Return the highest Oracle version is supported by the connection + * + * @param con - connection handle + * + * @note + * The highest supported version is the lower version between client and server: + * + * @note + * Returns one of the following values: + * + * - OCI_UNKNOWN + * - OCI_8_0 + * - OCI_8_1 + * - OCI_9_0 + * - OCI_9_2 + * - OCI_10_1 + * - OCI_10_2 + * - OCI_11_1 + * - OCI_11_2 + * - OCI_12_1 + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_GetVersionConnection +( + OCI_Connection *con +); + +/** + * @brief + * Set tracing information to the session of the given connection + * + * @param con - connection handle + * @param trace - trace type + * @param value - trace content + * + * Store current trace information to the given connection handle. + * These information: + * + * - is stored in the system view V$SESSION + * - can be retrieved from the connection property of an OCI_Error handle + * + * @note + * Possible values of parameter 'trace' : + * + * - OCI_TRC_IDENTITY : Specifies the user defined identifier in the session. + * It's recorded in the column CLIENT_IDENTIFIER of the + * system view V$SESSION + * - OCI_TRC_MODULE : name of the current module in the client application. + * It's recorded in the column MODULE of the + * system view V$SESSION + * - OCI_TRC_ACTION : name of the current action within the current module. + * It's recorded in the column ACTION of the + * system view V$SESSION + * - OCI_TRC_DETAIL : Client application additional information. + * It's recorded in the column CLIENT_INFO of the + * system view V$SESSION + * + * @warning + * The system view V$SESSION is updated on Oracle versions >= 10g + * + * @warning + * Oracle limits the size of these traces content and thus OCILIB will truncate + * the given values if needed : + * + * - OCI_TRC_IDENTITY : 64 bytes + * - OCI_TRC_MODULE : 48 bytes + * - OCI_TRC_ACTION : 32 bytes + * - OCI_TRC_DETAIL : 64 bytes + * + */ + +OCI_EXPORT boolean OCI_API OCI_SetTrace +( + OCI_Connection *con, + unsigned int trace, + const otext *value +); + +/** + * @brief + * Get the current trace for the trace type from the given connection. + * + * @param con - connection handle + * @param trace - trace type + * + * @note + * See OCI_SetTrace() for more details. + * + */ + +OCI_EXPORT const otext * OCI_API OCI_GetTrace +( + OCI_Connection *con, + unsigned int trace +); + +/** + * @brief + * Makes a round trip call to the server to confirm that the connection and the server are active. + * + * @param con - Connection handle + * + * @note + * Returns TRUE is the connection is still alive otherwise FALSE + * + * @warning + * This call is supported from Oracle 10g. + * For previous versions, it returns FALSE without throwing any exception. + * + */ + +OCI_EXPORT boolean OCI_API OCI_Ping +( + OCI_Connection *con +); + +/** + * @brief + * Return the Oracle server database name of the connected database/service name + * + * @param con - Connection handle + * + * @warning + * This call is supported from Oracle 10gR2. + * For previous versions, it returns NULL without throwing any exception. + * + */ + +OCI_EXPORT const otext * OCI_API OCI_GetDBName +( + OCI_Connection *con +); + +/** + * @brief + * Return the Oracle server Instance name of the connected database/service name + * + * @param con - Connection handle + * + * @warning + * This call is supported from Oracle 10gR2. + * For previous versions, it returns NULL without throwing any exception. + * + */ + +OCI_EXPORT const otext * OCI_API OCI_GetInstanceName +( + OCI_Connection *con +); + + +/** + * @brief + * Return the Oracle server service name of the connected database/service name + * + * @param con - Connection handle + * + * @warning + * This call is supported from Oracle 10gR2. + * For previous versions, it returns NULL without throwing any exception. + * + */ + +OCI_EXPORT const otext * OCI_API OCI_GetServiceName +( + OCI_Connection *con +); + + +/** + * @brief + * Return the Oracle server machine name of the connected database/service name + * + * @param con - Connection handle + * + * @warning + * This call is supported from Oracle 10gR2. + * For previous versions, it returns NULL without throwing any exception. + * + */ + +OCI_EXPORT const otext * OCI_API OCI_GetServerName +( + OCI_Connection *con +); + + +/** + * @brief + * Return the Oracle server domain name of the connected database/service name + * + * @param con - Connection handle + * + * @warning + * This call is supported from Oracle 10gR2. + * For previous versions, it returns NULL without throwing any exception. + * + */ + +OCI_EXPORT const otext * OCI_API OCI_GetDomainName +( + OCI_Connection *con +); + + +/** + * @brief + * Return the date and time (Timestamp) server instance start of the + * connected database/service name + * + * @param con - Connection handle + * + * @warning + * This call is supported from Oracle 10gR2. + * For previous versions, it returns NULL without throwing any exception. + * + */ + +OCI_EXPORT OCI_Timestamp * OCI_API OCI_GetInstanceStartTime +( + OCI_Connection *con +); + +/** + * @brief + * Verify if the given connection support TAF events + * + * @param con - Connection handle + * + * @note + * Returns TRUE is the connection supports TAF event otherwise FALSE + * + * @warning + * This call is supported from Oracle 10gR2. + * For previous versions, it returns FALSE without throwing any exception. + * + */ + +OCI_EXPORT boolean OCI_API OCI_IsTAFCapable +( + OCI_Connection *con +); + +/** + * @brief + * Set the Transparent Application Failover (TAF) user handler + * + * @param con - Connection handle + * @param handler - Pointer to TAF handler procedure + * + * @note + * See POCI_TAF_HANDLER documentation for more details + * +* @warning + * This call is supported from Oracle 10gR2. + * For previous versions, it returns FALSE without throwing any exception. + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_SetTAFHandler +( + OCI_Connection *con, + POCI_TAF_HANDLER handler +); + +/** + * @brief + * Return the maximum number of statements to keep in the statement cache + * + * @param con - Connection handle + * + * @note + * Default value is 20 (value from Oracle Documentation) + * + * @warning + * Requires Oracle Client 9.2 or above + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_GetStatementCacheSize +( + OCI_Connection *con +); + +/** + * @brief + * Set the maximum number of statements to keep in the statement cache + * + * @param con - Connection handle + * @param value - maximum number of statements in the cache + * + * @warning + * Requires Oracle Client 9.2 or above + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_SetStatementCacheSize +( + OCI_Connection *con, + unsigned int value +); + +/** + * @brief + * Return the default LOB prefetch buffer size for the connection + * + * @param con - Connection handle + * + * @warning + * Requires Oracle Client AND Server 11gR1 or above + * + * @note + * Prefetch size is: + * - number of bytes for BLOBs and BFILEs + * - number of characters for CLOBs. + * + * @note + * Default is 0 (prefetching disabled) + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_GetDefaultLobPrefetchSize +( + OCI_Connection *con +); + +/** + * @brief + * Enable or disable prefetching for all LOBs fetched in the connection + * + * @param con - Connection handle + * @param value - default prefetch buffer size + * + * @note + * If parameter 'value': + * - is == 0, it disables prefetching for all LOBs fetched in the connection. + * - is > 0, it enables prefetching for all LOBs fetched in the connection + * and the given buffer size is used for prefetching LOBs + * + * @note + * LOBs prefetching is disabled by default + * + * @warning + * Requires Oracle Client AND Server 11gR1 or above. + * + * @note + * Prefetch size is: + * - number of bytes for BLOBs and BFILEs + * - number of characters for CLOBs. + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_SetDefaultLobPrefetchSize +( + OCI_Connection *con, + unsigned int value +); + + +/** +* @brief +* Return the maximum number of SQL statements that can be opened in one session +* +* @param con - Connection handle +* +* @warning +* Requires Oracle Client AND Server 12cR1 or above +* +* @note +* the returned value is the same as the db parameter 'open_cursors' from server's parameter file +* +* @note +* Return 0 if the client and server version are < 12cR1 +* +*/ + +OCI_EXPORT unsigned int OCI_API OCI_GetMaxCursors +( + OCI_Connection *con +); + +/** + * @} + */ + +/** + * @defgroup OcilibCApiPools Oracle Pools + * @{ + * + * OCILIB support the connections and sessions pooling features introduced + * in Oracle 9i. + * + * Let's Oracle talk about this features ! + * + * @par Connection pools (from Oracle Call Interface Programmer's Guide) + * + * Connection pooling is the use of a group (the pool) of reusable physical connections + * by several sessions, in order to balance loads. The management of the pool is done + * by OCI, not the application. Applications that can use connection pooling include + * middle-tier applications for Web application servers and e-mail servers. + * + * @par Session Pools (from Oracle Call Interface Programmer's Guide) + * + * Session pooling means that the application will create and maintain a group of stateless + * sessions to the database. These sessions will be handed over to thin clients as requested. + * If no sessions are available, a new one may be created. When the client is done with + * the session, the client will release it to the pool. Thus, the number of sessions in + * the pool can increase dynamically. + * + * @note + * OCILIB implements homogeneous session pools only. + * + * @par When using Pools (from Oracle Call Interface Programmer's Guide) + * + * If database sessions are not reusable by mid-tier threads (that is, they are stateful) + * and the number of back-end server processes may cause scaling problems on the database, + * use OCI connection pooling. + * + * If database sessions are reusable by mid-tier threads (that is, they are stateless) + * and the number of back-end server processes may cause scaling problems on the database, + * use OCI session pooling. + * + * If database sessions are not reusable by mid-tier threads (that is, they are stateful) + * and the number of back-end server processes will never be large enough to potentially + * cause any scaling issue on the database, there is no need to use any pooling mechanism. + * + * @par Oracle 8i support + * + * Pooling has bee introduced in : + * - 9iR1 for connection pools + * - 9iR2 for session pools + * For Oracle 8i, OCILIB implements its own pooling mechanism in order to remain compatible + * with older versions. But sessions pools then are handled as connection pools + * + * @par Example + * @include pool.c + * + */ + +/** + * @brief + * Create an Oracle pool of connections or sessions + * + * @param db - Oracle Service Name + * @param user - Oracle User name + * @param pwd - Oracle User password + * @param type - Type of pool + * @param mode - Session mode + * @param min_con - minimum number of connections/sessions that can be opened. + * @param max_con - maximum number of connections/sessions that can be opened. + * @param incr_con - next increment for connections/sessions to be opened + * + * Possible values for parameter 'type': + * - OCI_POOL_CONNECTION + * - OCI_POOL_SESSION + * + * Possible values for parameter 'mode': + * - OCI_SESSION_DEFAULT + * - OCI_SESSION_SYSDAB + * - OCI_SESSION_SYSOPER + * + * @note + * External credentials are supported by supplying a null value for the 'user' + * and 'pwd' parameters + * If the param 'db' is NULL then a connection to the default local DB is done + * + * @return + * Connection or session pool handle on success or NULL on failure + * + */ + +OCI_EXPORT OCI_Pool * OCI_API OCI_PoolCreate +( + const otext *db, + const otext *user, + const otext *pwd, + unsigned int type, + unsigned int mode, + unsigned int min_con, + unsigned int max_con, + unsigned int incr_con +); + +/** + * @brief + * Destroy a pool object + * + * @param pool - Pool handle + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_PoolFree +( + OCI_Pool *pool +); + +/** + * @brief + * Get a connection from the pool + * + * @param pool - Pool handle + * @param tag - user tag string + * + * @par Session tagging + * + * Session pools have a nice feature that is 'session tagging' + * It's possible to tag a session with a string identifier + * when the session is returned to the pool, it keeps its tags. + * When requesting a connection from the session pool, it's + * possible to request a session that has the given 'tag' parameter + * If one exists, it is returned. If not and if an untagged session + * is available, it is then returned. So check the connection tag + * property with OCI_GetSessionTag() to find out if the returned + * connection is tagged or not. + * + * This features is described in the OCI developer guide as the following : + * + * "The tags provide a way for users to customize sessions in the pool. + * A client may get a default or untagged session from a pool, set certain + * attributes on the session (such as NLS settings), and return the session + * to the pool, labeling it with an appropriate tag. + * The user may request a session with the same tags in order to have a + * session with the same attributes" + * + * @return + * Connection handle otherwise NULL on failure + */ + +OCI_EXPORT OCI_Connection * OCI_API OCI_PoolGetConnection +( + OCI_Pool *pool, + const otext *tag +); + +/** + * @brief + * Get the idle timeout for connections/sessions in the pool + * + * @param pool - Pool handle + * + * @note + * Connections/sessions idle for more than this time value (in seconds) is terminated + * + * @note + * Timeout is not available for internal pooling implementation (client < 9i) + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_PoolGetTimeout +( + OCI_Pool *pool +); + +/** + * @brief + * Set the connections/sessions idle timeout + * + * @param pool - Pool handle + * @param value - Timeout value + * + * @note + * connections/sessions idle for more than this time value (in seconds) is terminated + * + * @note + * This call has no effect if pooling is internally implemented (client < 9i) + * + */ + +OCI_EXPORT boolean OCI_API OCI_PoolSetTimeout +( + OCI_Pool *pool, + unsigned int value +); + +/** + * @brief + * Get the waiting mode used when no more connections/sessions are available + * from the pool + * + * @param pool - Pool handle + * + * @return + * - FALSE to wait for an available object if the pool is saturated + * - TRUE to not wait for an available object + * + */ + +OCI_EXPORT boolean OCI_API OCI_PoolGetNoWait +( + OCI_Pool *pool +); + +/** + * @brief + * Set the waiting mode used when no more connections/sessions are available + * from the pool + * + * @param pool - Pool handle + * @param value - wait for object + * + * @note + * Pass : + * - FALSE to wait for an available object if the pool is saturated + * - TRUE to not wait for an available object + * + */ + +OCI_EXPORT boolean OCI_API OCI_PoolSetNoWait +( + OCI_Pool *pool, + boolean value +); + +/** + * @brief + * Return the current number of busy connections/sessions + * + * @param pool - Pool handle + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_PoolGetBusyCount +( + OCI_Pool *pool +); + +/** + * @brief + * Return the current number of opened connections/sessions + * + * @param pool - Pool handle + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_PoolGetOpenedCount +( + OCI_Pool *pool +); + +/** + * @brief + * Return the minimum number of connections/sessions that can be opened to the database + * + * @param pool - Pool handle + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_PoolGetMin +( + OCI_Pool *pool +); + +/** + * @brief + * Return the maximum number of connections/sessions that can be opened to the database + * + * @param pool - Pool handle + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_PoolGetMax +( + OCI_Pool *pool +); + +/** + * @brief + * Return the increment for connections/sessions to be opened to the database when the pool is + * not full + * + * @param pool - Pool handle + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_PoolGetIncrement +( + OCI_Pool *pool +); + +/** + * @brief + * Return the maximum number of statements to keep in the pool statement cache + * + * @param pool - Pool handle + * + * @note + * Default value is 20 (value from Oracle Documentation) + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_PoolGetStatementCacheSize +( + OCI_Pool *pool +); + +/** + * @brief + * Set the maximum number of statements to keep in the pool statement cache + * + * @param pool - Pool handle + * @param value - maximum number of statements in the cache + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_PoolSetStatementCacheSize +( + OCI_Pool *pool, + unsigned int value +); + +/** + * @} + */ + +/** + * @defgroup OcilibCApiTransactions Managing transactions + * @{ + * + * OCILIB supports local and global transactions. + * + * Local transactions are implicit within connection objects and there is no + * specific call or programming step for using it. + * + * In order to control changes made in the database: + * + * - OCI_Commit() validates current pending modifications + * - OCI_Rollback() discards current pending modifications + * + * OCILIB supports a feature called 'Auto Commit' that performs an implicit and + * automatic commit call after every execute call + * + * @note + * Those actions are executed within a connection context and not directly to a transaction. + * + * @warning + * Global transactions are optional and are designed for distributed or global + * transaction environments. + * + * OCILIB supports them by : + * + * - Creating/Destroying explicitly a transaction object + * - Starting/Stopping/Resuming explicitly the transaction + * - Preparing the transaction for specific calls + * + */ + +/** + * @brief + * Commit current pending changes + * + * @param con - Connection handle + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_Commit +( + OCI_Connection *con +); + +/** + * @brief + * Cancel current pending changes + * + * @param con - Connection handle + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_Rollback +( + OCI_Connection *con +); + +/** + * @brief + * Enable / disable auto commit mode + * + * The auto commit mode allows commit changes after every executed SQL order + * + * @param con - Connection handle + * @param enable - Enable (TRUE) or disable (FALSE) + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_SetAutoCommit +( + OCI_Connection *con, + boolean enable +); + +/** + * @brief + * Get current auto commit mode status + * + * @param con - Connection handle + * + * @return + * TRUE if auto commit mode is activated otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_GetAutoCommit +( + OCI_Connection *con +); + +/** + * @brief + * Create a new global transaction or a serializable/read-only local transaction + * + * @param con - Connection handle + * @param timeout - Time that a transaction stays inactive after being stopped + * @param mode - Transaction mode + * @param pxid - pointer to a global transaction identifier structure + * + * + * @note + * The parameter 'mode' can be one of the following values : + * + * - Global transactions: + * - OCI_TRS_NEW : By default starts a new, tightly coupled and + * migratable branch. + * - OCI_TRS_TIGHT : explicitly specifies a tightly coupled branch + * - OCI_TRS_LOOSE : specifies a loosely coupled branch + * + * - Global and local transactions : + * - OCI_TRS_READONLY - start a read-only transaction + * - OCI_TRS_READWRITE - start a read-write transaction + * - OCI_TRS_SERIALIZABLE : start a serializable transaction + * + * @note + * For local transaction: + * - pass a NULL value for pxid + * + */ + +OCI_EXPORT OCI_Transaction * OCI_API OCI_TransactionCreate +( + OCI_Connection *con, + unsigned int timeout, + unsigned int mode, + OCI_XID *pxid +); + +/** + * @brief + * Free current transaction + * + * @param trans - Connection handle + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_TransactionFree +( + OCI_Transaction *trans +); + +/** + * @brief + * Start global transaction + * + * @param trans - Connection handle + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_TransactionStart +( + OCI_Transaction *trans +); + +/** + * @brief + * Stop current global transaction + * + * @param trans - Connection handle + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_TransactionStop +( + OCI_Transaction *trans +); + +/** + * @brief + * Resume a stopped global transaction + * + * @param trans - Global transaction handle + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_TransactionResume +( + OCI_Transaction *trans +); + +/** + * @brief + * Prepare a global transaction validation + * + * @param trans - Global transaction handle + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_TransactionPrepare +( + OCI_Transaction *trans +); + +/** + * @brief + * Cancel the prepared global transaction validation + * + * @param trans - Global transaction handle + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_TransactionForget +( + OCI_Transaction *trans +); + +/** + * @brief + * Return global transaction mode. + * + * @note: + * see OCI_TransactionCreate() for possible values + * + * @param trans - Global transaction handle + * + * @return + * Transaction mode or OCI_UNKNOW if trans is NULL + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_TransactionGetMode +( + OCI_Transaction *trans +); + +/** + * @brief + * Return global transaction Timeout + * + * @param trans - Global transaction handle + * + * @return + * Transaction timeout or 0 if trans is NULL + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_TransactionGetTimeout +( + OCI_Transaction *trans +); + +/** + * @} + */ + +/** + * @defgroup OcilibCApiStatements Executing statements + * @{ + * + * Executing SQL statements or PL/SQL blocks is really simple with OCILIB. + * + * First, call OCI_StatementCreate() to allocate a statement handle. Then : + * + * - Prepare the SQL with OCI_Prepare() + * - Parse and execute it with OCI_Execute() + * + * These two steps can be done together by calling OCI_ExecuteStmt() that + * prepares and executes in one go. + * + * To find out if the statement has affected any rows, call OCI_GetAffectedRows() + * + * Finally, release the statement and its resources with OCI_StatementFree() + * + * @note + * A statement can be prepared once and executed as many times as needed (see + * Binding variables section) + * + * @note + * An OCI_Statement can be used to prepare and/or execute different SQL and PL/SQL + * statements as many times as needed. + * For example, if the SQL processing of an application is sequential, only + * one statement handle is required + * + * @note + * OCILIB supports nested levels of SQL statement processing. + * An application can loop through the resultset of the statement handle A, + * executing statement B and fetching statement C at every loop, and so on ... + * + * @par Example + * @include exec.c + * + */ + +/** + * @brief + * Create a statement object and return its handle + * + * @param con - Connection handle + * + * @return + * A statement handle on success otherwise NULL + * + */ + +OCI_EXPORT OCI_Statement * OCI_API OCI_StatementCreate +( + OCI_Connection *con +); + +/** + * @brief + * Free a statement and all resources associated to it (resultsets ...) + * + * @param stmt - Connection handle + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_StatementFree +( + OCI_Statement *stmt +); + +/** + * @brief + * Prepare a SQL statement or PL/SQL block. + * + * @param stmt - Statement handle + * @param sql - SQL order or PL/SQL block + * + * @note + * Do not call this function for fetched statements (REF cursors) + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_Prepare +( + OCI_Statement *stmt, + const otext *sql +); + +/** + * @brief + * Execute a prepared SQL statement or PL/SQL block. + * + * @param stmt - Statement handle + * + * @return + * TRUE on success otherwise FALSE + * + * @warning + * If a SQL warning occurs: + * - the function returns TRUE + * - the SQL warning triggers the global error handler with an OCI_Error having its OCI_ErrorGetType() + * attribute set to OCI_ERR_WARNING + * - If OCILIB is initialized with the OCI_ENV_CONTEXT mode, OCI_GetLastError() will return the OCI_Error + * object corresponding to the warning + * + */ + +OCI_EXPORT boolean OCI_API OCI_Execute +( + OCI_Statement *stmt +); + +/** + * @brief + * Prepare and Execute a SQL statement or PL/SQL block. + * + * @param stmt - Statement handle + * @param sql - SQL order - PL/SQL block + * + * @return + * TRUE on success otherwise FALSE + * + * @warning + * If a SQL warning occurs: + * - the function returns TRUE + * - the SQL warning triggers the global error handler with an OCI_Error having its OCI_ErrorGetType() + * attribute set to OCI_ERR_WARNING + * - If OCILIB is initialized with the OCI_ENV_CONTEXT mode, OCI_GetLastError() will return the OCI_Error + * object corresponding to the warning + * + */ + +OCI_EXPORT boolean OCI_API OCI_ExecuteStmt +( + OCI_Statement *stmt, + const otext *sql +); + +/** + * @brief + * Parse a SQL statement or PL/SQL block. + * + * @param stmt - Statement handle + * @param sql - SQL order - PL/SQL block + * + * @note + * This call sends the SQL or PL/SQL command to the server for parsing only. + * The command is not executed. + * This call is only useful to check is a command is valid or not. + * + * @note + * This call prepares the statement (internal call to OCI_Prepare()) and ask + * the Oracle server to parse its SQL or PL/SQL command. + * OCI_Execute() can be call after OCI_Parse() in order to execute the + * statement, which means that the server will re-parse again the command. + * + * @warning + * Do not use OCI_Parse() unless you're only interested in the parsing result + * because the statement will be parsed again when executed and thus leading to + * unnecessary server round-trips and less performance + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_Parse +( + OCI_Statement *stmt, + const otext *sql +); + +/** + * @brief + * Describe the select list of a SQL select statement. + * + * @param stmt - Statement handle + * @param sql - SELECT sql statement + * + * @note + * This call sends the SELECT SQL order to the server for retrieving the + * description of the select order only. + * The command is not executed. + * This call is only useful to retrieve information on the associated resultset + * Call OCI_GetResultet() after OCI_Describe() to access to SELECT list + * information + * + * @note + * This call prepares the statement (internal call to OCI_Prepare()) and ask + * the Oracle server to describe the output SELECT list. + * OCI_Execute() can be called after OCI_Desbribe() in order to execute the + * statement, which means that the server will parse, and describe again the SQL + * order. + * + * @warning + * Do not use OCI_Desbribe() unless you're only interested in the resultset + * information because the statement will be parsed again when executed and thus + * leading to unnecessary server round-trips and less performance + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_Describe +( + OCI_Statement *stmt, + const otext *sql +); + +/** + * @brief + * Return the last SQL or PL/SQL statement prepared or executed by the statement + * + * @param stmt - Statement handle + * + */ + +OCI_EXPORT const otext * OCI_API OCI_GetSql +( + OCI_Statement *stmt +); + +/** + * @brief + * Return the error position (in terms of characters) in the SQL statement + * where the error occurred in case of SQL parsing error + * + * @param stmt - Statement handle + * + * @note + * Positions start at 1. + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_GetSqlErrorPos +( + OCI_Statement *stmt +); + +/** + * @brief + * Return the number of rows affected by the SQL statement + * + * @param stmt - Statement handle + * + * The returned value is : + * - For UPDATEs : number of rows updated + * - For INSERTs : number of rows inserted + * - For DELETEs : number of rows deleted + * + * @note + * For SELECTs statements, use OCI_GetRowCount() instead + * + * @note + * For PL/SQL blocks performing "select into :": + * - it returns the number of rows selected from PL/SQL + * - Up to version 4.3.0, OCI_Execute() returned FALSE and generated an error ORA-01403 - "No Data Found" + * - From version 4.3.1, OCI_Execute() returns 0 if no data found, otherwise the number of selected rows + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_GetAffectedRows +( + OCI_Statement *stmt +); + +/** + * @brief + * Return the Oracle SQL code the command held by the statement handle + * + * @param stmt - Statement handle + * + * @warning + * OCI_GetSQLCommand() must be called after the statement has be executed + * because that's the server engine that computes the SQL command code + * + * @return + * The SQL command code of the statement otherwise OCI_UNKOWN + */ + +OCI_EXPORT unsigned int OCI_API OCI_GetSQLCommand +( + OCI_Statement *stmt +); + +/** + * @brief + * Return the verb of the SQL command held by the statement handle + * + * @param stmt - Statement handle + * + * @warning + * OCI_GetSQLVerb() must be called after the statement has been executed + * because that's the server engine that computes the SQL verb + * + * @note + * The SQL verb list is available in Oracle documentations and guides + * + * @return + * The SQL command verb of the statement otherwise NULL + */ + +OCI_EXPORT const otext * OCI_API OCI_GetSQLVerb +( + OCI_Statement *stmt +); + +/** + * @} + */ + +/** + * @defgroup OcilibCApiBinding Binding variables and arrays + * @{ + * + * OCILIB supports OCI data binding APIs + * + * Programs variables can be binded to an Oracle SQL PL/SQL statement in order to : + * + * - Provide input data for SQL statement + * - Provide input/output data for PL/SQL blocks + * + * OCILIB provides a set of binding functions to use with: + * + * - Basic data types: string (char/wchar_t *), int, float, double, raw + * - Object data types: lobs, files,longs, dates, cursors, statements, + * timestamps, intervals, objects + * + * To use binding: + * + * - Prepare a statement with OCI_Prepare() (see Executing statements) + * - Bind variables by calling one if the OCI_Bindxxxxx() function for every + * input variable referenced by the SQL statement + * - Setup up values of the program variables + * - Call OCI_Execute() as many times as needed + * - Each OCI_Execute() call may be preceded by an update of the program + * variables (for INSERTs for example) + * + * Bindings can be: + * - IN (host variable are not used anymore after statement execution) + * - OUT (host variable are set during statement execution) + * - IN/OUT (default) + * Use OCI_BindSetDirectionTo() to change a host variable bind direction mode after the binding call but before statement execution. + * Note that each direction mode may have a little overhead depending on the SQL type as OCILIB may have to do checks/conversions/mappings between host variable and buffers. + * Thus, to maximize performances: + * - set direction mode to OCI_BDM_IN if host variable is not updated by statement execution + * - set direction mode to OCI_BDM_OUT if host variable value does not matter prior to statement execution + * - set direction mode to OCI_BDM_IN_OUT when host variable value is used for execution and updated by statement execution + * + * OCILIB supports the OCI array Interface by binding arrays of C scalar types + * and OCILIB object types. + * + * - all types supported the library can be used for array binding except + * OCI_Statement and OCI_Long + * - Array binding is really fast for massive DML operations + * - For string/RAW arrays, the input array MUST BE a contiguous block of data + * and not an array of pointers. So to bind an array of 10 elements for a + * varchar2(30) column, binded variable must be a like array[10][31] + * + * OCILIB does not pre-parse statements (like other frameworks such as JDBC, ...) + * and lets Oracle recognize input variables embedded within the SQL statements. + * + * Bind variables must be preceded in the SQL code by the character ':'. + * + * Oracle and OCILIB supports two ways of binding: + * + * - by name (default mode in OCILIB): Oracle looks for variables in the SQL + * statement by searching their names provided to the binding function. + * So a variable can be binded once and used many times in the statement + * - by position: Oracle binds variables by position, so every variable is + * binded with a position number + * + * OCILIB Default binding mode is OCI_BIND_BY_NAME. + * + * When using binding by position, provide the position to OCI_BindXXXX() call + * through the name parameter. Within this mode the bind name must be the + * position preceded by a semicolon like ':1', ':2', .... + * + * @par Internal Bind allocation mode + * + * Bind variables or arrays can be internally allocated by OCILIB. + * That means that instead of allocating variables or arrays on the stack/heap + * in the user program, bind contents can be allocated internally and thus : + * - minimize the amount of program variables + * - optimize internal memory management for arrays + * + * To do so : + * - Call OCI_SetBindAllocation() with the mode OCI_BAM_INTERNAL + * - pass a NULL variable or array to OCI_BindXXX() calls + * - Retrieve the bind content allocated by OCILIB with OCI_BindGetData() + * + * Internal Bind allocation mode IS compatible with ALL array binding OCI_BindArrayOfxxx() methods. + * + * Internal Bind allocation mode IS NOT compatible with some single variable bind calls : + * - OCI_BindTimestamp() + * - OCI_BindInterval() + * - OCI_BindLob() + * - OCI_BindFile() + * - OCI_BindObject() + * - OCI_BindColl() + * - OCI_BindRef() + * - OCI_BindStatement() + * - OCI_BindLong() + * + * These methods need to know the data sub type (like OCI_CLOB/OCI_BLOB for lobs) in order + * to internally create variables. As these methods prototypes are not passing the sub type, + * calling them with the statement bind mode set to OCI_BAM_INTERNAL will raise + * an OCILIB error of type OCI_ERR_NULL_POINTER + * + * @note + * Rebinding is disabled by default (see OCI_AllowRebinding()) + * When using rebinding feature, host variable re-binded to a previously allocated + * bind MUST be of the SAME data type ! + * + * @par Basic input bind Example + * @include bind.c + * + * @par Array interface Example + * @include array.c + * + * @par Internal Array interface Example + * @include array_internal.c + * + * */ + +/** + * @brief + * Set the input array size for bulk operations + * + * @param stmt - Statement handle + * @param size - Array size + * + * @warning + * Do not use OCI_BindArraySetSize() for PL/SQL tables binding + * + * @note + * OCI_BindArraySetSize() is used to set the size of input bind array when using + * arrays for DML statements. + * OCI_BindArraySetSize() MUST be called to set the maximum size of the arrays + * to bind to the statement before any of its execution. This initial call must + * be bone AFTER OCI_Prepare() and BEFORE any OCI_BindArrayOfxxx() call. + * + * @note + * OCI_BindArraySetSize() can optionally be called before any later OCI_Execute() + * call in order to notify the statement of the exact number of elements + * populating the input arrays for the next execution. The array size passed to + * later OCI_BindArraySetSize() calls cannot be greater than the initial size + * otherwise an exception will be thrown. + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_BindArraySetSize +( + OCI_Statement *stmt, + unsigned int size +); + +/** + * @brief + * Return the current input array size for bulk operations + * + * @param stmt - Statement handle + * + * @return + * Array size value or 0 if OCI_BindArraySetSize() has not been called + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_BindArrayGetSize +( + OCI_Statement *stmt +); + +/** + * @brief + * Allow different host variables to be binded using the same bind name or + * position between executions of a prepared statement + * + * @param stmt - Statement handle + * @param value - Rebinding mode allowed + * + * @note + * Default value is FALSE + * + * @warning + * When using rebinding feature, host variable re-binded to a previously allocated + * bind MUST be of the same data type ! + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_AllowRebinding +( + OCI_Statement *stmt, + boolean value +); + +/** + * @brief + * Indicate if rebinding is allowed on the given statement + * + * @param stmt - Statement handle + * + * @note + * See OCI_AllowRebinding() for more details + * + * @return + * TRUE if allowed otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_IsRebindingAllowed +( + OCI_Statement *stmt +); + +/** +* @brief +* Bind a boolean variable (PL/SQL ONLY) +* +* @param stmt - Statement handle +* @param name - Variable name +* @param data - Pointer to boolean variable +* +* @note +* parameter 'data' can NULL if the statement bind allocation mode +* has been set to OCI_BAM_INTERNAL +* +* @warning +* - OCI_BindBoolean() CAN ONLY BE USED for PL/SQL boolean type when calling PL/SQL procedures/function +* - ONLY supported by Oracle 12c and above ! +* +* @return +* TRUE on success otherwise FALSE +*/ +OCI_EXPORT boolean OCI_API OCI_BindBoolean +( + OCI_Statement *stmt, + const otext *name, + boolean *data +); + +/** +* @brief +* Bind an Number variable +* +* @param stmt - Statement handle +* @param name - Variable name +* @param data - Pointer to short variable +* +* @note +* parameter 'data' can NULL if the statement bind allocation mode +* has been set to OCI_BAM_INTERNAL +* +* @return +* TRUE on success otherwise FALSE +*/ + +OCI_EXPORT boolean OCI_API OCI_BindNumber +( + OCI_Statement *stmt, + const otext *name, + OCI_Number *data +); + +/** +* @brief +* Bind an array of Number +* +* @param stmt - Statement handle +* @param name - Variable name +* @param data - Array of numbers +* @param nbelem - Number of element in the array (PL/SQL table only) +* +* @warning +* Parameter 'nbelem' SHOULD ONLY be USED for PL/SQL tables. +* For regular DML array operations, pass the value 0. +* +* @note +* parameter 'data' can NULL if the statement bind allocation mode +* has been set to OCI_BAM_INTERNAL +* +* @return +* TRUE on success otherwise FALSE +*/ + +OCI_EXPORT boolean OCI_API OCI_BindArrayOfNumbers +( + OCI_Statement *stmt, + const otext *name, + OCI_Number **data, + unsigned int nbelem +); + +/** + * @brief + * Bind an short variable + * + * @param stmt - Statement handle + * @param name - Variable name + * @param data - Pointer to short variable + * + * @note + * parameter 'data' can NULL if the statement bind allocation mode + * has been set to OCI_BAM_INTERNAL + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_BindShort +( + OCI_Statement *stmt, + const otext *name, + short *data +); + +/** + * @brief + * Bind an array of shorts + * + * @param stmt - Statement handle + * @param name - Variable name + * @param data - Array of shorts + * @param nbelem - Number of element in the array (PL/SQL table only) + * + * @warning + * Parameter 'nbelem' SHOULD ONLY be USED for PL/SQL tables. + * For regular DML array operations, pass the value 0. + * + * @note + * parameter 'data' can NULL if the statement bind allocation mode + * has been set to OCI_BAM_INTERNAL + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_BindArrayOfShorts +( + OCI_Statement *stmt, + const otext *name, + short *data, + unsigned int nbelem +); + +/** + * @brief + * Bind an unsigned short variable + * + * @param stmt - Statement handle + * @param name - Variable name + * @param data - Pointer to unsigned short variable + * + * @note + * parameter 'data' can NULL if the statement bind allocation mode + * has been set to OCI_BAM_INTERNAL + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_BindUnsignedShort +( + OCI_Statement *stmt, + const otext *name, + unsigned short *data +); + +/** + * @brief + * Bind an array of unsigned shorts + * + * @param stmt - Statement handle + * @param name - Variable name + * @param data - Array of unsigned shorts + * @param nbelem - Number of element in the array (PL/SQL table only) + * + * @warning + * Parameter 'nbelem' SHOULD ONLY be USED for PL/SQL tables. + * For regular DML array operations, pass the value 0. + * + * @note + * parameter 'data' can NULL if the statement bind allocation mode + * has been set to OCI_BAM_INTERNAL + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_BindArrayOfUnsignedShorts +( + OCI_Statement *stmt, + const otext *name, + unsigned short *data, + unsigned int nbelem +); + +/** + * @brief + * Bind an integer variable + * + * @param stmt - Statement handle + * @param name - Variable name + * @param data - Pointer to int variable + * + * @note + * parameter 'data' can NULL if the statement bind allocation mode + * has been set to OCI_BAM_INTERNAL + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_BindInt +( + OCI_Statement *stmt, + const otext *name, + int *data +); + +/** + * @brief + * Bind an array of integers + * + * @param stmt - Statement handle + * @param name - Variable name + * @param data - Array of int + * @param nbelem - Number of element in the array (PL/SQL table only) + * + * @warning + * Parameter 'nbelem' SHOULD ONLY be USED for PL/SQL tables. + * For regular DML array operations, pass the value 0. + * + * @note + * parameter 'data' can NULL if the statement bind allocation mode + * has been set to OCI_BAM_INTERNAL + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_BindArrayOfInts +( + OCI_Statement *stmt, + const otext *name, + int *data, + unsigned int nbelem +); + +/** + * @brief + * Bind an unsigned integer variable + * + * @param stmt - Statement handle + * @param name - Variable name + * @param data - Pointer to unsigned int variable + * + * @note + * parameter 'data' can NULL if the statement bind allocation mode + * has been set to OCI_BAM_INTERNAL + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_BindUnsignedInt +( + OCI_Statement *stmt, + const otext *name, + unsigned int *data +); + +/** + * @brief + * Bind an array of unsigned integers + * + * @param stmt - Statement handle + * @param name - Variable name + * @param data - Array of unsigned int + * @param nbelem - Number of element in the array (PL/SQL table only) + * + * @warning + * Parameter 'nbelem' SHOULD ONLY be USED for PL/SQL tables. + * For regular DML array operations, pass the value 0. + * + * @note + * parameter 'data' can NULL if the statement bind allocation mode + * has been set to OCI_BAM_INTERNAL + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_BindArrayOfUnsignedInts +( + OCI_Statement *stmt, + const otext *name, + unsigned int *data, + unsigned int nbelem +); + +/** + * @brief + * Bind a big integer variable + * + * @param stmt - Statement handle + * @param name - Variable name + * @param data - Pointer to big int variable + * + * @note + * parameter 'data' can NULL if the statement bind allocation mode + * has been set to OCI_BAM_INTERNAL + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_BindBigInt +( + OCI_Statement *stmt, + const otext *name, + big_int *data +); + +/** + * @brief + * Bind an array of big integers + * + * @param stmt - Statement handle + * @param name - Variable name + * @param data - Array of big int + * @param nbelem - Number of element in the array (PL/SQL table only) + * + * @warning + * Parameter 'nbelem' SHOULD ONLY be USED for PL/SQL tables. + * For regular DML array operations, pass the value 0. + * + * @note + * parameter 'data' can NULL if the statement bind allocation mode + * has been set to OCI_BAM_INTERNAL + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_BindArrayOfBigInts +( + OCI_Statement *stmt, + const otext *name, + big_int *data, + unsigned int nbelem +); + +/** + * @brief + * Bind an unsigned big integer variable + * + * @param stmt - Statement handle + * @param name - Variable name + * @param data - Pointer to unsigned big int variable + * + * @note + * parameter 'data' can NULL if the statement bind allocation mode + * has been set to OCI_BAM_INTERNAL + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_BindUnsignedBigInt +( + OCI_Statement *stmt, + const otext *name, + big_uint *data +); + +/** + * @brief + * Bind an array of unsigned big integers + * + * @param stmt - Statement handle + * @param name - Variable name + * @param data - Array of unsigned big int + * @param nbelem - Number of element in the array (PL/SQL table only) + * + * @warning + * Parameter 'nbelem' SHOULD ONLY be USED for PL/SQL tables. + * For regular DML array operations, pass the value 0. + * + * @note + * parameter 'data' can NULL if the statement bind allocation mode + * has been set to OCI_BAM_INTERNAL + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_BindArrayOfUnsignedBigInts +( + OCI_Statement *stmt, + const otext *name, + big_uint *data, + unsigned int nbelem +); + +/** + * @brief + * Bind a string variable + * + * @param stmt - Statement handle + * @param name - Variable name + * @param data - String to bind + * @param len - Max length of the string (in character without + * the zero null terminal character) + * + * @note + * if len == 0, len is set to the string size + * + * @note + * parameter 'data' can NULL if the statement bind allocation mode + * has been set to OCI_BAM_INTERNAL + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_BindString +( + OCI_Statement *stmt, + const otext *name, + otext *data, + unsigned int len +); + +/** + * @brief + * Bind an array of strings + * + * @param stmt - Statement handle + * @param name - Variable name + * @param data - Array of string + * @param len - Max length of a single string element (in character without + * the zero null terminal character) + * @param nbelem - Number of element in the array (PL/SQL table only) + * + * @warning + * Parameter 'nbelem' SHOULD ONLY be USED for PL/SQL tables. + * For regular DML array operations, pass the value 0. + * + * @note + * parameter 'data' can NULL if the statement bind allocation mode + * has been set to OCI_BAM_INTERNAL + * + * @warning + * if len <= 0, it returns FALSE + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_BindArrayOfStrings +( + OCI_Statement *stmt, + const otext *name, + otext *data, + unsigned int len, + unsigned int nbelem +); + +/** + * @brief + * Bind a raw buffer + * + * @param stmt - Statement handle + * @param name - Variable name + * @param data - buffer to bind + * @param len - Max length of the buffer + * + * @note + * if len <= 0, it returns false + * + * @note + * parameter 'data' can NULL if the statement bind allocation mode + * has been set to OCI_BAM_INTERNAL + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_BindRaw +( + OCI_Statement *stmt, + const otext *name, + void *data, + unsigned int len +); + +/** + * @brief + * Bind an array of raw buffers + * + * @param stmt - Statement handle + * @param name - Variable name + * @param data - Array of buffers + * @param len - Size in bytes on a single RAW array element + * @param nbelem - Number of element in the array (PL/SQL table only) + * + * @warning + * Parameter 'nbelem' SHOULD ONLY be USED for PL/SQL tables. + * For regular DML array operations, pass the value 0. + * + * @note + * The buffer must be a contiguous block of data elements + * + * @note + * If len <= 0, it returns FALSE + * + * @note + * parameter 'data' can NULL if the statement bind allocation mode + * has been set to OCI_BAM_INTERNAL + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_BindArrayOfRaws +( + OCI_Statement *stmt, + const otext *name, + void *data, + unsigned int len, + unsigned int nbelem +); + +/** + * @brief + * Bind a double variable + * + * @param stmt - Statement handle + * @param name - Variable name + * @param data - Pointer to double variable + * + * @note + * parameter 'data' can NULL if the statement bind allocation mode + * has been set to OCI_BAM_INTERNAL + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_BindDouble +( + OCI_Statement *stmt, + const otext *name, + double *data +); + +/** + * @brief + * Bind an array of doubles + * + * @param stmt - Statement handle + * @param name - Variable name + * @param data - Array of double + * @param nbelem - Number of element in the array (PL/SQL table only) + * + * @warning + * Parameter 'nbelem' SHOULD ONLY be USED for PL/SQL tables. + * For regular DML array operations, pass the value 0. + * + * @note + * parameter 'data' can NULL if the statement bind allocation mode + * has been set to OCI_BAM_INTERNAL + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_BindArrayOfDoubles +( + OCI_Statement *stmt, + const otext *name, + double *data, + unsigned int nbelem +); + + +/** + * @brief + * Bind a float variable + * + * @param stmt - Statement handle + * @param name - Variable name + * @param data - Pointer to float variable + * + * @note + * parameter 'data' can NULL if the statement bind allocation mode + * has been set to OCI_BAM_INTERNAL + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_BindFloat +( + OCI_Statement *stmt, + const otext *name, + float *data +); + +/** + * @brief + * Bind an array of floats + * + * @param stmt - Statement handle + * @param name - Variable name + * @param data - Array of float + * @param nbelem - Number of element in the array (PL/SQL table only) + * + * @warning + * Parameter 'nbelem' SHOULD ONLY be USED for PL/SQL tables. + * For regular DML array operations, pass the value 0. + * + * @note + * parameter 'data' can NULL if the statement bind allocation mode + * has been set to OCI_BAM_INTERNAL + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_BindArrayOfFloats +( + OCI_Statement *stmt, + const otext *name, + float *data, + unsigned int nbelem +); + +/** + * @brief + * Bind a date variable + * + * @param stmt - Statement handle + * @param name - Variable name + * @param data - Date handle + * + * @note + * parameter 'data' can NULL if the statement bind allocation mode + * has been set to OCI_BAM_INTERNAL + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_BindDate +( + OCI_Statement *stmt, + const otext *name, + OCI_Date *data +); + +/** + * @brief + * Bind an array of dates + * + * @param stmt - Statement handle + * @param name - Variable name + * @param data - Array of date handle + * @param nbelem - Number of element in the array (PL/SQL table only) + * + * @warning + * Parameter 'nbelem' SHOULD ONLY be USED for PL/SQL tables. + * For regular DML array operations, pass the value 0. + * + * @note + * parameter 'data' can NULL if the statement bind allocation mode + * has been set to OCI_BAM_INTERNAL + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_BindArrayOfDates +( + OCI_Statement *stmt, + const otext *name, + OCI_Date **data, + unsigned int nbelem +); + +/** + * @brief + * Bind a timestamp variable + * + * @param stmt - Statement handle + * @param name - Variable name + * @param data - Timestamp handle + * + * @note + * parameter 'data' CANNOT be NULL whatever the statement bind allocation mode + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_BindTimestamp +( + OCI_Statement *stmt, + const otext *name, + OCI_Timestamp *data +); + +/** + * @brief + * Bind an array of timestamp handles + * + * @param stmt - Statement handle + * @param name - Variable name + * @param data - Array of Timestamp handle + * @param type - Timestamp type + * @param nbelem - Number of element in the array (PL/SQL table only) + * + * @warning + * Parameter 'nbelem' SHOULD ONLY be USED for PL/SQL tables. + * For regular DML array operations, pass the value 0. + * + * @note + * See OCI_TimestampCreate() for possible values of parameter 'type' + * + * @note + * parameter 'data' can NULL if the statement bind allocation mode + * has been set to OCI_BAM_INTERNAL + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_BindArrayOfTimestamps +( + OCI_Statement *stmt, + const otext *name, + OCI_Timestamp **data, + unsigned int type, + unsigned int nbelem +); + +/** + * @brief + * Bind an interval variable + * + * @param stmt - Statement handle + * @param name - Variable name + * @param data - Interval handle + * + * @note + * parameter 'data' CANNOT be NULL whatever the statement bind allocation mode + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_BindInterval +( + OCI_Statement *stmt, + const otext *name, + OCI_Interval *data +); + +/** + * @brief + * Bind an array of interval handles + * + * @param stmt - Statement handle + * @param name - Variable name + * @param data - Array of Interval handle + * @param type - Interval type + * @param nbelem - Number of element in the array (PL/SQL table only) + * + * @warning + * Parameter 'nbelem' SHOULD ONLY be USED for PL/SQL tables. + * For regular DML array operations, pass the value 0. + * + * @note + * See OCI_IntervalCreate() for possible values of parameter 'type' + * + * @note + * parameter 'data' can NULL if the statement bind allocation mode + * has been set to OCI_BAM_INTERNAL + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_BindArrayOfIntervals +( + OCI_Statement *stmt, + const otext *name, + OCI_Interval **data, + unsigned int type, + unsigned int nbelem +); + +/** + * @brief + * Bind a Lob variable + * + * @param stmt - Statement handle + * @param name - Variable name + * @param data - Lob handle + * + * @note + * parameter 'data' CANNOT be NULL whatever the statement bind allocation mode + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_BindLob +( + OCI_Statement *stmt, + const otext *name, + OCI_Lob *data +); + +/** + * @brief + * Bind an array of Lob handles + * + * @param stmt - Statement handle + * @param name - Variable name + * @param data - Array of Lob handle + * @param type - Lob type + * @param nbelem - Number of element in the array (PL/SQL table only) + * + * @warning + * Parameter 'nbelem' SHOULD ONLY be USED for PL/SQL tables. + * For regular DML array operations, pass the value 0. + * + * @note + * See OCI_LobCreate() for possible values of parameter 'type' + * + * @note + * parameter 'data' can NULL if the statement bind allocation mode + * has been set to OCI_BAM_INTERNAL + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_BindArrayOfLobs +( + OCI_Statement *stmt, + const otext *name, + OCI_Lob **data, + unsigned int type, + unsigned int nbelem +); + +/** + * @brief + * Bind a File variable + * + * @param stmt - Statement handle + * @param name - Variable name + * @param data - File handle + * + * @note + * parameter 'data' CANNOT be NULL whatever the statement bind allocation mode + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_BindFile +( + OCI_Statement *stmt, + const otext *name, + OCI_File *data +); + +/** + * @brief + * Bind an array of File handles + * + * @param stmt - Statement handle + * @param name - Variable name + * @param data - Array of File handle + * @param type - File type + * @param nbelem - Number of element in the array (PL/SQL table only) + * + * @warning + * Parameter 'nbelem' SHOULD ONLY be USED for PL/SQL tables. + * For regular DML array operations, pass the value 0. + * + * @note + * See OCI_FileCreate() for possible values of parameter 'type' + * + * @note + * parameter 'data' can NULL if the statement bind allocation mode + * has been set to OCI_BAM_INTERNAL + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_BindArrayOfFiles +( + OCI_Statement *stmt, + const otext *name, + OCI_File **data, + unsigned int type, + unsigned int nbelem +); + +/** + * @brief + * Bind an object (named type) variable + * + * @param stmt - Statement handle + * @param name - Variable name + * @param data - Object handle + * + * @note + * parameter 'data' CANNOT be NULL whatever the statement bind allocation mode + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_BindObject +( + OCI_Statement *stmt, + const otext *name, + OCI_Object *data +); + +/** + * @brief + * Bind an array of object handles + * + * @param stmt - Statement handle + * @param name - Variable name + * @param data - Array of object handle + * @param typinf - type info handle + * @param nbelem - Number of element in the array (PL/SQL table only) + * + * @warning + * Parameter 'nbelem' SHOULD ONLY be USED for PL/SQL tables. + * For regular DML array operations, pass the value 0. + * + * @note + * parameter 'data' can NULL if the statement bind allocation mode + * has been set to OCI_BAM_INTERNAL + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_BindArrayOfObjects +( + OCI_Statement *stmt, + const otext *name, + OCI_Object **data, + OCI_TypeInfo *typinf, + unsigned int nbelem +); + +/** + * @brief + * Bind a Collection variable + * + * @param stmt - Statement handle + * @param name - Variable name + * @param data - Collection handle to bind + * + * @note + * parameter 'data' CANNOT be NULL whatever the statement bind allocation mode + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_BindColl +( + OCI_Statement *stmt, + const otext *name, + OCI_Coll *data +); + +/** + * @brief + * Bind an array of Collection handles + * + * @param stmt - Statement handle + * @param name - Variable name + * @param data - Array of Collection handle + * @param typinf - Type info handle + * @param nbelem - Number of element in the array (PL/SQL table only) + * + * @warning + * Parameter 'nbelem' SHOULD ONLY be USED for PL/SQL tables. + * For regular DML array operations, pass the value 0. + * + * @note + * See OCI_CollCreate() for possible values of parameter 'type' + * + * @note + * parameter 'data' can NULL if the statement bind allocation mode + * has been set to OCI_BAM_INTERNAL + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_BindArrayOfColls +( + OCI_Statement *stmt, + const otext *name, + OCI_Coll **data, + OCI_TypeInfo *typinf, + unsigned int nbelem +); + +/** + * @brief + * Bind a Ref variable + * + * @param stmt - Statement handle + * @param name - Variable name + * @param data - Ref handle to bind + * + * @note + * parameter 'data' CANNOT be NULL whatever the statement bind allocation mode + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_BindRef +( + OCI_Statement *stmt, + const otext *name, + OCI_Ref *data +); + +/** + * @brief + * Bind an array of Ref handles + * + * @param stmt - Statement handle + * @param name - Variable name + * @param data - Array of Ref handle + * @param typinf - type info handle + * @param nbelem - Number of element in the array (PL/SQL table only) + * + * @warning + * Parameter 'nbelem' SHOULD ONLY be USED for PL/SQL tables. + * For regular DML array operations, pass the value 0. + * + * @note + * parameter 'data' can NULL if the statement bind allocation mode + * has been set to OCI_BAM_INTERNAL + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_BindArrayOfRefs +( + OCI_Statement *stmt, + const otext *name, + OCI_Ref **data, + OCI_TypeInfo *typinf, + unsigned int nbelem +); + +/** + * @brief + * Bind a Statement variable (PL/SQL Ref Cursor) + * + * @param stmt - Statement handle + * @param name - Variable name + * @param data - Statement handle to bind + * + * @note + * parameter 'data' CANNOT be NULL whatever the statement bind allocation mode + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_BindStatement +( + OCI_Statement *stmt, + const otext *name, + OCI_Statement *data +); + +/** + * @brief + * Bind a Long variable + * + * @param stmt - Statement handle + * @param name - Variable name + * @param data - Long handle + * @param size - Size of the long buffer in bytes or characters + * + * @note + * Size is expressed in: + * - Bytes for BLONGs + * - Characters for CLONGs + * + * @note + * parameter 'data' CANNOT be NULL whatever the statement bind allocation mode + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_BindLong +( + OCI_Statement *stmt, + const otext *name, + OCI_Long *data, + unsigned int size +); + +/** + * @brief + * Returns the first or next error that occurred within a DML array statement execution + * + * @param stmt - Statement handle + * + * @return + * The first or next error handle otherwise NULL + */ + +OCI_EXPORT OCI_Error * OCI_API OCI_GetBatchError +( + OCI_Statement *stmt +); + +/** + * @brief + * Returns the number of errors that occurred within the last DML array statement + * + * @param stmt - Statement handle + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_GetBatchErrorCount +( + OCI_Statement *stmt +); + +/** + * @brief + * Return the number of binds currently associated to a statement + * + * @param stmt - Statement handle + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_GetBindCount +( + OCI_Statement *stmt +); + +/** + * @brief + * Return the bind handle at the given index in the internal array of bind + * handle + * + * @param stmt - Statement handle + * @param index - Bind position + * + * @note + * Index starts at 1. + * + * @note + * Bind handle are created sequentially. For example, the third call to a + * OCI_BindXXX() generates a bind handle of index 3. + * + * @return + * The bind handle or NULL if index is out of bounds + * + */ + +OCI_EXPORT OCI_Bind * OCI_API OCI_GetBind +( + OCI_Statement *stmt, + unsigned int index +); + +/** + * @brief + * Return a bind handle from its name + * + * @param stmt - Statement handle + * @param name - Bind variable name + * + * @note + * Bind names must include a semicolon at the beginning. + * + * @return + * The bind handle or NULL if not found + * + */ + +OCI_EXPORT OCI_Bind * OCI_API OCI_GetBind2 +( + OCI_Statement *stmt, + const otext *name +); + +/** +* @brief +* Return the index of the bind from its name belonging to the given statement +* +* @param stmt - Statement handle +* @param name - Bind variable name +* +* @warning +* The bind name is case insensitive +* +* @note +* Bind indexes start with 1 in OCILIB +* +* @return +* Bind index on success or zero if the bind does not exists or if statement is NULL +* +*/ + +OCI_EXPORT unsigned int OCI_API OCI_GetBindIndex +( + OCI_Statement *stmt, + const otext *name +); + +/** + * @brief + * Return the name of the given bind + * + * @param bnd - Bind handle + * + */ + +OCI_EXPORT const otext * OCI_API OCI_BindGetName +( + OCI_Bind *bnd +); + + +/** + * @brief + * Set the direction mode of a bind handle + * + * @param bnd - Bind handle + * @param direction - direction mode + * + * @note + * Possible values for parameter 'direction' : + * - OCI_BDM_IN : input values (not modified by the server) + * - OCI_BDM_OUT : output values (modified by the server) + * - OCI_BDM_IN_OUT : input and output values + * + * @note + * Default value is OCI_BDM_IN_OUT + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_BindSetDirection +( + OCI_Bind *bnd, + unsigned int direction +); + +/** + * @brief + * Get the direction mode of a bind handle + * + * @param bnd - Bind handle + * + * @note + * see OCI_BindSetDirection() for more details + * + * return the bind direction mode on success otherwise OCI_UNKNWON + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_BindGetDirection +( + OCI_Bind *bnd +); + +/** + * @brief + * Return the OCILIB type of the given bind + * + * @param bnd - Bind handle + * + * @note + * Possible values are : + * + * - OCI_CDT_NUMERIC : short, int, long long, float, double + * - OCI_CDT_DATETIME : OCI_Date * + * - OCI_CDT_TEXT : otext * + * - OCI_CDT_LONG : OCI_Long * + * - OCI_CDT_CURSOR : OCI_Statement * + * - OCI_CDT_LOB : OCI_Lob * + * - OCI_CDT_FILE : OCI_File * + * - OCI_CDT_TIMESTAMP : OCI_Timestamp * + * - OCI_CDT_INTERVAL : OCI_Interval * + * - OCI_CDT_RAW : void * + * - OCI_CDT_OBJECT : OCI_Object * + * - OCI_CDT_COLLECTION : OCI_Coll * + * - OCI_CDT_REF : OCI_Ref * + * - OCI_CDT_BOOLEAN : boolean + * + * @return + * The column type or OCI_CDT_UNKNOWN on error + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_BindGetType +( + OCI_Bind *bnd +); + +/** + * @brief + * Return the OCILIB object subtype of the given bind + * + * @param bnd - Bind handle + * + * @note + * * This call is valid for the following OCILIB types: + * - OCI_CDT_NUMERIC + * - OCI_CDT_LONG + * - OCI_CDT_LOB + * - OCI_CDT_FILE + * - OCI_CDT_TIMESTAMP + * - OCI_CDT_INTERVAL + * + * For numeric binds the possible values are: + * - OCI_NUM_SHORT + * - OCI_NUM_INT + * - OCI_NUM_BIGINT + * - OCI_NUM_USHORT + * - OCI_NUM_UINT + * - OCI_NUM_BIGUINT + * - OCI_NUM_DOUBLE + * - OCI_NUM_FLOAT + * - OCI_NUM_NUMBER + * + * For OCI_Long type the possible values are: + * - OCI_BLONG + * - OCI_CLONG + * + * For OCI_Lob type the possible values are: + * - OCI_BLOB + * - OCI_CLOB + * - OCI_NCLOB + * + * For OCI_File type the possible values are: + * - OCI_BFILE + * - OCI_CFILE + * + * For OCI_Timestamp type the possible values are: + * - OCI_TIMESTAMP + * - OCI_TIMESTAMP_TZ + * - OCI_TIMESTAMP_LTZ + * + * For OCI_Interval type the possible values are: + * - OCI_INTERVAL_YM + * - OCI_INTERVAL_DS + * + * @note + * For all other OCILIB types, it returns OCI_UNKNOWN + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_BindGetSubtype +( + OCI_Bind *bnd +); + +/** + * @brief + * Return the number of elements of the bind handle + * + * @param bnd - Bind handle + * + * @return + * - For single binds, it returns 1 + * - For array binds, it returns the number of element in the array + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_BindGetDataCount +( + OCI_Bind *bnd +); + +/** + * @brief + * Return the user defined data associated with a bind handle + * + * @param bnd - Bind handle + * + * @return + * - The pointer to variable/array passed to an OCI_BindXXX() or + * OCI_BindArrayOfXXX() call + * + */ + +OCI_EXPORT void * OCI_API OCI_BindGetData +( + OCI_Bind *bnd +); + +/** + * @brief + * Return the statement handle associated with a bind handle + * + * @param bnd - bind handle + * + */ + +OCI_EXPORT OCI_Statement * OCI_API OCI_BindGetStatement +( + OCI_Bind *bnd +); + +/** + * @brief + * Set the actual size of the element held by the given bind handle + * + * @param bnd - bind handle + * @param size - data size + * + * @note + * This call is not mandatory and should ONLY be called for RAWs binds to set + * the real size of the given data if different from the expected column or + * parameter size + * + * @note + * It works as well with string based PL/SQL tables (in or in/out but NOT out) + * even if it's not necessary. + * + * @warning + * For binds of type OCI_CDT_TEXT (strings), the parameter 'size' is expressed in + * number of characters. + * + * @return + * Data size if the bind type is listed above otherwise 0. + * + */ + +OCI_EXPORT boolean OCI_API OCI_BindSetDataSize +( + OCI_Bind *bnd, + unsigned int size +); + +/** + * @brief + * Set the size of the element at the given position in + * the bind input array + * + * @param bnd - bind handle + * @param position - Position in the array + * @param size - data size + * + * @note + * See OCI_BindSetDataSize() for supported data types + * + * @warning + * Before execution, it returns the max default size for the bind and not the real + * data size, unless a custom size has been set with OCI_BindSetDataSizeXXX() + * After execution, it returns the real data size. + * + * @warning + * For binds of type OCI_CDT_TEXT (strings), the parameter 'size' is expressed in + * number of characters. + * + * @return + * Data size if the bind type is listed above otherwise 0. + * + */ + +OCI_EXPORT boolean OCI_API OCI_BindSetDataSizeAtPos +( + OCI_Bind *bnd, + unsigned int position, + unsigned int size +); + +/** + * @brief + * Return the actual size of the element held by the given bind handle + * + * @param bnd - bind handle + * + * @note + * See OCI_BindSetDataSize() for supported data types + * + * @warning + * For binds of type OCI_CDT_TEXT (strings), the returned value is expressed in + * number of characters. + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_BindGetDataSize +( + OCI_Bind *bnd +); + +/** + * @brief + * Return the actual size of the element at the given position in + * the bind input array + * + * @param bnd - bind handle + * @param position - Position in the array + * + * @note + * See OCI_BindSetDataSize() for supported data types + * + * @warning + * For binds of type OCI_CDT_TEXT (strings), the returned value is expressed in + * number of characters. + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_BindGetDataSizeAtPos +( + OCI_Bind *bnd, + unsigned int position +); + +/** + * @brief + * Set the bind variable to null + * + * @param bnd - Bind handle + * + * @note + * There is no notion of null value in C. + * It's necessary to explicitly tell Oracle that the bind has a null value. + * It must be done before an OCI_Execute() call + * + * @note + * For handled based data types (non scalar types), OCILIB performs an extra + * check on handles and set the bind status to null is the handle is null + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_BindSetNull +( + OCI_Bind *bnd +); + +/** + * @brief + * Set to null the entry in the bind variable input array + * + * @param bnd - Bind handle + * @param position - Position in the array + * + * @note + * There is no notion of null value in C. + * It's necessary to explicitly tell Oracle that the bind has a null value. + * It must be done before an OCI_Execute() call + * + * @warning + * Position starts with 1 + * + * @note + * For handled based data types (non scalar types), OCILIB performs an extra + * check on handles and set the bind status to null is the handle is null + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_BindSetNullAtPos +( + OCI_Bind *bnd, + unsigned int position +); + +/** + * @brief + * Set the bind variable to NOT null + * + * @param bnd - Bind handle + * + * @note + * There is no notion of null value in C. + * It's necessary to explicitly tell Oracle that the bind has a null value. + * It must be done before an OCI_Execute() call + * + * @note + * For handled based data types (non scalar types), OCILIB performs an extra + * check on handles and set the bind status to null is the handle is null + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_BindSetNotNull +( + OCI_Bind *bnd +); + +/** + * @brief + * Set to NOT null the entry in the bind variable input array + * + * @param bnd - Bind handle + * @param position - Position in the array + * + * @note + * There is no notion of null value in C. + * It's necessary to explicitly tell Oracle that the bind has a null value. + * It must be done before an OCI_Execute() call + * + * @warning + * Position starts with 1 + * + * @note + * For handled based data types (non scalar types), OCILIB performs an extra + * check on handles and set the bind status to null is the handle is null + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_BindSetNotNullAtPos +( + OCI_Bind *bnd, + unsigned int position +); + +/** + * @brief + * Check if the current value of the binded variable is marked as NULL + * + * @param bnd - Bind handle + * + * @return + * TRUE if it's null otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_BindIsNull +( + OCI_Bind *bnd +); + +/** + * @brief + * Check if the current entry value at the given index of the binded array + * is marked as NULL + * + * @param bnd - Bind handle + * @param position - Position in the array + * + * @warning + * Position starts with 1 + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_BindIsNullAtPos +( + OCI_Bind *bnd, + unsigned int position +); + +/** + * @brief + * Set the charset form of the given character based bind variable + * + * @param bnd - Bind handle + * @param csfrm - charset form + * + * @note + * Possible values are : + * + * - OCI_CSF_DEFAULT : the column has default charset + * - OCI_CSF_NATIONAL: the column has national charset + * + * @note + * This call has to be made after OCI_Prepare() but before OCI_Execute() + * + * @warning + * This call does nothing : + * - if the csform is out of range + * - if the bind type is not OCI_CFT_TEXT or OCI_CDT_LONG + * + * @return + * TRUE on success otherwise FALSE + * + */ + +boolean OCI_API OCI_BindSetCharsetForm +( + OCI_Bind *bnd, + unsigned int csfrm +); + +/** + * @brief + * Get the allocaton mode of a bind handle + * + * @param bnd - Bind handle + * + * @note + * Possible values are : + * - OCI_BAM_EXTERNAL : bind variable is allocated by user code + * - OCI_BAM_INTERNAL : bind variable is allocated internally + * + * return the allocaton mode on success otherwise OCI_UNKNWON + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_BindGetAllocationMode +( + OCI_Bind *bnd +); + +/** + * @} + */ + +/** + * @defgroup OcilibCApiFetching Fetching data + * @{ + * + * OCILIB offers a really easy and smart mechanism to fetch data from a SQL Statement. + * It looks like what's found in JDBC and other object oriented databases frameworks. + * + * ONLY the following statements can return resultsets that can be fetched by host programs: + * - Statements executing SQL SELECT + * - Statements executing SQL UPDATE/DELETE using a RETURNING INTO clause + * - Statements binded to PL/SQL OPEN FOR argument + * - Statements binded to PL/SQL procedure OUT variables + * - Statements implicitly returned from PL/SQL procedure or blocks (new feature in Oracle 12cR1) using + * DBMS_SQL.RETURN_RESULT() + * + * These resultsets are encapsulated in OCILIB by OCI_Resultset objects. + * + * Thus, after any successful call to an OCI_Executexxx() function that executed + * a fetchable statement or filled output bind variables, the resultset can be + * retrieved by calling OCI_GetResultset() + * + * The creation of a OCI_Resultset object consists in : + * + * - Describing the output columns of the resultset + * - Allocating memory to hold the content data + * + * OCILIB supports multi-row fetching for increasing performances. Instead of + * fetching data row by row from the server (that induces lots of round-trips + * between the client and the server), the library prefetches data chunk by + * chunks (default is 20 rows). + * So, less network traffic and better performances. + * These mechanisms are completely hidden from the application which fetches the + * resultset row by row. + * + * Once the Resultset handle is retrieved : + * + * - It can be fetched by calling OCI_FetchNext() as long as it returns TRUE. + * - To retrieve the value of a column, call OCI_GetXXXX() where XXXX is the + * type of data you want to fetch. + * + * @note + * In case of a statement that has executed PL/SQL calls or blocks returning implicit resultsets: + * - OCI_GetResultset() return the first available resultset + * - OCI_GetNextResultset() return the next available resultset until no more resultset available + * + * @par Scrollable Resultsets + * + * Oracle 9i introduced scrollable cursors (resultsets in OCILIB) that can be + * fetched: + * + * - Sequentially in both directions: OCI_FetchPrev() and OCI_FetchNext() + * - To a relative position in the resultset: OCI_FetchSeek() with OCI_SFD_RELATIVE + * - To an absolute position in the resultset: OCI_FetchSeek() with OCI_SFD_ABOSLUTE + * - To the first or last row in the resultset: OCI_FetchFirst() and OCI_FetchLast() + * + * Scrollable statements uses more server and client resources and should only + * be used when necessary. + * + * Resultsets are 'forward only' by default. Call OCI_SetFetchMode() with + * OCI_SFM_SCROLLABLE to enable scrollable resultsets for a given statement. + * + * @warning + * Any use of scrollable fetching functions with a resultset that depends on a + * statement with fetch mode set to OCI_SFM_DEFAULT will fail ! + * + * @warning + * If you intend to use OCI_FetchSeek() on a scrollable statement and if any of the + * selected columns is a ref cursor or a nested table, OCILIB will internally set the + * resultset internal array size to 1 and thus ignore any values set using OCI_SetFetchSize() + * This is performed due to an Oracle bug. + * + * @note + * If the column internal data does not match the requested type, OCILIB tries + * to convert the data when it's possible and throws an error if not. + * + * The properties (columns names, types ...) of the resultset are accessible + * through a set of APIs. + * + * @par Implicit conversion to string types + * + * OCI_GetString() performs an implicit conversion from ANY Oracle types: + * + * - Numerics (based on the current connection handle numeric format) + * - Binary doubles and floats (using the standard C Library functions) + * - OCI_Date : uses OCI_DateToText() with current connection date format + * - OCI_Timestamp : uses OCI_TimestampToText() with current connection date format + * - OCI_Interval : uses OCI_IntervalToText() with Oracle default format + * - OCI_Coll : uses OCI_CollToText() + * - OCI_Object : uses OCI_ObjectToText() + * - OCI_Ref : uses OCI_RefToText() + * - OCI_File : returns "$(folder)/$(filename)" - no content returned + * - OCI_Lob : see note above for binary types + * - OCI_Long : see note above for binary types + * - RAWs : see note above for binary types + * + * @note + * For RAWs and BLOBs attributes, their binary values are converted to hexadecimal strings + * For LONG and CLOBs/NCLOBSs attributes, the whole string content is returned + * + * @note + * The following OCILIB types are not supported for implicit conversion: + * - OCI_Statement + * + * @warning + * For Dates and numerics types, OCILIB uses OCI client calls to perform + * the conversion. + * For binary double and binary floats data types, OCI client functions cannot + * handle the full double range of values. Thus, OCILIB is using the + * standard C library to convert theses data types to string + * + * @par Fetching rows into user structures + * + * It is possible to fetch a complete row into a user defined structure. + * Each column of the resultset is mapped to a structure member. + * The mapping rules are : + * - LOBs (CLOB, NCLOB, BLOB) : OCI_Lob * + * - DATE : OCI_Date * + * - TIMESTAMPS : OCI_Timestamp * + * - INTERVALS : OCI_Interval * + * - LONG, LONG RAW : OCI_Long * + * - REFs : OCI_Ref * + * - CURSOR, RESULSET : OCI_Statement * + * - OBJECTS, UDT : OCI_Object * + * - Character columns (CHAR,VARCHAR, etc..) : otext * + * - All NUMERIC types : + * - default : big_int + * - user defined (see OCI_SetStructNumericType()) + * + * See OCI_GetStruct() and OCI_SetStructNumericType() for more details + * + * @par Fetch Example + * @include fetch.c + * + * @par Fetch Rows into user structures Example + * @include fetch_struct.c + * + * @par Meta data Example + * @include meta.c + * + * @par Ref cursor Example + * @include cursor.c + * + * @par Implicit resultset Example + * @include implicit_resultset.c + * + * @par Scrollable resultset Example + * @include scroll.c + * + */ + +/** + * @brief + * Retrieve the resultset handle from an executed statement + * + * @param stmt - Statement handle + * + * @note + * See @ref OcilibCApiFetching for more details about what statements can return resultsets + * + * @warning + * If the statement has not been prepared and executed, no resultset will be returned + * + * @return + * A resultset handle on success otherwise NULL + * + */ + +OCI_EXPORT OCI_Resultset * OCI_API OCI_GetResultset +( + OCI_Statement *stmt +); + +/** + * @brief + * Free the statement resultsets + * + * @param stmt - Statement handle + * + * @note + * This call is optional. Resultsets are automatically freed when the + * statement is destroyed or when it's reused. + * + * @note + * This function has been introduced for releasing big resultsets when the + * application wants to keep the statement alive and doesn't know when it + * will be destroyed. + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ReleaseResultsets +( + OCI_Statement *stmt +); + +/** + * @brief + * Fetch the next row of the resultset + * + * @param rs - Resultset handle + * + * @note + * OCI_FetchNext() works for normal and scrollable resultsets + * + * @return + * TRUE on success otherwise FALSE if : + * - Empty resultset + * - Last row already fetched + * - An error occurred + * + */ + +OCI_EXPORT boolean OCI_API OCI_FetchNext +( + OCI_Resultset *rs +); + +/** + * @brief + * Fetch the previous row of the resultset + * + * @param rs - Resultset handle + * + * @note + * OCI_FetchPrev() works ONLY for scrollable resultsets + * + * @return + * TRUE on success otherwise FALSE if : + * - Empty resultset + * - First row already fetched + * - An error occurred + * + */ + +OCI_EXPORT boolean OCI_API OCI_FetchPrev +( + OCI_Resultset *rs +); + +/** + * @brief + * Fetch the first row of the resultset + * + * @param rs - Resultset handle + * + * @note + * OCI_FetchFirst() works ONLY for scrollable resultsets + * + * @return + * TRUE on success otherwise FALSE if : + * - Empty resultset + * - An error occurred + *f + */ + +OCI_EXPORT boolean OCI_API OCI_FetchFirst +( + OCI_Resultset *rs +); + +/** + * @brief + * Fetch the last row of the resultset + * + * @param rs - Resultset handle + * + * @note + * OCI_FetchLast() works ONLY for scrollable resultsets + * + * @return + * TRUE on success otherwise FALSE if: + * - Empty resultset + * - An error occurred + * + */ + +OCI_EXPORT boolean OCI_API OCI_FetchLast +( + OCI_Resultset *rs +); + +/** + * @brief + * Custom Fetch of the resultset + * + * @param rs - Resultset handle + * @param mode - Fetch direction + * @param offset - Fetch offset + * + * @note + * Possible values for 'direction' parameter are: + * - OCI_SFD_ABSOLUTE + * - OCI_SFD_RELATIVE + * + * @note + * OCI_FetchSeek() works ONLY for scrollable resultsets + * + * @warning + * If you intend to use OCI_FetchSeek() on a scrollable statement and if any of the + * selected columns is a ref cursor or a nested table, you must set the fetching size + * to 1 using OCI_SetFetchSize() before calling OCI_GetResultset() + * Otherwise OCI_FetchSeek() will fails with a OCI-10002 error + * + * @return + * TRUE on success otherwise FALSE if: + * - Empty resultset + * - An error occurred + * - OCI_SetFetchMode() has not been called with OCI_SFM_SCROLLABLE + * + */ + +OCI_EXPORT boolean OCI_API OCI_FetchSeek +( + OCI_Resultset *rs, + unsigned int mode, + int offset +); + +/** + * @brief + * Retrieve the number of rows fetched so far + * + * @param rs - Resultset handle + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_GetRowCount +( + OCI_Resultset *rs +); + +/** + * @brief + * Retrieve the current row number + * + * @param rs - Resultset handle + * + * @note + * - OCI_GetCurrentRow() returns the current row number starting from 1 + * - If the resultset has not been fetched or if the resultset is empty, it returns 0 + * - If the resultset has been fully fetched, it returns the last fetched row number + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_GetCurrentRow +( + OCI_Resultset *rs +); + +/** + * @brief + * Return the number of columns in the resultset + * + * @param rs - Resultset handle + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_GetColumnCount +( + OCI_Resultset *rs +); + +/** + * @brief + * Return the column object handle at the given index in the resultset + * + * @param rs - Resultset handle + * @param index - Column position + * + * @return + * - Column handle on success + * - NULL if index is out of bounds or on error + * + */ + +OCI_EXPORT OCI_Column * OCI_API OCI_GetColumn +( + OCI_Resultset *rs, + unsigned int index +); + +/** + * @brief + * Return the column object handle from its name in the resultset + * + * @param rs - Resultset handle + * @param name - Column name + * + * @note + * The column name is case insensitive + * + * @return + * - Column handle on success or + * - NULL if no column found with the given name or on error + * + */ + +OCI_EXPORT OCI_Column * OCI_API OCI_GetColumn2 +( + OCI_Resultset *rs, + const otext *name +); + +/** + * @brief + * Return the index of the column in the result from its name + * + * @param rs - Resultset handle + * @param name - Column name + * + * @note + * The column name is case insensitive + * + * @note + * Column indexes start with 1 in OCILIB + * + * @return + * Column index on success or zero on error + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_GetColumnIndex +( + OCI_Resultset *rs, + const otext *name +); + +/** + * @brief + * Return the name of the given column + * + * @param col - Column handle + * + */ + +OCI_EXPORT const otext * OCI_API OCI_ColumnGetName +( + OCI_Column *col +); + +/** + * @brief + * Return the type of the given column + * + * @param col - Column handle + * + * @note + * Possible values are : + * + * - OCI_CDT_NUMERIC : short, int, long long, float, double + * - OCI_CDT_DATETIME : OCI_Date * + * - OCI_CDT_TEXT : otext * + * - OCI_CDT_LONG : OCI_Long * + * - OCI_CDT_CURSOR : OCI_Statement * + * - OCI_CDT_LOB : OCI_Lob * + * - OCI_CDT_FILE : OCI_File * + * - OCI_CDT_TIMESTAMP : OCI_Timestamp * + * - OCI_CDT_INTERVAL : OCI_Interval * + * - OCI_CDT_RAW : void * + * - OCI_CDT_OBJECT : OCI_Object * + * - OCI_CDT_COLLECTION : OCI_Coll * + * - OCI_CDT_REF : OCI_Ref * + * - OCI_CDT_BOOLEAN : boolean + * + * @return + * The column type or OCI_CDT_UNKNOWN if index is out of bounds + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_ColumnGetType +( + OCI_Column *col +); + +/** + * @brief + * Return the charset form of the given column + * + * @param col - Column handle + * + * @note + * Possible values are : + * - OCI_CSF_NONE : the column is not an character or lob column + * - OCI_CSF_DEFAULT : the column has server default charset + * - OCI_CSF_NATIONAL : the column has national server charset + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_ColumnGetCharsetForm +( + OCI_Column *col +); + +/** + * @brief + * Return the Oracle SQL type name of the column data type + * + * @param col - Column handle + * + * @note + * For possible values, consults Oracle Documentation + * + */ + +OCI_EXPORT const otext * OCI_API OCI_ColumnGetSQLType +( + OCI_Column *col +); + +/** + * @brief + * Return the Oracle SQL Full name including precision and size of the + * column data type + * + * @param col - Column handle + * @param buffer - buffer to store the full column type name and size + * @param len - max size of the buffer in characters + * + * @note + * This function returns a description that matches the one given by SQL*Plus + * + * @note + * Return the number of characters written into the buffer + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_ColumnGetFullSQLType +( + OCI_Column *col, + otext *buffer, + unsigned int len +); + +/** + * @brief + * Return the size of the column + * + * @note + * For all types, the size is expressed is bytes, excepted for character + * based columns that were created with a character based size or of type NCHAR/NVARCHAR + * + * @param col - Column handle + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_ColumnGetSize +( + OCI_Column *col +); + +/** + * @brief + * Return the scale of the column for numeric columns + * + * @param col - Column handle + * + */ + +OCI_EXPORT int OCI_API OCI_ColumnGetScale +( + OCI_Column *col +); + +/** + * @brief + * Return the precision of the column for numeric columns + * + * @param col - Column handle + * + */ + +OCI_EXPORT int OCI_API OCI_ColumnGetPrecision +( + OCI_Column *col +); + +/** + * @brief + * Return the fractional precision of the column for timestamp and interval columns + * + * @param col - Column handle + * + */ + +OCI_EXPORT int OCI_API OCI_ColumnGetFractionalPrecision +( + OCI_Column *col +); + +/** + * @brief + * Return the leading precision of the column for interval columns + * + * @param col - Column handle + * + */ + +OCI_EXPORT int OCI_API OCI_ColumnGetLeadingPrecision +( + OCI_Column *col +); + +/** + * @brief + * Return the nullable attribute of the column + * + * @param col - Column handle + * + * @return + * Return TRUE if the column is nullable otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ColumnGetNullable +( + OCI_Column *col +); + +/** + * @brief + * Return TRUE if the length of the column is character-length or FALSE if + * it is byte-length + * + * @param col - Column handle + * + * @note + * This was introduced in Oracle 9i. So for version that are not supporting this + * property, it always return FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ColumnGetCharUsed +( + OCI_Column *col +); + +/** + * @brief + * Return the column property flags + * + * @param col - Column handle + * + * For flags are: + * - OCI_CPF_NONE : The column has no flags or the OCI client does not support this call + * - OCI_CPF_IS_IDENTITY : + * - If Set, the column is an IDENTITY column + * - Otherwise, it is not an IDENTITY column + * - OCI_CPF_IS_GEN_ALWAYS (only if OCI_CPF_IS_IDENTITY is set) : + * - If set, means that the value is "ALWAYS GENERATED" + * - Otherwise mens that the value is "GENERATED BY" + * - OCI_CPF_IS_GEN_BY_DEFAULT_ON_NULL (only if OCI_CPF_IS_IDENTITY is set): + * - If set, means that the value is generated by default on NULL + * + * @note + * This was introduced in Oracle 12cR1. + * It is currently used for identifying Identity columns. + * For earlier versions, it always return OCI_CPF_NONE + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_ColumnGetPropertyFlags +( + OCI_Column *col +); + +/** +* @brief +* Return the column collation ID +* +* @param col - Column handle +* +* Possible values: +* - OCI_CCI_NONE +* - OCI_CCI_NLS_COMP +* - OCI_CCI_NLS_SORT +* - OCI_CCI_NLS_SORT_CI +* - OCI_CCI_NLS_SORT_AI +* - OCI_CCI_NLS_SORT_CS +* - OCI_CCI_NLS_SORT_VAR1 +* - OCI_CCI_NLS_SORT_VAR1_CI +* - OCI_CCI_NLS_SORT_VAR1_AI +* - OCI_CCI_NLS_SORT_VAR1_CS +* - OCI_CCI_BINARY +* - OCI_CCI_BINARY_CI +* - OCI_CCI_BINARY_AI +* +* @note +* This was introduced in Oracle 12cR2. +* For earlier versions, it always return OCI_CCI_NONE +* +*/ + +OCI_EXPORT unsigned int OCI_API OCI_ColumnGetCollationID +( + OCI_Column *col +); + +/** + * @brief + * Return the type information object associated to the column + * + * @param col - Column handle + * + * @note + * This call is used only for Named Object typed and collection columns. + * It returns NULL if the column is not a Named Object or a collection. + * + */ + +OCI_EXPORT OCI_TypeInfo * OCI_API OCI_ColumnGetTypeInfo +( + OCI_Column *col +); + +/** + * @brief + * Return the OCILIB object subtype of a column + * + * @param col - Column handle + * + * @note + * This call is valid for the following OCILIB types: + * + * - OCI_CDT_LONG + * - OCI_CDT_LOB + * - OCI_CDT_FILE + * - OCI_CDT_TIMESTAMP + * - OCI_CDT_INTERVAL + * - OCI_CDT_NUMERIC + * + * For OCI_Long type the possible values are: + * - OCI_BLONG + * - OCI_CLONG + * + * For OCI_Lob type the possible values are: + * - OCI_BLOB + * - OCI_CLOB + * - OCI_NCLOB + * + * For OCI_File type the possible values are: + * - OCI_BFILE + * - OCI_CFILE + * + * For OCI_Timestamp type the possible values are: + * - OCI_TIMESTAMP + * - OCI_TIMESTAMP_TZ + * - OCI_TIMESTAMP_LTZ + * + * For OCI_Interval type the possible values are: + * - OCI_INTERVAL_YM + * - OCI_INTERVAL_DS + * + * For numeric columns the possible values are: + * - OCI_NUM_SHORT + * - OCI_NUM_INT + * - OCI_NUM_BIGINT + * - OCI_NUM_USHORT + * - OCI_NUM_UINT + * - OCI_NUM_BIGUINT + * - OCI_NUM_DOUBLE + * - OCI_NUM_FLOAT + * - OCI_NUM_NUMBER + * + * @warning + * For numeric columns, the value may be not accurate at all! + * OCI does not allow to find out the real SQL precise type of an numeric column (int, real, ...). + * OCI based libraries can only 'guess' some types in some situations : float, binary_float, binary_float, number. + * For example: + * - with the statement 'select 101 from dual', OCI would report numeric type NUMBER. + * - if a column is declared as "INT", OCI would report also NUMBER. + * + * + * @note + * For all other OCILIB types, it returns OCI_UNKNOWN + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_ColumnGetSubType +( + OCI_Column *col +); + +/** + * @brief + * set the numeric data type of the given structure member (identified from position in the + * resultset) to retrieve when calling OCI_GetStruct() + * + * @param rs - Resultset handle + * @param index - Column position + * @param type - Numeric type + * + * @note + * Possible values for parameter 'type' : + * - OCI_NUM_SHORT + * - OCI_NUM_USHORT + * - OCI_NUM_INT + * - OCI_NUM_UINT + * - OCI_NUM_BIGINT + * - OCI_NUM_BIGUINT + * - OCI_NUM_DOUBLE + * - OCI_NUM_FLOAT + * - OCI_NUM_NUMBER + * + * @return + * Return TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_SetStructNumericType +( + OCI_Resultset *rs, + unsigned int index, + unsigned int type +); + +/** + * @brief + * set the numeric data type of the given structure member (identified from column name in the + * resultset) to retrieve when calling OCI_GetStruct() + * + * @param rs - Resultset handle + * @param name - Column name + * @param type - Numeric type + * + * @note + * Possible values for parameter 'type' : + * - OCI_NUM_SHORT + * - OCI_NUM_USHORT + * - OCI_NUM_INT + * - OCI_NUM_UINT + * - OCI_NUM_BIGINT + * - OCI_NUM_BIGUINT + * - OCI_NUM_DOUBLE + * - OCI_NUM_FLOAT + * - OCI_NUM_NUMBER + * + * @return + * Return TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_SetStructNumericType2 +( + OCI_Resultset *rs, + const otext *name, + unsigned int type +); + +/** + * @brief + * Return the row columns values into a single structure + * + * @param rs - Resultset handle + * @param row_struct - pointer to user row structure + * @param row_struct_ind - pointer to user indicator structure + * + * @note + * Structure members values are contextual to the current row. + * The returned values can get out of scope when the current row + * changes when calling any OCI_FecthXXX() calls + * + * @par User row structure + * + * The user structure must have the same members than the resultset. + * Each column in the resultset must have its equivalent in the structure. + * Fields must be in the same order. + * + * The mapping rules are : + * + * - LOBs (CLOB, NCLOB, BLOB) : OCI_Lob * + * - DATE : OCI_Date * + * - TIMESTAMPS : OCI_Timestamp * + * - INTERVALS : OCI_Interval * + * - LONG, LONG RAW : OCI_Long * + * - REFs : OCI_Ref * + * - CURSOR, RESULSET : OCI_Statement * + * - OBJECTS, UDT : OCI_Object * + * - Character columns (CHAR,VARCHAR, etc..) : otext * + * - All NUMERIC types : + * - default : big_int + * - user defined (see OCI_SetStructNumericType()) + * + * The user structure pointer is not mandatory + * + * @par User row indicator structure + + * This structure must have one boolean field per column in + * the resultset and respect in the same member order. + * + * If the value of the given member is TRUE, it means the value in + * the user row structure is NOT NULL, otherwise its NULL + * + * The user indicator structure pointer is mandatory + * + * @return + * Return TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_GetStruct +( + OCI_Resultset *rs, + void *row_struct, + void *row_struct_ind +); + +/** +* @brief +* Return the current Number value of the column at the given index in the resultset +* +* @param rs - Resultset handle +* @param index - Column position +* +* @note +* Column position starts at 1. +* +* @return +* The column current row value or 0 if index is out of bounds +* +*/ +OCI_EXPORT OCI_Number * OCI_API OCI_GetNumber +( + OCI_Resultset *rs, + unsigned int index +); + +/** +* @brief +* Return the current number value of the column from its name in the resultset +* +* @param rs - Resultset handle +* @param name - Column name +* +* @note +* The column name is case insensitive +* +* @return +* The column current row value or 0 if no column found with the given name +* +*/ + +OCI_EXPORT OCI_Number * OCI_API OCI_GetNumber2 +( + OCI_Resultset *rs, + const otext *name +); + + +/** + * @brief + * Return the current short value of the column at the given index in the resultset + * + * @param rs - Resultset handle + * @param index - Column position + * + * @note + * Column position starts at 1. + * + * @return + * The column current row value or 0 if index is out of bounds + * + */ + +OCI_EXPORT short OCI_API OCI_GetShort +( + OCI_Resultset *rs, + unsigned int index +); + +/** + * @brief + * Return the current short value of the column from its name in the resultset + * + * @param rs - Resultset handle + * @param name - Column name + * + * @note + * The column name is case insensitive + * + * @return + * The column current row value or 0 if no column found with the given name + * + */ + +OCI_EXPORT short OCI_API OCI_GetShort2 +( + OCI_Resultset *rs, + const otext *name +); + +/** + * @brief + * Return the current unsigned short value of the column at the given index in the resultset + * + * @param rs - Resultset handle + * @param index - Column position + * + * @note + * Column position starts at 1. + * + * @return + * The column current row value or 0 if index is out of bounds + * + */ + +OCI_EXPORT unsigned short OCI_API OCI_GetUnsignedShort +( + OCI_Resultset *rs, + unsigned int index +); + +/** + * @brief + * Return the current unsigned short value of the column from its name in the resultset + * + * @param rs - Resultset handle + * @param name - Column name + * + * @note + * The column name is case insensitive + * + * @return + * The column current row value or 0 if no column found with the given name + * + */ + +OCI_EXPORT unsigned short OCI_API OCI_GetUnsignedShort2 +( + OCI_Resultset *rs, + const otext *name +); + +/** + * @brief + * Return the current integer value of the column at the given index in the resultset + * + * @param rs - Resultset handle + * @param index - Column position + * + * @note + * Column position starts at 1. + * + * @return + * The column current row value or 0 if index is out of bounds + * + */ + +OCI_EXPORT int OCI_API OCI_GetInt +( + OCI_Resultset *rs, + unsigned int index +); + +/** + * @brief + * Return the current integer value of the column from its name in the resultset + * + * @param rs - Resultset handle + * @param name - Column name + * + * @note + * The column name is case insensitive + * + * @return + * The column current row value or 0 if no column found with the given name + * + */ + +OCI_EXPORT int OCI_API OCI_GetInt2 +( + OCI_Resultset *rs, + const otext *name +); + +/** + * @brief + * Return the current unsigned integer value of the column at the given index in the resultset + * + * @param rs - Resultset handle + * @param index - Column position + * + * @note + * Column position starts at 1. + * + * @return + * The column current row value or 0 if index is out of bounds + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_GetUnsignedInt +( + OCI_Resultset *rs, + unsigned int index +); + +/** + * @brief + * Return the current unsigned integer value of the column from its name in the resultset + * + * @param rs - Resultset handle + * @param name - Column name + * + * @note + * The column name is case insensitive + * + * @return + * The column current row value or 0 if no column found with the given name + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_GetUnsignedInt2 +( + OCI_Resultset *rs, + const otext *name +); + +/** + * @brief + * Return the current big integer value of the column at the given index in the resultset + * + * @param rs - Resultset handle + * @param index - Column position + * + * @note + * Column position starts at 1. + * + * @return + * The column current row value or 0 if index is out of bounds + * + */ + +OCI_EXPORT big_int OCI_API OCI_GetBigInt +( + OCI_Resultset *rs, + unsigned int index +); + +/** + * @brief + * Return the current big integer value of the column from its name in the resultset + * + * @param rs - Resultset handle + * @param name - Column name + * + * @note + * The column name is case insensitive + * + * @return + * The column current row value or 0 if no column found with the given name + * + */ + +OCI_EXPORT big_int OCI_API OCI_GetBigInt2 +( + OCI_Resultset *rs, + const otext *name +); + +/** + * @brief + * Return the current unsigned big integer value of the column at the given index in the resultset + * + * @param rs - Resultset handle + * @param index - Column position + * + * @note + * Column position starts at 1. + * + * @return + * The column current row value or 0 if index is out of bounds + * + */ + +OCI_EXPORT big_uint OCI_API OCI_GetUnsignedBigInt +( + OCI_Resultset *rs, + unsigned int index +); + +/** + * @brief + * Return the current unsigned big integer value of the column from its name in the resultset + * + * @param rs - Resultset handle + * @param name - Column name + * + * @note + * The column name is case insensitive + * + * @return + * The column current row value or 0 if no column found with the given name + * + */ + +OCI_EXPORT big_uint OCI_API OCI_GetUnsignedBigInt2 +( + OCI_Resultset *rs, + const otext *name +); + +/** + * @brief + * Return the current string value of the column at the given index in the resultset + * + * @param rs - Resultset handle + * @param index - Column position + * + * @note + * Column position starts at 1. + * + * @note + * OCI_GetString() performs an implicit conversion from the + * following data types: + * + * - Numerics (based on the current connection handle numeric format) + * - Binary doubles and floats (using the standard C Library functions) + * - OCI_Number (based on the current connection handle numeric format) + * - OCI_Date (based on the current connection handle date format) + * - OCI_Timestamp (based on the current connection handle date format) + * - OCI_Interval (based on Oracle default conversion) + * - OCI_Lob (for BLOBs, output is expressed in hexadecimal) + * - OCI_Long (for BLONGs, output is expressed in hexadecimal) + * - OCI_File ("[directory]/[name]" will be output) + * - OCI_Object (Textual SQL string representation) + * - OCI_Coll (Textual SQL string representation) + * - RAW buffer (expressed in hexadecimal) + * - OCI_Statement (SQL statement string or cursor name) + * + * @return + * The column current row value or NULL if index is out of bounds + * + */ + +OCI_EXPORT const otext * OCI_API OCI_GetString +( + OCI_Resultset *rs, + unsigned int index +); + +/** + * @brief + * Return the current string value of the column from its name in the resultset + * + * @param rs - Resultset handle + * @param name - Column name + * + * @note + * The column name is case insensitive + * + * @return + * The column current row value or NULL if no column found with the given name + * + */ + +OCI_EXPORT const otext * OCI_API OCI_GetString2 +( + OCI_Resultset *rs, + const otext *name +); + +/** + * @brief + * Copy the current raw value of the column at the given index into the specified buffer + * + * @param rs - Resultset handle + * @param index - Column position + * @param buffer - Buffer that receive the raw value + * @param len - Max size of the input buffer in bytes + * + * @note + * Column position starts at 1. + * + * @return + * Number of bytes copied into the buffer on SUCCESS otherwise 0 + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_GetRaw +( + OCI_Resultset *rs, + unsigned int index, + void *buffer, + unsigned int len +); + +/** + * @brief + * Copy the current raw value of the column from its name into the specified buffer + * + * @param rs - Resultset handle + * @param name - Column name + * @param buffer - Buffer that receive the raw value + * @param len - Max size of the input buffer + * + * @note + * The column name is case insensitive + * + * @return + * Number of bytes copied into the buffer on SUCCESS otherwise 0 + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_GetRaw2 +( + OCI_Resultset *rs, + const otext *name, + void *buffer, + unsigned int len +); + +/** + * @brief + * Return the current double value of the column at the given index in the resultset + * + * @param rs - Resultset handle + * @param index - Column position + * + * @note + * Column position starts at 1. + * + * @return + * The column current row value or 0.O if index is out of bounds + * + */ + +OCI_EXPORT double OCI_API OCI_GetDouble +( + OCI_Resultset *rs, + unsigned int index +); + +/** + * @brief + * Return the current double value of the column from its name in the resultset + * + * @param rs - Resultset handle + * @param name - Column name + * + * @note + * The column name is case insensitive + * + * @return + * The column current row value or 0.0 if no column found with the given name + * + */ + +OCI_EXPORT double OCI_API OCI_GetDouble2 +( + OCI_Resultset *rs, + const otext *name +); + +/** + * @brief + * Return the current float value of the column at the given index in the resultset + * + * @param rs - Resultset handle + * @param index - Column position + * + * @note + * Column position starts at 1. + * + * @return + * The column current row value or 0.O if index is out of bounds + * + */ + +OCI_EXPORT float OCI_API OCI_GetFloat +( + OCI_Resultset *rs, + unsigned int index +); + +/** + * @brief + * Return the current float value of the column from its name in the resultset + * + * @param rs - Resultset handle + * @param name - Column name + * + * @note + * The column name is case insensitive + * + * @return + * The column current row value or 0.0 if no column found with the given name + * + */ + +OCI_EXPORT float OCI_API OCI_GetFloat2 +( + OCI_Resultset *rs, + const otext *name +); + +/** + * @brief + * Return the current date value of the column at the given index in the resultset + * + * @param rs - Resultset handle + * @param index - Column position + * + * @note + * Column position starts at 1. + * + * @return + * The column current row value or NULL if index is out of bounds + * + */ + +OCI_EXPORT OCI_Date * OCI_API OCI_GetDate +( + OCI_Resultset *rs, + unsigned int index +); + +/** + * @brief + * Return the current date value of the column from its name in the resultset + * + * @param rs - Resultset handle + * @param name - Column name + * + * @return + * The column current row value or NULL if no column found with the given name + * + */ + +OCI_EXPORT OCI_Date * OCI_API OCI_GetDate2 +( + OCI_Resultset *rs, + const otext *name +); + +/** + * @brief + * Return the current timestamp value of the column at the given index in the resultset + * + * @param rs - Resultset handle + * @param index - Column position + * + * @note + * Column position starts at 1. + * + * @return + * The column current row value or NULL if index is out of bounds + * + */ + +OCI_EXPORT OCI_Timestamp * OCI_API OCI_GetTimestamp +( + OCI_Resultset *rs, + unsigned int index +); + +/** + * @brief + * Return the current timestamp value of the column from its name in the resultset + * + * @param rs - Resultset handle + * @param name - Column name + * + * @return + * The column current row value or NULL if no column found with the given name + * + */ + +OCI_EXPORT OCI_Timestamp * OCI_API OCI_GetTimestamp2 +( + OCI_Resultset *rs, + const otext *name +); + +/** + * @brief + * Return the current interval value of the column at the given index in the resultset + * + * @param rs - Resultset handle + * @param index - Column position + * + * @note + * Column position starts at 1. + * + * @return + * The column current row value or NULL if index is out of bounds + * + */ + +OCI_EXPORT OCI_Interval * OCI_API OCI_GetInterval +( + OCI_Resultset *rs, + unsigned int index +); + +/** + * @brief + * Return the current interval value of the column from its name in the resultset + * + * @param rs - Resultset handle + * @param name - Column name + * + * @return + * The column current row value or NULL if no column found with the given name + * + */ + +OCI_EXPORT OCI_Interval * OCI_API OCI_GetInterval2 +( + OCI_Resultset *rs, + const otext *name +); + +/** + * @brief + * Return the current cursor value (Nested table) of the column at the given index in the resultset + * + * @param rs - Resultset handle + * @param index - Column position + * + * @note + * Column position starts at 1. + * + * @return + * The column current row value or NULL if index is out of bounds + * + */ + +OCI_EXPORT OCI_Statement * OCI_API OCI_GetStatement +( + OCI_Resultset *rs, + unsigned int index +); + +/** + * @brief + * Return the current cursor value of the column from its name in the resultset + * + * @param rs - Resultset handle + * @param name - Column name + * + * @return + * The column current row value or NULL if no column found with the given name + * + */ + +OCI_EXPORT OCI_Statement * OCI_API OCI_GetStatement2 +( + OCI_Resultset *rs, + const otext *name +); + +/** + * @brief + * Return the current lob value of the column at the given index in the resultset + * + * @param rs - Resultset handle + * @param index - Column position + * + * @note + * Column position starts at 1. + * + * @return + * The column current row value or NULL if index is out of bounds + * + */ + +OCI_EXPORT OCI_Lob * OCI_API OCI_GetLob +( + OCI_Resultset *rs, + unsigned int index +); + +/** + * @brief + * Return the current lob value of the column from its name in the resultset + * + * @param rs - Resultset handle + * @param name - Column name + * + * @return + * The column current row value or NULL if no column found with the given name + * + */ + +OCI_EXPORT OCI_Lob * OCI_API OCI_GetLob2 +( + OCI_Resultset *rs, + const otext *name +); + +/** + * @brief + * Return the current File value of the column at the given index in the resultset + * + * @param rs - Resultset handle + * @param index - Column position + * + * @note + * Column position starts at 1. + * + * @return + * The column current row value or NULL if index is out of bounds + * + */ + +OCI_EXPORT OCI_File * OCI_API OCI_GetFile +( + OCI_Resultset *rs, + unsigned int index +); + +/** + * @brief + * Return the current File value of the column from its name in the resultset + * + * @param rs - Resultset handle + * @param name - Column name + * + * @return + * The column current row value or NULL if no column found with the given name + * + */ + +OCI_EXPORT OCI_File * OCI_API OCI_GetFile2 +( + OCI_Resultset *rs, + const otext *name +); + +/** + * @brief + * Return the current Object value of the column at the given index in the resultset + * + * @param rs - Resultset handle + * @param index - Column position + * + * @note + * Column position starts at 1. + * + * @return + * The column current row value or NULL if index is out of bounds + * + */ + +OCI_EXPORT OCI_Object * OCI_API OCI_GetObject +( + OCI_Resultset *rs, + unsigned int index +); + +/** + * @brief + * Return the current Object value of the column from its name in the resultset + * + * @param rs - Resultset handle + * @param name - Column name + * + * @return + * The column current row value or NULL if no column found with the given name + * + */ + +OCI_EXPORT OCI_Object * OCI_API OCI_GetObject2 +( + OCI_Resultset *rs, + const otext *name +); + +/** + * @brief + * Return the current Collection value of the column at the given index in the resultset + * + * @param rs - Resultset handle + * @param index - Column position + * + * @note + * Column position starts at 1. + * + * @return + * The column current row value or NULL if index is out of bounds + * + */ + +OCI_EXPORT OCI_Coll * OCI_API OCI_GetColl +( + OCI_Resultset *rs, + unsigned int index +); + +/** + * @brief + * Return the current Collection value of the column from its name in the resultset + * + * @param rs - Resultset handle + * @param name - Column name + * + * @return + * The column current row value or NULL if no column found with the given name + * + */ + +OCI_EXPORT OCI_Coll * OCI_API OCI_GetColl2 +( + OCI_Resultset *rs, + const otext *name +); + +/** + * @brief + * Return the current Ref value of the column at the given index in the resultset + * + * @param rs - Resultset handle + * @param index - Column position + * + * @note + * Column position starts at 1. + * + * @return + * The column current row value or NULL if index is out of bounds + * + */ + +OCI_EXPORT OCI_Ref * OCI_API OCI_GetRef +( + OCI_Resultset *rs, + unsigned int index +); + +/** + * @brief + * Return the current Ref value of the column from its name in the resultset + * + * @param rs - Resultset handle + * @param name - Column name + * + * @return + * The column current row value or NULL if no column found with the given name + * + */ + +OCI_EXPORT OCI_Ref * OCI_API OCI_GetRef2 +( + OCI_Resultset *rs, + const otext *name +); + +/** + * @brief + * Return the current Long value of the column at the given index in the resultset + * + * @param rs - Resultset handle + * @param index - Column position + * + * @note + * Column position starts at 1. + * + * @return + * The column current row value or NULL if index is out of bounds + * + */ + +OCI_EXPORT OCI_Long * OCI_API OCI_GetLong +( + OCI_Resultset *rs, + unsigned int index +); + +/** + * @brief + * Return the current Long value of the column from its name in the resultset + * + * @param rs - Resultset handle + * @param name - Column name + * + * @return + * The column current row value or NULL if no column found with the given name + * + */ + +OCI_EXPORT OCI_Long * OCI_API OCI_GetLong2 +( + OCI_Resultset *rs, + const otext *name +); + +/** + * @brief + * Check if the current row value is null for the column at the given index in the resultset + * + * @param rs - Resultset handle + * @param index - Column position + * + * @note + * Column position starts at 1. + * + * @return + * TRUE if it's null otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_IsNull +( + OCI_Resultset *rs, + unsigned int index +); + +/** + * @brief + * Return the size of the value of the column at the given index in the resultset + * + * @param rs - Resultset handle + * @param index - Column position + * + * @note + * Column position starts at 1. + * + * @warning + * For binds of type OCI_CDT_TEXT (strings), the returned value is expressed in + * number of characters. + * + * @return value size of 0 if the value is NULL + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_GetDataSize +( + OCI_Resultset *rs, + unsigned int index +); + +/** + * @brief + * Return the size of the value of the column from its name in the resultset + * + * @param rs - Resultset handle + * @param name - Column name + * + * @warning + * For binds of type OCI_CDT_TEXT (strings), the returned value is expressed in + * number of characters. + * + * @return value size of 0 if the value is NULL + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_GetDataSize2 +( + OCI_Resultset *rs, + const otext *name +); + +/** + * @brief + * Check if the current row value is null for the column of the given name in the resultset + * + * @param rs - Resultset handle + * @param name - Column name + * + * @return + * TRUE if it's null otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_IsNull2 +( + OCI_Resultset *rs, + const otext *name +); + +/** + * @brief + * Return the statement handle associated with a resultset handle + * + * @param rs - resultset handle + * + */ + +OCI_EXPORT OCI_Statement * OCI_API OCI_ResultsetGetStatement +( + OCI_Resultset *rs +); + +/** + * @brief + * Return the current row data length of the column at the given index in the resultset + * + * @param rs - Resultset handle + * @param index - Column position + * + * @note + * Column position starts at 1. + * + * @return + * The column current row data length or 0 if index is out of bounds + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_GetDataLength +( + OCI_Resultset *rs, + unsigned int index +); + +/** + * @} + */ + +/** + * @defgroup OcilibCApiPlSql PL/SQL Support + * @{ + * + * OCILIB has a strong PL/SQL support : + * + * - Blocks, procedures and function can be used with OCILIB statements. + * - Ref cursors + * - Nested tables + * - Tables (indexed by integer types) + * - Access to the server side output generated by the DBMS_OUTPUT package + * + * Stored procedures/functions calls, blocks declarations are done like regular + * SQL calls using OCI_Prepare(), OCI_Execute(), OCI_ExecuteStmt() and + * OCI_ExecuteStmtFmt() functions. + * + * All PL/SQL statements must: + * + * - start with a 'begin' or 'declare' keyword + * - end with a 'end;' keyword + * + * Binding Host arrays to PL/SQL tables is done with OCI_BindArrayXXX() calls + * + * @par Using a PL/SQL block with OCILIB + * @include plsql_block.c + * + * @par Binding host arrays to PL/SQL tables parameters of a stored procedure + * @include plsql_table.c + * + * @par Retrieve the output generated by the dbms_output package on the server + * @include output.c + * + */ + +/** + * @brief + * Enable the server output + * + * @param con - Connection handle + * @param bufsize - server buffer max size (server side) + * @param arrsize - number of lines to retrieve per server round-trip + * @param lnsize - maximum size of one line + * + * @note + * This call is equivalent to the command 'set serveroutput on' in SQL*PLUS + * + * @note + * 'bufsize' minimum value is 2000, maximum 1000000 with Oracle < 10.2g and can be unlimited above + * + * @note + * 'lnsize' maximum value is 255 with Oracle < 10g R2 and 32767 above + * + * @warning + * If OCI_ServerEnableOutput() is not called, OCI_ServerGetOutput() will return NULL + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ServerEnableOutput +( + OCI_Connection *con, + unsigned int bufsize, + unsigned int arrsize, + unsigned int lnsize +); + +/** + * @brief + * Disable the server output + * + * @param con - Connection handle + * + * @note + * After this call, OCI_ServerGetOutput() will return NULL. + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ServerDisableOutput +( + OCI_Connection *con +); + +/** + * @brief + * Retrieve one line of the server buffer + * + * @param con - Connection handle + * + * @note + * Internally, OCILIB gets the server buffer through an array of lines in + * order to minimize round-trips with the server + * + * @return + * return a server output buffer line or NULL if the server buffer is empty + * + */ + +OCI_EXPORT const otext * OCI_API OCI_ServerGetOutput +( + OCI_Connection *con +); + +/** + * @} + */ + +/** + * @defgroup OcilibCApiCollections Oracle collections (VARRAYS and Nested Tables) + * @{ + * + * OCILIB supports all Oracle collections: + * + * - PL/SQL Tables: only available in PL/SQL, unbounded, sparse arrays of + homogeneous elements. + * - VARRAYS : available in SQL and PL/SQL, they are bounded arrays of + * homogeneous elements + * - Nested Tables: available in SQL and PL/SQL, they are unbounded arrays of + * homogeneous elements and can become sparse through deletions + * + * PL/SQL tables are implemented by binding regular C arrays with the array + * interface (using OCI_BindArrayOfXXX() calls) + * + * VARRAYS and Nested tables are implemented in OCILIB with the type OCI_Coll. + * It's possible to bind and fetch VARRAYS and Nested tables using OCI_Coll handle. + * + * It's also possible to declare local collections based on some database type without using queries + * + * OCI (and thus OCILIB) offers the possibility to access collection elements : + * + * - directly by index (OCI_CollGetElem() and OCI_CollSetElem()) + * - using an iterator (OCI_Iter) to iterate through the collection + * (OCI_IterGetNext(), OCI_IterGetPrev()) + * + * Collection Items are implemented through the type OCI_Elem and use the series + * of calls OCI_ElemGetXXX() and OCI_ElemSetXXX() to manipulate elements + * content values + * + * @par Example + * @include coll.c + * + */ + +/** + * @brief + * Create a local collection instance + * + * @param typinf - Type info handle of the collection type descriptor + * + * @return + * Return the collection object handle on success otherwise NULL on failure + * + */ + +OCI_EXPORT OCI_Coll * OCI_API OCI_CollCreate +( + OCI_TypeInfo *typinf +); + +/** + * @brief + * Free a local collection + * + * @param coll - Collection handle + * + * @warning + * Only collection created with OCI_CollCreate() should be freed + * by OCI_CollFree() + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_CollFree +( + OCI_Coll *coll +); + +/** + * @brief + * Create an array of Collection object + * + * @param con - Connection handle + * @param typinf - Object type (type info handle) + * @param nbelem - number of elements in the array + * + * @note + * see OCI_ObjectCreate() for more details + * + * @return + * Return the Collection handle array on success otherwise NULL on failure + * + */ + +OCI_EXPORT OCI_Coll ** OCI_API OCI_CollArrayCreate +( + OCI_Connection *con, + OCI_TypeInfo *typinf, + unsigned int nbelem +); + +/** + * @brief + * Free an array of Collection objects + * + * @param colls - Array of Collection objects + * + * @warning + * Only arrays of Collection created with OCI_CollArrayCreate() + * should be freed by OCI_CollArrayFree() + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_CollArrayFree +( + OCI_Coll **colls +); + +/** + * @brief + * Assign a collection to another one + * + * @param coll - Destination Collection handle + * @param coll_src - Source Collection handle + * + * @note + * Oracle proceeds to a deep copy of the collection content + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_CollAssign +( + OCI_Coll *coll, + OCI_Coll *coll_src +); + +/** + * @brief + * Return the type info object associated to the collection + * + * @param coll - Collection handle + * + */ + +OCI_EXPORT OCI_TypeInfo * OCI_API OCI_CollGetTypeInfo +( + OCI_Coll *coll +); + +/** + * @brief + * Return the collection type + * + * @param coll - Collection handle + * + * @note + * Current collection types are: + * + * - OCI_COLL_VARRAY: Oracle VARRAY + * - OCI_COLL_NESTED_TABLE: Oracle Nested Table + * + * @return + * Collection type or OCI_UNKNOWN if the collection handle is null + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_CollGetType +( + OCI_Coll *coll +); + +/** + * @brief + * Returns the maximum number of elements of the given collection. + * + * @param coll - Collection handle + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_CollGetMax +( + OCI_Coll *coll +); + +/** + * @brief + * Returns the total number of elements of the given collection. + * + * @param coll - Collection handle + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_CollGetSize +( + OCI_Coll *coll +); + +/** + * @brief + * Returns the current number of elements of the given collection. + * + * @note + * - For VARRAYs, it returns the same value than OCI_CollGetSize() as VARRAYs cannot contains holes + * - For Nested Tables that are spare collections that can have holes, it returns the total number + * of elements minus the total of deleted elements + * + * @param coll - Collection handle + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_CollGetCount +( + OCI_Coll *coll +); + +/** + * @brief + * Trims the given number of elements from the end of the collection + * + * @param coll - Collection handle + * @param nb_elem - Number of elements to trim + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_CollTrim +( + OCI_Coll *coll, + unsigned int nb_elem +); + +/** + * @brief + * clear all items of the given collection + * + * @param coll - Collection handle + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_CollClear +( + OCI_Coll *coll +); + +/** + * @brief + * Return the element at the given position in the collection + * + * @param coll - Collection handle + * @param index - Index of the destination element + * + * @note + * Collection indexes start at position 1. + * + * @return + * Element handle on success otherwise FALSE + * + */ + +OCI_EXPORT OCI_Elem * OCI_API OCI_CollGetElem +( + OCI_Coll *coll, + unsigned int index +); + +/** + * @brief + * Return the element at the given position in the collection + * + * @param coll - Collection handle + * @param index - Index of the destination element + * @param elem - Element handle to hold the collection item data + * + * @note + * Collection indexes start at position 1. + * + * @return + * Element handle on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_CollGetElem2 +( + OCI_Coll *coll, + unsigned int index, + OCI_Elem *elem +); + +/** + * @brief + * Assign the given element value to the element at the given position in + * the collection + * + * @param coll - Collection handle + * @param index - Index of the destination element + * @param elem - Source element handle to assign + * + * @note + * Collection indexes start at position 1. + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_CollSetElem +( + OCI_Coll *coll, + unsigned int index, + OCI_Elem *elem +); + +/** + * @brief + * Append the given element at the end of the collection + * + * @param coll - Collection handle + * @param elem - Element handle to add + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_CollAppend +( + OCI_Coll *coll, + OCI_Elem *elem +); + +/** + * @brief + * Convert a collection handle value to a string + * + * @param coll - Collection handle + * @param size - Destination string length pointer in characters + * @param str - Destination string + * + * @note + * In order to compute the needed string length, call the method with a NULL string + * Then call the method again with a valid buffer + * + * @note + * The resulting string is similar to the SQL*PLUS output for collections + * For RAWs and BLOBs attributes, their binary values are converted to hexadecimal strings + * + * @warning + * This convenient method shall not be used when performance matters. It is usually called twice (buffer length + * computation) and must also care about quotes within strings. + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_CollToText +( + OCI_Coll *coll, + unsigned int *size, + otext *str +); + +/** + * @brief + * Delete the element at the given position in the Nested Table Collection + * + * @param coll - Collection handle + * @param index - Index of the element to delete + * + * @note + * Collection indexes start at position 1. + * + * @warning + * OCI_CollDeleteElem() is only valid for nested tables. + * + * @return + * - if the input collection is a nested table, it returns TRUE if the element + * is successfully deleted otherwise FALSE on error + * - if the input collection is a VARRAY, it always returns FALSE without spawning an exception + * + */ + +OCI_EXPORT boolean OCI_API OCI_CollDeleteElem +( + OCI_Coll *coll, + unsigned int index +); + +/** + * @brief + * Create an iterator handle to iterate through a collection + * + * @param coll - Collection handle + * + * @return + * Return the iterator handle on success otherwise NULL on failure + * + */ + +OCI_EXPORT OCI_Iter * OCI_API OCI_IterCreate +( + OCI_Coll *coll +); + +/** + * @brief + * Free an iterator handle + * + * @param iter - Iterator handle + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_IterFree +( + OCI_Iter *iter +); + +/** + * @brief + * Get the next element in the collection + * + * @param iter - Iterator handle + * + * @return + * Element handle on success otherwise NULL if: + * - Empty collection + * - Iterator already positioned on the last collection element + * - An error occurred + * + */ + +OCI_EXPORT OCI_Elem * OCI_API OCI_IterGetNext +( + OCI_Iter *iter +); + +/** + * @brief + * Get the previous element in the collection + * + * @param iter - Iterator handle + * + * @return + * Element handle on success otherwise NULL if: + * - Empty collection + * - Iterator already positioned on the last collection element + * - An error occurred + * + */ + +OCI_EXPORT OCI_Elem * OCI_API OCI_IterGetPrev +( + OCI_Iter *iter +); + +/** + * @brief + * Get the current element in the collection + * + * @param iter - Iterator handle + * + * @return + * Element handle on success otherwise NULL if: + * - Empty collection + * - Iterator already positioned on the last collection element + * - An error occurred + * + */ + +OCI_EXPORT OCI_Elem * OCI_API OCI_IterGetCurrent +( + OCI_Iter *iter +); + +/** + * @brief + * Create a local collection element instance based on a collection type + * descriptor + * + * @param typinf - Type info handle + * + * @return + * Return the collection element handle on success otherwise NULL on failure + * + */ + +OCI_EXPORT OCI_Elem * OCI_API OCI_ElemCreate +( + OCI_TypeInfo *typinf +); + +/** + * @brief + * Free a local collection element + * + * @param elem - Element handle + * + * @warning + * Only element created with OCI_ElemCreate() should be freed + * by OCI_ElemFree() + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ElemFree +( + OCI_Elem *elem +); + +/** +* @brief +* Return the boolean value of the given collection element +* +* @param elem - Element handle +* +* @warning +* OCI_ElemGetBoolean() returns a valid value only for collection elements of PL/SQL boolean type +* +* @return +* boolean value or FALSE on failure +* +*/ + +OCI_EXPORT boolean OCI_API OCI_ElemGetBoolean +( + OCI_Elem *elem +); + +/** +* @brief +* Return the number value of the given collection element +* +* @param elem - Element handle +* +* @return +* number handle or NULL on failure +* +*/ + +OCI_EXPORT OCI_Number* OCI_API OCI_ElemGetNumber +( + OCI_Elem *elem +); + +/** + * @brief + * Return the short value of the given collection element + * + * @param elem - Element handle + * + * @return + * Short value or 0 on failure + * + */ + +OCI_EXPORT short OCI_API OCI_ElemGetShort +( + OCI_Elem *elem +); + +/** + * @brief + * Return the unsigned short value of the given collection element + * + * @param elem - Element handle + * + * @return + * Unsigned short value or 0 on failure + * + */ + +OCI_EXPORT unsigned short OCI_API OCI_ElemGetUnsignedShort +( + OCI_Elem *elem +); + +/** + * @brief + * Return the int value of the given collection element + * + * @param elem - Element handle + * + * @return + * Int value or 0 on failure + * + */ + +OCI_EXPORT int OCI_API OCI_ElemGetInt +( + OCI_Elem *elem +); + +/** + * @brief + * Return the unsigned int value of the given collection element + * + * @param elem - Element handle + * + * @return + * Unsigned int value or 0 on failure + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_ElemGetUnsignedInt +( + OCI_Elem *elem +); + +/** + * @brief + * Return the big int value of the given collection element + * + * @param elem - Element handle + * + * @return + * Big int value or 0 on failure + * + */ + +OCI_EXPORT big_int OCI_API OCI_ElemGetBigInt +( + OCI_Elem *elem +); + +/** + * @brief + * Return the unsigned big int value of the given collection element + * + * @param elem - Element handle + * + * @return + * Unsigned big int value or 0 on failure + * + */ + +OCI_EXPORT big_uint OCI_API OCI_ElemGetUnsignedBigInt +( + OCI_Elem *elem +); + +/** + * @brief + * Return the Double value of the given collection element + * + * @param elem - Element handle + * + * @return + * Double value or 0 on failure + * + */ + +OCI_EXPORT double OCI_API OCI_ElemGetDouble +( + OCI_Elem *elem +); + +/** + * @brief + * Return the float value of the given collection element + * + * @param elem - Element handle + * + * @return + * Double value or 0 on failure + * + */ + +OCI_EXPORT float OCI_API OCI_ElemGetFloat +( + OCI_Elem *elem +); + +/** + * @brief + * Return the String value of the given collection element + * + * @param elem - Element handle + * + * @return + * String value or NULL on failure + * + */ + +OCI_EXPORT const otext * OCI_API OCI_ElemGetString +( + OCI_Elem *elem +); + +/** + * @brief + * Read the RAW value of the collection element into the given buffer + * + * @param elem - Element handle + * @param value - Buffer to store the RAW value + * @param len - Size of the buffer + * + * @return + * Number of bytes read from the RAW value or 0 on failure + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_ElemGetRaw +( + OCI_Elem *elem, + void *value, + unsigned int len +); + +/** +* @brief +* Return the raw attribute value size of the given element handle +* +* @param elem - Element handle +* +* @return +* size in bytes of the RAW value or 0 on failure or wrong attribute type +* +*/ + +OCI_EXPORT unsigned int OCI_API OCI_ElemGetRawSize +( + OCI_Elem *elem +); + +/** + * @brief + * Return the Date value of the given collection element + * + * @param elem - Element handle + * + * @return + * Date handle or NULL on failure + * + */ + +OCI_EXPORT OCI_Date * OCI_API OCI_ElemGetDate +( + OCI_Elem *elem +); + +/** + * @brief + * Return the Timestamp value of the given collection element + * + * @param elem - Element handle + * + * @return + * Timestamp handle or NULL on failure + * + */ + +OCI_EXPORT OCI_Timestamp * OCI_API OCI_ElemGetTimestamp +( + OCI_Elem *elem +); + +/** + * @brief + * Return the Interval value of the given collection element + * + * @param elem - Element handle + * + * @return + * Interval handle or NULL on failure + * + */ + +OCI_EXPORT OCI_Interval * OCI_API OCI_ElemGetInterval +( + OCI_Elem *elem +); + +/** + * @brief + * Return the Lob value of the given collection element + * + * @param elem - Element handle + * + * @return + * Lob handle or NULL on failure + * + */ + +OCI_EXPORT OCI_Lob * OCI_API OCI_ElemGetLob +( + OCI_Elem *elem +); + +/** + * @brief + * Return the File value of the given collection element + * + * @param elem - Element handle + * + * @return + * File handle or NULL on failure + * + */ + +OCI_EXPORT OCI_File * OCI_API OCI_ElemGetFile +( + OCI_Elem *elem +); + +/** + * @brief + * Return the object value of the given collection element + * + * @param elem - Element handle + * + * @return + * Object handle or NULL on failure + * + */ + +OCI_EXPORT OCI_Object * OCI_API OCI_ElemGetObject +( + OCI_Elem *elem +); + +/** + * @brief + * Return the collection value of the given collection element + * + * @param elem - Element handle + * + * @return + * Collection handle or NULL on failure + * + */ + +OCI_EXPORT OCI_Coll * OCI_API OCI_ElemGetColl +( + OCI_Elem *elem +); + +/** + * @brief + * Return the Ref value of the given collection element + * + * @param elem - Element handle + * + * @return + * Ref handle or NULL on failure + * + */ + +OCI_EXPORT OCI_Ref * OCI_API OCI_ElemGetRef +( + OCI_Elem *elem +); + +/** +* @brief +* Set a boolean value to a collection element +* +* @param elem - Element handle +* @param value - Short value +* +*@warning +* OCI_ElemSetBoolean() is only valid value only for collection elements of PL / SQL boolean type +* +* @return +* TRUE on success otherwise FALSE +* +*/ + +OCI_EXPORT boolean OCI_API OCI_ElemSetBoolean +( + OCI_Elem *elem, + boolean value +); + +/** +* @brief +* Set a number value to a collection element +* +* @param elem - Element handle +* @param value - number value +* +* @return +* TRUE on success otherwise FALSE +* +*/ + +OCI_EXPORT boolean OCI_API OCI_ElemSetNumber +( + OCI_Elem *elem, + OCI_Number *value +); + +/** + * @brief + * Set a short value to a collection element + * + * @param elem - Element handle + * @param value - Short value + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ElemSetShort +( + OCI_Elem *elem, + short value +); + +/** + * @brief + * Set a unsigned short value to a collection element + * + * @param elem - Element handle + * @param value - Unsigned short value + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ElemSetUnsignedShort +( + OCI_Elem *elem, + unsigned short value +); + +/** + * @brief + * Set a int value to a collection element + * + * @param elem - Element handle + * @param value - Int value + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ElemSetInt +( + OCI_Elem *elem, + int value +); + +/** + * @brief + * Set a unsigned int value to a collection element + * + * @param elem - Element handle + * @param value - Unsigned int value + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ElemSetUnsignedInt +( + OCI_Elem *elem, + unsigned int value +); + +/** + * @brief + * Set a big int value to a collection element + * + * @param elem - Element handle + * @param value - big int value + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ElemSetBigInt +( + OCI_Elem *elem, + big_int value +); + +/** + * @brief + * Set a unsigned big_int value to a collection element + * + * @param elem - Element handle + * @param value - Unsigned big int value + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ElemSetUnsignedBigInt +( + OCI_Elem *elem, + big_uint value +); + +/** + * @brief + * Set a double value to a collection element + * + * @param elem - Element handle + * @param value - Double value + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ElemSetDouble +( + OCI_Elem *elem, + double value +); + +/** + * @brief + * Set a float value to a collection element + * + * @param elem - Element handle + * @param value - float value + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ElemSetFloat +( + OCI_Elem *elem, + float value +); + +/** + * @brief + * Set a string value to a collection element + * + * @param elem - Element handle + * @param value - String value + * + * @note + * passing a null pointer for value calls OCI_ElemSetNull() + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ElemSetString +( + OCI_Elem *elem, + const otext *value +); + +/** + * @brief + * Set a RAW value to a collection element + * + * @param elem - Element handle + * @param value - Raw value + * @param len - Size of the raw value + * + * @note + * passing a null pointer for value calls OCI_ElemSetNull() + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ElemSetRaw +( + OCI_Elem *elem, + void *value, + unsigned int len +); + +/** + * @brief + * Assign a Date handle to a collection element + * + * @param elem - Element handle + * @param value - Date Handle + * + * @note + * passing a null pointer for value calls OCI_ElemSetNull() + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ElemSetDate +( + OCI_Elem *elem, + OCI_Date *value +); + +/** + * @brief + * Assign a Timestamp handle to a collection element + * + * @param elem - Element handle + * @param value - Timestamp Handle + * + * @note + * passing a null pointer for value calls OCI_ElemSetNull() + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ElemSetTimestamp +( + OCI_Elem *elem, + OCI_Timestamp *value +); + +/** + * @brief + * Assign an Interval handle to a collection element + * + * @param elem - Element handle + * @param value - Interval Handle + * + * @note + * passing a null pointer for value calls OCI_ElemSetNull() + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ElemSetInterval +( + OCI_Elem *elem, + OCI_Interval *value +); + +/** + * @brief + * Assign a Collection handle to a collection element + * + * @param elem - Element handle + * @param value - Collection Handle + * + * @note + * passing a null pointer for value calls OCI_ElemSetNull() + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ElemSetColl +( + OCI_Elem *elem, + OCI_Coll *value +); + +/** + * @brief + * Assign an Object handle to a collection element + * + * @param elem - Element handle + * @param value - Object Handle + * + * @warning + * This function assigns a copy of the object to the given attribute. + * Any further modifications of the object passed as the parameter 'value' + * will not be reflected to object 's attribute set with this call + * + * @note + * passing a null pointer for value calls OCI_ElemSetNull() + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ElemSetObject +( + OCI_Elem *elem, + OCI_Object *value +); + +/** + * @brief + * Assign a Lob handle to a collection element + * + * @param elem - Element handle + * @param value - Lob Handle + * + * @note + * passing a null pointer for value calls OCI_ElemSetNull() + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ElemSetLob +( + OCI_Elem *elem, + OCI_Lob *value +); + +/** + * @brief + * Assign a File handle to a collection element + * + * @param elem - Element handle + * @param value - File Handle + * + * @note + * passing a null pointer for value calls OCI_ElemSetNull() + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ElemSetFile +( + OCI_Elem *elem, + OCI_File *value +); + +/** + * @brief + * Assign a Ref handle to a collection element + * + * @param elem - Element handle + * @param value - Ref Handle + * + * @note + * passing a null pointer for value calls OCI_ElemSetNull() + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ElemSetRef +( + OCI_Elem *elem, + OCI_Ref *value +); + +/** + * @brief + * Check if the collection element value is null + * + * @param elem - Element handle + * + * @return + * TRUE if it's null otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ElemIsNull +( + OCI_Elem *elem +); + +/** + * @brief + * Set a collection element value to null + * + * @param elem - Element handle + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ElemSetNull +( + OCI_Elem *elem +); + +/** + * @} + */ + +/** + * @defgroup OcilibCApiFeatureReturningInto Oracle Returning feature + * @{ + * + * OCILIB supports the Oracle feature 'Returning into' for DML statements. + * + * Let's Oracle talk about this features: + * + * @par + * 'Using the RETURNING clause with a DML statement allows you to essentially + * combine two SQL statements into one, possibly saving you a server round-trip. + * This is accomplished by adding an extra clause to the traditional UPDATE, + * INSERT, and DELETE statements. The extra clause effectively adds a query to + * the DML statement. In the OCI, the values are returned to the application + * through the use of OUT bind variables.' + * + * OCILIB implements this features by providing a set of functions that allows + * to register output placeholders for the returned values. + * Once the DML is executed with OCI_Execute(), the output returned data is + * available through a regular resultset object that can be fetched. + * + * @note + * Array binding interface is also supported with 'returning into' DML statement. + * Every iteration (or row of given arrays) generates an resultset object. + * Once a resultset is fetched, the next on can be retrieved with OCI_GetNextResultset() + * + * @par + * + * @note + * OCI_Long are not supported for 'returning into' clause .This is a limitation imposed by Oracle. + * + * @note + * OCI_Column objects retrieved from output OCI_Resultset have the following + * particularities: + * + * - their names are the provided bind names to the DML statement + * (by example, ':out1'). So any call to the functions OCI_GetXXX2() + * should be aware of it + * - The columns detailed SQL attributes might be not all set or accurate. By + * example, the scale and precision are not set, the SQL type is the one + * chosen by OCILIB regarding the OCILIB object data type and might be + * slightly different from the real one. + * + * @par Example + * @include returning.c + * + */ + +/** + * @brief + * Retrieve the next available resultset + * + * @param stmt - Statement handle + * + * @note + * it is only valid for the following statements: + * - Statements executing SQL UPDATE/DELETE using a RETURNING INTO clause + * - Statements implicitly returned from PL/SQL procedure or blocks (new feature in Oracle 12cR1) using + * DBMS_SQL.RETURN_RESULT() + * + * @note + * SQL statements with a 'returning' clause can return multiple resultsets. + * When arrays of program variables are binded to the statement, Oracle will + * execute the statement for every row (iteration). + * Each iteration generates a resultset that can be fetched like regular ones. + * + * @note + * Starting withOracle 12cR1, PL/SQ procedure and blocks ca return multiple implicit resultsets + * Refer to Oracle documentation for more information. + * + * @return + * A resultset handle on success otherwise NULL + * + */ + +OCI_EXPORT OCI_Resultset * OCI_API OCI_GetNextResultset +( + OCI_Statement *stmt +); + +/** +* @brief +* Register a register output bind placeholder +* +* @param stmt - Statement handle +* @param name - Output bind name +* +* @return +* TRUE on success otherwise FALSE +* +*/ + +OCI_EXPORT boolean OCI_API OCI_RegisterNumber +( + OCI_Statement *stmt, + const otext *name +); + +/** + * @brief + * Register a short output bind placeholder + * + * @param stmt - Statement handle + * @param name - Output bind name + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_RegisterShort +( + OCI_Statement *stmt, + const otext *name +); + +/** + * @brief + * Register an unsigned short output bind placeholder + * + * @param stmt - Statement handle + * @param name - Output bind name + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_RegisterUnsignedShort +( + OCI_Statement *stmt, + const otext *name +); + +/** + * @brief + * Register an integer output bind placeholder + * + * @param stmt - Statement handle + * @param name - Output bind name + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_RegisterInt +( + OCI_Statement *stmt, + const otext *name +); + +/** + * @brief + * Register an unsigned integer output bind placeholder + * + * @param stmt - Statement handle + * @param name - Output bind name + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_RegisterUnsignedInt +( + OCI_Statement *stmt, + const otext *name +); + +/** + * @brief + * Register a big integer output bind placeholder + * + * @param stmt - Statement handle + * @param name - Output bind name + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_RegisterBigInt +( + OCI_Statement *stmt, + const otext *name +); + +/** + * @brief + * Register an unsigned big integer output bind placeholder + * + * @param stmt - Statement handle + * @param name - Output bind name + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_RegisterUnsignedBigInt +( + OCI_Statement *stmt, + const otext *name +); + +/** + * @brief + * Register a string output bind placeholder + * + * @param stmt - Statement handle + * @param name - Output bind name + * @param len - Max length of single string (in characters) + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_RegisterString +( + OCI_Statement *stmt, + const otext *name, + unsigned int len +); + +/** + * @brief + * Register an raw output bind placeholder + * + * @param stmt - Statement handle + * @param name - Output bind name + * @param len - Max length of the buffer (in bytes) + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_RegisterRaw +( + OCI_Statement *stmt, + const otext *name, + unsigned int len +); + +/** + * @brief + * Register a double output bind placeholder + * + * @param stmt - Statement handle + * @param name - Output bind name + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_RegisterDouble +( + OCI_Statement *stmt, + const otext *name +); + +/** + * @brief + * Register a float output bind placeholder + * + * @param stmt - Statement handle + * @param name - Output bind name + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_RegisterFloat +( + OCI_Statement *stmt, + const otext *name +); + +/** + * @brief + * Register a date output bind placeholder + * + * @param stmt - Statement handle + * @param name - Output bind name + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_RegisterDate +( + OCI_Statement *stmt, + const otext *name +); + +/** + * @brief + * Register a timestamp output bind placeholder + * + * @param stmt - Statement handle + * @param name - Output bind name + * @param type - Timestamp type + * + * @note + * See OCI_TimestampCreate() for possible values of parameter 'type' + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_RegisterTimestamp +( + OCI_Statement *stmt, + const otext *name, + unsigned int type +); + +/** + * @brief + * Register an interval output bind placeholder + * + * @param stmt - Statement handle + * @param name - Output bind name + * @param type - Interval type + * + * @note + * See OCI_IntervalCreate() for possible values of parameter 'type' + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_RegisterInterval +( + OCI_Statement *stmt, + const otext *name, + unsigned int type +); + +/** + * @brief + * Register an object output bind placeholder + * + * @param stmt - Statement handle + * @param name - Output bind name + * @param typinf - Type info handle + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_RegisterObject +( + OCI_Statement *stmt, + const otext *name, + OCI_TypeInfo *typinf +); + +/** + * @brief + * Register a lob output bind placeholder + * + * @param stmt - Statement handle + * @param name - Output bind name + * @param type - Lob type + * + * @note + * See OCI_LobCreate() for possible values of parameter 'type' + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_RegisterLob +( + OCI_Statement *stmt, + const otext *name, + unsigned int type +); + +/** + * @brief + * Register a file output bind placeholder + * + * @param stmt - Statement handle + * @param name - Output bind name + * @param type - File type + * + * @note + * See OCI_FileCreate() for possible values of parameter 'type' + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_RegisterFile +( + OCI_Statement *stmt, + const otext *name, + unsigned int type +); + +/** + * @brief + * Register a Ref output bind placeholder + * + * @param stmt - Statement handle + * @param name - Output bind name + * @param typinf - Type info handle + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_RegisterRef +( + OCI_Statement *stmt, + const otext *name, + OCI_TypeInfo *typinf +); + +/** + * @} + */ + +/** + * @defgroup OcilibCApiRowIds Oracle Rowids + * @{ + * + * OCILIB supports the Oracle ROWID type through C scalar string types (otext). + * + * - ROWIDs can be retrieved from resultset with OCI_GetString() + * - ROWIDs can be binded to statements with OCI_BindString() + * + * The maximum size of an ROWID buffer is defined by the constant OCI_SIZE_ROWID + * + * @par Example + * @include rowid.c + * + * @} + */ + +/** + * @defgroup OcilibCApiStatementControl Statements control + * @{ + * + * Those functions give extra information about OCILIB statements and can modify their behavior. + * + */ + +/** + * @brief + * Return the type of a SQL statement + * + * @param stmt - Statement handle + * + * @note + * Possible values are : + * + * - OCI_CST_SELECT : select statement + * - OCI_CST_UPDATE : update statement + * - OCI_CST_DELETE : delete statement + * - OCI_CST_INSERT : insert statement + * - OCI_CST_CREATE : create statement + * - OCI_CST_DROP : drop statement + * - OCI_CST_ALTER : alter statement + * - OCI_CST_BEGIN : begin (pl/sql) statement + * - OCI_CST_DECLARE : declare (pl/sql) statement + * - OCI_CST_CALL : kpu call + * + * @return + * The statement type on success or OCI_UNKOWN on error + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_GetStatementType +( + OCI_Statement *stmt +); + +/** + * @brief + * Set the fetch mode of a SQL statement + * + * @param stmt - Statement handle + * @param mode - fetch mode value + * + * @warning + * OCI_SetFetchMode() MUST be called before any OCI_ExecuteXXX() call + * + * @note + * Possible values are : + * - OCI_SFM_DEFAULT + * - OCI_SFM_SCROLLABLE + * + */ + +OCI_EXPORT boolean OCI_API OCI_SetFetchMode +( + OCI_Statement *stmt, + unsigned int mode +); + +/** + * @brief + * Return the fetch mode of a SQL statement + * + * @param stmt - Statement handle + * + * @note + * See OCI_SetFetchMode() for possible values + * Default value is OCI_SFM_DEFAULT + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_GetFetchMode +( + OCI_Statement *stmt +); + +/** + * @brief + * Set the binding mode of a SQL statement + * + * @param stmt - Statement handle + * @param mode - binding mode value + * + * @note + * Possible values are : + * - OCI_BIND_BY_POS : position binding + * - OCI_BIND_BY_NAME : name binding + * + */ + +OCI_EXPORT boolean OCI_API OCI_SetBindMode +( + OCI_Statement *stmt, + unsigned int mode +); + +/** + * @brief + * Return the binding mode of a SQL statement + * + * @param stmt - Statement handle + * + * @note + * See OCI_SetBindMode() for possible values + * Default value is OCI_BIND_BY_NAME + * + * @note + * if stmt is NULL, the return value is OCI_UNKNOWN + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_GetBindMode +( + OCI_Statement *stmt +); + +/** + * @brief + * Set the current bind allocation mode that will be used for subsequent binding calls + * + * @param stmt - Statement handle + * @param mode - bind allocation mode value + * + * @note + * Possible values are : + * - OCI_BAM_EXTERNAL : bind variable are allocated by user code + * - OCI_BAM_INTERNAL : bind variable are allocated internally + * + * @warning + * This call has to be made after preparing a statement as OCI_Prepare() reset it by default to OCI_BAM_EXTERNAL. + * When calling an OCI_BindXXXX() call, this value is used and stored in the OCI_Bind object created during the bind call. + * Each bind can have is own allocation mode that is returned by OCI_BindGetAllocationMode() + * OCI_SetBindAllocation() can be called before each binding call if needed, resulting having some bind allocated externally and other ones internally. + * + * @note + * Refer to the section "Binding variables and arrays" of the documention about allocation mode as OCI_BAM_INTERNAL is not compatible with all bind calls + * + */ + +OCI_EXPORT boolean OCI_API OCI_SetBindAllocation +( + OCI_Statement *stmt, + unsigned int mode +); + +/** + * @brief + * Return the current bind allocation mode used for subsequent binding calls + * + * @param stmt - Statement handle + * + * @note + * See OCI_SetBindAllocation() for possible values + * Default value is OCI_BAM_EXTERNAL + * + * @warning + * Each OCI_Bind object has its own allocation mode that may differ from the one returned by OCI_GetBindAllocation() + * The return value of OCI_GetBindAllocation() is the mode that will be used for any subsequent OCI_BindXXXX() calls + * + * @note + * if stmt is NULL, the return value is OCI_UNKNOWN + * + */ +OCI_EXPORT unsigned int OCI_API OCI_GetBindAllocation +( + OCI_Statement *stmt +); + +/** + * @brief + * Set the number of rows fetched per internal server fetch call + * + * @param stmt - Statement handle + * @param size - number of rows to fetch + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_SetFetchSize +( + OCI_Statement *stmt, + unsigned int size +); + +/** + * @brief + * Return the number of rows fetched per internal server fetch call + * + * @param stmt - Statement handle + * + * @note + * Default value is set to constant OCI_FETCH_SIZE + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_GetFetchSize +( + OCI_Statement *stmt +); + +/** + * @brief + * Set the number of rows pre-fetched by OCI Client + * + * @param stmt - Statement handle + * @param size - number of rows to pre-fetch + * + * @note + * To turn off pre-fetching, set both attributes (size and memory) to 0. + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_SetPrefetchSize +( + OCI_Statement *stmt, + unsigned int size +); + +/** + * @brief + * Return the number of rows pre-fetched by OCI Client + * + * @param stmt - Statement handle + * + * @note + * Default value is set to constant OCI_PREFETCH_SIZE + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_GetPrefetchSize +( + OCI_Statement *stmt +); + +/** + * @brief + * Set the amount of memory pre-fetched by OCI Client + * + * @param stmt - Statement handle + * @param size - amount of memory to fetch + * + * @note + * Default value is 0 and the pre-fetch size attribute is used instead. + * When both attributes are set (pre-fetch size and memory) and pre-fetch memory + * value can hold more rows than specified by pre-fetch size, OCI uses pre-fetch + * size instead. + * + * @note + * OCILIB set pre-fetch attribute to OCI_PREFETCH_SIZE when a statement is created. + * To setup a big value for OCI_SetPrefetchMemory(), you must call + * OCI_SetPrefetchSize() to 0 to make OCI consider this attribute. + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_SetPrefetchMemory +( + OCI_Statement *stmt, + unsigned int size +); + +/** + * @brief + * Return the amount of memory used to retrieve rows pre-fetched by OCI Client + * + * @param stmt - Statement handle + * + * @note + * Default value is 0 + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_GetPrefetchMemory +( + OCI_Statement *stmt +); + +/** + * @brief + * Set the LONG data type piece buffer size + * + * @param stmt - Statement handle + * @param size - maximum size for long buffer + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_SetLongMaxSize +( + OCI_Statement *stmt, + unsigned int size +); + +/** + * @brief + * Return the LONG data type piece buffer size + * + * @param stmt - Statement handle + * + * @note + * Default value is set to constant OCI_SIZE_LONG + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_GetLongMaxSize +( + OCI_Statement *stmt +); + +/** + * @brief + * Set the long data type handling mode of a SQL statement + * + * @param stmt - Statement handle + * @param mode - long mode value + * + * @note + * Possible values are : + * + * - OCI_LONG_EXPLICIT : LONGs are explicitly handled by OCI_Long type + * - OCI_LONG_IMPLICIT : LONGs are implicitly mapped to string type in the + * limits of VARCHAR2 size capacity + * + * LONG RAWs can't be handled with OCI_LONG_IMPLICIT + */ + +OCI_EXPORT boolean OCI_API OCI_SetLongMode +( + OCI_Statement *stmt, + unsigned int mode +); + +/** + * @brief + * Return the long data type handling mode of a SQL statement + * + * @param stmt - Statement handle + * + * @note + * See OCI_SetLongMode() for possible values + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_GetLongMode +( + OCI_Statement *stmt +); + +/** + * @brief + * Return the connection handle associated with a statement handle + * + * @param stmt - Statement handle + * + */ + +OCI_EXPORT OCI_Connection * OCI_API OCI_StatementGetConnection +( + OCI_Statement *stmt +); + +/** + * @} + */ + +/** + * @defgroup OcilibCApiLobs Internal Large Objects (LOBs) + * @{ + * + * Large Objects (LOBs) were introduced with Oracle 8i to replace LONGs + * + * Oracle OCI supplies a set APIs to manipulate this data type. + * + * OCILIB encapsulates this API by supplying: + * + * - An OCI_Lob C type + * - A set of really easy APIs to manipulate OCI_Lob objects + * + * OCILIB currently supports 3 types of Lobs : + * + * - BLOB : Binary LOBs (replacement for LONG RAW data type) + * - CLOB : Character LOBs (replacement for LONG data type) + * - NCLOB : National Character LOBs + * + * OCI_Lob objects can be : + * + * - Created as standalone instances + * - Used for in/out binding + * - Retrieved from select statements + * - Manipulated (copy, append, ...) + * + * @par Lobs > 4 Go + * + * Oracle 10g extended lobs by increasing maximum size from 4Go to 128 To. + * + * OCILIB, with version 2.1.0, supports now this new limit. + * For handling sizes and offsets up to 128 To, 64 bit integers are requested. + * + * So, A new scalar integer type has been introduced: big_uint (elderly lobsize_t). + * This type can be a 32 bits or 64 bits integer depending on : + * - Compiler support for 64 bits integers (C99 compiler, MS compilers) + * - Oracle client version + * + * big_uint will be a 64 bits integer : + * - if the compiler supports it + * - if OCILIB is build with option OCI_IMPORT_LINKAGE and the Oracle version is >= 10.1 + * - or OCILIB is build with option OCI_IMPORT_RUNTIME (oracle version is not known at + * compilation stage) + * + * @par Example + * @include lob.c + * + */ + +/** + * @brief + * Create a local temporary Lob instance + * + * @param con - Connection handle + * @param type - Lob type + * + * Supported lob types : + * + * - OCI_BLOB : Binary Lob + * - OCI_CLOB : Character Lob + * - OCI_NCLOB ! National Character Lob + * + * @return + * Return the lob handle on success otherwise NULL on failure + * + */ + +OCI_EXPORT OCI_Lob * OCI_API OCI_LobCreate +( + OCI_Connection *con, + unsigned int type +); + +/** + * @brief + * Free a local temporary lob + * + * @param lob - Lob handle + * + * @warning + * Only lobs created with OCI_LobCreate() should be freed by OCI_LobFree() + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_LobFree +( + OCI_Lob *lob +); + +/** + * @brief + * Create an array of lob object + * + * @param con - Connection handle + * @param type - Lob type + * @param nbelem - number of elements in the array + * + * @note + * see OCI_LobCreate() for more details + * + * @return + * Return the lob handle array on success otherwise NULL on failure + * + */ + +OCI_EXPORT OCI_Lob ** OCI_API OCI_LobArrayCreate +( + OCI_Connection *con, + unsigned int type, + unsigned int nbelem +); + +/** +* @brief +* Free an array of lob objects +* +* @param lobs - Array of lob objects +* +* @warning +* Only arrays of lobs created with OCI_LobArrayCreate() should be freed +* by OCI_LobArrayFree() +* +* @return +* TRUE on success otherwise FALSE +* +*/ + +OCI_EXPORT boolean OCI_API OCI_LobArrayFree +( + OCI_Lob **lobs +); + +/** + * @brief + * Return the type of the given Lob object + * + * @param lob - Lob handle + * + * @note + * For possible values, see OCI_LobCreate() + * + * @return + * Object type or OCI_UNKNOWN the input handle is NULL + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_LobGetType +( + OCI_Lob *lob +); + +/** + * @brief + * Perform a seek operation on the OCI_lob content buffer + * + * @param lob - Lob handle + * @param offset - Offset from current position (bytes or characters) + * @param mode - Seek mode + * + * Parameter 'mode' can be one of the following value : + * + * - OCI_SEEK_SET : set the lob current offset to the given absolute offset + * - OCI_SEEK_END : set the lob current offset to the end of the lob + * - OCI_SEEK_CUR : move the lob current offset to the number of bytes or + * characters given by parameter 'offset' + * + * @note + * - For CLOB and CLOB, offset in characters + * - For BLOB and BFILE, offset is in bytes + * + * @note + * Position in the Lob buffer starts at 0. + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_LobSeek +( + OCI_Lob *lob, + big_uint offset, + unsigned int mode +); + +/** + * @brief + * Return the current position in the Lob content buffer + * + * @param lob - Lob handle + * + * @return + * Lob position (starting with 0) or 0 on failure + */ + +OCI_EXPORT big_uint OCI_API OCI_LobGetOffset +( + OCI_Lob *lob +); + +/** + * @brief + * [OBSOLETE] Read a portion of a lob into the given buffer + * + * @param lob - Lob handle + * @param buffer - Pointer to a buffer + * @param len - Length of the buffer (in bytes or characters) + * + * @note + * Length is expressed in : + * - Bytes for BLOBs + * - Characters for CLOBs/NCLOBS + * + * @warning + * This call is obsolete ! Use OCI_LobRead2() instead. + * + * @return + * Number of bytes/characters read on success otherwise 0 on failure + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_LobRead +( + OCI_Lob *lob, + void *buffer, + unsigned int len +); + +/** + * @brief + * Read a portion of a lob into the given buffer + * + * @param lob - Lob handle + * @param buffer - Pointer to a buffer + * @param char_count - [in/out] Pointer to maximum number of characters + * @param byte_count - [in/out] Pointer to maximum number of bytes + * + * @note + * In input, 'char_count' and 'byte_count' are values to read into the buffer + * In output, 'char_count' and 'byte_count' are values read into the buffer + * + * @note + * For BLOBs, only the parameter 'byte_count' is used + * For CLOBs, both parameters can be used : + * In input : + * - if 'byte_count' is set to zero, it is computed from 'char_count' + * - if 'char_count' is set to zero, it is computed from 'byte_count' + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_LobRead2 +( + OCI_Lob *lob, + void *buffer, + unsigned int *char_count, + unsigned int *byte_count +); + +/** + * @brief + * [OBSOLETE] Write a buffer into a LOB + * + * @param lob - Lob handle + * @param buffer - Pointer to a buffer + * @param len - Length of the buffer (in bytes or characters) + * + * @note + * Length is expressed in : + * - Bytes for BLOBs + * - Characters for CLOBs/NCLOBs + * + * @warning + * This call is obsolete ! Use OCI_LobWrite2() instead. + * + * @return + * Number of bytes / characters written on success otherwise 0 on failure + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_LobWrite +( + OCI_Lob *lob, + void *buffer, + unsigned int len +); + +/** + * @brief + * Write a buffer into a LOB + * + * @param lob - Lob handle + * @param buffer - Pointer to a buffer + * @param char_count - [in/out] Pointer to maximum number of characters + * @param byte_count - [in/out] Pointer to maximum number of bytes + * + * @note + * In input, 'char_count' and 'byte_count' are values to write from the buffer + * In output, 'char_count' and 'byte_count' are values written from the buffer + * + * @note + * For BLOBs, only the parameter 'byte_count' is used + * For CLOBs, both parameters can be used : + * In input : + * - if 'byte_count' is set to zero, it is computed from 'char_count' + * - if 'char_count' is set to zero, it is computed from 'byte_count' + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_LobWrite2 +( + OCI_Lob *lob, + void *buffer, + unsigned int *char_count, + unsigned int *byte_count +); + +/** + * @brief + * Truncate the given lob to a shorter length + * + * @param lob - Lob handle + * @param size - New length (in bytes or characters) + * + * @note + * Length is expressed in : + * - Bytes for BLOBs + * - Characters for CLOBs/NCLOBs + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_LobTruncate +( + OCI_Lob *lob, + big_uint size +); + +/** + * @brief + * Return the actual length of a lob + * + * @param lob - Lob handle + * + * @note + * The returned value is in bytes for BLOBS and characters for CLOBS/NCLOBs + * + */ + +OCI_EXPORT big_uint OCI_API OCI_LobGetLength +( + OCI_Lob *lob +); + +/** + * @brief + * Returns the chunk size of a LOB + * + * @param lob - Lob handle + * + * @note + * This chunk size corresponds to the chunk size used by the LOB data layer + * when accessing and modifying the LOB value. According to Oracle + * documentation, performance will be improved if the application issues + * read or write requests using a multiple of this chunk size + * + * @note + * The returned value is in bytes for BLOBS and characters for CLOBS/NCLOBs + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_LobGetChunkSize +( + OCI_Lob *lob +); + +/** + * @brief + * Erase a portion of the lob at a given position + * + * @param lob - Lob handle + * @param offset - Absolute position in source lob + * @param len - Number of bytes or characters to erase + * + * @note + * Absolute position starts at 0. + * Erasing means that spaces overwrite the existing LOB value. + * + * @return + * Number of bytes (BLOB) or characters (CLOB/NCLOB) erased on success + * otherwise 0 on failure + * + */ + +OCI_EXPORT big_uint OCI_API OCI_LobErase +( + OCI_Lob *lob, + big_uint offset, + big_uint len +); + +/** + * @brief + * Append a buffer at the end of a LOB + * + * @param lob - Lob handle + * @param buffer - Pointer to a buffer + * @param len - Length of the buffer (in bytes or characters) + * + * @note + * Length is expressed in : + * - Bytes for BLOBs + * - Characters for CLOBs + * + * @return + * Number of bytes / characters written on success otherwise 0 on failure + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_LobAppend +( + OCI_Lob *lob, + void *buffer, + unsigned int len +); + +/** + * @brief + * Append a buffer at the end of a LOB + * + * @param lob - Lob handle + * @param buffer - Pointer to a buffer + * @param char_count - [in/out] Pointer to maximum number of characters + * @param byte_count - [in/out] Pointer to maximum number of bytes + * + * @note + * In input, 'char_count' and 'byte_count' are values to write from the buffer + * In output, 'char_count' and 'byte_count' are values written from the buffer + * + * @note + * For BLOBs, only the parameter 'byte_count' is used + * For CLOBs, both parameters can be used : + * In input : + * - if 'byte_count' is set to zero, it is computed from 'char_count' + * - if 'char_count' is set to zero, it is computed from 'byte_count' + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_LobAppend2 +( + OCI_Lob *lob, + void *buffer, + unsigned int *char_count, + unsigned int *byte_count +); + +/** + * @brief + * Append a source LOB at the end of a destination LOB + * + * @param lob - Destination Lob handle + * @param lob_src - Source Lob handle + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_LobAppendLob +( + OCI_Lob *lob, + OCI_Lob *lob_src +); + +/** + * @brief + * Check if the given lob is a temporary lob + * + * @param lob - Lob handle + * + * @return + * TRUE if it's a temporary lob otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_LobIsTemporary +( + OCI_Lob *lob +); + +/** + * @brief + * Copy a portion of a source LOB into a destination LOB + * + * @param lob - Destination Lob handle + * @param lob_src - Source Lob handle + * @param offset_dst - Absolute position in destination lob + * @param offset_src - Absolute position in source lob + * @param count - Number of bytes or character to copy + * + * @note + * For character LOB (CLOB/NCLOBS) the parameters count, offset_dst and + * offset_src are expressed in characters and not in bytes. + * + * @note + * Absolute position starts at 0. + * + */ + +OCI_EXPORT boolean OCI_API OCI_LobCopy +( + OCI_Lob *lob, + OCI_Lob *lob_src, + big_uint offset_dst, + big_uint offset_src, + big_uint count +); + +/** + * @brief + * Copy a portion of a source FILE into a destination LOB + * + * @param lob - Destination Lob handle + * @param file - Source File handle + * @param offset_dst - Absolute position in destination lob + * @param offset_src - Absolute position in source file + * @param count - Number of bytes to copy + * + * @note + * - For character LOB (CLOB/NCLOB) the parameter offset_src are expressed in + * characters and not in bytes. + * - Offset_src is always in bytes + * + * @note + * Absolute position starts at 0. + * + */ + +OCI_EXPORT boolean OCI_API OCI_LobCopyFromFile +( + OCI_Lob *lob, + OCI_File *file, + big_uint offset_dst, + big_uint offset_src, + big_uint count +); + +/** + * @brief + * Open explicitly a Lob + * + * @param lob - Lob handle + * @param mode - open mode + * + * Possible values for mode are : + * + * - OCI_LOB_READONLY : read only access + * - OCI_LOB_READWRITE : read/write access + * + * @note + * - A call to OCI_LobOpen is not necessary to manipulate a Lob. + * - If a lob hasn't been opened explicitly, triggers are fired and + * indexes updated at every read/write/append operation + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_LobOpen +( + OCI_Lob *lob, + unsigned int mode +); + +/** + * @brief + * Close explicitly a Lob + * + * @param lob - Lob handle + * + * @note + * - A call to OCI_LobClose is not necessary to manipulate a Lob. + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_LobClose +( + OCI_Lob *lob +); + +/** + * @brief + * Compare two lob handles for equality + * + * @param lob - Lob handle + * @param lob2 - Lob2 handle + * + * @return + * TRUE is the lobs are not null and equal otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_LobIsEqual +( + OCI_Lob *lob, + OCI_Lob *lob2 +); + +/** + * @brief + * Assign a lob to another one + * + * @param lob - Destination Lob handle + * @param lob_src - Source Lob handle + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_LobAssign +( + OCI_Lob *lob, + OCI_Lob *lob_src +); + +/** + * @brief + * Return the maximum size that the lob can contain + * + * @param lob - Lob handle + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT big_uint OCI_API OCI_LobGetMaxSize +( + OCI_Lob *lob +); + +/** + * @brief + * Flush Lob content to the server + * + * @param lob - Lob handle + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_LobFlush +( + OCI_Lob *lob +); + +/** + * @brief + * Enable / disable buffering mode on the given lob handle + * + * @param lob - Lob handle + * @param value - Enable/disable buffering mode + * + * @note + * Oracle "LOB Buffering Subsystem" allows client applications + * to speedup read/write of small buffers on Lobs Objects. + * Check Oracle Documentation for more details on "LOB Buffering Subsystem". + * This reduces the number of network round trips and LOB versions, thereby + * improving LOB performance significantly. + * + * @warning + * According to Oracle documentation the following operations are not permitted + * on Lobs when buffering is on : OCI_LobCopy(), OCI_LobAppend, OCI_LobErase(), + * OCI_LobGetLength(), OCI_LobTruncate() + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_LobEnableBuffering +( + OCI_Lob *lob, + boolean value +); + +/** +* @brief +* Retrieve connection handle from the lob handle +* +* @param lob - lob handle +* +*/ + +OCI_EXPORT OCI_Connection * OCI_API OCI_LobGetConnection +( + OCI_Lob *lob +); + +/** + * @} + */ + +/** + * @defgroup OcilibCApiFiles External Large Objects (FILEs) + * @{ + * + * External Large Objects (FILEs) were introduced with Oracle 8i + * + * Oracle OCI supplies a set APIs to manipulate this data type. + * + * OCILIB encapsulates this API by supplying: + * + * - An OCI_File C type + * - A set of really easy APIs to manipulate OCI_File objects + * + * OCILIB currently supports 2 types of Lobs : + * + * - BFILE : Binary files + * - CFILE : Character files + * + * @warning + * FILEs are read-only. + * + * OCI_Lob objects can be : + * + * - Created as standalone instances + * - Used for in/out binding + * - Retrieved from select statements + * - Used for reading server files content + * + * @par Files > 4 Go + * + * - New maximum file size limit (128 To) applies to OCI_Files objects. + * - See Internal Large Objects (LOBs) section for Files > 4 Go information + * + * @par Example + * @include file.c + * + */ + +/** + * @brief + * Create a file object instance + * + * @param con - Connection handle + * @param type - File type + * + * Supported file types : + * + * - OCI_BFILE : Binary file + * - OCI_CFILE : Character file + * + * @return + * Return the lob handle on success otherwise NULL on failure + * + */ + +OCI_EXPORT OCI_File * OCI_API OCI_FileCreate +( + OCI_Connection *con, + unsigned int type +); + +/** + * @brief + * Free a local File object + * + * @param file - File handle + * + * @warning + * Only Files created with OCI_FileCreate() should be freed by OCI_FileFree() + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_FileFree +( + OCI_File *file +); + +/** + * @brief + * Create an array of file object + * + * @param con - Connection handle + * @param type - File type + * @param nbelem - number of elements in the array + * + * @note + * see OCI_FileCreate() for more details + * + * @return + * Return the file handle array on success otherwise NULL on failure + * + */ + +OCI_EXPORT OCI_File ** OCI_API OCI_FileArrayCreate +( + OCI_Connection *con, + unsigned int type, + unsigned int nbelem +); + +/** +* @brief +* Free an array of file objects +* +* @param files - Array of file objects +* +* @warning +* Only arrays of lobs created with OCI_FileArrayCreate() should be freed by OCI_FileArrayFree() +* +* @return +* TRUE on success otherwise FALSE +* +*/ + +OCI_EXPORT boolean OCI_API OCI_FileArrayFree +( + OCI_File **files +); + +/** + * @brief + * Return the type of the given File object + * + * @param file - File handle + * + * @note + * For possible values, see OCI_FileCreate() + * + * @return + * Object type or OCI_UNKNOWN the input handle is NULL + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_FileGetType +( + OCI_File *file +); + +/** + * @brief + * Perform a seek operation on the OCI_File content buffer + * + * @param file - File handle + * @param offset - Offset from current position + * @param mode - Seek mode + * + * Mode parameter can be one of the following value : + * + * - OCI_SEEK_SET : set the file current offset to the given absolute offset + * - OCI_SEEK_END : set the file current offset to the end of the lob + * - OCI_SEEK_CUR : move the file current offset to the number of bytes given by + * parameter 'offset' + * + * @note + * Position in the File buffer starts at 0. + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_FileSeek +( + OCI_File *file, + big_uint offset, + unsigned int mode +); + +/** + * @brief + * Return the current position in the file + * + * @param file - File handle + * + * @return + * File position (starting with 0) or 0 on failure + */ + +OCI_EXPORT big_uint OCI_API OCI_FileGetOffset +( + OCI_File *file +); + +/** + * @brief + * Read a portion of a file into the given buffer + * + * @param file - File handle + * @param buffer - Pointer to a buffer + * @param len - Length of the buffer in bytes + * + * @return + * Number of bytes read on success otherwise 0 on failure + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_FileRead +( + OCI_File *file, + void *buffer, + unsigned int len +); + +/** + * @brief + * Return the size in bytes of a file + * + * @param file - File handle + * + */ + +OCI_EXPORT big_uint OCI_API OCI_FileGetSize +( + OCI_File *file +); + +/** + * @brief + * Check if the given file exists on server + * + * @param file - File handle + * + * @note + * For local FILEs object, OCI_LobFileSetName() must be called before to set the filename to check + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_FileExists +( + OCI_File *file +); + +/** + * @brief + * Set the directory and file name of FILE handle + * + * @param file - File handle + * @param dir - File directory + * @param name - File name + *in + * @note + * - For local FILEs only + * - Files fetched from resultset can't be assigned a new directory and name + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_FileSetName +( + OCI_File *file, + const otext *dir, + const otext *name +); + +/** + * @brief + * Return the directory of the given file + * + * @param file - File handle + * + */ + +OCI_EXPORT const otext * OCI_API OCI_FileGetDirectory +( + OCI_File *file +); + +/** + * @brief + * Return the name of the given file + * + * @param file - File handle + * + */ + +OCI_EXPORT const otext * OCI_API OCI_FileGetName +( + OCI_File *file +); + +/** + * @brief + * Open a file for reading + * + * @param file - File handle + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_FileOpen +( + OCI_File *file +); + +/** + * @brief + * Check if the specified file is opened within the file handle + * + * @param file - File handle + * + * @return + * TRUE if the file was opened with this handle otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_FileIsOpen +( + OCI_File *file +); + +/** + * @brief + * Close a file + * + * @param file - File handle + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_FileClose +( + OCI_File *file +); + +/** + * @brief + * Compare two file handle for equality + * + * @param file - File handle + * @param file2 - File2 handle + * + * @return + * TRUE is the lobs are not null and equal otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_FileIsEqual +( + OCI_File *file, + OCI_File *file2 +); + +/** + * @brief + * Assign a file to another one + * + * @param file - Destination File handle + * @param file_src - Source File handle + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_FileAssign +( + OCI_File *file, + OCI_File *file_src +); + +/** +* @brief +* Retrieve connection handle from the file handle +* +* @param file - file handle +* +*/ + +OCI_EXPORT OCI_Connection * OCI_API OCI_FileGetConnection +( + OCI_File *file +); + +/** + * @} + */ + +/** + * @defgroup OcilibCApiLongs Long objects + * @{ + * + * Long Objects encapsulate Oracle LONGs data types and were used to store large + * buffers in Oracle database. + * + * They're still supported but are depreciated. Oracle now provides a + * newer and better way to deal with data that needs large storage : LOBs + * + * OCILIB supports this data type because it was and still is widely used + * + * OCILIB provides a set of API for manipulating LONGs that is really close to + * the one provided for LOBs. + * + * OCILIB currently supports 3 types of Long Objects: + * + * - OCI_BLONG : LONG RAW columns + * - OCI_CLONG : LONG columns + * + * OCI_Lob objects can be : + * + * - Created as standalone instances + * - Used for in/out binding + * - Retrieved from select statement + * + * @par Example + * @include long.c + * + */ + +/** + * @brief + * Create a local temporary Long instance + * + * @param stmt - Statement handle + * @param type - Long type + * + * Supported lob types : + * + * - OCI_BLONG : Binary Long + * - OCI_CLONG : Character Long + * + * @return + * Return the long handle on success otherwise NULL on failure + * + */ + +OCI_EXPORT OCI_Long * OCI_API OCI_LongCreate +( + OCI_Statement *stmt, + unsigned int type +); + +/** + * @brief + * Free a local temporary long + * + * @param lg - Long handle + * + * @warning + * Only lobs created with OCI_LongCreate() should be freed by OCI_LongFree() + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_LongFree +( + OCI_Long *lg +); + +/** + * @brief + * Return the type of the given Long object + * + * @param lg - Long handle + * + * @note + * For possible values, see OCI_LobCreate() + * + * @return + * Object type or OCI_UNKNOWN the input handle is NULL + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_LongGetType +( + OCI_Long *lg +); + +/** + * @brief + * Read a portion of a long into the given buffer [Obsolete] + * + * @param lg - Long handle + * @param buffer - Pointer to a buffer + * @param len - Length of the buffer in bytes / characters + * + * @note + * - From version 2.0.0, this function is obsolete because OCILIB fetches now + * all data during OCIFetchNext() call + * - So, this call reads now the internal OCI_Long object allocated buffer + * - The internal buffer can be directly accessed with OCI_LongGetBuffer() + * + * @note + * - For OCI_CLONG, parameter 'len' and returned value are expressed in characters + * - For OCI_BLONG, parameter 'len' and returned value are expressed in bytes + * + * @return + * - Number of bytes/characters read on success + * - 0 if there is nothing more to read + * - 0 on failure + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_LongRead +( + OCI_Long *lg, + void *buffer, + unsigned int len +); + +/** + * @brief + * Write a buffer into a Long + * + * @param lg - Long handle + * @param buffer - the pointer to a buffer + * @param len - the length of the buffer in bytes (OCI_BLONG) or + * character (OCI_CLONG) + * + * @return + * Number of bytes (OCI_BLONG) / character (OCI_CLONG) written on success otherwise 0 on failure + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_LongWrite +( + OCI_Long *lg, + void *buffer, + unsigned int len +); + +/** + * @brief + * Return the buffer size of a long object in bytes (OCI_BLONG) or character (OCI_CLONG) + * + * @param lg - Long handle + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_LongGetSize +( + OCI_Long *lg +); + +/** + * @brief + * Return the internal buffer of an OCI_Long object read from a fetch sequence + * + * @param lg - Long handle + * + */ + +OCI_EXPORT void * OCI_API OCI_LongGetBuffer +( + OCI_Long *lg +); + +/** +* @} +*/ + +/** +* @defgroup OcilibCApiOracleNumber Oracle NUMBER manipulation (optional) +* @{ +* +* OCILIB encapsulates Oracle SQL all Numeric types using C native data types. +* But it also provides an optional OCI_Number handle for manipulating and accessing Oracle NUMBER type. +* OCI_Number provides management for some special value that cannot be addressed in C such as positive +* and negative infinity. +* +* @par Example +* @include number.c +* +*/ + +/** +* @brief +* Create a local number object +* +* @param con - Connection handle +* +* @note +* Parameter 'con' can be NULL in order to manipulate numbers +* independently from database connections +* +* @return +* Return the number handle on success otherwise NULL on failure +* +*/ + +OCI_EXPORT OCI_Number * OCI_API OCI_NumberCreate +( + OCI_Connection *con +); + +/** +* @brief +* Free a number object +* +* @param number - Number handle +* +* @warning +* Only Numbers created with OCI_NumberCreate() should be freed by OCI_NumberFree() +* +* @return +* TRUE on success otherwise FALSE +* +*/ + +OCI_EXPORT boolean OCI_API OCI_NumberFree +( + OCI_Number *number +); + +/** +* @brief +* Create an array of number object +* +* @param con - Connection handle +* @param nbelem - number of elements in the array +* +* @note +* see OCI_NumberCreate() for more details +* +* @return +* Return the number handle array on success otherwise NULL on failure +* +*/ + +OCI_EXPORT OCI_Number ** OCI_API OCI_NumberArrayCreate +( + OCI_Connection *con, + unsigned int nbelem +); + +/** +* @brief +* Free an array of number objects +* +* @param numbers - Array of number objects +* +* @warning +* Only arrays of numbers created with OCI_NumberArrayCreate() should be freed by OCI_NumberArrayFree() +* +* @return +* TRUE on success otherwise FALSE +* +*/ + +OCI_EXPORT boolean OCI_API OCI_NumberArrayFree +( + OCI_Number **numbers +); + +/** +* @brief +* Assign the value of a number handle to another one +* +* @param number - Destination number handle +* @param number_src - Source number handle +* +* @return +* TRUE on success otherwise FALSE +* +*/ + +OCI_EXPORT int OCI_API OCI_NumberAssign +( + OCI_Number *number, + OCI_Number *number_src +); + +/** +* @brief +* Convert a number value from the given number handle to a string +* +* @param number - source number handle +* @param fmt - Number format +* @param size - Destination string size in characters +* @param str - Destination date string +* +* @note +* Output string can be one the following 'magic strings': +* - '~' for positive infinity +* - '-~' for negative infinity +* +* @return +* TRUE on success otherwise FALSE +* +*/ + +OCI_EXPORT boolean OCI_API OCI_NumberToText +( + OCI_Number *number, + const otext *fmt, + int size, + otext *str +); + +/** +* @brief +* Convert a string to a number and store it in the given number handle +* +* @param number - Destination number handle +* @param str - Source number string +* @param fmt - Number format +* +* @note +* Input string can be one the following 'magic strings': +* - '~' for positive infinity +* - '-~' for negative infinity +* +* @return +* TRUE on success otherwise FALSE +* +*/ + +OCI_EXPORT boolean OCI_API OCI_NumberFromText +( + OCI_Number *number, + const otext *str, + const otext *fmt +); + +/** +* @brief +* Return the number value content +* +* @param number - number handle +* +* @note +* Returned content is a buffer of 22 bytes corresponding to Oracle C native +* representation of NUMBER values +* See oracle Documentation of its layout +* +* @return +* TRUE on success otherwise FALSE +* +*/ + +OCI_EXPORT unsigned char * OCI_API OCI_NumberGetContent +( + OCI_Number *number +); + +/** +* @brief +* Assign the number value content +* +* @param number - number handle +* @param content - raw number content +* +* @note +* See OCI_NumberSetContent() for more information +* +* @return +* TRUE on success otherwise FALSE +* +*/ + +OCI_EXPORT boolean OCI_API OCI_NumberSetContent +( + OCI_Number *number, + unsigned char *content +); + +/** +* @brief +* Assign the number value with the value of a native C numeric type +* +* @param number - number handle +* @param type - native C type to assign +* @param value - pointer to value to set +* +* @note +* Argument @param type can be : +* +* - OCI_NUM_SHORT : value is a pointer to a signed short +* - OCI_NUM_USHORT : value is a pointer to an unsigned short +* - OCI_NUM_INT : value is a pointer to a signed int +* - OCI_NUM_UINT : value is a pointer to an unsigned short +* - OCI_NUM_BIGINT : value is a pointer to a signed big_int +* - OCI_NUM_BIGUINT : value is a pointer to an unsigned big_uint +* - OCI_NUM_FLOAT : value is a pointer to an float +* - OCI_NUM_DOUBLE : value is a pointer to a double +* - OCI_NUM_NUMBER : value is a pointer to a OCI_Number +* +* @return +* TRUE on success otherwise FALSE +* +*/ + +OCI_EXPORT boolean OCI_API OCI_NumberSetValue +( + OCI_Number *number, + unsigned int type, + void *value +); + +/** +* @brief +* Assign the number value to a native C numeric type +* +* @param number - number handle +* @param type - native C type to assign +* @param value - pointer to a native C variable +* +* @note +* See OCI_NumberSetValue() for more information +* +* @return +* TRUE on success otherwise FALSE +* +*/ + +OCI_EXPORT boolean OCI_API OCI_NumberGetValue +( + OCI_Number *number, + unsigned int type, + void *value +); + +/** +* @brief +* Add the value of a native C numeric type to the given number +* +* @param number - number handle +* @param type - native C type of the variable +* @param value - pointer to a native C variable to add +* +* @note +* See OCI_NumberSetValue() for more information +* +* @return +* TRUE on success otherwise FALSE +* +*/ + +OCI_EXPORT boolean OCI_API OCI_NumberAdd +( + OCI_Number *number, + unsigned int type, + void *value +); + +/** +* @brief +* Subtract the value of a native C numeric type to the given number +* +* @param number - number handle +* @param type - native C type of the variable +* @param value - pointer to a native C variable to subtract +* +* @note +* See OCI_NumberSetValue() for more information +* +* @return +* TRUE on success otherwise FALSE +* +*/ + +OCI_EXPORT boolean OCI_API OCI_NumberSub +( + OCI_Number *number, + unsigned int type, + void *value +); + +/** +* @brief +* Multiply the given number with the value of a native C numeric +* +* @param number - number handle +* @param type - native C type of the variable +* @param value - pointer to a native C variable to multiply by +* +* @note +* See OCI_NumberSetValue() for more information +* +* @return +* TRUE on success otherwise FALSE +* +*/ + +OCI_EXPORT boolean OCI_API OCI_NumberMultiply +( + OCI_Number *number, + unsigned int type, + void *value +); + +/** +* @brief +* Divide the given number with the value of a native C numeric +* +* @param number - number handle +* @param type - native C type of the variable +* @param value - pointer to a native C variable to divide by +* +* @note +* See OCI_NumberSetValue() for more information +* +* @return +* TRUE on success otherwise FALSE +* +*/ + +OCI_EXPORT boolean OCI_API OCI_NumberDivide +( + OCI_Number *number, + unsigned int type, + void *value +); + +/** + * @brief + * Compares two number handles + * + * @param number1 - number1 handle + * @param number2 - number2 handle + * + * @return + * - -1 if number1 is smaller than number2, + * - 0 if they are equal + * - 1 if number1 is greater than number2. + * + */ + +OCI_EXPORT int OCI_API OCI_NumberCompare +( + OCI_Number *number1, + OCI_Number *number2 +); + +/** +* @} +*/ + +/** + * @} + */ + +/** + * @defgroup OcilibCApiDatetimes Date/time manipulation + * @{ + * + * OCILIB encapsulates Oracle SQL Date data type within OCI_Date structure + * + * Basically, the OCI_Date routines are wrappers around the Oracle OCIDate APIs + * + * @par Example + * @include date.c + * + */ + +/** + * @brief + * Create a local date object + * + * @param con - Connection handle + * + * @note + * From version 2.5.0, parameter 'con' can be NULL in order to manipulate dates + * independently from database connections + * + * @return + * Return the date handle on success otherwise NULL on failure + * + */ + +OCI_EXPORT OCI_Date * OCI_API OCI_DateCreate +( + OCI_Connection *con +); + +/** + * @brief + * Free a date object + * + * @param date - Date handle + * + * @warning + * Only dates created with OCI_DateCreate() should be freed by OCI_DateFree() + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_DateFree +( + OCI_Date *date +); + +/** + * @brief + * Create an array of date object + * + * @param con - Connection handle + * @param nbelem - number of elements in the array + * + * @note + * see OCI_DateCreate() for more details + * + * @return + * Return the date handle array on success otherwise NULL on failure + * + */ + +OCI_EXPORT OCI_Date ** OCI_API OCI_DateArrayCreate +( + OCI_Connection *con, + unsigned int nbelem +); + +/** + * @brief + * Free an array of date objects + * + * @param dates - Array of date objects + * + * @warning + * Only arrays of dates created with OCI_DateArrayCreate() should be freed by OCI_DateArrayFree() + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_DateArrayFree +( + OCI_Date **dates +); + +/** + * @brief + * Add or subtract days to a date handle + * + * @param date - Date handle + * @param nb - Number of days to add/remove + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_DateAddDays +( + OCI_Date *date, + int nb +); + +/** + * @brief + * Add or subtract months to a date handle + * + * @param date - Date handle + * @param nb - Number of months to add/remove + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_DateAddMonths +( + OCI_Date *date, + int nb +); + +/** + * @brief + * Assign the value of a date handle to another one + * + * @param date - Destination Date handle + * @param date_src - Source Date handle + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT int OCI_API OCI_DateAssign +( + OCI_Date *date, + OCI_Date *date_src +); + +/** + * @brief + * Check if the given date is valid + * + * @param date - Date handle + * + * @return + * - Zero if date is valid + * - Any other value means the date is invalid + * + */ + +OCI_EXPORT int OCI_API OCI_DateCheck +( + OCI_Date *date +); + +/** + * @brief + * Compares two date handles + * + * @param date - Date1 handle + * @param date2 - Date2 handle + * + * @return + * - -1 if date1 is smaller than date2, + * - 0 if they are equal + * - 1 if date1 is greater than date2. + * + */ + +OCI_EXPORT int OCI_API OCI_DateCompare +( + OCI_Date *date, + OCI_Date *date2 +); + +/** + * @brief + * Return the number of days betWeen two dates + * + * @param date - Date1 handle + * @param date2 - Date2 handle + * + * @return + * Number of days on success otherwise OCI_ERROR on failure + * + */ + +OCI_EXPORT int OCI_API OCI_DateDaysBetween +( + OCI_Date *date, + OCI_Date *date2 +); + +/** + * @brief + * Convert a string to a date and store it in the given date handle + * + * @param date - Destination Date handle + * @param str - Source date string + * @param fmt - Date format + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_DateFromText +( + OCI_Date *date, + const otext *str, + const otext *fmt +); + +/** + * @brief + * Convert a Date value from the given date handle to a string + * + * @param date - source Date handle + * @param fmt - Date format + * @param size - Destination string size in characters + * @param str - Destination date string + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_DateToText +( + OCI_Date *date, + const otext *fmt, + int size, + otext *str +); + +/** + * @brief + * Extract the date part from a date handle + * + * @param date - Date handle + * @param year - Place holder for year value + * @param month - Place holder for month value + * @param day - Place holder for day value + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_DateGetDate +( + OCI_Date *date, + int *year, + int *month, + int *day +); + +/** + * @brief + * Extract the time part from a date handle + * + * @param date - Date handle + * @param hour - Place holder for hour value + * @param min - Place holder for minute value + * @param sec - Place holder for second value + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_DateGetTime +( + OCI_Date *date, + int *hour, + int *min, + int *sec +); + +/** + * @brief + * Extract the date and time parts from a date handle + * + * @param date - Date handle + * @param year - Place holder for year value + * @param month - Place holder for month value + * @param day - Place holder for day value + * @param hour - Place holder for hour value + * @param min - Place holder for minute value + * @param sec - Place holder for second value + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_DateGetDateTime +( + OCI_Date *date, + int *year, + int *month, + int *day, + int *hour, + int *min, + int *sec +); + +/** + * @brief + * Set the date portion if the given date handle + * + * @param date - Date handle + * @param year - Year value + * @param month - Month value + * @param day - Day value + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_DateSetDate +( + OCI_Date *date, + int year, + int month, + int day +); + +/** + * @brief + * Set the time portion if the given date handle + * + * @param date - Date handle + * @param hour - Hour value + * @param min - Minute value + * @param sec - Second value + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_DateSetTime +( + OCI_Date *date, + int hour, + int min, + int sec +); + +/** + * @brief + * Set the date and time portions if the given date handle + * + * @param date - Date handle + * @param year - Year value + * @param month - Month value + * @param day - Day value + * @param hour - Hour value + * @param min - Minute value + * @param sec - Second value + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_DateSetDateTime +( + OCI_Date *date, + int year, + int month, + int day, + int hour, + int min, + int sec +); + +/** + * @brief + * Place the last day of month (from the given date) into the given date + * + * @param date - Date handle + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_DateLastDay +( + OCI_Date *date +); + +/** + * @brief + * Gets the date of next day of the week, after a given date + * + * @param date - Date handle + * @param day - Day of the week + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_DateNextDay +( + OCI_Date *date, + const otext *day +); + +/** + * @brief + * Return the current system date/time into the date handle + * + * @param date - Date handle + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_DateSysDate +( + OCI_Date *date +); + +/** + * @brief + * Convert a date from one zone to another zone + * + * @param date - Date handle + * @param zone1 - Source zone + * @param zone2 - Destination zone + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_DateZoneToZone +( + OCI_Date *date, + const otext *zone1, + const otext *zone2 +); + +/** + * @brief + * Affect an OCI_Date handle value to ISO C time data types + * + * @param date - Date handle + * @param ptm - Pointer to a structure tm to receive date/time values + * @param pt - Pointer to a time_t to hold the date/time in the time_t format + * + * @note + * Both parameters 'ptm' and 'p' are optional but one of them has to be provided. + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_DateToCTime +( + OCI_Date *date, + struct tm *ptm, + time_t *pt +); + +/** + * @brief + * Affect ISO C time data types values to an OCI_Date handle + * + * @param date - Date handle + * @param ptm - Pointer to a structure tm that hold the date/time value + * @param t - Value (time_t) that hold the date/time in the time_t format + * + * @note + * Both parameters 'ptm' and 'p' are optional but one of them has to be provided. + * If 'ptm' is not null, its value is affected to the OCI_Timestamp handle, + * otherwise the value of 't' is used. + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_DateFromCTime +( + OCI_Date *date, + struct tm *ptm, + time_t t +); + +/** + * @} + */ + +/** + * @defgroup OcilibCApiTimestamps Timestamps and intervals manipulation + * @{ + * + * OCILIB encapsulates Oracle : + * + * - SQL timestamp data type within OCI_Timestamp structure + * - SQL interval data type within OCI_Interval structure + * + * Basically, the OCI_Timestamp and OCI_Interval routines are wrappers around + * the Oracle OCIDatetime and OCIInterval APIs + * + * @par Examples + * @include timestamp.c + * + */ + +/** + * @brief + * Create a local Timestamp instance + * + * @param con - Connection handle + * @param type - Timestamp type + * + * @note + * From version 2.5.0, parameter 'con' can be NULL in order to manipulate + * timestamps independently from database connections + * + * @note + * Timestamp type can be : + * + * - OCI_TIMESTAMP : timestamp + * - OCI_TIMESTAMP_TZ : timestamp with time zone + * - OCI_TIMESTAMP_LTZ : timestamp with local time zone + * + * @return + * Return the Timestamp handle on success otherwise NULL on failure + * + */ + +OCI_EXPORT OCI_Timestamp * OCI_API OCI_TimestampCreate +( + OCI_Connection *con, + unsigned int type +); + +/** + * @brief + * Free an OCI_Timestamp handle + * + * @param tmsp - Timestamp handle + * + * @warning + * Only Timestamp created with OCI_TimestampCreate() should be freed by OCI_IntervalFree() + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_TimestampFree +( + OCI_Timestamp *tmsp +); + +/** + * @brief + * Create an array of timestamp object + * + * @param con - Connection handle + * @param type - Timestamp type + * @param nbelem - number of elements in the array + * + * @note + * see OCI_TimestampCreate() for more details + * + * @return + * Return the timestamp handle array on success otherwise NULL on failure + * + */ + +OCI_EXPORT OCI_Timestamp ** OCI_API OCI_TimestampArrayCreate +( + OCI_Connection *con, + unsigned int type, + unsigned int nbelem +); + +/** + * @brief + * Free an array of timestamp objects + * + * @param tmsps - Array of timestamp objects + * + * @warning + * Only arrays of timestamp created with OCI_TimestampArrayCreate() + * should be freed by OCI_TimestampArrayFree() + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_TimestampArrayFree +( + OCI_Timestamp **tmsps +); + +/** + * @brief + * Return the type of the given Timestamp object + * + * @param tmsp - Timestamp handle + * + * @note + * For possible values, see OCI_TimestampCreate() + * + * @return + * Object type or OCI_UNKNOWN the input handle is NULL + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_TimestampGetType +( + OCI_Timestamp *tmsp +); + +/** + * @brief + * Assign the value of a timestamp handle to another one + * + * @param tmsp - Destination Timestamp handle + * @param tmsp_src - Source Timestamp handle + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_TimestampAssign +( + OCI_Timestamp *tmsp, + OCI_Timestamp *tmsp_src +); + +/** + * @brief + * Check if the given timestamp is valid + * + * @param tmsp - Timestamp handle + * + * @return + * - Zero if the timestamp value is valid + * - Any other value means the timestamp value is invalid + * + */ + +OCI_EXPORT int OCI_API OCI_TimestampCheck +( + OCI_Timestamp *tmsp +); + +/** + * @brief + * Compares two timestamp handles + * + * @param tmsp - Timestamp1 handle + * @param tmsp2 - Timestamp2 handle + * + * @return + * - -1 if Timestamp1 is smaller than Timestamp2, + * - 0 if they are equal + * - 1 if Timestamp1 is greater than Timestamp2. + * + */ + +OCI_EXPORT int OCI_API OCI_TimestampCompare +( + OCI_Timestamp *tmsp, + OCI_Timestamp *tmsp2 +); + +/** + * @brief + * Set a timestamp handle value + * + * @param tmsp - Timestamp handle + * @param year - Year value + * @param month - Month value + * @param day - Day value + * @param hour - hour value + * @param min - minutes value + * @param sec - seconds value + * @param fsec - fractional part of seconds value + * @param time_zone - name of a time zone to use [optional] + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_TimestampConstruct +( + OCI_Timestamp *tmsp, + int year, + int month, + int day, + int hour, + int min, + int sec, + int fsec, + const otext *time_zone +); + +/** + * @brief + * Convert one timestamp value from one type to another. + * + * @param tmsp - Timestamp handle to convert + * @param tmsp_src - Timestamp handle to use for the type conversion + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_TimestampConvert +( + OCI_Timestamp *tmsp, + OCI_Timestamp *tmsp_src +); + +/** + * @brief + * Convert a string to a timestamp and store it in the given timestamp handle + * + * @param tmsp - Destination Timestamp handle + * @param str - Source date string + * @param fmt - Date format + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_TimestampFromText +( + OCI_Timestamp *tmsp, + const otext *str, + const otext *fmt +); + +/** + * @brief + * Convert a timestamp value from the given timestamp handle to a string + * + * @param tmsp - source Timestamp handle + * @param fmt - Timestamp format + * @param size - Destination string size in characters + * @param str - Destination date string + * @param precision - Precision for fractional part of the seconds + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_TimestampToText +( + OCI_Timestamp *tmsp, + const otext *fmt, + int size, + otext *str, + int precision +); + +/** + * @brief + * Extract the date part from a timestamp handle + * + * @param tmsp - Timestamp handle + * @param year - Place holder for year value + * @param month - Place holder for month value + * @param day - Place holder for day value + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_TimestampGetDate +( + OCI_Timestamp *tmsp, + int *year, + int *month, + int *day +); + +/** + * @brief + * Extract the time portion from a timestamp handle + * + * @param tmsp - Timestamp handle + * @param hour - Place holder for hour value + * @param min - Place holder for minute value + * @param sec - Place holder for second value + * @param fsec - Place holder for fractional part of second value + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_TimestampGetTime +( + OCI_Timestamp *tmsp, + int *hour, + int *min, + int *sec, + int *fsec +); + +/** + * @brief + * Extract the date and time parts from a date handle + * + * @param tmsp - Date handle + * @param year - Place holder for year value + * @param month - Place holder for month value + * @param day - Place holder for day value + * @param hour - Place holder for hour value + * @param min - Place holder for minute value + * @param sec - Place holder for second value + * @param fsec - Place holder for fractional part of seconds value + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_TimestampGetDateTime +( + OCI_Timestamp *tmsp, + int *year, + int *month, + int *day, + int *hour, + int *min, + int *sec, + int *fsec +); + +/** + * @brief + * Return the time zone name of a timestamp handle + * + * @param tmsp - Timestamp handle + * @param size - Destination string size in characters + * @param str - Destination zone name string + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_TimestampGetTimeZoneName +( + OCI_Timestamp *tmsp, + int size, + otext *str +); + +/** + * @brief + * Return the time zone (hour, minute) portion of a timestamp handle + * + * @param tmsp - Timestamp handle + * @param hour - Place holder for hour value + * @param min - Place holder for min value + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_TimestampGetTimeZoneOffset +( + OCI_Timestamp *tmsp, + int *hour, + int *min +); + +/** + * @brief + * Add an interval value to a timestamp value of a timestamp handle + * + * @param tmsp - Timestamp handle + * @param itv - Interval handle + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_TimestampIntervalAdd +( + OCI_Timestamp *tmsp, + OCI_Interval *itv +); + +/** + * @brief + * Subtract an interval value from a timestamp value of a timestamp handle + * + * @param tmsp - Timestamp handle + * @param itv - Interval handle + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_TimestampIntervalSub +( + OCI_Timestamp *tmsp, + OCI_Interval *itv +); + +/** + * @brief + * Store the difference of two timestamp handles into an interval handle + * + * @param tmsp - Timestamp handle (subtrahend) + * @param tmsp2 - Timestamp2 handle (minuend) + * @param itv - Interval handle + * + * @note + * The function acts like tmsp - tmsp2 = itv + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_TimestampSubtract +( + OCI_Timestamp *tmsp, + OCI_Timestamp *tmsp2, + OCI_Interval *itv +); + +/** + * @brief + * Stores the system current date and time as a timestamp value with time zone + * into the timestamp handle. + * + * @param tmsp - Timestamp handle + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_TimestampSysTimestamp +( + OCI_Timestamp *tmsp +); + +/** + * @brief + * Affect an OCI_Timestamp handle value to ISO C time data types + * + * @param tmsp - Timestamp handle + * @param ptm - Pointer to a structure tm to receive date/time values + * @param pt - Pointer to a time_t to hold the date/time in the time_t format + * + * @note + * Both parameters 'ptm' and 'p' are optional but one of them has to be provided. + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_TimestampToCTime +( + OCI_Timestamp *tmsp, + struct tm *ptm, + time_t *pt +); + +/** + * @brief + * Affect ISO C time data types values to an OCI_Timestamp handle + * + * @param tmsp - Timestamp handle + * @param ptm - Pointer to a structure tm that hold the date/time value + * @param t - Value (time_t) that hold the date/time in the time_t format + * + * @note + * Both parameters 'ptm' and 'p' are optional but one of them has to be provided. + * If 'ptm' is not null, its value is affected to the OCI_Timestamp handle, + * otherwise the value of 't' is used. + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_TimestampFromCTime +( + OCI_Timestamp *tmsp, + struct tm *ptm, + time_t t +); + +/** + * @brief + * Create a local interval object + * + * @param con - Connection handle + * @param type - Type of Interval + * + * @note + * From version 2.5.0, parameter 'con' can be NULL in order to manipulate + * intervals independently from database connections + * + * @note + * Interval type can be : + * - OCI_INTERVAL_YM : year / month interval + * - OCI_INTERVAL_DS : date/ time interval + * + * @return + * Return the Interval handle on success otherwise NULL on failure + * + */ + +OCI_EXPORT OCI_Interval * OCI_API OCI_IntervalCreate +( + OCI_Connection *con, + unsigned int type +); + +/** + * @brief + * Free an OCI_Interval handle + * + * @param itv - Interval handle + * + * @warning + * Only Intervals created with OCI_IntervalCreate() should be freed by + * OCI_IntervalFree() + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_IntervalFree +( + OCI_Interval *itv +); + +/** + * @brief + * Create an array of Interval object + * + * @param con - Connection handle + * @param type - Type of Interval + * @param nbelem - number of elements in the array + * + * @note + * see OCI_IntervalCreate() for more details + * + * @return + * Return the Interval handle array on success otherwise NULL on failure + * + */ + +OCI_EXPORT OCI_Interval ** OCI_API OCI_IntervalArrayCreate +( + OCI_Connection *con, + unsigned int type, + unsigned int nbelem +); + +/** + * @brief + * Free an array of Interval objects + * + * @param itvs - Array of Interval objects + * + * @warning + * Only arrays of Interval created with OCI_IntervalArrayCreate() should be freed by + * OCI_IntervalArrayFree() + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_IntervalArrayFree +( + OCI_Interval **itvs +); + +/** + * @brief + * Return the type of the given Interval object + * + * @param itv - Interval handle + * + * @note + * For possible values, see OCI_IntervalCreate() + * + * @return + * Object type or OCI_UNKNOWN the input handle is NULL + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_IntervalGetType +( + OCI_Interval *itv +); + +/** + * @brief + * Assign the value of a interval handle to another one + * + * @param itv - Destination interval handle + * @param itv_src - Source interval handle + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_IntervalAssign +( + OCI_Interval *itv, + OCI_Interval *itv_src +); + +/** + * @brief + * Check if the given interval is valid + * + * @param itv - Interval handle + * + * @return + * - Zero if the interval value is valid + * - Any other value means the interval value is invalid + * + */ + +OCI_EXPORT int OCI_API OCI_IntervalCheck +( + OCI_Interval *itv +); + +/** + * @brief + * Compares two interval handles + * + * @param itv - Interval1 handle + * @param itv2 - Interval2 handle + * + * @return + * - -1 if interval1 is smaller than interval2, + * - 0 if they are equal + * - 1 if interval1 is greater than interval2. + * + */ + +OCI_EXPORT int OCI_API OCI_IntervalCompare +( + OCI_Interval *itv, + OCI_Interval *itv2 +); + +/** + * @brief + * Convert a string to an interval and store it in the given interval handle + * + * @param itv - Destination interval handle + * @param str - Source date string + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_IntervalFromText +( + OCI_Interval *itv, + const otext *str +); + +/** + * @brief + * Convert an interval value from the given interval handle to a string + * + * @param itv - source Interval handle + * @param leading_prec - Precision of the leading part + * @param fraction_prec - Precision of the fractional part + * @param size - Destination string size in characters + * @param str - Destination date string + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_IntervalToText +( + OCI_Interval *itv, + int leading_prec, + int fraction_prec, + int size, + otext *str +); + +/** + * @brief + * Correct an interval handle value with the given time zone + * + * @param itv - Interval handle + * @param str - Time zone name + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_IntervalFromTimeZone +( + OCI_Interval *itv, + const otext *str +); + +/** + * @brief + * Return the day / time portion of an interval handle + * + * @param itv - Interval handle + * @param day - Place holder for day value + * @param hour - Place holder for hours value + * @param min - Place holder for minutes value + * @param sec - Place holder for seconds value + * @param fsec - Place holder for fractional part of seconds value + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_IntervalGetDaySecond +( + OCI_Interval *itv, + int *day, + int *hour, + int *min, + int *sec, + int *fsec +); + +/** + * @brief + * Return the year / month portion of an interval handle + * + * @param itv - Interval handle + * @param year - Place holder for year value + * @param month - Place holder for month value + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_IntervalGetYearMonth +( + OCI_Interval *itv, + int *year, + int *month +); + +/** + * @brief + * Set the day / time portion if the given interval handle + * + * @param itv - Interval handle + * @param day - day value + * @param hour - Hour value + * @param min - Minute value + * @param sec - Second value + * @param fsec - Fractional part of the seconds + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_IntervalSetDaySecond +( + OCI_Interval *itv, + int day, + int hour, + int min, + int sec, + int fsec +); + +/** + * @brief + * Set the year / month portion if the given Interval handle + * + * @param itv - Interval handle + * @param year - Year value + * @param month - Month value + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_IntervalSetYearMonth +( + OCI_Interval *itv, + int year, + int month +); + +/** + * @brief + * Adds an interval handle value to another + * + * @param itv - Interval handle from witch to add + * @param itv2 - Interval handle to add + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_IntervalAdd +( + OCI_Interval *itv, + OCI_Interval *itv2 +); + +/** + * @brief + * Subtract an interval handle value from another + * + * @param itv - Interval handle from witch to remove + * @param itv2 - Interval handle to remove + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_IntervalSubtract +( + OCI_Interval *itv, + OCI_Interval *itv2 +); + +/** + * @} + */ + +/** + * @defgroup OcilibCApiUserTypes Oracle Named Types (Oracle OBJECTs) + * @{ + * + * OCILIB implements Oracle Named types (user types and built-in types) through + * the OCI_Object type. + * + * OTT and C structures are not required to use objects in OCILIB. + * + * In order to manipulate objects attributes, OCILIB proposes a set of functions + * to get/set properties for various supported types. + * + * Objects can be: + * - Created as standalone instances (transient objects) + * - Used for binding (persistent / transient objects) + * - Retrieved from select statements (persistent / embedded objects) + * + * References (Oracle type REF) are identifiers (smart pointers) to objects and + * are implemented in OCILIB with the type OCI_Ref. + * + * OCILIB implements Oracle REFs as strong typed Reference (underlying OCI REFs + * are weaker in terms of typing). + * It means it's mandatory to provide type information to: + * - create a local OCI_Ref handle. + * - register an OCI_Ref handle for a 'returning into' clause. + * + * @note + * See Oracle Database SQL Language Reference for more details about REF data type + * + * @warning + * Prior to v3.5.0, OCILIB relied on some OCI routines to set/get objects + * attributes. these OCI calls had known bugs in Unicode mode that has been fixed in Oracle 11gR2. + * From v3.5.0, OCILIB directly sets objects attributes and thus OCILIB objects + * can now be used in Unicode mode. + * + * @par Example : Inserting a local object into a table + * @include object.c + * + * @par Example : Using Object References + * @include ref.c + * + */ + +/** + * @brief + * Create a local object instance + * + * @param con - Connection handle + * @param typinf - Object type (type info handle) + * + * @return + * Return the object handle on success otherwise NULL on failure + * + */ + +OCI_EXPORT OCI_Object * OCI_API OCI_ObjectCreate +( + OCI_Connection *con, + OCI_TypeInfo *typinf +); + +/** + * @brief + * Free a local object + * + * @param obj - Object handle + * + * @warning + * Only object created with OCI_ObjectCreate() should be freed + * by OCI_ObjectFree() + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ObjectFree +( + OCI_Object *obj +); + +/** + * @brief + * Create an array of Object objects + * + * @param con - Connection handle + * @param typinf - Object type (type info handle) + * @param nbelem - number of elements in the array + * + * @note + * see OCI_ObjectCreate() for more details + * + * @return + * Return the Object handle array on success otherwise NULL on failure + * + */ + +OCI_EXPORT OCI_Object ** OCI_API OCI_ObjectArrayCreate +( + OCI_Connection *con, + OCI_TypeInfo *typinf, + unsigned int nbelem +); + +/** + * @brief + * Free an array of Object objects + * + * @param objs - Array of Object objects + * + * @warning + * Only arrays of Object created with OCI_ObjectArrayCreate() + * should be freed by OCI_ObjectArrayFree() + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ObjectArrayFree +( + OCI_Object **objs +); + +/** + * @brief + * Assign an object to another one + * + * @param obj - Destination Object handle + * @param obj_src - Source Object handle + * + * @note + * Oracle proceeds to a deep copy of the object content + * + * @note + * The two object handles must have the same type otherwise an exception is thrown + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ObjectAssign +( + OCI_Object *obj, + OCI_Object *obj_src +); + +/** + * @brief + * Return the type of an object instance + * + * @param obj - Object handle + * + * @note + * Possibles values are : + * + * - OCI_OBJ_PERSISTENT: persistent object from the DB + * - OCI_OBJ_TRANSIENT : local temporary object + * - OCI_OBJ_VALUE : embedded object + * + * @return + * Instance type or OCI_UNKNOWN the input handle is NULL + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_ObjectGetType +( + OCI_Object *obj +); + +/** + * @brief + * Retrieve an Oracle Ref handle from an object and assign it to the given + * OCILIB OCI_Ref handle + * + * @param obj - Object handle + * @param ref - Ref handle + * + * @note + * The type information of the object and the ref must be the same, otherwise + * an exception is thrown + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ObjectGetSelfRef +( + OCI_Object *obj, + OCI_Ref *ref +); + +/** + * @brief + * Return the type info object associated to the object + * + * @param obj - Object handle + * + */ + +OCI_EXPORT OCI_TypeInfo * OCI_API OCI_ObjectGetTypeInfo +( + OCI_Object *obj +); + +/** + * @brief + * Return the boolean value of the given object attribute (ONLY for PL/SQL records) + * + * @param obj - Object handle + * @param attr - Attribute name + * + * @note + * If the attribute is found in the object descriptor attributes list, then a + * data type check is performed for integrity. + * OCI_ObjectGetBoolean() returns a valid value only for PL/SQL boolean based attributes + * + * @warning + * - ONLY supported by Oracle 12c and above ! + * + * @return + * Attribute value or 0 on failure or wrong attribute type + * + */ + +OCI_EXPORT boolean OCI_API OCI_ObjectGetBoolean +( + OCI_Object *obj, + const otext *attr +); + +/** +* @brief +* Return the number value of the given object attribute +* +* @param obj - Object handle +* @param attr - Attribute name +* +* @note +* If the attribute is found in the object descriptor attributes list, then a +* data type check is performed for integrity. +* OCI_ObjectGetNumber() returns a valid value only for number based attributes +* +* @return +* Attribute value or NULL on failure or wrong attribute type +* +*/ + +OCI_EXPORT OCI_Number* OCI_API OCI_ObjectGetNumber +( + OCI_Object *obj, + const otext *attr +); + +/** + * @brief + * Return the short value of the given object attribute + * + * @param obj - Object handle + * @param attr - Attribute name + * + * @note + * If the attribute is found in the object descriptor attributes list, then a + * data type check is performed for integrity. + * OCI_ObjectGetShort() returns a valid value only for integer and number based attributes + * + * @return + * Attribute value or 0 on failure or wrong attribute type + * + */ + +OCI_EXPORT short OCI_API OCI_ObjectGetShort +( + OCI_Object *obj, + const otext *attr +); + +/** + * @brief + * Return the unsigned short value of the given object attribute + * + * @param obj - Object handle + * @param attr - Attribute name + * + * @note + * If the attribute is found in the object descriptor attributes list, then a + * data type check is performed for integrity. + * OCI_ObjectGetUnsignedShort() returns a valid value only for integer and number based attributes + * + * @return + * Attribute value or 0 on failure or wrong attribute type + * + */ + +OCI_EXPORT unsigned short OCI_API OCI_ObjectGetUnsignedShort +( + OCI_Object *obj, + const otext *attr +); + +/** + * @brief + * Return the integer value of the given object attribute + * + * @param obj - Object handle + * @param attr - Attribute name + * + * @note + * If the attribute is found in the object descriptor attributes list, then a + * data type check is performed for integrity. + * OCI_ObjectGetInt() returns a valid value only for integer and number based attributes + * + * @return + * Attribute value or 0 on failure or wrong attribute type + * + */ + +OCI_EXPORT int OCI_API OCI_ObjectGetInt +( + OCI_Object *obj, + const otext *attr +); + +/** + * @brief + * Return the unsigned integer value of the given object attribute + * + * @param obj - Object handle + * @param attr - Attribute name + * + * @note + * If the attribute is found in the object descriptor attributes list, then a + * data type check is performed for integrity. + * OCI_ObjectGetUnsignedInt() returns a valid value only for integer and number based attributes + * + * @return + * Attribute value or 0 on failure or wrong attribute type + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_ObjectGetUnsignedInt +( + OCI_Object *obj, + const otext *attr +); + +/** + * @brief + * Return the big integer value of the given object attribute + * + * @param obj - Object handle + * @param attr - Attribute name + * + * @note + * If the attribute is found in the object descriptor attributes list, then a + * data type check is performed for integrity. + * OCI_ObjectGetBigInt() returns a valid value only for integer and number based attributes + * + * @return + * Attribute value or 0 on failure or wrong attribute type + * + */ + +OCI_EXPORT big_int OCI_API OCI_ObjectGetBigInt +( + OCI_Object *obj, + const otext *attr +); + +/** + * @brief + * Return the unsigned big integer value of the given object attribute + * + * @param obj - Object handle + * @param attr - Attribute name + * + * @note + * If the attribute is found in the object descriptor attributes list, then a + * data type check is performed for integrity. + * OCI_ObjectGetUnsignedBigInt() returns a valid value only for integer and number based attributes + * + * @return + * Attribute value or 0 on failure or wrong attribute type + * + */ + +OCI_EXPORT big_uint OCI_API OCI_ObjectGetUnsignedBigInt +( + OCI_Object *obj, + const otext *attr +); + +/** + * @brief + * Return the double value of the given object attribute + * + * @param obj - Object handle + * @param attr - Attribute name + * + * @note + * If the attribute is found in the object descriptor attributes list, then a + * data type check is performed for integrity. + * OCI_ObjectGetDouble() returns a valid value only for integer and number based attributes + * + * @return + * Attribute value or 0.0 on failure or wrong attribute type + * + */ + +OCI_EXPORT double OCI_API OCI_ObjectGetDouble +( + OCI_Object *obj, + const otext *attr +); + +/** + * @brief + * Return the float value of the given object attribute + * + * @param obj - Object handle + * @param attr - Attribute name + * + * @note + * If the attribute is found in the object descriptor attributes list, then a + * data type check is performed for integrity. + * OCI_ObjectGetFloat() returns a valid value only for integer and number based attributes + * + * @return + * Attribute value or 0.0 on failure or wrong attribute type + * + */ + +OCI_EXPORT float OCI_API OCI_ObjectGetFloat +( + OCI_Object *obj, + const otext *attr +); + +/** + * @brief + * Return the string value of the given object attribute + * + * @param obj - Object handle + * @param attr - Attribute name + * + * @note + * The method can return a string value for any attributes types. + * It performs implicit string conversions using the same + * mechanisms than OCI_GetString(). See its documentation for more details. + * + * @return + * Attribute value or NULL on failure + * + */ + +OCI_EXPORT const otext * OCI_API OCI_ObjectGetString +( + OCI_Object *obj, + const otext *attr +); + +/** + * @brief + * Return the raw attribute value of the given object attribute into the + * given buffer + * + * @param obj - Object handle + * @param attr - Attribute name + * @param value - Destination buffer + * @param len - Max size to write into buffer + + * @note + * If the attribute is found in the object descriptor attributes list, then a + * data type check is performed for integrity. + * OCI_ObjectGetRaw() copies data into the buffer only for raw based attributes + * + * @return + * Number of bytes written to the buffer or 0 on failure or wrong attribute type + * + */ + +OCI_EXPORT int OCI_API OCI_ObjectGetRaw +( + OCI_Object *obj, + const otext *attr, + void *value, + unsigned int len +); + +/** +* @brief +* Return the raw attribute value size of the given object attribute into the +* given buffer +* +* @param obj - Object handle +* @param attr - Attribute name +* +* @note +* If the attribute is found in the object descriptor attributes list, then a +* data type check is performed for integrity. +* +* @return +* size in bytes of the RAW value or 0 on failure or wrong attribute type +* +*/ + +OCI_EXPORT unsigned int OCI_API OCI_ObjectGetRawSize +( + OCI_Object *obj, + const otext *attr +); + +/** + * @brief + * Return the date value of the given object attribute + * + * @param obj - Object handle + * @param attr - Attribute name + * + * @note + * If the attribute is found in the object descriptor attributes list, then a + * data type check is performed for integrity. + * OCI_ObjectGetDate() returns a valid value only for date based attributes + * + * @return + * Attribute value or NULL on failure or wrong attribute type + * + */ + +OCI_EXPORT OCI_Date * OCI_API OCI_ObjectGetDate +( + OCI_Object *obj, + const otext *attr +); + +/** + * @brief + * Return the timestamp value of the given object attribute + * + * @param obj - Object handle + * @param attr - Attribute name + * + * @note + * If the attribute is found in the object descriptor attributes list, then a + * data type check is performed for integrity. + * OCI_ObjectGetTimestamp() returns a valid value only for timestamps based attributes + * + * @return + * Attribute value or NULL on failure or wrong attribute type + * + */ + +OCI_EXPORT OCI_Timestamp * OCI_API OCI_ObjectGetTimestamp +( + OCI_Object *obj, + const otext *attr +); + +/** + * @brief + * Return the interval value of the given object attribute + * + * @param obj - Object handle + * @param attr - Attribute name + * + * @note + * If the attribute is found in the object descriptor attributes list, then a + * data type check is performed for integrity. + * OCI_ObjectGetInterval() returns a valid value only for intervals based attributes + * + * @return + * Attribute value or NULL on failure or wrong attribute type + * + */ + +OCI_EXPORT OCI_Interval * OCI_API OCI_ObjectGetInterval +( + OCI_Object *obj, + const otext *attr +); + +/** + * @brief + * Return the collection value of the given object attribute + * + * @param obj - Object handle + * @param attr - Attribute name + * + * @note + * If the attribute is found in the object descriptor attributes list, then a + * data type check is performed for integrity. + * OCI_ObjectGetColl() returns a valid value only for intervals based attributes + * + * @return + * Attribute value or NULL on failure or wrong attribute type + * + */ + +OCI_EXPORT OCI_Coll * OCI_API OCI_ObjectGetColl +( + OCI_Object *obj, + const otext *attr +); + +/** + * @brief + * Return the Ref value of the given object attribute + * + * @param obj - Object handle + * @param attr - Attribute name + * + * @note + * If the attribute is found in the object descriptor attributes list, then a + * data type check is performed for integrity. + * OCI_ObjectGetRef() returns a valid value only for Refs based attributes + * + * @return + * Attribute value or NULL on failure or wrong attribute type + * + */ + +OCI_EXPORT OCI_Ref * OCI_API OCI_ObjectGetRef +( + OCI_Object *obj, + const otext *attr +); + +/** + * @brief + * Return the object value of the given object attribute + * + * @param obj - Object handle + * @param attr - Attribute name + * + * @note + * If the attribute is found in the object descriptor attributes list, then a + * data type check is performed for integrity. + * OCI_ObjectGetObject() returns a valid value only for object based attributes + * + * @return + * Attribute value or NULL on failure or wrong attribute type + * + */ + +OCI_EXPORT OCI_Object * OCI_API OCI_ObjectGetObject +( + OCI_Object *obj, + const otext *attr +); + +/** + * @brief + * Return the lob value of the given object attribute + * + * @param obj - Object handle + * @param attr - Attribute name + * + * @note + * If the attribute is found in the object descriptor attributes list, then a + * data type check is performed for integrity. + * OCI_ObjectGetLob() returns a valid value only for lobs based attributes + * + * @return + * Attribute value or NULL on failure or wrong attribute type + * + */ + +OCI_EXPORT OCI_Lob * OCI_API OCI_ObjectGetLob +( + OCI_Object *obj, + const otext *attr +); + +/** + * @brief + * Return the file value of the given object attribute + * + * @param obj - Object handle + * @param attr - Attribute name + * + * @note + * If the attribute is found in the object descriptor attributes list, then a + * data type check is performed for integrity. + * OCI_ObjectGetFile() returns a valid value only for files based attributes + * + * @return + * Attribute value or NULL on failure or wrong attribute type + * + */ + +OCI_EXPORT OCI_File * OCI_API OCI_ObjectGetFile +( + OCI_Object *obj, + const otext *attr +); + +/** + * @brief + * Set an object attribute of type boolean (ONLY for PL/SQL records) + * + * @param obj - Object handle + * @param attr - Attribute name + * @param value - boolean value + * + * @warning + * - ONLY supported by Oracle 12c and above ! + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ObjectSetBoolean +( + OCI_Object *obj, + const otext *attr, + boolean value +); + +/** +* @brief +* Set an object attribute of type number +* +* @param obj - Object handle +* @param attr - Attribute name +* @param value - number value +* +* @return +* TRUE on success otherwise FALSE +* +*/ + +OCI_EXPORT boolean OCI_API OCI_ObjectSetNumber +( + OCI_Object *obj, + const otext *attr, + OCI_Number *value +); + +/** + * @brief + * Set an object attribute of type short + * + * @param obj - Object handle + * @param attr - Attribute name + * @param value - Short value + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ObjectSetShort +( + OCI_Object *obj, + const otext *attr, + short value +); + +/** + * @brief + * Set an object attribute of type unsigned short + * + * @param obj - Object handle + * @param attr - Attribute name + * @param value - Unsigned short value + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ObjectSetUnsignedShort +( + OCI_Object *obj, + const otext *attr, + unsigned short value +); + +/** + * @brief + * Set an object attribute of type int + * + * @param obj - Object handle + * @param attr - Attribute name + * @param value - Int value + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ObjectSetInt +( + OCI_Object *obj, + const otext *attr, + int value +); + +/** + * @brief + * Set an object attribute of type unsigned int + * + * @param obj - Object handle + * @param attr - Attribute name + * @param value - Unsigned int value + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ObjectSetUnsignedInt +( + OCI_Object *obj, + const otext *attr, + unsigned int value +); + +/** + * @brief + * Set an object attribute of type big int + * + * @param obj - Object handle + * @param attr - Attribute name + * @param value - Big int value + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ObjectSetBigInt +( + OCI_Object *obj, + const otext *attr, + big_int value +); + +/** + * @brief + * Set an object attribute of type unsigned big int + * + * @param obj - Object handle + * @param attr - Attribute name + * @param value - Unsigned big int value + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ObjectSetUnsignedBigInt +( + OCI_Object *obj, + const otext *attr, + big_uint value +); + +/** + * @brief + * Set an object attribute of type double + * + * @param obj - Object handle + * @param attr - Attribute name + * @param value - Double value + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ObjectSetDouble +( + OCI_Object *obj, + const otext *attr, + double value +); + +/** + * @brief + * Set an object attribute of type float + * + * @param obj - Object handle + * @param attr - Attribute name + * @param value - Float value + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ObjectSetFloat +( + OCI_Object *obj, + const otext *attr, + float value +); + +/** + * @brief + * Set an object attribute of type string + * + * @param obj - Object handle + * @param attr - Attribute name + * @param value - String value + * + * @note + * passing a null pointer for value calls OCI_ObjectSetNull() + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ObjectSetString +( + OCI_Object *obj, + const otext *attr, + const otext *value +); + +/** + * @brief + * Set an object attribute of type RAW + * + * @param obj - Object handle + * @param attr - Attribute name + * @param value - Raw value + * @param len - Size of the raw value + * + * @note + * passing a null pointer for value calls OCI_ObjectSetNull() + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ObjectSetRaw +( + OCI_Object *obj, + const otext *attr, + void *value, + unsigned int len +); + +/** + * @brief + * Set an object attribute of type Date + * + * @param obj - Object handle + * @param attr - Attribute name + * @param value - Date Handle + * + * @note + * passing a null pointer for value calls OCI_ObjectSetNull() + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ObjectSetDate +( + OCI_Object *obj, + const otext *attr, + OCI_Date *value +); + +/** + * @brief + * Set an object attribute of type Timestamp + * + * @param obj - Object handle + * @param attr - Attribute name + * @param value - Timestamp Handle + * + * @note + * passing a null pointer for value calls OCI_ObjectSetNull() + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ObjectSetTimestamp +( + OCI_Object *obj, + const otext *attr, + OCI_Timestamp *value +); + +/** + * @brief + * Set an object attribute of type Interval + * + * @param obj - Object handle + * @param attr - Attribute name + * @param value - Interval Handle + * + * @note + * passing a null pointer for value calls OCI_ObjectSetNull() + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ObjectSetInterval +( + OCI_Object *obj, + const otext *attr, + OCI_Interval *value +); + +/** + * @brief + * Set an object attribute of type Collection + * + * @param obj - Object handle + * @param attr - Attribute name + * @param value - Collection Handle + * + * @note + * passing a null pointer for value calls OCI_ObjectSetNull() + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ObjectSetColl +( + OCI_Object *obj, + const otext *attr, + OCI_Coll *value +); + +/** + * @brief + * Set an object attribute of type Object + * + * @param obj - Object handle + * @param attr - Attribute name + * @param value - Object Handle + * + * @warning + * This function assigns a copy of the object to the given attribute. + * Any further modifications of the object passed as the parameter 'value' + * will not be reflected to object 's attribute set with this call + * + * @note + * passing a null pointer for value calls OCI_ObjectSetNull() + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ObjectSetObject +( + OCI_Object *obj, + const otext *attr, + OCI_Object *value +); + +/** + * @brief + * Set an object attribute of type Lob + * + * @param obj - Object handle + * @param attr - Attribute name + * @param value - Lob Handle + * + * @note + * passing a null pointer for value calls OCI_ObjectSetNull() + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ObjectSetLob +( + OCI_Object *obj, + const otext *attr, + OCI_Lob *value +); + +/** + * @brief + * Set an object attribute of type File + * + * @param obj - Object handle + * @param attr - Attribute name + * @param value - File Handle + * + * @note + * passing a null pointer for value calls OCI_ObjectSetNull() + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ObjectSetFile +( + OCI_Object *obj, + const otext *attr, + OCI_File *value +); + +/** + * @brief + * Set an object attribute of type Ref + * + * @param obj - Object handle + * @param attr - Attribute name + * @param value - Ref Handle + * + * @note + * passing a null pointer for value calls OCI_ObjectSetNull() + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ObjectSetRef +( + OCI_Object *obj, + const otext *attr, + OCI_Ref *value +); + +/** + * @brief + * Check if an object attribute is null + * + * @param obj - Object handle + * @param attr - Attribute name + * + * @return + * FALSE if the attribute is not null otherwise TRUE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ObjectIsNull +( + OCI_Object *obj, + const otext *attr +); + +/** + * @brief + * Set an object attribute to null + * + * @param obj - Object handle + * @param attr - Attribute name + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ObjectSetNull +( + OCI_Object *obj, + const otext *attr +); + +/** + * @brief + * Retrieve the underlying C (OTT/OCI style) structure of an OCI_Object handle + * + * @param obj - Object handle + * @param pp_struct - Address of a pointer that retrieve the C structure of data + * @param pp_ind - Address of a pointer that retrieve the C structure of indicators + * + * @note + * See Oracle OCI programming guide for more details about OTT structures. + * The members of these structures are OCI data types like OCINumber, OCIString + * that requires mixing OCILIB code and raw OCI code. + * OCI Object API headers have to be included to handle this data types using OCI object functions + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ObjectGetStruct +( + OCI_Object *obj, + void **pp_struct, + void **pp_ind +); + +/** + * @brief + * Convert an object handle value to a string + * + * @param obj - Object handle + * @param size - Destination string length pointer in characters + * @param str - Destination string + * + * @note + * In order to compute the needed string length, call the method with a NULL string + * Then call the method again with a valid buffer + * + * @note + * The resulting string is similar to the SQL*PLUS output for UDTs (user types and objects) + * For RAWs and BLOBs attributes, their binary values are converted to hexadecimal strings + * + * @warning + * This convenient method shall not be used when performance matters. It is usually called twice (buffer length + * computation) and must also care about quotes within strings. + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ObjectToText +( + OCI_Object *obj, + unsigned int *size, + otext *str +); + +/** + * @brief + * Create a local Ref instance + * + * @param con - Connection handle + * @param typinf - Ref type + * + * @return + * Return the Ref handle on success otherwise NULL on failure + * + */ + +OCI_EXPORT OCI_Ref * OCI_API OCI_RefCreate +( + OCI_Connection *con, + OCI_TypeInfo *typinf +); + +/** + * @brief + * Free a local Ref + * + * @param ref - Ref handle + * + * @warning + * Only Refs created with OCI_RefCreate() should be freed + * by OCI_RefFree() + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_RefFree +( + OCI_Ref *ref +); + +/** + * @brief + * Create an array of Ref object + * + * @param con - Connection handle + * @param typinf - Object type (type info handle) + * @param nbelem - number of elements in the array + * + * @note + * see OCI_RefCreate() for more details + * + * @return + * Return the Ref handle array on success otherwise NULL on failure + * + */ + +OCI_EXPORT OCI_Ref ** OCI_API OCI_RefArrayCreate +( + OCI_Connection *con, + OCI_TypeInfo *typinf, + unsigned int nbelem +); + +/** + * @brief + * Free an array of Ref objects + * + * @param refs - Array of Ref objects + * + * @warning + * Only arrays of Ref created with OCI_RefArrayCreate() + * should be freed by OCI_RefArrayFree() + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_RefArrayFree +( + OCI_Ref **refs +); + +/** + * @brief + * Assign a Ref to another one + * + * @param ref - Destination Ref handle + * @param ref_src - Source Ref handle + * + * @note + * The two Ref handles must have the same type otherwise an exception is thrown + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_RefAssign +( + OCI_Ref *ref, + OCI_Ref *ref_src +); + +/** + * @brief + * Return the type info object associated to the Ref + * + * @param ref - Ref handle + * + */ + +OCI_EXPORT OCI_TypeInfo * OCI_API OCI_RefGetTypeInfo +( + OCI_Ref *ref +); + +/** + * @brief + * Returns the object pointed by the Ref handle. + * + * @param ref - Ref handle + * + * @return + * The object handle is the ref is not null otherwise NULL + * + */ + +OCI_EXPORT OCI_Object * OCI_API OCI_RefGetObject +( + OCI_Ref *ref +); + +/** + * @brief + * Check if the Ref points to an object or not. + * + * @param ref - Ref handle + * + * @return + * TRUE if it does not point to a valid object otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_RefIsNull +( + OCI_Ref *ref +); + +/** + * @brief + * Nullify the given Ref handle + * + * @param ref - Ref handle + * + * @note + * this call clears the reference to object pointed by the Ref handle. + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_RefSetNull +( + OCI_Ref *ref +); + +/** + * @brief + * Returns the size of the hex representation of the given Ref handle + * + * @param ref - Ref handle + * + * @note + * the returned size is the number of character needed to store the + * hex representation of the Ref that can be retrieved with OCI_RefToText() + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_RefGetHexSize +( + OCI_Ref *ref +); + +/** + * @brief + * Converts a Ref handle value to a hexadecimal string. + * + * @param ref - Ref handle + * @param size - Destination string size in characters + * @param str - Destination string + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_RefToText +( + OCI_Ref *ref, + unsigned int size, + otext *str +); + +/** + * @} + */ + +/** + * @defgroup OcilibCApiAbort Aborting long operations + * @{ + * + * The Oracle OCI provides the ability to establish a server connection in : + * + * - blocking mode: each call to an OCI function returns control to the + * application when the call completes + * - non-blocking mode (based on polling paradigm) : the application have to + * call each function until its has completed its job + * + * OCILIB implements OCI in blocking mode. The application has to wait for OCI + * calls to complete to continue. + * + * Some operations can be long to be processed by the server. + * + * In order to cancel the current pending call, OCILIB provides OCI_Break() that + * cancel the last internal OCI Call and then raise an OCI abortion error code. + * + * @note + * Any call to OCI_Break() has to be done from a separate thread because the + * thread that has executed a long OCI call is waiting for its OCI call to complete. + * + * @par Example + * @include abort.c + * + */ + +/** + * @brief + * Perform an immediate abort of any currently Oracle OCI call + * + * @param con - connection handle + * + * @note + * The current call will abort and generate an error + * + * @return + * Returns FALSE if connection handle is NULL otherwise TRUE + */ + +OCI_EXPORT boolean OCI_API OCI_Break +( + OCI_Connection *con +); + +/** + * @} + */ + +/** + * @defgroup OcilibCApiMetadata Describing Schema Meta data and Objects + * @{ + * + * + * @par Example + * @include desc.c + * + */ + +/** + * @brief + * Retrieve the available type info information + * + * @param con - Connection handle + * @param name - Table/view name to query for + * @param type - Type of object + * + * @note + * Possible values for parameter type are : + * + * - OCI_UNKNOWN + * - OCI_TIF_TABLE + * - OCI_TIF_VIEW + * - OCI_TIF_TYPE + * + * @return + * - Type info handle on success + = - NULL if the object does not exist + * - NULL on failure + * + */ + +OCI_EXPORT OCI_TypeInfo * OCI_API OCI_TypeInfoGet +( + OCI_Connection *con, + const otext *name, + unsigned int type +); + +/** + * @brief + * Return the type of the type info object + * + * @param typinf - Type info handle + * + * @note + * Possible values for parameter type are : + * + * - OCI_UNKNOWM + * - OCI_TIF_TABLE + * - OCI_TIF_VIEW + * - OCI_TIF_TYPE + * + * @return + * Object type or OCI_UNKNOWN the input handle is NULL + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_TypeInfoGetType +( + OCI_TypeInfo *typinf +); + +/** + * @brief + * Retrieve connection handle from the type info handle + * + * @param typinf - Type info handle + * + */ + +OCI_EXPORT OCI_Connection * OCI_API OCI_TypeInfoGetConnection +( + OCI_TypeInfo *typinf +); + +/** + * @brief + * Free a type info object + * + * @param typinf - Type info handle + * + * @note + * this call is optional. + * OCI_TypeInfo object are internally tracked and + * automatically freed when their related connection is freed + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_TypeInfoFree +( + OCI_TypeInfo *typinf +); + +/** + * @brief + * Return the number of columns of a table/view/object + * + * @param typinf - Type info handle + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_TypeInfoGetColumnCount +( + OCI_TypeInfo *typinf +); + +/** + * @brief + * Return the column object handle at the given index in the table + * + * @param typinf - Type info handle + * @param index - Column position + * + * @return + * - Column handle on success + * - NULL if index is out of bounds or on error + * + */ + +OCI_EXPORT OCI_Column * OCI_API OCI_TypeInfoGetColumn +( + OCI_TypeInfo *typinf, + unsigned int index +); + +/** + * @brief + * Return the name described by the type info object + * + * @param typinf - Type info handle + * + */ + +OCI_EXPORT const otext * OCI_API OCI_TypeInfoGetName +( + OCI_TypeInfo *typinf +); + +/** + * @} + */ + +/** + * @defgroup OcilibCApiFormatting Formatted functions + * @{ + * + * OCILIB offers some smart routines that takes a variable number of arguments + * in order to minimize OCILIB function calls and reduce the amount of code lines + * + * On Windows platforms, the target programming language must support the __cdecl + * calling convention + * + * @note + * OCI_Immediate() and OCI_ImmediateFmt() support all OCILIB supported types + * for output result, except : + * - OCI_Long + * - OCI_Statement + * If a query output result contains one of these unsupported types, the function returns FALSE + * + * @note + * In the parameter list, every output placeholder MUST be preceded by + * an integer parameter that indicates the type of the placeholder + * in order to handle correctly the given pointer. + * + * Possible values for indicating placeholders type : + * + * - OCI_ARG_SHORT ------> short * + * - OCI_ARG_USHORT -----> unsigned short * + * - OCI_ARG_INT --------> int * + * - OCI_ARG_UINT -------> unsigned int* + * - OCI_ARG_BIGINT -----> big_int * + * - OCI_ARG_BIGUINT ----> unsigned big_int * + * - OCI_ARG_DOUBLE ----> double * + * - OCI_ARG_FLOAT ------> float * + * - OCI_ARG_NUMBER -----> OCI_Number * + * - OCI_ARG_TEXT -------> otext * + * - OCI_ARG_RAW --------> void * + * - OCI_ARG_DATETIME ---> OCI_Date * + * - OCI_ARG_LOB --------> OCI_Lob * + * - OCI_ARG_FILE -------> OCI_File * + * - OCI_ARG_TIMESTAMP --> OCI_Timestamp * + * - OCI_ARG_INTERVAL ---> OCI_Interval * + * - OCI_ARG_OBJECT -----> OCI_Object * + * - OCI_ARG_COLLECTION -> OCI_Coll * + * - OCI_ARG_REF --------> OCI_Ref * + * + * @note + * For output strings and Raws, returned data is copied to the given buffer + * instead of returning a pointer the real data. + * So these buffers must be big enough to hold the column content. No size check is performed. + * + * - For strings, only the real string is copied. + * - For Raws, the number of bytes copied is the column size + * + * @warning + * Input parameters for formatted function only support a restricted set of data types ! + * + * Supported input identifiers : + * + * - '%s' : (otext *) ----------> input string (quotes are added) + * - '%m' : (otext *) ----------> meta data string (no quotes added) + * - '%t' : (OCI_Date *) -------> Date + * - '%p' : (OCI_Timestamp *) --> timestamp + * - '%v' : (OCI_Interval *) ---> Interval + * - '%i' : (int) --------------> signed 32 bits integer + * - '%u' : (unsigned int) -----> unsigned 32 bits integer + * - '%li' : (big_int) ----------> signed 64 bits integer + * - '%lu' : (big_uint) ---------> unsigned 64 bits integer + * - '%hi' : (short) ------------> signed 16 bits integer + * - '%hu' : (unsigned short) ---> unsigned 16 bits integer + * - '%g' : (double, float ) ---> Numerics + * - '%n' : (OCI_Number *) -----> Number + * - '%r' : (OCI_Ref *) --------> Reference + * - '%o' : (OCI_Object *) -----> Object (not implemented yet) + * - '%c' : (OCI_Coll *) -------> collection (not implemented yet) + * + * @par Example + * @include format.c + * + */ + +/** + * @brief + * Perform 3 calls (prepare+execute+fetch) in 1 call + * + * @param con - Connection handle + * @param sql - SQL statement + * @param ... - List of program variables address to store the result of fetch operation + * + * @note + * Every output parameter MUST be preceded by an integer parameter that indicates the type + * of the placeholder in order to handle correctly the given pointer. + * + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_Immediate +( + OCI_Connection *con, + const otext *sql, + ... +); + +/** + * @brief + * Performs 4 call (prepare+bind+execute+fetch) in 1 call + * + * @param con - Connection handle + * @param sql - SQL statement + * @param ... - List of program values to format the SQL followed by the + * output variables addresses for the fetch operation + * + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_ImmediateFmt +( + OCI_Connection *con, + const otext *sql, + ... +); + +/** + * @brief + * Prepare a formatted SQL statement or PL/SQL block. + * + * @param stmt - Statement handle + * @param sql - SQL statement + * @param ... - List of program values to format the SQL + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_PrepareFmt +( + OCI_Statement *stmt, + const otext *sql, + ... +); + +/** + * @brief + * Execute a formatted SQL statement or PL/SQL block. + * + * @param stmt - Statement handle + * @param sql - SQL statement + * @param ... - List of program values to format the SQL + * + * @return + * TRUE on success otherwise FALSE + * + * @warning + * If a SQL warning occurs: + * - the function returns TRUE + * - the SQL warning triggers the global error handler with an OCI_Error having its OCI_ErrorGetType() + * attribute set to OCI_ERR_WARNING + * - If OCILIB is initialized with the OCI_ENV_CONTEXT mode, OCI_GetLastError() will return the OCI_Error + * object corresponding to the warning + * + */ + +OCI_EXPORT boolean OCI_ExecuteStmtFmt +( + OCI_Statement *stmt, + const otext *sql, + ... +); + +/** + * @brief + * Parse a formatted SQL statement or PL/SQL block. + * + * @param stmt - Statement handle + * @param sql - SQL statement + * @param ... - List of program values to format the SQL + * + * @note + * This call sends the SQL or PL/SQL command to the server for parsing only. + * The command is not executed. + * This call is only useful to check is a command is valid or not. + * + * @note + * This call prepares the statement (internal call to OCI_Prepare()) and ask + * the Oracle server to parse its SQL or PL/SQL command. + * OCI_Execute() can be call after OCI_ParseFmt() in order to execute the + * statement, which means that the server will re-parse again the command. + * + * @warning + * Do not use OCI_ParseFmt() unless you're only interested in the parsing result + * because the statement will be parsed again when executed and thus leading to + * unnecessary server round-trips and less performance + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_ParseFmt +( + OCI_Statement *stmt, + const otext *sql, + ... +); + +/** + * @brief + * Describe the select list of a formatted SQL select statement. + * + * @param stmt - Statement handle + * @param sql - SQL statement + * @param ... - List of program values to format the SQL + * + * @note + * This call sends the SELECT SQL order to the server for retrieving the + * description of the select order only. + * The command is not executed. + * This call is only useful to retrieve information on the associated resultset + * Call OCI_GetResultet() after OCI_Describe() to access to SELECT list + * information + * + * @note + * This call prepares the statement (internal call to OCI_Prepare()) and ask + * the Oracle server to describe the output SELECT list. + * OCI_Execute() can be call after OCI_Desbribe() in order to execute the + * statement, which means that the server will parse, and describe again the SQL + * order. + * + * @warning + * Do not use OCI_Desbribe() unless you're only interested in the resultset + * information because the statement will be parsed again when executed and thus + * leading to unnecessary server round-trips and less performance + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_DescribeFmt +( + OCI_Statement *stmt, + const otext *sql, + ... +); + +/** + * @} + */ + +/** + * @defgroup OcilibCApiHashTables Hash tables + * @{ + * + * OCILIB uses hash tables internally for index/name columns mapping. + * + * OCILIB makes public its hash table’s implementation public for general purpose + * uses. + * + * OCI_HashTable objects manage string keys / values that can be : + * + * - integers + * - strings + * - pointers + * + * This hash table implementation : + * + * - handle collisions + * - allows multiple values per key + * + * @par Internal conception + * + * - The hash table is composed of an array of slots. + * - Each slot can hold a linked list of entries (one per key) + * - Each entry can hold a linked list of values + * + * @note + * - The internal hash function computes the index in the array where the entry + * has to be inserted/looked up. + * + * + * @note + * Collisions are handled by chaining method. + * + * @include hash.c + * + */ + +/** + * @brief + * Create a hash table + * + * @param size - size of the hash table + * @param type - type of the hash table + * + * @note + * Parameter can be one of the following values : + * + * - OCI_HASH_STRING : string values + * - OCI_HASH_INTEGER : integer values + * - OCI_HASH_POINTER : pointer values + * + * @return + * Hash handle on success or NULL on failure + * + */ + +OCI_EXPORT OCI_HashTable * OCI_API OCI_HashCreate +( + unsigned int size, + unsigned int type +); + +/** + * @brief + * Destroy a hash table + * + * @param table - Table handle + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_HashFree +( + OCI_HashTable *table +); + +/** + * @brief + * Return the size of the hash table + * + * @param table - Table handle + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_HashGetSize +( + OCI_HashTable *table +); + +/** + * @brief + * Return the type of the hash table + * + * @param table - Table handle + * + * @note + * the return value can be one of the following values : + * + * - OCI_HASH_STRING : string values + * - OCI_HASH_INTEGER : integer values + * - OCI_HASH_POINTER : pointer values + * + * @return + * Hash table data type or OCI_UNKNOWN the input handle is NULL + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_HashGetType +( + OCI_HashTable *table +); + +/** + * @brief + * Add a pair string key / string value to the hash table + * + * @param table - Table handle + * @param key - String key + * @param value - string value + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_HashAddString +( + OCI_HashTable *table, + const otext *key, + const otext *value +); + +/** + * @brief + * Return the string value associated to the given key + * + * @param table - Table handle + * @param key - String key + * + * @return + * Stored string associated with the key otherwise NULL + * + */ + +OCI_EXPORT const otext * OCI_API OCI_HashGetString +( + OCI_HashTable *table, + const otext *key +); + +/** + * @brief + * Adds a pair string key / integer value to the hash table + * + * @param table - Table handle + * @param key - String key + * @param value - Integer value + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_HashAddInt +( + OCI_HashTable *table, + const otext *key, + int value +); + +/** + * @brief + * Return the integer value associated to the given key + * + * @param table - Table handle + * @param key - String key + * + * @return + * Stored integer associated with the key otherwise 0 + * + */ + +OCI_EXPORT int OCI_API OCI_HashGetInt +( + OCI_HashTable *table, + const otext *key +); + +/** + * @brief + * Adds a pair string key / pointer value to the hash table + * + * @param table - Table handle + * @param key - String key + * @param value - Pointer value + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_HashAddPointer +( + OCI_HashTable *table, + const otext *key, + void *value +); + +/** + * @brief + * Return a pointer associated with the given key + * + * @param table - Table handle + * @param key - String key + * + * @return + * Stored pointer associated with the key otherwise NULL + * + */ + +OCI_EXPORT void * OCI_API OCI_HashGetPointer +( + OCI_HashTable *table, + const otext *key +); + +/** + * @brief + * Lookup for an entry matching the key in the table + * + * @param table - Table handle + * @param key - String key + * @param create - Do create the entry if not exists + * + * @return + * Entry handle if key found/added otherwise NULL + * + */ + +OCI_EXPORT OCI_HashEntry * OCI_API OCI_HashLookup +( + OCI_HashTable *table, + const otext *key, + boolean create +); + +/** + * @brief + * Return the first hash slot that matches the key + * + * @param table - Table handle + * @param key - String key + * + * @return + * Slot handle if key found otherwise NULL + * + */ + +OCI_EXPORT OCI_HashValue * OCI_API OCI_HashGetValue +( + OCI_HashTable *table, + const otext *key +); + +/** + * @brief + * Return the entry slot of the hash table internal list at the given position + * + * @param table - Table handle + * @param index - index + * + * @warning + * Index start at at + * + * @return + * Slot handle otherwise NULL + * + */ + +OCI_EXPORT OCI_HashEntry * OCI_API OCI_HashGetEntry +( + OCI_HashTable *table, + unsigned int index +); + +/** + * @} + */ + +/** + * @defgroup OcilibCApiThreading Threads and mutexes + * @{ + * + * Oracle proposes a portable implementation of Mutex and Thread objects + * + * OCILIB implements these OCI features for portable multi-threading support. + * + * Mutexes are designed for mutual exclusion between thread in order to lock resources temporarily + * + * Thread keys can be seen as process-wide variables that have a thread-specific + * values. It allows to create a unique key identified by a name (string) that + * can store values specific to each thread. + * + * OCILIB exposes the types OCI_Mutex, OCI_Thread + * + * @warning + * OCILIB MUST be initialized with OCI_ENV_THREADED to enable threads support + * + * @warning + * OCI_Thread relies on Oracle API which uses natives threading capabilities of + * the supported platform + * + * @warning + * Using OCI_Mutex : + * - On Microsoft Windows, a thread can call OCI_MutexAcquire() more than once + * without any blocking. Just be sure that there is an OCI_MutexRelease() for + * every OCI_MutexAcquire() call + * - On Unix systems, a thread MUST call OCI_MutexRelease() after every call to + * OCI_MutexAcquire() in order to be able to call OCI_MutexAcquire() again. If + * not, it will be blocked... + * + * @par Example + * @include thread.c + * + */ + +/** + * @brief + * Create a Mutex object + * + * @return + * Mutex handle on success or NULL on failure + * + */ + +OCI_EXPORT OCI_Mutex * OCI_API OCI_MutexCreate +( + void +); + +/** + * @brief + * Destroy a mutex object + * + * @param mutex - Mutex handle + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_MutexFree +( + OCI_Mutex *mutex +); + +/** + * @brief + * Acquire a mutex lock + * + * @param mutex - Mutex handle + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_MutexAcquire +( + OCI_Mutex *mutex +); + +/** + * @brief + * Release a mutex lock + * + * @param mutex - Mutex handle + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_MutexRelease +( + OCI_Mutex *mutex +); + +/** + * @brief + * Create a Thread object + * + * @return + * Thread handle on success or NULL on failure + * + */ + +OCI_EXPORT OCI_Thread * OCI_API OCI_ThreadCreate +( + void +); + +/** + * @brief + * Destroy a thread object + * + * @param thread - Thread handle + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ThreadFree +( + OCI_Thread *thread +); + +/** + * @brief + * Execute the given routine within the given thread object + * + * @param thread - Thread handle + * @param proc - routine to execute + * @param arg - parameter to pass to the routine + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ThreadRun +( + OCI_Thread *thread, + POCI_THREAD proc, + void *arg +); + +/** + * @brief + * Join the given thread + * + * @param thread - Thread handle + * + * @note + * This function waits for the given thread to finish + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ThreadJoin +( + OCI_Thread *thread +); + +/** + * @brief + * Create a thread key object + * + * @param name - Thread key name + * @param destfunc - Thread key value destructor function + * + * @note + * Parameter proc is optional. It's called when the thread terminates to allow + * the program to deal with the thread specific value of the key + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ThreadKeyCreate +( + const otext *name, + POCI_THREADKEYDEST destfunc +); + +/** + * @brief + * Set a thread key value + * + * @param name - Thread key name + * @param value - user value to set + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ThreadKeySetValue +( + const otext *name, + void *value +); + +/** + * @brief + * Get a thread key value + * + * @param name - Thread key name + * + * @return + * Thread key value on success otherwise FALSE + * + */ + +OCI_EXPORT void * OCI_API OCI_ThreadKeyGetValue +( + const otext *name +); + +/** + * @} + */ + +/** + * @defgroup OcilibCApidirectPath Direct Path loading + * @{ + * + * OCILIB (from version 3.2.0) support the OCI direct Path API. + * + * Actual implementation of direct path API does not support the following + * elements : + * - Objects data types (User Defined Types and Object References) + * - Object tables + * - Nested tables + * - SQL String functions + * + * All scalar data types (numerics, characters and date/time), including LOBs + * and LONG types are supported + * + * @par Oracle direct API features (from Oracle Documentation) + * + * The direct path load interface allows an application to access the direct path + * load engine of the Oracle database server to perform the functions of the + * Oracle SQL*Loader utility. + * This functionality provides the ability to load data from external files + * into Oracle database objects, either a table or a partition of a partitioned + * table. + * The OCI direct path load interface has the ability to load multiple rows by + * loading a direct path stream which contains data for multiple rows. + * + * @par Oracle direct API limitation (from Oracle Documentation) + * The direct path load interface has the following limitations which are the + * same as SQL*Loader: + * - triggers are not supported + * - check constraints are not supported + * - referential integrity constraints are not supported + * - clustered tables are not supported + * - loading of remote objects is not supported + * - user-defined types are not supported + * - LOBs must be specified after all scalar columns + * - LONGs must be specified last + * + * @warning + * + * Its recommended to use direct path interface with an Oracle client that is + * the same version than the database. With version < 10g, it is mandatory + * regarding that it causes segmentation faults and it's known from Oracle that + * advices to use the same version for client and server (see metalink KB) + * + * @par How to use direct path + * + * - 1 : Create a direct path handle with OCI_DirPathCreate() + * - 2 : Set (optional) some direct path load attributes + * - 3 : Describe the columns to load with OCI_DirPathSetColumn() + * - 4 : Populate data with OCI_DirPathSetEntry() + * - 5 : Convert the data with OCI_DirPathConvert() + * - 6 : Load the data into the database with OCI_DirPathLoad() + * - 7 : Repeat step 4,5,6 + reset the stream with OCI_DirPathReset() until all + * rows has been loaded + * - 8 : Commit the load with OCI_DirPathFinish() + * - 9 : Free the direct path handle with OCI_DirPathFree() + * + * @par Example + * @include dirpath.c + * + */ + +/** + * @brief + * Create a direct path object + * + * @param typinf - Table type info handle + * @param partition - Partition name + * @param nb_cols - Number of columns to load + * @param nb_rows - Maximum of rows to handle per load operation + * + * @note + * Retrieve the table type info handle with OCI_TypeInfoGet(). + * The partition name is not mandatory + * + * @note + * Parameter 'nb_rows' is ignored for Oracle 8i. Prior to Oracle 9i, it's the + * OCI client that decides of the number of rows to process per convert/load calls. + * From Oracle 9i, OCI allows application to specify this value. Note that, the + * OCI client might not accept the input value. After OCI_DirPathPrepare() has + * been successfully called, OCI_DirPathGetMaxRows() returns the final number + * of rows used for the given direct path operation. + * + * @return + * Return the direct path handle on success otherwise NULL on failure + * + */ + +OCI_EXPORT OCI_DirPath * OCI_API OCI_DirPathCreate +( + OCI_TypeInfo *typinf, + const otext *partition, + unsigned int nb_cols, + unsigned int nb_rows +); + +/** + * @brief + * Free an OCI_DirPath handle + * + * @param dp - Direct path Handle + * + * @return + * TRUE on success otherwise FALSE + * + */ +OCI_EXPORT boolean OCI_API OCI_DirPathFree +( + OCI_DirPath *dp +); + +/** + * @brief + * Describe a column to load into the given table + * + * @param dp - Direct path Handle + * @param index - Column index + * @param name - Column name + * @param maxsize - Maximum input value size for a column entry + * @param format - Date or numeric format to use + * + * @note + * An error is thrown if : + * - If the column specified by the 'name' parameter is not found in the table + * referenced by the type info handle passed to OCI_DirPathCreate() + * - the index is out of bounds (= 0 or >= number of columns) + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_DirPathSetColumn +( + OCI_DirPath *dp, + unsigned int index, + const otext *name, + unsigned int maxsize, + const otext *format +); + +/** + * @brief + * Prepares the OCI direct path load interface before any rows can be converted + * or loaded + * + * @param dp - Direct path Handle + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_DirPathPrepare +( + OCI_DirPath *dp +); + +/** + * @brief + * Set the value of the given row/column array entry + * + * @param dp - Direct path Handle + * @param row - Row index + * @param index - Column index + * @param value - Value to set + * @param size - Size of the input value + * @param complete - Is the entry content fully provided ? + * + * @note + * Rows and columns indexes start at 1. + * + * @note + * The 'size' parameter is expressed in number of : + * - bytes for binary columns + * - characters for other columns + * + * @note + * Direct path support piece loading for LONGs and LOBs columns. When filling + * these columns, it's possible to provide input buffer piece by piece. In order + * to do so : + * - set the 'complete' parameter to FALSE + * - set the 'size' parameter to the piece size + * - Repeat calls to OCI_DirPathSetEntry() until the data is totally provided + * - The last call that set the last piece or an entry must specify the value + * TRUE for the 'complete' parameter + * + * @warning + * Current Direct Path OCILIB implementation DOES NOT support setting entry + * content piece by piece as mentioned above. It was planned in the original design + * but not supported yet. So, always set the complete parameter to TRUE. + * Setting entries content piece by piece may be supported in future releases + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_DirPathSetEntry +( + OCI_DirPath *dp, + unsigned int row, + unsigned int index, + void *value, + unsigned size, + boolean complete +); + +/** + * @brief + * Convert provided user data to the direct path stream format + * + * @param dp - Direct path Handle + * + * @return + * Possible return values : + * - OCI_DPR_COMPLETE : load has been successful + * - OCI_DPR_ERROR : an error happened while loading data + * - OCI_DPR_FULL : the internal stream is full + * - OCI_DPR_PARTIAL : a column hasn't been fully filled yet + * - OCI_DPR_EMPTY : no data was found to convert + * + * @note + * - When using conversion mode OCI_DCM_DEFAULT, OCI_DirPathConvert() stops when + * any error is encountered and returns OCI_DPR_ERROR + * - When using conversion mode OCI_DCM_FORCE, OCI_DirPathConvert() does not stop + * on errors. Instead it discards any erred rows and returns OCI_DPR_COMPLETE once + * all rows are processed. + * + * @note + * List of faulted rows and columns can be retrieved using OCI_DirPathGetErrorRow() and + * OCI_DirPathGetErrorColumn() + * + * @note + * OCI_DirPathGetAffectedRows() returns the number of rows converted in the last call. + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_DirPathConvert +( + OCI_DirPath *dp +); + +/** + * @brief + * Loads the data converted to direct path stream format + * + * @param dp - Direct path Handle + * + * @return + * Possible return values : + * - OCI_DPR_COMPLETE : conversion has been successful + * - OCI_DPR_ERROR : an error happened while converting data + * - OCI_DPR_FULL : the internal stream is full + * - OCI_DPR_PARTIAL : a column hasn't been fully filled yet + * - OCI_DPR_EMPTY : no data was found to load + * + * @note + * List of faulted rows can be retrieved using OCI_DirPathGetErrorRow() + * + * @note + * OCI_DirPathGetAffectedRows() returns the number of rows successfully loaded in the last call. + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_DirPathLoad +( + OCI_DirPath *dp +); + +/** + * @brief + * Reset internal arrays and streams to prepare another load + * + * @param dp - Direct path Handle + * + * @note + * Once some data have been converted or loaded, OCI_DirPathReset() resets + * internal OCI structures in order to prepare another load operation + * (set entries, convert and load) + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_DirPathReset +( + OCI_DirPath *dp +); + +/** + * @brief + * Terminate a direct path operation and commit changes into the database + * + * @param dp - Direct path Handle + * + * @warning + * The direct path handle cannot be used anymore after this call for any more + * loading operations and must be freed with OCI_DirPathFree(). + * + * @note + * Some properties functions of the direct path handle, such as + * OCI_DirPathGetRowCount() can be called on a terminated direct path handle + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_DirPathFinish +( + OCI_DirPath *dp +); + +/** + * @brief + * Terminate a direct path operation without committing changes + * + * @param dp - Direct path Handle + * + * @note + * Any pending loaded data are canceled. + * Any load completion operations, such as index maintenance operations, are not performed. + * + * @warning + * The direct path handle cannot be used anymore after this call for any more + * loading operations and must be freed with OCI_DirPathFree(). + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_DirPathAbort +( + OCI_DirPath *dp +); + +/** + * @brief + * Execute a data save-point (server side) + * + * @param dp - Direct path Handle + * + * @note + * Executing a data save-point is not allowed for LOBs + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_DirPathSave +( + OCI_DirPath *dp +); + +/** + * @brief + * Flushes a partially loaded row from server + * + * @param dp - Direct path Handle + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_DirPathFlushRow +( + OCI_DirPath *dp +); + +/** + * @brief + * Set the current number of rows to convert and load + * + * @param dp - Direct path Handle + * @param nb_rows - Number of row to process + * + * @warning + * An OCILIB error will be thrown if the value exceeds the maximum number of + * rows in the internals arrays + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_DirPathSetCurrentRows +( + OCI_DirPath *dp, + unsigned int nb_rows +); + +/** + * @brief + * Return the current number of rows used in the OCILIB internal + * arrays of rows + * + * @param dp - Direct path Handle + * + * @return + * Internal current array size on SUCCESS otherwise 0 + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_DirPathGetCurrentRows +( + OCI_DirPath *dp +); + +/** + * @brief + * Return the maximum number of rows allocated in the OCI and OCILIB + * internal arrays of rows + * + * @param dp - Direct path Handle + * + * @return + * Internal maximum array size on SUCCESS otherwise 0 + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_DirPathGetMaxRows +( + OCI_DirPath *dp +); + +/** + * @brief + * Set the default date format string for input conversion + * + * @param dp - Direct path Handle + * @param format - date format + * + * @note + * For string to date conversion, Oracle uses : + * - Column date format + * - Default date format (modified by this call) + * - Default global support environment setting + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_DirPathSetDateFormat +( + OCI_DirPath *dp, + const otext *format +); + +/** + * @brief + * Set the parallel loading mode + * + * @param dp - Direct path Handle + * @param value - enable/disable parallel mode + * + * @note + * Default value is FALSE. + * + * @note + * Setting the value to TRUE allows multiple load sessions to load the same + * segment concurrently + * + * @par Parallel loading mode (From Oracle documentation) + * + * A direct load operation requires that the object being loaded is locked to + * prevent DML on the object. + * Note that queries are lock-free and are allowed while the object is being loaded. + * - For a table load, if the option is set to: + * - FALSE, then the table DML X-Lock is acquired. + * - TRUE, then the table DML S-Lock is acquired. + * - For a partition load, if the option is set to: + * - FALSE, then the table DML SX-Lock and partition DML X-Lock is acquired. + * - TRUE, then the table DML SS-Lock and partition DML S-Lock is acquired. + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_DirPathSetParallel +( + OCI_DirPath *dp, + boolean value +); + +/** + * @brief + * Set the logging mode for the loading operation + * + * @param dp - Direct path Handle + * @param value - enable/disable logging + * + * @par Logging mode (from Oracle Documentation) + * + * The NOLOG attribute of each segment determines whether image redo or + * invalidation redo is generated: + * - FALSE : Use the attribute of the segment being loaded. + * - TRUE : No logging. Overrides DDL statement, if necessary. + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_DirPathSetNoLog +( + OCI_DirPath *dp, + boolean value +); + +/** + * @brief + * Set number of elements in the date cache + * + * @param dp - Direct path Handle + * @param size - Buffer size + * + * @note + * Default value is 0. + * + * @note + * Setting the value to 0 disables the cache + * + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_DirPathSetCacheSize +( + OCI_DirPath *dp, + unsigned int size +); + +/** + * @brief + * Set the size of the internal stream transfer buffer + * + * @param dp - Direct path Handle + * @param size - Buffer size + * + * @note + * Default value is 64KB. + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_DirPathSetBufferSize +( + OCI_DirPath *dp, + unsigned int size +); + +/** + * @brief + * Set the direct path conversion mode + * + * @param dp - Direct path Handle + * @param mode - Conversion mode + * + * @note + * Possible values for parameter 'mode' : + * - OCI_DCM_DEFAULT : conversion fails on error + * - OCI_DCM_FORCE : conversion does not fail on error + * + * @note + * See OCI_DirPathConvert() for conversion mode details + * + * @note + * Default value is OCI_DCM_DEFAULT + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_DirPathSetConvertMode +( + OCI_DirPath *dp, + unsigned int mode +); + +/** + * @brief + * Return the number of rows successfully loaded into the database so far + * + * @param dp - Direct path Handle + * + * @note + * Insertions are committed with OCI_DirPathFinish() + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_DirPathGetRowCount +( + OCI_DirPath *dp +); + +/** + * @brief + * return the number of rows successfully processed during in the last + * conversion or loading call + * + * @param dp - Direct path Handle + * + * @note + * This function called after : + * + * - OCI_DirPathConvert(), returns the number of converted rows + * - OCI_DirPathload(), returns the number of loaded rows + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_DirPathGetAffectedRows +( + OCI_DirPath *dp +); + +/** + * @brief + * Return the index of a column which caused an error during data conversion + * + * @param dp - Direct path Handle + * + * @warning + * Direct path column indexes start at 1. + * + * @note + * Errors may happen while data is converted to direct path stream format + * using OCI_DirPathConvert(). + * When using conversion mode OCI_DCM_DEFAULT, OCI_DirPathConvert() returns + * OCI_DPR_ERROR on error. OCI_DirPathGetErrorColumn() returns the column index + * that caused the error + * When using conversion mode OCI_DCM_FORCE, OCI_DirPathConvert() returns + * OCI_DPR_COMPLETE even on errors. In order to retrieve the list of all column + * indexes that have erred, the application can call OCI_DirPathGetErrorColumn() + * repeatedly until it returns 0. + * + * @note + * The internal value is reset to 0 when calling OCI_DirPathConvert() + * + * @return + * 0 is no error occurs otherwise the index of the given column which caused an + * error + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_DirPathGetErrorColumn +( + OCI_DirPath *dp +); + +/** + * @brief + * Return the index of a row which caused an error during data conversion + * + * @param dp - Direct path Handle + * + * @warning + * Direct path row indexes start at 1. + * + * @note + * Errors may happen : + * - while data is converted to direct path stream format using OCI_DirPathConvert() + * - while data is loaded to database using OCI_DirPathLoad() + * + * @note + * When using conversion mode OCI_DCM_DEFAULT, OCI_DirPathConvert() returns + * OCI_DPR_ERROR on error. OCI_DirPathGetErrorRow() returns the row index that + * caused the error. + * When using conversion mode OCI_DCM_FORCE, OCI_DirPathConvert() returns + * OCI_DPR_COMPLETE even on errors. In order to retrieve the list of all row + * indexes that have erred, the application can call OCI_DirPathGetErrorRow() + * repeatedly until it returns 0. + * + * @note + * After a call to OCI_DirPathLoad(), in order to retrieve the list of all faulted rows + * indexes, the application can call OCI_DirPathGetErrorRow() repeatedly until it returns 0. + * + * @note + * The internal value is reset to 0 when calling OCI_DirPathConvert(), + * OCI_DirPathReset() or OCI_DirPathLoad() + * + * @return + * 0 is no error occurs otherwise the index of the given row which caused an + * error + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_DirPathGetErrorRow +( + OCI_DirPath *dp +); + +/** + * @} + */ + +/** + * @defgroup OcilibCApiAdvancedQueuing Oracle Advanced Queuing (A/Q) + * @{ + * + * OCILIB supports Oracle Advanced Queues features + * + * Let's Oracle talk about this features ! + * + * @par Oracle Queues (from Oracle Streams - Advanced Queuing User's Guide) + * + * Oracle Streams AQ provides database-integrated message queuing functionality. + * It is built on top of Oracle Streams and leverages the functions of Oracle + * Database so that messages can be stored persistently, propagated between + * queues on different computers and databases, and transmitted using Oracle + * Net Services and HTTP(S). + * Because Oracle Streams AQ is implemented in database tables, all operational + * benefits of high availability, scalability, and reliability are also + * applicable to queue data. Standard database features such as recovery, + * restart, and security are supported by Oracle Streams AQ. You can use + * database development and management tools such as Oracle Enterprise Manager + * to monitor queues. Like other database tables, queue tables can be imported + * and exported. + * + * @par OCILIB implementation + * + * OCILIB provides a (nearly) full C implementation of Advanced Queues available in + * Oracle OCI and proposes the following data types : + * - OCI_Msg : Implementation of message to enqueue/dequeue from/to queues + * - OCI_Enqueue : Implementation of enqueuing process + * - OCI_Dequeue : Implementation of dequeuing process + * - OCI_Agent : Implementation of Advanced queues Agents + * + * OCILIB support AQ messages notification with Oracle Client 10gR2 or above + * + * Note that the only AQ features not supported yet by OCILIB are : + * - Payloads of type AnyData + * - Enqueuing/dequeuing arrays of messages + * - Optional delivery mode introduced in 10gR2 + * + * OCILIB provides as well a C API to administrate queues and queue tables initially + * reserved to PL/SQL and Java (wrappers around PL/SQL calls). + * This API, based on internal PL/SQL calls wrapping the DBMS_AQADM packages procedures, allow the + * following actions : + * - create, alter, drop and purge queue tables (OCI_QueueTableXXX calls) + * - create, alter, drop, start, stop queues (OCI_QueueXXX calls) + * + * Note that the user connected to the database needs particular privileges to manipulate or + * administrate queues (See Oracle Streams - Advanced Queuing User's Guide for more informations + * on these privileges) + * + *@par Example + * @include queue.c + * + */ + +/** + * @brief + * Create a message object based on the given payload type + * + * @param typinf - Type info handle + * + * @note + * OCILIB supports 2 type of message payload : + * - Oracle types (UDT) + * - RAW data + * + * @note + * Oracle Type AnyData is not supported in the current version of OCILIB + * + * @note + * the parameter 'typinf' indicates the type of payload : + * - For object payload, retrieve the object type information handle with + * OCI_TypeInfoGet() using the object type name + * - For RAW payload, you MUST pass the object type information retrieved with + * OCI_TypeInfoGet() using "SYS.RAW" as object type name + * + * @warning + * Newly created Message handles have NULL payloads. + * For Message handling Objects payloads, OCI_MsgGetObject() returns NULL until an object handle is + * assigned to the message. + * + * @note + * When a local OCI_Msg handle is enqueued, it keeps its attributes. If it's enqueued again, another + * identical message is posted into the queue. + * To reset a message and empty all its properties, call OCI_MsgReset() + * Note that OCI_MsgReset() clears the message payload. + * + * @return + * Return the message handle on success otherwise NULL on failure + * + */ + +OCI_EXPORT OCI_Msg * OCI_API OCI_MsgCreate +( + OCI_TypeInfo *typinf +); + +/** + * @brief + * Free a message object + * + * @param msg - Message handle + * + * @warning + * Only message handles created with OCI_MsgCreate() should be freed by OCI_MsgFree() + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_MsgFree +( + OCI_Msg *msg +); + +/** + * @brief + * Reset all attributes of a message object + * + * @param msg - Message handle + * + * @note + * This function calls OCI_MsgSetxxx() with default or NULL attributes + * + * @warning + * OCI_MsgReset() clears the message payload and set it to NULL + * For messages handling objects payloads, OCI_MsgSetObject() must be called again to assign a + * payload. + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_MsgReset +( + OCI_Msg *msg +); + +/** + * @brief + * Get the object payload of the given message + * + * @param msg - Message handle + * + * @return + * Return the object handle on success otherwise NULL on failure or if payload is NULL + * + */ + +OCI_EXPORT OCI_Object * OCI_API OCI_MsgGetObject +( + OCI_Msg *msg +); + +/** + * @brief + * Set the object payload of the given message + * + * @param msg - Message handle + * @param obj - Object handle + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_MsgSetObject +( + OCI_Msg *msg, + OCI_Object *obj +); + +/** + * @brief + * Get the RAW payload of the given message + * + * @param msg - Message handle + * @param raw - Input buffer + * @param size - Input buffer maximum size + * + * @note + * On output, parameter 'size' holds the number of bytes copied into the given buffer + * + * @return + * TRUE on success otherwise FALSE on failure or if payload is object based. + * + */ + +OCI_EXPORT boolean OCI_API OCI_MsgGetRaw +( + OCI_Msg *msg, + void *raw, + unsigned int *size +); + +/** + * @brief + * Set the RAW payload of the given message + * + * @param msg - Message handle + * @param raw - Raw data + * @param size - Raw data size + * + * @return + * TRUE on success otherwise FALSE on failure or if payload is object based. + * + */ + +OCI_EXPORT boolean OCI_API OCI_MsgSetRaw +( + OCI_Msg *msg, + const void *raw, + unsigned int size +); + +/** + * @brief + * Return the number of attempts that have been made to dequeue the message + * + * @param msg - Message handle + * + */ + +OCI_EXPORT int OCI_API OCI_MsgGetAttemptCount +( + OCI_Msg *msg +); + +/** + * @brief + * Return the number of seconds that a message is delayed for dequeuing + * + * @param msg - Message handle + * + * @note + * see OCI_MsgSetEnqueueDelay() for more details + * + */ + +OCI_EXPORT int OCI_API OCI_MsgGetEnqueueDelay +( + OCI_Msg *msg +); + +/** + * @brief + * set the number of seconds to delay the enqueued message + * + * @param msg - Message handle + * @param value - Delay in seconds + * + * @note + * The delay represents the number of seconds after which a message is available for dequeuing. + * When the message is enqueued, its state is set to OCI_AMS_WAITING. + * When the delay expires, its state is set to OCI_AMS_READY. + * + * @note + * If parameter 'value' is set to zero (default value), the message will be immediately available + * for dequeuing + * + * @warning + * Dequeuing by Message ID overrides the delay specification. + * + * @warning + * Delaying processing requires the queue monitor to be started. + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_MsgSetEnqueueDelay +( + OCI_Msg *msg, + int value +); + +/** + * @brief + * return the time the message was enqueued + * + * @param msg - Message handle + * + * @note + * Only use this function for message dequeued from queues + * + */ + +OCI_EXPORT OCI_Date * OCI_API OCI_MsgGetEnqueueTime +( + OCI_Msg *msg +); + +/** + * @brief + * Return the duration that the message is available for dequeuing + * + * @param msg - Message handle + * + * @note + * see OCI_MsgSetExpiration() for more details + * + */ + +OCI_EXPORT int OCI_API OCI_MsgGetExpiration +( + OCI_Msg *msg +); + +/** + * @brief + * set the duration that the message is available for dequeuing + * + * @param msg - Message handle + * @param value - duration in seconds + * + * @note + * This parameter is an offset from the delay (see OCI_MsgSetEnqueueDelay()) + * While waiting for expiration, the message state is set to OCI_AMS_READY. + * If the message is not dequeued before it expires, it will be moved to the exception queue + * with the state OCI_AMS_EXPIRED. + * + * @note + * If parameter 'value' is set to -1 (default value), the message will not expire + * + * @warning + * Expiration processing requires the queue monitor to be started. + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_MsgSetExpiration +( + OCI_Msg *msg, + int value +); + +/** + * @brief + * Return the state of the message at the time of the dequeue + * + * @param msg - Message handle + * + * @return + * - OCI_UNKNOWN : the function has failed to get the message state + * - OCI_AMS_READY : the message is ready to be processed + * - OCI_AMS_WAITING : the message delay has not yet completed + * - OCI_AMS_PROCESSED : the message has been processed + * - OCI_AMS_EXPIRED : the message has moved to exception queue + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_MsgGetState +( + OCI_Msg *msg +); + +/** + * @brief + * Return the priority of the message + * + * @param msg - Message handle + * + * @note + * see OCI_MsgSetPriority() for more details + * + */ + +OCI_EXPORT int OCI_API OCI_MsgGetPriority +( + OCI_Msg *msg +); + +/** + * @brief + * Set the priority of the message + * + * @param msg - Message handle + * @param value - Message priority + * + * @note + * - The priority can be any number, including negative numbers. + * - A smaller number indicates higher priority. + * - Default value is zero. + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_MsgSetPriority +( + OCI_Msg *msg, + int value +); + +/** + * @brief + * Return the ID of the message + * + * @param msg - Message handle + * @param id - Input buffer + * @param len - Input buffer maximum size + * + * @note + * The message ID is : + * - generated when the message is enqueued in the queue + * - retrieved when the message is dequeued from the queue + * + * @note + * On output, parameter 'len' holds the number of bytes copied into the given buffer + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_MsgGetID +( + OCI_Msg *msg, + void *id, + unsigned int *len +); + +/** + * @brief + * Return the original ID of the message in the last queue that generated this message + * + * @param msg - Message handle + * @param id - Input buffer + * @param len - Input buffer maximum size + * + * @warning + * When a message is propagated from/to different queues, this ID is the one generated for the + * message in the previous queue. + * + * @note + * On output, parameter 'len' holds the number of bytes copied into the given buffer + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_MsgGetOriginalID +( + OCI_Msg *msg, + void *id, + unsigned int *len +); + +/** + * @brief + * Set the original ID of the message in the last queue that generated this message + * + * @param msg - Message handle + * @param id - Message ID + * @param len - Message ID size + * + * @warning + * When a message is propagated from/to different queues, this ID is the one generated for the + * message in the previous queue. + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_MsgSetOriginalID +( + OCI_Msg *msg, + const void *id, + unsigned int len +); + +/** + * @brief + * Return the original sender of a message + * + * @param msg - Message handle + * + * @return + * Sender Handle (OCI_Agent *) on success (if set at enqueue time) otherwise NULL + * + */ + +OCI_EXPORT OCI_Agent * OCI_API OCI_MsgGetSender +( + OCI_Msg *msg +); + +/** + * @brief + * Set the original sender of a message + * + * @param msg - Message handle + * @param sender - Message sender + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_MsgSetSender +( + OCI_Msg *msg, + OCI_Agent *sender +); + +/** + * @brief + * Set the recipient list of a message to enqueue + * + * @param msg - Message handle + * @param consumers - Recipients list (array of agent handles) + * @param count - Number of recipients + * + * @warning + * This function should only be used for queues which allow multiple consumers. + * The default recipients are the queue subscribers. + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_MsgSetConsumers +( + OCI_Msg *msg, + OCI_Agent **consumers, + unsigned int count +); + +/** + * @brief + * Get the correlation identifier of the message + * + * @param msg - Message handle + * + * @note + * see OCI_MsgSetCorrelation() for more details + * + */ + +OCI_EXPORT const otext * OCI_API OCI_MsgGetCorrelation +( + OCI_Msg *msg +); + +/** + * @brief + * set the correlation identifier of the message + * + * @param msg - Message handle + * @param correlation - Message correlation text + * + * @note + * see OCI_DequeueSetCorrelation() for more details + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_MsgSetCorrelation +( + OCI_Msg *msg, + const otext *correlation +); + +/** + * @brief + * Get the Exception queue name of the message + * + * @param msg - Message handle + * + * @warning + * When calling this function on a message retrieved with OCI_DequeueGet(), the returned value is + * NULL if the default exception queue associated with the current queue is used (e.g. no user + * defined specified at enqueue time for the message) + * + * @note + * see OCI_MsgSetExceptionQueue() for more details + * + */ +OCI_EXPORT const otext * OCI_API OCI_MsgGetExceptionQueue +( + OCI_Msg *msg +); + +/** + * @brief + * Set the name of the queue to which the message is moved to if it cannot be + * processed successfully + * + * @param msg - Message handle + * @param queue - Exception queue name + * + * @warning + * From Oracle Documentation : + * + * "Messages are moved into exception queues in two cases : + * - If the number of unsuccessful dequeue attempts has exceeded the attribute 'max_retries' of + * given queue + * - if the message has expired. + * + * All messages in the exception queue are in the EXPIRED state. + * + * The default is the exception queue associated with the queue table. + * + * If the exception queue specified does not exist at the time of the move the message will be + * moved to the default exception queue associated with the queue table and a warning will be + * logged in the alert file. + * + * This attribute must refer to a valid queue name." + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_MsgSetExceptionQueue +( + OCI_Msg *msg, + const otext *queue +); + +/** + * @brief + * Create a Enqueue object for the given queue + * + * @param typinf - Type info handle + * @param name - Queue name + * + * @note + * OCILIB supports 2 type of message payload : + * - Oracle types (UDT) + * - RAW data + * + * @note + * Oracle Type AnyData is not supported in the current version of OCILIB + * + * @note + * the parameter 'typinf' indicates the type of payload to enqueue to the given queue : + * - For object payload, retrieve the object type information handle with + * OCI_TypeInfoGet() using the object type name + * - For RAW payload, you MUST pass the object type information retrieved with + * OCI_TypeInfoGet() using "SYS.RAW" as object type name + * + * @return + * Return the Enqueue handle on success otherwise NULL on failure + * + */ + +OCI_EXPORT OCI_Enqueue * OCI_API OCI_EnqueueCreate +( + OCI_TypeInfo *typinf, + const otext *name +); + +/** + * @brief + * Free a Enqueue object + * + * @param enqueue - Enqueue handle + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_EnqueueFree +( + OCI_Enqueue *enqueue +); + +/** + * @brief + * Enqueue a message on the queue associated to the Enqueue object + * + * @param enqueue - Enqueue handle + * @param msg - Message handle to enqueue + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_EnqueuePut +( + OCI_Enqueue *enqueue, + OCI_Msg *msg +); + +/** +* @brief +* Set the enqueuing sequence of messages to put in the queue +* +* @param enqueue - Enqueue handle +* @param sequence - enqueuing sequence +* +* @note +* Possible values for parameter 'sequence' : +* - OCI_ASD_BEFORE : enqueue message before another message +* - OCI_ASD_TOP : enqueue message before all messages +* +* @note +* Default value is OCI_ASD_TOP +* +* @note +* if the parameter 'sequence' is set to OCI_ASD_BEFORE, the application must +* call OCI_EnqueueSetRelativeMsgID() before enqueuing the next message in the queue. +* +* @note +* In order to stop enqueuing message using a sequence deviation, call +* OCI_EnqueueSetSequenceDeviation() with the value OCI_ASD_TOP +* +* @return +* TRUE on success otherwise FALSE +* +*/ + +OCI_EXPORT boolean OCI_API OCI_EnqueueSetSequenceDeviation +( + OCI_Enqueue *enqueue, + unsigned int sequence +); + +/** + * @brief + * Return the sequence deviation of messages to enqueue to the queue + * + * @param enqueue - Enqueue handle + * + * @note + * see OCI_EnqueueSetSequenceDeviation() for more details + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_EnqueueGetSequenceDeviation +( + OCI_Enqueue *enqueue +); + +/** + * @brief + * Set whether the new message is enqueued as part of the current transaction + * + * @param enqueue - Enqueue handle + * @param visibility - Enqueuing visibility + * + * @note + * Possible values for parameter 'visibility' : + * - OCI_AMV_IMMEDIATE : enqueue is an independent transaction + * - OCI_AMV_ON_COMMIT : enqueue is part of current transaction + * + * @note + * Default value is OCI_AMV_ON_COMMIT + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_EnqueueSetVisibility +( + OCI_Enqueue *enqueue, + unsigned int visibility +); + +/** + * @brief + * Get the enqueuing/locking behavior + * + * @param enqueue - Enqueue handle + * + * @note + * see OCI_EnqueueSetVisibility() for more details + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_EnqueueGetVisibility +( + OCI_Enqueue *enqueue +); + +/** + * @brief + * Set a message identifier to use for enqueuing messages using a sequence deviation + * + * @param enqueue - Enqueue handle + * @param id - message identifier + * @param len - pointer to message identifier length + * + * @note + * This call is only valid if OCI_EnqueueSetSequenceDeviation() has been called + * with the value OCI_ASD_BEFORE + * + * @warning + * if the function cannot assign the message id, the content of the parameter 'len' is set to zero. + * + * @note + * see OCI_EnqueueSetSequenceDeviation() for more details + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_EnqueueSetRelativeMsgID +( + OCI_Enqueue *enqueue, + const void *id, + unsigned int len +); + +/** + * @brief + * Get the current associated message identifier used for enqueuing messages + * using a sequence deviation + * + * @param enqueue - Enqueue handle + * @param id - buffer to receive the message identifier + * @param len - pointer to buffer max length + * + * @warning + * When the function returns, parameter 'len' hold the number of bytes assigned to parameter 'id' + * + * @note + * see OCI_EnqueueGetRelativeMsgID() for more details + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_EnqueueGetRelativeMsgID +( + OCI_Enqueue *enqueue, + void *id, + unsigned int *len +); + +/** + * @brief + * Create a Dequeue object for the given queue + * + * @param typinf - Type info handle + * @param name - Queue name + * + * @note + * OCILIB supports 2 type of message payload : + * - Oracle types (UDT) + * - RAW data + * + * @note + * Oracle Type AnyData is not supported in the current version of OCILIB + * + * @note + * the parameter 'typinf' indicates the type of payload to dequeue from the given queue : + * - For object payload, retrieve the object type information handle with + * OCI_TypeInfoGet() using the object type name + * - For RAW payload, you MUST pass the object type information retrieved with + * OCI_TypeInfoGet() using "SYS.RAW" as object type name + * + * @return + * Return the Dequeue handle on success otherwise NULL on failure + * + */ + +OCI_EXPORT OCI_Dequeue * OCI_API OCI_DequeueCreate +( + OCI_TypeInfo *typinf, + const otext *name +); + +/** + * @brief + * Free a Dequeue object + * + * @param dequeue - Dequeue handle + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_DequeueFree +( + OCI_Dequeue *dequeue +); + +/** + * @brief + * Dequeue messages from the given queue + * + * @param dequeue - Dequeue handle + * + * @warning + * The returned message is handled by the dequeue object. + * Do not release it with OCI_MsgFree() + * + * @warning + * When dequeuing from a multiple consumer queue, you need + * to set the navigation mode to OCI_ADN_FIRST_MSG using + * OCI_DequeueSetNavigation() + * + * @return + * Message handle on success otherwise NULL on failure or on timeout + * + */ + +OCI_EXPORT OCI_Msg * OCI_API OCI_DequeueGet +( + OCI_Dequeue *dequeue +); + +/** + * @brief + * Subscribe for asynchronous messages notifications + * + * @param dequeue - Dequeue handle + * @param port - Port to use for notifications + * @param timeout - notification timeout + * @param callback - User handler callback fired when messages are ready to be dequeued + * + * @note + * OCI_ENV_EVENTS flag must be passed to OCI_Initialize() to be able to use + * asynchronous messages notifications + * + * @note + * Requires Oracle Client 10gR2 or above + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_DequeueSubscribe +( + OCI_Dequeue *dequeue, + unsigned int port, + unsigned int timeout, + POCI_NOTIFY_AQ callback +); + +/** + * @brief + * Unsubscribe for asynchronous messages notifications + * + * @param dequeue - Dequeue handle + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_DequeueUnsubscribe +( + OCI_Dequeue *dequeue +); + +/** + * @brief + * Set the current consumer name to retrieve message for. + * + * @param dequeue - Dequeue handle + * @param consumer - consumer name + * + * @warning + * If a queue is not set up for multiple consumers, OCI_DequeueSetConsumer() + * should not be called or called with parameter 'consumer' set to NULL + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_DequeueSetConsumer +( + OCI_Dequeue *dequeue, + const otext *consumer +); + +/** + * @brief + * Get the current consumer name associated with the dequeuing process. + * + * @param dequeue - Dequeue handle + * + * @note + * see OCI_DequeueSetConsumer() for more details + * + */ + +OCI_EXPORT const otext * OCI_API OCI_DequeueGetConsumer +( + OCI_Dequeue *dequeue +); + +/** + * @brief + * set the correlation identifier of the message to be dequeued + * + * @param dequeue - Dequeue handle + * @param pattern - correlation identifier + * + * @note + * Special pattern matching characters, such as "%" or "_" can be used. + * If more than one message satisfies the pattern, the order of dequeuing is undetermined. + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_DequeueSetCorrelation +( + OCI_Dequeue *dequeue, + const otext *pattern +); + +/** + * @brief + * Get the correlation identifier of the message to be dequeued + * + * @param dequeue - Dequeue handle + * + * @note + * see OCI_DequeueSetCorrelation() for more details + * + */ + +OCI_EXPORT const otext * OCI_API OCI_DequeueGetCorrelation +( + OCI_Dequeue *dequeue +); + +/** + * @brief + * Set the message identifier of the message to be dequeued + * + * @param dequeue - Dequeue handle + * @param id - message identifier + * @param len - size of the message identifier + * + * @warning + * if the function cannot assign the message id, the content of the parameter 'len' is set to zero. + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_DequeueSetRelativeMsgID +( + OCI_Dequeue *dequeue, + const void *id, + unsigned int len +); + +/** + * @brief + * Get the message identifier of the message to be dequeued + * + * @param dequeue - Dequeue handle + * @param id - message identifier + * @param len - size of the message identifier + * + * @warning + * When the function returns, parameter 'len' hold the number of bytes assigned to parameter 'id' + * + * @note + * see OCI_DequeueSetRelativeMsgID() for more details + * + */ + +OCI_EXPORT boolean OCI_API OCI_DequeueGetRelativeMsgID +( + OCI_Dequeue *dequeue, + void *id, + unsigned int *len +); + +/** + * @brief + * Set whether the new message is dequeued as part of the current transaction + * + * @param dequeue - Dequeue handle + * @param visibility - dequeuing mode + * + * @warning + * The visibility parameter is ignored when using the OCI_ADM_BROWSE dequeuing + * mode (see OCI_DequeueSetMode()) + * + * @note + * Possible values for parameter 'mode' : + * - OCI_AMV_IMMEDIATE : dequeue is an independent transaction + * - OCI_AMV_ON_COMMIT : dequeue is part of current transaction + * + * @note + * Default value is OCI_AMV_ON_COMMIT + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_DequeueSetVisibility +( + OCI_Dequeue *dequeue, + unsigned int visibility +); + +/** + * @brief + * Get the dequeuing/locking behavior + * + * @param dequeue - Dequeue handle + * + * @note + * see OCI_DequeueSetVisibility() for more details + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_DequeueGetVisibility +( + OCI_Dequeue *dequeue +); + +/** + * @brief + * Set the dequeuing/locking behavior + * + * @param dequeue - Dequeue handle + * @param mode - dequeuing mode + * + * @note + * Possible values for parameter 'mode' : + * - OCI_ADM_BROWSE : read message without acquiring a lock + * - OCI_ADM_LOCKED : read and obtain write lock on message + * - OCI_ADM_REMOVE : read the message and delete it + * - OCI_ADM_REMOVE_NODATA : confirm receipt of the message, but do not + * deliver the actual message content + * + * @note + * Default value is OCI_ADM_REMOVE + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_DequeueSetMode +( + OCI_Dequeue *dequeue, + unsigned int mode +); + +/** + * @brief + * Get the dequeuing/locking behavior + * + * @param dequeue - Dequeue handle + * + * @note + * see OCI_DequeueSetMode() for more details + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_DequeueGetMode +( + OCI_Dequeue *dequeue +); + +/** + * @brief + * Set the position of messages to be retrieved. + * + * @param dequeue - Dequeue handle + * @param position - navigation position + * + * @note + * The dequeuing uses the following sequence : + * - find messages using the navigation position + * - apply search criteria (message correlation) + * - get message + * + * @note + * Possible values for parameter 'position' : + * - OCI_ADN_FIRST_MSG : retrieves the first message which is available + * - OCI_ADN_NEXT_MSG : retrieves the next message which is available + * - OCI_ADN_NEXT_TRANSACTION : skips the remainder of the current transaction + * group (if any) and retrieves the first message + * of the next transaction group. + * + * @note + * Default value is OCI_ADN_NEXT_MSG + * + * @warning + * OCI_ADN_NEXT_TRANSACTION can only be used if message grouping is enabled for the given queue. + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_DequeueSetNavigation +( + OCI_Dequeue *dequeue, + unsigned int position +); + +/** + * @brief + * Return the navigation position of messages to retrieve from the queue + * + * @param dequeue - Dequeue handle + * + * @note + * see OCI_DequeueSetNavigation() for more details + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_DequeueGetNavigation +( + OCI_Dequeue *dequeue +); + +/** + * @brief + * set the time that OCIDequeueGet() waits for messages if no messages are + * currently available + * + * @param dequeue - Dequeue handle + * @param timeout - timeout in seconds + * + *@note + * - Any positive values in seconds are valid. + * - The value 0 is accepted and means OCIDequeueGet() does not wait for + * messages and returns immediately if no messages are available + * - The value -1 is accepted and means OCIDequeueGet() waits for ever (until + * a message is available in the queue) + * + * @note + * Default value is -1 (wait for ever) + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_DequeueSetWaitTime +( + OCI_Dequeue *dequeue, + int timeout +); + +/** + * @brief + * Return the time that OCIDequeueGet() waits for messages if no messages are currently available + * + * @param dequeue - Dequeue handle + * + * @note + * see OCI_DequeueSetWaitTime() for more details + * + */ + +OCI_EXPORT int OCI_API OCI_DequeueGetWaitTime +( + OCI_Dequeue *dequeue +); + +/** + * @brief + * Set the Agent list to listen to message for + * + * @param dequeue - Dequeue handle + * @param consumers - Agent handle array + * @param count - Number of agents the array + * + * @return + * return TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_DequeueSetAgentList +( + OCI_Dequeue *dequeue, + OCI_Agent **consumers, + unsigned int count +); + +/** + * @brief + * Listen for messages that match any recipient of the associated Agent list + * + * @param dequeue - Dequeue handle + * @param timeout - Timeout in second + * + * @note + * If an Agent handle is returned, messages are available for this agent. + * In order to retrieve its messages : + * - call OCI_DequeueSetConsumer() with the name of agent using OCI_AgentGetName() + * - call OCI_DequeueGet() to dequeue it's pending messages + * + * @warning + * The return value is valid only until: + * - OCIDequeueListen() is called again + * - OCI_DequeueFree(à is called to free the Dequeue object + * So Do not store the handle value across calls to OCIDequeueListen() + * + * @return + * An Agent handle for who messages are available on success otherwise NULL + */ + +OCI_EXPORT OCI_Agent * OCI_API OCI_DequeueListen +( + OCI_Dequeue *dequeue, + int timeout +); + +/** + * @brief + * Create an AQ agent object + * + * @param con - Connection handle + * @param name - Agent name + * @param address - Agent address + * + * @note + * An AQ agent object is : + * - used as recipient information when enqueuing a message + * - used as sender information when dequeuing a message + * - used for listening message only from identified senders + * + * @note + * the AQ agent address can be any Oracle identifier, up to 128 bytes. + * the AQ agent name can be any Oracle identifier, up to 30 bytes. + * + * @return + * AQ agent handle on success otherwise NULL + * + */ + +OCI_EXPORT OCI_Agent * OCI_API OCI_AgentCreate +( + OCI_Connection *con, + const otext *name, + const otext *address +); + +/** + * @brief + * Free an AQ agent object + * + * @param agent - AQ agent handle + * + * @warning + * Only AQ agent handle created with OCI_AgentCreate() should be freed by OCI_AgentFree() + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_AgentFree +( + OCI_Agent *agent +); + +/** + * @brief + * Set the given AQ agent name + * + * @param agent - AQ agent handle + * @param name - AQ agent name + * + * @note + * the AQ agent name is used to identified an message send or recipient when enqueuing/dequeuing + * a message + * + * @note + * the AQ agent name can be any Oracle identifier, up to 30 bytes. + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_AgentSetName +( + OCI_Agent *agent, + const otext *name +); + +/** + * @brief + * Get the given AQ agent name + * + * @param agent - AQ agent handle + * + * @return + * AQ agent name on success otherwise NULL on failure + * + */ + +OCI_EXPORT const otext * OCI_API OCI_AgentGetName +( + OCI_Agent *agent +); + +/** + * @brief + * Set the given AQ agent address + * + * @param agent - AQ agent handle + * @param address - AQ agent address + * + * @note + * the parameter 'address' must be of the form : [schema.]queue_name[\@dblink] + * + * @note + * the AQ agent address can be any Oracle identifier, up to 128 bytes. + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_AgentSetAddress +( + OCI_Agent *agent, + const otext *address +); + +/** + * @brief + * Get the given AQ agent address + * + * @param agent - AQ agent handle + * + * @note + * See OCI_AgentSetAddress() + * + * @return + * AQ agent address on success otherwise NULL on failure + * + */ + +OCI_EXPORT const otext * OCI_API OCI_AgentGetAddress +( + OCI_Agent *agent +); + +/** + * @brief + * Create a queue + * + * @param con - Connection handle + * @param queue_name - Queue name + * @param queue_table - Queue table name + * @param queue_type - Queue type + * @param max_retries - Maximum number of attempts to dequeue a message + * @param retry_delay - Number of seconds between attempts to dequeue a message + * @param retention_time - number of seconds a message is retained in the queue table after + * being dequeued from the queue + * @param dependency_tracking - Parameter reserved for future use by Oracle (MUST be set to FALSE) + * @param comment - Description of the queue + * + * @note + * Parameter 'queue_name' can specify the schema where to create to queue ([schema.]queue_name) + * Queue names cannot be longer than 24 characters (Oracle limit for user queues) + * + * @note + * Possible values for parameter 'queue_type' : + * - OCI_AQT_NORMAL : Normal queue + * - OCI_AQT_EXCEPTION : Exception queue + * - OCI_AQT_NON_PERSISTENT : Non persistent queue + * + * To set default values, pass : + * - queue_type : OCI_AQT_NORMAL + * - max_retries : 0 + * - retry_delay : 0 + * - retention_time : 0 + * - comment : NULL + * + * @note + * this call wraps the PL/SQL procedure DBMS_AQADM.CREATE_QUEUE(). + * Refer to Oracle Streams - Advanced Queuing User's Guide for more details + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_QueueCreate +( + OCI_Connection *con, + const otext *queue_name, + const otext *queue_table, + unsigned int queue_type, + unsigned int max_retries, + unsigned int retry_delay, + unsigned int retention_time, + boolean dependency_tracking, + const otext *comment +); + +/** + * @brief + * Alter the given queue + * + * @param con - Connection handle + * @param queue_name - Queue name + * @param max_retries - Maximum number of attempts to dequeue a message + * @param retry_delay - Number of seconds between attempts to dequeue a message + * @param retention_time - number of seconds a message is retained in the queue table after + * being dequeued from the queue + * @param comment - Description of the queue + * + * @note + * See OCI_QueueCreate() for more details + * + * @warning + * This function updates all attributes handled in the parameter list ! + * + * @note + * this call wraps the PL/SQL procedure DBMS_AQADM.ALTER_QUEUE(). + * Refer to Oracle Streams - Advanced Queuing User's Guide for more details + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_QueueAlter +( + OCI_Connection *con, + const otext *queue_name, + unsigned int max_retries, + unsigned int retry_delay, + unsigned int retention_time, + const otext *comment +); + +/** + * @brief + * Drop the given queue + * + * @param con - Connection handle + * @param queue_name - Queue name + * + * @warning + * A queue can be dropped only if it has been stopped before. + * + * @note + * this call wraps the PL/SQL procedure DBMS_AQADM.DROP_QUEUE(). + * Refer to Oracle Streams - Advanced Queuing User's Guide for more details + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_QueueDrop +( + OCI_Connection *con, + const otext *queue_name +); + +/** + * @brief + * Start the given queue + * + * @param con - Connection handle + * @param queue_name - Queue name + * @param enqueue - Enable enqueue + * @param dequeue - Enable dequeue + * + * @warning + * For exception queues, only enqueuing is allowed + * + * @note + * this call wraps the PL/SQL procedure DBMS_AQADM.START_QUEUE(). + * Refer to Oracle Streams - Advanced Queuing User's Guide for more details + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_QueueStart +( + OCI_Connection *con, + const otext *queue_name, + boolean enqueue, + boolean dequeue +); + +/** + * @brief + * Stop enqueuing or dequeuing or both on the given queue + * + * @param con - Connection handle + * @param queue_name - Queue name + * @param enqueue - Disable enqueue + * @param dequeue - Disable dequeue + * @param wait - Wait for current pending enqueues/dequeues + * + * @warning + * A queue cannot be stopped if there are pending transactions against the queue. + * + * @note + * this call wraps the PL/SQL procedure DBMS_AQADM.STOP_QUEUE(). + * Refer to Oracle Streams - Advanced Queuing User's Guide for more details + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_QueueStop +( + OCI_Connection *con, + const otext *queue_name, + boolean enqueue, + boolean dequeue, + boolean wait +); + +/** + * @brief + * Create a queue table for messages of the given type + * + * @param con - Connection handle + * @param queue_table - Queue table name + * @param queue_payload_type - Message type name + * @param storage_clause - Additional clauses for the table storage + * @param sort_list - Additional columns name to use for sorting + * @param multiple_consumers - Enable multiple consumers for each messages + * @param message_grouping - Specifies if messages are grouped within a transaction + * @param comment - Description of the queue table + * @param primary_instance - primary owner (instance) of the queue table + * @param secondary_instance - Owner of the queue table if the primary instance is not available + * @param compatible - lowest database version with which the queue table is compatible + * + * @note + * Parameter 'queue_table' can specify the schema where to create to queue table ([schema.]queue_table) + * Queue table names cannot be longer than 24 characters (Oracle limit for user queue tables) + * + * @note + * Possible values for parameter 'queue_payload_type' : + * - For Oracle types (UDT) : use the type name ([schema.].type_name) + * - For RAW data : use "SYS.RAW" or "RAW" + * + * @note + * Possible values for parameter 'message_grouping' : + * - OCI_AGM_NONE : each message is treated individually + * - OCI_AGM_TRANSACTIONNAL : all messages enqueued in one transaction are considered part of + * the same group and can be dequeued as a group of related messages. + * + * @note + * Possible values for parameter 'compatible' : + * - "8.0", "8.1", "10.0" + * + * To set default values, pass : + * - storage_clause : NULL + * - sort_list : NULL + * - message_grouping : OCI_AGM_NONE + * - comment : NULL + * - primary_instance : 0 + * - primary_instance : 0 + * - compatible : NULL + * + * @note + * this call wraps the PL/SQL procedure DBMS_AQADM.CREATE_QUEUE_TABLE(). + * Refer to Oracle Streams - Advanced Queuing User's Guide for more details + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_QueueTableCreate +( + OCI_Connection *con, + const otext *queue_table, + const otext *queue_payload_type, + const otext *storage_clause, + const otext *sort_list, + boolean multiple_consumers, + unsigned int message_grouping, + const otext *comment, + unsigned int primary_instance, + unsigned int secondary_instance, + const otext *compatible +); + +/** + * @brief + * Alter the given queue table + * + * @param con - Connection handle + * @param queue_table - Queue table name + * @param comment - Description of the queue table + * @param primary_instance - primary owner (instance) of the queue table + * @param secondary_instance - Owner of the queue table if the primary instance is not available + * + * @note + * See OCI_QueueTableCreate() from more details + * + * @note + * this call wraps the PL/SQL procedure DBMS_AQADM.ALTER_QUEUE_TABLE(). + * Refer to Oracle Streams - Advanced Queuing User's Guide for more details + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_QueueTableAlter +( + OCI_Connection *con, + const otext *queue_table, + const otext *comment, + unsigned int primary_instance, + unsigned int secondary_instance +); + +/** + * @brief + * Drop the given queue table + * + * @param con - Connection handle + * @param queue_table - Queue table name + * @param force - Force the deletion of objects related to the queue table + * + * @note + * Possible values for 'force' : + * - TRUE : all queues using the queue table and their associated propagation schedules are + * dropped automatically + * - FALSE : All the queues using the given queue table must be stopped and dropped before the + * queue table can be dropped. + * + * @note + * this call wraps the PL/SQL procedure DBMS_AQADM.DROP_QUEUE_TABLE(). + * Refer to Oracle Streams - Advanced Queuing User's Guide for more details + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_QueueTableDrop +( + OCI_Connection *con, + const otext *queue_table, + boolean force +); + +/** + * @brief + * Purge messages from the given queue table + * + * @param con - Connection handle + * @param queue_table - Queue table name + * @param purge_condition - Optional SQL based conditions (see notes) + * @param block - Lock all queues using the queue table while doing the purge + * @param delivery_mode - Type of message to purge + * + * @note + * Possible values for parameter 'delivery_mode' : + * - OCI_APM_BUFFERED : purge only buffered messages + * - OCI_APM_PERSISTENT : purge only persistent messages + * - OCI_APM_ALL : purge all messages + * + * @note + * For more information about the SQL purge conditions, refer to + * Oracle Streams - Advanced Queuing User's Guide for more details + * + * @warning + * This feature is only available from ORacle 10gR2. + * This function does nothing and returns TRUE is the server version is < Oracle 10gR2 + * + * @note + * this call wraps the PL/SQL procedure DBMS_AQADM.PURGE_QUEUE_TABLE(). + * Refer to Oracle Streams - Advanced Queuing User's Guide for more details + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_QueueTablePurge +( + OCI_Connection *con, + const otext *queue_table, + const otext *purge_condition, + boolean block, + unsigned int delivery_mode +); + +/** + * @brief + * Migrate a queue table from one version to another + * + * @param con - Connection handle + * @param queue_table - Queue table name + * @param compatible - Database version with witch the queue table has to migrate + * + * @note + * Possible values for parameter 'compatible' : + * - "8.0", "8.1", "10.0" + * + * @note + * this call wraps the PL/SQL procedure DBMS_AQADM.MIGRATE_QUEUE_TABLE(). + * Refer to Oracle Streams - Advanced Queuing User's Guide for more details + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_QueueTableMigrate +( + OCI_Connection *con, + const otext *queue_table, + const otext *compatible +); + +/** + * @} + */ + +/** + * @defgroup OcilibCApiSubscriptions Database Change notifications (DCN or CQN) + * @{ + * + * OCILIB supports Oracle 10gR2 feature Database Change Notifications (DCN) + * also named Continuous Query Notifications (CQN) + * + * This features allows a client application to register notifications + * when some changes are made in a database : + * - Database status changes : startup and shutdown + * - Database objects changes : + * - DDL changes : alter or drop actions + * - DML changes : insert, delete, update actions + * + * This feature can be really useful in applications that hold + * a cache of data. Instead of refreshing data periodically by + * connecting to the server, the application could only refresh + * modified data when necessary or perform specific tasks depending on + * the events. It saves application time, network traffic and can help + * the design of the application logic. + * + * The database status change notification is also interesting to be + * informed of instance startup / shutdown + * + * Check Oracle documentation for more details about this feature + * + * @note + * No active database connection is required to receive the + * notifications as they are handled by the Oracle client using a + * dedicated socket connection to the server + * + * @par Database changes + * + * The client application can be notified of any database status + * change (single DB or multiple DB in a RAC environment). + * + * @par Object changes + * + * The notifications of object changes are based on the registration + * of a query ('select' SQL statement). + * + * Oracle server will notify of any changes of any object that is + * part of the statement result set. + * + * Registering a statement will notify about any changes on its + * result set rows performed after the registration of the query. + * + * The query can be a simple 'select * from table' or a complex + * query involving many tables and/or criteria in the where clause. + * + * For Object changes, the notification can be at : + * - At Object level : only the object name (schema + object) is given + * - At row level : same that object level + RowID of the altered row + * + * @warning + * Trying to use this features with a client/server version < 10gR2 will raise an error + * + * @par Example + * @include notification.c + * + */ + +/** + * @brief + * Register a notification against the given database + * + * @param con - Connection handle + * @param name - Notification name + * @param type - Subscription type + * @param handler - User handler callback + * @param port - Port to use for notifications + * @param timeout - notification timeout + * + * @note + * Parameter 'type' can be one of the following values : + * + * - OCI_CNT_OBJECTS : request for changes at objects (e.g. tables) level (DDL / DML) + * - OCI_CNT_ROWS : request for changes at rows level (DML) + * - OCI_CNT_DATABASES : request for changes at database level (startup, shutdown) + * - OCI_CNT_ALL : request for all changes + * + * @note + * OCI_ENV_EVENTS flag must be passed to OCI_Initialize() to be able to use + * subscriptions + * + * @note + * Requires Oracle Client 10gR2 or above + * + * @note + * Subscription handles are automatically managed by the library + * + * @return + * Subscription handle on success or NULL on failure + * + */ + +OCI_EXPORT OCI_Subscription * OCI_API OCI_SubscriptionRegister +( + OCI_Connection *con, + const otext *name, + unsigned int type, + POCI_NOTIFY handler, + unsigned int port, + unsigned int timeout +); + +/** + * @brief + * Unregister a previously registered notification + * + * @param sub - Subscription handle + * + * @note + * OCI_Cleanup() will automatically unregister any registered subscriptions + * + * @note + * If the database connection passed to OCI_SubscriptionRegister() + * has been closed by the time that the application calls + * OCI_SubscriptionUnregister, the library internally reconnects + * to the given database, performs the unregistration and then disconnects + * + * @note + * OCI_ENV_EVENTS flag must be passed to OCI_Initialize() to be able to use + * subscriptions + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_SubscriptionUnregister +( + OCI_Subscription *sub +); + +/** + * @brief + * Add a statement to the notification to monitor + * + * @param sub - Subscription handle + * @param stmt - Statement handle + * + * @note + * The given statement must be prepared but not executed before being passed to this function. + * OCI_SubscriptionAddStatement() executes the statement and register it for notifications + * + * @note + * OCI_ENV_EVENTS flag must be passed to OCI_Initialize() to be able to use + * subscriptions + * + * @note + * The given statement must hold a 'SELECT' SQL statement + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_SubscriptionAddStatement +( + OCI_Subscription *sub, + OCI_Statement *stmt +); + +/** + * @brief + * Return the name of the given registered subscription + * + * @param sub - Subscription handle + * + * @note + * OCI_ENV_EVENTS flag must be passed to OCI_Initialize() to be able to use + * subscriptions + * + */ + +OCI_EXPORT const otext * OCI_API OCI_SubscriptionGetName +( + OCI_Subscription *sub +); + +/** + * @brief + * Return the port used by the notification + * + * @param sub - Subscription handle + * + * @note + * OCI_ENV_EVENTS flag must be passed to OCI_Initialize() to be able to use + * subscriptions + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_SubscriptionGetPort +( + OCI_Subscription *sub +); + +/** + * @brief + * Return the timeout of the given registered subscription + * + * @param sub - Subscription handle + * + * @note + * OCI_ENV_EVENTS flag must be passed to OCI_Initialize() to be able to use + * subscriptions + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_SubscriptionGetTimeout +( + OCI_Subscription *sub +); + +/** + * @brief + * Return the connection handle associated with a subscription handle + * + * @param sub - Subscription handle + * + * @note + * It may return a NULL handle if the connection used in OCI_SubscriptionRegister has been closed. + * + */ + +OCI_EXPORT OCI_Connection * OCI_API OCI_SubscriptionGetConnection +( +OCI_Subscription *sub +); + +/** + * @brief + * Return the type of event reported by a notification + * + * @param event - Event handle + * + * @note + * The returned value can be one of the following values : + * + * - OCI_ENT_STARTUP : a database has been started up + * - OCI_ENT_SHUTDOWN : a database has been shut down + * - OCI_ENT_SHUTDOWN_ANY : a database has been shut down (RAC) + * - OCI_ENT_DROP_DATABASE : a database has been dropped + * - OCI_ENT_DEREGISTER : the notification is timed out + * - OCI_ENT_OBJECT_CHANGED : a database object has been modified + * + * @note + * OCI_EventGetDatabase() returns the affected database + * + * @note + * OCI_ENV_EVENTS flag must be passed to OCI_Initialize() to be able to use + * subscriptions + * + * @note + * OCI_EventGetObject() returns the affected object + * ('schema_name'.'object_name') + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_EventGetType +( + OCI_Event *event +); + +/** + * @brief + * Return the type of operation reported by a notification + * + * @param event - Event handle + * + * @note + * This call is only valid when OCI_EventGetType() reports the + * event type OCI_ENT_OBJECT_CHANGED + * + * @note + * The returned value can be one of the following values : + * + * - OCI_ONT_INSERT : an insert has been performed + * - OCI_ONT_UPDATE : an update has been performed + * - OCI_ONT_DELETE : a delete has been performed + * - OCI_ONT_ALTER : an alter has been performed + * - OCI_ONT_DROP : a drop has been performed + * - OCI_ONT_GENERIC : generic undefined action + * + * @note + * OCI_EventGetDatabase() returns the affected database + * + * @note + * OCI_EventGetObject() returns the affected object ('schema_name'.'object_name') + * + * @note + * OCI_ENV_EVENTS flag must be passed to OCI_Initialize() to be able to use + * subscriptions + * + * @note + * if OCI_CNT_ROWS is passed to OCI_SubscriptionRegister(), + * the rowid of the altered row can be retrieved with OCI_EventGetRowid() + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_EventGetOperation +( + OCI_Event *event +); + +/** + * @brief + * Return the name of the database that generated the event + * + * @param event - Event handle + * + * @note + * OCI_ENV_EVENTS flag must be passed to OCI_Initialize() to be able to use + * subscriptions + * + */ + +OCI_EXPORT const otext * OCI_API OCI_EventGetDatabase +( + OCI_Event *event +); + +/** + * @brief + * Return the name of the object that generated the event + * + * @param event - Event handle + * + * @note + * OCI_ENV_EVENTS flag must be passed to OCI_Initialize() to be able to use + * subscriptions + * + */ + +OCI_EXPORT const otext * OCI_API OCI_EventGetObject +( + OCI_Event *event +); + +/** + * @brief + * Return the rowid of the altered database object row + * + * @param event - Event handle + * + * @note + * OCI_ENV_EVENTS flag must be passed to OCI_Initialize() to be able to use + * subscriptions + * + */ + +OCI_EXPORT const otext * OCI_API OCI_EventGetRowid +( + OCI_Event *event +); + +/** + * @brief + * Return the subscription handle that generated this event + * + * @param event - Event handle + * + * @note + * OCI_ENV_EVENTS flag must be passed to OCI_Initialize() to be able to use + * subscriptions + * + */ + +OCI_EXPORT OCI_Subscription * OCI_API OCI_EventGetSubscription +( + OCI_Event *event +); + +/** + * @} + */ + +/** + * @defgroup OcilibCApiInstancesManagement Remote Instance startup/shutdown + * @{ + * + * OCILIB supports Oracle 11g client features for manipulating remote Oracle instances. + * + * Oracle instances (on the same computer or on a remote server) can be : + * + * - started with OCI_DatabaseStartup() + * - shutdown with OCI_DatabaseShutdown() + * + * Several options are handled for this actions + * + * @par Example + * @include instance.c + * + */ + +/** + * @brief + * Start a database instance + * + * @param db - Oracle Service Name + * @param user - Oracle User name + * @param pwd - Oracle User password + * @param sess_mode - Session mode + * @param start_mode - Start mode + * @param start_flag - Start flags + * @param spfile - Client-side spfile to start up the database (optional) + * + * Possible values for parameter sess_mode : + * - OCI_SESSION_SYSDBA + * - OCI_SESSION_SYSOPER + * + * @note + * External credentials are supported by supplying a null value for the 'user' and 'pwd' parameters + * If the param 'db' is NULL then a connection to the default local DB is done + * + * Possible (combined) values for parameter start_mode : + * - OCI_DB_SPM_START : start the instance + * - OCI_DB_SPM_MOUNT : mount the instance + * - OCI_DB_SPM_OPEN : open the instance + * - OCI_DB_SPM_FULL : start, mount and open the instance + * + * Possible (combined) values for parameter start_flag : + * - OCI_DB_SPF_DEFAULT : default startup + * - OCI_DB_SPF_FORCE : shuts down a running instance (if needed) using + * ABORT command and starts a new instance + * - OCI_DB_SPF_RESTRICT : allows database access only to users with both + * CREATE SESSION and RESTRICTED SESSION privileges + * + * @note + * If the client side spfile is not provided, the database is started with its server-side spfile + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_DatabaseStartup +( + const otext *db, + const otext *user, + const otext *pwd, + unsigned int sess_mode, + unsigned int start_mode, + unsigned int start_flag, + const otext *spfile +); + +/** + * @brief + * Shutdown a database instance + * + * @param db - Oracle Service Name + * @param user - Oracle User name + * @param pwd - Oracle User password + * @param sess_mode - Session mode + * @param shut_mode - Shutdown mode + * @param shut_flag - Shutdown flag + * + * + * @warning + * Possible values for parameter sess_mode : + * - OCI_SESSION_SYSDBA + * - OCI_SESSION_SYSOPER + * + * @note + * External credentials are supported by supplying a null value for the 'user' and 'pwd' parameters + * If the param 'db' is NULL then a connection to the default local DB is done + * + * Possible (combined) values for parameter shut_mode : + * - OCI_DB_SDM_SHUTDOWN : shutdown the instance + * - OCI_DB_SDM_CLOSE : close the instance + * - OCI_DB_SDM_DISMOUNT : dismount the instance + * - OCI_DB_SDM_FULL : shutdown, close and dismount the instance + * + * Possible (exclusive) value for parameter shut_flag (from Oracle documentation) : + * - OCI_DB_SDF_DEFAULT : + * - Further connects are prohibited. + * - Waits for users to disconnect from the database + * - OCI_DB_SDF_TRANS : + * - Further connects are prohibited + * - No new transactions are allowed. + * - Waits for active transactions to complete + * - OCI_DB_SDF_TRANS_LOCAL : + * - Further connects are prohibited + * - No new transactions are allowed. + * - Waits only for local transactions to complete + * - OCI_DB_SDF_IMMEDIATE : + * - Does not wait for current calls to complete or users to disconnect from the database. + * - All uncommitted transactions are terminated and rolled back + * - OCI_DB_SDF_ABORT : + * - Does not wait for current calls to complete or users to disconnect from the database. + * - All uncommitted transactions are terminated and are not rolled back. + * - This is the fastest possible way to shut down the database, but the next + * database startup may require instance recovery. + * - Therefore, this option should be used only in unusual circumstances + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_DatabaseShutdown +( + const otext *db, + const otext *user, + const otext *pwd, + unsigned int sess_mode, + unsigned int shut_mode, + unsigned int shut_flag +); + +/** + * @} + */ + +/** + * @defgroup OcilibCApiRawHandles Using OCI Handles directly + * @{ + * + * OCILIB conception was focused on a full but closed encapsulation of OCI. + * + * All OCI headers, data types, prototypes are imported internally + * (linkage or runtime import). + * + * OCILIB public interface exposes only ISO C scalar types and OCILIB objects + * + * OCI is a wide and rich API that can deals with hundreds of options ! + * + * OCILIB tries to implements most of it. But, sometimes in really specific + * contexts, it might be necessary to directly call OCI APIs in order to use + * uncovered OCI functionalities or options + * + * OCILIB proposes now a set of functions to retrieve its internal OCI handles + * + * @warning + * + * The OCILIB author strongly advises against the use of internal handles, + * unless there is no other way to accomplish the task + * + * @warning + * + * Using these handles for direct application calls to OCI might lead + * to OCILIB instability or crash if handles are incorrectly used ! + * + */ + +/** + * @brief + * Return the OCI Environment Handle (OCIEnv *) of OCILIB library + * + * @return + * OCI Environment handle otherwise NULL + * + */ + +OCI_EXPORT const void * OCI_API OCI_HandleGetEnvironment +( + void +); + +/** + * @brief + * Return the OCI Context Handle (OCISvcCtx *) of an OCILIB OCI_Connection object + * + * @param con - Connection handle + * + * @return + * OCI Context handle otherwise NULL + * + */ + +OCI_EXPORT const void * OCI_API OCI_HandleGetContext +( + OCI_Connection *con +); + +/** + * @brief + * Return the OCI Server Handle (OCIServer *) of an OCILIB OCI_Connection object + * + * @param con - Connection handle + * + * @return + * OCI Server handle otherwise NULL + * + */ + +OCI_EXPORT const void * OCI_API OCI_HandleGetServer +( + OCI_Connection *con +); + +/** + * @brief + * Return the OCI Error Handle (OCIError *) of an OCILIB OCI_Connection object + * + * @param con - Connection handle + * + * @return + * OCI Error handle otherwise NULL + * + */ + +OCI_EXPORT const void * OCI_API OCI_HandleGetError +( + OCI_Connection *con +); + +/** + * @brief + * Return the OCI Session Handle (OCISession *) of an OCILIB OCI_Connection object + * + * @param con - Connection handle + * + * @return + * OCI Session handle otherwise NULL + * + */ + +OCI_EXPORT const void * OCI_API OCI_HandleGetSession +( + OCI_Connection *con +); + +/** + * @brief + * Return the OCI Transaction Handle (OCITrans *) of an OCILIB OCI_Transaction object + * + * @param trans - Transaction handle + * + * @return + * OCI Transaction handle otherwise NULL + * + */ + +OCI_EXPORT const void * OCI_API OCI_HandleGetTransaction +( + OCI_Transaction *trans +); + +/** + * @brief + * Return the OCI Statement Handle (OCIStmt *) of an OCILIB OCI_Statement object + * + * @param stmt - Statement handle + * + * @return + * OCI Statement handle otherwise NULL + * + */ + +OCI_EXPORT const void * OCI_API OCI_HandleGetStatement +( + OCI_Statement *stmt +); + +/** + * @brief + * Return the OCI LobLocator Handle (OCILobLocator *) of an OCILIB OCI_Lob object + * + * @param lob - Lob handle + * + * @return + * OCI LobLocator handle otherwise NULL + * + */ + +OCI_EXPORT const void * OCI_API OCI_HandleGetLob +( + OCI_Lob *lob +); + +/** + * @brief + * Return the OCI LobLocator Handle (OCILobLocator *) of an OCILIB OCI_File object + * + * @param file - File handle + * + * @return + * OCI LobLocator handle otherwise NULL + * + */ + +OCI_EXPORT const void * OCI_API OCI_HandleGetFile +( + OCI_File *file +); + +/** + * @brief + * Return the OCI Date Handle (OCIDate *) of an OCILIB OCI_Date object + * + * @param date - Date handle + * + * @return + * OCI Date handle otherwise NULL + * + */ + +OCI_EXPORT const void * OCI_API OCI_HandleGetDate +( + OCI_Date *date +); + +/** + * @brief + * Return the OCI Date time Handle (OCIDatetime *) of an OCILIB OCI_Timestamp object + * + * @param tmsp - Timestamp handle + * + * @return + * OCI Date time handle otherwise NULL + * + */ + +OCI_EXPORT const void * OCI_API OCI_HandleGetTimestamp +( + OCI_Timestamp *tmsp +); + +/** + * @brief + * Return OCI Interval Handle (OCIInterval *) of an OCILIB OCI_Interval object + * + * @param itv - Interval handle + * + * @return + * OCI Interval handle otherwise NULL + * + */ + +OCI_EXPORT const void * OCI_API OCI_HandleGetInterval +( + OCI_Interval *itv +); + +/** + * @brief + * Return OCI Object Handle (void *) of an OCILIB OCI_Object object + * + * @param obj - Object handle + * + * @return + * OCI Object handle otherwise NULL + * + */ + +OCI_EXPORT const void * OCI_API OCI_HandleGetObject +( + OCI_Object *obj +); + +/** + * @brief + * Return OCI Collection Handle (OCIColl *) of an OCILIB OCI_Coll object + * + * @param coll - Collection handle + * + * @return + * OCI Collection handle otherwise NULL + * + */ + +OCI_EXPORT const void * OCI_API OCI_HandleGetColl +( + OCI_Coll *coll +); + +/** + * @brief + * Return OCI Ref Handle (OCIRef *) of an OCILIB OCI_Ref object + * + * @param ref - Ref handle + * + * @return + * OCI Ref handle otherwise NULL + * + */ + +OCI_EXPORT const void * OCI_API OCI_HandleGetRef +( + OCI_Ref *ref +); + +/** + * @brief + * Return OCI Mutex handle (OCIThreadMutex *) of an OCILIB OCI_Mutex object + * + * @param mutex - Mutex handle + * + * @return + * OCI Mutex handle otherwise NULL + * + */ + +OCI_EXPORT const void * OCI_API OCI_HandleGetMutex +( + OCI_Mutex *mutex +); + +/** + * @brief + * Return OCI Thread ID (OCIThreadId *) of an OCILIB OCI_Thread object + * + * @param thread - Thread handle + * + * @return + * OCI Thread ID otherwise NULL + * + */ + +OCI_EXPORT const void * OCI_API OCI_HandleGetThreadID +( + OCI_Thread *thread +); + +/** + * @brief + * Return OCI Thread handle (OCIThreadHandle *) of an OCILIB OCI_Thread object + * + * @param thread - Thread handle + * + * @return + * OCI Thread handle otherwise NULL + * + */ + +OCI_EXPORT const void * OCI_API OCI_HandleGetThread +( + OCI_Thread *thread +); + +/** + * @brief + * Return OCI DirectPath Context handle (OCIDirPathCtx *) of an OCILIB OCI_DirPath object + * + * @param dp - DirectPath handle + * + * @return + * OCI DirectPath Context handle otherwise NULL + * + */ + +OCI_EXPORT const void * OCI_API OCI_HandleGetDirPathCtx +( + OCI_DirPath *dp +); + +/** + * @brief + * Return OCI DirectPath Column array handle (OCIDirPathColArray *) of an OCILIB OCI_DirPath object + * + * @param dp - DirectPath handle + * + * @return + * OCI DirectPath Column array handle otherwise NULL + * + */ + +OCI_EXPORT const void * OCI_API OCI_HandleGetDirPathColArray +( + OCI_DirPath *dp +); + +/** + * @brief + * Return OCI DirectPath Stream handle (OCIDirPathStream *) of an OCILIB OCI_DirPath object + * + * @param dp - DirectPath handle + * + * @return + * OCI DirectPath Stream handle otherwise NULL + * + */ + +OCI_EXPORT const void * OCI_API OCI_HandleGetDirPathStream +( + OCI_DirPath *dp +); + +/** + * @brief + * Return OCI Subscription handle (OCISubscription *) of an OCILIB OCI_Subscription object + * + * @param sub - Subscription handle + * + * @return + * OCI Subscription otherwise NULL + * + */ + +OCI_EXPORT const void * OCI_API OCI_HandleGetSubscription +( + OCI_Subscription *sub +); + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +/** +* @defgroup OcilibCApiEnvironmentVariables Environment Variables +* @{ +* +* Some environment variables can be defined in order to activate specific features +* They must have one of the following values (case insensitive) for being enabled : "TRUE", "1" +* +* - "OCILIB_WORKAROUND_UTF16_COLUMN_NAME": This variable enables an experimental workaround for the Oracle bug 9838993: +* - When calling OCI_GetResultset(), OCILIB queries column names against the Oracle Client +* - Unicode builds of OCILIB initialize Oracle client into UTF16 mode +* - In such environments, a memory leak occurs when statements are re-executed multiple times followed by OCI_GetResultset() +* - This workaround retrieves column names using direct access to undocumented Oracle structures instead of using buggy Oracle calls +* - As Oracle undocumented structures may change upon versions, this workaround is provided as-is in case the Oracle bug represents an real issue for applications +* - This workaround has been tested with 32bit and 64bit Oracle 12g clients and Unicode OCILIB builds +*/ + +#define VAR_OCILIB_WORKAROUND_UTF16_COLUMN_NAME "OCILIB_WORKAROUND_UTF16_COLUMN_NAME" + +/** +* @} +*/ + +/** + * @defgroup OcilibCApiDemoApplication OCILIB main demo application code + * @{ + * + * Portable Main demo application header + * @include ocilib_demo.h + * + * Portable Main demo application source + * @include ocilib_demo.c + * + * @} + */ + +/* Compatibility with sources built with older versions of OCILIB */ + +/* macros added in version 2.3.0 */ + +#define OCI_CreateConnection OCI_ConnectionCreate +#define OCI_FreeConnection OCI_ConnectionFree +#define OCI_CreateStatement OCI_StatementCreate +#define OCI_FreeStatement OCI_StatementFree + +/* macros added in version 2.4.0 */ + +#define OCI_CreateTransaction OCI_TransactionCreate +#define OCI_FreeTransaction OCI_TransactionFree +#define OCI_CreateHashTable OCI_HashCreate +#define OCI_FreeHashTable OCI_HashFree + +/* macros added in version 3.0.0 */ + +#define OCI_GetColumnName OCI_ColumnGetName +#define OCI_GetColumnType OCI_ColumnGetType +#define OCI_GetColumnCharsetForm OCI_ColumnGetCharsetForm +#define OCI_GetColumnSQLType OCI_ColumnGetSQLType +#define OCI_GetColumnFullSQLType OCI_ColumnGetFullSQLType +#define OCI_GetColumnSize OCI_ColumnGetSize +#define OCI_GetColumnScale OCI_ColumnGetScale +#define OCI_GetColumnPrecision OCI_ColumnGetPrecision +#define OCI_GetColumnFractionnalPrecision OCI_ColumnGetFractionnalPrecision +#define OCI_GetColumnLeadingPrecision OCI_ColumnGetLeadingPrecision +#define OCI_GetColumnNullable OCI_ColumnGetNullable +#define OCI_GetColumnCharUsed OCI_ColumnGetCharUsed + +#define OCI_GetFormatDate(s) OCI_GetDefaultFormatDate(OCI_StatementGetConnection(s)) +#define OCI_SetFormatDate(s, f) OCI_SetDefaultFormatDate(OCI_StatementGetConnection(s), f) + +#define OCI_ERR_API OCI_ERR_ORACLE + +/* macros added in version 3.2.0 */ + +#define OCI_ERR_NOT_SUPPORTED OCI_ERR_DATATYPE_NOT_SUPPORTED +#define OCI_SCHEMA_TABLE OCI_TIF_TABLE +#define OCI_SCHEMA_VIEW OCI_TIF_VIEW +#define OCI_SCHEMA_TYPE OCI_TIF_TYPE + +#define OCI_Schema OCI_TypeInfo + +#define OCI_SchemaGet OCI_TypeInfoGet +#define OCI_SchemaFree OCI_TypeInfoFree +#define OCI_SchemaGetColumnCount OCI_TypeInfoGetColumnCount +#define OCI_SchemaGetColumn OCI_TypeInfoGetColumn +#define OCI_SchemaGetName OCI_TypeInfoGetName + +#define OCI_ColumnGetFractionnalPrecision OCI_ColumnGetFractionalPrecision + +/* macro added in version 3.3.0 */ + +/** + * @brief + * [OBSOLETE] Set the bind variable at the given index to null + * + * @param stmt - Statement handle + * @param index - Index of the bind variable + * + * @warning + * This call is obsolete ! Use OCI_BindSetNull() instead. + * + * @note + * There is no notion of null value in C. + * It's necessary to explicitly tell Oracle that the bind has a null value. + * It must be done before an OCI_Execute() call + * + * @warning + * Index starts with 1 + * + * @note + * For handled based data types (non scalar types), OCILIB performs an extra + * check on handles and set the bind status to null is the handle is null + * + * @return + * TRUE on success otherwise FALSE + */ + +#define OCI_SetNull(stmt, index) \ + OCI_BindSetNull(OCI_GetBind(stmt, index)) + +/** + * @brief + * [OBSOLETE] Set the bind variable of the given name to null + * + * @param stmt - Statement handle + * @param name - Bind variable name + * + * @warning + * This call is obsolete ! Use OCI_BindSetNull() instead. + * + * @note + * There is no notion of null value in C. + * it's necessary to explicitly tell Oracle that the bind has a null value. + * It must be done before an OCI_Execute() call + * + * @note + * For handled based data types (non scalar types), OCILIB performs an extra + * check on handles and set the bind status to null is the handle is null + * + * @return + * TRUE on success otherwise FALSE + */ + +#define OCI_SetNull2(stmt, name) \ + OCI_BindSetNull(OCI_GetBind2(stmt, name)) + +/** + * @brief + * [OBSOLETE] Set to null the bind variable at the given position in an input array + * + * @param stmt - Statement handle + * @param index - Index of the bind variable + * @param position - Position in the array + * + * @warning + * This call is obsolete ! Use OCI_BindSetNullAtPos() instead. + * + * @note + * There is no notion of null value in C. + * It's necessary to explicitly tell Oracle that the bind has a null value. + * It must be done before an OCI_Execute() call + * + * @warning + * Index and Position starts with 1 + * + * @note + * For handled based data types (non scalar types), OCILIB performs an extra + * check on handles and set the bind status to null is the handle is null + * + * @return + * TRUE on success otherwise FALSE + * + */ + +#define OCI_SetNullAtPos(stmt, index, position) \ + OCI_BindSetNullAtPos(OCI_GetBind(stmt, index), position) + +/** + * @brief + * [OBSOLETE] Set to null the bind variable of the given name in an input array + * + * @param stmt - Statement handle + * @param name - Bind variable name + * @param position - Position in the array + * + * @warning + * This call is obsolete ! Use OCI_BindSetNullAtPos() instead. + * + * @note + * There is no notion of null value in C. + * It's necessary to explicitly tell Oracle that the bind has a null value. + * It must be done before an OCI_Execute() call + * + * @warning + * Position starts with 1 + * + * @note + * For handled based data types (non scalar types), OCILIB performs an extra + * check on handles and set the bind status to null is the handle is null + * + * @return + * TRUE on success otherwise FALSE + * + */ + +#define OCI_SetNullAtPos2(stmt, name, position) \ + OCI_BindSetNullAtPos(OCI_GetBind2(stmt, name), position) + +/* macro added in version 3.4.0 */ + +#define OCI_8 OCI_8_1 +#define OCI_9 OCI_9_0 +#define OCI_10 OCI_10_1 +#define OCI_11 OCI_11_1 + +/* macro added in version 3.6.0 */ + +#define OCI_CHAR_UNICODE OCI_CHAR_WIDE +#define OCI_CSF_CHARSET OCI_CSF_DEFAULT + +/* macro added in version 3.7.0 */ + +#define OCI_ConnPool OCI_Pool + +#define OCI_ConnPoolCreate(db, us, pw, mo, mi, ma, in) \ + OCI_PoolCreate(db, us, pw, OCI_POOL_CONNECTION, mo, mi, ma, in) + +#define OCI_ConnPoolGetConnection(p) \ + OCI_PoolGetConnection(p, NULL) + +#define OCI_ConnPoolFree OCI_PoolFree +#define OCI_ConnPoolGetTimeout OCI_PoolGetConnection +#define OCI_ConnPoolSetTimeout OCI_PoolSetTimeout +#define OCI_ConnPoolGetNoWait OCI_PoolGetNoWait +#define OCI_ConnPoolSetNoWait OCI_PoolSetNoWait +#define OCI_ConnPoolGetBusyCount OCI_PoolGetBusyCount +#define OCI_ConnPoolGetOpenedCount OCI_PoolGetOpenedCount +#define OCI_ConnPoolGetMin OCI_PoolGetMin +#define OCI_ConnPoolGetMax OCI_PoolGetMax +#define OCI_ConnPoolGetIncrement OCI_PoolGetIncrement + +/* macro added in version 3.8.0 */ + +#define OCI_ObjectGetTimeStamp OCI_ObjectGetTimestamp +#define OCI_ElemGetTimeStamp OCI_ElemGetTimestamp +#define OCI_TimestampSysTimeStamp OCI_TimestampSysTimestamp + +/* macro added in version 4.0.0 */ + +#define OCI_CollSetAt OCI_CollSetElem +#define OCI_CollGetAt OCI_CollGetElem +#define OCI_CollGetAt2 OCI_CollGetElem2 + +#define OCI_GetCharsetMetaData OCI_GetCharset +#define OCI_GetCharsetUserData OCI_GetCharset +#define OCI_SIZE_TRACE_INF0 OCI_SIZE_TRACE_INFO + +#define MT(x) OTEXT(x) +#define mtext otext +#define DT(x) OTEXT(x) +#define dtext otext + +#define mtsdup ostrdup +#define mtscpy ostrcpy +#define mtsncpy ostrncpy +#define mtscat ostrcat +#define mtsncat ostrncat +#define mtslen ostrlen +#define mtscmp ostrcmp +#define mtscasecmp ostrcasecmp +#define mtsprintf osprintf +#define mtstol ostrtol +#define mtsscanf osscanf + +#define dtsdup ostrdup +#define dtscpy ostrcpy +#define dtsncpy ostrncpy +#define dtscat ostrcat +#define dtsncat ostrncat +#define dtslen ostrlen +#define dtscmp ostrcmp +#define dtscasecmp ostrcasecmp +#define dtsprintf osprintf +#define dtstol ostrtol +#define dtsscanf osscanf + +/* macro added in version 4.1.0 */ + +#define OCI_SetDefaultFormatDate(con, fmt) OCI_SetFormat(con, OCI_FMT_DATE, fmt) +#define OCI_SetDefaultFormatNumeric(con, fmt) OCI_SetFormat(con, OCI_FMT_NUMERIC, fmt) + +#define OCI_GetDefaultFormatDate(con) OCI_GetFormat(con, OCI_FMT_DATE) +#define OCI_GetDefaultFormatNumeric(con) OCI_GetFormat(con, OCI_FMT_NUMERIC) + +#define OCI_STRING_FORMAT_NUM_BIN OCI_STRING_FORMAT_NUM_BDOUBLE + +/** + * @} + */ + +#endif /* OCILIB_H_INCLUDED */ + diff --git a/ocilib/4.4.0/AIX-00FB437F4C00/libocilib.a.4 b/ocilib/4.4.0/AIX-00FB437F4C00/libocilib.a.4 new file mode 100755 index 0000000000000000000000000000000000000000..ad258dd589ad3f570d84817839a613763c02adfb GIT binary patch literal 2767351 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≫W7;2vJByJ4B_$&;qndP3Jl@=hHwExxKcy7GDEna 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
v6AWshFQ2bU8d^ z!;iC>4s*2*Xv=T@3heXDqru%T1P_xu430A!y9!KamfsAy5Xha80-72v+d-s;+_WMg zlr=OkgiA{n2(L!U2tYE+Ju84(8jvzLdhzg%0~=Gf+XE>&Jw3!-?PCnu+%0$exy=Ci zTKig{A09yi)@U;}p;o*A!@zWeTwHOMw(-aflqI z#71Sl@nI}p+bPmCWy87RV?sdBppt|+2W(xPr*(SMr~488MwqKwwPV8cUsfd%7c{6d z?COfY96RdCWi}kRpUKB83tp?|SR|wVXtKF7=*3O&==x(<=Tw?>VS=^fBwv)b?P0ln zXgPALy|pom*Zqn81Ta8VruAJRC#|o zu~|#op?Nt__htI*P`opiMG!C#tUP#@e0UuIpLw{qF84`4wsaAqRri;qxpC!8XmM@p z_Nu}mN^l~rM2&Gb3Dr5S9~yVPNaoP3oG#Z^YxbC*i>U{@OvhybVAsp$!nxF@_J1X& zuv+W@;QzI3fieR{lJNiEXSl zl(gxrx%~g!bhZarqPf!X5ViCuhRvPxr>Aq@r04W>R*bb7)7dX7KA6ts7>s6eI%|&m zM#_QQHF-Fl1(}-80?e4sjVs8r?lln?nu0c+F-W)~^^dv7!RVmjwimbuWKo^sQWu}v zDw?R%Jm(u%D|6iREsQeAghLKTKmd2HgG5opj40%gB=$<)MHwyL4*4M<;iE=1=Mw^G zsbUFUGMPO2iwKZpk*T`ekA4(BOLsRkI(3MpIp59;Xmxz~_Hgo6aSWtkaCg~5aR13$ z4vWy-c(xqq;&PW*>)&*_A$&?6t%HAT8AiV$ne(nL2V388!%nX4O8wiG${SKjW{qUS zKyueS-|KYZFW)NzOPx-3x}4=id2ilBsgj|;%tbviaG1jpk1F`e8ZbxC+b+5)EeQN~ z4Q%CbAmPx8JF>LENlurO94ep-UV-OS1ydR6iVWFY1kApE`doFw60%F9u;+U|?<=n{ax}U2`)x#LicHA+#ATH`w($-~Bob)H9!=G-=2JSs(<8Z-70MXk-Ux z*61|xgbPOfuen_h;xX*rT^YO~sD|uM zc{6Q<+xwM0CkUM}WskOZs*UZz`reSc0`VgP+Wu8ur*KClzLzd^mq!O1gN^4Kn;XOL zsZtsksxR$J@CS37If{`T(P`r5{-2jN9jJj_5Bw&+AP+^Jq{?yRVT zAIY+|v#(&jAFXC{XZvLp8CxH#%-Z8EA2d)y>EF=RUhe0}H`936oy9vplqNh4($- zUI-N1P{0&2`-}6rgYtQ3%>*?C-mAx0O z_-sFYv%2%*MSOLh9&8Qbch`Q?^OBk(fY`?(5vwlF}=Ix#B zb#bO8ZmLsGrmUSW!DukJv&mxH*w zG&AYt+H(?N)BYh`PFt)gQCaX4Yexw{ot zwT^B^7~z>azA@vO#xp&D`&POWryQfb^_{)7^}Xsj5yQU~xQ3?ud+RSHT6_jI z078k{Wl(6X>Z|qDZyBkV>)Y#l8>>@Lcx$*a1o(V^V{^E%J(b9+ zvcI`GGbwm^=M?V?{J(HF4ciB8BSl{9R;xSP!@U)R2ojjary$!P*90^dhv5V}Dzh}- zjdfP%VO=e~9EyzwgB@naaN|IntdHj#FA)@L8!M_-02F~Cf-7J_rhmxgOP#Kavpwl{_wzgn+W*4Fk|dxb=TkmOALfVXP+x9BKzHd8uv%J9|R`pO#d z{!1O3>nq=C?Jt1AtBn`K%A_|+;sfydn_Z^m_HYT6x+JY_9BizyvaydUu>EZsT76}Y z4oHzM2?v`i7=jxWZ^J}r(b#QDp1t+q{vMi_LYoxeV58b$Wkg+hjdht#TuFJpv$IL` zWwvMqq}2?pq?s3(DLPejmK*zM#}Cq0rG+dg;BcMtd}n`q4XP6&n6r#hU}baT<@S~+ z(OTdEkw!DD{6fiIg4lSz&q9F#S5c5kSx0XmasD7DJ|Y%#qGa89{+HsW0So{+`ipXc zDv1ZX!@VVLIpG}NXx}@`Ol2|;mwH^mmS=V;WWy^PWr2X-`iqTic)Hgj)I<|YdYDoP zH?svr5Hsn2a4*wWzN`+TvaTEq55Nf3Fho2P1V~EA8qNd(jt0r%JFLM`^S^n4&5r9h zw@d`w>&jeYb=gEY-d))nG96eQLcy8_YRQ;?It_civbnOoYU{*w!u)WD2on!-Z>_xH z@eD)q-&a=@TtIs0-RWm} z$mqxL-3{pikKyZY)>pG@|KZswW^%=fH;Xq*sKSwVIsYELe6h*~4azeAHbc5j!+y2C zw?mJnf!m13)&tl;!1eMuZCSlmGPk=1O~_tD9Is7dVC=v1ij}XlJk5-Cd*+=V68c5Je{pQ2YIJJi`_ZibD0Kl5uS%#9>B=gn}%_^yVQRO>dKZeRg@D}9pg{K z7TGF3z@gVw#s^3M>=EN}y7W46^jBL1KbQfAS`W}!$4z4kmGc2c4#vbzV9lw%tz+z= zBM&fJUl0_#O(XBl>-9Z`VhT6Gx=XDo+yq;YkHLeoi}LAt0PD$A^8nUod1%1)1`C}P z-q&b=wsu!nclMC(O@V?z#G-T}+hpN-%+D|{08Xf#ibnx=( z8lfnYmF*`M@N40w<69}?$VzO3>@;q!?yiZ>gF@;(ol560#~r#SN}PW>m3XPQ6aa@f z@=LoFuOVP~w#$to2cBJUHfW!j)icPBo7**h%YNi(W}C!^EDJ0iQ!F_f9n3Dp2-Ij502$LSrXa-ZkUynA}`laj4DAzx2}^!`jD!A|OJCWkkPT z@XOo6G{=e|*eiZ@?AHdryz_s_FK+}AA^(++kw@U$FIDZ0Y*8bk-Jn#7M7N*hMUeYX zG9$q4H`_Dhw*CAiKfSH3AwRt_wunJxG^C*LjvkBW%iG&Ivy*OBv4fOA`sye3vRBeC zs^yZC{ldkOBP{!g4CI27e(v$h+Zyo85u^RKBQ`uD9L+p8o|IJ|6)UJ?H`LVT%Nw*W zC3>qv#gpXATedGHdh7fA^2T2u3hIr%mgFIxnKh*k?yZ4a$J;gl%e1%6YkDUf#M3oy z_^4~I56{jJrt(<48QtF9fGQi4It9lA;sabd5QSihl4!wptjj6{1EZzkcca{i%!M-ic63A7 zC64y$LJ&0O0v(bn{h$KQV?6U1!;S(sXipiSn=^uIa2JF_3=do}&z{(GOYg0YuI>o* zK!HT00i|yX&IPYcNoE-tUtirE+Hn+*=SDq{5t4AHWOQSpndjNEdJAii_eZ_*8|+5til|iO~n`*)D7%fFNu2`x$n*|Zt>ydVh7~3fomX%XTR4OxyFab zH&<{0E5SMAL^VN$W8{~$31i|OWQBlnXj7npr=Xo08aN92+XCh2ENVEy)??Q!Wy|8> z+JN`xs^fmY&L7AatkEW}NL~*F!hQ*TsUv$V7%#)ZTDXjOHr>0I$1tyzU+V-APv(+< z5+Po@A&QtQ0K6reso!6dH!-=mIyxFbB0w=%Vsn@WT{ZFY(XpKz&4fUH&3=aqRSXa8 zNlXkJXYr?2MIoJ)p$KT)nZ0iXrZ|M$6`1cQI(5pW*5G;U08xZmcoU*A(0CSm(lw~` z6BX9h3b&dY?f&l%rSJ6vr4xcuv0FalxRgL!iZf}&5nCvC^3UX{*#I>d>+n=Gl<$R| zv63kU&d*n2esPPAT1kqrizM_6jP*CS448F^3_$>NNDi;4l5p-g?|457tjXBi{*A@# zHDMj#1{JcMH3>lgE^X?HE&hHDQATo*gk-{!osjNRSqx;?cvW}OrsQd+#_IT5Pn!|( z#N<;e7RuKrdcs2IwpU|9*fBp_v2eaVxx2nl42Y2-;(qIXZ8#RxI>!l5MJsALhte3S zf)H6;Vat$ctypqjk51WOqgcek`x=pSD=~J$_3K!IU$X%?KSfCLa;K^c5{z&c^qGfz zX~oL?+Ji#1Vs-XUs*iQ~H8-6Oc@2U=MDWiydrQ52}2jihQw^6lS{3tydgVPrj{tGFSsx| z|3mA0U_tkQiE;9_Hcz%r)x|zFu|V_VeePJvdAT+68F*^l#9Wza_+WrG0rXkO&1IPS z62SYh~kTMAyjA`2ug#OTFXUb zxY8ah2Grj9)IWe?2xTtTu-9uS?~8g9W8@7PV<5+eKOBt|-czSN5bd{Gr&7UzetPhJ z#POjyBDGS(i3Ha3%L!M^ZM~6{A{wp@4CJ~P!C9=pa`U-lNwsAoH6D>uiL40NGAS46 zC%iFJlp0evQ(0gxd|~t+OAMzjlzEs47k2~~Iytx0#68-zttabv*iboYDE+p6Y14ca z(}p`-juWA76^p^ByCEuyfH^o_0c6JiyTJxQt7#5UA}q;>VRVO5WAX- z2>a0un+@Iv_4Y2ge`}gHuZB)T-0;f_pb2K#Vu7?vTc@b)ETot=>%=L=L=R&cKFCtj zyLkU|3Q!hLUii!e)+%F-ii%?}RF0cv$7?$pR^)vNmm&1)ZgmhoQWr611hhc&qjT#|Ds{ zm1+&uvD19wsacAdk_v~h zMB%&CIRaV~Y92ocY{fyg8R5x>U@)yuGT0k0_-do)9Gr@zU7g032zAqUsFby=Y$V#Lo?v~5 zi)K2D)|0M!%fO4>ot-g1YQ5U0Dj5>_M;Uy}K#nBBqa0Gz&7`O3_#bHIS_&`$|EJS2 z03k1QkM0V?7eVi5CHo4`+XT~zLR|9SqWedyH`o}=MyR;{4#RU?bW7cZc+`BG>Z^$U z%}lkpOEo1jYqLt`#NTVUyF_}SXeeGF9urZ~50^x#lGTq`_5~#Qow^GKbhH5MR1IvW(XnBd}h15y-Mw}%*E7YQom45ff};Xwpw&DRT=cbv=9Ld ztQtVE1hln4>x6BOhS~I8UrAF|<$)VKcy@DmjYwBGb)&bbv)bOV-V)i}fyi<*;4t@- zpGgc{m3Yc$U}&E-gP73y9vZabYFXV%vQ0CfKyO+lCNy{E{Qi=sNf1B2!V#}K6DEhJ zGwsYc2$d{$Dnbv6wZIlL5K7hN?h;?i6TSBKt3 zc%I5&E2nSyv^gZbU}_bd+>OVq&nX^txjJZL$!X4|T*259%m4#4hSL#7zn>Y z11n^fTEMC6M5&^elQK;J)?S_M5yf??SM2i$TB_Km&A!$&NM(pd?E(kqP&~rKIk4iZ zdJ*vrha0BA5J}ac)L?cOg#oZ^R;9MerRRaKpYerrxGYHMIVRYo6B7tDiid5mxlzDX zYC3U@;0Xn3NrCIU;fq5)0_*#W2d4sxV&~be6xEh-O+7{}5)=7L0zC^ICQ@XYQTC*XRc}CLO=1`{%)~^$ zYPRW6WlmanW)=t4n`Eeg%9=O}ifFdOKw?B?y$Ww36$*nDb%f#}6CozqG>X`I!^;O~ zE`(buCCO1Fpb4cSbqWnEvV;?pGr+KjRc^|nbDOgtvMj?XzhCRc=$u{h}{dxS#_ z-GCI-3M`kG@(H=S#4thdB`F^CJTwM;DzGJCPSJ)5Xi`;B=C|F)=!BZ!c>_vsLRBy@ z4U5l1RXCL!$Apk5>P!&S-UF3E2v9K05jmuvVraqpk)>ai2BrN>lh7YHlM_@WaP>0= zcudIXrk(%m}yno_|WkjYx`XiZIqzDLl=;bZf?Lw(IWk+{W>4Cfx zJS#$raG));zyg0|M7k?0c!%~tPV7Kta(tja5}w5=(LEY%$#SSD9|`&%?=HJiP#@6wzMD`OkMf{f zpHMi4{rGJuY)d351#MDJu^#Hqk?f7!=&YpqWv4^6pwr684MDTHv+vS1C6r!RjD8y3 zph>73o*UsnHaoG`s3^J6hsqks%)LrjU#ZBF*M4ujq|+lfXJc zLxqs!t2sPW5wF_a+!D`FL_Fyh^4;3$U@l$m>i}(7zhy6j-9uaP64JcnwGzrlISm2n z&|T_$msb#TR>s0?*W#{zx{Nnp-rZFyc`RU1_%ENVHaT42_Khawu7#>jt|VR*Qp0cS7g# zbVZt^qt{%wC8c0ZNlP)EBIG|;xJ!fRIIIZV7!L@t{kkZ?pc0zc>9KrZLg)ZZly9yk z6KM-JJfWAJ9*bYOD$QE#>V>XGJBIJY2s-nqZtk>1a?!k`Snrsrq@soD^0bvXk<&g0 zN6ZiNsM9U!#|h?tq51+flckKO4ow6O{7#O}s$-Tlu5sT2jqyw>*pu1Wo2NpLG6h-l3RMs7 ze37KE_mo017FUAjpy^Blet~3R>>=yL;SUV2YXHCtUUCP4b^~}}bhGQ_ zs%L8z)CyY=dEx{DJ0#G8YYoMyR$YkkRH}??BV9X>J8b~DqWJ@P68G~%PP>smL=VQc zjugZBG6%Dfb~a*_kQ2wXnF19a(Rrtl2U$W;0a*^<8rfjD;r2M!PpHea2MBP5JIUdo)}1L z6wd(4yec1+$&wUma0ogk6-y~-udx&xb9nLYkVk$OQb)85q49YR*%OREdF$3m`8dxBvE#ASpsz2aR`@uR&Z&5g ziY!6J(WOm307*XVCAeZ%qqnwuSGR&w8iHsc6+6ME0x2vlq++MH@hpO(42*z-2UvMW zY+_l_gBfkk(oCvtoLHBr+~Lol)WnEtv7@ki3w7a^!2%n0DFf~O2tg5Xa zwFR=Ltz$ld)lHqW^+gecYy#txg@n8c#~=!(w&gmhtwt_57E;MVjM*5ZlI7pf6c$Yl z%VAo=!>0-Qq<-}{jhz%?B=sye@tQ6TF!4YJv+u`SQ~`^<>sL3h@`*On*N1Xr=GJFo z)wr?@G?BH%+-5;lnQwzC`*VWTWU}q>BSIE70N)< z_@)x|D9O=HZA!^9W@~>-6N#L;BhX)kc$7fr-RnRbtAjWsxeK(@?3Kn2p1Ke;(M}() zq8KftmUZSC15I(iuN>1XEg)F;?nS4q?bsoic#LRBBUa^2Jg=0;TCd5Rfy~ zs>OpQuVymIZZWg#^w0SO?bh@{2?`qr~w*s>Q=i2~N^yLc2dF(4Lk zobk|fs#3^(-vP^e3gMYYcjO51@i2!ucrK)3RZ=g{SyED|5|qt?Z)9s6VgN~Xna91R zLosxkx|E<*2S^MZkX+CNO{6g(eSe0^fzrQ_iWXTzF$GrR%s`rUQ!yB_n`Ws{AMC71 zd(VYbsuB|72dBq{)U3|#BncmxgOnqN*fwq2nqiERz6}pCqN(q^MWd2rPTj=>9G@}8 z@kwRvO3Uv;Y9&+P7TJT0#$9F#u$7PncQLh+h7+Jo$@&m(F?E%a#U|ro>MRA^EE3a0 zF6+{z>Xlbvn~V)PojCWGG`RQgxn#duO#787-g1F*Z*vlYyDWhtG;*H+O-e{lPrVy( zP}kLWxgxlm@nWhlk>DP1ON*((7}#`lV8KyNE53u5{2M*_3TrwfOygC+Q=%xP;A%82 zDQK>VV>JrsXTP7D%fr(Uh&Y0#(15}zrZng!{(N^5W)Lt5P zpGK+FS!SiWk&y{6Gpucis-?wLUp`(SrKvWPDpa_`w@IBca6J+W&BCxPmr8AcZ61Xvb)a%0oatf5(>Q0Rjx2BrWHuF)edlrsh z0@gsE)IkJy;e!yIOtddvOkG52W(a8{B?2XKjp|Ay0OH{T7Bcy=L%CwpwwQ{DYKv3^ zJQn0g&Osm<5q5-cr>acGo#>Pil@lk%%aP6uB!{tXq%ZXn_rQaMAIRGD7+g$^=0U6@ zT1;K${GNq_Zl@L_lT4maET$gw{fPU$XS`Cy#ls1+Kq4y@8cT}_dBOy@V>gn6NX_KN zoJ*y~lEc_&8xnOTNYqSg77bcm5NJNmhU?{k;;GKeI0{-!eI~s#c;OOM(qzX`9Sj?k5rJI3O!p%+Z zON(jJvBW!KZgH@P;nAMVqwcik;Mi7Zk-AI`b6TX$Mg+D2bP81>p#Jw#I~q^S+nUX-%&Wb$=;$Cf{4?me*&me}^I564x7-AfiA=oL zOZ|lX7e|eu;`dTRL6fFq$0Oz#28>=RD(GpZX*8{cz0_7nlv_k@?Nltdk^2A~)4tQJ z0~qAS74Nu`BS0vd6-hC*EJ+$ob^QK)b*x)*sx2sPsi6hx89=l85wyrfx1~002))!# zEaB{!&^$qA1AwUQJphL?X5h)MFMd6RWNH|mdW)t-_va}UC~}4^McWVp8cSP3fh5+l z%J3W=7l_iN-%DLWj^VgDkU24R0Lttb>g3^<`;QZkC>AUKc7O6-Di{DQ+#{!Hur8Ss zJ8s9DuSzeK3I@d>w2;=1vfY_*DrnrqSg4Xj!msb?v_vlIB*ehUNt}I^Ytp^cC=BX` zrX@YSXIe@FNXu#PFe!*?ZEK$KX(}Dp$7yeeG0m&8mwJcp<=fe9FSQLpkj3aq<_g=x z>hb3U2YC8Fc+(@|*J^%&QtBJmtio@v*eUl?$4E#EP>csOwHq2N(Y@3v3^p@P9cZOK zagFmpFZG4%bBd>mfdBhte`-RfvT%*V7?EFsS{HXL8S-yat-)O!;Ry&J#)Zo)j3w$? zEf`76u|b!5l$MBLu){T6E2{gq80pj40VVObgrp{u;!K!WSkbjYX9>Dg5GZqt!+gDi z>!o_&E&wrzECh0a>!p^E+O6JJ^s#a$4KQb8)JvTpveDTaGpu8pA(Y>A2_yuhNqrzo z0a7M5`K4W*LEoo6R;$p9QD##(g4zY zDjf+m8mY}3cX#EM%7Bd%cwo*E%gL3Zd21k2O=$pCbs%jAec^r5OC`m2sU1d!2{=!r zqf}3(;0wS*fHvVhz=5HGdyQ&hb2bH6H8I3Zcn5G`DKJ``-Hagenh!3ceGXZ)`WbVhNBilm{GTxGNhOYz?y$!M5v1HP0c= z)RYV%wG6T;NbJUaQyvNv->85lq5El%LAAcRxbu^@ep+L=wrVz8=Z1c&J2$tt=S%%m zaY``AxUy?b7;#;RfDtB^ucU>iNNm=RV!Pcx)5KKLfER5{77LFo<8FU+T2xH6k7Iv~_PXsNtdkiGXz$f8^;6Gt2Li;@nBuALxpks?$MF@w z9BMOJ7?1@US+31vKXpI5JZ6U+{nP*j!ULJDopxDd%?aUtym>EEDLD^3#V-B!Qwvlz zaJK4J)*N>3q9PffirqGcHmUpR){uq)Vdo+2bK^|l(@+3sTwd#^8aN^B0Ak_ZoENwn zgeQX}X6k~T9DI;Epaab|N6wT5R*@MG04DARe5W%bKm6{e5;&P)s%61LSAgiL>Ir)N z_FUW0e(HF57w1a8)K9I>jTE_9rcUQjIFp5xyeakVdY##^0A_bvOq-JunOVft0!ixMim%2*kP_z&&YDy}+$)K=0 z1U*xK@e-c1u%mJ+hTvT4B$kUEtL~}@+(Zw4x#x_~86$NLE5PFVy>d4(np|AR$%~_# z`i2*{m}t7Cy5TT|C7VlS!$E!(w?4U1hB9a9ye7UKLx=#WNmx-`&IHutyC(5dVX(Y9 z6eNOWa1Teaa+c=mfD{ZjBZ-Go6(~BT)HT4tG&qjv+I7Vf=?ZN|LQvVY1ub%+D3TO7 zM3RlJN(8mW6}UpgX&XYi8z z^N-*2tOp+81mUoN_crr0L9s!Lk=h;)B~KzwVQy?3of4dGE)@zD1b9Yh5kV7ULH&Hp zje$ywvC|QY$z!K?DiKX^T-S8}eM$xyK9q&H=W8VQ5dv_Q|Mr~tBU)?HRMg1Bk%tvNanF)W74RNC}*zv9X}3@O>kP*h{6HY|LE9W65Xine^rTIy>g9gU`?e_|ztdI=L1L z)Vp+MZm;_GKKZvg87nQ3~TghpLq=}`8t3r<-R>2zSBK*6^2NOWSgSIN*zONtZwtl5mS22o$_ zpz~oHKC{mrG!ST_<`E8oo&=)yE&7H1;_PAbfoM)#JuNFabau~H7NQ42?_=;{AwRQk zRT~C~v)}4>^!vA#;N3()${@Vw*xSvfCXjdUJZ_rxpjH zz@rfwmR0Epd`}$y4D3tH&y4EJ84h>lB%v~_?^p+$hun%pvZ|*i86F=fmuoKy1~wm#)_Qg_ePZ8G4Qkz$6Qm1j)Nt_sg2(GNMr&AGOCJY z-GBk{!Qd*HPVw!cV4TE}I}tp8Z|KD$uDpg^tlSF3#T{x@?;{d`sjI2t%-F}v2aR*% zlT*bd7^Ai-DRHzU&dNEGvuc%=C>F}c5>7=n7S)leh~>KgwWeh-Ux0FxXFW0T7RNT@ z!}}{j@+lmg{I0{0jIEqK=nBsR29$Jxv4srP=Eigak?E-zqkRIRsaE+e|qR=P)*xefhh|!FLboEHk z7{`-~@o&{+EW_itnPgt!0tYrk5F@IjyiD(8oHEnW{X}yz_WNV^BR{*Ap9s+4U4tUD z1PY`Q1O?@ODsdi*ve!XwF0tBkcGl5AuoRO4h%#}2Gd4GK6c)|CFbDv<;ff*Ofu!Df z&}R%F!RI9BV(A_$c0yJVBctW%cmxiLC*0GIiV*Z(6~P2q>1s%V7WvR*GJ$G-V_sBAgFz1&rqnEnC#Z95}=sDn;2dnOU}3A-~mUtb3K(PKRS&0X7gh}>=c42m!Wva zgsROrr-BB44QTj8D>0CiA(}as!Fb2^UE8OX5|YhR1PFdLPf{3=ez??AT8ynvK$*a~ z)n#Wkqy^%hHp0{N3jH@@@s1sA2WDc^P$>e8Rv)=zND23-SewWkKcTE=THg)Sp9)t4P*+dbfDRU^ZG+8^^695qWr09FwM|$ zr43egb?ft8m0iCdBT*PIN)bOw66_eP}Uqj=JcWX#xj9VR&D#?1V=j%#Ve;`XG`Rs+gN2Ez4k z9aS+%0(;lx#2}42!`#BI^7r7|JLTUhc8Jr6;Lck$+^Y)}p#eruL42x6SO*$u8i!C5 zYUqVG5T=3}KE4(chVn24mL&>ND^kQcK%LAC)6)s0IQ8q4+i1rJp@#FMh<7(JM*`?^ z6zT{~fI1C?f|9Xp6NJK_VQB-@XH$}qX$|BxWvkTGpCd;s$d;qu7rFxygw zBu#kOgH61tly@{!J+hC*EhBBw-aPyH|H%Ob0zogH@s8mBwlY^Q_6EDWdKO>2rucl_ zAD!ltjbWpAGbn5}Hwne5FtHX`g zzvAW0{NCHx;?2zZYn$gX>#tqR-i^;+u}{v=H-o*kUEVP(z1v)?wiIBHy=GLvgRlv! zdr1~vG2PqaQ90hN%B(yW_i~N5q8i_ue3yQL+&b93*xT6xC7u_`jFG@YwE~yEQ{UQ< zr+0Z=vLH}kuXvfV;8CEPJG_yS)v7-`!>poU1UPCf2qj3BHqo(ssGunacB4 z9t%T~edA3v+}qz?t%ffM*q`7n8_SnN!q_KhFnqD``VBGQ6R^9pyShDmPN?*Ryx=8m zVvOe}&+!e`siO2=FZHbtfRwHezS~|U26UF#eC>eJUwtx{h!mVzR)#xz^_v}FV6eKi z`)2jkOTyhI#6L?vSGIX%u=H_lbL&^n3H6zo?OVgi1}|!K5HCG%uJaUR>FeI$mwU{B z(pe^qhMYs(D7VGS+&khp9$y#YZ0sWCxgM1#-d}#N?(BXy;H7I~-zA7Am^X&s5gsl9 z;Psp!XZdM!i5OkY?=?bP<@Y9|!z0TqAJL`&zXDMDYc=fuig-eqWgE(}Rf_^I_jdJq zJI^`-EnVI19aJy2_FnQlIBQH~6>w{KFxX>uv&b}{P-JIi&8N=GU0!f32$V8wguiGO zdGkipS=%6vL=)VsNl!_#L`6G1!2WV!K(vActga28uTpJ6Y?aR;fPx#(ldp48Jqze_ zhilx;?|p7HPkoc2bbfz(cV+e4ik-ysjUl&YGvgGrbboX3ODc>PYTOD!`C#gBRS_NgxtzZDVzX$81?DqcouXRql=C_xAd)c$Sd`GtwCuJrhkS?h{M_ z57u@EZ(a}ZuYU;MH*mqksyGldDEE(yULE+TN6Blv2gpE0-4m%scfSyNe3OxHb6d} zEO8ikAA?!wII3;H2b*iJm3a!WH*W^Jo5R}wH6B)WPi1Q~tgOLmB&@8#3IYcZ zc6*)faa5d4VIUT2wC-sb&)U{&znA=7LXbVK?bh`tC6sBub2U~HehuP1gq77gRNIc zdx3L_czz~8G%|uI6x4r z4+N_DNT7WNpjHk%mq3kF4a}{eD~X3*sNat4{Q-O zLE-Nu>%MKE&Js)BO0 z2CUFJ{w=+OV+~Yy*mPGN{$?Hlv@5DREr9ai_61#$<%H}rwf;a+W^3ZZ)IY&YAD zq|Kd7sicP@rDmQFf|>0Xr-m3`Zp|1=|~}SkBVfO{=+d)pXBlcXOW&YhyiMUmd&x zQ2L7;Uq4viu5701JUH4Y@ZPHp@)raOe174VB-CqpN$8*!>qxk+2qin}uh(<38`!F^ zSM&r&?FG4nd*ubmjqTz39z5y2uUGW~_v#C_1s?SmbS(i6j*1Gp1#T79t9^lcMfH-u zdBD=%s(1DJW`OH`{pJDdw@!kCKKfRMf)gBIRTLI8fU*=cfLJA^`vy>!(s9gJs(St4sWOO8LV_V>VwysOS;u3Sm}Ax zCs^HgYgc^QSkfg1)RlUVe_$Zxsoq-i1yG@T zj5?sY|LVj*d;`}vR(7?T;Ku5%-20KcvBFy)6I^5S^7->MtWq^Dm=a#4jMQ;#_8$0V z4X?4%j;4k;250Z(`s+HOAgEQ16|7FF@iaZ@m-MC{CP3@^zue*x(IR)HDy^^Xldrjs zYZVr##*9Tbiq^;p=J{&G%=V+AHBJVCEcKd>y@FSZ0s`Y)BI?*8897QE6})%P~Hp+mi>%fh=>$(jSS^xdI@;m#g1 zzFylQ+1jo$mj17;Z_{BQrT=Sa+gdPy(R&Ecj0MaDb4@KZ`>2Nx_3RyTHEt+RABmhSBWE2u=a%@r9p>m~dk zvIe{%xt{M}Nv#+0gTbp6l#;C#fCaS!P3Si}d%$XL+SUF6NI~e;aI1Q;zP-8*aKTOh ze$w?5fO{PQbn^({pnAT!gRv>eeNb((YYZMbs0ORW@_$e@&IhW!mF<_*T{5n}s`fCJ zmhTO-*k*Sy3%b)#q-2i4kOup)HpZUbQ(Q~D(;4p*M->|)} zv1r24F_Xii!1MK&QhaNyEW4Zfin0-TW!5N)M!?uay!v(*6|Kg|Y5=~u!U0NAH6p*X zwHh(YYF74gK;ZedUJS5676l`KLj(HJ(I-8N*6;qa@Xo?AQ8(mPil+*E)Y#loP=3Y>nXBqW#}L6 zrz@L7?6Rx=*?B4>ie>9Qbyd;77D(Wn$x;@da=KNmtVWrhK3|m7KA({hF51Qhn+IoB z7#`Z(*#6dQf_+wpnYrx=J9||P>!@x!#Ph;k`>x0XN>Rtc)78DX_`S&Q_}R0z8>qq? zt1F%eLkNXe8?1^}G28&F#_tv#+0yTdp&tx5U19J=?tkL%-4OA8P7X>D*4y4+gz~-R z(cZw)Fw1g=v4SM5P8fy9P+XE`K<^pR$9dl!A_HcCj}Qejz&zeD3rtkoSzuye&H@vd zY!>(}0%Jy#=Moh&;J?P|Hw(^1mYIm+Iy)0n95!d7iXX>(2cbX7uMbk|Z z;1h|G8Sq;+WwYRS5-2nBGp;l7cBYk_B!S{97GKK5lo5!!Y(RCY%1w&BSJey@SXc=`T;Z3m)A17xPc&p0-=hxFpLF z{1TrO;`_dQqoeZ8J49#12*r`o9#dCFOaLTIfjA!$3~vasE04@#0PLRe@zvG$c%KQ1 zLZfUyOztbL{zSv_9tMi@n!kajoKoh2>B1jQE<8pf7%CMobK0{|3i96uE>9!ia@#tw zZ#ETtdra$zLD24i;0RoyK&5V>ZbGBxsrM0tO8|o@IsdFFWYG+14 zbfo>~TgaftJt1j}q=nf@s&H|3k_@@M*-87@Zu_&7%z`_EBHQS3W>TI(6SJnx578`U z5XBN(YcC|F9$^=Wl$=2oOVlP0c{RJFnJQ;c#!AY3faIE8(rgIGuMeaSH{3cngGkwB z%K!(@u7RF;h7Xa8-g$-(kxV`G95d)PSl_H{`#Xbdo`zJKK{chBS!D*%l;))E9CL`9P}Z%`wr#R2fh)D$M``e@rGfsA6H7Q9!m= zPK_R>*l7$h2XoWRBnhz@^pJdeP0|cvxH!cGHLE@y7hs8+m83HP3{ta_21u~~ySUAbdq64Q{q|71%WnRgb zWmaui?67IgN`a^xUd>7wkTQb=cG`jR@TiELdT^fgIKfXDIoX<(wEjy_@!B z8O-pbuFoKZrLihw`kGazow8s8o0-NrvAknur$Knmw`Qk7dJem0r$Ky-WV6%20c+Xp zGzI{>+3YmoH;XQItb`5iaVa~3!kG3b1&tD{F{;f<0cVVBvr@nqE8DCT@I@h;l>)Yy z+-9YKD^|BzDPW5A?QshBR{A!B2C~G`gBdhX%4<2}%&Kkkxg2t4ro56<&dd~Qn?-|- zZ77P-?r|AT;YpcA1Ip0OEE-UTlvy;O3_X}d1Imyxiv}Cp(pWL(J?>l_jB_wIGmW0h zi)UsUeU~TC%rts0hn`t!c6g4_Z)TdcH;W)TbXT3TNTSnsrOhD9Ha15&`#fq)a5mYG z;Je@Mzrrd>kcF9PuPto`LHs0trXu?-iZd3vnR@KE*!Pt-gB;cqrOhD6E_HI0C?B9% z7`(Q$8RVdxr_G=UHo1*m@yRUBb&shcr=Ulz?QKGNcH=V=aN}S*{(q78u5p$hRlRpN z37JVUnOsO9i2(yd#MlXa+1-2hOa{{F%S=PhC4HG0FuLjKOQuOrchkFjGQp@3gQB3u zkfRX-1c(@8#Hipw%+VZ-7`Z574n~a_F=`$JPK1bDBAoAU)#YFR%Z|^B=Xvpbo_R67 zt5(%ot5&V5`qlMcB1{>p3g4JARuz_*nh>iBGqBmK!$K7zICxNrN7;cq zOHN_{>~#95%nTaHPREccX+S$2N2;R9p(+rj&Ux5bkSdG`%}#t&flO$EcRH+8B~H^< z9b2lR+5EK%XiA5ZzgpD#!`Z=~Lk+ z+F;Q!sAA#65pB1nsdG`q6hl|p?kKb33IJ+E&1G~}s!dL2;uSE|a=Q6+1r&uEq*lOD zM>Vk(kknB<>vCVR&m=R!L#?u*9M!E5l&$5cPH@>$j_L)Md)UBQ_9z?6QEkPe3aQ4k zKUGjQoE55qs*`qNs0yfZaEZ2A1ykLTrYevMg+^NiQK4{?r3#?hg#xwpDuil8r()SA z97<-rP2+wQP<2FlzbdTih;)EeaMex%h-*b3ESgR%RY6wECxK@otOr}`Q<7m82 zoE6)S(nEt&G^8F)R6Dv)%_$R{dWHRV*}T>%}nD^^U($fYUU zH|5jIdj@)-<(c@nG|z15-gy=5nJw+oJhP>Hc(Pwd`JPE1m!@oKT};wx!wN|5PX_30 zUy-vvBA|C)DoAiE8_*q`WY?yc!JVM2STN=&Ajb-7#+K- zz~!8yoZv)^)|V@wd7zF%E!)9SZ85w8q6ez-RvAQcg#vUsuu9$LK|=vLD_B7$TZQW! zq=$B8sWOfcC9u*yZhX+8!U}P&&)4HIl|(B?1$xH@p%@kTopX%TRt0(&!55?gzXvKM zsX*|K>UJo~77A45Et|+uU17>La#U9-6;R%t1+BpG{!nNIhPVoczaD0f&ffm5Oi_-8V-vsmui#X?*05X+-nAnJB_xobD7w%nnX zyLO}6WOWcF6A zeWSTi-C@=$&T<63MAU}H{rsv0aQKpuCjz>w9ZWa%b=b9%tM&kO?zNJ5a5uDS12G5T zje@E*aMZEs4b*BAY5Jmbwbj05lN$~nReKlI3G!Agi95LyShoVX%kje66A7vfWrv$8 z;JUS?QBKD1A#1g%_KG|Kx!PKLIl8L1jjF87=^&M;+Ex(vL##HHb`*3xsfw$Ssy#_J z?8sN$_(WvwKyM{gu@xClt3c;6l2K$!6D9?_X7tt?O3RSD<`jZwX9(8{4@A(x8p; zTmp2c!1_UiR^~|1#(r?n5*7*C_@7IF4i$hu6Cop4;QlOuidljFlLQjc-jcgn0wh6o zzt8c_!&b;Pc7$w2Y-2@{k=|wkAm%Dw8}u)-3fBht8(GZTc%X8Nd39fRkkL*BYXkX3 zR>9ifeIrYDJFD5*g1)N7eYJd;Tfy2{&CWUK5wuG0S8fW{2IL>q2@W)G1M`iH=527k zk;S~7)wrrB=55-oZt{tF8*dX?%-dPbJu#qn*QyIHy4bg~n>(DLx7pg}SFh6+^SfsW z^om=%{5m+Hm)+XZRj+LUzdMwnhu$jl>y!eg8}!s$TRJBd^xRuJx=u&*wL$#{{b`22 zHn<&U@6_;D1M-g5Jh{Iy6yhGY2@RgA=tja{!2(du%fa zIH&^@wKkIgh+^Bu;dGFK_YAA8J*D#pwKh`#E+}&bq1I*!AS#^OOaY*ZaT_B|aZsYx z2LF>&Y}>dO5RM*C$Nnq5M?3exrCOUAfKDLjL_n?0B*5svrCOVLfarotwKj7BM<;*9 z0=5(p92+DsF4 z9--D|n!pAMU?IsF-d%jk6R!9A|ZPC-Ew3{gSE&N)$iGsHA znQqtG%@jljEY;dg6^u^#+RYUVYqOVIYd2dkq-+VQE$DX9EkU)%F%`sR+RPS29EMu$ zYslteQ?1QBVVI{gYi*_oyk7&Y+Si7sXP{L#O4f?)A+uVWc>&mxSE|Tf-7tC1wAN-m zFd-|nnF>sd;9+fM0dDWIR8GS%8l0Nh4XtquOS&8Au# z^zSyDYHh&3?cUbfK!4l8t+fIEEOl`!qq=|R>ipjQyr5WX1N(WF2wF9o;AjqyQ`Oo) zexu?{Z6LpHv9y8vQ_`mm)`v!$YlHNsrYUF}n9uf+_UvkHV7|!g+tu2@e399^tF=M- zklE_0wZZsCMYA>#A2M5BwKf3XsLEX3?he}Rj9NQ%Zdzm^A_7RTOLn1TRy}nt<;r3UYwmWr|r7z+I*|Yl5{aNWq#Q z?J_l56PR75Mr*PNU#3QD0MdbW^EU8iGdBR|=Cf#V zRauHA(0Z`qi^Z4OctBoe1KH+z1sY}p+2(1OVDxI^STuo|%_v19nAwa{FvApD%bXzD zoRlfFw)ngO4)ZW@tZX1`K2M;bH3&AP4Ih}=?d0UGVDZum*qTdkFL2w9@_s;TC5h$+ zW=%rZwbvU+?KU( zen8cfZ=SCFdCNrlo{&Fpo;+Ro^EUEtXNSyrGbKdj%v*|zS1t(P)Kuk}gpxNBZ7gId zSSY-;%{yH~Y{K`0Pg9oh$?ZtbTPb^aJ0{4R$tBQ><}pFuPSzsa-TnRoLUknTvkMT_ zQ4EI_Fsh@-Iy}shD~hAcST{dVK&hT4Q3C~>>PeC{(49AqCplqxyFi*4b)_0$SvfVS zBRNqeQ;^9?$~%k8;{@eB#Zf}3@{ZzZCaM5eJ;`Jh@Tw=7up(YP$a){W(LfQY9@HYC z5%Oj@tPFH3JQtUcso`M^PXU8t2hNndibE^7$I)}r?$qgfdUde%#&o~8MRDB zBba7xtQshwP+ukyrFO{{#;}M!r|jK)^e!S#2=?8Cfg3?!3B6~(W=gD zT|}E15v2=YGwWL*6)hpf?K=qrtm3B4E9r1FF&Zc$&(PuVQILH9pp5S80s}?V87MYe z8YtpUadcm#7%0L{BiUCe28yUtBtBPxB}gho*z|5c0uPG^)! zuEtA{Q>N5P#y|;lT9q25SaiNyMUM{Z%u7);1uWoAHA*XB32Z7J!6mS%cnVkqo9=5< z14W!^(GpuIw8djrR!(zjTD-&-s@mcuwpdy^bzxN&u?LC>(=Bg%TCpo6AID5wzG9sl zPv#rqS?Ubj^uTC^{=i)f^ZD}iKXG_!gzxbbfF_@z80po`2o@v;3P>~1H2EB0Wi+)? zMpM4LMMTr5e+od8=tDI`S;t%eni&mtEQl6FSw0(T3qUjEbHJm3GWn#26}bQ|^`(uh z%&df_!XnWMU4WGdQEKKbB4Sd$yh#!wISbG-60L-+fEE=pwyuaQfTmP#jEzo=?wuSp z)JioKAZDH}(RqhS=~geSg0|ytc!p)rc66tGzA>fzeF2JAD;A(=xRgH5vp4xph3jz9 z04hMe06z0{<
1rKcu5fPhw=M7eJ`XWqo?R073)Fa^=k-lKVVRy$D00xDmWwTr8ck z*)kgBedjRK>k%Hvrl=fT$lFYmy++CV3wicyDW_go8zr744#z9+AdX_Zia>PAEf>{` z7<9@5>Ut4>PC0yBF9OghTQoQ6MGWdlPJFTWwxI5E70YiVm#b(1xAs*pAW+SC$M^Bf zvh~#U0tC&d>bB|yB$`t3@B$na)h^m-2&fkzX(T$n`H?6gDrdf3h-g=59NWBYBGIwU zTPGokZQed2$`v5wTZsr(O;GY4B1%}69uWXPJ-V$O7pHyJV{LBb1m;yvg@qFc=4iL@7YYkRH3&qtEEYU#FVrsq(S7)O>AI%wC zMHkA7SC3LsFlRoseM+*!E$z26$PHr)q(g<#@^qtSrZ49uQ?Neo~DMJeiBs>3}*oG9Njq z$U-qWJgC@0A?eP{FIbAqv*6gA`~tXGikDx26w~<8s{w%yqks}i6hk+_!xBNbt`06N z5wuEG2N0GB)}@04O9Vq;EHst~*3Yxfm=gAJaV#pFFS;X1;|6%IoJlG-Kze10bZ&t0 z$`mQx0Ns@-(z*exD^sL)17Md@_D^yy%go#W+Lb6y>AVRni_Vs ziv;GlBIHZ%CaRVrUvjr$HZ#KPwgI54VrHa#=>t0>70S<87zUpP$S%jx(=-4zfOaJs zgAjy*6_m+Frv}T5RatnSkxlL@io_HQ;kjWVKwT-18?AVYvS1433L{wqMAs&xUa_n& zhs%jFEHt*si9R5@646Gs1}lw43cU|G%JxuGhEO&KE>3)fG5j#u0LB%C*u^Ni#0Ds? zl18`K0L7JPexPcAxK=DlDP_uu+6|;-^8dQN(se z(3saKqB}Sw2ACzhop`YjKb5__R zc9nvFgBfhh z(pYX?@ZG3}&|f}!#G)x^8tuP))e!tk5`gTguh z&=45Rr5Ayf@`eCmLO6W*s>!PZnh-3kpa}#B85T%DCj$-whgBqii|}EAbjUqr(GWna zA}Lqi1X7V*c!M(#+I@tpAlsNaJzmf+2z^sUfIXrM|QfS}f6gMGXouRuZYK zL7~Ps{6qllMaVNr^? zgCJoALEHogD@ew!Pm;g#^nK@K+*Oj$*OhHIABIIWLsl-QX}vq2z(Wk|Ejhh1U)b zr5Ef=6$oE=9~9`z5vJW|-Uo&F5(3jKeR6$JV6Pa>BkIC=#c1A17sN}VHCKWQQ>8&6 zyb?tZKMo4wl_+{|a!?qrMA39@P#CX7u@^80h4M-y+ol{8$SaVBymtA*OYb2*WQZgI zyiy+1PUx;gG3^BHN))G^*7Zsxr(FTondw-U94sI^7q1uY^EPnt)PdIa3L^H6zQ!s+ z%X?*#D`(jPi;3SKUN3J(Troj!gBl!@%>ft$}mtOaIb3+R9NIQGOFZ_ig@uKtcoWCU@*@}A8#E5 z2bN+PqQQXqX!kYPK>%PyyfPGv>pm7c2>#1wuy|!C71z`$m3H*75*G_=AC?^i`Q@1_ z`f9#(0P-sm_{c2r#nS5IvzDPy-r?jGPN^KL+2PBs~! ziBKr9BQ$|a&XLg76PunetW0Z-e15E`hjs0cGs5eily69lISkgpxGBmlb+1D%m3kETYeFC5x?3ZIG5;*{W zxoD>WuakEJ0CSX}fzb-Kuw1ssO1^?Ee7-;}Si^nx7z;Pe6F`PJp&8k%0z9lDk6!I_ z7YyTbLw30f*74-sL3Y7H8QF3J8mnaQ=Zm}YVW49hvdgV;H0vQ5L1WRBS))ib)pHlH zXp_M47rv-UVE(BU#x_*XUxP|@c4s?7npFwR#|>^)QyqVUooy1B{sup*5?DJi3|dX~ z{M#9j>T&#w$ZQ%s!WU?Yux$D@Jj32y0HOznr(eS>^4%pQI{g||eG!Kqn4Eq!UxJ5F z7;lZBj;nw~4;n!d3Ru+E6%j5<0f_k#ScNF!QBP7qih$IUOjM!ho+Q1CkW?g7QM3y9 z5er;Ir7@!wx?qh+ls1MS?B9T-EC<0 zS#{_=C3^ToJ4C+gTwt7jl$`{9r3Chkb=e7|TFh)Tc@bE(lBS9SsaDeDM?lpQ&3)(H zEyIzbY$d&M%EKUT$&D0cYsC~=UgN7yWt+tmw&O^Wvf08{=v4*)Y*EiZRxtpwMY8)e zJ){b&`7hZ+ESoK`71x0-eZM>$8wp=z?*`VE<5{aBN28KrHW;iR9a1L1ZJFJnVPyj0 z=1Bfy?%hD#T)g|7JL&uK@%o@Uv9(gHeSf|ifSY5(4LSSPJ6Q@vhhkrQhf*l~;*q$NFkuS8)c12RY+%DI+%at#@ z%jHS=;#;oK!$VHJya6m*q~%SJ<(pBt@@B{~8j%imXq?+1(W&gr7oRF);$I*b@YYAn zDhN~ENYV;tInPv&NOY-rk{!$wg>JP-@sj9S^Asx9E z|2&aNr-*$bmh6BIfvDBad`=L4B$n+lV=~2-bB~3bx+khKX!$eGQxp|KyW<6l-lXle zTqTp(<-cyrSF(!HdMsbbFpg&VN_JtWQt24o^i{KhGCI;3s9F@wtID~~NGusfH)tZY zWEtA6hzJ$5&9h|zMDZodu+&0y$taA%Gb*+)Y@U%QDm2TZbOzDsN40B7x315d72?%l z=;LOkXnIP0*eoBfbqwaM`l?x(pausl%@eepPjp`)dQ7L9MW~esIw=XEzeK=;L>MR$ zY^JJDnB_&A4`@8>0ghIZc(WK{vGA79NPyCcd=vYPDZsQq+%vj+YVX+45KO_Q)kJ2P z`hr;%aopuBT4b-W9UrosMXQK7v)AV=S|$)JXURHyMp0JUl#F8(D@DmPj-)T>>EmUk zQmFX*j96hDZci&)g=L^f9Kf`KBZV`L6?RcRC$7RSQ`Xp6M=kT58Z&WKCV}L{Raph1 z6IW%IDX%DiwL+p-6tr3*QhyX4s9HslqJY#&k|_#Gtt6VFz|=A^Dq3Nh8Hg@t**N>7 zcY{&&48VD}6`8vv@;5+g714Pr__Ug+oFLOOG59#Rw3=u+%XZrDd>l|($|hfxxUz|q z$$0^Yv@)NW2v}M{R9yl~t0*R}!Y*=St4ok+Wj+%JHZ2p)$3dr66o~_%R+5~!Dysw^ z2dh@(42o9SCAbcVwUpEOIFPl9Vv1JS#VVb)uWyf4=967|L9k___win~=_`pYXURB+ z_L#r)vS3@tW)u|dWy!XJM6K%+V^tK(R5A(tRCoHGSUHpRPra8WUDAfD%(UI2R%_Qi?-!l@)4G6D+tD|Y!9n9Whz_4 zMm~|sws3w0b}b2VZpE@}6-7F*qhCc*i2$udlB;4+YX!l$m5rb}G*a0NR=pBbw1XY| zB)(__`%bmK?UfhLi=@mkilx^fQKE}Q*Q3Ei7mMw_o?HU0Jgp1(?JZ$e;=#W9a#vmz zaOs%wFP0YUJ8pzxSRmP`IPvco`1g59aD(tdbipt;F7)8#^ z;%SN5gv(Pj1bHTSUzI#XD~#!SthRu9ODNPx+P%@&v+|ORq}^A2JF7@y-^wv8y2ltV zXG}YWMLQVDF)Ug_uOvomln`j7s&pj?>Z#5uB^Vm1mbYjbPqm_ykf?~6eM(p~lC4N3 zKpM%8dC^Xe9Bjq%Y2Lz-?3h>C%gpJR7u|;i9V}G>rS!qpHK`vi;ZhL;qTt{_ULAJ&9P9ZRU?ywU4Q*mFWFZTgy3J`>R_FX~fP#dvvD33E=2@Srd8 zMI-P;B+(_fNwkuez~;mrmXPeFV~9l?M51La`T^Aa9M9D&$>c5CAfsC5qC<$x28qvH zvPGm?=8{Pc?P147->)i|ig?RVGRh%TB}WN|PKcl^B`7Ki-LgJaRT8p)#`$Q-8xL`9L55(+hfq!boO_l_Zxevny@z7drwu$MQ1B8g3e{f9;;>v2!O z-^C%a84C=;Nwkjb|4G`ayf3#7ecJf;ny zw@esQ(*kf7b4cpbxMzX3?OqsDQ4VSLLCP`Tj)@DrZrd0zzXsU+zW zqWZ*KX)>BI&6O*o$x`5uN}jr}1sF+aM^;ytn{!8J*LQ$Mit(+ZtLqy(fFni1(hAYJ zq8p#()s<`cqI#NqZRy0qGT#?Z<1DTJpnI8N0K%g&e3vZRaDc(=L(z4;}hgc&39z39_QnVsh}AjnJY1Il$Pz-L?b0sWUi>h zQLo^LLPAC6ibz820emPVRAjDjB*eo24TXe?%oS#Fd3AP!55S}e=T|q6EHCh7lQh!I z6)3qP%^Qz_8lSL8Gq`9bqkOUr|LW};_rLnOUgdw) zx~BavV3xBtO<~0Us&`HMUmR@ncEs0*y(Mw+VQ)(ud)QkOe;)QW)GDm2F?@H#|LX4= z_rC_ZUgduw$p7LEqlTA+`>E4+^~q~Rj3n+ikK^@tVfd7FV~)TxOmtoDH!o4q54+zy zvqTr=e)FsnuYkDUJS)}L>!pDW;S_Qsy5Vz!01wuDZZO}$UY{G7r$Zse31Fv@$Nfe! zZ*aKZlI*PxRy)}1?G8GFzfXhUT1b!FUSA_1F4_oReaGDUMw@&0b4vuM#lt`LyE)0D z3j6mm@LMXVAtp&PJj^g3>4bD3-RGzGVPK9#1?|FsCm$G^oE{&V0DBRiFe%0db_e#8 za&)qJ6?leM>Jqiel#pl4K9ofJidy&>okaC|%=joyyUQ9Xr;noH#8g9c2z-h?;pAg< z)-`bQQAwd^TolbErsBhBOj33JJ&5x$iRpMnV0l=B%lzjK&i)B+)o+l;ESCeUths#)lI4cyIl3hKx|i z;f!3)5aSE!eXW!;WQ0NvX9`+jvCNJ@Q`$GPH`kQ(SfUL+9cNxWE{wfnW1zRT>#_kb zc*j{YSzQ0F%lZ{}=AM{rVAo}RE?E{=-*s8tl1;^Aja`@ZxMW$};I7LW7B>=-^>xF| z(w)uo@?Mj^9wK{{aQk$O>)mC^&Ya1j`gU2Ov!=#EMvBm5apzABhq(S-y!^atvTtW& zXSe1U9cPWi^yuAVg}GoPrf-mbQ0aRHLWb#(p@zCWH8HthI%KHz?BdO4W$5em87`PR zw$@x<*w|cmGZ?H}>k9?Fuyu54aicl6y1BAp^BYl7+?nBJBZoi>n{yigfm;8rR?ooE zrE8D!&UANIch^8|=kn_H7GTCq$jU>O&6TCq74aEBm-?>Fo`IG<{M_9IFxk1hOqO2q zD_~i+H=FZI$2XSxc8oz$dA7{$SVxF{o(8c;Av3r_-7!Q)y7n~V*4Jm$t;e!_TaRV& zXPY?7Sc?+RSYO*QIZ$ity40(1X0y4OX=T--s7#(ko#Rqv%q%u#W)aVE$(q+UTkw=n zD@~ftBDT)?{p|W;b7S^efwS7Kg^@$e>7m`twb}XkB_13 zb{W0rn^_rlu-xp4xauZz6i*g3b3os6G>q`qOOsZm`R&eI!r4|#rSe_8oT-sPTrU{?VyEZ#_ z9maJWV_~rM+WP9XGzvcb7?P54ZFzRXiFaP0IiF_~smEuRSs^kf(bO-HkFKv?A6j25 zqS~r+5N3TorS~Lp*x)N>xoFKx0p=m)D(XagFy-^{u1}!=a|`n{2EG6lDC-MqICI_$ zcx%Atpto39Uz`oij|E^)kl9+;2qv+lv1jnk2fp{ISv!cW#4O6vJs~JGQwoi#vG1vFOXI&CQm2Tt0vhWgJ~{k$kiu zYp{FA4@|MXv$|$!qr^Q2n$8CE3$3~JrL_&3AI!4;hy+*BxLQp*!{vFSMQh|~&DH{a zHeXhVX0hRBqv=NvJ~0qYv$(l3=f)>rH)Pc3DuR{VP?yr8#=G~;G_T^k1?S+&5>2G& z(HI>Kr0CdI;}6$dl|MR3E}_viKvGK@;7AyqMhT1KXqGHGk&?yAHV)BjIa1;Wh{^he z%{3e_X##zGur`{{h)L5HF&awp{g<$2h!$a1QUV6R%~{4k=fcEzjPG2S@ca^rd*=0 zgn5>hmo{$jzDu0L72a_PyC&XTURb$y$Yk=TvF;RqA&dGD}9 z0>S1t=NOHh`?;8nRbd5Eg_`!0dFwLWh)2TK27syAnpzkZcy5x4OP`?b3?YtXz#d2p>%E1{bBLtq9uNjM9TnMT6NEX`K|*p-$o= z&Tnax!Ex2FCUauh<9L~1o5P%>x3vhqwds?}pTq1Vwg`teNvx>_IhHq%!68(lMGE)x zIl;h1>8w^9!t`0gG}R4Yij*rl4|iiFam+GTZEo!bNX49BU{`IrL6Mk6O^2YlCrgM zty(G{Bk^)Pr1qT$YiptH(wof52-kTuNoI#aL$v?|vtGwxN7C5*LdY><8s7HzOphzi$Um(=xV&Z9Y9 z>LMw9|!t|PFE<6Wwk#scUJf^P=+vpUqfl(|Hs{_8j;?}=Usn)>Q zWX+8sGL$JdlDJ;fjiI4{g#^hc8;Xl}X8W(uwtAeh-)aZagBm0LjUMJ(&Jn^yo=d^8 zE3|q1B9MS|p-6FV-#oIQ@gGvCNF$kLHTTcxp@2qTV9j;)+Kd?LHRHRvvc5_kvu30P z0{DkYwj{09#SIp=8Do~#ScwDo&o8V2;z$=P;aH{Z6=E=nW8%jJU37HCx9Es%3_tS~ zgW&l_rS_5LT@PZgoDq-Cwmh0+oal{x7poRFLG@Dt^a#12Y_71(#W1hMmeju@plqeRBle(1SG`x4EXUT#Js`MmF7bbOndJK6|}Q2AZt!!a4SB z%BgLDBR6R3;vq5gU=`?~RZ#SC7VL>niiZA+&EpGn+bl3~Dg|nAAfHP!N0};iZp1Tu z&LiqtW%9EH5(M`tBnZ<7QUo6&g?fhoLt5JOiT3Sv6KA}iWVzlP4tZlOa$d%3mzYWG zWUfnX=$2wMpT*mpi1^SJka4|W9P1+4%nEu^7#b{71zVZ2tqWNrc5~zpbA}At^v3=U zGIIrhwI&sAg^5pO1f^PwrY8(*5uUf!=Nxe4%Ll>f>EUBss8pq!TV>9u+!-`qoo6}O zHTYTt=SLK)^>I>$f@?l|95++btwn6ESmt)jL}d?ALY;|%6Xl7)<&$j66KW}+N0d-a zqF}G&*u}H1xfd-6I^Mw(P=+w971Fqqt8mToDua2e` zhYM-vkh{ZCkkUeDUm+&4}Pb$+ycr6N5#%n3%1J+eAe`_6W9MKmLb`e3VHS=b~lz<*cbFbeC%?D4(Jo` zTI4tePSzTKU+hjC&2_zs57qACms%{K5*yTYv2Nj5@xd8f{IS{Bt*$rMIjpe6bXy~l zWe)AbB?@G>HX$aVSdNb6HvEKLL!%M|M{x-l<``BtZtzH(6C0sxEzm)a+5(3|tk*&c z)>=b~P_cy+*;=63gi3aam~*MyX2la!=v+vN@)iu*ni~DK&baMEZk;iVF-`3*X|1tt zYmNIEP_^7{!U(XC$cDCAnvkul_H4S9@)&Npb;c0x-DGAZXNeKig!y)esFA{o93upD z(<}{ASW!ZX1}V%BLIeqNT0ys}hCa{Yu^ZnNpu+s}BB53M!mp1LVk&%{Ut1*9x_*{L z=b+d6YFG(}bi$dzjrD|qjeZSL0fs|2iWATo4mV~Kpc!tG&|FNxRT7#zDX__cUog|k z!nJ-K8_Eij-DHCRgQ^?k`Mt&_zh4jZq2{Jv=?RXd zgDPy=`%Q7uExcaGpIs^zX5AVh@z;h8aDD?`-7=zn6Cb3ru<4c(iEmxEwB~oTm1=3D z+izgIP>)|mbRjltf+%{tU8vtL6uQuWUmA3wx?dS|p~eo^LAcPMUjlR? zo-}g}-v@hkxMuEyy*pg1_QAd#t_k}fJ4wMwP`0Pvuk?B9fM4YE!8#vf_tsS6hF{t9 z)Iqy)4wjq$UgX0&lZWpI>l;4f$$}+ZnCj zue3SZ03S@sXm!TVEX1;1@L{+NGMZ&HYSk^KIW|2#eih9Jd--lhlDN;Wo_T7`FPr&b zzh5x(!2!Qc=7V*=O6G$Nzc}WDgMMYq1*uiPAm+o`M@+5MOE^)CiuEgDK0Oqf^1WX6Oxd#HyHA{F1Qfp|chp z{bOIPF#5-?T4D5$UA4mKAG>OW(LeUq3ZuVUtU@1!(ci65`7rvs1u7rb`-HLERt74b z$4pX=@*;*E)&$?tD2KwJ~xAfqrw==flVJq^+lqh<{UO?Zm^D$aSMg8 z8IIe!nOg*h#=%6Z%DzNyR|(c}vQb{ z2mAku4Yd>&7yV)gqQlx^uLJMIxcLW#iDo{6>e)KHcswU{0o$|#A|dZS}|US^}-=-!H5U&!p#>!wJ-2H|w9 zxuTvG%7mzle%(;d3S|VRu)AK`8y#GN!pfKTvEJzItQT#rT(`nGK`?D7qgzCB&f{06 zP>a~bCvny%YKT`WyytE z%n%~ntm%ZmB4-1I()sIqA(gv(>P``f?85E}s5Ki!h6|4FFi{%g5?Zko%^n_W=i1+M zV$3=s_%ow^n~$M6$hQf;&IvN5*2xd^2jy7cFr((tu{>V0MQ)I4pCT{_x^cG72<8N0 z5VjPZCSkRe3p>-?=8Z+08J>zKH%6O7Q^VtSUDg{lH2JviGFoi&l4LH#rO1Yc=x7UK zb5&r}XpoSH3=}4sqnOE&qftVxqibq->@9}v8dIWReF+Rpr&V;vJK7802e~=q%@uZP zEMtss%JSB4`f?ZR)s4uW_y+bB>@d8xcFC9)K2&emx-mKVDt5h~=T)la=oen^oUIv# zqk~k@RSvpDJCXM-*Wi+o(9R*y_6Du(4UY}c+K%gpxt3P_#7D7VdC1kdVsu!T4KQZn zrkOJA##)R&4RHc*toQu88LF zF=*$RyOt~_ffUSYo|zJ~oz0OOZS=V2EMgiNOIR>UvjrTAWesu^84DXCeNNG0u>~)@ zQVya^ZWbx-4yuRvL?;K?MF@RK<}Cp}IDDftZnrLTHb$hVg~q|_85}un)|%zefE&1# zOB6P8*(cK$y&JbfJZml-dSUssU=l4_*xjRdI`OZ6XD0+%?qodm=PUc%9jSxkI=fCc=lCn=cHskW#k^ie znRI0*u=a2yJLQyT?anVB9G{$?8JZZMel^`4%VXBxC6PXN5F8WhKn&*^?En?!GqWFc zWm%eMX2XFHOyrJ-j$>Edm*GS%`!zZ>V^WCTTysgyFA38^R$PpkEM#0-$+CL8ea*>I z*Dr6iiGVwchgi2#JUpx;4K{wsxe2n`Y`0vDxsjFMchitdJIk&g%P6j!HP}t|&@DJm zBqDW0C(%Lem4z02@hvVN28N11vbxUk(s@o5v^H!ATk31DI2X9@9=WPHe%0RQ{>^!Fi!VVesW}j_I4miMOj$#cJHP<8Eg95ED*a$}tpYeXWk1aRtnVqL7f? zB_OWb(y?Jk1UK7ZGGyoW0uMv6sb<#y2S)gw9iOnxX*c`^QaD24ce5Rk4n*5yat*BW z8_x2n@lFKux$bm=8~)giQuA<+Zq`{{D^_;U^o>zCm`p%hV8YqQy7`bYzk%pYXF$(e zimm>cgS21vf)U~^V+m{x1Pg6Yjee9CSFqd~CvYOc8^?i1Uq?Cv!BH)DBG!%9KC843 zcN%T)+Kt)?HI~>7+n(aJU0c=LAq&U2a#ji-QPNB@YRHW{I z`W+T8%G;89p7XmSK|6N>&F=Eet*+~Cik*1z6Aq;cJxLOk_9fQ4-cYXmqufJSb-*C_y~b8pe`)%fhWD!^LabuNw|0 z_6>6qe3sKsUMN9#nPZiyrC%U$wuPddP=Mz#E=j~VhlFBq?+808F%%3HPA!?ZU@Ep3 z{p(kqEw8V?g;(i)@w}=X(zvZgJF5gG$0yn*Edcm z3-?3{k^bzyD+*~nZd;q>kiPRLB0bo#@!Xvq4_s1-z7q-pCC?##sb)Han*s)d6{{g7 zDG9$Rt?T>)IhBADEW4vuK4mPT7&#GQ=h(!eW<*z7Pj^GZNq0H3`{Nby@&w-D(8k2j zzTM5?28+2?XbX8W>i5w6Y@^S+g3)Y8(QPX_16u4V2M_D)x@9~R(_o(~#*A@9k#VQa zK2kAmkR72IcVJe>mJ#Z@BeCDBOUB&J@_n?TUO9W51=d98K}z6EA~I?ZYK=Q`_0koY zseNFA<%vw^{YPFm>=!f4DhemX^N^2P(^+SzWxex4kqRDk@Q>*-he1@07wmhFgqtB^aJP29wO-lbav|H)nE8 zl|D1{)b+gH;J28K{>n`*sQPVYix{~97YdzeQLUbu-*~p9-sI@&b|-R?+?L7;Fo{<$ ztWVi(Prnsyi9^@IYp8BD*zm1_o260a*-a=Kl+ zM5=^tPc%jgUJUjaA*&QFlm2Jueeevc7ciw$wM4B;AXh;luKAuUrk#H$a<@K=cC z;>&|jKEZV%#MTZvQm*-t%Xb^tm#6@aUaQG+s z3FTF6$z0h0lJgaxyvl4DbKwVfF*Gq>l#)>sGm5H_fNTA{xS>groxya&LQ(n1!EQb# zMlQ>+6p6*#$gyN;6)0V$T}4Q3Ywgs-E+Jm&ws0cfCft;3eB>~gIej=p{;ya;9cn;$ zHbl)Yh4myi&MKKRje{sL8>h#QIxkgJP&wc(#RY9M*wyg~*Q{*DmtZcYcl~a9HwjQt z9p~VdB2#GM;g+JUaiwr8iA>>^qDyeA$k!Doa*!epGGtMnr(a<6y@Z{n_OP+v&9i27 z)z3`s9Gl9hqdf2rWb}3qbKILlA%NV!+Kjm zY>i_A z+#a6ho8T?HF};O{%`I|#A897|Jj8z9$vdpK_bgh$@qIIFlI=S*PHJ!Q=LZW+F3h%6 ze7%fG=?8aFWW7<<9TKD_VmFedxiLM2HPF3_mlt?iYM^)5;$=Pd)YA`_@?gP%zFn=p zUe2<6L%Z=7JGW-tdA?$8%)^gQTl>$8?v5bO$)C zt1Hml6m+TUyj523RqDQ&`rKw~dEp4^H#aa`Jv#8YO zACObmQ)s#}dA)q`~gM-=b?nO{{ zLp`{ZcbVox(AVZBCkJ~dVT&~fR`UlMvR$KZ*L4Gp+O89Rx~_X&P6b=KCsn^vsq#3C zXC-Peu_L}NoxNx649=mO#tmc~;qTzCRzqpAt+Q9p&c*fBWA3#Vi|Xm>*?CMG&x`~9 zjuT(D77-a6_4e%C>6BU0B+(hVtC#aPSbRm0c3`kuDyzb>YIu`w5=AQx z_EcICvuad|W>nQVJ7b2>G87pN6bc_JEw6~o%vIe~kx@5XEbvwpRi?GqL7HxFE!Lpv z94pY(rF~O<{PPQwxmXT=t`4Xd60GuN_9X$P4`oeRao4 zzJ>GF@QW%&TlRo_5|Jkstqd1rv{ifB zO~hVLyf7njjd|gO%gX3ySue?`@n$jSuVcDk-k)To;;II3w~w+cuy1PU;OGd$ltT8~ z56_HDSroq*kFxOS;R6i#S(w-6LpI)pj+_*&q&y34vY1YR4KxUuWqM2#CW_juM3d2J z^w4jmb|3*Q6d@*l`T7EPS`AD`U(YTwkd{{iC=p!}-+UV&iW9_*U9;=Gb>4sEa|ES- ze7#X&jZrZ!@X^b$x^}D?T9HFx?8)YP80IT=((#QGE)i>ayyaB1ZFL(?7 zqsX2HeFy{6!f|r-k&Bb67N^F|ez-@O$g2@w=ctp94@&UiPmZYgNH3g}4SE9~>4egn z8-pBVkX&`J5#@~OHHInMjo+yE)OOW-c)XJ1VZBIbp{U^e@0ShoeVFU_8ESHOj=j@zXXjq8%!>{iL$dYxB^aq3b zObjn$@|;kSfRx707B@NHumii3lHwA9JfNESf{(|Fjh*yIe)uD0GTL7p#^7PMr_h|l za}I*7vChD*UiB88Cl%7*R6QE!;G=q}_x#sRMWuCjNk!GNdOA~A)^MSkGqTEQ)S9!c z>q6;4y9WCyFEC}NyDcQE4b~l$i5-*0xw2)u{+6=gh7azwx;@5v&)|R64le8M;%zEi zmeY^!G1A!tP}FaW#Yv*$$9GjZ#y@2pem?k?Ud z8`#Nvs$7EL{Kqq8>FzZJl%b0}$L$#-G^%;49$&Y!DpIoMEec=mcyQ#cCR>rotn%}5 zzt(T=nJsvFxXxLNmiRk;SSog+lDbgeXy8ejR@d1Uh#{TIypo7#1s-J_^ysvv!YRHC}O`Wcya zGPOQ|a=^|yo}wr@MG#Ic86q)rd^;KCXd8XhV!c-Lor)WhVo&G%JsDQyhu+z<4#FZ` zuOUxk-P8|qbvE6fp^CZX5FMNQq`fwNsXt_1(XSJ&Of3q1y;0B#ifW%tC-&w4D-peL z)9}{oo5^{p1vctD>x>oDQU*ddJ+(H?o*$&%U3E4N-Nc8PJ?6%&h9TpCZbp5PUV3rk z3xM6aNKRDoXsb;#78&5h|BN^?O*#~Lnvo~rEbtfR}pWHg?8!2x)zw z-`?&f@w!iZn!Pipc z3nzF_223PJ2xnBnTzfl*Ush~njJjKlrU@bDjFhc7p0U`H2qsP-2t}N#Je0uOfuoR4 zp=~P**EhL{N>S~x=WX`fK^8uL^Ll^V)b&kt+A54qqPKb>#$V^{gT2nmArU9&R2w+G z)H5ViEn*$lR`%xx3m}E-2%P&sh*xMWSNLsA>vKi7_X<>*KEq|k0>7<4lizmN>pOjh ztw>wvcB%Bps?$r?sYQ8(SNv4D4aGDM*}9=Ox?RGp8@13g=P?3Mo$JLX7_KL^U9NU4XnAEfB0t&)O-~_g}2@v+f$-| z=Y&pf_rk{RN#09$9&&CH&Acea$K+EkxnE*4PYXW1RlwK_is@lLen4zYlei{k(c_v} z1=9ITdiaKxt33pI0hDK%%gsC^H>8VOLAtSyi)FB$@b4i`xtEXUM)Y#$m@~meNeL(I z#gr)>mWX=1DA31P0Ul)^W>t$pWBw`Jz-0@w8t-q`d$XuBXzq}*m)OaL<*T&h6pESB zry2Ik^ioeYR%cs+5#0u-?RskfZ=oae^0(s`^vb*_G)Y3M|3VXtRv%e7vU%;E)z#~w z+gt1OjJ6%+oS!y|eK@L`ZxSksdF9y~M>$_rkaZT$Sd63P-&20Z1 z3ubNAD|fM0y0k~4$CYfcrGHnwTca9F2K0@pk}GUAY;JCo`|9@E1?vewE|!ZpOUB30 zSSxg>Vu5c8aQe$49PTn?aiQ{Wu7vU0OH(z9`_|PXj4Xpz`DdTN4_JF(Ozqxv9jii0 zu;m7e)X#Gr?9mz4qYK>BhlTMtJ1K<{Tcg@Wuj-a1x~r7x%R zc1b*c@wQda!2gU;vPsHnIx(<%=yD2!evc{o{r?q$Vx>?k9xRa<55r0}f_SXNQbfQ? z4jUQqJlac>Rl02M?=ANnE!|N>gE<4N^A1`$Pn+L7c8mugU9a^*9rh~0rOUN@c6mPr zH0QX)FqN&|y5-Z$ms;zymk+pP^$4!c7@wLPy1d@MW3s<)MfMQ`F~a=Gtw2Y8gMWn@ z-{NXnHaP8sK@YF%X}r=%H|#?%u>gmp3GRP z93+B-jlbpX5$s`j&~;SpKhuSG;QfNTb}P) z1&6<8*ZEk1)7Sf#IJ&dCp5u4Raq~;$MQc6BGxF=&i=LId+56qLMU}Rp24fD8>AmiT zjZ;lauix2*Rn*2@dr8gyML&CUA$4wlx_>Y_aBhFP zKijBF_ow>@`54y!JNwi3+ui}NhQ@CF5{-y`z<%xe)f#RNp;cI08=5$fMYzh@uv1QI z^i)LLBb}b+>=Uo#Xd{*_I&J*;D&l2IodaY6{kjS7-Q}%u}H?(K*@-*#w z7=moK=7Tn>%kK#|esX~AK(y&&zdNAoVK?X8p@jd%8W*Z6m0!~G%(bND2@a+WbOX~o zF|KCN<0z|On@^mP22DxrPtMKhLC&y+)I8q3W6Znbwy@^z5$YMvhO9B++2VX2v+&%p z4<1lZ*-Wdr=E61>v0}Pw zv$qD9ewOwx<*PB)d$|Obx0}^=%w>J6&KNqe&uelq>v~QJFKtkwv3}N~FC~>+ zEg@!t7jqfoEH0ZG{F>*t=(-SC}&vrnhObg3!FB0bb-g?)}6T1^F|2T_u3Gkw zz2cUXb|qf$tkVK*h|x3&eKrkUm7@*+9JFmA-|i<;t@pea+V()(ljHKr3sau2{CFCA z6&B2-zv{|V&sV)6rA@p%7kVVM%idE`+Ww;{mjkqbOu~WNQrgwDqpZfJK9{DP9>|5z zEUU5Uds5mALvkiz=BAYA%s;2JgD*{K2mc_Y9om-C4u3eU=~sU`E$uaDrMmp!-D#+~ zH4V*n=R${53G=xU&Esd8C9XZv(b4(EP@C7@3GLL-8n3+<+6R95eAnAtOZhsV3@MLZ zjJ)eYNy#C<8xn-|l3H-9Y+z3HY@>o=)wMhQRptX$}gY3QfUP4oTK zi&EN~Po&b{{4r=z&!7Hin(}ARrSqv!hPS+c(AQ&VjFcTQwA|70?f(|){Vn+rW58E? zf(75YmC%kD0;GKP1u?XoTIsFQ?5rT+=W>4ib5E1+ypZqb8G$k`KmS-q$5;M6(0<_# zLXXA}x+I|o$ai|AJsotZk4}0H-z3sQ~TD1A>Z33bF^t_aU^-0`la(@zK`TWA18ESpxt&F zp^IYZc$)IIpUj2iS&`>$?;`YqnD4WME)JpprZT)Jgnm(;bx90K>zBmPlO3I>#Zm2- zF2ZKN70UNZwT{kHzAuKT_fsy9A=>*XeKB+!p+*cb{+;<LfjdB+!#{zQ;)2c^w; z-a+fnc;11BWIXSXW|8L|vTiKVJ4fL8rNHx@;u7_I=N&1}cix-weCLBH&v#vz@_ZLo zI`ex1&v$*jqw~~HgwVTlTEBZOmGJJHQVH+QY5nd;phfH6`I1!Loex2aTEFMyl;?ZS zO?kfO3PRBm?|FO5<-Mdl^U|Q_d%IJf@4Y7F`QGJ}=X-BXdA?VzBU<-;IeWg35%!eN z2MO=PN?DD)@6nX!`<_a9-t|&KvFvxfA(e2Kyk}S7`70`Iw8XF6LMZy#ugIR!=YQpX zLeUbxLLHs?vcTp2d!R*m@4q#b_pA7PCgE4_AoMRG->*`J)7}t5cXvRG((gWtP?Uam zPQu-5(4sDP|3ND6*KS0!THyI>x2L}JYbrx5?L8L}in`o$O{&X1@~o)KJ+e#G#s>QyZ3xF8w{G=i(N7=zZdD5X7_%OP?UbJT27RH@8g7`^xu%p zvXE>YrT@myq|!fdCDLCWq<`ROD*Xd*C11452Oc97rGMZ_LQ(o}ZX*=s{bqMA1kX(R zZ~ks7{k|HsDB->hLQ%qfY7bGueIF(iCH&SoDVN`RAm#E~Urf3D*3&7M-H_|P<=DB(jlAz@FD@S*#lMF}5zgi!1Ye)r|6yx&Ea?IR)Ie`h2)`HC>&{rB^8 zv>TDIH>P|)DPJB^ei&W0jRo3=NtyBd@I$#!u6(~I&zcPRe($w}4#kj4bWIH1PiQuV z9wrnK#78;^#gX|V7ZX|wDL-;0q0Jb2Euq+JeB>rVKNe|s61q8ta(4OsTs{1Lt{#3r zR}a5`OIj=UUy`DP`;or=6+y!PpbTfl`uhVUoVqX2{@|@S+85Fq`@=ind2dMhhaXHO z{2{i^P{|*vy+>bq;9Nq{mmWZ~%$FWeiJ~t5Q(8yl@jvnTEcDUWrMi6di>ZV^!e258 zf27tCz4edwq!RweeED&fyn zN6{{SPMgjo{Q2#vgg?)<+fUz}O87J_=h^QJ68<7*`M=0n{x7;y34d`kmGBq$q-FSw zXwgcaq28bUwjkj%4?~M}`q2UDJpKAiG= z6yMEw{#{Pbzsu?QxtyM#%jx;KoSvV{>G`?ePWAlzTpRoQn~@&v`S%}8_56Ej9sT<6 zA5HaqtT*NP*kfrO{lm#A&wr?;JpVyjN1p$1P0I5ha(aF~r|0K$dVW5q=jU^JemiyXPiR{2i8J9ZT$%Fx z0;SFTScFWsH;{L+_Go?pH*<@x0YQl4LaD&_gVrFG=_zt2y3 z{_mBP=aUzwJfFNW<@w}B%JWHS9eF-^d&=|4&!s&7?Ut11zulMe{I|zbp8qDTBhRmF zO?iIhHOxXT53`W397!d7^{iCFSG!XQU!6}Sd{t$L62AK8RKiz3o=W)YXHp4I-IPjr z>dsWcQxB&So>GaTgr~lqO8EC3DbIg@GUfTTb5ovQ8%cS7Z93)owOs%CwOl{{AL(|doHTycP43 zyt*N{% z4ayhRSUR`dl*-#83r2ZcBq7S%@^~t5%hRd6t$UCc@NVbU_onhrg?9RfLitX;C6#xo zEEwgTDhW~EsZXWyPNT-M`a5j`d0`gPd0I~1>Bu|lV32ouPTuJ`d8g;(ot~4oEhlfA zc1IN5#dJbRi~9&QMI5ku+N-+AthDVKBaNV%Msj$EDR-JNnd@9{L>bGN4Xo_my(Zw~UF`^{AA=bfA8 zdtNQg_q>sg&gaA)?0KJ0^PPW1N;@C#IqzqKg!AuDd7l4h%JYH~q`WnxydcGqofoLI z(L*i}m*^oEz9yA^;mv8v3-8LMB;U3Rf`p55edI+?a~2@do{yE{>RspaFG+p=`PZaA z|NQ0D=bw-C%;%r~0Mh>~$a?`i<4SPn3vyb&fU?Jxz0MclAzQ-Ub?0}V441zQT)w+2 zmN4CyFe?X`!&|Y$WN9WnU7kIv;LFf-+=rEx_ilGxo ze@_hE4y_(TA4ZoyjiE=NJrqMHwD`FeKVDC>0&OF>jy6dB4t+k{_PzdC#?l5eLpQ= z%ejH)_g|3X!rUvRbO=W!I!5!ewhnh+Hna6SQ_x z%=ZBKz7s=FkurM7i2m)}C@)EK%8KMOmWotIO8C%rk8?`0`2 z?|hkRP`++Tl+|tb0cz!+Bki@M zJU@o;!K~$UzZH40pYKMqZ1nAZ1P{4C=6f>riJq6Hw4Ob=(9fi;suw-8zO{EG)wB2Q zY0AFtG-cm(nzAp4kZMTJN?TL?#lE2bl$2-x13B8`X}*DUmen~xO=mm@a$|UXE#*?b zIZav5rEKIQQ3vHuzXa=hlw~>+a~n@-K=ZdX21BcFdFVcOvbUT)q#IGWG>K z)c#`cy|W|DxAS~xe-*gwtfghxc?8Ykh_F*${=t~?)*S7Q9PMF3ab({41fkdqUvV;_ zmj*6ZT#39mI$c4DPKh(HEAGtEay|5}X}CnKcYQc5`^za`R`!=8AuIdK$#>582I()~ zNG9_XL^)yI;?Z30nb?Wp#y}Xmk-H;u?$1E5sLO4dMuT2)mSRws`sZ_Uqx?oN|@<) z4%gD&W?1s#7&p9@N*{i6Dt-8YT)w}dr;Q`!$V*b`BPwn5vyt0V>7$f3E79mJsl3r| zr(DLapa+WxVhk=9oE_?KH(rjHDW4ltK91ILM!V4Xz?ov*}svwDB!C!vKibe*rd1bJbXyYp3# zrnHG%`6kqEqn>-Wrkd@g{xZ$>zBbit?@g&@d+*GJzLN6XcO$wy5p1?k<%>vl-&2I5 z5AK&{vF!W1Q=a?Zkn-G*UE*oG&i#+4JP%xy@;uO$@;oq-@;vaal;_pk7=gknc<0rU z9`(HXZe~*Vg)&@?tuybL%*mU~$(xh~WBpCa=VK2xiI-=VpPI(AV%<)yrP8PFAQY`M zbuXc4r70|tNtk|C%5xfT&B`#7({m=L=Zt(e>N%6^QFKN=<8tsCLQ$84%Y>pX2X9Wf z9K4GXMUOm)E}6{^frYcOA0lPe>mPcE&{DAVp@#{@G2n1Vs>@+)mgPH)^b5ji$El7W1koQCK$Ulpr z#|XvQr*29lA@tn7FQjblflF8~?`*1dL_M2#q@mfjGIMK&e6x5#7FxWCGTa+zi?~)eCYwSAY#a+G5>nLB`x$9g$ii)$}o>XIdYld`am3TnOtXw5O2}wO;8W6g69sE>W|U=~S1M8&eNi z`Lom#tIMf`RZ?d1RdlPIJPc5V@^Zm zbi_M>bu*qfY{P=T9xQmnaw_458&e54+?h(a;SoZy#@=vgYNa=b7PbCi*)wYW!{QQs z@Q10*OzR(hEDhb*oAUe-EEsp$I)6l(MF~H0AE7AWM;;&)CH%;fDbF9>m-76vHTs^| z7yKBO&-#L!E=ncbl(YOz*Q63|`XqhNSg_ztc-Ac|<3Z0iJ&{WI$+OaYZ~iuT{%}|i`RSEhD2Ek)hQ1(^@Rq}=mELk=YNfZ_LcK?u zz2!dg#WK7lSJQ7%`C=K~n$zs9x$*sH&rhZQ?1QQFpM5Nq@Uu@6ioW!7+foTX*PRQ! zF|C!Kr_YM#2RnaWnniowBF$nMZn>CHlyJ*|l;l;^D^Y67{_8&XnhExw`#Dd@0*+{Kachp1*iY z%JUb+CGz~mPp3S8>6}#0+uxdUx&48Z%k9b+x%_fR%H@|QQ!Z~mie_=A@a^}fJndFd zwBS3$CGvbncgph}>nYDWRMT$@t>cbdO~3Oj@UJl}t3F7(Zm=da!eEtd9fTHHDRBUtzDE1^XRcS~NBaQAY`^X`WT z#nI{4E=?u;TF##LNYBXgp0$+cJ#S5U-a}i7XE{25{o<7N>pz-G(A}1-4EJKCcqXIs z-p8OtdG|g^D3;+jC~ek*{RZBemEkvXz5WOO4^`(MpY_lz>U*5M zp6j^I>(BS=ygtWq{gt_i=tK)B`N3-71tgqJ&?+(+N@0MuIcUwT5=DQsrPIFtBR@pXJ zt8Bw_oz3h$d9tF)dx=`*y=<-Wp7R9XFdk1`{LHE$Lua$PVO*jMWaZQ+trH`X^MIVpX6@8ql zEBaXW66^bT7wR+L-0b)95m1cDdS?pm;rwKFXO2V2#s19v33iWN`H6Gp$eS7VH=3X1 zImdM&_N(bZjWojezC`W zjkCiWXH>r4;KY#UfThN7?-IRo?{d9zZ=GKG%}l-Wn^}70H>G-I`$QdU$3C-u-wx8T zZ_yVO+pA;yFfkk3x5kMz=-78oX5TrPedlD>Fydbx~qF4TWNYg=|KJK71qk~O4_RA7|+%Hu+)-Chnp6_-l`gOF9{faB5 z-4nka)UiX(#10ke?<5}DfircCIUf#n=SD&oz!Xen*_Fk6=fh!cXM?!ZdAWe=X3OfAt~8yJ256i1+C}T+i%%x-S*P z`&eHVYT)mS`%vG2%S{b^ZTNjoxuL(OYrns-Lk9D=+<)VmW!;YkYxkq!+Wly(c0Y<; zXS;h8DpvEDpVmC)RCLU#=va!@JSH8CHGApUCJ^`TvArO3j(Pk7K;!19)?5C$6t|;uM$AkItKIZYnIh5=WdaYLGIaKRVvqPP#6CU|qI_Kx{ z&d_;!H-OAr?VjV`L^r>;_jqwuaYh~=`pKQ_@kwT8UweGmpSD^bagy0PVhHIo&o5fonMe2Rx;0^5Rmz)z!L;N+s~j3oMYxY5}u$M?H<&m z>4ZXkTyT^=E?8d~Ji+J^e=6_{41|g~`#l4bK+H_Omu@o~C==rx1|HP455jR)b5NGn z98{?_2g#&a?VwhzdEykUc_NOpnkP1D&5%H?84{*7L*le%$U3b#Sat!cmG7+EY6oX( zmB9sCWw4z6Jg0}GX_X-*T4hLuRvFTuYZ%g_HBXwTHBTzlD^IG`4kyWRoJy!qJA_I_ zoJ!~_tvNJIs|`p!f z`#P9A`IJt?%-zW|9QEQ*+#i9Q5;gl2hM^ZmisGVrRwc zm1k|&nvtQ1?KCSR%k;{~J{>z7F+R6?MrI*T^UUBmN1ln2&BV?*4C4HvWJgXhu_)}w z6U=u3JW&l=GfJ*}Jnq~jcv>@moy>D?8!GzBZ=@faU|Fa>V{&=)4&1a9#ye z+8M)s8TdV^7j(c-^yxa6XzaQZrkU9JDOmXnDHqg3TBDCUzg@2!?FahPtQu{wa6RMaOP(aS+uD<4DxB>#!64RfO_W1PAl5KB4q2P;J$WX# zg4Ua?|KVi)k9-`*`&hDbce*xHYhGIkl}$$F+7`sP2d|Z^ndh~AAm%wG0>`~=j+=sN zt>2WjdVbfXBgPu8D*@5rx(W~-uB!vl;X3p)sNOiFNM902sfh7snG|P6Da}~P+OKz> zg062sjJZq=g~|@2IW-Y6W;PWLHnXYOAZ9kT7{`6W;~c*m{IHVlH#pBWH*7**cxAYu z5i5CRxS8;JL@nXol=a z&giyCsQh7ic3T!=%=)%@AZC3V^0b-V=IrZCd3NJ2$gI&0nH^d)6Iol$+XJ=c?J>xu z&*XA@4r1*5?VGj3Ok`%CLuR5cwxXF0Al5Lm1;iR=c7fR4e}~|iub=VzcN{2yl79UJLG&F7aA$ zXB3F@yR#LvD$2>yV=fjLH0WBkS%8i9kS)@pu=6M$a<*B`mRFlcUP(Qy9@Q% z?%vf6Vtupa35h#ob~9phxZ4L}4R?ovSi{}XAWrP=WaKj3m*{s-B#3_ZWPs>!kFyKrq##CzIn{75znk~Wai%iInaaJ+RPK$z zaa6h2@w<0}t|&KA`{knc6Ies8bly?}h!y3^G+EJoAs|+CpL2h>uNyJuGFLi5&AG84 zYR<(RtmfPt3P98-yb%9dGkQ#eIQRBH2EDmPhK5p z8CSM}o;LK54^&Eu2AOZ8c^*my@%i&1WXA6gdKTn@_*}Q30<_+!EU0k^bGNaF(NBLq zyUAbFx98u(<%se5EI$s!XQ})wt+G(E=Cjm7%t2A6Lvlso8NN`i*PW(=3mdVL&r%E9 zL3~15*au=oi{@*UMT7t@22KUik>7!gt_2kCf`U7dShsAWYA_AV$x%+nF?Mz-O>0 z8xiBApOjwHp%}BZn#Iy3)=)fKJ3JMP7#*HUf&=&GQ`v~o;i)_j9iGB9#5z1B?sQl_ zT01PS!9L?pw97F~`}DiK3&+v@Y2-PS&sk5W>f@dkcjoeR5s0}wU8&ul?f|i$Ph+3i z%u1a5SV@m|cn0qLW{2mQSe@rH=}=*w&r~B%J^?<18f<+l!myHgu7IY^b49$)WkoKC zd9IL(*ufRfF8GhriT_}K+7A9lj$>y3X+&ncqWs6HuQVJhnOSKxh#f3V((a|sjw~&6 zVu$r?pRGZR?$4qVwuY6C-%7`CWty|H1X=TWccnAG=f-Nk=VYJJuPg+_ipu1iW<_OA zughe9?5=zpdnlh&pZ6igIXpi_`#s-=82wf`6|HhATIE!=PIY77o4->g*xr< zLN|yNmHUBMQMuH|8p<)Tp?p#;uRx47lshweu>djF@S^MxK7X!uDq8JSv^rV)tritJ ztlq7=^irmFkpIUplzuPuA;yX-fLax`-%pI>{2gtlL;yM2P^64h_ z@^Hk`NeQ4^NOD)pAT0-(Zwz`~mM4!)#`b|`8d?(s$|8*c%_2<)Ws^jc_sv&)I5*83 z_MTTFQ4u@wN(G3Wcty?}cH)&L5IgZo2kv<5&9hr2W@MikD$z6hbn&W3yT3YKuY5H{ zKV7_vso1BBwNeqYUMt<5Z7Py)u-m7LwY?zL@LCp#HM}+t#2Q|MgRT9wdJvy3s)lL5 zsx{iLs#g0|i97vX57QOBj&s^RUA$hPb9o(SoXzERCzsbnligkC)V?kcntZxgSEk+9 zwP=TRn2L2+*QYh#aIP9}$TV3)b+A^c4%aHxiCU$4gYMFLOxpJI_&4UMxxNm+e=y&) z_pI;K4(ofh!v=KF*1jPF#B*$e@>W@+u{OV)jJ9{lDSzs=aY z*6;Xt^69r(I>GwhcKqI+tNrSH+OH0^Tfe$O{kzXPRAirD>Z%=T0!5k3hD89hn0wdZ$-Yy>y9_u8#$=^YzIfcD^1p49Yi}^|el{8^nsEW%06R7+d{FD z6>UQe)?r%%h`DTQ0Wp_tsKKs$4=RHen_S+@L5%M2?b7{hK(+R`H&Q4YaxP>IRqqjJRP-sJpD*;Jt2o1{K=>El=sXY_F*i0&V!gXsRTvzI<@f%~(@ zeJAR(?mOjP%qM|QBDMSR{{}(#PoQGmKk3l!pY&<><|K!5;l9eaH@73k+CP=2HM)P= zpxr+e2fFW)4!&emcI6?)PV6cIu@k$n&uk}lb!z%70z`M`KR$R`khR^PEm>Ge_m&b6 z{ha^!;AwGoT?_X0ph}acyt!cgKHsCO-Hn*_+g+^vzKGR+UnGK9-xtoLzbJ#>>&CBj zs&;5?)DErE30CxFp?3JPR6BfG1L9u#QszL~6AHf##&6Fw_~n=<$2|)`<}Vd`_Q=l4 zWo##CF6l66o}sVg(=GG22|Zs;0-3)}==o|kXaQHQ0Ogamf)_J7* zAYR?}#yNz2ZJ*iqwrTn%3{&Aw{$`ra>>Ie-pC7*I(bSIPY^*&ND%=zDeuv%V?Xq{d z>)K_%a2K>!=$}Hq#U8YuV}2{{{2X)NOr6=j?Vu9V&wVY>FF&+zZlK=k`wROt8pUR}}tD5&t~ zhy9{LhyD3lQ{FDIn)@rY=KdpE^M^vM@^0Vwus{EX+Jvi( z`KyVZL&1pg%5Z3kb~uC?*=yFJZcV@8IC~}fEzBXO^S|Zl%zi7-nf+F-GyAO%nen-< zXS~j=N3OfPn*J{RG@8@DD!_=kSN@YtG>hxg#)_ zKjb*((u*B3m{;iD46WIlqcwZwyrpJu9f))IGe|r9DP5w&pUogn`p_|3!i|9K#&! zZ_bZN*2d54H%|F^{c4n-*H5lXrb}M=pAxLW+Yft!UGnyu1C{0fyQ_Kotpu$gZ3C5( z4uDn~^2imXj3l|NBFVM9oU|0QnzR8_LD~aaW60|PRgy-5){>@zstox~2bn$Z^|j*t zxRw9gAzuFs+|_21N)da3)PUOA!2o$aqe=j#Ii$j@?4PVv`eT|yUS&-7HB|zSYLx-g zL7PmT12E|!>&$Tj@*JvCS1|7YWX7wTH^_&T8_jV+`g-OKid0uOZ;)Jx>Wp7d31YL& zaVN-B7&{@!iJ>q2wz>BNoJW>|BXoVi*e|@cdV}K}l4l}zFjzXl+6SU`ThYLLhfw>F zT9fBMbeB(+-hnOJVPLzaK{y}y=B4+<(Yn49Db^Ay7s~K@H6MTcW@VW&w5ke;6B87HVz2}nJbES2&QSz#v#f2xRZu!hm&#; zGtZ{plUg-}PSz_!yLB!@!?pX+Xze~!rfELu_6}XDRfa-^&zRm}5n6Ltiq;&4p4p0q z&C{C04rtAjW1(rDIK3yQYR!|2wC2fWTJz)@khv;)!-BMCSgBSCYsStpe^1AIie$~s zpAw@rPmvm^c}gLO=kzJNw8QXR#5mjGwIFH^$KJKI5AOm|^V9^ba%zWG375H3B^-UR zD&f)>s)Vo6DyPYD%;mI9t#X>=$(?mtrB*pzuB|*%PnQ~~az=<&IYW9zl{3a`l`~}0 z%%j z>rqaxM`gj`Q{ynIQ9GQcf1>rCSEC)yLk&ZAo8zJ*5MxF1-x+L0(QvR?N9Tc9U-V|w zu+H4^qW6KS4V^Dnh7F`Kpc<0gnQKXlK$}TxL0d_3_Sch+fVLSLJp$A~nhe@bngePi ztpx2LZ38ut4uEzVx?nhnXTSw@sFqW?pa)mX^`>VrvX|Jim{1URL5xg{U5dfP>~R;a z)(#h94)#tmCSB7-33}y4-8z?8*=KZ*jn(e4@%pMCyIiYWj7i%&$;EQrWqlVHYR!w~ zTF#1`|5xB0J49=am8^LuIsTRwHOI=XW1eFhwC3105W95A7_E7Ub5*>gQ>$Fkt5xEp z^Hhl&k8d8GYGxEyj2O?jxP98;QrXwc^HQmnd0tuxV(pho)^xZOSCr5Q<1h}rwhrT* zUSB3>6&)^1!*OSu<1P~i`duc~((kfX5dFr7fLO!$8M=n?J&4g^LKGZE83*|f1=e9g zCWsCb@<4Q$P!FQR1Ubie227N`&|zW|94;^p6MGS34VMRk=y190ENWgZ?)1BSopy*% zLW~aa$SgG0IK($1Mu&Lm3mxLcotjs~farIHJc+Z01kAxcQ76RW>@c4tcoX2R2zlD) z>x3MKir~OJ6WWpIr6$iSWe+mXDzCLKqTf}L3;S}_9IZJCov@md()7wn;>Q{$6@#cbsYb87dYjfva^{zmt5uQ;v`SK$ zR!Krdp%YC9uL(hn^Sj2`<=3EEJELp*^i(E?;W&0_aw;^hG@6r9kv(p5C04S&$ig6t0 zaN~YGhiP@{cXi&IoDSXu6`R>jnIL9%Q=ZP{rX5-{tpqXFm)59N_yGU}aYaz)!XSbp0BS5Vrd9K?-lIvL;X(ebcX&b1WB+qsG z4E=KmsDm^Pw4Wq9q>Ho^bdaMb$+5tLB zI)uL&;AiOnhJ!q$1dxw33luSjE zkR&U4waJ2eu%C(DFT|e*K zc~H62_|2_Hj1|pAckT1b+)famtnNpbY}WT9YkS=NF(C8JRPX(=li6$ePakR}-1+x{ zy!TgXlD8ynX7l0@``Y9=Pp$=)iXB1?{J%Tid6=!;b@RF%>eKW9{A@)J6hbrE_&oqk z{tqDU1J2HxAB>f}Kg^focADen*Qx(p@8?h~s^#xH^5;1ueWA)ir@n=WPApwdbD{HD`l3jzV`hc1AaJgx}4 zj{l+D`$V=@d7|7Q$6*=rw3#iF4l>UtLqK$Ra=b(0U}H`CxZ-dfD^7M|MGkf8l}|-D zB%Nn2PdPO_g&k?H8c(%3)T3#6utRC+;8Ui9%i&-`#ewJ8izBqkizQm+#b&MYB06DJRtIX8)ibop zYH?sLFNJ88mm;*vOVWAf^3n#aQXxB%Dit|er6OOeR8(q}mpxkLW!aHbd09HazPwzo zRbKAYDr*w7${IP2Dr>s6$}4_a<&`L{^2#Eu@=A|Zsf^JomGN4oGE1ve?$au-;(V~V zyjrYPUM<%uuQqCxwIj63TAVpnWvz6AeOcSARgS;C#u>eaJ!r3(ui>1wDpk@6s#Jw& zm8v)pRjQV2mDhb*Mcz=eDzB$#mDgpORC#@uR#}&*Ro3Nem37i3o&oD>waObqw8|SZ zagI$k=h#MZXGI$`w8}=@o$R$>V;N%HAscr)G3TmL6QE-?!yFpv&{&5iIW)~7$(q-t znz;@wacHGOn;hEi&~AtJJ9Jpnn*k0Db7-VPV;!30&~%4ZI8=k~a_(;)(XmaA!>0Lq znwzBa$!40HanG^S+}s7?o_IS@JG>nU;xyluYdPKJ9WmSMx3SOccX;03?8I<(sF<@0 z>agc+tZukIt`64_6`SnDQk~dLCzj*HmO8N#C$`p!;e1ejdz@H@6FaP9Tl{ov%P=Pv z;l#!|v3Mso-HBy8u_aCnXR*z5%Ni$!9in2}omh(#+wa7>b!=;Zj%^KbVk4bcj1!yW z#8RBtOedD(#GDyzb!N16jdNVJbDT4ytvx#Sj+5s*PM+`JQwO_u-*GZ~XQdOvXGm&g zt9Ga#qtCJW3Y;B0SL)kAykgdOgLsa;8w%oi^zIz3@@}72*@hirRko#Qm2J*FV4FPM zCzvyQ+kQ}@q4x%XrjTS0rjTv{O(iV>rIOZxrjd4orjw3>(hW68uWunqcQZ(HL7Ajg zpqZrYpe)is&@4mm4+CYBCW2;@W`c4_%RqBUn?MUldqIl~Z4UqykVb=+kdUXnqi@Hx zVE8}HljC-rIrcM%?YLqp!o=(+8S=l16ooq!?a+9Kk{wES2)Wp2;SZYq`UP$@nSFpg zAINV=HHPV|8*x_Iiav~lCO?;ww-)WEO&?+}+0XJmEY$8Fmg^n)A^fb$4qTz_{@f9# z_vel@?XaT?6l${G(F)@4-{sv$`w7-ZNl@8oR(@0f;^#dd)jNdaY^({-FJAr*r3uxl zSf)cI4mF@>8OE;()3nDOe=m|hg?yZgm?f#mynpNcxJ@6oGgz+p%sp+twI2Ig}7eM(Yuh>kViqIW@ar=D~(I%s$6r;;_VV4un~c?J7arot=Orx_q# z!9Lxg9prt=0nMhLyPVy#3v;)c$KR)<=4XCd^D}Yh+&@c2uYWR{pJm~*wMR)#2S01U zaqL8kbA@iHMvV2fbc0ym=i<&>K92>lzR#EI`gTiqsj@potL&D(P-St9+58 zRlca!DqqxVl`k+cn~U>Srnj|8t9&V$v7#>{w91#VdsxwzsK{Gnu6$o&&)aiz4|ai~ zaEF>f=3PYZSJ9z{HukmbPtNx1 zFekQ7yMNt<7(a{M>*TpNMXT(^#B2?F@jPL#nBSyhB`5t&1y){ScHKA9dG`7n-JgNp&fZzhi|d#`j0mb--5WOz7l6;xwCRDR_>u@wX?ELulz0s z#69s{E@--O|4tmZ&%Ud1NM?JhS=kW+$|OaCxR*MhV*An|dD>Wqj(zX+?0fjxseIoH z;vDt|f;fl$u^`T2{|eptACQ?<`5{rO{E(_ue#p}*KRA1^6H~D&oz0+~rrORv5HtHR z7{tteL?>)!Kc<1WLw;PN^E@Ee3GVU(k{LA*WP+%9pcKSv5A4?}Kgmj}9DhfXDnHd~ zm7hAaiv0gEd&YI4^Y(t!)vGms9uK1C&&gWzXK`m{Kck=a3ik7E?Qk$fYaT4nng>g? z=0RMEtmZGnw8}5VTIH7pt@2BYR_T`g!pyp-X_ao7CVTd)PpkYIs#ShX(kj0?`|MDN zRymZYRSu|yjZ*^Lw$LULt>=0J;J9ea<=I^nHQS*1n zlRNA8EUe`3mVSqyy)yic-DAH;_B(oQ&*H9oWrqr?S4#OrF?$b*dgY3tv)~a^?&Gpx%m7VK;~J)*Dnra z?km22*aiI;nU(#J3wMvNU#mmCaNlWGdZa#+na`8##Bv=fb5 zgBQK#?{j=!=^*{Q_3F&=c_mNtyEC5`6SLL&Bu~?MpKqx;AAG(NtYjyA=!9D7bizLt zE1xr&`KRk#|j8S6DxP93M%Ga>$&dN4tWuIO- z03Eco4-j{DVnC8s8IX_IT9erTnKa!8px26=UJt0#J8M8QR+^v6eFKn-on{dBry|)Q zbO_3HV(6}lIg<`@+=JSk zb8r@jc@AE!9frV|6pRH$fTDbJUF(Yq1+l)UdJyxBY6daSbNxWf^W4eW;apis zl~Jg#|1mSaQR!N9RJPU}CB3HRs9F&3E29o;hx6tkMu+p-LFW6WzG$g|Sw~AhnRPV! zX&s`Sd+PaNh*9%=%+G3`kKJlD&u;)x^L%vPYL1?y^BmoX7&R}50Wr@DGC|Dqf?NuSbQ;Ah*2{}dQHs>eIROHD4n3@g>fKiUbsZ(IVKP>YL3YPQFBZMh?--h z6Vx2j3Zmvk`e$F?MU{wAGZwpm|DVJcJ6>zXCTq=D*%Ld>eu=FGaTml&we-7ql&;}o z$&7wur6Q_~6$jQZR`wuk7%QEp=2*#^eq)^{$4iP3qr)Ybir2imHaPJNdK>548b(SDb9f>_bGXb>wJC;gc3B2utmrbC zG;6r53q*&@`apCT9}1$w_#_Y=#xK`3Oo&8`4in~qSi^)m5FI8of#@)y14M_3VIVq8 zoS_{ib|XfI%VR;T;qp8X9WE~d(cyBbmJXMpkS zeIL83TsvHaPS~f|t8gs{Jju9Uh1vtd3{46FvGz%rimiRpES$H?{`YC2ZxVK^x0oc) zgUd<#KqZE*o~XNYO|D>=XIjsQ>zmeKN<~!@Yn_i&&^?*d9k_LC%m$VA4lGck} z^GWXJRAk0y%$u=4?Q`AD$jr`mdN@|{33oa=p<YBX z@@*L)UI%Z3N-)o{+faKj&(zzxLHr3NGXlh&oQX4Fz<-THW(VfJp46l1_HFulHWMoL zZa*_y@0Xc1*pd7cU?$w{r_29N)I0Lui1AG&Usjmb%)&Wl&(y3O;)Yd2e z<$`iWt|%u@AD2_4kISjh$K^DF63kR`Iza61J@Kf$*~IRd2l|Gz zTl>vP(Z|gx0P$I4j?95s&p|(J*7uIoD)&lebiWsS!m8Yho>`ULNUf6V{Ooj}pH{gK z)3hr0C2E!XWcRRx_c>4EbFn{d?Q?6i=G-2wdB0C<-tS~~KRReXZMr{0``w@K5T0%9 zr-k$C5o0IhJxrU+1EGkqyAOyTyZeCD$BG`vatIZvnBzC!@tg1XJs5`L==We0h<*>s z{-oc7*ddC_HRXA9eR=JOvA%~wbbSvw6MIN1qTfTATJxbohpII#aQqfHeh)i-569s+ z*7tA{h<*<{JLKU~?eMVljJ4;F(Dg0!LyYw;jM4QiOht@-3#B6ZEiBNQ3o9LJ*0gAh z_Im^sS-(f(wcjIIh|y2}JErw}q)cl*(&$jPrUK`Rxfm5$zr`8aZ?V)szr`gW*0;Du zYc6ipgp*kHbBW{ksN?sjwdV39hjJX+rTv~pMYf+$w`;$W zK*Z=*A~T|2$#|_<=SuMJjCd?vReDC zY(|WJE89WzTiFMq!*fv%r8txWqWg2sY|Cm9qkCDmc7I;7ru*}UkK5DFT`Rcb9o^bME4g8Ky-hh0z~&08XZCnHddaX{a%dMelKQXCH-Ek z1kvwB=?nc{Y}1;n109NS$eHa+#oF(s8my$>OFba^Rro;ktBBN^6-f@|IOJRzUdArB zyY=M`tfb$XC=mVD#DVCyCS7Z;DRih>(<{#WUg<`R4wVtwy)qFo`cQ}W#cWnXB)Gzl0Dm4tTWq)ifm>ZyR~0U7-Gz`CJMwn zYm!0iQq4Sv${p&^eR&Ys1a8W5xVCfQ4L-_)ZW{u|Z=t&?c1TZUbAj%}@i&8+%i9q;m$%15g|)ve zy=LuiXKDv|7ufo}jfyPQd9-`oYP~1wWF_}RophJEYzfi1Y>7dPxonZ{GM6psAa-Jl zQ{NUj;~10oS`{tQnZ1MV+B4@JXHUF?Jnf!%rwJ;|-x4qMa4wLu5|Xxd!j=3 z20!iIAbHZgAr{0=G^A?Hh8%|+zXr$e{YI>$-*(4udo*J7+b;W)e%qZLxjkR|ZI`~V zz7ITl?jOkf=+}se+3q$kc z{$3>gcBX5;osQp5$8V=o-zSdyClX_Q&3+&{9Dgs86*bH5VF#O299pe=_GyOJ{Ipza zep(Hp=BILYQ1jDnO}i4b=4X-_^ZYCx#5_NfT&Ve3wpRJ9*r9z|vqdtaW=lJWn#bRE zq~_+IGJKRT2Cag*-uk8*!!ML#-srvu2v zW_>^=&0G$Y>0A!fXuktaEbP#L!b-(sIB=ynZkmN~~L$c4P za;QnG{N~(OesgB~TP0R9v)`P~_k?JNo(S#GGhRFNK+~QbzsqsV^Y=up@_VXQ`8`jo z{Ju-89L8sy_S1vI(ii4=SdOE^;d&4|akv@8PRJXLwx54Y(++>gN~-ia`>Z!qtMoe6 z_O8<^f5vK+KbmMMs?=ug_5^DW_5-onV3|8-B>#ueRvVn+ z&}v=#!10Jtb6_=yngb;>Y7T7EDtKT~4uhs@%|Ts=QS-zM5H(NC0a5eBBCT?wxN}A) z9@3g2#fVXJa0G~&gJVF{9Gt9G28$mx2k+FHLvY6No1*?hs<4s{L;7^=q;SOOcTzNn zekUbrhm*4Poek1FPSKf#_Uhw?iXSr@n&-sI5MyRTt3b?bXoGeb z+NCoa7O7Q+#p%q3$;8;RlQC-EW&BUZ9<)6>8Jae;u<<$;mW~)R3(E#Ev#db~`>Enh=U)ZzZ$kS$hYA|BV?9^}&GdmSm8|!c?YOtA| zTH>h4wTII@wOJn*K38WJE|X?1r=j!K{WS5T`)SfM)_0n79XvfvtDIh}RZcJ0DyP?J zmDABd-dFt3hy(H3bB1#rjPOH@c}7TP>{3J`hYgNcGeuNa@GO$Y~z1cA6A-Y8~;c- zjt-F-AUZ_mfanle1foOae(i9!97mP2v0tpp*%eyl>?W-;a->!nDLtdgNT=G7PPONR zX_a%FU3ZSN>!KpDk`+bCY*|qh&Kz4&)Fz$FxiN?_mvb|<%DK5(X6J=!&GY08;NCrNjdqBRK#UI2sUTJxEm>1D+L>RpGr#lm zwaWRmTIKvktui_gWWELLKU&Tz);@Zf&g=r|H8Z;)8^p{m$OAF63##x58=0IYFwmE1Nap2aSFK0p_@gF`yGjGNTZZ?CYT< zs00ir^@7eYba}FNxLmqK_sg*-6jkB4NON5LES+_HCt}=Z$KST%KD$D$4BV|(z`^d2 zD>iGD1X)QHdH2fh)&$v~R7t4TDpv++l`AW?%9TqJLVFR!J+=Dru!!C9Pho+&m2Rtv21gxfs{FW#;O3^D4bx zZkCEZG_ijs=vca(w>wSj|D@NSk=jA*?k(f>)%4amTIJSqtZX&M-70y0O%fG4WJpES z{8yrm{i_Z`ao2< zUEG=V?c!%i_8>KH7Zt{4NfwpoPOSs?Zis7 z${lr1Y$x{8X0w;>kQ%y7ukYy9D`ze>c?sKAeB{ntUJpY-ac2tP195hjSZ1tU>;xn$7zDOc3|k{WyyiHR+Y}avf^a zG#{GwIr72r$eMXRh~wWU`A`u*Q_Tx;Vv!CNVx@UM&Ofgj zu}x-vd8n`d6(sCB>+sNM-Q9;U75gOj5V~t=L8HDNe*JI@+|M@-597E2a}DKp zAZGrGum8eOy>elZUb(Oe^q@IzVUOkDM|cFg&gNMVh}dYOQXpps?=l7G z3%?2EU(kja?{SMqX@|vfHRU~LiKtL>NtD)HlA|@3lxfW+N44go1?ZXiTjTzZqFU?l zD5@RsxyiaPLi-iQXurZF?NFGh-5=Yn{g%$t4okbW=Hq@^^Kq$I3P7v#Rx);RyN+Lk4uf#c5N@OK#cqUG(Jd>nVp2^WF&+O21SRpH^ zvZ7F{tSHqgE9$k1^FP1*|06M~{HIT=lm=^+(qzyCb3T;jfmmPZcAeR?$ZWt2v+~(| ztfa%U*dexO&o+SAvz0!rxiZorXV0%h2d%^L_d@9Koa}kJKUbpto~zJ)&pCa0u0#8k zP1F^YRU*dP%NjxSdp-@sU2yy@5mxlPOod%~9(#AdN2V{%TO$6eignhjq)T*o0iCcF zy^yH=UPuMe?*(VSydbsH{RQXK!t#00{6CXRIr1EkO+sG={F~H*Yk8@m7kxUj7h`oU zFG^<2f0mRH!2k2g}mRvZ$)$LfxPP`PVHD8JZ(eI@cCsqKW!%O0B z>4^5L$U=;nRmjBXSAp6G++%95=s}DXz3ccdcLL zQC;7wxE9zNUTxD3Yh!h6E&OZ;*Jf&mwX$DW(OUFH5q6|K?zJH8{u*|&t?#u`5bJxb zL)Ta3(<)WcLDp9l4WfIMbG51J(>1)Ft{q;labhjn;dQuMhjo71VO^v{@%p%ROLcwg zdJ*IN-UtJ+zBe*;eQy+Kl{ZR2tnZB~5bJxxnP0UtziMZG>tl6&>r=JEdbnGM_0If` zzXe0T_0Ie@IP=?(3l-M4L9%9j8#;7-8-3b+W2koD=*(}UGrx__{A!%})zs+vYFe~I z4cu*gZ#wgPGZHb@_og$yH=X&t*@Km=Z)>v) zuETD%4t1^Cp{_@FVv7&N8EuKsd2UJ3?pvfjc6UpOL%1{B=g%z%bq!l(x3Ys<^FZw2 z))qMM?zGj(>>Vewcfz&bJF~RIJGejCF4ZS$hx*w%vwBQLt*pUH?$-JS5Ia%drv2)j z`rehy*ok+slWpzq#%RrVF-;Y7&gpk$m$NVO){X7UwoKiZZ3S9$n{=LeZmR+@mu=2- z!F%&`weO+V*5N%|KW%0Wn7i#uL!$OO{(cVq8nU%tgHvCFWX4AAL6{Vo!AkgJFz1Q zomgf%u_Fzd?8FY41KoF2fSB11^wY*Z@`2cik0L?L?4y}FGkH76?vSQ8g-zfW;i z*?Yh)@na`;h3QW0N&&GGyK>Qq0@I0I;?B%=wP^QU9Ux}*S%i*#mIz`eKFb6#v(MJ( z%vz#!CtC8cl71~t=UW;Oqo4Et)%-t?)DEAEJN-Uiq5XD?A3L!-PIqE=j_$G$O(?YBq#*oi%9x)Xa!btm>zqZ6x5C-#UtGy5u3yMGl4VrE}uII#i{ zJMmQoh?#x0UuV{qr9079kCpUmb2|UE4>9_E9Rp$~zRuJRUyD2azTU0<_KF`nv3H*C z#9q{H&yKxK_>|cEmp1>seb8iP-^6P7ZxTVw?3;WiRsmuszG(n4v-SX;S$m=GM0-0{ z((hZR^WR1yM!#=UK11(}^GApvlaB$kpyY6o8o75A{y01H?{r z`asOAbCS-ivr%{A#|W&X-;Yk`f6PRTem@q2*ohw-w8M|$PQL?Vwci1(w4FH6qC4>u z=3vi`pQ53{Tz(RF`u!xGU@kvZJ27b5+JEW+F_$hUmo9PVRJxG0-Jd^Wzj!y8&#!;Z z*A72R?R5XS6=(5yGqHnC)(7Vy#@|UDgkSI^v+@_G+FztTPVAR5to#R8w(Guh$KbR3 zA`|PzaVO-G>Tp~N34UrNt}m8;P1Ksd=Ha*-&2hhWgQgog6skLTXqukpA=GZ4!G1$# zc4EItMV#1gxghrJw{j(SKX?AG7o^^AU(?%rzh{2k{Q|3`=a?>jKR8Z*Dc z$jts!cUauHvkptORQV%BXZA+~h*|#;r!(utO1oQoof`fern~fKsqWIB@U!kmBDLR< zSnYQt!-Ji-M`TnyF>o&(GEv_+Tp15nhr-L7fblb&DM7;5HX%B$D%;= zJBHeAeaDJ)eaC9Bk~{KP1Bmq0KbXKFTk%>)ezvAy3v9&@WRt1oX>Q z4gvj&wL?G2g?=9W>0N-Q05MZhfTs~;vJUXHf=t!{9-Pxw#e0j++AGJIE(LfyLDclc zt1boj#E%ZX5)d7H)gb2SJBqVv&Hv7-0DrkgR+6TG)*1>3gG0>!&dq>;@t})Il_2xI z=70e7lYf~zpg(p2|NeErfC|tx=C~ky75X7F3&TXi%zNIj9^l^X-&?6US=z6A>G5gE=ll&K0fy5_#A%+C4&pRV+N4!N zu2u<^9YU4RDy=e9U+V&fmTHxu(og0xv_q>5!w#{z44bQS8P=;+PL>*|ax&&;b2)jQ zRyldQRtb}SvM*s$169IGv`Sc`RyoC~=oDE=l~be!s+`iJRfani4WEIDZ88%Zz7$kT z+5p;0+5@ULbgBomjWi0>K$;3_B*_kGBFPTfX()UjsM*kIxH5Qm89LpE9l62m$TQOL z*SFhAnd&Ja;EY0?0p^q7fHSs2rNyY6aX^#2D>PuKQHh99e-}I;Lfm;=1T^i+GjZIY zgXXw1aUZiQ&x~|dV(+Ts%J9zX0UlSWvp(~XRv8hjj~g-0iKRHP3av7tRo8IVaDCia za$-C6nKKf-wtIeLvEK6|%k`cgSqtJ7Wn>%v3VMm@#5v)J@j7_UZ0&Fk zu7iQ*Z^Z{hMPMb*v8ZIkE;K4p=&n8EqU74jD^V2ol68-&g8Q>P4i47+T&VC{Yys!) z*13$z#vIIF9uF8b547H>jB?KYQS~~PQO!D+QJp%M^CoMD^KcyBOAa`%8!K6DwCn=& zK65~HKJw(9D;gEq9TMHH-J?Z?oj5-f#5>9Pi6Bnp{9F*{aK1C?(axkt7h@%_ZllXV zbQtYSdbBg?3!F(`;7t00KB%zTm>BI46R#a&(m>2Q26H%Rm6=0K9b&BE!a=&b7nUJL zhYOoQtl>iG8Ed$(7et3KVQ_fKIE+b0j1FVgYKM!W5TnCIICHGSMaa`STqHfCLu`;% ziIv?-mDonD65Fa(F80$Z@)nb~&0KdcUI5xlS_5h)VYc3Vq{E;NLu2L2u%9#u)Jej` zyj`Rfpo65Xpl;HB&>=&YU=H3M(pb=8(k-A~(h|@S(mFpspC1W%^65SxZan@=#+PO) zacTOzjmvQe{j}$F9IoE>yp5}IsKKEYO_v73Z?EyYG!~ubF1QqZv6)@kjpKNoxU^5J zjKf~CvmKWN;vO7_8te`khZ^h-8Mj?KT$Z9$E~^IZG?`r{JA|5-b%MCB<=rc*IbP0w z)-WE^v^7j{@|+-723|EL$azGE3ApxHhY5`!?(2!6AUaH(sU0SwOSTi2OGT{V@_8US z$QxDG;d1B9xx520IynF7Dj;5J=XrERxYoQPT5DdB1Y*`#6o6Rm71$HjAz_%VAwhDX z!}&g6a9ujCb>=Ur1Y8FPMMauY;-JE;Q<6Z;It6EdeY!}2pCU|!f7v7;rAO2Cfes~u z%(w6Zu1|9aJ5t38LFTWz1YEyc*M2?D2iuA3aSyOGH56GVn7&LM>%=fWo99&N3!j&! zN?(}S)N-hB?o*{A^Iw|+Zouw2@jK&i18P69(@<&%j^q4NW3@`EoDViu;m}?^=^Hcf z6uZS}-iXc*7(znl?WAvP194(Ec7ZstY1jpJpG}*NP6U|UGYw~lFOY;M7GE%F7ibXa z2q?tRO(Q@;XlSMuB2TQ$b@$^Fgts)u6GY9iTYUA<#HO(}#oNNeQ3?(kxISX*p;T zX)`E^v=21d&_9Df$)qu$DWvJ36w)HlRMJ{dDrpyJ8tDiq%~1LX&~(ydP&#Q2=oZpS zPzGrm_9vhD(hqinnPL*$|dap%_SWI%`5d>O78Utb{ zGNyx;GPVd*L|O}4M%o1`CLIASH}tO&pc2w#&7 zIM8a+3{VAWDQFF81E`X;2ej7EZ5~h+X%uK3X)36iG#|8qv>H@H+5y@`Is~dUlsO!< znUnykBh3PBB`pWllQx64k@kTa4BZ}ty-Us8$AGAL`*aXHar+`1x1GnWMeHbP7pRYP z1S`V~%^U%0BuxhGAk6_akye6slD2`GNeAG-N&kBYsMW;&Jr1;oGy})&A}s~AkT!sJ zllFk9lH~zWC2JI@&8*Ct3ffDW4{9f^2JIv50CkWKf%Y4^V>qajlmI$Fng!}2Ee9PW zZ3cCd_JIx=niT}i-!wlW!0fmu9frgW& zg2GAjL8p^egCa;fKqE+pK#_)K4+o7TC4izxvp}Or%R$kk&7jeweV`aacL#ySkj8*w zNz*}NNsB;nq_v=Nq+Ou#q$8k-hH^$=wwzziWW?ebn*&N9tpp{Kwt*&*4uFyj-7^F< znKTZROqv0jLRtz+A#DInCG7#F8k*w)O(Ts0rIDtBrjzD_(n+g9w~%&#GDwF&GYs83 z9F$2)0L>)L0%ehwgJzL7gR)8cK(h_y27z)&V?c9A(?PkUMWDH)wV-*VU7-1-BcMD( z_l*E8AWa74ljeXHkye5VNZUY5NC!ZLhUN|dEhUWu6_I9umXVf%ib)$l%Sn4cC5G6JrA84JS z2ZBJ=q%oikr0Jj<(jw3%(ppe0X%}cS=?JLK(EQPOavVv*PoMT@nfXm1{wy8}RC13ogl3%7(@~gB; zezR6t=*&poK({Ijo3zTpHm!m!p}M;WpW)g`FRIfji~6+6Bf(nbkr=J=h%=){#E%sf zglm<8XsuG<%&1_M&ZR)ysj_&yR#}{^RTk%fxL+1;)hbKGohnPxwaSugt+J$8t1LOF zRUQ>TsytexRUR$VDv#D{mBQ1tN@1Q>DXh~fg-u$euv@D(VNZ^=Xx* z5n5&GY^}0X{8-WB!CK|GxGkU5?t1J)JD$B#Q%5rB$%U9`KmiK9ur^joRr<1kH z(>WmK^7Llh5w@Cpz|(REsy9?3cc5(~xdSzjrh~SVGKmS}Aq}^ARBF25avK#LFM%HuqR66KBqw*Zi_n`Tt zA{@uN{c~j?=JK55S0*)Z50)ip_cHid_vf+agUtID0ng`YKlz&h*6;Z$?e}~ui1p!A zQGTobpQ`(hf4Z*s|NoLau+V6k;Y6f`ij#;Y5-vnsNHo!Kk>Nz7iHH*sCn8Qn90)kc zXvd6p$Y_z#BBDi#i;R}XXc5sOrA0~;krsJqqR|e=59fPZ-}Acf_2{22*UN3M*Yow` z`FicOz2CkueM`@8?8OW$u~z2kkOJA(G_8_#*i`$o$k1$`3yYpp3cb0dg?kqnc%|h=;tID%?nB{%@ zxcXKfbgDEQ^_7_AeSH$Myl;PL13F#Wg$78>^1gmoPYpt6NSuehXG(L?KNbLj~?rP&uG(wt;MoJ4%SXzfhNzbFv z(h)SqRrlY~>>H8BqOsB}G)`KL#!FjKRN9XwxGMEQ6Q$v3k~9^?q{V2mv;kcs?Lt$e zV<_(GyMxeFX#%=Vnv14MkE4XN9Zi=Gq8Y9>^+z+MQ79=*N3*2mXtuNo&5`z^lym~k zb@jcWXr43~&6gISw6qQ_ke){ir6XvOtIcPij5HQ4mS&+P(rUC++KRH$eze@x_xqp~ z(r~m&nu>DLVzgS?fF6@}p*7Mmly|jd5PDpifS!=%qP5cFs32`e>!gF|NmoDUkJd}0 zP*IwWHb~3SQ_?21QQC`2(h0Q5Re31dEKNpRqy?xftwUR-=h4&B5wy+K56?gqX)M|< z%|g#ftI-Z=E2>KS(etjh_CYU5!_iJ@Dym6~(JpBN+AZxud!%Ei?&?Q_&|YZ*dQqB- z_DPSUhO`~+mky$rT|M0&9gs$$rZgQLl$N7I(k66R+KXD!33SBOGeglE(qwd0T7cTp zI&@5W9=$CcLC0NfI|Fs3vFL;}3%w()Mkl4Mj?>SP_M<+op6!E9m4>6f(p2P=7Nh>s z26Vc#3k{HtA-}82AasT_0i7w$MFXYBQ9#;`21y6eU{^oxkA_I2P*9qVhDyuP`O+pd zOxlY=(g`%&)%KxigftnAlop_{v<{7uo=2mlBWR4PpPYdr(pWTBnuW$mtI>FAD~d|{ z(F9lBf9JK|L}@shBuzyzX)&5CZ9vyZyU-Nr7>c|4=^!*!nt-m8=AvoR<0v6*N7JQ) zXojmD{n1Qm6iQ0d(JW~>nk{WYbELf}C7nQXUHxn*nkP+0^Q8qSEv-Wfr03B>=?Gfn zs(J>>NMq4rX%^q>>pH5grY%w1ik3?IQP$PZ`=I60aI`|2idIRBQBK-`R!h6kW709S z#?|wKP+ppV9+&2#C#1*GT4_5fNC(k6SO3``Jt>Vs>!sGQ6=nQEt zI#YTa4V1Q{fOHTIa`l`3Xs|R24Uwj!ptKwfl{TUCrM+mFbOME3?HP)OOOw$EX#pB3 zt>fp+8R>bnSUQ51xccoGC@YO+En#UEZMC$THcHxxMoatA7+3W^C?X9l9!J+m+tC#1Ad0)%+aFDpMxpDZ>1dj?93`Yp zXu7l)&5%x@nXZ066eXp}XqL19&6d`oInwheB^^O?UA=e)nkS7#^QBoREv-fiq^)S7 zv>z>U^->?C+4ItHW`WMiOH*l@OD`=(noBQjKufijT}U(QrDJHh+x87YE2If%l{6RS zq{orw;J)qXF|~tejjKQOM|o)!dR&^0o^aJLzd_sJTgKjR{WqTSe#hCU^39jNBm1Kt z>ASo?M)|Kj67F}7f9!r^rti=GxB}@r$3HT{yY=6N{P9JWbN`F!zJKf>_b+Mo-5+5& zebcr-?H#ZCcTRev|B1cr{Uq&A-SM=Ye|j2eTmJL{(zg7m>HQY<<GNZqLp1Xf9=e<8`eVJ|P?a|9^@0R`R@0{o;y|T)?od*VcxAVYE&dOT%tQ?rl zcz3(w9jJKs;XwCWTkXSvLr6#I&)x4hHQt}i5&ZLV@951_d8Lk0b2QRXYEDENp*aI- zgl2{?9OIxNjcEom(}BJDtLNQco;SFHi4Esa6Pq?zb# zX%#vyZ9yGrA37nOMDMuz>o9aun&LR`cBDn9kF*}0D(yslrK8B_>c~LUUmA~2m*$`W z(i-HKwxKhm1L#awf9s0|N+VG~nuZ2ROVMCyBN`&@K|$#_8tUqeA?SQ*5*jAWMgX^uUYdfU(jqiLT8}15 zJJBTRD2loI`#>~V8jr4#=AbFk8Wfkdp{ddVbe*eqUo=e`i4xK@G+kPXW=I>+Olc2F zO2^SGS8onMv!zLBjx-;oq_t?Sv;)nP4x{<5jtxL*X$)E*%|r{ORcMj41!bgtXt8t> zEpheMFtk*fg0j*gv|L(`R!BS1D(NW7xq5pbS}l!7k4baT8fgv6OWV-n(gE~@tAF%G zYo(E>AWcK-q^0OdX(L)M?LkH9INIRq_z?7zGzo2#=A)9d7HyJtpv}@@w8hmw2cWVv z25psQqNk-*Xq&VJRiu4ryL1vg=c+Rd?U1IRsi!j=ckhzM zqutURv`1Ql>e4o}S2}=Rbk+SA%HO?D8i^XxG_+q@ie8pBq65+%)Rc~+gRcH(2s$K9 zLWiaKs3omMN2DF-4e2mC>gt^Vs4a~_$E2C)ZD|!cE^R>_X&*WvokZ`r`hUaFNok7X z^mn91sE@QBoht1_eWjzw=j!A@)L$BpPM7AO0n!@em$soZqyy+oSO41=4U|TrfHVya zl9r;u(nd5y+Jl19aWwS*)Xy1$&X*>kVbXjQlGdW((hf92I*dlTI%NO~OJmR|X(k#i ztwLj@Ehr-GLt~|rXq>A)!_atX3W`dL&;)5cnkel=lcb|4=IUJo(PU{nx<;CVrbug0 zT-t`FN(az&u1@WXrb#1FLYjuAOH0uVX(O5`?LkTDIGW|^--e*s(j+uTnvYV_S~OSM zf#ykv(R^2Z2cWbx1}%_gqJ`2bv`E^5GSWV@SUQQ8xav0yEtRIAth5L%m)4^d(oVEW zI*M|xd;`&HX*_yNnuFFzYfxU=h8~v=peJ0tyDwTRP4ax+?AM=9*Jr!GGt{sD6Q0kF z{Z3um$NpLX3( zt^EdY9(tn>*v&d0b;o zyWbG>dq3Yx^^WJ6OT242^AIDrzqi)!11zU+T>5<=?;YU-Mehh7sPanpUoq?V0gk8s zOXPk7yQ91RC33%kIV1K+f2XbAz<0cBIV<2@%UK-V-Uw&SHjU%i8{sTwNN@I>^#Qfo=dwq=Gd;v%Ii2Yt-5J@_JR`QH zcQ%JKy=(a(YkB`pcf1dBJm39&={eS-a};E&dm{wRc?g!wE6w@)5VN4S+=mk0SAOV8 zBlfR1-q2HxSWE8+4jqAX1cxp(uPh)PiJ@kl=W(C!U5)2;&yi-qc`cUHEa?8lth3j+ zN8)_WQSaJ3KW9{CIn9vst4K5C{07pTxFCRZrY~T;-qk;hJ@ROV(PpD}Sc}feh2}h5 zxWxO)3lDqu_M(aG?N#m`UG$W9-!H1MPVM{f?vd9OFnl!9{tag>z5N@WM%urB{ROMu zavTZ$MX7!tW}fL^vh4R^*6Gn&?{cxt>+W^YHCy&d(Gcf3(Act^NofOj7*dD{EROS*GVBaHSV?a}D&{%Ma! zN4)DCeI0xBb@vF4ev+nHH~OS^ypNeJ`K*UW6}<90?v`C@_V!Y?-egmyPz0a9M&^YJ|(4K)S{*W8Zt@UG@Uf z(Y>s@EgEm!SnmkqDm1NgT*teX%e&jDwOk(duI2J|-nEPmc-Jz%yPewi@hR_G#^=3j z8E9-cCp(9kU5Jq$5A!Ii&HfG*{}CWtz6^%0u4qCU(z* z#+w*L8gF78X}pQuW3BNfnk#jpxpF?qvF?rc$(qsI-q9xoXc~P|cRY>$ufOo5(I;hS z8hz4cq`jT=hF6~&?>*L^>dsH?d+bc_=&=Y*qsO{OSEI+WNTbKPd!*50yOBn}YKV8d z?q7K7zs`LEyeiKt-M@#_@2WD=cvqS8Fqv7<8+|g{*&BUw7-{s${9L>DPI7h3yUwd~ z-nCra-D>T_)m86Wt{LuK%QYqMTK@I7pmZdz>3G-j>7aKlpI+@<%arrIYnhTkTFbxw zGL*JuO7}=;kFNFpEVgB#9Z&_iSC@&ed2~Bdc}R^4dx2J zq2L|ihVFZSMws5$yUyus^?=X1YnlGEcZBJOkhXgI+un8F==ZMkMn2#6?maiQyla^e zN7~LA=IWo(-D+L8GrD(gZRbs9J8v@Ed6U`Bo6L6JWVUmr+0L1H?>U-T^y>3rj{Irv zk@);Pn!X+R{BiI8CA;r&IuFV2-s&hNyXQ!Ibn}_sJ-WF&uaCMj>*nsfZcE*HeN5Vk z-j=%a`naoE-Fe-Sy7T&kGzYySt@Up8ErXp?2IbuSyJehn%KLsJt?=Di>=eYl-M8DZ_?~$0@ou4`qvln`g#B7edXF0RZTSt1g`qu8;)v=z#@$8+I zIgHmkV{?}9%0ccP&8Z@tl{s~!ZJE=ZFPdk!nRmR~UZiQfRKUBIRLHxQRE%c^ecP0J z%)8Fi0q;KCo_0?0>$%|er@ZUD{b}zyZ|`oWw(NF}OK*g^ewwyy?gsA&cg*v)JIYA= zenAdPUx+g{B(-8-+bn0?^$X-cj(^z<*pGl9f`ZrXpg&{cbW0-GUMH4 z#=Gkc?+9tGquvPVm%St09rTWHcNA%l?v5iJ-MdprNB8b0kggHcW*Vqq8idV7rlct-hETNBiz@$ZZ$&2 zkF?HA5NVy62+}$;Nu*T8c%X{3M-SAI_UM5Y(jF}tjI<9+=6gqY@Kl=i;lVJ{IvKRSw`=zb6NLD=o~HMdg$G=mM!#d*)pzx-aTtsk>#{4%gRXGvdqlLW!+h)ZCP%P z{Bl0k^{#-2yG=*_;p@C3JUrVw!o%Ht*E%1rc<+1y!0B6zS+bX3p4SPtddvj~(!i_piU| zqVxX6&Ad|k@Wn&k5x)4gcZ4;5?>g69gEU{(Z1RrqrS7(9onPwik;eNH>+F59$#>VO zJ<11>_9!1g+J`)6v-d>yufOV|(H~#U)96X}Y4q`}j&qtL?MHoFeYp=hRT_@^O6If0 z6Q^_JzvmwLCt_@i_UMU{_pCh8@b1GCE$=>j<$RuWR=R8XN}Q&x{z?vM|Gr}8?pluS zpt8H%+J(GQqp#g;8l(5VSN!S-+B5EQUmfTDmhr3Iwdh!XwL9x{tiM|GZs%7yN4@PV z%;U)GXY&R2y|>kcqu%rWAKj}_+xZ{exuh#@-RVf9uj^i88hu@NChJJ7TjyQp*Vv=p zo#AWO@JfyFweAtrI=@!%uJdb8d)N83liqbcnfI>c$?o22JHOuDGOhFLjNaSMuXoR% zw)5*|&adZK_qKEW3|^`2T;JU?t#f_%2x{Ngzu;ZxH<*#VyW%&R-nA6FM`@3HZi{K} zJ5Z4kdhdWHq!oWUV=2j z=I&N&gzn$$=v_JA=U(31zwf7crS|Xpd8E;|m^rv5LDT44Qb?n3S%EbAmMYTdKRClX z`VYEWrV)PdHq!o;&qNxbd_K|$<#9+Ol)GE45z5bdNBCiPJ2k=&yIZDp{_qK;b^dTO z(mH?mBGTF18blgl>tgQ+Ti@}%PyZ;)D>dGaGT!&%A9dHM(SLLZY4jhlmfq-3&+?A& z3`f5AJ4(-(5uTatUFS0kz3Y4?&vJio?}N`g$2;DQQum6}-flDdw{5O>^k*4;&~|sZ zXL)7sJF90$d%vZ6HtIbR&&G|CMrot0(UWYMj^MNAm_2Kb*|X-DRi=5jy3+Qp<;O8b z(07MFX7t|gj{G?9{m$ygFR+}>(T}^M>m2=<(Fgs^JrdgkG#$b15u;V!ZTZPW#&iGM zxqd%kJpF62{eHr%>vzIk=T8{D_j@cq+2g%7f6_FseA}z%{Jf{W%U#QJVVZt|`rI|h z{g)~FJ@*9LsiXTGd(_*qpN43f^FQrgIX!ik>xu33=pcVRK|iVZDO=WSJI?2rCEYFC zaUD%ZcgJj`qq~Dy(3`D0sKDVj*UB%r9(q4*`9;NhXZXc#qwXC{GkItC+-hd+3?t2~om~CB8M1SOcf4PY^RDHW z%<|rS;+Nbpd-sW7zU;kE)Vgy*IU;YL9+Z zVsu@_zdD3;74JIT+je#LR@<_xJ3qB8ySi7gM&DKATmFx@SJke!z3tZ{kgl9x&-Wgs z-Hg}UvfXi{>u+}&Y4qJ$q|tX5kVfCl`Rk4Fn<3s2ezS-D_HXa0NTcsP6Y1#g4I_=d*Nnb* zpLg`%caNt=_&sx}w|_6P&fYh4FS2F5&qpuDxgPX0h8NQ;r)_!BoaqnSnI3USUS|`-gkydu5kd zu1VS{6XwDx9AkD}FVWb&(pgYfcTH%~>)>pKa%|^Q!;Z?Oay!!L$Mk9=_ zVJ!>X<^H_HyUsszJ@osV+DY%#-{eZ|?R%3?(7j{U>@KH$Z&r}@z4;=0q$BvM-@BGq zLo^+iS0hNr<<+?NNW8kxyPdCg$J4&Q+8wW_hF1r<^YxD4LGHV~{X58!=pE~WW=^~| zm{;mdzt)|tnjx=of9dV*Yu6#|?Q3b)sl9!zY}V4fzi4k?V>^3$`&!$(Er-tZZuOxs zYtdOb)SZ!`n$AP3I|nuET2b$|v}SwHLo4UqhgQj`X4GUnow2`iHTKTfU%7ww-qHVh*tc`bZXOP8@mKySGPnc}F->r|Fm-;r#Vx!Qaew{w?fX z%ioygz3b?2ON_clLU*aZHH_XtngwqRW}UiH--vl%`Nllc9y8)>_C|Pv5qd}Wzs&b2 z|J9-Cx;;9;yYEMtpS^uQIvVM^J<9&|j`h*JSquBuJMu>>-XnjM!Hnd_V%w`L)yRgA=at6^k$Hz zqx5Ekrt9HNwzD_0-b{M8<;@k|J$jSzdgu1ds&^mWe8aokvGLx0IJU*R)yG(_H|LKv zk+$1g`9D#|Y1|~09cO>Z)jL7QdHH{(s^k3mW>^0&={T=erKaP&_TR2fGTvXb&i}1@ z9w$R%$uUT|bvPUY*X-y71j@JKbmGHwqX9jY39Y zqli(|C}tElN*E=LQbuW`j8WDoXOuT87!{35MrEUlQPrqsR5xlEHH}(EZKIA?{Fm~c z^Y4m_6f_DMg^eOcQKOhq+$dp`G)ftzjWR}AqnuIRs9;nyDjAiHDn?bKno-@T zVbnBg8MTc%UJdXW`HccbL8FjS*eGHYHHsODD{@yhQr3K)fq zB1SQzgi*>UW0W&07?q4FMm3{`QOl^~)%$!#0i%#n#3*KzFiII^jB-W=qmog@sAkkK zY8iFBI>ToaFbWw(jABL!qm)s`C}&hKDj8LbYDNvCmQly6_xp?jMj@k!QOqb|lrqW~ z<%|kOC8LT_&8T72GU|ABrq3u~6f%k!#f%b0DWi;0&ZuBiGO8HWj2cEQqmEY}@EHY+ zLPimzm{GzgWt1_>85N95Mirx)QNyTZ)bVPd&nRFNGKv_*j1opEql}Sx#~WC3oLm0Q zeQ)G%*f^&>A@M$aN<-qE`LwkXBX}Ak9ABWud$FhS?%Ua?Rxpjx|EbRbXYqdPS+2@> z-_vq6(;Bqzs5MP%)4r?L@wR}E_I^N)xq*gJlM$;$0K;5(^O`qxlEz>%V^T=85I?r~z z?QB2W*-{Ib7IK`Q=hVWcMIC3*dbOBo3CH<%UM*=_+HnT{ms-ZO9Bq$U-n1g^6}6IS z6^>^>t!i4`aTe>7@YxO1T8?wp{aUW=ZG7G1ob_I}4f2^5aGb%UKTEw&% z>wH8lZd%fDzBWTGWm?8@)=X5(nwEE*s~%JVmcy7eB827=8w9dF` zNtQcTEoEB9aV~gOEo)ldafV%}RxqtZo2phetx9`Yt!7$-@$_DGZqu~3o&+sd(U;ju;X0zPc0WQE#^2o#;CG@usQDS}c-x13w7~(wOqrr7VFeCJ+$p@=Q)n^9o-Ag^O+W4InB@W zf~JKXXOrgjc@fiMj`P%)-EBE9Zd%fDRzIqiGA+Y+x2k1L%hNulRxqu^X9Vs0d1ce8 zG(9h!S2L|adqwMPn%1TrR_l1%`99j4Zad#^T9EdRTFA7B=`T0@P;wVY`M+9%bDrj==*QLC6%qur!dH?2uaskKb&&~)8i;CR~we%exZxeEfO zg=m@+7lciV(w@+AG1C&XpQt5GOVji@^@5CPIhy9g1$onoG(9g}P%^DT(=+=8RnzJ; z-3KpdnAYNR+ymOqwzmy)Xu76{`AiGYHoMCW3z`AmX0glQ?-MlF{%Elbn0>4iDd3N*b3Tv#-%OxvY(R!pnW^xe#b zb<>(O&A|&>rgdm~UkN$h7V5%uSg-wgn&Q*(3t=X zF)c^?gqF*jR&<C5k>hs@49d8@%<2>m5g5iGCf;`)N-CgJKkZBQ`uA|{m)8e#WYPp1I zDVomh@U&@JT0_g_Oe@gzS#5aHv@-KW--isZm{z0d+zzjs)})=I@mi*JXgat2-DS_` zl@I%Am%Gb-IAB_c_9?ZnX;IotwU}uMn%;{)oHQ*>yHCqyOv}-hspU;8(jHSQnO33w zhg#LNI_=wP4bxh*vRd2QMmV$|yKRKev;ge|wV-KX#~H5cc0|Oq7;U+hi<_3DeNioC zT836o%bJ#_eM_xiT8Xwrt!!GA*4w|DX$@L$|C*+?X`1sRI^OmXA8o%o-behV1!=FV zg-nak+GAmA4InxTX!CJ0pTA8MMeO-nn@NIkoa z%$Sy=>Dg^$-n1g^Kef)1X%$*st!i4G_KI4=v=-kpXwHvpd)r4HTH0OiqdwCDj&t!} z)PkmkY5%PjF)ijeqx3%g(YR?zn(nP1O_`RV>3#a6S<~{g85*x(T8TDSt!!GA_M}?P zv<7XHTGO;PZJS!h+rmDY-gCl!(}J{)yIeSAT7>Vt`>RDwi_`SkFq|+gMY}-DrA^Dy z^qdvWnO309({e@A%CyC571L_8Rcdw9nzVmcYnj%eX?|Ypc-zH(TGL(b;(%!(n%<`` z4x1LG{Zq@uOiMVJ5$SLOv};qz3Ihy(~2~GZ+dabw2I?g`ZcYyYFeG9 zXPb)~rnP84&~j~W8|BdS{xHgCT7ahahfzV(!j3an?|-8rrp36XFLlQo6*n!(_e6R= z8qccw%QK!nhmR_lR&t!Bx`&J^n^tw42M=jmYNj>#PUmX1rfF@)+pX5| zwo80`uc&>$#BW-V?-g%$m%AinTEua_@e#GCX>oq;)LSlLTFP;*b+laCv@F~C2eq7O z1@>M0a7od$vg3^1qva~5)%b4v8nwDl4mpkGbm{9WX6K z(`VSxVbh|tnwE>1mT;VLQ`C~CrD->)WlYP_W~=2*E7Ejd8eKB2LR+Ebs;1RxUs7wB z)}pObYkS+r9NPEX_A#Gn0h-AZg|Zd#J2_l}RHOv})8t$ZwN zTAtR{cm>l+wEw48Hm&M7m+L*}V>Qznw6nBa)3i42e6^0Zjq%aKZsT7T@qEr16Qt?+ zjDKgu+ak29v|QA*IBl9*!n71^mRj1hEbT6}oM{Ex18POn%CwwX#k3kt_qs84)0(tz zYPpta9oqNZcB$iSm-=bj)dHr4Xunbmn--;MzFZnJEkVMx9(iW(tOv}*pdmfRjX?dFNpOJ!TCE9;zon_OiG(8tYYNj=4Khknd z)7rGETF2Wy?xX$2Z6EiW7NqT03z-(7>3RO+QPbkIx3yftw3Opqaf({nv@Go_YB|#i zv<+%S)5^5h)GDUcXu8*Zylz^Pc2di=OzSvKRC9N%<85R8G(BIB4VV_94RzN!Hf&my zre}t+G1C%`vo)^elBT8keH49;8=EmL=QuOOOdx&$Ix~S=!Faf~JLOcev}kEMi)WXRy=N;-)2O=c=Vl z%g{comNhL;o2*tatwj5^TG_NJO+U}MtY%t+ra6CE)3i3 zA6GZ6Nqdi$Ynj%e={|qC<87DwX%pP#E)SR%qJ2&+Y+972?^rI6nU)-bI_)BL==?QP>7KC9{T-*}&C0h-=B z#s^Ic^WBr4!Nx~Si#bl>es^2O$4yJJ+#6~s(=sgAM=fhwp5^|jRxqtZ)BcSwn^vXi zeQbQqv<6M{b9~dZHf^8A>v-E0KAPT(ukf1|q&?#2nUd=XoZI`f1;F zmx~5W3(+(OqhZrn&6J&5E@oPSwpT4_TAKEXTE?^-t)-SXtw_^7Ia)HU!tXr)T+3BW ztJ8L?HB4*K4yd)g?Gp~|nA<+#GcDjapFLGAXj+&SP>YxrqYYP!o0g=FQ%jkap=l0& zB5PWnrsslB6ih48Zqho-rd4Tk)oP|SXp7XErnPB$fA~bl+a~yUX1K^*Zi3&mApeE- zhtxu*MfjcI7u2Gr#d%)Jt0hcJ@%y`9RZE+e<#}nfTF$fr&u4m{o=`Nc%zdKQDyG$F zpVT_*rZs6gW)oVbb!f}n<*szR?MgpQ`*3Bzv=D8RmJ6E}<({nf+bd(HC1`p^xiV>5 znx=c*l^N4=G`&w>nK!LSyIk8+GOa?pO08;Iou+%_l?~Hcw41eD+uJ5Ov^(84(PvtK zwn8mvT9{T*iDilqvC(rMoS3BT(Q+x%GPFOcWlhV|4yhGPE7AV0RyM6lJE2xH zt>HK~{F_?Sv^LGJ*73Ga`e=jQ_DR2KLE43CA=4tXOVpyK#cBH8gHI+*OVO^;a%t1D zG<^>LWX`k#ZMK#xnpUQz)heddXiL=UrZs8$yzn1tgHpx#by6c=2FfGJ) zznW*0!lp%O-_vq2(-O3wswGWJ(`srN({i-mtL05A()64)sbpG(d!3%oCRI(V({wMG z)G)0@`>@7qd)ucR+8DQe%4b@DruUUk1x*XnQd%xzT8ws&THLfGZK+zyvL034Rw`bMUI9X=(o3B;Av* z%9xhpzroSH^{TvSMVjuBSCvew(DWX6Rn@dQ?H27r!?YGn?{QbPy=}5X)8~N6KGOoU zhuw8f4w@FGX`W4vm=>eyS!#0Jv?NXEVRFi}4DBh6mo+U<`+-`)v=Z%QwX$hdT1TyB zT7&PiPE~7~*5>DGx+hQWc-z%Jny!_r{iX$JdX~C6WLkvwtUKP-QPbj%bLX3C3DZ(M z)4p3RZCaK#P%UR#f%Xx#qG@H?Woi}EYP6VI-Lxj{vuZ8VI<(Kb?Hb41uJP06sRc|6 z(e76Zn---#q82kPLHmkY(zG<~TWT58a4w_L&x-9Z?IK7N#9ni!Vgo~C{O zbiuR|ZM@c5Hm%A%Qr{(fx@KB~_C+n%G_6f5sCB$;ijSsqJH>BWkf!g*ri4t3IL3d*v;ysGT4&L;GELvDO{thxqiKFlshifM zJ*RcHOzY5o>9%VfZ@bn{+p88ZEkt`oEo@qpruXS`c z&a?vUM_R6ETAAm%ZE6+MYW(i`d)4ZuHEEZqwM^^K#<^{(<84#@v`?x9ObgMbsD(|7 z(ymvFnUtvzOD=I^K4jkM}XP>-?q#X?m`^E@WDSrt9yz zsA+N9zq{jImoP0w+pd;2ElbnA?z)_51wN1UwzFtjnWp>vbrsWUG<`Y2~ne3inNHXJe!s^El<<;rqc?hm1qaGEoIZHG`*)ztC`ktoUixS za!u3Pv>|F8Z@b<{)BEQ2e$#?9eW!DM$g~LU8h4%7M@@^qMm1#PE*H=ud(bj0Wx@k?CKEGezGOa`Vw!0j=;Cb#z_-QYw1xyRk_N#?W zi_%W0#Y|&}^=GRkO-s{s9VIfR zz3m2vcFb)z_)H7X^bCDN(6lhWORQ(;8zQE~XlH7janq8tpjyhbjN^Rk`)XO!^0e30 z3Z|9#@9p2GRyM6l8>ChxQOjZJO>`H*~yhx{tr5p!?u-ziC05uCeJM(;~Fb zx!W>5YFeE3fLg+|6m6AS+O#Zft6I*q0&Ry{(X=w{S85g0YBW9fOs|{Pq&2l%%d`&d zA8xzR@wOZN{Otza>uwB~7NTiR+!!`3O8c1B88a1sjK!Zf|V&xn{7 zqkT%t#Z61n^fQeaDbq5vg<39aTAsFAtzcS-rq8!C%BEFm&uY1vX$_j*Q)e_yYtvrS zavg8G$w&Kdx83A7E$BF<0cs)BA~Zes+!Qq}PMe_R5~ihSH>;&h%hEKLZpxWfpnXxx z6-_JCHmFrhtI_m4cvIc9CQa{EH?>Ub&~#j8I^H(Z?>OJpahVw~EkwJ(-IkeQ)1tJo zYBAFiw9lv|O-s{es%1>e(KOFy=1nWovRbZWT7~wQTGg~Vt)SL0twqyk^qFmM`@BOd zyUTsvXIg;voLbPdFs-H*F)c>Z{qys2(~`7z9n%?_w&X|^?HMP#XX+{3~xIStn(<-#{)vBh| zX&+T&o;5H{TCU@5xA+;)rKv>@$GwUB8M z+B<4d)8hQB{6)2dX(`$(YH8E5{EnHP>u$-JR-gs6T+y^LP4nfJifJ{P-g9oLo7SX# zQtND))}iU=f3qELo9(CF;Vw5jU|NXpVs(yYhfRypexv1LrX^^9R7;wccAU!J)H0^! z9OuXSes^}>v?A@}TCQYTg{Es|cGa{xP1nlohG{KYR_kng+pP{wKO?%;XIg-!Ie2T( zv@lKkcWcD7811+_-mP)dl8&?e6t$FT8JeDVZ_S#Pr=6wc3Z|84L)FTrRcU(WyR~Lo zgBH$W+5(}J|=Y9Z4iw3J%Zv^ecvwS;LY+H$qDX<3?n{x>IQ zT7mX;Emt(HO#8lC#k3l&qE)sm*AX}aET%b1p<>6!huylF-L7PpSsZ6(txG~FX_tD07)>F4OTHB4*K zbgkUh_O_Hm)3uWFnHF%I=XI^5f~JLOx>iyV(_)VE3tbPXxM@k+2=|z!7{2$j!BmE( z>mijjEl<<+kSdr~qQ$k&vT0S?47HkR4chH$P1D+r^Sk|O9dEnc=Q#CmyX|(rX+hc# z)Iz339H;i6TGX^S?Hg(d(^53e`PqE<1jM$^xaZm*lx zbevylPTbxytwYoM3jbK1=iJWq)6Q|nn;S4KMAMv@8#XOU)0~(aGc7^8O6yFTmZs^t zotrT&N1LPN@}?DOdUl&zGOa>es^zMt)oEW)YnaxetyOD#+Z_%~&(L@HObgJqxXaxU zG%f5nzZs|&F)c>>kXqcdByFTx%Crn^yjs?@JWcn=I|`*oiqG@H?`_w9?)oACc)lF;CE>dfm)}f7Y+ntWL-RY-IPz#tAqD@f?n--<% z+};^8EkV=s#GOgg(zHcdXU4P~ZG~Fiv?5K<6L*$OtI(d*a#hpnw31rGv=;4YwYIm- zcW8R{p6@d)K-=vuH$P}v*l}Lc_Y?CYrp0J_KARsmElJZe!~B$K8QPs1FKb$!rq7M@ z3#OH5k7>EGX;s=rwVG)S+BUVOX>HmIY8`L8%SU_FZFl)i3-T{g&Qc4Z*;1HSZk71= zVI4iG-W8=iug1R?>*y%m73be=S*Mmj>!sws{zXxz`@f)bSNC}8Y~GbNEko0hxGVdw ze?!z=E=Sw0b>{gOHycucrf=x(D$;ZhxvPZs>6K-(T!rOybnmLt^z3$5&AhU1)G%A! zFQ5s%{p_AMteHnNkX!A*I=M9r?R64*$HAS{9v@a_Ai?kB&(N*6Bz^+6k$II#L-Ol`7~BsmfY> zQjOM@>NLGi-`zlc)tab})MB}}r8Z61*xenp$88IEp|e)<@n6>HDQ|(FcAZ)PO_hQu zErpO~-GVS$t`3hOxhFS#8lA>si6hoR5_ry_BEy2GQq)$@!B+&=e zQfzi_gf!~yQ3fs4E3;^UltaC3$)n!>70^7rvWR;7S3lK<UYSIiFZZTURxOP*&+g6e#G*NIZx-eB${eq(NO|;}RA9?=h2L95y87=e zA$==-Z`pC2)3scM-+=CIS(SC}Rjctz&9i&!NHgo+26vPT^~xsS^Xcce_qKTD5w$iN zAa#)6)gs`GlYB_`-9>)>{`@Spfa84sGAYRDngxqOMq#4}|8mj8S}w{6K`F++7Nqyv zMRA(u*`fr}d0&*|xah1bO3^gy7Nt>G>&)<%sK!cJ{x;|#DQA>toy*kTeSYSy_UOI<_lb9_1-ZhtE%$|3jqVKhg^`ZneGwGZa#1uvilH;5I9eek zP)SO%vwAzNF7vjl>ts4$%i&eezZjj zu+=}5g0$UI2Xpa;@bt%eGdRmIn94QV?l@h40ltlfd6l)nKrTLoyy{%@KPSGsL zWYHSEGKX?f9z7-%&^oDz3Q~!`Ec=jDcATqqC(2Z4kEm67mw7{~@pN*VNPDT{t9<0B^z*pI4PL3A;4E%( z1^ka**+T!6+PqTpY;gzaH#;717~#F{D8v~u;|8sLe<03#_!U|%!M2cuE>6KNUAg+;Wyz&95j_!~eyi?AR znrN=nLi43IS|D}MB3DZsv{>??rIH^lmjY;&6hyj1F9{*tvzCO><9cNTt(Brk?=nkb zNbl22;z;k)OA=_KmP?{dQVMO6(rBxcLEEG(+AihL4k?eGmkLPlD@%$<_v9rdv`4Qj zqrFlE?U$Vr8+t+HP8{MiH=GwbWCca<5CBmaP^>rPD(z<`CuQ(kNQdh)L#ms z0a6H^A%)REDS`$`Q8Yw~p`lV74U-aRxRgXAr4$+^rO_BEgT_i(zHreId@#qI;eNF| zSE{bf2MfGXXXU{n((!z-#QUG_yAPI;?kEpd_`tAM>#U-6QVp$_>S%-1KpUkd+9b8m z7OBlU>=LQNK0N4Zslz_#{<+kLbiZEeM<3KH14#FYr9pI|S_pkq3ZqM<2)ay)BHeqI z#?YtK;^=BAfv%O3=z1xIZj{pK^HK)gB4yESQV!`3wlt4)$6Q)K_vn>Hq&w!)64HHe zX_aC@UdTXhn-dgIYx0VLd>{;4GdM8=hLVAB#+D2c{mUYmVTs`EVFH1i3 zRmqROCI!$pq#*j16hhyT!svTa1pPpYq8~{y^sE#|KampXXHt^S2+v6=p6(x)(kL%w zcx6?}(w>lVNY~0kdAjub+3r7)T=MbH8% ziWW&Rv{;IxrBVVdmy&3eltMax*)-Bw$!5?xy)uh*2g~M=?qJzG(j6>YK)Qovi%55{ zY>Dq}ey4So(MwVV{ZXo-SEL$xRjTt%@L{RJnSM)Z@@(@c&K-TE z7^9Dq;yjm+ml9}#lth!H6w>@$mPS+5GD!1tSr%!2F3X{rdSxEXk_u>!R79GQ%Svdz zS{Z3ZE~_BT$YoWe8M&;6mTI{=S}rxvDyfN9OD(iUY9r0oWgVp1y4*pUt;>CAy}R6U zKiVJ#&_*eUG+UR4&=$2Y+A2lRHYtj>OEI)VilgVH1llPj(Jm>4_DE^8SIVG$QWou( za_E4RM+c<>IxH2@5vhcZN@a9Rs-WXi6`hc3=%iHV=Q4ey2I?y{QGcn021spmhSWg= zT|MleL6Q#*k^E?=6hOnIAQ~=(&`2qaMoAGgMv9`bQVflk;%I`DK$D~-nk=Qz6e*3S zN*Odw%A)B~j&E_ElJb22ahg;|dwKnQ)X9wNxwiOP#Q}UsEB|lmw1<*<<$Tt%D z)^07@QVWe-ORz%R-S}uw@QVhK##W^mHlt8CSN#v7K$Sy-T79Qk?wpeD@b>~l~trW-^v=&oo{6w=}KMMK)Um-Y$DzHR<@Atd@I{X zcfOS!q&wd#2kFkY%7=94TjfW(^Q{VSXZWqVf2)G%?^1|wkPk>Xk9>XHQ6R=0sUapo)}4FGwj=lhUXzWzdUK7ImZ?>TOG&D?r!#sshsWzN(0H zy{{^v)3uf|@=FzTrc^}%sfKjDuc{+m@2eU}*ZZm_()GTog~D1(8;zDaDB|i72aS__ zC@T5UL@9t`QV?Aug-~1yqwAyyN=Q*OLyDoK6i2hA1WHLsG*3#Qw3J2*r3^DfKb?Cd zi=I)-p&v_m^i!#Tel8W!FQgLsl~hK*kt*nSQWd=<)zGU_9lb6!&|jq{`Y)-4{voyb zG_gzSpna~`A!pWp$%k|u<^1TdS^yo9g6NnOLdT^rIw3{SNh!*2Zt6~yi*fyB)#6;! zf07bh)6Yvuu4#RG$)&iaTWV?k`^MgOW>9ZCv*@T^nd94Y-4%0ro=P;!a|NWCoGT*D z)?5i`w&u!6vo%*inytAi(rnGu&`gb9N3)~`njYzog9(B-S$%mFo zem?){NIV)qI%AIpkQ*tLWzH}&Id_;! zb!%x$l`1jx9NJRdJ;OP}Gn0FUXNEh&J;Ry9J;QT{dr$5e=1%T2XozkV6%`d*I;EBB z{eJiRT|d^m&-3g0tnXg$@3+?az3;nUNKAuQhig83Z$6iV_fO%oMtJ`myk>ae{(G(! z-W%bw6z;g=!Rx@!{o(F-t_xncJD%%?7w(Sd((uCF@mwFgaCba6053etpBsV~p5@PF z;Du-TbEELWv;4U+c;Q+8+yuPvEPrkaUU-&2Hv_LbWIYS7CwO!4!n5bOEWF&*wM53%mJz3B0hI&qwgWHSv5oyl^)@pMV#hOV3xq3-{*pHSof{ z`FtI`aBn`JgcqKs&o|;{r+mxo`DS>3W_6_`QDU_47mULI-Wa@r;7!0A4BiyHq2SHH8xGzqz5@;f zZw}r~!OOzCC3uVQ?h4*AyztZD^Q-Xgx6k@Fz#dj_kx#z_iuw& z1@Di7R|D@`!K=fcyoTpse-eKx8=g}Ajrbj4c((R8;~tw1=e5F{30?}`Z16hZod{kR zyt&|Y!wb)){xrPsBj6uc;S zGw{lSHw&*kcysV7f|rGt2;L&R%HS=-s|wyKylV4)umN68@Jis-1}}nF7rb(K^}$QP zO9rnBUPJI|;57!X4qj96lJJ^?*9fmAc+K!ygVzeLEqEz-so-_MYY$!*ypG^?!|M!Q z8eUiM`rsW7-T=Jr;0?j+30?+XI(Vb-dV@CxuP=BL@cM%{1#cjDGw=q3Hw$klcysWE zgO`Pu3Em>Sk>D-E8x7tnykq9QumRp!@Jir~2QPv*5xjDElfg^iZw-XEgcqvdg|~zk zYT$*pgcs`Ig|~zklJLU)_d+AQuZB6B;aw8ER(Lytmx6ai@H*h_3SJkytAp1KZ-4O8 z@NNuVAH495{=xvf@Qwb$5WMh>{z3*`_(p$W6yAMdmN9q_25$o1Bf*=3_gL^|;C&-_ zv+#a5cysXnAb44LPX=!h-qXQbhWG8@t-|}Bc`t5&_k8e5;Jp~U2;RRBUOBv<1TO*a zmEcvu`{Ur%!26Tn)xrC-;3eVxdGH$H{blf);r(^+TH*ao@KW&pTktyI{ax_7;Qf8@ zy5aqg;HBaHL-6|G{ZsG;;Qe#(hTxqHUIyM9!5fA5cJRjFy%)R*cpnCD3f?Edn}PR> z;LXDORq*EEeHOedyf1>ch(8A^2;MTh(}K4O?@aSh!iN8RR`5#TZ3gEs*0zTgePdoXwzc#i~c6y9UO8-w?~;7!1LK6q2`UJTw0yraRJ zh4=4+HwW)0!OOyXC3uVQ{y2Ec@ctxttMLBJydxXn{dw?8;QeLrB6xotymEMd6TAex z{}#L|cz+kX8hHOBcy;jpDR@bE{~WwVcqfC`4DXHLwZeNlcqw@A1+N1?_lIw;BVF*q zH`kGFc;Wl#NE%-FK049|FMISar4+nhhZQ>D{Wf@A8#esSdS>15io$1Uc&7)i4_^4G{G|bS z;ivMKhTw&t%3sRB`${-(6yBELjll~)mA^CrZ)^B$3f`r`n}K&(@Mhs%8N4}oR|PK% z@0#E(!rL9ZWq5mow+iooc}F+EyD4}j*!J*bI2yqVPlluA@WPYfXaZh%G90af7oH49 zYv6?^!_hiiJfZfZNqC|5qmA%F?MIv8h1!p{!V9$@O~DJbAMJn_YCqbAf8QqDjYqrT zg}d=+8eVvhJlY2@yhk1#fEV5)j}E~L_wCUPyl~$h9o>L`UOaSZ41bH}_k%Zq{|Ni$ z;7uX&$HAMyzpM~`f<8J6FZ=|3bPoUO$^RE3v+%}# z^?vY5;D!5PFoGBEhrx1qzYLKHc;S8+tb+I3@L3K1V~D)q)xj$YUJ~Bv!E1yU?uWr< zc;S8+Y=!sb5SfA(?uWq+c;T8D?1C4riNS7o;hGps!wc8MVBdxf8^ZH*Z~*^yN_e{; z9D=w0Sq5I%vB6Pz;n_Mk1~0tb4^F@fPujsLc;QJqI0G*{-3Djjg(u(O9K7(v9L!>G z!|y`|7vY89GYl@n3(xDpRe0ff{X-P=kKuX!!xCIe;rAgwjNpaehy1V{Uif{;4-@dh z??ZlA1@9c|^$%;{og2J5c;^Q%2`~J1c7r`5a_p9KI!TT(D6Y#zW-W2}X zgM#4Az&kB?v+&Lg-WSzv6$w5#@ig3{D;ea5+rAI0;)IZh4xYxPvZ&?ncz@c#;n+z!M4!+UZcOm17jgWzkVAA`MCJPynA8Gjt+D)9-}E5u8% z>=$EJV7A1}zrVfVt77J}UCbWt5I4ZGcR2T3%Ks2-fw(ztwEl;Zvnf=e4Bk_Nj6( z&%yjp)jH<2afbAESf0-q)@%9zSl7l=8L;Z&-xJ=zc^N+iqwD0U)XKHCjeKF{_#z2E6WVCC~{2CRIZWxZ!&a8A~xd*s;(Fz(rN60qTj zit2bh#OoH-CBV#k1N2H5)0w~N%-{4HrzgS17(BNLCcXxW>RQ2Z4n=is;Q0AmRL8xG zuce~8H27)^o;v_jC(giLBOZf|pZP^~Q{d~QABWv7o`a3QJBsR-!12Bm)vbZ!`>yDk z2+Vr0)-|j>eufuaQwxr-!=h{I!SVM((KW0kz88wFX$Gs7Yg(M%31)A%!-fO%AA_S_ zUBmqCT<(kM+!xa)!Rqrhv*1z;<~&VesWT zx7+DGPER|%AF(eeegKw(ISj#=&NW|@o`JO(_T(w))3E;}o`GfkoM#^9CUF*4J-luK z9N%9>*DZo?#$fz1a=R$zdc@{cimPFNS6mPKtT+jq7B|2?BW{GXm?m&qdK)a`uvR^K zrFW;Idh}|;KIuKM7Lx`akj`Ey|9bY|HtB<~w~E=fX7Mnr#b>~GNgsi25s$)tUCe%N z6_3GQEFO3I6!;S9)37%Gaj>r8`dP59f%+5R%P?5)JdBtNp#Gk>1Lm=2iS`w=(|{tSaUuZQ1?r;vZCcn-W#j5+e+cf6wOSJ!zDKF<3}9J7b# zMdET;=7;(Bp#OS@DcX|&$L}^pd(i(7lLV{(d$1SwowBD1tb2A(8~A_2;GF3BhQAW0 zVNLIKI{W;m7>sA1k74N}^zDGY1lBWo5BrqQ&!D45dnWH$1IOR*MM}` zcLC2$vR=)TOn{-EGYlIJ#IP2vo8-P&e3#Q%qv>g=Y~8&RV2ht}`n1z$oql3n-`5D%y8D>3=GiwE^ErP38;+=GAA6{J_p@(`-yb=h zJv2Sx^h&2UfVJ-aCU7AJYTwTuYA^P)cGH=g={;awWBb!!TdUXU17POFIoY51{k&-Z zJUD)@E84#d*0~LgRXzuSGo8arz`(+{wuU_L`4nEQ@v{F1KU~yP9Jo7#_1#L z`hjw=ayyW8dOGHFW?;h+6&+xWTKB*rSnD2Oy{50M>o)*Rzk&T${0-e;t$Rbp=}R%6 zle?e6xg#pNu^OQHZ>$4ro*R=+Z*Y3E(_5TA4c59hvKGzL$oawNybc?VsHoBPxskoK z_+hZ}X*}li6JX8X$oW|_u9L77pR0^9tDT@3TrGv}s0a2W>Y?}s^8%(_fxT{h1oShd_V<#gA>n~pnu*2OP@Eq_=0 z&5%vMxfHCrZms~+M{YN>5BN?w=R^8-K<@;r=Qq20Z|1dRdK#?!Z)Uy7|D0dKh6D2) zhhy<4z!pE}^sLhtoxZZJA7swz&%sKt_Vi$bi)nOvD_A{0$o%zPd2kr4UL70*>-lqV z-02fw<#}+@#c(g;pXrJY&VcnDbdY;tI%_n2-sxGeo>vE#z-M8g{|DD#v{q9EST!~! zoX&bpuXcKk)0@DkYg4Y*;M@@vHT473|E2-3tu^TMVW*FPvDT*CbqvlOn1?yrJTB*3 zO4jvT%D|fcmU^&qzJ+^Kh=F=-JEEdnT|aMi{k+xn^VVSm+gc-F_A~c$ zY&;A5a4U0GKW}AkEq--fzl}YUejD>tEw|Nz`5ET9tp&znTAj|`s-L%|!RqI2$H3~_ zZBt2la%UA-eZDgZ zwix!@^cJw5)pvG+%Q4XNJDHpMeCG&QeZF(l>BpQt3080KoCfQ8dnfbP&pR!pVCB$K z4OX5lHBPT}I(uvJNvF4gm0L?ESl$awyJ{9x1xu4a+xg#pNryihn?@5B$FI*@0 zG{BhN=ydjn_Yz~+6TJ)FGvIg#T!O)vV@@A)`Yc%cd(RwL&w+d9!TQnl z2(KllV8am=-P;65Ip5n1Rv+$VPY}<1?q&YEhVM;L!l2H*{<63W*3Rt*>pr@7z{Rk} zEf_pE1C#q+0*`|$F{n?#Y!y$!nm*<9Y4D{OjOV^@6VJk4BIdqt7qdT>e>T?7{fM90 z5f$B63RWNPV|}`(?kfZ9=RW?wF$cZE=?Spz>-%cJJO{bmmxR%?;y(7-boSPC_SSUv zlk@W2P8hC7?t?L%y}ejEdwYR+5LW%XZ^-GxV2d9Ct3UURgRjBh{F5;I#m8X}h_kS_ zh?ijR7O%jv2A;bLlY7R1*Vgqmeyra!w-ti#rw|pjmB478woX=Be#uW)(-tohq` zE!dom;0G``Cl^yc+fv}GF{rbjsKb7tG zllNDHufV`s_t!f;2{yeMtoiS60bhy1_!Nxk%;63U>SHi>iYH-h-9>Qj{Us`TAOY5% zKEOU`Paoh~rnklVdAVyEoI7wX=hStcW4)U_zuX>Mm^XC)_wON_sH~Kr}sO3032a3pJ5pNO#NVn z5(f2A82v2v;0)MemcbPmh)I>eXune2bL~+o0p5?n7+!n2W>VEoZvwNYjA4y7X9xHq z>4#x?K4W@dltU^5w)kUUJ+D$z;N2LEXU=~ro`q!`^);Bum>=RC>eWLow}-eFx|bgs z0N<$iLD)v|5bRCjVc46+8Q6p35!hz&6s)e*hmM2)Ncz0fv*32=OR$~dRoEjjKU@mS z>jSks9KkSGayg9Y3Glrb)Y(5hLmsXHKPbHpR%<<+1hemqr~Nl#_Fs8E+ztL?>1o*i zC}xeS>k;OrIUnKtn)8u1uxjD|gR9N|NI&=wFtF|;?6cN=gnc%B$m#5}=^609#o)Qj zL3uth3w}~Md;2YM7WOIe0_@Y`McCe$+Y4d8D=vd&ewe?#0)}~zlQ1uf+hHx9{drD0 z=d*KJulBBe5^VEi!K?>!K3Wf>{2y%tEB?_mSn-dJfGvI!tbRV41*>n5E`ZgaM_HHY zOHN;Q`ij%nz?$<=DVVh(w?ox19pYwKi(#J1`A{0Ho*(K5vwoh-Jyrh?u@3eB5bIF? z4`sj>e++DMj)AqmhbEkU+{H6zJ!c-P0PCK8tP0Frk;7xvFuH#qs{uDkuZ7k9`&b=V z_wQr%VBNouCBZgNPt51#@&o4%%s&s%b34Z+`~Z3urT~M?eKDOqSA0h)_zVohbTH?Q zV&-W&^Mroh_xPC|i0=g3JY8VT-*MRK-A-qZ_1@bt0R9>V*Byb;`+vtc_-yHm>-;z+ zy{|rA2>vRCsOWL7d9j$aY!b7U&0_Y`&TVjd3)tov2HQNx!TRogJPWSIz*qM- z2G)1?6a8S-@&xD6x=&1kHUAT9VAOSf?!E=*j;P>OURQAs3tnY>+=qf!r<^|R^m%Z+ zF9okIf!T`6dY{wTpZGc~cx?#$6%4LB3}feJz@|@tEzcS7=@^X9!o=5S!E3B5!hn8~ zwHlX!<7=ScWI0%Ko=iBs(&<%Tp2KFVQ?+>!F2ZFO6jillT*;tpOfr^dUEo((`TJN2abQnEI7FUz6^tF zEyLLSt4?PRrO%gw&&ELfJbRgYX9Tl1rYD@vzM0Nmorl45>zrQi^d_+OV!jO=zeg3! zr<~sI^bYWa7@V^kCVp-d%=b7w4X(ss4EwxIJOOL^oYPm<^;4`%@uw1Cyq}+c3N{>3 z!6~k*eLTf=3;7}RG>qxJVAGj{_V?5v_yP>Z55ZW>u+vAu+S60Vz}o9m<4$KSrcXM3 z8m#-`R2HoMoLX|c2G$-0LX)_uJdY-@FZ z%P~;<>zy#RZg;Go|1LkX12HpT_4D;Puu;t)$TUpn$CGolEe+nCps36-4NA+eq zz?w6A*y(AfkAk&Ub_}fCvd6*7Ej#P<6HcE8tKKYgQ@wAphdTF7UJsh{%}S>;Pv!O| zb5jm)rk&pF^dT_jJbw)~98tlWt8i5BoBT{`y~P;mZ&5RyebasPRvGyBF>o!t#hfjM zIh$S$)_wF=Em%3fRqynq(;J=M3|3FxY6G8x!L_xadx>k%>cy$-i1`J0|}dXv*xm&H$m3owx9J4@^OyP9+JMf}W;sNmf`u;zbv5UhFLWxb|n zoX&bpXT6GlF9FuN?=ff7dt%;v8EiPBg7?@5&GX(ISoipQS+JeE0Jb?7!4|{1?A+CL zeX$&@a~CVXI(ISQV%TRqm)M`h8W=q*78}9(4qaq#O=oXSZw2f5u-F0Cb-S1b>s@ql z6m0SAmCeImna*p&^a-cCTHY^%t~}pQfK~hZl}@h%W6sUFdkmaAqJsB_0P4^CBVhI9 zedc4j+q?HCoj$c5{{j1>9)7@{Xr2!^KX~&2*lRU7xc~d!-fO#%uW6I=mgl-op*ZH=}S&``}J`Oy7KwBXFdL7&W|}acff`tD)^)X zj@JF846JoOsc?G2>D5l>wP*1eu-5&A{g=MX`MK^Nz=k6#SZ;))b(h&&i*Iv!%ITd> z?{az;taX>y*7Z+0Ki7Qv9)mHXFnh!^uoiP1 zY;(>!oxL)B>xr?yr?)u;95;srFwof1UeF=C7Zff64q!?{j)T z_-qW$GYqpyJOXR_sMC*u^?Qk5PJ#7a`pe^BJ!gJ75B@3!=gh)v5wjN4SHP9A{x9XQ z+r-o^5mz~#HJV=I^jfF0A3O)^{!0Ul&EEmuE}i*num5EXtiJurgwyB1>cg)}ztZ)85 zVZ#v>{F=3>SHDhxHP5drozA^Bo%?I?NvC&!weGLGz{>g8F6Un}XVVA3s`1xDVD;+P z%wN6w^*mU;`VDJU{BKIZn&&r>)61OBx-6c1#PiXs-_*gVmfy61mGf^>PH&I(&Ho4+ z4xBp*N45WE3~cj^JAKmWti|GIoxTdzx}O29md{+ypD}0E_*nw1T0W}+t5=^jfYqzd z+Q917XMHZ-_53r}^UnqmWAhKW_+hYm_1OeiHGXyiY&mD0z7Xr1=V8MU6|6B&)xK5> z);w$VPER_$$?45bp8{*$HLjs~e#`m6o8N;CM^y0J4meu(w>@Bs?{hlqHGK-K`F}eD zR!@G*{n9)3Zx_LOKmYBL)0dsT3fBAl=RkWm`<(NcUgC6K!^+|F2&`xL=T%@m!#{5Y zYu(S=z{=`vu8q$}oqmiTV=%_;_2+J{KhNT0%X0y&UVYAb zHUAe0u;%}w8mu|Lr~|Wp%>M=VUGsdA1Vi8a3)pZVrW=m-?u%Zq*7~9ktUi3v@ALtu z4};a`FGj%X)fcSS^l_(8I(-VP{(r&RnJaV7!pw`8k($1{zgPpu-^GROL0)`rVeb1s zUaK%Shw06jBmTWmVeZev!l#s4(|?5j*!Vr1-nLF!$%T7b#{4 zcB^<8*7S_i*^^5#IOhaRQhXe?LCo5lV&*njUAZlZ`(Kz>=yc}zuHq|U-w;>9zA3JT zwU`?4TheP`-xk-wT1*nWD813?%**sv@au|cb9y`YBk3KmS#c+<={?}wbr%)p&47QS z7}lP97(>s3e;e!hRj|1mIx5U(p6YWx*WIR=5!g$_oJW1mXTGc-JufJMiQlyf3)lzk zQ9&b^ag1S&ABcI)n9j9SZ$ZlG9bk*^1}lexA+T~NU~cjIQenX)_(}|}H3PFtd>q#F zS*NoW)90Mdyc#etPhlZUqd4K1HL@PY@bklB){+)edr?g7h`0~-C2_yg2b?|(9#qUR zr;j;(2K?_7!~Fk)cpf$*&cd3$1b#*OveVbV>?3N)JysN7RO<9{@SiCr0sFs-t6;~) z?XZ6(?u0!qW*=t7-A+$~{~zhB{U5}v-Qq{VjnY|flbAJfUgo?CqieW0f%}&-^x`^j zzPJ_EVvs|K>4UEOrI>5!eko>6x?hT?z`9?G=fGdb;QY+tR&f^A^aZCcf^WlM{1QyF zcp28>SHbb`t_zE~7t&8-sPxlH!K?xEoEAB~%;}ZjM==;v3v)=EgndlRIdqSo)(zG@ zej5AmiDCv}nIGq2PyR|g3;SQhtm|)ME}@wcCt#<=)#!8lE>~F62c2b_S@oPu-_3+I(^FNbKvh`pso_;ue~c-0;}gGtlRVzu=cKG z72J%$bKM@DUIuFDzK{oCw5O*JgSDrp zkAk(Qr;mfbfx-A0nBNf}hc$iH=?h@(=^4y_0t4rs5y5cp$;{{9iR)p1DsF<+ex1~JwJnazKFpX=BXObSOlxaGgiT>@l58X8qZ{Ik7MB6Gpk_K zt1}zHn&(XRP5nQUn)dO`l+)Xt-T~JBp2=F8F*tu0jLpNkw7+NeI6dw3elXYOxdTpT zFHO&YE$0!ZkH&gMu8-i{fq51IxrY>Z4Xo!_Y00`?TJH2DnEgTyrHwE}V%AhF?tta_ zjA6Z|vtH9#Z~Xh8!cykH4TJH=U@j5Q!CL%0*yhPPeZlFAPG16_gTXnMVK$0aU`=0j zI%_{Gj`>o~h`GMvzZ8KtNiTCc`(t_~n4e+YFI73c+Ua%Rb1@i`gt7Pru<4Cpz2|(X z1)RWOdq~=R?aP-kP9Jgl1X%NLWL?_3jiu}H8(E|2%pdU;KZ6ZNRJgGZ zj;@)FTvs`49Cmuf>D*I`A9MOFIR4qBaN`_U`EOhXGe6Y3aniRjW2CV1* zS&c3x1=gHrwL87T>77pR0jrj?Sc`HyE93N0r;j^*GS(|tYdE69h>cr%yS35o|f|dQi^iFi-X2oKmMpPG_GP zhwJB@Y8dt89OiF&ozs(G&c*m9nD_xucne&Tqdsq9ExMOCH9Nh<>22WC zF;L?s)@a-f*7dWgAFOBKreUz^-E<7BdN+-MD=|3FxYJpCxpdZ8AwB`CpTRd}!52th zg0*>8!52wiTi44dNiSm`^nFpr532ZKR9MD2^s`%8EqJ^12G||q7T9WWJM3lR!?2f& z)37z-URcxnoIU`)S~2X;HR4g&dNKQRy?7FKuXq~PV%VSE(vQPh{4Chw=fT?3vaHh= z!MbkC*teY+=);#wV0MYQ59|f?N*Lw*3@Rb-mm+K_O)v$MqYhfQ0x4<3} zx529R@|4rtojwF^z~KC2FgJ*2U=NBX1P4!lEg6-UHr}sI149qo9OT{FNa;}&LE9Z*iVBRx~Vb1zlse(C2 zvA%`*=)T^P0G}tl%IS4r&A+7{tlYLFo!$&iU|_8+9WWP)hhUZGmQk>sI|tUg$Ci1p zt($fFVythu3^p85;RVb`y}E$ws<#)kIlas2Jx)(MeHg5LykG>Z+%A{|E9VQQoIdSz z=C9sfumIMx>w;ylowV*^tkLwBpQt1!jJXnTE0WS*I_8bv@@U{WAE7zmWCn{<^RR%)U^sg-M86*TrJil@NEpn%)gA zkv;%hDjszDsM9CF`VPI2IagtD-5IAJcRFj)cj$#DoSu#KExEpcb4OHo5$DUJ17=;i zt}bF-rq?^Y!RgITXI%vtoF@%aC?0~<^ZBA-r)QkbdP^{P?i7rkdl#`@eZO49dQE4& zrn5%%@S=IAXPv$PJ`02MuflAK`Qi##J+Cfiz2(wdVU_>I-C*_PV&Z(kERaa$?i%C0u5Zs1=x+GWwZ>!f}hM$f>lb71v$>pWOJ-@54ZRj~GVTNzmUyDi~#_Sy70Fnf)) zw$;PvJ$V~@xJ^2HX*zqhU3x3*4si$UK{0!%er_8Db6(ERp6KV#I^=y=PXn zJH5l{U0}UyRk8oNCaYMN>1i<6;99K9bk?QspsE34<>Z)1= ztM;n3bv<|KK;QChXyJ$oFRg>4o?ps(HP59jPER?#53KnwWuEHorN_V}7^v&gF{h7% zZBFKCF;ie&GndYRRr{sPU-!;-=BD`V^+w5kz*=huYgAo3n!&1f2m5b2 z^EW*O-h_cZ@92Xm6OY1L4EMs$OMH?RrMg)<{5T+#_6oZ;#rHu&w_2;Ik4)jUIwe)>J_K2uIrZp zt%sLYfz`vyn6u8ktO=|+FKc#si__h{T$X~a9$wZCRi zjP))52{s&2;pKI3)RW5_z?$cB=4?81HoeX1DW|8wTKDokuu9YjsF@yt)x#?|pL%#jwbN^y&bn0N75!kant zhhlxpU%-YVD!hU@t5;VnfNh>7r!PC5wJ4q`SbR+ataWRuz^bbz307S-4Nh-#dNWu( ztmy`;hc(RE&K(BZoEfK&IDORVV_@~LW*n>@)*N^GtkYSSYQM4?tXi&Qk*3$h`j)?i z4M$XXC399!uIvR{e81BNoX%P-KI8N$u&p}-R=rnd!Ro`63r=5j`Z8EO+*uA*4|g(W zox8IhtT}fko!;Q|MyEG})x(`FVD)fkr_;Nf&bn0l&f{R!vUAqybFseV|Aq}mRJe;d zt0%h>V9m3u(&^PsuXTFT=^bFLyNkK0-d%lQ^iJbwVAXY14OsJE#pF!qx)$Hy^mZ5D;q)%B-p#J+ z2J2_xs|LX8!&QS$A98vItoNd;M!>qZubKq2N9fO0?6YeB8uQnjU#kXdt*@~b(^-q@ zti|+3uxk7oYf;W$WB#Tec6uKe>uz}uHXKpm*O-s`^R+dwdU$oox_))J)01HB*VQhE zt5eXG=he(dIb7Z0bmpe~ukHcsXVR+&!3hlX=W6!KVrIa4x4fFyhOVWn=NO8?_<5&i z!4|&&F2i8VB8={ltCyU<3}$VJsbg=Ib6q`HwbUh@-r)2mu=1>H1*>m$?78|=mv(xu z(}%!VcgrelIFJKZ56j5RLEeFn}Q$btE&pV!WT?c4>YFFSn=tiD|bwD{{Pz{=seO0aUi zE(uo7*EKl3(do=tKTBT6JXt6Db6p>ddUf4#u+1|Iw)syuo%x$S@AO5m>Z+$zp7oK_ z*=N(M!0c6SFTuGZDy(Nd>Q(&!*ybE`I``W23|PIYA94C9*yb5`I%~0bw-@zU=$0F6 zQH{A@XQ(H;xu)qQVAENnuF2i3QP|y?SdoCdswR zFi>xD4#r}Zz?y$AaYhA#+!VwkjWlxmz-X5^>*_(EHuhaXS&O9xC z(CI@?=k;v!k2rnG>AVJP9#`YuEOh;TZ0{nt1Ot88N5h)QtkrZ{)7dlqu6`f;pm)E0 z2^Ul8^eV8$SA#Fc;QS3Rj3alz*jk-nTkEjXyPci}+nl{%%c0-Ju!p9zhZfHs>KU?c z1g!UjeWOl4=JYYJey_f72CRPWTL9~t*|+TUm34hTYtsDtE5Q0YA^YpV>i_i+@u#Li7Ry%nsr4s<#`489NpJv`9uboR&ee()t2 zjA2i5tfS~rpW4D+y-8Vt@q2vZ;)f~^*h!CK4- zu<9yi&g>n}U3B`A)0g=%24YUj88K^&e?BTct%@H@uY<*PsQ+Vkia2mC^HhIM>jtZz zr=`Kl`Lup8=Vd(e*It}920mZ)hOb-(-3V^b!o@P|^Vt|GZgTau^(cM--Rzg5&$TxMUD) z^RRZ)N5I&xi&|mBfjL*;D4)|S!Mff~uK~v!ReX99tZVP|c5wW>Dn7jnd?p5RJDoX{ ziI2fr{2W;Oa{Bzbp8Icw;_tiSGpb_!qThiHM^ts7DL zU=D>C$n6a7yXoUjpK$s#xD*q|ynjSel0gk_mi_feD)5n}= zCSfYYEwH-p&g6bnOYeZSm>%#p>AkQP-{tn|KWeVim$O#D*T#Cpe04oU><{ZieD1%^ zF})7be(5c+$|qti$|qvZ%IEAtFwWijQ`m4sd2>B*;-2Tt^@8JPZ{8fwHJ$aEJ_P1m z8*pw0Cf>Wexlu5lt6TpQY&a0J1jpuC2HQNW*Ys7VuYon^t3X@p)e@(dgXtrOR}+qt z;P`o-_i7{fOUUQXVZ(uVSMRIG@PYDqbsVg^UY!J64#yqOg5&R$yjQc}_AO03L98unDtX=(ojrFPzuT6uw9(wy4YgcZsop3w{wtVKDo^|?y z)7cZnpR53vVqpH0RWRJ6zo%~p^iHsHJJ|(BU0eUbKBq;D%m1Xy|D?-5_wQpX|C28N zlP>?0F8`BROl^6({7<_4=W7t7{O9Yz%%AgxBg&iahok)Ghr#OY{0O*^frw%L%59$4 zp78`&Im}Nweah*q(c)*;^;7JpaywNEW^Ql7h9k;5)dNSl<^FAI<#vjBDz{V2Q}dr1 z1?##!#hjJfDVOspm-8u?^QkEp?{YrnbIu|r{yxn+wFJhsz4b%ba71~p*TYfHxqnAm zIlq1wx^jMrPS&M+ z@by_Ruhmu9a71};RKrpJZ#03G{~Ik}<^M(-So6P;0%Px({~PTvdbYgL3APyC7pn0M z_QCXS7w>xVM%w8aaD>76kHO$Qd|U1vml_Y~YcR?=TM1UqS=OSQv$bHYo2>&YpKLu? z{mCX>OaoXw&o(-pJ+b&^r?Wq%cYx!c7xJ>K7d_vWdk%tgN0gU64zQe8z?L&>QOWBJU1E$4Z#<(zdf3t-E6(dkQIi(hs+dnNrX&aIr^V(rZN64-D= zd2e;XQOZZ)L#B`K=MKuIIN#UCc43k2!tZ=@U+$boy~H_YA#y zi~ZsCypz5iQQq6tVCDRF6IeOF-2zt5Z?}P!^V=zKDF)_zyB$XTe7h5DFmUZ?;o=Y>kJ@>!??tG5f)POky0{|mKF zuXpiDu~L2p37j%X9a9I zuezAEb^RTno%;^wQ~W!eLvy~v+)b|lqo3Tn+`p~O>){Uic0lg|E9ZAcz{>fZV_@a{ z&N$fS=e4Jt-cPtMy#}!Ie2=xLSMN20OEIut@3lC+6|6kpYjb)#*y6di`u1KISnt5^ zjez6db>zLry-Q$l{%M#C#Y?b=-}Z;}?TGSn{|317U*uZKf3Xu>$T-BfJ}d+VisJ6JfDFLN0j$Id#gO(XMdFE`^;H+ zzR#Ss?)&VI@_gUr|333qp6|Q--)GJi-v?Hn?=xrR`TjAmo)7P{&wM`g!-gZu`+(;u z&kvZh^8BCytUPo7#<=qQpc%T>{h$SGdMj9Ye!zN7Z+Gz>VCDG%>s6i~41$&C2N^K) z{1I$8kmnj4<@sSHSb2U}4OX5X)`GR}hjn1(`625vJqcExA2v9>(dkW2clCbAdX@i& ztWo)Y*aOzjbRYJC@iX1F{|Fn7DDT51ILd#Cb146%GO+SrssJm`r36^{FR@C zsoLo^PIrCC{Tu8y5Bs3}msmUAA9!sqv3Aw6bQr9?SW1Jr7h|yDK>TqyR?9rtYFPkV zElXg_dByQ6SkIQFwRQa?py?lR4xRfEYgPP5%v1S))B?t{ZrlG38;&UNqhUD8?W0Ms za{Fi+tlU0g{x<(CSpE6vgwyB1TpRuQh&5XL0@&gg!IsZ5SUvohntJ$gIhZ}<`r(N3 zKJJ90JU{LSE67*8L<6*1Dhcg0&6523F3WvKHn1X(d=We_91r z&YxC;mBXhsE~eJS)H%H#tXe)zI=umG^R$7L^QY_sbN&TvIHJ5yC*fGmC%~5TJlJwx z09($BV9R+4Y-=sMm=zbZ>hv|Ra{f8c=KML=(L6t|04wL8SAmi9cJ4_yqT+8R;KVr> zf0KQSb1wcSdu2L%WqLbUf8O*>?z{dx>zjwcab3mV90tdA6@POYZ09m(oV)#5*l8(y@4i?|x^ggh1dvXA*+@2f+E4L>n!OHE)1+doYDFf@=o^q!r zVtxA$V8am=_po;5(9;99d3v4Bd`xE!7C+?l39zj@1y;^I?3;4#;k6O(b@8{Dr{?@t z16b#NtI_GrvA&(_gd-~cRtAo8_|`G7%`@(F=3_c@u=p9LFM@5|Ww3Jo)(TiTKUD!P z!N8vjJjFaU=TnElI`^q=r>A3m`ya!G1Lsb`Q4UWX2irU+oIdCD1*bDl#XrqlwC>Xp zSUEpk23F2b*MpVw)9qk8cMxpn4mmv&>)Zb`Y&fFgr`Z$b{PY@F^P~&c^)%NpojE8z zUGDTcu+~i{!OA(!ek$j5Cs;YBnWxP;4YqSf$nZsb^{LC;|IX}ZZZO#?2ox8fOKMSP3ow4DFil1$Uqa2=X z18bgV+nvsQOlJ-j-|h4vu-1Jx16Iz@j)0Z(v%L0{^RvuTbAG!LtaHCz<@B0Z-~O-P zABw-to+yWJ_qh08r}sI1(CN(6)|~*`x>I1~{OxJ5a{l%bSULBWfput?~qxpx7qoWD~FR?gq41?$}J zw1ai-cRHNTelq8GV8am=e`gGia{kUF*yfpb`i#?0IGuS~{3=-Meivvtf42~VCCG$JZ;Veu${Z;boLkej@+M>f^$by{QV?AIefnfta-lQ z;&kR?I&-l24yX5lweI%^z{>gigJ9+SeO`OY`TNXMb3RuF*16A>J3SHWJ96)B;M@@v zKbHb1hvz!MHqT+FcRRh;>CDsON5Qu47+5(!Hx5?L&&`9C^YevZo%?((Sm!=p=k#Q( z@8JH2BPxDA4M#aY&%LvG2Aw|S^bw~sPm7-c+q$!0<^22!uyTHW4Xm8|E5SOqzXhyw z`&*r!iuE0rz=k6#?$5wc&i%*0HqW@zC!9X*bmnRCi(p%q*P(LmUjZxUAFyA_`3DVP zo%@5sV4eGeZl|YXeaBANa74vFU{93u54d+W&w|sLkLk?8;#b%87s|m}_k{#lIlsVu zD(4q?zbNMyn5X7^VFYaFjyj#!81x4g>XI%`?#8be>~6 zbFlbUr+0(3?m!x>oCkWr%6Wj-p5FNfn5X7EQV7<$M_7~TQLOK{6E+-C@sSi9<#41E zZ1IPk&U{Q~4i?|%^ii;_%RN=jN5;X*`3SE)=7e|tmzbyKe5n?!b6=`+dNS5`{OdnQ zD1K=Gx^j4F*u{@Ho%z`O%)#O(oIVG(b+cgQ{L%tgIUnV9jtSYb~wE& z)-UJ&gd-{*Du<&Sh7w@SGgRsHYNvB8i%&Y8YiZpfu2qPEeh#q@%5x|KHhskD%qjl8 zT=5Y5a25v7orZ~j4^TWb1IF(Ga{6(n&pMrb+l0Y$voNfUyaW^fnMLu?GPokvf5g1D zh^t^#`;QvHs^v$`PH%B~2Ut1(s2{AHe>58Fm;W_vIHKYot-?{?e#~{%haZm35 zu=f4O%pv}JQ^h|%4A#0o?sj?)*yc>Tm_G0h4D{j08JKGE46Mz=e%k!(r_FQ1#jv*) zGw*cPRf@s+*Vgr)P?P=>)~Npcq#PXoezo`~+=uwjn2LXra50tO2m^EeqzcC3o4~n0 z=ZD?_z6gUcoiLn>%>Gym`(t_!*y7m})%cT9u+7ifzk>7T@J`_CeS1F#BNh z41l$d!$V*_Pll(!dTtL-JAKCK>`(kVy5eE>$L7p}<3B?w9%fJQXDIC3Ps?F6|4-R7 zo%_>PFn<4^i)n|^weizluE*ydRUtFE7NFBJbWkox7!JseT- z%XM(H7cVEl7Vq}rWw#eEH@g_O7cZxr?)Kv4E~mS_c)8o@17PL+@(@_PdU*=0y?EK} z#mjClUS>V&!^>_jUd}?-Uc9^t)?U0)4%YmyxV?CV^=h71+Q91PD;;3%%PW0gJ%?Z6 zzG#nL8FVqDVD<2o8L-W{4Az_(=Ae2r73=YtM66$a3N{>3ai$fH_9)X1)^(m?pG{|< zP497f+UXgv?u88VEX2U|nPCqtpA$}>b2{_a{67O)T|cV=mr{s|f7S@2Ie*3;TKq6r z>;5d`bmjp4%J*Qy5#?Vu04J_1|GFV?JZJuOoX7MLryq0rq|+C`@m}O#w*-!B%&+Hs znzO#d>D-rifAi~W!14a(*EfUXYbL+G0~}wI`Sra{?{hlyk9(3|&ub(8e#x)TIDG^h zKlAhJ$G|rK6j-_K23r2P|DM`(=8U?o{51pYi1K$Q!RpU$<{bAwe>eBSbmnh5^NjZ; zKlk5Rt5>_(Pvx_F8qD=JVE$zooqIj&)4A8PZ>Cqo`p#Ug;M@`AU!MXfhwD4R7SCsb z>D^B6bvk=%@oQkMyQgwp-_suR&fL8U&K*(y9`;uA@8PwfdG<^@ea7j${w;pa>8oI^ zn*`b(C9A;dRkGUYHDFzD$yygv=k$88uB9aN*L9NY1uM_w2-wygbvo-Z-PM(3UC?*t z-t)k@Bg)?!0aVvs=Bd5j%Y004blmJ>y1}YtZyKz6_x6EHFmP?`9e`0Sd&j}?b1#4I zgwvU)>C7{J9_H_z0mskS{JqDW&b?5Ld*{HqANMYU%P_d^8ch70&)-Ka{%<7n_f>!| z#z4%zN~c$Wua(X|)QfAJUh8yz-k_Ky>;W;gMlpMJySNKhHSRkMR!{b^ho<*9J?->f zu;ttbR_*)xojwS*{4-$f@UylfY~bUgxw})e@th8ES~+b81~2XH26vk&dL7l6!*b4 ziZig5+Xz^F+dl@jd03atv$n1`6t3$HC1B0pPzu)k4GHkW7|0>_-!<2ZnP-DI4SPV$ zJnh^8u&#}U3^;|sd6-*=cpUbSc*5zEPM>!A3GfpboM#2*8!_jW&)xS?{(%UZ@;s0P zE6)S8%JTqoRGtS~z`38}ac(PEIUi_udKz4XfprfYgHb;ZFlY2_XB$7W12M~BJzEYi zPd(EPa4&RC9#~tCxuI}9=7tim_VEVph2n2uUHl9=+)&}T60B#)4K@52gE6%*Wn$K< zXT=T8;P{;||ArJ;&)yq&t?E9#Aq}>32f!9T2)22KVtr?BKft*I>&^mH`wdHA%b&GN zzmYjgzp)Oid-KL5ST)|rob?R3kvS{R8&i&Z!0Zv~y)g}AF}+~Z`@wqOxRJGRZN{?} z(}%(8`HdNH{5ypF8z;c=&xZLoPJ`8l8|T2f_itPV>v~|y8(0tKZ)6>&GZ)jjemw?b zxR0hMzTP zQ9m2Io!;a0wA0yht7{0Xel`w+@5bPqV=(d0=J}0NVD+%^IQT*g#>~N7CeFg@I%!-3 z>pHoKy_J3w^EEvI=4Y7aCic)`*hACVpJy=`(+u-%aT-?n-!uTeOZq76ePZUXXT?pE zVD<2(Dexf-&N&0~n3#20Ocu4;9o|#Q4u$|ilw)n$fo2NV0 zcm64CIIz|j9M#n{4OZ<$k8D)q6_>WxgQcf@VgPOo)3d!qO4+mc}I*KO>H>5X7r54W*DdM@484o+Zj zE#|MBZ#xE7ZnsT1ebVW(;BpL}djdv%zHNS8Z%%+!S91+m^EWep)01H3*_;Mz&gQXL z-#G^xjwt{32#)%EdjhOEZ)bl@uXB0|tXgjG0Bhab2f!s5$p7|1rw==Q1gvZ3_EE6D zD{p6RrjLUwFgVX~m@VRE*i!Kdtgg2^C`rE~30D4hw1Ji99n918PN%2ATK5j-VDn^S zedj7{IHLSJlW^3NJ6pi2{mzur4?CT;>)N}Mwd*-^=ah??b~^WFI|gdMllAV1xg`Os z@2r+2Sl4h%gVP(G-VD}t+mZt7T5V|u7h+)k7WTySZm{n0mLBjq7>pT!v2_Q*w(gMA zS)=JAU|aVX_(BZMGX`Vpjyrth!gB{jLaHj)6Jv zDudCvcTqFF0<8D{yAoi%W8B5{q3_CFTj1P*d71&*_q$SHo6}uack#M1z01Y-IDHtb z>+r6O(?`Lo>#i}du9Lgwz$F;0W!~vou<46n-3xcIKcyIm|2lKgbKvVWV8wqu1y-J4 zXKq^e>wQk|cX|elb9d#QN8sEM<=;)Kp4`p8s;;{$oStxcmDB5-o&xJWy}JXf-0o%% zmD}AzU|nN(vxlZAdUE#)jLowOwt3dp^;V$it;|L7ttH@c zei-GqHo$1D))ZK^xAuZnOKYFg2b@0QbmnaFQ(&8O5sbBVZG{a-lz&eWj(UC%6V#)``0AVc*n~d*;BZ{hoQJXPwSGmGeEz;9R~@{=FsOZ5WvI z-dY&Vb8j73^WR(V^rX|-TZ?Z5$A7+-e=mEhweHP;Rr|fuVAXQ(jMHbG&RQ&O;oNzjO zXg!$+e;tGKXJK*=c<=&PF}WWFH^N8E1MHRFA0DU&t8Wi9f-Q!5nVxbwuO-vd-~yAPt@U66{0Ii-e6R*aJ%5n->pFZe z1=h9n;0RdP(u2&wbnc7k6JT9q4^Dw^#lZZjLKyWkRqFI|r&oa0=TrjRgTZr|+q2>% ztZGj+fG?Nc4129O1zRQVf>oZWVX*Q{u@>c-VlCgq;965Kmh%$Wa$W^1x7;oF6rOvX z(83YrKa_-%M*+;-^!$9N5v+ZAs0nN_EiR@Ntn2)tHW!})mtb&Cu4jB0tn2NeG(W~* zOfO8CcnDU{x`#4g-GdK}fzQBT{3MK?=MT+-?c6Nb;upX+&tk0a%JmDJJEHuD69Coq za1B_sKV0v0_QCWnu&52=sWS@5wPC3A0Bo3F{e*~BMhE92Xl7JkI?Ac zM>x0Ue5BOr%uTgFk^(EYN77*B_DHYO`Fr?6-_C1*^`PE%=Ai4UojI63?DP?E2?paQVUSObvoN;q8d&o`ngCM1x|H*y6JVYDDCabN+Udug&ORvq5YW~-#JrUAA?}OCus^1kgSB^u>cQ&m zp`_CroZbRfjfYZT&WqX)v2VII4jl&TchrZ{U|rjXdcjeZn| zr!TGRj{z-*$7;YEDMa~?HOKlc&K(Zu893@;jZ0p2K&h|JzzK;JB)}H{2%8vrTibSbUJfU{*Tvy z^$z)XEw}=Mb0%Sw!{dG6%Q2|Wz|@Jeuv~-s0*s#9Pf(Kn1amXpt@VUk>xm>{H2)JR zFy`Mi1sjei|A_%Ox>lbU0_)m)V%X^;PCw@KNvAVUT@Ozzfterj{|2q*{6>k>S;rX| zjA8z|Ccn`P);0Ex4zRAJZya`dx6{*L&dYgvVJyDS=^3!iIpSi*oIdV!)@5@}Iepsc zvtZT5OWtblboKuKY`p^d=Ma6?w2Sh0W7 zkG6dMXhReg6&2G-f(c15l7wW@MV%-rx~QnQqRZ~iDk`g}sHkj$2`1DKLkvk!siOJr zd*1uZoc8)Z*Y$XQ@6CD7bIy65d1qh=X=M!bcfRGu-3Y;*69sSkAoHS!fvqoa3R;#`{spQ*L3#8 z^dwm4?ZR2G`g0M`*1f10toRp|I=#&4F)(7D@Eh3l2(m9?jjH9MIk0NEXvyiT8NICp zthL%0UpcpNU$jSUtX+H5*68#mr?-LioNr@KRAU=^V)wEq7Lz?Oecb6ur!Rw*|HT1V zd0t%T^dhInz}(+=VbdeXzPJ|`>dD0ku*Dp9I`c7o9&BqZg4L6YnUC_ngzGB*OSoUA zN1a{{{tHZ;`AcFj`abuP2C$ynmvn(G4*OZc4y*Il-r;nYXZsX%^`w0kY-`OqojD_B>i>%j z7>*$OvO17zysQbVdoOEsI@dKl0oGcV4S`kTWz%3i2QHg&I`c7o9;{j}TLtU+aCsE0 z_?K6K760-Yr`I~Y35=K(sedyAr$&%{IcrocS5Q;TD^Pb@FLHVethKJ-TB_v=_FOq% z!P-slbb1`jxY(~Nx?%L$>52qcuZ1g;;CxK@FpTBX5d~}AjuNMrI=$TK6;9`VVcm+4 z!=?w~v;V5SgZr-9I~JV2==2q*b1&q7WeZrjT^V;eGn){>8jzpGO`4`Vv(GJO#oo~x{4))nqW);juz z-=}1)3&2H~h_kK`Cj1PUwXO{OQRxk^%5xp_S3c|FPVaJhKUg`e8vrY}b%RbH0xP$5 ztR?*UL)JRwe9|4z(j&+^yapHQ+u_VdF%NG9Ypuguoe%RgpAP2}2W#EKyTQensQvIE znDBd$ti#8_;aSZ(d;%PP*3CM65?q8y|0$=>fGy4{Soa=L0mkR{lkS5}k09#^=A&AU zh=bMJBf6a4+BBC^vxPf`7#tn;Lt-F!&6n|sj^g^dIXRWod0jwN0 zwuJgA&%vfgko%=tT!b~|roJZ%&qnT-xbLPjj_Hj~Z*qDoILtZsOL1`cnJ4#4-A+$9 zeaz|O;P9D{`=upt`0UF4(keLoY>=D!ekc6CIJdPJdiXlcZLI>E&RR_8zL?JZ6~C4F zL@^^lZfg(BdT}r825}$k;om-mm$?@widjqe^Mu?lH-XKE`)hhD_|urYw-e@UF>60h+zVY~e6|gMbq?FuOYLdfF!(V{#-D`wjCcxG=cjENe5UjnSo2|B<}>Gf z=AFI>*7Kol8Tt|B8t?7ni}DFD{3@KwRPU zN~c#jJ?8XgFkTC%*21O-;*aAZivlFJW$fg^9H;sfN+>@Dk=^dY#kj!FDgtr1>{Gf7WGsoAZx@mFFcRU_C!C z83n7BOU9f&?ev*YKlR^X(<8{elr^d+mj>WGei3>hOpdq+mS>uJF^uU^u<0dWySEgq zJTEN+qi?5P3Y#8?(~1jQmo+N?OWU2^;q*?h#q0*FhnMy^ecbUBSbKNrELeMY=`vXN zwzFRCQ9J8Z&)ZqA=~1V%M$=iN`NzQFXUp8w_r(^!3A%D_?*|`>i5|8Oz^LB#1laTu zr;mpEsjM$OaPJx})VIs1YcDRNHNC*;tScK6>t0q2qdmGT1~$Fg>9ydGVA8)1hOx-? zFs3&HYVz zG4Q9PPrz;xPs45z&%mA`o`XG8JP&I=OW=CxE3oH@S79yYT1LM-2iy?)T+TlIgE)Zw zqL_8FULA{f()ogM|ZVA7`o=1MVpt938$b9z6RYtx^7Gyh>Q*P}iKqrP3vKA1k^ z^jYvxnDk$UQ4cR?jg_H(1@qLIxuOjGzonPMs;(=lz~)~I=0wcY&m}%D9*6z7cn9r;C@lIOwn60qrI;FB?t^OfwU>CBn6QLlz! zTyhPJ>Gj~hmEHiW*Wi`S;J=gJ;`COhw>h2lnSUH?F}s}J1J--Zm3?46udW;dhyRwB zd*wKIJtp%^!dT7|VAH3-rI_@Yf%%wt7S{B6#|vQdSpt_~^4?V#ou4b$zLhG>z`qq2+OMnFD?O`Ie+Sj{4yVV#dd^=p=y(YH z*O<&<7-pTAz0!NrRa{%|7gwi<=9V7qtT>Fmj2n2fm$V=>v24WWK@4lL`0&(#5p zUgK96fmt*43K;eF>T0Jqg7q4_x*4oz=GE-OS(v;x4x`u0)xF@YnA8(6XNyN*>%>Xe zFNmjL)vK#{225w|rn8p6$3)Cd*3uy69)3~G{nfLmGwO8KZF)KQpD`JS^_pJk^jfg$ z?c_TA8vWZ~P7!y)ZWhO3P45C%N$-X=pFXg~;l48u#$@e!t#z{YgQYLQTAs^bowv@F zP(Sru`q>C_uPFoT9Hy8(Li}sEj_Isd&+TiNi|H}2`ByuiI&eNFS)^wg9(`&%2hw*D+t`OJ3>hsBeun*?b z2) zsV87e9|M0KlX?=ydNl>U9h3SBjQSR*Bt6cvVS2vP*?-du!FOXKPMm$#x^edQCh6=I z^QI5`bDfwy*)C@8wc>7Aoq;&-)0v6)f=`zZYd=xU+GFAbtoaXu&40-0BVfCC6wJJt z8+#QKkHeZz5^O#b;FB=vKM7MQo`ThLH9ieC{~2%$lm1IEXNp%~w}kxFf{gyvMsS1l zHrRg?`?Cn9AjGu&I9%S|^SG)kr`l&C%n7)+J!{ZzJe7y)(Iefhs ze2nxG*fMb~?6Klj*aESuC?>fX<_K{MY*gF|YkC{l?oEJmFnR9~jC$TR;`C{- z`rpNKXg;h3desH6=@H~!TZ{|Ub!{nF{@0c}y~61+r&l|jwP@XInX~e|wiB%WT+4H! z&r8=1I6dL?Vep@0qQ+|{VG6{{uzwNqHv(AY`Hd>D;(w#o=}lne@D29X{9SI}=!LGF zzrozhhqC`f77k|O`b{9 znZu_s(T8u2!kjLigH?aJDJh3;#x}j!>6KvR&|U3x=3{yzSh;mKIiF^ycY;5HiF~@* zH|g8V8x+`FPHtSvk zABKr_zm*SDEM_hn#U-#uipyY+7RO-qZ21=Zquf$|let_zbxx0iqnKQaeZcdl>MCB_ zfIbD*+4$BBSowcz*6H(3UvxU_lK;0^hxY5+rC{yXx4FMMGv8)zdVPJn-sufa=bl>3 z7H~Bt^8a=m<_z&L?Eeyv!Tyza5>|ctHtS*^dGEB-S(oYDFY{jlYu)eUgH_9S3Y}i$ z^fGV`CgOjGy|;TSoL&o7z29N&>ce+jz29kt&RC4o0mE42E*PE3@AQGIr1!&a5)V0j z9Q?P^r(lm4FTwt`cop`Lkb45yL&e;?!^KfpUL%Lp--XtDL{F*HnIrtGm}7dtpS9>L z^>l*Olb&v;vli2tv-;dK306OQX2I&!b*}%{6*-+b>U+KG*mKo&T_ae}nd{haD6^l zeYoE3#r5?W|LYsT+Pmu;!Sq92*SEvyyj?#4)?Qqn1S^N@C!9X#^i{BO=;iwI?`1xw z7lV~sZ`ApeIK2w2zV)(K>TNIc*B^~r}u#iF;RQ!Z&Smk z>PBAMfX*7#^IpDAtuEFpJ@xmirGJlSK=ppF60CZ^R|8hhzt;se|8A%Efc1L$-XK`7 zm+wu1wHM!82HU+W8U6bO8U6d^VC9hdJJs_4K6`6=wex3grn8^Q`TI@Ir`hS9VD-4^i{=;8~^GyiF)vxlb7JAEOe|EK}1b$=9hdNSlHo~iT*a<}pPXx(i^V8!1S zb$W@@S&R9*{%@;?u64IHf^#tO`r5`G>ilo(0qZ??Td&jEH`9l}I`i9DyUyFTWw3JV zF9R!Pe+;a(`m3E!t<&4U%B{cM`E-VQ)huj!1iAfgFZw6&1&hypQSJTA&2-*x`a(v( zfxT6pHxz>PGqD?r!K(L$O0ep^p$e?m&J8i=Q|)|eoKGECudf>#zyT(DenTUSK6l;F z?DQ6=vnTpYazi(m`SIRi7}a&d9N6+)a{3xrb)_Dg^1qSR^kT5;y|FxV?~N6qUbO(5 z9zpJnt+-GRZ|nqHOy*{KpVP;|w$=pL)|vt<=NlKn>g|opU%kC?+4-zEpVf@dcA(|3 zow=ybslQ>aK5wU0pSQDrrWb+L+wJ9Geht0d-Uy@Iwl{&5+xBL#a@)>5GMzn9AGWuF z?cR3h&t6$>Jjs`f%Q5a zsBwC|)0wkgj{{v`Mv-!CG-!u*#xmA4tn;ytv4HxR$%>h__ zxVhNr?5*kSq1L*&5v+P|ZU*aY+#Cn%{M^i(b*^q^&gRqOe0rTvKiJk90ISb84}$fX z>gI8<&i2hqV4eS43c!kg3u{phw-kbvL+bC1o6Z`w)-6%6-CN@PS-Wz$r3!5RjbQcR zmL{h+JH6HE++XwW0jqDfB%IG+sBcQ08*pj_xwp&#v`4orfVIE3EINJJ>8lw%!F=VP zXvpx7*{gg^oWmcpM)+(>edeRa0euZd>)z_(+{*h*XP*`S)*`2uIGuUwY~RLpxfZ{k z9zpJHOSn+X+nB#%4!X4lxsRszf)#UcIMg?l!=^`&dpq|?F>h}L>)zWtoZjX1i45Pt zbFTPz^o07R)c4ik)Ch9#WK6}slQ9+l&TgmoW%METN->AZLVeR&u;~%x4lUtAF^AZH z#k|Y);V##QyO^i>EPxgN?&472^!Kpo5#-+O_H+kh>fRl0?{;u+OizFnbH{k7Z~AB0 z^ayf?T_1)!@de#G?D{b5`Y=3`@wulNtoZi~g!-n7VACVWy_Yf7lY1Fc@$c<-`d~)C zFA7%7`>H~H)77x)5#-+I`h4FSzMz;RuFoT`&m*qSBd*W)7l-$5VqWPHn^)CZd$LGFXD&kuIu3yS$5*H+92d5`Hc86I_g9_3o_+4N)B z^ayevVob$(h%puCA;vU4kO^?E+N09pnV=De5jFZDJLg%x<^lGQGhk6b_(hk;h_z~8w=l>%-SKKqk z8HV8+2qK{znBB}MeoJCDCxa;7w_Y~ z!ec?LnDk*1rYFIsPlD}U)@%9_Sh?*k0Be7DyPS7(ebafL`A3~z z1y&Smk7g*1nJ;R~CiSg1S$lcqB3$3-c1+07b zGJn(KPETey$(|^Fl6}Cvn|=?Q9zpIt>WZ_EF%^GbhtoTq-sANCjQ$w+S8F|173!P* z$LIgYmNNG~wwk&3@tlnQIM0l7c%1ng&w~~JarP7X=Kt~8b%MHTd4e%@?-T5~=`Q{g zMNThq{;Xa1J{be+IsBx0xcPs4c72NVD*jW|nR}nAak{JJsRpMvXZ$Bi!K!hxHqir=|dTQx(Te;(bGMlzWI}|=@H~U(})YL`;5!^ znHHzFftAlQ?4kL0W%McLqZ+5IpPQkjN09q0YuCNcx}2YNeS5YEK3eNpm&3E|PM^&1 zb8)b0d~P_@H-8Q`J%ZflJ8_|PpLaPw-|h5Xu-1LP-|2%HeVX~G#%b#(b5D;T_XXCj zwO(*Jzu@}zLL5F?>jjs?3w=&s%OK0`PsZihie_+!i$bD%57h3lvm-9~enD_3h;Ze6-ffE{B&#Gx{s}j+0Yu#5}&aX~7eHyHFU!8UOLPnouKB{rn`pKHoBgj24j0>%G zz~y|v_3c0sK3eO5%i+LGM*j)Vo_v17x>Vy&3qpPK4Y27E*3Trg^ayfaXYE?+ zb(iz&u5Z7fzt;MN%i$M=PH)NZFQZ_+9)DRI>YJa1O^+aVp%@ohcfsYnQ0nw@u-09u zbb570|4-(l8voP!`4edA5#+wX+O^gjF6TE~-`D?LrRSc{ef7Kf5 zn|}qH9zpJ66)v>yqRV-)#_4rnt-ILZ^yZBIYv!XGe{KEbUZqEn`zCAGT5r0X-*kO@ zGX@{6^`^_=&H9Y~8{V6biRa938bkfGR9tEtLGF@UYl;3j(%o81F{it=mRO_t$HDr{ zxzr8T=j5e9us*vkCBb^VEKPv**?4Kn`Aj>X8Rs(x*5~J?6|lZnT3QAFH708LEsgZw zvhEEOp!4-*TnOe_q+SGbtT+m5dM8+Q{dNGX{C_(Pwm2i;5=_P!b^18iVkW`oV$z58 znm+0DY4CZN^qGY@Upx<+`rSR~i%wt4=x+h-e^>Gr^G!W_g50-QyYhdl!0E-{J(yVQ ztqPdE;zrox#7(gJ`S4qi?^-ZhxN3;B1< zS>M0^E^s>c%XIG75tz95ceOCe=XcCs=k0e*PH%R4C-^&s2UOWh^KKyRT z>Eqzf$cJ^A59>0Wdsi)=IoKNU66{&xRj03I^kvq*CG=S?fW1vz412q{9QICe6|8bt zjyb&+{I8g(ak&wuMa(|@ySNpWlRoV*rgu8M3!M6yB7C~RwpNeR2f$ZhGR`mz?K?jdhm&u^l60ICT7o4pI@N2gSSiXg0(p8mFWZEljSqwd`6u<20leT z%C@W zA)~*|KFjBA-dBi;d*7xty##!?^fK5YG5c_sn6(#+Yn@)_^m_0H`82{FDUQP)E$)In zM%)eiadEHH`<&kI^dYB@fc2jB_89mRn5gR==6Hgb`CloH!CoP*hBcjaT`iq;T_a{) z>d!kp;IBz%o~(guF`sM2bFk{+J8R(lP=B`oR_Ec}Qn1d$yA@8abUJgm7!&c|ZGuUC z&j)S=e;$*197eClcbVHcnA8(6=Zc46&le|Q8^lwvjpBLOe-tml{&UEyH2)$lfYozs zwHU1D)oK~||H>x@+aj)oZ521cepyVdMjVIL`_5_)SkI!>1X$0U)nV{wFj3cP5{7$5 zo`TWqXmuK_-mcDs`f0y}O^+b=zY1`n*YbZAg0uNW=tWMCf=%ZhnLqc)bT&oLjrZ6G z=%+2irbm$b9`{}MzRz`Y_{AXieYe*8B~GseEC2WF!8#l7w>zH>r+0((dVD_t)@P6R zT~FShhpx}D?=OJWtM?b3&b;;cb}b+L7nsO%jXCT2v<Od9ucwweDIOSaq#6f|dVT zlhd1>-s#kI);FzVq4!<3|tI(-~$xh27t z+XUEhn{>MC!w1vQ?cN#ZKL@tlmcYvSL)V`VnTzSnSAF}i*y&NHSAo^f4_zNVtPl0r zM_|(<$o;Sf7uvfI2f()0kki=*)0wm7umILtf8y8W^CzB9)A>63OHB0nPvtP`^Pd{Q z>dBwl!0P9p+MUkVk?C=;`ur#6%pNi3FpRA`1y*i9-;rgwtF9P(1{Ibk32B0bQVG>M)|Hp~ zJ51)oo}14Y*nE;;TWbOwo}au3YY)$MUSt7Wh>8CX`m6$&u;+PM#gwF%IGr_W-7M~r z*3GH_Yu&8O>oG5@3c7O0ih=FkYUf`IR&H61VDoqV$%;F@3#`6n^*FuP>BC_4Gb`zQ zCPF>70X98Q`x-8^N7+1+;rl{fHhW+?`(%35=_O9@1BdS;dD+at{23n{I~F!Qg1m!R zyW$_@YCovO>Fr?k`k-YnYrtOT6vJpQa@;=VR6y50 z=5Qa)rwXjS&WSmn8nD*QVJ+InoF=f&QVwfjAGvO;(^;44onVXOYRpMEeGshLbJ$z+ zA94B=7&%ve7B)SC?1Nc%*yoVLd$SK_A54#e!+vHToassS!R$%6kJ$%j&UW^}_0Yp! zWgpBM!~SF+%(~WL;_t*B+yxW%A^YGSaJU!Q2ls&w!K4rCI#fIZYq@dnEY1oz{CP$8 zAr;{8y*v95_Fq1S)H=OB)T_S)n;t>-A6uCTcu{wS;FQ`;Y~vuV(Zj`s&`I0L+Pdi;7?hv8NrpwgJ5!tXhg1 zz{;(t(dkW2Zv|_=irT>1ucElqd%?=HC;?WVi-y6>gZZ#V?N`w_Sp6@W1#7R1R>9%- z7ukoh4*494I;>ZRGM?$BV4aOat3s~65jH)7>_hu-p?XuSdJi3R`Vd$(9?G1}f5PdL zVC8w}GN<1|=9}VWSe_5)hcV}BF>|gFM`8azaXIY2h?#$jm^S=5PxfK#zv=B@ z<#1RhSiL%|8ytS_%|47dt3QWLIeh`#g^AognggT!KUx4jUOICQzwgNYXcQcNkCXk; zW^fFX_c9;TnNN*$=5wK#>s&7Gg$=)#%>L*Y_!{ZsPM-kRNuP#2Pt5ZWe!rIe(Y1_T z%sfj&pW-NN>ir?eE@qyekj^}zSHHw-8}JzfYk!M}z~QqoyLi~?%+vHFSZAYn3e2_9 zhvGSy4dQv&67eGJks+_6uU;4H_;ua8j=7u8Ghlj!(<_}`4c1<-YjoTUF2Y1U>sW92 z{Ydt@K`@@@DV;UuqYuC4wGH?$fYpa}%vsO0!{KYsgu@vdBmVACVWKD-_mx;Mpk zZ-djBo9XS~98BbSc-%412G%zWtb(=f5%iUQM1j)-rx!Y%wU~bt ztbC3r1?xF{L>ZX%BhS>|b2dE&iEB`2?Rvf)!Me=9JJioe`GHdd{;rlI79rZYOJJ*I zIip9Jzt)X1XT^_}fc2b@R)LjIv=+>JkXw}f*ZX6X=S0thXp_@hoZbr7GdbD;PBj&A z2EjVRQRc5W>zVuCU}CNH#V~qrU0(qXzX!=)&;G#gjMOs-oEq@&1E}8h32^v%FMItU zSZ8(pu+vAJJ_gqN&iZk%UYqM@oIVfM>va7JSg)@Q%vt&d_R{nySkKZ8Wnk^;h8S2i zZeT6&KjY)D=@Dda7{!HZNwI3#z&uS)f=!+Efq1~Vu0aKo(A=fS2gfprE_f9F}X zZ!B?o9T@rsqh_eHD z^&Tf4b^4go$HC?DnQ%VrLk#=)PyCvVAp2n{m*?EX#ietk+2CDp>Ce$Iw+dAA{PnbY_l0O<5bl zILFk(>Z~5a-s(N*m}YPk6KfrV-dYaF#KBtkm~ODvJqER8t(QM?POr=JVDXdS7cd!f z5(asvcm>AtME>TVdc?4&@c&pL%&eGuB>#_bU*42n3cD!gzL;JG{BCMR1zY?H@K@wB1sfNy zz^b1gTLb?g)IXjB%deqVACDquotcl9f%B!uU={!4)!=`ZUJKhQZh*Z+jM~%w9bm2d z@i_P&Fu4|M|3@+M&oZB6rf(mg!PiZn1MiXl0&G&u-1miylp~SH#RagY2Tm^rPspdl z>7`Du0zV-i)@%MXPHzUQCuOXc^`Ne@PMB|t2Vi@}3E1z6QE%kO;wjkgidpXu#0#)? z?;_alU2;CGJ@xOySa&U>9}6`7*c|Y73PJX4*9r3oDDrg zjw^wtIL8fv73a87r;j<^t$UnX_qZA7zW_cS6FGdMD02=!!L{n8mu7PKLLV zVBW(x%{1aRSbe@N?*?mM%9)Rz=jG$zjhMWb{W)69^JzMJWjgoB^f{+5gV7_#`6P2G z6Vqy~PsYHy_md4^^J#Q?lhav?`L{T|1N>*0T&pwG&tNX;0eut~>S2o6Yx<8leGzQ> zDmWXHK5H;~Up}6_)Mu*WOThZR>G(>pdU8B-TaSr*k7sVG_ju-JdJkB&9N+7F`kX!t zwwTP*{F6?fbo!LjSxYe{ayX$BMxP;1r~&KsazYDOpW9F1`7~yp`Ix+y`Fun?2&>oK z2}4e2o~DmDojIF60oM17C(MBLo_NBn)90K%@ASn`KjTf<^a!#m*njP5igWly=%r3C z2b*3ER*el1)5$D9f z>4jkBaAJ|uxmSvLB6C*E6DzLs`rLTpELhK$6X%>h@AO5dFJ<&kx&C~r#Ocjo z<@~8GuyX!XFIYK$inU)pbgv)0>^n zzM20382O)-`kV?*jUfAuI6yhy!M#?_chKMTA*WA+_1e5+7OWiZ1lqlKQZt?T>osy` z8CdTlch-URdcTu-{y8SGUb5&x7?j;m#$n;;?kfGxfjs$7h?fQa{t@7dV3KA?B%G4KYuh+o2Ap_c^^EtoyD2$#7Lt{>7?WRwF?cN!1DJJiogV_}F zT{J~v?xFlsf3LuF=BPcri@i6UxtLz;?u~*uvDRH>FdM`Tu&LJ&^d|6e(wkw+#Vt;6 zb$SQ*lk(|^{Ap?$oY>+Ag74d1k0>-2W8 z&eh#Ip8?xivrb!Fmp-{_ceKakvk<>K*O}n?B%l=5H~XzxgxgC?@(dJP)%z)w+9EB||3KKC#m)01HHp9ZV;duE(I z8|r602%8>3_PtSDsE7BKgSDska<5HiEv7S1?cKc{V6Am;4_Nu%I|$ClM1SsOK6dXC z*zR3*`dX-;wFfpmg6#WZxKIxFv4@ItU%k^CoZjs87N^gFweAS}q&OqhA)mD$Ha&vu zkpwQZ?#Kw({KuU>>GWl=#b;ey1GV2zqyF4q3Rax^%bd4Q$62P^&qK+ER=S8wWXj400s3Y~wE^DhT$-3MY|tb5kWu;~$GKajwM`t!gD zSoJ!TD&~Xiq3P_Q`t~4usQ26l<6xc1 z2iZftejiLYebDK{V0|`zFbTG`=D?QEqSKkb^iiP2A1wwe&S=!>?5*+{jXAvq4F9uU zhfR+ldo+Oy^=*{7DW6d;roN4`=cbQ4|4FAaXY*&y=Dz~A{MW$h=R^Fu@_eWioR5j~ z`A{`Xfw%_N^jfF0|ABlOV6_(ywSo0Ke5e;}agt!=^UyL_F?RyZXJGyCD-5-fRBT zPG>F3;SnHn*pliIFF1niN19;Nw@2E*it|XP)4QEM0@k{Zu%GI~BT2BWwFtI2OHSvR z3^1|oqlGYfjXxR#>#RQ72-dUl(I%%iJ3Rqb{6~{u@IS8vD3@JT6cFG ztRC)WEf%NS=?Sp;r`I~Y4y>4a+rWjGh`+bfaS!-l=>xEbibr7e zGl9L#-*o10`UJQblQE~9KJD}w@R6AGS%f)S%ovbISIH_c z{peHU^jfDkft6d5wdhPHS&PMCEv75yEuVyz9zpiLa$M-V?PGjByY|&Nz24~!U_B4_ zH9DUr=hN);7RT+*rw?p#`oVhM?i&E-V50VY2^h;~2&}sHv0n9OpQ~|S61vXJzDclN zgZq}j7H1`+KgM-7Vq&ew*vk?zYv15p!J5umOz#BiGt6Ugus*{))&(xaWSnjo z^XUPbPcPVf5@6N!*dSOrKQ`p_q|@iX>d9k^PG8FCj{_~w$75jS|9D-fZ#f+{J%a4V zM{uF@@c1-X@gJXY`mEELgZa;cwWp6SIGwqf4|CJ==kaByuYtAJL=>zz6WkM>jfqll z4kr3JQ3j(p6XjsLw-TI>NuL;u&i_OWSZ8CR4y>~=(EwIYCYr$d-h849tY^_g0<7o% z#2`4pWc(o*^BH#f2w3lN6Qf}5`vlLb#Tf_d3```QJ^|LVXkrqqXVJtI_@kIycN(Tx z%zZI`?u+?zU(A0VZ2rq&>&Xh(`nHTE=+oi!PN(;R z)z2sToKL^gN5JaI6UB zn;t>-Q&C(f&Qld&ou#K@PG`NQH-Z)asV1khUcFAA>H@1jPxXM+pQlEh|CrOczZ)^p z!>8t9N-)8b0gU!&lKW;{239{OE1h2D^lGp^gQfn?nEA67)9b-HpOYt zS=V|@<`ai8y%(&WOb&xp`y}f!ecb8OV6D3!X#Lrr1D5}O_DOx)9|f!4{pDcXyQKp* zJ%a50%t3p%e+bN2$aDV)jLyS;_S|&lX8x0or<~6c*zR3%`WjeyKFxTl_vr$#a(=oH z%o>ox)7%TK`*aL!dL3A=$ERDs#hCPGEvolv_EY=yG;1-PwV2M{s-I6M!2u@YOu(2v z>GUb5Pdj}cYHnRuvg`6g_71li9l z<3jr~#Wl6=6l*d)>hv10@|mgwE1#(bu=Zjq4z@U5PVWPM0u#NOVxP;!)3B_W`XY>; zKT}IiU(V>y0_}PGEbrSuA;^9|kdBiQsdFk>-hCyZX3 z&&DZXQfFPJC&22%vx8uZIpp*tSnmGi z2BVyx?*?n{p6_vbuhSD?)%E-kSbO*U2$<_J<~WS@?)ho3<-@)y|L2*r>1!E%IskJb z&U7)1_Gmgv36nb4F+B!WAEv9piaA~5^d_)!PW`<>?cH=gbnV^r2v~iXPCEZZF!%1q zu;~$Gzfg_~?cED8u%3G_u(zf+I6V$lZmGXjs6M>V3tjoYzD@AFS0kv|HU$J0VaC&BJ(tzXTbC}u;RbSbE({3WDce$oIdLGF{e+1E&e=MwY<0j zwm7R9{UsoC*m5tyMv(nd6IgwFsRgY5ywvLScBk`oZT{U(9|0?e)Zb=QKVO=It~_62 zZiSfW&r8hBbe==$GwcV?AADx`b=5M%{^`uj6oHSzq)#afC%FRVcySC?Im}dpRo6_7 z(;L9Nhxc+{P89dTn*T6ZbE2hEm+pOq zeKwtYVtR?wnZM${!v2|m6<9rgr5dbyU*TCYpEjq*!KIj}{gr;0W5h{Vz5l*4<(M_< zd!JW<=JP6ZG@beDS^8?=bk<@z`>lLltpzLRR~ww(=yc}HSjh9$b{KvBe6<6tXTqzU zU_BFFjf1tnuXZ_~Zm`Aa0b872r}sIXJ+YVrV2e2jW(~||7)IYWy*dNdGxk;XN@wZS zd9cpmt4rV`F>&uK4f?$08G;SyF|f|bY#msy!CCgi^cJVHC#JI}=FeJmPG*@u_lfIH zz?jdZ)0vQdjyk&xR=o!TuwIV`cwV$$2g;mY?(_<;P=VC8dwJv4pD=_5`b zb^0{e)@5&XmJZB=EzUwl{|V4?{t5HfdHzW;xB$N8s%Ib9H1J*9>1Tk!^+G@UuZ=TM?LjL7v-aO)mk5ze^L@Rs{~v zb7Wf!SpC`71y;S=dY#_qbk@uD7=H>T{GL6sjWuGut>yfhjUdvW57u6!SZnpOR?`Ep z*6n9()62l-&$y;nI{zB5dfQ(IR)6~I!Rm8=BRKq-Po%#ItlsuFgU!DUte*6Dg1I(o z>}S0ee;90ejyQb=9G>S${~9=ay+m$c?cp;gazg+PUxSewYQc(sL$}kp){&T4_Xfs4 zT09C{Djo~?_3cKU6VsWG>CDIUVy9PwRpX7!llLQ^8{1&Q=X~VG z4yUtMrgwqWhZ|X!={-*G18ZMy90qG&Zkz<$T619Kxt%#HpY1Ns?a@%*`dQfY2qN1X zaG|=kH-Qy%d$ZG9o!;*BxYLKg+V}0;3)Qlnc`_&TWc#Aimz=%=)*0K*eNnvw%tiVD zW9aM+6o9!O_|HHIjLy$M4Or_AurAdy&<|E_0|QP^g!*CY?SJ>RX#&(<6x7%oxhy<|44- z+{`|hUheb;u;Sm`1XfROZUHOLn|r|O+s(sZ<$1H)$D5g_>8qK0Z(%&;a0|b#n743` zI8pB{%uRcDOAT0YZm9)p-CNiz(_6q6vm31ZZ|QM*uhY4w=AUr-7#K0Pw!)@I5J|9a z>Q#cd>E1+{(_Ie}RZfpN|0b|7`Dua5{4~{{}Goa0P671d$(i<3fG-F>|xEn49U$&2;8wG3UXm_g2KV zdT$M!Ug-2Fn0~17)=C(?#&2bAihpZ6Sn+R-JH0E^w|)&aJrHLM7s~V2NwDQJ4Yrsw zPG|n+zmU;y<9+hKjX5gLZLCG-`L-gk_Vl(GShd_%?erR_*Maq{zO5cyfQi~~<5|>e z;kJIT#hC=#x(i@iciHJH8GVrVVQ&2{YKg2Fdau*R!0P$n1Xwu? zE;%2U!|nXKp2@fKOscNiYrx9+cGjrp-tBEp=l+`B4OVWq4}q1#?ZZwVaXRxf|8b|! zf^FSJFye1by`h6sBZ%C=wbYZ;@62l-@91;-09ZNPkpOG0I|jk#&pa*8sMC{RyO%vQ z|0%HgdB?QV=fDvF&D zf=!PglKTC5^?8VUZT?BH>Fl$5J~RndKZlr``A<84_T2PEu-&`l^cAr7Ysl4g7d6Gd zD?j6(`dxa}b(h3q38xP^ec0)f;CxKRpMtTN+&j}3!OCq1b3txfAAwDeAhM$d7djg|8o=7G z9n9JEHm5UZoq-(*a1JJN*f9j7=gAJ2&yFSN%4f$iSb6SX52X)RX6_xX1}leQ=BAj# zwP4kf`u%ym7Yuhpw>Uju#ZUb%z3D^HE#?$h`46*Krq4Qk-suZYUj?h)dzg#vP5q9& z=|#}7?$#$^(<6x7(}4^1^PX<7-P`B%gwrR%%JUxPY4Mq-dUDSiSoPjp492?Li+iIm zrk8+CZvpGxd)vXv!TrvBB=!GUsXpJ!+|=iL$6TCou*IKnI&-s_t6=4SFY}asAJFvs zn3w5XQ~vjrf>rN*Rn8~o^cpbk-})kKdIXXChH#-i-!}@j_{`b#q|(<6x7k6bLy{Q+3(-e2hSVyAOowC?@oPHzBf-TRxs>cjorVDW>O#SXX^sV$wk0A0u4K9@D1NC5w)9Caj zr?Xe)-{y4YY3ufbRo4R(VAb^ib2gp(V)`st=kP(GJ!2nq{d_P6UGX2R1}o18>zvM< zO>cI3H#i>?eS2^?!yBxUh6)@T1;mx zrni9gewX?^d9C%(VyK@DlNmu|C*!O3omF7fvNPuN8mDtz^XFRT&z|W0aVL9{kBR(u zCSY{7cTR)#xq9b})7cZ#=fFBYJK2)}6aRUbM!kBNu}v>$Ath zb>Q&l`H_d&L(?0;U&Z9QtWiJDe7F;=&mIr=fVm!g#+c6uV&=0!Tm*ZexEQuoTSLptwMKB?c;SDs_T(65!x80uDv!C0|=ZMosoj&ID3GgON-aF;=X{WD(KaWYDH5k?PC?)BS=7Y8F zqXkY6z*{kK@1sR9HR57eixYKvDcItaIlUZw7AE6V!kjN=-4-Y2bgpA@YMovOZop(5 z+H=H>uokDu=`CQ3)9Um#@VS_b(*eW0$(=A3Ck{5f8*FiUoZbsQ29x*p!+b_O0Bdm) zP9FkWoMESrfU7YXXAFk9lBZ#=6VJk4FP?+_o_G;f&w*XVV7&%+F?T)Rb}_b|Z@cQ8 z&gX{dEnuy?s~en;i5zyZUW>zeO;3Qa);Y{KJ%YTG`1;MF0A|iPV&-i6ywew)zUcI2 zaJX*XNh{!NOvYTx=#`YDS28d8R|eqleI&24(D@WOJqixrU-Bx;z`O_XD;YH0qrA#m z@ZU(UgAM<^DX+2#e57>t>}YWZ>~Z2Q*m7|%?5D(iuvOxIrw@QnlAeHN9?WMD#{5UX z;p;uGG6~*{NuOz$)5LSIpBB%U(I%^YT6w09@ZI-Rwc&iuo(mv=JHiRrAx^i{C- z{S?M7z(o90_;u~|DN*oWVN$P#QO>6{ftA}SuEtYXqv>5>#64#UHa!rBb*Vq6On~8& zicdd_&pk4o^_u^DMn4s3{-@Gc{-?5z@H0~0sfA$Gerg$5^`2Vp^a`i*?5xK`y{E=t zHi{cyOT=BU>d&d&;6Qqh)BC`ONbiR&7PA)1a~W)Tu4QzlV0x9yzl!T4&N)A$gN-1s ziutHNRa{p+tV%e2*y+qcdsH}uFE}zs(Nctw)4VdW9rYMa1v#A;!ewNGI zR0CF@H`Ri}fA`GWROfuyPo1kxjo^=BGN#La(j(3kp_Z7- zCzf#f5Lo9e#y+c`u@SJ&Rg5{C&p5aUlQEMpI+HQhVmkLi?^&@~u=*TZ1|Nlqdp}(W zqq;uL8kPU2E1h2D^lGQqIK3IHdOyuRVBK?5d4N+R$UB{1S3ghZy7E807_1ylk2<{s zZ2sj=uLGNZz0(`P+V|6&!8)I(cY@W=)8kI>a(WMVJtlf`dN0gIG53XeP@jR(`8=Kd z45ZIFeF3cVdHN!lwc*~+Fh-6z2CFoUC=to%R2ej?7fAA?N~#AH6|&u13E z7H0{p{(NTH=_?ukYM}X7N5S&1E^&GpSou^}fR#@*b5=jAnX~EjPHzOOpVduZ^|QJI z%r(%H>OmOwvzmQYKdXnGJ_=SptH;3VXEkfd!9<)hc%Sk-gI_m2>U5X?8P(9)&nnpT zKpf_yex5M`R!`30x~7jiebVVu8U0Mg)$8cY2B-IjeC}sq(<8_`a{(8Mf95h+>z=vl z^tFus+5C+D*#f6`g0=2vwHEvH+1b$N+|>6=;M556YDxfFx27Ddb!#e}&RR^baXQa{ z>EmFnTcfqO?pZ~l&$(ZOO%LepxX`+1#lboJBJ^$;(|erW@ALtubH9|sSwl`wf^{Cw zngr{7p2a@v+@7`Q^d+bBT(PIfXA4cCI3HHe*eyJ7dVk--UKPuy9#-dhOCwlyZRrLp zpDnJg)c^Lt^n~*ta{d!w<-di!wfH(+ zdB#xwpJ&dB|M~Ke&%GQrJ%YT?PvAm5+{$~E!&dghbjC5g*y*KCXMFRoaC!q+wQOw$ zE4Qt2=hNl%e(>{{=;788nCXzu=K6moW{<<4Tjre|fWx1K=AB*WbmnY2b2k4HF#Qn! zZ04^$I-B{M5A!#@5^VleV7{*UV~@XfVID8^K38=u2lzfsJI^1;xvPq zAAMS!-s<#Dus%uu*eMVrypY`RPJqiwg)|z+rxYLv1 zF--dN9PSp+!agZpfPGrL0!u&oufpVr*I=dB6@s;HT@=iI!M~0}wAG2!zC z8u@=A2W)x(PCX~!Q{?nwr$@ox!DO5gm~V+oVNI_B_ey8~ZV}hRCd5s!KNfSp*hj|f zg1JM?825|&VA)^#48WLA0&F^Cm_Ie{0sTi|bcVl>1nHGIw~bb1N6PI?9GxnlO=9B~ZR^jh%w((9ex;Phtj7vhHt_$J zPbciZh$mpR7w61?uamw4t7q~#YhcxqN=y2=h0r@f|8x6bxd*7Xp1sk!^~_&u)zkM& znDps_fzP>b@!AG-=Aie8`Z=)PqwD9LzUcI2r!!CapH~9b=eqOCz{>x;YOvm4&TDjf zlhfHlJ-5$e-}F7~d7a?D#zg+-^}y(PeqKMgNcsq@p5f=Q7UlEzTwgi-J^QBI{+{=l zPjRT9zY#V)@N?{WT!cLdIrNY0TFvO=1>i7#WIPJ~2qwNM8E5U``+H=(-02lguXK8q z)9b+Dd5(;;Cx~-CW26V-vtH#kJ_-)cMr1q*wj5@`M_@9aIT+SSo`;EIl9ypv19=6; za$ZYGssHT8e=W{#)*7V{M0V$=OvsE8#iSm@voOd(-@R<-v{Y@e1d#a#^@B5KGwHg0C^-gbe z_r}40gNc0h^ug%gANLG^5$F7Wvu7=%?`03A?=1(1 z=QFaGXG4A1%lyqJ=JXn{_I+ik z2)Iak5;lB&MfOfOebVXEVD*3R40s(T(nh$FXpGA@6 zl+#%+>tRgR8$P2V$yu=7I|sIV=fSqt0$4pyE`rT}39KCUF?Q;i6h!v%>qlZ@t$k%M z;peN!zH;zU(ko!iCk8g3YVamZ-dh91{*r59Os@lfR(d_`S>gt#H#)r;yhT1Ou%8#V z!P>gqBa7b&wsqr9?*?zhWIiJ>cJC(ZHgtkvnP(R9{m{#{NV2J37;##)ryV^d%~ z(;j2~rq4Ki4xEq4oL69Uh955kYu(3VV8wsD-sugYe*RZs(<6vH-ir(6`FKCr;tV)_ z(CN(I{Kqo-L=#xKO~k>7bAAtOdIXUt>TscZpI|;(>xo9E^Zc0J>hun$C%~%li6L+f zCVKKj5=MP{Vjir$eqzDti%wq#tA|fA_X14Bc`^#4_mL-KV8wir`75_4+rV1)$xf%o zo!;y81Xwwz{tl1DVgAt1-v*l=$YCBA>eZ90VEI4AHKjjQ*zE4Qbbz{>wA z_S3i`X9-LUBqMD~-_ll=i$IqWZXda2X7u43+Q04x9fZD93bzpH(J zzth=X>d*cp*kVqB&41eIGhm&u{YzlI|32;Vf4U61@_f1ytT?H^p9B5; zhoGfL5P3R|3-#e??yvdxIGuHw&RWc$`AdI>{mI9~Ya#VFYM`H=Yb`}dcD&do!*ksQ-2di?|sjfhx+-?z@|qKN&Vdwt@T_HzM!?9bNl;TiPPCP^Jm}8 ze;%xJ`#g~P`L7Uc1d-?G!MgYPMX-AE{F2jGoW7RPr}Hzq`+FmiY3@6F_&RKQ1d$gK zxX@ZJ41u-Q3&Tzyb^5r|Co}qsZD6jA{d%!C)X!(W=@CR;YQlxqO8xx}t>ymyM&zY- z_?X`5{JS&yOgUI<&D4eZ`R~G}M-X{AiVLmvaw%9bUv~TQa)r~YoPUkem%&==l_1m` zQnA3P5ky|0kJfr+6|A*har=_`yA9G`Ey(!4%Cls860Egeoe%Yf)aw(R8bM@s1faEM z$H2OG*6oY?n*)*ADd#_%@jn2x*YyFesq=Xt3fA-IKs8v;mILgG>9tO;2kU#E0}Wt3 zPY$$z*)RO(KpTw3=bkF(197K!f%O_ZFaXx)&jU%Y`Oky(EIP2@^hKvHJAEb88&cmJ zfKwxg{G=S99{wZ-R{Wo^F4I|y>CH}OUDAJA3|2lrjfHx{k+A6zM1DGg3&s3t5^VRn zefjCE(^;4Kvo871u_sz$MoZpnG3)b-m{5dd=1Knyc$)uCAXc zPDARmvMm-wewF|$&!4eIt@X2Ur%yV4#_6u!pZ7plT|ZZxhScYK=&2Dz=A!_uHP0Hg z)_j%IYn;wAY5uO>*9)L)t=AQ&;XG*R5ky{3;6nGl?&^Bo)%Cio>vdPx>#nX}xVnB} zb^TL%AwUrMWi+$aFI`=~banmG)%8nP*DqaN3$CsOtLw}EeXWH=W~~KR*Mh5S!PT|k z>RNDh{imzzKdr7S|NB~RL^Er>Q3lq2y;0%xN~c#l-PQX>3v}(*8*ShmO!V!Iei(h9 z^2UJE6JT3w(D@95^D%iZ>(%q>jRi1!2mM!!t$Tk}0@k{}Ds?)0YdZJH{HsH~p$j%W z5HpSoouw3W4X#B$)7ekc`@nj}{)#o4&Kgah1nZgnt2wZ0`PDLb1191x(lBo_`+uxB z2CL5=i*;aq9$st#7h%$$Ii#MK;AybFH(8tqmtex@*HIY!?5<&q*EXQX!K&-mtV{j* zHS;%pD5Jm0b=A)|dqch9aoF?-B5$%T-TUSmSTTRYeUtth=5G2dSTUD?)Ek~7*a#v^ zZD8HI)CtzTOU&8y{*3yAG#!W%T75uwpK=M#lUdY@KL%FJ-_M77!+Wsl5k&q_hYQ901AC>Ie`s`ilhc`-`MduAu@bu0`lI|WNS%A= zsS!l}m;~tFKeC5f>yJ}TXN{)MJKgQe$`Ev|wIcru0%++GMBXmPh1PnTxhdw`RZg#V zdacu4AKs2b*II9PgL5$PI(j<+qu2G@6JWir-)3E=vo6!QUwS>hJrCAv|LsMvK6kyn z47T`dVCDP{(DZlsbv*~(DF*9v*E=z=`8R@<^E)k0Z*_V+)GuI+^avvFjNn3jdnXCD zn5@P0*^Hk0=&rTi&4;f1-z^90IsY#EZ+ex}*>m25e!klbqyD_x3)Z^t4udWJnA68Y z{eq)m(<6wil9lIb09Kq;)@gcKM*lCe*8Q)#P`}^=*z^b@sh5oIeUJGn=6eNT(+i#M z)_Skh>5Q*h-fIA>C-1d^b!Oht6VcY2r86JXWy{vcSj zyg%;rq|+zCs_}i+YyLA%p9f=4FE|Z0J%Y$u6c^gBwF`?b~& z)_$!qPwm%Q(&-aUXU?ke1EA&qK@_Z*AF#K|=Yw*mGf(}z>w{Ww5hnKf1NPkfd%^1e z2YpUwo~9?9&OV!-1nc~NFb`IqAM%`|w-<2D^avs!#&Dq?e&~AjVWZPq!OHDVWX1mz z^Mrmu18jN(S*d?N4`XIUn(&3NCt0cg4Up-b89j>}p5d&lM5tfT44WQ7R(2CEbZ<6$ z74BD7Ht#jPC!-%kF2sxkSqF`T`USi%J%X$pUhCeRI5?~^D~I=*K9JFK$zknTxyew! zfa|A6kd+t5h3?Jk1uJGA?=^imqyHIMG5>5j)Gz3UO^+ZepK)|=egdqR`MlTk@r?fG z|BtITfQqcV(zUHBMC?XADjJNa)k=5M-PlblDk^HJsHhlGv4ay-?2s0fQB+iPNK0(A z(O`=$Nw_y;Qj;(VaY(}bhvetZkff5~{=?kM%wo;3W=MisMv{<(OwdNf3DN(3>%6;a zuY1<|+|PMypZ)E=8sZxR@J~ctJ5YxR@JU%#AMQ#&qa^ z2d~Q>L8LH=6XjDl23E{MUTgYHPCt&UJdaxm^*ir@%^pE?VI3#owb9q8hkGgd8m;Mt zPUo73^G07Q0f+Bd(br0yUgq=!IQ%(nH1pm3c%0+kihQjBCft+J*P6lMJsW+k&2c+; zGY0*;V9plzz@8)KTJ9A0!EO-`!EO^LVND-)I(t}-!T1v}7H1N?LwX91|-G%j@j3*75ZYrw@QRH|H93`jFGv!vqF>#$i|kc>*ROo`Ka`zrF}QMf#G{ zmz};2MxXEOp`RT=^o=^O_T(E4;3!{%-stpZu<5N%XI-W<|L}PpePbA`oZlF6KBG=& zUE%XE`o=sseE*8Rk#;)kGJOSHfWh2Yi~5|VBt6YJO)mt8@5|A25jcFmj;7;ao+D1W z6ej!*8%yrK^(DXN% ze?TFKzR8+c1DQ5_=0xA*>#Ffh))9V&kG@$z}U5MN*L5xZ}?d~`er#;d*;n5 zuxfuZ0S-T3Mc=FgpN+w5*%Mw*Zh_e??uHHj{6qB39&j9kK7%l(vp;bR>ccSG#UrrH zgZe0p>0?fx0H2FNpII37@XbZX%V6!3H`l<(?anX5W{)8H3+At$|AP5zeSgvF^meCr zI-P56{>)AL;TOy;4+FXVg1MQ`oYR@7*6SDRV6E3%C1BO^RwY>Zzm;%$jnlan+!L7V zt$L?7IK2&QF~eay(^;3r>~ng*(}%#S>#Z5EYJbbs`xfhke&^r7W{)76`MIKc zzF348)T_l}u<3E9mpQ%4>CIr(wb%;Qb9J#BY%zPBJ^dE3FSohQ~ zfu{eG@k}oSbD-zH3}Cd5zvSAP9tR(fL7#FM#s6hBSh@Yu_5YXMPG`=j>&_p*W)H-f z!HN3w%LTCd|H~z(ujce$F(0kVuS&t{)vwq?<@2k0u-5ul%ttXZKMS>Mhn+qG=9*5! zW{)8Ht7V)hw_mM+73bIVk?wvL8vQlea7X!CK#6w}X{)=I5DO zmtUu#Tbwl5;w(Cyd7AF>T!Ngb>)!}=1kt5Bu<~4L2CIilEly`{rni9=e~EdT-r@Ya zot^}nKl^O{qhQs$G!E8!Elq({`%)UrK4On8vBp9%i!q;Nr>}suSC>}7cI`S?&-~vo zhV>$46ekWPZ!KK@g%Hj|IGqewf`pV zbk=A(>oR}VCH=R|U%mQmJm>S2?lcbZ5xbg{OurE`TsTvJ`aOF!!Vlb zwVPPAu!R|eLe{9T39*#pxPPG>(&p8#ub{4Sl-m*XMdmGJ{- zjv%_sS~PFw=g)b30eUx#VlMZ9P45Mp|A5nzVDle#dJ3#QEKh^g^JVs5`)YaB>FYWD z_neb!gM5C^{;21_kAtS%A@8|4B{ye^!V3U74RNfip)C{m&tQdi9@UV9ooVlTM#?`WjgC{sCyc`a?<1 z=MQnGb3bgyKyH7igV`bOg4KTh19Q-`?hi?)bB#j8-g6InSs(Duerx$_G!JtnuOsSatF})mY z*K*y}&y@zJH#)ry%vg-s4rAALIK30B&#^1)?dcfw?}mYXSEldOct9V8(YmipfOTK2 zOgnupr@sxfd-iSiK{>o#0oMKUcBRv+oSp#l8qE84BaC|cHuKcHZx4d?On95?i&c7e5{=YNee1^cv`JG{~a(-vb z@hn(-@|}67FF1V>T!?|%-&u0{veVbV`b>2MX#Pi7lj+Pw-`$QBf%ObI5(kGrD~=xF zTJRim9jS%UUOnP!Kf>Bo*AdpPo*ZHArn7d_lTM!mYhN8tM4-5MAxUiPmVf z2dwp7?R7fmHJ$5j{_L~qGhpq9)j2SGfx1@NEA6+{^_>1LUzYwZ`xE|5HTrHjSUr5V z4y+pAZ38RjyUbbhzB>fgyzeHR&fK8ibt`Q42%_&U<3#zty9%~A%v1V%^q2k~=Qo{s znqCdoyzkY3m0RX_Nvi8Tm-Bn=@G-pyta{&L{;K!ANwDgDZvkvEnX~47zYwf>-w&M5 z+*t3Ou-PMszF&tE<^O&Y*y6N0y~F9u$KnrzmBafpVCDb*tkdV5&YUfN8mwpj`|K@q z#eT^Aj!ALW5|C8yS`FCrTCm>7*IdqPozRurS`S!rt@S#c`CFVRFyi0U3Y$HU!#YmX zlMnE^#rdGv>7`Du2W#FB8o_xOsO5uh7|rzo^D&+InBEWO9P}T7(R1ko_EY(Pumo28 z%e~NeOw-4mz5uqEi(uuJ`5l&WbHBri{*n8~^paeh zKgPjY$3IqqwT^#m0-JvqST+8!+v)6y*71)+VCDSB39xeeAx z%^pE?y&5N~eZ3Z}`0HFF(_5U*wa~no-%l|v)@3~jqxY0`=A&onI`c7|>t#A~(>kuN zf>q<6N^(Abii36SpGuux=Jax>H-VM^pSr-x^H1GQ?{WGl82Q}w0&MmOq8}FGM74id z3|7n!nS<#SPG_$)*N4sEJPh>Y!&VsO|6w0kwSUMSnm*|C5wMz&@<^eJ#SZ|tar zoE|9;`JP|EW{)81=8Yazffv-b%y(I>ZzdnptKp;jDD(HWO|Nr0b1T3=A2PpBEEKbc zrn7IR_c?tCtmi}K?u-=<4UuT#N8I7Ck!d^iro+IK9&84PZT2 zk8T2MEskymYpsuF&e{V#j!W4fKr+)VFx`he5N!8R|~UHKm~4Oafgu+Q4t$E<_(eYqeGR{Vl?u;LVSIK3;> z_ud4XJ%VTf=TiO!jIVhM(oSE^>Bp9U^D(e*k1d5!ZpW5`bw3_k4OVW)x-~tv4*I1S zytV~~e&jwFy{8{L;CKS8_pf7T!RKMne*vaSoQ74-$1Xa3J*RId0qZ{9z&v$7Zm0q4 zxxImTa=j6M1NWZ!G&sExZ2nDP#-)ENjGprw*niVIz;O)v^uwGZW{q+25Nw%v6juG* zFa}m#8^)bJ1y=tzOgo<$r!Rm}=iVmR>=8sa7UD!}y)ghQ&c-6Avj?WL4&}446kLFT zS~ga|m`^2G?=KtKAMMYLZD7tv{|*>EZ#VWjW>1(0eFkClS#;wtSU;cHI0|MS^cjQE z&)zq(C!3_t!ZJVl%)yw>K5UbohOG#>knuEEA+IZvUJc9o5vQ;g=3Mmf0iN3dy$h@! z7WRSj_!@NPZ#wfgeFm&`EM#u#Tj8SfS#tUsSbaN=z0rMf9CK655bq*4D{;w zb{N%l{1Dh;roa|+%IPysXAjMP-s#Mlbv+B4J%Z>7?3?mGp$@ETPhdW#w>Z5ItQ<}l z04x6!hMmud( zgHfA8JkAz07t6S?;fz1iQP`` zaXRya|K6{{W{)6x;tWod=ZOnoi^+Szbml4jq!O^^I;j+_bvda5T!4Z8pHvN_=g&zs zVAeyu7DoA>)JzG3dLN9%p9EXXl+&l2?(#fo8M@`O;{2I2^u437*&~RaT#ggfbu#nR zyeBg^(;J-L1y=l%d%()=vIK z-cuNlbz*%_;p^(jDRD{|)S0K|J*5k*n5T3*y~pV;&r?RBE1y%woIi7h{+U0(W{)6p zP6{VsT_K0_M$VaW`Yc#_DNx_hBBj(WrVvC*SxflcEmF!lGM}TN7dgEc9DWXrl$L-$ zfx&AlVE7uj5+?k;L!`9I=?QT7875L%VJmw_#*T; zjC!)U6s(?XE^~SXSUuUyzL|d&So3bK25-S&%o-Twwwb-Md0WBo*@yj+JK#TtGxH%^ zZWB(Q%;{S=KXbxdTjDUg#mrgzVGDCBke+}IpY4$?%*}jioz8o~^hR*_{uSBM3=W_F zku5FGhqajA=JZZ*_?arQr5hanj3u(A$NBU+z0c``;PCTyWJ?lUjKLa*VJx>1r;j>) z0<8XTNrAUw@Y*RDyLQ^?Gftle@4%pc8m3&l2y53aIeppbYhd1ExHdCo_~#8GTk~>0 zTMNLZ7doBwZNlKSahS8krLdZJYnjuTm+4%8?Y*rvp}sGG%^rx^jT7ywtv%rIy*{$F z&*}Y6PlB~iwz8k$XMo7oS;xG;GW!?t(_rnBtt;U085?2B`dLb(jD64^C}V!%_peA9 zd#1H6i#weco6dT}?^%(u3b4hg0;`{8yzgvY_CYz9@xD`U%UFB(ohwq-3)Zuxtl#Ma zP9FqoFO`jg5ocd!K5*s;B4w;sy)9b>Yc0ywoW7pZw-tif3#|3FVi@&#TO6#Mx3Na^ zVJ-QXcROtMz_rX-^JZA{ZX1Sf*N%g=*4rkWKI!x+Fyd$OnRWV{(-)k+3@*T6{;bz> zV7=0}(`w%BtXJ{32VlG}@5{Vzfip)C*!Pl`FA^g5N!TK zU_F1fC&5J+$ay>aWBMq5G@^TLJL?Ua=F2`WZ3Yg3~gR7lh>vZ-i(?9q$gTwFIksSlzOE4IReK4JU zFrBsEhC!bZn3x!Si2hhS25Ua!;5(#Gz?%Q0^G|{QK|WL9Y4I|6R=nbL^fs%nga0-3 zDG$Iu7o%@ky~OEp@N4ox&!WE*SApLaSA#J(Yb>vEKImaquXFwlC`<3@<&EHzb#0T= zo55Q5@@}y9OnHyfd!63r^nRzapW2`0laABK=ihP8oSD1!e>wYR`f4ubxdpkH=T^WU zHS^kYX)hO}_M;MF)TsX_QRH0InAKaH-U;S4jFW`9Ry+!8`ULoT>1kN)v2&T{5$WsT z4?^Av6Gh&Pxf3~?&(1=p2hP6;{73nhqDJkvon_DwHxmc-W_>E1UgiAJhnU`*cGiM1 zU*_66u%1gh(UYtXdXm+foPRS|>$S5DtoN6l?N0A-dN=ZULv!_l-xLpn-x804ev1 z(5DK9*O1Xe+mpM{H+xUt)dJSDbQgM}pV38jb%XWZy{iwb&(gaFzJQ}t|g~0JDok`CgohKFj4Uu ztn>;>m7!jd2dmFr73>pxglj7T7(HVviousj=fzivu_uqZM$CR*C$5LpJyp>NzCn5` z?2Y0M*amSYEU)3b-7u#2g7;uhAAq?_oP=!_v(FETCtx2Jv(Nj*v#{ObH0}QX7 z4fbHjyW_CT3G?o*fO%4!fNdAo!#<4n{ZI4U4)}M2wGVeQfAxQNpVL{3=|fH*cKRwf zhJhT;i^ITw-=Fi`4(R=0&2`=&STWCYG0$@`&ttF5e>~@ZejZqJozHqX*AuYWBZ!=z z#EGswe*~<#&UZ1-A9Fg_!u(TCXP-4!Wjv=>vft46Jqw#Xf=J~GP87%U1F)vEv1-sV8yvW6@axtqc z=6ACJ0YRk7#jIL~q@G+%H|2kEq019r@2WvlE%-$Z0fq5_HT33mg+XLcW z*fwzrRz1IX3cOMJw9^-yo_0EWqR(R&uYga);JoaQ#bmwGGml{TU&0=of&u?aSfkz- zGXGz~bEUJcUE*d~?kDCIrxb!k6X z@h?q*OE3`sQs%}!l9`+7vreCL`T{tPLH{(2`7eUw7}Qr_&K9r1#>MNf(yJ-42KZNV z4{IH(>%j2Yx4_rzfKM8%Jzve3sy*|TEd4TSrWfS=FJpbCC&23AWz9}+ae6EG&oGeN zW!*5J5|6=ZpI?>&Yp-551=eT#%VwMpduTd)X#VqH?dQuD9j}7b&&${=ea^X@wd}w^ zK9{psrUy3we^V^OApDUTO*7wQ^u;#k51}y(8xn8E%gO%Hr&CaJAthuga4^P8j zeAmM(#~__9Jq2t2%+vgtCw%VB%ni;QLF6jtrXF79a=VK8nBELl&R6wh}1A=^`xd0toSt*PG|n6w}6#T4RcekYWkgz z>tW3ZboHku1=ilHSph5mYl^_i^O_Q{ovK z!4_vI)bHnY*&~SE9mh%7hmgZ-V|SN2Jpneo1{`1?2x85wQGIJ>UEy;k*37z0XDz0;Ilas2 z%sKq*8fzW}=V4&p<|!DvcG~I8Q+;b*0juZt1Yp&2PbpaW-&5iAN~c$Y3otO(JqZ}| zuK}B04^|HMbb~E^KUg{6GvIs%L;Zeg*#q%saiX5w!~8Agg3}kB&Yqk9T29{^2W#HF zW#BvvbFV{#RkMM-Xf2#);yzurBqpCF%4rr_Y1c=aw`$d^W~fSg(5c8O8|T%VM7izY8%;G}!!SozI-p(_r;;AJF=?kDBQPP7j>UUa8OfD!}UVzDnm)73%l@ zzp&XOi0x~~iPm&q4_NzlUoY6^?E_oC$`_{qXdt&Tf?yK;rJe>Fr>41=d=$u7R}{t?N1czQUY-UmUFUy{{Ckb-%C7 z>E%wZaC#-U2m`g;R}aIuB+p7~s2dau(5od2NHnP&_GdETFb;d+zP zFuG6gUj(bh2biOBet^Bwybm;h73YCQr#Cyj&FLLZXWuaI{r>@*J%ZQ+DV(U52Ux$& zHRtqsr!!CUU&`riO0W5#A z<-eZO^QcMBW4?Np<}okRi=18z*0VbEcYKsvUb)k&!MfM->cHX8Ok#NrU|x@U^IBm( zF7AZYXZ5^pu%1zQz2MCl^k;8vu0f|K!BrUaVIR&DPr+7-XPiFk^cAqhWKR?)^LKWX z|IsDTRqxSdVAJWV{Ew~yEB~WwozB`#XYG0x9o-1lyhk@Xy&Y^h^nuUCKwU=*y3>QRQoXn;9?Baatzl? z>vBv5Sp7eSF-+%mrYFF94j)qkR{UdFyXmf$V_1uF&is8Mt?4n{?%E!(>3v|!v)}2% zPM-v8tuue0$ao&QYA?vk`4^OdRZD@Zv4HdF-YH0cb?+3ox(e!@&bqW`3Rsu+Oy=(> zsSlaIqr^RPHD1piL9Ac`C)yhYDX^YJ1yfF+ar!J+`=Mab=}S&u0qgT#0rxO##+n|> zdZlOn?$UA66R=u~V_Bo=wN9@C$1xbE5hhaynCrqlO}!t6eIXAz9s=JYJqc_6!{9rl zkHh|%m_4~m%r!Ni6xe*&6Z4q^H(_wz1*fw==Fk3^|0-Di8`vA^8;Za!7>KhW4)Ymt zIqbdSR#^3CLpxaeb3+$c-%U33g7yBA`TI~6IA_dRm^Se;tk!zNN>1Nc04@!EHpXEy z&zK;#k=jn_%ttXdR)KZDZ>$F^hmGxE&6WAPNLz4@95#-?>=94HY8^MufUl9h2z#A) z3HI8M3z?gGRagdAuL>){>Q!L^j9xw13!6QHSRv1~&kOs(s=aW)>D)7>4>^6<=_6q6 z|H3h+bI+Kb0&AZaPJ#0Y^hX3)*UwiEM7O?jA@vP-+4Eiv(_So_L;2qM3V9yng z!fGv!A9MN?xJo|LPM>i)>$*fftR?dc7Rw5z0(%PL+1`dC>63hHODfyp} zaC$9Rb)8V>^m?baf-Pn*Sp7d?0$hQCKAgau^`3YF`)_lloxTp{_3#ghVRUT}2kZSh zU_RrR?=K66f=cX}FZ*RFu|`R$}N@OBK$b#gI`<~q3qEdP_^PG{dV@5yCO zFL!z+*siSt>pnd>0k*knoX*~w-UL>EPVNM&|Czr>W)7Qax20r*9{p<*0MO9#}brJK|e#`vbG1Hr!-V4@#D;faj zVIZHP2^hUU7EL*Q+UZz(D*{ieZ%7DOF(Qa7x1ITnp$A zWv&Nj4qV#_P%Wo0f8~4%^EW-|bmpwJJB4{Fw^MvR>}LT6ayyk)d7g^<$?o@41F-hk zsbzG#f@O)S=0QQW2P@Uo%gcoTvPdfyacSdK3)n| zuRfjt>z?{}gVP(G-U2SbKu>O_vuZCX z1}lCE*IMyQ5>Bsmy34bKeK!AAF!FhbzS$#)l?>uUwUi8lZLU$LGk?=3ot|=f8fFMj=@H|BOm7&r$CgO)!doMlaZ|9Re%n8A<0e66z1#2Ae$)XALK+#Q=c@;|HG=@m||a(cDX8^NmgtTyM<9_kO> z4VyiJ*jcPay*+CZY&lFjeIcjE8C$u<*$>SX=UNyuXYH9db2h!w>C8>%* zk2yV+)6Xe#%$UmOoQY6>=pbzN2x6sN7tLEb30C~ll+&l2&h;|?bWYFwJ!@UNnK3o* z=K0X)p)bH@k07>X8Yhagg}v3aThdNnboxq8-wHJUtqqPDQ}b?J3-yP-4x2rKSlJRz zG;i5DSo3b9kMwPMP7j`G79xDD0t`XM_jB?l! z2b*3BHvbBz*MrTUwVQtvSkI*$Enw~E9lU?^EZWfz)^jiO_Yh4Vbb1o3y}e@?d>jVz zoP^P{aR=Ab;w*qIPTJ{sBg4l!80QD!s zs`tTJ=vs>hnWyH;{4BtHmZ2A5psokkU=-&eu8VvgDg`T_hxnW^ook_MGw<1|{h`Lt z=h0%=>=DEs8pMgk9|9|%hmuYocKRsT=9+QLx@=zd+X9^z`LhqEqxQ&WaSoqH(Z7g(e*0)`&i~O?uzrU5DD#P9(4YC}XOfR5 z!R9mU^bv3g2K`52;$r4}ws;0ME}nxmectKJd8d5VV9yV^BM25Z_P#Z69cae61XTs}Rp>g{8L z;9I04fBPBrW20dGO!%>J=QH7S?!!G8Sog1Hp!989H{*?48Sk_7ZYM8skwXph~-Q(5Q#DKhEn+Z+1F+^%)Gt z?1pIouQx z=hF@!?UN^y-~$-w=aUOCZQ?Yn#awhc^0)V+Cs)9_ub*7a=}(~+d!KrWy_e5Zg-&M= z7z^`0RRN>VflpOB9W@^HH4OSBV1~u4(R9>!)K{g~!6wD1H|x^~wriWfBl2m6{f4*= z)^zsgJJPWqj`~}1683xIIoSUh@?WstABf9geiP@LH6`wWofr4Q z{=2vj_TR*Vu;w!aHlL)^XR+4oBjYnq^IvfK68J*-tb+A>(yjt3+0 z8Y6m7>}mwxARqKLtG774)#>PS(XSCLh-Hf5dA!J=4B_3H7J*VE*V6&~RqxZ)kY1JE z3jKI7>azRjY4%_D%hT++@_(8+>t1_0o%8ADT)Nk~i@>_4x=RsX`?eeNMy|nY$frBu z^m?bW=h~Cq%uRjn?gm%s+8(E)&sjZ**Hu^dG+6!bUI6P^-Ms{!$3PCBV^7rE&mm9C z`E$(YPQ2~@6aDOfKYJ44Id~W*DjtP3eaz`xchgfj{h3N|3$5d$dAtPH9O$5 z23DK{d0@?ZpwQ{4C99V>J?`{=u;x85;&jGG%tzmV%^pFlrxqugw+HKD@q3uF>CH}W zb9%ee7r~nMS>~+#pREh|(ci*mk0ACeb5s0h$HC@5>GYJ-XPiFk^cAqp%Np4`^!&L1 zM)&D+72so}b6rfYayt8PtbE#GH;8*-&0lMmiN65d=1PN=|8q+@{UH0G+zv7y`5Y_` z^+(@>%^pGQU@K14lY<>#^Y3zcx6}Ka-k;NZnV076Eq8in$WNREn>~X3|LDd^IB&>d zUHSjP+D#t-hu^jH|6>ANaMV#xWIkhoGY8_V0OUW<7-9bT^Q_(U5~tUI!#wln>%f|K zz5yKeJb%6&9Ii|LJbPj~YcahW9DdHspJz|l-=l*3dG_Sv;w0=@;!)U5;xX8B#M7{) z;uYA!kblaYPZXEKo-Af=s`00sOSSwo>GWZzb1vol({ZqB`6>Hp`lQoSPM-y<#-A>O zmD|s-4wl=`sF}_lDCeJ5fYsZdRf3iC&#IhW4^~}2>j!JDpD{PYd}0f1_6YKSPS%?K zoH;1|&pE&8MNVfAO=pkIzYeTE{JasYJ@)e!aCi^q|Gd@tw>h2rfw8dGKktLtEFOck z__JV(vjk>-^j~)RdQM-+yqx(@{sQyofd2yf8Hibn>2a|3(gJhQybEPcPk_z81vww6>C<5C^Vc}9a(-{!Qpc_Kl72O0O#n#>x?1)*SS97 zXO;ZdOTppqEAwBkcRmAP#e97bY%yKmUQa@|_`_g}KL%EfuQPwu^7@?9S&Qjur!VI8 z%-g79zEJ_4HK3L^Dq$4=jjB+8;&Q%b2YlMW>iHYpVDsl5Hl1~uo&qbMH`srhi}`48 zys_kT?rqcETBO-q-PdX6toZ3Vu;Qm1o!;bh=B$|MBv?75$3p$7TG;Fn+~To?z^Y%g3TU5{2e=Reecs*;qi59i9!eP0*+aeO zZl46JmhG&?a$9sdYk~gMqp;Z{$lu|5zM~c|DCZr_S-r~qKGe9)`3!*dY}~cb4=fhe|UvU0u@VOZ1!;UqWogtUA7R^;&0agy>RZg#V zdJR}PWPX>bxyreAb}jp0dZY7i0%tzk2KnX9V7+&gw}4N@KyKw+Q>|Ay`=<3OZwK48 z9bohCbb6Q5d%^l_S>EULey0zCOE5Su`+uf*64vyT)2G1OG3d{=(7Km%Elgi<`Z`!K zGyndo*8SW>&gWeA({%RD{JX%V*n7{wW{)8M+)12hU!BW&wTI80clu&Z=f9_FdwXXQ zSUK;k25a4SCY;WEOs@lLO?S3{wWd4!z?ygG2w3;dPWI6B38&A15%Z}RVY5e&zpDu+ zs%2LjSl902nws9@^ii`dUsuk9o3|uft}KAm9DFm-**$eHHV(F|cYpkNr12<@BkXets2L zIh^0@^km3SeFrvs1o`K?9#$6M1;wunz?!$R$mwyXmpYwmqj@V+IsF14V}6!>${sW!%c05X9pLae8GF7HT!g`EyJ5m-X6*Ss@GcDM{V*11 z0L(n755t7d`PlO#VDlMu`WQHTpN%~~4ra}~b`qvUJOvvU&%m-5^qGSRpLMb47r}T| zf0j0T1hE(Bt3JF?1fFz@DhLFR&+eZ3oz{Wlzk%%lUVMxyFpoo)n4) zV8i#I*b75o{SNB|_Te=7u&y)2tFYxEf1Y`&pP#P*UnRW`_9iiNW(}D4^DQu+5;M=c z#eJ~N;z8I}@hI$n7mvd-KgL;v`CsBC*#A$w4Ev8_=J`({_m#l@A8{G%KZ`42|6R;l zOiwty7Htl{&&K*#$ITeXp^y3VoZJJmN6h?HW1q{vZydUE>zhE#v*bSo-XvZCZw~pz zQrP>&%u{`Mk$EPibAI*z#V#=Ykk5w z)p95RYrPIJw`L6Z94d!VoI^EW#W_?DR-8jkV2jfMF2vxq{V>{lhlau7cZ%4dS+Mro zOT}Q$0sogculD3ioXdPTPXz{j7{5x~30o;kN&h%l>)W3KCo$+h2ctdQzY5kK zewp(oFyQkt_p{dYW%fX8@p29LR~Yoc9zN;~aXoBW+yMIvaU<+oV&-hu_JV&ceGK+J z@eJ(y;zigs@jC1WAs;S+{gb#7dpi)w9<@zW*-&30UQScoLkJ zo`O~Who`{G|L`1G`|xlY%sSDB!^<%0`QcTt_VX(RVD;@4uDPy#g}u@`zS08TgMm1& z^uZ|3E6mg4FwbTT`lMh!E#_RUArEja-PZ#Z;0L7lz-kW+^n;Vq2VwtO%(?!TcobI8 zy@4_CKT2oqABmUHPrXNc0a7Fu>R%{=)%t#+60G(80&8Th$o~tSFv{l(17Pk~>T@uv z_X~(`^?qRmtQxb&j}G3Qd>zR0y!ufDhdMz8j_ z)6b3|_N5}QYWz|$ILgdV|v&!Bf(koZf;sHg79f zy&dX+kDgsaonYNlLp|VkF<4_SjGlo*1K=6ygRuWw%!Znt1pl-2VW*FP&41MCV_@?i zcX>`g{}&AAz?!VyX)w>J&%wMZo`*Gk5&V7WOR)cscp3I@#n>}PVZKb9RT%SG1KYLh zVEKOqX#QWx%lUkz06fVTgV-d!#T-U8@Yhgbpu7iC>To2nVZh$qPMzHxbxtPt+4`8sC7MShgR@g1#cBglOt*&0M zz6*S10363)oIw|V$mzq-(Tj}F2-xC}g11T^bNaZ`C%|?sdY|n{%IS09ZHlu9``6+n zSj?T7ciCOL;`CLp`LBb&fq`27G7n~-xBynq@V_i{dI0{6e2Sc23^xA~=M#56rMZ0m zlJ(t-!FelT8pTzxw~MQto&bMRdX3X-!RF7sVLtWFr@_t3dG5gAye%+~i(6qI61O|O z6U;&XE|@39-LR(jIK9`+H30qd7`%262Crp!2 zbKqhO`pm-=i5Fn?od3(T(-)n-1h#9rPfo``oUi7===1hh3&593=YBAq`{6R_oYQp1 zGyf9j6L&tPxmvzj2K@>Q&RYrn25}YmMsYQmYfPVn^Qmz@way2=cJF)@`yqR6Blsr8 zX@S+}fv>iK|3i8w?9atrus;=d!4Ee22Nv8ABTay|0$l^0eul1;W>B(CMsToHGMs&Ckt|Vve4-r;1~wtB$2bl zNzR45|5?6fM-cm~BCz8BRUE8&|EkRC`Sd`KZRPyL`Sr;dJI^F{hnAiJ)DF7sasdH?@_%^pGQ8(a&``;7!x{@=?h@(lM(I<-4`RwS^13Af)#(n z^>(De>CMi+)#>c5`Z+QH-iUkTA7Qgc5F24`s%s<-wt1JFzU=fhr?2PqZch9H!1)+hyKg063dGD){rOfeSo3~s1Z;6eoj&gLl+&j}egD70W{)8DY7tIU*Q;@` z;=fwv^m3;&PxG&KdJ|aryxIa*U9Wb4)!SExzy%nn@zn_!n`<6y*Dg4H(djErUkmm9 zufb-IAoe#kI8knYQx8`BziD(j^EAEH>1|HuS}UKw;au_`tqOVn5^VMeVxv7c(Y&Mm zVDlezI%_w5#OZGBzRk7Jyx-Pb?A5nB!)x~+fz2M!r*NWqzs>td@xMLqbl1;sGjH=> z&iQ|*0jznyqq#WmcP2ug{U5?+k0AElJe(-bcLT8I{cf?-OPpTjbhnqjTL)e9ewR6H zz`(qJTMMI@f7<~*OFH|U*}w2%-~LTH`|xq`BCI}_jx*0^LVdgt_JEjuJ}73Mz2Z{X z&x)DnesLu%`-0rYt6}t6eY^&&?*-$mr4fTZtff!f1pA`61-4z>2K%s>H9jEjg5_(B z(*vXLP2-Gruk-=fd&J|gJg5I8%ooH{u(yh5U~d!8!Rj;W_yYJ7(idUR7cawBidSLv zU3GjNyff6lmj`>5xDfVgaS<%n5BYqr1m=2iDXc!Xf3F-|EuHi5HTu`UG>PkA?-Vz{ z>iPe@4scTX0PMerM_{#=zBdZi{`uax)91kI+xHg17IPJ>{qy}Iu=daQnO716xqZI^ z20l+`p2gI7KyQK3z3_eR5zYJk9;XjDeG;69!E2{r^qlcx-^Wj=tAbkS%BJmuoel{}6=Z5yxBy;;t=rdUfJ0`Ay{i?VbHYsj_)x9~{1%6t3 z5A3(ZN!VA#!?5GxDOmlSYLfZzHPkh^0`u46RoE|u{DVSR)&`#+6v62G@(K^|=9r%#+2H0M4E9^gsJ7NE~m^uGIJOukgG4s-M<_9To=6e`&VE!E#%qI==n0OKP z&&1php9=Yhd9cg_{y!{%xm{ced!M)(_I_~ zKj#{T(ew6)lVJK$pMp6pgSJY!P-kdY6e?OzHU0# z&0-EapK<5Id@ja7ZaCDai*$>k>ubxq< z`JDdaqL81?+z;T)5yXDn0#KYEa~%}t$J{@rcR8K4o8IU2QLyIyF>}y;{o`ryu^6cR z$E@Ar&pLe(tk2s&DWod~{C~op@SMy(=-Qt&f;HDqnw-vBOn0^Xgtb6_Ci7kh&KyB( z7w1teyNbbzzpKRQ%)#_>r@MT1HAC0DyIR3{7|7ZEnX6dl|IutZ^HG0x^@H_H-ZkL# zL8m9d>cg%Pu%6qyM!_dzaIPsBt}%H9M(;Znl$3u3>r$Q-Wlm>ZrYFE!uZl*n=B;Q4 zE6<7!u=1~9Ev9pynBE=g&rr)AL9Aj7C+c~H+b0zhPM-r?oO$qZ7^tga0mgDmgH2xo zTfNIpXCF?&;I*qT=ChX5GjAvQ?3ej-Wt&3(-9@n5#Ko}O2Z*zqJv5!o&D>AWtHAnf zv%A{q_28WtytWZ$m$(^L?`6B&z~@Qtgta(5;Dq!ftm@s(J)l~4kAhX>ZuZuE*jw|N za6Yr(Q!$ti`^-AYX&BQN!NnNV+1t}YJ}(bewP*fpo9V7s=heVRYj<9g;})>?$$1^% z1P0<~{@>8*f9B7{l}cwVdS;%-{PE1p_)o*Izr1!820qU`&vQG1Smyr?tvz;r0=oA9 z`E_8^8=c+_*8V@g56n6dKlA^I*7xP}r<~3lOlLn;*ZFf!pLcp1d@KfIuEA^wxiSu` z+$s}b(f;PG_E4m&ygO^3QyPD!@5%yP(AB zaj@xS;EfpcDTh%l7gRZ&Yofh(K>{3L(4T$Q^Xh_bu=2bh1y(*6Ognuh)Svk)*z6I+ zE+nho3mIE|yO24X&OA-82dkeKG6&6dVH;TMbzu)!HC{LdwriP#T|4h|_Kj;X3Y$HG z*hO)iD2IzGz>0Gbdt!R6)7!y{e^Dn`J-KKQtaZ6)$mvO^kASs*E=qy5E*GW2nzssQ z@v9iybk?eQs{*GNIi2|{hpJ|nElbb7uPwx-sz2C)qXMaQSBG^gEjBPV_=Iv?sVpDddlfjPEUiC!zBS&xm^+u z^=IgtJ%ZRJ-8fP0m$)1*;o6zb^-^w^%z~A}CG%j5p9X7xW*&3epO^A=)46u0GdIf)VGL1=#En#4cOGiR!&<4Q%n5 zgY?VkFa2^__2F{nWjb>=|6-?CIsa;>*MODh<#k}?d3gg^d*<>Eu%7LgcRHOln%)D} z-n+aPtiD~I1ncw0@=uh4Rb!&e>E%wZ1glpGu8Vq= zs0XW8iFW5d47T_qPG^m#k2yUBR_%#2SUD#aoz5CfXIdeYm>H>CE4Bm*>^p(ABG}-5Oop8|nu#alx4* zh+UlmXicwX|FyTTUU2$SPOovf)f7Wl4mEMG=B+6MtCpGyu=adS9a!H_YnZd?4Pf01 zHSDv#``0u%y~XLRVCI3I*RbbW)0%ehDbjmkPZf{BTAt%z)mSs(^jW8`fz|(-^_+eU zV@SV-^DE9ZTtm|0@Av>GHfL1zmlE_4C?#Ft4FM*G@TK z%e6DT-RXm1)pG5S(?^^>=5(%+`Okvc&vRh2M-aP?tbSfs4%T!2x@IswlN`u=e+Fj` z_%puwr@-bvwV697SJ6QA9_JNUS zCMNr1I{RZfbGEtCV4G_t)DK(+n>~Wq^_)vJUf&GXbM^XGuwq`{=5*#`{@jP=?{c_4 z>GTn>^0}V5X^pO*0JBHv&-HUKs{Q%}r>C911TMs&KWj06?oZR#zJ z^xVE74%R-uApzF4H?S_{b3+GM@o!*_rguBN7i`z|JAJ_ENwE5JLkg@u+%V$6>{*Bx}&=1@Qn>~WqjjT)Sbt7xhp1HBd>8!Y30V8Qt_G|e>X@_Us_Sq%^E91#n*Wf~ zQ()wF;11aA5ya})L)BHc4%W3du@31sF<;Y*oL=m7_E|aHlmPR3?6I4gVAO}3n!%>G zfYpbaTAdH;QXg(&{_4X`Q(()1Ion*TIsFriC;b!5Q~sYQae4xb91h$In>~WqC)|Gc z1n0GDXTgYh;PI?8Ac)-@hf#lSt^mvb=4z+cI-T*A+s&O|_2K40u=;Z|=QTa)^bxRn za&ro-p4^-U+q~;w#jj@{q}TKQFg*^|T=n%}%~jtV>IXgtn>~V9eF`V4v3?G$`>TH5 z=?hLzgLU84FFJh*Y;o3d`YoJaIo!gW75|nJu;SbjcX}C^e(3)#?77~%Z>a*SKeyC5 zZlWs&{hML*47{ZUZ2qlIZv&fu7g*26Tl&Fz@4jUitoQC)Mw~wC^a*e=2Ioz|nEw>m z^l7j@)84`!Zo;7d63p3R?(Hq&b=b0yZ>5obE7y0s^itRz;(A!kbu05%y|*U8>hrCW z-~tTHdn@xXea7i&u;Sdt-l*rd@&1zkZG0X2fmdL&M-aP>IcVK)YX+NtD>x4W^WMgu zo8AsK|8A!z!R9{<*50^n#QBVYRm*J?V9PTFR_(X3M%_EN%{yKK>$BW#D^6$sO=thL ze;Rmz= zdt&;C)5n}X?(|u(`qMDyeCD0L0uC^c=j|0R>f7y=VD;qoYNschUJF+3x7Rtn-sw$X zi{Ik()=)pdnz9FSn8k_q#_fw>?Sb2uzfs*dYegWLVX=Z`|y*L z^t}3HA^02$LF|*IFdXE181?Xz?1_5#N!D(9m(%;f=;49Ch0Pv_lfsGC{gcyRy{~F+m)lN@1y#}n$%#F2R^|`SQtY>>8 z`(S#5^KWu`3z&IuUiM1w7mXcYtxIDUxEO;zJuvEj;}BTy7mX>f`qP*OTV0DzXHQID zar$abzas#v_B%?z+HZH1f%zJ8xT6B5KwJr{dGBD~Os@y$;g9NN_9cCJ1d(@GSGX3D zcRIo0wUKwao!;y8elT)AnCS&Lb0E$Xz~W4UEzTS`ydNX)u=em?i@d`caUUIw!)A{l za-fHSdvH=g<8R-oKF}>Qw@SPrb$;tzl=pF!utbvHc;Hvb85cwa}3q`<`(%%A-U@88IgMR53Ri5yu57h=$7 z#p!EKUk8WJnaFApSTR>wqhhYMg4KuB4#%vk0QH^^n>~Wa>Ksl~@9I2QwXCMWs%4dV zhR=$~>T2k7kp0dcLFC<1oG8w_Wnjg5*R9>VmCzOE-5Te^{GlJb1~z*jW)Ds*W-r)c zx^;PX0J_B-c0MDae()2p*#j{babhu-z!sA|&!Z!JSfgUTM@>HO6@>c1%!3!4IfBT0 zH2}qYuNG|n^D$ouqF zocEct;=CV#73cjTu;RR5>U_#V{e|aYvqzAB`ZP|$nE9vAf*BY8hSlkFPUrqHeZlFA zPUk)k_k4ay4LHm#zoZu7t8k8(CAd!`nf(Q355qsRm!J9n4|d6?9ri+T2mHg&Z22X< z(87BpzoZ`=$Y&6iH8cJ&jO8!_4&OWSOU9f&0S@oS{E{iK#h(Rl#Xy`hm~Z&`F#n7M zIDD_kKLfR7eHceIo{>VH_u!n@PJ=%!Mh_$Rir2umh0I$za=SRs>BuXqqb9rd%wnfE zI-NcHNO8JhKM?o8{!z@nnGgD=f5#yI%mHxtyv;vz(CI_q%+D}_{4>$R$fp#?^^onb zde15VtH!g+@j^26KdTD%Yhtc>Qk;P0I-yr*)xvy3+zgBPGI~4AtKtsCPl!>k{;l%- zvzVv$$yv;k^D*YA(~)!J66q7*>&27c8^tN`bzB(&OAm{~GG? z0M}|S#f!n(Kk*8%`Wdf=@2&E$gWV&phiwqkn%)Rj|Km+yo}FPvidZ*OFC=OJ-CUI^i2ierzr&an^@!L#HcZ=qsFXW4t_yC%)eL6d`)l9 z<-7^=M7GGM8(bzH25%FOgLjB0zzOjT?3?0Q*w@5!uy2UxVa+EE{-t!*`#bTH)0e@& z4)wEH%a6qsus;%4I=u<}57OIU*$edQY}BaF_W5UbfEkNA`>|6z1k1S8M`6wrqsFX0 z>GT;e=cYgF)t*0_^wFr) z)zVwRmy0{W2{G!jd*_@%XkU^(0eioA9`=l)bqu^eJWCSBPui zqdi~R2o2}#NogAl^3HHO%nf4ZX8z3WW$DN*tEZs7C4Ch-`ocJy@!yEvYc{h#>fz>M za6~?sQ~zd2{$|W|)U)_w?HBVkJA&vlh^hD1sQdo{L=PZlRxbgE?<3IztSN?ZR1iH- z2a_l6fHj{^r*qyS`6OY(&!y1=Q{bbePs7@^Gftlaho2{-2bRDE7@T+6=_^iWE#dc+ z=mG32edmhyFh|AjiG!7YPr1`8oX#4<@6pkodT{vNE!xupRz5wfcLVxK-|P`Ydzf?B z|7g!V_!zzjo%_o4HK#Mr@Oyd`%VXaWqR%qtLJC3jS=Oz(GXL)b^XD3!DxV@))3FCE z=V!TgrpKLL2DWRfz?(2QR{|!yXQR)uUc0sxZ2oOdZwISC&vrV!%jw-*&$Z(S;8=HI%M|MSfG?C{#>D`C$OGjH|t`5~~LQO_sA;pg+{^P^5@ zp5gmK^!X{Ua>)FfkT&lsbmjj7`ziee_S5ttrp$2e0kcI_HiF%R)&>4%EI z%I8oeSos{Pa(cDXYn{%V&A$bVn1?uj_6VYfn1gz9Xa=0e7opEOectH{V9O`%^hL16 zS;^@yu~zxN#99>pr4q2}&HTHL+Vh!z*HQQ5ORU9o)?#`CSkJnb8o}!4OYLC2AH6i- z{8^*T%RDXSYR;!W4pu(>rC|B@mxcNv?#=8GMEhHCqI&z=z~;{!Oz&`dCs=*x?{a!K z*!=sPJ_m#hBEc+BbJPM-v8A0D1^I@iMV8E}BX znCwH5cmYWBUTHhToo0oJAU8fXS9hXLknI&;p$K;H)1 zVE%uu&H%2`vdaHmyA&lkuOlidxmP7cMMcA8TXz3;oI4IPGBa3clvtE#Xq2R+Sp182Z$(8LwOF)Kk^O(a`~J?o=fBVA^X&P) zzkA;EoO7P%zW0I?Yd+jl^J#b7>3n*?+V@^pV=wEnm?`H!0=E3ez^sAmPQd6n+?xjL zJ9h6pSnr+Q1*b1MeF<#$vOng(3f6n=5ukmSc!X=p=MnbJe0X;BedCcr@Ov(xGPWxb}yon8mFdpp65 zh5l^qf-(Q@P=DxkzGeeH6JVXaty5r~^R3fPXHQILPjn8qrk&27Se&JtzAXUDe;eyk zoNdKm<+iN^tQxnKftCNZ1X$09ZM9Bky{0#S^`70<ANm<=b_9p@u`cabAM@Aeav#sC>8wTicGe<&dx6uLzxH=KbEY49 zyS*AlHEyo~tH$khVCA{J0jwTwZwG6Sws(Nl=k1-&r_1TxV0|Ch-UDV%T$g>YIDKHf zuebMu)vN6(=Q99)4<_#&gE>_^4;vLPz*-*`bNUXxE`5jV!w&AF>8xG-*}>XPuXlPY zSUK+)0jnoFCPMw8-@|4{aM;cgTxc(La$UvT8FxC@HJ$O5!%p^Db?xi~YmatzgSAIH zhrsIF&S9|f*~#3@XVmHJo1TF?$H8{*Bv?O7?o5LVG0|uK4PMKwzZ9(8`pcZox=gQf zdfe%CVAaykeyZO72B)`zl}|r&R{s6WS#@Rp-mK}&S+(>}h4+3QCO3k^GJlIz{ohrC zSG4XfKBG)$4yHFbz1iu#VAZ&*AFNt-x!iV*JADGIoOdy|@b|`t?V1M{W1_c@GKSX8 z{2funf3(u+%-MAI(EQm$)7dwz_2>v#xjm{JGCu=B4o7gGU<7y)^%r z(<{KrA;mnETdFhEKmTsn>j$K|kx@s-1#DzM`3sRrwPx~B=O z^SLMK^k%0sH+^r}(+v(V(T6=FFm~?>STP^t%hDe!1S`+STt1Jvy?czgDbL3e&cDX# z%JcK5L(7ifu*W8Fq1qpt0oz(>r!VI8z05~z?d85iF;UCj5*X#bw;HVc_c9;TnUCpp zVD)5gGgv*@+v|L0!FF%j>C0f{IpFdcC~`V;Q=S8*PA_x1@_hJ4XxR}&UXI}+>`CNh z_BnhOMP6ntrt{fidObKF6aRMNVULFUd zwuf(l%?`w0!i92pg}QQhh4-1xKA0W@ho9Y%SJ(&T^9uW*JYOkyI?q!0`|!vsjbP>T zN)jA?CPrRqc6y7`Tfy89^x+lOh5ugmaOS^{QsaO=3}bnYfW!TbyfW(aF{e*}!|x}N zSEe1$g2S^Ec_j@Fzk5VpSpaSiNg z;(A#2k@q&hnBE9By#<_k_P~dIFue<`dZ)Xco&uw{58n@)9k`cCt5?%A;3!{&&e~0% zb9&n8^G;_^bRMSJlYC6X`5xn`SKp%+z8@psD*}h#y(8Z%0f*1<$oE)>>FgW*7^f1( z?yYiqwbSds`ZrqNs|Salm67kUho@jNP9u!zP2gfo>PZ;8m%WW)QtyC4eh+WswGHTL zu=?}8d2p1kL0@n>dt&;M)0dsjUWLz@$gA{K4__?+vtNk$Dtn;!*Q+I9_4CzouzK<; z`x79~J+Rq&5j`Qn#=z+m;Y-n|JPjpuXW&N<^P(?|FtfsyZm1phOSy> zcovlZOc_{t&cvNht<&qk%73Ol)E|BxHamjI4A)ZsXL`Zf-4Q?U_FOtX21a^&eF^rjGnQXUkjWb>aR!nvY2Nt{QXJf^&;?lrI*6K zPh1XrfjADUwO+3VTbx?3`LI{2{dM-r^hU7Wcds{rxgPR-z1it4V7-4|Zv&r=NuM4V ztA)Ld;rvX&W(RzxaiRXd&OWeC-aG4b_QdqG)90PO2)6uJbNu}TSZCn-HBN5?2bfsv z`yDX4_xod%FsU;KyO(R3&oUVKJp4=8>2ar5gLSrlPz%<% z`T=`uyaWz^XBC-cUeaevoE`@&&soO7x?2livm=Nck-~*?%dq^97;rjkH+>wOkBL4U zu>zy#+ZyH|eNCa$i<};Fy6eN5D(J|KG1oMOK3g;2GpKPuPr)e9HN#*%E7puSeH5&| ztzpjQKjHi*ozDzdeOogJ)_Y-18m#B@nt8DLyk;4!?*>5(tnX$4_YwNmQrPSWB0&c( zltYHq!=TIQ-C&)cpvURGPVWcjW19Mi9xQt{jf!-m5=H za=%Qka5`(roDtkx16EItYyk5fO0So?cl$Y-VJ-E zn6;OQ$6;;VDX^_O1GaT%!M1MN>D({v(UGfQ#aUYbR-Cmlu%1h6OTfxuZK>1C!SBID zy=xON@Y(t?UfY1)0#*;#vPSLi+7738IlTuQ#bnHW814I7)}nn}I|tTh#M-pe7o5JB z(=%Vc6z3?$*1bpNgH31crn3j87lEY#r@^ZCn0c`F=ot3L^hKwyfK~gk%-NWEYOQ1I!3CID_t+K~^XULX z-?|MpJK!^p3$1nR1Xwv7JL&Wpr>DW%>tk2Jdd?J;J7y2{EGnvYI`>OIrxbO9^{gvO zfe*(-&PBs8=EK_IvvogTvk^p&YXmFj<66Nw|HpNJmH%D&v&Jif#65I7$b^&US5Qy^Y~m4BuM(of(z zs__Kg2Yu^{yvIfmIUx>KZYQ|hPN;P{^HI(xG=lMYm-+8wz;GZ=3S@Bxz~(>V^f9MT zfEnjUu-OqriUV9IPH`bvaf*wa9&>sr7;$!FY6fRU5c&85Kyg042v&bS&R&_${W6_r zQfG)xtcbkR;_+m`#Q3LyCK1s0ow1JPoq)#_Y<_iV5$LT{( z9|r4r)xdt*z3idhFAWP|=7gA6vTw!Wa#+1zuB-x|B%OI)DDHw)%qs`Mih1QM*kaCu z&%|W>B^Z6yU&$VpNMC`~=lhlH=c%E76-}v_`+2%JA67B1V$NqtFM~ZtTmc&wCt#J& zRn1`YNr71>a=U60<~%X;)X!_5;C+7|>YrdA{!v^Ht9w7u2G+fw=mabNCk8^F9sdBE z9YN$13%Jl(`otobwIPR3a9z{cAJbQy&i+Vm1ll=lq^2|0$o}YjHWq_b+yxLz^diyBslX0Er?v*4pv=PcYrNUr}OD@ zKHX05b@~WcpB-0^gHOgpU01UfiResJ zx-O8u2wN%U**2Z^n!W;NJ&1X2KFr190@w{=_C$GJ8*_RoSnFO}4*nNR#$m5MAm%!z zS2>+)TKpQYzGGZl>-2iCo}bq?fD17hzX?Xqy=#+TJ@>9{c6y7`+rZ~y^4@kBJu9y5 z0GrTEZ)gZ25<)B)yR(uXzb_pVJ{VDo2zimW|cmcVi-ljqH!!zZ-kN+M|uVVC~VyK``&9|0oRd+3{6g+knnmv_~6P!K?xP z*U?D7j+*KDV4dyj7+dG|x^kyifK~f-39$C=x>|4{CgayRo%?QjqtlzfYcT2G0%I{- z!RFruwj9_8o#*RPV9S$zP!F#gaz4Y(XT#JbcYcgv$?gr~weSI&u0Fyp_PVaX*^R#=JpU&I$ z+;{cr`c<%UNCHhyGJib}lNC-+fc2hAHi!DoOdjCO2qMW*fND>Uf%V=`jys*XsovzI z^O*uiF;Q1?8peEP!1|0xroq~y8|Z7yT9xw+0a(x58(b|n6g#~HT!@LaZYYJ(d+-MC zh26{A&8OP=)Pot9_a6K1ry{6ZLl|yqISm&p?+xho6y$_7Dyz?^H z>_84HxX`)1iTYvuKSAUs=3;t*(+iy*b9w@-=fh3xt!lZc&iOEB(;LC6<)%)so`*Me zIi0nb-V0_P%xw@x=jWzTu$~n+P4Hz*`b;`~%IR}pJs)mb0PFW=H!XsTF>&wB%u#!N zb17Ioxw#sw8gFKern5%VlVCk_Zf0FNV>fdzu-487*zCYs%u{{7nR#+;<}mH_8L;;E z=GmOSIo~mJ*S(u#VEJz@2h$HRH^*W0{@u*{^`6?y{PiB(%smP)>CasC9^BjrHvcBD z>e}1})@S$TF0gvLnfs;QZtin>ztac6dVg&m2eSsQI{{-l`(rw5w_4I*t8w1x+()Z% z1$;FoVz$sE#R*vD*23DgR!bvTYqd0k_5NyMjWJBd>4AB#n038R%v$2&LD)+1Fl<~r z0?V}-XAGuBJOg{Fcnob4mqCRYC0;>;O z_`2!rgXwIdda|V*tUhe%1Ye7Zy0&z|Fc!HR#&q^d`?7_7(EE4GB)9~V{?jn0if3U@ z5BZZ7uO1d(&5j__$~@Jd z)->4eop<`8)0cDlEkN_X#pQfUIdr|>Z(;uG$t|^DeLuN{Ih)SnP3KuHz(n6}>3~sx zZs`V_-UHU>$Su8KJ@;-I0_%Bx3+uA@3t-iCtIPA&GN&_V_59WZSoz=D;CvcGJ@aqI zf#C=uxAuY5!&?Wz+OJzjoIdV!=A(VQbqTC>Z)1+i`L<$kJ|_Bb8}m`j+nT_-_cr#> zboLPX&TX*SfqO@Bq1rheP6mWAFOrnEC6fWJ5j5x zdnfNRpP2LE9x1mwxi4Dx&T_EUy|WUmy}Pptti8K4?(_s$-)HXR-kDFW^Qi~xd&`~d zRS_m?xw8w#)*S?^w|BBvrn6V3k2;;bGJO`Ty|{DH`7DL{&L?5BBZ#z@;zIl0&U$sO z+TFglvtHAyoj>c6{^^+GPO$p_Y1RUtoiD&fVkd_$=wou;++dU`xfVPVWGle<#>{x||Ptbsi>i>*#lS3T!%iat0=S*pq({ zvk(6$X6=^e3RvIkK2rp)2z@?N468VwVU4E8!TLV=8TR7>Osw^pdZ#xyo%#PCO#1XX z9s>Wf^kJuuIDHcQ0r{-LelX;FnEORy_DS!ld&z;C_C%}5I-BaUym_PKLZ@^|p z5V@xh7kXc3{(r(*%rU2rgH4}sI&(IC%IWExes4ZlIcNUXlXAP4{nvZs-Z)tAk$bDb zI{)|9IUn}ieAsjIX#(p#a&OY<%}#Fx>p5_5J6O+wdpn%o>GU3OAtv_m-a#0>-|yvq zF>mVZkLlxJ(}F_09nH6mhB3%bdPg17N+cJBPq}Uv#o3m6)h2^LMDC;$>Lv`@d3> zp80!Irk6n1`}AL{!2d+YAd>m}PUnheVNVPBzI<4npZf~HikbO4OVIl>zf+(uM-aJ> zz0%pfkG;}o-+hf>yEo~4*f;ZGugs?djGp&r_6eLBh(8Ii_)}oJcN%Q>GJo?)JD&yT zvjk@ROs~P25kx*)3DCWtWq%a^vvIKEe>UNKYMl>jH=jl@<1=1%ApRgOEI#+t;tzxE z-cjc>?tECg`LJHb&pf}tnGr;~iU5l5{*F_mD+XQnc9lAxaHvOjijFPQ6YhRqJF zJBtfjcL{9%tX=y3K~BHF60G;~{c*6~oA)Qch|l-n{mfs_pZl4=o-_9|XY=WBKFr^I zT+W%lH>Ky*{eAFx4<_Re!<;H+{uXl%Z0n}M7IV@0utxLY^U8c!uWEk)XwS(9^1<9! ztouL#j6O#mU{6dh2J5rtftd3taXw{WeRgF2&Q%ev88Zo^e>e3&EBGYoZB8EqTW*tJ z_5Xn>r%yYbJu!dwME>2ZMf=swoaNIU3-$hcVY4HMWd1Ie&OkTwv^dPu^bV&pPm9kz z(!O+$g1I*8?Pfmu9ZPo_%$`zTgfSoPk@+lx&1V&?v;82@ekb!F?^6#SjDa~3^T7m+ zVrKpZmtsCx3tcfEY;Zn}VDo8mKFwfTw*{=<1!ewbmwwm%U_11qFu86AjOksJFsXOL zm`@MbeEPup-S~s-m42u3Aoo!{e{cn?-ag1aNPh@u`a`VMbk-;Thf2ZPi-)S5PdwE7 zABN42Ao5TfF0{W7b%0g-L!C}%EvEN6J(bfle^X07pPz@W_gxS3gx(@3Pam*U}$hZ23PDIGu6iv$YAV zK4<*Mb#)d!5r8oX%Rzza^*dU>x0>`P&_;cZd40E0YI&G9!rWOac^Vr;D?* z)#>eE#mxM@4)gEH>HUl&pZpK>bo*OXM!^$i0tYDD9$byXBT^AdOuh(cMUjw zIHy0_;dmLWb$1tq`mW5+#^B5dBD?zliobgh9OVnpN1Q(4^hL0q8@m}_&yC%yU_Ccd ztkJjxtQ=CMV10(BDx6QH^Qm$^)nI+5r|Q7^-C(L2te?|U%-_~xe{8K3*wz|yKJ1nG zutxJ41KV1xSD(?TX>fpvo}|(+`b?)VXvZ? z@ZZD!sJDB{oL=s9_R9R(EAy`hYcKY&KjzaC>bw3KHaoD^ATG4;d)ObHtIXe{Fr7Uy zW>3s#8vNF`ye0E@R)FCMB9E~a`9D?wmVf5&SD0Sxd`g@TYh=uiz-9+xw&B9=Z3kP- zPN#P}?sYyXFk@Z=n;nQbiwlc62ez2=PG5A)eU#5$U?%2G1RFtQZvw2CduzbvU+44& z$4$vqr|xe5n9u2I6-CEKWDr;`che-{~o*4>)}Y%=p`3vjg!LaAEP6z)`*kec9=& zIei~rm;b)N>6Ku;clO1>dhhJxKI(b0uNkao#Xjzh>FrMM1nU{HkF}dWYd4*>>-+pZ z)}{CUzFDxvoCDjvtkLvEr?WANLo4O)moL`L;jid`g^8 zsng5A=3nXb1X%swp9HI)`Xh108@&Khw(8S_9ZjQViE z)pei?x@tTy0M`B<7zAs753pYIVZEl0IDh7^{vVhEYflgG%$$VD9F}2D4*4K!(OL(K z!HRz{23GuotkLu`u=$sRb(Rj+gVl$FZD7@VkTsg#;dIt(dbiVAuYQ&}$hrzKk@G?B zf!-Gf(_rRJeICa2MW-);_50F8^i|IfF@LRli1|a`^+VX~2qK4)xX}I{a`_)(&ZhT+ z6=x_8&c{SPL%bLIu0QkIMi6;o5UhKj7zOLzCs>#1GdcYW?4e?Qp)b@Q&HVfZ&Ws@P z#Yuqf{o*WGHGXm4>D+7S!;GWvB*UYjp830Cz;FbSCs#m<`4rdJy-#r;OfPXdb5P8u z7DD~e|Mj^%QkuJWq!O&!N2;A(=XB=4wb9Qn7lrzxxANLX5cx_1tbD#w4_3^tG&#LB zr$5b{bylCQ3H3)Gfz6H}GCGS3#T;cViaE+2N`EGr)1MgxE6-;pLp}4i)_~y%B41@K zy7z1JRm`usetwO)na((h`L%^mfAlrj>!o1b`}GQ^S38|?6!ROj@PG7o zu-Oqro~^`%Vm=!OvrhE?S;jG)eKWnz>5WeB0_$1vY!6t^>Sz1FdY(Kx2G%p=*-58Q zIei9fYt4eSchAl_pS08G!TQX4b{VW^;Ik`WJp-Rz&H0Q2&1bv-ET8ef>BZneO!Q&A z0!H7-$LqnWWjqO1p5w0e@ouNH59-M{`(Xb4P9FuUSL5u1`AmoUqi@1yM-X`~9~at} z=a{3;z;n#m^qAAjoL=tq0kEFc&v9MFdA=y*-I;v?XGRctp7kpJ^Q~a>Z+Ci!)7b~} zXCLJMP1dJ%zscN8Zw`5Prtjd)2qNEPe-!7NF3)eyI(-4GI1>R_@h4b|`Z*B;YcD1e zVDqnWdM#MbvOx1Y7)RF!J9WgUya0 z@*?}Gy?C(%tQ=k}b9%YctDGKpdLvl5y_f_mhZmWT>V2`->8}4T_Cr^mFAjk9e0XsP ztlqvj0uC_I^B1{a+S3=)VD0IP?78y)7Hd&H-zs%_rPHgOUK8rO&w|a4Ao4Bdss4P6 z`6$nC4LhCrm_F|G*_=KJwCCg`eRY;5S(ECWWN%gPWZdb@)AR&b&%?=Du=+6B3|1c| zc}`4kb9y&e&%H_Rh557prcXGY2J7EWOwNFdG131?*3~IqfYr}6lZ#+|Pn%qF`btj! zb^-VlOvL$i7fgki`Mg)$=kyf#B8kqaV&9L3#7Fgy-pEj5s;vU$YV&?M+@hohScn(&zd}kiqD18C;M)3-) zd|t{2H--93jA42Ve4X@CSnbhE?B)BVS2{fo)_+fbiFH|=TBmaz{Tr2++QD&5)c8^- zjOktAI41QJjOu!65X@NAN1Z+fwzVd}mtoRp66O-|EUd+G{ds8~I&-D}0?fz6E3oFj z3Re87DEQ-{&s09_hs5-i|5P#9{7b+emQN|{Y2r#)^REJ%e>IqX$Y&}6bD_8%*8Cg5 z=HCRqNIpqeo!cp%bDkB(>4$k(oPy$AeF|*;GftlecVZ&W zclo;B7vC)f=S#1K)%UmWat}?fb9xf2{J+}=tcC6 zPyiReM8yHD>4o6%^CEf?Yc-wun}4bEDRX)SIIJalQ5EiE4M_m(_5Y11-<~2@q1zH-chjfOw52cV$x?Nr>|q4;d?E*j(rZl zOGnpLfWzOtN7pfD<*<%@Hl1fFhKZQ#8evWnH^GL_{OGzqu*Dw+vo`vV!(1hvgl!bh z!G`an=(;r6)}41c^AA7Eq89_r=VG20(^*&eoR3~y0xrVDx)-yqwR=dAJ}{boIdFEF|ghvmrQ~!&nc(RIDOXX3t-lX9BT4m zbhc|)qt13sF*uG%pE4N5uc-j9m!5zKl<0gnBD-^Ueq*$)&CmScmyW>S>p-f zAy}Qy8rB$-J_Y-3@igqoA+Kltdhe`f{@Ta&ZjaWNKv(|jOTpT&^~_iMxW3ZqRZg!5 z^Bf@0^~_)AbA1O`=W~5GIQ;$=UEc!^zh6by_d6Z}tM>J?;A%|9T!aZfo1*KN!R#sZ z6&U4wDQkp2a3o)|5kxO#&N^3@GUq5?gC2)5o$Huh17thr#SM{kccs?*OBhvaTZO3psrQCGGD9_VOeOL39ISXs@bMf*FhceNJBl+geLt^I3L2?3H}30GiJg=!eC>BH#J&{A;hT zCX|n_2i0Cu=ex{?x~&|SB!(VVDjEcm|MhYSnb6X z^I+ympB0$Tg~2#fe*-s zwGN0IVNFkhzaqUEc39l%^fvH}^e)&xh`V8bE$)F`6!*gZM$FvJzaRWN=_%OXika7c ziw9ws#6z%eh?$q&I|8t?}4@?QYQ#4BK( z{}0uJGlwyVey9WXt}61JdYfxeB!WaaRaRB?5+0qBduUPe?HOy z*4}-DHJaWJ{Y1qr{UzE7%fv z;#pXIb~G%3zaV|t=~&D3EAzqn485`dd>AI`y)uCLpcwhs&puajt@YAZVc!?>RfuC} z<0{0lvvC#TWc4EW>V0t)^Bvc{m9RMT1OLuz8$tA{Hn5&8SFzu3=WEahVD#PcD)hmg zu~&`oWlZ{v!RVQD)i_wsma7)P$6&(e6HyrEK}P;roq2Ln=j+Fd%V3MegRl+a1=x>- z+{pVn#r3eC6ZgU1EuMwFPP_uEe6HsCRGwESz;}c`S9ihQBA$e83Hh3Q*iB;kpCabE z+%x2VO(V>y;w0>u;%3-VG2@xu3O-AE7wpyINm%814RgLc)URa>ori0=ZbEvS(;4UQ zrH{f^h-aO?0RBLzHx67(ZUmaXk>?8fz8Z=)g6PI1SUGHD|I6W%dB!;(m*>WD z=!}K@H@ZAGGEe2d(dD^u9=g8YZe&00-bLrXHsjllPoL&hw zJx*6l`d7mgifdtu#O<(p?_Adf*603pBaX+wI=9!&fltR|%ruPNQ`a$nez;Lzfw?N= z>q}vk^Yt}g<#v5NSovJv09KyYC!O95wm5xY_3io;_%uwcb^RcW^0|J<>BCNE{(A3R zKMwu}Oy0}=()08BNpQLJDcG~cGfwB;S)2u@FM`c~$?5FF`IuNM$yzTG7r~ky1OK!1 z64)wnDXjT3FXf#1yLta8pGsJ}m-pGdai??NRbw&%wwSfxb(qYp$>~X_w}I(LpKh4T z#C@>pd2$x4eN3|UBKa&keKpkg-O1N%1koER!4Y1A<1kS%b2h!k>2*$Tbb1$9XXAz* zu$~V$41(W*$@oJ~A94B^_;5`6u$Fg;7hv@}kQ*t<=f(hh5``doBkL{^vu@K%!FrzG z7zgXD-k1cd#v41q%K1j-YYYjV{wH${@pGlY##H{7r;ssdwY|00t zKl|?EYc_)DrUY0$-&6}$KAY;C-VEmbSZh-YjQO-Wy$h`8-llG_e&@5P53Fa%rWE)F zOvagnF?|lKUTs%F##=SQD+%?04|FmZ1)dtM=CZ*;bs%fb5Y+FS+JGo(50^lGQG zUh`+Y=3ft1p3M#5YcaWQBMc|G2`2OT08WBGESji zW!QfR`KBURJ!ftzc6upzoqQ@`H;B0}mx!yKUJpjheXK7#g6K`mQ|I%hA#jv0LLYYe zh||Zw`Iz)!Eyk=x-wkd`gO9|d&k~Gkytx3Z_&2i$rn5%8w(oJ+>;bzv$ zI_b}Sl)jmg`m>p@>pW~O0qc3VIRREan^~iB-rVAJ)@XVc7 zTTIqs`a(``;a(_aOA%Q8X<=^aLrXbW&;J(YsTx~qoL=j6=6@6>`p}Yu(Ozf%=AP+o z(3M+DFW7QOIeozCtjltna6Xexp8@On+_DHh5feFVVO?5x3*Se|XG;vM&w?!_&ZiW7 z0w(XRgi#;1uy*CVg|(Yr4_1G+uwL!&7Vek%w}tw?Z@^{;;xm8k%NFKu{ycA{r=8Ba zOkc|BpKJuHho5YB`dG;Oz73llLG)AXiQ;^UwQJo^l{uaJZhDo|<4zv|Yu(J>tdoDM zV(xn#uV+UPZDk*{Zfhsl{JWjrOZ&e*N&zv&%L?*dz#6j(XjIsiTz zlQFqp`g!x#1+aW>D*)@>+gQ8lF3;OyPA_r(m0;z38~4%fjXS*_Z1L4Y=9Bq*ai({> zd$~uZ4}wwezCXZb2kxE4g?f8i8f@#%JAKjV%Q?LbX#Q<3=Qi$RK3@!?ZR*ed%(Imm zM-aW;t$TYKlGeT5t$Vv$_jb2#=2s8$zr(GY`Fm(u_YPY(hS=E=MDJX|h3ajmt~l-N zz3Bx`FLZj$=?#v#me&0=En@CJA2vIJ=%?MfcTv~6ce!=%a_ipZ*1ap{{N1{DxpnWh zbu-^BxBy2G?I?m#T^%v7*6k>9dYRKJoE~>No27d{!?idO|1+hbzQ2*zHiGCq)V1zC zN9(Fc4y#=g1 zJBM=ouUt#({%d`x?|%R`JA&waZr%Iby7#$t-QUTH-sjf6&#il(TlceW-Ot*(d$NlH zf@oI~M)h{NI9;tycYD{>>GU43>g}4!@#naf>it|>sPF#@Y<2|E`>AW)`#ZpjbH9s! zzuUX}d!2vE`OoF}0oI~*ALt78{md&nf@pUiF0^iU3aoXz2b}JD*gfL(ap%99;|IBx z)_rg=)c5}cHamjoLvG!NQg}h@KIGPY$gTU3Tlb-H=kM12yj%D4w(cL{n;k*4XA~Ez zw`Uxzb$ce9&K{XQetTq_?F=jY!hL;djrUfT$w4^!8=4^M*?|6v#ZVYhb= z&pZF6od3Uqwju?^g6xI>HT2k_Q(J@(+}LseJsLcoD~>-cikF*_1$%AC0IFZO@P&_tu;=s zcY2%C+nwIwbmnYvx}84e^l_)pf>rO<1#lrIa^AWEV{ukP{qYLEW+RAhs|2gJ+g$$J zn7`?@V8z*1@AM|8yF9n0psOd_M#0K$+XPtOySB}O^)p&ueopTzaC!{PYt+)mJoS63 zKIWkKeMzu#>uYv;o6}QHA8`7x(?^}oK3n`nr!VF7?aWzqZI9)AwwE})5{!BuzX&!v zg6MYUrrvJv0W1IQ{Z40Yrq6i!;S!~-tJ%y>g|qNr`I{1eN%6Dbb!^{ z9fM$tKMGb3J6un8OgeqR`MX~2SaSM`^XEBK{GH5G@pqOwy}{{?PEUeW?@sp6?rnE^ z7nnW25;i-6=uXz6p6{Fn+r2YRpLKfL>8wTm{Y7Bq-(Tjq8m!#oX)z;zaFf9KHBWK6Rcmw=DK#4~Dl6^wpgu{#Mi zpKh?-%QIklpVL!LA81O_fxbHL{pVu^*j{^D`u+N=`~KT zb9$rGyTGa?#oii^fYtNV6j=St{2dt6S&Mp}VlC#g2rj@x4>NxUMm^udoE3jhEm%44 zVQ%XAo@TImzNgRmjDzjo38zmxojF*{xtyN)yDQQkD{?yb*Yvp46JYjy4{UY>(Z|>; z_53ln?~nC5ojtUe15O`yI`dR5kFi(cy}VDo-CGP+KljF*UIJFn_m(;z)}o&8jf2(m zy>5T^rl2dgz06HL-#Z3Y&-X6mdiIs_ zVm{4a^?Y9oSUumzoGtz|SUK-wZtD5IMX-9lzbNOkKMvNt`>UPKd`xE!in+hR>Ag31-hx(D342i&>`+`0$cx(D342W{Oy*_yOL^iXLo{-HQnIUlNV zdZW|3!1|m$)bDs0tUe#&UTeP&Er8#F$+ec8zMRvC5@5v~Y6L5Xp(e1-)lfTFze^t) zbUqVcyLZ~@%)xZ#pxlOd_AEa0k^V$}&i{#moX-=1)61M*?sVpldIvMViw9>$5PhNz zpuKyd8?1Go=y7_l)7ek+cQrmS4PCW7G4FU4to*+a1G5J7`3n^=TI&myPOk?m&KFvo zPb*meefbN_Q~#di3!`9*Kj!?$oj#k>zX-JWU*vtt;fsOOi=1BU^g5@zJiplNbmpx5 zzt{!Vx%wjeb~q+#|KhOIM{@cw*M&!8FP9GSouHM23E``-C9rfLf7x=pBw_~`T685Sou7;oV)iapy^LB z2gQ7fIViWM*mK?cRLtp>VDqnXK5?fvIK9#7%%A7~UtqH%h(5(LtlmB~2DWv_oj&1o z_S5`bjbDOnxqYe7aT!>3eW@0#^Z%tLu-5ug(&;=is_{!H=Q9A-`Tr90)cOC?0@&g& zI{&4dKEgG%)<`*6@kc709(Q`e=`~L8bh^uPq~GZ&=RXS8`59r~bpA)uPM^=|U*@_z z|5w9iM-cro*HX{F?9SeodG<_qIeeMDGJP1V+Q01j^OaWU`ItEKU+D{d25;rHjUf88 zTlZiN^mK|IQR<3tXl1u%L)j+TJ+v+8J#(`%jH z1m-=ww;e`5!;Ufsi_iWmw^5!M(~)!S#5z^dz+)tvrSm*-d6H~D;Z9;|ctwW3fTd<-@_ zg6P*4aH05YmEAkW98G6W6myJgnO@>_uB$$eH9BVPs&}jhtUiqKEScWt^g*z#HRSXO zu=aXv4y^yS{&nW2bu)jXN%wxe*y*KU(-Tg2z505s)9amogVR}y&ga)>oj&jU7jpVH z3Uc~4*f-_*4d#Q|2Va2Ajv)GtBreq3Z*+i_^EbMko^m?-AfIPj!P@I*2Sa`Ehp^cZ zM8}!G;*WDLbniI#!t_3;r<^|Gbgrvf#+P#Z9QTtG@6G4ff5m?;1~$DCtbKfrJ=Z=y z$J`Y2xh}BX%i2wMxji@P^fBi@?(|8gPdR-7taJF>Dp-5^e11-Uo_l9{(&;YG=i8wx z&*wY9%Jcbtr>8=F@PB=`f1Ww0=g+f;7H8S%%uV_?*+2PzGjMv1;~6k(K>xqF66y#3 z*Z1BDx9)^ncfzfkIhI=Y1;*35FSvDIaO=J>4Ii!hg01@=XxR}&U!<-$-=ePg-*R<* zi#<2J(D}!l-r#s1taT@8aqofm!)8YiopkGdo4VqE+pYU;SJ$_T;G;ah9drI}-EXI% zYu)eIx|c!Ajv)FHb;Ws!wP@X!Voon}deSlXMe(PY59_)LHamjo)B-LP|GU%`|GVs= z=_O8Ybj+UUS@Cjds2^yB&5j`Yvg_L`)D`~~*SA;Pe!b%M>y?=Ep9JfD^a^ukEgi7g z5k#l^aG{*1Q(&z%J>c{qr;j*&Jg0vz3D#QQ>k9P)-LTmaL|?7Mh1PmC4%S+)Ry)1M z>2*$T%;~S?gSFOcrJ;U+b!0~neQg#OTI;nmSZlpD@AO5dFX!|bp!v@Xg02&tO^j@c@a{BiZV6FB2WT+n)hRu#3`hy}|XssW_z>4{U z5~r6ry~62nr!RoD)@**L9~gtpjvzWaiVLkZI}X-bvlC9AaylDl{^^|lf4jh1>;Ddh z`hiK<>ElkH1hZE^h0Ts2`r{Q` zs8|0%UAg@S^EI6{na;Cedd%sJum1eULZ~13Eo^oK(f{njh3@^&6j(9;bHM3CP9Jgl zcur3z!CEWb73v5644WN6^e2_L&{{uXpS6!asdqZ#n9hCI@3eoC0xSMc*iY@_Po}`y zm!C|7mH$upzSh61{AoV82ovv@pT=PH`+=V(C}C1(K5N9xM{E7G5v;X-+6Go`KkWr8 zx1Xk*&c2z>Jk5VR)DJS3?7+G!xKK}iRsdH1KVx2|bAL@Qc6yo9>%i*6&zitdOw{$W zZWz0l{WLuVR)2mr3g#O0Ux3Nv7)0kO>E3zXXL^y-E5KTJKJN5tr`Ln^{b9Zttlw|U zw>rJe>62iKIR&;HxWA?|PsBW!*-LO{1ks2boq3wx0oGbS zcYXW$sPp0evM=b{&zYzC`SW?O`uPj?j1xY;h`}iSFG|3sC!C%HYu#V4SLWa1boR>h zcBl7&)#qOffz{_U~5f+)wf?xgY_QyC6%fYX_$t;;+u&Ybg4JDoYJmW9=v&#!>g4_-j95k!Ag30B{JRRdPezp8h7v(tOQ z%HdbcQ@Q*&nQXFaet#LG;(mM}7D;^U+$rW)7y;IK36D9Ddyij$)#&U#DQ~Ugl}~ zC|GCX*UaY#O!}|DsE3OMVD)6N(CN(0^dwmE7rCx-SnP3nuhWN|&R&`SBpB-+{3vX8 z1kpw2qk4an57t`0VLqnEoX$Qf=5Ol3s`odIVAb`THn8&l4SQnxpwmaetRFr34f~^B z{f7A{hu;>1wbpNAPA_$Oxzj70&OEj5Z<(jXX?FfCPG`=l<+t6=rzg}8UI&{ULG-ti zxKMw7I|H_y`93v0?es;bFXid71PU|Va^>25FHSk39b z1DgNu*f-VkJLaP}zncpAAhqlWqQ5V~h1UIj3@rcOmpHx5>2B|SA9wmRSnK|NCDae5 zV6!8LE_dNVYb~=UT5FkmYI@4)Lrx#g>3@iUwbmc1oZcSt!9%dw5k&tmi3`R51M}3n zf0%LloYUEV^Iyv8|I-Q9y8pv{M4W@q!e&Ph{bK?by7!NDV6FAX2B$YVz1it4PEUii z)*n}M`bt&E2fqWG9YJ)Z4;NZ@g?-byE2Bbg%_hGXG zYcYS-{%6L}y?FkxBGk;;P%zqrLXVG8SH+|3fOB&2x zAm%E4mGf#TSUIegIlbKJtk?XjoL&!B&Z|i<);;(e*zCYsE4WbYtE*t;{8#!&|0`pd z&fIjy{#pdqIs7YotMm5P1Xw>u{IwRW=l@@sgZ`cWUpv4jVxr!^_QRYl9)x9W)Tdz1 z6VJm+f0H?A-8b12t@|cl*II9~59;lkaqy9ti1}s>jBwhcvw-xB&p5|r#rcrnf^D=)ED9GHKm-+h# zg<|&b7;zl7Se$^3iP_IEhrG<+_As6K+r7-+eAwGFFy9j7y`>!{lOve5;D4u|(R*OR zKIFY+4E#aq6R_3dDcDQJGq6{Q)3Dcw7hpGv7h$`_OHOA`q(_Rt1))!bwTADzyhsde zdO4V{A^%7fOiaw4sK!VwSh+>mhs)*D1j{|oqLy$Nq^QAzOVD%ItjLQ=fM_# z$?3~EJ<1q}f9Mj}>=C&S zCVZCWMOjPuEX|9iz~(am4lwCI2xI=-FY_M;oBs&-2u%8q!sz)E9RsUZ(Q&ZFnE+e- zNwD2J1-AIpV2eKk4xi_F(KI-G-sWX~326F)(-*-pOy;u$6aL+Uyy!BxSo#X=iQ-jQ z`D9uqpFHf9#mUPDpB(z<6~R`BW3V3(m%(zMux?%@jQXEf1=il>#hu;&4nK4A^4h@v zjLCc3Vf4(*>j0bH4NhRvXB5VAV6XJN&07JVj!B*#&`wi>6`I=vojahN~i9Qqh+b_98EW1bNT;Bgq8)wl5sm_Frn?zQRZoc?z9 zUp;(#0A>w{`Swy6zD8y(rn5Juv#!H2=@W<1nS6T!Y(A{fbk=D8bzq&bw>N`}Fd3&0 z#@6ZwTbu!>4?2AqY%xc`w$_;Q8F%^w*!(BKdhfh_9<2Av+ZUX^==5c<<-7t`&-0nP zdYE7A^jN4L+6bE+L0*0m7ut*bPO#2%eizu{bUPpRLC@0sl=ERv?A}4=!#?O)kv|Hy zJlPY|*@ps5^gMqG=KbPX*o(w-PEY6bcjSY4R&eh-3SriY*$30v2h&Ty^rL^7)62oU zhk6B!`NYAzhk6Ul1>!zf<@pZQ9+%GA|3y3u8yAnjn$CJZAbkc_HNGS5^m(VRIDIvz zXWFMY?~FQ~J<%S$lQpTXcd}mg0=2x8HJ&W4fjvjex>VykC&8-moy-&8>kj?@zmLj0 zoUwI&4v&Ek!$kbUOJGdrx~6ko)8kH0f_2^wXP;RQ)7gK$ z?+zaa>x><~0Jb7`C*E#{v9E6;)k=hGPKhdvFP9YJ0J^Hl8x zDX^_I;PfG8!ouLVs8{c*2CG-^N;;n|u*K|l zI`_hK?uEr11goxhO@fu@yQZ8z?etlv&pDm7sIDUlaz00}F6f6o2b-Vq60sJBPd zf|bJ&bxwDCbVQTWTbzF%SUDe&0$UEOOZ6Tx4pzNKOgNqOn$B9(+as32>g^iW|237l zd)HLu?p+gidbQK*!K!Ob8(4X+X?J>u)4QC`y)%E-qPo_MIiK-RKlBJ}b_98A7I2~7 zu2}+G4y?=c)tnwMw)BAeCI5i+Du*BrRt`Y|tlkEVVD&I)a(dF~+%NSuXmvXKV0s6b zYvUOb^udI`L&yt8!R9jo*5_})8ZC!Ku;svdO=rEPvtGr?gqD6}zSE1qs{Ke;`;k>n zkAu~dBiRS@uW>qSSFes_jpox4>WB8gW=D{BBx_XvkDLN4|0AcJKI8ORr>C7h?{wFn zBiSE|&z>m$TJ~G|+L+Tz!TLN}TMkyQ*0Lx0nAoGW^)Llu?z_JKtZf0C5BJ*i4sa1B z@9l)q=lj}jr}u;Pxwdu$%(dyydTp&V*y6KZ(-*+D7Hc%0m7IQ56s#PM;_J%cC~E4- zQ59g-epKA))lRPmTbyRcZQ$cEk@Hd9ck^M5ruTqjnDj}(=;xiI2EZ{)>a4v)JPCWc zm^ErIj#>m;&P$Ge);bb6E1lTK&t7QfZ$tkLw8 z(+9!oZQ(FjwG@tm^D$9-;Vevncpg@JTF4sBXE~=IP1hp+pCIq(D2(>>XvQ$T7_4)3 zbOpE^lm7KETI=XWu;L%hdQDG)mBZ1j(R|vR-U+s~y14~}6{XYD#y$8jC?|F~kX@;ol)^hz*#F_igS1ZPH&cibRA=ixZ! zWA~0beZuLJPG_FxKjZXSr_VW^`O803s@6R|a5`&IZ;y|GRoC&Q;CxKfetZH(dwP5w zSbKVWBiMYJoZbRvT;9vQ)1DsR?(}Z3&eib);Brj*Pr}$*tk>eRUej5x<-i)vXTj;q zV9Q|ztQ=0DuX=Jq30SqC!1Yb9aC!o)I43kXPJ(rQPH1*IYc#zB9K%FiC-lJRT%FJh zj$u+~?K)Q{OoG+_6Q;nH5Bp&H0vLG@G572U@`{;{_P4kdtnXvR%*XT&r*}J@xye8C zpQ-fS@7={tXYKGA%Iq09GlIN#j{+3`-Q!@3GvRdBV)~5J(>eXbe6ZF%F#ty~(Vr8` zVE7uj9L99+k?ECS?c<46PLG52GtP+#@ET0UX`~T%!78^C2f>!Zkkf~q&U(#%%;~dW z%WVOSb%!#)O9f{}koR|O0QKtcI>CzbcWy8KuE**9&OepYW6WK7#@HXli8Y5jbRleZ z1bMMZTxi|c9N7Gsr|By>{iGOJ@lPrRtFDvSbDhbP65w}WqMs+#IK39EvwBh;SU=00 z#M}xn>E8#V98MYm+gjsJpK!YC?Mckp?p*|1ZpdEnvktrPb-}PUm?r|DK#)QUcbx zCG0uk4E?X)ca^X|y0>KB-OK)%zU1`PocE37>*$C)FP1L zpUON{uo7yTeq}0=U>YBT=!u**a-4U2f>O{%5$rAOUIl(?sWFe{HJsJ>2a{?J-xx{{UHzS zg3XQ~@AL&+D9-6T=TW{G3@;sAP>z)}nojIFc3f8)3GH1jYIsls; zLEf2txKO=k4uI8@Gl!f$>~yzZXO8FevU0HYrL4y3tcB-c1U5T@ys}wbXx*}Tu+}YG zbo!FhS9AJVK=VH<2G+V~v0nA(tTIGcS?oU_?;=tJYM*%9QO-G&R*es(w5;`cdy(CO1)<#YBdSbKVQ z8mzj`UIDAF%-0O*=P%qoWpaXGj>i1nAbRa=TyODerN`>SIX_2F0jR9p8EaU zIWEt0*hAAN!OHoZDX_(HwVbm6UA3IE=zNw!eTesEN03)uiVO9voPAcz@(QOjf77d- zUhDKWuyQN!04s;`F0g7WPl469@&T~=RzB!_Sg-jEJD*XonDkkI(Y~CU4_0pH7J#+xxx7!gol9TSi@?g^++wiZ8v~nvDOkCkTM0J* zda(L)ZiCYsot|`hv(vl4>gT!r&LL$k2i5#*iAYwhW|X|Uxm@AO5dFM;*`I(OOW zD>?u37(;Q+E6Mqv$9hdK2dl>Os=&(myaZUiIM8H z5#*hp0ILt@GiRO2^BbJr=ybkE%%63cKXcY+$N7C=TXz_&JkK9-`l!>V!ORc!o<9$x zbND`<6He&wD}&Km@2dwZ{`-kd1e zy)}Kp=~GT$03**QS$B2>kq_p268Rwg!&)LAoCb%zihPjwm_F-t_RaJ(ID8*PJ~;1m zu50=VIDEfHKFGZZ>xx{+7}77ycY5IT7&v@xL@q3GKBZ1C2Z!&e$c5~G_<0n$ko`BE z{WrZDT!{IWAaY>?Op&+^*4AnVTW%d-%em9}aF4>hi(EJeX5Ng+{R*F}kqbwhJ^{A1 z*dN^cl`*)7SB3 zo$YlcV4ah7tjqK=r&oY=uGX<$os)HSV4cZz+^_I^Y-C*vSbbZ^8kNI3=C3^0jXQn9 z>9b&+$#u*>{A`L`4CGo*{*GWHh+JF=Ru3*`zPR7{4}#T)i|4@SVPan{$%j$=OA5eR_Y(Hibl3k& zDxllFN$@F{jKlojBWC`lw>rHYZ1*ys@aKidCBtCt-6bPn<$1}t)44CwYnbPmm{_-_ z5auj#5p3oMHR#2m{^Xl{%?9*(uzFt82v*N)nw-vBOlSV)-{ExTuU^$K|0pK&8HG{b zYNo+D&o%71>1n4gfb%hV@1oO}oW26q{;m(e+TZn+V8vXY04wM9ZD8fLo;^3c!|8os z<-C5#`KXqsGV4Llj3Ba}d8!ZVnVa3a?DW-~ekos<|E0`X{+GI(FO5T2e=e;D>pWk| z{7q;6rgwr1Fwv_^yI|ClOM9Kpy7WH1v>&W9cIgOsEhg`sg|YaoOSx?*1*@MM%A8&v z>Y2Zn2@FRN*^mUO#tqC_ecr%4P498~C|LWlVH|90&4889hDC5bCi1K;f>F%c3b5|2 zjXS+M)So&9Hal={7cP`TE&E_`2A$4)OizO?{sLG%spVcP&&ymsmlZob2IgzX`Larw z@Vj^9vLslaJC`w^d`$XuJDvS8eH^U)y=)4seY}kQ34dOWTs8;Rv*NNeSbKUI`)2wI z*kZ1NmBZz%N&4lkmdjmlFRy`*dUAO!SUtHs>F#CDID1c>1DhQ|esOOi@f-TOx z)7ekyS1<>~zaj=!&#y>;mGc$M!Sp((H-c5m6>VU>N3Q4tTl^8Q#UFS2M5sUYe%R~? zB3G>7Liuwki&Mw-P3Qh7eqEu{V@_xOTDQ*SU)KsHg2f{XWli z-_P?71B%u4IlbTM17Lc>xvCpv5GN7!?AOhMZLI~cdEj1{zLeG9LrpclryQ(W-c#Z9 z%22=m0>sP}ta=aYQm@{V0NXqrPG^m#_c*=Z=_# zfu3B#-YEYP?w9EWV0}iqq!g_0t(Vk;>_vwA+K!MYXon8jkx(CXgUI$i<2O7Y7FFnu*R=o#W9Cv}` z^FTLPJ`eObz1QjeV4G*a=|kWE1N9ylar&s!$H01zIxq>=d(?p$aQN^1uR1UX)_dlG zd8aRePr|_b^<2MD%-ZF@z5*<7^_5`NQeWkAs-0d7wtV)@@*BXarJj8=y~*i=VC_-; zI9NTeXI-XGIei|iIWH{$YhNy99m>Bn7V7t3g_ya5RhQP|h0eyM^pMLhLT`0?0&KeT zcIhy5dAoEPoQJ`CXAw-F1Dn1GRzEMJrq9@y6@xYZWmRB#zO2^i>>>2~uSd*W!K%x8 z@k0JD8vyH>x{PPWbow-X%<0Ljet8*KXZ~{Tk@7De4Ecd?AZD&$)$6Wr>A$I$|JUP4 z(z>rVf=zF7db88nXZ8Ypd%Yb&>%N`7!tMPk%iL)_e8q zlVH6Uy*>jjz@UdY1U)0KFM~1v1K;D<>v^Kdd8Qh!1BC24VLF+SIaVM(L8^n7v1|e`bX^#@Qh@x zVAbE~K|a$gpMPWjP45Al-Urrx{cQlOGyk_yrzf3GpZffe{%-{+|L;Xv{qN;q&Hwj` zP=DY-#LN|}`gi@{k>i;MP zYyN+fg!%(X#LN|}`bQI9$j?9M&GI{)-s|)vSkL}HQegS{2lqM;1LyM}a|n8G|HlG& zTd1#a?(O1YM6I<_1=gG^wN9^ddJ|Y{t+2OxUs~w|>+G$tho#})Pvid*y!GXme>Q?m zZ*_VfSUvgY09fBI{y75HzWHiji>1Cn*!2jkw zcHv(3R(}4w18n*1r|I-&Iz8C@lVJJ$?^&>X{`VqSKK~~VET8HB&Vc6mpDO5>XY^&n z%oRkADZz_y-N-Se;PCw?lKxvZ)61P+2@dCv9K$)eUJmA|aXQbH=?zYA2IpfizlA}} zo|xVX4$n;F81~_0<@7s!2wWh21aXI$y)u2m=~LiB-ZjU2CHW2vdeV@trQ{aE&Y9|qP+|DB!b6;5Z*O>YFN z&&M`{&%)rn?FhD3AK2EK1X~VkN&ifV{1tFCC+DH`_egO13L?jGU7dk6hvzVIT&2_L zCp?ppmhTo$j$Blt^VK66&VEQuWbhQXX+1obUC4pu*-DW|h1>RWUgtg{`R1&5y# zB2o6oboL~C?~SZw?Yehuf#X8(Rt$Jp8$&1;7bBWp0#3!K;PCreWNkgz?(GC?U)FYkwO?y{oZb(9HwJwUAmob&5yS7Bk+nl$%NYTyw`3r&)W6O9zX1K)^0lMwS3m7^KksM(`TH%2##UU z=MsYDFM~@${e&3e9&s_E_WcBYeXsOVM9V32I``jn^emHK>GUeF%~=ml|GT|GFlj}9tGRFV_@@{bUOQH`h?S`!RdeCA4JlB+o-dh{@X^= z3y>q90oSw~)*k*nbtEWvI%_w*5^VR@fOWQmTCn^FJz$;5px5a`U_G+|>&nN#-UUen zyVsrnV8ZDOVD%(e0^7RFVD%yWBbIX31y1KWrn7eBKlFCQ%oRk|)!>EB|GGMGF24x9 z-sy3$=}k^=b$TCI&&#?2aQOK)vW|7-VQ@~?W%`uU=fL_bv~J$%tljiQr!P63eX#jg zvikab@NpPecYO&$R9uCqXKg+APWP^_b2@7`y}{{?PHzFT*PK6r5dNGSS>Fv_k3qd3 zfj-E?2;t}U$oeFBBL?+J1nv!a1|j?$9$7yNF2tbD8uh*7L~82ciL5IZ134#FBdGr; zvKG@>3-pK5@44Xgh5SB%_Wi_Bu;q_CoqnX}Giv^P_EH}5=|}Hl`K4g>Ex#75p6An# z>GWfBHn^N-@Ov>(OMVB!)#5Qkn*!hA5P(fD0P8(%18dj*Ziu;@BCyWGh7vIE!MYnt5p2#fu-*?hl!I-~3b4+= zhDxx_Uj^3r*-#BOKQ&-|me>#npN_$`8WBuya(XlPDh%edAgG5MTAkkI^daz84CW6b zY!i*H=W+JUj<#@ zN(|;tAgGq~BOz~_OQ2U`AZIgcM9xDAzP1bc5LoYHn>ml(^EXdAeF`i;o2Q*V1J=H8 zo^|>h*yfpcI{P4f3+L0ETk@P9fK~67e5c32T5C&@(^+E_12t}85A?lhOC?zEOXQsGHWarbDiyC zuCrTQfM_{|U_I9-v0h_--Eug$-CGK_waT1c4(8YBp#s6?sRZkJIjIV4eyYLyF_=Gu zpnjf|1Z(e38h3gMdGWfIJvfSic?uhy-sJRlei?%~ zT?pFW!fvq5)8q6Ja14X_Nd(KG{}=}KX@mpf8N~O9=bXL-)_dT|x!}vfoRjkrFBfy~ zZWgny>&5Knt>QMs&x;2UzbvLt)&M^zClS6PW^YZOaQY;;M>(^I-w64Q^zdzQCE|C* zRfwk7IK2-1edTl@(i1$qu@~V!@hIX?#N&wfi|L2HnLmYK`n1#8&j&G>vxx9>@d_g6 zf__R2p;cUhc!RhUQSbSu(Eq!n*CM`I++ds{?D!SRAaLr~h_R{fs4`tDmt>uzDUF0b5QA{38t1 za%wJu&cLbVVC~(haj@n;wFRtsPHhM444gUuwtUX7T25sxn*X!{a1{pDO8-6M1>!Qq zw~M)MwU|9Ny%KEsoWpeHT7C`qA`H&Y{-~DI5@2|G=v#=HD~OyP#fw!G!1)Mo5YwmW zF{c+hot`bf0lXT6^E4vlirK4w5%(Y-BkpxN&xYv(V152PeGqK(4>^4dZ1YdLoGGVI zgDWxUXA$ANkc$ctwN_CKEN|(*%`}}gn$GiPdL3Br$wjP7K8xBMx4WE#(>t8r>2%hm z8jDh3^{|Mwn9f>EUjT2xKwU*k2%E&qhy~&mMCELag5`5-09O9ie6aGjGFm=sXOA%d zR@QEMsnaXLr(rOs20`Dyw$_99N^eHoCvHR3_qDC8y-Ygy`b_aKqTQPWpDld?@f`6C zqOH3KwsqMD>DzcNq;F%r>ftulBoEu@S?g|V1Z&-G^lW;&)BC{kyluqgj5?irXZO;l z`nEj}%(c<0?fD4unf`lN(_>CA0qeYNuLJA6ZKpTYwVh{a7Y65KKTYp-`VbgBd}tam zb0MGJ^jvSB14sBp=<`lzZ%tov`m)nkvU)LluKZ&9XU&+ixC}wH6jy?e#h_k~pzjgI ztSc(L2T`9Ziu;`2?{wCs^IXg`a{>nE9CLaST!=w^3Sonoy-=@;S+6ncdXsWkm(JS` z)+K!hJ(|vQWqN_rxn?B>*4GWp#Ghn?x@0tVWV!%U5ltIj>+Dqt-Ut>-Ig5|Tf zrpNeY4CWLem|hIFc}l?A>-66{YmZ9GcpC=qEl1!QA!c@8QW9gaw@^5SG)XruzIqm!Rc}EX&79q5kcp0PqWioz;DA~P8-4n z;&w#S6He~{b8Y7LAzUOLqa;ouT3zE{^E?5zoJp56A%0$8Q2?z zu3GjMg4t8#r~l?!z1>^u^g6KV4Pcvx_1Zk`PERrYg z`k6u4C7wexoi&=i0#;8-S(na9DK*tqn(y=yu>6za=N`Kg zuL7WFZC@2w=XoE`n(4Jp=b1OX(dk{_)fn)+k9FmW`w`XKedA!g|LjYF^}T!F1USIp zy^~I#0$ctxI3I&K++VwQ7Hsp+f%W-k-#pmn+3Ls_%aTflm+D`WpHf57DrgE9ZX^!pk(eFc%S z1%Uci#@@=qnR!|L%zUR;faUGXDzNH3vlgs=p4kSLhcoHN^n}wp!M0W(*yfQ>p0_hc zoIVN;FsM%=sGny#&u8%r$lF;(V9kG)>+@OkFK=hngVoQo8k`;ntDk4NKA+X&^83N; z=V^$UD~OymgBR-OS?sNOSkCHiVy)8OR05V~_qWoKH&sGc-`>Q1m*+RpkLfK=9|Eg~ zZ%Tq~{&Ap!K(f28JEvJ zlAky8KF#yyJf|0eSv!4Yt|0PedQgpT?f~1polbY&-b_E1Kj88wz~+IylK(f)g4L5Z z)2BXHoD&1nANKK_A_RS=J*Nb$d(Wu^%g;GgPOk>559h?e`rdI)7g%eZ<2;|kewsc6 zwmB!j@_f#u)9K%I*XMI)L;WDVWUe4mQGyrhNd^0>`70`&&U;L+b$XrCQ(&!Iv6$80 zQX2BX^v{;y^c6(j!g{stTevTp|1JGaA8`7x(?_!UTZ_S3_pS7%dEVL`^1;gxGglCK z>jGYA-M6lQ)!TD(!J6k>?yc$3Z2q|gPG_$yzryM4mCnhzHDEnQ=hlNcFV4)l2?U*) zbJ+(yBj?hy<#69k?+5FgoIB|BA*ZuH`aQ$BV_>~kpF06I53^vaYtHHO;1e<6t&$<1 z{{t>TP<~|%Sansh&!+PXnBL&@xYOIg@PDugF>?ix^9u1odvPAu;vQh#^VnO{*-z8C zuJ-plu4{S=SbolH1Iy2O9bnad-Vj*dcg|z4OdoOj3Rw4^AAmLg`Rs@31z_#P`K4fe zCOn_DTRuI=&-wIVdZ*L-!0>bMV~Ck6h@4Lks{L(IuGYtUysgaXwP1O8 zTRm9*-_{6L?QiP>t0!;kc6yJ~XTWyvBG~*aIei(do>T>3^`xpIn_oo_@>4|*nx~3q z!t{19dvXh6<_aQJ^q|_S7QmKI4|)cx=)v@rZ2kp#S^a{1uzGbtfzwOCn&*O2rHpS;_T|EAr`Lf^kAv023mcuD z0L#OLonU#mum`NVE*t}^Zx<$=KAzR9qhQ@z9Rq9K>LRBXgH=~`C0M^dT_M+qV%jR}i^~9@LYI3c;#3{omFwz0BziV4a_f8o^rYq86|`T-4?Axd*2A zgSj5w_bwVmP+b?zfNh>duz6T=`bt)R2Yt%JJ7P{Ra(ao=OPyW=R?pM_4Gn#7dPl3% zd9L!%t9ubMR}gu}7+$C+??{2=^Bt2;pK|)F)914KJL|#n|IUQdlOZ2uZ!%X9N&j~$ zv~CU0gVwEKU8cJ|s;P8(mCNV6TDN94tG_E2^1=Uwn7M*T`o9aI`QODergh)d4K}^U z>HSV0aQZk{>%MCOoQr`o@UA5U?Zvy?{=S=ER!;iA5uu!SN1^L;!n;{7Ut^wk*C1fO z(%ga|pYNtmt(*SuKbYR<^g)+D9O?(3M9f^6pWamO#au`8TpTz(-{~=@7dgEOEI$|1 zvueD!6|5RBZg=?!m($^Ly1?qg#Uo(#;o=Ff`f%|gSUzj%Q|s0`pS6WfFLwE*q5kk$ zh?y%`vo3`fVIS74<67bTYt~JH!}q;4>!!is^S)-?tkdVg;rrp5bqnCo^O|+b;P5?d zP5RfP;b*xu>)D%)7&*b3^{mNs))IbxTeH3Z9R414&HAkWHR*px7y85J;_I0U^VH*o z{I72W%m4ajr?)trdtvzrr_*!T&o$|PhgS2P*bwGC{0_v-6|6aN5HB>(iQF&CA9H%r z>FllLPiFP}YOvPLr)SNRKNRxA??KF5!J72HcdB_dWcPhd`rkD*J%$@JPx{|4HJxX` zbo$r28|Y2?M)n{4a2zpn1#31o;f3be*b26M*Uya!r+2yh?ySBk53F@Jl{mdEE`f-S!a9Dcu8eW)HB{v5ITP=nLsPHzOaVQ~HyginYQ zh@TX9Am)nMPt&`>pO-#}_yzGCqSZAIHqVPrUvfInfc!rWw0a-U%jP^DbvpZD`9)xP zd%PN~dLM5EpN@gL9%p@~w}ZofCb;_Xgws2~;Xk`y{dlL#;h8a=_1c^~KU|yh_adAo z?nB%v?nm4v9zfhK9z-k_^IYu~k0S06k2yUFw)}CYr@*Bc^e}}`DV{|+qP<$HD5u;RUdI^<+L+y?QbRR!^R+0_#2GN&45EPtw2X zjbOdEJlW)Onw{PO&clG8C+XSd>2mr2ShYVn3H}HM^XCxMpQoZ=n?)PlV43CX0BlMWF21U{dtn>zJXta z9!D^p>zdx;^meDS_V9DX>d7H+E(YgGA*j!j6HaG;Oy~K`!(jf5(`Uh^&pCbG>8$Hm z4Boqf!2W`doLyk^&UyRVZ1>WG=>uTZ_{<2{ z=HXsro?pF;n7M-0Q$={8K2Mc`HRn{h(<_|LzF9u|X8B35>YAF*>PO2${?%)UnJZX* zv;!|R&r$YG^BnDUdY{wTPs<<5>d(f&TK8Fc(>%|1hWwxDd%)={SpDoAK=VAyy|Dac zr@MXmbzWBgbu^p*>jYTq{+ix2&#&i0{!iv+u3+_a6<%oFY3`}=r|X^G;PfV^H#>a> ztaYcCvikq#{Fw8R(-1RP5V?f;;kuDaSbMl`phwDZT@SNoG zi$UZ-g=6{;-)ABR;!baLI&0DIIu0bj={{i|o`LYWiyY_&hvznOU=$o+a4ps%{|C5V z@>5?3&O_}bh?y&h)YFe@sb@cRZ+(l?Tb-V8dWX{oz_!*9Shc7B8)&Mxe#+_7VAE&8 z@_#8j>RFClO0UYfv=pp4FD-L=xzj70UIpe{=*gwk2;qBjy=;U(R(*=UG$!<@5~wkt)Q@6+|wt!3))OIepr_ai=#r zy~XLRPN#pa4bPYNA%x#AB9|w@;rnys@^Po9oIVK--}57vFN4FM5h4wR*_?(LSaUWM zIh{Q>oo7sIHI#wX!-jIOp1}szYkIBIS(j>W=m)Eoh5@G!h594BFLMQv2JVG=cm?lM z&#!Q2=8C}S1uoy6nJYN2JY2!OkcTT0V4ayOx}EOM%oX&hx~>=l>&#p+12#YOsrj!2 zntmnMF+J*ZdWQZ;17hY1B3H79s`tt|u=;-`J)53z+~IOM!SZ=!A6P!G90cn<@JjaC z^kFbP;apugf}r=zD@VbWKL!qej~cmh99)RO{Aq;K#fyk%gnSjhuJd+P41A(=?uF?k zPA>;*&Z{cHyD>2TRaFRk#MOwVH-OcXt6IT2lUH?tw_@<#K7?Ij)*Jq88@Xx>49}0e zpI@^J`3qq6_NpbY_VlXdtRCk+N{>gKp6~Puu=YAm|GWo&;`FRD7H@Gn{hQtnRxR;_ z(>t8b8nwUi0kHNlJ^{A1X2A0KAM`0d|H1QSIz2;AeHt-y1(C1T;)VL~)q1ez{3`vM z-U!w_Uu|+Z%`S(v*u9-DpZ-lB1Zy9^It*4HzRGi@y1vR=RT=lS5B^aEu1wlT05@4H$=C)%nXA(hk zevOizsjqR4lPLs|uW|nH_bQRERe>$P+UZ=&^aNNv{91?8J3~EnCt~Kp{7JmfK7K6) zwtFX>J_Xj9`5O1aa<~_E@4VBOT>f%azk@wjPwrr!b++$dUHX1;2kSDu#_4rny%*h4 z@AL+z$HDS;M9pPWa{fIXI0NBFk^7vtWJCy@P!-eZlFAVD^jiEIFP141ey6e7zj3_pz_Dho@m6|Lg4Anc@~i_2lc_ zV9ojUesB>6^Vx@OV%Bc@u+t~OCCZsW)cf$)>EGt3f9bse_-qW!-&=|h{thS7OK)$H zUW<6HIF4v~qtjc#RT!Ly`)K(cPVWT26N5QjPVaSkKUin4cK|HUy@R2i`d^5d3-iq4 zh0b;_>(cvMFZaT9?uGPk;v=Q^BeUD^7D-br^lV%1ZE$Z-;JQ} zmERZ!+r1-Tn{(9ZJfEf~ot^^IALpDv(EI8)X2GVYKe_o2Sp|15O`uI{jNd{n)zP3wnb8ZxtY@58omKl{x4$Yf}cgaP`%$;0V}_cex>)(i|P4JXDz0) zx2mzP60Eb@*96vkS6{Q!Tb$ko);a0x2kU*NFA27L$H6vd%IOnMpLF^(Sbgi80qZ@p zkM)|ql-0k@x>U=ztH7$|+tp654fWJZh?y&he7hen)T?g~f^D85r?da2^PE^d{hLld z+S6}yFXZ7n#bBM8@3=mHr^4wqVAb`VMzEfd?{tGT|96JLn*Te_&v!?O#I=#&0v!9k<=kn{F-U`-U-`NgU?RR#7bsp~Q0_S1i znYxp;M8&K{wcp7;TTasHtjqEz!G#!{XC6VHVftC4a{BYZny0@2toi$6PA>vmK5IE1 z19SE_GKkv{b+-Fi3+H7{CxSjl^(Vo(7}RGF)Q5h0Gkqbee-~)|`7Xb%obS@F`u5!z zSl+%{4TiTv>HPzzuORZ>Zh-dmy8~dGXArDC{qB&{hh2Ws=@VefpLDwSyaZj|z83@2 zE9(7T5rXN(PA>(kpWmZ@eQx<)3s^qC*9}&$zSraQUZ?jvoi$qiIM_VUoA&qnTvz({ zxu?(%rPl_huORaMS%CWX{Y9|+e193NK74;At8-b)AK;!Sf1m`c`~j|OdO27=2P(np z&p&*Nx z4%Yj|54*s6pZp5X93es`18JHYaAcNbW--#zGZ=+pEhSasdazUj>T2xw>HN5x>BjUSabot{l^b$Ywg zU4MQw3|-!SGy+zQKVq*;Pda_v>9b&-rHc?VR}i_U5--%ZduqX&^B(p}{kf;X>2a{- zH#?oZvV7nzrYFFv>t6OvXX)M~Sno6U&VzMk?p<&?Jxl*_SyumXh0|Sse%u0G-hRxp zC(l1-uS`!ky~FAKV61iM8pO;MMD8Q2KlcS-&3PYtrT*Mk==2!a@=Kh~URl2Ld|y3u zdAlzTR^RUH0%IR}Hty?odXLllz&cC!^@F1r%pXNi&+nTBYo1}}f4Bs?)*YrFGWwj z_fDUye>wu@8k}d;=}Af$)W;Dvh$j)%ho3HhRqsz(m+7nv`k~tpGglB9sl^NRb0iK{ z{z$Xa+nnAH*8C$wVD)o^p0%eVb6~v>jLd`ezA-{?mb2(`xEGc~&vq|8>-;>xbyV*I z1z`QG@jwi$oUw~+*gUL7`h!5`AG(8J zR}gtH4pu)OYy#`v2VFlOY;`)lSw7E(<rKcnf}W40>oo$QO4|5_4Zn?*$h~?{j*;(+9xY zF*qlCW&Vepo^<*wcnb#e7Z7x=9$EzJ{qvz^u;p-nr5^-Z{z3ZHejTJ=t$UDuO)mv& z9}kwfobpgV^kc-#6+{lU;Dyf2LH0y_JIJ1x-sSXeu+Hbf9&jE8>N?nqVEOEi%`*%( zKO;^b1#5o~jyZh-Z1Yb#eF|)AO@sA5d2q(%%z^_9`eC2-ydPWw>-)>ki@*gK$oYA( z(@VgG(n}F7r`+i^U_I|YuXB36(;L8CgY!2c=${?@yaoI==^cpg6n8nj7krWQK19nI zbo!9f+0S=jaIGZ5#o`IXTJfaQ*+bLk!T+wD6-3s6dBy^S%f#%5>Fm`N(#sLA5?3Oc zUgh*^@PA-%PWI#)aT8+ta}D%naHn+k>J@-Onhr5Kq17nKNQV*1yf{(}BZZ*_V*SoQv52z(s|=b1sc zA>@ZSzxwcS)amU1Ey}4y)N}MO*W%YO&%<3#?{<1Wcozn9W)ZYUzl?#4Frfdk8bLMw zvc~CkPLG52?EJD3EDyhA?WQNdr5K!Z5J7$TWfCm^znlkiUy+k!P)?HfsSn8pu=1J3|4QG++WLC1gqX(#lY&ruWG@l{qRP_%oRi)DZ~rCUp>O!yn$bY zUhMQzr&O#LR_zyYNCid9)ua&yUix>0?fx1MBSu18e@rid;?!_%saE@>mtZ>EdQYo2LbA^SGWr*5-2B zT~5O3ePH$Qv3{oyJDvNY-aa-8R&O602j^qZ+oaQ{oIVHMjKQ3Fr?Wq%FM?0OV9pXk zu6P+ydMcXL(|=2)KBr2ZUIsS32CV+4YF$oUs2|>gn7M+8`+KWMsvloaKT`u>`APBI z>indJT+T39=OLAJ`UKeSopky%*nG}7o&B--7o5(XEmF1PCJwW7h-T- z)^7R~IQ^VKp9L3VFo*T-6t5u4!{d~+R{C$OOpiJ}A1rT=b4|;SIh{RFf6{+@rG7qM z=k$88>CIsMJ96p2$4{db-qW6Fb9y`2@;jYA=< z{hLnzrZ0na#-8AQu?FnpL_UK0KT!cz{)F>C(FtAaPV|6P*F>+==@a)Jeg|Ua3L=NO zj%qwy2-dxai=AHP^h&ULb-2puaj-lbZUU>u!yPV%K24`L)pd9nd^`r~Jv@V;J$({> zZLgoCPtyaZ*MQ~u$!4%TJlW#(R;RZ+J>m2|FwWKC%MmkI5P5P1FVvs(-$rSzr?@Zb z!&3!d(+gcbduV#K%Xglis)H`iPc?wmpQqR>){mY%)#dbVr?ZDTGwHvvisCi%M-bH8 zr)I#KXOdr+pUGmd)}1VKdb!i-6Zamz7BO=Lk;yTEvYCq!q9HAf6=|^=PX$0%c9O(k;2&feVU$h`U+Uyo-PE-!_zUR z7dgGe>7`DmAD)>u#LN{$o_767{~eR9HH{?o;prK$>9b(<^J&+gXCPbtGt5=~Gcm9{ zKf`@gf1aT?)%y(lrhR`V4%Rt&rqSt5PHzG0^TRW&=ZzRROV4y8=rhAJtjp#}f^Ghk z(^tSz4BR`#uWOH{3Mol1M%2$!Q|ztY=cgLL+TW>WuhR?&FMa*15DltToIVIvEl257 zo{!R79tQe$bQZz%Ik4#qVD;x&`ciM7Edk5tvo&DN|7@+(>zvL$TYlW>39#0BmfrLn zJ|2b|8eEPooT&us6V1ofM%rC@!Yxw;Ij&mmWrJH5i`RbZXTtJzQe-t6jTFxS8yUEPYX zUEGGaOPoM7y~FA3&u$Ff%bx5Nvv&HUK7nBKFM&@D^~NY7>p@Oq4T5^r*aTLu8aco2 zZRDJG?}*dKoX)i{=j45enJb9Ak8^0h-d6(7D(;LBhkG+Py(r5T1F3^wx=R zvbY=3a(bN3-dcVicqaz$?MKKJ4q=ss?M_CVDVE0hYHW`Z2vL)F&TB%v?dFX#y`)dlUO<`SVU+%IfcD z4>kY$i@@^m{u0L(V0nIj9IQUPztQPUPN#qU?DqaPuxfvQyVF^V>78Jm?f3VA<@x<% zVDpxA`nc0sujNlVeF1E>tYmYp1KNA$bp>FZ;p-~E`TSxKxvmmH&&zeyVAE?tee!9< z%!T|eyim`t>j%rvbwf^1I(;6jx~^LU%jb2=VD&w78W7n5Eo&HU) z1?%V5>+8XKuCH$ZtKREd!G##8_xe5ro1dQL|N0bIKChp0`n1y*!18}RYq5KmvU+nA ztoO#|f^1GR*EhWctTWThx^y<0tH3%N&D;xpHfyH;WAQ!Ww}_c5h%~bn?M3qlSbmz5 zPIt95uRvFgA7CA-dy!1P4#}T2P~f- z>~(sd%cp`L(qBnPy^WV zo&OIFLf5(<8Uf4ChuB-w=@a)(vX_}Fh_sa8g?iFb0oJ`ORbcg`rP}E=F2COCZ7#pv z=^bEsXrX8Iq=nv8OUszklTJ^8)sq(bk7A%FEprI!$%mJDtywJba`atlB@)2$tuM z(2wcOPHzRP-j8&FRqscJz_xA*Z1Yb!ecI^@VAh!aoDEK2LFA*HQ#F3H2dp_i+UxXw zrw=-P#OdsnJbZKxtXf*5V64l2wz5B_=R3U+taV#sVCFHOz0%JGtqowCCl0oG8lB$c z^k%2`gXx2FCK1%b)^V`uDW^|3ebVWy(R{9e<>zBXV4cs8Re;rpk5z(||FNo2Ka&3J z2u@!?>nwe2(CI@if7I#RYs+^&KQ;&5{49Xgw;Kw;@_$32(_>CA z2CJ?cO2APJ^za7Oq8{GR47Pck{~PE{>)tR9&c)!pDW}sX?me=DU$ZNSe7pjzo_xFp ztb0FR@AO8ew}4gq$6KA=4VH(G_kvaX$LU9&KTbcUPdI%Fta?Ab09L(i)a0kF7_9l* z%A8*A^cpa0JPR>%1(7z+sT$i>z?$GWy&uIHcPeDd=ttZ%*g z6n)Cur`TKd@KcpeuLkQG`BV*<_oKI;YDCbP`BWF!=5hW%MQ^t59GE_M@4VCL6Zal@ zH@{|A5NU4!t0(QvVBOo^=JXDy^I1^s?LAH(2FpYHC|EVN(~ms2(~s#3PG176-cK{C z-cOf+<>%AYV9o#OI;Yn=y&23JFGtK=LF7ixsTyyLf#v^3&To39)0@EhYf)x&0zK9rcSVGzp2ORy-sJ1>d8&4 z(e51y^&?G)nG60G@Irk~@IKv}pcmbnh&nxR`9)4Ib@^pZXYJaTgsV3ZhpwN+670R$3pOOD`ehqZ_{7f@gz4}ax(_5Y1?(~Gy`@yyrz3F!a9b8v> z2lo{E5%wc<1(A*+yigxHxL@j3N7CuzPUrlVKjri#u%6Qn_C$5vS_D>4ZY_3tiPPyV z9|JwSwE;oz1GlnXyEg&0IXj%*>GUqA_kdOVt$dDj=5J-arVl%vb*c8x0?*ANBCF+zZwF**UQK@LBfR^yRGnIo71# zrFL(E*5a||z3@8?or%b#@ml+$OO z&RUe;$vWhxlf6}4on>Iv+ga}P3a3|r^`6tox(YB*Z)X>R-P;YeIeVPm>vYy;`2%3~ zk@E~9=*)DoUel9Kp9QOy&$HjE<@5PYFAVh~oG)_)kY(?^{?=JW-y&ed(KD~f^nyXarv zBf1KlUg-3g(~F#50+#2l8n8Tc(ZAN}>H@1LUEMCfC)AH55i=M3OyGs~tBZT5K6lMK zeJQJdkv?@!zDRHK^Tk@Q`t!v)r`J2Z4=kTw90BWh#b0#mesKl5=Km7V{CtV)m>zXH z_s#SYFgzS#O_?i*e5ngBRO6Qh!SehidN7^$n9h3D!!OZ~>iRP0m;W!9I=$TKRp2NF z_WH{W2*u)7#Psh8pbvrd`R&UK;8T^ehzZBz<~>-qyAeU3 z>$;nq-sbcna6Sg}hY|F7uY1JlV@{s{!}F2Kl);r4d0J~Q9m`(pZt)00jgcRFjg{0XN|I(^FN?2qNoI(;FlKgX}@j6D|xYk!|ZO|}=$6@u0O z=gPpE^SN@T*MQT%Lkc3#HGRUg&hzX!-PL`P_HYdFD;81?!y5)`PY0 zvvIKA$7b8WIs>!qPERX ztg|#b4%RuDodIiqpJ#pY|9l=;{-0;xOb?u10G9vfxjyfQpXVzP)Su^Tz^2zay%DS$ zpJyNR{o;9^0n>Y(&f4|w7Cz4!EuS@-o&ukOK@U?-pLY5@IEKNT1q91q1jjI-|BiL3 zhrgqj7zTAl)2qPR_uo~6Rpakiuj#BYhVKz^#LR_xSmP=RVAf^#vM$rdolc+X=kJ!l zHvbA(`|?6QSo`$?{hLnzrWb*=UoVt^b*^5h0P`OBd7%=)^eV9FtWm!+e1SD`UgmR8 zO|Nr$16aL%Ar3wjgZXU;>fs9mVDrg7n9m`n4?BGnZ2nz;UYLch{=C3mFZ^ISbxbI!3Y=tn<*n7M+;Tn}Do@8;Z|&W$*I9BlJUI(^FN z(@vjp`V!b`Spm!2i=0nAe6bL$9=;fJdXdvvuX^}m8CZM$Vij1QQD5XH#@z>={;cW*YA75 z^7i|_P(Rv^n7Odl6kg~o{eB*7`K-%y)@Ax~R)2|_^p^ss=R3W?=`p95gVn>AD#7yn z68oS%dMOUp9=+7)boRk?)~-EzsST{N^in6d7z6!$smtlzPG_%nV=$)|LFeQp_R92r zrw@Y9z+nCmLYa6R@l5d&qWND2o6nW3KF?I?^Lb$TpLczmFNLoD%vXTb=lM#f*MU{z zJZs;90dMmiPVaO&Yt;AO`2nX7I(-zp3xo5pF3V3jeHyI(%+EM|Hmm=Eezm86$OH2= z=KMo6)Q@scG8gnJywG|3LnGMoo1EV2bk=M6?M_cPoqKKb^f|rX=>tw@A1pr!Hvg<$ zd-{h-FzaD0?1T344~t;CmuEowADMd&2J-(HL*QPLxp&I{V+&Yo{n6F($Ar^+z{g_n zUY7!tJVqNT~>Eljc0P9(JdD-dgiS&giSl^Ep3Y=c(bgrZKp9R)# z`P>K78^HV;{4B6u)0>^%4%W}43!P5ya(W+F?_&%7P9JdkBv@x)Van;#PG176Cx6P# z=KLuiEN_1*0;9I0KSa!2LF7-3c%kR_Pi3sfa5qt~={jf&Um$Ukx`Q_vIKSAWrQG~VPLPY&D?mx$zUgY#* zFu%ro(Hr}W`sY$`41;&A9h3c}@?UUJlmJP=Bd%dbQK*!TQ(2S2;ZnR<9Q6Uw#%_z}ln5PO$c9(e2Tq+oQ!^HekC7K{$F8#$QB=YdZH=zc2kS)>w{#dH$M@pxXah3eJ;W=5*%rHS<}o<*>%6^jbuH zkN#^tIFQa7w~AS#=`Bug1@BT$8=}5%{s%xEKR|mg=0&KA7GF)^oJf>U7p?dM8+YSmIur z-tF`eF#H^S9x-!a-6g!x*?Tn)tQud6z@~RPoj!FQUhMwCnj+&ev|uO^*7?(|9UX&Cf2 zg-|43K-Av7#@glcwF0pGzgFnHSiO49_3E_-r^mtS;cKm6_3$a|&?&xQJQ`W%4MSCA8_0)%HH&L! zZuo5GM9`B=elIvY^Er`zaQHru6Bz)9pC@x7L*O#aiL;a&{@k4tK@T%}(&^*i@aL4A z2>O{D{+yDNhq`h<8qSl4x^iz9w<4Y(W?g|8b?NVVa`NcseChP_HZk@z_X6=K_(E|K z%rk_^@+QGohkOh@d{*29{+zf4EI-GC z2_6phsYp<8=DGS2^@)`K@5oOh3ob^8;dfL;wFzC12Zx9ImPJndS(;2Ay-5 zJ_$B`3VaL(bEXmU#IuNcMvhwm>$x~?3F~fG&T{s-IBo^H=8xjb_FP1Bv-wfXZO=tC z0PDGk=7aTIL}TExaQ;z&fANad5NdoIniUw{xOX zU_B$z8SwfrXDxy~Q)}s2XL~IQv$MUHo^`g@#=t$gw-|ho6i1Y4etB#ti|+x z@Lkf`Lp>MAkAU^O96##xG4PP`lVCj;$Ft|Ar<^|F^hu{rgY_I8kG-&G;rQ8X&I#?{ z;c%@J5@080}p!Eg4*n}7Suu4vli5Y z-=O>kmmdf3klqB=vlcXi^{fSL;4Wv8NFp#(oKJ9s2*9s2*7By!beCpqo%~{t0-h{#Y z5zMLQbloWUbJCMwJ*Vp?!SJ2Vp9SkVUAF|*bGmK?tmkxnE?Cd$dhDk?r|VINJ*Vr7 zz)BjS50*3K^l7l3!S!=seUDqe07k#)dHtf(=~?+Fq9%K0 zPwWNjnLTk3tY`MbA*T<6@tSja@3 zu^!jTZw2d_&2Mvh!s$GFdS>&x!Fp!%Syxi?^nvxv<_|cXwb=ahiRU-HE`8!_X{Jxp z*=L>M{3S5<@i)I?o?SuCh9a<@HL^XA8;YG?=Jax~p1TdzU_EymYQTE#Hq?P}5B+SY z2kZIT(CG9gr#FN3+-+b#<#}U(DOQK`Y@|1R4%}D**0Zp&6s%`qBfaTa*jNSb(Y^4N znTH2=WW3h&*-KIq(T zV(mJ&o9Myx7Vwbr=|^X5Q^M(;PVWNid~TvQX|K| zPd(QK4Ni}P^^6zLzn;wk`qZ;r&<@5u-1mZn(>t>Ho4JpAjy4yA_FsfiKiN3*cJu3Rs>`N`UVQ z^^-clI=3g$kIwT+?5F8{V0faplls9rpC{3$>F}A+N5MMJCyjx1PEJZ@a|+QbJHv%> zu+C3mqtlz6-U`kbVB8xC>EzE9AcGxhSMhJr{-asb`^(J}oEd z^l`ABkwW%g&q(2n(`Uh`C+%S_tDoEgR$V72z<3s3_&)RO3UW?{H#_HP-p8*&htG^Y z0oG@*li|TWcbz;1wtSq2oc$QQ7asJx$DEVr!8*4mFM;2R!JK7;b3=Y(E~4}|<~cnI zuEaq88v_KLw>S2HKO(&ku~poU_%ZPS;tk><#HYpd|7kHj-zuI({JeM(QTeBE-R@97 zB_C1G%PEE6Z%Hpf{DHU}QRnuQT5yf@dc=2$r zLj0+?3{mfIF|KQR1^7YbR3bhkrWe!eoK9~e%HcWsnK+JU_pX2shWe=tV`A=|=~1V% zSC1$shWMDc7%?TL|3hN>e_YJIX|GRBfc3s{Y6ti~FmN7D?R0tdd5$qhleqkLl36+gRyrn&LCzklm#oxL@k+Ggpkh;J9SA?m&N^mg#OrL%83W2dt} z|0cZ`u~y7pncffncj@fgrDFC??_H;}Z>EocPgD;3lrK&qZV-3as~m z)2G3De>k0eti)g+<`As*d9a?@(-*+EVlZb3p-a4i_@$7G7``aZMeG*mIXw!teD>M$ zS(D{+qJ0=xtEd>^3~>qKesLM%nPQ%8eIGBX0KZ9k6{5bM7FC0F=8I~;{2J%4Lr}d% z_24_DHz4Z$r>GJ9J?YJe1L79M?~7Xze<*HqdOO(i6He~{TYe{4?`cK7V0~{b8V0`; zXE>b)PG9i61khPc^BedD=-i8c33)5}wn}@qm3=!wI{RihRp4W#vp@ObI^6qlF?+I3 z+z9>4;wHqkV)jISwz77d)jy2$Yjy=WTSvf_L+0M&f3}Vyn4e@?3U%JE{B87=!a)AE z0tETl76Y4JSxj1Jf!e7Nzh<^~XC)$f`HQ@WD*CGyz(JOm@ z+g1<0QhFnzp4n|J;7!uo5OvBL+Sbf;u z3s!%&_d9*S>BFe~RJ_In#kmMO#d(NYt2pZPBJfGdp+}vo;!^Of(#sI(iF2a2_KX)- zg7u6SSAn}Rm{aZa8nE6Iiff(D-da9;dol*^Z9*{r&EV6dqi?HN4|5U-CE^a~I%CD1 zE(d*ErSnkCzI7>o0MTk31Y3Qyis~FSZ8=g zDKvT8Q3kz0Ipr>=3Yy--cT_{)qMRl~+>>6b1wrrOJ6geKOK(Sfvp9ihI@df$dJp1T z#C?eR9=D_4=|f+m{_H+5Gh5r~I96Uv^?&Y~7tvu-4s~5AMQ%|DA;hT6bp*Z1WU>weC*r zS4J-ZTYjn2%UnM8&OUeTtN`ohvYp&VeIDCc1J>uUo%P`FVbD(;;aB2D#QzkxBC3Zw z+rU;!2iR(1G;j27we*0kmR_g#x%_^o4}dLy5Zr)4ZzBj-h{q81UcEC3HV@-Yp8}ib zX|Q>obNLHk^SlT)&r4wQuo5)8G~i z?$I2=hsBGCw(c_cqtaIp*(2naH! zQR|k}fK_8jE!gg@19xN4LnDIvR?-Bvwdm32p-1(hBmuTL>CxutbUN>|e16^Xdt5&E zm#^ue55d;$2b-S(uz45)+nmE-n{xzg9!8x$=JJzH9|v203Va6!Jxm~cT|9|s>rR2` zl{s?==4~Eqo|nLuzXF!e-9YoXI~S~Vcjq}h3by>f>G>|d0L&i2!|pXTxD9bo+>U6T6JYb)0k(M<%`?|D&plxC(Cc*e%<}u4PA`_v^% z83mi4aj^NB0NebNVDmEtw)v->KI8IdojwP){CTi`@49;lJd6QvdvX!j z5#@7F0G7`^`C$3nQwWyNJu$F+?kNIm-95!lF9BPAsng3`emPiu+fxNL57l7vPzN>- z4Pcuy4mJ;sVDr%A^k%T-w>Z7k<+p+LbNZfkuzpV8(*f2w+{5(;FxW$`qo33F^n&$s z_ntnd_k%5;(Q*dCcVlp#Q3U-wxMvD%wNHbs_BpWCz5upb7Qt5g64+{AcKS*-e=pGT z_vV6?zc&w@;unLQy-@_!zBd4?Cwue3>ciebu~K# z!`^DJ`mnbSJb^(!^$1Uh8xYMy9BesF;KLZqZ$&WAZD6aV18nzpfz1zlVE%i-=HKn( z-hP+Q`z&V=Z2m{V=6@XgGzR^o5NuugHGK-q!JIh+?fc$&u=aiL5}00@ryzGO%jjSMKx*mtX1hDzN2OgBLO2 zXI~w{E8<4Pzlxg>m&DD8=CcKCK3l=&vmI*7uiv z17Pzo2sRHRVDrFzv^kStn{ym&9#T%909*c~)2CeiG=4`B#cTG8du?mYLSHL=4*W*( z65=g6ISc9EYf$4A^mCOyXP$w+t@?rT*(=j$ozDK~^UQvv zuF~h0{RMcTJ=$Lg)?Vz7IlTz1z1v?5R{!^xxSUe3-OD~(emT}+4XAN{1%jUO{gq%n z`}^5{JztTt4?m?*sc$$Eu&>HRp%l zRr=?8`+FeiZ13*{>&)-Rer58xj`d*(Y_$)At)C;{|Hs}N$9GxQ`~UaYfB^$PBHC2c zkA*oEbLzsWs2_FcM3kvRr((@SojPT}fC&RWz<_}R24ZKO=(LJz8r3SQRdmiO%2lK* z(X(UJS;eVkR8y&zQhuM;z4!Imwa*26-@o%X|NI`0eIAdS>$TUO_xrl8_jTXbecktV z58{ULO%ANT7j5}=$KQvxJjY9h`JQRpe)M-mccN|H4mf@n`gvgvp?@m62mL3}haLY2 zn*GE0N6|m;*9BSVUyIH`vyWj4CZQ!x!DO_=FPMVv6J{!<px4Qu^<=<|f>pp=vs;wRCQMAP?_Pv28M zeNXxHJ>}E)luzGNelt2(Vw(QSv3>bIbQy;Y{T}$lf-C5kU5j3kjW!!?zJfm5pTA#W z`eFSdw5(UJC}!6W^R?mWubo@2C`FGIznoI~e#Jb;uNd&JHvIS4h;ub<49Z2%rL?~B zJ}5qMGM*7#Inaiy$*pbY)phvfC5*Wb{c+I;D5Y&zA41b4nNO~n z=lB)q*V#e6$@Kq8i;LehsBu zBN9opTssm?=-1fHzB?&o>=G?#xke;*qitQSXxqm<=r%U9?>-6{i$n)n#v*Y5-N0s; zgA_Km-Do=&htM{+rXSWnjJABQ;~#POK8HDqmONaWgO)s8I|<#zMjNiprI0*a8%IkX zt}R4M9q}Q+V*QV`paylu00gCUu|gH-*(48fVTZLF>HSip>2PA z&^G2_^jFwSd@~ldk4Fal>$1?B*kG>9rjYz!m*e;`$Df3j_FtEamUdnjM@##!D@02> zuXD!bx?+53=XGXW#0na zXv;L9yV(rWNMV^BXv;LAZQFLDyV(riOz|txyC{Dxx`pyLqIXjs61|7=XQKB~z9hPx z@_^`ll-BQX{QZvK>G)w9J!5 zW^85ND{4YN$7b5Oi^A61;`n>evgRymL(4Hxv==SMOwm4c1DlCs`YP9&qE7T?@efco zitcj!gJ{clJN_ZG<&U7h&t~HHQT#ykQA+V=7)$&aIq2t&5esI-C^|$>qO|^G$De}! zu`p99O&`p@1r(C28HH%c&x|6DF_TBblv2DYdLF*~j^B(5JUPZ@R62eQzT|vH6MDYv z+f4b6Xw%+y(X_=rC!b;R`8n|qP}=xiXt^(&K|V817pB``$Y+M>vuSe=g^c5j!)O`D z8As3!Y=$wpm2tVjSTc?`WT9nTZpe209JJ+4&MiO5;d5!jS$s|W8%$fIt{dX`Y@t5| z4HxP>3hCnwQ}N~ZA#cb>-zZFh!xZ8di$5JbQ*^>%ituk1A2#C_(X$+;#PQ3}w+b^C z&G*8#l~dTZ&BMP<{0j5}(bW!9JRLSgFA4~lMd_#KYlgnmevo#-b-w>bQ6$KQjN zyguYw&9)~%M ze~7dU*O<4;FFB1{5ZB-)g=4aNB3JV!J~O$o44o+wTE7ba-?+7GGvBix_+97>^EJAQVuWb&Z`X}ClK+eg z`u$=P&v5X?GJ` z?e776(^eD5Y8H=0h(2Z;+ zCV5NwWJtlQ?cxi$9?dfCA8Wpezu)mqKdj%4 z9?xc&Llomgo4#28F!}`XdmaCX;~z!G`k7nkul)VG;Fd`|hCij>zZKpdtKoDh`J4@J zkJZ^GKhnq9#Ire^o!j4EQ_1Yf#GBF|b9UVEjmOs^lSd)P+w7@mIUZ)`qwT&0=s25+ zSx8}dGZvOlpe- zGyS!U>93p%x6$7epLF;}hcW$~$Y$EmMDbqHZIp3_COkKcXFf2d?~;exC!^(GJ6sSo>B^F@X+(7PzQM7LneI{c3Pc$P8!iV1U&Qu=#`X}=tMcl4s=oW0{H zT8@EIq#cXWEVSggG}~cJY>8iL`Wt7%C@r8kTl92FiC>y<{9?y9l}TSp%Le*VT8VFB znV3}+mx`{YwEj*sxe6KbVAm3*yRl4L&AzPz^KZFASN1(fY1`B7_&sQ8+nh;g>DQcGw9IdFCZqqzM%(7(Q@keH>?ha9ISI7PZ*z*! zHfAyUA~v&ciQ|*Elt0(;P2MbD?f6Oh{voO$9|Ip^?%^vre&)2HW$fmV6MGGv(}}kI zI)IjAV~)v*96xgop>xQWH|eY1$UOBrTur7p_yCWFzrfxV0Q3@Wtz|<%{TE|C`O5HrR);Dhf?O%J59di zc)PP5ZQE?}b0V9GbAUqT#yd@nT=7j#Y@8!#+8^?L6qY$U;NNAwE&g35C$#O2!^X6q zSa6p)Hl#0i6{Agm|6;#yN|-td%haPyTaDj9Ve)QtBZc)%eq=7Xs|gMBX4qDA_<=Wl zv@yHTmN&Vk4R40mxe(@`SWq^JLijS%C&PqusKd;2mv>YdQ?{gT_X3LnIOZ)FOIhSMU?rz6Fk8}qQk^g4_= z_F`=ObB~EF&t31Cf|hIFJ$a5_fR^+6oBkvtw12LtOU7$%Df(>j%P8L?+61+Jx#Q16OHSsRJj*;b*W}a2 zGnBTITcn%ougB(U<$E%dS7~Gj-*QZ{lAl z+QhfMiEsC9cJ|$cFYCSgS{%L=9iHpdwHJK}o2j>*!utEr);F==&t{kd#D7S1m*e-K z>DQYdHs7>Y=)T{7X8}9lxtRb)<9p%O+4$HIMngx=O|O3SWsTd7t-eYO>AlN{iZ$E zH|??hWXF#?zG<8E<^DpntTFDNj+XY{U*!0+9KQrD?YzGnEo+baE6{R$-d{b?uls8p zzaGtX`OW{JOnqX(hwAu3+W&xQgPdy*Bplzg$1=qZW7=bKN5UR3`H}1XJkv+%*SrF> z^lP5kSK2(!@Y0ug^U%`%c~t}LpGRL(zGpI9(&A74n@LM_+gd7X~mh3491 z+Bxr_;~yIEA2i?2BL2^fu%B4)U=dp4KR6dH_bx= zKhN>au_}3ZDBtl-4$Uz~`yWbBSjMzX^7)X-t@X_@WBoG6Pom|1@S!?1^XFd|Ql>t! zpu!vj(%%XbU-DLA;%6BU#>AInxWbHMw)o|gjP+kvn6K>zeka<-Y)0ESyBxn|z<(r$ zmY9!BLd)^zn*Ydmc$RzGmy!2=_T8{HaO&(0&_~%j6ck8z}ew*WWpk-b0=wY;6 zUmiVz&SfLcW2O-QG1GSIn^N|DERN>+$zMNCnfkD=)89D!j&3Bk@#)8Tmif|o)Hf^~}{7H^K z87lv_ksP;M4oN!cj6%JHkwmN$8}d@b7YCicZ_rai{HMDz~IOGWRblxuWl zGg{UdmAlZFv6+2$Q(Pyyl`>qXz7($r!6 zE{acyK1lf)(cP5RKZLe?kK-RkTfP_lEE_Q&H^p(Fw}KHlK?CePMyLdzWcxar44HWRajLdNBB(>}Am@jEFR zMVp*hzuWPTqNVRoAZ>1+$a4G``V{lcSn$MT3W@VX94+ymn2P2c51Hu{mPw#3GYcJO zGjZlpTp+rfGA?=^rHN%2lh3&5D$4hWHaWEWn&Z~`wdg!yOy1(6n<*tfPnf)&Exwbt zC-&mWJodzX^f+NUDRV?0aQq(h1dfNlnD5z7ESNtTongKfJxX)|rOf&B3(?juLd*Eh zFGkCl&NsP|Hq1AuCyPGd8W3=73106FU%t6OLjJ9?4q9?H# z<|qYyG`cE>LgG}J?@RouIGQ&9E$jn2{J@(wTc!b>Wxj#G16%S?)ruw8ud01$8{f1o zo6YctC?r2sCg;{S?UXfMm1!q2{}$fQpuuiQ4U(>oJCX7xoos^k;wz&^|z$?+J5jW(K7Cf%vj5qE}{)KpNrZC z^1O&Pr2KYxIX)L1bo61goI8t5+vI$y&O%GSs!coP7^t3vmSdoLGFryEI_~&W2I{Rg z{dzAO{i;q3w5_@b%kC0ks97@|3 z*P?Aq8Lz(c@KPV*9OMfb(@6$Ye_ZQ)Mxw}$EVGy_>K6Jh1pFhd0x_rj*H($dA8`il$L2n$JtDLGY*#N zKwl~T0ZJK{B?r+mE=#)6wl6*C95xf@2!*Wqml{jjwlo_Z<~0^9jicqx2 zmNnkeVzivUOU>9_#zy?55@kYk8KoQ>HI-;-LroG*8~R?MOnrz$d+c#lW9pUT zp{94hf70;cKbZx7uQ6i5lco*QwkK(WJszIScl-p}?n^#X`<9?5@I4c!lwz!C+MkMJ za%=rMv>fM8HlXdkjgH@hmT`Y_7kXk4{QX?Y)Q7r`@Ou7E;K(w~S*UQ|?)oB^BMiQomqU(@U%Hq z?{0h5KKJvhTO~nl{u{ zqJJW~7X5Kng1bvBf4EQ{j%pmEq$@)LhWv}w6nGq{s+R-FMBT3b~=7H`iH_C zLI1d4ub{}>FM1MM&bt+p2jZ`YJN}e`_$%`9KOy_hMSnrG>F*asS2;`#TIQ=2wdfXM zl8#^J_$DXx+2n9VgX1?kev{)jqn{Jrj4wF~_iaaiUNn8p93%PwTIPxsU5=e_4{vYvoqkk`&oTc{N>oEJ! zzZHgd+I^Eb=r{ZQ-baYk4k?4AKzUT(Dta(-+MW5I2uZgkmheS_D z6U(%J4e>MOzHChezO-{qC0g3K#^liY)N9+eCW)5(tf5|e%&cid%UG}33&S!0Rya4A zI?acAk5XhfTGj?@jV1nC@@CfzYbT*)j$J$5@r%(Xvk`MG$Af()vzGST-=SK|@sMH| zcY9y6b_bd<2>0DZA#=;x-HvWWPi8am_fyz597N0czV;CMeQbs?{h}{#ea?JsKe3>0 z7FzlhYFXpel{>y^zpO**7z?|0sxy5V#YX%(Gj5hK{gOGejxkCxwdm1ohEGzMJQ`g` zF-CMfrQNpyZDTTa_CBJ{-a~|kBHw#SuWb-N9MhC z#u8>-7J9BRV!=Ao-g417l-7@-Wu9C&32oz;F_iOS-DI?l8Ar=}xNZu%oXy0~qagop z{g?ULe(+5_(yvgDG~dIoaD0<<(>~*yoLfGLwthWYa=Xst*0#swww%rEYjSIuCbaF# zPPFZBGurOE3vK(}f-Yw>aduPKID61`-!^nPn_>1+*!;AkZOnaWTW<&2=4wBhm~V&k z0y_K<=O{w@yWV(m&aO9OC&%Y{lLJ}Htv6$588dd4F=J;LGj@!HY3KUM6egC@aSF-* z`YC9;ZywsloQjt7aeY3T^Y`udQl>t{spSjX<|O*#=9~C+6ejOR*Hb(rx`EO%X1vTe z8OD^BH>LG=qW^`>FwGQ}*@d=oTF~ZuhS^PF>uN=RSo}SdJ+!Q@cdv%%z0`nAEd!|q#%mOgHnj<#_U zXd9;(ZTFq!FeT__Hd9wAg^gK;w)M_MOCC0qqlx);cwC~x5Bu&!*#0)7<#^bz2Yn&@ zLzJlx{87FTzTWsRntx(J{Ui#L=jG;W`@uJDu)NW7Ox9O8ehpgsTc1R8e7@a4nfefC zFJIU=`_Q@OoA@1$-!tHE%toKe2D8z$O|C&3)?G2b_viCIK(jc7Ao*NJAl?7hs!QnZ|F8><{9i8lM2ICT`oqIXbQzsd3Uqu(t| z7iD;kvhP9kx#Ayk{2s?Yj6PqOBaYwa_(#zf^fQ}Gu7uxY@?dgAJ2#m;aGZoXK_S=c zO{Tq;G5s*#GrY-(*~e&dVsp5OoY-f8o667$Hp9%NuzWdMa=vLEI>Ba`3W|@3CZG2H zaZ@dxZ9@`m+h2#aZLUY#HaDOx-;6fxHt}~+6o_u2#Q(<^%-8l43!bV(%kdfN5$1dN z)sA0-mbv$--RKk846~PFlIV6y>+f^?{b)INp6Yb`gJ>J`Fq-R27_*l`Vm25{j<*Km zSwGkDCp*5$!HI0Nt)a;AO+KtY%keAGtaJX+Mw$As?{2=3oP;`NzKOrb@y$MRo^Cd6 zxPc93bDZKv(NidI6+M+w*36ryqh$@hIe{)=Gy9r0Ti>+#4)JGE%9?7kVeb;Z)bZz{ zWzDvE9$Ip>xdMGMn~7gZVdGSxZJcVyuSH+YX80t9%n6(8&y`@%?Hqzihq#u z{i3@mr-?p9d70?Ll-G&wrMzDB5y~RbM=7PhVYB3#wIvJxqy5a59Li6MoAQpY!WkmGRcT(lgATPx8GY$kp+g&bE~ zYtV9BZLLK&vKb~xVf{L^AS>8~8O+a{yszGmBW^y6&A+y-mgwyhFthWIsPR_lJ#v?J35Qa`1>f%5WS!BEYSxjm8!gA=NYk#<7>%%>=$BW)YIYD#_rL3t&?sj~Wx0o;{KOrkEnM1M)XMWO%CN;7}1WFyp8B|{DWxA_n^;b zBW7kiEc*2n3OPqIO-`iV%tZL@@SjZ6M>$S1O}|cNGjU2C-}FnaeVOLi$OK!oNV8N4$ncu@yRm(j0jt3 z6rb=c=>HqP{YL+KLt)M~tilvTU}i;N!s~)k*Ww6q)V15>X z`Bem_S7-VUilO_S5zc!GGdV(C;rXS+39n5Gb7O?M?v23AkHD;qz-*4dgwGa~emxf< zPFner4uH zh!f#h%?$6gmAYm}sH;2z6W$*wbuEn$C&GN#|NAORUEhpQ*Zv61&m%C0BQXEanXFg@ zCLVza*X={+Cu?SeI1%QbtVbfmi7@V2Peq6m;X0TVVQ$Haa2?G0PK5USBm(n45tx7K z%*gPW-q2$@GQ96lnDBX>!rT<0JrS;7{eKrrsjD(VU9}OItr3{!2+UU^FyD{Byc&V| zi_VN1AAvFVmdZ7E)YTD~J0dXmM_}ehU?SXGjcSSz=L->-2y5C=FGq;;`v}b6b!POK z2u%2MilNV)(Gk`Fqa&$nabf)n6XBWF*!v>Hc{~CW;rJOF;d~#vGeTX@Mqs`cf%!oMrYiyy;TRj+r^gu= z;rJOB{tRO1<7eEt5$cMto*y?OLYxR|zi|&lh_f&Pvo->=Jp%KI2#oo8hO#yu7vcCB z7h!!k?$;6OdR=F7Mn+&xj=;Pp0+Szsxh?`TI|6f01ZG|YrYZunA_5cPnL|#5dyt%6 z5$cMtUd@T{%roal5$ZY^fq5+g6Jf3!A7LFeexhF2_;>^+!u`(p!U%C9%!lJkBgBbt zPc*(FLYxTey73X7p^aZPbX`4Mm&UL2n9;_uKhF)BZ9_9h`1bgJi@8#(@Y^Y75t)A27xU=BoJB0LiwAK_XsKEirq{GTJVC&F{2@e!UePKdB> znQ(&Mo(ZQ!V9t!doD+e$C;~Gr0u$jm$%G+)t``sH$NANjTg-12J(gi=?Ejn^W~~2M z73Q`S6K0%WO3e(}@ZJO_k2oJt7_Qr#7q+fr$6+pG|iURX%qpHk{d5NE%_6vHU@7Yj?Mi&re<-jj@)&*1yYg=H|0C`>ubQiZ92nX52W ztbe)`rUs@@VUjS)T4G^6*KXx_Uf3An7;9qPQlYe`nfClZVOpq5xnEw`3Uj6sr;WP4 zrZDZa`F@4zAV23SOeb|I*W86&Fv{Grup4HlQdbYmvkKEoo0avv`CF{x)(#zKQ2?W? z=NDzeT&Bc{!6<9&MY%8!C~@L2%01emJeWI_IQcN!6{ZkIIaU`XV1BK{DTbM$FeNa1 z6sC-|sIqQZR1R~W5~qTB{#y!D1@lFPsbOAK);5chFy%^|dg}Ubg=vKOgTgdX*HndR zCQgUKw7|TiFs;<3+{>81Ma=J_4|z>l)J|QS6s7}4nG+Uu!YJ2*MO|EXl;=N-x?!d% z?dhQ|*+sm>DRsqRlxI!Vd7OjF zoLQX@vs$UEP`~C@CwTqwUL{U3%zT9@fw@s(%D7f)c`m2TrzmkMi1SZ{sUpq^3R454 ztXry+Fv@e$>Uxeb>B0w2fn|Ua6~{ac@(Y z4%)0-cd9!hw7HA+d_<|M8>U%ddSE`QFukmild{usFe3d_jp*OdRDrHGe~X%-c$wGTN-% z4=yf;nWx05fN4^gDj4NlURyKN6TRqjIz!&|8Ir1CRviC z@5=RbNj*%9(&k3yLuGBeqzOj3uUyhhU9C!8EilS`xA{LfGR{}xw2>d>XE#gQi8EP= z(*bk2!gSJR<@v^vF5M zxl7CV6F$mwwx#6}#-f5YE6+)mR#l(o&$4w&1Ox;p9CNea`&GnxNUnC=M2 zPY-c^qQvQi`KQA4v1Yq}Xr_ikgTIe7@;(h9&Ro7d#SDEA;Wg)qv!RZW8Xg6EYs7n8#*g(-nKTVcvzl%Mt2l*4FwuHZcVlTufe zejL_taO5a!iJByg@?5m09!9xus%eCIO=)uzW1&3fuW5!URN}Nm=zA;2YLybF4Murh zSJMuotkr8eV4ha$>V#3&hc#U=%Dr$+H;nRo1vNb|%C+14KVK7nskFHdMj6v51DL-J z9p}kxrl<)D6N6EH9`|G}%q2>kILx&QlLwdum`#RhT5qxe8McqdWt7vJqyc5~m5~ zK80z9c|u`YU{)whE6f&!X@gPLeowZ;d{K$h0i&$vpX`KD)~io;!TeRJtD8S*8B>@Z zm4Uj>Xl7Xeqm1dYY?viVoEXe{g~^5au)@S)l;1sAmIw3iN}PO{7Zj!t z<~ItHfH|r##r)}RWlWcqz$o`J%gSJ`QtB#)QP%3_|2;hALrR<~m}Lr61EV}6T9$-S z=GA5OFv>b=StE?H&Ro_6qs+a_nqgj7`qjdpsUD{=tuSXOOdHI_3eyggP?!#wyA-Aq zMp=(7>w?*!#Oa1nu9eGrV49UUy)fFC_QCvU=s3#*80ERm@@yDojlDd^pSvEV)RhZ! zk;24bu2+~mnEMqbA4d84#qvTJ<>!^l6EMp4Yk4t@a{XFf0;Bv4$owCpxxZEVRSxr} z!c_2^jUyDM3g#?@se!ptVUjR&6s8_V8?QzfZM>RbRx5Qi!zgp+@)j87US@eKOq)_y z8;tUtWO+M`c7AohXy;caf0jE(X-^kSTw%IllxN+`dth!=;`G8ipfG(f%38EGfLT6t zoZ4)dMumyNC~MK$T$nvdoH&efF4yM4DCcr*KFlGdu0j}Py;_^#zYfS&;uOQ=DohEC z@;tM)45m=r?v)Whti%T%$F3V9!49}MwtIp;xxhhL1CI< zl;3lxZQ;K-o20~Pg*j7U+F+(BOgoJ7JiN98MjNkAm=#K0T`=1frW@un3eyAgZH4KD z`KiM6!6?s&%%4G-tc>Z3Y?vcM*R>+Xf90WEb64cToT9{u!zlMDEAn8J>$3TOvCp_g zsjCp?A%#i6D9;#I6vJ#(;*`LAN@2=ilyP5C4)b#*P6f>06{d>+!a}(RSy2O{JpWmd zggIZSs~$$V=B{XjxlxJJ1f#5@Ry4yX_bDq{U{)!0wZbTK?}|2<&nt1-VZNm>9WctX zf)$-G-AbG;7-b!`qMQFtM_EU$=z*E6)YS{4je8%AGVUt_n4+QUTA2-_Jnvl@gLzzu zlMC~d!o*=dt1x*m-&dG?nEz6kLKx**xiS$1@spJ}#W2cq^_3+sH!E? zFwZG*+F-t?Fzqm13ey2|SYbM0-cgt?{<~LYUAM9u=0YV-4~#Y^^uj3j-7EWG9v-@` zRRPSC3X=_^+<&c#!6@sxRk<+AF~2GfvtMaX9?UNkCLg9(VG8*#q(&)B0_HS@DTYzz zpH(F=vz0hyFpnxsIZU0xRPZzCi3(E%lcg{<)TKPDT$LnFT!~W;GgV<4sY{tNS2e+W zPKnbDqa9-{Fh5e_w8FfqFl{h@RG9Ygza|^<_fl4Mz$o*^s!o`5mAblMl>7Hp-7v~J zb5##anNn9T%!3Nk2eV*khQlYAqFhgt*)R=CoEXebg~^3^R$<~W%JGxTgZY6HCm%*R zev*YSzg6NSVBS)g;vhI@jKY+_yh~xqV3cP>$#R%0l{ghJ$}yI#g1JM9Qv;){$C62y z`AVF680FbTvJqyh5~m49JI0z}zM{lwf$30~R+v{5rVZv#3eyhrPlf5=zf3$qVLD-y zc|O?%qpWR`-7wRYx_V%gb!M^`<~}7(AB=K6T^+#G3>{~6HjJ`fT^)n@m=Y%!=JN^@ zhf(gWR_DR|T#1tpqpWFH7s4D>;w1R*F2^ZMG0YhXQv!3T!j!=%Kl@u<4)XyeP6bSr z!c@U1YueQ{Fv^-_brR+aN?r9Z?F!Qfqdd=C-2|gtFIG3hD9!Q9n3ol%5$2G>G{L;CFwHRU zC`=3g9kg;yS{L~FBQlzXDJF&O2!&DvZT415k z!gRtY*TJ=2Fl9=dZWv|#v$h9jy%MJvMp+xL?St7fbey^XMtK%jmkpy_o9bdPZ!2}> z2Em0R6($aIlEUP{OjVeC80B83t`J5Uuet<`a-P-|!zk<3x)PWjN}J1Il=W&|IgD~I zQ&$0_JiDl?g875eo|+(dU!X8am{S#|9!B}uR$U{E^7E9sCYUFbx|(4&C`=2Ca$T-# zh55P?rwwMm!nDIE*VDQVn7=4-I)mV%Ooi!!nXE9~Fc&CH56l$`(+e|GVftW{HQTxX zMwt)SWy2`zv2`(+XNGRix?C9LI=C(l^ED+-9?TCECLcz*XIxhZ^E)L@0_N`uQyc{O z$~tOY2~4gMrwry?g(-)*OkpZuiWH^_rc_~SU>;PMB+O!ksfVdkm`0c;g=vEMjKVa- zd_!ScV3cd_x>guvt-h`eMp;L#Yll&uC#>rTf{T^s&+9s2&Q|)>1*6RK>$+iXQR4K# zX!Axd%wtNNKA7at%=!RESx2qUhS{sciNX9>VRB)9r7&?A<>yW7^Mc@#aY~$gn9~%d z5Jq`6xIO`MwGyWoMj6xfB{26Yamrwnb9sF^%vL2%1&lVPRWQo)pY=5`|Dn{Cg!!4m z)WiIb!ZgDCRbiTf;8Nv0UEd6IrV^(G=KTuO3Ui~vw81F%x$E0u7AbK$V3hfJeJ6}I zrd=>!RO;%6QGWKfz6VB`d)N2EC_npK-)H`u!_e*75Wpzs>4t0=<$h;F4CX4Ou3Q-9 z*~Nx9Ot}`!jlj2%t{Rxh3X_CUp22RYhtZCWMwr=3T}?2``M#kUM!84Z&;qkksjC%ci^83~t51JrlIDC@)et{^DPQR?c3IYVK3VDc5F7p6#I`e2mj zs~ZED$A^xyF&jp?UTloPG$?U$VU+8|#yHI9lsI`X%6emCK8*5=Xk#JFFO<3xFmEbM zaS&WST473Hauucw<^qK&he;?*1QVn3X_D{s4(>~%K5&r5k^@jY;1!0 zmQq(Uj55z}Y=QZu5~meLS!Zr+3xX?@-y_=C4l`M)s{=-v!#8%q+@i$k;_opkKMUB{ z4KrVf(*vWdS2y;;DECAg`(Tu7+@=8LwxQdzDH}#v_il=jAC1X{QJ!^gio+;BOWKqN z)2OsLA4a)f-c$(lc_mH)=6ecL4D+hOl)&^VOj!_Ismx=W%3;n{;#9yW$IqrJ80CIv zQw@wZrb(D(N_*;Ilxx$bMi^x+x~U1~Yf4?sF#oAAEiivknARYet~_Jh)CQxCMLW!N zrLGPb<$AHH6XsDRP8ZBth3SU*h{E*1C~N*ry)fTZ;`G5B7@B!1fKl!TpUQ?&)_zaL zg5atwrLJ6q6+F`aTOb5)T6{ZvBs|wQv^Am;XhWU-c^uYX0VS0n$8f9(sR3FS4 zL&s?dU@lRZY#3#{8e%Z>lsLIC%6ZxlhxxD)ClBU}3X>1>9|}_lqs-3@2^i(xyrCFI znV%aV5TTcJB)I_+|U7YhZ3g~<_U%Af>G`r z8oFVclsG*wyA`GvrbA)+U=9w=Yz|=ltT5R@aGmmVw9PS?la)BRFv|67a~$SsB~Bhp zslw#LJftv%Fv`8d<^;@BN}OUCW!z$k0cEyY1FL%CLNDST;80A{IH5W!%|7?xJT&dKR2QyP)@?n%`r&|kQ<|}a$ zFzXbi7)Ciyx0b*t=jqlmm~SX`mBT3aAX_V74k>Y}VE&;nH9=6Uje8PCxo6y34|9=H zS0l{z3eyCm+*fXGhIvql(*ma=){+59Y$5>tfi0o0R#vF&pMyB~A=Rxj${pg;9Qv-x!D4rqq=O z^C^YNhuNbrg)l!-m;}s!D@-xW8wyhr1T&TUoyIbllax5+Fv|JfSOHU@#HoUrp)fTt za}*{Cqnz)J^)SnoIE^scxHrLkQi;?fw@j$dSS{GrVmD$6Sf5~tA~!WEgMEzvu%sPDEC&|a$%G? zVOtzVS%+`SgLzeHb3Tl+uG>}!qm28uL=emxr_@ypqpa1pmB1+DzO4-ADy6P+nAr+b z0rQZ;RKYA#m>L-6da*4Dqs$xI>S2_5V_PGPvgY5`1f%?1Z(B1=r_!$$7-inr)(Z0% zB~Duq+@kzUVOu-QSxTG^{_jrhc<$u?${er6=_1be6{Z_TnV+}yz-WE%r9H~eskikJ zXY0`I*&e`DDoi#^t-{1$niVFOv3S42#P$E1a(frbuZ|GmLUw-rfSUP>ItD)1WYIFv`5Ty&dLTN}LXupD9cyjPmSjdl!syJ>A|N z1hbXjbJ*SkbFtE%UYKHq>4SM-Xy)kvW`)9J!zk;Yr(-amR^sHsC}Z(-97ef*J)H;h z8>Oy%7-bHBx-bYzCMaHlr;A~f_3G0lFdtOvDuY?7Fy%1HT=#SZ%yUYdDj4PG zr%%_wD9;a{PQv_7sjD8QPhlE^;5Ox1)6-2baV1VOjIz#rx`qEPTUkdv-OB$5t&M3L zbzQBrr=7am6sChX%FhR%?u5BZiPNQDyPxhRj&i^JbPtSn9QMMjSK8AD^Rc0s9RZAT zPqZT&<^?5A45mk6a)aRZEQN`~D96~2JebRsIQcNQD@-AbG8Q`$Ff~e?Vi@HfWJd{% zGAHaPgHg_l9px}xN_#3`dKIQB2<{lIFf}mBwQ@%i<~$`%J?G#T6{b-?cXl*UmvX-E zXok5}sjCI1Twz*a<||AaOufRi!zkm|U2h3KNIm1GvzSam{!0jYprLhU=}NFu7TO2FiDutDoj0$vIcmj z5k|SMe5OgCqn>Fdj&kq$Obd+iZ19;@n4?O++JfNDu?o`;qnz*0bikae#OZ`lo;f_z z1*1H3c%~ahxhHz22WH6iPY{eVKR6HG`RCs=9yWr{xLxeE`5o^6`kh!XdNR&;f(-e+ z(|#;CvA=xV6tQ5Gsq6U^Q_%m-V=ylnW(3z~zs_nt5@&QSab6#ai3j8IgW#@# z^EB2U;OvnDar&7F;WZ_!izCi_Mhs%!Rm^etOlrKS*?dkN8x~=E;=uqD#@QKuFBmbH zDW}bEC~;Cu7^m5fLq>i=zjEEoZ$Ic}K9g}UpTSu*%w6Z%%#ZtYKQlP1Pfv#_P#Bi5 zcU_yx{4wL0RnuMNLo;T^zH61jn7W#WVi>^^n1QQ#V}HK}kMg@XQ|=nL!XA4BdtnBi z79N{vhZ(p_QkZZAzae=ZbR^_v6X*V+kAwjxjPvbd#)${P2?I}(kJ+Bw6cfhz&N1T@ z66YFyIu@3Wd_LVXHFUumU5>2Ya7fjQw&Fe`JC=B9N|BM`SUyf z%#pc;QBKgpWvLcQ16&)MfWU7qvDbSE>zbG*!FUf?m;dd}URv(R&%@|;h5&cAz(*NetF@tobB)9yL1c+TN;XEf`& z!J{+U>*?q`kGaxwZuOk|J!i4!Z19|qdd?R;=ewTsvgf?!Iq#%9+1?D0eXhq`;W@W> z&Idfl8`JDH9`lUneAaWmE)!*f34 zIo`EtOsB{E)^p6&e9+u7)|(;6p5-y#6?W|P9^=jPW4$?Z>`HI1M$hrixN+VYH_kf_ z$DNlRXWZ4Eh9`l&Bp7XDs^JUNZq33ja&YS5@PL}6*$5_s#9y8N(KI}Q(T$l5^ zbY^^^=XmGo_-!8JU6;rIF`b#3dDQ#&hO)jyI1@^yaaN-aIz3#f#&uHzvO1G2YQT@gM2TNfSNCJL*oF<}u#cbW*v; zEb^T7p7RmU`JCr?$LdMmRrsVoczeB*?o9GVaMA@HNPCnIRsy*i^&+(3gQ-XBn6z{rx%1s{Qt%y$fMLP4YPkN4btmfvV zGr4Db&ZVAnqvv?5+}s5o;~jOm-nA*$yZg)adYbDUb-BOw>gr2(PR;k68J<(-Io=xJ zRBsJ%>UM9h&v?#$&+*Qb)4VIlY5$(S*J(dZcTV@#5~pA2F^_o8UeEEedb-!b$s^MD zntYn)cvq{*H+#$nJ*UQVysS?4Rt1xP;O*7zIe$-g&N#tyZtxs$COPA)9`o09=giAJ zXQStQ%yYcVpA}1I&hm12)&`I9uBUPDY97BYeXqE8MT>h`jlY_{*V$g=v(NLGd7iV( zbH0}DyvJKZPI)4oIj1w-IoDea<~5``Z5-d1t}252Z7gd2{Av-Vt?~m-)-S zogSy~e9yTq-MRb%&+*o@mwUBeF+F{+EAI51#&qY(D?Dep=e(KjOh3(Yys?=6;dJII zZ#{OkcSnECmh`<6A5C|z^{&F#dRLk2ylhCO!qp7R0ES)A_N zxXW|Cp6(QTy(sqbGt-;3W_~L@&duJ{{N~5fnOP$}CpX=>#XB-@nd33unS0Cg>CCO( z^Psvptquwr_G-WTVUPKY=lnU{xyPHM?yXN}?)C0v=AN9+%q>ZG?t8#p4G4cgoN7oYHjXe(#LC-^=`mUP<5ULw`$m9`LT_4-|Mzak?|ldj>MEH=TLV zi}T=GkNJq_eA9EhJF*A=JDqvRn~@&6$YbvHoE4tqjm|?adW?6}J$zz1^YFEv;~hT_ zZ}gbYdCq^PI~86}E6(+pn>@#x{VFzl%;!DFtNoG8bmkGS_D62^m<68Wjr$`%_82eE zkDiduJnG$_KI)C~qux>X=%>9n-i-9<8|lnr-YoIhl^)}*njZ5;x$>0sy(%wAcOLiJ z^Z2jQnJ40&CB=Hp5xt3Eb@-1MF-ROs`l!tj(d!kjcTv&)m~4lTfI2mb#QTZI3k`9Y0TwP2cOuD?F#tbLu_E8^I^P<1s(?oWG?Ke0(~y{36ep<2kE6$Gg5S_pZ6iz1nNNwN33g>5*%1^BnJ*TkG|- z*30S&Z*{T4yS}gRdb+~9r(WUBQ7gO^;|lM*Sb24NFIL{^Io?^Y@|zy>Qo6IsJ2F?@ z?J?ewx$0BtO!D77=T*<~R`{#$N@rFt@tlA09B&p~{dzjHCdYG1J?DvZr|$ip3gj!@SM4x<7IW7*RS3gj|-E$uHoLbNMwdZ(avB8VH;qvsoHh9OzhWQ@j z%_JMVb=?Nhwdd~gnPJ6lMEKYa6GtP73o-^HZ?(rP&3j3Yi9&;$&`L1^y ze)l?$sqmbgp3~tuhtr+!dC!Qx=RJq~p0{e+=gk27W~WEq_q^x)GTr&Uca{0RckcWk zJAJPoO!1sep5x7IKX@yhdEPq*pZCs!=XZE}?N4_)zUetHdycni`r-NM%nyI+Io@7B zdLf!@6(;1o#Z)Jd(I=C^Ni>0^PD5;&Px}0j(7cf$(z+*@>Yy5dB?_qGt(m< z@YbRSyfgQ}zj=Fk^XdWbsC(I~>t!!vFaIJv^2^>C_lg(imD|$ydgTev@$Nxh`As_W zpC@|Gjh?g0bH3s^UgWMb(wQ#riq^HwW4x?(b*D4`b*kqSdQP?HGp*3{9(HD3vb@|g*UJM;v?yMb$e@o?&fsnSKia7L*6WU$h$B2 z?R(SX{PuV0&hIkPot|4f=ULDBUb^%9@1{Gid9%%Hm!va)^saG#^k(coc`f{tH`D(4 z-RY74?5(4E^U|5#=hB_mSEoB~%=Vo2bmvX)=zX&-ojKxNzy9LQb$@w2eXqZHz36)& zo%#FYp5xsmz2&v%Z7=gjgY-B@f9*MMr#t`nfaiSFbH465uctfzJi&9ed(M~Aop(Oy zIqByqZzQHM8A1ANoDp2(G0t%q3*R{^8^L>R@e%zm;Ke@L#al(yyl41)z;82;d#V2& zBlqpR(8&lsZX%n%qR!it{c$Fl_v0R93*yF2ef}Y8EZ+~utImEa3nyHC^*h8V4}!AX zRGfEPFf7A3FuaRbHW?<>=ACiAUqPFHIz*e3?D5M%Z8mWR+I*g07fvR7g~!GaZSEY@ z<_r8du@TF8Pps^cL2XX*cIQ#r+%rU*dxMOOF>af~I0J2-=GS$+HfNk=;-q?UCXvJE zY-__1w2(J0%fh!Q=a~^Sn|v}a4kYu-6EHK(_d+Je5@BhXS%c!xZ~Mu7zl~EnWl)^! zEfJOyr*__;II{*Rm98x*7Y#emKtF z6DAx#W1}0XtIyPBM>&i$kg>n}b>WzK!D@ta(%PZp z3@~AwvyT<$)EIBOPZ>JS029VJ=U8!0@1s2fe_805`59osICA|OoS(_G=cG>z-JSs^ zjC0|!+A}$iINwy_q?j)Fl5@LSJrHiqANcC#`3*0Y<9;kTaMYz)8k>}F&5t!FnI!*4yi*%*H7+0Dj-KS^J& z4!`y6=4be=XEz(eZ#}!&7=G*7&BlE1jg0v%>2u5cZ+Om+Jm*!<@qX`p_^oF*^TTgF zyV)3i>)FjlO)~v#s_}lWd-$zqH)F$ZJ-gW$e(TxIM)GgzXVdUo&u)H(-+FelG5prE zn~m>wq@O$A^?rwH_^oF*W5aJfyV)3i>)Fl5&xYT6?*A3@@ZaILp50?(_^oF*8^dos zyV)3i>)Fl5@LSJrHvaMdueYAVcaF-wFz6k+!@TdwD~J=%H}BA$An(=sZ#|C)|CWxt z3D_Se^$uNdzH?!b_fK(n%Wp*ZehT6HKfK}Sz6lr`d3mk-##~_kW7~eZ|GmGFm+ywz z>$Z7UaS)7}PMfzKzs(uEy*MI#l4IK(#u;ey0^6vtwD0}-ZO$gnznXP;>g~nRIA0j# zjKK-tfJiasZNUQrOl;&8rWdKVj5978s6F$_{x^1U{?~O4dJl2rl~vT0dRy78i#jB$ zS8^C1r#;vIpSNdUg!UYC+Y|6cul;1+{D0n_Ubj7NT~2-slNzsJrfm(ceU_x!W5&J5 z9p&j$-N+eJ2KE|=95SiME|Xc7iu`|cBwUrHx96%7x2GA|18vT{FV!B?)9~GGdGC1S zRh5GxJ9`cEG-Oge4Zi0@{*W6vGknuO6}fRxewRBsSI6DR z0Y{wkk@F&C2HNZ}nU#Yghkv=tw)tw4!_*lU{LYD+I^#lSAhN?`E*KQ~l0j`w4vPH7 zF(VshAhN?`E*TU#F(`8TpvZOx?61IP!!QGp9VT=6pvd80m`P>Bj7};W858PL%;ccR_qc7oCTCFOW4vJ<8yPaGHfK0YW_>F1|Izt%&8!IR*)=GKUmM6q=H^s; zIKMJ02KCfrK9$43*^B)phu0V;^*2K@K0XlHVGhH*=w3aaJ;HZ6dnfKZ{?&7IC+%5j z+GDSt*O)k|t7pdN{JL<=Rd4VWpTBdG8UDSLI=jP29Oo|~#6~7~d)n#69t(!0^fWOS z=J#$do}&jDoOKgFd;DHxC#dT`++Kun272*bzb+i}_X-C0f^|#gp@GqXsls{7IIF`D zv60u(L8lk{{Kzo7Vcr_li$l_jFCV`bV_3;#jdObu#u@0v3w~WV$LvMcdxq}CbzFCy zUUd4AVi*vOepgW7!hG26VKHa|6}&HEUgHvTe4#t?08rOodf)Mny1ZNAH| z3&)?e{LzUpkIfo1kBxZTuPZikRs;R|wA-&QajXXHdD7V9_iGYI_{i|@;MwcDiR1Lk zx!)n$amIq$_YBJXtYfzDFfIJ%pcYbB#tvF|$`CE=q=n&MUP`r)I8FnU4JSlWK2 zodvOxw+_zyW`8djX7#&&HK>I+8JsOAT`)uo+i795d(4|SP7B%J`PdfzA7#E|@J#y& zr>4}pw}jc|?m_FQuN;CinJ+kgzjDjzSNN31X5Pec`W0zS8yi`&i@j2-?h)pKJMfWX zqhx;&+%v(={GO>~o;^=W4AH_?TKID}^CphdLS`%H^M9QA+XrWUpHovR^S6_+d*0*r z>#MWi*iO3X`29M~WIp^o5Sw`u$LZG#eqA`;F@O8u%pY@gdOI1r=h8tfpC7Y@{xLs_I2W2Yb#{jcv&|hQ^Qk*l^S7q#Cu@$q*So{aNCWqS zS(XS(IqFJx!wejm&T{}L%N!&>H@o@yS{FxVHTik``1zUKPQR{n^HWM3CqMRB>~EI+ z%Fhqi!BJ)ZU-L7k?6~=P(DrLi<)HjHIUMNwoT}r-c_bBwfphYF%s6*Wff>m2JN=!O zeX)EJfE2$KaaY3HgN{>oH@p?3&+oMgw@4erl+Z1WRCMA z$41_@mtHI#)Qes8g7M&Q#&MJ%`{xB`HPegmueRFr-NbQvak5|6|F#!phX(cHU4G

Y@M6+W=$!&f7`r%%03GW5Yt?oXL~W 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 literal 0 HcmV?d00001 diff --git a/ocilib/4.4.0/Linux-x86_64/include/ocilib.h b/ocilib/4.4.0/Linux-x86_64/include/ocilib.h new file mode 100755 index 0000000..06088b1 --- /dev/null +++ b/ocilib/4.4.0/Linux-x86_64/include/ocilib.h @@ -0,0 +1,19176 @@ +/* + * OCILIB - C Driver for Oracle (C Wrapper for Oracle OCI) + * + * Website: http://www.ocilib.net + * + * Copyright (c) 2007-2017 Vincent ROGIER + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* IMPORTANT NOTICE + * + * This file contains explanations about Oracle and OCI technologies. + * OCILIB is a wrapper around OCI and thus exposes OCI features. + * The OCILIB documentation intends to explain Oracle / OCI concepts + * and is naturally based on the official Oracle OCI documentation. + * + * Some parts of OCILIB documentation may include some informations + * taken and adapted from the following Oracle documentations : + * - Oracle Call Interface Programmer's Guide + * - Oracle Streams - Advanced Queuing User's Guide + */ + +#ifndef OCILIB_H_INCLUDED +#define OCILIB_H_INCLUDED + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + + +/** + * @defgroup OcilibCApi C API + * @{ + * + */ + +/* --------------------------------------------------------------------------------------------- * + * Platform configuration + * --------------------------------------------------------------------------------------------- */ + +#ifdef HAVE_CONFIG_H + #include +#endif + +/* --------------------------------------------------------------------------------------------- * + * C headers + * --------------------------------------------------------------------------------------------- */ + +#include +#include +#include +#include +#include +#include +#include +#include + +/* --------------------------------------------------------------------------------------------- * + * MS Windows platform detection + * --------------------------------------------------------------------------------------------- */ + +#ifndef _WINDOWS + #if defined(_WIN32)|| defined(WIN32) || defined(_WIN64) || defined(WIN64) || defined(_WIN32_WINNT) + #define _WINDOWS + #endif +#endif + +#ifdef _WINDOWS + #ifdef boolean + #undef boolean + #endif + #include + #ifdef boolean + #undef boolean + #endif +#endif + +/* --------------------------------------------------------------------------------------------- * + * OCILIB version information + * --------------------------------------------------------------------------------------------- */ + +#define OCILIB_MAJOR_VERSION 4 +#define OCILIB_MINOR_VERSION 4 +#define OCILIB_REVISION_VERSION 0 + +/* Import mode */ + +#define OCI_IMPORT_MODE_LINKAGE 1 +#define OCI_IMPORT_MODE_RUNTIME 2 + +#ifdef OCI_IMPORT_RUNTIME + #undef OCI_IMPORT_LINKAGE +#endif + +#ifdef OCI_IMPORT_LINKAGE + #undef OCI_IMPORT_RUNTIME +#endif + +#if !defined(OCI_IMPORT_RUNTIME) && !defined(OCI_IMPORT_LINKAGE) + #define OCI_IMPORT_LINKAGE +#endif + +#ifdef OCI_IMPORT_RUNTIME + #define OCI_IMPORT_MODE OCI_IMPORT_MODE_RUNTIME +#else + #define OCI_IMPORT_MODE OCI_IMPORT_MODE_LINKAGE +#endif + +/* Charset modes */ + +#ifdef OCI_CHARSET_UNICODE + #define OCI_CHARSET_WIDE +#endif + +#ifdef OCI_CHARSET_WIDE + #undef OCI_CHARSET_ANSI +#endif + +#ifdef OCI_CHARSET_ANSI + #undef OCI_CHARSET_ANSI +#endif + +#if !defined(OCI_CHARSET_ANSI) && !defined(OCI_CHARSET_WIDE) + #define OCI_CHARSET_ANSI +#endif + +/* Calling convention */ + +#ifndef OCI_API + #ifdef _MSC_VER + #define OCI_API __stdcall + #else + #define OCI_API + #endif +#endif + +/* Build mode */ + +#ifndef OCI_EXPORT + #define OCI_EXPORT +#endif + +/** + * @defgroup OcilibCApiSupportedCharsets Character sets + * @{ + * + * OCILIB supports both ANSI and Unicode. + * + * Oracle started a real Unicode support with Oracle8i but only for bind and fetch data. + * All SQL and PL/SQ/ statements, database objects names were still only supported in ANSI. + * + * With Oracle 9i, Oracle provides a full Unicode support. + * + * So depending on the compile time Oracle library or the runtime loaded library, Unicode support differs. + * + * OCILIB supports: + * + * - ANSI (char) + * - Unicode (wchar_t) + * - UTF8 strings + * + * OCILIB uses the character type 'otext' that is a define around char and wchar_t depending on the charset mode. + * + * @par Option OCI_CHARSET_ANSI + * + * - otext --> char + * - OTEXT(x) --> x + * + * @par Option OCI_CHARSET_WIDE + * + * - otext --> wchar_t + * - OTEXT(x) --> L ## x + * + * @par Unicode and ISO C + * + * Well, ISO C: + * - doesn't know anything about Unicode. + * - makes wide characters support tricky because wide character size is not defined and is freely adaptable by implementations. + * + * OCILIB uses char/wchar_t strings for both public interface and internal storage. + * + * Unicode builds of OCILIB initialize OCI in UTF16 Unicode mode. + * Oracle implements this mode with a 2 bytes (fixed length) UTF16 encoding. + * + * @warning + * When using Unicode builds of OCILIB, make sure that the target + * Database charset is also using an Unicode charset or is a superset of UTF16. + * If not, strings may be converted with substitution characters by the Oracle client ! + * + * So, on systems implementing wchar_t as 2 bytes based UTF16 (e.g. Ms Windows), + * strings are directly passed to Oracle and taken back from it. + * + * On other systems (most of the Unix systems) that use UTF32 as encoding, (4 bytes based wchar_t), OCILIB uses: + * - temporary buffers for statements and object names + * - buffer expansion from UTF16 to UTF32 for fetch and bind string: + * - allocation based on sizeof(wchar_t) + * - data filling based on sizeof(short) -> (UTF16 2 bytes) + * - data expansion to sizeof(wchar_t). + * + * Buffer expansion is done in place and has the advantage of not requiring extra buffer. + * That reduces the cost of the Unicode/ISO C handling overhead on Unix systems. + * + * @par UTF8 strings + * + * OCILIB fully supports UTF8 strings : + * - Within OCI_CHARSET_ANSI builds + * - NLS_LANG environment variable must be set to any valid UTF8 Oracle charset string + * + * @par Charset mapping macros + * + * OCILIB main header file provides macro around most common string functions of + * the C standard library. + * + * these macros are based on the model: ostr[libc function name]() + * + * xxx is the standard C library string function name without the character type prefix (str/wcs). + * + * List of available macros: + * - ostrdup + * - ostrcpy + * - ostrncpy + * - ostrcat + * - ostrncat + * - ostrlen + * - ostrcmp + * - ostrcasecmp + * - osprintf + * - ostol + * +**/ + +#if defined(__cplusplus) && defined(_MSC_VER) && (_MSC_VER < 1300) +extern "C++" { +#endif + +#include + +#if defined(__cplusplus) && defined(_MSC_VER) && (_MSC_VER < 1300) +} +#endif + +/* Charset macros */ + +#define OCI_CHAR_ANSI 1 +#define OCI_CHAR_WIDE 2 + +#ifdef OCI_CHARSET_ANSI + typedef char otext; + #define OTEXT(x) x + #define OCI_CHAR_TEXT OCI_CHAR_ANSI +#else + typedef wchar_t otext; + #define OTEXT(x) L ## x + #define OCI_CHAR_TEXT OCI_CHAR_WIDE +#endif + +/* + For ISO conformance, strdup/wcsdup/stricmp/strncasecmp are not used. + All wide char routines are part of the 1995 Normative Addendum 1 to the ISO C90 standard. + OCILIB also needs an ANSI equivalent to swprintf => ocisprintf + Thus OCILIB exports the following helper functions + +*/ + +OCI_EXPORT int ocisprintf +( + char *str, + int size, + const char *format, + ... +); + +OCI_EXPORT char * ocistrdup +( + const char * src +); + +OCI_EXPORT int ocistrcasecmp +( + const char *str1, + const char *str2 +); + +OCI_EXPORT wchar_t * ociwcsdup +( + const wchar_t * src +); + +OCI_EXPORT int ociwcscasecmp +( + const wchar_t *str1, + const wchar_t *str2 +); + +/* special defines for Microsoft C runtime that is not C ISO compliant */ + +#ifdef _WINDOWS + + #define vsnprintf _vsnprintf + #define swprintf _snwprintf + +#endif + +/* helpers mapping macros */ + +#ifdef OCI_CHARSET_ANSI + #define ostrdup ocistrdup + #define ostrcpy strcpy + #define ostrncpy strncpy + #define ostrcat strcat + #define ostrncat strncat + #define ostrlen strlen + #define ostrcmp strcmp + #define ostrcasecmp ocistrcasecmp + #define osprintf ocisprintf + #define ostrtol strtol + #define osscanf sscanf + #define otoupper toupper + #define oisdigit isdigit +#else + #define ostrdup ociwcsdup + #define ostrcpy wcscpy + #define ostrncpy wcsncpy + #define ostrcat wcscat + #define ostrncat wcsncat + #define ostrlen wcslen + #define ostrcmp wcscmp + #define ostrcasecmp ociwcscasecmp + #define osprintf swprintf + #define ostrtol wcstol + #define osscanf swscanf + #define otoupper towupper + #define oisdigit iswdigit + +#endif + +/* string size macros */ + +#define otextsize(s) (ostrlen(s) * sizeof(otext)) + +/** + * @} + */ + +/** + * @defgroup OcilibCApiDatatypes Data types + * @{ + * + * OCILIB implements: + * + * - Oracle Scalar data types through scalar C data types + * - Oracle opaque/complex objects though opaque library handles + * - Library objects for manipulating the database: connections, transactions, statements... + * + * @par Supported Oracle data types + * + * - All Database types are supported excluding REFs. + * + * Here is a summary of the supported data types: + * + * - Scalar types CHAR/NCHAR, VARCHAR2/NVARCHAR2, NUMBER, FLOAT, REAL, RAW, ... + * - Binary types: RAW, LONG RAW, VARRAW, .. + * - Larges Objects (Lobs and Files) : BLOB, CLOB, NCLOB, BFILE + * - LONG types: LONG, VAR LONG + * - Date, Timestamps et Intervals: DATE, TIMESTAMP, INTERVAL + * - PL/SQL types: Ref cursors, PL/SQL Tables + * - Named Types (by value): Built-in system objects and User defined objects + * - VARRAYs and Nested Tables + * - ROWIDs + * + * @par OCILIB library objects + * + * The public OCILIB library interface implements encapsulation for + * representing database objects (such as connections, statements ...) through + * opaque structures (pointers to structures whose definition is kept private) + * + * Instead of directly manipulating the structures and their members, the library + * has functions to access the underlying members. + * + * It's designed to make the user code as more independent as possible of + * the library details. + * +**/ + +/** + * @typedef OCI_Pool + * + * @brief + * Pool object (session or connection) + * + * A pool is a set of pooled objects + * + */ + +typedef struct OCI_Pool OCI_Pool; + +/** + * @typedef OCI_Connection + * + * @brief + * Oracle physical connection. + * + * It holds all information about a connection such as error handling, associated statements, ... + * Error handling and transactions are embedded within a connection object. + * + * @warning + * Multi threaded applications that use multiple connections should use one connection per thread + * as all statements associated with a connection share the same context. + * + */ + +typedef struct OCI_Connection OCI_Connection; + +/** + * @typedef OCI_Statement + * + * @brief + * Oracle SQL or PL/SQL statement. + * + * A Statement object allows users to prepare, execute SQL orders or PL/SQL blocks + * + */ + +typedef struct OCI_Statement OCI_Statement; + +/** + * @typedef OCI_Bind + * + * @brief + * Internal bind representation. + * + * A bind object is an object that holds all information about an Oracle statement binding operation + * + */ + +typedef struct OCI_Bind OCI_Bind; + +/** + * @typedef OCI_Resultset + * + * @brief + * Collection of output columns from a select statement. + * + * A resultset object is the result of 'select' SQL Statement. + * + * It's a set of data (ordered in columns) that can be fetched row by row + * to get data returned by the SQL statement + * + */ + +typedef struct OCI_Resultset OCI_Resultset; + +/** + * @typedef OCI_Column + * + * @brief + * Oracle SQL Column and Type member representation. + * + * A column object represents an output column from a select statement + * + */ + +typedef struct OCI_Column OCI_Column; + +/** + * @typedef OCI_Lob + * + * @brief + * Oracle Internal Large objects: + * + * The following internal Larges Objects are supported: + * + * - BLOBs : Binary large objects + * - CLOBs / NCLOBs : Character large objects + * + * LOBs were introduced by OCI8 to replace Long data types. + * + * It's designed to store really larges objects (buffer, files) inside the database + * + * Oracle encourages programmers to use those objects instead of LONG, LONG RAW, ... + * + * OCILIB supports both LOBs and LONGs + * + */ + +typedef struct OCI_Lob OCI_Lob; + +/** + * @typedef OCI_File + * + * @brief + * Oracle External Large objects: + * + * The following external Larges Objects are supported: + * + * - BFILEs : Binary files + * - CFILEs : Character files + * + * FILEs were introduced by OCI8 in order to store references to files located outside the database. + * + * @warning + * Only Read-only access is allowed on BFILEs + * + * Two way to use FILEs : + * + * - within statement context (query, binding) + * - without statement context (server files reading) through OCI_File properties functions + * + */ + +typedef struct OCI_File OCI_File; + +/** + * @typedef OCI_Transaction + * + * @brief + * Oracle Transaction. + * + * A transaction can be: + * + * - Local: it's implicitly created by OCILIB + * - Global: it's explicitly created by the program + * + */ + +typedef struct OCI_Transaction OCI_Transaction; + +/** + * @typedef OCI_Long + * + * @brief Oracle Long data type. + * + * The following long Objects are supported: + * + * - LONG RAW : Binary long objects + * - LONG : Character long objects + * + * Those types were used in older versions of Oracle (before Oracle8i) to store + * large chunks of data in the database. + * + * It's now depreciated by Oracle that recommends using LOBs + * + * Many databases and applications are still designed to use LONGs that's why + * OCILIB supports Long Objects and piecewise operations + * + */ + +typedef struct OCI_Long OCI_Long; + +/** +* @typedef OCI_Number +* +* @brief +* Oracle NUMBER representation. +* +*/ +typedef struct OCI_Number OCI_Number; + +/** + * @typedef OCI_Date + * + * @brief + * Oracle internal date representation. + * + */ + +typedef struct OCI_Date OCI_Date; + +/** + * @typedef OCI_Timestamp + * + * @brief + * Oracle internal timestamp representation. + * + */ + +typedef struct OCI_Timestamp OCI_Timestamp; + +/** + * @typedef OCI_Interval + * + * @brief + * Oracle internal interval representation. + * + */ + +typedef struct OCI_Interval OCI_Interval; + +/** + * @typedef OCI_Object + * + * @brief + * Oracle Named types representation. + * + */ + +typedef struct OCI_Object OCI_Object; + +/** + * @typedef OCI_Coll + * + * @brief + * Oracle Collections (VARRAYs and Nested Tables) representation. + * + */ + +typedef struct OCI_Coll OCI_Coll; + +/** + * @typedef OCI_Elem + * + * @brief + * Oracle Collection item representation. + * + */ + +typedef struct OCI_Elem OCI_Elem; + +/** + * @typedef OCI_Iter + * + * @brief + * Oracle Collection iterator representation. + * + */ +typedef struct OCI_Iter OCI_Iter; + +/** + * @typedef OCI_TypeInfo + * + * @brief + * Type info metadata handle. + * + */ + +/** + * @typedef OCI_Ref + * + * @brief + * Oracle REF type representation. + * + */ + +typedef struct OCI_Ref OCI_Ref; + +/** + * @typedef OCI_TypeInfo + * + * @brief + * Type info meta data handle. + * + */ + +typedef struct OCI_TypeInfo OCI_TypeInfo; + +/** + * @typedef OCI_HashTable + * + * @brief + * OCILIB implementation of hash tables. + * + */ + +typedef struct OCI_HashTable OCI_HashTable; + +/** + * @typedef OCI_Error + * + * @brief + * Encapsulates an Oracle or OCILIB exception. + * + * The error object is used to raise internal or oracle errors. + * When an error occurs, if the application has provided an error handler, an + * error object is constructed and passed to the handler + * + */ + +typedef struct OCI_Error OCI_Error; + +/** + * @typedef OCI_Mutex + * + * @brief + * OCILIB encapsulation of OCI mutexes. + * + */ + +typedef struct OCI_Mutex OCI_Mutex; + +/** + * @typedef OCI_Thread + * + * @brief + * OCILIB encapsulation of OCI Threads. + * + */ + +typedef struct OCI_Thread OCI_Thread; + +/** + * @typedef OCI_DirPath + * + * @brief + * OCILIB encapsulation of OCI Direct Path handle. + * + */ + +typedef struct OCI_DirPath OCI_DirPath; + +/** + * @typedef OCI_Subscription + * + * @brief + * OCILIB encapsulation of Oracle DCN notification + * + */ + +typedef struct OCI_Subscription OCI_Subscription; + +/** + * @typedef OCI_Event + * + * @brief + * OCILIB encapsulation of Oracle DCN event + * + */ + +typedef struct OCI_Event OCI_Event; + +/** + * @typedef OCI_Msg + * + * @brief + * OCILIB encapsulation of A/Q message + * + */ + +typedef struct OCI_Msg OCI_Msg; + +/** + * @typedef OCI_Agent + * + * @brief + * OCILIB encapsulation of A/Q Agent + * + */ + +typedef struct OCI_Agent OCI_Agent; + +/** + * @typedef OCI_Dequeue + * + * @brief + * OCILIB encapsulation of A/Q dequeuing operations + * + */ + +typedef struct OCI_Dequeue OCI_Dequeue; + +/** + * @typedef OCI_Enqueue + * + * @brief + * OCILIB encapsulation of A/Q enqueuing operations + * + */ + +typedef struct OCI_Enqueue OCI_Enqueue; + +/** + * @var POCI_ERROR + * + * @brief + * Error procedure prototype + * + * @param err - Error handle + * + */ + +typedef void (*POCI_ERROR) +( + OCI_Error *err +); + +/** + * @var POCI_THREAD + * + * @brief + * Thread procedure prototype + * + * @param thread - Thread handle + * @param arg - Pointer passed to OCI_ThreadRun() + * + */ + +typedef void (*POCI_THREAD) +( + OCI_Thread *thread, + void *arg +); + +/** + * @var POCI_THREADKEYDEST + * + * @brief + * Thread key destructor prototype. + * + * @param data - Thread Key current pointer value + * + */ + +typedef void (*POCI_THREADKEYDEST) +( + void *data +); + +/** + * @var POCI_NOTIFY + * + * @brief + * Database Change Notification User callback prototype. + * + * @param event - Event handle + * + */ + +typedef void (*POCI_NOTIFY) +( + OCI_Event *event +); + +/** + * @var POCI_NOTIFY_AQ + * + * @brief + * AQ notification callback prototype. + * + * @param dequeue - dequeue handle + * + */ + +typedef void (*POCI_NOTIFY_AQ) +( + OCI_Dequeue *dequeue +); + +/** + * @var POCI_TAF_HANDLER + * + * @brief + * Failover Notification User callback prototype. + * + * @param con - Connection handle related to the event + * @param type - Event type + * @param event - Event code + * + * @note + * Possible values for parameter 'type' : + * - OCI_FOT_NONE + * - OCI_FOT_SESSION + * - OCI_FOT_SELECT + * + * @note + * Possible values for parameter 'event' : + * - OCI_FOE_END + * - OCI_FOE_ABORT + * - OCI_FOE_REAUTH + * - OCI_FOE_BEGIN + * - OCI_FOE_ERROR + * + * @return + * User callback should return one of the following value : + * - OCI_FOC_OK + * - OCI_FOC_RETRY + * + */ + +typedef unsigned int (*POCI_TAF_HANDLER) +( + OCI_Connection *con, + unsigned int type, + unsigned int event +); + +/** + * @var POCI_HA_HANDLER + * + * @brief + * HA (High Availability) events Notification User callback prototype. + * + * @param con - Connection handle related to the event + * @param source - source of the event + * @param event - type of the event + * @param time - Timestamp of the event + * + * @note + * Currently, Oracle only send HA down events + * + * @note + * Possible values for parameter 'source' : + * - OCI_HES_INSTANCE + * - OCI_HES_DATABASE + * - OCI_HES_NODE + * - OCI_HES_SERVICE + * - OCI_HES_SERVICE_MEMBER + * - OCI_HES_ASM_INSTANCE + * - OCI_HES_PRECONNECT + * + * @note + * Possible values for parameter 'event' : + * - OCI_HET_DOWN : HA event type down + * - OCI_HET_UP : HA event type up + * + */ + +typedef void (*POCI_HA_HANDLER) +( + OCI_Connection *con, + unsigned int source, + unsigned int event, + OCI_Timestamp *time +); + +/* public structures */ + +/** + * @typedef OCI_XID + * + * @brief + * Global transaction identifier + * + */ + +typedef struct OCI_XID { + long formatID; + long gtrid_length; + long bqual_length; + char data[128]; +} OCI_XID; + +/** + * @typedef OCI_Variant + * + * @brief + * Internal Variant type based on union C type. + * + * @note + * Helpful for generic buffer, it reduces the amount of casts + * + */ + +typedef union OCI_Variant { + /* integers */ + int num; + + /* raw data */ + unsigned char *p_bytes; + + /* pointer to c natives types */ + void *p_void; + int *p_int; + float *p_float; + double *p_double; + otext *p_text; + + /* ocilib object types */ + OCI_Date *p_date; + OCI_Interval *p_interval; + OCI_Timestamp *p_timestamp; + OCI_Long *p_long; + OCI_Lob *p_lob; + OCI_File *p_file; + OCI_Statement *p_stmt; + OCI_Column *p_col; + OCI_Object *p_obj; + OCI_Coll *p_coll; + OCI_Iter *p_iter; + OCI_Elem *p_elem; +} OCI_Variant; + +/** +* @typedef OCI_HashValue +* +* @brief +* Hash table entry value +* +* OCILIB implementation of hash tables uses chaining method for dealing with collisions +* +*/ + +typedef struct OCI_HashValue { + OCI_Variant value; + struct OCI_HashValue *next; +} OCI_HashValue; + +/** + * @typedef OCI_HashEntry + * + * @brief + * Hash table entry + * + */ + +typedef struct OCI_HashEntry { + otext *key; + struct OCI_HashValue *values; + struct OCI_HashEntry *next; +} OCI_HashEntry; + +/** + * @typedef big_int + * + * @brief + * big_int is a C scalar integer (32 or 64 bits) depending on compiler support for 64bits integers. + * big_uint is an unsigned big_int + * + */ + +/* check for long long support */ + +#if defined(_LONGLONG) || defined(LONG_LONG_MAX) || defined(LLONG_MAX) || defined(__LONG_LONG_MAX__) + +/* C99 long long supported */ + +typedef long long big_int; +typedef unsigned long long big_uint; + + #define OCI_BIG_UINT_ENABLED + +#elif defined(_WINDOWS) + +/* Microsoft extension supported */ + +typedef __int64 big_int; +typedef unsigned __int64 big_uint; + + #define OCI_BIG_UINT_ENABLED + +#else + +typedef int big_int; +typedef unsigned int big_uint; + +#endif + +/** + * @} + */ + +/* boolean values */ + +#ifndef TRUE + #define TRUE 1 + #define FALSE 0 +#endif + +#ifndef boolean + #define boolean int +#endif + +/* oracle OCI key versions*/ + +#define OCI_8_0 800 +#define OCI_8_1 810 +#define OCI_9_0 900 +#define OCI_9_2 920 +#define OCI_10_1 1010 +#define OCI_10_2 1020 +#define OCI_11_1 1110 +#define OCI_11_2 1120 +#define OCI_12_1 1210 +#define OCI_12_2 1220 + +/* versions extract macros */ + +#define OCI_VER_MAJ(v) (unsigned int) (v/100) +#define OCI_VER_MIN(v) (unsigned int) ((v/10) - ((v/100)*10)) +#define OCI_VER_REV(v) (unsigned int) ((v) - ((v/10)*10)) + +/* OCILIB Error types */ + +#define OCI_ERR_ORACLE 1 +#define OCI_ERR_OCILIB 2 +#define OCI_ERR_WARNING 3 + +/* OCILIB Error codes */ + +#define OCI_ERR_NONE 0 +#define OCI_ERR_NOT_INITIALIZED 1 +#define OCI_ERR_LOADING_SHARED_LIB 2 +#define OCI_ERR_LOADING_SYMBOLS 3 +#define OCI_ERR_MULTITHREADED 4 +#define OCI_ERR_MEMORY 5 +#define OCI_ERR_NOT_AVAILABLE 6 +#define OCI_ERR_NULL_POINTER 7 +#define OCI_ERR_DATATYPE_NOT_SUPPORTED 8 +#define OCI_ERR_PARSE_TOKEN 9 +#define OCI_ERR_MAP_ARGUMENT 10 +#define OCI_ERR_OUT_OF_BOUNDS 11 +#define OCI_ERR_UNFREED_DATA 12 +#define OCI_ERR_MAX_BIND 13 +#define OCI_ERR_ATTR_NOT_FOUND 14 +#define OCI_ERR_MIN_VALUE 15 +#define OCI_ERR_NOT_COMPATIBLE 16 +#define OCI_ERR_STMT_STATE 17 +#define OCI_ERR_STMT_NOT_SCROLLABLE 18 +#define OCI_ERR_BIND_ALREADY_USED 19 +#define OCI_ERR_BIND_ARRAY_SIZE 20 +#define OCI_ERR_COLUMN_NOT_FOUND 21 +#define OCI_ERR_DIRPATH_STATE 22 +#define OCI_ERR_CREATE_OCI_ENVIRONMENT 23 +#define OCI_ERR_REBIND_BAD_DATATYPE 24 +#define OCI_ERR_TYPEINFO_DATATYPE 25 +#define OCI_ERR_ITEM_NOT_FOUND 26 +#define OCI_ERR_ARG_INVALID_VALUE 27 +#define OCI_ERR_XA_ENV_FROM_STRING 28 +#define OCI_ERR_XA_CONN_FROM_STRING 29 + +#define OCI_ERR_COUNT 30 + + +/* allocated bytes types */ + +#define OCI_MEM_ORACLE 1 +#define OCI_MEM_OCILIB 2 +#define OCI_MEM_ALL OCI_MEM_ORACLE | OCI_MEM_OCILIB + +/* binding */ + +#define OCI_BIND_BY_POS 0 +#define OCI_BIND_BY_NAME 1 +#define OCI_BIND_SIZE 6 +#define OCI_BIND_MAX 65535 + +/* fetching */ + +#define OCI_FETCH_SIZE 20 +#define OCI_PREFETCH_SIZE 20 +#define OCI_LONG_EXPLICIT 1 +#define OCI_LONG_IMPLICIT 2 + +/* unknown value */ + +#define OCI_UNKNOWN 0 + +/* C Data Type mapping */ + +#define OCI_CDT_NUMERIC 1 +#define OCI_CDT_DATETIME 3 +#define OCI_CDT_TEXT 4 +#define OCI_CDT_LONG 5 +#define OCI_CDT_CURSOR 6 +#define OCI_CDT_LOB 7 +#define OCI_CDT_FILE 8 +#define OCI_CDT_TIMESTAMP 9 +#define OCI_CDT_INTERVAL 10 +#define OCI_CDT_RAW 11 +#define OCI_CDT_OBJECT 12 +#define OCI_CDT_COLLECTION 13 +#define OCI_CDT_REF 14 +#define OCI_CDT_BOOLEAN 15 + +/* Data Type codes for OCI_ImmediateXXX() calls */ + +#define OCI_ARG_SHORT 1 +#define OCI_ARG_USHORT 2 +#define OCI_ARG_INT 3 +#define OCI_ARG_UINT 4 +#define OCI_ARG_BIGINT 5 +#define OCI_ARG_BIGUINT 6 +#define OCI_ARG_DOUBLE 7 +#define OCI_ARG_DATETIME 8 +#define OCI_ARG_TEXT 9 +#define OCI_ARG_LOB 10 +#define OCI_ARG_FILE 11 +#define OCI_ARG_TIMESTAMP 12 +#define OCI_ARG_INTERVAL 13 +#define OCI_ARG_RAW 14 +#define OCI_ARG_OBJECT 15 +#define OCI_ARG_COLLECTION 16 +#define OCI_ARG_REF 17 +#define OCI_ARG_FLOAT 18 +#define OCI_ARG_NUMBER 19 + +/* statement types */ + +#define OCI_CST_SELECT 1 +#define OCI_CST_UPDATE 2 +#define OCI_CST_DELETE 3 +#define OCI_CST_INSERT 4 +#define OCI_CST_CREATE 5 +#define OCI_CST_DROP 6 +#define OCI_CST_ALTER 7 +#define OCI_CST_BEGIN 8 +#define OCI_CST_DECLARE 9 +#define OCI_CST_CALL 10 + +/* environment modes */ + +#define OCI_ENV_DEFAULT 0 +#define OCI_ENV_THREADED 1 +#define OCI_ENV_CONTEXT 2 +#define OCI_ENV_EVENTS 4 + +/* sessions modes */ + +#define OCI_SESSION_DEFAULT 0x00000000 /* any version */ +#define OCI_SESSION_SYSDBA 0x00000002 /* any version */ +#define OCI_SESSION_SYSOPER 0x00000004 /* any version */ +#define OCI_SESSION_SYSASM 0x00008000 /* From 11gR1 */ +#define OCI_SESSION_SYSBKP 0x00020000 /* From 12cR1 */ +#define OCI_SESSION_SYSDGD 0x00040000 /* From 12cR1 */ +#define OCI_SESSION_SYSKMT 0x00080000 /* From 12cR1 */ +#define OCI_SESSION_SYSRAC 0x00100000 /* From 12cR2 */ + +#define OCI_SESSION_XA 0x00000001 +#define OCI_SESSION_PRELIM_AUTH 0x00000008 + +/* change notification types */ + +#define OCI_CNT_OBJECTS 1 +#define OCI_CNT_ROWS 2 +#define OCI_CNT_DATABASES 4 +#define OCI_CNT_ALL OCI_CNT_OBJECTS | OCI_CNT_ROWS | OCI_CNT_DATABASES + +/* event notification types */ + +#define OCI_ENT_STARTUP 1 +#define OCI_ENT_SHUTDOWN 2 +#define OCI_ENT_SHUTDOWN_ANY 3 +#define OCI_ENT_DROP_DATABASE 4 +#define OCI_ENT_DEREGISTER 5 +#define OCI_ENT_OBJECT_CHANGED 6 + +/* event object notification types */ + +#define OCI_ONT_INSERT 0x2 +#define OCI_ONT_UPDATE 0x4 +#define OCI_ONT_DELETE 0x8 +#define OCI_ONT_ALTER 0x10 +#define OCI_ONT_DROP 0x20 +#define OCI_ONT_GENERIC 0x40 + +/* database startup modes */ + +#define OCI_DB_SPM_START 1 +#define OCI_DB_SPM_MOUNT 2 +#define OCI_DB_SPM_OPEN 4 +#define OCI_DB_SPM_FULL OCI_DB_SPM_START | OCI_DB_SPM_MOUNT | OCI_DB_SPM_OPEN + +/* database startup flags */ + +#define OCI_DB_SPF_DEFAULT 0 +#define OCI_DB_SPF_FORCE 1 +#define OCI_DB_SPF_RESTRICT 2 + +/* database shutdown modes */ + +#define OCI_DB_SDM_SHUTDOWN 1 +#define OCI_DB_SDM_CLOSE 2 +#define OCI_DB_SDM_DISMOUNT 4 +#define OCI_DB_SDM_FULL OCI_DB_SDM_SHUTDOWN | OCI_DB_SDM_CLOSE | OCI_DB_SDM_DISMOUNT + +/* database shutdown flags */ + +#define OCI_DB_SDF_DEFAULT 0 +#define OCI_DB_SDF_TRANS 1 +#define OCI_DB_SDF_TRANS_LOCAL 2 +#define OCI_DB_SDF_IMMEDIATE 3 +#define OCI_DB_SDF_ABORT 4 + +/* charset form types */ + +#define OCI_CSF_NONE 0 +#define OCI_CSF_DEFAULT 1 +#define OCI_CSF_NATIONAL 2 + +/* statement fetch mode */ + +#define OCI_SFM_DEFAULT 0 +#define OCI_SFM_SCROLLABLE 0x08 + +/* statement fetch direction */ + +#define OCI_SFD_ABSOLUTE 0x20 +#define OCI_SFD_RELATIVE 0x40 + +/* bind allocation mode */ + +#define OCI_BAM_EXTERNAL 1 +#define OCI_BAM_INTERNAL 2 + +/* bind direction mode */ + +#define OCI_BDM_IN 1 +#define OCI_BDM_OUT 2 +#define OCI_BDM_IN_OUT (OCI_BDM_IN | OCI_BDM_OUT) + +/* Column property flags */ + +#define OCI_CPF_NONE 0 +#define OCI_CPF_IS_IDENTITY 1 +#define OCI_CPF_IS_GEN_ALWAYS 2 +#define OCI_CPF_IS_GEN_BY_DEFAULT_ON_NULL 4 + +/* Column collation IDs */ + +#define OCI_CCI_NONE 0x00000000 +#define OCI_CCI_NLS_COMP 0x00003FFE +#define OCI_CCI_NLS_SORT 0x00003FFD +#define OCI_CCI_NLS_SORT_CI 0x00003FFC +#define OCI_CCI_NLS_SORT_AI 0x00003FFB +#define OCI_CCI_NLS_SORT_CS 0x00003FFA +#define OCI_CCI_NLS_SORT_VAR1 0x00003FF9 +#define OCI_CCI_NLS_SORT_VAR1_CI 0x00003FF8 +#define OCI_CCI_NLS_SORT_VAR1_AI 0x00003FF7 +#define OCI_CCI_NLS_SORT_VAR1_CS 0x00003FF6 +#define OCI_CCI_BINARY 0x00003FFF +#define OCI_CCI_BINARY_CI 0x00023FFF +#define OCI_CCI_BINARY_AI 0x00013FFF + + +/* Integer sign flag */ + +#define OCI_NUM_UNSIGNED 2 + +/* External Integer types */ + +#define OCI_NUM_SHORT 4 +#define OCI_NUM_INT 8 +#define OCI_NUM_BIGINT 16 +#define OCI_NUM_FLOAT 32 +#define OCI_NUM_DOUBLE 64 +#define OCI_NUM_NUMBER 128 + +#define OCI_NUM_USHORT (OCI_NUM_SHORT | OCI_NUM_UNSIGNED) +#define OCI_NUM_UINT (OCI_NUM_INT | OCI_NUM_UNSIGNED) +#define OCI_NUM_BIGUINT (OCI_NUM_BIGINT | OCI_NUM_UNSIGNED) + +/* timestamp types */ + +#define OCI_TIMESTAMP 1 +#define OCI_TIMESTAMP_TZ 2 +#define OCI_TIMESTAMP_LTZ 3 + +/* interval types */ + +#define OCI_INTERVAL_YM 1 +#define OCI_INTERVAL_DS 2 + +/* long types */ + +#define OCI_BLONG 1 +#define OCI_CLONG 2 + +/* lob types */ + +#define OCI_BLOB 1 +#define OCI_CLOB 2 +#define OCI_NCLOB 3 + +/* lob opening mode */ + +#define OCI_LOB_READONLY 1 +#define OCI_LOB_READWRITE 2 + +/* file types */ + +#define OCI_BFILE 1 +#define OCI_CFILE 2 + +/* lob browsing mode */ + +#define OCI_SEEK_SET 1 +#define OCI_SEEK_END 2 +#define OCI_SEEK_CUR 3 + +/* type info types */ + +#define OCI_TIF_TABLE 1 +#define OCI_TIF_VIEW 2 +#define OCI_TIF_TYPE 3 + +/* object type */ + +#define OCI_OBJ_PERSISTENT 1 +#define OCI_OBJ_TRANSIENT 2 +#define OCI_OBJ_VALUE 3 + +/* collection types */ + +#define OCI_COLL_VARRAY 1 +#define OCI_COLL_NESTED_TABLE 2 +#define OCI_COLL_INDEXED_TABLE 3 + +/* pool types */ + +#define OCI_POOL_CONNECTION 1 +#define OCI_POOL_SESSION 2 + +/* AQ message state */ + +#define OCI_AMS_READY 1 +#define OCI_AMS_WAITING 2 +#define OCI_AMS_PROCESSED 3 +#define OCI_AMS_EXPIRED 4 + +/* AQ sequence deviation */ + +#define OCI_ASD_BEFORE 2 +#define OCI_ASD_TOP 3 + +/* AQ message visibility */ + +#define OCI_AMV_IMMEDIATE 1 +#define OCI_AMV_ON_COMMIT 2 + +/* AQ dequeue mode */ + +#define OCI_ADM_BROWSE 1 +#define OCI_ADM_LOCKED 2 +#define OCI_ADM_REMOVE 3 +#define OCI_ADM_REMOVE_NODATA 4 + +/* AQ dequeue navigation */ + +#define OCI_ADN_FIRST_MSG 1 +#define OCI_ADN_NEXT_TRANSACTION 2 +#define OCI_ADN_NEXT_MSG 3 + +/* AQ queue table purge mode */ + +#define OCI_APM_BUFFERED 1 +#define OCI_APM_PERSISTENT 2 +#define OCI_APM_ALL (OCI_APM_BUFFERED | OCI_APM_PERSISTENT) + +/* AQ queue table grouping mode */ + +#define OCI_AGM_NONE 0 +#define OCI_AGM_TRANSACTIONNAL 1 + +/* AQ queue table type */ + +#define OCI_AQT_NORMAL 0 +#define OCI_AQT_EXCEPTION 1 +#define OCI_AQT_NON_PERSISTENT 2 + +/* direct path processing return status */ + +#define OCI_DPR_COMPLETE 1 +#define OCI_DPR_ERROR 2 +#define OCI_DPR_FULL 3 +#define OCI_DPR_PARTIAL 4 +#define OCI_DPR_EMPTY 5 + +/* direct path conversion modes */ + +#define OCI_DCM_DEFAULT 1 +#define OCI_DCM_FORCE 2 + +/* trace size constants */ + +#define OCI_SIZE_TRACE_ID 64 +#define OCI_SIZE_TRACE_MODULE 48 +#define OCI_SIZE_TRACE_ACTION 32 +#define OCI_SIZE_TRACE_INFO 64 + +/* trace types */ + +#define OCI_TRC_IDENTITY 1 +#define OCI_TRC_MODULE 2 +#define OCI_TRC_ACTION 3 +#define OCI_TRC_DETAIL 4 + +/* HA event type */ + +#define OCI_HET_DOWN 0 +#define OCI_HET_UP 1 + +/* HA event source */ +#define OCI_HES_INSTANCE 0 +#define OCI_HES_DATABASE 1 +#define OCI_HES_NODE 2 +#define OCI_HES_SERVICE 3 +#define OCI_HES_SERVICE_MEMBER 4 +#define OCI_HES_ASM_INSTANCE 5 +#define OCI_HES_PRECONNECT 6 + +/* Fail over types */ + +#define OCI_FOT_NONE 1 +#define OCI_FOT_SESSION 2 +#define OCI_FOT_SELECT 4 + +/* fail over notifications */ + +#define OCI_FOE_END 1 +#define OCI_FOE_ABORT 2 +#define OCI_FOE_REAUTH 4 +#define OCI_FOE_BEGIN 8 +#define OCI_FOE_ERROR 16 + +/* fail over callback return code */ + +#define OCI_FOC_OK 0 +#define OCI_FOC_RETRY 25410 + +/* hash tables support */ + +#define OCI_HASH_STRING 1 +#define OCI_HASH_INTEGER 2 +#define OCI_HASH_POINTER 3 + +/* transaction types */ + +#define OCI_TRS_NEW 0x00000001 +#define OCI_TRS_READONLY 0x00000100 +#define OCI_TRS_READWRITE 0x00000200 +#define OCI_TRS_SERIALIZABLE 0x00000400 +#define OCI_TRS_LOOSE 0x00010000 +#define OCI_TRS_TIGHT 0x00020000 + +/* format types */ + +#define OCI_FMT_DATE 1 +#define OCI_FMT_TIMESTAMP 2 +#define OCI_FMT_NUMERIC 3 +#define OCI_FMT_BINARY_DOUBLE 4 +#define OCI_FMT_BINARY_FLOAT 5 + +/* sql function codes */ + +#define OCI_SFC_CREATE_TABLE 1 +#define OCI_SFC_SET_ROLE 2 +#define OCI_SFC_INSERT 3 +#define OCI_SFC_SELECT 4 +#define OCI_SFC_UPDATE 5 +#define OCI_SFC_DROP_ROLE 6 +#define OCI_SFC_DROP_VIEW 7 +#define OCI_SFC_DROP_TABLE 8 +#define OCI_SFC_DELETE 9 +#define OCI_SFC_CREATE_VIEW 10 +#define OCI_SFC_DROP_USER 11 +#define OCI_SFC_CREATE_ROLE 12 +#define OCI_SFC_CREATE_SEQUENCE 13 +#define OCI_SFC_ALTER_SEQUENCE 14 + +#define OCI_SFC_DROP_SEQUENCE 16 +#define OCI_SFC_CREATE_SCHEMA 17 +#define OCI_SFC_CREATE_CLUSTER 18 +#define OCI_SFC_CREATE_USER 19 +#define OCI_SFC_CREATE_INDEX 20 +#define OCI_SFC_DROP_INDEX 21 +#define OCI_SFC_DROP_CLUSTER 22 +#define OCI_SFC_VALIDATE_INDEX 23 +#define OCI_SFC_CREATE_PROCEDURE 24 +#define OCI_SFC_ALTER_PROCEDURE 25 +#define OCI_SFC_ALTER_TABLE 26 +#define OCI_SFC_EXPLAIN 27 +#define OCI_SFC_GRANT 28 +#define OCI_SFC_REVOKE 29 +#define OCI_SFC_CREATE_SYNONYM 30 +#define OCI_SFC_DROP_SYNONYM 31 +#define OCI_SFC_ALTER_SYSTEM_SWITCHLOG 32 +#define OCI_SFC_SET_TRANSACTION 33 +#define OCI_SFC_PLSQL_EXECUTE 34 +#define OCI_SFC_LOCK 35 +#define OCI_SFC_NOOP 36 +#define OCI_SFC_RENAME 37 +#define OCI_SFC_COMMENT 38 +#define OCI_SFC_AUDIT 39 +#define OCI_SFC_NO_AUDIT 40 +#define OCI_SFC_ALTER_INDEX 41 +#define OCI_SFC_CREATE_EXTERNAL_DATABASE 42 +#define OCI_SFC_DROP_EXTERNALDATABASE 43 +#define OCI_SFC_CREATE_DATABASE 44 +#define OCI_SFC_ALTER_DATABASE 45 +#define OCI_SFC_CREATE_ROLLBACK_SEGMENT 46 +#define OCI_SFC_ALTER_ROLLBACK_SEGMENT 47 +#define OCI_SFC_DROP_ROLLBACK_SEGMENT 48 +#define OCI_SFC_CREATE_TABLESPACE 49 +#define OCI_SFC_ALTER_TABLESPACE 50 +#define OCI_SFC_DROP_TABLESPACE 51 +#define OCI_SFC_ALTER_SESSION 52 +#define OCI_SFC_ALTER_USER 53 +#define OCI_SFC_COMMIT_WORK 54 +#define OCI_SFC_ROLLBACK 55 +#define OCI_SFC_SAVEPOINT 56 +#define OCI_SFC_CREATE_CONTROL_FILE 57 +#define OCI_SFC_ALTER_TRACING 58 +#define OCI_SFC_CREATE_TRIGGER 59 +#define OCI_SFC_ALTER_TRIGGER 60 +#define OCI_SFC_DROP_TRIGGER 61 +#define OCI_SFC_ANALYZE_TABLE 62 +#define OCI_SFC_ANALYZE_INDEX 63 +#define OCI_SFC_ANALYZE_CLUSTER 64 +#define OCI_SFC_CREATE_PROFILE 65 +#define OCI_SFC_DROP_PROFILE 66 +#define OCI_SFC_ALTER_PROFILE 67 +#define OCI_SFC_DROP_PROCEDURE 68 + +#define OCI_SFC_ALTER_RESOURCE_COST 70 +#define OCI_SFC_CREATE_SNAPSHOT_LOG 71 +#define OCI_SFC_ALTER_SNAPSHOT_LOG 72 +#define OCI_SFC_DROP_SNAPSHOT_LOG 73 +#define OCI_SFC_DROP_SUMMARY 73 +#define OCI_SFC_CREATE_SNAPSHOT 74 +#define OCI_SFC_ALTER_SNAPSHOT 75 +#define OCI_SFC_DROP_SNAPSHOT 76 +#define OCI_SFC_CREATE_TYPE 77 +#define OCI_SFC_DROP_TYPE 78 +#define OCI_SFC_ALTER_ROLE 79 +#define OCI_SFC_ALTER_TYPE 80 +#define OCI_SFC_CREATE_TYPE_BODY 81 +#define OCI_SFC_ALTER_TYPE_BODY 82 +#define OCI_SFC_DROP_TYPE_BODY 83 +#define OCI_SFC_DROP_LIBRARY 84 +#define OCI_SFC_TRUNCATE_TABLE 85 +#define OCI_SFC_TRUNCATE_CLUSTER 86 +#define OCI_SFC_CREATE_BITMAPFILE 87 +#define OCI_SFC_ALTER_VIEW 88 +#define OCI_SFC_DROP_BITMAPFILE 89 +#define OCI_SFC_SET_CONSTRAINTS 90 +#define OCI_SFC_CREATE_FUNCTION 91 +#define OCI_SFC_ALTER_FUNCTION 92 +#define OCI_SFC_DROP_FUNCTION 93 +#define OCI_SFC_CREATE_PACKAGE 94 +#define OCI_SFC_ALTER_PACKAGE 95 +#define OCI_SFC_DROP_PACKAGE 96 +#define OCI_SFC_CREATE_PACKAGE_BODY 97 +#define OCI_SFC_ALTER_PACKAGE_BODY 98 +#define OCI_SFC_DROP_PACKAGE_BODY 99 +#define OCI_SFC_CREATE_DIRECTORY 157 +#define OCI_SFC_DROP_DIRECTORY 158 +#define OCI_SFC_CREATE_LIBRARY 159 +#define OCI_SFC_CREATE_JAVA 160 +#define OCI_SFC_ALTER_JAVA 161 +#define OCI_SFC_DROP_JAVA 162 +#define OCI_SFC_CREATE_OPERATOR 163 +#define OCI_SFC_CREATE_INDEXTYPE 164 +#define OCI_SFC_DROP_INDEXTYPE 165 +#define OCI_SFC_ALTER_INDEXTYPE 166 +#define OCI_SFC_DROP_OPERATOR 167 +#define OCI_SFC_ASSOCIATE_STATISTICS 168 +#define OCI_SFC_DISASSOCIATE_STATISTICS 169 +#define OCI_SFC_CALL_METHOD 170 +#define OCI_SFC_CREATE_SUMMARY 171 +#define OCI_SFC_ALTER_SUMMARY 172 +#define OCI_SFC_CREATE_DIMENSION 174 +#define OCI_SFC_ALTER_DIMENSION 175 +#define OCI_SFC_DROP_DIMENSION 176 +#define OCI_SFC_CREATE_CONTEXT 177 +#define OCI_SFC_DROP_CONTEXT 178 +#define OCI_SFC_ALTER_OUTLINE 179 +#define OCI_SFC_CREATE_OUTLINE 180 +#define OCI_SFC_DROP_OUTLINE 181 +#define OCI_SFC_UPDATE_INDEXES 182 +#define OCI_SFC_ALTER_OPERATOR 183 + +/* size constants */ + +#define OCI_SIZE_FORMAT 64 +#define OCI_SIZE_BUFFER 512 +#define OCI_SIZE_LONG (64*1024)-1 +#define OCI_SIZE_DATE 45 +#define OCI_SIZE_TIMESTAMP 54 +#define OCI_SIZE_FORMAT_TODATE 14 +#define OCI_SIZE_NULL 4 +#define OCI_SIZE_PRECISION 10 +#define OCI_SIZE_ROWID 23 +#define OCI_SIZE_DIRECTORY 30 +#define OCI_SIZE_FILENAME 255 +#define OCI_SIZE_FORMAT_NUMS 40 +#define OCI_SIZE_FORMAT_NUML 65 +#define OCI_SIZE_OBJ_NAME 128 + +#define OCI_HASH_DEFAULT_SIZE 256 + +/* string constants */ + +#define OCILIB_DRIVER_NAME OTEXT("OCILIB") +#define OCI_STRING_NULL OTEXT("NULL") +#define OCI_STRING_EMPTY OTEXT("") +#define OCI_STRING_FORMAT_DATE OTEXT("YYYY-MM-DD") +#define OCI_STRING_FORMAT_TIME OTEXT("HH24:MI:SS") +#define OCI_STRING_FORMAT_DATETIME OTEXT("YYYY-MM-DD HH24:MI:SS") +#define OCI_STRING_FORMAT_TIMESTAMP OTEXT("YYYY-MM-DD HH24:MI:SS.FF") +#define OCI_STRING_DEFAULT_PREC 3 +#define OCI_STRING_FORMAT_NUM \ + OTEXT("FM99999999999999999999999999999999999990.999999999999999999999999") +#define OCI_STRING_FORMAT_NUM_BDOUBLE OTEXT("%lf") +#define OCI_STRING_FORMAT_NUM_BFLOAT OTEXT("%f") +#define OCI_STRING_FORMAT_NUM_SHORT OTEXT("%hd") +#define OCI_STRING_FORMAT_NUM_INT OTEXT("%d") +#define OCI_STRING_TRUE OTEXT("TRUE") +#define OCI_STRING_FALSE OTEXT("FALSE") +#define OCI_STRING_TRUE_SIZE 4 +#define OCI_STRING_FALSE_SIZE 5 + +#ifdef _WINDOWS + #define OCI_CHAR_SLASH '\\' +#else + #define OCI_CHAR_SLASH '/' +#endif + +/** + * @defgroup OcilibCApiInitialization Initializing the library + * @{ + * + * To use OCILIB, it first needs to be initialized through a call to OCI_Initialize(). + * + * Then, the application connects to server, executes queries... + * + * Finally, OCILIB resources must be released by OCI_Cleanup() + * + * @note + * + * The following objects are automatically freed by the library: + * - Connections + * - pools + * - Statements + * - Type info objects + * - Thread keys + * + * @warning + * + * All other standalone object instances (mutexes, threads, dates, lobs, ...) ARE NOT freed. + * + */ + +/** + * @brief + * Initialize the library + * + * @param err_handler - Pointer to error handler procedure (optional) + * @param lib_path - Oracle shared library path (optional) + * @param mode - Environment mode + * + * Possible values for parameter mode: + * - OCI_ENV_DEFAULT : default mode + * - OCI_ENV_THREADED : multi-threading support + * - OCI_ENV_CONTEXT : thread contextual error handling + * - OCI_ENV_EVENTS : enables events for subscription, HA Events, AQ notifications + * + * @note + * This function must be called before any OCILIB library function. + * + * @warning + * - The parameter 'libpath' is only used if OCILIB has been built with the option OCI_IMPORT_RUNTIME + * - If the parameter 'lib_path' is NULL, the Oracle library is loaded from system environment variables + * + * @warning + * OCI_Initialize() should be called ONCE per application + * + * @return + * TRUE on success otherwise FALSE (only with Oracle runtime loading mode + * if the oracle shared libraries can't be loaded or if OCI subsystem cannot be initialized) + * + */ + +OCI_EXPORT boolean OCI_API OCI_Initialize +( + POCI_ERROR err_handler, + const otext *lib_path, + unsigned int mode +); + +/** + * @brief + * Clean up all resources allocated by the library + * + * @note + * * This function must be the last OCILIB library function call. + * - It deallocates objects not explicitly freed by the program (connections, statements, ...) + * - It unloads the Oracle shared library if it has been dynamically loaded + * + * @warning + * OCI_Cleanup() should be called ONCE per application + * + * @return TRUE + */ + +OCI_EXPORT boolean OCI_API OCI_Cleanup +( + void +); + +/** + * @brief + * Return the version of OCI used for compilation + * + * @note + * - with linkage build option, the version is determined from the oci.h header through different ways + * - with runtime loading build option, the version is set to the highest version + * of OCI needed by OCILIB, not necessarily the real OCI version + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_GetOCICompileVersion +( + void +); + +/** + * @brief + * Return the version of OCI used at runtime + * + * @note + * - with linkage build option, the version is determined from the oci.h header + * through different ways + * - with runtime loading build option, the version determined from the symbols + * dynamically loaded. + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_GetOCIRuntimeVersion +( + void +); + +/** + * @brief + * Return the Oracle shared library import mode + * + * @note + * Possible values are: + * - OCI_IMPORT_MODE_LINKAGE + * - OCI_IMPORT_MODE_RUNTIME + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_GetImportMode +( + void +); + +/** + * @brief + * Return the OCILIB charset type + * + * @note + * Possible values are: + * - OCI_CHAR_ANSI + * - OCI_CHAR_WIDE + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_GetCharset +( + void +); + +/** +* @brief +* Return the current number of bytes allocated internally in the library +* +* @param mem_type : type of memory to request +* +* @note +* Possible values are: +* - OCI_MEM_ORACLE : bytes allocated by Oracle client library +* - OCI_MEM_OCILIB : bytes allocated by OCILIB library +* - OCI_MEM_ORACLE : bytes allocated by all libraries +* +*/ + +OCI_EXPORT big_uint OCI_API OCI_GetAllocatedBytes +( + unsigned int mem_type +); + +/** + * @brief + * Enable or disable Oracle warning notifications + * + * @param value - enable/disable warnings + * + * @note + * Default value is FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_EnableWarnings +( + boolean value +); + +/** + * @brief + * Set the global error user handler + * + * @param handler - Pointer to error handler procedure + * + * @note + * Use this call to change or remove the user callback error handler installed by OCI_Initialize() + * + */ + +OCI_EXPORT boolean OCI_API OCI_SetErrorHandler +( + POCI_ERROR handler +); + +/** + * @brief + * Set the High availability (HA) user handler + * + * @param handler - Pointer to HA handler procedure + * + * @note + * See POCI_HA_HANDLER documentation for more details + * + * @note + * OCI_ENV_EVENTS flag must be passed to OCI_Initialize() to be able to use + * HA events + * + * @warning + * This call is supported from Oracle 10gR2. + * For previous versions, it returns FALSE without throwing any exception. + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_SetHAHandler +( + POCI_HA_HANDLER handler +); + +/** + * @} + */ + +/** + * @defgroup OcilibCApiErrorHandling Error handling + * @{ + * + * OCILIB provides two mechanisms for error handling: + * + * - Global error handling through callbacks. + * - Contextual thread error handling + * + * Exceptions are raised: + * + * - On Oracle OCI API call error + * - On Oracle SQL statement error + * - On Internal OCILIB error (type checking, memory allocations ...) + * - On Oracle warnings (OCI API or SQL) + * + * If an error handler was provided to OCI_Initialize(), when an error occurs, the + * library generates an OCI_Error handle and pass it to the error handler. + * + * In order to use the thread contextual error handling, you must call + * OCI_Initialize() with the flag OCI_ENV_CONTEXT for the mode parameter. When + * activated, error handles are stored per thread and the last error within a + * thread can be retrieved with OCI_GetLastError() + * + * Exception properties are accessible through a set of functions + * + * @note + * The two ways to handle errors are not exclusive and can be mixed. + * + * @note + * Thread contextual error is also available for single thread based applications + * + * @par Oracle Warnings + * + * Oracle warnings are raised through OCI_Error API. + * Such error handles have their error type property (OCI_ErrorGetType()) set to OCI_ERR_WARNING. + * Warning handing is disabled by default. To activate/deactivate it, use OCI_EnableWarnings() + * + * @par Example with callbacks + * @include err.c + * + * @par Example with thread context + * @include err_ctx.c + * + *@par Example of warning handling + * @include err_warning.c + * + */ + +/** + * @brief + * Retrieve the last error or warning occurred within the last OCILIB call + * + * @note + * OCI_GetLastError() is based on thread context and thus OCILIB must be + * initialized with the flag OCI_ENV_CONTEXT + * + * @warning + * OCILIB functions that returns a boolean value to indicate their success : + * - return TRUE if no error occurred OR if a warning occurred + * - return FALSE if an error occurred + * + */ + +OCI_EXPORT OCI_Error * OCI_API OCI_GetLastError +( + void +); + +/** + * @brief + * Retrieve error message from error handle + * + * @param err - Error handle + * + */ + +OCI_EXPORT const otext * OCI_API OCI_ErrorGetString +( + OCI_Error *err +); + +/** + * @brief + * Retrieve the type of error from error handle + * + * @param err - Error handle + * + * @note + * Returns one of the following values: + * + * - OCI_ERR_ORACLE + * - OCI_ERR_OCILIB + * - OCI_ERR_WARNING + * + * @return + * Object type or OCI_UNKNOWN the input handle is NULL + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_ErrorGetType +( + OCI_Error *err +); + +/** + * @brief + * Retrieve Oracle Error code from error handle + * + * @param err - Error handle + * + */ + +OCI_EXPORT int OCI_API OCI_ErrorGetOCICode +( + OCI_Error *err +); + +/** + * @brief + * Retrieve Internal Error code from error handle + * + * @param err - Error handle + * + */ + +OCI_EXPORT int OCI_API OCI_ErrorGetInternalCode +( + OCI_Error *err +); + +/** + * @brief + * Retrieve connection handle within the error occurred + * + * @param err - Error handle + * + */ + +OCI_EXPORT OCI_Connection * OCI_API OCI_ErrorGetConnection +( + OCI_Error *err +); + +/** + * @brief + * Retrieve statement handle within the error occurred + * + * @param err - Error handle + * + * @note + * If the error occurred outside of a statement context, it returns NULL + * + */ + +OCI_EXPORT OCI_Statement * OCI_API OCI_ErrorGetStatement +( + OCI_Error *err +); + +/** + * @brief + * Return the row index which caused an error during statement execution + * + * @param err - Error handle + * + * @warning + * Row index start at 1. + * + * @return + * 0 is the error is not related to array DML otherwise the index of the given + * row which caused the error + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_ErrorGetRow +( + OCI_Error *err +); + +/** + * @} + */ + +/** + * @defgroup OcilibCApiConnections Connecting to Database + * @{ + * + * Connecting to a database server is done with one call to OCI_ConnectionCreate(). + * + * OCI_ConnectionFree() closes the established connection. + * + * Connection properties are accessible through a set of functions + * + * @par Example + * @include conn.c + * + */ + +/** + * @brief + * Create a physical connection to an Oracle database server + * + * @param db - Oracle Service Name + * @param user - Oracle User name + * @param pwd - Oracle User password + * @param mode - Session mode + * + * Possible values for parameter mode : + * - OCI_SESSION_DEFAULT + * - OCI_SESSION_SYSDBA + * - OCI_SESSION_SYSOPER + * - OCI_SESSION_XA + * + * @note + * External credentials are supported by supplying a null value for the + * 'user' and 'pwd' parameters. + * If the param 'db' is NULL then a connection to the default local DB is done + * + * @note + * For parameter 'mode', the possible values are exclusive and cannot be combined + * + * @par Oracle XA support + * + * OCILIB supports Oracle XA connectivity. In order to get a connection using + * the XA interface : + * - For parameter 'db' : pass the value of the 'DB' parameter of the given + * XA connection string passed to the Transaction Processing Monitor (TPM) + * - Pass NULL to the 'user' and 'pwd' parameters + * - Pass the value OCI_SESSION_XA to parameter 'mode' + * + * @par Oracle XA Connection String + * + * The XA connection string used in a transaction monitor to connect to Oracle must + * be compatible with OCILIB : + * + * - the XA parameter 'Objects' MUST be set to 'true' + * - If OCI_ENV_THREADED is passed to OCI_Initialize(), the XA parameter 'Threads' must + * be set to 'true', otherwise to 'false' + * - If OCI_ENV_EVENTS is passed to OCI_Initialize(), the XA parameter 'Events' must + * be set to 'true', otherwise to 'false' + * - As Oracle does not support Unicode UTF16 character set through the XA interface, + * Only OCI_CHARSET_ANSI builds of OCILIB can be used + * - You still can use UTF8 if the NLS_LANG environment variable is set with a valid + * UTF8 NLS value + * - DO NOT USE OCI_CHARSET_WIDE OCILIB builds with XA connections + * + * @note + * On success, a local transaction is automatically created and started ONLY for regular + * standalone connections and connections retrieved from connection pools. + * No transaction is created for a XA connection or q connection retrieved from session pools. + * + * @return + * Connection handle on success or NULL on failure + * + */ + +OCI_EXPORT OCI_Connection * OCI_API OCI_ConnectionCreate +( + const otext *db, + const otext *user, + const otext *pwd, + unsigned int mode +); + +/** + * @brief + * Close a physical connection to an Oracle database server + * + * @param con - Connection handle + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ConnectionFree +( + OCI_Connection *con +); + +/** + * @brief + * Returns TRUE is the given connection is still connected otherwise FALSE + * + * @param con - Connection handle + * + */ + +OCI_EXPORT boolean OCI_API OCI_IsConnected +( + OCI_Connection *con +); + +/** + * @brief + * Return the pointer to user data previously associated with the connection + * + * @param con - Connection handle + * + */ + +OCI_EXPORT void * OCI_API OCI_GetUserData +( + OCI_Connection *con +); + +/** + * @brief + * Associate a pointer to user data to the given connection + * + * @param con - Connection handle + * @param data - User data pointer + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_SetUserData +( + OCI_Connection *con, + void *data +); + +/** + * @brief + * Associate a tag to the given connection/session + * + * @param con - Connection handle + * @param tag - user tag string + * + * @note + * Use this call only for connections retrieved from a session pool + * See OCI_PoolGetConnection() for more details + * + * @note + * To untag a session, call OCI_SetSessionTag() with 'tag' parameter set to NULL + * + * @warning + * No error is raised if the connection is a standalone connection or retrieved from a connection + * pool + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_SetSessionTag +( + OCI_Connection *con, + const otext *tag +); + +/** + * @brief + * Return the tag associated the given connection + * + * @param con - Connection handle + * + */ + +OCI_EXPORT const otext * OCI_API OCI_GetSessionTag +( + OCI_Connection *con +); + +/** + * @brief + * Return the name of the connected database/service name + * + * @param con - Connection handle + * + */ + +OCI_EXPORT const otext * OCI_API OCI_GetDatabase +( + OCI_Connection *con +); + +/** + * @brief + * Return the current logged user name + * + * @param con - Connection handle + * + */ + +OCI_EXPORT const otext * OCI_API OCI_GetUserName +( + OCI_Connection *con +); + +/** + * @brief + * Return the current logged user password + * + * @param con - Connection handle + * + */ + +OCI_EXPORT const otext * OCI_API OCI_GetPassword +( + OCI_Connection *con +); + +/** + * @brief + * Change the password of the logged user + * + * @param con - Connection handle + * @param password - New password + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_SetPassword +( + OCI_Connection *con, + const otext *password +); + +/** + * @brief + * Change the password of the given user on the given database + * + * @param db - Oracle Service Name + * @param user - Oracle User name + * @param pwd - Oracle User password + * @param new_pwd - Oracle User New password + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_SetUserPassword +( + const otext *db, + const otext *user, + const otext *pwd, + const otext *new_pwd +); + +/** + * @brief + * Return the current session mode + * + * @param con - Connection handle + * + * @note + * See OCI_ConnectionCreate() for possible values + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_GetSessionMode +( + OCI_Connection *con +); + +/** + * @brief + * Return the connected database server version + * + * @param con - Connection handle + * + */ + +OCI_EXPORT const otext * OCI_API OCI_GetVersionServer +( + OCI_Connection *con +); + +/** + * @brief + * Return the major version number of the connected database server + * + * @param con - Connection handle + * + * @return + * Version number or 0 on failure + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_GetServerMajorVersion +( + OCI_Connection *con +); + +/** + * @brief + * Return the minor version number of the connected database server + * + * @param con - Connection handle + * + * @return + * Version number or 0 on failure + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_GetServerMinorVersion +( + OCI_Connection *con +); + +/** + * @brief + * Return the revision version number of the connected database server + * + * @param con - Connection handle + * + * @return + * Version number or 0 on failure + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_GetServerRevisionVersion +( + OCI_Connection *con +); + +/** + * @brief + * Set the format string for implicit string conversions of the given type + * + * @param con - Connection handle (optional) + * @param type - Type of format + * @param format - Format string + * + * Formats can set at 2 levels: + * - Library level: by passing a NULL Connection handle + * - Connection level: by passing a valid Connection handle + * + * When the library needs to perform a string conversion, it search for a valid format using the + * following order: + * - Connection format + * - Library format + * - Default format + * + * @note + * Possible values of parameter 'type' : + * + * - OCI_FMT_DATE : format used to convert DATE to string + * - OCI_FMT_TIMESTAMP : format used to convert TIMESTAMP to string + * - OCI_FMT_NUMERIC : format used to convert numeric types to string + * - OCI_FMT_BINARY_DOUBLE : format used to convert BINARY_DOUBLE to string + * - OCI_FMT_BINARY FLOAT : format used to convert BINARY_FLOAT to string + * + * @note + * Default format values are : + * - OCI_FMT_DATE : constant OCI_STRING_FORMAT_DATE + * - OCI_FMT_TIMESTAMP : constant OCI_STRING_FORMAT_TIMESTAMP + * - OCI_FMT_NUMERIC : constant OCI_STRING_FORMAT_NUMERIC + * - OCI_FMT_BINARY_DOUBLE : constant OCI_STRING_FORMAT_BINARY_DOUBLE + * - OCI_FMT_BINARY FLOAT : constant OCI_STRING_FORMAT_BINARY_FLOAT + * + * @note + * Conversions are performed by Oracle built-in functions whenever possible. + * For DATE, TIMESTAMP and numeric types, see documentation of Oracle SQL to_char() function for more details + * For BINARY_DOUBLE and BINARY_FLOAT, refer to the C Standard Library printf() family documentation + * + */ + +OCI_EXPORT boolean OCI_API OCI_SetFormat +( + OCI_Connection *con, + unsigned int type, + const otext *format +); + +/** + * @brief + * Return the format string for implicit string conversions of the given type + * + * @param con - Connection handle + * @param type - Type of format + * + * @note + * See OCI_SetFormat() for possible values + * + */ + +OCI_EXPORT const otext * OCI_API OCI_GetFormat +( + OCI_Connection *con, + unsigned int type +); + +/** + * @brief + * Return the current transaction of the connection + * + * @param con - Connection handle + * + * @note + * From v3.9.4, no more default transaction object is created for a new connection + * + */ + +OCI_EXPORT OCI_Transaction * OCI_API OCI_GetTransaction +( + OCI_Connection *con +); + +/** + * @brief + * Set a transaction to a connection + * + * @param con - Connection handle + * @param trans - Transaction handle to assign + * + * @note + * The current transaction (if any) is automatically stopped but the newly assigned is not + * started or resumed + * + * @warning + * Do not set transaction object to XA connection or connection retrieved from a session pool + * + */ + +OCI_EXPORT boolean OCI_API OCI_SetTransaction +( + OCI_Connection *con, + OCI_Transaction *trans +); + +/** + * @brief + * Return the highest Oracle version is supported by the connection + * + * @param con - connection handle + * + * @note + * The highest supported version is the lower version between client and server: + * + * @note + * Returns one of the following values: + * + * - OCI_UNKNOWN + * - OCI_8_0 + * - OCI_8_1 + * - OCI_9_0 + * - OCI_9_2 + * - OCI_10_1 + * - OCI_10_2 + * - OCI_11_1 + * - OCI_11_2 + * - OCI_12_1 + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_GetVersionConnection +( + OCI_Connection *con +); + +/** + * @brief + * Set tracing information to the session of the given connection + * + * @param con - connection handle + * @param trace - trace type + * @param value - trace content + * + * Store current trace information to the given connection handle. + * These information: + * + * - is stored in the system view V$SESSION + * - can be retrieved from the connection property of an OCI_Error handle + * + * @note + * Possible values of parameter 'trace' : + * + * - OCI_TRC_IDENTITY : Specifies the user defined identifier in the session. + * It's recorded in the column CLIENT_IDENTIFIER of the + * system view V$SESSION + * - OCI_TRC_MODULE : name of the current module in the client application. + * It's recorded in the column MODULE of the + * system view V$SESSION + * - OCI_TRC_ACTION : name of the current action within the current module. + * It's recorded in the column ACTION of the + * system view V$SESSION + * - OCI_TRC_DETAIL : Client application additional information. + * It's recorded in the column CLIENT_INFO of the + * system view V$SESSION + * + * @warning + * The system view V$SESSION is updated on Oracle versions >= 10g + * + * @warning + * Oracle limits the size of these traces content and thus OCILIB will truncate + * the given values if needed : + * + * - OCI_TRC_IDENTITY : 64 bytes + * - OCI_TRC_MODULE : 48 bytes + * - OCI_TRC_ACTION : 32 bytes + * - OCI_TRC_DETAIL : 64 bytes + * + */ + +OCI_EXPORT boolean OCI_API OCI_SetTrace +( + OCI_Connection *con, + unsigned int trace, + const otext *value +); + +/** + * @brief + * Get the current trace for the trace type from the given connection. + * + * @param con - connection handle + * @param trace - trace type + * + * @note + * See OCI_SetTrace() for more details. + * + */ + +OCI_EXPORT const otext * OCI_API OCI_GetTrace +( + OCI_Connection *con, + unsigned int trace +); + +/** + * @brief + * Makes a round trip call to the server to confirm that the connection and the server are active. + * + * @param con - Connection handle + * + * @note + * Returns TRUE is the connection is still alive otherwise FALSE + * + * @warning + * This call is supported from Oracle 10g. + * For previous versions, it returns FALSE without throwing any exception. + * + */ + +OCI_EXPORT boolean OCI_API OCI_Ping +( + OCI_Connection *con +); + +/** + * @brief + * Return the Oracle server database name of the connected database/service name + * + * @param con - Connection handle + * + * @warning + * This call is supported from Oracle 10gR2. + * For previous versions, it returns NULL without throwing any exception. + * + */ + +OCI_EXPORT const otext * OCI_API OCI_GetDBName +( + OCI_Connection *con +); + +/** + * @brief + * Return the Oracle server Instance name of the connected database/service name + * + * @param con - Connection handle + * + * @warning + * This call is supported from Oracle 10gR2. + * For previous versions, it returns NULL without throwing any exception. + * + */ + +OCI_EXPORT const otext * OCI_API OCI_GetInstanceName +( + OCI_Connection *con +); + + +/** + * @brief + * Return the Oracle server service name of the connected database/service name + * + * @param con - Connection handle + * + * @warning + * This call is supported from Oracle 10gR2. + * For previous versions, it returns NULL without throwing any exception. + * + */ + +OCI_EXPORT const otext * OCI_API OCI_GetServiceName +( + OCI_Connection *con +); + + +/** + * @brief + * Return the Oracle server machine name of the connected database/service name + * + * @param con - Connection handle + * + * @warning + * This call is supported from Oracle 10gR2. + * For previous versions, it returns NULL without throwing any exception. + * + */ + +OCI_EXPORT const otext * OCI_API OCI_GetServerName +( + OCI_Connection *con +); + + +/** + * @brief + * Return the Oracle server domain name of the connected database/service name + * + * @param con - Connection handle + * + * @warning + * This call is supported from Oracle 10gR2. + * For previous versions, it returns NULL without throwing any exception. + * + */ + +OCI_EXPORT const otext * OCI_API OCI_GetDomainName +( + OCI_Connection *con +); + + +/** + * @brief + * Return the date and time (Timestamp) server instance start of the + * connected database/service name + * + * @param con - Connection handle + * + * @warning + * This call is supported from Oracle 10gR2. + * For previous versions, it returns NULL without throwing any exception. + * + */ + +OCI_EXPORT OCI_Timestamp * OCI_API OCI_GetInstanceStartTime +( + OCI_Connection *con +); + +/** + * @brief + * Verify if the given connection support TAF events + * + * @param con - Connection handle + * + * @note + * Returns TRUE is the connection supports TAF event otherwise FALSE + * + * @warning + * This call is supported from Oracle 10gR2. + * For previous versions, it returns FALSE without throwing any exception. + * + */ + +OCI_EXPORT boolean OCI_API OCI_IsTAFCapable +( + OCI_Connection *con +); + +/** + * @brief + * Set the Transparent Application Failover (TAF) user handler + * + * @param con - Connection handle + * @param handler - Pointer to TAF handler procedure + * + * @note + * See POCI_TAF_HANDLER documentation for more details + * +* @warning + * This call is supported from Oracle 10gR2. + * For previous versions, it returns FALSE without throwing any exception. + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_SetTAFHandler +( + OCI_Connection *con, + POCI_TAF_HANDLER handler +); + +/** + * @brief + * Return the maximum number of statements to keep in the statement cache + * + * @param con - Connection handle + * + * @note + * Default value is 20 (value from Oracle Documentation) + * + * @warning + * Requires Oracle Client 9.2 or above + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_GetStatementCacheSize +( + OCI_Connection *con +); + +/** + * @brief + * Set the maximum number of statements to keep in the statement cache + * + * @param con - Connection handle + * @param value - maximum number of statements in the cache + * + * @warning + * Requires Oracle Client 9.2 or above + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_SetStatementCacheSize +( + OCI_Connection *con, + unsigned int value +); + +/** + * @brief + * Return the default LOB prefetch buffer size for the connection + * + * @param con - Connection handle + * + * @warning + * Requires Oracle Client AND Server 11gR1 or above + * + * @note + * Prefetch size is: + * - number of bytes for BLOBs and BFILEs + * - number of characters for CLOBs. + * + * @note + * Default is 0 (prefetching disabled) + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_GetDefaultLobPrefetchSize +( + OCI_Connection *con +); + +/** + * @brief + * Enable or disable prefetching for all LOBs fetched in the connection + * + * @param con - Connection handle + * @param value - default prefetch buffer size + * + * @note + * If parameter 'value': + * - is == 0, it disables prefetching for all LOBs fetched in the connection. + * - is > 0, it enables prefetching for all LOBs fetched in the connection + * and the given buffer size is used for prefetching LOBs + * + * @note + * LOBs prefetching is disabled by default + * + * @warning + * Requires Oracle Client AND Server 11gR1 or above. + * + * @note + * Prefetch size is: + * - number of bytes for BLOBs and BFILEs + * - number of characters for CLOBs. + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_SetDefaultLobPrefetchSize +( + OCI_Connection *con, + unsigned int value +); + + +/** +* @brief +* Return the maximum number of SQL statements that can be opened in one session +* +* @param con - Connection handle +* +* @warning +* Requires Oracle Client AND Server 12cR1 or above +* +* @note +* the returned value is the same as the db parameter 'open_cursors' from server's parameter file +* +* @note +* Return 0 if the client and server version are < 12cR1 +* +*/ + +OCI_EXPORT unsigned int OCI_API OCI_GetMaxCursors +( + OCI_Connection *con +); + +/** + * @} + */ + +/** + * @defgroup OcilibCApiPools Oracle Pools + * @{ + * + * OCILIB support the connections and sessions pooling features introduced + * in Oracle 9i. + * + * Let's Oracle talk about this features ! + * + * @par Connection pools (from Oracle Call Interface Programmer's Guide) + * + * Connection pooling is the use of a group (the pool) of reusable physical connections + * by several sessions, in order to balance loads. The management of the pool is done + * by OCI, not the application. Applications that can use connection pooling include + * middle-tier applications for Web application servers and e-mail servers. + * + * @par Session Pools (from Oracle Call Interface Programmer's Guide) + * + * Session pooling means that the application will create and maintain a group of stateless + * sessions to the database. These sessions will be handed over to thin clients as requested. + * If no sessions are available, a new one may be created. When the client is done with + * the session, the client will release it to the pool. Thus, the number of sessions in + * the pool can increase dynamically. + * + * @note + * OCILIB implements homogeneous session pools only. + * + * @par When using Pools (from Oracle Call Interface Programmer's Guide) + * + * If database sessions are not reusable by mid-tier threads (that is, they are stateful) + * and the number of back-end server processes may cause scaling problems on the database, + * use OCI connection pooling. + * + * If database sessions are reusable by mid-tier threads (that is, they are stateless) + * and the number of back-end server processes may cause scaling problems on the database, + * use OCI session pooling. + * + * If database sessions are not reusable by mid-tier threads (that is, they are stateful) + * and the number of back-end server processes will never be large enough to potentially + * cause any scaling issue on the database, there is no need to use any pooling mechanism. + * + * @par Oracle 8i support + * + * Pooling has bee introduced in : + * - 9iR1 for connection pools + * - 9iR2 for session pools + * For Oracle 8i, OCILIB implements its own pooling mechanism in order to remain compatible + * with older versions. But sessions pools then are handled as connection pools + * + * @par Example + * @include pool.c + * + */ + +/** + * @brief + * Create an Oracle pool of connections or sessions + * + * @param db - Oracle Service Name + * @param user - Oracle User name + * @param pwd - Oracle User password + * @param type - Type of pool + * @param mode - Session mode + * @param min_con - minimum number of connections/sessions that can be opened. + * @param max_con - maximum number of connections/sessions that can be opened. + * @param incr_con - next increment for connections/sessions to be opened + * + * Possible values for parameter 'type': + * - OCI_POOL_CONNECTION + * - OCI_POOL_SESSION + * + * Possible values for parameter 'mode': + * - OCI_SESSION_DEFAULT + * - OCI_SESSION_SYSDAB + * - OCI_SESSION_SYSOPER + * + * @note + * External credentials are supported by supplying a null value for the 'user' + * and 'pwd' parameters + * If the param 'db' is NULL then a connection to the default local DB is done + * + * @return + * Connection or session pool handle on success or NULL on failure + * + */ + +OCI_EXPORT OCI_Pool * OCI_API OCI_PoolCreate +( + const otext *db, + const otext *user, + const otext *pwd, + unsigned int type, + unsigned int mode, + unsigned int min_con, + unsigned int max_con, + unsigned int incr_con +); + +/** + * @brief + * Destroy a pool object + * + * @param pool - Pool handle + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_PoolFree +( + OCI_Pool *pool +); + +/** + * @brief + * Get a connection from the pool + * + * @param pool - Pool handle + * @param tag - user tag string + * + * @par Session tagging + * + * Session pools have a nice feature that is 'session tagging' + * It's possible to tag a session with a string identifier + * when the session is returned to the pool, it keeps its tags. + * When requesting a connection from the session pool, it's + * possible to request a session that has the given 'tag' parameter + * If one exists, it is returned. If not and if an untagged session + * is available, it is then returned. So check the connection tag + * property with OCI_GetSessionTag() to find out if the returned + * connection is tagged or not. + * + * This features is described in the OCI developer guide as the following : + * + * "The tags provide a way for users to customize sessions in the pool. + * A client may get a default or untagged session from a pool, set certain + * attributes on the session (such as NLS settings), and return the session + * to the pool, labeling it with an appropriate tag. + * The user may request a session with the same tags in order to have a + * session with the same attributes" + * + * @return + * Connection handle otherwise NULL on failure + */ + +OCI_EXPORT OCI_Connection * OCI_API OCI_PoolGetConnection +( + OCI_Pool *pool, + const otext *tag +); + +/** + * @brief + * Get the idle timeout for connections/sessions in the pool + * + * @param pool - Pool handle + * + * @note + * Connections/sessions idle for more than this time value (in seconds) is terminated + * + * @note + * Timeout is not available for internal pooling implementation (client < 9i) + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_PoolGetTimeout +( + OCI_Pool *pool +); + +/** + * @brief + * Set the connections/sessions idle timeout + * + * @param pool - Pool handle + * @param value - Timeout value + * + * @note + * connections/sessions idle for more than this time value (in seconds) is terminated + * + * @note + * This call has no effect if pooling is internally implemented (client < 9i) + * + */ + +OCI_EXPORT boolean OCI_API OCI_PoolSetTimeout +( + OCI_Pool *pool, + unsigned int value +); + +/** + * @brief + * Get the waiting mode used when no more connections/sessions are available + * from the pool + * + * @param pool - Pool handle + * + * @return + * - FALSE to wait for an available object if the pool is saturated + * - TRUE to not wait for an available object + * + */ + +OCI_EXPORT boolean OCI_API OCI_PoolGetNoWait +( + OCI_Pool *pool +); + +/** + * @brief + * Set the waiting mode used when no more connections/sessions are available + * from the pool + * + * @param pool - Pool handle + * @param value - wait for object + * + * @note + * Pass : + * - FALSE to wait for an available object if the pool is saturated + * - TRUE to not wait for an available object + * + */ + +OCI_EXPORT boolean OCI_API OCI_PoolSetNoWait +( + OCI_Pool *pool, + boolean value +); + +/** + * @brief + * Return the current number of busy connections/sessions + * + * @param pool - Pool handle + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_PoolGetBusyCount +( + OCI_Pool *pool +); + +/** + * @brief + * Return the current number of opened connections/sessions + * + * @param pool - Pool handle + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_PoolGetOpenedCount +( + OCI_Pool *pool +); + +/** + * @brief + * Return the minimum number of connections/sessions that can be opened to the database + * + * @param pool - Pool handle + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_PoolGetMin +( + OCI_Pool *pool +); + +/** + * @brief + * Return the maximum number of connections/sessions that can be opened to the database + * + * @param pool - Pool handle + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_PoolGetMax +( + OCI_Pool *pool +); + +/** + * @brief + * Return the increment for connections/sessions to be opened to the database when the pool is + * not full + * + * @param pool - Pool handle + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_PoolGetIncrement +( + OCI_Pool *pool +); + +/** + * @brief + * Return the maximum number of statements to keep in the pool statement cache + * + * @param pool - Pool handle + * + * @note + * Default value is 20 (value from Oracle Documentation) + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_PoolGetStatementCacheSize +( + OCI_Pool *pool +); + +/** + * @brief + * Set the maximum number of statements to keep in the pool statement cache + * + * @param pool - Pool handle + * @param value - maximum number of statements in the cache + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_PoolSetStatementCacheSize +( + OCI_Pool *pool, + unsigned int value +); + +/** + * @} + */ + +/** + * @defgroup OcilibCApiTransactions Managing transactions + * @{ + * + * OCILIB supports local and global transactions. + * + * Local transactions are implicit within connection objects and there is no + * specific call or programming step for using it. + * + * In order to control changes made in the database: + * + * - OCI_Commit() validates current pending modifications + * - OCI_Rollback() discards current pending modifications + * + * OCILIB supports a feature called 'Auto Commit' that performs an implicit and + * automatic commit call after every execute call + * + * @note + * Those actions are executed within a connection context and not directly to a transaction. + * + * @warning + * Global transactions are optional and are designed for distributed or global + * transaction environments. + * + * OCILIB supports them by : + * + * - Creating/Destroying explicitly a transaction object + * - Starting/Stopping/Resuming explicitly the transaction + * - Preparing the transaction for specific calls + * + */ + +/** + * @brief + * Commit current pending changes + * + * @param con - Connection handle + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_Commit +( + OCI_Connection *con +); + +/** + * @brief + * Cancel current pending changes + * + * @param con - Connection handle + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_Rollback +( + OCI_Connection *con +); + +/** + * @brief + * Enable / disable auto commit mode + * + * The auto commit mode allows commit changes after every executed SQL order + * + * @param con - Connection handle + * @param enable - Enable (TRUE) or disable (FALSE) + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_SetAutoCommit +( + OCI_Connection *con, + boolean enable +); + +/** + * @brief + * Get current auto commit mode status + * + * @param con - Connection handle + * + * @return + * TRUE if auto commit mode is activated otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_GetAutoCommit +( + OCI_Connection *con +); + +/** + * @brief + * Create a new global transaction or a serializable/read-only local transaction + * + * @param con - Connection handle + * @param timeout - Time that a transaction stays inactive after being stopped + * @param mode - Transaction mode + * @param pxid - pointer to a global transaction identifier structure + * + * + * @note + * The parameter 'mode' can be one of the following values : + * + * - Global transactions: + * - OCI_TRS_NEW : By default starts a new, tightly coupled and + * migratable branch. + * - OCI_TRS_TIGHT : explicitly specifies a tightly coupled branch + * - OCI_TRS_LOOSE : specifies a loosely coupled branch + * + * - Global and local transactions : + * - OCI_TRS_READONLY - start a read-only transaction + * - OCI_TRS_READWRITE - start a read-write transaction + * - OCI_TRS_SERIALIZABLE : start a serializable transaction + * + * @note + * For local transaction: + * - pass a NULL value for pxid + * + */ + +OCI_EXPORT OCI_Transaction * OCI_API OCI_TransactionCreate +( + OCI_Connection *con, + unsigned int timeout, + unsigned int mode, + OCI_XID *pxid +); + +/** + * @brief + * Free current transaction + * + * @param trans - Connection handle + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_TransactionFree +( + OCI_Transaction *trans +); + +/** + * @brief + * Start global transaction + * + * @param trans - Connection handle + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_TransactionStart +( + OCI_Transaction *trans +); + +/** + * @brief + * Stop current global transaction + * + * @param trans - Connection handle + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_TransactionStop +( + OCI_Transaction *trans +); + +/** + * @brief + * Resume a stopped global transaction + * + * @param trans - Global transaction handle + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_TransactionResume +( + OCI_Transaction *trans +); + +/** + * @brief + * Prepare a global transaction validation + * + * @param trans - Global transaction handle + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_TransactionPrepare +( + OCI_Transaction *trans +); + +/** + * @brief + * Cancel the prepared global transaction validation + * + * @param trans - Global transaction handle + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_TransactionForget +( + OCI_Transaction *trans +); + +/** + * @brief + * Return global transaction mode. + * + * @note: + * see OCI_TransactionCreate() for possible values + * + * @param trans - Global transaction handle + * + * @return + * Transaction mode or OCI_UNKNOW if trans is NULL + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_TransactionGetMode +( + OCI_Transaction *trans +); + +/** + * @brief + * Return global transaction Timeout + * + * @param trans - Global transaction handle + * + * @return + * Transaction timeout or 0 if trans is NULL + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_TransactionGetTimeout +( + OCI_Transaction *trans +); + +/** + * @} + */ + +/** + * @defgroup OcilibCApiStatements Executing statements + * @{ + * + * Executing SQL statements or PL/SQL blocks is really simple with OCILIB. + * + * First, call OCI_StatementCreate() to allocate a statement handle. Then : + * + * - Prepare the SQL with OCI_Prepare() + * - Parse and execute it with OCI_Execute() + * + * These two steps can be done together by calling OCI_ExecuteStmt() that + * prepares and executes in one go. + * + * To find out if the statement has affected any rows, call OCI_GetAffectedRows() + * + * Finally, release the statement and its resources with OCI_StatementFree() + * + * @note + * A statement can be prepared once and executed as many times as needed (see + * Binding variables section) + * + * @note + * An OCI_Statement can be used to prepare and/or execute different SQL and PL/SQL + * statements as many times as needed. + * For example, if the SQL processing of an application is sequential, only + * one statement handle is required + * + * @note + * OCILIB supports nested levels of SQL statement processing. + * An application can loop through the resultset of the statement handle A, + * executing statement B and fetching statement C at every loop, and so on ... + * + * @par Example + * @include exec.c + * + */ + +/** + * @brief + * Create a statement object and return its handle + * + * @param con - Connection handle + * + * @return + * A statement handle on success otherwise NULL + * + */ + +OCI_EXPORT OCI_Statement * OCI_API OCI_StatementCreate +( + OCI_Connection *con +); + +/** + * @brief + * Free a statement and all resources associated to it (resultsets ...) + * + * @param stmt - Connection handle + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_StatementFree +( + OCI_Statement *stmt +); + +/** + * @brief + * Prepare a SQL statement or PL/SQL block. + * + * @param stmt - Statement handle + * @param sql - SQL order or PL/SQL block + * + * @note + * Do not call this function for fetched statements (REF cursors) + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_Prepare +( + OCI_Statement *stmt, + const otext *sql +); + +/** + * @brief + * Execute a prepared SQL statement or PL/SQL block. + * + * @param stmt - Statement handle + * + * @return + * TRUE on success otherwise FALSE + * + * @warning + * If a SQL warning occurs: + * - the function returns TRUE + * - the SQL warning triggers the global error handler with an OCI_Error having its OCI_ErrorGetType() + * attribute set to OCI_ERR_WARNING + * - If OCILIB is initialized with the OCI_ENV_CONTEXT mode, OCI_GetLastError() will return the OCI_Error + * object corresponding to the warning + * + */ + +OCI_EXPORT boolean OCI_API OCI_Execute +( + OCI_Statement *stmt +); + +/** + * @brief + * Prepare and Execute a SQL statement or PL/SQL block. + * + * @param stmt - Statement handle + * @param sql - SQL order - PL/SQL block + * + * @return + * TRUE on success otherwise FALSE + * + * @warning + * If a SQL warning occurs: + * - the function returns TRUE + * - the SQL warning triggers the global error handler with an OCI_Error having its OCI_ErrorGetType() + * attribute set to OCI_ERR_WARNING + * - If OCILIB is initialized with the OCI_ENV_CONTEXT mode, OCI_GetLastError() will return the OCI_Error + * object corresponding to the warning + * + */ + +OCI_EXPORT boolean OCI_API OCI_ExecuteStmt +( + OCI_Statement *stmt, + const otext *sql +); + +/** + * @brief + * Parse a SQL statement or PL/SQL block. + * + * @param stmt - Statement handle + * @param sql - SQL order - PL/SQL block + * + * @note + * This call sends the SQL or PL/SQL command to the server for parsing only. + * The command is not executed. + * This call is only useful to check is a command is valid or not. + * + * @note + * This call prepares the statement (internal call to OCI_Prepare()) and ask + * the Oracle server to parse its SQL or PL/SQL command. + * OCI_Execute() can be call after OCI_Parse() in order to execute the + * statement, which means that the server will re-parse again the command. + * + * @warning + * Do not use OCI_Parse() unless you're only interested in the parsing result + * because the statement will be parsed again when executed and thus leading to + * unnecessary server round-trips and less performance + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_Parse +( + OCI_Statement *stmt, + const otext *sql +); + +/** + * @brief + * Describe the select list of a SQL select statement. + * + * @param stmt - Statement handle + * @param sql - SELECT sql statement + * + * @note + * This call sends the SELECT SQL order to the server for retrieving the + * description of the select order only. + * The command is not executed. + * This call is only useful to retrieve information on the associated resultset + * Call OCI_GetResultet() after OCI_Describe() to access to SELECT list + * information + * + * @note + * This call prepares the statement (internal call to OCI_Prepare()) and ask + * the Oracle server to describe the output SELECT list. + * OCI_Execute() can be called after OCI_Desbribe() in order to execute the + * statement, which means that the server will parse, and describe again the SQL + * order. + * + * @warning + * Do not use OCI_Desbribe() unless you're only interested in the resultset + * information because the statement will be parsed again when executed and thus + * leading to unnecessary server round-trips and less performance + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_Describe +( + OCI_Statement *stmt, + const otext *sql +); + +/** + * @brief + * Return the last SQL or PL/SQL statement prepared or executed by the statement + * + * @param stmt - Statement handle + * + */ + +OCI_EXPORT const otext * OCI_API OCI_GetSql +( + OCI_Statement *stmt +); + +/** + * @brief + * Return the error position (in terms of characters) in the SQL statement + * where the error occurred in case of SQL parsing error + * + * @param stmt - Statement handle + * + * @note + * Positions start at 1. + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_GetSqlErrorPos +( + OCI_Statement *stmt +); + +/** + * @brief + * Return the number of rows affected by the SQL statement + * + * @param stmt - Statement handle + * + * The returned value is : + * - For UPDATEs : number of rows updated + * - For INSERTs : number of rows inserted + * - For DELETEs : number of rows deleted + * + * @note + * For SELECTs statements, use OCI_GetRowCount() instead + * + * @note + * For PL/SQL blocks performing "select into :": + * - it returns the number of rows selected from PL/SQL + * - Up to version 4.3.0, OCI_Execute() returned FALSE and generated an error ORA-01403 - "No Data Found" + * - From version 4.3.1, OCI_Execute() returns 0 if no data found, otherwise the number of selected rows + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_GetAffectedRows +( + OCI_Statement *stmt +); + +/** + * @brief + * Return the Oracle SQL code the command held by the statement handle + * + * @param stmt - Statement handle + * + * @warning + * OCI_GetSQLCommand() must be called after the statement has be executed + * because that's the server engine that computes the SQL command code + * + * @return + * The SQL command code of the statement otherwise OCI_UNKOWN + */ + +OCI_EXPORT unsigned int OCI_API OCI_GetSQLCommand +( + OCI_Statement *stmt +); + +/** + * @brief + * Return the verb of the SQL command held by the statement handle + * + * @param stmt - Statement handle + * + * @warning + * OCI_GetSQLVerb() must be called after the statement has been executed + * because that's the server engine that computes the SQL verb + * + * @note + * The SQL verb list is available in Oracle documentations and guides + * + * @return + * The SQL command verb of the statement otherwise NULL + */ + +OCI_EXPORT const otext * OCI_API OCI_GetSQLVerb +( + OCI_Statement *stmt +); + +/** + * @} + */ + +/** + * @defgroup OcilibCApiBinding Binding variables and arrays + * @{ + * + * OCILIB supports OCI data binding APIs + * + * Programs variables can be binded to an Oracle SQL PL/SQL statement in order to : + * + * - Provide input data for SQL statement + * - Provide input/output data for PL/SQL blocks + * + * OCILIB provides a set of binding functions to use with: + * + * - Basic data types: string (char/wchar_t *), int, float, double, raw + * - Object data types: lobs, files,longs, dates, cursors, statements, + * timestamps, intervals, objects + * + * To use binding: + * + * - Prepare a statement with OCI_Prepare() (see Executing statements) + * - Bind variables by calling one if the OCI_Bindxxxxx() function for every + * input variable referenced by the SQL statement + * - Setup up values of the program variables + * - Call OCI_Execute() as many times as needed + * - Each OCI_Execute() call may be preceded by an update of the program + * variables (for INSERTs for example) + * + * Bindings can be: + * - IN (host variable are not used anymore after statement execution) + * - OUT (host variable are set during statement execution) + * - IN/OUT (default) + * Use OCI_BindSetDirectionTo() to change a host variable bind direction mode after the binding call but before statement execution. + * Note that each direction mode may have a little overhead depending on the SQL type as OCILIB may have to do checks/conversions/mappings between host variable and buffers. + * Thus, to maximize performances: + * - set direction mode to OCI_BDM_IN if host variable is not updated by statement execution + * - set direction mode to OCI_BDM_OUT if host variable value does not matter prior to statement execution + * - set direction mode to OCI_BDM_IN_OUT when host variable value is used for execution and updated by statement execution + * + * OCILIB supports the OCI array Interface by binding arrays of C scalar types + * and OCILIB object types. + * + * - all types supported the library can be used for array binding except + * OCI_Statement and OCI_Long + * - Array binding is really fast for massive DML operations + * - For string/RAW arrays, the input array MUST BE a contiguous block of data + * and not an array of pointers. So to bind an array of 10 elements for a + * varchar2(30) column, binded variable must be a like array[10][31] + * + * OCILIB does not pre-parse statements (like other frameworks such as JDBC, ...) + * and lets Oracle recognize input variables embedded within the SQL statements. + * + * Bind variables must be preceded in the SQL code by the character ':'. + * + * Oracle and OCILIB supports two ways of binding: + * + * - by name (default mode in OCILIB): Oracle looks for variables in the SQL + * statement by searching their names provided to the binding function. + * So a variable can be binded once and used many times in the statement + * - by position: Oracle binds variables by position, so every variable is + * binded with a position number + * + * OCILIB Default binding mode is OCI_BIND_BY_NAME. + * + * When using binding by position, provide the position to OCI_BindXXXX() call + * through the name parameter. Within this mode the bind name must be the + * position preceded by a semicolon like ':1', ':2', .... + * + * @par Internal Bind allocation mode + * + * Bind variables or arrays can be internally allocated by OCILIB. + * That means that instead of allocating variables or arrays on the stack/heap + * in the user program, bind contents can be allocated internally and thus : + * - minimize the amount of program variables + * - optimize internal memory management for arrays + * + * To do so : + * - Call OCI_SetBindAllocation() with the mode OCI_BAM_INTERNAL + * - pass a NULL variable or array to OCI_BindXXX() calls + * - Retrieve the bind content allocated by OCILIB with OCI_BindGetData() + * + * Internal Bind allocation mode IS compatible with ALL array binding OCI_BindArrayOfxxx() methods. + * + * Internal Bind allocation mode IS NOT compatible with some single variable bind calls : + * - OCI_BindTimestamp() + * - OCI_BindInterval() + * - OCI_BindLob() + * - OCI_BindFile() + * - OCI_BindObject() + * - OCI_BindColl() + * - OCI_BindRef() + * - OCI_BindStatement() + * - OCI_BindLong() + * + * These methods need to know the data sub type (like OCI_CLOB/OCI_BLOB for lobs) in order + * to internally create variables. As these methods prototypes are not passing the sub type, + * calling them with the statement bind mode set to OCI_BAM_INTERNAL will raise + * an OCILIB error of type OCI_ERR_NULL_POINTER + * + * @note + * Rebinding is disabled by default (see OCI_AllowRebinding()) + * When using rebinding feature, host variable re-binded to a previously allocated + * bind MUST be of the SAME data type ! + * + * @par Basic input bind Example + * @include bind.c + * + * @par Array interface Example + * @include array.c + * + * @par Internal Array interface Example + * @include array_internal.c + * + * */ + +/** + * @brief + * Set the input array size for bulk operations + * + * @param stmt - Statement handle + * @param size - Array size + * + * @warning + * Do not use OCI_BindArraySetSize() for PL/SQL tables binding + * + * @note + * OCI_BindArraySetSize() is used to set the size of input bind array when using + * arrays for DML statements. + * OCI_BindArraySetSize() MUST be called to set the maximum size of the arrays + * to bind to the statement before any of its execution. This initial call must + * be bone AFTER OCI_Prepare() and BEFORE any OCI_BindArrayOfxxx() call. + * + * @note + * OCI_BindArraySetSize() can optionally be called before any later OCI_Execute() + * call in order to notify the statement of the exact number of elements + * populating the input arrays for the next execution. The array size passed to + * later OCI_BindArraySetSize() calls cannot be greater than the initial size + * otherwise an exception will be thrown. + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_BindArraySetSize +( + OCI_Statement *stmt, + unsigned int size +); + +/** + * @brief + * Return the current input array size for bulk operations + * + * @param stmt - Statement handle + * + * @return + * Array size value or 0 if OCI_BindArraySetSize() has not been called + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_BindArrayGetSize +( + OCI_Statement *stmt +); + +/** + * @brief + * Allow different host variables to be binded using the same bind name or + * position between executions of a prepared statement + * + * @param stmt - Statement handle + * @param value - Rebinding mode allowed + * + * @note + * Default value is FALSE + * + * @warning + * When using rebinding feature, host variable re-binded to a previously allocated + * bind MUST be of the same data type ! + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_AllowRebinding +( + OCI_Statement *stmt, + boolean value +); + +/** + * @brief + * Indicate if rebinding is allowed on the given statement + * + * @param stmt - Statement handle + * + * @note + * See OCI_AllowRebinding() for more details + * + * @return + * TRUE if allowed otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_IsRebindingAllowed +( + OCI_Statement *stmt +); + +/** +* @brief +* Bind a boolean variable (PL/SQL ONLY) +* +* @param stmt - Statement handle +* @param name - Variable name +* @param data - Pointer to boolean variable +* +* @note +* parameter 'data' can NULL if the statement bind allocation mode +* has been set to OCI_BAM_INTERNAL +* +* @warning +* - OCI_BindBoolean() CAN ONLY BE USED for PL/SQL boolean type when calling PL/SQL procedures/function +* - ONLY supported by Oracle 12c and above ! +* +* @return +* TRUE on success otherwise FALSE +*/ +OCI_EXPORT boolean OCI_API OCI_BindBoolean +( + OCI_Statement *stmt, + const otext *name, + boolean *data +); + +/** +* @brief +* Bind an Number variable +* +* @param stmt - Statement handle +* @param name - Variable name +* @param data - Pointer to short variable +* +* @note +* parameter 'data' can NULL if the statement bind allocation mode +* has been set to OCI_BAM_INTERNAL +* +* @return +* TRUE on success otherwise FALSE +*/ + +OCI_EXPORT boolean OCI_API OCI_BindNumber +( + OCI_Statement *stmt, + const otext *name, + OCI_Number *data +); + +/** +* @brief +* Bind an array of Number +* +* @param stmt - Statement handle +* @param name - Variable name +* @param data - Array of numbers +* @param nbelem - Number of element in the array (PL/SQL table only) +* +* @warning +* Parameter 'nbelem' SHOULD ONLY be USED for PL/SQL tables. +* For regular DML array operations, pass the value 0. +* +* @note +* parameter 'data' can NULL if the statement bind allocation mode +* has been set to OCI_BAM_INTERNAL +* +* @return +* TRUE on success otherwise FALSE +*/ + +OCI_EXPORT boolean OCI_API OCI_BindArrayOfNumbers +( + OCI_Statement *stmt, + const otext *name, + OCI_Number **data, + unsigned int nbelem +); + +/** + * @brief + * Bind an short variable + * + * @param stmt - Statement handle + * @param name - Variable name + * @param data - Pointer to short variable + * + * @note + * parameter 'data' can NULL if the statement bind allocation mode + * has been set to OCI_BAM_INTERNAL + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_BindShort +( + OCI_Statement *stmt, + const otext *name, + short *data +); + +/** + * @brief + * Bind an array of shorts + * + * @param stmt - Statement handle + * @param name - Variable name + * @param data - Array of shorts + * @param nbelem - Number of element in the array (PL/SQL table only) + * + * @warning + * Parameter 'nbelem' SHOULD ONLY be USED for PL/SQL tables. + * For regular DML array operations, pass the value 0. + * + * @note + * parameter 'data' can NULL if the statement bind allocation mode + * has been set to OCI_BAM_INTERNAL + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_BindArrayOfShorts +( + OCI_Statement *stmt, + const otext *name, + short *data, + unsigned int nbelem +); + +/** + * @brief + * Bind an unsigned short variable + * + * @param stmt - Statement handle + * @param name - Variable name + * @param data - Pointer to unsigned short variable + * + * @note + * parameter 'data' can NULL if the statement bind allocation mode + * has been set to OCI_BAM_INTERNAL + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_BindUnsignedShort +( + OCI_Statement *stmt, + const otext *name, + unsigned short *data +); + +/** + * @brief + * Bind an array of unsigned shorts + * + * @param stmt - Statement handle + * @param name - Variable name + * @param data - Array of unsigned shorts + * @param nbelem - Number of element in the array (PL/SQL table only) + * + * @warning + * Parameter 'nbelem' SHOULD ONLY be USED for PL/SQL tables. + * For regular DML array operations, pass the value 0. + * + * @note + * parameter 'data' can NULL if the statement bind allocation mode + * has been set to OCI_BAM_INTERNAL + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_BindArrayOfUnsignedShorts +( + OCI_Statement *stmt, + const otext *name, + unsigned short *data, + unsigned int nbelem +); + +/** + * @brief + * Bind an integer variable + * + * @param stmt - Statement handle + * @param name - Variable name + * @param data - Pointer to int variable + * + * @note + * parameter 'data' can NULL if the statement bind allocation mode + * has been set to OCI_BAM_INTERNAL + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_BindInt +( + OCI_Statement *stmt, + const otext *name, + int *data +); + +/** + * @brief + * Bind an array of integers + * + * @param stmt - Statement handle + * @param name - Variable name + * @param data - Array of int + * @param nbelem - Number of element in the array (PL/SQL table only) + * + * @warning + * Parameter 'nbelem' SHOULD ONLY be USED for PL/SQL tables. + * For regular DML array operations, pass the value 0. + * + * @note + * parameter 'data' can NULL if the statement bind allocation mode + * has been set to OCI_BAM_INTERNAL + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_BindArrayOfInts +( + OCI_Statement *stmt, + const otext *name, + int *data, + unsigned int nbelem +); + +/** + * @brief + * Bind an unsigned integer variable + * + * @param stmt - Statement handle + * @param name - Variable name + * @param data - Pointer to unsigned int variable + * + * @note + * parameter 'data' can NULL if the statement bind allocation mode + * has been set to OCI_BAM_INTERNAL + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_BindUnsignedInt +( + OCI_Statement *stmt, + const otext *name, + unsigned int *data +); + +/** + * @brief + * Bind an array of unsigned integers + * + * @param stmt - Statement handle + * @param name - Variable name + * @param data - Array of unsigned int + * @param nbelem - Number of element in the array (PL/SQL table only) + * + * @warning + * Parameter 'nbelem' SHOULD ONLY be USED for PL/SQL tables. + * For regular DML array operations, pass the value 0. + * + * @note + * parameter 'data' can NULL if the statement bind allocation mode + * has been set to OCI_BAM_INTERNAL + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_BindArrayOfUnsignedInts +( + OCI_Statement *stmt, + const otext *name, + unsigned int *data, + unsigned int nbelem +); + +/** + * @brief + * Bind a big integer variable + * + * @param stmt - Statement handle + * @param name - Variable name + * @param data - Pointer to big int variable + * + * @note + * parameter 'data' can NULL if the statement bind allocation mode + * has been set to OCI_BAM_INTERNAL + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_BindBigInt +( + OCI_Statement *stmt, + const otext *name, + big_int *data +); + +/** + * @brief + * Bind an array of big integers + * + * @param stmt - Statement handle + * @param name - Variable name + * @param data - Array of big int + * @param nbelem - Number of element in the array (PL/SQL table only) + * + * @warning + * Parameter 'nbelem' SHOULD ONLY be USED for PL/SQL tables. + * For regular DML array operations, pass the value 0. + * + * @note + * parameter 'data' can NULL if the statement bind allocation mode + * has been set to OCI_BAM_INTERNAL + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_BindArrayOfBigInts +( + OCI_Statement *stmt, + const otext *name, + big_int *data, + unsigned int nbelem +); + +/** + * @brief + * Bind an unsigned big integer variable + * + * @param stmt - Statement handle + * @param name - Variable name + * @param data - Pointer to unsigned big int variable + * + * @note + * parameter 'data' can NULL if the statement bind allocation mode + * has been set to OCI_BAM_INTERNAL + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_BindUnsignedBigInt +( + OCI_Statement *stmt, + const otext *name, + big_uint *data +); + +/** + * @brief + * Bind an array of unsigned big integers + * + * @param stmt - Statement handle + * @param name - Variable name + * @param data - Array of unsigned big int + * @param nbelem - Number of element in the array (PL/SQL table only) + * + * @warning + * Parameter 'nbelem' SHOULD ONLY be USED for PL/SQL tables. + * For regular DML array operations, pass the value 0. + * + * @note + * parameter 'data' can NULL if the statement bind allocation mode + * has been set to OCI_BAM_INTERNAL + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_BindArrayOfUnsignedBigInts +( + OCI_Statement *stmt, + const otext *name, + big_uint *data, + unsigned int nbelem +); + +/** + * @brief + * Bind a string variable + * + * @param stmt - Statement handle + * @param name - Variable name + * @param data - String to bind + * @param len - Max length of the string (in character without + * the zero null terminal character) + * + * @note + * if len == 0, len is set to the string size + * + * @note + * parameter 'data' can NULL if the statement bind allocation mode + * has been set to OCI_BAM_INTERNAL + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_BindString +( + OCI_Statement *stmt, + const otext *name, + otext *data, + unsigned int len +); + +/** + * @brief + * Bind an array of strings + * + * @param stmt - Statement handle + * @param name - Variable name + * @param data - Array of string + * @param len - Max length of a single string element (in character without + * the zero null terminal character) + * @param nbelem - Number of element in the array (PL/SQL table only) + * + * @warning + * Parameter 'nbelem' SHOULD ONLY be USED for PL/SQL tables. + * For regular DML array operations, pass the value 0. + * + * @note + * parameter 'data' can NULL if the statement bind allocation mode + * has been set to OCI_BAM_INTERNAL + * + * @warning + * if len <= 0, it returns FALSE + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_BindArrayOfStrings +( + OCI_Statement *stmt, + const otext *name, + otext *data, + unsigned int len, + unsigned int nbelem +); + +/** + * @brief + * Bind a raw buffer + * + * @param stmt - Statement handle + * @param name - Variable name + * @param data - buffer to bind + * @param len - Max length of the buffer + * + * @note + * if len <= 0, it returns false + * + * @note + * parameter 'data' can NULL if the statement bind allocation mode + * has been set to OCI_BAM_INTERNAL + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_BindRaw +( + OCI_Statement *stmt, + const otext *name, + void *data, + unsigned int len +); + +/** + * @brief + * Bind an array of raw buffers + * + * @param stmt - Statement handle + * @param name - Variable name + * @param data - Array of buffers + * @param len - Size in bytes on a single RAW array element + * @param nbelem - Number of element in the array (PL/SQL table only) + * + * @warning + * Parameter 'nbelem' SHOULD ONLY be USED for PL/SQL tables. + * For regular DML array operations, pass the value 0. + * + * @note + * The buffer must be a contiguous block of data elements + * + * @note + * If len <= 0, it returns FALSE + * + * @note + * parameter 'data' can NULL if the statement bind allocation mode + * has been set to OCI_BAM_INTERNAL + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_BindArrayOfRaws +( + OCI_Statement *stmt, + const otext *name, + void *data, + unsigned int len, + unsigned int nbelem +); + +/** + * @brief + * Bind a double variable + * + * @param stmt - Statement handle + * @param name - Variable name + * @param data - Pointer to double variable + * + * @note + * parameter 'data' can NULL if the statement bind allocation mode + * has been set to OCI_BAM_INTERNAL + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_BindDouble +( + OCI_Statement *stmt, + const otext *name, + double *data +); + +/** + * @brief + * Bind an array of doubles + * + * @param stmt - Statement handle + * @param name - Variable name + * @param data - Array of double + * @param nbelem - Number of element in the array (PL/SQL table only) + * + * @warning + * Parameter 'nbelem' SHOULD ONLY be USED for PL/SQL tables. + * For regular DML array operations, pass the value 0. + * + * @note + * parameter 'data' can NULL if the statement bind allocation mode + * has been set to OCI_BAM_INTERNAL + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_BindArrayOfDoubles +( + OCI_Statement *stmt, + const otext *name, + double *data, + unsigned int nbelem +); + + +/** + * @brief + * Bind a float variable + * + * @param stmt - Statement handle + * @param name - Variable name + * @param data - Pointer to float variable + * + * @note + * parameter 'data' can NULL if the statement bind allocation mode + * has been set to OCI_BAM_INTERNAL + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_BindFloat +( + OCI_Statement *stmt, + const otext *name, + float *data +); + +/** + * @brief + * Bind an array of floats + * + * @param stmt - Statement handle + * @param name - Variable name + * @param data - Array of float + * @param nbelem - Number of element in the array (PL/SQL table only) + * + * @warning + * Parameter 'nbelem' SHOULD ONLY be USED for PL/SQL tables. + * For regular DML array operations, pass the value 0. + * + * @note + * parameter 'data' can NULL if the statement bind allocation mode + * has been set to OCI_BAM_INTERNAL + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_BindArrayOfFloats +( + OCI_Statement *stmt, + const otext *name, + float *data, + unsigned int nbelem +); + +/** + * @brief + * Bind a date variable + * + * @param stmt - Statement handle + * @param name - Variable name + * @param data - Date handle + * + * @note + * parameter 'data' can NULL if the statement bind allocation mode + * has been set to OCI_BAM_INTERNAL + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_BindDate +( + OCI_Statement *stmt, + const otext *name, + OCI_Date *data +); + +/** + * @brief + * Bind an array of dates + * + * @param stmt - Statement handle + * @param name - Variable name + * @param data - Array of date handle + * @param nbelem - Number of element in the array (PL/SQL table only) + * + * @warning + * Parameter 'nbelem' SHOULD ONLY be USED for PL/SQL tables. + * For regular DML array operations, pass the value 0. + * + * @note + * parameter 'data' can NULL if the statement bind allocation mode + * has been set to OCI_BAM_INTERNAL + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_BindArrayOfDates +( + OCI_Statement *stmt, + const otext *name, + OCI_Date **data, + unsigned int nbelem +); + +/** + * @brief + * Bind a timestamp variable + * + * @param stmt - Statement handle + * @param name - Variable name + * @param data - Timestamp handle + * + * @note + * parameter 'data' CANNOT be NULL whatever the statement bind allocation mode + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_BindTimestamp +( + OCI_Statement *stmt, + const otext *name, + OCI_Timestamp *data +); + +/** + * @brief + * Bind an array of timestamp handles + * + * @param stmt - Statement handle + * @param name - Variable name + * @param data - Array of Timestamp handle + * @param type - Timestamp type + * @param nbelem - Number of element in the array (PL/SQL table only) + * + * @warning + * Parameter 'nbelem' SHOULD ONLY be USED for PL/SQL tables. + * For regular DML array operations, pass the value 0. + * + * @note + * See OCI_TimestampCreate() for possible values of parameter 'type' + * + * @note + * parameter 'data' can NULL if the statement bind allocation mode + * has been set to OCI_BAM_INTERNAL + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_BindArrayOfTimestamps +( + OCI_Statement *stmt, + const otext *name, + OCI_Timestamp **data, + unsigned int type, + unsigned int nbelem +); + +/** + * @brief + * Bind an interval variable + * + * @param stmt - Statement handle + * @param name - Variable name + * @param data - Interval handle + * + * @note + * parameter 'data' CANNOT be NULL whatever the statement bind allocation mode + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_BindInterval +( + OCI_Statement *stmt, + const otext *name, + OCI_Interval *data +); + +/** + * @brief + * Bind an array of interval handles + * + * @param stmt - Statement handle + * @param name - Variable name + * @param data - Array of Interval handle + * @param type - Interval type + * @param nbelem - Number of element in the array (PL/SQL table only) + * + * @warning + * Parameter 'nbelem' SHOULD ONLY be USED for PL/SQL tables. + * For regular DML array operations, pass the value 0. + * + * @note + * See OCI_IntervalCreate() for possible values of parameter 'type' + * + * @note + * parameter 'data' can NULL if the statement bind allocation mode + * has been set to OCI_BAM_INTERNAL + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_BindArrayOfIntervals +( + OCI_Statement *stmt, + const otext *name, + OCI_Interval **data, + unsigned int type, + unsigned int nbelem +); + +/** + * @brief + * Bind a Lob variable + * + * @param stmt - Statement handle + * @param name - Variable name + * @param data - Lob handle + * + * @note + * parameter 'data' CANNOT be NULL whatever the statement bind allocation mode + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_BindLob +( + OCI_Statement *stmt, + const otext *name, + OCI_Lob *data +); + +/** + * @brief + * Bind an array of Lob handles + * + * @param stmt - Statement handle + * @param name - Variable name + * @param data - Array of Lob handle + * @param type - Lob type + * @param nbelem - Number of element in the array (PL/SQL table only) + * + * @warning + * Parameter 'nbelem' SHOULD ONLY be USED for PL/SQL tables. + * For regular DML array operations, pass the value 0. + * + * @note + * See OCI_LobCreate() for possible values of parameter 'type' + * + * @note + * parameter 'data' can NULL if the statement bind allocation mode + * has been set to OCI_BAM_INTERNAL + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_BindArrayOfLobs +( + OCI_Statement *stmt, + const otext *name, + OCI_Lob **data, + unsigned int type, + unsigned int nbelem +); + +/** + * @brief + * Bind a File variable + * + * @param stmt - Statement handle + * @param name - Variable name + * @param data - File handle + * + * @note + * parameter 'data' CANNOT be NULL whatever the statement bind allocation mode + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_BindFile +( + OCI_Statement *stmt, + const otext *name, + OCI_File *data +); + +/** + * @brief + * Bind an array of File handles + * + * @param stmt - Statement handle + * @param name - Variable name + * @param data - Array of File handle + * @param type - File type + * @param nbelem - Number of element in the array (PL/SQL table only) + * + * @warning + * Parameter 'nbelem' SHOULD ONLY be USED for PL/SQL tables. + * For regular DML array operations, pass the value 0. + * + * @note + * See OCI_FileCreate() for possible values of parameter 'type' + * + * @note + * parameter 'data' can NULL if the statement bind allocation mode + * has been set to OCI_BAM_INTERNAL + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_BindArrayOfFiles +( + OCI_Statement *stmt, + const otext *name, + OCI_File **data, + unsigned int type, + unsigned int nbelem +); + +/** + * @brief + * Bind an object (named type) variable + * + * @param stmt - Statement handle + * @param name - Variable name + * @param data - Object handle + * + * @note + * parameter 'data' CANNOT be NULL whatever the statement bind allocation mode + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_BindObject +( + OCI_Statement *stmt, + const otext *name, + OCI_Object *data +); + +/** + * @brief + * Bind an array of object handles + * + * @param stmt - Statement handle + * @param name - Variable name + * @param data - Array of object handle + * @param typinf - type info handle + * @param nbelem - Number of element in the array (PL/SQL table only) + * + * @warning + * Parameter 'nbelem' SHOULD ONLY be USED for PL/SQL tables. + * For regular DML array operations, pass the value 0. + * + * @note + * parameter 'data' can NULL if the statement bind allocation mode + * has been set to OCI_BAM_INTERNAL + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_BindArrayOfObjects +( + OCI_Statement *stmt, + const otext *name, + OCI_Object **data, + OCI_TypeInfo *typinf, + unsigned int nbelem +); + +/** + * @brief + * Bind a Collection variable + * + * @param stmt - Statement handle + * @param name - Variable name + * @param data - Collection handle to bind + * + * @note + * parameter 'data' CANNOT be NULL whatever the statement bind allocation mode + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_BindColl +( + OCI_Statement *stmt, + const otext *name, + OCI_Coll *data +); + +/** + * @brief + * Bind an array of Collection handles + * + * @param stmt - Statement handle + * @param name - Variable name + * @param data - Array of Collection handle + * @param typinf - Type info handle + * @param nbelem - Number of element in the array (PL/SQL table only) + * + * @warning + * Parameter 'nbelem' SHOULD ONLY be USED for PL/SQL tables. + * For regular DML array operations, pass the value 0. + * + * @note + * See OCI_CollCreate() for possible values of parameter 'type' + * + * @note + * parameter 'data' can NULL if the statement bind allocation mode + * has been set to OCI_BAM_INTERNAL + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_BindArrayOfColls +( + OCI_Statement *stmt, + const otext *name, + OCI_Coll **data, + OCI_TypeInfo *typinf, + unsigned int nbelem +); + +/** + * @brief + * Bind a Ref variable + * + * @param stmt - Statement handle + * @param name - Variable name + * @param data - Ref handle to bind + * + * @note + * parameter 'data' CANNOT be NULL whatever the statement bind allocation mode + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_BindRef +( + OCI_Statement *stmt, + const otext *name, + OCI_Ref *data +); + +/** + * @brief + * Bind an array of Ref handles + * + * @param stmt - Statement handle + * @param name - Variable name + * @param data - Array of Ref handle + * @param typinf - type info handle + * @param nbelem - Number of element in the array (PL/SQL table only) + * + * @warning + * Parameter 'nbelem' SHOULD ONLY be USED for PL/SQL tables. + * For regular DML array operations, pass the value 0. + * + * @note + * parameter 'data' can NULL if the statement bind allocation mode + * has been set to OCI_BAM_INTERNAL + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_BindArrayOfRefs +( + OCI_Statement *stmt, + const otext *name, + OCI_Ref **data, + OCI_TypeInfo *typinf, + unsigned int nbelem +); + +/** + * @brief + * Bind a Statement variable (PL/SQL Ref Cursor) + * + * @param stmt - Statement handle + * @param name - Variable name + * @param data - Statement handle to bind + * + * @note + * parameter 'data' CANNOT be NULL whatever the statement bind allocation mode + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_BindStatement +( + OCI_Statement *stmt, + const otext *name, + OCI_Statement *data +); + +/** + * @brief + * Bind a Long variable + * + * @param stmt - Statement handle + * @param name - Variable name + * @param data - Long handle + * @param size - Size of the long buffer in bytes or characters + * + * @note + * Size is expressed in: + * - Bytes for BLONGs + * - Characters for CLONGs + * + * @note + * parameter 'data' CANNOT be NULL whatever the statement bind allocation mode + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_BindLong +( + OCI_Statement *stmt, + const otext *name, + OCI_Long *data, + unsigned int size +); + +/** + * @brief + * Returns the first or next error that occurred within a DML array statement execution + * + * @param stmt - Statement handle + * + * @return + * The first or next error handle otherwise NULL + */ + +OCI_EXPORT OCI_Error * OCI_API OCI_GetBatchError +( + OCI_Statement *stmt +); + +/** + * @brief + * Returns the number of errors that occurred within the last DML array statement + * + * @param stmt - Statement handle + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_GetBatchErrorCount +( + OCI_Statement *stmt +); + +/** + * @brief + * Return the number of binds currently associated to a statement + * + * @param stmt - Statement handle + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_GetBindCount +( + OCI_Statement *stmt +); + +/** + * @brief + * Return the bind handle at the given index in the internal array of bind + * handle + * + * @param stmt - Statement handle + * @param index - Bind position + * + * @note + * Index starts at 1. + * + * @note + * Bind handle are created sequentially. For example, the third call to a + * OCI_BindXXX() generates a bind handle of index 3. + * + * @return + * The bind handle or NULL if index is out of bounds + * + */ + +OCI_EXPORT OCI_Bind * OCI_API OCI_GetBind +( + OCI_Statement *stmt, + unsigned int index +); + +/** + * @brief + * Return a bind handle from its name + * + * @param stmt - Statement handle + * @param name - Bind variable name + * + * @note + * Bind names must include a semicolon at the beginning. + * + * @return + * The bind handle or NULL if not found + * + */ + +OCI_EXPORT OCI_Bind * OCI_API OCI_GetBind2 +( + OCI_Statement *stmt, + const otext *name +); + +/** +* @brief +* Return the index of the bind from its name belonging to the given statement +* +* @param stmt - Statement handle +* @param name - Bind variable name +* +* @warning +* The bind name is case insensitive +* +* @note +* Bind indexes start with 1 in OCILIB +* +* @return +* Bind index on success or zero if the bind does not exists or if statement is NULL +* +*/ + +OCI_EXPORT unsigned int OCI_API OCI_GetBindIndex +( + OCI_Statement *stmt, + const otext *name +); + +/** + * @brief + * Return the name of the given bind + * + * @param bnd - Bind handle + * + */ + +OCI_EXPORT const otext * OCI_API OCI_BindGetName +( + OCI_Bind *bnd +); + + +/** + * @brief + * Set the direction mode of a bind handle + * + * @param bnd - Bind handle + * @param direction - direction mode + * + * @note + * Possible values for parameter 'direction' : + * - OCI_BDM_IN : input values (not modified by the server) + * - OCI_BDM_OUT : output values (modified by the server) + * - OCI_BDM_IN_OUT : input and output values + * + * @note + * Default value is OCI_BDM_IN_OUT + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_BindSetDirection +( + OCI_Bind *bnd, + unsigned int direction +); + +/** + * @brief + * Get the direction mode of a bind handle + * + * @param bnd - Bind handle + * + * @note + * see OCI_BindSetDirection() for more details + * + * return the bind direction mode on success otherwise OCI_UNKNWON + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_BindGetDirection +( + OCI_Bind *bnd +); + +/** + * @brief + * Return the OCILIB type of the given bind + * + * @param bnd - Bind handle + * + * @note + * Possible values are : + * + * - OCI_CDT_NUMERIC : short, int, long long, float, double + * - OCI_CDT_DATETIME : OCI_Date * + * - OCI_CDT_TEXT : otext * + * - OCI_CDT_LONG : OCI_Long * + * - OCI_CDT_CURSOR : OCI_Statement * + * - OCI_CDT_LOB : OCI_Lob * + * - OCI_CDT_FILE : OCI_File * + * - OCI_CDT_TIMESTAMP : OCI_Timestamp * + * - OCI_CDT_INTERVAL : OCI_Interval * + * - OCI_CDT_RAW : void * + * - OCI_CDT_OBJECT : OCI_Object * + * - OCI_CDT_COLLECTION : OCI_Coll * + * - OCI_CDT_REF : OCI_Ref * + * - OCI_CDT_BOOLEAN : boolean + * + * @return + * The column type or OCI_CDT_UNKNOWN on error + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_BindGetType +( + OCI_Bind *bnd +); + +/** + * @brief + * Return the OCILIB object subtype of the given bind + * + * @param bnd - Bind handle + * + * @note + * * This call is valid for the following OCILIB types: + * - OCI_CDT_NUMERIC + * - OCI_CDT_LONG + * - OCI_CDT_LOB + * - OCI_CDT_FILE + * - OCI_CDT_TIMESTAMP + * - OCI_CDT_INTERVAL + * + * For numeric binds the possible values are: + * - OCI_NUM_SHORT + * - OCI_NUM_INT + * - OCI_NUM_BIGINT + * - OCI_NUM_USHORT + * - OCI_NUM_UINT + * - OCI_NUM_BIGUINT + * - OCI_NUM_DOUBLE + * - OCI_NUM_FLOAT + * - OCI_NUM_NUMBER + * + * For OCI_Long type the possible values are: + * - OCI_BLONG + * - OCI_CLONG + * + * For OCI_Lob type the possible values are: + * - OCI_BLOB + * - OCI_CLOB + * - OCI_NCLOB + * + * For OCI_File type the possible values are: + * - OCI_BFILE + * - OCI_CFILE + * + * For OCI_Timestamp type the possible values are: + * - OCI_TIMESTAMP + * - OCI_TIMESTAMP_TZ + * - OCI_TIMESTAMP_LTZ + * + * For OCI_Interval type the possible values are: + * - OCI_INTERVAL_YM + * - OCI_INTERVAL_DS + * + * @note + * For all other OCILIB types, it returns OCI_UNKNOWN + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_BindGetSubtype +( + OCI_Bind *bnd +); + +/** + * @brief + * Return the number of elements of the bind handle + * + * @param bnd - Bind handle + * + * @return + * - For single binds, it returns 1 + * - For array binds, it returns the number of element in the array + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_BindGetDataCount +( + OCI_Bind *bnd +); + +/** + * @brief + * Return the user defined data associated with a bind handle + * + * @param bnd - Bind handle + * + * @return + * - The pointer to variable/array passed to an OCI_BindXXX() or + * OCI_BindArrayOfXXX() call + * + */ + +OCI_EXPORT void * OCI_API OCI_BindGetData +( + OCI_Bind *bnd +); + +/** + * @brief + * Return the statement handle associated with a bind handle + * + * @param bnd - bind handle + * + */ + +OCI_EXPORT OCI_Statement * OCI_API OCI_BindGetStatement +( + OCI_Bind *bnd +); + +/** + * @brief + * Set the actual size of the element held by the given bind handle + * + * @param bnd - bind handle + * @param size - data size + * + * @note + * This call is not mandatory and should ONLY be called for RAWs binds to set + * the real size of the given data if different from the expected column or + * parameter size + * + * @note + * It works as well with string based PL/SQL tables (in or in/out but NOT out) + * even if it's not necessary. + * + * @warning + * For binds of type OCI_CDT_TEXT (strings), the parameter 'size' is expressed in + * number of characters. + * + * @return + * Data size if the bind type is listed above otherwise 0. + * + */ + +OCI_EXPORT boolean OCI_API OCI_BindSetDataSize +( + OCI_Bind *bnd, + unsigned int size +); + +/** + * @brief + * Set the size of the element at the given position in + * the bind input array + * + * @param bnd - bind handle + * @param position - Position in the array + * @param size - data size + * + * @note + * See OCI_BindSetDataSize() for supported data types + * + * @warning + * Before execution, it returns the max default size for the bind and not the real + * data size, unless a custom size has been set with OCI_BindSetDataSizeXXX() + * After execution, it returns the real data size. + * + * @warning + * For binds of type OCI_CDT_TEXT (strings), the parameter 'size' is expressed in + * number of characters. + * + * @return + * Data size if the bind type is listed above otherwise 0. + * + */ + +OCI_EXPORT boolean OCI_API OCI_BindSetDataSizeAtPos +( + OCI_Bind *bnd, + unsigned int position, + unsigned int size +); + +/** + * @brief + * Return the actual size of the element held by the given bind handle + * + * @param bnd - bind handle + * + * @note + * See OCI_BindSetDataSize() for supported data types + * + * @warning + * For binds of type OCI_CDT_TEXT (strings), the returned value is expressed in + * number of characters. + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_BindGetDataSize +( + OCI_Bind *bnd +); + +/** + * @brief + * Return the actual size of the element at the given position in + * the bind input array + * + * @param bnd - bind handle + * @param position - Position in the array + * + * @note + * See OCI_BindSetDataSize() for supported data types + * + * @warning + * For binds of type OCI_CDT_TEXT (strings), the returned value is expressed in + * number of characters. + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_BindGetDataSizeAtPos +( + OCI_Bind *bnd, + unsigned int position +); + +/** + * @brief + * Set the bind variable to null + * + * @param bnd - Bind handle + * + * @note + * There is no notion of null value in C. + * It's necessary to explicitly tell Oracle that the bind has a null value. + * It must be done before an OCI_Execute() call + * + * @note + * For handled based data types (non scalar types), OCILIB performs an extra + * check on handles and set the bind status to null is the handle is null + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_BindSetNull +( + OCI_Bind *bnd +); + +/** + * @brief + * Set to null the entry in the bind variable input array + * + * @param bnd - Bind handle + * @param position - Position in the array + * + * @note + * There is no notion of null value in C. + * It's necessary to explicitly tell Oracle that the bind has a null value. + * It must be done before an OCI_Execute() call + * + * @warning + * Position starts with 1 + * + * @note + * For handled based data types (non scalar types), OCILIB performs an extra + * check on handles and set the bind status to null is the handle is null + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_BindSetNullAtPos +( + OCI_Bind *bnd, + unsigned int position +); + +/** + * @brief + * Set the bind variable to NOT null + * + * @param bnd - Bind handle + * + * @note + * There is no notion of null value in C. + * It's necessary to explicitly tell Oracle that the bind has a null value. + * It must be done before an OCI_Execute() call + * + * @note + * For handled based data types (non scalar types), OCILIB performs an extra + * check on handles and set the bind status to null is the handle is null + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_BindSetNotNull +( + OCI_Bind *bnd +); + +/** + * @brief + * Set to NOT null the entry in the bind variable input array + * + * @param bnd - Bind handle + * @param position - Position in the array + * + * @note + * There is no notion of null value in C. + * It's necessary to explicitly tell Oracle that the bind has a null value. + * It must be done before an OCI_Execute() call + * + * @warning + * Position starts with 1 + * + * @note + * For handled based data types (non scalar types), OCILIB performs an extra + * check on handles and set the bind status to null is the handle is null + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_BindSetNotNullAtPos +( + OCI_Bind *bnd, + unsigned int position +); + +/** + * @brief + * Check if the current value of the binded variable is marked as NULL + * + * @param bnd - Bind handle + * + * @return + * TRUE if it's null otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_BindIsNull +( + OCI_Bind *bnd +); + +/** + * @brief + * Check if the current entry value at the given index of the binded array + * is marked as NULL + * + * @param bnd - Bind handle + * @param position - Position in the array + * + * @warning + * Position starts with 1 + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_BindIsNullAtPos +( + OCI_Bind *bnd, + unsigned int position +); + +/** + * @brief + * Set the charset form of the given character based bind variable + * + * @param bnd - Bind handle + * @param csfrm - charset form + * + * @note + * Possible values are : + * + * - OCI_CSF_DEFAULT : the column has default charset + * - OCI_CSF_NATIONAL: the column has national charset + * + * @note + * This call has to be made after OCI_Prepare() but before OCI_Execute() + * + * @warning + * This call does nothing : + * - if the csform is out of range + * - if the bind type is not OCI_CFT_TEXT or OCI_CDT_LONG + * + * @return + * TRUE on success otherwise FALSE + * + */ + +boolean OCI_API OCI_BindSetCharsetForm +( + OCI_Bind *bnd, + unsigned int csfrm +); + +/** + * @brief + * Get the allocaton mode of a bind handle + * + * @param bnd - Bind handle + * + * @note + * Possible values are : + * - OCI_BAM_EXTERNAL : bind variable is allocated by user code + * - OCI_BAM_INTERNAL : bind variable is allocated internally + * + * return the allocaton mode on success otherwise OCI_UNKNWON + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_BindGetAllocationMode +( + OCI_Bind *bnd +); + +/** + * @} + */ + +/** + * @defgroup OcilibCApiFetching Fetching data + * @{ + * + * OCILIB offers a really easy and smart mechanism to fetch data from a SQL Statement. + * It looks like what's found in JDBC and other object oriented databases frameworks. + * + * ONLY the following statements can return resultsets that can be fetched by host programs: + * - Statements executing SQL SELECT + * - Statements executing SQL UPDATE/DELETE using a RETURNING INTO clause + * - Statements binded to PL/SQL OPEN FOR argument + * - Statements binded to PL/SQL procedure OUT variables + * - Statements implicitly returned from PL/SQL procedure or blocks (new feature in Oracle 12cR1) using + * DBMS_SQL.RETURN_RESULT() + * + * These resultsets are encapsulated in OCILIB by OCI_Resultset objects. + * + * Thus, after any successful call to an OCI_Executexxx() function that executed + * a fetchable statement or filled output bind variables, the resultset can be + * retrieved by calling OCI_GetResultset() + * + * The creation of a OCI_Resultset object consists in : + * + * - Describing the output columns of the resultset + * - Allocating memory to hold the content data + * + * OCILIB supports multi-row fetching for increasing performances. Instead of + * fetching data row by row from the server (that induces lots of round-trips + * between the client and the server), the library prefetches data chunk by + * chunks (default is 20 rows). + * So, less network traffic and better performances. + * These mechanisms are completely hidden from the application which fetches the + * resultset row by row. + * + * Once the Resultset handle is retrieved : + * + * - It can be fetched by calling OCI_FetchNext() as long as it returns TRUE. + * - To retrieve the value of a column, call OCI_GetXXXX() where XXXX is the + * type of data you want to fetch. + * + * @note + * In case of a statement that has executed PL/SQL calls or blocks returning implicit resultsets: + * - OCI_GetResultset() return the first available resultset + * - OCI_GetNextResultset() return the next available resultset until no more resultset available + * + * @par Scrollable Resultsets + * + * Oracle 9i introduced scrollable cursors (resultsets in OCILIB) that can be + * fetched: + * + * - Sequentially in both directions: OCI_FetchPrev() and OCI_FetchNext() + * - To a relative position in the resultset: OCI_FetchSeek() with OCI_SFD_RELATIVE + * - To an absolute position in the resultset: OCI_FetchSeek() with OCI_SFD_ABOSLUTE + * - To the first or last row in the resultset: OCI_FetchFirst() and OCI_FetchLast() + * + * Scrollable statements uses more server and client resources and should only + * be used when necessary. + * + * Resultsets are 'forward only' by default. Call OCI_SetFetchMode() with + * OCI_SFM_SCROLLABLE to enable scrollable resultsets for a given statement. + * + * @warning + * Any use of scrollable fetching functions with a resultset that depends on a + * statement with fetch mode set to OCI_SFM_DEFAULT will fail ! + * + * @warning + * If you intend to use OCI_FetchSeek() on a scrollable statement and if any of the + * selected columns is a ref cursor or a nested table, OCILIB will internally set the + * resultset internal array size to 1 and thus ignore any values set using OCI_SetFetchSize() + * This is performed due to an Oracle bug. + * + * @note + * If the column internal data does not match the requested type, OCILIB tries + * to convert the data when it's possible and throws an error if not. + * + * The properties (columns names, types ...) of the resultset are accessible + * through a set of APIs. + * + * @par Implicit conversion to string types + * + * OCI_GetString() performs an implicit conversion from ANY Oracle types: + * + * - Numerics (based on the current connection handle numeric format) + * - Binary doubles and floats (using the standard C Library functions) + * - OCI_Date : uses OCI_DateToText() with current connection date format + * - OCI_Timestamp : uses OCI_TimestampToText() with current connection date format + * - OCI_Interval : uses OCI_IntervalToText() with Oracle default format + * - OCI_Coll : uses OCI_CollToText() + * - OCI_Object : uses OCI_ObjectToText() + * - OCI_Ref : uses OCI_RefToText() + * - OCI_File : returns "$(folder)/$(filename)" - no content returned + * - OCI_Lob : see note above for binary types + * - OCI_Long : see note above for binary types + * - RAWs : see note above for binary types + * + * @note + * For RAWs and BLOBs attributes, their binary values are converted to hexadecimal strings + * For LONG and CLOBs/NCLOBSs attributes, the whole string content is returned + * + * @note + * The following OCILIB types are not supported for implicit conversion: + * - OCI_Statement + * + * @warning + * For Dates and numerics types, OCILIB uses OCI client calls to perform + * the conversion. + * For binary double and binary floats data types, OCI client functions cannot + * handle the full double range of values. Thus, OCILIB is using the + * standard C library to convert theses data types to string + * + * @par Fetching rows into user structures + * + * It is possible to fetch a complete row into a user defined structure. + * Each column of the resultset is mapped to a structure member. + * The mapping rules are : + * - LOBs (CLOB, NCLOB, BLOB) : OCI_Lob * + * - DATE : OCI_Date * + * - TIMESTAMPS : OCI_Timestamp * + * - INTERVALS : OCI_Interval * + * - LONG, LONG RAW : OCI_Long * + * - REFs : OCI_Ref * + * - CURSOR, RESULSET : OCI_Statement * + * - OBJECTS, UDT : OCI_Object * + * - Character columns (CHAR,VARCHAR, etc..) : otext * + * - All NUMERIC types : + * - default : big_int + * - user defined (see OCI_SetStructNumericType()) + * + * See OCI_GetStruct() and OCI_SetStructNumericType() for more details + * + * @par Fetch Example + * @include fetch.c + * + * @par Fetch Rows into user structures Example + * @include fetch_struct.c + * + * @par Meta data Example + * @include meta.c + * + * @par Ref cursor Example + * @include cursor.c + * + * @par Implicit resultset Example + * @include implicit_resultset.c + * + * @par Scrollable resultset Example + * @include scroll.c + * + */ + +/** + * @brief + * Retrieve the resultset handle from an executed statement + * + * @param stmt - Statement handle + * + * @note + * See @ref OcilibCApiFetching for more details about what statements can return resultsets + * + * @warning + * If the statement has not been prepared and executed, no resultset will be returned + * + * @return + * A resultset handle on success otherwise NULL + * + */ + +OCI_EXPORT OCI_Resultset * OCI_API OCI_GetResultset +( + OCI_Statement *stmt +); + +/** + * @brief + * Free the statement resultsets + * + * @param stmt - Statement handle + * + * @note + * This call is optional. Resultsets are automatically freed when the + * statement is destroyed or when it's reused. + * + * @note + * This function has been introduced for releasing big resultsets when the + * application wants to keep the statement alive and doesn't know when it + * will be destroyed. + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ReleaseResultsets +( + OCI_Statement *stmt +); + +/** + * @brief + * Fetch the next row of the resultset + * + * @param rs - Resultset handle + * + * @note + * OCI_FetchNext() works for normal and scrollable resultsets + * + * @return + * TRUE on success otherwise FALSE if : + * - Empty resultset + * - Last row already fetched + * - An error occurred + * + */ + +OCI_EXPORT boolean OCI_API OCI_FetchNext +( + OCI_Resultset *rs +); + +/** + * @brief + * Fetch the previous row of the resultset + * + * @param rs - Resultset handle + * + * @note + * OCI_FetchPrev() works ONLY for scrollable resultsets + * + * @return + * TRUE on success otherwise FALSE if : + * - Empty resultset + * - First row already fetched + * - An error occurred + * + */ + +OCI_EXPORT boolean OCI_API OCI_FetchPrev +( + OCI_Resultset *rs +); + +/** + * @brief + * Fetch the first row of the resultset + * + * @param rs - Resultset handle + * + * @note + * OCI_FetchFirst() works ONLY for scrollable resultsets + * + * @return + * TRUE on success otherwise FALSE if : + * - Empty resultset + * - An error occurred + *f + */ + +OCI_EXPORT boolean OCI_API OCI_FetchFirst +( + OCI_Resultset *rs +); + +/** + * @brief + * Fetch the last row of the resultset + * + * @param rs - Resultset handle + * + * @note + * OCI_FetchLast() works ONLY for scrollable resultsets + * + * @return + * TRUE on success otherwise FALSE if: + * - Empty resultset + * - An error occurred + * + */ + +OCI_EXPORT boolean OCI_API OCI_FetchLast +( + OCI_Resultset *rs +); + +/** + * @brief + * Custom Fetch of the resultset + * + * @param rs - Resultset handle + * @param mode - Fetch direction + * @param offset - Fetch offset + * + * @note + * Possible values for 'direction' parameter are: + * - OCI_SFD_ABSOLUTE + * - OCI_SFD_RELATIVE + * + * @note + * OCI_FetchSeek() works ONLY for scrollable resultsets + * + * @warning + * If you intend to use OCI_FetchSeek() on a scrollable statement and if any of the + * selected columns is a ref cursor or a nested table, you must set the fetching size + * to 1 using OCI_SetFetchSize() before calling OCI_GetResultset() + * Otherwise OCI_FetchSeek() will fails with a OCI-10002 error + * + * @return + * TRUE on success otherwise FALSE if: + * - Empty resultset + * - An error occurred + * - OCI_SetFetchMode() has not been called with OCI_SFM_SCROLLABLE + * + */ + +OCI_EXPORT boolean OCI_API OCI_FetchSeek +( + OCI_Resultset *rs, + unsigned int mode, + int offset +); + +/** + * @brief + * Retrieve the number of rows fetched so far + * + * @param rs - Resultset handle + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_GetRowCount +( + OCI_Resultset *rs +); + +/** + * @brief + * Retrieve the current row number + * + * @param rs - Resultset handle + * + * @note + * - OCI_GetCurrentRow() returns the current row number starting from 1 + * - If the resultset has not been fetched or if the resultset is empty, it returns 0 + * - If the resultset has been fully fetched, it returns the last fetched row number + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_GetCurrentRow +( + OCI_Resultset *rs +); + +/** + * @brief + * Return the number of columns in the resultset + * + * @param rs - Resultset handle + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_GetColumnCount +( + OCI_Resultset *rs +); + +/** + * @brief + * Return the column object handle at the given index in the resultset + * + * @param rs - Resultset handle + * @param index - Column position + * + * @return + * - Column handle on success + * - NULL if index is out of bounds or on error + * + */ + +OCI_EXPORT OCI_Column * OCI_API OCI_GetColumn +( + OCI_Resultset *rs, + unsigned int index +); + +/** + * @brief + * Return the column object handle from its name in the resultset + * + * @param rs - Resultset handle + * @param name - Column name + * + * @note + * The column name is case insensitive + * + * @return + * - Column handle on success or + * - NULL if no column found with the given name or on error + * + */ + +OCI_EXPORT OCI_Column * OCI_API OCI_GetColumn2 +( + OCI_Resultset *rs, + const otext *name +); + +/** + * @brief + * Return the index of the column in the result from its name + * + * @param rs - Resultset handle + * @param name - Column name + * + * @note + * The column name is case insensitive + * + * @note + * Column indexes start with 1 in OCILIB + * + * @return + * Column index on success or zero on error + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_GetColumnIndex +( + OCI_Resultset *rs, + const otext *name +); + +/** + * @brief + * Return the name of the given column + * + * @param col - Column handle + * + */ + +OCI_EXPORT const otext * OCI_API OCI_ColumnGetName +( + OCI_Column *col +); + +/** + * @brief + * Return the type of the given column + * + * @param col - Column handle + * + * @note + * Possible values are : + * + * - OCI_CDT_NUMERIC : short, int, long long, float, double + * - OCI_CDT_DATETIME : OCI_Date * + * - OCI_CDT_TEXT : otext * + * - OCI_CDT_LONG : OCI_Long * + * - OCI_CDT_CURSOR : OCI_Statement * + * - OCI_CDT_LOB : OCI_Lob * + * - OCI_CDT_FILE : OCI_File * + * - OCI_CDT_TIMESTAMP : OCI_Timestamp * + * - OCI_CDT_INTERVAL : OCI_Interval * + * - OCI_CDT_RAW : void * + * - OCI_CDT_OBJECT : OCI_Object * + * - OCI_CDT_COLLECTION : OCI_Coll * + * - OCI_CDT_REF : OCI_Ref * + * - OCI_CDT_BOOLEAN : boolean + * + * @return + * The column type or OCI_CDT_UNKNOWN if index is out of bounds + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_ColumnGetType +( + OCI_Column *col +); + +/** + * @brief + * Return the charset form of the given column + * + * @param col - Column handle + * + * @note + * Possible values are : + * - OCI_CSF_NONE : the column is not an character or lob column + * - OCI_CSF_DEFAULT : the column has server default charset + * - OCI_CSF_NATIONAL : the column has national server charset + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_ColumnGetCharsetForm +( + OCI_Column *col +); + +/** + * @brief + * Return the Oracle SQL type name of the column data type + * + * @param col - Column handle + * + * @note + * For possible values, consults Oracle Documentation + * + */ + +OCI_EXPORT const otext * OCI_API OCI_ColumnGetSQLType +( + OCI_Column *col +); + +/** + * @brief + * Return the Oracle SQL Full name including precision and size of the + * column data type + * + * @param col - Column handle + * @param buffer - buffer to store the full column type name and size + * @param len - max size of the buffer in characters + * + * @note + * This function returns a description that matches the one given by SQL*Plus + * + * @note + * Return the number of characters written into the buffer + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_ColumnGetFullSQLType +( + OCI_Column *col, + otext *buffer, + unsigned int len +); + +/** + * @brief + * Return the size of the column + * + * @note + * For all types, the size is expressed is bytes, excepted for character + * based columns that were created with a character based size or of type NCHAR/NVARCHAR + * + * @param col - Column handle + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_ColumnGetSize +( + OCI_Column *col +); + +/** + * @brief + * Return the scale of the column for numeric columns + * + * @param col - Column handle + * + */ + +OCI_EXPORT int OCI_API OCI_ColumnGetScale +( + OCI_Column *col +); + +/** + * @brief + * Return the precision of the column for numeric columns + * + * @param col - Column handle + * + */ + +OCI_EXPORT int OCI_API OCI_ColumnGetPrecision +( + OCI_Column *col +); + +/** + * @brief + * Return the fractional precision of the column for timestamp and interval columns + * + * @param col - Column handle + * + */ + +OCI_EXPORT int OCI_API OCI_ColumnGetFractionalPrecision +( + OCI_Column *col +); + +/** + * @brief + * Return the leading precision of the column for interval columns + * + * @param col - Column handle + * + */ + +OCI_EXPORT int OCI_API OCI_ColumnGetLeadingPrecision +( + OCI_Column *col +); + +/** + * @brief + * Return the nullable attribute of the column + * + * @param col - Column handle + * + * @return + * Return TRUE if the column is nullable otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ColumnGetNullable +( + OCI_Column *col +); + +/** + * @brief + * Return TRUE if the length of the column is character-length or FALSE if + * it is byte-length + * + * @param col - Column handle + * + * @note + * This was introduced in Oracle 9i. So for version that are not supporting this + * property, it always return FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ColumnGetCharUsed +( + OCI_Column *col +); + +/** + * @brief + * Return the column property flags + * + * @param col - Column handle + * + * For flags are: + * - OCI_CPF_NONE : The column has no flags or the OCI client does not support this call + * - OCI_CPF_IS_IDENTITY : + * - If Set, the column is an IDENTITY column + * - Otherwise, it is not an IDENTITY column + * - OCI_CPF_IS_GEN_ALWAYS (only if OCI_CPF_IS_IDENTITY is set) : + * - If set, means that the value is "ALWAYS GENERATED" + * - Otherwise mens that the value is "GENERATED BY" + * - OCI_CPF_IS_GEN_BY_DEFAULT_ON_NULL (only if OCI_CPF_IS_IDENTITY is set): + * - If set, means that the value is generated by default on NULL + * + * @note + * This was introduced in Oracle 12cR1. + * It is currently used for identifying Identity columns. + * For earlier versions, it always return OCI_CPF_NONE + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_ColumnGetPropertyFlags +( + OCI_Column *col +); + +/** +* @brief +* Return the column collation ID +* +* @param col - Column handle +* +* Possible values: +* - OCI_CCI_NONE +* - OCI_CCI_NLS_COMP +* - OCI_CCI_NLS_SORT +* - OCI_CCI_NLS_SORT_CI +* - OCI_CCI_NLS_SORT_AI +* - OCI_CCI_NLS_SORT_CS +* - OCI_CCI_NLS_SORT_VAR1 +* - OCI_CCI_NLS_SORT_VAR1_CI +* - OCI_CCI_NLS_SORT_VAR1_AI +* - OCI_CCI_NLS_SORT_VAR1_CS +* - OCI_CCI_BINARY +* - OCI_CCI_BINARY_CI +* - OCI_CCI_BINARY_AI +* +* @note +* This was introduced in Oracle 12cR2. +* For earlier versions, it always return OCI_CCI_NONE +* +*/ + +OCI_EXPORT unsigned int OCI_API OCI_ColumnGetCollationID +( + OCI_Column *col +); + +/** + * @brief + * Return the type information object associated to the column + * + * @param col - Column handle + * + * @note + * This call is used only for Named Object typed and collection columns. + * It returns NULL if the column is not a Named Object or a collection. + * + */ + +OCI_EXPORT OCI_TypeInfo * OCI_API OCI_ColumnGetTypeInfo +( + OCI_Column *col +); + +/** + * @brief + * Return the OCILIB object subtype of a column + * + * @param col - Column handle + * + * @note + * This call is valid for the following OCILIB types: + * + * - OCI_CDT_LONG + * - OCI_CDT_LOB + * - OCI_CDT_FILE + * - OCI_CDT_TIMESTAMP + * - OCI_CDT_INTERVAL + * - OCI_CDT_NUMERIC + * + * For OCI_Long type the possible values are: + * - OCI_BLONG + * - OCI_CLONG + * + * For OCI_Lob type the possible values are: + * - OCI_BLOB + * - OCI_CLOB + * - OCI_NCLOB + * + * For OCI_File type the possible values are: + * - OCI_BFILE + * - OCI_CFILE + * + * For OCI_Timestamp type the possible values are: + * - OCI_TIMESTAMP + * - OCI_TIMESTAMP_TZ + * - OCI_TIMESTAMP_LTZ + * + * For OCI_Interval type the possible values are: + * - OCI_INTERVAL_YM + * - OCI_INTERVAL_DS + * + * For numeric columns the possible values are: + * - OCI_NUM_SHORT + * - OCI_NUM_INT + * - OCI_NUM_BIGINT + * - OCI_NUM_USHORT + * - OCI_NUM_UINT + * - OCI_NUM_BIGUINT + * - OCI_NUM_DOUBLE + * - OCI_NUM_FLOAT + * - OCI_NUM_NUMBER + * + * @warning + * For numeric columns, the value may be not accurate at all! + * OCI does not allow to find out the real SQL precise type of an numeric column (int, real, ...). + * OCI based libraries can only 'guess' some types in some situations : float, binary_float, binary_float, number. + * For example: + * - with the statement 'select 101 from dual', OCI would report numeric type NUMBER. + * - if a column is declared as "INT", OCI would report also NUMBER. + * + * + * @note + * For all other OCILIB types, it returns OCI_UNKNOWN + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_ColumnGetSubType +( + OCI_Column *col +); + +/** + * @brief + * set the numeric data type of the given structure member (identified from position in the + * resultset) to retrieve when calling OCI_GetStruct() + * + * @param rs - Resultset handle + * @param index - Column position + * @param type - Numeric type + * + * @note + * Possible values for parameter 'type' : + * - OCI_NUM_SHORT + * - OCI_NUM_USHORT + * - OCI_NUM_INT + * - OCI_NUM_UINT + * - OCI_NUM_BIGINT + * - OCI_NUM_BIGUINT + * - OCI_NUM_DOUBLE + * - OCI_NUM_FLOAT + * - OCI_NUM_NUMBER + * + * @return + * Return TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_SetStructNumericType +( + OCI_Resultset *rs, + unsigned int index, + unsigned int type +); + +/** + * @brief + * set the numeric data type of the given structure member (identified from column name in the + * resultset) to retrieve when calling OCI_GetStruct() + * + * @param rs - Resultset handle + * @param name - Column name + * @param type - Numeric type + * + * @note + * Possible values for parameter 'type' : + * - OCI_NUM_SHORT + * - OCI_NUM_USHORT + * - OCI_NUM_INT + * - OCI_NUM_UINT + * - OCI_NUM_BIGINT + * - OCI_NUM_BIGUINT + * - OCI_NUM_DOUBLE + * - OCI_NUM_FLOAT + * - OCI_NUM_NUMBER + * + * @return + * Return TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_SetStructNumericType2 +( + OCI_Resultset *rs, + const otext *name, + unsigned int type +); + +/** + * @brief + * Return the row columns values into a single structure + * + * @param rs - Resultset handle + * @param row_struct - pointer to user row structure + * @param row_struct_ind - pointer to user indicator structure + * + * @note + * Structure members values are contextual to the current row. + * The returned values can get out of scope when the current row + * changes when calling any OCI_FecthXXX() calls + * + * @par User row structure + * + * The user structure must have the same members than the resultset. + * Each column in the resultset must have its equivalent in the structure. + * Fields must be in the same order. + * + * The mapping rules are : + * + * - LOBs (CLOB, NCLOB, BLOB) : OCI_Lob * + * - DATE : OCI_Date * + * - TIMESTAMPS : OCI_Timestamp * + * - INTERVALS : OCI_Interval * + * - LONG, LONG RAW : OCI_Long * + * - REFs : OCI_Ref * + * - CURSOR, RESULSET : OCI_Statement * + * - OBJECTS, UDT : OCI_Object * + * - Character columns (CHAR,VARCHAR, etc..) : otext * + * - All NUMERIC types : + * - default : big_int + * - user defined (see OCI_SetStructNumericType()) + * + * The user structure pointer is not mandatory + * + * @par User row indicator structure + + * This structure must have one boolean field per column in + * the resultset and respect in the same member order. + * + * If the value of the given member is TRUE, it means the value in + * the user row structure is NOT NULL, otherwise its NULL + * + * The user indicator structure pointer is mandatory + * + * @return + * Return TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_GetStruct +( + OCI_Resultset *rs, + void *row_struct, + void *row_struct_ind +); + +/** +* @brief +* Return the current Number value of the column at the given index in the resultset +* +* @param rs - Resultset handle +* @param index - Column position +* +* @note +* Column position starts at 1. +* +* @return +* The column current row value or 0 if index is out of bounds +* +*/ +OCI_EXPORT OCI_Number * OCI_API OCI_GetNumber +( + OCI_Resultset *rs, + unsigned int index +); + +/** +* @brief +* Return the current number value of the column from its name in the resultset +* +* @param rs - Resultset handle +* @param name - Column name +* +* @note +* The column name is case insensitive +* +* @return +* The column current row value or 0 if no column found with the given name +* +*/ + +OCI_EXPORT OCI_Number * OCI_API OCI_GetNumber2 +( + OCI_Resultset *rs, + const otext *name +); + + +/** + * @brief + * Return the current short value of the column at the given index in the resultset + * + * @param rs - Resultset handle + * @param index - Column position + * + * @note + * Column position starts at 1. + * + * @return + * The column current row value or 0 if index is out of bounds + * + */ + +OCI_EXPORT short OCI_API OCI_GetShort +( + OCI_Resultset *rs, + unsigned int index +); + +/** + * @brief + * Return the current short value of the column from its name in the resultset + * + * @param rs - Resultset handle + * @param name - Column name + * + * @note + * The column name is case insensitive + * + * @return + * The column current row value or 0 if no column found with the given name + * + */ + +OCI_EXPORT short OCI_API OCI_GetShort2 +( + OCI_Resultset *rs, + const otext *name +); + +/** + * @brief + * Return the current unsigned short value of the column at the given index in the resultset + * + * @param rs - Resultset handle + * @param index - Column position + * + * @note + * Column position starts at 1. + * + * @return + * The column current row value or 0 if index is out of bounds + * + */ + +OCI_EXPORT unsigned short OCI_API OCI_GetUnsignedShort +( + OCI_Resultset *rs, + unsigned int index +); + +/** + * @brief + * Return the current unsigned short value of the column from its name in the resultset + * + * @param rs - Resultset handle + * @param name - Column name + * + * @note + * The column name is case insensitive + * + * @return + * The column current row value or 0 if no column found with the given name + * + */ + +OCI_EXPORT unsigned short OCI_API OCI_GetUnsignedShort2 +( + OCI_Resultset *rs, + const otext *name +); + +/** + * @brief + * Return the current integer value of the column at the given index in the resultset + * + * @param rs - Resultset handle + * @param index - Column position + * + * @note + * Column position starts at 1. + * + * @return + * The column current row value or 0 if index is out of bounds + * + */ + +OCI_EXPORT int OCI_API OCI_GetInt +( + OCI_Resultset *rs, + unsigned int index +); + +/** + * @brief + * Return the current integer value of the column from its name in the resultset + * + * @param rs - Resultset handle + * @param name - Column name + * + * @note + * The column name is case insensitive + * + * @return + * The column current row value or 0 if no column found with the given name + * + */ + +OCI_EXPORT int OCI_API OCI_GetInt2 +( + OCI_Resultset *rs, + const otext *name +); + +/** + * @brief + * Return the current unsigned integer value of the column at the given index in the resultset + * + * @param rs - Resultset handle + * @param index - Column position + * + * @note + * Column position starts at 1. + * + * @return + * The column current row value or 0 if index is out of bounds + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_GetUnsignedInt +( + OCI_Resultset *rs, + unsigned int index +); + +/** + * @brief + * Return the current unsigned integer value of the column from its name in the resultset + * + * @param rs - Resultset handle + * @param name - Column name + * + * @note + * The column name is case insensitive + * + * @return + * The column current row value or 0 if no column found with the given name + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_GetUnsignedInt2 +( + OCI_Resultset *rs, + const otext *name +); + +/** + * @brief + * Return the current big integer value of the column at the given index in the resultset + * + * @param rs - Resultset handle + * @param index - Column position + * + * @note + * Column position starts at 1. + * + * @return + * The column current row value or 0 if index is out of bounds + * + */ + +OCI_EXPORT big_int OCI_API OCI_GetBigInt +( + OCI_Resultset *rs, + unsigned int index +); + +/** + * @brief + * Return the current big integer value of the column from its name in the resultset + * + * @param rs - Resultset handle + * @param name - Column name + * + * @note + * The column name is case insensitive + * + * @return + * The column current row value or 0 if no column found with the given name + * + */ + +OCI_EXPORT big_int OCI_API OCI_GetBigInt2 +( + OCI_Resultset *rs, + const otext *name +); + +/** + * @brief + * Return the current unsigned big integer value of the column at the given index in the resultset + * + * @param rs - Resultset handle + * @param index - Column position + * + * @note + * Column position starts at 1. + * + * @return + * The column current row value or 0 if index is out of bounds + * + */ + +OCI_EXPORT big_uint OCI_API OCI_GetUnsignedBigInt +( + OCI_Resultset *rs, + unsigned int index +); + +/** + * @brief + * Return the current unsigned big integer value of the column from its name in the resultset + * + * @param rs - Resultset handle + * @param name - Column name + * + * @note + * The column name is case insensitive + * + * @return + * The column current row value or 0 if no column found with the given name + * + */ + +OCI_EXPORT big_uint OCI_API OCI_GetUnsignedBigInt2 +( + OCI_Resultset *rs, + const otext *name +); + +/** + * @brief + * Return the current string value of the column at the given index in the resultset + * + * @param rs - Resultset handle + * @param index - Column position + * + * @note + * Column position starts at 1. + * + * @note + * OCI_GetString() performs an implicit conversion from the + * following data types: + * + * - Numerics (based on the current connection handle numeric format) + * - Binary doubles and floats (using the standard C Library functions) + * - OCI_Number (based on the current connection handle numeric format) + * - OCI_Date (based on the current connection handle date format) + * - OCI_Timestamp (based on the current connection handle date format) + * - OCI_Interval (based on Oracle default conversion) + * - OCI_Lob (for BLOBs, output is expressed in hexadecimal) + * - OCI_Long (for BLONGs, output is expressed in hexadecimal) + * - OCI_File ("[directory]/[name]" will be output) + * - OCI_Object (Textual SQL string representation) + * - OCI_Coll (Textual SQL string representation) + * - RAW buffer (expressed in hexadecimal) + * - OCI_Statement (SQL statement string or cursor name) + * + * @return + * The column current row value or NULL if index is out of bounds + * + */ + +OCI_EXPORT const otext * OCI_API OCI_GetString +( + OCI_Resultset *rs, + unsigned int index +); + +/** + * @brief + * Return the current string value of the column from its name in the resultset + * + * @param rs - Resultset handle + * @param name - Column name + * + * @note + * The column name is case insensitive + * + * @return + * The column current row value or NULL if no column found with the given name + * + */ + +OCI_EXPORT const otext * OCI_API OCI_GetString2 +( + OCI_Resultset *rs, + const otext *name +); + +/** + * @brief + * Copy the current raw value of the column at the given index into the specified buffer + * + * @param rs - Resultset handle + * @param index - Column position + * @param buffer - Buffer that receive the raw value + * @param len - Max size of the input buffer in bytes + * + * @note + * Column position starts at 1. + * + * @return + * Number of bytes copied into the buffer on SUCCESS otherwise 0 + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_GetRaw +( + OCI_Resultset *rs, + unsigned int index, + void *buffer, + unsigned int len +); + +/** + * @brief + * Copy the current raw value of the column from its name into the specified buffer + * + * @param rs - Resultset handle + * @param name - Column name + * @param buffer - Buffer that receive the raw value + * @param len - Max size of the input buffer + * + * @note + * The column name is case insensitive + * + * @return + * Number of bytes copied into the buffer on SUCCESS otherwise 0 + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_GetRaw2 +( + OCI_Resultset *rs, + const otext *name, + void *buffer, + unsigned int len +); + +/** + * @brief + * Return the current double value of the column at the given index in the resultset + * + * @param rs - Resultset handle + * @param index - Column position + * + * @note + * Column position starts at 1. + * + * @return + * The column current row value or 0.O if index is out of bounds + * + */ + +OCI_EXPORT double OCI_API OCI_GetDouble +( + OCI_Resultset *rs, + unsigned int index +); + +/** + * @brief + * Return the current double value of the column from its name in the resultset + * + * @param rs - Resultset handle + * @param name - Column name + * + * @note + * The column name is case insensitive + * + * @return + * The column current row value or 0.0 if no column found with the given name + * + */ + +OCI_EXPORT double OCI_API OCI_GetDouble2 +( + OCI_Resultset *rs, + const otext *name +); + +/** + * @brief + * Return the current float value of the column at the given index in the resultset + * + * @param rs - Resultset handle + * @param index - Column position + * + * @note + * Column position starts at 1. + * + * @return + * The column current row value or 0.O if index is out of bounds + * + */ + +OCI_EXPORT float OCI_API OCI_GetFloat +( + OCI_Resultset *rs, + unsigned int index +); + +/** + * @brief + * Return the current float value of the column from its name in the resultset + * + * @param rs - Resultset handle + * @param name - Column name + * + * @note + * The column name is case insensitive + * + * @return + * The column current row value or 0.0 if no column found with the given name + * + */ + +OCI_EXPORT float OCI_API OCI_GetFloat2 +( + OCI_Resultset *rs, + const otext *name +); + +/** + * @brief + * Return the current date value of the column at the given index in the resultset + * + * @param rs - Resultset handle + * @param index - Column position + * + * @note + * Column position starts at 1. + * + * @return + * The column current row value or NULL if index is out of bounds + * + */ + +OCI_EXPORT OCI_Date * OCI_API OCI_GetDate +( + OCI_Resultset *rs, + unsigned int index +); + +/** + * @brief + * Return the current date value of the column from its name in the resultset + * + * @param rs - Resultset handle + * @param name - Column name + * + * @return + * The column current row value or NULL if no column found with the given name + * + */ + +OCI_EXPORT OCI_Date * OCI_API OCI_GetDate2 +( + OCI_Resultset *rs, + const otext *name +); + +/** + * @brief + * Return the current timestamp value of the column at the given index in the resultset + * + * @param rs - Resultset handle + * @param index - Column position + * + * @note + * Column position starts at 1. + * + * @return + * The column current row value or NULL if index is out of bounds + * + */ + +OCI_EXPORT OCI_Timestamp * OCI_API OCI_GetTimestamp +( + OCI_Resultset *rs, + unsigned int index +); + +/** + * @brief + * Return the current timestamp value of the column from its name in the resultset + * + * @param rs - Resultset handle + * @param name - Column name + * + * @return + * The column current row value or NULL if no column found with the given name + * + */ + +OCI_EXPORT OCI_Timestamp * OCI_API OCI_GetTimestamp2 +( + OCI_Resultset *rs, + const otext *name +); + +/** + * @brief + * Return the current interval value of the column at the given index in the resultset + * + * @param rs - Resultset handle + * @param index - Column position + * + * @note + * Column position starts at 1. + * + * @return + * The column current row value or NULL if index is out of bounds + * + */ + +OCI_EXPORT OCI_Interval * OCI_API OCI_GetInterval +( + OCI_Resultset *rs, + unsigned int index +); + +/** + * @brief + * Return the current interval value of the column from its name in the resultset + * + * @param rs - Resultset handle + * @param name - Column name + * + * @return + * The column current row value or NULL if no column found with the given name + * + */ + +OCI_EXPORT OCI_Interval * OCI_API OCI_GetInterval2 +( + OCI_Resultset *rs, + const otext *name +); + +/** + * @brief + * Return the current cursor value (Nested table) of the column at the given index in the resultset + * + * @param rs - Resultset handle + * @param index - Column position + * + * @note + * Column position starts at 1. + * + * @return + * The column current row value or NULL if index is out of bounds + * + */ + +OCI_EXPORT OCI_Statement * OCI_API OCI_GetStatement +( + OCI_Resultset *rs, + unsigned int index +); + +/** + * @brief + * Return the current cursor value of the column from its name in the resultset + * + * @param rs - Resultset handle + * @param name - Column name + * + * @return + * The column current row value or NULL if no column found with the given name + * + */ + +OCI_EXPORT OCI_Statement * OCI_API OCI_GetStatement2 +( + OCI_Resultset *rs, + const otext *name +); + +/** + * @brief + * Return the current lob value of the column at the given index in the resultset + * + * @param rs - Resultset handle + * @param index - Column position + * + * @note + * Column position starts at 1. + * + * @return + * The column current row value or NULL if index is out of bounds + * + */ + +OCI_EXPORT OCI_Lob * OCI_API OCI_GetLob +( + OCI_Resultset *rs, + unsigned int index +); + +/** + * @brief + * Return the current lob value of the column from its name in the resultset + * + * @param rs - Resultset handle + * @param name - Column name + * + * @return + * The column current row value or NULL if no column found with the given name + * + */ + +OCI_EXPORT OCI_Lob * OCI_API OCI_GetLob2 +( + OCI_Resultset *rs, + const otext *name +); + +/** + * @brief + * Return the current File value of the column at the given index in the resultset + * + * @param rs - Resultset handle + * @param index - Column position + * + * @note + * Column position starts at 1. + * + * @return + * The column current row value or NULL if index is out of bounds + * + */ + +OCI_EXPORT OCI_File * OCI_API OCI_GetFile +( + OCI_Resultset *rs, + unsigned int index +); + +/** + * @brief + * Return the current File value of the column from its name in the resultset + * + * @param rs - Resultset handle + * @param name - Column name + * + * @return + * The column current row value or NULL if no column found with the given name + * + */ + +OCI_EXPORT OCI_File * OCI_API OCI_GetFile2 +( + OCI_Resultset *rs, + const otext *name +); + +/** + * @brief + * Return the current Object value of the column at the given index in the resultset + * + * @param rs - Resultset handle + * @param index - Column position + * + * @note + * Column position starts at 1. + * + * @return + * The column current row value or NULL if index is out of bounds + * + */ + +OCI_EXPORT OCI_Object * OCI_API OCI_GetObject +( + OCI_Resultset *rs, + unsigned int index +); + +/** + * @brief + * Return the current Object value of the column from its name in the resultset + * + * @param rs - Resultset handle + * @param name - Column name + * + * @return + * The column current row value or NULL if no column found with the given name + * + */ + +OCI_EXPORT OCI_Object * OCI_API OCI_GetObject2 +( + OCI_Resultset *rs, + const otext *name +); + +/** + * @brief + * Return the current Collection value of the column at the given index in the resultset + * + * @param rs - Resultset handle + * @param index - Column position + * + * @note + * Column position starts at 1. + * + * @return + * The column current row value or NULL if index is out of bounds + * + */ + +OCI_EXPORT OCI_Coll * OCI_API OCI_GetColl +( + OCI_Resultset *rs, + unsigned int index +); + +/** + * @brief + * Return the current Collection value of the column from its name in the resultset + * + * @param rs - Resultset handle + * @param name - Column name + * + * @return + * The column current row value or NULL if no column found with the given name + * + */ + +OCI_EXPORT OCI_Coll * OCI_API OCI_GetColl2 +( + OCI_Resultset *rs, + const otext *name +); + +/** + * @brief + * Return the current Ref value of the column at the given index in the resultset + * + * @param rs - Resultset handle + * @param index - Column position + * + * @note + * Column position starts at 1. + * + * @return + * The column current row value or NULL if index is out of bounds + * + */ + +OCI_EXPORT OCI_Ref * OCI_API OCI_GetRef +( + OCI_Resultset *rs, + unsigned int index +); + +/** + * @brief + * Return the current Ref value of the column from its name in the resultset + * + * @param rs - Resultset handle + * @param name - Column name + * + * @return + * The column current row value or NULL if no column found with the given name + * + */ + +OCI_EXPORT OCI_Ref * OCI_API OCI_GetRef2 +( + OCI_Resultset *rs, + const otext *name +); + +/** + * @brief + * Return the current Long value of the column at the given index in the resultset + * + * @param rs - Resultset handle + * @param index - Column position + * + * @note + * Column position starts at 1. + * + * @return + * The column current row value or NULL if index is out of bounds + * + */ + +OCI_EXPORT OCI_Long * OCI_API OCI_GetLong +( + OCI_Resultset *rs, + unsigned int index +); + +/** + * @brief + * Return the current Long value of the column from its name in the resultset + * + * @param rs - Resultset handle + * @param name - Column name + * + * @return + * The column current row value or NULL if no column found with the given name + * + */ + +OCI_EXPORT OCI_Long * OCI_API OCI_GetLong2 +( + OCI_Resultset *rs, + const otext *name +); + +/** + * @brief + * Check if the current row value is null for the column at the given index in the resultset + * + * @param rs - Resultset handle + * @param index - Column position + * + * @note + * Column position starts at 1. + * + * @return + * TRUE if it's null otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_IsNull +( + OCI_Resultset *rs, + unsigned int index +); + +/** + * @brief + * Return the size of the value of the column at the given index in the resultset + * + * @param rs - Resultset handle + * @param index - Column position + * + * @note + * Column position starts at 1. + * + * @warning + * For binds of type OCI_CDT_TEXT (strings), the returned value is expressed in + * number of characters. + * + * @return value size of 0 if the value is NULL + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_GetDataSize +( + OCI_Resultset *rs, + unsigned int index +); + +/** + * @brief + * Return the size of the value of the column from its name in the resultset + * + * @param rs - Resultset handle + * @param name - Column name + * + * @warning + * For binds of type OCI_CDT_TEXT (strings), the returned value is expressed in + * number of characters. + * + * @return value size of 0 if the value is NULL + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_GetDataSize2 +( + OCI_Resultset *rs, + const otext *name +); + +/** + * @brief + * Check if the current row value is null for the column of the given name in the resultset + * + * @param rs - Resultset handle + * @param name - Column name + * + * @return + * TRUE if it's null otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_IsNull2 +( + OCI_Resultset *rs, + const otext *name +); + +/** + * @brief + * Return the statement handle associated with a resultset handle + * + * @param rs - resultset handle + * + */ + +OCI_EXPORT OCI_Statement * OCI_API OCI_ResultsetGetStatement +( + OCI_Resultset *rs +); + +/** + * @brief + * Return the current row data length of the column at the given index in the resultset + * + * @param rs - Resultset handle + * @param index - Column position + * + * @note + * Column position starts at 1. + * + * @return + * The column current row data length or 0 if index is out of bounds + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_GetDataLength +( + OCI_Resultset *rs, + unsigned int index +); + +/** + * @} + */ + +/** + * @defgroup OcilibCApiPlSql PL/SQL Support + * @{ + * + * OCILIB has a strong PL/SQL support : + * + * - Blocks, procedures and function can be used with OCILIB statements. + * - Ref cursors + * - Nested tables + * - Tables (indexed by integer types) + * - Access to the server side output generated by the DBMS_OUTPUT package + * + * Stored procedures/functions calls, blocks declarations are done like regular + * SQL calls using OCI_Prepare(), OCI_Execute(), OCI_ExecuteStmt() and + * OCI_ExecuteStmtFmt() functions. + * + * All PL/SQL statements must: + * + * - start with a 'begin' or 'declare' keyword + * - end with a 'end;' keyword + * + * Binding Host arrays to PL/SQL tables is done with OCI_BindArrayXXX() calls + * + * @par Using a PL/SQL block with OCILIB + * @include plsql_block.c + * + * @par Binding host arrays to PL/SQL tables parameters of a stored procedure + * @include plsql_table.c + * + * @par Retrieve the output generated by the dbms_output package on the server + * @include output.c + * + */ + +/** + * @brief + * Enable the server output + * + * @param con - Connection handle + * @param bufsize - server buffer max size (server side) + * @param arrsize - number of lines to retrieve per server round-trip + * @param lnsize - maximum size of one line + * + * @note + * This call is equivalent to the command 'set serveroutput on' in SQL*PLUS + * + * @note + * 'bufsize' minimum value is 2000, maximum 1000000 with Oracle < 10.2g and can be unlimited above + * + * @note + * 'lnsize' maximum value is 255 with Oracle < 10g R2 and 32767 above + * + * @warning + * If OCI_ServerEnableOutput() is not called, OCI_ServerGetOutput() will return NULL + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ServerEnableOutput +( + OCI_Connection *con, + unsigned int bufsize, + unsigned int arrsize, + unsigned int lnsize +); + +/** + * @brief + * Disable the server output + * + * @param con - Connection handle + * + * @note + * After this call, OCI_ServerGetOutput() will return NULL. + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ServerDisableOutput +( + OCI_Connection *con +); + +/** + * @brief + * Retrieve one line of the server buffer + * + * @param con - Connection handle + * + * @note + * Internally, OCILIB gets the server buffer through an array of lines in + * order to minimize round-trips with the server + * + * @return + * return a server output buffer line or NULL if the server buffer is empty + * + */ + +OCI_EXPORT const otext * OCI_API OCI_ServerGetOutput +( + OCI_Connection *con +); + +/** + * @} + */ + +/** + * @defgroup OcilibCApiCollections Oracle collections (VARRAYS and Nested Tables) + * @{ + * + * OCILIB supports all Oracle collections: + * + * - PL/SQL Tables: only available in PL/SQL, unbounded, sparse arrays of + homogeneous elements. + * - VARRAYS : available in SQL and PL/SQL, they are bounded arrays of + * homogeneous elements + * - Nested Tables: available in SQL and PL/SQL, they are unbounded arrays of + * homogeneous elements and can become sparse through deletions + * + * PL/SQL tables are implemented by binding regular C arrays with the array + * interface (using OCI_BindArrayOfXXX() calls) + * + * VARRAYS and Nested tables are implemented in OCILIB with the type OCI_Coll. + * It's possible to bind and fetch VARRAYS and Nested tables using OCI_Coll handle. + * + * It's also possible to declare local collections based on some database type without using queries + * + * OCI (and thus OCILIB) offers the possibility to access collection elements : + * + * - directly by index (OCI_CollGetElem() and OCI_CollSetElem()) + * - using an iterator (OCI_Iter) to iterate through the collection + * (OCI_IterGetNext(), OCI_IterGetPrev()) + * + * Collection Items are implemented through the type OCI_Elem and use the series + * of calls OCI_ElemGetXXX() and OCI_ElemSetXXX() to manipulate elements + * content values + * + * @par Example + * @include coll.c + * + */ + +/** + * @brief + * Create a local collection instance + * + * @param typinf - Type info handle of the collection type descriptor + * + * @return + * Return the collection object handle on success otherwise NULL on failure + * + */ + +OCI_EXPORT OCI_Coll * OCI_API OCI_CollCreate +( + OCI_TypeInfo *typinf +); + +/** + * @brief + * Free a local collection + * + * @param coll - Collection handle + * + * @warning + * Only collection created with OCI_CollCreate() should be freed + * by OCI_CollFree() + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_CollFree +( + OCI_Coll *coll +); + +/** + * @brief + * Create an array of Collection object + * + * @param con - Connection handle + * @param typinf - Object type (type info handle) + * @param nbelem - number of elements in the array + * + * @note + * see OCI_ObjectCreate() for more details + * + * @return + * Return the Collection handle array on success otherwise NULL on failure + * + */ + +OCI_EXPORT OCI_Coll ** OCI_API OCI_CollArrayCreate +( + OCI_Connection *con, + OCI_TypeInfo *typinf, + unsigned int nbelem +); + +/** + * @brief + * Free an array of Collection objects + * + * @param colls - Array of Collection objects + * + * @warning + * Only arrays of Collection created with OCI_CollArrayCreate() + * should be freed by OCI_CollArrayFree() + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_CollArrayFree +( + OCI_Coll **colls +); + +/** + * @brief + * Assign a collection to another one + * + * @param coll - Destination Collection handle + * @param coll_src - Source Collection handle + * + * @note + * Oracle proceeds to a deep copy of the collection content + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_CollAssign +( + OCI_Coll *coll, + OCI_Coll *coll_src +); + +/** + * @brief + * Return the type info object associated to the collection + * + * @param coll - Collection handle + * + */ + +OCI_EXPORT OCI_TypeInfo * OCI_API OCI_CollGetTypeInfo +( + OCI_Coll *coll +); + +/** + * @brief + * Return the collection type + * + * @param coll - Collection handle + * + * @note + * Current collection types are: + * + * - OCI_COLL_VARRAY: Oracle VARRAY + * - OCI_COLL_NESTED_TABLE: Oracle Nested Table + * + * @return + * Collection type or OCI_UNKNOWN if the collection handle is null + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_CollGetType +( + OCI_Coll *coll +); + +/** + * @brief + * Returns the maximum number of elements of the given collection. + * + * @param coll - Collection handle + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_CollGetMax +( + OCI_Coll *coll +); + +/** + * @brief + * Returns the total number of elements of the given collection. + * + * @param coll - Collection handle + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_CollGetSize +( + OCI_Coll *coll +); + +/** + * @brief + * Returns the current number of elements of the given collection. + * + * @note + * - For VARRAYs, it returns the same value than OCI_CollGetSize() as VARRAYs cannot contains holes + * - For Nested Tables that are spare collections that can have holes, it returns the total number + * of elements minus the total of deleted elements + * + * @param coll - Collection handle + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_CollGetCount +( + OCI_Coll *coll +); + +/** + * @brief + * Trims the given number of elements from the end of the collection + * + * @param coll - Collection handle + * @param nb_elem - Number of elements to trim + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_CollTrim +( + OCI_Coll *coll, + unsigned int nb_elem +); + +/** + * @brief + * clear all items of the given collection + * + * @param coll - Collection handle + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_CollClear +( + OCI_Coll *coll +); + +/** + * @brief + * Return the element at the given position in the collection + * + * @param coll - Collection handle + * @param index - Index of the destination element + * + * @note + * Collection indexes start at position 1. + * + * @return + * Element handle on success otherwise FALSE + * + */ + +OCI_EXPORT OCI_Elem * OCI_API OCI_CollGetElem +( + OCI_Coll *coll, + unsigned int index +); + +/** + * @brief + * Return the element at the given position in the collection + * + * @param coll - Collection handle + * @param index - Index of the destination element + * @param elem - Element handle to hold the collection item data + * + * @note + * Collection indexes start at position 1. + * + * @return + * Element handle on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_CollGetElem2 +( + OCI_Coll *coll, + unsigned int index, + OCI_Elem *elem +); + +/** + * @brief + * Assign the given element value to the element at the given position in + * the collection + * + * @param coll - Collection handle + * @param index - Index of the destination element + * @param elem - Source element handle to assign + * + * @note + * Collection indexes start at position 1. + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_CollSetElem +( + OCI_Coll *coll, + unsigned int index, + OCI_Elem *elem +); + +/** + * @brief + * Append the given element at the end of the collection + * + * @param coll - Collection handle + * @param elem - Element handle to add + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_CollAppend +( + OCI_Coll *coll, + OCI_Elem *elem +); + +/** + * @brief + * Convert a collection handle value to a string + * + * @param coll - Collection handle + * @param size - Destination string length pointer in characters + * @param str - Destination string + * + * @note + * In order to compute the needed string length, call the method with a NULL string + * Then call the method again with a valid buffer + * + * @note + * The resulting string is similar to the SQL*PLUS output for collections + * For RAWs and BLOBs attributes, their binary values are converted to hexadecimal strings + * + * @warning + * This convenient method shall not be used when performance matters. It is usually called twice (buffer length + * computation) and must also care about quotes within strings. + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_CollToText +( + OCI_Coll *coll, + unsigned int *size, + otext *str +); + +/** + * @brief + * Delete the element at the given position in the Nested Table Collection + * + * @param coll - Collection handle + * @param index - Index of the element to delete + * + * @note + * Collection indexes start at position 1. + * + * @warning + * OCI_CollDeleteElem() is only valid for nested tables. + * + * @return + * - if the input collection is a nested table, it returns TRUE if the element + * is successfully deleted otherwise FALSE on error + * - if the input collection is a VARRAY, it always returns FALSE without spawning an exception + * + */ + +OCI_EXPORT boolean OCI_API OCI_CollDeleteElem +( + OCI_Coll *coll, + unsigned int index +); + +/** + * @brief + * Create an iterator handle to iterate through a collection + * + * @param coll - Collection handle + * + * @return + * Return the iterator handle on success otherwise NULL on failure + * + */ + +OCI_EXPORT OCI_Iter * OCI_API OCI_IterCreate +( + OCI_Coll *coll +); + +/** + * @brief + * Free an iterator handle + * + * @param iter - Iterator handle + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_IterFree +( + OCI_Iter *iter +); + +/** + * @brief + * Get the next element in the collection + * + * @param iter - Iterator handle + * + * @return + * Element handle on success otherwise NULL if: + * - Empty collection + * - Iterator already positioned on the last collection element + * - An error occurred + * + */ + +OCI_EXPORT OCI_Elem * OCI_API OCI_IterGetNext +( + OCI_Iter *iter +); + +/** + * @brief + * Get the previous element in the collection + * + * @param iter - Iterator handle + * + * @return + * Element handle on success otherwise NULL if: + * - Empty collection + * - Iterator already positioned on the last collection element + * - An error occurred + * + */ + +OCI_EXPORT OCI_Elem * OCI_API OCI_IterGetPrev +( + OCI_Iter *iter +); + +/** + * @brief + * Get the current element in the collection + * + * @param iter - Iterator handle + * + * @return + * Element handle on success otherwise NULL if: + * - Empty collection + * - Iterator already positioned on the last collection element + * - An error occurred + * + */ + +OCI_EXPORT OCI_Elem * OCI_API OCI_IterGetCurrent +( + OCI_Iter *iter +); + +/** + * @brief + * Create a local collection element instance based on a collection type + * descriptor + * + * @param typinf - Type info handle + * + * @return + * Return the collection element handle on success otherwise NULL on failure + * + */ + +OCI_EXPORT OCI_Elem * OCI_API OCI_ElemCreate +( + OCI_TypeInfo *typinf +); + +/** + * @brief + * Free a local collection element + * + * @param elem - Element handle + * + * @warning + * Only element created with OCI_ElemCreate() should be freed + * by OCI_ElemFree() + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ElemFree +( + OCI_Elem *elem +); + +/** +* @brief +* Return the boolean value of the given collection element +* +* @param elem - Element handle +* +* @warning +* OCI_ElemGetBoolean() returns a valid value only for collection elements of PL/SQL boolean type +* +* @return +* boolean value or FALSE on failure +* +*/ + +OCI_EXPORT boolean OCI_API OCI_ElemGetBoolean +( + OCI_Elem *elem +); + +/** +* @brief +* Return the number value of the given collection element +* +* @param elem - Element handle +* +* @return +* number handle or NULL on failure +* +*/ + +OCI_EXPORT OCI_Number* OCI_API OCI_ElemGetNumber +( + OCI_Elem *elem +); + +/** + * @brief + * Return the short value of the given collection element + * + * @param elem - Element handle + * + * @return + * Short value or 0 on failure + * + */ + +OCI_EXPORT short OCI_API OCI_ElemGetShort +( + OCI_Elem *elem +); + +/** + * @brief + * Return the unsigned short value of the given collection element + * + * @param elem - Element handle + * + * @return + * Unsigned short value or 0 on failure + * + */ + +OCI_EXPORT unsigned short OCI_API OCI_ElemGetUnsignedShort +( + OCI_Elem *elem +); + +/** + * @brief + * Return the int value of the given collection element + * + * @param elem - Element handle + * + * @return + * Int value or 0 on failure + * + */ + +OCI_EXPORT int OCI_API OCI_ElemGetInt +( + OCI_Elem *elem +); + +/** + * @brief + * Return the unsigned int value of the given collection element + * + * @param elem - Element handle + * + * @return + * Unsigned int value or 0 on failure + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_ElemGetUnsignedInt +( + OCI_Elem *elem +); + +/** + * @brief + * Return the big int value of the given collection element + * + * @param elem - Element handle + * + * @return + * Big int value or 0 on failure + * + */ + +OCI_EXPORT big_int OCI_API OCI_ElemGetBigInt +( + OCI_Elem *elem +); + +/** + * @brief + * Return the unsigned big int value of the given collection element + * + * @param elem - Element handle + * + * @return + * Unsigned big int value or 0 on failure + * + */ + +OCI_EXPORT big_uint OCI_API OCI_ElemGetUnsignedBigInt +( + OCI_Elem *elem +); + +/** + * @brief + * Return the Double value of the given collection element + * + * @param elem - Element handle + * + * @return + * Double value or 0 on failure + * + */ + +OCI_EXPORT double OCI_API OCI_ElemGetDouble +( + OCI_Elem *elem +); + +/** + * @brief + * Return the float value of the given collection element + * + * @param elem - Element handle + * + * @return + * Double value or 0 on failure + * + */ + +OCI_EXPORT float OCI_API OCI_ElemGetFloat +( + OCI_Elem *elem +); + +/** + * @brief + * Return the String value of the given collection element + * + * @param elem - Element handle + * + * @return + * String value or NULL on failure + * + */ + +OCI_EXPORT const otext * OCI_API OCI_ElemGetString +( + OCI_Elem *elem +); + +/** + * @brief + * Read the RAW value of the collection element into the given buffer + * + * @param elem - Element handle + * @param value - Buffer to store the RAW value + * @param len - Size of the buffer + * + * @return + * Number of bytes read from the RAW value or 0 on failure + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_ElemGetRaw +( + OCI_Elem *elem, + void *value, + unsigned int len +); + +/** +* @brief +* Return the raw attribute value size of the given element handle +* +* @param elem - Element handle +* +* @return +* size in bytes of the RAW value or 0 on failure or wrong attribute type +* +*/ + +OCI_EXPORT unsigned int OCI_API OCI_ElemGetRawSize +( + OCI_Elem *elem +); + +/** + * @brief + * Return the Date value of the given collection element + * + * @param elem - Element handle + * + * @return + * Date handle or NULL on failure + * + */ + +OCI_EXPORT OCI_Date * OCI_API OCI_ElemGetDate +( + OCI_Elem *elem +); + +/** + * @brief + * Return the Timestamp value of the given collection element + * + * @param elem - Element handle + * + * @return + * Timestamp handle or NULL on failure + * + */ + +OCI_EXPORT OCI_Timestamp * OCI_API OCI_ElemGetTimestamp +( + OCI_Elem *elem +); + +/** + * @brief + * Return the Interval value of the given collection element + * + * @param elem - Element handle + * + * @return + * Interval handle or NULL on failure + * + */ + +OCI_EXPORT OCI_Interval * OCI_API OCI_ElemGetInterval +( + OCI_Elem *elem +); + +/** + * @brief + * Return the Lob value of the given collection element + * + * @param elem - Element handle + * + * @return + * Lob handle or NULL on failure + * + */ + +OCI_EXPORT OCI_Lob * OCI_API OCI_ElemGetLob +( + OCI_Elem *elem +); + +/** + * @brief + * Return the File value of the given collection element + * + * @param elem - Element handle + * + * @return + * File handle or NULL on failure + * + */ + +OCI_EXPORT OCI_File * OCI_API OCI_ElemGetFile +( + OCI_Elem *elem +); + +/** + * @brief + * Return the object value of the given collection element + * + * @param elem - Element handle + * + * @return + * Object handle or NULL on failure + * + */ + +OCI_EXPORT OCI_Object * OCI_API OCI_ElemGetObject +( + OCI_Elem *elem +); + +/** + * @brief + * Return the collection value of the given collection element + * + * @param elem - Element handle + * + * @return + * Collection handle or NULL on failure + * + */ + +OCI_EXPORT OCI_Coll * OCI_API OCI_ElemGetColl +( + OCI_Elem *elem +); + +/** + * @brief + * Return the Ref value of the given collection element + * + * @param elem - Element handle + * + * @return + * Ref handle or NULL on failure + * + */ + +OCI_EXPORT OCI_Ref * OCI_API OCI_ElemGetRef +( + OCI_Elem *elem +); + +/** +* @brief +* Set a boolean value to a collection element +* +* @param elem - Element handle +* @param value - Short value +* +*@warning +* OCI_ElemSetBoolean() is only valid value only for collection elements of PL / SQL boolean type +* +* @return +* TRUE on success otherwise FALSE +* +*/ + +OCI_EXPORT boolean OCI_API OCI_ElemSetBoolean +( + OCI_Elem *elem, + boolean value +); + +/** +* @brief +* Set a number value to a collection element +* +* @param elem - Element handle +* @param value - number value +* +* @return +* TRUE on success otherwise FALSE +* +*/ + +OCI_EXPORT boolean OCI_API OCI_ElemSetNumber +( + OCI_Elem *elem, + OCI_Number *value +); + +/** + * @brief + * Set a short value to a collection element + * + * @param elem - Element handle + * @param value - Short value + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ElemSetShort +( + OCI_Elem *elem, + short value +); + +/** + * @brief + * Set a unsigned short value to a collection element + * + * @param elem - Element handle + * @param value - Unsigned short value + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ElemSetUnsignedShort +( + OCI_Elem *elem, + unsigned short value +); + +/** + * @brief + * Set a int value to a collection element + * + * @param elem - Element handle + * @param value - Int value + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ElemSetInt +( + OCI_Elem *elem, + int value +); + +/** + * @brief + * Set a unsigned int value to a collection element + * + * @param elem - Element handle + * @param value - Unsigned int value + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ElemSetUnsignedInt +( + OCI_Elem *elem, + unsigned int value +); + +/** + * @brief + * Set a big int value to a collection element + * + * @param elem - Element handle + * @param value - big int value + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ElemSetBigInt +( + OCI_Elem *elem, + big_int value +); + +/** + * @brief + * Set a unsigned big_int value to a collection element + * + * @param elem - Element handle + * @param value - Unsigned big int value + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ElemSetUnsignedBigInt +( + OCI_Elem *elem, + big_uint value +); + +/** + * @brief + * Set a double value to a collection element + * + * @param elem - Element handle + * @param value - Double value + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ElemSetDouble +( + OCI_Elem *elem, + double value +); + +/** + * @brief + * Set a float value to a collection element + * + * @param elem - Element handle + * @param value - float value + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ElemSetFloat +( + OCI_Elem *elem, + float value +); + +/** + * @brief + * Set a string value to a collection element + * + * @param elem - Element handle + * @param value - String value + * + * @note + * passing a null pointer for value calls OCI_ElemSetNull() + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ElemSetString +( + OCI_Elem *elem, + const otext *value +); + +/** + * @brief + * Set a RAW value to a collection element + * + * @param elem - Element handle + * @param value - Raw value + * @param len - Size of the raw value + * + * @note + * passing a null pointer for value calls OCI_ElemSetNull() + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ElemSetRaw +( + OCI_Elem *elem, + void *value, + unsigned int len +); + +/** + * @brief + * Assign a Date handle to a collection element + * + * @param elem - Element handle + * @param value - Date Handle + * + * @note + * passing a null pointer for value calls OCI_ElemSetNull() + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ElemSetDate +( + OCI_Elem *elem, + OCI_Date *value +); + +/** + * @brief + * Assign a Timestamp handle to a collection element + * + * @param elem - Element handle + * @param value - Timestamp Handle + * + * @note + * passing a null pointer for value calls OCI_ElemSetNull() + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ElemSetTimestamp +( + OCI_Elem *elem, + OCI_Timestamp *value +); + +/** + * @brief + * Assign an Interval handle to a collection element + * + * @param elem - Element handle + * @param value - Interval Handle + * + * @note + * passing a null pointer for value calls OCI_ElemSetNull() + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ElemSetInterval +( + OCI_Elem *elem, + OCI_Interval *value +); + +/** + * @brief + * Assign a Collection handle to a collection element + * + * @param elem - Element handle + * @param value - Collection Handle + * + * @note + * passing a null pointer for value calls OCI_ElemSetNull() + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ElemSetColl +( + OCI_Elem *elem, + OCI_Coll *value +); + +/** + * @brief + * Assign an Object handle to a collection element + * + * @param elem - Element handle + * @param value - Object Handle + * + * @warning + * This function assigns a copy of the object to the given attribute. + * Any further modifications of the object passed as the parameter 'value' + * will not be reflected to object 's attribute set with this call + * + * @note + * passing a null pointer for value calls OCI_ElemSetNull() + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ElemSetObject +( + OCI_Elem *elem, + OCI_Object *value +); + +/** + * @brief + * Assign a Lob handle to a collection element + * + * @param elem - Element handle + * @param value - Lob Handle + * + * @note + * passing a null pointer for value calls OCI_ElemSetNull() + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ElemSetLob +( + OCI_Elem *elem, + OCI_Lob *value +); + +/** + * @brief + * Assign a File handle to a collection element + * + * @param elem - Element handle + * @param value - File Handle + * + * @note + * passing a null pointer for value calls OCI_ElemSetNull() + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ElemSetFile +( + OCI_Elem *elem, + OCI_File *value +); + +/** + * @brief + * Assign a Ref handle to a collection element + * + * @param elem - Element handle + * @param value - Ref Handle + * + * @note + * passing a null pointer for value calls OCI_ElemSetNull() + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ElemSetRef +( + OCI_Elem *elem, + OCI_Ref *value +); + +/** + * @brief + * Check if the collection element value is null + * + * @param elem - Element handle + * + * @return + * TRUE if it's null otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ElemIsNull +( + OCI_Elem *elem +); + +/** + * @brief + * Set a collection element value to null + * + * @param elem - Element handle + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ElemSetNull +( + OCI_Elem *elem +); + +/** + * @} + */ + +/** + * @defgroup OcilibCApiFeatureReturningInto Oracle Returning feature + * @{ + * + * OCILIB supports the Oracle feature 'Returning into' for DML statements. + * + * Let's Oracle talk about this features: + * + * @par + * 'Using the RETURNING clause with a DML statement allows you to essentially + * combine two SQL statements into one, possibly saving you a server round-trip. + * This is accomplished by adding an extra clause to the traditional UPDATE, + * INSERT, and DELETE statements. The extra clause effectively adds a query to + * the DML statement. In the OCI, the values are returned to the application + * through the use of OUT bind variables.' + * + * OCILIB implements this features by providing a set of functions that allows + * to register output placeholders for the returned values. + * Once the DML is executed with OCI_Execute(), the output returned data is + * available through a regular resultset object that can be fetched. + * + * @note + * Array binding interface is also supported with 'returning into' DML statement. + * Every iteration (or row of given arrays) generates an resultset object. + * Once a resultset is fetched, the next on can be retrieved with OCI_GetNextResultset() + * + * @par + * + * @note + * OCI_Long are not supported for 'returning into' clause .This is a limitation imposed by Oracle. + * + * @note + * OCI_Column objects retrieved from output OCI_Resultset have the following + * particularities: + * + * - their names are the provided bind names to the DML statement + * (by example, ':out1'). So any call to the functions OCI_GetXXX2() + * should be aware of it + * - The columns detailed SQL attributes might be not all set or accurate. By + * example, the scale and precision are not set, the SQL type is the one + * chosen by OCILIB regarding the OCILIB object data type and might be + * slightly different from the real one. + * + * @par Example + * @include returning.c + * + */ + +/** + * @brief + * Retrieve the next available resultset + * + * @param stmt - Statement handle + * + * @note + * it is only valid for the following statements: + * - Statements executing SQL UPDATE/DELETE using a RETURNING INTO clause + * - Statements implicitly returned from PL/SQL procedure or blocks (new feature in Oracle 12cR1) using + * DBMS_SQL.RETURN_RESULT() + * + * @note + * SQL statements with a 'returning' clause can return multiple resultsets. + * When arrays of program variables are binded to the statement, Oracle will + * execute the statement for every row (iteration). + * Each iteration generates a resultset that can be fetched like regular ones. + * + * @note + * Starting withOracle 12cR1, PL/SQ procedure and blocks ca return multiple implicit resultsets + * Refer to Oracle documentation for more information. + * + * @return + * A resultset handle on success otherwise NULL + * + */ + +OCI_EXPORT OCI_Resultset * OCI_API OCI_GetNextResultset +( + OCI_Statement *stmt +); + +/** +* @brief +* Register a register output bind placeholder +* +* @param stmt - Statement handle +* @param name - Output bind name +* +* @return +* TRUE on success otherwise FALSE +* +*/ + +OCI_EXPORT boolean OCI_API OCI_RegisterNumber +( + OCI_Statement *stmt, + const otext *name +); + +/** + * @brief + * Register a short output bind placeholder + * + * @param stmt - Statement handle + * @param name - Output bind name + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_RegisterShort +( + OCI_Statement *stmt, + const otext *name +); + +/** + * @brief + * Register an unsigned short output bind placeholder + * + * @param stmt - Statement handle + * @param name - Output bind name + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_RegisterUnsignedShort +( + OCI_Statement *stmt, + const otext *name +); + +/** + * @brief + * Register an integer output bind placeholder + * + * @param stmt - Statement handle + * @param name - Output bind name + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_RegisterInt +( + OCI_Statement *stmt, + const otext *name +); + +/** + * @brief + * Register an unsigned integer output bind placeholder + * + * @param stmt - Statement handle + * @param name - Output bind name + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_RegisterUnsignedInt +( + OCI_Statement *stmt, + const otext *name +); + +/** + * @brief + * Register a big integer output bind placeholder + * + * @param stmt - Statement handle + * @param name - Output bind name + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_RegisterBigInt +( + OCI_Statement *stmt, + const otext *name +); + +/** + * @brief + * Register an unsigned big integer output bind placeholder + * + * @param stmt - Statement handle + * @param name - Output bind name + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_RegisterUnsignedBigInt +( + OCI_Statement *stmt, + const otext *name +); + +/** + * @brief + * Register a string output bind placeholder + * + * @param stmt - Statement handle + * @param name - Output bind name + * @param len - Max length of single string (in characters) + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_RegisterString +( + OCI_Statement *stmt, + const otext *name, + unsigned int len +); + +/** + * @brief + * Register an raw output bind placeholder + * + * @param stmt - Statement handle + * @param name - Output bind name + * @param len - Max length of the buffer (in bytes) + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_RegisterRaw +( + OCI_Statement *stmt, + const otext *name, + unsigned int len +); + +/** + * @brief + * Register a double output bind placeholder + * + * @param stmt - Statement handle + * @param name - Output bind name + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_RegisterDouble +( + OCI_Statement *stmt, + const otext *name +); + +/** + * @brief + * Register a float output bind placeholder + * + * @param stmt - Statement handle + * @param name - Output bind name + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_RegisterFloat +( + OCI_Statement *stmt, + const otext *name +); + +/** + * @brief + * Register a date output bind placeholder + * + * @param stmt - Statement handle + * @param name - Output bind name + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_RegisterDate +( + OCI_Statement *stmt, + const otext *name +); + +/** + * @brief + * Register a timestamp output bind placeholder + * + * @param stmt - Statement handle + * @param name - Output bind name + * @param type - Timestamp type + * + * @note + * See OCI_TimestampCreate() for possible values of parameter 'type' + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_RegisterTimestamp +( + OCI_Statement *stmt, + const otext *name, + unsigned int type +); + +/** + * @brief + * Register an interval output bind placeholder + * + * @param stmt - Statement handle + * @param name - Output bind name + * @param type - Interval type + * + * @note + * See OCI_IntervalCreate() for possible values of parameter 'type' + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_RegisterInterval +( + OCI_Statement *stmt, + const otext *name, + unsigned int type +); + +/** + * @brief + * Register an object output bind placeholder + * + * @param stmt - Statement handle + * @param name - Output bind name + * @param typinf - Type info handle + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_RegisterObject +( + OCI_Statement *stmt, + const otext *name, + OCI_TypeInfo *typinf +); + +/** + * @brief + * Register a lob output bind placeholder + * + * @param stmt - Statement handle + * @param name - Output bind name + * @param type - Lob type + * + * @note + * See OCI_LobCreate() for possible values of parameter 'type' + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_RegisterLob +( + OCI_Statement *stmt, + const otext *name, + unsigned int type +); + +/** + * @brief + * Register a file output bind placeholder + * + * @param stmt - Statement handle + * @param name - Output bind name + * @param type - File type + * + * @note + * See OCI_FileCreate() for possible values of parameter 'type' + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_RegisterFile +( + OCI_Statement *stmt, + const otext *name, + unsigned int type +); + +/** + * @brief + * Register a Ref output bind placeholder + * + * @param stmt - Statement handle + * @param name - Output bind name + * @param typinf - Type info handle + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_RegisterRef +( + OCI_Statement *stmt, + const otext *name, + OCI_TypeInfo *typinf +); + +/** + * @} + */ + +/** + * @defgroup OcilibCApiRowIds Oracle Rowids + * @{ + * + * OCILIB supports the Oracle ROWID type through C scalar string types (otext). + * + * - ROWIDs can be retrieved from resultset with OCI_GetString() + * - ROWIDs can be binded to statements with OCI_BindString() + * + * The maximum size of an ROWID buffer is defined by the constant OCI_SIZE_ROWID + * + * @par Example + * @include rowid.c + * + * @} + */ + +/** + * @defgroup OcilibCApiStatementControl Statements control + * @{ + * + * Those functions give extra information about OCILIB statements and can modify their behavior. + * + */ + +/** + * @brief + * Return the type of a SQL statement + * + * @param stmt - Statement handle + * + * @note + * Possible values are : + * + * - OCI_CST_SELECT : select statement + * - OCI_CST_UPDATE : update statement + * - OCI_CST_DELETE : delete statement + * - OCI_CST_INSERT : insert statement + * - OCI_CST_CREATE : create statement + * - OCI_CST_DROP : drop statement + * - OCI_CST_ALTER : alter statement + * - OCI_CST_BEGIN : begin (pl/sql) statement + * - OCI_CST_DECLARE : declare (pl/sql) statement + * - OCI_CST_CALL : kpu call + * + * @return + * The statement type on success or OCI_UNKOWN on error + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_GetStatementType +( + OCI_Statement *stmt +); + +/** + * @brief + * Set the fetch mode of a SQL statement + * + * @param stmt - Statement handle + * @param mode - fetch mode value + * + * @warning + * OCI_SetFetchMode() MUST be called before any OCI_ExecuteXXX() call + * + * @note + * Possible values are : + * - OCI_SFM_DEFAULT + * - OCI_SFM_SCROLLABLE + * + */ + +OCI_EXPORT boolean OCI_API OCI_SetFetchMode +( + OCI_Statement *stmt, + unsigned int mode +); + +/** + * @brief + * Return the fetch mode of a SQL statement + * + * @param stmt - Statement handle + * + * @note + * See OCI_SetFetchMode() for possible values + * Default value is OCI_SFM_DEFAULT + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_GetFetchMode +( + OCI_Statement *stmt +); + +/** + * @brief + * Set the binding mode of a SQL statement + * + * @param stmt - Statement handle + * @param mode - binding mode value + * + * @note + * Possible values are : + * - OCI_BIND_BY_POS : position binding + * - OCI_BIND_BY_NAME : name binding + * + */ + +OCI_EXPORT boolean OCI_API OCI_SetBindMode +( + OCI_Statement *stmt, + unsigned int mode +); + +/** + * @brief + * Return the binding mode of a SQL statement + * + * @param stmt - Statement handle + * + * @note + * See OCI_SetBindMode() for possible values + * Default value is OCI_BIND_BY_NAME + * + * @note + * if stmt is NULL, the return value is OCI_UNKNOWN + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_GetBindMode +( + OCI_Statement *stmt +); + +/** + * @brief + * Set the current bind allocation mode that will be used for subsequent binding calls + * + * @param stmt - Statement handle + * @param mode - bind allocation mode value + * + * @note + * Possible values are : + * - OCI_BAM_EXTERNAL : bind variable are allocated by user code + * - OCI_BAM_INTERNAL : bind variable are allocated internally + * + * @warning + * This call has to be made after preparing a statement as OCI_Prepare() reset it by default to OCI_BAM_EXTERNAL. + * When calling an OCI_BindXXXX() call, this value is used and stored in the OCI_Bind object created during the bind call. + * Each bind can have is own allocation mode that is returned by OCI_BindGetAllocationMode() + * OCI_SetBindAllocation() can be called before each binding call if needed, resulting having some bind allocated externally and other ones internally. + * + * @note + * Refer to the section "Binding variables and arrays" of the documention about allocation mode as OCI_BAM_INTERNAL is not compatible with all bind calls + * + */ + +OCI_EXPORT boolean OCI_API OCI_SetBindAllocation +( + OCI_Statement *stmt, + unsigned int mode +); + +/** + * @brief + * Return the current bind allocation mode used for subsequent binding calls + * + * @param stmt - Statement handle + * + * @note + * See OCI_SetBindAllocation() for possible values + * Default value is OCI_BAM_EXTERNAL + * + * @warning + * Each OCI_Bind object has its own allocation mode that may differ from the one returned by OCI_GetBindAllocation() + * The return value of OCI_GetBindAllocation() is the mode that will be used for any subsequent OCI_BindXXXX() calls + * + * @note + * if stmt is NULL, the return value is OCI_UNKNOWN + * + */ +OCI_EXPORT unsigned int OCI_API OCI_GetBindAllocation +( + OCI_Statement *stmt +); + +/** + * @brief + * Set the number of rows fetched per internal server fetch call + * + * @param stmt - Statement handle + * @param size - number of rows to fetch + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_SetFetchSize +( + OCI_Statement *stmt, + unsigned int size +); + +/** + * @brief + * Return the number of rows fetched per internal server fetch call + * + * @param stmt - Statement handle + * + * @note + * Default value is set to constant OCI_FETCH_SIZE + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_GetFetchSize +( + OCI_Statement *stmt +); + +/** + * @brief + * Set the number of rows pre-fetched by OCI Client + * + * @param stmt - Statement handle + * @param size - number of rows to pre-fetch + * + * @note + * To turn off pre-fetching, set both attributes (size and memory) to 0. + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_SetPrefetchSize +( + OCI_Statement *stmt, + unsigned int size +); + +/** + * @brief + * Return the number of rows pre-fetched by OCI Client + * + * @param stmt - Statement handle + * + * @note + * Default value is set to constant OCI_PREFETCH_SIZE + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_GetPrefetchSize +( + OCI_Statement *stmt +); + +/** + * @brief + * Set the amount of memory pre-fetched by OCI Client + * + * @param stmt - Statement handle + * @param size - amount of memory to fetch + * + * @note + * Default value is 0 and the pre-fetch size attribute is used instead. + * When both attributes are set (pre-fetch size and memory) and pre-fetch memory + * value can hold more rows than specified by pre-fetch size, OCI uses pre-fetch + * size instead. + * + * @note + * OCILIB set pre-fetch attribute to OCI_PREFETCH_SIZE when a statement is created. + * To setup a big value for OCI_SetPrefetchMemory(), you must call + * OCI_SetPrefetchSize() to 0 to make OCI consider this attribute. + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_SetPrefetchMemory +( + OCI_Statement *stmt, + unsigned int size +); + +/** + * @brief + * Return the amount of memory used to retrieve rows pre-fetched by OCI Client + * + * @param stmt - Statement handle + * + * @note + * Default value is 0 + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_GetPrefetchMemory +( + OCI_Statement *stmt +); + +/** + * @brief + * Set the LONG data type piece buffer size + * + * @param stmt - Statement handle + * @param size - maximum size for long buffer + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_SetLongMaxSize +( + OCI_Statement *stmt, + unsigned int size +); + +/** + * @brief + * Return the LONG data type piece buffer size + * + * @param stmt - Statement handle + * + * @note + * Default value is set to constant OCI_SIZE_LONG + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_GetLongMaxSize +( + OCI_Statement *stmt +); + +/** + * @brief + * Set the long data type handling mode of a SQL statement + * + * @param stmt - Statement handle + * @param mode - long mode value + * + * @note + * Possible values are : + * + * - OCI_LONG_EXPLICIT : LONGs are explicitly handled by OCI_Long type + * - OCI_LONG_IMPLICIT : LONGs are implicitly mapped to string type in the + * limits of VARCHAR2 size capacity + * + * LONG RAWs can't be handled with OCI_LONG_IMPLICIT + */ + +OCI_EXPORT boolean OCI_API OCI_SetLongMode +( + OCI_Statement *stmt, + unsigned int mode +); + +/** + * @brief + * Return the long data type handling mode of a SQL statement + * + * @param stmt - Statement handle + * + * @note + * See OCI_SetLongMode() for possible values + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_GetLongMode +( + OCI_Statement *stmt +); + +/** + * @brief + * Return the connection handle associated with a statement handle + * + * @param stmt - Statement handle + * + */ + +OCI_EXPORT OCI_Connection * OCI_API OCI_StatementGetConnection +( + OCI_Statement *stmt +); + +/** + * @} + */ + +/** + * @defgroup OcilibCApiLobs Internal Large Objects (LOBs) + * @{ + * + * Large Objects (LOBs) were introduced with Oracle 8i to replace LONGs + * + * Oracle OCI supplies a set APIs to manipulate this data type. + * + * OCILIB encapsulates this API by supplying: + * + * - An OCI_Lob C type + * - A set of really easy APIs to manipulate OCI_Lob objects + * + * OCILIB currently supports 3 types of Lobs : + * + * - BLOB : Binary LOBs (replacement for LONG RAW data type) + * - CLOB : Character LOBs (replacement for LONG data type) + * - NCLOB : National Character LOBs + * + * OCI_Lob objects can be : + * + * - Created as standalone instances + * - Used for in/out binding + * - Retrieved from select statements + * - Manipulated (copy, append, ...) + * + * @par Lobs > 4 Go + * + * Oracle 10g extended lobs by increasing maximum size from 4Go to 128 To. + * + * OCILIB, with version 2.1.0, supports now this new limit. + * For handling sizes and offsets up to 128 To, 64 bit integers are requested. + * + * So, A new scalar integer type has been introduced: big_uint (elderly lobsize_t). + * This type can be a 32 bits or 64 bits integer depending on : + * - Compiler support for 64 bits integers (C99 compiler, MS compilers) + * - Oracle client version + * + * big_uint will be a 64 bits integer : + * - if the compiler supports it + * - if OCILIB is build with option OCI_IMPORT_LINKAGE and the Oracle version is >= 10.1 + * - or OCILIB is build with option OCI_IMPORT_RUNTIME (oracle version is not known at + * compilation stage) + * + * @par Example + * @include lob.c + * + */ + +/** + * @brief + * Create a local temporary Lob instance + * + * @param con - Connection handle + * @param type - Lob type + * + * Supported lob types : + * + * - OCI_BLOB : Binary Lob + * - OCI_CLOB : Character Lob + * - OCI_NCLOB ! National Character Lob + * + * @return + * Return the lob handle on success otherwise NULL on failure + * + */ + +OCI_EXPORT OCI_Lob * OCI_API OCI_LobCreate +( + OCI_Connection *con, + unsigned int type +); + +/** + * @brief + * Free a local temporary lob + * + * @param lob - Lob handle + * + * @warning + * Only lobs created with OCI_LobCreate() should be freed by OCI_LobFree() + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_LobFree +( + OCI_Lob *lob +); + +/** + * @brief + * Create an array of lob object + * + * @param con - Connection handle + * @param type - Lob type + * @param nbelem - number of elements in the array + * + * @note + * see OCI_LobCreate() for more details + * + * @return + * Return the lob handle array on success otherwise NULL on failure + * + */ + +OCI_EXPORT OCI_Lob ** OCI_API OCI_LobArrayCreate +( + OCI_Connection *con, + unsigned int type, + unsigned int nbelem +); + +/** +* @brief +* Free an array of lob objects +* +* @param lobs - Array of lob objects +* +* @warning +* Only arrays of lobs created with OCI_LobArrayCreate() should be freed +* by OCI_LobArrayFree() +* +* @return +* TRUE on success otherwise FALSE +* +*/ + +OCI_EXPORT boolean OCI_API OCI_LobArrayFree +( + OCI_Lob **lobs +); + +/** + * @brief + * Return the type of the given Lob object + * + * @param lob - Lob handle + * + * @note + * For possible values, see OCI_LobCreate() + * + * @return + * Object type or OCI_UNKNOWN the input handle is NULL + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_LobGetType +( + OCI_Lob *lob +); + +/** + * @brief + * Perform a seek operation on the OCI_lob content buffer + * + * @param lob - Lob handle + * @param offset - Offset from current position (bytes or characters) + * @param mode - Seek mode + * + * Parameter 'mode' can be one of the following value : + * + * - OCI_SEEK_SET : set the lob current offset to the given absolute offset + * - OCI_SEEK_END : set the lob current offset to the end of the lob + * - OCI_SEEK_CUR : move the lob current offset to the number of bytes or + * characters given by parameter 'offset' + * + * @note + * - For CLOB and CLOB, offset in characters + * - For BLOB and BFILE, offset is in bytes + * + * @note + * Position in the Lob buffer starts at 0. + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_LobSeek +( + OCI_Lob *lob, + big_uint offset, + unsigned int mode +); + +/** + * @brief + * Return the current position in the Lob content buffer + * + * @param lob - Lob handle + * + * @return + * Lob position (starting with 0) or 0 on failure + */ + +OCI_EXPORT big_uint OCI_API OCI_LobGetOffset +( + OCI_Lob *lob +); + +/** + * @brief + * [OBSOLETE] Read a portion of a lob into the given buffer + * + * @param lob - Lob handle + * @param buffer - Pointer to a buffer + * @param len - Length of the buffer (in bytes or characters) + * + * @note + * Length is expressed in : + * - Bytes for BLOBs + * - Characters for CLOBs/NCLOBS + * + * @warning + * This call is obsolete ! Use OCI_LobRead2() instead. + * + * @return + * Number of bytes/characters read on success otherwise 0 on failure + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_LobRead +( + OCI_Lob *lob, + void *buffer, + unsigned int len +); + +/** + * @brief + * Read a portion of a lob into the given buffer + * + * @param lob - Lob handle + * @param buffer - Pointer to a buffer + * @param char_count - [in/out] Pointer to maximum number of characters + * @param byte_count - [in/out] Pointer to maximum number of bytes + * + * @note + * In input, 'char_count' and 'byte_count' are values to read into the buffer + * In output, 'char_count' and 'byte_count' are values read into the buffer + * + * @note + * For BLOBs, only the parameter 'byte_count' is used + * For CLOBs, both parameters can be used : + * In input : + * - if 'byte_count' is set to zero, it is computed from 'char_count' + * - if 'char_count' is set to zero, it is computed from 'byte_count' + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_LobRead2 +( + OCI_Lob *lob, + void *buffer, + unsigned int *char_count, + unsigned int *byte_count +); + +/** + * @brief + * [OBSOLETE] Write a buffer into a LOB + * + * @param lob - Lob handle + * @param buffer - Pointer to a buffer + * @param len - Length of the buffer (in bytes or characters) + * + * @note + * Length is expressed in : + * - Bytes for BLOBs + * - Characters for CLOBs/NCLOBs + * + * @warning + * This call is obsolete ! Use OCI_LobWrite2() instead. + * + * @return + * Number of bytes / characters written on success otherwise 0 on failure + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_LobWrite +( + OCI_Lob *lob, + void *buffer, + unsigned int len +); + +/** + * @brief + * Write a buffer into a LOB + * + * @param lob - Lob handle + * @param buffer - Pointer to a buffer + * @param char_count - [in/out] Pointer to maximum number of characters + * @param byte_count - [in/out] Pointer to maximum number of bytes + * + * @note + * In input, 'char_count' and 'byte_count' are values to write from the buffer + * In output, 'char_count' and 'byte_count' are values written from the buffer + * + * @note + * For BLOBs, only the parameter 'byte_count' is used + * For CLOBs, both parameters can be used : + * In input : + * - if 'byte_count' is set to zero, it is computed from 'char_count' + * - if 'char_count' is set to zero, it is computed from 'byte_count' + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_LobWrite2 +( + OCI_Lob *lob, + void *buffer, + unsigned int *char_count, + unsigned int *byte_count +); + +/** + * @brief + * Truncate the given lob to a shorter length + * + * @param lob - Lob handle + * @param size - New length (in bytes or characters) + * + * @note + * Length is expressed in : + * - Bytes for BLOBs + * - Characters for CLOBs/NCLOBs + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_LobTruncate +( + OCI_Lob *lob, + big_uint size +); + +/** + * @brief + * Return the actual length of a lob + * + * @param lob - Lob handle + * + * @note + * The returned value is in bytes for BLOBS and characters for CLOBS/NCLOBs + * + */ + +OCI_EXPORT big_uint OCI_API OCI_LobGetLength +( + OCI_Lob *lob +); + +/** + * @brief + * Returns the chunk size of a LOB + * + * @param lob - Lob handle + * + * @note + * This chunk size corresponds to the chunk size used by the LOB data layer + * when accessing and modifying the LOB value. According to Oracle + * documentation, performance will be improved if the application issues + * read or write requests using a multiple of this chunk size + * + * @note + * The returned value is in bytes for BLOBS and characters for CLOBS/NCLOBs + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_LobGetChunkSize +( + OCI_Lob *lob +); + +/** + * @brief + * Erase a portion of the lob at a given position + * + * @param lob - Lob handle + * @param offset - Absolute position in source lob + * @param len - Number of bytes or characters to erase + * + * @note + * Absolute position starts at 0. + * Erasing means that spaces overwrite the existing LOB value. + * + * @return + * Number of bytes (BLOB) or characters (CLOB/NCLOB) erased on success + * otherwise 0 on failure + * + */ + +OCI_EXPORT big_uint OCI_API OCI_LobErase +( + OCI_Lob *lob, + big_uint offset, + big_uint len +); + +/** + * @brief + * Append a buffer at the end of a LOB + * + * @param lob - Lob handle + * @param buffer - Pointer to a buffer + * @param len - Length of the buffer (in bytes or characters) + * + * @note + * Length is expressed in : + * - Bytes for BLOBs + * - Characters for CLOBs + * + * @return + * Number of bytes / characters written on success otherwise 0 on failure + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_LobAppend +( + OCI_Lob *lob, + void *buffer, + unsigned int len +); + +/** + * @brief + * Append a buffer at the end of a LOB + * + * @param lob - Lob handle + * @param buffer - Pointer to a buffer + * @param char_count - [in/out] Pointer to maximum number of characters + * @param byte_count - [in/out] Pointer to maximum number of bytes + * + * @note + * In input, 'char_count' and 'byte_count' are values to write from the buffer + * In output, 'char_count' and 'byte_count' are values written from the buffer + * + * @note + * For BLOBs, only the parameter 'byte_count' is used + * For CLOBs, both parameters can be used : + * In input : + * - if 'byte_count' is set to zero, it is computed from 'char_count' + * - if 'char_count' is set to zero, it is computed from 'byte_count' + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_LobAppend2 +( + OCI_Lob *lob, + void *buffer, + unsigned int *char_count, + unsigned int *byte_count +); + +/** + * @brief + * Append a source LOB at the end of a destination LOB + * + * @param lob - Destination Lob handle + * @param lob_src - Source Lob handle + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_LobAppendLob +( + OCI_Lob *lob, + OCI_Lob *lob_src +); + +/** + * @brief + * Check if the given lob is a temporary lob + * + * @param lob - Lob handle + * + * @return + * TRUE if it's a temporary lob otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_LobIsTemporary +( + OCI_Lob *lob +); + +/** + * @brief + * Copy a portion of a source LOB into a destination LOB + * + * @param lob - Destination Lob handle + * @param lob_src - Source Lob handle + * @param offset_dst - Absolute position in destination lob + * @param offset_src - Absolute position in source lob + * @param count - Number of bytes or character to copy + * + * @note + * For character LOB (CLOB/NCLOBS) the parameters count, offset_dst and + * offset_src are expressed in characters and not in bytes. + * + * @note + * Absolute position starts at 0. + * + */ + +OCI_EXPORT boolean OCI_API OCI_LobCopy +( + OCI_Lob *lob, + OCI_Lob *lob_src, + big_uint offset_dst, + big_uint offset_src, + big_uint count +); + +/** + * @brief + * Copy a portion of a source FILE into a destination LOB + * + * @param lob - Destination Lob handle + * @param file - Source File handle + * @param offset_dst - Absolute position in destination lob + * @param offset_src - Absolute position in source file + * @param count - Number of bytes to copy + * + * @note + * - For character LOB (CLOB/NCLOB) the parameter offset_src are expressed in + * characters and not in bytes. + * - Offset_src is always in bytes + * + * @note + * Absolute position starts at 0. + * + */ + +OCI_EXPORT boolean OCI_API OCI_LobCopyFromFile +( + OCI_Lob *lob, + OCI_File *file, + big_uint offset_dst, + big_uint offset_src, + big_uint count +); + +/** + * @brief + * Open explicitly a Lob + * + * @param lob - Lob handle + * @param mode - open mode + * + * Possible values for mode are : + * + * - OCI_LOB_READONLY : read only access + * - OCI_LOB_READWRITE : read/write access + * + * @note + * - A call to OCI_LobOpen is not necessary to manipulate a Lob. + * - If a lob hasn't been opened explicitly, triggers are fired and + * indexes updated at every read/write/append operation + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_LobOpen +( + OCI_Lob *lob, + unsigned int mode +); + +/** + * @brief + * Close explicitly a Lob + * + * @param lob - Lob handle + * + * @note + * - A call to OCI_LobClose is not necessary to manipulate a Lob. + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_LobClose +( + OCI_Lob *lob +); + +/** + * @brief + * Compare two lob handles for equality + * + * @param lob - Lob handle + * @param lob2 - Lob2 handle + * + * @return + * TRUE is the lobs are not null and equal otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_LobIsEqual +( + OCI_Lob *lob, + OCI_Lob *lob2 +); + +/** + * @brief + * Assign a lob to another one + * + * @param lob - Destination Lob handle + * @param lob_src - Source Lob handle + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_LobAssign +( + OCI_Lob *lob, + OCI_Lob *lob_src +); + +/** + * @brief + * Return the maximum size that the lob can contain + * + * @param lob - Lob handle + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT big_uint OCI_API OCI_LobGetMaxSize +( + OCI_Lob *lob +); + +/** + * @brief + * Flush Lob content to the server + * + * @param lob - Lob handle + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_LobFlush +( + OCI_Lob *lob +); + +/** + * @brief + * Enable / disable buffering mode on the given lob handle + * + * @param lob - Lob handle + * @param value - Enable/disable buffering mode + * + * @note + * Oracle "LOB Buffering Subsystem" allows client applications + * to speedup read/write of small buffers on Lobs Objects. + * Check Oracle Documentation for more details on "LOB Buffering Subsystem". + * This reduces the number of network round trips and LOB versions, thereby + * improving LOB performance significantly. + * + * @warning + * According to Oracle documentation the following operations are not permitted + * on Lobs when buffering is on : OCI_LobCopy(), OCI_LobAppend, OCI_LobErase(), + * OCI_LobGetLength(), OCI_LobTruncate() + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_LobEnableBuffering +( + OCI_Lob *lob, + boolean value +); + +/** +* @brief +* Retrieve connection handle from the lob handle +* +* @param lob - lob handle +* +*/ + +OCI_EXPORT OCI_Connection * OCI_API OCI_LobGetConnection +( + OCI_Lob *lob +); + +/** + * @} + */ + +/** + * @defgroup OcilibCApiFiles External Large Objects (FILEs) + * @{ + * + * External Large Objects (FILEs) were introduced with Oracle 8i + * + * Oracle OCI supplies a set APIs to manipulate this data type. + * + * OCILIB encapsulates this API by supplying: + * + * - An OCI_File C type + * - A set of really easy APIs to manipulate OCI_File objects + * + * OCILIB currently supports 2 types of Lobs : + * + * - BFILE : Binary files + * - CFILE : Character files + * + * @warning + * FILEs are read-only. + * + * OCI_Lob objects can be : + * + * - Created as standalone instances + * - Used for in/out binding + * - Retrieved from select statements + * - Used for reading server files content + * + * @par Files > 4 Go + * + * - New maximum file size limit (128 To) applies to OCI_Files objects. + * - See Internal Large Objects (LOBs) section for Files > 4 Go information + * + * @par Example + * @include file.c + * + */ + +/** + * @brief + * Create a file object instance + * + * @param con - Connection handle + * @param type - File type + * + * Supported file types : + * + * - OCI_BFILE : Binary file + * - OCI_CFILE : Character file + * + * @return + * Return the lob handle on success otherwise NULL on failure + * + */ + +OCI_EXPORT OCI_File * OCI_API OCI_FileCreate +( + OCI_Connection *con, + unsigned int type +); + +/** + * @brief + * Free a local File object + * + * @param file - File handle + * + * @warning + * Only Files created with OCI_FileCreate() should be freed by OCI_FileFree() + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_FileFree +( + OCI_File *file +); + +/** + * @brief + * Create an array of file object + * + * @param con - Connection handle + * @param type - File type + * @param nbelem - number of elements in the array + * + * @note + * see OCI_FileCreate() for more details + * + * @return + * Return the file handle array on success otherwise NULL on failure + * + */ + +OCI_EXPORT OCI_File ** OCI_API OCI_FileArrayCreate +( + OCI_Connection *con, + unsigned int type, + unsigned int nbelem +); + +/** +* @brief +* Free an array of file objects +* +* @param files - Array of file objects +* +* @warning +* Only arrays of lobs created with OCI_FileArrayCreate() should be freed by OCI_FileArrayFree() +* +* @return +* TRUE on success otherwise FALSE +* +*/ + +OCI_EXPORT boolean OCI_API OCI_FileArrayFree +( + OCI_File **files +); + +/** + * @brief + * Return the type of the given File object + * + * @param file - File handle + * + * @note + * For possible values, see OCI_FileCreate() + * + * @return + * Object type or OCI_UNKNOWN the input handle is NULL + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_FileGetType +( + OCI_File *file +); + +/** + * @brief + * Perform a seek operation on the OCI_File content buffer + * + * @param file - File handle + * @param offset - Offset from current position + * @param mode - Seek mode + * + * Mode parameter can be one of the following value : + * + * - OCI_SEEK_SET : set the file current offset to the given absolute offset + * - OCI_SEEK_END : set the file current offset to the end of the lob + * - OCI_SEEK_CUR : move the file current offset to the number of bytes given by + * parameter 'offset' + * + * @note + * Position in the File buffer starts at 0. + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_FileSeek +( + OCI_File *file, + big_uint offset, + unsigned int mode +); + +/** + * @brief + * Return the current position in the file + * + * @param file - File handle + * + * @return + * File position (starting with 0) or 0 on failure + */ + +OCI_EXPORT big_uint OCI_API OCI_FileGetOffset +( + OCI_File *file +); + +/** + * @brief + * Read a portion of a file into the given buffer + * + * @param file - File handle + * @param buffer - Pointer to a buffer + * @param len - Length of the buffer in bytes + * + * @return + * Number of bytes read on success otherwise 0 on failure + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_FileRead +( + OCI_File *file, + void *buffer, + unsigned int len +); + +/** + * @brief + * Return the size in bytes of a file + * + * @param file - File handle + * + */ + +OCI_EXPORT big_uint OCI_API OCI_FileGetSize +( + OCI_File *file +); + +/** + * @brief + * Check if the given file exists on server + * + * @param file - File handle + * + * @note + * For local FILEs object, OCI_LobFileSetName() must be called before to set the filename to check + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_FileExists +( + OCI_File *file +); + +/** + * @brief + * Set the directory and file name of FILE handle + * + * @param file - File handle + * @param dir - File directory + * @param name - File name + *in + * @note + * - For local FILEs only + * - Files fetched from resultset can't be assigned a new directory and name + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_FileSetName +( + OCI_File *file, + const otext *dir, + const otext *name +); + +/** + * @brief + * Return the directory of the given file + * + * @param file - File handle + * + */ + +OCI_EXPORT const otext * OCI_API OCI_FileGetDirectory +( + OCI_File *file +); + +/** + * @brief + * Return the name of the given file + * + * @param file - File handle + * + */ + +OCI_EXPORT const otext * OCI_API OCI_FileGetName +( + OCI_File *file +); + +/** + * @brief + * Open a file for reading + * + * @param file - File handle + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_FileOpen +( + OCI_File *file +); + +/** + * @brief + * Check if the specified file is opened within the file handle + * + * @param file - File handle + * + * @return + * TRUE if the file was opened with this handle otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_FileIsOpen +( + OCI_File *file +); + +/** + * @brief + * Close a file + * + * @param file - File handle + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_FileClose +( + OCI_File *file +); + +/** + * @brief + * Compare two file handle for equality + * + * @param file - File handle + * @param file2 - File2 handle + * + * @return + * TRUE is the lobs are not null and equal otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_FileIsEqual +( + OCI_File *file, + OCI_File *file2 +); + +/** + * @brief + * Assign a file to another one + * + * @param file - Destination File handle + * @param file_src - Source File handle + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_FileAssign +( + OCI_File *file, + OCI_File *file_src +); + +/** +* @brief +* Retrieve connection handle from the file handle +* +* @param file - file handle +* +*/ + +OCI_EXPORT OCI_Connection * OCI_API OCI_FileGetConnection +( + OCI_File *file +); + +/** + * @} + */ + +/** + * @defgroup OcilibCApiLongs Long objects + * @{ + * + * Long Objects encapsulate Oracle LONGs data types and were used to store large + * buffers in Oracle database. + * + * They're still supported but are depreciated. Oracle now provides a + * newer and better way to deal with data that needs large storage : LOBs + * + * OCILIB supports this data type because it was and still is widely used + * + * OCILIB provides a set of API for manipulating LONGs that is really close to + * the one provided for LOBs. + * + * OCILIB currently supports 3 types of Long Objects: + * + * - OCI_BLONG : LONG RAW columns + * - OCI_CLONG : LONG columns + * + * OCI_Lob objects can be : + * + * - Created as standalone instances + * - Used for in/out binding + * - Retrieved from select statement + * + * @par Example + * @include long.c + * + */ + +/** + * @brief + * Create a local temporary Long instance + * + * @param stmt - Statement handle + * @param type - Long type + * + * Supported lob types : + * + * - OCI_BLONG : Binary Long + * - OCI_CLONG : Character Long + * + * @return + * Return the long handle on success otherwise NULL on failure + * + */ + +OCI_EXPORT OCI_Long * OCI_API OCI_LongCreate +( + OCI_Statement *stmt, + unsigned int type +); + +/** + * @brief + * Free a local temporary long + * + * @param lg - Long handle + * + * @warning + * Only lobs created with OCI_LongCreate() should be freed by OCI_LongFree() + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_LongFree +( + OCI_Long *lg +); + +/** + * @brief + * Return the type of the given Long object + * + * @param lg - Long handle + * + * @note + * For possible values, see OCI_LobCreate() + * + * @return + * Object type or OCI_UNKNOWN the input handle is NULL + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_LongGetType +( + OCI_Long *lg +); + +/** + * @brief + * Read a portion of a long into the given buffer [Obsolete] + * + * @param lg - Long handle + * @param buffer - Pointer to a buffer + * @param len - Length of the buffer in bytes / characters + * + * @note + * - From version 2.0.0, this function is obsolete because OCILIB fetches now + * all data during OCIFetchNext() call + * - So, this call reads now the internal OCI_Long object allocated buffer + * - The internal buffer can be directly accessed with OCI_LongGetBuffer() + * + * @note + * - For OCI_CLONG, parameter 'len' and returned value are expressed in characters + * - For OCI_BLONG, parameter 'len' and returned value are expressed in bytes + * + * @return + * - Number of bytes/characters read on success + * - 0 if there is nothing more to read + * - 0 on failure + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_LongRead +( + OCI_Long *lg, + void *buffer, + unsigned int len +); + +/** + * @brief + * Write a buffer into a Long + * + * @param lg - Long handle + * @param buffer - the pointer to a buffer + * @param len - the length of the buffer in bytes (OCI_BLONG) or + * character (OCI_CLONG) + * + * @return + * Number of bytes (OCI_BLONG) / character (OCI_CLONG) written on success otherwise 0 on failure + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_LongWrite +( + OCI_Long *lg, + void *buffer, + unsigned int len +); + +/** + * @brief + * Return the buffer size of a long object in bytes (OCI_BLONG) or character (OCI_CLONG) + * + * @param lg - Long handle + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_LongGetSize +( + OCI_Long *lg +); + +/** + * @brief + * Return the internal buffer of an OCI_Long object read from a fetch sequence + * + * @param lg - Long handle + * + */ + +OCI_EXPORT void * OCI_API OCI_LongGetBuffer +( + OCI_Long *lg +); + +/** +* @} +*/ + +/** +* @defgroup OcilibCApiOracleNumber Oracle NUMBER manipulation (optional) +* @{ +* +* OCILIB encapsulates Oracle SQL all Numeric types using C native data types. +* But it also provides an optional OCI_Number handle for manipulating and accessing Oracle NUMBER type. +* OCI_Number provides management for some special value that cannot be addressed in C such as positive +* and negative infinity. +* +* @par Example +* @include number.c +* +*/ + +/** +* @brief +* Create a local number object +* +* @param con - Connection handle +* +* @note +* Parameter 'con' can be NULL in order to manipulate numbers +* independently from database connections +* +* @return +* Return the number handle on success otherwise NULL on failure +* +*/ + +OCI_EXPORT OCI_Number * OCI_API OCI_NumberCreate +( + OCI_Connection *con +); + +/** +* @brief +* Free a number object +* +* @param number - Number handle +* +* @warning +* Only Numbers created with OCI_NumberCreate() should be freed by OCI_NumberFree() +* +* @return +* TRUE on success otherwise FALSE +* +*/ + +OCI_EXPORT boolean OCI_API OCI_NumberFree +( + OCI_Number *number +); + +/** +* @brief +* Create an array of number object +* +* @param con - Connection handle +* @param nbelem - number of elements in the array +* +* @note +* see OCI_NumberCreate() for more details +* +* @return +* Return the number handle array on success otherwise NULL on failure +* +*/ + +OCI_EXPORT OCI_Number ** OCI_API OCI_NumberArrayCreate +( + OCI_Connection *con, + unsigned int nbelem +); + +/** +* @brief +* Free an array of number objects +* +* @param numbers - Array of number objects +* +* @warning +* Only arrays of numbers created with OCI_NumberArrayCreate() should be freed by OCI_NumberArrayFree() +* +* @return +* TRUE on success otherwise FALSE +* +*/ + +OCI_EXPORT boolean OCI_API OCI_NumberArrayFree +( + OCI_Number **numbers +); + +/** +* @brief +* Assign the value of a number handle to another one +* +* @param number - Destination number handle +* @param number_src - Source number handle +* +* @return +* TRUE on success otherwise FALSE +* +*/ + +OCI_EXPORT int OCI_API OCI_NumberAssign +( + OCI_Number *number, + OCI_Number *number_src +); + +/** +* @brief +* Convert a number value from the given number handle to a string +* +* @param number - source number handle +* @param fmt - Number format +* @param size - Destination string size in characters +* @param str - Destination date string +* +* @note +* Output string can be one the following 'magic strings': +* - '~' for positive infinity +* - '-~' for negative infinity +* +* @return +* TRUE on success otherwise FALSE +* +*/ + +OCI_EXPORT boolean OCI_API OCI_NumberToText +( + OCI_Number *number, + const otext *fmt, + int size, + otext *str +); + +/** +* @brief +* Convert a string to a number and store it in the given number handle +* +* @param number - Destination number handle +* @param str - Source number string +* @param fmt - Number format +* +* @note +* Input string can be one the following 'magic strings': +* - '~' for positive infinity +* - '-~' for negative infinity +* +* @return +* TRUE on success otherwise FALSE +* +*/ + +OCI_EXPORT boolean OCI_API OCI_NumberFromText +( + OCI_Number *number, + const otext *str, + const otext *fmt +); + +/** +* @brief +* Return the number value content +* +* @param number - number handle +* +* @note +* Returned content is a buffer of 22 bytes corresponding to Oracle C native +* representation of NUMBER values +* See oracle Documentation of its layout +* +* @return +* TRUE on success otherwise FALSE +* +*/ + +OCI_EXPORT unsigned char * OCI_API OCI_NumberGetContent +( + OCI_Number *number +); + +/** +* @brief +* Assign the number value content +* +* @param number - number handle +* @param content - raw number content +* +* @note +* See OCI_NumberSetContent() for more information +* +* @return +* TRUE on success otherwise FALSE +* +*/ + +OCI_EXPORT boolean OCI_API OCI_NumberSetContent +( + OCI_Number *number, + unsigned char *content +); + +/** +* @brief +* Assign the number value with the value of a native C numeric type +* +* @param number - number handle +* @param type - native C type to assign +* @param value - pointer to value to set +* +* @note +* Argument @param type can be : +* +* - OCI_NUM_SHORT : value is a pointer to a signed short +* - OCI_NUM_USHORT : value is a pointer to an unsigned short +* - OCI_NUM_INT : value is a pointer to a signed int +* - OCI_NUM_UINT : value is a pointer to an unsigned short +* - OCI_NUM_BIGINT : value is a pointer to a signed big_int +* - OCI_NUM_BIGUINT : value is a pointer to an unsigned big_uint +* - OCI_NUM_FLOAT : value is a pointer to an float +* - OCI_NUM_DOUBLE : value is a pointer to a double +* - OCI_NUM_NUMBER : value is a pointer to a OCI_Number +* +* @return +* TRUE on success otherwise FALSE +* +*/ + +OCI_EXPORT boolean OCI_API OCI_NumberSetValue +( + OCI_Number *number, + unsigned int type, + void *value +); + +/** +* @brief +* Assign the number value to a native C numeric type +* +* @param number - number handle +* @param type - native C type to assign +* @param value - pointer to a native C variable +* +* @note +* See OCI_NumberSetValue() for more information +* +* @return +* TRUE on success otherwise FALSE +* +*/ + +OCI_EXPORT boolean OCI_API OCI_NumberGetValue +( + OCI_Number *number, + unsigned int type, + void *value +); + +/** +* @brief +* Add the value of a native C numeric type to the given number +* +* @param number - number handle +* @param type - native C type of the variable +* @param value - pointer to a native C variable to add +* +* @note +* See OCI_NumberSetValue() for more information +* +* @return +* TRUE on success otherwise FALSE +* +*/ + +OCI_EXPORT boolean OCI_API OCI_NumberAdd +( + OCI_Number *number, + unsigned int type, + void *value +); + +/** +* @brief +* Subtract the value of a native C numeric type to the given number +* +* @param number - number handle +* @param type - native C type of the variable +* @param value - pointer to a native C variable to subtract +* +* @note +* See OCI_NumberSetValue() for more information +* +* @return +* TRUE on success otherwise FALSE +* +*/ + +OCI_EXPORT boolean OCI_API OCI_NumberSub +( + OCI_Number *number, + unsigned int type, + void *value +); + +/** +* @brief +* Multiply the given number with the value of a native C numeric +* +* @param number - number handle +* @param type - native C type of the variable +* @param value - pointer to a native C variable to multiply by +* +* @note +* See OCI_NumberSetValue() for more information +* +* @return +* TRUE on success otherwise FALSE +* +*/ + +OCI_EXPORT boolean OCI_API OCI_NumberMultiply +( + OCI_Number *number, + unsigned int type, + void *value +); + +/** +* @brief +* Divide the given number with the value of a native C numeric +* +* @param number - number handle +* @param type - native C type of the variable +* @param value - pointer to a native C variable to divide by +* +* @note +* See OCI_NumberSetValue() for more information +* +* @return +* TRUE on success otherwise FALSE +* +*/ + +OCI_EXPORT boolean OCI_API OCI_NumberDivide +( + OCI_Number *number, + unsigned int type, + void *value +); + +/** + * @brief + * Compares two number handles + * + * @param number1 - number1 handle + * @param number2 - number2 handle + * + * @return + * - -1 if number1 is smaller than number2, + * - 0 if they are equal + * - 1 if number1 is greater than number2. + * + */ + +OCI_EXPORT int OCI_API OCI_NumberCompare +( + OCI_Number *number1, + OCI_Number *number2 +); + +/** +* @} +*/ + +/** + * @} + */ + +/** + * @defgroup OcilibCApiDatetimes Date/time manipulation + * @{ + * + * OCILIB encapsulates Oracle SQL Date data type within OCI_Date structure + * + * Basically, the OCI_Date routines are wrappers around the Oracle OCIDate APIs + * + * @par Example + * @include date.c + * + */ + +/** + * @brief + * Create a local date object + * + * @param con - Connection handle + * + * @note + * From version 2.5.0, parameter 'con' can be NULL in order to manipulate dates + * independently from database connections + * + * @return + * Return the date handle on success otherwise NULL on failure + * + */ + +OCI_EXPORT OCI_Date * OCI_API OCI_DateCreate +( + OCI_Connection *con +); + +/** + * @brief + * Free a date object + * + * @param date - Date handle + * + * @warning + * Only dates created with OCI_DateCreate() should be freed by OCI_DateFree() + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_DateFree +( + OCI_Date *date +); + +/** + * @brief + * Create an array of date object + * + * @param con - Connection handle + * @param nbelem - number of elements in the array + * + * @note + * see OCI_DateCreate() for more details + * + * @return + * Return the date handle array on success otherwise NULL on failure + * + */ + +OCI_EXPORT OCI_Date ** OCI_API OCI_DateArrayCreate +( + OCI_Connection *con, + unsigned int nbelem +); + +/** + * @brief + * Free an array of date objects + * + * @param dates - Array of date objects + * + * @warning + * Only arrays of dates created with OCI_DateArrayCreate() should be freed by OCI_DateArrayFree() + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_DateArrayFree +( + OCI_Date **dates +); + +/** + * @brief + * Add or subtract days to a date handle + * + * @param date - Date handle + * @param nb - Number of days to add/remove + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_DateAddDays +( + OCI_Date *date, + int nb +); + +/** + * @brief + * Add or subtract months to a date handle + * + * @param date - Date handle + * @param nb - Number of months to add/remove + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_DateAddMonths +( + OCI_Date *date, + int nb +); + +/** + * @brief + * Assign the value of a date handle to another one + * + * @param date - Destination Date handle + * @param date_src - Source Date handle + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT int OCI_API OCI_DateAssign +( + OCI_Date *date, + OCI_Date *date_src +); + +/** + * @brief + * Check if the given date is valid + * + * @param date - Date handle + * + * @return + * - Zero if date is valid + * - Any other value means the date is invalid + * + */ + +OCI_EXPORT int OCI_API OCI_DateCheck +( + OCI_Date *date +); + +/** + * @brief + * Compares two date handles + * + * @param date - Date1 handle + * @param date2 - Date2 handle + * + * @return + * - -1 if date1 is smaller than date2, + * - 0 if they are equal + * - 1 if date1 is greater than date2. + * + */ + +OCI_EXPORT int OCI_API OCI_DateCompare +( + OCI_Date *date, + OCI_Date *date2 +); + +/** + * @brief + * Return the number of days betWeen two dates + * + * @param date - Date1 handle + * @param date2 - Date2 handle + * + * @return + * Number of days on success otherwise OCI_ERROR on failure + * + */ + +OCI_EXPORT int OCI_API OCI_DateDaysBetween +( + OCI_Date *date, + OCI_Date *date2 +); + +/** + * @brief + * Convert a string to a date and store it in the given date handle + * + * @param date - Destination Date handle + * @param str - Source date string + * @param fmt - Date format + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_DateFromText +( + OCI_Date *date, + const otext *str, + const otext *fmt +); + +/** + * @brief + * Convert a Date value from the given date handle to a string + * + * @param date - source Date handle + * @param fmt - Date format + * @param size - Destination string size in characters + * @param str - Destination date string + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_DateToText +( + OCI_Date *date, + const otext *fmt, + int size, + otext *str +); + +/** + * @brief + * Extract the date part from a date handle + * + * @param date - Date handle + * @param year - Place holder for year value + * @param month - Place holder for month value + * @param day - Place holder for day value + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_DateGetDate +( + OCI_Date *date, + int *year, + int *month, + int *day +); + +/** + * @brief + * Extract the time part from a date handle + * + * @param date - Date handle + * @param hour - Place holder for hour value + * @param min - Place holder for minute value + * @param sec - Place holder for second value + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_DateGetTime +( + OCI_Date *date, + int *hour, + int *min, + int *sec +); + +/** + * @brief + * Extract the date and time parts from a date handle + * + * @param date - Date handle + * @param year - Place holder for year value + * @param month - Place holder for month value + * @param day - Place holder for day value + * @param hour - Place holder for hour value + * @param min - Place holder for minute value + * @param sec - Place holder for second value + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_DateGetDateTime +( + OCI_Date *date, + int *year, + int *month, + int *day, + int *hour, + int *min, + int *sec +); + +/** + * @brief + * Set the date portion if the given date handle + * + * @param date - Date handle + * @param year - Year value + * @param month - Month value + * @param day - Day value + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_DateSetDate +( + OCI_Date *date, + int year, + int month, + int day +); + +/** + * @brief + * Set the time portion if the given date handle + * + * @param date - Date handle + * @param hour - Hour value + * @param min - Minute value + * @param sec - Second value + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_DateSetTime +( + OCI_Date *date, + int hour, + int min, + int sec +); + +/** + * @brief + * Set the date and time portions if the given date handle + * + * @param date - Date handle + * @param year - Year value + * @param month - Month value + * @param day - Day value + * @param hour - Hour value + * @param min - Minute value + * @param sec - Second value + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_DateSetDateTime +( + OCI_Date *date, + int year, + int month, + int day, + int hour, + int min, + int sec +); + +/** + * @brief + * Place the last day of month (from the given date) into the given date + * + * @param date - Date handle + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_DateLastDay +( + OCI_Date *date +); + +/** + * @brief + * Gets the date of next day of the week, after a given date + * + * @param date - Date handle + * @param day - Day of the week + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_DateNextDay +( + OCI_Date *date, + const otext *day +); + +/** + * @brief + * Return the current system date/time into the date handle + * + * @param date - Date handle + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_DateSysDate +( + OCI_Date *date +); + +/** + * @brief + * Convert a date from one zone to another zone + * + * @param date - Date handle + * @param zone1 - Source zone + * @param zone2 - Destination zone + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_DateZoneToZone +( + OCI_Date *date, + const otext *zone1, + const otext *zone2 +); + +/** + * @brief + * Affect an OCI_Date handle value to ISO C time data types + * + * @param date - Date handle + * @param ptm - Pointer to a structure tm to receive date/time values + * @param pt - Pointer to a time_t to hold the date/time in the time_t format + * + * @note + * Both parameters 'ptm' and 'p' are optional but one of them has to be provided. + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_DateToCTime +( + OCI_Date *date, + struct tm *ptm, + time_t *pt +); + +/** + * @brief + * Affect ISO C time data types values to an OCI_Date handle + * + * @param date - Date handle + * @param ptm - Pointer to a structure tm that hold the date/time value + * @param t - Value (time_t) that hold the date/time in the time_t format + * + * @note + * Both parameters 'ptm' and 'p' are optional but one of them has to be provided. + * If 'ptm' is not null, its value is affected to the OCI_Timestamp handle, + * otherwise the value of 't' is used. + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_DateFromCTime +( + OCI_Date *date, + struct tm *ptm, + time_t t +); + +/** + * @} + */ + +/** + * @defgroup OcilibCApiTimestamps Timestamps and intervals manipulation + * @{ + * + * OCILIB encapsulates Oracle : + * + * - SQL timestamp data type within OCI_Timestamp structure + * - SQL interval data type within OCI_Interval structure + * + * Basically, the OCI_Timestamp and OCI_Interval routines are wrappers around + * the Oracle OCIDatetime and OCIInterval APIs + * + * @par Examples + * @include timestamp.c + * + */ + +/** + * @brief + * Create a local Timestamp instance + * + * @param con - Connection handle + * @param type - Timestamp type + * + * @note + * From version 2.5.0, parameter 'con' can be NULL in order to manipulate + * timestamps independently from database connections + * + * @note + * Timestamp type can be : + * + * - OCI_TIMESTAMP : timestamp + * - OCI_TIMESTAMP_TZ : timestamp with time zone + * - OCI_TIMESTAMP_LTZ : timestamp with local time zone + * + * @return + * Return the Timestamp handle on success otherwise NULL on failure + * + */ + +OCI_EXPORT OCI_Timestamp * OCI_API OCI_TimestampCreate +( + OCI_Connection *con, + unsigned int type +); + +/** + * @brief + * Free an OCI_Timestamp handle + * + * @param tmsp - Timestamp handle + * + * @warning + * Only Timestamp created with OCI_TimestampCreate() should be freed by OCI_IntervalFree() + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_TimestampFree +( + OCI_Timestamp *tmsp +); + +/** + * @brief + * Create an array of timestamp object + * + * @param con - Connection handle + * @param type - Timestamp type + * @param nbelem - number of elements in the array + * + * @note + * see OCI_TimestampCreate() for more details + * + * @return + * Return the timestamp handle array on success otherwise NULL on failure + * + */ + +OCI_EXPORT OCI_Timestamp ** OCI_API OCI_TimestampArrayCreate +( + OCI_Connection *con, + unsigned int type, + unsigned int nbelem +); + +/** + * @brief + * Free an array of timestamp objects + * + * @param tmsps - Array of timestamp objects + * + * @warning + * Only arrays of timestamp created with OCI_TimestampArrayCreate() + * should be freed by OCI_TimestampArrayFree() + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_TimestampArrayFree +( + OCI_Timestamp **tmsps +); + +/** + * @brief + * Return the type of the given Timestamp object + * + * @param tmsp - Timestamp handle + * + * @note + * For possible values, see OCI_TimestampCreate() + * + * @return + * Object type or OCI_UNKNOWN the input handle is NULL + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_TimestampGetType +( + OCI_Timestamp *tmsp +); + +/** + * @brief + * Assign the value of a timestamp handle to another one + * + * @param tmsp - Destination Timestamp handle + * @param tmsp_src - Source Timestamp handle + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_TimestampAssign +( + OCI_Timestamp *tmsp, + OCI_Timestamp *tmsp_src +); + +/** + * @brief + * Check if the given timestamp is valid + * + * @param tmsp - Timestamp handle + * + * @return + * - Zero if the timestamp value is valid + * - Any other value means the timestamp value is invalid + * + */ + +OCI_EXPORT int OCI_API OCI_TimestampCheck +( + OCI_Timestamp *tmsp +); + +/** + * @brief + * Compares two timestamp handles + * + * @param tmsp - Timestamp1 handle + * @param tmsp2 - Timestamp2 handle + * + * @return + * - -1 if Timestamp1 is smaller than Timestamp2, + * - 0 if they are equal + * - 1 if Timestamp1 is greater than Timestamp2. + * + */ + +OCI_EXPORT int OCI_API OCI_TimestampCompare +( + OCI_Timestamp *tmsp, + OCI_Timestamp *tmsp2 +); + +/** + * @brief + * Set a timestamp handle value + * + * @param tmsp - Timestamp handle + * @param year - Year value + * @param month - Month value + * @param day - Day value + * @param hour - hour value + * @param min - minutes value + * @param sec - seconds value + * @param fsec - fractional part of seconds value + * @param time_zone - name of a time zone to use [optional] + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_TimestampConstruct +( + OCI_Timestamp *tmsp, + int year, + int month, + int day, + int hour, + int min, + int sec, + int fsec, + const otext *time_zone +); + +/** + * @brief + * Convert one timestamp value from one type to another. + * + * @param tmsp - Timestamp handle to convert + * @param tmsp_src - Timestamp handle to use for the type conversion + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_TimestampConvert +( + OCI_Timestamp *tmsp, + OCI_Timestamp *tmsp_src +); + +/** + * @brief + * Convert a string to a timestamp and store it in the given timestamp handle + * + * @param tmsp - Destination Timestamp handle + * @param str - Source date string + * @param fmt - Date format + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_TimestampFromText +( + OCI_Timestamp *tmsp, + const otext *str, + const otext *fmt +); + +/** + * @brief + * Convert a timestamp value from the given timestamp handle to a string + * + * @param tmsp - source Timestamp handle + * @param fmt - Timestamp format + * @param size - Destination string size in characters + * @param str - Destination date string + * @param precision - Precision for fractional part of the seconds + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_TimestampToText +( + OCI_Timestamp *tmsp, + const otext *fmt, + int size, + otext *str, + int precision +); + +/** + * @brief + * Extract the date part from a timestamp handle + * + * @param tmsp - Timestamp handle + * @param year - Place holder for year value + * @param month - Place holder for month value + * @param day - Place holder for day value + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_TimestampGetDate +( + OCI_Timestamp *tmsp, + int *year, + int *month, + int *day +); + +/** + * @brief + * Extract the time portion from a timestamp handle + * + * @param tmsp - Timestamp handle + * @param hour - Place holder for hour value + * @param min - Place holder for minute value + * @param sec - Place holder for second value + * @param fsec - Place holder for fractional part of second value + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_TimestampGetTime +( + OCI_Timestamp *tmsp, + int *hour, + int *min, + int *sec, + int *fsec +); + +/** + * @brief + * Extract the date and time parts from a date handle + * + * @param tmsp - Date handle + * @param year - Place holder for year value + * @param month - Place holder for month value + * @param day - Place holder for day value + * @param hour - Place holder for hour value + * @param min - Place holder for minute value + * @param sec - Place holder for second value + * @param fsec - Place holder for fractional part of seconds value + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_TimestampGetDateTime +( + OCI_Timestamp *tmsp, + int *year, + int *month, + int *day, + int *hour, + int *min, + int *sec, + int *fsec +); + +/** + * @brief + * Return the time zone name of a timestamp handle + * + * @param tmsp - Timestamp handle + * @param size - Destination string size in characters + * @param str - Destination zone name string + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_TimestampGetTimeZoneName +( + OCI_Timestamp *tmsp, + int size, + otext *str +); + +/** + * @brief + * Return the time zone (hour, minute) portion of a timestamp handle + * + * @param tmsp - Timestamp handle + * @param hour - Place holder for hour value + * @param min - Place holder for min value + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_TimestampGetTimeZoneOffset +( + OCI_Timestamp *tmsp, + int *hour, + int *min +); + +/** + * @brief + * Add an interval value to a timestamp value of a timestamp handle + * + * @param tmsp - Timestamp handle + * @param itv - Interval handle + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_TimestampIntervalAdd +( + OCI_Timestamp *tmsp, + OCI_Interval *itv +); + +/** + * @brief + * Subtract an interval value from a timestamp value of a timestamp handle + * + * @param tmsp - Timestamp handle + * @param itv - Interval handle + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_TimestampIntervalSub +( + OCI_Timestamp *tmsp, + OCI_Interval *itv +); + +/** + * @brief + * Store the difference of two timestamp handles into an interval handle + * + * @param tmsp - Timestamp handle (subtrahend) + * @param tmsp2 - Timestamp2 handle (minuend) + * @param itv - Interval handle + * + * @note + * The function acts like tmsp - tmsp2 = itv + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_TimestampSubtract +( + OCI_Timestamp *tmsp, + OCI_Timestamp *tmsp2, + OCI_Interval *itv +); + +/** + * @brief + * Stores the system current date and time as a timestamp value with time zone + * into the timestamp handle. + * + * @param tmsp - Timestamp handle + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_TimestampSysTimestamp +( + OCI_Timestamp *tmsp +); + +/** + * @brief + * Affect an OCI_Timestamp handle value to ISO C time data types + * + * @param tmsp - Timestamp handle + * @param ptm - Pointer to a structure tm to receive date/time values + * @param pt - Pointer to a time_t to hold the date/time in the time_t format + * + * @note + * Both parameters 'ptm' and 'p' are optional but one of them has to be provided. + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_TimestampToCTime +( + OCI_Timestamp *tmsp, + struct tm *ptm, + time_t *pt +); + +/** + * @brief + * Affect ISO C time data types values to an OCI_Timestamp handle + * + * @param tmsp - Timestamp handle + * @param ptm - Pointer to a structure tm that hold the date/time value + * @param t - Value (time_t) that hold the date/time in the time_t format + * + * @note + * Both parameters 'ptm' and 'p' are optional but one of them has to be provided. + * If 'ptm' is not null, its value is affected to the OCI_Timestamp handle, + * otherwise the value of 't' is used. + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_TimestampFromCTime +( + OCI_Timestamp *tmsp, + struct tm *ptm, + time_t t +); + +/** + * @brief + * Create a local interval object + * + * @param con - Connection handle + * @param type - Type of Interval + * + * @note + * From version 2.5.0, parameter 'con' can be NULL in order to manipulate + * intervals independently from database connections + * + * @note + * Interval type can be : + * - OCI_INTERVAL_YM : year / month interval + * - OCI_INTERVAL_DS : date/ time interval + * + * @return + * Return the Interval handle on success otherwise NULL on failure + * + */ + +OCI_EXPORT OCI_Interval * OCI_API OCI_IntervalCreate +( + OCI_Connection *con, + unsigned int type +); + +/** + * @brief + * Free an OCI_Interval handle + * + * @param itv - Interval handle + * + * @warning + * Only Intervals created with OCI_IntervalCreate() should be freed by + * OCI_IntervalFree() + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_IntervalFree +( + OCI_Interval *itv +); + +/** + * @brief + * Create an array of Interval object + * + * @param con - Connection handle + * @param type - Type of Interval + * @param nbelem - number of elements in the array + * + * @note + * see OCI_IntervalCreate() for more details + * + * @return + * Return the Interval handle array on success otherwise NULL on failure + * + */ + +OCI_EXPORT OCI_Interval ** OCI_API OCI_IntervalArrayCreate +( + OCI_Connection *con, + unsigned int type, + unsigned int nbelem +); + +/** + * @brief + * Free an array of Interval objects + * + * @param itvs - Array of Interval objects + * + * @warning + * Only arrays of Interval created with OCI_IntervalArrayCreate() should be freed by + * OCI_IntervalArrayFree() + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_IntervalArrayFree +( + OCI_Interval **itvs +); + +/** + * @brief + * Return the type of the given Interval object + * + * @param itv - Interval handle + * + * @note + * For possible values, see OCI_IntervalCreate() + * + * @return + * Object type or OCI_UNKNOWN the input handle is NULL + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_IntervalGetType +( + OCI_Interval *itv +); + +/** + * @brief + * Assign the value of a interval handle to another one + * + * @param itv - Destination interval handle + * @param itv_src - Source interval handle + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_IntervalAssign +( + OCI_Interval *itv, + OCI_Interval *itv_src +); + +/** + * @brief + * Check if the given interval is valid + * + * @param itv - Interval handle + * + * @return + * - Zero if the interval value is valid + * - Any other value means the interval value is invalid + * + */ + +OCI_EXPORT int OCI_API OCI_IntervalCheck +( + OCI_Interval *itv +); + +/** + * @brief + * Compares two interval handles + * + * @param itv - Interval1 handle + * @param itv2 - Interval2 handle + * + * @return + * - -1 if interval1 is smaller than interval2, + * - 0 if they are equal + * - 1 if interval1 is greater than interval2. + * + */ + +OCI_EXPORT int OCI_API OCI_IntervalCompare +( + OCI_Interval *itv, + OCI_Interval *itv2 +); + +/** + * @brief + * Convert a string to an interval and store it in the given interval handle + * + * @param itv - Destination interval handle + * @param str - Source date string + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_IntervalFromText +( + OCI_Interval *itv, + const otext *str +); + +/** + * @brief + * Convert an interval value from the given interval handle to a string + * + * @param itv - source Interval handle + * @param leading_prec - Precision of the leading part + * @param fraction_prec - Precision of the fractional part + * @param size - Destination string size in characters + * @param str - Destination date string + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_IntervalToText +( + OCI_Interval *itv, + int leading_prec, + int fraction_prec, + int size, + otext *str +); + +/** + * @brief + * Correct an interval handle value with the given time zone + * + * @param itv - Interval handle + * @param str - Time zone name + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_IntervalFromTimeZone +( + OCI_Interval *itv, + const otext *str +); + +/** + * @brief + * Return the day / time portion of an interval handle + * + * @param itv - Interval handle + * @param day - Place holder for day value + * @param hour - Place holder for hours value + * @param min - Place holder for minutes value + * @param sec - Place holder for seconds value + * @param fsec - Place holder for fractional part of seconds value + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_IntervalGetDaySecond +( + OCI_Interval *itv, + int *day, + int *hour, + int *min, + int *sec, + int *fsec +); + +/** + * @brief + * Return the year / month portion of an interval handle + * + * @param itv - Interval handle + * @param year - Place holder for year value + * @param month - Place holder for month value + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_IntervalGetYearMonth +( + OCI_Interval *itv, + int *year, + int *month +); + +/** + * @brief + * Set the day / time portion if the given interval handle + * + * @param itv - Interval handle + * @param day - day value + * @param hour - Hour value + * @param min - Minute value + * @param sec - Second value + * @param fsec - Fractional part of the seconds + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_IntervalSetDaySecond +( + OCI_Interval *itv, + int day, + int hour, + int min, + int sec, + int fsec +); + +/** + * @brief + * Set the year / month portion if the given Interval handle + * + * @param itv - Interval handle + * @param year - Year value + * @param month - Month value + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_IntervalSetYearMonth +( + OCI_Interval *itv, + int year, + int month +); + +/** + * @brief + * Adds an interval handle value to another + * + * @param itv - Interval handle from witch to add + * @param itv2 - Interval handle to add + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_IntervalAdd +( + OCI_Interval *itv, + OCI_Interval *itv2 +); + +/** + * @brief + * Subtract an interval handle value from another + * + * @param itv - Interval handle from witch to remove + * @param itv2 - Interval handle to remove + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_IntervalSubtract +( + OCI_Interval *itv, + OCI_Interval *itv2 +); + +/** + * @} + */ + +/** + * @defgroup OcilibCApiUserTypes Oracle Named Types (Oracle OBJECTs) + * @{ + * + * OCILIB implements Oracle Named types (user types and built-in types) through + * the OCI_Object type. + * + * OTT and C structures are not required to use objects in OCILIB. + * + * In order to manipulate objects attributes, OCILIB proposes a set of functions + * to get/set properties for various supported types. + * + * Objects can be: + * - Created as standalone instances (transient objects) + * - Used for binding (persistent / transient objects) + * - Retrieved from select statements (persistent / embedded objects) + * + * References (Oracle type REF) are identifiers (smart pointers) to objects and + * are implemented in OCILIB with the type OCI_Ref. + * + * OCILIB implements Oracle REFs as strong typed Reference (underlying OCI REFs + * are weaker in terms of typing). + * It means it's mandatory to provide type information to: + * - create a local OCI_Ref handle. + * - register an OCI_Ref handle for a 'returning into' clause. + * + * @note + * See Oracle Database SQL Language Reference for more details about REF data type + * + * @warning + * Prior to v3.5.0, OCILIB relied on some OCI routines to set/get objects + * attributes. these OCI calls had known bugs in Unicode mode that has been fixed in Oracle 11gR2. + * From v3.5.0, OCILIB directly sets objects attributes and thus OCILIB objects + * can now be used in Unicode mode. + * + * @par Example : Inserting a local object into a table + * @include object.c + * + * @par Example : Using Object References + * @include ref.c + * + */ + +/** + * @brief + * Create a local object instance + * + * @param con - Connection handle + * @param typinf - Object type (type info handle) + * + * @return + * Return the object handle on success otherwise NULL on failure + * + */ + +OCI_EXPORT OCI_Object * OCI_API OCI_ObjectCreate +( + OCI_Connection *con, + OCI_TypeInfo *typinf +); + +/** + * @brief + * Free a local object + * + * @param obj - Object handle + * + * @warning + * Only object created with OCI_ObjectCreate() should be freed + * by OCI_ObjectFree() + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ObjectFree +( + OCI_Object *obj +); + +/** + * @brief + * Create an array of Object objects + * + * @param con - Connection handle + * @param typinf - Object type (type info handle) + * @param nbelem - number of elements in the array + * + * @note + * see OCI_ObjectCreate() for more details + * + * @return + * Return the Object handle array on success otherwise NULL on failure + * + */ + +OCI_EXPORT OCI_Object ** OCI_API OCI_ObjectArrayCreate +( + OCI_Connection *con, + OCI_TypeInfo *typinf, + unsigned int nbelem +); + +/** + * @brief + * Free an array of Object objects + * + * @param objs - Array of Object objects + * + * @warning + * Only arrays of Object created with OCI_ObjectArrayCreate() + * should be freed by OCI_ObjectArrayFree() + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ObjectArrayFree +( + OCI_Object **objs +); + +/** + * @brief + * Assign an object to another one + * + * @param obj - Destination Object handle + * @param obj_src - Source Object handle + * + * @note + * Oracle proceeds to a deep copy of the object content + * + * @note + * The two object handles must have the same type otherwise an exception is thrown + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ObjectAssign +( + OCI_Object *obj, + OCI_Object *obj_src +); + +/** + * @brief + * Return the type of an object instance + * + * @param obj - Object handle + * + * @note + * Possibles values are : + * + * - OCI_OBJ_PERSISTENT: persistent object from the DB + * - OCI_OBJ_TRANSIENT : local temporary object + * - OCI_OBJ_VALUE : embedded object + * + * @return + * Instance type or OCI_UNKNOWN the input handle is NULL + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_ObjectGetType +( + OCI_Object *obj +); + +/** + * @brief + * Retrieve an Oracle Ref handle from an object and assign it to the given + * OCILIB OCI_Ref handle + * + * @param obj - Object handle + * @param ref - Ref handle + * + * @note + * The type information of the object and the ref must be the same, otherwise + * an exception is thrown + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ObjectGetSelfRef +( + OCI_Object *obj, + OCI_Ref *ref +); + +/** + * @brief + * Return the type info object associated to the object + * + * @param obj - Object handle + * + */ + +OCI_EXPORT OCI_TypeInfo * OCI_API OCI_ObjectGetTypeInfo +( + OCI_Object *obj +); + +/** + * @brief + * Return the boolean value of the given object attribute (ONLY for PL/SQL records) + * + * @param obj - Object handle + * @param attr - Attribute name + * + * @note + * If the attribute is found in the object descriptor attributes list, then a + * data type check is performed for integrity. + * OCI_ObjectGetBoolean() returns a valid value only for PL/SQL boolean based attributes + * + * @warning + * - ONLY supported by Oracle 12c and above ! + * + * @return + * Attribute value or 0 on failure or wrong attribute type + * + */ + +OCI_EXPORT boolean OCI_API OCI_ObjectGetBoolean +( + OCI_Object *obj, + const otext *attr +); + +/** +* @brief +* Return the number value of the given object attribute +* +* @param obj - Object handle +* @param attr - Attribute name +* +* @note +* If the attribute is found in the object descriptor attributes list, then a +* data type check is performed for integrity. +* OCI_ObjectGetNumber() returns a valid value only for number based attributes +* +* @return +* Attribute value or NULL on failure or wrong attribute type +* +*/ + +OCI_EXPORT OCI_Number* OCI_API OCI_ObjectGetNumber +( + OCI_Object *obj, + const otext *attr +); + +/** + * @brief + * Return the short value of the given object attribute + * + * @param obj - Object handle + * @param attr - Attribute name + * + * @note + * If the attribute is found in the object descriptor attributes list, then a + * data type check is performed for integrity. + * OCI_ObjectGetShort() returns a valid value only for integer and number based attributes + * + * @return + * Attribute value or 0 on failure or wrong attribute type + * + */ + +OCI_EXPORT short OCI_API OCI_ObjectGetShort +( + OCI_Object *obj, + const otext *attr +); + +/** + * @brief + * Return the unsigned short value of the given object attribute + * + * @param obj - Object handle + * @param attr - Attribute name + * + * @note + * If the attribute is found in the object descriptor attributes list, then a + * data type check is performed for integrity. + * OCI_ObjectGetUnsignedShort() returns a valid value only for integer and number based attributes + * + * @return + * Attribute value or 0 on failure or wrong attribute type + * + */ + +OCI_EXPORT unsigned short OCI_API OCI_ObjectGetUnsignedShort +( + OCI_Object *obj, + const otext *attr +); + +/** + * @brief + * Return the integer value of the given object attribute + * + * @param obj - Object handle + * @param attr - Attribute name + * + * @note + * If the attribute is found in the object descriptor attributes list, then a + * data type check is performed for integrity. + * OCI_ObjectGetInt() returns a valid value only for integer and number based attributes + * + * @return + * Attribute value or 0 on failure or wrong attribute type + * + */ + +OCI_EXPORT int OCI_API OCI_ObjectGetInt +( + OCI_Object *obj, + const otext *attr +); + +/** + * @brief + * Return the unsigned integer value of the given object attribute + * + * @param obj - Object handle + * @param attr - Attribute name + * + * @note + * If the attribute is found in the object descriptor attributes list, then a + * data type check is performed for integrity. + * OCI_ObjectGetUnsignedInt() returns a valid value only for integer and number based attributes + * + * @return + * Attribute value or 0 on failure or wrong attribute type + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_ObjectGetUnsignedInt +( + OCI_Object *obj, + const otext *attr +); + +/** + * @brief + * Return the big integer value of the given object attribute + * + * @param obj - Object handle + * @param attr - Attribute name + * + * @note + * If the attribute is found in the object descriptor attributes list, then a + * data type check is performed for integrity. + * OCI_ObjectGetBigInt() returns a valid value only for integer and number based attributes + * + * @return + * Attribute value or 0 on failure or wrong attribute type + * + */ + +OCI_EXPORT big_int OCI_API OCI_ObjectGetBigInt +( + OCI_Object *obj, + const otext *attr +); + +/** + * @brief + * Return the unsigned big integer value of the given object attribute + * + * @param obj - Object handle + * @param attr - Attribute name + * + * @note + * If the attribute is found in the object descriptor attributes list, then a + * data type check is performed for integrity. + * OCI_ObjectGetUnsignedBigInt() returns a valid value only for integer and number based attributes + * + * @return + * Attribute value or 0 on failure or wrong attribute type + * + */ + +OCI_EXPORT big_uint OCI_API OCI_ObjectGetUnsignedBigInt +( + OCI_Object *obj, + const otext *attr +); + +/** + * @brief + * Return the double value of the given object attribute + * + * @param obj - Object handle + * @param attr - Attribute name + * + * @note + * If the attribute is found in the object descriptor attributes list, then a + * data type check is performed for integrity. + * OCI_ObjectGetDouble() returns a valid value only for integer and number based attributes + * + * @return + * Attribute value or 0.0 on failure or wrong attribute type + * + */ + +OCI_EXPORT double OCI_API OCI_ObjectGetDouble +( + OCI_Object *obj, + const otext *attr +); + +/** + * @brief + * Return the float value of the given object attribute + * + * @param obj - Object handle + * @param attr - Attribute name + * + * @note + * If the attribute is found in the object descriptor attributes list, then a + * data type check is performed for integrity. + * OCI_ObjectGetFloat() returns a valid value only for integer and number based attributes + * + * @return + * Attribute value or 0.0 on failure or wrong attribute type + * + */ + +OCI_EXPORT float OCI_API OCI_ObjectGetFloat +( + OCI_Object *obj, + const otext *attr +); + +/** + * @brief + * Return the string value of the given object attribute + * + * @param obj - Object handle + * @param attr - Attribute name + * + * @note + * The method can return a string value for any attributes types. + * It performs implicit string conversions using the same + * mechanisms than OCI_GetString(). See its documentation for more details. + * + * @return + * Attribute value or NULL on failure + * + */ + +OCI_EXPORT const otext * OCI_API OCI_ObjectGetString +( + OCI_Object *obj, + const otext *attr +); + +/** + * @brief + * Return the raw attribute value of the given object attribute into the + * given buffer + * + * @param obj - Object handle + * @param attr - Attribute name + * @param value - Destination buffer + * @param len - Max size to write into buffer + + * @note + * If the attribute is found in the object descriptor attributes list, then a + * data type check is performed for integrity. + * OCI_ObjectGetRaw() copies data into the buffer only for raw based attributes + * + * @return + * Number of bytes written to the buffer or 0 on failure or wrong attribute type + * + */ + +OCI_EXPORT int OCI_API OCI_ObjectGetRaw +( + OCI_Object *obj, + const otext *attr, + void *value, + unsigned int len +); + +/** +* @brief +* Return the raw attribute value size of the given object attribute into the +* given buffer +* +* @param obj - Object handle +* @param attr - Attribute name +* +* @note +* If the attribute is found in the object descriptor attributes list, then a +* data type check is performed for integrity. +* +* @return +* size in bytes of the RAW value or 0 on failure or wrong attribute type +* +*/ + +OCI_EXPORT unsigned int OCI_API OCI_ObjectGetRawSize +( + OCI_Object *obj, + const otext *attr +); + +/** + * @brief + * Return the date value of the given object attribute + * + * @param obj - Object handle + * @param attr - Attribute name + * + * @note + * If the attribute is found in the object descriptor attributes list, then a + * data type check is performed for integrity. + * OCI_ObjectGetDate() returns a valid value only for date based attributes + * + * @return + * Attribute value or NULL on failure or wrong attribute type + * + */ + +OCI_EXPORT OCI_Date * OCI_API OCI_ObjectGetDate +( + OCI_Object *obj, + const otext *attr +); + +/** + * @brief + * Return the timestamp value of the given object attribute + * + * @param obj - Object handle + * @param attr - Attribute name + * + * @note + * If the attribute is found in the object descriptor attributes list, then a + * data type check is performed for integrity. + * OCI_ObjectGetTimestamp() returns a valid value only for timestamps based attributes + * + * @return + * Attribute value or NULL on failure or wrong attribute type + * + */ + +OCI_EXPORT OCI_Timestamp * OCI_API OCI_ObjectGetTimestamp +( + OCI_Object *obj, + const otext *attr +); + +/** + * @brief + * Return the interval value of the given object attribute + * + * @param obj - Object handle + * @param attr - Attribute name + * + * @note + * If the attribute is found in the object descriptor attributes list, then a + * data type check is performed for integrity. + * OCI_ObjectGetInterval() returns a valid value only for intervals based attributes + * + * @return + * Attribute value or NULL on failure or wrong attribute type + * + */ + +OCI_EXPORT OCI_Interval * OCI_API OCI_ObjectGetInterval +( + OCI_Object *obj, + const otext *attr +); + +/** + * @brief + * Return the collection value of the given object attribute + * + * @param obj - Object handle + * @param attr - Attribute name + * + * @note + * If the attribute is found in the object descriptor attributes list, then a + * data type check is performed for integrity. + * OCI_ObjectGetColl() returns a valid value only for intervals based attributes + * + * @return + * Attribute value or NULL on failure or wrong attribute type + * + */ + +OCI_EXPORT OCI_Coll * OCI_API OCI_ObjectGetColl +( + OCI_Object *obj, + const otext *attr +); + +/** + * @brief + * Return the Ref value of the given object attribute + * + * @param obj - Object handle + * @param attr - Attribute name + * + * @note + * If the attribute is found in the object descriptor attributes list, then a + * data type check is performed for integrity. + * OCI_ObjectGetRef() returns a valid value only for Refs based attributes + * + * @return + * Attribute value or NULL on failure or wrong attribute type + * + */ + +OCI_EXPORT OCI_Ref * OCI_API OCI_ObjectGetRef +( + OCI_Object *obj, + const otext *attr +); + +/** + * @brief + * Return the object value of the given object attribute + * + * @param obj - Object handle + * @param attr - Attribute name + * + * @note + * If the attribute is found in the object descriptor attributes list, then a + * data type check is performed for integrity. + * OCI_ObjectGetObject() returns a valid value only for object based attributes + * + * @return + * Attribute value or NULL on failure or wrong attribute type + * + */ + +OCI_EXPORT OCI_Object * OCI_API OCI_ObjectGetObject +( + OCI_Object *obj, + const otext *attr +); + +/** + * @brief + * Return the lob value of the given object attribute + * + * @param obj - Object handle + * @param attr - Attribute name + * + * @note + * If the attribute is found in the object descriptor attributes list, then a + * data type check is performed for integrity. + * OCI_ObjectGetLob() returns a valid value only for lobs based attributes + * + * @return + * Attribute value or NULL on failure or wrong attribute type + * + */ + +OCI_EXPORT OCI_Lob * OCI_API OCI_ObjectGetLob +( + OCI_Object *obj, + const otext *attr +); + +/** + * @brief + * Return the file value of the given object attribute + * + * @param obj - Object handle + * @param attr - Attribute name + * + * @note + * If the attribute is found in the object descriptor attributes list, then a + * data type check is performed for integrity. + * OCI_ObjectGetFile() returns a valid value only for files based attributes + * + * @return + * Attribute value or NULL on failure or wrong attribute type + * + */ + +OCI_EXPORT OCI_File * OCI_API OCI_ObjectGetFile +( + OCI_Object *obj, + const otext *attr +); + +/** + * @brief + * Set an object attribute of type boolean (ONLY for PL/SQL records) + * + * @param obj - Object handle + * @param attr - Attribute name + * @param value - boolean value + * + * @warning + * - ONLY supported by Oracle 12c and above ! + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ObjectSetBoolean +( + OCI_Object *obj, + const otext *attr, + boolean value +); + +/** +* @brief +* Set an object attribute of type number +* +* @param obj - Object handle +* @param attr - Attribute name +* @param value - number value +* +* @return +* TRUE on success otherwise FALSE +* +*/ + +OCI_EXPORT boolean OCI_API OCI_ObjectSetNumber +( + OCI_Object *obj, + const otext *attr, + OCI_Number *value +); + +/** + * @brief + * Set an object attribute of type short + * + * @param obj - Object handle + * @param attr - Attribute name + * @param value - Short value + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ObjectSetShort +( + OCI_Object *obj, + const otext *attr, + short value +); + +/** + * @brief + * Set an object attribute of type unsigned short + * + * @param obj - Object handle + * @param attr - Attribute name + * @param value - Unsigned short value + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ObjectSetUnsignedShort +( + OCI_Object *obj, + const otext *attr, + unsigned short value +); + +/** + * @brief + * Set an object attribute of type int + * + * @param obj - Object handle + * @param attr - Attribute name + * @param value - Int value + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ObjectSetInt +( + OCI_Object *obj, + const otext *attr, + int value +); + +/** + * @brief + * Set an object attribute of type unsigned int + * + * @param obj - Object handle + * @param attr - Attribute name + * @param value - Unsigned int value + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ObjectSetUnsignedInt +( + OCI_Object *obj, + const otext *attr, + unsigned int value +); + +/** + * @brief + * Set an object attribute of type big int + * + * @param obj - Object handle + * @param attr - Attribute name + * @param value - Big int value + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ObjectSetBigInt +( + OCI_Object *obj, + const otext *attr, + big_int value +); + +/** + * @brief + * Set an object attribute of type unsigned big int + * + * @param obj - Object handle + * @param attr - Attribute name + * @param value - Unsigned big int value + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ObjectSetUnsignedBigInt +( + OCI_Object *obj, + const otext *attr, + big_uint value +); + +/** + * @brief + * Set an object attribute of type double + * + * @param obj - Object handle + * @param attr - Attribute name + * @param value - Double value + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ObjectSetDouble +( + OCI_Object *obj, + const otext *attr, + double value +); + +/** + * @brief + * Set an object attribute of type float + * + * @param obj - Object handle + * @param attr - Attribute name + * @param value - Float value + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ObjectSetFloat +( + OCI_Object *obj, + const otext *attr, + float value +); + +/** + * @brief + * Set an object attribute of type string + * + * @param obj - Object handle + * @param attr - Attribute name + * @param value - String value + * + * @note + * passing a null pointer for value calls OCI_ObjectSetNull() + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ObjectSetString +( + OCI_Object *obj, + const otext *attr, + const otext *value +); + +/** + * @brief + * Set an object attribute of type RAW + * + * @param obj - Object handle + * @param attr - Attribute name + * @param value - Raw value + * @param len - Size of the raw value + * + * @note + * passing a null pointer for value calls OCI_ObjectSetNull() + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ObjectSetRaw +( + OCI_Object *obj, + const otext *attr, + void *value, + unsigned int len +); + +/** + * @brief + * Set an object attribute of type Date + * + * @param obj - Object handle + * @param attr - Attribute name + * @param value - Date Handle + * + * @note + * passing a null pointer for value calls OCI_ObjectSetNull() + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ObjectSetDate +( + OCI_Object *obj, + const otext *attr, + OCI_Date *value +); + +/** + * @brief + * Set an object attribute of type Timestamp + * + * @param obj - Object handle + * @param attr - Attribute name + * @param value - Timestamp Handle + * + * @note + * passing a null pointer for value calls OCI_ObjectSetNull() + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ObjectSetTimestamp +( + OCI_Object *obj, + const otext *attr, + OCI_Timestamp *value +); + +/** + * @brief + * Set an object attribute of type Interval + * + * @param obj - Object handle + * @param attr - Attribute name + * @param value - Interval Handle + * + * @note + * passing a null pointer for value calls OCI_ObjectSetNull() + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ObjectSetInterval +( + OCI_Object *obj, + const otext *attr, + OCI_Interval *value +); + +/** + * @brief + * Set an object attribute of type Collection + * + * @param obj - Object handle + * @param attr - Attribute name + * @param value - Collection Handle + * + * @note + * passing a null pointer for value calls OCI_ObjectSetNull() + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ObjectSetColl +( + OCI_Object *obj, + const otext *attr, + OCI_Coll *value +); + +/** + * @brief + * Set an object attribute of type Object + * + * @param obj - Object handle + * @param attr - Attribute name + * @param value - Object Handle + * + * @warning + * This function assigns a copy of the object to the given attribute. + * Any further modifications of the object passed as the parameter 'value' + * will not be reflected to object 's attribute set with this call + * + * @note + * passing a null pointer for value calls OCI_ObjectSetNull() + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ObjectSetObject +( + OCI_Object *obj, + const otext *attr, + OCI_Object *value +); + +/** + * @brief + * Set an object attribute of type Lob + * + * @param obj - Object handle + * @param attr - Attribute name + * @param value - Lob Handle + * + * @note + * passing a null pointer for value calls OCI_ObjectSetNull() + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ObjectSetLob +( + OCI_Object *obj, + const otext *attr, + OCI_Lob *value +); + +/** + * @brief + * Set an object attribute of type File + * + * @param obj - Object handle + * @param attr - Attribute name + * @param value - File Handle + * + * @note + * passing a null pointer for value calls OCI_ObjectSetNull() + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ObjectSetFile +( + OCI_Object *obj, + const otext *attr, + OCI_File *value +); + +/** + * @brief + * Set an object attribute of type Ref + * + * @param obj - Object handle + * @param attr - Attribute name + * @param value - Ref Handle + * + * @note + * passing a null pointer for value calls OCI_ObjectSetNull() + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ObjectSetRef +( + OCI_Object *obj, + const otext *attr, + OCI_Ref *value +); + +/** + * @brief + * Check if an object attribute is null + * + * @param obj - Object handle + * @param attr - Attribute name + * + * @return + * FALSE if the attribute is not null otherwise TRUE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ObjectIsNull +( + OCI_Object *obj, + const otext *attr +); + +/** + * @brief + * Set an object attribute to null + * + * @param obj - Object handle + * @param attr - Attribute name + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ObjectSetNull +( + OCI_Object *obj, + const otext *attr +); + +/** + * @brief + * Retrieve the underlying C (OTT/OCI style) structure of an OCI_Object handle + * + * @param obj - Object handle + * @param pp_struct - Address of a pointer that retrieve the C structure of data + * @param pp_ind - Address of a pointer that retrieve the C structure of indicators + * + * @note + * See Oracle OCI programming guide for more details about OTT structures. + * The members of these structures are OCI data types like OCINumber, OCIString + * that requires mixing OCILIB code and raw OCI code. + * OCI Object API headers have to be included to handle this data types using OCI object functions + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ObjectGetStruct +( + OCI_Object *obj, + void **pp_struct, + void **pp_ind +); + +/** + * @brief + * Convert an object handle value to a string + * + * @param obj - Object handle + * @param size - Destination string length pointer in characters + * @param str - Destination string + * + * @note + * In order to compute the needed string length, call the method with a NULL string + * Then call the method again with a valid buffer + * + * @note + * The resulting string is similar to the SQL*PLUS output for UDTs (user types and objects) + * For RAWs and BLOBs attributes, their binary values are converted to hexadecimal strings + * + * @warning + * This convenient method shall not be used when performance matters. It is usually called twice (buffer length + * computation) and must also care about quotes within strings. + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ObjectToText +( + OCI_Object *obj, + unsigned int *size, + otext *str +); + +/** + * @brief + * Create a local Ref instance + * + * @param con - Connection handle + * @param typinf - Ref type + * + * @return + * Return the Ref handle on success otherwise NULL on failure + * + */ + +OCI_EXPORT OCI_Ref * OCI_API OCI_RefCreate +( + OCI_Connection *con, + OCI_TypeInfo *typinf +); + +/** + * @brief + * Free a local Ref + * + * @param ref - Ref handle + * + * @warning + * Only Refs created with OCI_RefCreate() should be freed + * by OCI_RefFree() + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_RefFree +( + OCI_Ref *ref +); + +/** + * @brief + * Create an array of Ref object + * + * @param con - Connection handle + * @param typinf - Object type (type info handle) + * @param nbelem - number of elements in the array + * + * @note + * see OCI_RefCreate() for more details + * + * @return + * Return the Ref handle array on success otherwise NULL on failure + * + */ + +OCI_EXPORT OCI_Ref ** OCI_API OCI_RefArrayCreate +( + OCI_Connection *con, + OCI_TypeInfo *typinf, + unsigned int nbelem +); + +/** + * @brief + * Free an array of Ref objects + * + * @param refs - Array of Ref objects + * + * @warning + * Only arrays of Ref created with OCI_RefArrayCreate() + * should be freed by OCI_RefArrayFree() + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_RefArrayFree +( + OCI_Ref **refs +); + +/** + * @brief + * Assign a Ref to another one + * + * @param ref - Destination Ref handle + * @param ref_src - Source Ref handle + * + * @note + * The two Ref handles must have the same type otherwise an exception is thrown + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_RefAssign +( + OCI_Ref *ref, + OCI_Ref *ref_src +); + +/** + * @brief + * Return the type info object associated to the Ref + * + * @param ref - Ref handle + * + */ + +OCI_EXPORT OCI_TypeInfo * OCI_API OCI_RefGetTypeInfo +( + OCI_Ref *ref +); + +/** + * @brief + * Returns the object pointed by the Ref handle. + * + * @param ref - Ref handle + * + * @return + * The object handle is the ref is not null otherwise NULL + * + */ + +OCI_EXPORT OCI_Object * OCI_API OCI_RefGetObject +( + OCI_Ref *ref +); + +/** + * @brief + * Check if the Ref points to an object or not. + * + * @param ref - Ref handle + * + * @return + * TRUE if it does not point to a valid object otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_RefIsNull +( + OCI_Ref *ref +); + +/** + * @brief + * Nullify the given Ref handle + * + * @param ref - Ref handle + * + * @note + * this call clears the reference to object pointed by the Ref handle. + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_RefSetNull +( + OCI_Ref *ref +); + +/** + * @brief + * Returns the size of the hex representation of the given Ref handle + * + * @param ref - Ref handle + * + * @note + * the returned size is the number of character needed to store the + * hex representation of the Ref that can be retrieved with OCI_RefToText() + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_RefGetHexSize +( + OCI_Ref *ref +); + +/** + * @brief + * Converts a Ref handle value to a hexadecimal string. + * + * @param ref - Ref handle + * @param size - Destination string size in characters + * @param str - Destination string + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_RefToText +( + OCI_Ref *ref, + unsigned int size, + otext *str +); + +/** + * @} + */ + +/** + * @defgroup OcilibCApiAbort Aborting long operations + * @{ + * + * The Oracle OCI provides the ability to establish a server connection in : + * + * - blocking mode: each call to an OCI function returns control to the + * application when the call completes + * - non-blocking mode (based on polling paradigm) : the application have to + * call each function until its has completed its job + * + * OCILIB implements OCI in blocking mode. The application has to wait for OCI + * calls to complete to continue. + * + * Some operations can be long to be processed by the server. + * + * In order to cancel the current pending call, OCILIB provides OCI_Break() that + * cancel the last internal OCI Call and then raise an OCI abortion error code. + * + * @note + * Any call to OCI_Break() has to be done from a separate thread because the + * thread that has executed a long OCI call is waiting for its OCI call to complete. + * + * @par Example + * @include abort.c + * + */ + +/** + * @brief + * Perform an immediate abort of any currently Oracle OCI call + * + * @param con - connection handle + * + * @note + * The current call will abort and generate an error + * + * @return + * Returns FALSE if connection handle is NULL otherwise TRUE + */ + +OCI_EXPORT boolean OCI_API OCI_Break +( + OCI_Connection *con +); + +/** + * @} + */ + +/** + * @defgroup OcilibCApiMetadata Describing Schema Meta data and Objects + * @{ + * + * + * @par Example + * @include desc.c + * + */ + +/** + * @brief + * Retrieve the available type info information + * + * @param con - Connection handle + * @param name - Table/view name to query for + * @param type - Type of object + * + * @note + * Possible values for parameter type are : + * + * - OCI_UNKNOWN + * - OCI_TIF_TABLE + * - OCI_TIF_VIEW + * - OCI_TIF_TYPE + * + * @return + * - Type info handle on success + = - NULL if the object does not exist + * - NULL on failure + * + */ + +OCI_EXPORT OCI_TypeInfo * OCI_API OCI_TypeInfoGet +( + OCI_Connection *con, + const otext *name, + unsigned int type +); + +/** + * @brief + * Return the type of the type info object + * + * @param typinf - Type info handle + * + * @note + * Possible values for parameter type are : + * + * - OCI_UNKNOWM + * - OCI_TIF_TABLE + * - OCI_TIF_VIEW + * - OCI_TIF_TYPE + * + * @return + * Object type or OCI_UNKNOWN the input handle is NULL + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_TypeInfoGetType +( + OCI_TypeInfo *typinf +); + +/** + * @brief + * Retrieve connection handle from the type info handle + * + * @param typinf - Type info handle + * + */ + +OCI_EXPORT OCI_Connection * OCI_API OCI_TypeInfoGetConnection +( + OCI_TypeInfo *typinf +); + +/** + * @brief + * Free a type info object + * + * @param typinf - Type info handle + * + * @note + * this call is optional. + * OCI_TypeInfo object are internally tracked and + * automatically freed when their related connection is freed + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_TypeInfoFree +( + OCI_TypeInfo *typinf +); + +/** + * @brief + * Return the number of columns of a table/view/object + * + * @param typinf - Type info handle + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_TypeInfoGetColumnCount +( + OCI_TypeInfo *typinf +); + +/** + * @brief + * Return the column object handle at the given index in the table + * + * @param typinf - Type info handle + * @param index - Column position + * + * @return + * - Column handle on success + * - NULL if index is out of bounds or on error + * + */ + +OCI_EXPORT OCI_Column * OCI_API OCI_TypeInfoGetColumn +( + OCI_TypeInfo *typinf, + unsigned int index +); + +/** + * @brief + * Return the name described by the type info object + * + * @param typinf - Type info handle + * + */ + +OCI_EXPORT const otext * OCI_API OCI_TypeInfoGetName +( + OCI_TypeInfo *typinf +); + +/** + * @} + */ + +/** + * @defgroup OcilibCApiFormatting Formatted functions + * @{ + * + * OCILIB offers some smart routines that takes a variable number of arguments + * in order to minimize OCILIB function calls and reduce the amount of code lines + * + * On Windows platforms, the target programming language must support the __cdecl + * calling convention + * + * @note + * OCI_Immediate() and OCI_ImmediateFmt() support all OCILIB supported types + * for output result, except : + * - OCI_Long + * - OCI_Statement + * If a query output result contains one of these unsupported types, the function returns FALSE + * + * @note + * In the parameter list, every output placeholder MUST be preceded by + * an integer parameter that indicates the type of the placeholder + * in order to handle correctly the given pointer. + * + * Possible values for indicating placeholders type : + * + * - OCI_ARG_SHORT ------> short * + * - OCI_ARG_USHORT -----> unsigned short * + * - OCI_ARG_INT --------> int * + * - OCI_ARG_UINT -------> unsigned int* + * - OCI_ARG_BIGINT -----> big_int * + * - OCI_ARG_BIGUINT ----> unsigned big_int * + * - OCI_ARG_DOUBLE ----> double * + * - OCI_ARG_FLOAT ------> float * + * - OCI_ARG_NUMBER -----> OCI_Number * + * - OCI_ARG_TEXT -------> otext * + * - OCI_ARG_RAW --------> void * + * - OCI_ARG_DATETIME ---> OCI_Date * + * - OCI_ARG_LOB --------> OCI_Lob * + * - OCI_ARG_FILE -------> OCI_File * + * - OCI_ARG_TIMESTAMP --> OCI_Timestamp * + * - OCI_ARG_INTERVAL ---> OCI_Interval * + * - OCI_ARG_OBJECT -----> OCI_Object * + * - OCI_ARG_COLLECTION -> OCI_Coll * + * - OCI_ARG_REF --------> OCI_Ref * + * + * @note + * For output strings and Raws, returned data is copied to the given buffer + * instead of returning a pointer the real data. + * So these buffers must be big enough to hold the column content. No size check is performed. + * + * - For strings, only the real string is copied. + * - For Raws, the number of bytes copied is the column size + * + * @warning + * Input parameters for formatted function only support a restricted set of data types ! + * + * Supported input identifiers : + * + * - '%s' : (otext *) ----------> input string (quotes are added) + * - '%m' : (otext *) ----------> meta data string (no quotes added) + * - '%t' : (OCI_Date *) -------> Date + * - '%p' : (OCI_Timestamp *) --> timestamp + * - '%v' : (OCI_Interval *) ---> Interval + * - '%i' : (int) --------------> signed 32 bits integer + * - '%u' : (unsigned int) -----> unsigned 32 bits integer + * - '%li' : (big_int) ----------> signed 64 bits integer + * - '%lu' : (big_uint) ---------> unsigned 64 bits integer + * - '%hi' : (short) ------------> signed 16 bits integer + * - '%hu' : (unsigned short) ---> unsigned 16 bits integer + * - '%g' : (double, float ) ---> Numerics + * - '%n' : (OCI_Number *) -----> Number + * - '%r' : (OCI_Ref *) --------> Reference + * - '%o' : (OCI_Object *) -----> Object (not implemented yet) + * - '%c' : (OCI_Coll *) -------> collection (not implemented yet) + * + * @par Example + * @include format.c + * + */ + +/** + * @brief + * Perform 3 calls (prepare+execute+fetch) in 1 call + * + * @param con - Connection handle + * @param sql - SQL statement + * @param ... - List of program variables address to store the result of fetch operation + * + * @note + * Every output parameter MUST be preceded by an integer parameter that indicates the type + * of the placeholder in order to handle correctly the given pointer. + * + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_Immediate +( + OCI_Connection *con, + const otext *sql, + ... +); + +/** + * @brief + * Performs 4 call (prepare+bind+execute+fetch) in 1 call + * + * @param con - Connection handle + * @param sql - SQL statement + * @param ... - List of program values to format the SQL followed by the + * output variables addresses for the fetch operation + * + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_ImmediateFmt +( + OCI_Connection *con, + const otext *sql, + ... +); + +/** + * @brief + * Prepare a formatted SQL statement or PL/SQL block. + * + * @param stmt - Statement handle + * @param sql - SQL statement + * @param ... - List of program values to format the SQL + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_PrepareFmt +( + OCI_Statement *stmt, + const otext *sql, + ... +); + +/** + * @brief + * Execute a formatted SQL statement or PL/SQL block. + * + * @param stmt - Statement handle + * @param sql - SQL statement + * @param ... - List of program values to format the SQL + * + * @return + * TRUE on success otherwise FALSE + * + * @warning + * If a SQL warning occurs: + * - the function returns TRUE + * - the SQL warning triggers the global error handler with an OCI_Error having its OCI_ErrorGetType() + * attribute set to OCI_ERR_WARNING + * - If OCILIB is initialized with the OCI_ENV_CONTEXT mode, OCI_GetLastError() will return the OCI_Error + * object corresponding to the warning + * + */ + +OCI_EXPORT boolean OCI_ExecuteStmtFmt +( + OCI_Statement *stmt, + const otext *sql, + ... +); + +/** + * @brief + * Parse a formatted SQL statement or PL/SQL block. + * + * @param stmt - Statement handle + * @param sql - SQL statement + * @param ... - List of program values to format the SQL + * + * @note + * This call sends the SQL or PL/SQL command to the server for parsing only. + * The command is not executed. + * This call is only useful to check is a command is valid or not. + * + * @note + * This call prepares the statement (internal call to OCI_Prepare()) and ask + * the Oracle server to parse its SQL or PL/SQL command. + * OCI_Execute() can be call after OCI_ParseFmt() in order to execute the + * statement, which means that the server will re-parse again the command. + * + * @warning + * Do not use OCI_ParseFmt() unless you're only interested in the parsing result + * because the statement will be parsed again when executed and thus leading to + * unnecessary server round-trips and less performance + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_ParseFmt +( + OCI_Statement *stmt, + const otext *sql, + ... +); + +/** + * @brief + * Describe the select list of a formatted SQL select statement. + * + * @param stmt - Statement handle + * @param sql - SQL statement + * @param ... - List of program values to format the SQL + * + * @note + * This call sends the SELECT SQL order to the server for retrieving the + * description of the select order only. + * The command is not executed. + * This call is only useful to retrieve information on the associated resultset + * Call OCI_GetResultet() after OCI_Describe() to access to SELECT list + * information + * + * @note + * This call prepares the statement (internal call to OCI_Prepare()) and ask + * the Oracle server to describe the output SELECT list. + * OCI_Execute() can be call after OCI_Desbribe() in order to execute the + * statement, which means that the server will parse, and describe again the SQL + * order. + * + * @warning + * Do not use OCI_Desbribe() unless you're only interested in the resultset + * information because the statement will be parsed again when executed and thus + * leading to unnecessary server round-trips and less performance + * + * @return + * TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_DescribeFmt +( + OCI_Statement *stmt, + const otext *sql, + ... +); + +/** + * @} + */ + +/** + * @defgroup OcilibCApiHashTables Hash tables + * @{ + * + * OCILIB uses hash tables internally for index/name columns mapping. + * + * OCILIB makes public its hash table’s implementation public for general purpose + * uses. + * + * OCI_HashTable objects manage string keys / values that can be : + * + * - integers + * - strings + * - pointers + * + * This hash table implementation : + * + * - handle collisions + * - allows multiple values per key + * + * @par Internal conception + * + * - The hash table is composed of an array of slots. + * - Each slot can hold a linked list of entries (one per key) + * - Each entry can hold a linked list of values + * + * @note + * - The internal hash function computes the index in the array where the entry + * has to be inserted/looked up. + * + * + * @note + * Collisions are handled by chaining method. + * + * @include hash.c + * + */ + +/** + * @brief + * Create a hash table + * + * @param size - size of the hash table + * @param type - type of the hash table + * + * @note + * Parameter can be one of the following values : + * + * - OCI_HASH_STRING : string values + * - OCI_HASH_INTEGER : integer values + * - OCI_HASH_POINTER : pointer values + * + * @return + * Hash handle on success or NULL on failure + * + */ + +OCI_EXPORT OCI_HashTable * OCI_API OCI_HashCreate +( + unsigned int size, + unsigned int type +); + +/** + * @brief + * Destroy a hash table + * + * @param table - Table handle + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_HashFree +( + OCI_HashTable *table +); + +/** + * @brief + * Return the size of the hash table + * + * @param table - Table handle + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_HashGetSize +( + OCI_HashTable *table +); + +/** + * @brief + * Return the type of the hash table + * + * @param table - Table handle + * + * @note + * the return value can be one of the following values : + * + * - OCI_HASH_STRING : string values + * - OCI_HASH_INTEGER : integer values + * - OCI_HASH_POINTER : pointer values + * + * @return + * Hash table data type or OCI_UNKNOWN the input handle is NULL + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_HashGetType +( + OCI_HashTable *table +); + +/** + * @brief + * Add a pair string key / string value to the hash table + * + * @param table - Table handle + * @param key - String key + * @param value - string value + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_HashAddString +( + OCI_HashTable *table, + const otext *key, + const otext *value +); + +/** + * @brief + * Return the string value associated to the given key + * + * @param table - Table handle + * @param key - String key + * + * @return + * Stored string associated with the key otherwise NULL + * + */ + +OCI_EXPORT const otext * OCI_API OCI_HashGetString +( + OCI_HashTable *table, + const otext *key +); + +/** + * @brief + * Adds a pair string key / integer value to the hash table + * + * @param table - Table handle + * @param key - String key + * @param value - Integer value + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_HashAddInt +( + OCI_HashTable *table, + const otext *key, + int value +); + +/** + * @brief + * Return the integer value associated to the given key + * + * @param table - Table handle + * @param key - String key + * + * @return + * Stored integer associated with the key otherwise 0 + * + */ + +OCI_EXPORT int OCI_API OCI_HashGetInt +( + OCI_HashTable *table, + const otext *key +); + +/** + * @brief + * Adds a pair string key / pointer value to the hash table + * + * @param table - Table handle + * @param key - String key + * @param value - Pointer value + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_HashAddPointer +( + OCI_HashTable *table, + const otext *key, + void *value +); + +/** + * @brief + * Return a pointer associated with the given key + * + * @param table - Table handle + * @param key - String key + * + * @return + * Stored pointer associated with the key otherwise NULL + * + */ + +OCI_EXPORT void * OCI_API OCI_HashGetPointer +( + OCI_HashTable *table, + const otext *key +); + +/** + * @brief + * Lookup for an entry matching the key in the table + * + * @param table - Table handle + * @param key - String key + * @param create - Do create the entry if not exists + * + * @return + * Entry handle if key found/added otherwise NULL + * + */ + +OCI_EXPORT OCI_HashEntry * OCI_API OCI_HashLookup +( + OCI_HashTable *table, + const otext *key, + boolean create +); + +/** + * @brief + * Return the first hash slot that matches the key + * + * @param table - Table handle + * @param key - String key + * + * @return + * Slot handle if key found otherwise NULL + * + */ + +OCI_EXPORT OCI_HashValue * OCI_API OCI_HashGetValue +( + OCI_HashTable *table, + const otext *key +); + +/** + * @brief + * Return the entry slot of the hash table internal list at the given position + * + * @param table - Table handle + * @param index - index + * + * @warning + * Index start at at + * + * @return + * Slot handle otherwise NULL + * + */ + +OCI_EXPORT OCI_HashEntry * OCI_API OCI_HashGetEntry +( + OCI_HashTable *table, + unsigned int index +); + +/** + * @} + */ + +/** + * @defgroup OcilibCApiThreading Threads and mutexes + * @{ + * + * Oracle proposes a portable implementation of Mutex and Thread objects + * + * OCILIB implements these OCI features for portable multi-threading support. + * + * Mutexes are designed for mutual exclusion between thread in order to lock resources temporarily + * + * Thread keys can be seen as process-wide variables that have a thread-specific + * values. It allows to create a unique key identified by a name (string) that + * can store values specific to each thread. + * + * OCILIB exposes the types OCI_Mutex, OCI_Thread + * + * @warning + * OCILIB MUST be initialized with OCI_ENV_THREADED to enable threads support + * + * @warning + * OCI_Thread relies on Oracle API which uses natives threading capabilities of + * the supported platform + * + * @warning + * Using OCI_Mutex : + * - On Microsoft Windows, a thread can call OCI_MutexAcquire() more than once + * without any blocking. Just be sure that there is an OCI_MutexRelease() for + * every OCI_MutexAcquire() call + * - On Unix systems, a thread MUST call OCI_MutexRelease() after every call to + * OCI_MutexAcquire() in order to be able to call OCI_MutexAcquire() again. If + * not, it will be blocked... + * + * @par Example + * @include thread.c + * + */ + +/** + * @brief + * Create a Mutex object + * + * @return + * Mutex handle on success or NULL on failure + * + */ + +OCI_EXPORT OCI_Mutex * OCI_API OCI_MutexCreate +( + void +); + +/** + * @brief + * Destroy a mutex object + * + * @param mutex - Mutex handle + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_MutexFree +( + OCI_Mutex *mutex +); + +/** + * @brief + * Acquire a mutex lock + * + * @param mutex - Mutex handle + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_MutexAcquire +( + OCI_Mutex *mutex +); + +/** + * @brief + * Release a mutex lock + * + * @param mutex - Mutex handle + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_MutexRelease +( + OCI_Mutex *mutex +); + +/** + * @brief + * Create a Thread object + * + * @return + * Thread handle on success or NULL on failure + * + */ + +OCI_EXPORT OCI_Thread * OCI_API OCI_ThreadCreate +( + void +); + +/** + * @brief + * Destroy a thread object + * + * @param thread - Thread handle + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ThreadFree +( + OCI_Thread *thread +); + +/** + * @brief + * Execute the given routine within the given thread object + * + * @param thread - Thread handle + * @param proc - routine to execute + * @param arg - parameter to pass to the routine + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ThreadRun +( + OCI_Thread *thread, + POCI_THREAD proc, + void *arg +); + +/** + * @brief + * Join the given thread + * + * @param thread - Thread handle + * + * @note + * This function waits for the given thread to finish + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ThreadJoin +( + OCI_Thread *thread +); + +/** + * @brief + * Create a thread key object + * + * @param name - Thread key name + * @param destfunc - Thread key value destructor function + * + * @note + * Parameter proc is optional. It's called when the thread terminates to allow + * the program to deal with the thread specific value of the key + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ThreadKeyCreate +( + const otext *name, + POCI_THREADKEYDEST destfunc +); + +/** + * @brief + * Set a thread key value + * + * @param name - Thread key name + * @param value - user value to set + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_ThreadKeySetValue +( + const otext *name, + void *value +); + +/** + * @brief + * Get a thread key value + * + * @param name - Thread key name + * + * @return + * Thread key value on success otherwise FALSE + * + */ + +OCI_EXPORT void * OCI_API OCI_ThreadKeyGetValue +( + const otext *name +); + +/** + * @} + */ + +/** + * @defgroup OcilibCApidirectPath Direct Path loading + * @{ + * + * OCILIB (from version 3.2.0) support the OCI direct Path API. + * + * Actual implementation of direct path API does not support the following + * elements : + * - Objects data types (User Defined Types and Object References) + * - Object tables + * - Nested tables + * - SQL String functions + * + * All scalar data types (numerics, characters and date/time), including LOBs + * and LONG types are supported + * + * @par Oracle direct API features (from Oracle Documentation) + * + * The direct path load interface allows an application to access the direct path + * load engine of the Oracle database server to perform the functions of the + * Oracle SQL*Loader utility. + * This functionality provides the ability to load data from external files + * into Oracle database objects, either a table or a partition of a partitioned + * table. + * The OCI direct path load interface has the ability to load multiple rows by + * loading a direct path stream which contains data for multiple rows. + * + * @par Oracle direct API limitation (from Oracle Documentation) + * The direct path load interface has the following limitations which are the + * same as SQL*Loader: + * - triggers are not supported + * - check constraints are not supported + * - referential integrity constraints are not supported + * - clustered tables are not supported + * - loading of remote objects is not supported + * - user-defined types are not supported + * - LOBs must be specified after all scalar columns + * - LONGs must be specified last + * + * @warning + * + * Its recommended to use direct path interface with an Oracle client that is + * the same version than the database. With version < 10g, it is mandatory + * regarding that it causes segmentation faults and it's known from Oracle that + * advices to use the same version for client and server (see metalink KB) + * + * @par How to use direct path + * + * - 1 : Create a direct path handle with OCI_DirPathCreate() + * - 2 : Set (optional) some direct path load attributes + * - 3 : Describe the columns to load with OCI_DirPathSetColumn() + * - 4 : Populate data with OCI_DirPathSetEntry() + * - 5 : Convert the data with OCI_DirPathConvert() + * - 6 : Load the data into the database with OCI_DirPathLoad() + * - 7 : Repeat step 4,5,6 + reset the stream with OCI_DirPathReset() until all + * rows has been loaded + * - 8 : Commit the load with OCI_DirPathFinish() + * - 9 : Free the direct path handle with OCI_DirPathFree() + * + * @par Example + * @include dirpath.c + * + */ + +/** + * @brief + * Create a direct path object + * + * @param typinf - Table type info handle + * @param partition - Partition name + * @param nb_cols - Number of columns to load + * @param nb_rows - Maximum of rows to handle per load operation + * + * @note + * Retrieve the table type info handle with OCI_TypeInfoGet(). + * The partition name is not mandatory + * + * @note + * Parameter 'nb_rows' is ignored for Oracle 8i. Prior to Oracle 9i, it's the + * OCI client that decides of the number of rows to process per convert/load calls. + * From Oracle 9i, OCI allows application to specify this value. Note that, the + * OCI client might not accept the input value. After OCI_DirPathPrepare() has + * been successfully called, OCI_DirPathGetMaxRows() returns the final number + * of rows used for the given direct path operation. + * + * @return + * Return the direct path handle on success otherwise NULL on failure + * + */ + +OCI_EXPORT OCI_DirPath * OCI_API OCI_DirPathCreate +( + OCI_TypeInfo *typinf, + const otext *partition, + unsigned int nb_cols, + unsigned int nb_rows +); + +/** + * @brief + * Free an OCI_DirPath handle + * + * @param dp - Direct path Handle + * + * @return + * TRUE on success otherwise FALSE + * + */ +OCI_EXPORT boolean OCI_API OCI_DirPathFree +( + OCI_DirPath *dp +); + +/** + * @brief + * Describe a column to load into the given table + * + * @param dp - Direct path Handle + * @param index - Column index + * @param name - Column name + * @param maxsize - Maximum input value size for a column entry + * @param format - Date or numeric format to use + * + * @note + * An error is thrown if : + * - If the column specified by the 'name' parameter is not found in the table + * referenced by the type info handle passed to OCI_DirPathCreate() + * - the index is out of bounds (= 0 or >= number of columns) + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_DirPathSetColumn +( + OCI_DirPath *dp, + unsigned int index, + const otext *name, + unsigned int maxsize, + const otext *format +); + +/** + * @brief + * Prepares the OCI direct path load interface before any rows can be converted + * or loaded + * + * @param dp - Direct path Handle + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_DirPathPrepare +( + OCI_DirPath *dp +); + +/** + * @brief + * Set the value of the given row/column array entry + * + * @param dp - Direct path Handle + * @param row - Row index + * @param index - Column index + * @param value - Value to set + * @param size - Size of the input value + * @param complete - Is the entry content fully provided ? + * + * @note + * Rows and columns indexes start at 1. + * + * @note + * The 'size' parameter is expressed in number of : + * - bytes for binary columns + * - characters for other columns + * + * @note + * Direct path support piece loading for LONGs and LOBs columns. When filling + * these columns, it's possible to provide input buffer piece by piece. In order + * to do so : + * - set the 'complete' parameter to FALSE + * - set the 'size' parameter to the piece size + * - Repeat calls to OCI_DirPathSetEntry() until the data is totally provided + * - The last call that set the last piece or an entry must specify the value + * TRUE for the 'complete' parameter + * + * @warning + * Current Direct Path OCILIB implementation DOES NOT support setting entry + * content piece by piece as mentioned above. It was planned in the original design + * but not supported yet. So, always set the complete parameter to TRUE. + * Setting entries content piece by piece may be supported in future releases + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_DirPathSetEntry +( + OCI_DirPath *dp, + unsigned int row, + unsigned int index, + void *value, + unsigned size, + boolean complete +); + +/** + * @brief + * Convert provided user data to the direct path stream format + * + * @param dp - Direct path Handle + * + * @return + * Possible return values : + * - OCI_DPR_COMPLETE : load has been successful + * - OCI_DPR_ERROR : an error happened while loading data + * - OCI_DPR_FULL : the internal stream is full + * - OCI_DPR_PARTIAL : a column hasn't been fully filled yet + * - OCI_DPR_EMPTY : no data was found to convert + * + * @note + * - When using conversion mode OCI_DCM_DEFAULT, OCI_DirPathConvert() stops when + * any error is encountered and returns OCI_DPR_ERROR + * - When using conversion mode OCI_DCM_FORCE, OCI_DirPathConvert() does not stop + * on errors. Instead it discards any erred rows and returns OCI_DPR_COMPLETE once + * all rows are processed. + * + * @note + * List of faulted rows and columns can be retrieved using OCI_DirPathGetErrorRow() and + * OCI_DirPathGetErrorColumn() + * + * @note + * OCI_DirPathGetAffectedRows() returns the number of rows converted in the last call. + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_DirPathConvert +( + OCI_DirPath *dp +); + +/** + * @brief + * Loads the data converted to direct path stream format + * + * @param dp - Direct path Handle + * + * @return + * Possible return values : + * - OCI_DPR_COMPLETE : conversion has been successful + * - OCI_DPR_ERROR : an error happened while converting data + * - OCI_DPR_FULL : the internal stream is full + * - OCI_DPR_PARTIAL : a column hasn't been fully filled yet + * - OCI_DPR_EMPTY : no data was found to load + * + * @note + * List of faulted rows can be retrieved using OCI_DirPathGetErrorRow() + * + * @note + * OCI_DirPathGetAffectedRows() returns the number of rows successfully loaded in the last call. + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_DirPathLoad +( + OCI_DirPath *dp +); + +/** + * @brief + * Reset internal arrays and streams to prepare another load + * + * @param dp - Direct path Handle + * + * @note + * Once some data have been converted or loaded, OCI_DirPathReset() resets + * internal OCI structures in order to prepare another load operation + * (set entries, convert and load) + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_DirPathReset +( + OCI_DirPath *dp +); + +/** + * @brief + * Terminate a direct path operation and commit changes into the database + * + * @param dp - Direct path Handle + * + * @warning + * The direct path handle cannot be used anymore after this call for any more + * loading operations and must be freed with OCI_DirPathFree(). + * + * @note + * Some properties functions of the direct path handle, such as + * OCI_DirPathGetRowCount() can be called on a terminated direct path handle + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_DirPathFinish +( + OCI_DirPath *dp +); + +/** + * @brief + * Terminate a direct path operation without committing changes + * + * @param dp - Direct path Handle + * + * @note + * Any pending loaded data are canceled. + * Any load completion operations, such as index maintenance operations, are not performed. + * + * @warning + * The direct path handle cannot be used anymore after this call for any more + * loading operations and must be freed with OCI_DirPathFree(). + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_DirPathAbort +( + OCI_DirPath *dp +); + +/** + * @brief + * Execute a data save-point (server side) + * + * @param dp - Direct path Handle + * + * @note + * Executing a data save-point is not allowed for LOBs + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_DirPathSave +( + OCI_DirPath *dp +); + +/** + * @brief + * Flushes a partially loaded row from server + * + * @param dp - Direct path Handle + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_DirPathFlushRow +( + OCI_DirPath *dp +); + +/** + * @brief + * Set the current number of rows to convert and load + * + * @param dp - Direct path Handle + * @param nb_rows - Number of row to process + * + * @warning + * An OCILIB error will be thrown if the value exceeds the maximum number of + * rows in the internals arrays + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_DirPathSetCurrentRows +( + OCI_DirPath *dp, + unsigned int nb_rows +); + +/** + * @brief + * Return the current number of rows used in the OCILIB internal + * arrays of rows + * + * @param dp - Direct path Handle + * + * @return + * Internal current array size on SUCCESS otherwise 0 + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_DirPathGetCurrentRows +( + OCI_DirPath *dp +); + +/** + * @brief + * Return the maximum number of rows allocated in the OCI and OCILIB + * internal arrays of rows + * + * @param dp - Direct path Handle + * + * @return + * Internal maximum array size on SUCCESS otherwise 0 + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_DirPathGetMaxRows +( + OCI_DirPath *dp +); + +/** + * @brief + * Set the default date format string for input conversion + * + * @param dp - Direct path Handle + * @param format - date format + * + * @note + * For string to date conversion, Oracle uses : + * - Column date format + * - Default date format (modified by this call) + * - Default global support environment setting + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_DirPathSetDateFormat +( + OCI_DirPath *dp, + const otext *format +); + +/** + * @brief + * Set the parallel loading mode + * + * @param dp - Direct path Handle + * @param value - enable/disable parallel mode + * + * @note + * Default value is FALSE. + * + * @note + * Setting the value to TRUE allows multiple load sessions to load the same + * segment concurrently + * + * @par Parallel loading mode (From Oracle documentation) + * + * A direct load operation requires that the object being loaded is locked to + * prevent DML on the object. + * Note that queries are lock-free and are allowed while the object is being loaded. + * - For a table load, if the option is set to: + * - FALSE, then the table DML X-Lock is acquired. + * - TRUE, then the table DML S-Lock is acquired. + * - For a partition load, if the option is set to: + * - FALSE, then the table DML SX-Lock and partition DML X-Lock is acquired. + * - TRUE, then the table DML SS-Lock and partition DML S-Lock is acquired. + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_DirPathSetParallel +( + OCI_DirPath *dp, + boolean value +); + +/** + * @brief + * Set the logging mode for the loading operation + * + * @param dp - Direct path Handle + * @param value - enable/disable logging + * + * @par Logging mode (from Oracle Documentation) + * + * The NOLOG attribute of each segment determines whether image redo or + * invalidation redo is generated: + * - FALSE : Use the attribute of the segment being loaded. + * - TRUE : No logging. Overrides DDL statement, if necessary. + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_DirPathSetNoLog +( + OCI_DirPath *dp, + boolean value +); + +/** + * @brief + * Set number of elements in the date cache + * + * @param dp - Direct path Handle + * @param size - Buffer size + * + * @note + * Default value is 0. + * + * @note + * Setting the value to 0 disables the cache + * + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_DirPathSetCacheSize +( + OCI_DirPath *dp, + unsigned int size +); + +/** + * @brief + * Set the size of the internal stream transfer buffer + * + * @param dp - Direct path Handle + * @param size - Buffer size + * + * @note + * Default value is 64KB. + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_DirPathSetBufferSize +( + OCI_DirPath *dp, + unsigned int size +); + +/** + * @brief + * Set the direct path conversion mode + * + * @param dp - Direct path Handle + * @param mode - Conversion mode + * + * @note + * Possible values for parameter 'mode' : + * - OCI_DCM_DEFAULT : conversion fails on error + * - OCI_DCM_FORCE : conversion does not fail on error + * + * @note + * See OCI_DirPathConvert() for conversion mode details + * + * @note + * Default value is OCI_DCM_DEFAULT + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_DirPathSetConvertMode +( + OCI_DirPath *dp, + unsigned int mode +); + +/** + * @brief + * Return the number of rows successfully loaded into the database so far + * + * @param dp - Direct path Handle + * + * @note + * Insertions are committed with OCI_DirPathFinish() + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_DirPathGetRowCount +( + OCI_DirPath *dp +); + +/** + * @brief + * return the number of rows successfully processed during in the last + * conversion or loading call + * + * @param dp - Direct path Handle + * + * @note + * This function called after : + * + * - OCI_DirPathConvert(), returns the number of converted rows + * - OCI_DirPathload(), returns the number of loaded rows + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_DirPathGetAffectedRows +( + OCI_DirPath *dp +); + +/** + * @brief + * Return the index of a column which caused an error during data conversion + * + * @param dp - Direct path Handle + * + * @warning + * Direct path column indexes start at 1. + * + * @note + * Errors may happen while data is converted to direct path stream format + * using OCI_DirPathConvert(). + * When using conversion mode OCI_DCM_DEFAULT, OCI_DirPathConvert() returns + * OCI_DPR_ERROR on error. OCI_DirPathGetErrorColumn() returns the column index + * that caused the error + * When using conversion mode OCI_DCM_FORCE, OCI_DirPathConvert() returns + * OCI_DPR_COMPLETE even on errors. In order to retrieve the list of all column + * indexes that have erred, the application can call OCI_DirPathGetErrorColumn() + * repeatedly until it returns 0. + * + * @note + * The internal value is reset to 0 when calling OCI_DirPathConvert() + * + * @return + * 0 is no error occurs otherwise the index of the given column which caused an + * error + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_DirPathGetErrorColumn +( + OCI_DirPath *dp +); + +/** + * @brief + * Return the index of a row which caused an error during data conversion + * + * @param dp - Direct path Handle + * + * @warning + * Direct path row indexes start at 1. + * + * @note + * Errors may happen : + * - while data is converted to direct path stream format using OCI_DirPathConvert() + * - while data is loaded to database using OCI_DirPathLoad() + * + * @note + * When using conversion mode OCI_DCM_DEFAULT, OCI_DirPathConvert() returns + * OCI_DPR_ERROR on error. OCI_DirPathGetErrorRow() returns the row index that + * caused the error. + * When using conversion mode OCI_DCM_FORCE, OCI_DirPathConvert() returns + * OCI_DPR_COMPLETE even on errors. In order to retrieve the list of all row + * indexes that have erred, the application can call OCI_DirPathGetErrorRow() + * repeatedly until it returns 0. + * + * @note + * After a call to OCI_DirPathLoad(), in order to retrieve the list of all faulted rows + * indexes, the application can call OCI_DirPathGetErrorRow() repeatedly until it returns 0. + * + * @note + * The internal value is reset to 0 when calling OCI_DirPathConvert(), + * OCI_DirPathReset() or OCI_DirPathLoad() + * + * @return + * 0 is no error occurs otherwise the index of the given row which caused an + * error + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_DirPathGetErrorRow +( + OCI_DirPath *dp +); + +/** + * @} + */ + +/** + * @defgroup OcilibCApiAdvancedQueuing Oracle Advanced Queuing (A/Q) + * @{ + * + * OCILIB supports Oracle Advanced Queues features + * + * Let's Oracle talk about this features ! + * + * @par Oracle Queues (from Oracle Streams - Advanced Queuing User's Guide) + * + * Oracle Streams AQ provides database-integrated message queuing functionality. + * It is built on top of Oracle Streams and leverages the functions of Oracle + * Database so that messages can be stored persistently, propagated between + * queues on different computers and databases, and transmitted using Oracle + * Net Services and HTTP(S). + * Because Oracle Streams AQ is implemented in database tables, all operational + * benefits of high availability, scalability, and reliability are also + * applicable to queue data. Standard database features such as recovery, + * restart, and security are supported by Oracle Streams AQ. You can use + * database development and management tools such as Oracle Enterprise Manager + * to monitor queues. Like other database tables, queue tables can be imported + * and exported. + * + * @par OCILIB implementation + * + * OCILIB provides a (nearly) full C implementation of Advanced Queues available in + * Oracle OCI and proposes the following data types : + * - OCI_Msg : Implementation of message to enqueue/dequeue from/to queues + * - OCI_Enqueue : Implementation of enqueuing process + * - OCI_Dequeue : Implementation of dequeuing process + * - OCI_Agent : Implementation of Advanced queues Agents + * + * OCILIB support AQ messages notification with Oracle Client 10gR2 or above + * + * Note that the only AQ features not supported yet by OCILIB are : + * - Payloads of type AnyData + * - Enqueuing/dequeuing arrays of messages + * - Optional delivery mode introduced in 10gR2 + * + * OCILIB provides as well a C API to administrate queues and queue tables initially + * reserved to PL/SQL and Java (wrappers around PL/SQL calls). + * This API, based on internal PL/SQL calls wrapping the DBMS_AQADM packages procedures, allow the + * following actions : + * - create, alter, drop and purge queue tables (OCI_QueueTableXXX calls) + * - create, alter, drop, start, stop queues (OCI_QueueXXX calls) + * + * Note that the user connected to the database needs particular privileges to manipulate or + * administrate queues (See Oracle Streams - Advanced Queuing User's Guide for more informations + * on these privileges) + * + *@par Example + * @include queue.c + * + */ + +/** + * @brief + * Create a message object based on the given payload type + * + * @param typinf - Type info handle + * + * @note + * OCILIB supports 2 type of message payload : + * - Oracle types (UDT) + * - RAW data + * + * @note + * Oracle Type AnyData is not supported in the current version of OCILIB + * + * @note + * the parameter 'typinf' indicates the type of payload : + * - For object payload, retrieve the object type information handle with + * OCI_TypeInfoGet() using the object type name + * - For RAW payload, you MUST pass the object type information retrieved with + * OCI_TypeInfoGet() using "SYS.RAW" as object type name + * + * @warning + * Newly created Message handles have NULL payloads. + * For Message handling Objects payloads, OCI_MsgGetObject() returns NULL until an object handle is + * assigned to the message. + * + * @note + * When a local OCI_Msg handle is enqueued, it keeps its attributes. If it's enqueued again, another + * identical message is posted into the queue. + * To reset a message and empty all its properties, call OCI_MsgReset() + * Note that OCI_MsgReset() clears the message payload. + * + * @return + * Return the message handle on success otherwise NULL on failure + * + */ + +OCI_EXPORT OCI_Msg * OCI_API OCI_MsgCreate +( + OCI_TypeInfo *typinf +); + +/** + * @brief + * Free a message object + * + * @param msg - Message handle + * + * @warning + * Only message handles created with OCI_MsgCreate() should be freed by OCI_MsgFree() + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_MsgFree +( + OCI_Msg *msg +); + +/** + * @brief + * Reset all attributes of a message object + * + * @param msg - Message handle + * + * @note + * This function calls OCI_MsgSetxxx() with default or NULL attributes + * + * @warning + * OCI_MsgReset() clears the message payload and set it to NULL + * For messages handling objects payloads, OCI_MsgSetObject() must be called again to assign a + * payload. + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_MsgReset +( + OCI_Msg *msg +); + +/** + * @brief + * Get the object payload of the given message + * + * @param msg - Message handle + * + * @return + * Return the object handle on success otherwise NULL on failure or if payload is NULL + * + */ + +OCI_EXPORT OCI_Object * OCI_API OCI_MsgGetObject +( + OCI_Msg *msg +); + +/** + * @brief + * Set the object payload of the given message + * + * @param msg - Message handle + * @param obj - Object handle + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_MsgSetObject +( + OCI_Msg *msg, + OCI_Object *obj +); + +/** + * @brief + * Get the RAW payload of the given message + * + * @param msg - Message handle + * @param raw - Input buffer + * @param size - Input buffer maximum size + * + * @note + * On output, parameter 'size' holds the number of bytes copied into the given buffer + * + * @return + * TRUE on success otherwise FALSE on failure or if payload is object based. + * + */ + +OCI_EXPORT boolean OCI_API OCI_MsgGetRaw +( + OCI_Msg *msg, + void *raw, + unsigned int *size +); + +/** + * @brief + * Set the RAW payload of the given message + * + * @param msg - Message handle + * @param raw - Raw data + * @param size - Raw data size + * + * @return + * TRUE on success otherwise FALSE on failure or if payload is object based. + * + */ + +OCI_EXPORT boolean OCI_API OCI_MsgSetRaw +( + OCI_Msg *msg, + const void *raw, + unsigned int size +); + +/** + * @brief + * Return the number of attempts that have been made to dequeue the message + * + * @param msg - Message handle + * + */ + +OCI_EXPORT int OCI_API OCI_MsgGetAttemptCount +( + OCI_Msg *msg +); + +/** + * @brief + * Return the number of seconds that a message is delayed for dequeuing + * + * @param msg - Message handle + * + * @note + * see OCI_MsgSetEnqueueDelay() for more details + * + */ + +OCI_EXPORT int OCI_API OCI_MsgGetEnqueueDelay +( + OCI_Msg *msg +); + +/** + * @brief + * set the number of seconds to delay the enqueued message + * + * @param msg - Message handle + * @param value - Delay in seconds + * + * @note + * The delay represents the number of seconds after which a message is available for dequeuing. + * When the message is enqueued, its state is set to OCI_AMS_WAITING. + * When the delay expires, its state is set to OCI_AMS_READY. + * + * @note + * If parameter 'value' is set to zero (default value), the message will be immediately available + * for dequeuing + * + * @warning + * Dequeuing by Message ID overrides the delay specification. + * + * @warning + * Delaying processing requires the queue monitor to be started. + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_MsgSetEnqueueDelay +( + OCI_Msg *msg, + int value +); + +/** + * @brief + * return the time the message was enqueued + * + * @param msg - Message handle + * + * @note + * Only use this function for message dequeued from queues + * + */ + +OCI_EXPORT OCI_Date * OCI_API OCI_MsgGetEnqueueTime +( + OCI_Msg *msg +); + +/** + * @brief + * Return the duration that the message is available for dequeuing + * + * @param msg - Message handle + * + * @note + * see OCI_MsgSetExpiration() for more details + * + */ + +OCI_EXPORT int OCI_API OCI_MsgGetExpiration +( + OCI_Msg *msg +); + +/** + * @brief + * set the duration that the message is available for dequeuing + * + * @param msg - Message handle + * @param value - duration in seconds + * + * @note + * This parameter is an offset from the delay (see OCI_MsgSetEnqueueDelay()) + * While waiting for expiration, the message state is set to OCI_AMS_READY. + * If the message is not dequeued before it expires, it will be moved to the exception queue + * with the state OCI_AMS_EXPIRED. + * + * @note + * If parameter 'value' is set to -1 (default value), the message will not expire + * + * @warning + * Expiration processing requires the queue monitor to be started. + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_MsgSetExpiration +( + OCI_Msg *msg, + int value +); + +/** + * @brief + * Return the state of the message at the time of the dequeue + * + * @param msg - Message handle + * + * @return + * - OCI_UNKNOWN : the function has failed to get the message state + * - OCI_AMS_READY : the message is ready to be processed + * - OCI_AMS_WAITING : the message delay has not yet completed + * - OCI_AMS_PROCESSED : the message has been processed + * - OCI_AMS_EXPIRED : the message has moved to exception queue + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_MsgGetState +( + OCI_Msg *msg +); + +/** + * @brief + * Return the priority of the message + * + * @param msg - Message handle + * + * @note + * see OCI_MsgSetPriority() for more details + * + */ + +OCI_EXPORT int OCI_API OCI_MsgGetPriority +( + OCI_Msg *msg +); + +/** + * @brief + * Set the priority of the message + * + * @param msg - Message handle + * @param value - Message priority + * + * @note + * - The priority can be any number, including negative numbers. + * - A smaller number indicates higher priority. + * - Default value is zero. + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_MsgSetPriority +( + OCI_Msg *msg, + int value +); + +/** + * @brief + * Return the ID of the message + * + * @param msg - Message handle + * @param id - Input buffer + * @param len - Input buffer maximum size + * + * @note + * The message ID is : + * - generated when the message is enqueued in the queue + * - retrieved when the message is dequeued from the queue + * + * @note + * On output, parameter 'len' holds the number of bytes copied into the given buffer + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_MsgGetID +( + OCI_Msg *msg, + void *id, + unsigned int *len +); + +/** + * @brief + * Return the original ID of the message in the last queue that generated this message + * + * @param msg - Message handle + * @param id - Input buffer + * @param len - Input buffer maximum size + * + * @warning + * When a message is propagated from/to different queues, this ID is the one generated for the + * message in the previous queue. + * + * @note + * On output, parameter 'len' holds the number of bytes copied into the given buffer + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_MsgGetOriginalID +( + OCI_Msg *msg, + void *id, + unsigned int *len +); + +/** + * @brief + * Set the original ID of the message in the last queue that generated this message + * + * @param msg - Message handle + * @param id - Message ID + * @param len - Message ID size + * + * @warning + * When a message is propagated from/to different queues, this ID is the one generated for the + * message in the previous queue. + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_MsgSetOriginalID +( + OCI_Msg *msg, + const void *id, + unsigned int len +); + +/** + * @brief + * Return the original sender of a message + * + * @param msg - Message handle + * + * @return + * Sender Handle (OCI_Agent *) on success (if set at enqueue time) otherwise NULL + * + */ + +OCI_EXPORT OCI_Agent * OCI_API OCI_MsgGetSender +( + OCI_Msg *msg +); + +/** + * @brief + * Set the original sender of a message + * + * @param msg - Message handle + * @param sender - Message sender + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_MsgSetSender +( + OCI_Msg *msg, + OCI_Agent *sender +); + +/** + * @brief + * Set the recipient list of a message to enqueue + * + * @param msg - Message handle + * @param consumers - Recipients list (array of agent handles) + * @param count - Number of recipients + * + * @warning + * This function should only be used for queues which allow multiple consumers. + * The default recipients are the queue subscribers. + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_MsgSetConsumers +( + OCI_Msg *msg, + OCI_Agent **consumers, + unsigned int count +); + +/** + * @brief + * Get the correlation identifier of the message + * + * @param msg - Message handle + * + * @note + * see OCI_MsgSetCorrelation() for more details + * + */ + +OCI_EXPORT const otext * OCI_API OCI_MsgGetCorrelation +( + OCI_Msg *msg +); + +/** + * @brief + * set the correlation identifier of the message + * + * @param msg - Message handle + * @param correlation - Message correlation text + * + * @note + * see OCI_DequeueSetCorrelation() for more details + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_MsgSetCorrelation +( + OCI_Msg *msg, + const otext *correlation +); + +/** + * @brief + * Get the Exception queue name of the message + * + * @param msg - Message handle + * + * @warning + * When calling this function on a message retrieved with OCI_DequeueGet(), the returned value is + * NULL if the default exception queue associated with the current queue is used (e.g. no user + * defined specified at enqueue time for the message) + * + * @note + * see OCI_MsgSetExceptionQueue() for more details + * + */ +OCI_EXPORT const otext * OCI_API OCI_MsgGetExceptionQueue +( + OCI_Msg *msg +); + +/** + * @brief + * Set the name of the queue to which the message is moved to if it cannot be + * processed successfully + * + * @param msg - Message handle + * @param queue - Exception queue name + * + * @warning + * From Oracle Documentation : + * + * "Messages are moved into exception queues in two cases : + * - If the number of unsuccessful dequeue attempts has exceeded the attribute 'max_retries' of + * given queue + * - if the message has expired. + * + * All messages in the exception queue are in the EXPIRED state. + * + * The default is the exception queue associated with the queue table. + * + * If the exception queue specified does not exist at the time of the move the message will be + * moved to the default exception queue associated with the queue table and a warning will be + * logged in the alert file. + * + * This attribute must refer to a valid queue name." + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_MsgSetExceptionQueue +( + OCI_Msg *msg, + const otext *queue +); + +/** + * @brief + * Create a Enqueue object for the given queue + * + * @param typinf - Type info handle + * @param name - Queue name + * + * @note + * OCILIB supports 2 type of message payload : + * - Oracle types (UDT) + * - RAW data + * + * @note + * Oracle Type AnyData is not supported in the current version of OCILIB + * + * @note + * the parameter 'typinf' indicates the type of payload to enqueue to the given queue : + * - For object payload, retrieve the object type information handle with + * OCI_TypeInfoGet() using the object type name + * - For RAW payload, you MUST pass the object type information retrieved with + * OCI_TypeInfoGet() using "SYS.RAW" as object type name + * + * @return + * Return the Enqueue handle on success otherwise NULL on failure + * + */ + +OCI_EXPORT OCI_Enqueue * OCI_API OCI_EnqueueCreate +( + OCI_TypeInfo *typinf, + const otext *name +); + +/** + * @brief + * Free a Enqueue object + * + * @param enqueue - Enqueue handle + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_EnqueueFree +( + OCI_Enqueue *enqueue +); + +/** + * @brief + * Enqueue a message on the queue associated to the Enqueue object + * + * @param enqueue - Enqueue handle + * @param msg - Message handle to enqueue + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_EnqueuePut +( + OCI_Enqueue *enqueue, + OCI_Msg *msg +); + +/** +* @brief +* Set the enqueuing sequence of messages to put in the queue +* +* @param enqueue - Enqueue handle +* @param sequence - enqueuing sequence +* +* @note +* Possible values for parameter 'sequence' : +* - OCI_ASD_BEFORE : enqueue message before another message +* - OCI_ASD_TOP : enqueue message before all messages +* +* @note +* Default value is OCI_ASD_TOP +* +* @note +* if the parameter 'sequence' is set to OCI_ASD_BEFORE, the application must +* call OCI_EnqueueSetRelativeMsgID() before enqueuing the next message in the queue. +* +* @note +* In order to stop enqueuing message using a sequence deviation, call +* OCI_EnqueueSetSequenceDeviation() with the value OCI_ASD_TOP +* +* @return +* TRUE on success otherwise FALSE +* +*/ + +OCI_EXPORT boolean OCI_API OCI_EnqueueSetSequenceDeviation +( + OCI_Enqueue *enqueue, + unsigned int sequence +); + +/** + * @brief + * Return the sequence deviation of messages to enqueue to the queue + * + * @param enqueue - Enqueue handle + * + * @note + * see OCI_EnqueueSetSequenceDeviation() for more details + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_EnqueueGetSequenceDeviation +( + OCI_Enqueue *enqueue +); + +/** + * @brief + * Set whether the new message is enqueued as part of the current transaction + * + * @param enqueue - Enqueue handle + * @param visibility - Enqueuing visibility + * + * @note + * Possible values for parameter 'visibility' : + * - OCI_AMV_IMMEDIATE : enqueue is an independent transaction + * - OCI_AMV_ON_COMMIT : enqueue is part of current transaction + * + * @note + * Default value is OCI_AMV_ON_COMMIT + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_EnqueueSetVisibility +( + OCI_Enqueue *enqueue, + unsigned int visibility +); + +/** + * @brief + * Get the enqueuing/locking behavior + * + * @param enqueue - Enqueue handle + * + * @note + * see OCI_EnqueueSetVisibility() for more details + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_EnqueueGetVisibility +( + OCI_Enqueue *enqueue +); + +/** + * @brief + * Set a message identifier to use for enqueuing messages using a sequence deviation + * + * @param enqueue - Enqueue handle + * @param id - message identifier + * @param len - pointer to message identifier length + * + * @note + * This call is only valid if OCI_EnqueueSetSequenceDeviation() has been called + * with the value OCI_ASD_BEFORE + * + * @warning + * if the function cannot assign the message id, the content of the parameter 'len' is set to zero. + * + * @note + * see OCI_EnqueueSetSequenceDeviation() for more details + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_EnqueueSetRelativeMsgID +( + OCI_Enqueue *enqueue, + const void *id, + unsigned int len +); + +/** + * @brief + * Get the current associated message identifier used for enqueuing messages + * using a sequence deviation + * + * @param enqueue - Enqueue handle + * @param id - buffer to receive the message identifier + * @param len - pointer to buffer max length + * + * @warning + * When the function returns, parameter 'len' hold the number of bytes assigned to parameter 'id' + * + * @note + * see OCI_EnqueueGetRelativeMsgID() for more details + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_EnqueueGetRelativeMsgID +( + OCI_Enqueue *enqueue, + void *id, + unsigned int *len +); + +/** + * @brief + * Create a Dequeue object for the given queue + * + * @param typinf - Type info handle + * @param name - Queue name + * + * @note + * OCILIB supports 2 type of message payload : + * - Oracle types (UDT) + * - RAW data + * + * @note + * Oracle Type AnyData is not supported in the current version of OCILIB + * + * @note + * the parameter 'typinf' indicates the type of payload to dequeue from the given queue : + * - For object payload, retrieve the object type information handle with + * OCI_TypeInfoGet() using the object type name + * - For RAW payload, you MUST pass the object type information retrieved with + * OCI_TypeInfoGet() using "SYS.RAW" as object type name + * + * @return + * Return the Dequeue handle on success otherwise NULL on failure + * + */ + +OCI_EXPORT OCI_Dequeue * OCI_API OCI_DequeueCreate +( + OCI_TypeInfo *typinf, + const otext *name +); + +/** + * @brief + * Free a Dequeue object + * + * @param dequeue - Dequeue handle + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_DequeueFree +( + OCI_Dequeue *dequeue +); + +/** + * @brief + * Dequeue messages from the given queue + * + * @param dequeue - Dequeue handle + * + * @warning + * The returned message is handled by the dequeue object. + * Do not release it with OCI_MsgFree() + * + * @warning + * When dequeuing from a multiple consumer queue, you need + * to set the navigation mode to OCI_ADN_FIRST_MSG using + * OCI_DequeueSetNavigation() + * + * @return + * Message handle on success otherwise NULL on failure or on timeout + * + */ + +OCI_EXPORT OCI_Msg * OCI_API OCI_DequeueGet +( + OCI_Dequeue *dequeue +); + +/** + * @brief + * Subscribe for asynchronous messages notifications + * + * @param dequeue - Dequeue handle + * @param port - Port to use for notifications + * @param timeout - notification timeout + * @param callback - User handler callback fired when messages are ready to be dequeued + * + * @note + * OCI_ENV_EVENTS flag must be passed to OCI_Initialize() to be able to use + * asynchronous messages notifications + * + * @note + * Requires Oracle Client 10gR2 or above + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_DequeueSubscribe +( + OCI_Dequeue *dequeue, + unsigned int port, + unsigned int timeout, + POCI_NOTIFY_AQ callback +); + +/** + * @brief + * Unsubscribe for asynchronous messages notifications + * + * @param dequeue - Dequeue handle + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_DequeueUnsubscribe +( + OCI_Dequeue *dequeue +); + +/** + * @brief + * Set the current consumer name to retrieve message for. + * + * @param dequeue - Dequeue handle + * @param consumer - consumer name + * + * @warning + * If a queue is not set up for multiple consumers, OCI_DequeueSetConsumer() + * should not be called or called with parameter 'consumer' set to NULL + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_DequeueSetConsumer +( + OCI_Dequeue *dequeue, + const otext *consumer +); + +/** + * @brief + * Get the current consumer name associated with the dequeuing process. + * + * @param dequeue - Dequeue handle + * + * @note + * see OCI_DequeueSetConsumer() for more details + * + */ + +OCI_EXPORT const otext * OCI_API OCI_DequeueGetConsumer +( + OCI_Dequeue *dequeue +); + +/** + * @brief + * set the correlation identifier of the message to be dequeued + * + * @param dequeue - Dequeue handle + * @param pattern - correlation identifier + * + * @note + * Special pattern matching characters, such as "%" or "_" can be used. + * If more than one message satisfies the pattern, the order of dequeuing is undetermined. + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_DequeueSetCorrelation +( + OCI_Dequeue *dequeue, + const otext *pattern +); + +/** + * @brief + * Get the correlation identifier of the message to be dequeued + * + * @param dequeue - Dequeue handle + * + * @note + * see OCI_DequeueSetCorrelation() for more details + * + */ + +OCI_EXPORT const otext * OCI_API OCI_DequeueGetCorrelation +( + OCI_Dequeue *dequeue +); + +/** + * @brief + * Set the message identifier of the message to be dequeued + * + * @param dequeue - Dequeue handle + * @param id - message identifier + * @param len - size of the message identifier + * + * @warning + * if the function cannot assign the message id, the content of the parameter 'len' is set to zero. + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_DequeueSetRelativeMsgID +( + OCI_Dequeue *dequeue, + const void *id, + unsigned int len +); + +/** + * @brief + * Get the message identifier of the message to be dequeued + * + * @param dequeue - Dequeue handle + * @param id - message identifier + * @param len - size of the message identifier + * + * @warning + * When the function returns, parameter 'len' hold the number of bytes assigned to parameter 'id' + * + * @note + * see OCI_DequeueSetRelativeMsgID() for more details + * + */ + +OCI_EXPORT boolean OCI_API OCI_DequeueGetRelativeMsgID +( + OCI_Dequeue *dequeue, + void *id, + unsigned int *len +); + +/** + * @brief + * Set whether the new message is dequeued as part of the current transaction + * + * @param dequeue - Dequeue handle + * @param visibility - dequeuing mode + * + * @warning + * The visibility parameter is ignored when using the OCI_ADM_BROWSE dequeuing + * mode (see OCI_DequeueSetMode()) + * + * @note + * Possible values for parameter 'mode' : + * - OCI_AMV_IMMEDIATE : dequeue is an independent transaction + * - OCI_AMV_ON_COMMIT : dequeue is part of current transaction + * + * @note + * Default value is OCI_AMV_ON_COMMIT + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_DequeueSetVisibility +( + OCI_Dequeue *dequeue, + unsigned int visibility +); + +/** + * @brief + * Get the dequeuing/locking behavior + * + * @param dequeue - Dequeue handle + * + * @note + * see OCI_DequeueSetVisibility() for more details + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_DequeueGetVisibility +( + OCI_Dequeue *dequeue +); + +/** + * @brief + * Set the dequeuing/locking behavior + * + * @param dequeue - Dequeue handle + * @param mode - dequeuing mode + * + * @note + * Possible values for parameter 'mode' : + * - OCI_ADM_BROWSE : read message without acquiring a lock + * - OCI_ADM_LOCKED : read and obtain write lock on message + * - OCI_ADM_REMOVE : read the message and delete it + * - OCI_ADM_REMOVE_NODATA : confirm receipt of the message, but do not + * deliver the actual message content + * + * @note + * Default value is OCI_ADM_REMOVE + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_DequeueSetMode +( + OCI_Dequeue *dequeue, + unsigned int mode +); + +/** + * @brief + * Get the dequeuing/locking behavior + * + * @param dequeue - Dequeue handle + * + * @note + * see OCI_DequeueSetMode() for more details + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_DequeueGetMode +( + OCI_Dequeue *dequeue +); + +/** + * @brief + * Set the position of messages to be retrieved. + * + * @param dequeue - Dequeue handle + * @param position - navigation position + * + * @note + * The dequeuing uses the following sequence : + * - find messages using the navigation position + * - apply search criteria (message correlation) + * - get message + * + * @note + * Possible values for parameter 'position' : + * - OCI_ADN_FIRST_MSG : retrieves the first message which is available + * - OCI_ADN_NEXT_MSG : retrieves the next message which is available + * - OCI_ADN_NEXT_TRANSACTION : skips the remainder of the current transaction + * group (if any) and retrieves the first message + * of the next transaction group. + * + * @note + * Default value is OCI_ADN_NEXT_MSG + * + * @warning + * OCI_ADN_NEXT_TRANSACTION can only be used if message grouping is enabled for the given queue. + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_DequeueSetNavigation +( + OCI_Dequeue *dequeue, + unsigned int position +); + +/** + * @brief + * Return the navigation position of messages to retrieve from the queue + * + * @param dequeue - Dequeue handle + * + * @note + * see OCI_DequeueSetNavigation() for more details + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_DequeueGetNavigation +( + OCI_Dequeue *dequeue +); + +/** + * @brief + * set the time that OCIDequeueGet() waits for messages if no messages are + * currently available + * + * @param dequeue - Dequeue handle + * @param timeout - timeout in seconds + * + *@note + * - Any positive values in seconds are valid. + * - The value 0 is accepted and means OCIDequeueGet() does not wait for + * messages and returns immediately if no messages are available + * - The value -1 is accepted and means OCIDequeueGet() waits for ever (until + * a message is available in the queue) + * + * @note + * Default value is -1 (wait for ever) + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_DequeueSetWaitTime +( + OCI_Dequeue *dequeue, + int timeout +); + +/** + * @brief + * Return the time that OCIDequeueGet() waits for messages if no messages are currently available + * + * @param dequeue - Dequeue handle + * + * @note + * see OCI_DequeueSetWaitTime() for more details + * + */ + +OCI_EXPORT int OCI_API OCI_DequeueGetWaitTime +( + OCI_Dequeue *dequeue +); + +/** + * @brief + * Set the Agent list to listen to message for + * + * @param dequeue - Dequeue handle + * @param consumers - Agent handle array + * @param count - Number of agents the array + * + * @return + * return TRUE on success otherwise FALSE + */ + +OCI_EXPORT boolean OCI_API OCI_DequeueSetAgentList +( + OCI_Dequeue *dequeue, + OCI_Agent **consumers, + unsigned int count +); + +/** + * @brief + * Listen for messages that match any recipient of the associated Agent list + * + * @param dequeue - Dequeue handle + * @param timeout - Timeout in second + * + * @note + * If an Agent handle is returned, messages are available for this agent. + * In order to retrieve its messages : + * - call OCI_DequeueSetConsumer() with the name of agent using OCI_AgentGetName() + * - call OCI_DequeueGet() to dequeue it's pending messages + * + * @warning + * The return value is valid only until: + * - OCIDequeueListen() is called again + * - OCI_DequeueFree(à is called to free the Dequeue object + * So Do not store the handle value across calls to OCIDequeueListen() + * + * @return + * An Agent handle for who messages are available on success otherwise NULL + */ + +OCI_EXPORT OCI_Agent * OCI_API OCI_DequeueListen +( + OCI_Dequeue *dequeue, + int timeout +); + +/** + * @brief + * Create an AQ agent object + * + * @param con - Connection handle + * @param name - Agent name + * @param address - Agent address + * + * @note + * An AQ agent object is : + * - used as recipient information when enqueuing a message + * - used as sender information when dequeuing a message + * - used for listening message only from identified senders + * + * @note + * the AQ agent address can be any Oracle identifier, up to 128 bytes. + * the AQ agent name can be any Oracle identifier, up to 30 bytes. + * + * @return + * AQ agent handle on success otherwise NULL + * + */ + +OCI_EXPORT OCI_Agent * OCI_API OCI_AgentCreate +( + OCI_Connection *con, + const otext *name, + const otext *address +); + +/** + * @brief + * Free an AQ agent object + * + * @param agent - AQ agent handle + * + * @warning + * Only AQ agent handle created with OCI_AgentCreate() should be freed by OCI_AgentFree() + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_AgentFree +( + OCI_Agent *agent +); + +/** + * @brief + * Set the given AQ agent name + * + * @param agent - AQ agent handle + * @param name - AQ agent name + * + * @note + * the AQ agent name is used to identified an message send or recipient when enqueuing/dequeuing + * a message + * + * @note + * the AQ agent name can be any Oracle identifier, up to 30 bytes. + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_AgentSetName +( + OCI_Agent *agent, + const otext *name +); + +/** + * @brief + * Get the given AQ agent name + * + * @param agent - AQ agent handle + * + * @return + * AQ agent name on success otherwise NULL on failure + * + */ + +OCI_EXPORT const otext * OCI_API OCI_AgentGetName +( + OCI_Agent *agent +); + +/** + * @brief + * Set the given AQ agent address + * + * @param agent - AQ agent handle + * @param address - AQ agent address + * + * @note + * the parameter 'address' must be of the form : [schema.]queue_name[\@dblink] + * + * @note + * the AQ agent address can be any Oracle identifier, up to 128 bytes. + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_AgentSetAddress +( + OCI_Agent *agent, + const otext *address +); + +/** + * @brief + * Get the given AQ agent address + * + * @param agent - AQ agent handle + * + * @note + * See OCI_AgentSetAddress() + * + * @return + * AQ agent address on success otherwise NULL on failure + * + */ + +OCI_EXPORT const otext * OCI_API OCI_AgentGetAddress +( + OCI_Agent *agent +); + +/** + * @brief + * Create a queue + * + * @param con - Connection handle + * @param queue_name - Queue name + * @param queue_table - Queue table name + * @param queue_type - Queue type + * @param max_retries - Maximum number of attempts to dequeue a message + * @param retry_delay - Number of seconds between attempts to dequeue a message + * @param retention_time - number of seconds a message is retained in the queue table after + * being dequeued from the queue + * @param dependency_tracking - Parameter reserved for future use by Oracle (MUST be set to FALSE) + * @param comment - Description of the queue + * + * @note + * Parameter 'queue_name' can specify the schema where to create to queue ([schema.]queue_name) + * Queue names cannot be longer than 24 characters (Oracle limit for user queues) + * + * @note + * Possible values for parameter 'queue_type' : + * - OCI_AQT_NORMAL : Normal queue + * - OCI_AQT_EXCEPTION : Exception queue + * - OCI_AQT_NON_PERSISTENT : Non persistent queue + * + * To set default values, pass : + * - queue_type : OCI_AQT_NORMAL + * - max_retries : 0 + * - retry_delay : 0 + * - retention_time : 0 + * - comment : NULL + * + * @note + * this call wraps the PL/SQL procedure DBMS_AQADM.CREATE_QUEUE(). + * Refer to Oracle Streams - Advanced Queuing User's Guide for more details + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_QueueCreate +( + OCI_Connection *con, + const otext *queue_name, + const otext *queue_table, + unsigned int queue_type, + unsigned int max_retries, + unsigned int retry_delay, + unsigned int retention_time, + boolean dependency_tracking, + const otext *comment +); + +/** + * @brief + * Alter the given queue + * + * @param con - Connection handle + * @param queue_name - Queue name + * @param max_retries - Maximum number of attempts to dequeue a message + * @param retry_delay - Number of seconds between attempts to dequeue a message + * @param retention_time - number of seconds a message is retained in the queue table after + * being dequeued from the queue + * @param comment - Description of the queue + * + * @note + * See OCI_QueueCreate() for more details + * + * @warning + * This function updates all attributes handled in the parameter list ! + * + * @note + * this call wraps the PL/SQL procedure DBMS_AQADM.ALTER_QUEUE(). + * Refer to Oracle Streams - Advanced Queuing User's Guide for more details + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_QueueAlter +( + OCI_Connection *con, + const otext *queue_name, + unsigned int max_retries, + unsigned int retry_delay, + unsigned int retention_time, + const otext *comment +); + +/** + * @brief + * Drop the given queue + * + * @param con - Connection handle + * @param queue_name - Queue name + * + * @warning + * A queue can be dropped only if it has been stopped before. + * + * @note + * this call wraps the PL/SQL procedure DBMS_AQADM.DROP_QUEUE(). + * Refer to Oracle Streams - Advanced Queuing User's Guide for more details + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_QueueDrop +( + OCI_Connection *con, + const otext *queue_name +); + +/** + * @brief + * Start the given queue + * + * @param con - Connection handle + * @param queue_name - Queue name + * @param enqueue - Enable enqueue + * @param dequeue - Enable dequeue + * + * @warning + * For exception queues, only enqueuing is allowed + * + * @note + * this call wraps the PL/SQL procedure DBMS_AQADM.START_QUEUE(). + * Refer to Oracle Streams - Advanced Queuing User's Guide for more details + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_QueueStart +( + OCI_Connection *con, + const otext *queue_name, + boolean enqueue, + boolean dequeue +); + +/** + * @brief + * Stop enqueuing or dequeuing or both on the given queue + * + * @param con - Connection handle + * @param queue_name - Queue name + * @param enqueue - Disable enqueue + * @param dequeue - Disable dequeue + * @param wait - Wait for current pending enqueues/dequeues + * + * @warning + * A queue cannot be stopped if there are pending transactions against the queue. + * + * @note + * this call wraps the PL/SQL procedure DBMS_AQADM.STOP_QUEUE(). + * Refer to Oracle Streams - Advanced Queuing User's Guide for more details + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_QueueStop +( + OCI_Connection *con, + const otext *queue_name, + boolean enqueue, + boolean dequeue, + boolean wait +); + +/** + * @brief + * Create a queue table for messages of the given type + * + * @param con - Connection handle + * @param queue_table - Queue table name + * @param queue_payload_type - Message type name + * @param storage_clause - Additional clauses for the table storage + * @param sort_list - Additional columns name to use for sorting + * @param multiple_consumers - Enable multiple consumers for each messages + * @param message_grouping - Specifies if messages are grouped within a transaction + * @param comment - Description of the queue table + * @param primary_instance - primary owner (instance) of the queue table + * @param secondary_instance - Owner of the queue table if the primary instance is not available + * @param compatible - lowest database version with which the queue table is compatible + * + * @note + * Parameter 'queue_table' can specify the schema where to create to queue table ([schema.]queue_table) + * Queue table names cannot be longer than 24 characters (Oracle limit for user queue tables) + * + * @note + * Possible values for parameter 'queue_payload_type' : + * - For Oracle types (UDT) : use the type name ([schema.].type_name) + * - For RAW data : use "SYS.RAW" or "RAW" + * + * @note + * Possible values for parameter 'message_grouping' : + * - OCI_AGM_NONE : each message is treated individually + * - OCI_AGM_TRANSACTIONNAL : all messages enqueued in one transaction are considered part of + * the same group and can be dequeued as a group of related messages. + * + * @note + * Possible values for parameter 'compatible' : + * - "8.0", "8.1", "10.0" + * + * To set default values, pass : + * - storage_clause : NULL + * - sort_list : NULL + * - message_grouping : OCI_AGM_NONE + * - comment : NULL + * - primary_instance : 0 + * - primary_instance : 0 + * - compatible : NULL + * + * @note + * this call wraps the PL/SQL procedure DBMS_AQADM.CREATE_QUEUE_TABLE(). + * Refer to Oracle Streams - Advanced Queuing User's Guide for more details + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_QueueTableCreate +( + OCI_Connection *con, + const otext *queue_table, + const otext *queue_payload_type, + const otext *storage_clause, + const otext *sort_list, + boolean multiple_consumers, + unsigned int message_grouping, + const otext *comment, + unsigned int primary_instance, + unsigned int secondary_instance, + const otext *compatible +); + +/** + * @brief + * Alter the given queue table + * + * @param con - Connection handle + * @param queue_table - Queue table name + * @param comment - Description of the queue table + * @param primary_instance - primary owner (instance) of the queue table + * @param secondary_instance - Owner of the queue table if the primary instance is not available + * + * @note + * See OCI_QueueTableCreate() from more details + * + * @note + * this call wraps the PL/SQL procedure DBMS_AQADM.ALTER_QUEUE_TABLE(). + * Refer to Oracle Streams - Advanced Queuing User's Guide for more details + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_QueueTableAlter +( + OCI_Connection *con, + const otext *queue_table, + const otext *comment, + unsigned int primary_instance, + unsigned int secondary_instance +); + +/** + * @brief + * Drop the given queue table + * + * @param con - Connection handle + * @param queue_table - Queue table name + * @param force - Force the deletion of objects related to the queue table + * + * @note + * Possible values for 'force' : + * - TRUE : all queues using the queue table and their associated propagation schedules are + * dropped automatically + * - FALSE : All the queues using the given queue table must be stopped and dropped before the + * queue table can be dropped. + * + * @note + * this call wraps the PL/SQL procedure DBMS_AQADM.DROP_QUEUE_TABLE(). + * Refer to Oracle Streams - Advanced Queuing User's Guide for more details + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_QueueTableDrop +( + OCI_Connection *con, + const otext *queue_table, + boolean force +); + +/** + * @brief + * Purge messages from the given queue table + * + * @param con - Connection handle + * @param queue_table - Queue table name + * @param purge_condition - Optional SQL based conditions (see notes) + * @param block - Lock all queues using the queue table while doing the purge + * @param delivery_mode - Type of message to purge + * + * @note + * Possible values for parameter 'delivery_mode' : + * - OCI_APM_BUFFERED : purge only buffered messages + * - OCI_APM_PERSISTENT : purge only persistent messages + * - OCI_APM_ALL : purge all messages + * + * @note + * For more information about the SQL purge conditions, refer to + * Oracle Streams - Advanced Queuing User's Guide for more details + * + * @warning + * This feature is only available from ORacle 10gR2. + * This function does nothing and returns TRUE is the server version is < Oracle 10gR2 + * + * @note + * this call wraps the PL/SQL procedure DBMS_AQADM.PURGE_QUEUE_TABLE(). + * Refer to Oracle Streams - Advanced Queuing User's Guide for more details + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_QueueTablePurge +( + OCI_Connection *con, + const otext *queue_table, + const otext *purge_condition, + boolean block, + unsigned int delivery_mode +); + +/** + * @brief + * Migrate a queue table from one version to another + * + * @param con - Connection handle + * @param queue_table - Queue table name + * @param compatible - Database version with witch the queue table has to migrate + * + * @note + * Possible values for parameter 'compatible' : + * - "8.0", "8.1", "10.0" + * + * @note + * this call wraps the PL/SQL procedure DBMS_AQADM.MIGRATE_QUEUE_TABLE(). + * Refer to Oracle Streams - Advanced Queuing User's Guide for more details + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_QueueTableMigrate +( + OCI_Connection *con, + const otext *queue_table, + const otext *compatible +); + +/** + * @} + */ + +/** + * @defgroup OcilibCApiSubscriptions Database Change notifications (DCN or CQN) + * @{ + * + * OCILIB supports Oracle 10gR2 feature Database Change Notifications (DCN) + * also named Continuous Query Notifications (CQN) + * + * This features allows a client application to register notifications + * when some changes are made in a database : + * - Database status changes : startup and shutdown + * - Database objects changes : + * - DDL changes : alter or drop actions + * - DML changes : insert, delete, update actions + * + * This feature can be really useful in applications that hold + * a cache of data. Instead of refreshing data periodically by + * connecting to the server, the application could only refresh + * modified data when necessary or perform specific tasks depending on + * the events. It saves application time, network traffic and can help + * the design of the application logic. + * + * The database status change notification is also interesting to be + * informed of instance startup / shutdown + * + * Check Oracle documentation for more details about this feature + * + * @note + * No active database connection is required to receive the + * notifications as they are handled by the Oracle client using a + * dedicated socket connection to the server + * + * @par Database changes + * + * The client application can be notified of any database status + * change (single DB or multiple DB in a RAC environment). + * + * @par Object changes + * + * The notifications of object changes are based on the registration + * of a query ('select' SQL statement). + * + * Oracle server will notify of any changes of any object that is + * part of the statement result set. + * + * Registering a statement will notify about any changes on its + * result set rows performed after the registration of the query. + * + * The query can be a simple 'select * from table' or a complex + * query involving many tables and/or criteria in the where clause. + * + * For Object changes, the notification can be at : + * - At Object level : only the object name (schema + object) is given + * - At row level : same that object level + RowID of the altered row + * + * @warning + * Trying to use this features with a client/server version < 10gR2 will raise an error + * + * @par Example + * @include notification.c + * + */ + +/** + * @brief + * Register a notification against the given database + * + * @param con - Connection handle + * @param name - Notification name + * @param type - Subscription type + * @param handler - User handler callback + * @param port - Port to use for notifications + * @param timeout - notification timeout + * + * @note + * Parameter 'type' can be one of the following values : + * + * - OCI_CNT_OBJECTS : request for changes at objects (e.g. tables) level (DDL / DML) + * - OCI_CNT_ROWS : request for changes at rows level (DML) + * - OCI_CNT_DATABASES : request for changes at database level (startup, shutdown) + * - OCI_CNT_ALL : request for all changes + * + * @note + * OCI_ENV_EVENTS flag must be passed to OCI_Initialize() to be able to use + * subscriptions + * + * @note + * Requires Oracle Client 10gR2 or above + * + * @note + * Subscription handles are automatically managed by the library + * + * @return + * Subscription handle on success or NULL on failure + * + */ + +OCI_EXPORT OCI_Subscription * OCI_API OCI_SubscriptionRegister +( + OCI_Connection *con, + const otext *name, + unsigned int type, + POCI_NOTIFY handler, + unsigned int port, + unsigned int timeout +); + +/** + * @brief + * Unregister a previously registered notification + * + * @param sub - Subscription handle + * + * @note + * OCI_Cleanup() will automatically unregister any registered subscriptions + * + * @note + * If the database connection passed to OCI_SubscriptionRegister() + * has been closed by the time that the application calls + * OCI_SubscriptionUnregister, the library internally reconnects + * to the given database, performs the unregistration and then disconnects + * + * @note + * OCI_ENV_EVENTS flag must be passed to OCI_Initialize() to be able to use + * subscriptions + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_SubscriptionUnregister +( + OCI_Subscription *sub +); + +/** + * @brief + * Add a statement to the notification to monitor + * + * @param sub - Subscription handle + * @param stmt - Statement handle + * + * @note + * The given statement must be prepared but not executed before being passed to this function. + * OCI_SubscriptionAddStatement() executes the statement and register it for notifications + * + * @note + * OCI_ENV_EVENTS flag must be passed to OCI_Initialize() to be able to use + * subscriptions + * + * @note + * The given statement must hold a 'SELECT' SQL statement + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_SubscriptionAddStatement +( + OCI_Subscription *sub, + OCI_Statement *stmt +); + +/** + * @brief + * Return the name of the given registered subscription + * + * @param sub - Subscription handle + * + * @note + * OCI_ENV_EVENTS flag must be passed to OCI_Initialize() to be able to use + * subscriptions + * + */ + +OCI_EXPORT const otext * OCI_API OCI_SubscriptionGetName +( + OCI_Subscription *sub +); + +/** + * @brief + * Return the port used by the notification + * + * @param sub - Subscription handle + * + * @note + * OCI_ENV_EVENTS flag must be passed to OCI_Initialize() to be able to use + * subscriptions + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_SubscriptionGetPort +( + OCI_Subscription *sub +); + +/** + * @brief + * Return the timeout of the given registered subscription + * + * @param sub - Subscription handle + * + * @note + * OCI_ENV_EVENTS flag must be passed to OCI_Initialize() to be able to use + * subscriptions + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_SubscriptionGetTimeout +( + OCI_Subscription *sub +); + +/** + * @brief + * Return the connection handle associated with a subscription handle + * + * @param sub - Subscription handle + * + * @note + * It may return a NULL handle if the connection used in OCI_SubscriptionRegister has been closed. + * + */ + +OCI_EXPORT OCI_Connection * OCI_API OCI_SubscriptionGetConnection +( +OCI_Subscription *sub +); + +/** + * @brief + * Return the type of event reported by a notification + * + * @param event - Event handle + * + * @note + * The returned value can be one of the following values : + * + * - OCI_ENT_STARTUP : a database has been started up + * - OCI_ENT_SHUTDOWN : a database has been shut down + * - OCI_ENT_SHUTDOWN_ANY : a database has been shut down (RAC) + * - OCI_ENT_DROP_DATABASE : a database has been dropped + * - OCI_ENT_DEREGISTER : the notification is timed out + * - OCI_ENT_OBJECT_CHANGED : a database object has been modified + * + * @note + * OCI_EventGetDatabase() returns the affected database + * + * @note + * OCI_ENV_EVENTS flag must be passed to OCI_Initialize() to be able to use + * subscriptions + * + * @note + * OCI_EventGetObject() returns the affected object + * ('schema_name'.'object_name') + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_EventGetType +( + OCI_Event *event +); + +/** + * @brief + * Return the type of operation reported by a notification + * + * @param event - Event handle + * + * @note + * This call is only valid when OCI_EventGetType() reports the + * event type OCI_ENT_OBJECT_CHANGED + * + * @note + * The returned value can be one of the following values : + * + * - OCI_ONT_INSERT : an insert has been performed + * - OCI_ONT_UPDATE : an update has been performed + * - OCI_ONT_DELETE : a delete has been performed + * - OCI_ONT_ALTER : an alter has been performed + * - OCI_ONT_DROP : a drop has been performed + * - OCI_ONT_GENERIC : generic undefined action + * + * @note + * OCI_EventGetDatabase() returns the affected database + * + * @note + * OCI_EventGetObject() returns the affected object ('schema_name'.'object_name') + * + * @note + * OCI_ENV_EVENTS flag must be passed to OCI_Initialize() to be able to use + * subscriptions + * + * @note + * if OCI_CNT_ROWS is passed to OCI_SubscriptionRegister(), + * the rowid of the altered row can be retrieved with OCI_EventGetRowid() + * + */ + +OCI_EXPORT unsigned int OCI_API OCI_EventGetOperation +( + OCI_Event *event +); + +/** + * @brief + * Return the name of the database that generated the event + * + * @param event - Event handle + * + * @note + * OCI_ENV_EVENTS flag must be passed to OCI_Initialize() to be able to use + * subscriptions + * + */ + +OCI_EXPORT const otext * OCI_API OCI_EventGetDatabase +( + OCI_Event *event +); + +/** + * @brief + * Return the name of the object that generated the event + * + * @param event - Event handle + * + * @note + * OCI_ENV_EVENTS flag must be passed to OCI_Initialize() to be able to use + * subscriptions + * + */ + +OCI_EXPORT const otext * OCI_API OCI_EventGetObject +( + OCI_Event *event +); + +/** + * @brief + * Return the rowid of the altered database object row + * + * @param event - Event handle + * + * @note + * OCI_ENV_EVENTS flag must be passed to OCI_Initialize() to be able to use + * subscriptions + * + */ + +OCI_EXPORT const otext * OCI_API OCI_EventGetRowid +( + OCI_Event *event +); + +/** + * @brief + * Return the subscription handle that generated this event + * + * @param event - Event handle + * + * @note + * OCI_ENV_EVENTS flag must be passed to OCI_Initialize() to be able to use + * subscriptions + * + */ + +OCI_EXPORT OCI_Subscription * OCI_API OCI_EventGetSubscription +( + OCI_Event *event +); + +/** + * @} + */ + +/** + * @defgroup OcilibCApiInstancesManagement Remote Instance startup/shutdown + * @{ + * + * OCILIB supports Oracle 11g client features for manipulating remote Oracle instances. + * + * Oracle instances (on the same computer or on a remote server) can be : + * + * - started with OCI_DatabaseStartup() + * - shutdown with OCI_DatabaseShutdown() + * + * Several options are handled for this actions + * + * @par Example + * @include instance.c + * + */ + +/** + * @brief + * Start a database instance + * + * @param db - Oracle Service Name + * @param user - Oracle User name + * @param pwd - Oracle User password + * @param sess_mode - Session mode + * @param start_mode - Start mode + * @param start_flag - Start flags + * @param spfile - Client-side spfile to start up the database (optional) + * + * Possible values for parameter sess_mode : + * - OCI_SESSION_SYSDBA + * - OCI_SESSION_SYSOPER + * + * @note + * External credentials are supported by supplying a null value for the 'user' and 'pwd' parameters + * If the param 'db' is NULL then a connection to the default local DB is done + * + * Possible (combined) values for parameter start_mode : + * - OCI_DB_SPM_START : start the instance + * - OCI_DB_SPM_MOUNT : mount the instance + * - OCI_DB_SPM_OPEN : open the instance + * - OCI_DB_SPM_FULL : start, mount and open the instance + * + * Possible (combined) values for parameter start_flag : + * - OCI_DB_SPF_DEFAULT : default startup + * - OCI_DB_SPF_FORCE : shuts down a running instance (if needed) using + * ABORT command and starts a new instance + * - OCI_DB_SPF_RESTRICT : allows database access only to users with both + * CREATE SESSION and RESTRICTED SESSION privileges + * + * @note + * If the client side spfile is not provided, the database is started with its server-side spfile + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_DatabaseStartup +( + const otext *db, + const otext *user, + const otext *pwd, + unsigned int sess_mode, + unsigned int start_mode, + unsigned int start_flag, + const otext *spfile +); + +/** + * @brief + * Shutdown a database instance + * + * @param db - Oracle Service Name + * @param user - Oracle User name + * @param pwd - Oracle User password + * @param sess_mode - Session mode + * @param shut_mode - Shutdown mode + * @param shut_flag - Shutdown flag + * + * + * @warning + * Possible values for parameter sess_mode : + * - OCI_SESSION_SYSDBA + * - OCI_SESSION_SYSOPER + * + * @note + * External credentials are supported by supplying a null value for the 'user' and 'pwd' parameters + * If the param 'db' is NULL then a connection to the default local DB is done + * + * Possible (combined) values for parameter shut_mode : + * - OCI_DB_SDM_SHUTDOWN : shutdown the instance + * - OCI_DB_SDM_CLOSE : close the instance + * - OCI_DB_SDM_DISMOUNT : dismount the instance + * - OCI_DB_SDM_FULL : shutdown, close and dismount the instance + * + * Possible (exclusive) value for parameter shut_flag (from Oracle documentation) : + * - OCI_DB_SDF_DEFAULT : + * - Further connects are prohibited. + * - Waits for users to disconnect from the database + * - OCI_DB_SDF_TRANS : + * - Further connects are prohibited + * - No new transactions are allowed. + * - Waits for active transactions to complete + * - OCI_DB_SDF_TRANS_LOCAL : + * - Further connects are prohibited + * - No new transactions are allowed. + * - Waits only for local transactions to complete + * - OCI_DB_SDF_IMMEDIATE : + * - Does not wait for current calls to complete or users to disconnect from the database. + * - All uncommitted transactions are terminated and rolled back + * - OCI_DB_SDF_ABORT : + * - Does not wait for current calls to complete or users to disconnect from the database. + * - All uncommitted transactions are terminated and are not rolled back. + * - This is the fastest possible way to shut down the database, but the next + * database startup may require instance recovery. + * - Therefore, this option should be used only in unusual circumstances + * + * @return + * TRUE on success otherwise FALSE + * + */ + +OCI_EXPORT boolean OCI_API OCI_DatabaseShutdown +( + const otext *db, + const otext *user, + const otext *pwd, + unsigned int sess_mode, + unsigned int shut_mode, + unsigned int shut_flag +); + +/** + * @} + */ + +/** + * @defgroup OcilibCApiRawHandles Using OCI Handles directly + * @{ + * + * OCILIB conception was focused on a full but closed encapsulation of OCI. + * + * All OCI headers, data types, prototypes are imported internally + * (linkage or runtime import). + * + * OCILIB public interface exposes only ISO C scalar types and OCILIB objects + * + * OCI is a wide and rich API that can deals with hundreds of options ! + * + * OCILIB tries to implements most of it. But, sometimes in really specific + * contexts, it might be necessary to directly call OCI APIs in order to use + * uncovered OCI functionalities or options + * + * OCILIB proposes now a set of functions to retrieve its internal OCI handles + * + * @warning + * + * The OCILIB author strongly advises against the use of internal handles, + * unless there is no other way to accomplish the task + * + * @warning + * + * Using these handles for direct application calls to OCI might lead + * to OCILIB instability or crash if handles are incorrectly used ! + * + */ + +/** + * @brief + * Return the OCI Environment Handle (OCIEnv *) of OCILIB library + * + * @return + * OCI Environment handle otherwise NULL + * + */ + +OCI_EXPORT const void * OCI_API OCI_HandleGetEnvironment +( + void +); + +/** + * @brief + * Return the OCI Context Handle (OCISvcCtx *) of an OCILIB OCI_Connection object + * + * @param con - Connection handle + * + * @return + * OCI Context handle otherwise NULL + * + */ + +OCI_EXPORT const void * OCI_API OCI_HandleGetContext +( + OCI_Connection *con +); + +/** + * @brief + * Return the OCI Server Handle (OCIServer *) of an OCILIB OCI_Connection object + * + * @param con - Connection handle + * + * @return + * OCI Server handle otherwise NULL + * + */ + +OCI_EXPORT const void * OCI_API OCI_HandleGetServer +( + OCI_Connection *con +); + +/** + * @brief + * Return the OCI Error Handle (OCIError *) of an OCILIB OCI_Connection object + * + * @param con - Connection handle + * + * @return + * OCI Error handle otherwise NULL + * + */ + +OCI_EXPORT const void * OCI_API OCI_HandleGetError +( + OCI_Connection *con +); + +/** + * @brief + * Return the OCI Session Handle (OCISession *) of an OCILIB OCI_Connection object + * + * @param con - Connection handle + * + * @return + * OCI Session handle otherwise NULL + * + */ + +OCI_EXPORT const void * OCI_API OCI_HandleGetSession +( + OCI_Connection *con +); + +/** + * @brief + * Return the OCI Transaction Handle (OCITrans *) of an OCILIB OCI_Transaction object + * + * @param trans - Transaction handle + * + * @return + * OCI Transaction handle otherwise NULL + * + */ + +OCI_EXPORT const void * OCI_API OCI_HandleGetTransaction +( + OCI_Transaction *trans +); + +/** + * @brief + * Return the OCI Statement Handle (OCIStmt *) of an OCILIB OCI_Statement object + * + * @param stmt - Statement handle + * + * @return + * OCI Statement handle otherwise NULL + * + */ + +OCI_EXPORT const void * OCI_API OCI_HandleGetStatement +( + OCI_Statement *stmt +); + +/** + * @brief + * Return the OCI LobLocator Handle (OCILobLocator *) of an OCILIB OCI_Lob object + * + * @param lob - Lob handle + * + * @return + * OCI LobLocator handle otherwise NULL + * + */ + +OCI_EXPORT const void * OCI_API OCI_HandleGetLob +( + OCI_Lob *lob +); + +/** + * @brief + * Return the OCI LobLocator Handle (OCILobLocator *) of an OCILIB OCI_File object + * + * @param file - File handle + * + * @return + * OCI LobLocator handle otherwise NULL + * + */ + +OCI_EXPORT const void * OCI_API OCI_HandleGetFile +( + OCI_File *file +); + +/** + * @brief + * Return the OCI Date Handle (OCIDate *) of an OCILIB OCI_Date object + * + * @param date - Date handle + * + * @return + * OCI Date handle otherwise NULL + * + */ + +OCI_EXPORT const void * OCI_API OCI_HandleGetDate +( + OCI_Date *date +); + +/** + * @brief + * Return the OCI Date time Handle (OCIDatetime *) of an OCILIB OCI_Timestamp object + * + * @param tmsp - Timestamp handle + * + * @return + * OCI Date time handle otherwise NULL + * + */ + +OCI_EXPORT const void * OCI_API OCI_HandleGetTimestamp +( + OCI_Timestamp *tmsp +); + +/** + * @brief + * Return OCI Interval Handle (OCIInterval *) of an OCILIB OCI_Interval object + * + * @param itv - Interval handle + * + * @return + * OCI Interval handle otherwise NULL + * + */ + +OCI_EXPORT const void * OCI_API OCI_HandleGetInterval +( + OCI_Interval *itv +); + +/** + * @brief + * Return OCI Object Handle (void *) of an OCILIB OCI_Object object + * + * @param obj - Object handle + * + * @return + * OCI Object handle otherwise NULL + * + */ + +OCI_EXPORT const void * OCI_API OCI_HandleGetObject +( + OCI_Object *obj +); + +/** + * @brief + * Return OCI Collection Handle (OCIColl *) of an OCILIB OCI_Coll object + * + * @param coll - Collection handle + * + * @return + * OCI Collection handle otherwise NULL + * + */ + +OCI_EXPORT const void * OCI_API OCI_HandleGetColl +( + OCI_Coll *coll +); + +/** + * @brief + * Return OCI Ref Handle (OCIRef *) of an OCILIB OCI_Ref object + * + * @param ref - Ref handle + * + * @return + * OCI Ref handle otherwise NULL + * + */ + +OCI_EXPORT const void * OCI_API OCI_HandleGetRef +( + OCI_Ref *ref +); + +/** + * @brief + * Return OCI Mutex handle (OCIThreadMutex *) of an OCILIB OCI_Mutex object + * + * @param mutex - Mutex handle + * + * @return + * OCI Mutex handle otherwise NULL + * + */ + +OCI_EXPORT const void * OCI_API OCI_HandleGetMutex +( + OCI_Mutex *mutex +); + +/** + * @brief + * Return OCI Thread ID (OCIThreadId *) of an OCILIB OCI_Thread object + * + * @param thread - Thread handle + * + * @return + * OCI Thread ID otherwise NULL + * + */ + +OCI_EXPORT const void * OCI_API OCI_HandleGetThreadID +( + OCI_Thread *thread +); + +/** + * @brief + * Return OCI Thread handle (OCIThreadHandle *) of an OCILIB OCI_Thread object + * + * @param thread - Thread handle + * + * @return + * OCI Thread handle otherwise NULL + * + */ + +OCI_EXPORT const void * OCI_API OCI_HandleGetThread +( + OCI_Thread *thread +); + +/** + * @brief + * Return OCI DirectPath Context handle (OCIDirPathCtx *) of an OCILIB OCI_DirPath object + * + * @param dp - DirectPath handle + * + * @return + * OCI DirectPath Context handle otherwise NULL + * + */ + +OCI_EXPORT const void * OCI_API OCI_HandleGetDirPathCtx +( + OCI_DirPath *dp +); + +/** + * @brief + * Return OCI DirectPath Column array handle (OCIDirPathColArray *) of an OCILIB OCI_DirPath object + * + * @param dp - DirectPath handle + * + * @return + * OCI DirectPath Column array handle otherwise NULL + * + */ + +OCI_EXPORT const void * OCI_API OCI_HandleGetDirPathColArray +( + OCI_DirPath *dp +); + +/** + * @brief + * Return OCI DirectPath Stream handle (OCIDirPathStream *) of an OCILIB OCI_DirPath object + * + * @param dp - DirectPath handle + * + * @return + * OCI DirectPath Stream handle otherwise NULL + * + */ + +OCI_EXPORT const void * OCI_API OCI_HandleGetDirPathStream +( + OCI_DirPath *dp +); + +/** + * @brief + * Return OCI Subscription handle (OCISubscription *) of an OCILIB OCI_Subscription object + * + * @param sub - Subscription handle + * + * @return + * OCI Subscription otherwise NULL + * + */ + +OCI_EXPORT const void * OCI_API OCI_HandleGetSubscription +( + OCI_Subscription *sub +); + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +/** +* @defgroup OcilibCApiEnvironmentVariables Environment Variables +* @{ +* +* Some environment variables can be defined in order to activate specific features +* They must have one of the following values (case insensitive) for being enabled : "TRUE", "1" +* +* - "OCILIB_WORKAROUND_UTF16_COLUMN_NAME": This variable enables an experimental workaround for the Oracle bug 9838993: +* - When calling OCI_GetResultset(), OCILIB queries column names against the Oracle Client +* - Unicode builds of OCILIB initialize Oracle client into UTF16 mode +* - In such environments, a memory leak occurs when statements are re-executed multiple times followed by OCI_GetResultset() +* - This workaround retrieves column names using direct access to undocumented Oracle structures instead of using buggy Oracle calls +* - As Oracle undocumented structures may change upon versions, this workaround is provided as-is in case the Oracle bug represents an real issue for applications +* - This workaround has been tested with 32bit and 64bit Oracle 12g clients and Unicode OCILIB builds +*/ + +#define VAR_OCILIB_WORKAROUND_UTF16_COLUMN_NAME "OCILIB_WORKAROUND_UTF16_COLUMN_NAME" + +/** +* @} +*/ + +/** + * @defgroup OcilibCApiDemoApplication OCILIB main demo application code + * @{ + * + * Portable Main demo application header + * @include ocilib_demo.h + * + * Portable Main demo application source + * @include ocilib_demo.c + * + * @} + */ + +/* Compatibility with sources built with older versions of OCILIB */ + +/* macros added in version 2.3.0 */ + +#define OCI_CreateConnection OCI_ConnectionCreate +#define OCI_FreeConnection OCI_ConnectionFree +#define OCI_CreateStatement OCI_StatementCreate +#define OCI_FreeStatement OCI_StatementFree + +/* macros added in version 2.4.0 */ + +#define OCI_CreateTransaction OCI_TransactionCreate +#define OCI_FreeTransaction OCI_TransactionFree +#define OCI_CreateHashTable OCI_HashCreate +#define OCI_FreeHashTable OCI_HashFree + +/* macros added in version 3.0.0 */ + +#define OCI_GetColumnName OCI_ColumnGetName +#define OCI_GetColumnType OCI_ColumnGetType +#define OCI_GetColumnCharsetForm OCI_ColumnGetCharsetForm +#define OCI_GetColumnSQLType OCI_ColumnGetSQLType +#define OCI_GetColumnFullSQLType OCI_ColumnGetFullSQLType +#define OCI_GetColumnSize OCI_ColumnGetSize +#define OCI_GetColumnScale OCI_ColumnGetScale +#define OCI_GetColumnPrecision OCI_ColumnGetPrecision +#define OCI_GetColumnFractionnalPrecision OCI_ColumnGetFractionnalPrecision +#define OCI_GetColumnLeadingPrecision OCI_ColumnGetLeadingPrecision +#define OCI_GetColumnNullable OCI_ColumnGetNullable +#define OCI_GetColumnCharUsed OCI_ColumnGetCharUsed + +#define OCI_GetFormatDate(s) OCI_GetDefaultFormatDate(OCI_StatementGetConnection(s)) +#define OCI_SetFormatDate(s, f) OCI_SetDefaultFormatDate(OCI_StatementGetConnection(s), f) + +#define OCI_ERR_API OCI_ERR_ORACLE + +/* macros added in version 3.2.0 */ + +#define OCI_ERR_NOT_SUPPORTED OCI_ERR_DATATYPE_NOT_SUPPORTED +#define OCI_SCHEMA_TABLE OCI_TIF_TABLE +#define OCI_SCHEMA_VIEW OCI_TIF_VIEW +#define OCI_SCHEMA_TYPE OCI_TIF_TYPE + +#define OCI_Schema OCI_TypeInfo + +#define OCI_SchemaGet OCI_TypeInfoGet +#define OCI_SchemaFree OCI_TypeInfoFree +#define OCI_SchemaGetColumnCount OCI_TypeInfoGetColumnCount +#define OCI_SchemaGetColumn OCI_TypeInfoGetColumn +#define OCI_SchemaGetName OCI_TypeInfoGetName + +#define OCI_ColumnGetFractionnalPrecision OCI_ColumnGetFractionalPrecision + +/* macro added in version 3.3.0 */ + +/** + * @brief + * [OBSOLETE] Set the bind variable at the given index to null + * + * @param stmt - Statement handle + * @param index - Index of the bind variable + * + * @warning + * This call is obsolete ! Use OCI_BindSetNull() instead. + * + * @note + * There is no notion of null value in C. + * It's necessary to explicitly tell Oracle that the bind has a null value. + * It must be done before an OCI_Execute() call + * + * @warning + * Index starts with 1 + * + * @note + * For handled based data types (non scalar types), OCILIB performs an extra + * check on handles and set the bind status to null is the handle is null + * + * @return + * TRUE on success otherwise FALSE + */ + +#define OCI_SetNull(stmt, index) \ + OCI_BindSetNull(OCI_GetBind(stmt, index)) + +/** + * @brief + * [OBSOLETE] Set the bind variable of the given name to null + * + * @param stmt - Statement handle + * @param name - Bind variable name + * + * @warning + * This call is obsolete ! Use OCI_BindSetNull() instead. + * + * @note + * There is no notion of null value in C. + * it's necessary to explicitly tell Oracle that the bind has a null value. + * It must be done before an OCI_Execute() call + * + * @note + * For handled based data types (non scalar types), OCILIB performs an extra + * check on handles and set the bind status to null is the handle is null + * + * @return + * TRUE on success otherwise FALSE + */ + +#define OCI_SetNull2(stmt, name) \ + OCI_BindSetNull(OCI_GetBind2(stmt, name)) + +/** + * @brief + * [OBSOLETE] Set to null the bind variable at the given position in an input array + * + * @param stmt - Statement handle + * @param index - Index of the bind variable + * @param position - Position in the array + * + * @warning + * This call is obsolete ! Use OCI_BindSetNullAtPos() instead. + * + * @note + * There is no notion of null value in C. + * It's necessary to explicitly tell Oracle that the bind has a null value. + * It must be done before an OCI_Execute() call + * + * @warning + * Index and Position starts with 1 + * + * @note + * For handled based data types (non scalar types), OCILIB performs an extra + * check on handles and set the bind status to null is the handle is null + * + * @return + * TRUE on success otherwise FALSE + * + */ + +#define OCI_SetNullAtPos(stmt, index, position) \ + OCI_BindSetNullAtPos(OCI_GetBind(stmt, index), position) + +/** + * @brief + * [OBSOLETE] Set to null the bind variable of the given name in an input array + * + * @param stmt - Statement handle + * @param name - Bind variable name + * @param position - Position in the array + * + * @warning + * This call is obsolete ! Use OCI_BindSetNullAtPos() instead. + * + * @note + * There is no notion of null value in C. + * It's necessary to explicitly tell Oracle that the bind has a null value. + * It must be done before an OCI_Execute() call + * + * @warning + * Position starts with 1 + * + * @note + * For handled based data types (non scalar types), OCILIB performs an extra + * check on handles and set the bind status to null is the handle is null + * + * @return + * TRUE on success otherwise FALSE + * + */ + +#define OCI_SetNullAtPos2(stmt, name, position) \ + OCI_BindSetNullAtPos(OCI_GetBind2(stmt, name), position) + +/* macro added in version 3.4.0 */ + +#define OCI_8 OCI_8_1 +#define OCI_9 OCI_9_0 +#define OCI_10 OCI_10_1 +#define OCI_11 OCI_11_1 + +/* macro added in version 3.6.0 */ + +#define OCI_CHAR_UNICODE OCI_CHAR_WIDE +#define OCI_CSF_CHARSET OCI_CSF_DEFAULT + +/* macro added in version 3.7.0 */ + +#define OCI_ConnPool OCI_Pool + +#define OCI_ConnPoolCreate(db, us, pw, mo, mi, ma, in) \ + OCI_PoolCreate(db, us, pw, OCI_POOL_CONNECTION, mo, mi, ma, in) + +#define OCI_ConnPoolGetConnection(p) \ + OCI_PoolGetConnection(p, NULL) + +#define OCI_ConnPoolFree OCI_PoolFree +#define OCI_ConnPoolGetTimeout OCI_PoolGetConnection +#define OCI_ConnPoolSetTimeout OCI_PoolSetTimeout +#define OCI_ConnPoolGetNoWait OCI_PoolGetNoWait +#define OCI_ConnPoolSetNoWait OCI_PoolSetNoWait +#define OCI_ConnPoolGetBusyCount OCI_PoolGetBusyCount +#define OCI_ConnPoolGetOpenedCount OCI_PoolGetOpenedCount +#define OCI_ConnPoolGetMin OCI_PoolGetMin +#define OCI_ConnPoolGetMax OCI_PoolGetMax +#define OCI_ConnPoolGetIncrement OCI_PoolGetIncrement + +/* macro added in version 3.8.0 */ + +#define OCI_ObjectGetTimeStamp OCI_ObjectGetTimestamp +#define OCI_ElemGetTimeStamp OCI_ElemGetTimestamp +#define OCI_TimestampSysTimeStamp OCI_TimestampSysTimestamp + +/* macro added in version 4.0.0 */ + +#define OCI_CollSetAt OCI_CollSetElem +#define OCI_CollGetAt OCI_CollGetElem +#define OCI_CollGetAt2 OCI_CollGetElem2 + +#define OCI_GetCharsetMetaData OCI_GetCharset +#define OCI_GetCharsetUserData OCI_GetCharset +#define OCI_SIZE_TRACE_INF0 OCI_SIZE_TRACE_INFO + +#define MT(x) OTEXT(x) +#define mtext otext +#define DT(x) OTEXT(x) +#define dtext otext + +#define mtsdup ostrdup +#define mtscpy ostrcpy +#define mtsncpy ostrncpy +#define mtscat ostrcat +#define mtsncat ostrncat +#define mtslen ostrlen +#define mtscmp ostrcmp +#define mtscasecmp ostrcasecmp +#define mtsprintf osprintf +#define mtstol ostrtol +#define mtsscanf osscanf + +#define dtsdup ostrdup +#define dtscpy ostrcpy +#define dtsncpy ostrncpy +#define dtscat ostrcat +#define dtsncat ostrncat +#define dtslen ostrlen +#define dtscmp ostrcmp +#define dtscasecmp ostrcasecmp +#define dtsprintf osprintf +#define dtstol ostrtol +#define dtsscanf osscanf + +/* macro added in version 4.1.0 */ + +#define OCI_SetDefaultFormatDate(con, fmt) OCI_SetFormat(con, OCI_FMT_DATE, fmt) +#define OCI_SetDefaultFormatNumeric(con, fmt) OCI_SetFormat(con, OCI_FMT_NUMERIC, fmt) + +#define OCI_GetDefaultFormatDate(con) OCI_GetFormat(con, OCI_FMT_DATE) +#define OCI_GetDefaultFormatNumeric(con) OCI_GetFormat(con, OCI_FMT_NUMERIC) + +#define OCI_STRING_FORMAT_NUM_BIN OCI_STRING_FORMAT_NUM_BDOUBLE + +/** + * @} + */ + +#endif /* OCILIB_H_INCLUDED */ + diff --git a/ocilib/4.4.0/Linux-x86_64/libocilib.so.4 b/ocilib/4.4.0/Linux-x86_64/libocilib.so.4 new file mode 100755 index 0000000000000000000000000000000000000000..8808902793b62f9cba57453d0ae93459e2f40272 GIT binary patch literal 1857424 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ń{TrFq-{R-%Lc-K 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 z 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